diff --git a/.eslintrc.json b/.eslintrc.json index b2fbd14b..d4f84741 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -3,10 +3,6 @@ "plugin:@typescript-eslint/recommended" ], "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "tsconfig.json", - "sourceType": "module" - }, "plugins": [ "@typescript-eslint" ], diff --git a/CHANGES.md b/CHANGES.md index 0ccf1ebe..50f78de3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,9 @@ -## 1.0.0-alpha -* Migrated the code to typescript +## 1.1.0 +* Vite build migration + +## 1.0.0 +* Typescript migration +* Performance improvements ## 0.2 * TypeScript definitions added diff --git a/HelloWorld.js b/HelloWorld.ts similarity index 60% rename from HelloWorld.js rename to HelloWorld.ts index ce379762..1b4f0e74 100644 --- a/HelloWorld.js +++ b/HelloWorld.ts @@ -1,24 +1,6 @@ /* * MIT License - * Copyright (c) 2019 Erin Catto - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. + * Copyright (c) Erin Catto, Ali Shakiba */ /* @@ -31,19 +13,19 @@ * To run this example simply run `node HelloWorld.js` from command line. */ -var planck = require('./dist/planck') - -var Vec2 = planck.Vec2; +import { Box, World, } from "./src"; // Define the gravity vector. -var gravity = Vec2(0.0, -10.0); +var gravity = {x: 0.0, y: -10.0}; // Construct a world object, which will hold and simulate the rigid bodies. -var world = planck.World(gravity); +var world = new World({ + gravity: gravity +}); // Define the ground body. var groundBodyDef = { - position: Vec2(0.0, -10.0) + position: {x: 0.0, y: -10.0} }; // Call the body factory which allocates memory for the ground body @@ -53,20 +35,19 @@ var groundBody = world.createBody(groundBodyDef); // Define the ground box shape. // The extents are the half-widths of the box. -var groundBox = planck.Box(50.0, 10.0); +var groundBox = new Box(50.0, 10.0); // Add the ground fixture to the ground body. groundBody.createFixture(groundBox, 0.0); // Define the dynamic body. We set its position and call the body factory. -var bodyDef = { - type: 'dynamic', - position: Vec2(0.0, 4.0), -} -var body = world.createBody(bodyDef); +var body = world.createBody({ + type: "dynamic", + position: {x:0.0, y: 4.0}, +}); // Define another box shape for our dynamic body. -var dynamicBox = planck.Box(1.0, 1.0); +var dynamicBox = new Box(1.0, 1.0); // Define the dynamic body fixture. var fixtureDef = { diff --git a/build-utils/declarationTransformer.js b/build-utils/declarationTransformer.js deleted file mode 100644 index 4435264e..00000000 --- a/build-utils/declarationTransformer.js +++ /dev/null @@ -1,157 +0,0 @@ -const ts = require('typescript'); - -module.exports = options => context => node => { - return ts.visitEachChild(node, (node) => visitor(context.factory, node, options), context); -} - -function visitor(factory, node, options) { - if (!ts.isClassDeclaration(node) || - !isClassIncluded(node.name.escapedText, options)) { - return node; - } - // if (isClassDerived(node)) { - // // workaround for https://github.com/microsoft/TypeScript/issues/46503 - // return splitClassIntoConstAndInterface(factory, node); - // } - return createNodeWithFactories(factory, node); -} - -function isClassIncluded(className, options) { - return options.classes.includes(className); -} - -function isClassDerived(node) { - return node.heritageClauses[0] !== undefined; -} - -function splitClassIntoConstAndInterface(factory, node) { - return [ - createConstNodeWithStaticMethods(factory, node), - createInterfaceWithMethods(factory, node) - ]; -} - -function createConstNodeWithStaticMethods(factory, node) { - return factory.createVariableStatement( - [factory.createModifier(ts.SyntaxKind.DeclareKeyword)], - factory.createVariableDeclarationList( - [factory.createVariableDeclaration( - node.name, - undefined, - factory.createTypeLiteralNode([ - // constructors - ...node.members - .filter(ts.isConstructorDeclaration) - .flatMap(member => [ - factory.createConstructSignature( - undefined, - member.parameters, - factory.createTypeReferenceNode( - node.name, - undefined - ) - ), - factory.createCallSignature( - undefined, - member.parameters, - factory.createTypeReferenceNode( - node.name, - undefined - ) - ) - ].map(node => copyComments(node, member)) - ), - // static properties - ...node.members - .filter(member => hasModifier(ts.SyntaxKind.StaticKeyword, member)) - .filter(member => !hasModifier(ts.SyntaxKind.PrivateKeyword, member)) - .map(member => declarationToSignature(factory, member)) - ] - ), - undefined - )], - ts.NodeFlags.Const | ts.NodeFlags.Ambient | ts.NodeFlags.ContextFlags - ) - ); -} - -function createInterfaceWithMethods(factory, node) { - const result = factory.createInterfaceDeclaration( - undefined, - [factory.createModifier(ts.SyntaxKind.DeclareKeyword)], - node.name, - undefined, - node.heritageClauses, - // instance properties - node.members - .filter(member => !ts.isConstructorDeclaration(member)) - .filter(member => !hasModifier(ts.SyntaxKind.StaticKeyword, member)) - .filter(member => !hasModifier(ts.SyntaxKind.PrivateKeyword, member)) - .map(member => declarationToSignature(factory, member)) - ); - return copyComments(result, node); -} - -function hasModifier(kind, node) { - return node.modifiers?.some?.(modifier => modifier.kind === kind); -} - -function declarationToSignature(factory, node) { - let result; - switch (node.kind) { - case ts.SyntaxKind.PropertyDeclaration: - result = factory.createPropertySignature( - undefined, - node.name, - undefined, - node.type - ); - break; - case ts.SyntaxKind.MethodDeclaration: - result = factory.createMethodSignature( - undefined, - node.name, - undefined, - undefined, - node.parameters, - node.type - ); - break; - default: - throw new Error(`Could not convert node of kind ${node.kind} to signature.`); - } - return copyComments(result, node); -} - -function createNodeWithFactories(factory, node) { - return [ - ...node.members - .filter(ts.isConstructorDeclaration) - .map(member => member.parameters) - .map(parameters => createFunctionDeclaration(factory, node, parameters)), - node - ]; -} - -function createFunctionDeclaration(factory, node, parameters) { - const result = factory.createFunctionDeclaration( - undefined, - [factory.createModifier(ts.SyntaxKind.DeclareKeyword)], - undefined, - node.name, - undefined, - parameters, - factory.createTypeReferenceNode( - node.name, - undefined - ), - undefined - ); - return copyComments(result, node); -} - -function copyComments(node, original) { - ts.setSyntheticLeadingComments(node, ts.getSyntheticLeadingComments(original)); - ts.setSyntheticTrailingComments(node, ts.getSyntheticTrailingComments(original)); - return node; -} diff --git a/build-utils/license.js b/build-utils/license.js deleted file mode 100644 index 2ee355f3..00000000 --- a/build-utils/license.js +++ /dev/null @@ -1,25 +0,0 @@ -const version = process.env.npm_package_version; - -module.exports = ` -Planck.js v${version} -@license The MIT license -@copyright Copyright (c) 2023 Erin Catto, Ali Shakiba - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -`; diff --git a/dist/planck-with-testbed.d.ts b/dist/planck-with-testbed.d.ts index 7a2c7033..a7ab3974 100644 --- a/dist/planck-with-testbed.d.ts +++ b/dist/planck-with-testbed.d.ts @@ -1,439 +1,445 @@ -interface Vec2Value { - x: number; - y: number; +// Generated by dts-bundle-generator v9.5.1 + +/** 2D vector */ +export interface Vec2Value { + x: number; + y: number; } -declare function Vec2(x: number, y: number): Vec2; -declare function Vec2(obj: { - x: number; - y: number; -}): Vec2; -declare function Vec2(): Vec2; -declare class Vec2 { - x: number; - y: number; - constructor(x: number, y: number); - constructor(obj: { - x: number; - y: number; - }); - constructor(); - static zero(): Vec2; - /** @hidden */ - static neo(x: number, y: number): Vec2; - static clone(v: Vec2Value): Vec2; - /** @hidden */ - toString(): string; - /** - * Does this vector contain finite coordinates? - */ - static isValid(obj: any): boolean; - static assert(o: any): void; - clone(): Vec2; - /** - * Set this vector to all zeros. - * - * @returns this - */ - setZero(): Vec2; - set(x: number, y: number): Vec2; - set(value: Vec2Value): Vec2; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - setNum(x: number, y: number): this; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - setVec2(value: Vec2Value): this; - /** - * Set linear combination of v and w: `a * v + b * w` - */ - setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - setMul(a: number, v: Vec2Value): Vec2; - /** - * Add a vector to this vector. - * - * @returns this - */ - add(w: Vec2Value): Vec2; - /** - * Add linear combination of v and w: `a * v + b * w` - */ - addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - addMul(a: number, v: Vec2Value): Vec2; - /** - * @deprecated Use subCombine or subMul - */ - wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2; - /** - * Subtract linear combination of v and w: `a * v + b * w` - */ - subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - subMul(a: number, v: Vec2Value): Vec2; - /** - * Subtract a vector from this vector - * - * @returns this - */ - sub(w: Vec2Value): Vec2; - /** - * Multiply this vector by a scalar. - * - * @returns this - */ - mul(m: number): Vec2; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - length(): number; - /** - * Get the length squared. - */ - lengthSquared(): number; - /** - * Convert this vector into a unit vector. - * - * @returns old length - */ - normalize(): number; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - static lengthOf(v: Vec2Value): number; - /** - * Get the length squared. - */ - static lengthSquared(v: Vec2Value): number; - static distance(v: Vec2Value, w: Vec2Value): number; - static distanceSquared(v: Vec2Value, w: Vec2Value): number; - static areEqual(v: Vec2Value, w: Vec2Value): boolean; - /** - * Get the skew vector such that dot(skew_vec, other) == cross(vec, other) - */ - static skew(v: Vec2Value): Vec2; - /** Dot product on two vectors */ - static dot(v: Vec2Value, w: Vec2Value): number; - /** Cross product between two vectors */ - static cross(v: Vec2Value, w: Vec2Value): number; - /** Cross product between a vector and a scalar */ - static cross(v: Vec2Value, w: number): Vec2; - /** Cross product between a scalar and a vector */ - static cross(v: number, w: Vec2Value): Vec2; - /** Cross product on two vectors */ - static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number; - /** Cross product on a vector and a scalar */ - static crossVec2Num(v: Vec2Value, w: number): Vec2; - /** Cross product on a vector and a scalar */ - static crossNumVec2(v: number, w: Vec2Value): Vec2; - /** Returns `a + (v x w)` */ - static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2; - /** Returns `a + (v x w)` */ - static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2; - /** - * Returns `a + (v x w)` - */ - static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2; - /** - * Returns `a + (v x w)` - */ - static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2; - static add(v: Vec2Value, w: Vec2Value): Vec2; - /** @hidden @deprecated */ - static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - static sub(v: Vec2Value, w: Vec2Value): Vec2; - static mul(a: Vec2Value, b: number): Vec2; - static mul(a: number, b: Vec2Value): Vec2; - static mulVec2Num(a: Vec2Value, b: number): Vec2; - static mulNumVec2(a: number, b: Vec2Value): Vec2; - neg(): Vec2; - static neg(v: Vec2Value): Vec2; - static abs(v: Vec2Value): Vec2; - static mid(v: Vec2Value, w: Vec2Value): Vec2; - static upper(v: Vec2Value, w: Vec2Value): Vec2; - static lower(v: Vec2Value, w: Vec2Value): Vec2; - clamp(max: number): Vec2; - static clamp(v: Vec2Value, max: number): Vec2; - /** @hidden @deprecated */ - static scaleFn(x: number, y: number): (v: Vec2Value) => Vec2; - /** @hidden @deprecated */ - static translateFn(x: number, y: number): (v: Vec2Value) => Vec2; +/** @hidden @deprecated Use new keyword. */ +export function Vec2(x: number, y: number): Vec2; +/** @hidden @deprecated Use new keyword. */ +export function Vec2(obj: Vec2Value): Vec2; +/** @hidden @deprecated Use new keyword. */ +export function Vec2(): Vec2; +/** 2D vector */ +export declare class Vec2 { + x: number; + y: number; + constructor(x: number, y: number); + constructor(obj: Vec2Value); + constructor(); + static zero(): Vec2; + /** @hidden */ + static neo(x: number, y: number): Vec2; + static clone(v: Vec2Value): Vec2; + /** @hidden */ + toString(): string; + /** + * Does this vector contain finite coordinates? + */ + static isValid(obj: any): boolean; + static assert(o: any): void; + clone(): Vec2; + /** + * Set this vector to all zeros. + * + * @returns this + */ + setZero(): Vec2; + set(x: number, y: number): Vec2; + set(value: Vec2Value): Vec2; + /** + * Set this vector to some specified coordinates. + * + * @returns this + */ + setNum(x: number, y: number): this; + /** + * Set this vector to some specified coordinates. + * + * @returns this + */ + setVec2(value: Vec2Value): this; + /** + * Set linear combination of v and w: `a * v + b * w` + */ + setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; + setMul(a: number, v: Vec2Value): Vec2; + /** + * Add a vector to this vector. + * + * @returns this + */ + add(w: Vec2Value): Vec2; + /** + * Add linear combination of v and w: `a * v + b * w` + */ + addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; + addMul(a: number, v: Vec2Value): Vec2; + /** + * @deprecated Use subCombine or subMul + */ + wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2; + /** + * Subtract linear combination of v and w: `a * v + b * w` + */ + subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; + subMul(a: number, v: Vec2Value): Vec2; + /** + * Subtract a vector from this vector + * + * @returns this + */ + sub(w: Vec2Value): Vec2; + /** + * Multiply this vector by a scalar. + * + * @returns this + */ + mul(m: number): Vec2; + /** + * Get the length of this vector (the norm). + * + * For performance, use this instead of lengthSquared (if possible). + */ + length(): number; + /** + * Get the length squared. + */ + lengthSquared(): number; + /** + * Convert this vector into a unit vector. + * + * @returns old length + */ + normalize(): number; + /** + * Get the length of this vector (the norm). + * + * For performance, use this instead of lengthSquared (if possible). + */ + static lengthOf(v: Vec2Value): number; + /** + * Get the length squared. + */ + static lengthSquared(v: Vec2Value): number; + static distance(v: Vec2Value, w: Vec2Value): number; + static distanceSquared(v: Vec2Value, w: Vec2Value): number; + static areEqual(v: Vec2Value, w: Vec2Value): boolean; + /** + * Get the skew vector such that dot(skew_vec, other) == cross(vec, other) + */ + static skew(v: Vec2Value): Vec2; + /** Dot product on two vectors */ + static dot(v: Vec2Value, w: Vec2Value): number; + /** Cross product between two vectors */ + static cross(v: Vec2Value, w: Vec2Value): number; + /** Cross product between a vector and a scalar */ + static cross(v: Vec2Value, w: number): Vec2; + /** Cross product between a scalar and a vector */ + static cross(v: number, w: Vec2Value): Vec2; + /** Cross product on two vectors */ + static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number; + /** Cross product on a vector and a scalar */ + static crossVec2Num(v: Vec2Value, w: number): Vec2; + /** Cross product on a vector and a scalar */ + static crossNumVec2(v: number, w: Vec2Value): Vec2; + /** Returns `a + (v x w)` */ + static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2; + /** Returns `a + (v x w)` */ + static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2; + /** + * Returns `a + (v x w)` + */ + static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2; + /** + * Returns `a + (v x w)` + */ + static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2; + static add(v: Vec2Value, w: Vec2Value): Vec2; + /** @hidden @deprecated */ + static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; + static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; + static sub(v: Vec2Value, w: Vec2Value): Vec2; + static mul(a: Vec2Value, b: number): Vec2; + static mul(a: number, b: Vec2Value): Vec2; + static mulVec2Num(a: Vec2Value, b: number): Vec2; + static mulNumVec2(a: number, b: Vec2Value): Vec2; + neg(): Vec2; + static neg(v: Vec2Value): Vec2; + static abs(v: Vec2Value): Vec2; + static mid(v: Vec2Value, w: Vec2Value): Vec2; + static upper(v: Vec2Value, w: Vec2Value): Vec2; + static lower(v: Vec2Value, w: Vec2Value): Vec2; + clamp(max: number): Vec2; + static clamp(v: Vec2Value, max: number): Vec2; + /** @hidden @deprecated */ + static scaleFn(x: number, y: number): (v: Vec2Value) => Vec2; + /** @hidden @deprecated */ + static translateFn(x: number, y: number): (v: Vec2Value) => Vec2; } -interface RotValue { - /** sin(angle) */ - s: number; - /** cos(angle) */ - c: number; +export interface RotValue { + /** sin(angle) */ + s: number; + /** cos(angle) */ + c: number; } -declare function Rot(angle?: number | RotValue): Rot; -declare class Rot { - /** sin(angle) */ - s: number; - /** cos(angle) */ - c: number; - /** Initialize from an angle in radians. */ - constructor(angle?: number | RotValue); - /** @hidden */ - static neo(angle: number): Rot; - static clone(rot: RotValue): Rot; - static identity(): Rot; - static isValid(obj: any): boolean; - static assert(o: any): void; - /** Set to the identity rotation. */ - setIdentity(): void; - set(angle: number | RotValue): void; - setRot(angle: RotValue): void; - /** Set using an angle in radians. */ - setAngle(angle: number): void; - /** Get the angle in radians. */ - getAngle(): number; - /** Get the x-axis. */ - getXAxis(): Vec2; - /** Get the y-axis. */ - getYAxis(): Vec2; - /** Multiply two rotations: q * r */ - static mul(rot: RotValue, m: RotValue): Rot; - /** Rotate a vector */ - static mul(rot: RotValue, m: Vec2Value): Vec2; - /** Multiply two rotations: q * r */ - static mulRot(rot: RotValue, m: RotValue): Rot; - /** Rotate a vector */ - static mulVec2(rot: RotValue, m: Vec2Value): Vec2; - static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2; - /** Transpose multiply two rotations: qT * r */ - static mulT(rot: RotValue, m: RotValue): Rot; - /** Inverse rotate a vector */ - static mulT(rot: RotValue, m: Vec2Value): Vec2; - /** Transpose multiply two rotations: qT * r */ - static mulTRot(rot: RotValue, m: RotValue): Rot; - /** Inverse rotate a vector */ - static mulTVec2(rot: RotValue, m: Vec2Value): Vec2; +/** @hidden @deprecated Use new keyword. */ +export function Rot(angle: number): Rot; +/** @hidden @deprecated Use new keyword. */ +export function Rot(obj: RotValue): Rot; +/** @hidden @deprecated Use new keyword. */ +export function Rot(): Rot; +/** Rotation */ +export declare class Rot { + /** sin(angle) */ + s: number; + /** cos(angle) */ + c: number; + /** Initialize from an angle in radians. */ + constructor(angle?: number | RotValue); + /** @hidden */ + static neo(angle: number): Rot; + static clone(rot: RotValue): Rot; + static identity(): Rot; + static isValid(obj: any): boolean; + static assert(o: any): void; + /** Set to the identity rotation. */ + setIdentity(): void; + set(angle: number | RotValue): void; + setRot(angle: RotValue): void; + /** Set using an angle in radians. */ + setAngle(angle: number): void; + /** Get the angle in radians. */ + getAngle(): number; + /** Get the x-axis. */ + getXAxis(): Vec2; + /** Get the y-axis. */ + getYAxis(): Vec2; + /** Multiply two rotations: q * r */ + static mul(rot: RotValue, m: RotValue): Rot; + /** Rotate a vector */ + static mul(rot: RotValue, m: Vec2Value): Vec2; + /** Multiply two rotations: q * r */ + static mulRot(rot: RotValue, m: RotValue): Rot; + /** Rotate a vector */ + static mulVec2(rot: RotValue, m: Vec2Value): Vec2; + static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2; + /** Transpose multiply two rotations: qT * r */ + static mulT(rot: RotValue, m: RotValue): Rot; + /** Inverse rotate a vector */ + static mulT(rot: RotValue, m: Vec2Value): Vec2; + /** Transpose multiply two rotations: qT * r */ + static mulTRot(rot: RotValue, m: RotValue): Rot; + /** Inverse rotate a vector */ + static mulTVec2(rot: RotValue, m: Vec2Value): Vec2; } -type TransformValue = { - p: Vec2Value; - q: RotValue; +export type TransformValue = { + p: Vec2Value; + q: RotValue; }; +/** @hidden @deprecated Use new keyword. */ +export function Transform(position?: Vec2Value, rotation?: number): Transform; /** * A transform contains translation and rotation. It is used to represent the * position and orientation of rigid frames. Initialize using a position vector * and a rotation. */ -declare function Transform(position?: Vec2Value, rotation?: number): Transform; -/** - * A transform contains translation and rotation. It is used to represent the - * position and orientation of rigid frames. Initialize using a position vector - * and a rotation. - */ -declare class Transform { - /** position */ - p: Vec2; - /** rotation */ - q: Rot; - constructor(position?: Vec2Value, rotation?: number); - static clone(xf: Transform): Transform; - /** @hidden */ - static neo(position: Vec2Value, rotation: Rot): Transform; - static identity(): Transform; - /** Set this to the identity transform */ - setIdentity(): void; - /** Set position and angle */ - set(position: Vec2Value, rotation: number): void; - /** Copy from another transform */ - set(xf: TransformValue): void; - /** Set position and angle */ - setNum(position: Vec2Value, rotation: number): void; - setTransform(xf: TransformValue): void; - static isValid(obj: any): boolean; - static assert(o: any): void; - static mul(a: TransformValue, b: Vec2Value): Vec2; - static mul(a: TransformValue, b: TransformValue): Transform; - static mulAll(a: Transform, b: Vec2Value[]): Vec2[]; - static mulAll(a: Transform, b: Transform[]): Transform[]; - /** @hidden @deprecated */ - static mulFn(a: TransformValue): (b: Vec2Value) => Vec2; - static mulVec2(a: TransformValue, b: Vec2Value): Vec2; - static mulXf(a: TransformValue, b: TransformValue): Transform; - static mulT(a: TransformValue, b: Vec2Value): Vec2; - static mulT(a: TransformValue, b: TransformValue): Transform; - static mulTVec2(a: TransformValue, b: Vec2Value): Vec2; - static mulTXf(a: TransformValue, b: TransformValue): Transform; +export declare class Transform { + /** position */ + p: Vec2; + /** rotation */ + q: Rot; + constructor(position?: Vec2Value, rotation?: number); + static clone(xf: Transform): Transform; + /** @hidden */ + static neo(position: Vec2Value, rotation: Rot): Transform; + static identity(): Transform; + /** Set this to the identity transform */ + setIdentity(): void; + /** Set position and angle */ + set(position: Vec2Value, rotation: number): void; + /** Copy from another transform */ + set(xf: TransformValue): void; + /** Set position and angle */ + setNum(position: Vec2Value, rotation: number): void; + setTransform(xf: TransformValue): void; + static isValid(obj: any): boolean; + static assert(o: any): void; + static mul(a: TransformValue, b: Vec2Value): Vec2; + static mul(a: TransformValue, b: TransformValue): Transform; + static mulAll(a: Transform, b: Vec2Value[]): Vec2[]; + static mulAll(a: Transform, b: Transform[]): Transform[]; + /** @hidden @deprecated */ + static mulFn(a: TransformValue): (b: Vec2Value) => Vec2; + static mulVec2(a: TransformValue, b: Vec2Value): Vec2; + static mulXf(a: TransformValue, b: TransformValue): Transform; + static mulT(a: TransformValue, b: Vec2Value): Vec2; + static mulT(a: TransformValue, b: TransformValue): Transform; + static mulTVec2(a: TransformValue, b: Vec2Value): Vec2; + static mulTXf(a: TransformValue, b: TransformValue): Transform; } /** * Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. */ -interface RayCastInput { - p1: Vec2Value; - p2: Vec2Value; - maxFraction: number; +export interface RayCastInput { + p1: Vec2Value; + p2: Vec2Value; + maxFraction: number; } -type RayCastCallback = (subInput: RayCastInput, id: number) => number; +export type RayCastCallback = (subInput: RayCastInput, id: number) => number; /** * Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`, * where `p1` and `p2` come from RayCastInput. */ -interface RayCastOutput { - normal: Vec2; - fraction: number; +export interface RayCastOutput { + normal: Vec2; + fraction: number; } -interface AABBValue { - lowerBound: Vec2Value; - upperBound: Vec2Value; +/** Axis-aligned bounding box */ +export interface AABBValue { + lowerBound: Vec2Value; + upperBound: Vec2Value; } -declare function AABB(lower?: Vec2Value, upper?: Vec2Value): AABB; -declare class AABB { - lowerBound: Vec2; - upperBound: Vec2; - constructor(lower?: Vec2Value, upper?: Vec2Value); - /** - * Verify that the bounds are sorted. - */ - isValid(): boolean; - static isValid(obj: any): boolean; - static assert(o: any): void; - /** - * Get the center of the AABB. - */ - getCenter(): Vec2; - /** - * Get the extents of the AABB (half-widths). - */ - getExtents(): Vec2; - /** - * Get the perimeter length. - */ - getPerimeter(): number; - /** - * Combine one or two AABB into this one. - */ - combine(a: AABBValue, b?: AABBValue): void; - combinePoints(a: Vec2Value, b: Vec2Value): void; - set(aabb: AABBValue): void; - contains(aabb: AABBValue): boolean; - extend(value: number): AABB; - static extend(out: AABBValue, value: number): AABBValue; - static testOverlap(a: AABBValue, b: AABBValue): boolean; - static areEqual(a: AABBValue, b: AABBValue): boolean; - static diff(a: AABBValue, b: AABBValue): number; - rayCast(output: RayCastOutput, input: RayCastInput): boolean; - /** @hidden */ - toString(): string; - static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue; - static combinedPerimeter(a: AABBValue, b: AABBValue): number; +/** @hidden @deprecated Use new keyword. */ +export function AABB(lower?: Vec2Value, upper?: Vec2Value): AABB; +/** Axis-aligned bounding box */ +export declare class AABB { + lowerBound: Vec2; + upperBound: Vec2; + constructor(lower?: Vec2Value, upper?: Vec2Value); + /** + * Verify that the bounds are sorted. + */ + isValid(): boolean; + static isValid(obj: any): boolean; + static assert(o: any): void; + /** + * Get the center of the AABB. + */ + getCenter(): Vec2; + /** + * Get the extents of the AABB (half-widths). + */ + getExtents(): Vec2; + /** + * Get the perimeter length. + */ + getPerimeter(): number; + /** + * Combine one or two AABB into this one. + */ + combine(a: AABBValue, b?: AABBValue): void; + combinePoints(a: Vec2Value, b: Vec2Value): void; + set(aabb: AABBValue): void; + contains(aabb: AABBValue): boolean; + extend(value: number): AABB; + static extend(out: AABBValue, value: number): AABBValue; + static testOverlap(a: AABBValue, b: AABBValue): boolean; + static areEqual(a: AABBValue, b: AABBValue): boolean; + static diff(a: AABBValue, b: AABBValue): number; + rayCast(output: RayCastOutput, input: RayCastInput): boolean; + /** @hidden */ + toString(): string; + static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue; + static combinedPerimeter(a: AABBValue, b: AABBValue): number; } /** * Input for Distance. You have to option to use the shape radii in the * computation. Even */ -declare class DistanceInput { - readonly proxyA: DistanceProxy; - readonly proxyB: DistanceProxy; - readonly transformA: Transform; - readonly transformB: Transform; - useRadii: boolean; - recycle(): void; +export declare class DistanceInput { + readonly proxyA: DistanceProxy; + readonly proxyB: DistanceProxy; + readonly transformA: Transform; + readonly transformB: Transform; + useRadii: boolean; + recycle(): void; } /** * Output for Distance. */ -declare class DistanceOutput { - /** closest point on shapeA */ - pointA: Vec2Value; - /** closest point on shapeB */ - pointB: Vec2Value; - distance: number; - /** iterations number of GJK iterations used */ - iterations: number; - recycle(): void; +export declare class DistanceOutput { + /** closest point on shapeA */ + pointA: Vec2Value; + /** closest point on shapeB */ + pointB: Vec2Value; + distance: number; + /** iterations number of GJK iterations used */ + iterations: number; + recycle(): void; } /** * Used to warm start Distance. Set count to zero on first call. */ -declare class SimplexCache { - /** length or area */ - metric: number; - /** vertices on shape A */ - indexA: number[]; - /** vertices on shape B */ - indexB: number[]; - count: number; - recycle(): void; +export declare class SimplexCache { + /** length or area */ + metric: number; + /** vertices on shape A */ + indexA: number[]; + /** vertices on shape B */ + indexB: number[]; + count: number; + recycle(): void; } /** * Compute the closest points between two shapes. Supports any combination of: * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On * the first call set SimplexCache.count to zero. */ -declare const Distance: { - (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void; - testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; - Input: typeof DistanceInput; - Output: typeof DistanceOutput; - Proxy: typeof DistanceProxy; - Cache: typeof SimplexCache; +export declare const Distance: { + (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void; + testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; + Input: typeof DistanceInput; + Output: typeof DistanceOutput; + Proxy: typeof DistanceProxy; + Cache: typeof SimplexCache; }; /** * A distance proxy is used by the GJK algorithm. It encapsulates any shape. */ -declare class DistanceProxy { - recycle(): void; - /** - * Get the vertex count. - */ - getVertexCount(): number; - /** - * Get a vertex by index. Used by Distance. - */ - getVertex(index: number): Vec2Value; - /** - * Get the supporting vertex index in the given direction. - */ - getSupport(d: Vec2Value): number; - /** - * Get the supporting vertex in the given direction. - */ - getSupportVertex(d: Vec2Value): Vec2Value; - /** - * Initialize the proxy using the given shape. The shape must remain in scope - * while the proxy is in use. - */ - set(shape: Shape, index: number): void; - /** - * Initialize the proxy using a vertex cloud and radius. The vertices - * must remain in scope while the proxy is in use. - */ - setVertices(vertices: Vec2Value[], count: number, radius: number): void; +export declare class DistanceProxy { + recycle(): void; + /** + * Get the vertex count. + */ + getVertexCount(): number; + /** + * Get a vertex by index. Used by Distance. + */ + getVertex(index: number): Vec2Value; + /** + * Get the supporting vertex index in the given direction. + */ + getSupport(d: Vec2Value): number; + /** + * Get the supporting vertex in the given direction. + */ + getSupportVertex(d: Vec2Value): Vec2Value; + /** + * Initialize the proxy using the given shape. The shape must remain in scope + * while the proxy is in use. + */ + set(shape: Shape, index: number): void; + /** + * Initialize the proxy using a vertex cloud and radius. The vertices + * must remain in scope while the proxy is in use. + */ + setVertices(vertices: Vec2Value[], count: number, radius: number): void; } /** * Determine if two generic shapes overlap. */ -declare const testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; +export declare const testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; /** * Input parameters for ShapeCast */ -declare class ShapeCastInput { - readonly proxyA: DistanceProxy; - readonly proxyB: DistanceProxy; - readonly transformA: Transform; - readonly transformB: Transform; - readonly translationB: Vec2; - recycle(): void; +export declare class ShapeCastInput { + readonly proxyA: DistanceProxy; + readonly proxyB: DistanceProxy; + readonly transformA: Transform; + readonly transformB: Transform; + readonly translationB: Vec2; + recycle(): void; } /** * Output results for b2ShapeCast */ -declare class ShapeCastOutput { - point: Vec2; - normal: Vec2; - lambda: number; - iterations: number; +export declare class ShapeCastOutput { + point: Vec2; + normal: Vec2; + lambda: number; + iterations: number; } /** * Perform a linear shape cast of shape B moving and shape A fixed. Determines @@ -441,305 +447,300 @@ declare class ShapeCastOutput { * * @returns true if hit, false if there is no hit or an initial overlap */ -// -// GJK-raycast -// Algorithm by Gino van den Bergen. -// "Smooth Mesh Contacts with GJK" in Game Physics Pearls. 2010 -declare const ShapeCast: (output: ShapeCastOutput, input: ShapeCastInput) => boolean; +export declare const ShapeCast: (output: ShapeCastOutput, input: ShapeCastInput) => boolean; /** * A joint edge is used to connect bodies and joints together in a joint graph * where each body is a node and each joint is an edge. A joint edge belongs to * a doubly linked list maintained in each attached body. Each joint has two * joint nodes, one for each attached body. */ -declare class JointEdge { - /** - * provides quick access to the other body attached. - */ - other: Body | null; - /** - * the joint - */ - joint: Joint | null; - /** - * prev the previous joint edge in the body's joint list - */ - prev: JointEdge | null; - /** - * the next joint edge in the body's joint list - */ - next: JointEdge | null; +export declare class JointEdge { + /** + * provides quick access to the other body attached. + */ + other: Body$1 | null; + /** + * the joint + */ + joint: Joint | null; + /** + * prev the previous joint edge in the body's joint list + */ + prev: JointEdge | null; + /** + * the next joint edge in the body's joint list + */ + next: JointEdge | null; } /** * Joint definitions are used to construct joints. */ -interface JointOpt { - /** - * Use this to attach application specific data to your joints. - */ - userData?: any; - /** - * Set this flag to true if the attached bodies - * should collide. - */ - collideConnected?: boolean; +export interface JointOpt { + /** + * Use this to attach application specific data to your joints. + */ + userData?: any; + /** + * Set this flag to true if the attached bodies + * should collide. + */ + collideConnected?: boolean; } /** * Joint definitions are used to construct joints. */ -interface JointDef extends JointOpt { - /** - * The first attached body. - */ - bodyA: Body; - /** - * The second attached body. - */ - bodyB: Body; +export interface JointDef extends JointOpt { + /** + * The first attached body. + */ + bodyA: Body$1; + /** + * The second attached body. + */ + bodyB: Body$1; } /** * The base joint class. Joints are used to constraint two bodies together in * various fashions. Some joints also feature limits and motors. */ -declare abstract class Joint { - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - constructor(def: JointDef); - constructor(def: JointOpt, bodyA: Body, bodyB: Body); - /** - * Short-cut function to determine if either body is inactive. - */ - isActive(): boolean; - /** - * Get the type of the concrete joint. - */ - getType(): string; - /** - * Get the first body attached to this joint. - */ - getBodyA(): Body; - /** - * Get the second body attached to this joint. - */ - getBodyB(): Body; - /** - * Get the next joint the world joint list. - */ - getNext(): Joint; - getUserData(): unknown; - setUserData(data: unknown): void; - /** - * Get collide connected. Note: modifying the collide connect flag won't work - * correctly because the flag is only checked when fixture AABBs begin to - * overlap. - */ - getCollideConnected(): boolean; - /** - * Get the anchor point on bodyA in world coordinates. - */ - abstract getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - abstract getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - abstract getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - abstract getReactionTorque(inv_dt: number): number; - /** - * Shift the origin for any points stored in world coordinates. - */ - shiftOrigin(newOrigin: Vec2Value): void; - abstract initVelocityConstraints(step: TimeStep): void; - abstract solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - abstract solvePositionConstraints(step: TimeStep): boolean; - /** - * @hidden @experimental - * Update joint with new props. - */ - abstract _reset(def: Partial): void; +export declare abstract class Joint { + /** Styling for dev-tools. */ + style: Style; + /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ + appData: Record; + constructor(def: JointDef); + constructor(def: JointOpt, bodyA: Body$1, bodyB: Body$1); + /** + * Short-cut function to determine if either body is inactive. + */ + isActive(): boolean; + /** + * Get the type of the concrete joint. + */ + getType(): string; + /** + * Get the first body attached to this joint. + */ + getBodyA(): Body$1; + /** + * Get the second body attached to this joint. + */ + getBodyB(): Body$1; + /** + * Get the next joint the world joint list. + */ + getNext(): Joint; + getUserData(): unknown; + setUserData(data: unknown): void; + /** + * Get collide connected. Note: modifying the collide connect flag won't work + * correctly because the flag is only checked when fixture AABBs begin to + * overlap. + */ + getCollideConnected(): boolean; + /** + * Get the anchor point on bodyA in world coordinates. + */ + abstract getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + abstract getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + abstract getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + abstract getReactionTorque(inv_dt: number): number; + /** + * Shift the origin for any points stored in world coordinates. + */ + shiftOrigin(newOrigin: Vec2Value): void; + abstract initVelocityConstraints(step: TimeStep): void; + abstract solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + abstract solvePositionConstraints(step: TimeStep): boolean; + /** + * @hidden @experimental + * Update joint with new props. + */ + abstract _reset(def: Partial): void; } -interface Style { - stroke?: string; - fill?: string; - lineWidth?: number; +export interface Style { + stroke?: string; + fill?: string; + lineWidth?: number; } -type KEY = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "right" | "left" | "up" | "down" | "fire"; -type ActiveKeys = { - [key in KEY]?: boolean; +export type KEY = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "right" | "left" | "up" | "down" | "fire"; +export type ActiveKeys = { + [key in KEY]?: boolean; }; -type TestbedMountOptions = {}; -declare abstract class Testbed { - /** - * Mounts testbed. Call start with a world to start simulation and rendering. - */ - static mount(options?: TestbedMountOptions): Testbed; - /** - * Mounts testbed if needed, then starts simulation and rendering. - * - * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`. - */ - static start(world: World): Testbed; - /** World viewbox width. */ - width: number; - /** World viewbox height. */ - height: number; - /** World viewbox center vertical offset. */ - x: number; - /** World viewbox center horizontal offset. */ - y: number; - /** @hidden */ - scaleY: number; - /** World simulation step frequency */ - hz: number; - /** World simulation speed, default is 1 */ - speed: number; - background: string; - mouseForce?: number; - activeKeys: ActiveKeys; - /** callback, to be implemented by user */ - step: (dt: number, t: number) => void; - /** callback, to be implemented by user */ - keydown: (keyCode: number, label: string) => void; - /** callback, to be implemented by user */ - keyup: (keyCode: number, label: string) => void; - abstract status(name: string, value: any): void; - abstract status(value: object | string): void; - abstract info(text: string): void; - color(r: number, g: number, b: number): string; - abstract drawPoint(p: { - x: number; - y: number; - }, r: any, color: string): void; - abstract drawCircle(p: { - x: number; - y: number; - }, r: number, color: string): void; - abstract drawEdge(a: { - x: number; - y: number; - }, b: { - x: number; - y: number; - }, color: string): void; - abstract drawSegment(a: { - x: number; - y: number; - }, b: { - x: number; - y: number; - }, color: string): void; - abstract drawPolygon(points: Array<{ - x: number; - y: number; - }>, color: string): void; - abstract drawAABB(aabb: AABBValue, color: string): void; - abstract start(world: World): void; - abstract findOne(query: string): (Body | Joint | Fixture | null); - abstract findAll(query: string): (Body | Joint | Fixture)[]; +export type TestbedMountOptions = {}; +export declare abstract class Testbed { + /** + * Mounts testbed. Call start with a world to start simulation and rendering. + */ + static mount(options?: TestbedMountOptions): Testbed; + /** + * Mounts testbed if needed, then starts simulation and rendering. + * + * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`. + */ + static start(world: World): Testbed; + /** World viewbox width. */ + width: number; + /** World viewbox height. */ + height: number; + /** World viewbox center vertical offset. */ + x: number; + /** World viewbox center horizontal offset. */ + y: number; + /** @hidden */ + scaleY: number; + /** World simulation step frequency */ + hz: number; + /** World simulation speed, default is 1 */ + speed: number; + background: string; + mouseForce?: number; + activeKeys: ActiveKeys; + /** callback, to be implemented by user */ + step: (dt: number, t: number) => void; + /** callback, to be implemented by user */ + keydown: (keyCode: number, label: string) => void; + /** callback, to be implemented by user */ + keyup: (keyCode: number, label: string) => void; + abstract status(name: string, value: any): void; + abstract status(value: object | string): void; + abstract info(text: string): void; + color(r: number, g: number, b: number): string; + abstract drawPoint(p: { + x: number; + y: number; + }, r: any, color: string): void; + abstract drawCircle(p: { + x: number; + y: number; + }, r: number, color: string): void; + abstract drawEdge(a: { + x: number; + y: number; + }, b: { + x: number; + y: number; + }, color: string): void; + abstract drawSegment(a: { + x: number; + y: number; + }, b: { + x: number; + y: number; + }, color: string): void; + abstract drawPolygon(points: Array<{ + x: number; + y: number; + }>, color: string): void; + abstract drawAABB(aabb: AABBValue, color: string): void; + abstract start(world: World): void; + abstract findOne(query: string): (Body$1 | Joint | Fixture | null); + abstract findAll(query: string): (Body$1 | Joint | Fixture)[]; } -type TestbedFactoryOptions = string | {}; +export type TestbedFactoryOptions = string | {}; /** @deprecated */ -type TestbedCallback = (testbed: Testbed) => (World | undefined); +export type TestbedCallback = (testbed: Testbed) => (World | undefined); /** @deprecated */ -declare function testbed(callback: TestbedCallback): void; +export declare function testbed(callback: TestbedCallback): void; /** @deprecated */ -declare function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void; -// todo make shape an interface +export declare function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void; /** * A shape is used for collision detection. You can create a shape however you * like. Shapes used for simulation in World are created automatically when a * Fixture is created. Shapes may encapsulate one or more child shapes. */ -declare abstract class Shape { - /** @hidden */ m_type: ShapeType; - /** - * @hidden - * Radius of a shape. For polygonal shapes this must be b2_polygonRadius. - * There is no support for making rounded polygons. - */ - m_radius: number; - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - /** @hidden */ - abstract _reset(): void; - static isValid(obj: any): boolean; - abstract getRadius(): number; - /** - * Get the type of this shape. You can use this to down cast to the concrete - * shape. - * - * @return the shape type. - */ - abstract getType(): ShapeType; - /** - * Get the number of child primitives. - */ - abstract getChildCount(): number; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - abstract testPoint(xf: TransformValue, p: Vec2Value): boolean; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - abstract computeMass(massData: MassData, density?: number): void; - abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void; +export declare abstract class Shape { + /** @hidden */ m_type: ShapeType; + /** + * @hidden + * Radius of a shape. For polygonal shapes this must be b2_polygonRadius. + * There is no support for making rounded polygons. + */ + m_radius: number; + /** Styling for dev-tools. */ + style: Style; + /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ + appData: Record; + /** @hidden */ + abstract _reset(): void; + static isValid(obj: any): boolean; + abstract getRadius(): number; + /** + * Get the type of this shape. You can use this to down cast to the concrete + * shape. + * + * @return the shape type. + */ + abstract getType(): ShapeType; + /** + * Get the number of child primitives. + */ + abstract getChildCount(): number; + /** + * Test a point for containment in this shape. This only works for convex + * shapes. + * + * @param xf The shape world transform. + * @param p A point in world coordinates. + */ + abstract testPoint(xf: TransformValue, p: Vec2Value): boolean; + /** + * Cast a ray against a child shape. + * + * @param output The ray-cast results. + * @param input The ray-cast input parameters. + * @param xf The transform to be applied to the shape. + * @param childIndex The child shape index + */ + abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; + /** + * Given a transform, compute the associated axis aligned bounding box for a + * child shape. + * + * @param aabb Returns the axis aligned box. + * @param xf The world transform of the shape. + * @param childIndex The child shape + */ + abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; + /** + * Compute the mass properties of this shape using its dimensions and density. + * The inertia tensor is computed about the local origin. + * + * @param massData Returns the mass data for this shape. + * @param density The density in kilograms per meter squared. + */ + abstract computeMass(massData: MassData, density?: number): void; + abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void; } -type ShapeType = "circle" | "edge" | "polygon" | "chain"; -type DynamicTreeQueryCallback = (nodeId: number) => boolean; +export type ShapeType = "circle" | "edge" | "polygon" | "chain"; +export type DynamicTreeQueryCallback = (nodeId: number) => boolean; /** * A node in the dynamic tree. The client does not interact with this directly. */ -declare class TreeNode { - id: number; - /** Enlarged AABB */ - aabb: AABB; - userData: T; - parent: TreeNode; - child1: TreeNode; - child2: TreeNode; - /** 0: leaf, -1: free node */ - height: number; - constructor(id?: number); - isLeaf(): boolean; +export declare class TreeNode { + id: number; + /** Enlarged AABB */ + aabb: AABB; + userData: T; + parent: TreeNode; + child1: TreeNode; + child2: TreeNode; + /** 0: leaf, -1: free node */ + height: number; + constructor(id?: number); + isLeaf(): boolean; } /** * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A @@ -752,246 +753,246 @@ declare class TreeNode { * Nodes are pooled and relocatable, so we use node indices rather than * pointers. */ -declare class DynamicTree { - m_root: TreeNode; - m_lastProxyId: number; - m_nodes: { - [id: number]: TreeNode; - }; - constructor(); - /** - * Get proxy user data. - * - * @return the proxy user data or 0 if the id is invalid. - */ - getUserData(id: number): T; - /** - * Get the fat AABB for a node id. - * - * @return the proxy user data or 0 if the id is invalid. - */ - getFatAABB(id: number): AABB; - allocateNode(): TreeNode; - freeNode(node: TreeNode): void; - /** - * Create a proxy in the tree as a leaf node. We return the index of the node - * instead of a pointer so that we can grow the node pool. - * - * Create a proxy. Provide a tight fitting AABB and a userData pointer. - */ - createProxy(aabb: AABBValue, userData: T): number; - /** - * Destroy a proxy. This asserts if the id is invalid. - */ - destroyProxy(id: number): void; - /** - * Move a proxy with a swepted AABB. If the proxy has moved outside of its - * fattened AABB, then the proxy is removed from the tree and re-inserted. - * Otherwise the function returns immediately. - * - * @param d Displacement - * - * @return true if the proxy was re-inserted. - */ - moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean; - insertLeaf(leaf: TreeNode): void; - removeLeaf(leaf: TreeNode): void; - /** - * Perform a left or right rotation if node A is imbalanced. Returns the new - * root index. - */ - balance(iA: TreeNode): TreeNode; - /** - * Compute the height of the binary tree in O(N) time. Should not be called - * often. - */ - getHeight(): number; - /** - * Get the ratio of the sum of the node areas to the root area. - */ - getAreaRatio(): number; - /** - * Compute the height of a sub-tree. - */ - computeHeight(id?: number): number; - validateStructure(node: TreeNode): void; - validateMetrics(node: TreeNode): void; - /** - * Validate this tree. For testing. - */ - validate(): void; - /** - * Get the maximum balance of an node in the tree. The balance is the difference - * in height of the two children of a node. - */ - getMaxBalance(): number; - /** - * Build an optimal tree. Very expensive. For testing. - */ - rebuildBottomUp(): void; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void; - private inputPool; - private stackPool; - private iteratorPool; +export declare class DynamicTree { + m_root: TreeNode; + m_lastProxyId: number; + m_nodes: { + [id: number]: TreeNode; + }; + constructor(); + /** + * Get proxy user data. + * + * @return the proxy user data or 0 if the id is invalid. + */ + getUserData(id: number): T; + /** + * Get the fat AABB for a node id. + * + * @return the proxy user data or 0 if the id is invalid. + */ + getFatAABB(id: number): AABB; + allocateNode(): TreeNode; + freeNode(node: TreeNode): void; + /** + * Create a proxy in the tree as a leaf node. We return the index of the node + * instead of a pointer so that we can grow the node pool. + * + * Create a proxy. Provide a tight fitting AABB and a userData pointer. + */ + createProxy(aabb: AABBValue, userData: T): number; + /** + * Destroy a proxy. This asserts if the id is invalid. + */ + destroyProxy(id: number): void; + /** + * Move a proxy with a swepted AABB. If the proxy has moved outside of its + * fattened AABB, then the proxy is removed from the tree and re-inserted. + * Otherwise the function returns immediately. + * + * @param d Displacement + * + * @return true if the proxy was re-inserted. + */ + moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean; + insertLeaf(leaf: TreeNode): void; + removeLeaf(leaf: TreeNode): void; + /** + * Perform a left or right rotation if node A is imbalanced. Returns the new + * root index. + */ + balance(iA: TreeNode): TreeNode; + /** + * Compute the height of the binary tree in O(N) time. Should not be called + * often. + */ + getHeight(): number; + /** + * Get the ratio of the sum of the node areas to the root area. + */ + getAreaRatio(): number; + /** + * Compute the height of a sub-tree. + */ + computeHeight(id?: number): number; + validateStructure(node: TreeNode): void; + validateMetrics(node: TreeNode): void; + /** + * Validate this tree. For testing. + */ + validate(): void; + /** + * Get the maximum balance of an node in the tree. The balance is the difference + * in height of the two children of a node. + */ + getMaxBalance(): number; + /** + * Build an optimal tree. Very expensive. For testing. + */ + rebuildBottomUp(): void; + /** + * Shift the world origin. Useful for large worlds. The shift formula is: + * position -= newOrigin + * + * @param newOrigin The new origin with respect to the old origin + */ + shiftOrigin(newOrigin: Vec2Value): void; + /** + * Query an AABB for overlapping proxies. The callback class is called for each + * proxy that overlaps the supplied AABB. + */ + query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void; + /** + * Ray-cast against the proxies in the tree. This relies on the callback to + * perform a exact ray-cast in the case were the proxy contains a shape. The + * callback also performs the any collision filtering. This has performance + * roughly equal to k * log(n), where k is the number of collisions and n is the + * number of proxies in the tree. + * + * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. + * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. + */ + rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void; + private inputPool; + private stackPool; + private iteratorPool; } /** * The broad-phase wraps and extends a dynamic-tree to keep track of moved * objects and query them on update. */ -declare class BroadPhase { - m_tree: DynamicTree; - m_moveBuffer: number[]; - m_callback: (userDataA: any, userDataB: any) => void; - m_queryProxyId: number; - /** - * Get user data from a proxy. Returns null if the id is invalid. - */ - getUserData(proxyId: number): FixtureProxy; - /** - * Test overlap of fat AABBs. - */ - testOverlap(proxyIdA: number, proxyIdB: number): boolean; - /** - * Get the fat AABB for a proxy. - */ - getFatAABB(proxyId: number): AABB; - /** - * Get the number of proxies. - */ - getProxyCount(): number; - /** - * Get the height of the embedded tree. - */ - getTreeHeight(): number; - /** - * Get the balance (integer) of the embedded tree. - */ - getTreeBalance(): number; - /** - * Get the quality metric of the embedded tree. - */ - getTreeQuality(): number; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - query: (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback) => void; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs - * is called. - */ - createProxy(aabb: AABBValue, userData: FixtureProxy): number; - /** - * Destroy a proxy. It is up to the client to remove any pairs. - */ - destroyProxy(proxyId: number): void; - /** - * Call moveProxy as many times as you like, then when you are done call - * UpdatePairs to finalized the proxy pairs (for your time step). - */ - moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void; - /** - * Call to trigger a re-processing of it's pairs on the next call to - * UpdatePairs. - */ - touchProxy(proxyId: number): void; - bufferMove(proxyId: number): void; - unbufferMove(proxyId: number): void; - /** - * Update the pairs. This results in pair callbacks. This can only add pairs. - */ - updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void; - queryCallback: (proxyId: number) => boolean; +export declare class BroadPhase { + m_tree: DynamicTree; + m_moveBuffer: number[]; + m_callback: (userDataA: any, userDataB: any) => void; + m_queryProxyId: number; + /** + * Get user data from a proxy. Returns null if the id is invalid. + */ + getUserData(proxyId: number): FixtureProxy; + /** + * Test overlap of fat AABBs. + */ + testOverlap(proxyIdA: number, proxyIdB: number): boolean; + /** + * Get the fat AABB for a proxy. + */ + getFatAABB(proxyId: number): AABB; + /** + * Get the number of proxies. + */ + getProxyCount(): number; + /** + * Get the height of the embedded tree. + */ + getTreeHeight(): number; + /** + * Get the balance (integer) of the embedded tree. + */ + getTreeBalance(): number; + /** + * Get the quality metric of the embedded tree. + */ + getTreeQuality(): number; + /** + * Query an AABB for overlapping proxies. The callback class is called for each + * proxy that overlaps the supplied AABB. + */ + query: (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback) => void; + /** + * Ray-cast against the proxies in the tree. This relies on the callback to + * perform a exact ray-cast in the case were the proxy contains a shape. The + * callback also performs the any collision filtering. This has performance + * roughly equal to k * log(n), where k is the number of collisions and n is the + * number of proxies in the tree. + * + * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. + * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. + */ + rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void; + /** + * Shift the world origin. Useful for large worlds. The shift formula is: + * position -= newOrigin + * + * @param newOrigin The new origin with respect to the old origin + */ + shiftOrigin(newOrigin: Vec2Value): void; + /** + * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs + * is called. + */ + createProxy(aabb: AABBValue, userData: FixtureProxy): number; + /** + * Destroy a proxy. It is up to the client to remove any pairs. + */ + destroyProxy(proxyId: number): void; + /** + * Call moveProxy as many times as you like, then when you are done call + * UpdatePairs to finalized the proxy pairs (for your time step). + */ + moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void; + /** + * Call to trigger a re-processing of it's pairs on the next call to + * UpdatePairs. + */ + touchProxy(proxyId: number): void; + bufferMove(proxyId: number): void; + unbufferMove(proxyId: number): void; + /** + * Update the pairs. This results in pair callbacks. This can only add pairs. + */ + updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void; + queryCallback: (proxyId: number) => boolean; } /** * A fixture definition is used to create a fixture. This class defines an * abstract fixture definition. You can reuse fixture definitions safely. */ -interface FixtureOpt { - userData?: unknown; - /** - * The friction coefficient, usually in the range [0,1] - */ - friction?: number; - /** - * The restitution (elasticity) usually in the range [0,1] - */ - restitution?: number; - /** - * The density, usually in kg/m^2 - */ - density?: number; - /** - * A sensor shape collects contact information but never generates a collision response. - */ - isSensor?: boolean; - /** - * Zero, positive or negative collision group. - * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide. - */ - filterGroupIndex?: number; - /** - * Collision category bit or bits that this fixture belongs to. - * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa. - */ - filterCategoryBits?: number; - /** - * Collision category bit or bits that this fixture accept for collision. - */ - filterMaskBits?: number; +export interface FixtureOpt { + userData?: unknown; + /** + * The friction coefficient, usually in the range [0,1] + */ + friction?: number; + /** + * The restitution (elasticity) usually in the range [0,1] + */ + restitution?: number; + /** + * The density, usually in kg/m^2 + */ + density?: number; + /** + * A sensor shape collects contact information but never generates a collision response. + */ + isSensor?: boolean; + /** + * Zero, positive or negative collision group. + * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide. + */ + filterGroupIndex?: number; + /** + * Collision category bit or bits that this fixture belongs to. + * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa. + */ + filterCategoryBits?: number; + /** + * Collision category bit or bits that this fixture accept for collision. + */ + filterMaskBits?: number; } -interface FixtureDef extends FixtureOpt { - shape: Shape; +export interface FixtureDef extends FixtureOpt { + shape: Shape; } /** * This proxy is used internally to connect shape children to the broad-phase. */ -declare class FixtureProxy { - aabb: AABB; - fixture: Fixture; - childIndex: number; - proxyId: number; - constructor(fixture: Fixture, childIndex: number); +export declare class FixtureProxy { + aabb: AABB; + fixture: Fixture; + childIndex: number; + proxyId: number; + constructor(fixture: Fixture, childIndex: number); } /** * A fixture is used to attach a shape to a body for collision detection. A @@ -1000,181 +1001,175 @@ declare class FixtureProxy { * * To create a new Fixture use {@link Body.createFixture}. */ -declare class Fixture { - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - constructor(body: Body, def: FixtureDef); - constructor(body: Body, shape: Shape, def?: FixtureOpt); - constructor(body: Body, shape: Shape, density?: number); - /** @hidden Re-setup fixture. */ - _reset(): void; - /** - * Get the type of the child shape. You can use this to down cast to the - * concrete shape. - */ - getType(): ShapeType; - /** - * Get the child shape. You can modify the child shape, however you should not - * change the number of vertices because this will crash some collision caching - * mechanisms. Manipulating the shape may lead to non-physical behavior. - */ - getShape(): Shape; - /** - * A sensor shape collects contact information but never generates a collision - * response. - */ - isSensor(): boolean; - /** - * Set if this fixture is a sensor. - */ - setSensor(sensor: boolean): void; - // /** - // * Get the contact filtering data. - // */ - // getFilterData() { - // return this.m_filter; - // } - /** - * Get the user data that was assigned in the fixture definition. Use this to - * store your application specific data. - */ - getUserData(): unknown; - /** - * Set the user data. Use this to store your application specific data. - */ - setUserData(data: unknown): void; - /** - * Get the parent body of this fixture. This is null if the fixture is not - * attached. - */ - getBody(): Body; - /** - * Get the next fixture in the parent body's fixture list. - */ - getNext(): Fixture | null; - /** - * Get the density of this fixture. - */ - getDensity(): number; - /** - * Set the density of this fixture. This will _not_ automatically adjust the - * mass of the body. You must call Body.resetMassData to update the body's mass. - */ - setDensity(density: number): void; - /** - * Get the coefficient of friction, usually in the range [0,1]. - */ - getFriction(): number; - /** - * Set the coefficient of friction. This will not change the friction of - * existing contacts. - */ - setFriction(friction: number): void; - /** - * Get the coefficient of restitution. - */ - getRestitution(): number; - /** - * Set the coefficient of restitution. This will not change the restitution of - * existing contacts. - */ - setRestitution(restitution: number): void; - /** - * Test a point in world coordinates for containment in this fixture. - */ - testPoint(p: Vec2Value): boolean; - /** - * Cast a ray against this shape. - */ - rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean; - /** - * Get the mass data for this fixture. The mass data is based on the density and - * the shape. The rotational inertia is about the shape's origin. This operation - * may be expensive. - */ - getMassData(massData: MassData): void; - /** - * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a - * more accurate AABB, compute it using the shape and the body transform. - */ - getAABB(childIndex: number): AABB; - /** - * These support body activation/deactivation. - */ - createProxies(broadPhase: BroadPhase, xf: TransformValue): void; - destroyProxies(broadPhase: BroadPhase): void; - /** - * Updates this fixture proxy in broad-phase (with combined AABB of current and - * next transformation). - */ - synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void; - /** - * Set the contact filtering data. This will not update contacts until the next - * time step when either parent body is active and awake. This automatically - * calls refilter. - */ - setFilterData(filter: { - groupIndex: number; - categoryBits: number; - maskBits: number; - }): void; - getFilterGroupIndex(): number; - setFilterGroupIndex(groupIndex: number): void; - getFilterCategoryBits(): number; - setFilterCategoryBits(categoryBits: number): void; - getFilterMaskBits(): number; - setFilterMaskBits(maskBits: number): void; - /** - * Call this if you want to establish collision that was previously disabled by - * ContactFilter. - */ - refilter(): void; - /** - * Implement this method to provide collision filtering, if you want finer - * control over contact creation. - * - * Return true if contact calculations should be performed between these two - * fixtures. - * - * Warning: for performance reasons this is only called when the AABBs begin to - * overlap. - */ - shouldCollide(that: Fixture): boolean; +export declare class Fixture { + /** Styling for dev-tools. */ + style: Style; + /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ + appData: Record; + constructor(body: Body$1, def: FixtureDef); + constructor(body: Body$1, shape: Shape, def?: FixtureOpt); + constructor(body: Body$1, shape: Shape, density?: number); + /** @hidden Re-setup fixture. */ + _reset(): void; + /** + * Get the type of the child shape. You can use this to down cast to the + * concrete shape. + */ + getType(): ShapeType; + /** + * Get the child shape. You can modify the child shape, however you should not + * change the number of vertices because this will crash some collision caching + * mechanisms. Manipulating the shape may lead to non-physical behavior. + */ + getShape(): Shape; + /** + * A sensor shape collects contact information but never generates a collision + * response. + */ + isSensor(): boolean; + /** + * Set if this fixture is a sensor. + */ + setSensor(sensor: boolean): void; + /** + * Get the user data that was assigned in the fixture definition. Use this to + * store your application specific data. + */ + getUserData(): unknown; + /** + * Set the user data. Use this to store your application specific data. + */ + setUserData(data: unknown): void; + /** + * Get the parent body of this fixture. This is null if the fixture is not + * attached. + */ + getBody(): Body$1; + /** + * Get the next fixture in the parent body's fixture list. + */ + getNext(): Fixture | null; + /** + * Get the density of this fixture. + */ + getDensity(): number; + /** + * Set the density of this fixture. This will _not_ automatically adjust the + * mass of the body. You must call Body.resetMassData to update the body's mass. + */ + setDensity(density: number): void; + /** + * Get the coefficient of friction, usually in the range [0,1]. + */ + getFriction(): number; + /** + * Set the coefficient of friction. This will not change the friction of + * existing contacts. + */ + setFriction(friction: number): void; + /** + * Get the coefficient of restitution. + */ + getRestitution(): number; + /** + * Set the coefficient of restitution. This will not change the restitution of + * existing contacts. + */ + setRestitution(restitution: number): void; + /** + * Test a point in world coordinates for containment in this fixture. + */ + testPoint(p: Vec2Value): boolean; + /** + * Cast a ray against this shape. + */ + rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean; + /** + * Get the mass data for this fixture. The mass data is based on the density and + * the shape. The rotational inertia is about the shape's origin. This operation + * may be expensive. + */ + getMassData(massData: MassData): void; + /** + * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a + * more accurate AABB, compute it using the shape and the body transform. + */ + getAABB(childIndex: number): AABB; + /** + * These support body activation/deactivation. + */ + createProxies(broadPhase: BroadPhase, xf: TransformValue): void; + destroyProxies(broadPhase: BroadPhase): void; + /** + * Updates this fixture proxy in broad-phase (with combined AABB of current and + * next transformation). + */ + synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void; + /** + * Set the contact filtering data. This will not update contacts until the next + * time step when either parent body is active and awake. This automatically + * calls refilter. + */ + setFilterData(filter: { + groupIndex: number; + categoryBits: number; + maskBits: number; + }): void; + getFilterGroupIndex(): number; + setFilterGroupIndex(groupIndex: number): void; + getFilterCategoryBits(): number; + setFilterCategoryBits(categoryBits: number): void; + getFilterMaskBits(): number; + setFilterMaskBits(maskBits: number): void; + /** + * Call this if you want to establish collision that was previously disabled by + * ContactFilter. + */ + refilter(): void; + /** + * Implement this method to provide collision filtering, if you want finer + * control over contact creation. + * + * Return true if contact calculations should be performed between these two + * fixtures. + * + * Warning: for performance reasons this is only called when the AABBs begin to + * overlap. + */ + shouldCollide(that: Fixture): boolean; } -declare enum ManifoldType { - e_unset = -1, - e_circles = 0, - e_faceA = 1, - e_faceB = 2 +export declare enum ManifoldType { + e_unset = -1, + e_circles = 0, + e_faceA = 1, + e_faceB = 2 } -declare enum ContactFeatureType { - e_unset = -1, - e_vertex = 0, - e_face = 1 +export declare enum ContactFeatureType { + e_unset = -1, + e_vertex = 0, + e_face = 1 } /** * This is used for determining the state of contact points. */ -declare enum PointState { - /** Point does not exist */ - nullState = 0, - /** Point was added in the update */ - addState = 1, - /** Point persisted across the update */ - persistState = 2, - /** Point was removed in the update */ - removeState = 3 +export declare enum PointState { + /** Point does not exist */ + nullState = 0, + /** Point was added in the update */ + addState = 1, + /** Point persisted across the update */ + persistState = 2, + /** Point was removed in the update */ + removeState = 3 } /** * Used for computing contact manifolds. */ -declare class ClipVertex { - v: Vec2Value; - id: ContactID; - set(o: ClipVertex): void; - recycle(): void; +export declare class ClipVertex { + v: Vec2Value; + id: ContactID; + set(o: ClipVertex): void; + recycle(): void; } /** * A manifold for two touching convex shapes. Manifolds are created in `evaluate` @@ -1188,38 +1183,38 @@ declare class ClipVertex { * must be expressed in one of these types. This structure is stored across time * steps, so we keep it small. */ -declare class Manifold { - type: ManifoldType; - /** - * Usage depends on manifold type: - * - circles: not used - * - faceA: the normal on polygonA - * - faceB: the normal on polygonB - */ - localNormal: Vec2Value; - /** - * Usage depends on manifold type: - * - circles: the local center of circleA - * - faceA: the center of faceA - * - faceB: the center of faceB - */ - localPoint: Vec2Value; - /** The points of contact */ - points: ManifoldPoint[]; - /** The number of manifold points */ - pointCount: number; - set(that: Manifold): void; - recycle(): void; - /** - * Evaluate the manifold with supplied transforms. This assumes modest motion - * from the original state. This does not change the point count, impulses, etc. - * The radii must come from the shapes that generated the manifold. - */ - getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold; - static clipSegmentToLine: typeof clipSegmentToLine; - static ClipVertex: typeof ClipVertex; - static getPointStates: typeof getPointStates; - static PointState: typeof PointState; +export declare class Manifold { + type: ManifoldType; + /** + * Usage depends on manifold type: + * - circles: not used + * - faceA: the normal on polygonA + * - faceB: the normal on polygonB + */ + localNormal: Vec2Value; + /** + * Usage depends on manifold type: + * - circles: the local center of circleA + * - faceA: the center of faceA + * - faceB: the center of faceB + */ + localPoint: Vec2Value; + /** The points of contact */ + points: ManifoldPoint[]; + /** The number of manifold points */ + pointCount: number; + set(that: Manifold): void; + recycle(): void; + /** + * Evaluate the manifold with supplied transforms. This assumes modest motion + * from the original state. This does not change the point count, impulses, etc. + * The radii must come from the shapes that generated the manifold. + */ + getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold; + static clipSegmentToLine: typeof clipSegmentToLine; + static ClipVertex: typeof ClipVertex; + static getPointStates: typeof getPointStates; + static PointState: typeof PointState; } /** * A manifold point is a contact point belonging to a contact manifold. It holds @@ -1230,648 +1225,669 @@ declare class Manifold { * Note: impulses are used for internal caching and may not provide reliable * contact forces, especially for high speed collisions. */ -declare class ManifoldPoint { - /** - * Usage depends on manifold type: - * - circles: the local center of circleB - * - faceA: the local center of circleB or the clip point of polygonB - * - faceB: the clip point of polygonA - */ - localPoint: Vec2Value; - /** - * The non-penetration impulse - */ - normalImpulse: number; - /** - * The friction impulse - */ - tangentImpulse: number; - /** - * Uniquely identifies a contact point between two shapes to facilitate warm starting - */ - readonly id: ContactID; - set(that: ManifoldPoint): void; - recycle(): void; +export declare class ManifoldPoint { + /** + * Usage depends on manifold type: + * - circles: the local center of circleB + * - faceA: the local center of circleB or the clip point of polygonB + * - faceB: the clip point of polygonA + */ + localPoint: Vec2Value; + /** + * The non-penetration impulse + */ + normalImpulse: number; + /** + * The friction impulse + */ + tangentImpulse: number; + /** + * Uniquely identifies a contact point between two shapes to facilitate warm starting + */ + readonly id: ContactID; + set(that: ManifoldPoint): void; + recycle(): void; } /** * Contact ids to facilitate warm starting. * * ContactFeature: The features that intersect to form the contact point. */ -declare class ContactID { - /** - * Used to quickly compare contact ids. - */ - key: number; - /** ContactFeature index on shapeA */ - indexA: number; - /** ContactFeature index on shapeB */ - indexB: number; - /** ContactFeature type on shapeA */ - typeA: ContactFeatureType; - /** ContactFeature type on shapeB */ - typeB: ContactFeatureType; - setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void; - set(that: ContactID): void; - swapFeatures(): void; - recycle(): void; +export declare class ContactID { + /** + * Used to quickly compare contact ids. + */ + key: number; + /** ContactFeature index on shapeA */ + indexA: number; + /** ContactFeature index on shapeB */ + indexB: number; + /** ContactFeature type on shapeA */ + typeA: ContactFeatureType; + /** ContactFeature type on shapeB */ + typeB: ContactFeatureType; + setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void; + set(that: ContactID): void; + swapFeatures(): void; + recycle(): void; } /** * This is used to compute the current state of a contact manifold. */ -declare class WorldManifold { - /** World vector pointing from A to B */ - normal: Vec2Value; - /** World contact point (point of intersection) */ - points: Vec2Value[]; // [maxManifoldPoints] - /** A negative value indicates overlap, in meters */ - separations: number[]; // [maxManifoldPoints] - /** The number of manifold points */ - pointCount: number; - recycle(): void; +export declare class WorldManifold { + /** World vector pointing from A to B */ + normal: Vec2Value; + /** World contact point (point of intersection) */ + points: Vec2Value[]; + /** A negative value indicates overlap, in meters */ + separations: number[]; + /** The number of manifold points */ + pointCount: number; + recycle(): void; } /** * Compute the point states given two manifolds. The states pertain to the * transition from manifold1 to manifold2. So state1 is either persist or remove * while state2 is either add or persist. */ -declare function getPointStates(state1: PointState[], state2: PointState[], manifold1: Manifold, manifold2: Manifold): void; +export declare function getPointStates(state1: PointState[], state2: PointState[], manifold1: Manifold, manifold2: Manifold): void; /** * Clipping for contact manifolds. Sutherland-Hodgman clipping. */ -declare function clipSegmentToLine(vOut: ClipVertex[], vIn: ClipVertex[], normal: Vec2Value, offset: number, vertexIndexA: number): number; +export declare function clipSegmentToLine(vOut: ClipVertex[], vIn: ClipVertex[], normal: Vec2Value, offset: number, vertexIndexA: number): number; /** * A contact edge is used to connect bodies and contacts together in a contact * graph where each body is a node and each contact is an edge. A contact edge * belongs to a doubly linked list maintained in each attached body. Each * contact has two contact nodes, one for each attached body. */ -declare class ContactEdge { - contact: Contact; - prev: ContactEdge | null; - next: ContactEdge | null; - other: Body | null; - constructor(contact: Contact); +export declare class ContactEdge { + contact: Contact; + prev: ContactEdge | null; + next: ContactEdge | null; + other: Body$1 | null; + constructor(contact: Contact); } -type EvaluateFunction = (manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number) => void; +export type EvaluateFunction = (manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number) => void; /** * Friction mixing law. The idea is to allow either fixture to drive the * friction to zero. For example, anything slides on ice. */ -declare function mixFriction(friction1: number, friction2: number): number; +export declare function mixFriction(friction1: number, friction2: number): number; /** * Restitution mixing law. The idea is allow for anything to bounce off an * inelastic surface. For example, a superball bounces on anything. */ -declare function mixRestitution(restitution1: number, restitution2: number): number; -// TODO: merge with ManifoldPoint? -declare class VelocityConstraintPoint { - rA: Vec2Value; - rB: Vec2Value; - normalImpulse: number; - tangentImpulse: number; - normalMass: number; - tangentMass: number; - velocityBias: number; - recycle(): void; +export declare function mixRestitution(restitution1: number, restitution2: number): number; +export declare class VelocityConstraintPoint { + rA: Vec2Value; + rB: Vec2Value; + normalImpulse: number; + tangentImpulse: number; + normalMass: number; + tangentMass: number; + velocityBias: number; + recycle(): void; } /** * The class manages contact between two shapes. A contact exists for each * overlapping AABB in the broad-phase (except if filtered). Therefore a contact * object may exist that has no contact points. */ -declare class Contact { - initConstraint(step: TimeStep): void; - /** - * Get the contact manifold. Do not modify the manifold unless you understand - * the internals of the library. - */ - getManifold(): Manifold; - /** - * Get the world manifold. - */ - getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined; - /** - * Enable/disable this contact. This can be used inside the pre-solve contact - * listener. The contact is only disabled for the current time step (or sub-step - * in continuous collisions). - */ - setEnabled(flag: boolean): void; - /** - * Has this contact been disabled? - */ - isEnabled(): boolean; - /** - * Is this contact touching? - */ - isTouching(): boolean; - /** - * Get the next contact in the world's contact list. - */ - getNext(): Contact | null; - /** - * Get fixture A in this contact. - */ - getFixtureA(): Fixture; - /** - * Get fixture B in this contact. - */ - getFixtureB(): Fixture; - /** - * Get the child primitive index for fixture A. - */ - getChildIndexA(): number; - /** - * Get the child primitive index for fixture B. - */ - getChildIndexB(): number; - /** - * Flag this contact for filtering. Filtering will occur the next time step. - */ - flagForFiltering(): void; - /** - * Override the default friction mixture. You can call this in - * "pre-solve" callback. This value persists until set or reset. - */ - setFriction(friction: number): void; - /** - * Get the friction. - */ - getFriction(): number; - /** - * Reset the friction mixture to the default value. - */ - resetFriction(): void; - /** - * Override the default restitution mixture. You can call this in - * "pre-solve" callback. The value persists until you set or reset. - */ - setRestitution(restitution: number): void; - /** - * Get the restitution. - */ - getRestitution(): number; - /** - * Reset the restitution to the default value. - */ - resetRestitution(): void; - /** - * Set the desired tangent speed for a conveyor belt behavior. In meters per - * second. - */ - setTangentSpeed(speed: number): void; - /** - * Get the desired tangent speed. In meters per second. - */ - getTangentSpeed(): number; - /** - * Called by Update method, and implemented by subclasses. - */ - evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void; - /** - * Updates the contact manifold and touching status. - * - * Note: do not assume the fixture AABBs are overlapping or are valid. - * - * @param listener.beginContact - * @param listener.endContact - * @param listener.preSolve - */ - update(listener?: { - beginContact(contact: Contact): void; - endContact(contact: Contact): void; - preSolve(contact: Contact, oldManifold: Manifold): void; - }): void; - solvePositionConstraint(step: TimeStep): number; - solvePositionConstraintTOI(step: TimeStep, toiA: Body, toiB: Body): number; - private _solvePositionConstraint; - initVelocityConstraint(step: TimeStep): void; - warmStartConstraint(step: TimeStep): void; - storeConstraintImpulses(step: TimeStep): void; - solveVelocityConstraint(step: TimeStep): void; +export declare class Contact { + initConstraint(step: TimeStep): void; + /** + * Get the contact manifold. Do not modify the manifold unless you understand + * the internals of the library. + */ + getManifold(): Manifold; + /** + * Get the world manifold. + */ + getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined; + /** + * Enable/disable this contact. This can be used inside the pre-solve contact + * listener. The contact is only disabled for the current time step (or sub-step + * in continuous collisions). + */ + setEnabled(flag: boolean): void; + /** + * Has this contact been disabled? + */ + isEnabled(): boolean; + /** + * Is this contact touching? + */ + isTouching(): boolean; + /** + * Get the next contact in the world's contact list. + */ + getNext(): Contact | null; + /** + * Get fixture A in this contact. + */ + getFixtureA(): Fixture; + /** + * Get fixture B in this contact. + */ + getFixtureB(): Fixture; + /** + * Get the child primitive index for fixture A. + */ + getChildIndexA(): number; + /** + * Get the child primitive index for fixture B. + */ + getChildIndexB(): number; + /** + * Flag this contact for filtering. Filtering will occur the next time step. + */ + flagForFiltering(): void; + /** + * Override the default friction mixture. You can call this in + * "pre-solve" callback. This value persists until set or reset. + */ + setFriction(friction: number): void; + /** + * Get the friction. + */ + getFriction(): number; + /** + * Reset the friction mixture to the default value. + */ + resetFriction(): void; + /** + * Override the default restitution mixture. You can call this in + * "pre-solve" callback. The value persists until you set or reset. + */ + setRestitution(restitution: number): void; + /** + * Get the restitution. + */ + getRestitution(): number; + /** + * Reset the restitution to the default value. + */ + resetRestitution(): void; + /** + * Set the desired tangent speed for a conveyor belt behavior. In meters per + * second. + */ + setTangentSpeed(speed: number): void; + /** + * Get the desired tangent speed. In meters per second. + */ + getTangentSpeed(): number; + /** + * Called by Update method, and implemented by subclasses. + */ + evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void; + /** + * Updates the contact manifold and touching status. + * + * Note: do not assume the fixture AABBs are overlapping or are valid. + * + * @param listener.beginContact + * @param listener.endContact + * @param listener.preSolve + */ + update(listener?: { + beginContact(contact: Contact): void; + endContact(contact: Contact): void; + preSolve(contact: Contact, oldManifold: Manifold): void; + }): void; + solvePositionConstraint(step: TimeStep): number; + solvePositionConstraintTOI(step: TimeStep, toiA: Body$1, toiB: Body$1): number; + private _solvePositionConstraint; + initVelocityConstraint(step: TimeStep): void; + warmStartConstraint(step: TimeStep): void; + storeConstraintImpulses(step: TimeStep): void; + solveVelocityConstraint(step: TimeStep): void; } -type BodyType = "static" | "kinematic" | "dynamic"; -interface BodyDef { - /** - * Body types are static, kinematic, or dynamic. Note: if a dynamic - * body would have zero mass, the mass is set to one. - */ - type?: BodyType; - /** - * The world position of the body. Avoid creating bodies at the - * origin since this can lead to many overlapping shapes. - */ - position?: Vec2Value; - /** - * The world angle of the body in radians. - */ - angle?: number; - /** - * The linear velocity of the body's origin in world co-ordinates. - */ - linearVelocity?: Vec2Value; - angularVelocity?: number; - /** - * Linear damping is use to reduce the linear velocity. The - * damping parameter can be larger than 1.0 but the damping effect becomes - * sensitive to the time step when the damping parameter is large. - * Units are 1/time - */ - linearDamping?: number; - /** - * Angular damping is use to reduce the angular velocity. - * The damping parameter can be larger than 1.0 but the damping effect - * becomes sensitive to the time step when the damping parameter is large. - * Units are 1/time - */ - angularDamping?: number; - /** - * Should this body be prevented from rotating? Useful for characters. - */ - fixedRotation?: boolean; - /** - * Is this a fast moving body that should be prevented from - * tunneling through other moving bodies? Note that all bodies are - * prevented from tunneling through kinematic and static bodies. This - * setting is only considered on dynamic bodies. Warning: You should use - * this flag sparingly since it increases processing time. - */ - bullet?: boolean; - gravityScale?: number; - /** - * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage. - */ - allowSleep?: boolean; - /** - * Is this body initially awake or sleeping? - */ - awake?: boolean; - /** - * Does this body start out active? - */ - active?: boolean; - userData?: any; +/** + * A static body does not move under simulation and behaves as if it has infinite mass. + * Internally, zero is stored for the mass and the inverse mass. + * Static bodies can be moved manually by the user. + * A static body has zero velocity. + * Static bodies do not collide with other static or kinematic bodies. + * + * A kinematic body moves under simulation according to its velocity. + * Kinematic bodies do not respond to forces. + * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity. + * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass. + * Kinematic bodies do not collide with other kinematic or static bodies. + * + * A dynamic body is fully simulated. + * They can be moved manually by the user, but normally they move according to forces. + * A dynamic body can collide with all body types. + * A dynamic body always has finite, non-zero mass. + * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate. + */ +export type BodyType = "static" | "kinematic" | "dynamic"; +export interface BodyDef { + /** + * Body types are static, kinematic, or dynamic. Note: if a dynamic + * body would have zero mass, the mass is set to one. + */ + type?: BodyType; + /** + * The world position of the body. Avoid creating bodies at the + * origin since this can lead to many overlapping shapes. + */ + position?: Vec2Value; + /** + * The world angle of the body in radians. + */ + angle?: number; + /** + * The linear velocity of the body's origin in world co-ordinates. + */ + linearVelocity?: Vec2Value; + angularVelocity?: number; + /** + * Linear damping is use to reduce the linear velocity. The + * damping parameter can be larger than 1.0 but the damping effect becomes + * sensitive to the time step when the damping parameter is large. + * Units are 1/time + */ + linearDamping?: number; + /** + * Angular damping is use to reduce the angular velocity. + * The damping parameter can be larger than 1.0 but the damping effect + * becomes sensitive to the time step when the damping parameter is large. + * Units are 1/time + */ + angularDamping?: number; + /** + * Should this body be prevented from rotating? Useful for characters. + */ + fixedRotation?: boolean; + /** + * Is this a fast moving body that should be prevented from + * tunneling through other moving bodies? Note that all bodies are + * prevented from tunneling through kinematic and static bodies. This + * setting is only considered on dynamic bodies. Warning: You should use + * this flag sparingly since it increases processing time. + */ + bullet?: boolean; + gravityScale?: number; + /** + * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage. + */ + allowSleep?: boolean; + /** + * Is this body initially awake or sleeping? + */ + awake?: boolean; + /** + * Does this body start out active? + */ + active?: boolean; + userData?: any; } /** * MassData This holds the mass data computed for a shape. */ -interface MassData { - /** The mass of the shape, usually in kilograms. */ - mass: number; - /** The position of the shape's centroid relative to the shape's origin. */ - center: Vec2Value; - /** The rotational inertia of the shape about the local origin. */ - I: number; +export interface MassData { + /** The mass of the shape, usually in kilograms. */ + mass: number; + /** The position of the shape's centroid relative to the shape's origin. */ + center: Vec2Value; + /** The rotational inertia of the shape about the local origin. */ + I: number; } /** * A rigid body composed of one or more fixtures. * * To create a new Body use {@link World.createBody}. */ -declare class Body { - /** - * A static body does not move under simulation and behaves as if it has infinite mass. - * Internally, zero is stored for the mass and the inverse mass. - * Static bodies can be moved manually by the user. - * A static body has zero velocity. - * Static bodies do not collide with other static or kinematic bodies. - */ - static readonly STATIC: BodyType; - /** - * A kinematic body moves under simulation according to its velocity. - * Kinematic bodies do not respond to forces. - * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity. - * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass. - * Kinematic bodies do not collide with other kinematic or static bodies. - */ - static readonly KINEMATIC: BodyType; - /** - * A dynamic body is fully simulated. - * They can be moved manually by the user, but normally they move according to forces. - * A dynamic body can collide with all body types. - * A dynamic body always has finite, non-zero mass. - * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate. - */ - static readonly DYNAMIC: BodyType; - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - isWorldLocked(): boolean; - getWorld(): World; - getNext(): Body | null; - setUserData(data: any): void; - getUserData(): unknown; - getFixtureList(): Fixture | null; - getJointList(): JointEdge | null; - /** - * Warning: this list changes during the time step and you may miss some - * collisions if you don't use ContactListener. - */ - getContactList(): ContactEdge | null; - isStatic(): boolean; - isDynamic(): boolean; - isKinematic(): boolean; - /** - * This will alter the mass and velocity. - */ - setStatic(): Body; - setDynamic(): Body; - setKinematic(): Body; - /** - * Get the type of the body. - */ - getType(): BodyType; - /** - * Set the type of the body to "static", "kinematic" or "dynamic". - * @param type The type of the body. - */ - setType(type: BodyType): void; - isBullet(): boolean; - /** - * Should this body be treated like a bullet for continuous collision detection? - */ - setBullet(flag: boolean): void; - isSleepingAllowed(): boolean; - setSleepingAllowed(flag: boolean): void; - isAwake(): boolean; - /** - * Set the sleep state of the body. A sleeping body has very low CPU cost. - * - * @param flag Set to true to wake the body, false to put it to sleep. - */ - setAwake(flag: boolean): void; - isActive(): boolean; - /** - * Set the active state of the body. An inactive body is not simulated and - * cannot be collided with or woken up. If you pass a flag of true, all fixtures - * will be added to the broad-phase. If you pass a flag of false, all fixtures - * will be removed from the broad-phase and all contacts will be destroyed. - * Fixtures and joints are otherwise unaffected. - * - * You may continue to create/destroy fixtures and joints on inactive bodies. - * Fixtures on an inactive body are implicitly inactive and will not participate - * in collisions, ray-casts, or queries. Joints connected to an inactive body - * are implicitly inactive. An inactive body is still owned by a World object - * and remains - */ - setActive(flag: boolean): void; - isFixedRotation(): boolean; - /** - * Set this body to have fixed rotation. This causes the mass to be reset. - */ - setFixedRotation(flag: boolean): void; - /** - * Get the world transform for the body's origin. - */ - getTransform(): Transform; - /** - * Set the position of the body's origin and rotation. Manipulating a body's - * transform may cause non-physical behavior. Note: contacts are updated on the - * next call to World.step. - * - * @param position The world position of the body's local origin. - * @param angle The world rotation in radians. - */ - setTransform(position: Vec2Value, angle: number): void; - synchronizeTransform(): void; - /** - * Update fixtures in broad-phase. - */ - synchronizeFixtures(): void; - /** - * Used in TOI. - */ - advance(alpha: number): void; - /** - * Get the world position for the body's origin. - */ - getPosition(): Vec2; - setPosition(p: Vec2Value): void; - /** - * Get the current world rotation angle in radians. - */ - getAngle(): number; - setAngle(angle: number): void; - /** - * Get the world position of the center of mass. - */ - getWorldCenter(): Vec2; - /** - * Get the local position of the center of mass. - */ - getLocalCenter(): Vec2; - /** - * Get the linear velocity of the center of mass. - * - * @return the linear velocity of the center of mass. - */ - getLinearVelocity(): Vec2; - /** - * Get the world linear velocity of a world point attached to this body. - * - * @param worldPoint A point in world coordinates. - */ - getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2; - /** - * Get the world velocity of a local point. - * - * @param localPoint A point in local coordinates. - */ - getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2; - /** - * Set the linear velocity of the center of mass. - * - * @param v The new linear velocity of the center of mass. - */ - setLinearVelocity(v: Vec2Value): void; - /** - * Get the angular velocity. - * - * @returns the angular velocity in radians/second. - */ - getAngularVelocity(): number; - /** - * Set the angular velocity. - * - * @param omega The new angular velocity in radians/second. - */ - setAngularVelocity(w: number): void; - getLinearDamping(): number; - setLinearDamping(linearDamping: number): void; - getAngularDamping(): number; - setAngularDamping(angularDamping: number): void; - getGravityScale(): number; - /** - * Scale the gravity applied to this body. - */ - setGravityScale(scale: number): void; - /** - * Get the total mass of the body. - * - * @returns The mass, usually in kilograms (kg). - */ - getMass(): number; - /** - * Get the rotational inertia of the body about the local origin. - * - * @return the rotational inertia, usually in kg-m^2. - */ - getInertia(): number; - /** - * Copy the mass data of the body to data. - */ - getMassData(data: MassData): void; - /** - * This resets the mass properties to the sum of the mass properties of the - * fixtures. This normally does not need to be called unless you called - * SetMassData to override the mass and you later want to reset the mass. - */ - resetMassData(): void; - /** - * Set the mass properties to override the mass properties of the fixtures. Note - * that this changes the center of mass position. Note that creating or - * destroying fixtures can also alter the mass. This function has no effect if - * the body isn't dynamic. - * - * @param massData The mass properties. - */ - setMassData(massData: MassData): void; - /** - * Apply a force at a world point. If the force is not applied at the center of - * mass, it will generate a torque and affect the angular velocity. This wakes - * up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - applyForce(force: Vec2Value, point: Vec2Value, wake?: boolean): void; - /** - * Apply a force to the center of mass. This wakes up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param wake Also wake up the body - */ - applyForceToCenter(force: Vec2Value, wake?: boolean): void; - /** - * Apply a torque. This affects the angular velocity without affecting the - * linear velocity of the center of mass. This wakes up the body. - * - * @param torque About the z-axis (out of the screen), usually in N-m. - * @param wake Also wake up the body - */ - applyTorque(torque: number, wake?: boolean): void; - /** - * Apply an impulse at a point. This immediately modifies the velocity. It also - * modifies the angular velocity if the point of application is not at the - * center of mass. This wakes up the body. - * - * @param impulse The world impulse vector, usually in N-seconds or kg-m/s. - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake?: boolean): void; - /** - * Apply an angular impulse. - * - * @param impulse The angular impulse in units of kg*m*m/s - * @param wake Also wake up the body - */ - applyAngularImpulse(impulse: number, wake?: boolean): void; - /** - * This is used to test if two bodies should collide. - * - * Bodies do not collide when: - * - Neither of them is dynamic - * - They are connected by a joint with collideConnected == false - */ - shouldCollide(that: Body): boolean; - /** - * Creates a fixture and attach it to this body. - * - * If the density is non-zero, this function automatically updates the mass of - * the body. - * - * Contacts are not created until the next time step. - * - * Warning: This function is locked during callbacks. - */ - createFixture(def: FixtureDef): Fixture; - createFixture(shape: Shape, opt?: FixtureOpt): Fixture; - createFixture(shape: Shape, density?: number): Fixture; - /** - * Destroy a fixture. This removes the fixture from the broad-phase and destroys - * all contacts associated with this fixture. This will automatically adjust the - * mass of the body if the body is dynamic and the fixture has positive density. - * All fixtures attached to a body are implicitly destroyed when the body is - * destroyed. - * - * Warning: This function is locked during callbacks. - * - * @param fixture The fixture to be removed. - */ - destroyFixture(fixture: Fixture): void; - /** - * Get the corresponding world point of a local point. - */ - getWorldPoint(localPoint: Vec2Value): Vec2; - /** - * Get the corresponding world vector of a local vector. - */ - getWorldVector(localVector: Vec2Value): Vec2; - /** - * Gets the corresponding local point of a world point. - */ - getLocalPoint(worldPoint: Vec2Value): Vec2; - /** - * Gets the corresponding local vector of a world vector. - */ - getLocalVector(worldVector: Vec2Value): Vec2; +declare class Body$1 { + /** @hidden */ + static readonly STATIC: BodyType; + /** @hidden */ + static readonly KINEMATIC: BodyType; + /** @hidden */ + static readonly DYNAMIC: BodyType; + /** @hidden Styling for dev-tools. */ + style: Style; + /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ + appData: Record; + isWorldLocked(): boolean; + getWorld(): World; + getNext(): Body$1 | null; + setUserData(data: any): void; + getUserData(): unknown; + getFixtureList(): Fixture | null; + getJointList(): JointEdge | null; + /** + * Warning: this list changes during the time step and you may miss some + * collisions if you don't use ContactListener. + */ + getContactList(): ContactEdge | null; + isStatic(): boolean; + isDynamic(): boolean; + isKinematic(): boolean; + /** + * This will alter the mass and velocity. + */ + setStatic(): Body$1; + setDynamic(): Body$1; + setKinematic(): Body$1; + /** + * Get the type of the body. + */ + getType(): BodyType; + /** + * Set the type of the body to "static", "kinematic" or "dynamic". + * @param type The type of the body. + */ + setType(type: BodyType): void; + isBullet(): boolean; + /** + * Should this body be treated like a bullet for continuous collision detection? + */ + setBullet(flag: boolean): void; + isSleepingAllowed(): boolean; + setSleepingAllowed(flag: boolean): void; + isAwake(): boolean; + /** + * Set the sleep state of the body. A sleeping body has very low CPU cost. + * + * @param flag Set to true to wake the body, false to put it to sleep. + */ + setAwake(flag: boolean): void; + isActive(): boolean; + /** + * Set the active state of the body. An inactive body is not simulated and + * cannot be collided with or woken up. If you pass a flag of true, all fixtures + * will be added to the broad-phase. If you pass a flag of false, all fixtures + * will be removed from the broad-phase and all contacts will be destroyed. + * Fixtures and joints are otherwise unaffected. + * + * You may continue to create/destroy fixtures and joints on inactive bodies. + * Fixtures on an inactive body are implicitly inactive and will not participate + * in collisions, ray-casts, or queries. Joints connected to an inactive body + * are implicitly inactive. An inactive body is still owned by a World object + * and remains + */ + setActive(flag: boolean): void; + isFixedRotation(): boolean; + /** + * Set this body to have fixed rotation. This causes the mass to be reset. + */ + setFixedRotation(flag: boolean): void; + /** + * Get the world transform for the body's origin. + */ + getTransform(): Transform; + /** + * Set the position of the body's origin and rotation. Manipulating a body's + * transform may cause non-physical behavior. Note: contacts are updated on the + * next call to World.step. + * + * @param position The world position of the body's local origin. + * @param angle The world rotation in radians. + */ + setTransform(position: Vec2Value, angle: number): void; + synchronizeTransform(): void; + /** + * Update fixtures in broad-phase. + */ + synchronizeFixtures(): void; + /** + * Used in TOI. + */ + advance(alpha: number): void; + /** + * Get the world position for the body's origin. + */ + getPosition(): Vec2; + setPosition(p: Vec2Value): void; + /** + * Get the current world rotation angle in radians. + */ + getAngle(): number; + setAngle(angle: number): void; + /** + * Get the world position of the center of mass. + */ + getWorldCenter(): Vec2; + /** + * Get the local position of the center of mass. + */ + getLocalCenter(): Vec2; + /** + * Get the linear velocity of the center of mass. + * + * @return the linear velocity of the center of mass. + */ + getLinearVelocity(): Vec2; + /** + * Get the world linear velocity of a world point attached to this body. + * + * @param worldPoint A point in world coordinates. + */ + getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2; + /** + * Get the world velocity of a local point. + * + * @param localPoint A point in local coordinates. + */ + getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2; + /** + * Set the linear velocity of the center of mass. + * + * @param v The new linear velocity of the center of mass. + */ + setLinearVelocity(v: Vec2Value): void; + /** + * Get the angular velocity. + * + * @returns the angular velocity in radians/second. + */ + getAngularVelocity(): number; + /** + * Set the angular velocity. + * + * @param w The new angular velocity in radians/second. + */ + setAngularVelocity(w: number): void; + getLinearDamping(): number; + setLinearDamping(linearDamping: number): void; + getAngularDamping(): number; + setAngularDamping(angularDamping: number): void; + getGravityScale(): number; + /** + * Scale the gravity applied to this body. + */ + setGravityScale(scale: number): void; + /** + * Get the total mass of the body. + * + * @returns The mass, usually in kilograms (kg). + */ + getMass(): number; + /** + * Get the rotational inertia of the body about the local origin. + * + * @return the rotational inertia, usually in kg-m^2. + */ + getInertia(): number; + /** + * Copy the mass data of the body to data. + */ + getMassData(data: MassData): void; + /** + * This resets the mass properties to the sum of the mass properties of the + * fixtures. This normally does not need to be called unless you called + * SetMassData to override the mass and you later want to reset the mass. + */ + resetMassData(): void; + /** + * Set the mass properties to override the mass properties of the fixtures. Note + * that this changes the center of mass position. Note that creating or + * destroying fixtures can also alter the mass. This function has no effect if + * the body isn't dynamic. + * + * @param massData The mass properties. + */ + setMassData(massData: MassData): void; + /** + * Apply a force at a world point. If the force is not applied at the center of + * mass, it will generate a torque and affect the angular velocity. This wakes + * up the body. + * + * @param force The world force vector, usually in Newtons (N). + * @param point The world position of the point of application. + * @param wake Also wake up the body + */ + applyForce(force: Vec2Value, point: Vec2Value, wake?: boolean): void; + /** + * Apply a force to the center of mass. This wakes up the body. + * + * @param force The world force vector, usually in Newtons (N). + * @param wake Also wake up the body + */ + applyForceToCenter(force: Vec2Value, wake?: boolean): void; + /** + * Apply a torque. This affects the angular velocity without affecting the + * linear velocity of the center of mass. This wakes up the body. + * + * @param torque About the z-axis (out of the screen), usually in N-m. + * @param wake Also wake up the body + */ + applyTorque(torque: number, wake?: boolean): void; + /** + * Apply an impulse at a point. This immediately modifies the velocity. It also + * modifies the angular velocity if the point of application is not at the + * center of mass. This wakes up the body. + * + * @param impulse The world impulse vector, usually in N-seconds or kg-m/s. + * @param point The world position of the point of application. + * @param wake Also wake up the body + */ + applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake?: boolean): void; + /** + * Apply an angular impulse. + * + * @param impulse The angular impulse in units of kg*m*m/s + * @param wake Also wake up the body + */ + applyAngularImpulse(impulse: number, wake?: boolean): void; + /** + * This is used to test if two bodies should collide. + * + * Bodies do not collide when: + * - Neither of them is dynamic + * - They are connected by a joint with collideConnected == false + */ + shouldCollide(that: Body$1): boolean; + /** + * Creates a fixture and attach it to this body. + * + * If the density is non-zero, this function automatically updates the mass of + * the body. + * + * Contacts are not created until the next time step. + * + * Warning: This function is locked during callbacks. + */ + createFixture(def: FixtureDef): Fixture; + createFixture(shape: Shape, opt?: FixtureOpt): Fixture; + createFixture(shape: Shape, density?: number): Fixture; + /** + * Destroy a fixture. This removes the fixture from the broad-phase and destroys + * all contacts associated with this fixture. This will automatically adjust the + * mass of the body if the body is dynamic and the fixture has positive density. + * All fixtures attached to a body are implicitly destroyed when the body is + * destroyed. + * + * Warning: This function is locked during callbacks. + * + * @param fixture The fixture to be removed. + */ + destroyFixture(fixture: Fixture): void; + /** + * Get the corresponding world point of a local point. + */ + getWorldPoint(localPoint: Vec2Value): Vec2; + /** + * Get the corresponding world vector of a local vector. + */ + getWorldVector(localVector: Vec2Value): Vec2; + /** + * Gets the corresponding local point of a world point. + */ + getLocalPoint(worldPoint: Vec2Value): Vec2; + /** + * Gets the corresponding local vector of a world vector. + */ + getLocalVector(worldVector: Vec2Value): Vec2; } -declare class TimeStep { - /** time step */ - dt: number; - /** inverse time step (0 if dt == 0) */ - inv_dt: number; - velocityIterations: number; - positionIterations: number; - warmStarting: boolean; - blockSolve: boolean; - /** timestep ratio for variable timestep */ - inv_dt0: number; - /** dt * inv_dt0 */ - dtRatio: number; - reset(dt: number): void; +export declare class TimeStep { + /** time step */ + dt: number; + /** inverse time step (0 if dt == 0) */ + inv_dt: number; + velocityIterations: number; + positionIterations: number; + warmStarting: boolean; + blockSolve: boolean; + /** timestep ratio for variable timestep */ + inv_dt0: number; + /** dt * inv_dt0 */ + dtRatio: number; + reset(dt: number): void; } /** * Contact impulses for reporting. Impulses are used instead of forces because * sub-step forces may approach infinity for rigid body collisions. These match * up one-to-one with the contact points in Manifold. */ -declare class ContactImpulse { - // TODO: merge with Contact class? - private readonly contact; - private readonly normals; - private readonly tangents; - constructor(contact: Contact); - recycle(): void; - get normalImpulses(): number[]; - get tangentImpulses(): number[]; +export declare class ContactImpulse { + private readonly contact; + private readonly normals; + private readonly tangents; + constructor(contact: Contact); + recycle(): void; + get normalImpulses(): number[]; + get tangentImpulses(): number[]; +} +/** + * Finds and solves islands. An island is a connected subset of the world. + */ +export declare class Solver { + m_world: World; + m_stack: Body$1[]; + m_bodies: Body$1[]; + m_contacts: Contact[]; + m_joints: Joint[]; + constructor(world: World); + clear(): void; + addBody(body: Body$1): void; + addContact(contact: Contact): void; + addJoint(joint: Joint): void; + solveWorld(step: TimeStep): void; + solveIsland(step: TimeStep): void; + /** + * Find TOI contacts and solve them. + */ + solveWorldTOI(step: TimeStep): void; + solveIslandTOI(subStep: TimeStep, toiA: Body$1, toiB: Body$1): void; } -interface WorldDef { - /** [default: { x : 0, y : 0}] */ - gravity?: Vec2Value; - /** [default: true] */ - allowSleep?: boolean; - /** [default: true] */ - warmStarting?: boolean; - /** [default: true] */ - continuousPhysics?: boolean; - /** [default: false] */ - subStepping?: boolean; - /** [default: true] */ - blockSolve?: boolean; +export interface WorldDef { + /** [default: { x : 0, y : 0}] */ + gravity?: Vec2Value; + /** [default: true] */ + allowSleep?: boolean; + /** [default: true] */ + warmStarting?: boolean; + /** [default: true] */ + continuousPhysics?: boolean; + /** [default: false] */ + subStepping?: boolean; + /** [default: true] */ + blockSolve?: boolean; } /** * Callback function for ray casts, see {@link World.rayCast}. @@ -1892,642 +1908,633 @@ interface WorldDef { * * @returns A number to update the maxFraction */ -type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number; +export type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number; /** * Called for each fixture found in the query AABB. It may return `false` to terminate the query. */ -type WorldAABBQueryCallback = (fixture: Fixture) => boolean; -declare function World(def?: WorldDef | Vec2 | null): World; -declare class World { - /** - * @param def World definition or gravity vector. - */ - constructor(def?: WorldDef | Vec2 | null); - /** - * Get the world body list. With the returned body, use Body.getNext to get the - * next body in the world list. A null body indicates the end of the list. - * - * @return the head of the world body list. - */ - getBodyList(): Body | null; - /** - * Get the world joint list. With the returned joint, use Joint.getNext to get - * the next joint in the world list. A null joint indicates the end of the list. - * - * @return the head of the world joint list. - */ - getJointList(): Joint | null; - /** - * Get the world contact list. With the returned contact, use Contact.getNext to - * get the next contact in the world list. A null contact indicates the end of - * the list. - * - * Warning: contacts are created and destroyed in the middle of a time step. - * Use ContactListener to avoid missing contacts. - * - * @return the head of the world contact list. - */ - getContactList(): Contact | null; - getBodyCount(): number; - getJointCount(): number; - /** - * Get the number of contacts (each may have 0 or more contact points). - */ - getContactCount(): number; - /** - * Change the global gravity vector. - */ - setGravity(gravity: Vec2Value): void; - /** - * Get the global gravity vector. - */ - getGravity(): Vec2; - /** - * Is the world locked (in the middle of a time step). - */ - isLocked(): boolean; - /** - * Enable/disable sleep. - */ - setAllowSleeping(flag: boolean): void; - getAllowSleeping(): boolean; - /** - * Enable/disable warm starting. For testing. - */ - setWarmStarting(flag: boolean): void; - getWarmStarting(): boolean; - /** - * Enable/disable continuous physics. For testing. - */ - setContinuousPhysics(flag: boolean): void; - getContinuousPhysics(): boolean; - /** - * Enable/disable single stepped continuous physics. For testing. - */ - setSubStepping(flag: boolean): void; - getSubStepping(): boolean; - /** - * Set flag to control automatic clearing of forces after each time step. - */ - setAutoClearForces(flag: boolean): void; - /** - * Get the flag that controls automatic clearing of forces after each time step. - */ - getAutoClearForces(): boolean; - /** - * Manually clear the force buffer on all bodies. By default, forces are cleared - * automatically after each call to step. The default behavior is modified by - * calling setAutoClearForces. The purpose of this function is to support - * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step - * under a variable frame-rate. When you perform sub-stepping you will disable - * auto clearing of forces and instead call clearForces after all sub-steps are - * complete in one pass of your game loop. - * - * See {@link World.setAutoClearForces} - */ - clearForces(): void; - /** - * Query the world for all fixtures that potentially overlap the provided AABB. - * - * @param aabb The query box. - * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query. - */ - queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void; - /** - * Ray-cast the world for all fixtures in the path of the ray. Your callback - * controls whether you get the closest point, any point, or n-points. The - * ray-cast ignores shapes that contain the starting point. - * - * @param point1 The ray starting point - * @param point2 The ray ending point - * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value. - */ - rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void; - /** - * Get the number of broad-phase proxies. - */ - getProxyCount(): number; - /** - * Get the height of broad-phase dynamic tree. - */ - getTreeHeight(): number; - /** - * Get the balance of broad-phase dynamic tree. - */ - getTreeBalance(): number; - /** - * Get the quality metric of broad-phase dynamic tree. The smaller the better. - * The minimum is 1. - */ - getTreeQuality(): number; - /** - * Shift the world origin. Useful for large worlds. The body shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Create a rigid body given a definition. No reference to the definition is - * retained. - * - * Warning: This function is locked during callbacks. - */ - createBody(def?: BodyDef): Body; - createBody(position: Vec2Value, angle?: number): Body; - createDynamicBody(def?: BodyDef): Body; - createDynamicBody(position: Vec2Value, angle?: number): Body; - createKinematicBody(def?: BodyDef): Body; - createKinematicBody(position: Vec2Value, angle?: number): Body; - /** - * Destroy a rigid body given a definition. No reference to the definition is - * retained. - * - * Warning: This automatically deletes all associated shapes and joints. - * - * Warning: This function is locked during callbacks. - */ - destroyBody(b: Body): boolean; - /** - * Create a joint to constrain bodies together. No reference to the definition - * is retained. This may cause the connected bodies to cease colliding. - * - * Warning: This function is locked during callbacks. - */ - createJoint(joint: T): T | null; - /** - * Destroy a joint. This may cause the connected bodies to begin colliding. - * Warning: This function is locked during callbacks. - */ - destroyJoint(joint: Joint): void; - /** - * Take a time step. This performs collision detection, integration, and - * constraint solution. - * - * Broad-phase, narrow-phase, solve and solve time of impacts. - * - * @param timeStep Time step, this should not vary. - */ - step(timeStep: number, velocityIterations?: number, positionIterations?: number): void; - /** - * Called when two fixtures begin to touch. - * - * Implement contact callbacks to get contact information. You can use these - * results for things like sounds and game logic. You can also get contact - * results by traversing the contact lists after the time step. However, you - * might miss some contacts because continuous physics leads to sub-stepping. - * Additionally you may receive multiple callbacks for the same contact in a - * single time step. You should strive to make your callbacks efficient because - * there may be many callbacks per time step. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "begin-contact", listener: (contact: Contact) => void): World; - /** - * Called when two fixtures cease to touch. - * - * Implement contact callbacks to get contact information. You can use these - * results for things like sounds and game logic. You can also get contact - * results by traversing the contact lists after the time step. However, you - * might miss some contacts because continuous physics leads to sub-stepping. - * Additionally you may receive multiple callbacks for the same contact in a - * single time step. You should strive to make your callbacks efficient because - * there may be many callbacks per time step. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "end-contact", listener: (contact: Contact) => void): World; - /** - * This is called after a contact is updated. This allows you to inspect a - * contact before it goes to the solver. If you are careful, you can modify the - * contact manifold (e.g. disable contact). A copy of the old manifold is - * provided so that you can detect changes. Note: this is called only for awake - * bodies. Note: this is called even when the number of contact points is zero. - * Note: this is not called for sensors. Note: if you set the number of contact - * points to zero, you will not get an end-contact callback. However, you may get - * a begin-contact callback the next step. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "pre-solve", listener: (contact: Contact, oldManifold: Manifold) => void): World; - /** - * This lets you inspect a contact after the solver is finished. This is useful - * for inspecting impulses. Note: the contact manifold does not include time of - * impact impulses, which can be arbitrarily large if the sub-step is small. - * Hence the impulse is provided explicitly in a separate data structure. Note: - * this is only called for contacts that are touching, solid, and awake. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "post-solve", listener: (contact: Contact, impulse: ContactImpulse) => void): World; - /** Listener is called whenever a body is removed. */ - on(name: "remove-body", listener: (body: Body) => void): World; - /** Listener is called whenever a joint is removed implicitly or explicitly. */ - on(name: "remove-joint", listener: (joint: Joint) => void): World; - /** Listener is called whenever a fixture is removed implicitly or explicitly. */ - on(name: "remove-fixture", listener: (fixture: Fixture) => void): World; - off(name: "begin-contact", listener: (contact: Contact) => void): World; - off(name: "end-contact", listener: (contact: Contact) => void): World; - off(name: "pre-solve", listener: (contact: Contact, oldManifold: Manifold) => void): World; - off(name: "post-solve", listener: (contact: Contact, impulse: ContactImpulse) => void): World; - off(name: "remove-body", listener: (body: Body) => void): World; - off(name: "remove-joint", listener: (joint: Joint) => void): World; - off(name: "remove-fixture", listener: (fixture: Fixture) => void): World; - publish(name: string, arg1?: any, arg2?: any, arg3?: any): number; +export type WorldAABBQueryCallback = (fixture: Fixture) => boolean; +/** @hidden @deprecated Use new keyword. */ +export function World(deg: WorldDef): World; +/** @hidden @deprecated Use new keyword. */ +export function World(gravity: Vec2): World; +/** @hidden @deprecated Use new keyword. */ +export function World(): World; +/** + * The `World` class contains the bodies and joints. It manages all aspects + * of the simulation and allows for asynchronous queries (like AABB queries + * and ray-casts). Much of your interactions with Planck.js will be with a + * World object. + */ +export declare class World { + /** + * @param def World definition or gravity vector. + */ + constructor(def?: WorldDef | Vec2Value); + /** + * Get the world body list. With the returned body, use Body.getNext to get the + * next body in the world list. A null body indicates the end of the list. + * + * @return the head of the world body list. + */ + getBodyList(): Body$1 | null; + /** + * Get the world joint list. With the returned joint, use Joint.getNext to get + * the next joint in the world list. A null joint indicates the end of the list. + * + * @return the head of the world joint list. + */ + getJointList(): Joint | null; + /** + * Get the world contact list. With the returned contact, use Contact.getNext to + * get the next contact in the world list. A null contact indicates the end of + * the list. + * + * Warning: contacts are created and destroyed in the middle of a time step. + * Use ContactListener to avoid missing contacts. + * + * @return the head of the world contact list. + */ + getContactList(): Contact | null; + getBodyCount(): number; + getJointCount(): number; + /** + * Get the number of contacts (each may have 0 or more contact points). + */ + getContactCount(): number; + /** + * Change the global gravity vector. + */ + setGravity(gravity: Vec2Value): void; + /** + * Get the global gravity vector. + */ + getGravity(): Vec2; + /** + * Is the world locked (in the middle of a time step). + */ + isLocked(): boolean; + /** + * Enable/disable sleep. + */ + setAllowSleeping(flag: boolean): void; + getAllowSleeping(): boolean; + /** + * Enable/disable warm starting. For testing. + */ + setWarmStarting(flag: boolean): void; + getWarmStarting(): boolean; + /** + * Enable/disable continuous physics. For testing. + */ + setContinuousPhysics(flag: boolean): void; + getContinuousPhysics(): boolean; + /** + * Enable/disable single stepped continuous physics. For testing. + */ + setSubStepping(flag: boolean): void; + getSubStepping(): boolean; + /** + * Set flag to control automatic clearing of forces after each time step. + */ + setAutoClearForces(flag: boolean): void; + /** + * Get the flag that controls automatic clearing of forces after each time step. + */ + getAutoClearForces(): boolean; + /** + * Manually clear the force buffer on all bodies. By default, forces are cleared + * automatically after each call to step. The default behavior is modified by + * calling setAutoClearForces. The purpose of this function is to support + * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step + * under a variable frame-rate. When you perform sub-stepping you will disable + * auto clearing of forces and instead call clearForces after all sub-steps are + * complete in one pass of your game loop. + * + * See {@link World.setAutoClearForces} + */ + clearForces(): void; + /** + * Query the world for all fixtures that potentially overlap the provided AABB. + * + * @param aabb The query box. + * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query. + */ + queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void; + /** + * Ray-cast the world for all fixtures in the path of the ray. Your callback + * controls whether you get the closest point, any point, or n-points. The + * ray-cast ignores shapes that contain the starting point. + * + * @param point1 The ray starting point + * @param point2 The ray ending point + * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value. + */ + rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void; + /** + * Get the number of broad-phase proxies. + */ + getProxyCount(): number; + /** + * Get the height of broad-phase dynamic tree. + */ + getTreeHeight(): number; + /** + * Get the balance of broad-phase dynamic tree. + */ + getTreeBalance(): number; + /** + * Get the quality metric of broad-phase dynamic tree. The smaller the better. + * The minimum is 1. + */ + getTreeQuality(): number; + /** + * Shift the world origin. Useful for large worlds. The body shift formula is: + * position -= newOrigin + * + * @param newOrigin The new origin with respect to the old origin + */ + shiftOrigin(newOrigin: Vec2Value): void; + /** + * Create a rigid body given a definition. No reference to the definition is + * retained. + * + * Warning: This function is locked during callbacks. + */ + createBody(def?: BodyDef): Body$1; + createBody(position: Vec2Value, angle?: number): Body$1; + createDynamicBody(def?: BodyDef): Body$1; + createDynamicBody(position: Vec2Value, angle?: number): Body$1; + createKinematicBody(def?: BodyDef): Body$1; + createKinematicBody(position: Vec2Value, angle?: number): Body$1; + /** + * Destroy a rigid body given a definition. No reference to the definition is + * retained. + * + * Warning: This automatically deletes all associated shapes and joints. + * + * Warning: This function is locked during callbacks. + */ + destroyBody(b: Body$1): boolean; + /** + * Create a joint to constrain bodies together. No reference to the definition + * is retained. This may cause the connected bodies to cease colliding. + * + * Warning: This function is locked during callbacks. + */ + createJoint(joint: T): T | null; + /** + * Destroy a joint. This may cause the connected bodies to begin colliding. + * Warning: This function is locked during callbacks. + */ + destroyJoint(joint: Joint): void; + /** + * Take a time step. This performs collision detection, integration, and + * constraint solution. + * + * Broad-phase, narrow-phase, solve and solve time of impacts. + * + * @param timeStep Time step, this should not vary. + */ + step(timeStep: number, velocityIterations?: number, positionIterations?: number): void; + /** + * Called when two fixtures begin to touch. + * + * Implement contact callbacks to get contact information. You can use these + * results for things like sounds and game logic. You can also get contact + * results by traversing the contact lists after the time step. However, you + * might miss some contacts because continuous physics leads to sub-stepping. + * Additionally you may receive multiple callbacks for the same contact in a + * single time step. You should strive to make your callbacks efficient because + * there may be many callbacks per time step. + * + * Warning: You cannot create/destroy world entities inside these callbacks. + */ + on(name: "begin-contact", listener: (contact: Contact) => void): World; + /** + * Called when two fixtures cease to touch. + * + * Implement contact callbacks to get contact information. You can use these + * results for things like sounds and game logic. You can also get contact + * results by traversing the contact lists after the time step. However, you + * might miss some contacts because continuous physics leads to sub-stepping. + * Additionally you may receive multiple callbacks for the same contact in a + * single time step. You should strive to make your callbacks efficient because + * there may be many callbacks per time step. + * + * Warning: You cannot create/destroy world entities inside these callbacks. + */ + on(name: "end-contact", listener: (contact: Contact) => void): World; + /** + * This is called after a contact is updated. This allows you to inspect a + * contact before it goes to the solver. If you are careful, you can modify the + * contact manifold (e.g. disable contact). A copy of the old manifold is + * provided so that you can detect changes. Note: this is called only for awake + * bodies. Note: this is called even when the number of contact points is zero. + * Note: this is not called for sensors. Note: if you set the number of contact + * points to zero, you will not get an end-contact callback. However, you may get + * a begin-contact callback the next step. + * + * Warning: You cannot create/destroy world entities inside these callbacks. + */ + on(name: "pre-solve", listener: (contact: Contact, oldManifold: Manifold) => void): World; + /** + * This lets you inspect a contact after the solver is finished. This is useful + * for inspecting impulses. Note: the contact manifold does not include time of + * impact impulses, which can be arbitrarily large if the sub-step is small. + * Hence the impulse is provided explicitly in a separate data structure. Note: + * this is only called for contacts that are touching, solid, and awake. + * + * Warning: You cannot create/destroy world entities inside these callbacks. + */ + on(name: "post-solve", listener: (contact: Contact, impulse: ContactImpulse) => void): World; + /** Listener is called whenever a body is removed. */ + on(name: "remove-body", listener: (body: Body$1) => void): World; + /** Listener is called whenever a joint is removed implicitly or explicitly. */ + on(name: "remove-joint", listener: (joint: Joint) => void): World; + /** Listener is called whenever a fixture is removed implicitly or explicitly. */ + on(name: "remove-fixture", listener: (fixture: Fixture) => void): World; + off(name: "begin-contact", listener: (contact: Contact) => void): World; + off(name: "end-contact", listener: (contact: Contact) => void): World; + off(name: "pre-solve", listener: (contact: Contact, oldManifold: Manifold) => void): World; + off(name: "post-solve", listener: (contact: Contact, impulse: ContactImpulse) => void): World; + off(name: "remove-body", listener: (body: Body$1) => void): World; + off(name: "remove-joint", listener: (joint: Joint) => void): World; + off(name: "remove-fixture", listener: (fixture: Fixture) => void): World; + publish(name: string, arg1?: any, arg2?: any, arg3?: any): number; } -// dummy types -type DataType = any; -type ObjectType = any; -type ClassName = any; -type SerializedType = object[]; -type SerializerOptions = { - rootClass: ClassName; - preSerialize?: (obj: ObjectType) => DataType; - postSerialize?: (data: DataType, obj: any) => DataType; - preDeserialize?: (data: DataType) => DataType; - postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType; +export type DataType = any; +export type ObjectType = any; +export type ClassName = any; +export type SerializedType = object[]; +export type SerializerOptions = { + rootClass: ClassName; + preSerialize?: (obj: ObjectType) => DataType; + postSerialize?: (data: DataType, obj: any) => DataType; + preDeserialize?: (data: DataType) => DataType; + postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType; }; -declare class Serializer { - private options; - constructor(options: SerializerOptions); - toJson: (root: T) => SerializedType; - fromJson: (json: SerializedType) => T; - static toJson: (root: World) => SerializedType; - static fromJson: (json: SerializedType) => World; +export declare class Serializer { + private options; + constructor(options: SerializerOptions); + toJson: (root: T) => SerializedType; + fromJson: (json: SerializedType) => T; + static toJson: (root: World) => SerializedType; + static fromJson: (json: SerializedType) => World; } /** @ignore */ declare const math: any; -interface Vec3Value { - x: number; - y: number; - z: number; +/** 3D vector */ +export interface Vec3Value { + x: number; + y: number; + z: number; } -declare function Vec3(x: number, y: number, z: number): Vec3; -declare function Vec3(obj: { - x: number; - y: number; - z: number; -}): Vec3; -declare function Vec3(): Vec3; -declare class Vec3 { - x: number; - y: number; - z: number; - constructor(x: number, y: number, z: number); - constructor(obj: { - x: number; - y: number; - z: number; - }); - constructor(); - /** @hidden */ - static neo(x: number, y: number, z: number): Vec3; - static zero(): Vec3; - static clone(v: Vec3Value): Vec3; - /** @hidden */ - toString(): string; - /** Does this vector contain finite coordinates? */ - static isValid(obj: any): boolean; - static assert(o: any): void; - setZero(): Vec3; - set(x: number, y: number, z: number): Vec3; - add(w: Vec3Value): Vec3; - sub(w: Vec3Value): Vec3; - mul(m: number): Vec3; - static areEqual(v: Vec3Value, w: Vec3Value): boolean; - /** Dot product on two vectors */ - static dot(v: Vec3Value, w: Vec3Value): number; - /** Cross product on two vectors */ - static cross(v: Vec3Value, w: Vec3Value): Vec3; - static add(v: Vec3Value, w: Vec3Value): Vec3; - static sub(v: Vec3Value, w: Vec3Value): Vec3; - static mul(v: Vec3Value, m: number): Vec3; - neg(): Vec3; - static neg(v: Vec3Value): Vec3; +/** @hidden @deprecated Use new keyword. */ +export function Vec3(x: number, y: number, z: number): Vec3; +/** @hidden @deprecated Use new keyword. */ +export function Vec3(obj: Vec3Value): Vec3; +/** @hidden @deprecated Use new keyword. */ +export function Vec3(): Vec3; +/** 3D vector */ +export declare class Vec3 { + x: number; + y: number; + z: number; + constructor(x: number, y: number, z: number); + constructor(obj: Vec3Value); + constructor(); + /** @hidden */ + static neo(x: number, y: number, z: number): Vec3; + static zero(): Vec3; + static clone(v: Vec3Value): Vec3; + /** @hidden */ + toString(): string; + /** Does this vector contain finite coordinates? */ + static isValid(obj: any): boolean; + static assert(o: any): void; + setZero(): Vec3; + set(x: number, y: number, z: number): Vec3; + add(w: Vec3Value): Vec3; + sub(w: Vec3Value): Vec3; + mul(m: number): Vec3; + static areEqual(v: Vec3Value, w: Vec3Value): boolean; + /** Dot product on two vectors */ + static dot(v: Vec3Value, w: Vec3Value): number; + /** Cross product on two vectors */ + static cross(v: Vec3Value, w: Vec3Value): Vec3; + static add(v: Vec3Value, w: Vec3Value): Vec3; + static sub(v: Vec3Value, w: Vec3Value): Vec3; + static mul(v: Vec3Value, m: number): Vec3; + neg(): Vec3; + static neg(v: Vec3Value): Vec3; } /** * A 2-by-2 matrix. Stored in column-major order. */ -declare class Mat22 { - ex: Vec2; - ey: Vec2; - constructor(a: number, b: number, c: number, d: number); - constructor(a: { - x: number; - y: number; - }, b: { - x: number; - y: number; - }); - constructor(); - /** @hidden */ - toString(): string; - static isValid(obj: any): boolean; - static assert(o: any): void; - set(a: Mat22): void; - set(a: Vec2Value, b: Vec2Value): void; - set(a: number, b: number, c: number, d: number): void; - setIdentity(): void; - setZero(): void; - getInverse(): Mat22; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - solve(v: Vec2Value): Vec2; - /** - * Multiply a matrix times a vector. If a rotation matrix is provided, then this - * transforms the vector from one frame to another. - */ - static mul(mx: Mat22, my: Mat22): Mat22; - static mul(mx: Mat22, v: Vec2Value): Vec2; - static mulVec2(mx: Mat22, v: Vec2Value): Vec2; - static mulMat22(mx: Mat22, v: Mat22): Mat22; - /** - * Multiply a matrix transpose times a vector. If a rotation matrix is provided, - * then this transforms the vector from one frame to another (inverse - * transform). - */ - static mulT(mx: Mat22, my: Mat22): Mat22; - static mulT(mx: Mat22, v: Vec2Value): Vec2; - static mulTVec2(mx: Mat22, v: Vec2Value): Vec2; - static mulTMat22(mx: Mat22, v: Mat22): Mat22; - static abs(mx: Mat22): Mat22; - static add(mx1: Mat22, mx2: Mat22): Mat22; +export declare class Mat22 { + ex: Vec2; + ey: Vec2; + constructor(a: number, b: number, c: number, d: number); + constructor(a: { + x: number; + y: number; + }, b: { + x: number; + y: number; + }); + constructor(); + /** @hidden */ + toString(): string; + static isValid(obj: any): boolean; + static assert(o: any): void; + set(a: Mat22): void; + set(a: Vec2Value, b: Vec2Value): void; + set(a: number, b: number, c: number, d: number): void; + setIdentity(): void; + setZero(): void; + getInverse(): Mat22; + /** + * Solve A * x = b, where b is a column vector. This is more efficient than + * computing the inverse in one-shot cases. + */ + solve(v: Vec2Value): Vec2; + /** + * Multiply a matrix times a vector. If a rotation matrix is provided, then this + * transforms the vector from one frame to another. + */ + static mul(mx: Mat22, my: Mat22): Mat22; + static mul(mx: Mat22, v: Vec2Value): Vec2; + static mulVec2(mx: Mat22, v: Vec2Value): Vec2; + static mulMat22(mx: Mat22, v: Mat22): Mat22; + /** + * Multiply a matrix transpose times a vector. If a rotation matrix is provided, + * then this transforms the vector from one frame to another (inverse + * transform). + */ + static mulT(mx: Mat22, my: Mat22): Mat22; + static mulT(mx: Mat22, v: Vec2Value): Vec2; + static mulTVec2(mx: Mat22, v: Vec2Value): Vec2; + static mulTMat22(mx: Mat22, v: Mat22): Mat22; + static abs(mx: Mat22): Mat22; + static add(mx1: Mat22, mx2: Mat22): Mat22; } /** * A 3-by-3 matrix. Stored in column-major order. */ -declare class Mat33 { - ex: Vec3; - ey: Vec3; - ez: Vec3; - constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value); - constructor(); - /** @hidden */ - toString(): string; - static isValid(obj: any): boolean; - static assert(o: any): void; - /** - * Set this matrix to all zeros. - */ - setZero(): Mat33; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - solve33(v: Vec3Value): Vec3; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix - * equation. - */ - solve22(v: Vec2Value): Vec2; - /** - * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if - * singular. - */ - getInverse22(M: Mat33): void; - /** - * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix - * if singular. - */ - getSymInverse33(M: Mat33): void; - /** - * Multiply a matrix times a vector. - */ - static mul(a: Mat33, b: Vec2Value): Vec2; - static mul(a: Mat33, b: Vec3Value): Vec3; - static mulVec3(a: Mat33, b: Vec3Value): Vec3; - static mulVec2(a: Mat33, b: Vec2Value): Vec2; - static add(a: Mat33, b: Mat33): Mat33; +export declare class Mat33 { + ex: Vec3; + ey: Vec3; + ez: Vec3; + constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value); + constructor(); + /** @hidden */ + toString(): string; + static isValid(obj: any): boolean; + static assert(o: any): void; + /** + * Set this matrix to all zeros. + */ + setZero(): Mat33; + /** + * Solve A * x = b, where b is a column vector. This is more efficient than + * computing the inverse in one-shot cases. + */ + solve33(v: Vec3Value): Vec3; + /** + * Solve A * x = b, where b is a column vector. This is more efficient than + * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix + * equation. + */ + solve22(v: Vec2Value): Vec2; + /** + * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if + * singular. + */ + getInverse22(M: Mat33): void; + /** + * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix + * if singular. + */ + getSymInverse33(M: Mat33): void; + /** + * Multiply a matrix times a vector. + */ + static mul(a: Mat33, b: Vec2Value): Vec2; + static mul(a: Mat33, b: Vec3Value): Vec3; + static mulVec3(a: Mat33, b: Vec3Value): Vec3; + static mulVec2(a: Mat33, b: Vec2Value): Vec2; + static add(a: Mat33, b: Mat33): Mat33; } -declare function CircleShape(position: Vec2Value, radius?: number): CircleShape; -declare function CircleShape(radius?: number): CircleShape; -declare class CircleShape extends Shape { - static TYPE: "circle"; - /** @hidden */ m_type: "circle"; - /** @hidden */ m_p: Vec2; - /** @hidden */ m_radius: number; - constructor(position: Vec2Value, radius?: number); - constructor(radius?: number); - /** @hidden */ - _reset(): void; - getType(): "circle"; - getRadius(): number; - getCenter(): Vec2; - /** - * Get the number of child primitives. - */ - getChildCount(): 1; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): boolean; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density: number): void; - computeDistanceProxy(proxy: DistanceProxy): void; +/** @hidden @deprecated Use new keyword. */ +export function CircleShape(position: Vec2Value, radius?: number): CircleShape; +/** @hidden @deprecated Use new keyword. */ +export function CircleShape(radius?: number): CircleShape; +/** Circle shape. */ +export declare class CircleShape extends Shape { + static TYPE: "circle"; + /** @hidden */ m_type: "circle"; + /** @hidden */ m_p: Vec2; + /** @hidden */ m_radius: number; + constructor(position: Vec2Value, radius?: number); + constructor(radius?: number); + /** @hidden */ + _reset(): void; + getType(): "circle"; + getRadius(): number; + getCenter(): Vec2; + /** + * Get the number of child primitives. + */ + getChildCount(): 1; + /** + * Test a point for containment in this shape. This only works for convex + * shapes. + * + * @param xf The shape world transform. + * @param p A point in world coordinates. + */ + testPoint(xf: TransformValue, p: Vec2Value): boolean; + /** + * Cast a ray against a child shape. + * + * @param output The ray-cast results. + * @param input The ray-cast input parameters. + * @param xf The transform to be applied to the shape. + * @param childIndex The child shape index + */ + rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; + /** + * Given a transform, compute the associated axis aligned bounding box for a + * child shape. + * + * @param aabb Returns the axis aligned box. + * @param xf The world transform of the shape. + * @param childIndex The child shape + */ + computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; + /** + * Compute the mass properties of this shape using its dimensions and density. + * The inertia tensor is computed about the local origin. + * + * @param massData Returns the mass data for this shape. + * @param density The density in kilograms per meter squared. + */ + computeMass(massData: MassData, density: number): void; + computeDistanceProxy(proxy: DistanceProxy): void; } -declare const Circle: typeof CircleShape; +export declare const Circle: typeof CircleShape; +/** @hidden @deprecated Use new keyword. */ +export function EdgeShape(v1?: Vec2Value, v2?: Vec2Value): EdgeShape; /** * A line segment (edge) shape. These can be connected in chains or loops to * other edge shapes. The connectivity information is used to ensure correct * contact normals. */ -declare function EdgeShape(v1?: Vec2Value, v2?: Vec2Value): EdgeShape; -/** - * A line segment (edge) shape. These can be connected in chains or loops to - * other edge shapes. The connectivity information is used to ensure correct - * contact normals. - */ -declare class EdgeShape extends Shape { - static TYPE: "edge"; - /** @hidden */ m_type: "edge"; - /** @hidden */ m_radius: number; - // These are the edge vertices - /** @hidden */ m_vertex1: Vec2; - /** @hidden */ m_vertex2: Vec2; - // Optional adjacent vertices. These are used for smooth collision. - // Used by chain shape. - /** @hidden */ m_vertex0: Vec2; - /** @hidden */ m_vertex3: Vec2; - /** @hidden */ m_hasVertex0: boolean; - /** @hidden */ m_hasVertex3: boolean; - constructor(v1?: Vec2Value, v2?: Vec2Value); - /** @hidden */ - _reset(): void; - getRadius(): number; - getType(): "edge"; - /** - * Optional next vertex, used for smooth collision. - */ - setNextVertex(v?: Vec2Value): EdgeShape; - /** - * Optional next vertex, used for smooth collision. - */ - getNextVertex(): Vec2; - /** - * Optional prev vertex, used for smooth collision. - */ - setPrevVertex(v?: Vec2Value): EdgeShape; - /** - * Optional prev vertex, used for smooth collision. - */ - getPrevVertex(): Vec2; - /** - * Set this as an isolated edge. - */ - _set(v1: Vec2Value, v2: Vec2Value): EdgeShape; - /** - * Get the number of child primitives. - */ - getChildCount(): 1; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): false; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density?: number): void; - computeDistanceProxy(proxy: DistanceProxy): void; +export declare class EdgeShape extends Shape { + static TYPE: "edge"; + /** @hidden */ m_type: "edge"; + /** @hidden */ m_radius: number; + /** @hidden */ m_vertex1: Vec2; + /** @hidden */ m_vertex2: Vec2; + /** @hidden */ m_vertex0: Vec2; + /** @hidden */ m_vertex3: Vec2; + /** @hidden */ m_hasVertex0: boolean; + /** @hidden */ m_hasVertex3: boolean; + constructor(v1?: Vec2Value, v2?: Vec2Value); + /** @hidden */ + _reset(): void; + getRadius(): number; + getType(): "edge"; + /** + * Optional next vertex, used for smooth collision. + */ + setNextVertex(v?: Vec2Value): EdgeShape; + /** + * Optional next vertex, used for smooth collision. + */ + getNextVertex(): Vec2; + /** + * Optional prev vertex, used for smooth collision. + */ + setPrevVertex(v?: Vec2Value): EdgeShape; + /** + * Optional prev vertex, used for smooth collision. + */ + getPrevVertex(): Vec2; + /** + * Set this as an isolated edge. + */ + _set(v1: Vec2Value, v2: Vec2Value): EdgeShape; + /** + * Get the number of child primitives. + */ + getChildCount(): 1; + /** + * Test a point for containment in this shape. This only works for convex + * shapes. + * + * @param xf The shape world transform. + * @param p A point in world coordinates. + */ + testPoint(xf: TransformValue, p: Vec2Value): false; + /** + * Cast a ray against a child shape. + * + * @param output The ray-cast results. + * @param input The ray-cast input parameters. + * @param xf The transform to be applied to the shape. + * @param childIndex The child shape index + */ + rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; + /** + * Given a transform, compute the associated axis aligned bounding box for a + * child shape. + * + * @param aabb Returns the axis aligned box. + * @param xf The world transform of the shape. + * @param childIndex The child shape + */ + computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; + /** + * Compute the mass properties of this shape using its dimensions and density. + * The inertia tensor is computed about the local origin. + * + * @param massData Returns the mass data for this shape. + * @param density The density in kilograms per meter squared. + */ + computeMass(massData: MassData, density?: number): void; + computeDistanceProxy(proxy: DistanceProxy): void; } -declare const Edge: typeof EdgeShape; +export declare const Edge: typeof EdgeShape; +/** @hidden @deprecated Use new keyword. */ +export function PolygonShape(vertices?: Vec2Value[]): PolygonShape; /** * A convex polygon. It is assumed that the interior of the polygon is to the * left of each edge. Polygons have a maximum number of vertices equal to * Settings.maxPolygonVertices. In most cases you should not need many vertices * for a convex polygon. extends Shape */ -declare function PolygonShape(vertices?: Vec2Value[]): PolygonShape; -/** - * A convex polygon. It is assumed that the interior of the polygon is to the - * left of each edge. Polygons have a maximum number of vertices equal to - * Settings.maxPolygonVertices. In most cases you should not need many vertices - * for a convex polygon. extends Shape - */ -declare class PolygonShape extends Shape { - static TYPE: "polygon"; - /** @hidden */ m_type: "polygon"; - /** @hidden */ m_centroid: Vec2; - /** @hidden */ m_vertices: Vec2[]; // [Settings.maxPolygonVertices] - /** @hidden */ m_normals: Vec2[]; // [Settings.maxPolygonVertices] - /** @hidden */ m_count: number; - /** @hidden */ m_radius: number; - constructor(vertices?: Vec2Value[]); - getType(): "polygon"; - getRadius(): number; - /** - * Get the number of child primitives. - */ - getChildCount(): 1; - /** @hidden */ - _reset(): void; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): boolean; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density: number): void; - /** - * Validate convexity. This is a very time consuming operation. - * @returns true if valid - */ - validate(): boolean; - computeDistanceProxy(proxy: DistanceProxy): void; +export declare class PolygonShape extends Shape { + static TYPE: "polygon"; + /** @hidden */ m_type: "polygon"; + /** @hidden */ m_centroid: Vec2; + /** @hidden */ m_vertices: Vec2[]; + /** @hidden */ m_normals: Vec2[]; + /** @hidden */ m_count: number; + /** @hidden */ m_radius: number; + constructor(vertices?: Vec2Value[]); + getType(): "polygon"; + getRadius(): number; + /** + * Get the number of child primitives. + */ + getChildCount(): 1; + /** @hidden */ + _reset(): void; + /** + * Test a point for containment in this shape. This only works for convex + * shapes. + * + * @param xf The shape world transform. + * @param p A point in world coordinates. + */ + testPoint(xf: TransformValue, p: Vec2Value): boolean; + /** + * Cast a ray against a child shape. + * + * @param output The ray-cast results. + * @param input The ray-cast input parameters. + * @param xf The transform to be applied to the shape. + * @param childIndex The child shape index + */ + rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; + /** + * Given a transform, compute the associated axis aligned bounding box for a + * child shape. + * + * @param aabb Returns the axis aligned box. + * @param xf The world transform of the shape. + * @param childIndex The child shape + */ + computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; + /** + * Compute the mass properties of this shape using its dimensions and density. + * The inertia tensor is computed about the local origin. + * + * @param massData Returns the mass data for this shape. + * @param density The density in kilograms per meter squared. + */ + computeMass(massData: MassData, density: number): void; + /** + * Validate convexity. This is a very time consuming operation. + * @returns true if valid + */ + validate(): boolean; + computeDistanceProxy(proxy: DistanceProxy): void; } -declare const Polygon: typeof PolygonShape; -/** - * A chain shape is a free form sequence of line segments. The chain has - * two-sided collision, so you can use inside and outside collision. Therefore, - * you may use any winding order. Connectivity information is used to create - * smooth collisions. - * - * WARNING: The chain will not collide properly if there are self-intersections. - */ -declare function ChainShape(vertices?: Vec2Value[], loop?: boolean): ChainShape; +export declare const Polygon: typeof PolygonShape; +/** @hidden @deprecated Use new keyword. */ +export function ChainShape(vertices?: Vec2Value[], loop?: boolean): ChainShape; /** * A chain shape is a free form sequence of line segments. The chain has * two-sided collision, so you can use inside and outside collision. Therefore, @@ -2536,111 +2543,101 @@ declare function ChainShape(vertices?: Vec2Value[], loop?: boolean): ChainShape; * * WARNING: The chain will not collide properly if there are self-intersections. */ -declare class ChainShape extends Shape { - static TYPE: "chain"; - /** @hidden */ m_type: "chain"; - /** @hidden */ m_radius: number; - /** @hidden */ m_vertices: Vec2[]; - /** @hidden */ m_count: number; - /** @hidden */ m_prevVertex: Vec2 | null; - /** @hidden */ m_nextVertex: Vec2 | null; - /** @hidden */ m_hasPrevVertex: boolean; - /** @hidden */ m_hasNextVertex: boolean; - /** @hidden */ m_isLoop: boolean; - constructor(vertices?: Vec2Value[], loop?: boolean); - // clear() { - // this.m_vertices.length = 0; - // this.m_count = 0; - // } - getType(): "chain"; - getRadius(): number; - /** @hidden */ - _reset(): void; - /** - * Establish connectivity to a vertex that precedes the first vertex. Don't call - * this for loops. - */ - setPrevVertex(prevVertex: Vec2): void; - getPrevVertex(): Vec2; - /** - * Establish connectivity to a vertex that follows the last vertex. Don't call - * this for loops. - */ - setNextVertex(nextVertex: Vec2): void; - getNextVertex(): Vec2; - /** - * Get the number of child primitives. - */ - getChildCount(): number; - // Get a child edge. - getChildEdge(edge: EdgeShape, childIndex: number): void; - getVertex(index: number): Vec2; - isLoop(): boolean; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * This always return false. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): false; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * Chains have zero mass. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density?: number): void; - computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void; +export declare class ChainShape extends Shape { + static TYPE: "chain"; + /** @hidden */ m_type: "chain"; + /** @hidden */ m_radius: number; + /** @hidden */ m_vertices: Vec2[]; + /** @hidden */ m_count: number; + /** @hidden */ m_prevVertex: Vec2 | null; + /** @hidden */ m_nextVertex: Vec2 | null; + /** @hidden */ m_hasPrevVertex: boolean; + /** @hidden */ m_hasNextVertex: boolean; + /** @hidden */ m_isLoop: boolean; + constructor(vertices?: Vec2Value[], loop?: boolean); + getType(): "chain"; + getRadius(): number; + /** @hidden */ + _reset(): void; + /** + * Establish connectivity to a vertex that precedes the first vertex. Don't call + * this for loops. + */ + setPrevVertex(prevVertex: Vec2): void; + getPrevVertex(): Vec2; + /** + * Establish connectivity to a vertex that follows the last vertex. Don't call + * this for loops. + */ + setNextVertex(nextVertex: Vec2): void; + getNextVertex(): Vec2; + /** + * Get the number of child primitives. + */ + getChildCount(): number; + getChildEdge(edge: EdgeShape, childIndex: number): void; + getVertex(index: number): Vec2; + isLoop(): boolean; + /** + * Test a point for containment in this shape. This only works for convex + * shapes. + * + * This always return false. + * + * @param xf The shape world transform. + * @param p A point in world coordinates. + */ + testPoint(xf: TransformValue, p: Vec2Value): false; + /** + * Cast a ray against a child shape. + * + * @param output The ray-cast results. + * @param input The ray-cast input parameters. + * @param xf The transform to be applied to the shape. + * @param childIndex The child shape index + */ + rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; + /** + * Given a transform, compute the associated axis aligned bounding box for a + * child shape. + * + * @param aabb Returns the axis aligned box. + * @param xf The world transform of the shape. + * @param childIndex The child shape + */ + computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; + /** + * Compute the mass properties of this shape using its dimensions and density. + * The inertia tensor is computed about the local origin. + * + * Chains have zero mass. + * + * @param massData Returns the mass data for this shape. + * @param density The density in kilograms per meter squared. + */ + computeMass(massData: MassData, density?: number): void; + computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void; } -declare const Chain: typeof ChainShape; +export declare const Chain: typeof ChainShape; +/** @hidden @deprecated Use new keyword. */ +export function BoxShape(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number): BoxShape; /** * A rectangle polygon which extend PolygonShape. */ -declare function BoxShape(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number): BoxShape; -/** - * A rectangle polygon which extend PolygonShape. - */ -declare class BoxShape extends PolygonShape { - // note that box is serialized/deserialized as polygon - static TYPE: "polygon"; - /** - * - * @param halfWidth - * @param halfHeight - * @param center coordinate of the center of the box relative to the body - * @param angle angle of the box relative to the body - */ - constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number); +export declare class BoxShape extends PolygonShape { + static TYPE: "polygon"; + /** + * + * @param halfWidth + * @param halfHeight + * @param center coordinate of the center of the box relative to the body + * @param angle angle of the box relative to the body + */ + constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number); } -declare const Box: typeof BoxShape; -declare const CollideCircles: (manifold: Manifold, circleA: CircleShape, xfA: Transform, circleB: CircleShape, xfB: Transform) => void; -// Compute contact points for edge versus circle. -// This accounts for edge connectivity. -declare const CollideEdgeCircle: (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue) => void; +export declare const Box: typeof BoxShape; +export declare const CollideCircles: (manifold: Manifold, circleA: CircleShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue) => void; +export declare const CollideEdgeCircle: (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue) => void; /** * * Find edge normal of max separation on A - return if separating axis is found
@@ -2651,13 +2648,13 @@ declare const CollideEdgeCircle: (manifold: Manifold, edgeA: EdgeShape, xfA: Tra * * The normal points from 1 to 2 */ -declare const CollidePolygons: (manifold: Manifold, polyA: PolygonShape, xfA: TransformValue, polyB: PolygonShape, xfB: TransformValue) => void; -declare const CollidePolygonCircle: (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue) => void; +export declare const CollidePolygons: (manifold: Manifold, polyA: PolygonShape, xfA: TransformValue, polyB: PolygonShape, xfB: TransformValue) => void; +export declare const CollidePolygonCircle: (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue) => void; /** * This function collides and edge and a polygon, taking into account edge * adjacency. */ -declare const CollideEdgePolygon: (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue) => void; +export declare const CollideEdgePolygon: (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue) => void; /** * Distance joint definition. This requires defining an anchor point on both * bodies and the non-zero length of the distance joint. The definition uses @@ -2665,19 +2662,19 @@ declare const CollideEdgePolygon: (manifold: Manifold, edgeA: EdgeShape, xfA: Tr * constraint slightly. This helps when saving and loading a game. Warning: Do * not use a zero or short length. */ -interface DistanceJointOpt extends JointOpt { - /** - * The mass-spring-damper frequency in Hertz. A value of 0 disables softness. - */ - frequencyHz?: number; - /** - * The damping ratio. 0 = no damping, 1 = critical damping. - */ - dampingRatio?: number; - /** - * Distance length. - */ - length?: number; +export interface DistanceJointOpt extends JointOpt { + /** + * The mass-spring-damper frequency in Hertz. A value of 0 disables softness. + */ + frequencyHz?: number; + /** + * The damping ratio. 0 = no damping, 1 = critical damping. + */ + dampingRatio?: number; + /** + * Distance length. + */ + length?: number; } /** * Distance joint definition. This requires defining an anchor point on both @@ -2686,182 +2683,170 @@ interface DistanceJointOpt extends JointOpt { * constraint slightly. This helps when saving and loading a game. Warning: Do * not use a zero or short length. */ -interface DistanceJointDef extends JointDef, DistanceJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; +export interface DistanceJointDef extends JointDef, DistanceJointOpt { + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; } +/** @hidden @deprecated Use new keyword. */ +export function DistanceJoint(def: DistanceJointDef): DistanceJoint; +/** @hidden @deprecated Use new keyword. */ +export function DistanceJoint(def: DistanceJointOpt, bodyA: Body$1, bodyB: Body$1, anchorA: Vec2Value, anchorB: Vec2Value): DistanceJoint; /** * A distance joint constrains two points on two bodies to remain at a fixed * distance from each other. You can view this as a massless, rigid rod. */ -declare function DistanceJoint(def: DistanceJointDef): DistanceJoint; -/** - * A distance joint constrains two points on two bodies to remain at a fixed - * distance from each other. You can view this as a massless, rigid rod. - */ -declare function DistanceJoint(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value): DistanceJoint; -/** - * A distance joint constrains two points on two bodies to remain at a fixed - * distance from each other. You can view this as a massless, rigid rod. - */ -declare class DistanceJoint extends Joint { - static TYPE: "distance-joint"; - /** - * @param def DistanceJoint definition. - */ - constructor(def: DistanceJointDef); - /** - * @param anchorA Anchor A in global coordination. - * @param anchorB Anchor B in global coordination. - */ - constructor(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Set the natural length. Manipulating the length can lead to non-physical - * behavior when the frequency is zero. - */ - setLength(length: number): void; - /** - * Get the natural length. - */ - getLength(): number; - setFrequency(hz: number): void; - getFrequency(): number; - setDampingRatio(ratio: number): void; - getDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class DistanceJoint extends Joint { + static TYPE: "distance-joint"; + /** + * @param def DistanceJoint definition. + */ + constructor(def: DistanceJointDef); + /** + * @param anchorA Anchor A in global coordination. + * @param anchorB Anchor B in global coordination. + */ + constructor(def: DistanceJointOpt, bodyA: Body$1, bodyB: Body$1, anchorA: Vec2Value, anchorB: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * The local anchor point relative to bodyA's origin. + */ + getLocalAnchorA(): Vec2; + /** + * The local anchor point relative to bodyB's origin. + */ + getLocalAnchorB(): Vec2; + /** + * Set the natural length. Manipulating the length can lead to non-physical + * behavior when the frequency is zero. + */ + setLength(length: number): void; + /** + * Get the natural length. + */ + getLength(): number; + setFrequency(hz: number): void; + getFrequency(): number; + setDampingRatio(ratio: number): void; + getDampingRatio(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Friction joint definition. */ -interface FrictionJointOpt extends JointOpt { - /** - * The maximum friction force in N. - */ - maxForce?: number; - /** - * The maximum friction torque in N-m. - */ - maxTorque?: number; +export interface FrictionJointOpt extends JointOpt { + /** + * The maximum friction force in N. + */ + maxForce?: number; + /** + * The maximum friction torque in N-m. + */ + maxTorque?: number; } /** * Friction joint definition. */ -interface FrictionJointDef extends JointDef, FrictionJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; +export interface FrictionJointDef extends JointDef, FrictionJointOpt { + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; } +/** @hidden @deprecated Use new keyword. */ +export function FrictionJoint(def: FrictionJointDef): FrictionJoint; +/** @hidden @deprecated Use new keyword. */ +export function FrictionJoint(def: FrictionJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value): FrictionJoint; /** * Friction joint. This is used for top-down friction. It provides 2D * translational friction and angular friction. */ -declare function FrictionJoint(def: FrictionJointDef): FrictionJoint; -/** - * Friction joint. This is used for top-down friction. It provides 2D - * translational friction and angular friction. - */ -declare function FrictionJoint(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): FrictionJoint; -/** - * Friction joint. This is used for top-down friction. It provides 2D - * translational friction and angular friction. - */ -declare class FrictionJoint extends Joint { - static TYPE: "friction-joint"; - constructor(def: FrictionJointDef); - /** - * @param anchor Anchor in global coordination. - */ - constructor(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Set the maximum friction force in N. - */ - setMaxForce(force: number): void; - /** - * Get the maximum friction force in N. - */ - getMaxForce(): number; - /** - * Set the maximum friction torque in N*m. - */ - setMaxTorque(torque: number): void; - /** - * Get the maximum friction torque in N*m. - */ - getMaxTorque(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class FrictionJoint extends Joint { + static TYPE: "friction-joint"; + constructor(def: FrictionJointDef); + /** + * @param anchor Anchor in global coordination. + */ + constructor(def: FrictionJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * The local anchor point relative to bodyA's origin. + */ + getLocalAnchorA(): Vec2; + /** + * The local anchor point relative to bodyB's origin. + */ + getLocalAnchorB(): Vec2; + /** + * Set the maximum friction force in N. + */ + setMaxForce(force: number): void; + /** + * Get the maximum friction force in N. + */ + getMaxForce(): number; + /** + * Set the maximum friction torque in N*m. + */ + setMaxTorque(torque: number): void; + /** + * Get the maximum friction torque in N*m. + */ + getMaxTorque(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Revolute joint definition. This requires defining an anchor point where the @@ -2875,32 +2860,32 @@ declare class FrictionJoint extends Joint { * be. 2. if you add/remove shapes from a body and recompute the mass, the * joints will be broken. */ -interface RevoluteJointOpt extends JointOpt { - /** - * The lower angle for the joint limit (radians). - */ - lowerAngle?: number; - /** - * The upper angle for the joint limit (radians). - */ - upperAngle?: number; - /** - * The maximum motor torque used to achieve the desired motor speed. Usually - * in N-m. - */ - maxMotorTorque?: number; - /** - * The desired motor speed. Usually in radians per second. - */ - motorSpeed?: number; - /** - * A flag to enable joint limits. - */ - enableLimit?: boolean; - /** - * A flag to enable the joint motor. - */ - enableMotor?: boolean; +export interface RevoluteJointOpt extends JointOpt { + /** + * The lower angle for the joint limit (radians). + */ + lowerAngle?: number; + /** + * The upper angle for the joint limit (radians). + */ + upperAngle?: number; + /** + * The maximum motor torque used to achieve the desired motor speed. Usually + * in N-m. + */ + maxMotorTorque?: number; + /** + * The desired motor speed. Usually in radians per second. + */ + motorSpeed?: number; + /** + * A flag to enable joint limits. + */ + enableLimit?: boolean; + /** + * A flag to enable the joint motor. + */ + enableMotor?: boolean; } /** * Revolute joint definition. This requires defining an anchor point where the @@ -2914,20 +2899,24 @@ interface RevoluteJointOpt extends JointOpt { * be. 2. if you add/remove shapes from a body and recompute the mass, the * joints will be broken. */ -interface RevoluteJointDef extends JointDef, RevoluteJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The bodyB angle minus bodyA angle in the reference state (radians). - */ - referenceAngle: number; +export interface RevoluteJointDef extends JointDef, RevoluteJointOpt { + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; + /** + * The bodyB angle minus bodyA angle in the reference state (radians). + */ + referenceAngle: number; } +/** @hidden @deprecated Use new keyword. */ +export function RevoluteJoint(def: RevoluteJointDef): RevoluteJoint; +/** @hidden @deprecated Use new keyword. */ +export function RevoluteJoint(def: RevoluteJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value): RevoluteJoint; /** * A revolute joint constrains two bodies to share a common point while they are * free to rotate about the point. The relative rotation about the shared point @@ -2936,118 +2925,100 @@ interface RevoluteJointDef extends JointDef, RevoluteJointOpt { * relative rotation about the shared point. A maximum motor torque is provided * so that infinite forces are not generated. */ -declare function RevoluteJoint(def: RevoluteJointDef): RevoluteJoint; -/** - * A revolute joint constrains two bodies to share a common point while they are - * free to rotate about the point. The relative rotation about the shared point - * is the joint angle. You can limit the relative rotation with a joint limit - * that specifies a lower and upper angle. You can use a motor to drive the - * relative rotation about the shared point. A maximum motor torque is provided - * so that infinite forces are not generated. - */ -declare function RevoluteJoint(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): RevoluteJoint; -/** - * A revolute joint constrains two bodies to share a common point while they are - * free to rotate about the point. The relative rotation about the shared point - * is the joint angle. You can limit the relative rotation with a joint limit - * that specifies a lower and upper angle. You can use a motor to drive the - * relative rotation about the shared point. A maximum motor torque is provided - * so that infinite forces are not generated. - */ -declare class RevoluteJoint extends Joint { - static TYPE: "revolute-joint"; - constructor(def: RevoluteJointDef); - constructor(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Get the reference angle. - */ - getReferenceAngle(): number; - /** - * Get the current joint angle in radians. - */ - getJointAngle(): number; - /** - * Get the current joint angle speed in radians per second. - */ - getJointSpeed(): number; - /** - * Is the joint motor enabled? - */ - isMotorEnabled(): boolean; - /** - * Enable/disable the joint motor. - */ - enableMotor(flag: boolean): void; - /** - * Get the current motor torque given the inverse time step. Unit is N*m. - */ - getMotorTorque(inv_dt: number): number; - /** - * Set the motor speed in radians per second. - */ - setMotorSpeed(speed: number): void; - /** - * Get the motor speed in radians per second. - */ - getMotorSpeed(): number; - /** - * Set the maximum motor torque, usually in N-m. - */ - setMaxMotorTorque(torque: number): void; - getMaxMotorTorque(): number; - /** - * Is the joint limit enabled? - */ - isLimitEnabled(): boolean; - /** - * Enable/disable the joint limit. - */ - enableLimit(flag: boolean): void; - /** - * Get the lower joint limit in radians. - */ - getLowerLimit(): number; - /** - * Get the upper joint limit in radians. - */ - getUpperLimit(): number; - /** - * Set the joint limits in radians. - */ - setLimits(lower: number, upper: number): void; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force given the inverse time step. Unit is N. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque due to the joint limit given the inverse time step. - * Unit is N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class RevoluteJoint extends Joint { + static TYPE: "revolute-joint"; + constructor(def: RevoluteJointDef); + constructor(def: RevoluteJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * The local anchor point relative to bodyA's origin. + */ + getLocalAnchorA(): Vec2; + /** + * The local anchor point relative to bodyB's origin. + */ + getLocalAnchorB(): Vec2; + /** + * Get the reference angle. + */ + getReferenceAngle(): number; + /** + * Get the current joint angle in radians. + */ + getJointAngle(): number; + /** + * Get the current joint angle speed in radians per second. + */ + getJointSpeed(): number; + /** + * Is the joint motor enabled? + */ + isMotorEnabled(): boolean; + /** + * Enable/disable the joint motor. + */ + enableMotor(flag: boolean): void; + /** + * Get the current motor torque given the inverse time step. Unit is N*m. + */ + getMotorTorque(inv_dt: number): number; + /** + * Set the motor speed in radians per second. + */ + setMotorSpeed(speed: number): void; + /** + * Get the motor speed in radians per second. + */ + getMotorSpeed(): number; + /** + * Set the maximum motor torque, usually in N-m. + */ + setMaxMotorTorque(torque: number): void; + getMaxMotorTorque(): number; + /** + * Is the joint limit enabled? + */ + isLimitEnabled(): boolean; + /** + * Enable/disable the joint limit. + */ + enableLimit(flag: boolean): void; + /** + * Get the lower joint limit in radians. + */ + getLowerLimit(): number; + /** + * Get the upper joint limit in radians. + */ + getUpperLimit(): number; + /** + * Set the joint limits in radians. + */ + setLimits(lower: number, upper: number): void; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force given the inverse time step. Unit is N. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque due to the joint limit given the inverse time step. + * Unit is N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Prismatic joint definition. This requires defining a line of motion using an @@ -3057,31 +3028,31 @@ declare class RevoluteJoint extends Joint { * space. Using local anchors and a local axis helps when saving and loading a * game. */ -interface PrismaticJointOpt extends JointOpt { - /** - * Enable/disable the joint limit. - */ - enableLimit?: boolean; - /** - * The lower translation limit, usually in meters. - */ - lowerTranslation?: number; - /** - * The upper translation limit, usually in meters. - */ - upperTranslation?: number; - /** - * Enable/disable the joint motor. - */ - enableMotor?: boolean; - /** - * The maximum motor torque, usually in N-m. - */ - maxMotorForce?: number; - /** - * The desired motor speed in radians per second. - */ - motorSpeed?: number; +export interface PrismaticJointOpt extends JointOpt { + /** + * Enable/disable the joint limit. + */ + enableLimit?: boolean; + /** + * The lower translation limit, usually in meters. + */ + lowerTranslation?: number; + /** + * The upper translation limit, usually in meters. + */ + upperTranslation?: number; + /** + * Enable/disable the joint motor. + */ + enableMotor?: boolean; + /** + * The maximum motor torque, usually in N-m. + */ + maxMotorForce?: number; + /** + * The desired motor speed in radians per second. + */ + motorSpeed?: number; } /** * Prismatic joint definition. This requires defining a line of motion using an @@ -3091,165 +3062,159 @@ interface PrismaticJointOpt extends JointOpt { * space. Using local anchors and a local axis helps when saving and loading a * game. */ -interface PrismaticJointDef extends JointDef, PrismaticJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The local translation unit axis in bodyA. - */ - localAxisA: Vec2Value; - /** - * referenceAngle The constrained angle between the bodies: - * bodyB_angle - bodyA_angle. - */ - referenceAngle: number; +export interface PrismaticJointDef extends JointDef, PrismaticJointOpt { + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; + /** + * The local translation unit axis in bodyA. + */ + localAxisA: Vec2Value; + /** + * referenceAngle The constrained angle between the bodies: + * bodyB_angle - bodyA_angle. + */ + referenceAngle: number; } +/** @hidden @deprecated Use new keyword. */ +export function PrismaticJoint(def: PrismaticJointDef): PrismaticJoint; +/** @hidden @deprecated Use new keyword. */ +export function PrismaticJoint(def: PrismaticJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value, axis: Vec2Value): PrismaticJoint; /** * A prismatic joint. This joint provides one degree of freedom: translation * along an axis fixed in bodyA. Relative rotation is prevented. You can use a * joint limit to restrict the range of motion and a joint motor to drive the * motion or to model joint friction. */ -declare function PrismaticJoint(def: PrismaticJointDef): PrismaticJoint; -/** - * A prismatic joint. This joint provides one degree of freedom: translation - * along an axis fixed in bodyA. Relative rotation is prevented. You can use a - * joint limit to restrict the range of motion and a joint motor to drive the - * motion or to model joint friction. - */ -declare function PrismaticJoint(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value): PrismaticJoint; -/** - * A prismatic joint. This joint provides one degree of freedom: translation - * along an axis fixed in bodyA. Relative rotation is prevented. You can use a - * joint limit to restrict the range of motion and a joint motor to drive the - * motion or to model joint friction. - */ -declare class PrismaticJoint extends Joint { - static TYPE: "prismatic-joint"; - constructor(def: PrismaticJointDef); - constructor(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * The local joint axis relative to bodyA. - */ - getLocalAxisA(): Vec2; - /** - * Get the reference angle. - */ - getReferenceAngle(): number; - /** - * Get the current joint translation, usually in meters. - */ - getJointTranslation(): number; - /** - * Get the current joint translation speed, usually in meters per second. - */ - getJointSpeed(): number; - /** - * Is the joint limit enabled? - */ - isLimitEnabled(): boolean; - /** - * Enable/disable the joint limit. - */ - enableLimit(flag: boolean): void; - /** - * Get the lower joint limit, usually in meters. - */ - getLowerLimit(): number; - /** - * Get the upper joint limit, usually in meters. - */ - getUpperLimit(): number; - /** - * Set the joint limits, usually in meters. - */ - setLimits(lower: number, upper: number): void; - /** - * Is the joint motor enabled? - */ - isMotorEnabled(): boolean; - /** - * Enable/disable the joint motor. - */ - enableMotor(flag: boolean): void; - /** - * Set the motor speed, usually in meters per second. - */ - setMotorSpeed(speed: number): void; - /** - * Set the maximum motor force, usually in N. - */ - setMaxMotorForce(force: number): void; - getMaxMotorForce(): number; - /** - * Get the motor speed, usually in meters per second. - */ - getMotorSpeed(): number; - /** - * Get the current motor force given the inverse time step, usually in N. - */ - getMotorForce(inv_dt: number): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class PrismaticJoint extends Joint { + static TYPE: "prismatic-joint"; + constructor(def: PrismaticJointDef); + constructor(def: PrismaticJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value, axis: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * The local anchor point relative to bodyA's origin. + */ + getLocalAnchorA(): Vec2; + /** + * The local anchor point relative to bodyB's origin. + */ + getLocalAnchorB(): Vec2; + /** + * The local joint axis relative to bodyA. + */ + getLocalAxisA(): Vec2; + /** + * Get the reference angle. + */ + getReferenceAngle(): number; + /** + * Get the current joint translation, usually in meters. + */ + getJointTranslation(): number; + /** + * Get the current joint translation speed, usually in meters per second. + */ + getJointSpeed(): number; + /** + * Is the joint limit enabled? + */ + isLimitEnabled(): boolean; + /** + * Enable/disable the joint limit. + */ + enableLimit(flag: boolean): void; + /** + * Get the lower joint limit, usually in meters. + */ + getLowerLimit(): number; + /** + * Get the upper joint limit, usually in meters. + */ + getUpperLimit(): number; + /** + * Set the joint limits, usually in meters. + */ + setLimits(lower: number, upper: number): void; + /** + * Is the joint motor enabled? + */ + isMotorEnabled(): boolean; + /** + * Enable/disable the joint motor. + */ + enableMotor(flag: boolean): void; + /** + * Set the motor speed, usually in meters per second. + */ + setMotorSpeed(speed: number): void; + /** + * Set the maximum motor force, usually in N. + */ + setMaxMotorForce(force: number): void; + getMaxMotorForce(): number; + /** + * Get the motor speed, usually in meters per second. + */ + getMotorSpeed(): number; + /** + * Get the current motor force given the inverse time step, usually in N. + */ + getMotorForce(inv_dt: number): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Gear joint definition. */ -interface GearJointOpt extends JointOpt { - /** - * The gear ratio. See {@link GearJoint} for explanation. - */ - ratio?: number; +export interface GearJointOpt extends JointOpt { + /** + * The gear ratio. See {@link GearJoint} for explanation. + */ + ratio?: number; } /** * Gear joint definition. */ -interface GearJointDef extends JointDef, GearJointOpt { - /** - * The first revolute/prismatic joint attached to the gear joint. - */ - joint1: RevoluteJoint | PrismaticJoint; - /** - * The second prismatic/revolute joint attached to the gear joint. - */ - joint2: RevoluteJoint | PrismaticJoint; +export interface GearJointDef extends JointDef, GearJointOpt { + /** + * The first revolute/prismatic joint attached to the gear joint. + */ + joint1: RevoluteJoint | PrismaticJoint; + /** + * The second prismatic/revolute joint attached to the gear joint. + */ + joint2: RevoluteJoint | PrismaticJoint; } +/** @hidden @deprecated Use new keyword. */ +export function GearJoint(def: GearJointDef): GearJoint; +/** @hidden @deprecated Use new keyword. */ +export function GearJoint(def: GearJointOpt, bodyA: Body$1, bodyB: Body$1, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number): GearJoint; /** * A gear joint is used to connect two joints together. Either joint can be a * revolute or prismatic joint. You specify a gear ratio to bind the motions @@ -3263,221 +3228,189 @@ interface GearJointDef extends JointDef, GearJointOpt { * This definition requires two existing revolute or prismatic joints (any * combination will work). */ -declare function GearJoint(def: GearJointDef): GearJoint; -/** - * A gear joint is used to connect two joints together. Either joint can be a - * revolute or prismatic joint. You specify a gear ratio to bind the motions - * together: coordinate1 + ratio * coordinate2 = constant - * - * The ratio can be negative or positive. If one joint is a revolute joint and - * the other joint is a prismatic joint, then the ratio will have units of - * length or units of 1/length. Warning: You have to manually destroy the gear - * joint if joint1 or joint2 is destroyed. - * - * This definition requires two existing revolute or prismatic joints (any - * combination will work). - */ -declare function GearJoint(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number): GearJoint; -/** - * A gear joint is used to connect two joints together. Either joint can be a - * revolute or prismatic joint. You specify a gear ratio to bind the motions - * together: coordinate1 + ratio * coordinate2 = constant - * - * The ratio can be negative or positive. If one joint is a revolute joint and - * the other joint is a prismatic joint, then the ratio will have units of - * length or units of 1/length. Warning: You have to manually destroy the gear - * joint if joint1 or joint2 is destroyed. - * - * This definition requires two existing revolute or prismatic joints (any - * combination will work). - */ -declare class GearJoint extends Joint { - static TYPE: "gear-joint"; - constructor(def: GearJointDef); - constructor(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number); - /** @hidden */ - _reset(def: Partial): void; - /** - * Get the first joint. - */ - getJoint1(): Joint; - /** - * Get the second joint. - */ - getJoint2(): Joint; - /** - * Set the gear ratio. - */ - setRatio(ratio: number): void; - /** - * Get the gear ratio. - */ - getRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class GearJoint extends Joint { + static TYPE: "gear-joint"; + constructor(def: GearJointDef); + constructor(def: GearJointOpt, bodyA: Body$1, bodyB: Body$1, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number); + /** @hidden */ + _reset(def: Partial): void; + /** + * Get the first joint. + */ + getJoint1(): Joint; + /** + * Get the second joint. + */ + getJoint2(): Joint; + /** + * Set the gear ratio. + */ + setRatio(ratio: number): void; + /** + * Get the gear ratio. + */ + getRatio(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Motor joint definition. */ -interface MotorJointOpt extends JointOpt { - /** - * The bodyB angle minus bodyA angle in radians. - */ - angularOffset?: number; - /** - * The maximum motor force in N. - */ - maxForce?: number; - /** - * The maximum motor torque in N-m. - */ - maxTorque?: number; - /** - * Position correction factor in the range [0,1]. - */ - correctionFactor?: number; - /** - * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters. - */ - linearOffset?: Vec2Value; +export interface MotorJointOpt extends JointOpt { + /** + * The bodyB angle minus bodyA angle in radians. + */ + angularOffset?: number; + /** + * The maximum motor force in N. + */ + maxForce?: number; + /** + * The maximum motor torque in N-m. + */ + maxTorque?: number; + /** + * Position correction factor in the range [0,1]. + */ + correctionFactor?: number; + /** + * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters. + */ + linearOffset?: Vec2Value; } /** * Motor joint definition. */ -interface MotorJointDef extends JointDef, MotorJointOpt { +export interface MotorJointDef extends JointDef, MotorJointOpt { } +/** @hidden @deprecated Use new keyword. */ +export function MotorJoint(def: MotorJointDef): MotorJoint; +/** @hidden @deprecated Use new keyword. */ +export function MotorJoint(def: MotorJointOpt, bodyA: Body$1, bodyB: Body$1): MotorJoint; /** * A motor joint is used to control the relative motion between two bodies. A * typical usage is to control the movement of a dynamic body with respect to * the ground. */ -declare function MotorJoint(def: MotorJointDef): MotorJoint; -/** - * A motor joint is used to control the relative motion between two bodies. A - * typical usage is to control the movement of a dynamic body with respect to - * the ground. - */ -declare function MotorJoint(def: MotorJointOpt, bodyA: Body, bodyB: Body): MotorJoint; -/** - * A motor joint is used to control the relative motion between two bodies. A - * typical usage is to control the movement of a dynamic body with respect to - * the ground. - */ -declare class MotorJoint extends Joint { - static TYPE: "motor-joint"; - constructor(def: MotorJointDef); - constructor(def: MotorJointOpt, bodyA: Body, bodyB: Body); - /** @hidden */ - _reset(def: Partial): void; - /** - * Set the maximum friction force in N. - */ - setMaxForce(force: number): void; - /** - * Get the maximum friction force in N. - */ - getMaxForce(): number; - /** - * Set the maximum friction torque in N*m. - */ - setMaxTorque(torque: number): void; - /** - * Get the maximum friction torque in N*m. - */ - getMaxTorque(): number; - /** - * Set the position correction factor in the range [0,1]. - */ - setCorrectionFactor(factor: number): void; - /** - * Get the position correction factor in the range [0,1]. - */ - getCorrectionFactor(): number; - /** - * Set/get the target linear offset, in frame A, in meters. - */ - setLinearOffset(linearOffset: Vec2Value): void; - getLinearOffset(): Vec2; - /** - * Set/get the target angular offset, in radians. - */ - setAngularOffset(angularOffset: number): void; - getAngularOffset(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class MotorJoint extends Joint { + static TYPE: "motor-joint"; + constructor(def: MotorJointDef); + constructor(def: MotorJointOpt, bodyA: Body$1, bodyB: Body$1); + /** @hidden */ + _reset(def: Partial): void; + /** + * Set the maximum friction force in N. + */ + setMaxForce(force: number): void; + /** + * Get the maximum friction force in N. + */ + getMaxForce(): number; + /** + * Set the maximum friction torque in N*m. + */ + setMaxTorque(torque: number): void; + /** + * Get the maximum friction torque in N*m. + */ + getMaxTorque(): number; + /** + * Set the position correction factor in the range [0,1]. + */ + setCorrectionFactor(factor: number): void; + /** + * Get the position correction factor in the range [0,1]. + */ + getCorrectionFactor(): number; + /** + * Set/get the target linear offset, in frame A, in meters. + */ + setLinearOffset(linearOffset: Vec2Value): void; + getLinearOffset(): Vec2; + /** + * Set/get the target angular offset, in radians. + */ + setAngularOffset(angularOffset: number): void; + getAngularOffset(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Mouse joint definition. This requires a world target point, tuning * parameters, and the time step. */ -interface MouseJointOpt extends JointOpt { - /** - * [maxForce = 0.0] The maximum constraint force that can be exerted to move - * the candidate body. Usually you will express as some multiple of the - * weight (multiplier * mass * gravity). - */ - maxForce?: number; - /** - * [frequencyHz = 5.0] The response speed. - */ - frequencyHz?: number; - /** - * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical - * damping. - */ - dampingRatio?: number; +export interface MouseJointOpt extends JointOpt { + /** + * [maxForce = 0.0] The maximum constraint force that can be exerted to move + * the candidate body. Usually you will express as some multiple of the + * weight (multiplier * mass * gravity). + */ + maxForce?: number; + /** + * [frequencyHz = 5.0] The response speed. + */ + frequencyHz?: number; + /** + * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical + * damping. + */ + dampingRatio?: number; } /** * Mouse joint definition. This requires a world target point, tuning * parameters, and the time step. */ -interface MouseJointDef extends JointDef, MouseJointOpt { - /** - * The initial world target point. This is assumed to coincide with the body - * anchor initially. - */ - target: Vec2Value; +export interface MouseJointDef extends JointDef, MouseJointOpt { + /** + * The initial world target point. This is assumed to coincide with the body + * anchor initially. + */ + target: Vec2Value; } +/** @hidden @deprecated Use new keyword. */ +export function MouseJoint(def: MouseJointDef): MouseJoint; +/** @hidden @deprecated Use new keyword. */ +export function MouseJoint(def: MouseJointOpt, bodyA: Body$1, bodyB: Body$1, target: Vec2Value): MouseJoint; /** * A mouse joint is used to make a point on a body track a specified world * point. This a soft constraint with a maximum force. This allows the @@ -3490,137 +3423,114 @@ interface MouseJointDef extends JointDef, MouseJointOpt { * be used in the testbed. If you want to learn how to use the mouse joint, look * at the testbed. */ -declare function MouseJoint(def: MouseJointDef): MouseJoint; -/** - * A mouse joint is used to make a point on a body track a specified world - * point. This a soft constraint with a maximum force. This allows the - * constraint to stretch and without applying huge forces. - * - * You need to call setTarget(target) every time that mouse is - * moved, to track the new location of the mouse. - * - * NOTE: this joint is not documented in the manual because it was developed to - * be used in the testbed. If you want to learn how to use the mouse joint, look - * at the testbed. - */ -declare function MouseJoint(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value): MouseJoint; -/** - * A mouse joint is used to make a point on a body track a specified world - * point. This a soft constraint with a maximum force. This allows the - * constraint to stretch and without applying huge forces. - * - * You need to call setTarget(target) every time that mouse is - * moved, to track the new location of the mouse. - * - * NOTE: this joint is not documented in the manual because it was developed to - * be used in the testbed. If you want to learn how to use the mouse joint, look - * at the testbed. - */ -declare class MouseJoint extends Joint { - static TYPE: "mouse-joint"; - constructor(def: MouseJointDef); - constructor(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * Use this to update the target point. - */ - setTarget(target: Vec2Value): void; - getTarget(): Vec2; - /** - * Set the maximum force in Newtons. - */ - setMaxForce(force: number): void; - /** - * Get the maximum force in Newtons. - */ - getMaxForce(): number; - /** - * Set the frequency in Hertz. - */ - setFrequency(hz: number): void; - /** - * Get the frequency in Hertz. - */ - getFrequency(): number; - /** - * Set the damping ratio (dimensionless). - */ - setDampingRatio(ratio: number): void; - /** - * Get the damping ratio (dimensionless). - */ - getDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - /** - * Shift the origin for any points stored in world coordinates. - */ - shiftOrigin(newOrigin: Vec2Value): void; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class MouseJoint extends Joint { + static TYPE: "mouse-joint"; + constructor(def: MouseJointDef); + constructor(def: MouseJointOpt, bodyA: Body$1, bodyB: Body$1, target: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * Use this to update the target point. + */ + setTarget(target: Vec2Value): void; + getTarget(): Vec2; + /** + * Set the maximum force in Newtons. + */ + setMaxForce(force: number): void; + /** + * Get the maximum force in Newtons. + */ + getMaxForce(): number; + /** + * Set the frequency in Hertz. + */ + setFrequency(hz: number): void; + /** + * Get the frequency in Hertz. + */ + getFrequency(): number; + /** + * Set the damping ratio (dimensionless). + */ + setDampingRatio(ratio: number): void; + /** + * Get the damping ratio (dimensionless). + */ + getDampingRatio(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + /** + * Shift the origin for any points stored in world coordinates. + */ + shiftOrigin(newOrigin: Vec2Value): void; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Pulley joint definition. This requires two ground anchors, two dynamic body * anchor points, and a pulley ratio. */ -// tslint:disable-next-line:no-empty-interface -interface PulleyJointOpt extends JointOpt { +export interface PulleyJointOpt extends JointOpt { } /** * Pulley joint definition. This requires two ground anchors, two dynamic body * anchor points, and a pulley ratio. */ -interface PulleyJointDef extends JointDef, PulleyJointOpt { - /** - * The first ground anchor in world coordinates. This point never moves. - */ - groundAnchorA: Vec2Value; - /** - * The second ground anchor in world coordinates. This point never moves. - */ - groundAnchorB: Vec2Value; - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The reference length for the segment attached to bodyA. - */ - lengthA: number; - /** - * The reference length for the segment attached to bodyB. - */ - lengthB: number; - /** - * The pulley ratio, used to simulate a block-and-tackle. - */ - ratio: number; - /** @hidden */ anchorA?: Vec2Value; - /** @hidden */ anchorB?: Vec2Value; +export interface PulleyJointDef extends JointDef, PulleyJointOpt { + /** + * The first ground anchor in world coordinates. This point never moves. + */ + groundAnchorA: Vec2Value; + /** + * The second ground anchor in world coordinates. This point never moves. + */ + groundAnchorB: Vec2Value; + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; + /** + * The reference length for the segment attached to bodyA. + */ + lengthA: number; + /** + * The reference length for the segment attached to bodyB. + */ + lengthB: number; + /** + * The pulley ratio, used to simulate a block-and-tackle. + */ + ratio: number; + /** @hidden */ anchorA?: Vec2Value; + /** @hidden */ anchorB?: Vec2Value; } +/** @hidden @deprecated Use new keyword. */ +export function PulleyJoint(def: PulleyJointDef): PulleyJoint; +/** @hidden @deprecated Use new keyword. */ +export function PulleyJoint(def: PulleyJointOpt, bodyA: Body$1, bodyB: Body$1, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number): PulleyJoint; /** * The pulley joint is connected to two bodies and two fixed ground points. The * pulley supports a ratio such that: length1 + ratio * length2 <= constant @@ -3632,120 +3542,100 @@ interface PulleyJointDef extends JointDef, PulleyJointOpt { * anchor points with static shapes to prevent one side from going to zero * length. */ -declare function PulleyJoint(def: PulleyJointDef): PulleyJoint; -/** - * The pulley joint is connected to two bodies and two fixed ground points. The - * pulley supports a ratio such that: length1 + ratio * length2 <= constant - * - * Yes, the force transmitted is scaled by the ratio. - * - * Warning: the pulley joint can get a bit squirrelly by itself. They often work - * better when combined with prismatic joints. You should also cover the the - * anchor points with static shapes to prevent one side from going to zero - * length. - */ -declare function PulleyJoint(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number): PulleyJoint; -/** - * The pulley joint is connected to two bodies and two fixed ground points. The - * pulley supports a ratio such that: length1 + ratio * length2 <= constant - * - * Yes, the force transmitted is scaled by the ratio. - * - * Warning: the pulley joint can get a bit squirrelly by itself. They often work - * better when combined with prismatic joints. You should also cover the the - * anchor points with static shapes to prevent one side from going to zero - * length. - */ -declare class PulleyJoint extends Joint { - static TYPE: "pulley-joint"; - constructor(def: PulleyJointDef); - constructor(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number); - /** @hidden */ - _reset(def: Partial): void; - /** - * Get the first ground anchor. - */ - getGroundAnchorA(): Vec2; - /** - * Get the second ground anchor. - */ - getGroundAnchorB(): Vec2; - /** - * Get the current length of the segment attached to bodyA. - */ - getLengthA(): number; - /** - * Get the current length of the segment attached to bodyB. - */ - getLengthB(): number; - /** - * Get the pulley ratio. - */ - getRatio(): number; - /** - * Get the current length of the segment attached to bodyA. - */ - getCurrentLengthA(): number; - /** - * Get the current length of the segment attached to bodyB. - */ - getCurrentLengthB(): number; - /** - * Shift the origin for any points stored in world coordinates. - * - * @param newOrigin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class PulleyJoint extends Joint { + static TYPE: "pulley-joint"; + constructor(def: PulleyJointDef); + constructor(def: PulleyJointOpt, bodyA: Body$1, bodyB: Body$1, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number); + /** @hidden */ + _reset(def: Partial): void; + /** + * Get the first ground anchor. + */ + getGroundAnchorA(): Vec2; + /** + * Get the second ground anchor. + */ + getGroundAnchorB(): Vec2; + /** + * Get the current length of the segment attached to bodyA. + */ + getLengthA(): number; + /** + * Get the current length of the segment attached to bodyB. + */ + getLengthB(): number; + /** + * Get the pulley ratio. + */ + getRatio(): number; + /** + * Get the current length of the segment attached to bodyA. + */ + getCurrentLengthA(): number; + /** + * Get the current length of the segment attached to bodyB. + */ + getCurrentLengthB(): number; + /** + * Shift the origin for any points stored in world coordinates. + * + * @param newOrigin + */ + shiftOrigin(newOrigin: Vec2Value): void; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Rope joint definition. This requires two body anchor points and a maximum * lengths. Note: by default the connected objects will not collide. see * collideConnected in JointDef. */ -interface RopeJointOpt extends JointOpt { - /** - * The maximum length of the rope. - * Warning: this must be larger than linearSlop or the joint will have no effect. - */ - maxLength?: number; +export interface RopeJointOpt extends JointOpt { + /** + * The maximum length of the rope. + * Warning: this must be larger than linearSlop or the joint will have no effect. + */ + maxLength?: number; } /** * Rope joint definition. This requires two body anchor points and a maximum * lengths. Note: by default the connected objects will not collide. see * collideConnected in JointDef. */ -interface RopeJointDef extends JointDef, RopeJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; +export interface RopeJointDef extends JointDef, RopeJointOpt { + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; } +/** @hidden @deprecated Use new keyword. */ +export function RopeJoint(def: RopeJointDef): RopeJoint; +/** @hidden @deprecated Use new keyword. */ +export function RopeJoint(def: RopeJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value): RopeJoint; /** * A rope joint enforces a maximum distance between two points on two bodies. It * has no other effect. @@ -3757,181 +3647,151 @@ interface RopeJointDef extends JointDef, RopeJointOpt { * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you * want to dynamically control length. */ -declare function RopeJoint(def: RopeJointDef): RopeJoint; -/** - * A rope joint enforces a maximum distance between two points on two bodies. It - * has no other effect. - * - * Warning: if you attempt to change the maximum length during the simulation - * you will get some non-physical behavior. - * - * A model that would allow you to dynamically modify the length would have some - * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you - * want to dynamically control length. - */ -declare function RopeJoint(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): RopeJoint; -/** - * A rope joint enforces a maximum distance between two points on two bodies. It - * has no other effect. - * - * Warning: if you attempt to change the maximum length during the simulation - * you will get some non-physical behavior. - * - * A model that would allow you to dynamically modify the length would have some - * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you - * want to dynamically control length. - */ -declare class RopeJoint extends Joint { - static TYPE: "rope-joint"; - constructor(def: RopeJointDef); - constructor(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Set the maximum length of the rope. - */ - setMaxLength(length: number): void; - /** - * Get the maximum length of the rope. - */ - getMaxLength(): number; - getLimitState(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class RopeJoint extends Joint { + static TYPE: "rope-joint"; + constructor(def: RopeJointDef); + constructor(def: RopeJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * The local anchor point relative to bodyA's origin. + */ + getLocalAnchorA(): Vec2; + /** + * The local anchor point relative to bodyB's origin. + */ + getLocalAnchorB(): Vec2; + /** + * Set the maximum length of the rope. + */ + setMaxLength(length: number): void; + /** + * Get the maximum length of the rope. + */ + getMaxLength(): number; + getLimitState(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Weld joint definition. You need to specify local anchor points where they are * attached and the relative body angle. The position of the anchor points is * important for computing the reaction torque. */ -interface WeldJointOpt extends JointOpt { - /** - * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness - * with a value of 0. - */ - frequencyHz?: number; - /** - * The damping ratio. 0 = no damping, 1 = critical damping. - */ - dampingRatio?: number; - /** - * The bodyB angle minus bodyA angle in the reference state (radians). - */ - referenceAngle?: number; +export interface WeldJointOpt extends JointOpt { + /** + * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness + * with a value of 0. + */ + frequencyHz?: number; + /** + * The damping ratio. 0 = no damping, 1 = critical damping. + */ + dampingRatio?: number; + /** + * The bodyB angle minus bodyA angle in the reference state (radians). + */ + referenceAngle?: number; } /** * Weld joint definition. You need to specify local anchor points where they are * attached and the relative body angle. The position of the anchor points is * important for computing the reaction torque. */ -interface WeldJointDef extends JointDef, WeldJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; +export interface WeldJointDef extends JointDef, WeldJointOpt { + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; } +/** @hidden @deprecated Use new keyword. */ +export function WeldJoint(def: WeldJointDef): WeldJoint; +/** @hidden @deprecated Use new keyword. */ +export function WeldJoint(def: WeldJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value): WeldJoint; /** * A weld joint essentially glues two bodies together. A weld joint may distort * somewhat because the island constraint solver is approximate. */ -declare function WeldJoint(def: WeldJointDef): WeldJoint; -/** - * A weld joint essentially glues two bodies together. A weld joint may distort - * somewhat because the island constraint solver is approximate. - */ -declare function WeldJoint(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): WeldJoint; -/** - * A weld joint essentially glues two bodies together. A weld joint may distort - * somewhat because the island constraint solver is approximate. - */ -declare class WeldJoint extends Joint { - static TYPE: "weld-joint"; - constructor(def: WeldJointDef); - constructor(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Get the reference angle. - */ - getReferenceAngle(): number; - /** - * Set frequency in Hz. - */ - setFrequency(hz: number): void; - /** - * Get frequency in Hz. - */ - getFrequency(): number; - /** - * Set damping ratio. - */ - setDampingRatio(ratio: number): void; - /** - * Get damping ratio. - */ - getDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class WeldJoint extends Joint { + static TYPE: "weld-joint"; + constructor(def: WeldJointDef); + constructor(def: WeldJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * The local anchor point relative to bodyA's origin. + */ + getLocalAnchorA(): Vec2; + /** + * The local anchor point relative to bodyB's origin. + */ + getLocalAnchorB(): Vec2; + /** + * Get the reference angle. + */ + getReferenceAngle(): number; + /** + * Set frequency in Hz. + */ + setFrequency(hz: number): void; + /** + * Get frequency in Hz. + */ + getFrequency(): number; + /** + * Set damping ratio. + */ + setDampingRatio(ratio: number): void; + /** + * Get damping ratio. + */ + getDampingRatio(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Wheel joint definition. This requires defining a line of motion using an axis @@ -3941,27 +3801,27 @@ declare class WeldJoint extends Joint { * space. Using local anchors and a local axis helps when saving and loading a * game. */ -interface WheelJointOpt extends JointOpt { - /** - * Enable/disable the joint motor. - */ - enableMotor?: boolean; - /** - * The maximum motor torque, usually in N-m. - */ - maxMotorTorque?: number; - /** - * The desired motor speed in radians per second. - */ - motorSpeed?: number; - /** - * Suspension frequency, zero indicates no suspension. - */ - frequencyHz?: number; - /** - * Suspension damping ratio, one indicates critical damping. - */ - dampingRatio?: number; +export interface WheelJointOpt extends JointOpt { + /** + * Enable/disable the joint motor. + */ + enableMotor?: boolean; + /** + * The maximum motor torque, usually in N-m. + */ + maxMotorTorque?: number; + /** + * The desired motor speed in radians per second. + */ + motorSpeed?: number; + /** + * Suspension frequency, zero indicates no suspension. + */ + frequencyHz?: number; + /** + * Suspension damping ratio, one indicates critical damping. + */ + dampingRatio?: number; } /** * Wheel joint definition. This requires defining a line of motion using an axis @@ -3971,238 +3831,225 @@ interface WheelJointOpt extends JointOpt { * space. Using local anchors and a local axis helps when saving and loading a * game. */ -interface WheelJointDef extends JointDef, WheelJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The local translation axis in bodyA. - */ - localAxisA: Vec2Value; +export interface WheelJointDef extends JointDef, WheelJointOpt { + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; + /** + * The local translation axis in bodyA. + */ + localAxisA: Vec2Value; } +/** @hidden @deprecated Use new keyword. */ +export function WheelJoint(def: WheelJointDef): WheelJoint; +/** @hidden @deprecated Use new keyword. */ +export function WheelJoint(def: WheelJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value, axis: Vec2Value): WheelJoint; /** * A wheel joint. This joint provides two degrees of freedom: translation along * an axis fixed in bodyA and rotation in the plane. In other words, it is a * point to line constraint with a rotational motor and a linear spring/damper. * This joint is designed for vehicle suspensions. */ -declare function WheelJoint(def: WheelJointDef): WheelJoint; -/** - * A wheel joint. This joint provides two degrees of freedom: translation along - * an axis fixed in bodyA and rotation in the plane. In other words, it is a - * point to line constraint with a rotational motor and a linear spring/damper. - * This joint is designed for vehicle suspensions. - */ -declare function WheelJoint(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value): WheelJoint; -/** - * A wheel joint. This joint provides two degrees of freedom: translation along - * an axis fixed in bodyA and rotation in the plane. In other words, it is a - * point to line constraint with a rotational motor and a linear spring/damper. - * This joint is designed for vehicle suspensions. - */ -declare class WheelJoint extends Joint { - static TYPE: "wheel-joint"; - constructor(def: WheelJointDef); - constructor(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * The local joint axis relative to bodyA. - */ - getLocalAxisA(): Vec2; - /** - * Get the current joint translation, usually in meters. - */ - getJointTranslation(): number; - /** - * Get the current joint translation speed, usually in meters per second. - */ - getJointSpeed(): number; - /** - * Is the joint motor enabled? - */ - isMotorEnabled(): boolean; - /** - * Enable/disable the joint motor. - */ - enableMotor(flag: boolean): void; - /** - * Set the motor speed, usually in radians per second. - */ - setMotorSpeed(speed: number): void; - /** - * Get the motor speed, usually in radians per second. - */ - getMotorSpeed(): number; - /** - * Set/Get the maximum motor force, usually in N-m. - */ - setMaxMotorTorque(torque: number): void; - getMaxMotorTorque(): number; - /** - * Get the current motor torque given the inverse time step, usually in N-m. - */ - getMotorTorque(inv_dt: number): number; - /** - * Set/Get the spring frequency in hertz. Setting the frequency to zero disables - * the spring. - */ - setSpringFrequencyHz(hz: number): void; - getSpringFrequencyHz(): number; - /** - * Set/Get the spring damping ratio - */ - setSpringDampingRatio(ratio: number): void; - getSpringDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class WheelJoint extends Joint { + static TYPE: "wheel-joint"; + constructor(def: WheelJointDef); + constructor(def: WheelJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value, axis: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * The local anchor point relative to bodyA's origin. + */ + getLocalAnchorA(): Vec2; + /** + * The local anchor point relative to bodyB's origin. + */ + getLocalAnchorB(): Vec2; + /** + * The local joint axis relative to bodyA. + */ + getLocalAxisA(): Vec2; + /** + * Get the current joint translation, usually in meters. + */ + getJointTranslation(): number; + /** + * Get the current joint translation speed, usually in meters per second. + */ + getJointSpeed(): number; + /** + * Is the joint motor enabled? + */ + isMotorEnabled(): boolean; + /** + * Enable/disable the joint motor. + */ + enableMotor(flag: boolean): void; + /** + * Set the motor speed, usually in radians per second. + */ + setMotorSpeed(speed: number): void; + /** + * Get the motor speed, usually in radians per second. + */ + getMotorSpeed(): number; + /** + * Set/Get the maximum motor force, usually in N-m. + */ + setMaxMotorTorque(torque: number): void; + getMaxMotorTorque(): number; + /** + * Get the current motor torque given the inverse time step, usually in N-m. + */ + getMotorTorque(inv_dt: number): number; + /** + * Set/Get the spring frequency in hertz. Setting the frequency to zero disables + * the spring. + */ + setSpringFrequencyHz(hz: number): void; + getSpringFrequencyHz(): number; + /** + * Set/Get the spring damping ratio + */ + setSpringDampingRatio(ratio: number): void; + getSpringDampingRatio(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Tuning constants based on meters-kilograms-seconds (MKS) units. * * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units. */ -declare class Settings { - /** - * You can use this to change the length scale used by your game. - * - * For example for inches you could use 39.4. - */ - static lengthUnitsPerMeter: number; - // Collision - /** - * The maximum number of contact points between two convex shapes. Do not change - * this value. - */ - static maxManifoldPoints: number; - /** - * The maximum number of vertices on a convex polygon. You cannot increase this - * too much because BlockAllocator has a maximum object size. - */ - static maxPolygonVertices: number; - /** - * This is used to fatten AABBs in the dynamic tree. This allows proxies to move - * by a small amount without triggering a tree adjustment. This is in meters. - */ - static aabbExtension: number; - /** - * This is used to fatten AABBs in the dynamic tree. This is used to predict the - * future position based on the current displacement. This is a dimensionless - * multiplier. - */ - static aabbMultiplier: number; - /** - * A small length used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - static linearSlop: number; - /** - * A small angle used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - static angularSlop: number; - /** - * The radius of the polygon/edge shape skin. This should not be modified. - * Making this smaller means polygons will have an insufficient buffer for - * continuous collision. Making it larger may create artifacts for vertex - * collision. - */ - static get polygonRadius(): number; - /** - * Maximum number of sub-steps per contact in continuous physics simulation. - */ - static maxSubSteps: number; - // Dynamics - /** - * Maximum number of contacts to be handled to solve a TOI impact. - */ - static maxTOIContacts: number; - /** - * Maximum iterations to solve a TOI. - */ - static maxTOIIterations: number; - /** - * Maximum iterations to find Distance. - */ - static maxDistanceIterations: number; - /** - * A velocity threshold for elastic collisions. Any collision with a relative - * linear velocity below this threshold will be treated as inelastic. - */ - static velocityThreshold: number; - /** - * The maximum linear position correction used when solving constraints. This - * helps to prevent overshoot. - */ - static maxLinearCorrection: number; - /** - * The maximum angular position correction used when solving constraints. This - * helps to prevent overshoot. - */ - static maxAngularCorrection: number; - /** - * The maximum linear velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - static maxTranslation: number; - /** - * The maximum angular velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - static maxRotation: number; - /** - * This scale factor controls how fast overlap is resolved. Ideally this would - * be 1 so that overlap is removed in one time step. However using values close - * to 1 often lead to overshoot. - */ - static baumgarte: number; - static toiBaugarte: number; - // Sleep - /** - * The time that a body must be still before it will go to sleep. - */ - static timeToSleep: number; - /** - * A body cannot sleep if its linear velocity is above this tolerance. - */ - static linearSleepTolerance: number; - /** - * A body cannot sleep if its angular velocity is above this tolerance. - */ - static angularSleepTolerance: number; +export declare class Settings { + /** + * You can use this to change the length scale used by your game. + * + * For example for inches you could use 39.4. + */ + static lengthUnitsPerMeter: number; + /** + * The maximum number of contact points between two convex shapes. Do not change + * this value. + */ + static maxManifoldPoints: number; + /** + * The maximum number of vertices on a convex polygon. You cannot increase this + * too much because BlockAllocator has a maximum object size. + */ + static maxPolygonVertices: number; + /** + * This is used to fatten AABBs in the dynamic tree. This allows proxies to move + * by a small amount without triggering a tree adjustment. This is in meters. + */ + static aabbExtension: number; + /** + * This is used to fatten AABBs in the dynamic tree. This is used to predict the + * future position based on the current displacement. This is a dimensionless + * multiplier. + */ + static aabbMultiplier: number; + /** + * A small length used as a collision and constraint tolerance. Usually it is + * chosen to be numerically significant, but visually insignificant. + */ + static linearSlop: number; + /** + * A small angle used as a collision and constraint tolerance. Usually it is + * chosen to be numerically significant, but visually insignificant. + */ + static angularSlop: number; + /** + * The radius of the polygon/edge shape skin. This should not be modified. + * Making this smaller means polygons will have an insufficient buffer for + * continuous collision. Making it larger may create artifacts for vertex + * collision. + */ + static get polygonRadius(): number; + /** + * Maximum number of sub-steps per contact in continuous physics simulation. + */ + static maxSubSteps: number; + /** + * Maximum number of contacts to be handled to solve a TOI impact. + */ + static maxTOIContacts: number; + /** + * Maximum iterations to solve a TOI. + */ + static maxTOIIterations: number; + /** + * Maximum iterations to find Distance. + */ + static maxDistanceIterations: number; + /** + * A velocity threshold for elastic collisions. Any collision with a relative + * linear velocity below this threshold will be treated as inelastic. + */ + static velocityThreshold: number; + /** + * The maximum linear position correction used when solving constraints. This + * helps to prevent overshoot. + */ + static maxLinearCorrection: number; + /** + * The maximum angular position correction used when solving constraints. This + * helps to prevent overshoot. + */ + static maxAngularCorrection: number; + /** + * The maximum linear velocity of a body. This limit is very large and is used + * to prevent numerical problems. You shouldn't need to adjust Settings. + */ + static maxTranslation: number; + /** + * The maximum angular velocity of a body. This limit is very large and is used + * to prevent numerical problems. You shouldn't need to adjust Settings. + */ + static maxRotation: number; + /** + * This scale factor controls how fast overlap is resolved. Ideally this would + * be 1 so that overlap is removed in one time step. However using values close + * to 1 often lead to overshoot. + */ + static baumgarte: number; + static toiBaugarte: number; + /** + * The time that a body must be still before it will go to sleep. + */ + static timeToSleep: number; + /** + * A body cannot sleep if its linear velocity is above this tolerance. + */ + static linearSleepTolerance: number; + /** + * A body cannot sleep if its angular velocity is above this tolerance. + */ + static angularSleepTolerance: number; } /** * This describes the motion of a body/shape for TOI computation. Shapes are @@ -4210,66 +4057,66 @@ declare class Settings { * center of mass. However, to support dynamics we must interpolate the center * of mass position. */ -declare class Sweep { - /** Local center of mass position */ - localCenter: Vec2; - /** World center position */ - c: Vec2; - /** World angle */ - a: number; - /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */ - alpha0: number; - c0: Vec2; - a0: number; - setTransform(xf: TransformValue): void; - setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void; - /** - * Get the interpolated transform at a specific time. - * - * @param xf - * @param beta A factor in [0,1], where 0 indicates alpha0 - */ - getTransform(xf: TransformValue, beta?: number): void; - /** - * Advance the sweep forward, yielding a new initial state. - * - * @param alpha The new initial time - */ - advance(alpha: number): void; - forward(): void; - /** - * normalize the angles in radians to be between -pi and pi. - */ - normalize(): void; - set(that: Sweep): void; +export declare class Sweep { + /** Local center of mass position */ + localCenter: Vec2; + /** World center position */ + c: Vec2; + /** World angle */ + a: number; + /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */ + alpha0: number; + c0: Vec2; + a0: number; + setTransform(xf: TransformValue): void; + setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void; + /** + * Get the interpolated transform at a specific time. + * + * @param xf + * @param beta A factor in [0,1], where 0 indicates alpha0 + */ + getTransform(xf: TransformValue, beta?: number): void; + /** + * Advance the sweep forward, yielding a new initial state. + * + * @param alpha The new initial time + */ + advance(alpha: number): void; + forward(): void; + /** + * normalize the angles in radians to be between -pi and pi. + */ + normalize(): void; + set(that: Sweep): void; } /** * Input parameters for TimeOfImpact. */ -declare class TOIInput { - proxyA: DistanceProxy; - proxyB: DistanceProxy; - sweepA: Sweep; - sweepB: Sweep; - /** defines sweep interval [0, tMax] */ - tMax: number; - recycle(): void; +export declare class TOIInput { + proxyA: DistanceProxy; + proxyB: DistanceProxy; + sweepA: Sweep; + sweepB: Sweep; + /** defines sweep interval [0, tMax] */ + tMax: number; + recycle(): void; } -declare enum TOIOutputState { - e_unset = -1, - e_unknown = 0, - e_failed = 1, - e_overlapped = 2, - e_touching = 3, - e_separated = 4 +export declare enum TOIOutputState { + e_unset = -1, + e_unknown = 0, + e_failed = 1, + e_overlapped = 2, + e_touching = 3, + e_separated = 4 } /** * Output parameters for TimeOfImpact. */ -declare class TOIOutput { - state: TOIOutputState; - t: number; - recycle(): void; +export declare class TOIOutput { + state: TOIOutputState; + t: number; + recycle(): void; } /** * Compute the upper bound on time before two shapes penetrate. Time is @@ -4283,4207 +4130,63 @@ declare class TOIOutput { * CCD via the local separating axis method. This seeks progression by computing * the largest time at which separation is maintained. */ -declare const TimeOfImpact: { - (output: TOIOutput, input: TOIInput): void; - Input: typeof TOIInput; - Output: typeof TOIOutput; +export declare const TimeOfImpact: { + (output: TOIOutput, input: TOIInput): void; + Input: typeof TOIInput; + Output: typeof TOIOutput; }; /** @hidden */ -declare const stats: { - gjkCalls: number; - gjkIters: number; - gjkMaxIters: number; - toiTime: number; - toiMaxTime: number; - toiCalls: number; - toiIters: number; - toiMaxIters: number; - toiRootIters: number; - toiMaxRootIters: number; - toString(newline?: string): string; +export declare const stats: { + gjkCalls: number; + gjkIters: number; + gjkMaxIters: number; + toiTime: number; + toiMaxTime: number; + toiCalls: number; + toiIters: number; + toiMaxIters: number; + toiRootIters: number; + toiMaxRootIters: number; + toString(newline?: string): string; }; /** @hidden @deprecated Merged with main namespace */ -declare const internal: { - CollidePolygons: (manifold: Manifold, polyA: PolygonShape, xfA: TransformValue, polyB: PolygonShape, xfB: TransformValue) => void; - Settings: typeof Settings; - Sweep: typeof Sweep; - Manifold: typeof Manifold; - Distance: { - (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void; - testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; - Input: typeof DistanceInput; - Output: typeof DistanceOutput; - Proxy: typeof DistanceProxy; - Cache: typeof SimplexCache; - }; - TimeOfImpact: { - (output: TOIOutput, input: TOIInput): void; - Input: typeof TOIInput; - Output: typeof TOIOutput; - }; - DynamicTree: typeof DynamicTree; - stats: { - gjkCalls: number; - gjkIters: number; - gjkMaxIters: number; - toiTime: number; - toiMaxTime: number; - toiCalls: number; - toiIters: number; - toiMaxIters: number; - toiRootIters: number; - toiMaxRootIters: number; - toString(newline?: string): string; - }; +export declare const internal: { + CollidePolygons: (manifold: Manifold, polyA: PolygonShape, xfA: TransformValue, polyB: PolygonShape, xfB: TransformValue) => void; + Settings: typeof Settings; + Sweep: typeof Sweep; + Manifold: typeof Manifold; + Distance: { + (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void; + testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; + Input: typeof DistanceInput; + Output: typeof DistanceOutput; + Proxy: typeof DistanceProxy; + Cache: typeof SimplexCache; + }; + TimeOfImpact: { + (output: TOIOutput, input: TOIInput): void; + Input: typeof TOIInput; + Output: typeof TOIOutput; + }; + DynamicTree: typeof DynamicTree; + stats: { + gjkCalls: number; + gjkIters: number; + gjkMaxIters: number; + toiTime: number; + toiMaxTime: number; + toiCalls: number; + toiIters: number; + toiMaxIters: number; + toiRootIters: number; + toiMaxRootIters: number; + toString(newline?: string): string; + }; }; -declare namespace planck { - interface Vec2Value { - x: number; - y: number; - } - class Vec2 { - x: number; - y: number; - constructor(x: number, y: number); - constructor(obj: { - x: number; - y: number; - }); - constructor(); - static zero(): Vec2; - /** @hidden */ - static neo(x: number, y: number): Vec2; - static clone(v: Vec2Value): Vec2; - /** @hidden */ - toString(): string; - /** - * Does this vector contain finite coordinates? - */ - static isValid(obj: any): boolean; - static assert(o: any): void; - clone(): Vec2; - /** - * Set this vector to all zeros. - * - * @returns this - */ - setZero(): Vec2; - set(x: number, y: number): Vec2; - set(value: Vec2Value): Vec2; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - setNum(x: number, y: number): this; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - setVec2(value: Vec2Value): this; - /** - * Set linear combination of v and w: `a * v + b * w` - */ - setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - setMul(a: number, v: Vec2Value): Vec2; - /** - * Add a vector to this vector. - * - * @returns this - */ - add(w: Vec2Value): Vec2; - /** - * Add linear combination of v and w: `a * v + b * w` - */ - addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - addMul(a: number, v: Vec2Value): Vec2; - /** - * @deprecated Use subCombine or subMul - */ - wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2; - /** - * Subtract linear combination of v and w: `a * v + b * w` - */ - subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - subMul(a: number, v: Vec2Value): Vec2; - /** - * Subtract a vector from this vector - * - * @returns this - */ - sub(w: Vec2Value): Vec2; - /** - * Multiply this vector by a scalar. - * - * @returns this - */ - mul(m: number): Vec2; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - length(): number; - /** - * Get the length squared. - */ - lengthSquared(): number; - /** - * Convert this vector into a unit vector. - * - * @returns old length - */ - normalize(): number; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - static lengthOf(v: Vec2Value): number; - /** - * Get the length squared. - */ - static lengthSquared(v: Vec2Value): number; - static distance(v: Vec2Value, w: Vec2Value): number; - static distanceSquared(v: Vec2Value, w: Vec2Value): number; - static areEqual(v: Vec2Value, w: Vec2Value): boolean; - /** - * Get the skew vector such that dot(skew_vec, other) == cross(vec, other) - */ - static skew(v: Vec2Value): Vec2; - /** Dot product on two vectors */ - static dot(v: Vec2Value, w: Vec2Value): number; - /** Cross product between two vectors */ - static cross(v: Vec2Value, w: Vec2Value): number; - /** Cross product between a vector and a scalar */ - static cross(v: Vec2Value, w: number): Vec2; - /** Cross product between a scalar and a vector */ - static cross(v: number, w: Vec2Value): Vec2; - /** Cross product on two vectors */ - static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number; - /** Cross product on a vector and a scalar */ - static crossVec2Num(v: Vec2Value, w: number): Vec2; - /** Cross product on a vector and a scalar */ - static crossNumVec2(v: number, w: Vec2Value): Vec2; - /** Returns `a + (v x w)` */ - static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2; - /** Returns `a + (v x w)` */ - static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2; - /** - * Returns `a + (v x w)` - */ - static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2; - /** - * Returns `a + (v x w)` - */ - static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2; - static add(v: Vec2Value, w: Vec2Value): Vec2; - /** @hidden @deprecated */ - static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - static sub(v: Vec2Value, w: Vec2Value): Vec2; - static mul(a: Vec2Value, b: number): Vec2; - static mul(a: number, b: Vec2Value): Vec2; - static mulVec2Num(a: Vec2Value, b: number): Vec2; - static mulNumVec2(a: number, b: Vec2Value): Vec2; - neg(): Vec2; - static neg(v: Vec2Value): Vec2; - static abs(v: Vec2Value): Vec2; - static mid(v: Vec2Value, w: Vec2Value): Vec2; - static upper(v: Vec2Value, w: Vec2Value): Vec2; - static lower(v: Vec2Value, w: Vec2Value): Vec2; - clamp(max: number): Vec2; - static clamp(v: Vec2Value, max: number): Vec2; - /** @hidden @deprecated */ - static scaleFn(x: number, y: number): (v: Vec2Value) => Vec2; - /** @hidden @deprecated */ - static translateFn(x: number, y: number): (v: Vec2Value) => Vec2; - } - interface RotValue { - /** sin(angle) */ - s: number; - /** cos(angle) */ - c: number; - } - class Rot { - /** sin(angle) */ - s: number; - /** cos(angle) */ - c: number; - /** Initialize from an angle in radians. */ - constructor(angle?: number | RotValue); - /** @hidden */ - static neo(angle: number): Rot; - static clone(rot: RotValue): Rot; - static identity(): Rot; - static isValid(obj: any): boolean; - static assert(o: any): void; - /** Set to the identity rotation. */ - setIdentity(): void; - set(angle: number | RotValue): void; - setRot(angle: RotValue): void; - /** Set using an angle in radians. */ - setAngle(angle: number): void; - /** Get the angle in radians. */ - getAngle(): number; - /** Get the x-axis. */ - getXAxis(): Vec2; - /** Get the y-axis. */ - getYAxis(): Vec2; - /** Multiply two rotations: q * r */ - static mul(rot: RotValue, m: RotValue): Rot; - /** Rotate a vector */ - static mul(rot: RotValue, m: Vec2Value): Vec2; - /** Multiply two rotations: q * r */ - static mulRot(rot: RotValue, m: RotValue): Rot; - /** Rotate a vector */ - static mulVec2(rot: RotValue, m: Vec2Value): Vec2; - static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2; - /** Transpose multiply two rotations: qT * r */ - static mulT(rot: RotValue, m: RotValue): Rot; - /** Inverse rotate a vector */ - static mulT(rot: RotValue, m: Vec2Value): Vec2; - /** Transpose multiply two rotations: qT * r */ - static mulTRot(rot: RotValue, m: RotValue): Rot; - /** Inverse rotate a vector */ - static mulTVec2(rot: RotValue, m: Vec2Value): Vec2; - } - type TransformValue = { - p: Vec2Value; - q: RotValue; - }; - /** - * A transform contains translation and rotation. It is used to represent the - * position and orientation of rigid frames. Initialize using a position vector - * and a rotation. - */ - class Transform { - /** position */ - p: Vec2; - /** rotation */ - q: Rot; - constructor(position?: Vec2Value, rotation?: number); - static clone(xf: Transform): Transform; - /** @hidden */ - static neo(position: Vec2Value, rotation: Rot): Transform; - static identity(): Transform; - /** Set this to the identity transform */ - setIdentity(): void; - /** Set position and angle */ - set(position: Vec2Value, rotation: number): void; - /** Copy from another transform */ - set(xf: TransformValue): void; - /** Set position and angle */ - setNum(position: Vec2Value, rotation: number): void; - setTransform(xf: TransformValue): void; - static isValid(obj: any): boolean; - static assert(o: any): void; - static mul(a: TransformValue, b: Vec2Value): Vec2; - static mul(a: TransformValue, b: TransformValue): Transform; - static mulAll(a: Transform, b: Vec2Value[]): Vec2[]; - static mulAll(a: Transform, b: Transform[]): Transform[]; - /** @hidden @deprecated */ - static mulFn(a: TransformValue): (b: Vec2Value) => Vec2; - static mulVec2(a: TransformValue, b: Vec2Value): Vec2; - static mulXf(a: TransformValue, b: TransformValue): Transform; - static mulT(a: TransformValue, b: Vec2Value): Vec2; - static mulT(a: TransformValue, b: TransformValue): Transform; - static mulTVec2(a: TransformValue, b: Vec2Value): Vec2; - static mulTXf(a: TransformValue, b: TransformValue): Transform; - } - /** - * Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - */ - interface RayCastInput { - p1: Vec2Value; - p2: Vec2Value; - maxFraction: number; - } - type RayCastCallback = (subInput: RayCastInput, id: number) => number; - /** - * Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`, - * where `p1` and `p2` come from RayCastInput. - */ - interface RayCastOutput { - normal: Vec2; - fraction: number; - } - interface AABBValue { - lowerBound: Vec2Value; - upperBound: Vec2Value; - } - class AABB { - lowerBound: Vec2; - upperBound: Vec2; - constructor(lower?: Vec2Value, upper?: Vec2Value); - /** - * Verify that the bounds are sorted. - */ - isValid(): boolean; - static isValid(obj: any): boolean; - static assert(o: any): void; - /** - * Get the center of the AABB. - */ - getCenter(): Vec2; - /** - * Get the extents of the AABB (half-widths). - */ - getExtents(): Vec2; - /** - * Get the perimeter length. - */ - getPerimeter(): number; - /** - * Combine one or two AABB into this one. - */ - combine(a: AABBValue, b?: AABBValue): void; - combinePoints(a: Vec2Value, b: Vec2Value): void; - set(aabb: AABBValue): void; - contains(aabb: AABBValue): boolean; - extend(value: number): AABB; - static extend(out: AABBValue, value: number): AABBValue; - static testOverlap(a: AABBValue, b: AABBValue): boolean; - static areEqual(a: AABBValue, b: AABBValue): boolean; - static diff(a: AABBValue, b: AABBValue): number; - rayCast(output: RayCastOutput, input: RayCastInput): boolean; - /** @hidden */ - toString(): string; - static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue; - static combinedPerimeter(a: AABBValue, b: AABBValue): number; - } - /** - * Input for Distance. You have to option to use the shape radii in the - * computation. Even - */ - class DistanceInput { - readonly proxyA: DistanceProxy; - readonly proxyB: DistanceProxy; - readonly transformA: Transform; - readonly transformB: Transform; - useRadii: boolean; - recycle(): void; - } - /** - * Output for Distance. - */ - class DistanceOutput { - /** closest point on shapeA */ - pointA: Vec2Value; - /** closest point on shapeB */ - pointB: Vec2Value; - distance: number; - /** iterations number of GJK iterations used */ - iterations: number; - recycle(): void; - } - /** - * Used to warm start Distance. Set count to zero on first call. - */ - class SimplexCache { - /** length or area */ - metric: number; - /** vertices on shape A */ - indexA: number[]; - /** vertices on shape B */ - indexB: number[]; - count: number; - recycle(): void; - } - /** - * Compute the closest points between two shapes. Supports any combination of: - * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On - * the first call set SimplexCache.count to zero. - */ - const Distance: { - (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void; - testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; - Input: typeof DistanceInput; - Output: typeof DistanceOutput; - Proxy: typeof DistanceProxy; - Cache: typeof SimplexCache; - }; - /** - * A distance proxy is used by the GJK algorithm. It encapsulates any shape. - */ - class DistanceProxy { - recycle(): void; - /** - * Get the vertex count. - */ - getVertexCount(): number; - /** - * Get a vertex by index. Used by Distance. - */ - getVertex(index: number): Vec2Value; - /** - * Get the supporting vertex index in the given direction. - */ - getSupport(d: Vec2Value): number; - /** - * Get the supporting vertex in the given direction. - */ - getSupportVertex(d: Vec2Value): Vec2Value; - /** - * Initialize the proxy using the given shape. The shape must remain in scope - * while the proxy is in use. - */ - set(shape: Shape, index: number): void; - /** - * Initialize the proxy using a vertex cloud and radius. The vertices - * must remain in scope while the proxy is in use. - */ - setVertices(vertices: Vec2Value[], count: number, radius: number): void; - } - /** - * Determine if two generic shapes overlap. - */ - const testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; - /** - * Input parameters for ShapeCast - */ - class ShapeCastInput { - readonly proxyA: DistanceProxy; - readonly proxyB: DistanceProxy; - readonly transformA: Transform; - readonly transformB: Transform; - readonly translationB: Vec2; - recycle(): void; - } - /** - * Output results for b2ShapeCast - */ - class ShapeCastOutput { - point: Vec2; - normal: Vec2; - lambda: number; - iterations: number; - } - /** - * Perform a linear shape cast of shape B moving and shape A fixed. Determines - * the hit point, normal, and translation fraction. - * - * @returns true if hit, false if there is no hit or an initial overlap - */ - // - // GJK-raycast - // Algorithm by Gino van den Bergen. - // "Smooth Mesh Contacts with GJK" in Game Physics Pearls. 2010 - const ShapeCast: (output: ShapeCastOutput, input: ShapeCastInput) => boolean; - /** - * A joint edge is used to connect bodies and joints together in a joint graph - * where each body is a node and each joint is an edge. A joint edge belongs to - * a doubly linked list maintained in each attached body. Each joint has two - * joint nodes, one for each attached body. - */ - class JointEdge { - /** - * provides quick access to the other body attached. - */ - other: Body | null; - /** - * the joint - */ - joint: Joint | null; - /** - * prev the previous joint edge in the body's joint list - */ - prev: JointEdge | null; - /** - * the next joint edge in the body's joint list - */ - next: JointEdge | null; - } - /** - * Joint definitions are used to construct joints. - */ - interface JointOpt { - /** - * Use this to attach application specific data to your joints. - */ - userData?: any; - /** - * Set this flag to true if the attached bodies - * should collide. - */ - collideConnected?: boolean; - } - /** - * Joint definitions are used to construct joints. - */ - interface JointDef extends JointOpt { - /** - * The first attached body. - */ - bodyA: Body; - /** - * The second attached body. - */ - bodyB: Body; - } - /** - * The base joint class. Joints are used to constraint two bodies together in - * various fashions. Some joints also feature limits and motors. - */ - abstract class Joint { - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - constructor(def: JointDef); - constructor(def: JointOpt, bodyA: Body, bodyB: Body); - /** - * Short-cut function to determine if either body is inactive. - */ - isActive(): boolean; - /** - * Get the type of the concrete joint. - */ - getType(): string; - /** - * Get the first body attached to this joint. - */ - getBodyA(): Body; - /** - * Get the second body attached to this joint. - */ - getBodyB(): Body; - /** - * Get the next joint the world joint list. - */ - getNext(): Joint; - getUserData(): unknown; - setUserData(data: unknown): void; - /** - * Get collide connected. Note: modifying the collide connect flag won't work - * correctly because the flag is only checked when fixture AABBs begin to - * overlap. - */ - getCollideConnected(): boolean; - /** - * Get the anchor point on bodyA in world coordinates. - */ - abstract getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - abstract getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - abstract getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - abstract getReactionTorque(inv_dt: number): number; - /** - * Shift the origin for any points stored in world coordinates. - */ - shiftOrigin(newOrigin: Vec2Value): void; - abstract initVelocityConstraints(step: TimeStep): void; - abstract solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - abstract solvePositionConstraints(step: TimeStep): boolean; - /** - * @hidden @experimental - * Update joint with new props. - */ - abstract _reset(def: Partial): void; - } - interface Style { - stroke?: string; - fill?: string; - lineWidth?: number; - } - type KEY = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "right" | "left" | "up" | "down" | "fire"; - type ActiveKeys = { - [key in KEY]?: boolean; - }; - type TestbedMountOptions = {}; - abstract class Testbed { - /** - * Mounts testbed. Call start with a world to start simulation and rendering. - */ - static mount(options?: TestbedMountOptions): Testbed; - /** - * Mounts testbed if needed, then starts simulation and rendering. - * - * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`. - */ - static start(world: World): Testbed; - /** World viewbox width. */ - width: number; - /** World viewbox height. */ - height: number; - /** World viewbox center vertical offset. */ - x: number; - /** World viewbox center horizontal offset. */ - y: number; - /** @hidden */ - scaleY: number; - /** World simulation step frequency */ - hz: number; - /** World simulation speed, default is 1 */ - speed: number; - background: string; - mouseForce?: number; - activeKeys: ActiveKeys; - /** callback, to be implemented by user */ - step: (dt: number, t: number) => void; - /** callback, to be implemented by user */ - keydown: (keyCode: number, label: string) => void; - /** callback, to be implemented by user */ - keyup: (keyCode: number, label: string) => void; - abstract status(name: string, value: any): void; - abstract status(value: object | string): void; - abstract info(text: string): void; - color(r: number, g: number, b: number): string; - abstract drawPoint(p: { - x: number; - y: number; - }, r: any, color: string): void; - abstract drawCircle(p: { - x: number; - y: number; - }, r: number, color: string): void; - abstract drawEdge(a: { - x: number; - y: number; - }, b: { - x: number; - y: number; - }, color: string): void; - abstract drawSegment(a: { - x: number; - y: number; - }, b: { - x: number; - y: number; - }, color: string): void; - abstract drawPolygon(points: Array<{ - x: number; - y: number; - }>, color: string): void; - abstract drawAABB(aabb: AABBValue, color: string): void; - abstract start(world: World): void; - abstract findOne(query: string): (Body | Joint | Fixture | null); - abstract findAll(query: string): (Body | Joint | Fixture)[]; - } - type TestbedFactoryOptions = string | {}; - /** @deprecated */ - type TestbedCallback = (testbed: Testbed) => (World | undefined); - /** @deprecated */ - function testbed(callback: TestbedCallback): void; - /** @deprecated */ - function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void; - // todo make shape an interface - /** - * A shape is used for collision detection. You can create a shape however you - * like. Shapes used for simulation in World are created automatically when a - * Fixture is created. Shapes may encapsulate one or more child shapes. - */ - abstract class Shape { - /** @hidden */ m_type: ShapeType; - /** - * @hidden - * Radius of a shape. For polygonal shapes this must be b2_polygonRadius. - * There is no support for making rounded polygons. - */ - m_radius: number; - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - /** @hidden */ - abstract _reset(): void; - static isValid(obj: any): boolean; - abstract getRadius(): number; - /** - * Get the type of this shape. You can use this to down cast to the concrete - * shape. - * - * @return the shape type. - */ - abstract getType(): ShapeType; - /** - * Get the number of child primitives. - */ - abstract getChildCount(): number; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - abstract testPoint(xf: TransformValue, p: Vec2Value): boolean; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - abstract computeMass(massData: MassData, density?: number): void; - abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void; - } - type ShapeType = "circle" | "edge" | "polygon" | "chain"; - type DynamicTreeQueryCallback = (nodeId: number) => boolean; - /** - * A node in the dynamic tree. The client does not interact with this directly. - */ - class TreeNode { - id: number; - /** Enlarged AABB */ - aabb: AABB; - userData: T; - parent: TreeNode; - child1: TreeNode; - child2: TreeNode; - /** 0: leaf, -1: free node */ - height: number; - constructor(id?: number); - isLeaf(): boolean; - } - /** - * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A - * dynamic tree arranges data in a binary tree to accelerate queries such as - * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we - * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger - * than the client object. This allows the client object to move by small - * amounts without triggering a tree update. - * - * Nodes are pooled and relocatable, so we use node indices rather than - * pointers. - */ - class DynamicTree { - m_root: TreeNode; - m_lastProxyId: number; - m_nodes: { - [id: number]: TreeNode; - }; - constructor(); - /** - * Get proxy user data. - * - * @return the proxy user data or 0 if the id is invalid. - */ - getUserData(id: number): T; - /** - * Get the fat AABB for a node id. - * - * @return the proxy user data or 0 if the id is invalid. - */ - getFatAABB(id: number): AABB; - allocateNode(): TreeNode; - freeNode(node: TreeNode): void; - /** - * Create a proxy in the tree as a leaf node. We return the index of the node - * instead of a pointer so that we can grow the node pool. - * - * Create a proxy. Provide a tight fitting AABB and a userData pointer. - */ - createProxy(aabb: AABBValue, userData: T): number; - /** - * Destroy a proxy. This asserts if the id is invalid. - */ - destroyProxy(id: number): void; - /** - * Move a proxy with a swepted AABB. If the proxy has moved outside of its - * fattened AABB, then the proxy is removed from the tree and re-inserted. - * Otherwise the function returns immediately. - * - * @param d Displacement - * - * @return true if the proxy was re-inserted. - */ - moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean; - insertLeaf(leaf: TreeNode): void; - removeLeaf(leaf: TreeNode): void; - /** - * Perform a left or right rotation if node A is imbalanced. Returns the new - * root index. - */ - balance(iA: TreeNode): TreeNode; - /** - * Compute the height of the binary tree in O(N) time. Should not be called - * often. - */ - getHeight(): number; - /** - * Get the ratio of the sum of the node areas to the root area. - */ - getAreaRatio(): number; - /** - * Compute the height of a sub-tree. - */ - computeHeight(id?: number): number; - validateStructure(node: TreeNode): void; - validateMetrics(node: TreeNode): void; - /** - * Validate this tree. For testing. - */ - validate(): void; - /** - * Get the maximum balance of an node in the tree. The balance is the difference - * in height of the two children of a node. - */ - getMaxBalance(): number; - /** - * Build an optimal tree. Very expensive. For testing. - */ - rebuildBottomUp(): void; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void; - private inputPool; - private stackPool; - private iteratorPool; - } - /** - * The broad-phase wraps and extends a dynamic-tree to keep track of moved - * objects and query them on update. - */ - class BroadPhase { - m_tree: DynamicTree; - m_moveBuffer: number[]; - m_callback: (userDataA: any, userDataB: any) => void; - m_queryProxyId: number; - /** - * Get user data from a proxy. Returns null if the id is invalid. - */ - getUserData(proxyId: number): FixtureProxy; - /** - * Test overlap of fat AABBs. - */ - testOverlap(proxyIdA: number, proxyIdB: number): boolean; - /** - * Get the fat AABB for a proxy. - */ - getFatAABB(proxyId: number): AABB; - /** - * Get the number of proxies. - */ - getProxyCount(): number; - /** - * Get the height of the embedded tree. - */ - getTreeHeight(): number; - /** - * Get the balance (integer) of the embedded tree. - */ - getTreeBalance(): number; - /** - * Get the quality metric of the embedded tree. - */ - getTreeQuality(): number; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - query: (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback) => void; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs - * is called. - */ - createProxy(aabb: AABBValue, userData: FixtureProxy): number; - /** - * Destroy a proxy. It is up to the client to remove any pairs. - */ - destroyProxy(proxyId: number): void; - /** - * Call moveProxy as many times as you like, then when you are done call - * UpdatePairs to finalized the proxy pairs (for your time step). - */ - moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void; - /** - * Call to trigger a re-processing of it's pairs on the next call to - * UpdatePairs. - */ - touchProxy(proxyId: number): void; - bufferMove(proxyId: number): void; - unbufferMove(proxyId: number): void; - /** - * Update the pairs. This results in pair callbacks. This can only add pairs. - */ - updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void; - queryCallback: (proxyId: number) => boolean; - } - /** - * A fixture definition is used to create a fixture. This class defines an - * abstract fixture definition. You can reuse fixture definitions safely. - */ - interface FixtureOpt { - userData?: unknown; - /** - * The friction coefficient, usually in the range [0,1] - */ - friction?: number; - /** - * The restitution (elasticity) usually in the range [0,1] - */ - restitution?: number; - /** - * The density, usually in kg/m^2 - */ - density?: number; - /** - * A sensor shape collects contact information but never generates a collision response. - */ - isSensor?: boolean; - /** - * Zero, positive or negative collision group. - * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide. - */ - filterGroupIndex?: number; - /** - * Collision category bit or bits that this fixture belongs to. - * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa. - */ - filterCategoryBits?: number; - /** - * Collision category bit or bits that this fixture accept for collision. - */ - filterMaskBits?: number; - } - interface FixtureDef extends FixtureOpt { - shape: Shape; - } - /** - * This proxy is used internally to connect shape children to the broad-phase. - */ - class FixtureProxy { - aabb: AABB; - fixture: Fixture; - childIndex: number; - proxyId: number; - constructor(fixture: Fixture, childIndex: number); - } - /** - * A fixture is used to attach a shape to a body for collision detection. A - * fixture inherits its transform from its parent. Fixtures hold additional - * non-geometric data such as friction, collision filters, etc. - * - * To create a new Fixture use {@link Body.createFixture}. - */ - class Fixture { - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - constructor(body: Body, def: FixtureDef); - constructor(body: Body, shape: Shape, def?: FixtureOpt); - constructor(body: Body, shape: Shape, density?: number); - /** @hidden Re-setup fixture. */ - _reset(): void; - /** - * Get the type of the child shape. You can use this to down cast to the - * concrete shape. - */ - getType(): ShapeType; - /** - * Get the child shape. You can modify the child shape, however you should not - * change the number of vertices because this will crash some collision caching - * mechanisms. Manipulating the shape may lead to non-physical behavior. - */ - getShape(): Shape; - /** - * A sensor shape collects contact information but never generates a collision - * response. - */ - isSensor(): boolean; - /** - * Set if this fixture is a sensor. - */ - setSensor(sensor: boolean): void; - // /** - // * Get the contact filtering data. - // */ - // getFilterData() { - // return this.m_filter; - // } - /** - * Get the user data that was assigned in the fixture definition. Use this to - * store your application specific data. - */ - getUserData(): unknown; - /** - * Set the user data. Use this to store your application specific data. - */ - setUserData(data: unknown): void; - /** - * Get the parent body of this fixture. This is null if the fixture is not - * attached. - */ - getBody(): Body; - /** - * Get the next fixture in the parent body's fixture list. - */ - getNext(): Fixture | null; - /** - * Get the density of this fixture. - */ - getDensity(): number; - /** - * Set the density of this fixture. This will _not_ automatically adjust the - * mass of the body. You must call Body.resetMassData to update the body's mass. - */ - setDensity(density: number): void; - /** - * Get the coefficient of friction, usually in the range [0,1]. - */ - getFriction(): number; - /** - * Set the coefficient of friction. This will not change the friction of - * existing contacts. - */ - setFriction(friction: number): void; - /** - * Get the coefficient of restitution. - */ - getRestitution(): number; - /** - * Set the coefficient of restitution. This will not change the restitution of - * existing contacts. - */ - setRestitution(restitution: number): void; - /** - * Test a point in world coordinates for containment in this fixture. - */ - testPoint(p: Vec2Value): boolean; - /** - * Cast a ray against this shape. - */ - rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean; - /** - * Get the mass data for this fixture. The mass data is based on the density and - * the shape. The rotational inertia is about the shape's origin. This operation - * may be expensive. - */ - getMassData(massData: MassData): void; - /** - * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a - * more accurate AABB, compute it using the shape and the body transform. - */ - getAABB(childIndex: number): AABB; - /** - * These support body activation/deactivation. - */ - createProxies(broadPhase: BroadPhase, xf: TransformValue): void; - destroyProxies(broadPhase: BroadPhase): void; - /** - * Updates this fixture proxy in broad-phase (with combined AABB of current and - * next transformation). - */ - synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void; - /** - * Set the contact filtering data. This will not update contacts until the next - * time step when either parent body is active and awake. This automatically - * calls refilter. - */ - setFilterData(filter: { - groupIndex: number; - categoryBits: number; - maskBits: number; - }): void; - getFilterGroupIndex(): number; - setFilterGroupIndex(groupIndex: number): void; - getFilterCategoryBits(): number; - setFilterCategoryBits(categoryBits: number): void; - getFilterMaskBits(): number; - setFilterMaskBits(maskBits: number): void; - /** - * Call this if you want to establish collision that was previously disabled by - * ContactFilter. - */ - refilter(): void; - /** - * Implement this method to provide collision filtering, if you want finer - * control over contact creation. - * - * Return true if contact calculations should be performed between these two - * fixtures. - * - * Warning: for performance reasons this is only called when the AABBs begin to - * overlap. - */ - shouldCollide(that: Fixture): boolean; - } - enum ManifoldType { - e_unset = -1, - e_circles = 0, - e_faceA = 1, - e_faceB = 2 - } - enum ContactFeatureType { - e_unset = -1, - e_vertex = 0, - e_face = 1 - } - /** - * This is used for determining the state of contact points. - */ - enum PointState { - /** Point does not exist */ - nullState = 0, - /** Point was added in the update */ - addState = 1, - /** Point persisted across the update */ - persistState = 2, - /** Point was removed in the update */ - removeState = 3 - } - /** - * Used for computing contact manifolds. - */ - class ClipVertex { - v: Vec2Value; - id: ContactID; - set(o: ClipVertex): void; - recycle(): void; - } - /** - * A manifold for two touching convex shapes. Manifolds are created in `evaluate` - * method of Contact subclasses. - * - * Supported manifold types are e_faceA or e_faceB for clip point versus plane - * with radius and e_circles point versus point with radius. - * - * We store contacts in this way so that position correction can account for - * movement, which is critical for continuous physics. All contact scenarios - * must be expressed in one of these types. This structure is stored across time - * steps, so we keep it small. - */ - class Manifold { - type: ManifoldType; - /** - * Usage depends on manifold type: - * - circles: not used - * - faceA: the normal on polygonA - * - faceB: the normal on polygonB - */ - localNormal: Vec2Value; - /** - * Usage depends on manifold type: - * - circles: the local center of circleA - * - faceA: the center of faceA - * - faceB: the center of faceB - */ - localPoint: Vec2Value; - /** The points of contact */ - points: ManifoldPoint[]; - /** The number of manifold points */ - pointCount: number; - set(that: Manifold): void; - recycle(): void; - /** - * Evaluate the manifold with supplied transforms. This assumes modest motion - * from the original state. This does not change the point count, impulses, etc. - * The radii must come from the shapes that generated the manifold. - */ - getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold; - static clipSegmentToLine: typeof clipSegmentToLine; - static ClipVertex: typeof ClipVertex; - static getPointStates: typeof getPointStates; - static PointState: typeof PointState; - } - /** - * A manifold point is a contact point belonging to a contact manifold. It holds - * details related to the geometry and dynamics of the contact points. - * - * This structure is stored across time steps, so we keep it small. - * - * Note: impulses are used for internal caching and may not provide reliable - * contact forces, especially for high speed collisions. - */ - class ManifoldPoint { - /** - * Usage depends on manifold type: - * - circles: the local center of circleB - * - faceA: the local center of circleB or the clip point of polygonB - * - faceB: the clip point of polygonA - */ - localPoint: Vec2Value; - /** - * The non-penetration impulse - */ - normalImpulse: number; - /** - * The friction impulse - */ - tangentImpulse: number; - /** - * Uniquely identifies a contact point between two shapes to facilitate warm starting - */ - readonly id: ContactID; - set(that: ManifoldPoint): void; - recycle(): void; - } - /** - * Contact ids to facilitate warm starting. - * - * ContactFeature: The features that intersect to form the contact point. - */ - class ContactID { - /** - * Used to quickly compare contact ids. - */ - key: number; - /** ContactFeature index on shapeA */ - indexA: number; - /** ContactFeature index on shapeB */ - indexB: number; - /** ContactFeature type on shapeA */ - typeA: ContactFeatureType; - /** ContactFeature type on shapeB */ - typeB: ContactFeatureType; - setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void; - set(that: ContactID): void; - swapFeatures(): void; - recycle(): void; - } - /** - * This is used to compute the current state of a contact manifold. - */ - class WorldManifold { - /** World vector pointing from A to B */ - normal: Vec2Value; - /** World contact point (point of intersection) */ - points: Vec2Value[]; // [maxManifoldPoints] - /** A negative value indicates overlap, in meters */ - separations: number[]; // [maxManifoldPoints] - /** The number of manifold points */ - pointCount: number; - recycle(): void; - } - /** - * Compute the point states given two manifolds. The states pertain to the - * transition from manifold1 to manifold2. So state1 is either persist or remove - * while state2 is either add or persist. - */ - function getPointStates(state1: PointState[], state2: PointState[], manifold1: Manifold, manifold2: Manifold): void; - /** - * Clipping for contact manifolds. Sutherland-Hodgman clipping. - */ - function clipSegmentToLine(vOut: ClipVertex[], vIn: ClipVertex[], normal: Vec2Value, offset: number, vertexIndexA: number): number; - /** - * A contact edge is used to connect bodies and contacts together in a contact - * graph where each body is a node and each contact is an edge. A contact edge - * belongs to a doubly linked list maintained in each attached body. Each - * contact has two contact nodes, one for each attached body. - */ - class ContactEdge { - contact: Contact; - prev: ContactEdge | null; - next: ContactEdge | null; - other: Body | null; - constructor(contact: Contact); - } - type EvaluateFunction = (manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number) => void; - /** - * Friction mixing law. The idea is to allow either fixture to drive the - * friction to zero. For example, anything slides on ice. - */ - function mixFriction(friction1: number, friction2: number): number; - /** - * Restitution mixing law. The idea is allow for anything to bounce off an - * inelastic surface. For example, a superball bounces on anything. - */ - function mixRestitution(restitution1: number, restitution2: number): number; - // TODO: merge with ManifoldPoint? - class VelocityConstraintPoint { - rA: Vec2Value; - rB: Vec2Value; - normalImpulse: number; - tangentImpulse: number; - normalMass: number; - tangentMass: number; - velocityBias: number; - recycle(): void; - } - /** - * The class manages contact between two shapes. A contact exists for each - * overlapping AABB in the broad-phase (except if filtered). Therefore a contact - * object may exist that has no contact points. - */ - class Contact { - initConstraint(step: TimeStep): void; - /** - * Get the contact manifold. Do not modify the manifold unless you understand - * the internals of the library. - */ - getManifold(): Manifold; - /** - * Get the world manifold. - */ - getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined; - /** - * Enable/disable this contact. This can be used inside the pre-solve contact - * listener. The contact is only disabled for the current time step (or sub-step - * in continuous collisions). - */ - setEnabled(flag: boolean): void; - /** - * Has this contact been disabled? - */ - isEnabled(): boolean; - /** - * Is this contact touching? - */ - isTouching(): boolean; - /** - * Get the next contact in the world's contact list. - */ - getNext(): Contact | null; - /** - * Get fixture A in this contact. - */ - getFixtureA(): Fixture; - /** - * Get fixture B in this contact. - */ - getFixtureB(): Fixture; - /** - * Get the child primitive index for fixture A. - */ - getChildIndexA(): number; - /** - * Get the child primitive index for fixture B. - */ - getChildIndexB(): number; - /** - * Flag this contact for filtering. Filtering will occur the next time step. - */ - flagForFiltering(): void; - /** - * Override the default friction mixture. You can call this in - * "pre-solve" callback. This value persists until set or reset. - */ - setFriction(friction: number): void; - /** - * Get the friction. - */ - getFriction(): number; - /** - * Reset the friction mixture to the default value. - */ - resetFriction(): void; - /** - * Override the default restitution mixture. You can call this in - * "pre-solve" callback. The value persists until you set or reset. - */ - setRestitution(restitution: number): void; - /** - * Get the restitution. - */ - getRestitution(): number; - /** - * Reset the restitution to the default value. - */ - resetRestitution(): void; - /** - * Set the desired tangent speed for a conveyor belt behavior. In meters per - * second. - */ - setTangentSpeed(speed: number): void; - /** - * Get the desired tangent speed. In meters per second. - */ - getTangentSpeed(): number; - /** - * Called by Update method, and implemented by subclasses. - */ - evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void; - /** - * Updates the contact manifold and touching status. - * - * Note: do not assume the fixture AABBs are overlapping or are valid. - * - * @param listener.beginContact - * @param listener.endContact - * @param listener.preSolve - */ - update(listener?: { - beginContact(contact: Contact): void; - endContact(contact: Contact): void; - preSolve(contact: Contact, oldManifold: Manifold): void; - }): void; - solvePositionConstraint(step: TimeStep): number; - solvePositionConstraintTOI(step: TimeStep, toiA: Body, toiB: Body): number; - private _solvePositionConstraint; - initVelocityConstraint(step: TimeStep): void; - warmStartConstraint(step: TimeStep): void; - storeConstraintImpulses(step: TimeStep): void; - solveVelocityConstraint(step: TimeStep): void; - } - type BodyType = "static" | "kinematic" | "dynamic"; - interface BodyDef { - /** - * Body types are static, kinematic, or dynamic. Note: if a dynamic - * body would have zero mass, the mass is set to one. - */ - type?: BodyType; - /** - * The world position of the body. Avoid creating bodies at the - * origin since this can lead to many overlapping shapes. - */ - position?: Vec2Value; - /** - * The world angle of the body in radians. - */ - angle?: number; - /** - * The linear velocity of the body's origin in world co-ordinates. - */ - linearVelocity?: Vec2Value; - angularVelocity?: number; - /** - * Linear damping is use to reduce the linear velocity. The - * damping parameter can be larger than 1.0 but the damping effect becomes - * sensitive to the time step when the damping parameter is large. - * Units are 1/time - */ - linearDamping?: number; - /** - * Angular damping is use to reduce the angular velocity. - * The damping parameter can be larger than 1.0 but the damping effect - * becomes sensitive to the time step when the damping parameter is large. - * Units are 1/time - */ - angularDamping?: number; - /** - * Should this body be prevented from rotating? Useful for characters. - */ - fixedRotation?: boolean; - /** - * Is this a fast moving body that should be prevented from - * tunneling through other moving bodies? Note that all bodies are - * prevented from tunneling through kinematic and static bodies. This - * setting is only considered on dynamic bodies. Warning: You should use - * this flag sparingly since it increases processing time. - */ - bullet?: boolean; - gravityScale?: number; - /** - * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage. - */ - allowSleep?: boolean; - /** - * Is this body initially awake or sleeping? - */ - awake?: boolean; - /** - * Does this body start out active? - */ - active?: boolean; - userData?: any; - } - /** - * MassData This holds the mass data computed for a shape. - */ - interface MassData { - /** The mass of the shape, usually in kilograms. */ - mass: number; - /** The position of the shape's centroid relative to the shape's origin. */ - center: Vec2Value; - /** The rotational inertia of the shape about the local origin. */ - I: number; - } - /** - * A rigid body composed of one or more fixtures. - * - * To create a new Body use {@link World.createBody}. - */ - class Body { - /** - * A static body does not move under simulation and behaves as if it has infinite mass. - * Internally, zero is stored for the mass and the inverse mass. - * Static bodies can be moved manually by the user. - * A static body has zero velocity. - * Static bodies do not collide with other static or kinematic bodies. - */ - static readonly STATIC: BodyType; - /** - * A kinematic body moves under simulation according to its velocity. - * Kinematic bodies do not respond to forces. - * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity. - * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass. - * Kinematic bodies do not collide with other kinematic or static bodies. - */ - static readonly KINEMATIC: BodyType; - /** - * A dynamic body is fully simulated. - * They can be moved manually by the user, but normally they move according to forces. - * A dynamic body can collide with all body types. - * A dynamic body always has finite, non-zero mass. - * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate. - */ - static readonly DYNAMIC: BodyType; - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - isWorldLocked(): boolean; - getWorld(): World; - getNext(): Body | null; - setUserData(data: any): void; - getUserData(): unknown; - getFixtureList(): Fixture | null; - getJointList(): JointEdge | null; - /** - * Warning: this list changes during the time step and you may miss some - * collisions if you don't use ContactListener. - */ - getContactList(): ContactEdge | null; - isStatic(): boolean; - isDynamic(): boolean; - isKinematic(): boolean; - /** - * This will alter the mass and velocity. - */ - setStatic(): Body; - setDynamic(): Body; - setKinematic(): Body; - /** - * Get the type of the body. - */ - getType(): BodyType; - /** - * Set the type of the body to "static", "kinematic" or "dynamic". - * @param type The type of the body. - */ - setType(type: BodyType): void; - isBullet(): boolean; - /** - * Should this body be treated like a bullet for continuous collision detection? - */ - setBullet(flag: boolean): void; - isSleepingAllowed(): boolean; - setSleepingAllowed(flag: boolean): void; - isAwake(): boolean; - /** - * Set the sleep state of the body. A sleeping body has very low CPU cost. - * - * @param flag Set to true to wake the body, false to put it to sleep. - */ - setAwake(flag: boolean): void; - isActive(): boolean; - /** - * Set the active state of the body. An inactive body is not simulated and - * cannot be collided with or woken up. If you pass a flag of true, all fixtures - * will be added to the broad-phase. If you pass a flag of false, all fixtures - * will be removed from the broad-phase and all contacts will be destroyed. - * Fixtures and joints are otherwise unaffected. - * - * You may continue to create/destroy fixtures and joints on inactive bodies. - * Fixtures on an inactive body are implicitly inactive and will not participate - * in collisions, ray-casts, or queries. Joints connected to an inactive body - * are implicitly inactive. An inactive body is still owned by a World object - * and remains - */ - setActive(flag: boolean): void; - isFixedRotation(): boolean; - /** - * Set this body to have fixed rotation. This causes the mass to be reset. - */ - setFixedRotation(flag: boolean): void; - /** - * Get the world transform for the body's origin. - */ - getTransform(): Transform; - /** - * Set the position of the body's origin and rotation. Manipulating a body's - * transform may cause non-physical behavior. Note: contacts are updated on the - * next call to World.step. - * - * @param position The world position of the body's local origin. - * @param angle The world rotation in radians. - */ - setTransform(position: Vec2Value, angle: number): void; - synchronizeTransform(): void; - /** - * Update fixtures in broad-phase. - */ - synchronizeFixtures(): void; - /** - * Used in TOI. - */ - advance(alpha: number): void; - /** - * Get the world position for the body's origin. - */ - getPosition(): Vec2; - setPosition(p: Vec2Value): void; - /** - * Get the current world rotation angle in radians. - */ - getAngle(): number; - setAngle(angle: number): void; - /** - * Get the world position of the center of mass. - */ - getWorldCenter(): Vec2; - /** - * Get the local position of the center of mass. - */ - getLocalCenter(): Vec2; - /** - * Get the linear velocity of the center of mass. - * - * @return the linear velocity of the center of mass. - */ - getLinearVelocity(): Vec2; - /** - * Get the world linear velocity of a world point attached to this body. - * - * @param worldPoint A point in world coordinates. - */ - getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2; - /** - * Get the world velocity of a local point. - * - * @param localPoint A point in local coordinates. - */ - getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2; - /** - * Set the linear velocity of the center of mass. - * - * @param v The new linear velocity of the center of mass. - */ - setLinearVelocity(v: Vec2Value): void; - /** - * Get the angular velocity. - * - * @returns the angular velocity in radians/second. - */ - getAngularVelocity(): number; - /** - * Set the angular velocity. - * - * @param omega The new angular velocity in radians/second. - */ - setAngularVelocity(w: number): void; - getLinearDamping(): number; - setLinearDamping(linearDamping: number): void; - getAngularDamping(): number; - setAngularDamping(angularDamping: number): void; - getGravityScale(): number; - /** - * Scale the gravity applied to this body. - */ - setGravityScale(scale: number): void; - /** - * Get the total mass of the body. - * - * @returns The mass, usually in kilograms (kg). - */ - getMass(): number; - /** - * Get the rotational inertia of the body about the local origin. - * - * @return the rotational inertia, usually in kg-m^2. - */ - getInertia(): number; - /** - * Copy the mass data of the body to data. - */ - getMassData(data: MassData): void; - /** - * This resets the mass properties to the sum of the mass properties of the - * fixtures. This normally does not need to be called unless you called - * SetMassData to override the mass and you later want to reset the mass. - */ - resetMassData(): void; - /** - * Set the mass properties to override the mass properties of the fixtures. Note - * that this changes the center of mass position. Note that creating or - * destroying fixtures can also alter the mass. This function has no effect if - * the body isn't dynamic. - * - * @param massData The mass properties. - */ - setMassData(massData: MassData): void; - /** - * Apply a force at a world point. If the force is not applied at the center of - * mass, it will generate a torque and affect the angular velocity. This wakes - * up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - applyForce(force: Vec2Value, point: Vec2Value, wake?: boolean): void; - /** - * Apply a force to the center of mass. This wakes up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param wake Also wake up the body - */ - applyForceToCenter(force: Vec2Value, wake?: boolean): void; - /** - * Apply a torque. This affects the angular velocity without affecting the - * linear velocity of the center of mass. This wakes up the body. - * - * @param torque About the z-axis (out of the screen), usually in N-m. - * @param wake Also wake up the body - */ - applyTorque(torque: number, wake?: boolean): void; - /** - * Apply an impulse at a point. This immediately modifies the velocity. It also - * modifies the angular velocity if the point of application is not at the - * center of mass. This wakes up the body. - * - * @param impulse The world impulse vector, usually in N-seconds or kg-m/s. - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake?: boolean): void; - /** - * Apply an angular impulse. - * - * @param impulse The angular impulse in units of kg*m*m/s - * @param wake Also wake up the body - */ - applyAngularImpulse(impulse: number, wake?: boolean): void; - /** - * This is used to test if two bodies should collide. - * - * Bodies do not collide when: - * - Neither of them is dynamic - * - They are connected by a joint with collideConnected == false - */ - shouldCollide(that: Body): boolean; - /** - * Creates a fixture and attach it to this body. - * - * If the density is non-zero, this function automatically updates the mass of - * the body. - * - * Contacts are not created until the next time step. - * - * Warning: This function is locked during callbacks. - */ - createFixture(def: FixtureDef): Fixture; - createFixture(shape: Shape, opt?: FixtureOpt): Fixture; - createFixture(shape: Shape, density?: number): Fixture; - /** - * Destroy a fixture. This removes the fixture from the broad-phase and destroys - * all contacts associated with this fixture. This will automatically adjust the - * mass of the body if the body is dynamic and the fixture has positive density. - * All fixtures attached to a body are implicitly destroyed when the body is - * destroyed. - * - * Warning: This function is locked during callbacks. - * - * @param fixture The fixture to be removed. - */ - destroyFixture(fixture: Fixture): void; - /** - * Get the corresponding world point of a local point. - */ - getWorldPoint(localPoint: Vec2Value): Vec2; - /** - * Get the corresponding world vector of a local vector. - */ - getWorldVector(localVector: Vec2Value): Vec2; - /** - * Gets the corresponding local point of a world point. - */ - getLocalPoint(worldPoint: Vec2Value): Vec2; - /** - * Gets the corresponding local vector of a world vector. - */ - getLocalVector(worldVector: Vec2Value): Vec2; - } - class TimeStep { - /** time step */ - dt: number; - /** inverse time step (0 if dt == 0) */ - inv_dt: number; - velocityIterations: number; - positionIterations: number; - warmStarting: boolean; - blockSolve: boolean; - /** timestep ratio for variable timestep */ - inv_dt0: number; - /** dt * inv_dt0 */ - dtRatio: number; - reset(dt: number): void; - } - /** - * Contact impulses for reporting. Impulses are used instead of forces because - * sub-step forces may approach infinity for rigid body collisions. These match - * up one-to-one with the contact points in Manifold. - */ - class ContactImpulse { - // TODO: merge with Contact class? - private readonly contact; - private readonly normals; - private readonly tangents; - constructor(contact: Contact); - recycle(): void; - get normalImpulses(): number[]; - get tangentImpulses(): number[]; - } - /** - * Finds and solves islands. An island is a connected subset of the world. - */ - class Solver { - m_world: World; - m_stack: Body[]; - m_bodies: Body[]; - m_contacts: Contact[]; - m_joints: Joint[]; - constructor(world: World); - clear(): void; - addBody(body: Body): void; - addContact(contact: Contact): void; - addJoint(joint: Joint): void; - solveWorld(step: TimeStep): void; - solveIsland(step: TimeStep): void; - /** - * Find TOI contacts and solve them. - */ - solveWorldTOI(step: TimeStep): void; - solveIslandTOI(subStep: TimeStep, toiA: Body, toiB: Body): void; - } - interface WorldDef { - /** [default: { x : 0, y : 0}] */ - gravity?: Vec2Value; - /** [default: true] */ - allowSleep?: boolean; - /** [default: true] */ - warmStarting?: boolean; - /** [default: true] */ - continuousPhysics?: boolean; - /** [default: false] */ - subStepping?: boolean; - /** [default: true] */ - blockSolve?: boolean; - } - /** - * Callback function for ray casts, see {@link World.rayCast}. - * - * Called for each fixture found in the query. - * The returned value replaces the ray-cast input maxFraction. - * You control how the ray cast proceeds by returning a numeric/float value. - * - * - `0` to terminate the ray cast - * - `fraction` to clip the ray cast at current point - * - `1` don't clip the ray and continue - * - `-1` (or anything else) to continue - * - * @param fixture The fixture hit by the ray - * @param point The point of initial intersection - * @param normal The normal vector at the point of intersection - * @param fraction The fraction along the ray at the point of intersection - * - * @returns A number to update the maxFraction - */ - type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number; - /** - * Called for each fixture found in the query AABB. It may return `false` to terminate the query. - */ - type WorldAABBQueryCallback = (fixture: Fixture) => boolean; - class World { - /** - * @param def World definition or gravity vector. - */ - constructor(def?: WorldDef | Vec2 | null); - /** - * Get the world body list. With the returned body, use Body.getNext to get the - * next body in the world list. A null body indicates the end of the list. - * - * @return the head of the world body list. - */ - getBodyList(): Body | null; - /** - * Get the world joint list. With the returned joint, use Joint.getNext to get - * the next joint in the world list. A null joint indicates the end of the list. - * - * @return the head of the world joint list. - */ - getJointList(): Joint | null; - /** - * Get the world contact list. With the returned contact, use Contact.getNext to - * get the next contact in the world list. A null contact indicates the end of - * the list. - * - * Warning: contacts are created and destroyed in the middle of a time step. - * Use ContactListener to avoid missing contacts. - * - * @return the head of the world contact list. - */ - getContactList(): Contact | null; - getBodyCount(): number; - getJointCount(): number; - /** - * Get the number of contacts (each may have 0 or more contact points). - */ - getContactCount(): number; - /** - * Change the global gravity vector. - */ - setGravity(gravity: Vec2Value): void; - /** - * Get the global gravity vector. - */ - getGravity(): Vec2; - /** - * Is the world locked (in the middle of a time step). - */ - isLocked(): boolean; - /** - * Enable/disable sleep. - */ - setAllowSleeping(flag: boolean): void; - getAllowSleeping(): boolean; - /** - * Enable/disable warm starting. For testing. - */ - setWarmStarting(flag: boolean): void; - getWarmStarting(): boolean; - /** - * Enable/disable continuous physics. For testing. - */ - setContinuousPhysics(flag: boolean): void; - getContinuousPhysics(): boolean; - /** - * Enable/disable single stepped continuous physics. For testing. - */ - setSubStepping(flag: boolean): void; - getSubStepping(): boolean; - /** - * Set flag to control automatic clearing of forces after each time step. - */ - setAutoClearForces(flag: boolean): void; - /** - * Get the flag that controls automatic clearing of forces after each time step. - */ - getAutoClearForces(): boolean; - /** - * Manually clear the force buffer on all bodies. By default, forces are cleared - * automatically after each call to step. The default behavior is modified by - * calling setAutoClearForces. The purpose of this function is to support - * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step - * under a variable frame-rate. When you perform sub-stepping you will disable - * auto clearing of forces and instead call clearForces after all sub-steps are - * complete in one pass of your game loop. - * - * See {@link World.setAutoClearForces} - */ - clearForces(): void; - /** - * Query the world for all fixtures that potentially overlap the provided AABB. - * - * @param aabb The query box. - * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query. - */ - queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void; - /** - * Ray-cast the world for all fixtures in the path of the ray. Your callback - * controls whether you get the closest point, any point, or n-points. The - * ray-cast ignores shapes that contain the starting point. - * - * @param point1 The ray starting point - * @param point2 The ray ending point - * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value. - */ - rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void; - /** - * Get the number of broad-phase proxies. - */ - getProxyCount(): number; - /** - * Get the height of broad-phase dynamic tree. - */ - getTreeHeight(): number; - /** - * Get the balance of broad-phase dynamic tree. - */ - getTreeBalance(): number; - /** - * Get the quality metric of broad-phase dynamic tree. The smaller the better. - * The minimum is 1. - */ - getTreeQuality(): number; - /** - * Shift the world origin. Useful for large worlds. The body shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Create a rigid body given a definition. No reference to the definition is - * retained. - * - * Warning: This function is locked during callbacks. - */ - createBody(def?: BodyDef): Body; - createBody(position: Vec2Value, angle?: number): Body; - createDynamicBody(def?: BodyDef): Body; - createDynamicBody(position: Vec2Value, angle?: number): Body; - createKinematicBody(def?: BodyDef): Body; - createKinematicBody(position: Vec2Value, angle?: number): Body; - /** - * Destroy a rigid body given a definition. No reference to the definition is - * retained. - * - * Warning: This automatically deletes all associated shapes and joints. - * - * Warning: This function is locked during callbacks. - */ - destroyBody(b: Body): boolean; - /** - * Create a joint to constrain bodies together. No reference to the definition - * is retained. This may cause the connected bodies to cease colliding. - * - * Warning: This function is locked during callbacks. - */ - createJoint(joint: T): T | null; - /** - * Destroy a joint. This may cause the connected bodies to begin colliding. - * Warning: This function is locked during callbacks. - */ - destroyJoint(joint: Joint): void; - /** - * Take a time step. This performs collision detection, integration, and - * constraint solution. - * - * Broad-phase, narrow-phase, solve and solve time of impacts. - * - * @param timeStep Time step, this should not vary. - */ - step(timeStep: number, velocityIterations?: number, positionIterations?: number): void; - /** - * Called when two fixtures begin to touch. - * - * Implement contact callbacks to get contact information. You can use these - * results for things like sounds and game logic. You can also get contact - * results by traversing the contact lists after the time step. However, you - * might miss some contacts because continuous physics leads to sub-stepping. - * Additionally you may receive multiple callbacks for the same contact in a - * single time step. You should strive to make your callbacks efficient because - * there may be many callbacks per time step. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "begin-contact", listener: (contact: Contact) => void): World; - /** - * Called when two fixtures cease to touch. - * - * Implement contact callbacks to get contact information. You can use these - * results for things like sounds and game logic. You can also get contact - * results by traversing the contact lists after the time step. However, you - * might miss some contacts because continuous physics leads to sub-stepping. - * Additionally you may receive multiple callbacks for the same contact in a - * single time step. You should strive to make your callbacks efficient because - * there may be many callbacks per time step. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "end-contact", listener: (contact: Contact) => void): World; - /** - * This is called after a contact is updated. This allows you to inspect a - * contact before it goes to the solver. If you are careful, you can modify the - * contact manifold (e.g. disable contact). A copy of the old manifold is - * provided so that you can detect changes. Note: this is called only for awake - * bodies. Note: this is called even when the number of contact points is zero. - * Note: this is not called for sensors. Note: if you set the number of contact - * points to zero, you will not get an end-contact callback. However, you may get - * a begin-contact callback the next step. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "pre-solve", listener: (contact: Contact, oldManifold: Manifold) => void): World; - /** - * This lets you inspect a contact after the solver is finished. This is useful - * for inspecting impulses. Note: the contact manifold does not include time of - * impact impulses, which can be arbitrarily large if the sub-step is small. - * Hence the impulse is provided explicitly in a separate data structure. Note: - * this is only called for contacts that are touching, solid, and awake. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "post-solve", listener: (contact: Contact, impulse: ContactImpulse) => void): World; - /** Listener is called whenever a body is removed. */ - on(name: "remove-body", listener: (body: Body) => void): World; - /** Listener is called whenever a joint is removed implicitly or explicitly. */ - on(name: "remove-joint", listener: (joint: Joint) => void): World; - /** Listener is called whenever a fixture is removed implicitly or explicitly. */ - on(name: "remove-fixture", listener: (fixture: Fixture) => void): World; - off(name: "begin-contact", listener: (contact: Contact) => void): World; - off(name: "end-contact", listener: (contact: Contact) => void): World; - off(name: "pre-solve", listener: (contact: Contact, oldManifold: Manifold) => void): World; - off(name: "post-solve", listener: (contact: Contact, impulse: ContactImpulse) => void): World; - off(name: "remove-body", listener: (body: Body) => void): World; - off(name: "remove-joint", listener: (joint: Joint) => void): World; - off(name: "remove-fixture", listener: (fixture: Fixture) => void): World; - publish(name: string, arg1?: any, arg2?: any, arg3?: any): number; - } - // dummy types - type DataType = any; - type ObjectType = any; - type ClassName = any; - type SerializedType = object[]; - type SerializerOptions = { - rootClass: ClassName; - preSerialize?: (obj: ObjectType) => DataType; - postSerialize?: (data: DataType, obj: any) => DataType; - preDeserialize?: (data: DataType) => DataType; - postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType; - }; - class Serializer { - private options; - constructor(options: SerializerOptions); - toJson: (root: T) => SerializedType; - fromJson: (json: SerializedType) => T; - static toJson: (root: World) => SerializedType; - static fromJson: (json: SerializedType) => World; - } - const EPSILON = 1e-9; - /** - * @deprecated - * Next Largest Power of 2 Given a binary integer value x, the next largest - * power of 2 can be computed by a SWAR algorithm that recursively "folds" the - * upper bits into the lower bits. This process yields a bit vector with the - * same most significant 1 as x, but all 1's below it. Adding 1 to that value - * yields the next largest power of 2. For a 32-bit value: - */ - function nextPowerOfTwo(x: number): number; - /** @deprecated */ - function isPowerOfTwo(x: number): boolean; - /** @deprecated */ - function mod(num: number, min?: number, max?: number): number; - /** - * @deprecated - * Returns a min if num is less than min, and max if more than max, otherwise returns num. - */ - function clamp(num: number, min: number, max: number): number; - /** - * @deprecated - * Returns a random number between min and max when two arguments are provided. - * If one arg is provided between 0 to max. - * If one arg is passed between 0 to 1. - */ - function random(min?: number, max?: number): number; - /** @ignore */ - const math: any; - interface Vec3Value { - x: number; - y: number; - z: number; - } - class Vec3 { - x: number; - y: number; - z: number; - constructor(x: number, y: number, z: number); - constructor(obj: { - x: number; - y: number; - z: number; - }); - constructor(); - /** @hidden */ - static neo(x: number, y: number, z: number): Vec3; - static zero(): Vec3; - static clone(v: Vec3Value): Vec3; - /** @hidden */ - toString(): string; - /** Does this vector contain finite coordinates? */ - static isValid(obj: any): boolean; - static assert(o: any): void; - setZero(): Vec3; - set(x: number, y: number, z: number): Vec3; - add(w: Vec3Value): Vec3; - sub(w: Vec3Value): Vec3; - mul(m: number): Vec3; - static areEqual(v: Vec3Value, w: Vec3Value): boolean; - /** Dot product on two vectors */ - static dot(v: Vec3Value, w: Vec3Value): number; - /** Cross product on two vectors */ - static cross(v: Vec3Value, w: Vec3Value): Vec3; - static add(v: Vec3Value, w: Vec3Value): Vec3; - static sub(v: Vec3Value, w: Vec3Value): Vec3; - static mul(v: Vec3Value, m: number): Vec3; - neg(): Vec3; - static neg(v: Vec3Value): Vec3; - } - /** - * A 2-by-2 matrix. Stored in column-major order. - */ - class Mat22 { - ex: Vec2; - ey: Vec2; - constructor(a: number, b: number, c: number, d: number); - constructor(a: { - x: number; - y: number; - }, b: { - x: number; - y: number; - }); - constructor(); - /** @hidden */ - toString(): string; - static isValid(obj: any): boolean; - static assert(o: any): void; - set(a: Mat22): void; - set(a: Vec2Value, b: Vec2Value): void; - set(a: number, b: number, c: number, d: number): void; - setIdentity(): void; - setZero(): void; - getInverse(): Mat22; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - solve(v: Vec2Value): Vec2; - /** - * Multiply a matrix times a vector. If a rotation matrix is provided, then this - * transforms the vector from one frame to another. - */ - static mul(mx: Mat22, my: Mat22): Mat22; - static mul(mx: Mat22, v: Vec2Value): Vec2; - static mulVec2(mx: Mat22, v: Vec2Value): Vec2; - static mulMat22(mx: Mat22, v: Mat22): Mat22; - /** - * Multiply a matrix transpose times a vector. If a rotation matrix is provided, - * then this transforms the vector from one frame to another (inverse - * transform). - */ - static mulT(mx: Mat22, my: Mat22): Mat22; - static mulT(mx: Mat22, v: Vec2Value): Vec2; - static mulTVec2(mx: Mat22, v: Vec2Value): Vec2; - static mulTMat22(mx: Mat22, v: Mat22): Mat22; - static abs(mx: Mat22): Mat22; - static add(mx1: Mat22, mx2: Mat22): Mat22; - } - /** - * A 3-by-3 matrix. Stored in column-major order. - */ - class Mat33 { - ex: Vec3; - ey: Vec3; - ez: Vec3; - constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value); - constructor(); - /** @hidden */ - toString(): string; - static isValid(obj: any): boolean; - static assert(o: any): void; - /** - * Set this matrix to all zeros. - */ - setZero(): Mat33; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - solve33(v: Vec3Value): Vec3; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix - * equation. - */ - solve22(v: Vec2Value): Vec2; - /** - * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if - * singular. - */ - getInverse22(M: Mat33): void; - /** - * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix - * if singular. - */ - getSymInverse33(M: Mat33): void; - /** - * Multiply a matrix times a vector. - */ - static mul(a: Mat33, b: Vec2Value): Vec2; - static mul(a: Mat33, b: Vec3Value): Vec3; - static mulVec3(a: Mat33, b: Vec3Value): Vec3; - static mulVec2(a: Mat33, b: Vec2Value): Vec2; - static add(a: Mat33, b: Mat33): Mat33; - } - class CircleShape extends Shape { - static TYPE: "circle"; - /** @hidden */ m_type: "circle"; - /** @hidden */ m_p: Vec2; - /** @hidden */ m_radius: number; - constructor(position: Vec2Value, radius?: number); - constructor(radius?: number); - /** @hidden */ - _reset(): void; - getType(): "circle"; - getRadius(): number; - getCenter(): Vec2; - /** - * Get the number of child primitives. - */ - getChildCount(): 1; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): boolean; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density: number): void; - computeDistanceProxy(proxy: DistanceProxy): void; - } - const Circle: typeof CircleShape; - /** - * A line segment (edge) shape. These can be connected in chains or loops to - * other edge shapes. The connectivity information is used to ensure correct - * contact normals. - */ - class EdgeShape extends Shape { - static TYPE: "edge"; - /** @hidden */ m_type: "edge"; - /** @hidden */ m_radius: number; - // These are the edge vertices - /** @hidden */ m_vertex1: Vec2; - /** @hidden */ m_vertex2: Vec2; - // Optional adjacent vertices. These are used for smooth collision. - // Used by chain shape. - /** @hidden */ m_vertex0: Vec2; - /** @hidden */ m_vertex3: Vec2; - /** @hidden */ m_hasVertex0: boolean; - /** @hidden */ m_hasVertex3: boolean; - constructor(v1?: Vec2Value, v2?: Vec2Value); - /** @hidden */ - _reset(): void; - getRadius(): number; - getType(): "edge"; - /** - * Optional next vertex, used for smooth collision. - */ - setNextVertex(v?: Vec2Value): EdgeShape; - /** - * Optional next vertex, used for smooth collision. - */ - getNextVertex(): Vec2; - /** - * Optional prev vertex, used for smooth collision. - */ - setPrevVertex(v?: Vec2Value): EdgeShape; - /** - * Optional prev vertex, used for smooth collision. - */ - getPrevVertex(): Vec2; - /** - * Set this as an isolated edge. - */ - _set(v1: Vec2Value, v2: Vec2Value): EdgeShape; - /** - * Get the number of child primitives. - */ - getChildCount(): 1; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): false; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density?: number): void; - computeDistanceProxy(proxy: DistanceProxy): void; - } - const Edge: typeof EdgeShape; - /** - * A convex polygon. It is assumed that the interior of the polygon is to the - * left of each edge. Polygons have a maximum number of vertices equal to - * Settings.maxPolygonVertices. In most cases you should not need many vertices - * for a convex polygon. extends Shape - */ - class PolygonShape extends Shape { - static TYPE: "polygon"; - /** @hidden */ m_type: "polygon"; - /** @hidden */ m_centroid: Vec2; - /** @hidden */ m_vertices: Vec2[]; // [Settings.maxPolygonVertices] - /** @hidden */ m_normals: Vec2[]; // [Settings.maxPolygonVertices] - /** @hidden */ m_count: number; - /** @hidden */ m_radius: number; - constructor(vertices?: Vec2Value[]); - getType(): "polygon"; - getRadius(): number; - /** - * Get the number of child primitives. - */ - getChildCount(): 1; - /** @hidden */ - _reset(): void; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): boolean; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density: number): void; - /** - * Validate convexity. This is a very time consuming operation. - * @returns true if valid - */ - validate(): boolean; - computeDistanceProxy(proxy: DistanceProxy): void; - } - const Polygon: typeof PolygonShape; - /** - * A chain shape is a free form sequence of line segments. The chain has - * two-sided collision, so you can use inside and outside collision. Therefore, - * you may use any winding order. Connectivity information is used to create - * smooth collisions. - * - * WARNING: The chain will not collide properly if there are self-intersections. - */ - class ChainShape extends Shape { - static TYPE: "chain"; - /** @hidden */ m_type: "chain"; - /** @hidden */ m_radius: number; - /** @hidden */ m_vertices: Vec2[]; - /** @hidden */ m_count: number; - /** @hidden */ m_prevVertex: Vec2 | null; - /** @hidden */ m_nextVertex: Vec2 | null; - /** @hidden */ m_hasPrevVertex: boolean; - /** @hidden */ m_hasNextVertex: boolean; - /** @hidden */ m_isLoop: boolean; - constructor(vertices?: Vec2Value[], loop?: boolean); - // clear() { - // this.m_vertices.length = 0; - // this.m_count = 0; - // } - getType(): "chain"; - getRadius(): number; - /** @hidden */ - _reset(): void; - /** - * Establish connectivity to a vertex that precedes the first vertex. Don't call - * this for loops. - */ - setPrevVertex(prevVertex: Vec2): void; - getPrevVertex(): Vec2; - /** - * Establish connectivity to a vertex that follows the last vertex. Don't call - * this for loops. - */ - setNextVertex(nextVertex: Vec2): void; - getNextVertex(): Vec2; - /** - * Get the number of child primitives. - */ - getChildCount(): number; - // Get a child edge. - getChildEdge(edge: EdgeShape, childIndex: number): void; - getVertex(index: number): Vec2; - isLoop(): boolean; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * This always return false. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): false; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * Chains have zero mass. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density?: number): void; - computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void; - } - const Chain: typeof ChainShape; - /** - * A rectangle polygon which extend PolygonShape. - */ - class BoxShape extends PolygonShape { - // note that box is serialized/deserialized as polygon - static TYPE: "polygon"; - /** - * - * @param halfWidth - * @param halfHeight - * @param center coordinate of the center of the box relative to the body - * @param angle angle of the box relative to the body - */ - constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number); - } - const Box: typeof BoxShape; - const CollideCircles: (manifold: Manifold, circleA: CircleShape, xfA: Transform, circleB: CircleShape, xfB: Transform) => void; - // Compute contact points for edge versus circle. - // This accounts for edge connectivity. - const CollideEdgeCircle: (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue) => void; - /** - * - * Find edge normal of max separation on A - return if separating axis is found
- * Find edge normal of max separation on B - return if separation axis is found
- * Choose reference edge as min(minA, minB)
- * Find incident edge
- * Clip - * - * The normal points from 1 to 2 - */ - const CollidePolygons: (manifold: Manifold, polyA: PolygonShape, xfA: TransformValue, polyB: PolygonShape, xfB: TransformValue) => void; - const CollidePolygonCircle: (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue) => void; - /** - * This function collides and edge and a polygon, taking into account edge - * adjacency. - */ - const CollideEdgePolygon: (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue) => void; - /** - * Distance joint definition. This requires defining an anchor point on both - * bodies and the non-zero length of the distance joint. The definition uses - * local anchor points so that the initial configuration can violate the - * constraint slightly. This helps when saving and loading a game. Warning: Do - * not use a zero or short length. - */ - interface DistanceJointOpt extends JointOpt { - /** - * The mass-spring-damper frequency in Hertz. A value of 0 disables softness. - */ - frequencyHz?: number; - /** - * The damping ratio. 0 = no damping, 1 = critical damping. - */ - dampingRatio?: number; - /** - * Distance length. - */ - length?: number; - } - /** - * Distance joint definition. This requires defining an anchor point on both - * bodies and the non-zero length of the distance joint. The definition uses - * local anchor points so that the initial configuration can violate the - * constraint slightly. This helps when saving and loading a game. Warning: Do - * not use a zero or short length. - */ - interface DistanceJointDef extends JointDef, DistanceJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - } - /** - * A distance joint constrains two points on two bodies to remain at a fixed - * distance from each other. You can view this as a massless, rigid rod. - */ - class DistanceJoint extends Joint { - static TYPE: "distance-joint"; - /** - * @param def DistanceJoint definition. - */ - constructor(def: DistanceJointDef); - /** - * @param anchorA Anchor A in global coordination. - * @param anchorB Anchor B in global coordination. - */ - constructor(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Set the natural length. Manipulating the length can lead to non-physical - * behavior when the frequency is zero. - */ - setLength(length: number): void; - /** - * Get the natural length. - */ - getLength(): number; - setFrequency(hz: number): void; - getFrequency(): number; - setDampingRatio(ratio: number): void; - getDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Friction joint definition. - */ - interface FrictionJointOpt extends JointOpt { - /** - * The maximum friction force in N. - */ - maxForce?: number; - /** - * The maximum friction torque in N-m. - */ - maxTorque?: number; - } - /** - * Friction joint definition. - */ - interface FrictionJointDef extends JointDef, FrictionJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - } - /** - * Friction joint. This is used for top-down friction. It provides 2D - * translational friction and angular friction. - */ - class FrictionJoint extends Joint { - static TYPE: "friction-joint"; - constructor(def: FrictionJointDef); - /** - * @param anchor Anchor in global coordination. - */ - constructor(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Set the maximum friction force in N. - */ - setMaxForce(force: number): void; - /** - * Get the maximum friction force in N. - */ - getMaxForce(): number; - /** - * Set the maximum friction torque in N*m. - */ - setMaxTorque(torque: number): void; - /** - * Get the maximum friction torque in N*m. - */ - getMaxTorque(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Revolute joint definition. This requires defining an anchor point where the - * bodies are joined. The definition uses local anchor points so that the - * initial configuration can violate the constraint slightly. You also need to - * specify the initial relative angle for joint limits. This helps when saving - * and loading a game. - * - * The local anchor points are measured from the body's origin rather than the - * center of mass because: 1. you might not know where the center of mass will - * be. 2. if you add/remove shapes from a body and recompute the mass, the - * joints will be broken. - */ - interface RevoluteJointOpt extends JointOpt { - /** - * The lower angle for the joint limit (radians). - */ - lowerAngle?: number; - /** - * The upper angle for the joint limit (radians). - */ - upperAngle?: number; - /** - * The maximum motor torque used to achieve the desired motor speed. Usually - * in N-m. - */ - maxMotorTorque?: number; - /** - * The desired motor speed. Usually in radians per second. - */ - motorSpeed?: number; - /** - * A flag to enable joint limits. - */ - enableLimit?: boolean; - /** - * A flag to enable the joint motor. - */ - enableMotor?: boolean; - } - /** - * Revolute joint definition. This requires defining an anchor point where the - * bodies are joined. The definition uses local anchor points so that the - * initial configuration can violate the constraint slightly. You also need to - * specify the initial relative angle for joint limits. This helps when saving - * and loading a game. - * - * The local anchor points are measured from the body's origin rather than the - * center of mass because: 1. you might not know where the center of mass will - * be. 2. if you add/remove shapes from a body and recompute the mass, the - * joints will be broken. - */ - interface RevoluteJointDef extends JointDef, RevoluteJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The bodyB angle minus bodyA angle in the reference state (radians). - */ - referenceAngle: number; - } - /** - * A revolute joint constrains two bodies to share a common point while they are - * free to rotate about the point. The relative rotation about the shared point - * is the joint angle. You can limit the relative rotation with a joint limit - * that specifies a lower and upper angle. You can use a motor to drive the - * relative rotation about the shared point. A maximum motor torque is provided - * so that infinite forces are not generated. - */ - class RevoluteJoint extends Joint { - static TYPE: "revolute-joint"; - constructor(def: RevoluteJointDef); - constructor(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Get the reference angle. - */ - getReferenceAngle(): number; - /** - * Get the current joint angle in radians. - */ - getJointAngle(): number; - /** - * Get the current joint angle speed in radians per second. - */ - getJointSpeed(): number; - /** - * Is the joint motor enabled? - */ - isMotorEnabled(): boolean; - /** - * Enable/disable the joint motor. - */ - enableMotor(flag: boolean): void; - /** - * Get the current motor torque given the inverse time step. Unit is N*m. - */ - getMotorTorque(inv_dt: number): number; - /** - * Set the motor speed in radians per second. - */ - setMotorSpeed(speed: number): void; - /** - * Get the motor speed in radians per second. - */ - getMotorSpeed(): number; - /** - * Set the maximum motor torque, usually in N-m. - */ - setMaxMotorTorque(torque: number): void; - getMaxMotorTorque(): number; - /** - * Is the joint limit enabled? - */ - isLimitEnabled(): boolean; - /** - * Enable/disable the joint limit. - */ - enableLimit(flag: boolean): void; - /** - * Get the lower joint limit in radians. - */ - getLowerLimit(): number; - /** - * Get the upper joint limit in radians. - */ - getUpperLimit(): number; - /** - * Set the joint limits in radians. - */ - setLimits(lower: number, upper: number): void; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force given the inverse time step. Unit is N. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque due to the joint limit given the inverse time step. - * Unit is N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Prismatic joint definition. This requires defining a line of motion using an - * axis and an anchor point. The definition uses local anchor points and a local - * axis so that the initial configuration can violate the constraint slightly. - * The joint translation is zero when the local anchor points coincide in world - * space. Using local anchors and a local axis helps when saving and loading a - * game. - */ - interface PrismaticJointOpt extends JointOpt { - /** - * Enable/disable the joint limit. - */ - enableLimit?: boolean; - /** - * The lower translation limit, usually in meters. - */ - lowerTranslation?: number; - /** - * The upper translation limit, usually in meters. - */ - upperTranslation?: number; - /** - * Enable/disable the joint motor. - */ - enableMotor?: boolean; - /** - * The maximum motor torque, usually in N-m. - */ - maxMotorForce?: number; - /** - * The desired motor speed in radians per second. - */ - motorSpeed?: number; - } - /** - * Prismatic joint definition. This requires defining a line of motion using an - * axis and an anchor point. The definition uses local anchor points and a local - * axis so that the initial configuration can violate the constraint slightly. - * The joint translation is zero when the local anchor points coincide in world - * space. Using local anchors and a local axis helps when saving and loading a - * game. - */ - interface PrismaticJointDef extends JointDef, PrismaticJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The local translation unit axis in bodyA. - */ - localAxisA: Vec2Value; - /** - * referenceAngle The constrained angle between the bodies: - * bodyB_angle - bodyA_angle. - */ - referenceAngle: number; - } - /** - * A prismatic joint. This joint provides one degree of freedom: translation - * along an axis fixed in bodyA. Relative rotation is prevented. You can use a - * joint limit to restrict the range of motion and a joint motor to drive the - * motion or to model joint friction. - */ - class PrismaticJoint extends Joint { - static TYPE: "prismatic-joint"; - constructor(def: PrismaticJointDef); - constructor(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * The local joint axis relative to bodyA. - */ - getLocalAxisA(): Vec2; - /** - * Get the reference angle. - */ - getReferenceAngle(): number; - /** - * Get the current joint translation, usually in meters. - */ - getJointTranslation(): number; - /** - * Get the current joint translation speed, usually in meters per second. - */ - getJointSpeed(): number; - /** - * Is the joint limit enabled? - */ - isLimitEnabled(): boolean; - /** - * Enable/disable the joint limit. - */ - enableLimit(flag: boolean): void; - /** - * Get the lower joint limit, usually in meters. - */ - getLowerLimit(): number; - /** - * Get the upper joint limit, usually in meters. - */ - getUpperLimit(): number; - /** - * Set the joint limits, usually in meters. - */ - setLimits(lower: number, upper: number): void; - /** - * Is the joint motor enabled? - */ - isMotorEnabled(): boolean; - /** - * Enable/disable the joint motor. - */ - enableMotor(flag: boolean): void; - /** - * Set the motor speed, usually in meters per second. - */ - setMotorSpeed(speed: number): void; - /** - * Set the maximum motor force, usually in N. - */ - setMaxMotorForce(force: number): void; - getMaxMotorForce(): number; - /** - * Get the motor speed, usually in meters per second. - */ - getMotorSpeed(): number; - /** - * Get the current motor force given the inverse time step, usually in N. - */ - getMotorForce(inv_dt: number): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Gear joint definition. - */ - interface GearJointOpt extends JointOpt { - /** - * The gear ratio. See {@link GearJoint} for explanation. - */ - ratio?: number; - } - /** - * Gear joint definition. - */ - interface GearJointDef extends JointDef, GearJointOpt { - /** - * The first revolute/prismatic joint attached to the gear joint. - */ - joint1: RevoluteJoint | PrismaticJoint; - /** - * The second prismatic/revolute joint attached to the gear joint. - */ - joint2: RevoluteJoint | PrismaticJoint; - } - /** - * A gear joint is used to connect two joints together. Either joint can be a - * revolute or prismatic joint. You specify a gear ratio to bind the motions - * together: coordinate1 + ratio * coordinate2 = constant - * - * The ratio can be negative or positive. If one joint is a revolute joint and - * the other joint is a prismatic joint, then the ratio will have units of - * length or units of 1/length. Warning: You have to manually destroy the gear - * joint if joint1 or joint2 is destroyed. - * - * This definition requires two existing revolute or prismatic joints (any - * combination will work). - */ - class GearJoint extends Joint { - static TYPE: "gear-joint"; - constructor(def: GearJointDef); - constructor(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number); - /** @hidden */ - _reset(def: Partial): void; - /** - * Get the first joint. - */ - getJoint1(): Joint; - /** - * Get the second joint. - */ - getJoint2(): Joint; - /** - * Set the gear ratio. - */ - setRatio(ratio: number): void; - /** - * Get the gear ratio. - */ - getRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Motor joint definition. - */ - interface MotorJointOpt extends JointOpt { - /** - * The bodyB angle minus bodyA angle in radians. - */ - angularOffset?: number; - /** - * The maximum motor force in N. - */ - maxForce?: number; - /** - * The maximum motor torque in N-m. - */ - maxTorque?: number; - /** - * Position correction factor in the range [0,1]. - */ - correctionFactor?: number; - /** - * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters. - */ - linearOffset?: Vec2Value; - } - /** - * Motor joint definition. - */ - interface MotorJointDef extends JointDef, MotorJointOpt { - } - /** - * A motor joint is used to control the relative motion between two bodies. A - * typical usage is to control the movement of a dynamic body with respect to - * the ground. - */ - class MotorJoint extends Joint { - static TYPE: "motor-joint"; - constructor(def: MotorJointDef); - constructor(def: MotorJointOpt, bodyA: Body, bodyB: Body); - /** @hidden */ - _reset(def: Partial): void; - /** - * Set the maximum friction force in N. - */ - setMaxForce(force: number): void; - /** - * Get the maximum friction force in N. - */ - getMaxForce(): number; - /** - * Set the maximum friction torque in N*m. - */ - setMaxTorque(torque: number): void; - /** - * Get the maximum friction torque in N*m. - */ - getMaxTorque(): number; - /** - * Set the position correction factor in the range [0,1]. - */ - setCorrectionFactor(factor: number): void; - /** - * Get the position correction factor in the range [0,1]. - */ - getCorrectionFactor(): number; - /** - * Set/get the target linear offset, in frame A, in meters. - */ - setLinearOffset(linearOffset: Vec2Value): void; - getLinearOffset(): Vec2; - /** - * Set/get the target angular offset, in radians. - */ - setAngularOffset(angularOffset: number): void; - getAngularOffset(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Mouse joint definition. This requires a world target point, tuning - * parameters, and the time step. - */ - interface MouseJointOpt extends JointOpt { - /** - * [maxForce = 0.0] The maximum constraint force that can be exerted to move - * the candidate body. Usually you will express as some multiple of the - * weight (multiplier * mass * gravity). - */ - maxForce?: number; - /** - * [frequencyHz = 5.0] The response speed. - */ - frequencyHz?: number; - /** - * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical - * damping. - */ - dampingRatio?: number; - } - /** - * Mouse joint definition. This requires a world target point, tuning - * parameters, and the time step. - */ - interface MouseJointDef extends JointDef, MouseJointOpt { - /** - * The initial world target point. This is assumed to coincide with the body - * anchor initially. - */ - target: Vec2Value; - } - /** - * A mouse joint is used to make a point on a body track a specified world - * point. This a soft constraint with a maximum force. This allows the - * constraint to stretch and without applying huge forces. - * - * You need to call setTarget(target) every time that mouse is - * moved, to track the new location of the mouse. - * - * NOTE: this joint is not documented in the manual because it was developed to - * be used in the testbed. If you want to learn how to use the mouse joint, look - * at the testbed. - */ - class MouseJoint extends Joint { - static TYPE: "mouse-joint"; - constructor(def: MouseJointDef); - constructor(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * Use this to update the target point. - */ - setTarget(target: Vec2Value): void; - getTarget(): Vec2; - /** - * Set the maximum force in Newtons. - */ - setMaxForce(force: number): void; - /** - * Get the maximum force in Newtons. - */ - getMaxForce(): number; - /** - * Set the frequency in Hertz. - */ - setFrequency(hz: number): void; - /** - * Get the frequency in Hertz. - */ - getFrequency(): number; - /** - * Set the damping ratio (dimensionless). - */ - setDampingRatio(ratio: number): void; - /** - * Get the damping ratio (dimensionless). - */ - getDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - /** - * Shift the origin for any points stored in world coordinates. - */ - shiftOrigin(newOrigin: Vec2Value): void; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Pulley joint definition. This requires two ground anchors, two dynamic body - * anchor points, and a pulley ratio. - */ - // tslint:disable-next-line:no-empty-interface - interface PulleyJointOpt extends JointOpt { - } - /** - * Pulley joint definition. This requires two ground anchors, two dynamic body - * anchor points, and a pulley ratio. - */ - interface PulleyJointDef extends JointDef, PulleyJointOpt { - /** - * The first ground anchor in world coordinates. This point never moves. - */ - groundAnchorA: Vec2Value; - /** - * The second ground anchor in world coordinates. This point never moves. - */ - groundAnchorB: Vec2Value; - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The reference length for the segment attached to bodyA. - */ - lengthA: number; - /** - * The reference length for the segment attached to bodyB. - */ - lengthB: number; - /** - * The pulley ratio, used to simulate a block-and-tackle. - */ - ratio: number; - /** @hidden */ anchorA?: Vec2Value; - /** @hidden */ anchorB?: Vec2Value; - } - /** - * The pulley joint is connected to two bodies and two fixed ground points. The - * pulley supports a ratio such that: length1 + ratio * length2 <= constant - * - * Yes, the force transmitted is scaled by the ratio. - * - * Warning: the pulley joint can get a bit squirrelly by itself. They often work - * better when combined with prismatic joints. You should also cover the the - * anchor points with static shapes to prevent one side from going to zero - * length. - */ - class PulleyJoint extends Joint { - static TYPE: "pulley-joint"; - constructor(def: PulleyJointDef); - constructor(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number); - /** @hidden */ - _reset(def: Partial): void; - /** - * Get the first ground anchor. - */ - getGroundAnchorA(): Vec2; - /** - * Get the second ground anchor. - */ - getGroundAnchorB(): Vec2; - /** - * Get the current length of the segment attached to bodyA. - */ - getLengthA(): number; - /** - * Get the current length of the segment attached to bodyB. - */ - getLengthB(): number; - /** - * Get the pulley ratio. - */ - getRatio(): number; - /** - * Get the current length of the segment attached to bodyA. - */ - getCurrentLengthA(): number; - /** - * Get the current length of the segment attached to bodyB. - */ - getCurrentLengthB(): number; - /** - * Shift the origin for any points stored in world coordinates. - * - * @param newOrigin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Rope joint definition. This requires two body anchor points and a maximum - * lengths. Note: by default the connected objects will not collide. see - * collideConnected in JointDef. - */ - interface RopeJointOpt extends JointOpt { - /** - * The maximum length of the rope. - * Warning: this must be larger than linearSlop or the joint will have no effect. - */ - maxLength?: number; - } - /** - * Rope joint definition. This requires two body anchor points and a maximum - * lengths. Note: by default the connected objects will not collide. see - * collideConnected in JointDef. - */ - interface RopeJointDef extends JointDef, RopeJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - } - /** - * A rope joint enforces a maximum distance between two points on two bodies. It - * has no other effect. - * - * Warning: if you attempt to change the maximum length during the simulation - * you will get some non-physical behavior. - * - * A model that would allow you to dynamically modify the length would have some - * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you - * want to dynamically control length. - */ - class RopeJoint extends Joint { - static TYPE: "rope-joint"; - constructor(def: RopeJointDef); - constructor(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Set the maximum length of the rope. - */ - setMaxLength(length: number): void; - /** - * Get the maximum length of the rope. - */ - getMaxLength(): number; - getLimitState(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Weld joint definition. You need to specify local anchor points where they are - * attached and the relative body angle. The position of the anchor points is - * important for computing the reaction torque. - */ - interface WeldJointOpt extends JointOpt { - /** - * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness - * with a value of 0. - */ - frequencyHz?: number; - /** - * The damping ratio. 0 = no damping, 1 = critical damping. - */ - dampingRatio?: number; - /** - * The bodyB angle minus bodyA angle in the reference state (radians). - */ - referenceAngle?: number; - } - /** - * Weld joint definition. You need to specify local anchor points where they are - * attached and the relative body angle. The position of the anchor points is - * important for computing the reaction torque. - */ - interface WeldJointDef extends JointDef, WeldJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - } - /** - * A weld joint essentially glues two bodies together. A weld joint may distort - * somewhat because the island constraint solver is approximate. - */ - class WeldJoint extends Joint { - static TYPE: "weld-joint"; - constructor(def: WeldJointDef); - constructor(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Get the reference angle. - */ - getReferenceAngle(): number; - /** - * Set frequency in Hz. - */ - setFrequency(hz: number): void; - /** - * Get frequency in Hz. - */ - getFrequency(): number; - /** - * Set damping ratio. - */ - setDampingRatio(ratio: number): void; - /** - * Get damping ratio. - */ - getDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Wheel joint definition. This requires defining a line of motion using an axis - * and an anchor point. The definition uses local anchor points and a local axis - * so that the initial configuration can violate the constraint slightly. The - * joint translation is zero when the local anchor points coincide in world - * space. Using local anchors and a local axis helps when saving and loading a - * game. - */ - interface WheelJointOpt extends JointOpt { - /** - * Enable/disable the joint motor. - */ - enableMotor?: boolean; - /** - * The maximum motor torque, usually in N-m. - */ - maxMotorTorque?: number; - /** - * The desired motor speed in radians per second. - */ - motorSpeed?: number; - /** - * Suspension frequency, zero indicates no suspension. - */ - frequencyHz?: number; - /** - * Suspension damping ratio, one indicates critical damping. - */ - dampingRatio?: number; - } - /** - * Wheel joint definition. This requires defining a line of motion using an axis - * and an anchor point. The definition uses local anchor points and a local axis - * so that the initial configuration can violate the constraint slightly. The - * joint translation is zero when the local anchor points coincide in world - * space. Using local anchors and a local axis helps when saving and loading a - * game. - */ - interface WheelJointDef extends JointDef, WheelJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The local translation axis in bodyA. - */ - localAxisA: Vec2Value; - } - /** - * A wheel joint. This joint provides two degrees of freedom: translation along - * an axis fixed in bodyA and rotation in the plane. In other words, it is a - * point to line constraint with a rotational motor and a linear spring/damper. - * This joint is designed for vehicle suspensions. - */ - class WheelJoint extends Joint { - static TYPE: "wheel-joint"; - constructor(def: WheelJointDef); - constructor(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * The local joint axis relative to bodyA. - */ - getLocalAxisA(): Vec2; - /** - * Get the current joint translation, usually in meters. - */ - getJointTranslation(): number; - /** - * Get the current joint translation speed, usually in meters per second. - */ - getJointSpeed(): number; - /** - * Is the joint motor enabled? - */ - isMotorEnabled(): boolean; - /** - * Enable/disable the joint motor. - */ - enableMotor(flag: boolean): void; - /** - * Set the motor speed, usually in radians per second. - */ - setMotorSpeed(speed: number): void; - /** - * Get the motor speed, usually in radians per second. - */ - getMotorSpeed(): number; - /** - * Set/Get the maximum motor force, usually in N-m. - */ - setMaxMotorTorque(torque: number): void; - getMaxMotorTorque(): number; - /** - * Get the current motor torque given the inverse time step, usually in N-m. - */ - getMotorTorque(inv_dt: number): number; - /** - * Set/Get the spring frequency in hertz. Setting the frequency to zero disables - * the spring. - */ - setSpringFrequencyHz(hz: number): void; - getSpringFrequencyHz(): number; - /** - * Set/Get the spring damping ratio - */ - setSpringDampingRatio(ratio: number): void; - getSpringDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Tuning constants based on meters-kilograms-seconds (MKS) units. - * - * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units. - */ - class Settings { - /** - * You can use this to change the length scale used by your game. - * - * For example for inches you could use 39.4. - */ - static lengthUnitsPerMeter: number; - // Collision - /** - * The maximum number of contact points between two convex shapes. Do not change - * this value. - */ - static maxManifoldPoints: number; - /** - * The maximum number of vertices on a convex polygon. You cannot increase this - * too much because BlockAllocator has a maximum object size. - */ - static maxPolygonVertices: number; - /** - * This is used to fatten AABBs in the dynamic tree. This allows proxies to move - * by a small amount without triggering a tree adjustment. This is in meters. - */ - static aabbExtension: number; - /** - * This is used to fatten AABBs in the dynamic tree. This is used to predict the - * future position based on the current displacement. This is a dimensionless - * multiplier. - */ - static aabbMultiplier: number; - /** - * A small length used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - static linearSlop: number; - /** - * A small angle used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - static angularSlop: number; - /** - * The radius of the polygon/edge shape skin. This should not be modified. - * Making this smaller means polygons will have an insufficient buffer for - * continuous collision. Making it larger may create artifacts for vertex - * collision. - */ - static get polygonRadius(): number; - /** - * Maximum number of sub-steps per contact in continuous physics simulation. - */ - static maxSubSteps: number; - // Dynamics - /** - * Maximum number of contacts to be handled to solve a TOI impact. - */ - static maxTOIContacts: number; - /** - * Maximum iterations to solve a TOI. - */ - static maxTOIIterations: number; - /** - * Maximum iterations to find Distance. - */ - static maxDistanceIterations: number; - /** - * A velocity threshold for elastic collisions. Any collision with a relative - * linear velocity below this threshold will be treated as inelastic. - */ - static velocityThreshold: number; - /** - * The maximum linear position correction used when solving constraints. This - * helps to prevent overshoot. - */ - static maxLinearCorrection: number; - /** - * The maximum angular position correction used when solving constraints. This - * helps to prevent overshoot. - */ - static maxAngularCorrection: number; - /** - * The maximum linear velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - static maxTranslation: number; - /** - * The maximum angular velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - static maxRotation: number; - /** - * This scale factor controls how fast overlap is resolved. Ideally this would - * be 1 so that overlap is removed in one time step. However using values close - * to 1 often lead to overshoot. - */ - static baumgarte: number; - static toiBaugarte: number; - // Sleep - /** - * The time that a body must be still before it will go to sleep. - */ - static timeToSleep: number; - /** - * A body cannot sleep if its linear velocity is above this tolerance. - */ - static linearSleepTolerance: number; - /** - * A body cannot sleep if its angular velocity is above this tolerance. - */ - static angularSleepTolerance: number; - } - /** - * This describes the motion of a body/shape for TOI computation. Shapes are - * defined with respect to the body origin, which may not coincide with the - * center of mass. However, to support dynamics we must interpolate the center - * of mass position. - */ - class Sweep { - /** Local center of mass position */ - localCenter: Vec2; - /** World center position */ - c: Vec2; - /** World angle */ - a: number; - /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */ - alpha0: number; - c0: Vec2; - a0: number; - setTransform(xf: TransformValue): void; - setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void; - /** - * Get the interpolated transform at a specific time. - * - * @param xf - * @param beta A factor in [0,1], where 0 indicates alpha0 - */ - getTransform(xf: TransformValue, beta?: number): void; - /** - * Advance the sweep forward, yielding a new initial state. - * - * @param alpha The new initial time - */ - advance(alpha: number): void; - forward(): void; - /** - * normalize the angles in radians to be between -pi and pi. - */ - normalize(): void; - set(that: Sweep): void; - } - /** - * Input parameters for TimeOfImpact. - */ - class TOIInput { - proxyA: DistanceProxy; - proxyB: DistanceProxy; - sweepA: Sweep; - sweepB: Sweep; - /** defines sweep interval [0, tMax] */ - tMax: number; - recycle(): void; - } - enum TOIOutputState { - e_unset = -1, - e_unknown = 0, - e_failed = 1, - e_overlapped = 2, - e_touching = 3, - e_separated = 4 - } - /** - * Output parameters for TimeOfImpact. - */ - class TOIOutput { - state: TOIOutputState; - t: number; - recycle(): void; - } - /** - * Compute the upper bound on time before two shapes penetrate. Time is - * represented as a fraction between [0,tMax]. This uses a swept separating axis - * and may miss some intermediate, non-tunneling collisions. If you change the - * time interval, you should call this function again. - * - * Note: use Distance to compute the contact point and normal at the time of - * impact. - * - * CCD via the local separating axis method. This seeks progression by computing - * the largest time at which separation is maintained. - */ - const TimeOfImpact: { - (output: TOIOutput, input: TOIInput): void; - Input: typeof TOIInput; - Output: typeof TOIOutput; - }; - /** @hidden */ - const stats: { - gjkCalls: number; - gjkIters: number; - gjkMaxIters: number; - toiTime: number; - toiMaxTime: number; - toiCalls: number; - toiIters: number; - toiMaxIters: number; - toiRootIters: number; - toiMaxRootIters: number; - toString(newline?: string): string; - }; - /** @hidden @deprecated Merged with main namespace */ - const internal: { - CollidePolygons: (manifold: Manifold, polyA: PolygonShape, xfA: TransformValue, polyB: PolygonShape, xfB: TransformValue) => void; - Settings: typeof Settings; - Sweep: typeof Sweep; - Manifold: typeof Manifold; - Distance: { - (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void; - testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; - Input: typeof DistanceInput; - Output: typeof DistanceOutput; - Proxy: typeof DistanceProxy; - Cache: typeof SimplexCache; - }; - TimeOfImpact: { - (output: TOIOutput, input: TOIInput): void; - Input: typeof TOIInput; - Output: typeof TOIOutput; - }; - DynamicTree: typeof DynamicTree; - stats: { - gjkCalls: number; - gjkIters: number; - gjkMaxIters: number; - toiTime: number; - toiMaxTime: number; - toiCalls: number; - toiIters: number; - toiMaxIters: number; - toiRootIters: number; - toiMaxRootIters: number; - toString(newline?: string): string; - }; - }; - export { math as Math }; -} -export { planck as default, Serializer, Style, ActiveKeys, Testbed, testbed, math as Math, Vec2Value, Vec2, Vec3Value, Vec3, Mat22, Mat33, TransformValue, Transform, RotValue, Rot, RayCastInput, RayCastCallback, RayCastOutput, AABBValue, AABB, Shape, ShapeType, FixtureOpt, FixtureDef, FixtureProxy, Fixture, BodyType, BodyDef, MassData, Body, ContactEdge, EvaluateFunction, mixFriction, mixRestitution, VelocityConstraintPoint, Contact, JointEdge, JointOpt, JointDef, Joint, WorldDef, WorldRayCastCallback, WorldAABBQueryCallback, World, CircleShape, Circle, EdgeShape, Edge, PolygonShape, Polygon, ChainShape, Chain, BoxShape, Box, CollideCircles, CollideEdgeCircle, CollidePolygons, CollidePolygonCircle, CollideEdgePolygon, DistanceJointOpt, DistanceJointDef, DistanceJoint, FrictionJointOpt, FrictionJointDef, FrictionJoint, GearJointOpt, GearJointDef, GearJoint, MotorJointOpt, MotorJointDef, MotorJoint, MouseJointOpt, MouseJointDef, MouseJoint, PrismaticJointOpt, PrismaticJointDef, PrismaticJoint, PulleyJointOpt, PulleyJointDef, PulleyJoint, RevoluteJointOpt, RevoluteJointDef, RevoluteJoint, RopeJointOpt, RopeJointDef, RopeJoint, WeldJointOpt, WeldJointDef, WeldJoint, WheelJointOpt, WheelJointDef, WheelJoint, Settings, Sweep, ManifoldType, ContactFeatureType, PointState, ClipVertex, Manifold, ManifoldPoint, ContactID, WorldManifold, getPointStates, clipSegmentToLine, DistanceInput, DistanceOutput, SimplexCache, Distance, DistanceProxy, testOverlap, ShapeCastInput, ShapeCastOutput, ShapeCast, TOIInput, TOIOutputState, TOIOutput, TimeOfImpact, DynamicTreeQueryCallback, TreeNode, DynamicTree, stats, internal }; -//# sourceMappingURL=planck-with-testbed.d.ts.map \ No newline at end of file + +export { + Body$1 as Body, + math as Math, +}; + +export {}; diff --git a/dist/planck-with-testbed.d.ts.map b/dist/planck-with-testbed.d.ts.map deleted file mode 100644 index 248b3278..00000000 --- a/dist/planck-with-testbed.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"planck-with-testbed.d.ts","sourceRoot":"","sources":["../testbed/main.ts","../src/util/options.ts","../src/common/Math.ts","../src/common/Vec2.ts","../src/collision/AABB.ts","../src/Settings.ts","../src/util/Pool.ts","../src/collision/DynamicTree.ts","../src/common/Rot.ts","../src/common/Transform.ts","../src/common/Vec3.ts","../src/common/Matrix.ts","../src/common/Sweep.ts","../src/dynamics/Velocity.ts","../src/dynamics/Position.ts","../src/common/Mat22.ts","../src/collision/Manifold.ts","../src/util/stats.ts","../src/collision/Distance.ts","../src/dynamics/Contact.ts","../src/util/Timer.ts","../src/collision/TimeOfImpact.ts","../src/dynamics/Solver.ts","../src/util/Testbed.ts","../src/dynamics/Joint.ts","../src/dynamics/Body.ts","../src/collision/Shape.ts","../src/dynamics/Fixture.ts","../src/collision/BroadPhase.ts","../src/dynamics/World.ts","../src/collision/shape/EdgeShape.ts","../src/collision/shape/ChainShape.ts","../src/collision/shape/PolygonShape.ts","../src/collision/shape/CircleShape.ts","../src/dynamics/joint/DistanceJoint.ts","../src/dynamics/joint/FrictionJoint.ts","../src/common/Mat33.ts","../src/dynamics/joint/RevoluteJoint.ts","../src/dynamics/joint/PrismaticJoint.ts","../src/dynamics/joint/GearJoint.ts","../src/dynamics/joint/MotorJoint.ts","../src/dynamics/joint/MouseJoint.ts","../src/dynamics/joint/PulleyJoint.ts","../src/dynamics/joint/RopeJoint.ts","../src/dynamics/joint/WeldJoint.ts","../src/dynamics/joint/WheelJoint.ts","../src/serializer/index.ts","../src/collision/shape/BoxShape.ts","../src/collision/shape/CollideCircle.ts","../src/collision/shape/CollideEdgeCircle.ts","../src/collision/shape/CollidePolygon.ts","../src/collision/shape/CollideCirclePolygon.ts","../src/collision/shape/CollideEdgePolygon.ts","../src/internal.ts","../src/index.ts","../testbed/StageTestbed.ts","../testbed/index.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAA6X,SAAU;;;;;;;;;;;+BAAvN,IAAK;8BAAgE,IAAK;;;2BAAmI,SAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAAjM,SAAU;;;;;;;;;;;;;+BAAjS,IAAK;;;;;;;2BAAkR,SAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"} \ No newline at end of file diff --git a/dist/planck-with-testbed.js b/dist/planck-with-testbed.js index da4c5e81..2f62d28f 100644 --- a/dist/planck-with-testbed.js +++ b/dist/planck-with-testbed.js @@ -1,7 +1,10 @@ -/** - * Planck.js v1.0.9 +(function(global, factory) { + typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.planck = {})); +})(this, function(exports2) { + "use strict";/** + * Planck.js v1.1.0-alpha * @license The MIT license - * @copyright Copyright (c) 2023 Erin Catto, Ali Shakiba + * @copyright Copyright (c) 2024 Erin Catto, Ali Shakiba * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,20744 +25,16022 @@ * SOFTWARE. */ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.planck = {})); -})(this, (function (exports) { 'use strict'; - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - /* global Reflect, Promise */ - - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + var extendStatics = function(d2, b2) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b3) { + d3.__proto__ = b3; + } || function(d3, b3) { + for (var p in b3) if (Object.prototype.hasOwnProperty.call(b3, p)) d3[p] = b3[p]; }; - - function __extends$a(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + return extendStatics(d2, b2); + }; + function __extends$a(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics(d2, b2); + function __() { + this.constructor = d2; } - - var __assign$1 = function() { - __assign$1 = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign$1.apply(this, arguments); + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); + } + var __assign$1 = function() { + __assign$1 = Object.assign || function __assign2(t) { + for (var s2, i = 1, n2 = arguments.length; i < n2; i++) { + s2 = arguments[i]; + for (var p in s2) if (Object.prototype.hasOwnProperty.call(s2, p)) t[p] = s2[p]; + } + return t; }; - - /** @internal */ - var options = function (input, defaults) { - if (input === null || typeof input === "undefined") { - // tslint:disable-next-line:no-object-literal-type-assertion - input = {}; - } - var output = __assign$1({}, input); - // tslint:disable-next-line:no-for-in - for (var key in defaults) { - if (defaults.hasOwnProperty(key) && typeof input[key] === "undefined") { - output[key] = defaults[key]; - } - } - if (typeof Object.getOwnPropertySymbols === "function") { - var symbols = Object.getOwnPropertySymbols(defaults); - for (var i = 0; i < symbols.length; i++) { - var symbol = symbols[i]; - if (defaults.propertyIsEnumerable(symbol) && typeof input[symbol] === "undefined") { - output[symbol] = defaults[symbol]; - } - } + return __assign$1.apply(this, arguments); + }; + var options = function(input2, defaults) { + if (input2 === null || typeof input2 === "undefined") { + input2 = {}; + } + var output2 = __assign$1({}, input2); + for (var key in defaults) { + if (defaults.hasOwnProperty(key) && typeof input2[key] === "undefined") { + output2[key] = defaults[key]; + } + } + if (typeof Object.getOwnPropertySymbols === "function") { + var symbols = Object.getOwnPropertySymbols(defaults); + for (var i = 0; i < symbols.length; i++) { + var symbol = symbols[i]; + if (defaults.propertyIsEnumerable(symbol) && typeof input2[symbol] === "undefined") { + output2[symbol] = defaults[symbol]; } - return output; - }; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_random$1 = Math.random; - var EPSILON = 1e-9; - /** @internal @deprecated */ - var isFinite = Number.isFinite; - /** - * @deprecated - * Next Largest Power of 2 Given a binary integer value x, the next largest - * power of 2 can be computed by a SWAR algorithm that recursively "folds" the - * upper bits into the lower bits. This process yields a bit vector with the - * same most significant 1 as x, but all 1's below it. Adding 1 to that value - * yields the next largest power of 2. For a 32-bit value: - */ - function nextPowerOfTwo(x) { - x |= (x >> 1); - x |= (x >> 2); - x |= (x >> 4); - x |= (x >> 8); - x |= (x >> 16); - return x + 1; + } + } + return output2; + }; + var math_random$1 = Math.random; + var EPSILON = 1e-9; + var isFinite = Number.isFinite; + function nextPowerOfTwo(x2) { + x2 |= x2 >> 1; + x2 |= x2 >> 2; + x2 |= x2 >> 4; + x2 |= x2 >> 8; + x2 |= x2 >> 16; + return x2 + 1; + } + function isPowerOfTwo(x2) { + return x2 > 0 && (x2 & x2 - 1) === 0; + } + function mod(num, min, max) { + if (typeof min === "undefined") { + max = 1; + min = 0; + } else if (typeof max === "undefined") { + max = min; + min = 0; + } + if (max > min) { + num = (num - min) % (max - min); + return num + (num < 0 ? max : min); + } else { + num = (num - max) % (min - max); + return num + (num <= 0 ? min : max); + } + } + function clamp$1(num, min, max) { + if (num < min) { + return min; + } else if (num > max) { + return max; + } else { + return num; } - /** @deprecated */ - function isPowerOfTwo(x) { - return x > 0 && (x & (x - 1)) === 0; + } + function random$1(min, max) { + if (typeof min === "undefined") { + max = 1; + min = 0; + } else if (typeof max === "undefined") { + max = min; + min = 0; } - /** @deprecated */ - function mod(num, min, max) { - if (typeof min === "undefined") { - max = 1; - min = 0; + return min === max ? min : math_random$1() * (max - min) + min; + } + var math$1 = Object.create(Math); + math$1.EPSILON = EPSILON; + math$1.isFinite = isFinite; + math$1.nextPowerOfTwo = nextPowerOfTwo; + math$1.isPowerOfTwo = isPowerOfTwo; + math$1.mod = mod; + math$1.clamp = clamp$1; + math$1.random = random$1; + var math_abs$a = Math.abs; + var math_sqrt$7 = Math.sqrt; + var math_max$9 = Math.max; + var math_min$9 = Math.min; + var Vec2 = ( + /** @class */ + function() { + function Vec22(x2, y) { + if (!(this instanceof Vec22)) { + return new Vec22(x2, y); + } + if (typeof x2 === "undefined") { + this.x = 0; + this.y = 0; + } else if (typeof x2 === "object") { + this.x = x2.x; + this.y = x2.y; + } else { + this.x = x2; + this.y = y; } - else if (typeof max === "undefined") { - max = min; - min = 0; + } + Vec22.prototype._serialize = function() { + return { + x: this.x, + y: this.y + }; + }; + Vec22._deserialize = function(data) { + var obj = Object.create(Vec22.prototype); + obj.x = data.x; + obj.y = data.y; + return obj; + }; + Vec22.zero = function() { + var obj = Object.create(Vec22.prototype); + obj.x = 0; + obj.y = 0; + return obj; + }; + Vec22.neo = function(x2, y) { + var obj = Object.create(Vec22.prototype); + obj.x = x2; + obj.y = y; + return obj; + }; + Vec22.clone = function(v3) { + return Vec22.neo(v3.x, v3.y); + }; + Vec22.prototype.toString = function() { + return JSON.stringify(this); + }; + Vec22.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; } - if (max > min) { - num = (num - min) % (max - min); - return num + (num < 0 ? max : min); + return Number.isFinite(obj.x) && Number.isFinite(obj.y); + }; + Vec22.assert = function(o) { + }; + Vec22.prototype.clone = function() { + return Vec22.clone(this); + }; + Vec22.prototype.setZero = function() { + this.x = 0; + this.y = 0; + return this; + }; + Vec22.prototype.set = function(x2, y) { + if (typeof x2 === "object") { + this.x = x2.x; + this.y = x2.y; + } else { + this.x = x2; + this.y = y; } - else { - num = (num - max) % (min - max); - return num + (num <= 0 ? min : max); + return this; + }; + Vec22.prototype.setNum = function(x2, y) { + this.x = x2; + this.y = y; + return this; + }; + Vec22.prototype.setVec2 = function(value) { + this.x = value.x; + this.y = value.y; + return this; + }; + Vec22.prototype.wSet = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return this.setCombine(a2, v3, b2, w); + } else { + return this.setMul(a2, v3); } - } - /** - * @deprecated - * Returns a min if num is less than min, and max if more than max, otherwise returns num. - */ - function clamp$1(num, min, max) { - if (num < min) { - return min; + }; + Vec22.prototype.setCombine = function(a2, v3, b2, w) { + var x2 = a2 * v3.x + b2 * w.x; + var y = a2 * v3.y + b2 * w.y; + this.x = x2; + this.y = y; + return this; + }; + Vec22.prototype.setMul = function(a2, v3) { + var x2 = a2 * v3.x; + var y = a2 * v3.y; + this.x = x2; + this.y = y; + return this; + }; + Vec22.prototype.add = function(w) { + this.x += w.x; + this.y += w.y; + return this; + }; + Vec22.prototype.wAdd = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return this.addCombine(a2, v3, b2, w); + } else { + return this.addMul(a2, v3); } - else if (num > max) { - return max; + }; + Vec22.prototype.addCombine = function(a2, v3, b2, w) { + var x2 = a2 * v3.x + b2 * w.x; + var y = a2 * v3.y + b2 * w.y; + this.x += x2; + this.y += y; + return this; + }; + Vec22.prototype.addMul = function(a2, v3) { + var x2 = a2 * v3.x; + var y = a2 * v3.y; + this.x += x2; + this.y += y; + return this; + }; + Vec22.prototype.wSub = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return this.subCombine(a2, v3, b2, w); + } else { + return this.subMul(a2, v3); } - else { - return num; + }; + Vec22.prototype.subCombine = function(a2, v3, b2, w) { + var x2 = a2 * v3.x + b2 * w.x; + var y = a2 * v3.y + b2 * w.y; + this.x -= x2; + this.y -= y; + return this; + }; + Vec22.prototype.subMul = function(a2, v3) { + var x2 = a2 * v3.x; + var y = a2 * v3.y; + this.x -= x2; + this.y -= y; + return this; + }; + Vec22.prototype.sub = function(w) { + this.x -= w.x; + this.y -= w.y; + return this; + }; + Vec22.prototype.mul = function(m) { + this.x *= m; + this.y *= m; + return this; + }; + Vec22.prototype.length = function() { + return Vec22.lengthOf(this); + }; + Vec22.prototype.lengthSquared = function() { + return Vec22.lengthSquared(this); + }; + Vec22.prototype.normalize = function() { + var length2 = this.length(); + if (length2 < EPSILON) { + return 0; + } + var invLength = 1 / length2; + this.x *= invLength; + this.y *= invLength; + return length2; + }; + Vec22.lengthOf = function(v3) { + return math_sqrt$7(v3.x * v3.x + v3.y * v3.y); + }; + Vec22.lengthSquared = function(v3) { + return v3.x * v3.x + v3.y * v3.y; + }; + Vec22.distance = function(v3, w) { + var dx = v3.x - w.x; + var dy = v3.y - w.y; + return math_sqrt$7(dx * dx + dy * dy); + }; + Vec22.distanceSquared = function(v3, w) { + var dx = v3.x - w.x; + var dy = v3.y - w.y; + return dx * dx + dy * dy; + }; + Vec22.areEqual = function(v3, w) { + return v3 === w || typeof w === "object" && w !== null && v3.x === w.x && v3.y === w.y; + }; + Vec22.skew = function(v3) { + return Vec22.neo(-v3.y, v3.x); + }; + Vec22.dot = function(v3, w) { + return v3.x * w.x + v3.y * w.y; + }; + Vec22.cross = function(v3, w) { + if (typeof w === "number") { + return Vec22.neo(w * v3.y, -w * v3.x); + } else if (typeof v3 === "number") { + return Vec22.neo(-v3 * w.y, v3 * w.x); + } else { + return v3.x * w.y - v3.y * w.x; } - } - /** - * @deprecated - * Returns a random number between min and max when two arguments are provided. - * If one arg is provided between 0 to max. - * If one arg is passed between 0 to 1. - */ - function random$1(min, max) { - if (typeof min === "undefined") { - max = 1; - min = 0; - } - else if (typeof max === "undefined") { - max = min; - min = 0; - } - return min === max ? min : math_random$1() * (max - min) + min; - } - /** @ignore */ - var math$1 = Object.create(Math); - math$1.EPSILON = EPSILON; - math$1.isFinite = isFinite; - math$1.nextPowerOfTwo = nextPowerOfTwo; - math$1.isPowerOfTwo = isPowerOfTwo; - math$1.mod = mod; - math$1.clamp = clamp$1; - math$1.random = random$1; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$a = Math.abs; - /** @internal */ var math_sqrt$7 = Math.sqrt; - /** @internal */ var math_max$9 = Math.max; - /** @internal */ var math_min$9 = Math.min; - var Vec2 = /** @class */ (function () { - // tslint:disable-next-line:typedef - function Vec2(x, y) { - if (!(this instanceof Vec2)) { - return new Vec2(x, y); - } - if (typeof x === "undefined") { - this.x = 0; - this.y = 0; - } - else if (typeof x === "object") { - this.x = x.x; - this.y = x.y; - } - else { - this.x = x; - this.y = y; - } + }; + Vec22.crossVec2Vec2 = function(v3, w) { + return v3.x * w.y - v3.y * w.x; + }; + Vec22.crossVec2Num = function(v3, w) { + return Vec22.neo(w * v3.y, -w * v3.x); + }; + Vec22.crossNumVec2 = function(v3, w) { + return Vec22.neo(-v3 * w.y, v3 * w.x); + }; + Vec22.addCross = function(a2, v3, w) { + if (typeof w === "number") { + return Vec22.neo(w * v3.y + a2.x, -w * v3.x + a2.y); + } else if (typeof v3 === "number") { + return Vec22.neo(-v3 * w.y + a2.x, v3 * w.x + a2.y); } - /** @internal */ - Vec2.prototype._serialize = function () { - return { - x: this.x, - y: this.y - }; - }; - /** @internal */ - Vec2._deserialize = function (data) { - var obj = Object.create(Vec2.prototype); - obj.x = data.x; - obj.y = data.y; - return obj; - }; - Vec2.zero = function () { - var obj = Object.create(Vec2.prototype); - obj.x = 0; - obj.y = 0; - return obj; - }; - /** @hidden */ - Vec2.neo = function (x, y) { - var obj = Object.create(Vec2.prototype); - obj.x = x; - obj.y = y; - return obj; - }; - Vec2.clone = function (v) { - return Vec2.neo(v.x, v.y); - }; - /** @hidden */ - Vec2.prototype.toString = function () { - return JSON.stringify(this); - }; - /** - * Does this vector contain finite coordinates? - */ - Vec2.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Number.isFinite(obj.x) && Number.isFinite(obj.y); - }; - Vec2.assert = function (o) { - }; - Vec2.prototype.clone = function () { - return Vec2.clone(this); - }; - /** - * Set this vector to all zeros. - * - * @returns this - */ - Vec2.prototype.setZero = function () { - this.x = 0.0; - this.y = 0.0; - return this; - }; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - // tslint:disable-next-line:typedef - Vec2.prototype.set = function (x, y) { - if (typeof x === "object") { - this.x = x.x; - this.y = x.y; - } - else { - this.x = x; - this.y = y; - } - return this; - }; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - Vec2.prototype.setNum = function (x, y) { - this.x = x; - this.y = y; - return this; - }; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - Vec2.prototype.setVec2 = function (value) { - this.x = value.x; - this.y = value.y; - return this; - }; - /** @internal @deprecated Use setCombine or setMul */ - Vec2.prototype.wSet = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return this.setCombine(a, v, b, w); - } - else { - return this.setMul(a, v); - } - }; - /** - * Set linear combination of v and w: `a * v + b * w` - */ - Vec2.prototype.setCombine = function (a, v, b, w) { - var x = a * v.x + b * w.x; - var y = a * v.y + b * w.y; - // `this` may be `w` - this.x = x; - this.y = y; - return this; - }; - Vec2.prototype.setMul = function (a, v) { - var x = a * v.x; - var y = a * v.y; - this.x = x; - this.y = y; - return this; - }; - /** - * Add a vector to this vector. - * - * @returns this - */ - Vec2.prototype.add = function (w) { - this.x += w.x; - this.y += w.y; - return this; - }; - /** @internal @deprecated Use addCombine or addMul */ - Vec2.prototype.wAdd = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return this.addCombine(a, v, b, w); - } - else { - return this.addMul(a, v); - } - }; - /** - * Add linear combination of v and w: `a * v + b * w` - */ - Vec2.prototype.addCombine = function (a, v, b, w) { - var x = a * v.x + b * w.x; - var y = a * v.y + b * w.y; - // `this` may be `w` - this.x += x; - this.y += y; - return this; + }; + Vec22.addCrossVec2Num = function(a2, v3, w) { + return Vec22.neo(w * v3.y + a2.x, -w * v3.x + a2.y); + }; + Vec22.addCrossNumVec2 = function(a2, v3, w) { + return Vec22.neo(-v3 * w.y + a2.x, v3 * w.x + a2.y); + }; + Vec22.add = function(v3, w) { + return Vec22.neo(v3.x + w.x, v3.y + w.y); + }; + Vec22.wAdd = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return Vec22.combine(a2, v3, b2, w); + } else { + return Vec22.mulNumVec2(a2, v3); + } + }; + Vec22.combine = function(a2, v3, b2, w) { + return Vec22.zero().setCombine(a2, v3, b2, w); + }; + Vec22.sub = function(v3, w) { + return Vec22.neo(v3.x - w.x, v3.y - w.y); + }; + Vec22.mul = function(a2, b2) { + if (typeof a2 === "object") { + return Vec22.neo(a2.x * b2, a2.y * b2); + } else if (typeof b2 === "object") { + return Vec22.neo(a2 * b2.x, a2 * b2.y); + } + }; + Vec22.mulVec2Num = function(a2, b2) { + return Vec22.neo(a2.x * b2, a2.y * b2); + }; + Vec22.mulNumVec2 = function(a2, b2) { + return Vec22.neo(a2 * b2.x, a2 * b2.y); + }; + Vec22.prototype.neg = function() { + this.x = -this.x; + this.y = -this.y; + return this; + }; + Vec22.neg = function(v3) { + return Vec22.neo(-v3.x, -v3.y); + }; + Vec22.abs = function(v3) { + return Vec22.neo(math_abs$a(v3.x), math_abs$a(v3.y)); + }; + Vec22.mid = function(v3, w) { + return Vec22.neo((v3.x + w.x) * 0.5, (v3.y + w.y) * 0.5); + }; + Vec22.upper = function(v3, w) { + return Vec22.neo(math_max$9(v3.x, w.x), math_max$9(v3.y, w.y)); + }; + Vec22.lower = function(v3, w) { + return Vec22.neo(math_min$9(v3.x, w.x), math_min$9(v3.y, w.y)); + }; + Vec22.prototype.clamp = function(max) { + var lengthSqr = this.x * this.x + this.y * this.y; + if (lengthSqr > max * max) { + var scale = max / math_sqrt$7(lengthSqr); + this.x *= scale; + this.y *= scale; + } + return this; + }; + Vec22.clamp = function(v3, max) { + var r = Vec22.neo(v3.x, v3.y); + r.clamp(max); + return r; + }; + Vec22.scaleFn = function(x2, y) { + return function(v3) { + return Vec22.neo(v3.x * x2, v3.y * y); }; - Vec2.prototype.addMul = function (a, v) { - var x = a * v.x; - var y = a * v.y; - this.x += x; - this.y += y; - return this; + }; + Vec22.translateFn = function(x2, y) { + return function(v3) { + return Vec22.neo(v3.x + x2, v3.y + y); }; - /** - * @deprecated Use subCombine or subMul - */ - Vec2.prototype.wSub = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return this.subCombine(a, v, b, w); - } - else { - return this.subMul(a, v); + }; + return Vec22; + }() + ); + var math_max$8 = Math.max; + var math_min$8 = Math.min; + var AABB = ( + /** @class */ + function() { + function AABB2(lower, upper) { + if (!(this instanceof AABB2)) { + return new AABB2(lower, upper); + } + this.lowerBound = Vec2.zero(); + this.upperBound = Vec2.zero(); + if (typeof lower === "object") { + this.lowerBound.setVec2(lower); + } + if (typeof upper === "object") { + this.upperBound.setVec2(upper); + } else if (typeof lower === "object") { + this.upperBound.setVec2(lower); + } + } + AABB2.prototype.isValid = function() { + return AABB2.isValid(this); + }; + AABB2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec2.isValid(obj.lowerBound) && Vec2.isValid(obj.upperBound) && Vec2.sub(obj.upperBound, obj.lowerBound).lengthSquared() >= 0; + }; + AABB2.assert = function(o) { + }; + AABB2.prototype.getCenter = function() { + return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5); + }; + AABB2.prototype.getExtents = function() { + return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5); + }; + AABB2.prototype.getPerimeter = function() { + return 2 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y); + }; + AABB2.prototype.combine = function(a2, b2) { + b2 = b2 || this; + var lowerA = a2.lowerBound; + var upperA = a2.upperBound; + var lowerB = b2.lowerBound; + var upperB = b2.upperBound; + var lowerX = math_min$8(lowerA.x, lowerB.x); + var lowerY = math_min$8(lowerA.y, lowerB.y); + var upperX = math_max$8(upperB.x, upperA.x); + var upperY = math_max$8(upperB.y, upperA.y); + this.lowerBound.setNum(lowerX, lowerY); + this.upperBound.setNum(upperX, upperY); + }; + AABB2.prototype.combinePoints = function(a2, b2) { + this.lowerBound.setNum(math_min$8(a2.x, b2.x), math_min$8(a2.y, b2.y)); + this.upperBound.setNum(math_max$8(a2.x, b2.x), math_max$8(a2.y, b2.y)); + }; + AABB2.prototype.set = function(aabb) { + this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y); + this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y); + }; + AABB2.prototype.contains = function(aabb) { + var result = true; + result = result && this.lowerBound.x <= aabb.lowerBound.x; + result = result && this.lowerBound.y <= aabb.lowerBound.y; + result = result && aabb.upperBound.x <= this.upperBound.x; + result = result && aabb.upperBound.y <= this.upperBound.y; + return result; + }; + AABB2.prototype.extend = function(value) { + AABB2.extend(this, value); + return this; + }; + AABB2.extend = function(out, value) { + out.lowerBound.x -= value; + out.lowerBound.y -= value; + out.upperBound.x += value; + out.upperBound.y += value; + return out; + }; + AABB2.testOverlap = function(a2, b2) { + var d1x = b2.lowerBound.x - a2.upperBound.x; + var d2x = a2.lowerBound.x - b2.upperBound.x; + var d1y = b2.lowerBound.y - a2.upperBound.y; + var d2y = a2.lowerBound.y - b2.upperBound.y; + if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) { + return false; + } + return true; + }; + AABB2.areEqual = function(a2, b2) { + return Vec2.areEqual(a2.lowerBound, b2.lowerBound) && Vec2.areEqual(a2.upperBound, b2.upperBound); + }; + AABB2.diff = function(a2, b2) { + var wD = math_max$8(0, math_min$8(a2.upperBound.x, b2.upperBound.x) - math_max$8(b2.lowerBound.x, a2.lowerBound.x)); + var hD = math_max$8(0, math_min$8(a2.upperBound.y, b2.upperBound.y) - math_max$8(b2.lowerBound.y, a2.lowerBound.y)); + var wA = a2.upperBound.x - a2.lowerBound.x; + var hA = a2.upperBound.y - a2.lowerBound.y; + var wB = b2.upperBound.x - b2.lowerBound.x; + var hB = b2.upperBound.y - b2.lowerBound.y; + return wA * hA + wB * hB - wD * hD; + }; + AABB2.prototype.rayCast = function(output2, input2) { + var tmin = -Infinity; + var tmax = Infinity; + var p = input2.p1; + var d2 = Vec2.sub(input2.p2, input2.p1); + var absD = Vec2.abs(d2); + var normal3 = Vec2.zero(); + for (var f = "x"; f !== null; f = f === "x" ? "y" : null) { + if (absD.x < EPSILON) { + if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) { + return false; } - }; - /** - * Subtract linear combination of v and w: `a * v + b * w` - */ - Vec2.prototype.subCombine = function (a, v, b, w) { - var x = a * v.x + b * w.x; - var y = a * v.y + b * w.y; - // `this` may be `w` - this.x -= x; - this.y -= y; - return this; - }; - Vec2.prototype.subMul = function (a, v) { - var x = a * v.x; - var y = a * v.y; - this.x -= x; - this.y -= y; - return this; - }; - /** - * Subtract a vector from this vector - * - * @returns this - */ - Vec2.prototype.sub = function (w) { - this.x -= w.x; - this.y -= w.y; - return this; - }; - /** - * Multiply this vector by a scalar. - * - * @returns this - */ - Vec2.prototype.mul = function (m) { - this.x *= m; - this.y *= m; - return this; - }; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - Vec2.prototype.length = function () { - return Vec2.lengthOf(this); - }; - /** - * Get the length squared. - */ - Vec2.prototype.lengthSquared = function () { - return Vec2.lengthSquared(this); - }; - /** - * Convert this vector into a unit vector. - * - * @returns old length - */ - Vec2.prototype.normalize = function () { - var length = this.length(); - if (length < EPSILON) { - return 0.0; + } else { + var inv_d = 1 / d2[f]; + var t1 = (this.lowerBound[f] - p[f]) * inv_d; + var t2 = (this.upperBound[f] - p[f]) * inv_d; + var s2 = -1; + if (t1 > t2) { + var temp3 = t1; + t1 = t2; + t2 = temp3; + s2 = 1; + } + if (t1 > tmin) { + normal3.setZero(); + normal3[f] = s2; + tmin = t1; + } + tmax = math_min$8(tmax, t2); + if (tmin > tmax) { + return false; } - var invLength = 1.0 / length; - this.x *= invLength; - this.y *= invLength; - return length; - }; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - Vec2.lengthOf = function (v) { - return math_sqrt$7(v.x * v.x + v.y * v.y); - }; - /** - * Get the length squared. - */ - Vec2.lengthSquared = function (v) { - return v.x * v.x + v.y * v.y; - }; - Vec2.distance = function (v, w) { - var dx = v.x - w.x; - var dy = v.y - w.y; - return math_sqrt$7(dx * dx + dy * dy); - }; - Vec2.distanceSquared = function (v, w) { - var dx = v.x - w.x; - var dy = v.y - w.y; - return dx * dx + dy * dy; - }; - Vec2.areEqual = function (v, w) { - return v === w || typeof w === "object" && w !== null && v.x === w.x && v.y === w.y; - }; + } + } + if (tmin < 0 || input2.maxFraction < tmin) { + return false; + } + output2.fraction = tmin; + output2.normal = normal3; + return true; + }; + AABB2.prototype.toString = function() { + return JSON.stringify(this); + }; + AABB2.combinePoints = function(out, a2, b2) { + out.lowerBound.x = math_min$8(a2.x, b2.x); + out.lowerBound.y = math_min$8(a2.y, b2.y); + out.upperBound.x = math_max$8(a2.x, b2.x); + out.upperBound.y = math_max$8(a2.y, b2.y); + return out; + }; + AABB2.combinedPerimeter = function(a2, b2) { + var lx = math_min$8(a2.lowerBound.x, b2.lowerBound.x); + var ly = math_min$8(a2.lowerBound.y, b2.lowerBound.y); + var ux = math_max$8(a2.upperBound.x, b2.upperBound.x); + var uy = math_max$8(a2.upperBound.y, b2.upperBound.y); + return 2 * (ux - lx + uy - ly); + }; + return AABB2; + }() + ); + var math_PI$7 = Math.PI; + var Settings = ( + /** @class */ + function() { + function Settings2() { + } + Object.defineProperty(Settings2, "polygonRadius", { /** - * Get the skew vector such that dot(skew_vec, other) == cross(vec, other) + * The radius of the polygon/edge shape skin. This should not be modified. + * Making this smaller means polygons will have an insufficient buffer for + * continuous collision. Making it larger may create artifacts for vertex + * collision. */ - Vec2.skew = function (v) { - return Vec2.neo(-v.y, v.x); - }; - /** Dot product on two vectors */ - Vec2.dot = function (v, w) { - return v.x * w.x + v.y * w.y; - }; - Vec2.cross = function (v, w) { - if (typeof w === "number") { - return Vec2.neo(w * v.y, -w * v.x); - } - else if (typeof v === "number") { - return Vec2.neo(-v * w.y, v * w.x); - } - else { - return v.x * w.y - v.y * w.x; - } - }; - /** Cross product on two vectors */ - Vec2.crossVec2Vec2 = function (v, w) { - return v.x * w.y - v.y * w.x; - }; - /** Cross product on a vector and a scalar */ - Vec2.crossVec2Num = function (v, w) { - return Vec2.neo(w * v.y, -w * v.x); - }; - /** Cross product on a vector and a scalar */ - Vec2.crossNumVec2 = function (v, w) { - return Vec2.neo(-v * w.y, v * w.x); - }; - Vec2.addCross = function (a, v, w) { - if (typeof w === "number") { - return Vec2.neo(w * v.y + a.x, -w * v.x + a.y); - } - else if (typeof v === "number") { - return Vec2.neo(-v * w.y + a.x, v * w.x + a.y); - } - }; - /** - * Returns `a + (v x w)` - */ - Vec2.addCrossVec2Num = function (a, v, w) { - return Vec2.neo(w * v.y + a.x, -w * v.x + a.y); - }; - /** - * Returns `a + (v x w)` - */ - Vec2.addCrossNumVec2 = function (a, v, w) { - return Vec2.neo(-v * w.y + a.x, v * w.x + a.y); - }; - Vec2.add = function (v, w) { - return Vec2.neo(v.x + w.x, v.y + w.y); - }; - /** @hidden @deprecated */ - Vec2.wAdd = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return Vec2.combine(a, v, b, w); - } - else { - return Vec2.mulNumVec2(a, v); - } - }; - Vec2.combine = function (a, v, b, w) { - return Vec2.zero().setCombine(a, v, b, w); - }; - Vec2.sub = function (v, w) { - return Vec2.neo(v.x - w.x, v.y - w.y); - }; - Vec2.mul = function (a, b) { - if (typeof a === "object") { - return Vec2.neo(a.x * b, a.y * b); - } - else if (typeof b === "object") { - return Vec2.neo(a * b.x, a * b.y); - } - }; - Vec2.mulVec2Num = function (a, b) { - return Vec2.neo(a.x * b, a.y * b); - }; - Vec2.mulNumVec2 = function (a, b) { - return Vec2.neo(a * b.x, a * b.y); - }; - Vec2.prototype.neg = function () { - this.x = -this.x; - this.y = -this.y; - return this; - }; - Vec2.neg = function (v) { - return Vec2.neo(-v.x, -v.y); - }; - Vec2.abs = function (v) { - return Vec2.neo(math_abs$a(v.x), math_abs$a(v.y)); - }; - Vec2.mid = function (v, w) { - return Vec2.neo((v.x + w.x) * 0.5, (v.y + w.y) * 0.5); - }; - Vec2.upper = function (v, w) { - return Vec2.neo(math_max$9(v.x, w.x), math_max$9(v.y, w.y)); - }; - Vec2.lower = function (v, w) { - return Vec2.neo(math_min$9(v.x, w.x), math_min$9(v.y, w.y)); - }; - Vec2.prototype.clamp = function (max) { - var lengthSqr = this.x * this.x + this.y * this.y; - if (lengthSqr > max * max) { - var scale = max / math_sqrt$7(lengthSqr); - this.x *= scale; - this.y *= scale; - } - return this; - }; - Vec2.clamp = function (v, max) { - var r = Vec2.neo(v.x, v.y); - r.clamp(max); - return r; - }; - /** @hidden @deprecated */ - Vec2.scaleFn = function (x, y) { - // todo: this was used in examples, remove in the future - return function (v) { - return Vec2.neo(v.x * x, v.y * y); - }; - }; - /** @hidden @deprecated */ - Vec2.translateFn = function (x, y) { - // todo: this was used in examples, remove in the future - return function (v) { - return Vec2.neo(v.x + x, v.y + y); - }; - }; - return Vec2; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_max$8 = Math.max; - /** @internal */ var math_min$8 = Math.min; - var AABB = /** @class */ (function () { - function AABB(lower, upper) { - if (!(this instanceof AABB)) { - return new AABB(lower, upper); + get: function() { + return 2 * Settings2.linearSlop; + }, + enumerable: false, + configurable: true + }); + Settings2.lengthUnitsPerMeter = 1; + Settings2.maxManifoldPoints = 2; + Settings2.maxPolygonVertices = 12; + Settings2.aabbExtension = 0.1; + Settings2.aabbMultiplier = 2; + Settings2.linearSlop = 5e-3; + Settings2.angularSlop = 2 / 180 * math_PI$7; + Settings2.maxSubSteps = 8; + Settings2.maxTOIContacts = 32; + Settings2.maxTOIIterations = 20; + Settings2.maxDistanceIterations = 20; + Settings2.velocityThreshold = 1; + Settings2.maxLinearCorrection = 0.2; + Settings2.maxAngularCorrection = 8 / 180 * math_PI$7; + Settings2.maxTranslation = 2; + Settings2.maxRotation = 0.5 * math_PI$7; + Settings2.baumgarte = 0.2; + Settings2.toiBaugarte = 0.75; + Settings2.timeToSleep = 0.5; + Settings2.linearSleepTolerance = 0.01; + Settings2.angularSleepTolerance = 2 / 180 * math_PI$7; + return Settings2; + }() + ); + var SettingsInternal = ( + /** @class */ + function() { + function SettingsInternal2() { + } + Object.defineProperty(SettingsInternal2, "maxManifoldPoints", { + get: function() { + return Settings.maxManifoldPoints; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxPolygonVertices", { + get: function() { + return Settings.maxPolygonVertices; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "aabbExtension", { + get: function() { + return Settings.aabbExtension * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "aabbMultiplier", { + get: function() { + return Settings.aabbMultiplier; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "linearSlop", { + get: function() { + return Settings.linearSlop * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "linearSlopSquared", { + get: function() { + return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "angularSlop", { + get: function() { + return Settings.angularSlop; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "polygonRadius", { + get: function() { + return 2 * Settings.linearSlop; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxSubSteps", { + get: function() { + return Settings.maxSubSteps; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxTOIContacts", { + get: function() { + return Settings.maxTOIContacts; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxTOIIterations", { + get: function() { + return Settings.maxTOIIterations; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxDistanceIterations", { + get: function() { + return Settings.maxDistanceIterations; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "velocityThreshold", { + get: function() { + return Settings.velocityThreshold * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxLinearCorrection", { + get: function() { + return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxAngularCorrection", { + get: function() { + return Settings.maxAngularCorrection; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxTranslation", { + get: function() { + return Settings.maxTranslation * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxTranslationSquared", { + get: function() { + return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxRotation", { + get: function() { + return Settings.maxRotation; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxRotationSquared", { + get: function() { + return Settings.maxRotation * Settings.maxRotation; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "baumgarte", { + get: function() { + return Settings.baumgarte; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "toiBaugarte", { + get: function() { + return Settings.toiBaugarte; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "timeToSleep", { + get: function() { + return Settings.timeToSleep; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "linearSleepTolerance", { + get: function() { + return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "linearSleepToleranceSqr", { + get: function() { + return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "angularSleepTolerance", { + get: function() { + return Settings.angularSleepTolerance; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "angularSleepToleranceSqr", { + get: function() { + return Settings.angularSleepTolerance * Settings.angularSleepTolerance; + }, + enumerable: false, + configurable: true + }); + return SettingsInternal2; + }() + ); + var Pool = ( + /** @class */ + function() { + function Pool2(opts) { + this._list = []; + this._max = Infinity; + this._hasCreateFn = false; + this._createCount = 0; + this._hasAllocateFn = false; + this._allocateCount = 0; + this._hasReleaseFn = false; + this._releaseCount = 0; + this._hasDisposeFn = false; + this._disposeCount = 0; + this._list = []; + this._max = opts.max || this._max; + this._createFn = opts.create; + this._hasCreateFn = typeof this._createFn === "function"; + this._allocateFn = opts.allocate; + this._hasAllocateFn = typeof this._allocateFn === "function"; + this._releaseFn = opts.release; + this._hasReleaseFn = typeof this._releaseFn === "function"; + this._disposeFn = opts.dispose; + this._hasDisposeFn = typeof this._disposeFn === "function"; + } + Pool2.prototype.max = function(n2) { + if (typeof n2 === "number") { + this._max = n2; + return this; + } + return this._max; + }; + Pool2.prototype.size = function() { + return this._list.length; + }; + Pool2.prototype.allocate = function() { + var item; + if (this._list.length > 0) { + item = this._list.shift(); + } else { + this._createCount++; + if (this._hasCreateFn) { + item = this._createFn(); + } else { + item = {}; + } + } + this._allocateCount++; + if (this._hasAllocateFn) { + this._allocateFn(item); + } + return item; + }; + Pool2.prototype.release = function(item) { + if (this._list.length < this._max) { + this._releaseCount++; + if (this._hasReleaseFn) { + this._releaseFn(item); + } + this._list.push(item); + } else { + this._disposeCount++; + if (this._hasDisposeFn) { + item = this._disposeFn(item); + } + } + }; + Pool2.prototype.toString = function() { + return " +" + this._createCount + " >" + this._allocateCount + " <" + this._releaseCount + " -" + this._disposeCount + " =" + this._list.length + "/" + this._max; + }; + return Pool2; + }() + ); + var math_abs$9 = Math.abs; + var math_max$7 = Math.max; + var TreeNode = ( + /** @class */ + function() { + function TreeNode2(id) { + this.aabb = new AABB(); + this.userData = null; + this.parent = null; + this.child1 = null; + this.child2 = null; + this.height = -1; + this.id = id; + } + TreeNode2.prototype.toString = function() { + return this.id + ": " + this.userData; + }; + TreeNode2.prototype.isLeaf = function() { + return this.child1 == null; + }; + return TreeNode2; + }() + ); + var poolTreeNode = new Pool({ + create: function() { + return new TreeNode(); + }, + release: function(node) { + node.userData = null; + node.parent = null; + node.child1 = null; + node.child2 = null; + node.height = -1; + node.id = void 0; + } + }); + var DynamicTree = ( + /** @class */ + function() { + function DynamicTree2() { + this.inputPool = new Pool({ + create: function() { + return {}; + }, + release: function(stack) { + } + }); + this.stackPool = new Pool({ + create: function() { + return []; + }, + release: function(stack) { + stack.length = 0; + } + }); + this.iteratorPool = new Pool({ + create: function() { + return new Iterator(); + }, + release: function(iterator) { + iterator.close(); + } + }); + this.m_root = null; + this.m_nodes = {}; + this.m_lastProxyId = 0; + } + DynamicTree2.prototype.getUserData = function(id) { + var node = this.m_nodes[id]; + return node.userData; + }; + DynamicTree2.prototype.getFatAABB = function(id) { + var node = this.m_nodes[id]; + return node.aabb; + }; + DynamicTree2.prototype.allocateNode = function() { + var node = poolTreeNode.allocate(); + node.id = ++this.m_lastProxyId; + this.m_nodes[node.id] = node; + return node; + }; + DynamicTree2.prototype.freeNode = function(node) { + delete this.m_nodes[node.id]; + poolTreeNode.release(node); + }; + DynamicTree2.prototype.createProxy = function(aabb, userData) { + var node = this.allocateNode(); + node.aabb.set(aabb); + AABB.extend(node.aabb, SettingsInternal.aabbExtension); + node.userData = userData; + node.height = 0; + this.insertLeaf(node); + return node.id; + }; + DynamicTree2.prototype.destroyProxy = function(id) { + var node = this.m_nodes[id]; + this.removeLeaf(node); + this.freeNode(node); + }; + DynamicTree2.prototype.moveProxy = function(id, aabb, d2) { + var node = this.m_nodes[id]; + if (node.aabb.contains(aabb)) { + return false; + } + this.removeLeaf(node); + node.aabb.set(aabb); + aabb = node.aabb; + AABB.extend(aabb, SettingsInternal.aabbExtension); + if (d2.x < 0) { + aabb.lowerBound.x += d2.x * SettingsInternal.aabbMultiplier; + } else { + aabb.upperBound.x += d2.x * SettingsInternal.aabbMultiplier; + } + if (d2.y < 0) { + aabb.lowerBound.y += d2.y * SettingsInternal.aabbMultiplier; + } else { + aabb.upperBound.y += d2.y * SettingsInternal.aabbMultiplier; + } + this.insertLeaf(node); + return true; + }; + DynamicTree2.prototype.insertLeaf = function(leaf) { + if (this.m_root == null) { + this.m_root = leaf; + this.m_root.parent = null; + return; + } + var leafAABB = leaf.aabb; + var index = this.m_root; + while (!index.isLeaf()) { + var child1 = index.child1; + var child2 = index.child2; + var area = index.aabb.getPerimeter(); + var combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB); + var cost = 2 * combinedArea; + var inheritanceCost = 2 * (combinedArea - area); + var newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb); + var cost1 = newArea1 + inheritanceCost; + if (!child1.isLeaf()) { + var oldArea = child1.aabb.getPerimeter(); + cost1 -= oldArea; + } + var newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb); + var cost2 = newArea2 + inheritanceCost; + if (!child2.isLeaf()) { + var oldArea = child2.aabb.getPerimeter(); + cost2 -= oldArea; + } + if (cost < cost1 && cost < cost2) { + break; + } + if (cost1 < cost2) { + index = child1; + } else { + index = child2; + } + } + var sibling = index; + var oldParent = sibling.parent; + var newParent = this.allocateNode(); + newParent.parent = oldParent; + newParent.userData = null; + newParent.aabb.combine(leafAABB, sibling.aabb); + newParent.height = sibling.height + 1; + if (oldParent != null) { + if (oldParent.child1 === sibling) { + oldParent.child1 = newParent; + } else { + oldParent.child2 = newParent; + } + newParent.child1 = sibling; + newParent.child2 = leaf; + sibling.parent = newParent; + leaf.parent = newParent; + } else { + newParent.child1 = sibling; + newParent.child2 = leaf; + sibling.parent = newParent; + leaf.parent = newParent; + this.m_root = newParent; + } + index = leaf.parent; + while (index != null) { + index = this.balance(index); + var child1 = index.child1; + var child2 = index.child2; + index.height = 1 + math_max$7(child1.height, child2.height); + index.aabb.combine(child1.aabb, child2.aabb); + index = index.parent; + } + }; + DynamicTree2.prototype.removeLeaf = function(leaf) { + if (leaf === this.m_root) { + this.m_root = null; + return; + } + var parent = leaf.parent; + var grandParent = parent.parent; + var sibling; + if (parent.child1 === leaf) { + sibling = parent.child2; + } else { + sibling = parent.child1; + } + if (grandParent != null) { + if (grandParent.child1 === parent) { + grandParent.child1 = sibling; + } else { + grandParent.child2 = sibling; + } + sibling.parent = grandParent; + this.freeNode(parent); + var index = grandParent; + while (index != null) { + index = this.balance(index); + var child1 = index.child1; + var child2 = index.child2; + index.aabb.combine(child1.aabb, child2.aabb); + index.height = 1 + math_max$7(child1.height, child2.height); + index = index.parent; + } + } else { + this.m_root = sibling; + sibling.parent = null; + this.freeNode(parent); + } + }; + DynamicTree2.prototype.balance = function(iA) { + var A = iA; + if (A.isLeaf() || A.height < 2) { + return iA; + } + var B = A.child1; + var C = A.child2; + var balance = C.height - B.height; + if (balance > 1) { + var F = C.child1; + var G = C.child2; + C.child1 = A; + C.parent = A.parent; + A.parent = C; + if (C.parent != null) { + if (C.parent.child1 === iA) { + C.parent.child1 = C; + } else { + C.parent.child2 = C; } - this.lowerBound = Vec2.zero(); - this.upperBound = Vec2.zero(); - if (typeof lower === "object") { - this.lowerBound.setVec2(lower); + } else { + this.m_root = C; + } + if (F.height > G.height) { + C.child2 = F; + A.child2 = G; + G.parent = A; + A.aabb.combine(B.aabb, G.aabb); + C.aabb.combine(A.aabb, F.aabb); + A.height = 1 + math_max$7(B.height, G.height); + C.height = 1 + math_max$7(A.height, F.height); + } else { + C.child2 = G; + A.child2 = F; + F.parent = A; + A.aabb.combine(B.aabb, F.aabb); + C.aabb.combine(A.aabb, G.aabb); + A.height = 1 + math_max$7(B.height, F.height); + C.height = 1 + math_max$7(A.height, G.height); + } + return C; + } + if (balance < -1) { + var D = B.child1; + var E = B.child2; + B.child1 = A; + B.parent = A.parent; + A.parent = B; + if (B.parent != null) { + if (B.parent.child1 === A) { + B.parent.child1 = B; + } else { + B.parent.child2 = B; } - if (typeof upper === "object") { - this.upperBound.setVec2(upper); + } else { + this.m_root = B; + } + if (D.height > E.height) { + B.child2 = D; + A.child1 = E; + E.parent = A; + A.aabb.combine(C.aabb, E.aabb); + B.aabb.combine(A.aabb, D.aabb); + A.height = 1 + math_max$7(C.height, E.height); + B.height = 1 + math_max$7(A.height, D.height); + } else { + B.child2 = E; + A.child1 = D; + D.parent = A; + A.aabb.combine(C.aabb, D.aabb); + B.aabb.combine(A.aabb, E.aabb); + A.height = 1 + math_max$7(C.height, D.height); + B.height = 1 + math_max$7(A.height, E.height); + } + return B; + } + return A; + }; + DynamicTree2.prototype.getHeight = function() { + if (this.m_root == null) { + return 0; + } + return this.m_root.height; + }; + DynamicTree2.prototype.getAreaRatio = function() { + if (this.m_root == null) { + return 0; + } + var root = this.m_root; + var rootArea = root.aabb.getPerimeter(); + var totalArea = 0; + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + if (node.height < 0) { + continue; + } + totalArea += node.aabb.getPerimeter(); + } + this.iteratorPool.release(it); + return totalArea / rootArea; + }; + DynamicTree2.prototype.computeHeight = function(id) { + var node; + if (typeof id !== "undefined") { + node = this.m_nodes[id]; + } else { + node = this.m_root; + } + if (node.isLeaf()) { + return 0; + } + var height1 = this.computeHeight(node.child1.id); + var height2 = this.computeHeight(node.child2.id); + return 1 + math_max$7(height1, height2); + }; + DynamicTree2.prototype.validateStructure = function(node) { + if (node == null) { + return; + } + if (node === this.m_root) ; + var child1 = node.child1; + var child2 = node.child2; + if (node.isLeaf()) { + return; + } + this.validateStructure(child1); + this.validateStructure(child2); + }; + DynamicTree2.prototype.validateMetrics = function(node) { + if (node == null) { + return; + } + var child1 = node.child1; + var child2 = node.child2; + if (node.isLeaf()) { + return; + } + child1.height; + child2.height; + var aabb = new AABB(); + aabb.combine(child1.aabb, child2.aabb); + this.validateMetrics(child1); + this.validateMetrics(child2); + }; + DynamicTree2.prototype.validate = function() { + return; + }; + DynamicTree2.prototype.getMaxBalance = function() { + var maxBalance = 0; + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + if (node.height <= 1) { + continue; + } + var balance = math_abs$9(node.child2.height - node.child1.height); + maxBalance = math_max$7(maxBalance, balance); + } + this.iteratorPool.release(it); + return maxBalance; + }; + DynamicTree2.prototype.rebuildBottomUp = function() { + var nodes = []; + var count = 0; + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + if (node.height < 0) { + continue; + } + if (node.isLeaf()) { + node.parent = null; + nodes[count] = node; + ++count; + } else { + this.freeNode(node); + } + } + this.iteratorPool.release(it); + while (count > 1) { + var minCost = Infinity; + var iMin = -1; + var jMin = -1; + for (var i = 0; i < count; ++i) { + var aabbi = nodes[i].aabb; + for (var j = i + 1; j < count; ++j) { + var aabbj = nodes[j].aabb; + var cost = AABB.combinedPerimeter(aabbi, aabbj); + if (cost < minCost) { + iMin = i; + jMin = j; + minCost = cost; + } } - else if (typeof lower === "object") { - this.upperBound.setVec2(lower); + } + var child1 = nodes[iMin]; + var child2 = nodes[jMin]; + var parent_1 = this.allocateNode(); + parent_1.child1 = child1; + parent_1.child2 = child2; + parent_1.height = 1 + math_max$7(child1.height, child2.height); + parent_1.aabb.combine(child1.aabb, child2.aabb); + parent_1.parent = null; + child1.parent = parent_1; + child2.parent = parent_1; + nodes[jMin] = nodes[count - 1]; + nodes[iMin] = parent_1; + --count; + } + this.m_root = nodes[0]; + }; + DynamicTree2.prototype.shiftOrigin = function(newOrigin) { + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + var aabb = node.aabb; + aabb.lowerBound.x -= newOrigin.x; + aabb.lowerBound.y -= newOrigin.y; + aabb.upperBound.x -= newOrigin.x; + aabb.upperBound.y -= newOrigin.y; + } + this.iteratorPool.release(it); + }; + DynamicTree2.prototype.query = function(aabb, queryCallback) { + var stack = this.stackPool.allocate(); + stack.push(this.m_root); + while (stack.length > 0) { + var node = stack.pop(); + if (node == null) { + continue; + } + if (AABB.testOverlap(node.aabb, aabb)) { + if (node.isLeaf()) { + var proceed = queryCallback(node.id); + if (proceed === false) { + return; + } + } else { + stack.push(node.child1); + stack.push(node.child2); } + } } - /** - * Verify that the bounds are sorted. - */ - AABB.prototype.isValid = function () { - return AABB.isValid(this); - }; - AABB.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec2.isValid(obj.lowerBound) && Vec2.isValid(obj.upperBound) && Vec2.sub(obj.upperBound, obj.lowerBound).lengthSquared() >= 0; - }; - AABB.assert = function (o) { - }; - /** - * Get the center of the AABB. - */ - AABB.prototype.getCenter = function () { - return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5); - }; - /** - * Get the extents of the AABB (half-widths). - */ - AABB.prototype.getExtents = function () { - return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5); - }; - /** - * Get the perimeter length. - */ - AABB.prototype.getPerimeter = function () { - return 2.0 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y); - }; - /** - * Combine one or two AABB into this one. - */ - AABB.prototype.combine = function (a, b) { - b = b || this; - var lowerA = a.lowerBound; - var upperA = a.upperBound; - var lowerB = b.lowerBound; - var upperB = b.upperBound; - var lowerX = math_min$8(lowerA.x, lowerB.x); - var lowerY = math_min$8(lowerA.y, lowerB.y); - var upperX = math_max$8(upperB.x, upperA.x); - var upperY = math_max$8(upperB.y, upperA.y); - this.lowerBound.setNum(lowerX, lowerY); - this.upperBound.setNum(upperX, upperY); - }; - AABB.prototype.combinePoints = function (a, b) { - this.lowerBound.setNum(math_min$8(a.x, b.x), math_min$8(a.y, b.y)); - this.upperBound.setNum(math_max$8(a.x, b.x), math_max$8(a.y, b.y)); - }; - AABB.prototype.set = function (aabb) { - this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y); - this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y); - }; - AABB.prototype.contains = function (aabb) { - var result = true; - result = result && this.lowerBound.x <= aabb.lowerBound.x; - result = result && this.lowerBound.y <= aabb.lowerBound.y; - result = result && aabb.upperBound.x <= this.upperBound.x; - result = result && aabb.upperBound.y <= this.upperBound.y; - return result; - }; - AABB.prototype.extend = function (value) { - AABB.extend(this, value); - return this; - }; - AABB.extend = function (out, value) { - out.lowerBound.x -= value; - out.lowerBound.y -= value; - out.upperBound.x += value; - out.upperBound.y += value; - return out; - }; - AABB.testOverlap = function (a, b) { - var d1x = b.lowerBound.x - a.upperBound.x; - var d2x = a.lowerBound.x - b.upperBound.x; - var d1y = b.lowerBound.y - a.upperBound.y; - var d2y = a.lowerBound.y - b.upperBound.y; - if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) { - return false; + this.stackPool.release(stack); + }; + DynamicTree2.prototype.rayCast = function(input2, rayCastCallback) { + var p1 = input2.p1; + var p2 = input2.p2; + var r = Vec2.sub(p2, p1); + r.normalize(); + var v3 = Vec2.crossNumVec2(1, r); + var abs_v = Vec2.abs(v3); + var maxFraction = input2.maxFraction; + var segmentAABB = new AABB(); + var t = Vec2.combine(1 - maxFraction, p1, maxFraction, p2); + segmentAABB.combinePoints(p1, t); + var stack = this.stackPool.allocate(); + var subInput = this.inputPool.allocate(); + stack.push(this.m_root); + while (stack.length > 0) { + var node = stack.pop(); + if (node == null) { + continue; + } + if (AABB.testOverlap(node.aabb, segmentAABB) === false) { + continue; + } + var c2 = node.aabb.getCenter(); + var h = node.aabb.getExtents(); + var separation = math_abs$9(Vec2.dot(v3, Vec2.sub(p1, c2))) - Vec2.dot(abs_v, h); + if (separation > 0) { + continue; + } + if (node.isLeaf()) { + subInput.p1 = Vec2.clone(input2.p1); + subInput.p2 = Vec2.clone(input2.p2); + subInput.maxFraction = maxFraction; + var value = rayCastCallback(subInput, node.id); + if (value === 0) { + break; + } else if (value > 0) { + maxFraction = value; + t = Vec2.combine(1 - maxFraction, p1, maxFraction, p2); + segmentAABB.combinePoints(p1, t); } - return true; - }; - AABB.areEqual = function (a, b) { - return Vec2.areEqual(a.lowerBound, b.lowerBound) && Vec2.areEqual(a.upperBound, b.upperBound); - }; - AABB.diff = function (a, b) { - var wD = math_max$8(0, math_min$8(a.upperBound.x, b.upperBound.x) - math_max$8(b.lowerBound.x, a.lowerBound.x)); - var hD = math_max$8(0, math_min$8(a.upperBound.y, b.upperBound.y) - math_max$8(b.lowerBound.y, a.lowerBound.y)); - var wA = a.upperBound.x - a.lowerBound.x; - var hA = a.upperBound.y - a.lowerBound.y; - var wB = b.upperBound.x - b.lowerBound.x; - var hB = b.upperBound.y - b.lowerBound.y; - return wA * hA + wB * hB - wD * hD; - }; - AABB.prototype.rayCast = function (output, input) { - // From Real-time Collision Detection, p179. - var tmin = -Infinity; - var tmax = Infinity; - var p = input.p1; - var d = Vec2.sub(input.p2, input.p1); - var absD = Vec2.abs(d); - var normal = Vec2.zero(); - for (var f = "x"; f !== null; f = (f === "x" ? "y" : null)) { - if (absD.x < EPSILON) { - // Parallel. - if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) { - return false; - } - } - else { - var inv_d = 1.0 / d[f]; - var t1 = (this.lowerBound[f] - p[f]) * inv_d; - var t2 = (this.upperBound[f] - p[f]) * inv_d; - // Sign of the normal vector. - var s = -1.0; - if (t1 > t2) { - var temp = t1; - t1 = t2; - t2 = temp; - s = 1.0; - } - // Push the min up - if (t1 > tmin) { - normal.setZero(); - normal[f] = s; - tmin = t1; - } - // Pull the max down - tmax = math_min$8(tmax, t2); - if (tmin > tmax) { - return false; - } - } + } else { + stack.push(node.child1); + stack.push(node.child2); + } + } + this.stackPool.release(stack); + this.inputPool.release(subInput); + }; + return DynamicTree2; + }() + ); + var Iterator = ( + /** @class */ + function() { + function Iterator2() { + this.parents = []; + this.states = []; + } + Iterator2.prototype.preorder = function(root) { + this.parents.length = 0; + this.parents.push(root); + this.states.length = 0; + this.states.push(0); + return this; + }; + Iterator2.prototype.next = function() { + while (this.parents.length > 0) { + var i = this.parents.length - 1; + var node = this.parents[i]; + if (this.states[i] === 0) { + this.states[i] = 1; + return node; + } + if (this.states[i] === 1) { + this.states[i] = 2; + if (node.child1) { + this.parents.push(node.child1); + this.states.push(1); + return node.child1; } - // Does the ray start inside the box? - // Does the ray intersect beyond the max fraction? - if (tmin < 0.0 || input.maxFraction < tmin) { - return false; + } + if (this.states[i] === 2) { + this.states[i] = 3; + if (node.child2) { + this.parents.push(node.child2); + this.states.push(1); + return node.child2; } - // Intersection. - output.fraction = tmin; - output.normal = normal; + } + this.parents.pop(); + this.states.pop(); + } + }; + Iterator2.prototype.close = function() { + this.parents.length = 0; + }; + return Iterator2; + }() + ); + var math_max$6 = Math.max; + var math_min$7 = Math.min; + var BroadPhase = ( + /** @class */ + function() { + function BroadPhase2() { + var _this = this; + this.m_tree = new DynamicTree(); + this.m_moveBuffer = []; + this.query = function(aabb, queryCallback) { + _this.m_tree.query(aabb, queryCallback); + }; + this.queryCallback = function(proxyId) { + if (proxyId === _this.m_queryProxyId) { return true; + } + var proxyIdA = math_min$7(proxyId, _this.m_queryProxyId); + var proxyIdB = math_max$6(proxyId, _this.m_queryProxyId); + var userDataA = _this.m_tree.getUserData(proxyIdA); + var userDataB = _this.m_tree.getUserData(proxyIdB); + _this.m_callback(userDataA, userDataB); + return true; }; - /** @hidden */ - AABB.prototype.toString = function () { - return JSON.stringify(this); - }; - AABB.combinePoints = function (out, a, b) { - out.lowerBound.x = math_min$8(a.x, b.x); - out.lowerBound.y = math_min$8(a.y, b.y); - out.upperBound.x = math_max$8(a.x, b.x); - out.upperBound.y = math_max$8(a.y, b.y); - return out; - }; - AABB.combinedPerimeter = function (a, b) { - var lx = math_min$8(a.lowerBound.x, b.lowerBound.x); - var ly = math_min$8(a.lowerBound.y, b.lowerBound.y); - var ux = math_max$8(a.upperBound.x, b.upperBound.x); - var uy = math_max$8(a.upperBound.y, b.upperBound.y); - return 2.0 * (ux - lx + uy - ly); - }; - return AABB; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_PI$7 = Math.PI; - /** - * Tuning constants based on meters-kilograms-seconds (MKS) units. - * - * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units. - */ - var Settings = /** @class */ (function () { - function Settings() { - } - Object.defineProperty(Settings, "polygonRadius", { - /** - * The radius of the polygon/edge shape skin. This should not be modified. - * Making this smaller means polygons will have an insufficient buffer for - * continuous collision. Making it larger may create artifacts for vertex - * collision. - */ - get: function () { return 2.0 * Settings.linearSlop; }, - enumerable: false, - configurable: true - }); - /** - * You can use this to change the length scale used by your game. - * - * For example for inches you could use 39.4. - */ - Settings.lengthUnitsPerMeter = 1.0; - // Collision - /** - * The maximum number of contact points between two convex shapes. Do not change - * this value. - */ - Settings.maxManifoldPoints = 2; - /** - * The maximum number of vertices on a convex polygon. You cannot increase this - * too much because BlockAllocator has a maximum object size. - */ - Settings.maxPolygonVertices = 12; - /** - * This is used to fatten AABBs in the dynamic tree. This allows proxies to move - * by a small amount without triggering a tree adjustment. This is in meters. - */ - Settings.aabbExtension = 0.1; - /** - * This is used to fatten AABBs in the dynamic tree. This is used to predict the - * future position based on the current displacement. This is a dimensionless - * multiplier. - */ - Settings.aabbMultiplier = 2.0; - /** - * A small length used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - Settings.linearSlop = 0.005; - /** - * A small angle used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - Settings.angularSlop = (2.0 / 180.0 * math_PI$7); - /** - * Maximum number of sub-steps per contact in continuous physics simulation. - */ - Settings.maxSubSteps = 8; - // Dynamics - /** - * Maximum number of contacts to be handled to solve a TOI impact. - */ - Settings.maxTOIContacts = 32; - /** - * Maximum iterations to solve a TOI. - */ - Settings.maxTOIIterations = 20; - /** - * Maximum iterations to find Distance. - */ - Settings.maxDistanceIterations = 20; - /** - * A velocity threshold for elastic collisions. Any collision with a relative - * linear velocity below this threshold will be treated as inelastic. - */ - Settings.velocityThreshold = 1.0; - /** - * The maximum linear position correction used when solving constraints. This - * helps to prevent overshoot. - */ - Settings.maxLinearCorrection = 0.2; - /** - * The maximum angular position correction used when solving constraints. This - * helps to prevent overshoot. - */ - Settings.maxAngularCorrection = (8.0 / 180.0 * math_PI$7); - /** - * The maximum linear velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - Settings.maxTranslation = 2.0; - /** - * The maximum angular velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - Settings.maxRotation = (0.5 * math_PI$7); - /** - * This scale factor controls how fast overlap is resolved. Ideally this would - * be 1 so that overlap is removed in one time step. However using values close - * to 1 often lead to overshoot. - */ - Settings.baumgarte = 0.2; - Settings.toiBaugarte = 0.75; - // Sleep - /** - * The time that a body must be still before it will go to sleep. - */ - Settings.timeToSleep = 0.5; - /** - * A body cannot sleep if its linear velocity is above this tolerance. - */ - Settings.linearSleepTolerance = 0.01; - /** - * A body cannot sleep if its angular velocity is above this tolerance. - */ - Settings.angularSleepTolerance = (2.0 / 180.0 * math_PI$7); - return Settings; - }()); - /** @internal */ - var SettingsInternal = /** @class */ (function () { - function SettingsInternal() { - } - Object.defineProperty(SettingsInternal, "maxManifoldPoints", { - get: function () { - return Settings.maxManifoldPoints; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxPolygonVertices", { - get: function () { - return Settings.maxPolygonVertices; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "aabbExtension", { - get: function () { - return Settings.aabbExtension * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "aabbMultiplier", { - get: function () { - return Settings.aabbMultiplier; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "linearSlop", { - get: function () { - return Settings.linearSlop * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "linearSlopSquared", { - get: function () { - return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "angularSlop", { - get: function () { - return Settings.angularSlop; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "polygonRadius", { - get: function () { - return 2.0 * Settings.linearSlop; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxSubSteps", { - get: function () { - return Settings.maxSubSteps; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxTOIContacts", { - get: function () { - return Settings.maxTOIContacts; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxTOIIterations", { - get: function () { - return Settings.maxTOIIterations; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxDistanceIterations", { - get: function () { - return Settings.maxDistanceIterations; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "velocityThreshold", { - get: function () { - return Settings.velocityThreshold * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxLinearCorrection", { - get: function () { - return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxAngularCorrection", { - get: function () { - return Settings.maxAngularCorrection; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxTranslation", { - get: function () { - return Settings.maxTranslation * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxTranslationSquared", { - get: function () { - return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxRotation", { - get: function () { - return Settings.maxRotation; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxRotationSquared", { - get: function () { - return Settings.maxRotation * Settings.maxRotation; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "baumgarte", { - get: function () { - return Settings.baumgarte; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "toiBaugarte", { - get: function () { - return Settings.toiBaugarte; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "timeToSleep", { - get: function () { - return Settings.timeToSleep; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "linearSleepTolerance", { - get: function () { - return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "linearSleepToleranceSqr", { - get: function () { - return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "angularSleepTolerance", { - get: function () { - return Settings.angularSleepTolerance; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "angularSleepToleranceSqr", { - get: function () { - return Settings.angularSleepTolerance * Settings.angularSleepTolerance; - }, - enumerable: false, - configurable: true - }); - return SettingsInternal; - }()); - - /* - * Copyright (c) 2016-2018 Ali Shakiba http://shakiba.me/planck.js - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - */ - /** @internal */ - var Pool = /** @class */ (function () { - function Pool(opts) { - this._list = []; - this._max = Infinity; - this._hasCreateFn = false; - this._createCount = 0; - this._hasAllocateFn = false; - this._allocateCount = 0; - this._hasReleaseFn = false; - this._releaseCount = 0; - this._hasDisposeFn = false; - this._disposeCount = 0; - this._list = []; - this._max = opts.max || this._max; - this._createFn = opts.create; - this._hasCreateFn = typeof this._createFn === "function"; - this._allocateFn = opts.allocate; - this._hasAllocateFn = typeof this._allocateFn === "function"; - this._releaseFn = opts.release; - this._hasReleaseFn = typeof this._releaseFn === "function"; - this._disposeFn = opts.dispose; - this._hasDisposeFn = typeof this._disposeFn === "function"; - } - Pool.prototype.max = function (n) { - if (typeof n === "number") { - this._max = n; - return this; - } - return this._max; - }; - Pool.prototype.size = function () { - return this._list.length; - }; - Pool.prototype.allocate = function () { - var item; - if (this._list.length > 0) { - item = this._list.shift(); - } - else { - this._createCount++; - if (this._hasCreateFn) { - item = this._createFn(); - } - else { - // tslint:disable-next-line:no-object-literal-type-assertion - item = {}; - } - } - this._allocateCount++; - if (this._hasAllocateFn) { - this._allocateFn(item); - } - return item; - }; - Pool.prototype.release = function (item) { - if (this._list.length < this._max) { - this._releaseCount++; - if (this._hasReleaseFn) { - this._releaseFn(item); - } - this._list.push(item); - } - else { - this._disposeCount++; - if (this._hasDisposeFn) { - item = this._disposeFn(item); - } - } - }; - Pool.prototype.toString = function () { - return " +" + this._createCount + " >" + this._allocateCount + " <" + this._releaseCount + " -" - + this._disposeCount + " =" + this._list.length + "/" + this._max; - }; - return Pool; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$9 = Math.abs; - /** @internal */ var math_max$7 = Math.max; - /** - * A node in the dynamic tree. The client does not interact with this directly. - */ - var TreeNode = /** @class */ (function () { - function TreeNode(id) { - /** Enlarged AABB */ - this.aabb = new AABB(); - this.userData = null; - this.parent = null; - this.child1 = null; - this.child2 = null; - /** 0: leaf, -1: free node */ - this.height = -1; - this.id = id; - } - /** @internal */ - TreeNode.prototype.toString = function () { - return this.id + ": " + this.userData; - }; - TreeNode.prototype.isLeaf = function () { - return this.child1 == null; - }; - return TreeNode; - }()); - /** @internal */ var poolTreeNode = new Pool({ - create: function () { - return new TreeNode(); - }, - release: function (node) { - node.userData = null; - node.parent = null; - node.child1 = null; - node.child2 = null; - node.height = -1; - node.id = undefined; + } + BroadPhase2.prototype.getUserData = function(proxyId) { + return this.m_tree.getUserData(proxyId); + }; + BroadPhase2.prototype.testOverlap = function(proxyIdA, proxyIdB) { + var aabbA = this.m_tree.getFatAABB(proxyIdA); + var aabbB = this.m_tree.getFatAABB(proxyIdB); + return AABB.testOverlap(aabbA, aabbB); + }; + BroadPhase2.prototype.getFatAABB = function(proxyId) { + return this.m_tree.getFatAABB(proxyId); + }; + BroadPhase2.prototype.getProxyCount = function() { + return this.m_moveBuffer.length; + }; + BroadPhase2.prototype.getTreeHeight = function() { + return this.m_tree.getHeight(); + }; + BroadPhase2.prototype.getTreeBalance = function() { + return this.m_tree.getMaxBalance(); + }; + BroadPhase2.prototype.getTreeQuality = function() { + return this.m_tree.getAreaRatio(); + }; + BroadPhase2.prototype.rayCast = function(input2, rayCastCallback) { + this.m_tree.rayCast(input2, rayCastCallback); + }; + BroadPhase2.prototype.shiftOrigin = function(newOrigin) { + this.m_tree.shiftOrigin(newOrigin); + }; + BroadPhase2.prototype.createProxy = function(aabb, userData) { + var proxyId = this.m_tree.createProxy(aabb, userData); + this.bufferMove(proxyId); + return proxyId; + }; + BroadPhase2.prototype.destroyProxy = function(proxyId) { + this.unbufferMove(proxyId); + this.m_tree.destroyProxy(proxyId); + }; + BroadPhase2.prototype.moveProxy = function(proxyId, aabb, displacement2) { + var changed = this.m_tree.moveProxy(proxyId, aabb, displacement2); + if (changed) { + this.bufferMove(proxyId); } - }); - /** - * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A - * dynamic tree arranges data in a binary tree to accelerate queries such as - * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we - * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger - * than the client object. This allows the client object to move by small - * amounts without triggering a tree update. - * - * Nodes are pooled and relocatable, so we use node indices rather than - * pointers. - */ - var DynamicTree = /** @class */ (function () { - function DynamicTree() { - this.inputPool = new Pool({ - create: function () { - // tslint:disable-next-line:no-object-literal-type-assertion - return {}; - }, - release: function (stack) { - } - }); - this.stackPool = new Pool({ - create: function () { - return []; - }, - release: function (stack) { - stack.length = 0; - } - }); - this.iteratorPool = new Pool({ - create: function () { - return new Iterator(); - }, - release: function (iterator) { - iterator.close(); - } - }); - this.m_root = null; - this.m_nodes = {}; - this.m_lastProxyId = 0; + }; + BroadPhase2.prototype.touchProxy = function(proxyId) { + this.bufferMove(proxyId); + }; + BroadPhase2.prototype.bufferMove = function(proxyId) { + this.m_moveBuffer.push(proxyId); + }; + BroadPhase2.prototype.unbufferMove = function(proxyId) { + for (var i = 0; i < this.m_moveBuffer.length; ++i) { + if (this.m_moveBuffer[i] === proxyId) { + this.m_moveBuffer[i] = null; + } } - /** - * Get proxy user data. - * - * @return the proxy user data or 0 if the id is invalid. - */ - DynamicTree.prototype.getUserData = function (id) { - var node = this.m_nodes[id]; - return node.userData; - }; - /** - * Get the fat AABB for a node id. - * - * @return the proxy user data or 0 if the id is invalid. - */ - DynamicTree.prototype.getFatAABB = function (id) { - var node = this.m_nodes[id]; - return node.aabb; - }; - DynamicTree.prototype.allocateNode = function () { - var node = poolTreeNode.allocate(); - node.id = ++this.m_lastProxyId; - this.m_nodes[node.id] = node; - return node; - }; - DynamicTree.prototype.freeNode = function (node) { - // tslint:disable-next-line:no-dynamic-delete - delete this.m_nodes[node.id]; - poolTreeNode.release(node); - }; - /** - * Create a proxy in the tree as a leaf node. We return the index of the node - * instead of a pointer so that we can grow the node pool. - * - * Create a proxy. Provide a tight fitting AABB and a userData pointer. - */ - DynamicTree.prototype.createProxy = function (aabb, userData) { - var node = this.allocateNode(); - node.aabb.set(aabb); - // Fatten the aabb. - AABB.extend(node.aabb, SettingsInternal.aabbExtension); - node.userData = userData; - node.height = 0; - this.insertLeaf(node); - return node.id; - }; - /** - * Destroy a proxy. This asserts if the id is invalid. - */ - DynamicTree.prototype.destroyProxy = function (id) { - var node = this.m_nodes[id]; - this.removeLeaf(node); - this.freeNode(node); - }; - /** - * Move a proxy with a swepted AABB. If the proxy has moved outside of its - * fattened AABB, then the proxy is removed from the tree and re-inserted. - * Otherwise the function returns immediately. - * - * @param d Displacement - * - * @return true if the proxy was re-inserted. - */ - DynamicTree.prototype.moveProxy = function (id, aabb, d) { - var node = this.m_nodes[id]; - if (node.aabb.contains(aabb)) { - return false; - } - this.removeLeaf(node); - node.aabb.set(aabb); - // Extend AABB. - aabb = node.aabb; - AABB.extend(aabb, SettingsInternal.aabbExtension); - // Predict AABB displacement. - // const d = Vec2.mul(Settings.aabbMultiplier, displacement); - if (d.x < 0.0) { - aabb.lowerBound.x += d.x * SettingsInternal.aabbMultiplier; - } - else { - aabb.upperBound.x += d.x * SettingsInternal.aabbMultiplier; - } - if (d.y < 0.0) { - aabb.lowerBound.y += d.y * SettingsInternal.aabbMultiplier; - } - else { - aabb.upperBound.y += d.y * SettingsInternal.aabbMultiplier; - } - this.insertLeaf(node); - return true; + }; + BroadPhase2.prototype.updatePairs = function(addPairCallback) { + this.m_callback = addPairCallback; + while (this.m_moveBuffer.length > 0) { + this.m_queryProxyId = this.m_moveBuffer.pop(); + if (this.m_queryProxyId === null) { + continue; + } + var fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId); + this.m_tree.query(fatAABB, this.queryCallback); + } + }; + return BroadPhase2; + }() + ); + var math_sin$2 = Math.sin; + var math_cos$2 = Math.cos; + var math_sqrt$6 = Math.sqrt; + function vec2(x2, y) { + return { x: x2, y }; + } + function rotation(angle) { + return { s: math_sin$2(angle), c: math_cos$2(angle) }; + } + function setVec2(out, x2, y) { + out.x = x2; + out.y = y; + return out; + } + function copyVec2(out, w) { + out.x = w.x; + out.y = w.y; + return out; + } + function zeroVec2(out) { + out.x = 0; + out.y = 0; + return out; + } + function negVec2(out) { + out.x = -out.x; + out.y = -out.y; + return out; + } + function plusVec2(out, w) { + out.x += w.x; + out.y += w.y; + return out; + } + function addVec2(out, v3, w) { + out.x = v3.x + w.x; + out.y = v3.x + w.y; + return out; + } + function minusVec2(out, w) { + out.x -= w.x; + out.y -= w.y; + return out; + } + function subVec2(out, v3, w) { + out.x = v3.x - w.x; + out.y = v3.y - w.y; + return out; + } + function mulVec2(out, m) { + out.x *= m; + out.y *= m; + return out; + } + function scaleVec2(out, m, w) { + out.x = m * w.x; + out.y = m * w.y; + return out; + } + function plusScaleVec2(out, m, w) { + out.x += m * w.x; + out.y += m * w.y; + return out; + } + function minusScaleVec2(out, m, w) { + out.x -= m * w.x; + out.y -= m * w.y; + return out; + } + function combine2Vec2(out, am, a2, bm, b2) { + out.x = am * a2.x + bm * b2.x; + out.y = am * a2.y + bm * b2.y; + return out; + } + function combine3Vec2(out, am, a2, bm, b2, cm, c2) { + out.x = am * a2.x + bm * b2.x + cm * c2.x; + out.y = am * a2.y + bm * b2.y + cm * c2.y; + return out; + } + function normalizeVec2Length(out) { + var length2 = math_sqrt$6(out.x * out.x + out.y * out.y); + if (length2 !== 0) { + var invLength = 1 / length2; + out.x *= invLength; + out.y *= invLength; + } + return length2; + } + function normalizeVec2(out) { + var length2 = math_sqrt$6(out.x * out.x + out.y * out.y); + if (length2 > 0) { + var invLength = 1 / length2; + out.x *= invLength; + out.y *= invLength; + } + return out; + } + function crossVec2Num(out, v3, w) { + var x2 = w * v3.y; + var y = -w * v3.x; + out.x = x2; + out.y = y; + return out; + } + function crossNumVec2(out, w, v3) { + var x2 = -w * v3.y; + var y = w * v3.x; + out.x = x2; + out.y = y; + return out; + } + function crossVec2Vec2(a2, b2) { + return a2.x * b2.y - a2.y * b2.x; + } + function dotVec2(a2, b2) { + return a2.x * b2.x + a2.y * b2.y; + } + function lengthSqrVec2(a2) { + return a2.x * a2.x + a2.y * a2.y; + } + function distVec2(a2, b2) { + var dx = a2.x - b2.x; + var dy = a2.y - b2.y; + return math_sqrt$6(dx * dx + dy * dy); + } + function distSqrVec2(a2, b2) { + var dx = a2.x - b2.x; + var dy = a2.y - b2.y; + return dx * dx + dy * dy; + } + function setRotAngle(out, a2) { + out.c = math_cos$2(a2); + out.s = math_sin$2(a2); + return out; + } + function rotVec2(out, q, v3) { + out.x = q.c * v3.x - q.s * v3.y; + out.y = q.s * v3.x + q.c * v3.y; + return out; + } + function derotVec2(out, q, v3) { + var x2 = q.c * v3.x + q.s * v3.y; + var y = -q.s * v3.x + q.c * v3.y; + out.x = x2; + out.y = y; + return out; + } + function rerotVec2(out, before, after, v3) { + var x0 = before.c * v3.x + before.s * v3.y; + var y0 = -before.s * v3.x + before.c * v3.y; + var x2 = after.c * x0 - after.s * y0; + var y = after.s * x0 + after.c * y0; + out.x = x2; + out.y = y; + return out; + } + function transform(x2, y, a2) { + return { p: vec2(x2, y), q: rotation(a2) }; + } + function copyTransform(out, transform2) { + out.p.x = transform2.p.x; + out.p.y = transform2.p.y; + out.q.s = transform2.q.s; + out.q.c = transform2.q.c; + return out; + } + function transformVec2(out, xf2, v3) { + var x2 = xf2.q.c * v3.x - xf2.q.s * v3.y + xf2.p.x; + var y = xf2.q.s * v3.x + xf2.q.c * v3.y + xf2.p.y; + out.x = x2; + out.y = y; + return out; + } + function detransformVec2(out, xf2, v3) { + var px = v3.x - xf2.p.x; + var py = v3.y - xf2.p.y; + var x2 = xf2.q.c * px + xf2.q.s * py; + var y = -xf2.q.s * px + xf2.q.c * py; + out.x = x2; + out.y = y; + return out; + } + function retransformVec2(out, from, to, v3) { + var x0 = from.q.c * v3.x - from.q.s * v3.y + from.p.x; + var y0 = from.q.s * v3.x + from.q.c * v3.y + from.p.y; + var px = x0 - to.p.x; + var py = y0 - to.p.y; + var x2 = to.q.c * px + to.q.s * py; + var y = -to.q.s * px + to.q.c * py; + out.x = x2; + out.y = y; + return out; + } + function detransformTransform(out, a2, b2) { + var c2 = a2.q.c * b2.q.c + a2.q.s * b2.q.s; + var s2 = a2.q.c * b2.q.s - a2.q.s * b2.q.c; + var x2 = a2.q.c * (b2.p.x - a2.p.x) + a2.q.s * (b2.p.y - a2.p.y); + var y = -a2.q.s * (b2.p.x - a2.p.x) + a2.q.c * (b2.p.y - a2.p.y); + out.q.c = c2; + out.q.s = s2; + out.p.x = x2; + out.p.y = y; + return out; + } + var math_sin$1 = Math.sin; + var math_cos$1 = Math.cos; + var math_atan2$2 = Math.atan2; + var Rot = ( + /** @class */ + function() { + function Rot2(angle) { + if (!(this instanceof Rot2)) { + return new Rot2(angle); + } + if (typeof angle === "number") { + this.setAngle(angle); + } else if (typeof angle === "object") { + this.setRot(angle); + } else { + this.setIdentity(); + } + } + Rot2.neo = function(angle) { + var obj = Object.create(Rot2.prototype); + obj.setAngle(angle); + return obj; + }; + Rot2.clone = function(rot) { + var obj = Object.create(Rot2.prototype); + obj.s = rot.s; + obj.c = rot.c; + return obj; + }; + Rot2.identity = function() { + var obj = Object.create(Rot2.prototype); + obj.s = 0; + obj.c = 1; + return obj; + }; + Rot2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Number.isFinite(obj.s) && Number.isFinite(obj.c); + }; + Rot2.assert = function(o) { + }; + Rot2.prototype.setIdentity = function() { + this.s = 0; + this.c = 1; + }; + Rot2.prototype.set = function(angle) { + if (typeof angle === "object") { + this.s = angle.s; + this.c = angle.c; + } else { + this.s = math_sin$1(angle); + this.c = math_cos$1(angle); + } + }; + Rot2.prototype.setRot = function(angle) { + this.s = angle.s; + this.c = angle.c; + }; + Rot2.prototype.setAngle = function(angle) { + this.s = math_sin$1(angle); + this.c = math_cos$1(angle); + }; + Rot2.prototype.getAngle = function() { + return math_atan2$2(this.s, this.c); + }; + Rot2.prototype.getXAxis = function() { + return Vec2.neo(this.c, this.s); + }; + Rot2.prototype.getYAxis = function() { + return Vec2.neo(-this.s, this.c); + }; + Rot2.mul = function(rot, m) { + if ("c" in m && "s" in m) { + var qr = Rot2.identity(); + qr.s = rot.s * m.c + rot.c * m.s; + qr.c = rot.c * m.c - rot.s * m.s; + return qr; + } else if ("x" in m && "y" in m) { + return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y); + } + }; + Rot2.mulRot = function(rot, m) { + var qr = Rot2.identity(); + qr.s = rot.s * m.c + rot.c * m.s; + qr.c = rot.c * m.c - rot.s * m.s; + return qr; + }; + Rot2.mulVec2 = function(rot, m) { + return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y); + }; + Rot2.mulSub = function(rot, v3, w) { + var x2 = rot.c * (v3.x - w.x) - rot.s * (v3.y - w.y); + var y = rot.s * (v3.x - w.x) + rot.c * (v3.y - w.y); + return Vec2.neo(x2, y); + }; + Rot2.mulT = function(rot, m) { + if ("c" in m && "s" in m) { + var qr = Rot2.identity(); + qr.s = rot.c * m.s - rot.s * m.c; + qr.c = rot.c * m.c + rot.s * m.s; + return qr; + } else if ("x" in m && "y" in m) { + return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y); + } + }; + Rot2.mulTRot = function(rot, m) { + var qr = Rot2.identity(); + qr.s = rot.c * m.s - rot.s * m.c; + qr.c = rot.c * m.c + rot.s * m.s; + return qr; + }; + Rot2.mulTVec2 = function(rot, m) { + return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y); + }; + return Rot2; + }() + ); + var math_atan2$1 = Math.atan2; + var math_PI$6 = Math.PI; + var temp$7 = vec2(0, 0); + var Sweep = ( + /** @class */ + function() { + function Sweep2() { + this.localCenter = Vec2.zero(); + this.c = Vec2.zero(); + this.a = 0; + this.alpha0 = 0; + this.c0 = Vec2.zero(); + this.a0 = 0; + } + Sweep2.prototype.recycle = function() { + zeroVec2(this.localCenter); + zeroVec2(this.c); + this.a = 0; + this.alpha0 = 0; + zeroVec2(this.c0); + this.a0 = 0; + }; + Sweep2.prototype.setTransform = function(xf2) { + transformVec2(temp$7, xf2, this.localCenter); + copyVec2(this.c, temp$7); + copyVec2(this.c0, temp$7); + this.a = this.a0 = math_atan2$1(xf2.q.s, xf2.q.c); + }; + Sweep2.prototype.setLocalCenter = function(localCenter2, xf2) { + copyVec2(this.localCenter, localCenter2); + transformVec2(temp$7, xf2, this.localCenter); + copyVec2(this.c, temp$7); + copyVec2(this.c0, temp$7); + }; + Sweep2.prototype.getTransform = function(xf2, beta) { + if (beta === void 0) { + beta = 0; + } + setRotAngle(xf2.q, (1 - beta) * this.a0 + beta * this.a); + combine2Vec2(xf2.p, 1 - beta, this.c0, beta, this.c); + minusVec2(xf2.p, rotVec2(temp$7, xf2.q, this.localCenter)); + }; + Sweep2.prototype.advance = function(alpha) { + var beta = (alpha - this.alpha0) / (1 - this.alpha0); + combine2Vec2(this.c0, beta, this.c, 1 - beta, this.c0); + this.a0 = beta * this.a + (1 - beta) * this.a0; + this.alpha0 = alpha; + }; + Sweep2.prototype.forward = function() { + this.a0 = this.a; + copyVec2(this.c0, this.c); + }; + Sweep2.prototype.normalize = function() { + var a0 = mod(this.a0, -math_PI$6, +math_PI$6); + this.a -= this.a0 - a0; + this.a0 = a0; + }; + Sweep2.prototype.set = function(that) { + copyVec2(this.localCenter, that.localCenter); + copyVec2(this.c, that.c); + this.a = that.a; + this.alpha0 = that.alpha0; + copyVec2(this.c0, that.c0); + this.a0 = that.a0; + }; + return Sweep2; + }() + ); + var Transform = ( + /** @class */ + function() { + function Transform2(position, rotation2) { + if (!(this instanceof Transform2)) { + return new Transform2(position, rotation2); + } + this.p = Vec2.zero(); + this.q = Rot.identity(); + if (typeof position !== "undefined") { + this.p.setVec2(position); + } + if (typeof rotation2 !== "undefined") { + this.q.setAngle(rotation2); + } + } + Transform2.clone = function(xf2) { + var obj = Object.create(Transform2.prototype); + obj.p = Vec2.clone(xf2.p); + obj.q = Rot.clone(xf2.q); + return obj; + }; + Transform2.neo = function(position, rotation2) { + var obj = Object.create(Transform2.prototype); + obj.p = Vec2.clone(position); + obj.q = Rot.clone(rotation2); + return obj; + }; + Transform2.identity = function() { + var obj = Object.create(Transform2.prototype); + obj.p = Vec2.zero(); + obj.q = Rot.identity(); + return obj; + }; + Transform2.prototype.setIdentity = function() { + this.p.setZero(); + this.q.setIdentity(); + }; + Transform2.prototype.set = function(a2, b2) { + if (typeof b2 === "undefined") { + this.p.set(a2.p); + this.q.set(a2.q); + } else { + this.p.set(a2); + this.q.set(b2); + } + }; + Transform2.prototype.setNum = function(position, rotation2) { + this.p.setVec2(position); + this.q.setAngle(rotation2); + }; + Transform2.prototype.setTransform = function(xf2) { + this.p.setVec2(xf2.p); + this.q.setRot(xf2.q); + }; + Transform2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec2.isValid(obj.p) && Rot.isValid(obj.q); + }; + Transform2.assert = function(o) { + }; + Transform2.mul = function(a2, b2) { + if (Array.isArray(b2)) { + var arr = []; + for (var i = 0; i < b2.length; i++) { + arr[i] = Transform2.mul(a2, b2[i]); + } + return arr; + } else if ("x" in b2 && "y" in b2) { + return Transform2.mulVec2(a2, b2); + } else if ("p" in b2 && "q" in b2) { + return Transform2.mulXf(a2, b2); + } + }; + Transform2.mulAll = function(a2, b2) { + var arr = []; + for (var i = 0; i < b2.length; i++) { + arr[i] = Transform2.mul(a2, b2[i]); + } + return arr; + }; + Transform2.mulFn = function(a2) { + return function(b2) { + return Transform2.mul(a2, b2); }; - DynamicTree.prototype.insertLeaf = function (leaf) { - if (this.m_root == null) { - this.m_root = leaf; - this.m_root.parent = null; - return; - } - // Find the best sibling for this node - var leafAABB = leaf.aabb; - var index = this.m_root; - while (!index.isLeaf()) { - var child1 = index.child1; - var child2 = index.child2; - var area = index.aabb.getPerimeter(); - var combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB); - // Cost of creating a new parent for this node and the new leaf - var cost = 2.0 * combinedArea; - // Minimum cost of pushing the leaf further down the tree - var inheritanceCost = 2.0 * (combinedArea - area); - // Cost of descending into child1 - var newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb); - var cost1 = newArea1 + inheritanceCost; - if (!child1.isLeaf()) { - var oldArea = child1.aabb.getPerimeter(); - cost1 -= oldArea; - } - // Cost of descending into child2 - var newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb); - var cost2 = newArea2 + inheritanceCost; - if (!child2.isLeaf()) { - var oldArea = child2.aabb.getPerimeter(); - cost2 -= oldArea; - } - // Descend according to the minimum cost. - if (cost < cost1 && cost < cost2) { - break; - } - // Descend - if (cost1 < cost2) { - index = child1; - } - else { - index = child2; - } - } - var sibling = index; - // Create a new parent. - var oldParent = sibling.parent; - var newParent = this.allocateNode(); - newParent.parent = oldParent; - newParent.userData = null; - newParent.aabb.combine(leafAABB, sibling.aabb); - newParent.height = sibling.height + 1; - if (oldParent != null) { - // The sibling was not the root. - if (oldParent.child1 === sibling) { - oldParent.child1 = newParent; - } - else { - oldParent.child2 = newParent; - } - newParent.child1 = sibling; - newParent.child2 = leaf; - sibling.parent = newParent; - leaf.parent = newParent; - } - else { - // The sibling was the root. - newParent.child1 = sibling; - newParent.child2 = leaf; - sibling.parent = newParent; - leaf.parent = newParent; - this.m_root = newParent; - } - // Walk back up the tree fixing heights and AABBs - index = leaf.parent; - while (index != null) { - index = this.balance(index); - var child1 = index.child1; - var child2 = index.child2; - index.height = 1 + math_max$7(child1.height, child2.height); - index.aabb.combine(child1.aabb, child2.aabb); - index = index.parent; - } - // validate(); + }; + Transform2.mulVec2 = function(a2, b2) { + var x2 = a2.q.c * b2.x - a2.q.s * b2.y + a2.p.x; + var y = a2.q.s * b2.x + a2.q.c * b2.y + a2.p.y; + return Vec2.neo(x2, y); + }; + Transform2.mulXf = function(a2, b2) { + var xf2 = Transform2.identity(); + xf2.q = Rot.mulRot(a2.q, b2.q); + xf2.p = Vec2.add(Rot.mulVec2(a2.q, b2.p), a2.p); + return xf2; + }; + Transform2.mulT = function(a2, b2) { + if ("x" in b2 && "y" in b2) { + return Transform2.mulTVec2(a2, b2); + } else if ("p" in b2 && "q" in b2) { + return Transform2.mulTXf(a2, b2); + } + }; + Transform2.mulTVec2 = function(a2, b2) { + var px = b2.x - a2.p.x; + var py = b2.y - a2.p.y; + var x2 = a2.q.c * px + a2.q.s * py; + var y = -a2.q.s * px + a2.q.c * py; + return Vec2.neo(x2, y); + }; + Transform2.mulTXf = function(a2, b2) { + var xf2 = Transform2.identity(); + xf2.q.setRot(Rot.mulTRot(a2.q, b2.q)); + xf2.p.setVec2(Rot.mulTVec2(a2.q, Vec2.sub(b2.p, a2.p))); + return xf2; + }; + return Transform2; + }() + ); + var Velocity = ( + /** @class */ + /* @__PURE__ */ function() { + function Velocity2() { + this.v = Vec2.zero(); + this.w = 0; + } + return Velocity2; + }() + ); + var math_sin = Math.sin; + var math_cos = Math.cos; + var Position = ( + /** @class */ + function() { + function Position2() { + this.c = Vec2.zero(); + this.a = 0; + } + Position2.prototype.getTransform = function(xf2, p) { + xf2.q.c = math_cos(this.a); + xf2.q.s = math_sin(this.a); + xf2.p.x = this.c.x - (xf2.q.c * p.x - xf2.q.s * p.y); + xf2.p.y = this.c.y - (xf2.q.s * p.x + xf2.q.c * p.y); + return xf2; + }; + return Position2; + }() + ); + function getTransform(xf2, p, c2, a2) { + xf2.q.c = math_cos(a2); + xf2.q.s = math_sin(a2); + xf2.p.x = c2.x - (xf2.q.c * p.x - xf2.q.s * p.y); + xf2.p.y = c2.y - (xf2.q.s * p.x + xf2.q.c * p.y); + return xf2; + } + var Shape = ( + /** @class */ + function() { + function Shape2() { + this.style = {}; + this.appData = {}; + } + Shape2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return typeof obj.m_type === "string" && typeof obj.m_radius === "number"; + }; + return Shape2; + }() + ); + var synchronize_aabb1 = new AABB(); + var synchronize_aabb2 = new AABB(); + var displacement = vec2(0, 0); + var FixtureDefDefault = { + userData: null, + friction: 0.2, + restitution: 0, + density: 0, + isSensor: false, + filterGroupIndex: 0, + filterCategoryBits: 1, + filterMaskBits: 65535 + }; + var FixtureProxy = ( + /** @class */ + /* @__PURE__ */ function() { + function FixtureProxy2(fixture, childIndex) { + this.aabb = new AABB(); + this.fixture = fixture; + this.childIndex = childIndex; + this.proxyId; + } + return FixtureProxy2; + }() + ); + var Fixture = ( + /** @class */ + function() { + function Fixture2(body, shape, def) { + this.style = {}; + this.appData = {}; + if (shape.shape) { + def = shape; + shape = shape.shape; + } else if (typeof def === "number") { + def = { density: def }; + } + def = options(def, FixtureDefDefault); + this.m_body = body; + this.m_friction = def.friction; + this.m_restitution = def.restitution; + this.m_density = def.density; + this.m_isSensor = def.isSensor; + this.m_filterGroupIndex = def.filterGroupIndex; + this.m_filterCategoryBits = def.filterCategoryBits; + this.m_filterMaskBits = def.filterMaskBits; + this.m_shape = shape; + this.m_next = null; + this.m_proxies = []; + this.m_proxyCount = 0; + var childCount = this.m_shape.getChildCount(); + for (var i = 0; i < childCount; ++i) { + this.m_proxies[i] = new FixtureProxy(this, i); + } + this.m_userData = def.userData; + } + Fixture2.prototype._reset = function() { + var body = this.getBody(); + var broadPhase = body.m_world.m_broadPhase; + this.destroyProxies(broadPhase); + if (this.m_shape._reset) { + this.m_shape._reset(); + } + var childCount = this.m_shape.getChildCount(); + for (var i = 0; i < childCount; ++i) { + this.m_proxies[i] = new FixtureProxy(this, i); + } + this.createProxies(broadPhase, body.m_xf); + body.resetMassData(); + }; + Fixture2.prototype._serialize = function() { + return { + friction: this.m_friction, + restitution: this.m_restitution, + density: this.m_density, + isSensor: this.m_isSensor, + filterGroupIndex: this.m_filterGroupIndex, + filterCategoryBits: this.m_filterCategoryBits, + filterMaskBits: this.m_filterMaskBits, + shape: this.m_shape }; - DynamicTree.prototype.removeLeaf = function (leaf) { - if (leaf === this.m_root) { - this.m_root = null; - return; - } - var parent = leaf.parent; - var grandParent = parent.parent; - var sibling; - if (parent.child1 === leaf) { - sibling = parent.child2; - } - else { - sibling = parent.child1; - } - if (grandParent != null) { - // Destroy parent and connect sibling to grandParent. - if (grandParent.child1 === parent) { - grandParent.child1 = sibling; - } - else { - grandParent.child2 = sibling; - } - sibling.parent = grandParent; - this.freeNode(parent); - // Adjust ancestor bounds. - var index = grandParent; - while (index != null) { - index = this.balance(index); - var child1 = index.child1; - var child2 = index.child2; - index.aabb.combine(child1.aabb, child2.aabb); - index.height = 1 + math_max$7(child1.height, child2.height); - index = index.parent; - } - } - else { - this.m_root = sibling; - sibling.parent = null; - this.freeNode(parent); - } - // validate(); + }; + Fixture2._deserialize = function(data, body, restore) { + var shape = restore(Shape, data.shape); + var fixture = shape && new Fixture2(body, shape, data); + return fixture; + }; + Fixture2.prototype.getType = function() { + return this.m_shape.m_type; + }; + Fixture2.prototype.getShape = function() { + return this.m_shape; + }; + Fixture2.prototype.isSensor = function() { + return this.m_isSensor; + }; + Fixture2.prototype.setSensor = function(sensor) { + if (sensor != this.m_isSensor) { + this.m_body.setAwake(true); + this.m_isSensor = sensor; + } + }; + Fixture2.prototype.getUserData = function() { + return this.m_userData; + }; + Fixture2.prototype.setUserData = function(data) { + this.m_userData = data; + }; + Fixture2.prototype.getBody = function() { + return this.m_body; + }; + Fixture2.prototype.getNext = function() { + return this.m_next; + }; + Fixture2.prototype.getDensity = function() { + return this.m_density; + }; + Fixture2.prototype.setDensity = function(density) { + this.m_density = density; + }; + Fixture2.prototype.getFriction = function() { + return this.m_friction; + }; + Fixture2.prototype.setFriction = function(friction) { + this.m_friction = friction; + }; + Fixture2.prototype.getRestitution = function() { + return this.m_restitution; + }; + Fixture2.prototype.setRestitution = function(restitution) { + this.m_restitution = restitution; + }; + Fixture2.prototype.testPoint = function(p) { + return this.m_shape.testPoint(this.m_body.getTransform(), p); + }; + Fixture2.prototype.rayCast = function(output2, input2, childIndex) { + return this.m_shape.rayCast(output2, input2, this.m_body.getTransform(), childIndex); + }; + Fixture2.prototype.getMassData = function(massData) { + this.m_shape.computeMass(massData, this.m_density); + }; + Fixture2.prototype.getAABB = function(childIndex) { + return this.m_proxies[childIndex].aabb; + }; + Fixture2.prototype.createProxies = function(broadPhase, xf2) { + this.m_proxyCount = this.m_shape.getChildCount(); + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i]; + this.m_shape.computeAABB(proxy.aabb, xf2, i); + proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy); + } + }; + Fixture2.prototype.destroyProxies = function(broadPhase) { + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i]; + broadPhase.destroyProxy(proxy.proxyId); + proxy.proxyId = null; + } + this.m_proxyCount = 0; + }; + Fixture2.prototype.synchronize = function(broadPhase, xf1, xf2) { + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i]; + this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex); + this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex); + proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2); + subVec2(displacement, xf2.p, xf1.p); + broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement); + } + }; + Fixture2.prototype.setFilterData = function(filter) { + this.m_filterGroupIndex = filter.groupIndex; + this.m_filterCategoryBits = filter.categoryBits; + this.m_filterMaskBits = filter.maskBits; + this.refilter(); + }; + Fixture2.prototype.getFilterGroupIndex = function() { + return this.m_filterGroupIndex; + }; + Fixture2.prototype.setFilterGroupIndex = function(groupIndex) { + this.m_filterGroupIndex = groupIndex; + this.refilter(); + }; + Fixture2.prototype.getFilterCategoryBits = function() { + return this.m_filterCategoryBits; + }; + Fixture2.prototype.setFilterCategoryBits = function(categoryBits) { + this.m_filterCategoryBits = categoryBits; + this.refilter(); + }; + Fixture2.prototype.getFilterMaskBits = function() { + return this.m_filterMaskBits; + }; + Fixture2.prototype.setFilterMaskBits = function(maskBits) { + this.m_filterMaskBits = maskBits; + this.refilter(); + }; + Fixture2.prototype.refilter = function() { + if (this.m_body == null) { + return; + } + var edge = this.m_body.getContactList(); + while (edge) { + var contact = edge.contact; + var fixtureA = contact.getFixtureA(); + var fixtureB = contact.getFixtureB(); + if (fixtureA == this || fixtureB == this) { + contact.flagForFiltering(); + } + edge = edge.next; + } + var world = this.m_body.getWorld(); + if (world == null) { + return; + } + var broadPhase = world.m_broadPhase; + for (var i = 0; i < this.m_proxyCount; ++i) { + broadPhase.touchProxy(this.m_proxies[i].proxyId); + } + }; + Fixture2.prototype.shouldCollide = function(that) { + if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) { + return that.m_filterGroupIndex > 0; + } + var collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0; + var collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0; + var collide = collideA && collideB; + return collide; + }; + return Fixture2; + }() + ); + var STATIC = "static"; + var KINEMATIC = "kinematic"; + var DYNAMIC = "dynamic"; + var oldCenter = vec2(0, 0); + var localCenter = vec2(0, 0); + var shift = vec2(0, 0); + var temp$6 = vec2(0, 0); + var xf$2 = transform(0, 0, 0); + var BodyDefDefault = { + type: STATIC, + position: Vec2.zero(), + angle: 0, + linearVelocity: Vec2.zero(), + angularVelocity: 0, + linearDamping: 0, + angularDamping: 0, + fixedRotation: false, + bullet: false, + gravityScale: 1, + allowSleep: true, + awake: true, + active: true, + userData: null + }; + var Body = ( + /** @class */ + function() { + function Body2(world, def) { + this.style = {}; + this.appData = {}; + def = options(def, BodyDefDefault); + this.m_world = world; + this.m_awakeFlag = def.awake; + this.m_autoSleepFlag = def.allowSleep; + this.m_bulletFlag = def.bullet; + this.m_fixedRotationFlag = def.fixedRotation; + this.m_activeFlag = def.active; + this.m_islandFlag = false; + this.m_toiFlag = false; + this.m_userData = def.userData; + this.m_type = def.type; + if (this.m_type == DYNAMIC) { + this.m_mass = 1; + this.m_invMass = 1; + } else { + this.m_mass = 0; + this.m_invMass = 0; + } + this.m_I = 0; + this.m_invI = 0; + this.m_xf = Transform.identity(); + this.m_xf.p.setVec2(def.position); + this.m_xf.q.setAngle(def.angle); + this.m_sweep = new Sweep(); + this.m_sweep.setTransform(this.m_xf); + this.c_velocity = new Velocity(); + this.c_position = new Position(); + this.m_force = Vec2.zero(); + this.m_torque = 0; + this.m_linearVelocity = Vec2.clone(def.linearVelocity); + this.m_angularVelocity = def.angularVelocity; + this.m_linearDamping = def.linearDamping; + this.m_angularDamping = def.angularDamping; + this.m_gravityScale = def.gravityScale; + this.m_sleepTime = 0; + this.m_jointList = null; + this.m_contactList = null; + this.m_fixtureList = null; + this.m_prev = null; + this.m_next = null; + this.m_destroyed = false; + } + Body2.prototype._serialize = function() { + var fixtures = []; + for (var f = this.m_fixtureList; f; f = f.m_next) { + fixtures.push(f); + } + return { + type: this.m_type, + bullet: this.m_bulletFlag, + position: this.m_xf.p, + angle: this.m_xf.q.getAngle(), + linearVelocity: this.m_linearVelocity, + angularVelocity: this.m_angularVelocity, + fixtures }; - /** - * Perform a left or right rotation if node A is imbalanced. Returns the new - * root index. - */ - DynamicTree.prototype.balance = function (iA) { - var A = iA; - if (A.isLeaf() || A.height < 2) { - return iA; - } - var B = A.child1; - var C = A.child2; - var balance = C.height - B.height; - // Rotate C up - if (balance > 1) { - var F = C.child1; - var G = C.child2; - // Swap A and C - C.child1 = A; - C.parent = A.parent; - A.parent = C; - // A's old parent should point to C - if (C.parent != null) { - if (C.parent.child1 === iA) { - C.parent.child1 = C; - } - else { - C.parent.child2 = C; - } - } - else { - this.m_root = C; - } - // Rotate - if (F.height > G.height) { - C.child2 = F; - A.child2 = G; - G.parent = A; - A.aabb.combine(B.aabb, G.aabb); - C.aabb.combine(A.aabb, F.aabb); - A.height = 1 + math_max$7(B.height, G.height); - C.height = 1 + math_max$7(A.height, F.height); - } - else { - C.child2 = G; - A.child2 = F; - F.parent = A; - A.aabb.combine(B.aabb, F.aabb); - C.aabb.combine(A.aabb, G.aabb); - A.height = 1 + math_max$7(B.height, F.height); - C.height = 1 + math_max$7(A.height, G.height); - } - return C; - } - // Rotate B up - if (balance < -1) { - var D = B.child1; - var E = B.child2; - // Swap A and B - B.child1 = A; - B.parent = A.parent; - A.parent = B; - // A's old parent should point to B - if (B.parent != null) { - if (B.parent.child1 === A) { - B.parent.child1 = B; - } - else { - B.parent.child2 = B; - } - } - else { - this.m_root = B; - } - // Rotate - if (D.height > E.height) { - B.child2 = D; - A.child1 = E; - E.parent = A; - A.aabb.combine(C.aabb, E.aabb); - B.aabb.combine(A.aabb, D.aabb); - A.height = 1 + math_max$7(C.height, E.height); - B.height = 1 + math_max$7(A.height, D.height); - } - else { - B.child2 = E; - A.child1 = D; - D.parent = A; - A.aabb.combine(C.aabb, D.aabb); - B.aabb.combine(A.aabb, E.aabb); - A.height = 1 + math_max$7(C.height, D.height); - B.height = 1 + math_max$7(A.height, E.height); - } - return B; - } - return A; - }; - /** - * Compute the height of the binary tree in O(N) time. Should not be called - * often. - */ - DynamicTree.prototype.getHeight = function () { - if (this.m_root == null) { - return 0; - } - return this.m_root.height; - }; - /** - * Get the ratio of the sum of the node areas to the root area. - */ - DynamicTree.prototype.getAreaRatio = function () { - if (this.m_root == null) { - return 0.0; - } - var root = this.m_root; - var rootArea = root.aabb.getPerimeter(); - var totalArea = 0.0; - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - if (node.height < 0) { - // Free node in pool - continue; - } - totalArea += node.aabb.getPerimeter(); - } - this.iteratorPool.release(it); - return totalArea / rootArea; - }; - /** - * Compute the height of a sub-tree. - */ - DynamicTree.prototype.computeHeight = function (id) { - var node; - if (typeof id !== "undefined") { - node = this.m_nodes[id]; - } - else { - node = this.m_root; - } - // false && console.assert(0 <= id && id < this.m_nodeCapacity); - if (node.isLeaf()) { - return 0; - } - var height1 = this.computeHeight(node.child1.id); - var height2 = this.computeHeight(node.child2.id); - return 1 + math_max$7(height1, height2); - }; - DynamicTree.prototype.validateStructure = function (node) { - if (node == null) { - return; - } - if (node === this.m_root) ; - var child1 = node.child1; - var child2 = node.child2; - if (node.isLeaf()) { - return; - } - this.validateStructure(child1); - this.validateStructure(child2); - }; - DynamicTree.prototype.validateMetrics = function (node) { - if (node == null) { - return; - } - var child1 = node.child1; - var child2 = node.child2; - if (node.isLeaf()) { - return; - } - // false && console.assert(0 <= child1 && child1 < this.m_nodeCapacity); - // false && console.assert(0 <= child2 && child2 < this.m_nodeCapacity); - child1.height; - child2.height; - var aabb = new AABB(); - aabb.combine(child1.aabb, child2.aabb); - this.validateMetrics(child1); - this.validateMetrics(child2); - }; - /** - * Validate this tree. For testing. - */ - DynamicTree.prototype.validate = function () { - return; - }; - /** - * Get the maximum balance of an node in the tree. The balance is the difference - * in height of the two children of a node. - */ - DynamicTree.prototype.getMaxBalance = function () { - var maxBalance = 0; - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - if (node.height <= 1) { - continue; - } - var balance = math_abs$9(node.child2.height - node.child1.height); - maxBalance = math_max$7(maxBalance, balance); - } - this.iteratorPool.release(it); - return maxBalance; - }; - /** - * Build an optimal tree. Very expensive. For testing. - */ - DynamicTree.prototype.rebuildBottomUp = function () { - var nodes = []; - var count = 0; - // Build array of leaves. Free the rest. - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - if (node.height < 0) { - // free node in pool - continue; - } - if (node.isLeaf()) { - node.parent = null; - nodes[count] = node; - ++count; - } - else { - this.freeNode(node); - } - } - this.iteratorPool.release(it); - while (count > 1) { - var minCost = Infinity; - var iMin = -1; - var jMin = -1; - for (var i = 0; i < count; ++i) { - var aabbi = nodes[i].aabb; - for (var j = i + 1; j < count; ++j) { - var aabbj = nodes[j].aabb; - var cost = AABB.combinedPerimeter(aabbi, aabbj); - if (cost < minCost) { - iMin = i; - jMin = j; - minCost = cost; - } - } - } - var child1 = nodes[iMin]; - var child2 = nodes[jMin]; - var parent_1 = this.allocateNode(); - parent_1.child1 = child1; - parent_1.child2 = child2; - parent_1.height = 1 + math_max$7(child1.height, child2.height); - parent_1.aabb.combine(child1.aabb, child2.aabb); - parent_1.parent = null; - child1.parent = parent_1; - child2.parent = parent_1; - nodes[jMin] = nodes[count - 1]; - nodes[iMin] = parent_1; - --count; - } - this.m_root = nodes[0]; - }; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - DynamicTree.prototype.shiftOrigin = function (newOrigin) { - // Build array of leaves. Free the rest. - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - var aabb = node.aabb; - aabb.lowerBound.x -= newOrigin.x; - aabb.lowerBound.y -= newOrigin.y; - aabb.upperBound.x -= newOrigin.x; - aabb.upperBound.y -= newOrigin.y; - } - this.iteratorPool.release(it); - }; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - DynamicTree.prototype.query = function (aabb, queryCallback) { - var stack = this.stackPool.allocate(); - stack.push(this.m_root); - while (stack.length > 0) { - var node = stack.pop(); - if (node == null) { - continue; - } - if (AABB.testOverlap(node.aabb, aabb)) { - if (node.isLeaf()) { - var proceed = queryCallback(node.id); - if (proceed === false) { - return; - } - } - else { - stack.push(node.child1); - stack.push(node.child2); - } - } - } - this.stackPool.release(stack); - }; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - DynamicTree.prototype.rayCast = function (input, rayCastCallback) { - var p1 = input.p1; - var p2 = input.p2; - var r = Vec2.sub(p2, p1); - r.normalize(); - // v is perpendicular to the segment. - var v = Vec2.crossNumVec2(1.0, r); - var abs_v = Vec2.abs(v); - // Separating axis for segment (Gino, p80). - // |dot(v, p1 - c)| > dot(|v|, h) - var maxFraction = input.maxFraction; - // Build a bounding box for the segment. - var segmentAABB = new AABB(); - var t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2); - segmentAABB.combinePoints(p1, t); - var stack = this.stackPool.allocate(); - var subInput = this.inputPool.allocate(); - stack.push(this.m_root); - while (stack.length > 0) { - var node = stack.pop(); - if (node == null) { - continue; - } - if (AABB.testOverlap(node.aabb, segmentAABB) === false) { - continue; - } - // Separating axis for segment (Gino, p80). - // |dot(v, p1 - c)| > dot(|v|, h) - var c = node.aabb.getCenter(); - var h = node.aabb.getExtents(); - var separation = math_abs$9(Vec2.dot(v, Vec2.sub(p1, c))) - Vec2.dot(abs_v, h); - if (separation > 0.0) { - continue; - } - if (node.isLeaf()) { - subInput.p1 = Vec2.clone(input.p1); - subInput.p2 = Vec2.clone(input.p2); - subInput.maxFraction = maxFraction; - var value = rayCastCallback(subInput, node.id); - if (value === 0.0) { - // The client has terminated the ray cast. - break; - } - else if (value > 0.0) { - // update segment bounding box. - maxFraction = value; - t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2); - segmentAABB.combinePoints(p1, t); - } - } - else { - stack.push(node.child1); - stack.push(node.child2); - } - } - this.stackPool.release(stack); - this.inputPool.release(subInput); - }; - return DynamicTree; - }()); - /** @internal */ - var Iterator = /** @class */ (function () { - function Iterator() { - this.parents = []; - this.states = []; - } - Iterator.prototype.preorder = function (root) { - this.parents.length = 0; - this.parents.push(root); - this.states.length = 0; - this.states.push(0); - return this; - }; - Iterator.prototype.next = function () { - while (this.parents.length > 0) { - var i = this.parents.length - 1; - var node = this.parents[i]; - if (this.states[i] === 0) { - this.states[i] = 1; - return node; - } - if (this.states[i] === 1) { - this.states[i] = 2; - if (node.child1) { - this.parents.push(node.child1); - this.states.push(1); - return node.child1; - } - } - if (this.states[i] === 2) { - this.states[i] = 3; - if (node.child2) { - this.parents.push(node.child2); - this.states.push(1); - return node.child2; - } - } - this.parents.pop(); - this.states.pop(); - } - }; - Iterator.prototype.close = function () { - this.parents.length = 0; - }; - return Iterator; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_max$6 = Math.max; - /** @internal */ var math_min$7 = Math.min; - /** - * The broad-phase wraps and extends a dynamic-tree to keep track of moved - * objects and query them on update. - */ - var BroadPhase = /** @class */ (function () { - function BroadPhase() { - var _this = this; - this.m_tree = new DynamicTree(); - this.m_moveBuffer = []; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - this.query = function (aabb, queryCallback) { - _this.m_tree.query(aabb, queryCallback); - }; - this.queryCallback = function (proxyId) { - // A proxy cannot form a pair with itself. - if (proxyId === _this.m_queryProxyId) { - return true; - } - var proxyIdA = math_min$7(proxyId, _this.m_queryProxyId); - var proxyIdB = math_max$6(proxyId, _this.m_queryProxyId); - // TODO: Skip any duplicate pairs. - var userDataA = _this.m_tree.getUserData(proxyIdA); - var userDataB = _this.m_tree.getUserData(proxyIdB); - // Send the pairs back to the client. - _this.m_callback(userDataA, userDataB); - return true; - }; + }; + Body2._deserialize = function(data, world, restore) { + var body = new Body2(world, data); + if (data.fixtures) { + for (var i = data.fixtures.length - 1; i >= 0; i--) { + var fixture = restore(Fixture, data.fixtures[i], body); + body._addFixture(fixture); + } } - /** - * Get user data from a proxy. Returns null if the id is invalid. - */ - BroadPhase.prototype.getUserData = function (proxyId) { - return this.m_tree.getUserData(proxyId); - }; - /** - * Test overlap of fat AABBs. - */ - BroadPhase.prototype.testOverlap = function (proxyIdA, proxyIdB) { - var aabbA = this.m_tree.getFatAABB(proxyIdA); - var aabbB = this.m_tree.getFatAABB(proxyIdB); - return AABB.testOverlap(aabbA, aabbB); - }; - /** - * Get the fat AABB for a proxy. - */ - BroadPhase.prototype.getFatAABB = function (proxyId) { - return this.m_tree.getFatAABB(proxyId); - }; - /** - * Get the number of proxies. - */ - BroadPhase.prototype.getProxyCount = function () { - return this.m_moveBuffer.length; - }; - /** - * Get the height of the embedded tree. - */ - BroadPhase.prototype.getTreeHeight = function () { - return this.m_tree.getHeight(); - }; - /** - * Get the balance (integer) of the embedded tree. - */ - BroadPhase.prototype.getTreeBalance = function () { - return this.m_tree.getMaxBalance(); - }; - /** - * Get the quality metric of the embedded tree. - */ - BroadPhase.prototype.getTreeQuality = function () { - return this.m_tree.getAreaRatio(); - }; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - BroadPhase.prototype.rayCast = function (input, rayCastCallback) { - this.m_tree.rayCast(input, rayCastCallback); - }; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - BroadPhase.prototype.shiftOrigin = function (newOrigin) { - this.m_tree.shiftOrigin(newOrigin); - }; - /** - * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs - * is called. - */ - BroadPhase.prototype.createProxy = function (aabb, userData) { - var proxyId = this.m_tree.createProxy(aabb, userData); - this.bufferMove(proxyId); - return proxyId; - }; - /** - * Destroy a proxy. It is up to the client to remove any pairs. - */ - BroadPhase.prototype.destroyProxy = function (proxyId) { - this.unbufferMove(proxyId); - this.m_tree.destroyProxy(proxyId); - }; - /** - * Call moveProxy as many times as you like, then when you are done call - * UpdatePairs to finalized the proxy pairs (for your time step). - */ - BroadPhase.prototype.moveProxy = function (proxyId, aabb, displacement) { - var changed = this.m_tree.moveProxy(proxyId, aabb, displacement); - if (changed) { - this.bufferMove(proxyId); - } - }; - /** - * Call to trigger a re-processing of it's pairs on the next call to - * UpdatePairs. - */ - BroadPhase.prototype.touchProxy = function (proxyId) { - this.bufferMove(proxyId); - }; - BroadPhase.prototype.bufferMove = function (proxyId) { - this.m_moveBuffer.push(proxyId); - }; - BroadPhase.prototype.unbufferMove = function (proxyId) { - for (var i = 0; i < this.m_moveBuffer.length; ++i) { - if (this.m_moveBuffer[i] === proxyId) { - this.m_moveBuffer[i] = null; - } - } - }; - /** - * Update the pairs. This results in pair callbacks. This can only add pairs. - */ - BroadPhase.prototype.updatePairs = function (addPairCallback) { - this.m_callback = addPairCallback; - // Perform tree queries for all moving proxies. - while (this.m_moveBuffer.length > 0) { - this.m_queryProxyId = this.m_moveBuffer.pop(); - if (this.m_queryProxyId === null) { - continue; - } - // We have to query the tree with the fat AABB so that - // we don't fail to create a pair that may touch later. - var fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId); - // Query tree, create pairs and add them pair buffer. - this.m_tree.query(fatAABB, this.queryCallback); - } - // Try to keep the tree balanced. - // this.m_tree.rebalance(4); - }; - return BroadPhase; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2023 Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_sin$2 = Math.sin; - /** @internal */ var math_cos$2 = Math.cos; - /** @internal */ var math_sqrt$6 = Math.sqrt; - function vec2(x, y) { - return { x: x, y: y }; - } - function rotation(angle) { - return { s: math_sin$2(angle), c: math_cos$2(angle) }; - } - function setVec2(out, x, y) { - out.x = x; - out.y = y; - return out; - } - function copyVec2(out, w) { - out.x = w.x; - out.y = w.y; - return out; - } - function zeroVec2(out) { - out.x = 0; - out.y = 0; - return out; - } - function negVec2(out) { - out.x = -out.x; - out.y = -out.y; - return out; - } - function plusVec2(out, w) { - out.x += w.x; - out.y += w.y; - return out; - } - function addVec2(out, v, w) { - out.x = v.x + w.x; - out.y = v.x + w.y; - return out; - } - function minusVec2(out, w) { - out.x -= w.x; - out.y -= w.y; - return out; - } - function subVec2(out, v, w) { - out.x = v.x - w.x; - out.y = v.y - w.y; - return out; - } - function mulVec2(out, m) { - out.x *= m; - out.y *= m; - return out; - } - function scaleVec2(out, m, w) { - out.x = m * w.x; - out.y = m * w.y; - return out; - } - function plusScaleVec2(out, m, w) { - out.x += m * w.x; - out.y += m * w.y; - return out; - } - function minusScaleVec2(out, m, w) { - out.x -= m * w.x; - out.y -= m * w.y; - return out; - } - function combine2Vec2(out, am, a, bm, b) { - out.x = am * a.x + bm * b.x; - out.y = am * a.y + bm * b.y; - return out; - } - function combine3Vec2(out, am, a, bm, b, cm, c) { - out.x = am * a.x + bm * b.x + cm * c.x; - out.y = am * a.y + bm * b.y + cm * c.y; - return out; - } - function normalizeVec2Length(out) { - var length = math_sqrt$6(out.x * out.x + out.y * out.y); - if (length !== 0) { - var invLength = 1 / length; - out.x *= invLength; - out.y *= invLength; - } - return length; - } - function normalizeVec2(out) { - var length = math_sqrt$6(out.x * out.x + out.y * out.y); - if (length > 0) { - var invLength = 1 / length; - out.x *= invLength; - out.y *= invLength; + return body; + }; + Body2.prototype.isWorldLocked = function() { + return this.m_world && this.m_world.isLocked() ? true : false; + }; + Body2.prototype.getWorld = function() { + return this.m_world; + }; + Body2.prototype.getNext = function() { + return this.m_next; + }; + Body2.prototype.setUserData = function(data) { + this.m_userData = data; + }; + Body2.prototype.getUserData = function() { + return this.m_userData; + }; + Body2.prototype.getFixtureList = function() { + return this.m_fixtureList; + }; + Body2.prototype.getJointList = function() { + return this.m_jointList; + }; + Body2.prototype.getContactList = function() { + return this.m_contactList; + }; + Body2.prototype.isStatic = function() { + return this.m_type == STATIC; + }; + Body2.prototype.isDynamic = function() { + return this.m_type == DYNAMIC; + }; + Body2.prototype.isKinematic = function() { + return this.m_type == KINEMATIC; + }; + Body2.prototype.setStatic = function() { + this.setType(STATIC); + return this; + }; + Body2.prototype.setDynamic = function() { + this.setType(DYNAMIC); + return this; + }; + Body2.prototype.setKinematic = function() { + this.setType(KINEMATIC); + return this; + }; + Body2.prototype.getType = function() { + return this.m_type; + }; + Body2.prototype.setType = function(type) { + if (this.isWorldLocked() == true) { + return; + } + if (this.m_type == type) { + return; + } + this.m_type = type; + this.resetMassData(); + if (this.m_type == STATIC) { + this.m_linearVelocity.setZero(); + this.m_angularVelocity = 0; + this.m_sweep.forward(); + this.synchronizeFixtures(); + } + this.setAwake(true); + this.m_force.setZero(); + this.m_torque = 0; + var ce = this.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.m_world.destroyContact(ce0.contact); + } + this.m_contactList = null; + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + for (var i = 0; i < f.m_proxyCount; ++i) { + broadPhase.touchProxy(f.m_proxies[i].proxyId); + } } - return out; - } - function crossVec2Num(out, v, w) { - var x = w * v.y; - var y = -w * v.x; - out.x = x; - out.y = y; - return out; - } - function crossNumVec2(out, w, v) { - var x = -w * v.y; - var y = w * v.x; - out.x = x; - out.y = y; - return out; - } - function crossVec2Vec2(a, b) { - return a.x * b.y - a.y * b.x; - } - function dotVec2(a, b) { - return a.x * b.x + a.y * b.y; - } - function lengthSqrVec2(a) { - return a.x * a.x + a.y * a.y; - } - function distVec2(a, b) { - var dx = a.x - b.x; - var dy = a.y - b.y; - return math_sqrt$6(dx * dx + dy * dy); - } - function distSqrVec2(a, b) { - var dx = a.x - b.x; - var dy = a.y - b.y; - return dx * dx + dy * dy; - } - function setRotAngle(out, a) { - out.c = math_cos$2(a); - out.s = math_sin$2(a); - return out; - } - function rotVec2(out, q, v) { - out.x = q.c * v.x - q.s * v.y; - out.y = q.s * v.x + q.c * v.y; - return out; - } - function derotVec2(out, q, v) { - var x = q.c * v.x + q.s * v.y; - var y = -q.s * v.x + q.c * v.y; - out.x = x; - out.y = y; - return out; - } - function rerotVec2(out, before, after, v) { - var x0 = before.c * v.x + before.s * v.y; - var y0 = -before.s * v.x + before.c * v.y; - var x = after.c * x0 - after.s * y0; - var y = after.s * x0 + after.c * y0; - out.x = x; - out.y = y; - return out; - } - function transform(x, y, a) { - return { p: vec2(x, y), q: rotation(a) }; - } - function copyTransform(out, transform) { - out.p.x = transform.p.x; - out.p.y = transform.p.y; - out.q.s = transform.q.s; - out.q.c = transform.q.c; - return out; - } - function transformVec2(out, xf, v) { - var x = xf.q.c * v.x - xf.q.s * v.y + xf.p.x; - var y = xf.q.s * v.x + xf.q.c * v.y + xf.p.y; - out.x = x; - out.y = y; - return out; - } - function detransformVec2(out, xf, v) { - var px = v.x - xf.p.x; - var py = v.y - xf.p.y; - var x = (xf.q.c * px + xf.q.s * py); - var y = (-xf.q.s * px + xf.q.c * py); - out.x = x; - out.y = y; - return out; - } - function retransformVec2(out, from, to, v) { - var x0 = from.q.c * v.x - from.q.s * v.y + from.p.x; - var y0 = from.q.s * v.x + from.q.c * v.y + from.p.y; - var px = x0 - to.p.x; - var py = y0 - to.p.y; - var x = to.q.c * px + to.q.s * py; - var y = -to.q.s * px + to.q.c * py; - out.x = x; - out.y = y; - return out; - } - function detransformTransform(out, a, b) { - var c = a.q.c * b.q.c + a.q.s * b.q.s; - var s = a.q.c * b.q.s - a.q.s * b.q.c; - var x = a.q.c * (b.p.x - a.p.x) + a.q.s * (b.p.y - a.p.y); - var y = -a.q.s * (b.p.x - a.p.x) + a.q.c * (b.p.y - a.p.y); - out.q.c = c; - out.q.s = s; - out.p.x = x; - out.p.y = y; - return out; - } - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_sin$1 = Math.sin; - /** @internal */ var math_cos$1 = Math.cos; - /** @internal */ var math_atan2$2 = Math.atan2; - var Rot = /** @class */ (function () { - /** Initialize from an angle in radians. */ - function Rot(angle) { - if (!(this instanceof Rot)) { - return new Rot(angle); - } - if (typeof angle === "number") { - this.setAngle(angle); - } - else if (typeof angle === "object") { - this.setRot(angle); - } - else { - this.setIdentity(); - } + }; + Body2.prototype.isBullet = function() { + return this.m_bulletFlag; + }; + Body2.prototype.setBullet = function(flag) { + this.m_bulletFlag = !!flag; + }; + Body2.prototype.isSleepingAllowed = function() { + return this.m_autoSleepFlag; + }; + Body2.prototype.setSleepingAllowed = function(flag) { + this.m_autoSleepFlag = !!flag; + if (this.m_autoSleepFlag == false) { + this.setAwake(true); } - /** @hidden */ - Rot.neo = function (angle) { - var obj = Object.create(Rot.prototype); - obj.setAngle(angle); - return obj; - }; - Rot.clone = function (rot) { - var obj = Object.create(Rot.prototype); - obj.s = rot.s; - obj.c = rot.c; - return obj; - }; - Rot.identity = function () { - var obj = Object.create(Rot.prototype); - obj.s = 0.0; - obj.c = 1.0; - return obj; - }; - Rot.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Number.isFinite(obj.s) && Number.isFinite(obj.c); - }; - Rot.assert = function (o) { - }; - /** Set to the identity rotation. */ - Rot.prototype.setIdentity = function () { - this.s = 0.0; - this.c = 1.0; - }; - Rot.prototype.set = function (angle) { - if (typeof angle === "object") { - this.s = angle.s; - this.c = angle.c; - } - else { - // TODO_ERIN optimize - this.s = math_sin$1(angle); - this.c = math_cos$1(angle); - } - }; - Rot.prototype.setRot = function (angle) { - this.s = angle.s; - this.c = angle.c; - }; - /** Set using an angle in radians. */ - Rot.prototype.setAngle = function (angle) { - // TODO_ERIN optimize - this.s = math_sin$1(angle); - this.c = math_cos$1(angle); - }; - /** Get the angle in radians. */ - Rot.prototype.getAngle = function () { - return math_atan2$2(this.s, this.c); - }; - /** Get the x-axis. */ - Rot.prototype.getXAxis = function () { - return Vec2.neo(this.c, this.s); - }; - /** Get the y-axis. */ - Rot.prototype.getYAxis = function () { - return Vec2.neo(-this.s, this.c); - }; - Rot.mul = function (rot, m) { - if ("c" in m && "s" in m) { - // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc] - // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc] - // s = qs * rc + qc * rs - // c = qc * rc - qs * rs - var qr = Rot.identity(); - qr.s = rot.s * m.c + rot.c * m.s; - qr.c = rot.c * m.c - rot.s * m.s; - return qr; - } - else if ("x" in m && "y" in m) { - return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y); - } - }; - /** Multiply two rotations: q * r */ - Rot.mulRot = function (rot, m) { - // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc] - // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc] - // s = qs * rc + qc * rs - // c = qc * rc - qs * rs - var qr = Rot.identity(); - qr.s = rot.s * m.c + rot.c * m.s; - qr.c = rot.c * m.c - rot.s * m.s; - return qr; - }; - /** Rotate a vector */ - Rot.mulVec2 = function (rot, m) { - return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y); - }; - Rot.mulSub = function (rot, v, w) { - var x = rot.c * (v.x - w.x) - rot.s * (v.y - w.y); - var y = rot.s * (v.x - w.x) + rot.c * (v.y - w.y); - return Vec2.neo(x, y); - }; - Rot.mulT = function (rot, m) { - if ("c" in m && "s" in m) { - // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc] - // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc] - // s = qc * rs - qs * rc - // c = qc * rc + qs * rs - var qr = Rot.identity(); - qr.s = rot.c * m.s - rot.s * m.c; - qr.c = rot.c * m.c + rot.s * m.s; - return qr; - } - else if ("x" in m && "y" in m) { - return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y); - } - }; - /** Transpose multiply two rotations: qT * r */ - Rot.mulTRot = function (rot, m) { - // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc] - // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc] - // s = qc * rs - qs * rc - // c = qc * rc + qs * rs - var qr = Rot.identity(); - qr.s = rot.c * m.s - rot.s * m.c; - qr.c = rot.c * m.c + rot.s * m.s; - return qr; - }; - /** Inverse rotate a vector */ - Rot.mulTVec2 = function (rot, m) { - return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y); - }; - return Rot; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_atan2$1 = Math.atan2; - /** @internal */ var math_PI$6 = Math.PI; - /** @internal */ var temp$7 = vec2(0, 0); - /** - * This describes the motion of a body/shape for TOI computation. Shapes are - * defined with respect to the body origin, which may not coincide with the - * center of mass. However, to support dynamics we must interpolate the center - * of mass position. - */ - var Sweep = /** @class */ (function () { - function Sweep() { - /** Local center of mass position */ - this.localCenter = Vec2.zero(); - /** World center position */ - this.c = Vec2.zero(); - /** World angle */ - this.a = 0; - /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */ - this.alpha0 = 0; - this.c0 = Vec2.zero(); - this.a0 = 0; - } - /** @internal */ - Sweep.prototype.recycle = function () { - zeroVec2(this.localCenter); - zeroVec2(this.c); - this.a = 0; - this.alpha0 = 0; - zeroVec2(this.c0); - this.a0 = 0; - }; - Sweep.prototype.setTransform = function (xf) { - transformVec2(temp$7, xf, this.localCenter); - copyVec2(this.c, temp$7); - copyVec2(this.c0, temp$7); - this.a = this.a0 = math_atan2$1(xf.q.s, xf.q.c); - }; - Sweep.prototype.setLocalCenter = function (localCenter, xf) { - copyVec2(this.localCenter, localCenter); - transformVec2(temp$7, xf, this.localCenter); - copyVec2(this.c, temp$7); - copyVec2(this.c0, temp$7); - }; - /** - * Get the interpolated transform at a specific time. - * - * @param xf - * @param beta A factor in [0,1], where 0 indicates alpha0 - */ - Sweep.prototype.getTransform = function (xf, beta) { - if (beta === void 0) { beta = 0; } - setRotAngle(xf.q, (1.0 - beta) * this.a0 + beta * this.a); - combine2Vec2(xf.p, (1.0 - beta), this.c0, beta, this.c); - // shift to origin - minusVec2(xf.p, rotVec2(temp$7, xf.q, this.localCenter)); - }; - /** - * Advance the sweep forward, yielding a new initial state. - * - * @param alpha The new initial time - */ - Sweep.prototype.advance = function (alpha) { - var beta = (alpha - this.alpha0) / (1.0 - this.alpha0); - combine2Vec2(this.c0, beta, this.c, 1 - beta, this.c0); - this.a0 = beta * this.a + (1 - beta) * this.a0; - this.alpha0 = alpha; - }; - Sweep.prototype.forward = function () { - this.a0 = this.a; - copyVec2(this.c0, this.c); - }; - /** - * normalize the angles in radians to be between -pi and pi. - */ - Sweep.prototype.normalize = function () { - var a0 = mod(this.a0, -math_PI$6, +math_PI$6); - this.a -= this.a0 - a0; - this.a0 = a0; - }; - Sweep.prototype.set = function (that) { - copyVec2(this.localCenter, that.localCenter); - copyVec2(this.c, that.c); - this.a = that.a; - this.alpha0 = that.alpha0; - copyVec2(this.c0, that.c0); - this.a0 = that.a0; - }; - return Sweep; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** - * A transform contains translation and rotation. It is used to represent the - * position and orientation of rigid frames. Initialize using a position vector - * and a rotation. - */ - var Transform = /** @class */ (function () { - function Transform(position, rotation) { - if (!(this instanceof Transform)) { - return new Transform(position, rotation); - } - this.p = Vec2.zero(); - this.q = Rot.identity(); - if (typeof position !== "undefined") { - this.p.setVec2(position); - } - if (typeof rotation !== "undefined") { - this.q.setAngle(rotation); - } + }; + Body2.prototype.isAwake = function() { + return this.m_awakeFlag; + }; + Body2.prototype.setAwake = function(flag) { + if (flag) { + this.m_awakeFlag = true; + this.m_sleepTime = 0; + } else { + this.m_awakeFlag = false; + this.m_sleepTime = 0; + this.m_linearVelocity.setZero(); + this.m_angularVelocity = 0; + this.m_force.setZero(); + this.m_torque = 0; } - Transform.clone = function (xf) { - var obj = Object.create(Transform.prototype); - obj.p = Vec2.clone(xf.p); - obj.q = Rot.clone(xf.q); - return obj; - }; - /** @hidden */ - Transform.neo = function (position, rotation) { - var obj = Object.create(Transform.prototype); - obj.p = Vec2.clone(position); - obj.q = Rot.clone(rotation); - return obj; - }; - Transform.identity = function () { - var obj = Object.create(Transform.prototype); - obj.p = Vec2.zero(); - obj.q = Rot.identity(); - return obj; - }; - /** Set this to the identity transform */ - Transform.prototype.setIdentity = function () { - this.p.setZero(); - this.q.setIdentity(); - }; - Transform.prototype.set = function (a, b) { - if (typeof b === "undefined") { - this.p.set(a.p); - this.q.set(a.q); - } - else { - this.p.set(a); - this.q.set(b); - } - }; - /** Set position and angle */ - Transform.prototype.setNum = function (position, rotation) { - this.p.setVec2(position); - this.q.setAngle(rotation); - }; - Transform.prototype.setTransform = function (xf) { - this.p.setVec2(xf.p); - this.q.setRot(xf.q); - }; - Transform.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec2.isValid(obj.p) && Rot.isValid(obj.q); - }; - Transform.assert = function (o) { - }; - // static mul(a: Transform, b: Vec2Value[]): Vec2[]; - // static mul(a: Transform, b: Transform[]): Transform[]; - Transform.mul = function (a, b) { - if (Array.isArray(b)) { - var arr = []; - for (var i = 0; i < b.length; i++) { - arr[i] = Transform.mul(a, b[i]); - } - return arr; - } - else if ("x" in b && "y" in b) { - return Transform.mulVec2(a, b); - } - else if ("p" in b && "q" in b) { - return Transform.mulXf(a, b); - } - }; - Transform.mulAll = function (a, b) { - var arr = []; - for (var i = 0; i < b.length; i++) { - arr[i] = Transform.mul(a, b[i]); - } - return arr; - }; - /** @hidden @deprecated */ - Transform.mulFn = function (a) { - return function (b) { - return Transform.mul(a, b); - }; - }; - Transform.mulVec2 = function (a, b) { - var x = (a.q.c * b.x - a.q.s * b.y) + a.p.x; - var y = (a.q.s * b.x + a.q.c * b.y) + a.p.y; - return Vec2.neo(x, y); - }; - Transform.mulXf = function (a, b) { - // v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p - // = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p - var xf = Transform.identity(); - xf.q = Rot.mulRot(a.q, b.q); - xf.p = Vec2.add(Rot.mulVec2(a.q, b.p), a.p); - return xf; - }; - Transform.mulT = function (a, b) { - if ("x" in b && "y" in b) { - return Transform.mulTVec2(a, b); - } - else if ("p" in b && "q" in b) { - return Transform.mulTXf(a, b); + }; + Body2.prototype.isActive = function() { + return this.m_activeFlag; + }; + Body2.prototype.setActive = function(flag) { + if (flag == this.m_activeFlag) { + return; + } + this.m_activeFlag = !!flag; + if (this.m_activeFlag) { + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.createProxies(broadPhase, this.m_xf); + } + this.m_world.m_newFixture = true; + } else { + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.destroyProxies(broadPhase); + } + var ce = this.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.m_world.destroyContact(ce0.contact); + } + this.m_contactList = null; + } + }; + Body2.prototype.isFixedRotation = function() { + return this.m_fixedRotationFlag; + }; + Body2.prototype.setFixedRotation = function(flag) { + if (this.m_fixedRotationFlag == flag) { + return; + } + this.m_fixedRotationFlag = !!flag; + this.m_angularVelocity = 0; + this.resetMassData(); + }; + Body2.prototype.getTransform = function() { + return this.m_xf; + }; + Body2.prototype.setTransform = function(position, angle) { + if (this.isWorldLocked() == true) { + return; + } + this.m_xf.setNum(position, angle); + this.m_sweep.setTransform(this.m_xf); + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.synchronize(broadPhase, this.m_xf, this.m_xf); + } + this.setAwake(true); + }; + Body2.prototype.synchronizeTransform = function() { + this.m_sweep.getTransform(this.m_xf, 1); + }; + Body2.prototype.synchronizeFixtures = function() { + this.m_sweep.getTransform(xf$2, 0); + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.synchronize(broadPhase, xf$2, this.m_xf); + } + }; + Body2.prototype.advance = function(alpha) { + this.m_sweep.advance(alpha); + copyVec2(this.m_sweep.c, this.m_sweep.c0); + this.m_sweep.a = this.m_sweep.a0; + this.m_sweep.getTransform(this.m_xf, 1); + }; + Body2.prototype.getPosition = function() { + return this.m_xf.p; + }; + Body2.prototype.setPosition = function(p) { + this.setTransform(p, this.m_sweep.a); + }; + Body2.prototype.getAngle = function() { + return this.m_sweep.a; + }; + Body2.prototype.setAngle = function(angle) { + this.setTransform(this.m_xf.p, angle); + }; + Body2.prototype.getWorldCenter = function() { + return this.m_sweep.c; + }; + Body2.prototype.getLocalCenter = function() { + return this.m_sweep.localCenter; + }; + Body2.prototype.getLinearVelocity = function() { + return this.m_linearVelocity; + }; + Body2.prototype.getLinearVelocityFromWorldPoint = function(worldPoint) { + var localCenter2 = Vec2.sub(worldPoint, this.m_sweep.c); + return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity, localCenter2)); + }; + Body2.prototype.getLinearVelocityFromLocalPoint = function(localPoint) { + return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint)); + }; + Body2.prototype.setLinearVelocity = function(v3) { + if (this.m_type == STATIC) { + return; + } + if (Vec2.dot(v3, v3) > 0) { + this.setAwake(true); + } + this.m_linearVelocity.setVec2(v3); + }; + Body2.prototype.getAngularVelocity = function() { + return this.m_angularVelocity; + }; + Body2.prototype.setAngularVelocity = function(w) { + if (this.m_type == STATIC) { + return; + } + if (w * w > 0) { + this.setAwake(true); + } + this.m_angularVelocity = w; + }; + Body2.prototype.getLinearDamping = function() { + return this.m_linearDamping; + }; + Body2.prototype.setLinearDamping = function(linearDamping) { + this.m_linearDamping = linearDamping; + }; + Body2.prototype.getAngularDamping = function() { + return this.m_angularDamping; + }; + Body2.prototype.setAngularDamping = function(angularDamping) { + this.m_angularDamping = angularDamping; + }; + Body2.prototype.getGravityScale = function() { + return this.m_gravityScale; + }; + Body2.prototype.setGravityScale = function(scale) { + this.m_gravityScale = scale; + }; + Body2.prototype.getMass = function() { + return this.m_mass; + }; + Body2.prototype.getInertia = function() { + return this.m_I + this.m_mass * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter); + }; + Body2.prototype.getMassData = function(data) { + data.mass = this.m_mass; + data.I = this.getInertia(); + copyVec2(data.center, this.m_sweep.localCenter); + }; + Body2.prototype.resetMassData = function() { + this.m_mass = 0; + this.m_invMass = 0; + this.m_I = 0; + this.m_invI = 0; + zeroVec2(this.m_sweep.localCenter); + if (this.isStatic() || this.isKinematic()) { + copyVec2(this.m_sweep.c0, this.m_xf.p); + copyVec2(this.m_sweep.c, this.m_xf.p); + this.m_sweep.a0 = this.m_sweep.a; + return; + } + zeroVec2(localCenter); + for (var f = this.m_fixtureList; f; f = f.m_next) { + if (f.m_density == 0) { + continue; + } + var massData = { + mass: 0, + center: vec2(0, 0), + I: 0 + }; + f.getMassData(massData); + this.m_mass += massData.mass; + plusScaleVec2(localCenter, massData.mass, massData.center); + this.m_I += massData.I; + } + if (this.m_mass > 0) { + this.m_invMass = 1 / this.m_mass; + scaleVec2(localCenter, this.m_invMass, localCenter); + } else { + this.m_mass = 1; + this.m_invMass = 1; + } + if (this.m_I > 0 && this.m_fixedRotationFlag == false) { + this.m_I -= this.m_mass * dotVec2(localCenter, localCenter); + this.m_invI = 1 / this.m_I; + } else { + this.m_I = 0; + this.m_invI = 0; + } + copyVec2(oldCenter, this.m_sweep.c); + this.m_sweep.setLocalCenter(localCenter, this.m_xf); + subVec2(shift, this.m_sweep.c, oldCenter); + crossNumVec2(temp$6, this.m_angularVelocity, shift); + plusVec2(this.m_linearVelocity, temp$6); + }; + Body2.prototype.setMassData = function(massData) { + if (this.isWorldLocked() == true) { + return; + } + if (this.m_type != DYNAMIC) { + return; + } + this.m_invMass = 0; + this.m_I = 0; + this.m_invI = 0; + this.m_mass = massData.mass; + if (this.m_mass <= 0) { + this.m_mass = 1; + } + this.m_invMass = 1 / this.m_mass; + if (massData.I > 0 && this.m_fixedRotationFlag == false) { + this.m_I = massData.I - this.m_mass * dotVec2(massData.center, massData.center); + this.m_invI = 1 / this.m_I; + } + copyVec2(oldCenter, this.m_sweep.c); + this.m_sweep.setLocalCenter(massData.center, this.m_xf); + subVec2(shift, this.m_sweep.c, oldCenter); + crossNumVec2(temp$6, this.m_angularVelocity, shift); + plusVec2(this.m_linearVelocity, temp$6); + }; + Body2.prototype.applyForce = function(force, point2, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_force.add(force); + this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point2, this.m_sweep.c), force); + } + }; + Body2.prototype.applyForceToCenter = function(force, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_force.add(force); + } + }; + Body2.prototype.applyTorque = function(torque, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_torque += torque; + } + }; + Body2.prototype.applyLinearImpulse = function(impulse, point2, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_linearVelocity.addMul(this.m_invMass, impulse); + this.m_angularVelocity += this.m_invI * Vec2.crossVec2Vec2(Vec2.sub(point2, this.m_sweep.c), impulse); + } + }; + Body2.prototype.applyAngularImpulse = function(impulse, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_angularVelocity += this.m_invI * impulse; + } + }; + Body2.prototype.shouldCollide = function(that) { + if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) { + return false; + } + for (var jn = this.m_jointList; jn; jn = jn.next) { + if (jn.other == that) { + if (jn.joint.m_collideConnected == false) { + return false; } - }; - Transform.mulTVec2 = function (a, b) { - var px = b.x - a.p.x; - var py = b.y - a.p.y; - var x = (a.q.c * px + a.q.s * py); - var y = (-a.q.s * px + a.q.c * py); - return Vec2.neo(x, y); - }; - Transform.mulTXf = function (a, b) { - // v2 = A.q' * (B.q * v1 + B.p - A.p) - // = A.q' * B.q * v1 + A.q' * (B.p - A.p) - var xf = Transform.identity(); - xf.q.setRot(Rot.mulTRot(a.q, b.q)); - xf.p.setVec2(Rot.mulTVec2(a.q, Vec2.sub(b.p, a.p))); - return xf; - }; - return Transform; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - var Velocity = /** @class */ (function () { - function Velocity() { - /** linear */ - this.v = Vec2.zero(); - /** angular */ - this.w = 0; - } - return Velocity; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_sin = Math.sin; - /** @internal */ var math_cos = Math.cos; - var Position = /** @class */ (function () { - function Position() { - /** location */ - this.c = Vec2.zero(); - /** angle */ - this.a = 0; - } - // todo: cache sin/cos - Position.prototype.getTransform = function (xf, p) { - // xf.q = rotation(this.a); - // xf.p = this.c - xf.q * p - xf.q.c = math_cos(this.a); - xf.q.s = math_sin(this.a); - xf.p.x = this.c.x - (xf.q.c * p.x - xf.q.s * p.y); - xf.p.y = this.c.y - (xf.q.s * p.x + xf.q.c * p.y); - return xf; - }; - return Position; - }()); - function getTransform(xf, p, c, a) { - // xf.q = rotation(a); - // xf.p = this.c - xf.q * p - xf.q.c = math_cos(a); - xf.q.s = math_sin(a); - xf.p.x = c.x - (xf.q.c * p.x - xf.q.s * p.y); - xf.p.y = c.y - (xf.q.s * p.x + xf.q.c * p.y); - return xf; + } + } + return true; + }; + Body2.prototype._addFixture = function(fixture) { + if (this.isWorldLocked() == true) { + return null; + } + if (this.m_activeFlag) { + var broadPhase = this.m_world.m_broadPhase; + fixture.createProxies(broadPhase, this.m_xf); + } + fixture.m_next = this.m_fixtureList; + this.m_fixtureList = fixture; + if (fixture.m_density > 0) { + this.resetMassData(); + } + this.m_world.m_newFixture = true; + return fixture; + }; + Body2.prototype.createFixture = function(shape, fixdef) { + if (this.isWorldLocked() == true) { + return null; + } + var fixture = new Fixture(this, shape, fixdef); + this._addFixture(fixture); + return fixture; + }; + Body2.prototype.destroyFixture = function(fixture) { + if (this.isWorldLocked() == true) { + return; + } + if (this.m_fixtureList === fixture) { + this.m_fixtureList = fixture.m_next; + } else { + var node = this.m_fixtureList; + while (node != null) { + if (node.m_next === fixture) { + node.m_next = fixture.m_next; + break; + } + node = node.m_next; + } + } + var edge = this.m_contactList; + while (edge) { + var c2 = edge.contact; + edge = edge.next; + var fixtureA = c2.getFixtureA(); + var fixtureB = c2.getFixtureB(); + if (fixture == fixtureA || fixture == fixtureB) { + this.m_world.destroyContact(c2); + } + } + if (this.m_activeFlag) { + var broadPhase = this.m_world.m_broadPhase; + fixture.destroyProxies(broadPhase); + } + fixture.m_body = null; + fixture.m_next = null; + this.m_world.publish("remove-fixture", fixture); + this.resetMassData(); + }; + Body2.prototype.getWorldPoint = function(localPoint) { + return Transform.mulVec2(this.m_xf, localPoint); + }; + Body2.prototype.getWorldVector = function(localVector) { + return Rot.mulVec2(this.m_xf.q, localVector); + }; + Body2.prototype.getLocalPoint = function(worldPoint) { + return Transform.mulTVec2(this.m_xf, worldPoint); + }; + Body2.prototype.getLocalVector = function(worldVector) { + return Rot.mulTVec2(this.m_xf.q, worldVector); + }; + Body2.STATIC = "static"; + Body2.KINEMATIC = "kinematic"; + Body2.DYNAMIC = "dynamic"; + return Body2; + }() + ); + var JointEdge = ( + /** @class */ + /* @__PURE__ */ function() { + function JointEdge2() { + this.other = null; + this.joint = null; + this.prev = null; + this.next = null; + } + return JointEdge2; + }() + ); + var Joint = ( + /** @class */ + function() { + function Joint2(def, bodyA, bodyB) { + this.m_type = "unknown-joint"; + this.m_prev = null; + this.m_next = null; + this.m_edgeA = new JointEdge(); + this.m_edgeB = new JointEdge(); + this.m_islandFlag = false; + this.style = {}; + this.appData = {}; + bodyA = "bodyA" in def ? def.bodyA : bodyA; + bodyB = "bodyB" in def ? def.bodyB : bodyB; + this.m_bodyA = bodyA; + this.m_bodyB = bodyB; + this.m_collideConnected = !!def.collideConnected; + this.m_userData = def.userData; + } + Joint2.prototype.isActive = function() { + return this.m_bodyA.isActive() && this.m_bodyB.isActive(); + }; + Joint2.prototype.getType = function() { + return this.m_type; + }; + Joint2.prototype.getBodyA = function() { + return this.m_bodyA; + }; + Joint2.prototype.getBodyB = function() { + return this.m_bodyB; + }; + Joint2.prototype.getNext = function() { + return this.m_next; + }; + Joint2.prototype.getUserData = function() { + return this.m_userData; + }; + Joint2.prototype.setUserData = function(data) { + this.m_userData = data; + }; + Joint2.prototype.getCollideConnected = function() { + return this.m_collideConnected; + }; + Joint2.prototype.shiftOrigin = function(newOrigin) { + }; + Joint2.prototype._resetAnchors = function(def) { + return this._reset(def); + }; + return Joint2; + }() + ); + var stats$1 = { + gjkCalls: 0, + gjkIters: 0, + gjkMaxIters: 0, + toiTime: 0, + toiMaxTime: 0, + toiCalls: 0, + toiIters: 0, + toiMaxIters: 0, + toiRootIters: 0, + toiMaxRootIters: 0, + toString: function(newline) { + newline = typeof newline === "string" ? newline : "\n"; + var string = ""; + for (var name_1 in this) { + if (typeof this[name_1] !== "function" && typeof this[name_1] !== "object") { + string += name_1 + ": " + this[name_1] + newline; + } + } + return string; } - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - // todo make shape an interface - /** - * A shape is used for collision detection. You can create a shape however you - * like. Shapes used for simulation in World are created automatically when a - * Fixture is created. Shapes may encapsulate one or more child shapes. - */ - var Shape = /** @class */ (function () { - function Shape() { - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - } - Shape.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return typeof obj.m_type === "string" && typeof obj.m_radius === "number"; - }; - return Shape; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var synchronize_aabb1 = new AABB(); - /** @internal */ var synchronize_aabb2 = new AABB(); - /** @internal */ var displacement = vec2(0, 0); - /** @internal */ var FixtureDefDefault = { - userData: null, - friction: 0.2, - restitution: 0.0, - density: 0.0, - isSensor: false, - filterGroupIndex: 0, - filterCategoryBits: 0x0001, - filterMaskBits: 0xFFFF - }; - /** - * This proxy is used internally to connect shape children to the broad-phase. - */ - var FixtureProxy = /** @class */ (function () { - function FixtureProxy(fixture, childIndex) { - this.aabb = new AABB(); - this.fixture = fixture; - this.childIndex = childIndex; - this.proxyId; - } - return FixtureProxy; - }()); - /** - * A fixture is used to attach a shape to a body for collision detection. A - * fixture inherits its transform from its parent. Fixtures hold additional - * non-geometric data such as friction, collision filters, etc. - * - * To create a new Fixture use {@link Body.createFixture}. - */ - var Fixture = /** @class */ (function () { - /** @internal */ - function Fixture(body, shape, def) { - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - if (shape.shape) { - def = shape; - shape = shape.shape; - } - else if (typeof def === "number") { - def = { density: def }; - } - def = options(def, FixtureDefDefault); - this.m_body = body; - this.m_friction = def.friction; - this.m_restitution = def.restitution; - this.m_density = def.density; - this.m_isSensor = def.isSensor; - this.m_filterGroupIndex = def.filterGroupIndex; - this.m_filterCategoryBits = def.filterCategoryBits; - this.m_filterMaskBits = def.filterMaskBits; - // TODO validate shape - this.m_shape = shape; // .clone(); - this.m_next = null; - this.m_proxies = []; - this.m_proxyCount = 0; - // fixture proxies are created here, - // but they are activate in when a fixture is added to body - var childCount = this.m_shape.getChildCount(); - for (var i = 0; i < childCount; ++i) { - this.m_proxies[i] = new FixtureProxy(this, i); - } - this.m_userData = def.userData; - } - /** @hidden Re-setup fixture. */ - Fixture.prototype._reset = function () { - var body = this.getBody(); - var broadPhase = body.m_world.m_broadPhase; - this.destroyProxies(broadPhase); - if (this.m_shape._reset) { - this.m_shape._reset(); - } - var childCount = this.m_shape.getChildCount(); - for (var i = 0; i < childCount; ++i) { - this.m_proxies[i] = new FixtureProxy(this, i); - } - this.createProxies(broadPhase, body.m_xf); - body.resetMassData(); - }; - /** @internal */ - Fixture.prototype._serialize = function () { - return { - friction: this.m_friction, - restitution: this.m_restitution, - density: this.m_density, - isSensor: this.m_isSensor, - filterGroupIndex: this.m_filterGroupIndex, - filterCategoryBits: this.m_filterCategoryBits, - filterMaskBits: this.m_filterMaskBits, - shape: this.m_shape, - }; - }; - /** @internal */ - Fixture._deserialize = function (data, body, restore) { - var shape = restore(Shape, data.shape); - var fixture = shape && new Fixture(body, shape, data); - return fixture; - }; - /** - * Get the type of the child shape. You can use this to down cast to the - * concrete shape. - */ - Fixture.prototype.getType = function () { - return this.m_shape.m_type; - }; - /** - * Get the child shape. You can modify the child shape, however you should not - * change the number of vertices because this will crash some collision caching - * mechanisms. Manipulating the shape may lead to non-physical behavior. - */ - Fixture.prototype.getShape = function () { - return this.m_shape; - }; - /** - * A sensor shape collects contact information but never generates a collision - * response. - */ - Fixture.prototype.isSensor = function () { - return this.m_isSensor; - }; - /** - * Set if this fixture is a sensor. - */ - Fixture.prototype.setSensor = function (sensor) { - if (sensor != this.m_isSensor) { - this.m_body.setAwake(true); - this.m_isSensor = sensor; - } - }; - // /** - // * Get the contact filtering data. - // */ - // getFilterData() { - // return this.m_filter; - // } - /** - * Get the user data that was assigned in the fixture definition. Use this to - * store your application specific data. - */ - Fixture.prototype.getUserData = function () { - return this.m_userData; - }; - /** - * Set the user data. Use this to store your application specific data. - */ - Fixture.prototype.setUserData = function (data) { - this.m_userData = data; - }; - /** - * Get the parent body of this fixture. This is null if the fixture is not - * attached. - */ - Fixture.prototype.getBody = function () { - return this.m_body; - }; - /** - * Get the next fixture in the parent body's fixture list. - */ - Fixture.prototype.getNext = function () { - return this.m_next; - }; - /** - * Get the density of this fixture. - */ - Fixture.prototype.getDensity = function () { - return this.m_density; - }; - /** - * Set the density of this fixture. This will _not_ automatically adjust the - * mass of the body. You must call Body.resetMassData to update the body's mass. - */ - Fixture.prototype.setDensity = function (density) { - this.m_density = density; - }; - /** - * Get the coefficient of friction, usually in the range [0,1]. - */ - Fixture.prototype.getFriction = function () { - return this.m_friction; - }; - /** - * Set the coefficient of friction. This will not change the friction of - * existing contacts. - */ - Fixture.prototype.setFriction = function (friction) { - this.m_friction = friction; - }; - /** - * Get the coefficient of restitution. - */ - Fixture.prototype.getRestitution = function () { - return this.m_restitution; - }; - /** - * Set the coefficient of restitution. This will not change the restitution of - * existing contacts. - */ - Fixture.prototype.setRestitution = function (restitution) { - this.m_restitution = restitution; - }; - /** - * Test a point in world coordinates for containment in this fixture. - */ - Fixture.prototype.testPoint = function (p) { - return this.m_shape.testPoint(this.m_body.getTransform(), p); - }; - /** - * Cast a ray against this shape. - */ - Fixture.prototype.rayCast = function (output, input, childIndex) { - return this.m_shape.rayCast(output, input, this.m_body.getTransform(), childIndex); - }; - /** - * Get the mass data for this fixture. The mass data is based on the density and - * the shape. The rotational inertia is about the shape's origin. This operation - * may be expensive. - */ - Fixture.prototype.getMassData = function (massData) { - this.m_shape.computeMass(massData, this.m_density); - }; - /** - * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a - * more accurate AABB, compute it using the shape and the body transform. - */ - Fixture.prototype.getAABB = function (childIndex) { - return this.m_proxies[childIndex].aabb; - }; - /** - * These support body activation/deactivation. - */ - Fixture.prototype.createProxies = function (broadPhase, xf) { - // Create proxies in the broad-phase. - this.m_proxyCount = this.m_shape.getChildCount(); - for (var i = 0; i < this.m_proxyCount; ++i) { - var proxy = this.m_proxies[i]; - this.m_shape.computeAABB(proxy.aabb, xf, i); - proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy); - } - }; - Fixture.prototype.destroyProxies = function (broadPhase) { - // Destroy proxies in the broad-phase. - for (var i = 0; i < this.m_proxyCount; ++i) { - var proxy = this.m_proxies[i]; - broadPhase.destroyProxy(proxy.proxyId); - proxy.proxyId = null; - } - this.m_proxyCount = 0; - }; - /** - * Updates this fixture proxy in broad-phase (with combined AABB of current and - * next transformation). - */ - Fixture.prototype.synchronize = function (broadPhase, xf1, xf2) { - for (var i = 0; i < this.m_proxyCount; ++i) { - var proxy = this.m_proxies[i]; - // Compute an AABB that covers the swept shape (may miss some rotation - // effect). - this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex); - this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex); - proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2); - subVec2(displacement, xf2.p, xf1.p); - broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement); - } - }; - /** - * Set the contact filtering data. This will not update contacts until the next - * time step when either parent body is active and awake. This automatically - * calls refilter. - */ - Fixture.prototype.setFilterData = function (filter) { - this.m_filterGroupIndex = filter.groupIndex; - this.m_filterCategoryBits = filter.categoryBits; - this.m_filterMaskBits = filter.maskBits; - this.refilter(); - }; - Fixture.prototype.getFilterGroupIndex = function () { - return this.m_filterGroupIndex; - }; - Fixture.prototype.setFilterGroupIndex = function (groupIndex) { - this.m_filterGroupIndex = groupIndex; - this.refilter(); - }; - Fixture.prototype.getFilterCategoryBits = function () { - return this.m_filterCategoryBits; - }; - Fixture.prototype.setFilterCategoryBits = function (categoryBits) { - this.m_filterCategoryBits = categoryBits; - this.refilter(); - }; - Fixture.prototype.getFilterMaskBits = function () { - return this.m_filterMaskBits; - }; - Fixture.prototype.setFilterMaskBits = function (maskBits) { - this.m_filterMaskBits = maskBits; - this.refilter(); - }; - /** - * Call this if you want to establish collision that was previously disabled by - * ContactFilter. - */ - Fixture.prototype.refilter = function () { - if (this.m_body == null) { - return; - } - // Flag associated contacts for filtering. - var edge = this.m_body.getContactList(); - while (edge) { - var contact = edge.contact; - var fixtureA = contact.getFixtureA(); - var fixtureB = contact.getFixtureB(); - if (fixtureA == this || fixtureB == this) { - contact.flagForFiltering(); - } - edge = edge.next; - } - var world = this.m_body.getWorld(); - if (world == null) { - return; - } - // Touch each proxy so that new pairs may be created - var broadPhase = world.m_broadPhase; - for (var i = 0; i < this.m_proxyCount; ++i) { - broadPhase.touchProxy(this.m_proxies[i].proxyId); - } - }; - /** - * Implement this method to provide collision filtering, if you want finer - * control over contact creation. - * - * Return true if contact calculations should be performed between these two - * fixtures. - * - * Warning: for performance reasons this is only called when the AABBs begin to - * overlap. - */ - Fixture.prototype.shouldCollide = function (that) { - if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) { - return that.m_filterGroupIndex > 0; - } - var collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0; - var collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0; - var collide = collideA && collideB; - return collide; - }; - return Fixture; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var STATIC = "static"; - /** @internal */ var KINEMATIC = "kinematic"; - /** @internal */ var DYNAMIC = "dynamic"; - /** @internal */ var oldCenter = vec2(0, 0); - /** @internal */ var localCenter = vec2(0, 0); - /** @internal */ var shift = vec2(0, 0); - /** @internal */ var temp$6 = vec2(0, 0); - /** @internal */ var xf$2 = transform(0, 0, 0); - /** @internal */ var BodyDefDefault = { - type: STATIC, - position: Vec2.zero(), - angle: 0.0, - linearVelocity: Vec2.zero(), - angularVelocity: 0.0, - linearDamping: 0.0, - angularDamping: 0.0, - fixedRotation: false, - bullet: false, - gravityScale: 1.0, - allowSleep: true, - awake: true, - active: true, - userData: null - }; - /** - * A rigid body composed of one or more fixtures. - * - * To create a new Body use {@link World.createBody}. - */ - var Body = /** @class */ (function () { - /** @internal */ - function Body(world, def) { - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - def = options(def, BodyDefDefault); - this.m_world = world; - this.m_awakeFlag = def.awake; - this.m_autoSleepFlag = def.allowSleep; - this.m_bulletFlag = def.bullet; - this.m_fixedRotationFlag = def.fixedRotation; - this.m_activeFlag = def.active; - this.m_islandFlag = false; - this.m_toiFlag = false; - this.m_userData = def.userData; - this.m_type = def.type; - if (this.m_type == DYNAMIC) { - this.m_mass = 1.0; - this.m_invMass = 1.0; - } - else { - this.m_mass = 0.0; - this.m_invMass = 0.0; - } - // Rotational inertia about the center of mass. - this.m_I = 0.0; - this.m_invI = 0.0; - // the body origin transform - this.m_xf = Transform.identity(); - this.m_xf.p.setVec2(def.position); - this.m_xf.q.setAngle(def.angle); - // the swept motion for CCD - this.m_sweep = new Sweep(); - this.m_sweep.setTransform(this.m_xf); - // position and velocity correction - this.c_velocity = new Velocity(); - this.c_position = new Position(); - this.m_force = Vec2.zero(); - this.m_torque = 0.0; - this.m_linearVelocity = Vec2.clone(def.linearVelocity); - this.m_angularVelocity = def.angularVelocity; - this.m_linearDamping = def.linearDamping; - this.m_angularDamping = def.angularDamping; - this.m_gravityScale = def.gravityScale; - this.m_sleepTime = 0.0; - this.m_jointList = null; - this.m_contactList = null; - this.m_fixtureList = null; - this.m_prev = null; - this.m_next = null; - this.m_destroyed = false; - } - /** @internal */ - Body.prototype._serialize = function () { - var fixtures = []; - for (var f = this.m_fixtureList; f; f = f.m_next) { - fixtures.push(f); - } - return { - type: this.m_type, - bullet: this.m_bulletFlag, - position: this.m_xf.p, - angle: this.m_xf.q.getAngle(), - linearVelocity: this.m_linearVelocity, - angularVelocity: this.m_angularVelocity, - fixtures: fixtures, - }; - }; - /** @internal */ - Body._deserialize = function (data, world, restore) { - var body = new Body(world, data); - if (data.fixtures) { - for (var i = data.fixtures.length - 1; i >= 0; i--) { - var fixture = restore(Fixture, data.fixtures[i], body); - body._addFixture(fixture); - } - } - return body; - }; - Body.prototype.isWorldLocked = function () { - return this.m_world && this.m_world.isLocked() ? true : false; - }; - Body.prototype.getWorld = function () { - return this.m_world; - }; - Body.prototype.getNext = function () { - return this.m_next; - }; - Body.prototype.setUserData = function (data) { - this.m_userData = data; - }; - Body.prototype.getUserData = function () { - return this.m_userData; - }; - Body.prototype.getFixtureList = function () { - return this.m_fixtureList; - }; - Body.prototype.getJointList = function () { - return this.m_jointList; - }; - /** - * Warning: this list changes during the time step and you may miss some - * collisions if you don't use ContactListener. - */ - Body.prototype.getContactList = function () { - return this.m_contactList; - }; - Body.prototype.isStatic = function () { - return this.m_type == STATIC; - }; - Body.prototype.isDynamic = function () { - return this.m_type == DYNAMIC; - }; - Body.prototype.isKinematic = function () { - return this.m_type == KINEMATIC; - }; - /** - * This will alter the mass and velocity. - */ - Body.prototype.setStatic = function () { - this.setType(STATIC); - return this; - }; - Body.prototype.setDynamic = function () { - this.setType(DYNAMIC); - return this; - }; - Body.prototype.setKinematic = function () { - this.setType(KINEMATIC); - return this; - }; - /** - * Get the type of the body. - */ - Body.prototype.getType = function () { - return this.m_type; - }; - /** - * Set the type of the body to "static", "kinematic" or "dynamic". - * @param type The type of the body. - */ - Body.prototype.setType = function (type) { - if (this.isWorldLocked() == true) { - return; - } - if (this.m_type == type) { - return; - } - this.m_type = type; - this.resetMassData(); - if (this.m_type == STATIC) { - this.m_linearVelocity.setZero(); - this.m_angularVelocity = 0.0; - this.m_sweep.forward(); - this.synchronizeFixtures(); - } - this.setAwake(true); - this.m_force.setZero(); - this.m_torque = 0.0; - // Delete the attached contacts. - var ce = this.m_contactList; - while (ce) { - var ce0 = ce; - ce = ce.next; - this.m_world.destroyContact(ce0.contact); - } - this.m_contactList = null; - // Touch the proxies so that new contacts will be created (when appropriate) - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - for (var i = 0; i < f.m_proxyCount; ++i) { - broadPhase.touchProxy(f.m_proxies[i].proxyId); - } - } - }; - Body.prototype.isBullet = function () { - return this.m_bulletFlag; - }; - /** - * Should this body be treated like a bullet for continuous collision detection? - */ - Body.prototype.setBullet = function (flag) { - this.m_bulletFlag = !!flag; - }; - Body.prototype.isSleepingAllowed = function () { - return this.m_autoSleepFlag; - }; - Body.prototype.setSleepingAllowed = function (flag) { - this.m_autoSleepFlag = !!flag; - if (this.m_autoSleepFlag == false) { - this.setAwake(true); - } - }; - Body.prototype.isAwake = function () { - return this.m_awakeFlag; - }; - /** - * Set the sleep state of the body. A sleeping body has very low CPU cost. - * - * @param flag Set to true to wake the body, false to put it to sleep. - */ - Body.prototype.setAwake = function (flag) { - if (flag) { - this.m_awakeFlag = true; - this.m_sleepTime = 0.0; - } - else { - this.m_awakeFlag = false; - this.m_sleepTime = 0.0; - this.m_linearVelocity.setZero(); - this.m_angularVelocity = 0.0; - this.m_force.setZero(); - this.m_torque = 0.0; - } - }; - Body.prototype.isActive = function () { - return this.m_activeFlag; - }; - /** - * Set the active state of the body. An inactive body is not simulated and - * cannot be collided with or woken up. If you pass a flag of true, all fixtures - * will be added to the broad-phase. If you pass a flag of false, all fixtures - * will be removed from the broad-phase and all contacts will be destroyed. - * Fixtures and joints are otherwise unaffected. - * - * You may continue to create/destroy fixtures and joints on inactive bodies. - * Fixtures on an inactive body are implicitly inactive and will not participate - * in collisions, ray-casts, or queries. Joints connected to an inactive body - * are implicitly inactive. An inactive body is still owned by a World object - * and remains - */ - Body.prototype.setActive = function (flag) { - if (flag == this.m_activeFlag) { - return; - } - this.m_activeFlag = !!flag; - if (this.m_activeFlag) { - // Create all proxies. - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.createProxies(broadPhase, this.m_xf); - } - // Contacts are created at the beginning of the next - this.m_world.m_newFixture = true; - } - else { - // Destroy all proxies. - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.destroyProxies(broadPhase); - } - // Destroy the attached contacts. - var ce = this.m_contactList; - while (ce) { - var ce0 = ce; - ce = ce.next; - this.m_world.destroyContact(ce0.contact); - } - this.m_contactList = null; - } - }; - Body.prototype.isFixedRotation = function () { - return this.m_fixedRotationFlag; - }; - /** - * Set this body to have fixed rotation. This causes the mass to be reset. - */ - Body.prototype.setFixedRotation = function (flag) { - if (this.m_fixedRotationFlag == flag) { - return; - } - this.m_fixedRotationFlag = !!flag; - this.m_angularVelocity = 0.0; - this.resetMassData(); - }; - /** - * Get the world transform for the body's origin. - */ - Body.prototype.getTransform = function () { - return this.m_xf; - }; - /** - * Set the position of the body's origin and rotation. Manipulating a body's - * transform may cause non-physical behavior. Note: contacts are updated on the - * next call to World.step. - * - * @param position The world position of the body's local origin. - * @param angle The world rotation in radians. - */ - Body.prototype.setTransform = function (position, angle) { - if (this.isWorldLocked() == true) { - return; - } - this.m_xf.setNum(position, angle); - this.m_sweep.setTransform(this.m_xf); - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.synchronize(broadPhase, this.m_xf, this.m_xf); - } - this.setAwake(true); - }; - Body.prototype.synchronizeTransform = function () { - this.m_sweep.getTransform(this.m_xf, 1); - }; - /** - * Update fixtures in broad-phase. - */ - Body.prototype.synchronizeFixtures = function () { - this.m_sweep.getTransform(xf$2, 0); - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.synchronize(broadPhase, xf$2, this.m_xf); - } - }; - /** - * Used in TOI. - */ - Body.prototype.advance = function (alpha) { - // Advance to the new safe time. This doesn't sync the broad-phase. - this.m_sweep.advance(alpha); - copyVec2(this.m_sweep.c, this.m_sweep.c0); - this.m_sweep.a = this.m_sweep.a0; - this.m_sweep.getTransform(this.m_xf, 1); - }; - /** - * Get the world position for the body's origin. - */ - Body.prototype.getPosition = function () { - return this.m_xf.p; - }; - Body.prototype.setPosition = function (p) { - this.setTransform(p, this.m_sweep.a); - }; - /** - * Get the current world rotation angle in radians. - */ - Body.prototype.getAngle = function () { - return this.m_sweep.a; - }; - Body.prototype.setAngle = function (angle) { - this.setTransform(this.m_xf.p, angle); - }; - /** - * Get the world position of the center of mass. - */ - Body.prototype.getWorldCenter = function () { - return this.m_sweep.c; - }; - /** - * Get the local position of the center of mass. - */ - Body.prototype.getLocalCenter = function () { - return this.m_sweep.localCenter; - }; - /** - * Get the linear velocity of the center of mass. - * - * @return the linear velocity of the center of mass. - */ - Body.prototype.getLinearVelocity = function () { - return this.m_linearVelocity; - }; - /** - * Get the world linear velocity of a world point attached to this body. - * - * @param worldPoint A point in world coordinates. - */ - Body.prototype.getLinearVelocityFromWorldPoint = function (worldPoint) { - var localCenter = Vec2.sub(worldPoint, this.m_sweep.c); - return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity, localCenter)); - }; - /** - * Get the world velocity of a local point. - * - * @param localPoint A point in local coordinates. - */ - Body.prototype.getLinearVelocityFromLocalPoint = function (localPoint) { - return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint)); - }; - /** - * Set the linear velocity of the center of mass. - * - * @param v The new linear velocity of the center of mass. - */ - Body.prototype.setLinearVelocity = function (v) { - if (this.m_type == STATIC) { - return; - } - if (Vec2.dot(v, v) > 0.0) { - this.setAwake(true); - } - this.m_linearVelocity.setVec2(v); - }; - /** - * Get the angular velocity. - * - * @returns the angular velocity in radians/second. - */ - Body.prototype.getAngularVelocity = function () { - return this.m_angularVelocity; - }; - /** - * Set the angular velocity. - * - * @param omega The new angular velocity in radians/second. - */ - Body.prototype.setAngularVelocity = function (w) { - if (this.m_type == STATIC) { - return; - } - if (w * w > 0.0) { - this.setAwake(true); - } - this.m_angularVelocity = w; - }; - Body.prototype.getLinearDamping = function () { - return this.m_linearDamping; - }; - Body.prototype.setLinearDamping = function (linearDamping) { - this.m_linearDamping = linearDamping; - }; - Body.prototype.getAngularDamping = function () { - return this.m_angularDamping; - }; - Body.prototype.setAngularDamping = function (angularDamping) { - this.m_angularDamping = angularDamping; - }; - Body.prototype.getGravityScale = function () { - return this.m_gravityScale; - }; - /** - * Scale the gravity applied to this body. - */ - Body.prototype.setGravityScale = function (scale) { - this.m_gravityScale = scale; - }; - /** - * Get the total mass of the body. - * - * @returns The mass, usually in kilograms (kg). - */ - Body.prototype.getMass = function () { - return this.m_mass; - }; - /** - * Get the rotational inertia of the body about the local origin. - * - * @return the rotational inertia, usually in kg-m^2. - */ - Body.prototype.getInertia = function () { - return this.m_I + this.m_mass - * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter); - }; - /** - * Copy the mass data of the body to data. - */ - Body.prototype.getMassData = function (data) { - data.mass = this.m_mass; - data.I = this.getInertia(); - copyVec2(data.center, this.m_sweep.localCenter); - }; - /** - * This resets the mass properties to the sum of the mass properties of the - * fixtures. This normally does not need to be called unless you called - * SetMassData to override the mass and you later want to reset the mass. - */ - Body.prototype.resetMassData = function () { - // Compute mass data from shapes. Each shape has its own density. - this.m_mass = 0.0; - this.m_invMass = 0.0; - this.m_I = 0.0; - this.m_invI = 0.0; - zeroVec2(this.m_sweep.localCenter); - // Static and kinematic bodies have zero mass. - if (this.isStatic() || this.isKinematic()) { - copyVec2(this.m_sweep.c0, this.m_xf.p); - copyVec2(this.m_sweep.c, this.m_xf.p); - this.m_sweep.a0 = this.m_sweep.a; - return; - } - // Accumulate mass over all fixtures. - zeroVec2(localCenter); - for (var f = this.m_fixtureList; f; f = f.m_next) { - if (f.m_density == 0.0) { - continue; - } - var massData = { - mass: 0, - center: vec2(0, 0), - I: 0 - }; - f.getMassData(massData); - this.m_mass += massData.mass; - plusScaleVec2(localCenter, massData.mass, massData.center); - this.m_I += massData.I; - } - // Compute center of mass. - if (this.m_mass > 0.0) { - this.m_invMass = 1.0 / this.m_mass; - scaleVec2(localCenter, this.m_invMass, localCenter); - } - else { - // Force all dynamic bodies to have a positive mass. - this.m_mass = 1.0; - this.m_invMass = 1.0; - } - if (this.m_I > 0.0 && this.m_fixedRotationFlag == false) { - // Center the inertia about the center of mass. - this.m_I -= this.m_mass * dotVec2(localCenter, localCenter); - this.m_invI = 1.0 / this.m_I; - } - else { - this.m_I = 0.0; - this.m_invI = 0.0; - } - // Move center of mass. - copyVec2(oldCenter, this.m_sweep.c); - this.m_sweep.setLocalCenter(localCenter, this.m_xf); - // Update center of mass velocity. - subVec2(shift, this.m_sweep.c, oldCenter); - crossNumVec2(temp$6, this.m_angularVelocity, shift); - plusVec2(this.m_linearVelocity, temp$6); - }; - /** - * Set the mass properties to override the mass properties of the fixtures. Note - * that this changes the center of mass position. Note that creating or - * destroying fixtures can also alter the mass. This function has no effect if - * the body isn't dynamic. - * - * @param massData The mass properties. - */ - Body.prototype.setMassData = function (massData) { - if (this.isWorldLocked() == true) { - return; - } - if (this.m_type != DYNAMIC) { - return; - } - this.m_invMass = 0.0; - this.m_I = 0.0; - this.m_invI = 0.0; - this.m_mass = massData.mass; - if (this.m_mass <= 0.0) { - this.m_mass = 1.0; - } - this.m_invMass = 1.0 / this.m_mass; - if (massData.I > 0.0 && this.m_fixedRotationFlag == false) { - this.m_I = massData.I - this.m_mass * dotVec2(massData.center, massData.center); - this.m_invI = 1.0 / this.m_I; - } - // Move center of mass. - copyVec2(oldCenter, this.m_sweep.c); - this.m_sweep.setLocalCenter(massData.center, this.m_xf); - // Update center of mass velocity. - subVec2(shift, this.m_sweep.c, oldCenter); - crossNumVec2(temp$6, this.m_angularVelocity, shift); - plusVec2(this.m_linearVelocity, temp$6); - }; - /** - * Apply a force at a world point. If the force is not applied at the center of - * mass, it will generate a torque and affect the angular velocity. This wakes - * up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - Body.prototype.applyForce = function (force, point, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate a force if the body is sleeping. - if (this.m_awakeFlag) { - this.m_force.add(force); - this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), force); - } - }; - /** - * Apply a force to the center of mass. This wakes up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param wake Also wake up the body - */ - Body.prototype.applyForceToCenter = function (force, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate a force if the body is sleeping - if (this.m_awakeFlag) { - this.m_force.add(force); - } - }; - /** - * Apply a torque. This affects the angular velocity without affecting the - * linear velocity of the center of mass. This wakes up the body. - * - * @param torque About the z-axis (out of the screen), usually in N-m. - * @param wake Also wake up the body - */ - Body.prototype.applyTorque = function (torque, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate a force if the body is sleeping - if (this.m_awakeFlag) { - this.m_torque += torque; - } - }; - /** - * Apply an impulse at a point. This immediately modifies the velocity. It also - * modifies the angular velocity if the point of application is not at the - * center of mass. This wakes up the body. - * - * @param impulse The world impulse vector, usually in N-seconds or kg-m/s. - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - Body.prototype.applyLinearImpulse = function (impulse, point, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate velocity if the body is sleeping - if (this.m_awakeFlag) { - this.m_linearVelocity.addMul(this.m_invMass, impulse); - this.m_angularVelocity += this.m_invI * Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), impulse); - } - }; - /** - * Apply an angular impulse. - * - * @param impulse The angular impulse in units of kg*m*m/s - * @param wake Also wake up the body - */ - Body.prototype.applyAngularImpulse = function (impulse, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate velocity if the body is sleeping - if (this.m_awakeFlag) { - this.m_angularVelocity += this.m_invI * impulse; - } - }; - /** - * This is used to test if two bodies should collide. - * - * Bodies do not collide when: - * - Neither of them is dynamic - * - They are connected by a joint with collideConnected == false - */ - Body.prototype.shouldCollide = function (that) { - // At least one body should be dynamic. - if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) { - return false; - } - // Does a joint prevent collision? - for (var jn = this.m_jointList; jn; jn = jn.next) { - if (jn.other == that) { - if (jn.joint.m_collideConnected == false) { - return false; - } - } - } - return true; - }; - /** @internal Used for deserialize. */ - Body.prototype._addFixture = function (fixture) { - if (this.isWorldLocked() == true) { - return null; - } - if (this.m_activeFlag) { - var broadPhase = this.m_world.m_broadPhase; - fixture.createProxies(broadPhase, this.m_xf); - } - fixture.m_next = this.m_fixtureList; - this.m_fixtureList = fixture; - // Adjust mass properties if needed. - if (fixture.m_density > 0.0) { - this.resetMassData(); - } - // Let the world know we have a new fixture. This will cause new contacts - // to be created at the beginning of the next time step. - this.m_world.m_newFixture = true; - return fixture; - }; - // tslint:disable-next-line:typedef - Body.prototype.createFixture = function (shape, fixdef) { - if (this.isWorldLocked() == true) { - return null; - } - var fixture = new Fixture(this, shape, fixdef); - this._addFixture(fixture); - return fixture; - }; - /** - * Destroy a fixture. This removes the fixture from the broad-phase and destroys - * all contacts associated with this fixture. This will automatically adjust the - * mass of the body if the body is dynamic and the fixture has positive density. - * All fixtures attached to a body are implicitly destroyed when the body is - * destroyed. - * - * Warning: This function is locked during callbacks. - * - * @param fixture The fixture to be removed. - */ - Body.prototype.destroyFixture = function (fixture) { - if (this.isWorldLocked() == true) { - return; - } - if (this.m_fixtureList === fixture) { - this.m_fixtureList = fixture.m_next; - } - else { - var node = this.m_fixtureList; - while (node != null) { - if (node.m_next === fixture) { - node.m_next = fixture.m_next; - break; - } - node = node.m_next; - } - } - // Destroy any contacts associated with the fixture. - var edge = this.m_contactList; - while (edge) { - var c = edge.contact; - edge = edge.next; - var fixtureA = c.getFixtureA(); - var fixtureB = c.getFixtureB(); - if (fixture == fixtureA || fixture == fixtureB) { - // This destroys the contact and removes it from - // this body's contact list. - this.m_world.destroyContact(c); - } - } - if (this.m_activeFlag) { - var broadPhase = this.m_world.m_broadPhase; - fixture.destroyProxies(broadPhase); - } - fixture.m_body = null; - fixture.m_next = null; - this.m_world.publish("remove-fixture", fixture); - // Reset the mass data. - this.resetMassData(); - }; - /** - * Get the corresponding world point of a local point. - */ - Body.prototype.getWorldPoint = function (localPoint) { - return Transform.mulVec2(this.m_xf, localPoint); - }; - /** - * Get the corresponding world vector of a local vector. - */ - Body.prototype.getWorldVector = function (localVector) { - return Rot.mulVec2(this.m_xf.q, localVector); - }; - /** - * Gets the corresponding local point of a world point. - */ - Body.prototype.getLocalPoint = function (worldPoint) { - return Transform.mulTVec2(this.m_xf, worldPoint); - }; - /** - * Gets the corresponding local vector of a world vector. - */ - Body.prototype.getLocalVector = function (worldVector) { - return Rot.mulTVec2(this.m_xf.q, worldVector); - }; - /** - * A static body does not move under simulation and behaves as if it has infinite mass. - * Internally, zero is stored for the mass and the inverse mass. - * Static bodies can be moved manually by the user. - * A static body has zero velocity. - * Static bodies do not collide with other static or kinematic bodies. - */ - Body.STATIC = "static"; - /** - * A kinematic body moves under simulation according to its velocity. - * Kinematic bodies do not respond to forces. - * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity. - * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass. - * Kinematic bodies do not collide with other kinematic or static bodies. - */ - Body.KINEMATIC = "kinematic"; - /** - * A dynamic body is fully simulated. - * They can be moved manually by the user, but normally they move according to forces. - * A dynamic body can collide with all body types. - * A dynamic body always has finite, non-zero mass. - * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate. - */ - Body.DYNAMIC = "dynamic"; - return Body; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** - * A joint edge is used to connect bodies and joints together in a joint graph - * where each body is a node and each joint is an edge. A joint edge belongs to - * a doubly linked list maintained in each attached body. Each joint has two - * joint nodes, one for each attached body. - */ - var JointEdge = /** @class */ (function () { - function JointEdge() { - /** - * provides quick access to the other body attached. - */ - this.other = null; - /** - * the joint - */ - this.joint = null; - /** - * prev the previous joint edge in the body's joint list - */ - this.prev = null; - /** - * the next joint edge in the body's joint list - */ - this.next = null; - } - return JointEdge; - }()); - /** - * The base joint class. Joints are used to constraint two bodies together in - * various fashions. Some joints also feature limits and motors. - */ - var Joint = /** @class */ (function () { - function Joint(def, bodyA, bodyB) { - /** @internal */ this.m_type = "unknown-joint"; - /** @internal */ this.m_prev = null; - /** @internal */ this.m_next = null; - /** @internal */ this.m_edgeA = new JointEdge(); - /** @internal */ this.m_edgeB = new JointEdge(); - /** @internal */ this.m_islandFlag = false; - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - bodyA = "bodyA" in def ? def.bodyA : bodyA; - bodyB = "bodyB" in def ? def.bodyB : bodyB; - this.m_bodyA = bodyA; - this.m_bodyB = bodyB; - this.m_collideConnected = !!def.collideConnected; - this.m_userData = def.userData; - } - /** - * Short-cut function to determine if either body is inactive. - */ - Joint.prototype.isActive = function () { - return this.m_bodyA.isActive() && this.m_bodyB.isActive(); - }; - /** - * Get the type of the concrete joint. - */ - Joint.prototype.getType = function () { - return this.m_type; - }; - /** - * Get the first body attached to this joint. - */ - Joint.prototype.getBodyA = function () { - return this.m_bodyA; - }; - /** - * Get the second body attached to this joint. - */ - Joint.prototype.getBodyB = function () { - return this.m_bodyB; - }; - /** - * Get the next joint the world joint list. - */ - Joint.prototype.getNext = function () { - return this.m_next; - }; - Joint.prototype.getUserData = function () { - return this.m_userData; - }; - Joint.prototype.setUserData = function (data) { - this.m_userData = data; - }; - /** - * Get collide connected. Note: modifying the collide connect flag won't work - * correctly because the flag is only checked when fixture AABBs begin to - * overlap. - */ - Joint.prototype.getCollideConnected = function () { - return this.m_collideConnected; - }; - /** - * Shift the origin for any points stored in world coordinates. - */ - Joint.prototype.shiftOrigin = function (newOrigin) { }; - /** - * @internal @deprecated - * Temporary for backward compatibility, will be removed. - */ - Joint.prototype._resetAnchors = function (def) { - return this._reset(def); - }; - return Joint; - }()); - - /** @hidden */ - var stats$1 = { - gjkCalls: 0, - gjkIters: 0, - gjkMaxIters: 0, - toiTime: 0, - toiMaxTime: 0, - toiCalls: 0, - toiIters: 0, - toiMaxIters: 0, - toiRootIters: 0, - toiMaxRootIters: 0, - toString: function (newline) { - newline = typeof newline === "string" ? newline : "\n"; - var string = ""; - // tslint:disable-next-line:no-for-in - for (var name_1 in this) { - if (typeof this[name_1] !== "function" && typeof this[name_1] !== "object") { - string += name_1 + ": " + this[name_1] + newline; - } - } - return string; - } - }; - - /** @internal */ - var now = function () { - return Date.now(); - }; - /** @internal */ - var diff = function (time) { - return Date.now() - time; - }; - /** @internal */ - var Timer = { - now: now, - diff: diff, - }; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_max$5 = Math.max; - /** @internal */ var temp$5 = vec2(0, 0); - /** @internal */ var normal$4 = vec2(0, 0); - /** @internal */ var e12 = vec2(0, 0); - /** @internal */ var e13 = vec2(0, 0); - /** @internal */ var e23 = vec2(0, 0); - /** @internal */ var temp1 = vec2(0, 0); - /** @internal */ var temp2 = vec2(0, 0); - /** - * GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates. - */ - stats$1.gjkCalls = 0; - stats$1.gjkIters = 0; - stats$1.gjkMaxIters = 0; - /** - * Input for Distance. You have to option to use the shape radii in the - * computation. Even - */ - var DistanceInput = /** @class */ (function () { - function DistanceInput() { - this.proxyA = new DistanceProxy(); - this.proxyB = new DistanceProxy(); - this.transformA = Transform.identity(); - this.transformB = Transform.identity(); - this.useRadii = false; - } - DistanceInput.prototype.recycle = function () { - this.proxyA.recycle(); - this.proxyB.recycle(); - this.transformA.setIdentity(); - this.transformB.setIdentity(); - this.useRadii = false; - }; - return DistanceInput; - }()); - /** - * Output for Distance. - */ - var DistanceOutput = /** @class */ (function () { - function DistanceOutput() { - /** closest point on shapeA */ - this.pointA = vec2(0, 0); - /** closest point on shapeB */ - this.pointB = vec2(0, 0); - this.distance = 0; - /** iterations number of GJK iterations used */ - this.iterations = 0; - } - DistanceOutput.prototype.recycle = function () { - zeroVec2(this.pointA); - zeroVec2(this.pointB); - this.distance = 0; - this.iterations = 0; - }; - return DistanceOutput; - }()); - /** - * Used to warm start Distance. Set count to zero on first call. - */ - var SimplexCache = /** @class */ (function () { - function SimplexCache() { - /** length or area */ - this.metric = 0; - /** vertices on shape A */ - this.indexA = []; - /** vertices on shape B */ - this.indexB = []; - this.count = 0; - } - SimplexCache.prototype.recycle = function () { - this.metric = 0; - this.indexA.length = 0; - this.indexB.length = 0; - this.count = 0; - }; - return SimplexCache; - }()); - /** - * Compute the closest points between two shapes. Supports any combination of: - * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On - * the first call set SimplexCache.count to zero. - */ - var Distance = function (output, cache, input) { - ++stats$1.gjkCalls; - var proxyA = input.proxyA; - var proxyB = input.proxyB; - var xfA = input.transformA; - var xfB = input.transformB; - // Initialize the simplex. - // const simplex = new Simplex(); - simplex.recycle(); - simplex.readCache(cache, proxyA, xfA, proxyB, xfB); - // Get simplex vertices as an array. - var vertices = simplex.m_v; - var k_maxIters = SettingsInternal.maxDistanceIterations; - // These store the vertices of the last simplex so that we - // can check for duplicates and prevent cycling. - var saveA = []; - var saveB = []; // int[3] - var saveCount = 0; - // Main iteration loop. - var iter = 0; - while (iter < k_maxIters) { - // Copy simplex so we can identify duplicates. - saveCount = simplex.m_count; - for (var i = 0; i < saveCount; ++i) { - saveA[i] = vertices[i].indexA; - saveB[i] = vertices[i].indexB; - } - simplex.solve(); - // If we have 3 points, then the origin is in the corresponding triangle. - if (simplex.m_count === 3) { - break; - } - // Get search direction. - var d = simplex.getSearchDirection(); - // Ensure the search direction is numerically fit. - if (lengthSqrVec2(d) < EPSILON * EPSILON) { - // The origin is probably contained by a line segment - // or triangle. Thus the shapes are overlapped. - // We can't return zero here even though there may be overlap. - // In case the simplex is a point, segment, or triangle it is difficult - // to determine if the origin is contained in the CSO or very close to it. - break; - } - // Compute a tentative new simplex vertex using support points. - var vertex = vertices[simplex.m_count]; // SimplexVertex - vertex.indexA = proxyA.getSupport(derotVec2(temp$5, xfA.q, scaleVec2(temp$5, -1, d))); - transformVec2(vertex.wA, xfA, proxyA.getVertex(vertex.indexA)); - vertex.indexB = proxyB.getSupport(derotVec2(temp$5, xfB.q, d)); - transformVec2(vertex.wB, xfB, proxyB.getVertex(vertex.indexB)); - subVec2(vertex.w, vertex.wB, vertex.wA); - // Iteration count is equated to the number of support point calls. - ++iter; - ++stats$1.gjkIters; - // Check for duplicate support points. This is the main termination - // criteria. - var duplicate = false; - for (var i = 0; i < saveCount; ++i) { - if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) { - duplicate = true; - break; - } - } - // If we found a duplicate support point we must exit to avoid cycling. - if (duplicate) { - break; - } - // New vertex is ok and needed. - ++simplex.m_count; - } - stats$1.gjkMaxIters = math_max$5(stats$1.gjkMaxIters, iter); - // Prepare output. - simplex.getWitnessPoints(output.pointA, output.pointB); - output.distance = distVec2(output.pointA, output.pointB); - output.iterations = iter; - // Cache the simplex. - simplex.writeCache(cache); - // Apply radii if requested. - if (input.useRadii) { - var rA = proxyA.m_radius; - var rB = proxyB.m_radius; - if (output.distance > rA + rB && output.distance > EPSILON) { - // Shapes are still no overlapped. - // Move the witness points to the outer surface. - output.distance -= rA + rB; - subVec2(normal$4, output.pointB, output.pointA); - normalizeVec2(normal$4); - plusScaleVec2(output.pointA, rA, normal$4); - minusScaleVec2(output.pointB, rB, normal$4); - } - else { - // Shapes are overlapped when radii are considered. - // Move the witness points to the middle. - var p = subVec2(temp$5, output.pointA, output.pointB); - copyVec2(output.pointA, p); - copyVec2(output.pointB, p); - output.distance = 0.0; - } - } - }; - /** - * A distance proxy is used by the GJK algorithm. It encapsulates any shape. - */ - var DistanceProxy = /** @class */ (function () { - function DistanceProxy() { - /** @internal */ this.m_vertices = []; - // todo: remove this? - /** @internal */ this.m_count = 0; - /** @internal */ this.m_radius = 0; - } - DistanceProxy.prototype.recycle = function () { - this.m_vertices.length = 0; - this.m_count = 0; - this.m_radius = 0; - }; - /** - * Get the vertex count. - */ - DistanceProxy.prototype.getVertexCount = function () { - return this.m_count; - }; - /** - * Get a vertex by index. Used by Distance. - */ - DistanceProxy.prototype.getVertex = function (index) { - return this.m_vertices[index]; - }; - /** - * Get the supporting vertex index in the given direction. - */ - DistanceProxy.prototype.getSupport = function (d) { - var bestIndex = -1; - var bestValue = -Infinity; - for (var i = 0; i < this.m_count; ++i) { - var value = dotVec2(this.m_vertices[i], d); - if (value > bestValue) { - bestIndex = i; - bestValue = value; - } - } - return bestIndex; - }; - /** - * Get the supporting vertex in the given direction. - */ - DistanceProxy.prototype.getSupportVertex = function (d) { - return this.m_vertices[this.getSupport(d)]; - }; - /** - * Initialize the proxy using the given shape. The shape must remain in scope - * while the proxy is in use. - */ - DistanceProxy.prototype.set = function (shape, index) { - shape.computeDistanceProxy(this, index); - }; - /** - * Initialize the proxy using a vertex cloud and radius. The vertices - * must remain in scope while the proxy is in use. - */ - DistanceProxy.prototype.setVertices = function (vertices, count, radius) { - this.m_vertices = vertices; - this.m_count = count; - this.m_radius = radius; - }; - return DistanceProxy; - }()); - var SimplexVertex = /** @class */ (function () { - function SimplexVertex() { - /** support point in proxyA */ - this.wA = vec2(0, 0); - /** wA index */ - this.indexA = 0; - /** support point in proxyB */ - this.wB = vec2(0, 0); - /** wB index */ - this.indexB = 0; - /** wB - wA; */ - this.w = vec2(0, 0); - /** barycentric coordinate for closest point */ - this.a = 0; - } - SimplexVertex.prototype.recycle = function () { - this.indexA = 0; - this.indexB = 0; - zeroVec2(this.wA); - zeroVec2(this.wB); - zeroVec2(this.w); - this.a = 0; - }; - SimplexVertex.prototype.set = function (v) { - this.indexA = v.indexA; - this.indexB = v.indexB; - copyVec2(this.wA, v.wA); - copyVec2(this.wB, v.wB); - copyVec2(this.w, v.w); - this.a = v.a; - }; - return SimplexVertex; - }()); - /** @internal */ var searchDirection_reuse = vec2(0, 0); - /** @internal */ var closestPoint_reuse = vec2(0, 0); - var Simplex = /** @class */ (function () { - function Simplex() { - this.m_v1 = new SimplexVertex(); - this.m_v2 = new SimplexVertex(); - this.m_v3 = new SimplexVertex(); - this.m_v = [this.m_v1, this.m_v2, this.m_v3]; - } - Simplex.prototype.recycle = function () { - this.m_v1.recycle(); - this.m_v2.recycle(); - this.m_v3.recycle(); - this.m_count = 0; - }; - /** @internal */ Simplex.prototype.toString = function () { - if (this.m_count === 3) { - return ["+" + this.m_count, - this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y, - this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y, - this.m_v3.a, this.m_v3.wA.x, this.m_v3.wA.y, this.m_v3.wB.x, this.m_v3.wB.y - ].toString(); - } - else if (this.m_count === 2) { - return ["+" + this.m_count, - this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y, - this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y - ].toString(); - } - else if (this.m_count === 1) { - return ["+" + this.m_count, - this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y - ].toString(); - } - else { - return "+" + this.m_count; - } - }; - Simplex.prototype.readCache = function (cache, proxyA, transformA, proxyB, transformB) { - // Copy data from cache. - this.m_count = cache.count; - for (var i = 0; i < this.m_count; ++i) { - var v = this.m_v[i]; - v.indexA = cache.indexA[i]; - v.indexB = cache.indexB[i]; - var wALocal = proxyA.getVertex(v.indexA); - var wBLocal = proxyB.getVertex(v.indexB); - transformVec2(v.wA, transformA, wALocal); - transformVec2(v.wB, transformB, wBLocal); - subVec2(v.w, v.wB, v.wA); - v.a = 0.0; - } - // Compute the new simplex metric, if it is substantially different than - // old metric then flush the simplex. - if (this.m_count > 1) { - var metric1 = cache.metric; - var metric2 = this.getMetric(); - if (metric2 < 0.5 * metric1 || 2.0 * metric1 < metric2 || metric2 < EPSILON) { - // Reset the simplex. - this.m_count = 0; - } - } - // If the cache is empty or invalid... - if (this.m_count === 0) { - var v = this.m_v[0]; - v.indexA = 0; - v.indexB = 0; - var wALocal = proxyA.getVertex(0); - var wBLocal = proxyB.getVertex(0); - transformVec2(v.wA, transformA, wALocal); - transformVec2(v.wB, transformB, wBLocal); - subVec2(v.w, v.wB, v.wA); - v.a = 1.0; - this.m_count = 1; - } - }; - Simplex.prototype.writeCache = function (cache) { - cache.metric = this.getMetric(); - cache.count = this.m_count; - for (var i = 0; i < this.m_count; ++i) { - cache.indexA[i] = this.m_v[i].indexA; - cache.indexB[i] = this.m_v[i].indexB; - } - }; - Simplex.prototype.getSearchDirection = function () { - var v1 = this.m_v1; - var v2 = this.m_v2; - this.m_v3; - switch (this.m_count) { - case 1: - return setVec2(searchDirection_reuse, -v1.w.x, -v1.w.y); - case 2: { - subVec2(e12, v2.w, v1.w); - var sgn = -crossVec2Vec2(e12, v1.w); - if (sgn > 0.0) { - // Origin is left of e12. - return setVec2(searchDirection_reuse, -e12.y, e12.x); - } - else { - // Origin is right of e12. - return setVec2(searchDirection_reuse, e12.y, -e12.x); - } - } - default: - return zeroVec2(searchDirection_reuse); - } - }; - Simplex.prototype.getClosestPoint = function () { - var v1 = this.m_v1; - var v2 = this.m_v2; - this.m_v3; - switch (this.m_count) { - case 0: - return zeroVec2(closestPoint_reuse); - case 1: - return copyVec2(closestPoint_reuse, v1.w); - case 2: - return combine2Vec2(closestPoint_reuse, v1.a, v1.w, v2.a, v2.w); - case 3: - return zeroVec2(closestPoint_reuse); - default: - return zeroVec2(closestPoint_reuse); - } - }; - Simplex.prototype.getWitnessPoints = function (pA, pB) { - var v1 = this.m_v1; - var v2 = this.m_v2; - var v3 = this.m_v3; - switch (this.m_count) { - case 0: - break; - case 1: - copyVec2(pA, v1.wA); - copyVec2(pB, v1.wB); - break; - case 2: - combine2Vec2(pA, v1.a, v1.wA, v2.a, v2.wA); - combine2Vec2(pB, v1.a, v1.wB, v2.a, v2.wB); - break; - case 3: - combine3Vec2(pA, v1.a, v1.wA, v2.a, v2.wA, v3.a, v3.wA); - copyVec2(pB, pA); - break; - } - }; - Simplex.prototype.getMetric = function () { - switch (this.m_count) { - case 0: - return 0.0; - case 1: - return 0.0; - case 2: - return distVec2(this.m_v1.w, this.m_v2.w); - case 3: - return crossVec2Vec2(subVec2(temp1, this.m_v2.w, this.m_v1.w), subVec2(temp2, this.m_v3.w, this.m_v1.w)); - default: - return 0.0; - } - }; - Simplex.prototype.solve = function () { - switch (this.m_count) { - case 1: - break; - case 2: - this.solve2(); - break; - case 3: - this.solve3(); - break; - } - }; - // Solve a line segment using barycentric coordinates. - // - // p = a1 * w1 + a2 * w2 - // a1 + a2 = 1 - // - // The vector from the origin to the closest point on the line is - // perpendicular to the line. - // e12 = w2 - w1 - // dot(p, e) = 0 - // a1 * dot(w1, e) + a2 * dot(w2, e) = 0 - // - // 2-by-2 linear system - // [1 1 ][a1] = [1] - // [w1.e12 w2.e12][a2] = [0] - // - // Define - // d12_1 = dot(w2, e12) - // d12_2 = -dot(w1, e12) - // d12 = d12_1 + d12_2 - // - // Solution - // a1 = d12_1 / d12 - // a2 = d12_2 / d12 - Simplex.prototype.solve2 = function () { - var w1 = this.m_v1.w; - var w2 = this.m_v2.w; - subVec2(e12, w2, w1); - // w1 region - var d12_2 = -dotVec2(w1, e12); - if (d12_2 <= 0.0) { - // a2 <= 0, so we clamp it to 0 - this.m_v1.a = 1.0; - this.m_count = 1; - return; - } - // w2 region - var d12_1 = dotVec2(w2, e12); - if (d12_1 <= 0.0) { - // a1 <= 0, so we clamp it to 0 - this.m_v2.a = 1.0; - this.m_count = 1; - this.m_v1.set(this.m_v2); - return; - } - // Must be in e12 region. - var inv_d12 = 1.0 / (d12_1 + d12_2); - this.m_v1.a = d12_1 * inv_d12; - this.m_v2.a = d12_2 * inv_d12; - this.m_count = 2; - }; - // Possible regions: - // - points[2] - // - edge points[0]-points[2] - // - edge points[1]-points[2] - // - inside the triangle - Simplex.prototype.solve3 = function () { - var w1 = this.m_v1.w; - var w2 = this.m_v2.w; - var w3 = this.m_v3.w; - // Edge12 - // [1 1 ][a1] = [1] - // [w1.e12 w2.e12][a2] = [0] - // a3 = 0 - subVec2(e12, w2, w1); - var w1e12 = dotVec2(w1, e12); - var w2e12 = dotVec2(w2, e12); - var d12_1 = w2e12; - var d12_2 = -w1e12; - // Edge13 - // [1 1 ][a1] = [1] - // [w1.e13 w3.e13][a3] = [0] - // a2 = 0 - subVec2(e13, w3, w1); - var w1e13 = dotVec2(w1, e13); - var w3e13 = dotVec2(w3, e13); - var d13_1 = w3e13; - var d13_2 = -w1e13; - // Edge23 - // [1 1 ][a2] = [1] - // [w2.e23 w3.e23][a3] = [0] - // a1 = 0 - subVec2(e23, w3, w2); - var w2e23 = dotVec2(w2, e23); - var w3e23 = dotVec2(w3, e23); - var d23_1 = w3e23; - var d23_2 = -w2e23; - // Triangle123 - var n123 = crossVec2Vec2(e12, e13); - var d123_1 = n123 * crossVec2Vec2(w2, w3); - var d123_2 = n123 * crossVec2Vec2(w3, w1); - var d123_3 = n123 * crossVec2Vec2(w1, w2); - // w1 region - if (d12_2 <= 0.0 && d13_2 <= 0.0) { - this.m_v1.a = 1.0; - this.m_count = 1; - return; - } - // e12 - if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) { - var inv_d12 = 1.0 / (d12_1 + d12_2); - this.m_v1.a = d12_1 * inv_d12; - this.m_v2.a = d12_2 * inv_d12; - this.m_count = 2; - return; - } - // e13 - if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) { - var inv_d13 = 1.0 / (d13_1 + d13_2); - this.m_v1.a = d13_1 * inv_d13; - this.m_v3.a = d13_2 * inv_d13; - this.m_count = 2; - this.m_v2.set(this.m_v3); - return; - } - // w2 region - if (d12_1 <= 0.0 && d23_2 <= 0.0) { - this.m_v2.a = 1.0; - this.m_count = 1; - this.m_v1.set(this.m_v2); - return; - } - // w3 region - if (d13_1 <= 0.0 && d23_1 <= 0.0) { - this.m_v3.a = 1.0; - this.m_count = 1; - this.m_v1.set(this.m_v3); - return; - } - // e23 - if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) { - var inv_d23 = 1.0 / (d23_1 + d23_2); - this.m_v2.a = d23_1 * inv_d23; - this.m_v3.a = d23_2 * inv_d23; - this.m_count = 2; - this.m_v1.set(this.m_v3); - return; - } - // Must be in triangle123 - var inv_d123 = 1.0 / (d123_1 + d123_2 + d123_3); - this.m_v1.a = d123_1 * inv_d123; - this.m_v2.a = d123_2 * inv_d123; - this.m_v3.a = d123_3 * inv_d123; - this.m_count = 3; - }; - return Simplex; - }()); - /** @internal */ var simplex = new Simplex(); - /** @internal */ var input$1 = new DistanceInput(); - /** @internal */ var cache$1 = new SimplexCache(); - /** @internal */ var output$1 = new DistanceOutput(); - /** - * Determine if two generic shapes overlap. - */ - var testOverlap = function (shapeA, indexA, shapeB, indexB, xfA, xfB) { - input$1.recycle(); - input$1.proxyA.set(shapeA, indexA); - input$1.proxyB.set(shapeB, indexB); - copyTransform(input$1.transformA, xfA); - copyTransform(input$1.transformB, xfB); - input$1.useRadii = true; - output$1.recycle(); - cache$1.recycle(); - Distance(output$1, cache$1, input$1); - return output$1.distance < 10.0 * EPSILON; - }; - // legacy exports - Distance.testOverlap = testOverlap; - Distance.Input = DistanceInput; - Distance.Output = DistanceOutput; - Distance.Proxy = DistanceProxy; - Distance.Cache = SimplexCache; - /** - * Input parameters for ShapeCast - */ - var ShapeCastInput = /** @class */ (function () { - function ShapeCastInput() { - this.proxyA = new DistanceProxy(); - this.proxyB = new DistanceProxy(); - this.transformA = Transform.identity(); - this.transformB = Transform.identity(); - this.translationB = Vec2.zero(); - } - ShapeCastInput.prototype.recycle = function () { - this.proxyA.recycle(); - this.proxyB.recycle(); - this.transformA.setIdentity(); - this.transformB.setIdentity(); - zeroVec2(this.translationB); - }; - return ShapeCastInput; - }()); - /** - * Output results for b2ShapeCast - */ - var ShapeCastOutput = /** @class */ (function () { - function ShapeCastOutput() { - this.point = Vec2.zero(); - this.normal = Vec2.zero(); - this.lambda = 1.0; - this.iterations = 0; - } - return ShapeCastOutput; - }()); - /** - * Perform a linear shape cast of shape B moving and shape A fixed. Determines - * the hit point, normal, and translation fraction. - * - * @returns true if hit, false if there is no hit or an initial overlap - */ - // - // GJK-raycast - // Algorithm by Gino van den Bergen. - // "Smooth Mesh Contacts with GJK" in Game Physics Pearls. 2010 - var ShapeCast = function (output, input) { - output.iterations = 0; - output.lambda = 1.0; - output.normal.setZero(); - output.point.setZero(); - var proxyA = input.proxyA; - var proxyB = input.proxyB; - var radiusA = math_max$5(proxyA.m_radius, SettingsInternal.polygonRadius); - var radiusB = math_max$5(proxyB.m_radius, SettingsInternal.polygonRadius); - var radius = radiusA + radiusB; - var xfA = input.transformA; - var xfB = input.transformB; - var r = input.translationB; - var n = Vec2.zero(); - var lambda = 0.0; - // Initial simplex - var simplex = new Simplex(); - simplex.m_count = 0; - // Get simplex vertices as an array. - var vertices = simplex.m_v; - // Get support point in -r direction - var indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(r))); - var wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA)); - var indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, r)); - var wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB)); - var v = Vec2.sub(wA, wB); - // Sigma is the target distance between polygons - var sigma = math_max$5(SettingsInternal.polygonRadius, radius - SettingsInternal.polygonRadius); - var tolerance = 0.5 * SettingsInternal.linearSlop; - // Main iteration loop. - var k_maxIters = 20; - var iter = 0; - while (iter < k_maxIters && v.length() - sigma > tolerance) { - output.iterations += 1; - // Support in direction -v (A - B) - indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(v))); - wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA)); - indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, v)); - wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB)); - var p = Vec2.sub(wA, wB); - // -v is a normal at p - v.normalize(); - // Intersect ray with plane - var vp = Vec2.dot(v, p); - var vr = Vec2.dot(v, r); - if (vp - sigma > lambda * vr) { - if (vr <= 0.0) { - return false; - } - lambda = (vp - sigma) / vr; - if (lambda > 1.0) { - return false; - } - n.setMul(-1, v); - simplex.m_count = 0; - } - // Reverse simplex since it works with B - A. - // Shift by lambda * r because we want the closest point to the current clip point. - // Note that the support point p is not shifted because we want the plane equation - // to be formed in unshifted space. - var vertex = vertices[simplex.m_count]; - vertex.indexA = indexB; - vertex.wA = Vec2.combine(1, wB, lambda, r); - vertex.indexB = indexA; - vertex.wB = wA; - vertex.w = Vec2.sub(vertex.wB, vertex.wA); - vertex.a = 1.0; - simplex.m_count += 1; - switch (simplex.m_count) { - case 1: - break; - case 2: - simplex.solve2(); - break; - case 3: - simplex.solve3(); - break; - } - // If we have 3 points, then the origin is in the corresponding triangle. - if (simplex.m_count == 3) { - // Overlap - return false; - } - // Get search direction. - v.setVec2(simplex.getClosestPoint()); - // Iteration count is equated to the number of support point calls. - ++iter; - } - if (iter == 0) { - // Initial overlap - return false; - } - // Prepare output. - var pointA = Vec2.zero(); - var pointB = Vec2.zero(); - simplex.getWitnessPoints(pointB, pointA); - if (v.lengthSquared() > 0.0) { - n.setMul(-1, v); - n.normalize(); - } - output.point = Vec2.combine(1, pointA, radiusA, n); - output.normal = n; - output.lambda = lambda; - output.iterations = iter; - return true; - }; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$8 = Math.abs; - /** @internal */ var math_max$4 = Math.max; - /** - * Input parameters for TimeOfImpact. - */ - var TOIInput = /** @class */ (function () { - function TOIInput() { - this.proxyA = new DistanceProxy(); - this.proxyB = new DistanceProxy(); - this.sweepA = new Sweep(); - this.sweepB = new Sweep(); - } - TOIInput.prototype.recycle = function () { - this.proxyA.recycle(); - this.proxyB.recycle(); - this.sweepA.recycle(); - this.sweepB.recycle(); - this.tMax = -1; - }; - return TOIInput; - }()); - exports.TOIOutputState = void 0; - (function (TOIOutputState) { - TOIOutputState[TOIOutputState["e_unset"] = -1] = "e_unset"; - TOIOutputState[TOIOutputState["e_unknown"] = 0] = "e_unknown"; - TOIOutputState[TOIOutputState["e_failed"] = 1] = "e_failed"; - TOIOutputState[TOIOutputState["e_overlapped"] = 2] = "e_overlapped"; - TOIOutputState[TOIOutputState["e_touching"] = 3] = "e_touching"; - TOIOutputState[TOIOutputState["e_separated"] = 4] = "e_separated"; - })(exports.TOIOutputState || (exports.TOIOutputState = {})); - /** - * Output parameters for TimeOfImpact. - */ - var TOIOutput = /** @class */ (function () { - function TOIOutput() { - this.state = exports.TOIOutputState.e_unset; - this.t = -1; - } - TOIOutput.prototype.recycle = function () { - this.state = exports.TOIOutputState.e_unset; - this.t = -1; - }; - return TOIOutput; - }()); - stats$1.toiTime = 0; - stats$1.toiMaxTime = 0; - stats$1.toiCalls = 0; - stats$1.toiIters = 0; - stats$1.toiMaxIters = 0; - stats$1.toiRootIters = 0; - stats$1.toiMaxRootIters = 0; - /** @internal */ var distanceInput = new DistanceInput(); - /** @internal */ var distanceOutput = new DistanceOutput(); - // this is passed to Distance and SeparationFunction - /** @internal */ var cache = new SimplexCache(); - /** @internal */ var xfA$1 = transform(0, 0, 0); - /** @internal */ var xfB$1 = transform(0, 0, 0); - /** @internal */ var temp$4 = vec2(0, 0); - /** @internal */ var pointA$2 = vec2(0, 0); - /** @internal */ var pointB$2 = vec2(0, 0); - /** @internal */ var normal$3 = vec2(0, 0); - /** @internal */ var axisA = vec2(0, 0); - /** @internal */ var axisB = vec2(0, 0); - /** @internal */ var localPointA = vec2(0, 0); - /** @internal */ var localPointB = vec2(0, 0); - /** - * Compute the upper bound on time before two shapes penetrate. Time is - * represented as a fraction between [0,tMax]. This uses a swept separating axis - * and may miss some intermediate, non-tunneling collisions. If you change the - * time interval, you should call this function again. - * - * Note: use Distance to compute the contact point and normal at the time of - * impact. - * - * CCD via the local separating axis method. This seeks progression by computing - * the largest time at which separation is maintained. - */ - var TimeOfImpact = function (output, input) { - var timer = Timer.now(); - ++stats$1.toiCalls; - output.state = exports.TOIOutputState.e_unknown; - output.t = input.tMax; - var proxyA = input.proxyA; // DistanceProxy - var proxyB = input.proxyB; // DistanceProxy - var sweepA = input.sweepA; // Sweep - var sweepB = input.sweepB; // Sweep - // Large rotations can make the root finder fail, so we normalize the - // sweep angles. - sweepA.normalize(); - sweepB.normalize(); - var tMax = input.tMax; - var totalRadius = proxyA.m_radius + proxyB.m_radius; - var target = math_max$4(SettingsInternal.linearSlop, totalRadius - 3.0 * SettingsInternal.linearSlop); - var tolerance = 0.25 * SettingsInternal.linearSlop; - var t1 = 0.0; - var k_maxIterations = SettingsInternal.maxTOIIterations; - var iter = 0; - // Prepare input for distance query. - // const cache = new SimplexCache(); - cache.recycle(); - distanceInput.proxyA.setVertices(proxyA.m_vertices, proxyA.m_count, proxyA.m_radius); - distanceInput.proxyB.setVertices(proxyB.m_vertices, proxyB.m_count, proxyB.m_radius); - distanceInput.useRadii = false; - // The outer loop progressively attempts to compute new separating axes. - // This loop terminates when an axis is repeated (no progress is made). - while (true) { - sweepA.getTransform(xfA$1, t1); - sweepB.getTransform(xfB$1, t1); - // Get the distance between shapes. We can also use the results - // to get a separating axis. - copyTransform(distanceInput.transformA, xfA$1); - copyTransform(distanceInput.transformB, xfB$1); - Distance(distanceOutput, cache, distanceInput); - // If the shapes are overlapped, we give up on continuous collision. - if (distanceOutput.distance <= 0.0) { - // Failure! - output.state = exports.TOIOutputState.e_overlapped; - output.t = 0.0; - break; - } - if (distanceOutput.distance < target + tolerance) { - // Victory! - output.state = exports.TOIOutputState.e_touching; - output.t = t1; - break; - } - // Initialize the separating axis. - separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1); - // if (false) { - // // Dump the curve seen by the root finder - // const N = 100; - // const dx = 1.0 / N; - // const xs = []; // [ N + 1 ]; - // const fs = []; // [ N + 1 ]; - // const x = 0.0; - // for (const i = 0; i <= N; ++i) { - // sweepA.getTransform(xfA, x); - // sweepB.getTransform(xfB, x); - // const f = fcn.evaluate(xfA, xfB) - target; - // printf("%g %g\n", x, f); - // xs[i] = x; - // fs[i] = f; - // x += dx; - // } - // } - // Compute the TOI on the separating axis. We do this by successively - // resolving the deepest point. This loop is bounded by the number of - // vertices. - var done = false; - var t2 = tMax; - var pushBackIter = 0; - while (true) { - // Find the deepest point at t2. Store the witness point indices. - var s2 = separationFunction.findMinSeparation(t2); - // Is the final configuration separated? - if (s2 > target + tolerance) { - // Victory! - output.state = exports.TOIOutputState.e_separated; - output.t = tMax; - done = true; - break; - } - // Has the separation reached tolerance? - if (s2 > target - tolerance) { - // Advance the sweeps - t1 = t2; - break; - } - // Compute the initial separation of the witness points. - var s1 = separationFunction.evaluate(t1); - // Check for initial overlap. This might happen if the root finder - // runs out of iterations. - if (s1 < target - tolerance) { - output.state = exports.TOIOutputState.e_failed; - output.t = t1; - done = true; - break; - } - // Check for touching - if (s1 <= target + tolerance) { - // Victory! t1 should hold the TOI (could be 0.0). - output.state = exports.TOIOutputState.e_touching; - output.t = t1; - done = true; - break; - } - // Compute 1D root of: f(x) - target = 0 - var rootIterCount = 0; - var a1 = t1; - var a2 = t2; - while (true) { - // Use a mix of the secant rule and bisection. - var t = void 0; - if (rootIterCount & 1) { - // Secant rule to improve convergence. - t = a1 + (target - s1) * (a2 - a1) / (s2 - s1); - } - else { - // Bisection to guarantee progress. - t = 0.5 * (a1 + a2); - } - ++rootIterCount; - ++stats$1.toiRootIters; - var s = separationFunction.evaluate(t); - if (math_abs$8(s - target) < tolerance) { - // t2 holds a tentative value for t1 - t2 = t; - break; - } - // Ensure we continue to bracket the root. - if (s > target) { - a1 = t; - s1 = s; - } - else { - a2 = t; - s2 = s; - } - if (rootIterCount === 50) { - break; - } - } - stats$1.toiMaxRootIters = math_max$4(stats$1.toiMaxRootIters, rootIterCount); - ++pushBackIter; - if (pushBackIter === SettingsInternal.maxPolygonVertices) { - break; - } - } - ++iter; - ++stats$1.toiIters; - if (done) { - break; - } - if (iter === k_maxIterations) { - // Root finder got stuck. Semi-victory. - output.state = exports.TOIOutputState.e_failed; - output.t = t1; - break; - } - } - stats$1.toiMaxIters = math_max$4(stats$1.toiMaxIters, iter); - var time = Timer.diff(timer); - stats$1.toiMaxTime = math_max$4(stats$1.toiMaxTime, time); - stats$1.toiTime += time; - separationFunction.recycle(); - }; - var SeparationFunctionType; - (function (SeparationFunctionType) { - SeparationFunctionType[SeparationFunctionType["e_unset"] = -1] = "e_unset"; - SeparationFunctionType[SeparationFunctionType["e_points"] = 1] = "e_points"; - SeparationFunctionType[SeparationFunctionType["e_faceA"] = 2] = "e_faceA"; - SeparationFunctionType[SeparationFunctionType["e_faceB"] = 3] = "e_faceB"; - })(SeparationFunctionType || (SeparationFunctionType = {})); - var SeparationFunction = /** @class */ (function () { - function SeparationFunction() { - // input cache - // todo: maybe assign by copy instead of reference? - this.m_proxyA = null; - this.m_proxyB = null; - this.m_sweepA = null; - this.m_sweepB = null; - // initialize cache - this.m_type = SeparationFunctionType.e_unset; - this.m_localPoint = vec2(0, 0); - this.m_axis = vec2(0, 0); - // compute output - this.indexA = -1; - this.indexB = -1; - } - SeparationFunction.prototype.recycle = function () { - this.m_proxyA = null; - this.m_proxyB = null; - this.m_sweepA = null; - this.m_sweepB = null; - this.m_type = SeparationFunctionType.e_unset; - zeroVec2(this.m_localPoint); - zeroVec2(this.m_axis); - this.indexA = -1; - this.indexB = -1; - }; - // TODO_ERIN might not need to return the separation - SeparationFunction.prototype.initialize = function (cache, proxyA, sweepA, proxyB, sweepB, t1) { - var count = cache.count; - this.m_proxyA = proxyA; - this.m_proxyB = proxyB; - this.m_sweepA = sweepA; - this.m_sweepB = sweepB; - this.m_sweepA.getTransform(xfA$1, t1); - this.m_sweepB.getTransform(xfB$1, t1); - if (count === 1) { - this.m_type = SeparationFunctionType.e_points; - var localPointA_1 = this.m_proxyA.getVertex(cache.indexA[0]); - var localPointB_1 = this.m_proxyB.getVertex(cache.indexB[0]); - transformVec2(pointA$2, xfA$1, localPointA_1); - transformVec2(pointB$2, xfB$1, localPointB_1); - subVec2(this.m_axis, pointB$2, pointA$2); - var s = normalizeVec2Length(this.m_axis); - return s; - } - else if (cache.indexA[0] === cache.indexA[1]) { - // Two points on B and one on A. - this.m_type = SeparationFunctionType.e_faceB; - var localPointB1 = proxyB.getVertex(cache.indexB[0]); - var localPointB2 = proxyB.getVertex(cache.indexB[1]); - crossVec2Num(this.m_axis, subVec2(temp$4, localPointB2, localPointB1), 1.0); - normalizeVec2(this.m_axis); - rotVec2(normal$3, xfB$1.q, this.m_axis); - combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2); - transformVec2(pointB$2, xfB$1, this.m_localPoint); - var localPointA_2 = proxyA.getVertex(cache.indexA[0]); - var pointA_1 = Transform.mulVec2(xfA$1, localPointA_2); - var s = dotVec2(pointA_1, normal$3) - dotVec2(pointB$2, normal$3); - if (s < 0.0) { - negVec2(this.m_axis); - s = -s; - } - return s; - } - else { - // Two points on A and one or two points on B. - this.m_type = SeparationFunctionType.e_faceA; - var localPointA1 = this.m_proxyA.getVertex(cache.indexA[0]); - var localPointA2 = this.m_proxyA.getVertex(cache.indexA[1]); - crossVec2Num(this.m_axis, subVec2(temp$4, localPointA2, localPointA1), 1.0); - normalizeVec2(this.m_axis); - rotVec2(normal$3, xfA$1.q, this.m_axis); - combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2); - transformVec2(pointA$2, xfA$1, this.m_localPoint); - var localPointB_2 = this.m_proxyB.getVertex(cache.indexB[0]); - transformVec2(pointB$2, xfB$1, localPointB_2); - var s = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); - if (s < 0.0) { - negVec2(this.m_axis); - s = -s; - } - return s; - } - }; - SeparationFunction.prototype.compute = function (find, t) { - // It was findMinSeparation and evaluate - this.m_sweepA.getTransform(xfA$1, t); - this.m_sweepB.getTransform(xfB$1, t); - switch (this.m_type) { - case SeparationFunctionType.e_points: { - if (find) { - derotVec2(axisA, xfA$1.q, this.m_axis); - derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, this.m_axis)); - this.indexA = this.m_proxyA.getSupport(axisA); - this.indexB = this.m_proxyB.getSupport(axisB); - } - copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); - copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); - transformVec2(pointA$2, xfA$1, localPointA); - transformVec2(pointB$2, xfB$1, localPointB); - var sep = dotVec2(pointB$2, this.m_axis) - dotVec2(pointA$2, this.m_axis); - return sep; - } - case SeparationFunctionType.e_faceA: { - rotVec2(normal$3, xfA$1.q, this.m_axis); - transformVec2(pointA$2, xfA$1, this.m_localPoint); - if (find) { - derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, normal$3)); - this.indexA = -1; - this.indexB = this.m_proxyB.getSupport(axisB); - } - copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); - transformVec2(pointB$2, xfB$1, localPointB); - var sep = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); - return sep; - } - case SeparationFunctionType.e_faceB: { - rotVec2(normal$3, xfB$1.q, this.m_axis); - transformVec2(pointB$2, xfB$1, this.m_localPoint); - if (find) { - derotVec2(axisA, xfA$1.q, scaleVec2(temp$4, -1, normal$3)); - this.indexB = -1; - this.indexA = this.m_proxyA.getSupport(axisA); - } - copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); - transformVec2(pointA$2, xfA$1, localPointA); - var sep = dotVec2(pointA$2, normal$3) - dotVec2(pointB$2, normal$3); - return sep; - } - default: - if (find) { - this.indexA = -1; - this.indexB = -1; - } - return 0.0; - } - }; - SeparationFunction.prototype.findMinSeparation = function (t) { - return this.compute(true, t); - }; - SeparationFunction.prototype.evaluate = function (t) { - return this.compute(false, t); - }; - return SeparationFunction; - }()); - /** @internal */ var separationFunction = new SeparationFunction(); - // legacy exports - TimeOfImpact.Input = TOIInput; - TimeOfImpact.Output = TOIOutput; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$7 = Math.abs; - /** @internal */ var math_sqrt$5 = Math.sqrt; - /** @internal */ var math_min$6 = Math.min; - var TimeStep = /** @class */ (function () { - function TimeStep() { - /** time step */ - this.dt = 0; - /** inverse time step (0 if dt == 0) */ - this.inv_dt = 0; - this.velocityIterations = 0; - this.positionIterations = 0; - this.warmStarting = false; - this.blockSolve = true; - /** timestep ratio for variable timestep */ - this.inv_dt0 = 0.0; - /** dt * inv_dt0 */ - this.dtRatio = 1; - } - TimeStep.prototype.reset = function (dt) { - if (this.dt > 0.0) { - this.inv_dt0 = this.inv_dt; - } - this.dt = dt; - this.inv_dt = dt == 0 ? 0 : 1 / dt; - this.dtRatio = dt * this.inv_dt0; - }; - return TimeStep; - }()); - // reuse - /** @internal */ var s_subStep = new TimeStep(); - /** @internal */ var c = vec2(0, 0); - /** @internal */ var v = vec2(0, 0); - /** @internal */ var translation = vec2(0, 0); - /** @internal */ var input = new TOIInput(); - /** @internal */ var output = new TOIOutput(); - /** @internal */ var backup = new Sweep(); - /** @internal */ var backup1 = new Sweep(); - /** @internal */ var backup2 = new Sweep(); - /** - * Contact impulses for reporting. Impulses are used instead of forces because - * sub-step forces may approach infinity for rigid body collisions. These match - * up one-to-one with the contact points in Manifold. - */ - var ContactImpulse = /** @class */ (function () { - function ContactImpulse(contact) { - this.contact = contact; - this.normals = []; - this.tangents = []; - } - ContactImpulse.prototype.recycle = function () { - this.normals.length = 0; - this.tangents.length = 0; - }; - Object.defineProperty(ContactImpulse.prototype, "normalImpulses", { - get: function () { - var contact = this.contact; - var normals = this.normals; - normals.length = 0; - for (var p = 0; p < contact.v_points.length; ++p) { - normals.push(contact.v_points[p].normalImpulse); - } - return normals; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(ContactImpulse.prototype, "tangentImpulses", { - get: function () { - var contact = this.contact; - var tangents = this.tangents; - tangents.length = 0; - for (var p = 0; p < contact.v_points.length; ++p) { - tangents.push(contact.v_points[p].tangentImpulse); - } - return tangents; - }, - enumerable: false, - configurable: true - }); - return ContactImpulse; - }()); - /** - * Finds and solves islands. An island is a connected subset of the world. - */ - var Solver = /** @class */ (function () { - function Solver(world) { - this.m_world = world; - this.m_stack = []; - this.m_bodies = []; - this.m_contacts = []; - this.m_joints = []; - } - Solver.prototype.clear = function () { - this.m_stack.length = 0; - this.m_bodies.length = 0; - this.m_contacts.length = 0; - this.m_joints.length = 0; - }; - Solver.prototype.addBody = function (body) { - this.m_bodies.push(body); - // why? - // body.c_position.c.setZero(); - // body.c_position.a = 0; - // body.c_velocity.v.setZero(); - // body.c_velocity.w = 0; - }; - Solver.prototype.addContact = function (contact) { - // false && console.assert(contact instanceof Contact, 'Not a Contact!', contact); - this.m_contacts.push(contact); - }; - Solver.prototype.addJoint = function (joint) { - this.m_joints.push(joint); - }; - Solver.prototype.solveWorld = function (step) { - var world = this.m_world; - // Clear all the island flags. - for (var b = world.m_bodyList; b; b = b.m_next) { - b.m_islandFlag = false; - } - for (var c_1 = world.m_contactList; c_1; c_1 = c_1.m_next) { - c_1.m_islandFlag = false; - } - for (var j = world.m_jointList; j; j = j.m_next) { - j.m_islandFlag = false; - } - // Build and simulate all awake islands. - var stack = this.m_stack; - for (var seed = world.m_bodyList; seed; seed = seed.m_next) { - if (seed.m_islandFlag) { - continue; - } - if (seed.isAwake() == false || seed.isActive() == false) { - continue; - } - // The seed can be dynamic or kinematic. - if (seed.isStatic()) { - continue; - } - // Reset island and stack. - this.clear(); - stack.push(seed); - seed.m_islandFlag = true; - // Perform a depth first search (DFS) on the constraint graph. - while (stack.length > 0) { - // Grab the next body off the stack and add it to the island. - var b = stack.pop(); - this.addBody(b); - // Make sure the body is awake (without resetting sleep timer). - b.m_awakeFlag = true; - // To keep islands as small as possible, we don't - // propagate islands across static bodies. - if (b.isStatic()) { - continue; - } - // Search all contacts connected to this body. - for (var ce = b.m_contactList; ce; ce = ce.next) { - var contact = ce.contact; - // Has this contact already been added to an island? - if (contact.m_islandFlag) { - continue; - } - // Is this contact solid and touching? - if (contact.isEnabled() == false || contact.isTouching() == false) { - continue; - } - // Skip sensors. - var sensorA = contact.m_fixtureA.m_isSensor; - var sensorB = contact.m_fixtureB.m_isSensor; - if (sensorA || sensorB) { - continue; - } - this.addContact(contact); - contact.m_islandFlag = true; - var other = ce.other; - // Was the other body already added to this island? - if (other.m_islandFlag) { - continue; - } - // false && console.assert(stack.length < world.m_bodyCount); - stack.push(other); - other.m_islandFlag = true; - } - // Search all joints connect to this body. - for (var je = b.m_jointList; je; je = je.next) { - if (je.joint.m_islandFlag == true) { - continue; - } - var other = je.other; - // Don't simulate joints connected to inactive bodies. - if (other.isActive() == false) { - continue; - } - this.addJoint(je.joint); - je.joint.m_islandFlag = true; - if (other.m_islandFlag) { - continue; - } - // false && console.assert(stack.length < world.m_bodyCount); - stack.push(other); - other.m_islandFlag = true; - } - } - this.solveIsland(step); - // Post solve cleanup. - for (var i = 0; i < this.m_bodies.length; ++i) { - // Allow static bodies to participate in other islands. - // TODO: are they added at all? - var b = this.m_bodies[i]; - if (b.isStatic()) { - b.m_islandFlag = false; - } - } - } - }; - Solver.prototype.solveIsland = function (step) { - // B2: Island Solve - var world = this.m_world; - var gravity = world.m_gravity; - var allowSleep = world.m_allowSleep; - var h = step.dt; - // Integrate velocities and apply damping. Initialize the body state. - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(c, body.m_sweep.c); - var a = body.m_sweep.a; - copyVec2(v, body.m_linearVelocity); - var w = body.m_angularVelocity; - // Store positions for continuous collision. - copyVec2(body.m_sweep.c0, body.m_sweep.c); - body.m_sweep.a0 = body.m_sweep.a; - if (body.isDynamic()) { - // Integrate velocities. - plusScaleVec2(v, h * body.m_gravityScale, gravity); - plusScaleVec2(v, h * body.m_invMass, body.m_force); - w += h * body.m_invI * body.m_torque; - /** - *
-                     * Apply damping.
-                     * ODE: dv/dt + c * v = 0
-                     * Solution: v(t) = v0 * exp(-c * t)
-                     * Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)
-                     * v2 = exp(-c * dt) * v1
-                     * Pade approximation:
-                     * v2 = v1 * 1 / (1 + c * dt)
-                     * 
- */ - scaleVec2(v, 1.0 / (1.0 + h * body.m_linearDamping), v); - w *= 1.0 / (1.0 + h * body.m_angularDamping); - } - copyVec2(body.c_position.c, c); - body.c_position.a = a; - copyVec2(body.c_velocity.v, v); - body.c_velocity.w = w; - } - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initConstraint(step); - } - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initVelocityConstraint(step); - } - if (step.warmStarting) { - // Warm start. - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.warmStartConstraint(step); - } - } - for (var i = 0; i < this.m_joints.length; ++i) { - var joint = this.m_joints[i]; - joint.initVelocityConstraints(step); - } - // Solve velocity constraints - for (var i = 0; i < step.velocityIterations; ++i) { - for (var j = 0; j < this.m_joints.length; ++j) { - var joint = this.m_joints[j]; - joint.solveVelocityConstraints(step); - } - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - contact.solveVelocityConstraint(step); - } - } - // Store impulses for warm starting - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.storeConstraintImpulses(step); - } - // Integrate positions - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(c, body.c_position.c); - var a = body.c_position.a; - copyVec2(v, body.c_velocity.v); - var w = body.c_velocity.w; - // Check for large velocities - scaleVec2(translation, h, v); - var translationLengthSqr = lengthSqrVec2(translation); - if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { - var ratio = SettingsInternal.maxTranslation / math_sqrt$5(translationLengthSqr); - mulVec2(v, ratio); - } - var rotation = h * w; - if (rotation * rotation > SettingsInternal.maxRotationSquared) { - var ratio = SettingsInternal.maxRotation / math_abs$7(rotation); - w *= ratio; - } - // Integrate - plusScaleVec2(c, h, v); - a += h * w; - copyVec2(body.c_position.c, c); - body.c_position.a = a; - copyVec2(body.c_velocity.v, v); - body.c_velocity.w = w; - } - // Solve position constraints - var positionSolved = false; - for (var i = 0; i < step.positionIterations; ++i) { - var minSeparation = 0.0; - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - var separation = contact.solvePositionConstraint(step); - minSeparation = math_min$6(minSeparation, separation); - } - // We can't expect minSpeparation >= -Settings.linearSlop because we don't - // push the separation above -Settings.linearSlop. - var contactsOkay = minSeparation >= -3.0 * SettingsInternal.linearSlop; - var jointsOkay = true; - for (var j = 0; j < this.m_joints.length; ++j) { - var joint = this.m_joints[j]; - var jointOkay = joint.solvePositionConstraints(step); - jointsOkay = jointsOkay && jointOkay; - } - if (contactsOkay && jointsOkay) { - // Exit early if the position errors are small. - positionSolved = true; - break; - } - } - // Copy state buffers back to the bodies - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(body.m_sweep.c, body.c_position.c); - body.m_sweep.a = body.c_position.a; - copyVec2(body.m_linearVelocity, body.c_velocity.v); - body.m_angularVelocity = body.c_velocity.w; - body.synchronizeTransform(); - } - this.postSolveIsland(); - if (allowSleep) { - var minSleepTime = Infinity; - var linTolSqr = SettingsInternal.linearSleepToleranceSqr; - var angTolSqr = SettingsInternal.angularSleepToleranceSqr; - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - if (body.isStatic()) { - continue; - } - if ((body.m_autoSleepFlag == false) - || (body.m_angularVelocity * body.m_angularVelocity > angTolSqr) - || (lengthSqrVec2(body.m_linearVelocity) > linTolSqr)) { - body.m_sleepTime = 0.0; - minSleepTime = 0.0; - } - else { - body.m_sleepTime += h; - minSleepTime = math_min$6(minSleepTime, body.m_sleepTime); - } - } - if (minSleepTime >= SettingsInternal.timeToSleep && positionSolved) { - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - body.setAwake(false); - } - } - } - }; - /** - * Find TOI contacts and solve them. - */ - Solver.prototype.solveWorldTOI = function (step) { - var world = this.m_world; - if (world.m_stepComplete) { - for (var b = world.m_bodyList; b; b = b.m_next) { - b.m_islandFlag = false; - b.m_sweep.alpha0 = 0.0; - } - for (var c_2 = world.m_contactList; c_2; c_2 = c_2.m_next) { - // Invalidate TOI - c_2.m_toiFlag = false; - c_2.m_islandFlag = false; - c_2.m_toiCount = 0; - c_2.m_toi = 1.0; - } - } - // Find TOI events and solve them. - while (true) { - // Find the first TOI. - var minContact = null; - var minAlpha = 1.0; - for (var c_3 = world.m_contactList; c_3; c_3 = c_3.m_next) { - // Is this contact disabled? - if (c_3.isEnabled() == false) { - continue; - } - // Prevent excessive sub-stepping. - if (c_3.m_toiCount > SettingsInternal.maxSubSteps) { - continue; - } - var alpha = 1.0; - if (c_3.m_toiFlag) { - // This contact has a valid cached TOI. - alpha = c_3.m_toi; - } - else { - var fA_1 = c_3.getFixtureA(); - var fB_1 = c_3.getFixtureB(); - // Is there a sensor? - if (fA_1.isSensor() || fB_1.isSensor()) { - continue; - } - var bA_1 = fA_1.getBody(); - var bB_1 = fB_1.getBody(); - var activeA = bA_1.isAwake() && !bA_1.isStatic(); - var activeB = bB_1.isAwake() && !bB_1.isStatic(); - // Is at least one body active (awake and dynamic or kinematic)? - if (activeA == false && activeB == false) { - continue; - } - var collideA = bA_1.isBullet() || !bA_1.isDynamic(); - var collideB = bB_1.isBullet() || !bB_1.isDynamic(); - // Are these two non-bullet dynamic bodies? - if (collideA == false && collideB == false) { - continue; - } - // Compute the TOI for this contact. - // Put the sweeps onto the same time interval. - var alpha0 = bA_1.m_sweep.alpha0; - if (bA_1.m_sweep.alpha0 < bB_1.m_sweep.alpha0) { - alpha0 = bB_1.m_sweep.alpha0; - bA_1.m_sweep.advance(alpha0); - } - else if (bB_1.m_sweep.alpha0 < bA_1.m_sweep.alpha0) { - alpha0 = bA_1.m_sweep.alpha0; - bB_1.m_sweep.advance(alpha0); - } - var indexA = c_3.getChildIndexA(); - var indexB = c_3.getChildIndexB(); - bA_1.m_sweep; - bB_1.m_sweep; - // Compute the time of impact in interval [0, minTOI] - input.proxyA.set(fA_1.getShape(), indexA); - input.proxyB.set(fB_1.getShape(), indexB); - input.sweepA.set(bA_1.m_sweep); - input.sweepB.set(bB_1.m_sweep); - input.tMax = 1.0; - TimeOfImpact(output, input); - // Beta is the fraction of the remaining portion of the [time?]. - var beta = output.t; - if (output.state == exports.TOIOutputState.e_touching) { - alpha = math_min$6(alpha0 + (1.0 - alpha0) * beta, 1.0); - } - else { - alpha = 1.0; - } - c_3.m_toi = alpha; - c_3.m_toiFlag = true; - } - if (alpha < minAlpha) { - // This is the minimum TOI found so far. - minContact = c_3; - minAlpha = alpha; - } - } - if (minContact == null || 1.0 - 10.0 * EPSILON < minAlpha) { - // No more TOI events. Done! - world.m_stepComplete = true; - break; - } - // Advance the bodies to the TOI. - var fA = minContact.getFixtureA(); - var fB = minContact.getFixtureB(); - var bA = fA.getBody(); - var bB = fB.getBody(); - backup1.set(bA.m_sweep); - backup2.set(bB.m_sweep); - bA.advance(minAlpha); - bB.advance(minAlpha); - // The TOI contact likely has some new contact points. - minContact.update(world); - minContact.m_toiFlag = false; - ++minContact.m_toiCount; - // Is the contact solid? - if (minContact.isEnabled() == false || minContact.isTouching() == false) { - // Restore the sweeps. - minContact.setEnabled(false); - bA.m_sweep.set(backup1); - bB.m_sweep.set(backup2); - bA.synchronizeTransform(); - bB.synchronizeTransform(); - continue; - } - bA.setAwake(true); - bB.setAwake(true); - // Build the island - this.clear(); - this.addBody(bA); - this.addBody(bB); - this.addContact(minContact); - bA.m_islandFlag = true; - bB.m_islandFlag = true; - minContact.m_islandFlag = true; - // Get contacts on bodyA and bodyB. - var bodies = [bA, bB]; - for (var i = 0; i < bodies.length; ++i) { - var body = bodies[i]; - if (body.isDynamic()) { - for (var ce = body.m_contactList; ce; ce = ce.next) { - // if (this.m_bodyCount == this.m_bodyCapacity) { break; } - // if (this.m_contactCount == this.m_contactCapacity) { break; } - var contact = ce.contact; - // Has this contact already been added to the island? - if (contact.m_islandFlag) { - continue; - } - // Only add if either is static, kinematic or bullet. - var other = ce.other; - if (other.isDynamic() && !body.isBullet() && !other.isBullet()) { - continue; - } - // Skip sensors. - var sensorA = contact.m_fixtureA.m_isSensor; - var sensorB = contact.m_fixtureB.m_isSensor; - if (sensorA || sensorB) { - continue; - } - // Tentatively advance the body to the TOI. - backup.set(other.m_sweep); - if (other.m_islandFlag == false) { - other.advance(minAlpha); - } - // Update the contact points - contact.update(world); - // Was the contact disabled by the user? - // Are there contact points? - if (contact.isEnabled() == false || contact.isTouching() == false) { - other.m_sweep.set(backup); - other.synchronizeTransform(); - continue; - } - // Add the contact to the island - contact.m_islandFlag = true; - this.addContact(contact); - // Has the other body already been added to the island? - if (other.m_islandFlag) { - continue; - } - // Add the other body to the island. - other.m_islandFlag = true; - if (!other.isStatic()) { - other.setAwake(true); - } - this.addBody(other); - } - } - } - s_subStep.reset((1.0 - minAlpha) * step.dt); - s_subStep.dtRatio = 1.0; - s_subStep.positionIterations = 20; - s_subStep.velocityIterations = step.velocityIterations; - s_subStep.warmStarting = false; - this.solveIslandTOI(s_subStep, bA, bB); - // Reset island flags and synchronize broad-phase proxies. - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - body.m_islandFlag = false; - if (!body.isDynamic()) { - continue; - } - body.synchronizeFixtures(); - // Invalidate all contact TOIs on this displaced body. - for (var ce = body.m_contactList; ce; ce = ce.next) { - ce.contact.m_toiFlag = false; - ce.contact.m_islandFlag = false; - } - } - // Commit fixture proxy movements to the broad-phase so that new contacts - // are created. - // Also, some contacts can be destroyed. - world.findNewContacts(); - if (world.m_subStepping) { - world.m_stepComplete = false; - break; - } - } - }; - Solver.prototype.solveIslandTOI = function (subStep, toiA, toiB) { - // Initialize the body state. - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(body.c_position.c, body.m_sweep.c); - body.c_position.a = body.m_sweep.a; - copyVec2(body.c_velocity.v, body.m_linearVelocity); - body.c_velocity.w = body.m_angularVelocity; - } - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initConstraint(subStep); - } - // Solve position constraints. - for (var i = 0; i < subStep.positionIterations; ++i) { - var minSeparation = 0.0; - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - var separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB); - minSeparation = math_min$6(minSeparation, separation); - } - // We can't expect minSpeparation >= -Settings.linearSlop because we don't - // push the separation above -Settings.linearSlop. - var contactsOkay = minSeparation >= -1.5 * SettingsInternal.linearSlop; - if (contactsOkay) { - break; - } - } - var i; - // Leap of faith to new safe state. - copyVec2(toiA.m_sweep.c0, toiA.c_position.c); - toiA.m_sweep.a0 = toiA.c_position.a; - copyVec2(toiB.m_sweep.c0, toiB.c_position.c); - toiB.m_sweep.a0 = toiB.c_position.a; - // No warm starting is needed for TOI events because warm - // starting impulses were applied in the discrete solver. - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initVelocityConstraint(subStep); - } - // Solve velocity constraints. - for (var i = 0; i < subStep.velocityIterations; ++i) { - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - contact.solveVelocityConstraint(subStep); - } - } - // Don't store the TOI contact forces for warm starting - // because they can be quite large. - var h = subStep.dt; - // Integrate positions - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(c, body.c_position.c); - var a = body.c_position.a; - copyVec2(v, body.c_velocity.v); - var w = body.c_velocity.w; - // Check for large velocities - scaleVec2(translation, h, v); - var translationLengthSqr = lengthSqrVec2(translation); - if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { - var ratio = SettingsInternal.maxTranslation / math_sqrt$5(translationLengthSqr); - mulVec2(v, ratio); - } - var rotation = h * w; - if (rotation * rotation > SettingsInternal.maxRotationSquared) { - var ratio = SettingsInternal.maxRotation / math_abs$7(rotation); - w *= ratio; - } - // Integrate - plusScaleVec2(c, h, v); - a += h * w; - copyVec2(body.c_position.c, c); - body.c_position.a = a; - copyVec2(body.c_velocity.v, v); - body.c_velocity.w = w; - // Sync bodies - copyVec2(body.m_sweep.c, c); - body.m_sweep.a = a; - copyVec2(body.m_linearVelocity, v); - body.m_angularVelocity = w; - body.synchronizeTransform(); - } - this.postSolveIsland(); - }; - /** @internal */ - Solver.prototype.postSolveIsland = function () { - for (var c_5 = 0; c_5 < this.m_contacts.length; ++c_5) { - var contact = this.m_contacts[c_5]; - this.m_world.postSolve(contact, contact.m_impulse); - } - }; - return Solver; - }()); - // @ts-ignore - Solver.TimeStep = TimeStep; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** - * A 2-by-2 matrix. Stored in column-major order. - */ - var Mat22 = /** @class */ (function () { - function Mat22(a, b, c, d) { - if (typeof a === "object" && a !== null) { - this.ex = Vec2.clone(a); - this.ey = Vec2.clone(b); - } - else if (typeof a === "number") { - this.ex = Vec2.neo(a, c); - this.ey = Vec2.neo(b, d); - } - else { - this.ex = Vec2.zero(); - this.ey = Vec2.zero(); - } - } - /** @hidden */ - Mat22.prototype.toString = function () { - return JSON.stringify(this); - }; - Mat22.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey); - }; - Mat22.assert = function (o) { - }; - Mat22.prototype.set = function (a, b, c, d) { - if (typeof a === "number" && typeof b === "number" && typeof c === "number" - && typeof d === "number") { - this.ex.setNum(a, c); - this.ey.setNum(b, d); - } - else if (typeof a === "object" && typeof b === "object") { - this.ex.setVec2(a); - this.ey.setVec2(b); - } - else if (typeof a === "object") { - this.ex.setVec2(a.ex); - this.ey.setVec2(a.ey); - } - else ; - }; - Mat22.prototype.setIdentity = function () { - this.ex.x = 1.0; - this.ey.x = 0.0; - this.ex.y = 0.0; - this.ey.y = 1.0; - }; - Mat22.prototype.setZero = function () { - this.ex.x = 0.0; - this.ey.x = 0.0; - this.ex.y = 0.0; - this.ey.y = 0.0; - }; - Mat22.prototype.getInverse = function () { - var a = this.ex.x; - var b = this.ey.x; - var c = this.ex.y; - var d = this.ey.y; - var det = a * d - b * c; - if (det !== 0.0) { - det = 1.0 / det; - } - var imx = new Mat22(); - imx.ex.x = det * d; - imx.ey.x = -det * b; - imx.ex.y = -det * c; - imx.ey.y = det * a; - return imx; - }; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - Mat22.prototype.solve = function (v) { - var a = this.ex.x; - var b = this.ey.x; - var c = this.ex.y; - var d = this.ey.y; - var det = a * d - b * c; - if (det !== 0.0) { - det = 1.0 / det; - } - var w = Vec2.zero(); - w.x = det * (d * v.x - b * v.y); - w.y = det * (a * v.y - c * v.x); - return w; - }; - Mat22.mul = function (mx, v) { - if (v && "x" in v && "y" in v) { - var x = mx.ex.x * v.x + mx.ey.x * v.y; - var y = mx.ex.y * v.x + mx.ey.y * v.y; - return Vec2.neo(x, y); - } - else if (v && "ex" in v && "ey" in v) { // Mat22 - // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey)); - var a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y; - var b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y; - var c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y; - var d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y; - return new Mat22(a, b, c, d); - } - }; - Mat22.mulVec2 = function (mx, v) { - var x = mx.ex.x * v.x + mx.ey.x * v.y; - var y = mx.ex.y * v.x + mx.ey.y * v.y; - return Vec2.neo(x, y); - }; - Mat22.mulMat22 = function (mx, v) { - // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey)); - var a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y; - var b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y; - var c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y; - var d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y; - return new Mat22(a, b, c, d); - }; - Mat22.mulT = function (mx, v) { - if (v && "x" in v && "y" in v) { // Vec2 - return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey)); - } - else if (v && "ex" in v && "ey" in v) { // Mat22 - var c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex)); - var c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey)); - return new Mat22(c1, c2); - } - }; - Mat22.mulTVec2 = function (mx, v) { - return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey)); - }; - Mat22.mulTMat22 = function (mx, v) { - var c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex)); - var c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey)); - return new Mat22(c1, c2); - }; - Mat22.abs = function (mx) { - return new Mat22(Vec2.abs(mx.ex), Vec2.abs(mx.ey)); - }; - Mat22.add = function (mx1, mx2) { - return new Mat22(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey)); - }; - return Mat22; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_sqrt$4 = Math.sqrt; - /** @internal */ var pointA$1 = vec2(0, 0); - /** @internal */ var pointB$1 = vec2(0, 0); - /** @internal */ var temp$3 = vec2(0, 0); - /** @internal */ var cA$1 = vec2(0, 0); - /** @internal */ var cB$1 = vec2(0, 0); - /** @internal */ var dist = vec2(0, 0); - /** @internal */ var planePoint$2 = vec2(0, 0); - /** @internal */ var clipPoint$1 = vec2(0, 0); - exports.ManifoldType = void 0; - (function (ManifoldType) { - ManifoldType[ManifoldType["e_unset"] = -1] = "e_unset"; - ManifoldType[ManifoldType["e_circles"] = 0] = "e_circles"; - ManifoldType[ManifoldType["e_faceA"] = 1] = "e_faceA"; - ManifoldType[ManifoldType["e_faceB"] = 2] = "e_faceB"; - })(exports.ManifoldType || (exports.ManifoldType = {})); - exports.ContactFeatureType = void 0; - (function (ContactFeatureType) { - ContactFeatureType[ContactFeatureType["e_unset"] = -1] = "e_unset"; - ContactFeatureType[ContactFeatureType["e_vertex"] = 0] = "e_vertex"; - ContactFeatureType[ContactFeatureType["e_face"] = 1] = "e_face"; - })(exports.ContactFeatureType || (exports.ContactFeatureType = {})); - /** - * This is used for determining the state of contact points. - */ - exports.PointState = void 0; - (function (PointState) { - /** Point does not exist */ - PointState[PointState["nullState"] = 0] = "nullState"; - /** Point was added in the update */ - PointState[PointState["addState"] = 1] = "addState"; - /** Point persisted across the update */ - PointState[PointState["persistState"] = 2] = "persistState"; - /** Point was removed in the update */ - PointState[PointState["removeState"] = 3] = "removeState"; - })(exports.PointState || (exports.PointState = {})); - /** - * Used for computing contact manifolds. - */ - var ClipVertex = /** @class */ (function () { - function ClipVertex() { - this.v = vec2(0, 0); - this.id = new ContactID(); - } - ClipVertex.prototype.set = function (o) { - copyVec2(this.v, o.v); - this.id.set(o.id); - }; - ClipVertex.prototype.recycle = function () { - zeroVec2(this.v); - this.id.recycle(); - }; - return ClipVertex; - }()); - /** - * A manifold for two touching convex shapes. Manifolds are created in `evaluate` - * method of Contact subclasses. - * - * Supported manifold types are e_faceA or e_faceB for clip point versus plane - * with radius and e_circles point versus point with radius. - * - * We store contacts in this way so that position correction can account for - * movement, which is critical for continuous physics. All contact scenarios - * must be expressed in one of these types. This structure is stored across time - * steps, so we keep it small. - */ - var Manifold = /** @class */ (function () { - function Manifold() { - /** - * Usage depends on manifold type: - * - circles: not used - * - faceA: the normal on polygonA - * - faceB: the normal on polygonB - */ - this.localNormal = vec2(0, 0); - /** - * Usage depends on manifold type: - * - circles: the local center of circleA - * - faceA: the center of faceA - * - faceB: the center of faceB - */ - this.localPoint = vec2(0, 0); - /** The points of contact */ - this.points = [new ManifoldPoint(), new ManifoldPoint()]; - /** The number of manifold points */ - this.pointCount = 0; - } - Manifold.prototype.set = function (that) { - this.type = that.type; - copyVec2(this.localNormal, that.localNormal); - copyVec2(this.localPoint, that.localPoint); - this.pointCount = that.pointCount; - this.points[0].set(that.points[0]); - this.points[1].set(that.points[1]); - }; - Manifold.prototype.recycle = function () { - this.type = exports.ManifoldType.e_unset; - zeroVec2(this.localNormal); - zeroVec2(this.localPoint); - this.pointCount = 0; - this.points[0].recycle(); - this.points[1].recycle(); - }; - /** - * Evaluate the manifold with supplied transforms. This assumes modest motion - * from the original state. This does not change the point count, impulses, etc. - * The radii must come from the shapes that generated the manifold. - */ - Manifold.prototype.getWorldManifold = function (wm, xfA, radiusA, xfB, radiusB) { - if (this.pointCount == 0) { - return wm; - } - wm = wm || new WorldManifold(); - wm.pointCount = this.pointCount; - var normal = wm.normal; - var points = wm.points; - var separations = wm.separations; - switch (this.type) { - case exports.ManifoldType.e_circles: { - setVec2(normal, 1.0, 0.0); - var manifoldPoint = this.points[0]; - transformVec2(pointA$1, xfA, this.localPoint); - transformVec2(pointB$1, xfB, manifoldPoint.localPoint); - subVec2(dist, pointB$1, pointA$1); - var lengthSqr = lengthSqrVec2(dist); - if (lengthSqr > EPSILON * EPSILON) { - var length_1 = math_sqrt$4(lengthSqr); - scaleVec2(normal, 1 / length_1, dist); - } - combine2Vec2(cA$1, 1, pointA$1, radiusA, normal); - combine2Vec2(cB$1, 1, pointB$1, -radiusB, normal); - combine2Vec2(points[0], 0.5, cA$1, 0.5, cB$1); - separations[0] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal); - break; - } - case exports.ManifoldType.e_faceA: { - rotVec2(normal, xfA.q, this.localNormal); - transformVec2(planePoint$2, xfA, this.localPoint); - for (var i = 0; i < this.pointCount; ++i) { - var manifoldPoint = this.points[i]; - transformVec2(clipPoint$1, xfB, manifoldPoint.localPoint); - combine2Vec2(cA$1, 1, clipPoint$1, radiusA - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal), normal); - combine2Vec2(cB$1, 1, clipPoint$1, -radiusB, normal); - combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); - separations[i] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal); - } - break; - } - case exports.ManifoldType.e_faceB: { - rotVec2(normal, xfB.q, this.localNormal); - transformVec2(planePoint$2, xfB, this.localPoint); - for (var i = 0; i < this.pointCount; ++i) { - var manifoldPoint = this.points[i]; - transformVec2(clipPoint$1, xfA, manifoldPoint.localPoint); - combine2Vec2(cB$1, 1, clipPoint$1, radiusB - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal), normal); - combine2Vec2(cA$1, 1, clipPoint$1, -radiusA, normal); - combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); - separations[i] = dotVec2(subVec2(temp$3, cA$1, cB$1), normal); - } - // Ensure normal points from A to B. - negVec2(normal); - break; - } - } - return wm; - }; - Manifold.clipSegmentToLine = clipSegmentToLine; - Manifold.ClipVertex = ClipVertex; - Manifold.getPointStates = getPointStates; - Manifold.PointState = exports.PointState; - return Manifold; - }()); - /** - * A manifold point is a contact point belonging to a contact manifold. It holds - * details related to the geometry and dynamics of the contact points. - * - * This structure is stored across time steps, so we keep it small. - * - * Note: impulses are used for internal caching and may not provide reliable - * contact forces, especially for high speed collisions. - */ - var ManifoldPoint = /** @class */ (function () { - function ManifoldPoint() { - /** - * Usage depends on manifold type: - * - circles: the local center of circleB - * - faceA: the local center of circleB or the clip point of polygonB - * - faceB: the clip point of polygonA - */ - this.localPoint = vec2(0, 0); - /** - * The non-penetration impulse - */ - this.normalImpulse = 0; - /** - * The friction impulse - */ - this.tangentImpulse = 0; - /** - * Uniquely identifies a contact point between two shapes to facilitate warm starting - */ - this.id = new ContactID(); - } - ManifoldPoint.prototype.set = function (that) { - copyVec2(this.localPoint, that.localPoint); - this.normalImpulse = that.normalImpulse; - this.tangentImpulse = that.tangentImpulse; - this.id.set(that.id); - }; - ManifoldPoint.prototype.recycle = function () { - zeroVec2(this.localPoint); - this.normalImpulse = 0; - this.tangentImpulse = 0; - this.id.recycle(); - }; - return ManifoldPoint; - }()); - /** - * Contact ids to facilitate warm starting. - * - * ContactFeature: The features that intersect to form the contact point. - */ - var ContactID = /** @class */ (function () { - function ContactID() { - /** - * Used to quickly compare contact ids. - */ - this.key = -1; - /** ContactFeature index on shapeA */ - this.indexA = -1; - /** ContactFeature index on shapeB */ - this.indexB = -1; - /** ContactFeature type on shapeA */ - this.typeA = exports.ContactFeatureType.e_unset; - /** ContactFeature type on shapeB */ - this.typeB = exports.ContactFeatureType.e_unset; - } - ContactID.prototype.setFeatures = function (indexA, typeA, indexB, typeB) { - this.indexA = indexA; - this.indexB = indexB; - this.typeA = typeA; - this.typeB = typeB; - this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; - }; - ContactID.prototype.set = function (that) { - this.indexA = that.indexA; - this.indexB = that.indexB; - this.typeA = that.typeA; - this.typeB = that.typeB; - this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; - }; - ContactID.prototype.swapFeatures = function () { - var indexA = this.indexA; - var indexB = this.indexB; - var typeA = this.typeA; - var typeB = this.typeB; - this.indexA = indexB; - this.indexB = indexA; - this.typeA = typeB; - this.typeB = typeA; - this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; - }; - ContactID.prototype.recycle = function () { - this.indexA = 0; - this.indexB = 0; - this.typeA = exports.ContactFeatureType.e_unset; - this.typeB = exports.ContactFeatureType.e_unset; - this.key = -1; - }; - return ContactID; - }()); - /** - * This is used to compute the current state of a contact manifold. - */ - var WorldManifold = /** @class */ (function () { - function WorldManifold() { - /** World vector pointing from A to B */ - this.normal = vec2(0, 0); - /** World contact point (point of intersection) */ - this.points = [vec2(0, 0), vec2(0, 0)]; // [maxManifoldPoints] - /** A negative value indicates overlap, in meters */ - this.separations = [0, 0]; // [maxManifoldPoints] - /** The number of manifold points */ - this.pointCount = 0; - } - WorldManifold.prototype.recycle = function () { - zeroVec2(this.normal); - zeroVec2(this.points[0]); - zeroVec2(this.points[1]); - this.separations[0] = 0; - this.separations[1] = 0; - this.pointCount = 0; - }; - return WorldManifold; - }()); - /** - * Compute the point states given two manifolds. The states pertain to the - * transition from manifold1 to manifold2. So state1 is either persist or remove - * while state2 is either add or persist. - */ - function getPointStates(state1, state2, manifold1, manifold2) { - // state1, state2: PointState[Settings.maxManifoldPoints] - // for (var i = 0; i < Settings.maxManifoldPoints; ++i) { - // state1[i] = PointState.nullState; - // state2[i] = PointState.nullState; - // } - // Detect persists and removes. - for (var i = 0; i < manifold1.pointCount; ++i) { - var id = manifold1.points[i].id; - state1[i] = exports.PointState.removeState; - for (var j = 0; j < manifold2.pointCount; ++j) { - if (manifold2.points[j].id.key === id.key) { - state1[i] = exports.PointState.persistState; - break; - } - } - } - // Detect persists and adds. - for (var i = 0; i < manifold2.pointCount; ++i) { - var id = manifold2.points[i].id; - state2[i] = exports.PointState.addState; - for (var j = 0; j < manifold1.pointCount; ++j) { - if (manifold1.points[j].id.key === id.key) { - state2[i] = exports.PointState.persistState; - break; - } - } - } - } - /** - * Clipping for contact manifolds. Sutherland-Hodgman clipping. - */ - function clipSegmentToLine(vOut, vIn, normal, offset, vertexIndexA) { - // Start with no output points - var numOut = 0; - // Calculate the distance of end points to the line - var distance0 = dotVec2(normal, vIn[0].v) - offset; - var distance1 = dotVec2(normal, vIn[1].v) - offset; - // If the points are behind the plane - if (distance0 <= 0.0) - vOut[numOut++].set(vIn[0]); - if (distance1 <= 0.0) - vOut[numOut++].set(vIn[1]); - // If the points are on different sides of the plane - if (distance0 * distance1 < 0.0) { - // Find intersection point of edge and plane - var interp = distance0 / (distance0 - distance1); - combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v); - // VertexA is hitting edgeB. - vOut[numOut].id.setFeatures(vertexIndexA, exports.ContactFeatureType.e_vertex, vIn[0].id.indexB, exports.ContactFeatureType.e_face); - ++numOut; - } - return numOut; - } - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_sqrt$3 = Math.sqrt; - /** @internal */ var math_max$3 = Math.max; - /** @internal */ var math_min$5 = Math.min; - /** @internal */ var contactPool = new Pool({ - create: function () { - return new Contact(); - }, - release: function (contact) { - contact.recycle(); - } - }); - /** @internal */ var oldManifold = new Manifold(); - /** @internal */ var worldManifold = new WorldManifold(); - /** - * A contact edge is used to connect bodies and contacts together in a contact - * graph where each body is a node and each contact is an edge. A contact edge - * belongs to a doubly linked list maintained in each attached body. Each - * contact has two contact nodes, one for each attached body. - */ - var ContactEdge = /** @class */ (function () { - function ContactEdge(contact) { - this.prev = null; - this.next = null; - this.other = null; - this.contact = contact; - } - /** @internal */ - ContactEdge.prototype.recycle = function () { - this.prev = null; - this.next = null; - this.other = null; - }; - return ContactEdge; - }()); - /** - * Friction mixing law. The idea is to allow either fixture to drive the - * friction to zero. For example, anything slides on ice. - */ - function mixFriction(friction1, friction2) { - return math_sqrt$3(friction1 * friction2); - } - /** - * Restitution mixing law. The idea is allow for anything to bounce off an - * inelastic surface. For example, a superball bounces on anything. - */ - function mixRestitution(restitution1, restitution2) { - return restitution1 > restitution2 ? restitution1 : restitution2; - } - // TODO: move this to Settings? - /** @internal */ var s_registers = []; - // TODO: merge with ManifoldPoint? - var VelocityConstraintPoint = /** @class */ (function () { - function VelocityConstraintPoint() { - this.rA = vec2(0, 0); - this.rB = vec2(0, 0); - this.normalImpulse = 0; - this.tangentImpulse = 0; - this.normalMass = 0; - this.tangentMass = 0; - this.velocityBias = 0; - } - VelocityConstraintPoint.prototype.recycle = function () { - zeroVec2(this.rA); - zeroVec2(this.rB); - this.normalImpulse = 0; - this.tangentImpulse = 0; - this.normalMass = 0; - this.tangentMass = 0; - this.velocityBias = 0; - }; - return VelocityConstraintPoint; - }()); - /** @internal */ var cA = vec2(0, 0); - /** @internal */ var vA = vec2(0, 0); - /** @internal */ var cB = vec2(0, 0); - /** @internal */ var vB = vec2(0, 0); - /** @internal */ var tangent$1 = vec2(0, 0); - /** @internal */ var xfA = transform(0, 0, 0); - /** @internal */ var xfB = transform(0, 0, 0); - /** @internal */ var pointA = vec2(0, 0); - /** @internal */ var pointB = vec2(0, 0); - /** @internal */ var clipPoint = vec2(0, 0); - /** @internal */ var planePoint$1 = vec2(0, 0); - /** @internal */ var rA = vec2(0, 0); - /** @internal */ var rB = vec2(0, 0); - /** @internal */ var P$1 = vec2(0, 0); - /** @internal */ var normal$2 = vec2(0, 0); - /** @internal */ var point = vec2(0, 0); - /** @internal */ var dv = vec2(0, 0); - /** @internal */ var dv1 = vec2(0, 0); - /** @internal */ var dv2 = vec2(0, 0); - /** @internal */ var b = vec2(0, 0); - /** @internal */ var a = vec2(0, 0); - /** @internal */ var x = vec2(0, 0); - /** @internal */ var d = vec2(0, 0); - /** @internal */ var P1 = vec2(0, 0); - /** @internal */ var P2 = vec2(0, 0); - /** @internal */ var temp$2 = vec2(0, 0); - /** - * The class manages contact between two shapes. A contact exists for each - * overlapping AABB in the broad-phase (except if filtered). Therefore a contact - * object may exist that has no contact points. - */ - var Contact = /** @class */ (function () { - function Contact() { - // Nodes for connecting bodies. - /** @internal */ this.m_nodeA = new ContactEdge(this); - /** @internal */ this.m_nodeB = new ContactEdge(this); - /** @internal */ this.m_fixtureA = null; - /** @internal */ this.m_fixtureB = null; - /** @internal */ this.m_indexA = -1; - /** @internal */ this.m_indexB = -1; - /** @internal */ this.m_evaluateFcn = null; - /** @internal */ this.m_manifold = new Manifold(); - /** @internal */ this.m_prev = null; - /** @internal */ this.m_next = null; - /** @internal */ this.m_toi = 1.0; - /** @internal */ this.m_toiCount = 0; - // This contact has a valid TOI in m_toi - /** @internal */ this.m_toiFlag = false; - /** @internal */ this.m_friction = 0.0; - /** @internal */ this.m_restitution = 0.0; - /** @internal */ this.m_tangentSpeed = 0.0; - /** @internal This contact can be disabled (by user) */ - this.m_enabledFlag = true; - /** @internal Used when crawling contact graph when forming islands. */ - this.m_islandFlag = false; - /** @internal Set when the shapes are touching. */ - this.m_touchingFlag = false; - /** @internal This contact needs filtering because a fixture filter was changed. */ - this.m_filterFlag = false; - /** @internal This bullet contact had a TOI event */ - this.m_bulletHitFlag = false; - /** @internal Contact reporting impulse object cache */ - this.m_impulse = new ContactImpulse(this); - // VelocityConstraint - /** @internal */ this.v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; // [maxManifoldPoints]; - /** @internal */ this.v_normal = vec2(0, 0); - /** @internal */ this.v_normalMass = new Mat22(); - /** @internal */ this.v_K = new Mat22(); - /** @internal */ this.v_pointCount = 0; - /** @internal */ this.v_tangentSpeed = 0; - /** @internal */ this.v_friction = 0; - /** @internal */ this.v_restitution = 0; - /** @internal */ this.v_invMassA = 0; - /** @internal */ this.v_invMassB = 0; - /** @internal */ this.v_invIA = 0; - /** @internal */ this.v_invIB = 0; - // PositionConstraint - /** @internal */ this.p_localPoints = [vec2(0, 0), vec2(0, 0)]; // [maxManifoldPoints]; - /** @internal */ this.p_localNormal = vec2(0, 0); - /** @internal */ this.p_localPoint = vec2(0, 0); - /** @internal */ this.p_localCenterA = vec2(0, 0); - /** @internal */ this.p_localCenterB = vec2(0, 0); - /** @internal */ this.p_type = exports.ManifoldType.e_unset; - /** @internal */ this.p_radiusA = 0; - /** @internal */ this.p_radiusB = 0; - /** @internal */ this.p_pointCount = 0; - /** @internal */ this.p_invMassA = 0; - /** @internal */ this.p_invMassB = 0; - /** @internal */ this.p_invIA = 0; - /** @internal */ this.p_invIB = 0; - } - /** @internal */ - Contact.prototype.initialize = function (fA, indexA, fB, indexB, evaluateFcn) { - this.m_fixtureA = fA; - this.m_fixtureB = fB; - this.m_indexA = indexA; - this.m_indexB = indexB; - this.m_evaluateFcn = evaluateFcn; - this.m_friction = mixFriction(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction); - this.m_restitution = mixRestitution(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution); - }; - /** @internal */ - Contact.prototype.recycle = function () { - this.m_nodeA.recycle(); - this.m_nodeB.recycle(); - this.m_fixtureA = null; - this.m_fixtureB = null; - this.m_indexA = -1; - this.m_indexB = -1; - this.m_evaluateFcn = null; - this.m_manifold.recycle(); - this.m_prev = null; - this.m_next = null; - this.m_toi = 1; - this.m_toiCount = 0; - this.m_toiFlag = false; - this.m_friction = 0; - this.m_restitution = 0; - this.m_tangentSpeed = 0; - this.m_enabledFlag = true; - this.m_islandFlag = false; - this.m_touchingFlag = false; - this.m_filterFlag = false; - this.m_bulletHitFlag = false; - this.m_impulse.recycle(); - // VelocityConstraint - for (var _i = 0, _a = this.v_points; _i < _a.length; _i++) { - var point_1 = _a[_i]; - point_1.recycle(); - } - zeroVec2(this.v_normal); - this.v_normalMass.setZero(); - this.v_K.setZero(); - this.v_pointCount = 0; - this.v_tangentSpeed = 0; - this.v_friction = 0; - this.v_restitution = 0; - this.v_invMassA = 0; - this.v_invMassB = 0; - this.v_invIA = 0; - this.v_invIB = 0; - // PositionConstraint - for (var _b = 0, _c = this.p_localPoints; _b < _c.length; _b++) { - var point_2 = _c[_b]; - zeroVec2(point_2); - } - zeroVec2(this.p_localNormal); - zeroVec2(this.p_localPoint); - zeroVec2(this.p_localCenterA); - zeroVec2(this.p_localCenterB); - this.p_type = exports.ManifoldType.e_unset; - this.p_radiusA = 0; - this.p_radiusB = 0; - this.p_pointCount = 0; - this.p_invMassA = 0; - this.p_invMassB = 0; - this.p_invIA = 0; - this.p_invIB = 0; - }; - Contact.prototype.initConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var shapeA = fixtureA.m_shape; - var shapeB = fixtureB.m_shape; - if (shapeA === null || shapeB === null) - return; - var manifold = this.m_manifold; - var pointCount = manifold.pointCount; - this.v_invMassA = bodyA.m_invMass; - this.v_invMassB = bodyB.m_invMass; - this.v_invIA = bodyA.m_invI; - this.v_invIB = bodyB.m_invI; - this.v_friction = this.m_friction; - this.v_restitution = this.m_restitution; - this.v_tangentSpeed = this.m_tangentSpeed; - this.v_pointCount = pointCount; - this.v_K.setZero(); - this.v_normalMass.setZero(); - this.p_invMassA = bodyA.m_invMass; - this.p_invMassB = bodyB.m_invMass; - this.p_invIA = bodyA.m_invI; - this.p_invIB = bodyB.m_invI; - copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter); - copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter); - this.p_radiusA = shapeA.m_radius; - this.p_radiusB = shapeB.m_radius; - this.p_type = manifold.type; - copyVec2(this.p_localNormal, manifold.localNormal); - copyVec2(this.p_localPoint, manifold.localPoint); - this.p_pointCount = pointCount; - for (var j = 0; j < SettingsInternal.maxManifoldPoints; ++j) { - this.v_points[j].recycle(); - zeroVec2(this.p_localPoints[j]); - } - for (var j = 0; j < pointCount; ++j) { - var cp = manifold.points[j]; - var vcp = this.v_points[j]; - if (step.warmStarting) { - vcp.normalImpulse = step.dtRatio * cp.normalImpulse; - vcp.tangentImpulse = step.dtRatio * cp.tangentImpulse; - } - copyVec2(this.p_localPoints[j], cp.localPoint); - } - }; - /** - * Get the contact manifold. Do not modify the manifold unless you understand - * the internals of the library. - */ - Contact.prototype.getManifold = function () { - return this.m_manifold; - }; - /** - * Get the world manifold. - */ - Contact.prototype.getWorldManifold = function (worldManifold) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var shapeA = fixtureA.m_shape; - var shapeB = fixtureB.m_shape; - if (shapeA === null || shapeB === null) - return; - return this.m_manifold.getWorldManifold(worldManifold, bodyA.getTransform(), shapeA.m_radius, bodyB.getTransform(), shapeB.m_radius); - }; - /** - * Enable/disable this contact. This can be used inside the pre-solve contact - * listener. The contact is only disabled for the current time step (or sub-step - * in continuous collisions). - */ - Contact.prototype.setEnabled = function (flag) { - this.m_enabledFlag = !!flag; - }; - /** - * Has this contact been disabled? - */ - Contact.prototype.isEnabled = function () { - return this.m_enabledFlag; - }; - /** - * Is this contact touching? - */ - Contact.prototype.isTouching = function () { - return this.m_touchingFlag; - }; - /** - * Get the next contact in the world's contact list. - */ - Contact.prototype.getNext = function () { - return this.m_next; - }; - /** - * Get fixture A in this contact. - */ - Contact.prototype.getFixtureA = function () { - return this.m_fixtureA; - }; - /** - * Get fixture B in this contact. - */ - Contact.prototype.getFixtureB = function () { - return this.m_fixtureB; - }; - /** - * Get the child primitive index for fixture A. - */ - Contact.prototype.getChildIndexA = function () { - return this.m_indexA; - }; - /** - * Get the child primitive index for fixture B. - */ - Contact.prototype.getChildIndexB = function () { - return this.m_indexB; - }; - /** - * Flag this contact for filtering. Filtering will occur the next time step. - */ - Contact.prototype.flagForFiltering = function () { - this.m_filterFlag = true; - }; - /** - * Override the default friction mixture. You can call this in - * "pre-solve" callback. This value persists until set or reset. - */ - Contact.prototype.setFriction = function (friction) { - this.m_friction = friction; - }; - /** - * Get the friction. - */ - Contact.prototype.getFriction = function () { - return this.m_friction; - }; - /** - * Reset the friction mixture to the default value. - */ - Contact.prototype.resetFriction = function () { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction); - }; - /** - * Override the default restitution mixture. You can call this in - * "pre-solve" callback. The value persists until you set or reset. - */ - Contact.prototype.setRestitution = function (restitution) { - this.m_restitution = restitution; - }; - /** - * Get the restitution. - */ - Contact.prototype.getRestitution = function () { - return this.m_restitution; - }; - /** - * Reset the restitution to the default value. - */ - Contact.prototype.resetRestitution = function () { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution); - }; - /** - * Set the desired tangent speed for a conveyor belt behavior. In meters per - * second. - */ - Contact.prototype.setTangentSpeed = function (speed) { - this.m_tangentSpeed = speed; - }; - /** - * Get the desired tangent speed. In meters per second. - */ - Contact.prototype.getTangentSpeed = function () { - return this.m_tangentSpeed; - }; - /** - * Called by Update method, and implemented by subclasses. - */ - Contact.prototype.evaluate = function (manifold, xfA, xfB) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - this.m_evaluateFcn(manifold, xfA, fixtureA, this.m_indexA, xfB, fixtureB, this.m_indexB); - }; - /** - * Updates the contact manifold and touching status. - * - * Note: do not assume the fixture AABBs are overlapping or are valid. - * - * @param listener.beginContact - * @param listener.endContact - * @param listener.preSolve - */ - Contact.prototype.update = function (listener) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var shapeA = fixtureA.m_shape; - var shapeB = fixtureB.m_shape; - if (shapeA === null || shapeB === null) - return; - // Re-enable this contact. - this.m_enabledFlag = true; - var touching = false; - var wasTouching = this.m_touchingFlag; - var sensorA = fixtureA.m_isSensor; - var sensorB = fixtureB.m_isSensor; - var sensor = sensorA || sensorB; - var xfA = bodyA.m_xf; - var xfB = bodyB.m_xf; - // Is this contact a sensor? - if (sensor) { - touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB); - // Sensors don't generate manifolds. - this.m_manifold.pointCount = 0; - } - else { - oldManifold.recycle(); - oldManifold.set(this.m_manifold); - this.m_manifold.recycle(); - this.evaluate(this.m_manifold, xfA, xfB); - touching = this.m_manifold.pointCount > 0; - // Match old contact ids to new contact ids and copy the - // stored impulses to warm start the solver. - for (var i = 0; i < this.m_manifold.pointCount; ++i) { - var nmp = this.m_manifold.points[i]; - nmp.normalImpulse = 0.0; - nmp.tangentImpulse = 0.0; - for (var j = 0; j < oldManifold.pointCount; ++j) { - var omp = oldManifold.points[j]; - if (omp.id.key === nmp.id.key) { - nmp.normalImpulse = omp.normalImpulse; - nmp.tangentImpulse = omp.tangentImpulse; - break; - } - } - } - if (touching !== wasTouching) { - bodyA.setAwake(true); - bodyB.setAwake(true); - } - } - this.m_touchingFlag = touching; - var hasListener = typeof listener === "object" && listener !== null; - if (!wasTouching && touching && hasListener) { - listener.beginContact(this); - } - if (wasTouching && !touching && hasListener) { - listener.endContact(this); - } - if (!sensor && touching && hasListener && oldManifold) { - listener.preSolve(this, oldManifold); - } - }; - Contact.prototype.solvePositionConstraint = function (step) { - return this._solvePositionConstraint(step, null, null); - }; - Contact.prototype.solvePositionConstraintTOI = function (step, toiA, toiB) { - return this._solvePositionConstraint(step, toiA, toiB); - }; - Contact.prototype._solvePositionConstraint = function (step, toiA, toiB) { - var toi = toiA !== null && toiB !== null ? true : false; - var minSeparation = 0.0; - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return minSeparation; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return minSeparation; - bodyA.c_velocity; - bodyB.c_velocity; - var positionA = bodyA.c_position; - var positionB = bodyB.c_position; - var localCenterA = this.p_localCenterA; - var localCenterB = this.p_localCenterB; - var mA = 0.0; - var iA = 0.0; - if (!toi || (bodyA === toiA || bodyA === toiB)) { - mA = this.p_invMassA; - iA = this.p_invIA; - } - var mB = 0.0; - var iB = 0.0; - if (!toi || (bodyB === toiA || bodyB === toiB)) { - mB = this.p_invMassB; - iB = this.p_invIB; - } - copyVec2(cA, positionA.c); - var aA = positionA.a; - copyVec2(cB, positionB.c); - var aB = positionB.a; - // Solve normal constraints - for (var j = 0; j < this.p_pointCount; ++j) { - getTransform(xfA, localCenterA, cA, aA); - getTransform(xfB, localCenterB, cB, aB); - // PositionSolverManifold - var separation = void 0; - switch (this.p_type) { - case exports.ManifoldType.e_circles: { - transformVec2(pointA, xfA, this.p_localPoint); - transformVec2(pointB, xfB, this.p_localPoints[0]); - subVec2(normal$2, pointB, pointA); - normalizeVec2(normal$2); - combine2Vec2(point, 0.5, pointA, 0.5, pointB); - separation = dotVec2(pointB, normal$2) - dotVec2(pointA, normal$2) - this.p_radiusA - this.p_radiusB; - break; - } - case exports.ManifoldType.e_faceA: { - rotVec2(normal$2, xfA.q, this.p_localNormal); - transformVec2(planePoint$1, xfA, this.p_localPoint); - transformVec2(clipPoint, xfB, this.p_localPoints[j]); - separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; - copyVec2(point, clipPoint); - break; - } - case exports.ManifoldType.e_faceB: { - rotVec2(normal$2, xfB.q, this.p_localNormal); - transformVec2(planePoint$1, xfB, this.p_localPoint); - transformVec2(clipPoint, xfA, this.p_localPoints[j]); - separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; - copyVec2(point, clipPoint); - // Ensure normal points from A to B - negVec2(normal$2); - break; - } - // todo: what should we do here? - default: { - return minSeparation; - } - } - subVec2(rA, point, cA); - subVec2(rB, point, cB); - // Track max constraint error. - minSeparation = math_min$5(minSeparation, separation); - var baumgarte = toi ? SettingsInternal.toiBaugarte : SettingsInternal.baumgarte; - var linearSlop = SettingsInternal.linearSlop; - var maxLinearCorrection = SettingsInternal.maxLinearCorrection; - // Prevent large corrections and allow slop. - var C = clamp$1(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0.0); - // Compute the effective mass. - var rnA = crossVec2Vec2(rA, normal$2); - var rnB = crossVec2Vec2(rB, normal$2); - var K = mA + mB + iA * rnA * rnA + iB * rnB * rnB; - // Compute normal impulse - var impulse = K > 0.0 ? -C / K : 0.0; - scaleVec2(P$1, impulse, normal$2); - minusScaleVec2(cA, mA, P$1); - aA -= iA * crossVec2Vec2(rA, P$1); - plusScaleVec2(cB, mB, P$1); - aB += iB * crossVec2Vec2(rB, P$1); - } - copyVec2(positionA.c, cA); - positionA.a = aA; - copyVec2(positionB.c, cB); - positionB.a = aB; - return minSeparation; - }; - Contact.prototype.initVelocityConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var velocityA = bodyA.c_velocity; - var velocityB = bodyB.c_velocity; - var positionA = bodyA.c_position; - var positionB = bodyB.c_position; - var radiusA = this.p_radiusA; - var radiusB = this.p_radiusB; - var manifold = this.m_manifold; - var mA = this.v_invMassA; - var mB = this.v_invMassB; - var iA = this.v_invIA; - var iB = this.v_invIB; - var localCenterA = this.p_localCenterA; - var localCenterB = this.p_localCenterB; - copyVec2(cA, positionA.c); - var aA = positionA.a; - copyVec2(vA, velocityA.v); - var wA = velocityA.w; - copyVec2(cB, positionB.c); - var aB = positionB.a; - copyVec2(vB, velocityB.v); - var wB = velocityB.w; - getTransform(xfA, localCenterA, cA, aA); - getTransform(xfB, localCenterB, cB, aB); - worldManifold.recycle(); - manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB); - copyVec2(this.v_normal, worldManifold.normal); - for (var j = 0; j < this.v_pointCount; ++j) { - var vcp = this.v_points[j]; // VelocityConstraintPoint - var wmp = worldManifold.points[j]; - subVec2(vcp.rA, wmp, cA); - subVec2(vcp.rB, wmp, cB); - var rnA = crossVec2Vec2(vcp.rA, this.v_normal); - var rnB = crossVec2Vec2(vcp.rB, this.v_normal); - var kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB; - vcp.normalMass = kNormal > 0.0 ? 1.0 / kNormal : 0.0; - crossVec2Num(tangent$1, this.v_normal, 1.0); - var rtA = crossVec2Vec2(vcp.rA, tangent$1); - var rtB = crossVec2Vec2(vcp.rB, tangent$1); - var kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB; - vcp.tangentMass = kTangent > 0.0 ? 1.0 / kTangent : 0.0; - // Setup a velocity bias for restitution. - vcp.velocityBias = 0.0; - var vRel = 0; - vRel += dotVec2(this.v_normal, vB); - vRel += dotVec2(this.v_normal, crossNumVec2(temp$2, wB, vcp.rB)); - vRel -= dotVec2(this.v_normal, vA); - vRel -= dotVec2(this.v_normal, crossNumVec2(temp$2, wA, vcp.rA)); - if (vRel < -SettingsInternal.velocityThreshold) { - vcp.velocityBias = -this.v_restitution * vRel; - } - } - // If we have two points, then prepare the block solver. - if (this.v_pointCount == 2 && step.blockSolve) { - var vcp1 = this.v_points[0]; // VelocityConstraintPoint - var vcp2 = this.v_points[1]; // VelocityConstraintPoint - var rn1A = crossVec2Vec2(vcp1.rA, this.v_normal); - var rn1B = crossVec2Vec2(vcp1.rB, this.v_normal); - var rn2A = crossVec2Vec2(vcp2.rA, this.v_normal); - var rn2B = crossVec2Vec2(vcp2.rB, this.v_normal); - var k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B; - var k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B; - var k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B; - // Ensure a reasonable condition number. - var k_maxConditionNumber = 1000.0; - if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) { - // K is safe to invert. - this.v_K.ex.setNum(k11, k12); - this.v_K.ey.setNum(k12, k22); - // this.v_normalMass.set(this.v_K.getInverse()); - var a_1 = this.v_K.ex.x; - var b_1 = this.v_K.ey.x; - var c = this.v_K.ex.y; - var d_1 = this.v_K.ey.y; - var det = a_1 * d_1 - b_1 * c; - if (det !== 0.0) { - det = 1.0 / det; - } - this.v_normalMass.ex.x = det * d_1; - this.v_normalMass.ey.x = -det * b_1; - this.v_normalMass.ex.y = -det * c; - this.v_normalMass.ey.y = det * a_1; - } - else { - // The constraints are redundant, just use one. - // TODO_ERIN use deepest? - this.v_pointCount = 1; - } - } - copyVec2(positionA.c, cA); - positionA.a = aA; - copyVec2(velocityA.v, vA); - velocityA.w = wA; - copyVec2(positionB.c, cB); - positionB.a = aB; - copyVec2(velocityB.v, vB); - velocityB.w = wB; - }; - Contact.prototype.warmStartConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var velocityA = bodyA.c_velocity; - var velocityB = bodyB.c_velocity; - bodyA.c_position; - bodyB.c_position; - var mA = this.v_invMassA; - var iA = this.v_invIA; - var mB = this.v_invMassB; - var iB = this.v_invIB; - copyVec2(vA, velocityA.v); - var wA = velocityA.w; - copyVec2(vB, velocityB.v); - var wB = velocityB.w; - copyVec2(normal$2, this.v_normal); - crossVec2Num(tangent$1, normal$2, 1.0); - for (var j = 0; j < this.v_pointCount; ++j) { - var vcp = this.v_points[j]; // VelocityConstraintPoint - combine2Vec2(P$1, vcp.normalImpulse, normal$2, vcp.tangentImpulse, tangent$1); - wA -= iA * crossVec2Vec2(vcp.rA, P$1); - minusScaleVec2(vA, mA, P$1); - wB += iB * crossVec2Vec2(vcp.rB, P$1); - plusScaleVec2(vB, mB, P$1); - } - copyVec2(velocityA.v, vA); - velocityA.w = wA; - copyVec2(velocityB.v, vB); - velocityB.w = wB; - }; - Contact.prototype.storeConstraintImpulses = function (step) { - var manifold = this.m_manifold; - for (var j = 0; j < this.v_pointCount; ++j) { - manifold.points[j].normalImpulse = this.v_points[j].normalImpulse; - manifold.points[j].tangentImpulse = this.v_points[j].tangentImpulse; - } - }; - Contact.prototype.solveVelocityConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var velocityA = bodyA.c_velocity; - bodyA.c_position; - var velocityB = bodyB.c_velocity; - bodyB.c_position; - var mA = this.v_invMassA; - var iA = this.v_invIA; - var mB = this.v_invMassB; - var iB = this.v_invIB; - copyVec2(vA, velocityA.v); - var wA = velocityA.w; - copyVec2(vB, velocityB.v); - var wB = velocityB.w; - copyVec2(normal$2, this.v_normal); - crossVec2Num(tangent$1, normal$2, 1.0); - var friction = this.v_friction; - // Solve tangent constraints first because non-penetration is more important - // than friction. - for (var j = 0; j < this.v_pointCount; ++j) { - var vcp = this.v_points[j]; // VelocityConstraintPoint - // Relative velocity at contact - zeroVec2(dv); - plusVec2(dv, vB); - plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); - minusVec2(dv, vA); - minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); - // Compute tangent force - var vt = dotVec2(dv, tangent$1) - this.v_tangentSpeed; - var lambda = vcp.tangentMass * (-vt); - // Clamp the accumulated force - var maxFriction = friction * vcp.normalImpulse; - var newImpulse = clamp$1(vcp.tangentImpulse + lambda, -maxFriction, maxFriction); - lambda = newImpulse - vcp.tangentImpulse; - vcp.tangentImpulse = newImpulse; - // Apply contact impulse - scaleVec2(P$1, lambda, tangent$1); - minusScaleVec2(vA, mA, P$1); - wA -= iA * crossVec2Vec2(vcp.rA, P$1); - plusScaleVec2(vB, mB, P$1); - wB += iB * crossVec2Vec2(vcp.rB, P$1); - } - // Solve normal constraints - if (this.v_pointCount == 1 || step.blockSolve == false) { - for (var i = 0; i < this.v_pointCount; ++i) { - var vcp = this.v_points[i]; // VelocityConstraintPoint - // Relative velocity at contact - zeroVec2(dv); - plusVec2(dv, vB); - plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); - minusVec2(dv, vA); - minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); - // Compute normal impulse - var vn = dotVec2(dv, normal$2); - var lambda = -vcp.normalMass * (vn - vcp.velocityBias); - // Clamp the accumulated impulse - var newImpulse = math_max$3(vcp.normalImpulse + lambda, 0.0); - lambda = newImpulse - vcp.normalImpulse; - vcp.normalImpulse = newImpulse; - // Apply contact impulse - scaleVec2(P$1, lambda, normal$2); - minusScaleVec2(vA, mA, P$1); - wA -= iA * crossVec2Vec2(vcp.rA, P$1); - plusScaleVec2(vB, mB, P$1); - wB += iB * crossVec2Vec2(vcp.rB, P$1); - } - } - else { - // Block solver developed in collaboration with Dirk Gregorius (back in - // 01/07 on Box2D_Lite). - // Build the mini LCP for this contact patch - // - // vn = A * x + b, vn >= 0, x >= 0 and vn_i * x_i = 0 with i = 1..2 - // - // A = J * W * JT and J = ( -n, -r1 x n, n, r2 x n ) - // b = vn0 - velocityBias - // - // The system is solved using the "Total enumeration method" (s. Murty). - // The complementary constraint vn_i * x_i - // implies that we must have in any solution either vn_i = 0 or x_i = 0. - // So for the 2D contact problem the cases - // vn1 = 0 and vn2 = 0, x1 = 0 and x2 = 0, x1 = 0 and vn2 = 0, x2 = 0 and - // vn1 = 0 need to be tested. The first valid - // solution that satisfies the problem is chosen. - // - // In order to account of the accumulated impulse 'a' (because of the - // iterative nature of the solver which only requires - // that the accumulated impulse is clamped and not the incremental - // impulse) we change the impulse variable (x_i). - // - // Substitute: - // - // x = a + d - // - // a := old total impulse - // x := new total impulse - // d := incremental impulse - // - // For the current iteration we extend the formula for the incremental - // impulse - // to compute the new total impulse: - // - // vn = A * d + b - // = A * (x - a) + b - // = A * x + b - A * a - // = A * x + b' - // b' = b - A * a; - var vcp1 = this.v_points[0]; // VelocityConstraintPoint - var vcp2 = this.v_points[1]; // VelocityConstraintPoint - setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse); - // Relative velocity at contact - // let dv1 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp1.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp1.rA)); - zeroVec2(dv1); - plusVec2(dv1, vB); - plusVec2(dv1, crossNumVec2(temp$2, wB, vcp1.rB)); - minusVec2(dv1, vA); - minusVec2(dv1, crossNumVec2(temp$2, wA, vcp1.rA)); - // let dv2 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp2.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp2.rA)); - zeroVec2(dv2); - plusVec2(dv2, vB); - plusVec2(dv2, crossNumVec2(temp$2, wB, vcp2.rB)); - minusVec2(dv2, vA); - minusVec2(dv2, crossNumVec2(temp$2, wA, vcp2.rA)); - // Compute normal velocity - var vn1 = dotVec2(dv1, normal$2); - var vn2 = dotVec2(dv2, normal$2); - setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias); - // Compute b' - // b.sub(Mat22.mulVec2(this.v_K, a)); - b.x -= this.v_K.ex.x * a.x + this.v_K.ey.x * a.y; - b.y -= this.v_K.ex.y * a.x + this.v_K.ey.y * a.y; - // NOT_USED(k_errorTol); - while (true) { - // - // Case 1: vn = 0 - // - // 0 = A * x + b' - // - // Solve for x: - // - // x = - inv(A) * b' - // - // const x = Mat22.mulVec2(this.v_normalMass, b).neg(); - zeroVec2(x); - x.x = -(this.v_normalMass.ex.x * b.x + this.v_normalMass.ey.x * b.y); - x.y = -(this.v_normalMass.ex.y * b.x + this.v_normalMass.ey.y * b.y); - if (x.x >= 0.0 && x.y >= 0.0) { - // Get the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // - // Case 2: vn1 = 0 and x2 = 0 - // - // 0 = a11 * x1 + a12 * 0 + b1' - // vn2 = a21 * x1 + a22 * 0 + b2' - // - x.x = -vcp1.normalMass * b.x; - x.y = 0.0; - vn1 = 0.0; - vn2 = this.v_K.ex.y * x.x + b.y; - if (x.x >= 0.0 && vn2 >= 0.0) { - // Get the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // - // Case 3: vn2 = 0 and x1 = 0 - // - // vn1 = a11 * 0 + a12 * x2 + b1' - // 0 = a21 * 0 + a22 * x2 + b2' - // - x.x = 0.0; - x.y = -vcp2.normalMass * b.y; - vn1 = this.v_K.ey.x * x.y + b.x; - vn2 = 0.0; - if (x.y >= 0.0 && vn1 >= 0.0) { - // Resubstitute for the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // - // Case 4: x1 = 0 and x2 = 0 - // - // vn1 = b1 - // vn2 = b2; - // - x.x = 0.0; - x.y = 0.0; - vn1 = b.x; - vn2 = b.y; - if (vn1 >= 0.0 && vn2 >= 0.0) { - // Resubstitute for the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // No solution, give up. This is hit sometimes, but it doesn't seem to - // matter. - break; - } - } - copyVec2(velocityA.v, vA); - velocityA.w = wA; - copyVec2(velocityB.v, vB); - velocityB.w = wB; - }; - /** @internal */ - Contact.addType = function (type1, type2, callback) { - s_registers[type1] = s_registers[type1] || {}; - s_registers[type1][type2] = callback; - }; - /** @internal */ - Contact.create = function (fixtureA, indexA, fixtureB, indexB) { - var typeA = fixtureA.m_shape.m_type; - var typeB = fixtureB.m_shape.m_type; - var contact = contactPool.allocate(); - var evaluateFcn; - if (evaluateFcn = s_registers[typeA] && s_registers[typeA][typeB]) { - contact.initialize(fixtureA, indexA, fixtureB, indexB, evaluateFcn); - } - else if (evaluateFcn = s_registers[typeB] && s_registers[typeB][typeA]) { - contact.initialize(fixtureB, indexB, fixtureA, indexA, evaluateFcn); - } - else { - return null; - } - // Contact creation may swap fixtures. - fixtureA = contact.m_fixtureA; - fixtureB = contact.m_fixtureB; - indexA = contact.getChildIndexA(); - indexB = contact.getChildIndexB(); - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - // Connect to body A - contact.m_nodeA.contact = contact; - contact.m_nodeA.other = bodyB; - contact.m_nodeA.prev = null; - contact.m_nodeA.next = bodyA.m_contactList; - if (bodyA.m_contactList != null) { - bodyA.m_contactList.prev = contact.m_nodeA; - } - bodyA.m_contactList = contact.m_nodeA; - // Connect to body B - contact.m_nodeB.contact = contact; - contact.m_nodeB.other = bodyA; - contact.m_nodeB.prev = null; - contact.m_nodeB.next = bodyB.m_contactList; - if (bodyB.m_contactList != null) { - bodyB.m_contactList.prev = contact.m_nodeB; - } - bodyB.m_contactList = contact.m_nodeB; - // Wake up the bodies - if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) { - bodyA.setAwake(true); - bodyB.setAwake(true); - } - return contact; - }; - /** @internal */ - Contact.destroy = function (contact, listener) { - var fixtureA = contact.m_fixtureA; - var fixtureB = contact.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - if (contact.isTouching()) { - listener.endContact(contact); - } - // Remove from body 1 - if (contact.m_nodeA.prev) { - contact.m_nodeA.prev.next = contact.m_nodeA.next; - } - if (contact.m_nodeA.next) { - contact.m_nodeA.next.prev = contact.m_nodeA.prev; - } - if (contact.m_nodeA == bodyA.m_contactList) { - bodyA.m_contactList = contact.m_nodeA.next; - } - // Remove from body 2 - if (contact.m_nodeB.prev) { - contact.m_nodeB.prev.next = contact.m_nodeB.next; - } - if (contact.m_nodeB.next) { - contact.m_nodeB.next.prev = contact.m_nodeB.prev; - } - if (contact.m_nodeB == bodyB.m_contactList) { - bodyB.m_contactList = contact.m_nodeB.next; - } - if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) { - bodyA.setAwake(true); - bodyB.setAwake(true); - } - // const typeA = fixtureA.getType(); - // const typeB = fixtureB.getType(); - // const destroyFcn = s_registers[typeA][typeB].destroyFcn; - // if (typeof destroyFcn === 'function') { - // destroyFcn(contact); - // } - contactPool.release(contact); - }; - return Contact; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var DEFAULTS$b = { - gravity: Vec2.zero(), - allowSleep: true, - warmStarting: true, - continuousPhysics: true, - subStepping: false, - blockSolve: true, - velocityIterations: 8, - positionIterations: 3 - }; - var World = /** @class */ (function () { - /** - * @param def World definition or gravity vector. - */ - function World(def) { - if (!(this instanceof World)) { - return new World(def); - } - this.s_step = new TimeStep(); - if (!def) { - def = {}; - } - else if (Vec2.isValid(def)) { - def = { gravity: def }; - } - def = options(def, DEFAULTS$b); - this.m_solver = new Solver(this); - this.m_broadPhase = new BroadPhase(); - this.m_contactList = null; - this.m_contactCount = 0; - this.m_bodyList = null; - this.m_bodyCount = 0; - this.m_jointList = null; - this.m_jointCount = 0; - this.m_stepComplete = true; - this.m_allowSleep = def.allowSleep; - this.m_gravity = Vec2.clone(def.gravity); - this.m_clearForces = true; - this.m_newFixture = false; - this.m_locked = false; - // These are for debugging the solver. - this.m_warmStarting = def.warmStarting; - this.m_continuousPhysics = def.continuousPhysics; - this.m_subStepping = def.subStepping; - this.m_blockSolve = def.blockSolve; - this.m_velocityIterations = def.velocityIterations; - this.m_positionIterations = def.positionIterations; - this.m_t = 0; - } - /** @internal */ - World.prototype._serialize = function () { - var bodies = []; - var joints = []; - for (var b = this.getBodyList(); b; b = b.getNext()) { - bodies.push(b); - } - for (var j = this.getJointList(); j; j = j.getNext()) { - // @ts-ignore - if (typeof j._serialize === "function") { - joints.push(j); - } - } - return { - gravity: this.m_gravity, - bodies: bodies, - joints: joints, - }; - }; - /** @internal */ - World._deserialize = function (data, context, restore) { - if (!data) { - return new World(); - } - var world = new World(data.gravity); - if (data.bodies) { - for (var i = data.bodies.length - 1; i >= 0; i -= 1) { - world._addBody(restore(Body, data.bodies[i], world)); - } - } - if (data.joints) { - for (var i = data.joints.length - 1; i >= 0; i--) { - world.createJoint(restore(Joint, data.joints[i], world)); - } - } - return world; - }; - /** - * Get the world body list. With the returned body, use Body.getNext to get the - * next body in the world list. A null body indicates the end of the list. - * - * @return the head of the world body list. - */ - World.prototype.getBodyList = function () { - return this.m_bodyList; - }; - /** - * Get the world joint list. With the returned joint, use Joint.getNext to get - * the next joint in the world list. A null joint indicates the end of the list. - * - * @return the head of the world joint list. - */ - World.prototype.getJointList = function () { - return this.m_jointList; - }; - /** - * Get the world contact list. With the returned contact, use Contact.getNext to - * get the next contact in the world list. A null contact indicates the end of - * the list. - * - * Warning: contacts are created and destroyed in the middle of a time step. - * Use ContactListener to avoid missing contacts. - * - * @return the head of the world contact list. - */ - World.prototype.getContactList = function () { - return this.m_contactList; - }; - World.prototype.getBodyCount = function () { - return this.m_bodyCount; - }; - World.prototype.getJointCount = function () { - return this.m_jointCount; - }; - /** - * Get the number of contacts (each may have 0 or more contact points). - */ - World.prototype.getContactCount = function () { - return this.m_contactCount; - }; - /** - * Change the global gravity vector. - */ - World.prototype.setGravity = function (gravity) { - this.m_gravity.set(gravity); - }; - /** - * Get the global gravity vector. - */ - World.prototype.getGravity = function () { - return this.m_gravity; - }; - /** - * Is the world locked (in the middle of a time step). - */ - World.prototype.isLocked = function () { - return this.m_locked; - }; - /** - * Enable/disable sleep. - */ - World.prototype.setAllowSleeping = function (flag) { - if (flag == this.m_allowSleep) { - return; - } - this.m_allowSleep = flag; - if (this.m_allowSleep == false) { - for (var b = this.m_bodyList; b; b = b.m_next) { - b.setAwake(true); - } - } - }; - World.prototype.getAllowSleeping = function () { - return this.m_allowSleep; - }; - /** - * Enable/disable warm starting. For testing. - */ - World.prototype.setWarmStarting = function (flag) { - this.m_warmStarting = flag; - }; - World.prototype.getWarmStarting = function () { - return this.m_warmStarting; - }; - /** - * Enable/disable continuous physics. For testing. - */ - World.prototype.setContinuousPhysics = function (flag) { - this.m_continuousPhysics = flag; - }; - World.prototype.getContinuousPhysics = function () { - return this.m_continuousPhysics; - }; - /** - * Enable/disable single stepped continuous physics. For testing. - */ - World.prototype.setSubStepping = function (flag) { - this.m_subStepping = flag; - }; - World.prototype.getSubStepping = function () { - return this.m_subStepping; - }; - /** - * Set flag to control automatic clearing of forces after each time step. - */ - World.prototype.setAutoClearForces = function (flag) { - this.m_clearForces = flag; - }; - /** - * Get the flag that controls automatic clearing of forces after each time step. - */ - World.prototype.getAutoClearForces = function () { - return this.m_clearForces; - }; - /** - * Manually clear the force buffer on all bodies. By default, forces are cleared - * automatically after each call to step. The default behavior is modified by - * calling setAutoClearForces. The purpose of this function is to support - * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step - * under a variable frame-rate. When you perform sub-stepping you will disable - * auto clearing of forces and instead call clearForces after all sub-steps are - * complete in one pass of your game loop. - * - * See {@link World.setAutoClearForces} - */ - World.prototype.clearForces = function () { - for (var body = this.m_bodyList; body; body = body.getNext()) { - body.m_force.setZero(); - body.m_torque = 0.0; - } - }; - /** - * Query the world for all fixtures that potentially overlap the provided AABB. - * - * @param aabb The query box. - * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query. - */ - World.prototype.queryAABB = function (aabb, callback) { - var broadPhase = this.m_broadPhase; - this.m_broadPhase.query(aabb, function (proxyId) { - var proxy = broadPhase.getUserData(proxyId); - return callback(proxy.fixture); - }); - }; - /** - * Ray-cast the world for all fixtures in the path of the ray. Your callback - * controls whether you get the closest point, any point, or n-points. The - * ray-cast ignores shapes that contain the starting point. - * - * @param point1 The ray starting point - * @param point2 The ray ending point - * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value. - */ - World.prototype.rayCast = function (point1, point2, callback) { - var broadPhase = this.m_broadPhase; - this.m_broadPhase.rayCast({ - maxFraction: 1.0, - p1: point1, - p2: point2 - }, function (input, proxyId) { - var proxy = broadPhase.getUserData(proxyId); - var fixture = proxy.fixture; - var index = proxy.childIndex; - // @ts-ignore - var output = {}; // TODO GC - var hit = fixture.rayCast(output, input, index); - if (hit) { - var fraction = output.fraction; - var point = Vec2.add(Vec2.mulNumVec2((1.0 - fraction), input.p1), Vec2.mulNumVec2(fraction, input.p2)); - return callback(fixture, point, output.normal, fraction); - } - return input.maxFraction; - }); - }; - /** - * Get the number of broad-phase proxies. - */ - World.prototype.getProxyCount = function () { - return this.m_broadPhase.getProxyCount(); - }; - /** - * Get the height of broad-phase dynamic tree. - */ - World.prototype.getTreeHeight = function () { - return this.m_broadPhase.getTreeHeight(); - }; - /** - * Get the balance of broad-phase dynamic tree. - */ - World.prototype.getTreeBalance = function () { - return this.m_broadPhase.getTreeBalance(); - }; - /** - * Get the quality metric of broad-phase dynamic tree. The smaller the better. - * The minimum is 1. - */ - World.prototype.getTreeQuality = function () { - return this.m_broadPhase.getTreeQuality(); - }; - /** - * Shift the world origin. Useful for large worlds. The body shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - World.prototype.shiftOrigin = function (newOrigin) { - if (this.m_locked) { - return; - } - for (var b = this.m_bodyList; b; b = b.m_next) { - b.m_xf.p.sub(newOrigin); - b.m_sweep.c0.sub(newOrigin); - b.m_sweep.c.sub(newOrigin); - } - for (var j = this.m_jointList; j; j = j.m_next) { - j.shiftOrigin(newOrigin); - } - this.m_broadPhase.shiftOrigin(newOrigin); - }; - /** @internal Used for deserialize. */ - World.prototype._addBody = function (body) { - if (this.isLocked()) { - return; - } - // Add to world doubly linked list. - body.m_prev = null; - body.m_next = this.m_bodyList; - if (this.m_bodyList) { - this.m_bodyList.m_prev = body; - } - this.m_bodyList = body; - ++this.m_bodyCount; - }; - // tslint:disable-next-line:typedef - World.prototype.createBody = function (arg1, arg2) { - if (this.isLocked()) { - return null; - } - var def = {}; - if (!arg1) ; - else if (Vec2.isValid(arg1)) { - def = { position: arg1, angle: arg2 }; - } - else if (typeof arg1 === "object") { - def = arg1; - } - var body = new Body(this, def); - this._addBody(body); - return body; - }; - // tslint:disable-next-line:typedef - World.prototype.createDynamicBody = function (arg1, arg2) { - var def = {}; - if (!arg1) ; - else if (Vec2.isValid(arg1)) { - def = { position: arg1, angle: arg2 }; - } - else if (typeof arg1 === "object") { - def = arg1; - } - def.type = "dynamic"; - return this.createBody(def); - }; - // tslint:disable-next-line:typedef - World.prototype.createKinematicBody = function (arg1, arg2) { - var def = {}; - if (!arg1) ; - else if (Vec2.isValid(arg1)) { - def = { position: arg1, angle: arg2 }; - } - else if (typeof arg1 === "object") { - def = arg1; - } - def.type = "kinematic"; - return this.createBody(def); - }; - /** - * Destroy a rigid body given a definition. No reference to the definition is - * retained. - * - * Warning: This automatically deletes all associated shapes and joints. - * - * Warning: This function is locked during callbacks. - */ - World.prototype.destroyBody = function (b) { - if (this.isLocked()) { - return; - } - if (b.m_destroyed) { - return false; - } - // Delete the attached joints. - var je = b.m_jointList; - while (je) { - var je0 = je; - je = je.next; - this.publish("remove-joint", je0.joint); - this.destroyJoint(je0.joint); - b.m_jointList = je; - } - b.m_jointList = null; - // Delete the attached contacts. - var ce = b.m_contactList; - while (ce) { - var ce0 = ce; - ce = ce.next; - this.destroyContact(ce0.contact); - b.m_contactList = ce; - } - b.m_contactList = null; - // Delete the attached fixtures. This destroys broad-phase proxies. - var f = b.m_fixtureList; - while (f) { - var f0 = f; - f = f.m_next; - this.publish("remove-fixture", f0); - f0.destroyProxies(this.m_broadPhase); - b.m_fixtureList = f; - } - b.m_fixtureList = null; - // Remove world body list. - if (b.m_prev) { - b.m_prev.m_next = b.m_next; - } - if (b.m_next) { - b.m_next.m_prev = b.m_prev; - } - if (b == this.m_bodyList) { - this.m_bodyList = b.m_next; - } - b.m_destroyed = true; - --this.m_bodyCount; - this.publish("remove-body", b); - return true; - }; - /** - * Create a joint to constrain bodies together. No reference to the definition - * is retained. This may cause the connected bodies to cease colliding. - * - * Warning: This function is locked during callbacks. - */ - World.prototype.createJoint = function (joint) { - if (this.isLocked()) { - return null; - } - // Connect to the world list. - joint.m_prev = null; - joint.m_next = this.m_jointList; - if (this.m_jointList) { - this.m_jointList.m_prev = joint; - } - this.m_jointList = joint; - ++this.m_jointCount; - // Connect to the bodies' doubly linked lists. - joint.m_edgeA.joint = joint; - joint.m_edgeA.other = joint.m_bodyB; - joint.m_edgeA.prev = null; - joint.m_edgeA.next = joint.m_bodyA.m_jointList; - if (joint.m_bodyA.m_jointList) - joint.m_bodyA.m_jointList.prev = joint.m_edgeA; - joint.m_bodyA.m_jointList = joint.m_edgeA; - joint.m_edgeB.joint = joint; - joint.m_edgeB.other = joint.m_bodyA; - joint.m_edgeB.prev = null; - joint.m_edgeB.next = joint.m_bodyB.m_jointList; - if (joint.m_bodyB.m_jointList) - joint.m_bodyB.m_jointList.prev = joint.m_edgeB; - joint.m_bodyB.m_jointList = joint.m_edgeB; - // If the joint prevents collisions, then flag any contacts for filtering. - if (joint.m_collideConnected == false) { - for (var edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) { - if (edge.other == joint.m_bodyA) { - // Flag the contact for filtering at the next time step (where either - // body is awake). - edge.contact.flagForFiltering(); - } - } - } - // Note: creating a joint doesn't wake the bodies. - return joint; - }; - /** - * Destroy a joint. This may cause the connected bodies to begin colliding. - * Warning: This function is locked during callbacks. - */ - World.prototype.destroyJoint = function (joint) { - if (this.isLocked()) { - return; - } - // Remove from the doubly linked list. - if (joint.m_prev) { - joint.m_prev.m_next = joint.m_next; - } - if (joint.m_next) { - joint.m_next.m_prev = joint.m_prev; - } - if (joint == this.m_jointList) { - this.m_jointList = joint.m_next; - } - // Disconnect from bodies. - var bodyA = joint.m_bodyA; - var bodyB = joint.m_bodyB; - // Wake up connected bodies. - bodyA.setAwake(true); - bodyB.setAwake(true); - // Remove from body 1. - if (joint.m_edgeA.prev) { - joint.m_edgeA.prev.next = joint.m_edgeA.next; - } - if (joint.m_edgeA.next) { - joint.m_edgeA.next.prev = joint.m_edgeA.prev; - } - if (joint.m_edgeA == bodyA.m_jointList) { - bodyA.m_jointList = joint.m_edgeA.next; - } - joint.m_edgeA.prev = null; - joint.m_edgeA.next = null; - // Remove from body 2 - if (joint.m_edgeB.prev) { - joint.m_edgeB.prev.next = joint.m_edgeB.next; - } - if (joint.m_edgeB.next) { - joint.m_edgeB.next.prev = joint.m_edgeB.prev; - } - if (joint.m_edgeB == bodyB.m_jointList) { - bodyB.m_jointList = joint.m_edgeB.next; - } - joint.m_edgeB.prev = null; - joint.m_edgeB.next = null; - --this.m_jointCount; - // If the joint prevents collisions, then flag any contacts for filtering. - if (joint.m_collideConnected == false) { - var edge = bodyB.getContactList(); - while (edge) { - if (edge.other == bodyA) { - // Flag the contact for filtering at the next time step (where either - // body is awake). - edge.contact.flagForFiltering(); - } - edge = edge.next; - } - } - this.publish("remove-joint", joint); - }; - /** - * Take a time step. This performs collision detection, integration, and - * constraint solution. - * - * Broad-phase, narrow-phase, solve and solve time of impacts. - * - * @param timeStep Time step, this should not vary. - */ - World.prototype.step = function (timeStep, velocityIterations, positionIterations) { - this.publish("pre-step", timeStep); - if ((velocityIterations | 0) !== velocityIterations) { - // TODO: remove this in future - velocityIterations = 0; - } - velocityIterations = velocityIterations || this.m_velocityIterations; - positionIterations = positionIterations || this.m_positionIterations; - // If new fixtures were added, we need to find the new contacts. - if (this.m_newFixture) { - this.findNewContacts(); - this.m_newFixture = false; - } - this.m_locked = true; - this.s_step.reset(timeStep); - this.s_step.velocityIterations = velocityIterations; - this.s_step.positionIterations = positionIterations; - this.s_step.warmStarting = this.m_warmStarting; - this.s_step.blockSolve = this.m_blockSolve; - // Update contacts. This is where some contacts are destroyed. - this.updateContacts(); - // Integrate velocities, solve velocity constraints, and integrate positions. - if (this.m_stepComplete && timeStep > 0.0) { - this.m_solver.solveWorld(this.s_step); - // Synchronize fixtures, check for out of range bodies. - for (var b = this.m_bodyList; b; b = b.getNext()) { - // If a body was not in an island then it did not move. - if (b.m_islandFlag == false) { - continue; - } - if (b.isStatic()) { - continue; - } - // Update fixtures (for broad-phase). - b.synchronizeFixtures(); - } - // Look for new contacts. - this.findNewContacts(); - } - // Handle TOI events. - if (this.m_continuousPhysics && timeStep > 0.0) { - this.m_solver.solveWorldTOI(this.s_step); - } - if (this.m_clearForces) { - this.clearForces(); - } - this.m_locked = false; - this.publish("post-step", timeStep); - }; - /** - * @internal - * Call this method to find new contacts. - */ - World.prototype.findNewContacts = function () { - var _this = this; - this.m_broadPhase.updatePairs(function (proxyA, proxyB) { return _this.createContact(proxyA, proxyB); }); - }; - /** - * @internal - * Callback for broad-phase. - */ - World.prototype.createContact = function (proxyA, proxyB) { - var fixtureA = proxyA.fixture; - var fixtureB = proxyB.fixture; - var indexA = proxyA.childIndex; - var indexB = proxyB.childIndex; - var bodyA = fixtureA.getBody(); - var bodyB = fixtureB.getBody(); - // Are the fixtures on the same body? - if (bodyA == bodyB) { - return; - } - // TODO_ERIN use a hash table to remove a potential bottleneck when both - // bodies have a lot of contacts. - // Does a contact already exist? - var edge = bodyB.getContactList(); // ContactEdge - while (edge) { - if (edge.other == bodyA) { - var fA = edge.contact.getFixtureA(); - var fB = edge.contact.getFixtureB(); - var iA = edge.contact.getChildIndexA(); - var iB = edge.contact.getChildIndexB(); - if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) { - // A contact already exists. - return; - } - if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) { - // A contact already exists. - return; - } - } - edge = edge.next; - } - if (bodyB.shouldCollide(bodyA) == false) { - return; - } - if (fixtureB.shouldCollide(fixtureA) == false) { - return; - } - // Call the factory. - var contact = Contact.create(fixtureA, indexA, fixtureB, indexB); - if (contact == null) { - return; - } - // Insert into the world. - contact.m_prev = null; - if (this.m_contactList != null) { - contact.m_next = this.m_contactList; - this.m_contactList.m_prev = contact; - } - this.m_contactList = contact; - ++this.m_contactCount; - }; - /** - * @internal - * Removes old non-overlapping contacts, applies filters and updates contacts. - */ - World.prototype.updateContacts = function () { - // Update awake contacts. - var c; - var next_c = this.m_contactList; - while (c = next_c) { - next_c = c.getNext(); - var fixtureA = c.getFixtureA(); - var fixtureB = c.getFixtureB(); - var indexA = c.getChildIndexA(); - var indexB = c.getChildIndexB(); - var bodyA = fixtureA.getBody(); - var bodyB = fixtureB.getBody(); - // Is this contact flagged for filtering? - if (c.m_filterFlag) { - if (bodyB.shouldCollide(bodyA) == false) { - this.destroyContact(c); - continue; - } - if (fixtureB.shouldCollide(fixtureA) == false) { - this.destroyContact(c); - continue; - } - // Clear the filtering flag. - c.m_filterFlag = false; - } - var activeA = bodyA.isAwake() && !bodyA.isStatic(); - var activeB = bodyB.isAwake() && !bodyB.isStatic(); - // At least one body must be awake and it must be dynamic or kinematic. - if (activeA == false && activeB == false) { - continue; - } - var proxyIdA = fixtureA.m_proxies[indexA].proxyId; - var proxyIdB = fixtureB.m_proxies[indexB].proxyId; - var overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB); - // Here we destroy contacts that cease to overlap in the broad-phase. - if (overlap == false) { - this.destroyContact(c); - continue; - } - // The contact persists. - c.update(this); - } - }; - /** @internal */ - World.prototype.destroyContact = function (contact) { - // Remove from the world. - if (contact.m_prev) { - contact.m_prev.m_next = contact.m_next; - } - if (contact.m_next) { - contact.m_next.m_prev = contact.m_prev; - } - if (contact == this.m_contactList) { - this.m_contactList = contact.m_next; - } - Contact.destroy(contact, this); - --this.m_contactCount; - }; - /** - * Register an event listener. - */ - // tslint:disable-next-line:typedef - World.prototype.on = function (name, listener) { - if (typeof name !== "string" || typeof listener !== "function") { - return this; - } - if (!this._listeners) { - this._listeners = {}; - } - if (!this._listeners[name]) { - this._listeners[name] = []; - } - this._listeners[name].push(listener); - return this; - }; - /** - * Remove an event listener. - */ - // tslint:disable-next-line:typedef - World.prototype.off = function (name, listener) { - if (typeof name !== "string" || typeof listener !== "function") { - return this; - } - var listeners = this._listeners && this._listeners[name]; - if (!listeners || !listeners.length) { - return this; - } - var index = listeners.indexOf(listener); - if (index >= 0) { - listeners.splice(index, 1); - } - return this; - }; - World.prototype.publish = function (name, arg1, arg2, arg3) { - var listeners = this._listeners && this._listeners[name]; - if (!listeners || !listeners.length) { - return 0; - } - for (var l = 0; l < listeners.length; l++) { - listeners[l].call(this, arg1, arg2, arg3); - } - return listeners.length; - }; - /** @internal */ - World.prototype.beginContact = function (contact) { - this.publish("begin-contact", contact); - }; - /** @internal */ - World.prototype.endContact = function (contact) { - this.publish("end-contact", contact); - }; - /** @internal */ - World.prototype.preSolve = function (contact, oldManifold) { - this.publish("pre-solve", contact, oldManifold); - }; - /** @internal */ - World.prototype.postSolve = function (contact, impulse) { - this.publish("post-solve", contact, impulse); - }; - return World; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - var Vec3 = /** @class */ (function () { - function Vec3(x, y, z) { - if (!(this instanceof Vec3)) { - return new Vec3(x, y, z); - } - if (typeof x === "undefined") { - this.x = 0; - this.y = 0; - this.z = 0; - } - else if (typeof x === "object") { - this.x = x.x; - this.y = x.y; - this.z = x.z; - } - else { - this.x = x; - this.y = y; - this.z = z; - } - } - /** @internal */ - Vec3.prototype._serialize = function () { - return { - x: this.x, - y: this.y, - z: this.z - }; - }; - /** @internal */ - Vec3._deserialize = function (data) { - var obj = Object.create(Vec3.prototype); - obj.x = data.x; - obj.y = data.y; - obj.z = data.z; - return obj; - }; - /** @hidden */ - Vec3.neo = function (x, y, z) { - var obj = Object.create(Vec3.prototype); - obj.x = x; - obj.y = y; - obj.z = z; - return obj; - }; - Vec3.zero = function () { - var obj = Object.create(Vec3.prototype); - obj.x = 0; - obj.y = 0; - obj.z = 0; - return obj; - }; - Vec3.clone = function (v) { - return Vec3.neo(v.x, v.y, v.z); - }; - /** @hidden */ - Vec3.prototype.toString = function () { - return JSON.stringify(this); - }; - /** Does this vector contain finite coordinates? */ - Vec3.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Number.isFinite(obj.x) && Number.isFinite(obj.y) && Number.isFinite(obj.z); - }; - Vec3.assert = function (o) { - }; - Vec3.prototype.setZero = function () { - this.x = 0.0; - this.y = 0.0; - this.z = 0.0; - return this; - }; - Vec3.prototype.set = function (x, y, z) { - this.x = x; - this.y = y; - this.z = z; - return this; - }; - Vec3.prototype.add = function (w) { - this.x += w.x; - this.y += w.y; - this.z += w.z; - return this; - }; - Vec3.prototype.sub = function (w) { - this.x -= w.x; - this.y -= w.y; - this.z -= w.z; - return this; - }; - Vec3.prototype.mul = function (m) { - this.x *= m; - this.y *= m; - this.z *= m; - return this; - }; - Vec3.areEqual = function (v, w) { - return v === w || - typeof v === "object" && v !== null && - typeof w === "object" && w !== null && - v.x === w.x && v.y === w.y && v.z === w.z; - }; - /** Dot product on two vectors */ - Vec3.dot = function (v, w) { - return v.x * w.x + v.y * w.y + v.z * w.z; - }; - /** Cross product on two vectors */ - Vec3.cross = function (v, w) { - return new Vec3(v.y * w.z - v.z * w.y, v.z * w.x - v.x * w.z, v.x * w.y - v.y * w.x); - }; - Vec3.add = function (v, w) { - return new Vec3(v.x + w.x, v.y + w.y, v.z + w.z); - }; - Vec3.sub = function (v, w) { - return new Vec3(v.x - w.x, v.y - w.y, v.z - w.z); - }; - Vec3.mul = function (v, m) { - return new Vec3(m * v.x, m * v.y, m * v.z); - }; - Vec3.prototype.neg = function () { - this.x = -this.x; - this.y = -this.y; - this.z = -this.z; - return this; - }; - Vec3.neg = function (v) { - return new Vec3(-v.x, -v.y, -v.z); - }; - return Vec3; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var v1$2 = vec2(0, 0); - /** @internal */ var v2$1 = vec2(0, 0); - /** - * A line segment (edge) shape. These can be connected in chains or loops to - * other edge shapes. The connectivity information is used to ensure correct - * contact normals. - */ - var EdgeShape = /** @class */ (function (_super) { - __extends$a(EdgeShape, _super); - function EdgeShape(v1, v2) { - var _this = this; - // @ts-ignore - if (!(_this instanceof EdgeShape)) { - return new EdgeShape(v1, v2); - } - _this = _super.call(this) || this; - _this.m_type = EdgeShape.TYPE; - _this.m_radius = SettingsInternal.polygonRadius; - _this.m_vertex1 = v1 ? Vec2.clone(v1) : Vec2.zero(); - _this.m_vertex2 = v2 ? Vec2.clone(v2) : Vec2.zero(); - _this.m_vertex0 = Vec2.zero(); - _this.m_vertex3 = Vec2.zero(); - _this.m_hasVertex0 = false; - _this.m_hasVertex3 = false; - return _this; - } - /** @internal */ - EdgeShape.prototype._serialize = function () { - return { - type: this.m_type, - vertex1: this.m_vertex1, - vertex2: this.m_vertex2, - vertex0: this.m_vertex0, - vertex3: this.m_vertex3, - hasVertex0: this.m_hasVertex0, - hasVertex3: this.m_hasVertex3, - }; - }; - /** @internal */ - EdgeShape._deserialize = function (data) { - var shape = new EdgeShape(data.vertex1, data.vertex2); - if (shape.m_hasVertex0) { - shape.setPrevVertex(data.vertex0); - } - if (shape.m_hasVertex3) { - shape.setNextVertex(data.vertex3); - } - return shape; - }; - /** @hidden */ - EdgeShape.prototype._reset = function () { - // noop - }; - EdgeShape.prototype.getRadius = function () { - return this.m_radius; - }; - EdgeShape.prototype.getType = function () { - return this.m_type; - }; - /** @internal @deprecated */ - EdgeShape.prototype.setNext = function (v) { - return this.setNextVertex(v); - }; - /** - * Optional next vertex, used for smooth collision. - */ - EdgeShape.prototype.setNextVertex = function (v) { - if (v) { - this.m_vertex3.setVec2(v); - this.m_hasVertex3 = true; - } - else { - this.m_vertex3.setZero(); - this.m_hasVertex3 = false; - } - return this; - }; - /** - * Optional next vertex, used for smooth collision. - */ - EdgeShape.prototype.getNextVertex = function () { - return this.m_vertex3; - }; - /** @internal @deprecated */ - EdgeShape.prototype.setPrev = function (v) { - return this.setPrevVertex(v); - }; - /** - * Optional prev vertex, used for smooth collision. - */ - EdgeShape.prototype.setPrevVertex = function (v) { - if (v) { - this.m_vertex0.setVec2(v); - this.m_hasVertex0 = true; - } - else { - this.m_vertex0.setZero(); - this.m_hasVertex0 = false; - } - return this; - }; - /** - * Optional prev vertex, used for smooth collision. - */ - EdgeShape.prototype.getPrevVertex = function () { - return this.m_vertex0; - }; - /** - * Set this as an isolated edge. - */ - EdgeShape.prototype._set = function (v1, v2) { - this.m_vertex1.setVec2(v1); - this.m_vertex2.setVec2(v2); - this.m_hasVertex0 = false; - this.m_hasVertex3 = false; - return this; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - EdgeShape.prototype._clone = function () { - var clone = new EdgeShape(); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_vertex1.setVec2(this.m_vertex1); - clone.m_vertex2.setVec2(this.m_vertex2); - clone.m_vertex0.setVec2(this.m_vertex0); - clone.m_vertex3.setVec2(this.m_vertex3); - clone.m_hasVertex0 = this.m_hasVertex0; - clone.m_hasVertex3 = this.m_hasVertex3; - return clone; - }; - /** - * Get the number of child primitives. - */ - EdgeShape.prototype.getChildCount = function () { - return 1; - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - EdgeShape.prototype.testPoint = function (xf, p) { - return false; - }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - EdgeShape.prototype.rayCast = function (output, input, xf, childIndex) { - // p = p1 + t * d - // v = v1 + s * e - // p1 + t * d = v1 + s * e - // s * e - t * d = p1 - v1 - // NOT_USED(childIndex); - // Put the ray into the edge's frame of reference. - var p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p)); - var p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p)); - var d = Vec2.sub(p2, p1); - var v1 = this.m_vertex1; - var v2 = this.m_vertex2; - var e = Vec2.sub(v2, v1); - var normal = Vec2.neo(e.y, -e.x); - normal.normalize(); - // q = p1 + t * d - // dot(normal, q - v1) = 0 - // dot(normal, p1 - v1) + t * dot(normal, d) = 0 - var numerator = Vec2.dot(normal, Vec2.sub(v1, p1)); - var denominator = Vec2.dot(normal, d); - if (denominator == 0.0) { - return false; - } - var t = numerator / denominator; - if (t < 0.0 || input.maxFraction < t) { - return false; - } - var q = Vec2.add(p1, Vec2.mulNumVec2(t, d)); - // q = v1 + s * r - // s = dot(q - v1, r) / dot(r, r) - var r = Vec2.sub(v2, v1); - var rr = Vec2.dot(r, r); - if (rr == 0.0) { - return false; - } - var s = Vec2.dot(Vec2.sub(q, v1), r) / rr; - if (s < 0.0 || 1.0 < s) { - return false; - } - output.fraction = t; - if (numerator > 0.0) { - output.normal = Rot.mulVec2(xf.q, normal).neg(); - } - else { - output.normal = Rot.mulVec2(xf.q, normal); - } - return true; - }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - EdgeShape.prototype.computeAABB = function (aabb, xf, childIndex) { - transformVec2(v1$2, xf, this.m_vertex1); - transformVec2(v2$1, xf, this.m_vertex2); - AABB.combinePoints(aabb, v1$2, v2$1); - AABB.extend(aabb, this.m_radius); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - EdgeShape.prototype.computeMass = function (massData, density) { - massData.mass = 0.0; - combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2); - massData.I = 0.0; - }; - EdgeShape.prototype.computeDistanceProxy = function (proxy) { - proxy.m_vertices[0] = this.m_vertex1; - proxy.m_vertices[1] = this.m_vertex2; - proxy.m_vertices.length = 2; - proxy.m_count = 2; - proxy.m_radius = this.m_radius; - }; - EdgeShape.TYPE = "edge"; - return EdgeShape; - }(Shape)); - var Edge = EdgeShape; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var v1$1 = vec2(0, 0); - /** @internal */ var v2 = vec2(0, 0); - /** - * A chain shape is a free form sequence of line segments. The chain has - * two-sided collision, so you can use inside and outside collision. Therefore, - * you may use any winding order. Connectivity information is used to create - * smooth collisions. - * - * WARNING: The chain will not collide properly if there are self-intersections. - */ - var ChainShape = /** @class */ (function (_super) { - __extends$a(ChainShape, _super); - function ChainShape(vertices, loop) { - var _this = this; - // @ts-ignore - if (!(_this instanceof ChainShape)) { - return new ChainShape(vertices, loop); - } - _this = _super.call(this) || this; - _this.m_type = ChainShape.TYPE; - _this.m_radius = SettingsInternal.polygonRadius; - _this.m_vertices = []; - _this.m_count = 0; - _this.m_prevVertex = null; - _this.m_nextVertex = null; - _this.m_hasPrevVertex = false; - _this.m_hasNextVertex = false; - _this.m_isLoop = !!loop; - if (vertices && vertices.length) { - if (loop) { - _this._createLoop(vertices); - } - else { - _this._createChain(vertices); - } - } - return _this; - } - /** @internal */ - ChainShape.prototype._serialize = function () { - var data = { - type: this.m_type, - vertices: this.m_vertices, - isLoop: this.m_isLoop, - hasPrevVertex: this.m_hasPrevVertex, - hasNextVertex: this.m_hasNextVertex, - prevVertex: null, - nextVertex: null, - }; - if (this.m_prevVertex) { - data.prevVertex = this.m_prevVertex; - } - if (this.m_nextVertex) { - data.nextVertex = this.m_nextVertex; - } - return data; - }; - /** @internal */ - ChainShape._deserialize = function (data, fixture, restore) { - var vertices = []; - if (data.vertices) { - for (var i = 0; i < data.vertices.length; i++) { - vertices.push(restore(Vec2, data.vertices[i])); - } - } - var shape = new ChainShape(vertices, data.isLoop); - if (data.prevVertex) { - shape.setPrevVertex(data.prevVertex); - } - if (data.nextVertex) { - shape.setNextVertex(data.nextVertex); - } - return shape; - }; - // clear() { - // this.m_vertices.length = 0; - // this.m_count = 0; - // } - ChainShape.prototype.getType = function () { - return this.m_type; - }; - ChainShape.prototype.getRadius = function () { - return this.m_radius; - }; - /** - * @internal - * Create a loop. This automatically adjusts connectivity. - * - * @param vertices an array of vertices, these are copied - * @param count the vertex count - */ - ChainShape.prototype._createLoop = function (vertices) { - if (vertices.length < 3) { - return; - } - for (var i = 1; i < vertices.length; ++i) { - vertices[i - 1]; - vertices[i]; - } - this.m_vertices = []; - this.m_count = vertices.length + 1; - for (var i = 0; i < vertices.length; ++i) { - this.m_vertices[i] = Vec2.clone(vertices[i]); - } - this.m_vertices[vertices.length] = Vec2.clone(vertices[0]); - this.m_prevVertex = this.m_vertices[this.m_count - 2]; - this.m_nextVertex = this.m_vertices[1]; - this.m_hasPrevVertex = true; - this.m_hasNextVertex = true; - return this; - }; - /** - * @internal - * Create a chain with isolated end vertices. - * - * @param vertices an array of vertices, these are copied - */ - ChainShape.prototype._createChain = function (vertices) { - for (var i = 1; i < vertices.length; ++i) { - // If the code crashes here, it means your vertices are too close together. - vertices[i - 1]; - vertices[i]; - } - this.m_count = vertices.length; - for (var i = 0; i < vertices.length; ++i) { - this.m_vertices[i] = Vec2.clone(vertices[i]); - } - this.m_hasPrevVertex = false; - this.m_hasNextVertex = false; - this.m_prevVertex = null; - this.m_nextVertex = null; - return this; - }; - /** @hidden */ - ChainShape.prototype._reset = function () { - if (this.m_isLoop) { - this._createLoop(this.m_vertices); - } - else { - this._createChain(this.m_vertices); - } - }; - /** - * Establish connectivity to a vertex that precedes the first vertex. Don't call - * this for loops. - */ - ChainShape.prototype.setPrevVertex = function (prevVertex) { - // todo: copy or reference - this.m_prevVertex = prevVertex; - this.m_hasPrevVertex = true; - }; - ChainShape.prototype.getPrevVertex = function () { - return this.m_prevVertex; - }; - /** - * Establish connectivity to a vertex that follows the last vertex. Don't call - * this for loops. - */ - ChainShape.prototype.setNextVertex = function (nextVertex) { - // todo: copy or reference - this.m_nextVertex = nextVertex; - this.m_hasNextVertex = true; - }; - ChainShape.prototype.getNextVertex = function () { - return this.m_nextVertex; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - ChainShape.prototype._clone = function () { - var clone = new ChainShape(); - clone._createChain(this.m_vertices); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_prevVertex = this.m_prevVertex; - clone.m_nextVertex = this.m_nextVertex; - clone.m_hasPrevVertex = this.m_hasPrevVertex; - clone.m_hasNextVertex = this.m_hasNextVertex; - return clone; - }; - /** - * Get the number of child primitives. - */ - ChainShape.prototype.getChildCount = function () { - // edge count = vertex count - 1 - return this.m_count - 1; - }; - // Get a child edge. - ChainShape.prototype.getChildEdge = function (edge, childIndex) { - edge.m_type = EdgeShape.TYPE; - edge.m_radius = this.m_radius; - edge.m_vertex1 = this.m_vertices[childIndex]; - edge.m_vertex2 = this.m_vertices[childIndex + 1]; - if (childIndex > 0) { - edge.m_vertex0 = this.m_vertices[childIndex - 1]; - edge.m_hasVertex0 = true; - } - else { - edge.m_vertex0 = this.m_prevVertex; - edge.m_hasVertex0 = this.m_hasPrevVertex; - } - if (childIndex < this.m_count - 2) { - edge.m_vertex3 = this.m_vertices[childIndex + 2]; - edge.m_hasVertex3 = true; - } - else { - edge.m_vertex3 = this.m_nextVertex; - edge.m_hasVertex3 = this.m_hasNextVertex; - } - }; - ChainShape.prototype.getVertex = function (index) { - if (index < this.m_count) { - return this.m_vertices[index]; - } - else { - return this.m_vertices[0]; - } - }; - ChainShape.prototype.isLoop = function () { - return this.m_isLoop; - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * This always return false. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - ChainShape.prototype.testPoint = function (xf, p) { - return false; - }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - ChainShape.prototype.rayCast = function (output, input, xf, childIndex) { - var edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1)); - return edgeShape.rayCast(output, input, xf, 0); - }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - ChainShape.prototype.computeAABB = function (aabb, xf, childIndex) { - transformVec2(v1$1, xf, this.getVertex(childIndex)); - transformVec2(v2, xf, this.getVertex(childIndex + 1)); - AABB.combinePoints(aabb, v1$1, v2); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * Chains have zero mass. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - ChainShape.prototype.computeMass = function (massData, density) { - massData.mass = 0.0; - zeroVec2(massData.center); - massData.I = 0.0; - }; - ChainShape.prototype.computeDistanceProxy = function (proxy, childIndex) { - proxy.m_vertices[0] = this.getVertex(childIndex); - proxy.m_vertices[1] = this.getVertex(childIndex + 1); - proxy.m_count = 2; - proxy.m_radius = this.m_radius; - }; - ChainShape.TYPE = "chain"; - return ChainShape; - }(Shape)); - var Chain = ChainShape; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_max$2 = Math.max; - /** @internal */ var math_min$4 = Math.min; - /** @internal */ var temp$1 = vec2(0, 0); - /** @internal */ var e$1 = vec2(0, 0); - /** @internal */ var e1$1 = vec2(0, 0); - /** @internal */ var e2$1 = vec2(0, 0); - /** @internal */ var center = vec2(0, 0); - /** @internal */ var s = vec2(0, 0); - /** - * A convex polygon. It is assumed that the interior of the polygon is to the - * left of each edge. Polygons have a maximum number of vertices equal to - * Settings.maxPolygonVertices. In most cases you should not need many vertices - * for a convex polygon. extends Shape - */ - var PolygonShape = /** @class */ (function (_super) { - __extends$a(PolygonShape, _super); - function PolygonShape(vertices) { - var _this = this; - // @ts-ignore - if (!(_this instanceof PolygonShape)) { - return new PolygonShape(vertices); - } - _this = _super.call(this) || this; - _this.m_type = PolygonShape.TYPE; - _this.m_radius = SettingsInternal.polygonRadius; - _this.m_centroid = Vec2.zero(); - _this.m_vertices = []; - _this.m_normals = []; - _this.m_count = 0; - if (vertices && vertices.length) { - _this._set(vertices); - } - return _this; - } - /** @internal */ - PolygonShape.prototype._serialize = function () { - return { - type: this.m_type, - vertices: this.m_vertices, - }; - }; - /** @internal */ - PolygonShape._deserialize = function (data, fixture, restore) { - var vertices = []; - if (data.vertices) { - for (var i = 0; i < data.vertices.length; i++) { - vertices.push(restore(Vec2, data.vertices[i])); - } - } - var shape = new PolygonShape(vertices); - return shape; - }; - PolygonShape.prototype.getType = function () { - return this.m_type; - }; - PolygonShape.prototype.getRadius = function () { - return this.m_radius; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - PolygonShape.prototype._clone = function () { - var clone = new PolygonShape(); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_count = this.m_count; - clone.m_centroid.setVec2(this.m_centroid); - for (var i = 0; i < this.m_count; i++) { - clone.m_vertices.push(this.m_vertices[i].clone()); - } - for (var i = 0; i < this.m_normals.length; i++) { - clone.m_normals.push(this.m_normals[i].clone()); - } - return clone; - }; - /** - * Get the number of child primitives. - */ - PolygonShape.prototype.getChildCount = function () { - return 1; - }; - /** @hidden */ - PolygonShape.prototype._reset = function () { - this._set(this.m_vertices); - }; - /** - * @internal - * - * Create a convex hull from the given array of local points. The count must be - * in the range [3, Settings.maxPolygonVertices]. - * - * Warning: the points may be re-ordered, even if they form a convex polygon - * Warning: collinear points are handled but not removed. Collinear points may - * lead to poor stacking behavior. - */ - PolygonShape.prototype._set = function (vertices) { - if (vertices.length < 3) { - this._setAsBox(1.0, 1.0); - return; - } - var n = math_min$4(vertices.length, SettingsInternal.maxPolygonVertices); - // Perform welding and copy vertices into local buffer. - var ps = []; // [Settings.maxPolygonVertices]; - for (var i = 0; i < n; ++i) { - var v = vertices[i]; - var unique = true; - for (var j = 0; j < ps.length; ++j) { - if (Vec2.distanceSquared(v, ps[j]) < 0.25 * SettingsInternal.linearSlopSquared) { - unique = false; - break; - } - } - if (unique) { - ps.push(Vec2.clone(v)); - } - } - n = ps.length; - if (n < 3) { - this._setAsBox(1.0, 1.0); - return; - } - // Create the convex hull using the Gift wrapping algorithm - // http://en.wikipedia.org/wiki/Gift_wrapping_algorithm - // Find the right most point on the hull (in case of multiple points bottom most is used) - var i0 = 0; - var x0 = ps[0].x; - for (var i = 1; i < n; ++i) { - var x = ps[i].x; - if (x > x0 || (x === x0 && ps[i].y < ps[i0].y)) { - i0 = i; - x0 = x; - } - } - var hull = []; // [Settings.maxPolygonVertices]; - var m = 0; - var ih = i0; - while (true) { - hull[m] = ih; - var ie = 0; - for (var j = 1; j < n; ++j) { - if (ie === ih) { - ie = j; - continue; - } - var r = Vec2.sub(ps[ie], ps[hull[m]]); - var v = Vec2.sub(ps[j], ps[hull[m]]); - var c = Vec2.crossVec2Vec2(r, v); - // c < 0 means counter-clockwise wrapping, c > 0 means clockwise wrapping - if (c < 0.0) { - ie = j; - } - // Collinearity check - if (c === 0.0 && v.lengthSquared() > r.lengthSquared()) { - ie = j; - } - } - ++m; - ih = ie; - if (ie === i0) { - break; - } - } - if (m < 3) { - this._setAsBox(1.0, 1.0); - return; - } - this.m_count = m; - // Copy vertices. - this.m_vertices = []; - for (var i = 0; i < m; ++i) { - this.m_vertices[i] = ps[hull[i]]; - } - // Compute normals. Ensure the edges have non-zero length. - for (var i = 0; i < m; ++i) { - var i1 = i; - var i2 = i + 1 < m ? i + 1 : 0; - var edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]); - this.m_normals[i] = Vec2.crossVec2Num(edge, 1.0); - this.m_normals[i].normalize(); - } - // Compute the polygon centroid. - this.m_centroid = computeCentroid(this.m_vertices, m); - }; - /** @internal */ PolygonShape.prototype._setAsBox = function (hx, hy, center, angle) { - // start with right-bottom, counter-clockwise, as in Gift wrapping algorithm in PolygonShape._set() - this.m_vertices[0] = Vec2.neo(hx, -hy); - this.m_vertices[1] = Vec2.neo(hx, hy); - this.m_vertices[2] = Vec2.neo(-hx, hy); - this.m_vertices[3] = Vec2.neo(-hx, -hy); - this.m_normals[0] = Vec2.neo(1.0, 0.0); - this.m_normals[1] = Vec2.neo(0.0, 1.0); - this.m_normals[2] = Vec2.neo(-1.0, 0.0); - this.m_normals[3] = Vec2.neo(0.0, -1.0); - this.m_count = 4; - if (center && Vec2.isValid(center)) { - angle = angle || 0; - copyVec2(this.m_centroid, center); - var xf = Transform.identity(); - xf.p.setVec2(center); - xf.q.setAngle(angle); - // Transform vertices and normals. - for (var i = 0; i < this.m_count; ++i) { - this.m_vertices[i] = Transform.mulVec2(xf, this.m_vertices[i]); - this.m_normals[i] = Rot.mulVec2(xf.q, this.m_normals[i]); - } - } - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - PolygonShape.prototype.testPoint = function (xf, p) { - var pLocal = detransformVec2(temp$1, xf, p); - for (var i = 0; i < this.m_count; ++i) { - var dot = dotVec2(this.m_normals[i], pLocal) - dotVec2(this.m_normals[i], this.m_vertices[i]); - if (dot > 0.0) { - return false; - } - } - return true; - }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - PolygonShape.prototype.rayCast = function (output, input, xf, childIndex) { - // Put the ray into the polygon's frame of reference. - var p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p)); - var p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p)); - var d = Vec2.sub(p2, p1); - var lower = 0.0; - var upper = input.maxFraction; - var index = -1; - for (var i = 0; i < this.m_count; ++i) { - // p = p1 + a * d - // dot(normal, p - v) = 0 - // dot(normal, p1 - v) + a * dot(normal, d) = 0 - var numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1)); - var denominator = Vec2.dot(this.m_normals[i], d); - if (denominator == 0.0) { - if (numerator < 0.0) { - return false; - } - } - else { - // Note: we want this predicate without division: - // lower < numerator / denominator, where denominator < 0 - // Since denominator < 0, we have to flip the inequality: - // lower < numerator / denominator <==> denominator * lower > numerator. - if (denominator < 0.0 && numerator < lower * denominator) { - // Increase lower. - // The segment enters this half-space. - lower = numerator / denominator; - index = i; - } - else if (denominator > 0.0 && numerator < upper * denominator) { - // Decrease upper. - // The segment exits this half-space. - upper = numerator / denominator; - } - } - // The use of epsilon here causes the assert on lower to trip - // in some cases. Apparently the use of epsilon was to make edge - // shapes work, but now those are handled separately. - // if (upper < lower - matrix.EPSILON) - if (upper < lower) { - return false; - } - } - if (index >= 0) { - output.fraction = lower; - output.normal = Rot.mulVec2(xf.q, this.m_normals[index]); - return true; - } - return false; - }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - PolygonShape.prototype.computeAABB = function (aabb, xf, childIndex) { - var minX = Infinity; - var minY = Infinity; - var maxX = -Infinity; - var maxY = -Infinity; - for (var i = 0; i < this.m_count; ++i) { - var v = transformVec2(temp$1, xf, this.m_vertices[i]); - minX = math_min$4(minX, v.x); - maxX = math_max$2(maxX, v.x); - minY = math_min$4(minY, v.y); - maxY = math_max$2(maxY, v.y); - } - setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius); - setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - PolygonShape.prototype.computeMass = function (massData, density) { - zeroVec2(center); - var area = 0.0; - var I = 0.0; - // s is the reference point for forming triangles. - // It's location doesn't change the result (except for rounding error). - zeroVec2(s); - // This code would put the reference point inside the polygon. - for (var i = 0; i < this.m_count; ++i) { - plusVec2(s, this.m_vertices[i]); - } - scaleVec2(s, 1.0 / this.m_count, s); - var k_inv3 = 1.0 / 3.0; - for (var i = 0; i < this.m_count; ++i) { - // Triangle vertices. - subVec2(e1$1, this.m_vertices[i], s); - if (i + 1 < this.m_count) { - subVec2(e2$1, this.m_vertices[i + 1], s); - } - else { - subVec2(e2$1, this.m_vertices[0], s); - } - var D = crossVec2Vec2(e1$1, e2$1); - var triangleArea = 0.5 * D; - area += triangleArea; - // Area weighted centroid - combine2Vec2(temp$1, triangleArea * k_inv3, e1$1, triangleArea * k_inv3, e2$1); - plusVec2(center, temp$1); - var ex1 = e1$1.x; - var ey1 = e1$1.y; - var ex2 = e2$1.x; - var ey2 = e2$1.y; - var intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2; - var inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2; - I += (0.25 * k_inv3 * D) * (intx2 + inty2); - } - // Total mass - massData.mass = density * area; - scaleVec2(center, 1.0 / area, center); - addVec2(massData.center, center, s); - // Inertia tensor relative to the local origin (point s). - massData.I = density * I; - // Shift to center of mass then to original body origin. - massData.I += massData.mass * (dotVec2(massData.center, massData.center) - dotVec2(center, center)); - }; - /** - * Validate convexity. This is a very time consuming operation. - * @returns true if valid - */ - PolygonShape.prototype.validate = function () { - for (var i = 0; i < this.m_count; ++i) { - var i1 = i; - var i2 = i < this.m_count - 1 ? i1 + 1 : 0; - var p = this.m_vertices[i1]; - subVec2(e$1, this.m_vertices[i2], p); - for (var j = 0; j < this.m_count; ++j) { - if (j == i1 || j == i2) { - continue; - } - var c = crossVec2Vec2(e$1, subVec2(temp$1, this.m_vertices[j], p)); - if (c < 0.0) { - return false; - } - } - } - return true; - }; - PolygonShape.prototype.computeDistanceProxy = function (proxy) { - for (var i = 0; i < this.m_count; ++i) { - proxy.m_vertices[i] = this.m_vertices[i]; - } - proxy.m_vertices.length = this.m_count; - proxy.m_count = this.m_count; - proxy.m_radius = this.m_radius; - }; - PolygonShape.TYPE = "polygon"; - return PolygonShape; - }(Shape)); - /** @internal */ function computeCentroid(vs, count) { - var c = Vec2.zero(); - var area = 0.0; - // pRef is the reference point for forming triangles. - // It's location doesn't change the result (except for rounding error). - var pRef = Vec2.zero(); - var i; - var inv3 = 1.0 / 3.0; - for (var i = 0; i < count; ++i) { - // Triangle vertices. - var p1 = pRef; - var p2 = vs[i]; - var p3 = i + 1 < count ? vs[i + 1] : vs[0]; - var e1_1 = Vec2.sub(p2, p1); - var e2_1 = Vec2.sub(p3, p1); - var D = Vec2.crossVec2Vec2(e1_1, e2_1); - var triangleArea = 0.5 * D; - area += triangleArea; - // Area weighted centroid - combine3Vec2(temp$1, 1, p1, 1, p2, 1, p3); - plusScaleVec2(c, triangleArea * inv3, temp$1); - } - c.mul(1.0 / area); - return c; - } - var Polygon = PolygonShape; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_sqrt$2 = Math.sqrt; - /** @internal */ var math_PI$5 = Math.PI; - /** @internal */ var temp = vec2(0, 0); - var CircleShape = /** @class */ (function (_super) { - __extends$a(CircleShape, _super); - function CircleShape(a, b) { - var _this = this; - // @ts-ignore - if (!(_this instanceof CircleShape)) { - return new CircleShape(a, b); - } - _this = _super.call(this) || this; - _this.m_type = CircleShape.TYPE; - _this.m_p = Vec2.zero(); - _this.m_radius = 1; - if (typeof a === "object" && Vec2.isValid(a)) { - _this.m_p.setVec2(a); - if (typeof b === "number") { - _this.m_radius = b; - } - } - else if (typeof a === "number") { - _this.m_radius = a; - } - return _this; - } - /** @internal */ - CircleShape.prototype._serialize = function () { - return { - type: this.m_type, - p: this.m_p, - radius: this.m_radius, - }; - }; - /** @internal */ - CircleShape._deserialize = function (data) { - return new CircleShape(data.p, data.radius); - }; - /** @hidden */ - CircleShape.prototype._reset = function () { - // noop - }; - CircleShape.prototype.getType = function () { - return this.m_type; - }; - CircleShape.prototype.getRadius = function () { - return this.m_radius; - }; - CircleShape.prototype.getCenter = function () { - return this.m_p; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - CircleShape.prototype._clone = function () { - var clone = new CircleShape(); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_p = this.m_p.clone(); - return clone; - }; - /** - * Get the number of child primitives. - */ - CircleShape.prototype.getChildCount = function () { - return 1; - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - CircleShape.prototype.testPoint = function (xf, p) { - var center = transformVec2(temp, xf, this.m_p); - return distSqrVec2(p, center) <= this.m_radius * this.m_radius; - }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - CircleShape.prototype.rayCast = function (output, input, xf, childIndex) { - // Collision Detection in Interactive 3D Environments by Gino van den Bergen - // From Section 3.1.2 - // x = s + a * r - // norm(x) = radius - var position = Vec2.add(xf.p, Rot.mulVec2(xf.q, this.m_p)); - var s = Vec2.sub(input.p1, position); - var b = Vec2.dot(s, s) - this.m_radius * this.m_radius; - // Solve quadratic equation. - var r = Vec2.sub(input.p2, input.p1); - var c = Vec2.dot(s, r); - var rr = Vec2.dot(r, r); - var sigma = c * c - rr * b; - // Check for negative discriminant and short segment. - if (sigma < 0.0 || rr < EPSILON) { - return false; - } - // Find the point of intersection of the line with the circle. - var a = -(c + math_sqrt$2(sigma)); - // Is the intersection point on the segment? - if (0.0 <= a && a <= input.maxFraction * rr) { - a /= rr; - output.fraction = a; - output.normal = Vec2.add(s, Vec2.mulNumVec2(a, r)); - output.normal.normalize(); - return true; - } - return false; - }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - CircleShape.prototype.computeAABB = function (aabb, xf, childIndex) { - var p = transformVec2(temp, xf, this.m_p); - setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius); - setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - CircleShape.prototype.computeMass = function (massData, density) { - massData.mass = density * math_PI$5 * this.m_radius * this.m_radius; - copyVec2(massData.center, this.m_p); - // inertia about the local origin - massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + lengthSqrVec2(this.m_p)); - }; - CircleShape.prototype.computeDistanceProxy = function (proxy) { - proxy.m_vertices[0] = this.m_p; - proxy.m_vertices.length = 1; - proxy.m_count = 1; - proxy.m_radius = this.m_radius; - }; - CircleShape.TYPE = "circle"; - return CircleShape; - }(Shape)); - var Circle = CircleShape; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$6 = Math.abs; - /** @internal */ var math_PI$4 = Math.PI; - /** @internal */ var DEFAULTS$a = { - frequencyHz: 0.0, - dampingRatio: 0.0 - }; - /** - * A distance joint constrains two points on two bodies to remain at a fixed - * distance from each other. You can view this as a massless, rigid rod. - */ - var DistanceJoint = /** @class */ (function (_super) { - __extends$a(DistanceJoint, _super); - function DistanceJoint(def, bodyA, bodyB, anchorA, anchorB) { - var _this = this; - // @ts-ignore - if (!(_this instanceof DistanceJoint)) { - return new DistanceJoint(def, bodyA, bodyB, anchorA, anchorB); - } - // order of constructor arguments is changed in v0.2 - if (bodyB && anchorA && ("m_type" in anchorA) && ("x" in bodyB) && ("y" in bodyB)) { - var temp = bodyB; - bodyB = anchorA; - anchorA = temp; - } - def = options(def, DEFAULTS$a); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = DistanceJoint.TYPE; - // Solver shared - _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.zero()); - _this.m_length = Number.isFinite(def.length) ? def.length : - Vec2.distance(bodyA.getWorldPoint(_this.m_localAnchorA), bodyB.getWorldPoint(_this.m_localAnchorB)); - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_impulse = 0.0; - _this.m_gamma = 0.0; - _this.m_bias = 0.0; - return _this; - // 1-D constrained system - // m (v2 - v1) = lambda - // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass. - // x2 = x1 + h * v2 - // 1-D mass-damper-spring system - // m (v2 - v1) + h * d * v2 + h * k * - // C = norm(p2 - p1) - L - // u = (p2 - p1) / norm(p2 - p1) - // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1)) - // J = [-u -cross(r1, u) u cross(r2, u)] - // K = J * invM * JT - // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2 - } - /** @internal */ - DistanceJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - length: this.m_length, - impulse: this.m_impulse, - gamma: this.m_gamma, - bias: this.m_bias, - }; - }; - /** @internal */ - DistanceJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new DistanceJoint(data); - return joint; - }; - /** @hidden */ - DistanceJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (def.length > 0) { - this.m_length = +def.length; - } - else if (def.length < 0) ; - else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) { - this.m_length = Vec2.distance(this.m_bodyA.getWorldPoint(this.m_localAnchorA), this.m_bodyB.getWorldPoint(this.m_localAnchorB)); - } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; - } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - DistanceJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - DistanceJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Set the natural length. Manipulating the length can lead to non-physical - * behavior when the frequency is zero. - */ - DistanceJoint.prototype.setLength = function (length) { - this.m_length = length; - }; - /** - * Get the natural length. - */ - DistanceJoint.prototype.getLength = function () { - return this.m_length; - }; - DistanceJoint.prototype.setFrequency = function (hz) { - this.m_frequencyHz = hz; - }; - DistanceJoint.prototype.getFrequency = function () { - return this.m_frequencyHz; - }; - DistanceJoint.prototype.setDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - DistanceJoint.prototype.getDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - DistanceJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - DistanceJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - DistanceJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - DistanceJoint.prototype.getReactionTorque = function (inv_dt) { - return 0.0; - }; - DistanceJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - this.m_u = Vec2.sub(Vec2.add(cB, this.m_rB), Vec2.add(cA, this.m_rA)); - // Handle singularity. - var length = this.m_u.length(); - if (length > SettingsInternal.linearSlop) { - this.m_u.mul(1.0 / length); - } - else { - this.m_u.setNum(0.0, 0.0); - } - var crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u); - var crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u); - var invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu; - // Compute the effective mass matrix. - this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0; - if (this.m_frequencyHz > 0.0) { - var C = length - this.m_length; - // Frequency - var omega = 2.0 * math_PI$4 * this.m_frequencyHz; - // Damping coefficient - var d = 2.0 * this.m_mass * this.m_dampingRatio * omega; - // Spring stiffness - var k = this.m_mass * omega * omega; - // magic formulas - var h = step.dt; - this.m_gamma = h * (d + h * k); - this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0; - this.m_bias = C * h * k * this.m_gamma; - invMass += this.m_gamma; - this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0; - } - else { - this.m_gamma = 0.0; - this.m_bias = 0.0; - } - if (step.warmStarting) { - // Scale the impulse to support a variable time step. - this.m_impulse *= step.dtRatio; - var P = Vec2.mulNumVec2(this.m_impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - DistanceJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - // Cdot = dot(u, v + cross(w, r)) - var vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA)); - var vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)); - var Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA); - var impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse); - this.m_impulse += impulse; - var P = Vec2.mulNumVec2(impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - DistanceJoint.prototype.solvePositionConstraints = function (step) { - if (this.m_frequencyHz > 0.0) { - // There is no position correction for soft distance constraints. - return true; - } - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); - var u = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA)); - var length = u.normalize(); - var C = clamp$1(length - this.m_length, -SettingsInternal.maxLinearCorrection, SettingsInternal.maxLinearCorrection); - var impulse = -this.m_mass * C; - var P = Vec2.mulNumVec2(impulse, u); - cA.subMul(this.m_invMassA, P); - aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P); - cB.addMul(this.m_invMassB, P); - aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P); - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return math_abs$6(C) < SettingsInternal.linearSlop; - }; - DistanceJoint.TYPE = "distance-joint"; - return DistanceJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var DEFAULTS$9 = { - maxForce: 0.0, - maxTorque: 0.0, - }; - /** - * Friction joint. This is used for top-down friction. It provides 2D - * translational friction and angular friction. - */ - var FrictionJoint = /** @class */ (function (_super) { - __extends$a(FrictionJoint, _super); - function FrictionJoint(def, bodyA, bodyB, anchor) { - var _this = this; - // @ts-ignore - if (!(_this instanceof FrictionJoint)) { - return new FrictionJoint(def, bodyA, bodyB, anchor); - } - def = options(def, DEFAULTS$9); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = FrictionJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - // Solver shared - _this.m_linearImpulse = Vec2.zero(); - _this.m_angularImpulse = 0.0; - _this.m_maxForce = def.maxForce; - _this.m_maxTorque = def.maxTorque; - return _this; - // Point-to-point constraint - // Cdot = v2 - v1 - // = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // Angle constraint - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 - } - /** @internal */ - FrictionJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - maxForce: this.m_maxForce, - maxTorque: this.m_maxTorque, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - }; - }; - /** @internal */ - FrictionJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new FrictionJoint(data); - return joint; - }; - /** @hidden */ - FrictionJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (Number.isFinite(def.maxForce)) { - this.m_maxForce = def.maxForce; - } - if (Number.isFinite(def.maxTorque)) { - this.m_maxTorque = def.maxTorque; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - FrictionJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - FrictionJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Set the maximum friction force in N. - */ - FrictionJoint.prototype.setMaxForce = function (force) { - this.m_maxForce = force; - }; - /** - * Get the maximum friction force in N. - */ - FrictionJoint.prototype.getMaxForce = function () { - return this.m_maxForce; - }; - /** - * Set the maximum friction torque in N*m. - */ - FrictionJoint.prototype.setMaxTorque = function (torque) { - this.m_maxTorque = torque; - }; - /** - * Get the maximum friction torque in N*m. - */ - FrictionJoint.prototype.getMaxTorque = function () { - return this.m_maxTorque; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - FrictionJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - FrictionJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - FrictionJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - FrictionJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_angularImpulse; - }; - FrictionJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective mass matrix. - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // [ 0 -1 0 1] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var K = new Mat22(); - K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y - * this.m_rB.y; - K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; - K.ey.x = K.ex.y; - K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x - * this.m_rB.x; - this.m_linearMass = K.getInverse(); - this.m_angularMass = iA + iB; - if (this.m_angularMass > 0.0) { - this.m_angularMass = 1.0 / this.m_angularMass; - } - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_linearImpulse.mul(step.dtRatio); - this.m_angularImpulse *= step.dtRatio; - var P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse); - } - else { - this.m_linearImpulse.setZero(); - this.m_angularImpulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - FrictionJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var h = step.dt; - // Solve angular friction - { - var Cdot = wB - wA; - var impulse = -this.m_angularMass * Cdot; - var oldImpulse = this.m_angularImpulse; - var maxImpulse = h * this.m_maxTorque; - this.m_angularImpulse = clamp$1(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_angularImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve linear friction - { - var Cdot = Vec2.sub(Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)), Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA))); - var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); - var oldImpulse = this.m_linearImpulse; - this.m_linearImpulse.add(impulse); - var maxImpulse = h * this.m_maxForce; - if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) { - this.m_linearImpulse.normalize(); - this.m_linearImpulse.mul(maxImpulse); - } - impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); - vA.subMul(mA, impulse); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); - vB.addMul(mB, impulse); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - FrictionJoint.prototype.solvePositionConstraints = function (step) { - return true; - }; - FrictionJoint.TYPE = "friction-joint"; - return FrictionJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** - * A 3-by-3 matrix. Stored in column-major order. - */ - var Mat33 = /** @class */ (function () { - function Mat33(a, b, c) { - if (typeof a === "object" && a !== null) { - this.ex = Vec3.clone(a); - this.ey = Vec3.clone(b); - this.ez = Vec3.clone(c); - } - else { - this.ex = Vec3.zero(); - this.ey = Vec3.zero(); - this.ez = Vec3.zero(); - } - } - /** @hidden */ - Mat33.prototype.toString = function () { - return JSON.stringify(this); - }; - Mat33.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec3.isValid(obj.ex) && Vec3.isValid(obj.ey) && Vec3.isValid(obj.ez); - }; - Mat33.assert = function (o) { - }; - /** - * Set this matrix to all zeros. - */ - Mat33.prototype.setZero = function () { - this.ex.setZero(); - this.ey.setZero(); - this.ez.setZero(); - return this; - }; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - Mat33.prototype.solve33 = function (v) { - // let det = matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, this.ez)); - var cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; - var cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; - var cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; - var det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z; - if (det !== 0.0) { - det = 1.0 / det; - } - var r = new Vec3(); - // r.x = det * matrix.dotVec3(v, matrix.newCrossVec3(this.ey, this.ez)); - cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; - cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; - cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; - r.x = det * (v.x * cross_x + v.y * cross_y + v.z * cross_z); - // r.y = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(v, this.ez)); - cross_x = v.y * this.ez.z - v.z * this.ez.y; - cross_y = v.z * this.ez.x - v.x * this.ez.z; - cross_z = v.x * this.ez.y - v.y * this.ez.x; - r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); - // r.z = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, v)); - cross_x = this.ey.y * v.z - this.ey.z * v.y; - cross_y = this.ey.z * v.x - this.ey.x * v.z; - cross_z = this.ey.x * v.y - this.ey.y * v.x; - r.z = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); - return r; - }; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix - * equation. - */ - Mat33.prototype.solve22 = function (v) { - var a11 = this.ex.x; - var a12 = this.ey.x; - var a21 = this.ex.y; - var a22 = this.ey.y; - var det = a11 * a22 - a12 * a21; - if (det !== 0.0) { - det = 1.0 / det; - } - var r = Vec2.zero(); - r.x = det * (a22 * v.x - a12 * v.y); - r.y = det * (a11 * v.y - a21 * v.x); - return r; - }; - /** - * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if - * singular. - */ - Mat33.prototype.getInverse22 = function (M) { - var a = this.ex.x; - var b = this.ey.x; - var c = this.ex.y; - var d = this.ey.y; - var det = a * d - b * c; - if (det !== 0.0) { - det = 1.0 / det; - } - M.ex.x = det * d; - M.ey.x = -det * b; - M.ex.z = 0.0; - M.ex.y = -det * c; - M.ey.y = det * a; - M.ey.z = 0.0; - M.ez.x = 0.0; - M.ez.y = 0.0; - M.ez.z = 0.0; - }; - /** - * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix - * if singular. - */ - Mat33.prototype.getSymInverse33 = function (M) { - var det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez)); - if (det !== 0.0) { - det = 1.0 / det; - } - var a11 = this.ex.x; - var a12 = this.ey.x; - var a13 = this.ez.x; - var a22 = this.ey.y; - var a23 = this.ez.y; - var a33 = this.ez.z; - M.ex.x = det * (a22 * a33 - a23 * a23); - M.ex.y = det * (a13 * a23 - a12 * a33); - M.ex.z = det * (a12 * a23 - a13 * a22); - M.ey.x = M.ex.y; - M.ey.y = det * (a11 * a33 - a13 * a13); - M.ey.z = det * (a13 * a12 - a11 * a23); - M.ez.x = M.ex.z; - M.ez.y = M.ey.z; - M.ez.z = det * (a11 * a22 - a12 * a12); - }; - Mat33.mul = function (a, b) { - if (b && "z" in b && "y" in b && "x" in b) { - var x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z; - var y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z; - var z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z; - return new Vec3(x, y, z); - } - else if (b && "y" in b && "x" in b) { - var x = a.ex.x * b.x + a.ey.x * b.y; - var y = a.ex.y * b.x + a.ey.y * b.y; - return Vec2.neo(x, y); - } - }; - Mat33.mulVec3 = function (a, b) { - var x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z; - var y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z; - var z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z; - return new Vec3(x, y, z); - }; - Mat33.mulVec2 = function (a, b) { - var x = a.ex.x * b.x + a.ey.x * b.y; - var y = a.ex.y * b.x + a.ey.y * b.y; - return Vec2.neo(x, y); - }; - Mat33.add = function (a, b) { - return new Mat33(Vec3.add(a.ex, b.ex), Vec3.add(a.ey, b.ey), Vec3.add(a.ez, b.ez)); - }; - return Mat33; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$5 = Math.abs; - // todo: use string? - /** @internal */ var LimitState$2; - (function (LimitState) { - LimitState[LimitState["inactiveLimit"] = 0] = "inactiveLimit"; - LimitState[LimitState["atLowerLimit"] = 1] = "atLowerLimit"; - LimitState[LimitState["atUpperLimit"] = 2] = "atUpperLimit"; - LimitState[LimitState["equalLimits"] = 3] = "equalLimits"; - })(LimitState$2 || (LimitState$2 = {})); - /** @internal */ var DEFAULTS$8 = { - lowerAngle: 0.0, - upperAngle: 0.0, - maxMotorTorque: 0.0, - motorSpeed: 0.0, - enableLimit: false, - enableMotor: false - }; - /** - * A revolute joint constrains two bodies to share a common point while they are - * free to rotate about the point. The relative rotation about the shared point - * is the joint angle. You can limit the relative rotation with a joint limit - * that specifies a lower and upper angle. You can use a motor to drive the - * relative rotation about the shared point. A maximum motor torque is provided - * so that infinite forces are not generated. - */ - var RevoluteJoint = /** @class */ (function (_super) { - __extends$a(RevoluteJoint, _super); - function RevoluteJoint(def, bodyA, bodyB, anchor) { - var _a, _b, _c, _d, _e, _f; - var _this = this; - // @ts-ignore - if (!(_this instanceof RevoluteJoint)) { - return new RevoluteJoint(def, bodyA, bodyB, anchor); - } - def = def !== null && def !== void 0 ? def : {}; - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_mass = new Mat33(); - _this.m_limitState = LimitState$2.inactiveLimit; - _this.m_type = RevoluteJoint.TYPE; - if (Vec2.isValid(anchor)) { - _this.m_localAnchorA = bodyA.getLocalPoint(anchor); - } - else if (Vec2.isValid(def.localAnchorA)) { - _this.m_localAnchorA = Vec2.clone(def.localAnchorA); - } - else { - _this.m_localAnchorA = Vec2.zero(); - } - if (Vec2.isValid(anchor)) { - _this.m_localAnchorB = bodyB.getLocalPoint(anchor); - } - else if (Vec2.isValid(def.localAnchorB)) { - _this.m_localAnchorB = Vec2.clone(def.localAnchorB); - } - else { - _this.m_localAnchorB = Vec2.zero(); - } - if (Number.isFinite(def.referenceAngle)) { - _this.m_referenceAngle = def.referenceAngle; - } - else { - _this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle(); - } - _this.m_impulse = new Vec3(); - _this.m_motorImpulse = 0.0; - _this.m_lowerAngle = (_a = def.lowerAngle) !== null && _a !== void 0 ? _a : DEFAULTS$8.lowerAngle; - _this.m_upperAngle = (_b = def.upperAngle) !== null && _b !== void 0 ? _b : DEFAULTS$8.upperAngle; - _this.m_maxMotorTorque = (_c = def.maxMotorTorque) !== null && _c !== void 0 ? _c : DEFAULTS$8.maxMotorTorque; - _this.m_motorSpeed = (_d = def.motorSpeed) !== null && _d !== void 0 ? _d : DEFAULTS$8.motorSpeed; - _this.m_enableLimit = (_e = def.enableLimit) !== null && _e !== void 0 ? _e : DEFAULTS$8.enableLimit; - _this.m_enableMotor = (_f = def.enableMotor) !== null && _f !== void 0 ? _f : DEFAULTS$8.enableMotor; - return _this; - // Point-to-point constraint - // C = p2 - p1 - // Cdot = v2 - v1 - // = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // Motor constraint - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 - } - /** @internal */ - RevoluteJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - lowerAngle: this.m_lowerAngle, - upperAngle: this.m_upperAngle, - maxMotorTorque: this.m_maxMotorTorque, - motorSpeed: this.m_motorSpeed, - enableLimit: this.m_enableLimit, - enableMotor: this.m_enableMotor, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - referenceAngle: this.m_referenceAngle, - }; - }; - /** @internal */ - RevoluteJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new RevoluteJoint(data); - return joint; - }; - /** @hidden */ - RevoluteJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (Number.isFinite(def.referenceAngle)) { - this.m_referenceAngle = def.referenceAngle; - } - if (def.enableLimit !== undefined) { - this.m_enableLimit = def.enableLimit; - } - if (Number.isFinite(def.lowerAngle)) { - this.m_lowerAngle = def.lowerAngle; - } - if (Number.isFinite(def.upperAngle)) { - this.m_upperAngle = def.upperAngle; - } - if (Number.isFinite(def.maxMotorTorque)) { - this.m_maxMotorTorque = def.maxMotorTorque; - } - if (Number.isFinite(def.motorSpeed)) { - this.m_motorSpeed = def.motorSpeed; - } - if (def.enableMotor !== undefined) { - this.m_enableMotor = def.enableMotor; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - RevoluteJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - RevoluteJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Get the reference angle. - */ - RevoluteJoint.prototype.getReferenceAngle = function () { - return this.m_referenceAngle; - }; - /** - * Get the current joint angle in radians. - */ - RevoluteJoint.prototype.getJointAngle = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle; - }; - /** - * Get the current joint angle speed in radians per second. - */ - RevoluteJoint.prototype.getJointSpeed = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - return bB.m_angularVelocity - bA.m_angularVelocity; - }; - /** - * Is the joint motor enabled? - */ - RevoluteJoint.prototype.isMotorEnabled = function () { - return this.m_enableMotor; - }; - /** - * Enable/disable the joint motor. - */ - RevoluteJoint.prototype.enableMotor = function (flag) { - if (flag == this.m_enableMotor) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableMotor = flag; - }; - /** - * Get the current motor torque given the inverse time step. Unit is N*m. - */ - RevoluteJoint.prototype.getMotorTorque = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - /** - * Set the motor speed in radians per second. - */ - RevoluteJoint.prototype.setMotorSpeed = function (speed) { - if (speed == this.m_motorSpeed) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_motorSpeed = speed; - }; - /** - * Get the motor speed in radians per second. - */ - RevoluteJoint.prototype.getMotorSpeed = function () { - return this.m_motorSpeed; - }; - /** - * Set the maximum motor torque, usually in N-m. - */ - RevoluteJoint.prototype.setMaxMotorTorque = function (torque) { - if (torque == this.m_maxMotorTorque) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_maxMotorTorque = torque; - }; - RevoluteJoint.prototype.getMaxMotorTorque = function () { - return this.m_maxMotorTorque; - }; - /** - * Is the joint limit enabled? - */ - RevoluteJoint.prototype.isLimitEnabled = function () { - return this.m_enableLimit; - }; - /** - * Enable/disable the joint limit. - */ - RevoluteJoint.prototype.enableLimit = function (flag) { - if (flag != this.m_enableLimit) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableLimit = flag; - this.m_impulse.z = 0.0; - } - }; - /** - * Get the lower joint limit in radians. - */ - RevoluteJoint.prototype.getLowerLimit = function () { - return this.m_lowerAngle; - }; - /** - * Get the upper joint limit in radians. - */ - RevoluteJoint.prototype.getUpperLimit = function () { - return this.m_upperAngle; - }; - /** - * Set the joint limits in radians. - */ - RevoluteJoint.prototype.setLimits = function (lower, upper) { - if (lower != this.m_lowerAngle || upper != this.m_upperAngle) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_impulse.z = 0.0; - this.m_lowerAngle = lower; - this.m_upperAngle = upper; - } - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - RevoluteJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - RevoluteJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force given the inverse time step. Unit is N. - */ - RevoluteJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); - }; - /** - * Get the reaction torque due to the joint limit given the inverse time step. - * Unit is N*m. - */ - RevoluteJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_impulse.z; - }; - RevoluteJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // [ 0 -1 0 1] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var fixedRotation = (iA + iB === 0.0); - 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; - this.m_mass.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; - this.m_mass.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; - this.m_mass.ex.y = this.m_mass.ey.x; - 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; - this.m_mass.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; - this.m_mass.ex.z = this.m_mass.ez.x; - this.m_mass.ey.z = this.m_mass.ez.y; - this.m_mass.ez.z = iA + iB; - this.m_motorMass = iA + iB; - if (this.m_motorMass > 0.0) { - this.m_motorMass = 1.0 / this.m_motorMass; - } - if (this.m_enableMotor == false || fixedRotation) { - this.m_motorImpulse = 0.0; - } - if (this.m_enableLimit && fixedRotation == false) { - var jointAngle = aB - aA - this.m_referenceAngle; - if (math_abs$5(this.m_upperAngle - this.m_lowerAngle) < 2.0 * SettingsInternal.angularSlop) { - this.m_limitState = LimitState$2.equalLimits; - } - else if (jointAngle <= this.m_lowerAngle) { - if (this.m_limitState != LimitState$2.atLowerLimit) { - this.m_impulse.z = 0.0; - } - this.m_limitState = LimitState$2.atLowerLimit; - } - else if (jointAngle >= this.m_upperAngle) { - if (this.m_limitState != LimitState$2.atUpperLimit) { - this.m_impulse.z = 0.0; - } - this.m_limitState = LimitState$2.atUpperLimit; - } - else { - this.m_limitState = LimitState$2.inactiveLimit; - this.m_impulse.z = 0.0; - } - } - else { - this.m_limitState = LimitState$2.inactiveLimit; - } - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_impulse.mul(step.dtRatio); - this.m_motorImpulse *= step.dtRatio; - var P = Vec2.neo(this.m_impulse.x, this.m_impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z); - } - else { - this.m_impulse.setZero(); - this.m_motorImpulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - RevoluteJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var fixedRotation = (iA + iB === 0.0); - // Solve motor constraint. - if (this.m_enableMotor && this.m_limitState != LimitState$2.equalLimits && fixedRotation == false) { - var Cdot = wB - wA - this.m_motorSpeed; - var impulse = -this.m_motorMass * Cdot; - var oldImpulse = this.m_motorImpulse; - var maxImpulse = step.dt * this.m_maxMotorTorque; - this.m_motorImpulse = clamp$1(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_motorImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve limit constraint. - if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { - var Cdot1 = Vec2.zero(); - Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var Cdot2 = wB - wA; - var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); - var impulse = Vec3.neg(this.m_mass.solve33(Cdot)); - if (this.m_limitState == LimitState$2.equalLimits) { - this.m_impulse.add(impulse); - } - else if (this.m_limitState == LimitState$2.atLowerLimit) { - var newImpulse = this.m_impulse.z + impulse.z; - if (newImpulse < 0.0) { - var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); - var reduced = this.m_mass.solve22(rhs); - impulse.x = reduced.x; - impulse.y = reduced.y; - impulse.z = -this.m_impulse.z; - this.m_impulse.x += reduced.x; - this.m_impulse.y += reduced.y; - this.m_impulse.z = 0.0; - } - else { - this.m_impulse.add(impulse); - } - } - else if (this.m_limitState == LimitState$2.atUpperLimit) { - var newImpulse = this.m_impulse.z + impulse.z; - if (newImpulse > 0.0) { - var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); - var reduced = this.m_mass.solve22(rhs); - impulse.x = reduced.x; - impulse.y = reduced.y; - impulse.z = -this.m_impulse.z; - this.m_impulse.x += reduced.x; - this.m_impulse.y += reduced.y; - this.m_impulse.z = 0.0; - } - else { - this.m_impulse.add(impulse); - } - } - var P = Vec2.neo(impulse.x, impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z); - } - else { - // Solve point-to-point constraint - var Cdot = Vec2.zero(); - Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var impulse = this.m_mass.solve22(Vec2.neg(Cdot)); - this.m_impulse.x += impulse.x; - this.m_impulse.y += impulse.y; - vA.subMul(mA, impulse); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); - vB.addMul(mB, impulse); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - RevoluteJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var angularError = 0.0; - var positionError = 0.0; - var fixedRotation = (this.m_invIA + this.m_invIB == 0.0); - // Solve angular limit constraint. - if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { - var angle = aB - aA - this.m_referenceAngle; - var limitImpulse = 0.0; - if (this.m_limitState == LimitState$2.equalLimits) { - // Prevent large angular corrections - var C = clamp$1(angle - this.m_lowerAngle, -SettingsInternal.maxAngularCorrection, SettingsInternal.maxAngularCorrection); - limitImpulse = -this.m_motorMass * C; - angularError = math_abs$5(C); - } - else if (this.m_limitState == LimitState$2.atLowerLimit) { - var C = angle - this.m_lowerAngle; - angularError = -C; - // Prevent large angular corrections and allow some slop. - C = clamp$1(C + SettingsInternal.angularSlop, -SettingsInternal.maxAngularCorrection, 0.0); - limitImpulse = -this.m_motorMass * C; - } - else if (this.m_limitState == LimitState$2.atUpperLimit) { - var C = angle - this.m_upperAngle; - angularError = C; - // Prevent large angular corrections and allow some slop. - C = clamp$1(C - SettingsInternal.angularSlop, 0.0, SettingsInternal.maxAngularCorrection); - limitImpulse = -this.m_motorMass * C; - } - aA -= this.m_invIA * limitImpulse; - aB += this.m_invIB * limitImpulse; - } - // Solve point-to-point constraint. - { - qA.setAngle(aA); - qB.setAngle(aB); - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var C = Vec2.zero(); - C.addCombine(1, cB, 1, rB); - C.subCombine(1, cA, 1, rA); - positionError = C.length(); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var K = new Mat22(); - K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y; - K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y; - K.ey.x = K.ex.y; - K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x; - var impulse = Vec2.neg(K.solve(C)); - cA.subMul(mA, impulse); - aA -= iA * Vec2.crossVec2Vec2(rA, impulse); - cB.addMul(mB, impulse); - aB += iB * Vec2.crossVec2Vec2(rB, impulse); - } - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; - }; - RevoluteJoint.TYPE = "revolute-joint"; - return RevoluteJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$4 = Math.abs; - /** @internal */ var math_max$1 = Math.max; - /** @internal */ var math_min$3 = Math.min; - /** @internal */ var LimitState$1; - (function (LimitState) { - LimitState[LimitState["inactiveLimit"] = 0] = "inactiveLimit"; - LimitState[LimitState["atLowerLimit"] = 1] = "atLowerLimit"; - LimitState[LimitState["atUpperLimit"] = 2] = "atUpperLimit"; - LimitState[LimitState["equalLimits"] = 3] = "equalLimits"; - })(LimitState$1 || (LimitState$1 = {})); - /** @internal */ var DEFAULTS$7 = { - enableLimit: false, - lowerTranslation: 0.0, - upperTranslation: 0.0, - enableMotor: false, - maxMotorForce: 0.0, - motorSpeed: 0.0 - }; - /** - * A prismatic joint. This joint provides one degree of freedom: translation - * along an axis fixed in bodyA. Relative rotation is prevented. You can use a - * joint limit to restrict the range of motion and a joint motor to drive the - * motion or to model joint friction. - */ - var PrismaticJoint = /** @class */ (function (_super) { - __extends$a(PrismaticJoint, _super); - function PrismaticJoint(def, bodyA, bodyB, anchor, axis) { - var _this = this; - // @ts-ignore - if (!(_this instanceof PrismaticJoint)) { - return new PrismaticJoint(def, bodyA, bodyB, anchor, axis); - } - def = options(def, DEFAULTS$7); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = PrismaticJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - _this.m_localXAxisA = Vec2.clone(axis ? bodyA.getLocalVector(axis) : def.localAxisA || Vec2.neo(1.0, 0.0)); - _this.m_localXAxisA.normalize(); - _this.m_localYAxisA = Vec2.crossNumVec2(1.0, _this.m_localXAxisA); - _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); - _this.m_impulse = new Vec3(); - _this.m_motorMass = 0.0; - _this.m_motorImpulse = 0.0; - _this.m_lowerTranslation = def.lowerTranslation; - _this.m_upperTranslation = def.upperTranslation; - _this.m_maxMotorForce = def.maxMotorForce; - _this.m_motorSpeed = def.motorSpeed; - _this.m_enableLimit = def.enableLimit; - _this.m_enableMotor = def.enableMotor; - _this.m_limitState = LimitState$1.inactiveLimit; - _this.m_axis = Vec2.zero(); - _this.m_perp = Vec2.zero(); - _this.m_K = new Mat33(); - return _this; - // Linear constraint (point-to-line) - // d = p2 - p1 = x2 + r2 - x1 - r1 - // C = dot(perp, d) - // Cdot = dot(d, cross(w1, perp)) + dot(perp, v2 + cross(w2, r2) - v1 - - // cross(w1, r1)) - // = -dot(perp, v1) - dot(cross(d + r1, perp), w1) + dot(perp, v2) + - // dot(cross(r2, perp), v2) - // J = [-perp, -cross(d + r1, perp), perp, cross(r2,perp)] - // - // Angular constraint - // C = a2 - a1 + a_initial - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // - // K = J * invM * JT - // - // J = [-a -s1 a s2] - // [0 -1 0 1] - // a = perp - // s1 = cross(d + r1, a) = cross(p2 - x1, a) - // s2 = cross(r2, a) = cross(p2 - x2, a) - // Motor/Limit linear constraint - // C = dot(ax1, d) - // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) + - // dot(cross(r2, ax1), v2) - // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)] - // Block Solver - // We develop a block solver that includes the joint limit. This makes the - // limit stiff (inelastic) even - // when the mass has poor distribution (leading to large torques about the - // joint anchor points). - // - // The Jacobian has 3 rows: - // J = [-uT -s1 uT s2] // linear - // [0 -1 0 1] // angular - // [-vT -a1 vT a2] // limit - // - // u = perp - // v = axis - // s1 = cross(d + r1, u), s2 = cross(r2, u) - // a1 = cross(d + r1, v), a2 = cross(r2, v) - // M * (v2 - v1) = JT * df - // J * v2 = bias - // - // v2 = v1 + invM * JT * df - // J * (v1 + invM * JT * df) = bias - // K * df = bias - J * v1 = -Cdot - // K = J * invM * JT - // Cdot = J * v1 - bias - // - // Now solve for f2. - // df = f2 - f1 - // K * (f2 - f1) = -Cdot - // f2 = invK * (-Cdot) + f1 - // - // Clamp accumulated limit impulse. - // lower: f2(3) = max(f2(3), 0) - // upper: f2(3) = min(f2(3), 0) - // - // Solve for correct f2(1:2) - // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:3) * f1 - // = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:2) * f1(1:2) + K(1:2,3) * f1(3) - // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3)) + - // K(1:2,1:2) * f1(1:2) - // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) + - // f1(1:2) - // - // Now compute impulse to be applied: - // df = f2 - f1 - } - /** @internal */ - PrismaticJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - lowerTranslation: this.m_lowerTranslation, - upperTranslation: this.m_upperTranslation, - maxMotorForce: this.m_maxMotorForce, - motorSpeed: this.m_motorSpeed, - enableLimit: this.m_enableLimit, - enableMotor: this.m_enableMotor, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - localAxisA: this.m_localXAxisA, - referenceAngle: this.m_referenceAngle, - }; - }; - /** @internal */ - PrismaticJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - data.localAxisA = Vec2.clone(data.localAxisA); - var joint = new PrismaticJoint(data); - return joint; - }; - /** @hidden */ - PrismaticJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (def.localAxisA) { - this.m_localXAxisA.setVec2(def.localAxisA); - this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1.0, def.localAxisA)); - } - if (Number.isFinite(def.referenceAngle)) { - this.m_referenceAngle = def.referenceAngle; - } - if (typeof def.enableLimit !== "undefined") { - this.m_enableLimit = !!def.enableLimit; - } - if (Number.isFinite(def.lowerTranslation)) { - this.m_lowerTranslation = def.lowerTranslation; - } - if (Number.isFinite(def.upperTranslation)) { - this.m_upperTranslation = def.upperTranslation; - } - if (typeof def.enableMotor !== "undefined") { - this.m_enableMotor = !!def.enableMotor; - } - if (Number.isFinite(def.maxMotorForce)) { - this.m_maxMotorForce = def.maxMotorForce; - } - if (Number.isFinite(def.motorSpeed)) { - this.m_motorSpeed = def.motorSpeed; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - PrismaticJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - PrismaticJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * The local joint axis relative to bodyA. - */ - PrismaticJoint.prototype.getLocalAxisA = function () { - return this.m_localXAxisA; - }; - /** - * Get the reference angle. - */ - PrismaticJoint.prototype.getReferenceAngle = function () { - return this.m_referenceAngle; - }; - /** - * Get the current joint translation, usually in meters. - */ - PrismaticJoint.prototype.getJointTranslation = function () { - var pA = this.m_bodyA.getWorldPoint(this.m_localAnchorA); - var pB = this.m_bodyB.getWorldPoint(this.m_localAnchorB); - var d = Vec2.sub(pB, pA); - var axis = this.m_bodyA.getWorldVector(this.m_localXAxisA); - var translation = Vec2.dot(d, axis); - return translation; - }; - /** - * Get the current joint translation speed, usually in meters per second. - */ - PrismaticJoint.prototype.getJointSpeed = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - var rA = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter)); - var rB = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter)); - var p1 = Vec2.add(bA.m_sweep.c, rA); - var p2 = Vec2.add(bB.m_sweep.c, rB); - var d = Vec2.sub(p2, p1); - var axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA); - var vA = bA.m_linearVelocity; - var vB = bB.m_linearVelocity; - var wA = bA.m_angularVelocity; - var wB = bB.m_angularVelocity; - var speed = Vec2.dot(d, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB, wB, rB), Vec2.addCrossNumVec2(vA, wA, rA))); - return speed; - }; - /** - * Is the joint limit enabled? - */ - PrismaticJoint.prototype.isLimitEnabled = function () { - return this.m_enableLimit; - }; - /** - * Enable/disable the joint limit. - */ - PrismaticJoint.prototype.enableLimit = function (flag) { - if (flag != this.m_enableLimit) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableLimit = flag; - this.m_impulse.z = 0.0; - } - }; - /** - * Get the lower joint limit, usually in meters. - */ - PrismaticJoint.prototype.getLowerLimit = function () { - return this.m_lowerTranslation; - }; - /** - * Get the upper joint limit, usually in meters. - */ - PrismaticJoint.prototype.getUpperLimit = function () { - return this.m_upperTranslation; - }; - /** - * Set the joint limits, usually in meters. - */ - PrismaticJoint.prototype.setLimits = function (lower, upper) { - if (lower != this.m_lowerTranslation || upper != this.m_upperTranslation) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_lowerTranslation = lower; - this.m_upperTranslation = upper; - this.m_impulse.z = 0.0; - } - }; - /** - * Is the joint motor enabled? - */ - PrismaticJoint.prototype.isMotorEnabled = function () { - return this.m_enableMotor; - }; - /** - * Enable/disable the joint motor. - */ - PrismaticJoint.prototype.enableMotor = function (flag) { - if (flag == this.m_enableMotor) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableMotor = flag; - }; - /** - * Set the motor speed, usually in meters per second. - */ - PrismaticJoint.prototype.setMotorSpeed = function (speed) { - if (speed == this.m_motorSpeed) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_motorSpeed = speed; - }; - /** - * Set the maximum motor force, usually in N. - */ - PrismaticJoint.prototype.setMaxMotorForce = function (force) { - if (force == this.m_maxMotorForce) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_maxMotorForce = force; - }; - PrismaticJoint.prototype.getMaxMotorForce = function () { - return this.m_maxMotorForce; - }; - /** - * Get the motor speed, usually in meters per second. - */ - PrismaticJoint.prototype.getMotorSpeed = function () { - return this.m_motorSpeed; - }; - /** - * Get the current motor force given the inverse time step, usually in N. - */ - PrismaticJoint.prototype.getMotorForce = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - PrismaticJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - PrismaticJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - PrismaticJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - PrismaticJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_impulse.y; - }; - PrismaticJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective masses. - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.zero(); - d.addCombine(1, cB, 1, rB); - d.subCombine(1, cA, 1, rA); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Compute motor Jacobian and effective mass. - { - this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA); - this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_axis); - this.m_a2 = Vec2.crossVec2Vec2(rB, this.m_axis); - this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 - * this.m_a2; - if (this.m_motorMass > 0.0) { - this.m_motorMass = 1.0 / this.m_motorMass; - } - } - // Prismatic constraint. - { - this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA); - this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_perp); - this.m_s2 = Vec2.crossVec2Vec2(rB, this.m_perp); - Vec2.crossVec2Vec2(rA, this.m_perp); - var k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2; - var k12 = iA * this.m_s1 + iB * this.m_s2; - var k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2; - var k22 = iA + iB; - if (k22 == 0.0) { - // For bodies with fixed rotation. - k22 = 1.0; - } - var k23 = iA * this.m_a1 + iB * this.m_a2; - var k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2; - this.m_K.ex.set(k11, k12, k13); - this.m_K.ey.set(k12, k22, k23); - this.m_K.ez.set(k13, k23, k33); - } - // Compute motor and limit terms. - if (this.m_enableLimit) { - var jointTranslation = Vec2.dot(this.m_axis, d); - if (math_abs$4(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * SettingsInternal.linearSlop) { - this.m_limitState = LimitState$1.equalLimits; - } - else if (jointTranslation <= this.m_lowerTranslation) { - if (this.m_limitState != LimitState$1.atLowerLimit) { - this.m_limitState = LimitState$1.atLowerLimit; - this.m_impulse.z = 0.0; - } - } - else if (jointTranslation >= this.m_upperTranslation) { - if (this.m_limitState != LimitState$1.atUpperLimit) { - this.m_limitState = LimitState$1.atUpperLimit; - this.m_impulse.z = 0.0; - } - } - else { - this.m_limitState = LimitState$1.inactiveLimit; - this.m_impulse.z = 0.0; - } - } - else { - this.m_limitState = LimitState$1.inactiveLimit; - this.m_impulse.z = 0.0; - } - if (this.m_enableMotor == false) { - this.m_motorImpulse = 0.0; - } - if (step.warmStarting) { - // Account for variable time step. - this.m_impulse.mul(step.dtRatio); - this.m_motorImpulse *= step.dtRatio; - var P = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse - + this.m_impulse.z, this.m_axis); - var LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y - + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1; - var LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y - + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - else { - this.m_impulse.setZero(); - this.m_motorImpulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - PrismaticJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Solve linear motor constraint. - if (this.m_enableMotor && this.m_limitState != LimitState$1.equalLimits) { - var Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB, vA)) + this.m_a2 * wB - - this.m_a1 * wA; - var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot); - var oldImpulse = this.m_motorImpulse; - var maxImpulse = step.dt * this.m_maxMotorForce; - this.m_motorImpulse = clamp$1(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_motorImpulse - oldImpulse; - var P = Vec2.mulNumVec2(impulse, this.m_axis); - var LA = impulse * this.m_a1; - var LB = impulse * this.m_a2; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - var Cdot1 = Vec2.zero(); - Cdot1.x += Vec2.dot(this.m_perp, vB) + this.m_s2 * wB; - Cdot1.x -= Vec2.dot(this.m_perp, vA) + this.m_s1 * wA; - Cdot1.y = wB - wA; - if (this.m_enableLimit && this.m_limitState != LimitState$1.inactiveLimit) { - // Solve prismatic and limit constraint in block form. - var Cdot2 = 0; - Cdot2 += Vec2.dot(this.m_axis, vB) + this.m_a2 * wB; - Cdot2 -= Vec2.dot(this.m_axis, vA) + this.m_a1 * wA; - var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); - var f1 = Vec3.clone(this.m_impulse); - var df = this.m_K.solve33(Vec3.neg(Cdot)); - this.m_impulse.add(df); - if (this.m_limitState == LimitState$1.atLowerLimit) { - this.m_impulse.z = math_max$1(this.m_impulse.z, 0.0); - } - else if (this.m_limitState == LimitState$1.atUpperLimit) { - this.m_impulse.z = math_min$3(this.m_impulse.z, 0.0); - } - // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) + - // f1(1:2) - var b = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y)); - var f2r = Vec2.add(this.m_K.solve22(b), Vec2.neo(f1.x, f1.y)); - this.m_impulse.x = f2r.x; - this.m_impulse.y = f2r.y; - df = Vec3.sub(this.m_impulse, f1); - var P = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis); - var LA = df.x * this.m_s1 + df.y + df.z * this.m_a1; - var LB = df.x * this.m_s2 + df.y + df.z * this.m_a2; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - else { - // Limit is inactive, just solve the prismatic constraint in block form. - var df = this.m_K.solve22(Vec2.neg(Cdot1)); - this.m_impulse.x += df.x; - this.m_impulse.y += df.y; - var P = Vec2.mulNumVec2(df.x, this.m_perp); - var LA = df.x * this.m_s1 + df.y; - var LB = df.x * this.m_s2 + df.y; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - PrismaticJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Compute fresh Jacobians - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA)); - var axis = Rot.mulVec2(qA, this.m_localXAxisA); - var a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), axis); - var a2 = Vec2.crossVec2Vec2(rB, axis); - var perp = Rot.mulVec2(qA, this.m_localYAxisA); - var s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), perp); - var s2 = Vec2.crossVec2Vec2(rB, perp); - var impulse = new Vec3(); - var C1 = Vec2.zero(); - C1.x = Vec2.dot(perp, d); - C1.y = aB - aA - this.m_referenceAngle; - var linearError = math_abs$4(C1.x); - var angularError = math_abs$4(C1.y); - var linearSlop = SettingsInternal.linearSlop; - var maxLinearCorrection = SettingsInternal.maxLinearCorrection; - var active = false; // bool - var C2 = 0.0; - if (this.m_enableLimit) { - var translation = Vec2.dot(axis, d); - if (math_abs$4(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * linearSlop) { - // Prevent large angular corrections - C2 = clamp$1(translation, -maxLinearCorrection, maxLinearCorrection); - linearError = math_max$1(linearError, math_abs$4(translation)); - active = true; - } - else if (translation <= this.m_lowerTranslation) { - // Prevent large linear corrections and allow some slop. - C2 = clamp$1(translation - this.m_lowerTranslation + linearSlop, -maxLinearCorrection, 0.0); - linearError = Math - .max(linearError, this.m_lowerTranslation - translation); - active = true; - } - else if (translation >= this.m_upperTranslation) { - // Prevent large linear corrections and allow some slop. - C2 = clamp$1(translation - this.m_upperTranslation - linearSlop, 0.0, maxLinearCorrection); - linearError = Math - .max(linearError, translation - this.m_upperTranslation); - active = true; - } - } - if (active) { - var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; - var k12 = iA * s1 + iB * s2; - var k13 = iA * s1 * a1 + iB * s2 * a2; - var k22 = iA + iB; - if (k22 == 0.0) { - // For fixed rotation - k22 = 1.0; - } - var k23 = iA * a1 + iB * a2; - var k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2; - var K = new Mat33(); - K.ex.set(k11, k12, k13); - K.ey.set(k12, k22, k23); - K.ez.set(k13, k23, k33); - var C = new Vec3(); - C.x = C1.x; - C.y = C1.y; - C.z = C2; - impulse = K.solve33(Vec3.neg(C)); - } - else { - var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; - var k12 = iA * s1 + iB * s2; - var k22 = iA + iB; - if (k22 == 0.0) { - k22 = 1.0; - } - var K = new Mat22(); - K.ex.setNum(k11, k12); - K.ey.setNum(k12, k22); - var impulse1 = K.solve(Vec2.neg(C1)); - impulse.x = impulse1.x; - impulse.y = impulse1.y; - impulse.z = 0.0; - } - var P = Vec2.combine(impulse.x, perp, impulse.z, axis); - var LA = impulse.x * s1 + impulse.y + impulse.z * a1; - var LB = impulse.x * s2 + impulse.y + impulse.z * a2; - cA.subMul(mA, P); - aA -= iA * LA; - cB.addMul(mB, P); - aB += iB * LB; - this.m_bodyA.c_position.c = cA; - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c = cB; - this.m_bodyB.c_position.a = aB; - return linearError <= SettingsInternal.linearSlop - && angularError <= SettingsInternal.angularSlop; - }; - PrismaticJoint.TYPE = "prismatic-joint"; - return PrismaticJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var DEFAULTS$6 = { - ratio: 1.0 - }; - /** - * A gear joint is used to connect two joints together. Either joint can be a - * revolute or prismatic joint. You specify a gear ratio to bind the motions - * together: coordinate1 + ratio * coordinate2 = constant - * - * The ratio can be negative or positive. If one joint is a revolute joint and - * the other joint is a prismatic joint, then the ratio will have units of - * length or units of 1/length. Warning: You have to manually destroy the gear - * joint if joint1 or joint2 is destroyed. - * - * This definition requires two existing revolute or prismatic joints (any - * combination will work). - */ - var GearJoint = /** @class */ (function (_super) { - __extends$a(GearJoint, _super); - function GearJoint(def, bodyA, bodyB, joint1, joint2, ratio) { - var _this = this; - // @ts-ignore - if (!(_this instanceof GearJoint)) { - return new GearJoint(def, bodyA, bodyB, joint1, joint2, ratio); - } - def = options(def, DEFAULTS$6); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = GearJoint.TYPE; - _this.m_joint1 = joint1 ? joint1 : def.joint1; - _this.m_joint2 = joint2 ? joint2 : def.joint2; - _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; - _this.m_type1 = _this.m_joint1.getType(); - _this.m_type2 = _this.m_joint2.getType(); - // joint1 connects body A to body C - // joint2 connects body B to body D - var coordinateA; - var coordinateB; - // TODO_ERIN there might be some problem with the joint edges in Joint. - _this.m_bodyC = _this.m_joint1.getBodyA(); - _this.m_bodyA = _this.m_joint1.getBodyB(); - // Get geometry of joint1 - var xfA = _this.m_bodyA.m_xf; - var aA = _this.m_bodyA.m_sweep.a; - var xfC = _this.m_bodyC.m_xf; - var aC = _this.m_bodyC.m_sweep.a; - if (_this.m_type1 === RevoluteJoint.TYPE) { - var revolute = _this.m_joint1; - _this.m_localAnchorC = revolute.m_localAnchorA; - _this.m_localAnchorA = revolute.m_localAnchorB; - _this.m_referenceAngleA = revolute.m_referenceAngle; - _this.m_localAxisC = Vec2.zero(); - coordinateA = aA - aC - _this.m_referenceAngleA; - } - else { - var prismatic = _this.m_joint1; - _this.m_localAnchorC = prismatic.m_localAnchorA; - _this.m_localAnchorA = prismatic.m_localAnchorB; - _this.m_referenceAngleA = prismatic.m_referenceAngle; - _this.m_localAxisC = prismatic.m_localXAxisA; - var pC = _this.m_localAnchorC; - var pA = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA.q, _this.m_localAnchorA), Vec2.sub(xfA.p, xfC.p))); - coordinateA = Vec2.dot(pA, _this.m_localAxisC) - Vec2.dot(pC, _this.m_localAxisC); - } - _this.m_bodyD = _this.m_joint2.getBodyA(); - _this.m_bodyB = _this.m_joint2.getBodyB(); - // Get geometry of joint2 - var xfB = _this.m_bodyB.m_xf; - var aB = _this.m_bodyB.m_sweep.a; - var xfD = _this.m_bodyD.m_xf; - var aD = _this.m_bodyD.m_sweep.a; - if (_this.m_type2 === RevoluteJoint.TYPE) { - var revolute = _this.m_joint2; - _this.m_localAnchorD = revolute.m_localAnchorA; - _this.m_localAnchorB = revolute.m_localAnchorB; - _this.m_referenceAngleB = revolute.m_referenceAngle; - _this.m_localAxisD = Vec2.zero(); - coordinateB = aB - aD - _this.m_referenceAngleB; - } - else { - var prismatic = _this.m_joint2; - _this.m_localAnchorD = prismatic.m_localAnchorA; - _this.m_localAnchorB = prismatic.m_localAnchorB; - _this.m_referenceAngleB = prismatic.m_referenceAngle; - _this.m_localAxisD = prismatic.m_localXAxisA; - var pD = _this.m_localAnchorD; - var pB = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB.q, _this.m_localAnchorB), Vec2.sub(xfB.p, xfD.p))); - coordinateB = Vec2.dot(pB, _this.m_localAxisD) - Vec2.dot(pD, _this.m_localAxisD); - } - _this.m_constant = coordinateA + _this.m_ratio * coordinateB; - _this.m_impulse = 0.0; - return _this; - // Gear Joint: - // C0 = (coordinate1 + ratio * coordinate2)_initial - // C = (coordinate1 + ratio * coordinate2) - C0 = 0 - // J = [J1 ratio * J2] - // K = J * invM * JT - // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T - // - // Revolute: - // coordinate = rotation - // Cdot = angularVelocity - // J = [0 0 1] - // K = J * invM * JT = invI - // - // Prismatic: - // coordinate = dot(p - pg, ug) - // Cdot = dot(v + cross(w, r), ug) - // J = [ug cross(r, ug)] - // K = J * invM * JT = invMass + invI * cross(r, ug)^2 - } - /** @internal */ - GearJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - joint1: this.m_joint1, - joint2: this.m_joint2, - ratio: this.m_ratio, - // _constant: this.m_constant, - }; - }; - /** @internal */ - GearJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - data.joint1 = restore(Joint, data.joint1, world); - data.joint2 = restore(Joint, data.joint2, world); - var joint = new GearJoint(data); - // if (data._constant) joint.m_constant = data._constant; - return joint; - }; - /** @hidden */ - GearJoint.prototype._reset = function (def) { - // todo: implement other fields - if (Number.isFinite(def.ratio)) { - this.m_ratio = def.ratio; - } - }; - /** - * Get the first joint. - */ - GearJoint.prototype.getJoint1 = function () { - return this.m_joint1; - }; - /** - * Get the second joint. - */ - GearJoint.prototype.getJoint2 = function () { - return this.m_joint2; - }; - /** - * Set the gear ratio. - */ - GearJoint.prototype.setRatio = function (ratio) { - this.m_ratio = ratio; - }; - /** - * Get the gear ratio. - */ - GearJoint.prototype.getRatio = function () { - return this.m_ratio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - GearJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - GearJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - GearJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - GearJoint.prototype.getReactionTorque = function (inv_dt) { - var L = this.m_impulse * this.m_JwA; - return inv_dt * L; - }; - GearJoint.prototype.initVelocityConstraints = function (step) { - this.m_lcA = this.m_bodyA.m_sweep.localCenter; - this.m_lcB = this.m_bodyB.m_sweep.localCenter; - this.m_lcC = this.m_bodyC.m_sweep.localCenter; - this.m_lcD = this.m_bodyD.m_sweep.localCenter; - this.m_mA = this.m_bodyA.m_invMass; - this.m_mB = this.m_bodyB.m_invMass; - this.m_mC = this.m_bodyC.m_invMass; - this.m_mD = this.m_bodyD.m_invMass; - this.m_iA = this.m_bodyA.m_invI; - this.m_iB = this.m_bodyB.m_invI; - this.m_iC = this.m_bodyC.m_invI; - this.m_iD = this.m_bodyD.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var aC = this.m_bodyC.c_position.a; - var vC = this.m_bodyC.c_velocity.v; - var wC = this.m_bodyC.c_velocity.w; - var aD = this.m_bodyD.c_position.a; - var vD = this.m_bodyD.c_velocity.v; - var wD = this.m_bodyD.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var qC = Rot.neo(aC); - var qD = Rot.neo(aD); - this.m_mass = 0.0; - if (this.m_type1 == RevoluteJoint.TYPE) { - this.m_JvAC = Vec2.zero(); - this.m_JwA = 1.0; - this.m_JwC = 1.0; - this.m_mass += this.m_iA + this.m_iC; - } - else { - var u = Rot.mulVec2(qC, this.m_localAxisC); - var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); - this.m_JvAC = u; - this.m_JwC = Vec2.crossVec2Vec2(rC, u); - this.m_JwA = Vec2.crossVec2Vec2(rA, u); - 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; - } - if (this.m_type2 == RevoluteJoint.TYPE) { - this.m_JvBD = Vec2.zero(); - this.m_JwB = this.m_ratio; - this.m_JwD = this.m_ratio; - this.m_mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); - } - else { - var u = Rot.mulVec2(qD, this.m_localAxisD); - var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); - this.m_JvBD = Vec2.mulNumVec2(this.m_ratio, u); - this.m_JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); - this.m_JwB = this.m_ratio * Vec2.crossVec2Vec2(rB, u); - 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; - } - // Compute effective mass. - this.m_mass = this.m_mass > 0.0 ? 1.0 / this.m_mass : 0.0; - if (step.warmStarting) { - vA.addMul(this.m_mA * this.m_impulse, this.m_JvAC); - wA += this.m_iA * this.m_impulse * this.m_JwA; - vB.addMul(this.m_mB * this.m_impulse, this.m_JvBD); - wB += this.m_iB * this.m_impulse * this.m_JwB; - vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC); - wC -= this.m_iC * this.m_impulse * this.m_JwC; - vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD); - wD -= this.m_iD * this.m_impulse * this.m_JwD; - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - this.m_bodyC.c_velocity.v.setVec2(vC); - this.m_bodyC.c_velocity.w = wC; - this.m_bodyD.c_velocity.v.setVec2(vD); - this.m_bodyD.c_velocity.w = wD; - }; - GearJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var vC = this.m_bodyC.c_velocity.v; - var wC = this.m_bodyC.c_velocity.w; - var vD = this.m_bodyD.c_velocity.v; - var wD = this.m_bodyD.c_velocity.w; - var Cdot = Vec2.dot(this.m_JvAC, vA) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB) - Vec2.dot(this.m_JvBD, vD); - Cdot += (this.m_JwA * wA - this.m_JwC * wC) + (this.m_JwB * wB - this.m_JwD * wD); - var impulse = -this.m_mass * Cdot; - this.m_impulse += impulse; - vA.addMul(this.m_mA * impulse, this.m_JvAC); - wA += this.m_iA * impulse * this.m_JwA; - vB.addMul(this.m_mB * impulse, this.m_JvBD); - wB += this.m_iB * impulse * this.m_JwB; - vC.subMul(this.m_mC * impulse, this.m_JvAC); - wC -= this.m_iC * impulse * this.m_JwC; - vD.subMul(this.m_mD * impulse, this.m_JvBD); - wD -= this.m_iD * impulse * this.m_JwD; - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - this.m_bodyC.c_velocity.v.setVec2(vC); - this.m_bodyC.c_velocity.w = wC; - this.m_bodyD.c_velocity.v.setVec2(vD); - this.m_bodyD.c_velocity.w = wD; - }; - /** - * This returns true if the position errors are within tolerance. - */ - GearJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var cC = this.m_bodyC.c_position.c; - var aC = this.m_bodyC.c_position.a; - var cD = this.m_bodyD.c_position.c; - var aD = this.m_bodyD.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var qC = Rot.neo(aC); - var qD = Rot.neo(aD); - var linearError = 0.0; - var coordinateA; - var coordinateB; - var JvAC; - var JvBD; - var JwA; - var JwB; - var JwC; - var JwD; - var mass = 0.0; - if (this.m_type1 == RevoluteJoint.TYPE) { - JvAC = Vec2.zero(); - JwA = 1.0; - JwC = 1.0; - mass += this.m_iA + this.m_iC; - coordinateA = aA - aC - this.m_referenceAngleA; - } - else { - var u = Rot.mulVec2(qC, this.m_localAxisC); - var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); - JvAC = u; - JwC = Vec2.crossVec2Vec2(rC, u); - JwA = Vec2.crossVec2Vec2(rA, u); - mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA; - var pC = Vec2.sub(this.m_localAnchorC, this.m_lcC); - var pA = Rot.mulTVec2(qC, Vec2.add(rA, Vec2.sub(cA, cC))); - coordinateA = Vec2.dot(Vec2.sub(pA, pC), this.m_localAxisC); - } - if (this.m_type2 == RevoluteJoint.TYPE) { - JvBD = Vec2.zero(); - JwB = this.m_ratio; - JwD = this.m_ratio; - mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); - coordinateB = aB - aD - this.m_referenceAngleB; - } - else { - var u = Rot.mulVec2(qD, this.m_localAxisD); - var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); - JvBD = Vec2.mulNumVec2(this.m_ratio, u); - JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); - JwB = this.m_ratio * Vec2.crossVec2Vec2(rB, u); - mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * JwD * JwD + this.m_iB * JwB * JwB; - var pD = Vec2.sub(this.m_localAnchorD, this.m_lcD); - var pB = Rot.mulTVec2(qD, Vec2.add(rB, Vec2.sub(cB, cD))); - coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD); - } - var C = (coordinateA + this.m_ratio * coordinateB) - this.m_constant; - var impulse = 0.0; - if (mass > 0.0) { - impulse = -C / mass; - } - cA.addMul(this.m_mA * impulse, JvAC); - aA += this.m_iA * impulse * JwA; - cB.addMul(this.m_mB * impulse, JvBD); - aB += this.m_iB * impulse * JwB; - cC.subMul(this.m_mC * impulse, JvAC); - aC -= this.m_iC * impulse * JwC; - cD.subMul(this.m_mD * impulse, JvBD); - aD -= this.m_iD * impulse * JwD; - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - this.m_bodyC.c_position.c.setVec2(cC); - this.m_bodyC.c_position.a = aC; - this.m_bodyD.c_position.c.setVec2(cD); - this.m_bodyD.c_position.a = aD; - // TODO_ERIN not implemented - return linearError < SettingsInternal.linearSlop; - }; - GearJoint.TYPE = "gear-joint"; - return GearJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var DEFAULTS$5 = { - maxForce: 1.0, - maxTorque: 1.0, - correctionFactor: 0.3 - }; - /** - * A motor joint is used to control the relative motion between two bodies. A - * typical usage is to control the movement of a dynamic body with respect to - * the ground. - */ - var MotorJoint = /** @class */ (function (_super) { - __extends$a(MotorJoint, _super); - function MotorJoint(def, bodyA, bodyB) { - var _this = this; - // @ts-ignore - if (!(_this instanceof MotorJoint)) { - return new MotorJoint(def, bodyA, bodyB); - } - def = options(def, DEFAULTS$5); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = MotorJoint.TYPE; - _this.m_linearOffset = Vec2.isValid(def.linearOffset) ? Vec2.clone(def.linearOffset) : bodyA.getLocalPoint(bodyB.getPosition()); - _this.m_angularOffset = Number.isFinite(def.angularOffset) ? def.angularOffset : bodyB.getAngle() - bodyA.getAngle(); - _this.m_linearImpulse = Vec2.zero(); - _this.m_angularImpulse = 0.0; - _this.m_maxForce = def.maxForce; - _this.m_maxTorque = def.maxTorque; - _this.m_correctionFactor = def.correctionFactor; - return _this; - // Point-to-point constraint - // Cdot = v2 - v1 - // = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // - // r1 = offset - c1 - // r2 = -c2 - // Angle constraint - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 - } - /** @internal */ - MotorJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - maxForce: this.m_maxForce, - maxTorque: this.m_maxTorque, - correctionFactor: this.m_correctionFactor, - linearOffset: this.m_linearOffset, - angularOffset: this.m_angularOffset, - }; - }; - /** @internal */ - MotorJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new MotorJoint(data); - return joint; - }; - /** @hidden */ - MotorJoint.prototype._reset = function (def) { - if (Number.isFinite(def.angularOffset)) { - this.m_angularOffset = def.angularOffset; - } - if (Number.isFinite(def.maxForce)) { - this.m_maxForce = def.maxForce; - } - if (Number.isFinite(def.maxTorque)) { - this.m_maxTorque = def.maxTorque; - } - if (Number.isFinite(def.correctionFactor)) { - this.m_correctionFactor = def.correctionFactor; - } - if (Vec2.isValid(def.linearOffset)) { - this.m_linearOffset.set(def.linearOffset); - } - }; - /** - * Set the maximum friction force in N. - */ - MotorJoint.prototype.setMaxForce = function (force) { - this.m_maxForce = force; - }; - /** - * Get the maximum friction force in N. - */ - MotorJoint.prototype.getMaxForce = function () { - return this.m_maxForce; - }; - /** - * Set the maximum friction torque in N*m. - */ - MotorJoint.prototype.setMaxTorque = function (torque) { - this.m_maxTorque = torque; - }; - /** - * Get the maximum friction torque in N*m. - */ - MotorJoint.prototype.getMaxTorque = function () { - return this.m_maxTorque; - }; - /** - * Set the position correction factor in the range [0,1]. - */ - MotorJoint.prototype.setCorrectionFactor = function (factor) { - this.m_correctionFactor = factor; - }; - /** - * Get the position correction factor in the range [0,1]. - */ - MotorJoint.prototype.getCorrectionFactor = function () { - return this.m_correctionFactor; - }; - /** - * Set/get the target linear offset, in frame A, in meters. - */ - MotorJoint.prototype.setLinearOffset = function (linearOffset) { - if (linearOffset.x != this.m_linearOffset.x || linearOffset.y != this.m_linearOffset.y) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_linearOffset.set(linearOffset); - } - }; - MotorJoint.prototype.getLinearOffset = function () { - return this.m_linearOffset; - }; - /** - * Set/get the target angular offset, in radians. - */ - MotorJoint.prototype.setAngularOffset = function (angularOffset) { - if (angularOffset != this.m_angularOffset) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_angularOffset = angularOffset; - } - }; - MotorJoint.prototype.getAngularOffset = function () { - return this.m_angularOffset; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - MotorJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getPosition(); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - MotorJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getPosition(); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - MotorJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - MotorJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_angularImpulse; - }; - MotorJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective mass matrix. - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_linearOffset, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.neg(this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Upper 2 by 2 of K for point to point - var K = new Mat22(); - K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y; - K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; - K.ey.x = K.ex.y; - K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x; - this.m_linearMass = K.getInverse(); - this.m_angularMass = iA + iB; - if (this.m_angularMass > 0.0) { - this.m_angularMass = 1.0 / this.m_angularMass; - } - this.m_linearError = Vec2.zero(); - this.m_linearError.addCombine(1, cB, 1, this.m_rB); - this.m_linearError.subCombine(1, cA, 1, this.m_rA); - this.m_angularError = aB - aA - this.m_angularOffset; - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_linearImpulse.mul(step.dtRatio); - this.m_angularImpulse *= step.dtRatio; - var P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse); - } - else { - this.m_linearImpulse.setZero(); - this.m_angularImpulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - MotorJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var h = step.dt; - var inv_h = step.inv_dt; - // Solve angular friction - { - var Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError; - var impulse = -this.m_angularMass * Cdot; - var oldImpulse = this.m_angularImpulse; - var maxImpulse = h * this.m_maxTorque; - this.m_angularImpulse = clamp$1(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_angularImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve linear friction - { - var Cdot = Vec2.zero(); - Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError); - var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); - var oldImpulse = Vec2.clone(this.m_linearImpulse); - this.m_linearImpulse.add(impulse); - var maxImpulse = h * this.m_maxForce; - this.m_linearImpulse.clamp(maxImpulse); - impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); - vA.subMul(mA, impulse); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); - vB.addMul(mB, impulse); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - MotorJoint.prototype.solvePositionConstraints = function (step) { - return true; - }; - MotorJoint.TYPE = "motor-joint"; - return MotorJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_PI$3 = Math.PI; - /** @internal */ var DEFAULTS$4 = { - maxForce: 0.0, - frequencyHz: 5.0, - dampingRatio: 0.7 - }; - /** - * A mouse joint is used to make a point on a body track a specified world - * point. This a soft constraint with a maximum force. This allows the - * constraint to stretch and without applying huge forces. - * - * You need to call setTarget(target) every time that mouse is - * moved, to track the new location of the mouse. - * - * NOTE: this joint is not documented in the manual because it was developed to - * be used in the testbed. If you want to learn how to use the mouse joint, look - * at the testbed. - */ - var MouseJoint = /** @class */ (function (_super) { - __extends$a(MouseJoint, _super); - function MouseJoint(def, bodyA, bodyB, target) { - var _this = this; - // @ts-ignore - if (!(_this instanceof MouseJoint)) { - return new MouseJoint(def, bodyA, bodyB, target); - } - def = options(def, DEFAULTS$4); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = MouseJoint.TYPE; - if (Vec2.isValid(target)) { - _this.m_targetA = Vec2.clone(target); - } - else if (Vec2.isValid(def.target)) { - _this.m_targetA = Vec2.clone(def.target); - } - else { - _this.m_targetA = Vec2.zero(); - } - _this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), _this.m_targetA); - _this.m_maxForce = def.maxForce; - _this.m_impulse = Vec2.zero(); - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_beta = 0.0; - _this.m_gamma = 0.0; - // Solver temp - _this.m_rB = Vec2.zero(); - _this.m_localCenterB = Vec2.zero(); - _this.m_invMassB = 0.0; - _this.m_invIB = 0.0; - _this.m_mass = new Mat22(); - _this.m_C = Vec2.zero(); - return _this; - // p = attached point, m = mouse point - // C = p - m - // Cdot = v - // = v + cross(w, r) - // J = [I r_skew] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - } - /** @internal */ - MouseJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - target: this.m_targetA, - maxForce: this.m_maxForce, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - _localAnchorB: this.m_localAnchorB, - }; - }; - /** @internal */ - MouseJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - data.target = Vec2.clone(data.target); - var joint = new MouseJoint(data); - if (data._localAnchorB) { - joint.m_localAnchorB = data._localAnchorB; - } - return joint; - }; - /** @hidden */ - MouseJoint.prototype._reset = function (def) { - if (Number.isFinite(def.maxForce)) { - this.m_maxForce = def.maxForce; - } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; - } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; - } - }; - /** - * Use this to update the target point. - */ - MouseJoint.prototype.setTarget = function (target) { - if (Vec2.areEqual(target, this.m_targetA)) - return; - this.m_bodyB.setAwake(true); - this.m_targetA.set(target); - }; - MouseJoint.prototype.getTarget = function () { - return this.m_targetA; - }; - /** - * Set the maximum force in Newtons. - */ - MouseJoint.prototype.setMaxForce = function (force) { - this.m_maxForce = force; - }; - /** - * Get the maximum force in Newtons. - */ - MouseJoint.prototype.getMaxForce = function () { - return this.m_maxForce; - }; - /** - * Set the frequency in Hertz. - */ - MouseJoint.prototype.setFrequency = function (hz) { - this.m_frequencyHz = hz; - }; - /** - * Get the frequency in Hertz. - */ - MouseJoint.prototype.getFrequency = function () { - return this.m_frequencyHz; - }; - /** - * Set the damping ratio (dimensionless). - */ - MouseJoint.prototype.setDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - /** - * Get the damping ratio (dimensionless). - */ - MouseJoint.prototype.getDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - MouseJoint.prototype.getAnchorA = function () { - return Vec2.clone(this.m_targetA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - MouseJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - MouseJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(inv_dt, this.m_impulse); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - MouseJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * 0.0; - }; - /** - * Shift the origin for any points stored in world coordinates. - */ - MouseJoint.prototype.shiftOrigin = function (newOrigin) { - this.m_targetA.sub(newOrigin); - }; - MouseJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIB = this.m_bodyB.m_invI; - var position = this.m_bodyB.c_position; - var velocity = this.m_bodyB.c_velocity; - var cB = position.c; - var aB = position.a; - var vB = velocity.v; - var wB = velocity.w; - var qB = Rot.neo(aB); - var mass = this.m_bodyB.getMass(); - // Frequency - var omega = 2.0 * math_PI$3 * this.m_frequencyHz; - // Damping coefficient - var d = 2.0 * mass * this.m_dampingRatio * omega; - // Spring stiffness - var k = mass * (omega * omega); - // magic formulas - // gamma has units of inverse mass. - // beta has units of inverse time. - var h = step.dt; - this.m_gamma = h * (d + h * k); - if (this.m_gamma != 0.0) { - this.m_gamma = 1.0 / this.m_gamma; - } - this.m_beta = h * k * this.m_gamma; - // Compute the effective mass matrix. - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) * - // invI2 * skew(r2)] - // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y - // -r1.x*r1.y] - // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x] - var K = new Mat22(); - K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y - + this.m_gamma; - K.ex.y = -this.m_invIB * this.m_rB.x * this.m_rB.y; - K.ey.x = K.ex.y; - K.ey.y = this.m_invMassB + this.m_invIB * this.m_rB.x * this.m_rB.x - + this.m_gamma; - this.m_mass = K.getInverse(); - this.m_C.setVec2(cB); - this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA); - this.m_C.mul(this.m_beta); - // Cheat with some damping - wB *= 0.98; - if (step.warmStarting) { - this.m_impulse.mul(step.dtRatio); - vB.addMul(this.m_invMassB, this.m_impulse); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse); - } - else { - this.m_impulse.setZero(); - } - velocity.v.setVec2(vB); - velocity.w = wB; - }; - MouseJoint.prototype.solveVelocityConstraints = function (step) { - var velocity = this.m_bodyB.c_velocity; - var vB = Vec2.clone(velocity.v); - var wB = velocity.w; - // Cdot = v + cross(w, r) - var Cdot = Vec2.crossNumVec2(wB, this.m_rB); - Cdot.add(vB); - Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse); - Cdot.neg(); - var impulse = Mat22.mulVec2(this.m_mass, Cdot); - var oldImpulse = Vec2.clone(this.m_impulse); - this.m_impulse.add(impulse); - var maxImpulse = step.dt * this.m_maxForce; - this.m_impulse.clamp(maxImpulse); - impulse = Vec2.sub(this.m_impulse, oldImpulse); - vB.addMul(this.m_invMassB, impulse); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse); - velocity.v.setVec2(vB); - velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - MouseJoint.prototype.solvePositionConstraints = function (step) { - return true; - }; - MouseJoint.TYPE = "mouse-joint"; - return MouseJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$3 = Math.abs; - /** @internal */ var DEFAULTS$3 = { - collideConnected: true - }; - /** - * The pulley joint is connected to two bodies and two fixed ground points. The - * pulley supports a ratio such that: length1 + ratio * length2 <= constant - * - * Yes, the force transmitted is scaled by the ratio. - * - * Warning: the pulley joint can get a bit squirrelly by itself. They often work - * better when combined with prismatic joints. You should also cover the the - * anchor points with static shapes to prevent one side from going to zero - * length. - */ - var PulleyJoint = /** @class */ (function (_super) { - __extends$a(PulleyJoint, _super); - function PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio) { - var _this = this; - // @ts-ignore - if (!(_this instanceof PulleyJoint)) { - return new PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio); - } - def = options(def, DEFAULTS$3); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = PulleyJoint.TYPE; - _this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1.0, 1.0)); - _this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1.0, 1.0)); - _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1.0, 0.0)); - _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1.0, 0.0)); - _this.m_lengthA = Number.isFinite(def.lengthA) ? def.lengthA : Vec2.distance(anchorA, groundA); - _this.m_lengthB = Number.isFinite(def.lengthB) ? def.lengthB : Vec2.distance(anchorB, groundB); - _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; - _this.m_constant = _this.m_lengthA + _this.m_ratio * _this.m_lengthB; - _this.m_impulse = 0.0; - return _this; - // Pulley: - // length1 = norm(p1 - s1) - // length2 = norm(p2 - s2) - // C0 = (length1 + ratio * length2)_initial - // C = C0 - (length1 + ratio * length2) - // u1 = (p1 - s1) / norm(p1 - s1) - // u2 = (p2 - s2) / norm(p2 - s2) - // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2)) - // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)] - // K = J * invM * JT - // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 * - // cross(r2, u2)^2) - } - /** @internal */ - PulleyJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - groundAnchorA: this.m_groundAnchorA, - groundAnchorB: this.m_groundAnchorB, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - lengthA: this.m_lengthA, - lengthB: this.m_lengthB, - ratio: this.m_ratio, - }; - }; - /** @internal */ - PulleyJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new PulleyJoint(data); - return joint; - }; - /** @hidden */ - PulleyJoint.prototype._reset = function (def) { - if (Vec2.isValid(def.groundAnchorA)) { - this.m_groundAnchorA.set(def.groundAnchorA); - } - if (Vec2.isValid(def.groundAnchorB)) { - this.m_groundAnchorB.set(def.groundAnchorB); - } - if (Vec2.isValid(def.localAnchorA)) { - this.m_localAnchorA.set(def.localAnchorA); - } - else if (Vec2.isValid(def.anchorA)) { - this.m_localAnchorA.set(this.m_bodyA.getLocalPoint(def.anchorA)); - } - if (Vec2.isValid(def.localAnchorB)) { - this.m_localAnchorB.set(def.localAnchorB); - } - else if (Vec2.isValid(def.anchorB)) { - this.m_localAnchorB.set(this.m_bodyB.getLocalPoint(def.anchorB)); - } - if (Number.isFinite(def.lengthA)) { - this.m_lengthA = def.lengthA; - } - if (Number.isFinite(def.lengthB)) { - this.m_lengthB = def.lengthB; - } - if (Number.isFinite(def.ratio)) { - this.m_ratio = def.ratio; - } - }; - /** - * Get the first ground anchor. - */ - PulleyJoint.prototype.getGroundAnchorA = function () { - return this.m_groundAnchorA; - }; - /** - * Get the second ground anchor. - */ - PulleyJoint.prototype.getGroundAnchorB = function () { - return this.m_groundAnchorB; - }; - /** - * Get the current length of the segment attached to bodyA. - */ - PulleyJoint.prototype.getLengthA = function () { - return this.m_lengthA; - }; - /** - * Get the current length of the segment attached to bodyB. - */ - PulleyJoint.prototype.getLengthB = function () { - return this.m_lengthB; - }; - /** - * Get the pulley ratio. - */ - PulleyJoint.prototype.getRatio = function () { - return this.m_ratio; - }; - /** - * Get the current length of the segment attached to bodyA. - */ - PulleyJoint.prototype.getCurrentLengthA = function () { - var p = this.m_bodyA.getWorldPoint(this.m_localAnchorA); - var s = this.m_groundAnchorA; - return Vec2.distance(p, s); - }; - /** - * Get the current length of the segment attached to bodyB. - */ - PulleyJoint.prototype.getCurrentLengthB = function () { - var p = this.m_bodyB.getWorldPoint(this.m_localAnchorB); - var s = this.m_groundAnchorB; - return Vec2.distance(p, s); - }; - /** - * Shift the origin for any points stored in world coordinates. - * - * @param newOrigin - */ - PulleyJoint.prototype.shiftOrigin = function (newOrigin) { - this.m_groundAnchorA.sub(newOrigin); - this.m_groundAnchorB.sub(newOrigin); - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - PulleyJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - PulleyJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - PulleyJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - PulleyJoint.prototype.getReactionTorque = function (inv_dt) { - return 0.0; - }; - PulleyJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // Get the pulley axes. - this.m_uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA); - this.m_uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB); - var lengthA = this.m_uA.length(); - var lengthB = this.m_uB.length(); - if (lengthA > 10.0 * SettingsInternal.linearSlop) { - this.m_uA.mul(1.0 / lengthA); - } - else { - this.m_uA.setZero(); - } - if (lengthB > 10.0 * SettingsInternal.linearSlop) { - this.m_uB.mul(1.0 / lengthB); - } - else { - this.m_uB.setZero(); - } - // Compute effective mass. - var ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA); - var ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB); - var mA = this.m_invMassA + this.m_invIA * ruA * ruA; - var mB = this.m_invMassB + this.m_invIB * ruB * ruB; - this.m_mass = mA + this.m_ratio * this.m_ratio * mB; - if (this.m_mass > 0.0) { - this.m_mass = 1.0 / this.m_mass; - } - if (step.warmStarting) { - // Scale impulses to support variable time steps. - this.m_impulse *= step.dtRatio; - // Warm starting. - var PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA); - var PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB); - vA.addMul(this.m_invMassA, PA); - wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); - vB.addMul(this.m_invMassB, PB); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - PulleyJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA)); - var vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)); - var Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB); - var impulse = -this.m_mass * Cdot; - this.m_impulse += impulse; - var PA = Vec2.mulNumVec2(-impulse, this.m_uA); - var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB); - vA.addMul(this.m_invMassA, PA); - wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); - vB.addMul(this.m_invMassB, PB); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - PulleyJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // Get the pulley axes. - var uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA); - var uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB); - var lengthA = uA.length(); - var lengthB = uB.length(); - if (lengthA > 10.0 * SettingsInternal.linearSlop) { - uA.mul(1.0 / lengthA); - } - else { - uA.setZero(); - } - if (lengthB > 10.0 * SettingsInternal.linearSlop) { - uB.mul(1.0 / lengthB); - } - else { - uB.setZero(); - } - // Compute effective mass. - var ruA = Vec2.crossVec2Vec2(rA, uA); - var ruB = Vec2.crossVec2Vec2(rB, uB); - var mA = this.m_invMassA + this.m_invIA * ruA * ruA; - var mB = this.m_invMassB + this.m_invIB * ruB * ruB; - var mass = mA + this.m_ratio * this.m_ratio * mB; - if (mass > 0.0) { - mass = 1.0 / mass; - } - var C = this.m_constant - lengthA - this.m_ratio * lengthB; - var linearError = math_abs$3(C); - var impulse = -mass * C; - var PA = Vec2.mulNumVec2(-impulse, uA); - var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB); - cA.addMul(this.m_invMassA, PA); - aA += this.m_invIA * Vec2.crossVec2Vec2(rA, PA); - cB.addMul(this.m_invMassB, PB); - aB += this.m_invIB * Vec2.crossVec2Vec2(rB, PB); - this.m_bodyA.c_position.c = cA; - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c = cB; - this.m_bodyB.c_position.a = aB; - return linearError < SettingsInternal.linearSlop; - }; - PulleyJoint.TYPE = "pulley-joint"; - return PulleyJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_min$2 = Math.min; - /** @internal */ var LimitState; - (function (LimitState) { - LimitState[LimitState["inactiveLimit"] = 0] = "inactiveLimit"; - LimitState[LimitState["atLowerLimit"] = 1] = "atLowerLimit"; - LimitState[LimitState["atUpperLimit"] = 2] = "atUpperLimit"; - LimitState[LimitState["equalLimits"] = 3] = "equalLimits"; - })(LimitState || (LimitState = {})); - /** @internal */ var DEFAULTS$2 = { - maxLength: 0.0, - }; - /** - * A rope joint enforces a maximum distance between two points on two bodies. It - * has no other effect. - * - * Warning: if you attempt to change the maximum length during the simulation - * you will get some non-physical behavior. - * - * A model that would allow you to dynamically modify the length would have some - * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you - * want to dynamically control length. - */ - var RopeJoint = /** @class */ (function (_super) { - __extends$a(RopeJoint, _super); - function RopeJoint(def, bodyA, bodyB, anchor) { - var _this = this; - // @ts-ignore - if (!(_this instanceof RopeJoint)) { - return new RopeJoint(def, bodyA, bodyB, anchor); - } - def = options(def, DEFAULTS$2); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = RopeJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1.0, 0.0)); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1.0, 0.0)); - _this.m_maxLength = def.maxLength; - _this.m_mass = 0.0; - _this.m_impulse = 0.0; - _this.m_length = 0.0; - _this.m_state = LimitState.inactiveLimit; - return _this; - // Limit: - // C = norm(pB - pA) - L - // u = (pB - pA) / norm(pB - pA) - // Cdot = dot(u, vB + cross(wB, rB) - vA - cross(wA, rA)) - // J = [-u -cross(rA, u) u cross(rB, u)] - // K = J * invM * JT - // = invMassA + invIA * cross(rA, u)^2 + invMassB + invIB * cross(rB, u)^2 - } - /** @internal */ - RopeJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - maxLength: this.m_maxLength, - }; - }; - /** @internal */ - RopeJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new RopeJoint(data); - return joint; - }; - /** @hidden */ - RopeJoint.prototype._reset = function (def) { - if (Number.isFinite(def.maxLength)) { - this.m_maxLength = def.maxLength; + }; + var now = function() { + return Date.now(); + }; + var diff = function(time) { + return Date.now() - time; + }; + const Timer = { + now, + diff + }; + var math_max$5 = Math.max; + var temp$5 = vec2(0, 0); + var normal$4 = vec2(0, 0); + var e12 = vec2(0, 0); + var e13 = vec2(0, 0); + var e23 = vec2(0, 0); + var temp1 = vec2(0, 0); + var temp2 = vec2(0, 0); + stats$1.gjkCalls = 0; + stats$1.gjkIters = 0; + stats$1.gjkMaxIters = 0; + var DistanceInput = ( + /** @class */ + function() { + function DistanceInput2() { + this.proxyA = new DistanceProxy(); + this.proxyB = new DistanceProxy(); + this.transformA = Transform.identity(); + this.transformB = Transform.identity(); + this.useRadii = false; + } + DistanceInput2.prototype.recycle = function() { + this.proxyA.recycle(); + this.proxyB.recycle(); + this.transformA.setIdentity(); + this.transformB.setIdentity(); + this.useRadii = false; + }; + return DistanceInput2; + }() + ); + var DistanceOutput = ( + /** @class */ + function() { + function DistanceOutput2() { + this.pointA = vec2(0, 0); + this.pointB = vec2(0, 0); + this.distance = 0; + this.iterations = 0; + } + DistanceOutput2.prototype.recycle = function() { + zeroVec2(this.pointA); + zeroVec2(this.pointB); + this.distance = 0; + this.iterations = 0; + }; + return DistanceOutput2; + }() + ); + var SimplexCache = ( + /** @class */ + function() { + function SimplexCache2() { + this.metric = 0; + this.indexA = []; + this.indexB = []; + this.count = 0; + } + SimplexCache2.prototype.recycle = function() { + this.metric = 0; + this.indexA.length = 0; + this.indexB.length = 0; + this.count = 0; + }; + return SimplexCache2; + }() + ); + var Distance = function(output2, cache2, input2) { + ++stats$1.gjkCalls; + var proxyA = input2.proxyA; + var proxyB = input2.proxyB; + var xfA2 = input2.transformA; + var xfB2 = input2.transformB; + simplex.recycle(); + simplex.readCache(cache2, proxyA, xfA2, proxyB, xfB2); + var vertices = simplex.m_v; + var k_maxIters = SettingsInternal.maxDistanceIterations; + var saveA = []; + var saveB = []; + var saveCount = 0; + var iter = 0; + while (iter < k_maxIters) { + saveCount = simplex.m_count; + for (var i = 0; i < saveCount; ++i) { + saveA[i] = vertices[i].indexA; + saveB[i] = vertices[i].indexB; + } + simplex.solve(); + if (simplex.m_count === 3) { + break; + } + var d2 = simplex.getSearchDirection(); + if (lengthSqrVec2(d2) < EPSILON * EPSILON) { + break; + } + var vertex = vertices[simplex.m_count]; + vertex.indexA = proxyA.getSupport(derotVec2(temp$5, xfA2.q, scaleVec2(temp$5, -1, d2))); + transformVec2(vertex.wA, xfA2, proxyA.getVertex(vertex.indexA)); + vertex.indexB = proxyB.getSupport(derotVec2(temp$5, xfB2.q, d2)); + transformVec2(vertex.wB, xfB2, proxyB.getVertex(vertex.indexB)); + subVec2(vertex.w, vertex.wB, vertex.wA); + ++iter; + ++stats$1.gjkIters; + var duplicate = false; + for (var i = 0; i < saveCount; ++i) { + if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) { + duplicate = true; + break; + } + } + if (duplicate) { + break; + } + ++simplex.m_count; + } + stats$1.gjkMaxIters = math_max$5(stats$1.gjkMaxIters, iter); + simplex.getWitnessPoints(output2.pointA, output2.pointB); + output2.distance = distVec2(output2.pointA, output2.pointB); + output2.iterations = iter; + simplex.writeCache(cache2); + if (input2.useRadii) { + var rA2 = proxyA.m_radius; + var rB2 = proxyB.m_radius; + if (output2.distance > rA2 + rB2 && output2.distance > EPSILON) { + output2.distance -= rA2 + rB2; + subVec2(normal$4, output2.pointB, output2.pointA); + normalizeVec2(normal$4); + plusScaleVec2(output2.pointA, rA2, normal$4); + minusScaleVec2(output2.pointB, rB2, normal$4); + } else { + var p = subVec2(temp$5, output2.pointA, output2.pointB); + copyVec2(output2.pointA, p); + copyVec2(output2.pointB, p); + output2.distance = 0; + } + } + }; + var DistanceProxy = ( + /** @class */ + function() { + function DistanceProxy2() { + this.m_vertices = []; + this.m_count = 0; + this.m_radius = 0; + } + DistanceProxy2.prototype.recycle = function() { + this.m_vertices.length = 0; + this.m_count = 0; + this.m_radius = 0; + }; + DistanceProxy2.prototype.getVertexCount = function() { + return this.m_count; + }; + DistanceProxy2.prototype.getVertex = function(index) { + return this.m_vertices[index]; + }; + DistanceProxy2.prototype.getSupport = function(d2) { + var bestIndex = -1; + var bestValue = -Infinity; + for (var i = 0; i < this.m_count; ++i) { + var value = dotVec2(this.m_vertices[i], d2); + if (value > bestValue) { + bestIndex = i; + bestValue = value; + } + } + return bestIndex; + }; + DistanceProxy2.prototype.getSupportVertex = function(d2) { + return this.m_vertices[this.getSupport(d2)]; + }; + DistanceProxy2.prototype.set = function(shape, index) { + shape.computeDistanceProxy(this, index); + }; + DistanceProxy2.prototype.setVertices = function(vertices, count, radius) { + this.m_vertices = vertices; + this.m_count = count; + this.m_radius = radius; + }; + return DistanceProxy2; + }() + ); + var SimplexVertex = ( + /** @class */ + function() { + function SimplexVertex2() { + this.wA = vec2(0, 0); + this.indexA = 0; + this.wB = vec2(0, 0); + this.indexB = 0; + this.w = vec2(0, 0); + this.a = 0; + } + SimplexVertex2.prototype.recycle = function() { + this.indexA = 0; + this.indexB = 0; + zeroVec2(this.wA); + zeroVec2(this.wB); + zeroVec2(this.w); + this.a = 0; + }; + SimplexVertex2.prototype.set = function(v3) { + this.indexA = v3.indexA; + this.indexB = v3.indexB; + copyVec2(this.wA, v3.wA); + copyVec2(this.wB, v3.wB); + copyVec2(this.w, v3.w); + this.a = v3.a; + }; + return SimplexVertex2; + }() + ); + var searchDirection_reuse = vec2(0, 0); + var closestPoint_reuse = vec2(0, 0); + var Simplex = ( + /** @class */ + function() { + function Simplex2() { + this.m_v1 = new SimplexVertex(); + this.m_v2 = new SimplexVertex(); + this.m_v3 = new SimplexVertex(); + this.m_v = [this.m_v1, this.m_v2, this.m_v3]; + } + Simplex2.prototype.recycle = function() { + this.m_v1.recycle(); + this.m_v2.recycle(); + this.m_v3.recycle(); + this.m_count = 0; + }; + Simplex2.prototype.toString = function() { + if (this.m_count === 3) { + return [ + "+" + this.m_count, + this.m_v1.a, + this.m_v1.wA.x, + this.m_v1.wA.y, + this.m_v1.wB.x, + this.m_v1.wB.y, + this.m_v2.a, + this.m_v2.wA.x, + this.m_v2.wA.y, + this.m_v2.wB.x, + this.m_v2.wB.y, + this.m_v3.a, + this.m_v3.wA.x, + this.m_v3.wA.y, + this.m_v3.wB.x, + this.m_v3.wB.y + ].toString(); + } else if (this.m_count === 2) { + return [ + "+" + this.m_count, + this.m_v1.a, + this.m_v1.wA.x, + this.m_v1.wA.y, + this.m_v1.wB.x, + this.m_v1.wB.y, + this.m_v2.a, + this.m_v2.wA.x, + this.m_v2.wA.y, + this.m_v2.wB.x, + this.m_v2.wB.y + ].toString(); + } else if (this.m_count === 1) { + return [ + "+" + this.m_count, + this.m_v1.a, + this.m_v1.wA.x, + this.m_v1.wA.y, + this.m_v1.wB.x, + this.m_v1.wB.y + ].toString(); + } else { + return "+" + this.m_count; + } + }; + Simplex2.prototype.readCache = function(cache2, proxyA, transformA, proxyB, transformB) { + this.m_count = cache2.count; + for (var i = 0; i < this.m_count; ++i) { + var v3 = this.m_v[i]; + v3.indexA = cache2.indexA[i]; + v3.indexB = cache2.indexB[i]; + var wALocal = proxyA.getVertex(v3.indexA); + var wBLocal = proxyB.getVertex(v3.indexB); + transformVec2(v3.wA, transformA, wALocal); + transformVec2(v3.wB, transformB, wBLocal); + subVec2(v3.w, v3.wB, v3.wA); + v3.a = 0; + } + if (this.m_count > 1) { + var metric1 = cache2.metric; + var metric2 = this.getMetric(); + if (metric2 < 0.5 * metric1 || 2 * metric1 < metric2 || metric2 < EPSILON) { + this.m_count = 0; + } + } + if (this.m_count === 0) { + var v3 = this.m_v[0]; + v3.indexA = 0; + v3.indexB = 0; + var wALocal = proxyA.getVertex(0); + var wBLocal = proxyB.getVertex(0); + transformVec2(v3.wA, transformA, wALocal); + transformVec2(v3.wB, transformB, wBLocal); + subVec2(v3.w, v3.wB, v3.wA); + v3.a = 1; + this.m_count = 1; + } + }; + Simplex2.prototype.writeCache = function(cache2) { + cache2.metric = this.getMetric(); + cache2.count = this.m_count; + for (var i = 0; i < this.m_count; ++i) { + cache2.indexA[i] = this.m_v[i].indexA; + cache2.indexB[i] = this.m_v[i].indexB; + } + }; + Simplex2.prototype.getSearchDirection = function() { + var v13 = this.m_v1; + var v22 = this.m_v2; + this.m_v3; + switch (this.m_count) { + case 1: + return setVec2(searchDirection_reuse, -v13.w.x, -v13.w.y); + case 2: { + subVec2(e12, v22.w, v13.w); + var sgn = -crossVec2Vec2(e12, v13.w); + if (sgn > 0) { + return setVec2(searchDirection_reuse, -e12.y, e12.x); + } else { + return setVec2(searchDirection_reuse, e12.y, -e12.x); } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - RopeJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - RopeJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Set the maximum length of the rope. - */ - RopeJoint.prototype.setMaxLength = function (length) { - this.m_maxLength = length; - }; - /** - * Get the maximum length of the rope. - */ - RopeJoint.prototype.getMaxLength = function () { - return this.m_maxLength; - }; - RopeJoint.prototype.getLimitState = function () { - // TODO LimitState - return this.m_state; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - RopeJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - RopeJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - RopeJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - RopeJoint.prototype.getReactionTorque = function (inv_dt) { - return 0.0; - }; - RopeJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); - this.m_rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); - this.m_u = Vec2.zero(); - this.m_u.addCombine(1, cB, 1, this.m_rB); - this.m_u.subCombine(1, cA, 1, this.m_rA); - this.m_length = this.m_u.length(); - var C = this.m_length - this.m_maxLength; - if (C > 0.0) { - this.m_state = LimitState.atUpperLimit; + } + default: + return zeroVec2(searchDirection_reuse); + } + }; + Simplex2.prototype.getClosestPoint = function() { + var v13 = this.m_v1; + var v22 = this.m_v2; + this.m_v3; + switch (this.m_count) { + case 0: + return zeroVec2(closestPoint_reuse); + case 1: + return copyVec2(closestPoint_reuse, v13.w); + case 2: + return combine2Vec2(closestPoint_reuse, v13.a, v13.w, v22.a, v22.w); + case 3: + return zeroVec2(closestPoint_reuse); + default: + return zeroVec2(closestPoint_reuse); + } + }; + Simplex2.prototype.getWitnessPoints = function(pA2, pB2) { + var v13 = this.m_v1; + var v22 = this.m_v2; + var v3 = this.m_v3; + switch (this.m_count) { + case 0: + break; + case 1: + copyVec2(pA2, v13.wA); + copyVec2(pB2, v13.wB); + break; + case 2: + combine2Vec2(pA2, v13.a, v13.wA, v22.a, v22.wA); + combine2Vec2(pB2, v13.a, v13.wB, v22.a, v22.wB); + break; + case 3: + combine3Vec2(pA2, v13.a, v13.wA, v22.a, v22.wA, v3.a, v3.wA); + copyVec2(pB2, pA2); + break; + } + }; + Simplex2.prototype.getMetric = function() { + switch (this.m_count) { + case 0: + return 0; + case 1: + return 0; + case 2: + return distVec2(this.m_v1.w, this.m_v2.w); + case 3: + return crossVec2Vec2(subVec2(temp1, this.m_v2.w, this.m_v1.w), subVec2(temp2, this.m_v3.w, this.m_v1.w)); + default: + return 0; + } + }; + Simplex2.prototype.solve = function() { + switch (this.m_count) { + case 1: + break; + case 2: + this.solve2(); + break; + case 3: + this.solve3(); + break; + } + }; + Simplex2.prototype.solve2 = function() { + var w1 = this.m_v1.w; + var w2 = this.m_v2.w; + subVec2(e12, w2, w1); + var d12_2 = -dotVec2(w1, e12); + if (d12_2 <= 0) { + this.m_v1.a = 1; + this.m_count = 1; + return; + } + var d12_1 = dotVec2(w2, e12); + if (d12_1 <= 0) { + this.m_v2.a = 1; + this.m_count = 1; + this.m_v1.set(this.m_v2); + return; + } + var inv_d12 = 1 / (d12_1 + d12_2); + this.m_v1.a = d12_1 * inv_d12; + this.m_v2.a = d12_2 * inv_d12; + this.m_count = 2; + }; + Simplex2.prototype.solve3 = function() { + var w1 = this.m_v1.w; + var w2 = this.m_v2.w; + var w3 = this.m_v3.w; + subVec2(e12, w2, w1); + var w1e12 = dotVec2(w1, e12); + var w2e12 = dotVec2(w2, e12); + var d12_1 = w2e12; + var d12_2 = -w1e12; + subVec2(e13, w3, w1); + var w1e13 = dotVec2(w1, e13); + var w3e13 = dotVec2(w3, e13); + var d13_1 = w3e13; + var d13_2 = -w1e13; + subVec2(e23, w3, w2); + var w2e23 = dotVec2(w2, e23); + var w3e23 = dotVec2(w3, e23); + var d23_1 = w3e23; + var d23_2 = -w2e23; + var n123 = crossVec2Vec2(e12, e13); + var d123_1 = n123 * crossVec2Vec2(w2, w3); + var d123_2 = n123 * crossVec2Vec2(w3, w1); + var d123_3 = n123 * crossVec2Vec2(w1, w2); + if (d12_2 <= 0 && d13_2 <= 0) { + this.m_v1.a = 1; + this.m_count = 1; + return; + } + if (d12_1 > 0 && d12_2 > 0 && d123_3 <= 0) { + var inv_d12 = 1 / (d12_1 + d12_2); + this.m_v1.a = d12_1 * inv_d12; + this.m_v2.a = d12_2 * inv_d12; + this.m_count = 2; + return; + } + if (d13_1 > 0 && d13_2 > 0 && d123_2 <= 0) { + var inv_d13 = 1 / (d13_1 + d13_2); + this.m_v1.a = d13_1 * inv_d13; + this.m_v3.a = d13_2 * inv_d13; + this.m_count = 2; + this.m_v2.set(this.m_v3); + return; + } + if (d12_1 <= 0 && d23_2 <= 0) { + this.m_v2.a = 1; + this.m_count = 1; + this.m_v1.set(this.m_v2); + return; + } + if (d13_1 <= 0 && d23_1 <= 0) { + this.m_v3.a = 1; + this.m_count = 1; + this.m_v1.set(this.m_v3); + return; + } + if (d23_1 > 0 && d23_2 > 0 && d123_1 <= 0) { + var inv_d23 = 1 / (d23_1 + d23_2); + this.m_v2.a = d23_1 * inv_d23; + this.m_v3.a = d23_2 * inv_d23; + this.m_count = 2; + this.m_v1.set(this.m_v3); + return; + } + var inv_d123 = 1 / (d123_1 + d123_2 + d123_3); + this.m_v1.a = d123_1 * inv_d123; + this.m_v2.a = d123_2 * inv_d123; + this.m_v3.a = d123_3 * inv_d123; + this.m_count = 3; + }; + return Simplex2; + }() + ); + var simplex = new Simplex(); + var input$1 = new DistanceInput(); + var cache$1 = new SimplexCache(); + var output$1 = new DistanceOutput(); + var testOverlap = function(shapeA, indexA, shapeB, indexB, xfA2, xfB2) { + input$1.recycle(); + input$1.proxyA.set(shapeA, indexA); + input$1.proxyB.set(shapeB, indexB); + copyTransform(input$1.transformA, xfA2); + copyTransform(input$1.transformB, xfB2); + input$1.useRadii = true; + output$1.recycle(); + cache$1.recycle(); + Distance(output$1, cache$1, input$1); + return output$1.distance < 10 * EPSILON; + }; + Distance.testOverlap = testOverlap; + Distance.Input = DistanceInput; + Distance.Output = DistanceOutput; + Distance.Proxy = DistanceProxy; + Distance.Cache = SimplexCache; + var ShapeCastInput = ( + /** @class */ + function() { + function ShapeCastInput2() { + this.proxyA = new DistanceProxy(); + this.proxyB = new DistanceProxy(); + this.transformA = Transform.identity(); + this.transformB = Transform.identity(); + this.translationB = Vec2.zero(); + } + ShapeCastInput2.prototype.recycle = function() { + this.proxyA.recycle(); + this.proxyB.recycle(); + this.transformA.setIdentity(); + this.transformB.setIdentity(); + zeroVec2(this.translationB); + }; + return ShapeCastInput2; + }() + ); + var ShapeCastOutput = ( + /** @class */ + /* @__PURE__ */ function() { + function ShapeCastOutput2() { + this.point = Vec2.zero(); + this.normal = Vec2.zero(); + this.lambda = 1; + this.iterations = 0; + } + return ShapeCastOutput2; + }() + ); + var ShapeCast = function(output2, input2) { + output2.iterations = 0; + output2.lambda = 1; + output2.normal.setZero(); + output2.point.setZero(); + var proxyA = input2.proxyA; + var proxyB = input2.proxyB; + var radiusA = math_max$5(proxyA.m_radius, SettingsInternal.polygonRadius); + var radiusB = math_max$5(proxyB.m_radius, SettingsInternal.polygonRadius); + var radius = radiusA + radiusB; + var xfA2 = input2.transformA; + var xfB2 = input2.transformB; + var r = input2.translationB; + var n2 = Vec2.zero(); + var lambda = 0; + var simplex2 = new Simplex(); + simplex2.m_count = 0; + var vertices = simplex2.m_v; + var indexA = proxyA.getSupport(Rot.mulTVec2(xfA2.q, Vec2.neg(r))); + var wA = Transform.mulVec2(xfA2, proxyA.getVertex(indexA)); + var indexB = proxyB.getSupport(Rot.mulTVec2(xfB2.q, r)); + var wB = Transform.mulVec2(xfB2, proxyB.getVertex(indexB)); + var v3 = Vec2.sub(wA, wB); + var sigma = math_max$5(SettingsInternal.polygonRadius, radius - SettingsInternal.polygonRadius); + var tolerance = 0.5 * SettingsInternal.linearSlop; + var k_maxIters = 20; + var iter = 0; + while (iter < k_maxIters && v3.length() - sigma > tolerance) { + output2.iterations += 1; + indexA = proxyA.getSupport(Rot.mulTVec2(xfA2.q, Vec2.neg(v3))); + wA = Transform.mulVec2(xfA2, proxyA.getVertex(indexA)); + indexB = proxyB.getSupport(Rot.mulTVec2(xfB2.q, v3)); + wB = Transform.mulVec2(xfB2, proxyB.getVertex(indexB)); + var p = Vec2.sub(wA, wB); + v3.normalize(); + var vp = Vec2.dot(v3, p); + var vr = Vec2.dot(v3, r); + if (vp - sigma > lambda * vr) { + if (vr <= 0) { + return false; + } + lambda = (vp - sigma) / vr; + if (lambda > 1) { + return false; + } + n2.setMul(-1, v3); + simplex2.m_count = 0; + } + var vertex = vertices[simplex2.m_count]; + vertex.indexA = indexB; + vertex.wA = Vec2.combine(1, wB, lambda, r); + vertex.indexB = indexA; + vertex.wB = wA; + vertex.w = Vec2.sub(vertex.wB, vertex.wA); + vertex.a = 1; + simplex2.m_count += 1; + switch (simplex2.m_count) { + case 1: + break; + case 2: + simplex2.solve2(); + break; + case 3: + simplex2.solve3(); + break; + } + if (simplex2.m_count == 3) { + return false; + } + v3.setVec2(simplex2.getClosestPoint()); + ++iter; + } + if (iter == 0) { + return false; + } + var pointA2 = Vec2.zero(); + var pointB2 = Vec2.zero(); + simplex2.getWitnessPoints(pointB2, pointA2); + if (v3.lengthSquared() > 0) { + n2.setMul(-1, v3); + n2.normalize(); + } + output2.point = Vec2.combine(1, pointA2, radiusA, n2); + output2.normal = n2; + output2.lambda = lambda; + output2.iterations = iter; + return true; + }; + var math_abs$8 = Math.abs; + var math_max$4 = Math.max; + var TOIInput = ( + /** @class */ + function() { + function TOIInput2() { + this.proxyA = new DistanceProxy(); + this.proxyB = new DistanceProxy(); + this.sweepA = new Sweep(); + this.sweepB = new Sweep(); + } + TOIInput2.prototype.recycle = function() { + this.proxyA.recycle(); + this.proxyB.recycle(); + this.sweepA.recycle(); + this.sweepB.recycle(); + this.tMax = -1; + }; + return TOIInput2; + }() + ); + exports2.TOIOutputState = void 0; + (function(TOIOutputState2) { + TOIOutputState2[TOIOutputState2["e_unset"] = -1] = "e_unset"; + TOIOutputState2[TOIOutputState2["e_unknown"] = 0] = "e_unknown"; + TOIOutputState2[TOIOutputState2["e_failed"] = 1] = "e_failed"; + TOIOutputState2[TOIOutputState2["e_overlapped"] = 2] = "e_overlapped"; + TOIOutputState2[TOIOutputState2["e_touching"] = 3] = "e_touching"; + TOIOutputState2[TOIOutputState2["e_separated"] = 4] = "e_separated"; + })(exports2.TOIOutputState || (exports2.TOIOutputState = {})); + var TOIOutput = ( + /** @class */ + function() { + function TOIOutput2() { + this.state = exports2.TOIOutputState.e_unset; + this.t = -1; + } + TOIOutput2.prototype.recycle = function() { + this.state = exports2.TOIOutputState.e_unset; + this.t = -1; + }; + return TOIOutput2; + }() + ); + stats$1.toiTime = 0; + stats$1.toiMaxTime = 0; + stats$1.toiCalls = 0; + stats$1.toiIters = 0; + stats$1.toiMaxIters = 0; + stats$1.toiRootIters = 0; + stats$1.toiMaxRootIters = 0; + var distanceInput = new DistanceInput(); + var distanceOutput = new DistanceOutput(); + var cache = new SimplexCache(); + var xfA$1 = transform(0, 0, 0); + var xfB$1 = transform(0, 0, 0); + var temp$4 = vec2(0, 0); + var pointA$2 = vec2(0, 0); + var pointB$2 = vec2(0, 0); + var normal$3 = vec2(0, 0); + var axisA = vec2(0, 0); + var axisB = vec2(0, 0); + var localPointA = vec2(0, 0); + var localPointB = vec2(0, 0); + var TimeOfImpact = function(output2, input2) { + var timer = Timer.now(); + ++stats$1.toiCalls; + output2.state = exports2.TOIOutputState.e_unknown; + output2.t = input2.tMax; + var proxyA = input2.proxyA; + var proxyB = input2.proxyB; + var sweepA = input2.sweepA; + var sweepB = input2.sweepB; + sweepA.normalize(); + sweepB.normalize(); + var tMax = input2.tMax; + var totalRadius = proxyA.m_radius + proxyB.m_radius; + var target = math_max$4(SettingsInternal.linearSlop, totalRadius - 3 * SettingsInternal.linearSlop); + var tolerance = 0.25 * SettingsInternal.linearSlop; + var t1 = 0; + var k_maxIterations = SettingsInternal.maxTOIIterations; + var iter = 0; + cache.recycle(); + distanceInput.proxyA.setVertices(proxyA.m_vertices, proxyA.m_count, proxyA.m_radius); + distanceInput.proxyB.setVertices(proxyB.m_vertices, proxyB.m_count, proxyB.m_radius); + distanceInput.useRadii = false; + while (true) { + sweepA.getTransform(xfA$1, t1); + sweepB.getTransform(xfB$1, t1); + copyTransform(distanceInput.transformA, xfA$1); + copyTransform(distanceInput.transformB, xfB$1); + Distance(distanceOutput, cache, distanceInput); + if (distanceOutput.distance <= 0) { + output2.state = exports2.TOIOutputState.e_overlapped; + output2.t = 0; + break; + } + if (distanceOutput.distance < target + tolerance) { + output2.state = exports2.TOIOutputState.e_touching; + output2.t = t1; + break; + } + separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1); + var done = false; + var t2 = tMax; + var pushBackIter = 0; + while (true) { + var s2 = separationFunction.findMinSeparation(t2); + if (s2 > target + tolerance) { + output2.state = exports2.TOIOutputState.e_separated; + output2.t = tMax; + done = true; + break; + } + if (s2 > target - tolerance) { + t1 = t2; + break; + } + var s1 = separationFunction.evaluate(t1); + if (s1 < target - tolerance) { + output2.state = exports2.TOIOutputState.e_failed; + output2.t = t1; + done = true; + break; + } + if (s1 <= target + tolerance) { + output2.state = exports2.TOIOutputState.e_touching; + output2.t = t1; + done = true; + break; + } + var rootIterCount = 0; + var a1 = t1; + var a2 = t2; + while (true) { + var t = void 0; + if (rootIterCount & 1) { + t = a1 + (target - s1) * (a2 - a1) / (s2 - s1); + } else { + t = 0.5 * (a1 + a2); + } + ++rootIterCount; + ++stats$1.toiRootIters; + var s3 = separationFunction.evaluate(t); + if (math_abs$8(s3 - target) < tolerance) { + t2 = t; + break; + } + if (s3 > target) { + a1 = t; + s1 = s3; + } else { + a2 = t; + s2 = s3; + } + if (rootIterCount === 50) { + break; + } + } + stats$1.toiMaxRootIters = math_max$4(stats$1.toiMaxRootIters, rootIterCount); + ++pushBackIter; + if (pushBackIter === SettingsInternal.maxPolygonVertices) { + break; + } + } + ++iter; + ++stats$1.toiIters; + if (done) { + break; + } + if (iter === k_maxIterations) { + output2.state = exports2.TOIOutputState.e_failed; + output2.t = t1; + break; + } + } + stats$1.toiMaxIters = math_max$4(stats$1.toiMaxIters, iter); + var time = Timer.diff(timer); + stats$1.toiMaxTime = math_max$4(stats$1.toiMaxTime, time); + stats$1.toiTime += time; + separationFunction.recycle(); + }; + var SeparationFunctionType; + (function(SeparationFunctionType2) { + SeparationFunctionType2[SeparationFunctionType2["e_unset"] = -1] = "e_unset"; + SeparationFunctionType2[SeparationFunctionType2["e_points"] = 1] = "e_points"; + SeparationFunctionType2[SeparationFunctionType2["e_faceA"] = 2] = "e_faceA"; + SeparationFunctionType2[SeparationFunctionType2["e_faceB"] = 3] = "e_faceB"; + })(SeparationFunctionType || (SeparationFunctionType = {})); + var SeparationFunction = ( + /** @class */ + function() { + function SeparationFunction2() { + this.m_proxyA = null; + this.m_proxyB = null; + this.m_sweepA = null; + this.m_sweepB = null; + this.m_type = SeparationFunctionType.e_unset; + this.m_localPoint = vec2(0, 0); + this.m_axis = vec2(0, 0); + this.indexA = -1; + this.indexB = -1; + } + SeparationFunction2.prototype.recycle = function() { + this.m_proxyA = null; + this.m_proxyB = null; + this.m_sweepA = null; + this.m_sweepB = null; + this.m_type = SeparationFunctionType.e_unset; + zeroVec2(this.m_localPoint); + zeroVec2(this.m_axis); + this.indexA = -1; + this.indexB = -1; + }; + SeparationFunction2.prototype.initialize = function(cache2, proxyA, sweepA, proxyB, sweepB, t1) { + var count = cache2.count; + this.m_proxyA = proxyA; + this.m_proxyB = proxyB; + this.m_sweepA = sweepA; + this.m_sweepB = sweepB; + this.m_sweepA.getTransform(xfA$1, t1); + this.m_sweepB.getTransform(xfB$1, t1); + if (count === 1) { + this.m_type = SeparationFunctionType.e_points; + var localPointA_1 = this.m_proxyA.getVertex(cache2.indexA[0]); + var localPointB_1 = this.m_proxyB.getVertex(cache2.indexB[0]); + transformVec2(pointA$2, xfA$1, localPointA_1); + transformVec2(pointB$2, xfB$1, localPointB_1); + subVec2(this.m_axis, pointB$2, pointA$2); + var s2 = normalizeVec2Length(this.m_axis); + return s2; + } else if (cache2.indexA[0] === cache2.indexA[1]) { + this.m_type = SeparationFunctionType.e_faceB; + var localPointB1 = proxyB.getVertex(cache2.indexB[0]); + var localPointB2 = proxyB.getVertex(cache2.indexB[1]); + crossVec2Num(this.m_axis, subVec2(temp$4, localPointB2, localPointB1), 1); + normalizeVec2(this.m_axis); + rotVec2(normal$3, xfB$1.q, this.m_axis); + combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2); + transformVec2(pointB$2, xfB$1, this.m_localPoint); + var localPointA_2 = proxyA.getVertex(cache2.indexA[0]); + var pointA_1 = Transform.mulVec2(xfA$1, localPointA_2); + var s2 = dotVec2(pointA_1, normal$3) - dotVec2(pointB$2, normal$3); + if (s2 < 0) { + negVec2(this.m_axis); + s2 = -s2; + } + return s2; + } else { + this.m_type = SeparationFunctionType.e_faceA; + var localPointA1 = this.m_proxyA.getVertex(cache2.indexA[0]); + var localPointA2 = this.m_proxyA.getVertex(cache2.indexA[1]); + crossVec2Num(this.m_axis, subVec2(temp$4, localPointA2, localPointA1), 1); + normalizeVec2(this.m_axis); + rotVec2(normal$3, xfA$1.q, this.m_axis); + combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2); + transformVec2(pointA$2, xfA$1, this.m_localPoint); + var localPointB_2 = this.m_proxyB.getVertex(cache2.indexB[0]); + transformVec2(pointB$2, xfB$1, localPointB_2); + var s2 = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); + if (s2 < 0) { + negVec2(this.m_axis); + s2 = -s2; + } + return s2; + } + }; + SeparationFunction2.prototype.compute = function(find, t) { + this.m_sweepA.getTransform(xfA$1, t); + this.m_sweepB.getTransform(xfB$1, t); + switch (this.m_type) { + case SeparationFunctionType.e_points: { + if (find) { + derotVec2(axisA, xfA$1.q, this.m_axis); + derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, this.m_axis)); + this.indexA = this.m_proxyA.getSupport(axisA); + this.indexB = this.m_proxyB.getSupport(axisB); + } + copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); + copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); + transformVec2(pointA$2, xfA$1, localPointA); + transformVec2(pointB$2, xfB$1, localPointB); + var sep = dotVec2(pointB$2, this.m_axis) - dotVec2(pointA$2, this.m_axis); + return sep; + } + case SeparationFunctionType.e_faceA: { + rotVec2(normal$3, xfA$1.q, this.m_axis); + transformVec2(pointA$2, xfA$1, this.m_localPoint); + if (find) { + derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, normal$3)); + this.indexA = -1; + this.indexB = this.m_proxyB.getSupport(axisB); + } + copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); + transformVec2(pointB$2, xfB$1, localPointB); + var sep = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); + return sep; + } + case SeparationFunctionType.e_faceB: { + rotVec2(normal$3, xfB$1.q, this.m_axis); + transformVec2(pointB$2, xfB$1, this.m_localPoint); + if (find) { + derotVec2(axisA, xfA$1.q, scaleVec2(temp$4, -1, normal$3)); + this.indexB = -1; + this.indexA = this.m_proxyA.getSupport(axisA); + } + copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); + transformVec2(pointA$2, xfA$1, localPointA); + var sep = dotVec2(pointA$2, normal$3) - dotVec2(pointB$2, normal$3); + return sep; + } + default: + if (find) { + this.indexA = -1; + this.indexB = -1; } - else { - this.m_state = LimitState.inactiveLimit; + return 0; + } + }; + SeparationFunction2.prototype.findMinSeparation = function(t) { + return this.compute(true, t); + }; + SeparationFunction2.prototype.evaluate = function(t) { + return this.compute(false, t); + }; + return SeparationFunction2; + }() + ); + var separationFunction = new SeparationFunction(); + TimeOfImpact.Input = TOIInput; + TimeOfImpact.Output = TOIOutput; + var math_abs$7 = Math.abs; + var math_sqrt$5 = Math.sqrt; + var math_min$6 = Math.min; + var TimeStep = ( + /** @class */ + function() { + function TimeStep2() { + this.dt = 0; + this.inv_dt = 0; + this.velocityIterations = 0; + this.positionIterations = 0; + this.warmStarting = false; + this.blockSolve = true; + this.inv_dt0 = 0; + this.dtRatio = 1; + } + TimeStep2.prototype.reset = function(dt) { + if (this.dt > 0) { + this.inv_dt0 = this.inv_dt; + } + this.dt = dt; + this.inv_dt = dt == 0 ? 0 : 1 / dt; + this.dtRatio = dt * this.inv_dt0; + }; + return TimeStep2; + }() + ); + var s_subStep = new TimeStep(); + var c = vec2(0, 0); + var v = vec2(0, 0); + var translation = vec2(0, 0); + var input = new TOIInput(); + var output = new TOIOutput(); + var backup = new Sweep(); + var backup1 = new Sweep(); + var backup2 = new Sweep(); + var ContactImpulse = ( + /** @class */ + function() { + function ContactImpulse2(contact) { + this.contact = contact; + this.normals = []; + this.tangents = []; + } + ContactImpulse2.prototype.recycle = function() { + this.normals.length = 0; + this.tangents.length = 0; + }; + Object.defineProperty(ContactImpulse2.prototype, "normalImpulses", { + get: function() { + var contact = this.contact; + var normals = this.normals; + normals.length = 0; + for (var p = 0; p < contact.v_points.length; ++p) { + normals.push(contact.v_points[p].normalImpulse); + } + return normals; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ContactImpulse2.prototype, "tangentImpulses", { + get: function() { + var contact = this.contact; + var tangents = this.tangents; + tangents.length = 0; + for (var p = 0; p < contact.v_points.length; ++p) { + tangents.push(contact.v_points[p].tangentImpulse); + } + return tangents; + }, + enumerable: false, + configurable: true + }); + return ContactImpulse2; + }() + ); + var Solver = ( + /** @class */ + function() { + function Solver2(world) { + this.m_world = world; + this.m_stack = []; + this.m_bodies = []; + this.m_contacts = []; + this.m_joints = []; + } + Solver2.prototype.clear = function() { + this.m_stack.length = 0; + this.m_bodies.length = 0; + this.m_contacts.length = 0; + this.m_joints.length = 0; + }; + Solver2.prototype.addBody = function(body) { + this.m_bodies.push(body); + }; + Solver2.prototype.addContact = function(contact) { + this.m_contacts.push(contact); + }; + Solver2.prototype.addJoint = function(joint) { + this.m_joints.push(joint); + }; + Solver2.prototype.solveWorld = function(step) { + var world = this.m_world; + for (var b2 = world.m_bodyList; b2; b2 = b2.m_next) { + b2.m_islandFlag = false; + } + for (var c_1 = world.m_contactList; c_1; c_1 = c_1.m_next) { + c_1.m_islandFlag = false; + } + for (var j = world.m_jointList; j; j = j.m_next) { + j.m_islandFlag = false; + } + var stack = this.m_stack; + for (var seed = world.m_bodyList; seed; seed = seed.m_next) { + if (seed.m_islandFlag) { + continue; + } + if (seed.isAwake() == false || seed.isActive() == false) { + continue; + } + if (seed.isStatic()) { + continue; + } + this.clear(); + stack.push(seed); + seed.m_islandFlag = true; + while (stack.length > 0) { + var b2 = stack.pop(); + this.addBody(b2); + b2.m_awakeFlag = true; + if (b2.isStatic()) { + continue; + } + for (var ce = b2.m_contactList; ce; ce = ce.next) { + var contact = ce.contact; + if (contact.m_islandFlag) { + continue; + } + if (contact.isEnabled() == false || contact.isTouching() == false) { + continue; + } + var sensorA = contact.m_fixtureA.m_isSensor; + var sensorB = contact.m_fixtureB.m_isSensor; + if (sensorA || sensorB) { + continue; + } + this.addContact(contact); + contact.m_islandFlag = true; + var other = ce.other; + if (other.m_islandFlag) { + continue; + } + stack.push(other); + other.m_islandFlag = true; } - if (this.m_length > SettingsInternal.linearSlop) { - this.m_u.mul(1.0 / this.m_length); + for (var je = b2.m_jointList; je; je = je.next) { + if (je.joint.m_islandFlag == true) { + continue; + } + var other = je.other; + if (other.isActive() == false) { + continue; + } + this.addJoint(je.joint); + je.joint.m_islandFlag = true; + if (other.m_islandFlag) { + continue; + } + stack.push(other); + other.m_islandFlag = true; } - else { - this.m_u.setZero(); - this.m_mass = 0.0; - this.m_impulse = 0.0; - return; + } + this.solveIsland(step); + for (var i = 0; i < this.m_bodies.length; ++i) { + var b2 = this.m_bodies[i]; + if (b2.isStatic()) { + b2.m_islandFlag = false; } - // Compute effective mass. - var crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u); - var crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u); - var invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB; - this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0; - if (step.warmStarting) { - // Scale the impulse to support a variable time step. - this.m_impulse *= step.dtRatio; - var P = Vec2.mulNumVec2(this.m_impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); + } + } + }; + Solver2.prototype.solveIsland = function(step) { + var world = this.m_world; + var gravity = world.m_gravity; + var allowSleep = world.m_allowSleep; + var h = step.dt; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(c, body.m_sweep.c); + var a2 = body.m_sweep.a; + copyVec2(v, body.m_linearVelocity); + var w = body.m_angularVelocity; + copyVec2(body.m_sweep.c0, body.m_sweep.c); + body.m_sweep.a0 = body.m_sweep.a; + if (body.isDynamic()) { + plusScaleVec2(v, h * body.m_gravityScale, gravity); + plusScaleVec2(v, h * body.m_invMass, body.m_force); + w += h * body.m_invI * body.m_torque; + scaleVec2(v, 1 / (1 + h * body.m_linearDamping), v); + w *= 1 / (1 + h * body.m_angularDamping); + } + copyVec2(body.c_position.c, c); + body.c_position.a = a2; + copyVec2(body.c_velocity.v, v); + body.c_velocity.w = w; + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initConstraint(step); + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initVelocityConstraint(step); + } + if (step.warmStarting) { + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.warmStartConstraint(step); + } + } + for (var i = 0; i < this.m_joints.length; ++i) { + var joint = this.m_joints[i]; + joint.initVelocityConstraints(step); + } + for (var i = 0; i < step.velocityIterations; ++i) { + for (var j = 0; j < this.m_joints.length; ++j) { + var joint = this.m_joints[j]; + joint.solveVelocityConstraints(step); + } + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + contact.solveVelocityConstraint(step); + } + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.storeConstraintImpulses(step); + } + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(c, body.c_position.c); + var a2 = body.c_position.a; + copyVec2(v, body.c_velocity.v); + var w = body.c_velocity.w; + scaleVec2(translation, h, v); + var translationLengthSqr = lengthSqrVec2(translation); + if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { + var ratio = SettingsInternal.maxTranslation / math_sqrt$5(translationLengthSqr); + mulVec2(v, ratio); + } + var rotation2 = h * w; + if (rotation2 * rotation2 > SettingsInternal.maxRotationSquared) { + var ratio = SettingsInternal.maxRotation / math_abs$7(rotation2); + w *= ratio; + } + plusScaleVec2(c, h, v); + a2 += h * w; + copyVec2(body.c_position.c, c); + body.c_position.a = a2; + copyVec2(body.c_velocity.v, v); + body.c_velocity.w = w; + } + var positionSolved = false; + for (var i = 0; i < step.positionIterations; ++i) { + var minSeparation = 0; + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + var separation = contact.solvePositionConstraint(step); + minSeparation = math_min$6(minSeparation, separation); + } + var contactsOkay = minSeparation >= -3 * SettingsInternal.linearSlop; + var jointsOkay = true; + for (var j = 0; j < this.m_joints.length; ++j) { + var joint = this.m_joints[j]; + var jointOkay = joint.solvePositionConstraints(step); + jointsOkay = jointsOkay && jointOkay; + } + if (contactsOkay && jointsOkay) { + positionSolved = true; + break; + } + } + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(body.m_sweep.c, body.c_position.c); + body.m_sweep.a = body.c_position.a; + copyVec2(body.m_linearVelocity, body.c_velocity.v); + body.m_angularVelocity = body.c_velocity.w; + body.synchronizeTransform(); + } + this.postSolveIsland(); + if (allowSleep) { + var minSleepTime = Infinity; + var linTolSqr = SettingsInternal.linearSleepToleranceSqr; + var angTolSqr = SettingsInternal.angularSleepToleranceSqr; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + if (body.isStatic()) { + continue; + } + if (body.m_autoSleepFlag == false || body.m_angularVelocity * body.m_angularVelocity > angTolSqr || lengthSqrVec2(body.m_linearVelocity) > linTolSqr) { + body.m_sleepTime = 0; + minSleepTime = 0; + } else { + body.m_sleepTime += h; + minSleepTime = math_min$6(minSleepTime, body.m_sleepTime); } - else { - this.m_impulse = 0.0; + } + if (minSleepTime >= SettingsInternal.timeToSleep && positionSolved) { + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + body.setAwake(false); } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - RopeJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - // Cdot = dot(u, v + cross(w, r)) - var vpA = Vec2.addCrossNumVec2(vA, wA, this.m_rA); - var vpB = Vec2.addCrossNumVec2(vB, wB, this.m_rB); - var C = this.m_length - this.m_maxLength; - var Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA)); - // Predictive constraint. - if (C < 0.0) { - Cdot += step.inv_dt * C; + } + } + }; + Solver2.prototype.solveWorldTOI = function(step) { + var world = this.m_world; + if (world.m_stepComplete) { + for (var b2 = world.m_bodyList; b2; b2 = b2.m_next) { + b2.m_islandFlag = false; + b2.m_sweep.alpha0 = 0; + } + for (var c_2 = world.m_contactList; c_2; c_2 = c_2.m_next) { + c_2.m_toiFlag = false; + c_2.m_islandFlag = false; + c_2.m_toiCount = 0; + c_2.m_toi = 1; + } + } + while (true) { + var minContact = null; + var minAlpha = 1; + for (var c_3 = world.m_contactList; c_3; c_3 = c_3.m_next) { + if (c_3.isEnabled() == false) { + continue; + } + if (c_3.m_toiCount > SettingsInternal.maxSubSteps) { + continue; + } + var alpha = 1; + if (c_3.m_toiFlag) { + alpha = c_3.m_toi; + } else { + var fA_1 = c_3.getFixtureA(); + var fB_1 = c_3.getFixtureB(); + if (fA_1.isSensor() || fB_1.isSensor()) { + continue; + } + var bA_1 = fA_1.getBody(); + var bB_1 = fB_1.getBody(); + var activeA = bA_1.isAwake() && !bA_1.isStatic(); + var activeB = bB_1.isAwake() && !bB_1.isStatic(); + if (activeA == false && activeB == false) { + continue; + } + var collideA = bA_1.isBullet() || !bA_1.isDynamic(); + var collideB = bB_1.isBullet() || !bB_1.isDynamic(); + if (collideA == false && collideB == false) { + continue; + } + var alpha0 = bA_1.m_sweep.alpha0; + if (bA_1.m_sweep.alpha0 < bB_1.m_sweep.alpha0) { + alpha0 = bB_1.m_sweep.alpha0; + bA_1.m_sweep.advance(alpha0); + } else if (bB_1.m_sweep.alpha0 < bA_1.m_sweep.alpha0) { + alpha0 = bA_1.m_sweep.alpha0; + bB_1.m_sweep.advance(alpha0); + } + var indexA = c_3.getChildIndexA(); + var indexB = c_3.getChildIndexB(); + bA_1.m_sweep; + bB_1.m_sweep; + input.proxyA.set(fA_1.getShape(), indexA); + input.proxyB.set(fB_1.getShape(), indexB); + input.sweepA.set(bA_1.m_sweep); + input.sweepB.set(bB_1.m_sweep); + input.tMax = 1; + TimeOfImpact(output, input); + var beta = output.t; + if (output.state == exports2.TOIOutputState.e_touching) { + alpha = math_min$6(alpha0 + (1 - alpha0) * beta, 1); + } else { + alpha = 1; + } + c_3.m_toi = alpha; + c_3.m_toiFlag = true; } - var impulse = -this.m_mass * Cdot; - var oldImpulse = this.m_impulse; - this.m_impulse = math_min$2(0.0, this.m_impulse + impulse); - impulse = this.m_impulse - oldImpulse; - var P = Vec2.mulNumVec2(impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - RopeJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); - var u = Vec2.zero(); - u.addCombine(1, cB, 1, rB); - u.subCombine(1, cA, 1, rA); - var length = u.normalize(); - var C = length - this.m_maxLength; - C = clamp$1(C, 0.0, SettingsInternal.maxLinearCorrection); - var impulse = -this.m_mass * C; - var P = Vec2.mulNumVec2(impulse, u); - cA.subMul(this.m_invMassA, P); - aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P); - cB.addMul(this.m_invMassB, P); - aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P); - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return length - this.m_maxLength < SettingsInternal.linearSlop; - }; - RopeJoint.TYPE = "rope-joint"; - return RopeJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$2 = Math.abs; - /** @internal */ var math_PI$2 = Math.PI; - /** @internal */ var DEFAULTS$1 = { - frequencyHz: 0.0, - dampingRatio: 0.0, - }; - /** - * A weld joint essentially glues two bodies together. A weld joint may distort - * somewhat because the island constraint solver is approximate. - */ - var WeldJoint = /** @class */ (function (_super) { - __extends$a(WeldJoint, _super); - function WeldJoint(def, bodyA, bodyB, anchor) { - var _this = this; - // @ts-ignore - if (!(_this instanceof WeldJoint)) { - return new WeldJoint(def, bodyA, bodyB, anchor); + if (alpha < minAlpha) { + minContact = c_3; + minAlpha = alpha; } - def = options(def, DEFAULTS$1); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = WeldJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_impulse = new Vec3(); - _this.m_bias = 0.0; - _this.m_gamma = 0.0; - // Solver temp - _this.m_rA; - _this.m_rB; - _this.m_localCenterA; - _this.m_localCenterB; - _this.m_invMassA; - _this.m_invMassB; - _this.m_invIA; - _this.m_invIB; - _this.m_mass = new Mat33(); - return _this; - // Point-to-point constraint - // C = p2 - p1 - // Cdot = v2 - v1 - // / = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // Angle constraint - // C = angle2 - angle1 - referenceAngle - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 - } - /** @internal */ - WeldJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - referenceAngle: this.m_referenceAngle, - }; - }; - /** @internal */ - WeldJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new WeldJoint(data); - return joint; - }; - /** @hidden */ - WeldJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } + if (minContact == null || 1 - 10 * EPSILON < minAlpha) { + world.m_stepComplete = true; + break; + } + var fA = minContact.getFixtureA(); + var fB = minContact.getFixtureB(); + var bA = fA.getBody(); + var bB = fB.getBody(); + backup1.set(bA.m_sweep); + backup2.set(bB.m_sweep); + bA.advance(minAlpha); + bB.advance(minAlpha); + minContact.update(world); + minContact.m_toiFlag = false; + ++minContact.m_toiCount; + if (minContact.isEnabled() == false || minContact.isTouching() == false) { + minContact.setEnabled(false); + bA.m_sweep.set(backup1); + bB.m_sweep.set(backup2); + bA.synchronizeTransform(); + bB.synchronizeTransform(); + continue; + } + bA.setAwake(true); + bB.setAwake(true); + this.clear(); + this.addBody(bA); + this.addBody(bB); + this.addContact(minContact); + bA.m_islandFlag = true; + bB.m_islandFlag = true; + minContact.m_islandFlag = true; + var bodies = [bA, bB]; + for (var i = 0; i < bodies.length; ++i) { + var body = bodies[i]; + if (body.isDynamic()) { + for (var ce = body.m_contactList; ce; ce = ce.next) { + var contact = ce.contact; + if (contact.m_islandFlag) { + continue; + } + var other = ce.other; + if (other.isDynamic() && !body.isBullet() && !other.isBullet()) { + continue; + } + var sensorA = contact.m_fixtureA.m_isSensor; + var sensorB = contact.m_fixtureB.m_isSensor; + if (sensorA || sensorB) { + continue; + } + backup.set(other.m_sweep); + if (other.m_islandFlag == false) { + other.advance(minAlpha); + } + contact.update(world); + if (contact.isEnabled() == false || contact.isTouching() == false) { + other.m_sweep.set(backup); + other.synchronizeTransform(); + continue; + } + contact.m_islandFlag = true; + this.addContact(contact); + if (other.m_islandFlag) { + continue; + } + other.m_islandFlag = true; + if (!other.isStatic()) { + other.setAwake(true); + } + this.addBody(other); + } } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); + } + s_subStep.reset((1 - minAlpha) * step.dt); + s_subStep.dtRatio = 1; + s_subStep.positionIterations = 20; + s_subStep.velocityIterations = step.velocityIterations; + s_subStep.warmStarting = false; + this.solveIslandTOI(s_subStep, bA, bB); + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + body.m_islandFlag = false; + if (!body.isDynamic()) { + continue; } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + body.synchronizeFixtures(); + for (var ce = body.m_contactList; ce; ce = ce.next) { + ce.contact.m_toiFlag = false; + ce.contact.m_islandFlag = false; } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); + } + world.findNewContacts(); + if (world.m_subStepping) { + world.m_stepComplete = false; + break; + } + } + }; + Solver2.prototype.solveIslandTOI = function(subStep, toiA, toiB) { + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(body.c_position.c, body.m_sweep.c); + body.c_position.a = body.m_sweep.a; + copyVec2(body.c_velocity.v, body.m_linearVelocity); + body.c_velocity.w = body.m_angularVelocity; + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initConstraint(subStep); + } + for (var i = 0; i < subStep.positionIterations; ++i) { + var minSeparation = 0; + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + var separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB); + minSeparation = math_min$6(minSeparation, separation); + } + var contactsOkay = minSeparation >= -1.5 * SettingsInternal.linearSlop; + if (contactsOkay) { + break; + } + } + var i; + copyVec2(toiA.m_sweep.c0, toiA.c_position.c); + toiA.m_sweep.a0 = toiA.c_position.a; + copyVec2(toiB.m_sweep.c0, toiB.c_position.c); + toiB.m_sweep.a0 = toiB.c_position.a; + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initVelocityConstraint(subStep); + } + for (var i = 0; i < subStep.velocityIterations; ++i) { + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + contact.solveVelocityConstraint(subStep); + } + } + var h = subStep.dt; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(c, body.c_position.c); + var a2 = body.c_position.a; + copyVec2(v, body.c_velocity.v); + var w = body.c_velocity.w; + scaleVec2(translation, h, v); + var translationLengthSqr = lengthSqrVec2(translation); + if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { + var ratio = SettingsInternal.maxTranslation / math_sqrt$5(translationLengthSqr); + mulVec2(v, ratio); + } + var rotation2 = h * w; + if (rotation2 * rotation2 > SettingsInternal.maxRotationSquared) { + var ratio = SettingsInternal.maxRotation / math_abs$7(rotation2); + w *= ratio; + } + plusScaleVec2(c, h, v); + a2 += h * w; + copyVec2(body.c_position.c, c); + body.c_position.a = a2; + copyVec2(body.c_velocity.v, v); + body.c_velocity.w = w; + copyVec2(body.m_sweep.c, c); + body.m_sweep.a = a2; + copyVec2(body.m_linearVelocity, v); + body.m_angularVelocity = w; + body.synchronizeTransform(); + } + this.postSolveIsland(); + }; + Solver2.prototype.postSolveIsland = function() { + for (var c_5 = 0; c_5 < this.m_contacts.length; ++c_5) { + var contact = this.m_contacts[c_5]; + this.m_world.postSolve(contact, contact.m_impulse); + } + }; + return Solver2; + }() + ); + Solver.TimeStep = TimeStep; + var Mat22 = ( + /** @class */ + function() { + function Mat222(a2, b2, c2, d2) { + if (typeof a2 === "object" && a2 !== null) { + this.ex = Vec2.clone(a2); + this.ey = Vec2.clone(b2); + } else if (typeof a2 === "number") { + this.ex = Vec2.neo(a2, c2); + this.ey = Vec2.neo(b2, d2); + } else { + this.ex = Vec2.zero(); + this.ey = Vec2.zero(); + } + } + Mat222.prototype.toString = function() { + return JSON.stringify(this); + }; + Mat222.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey); + }; + Mat222.assert = function(o) { + }; + Mat222.prototype.set = function(a2, b2, c2, d2) { + if (typeof a2 === "number" && typeof b2 === "number" && typeof c2 === "number" && typeof d2 === "number") { + this.ex.setNum(a2, c2); + this.ey.setNum(b2, d2); + } else if (typeof a2 === "object" && typeof b2 === "object") { + this.ex.setVec2(a2); + this.ey.setVec2(b2); + } else if (typeof a2 === "object") { + this.ex.setVec2(a2.ex); + this.ey.setVec2(a2.ey); + } else ; + }; + Mat222.prototype.setIdentity = function() { + this.ex.x = 1; + this.ey.x = 0; + this.ex.y = 0; + this.ey.y = 1; + }; + Mat222.prototype.setZero = function() { + this.ex.x = 0; + this.ey.x = 0; + this.ex.y = 0; + this.ey.y = 0; + }; + Mat222.prototype.getInverse = function() { + var a2 = this.ex.x; + var b2 = this.ey.x; + var c2 = this.ex.y; + var d2 = this.ey.y; + var det = a2 * d2 - b2 * c2; + if (det !== 0) { + det = 1 / det; + } + var imx = new Mat222(); + imx.ex.x = det * d2; + imx.ey.x = -det * b2; + imx.ex.y = -det * c2; + imx.ey.y = det * a2; + return imx; + }; + Mat222.prototype.solve = function(v3) { + var a2 = this.ex.x; + var b2 = this.ey.x; + var c2 = this.ex.y; + var d2 = this.ey.y; + var det = a2 * d2 - b2 * c2; + if (det !== 0) { + det = 1 / det; + } + var w = Vec2.zero(); + w.x = det * (d2 * v3.x - b2 * v3.y); + w.y = det * (a2 * v3.y - c2 * v3.x); + return w; + }; + Mat222.mul = function(mx, v3) { + if (v3 && "x" in v3 && "y" in v3) { + var x2 = mx.ex.x * v3.x + mx.ey.x * v3.y; + var y = mx.ex.y * v3.x + mx.ey.y * v3.y; + return Vec2.neo(x2, y); + } else if (v3 && "ex" in v3 && "ey" in v3) { + var a2 = mx.ex.x * v3.ex.x + mx.ey.x * v3.ex.y; + var b2 = mx.ex.x * v3.ey.x + mx.ey.x * v3.ey.y; + var c2 = mx.ex.y * v3.ex.x + mx.ey.y * v3.ex.y; + var d2 = mx.ex.y * v3.ey.x + mx.ey.y * v3.ey.y; + return new Mat222(a2, b2, c2, d2); + } + }; + Mat222.mulVec2 = function(mx, v3) { + var x2 = mx.ex.x * v3.x + mx.ey.x * v3.y; + var y = mx.ex.y * v3.x + mx.ey.y * v3.y; + return Vec2.neo(x2, y); + }; + Mat222.mulMat22 = function(mx, v3) { + var a2 = mx.ex.x * v3.ex.x + mx.ey.x * v3.ex.y; + var b2 = mx.ex.x * v3.ey.x + mx.ey.x * v3.ey.y; + var c2 = mx.ex.y * v3.ex.x + mx.ey.y * v3.ex.y; + var d2 = mx.ex.y * v3.ey.x + mx.ey.y * v3.ey.y; + return new Mat222(a2, b2, c2, d2); + }; + Mat222.mulT = function(mx, v3) { + if (v3 && "x" in v3 && "y" in v3) { + return Vec2.neo(Vec2.dot(v3, mx.ex), Vec2.dot(v3, mx.ey)); + } else if (v3 && "ex" in v3 && "ey" in v3) { + var c1 = Vec2.neo(Vec2.dot(mx.ex, v3.ex), Vec2.dot(mx.ey, v3.ex)); + var c2 = Vec2.neo(Vec2.dot(mx.ex, v3.ey), Vec2.dot(mx.ey, v3.ey)); + return new Mat222(c1, c2); + } + }; + Mat222.mulTVec2 = function(mx, v3) { + return Vec2.neo(Vec2.dot(v3, mx.ex), Vec2.dot(v3, mx.ey)); + }; + Mat222.mulTMat22 = function(mx, v3) { + var c1 = Vec2.neo(Vec2.dot(mx.ex, v3.ex), Vec2.dot(mx.ey, v3.ex)); + var c2 = Vec2.neo(Vec2.dot(mx.ex, v3.ey), Vec2.dot(mx.ey, v3.ey)); + return new Mat222(c1, c2); + }; + Mat222.abs = function(mx) { + return new Mat222(Vec2.abs(mx.ex), Vec2.abs(mx.ey)); + }; + Mat222.add = function(mx1, mx2) { + return new Mat222(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey)); + }; + return Mat222; + }() + ); + var math_sqrt$4 = Math.sqrt; + var pointA$1 = vec2(0, 0); + var pointB$1 = vec2(0, 0); + var temp$3 = vec2(0, 0); + var cA$1 = vec2(0, 0); + var cB$1 = vec2(0, 0); + var dist = vec2(0, 0); + var planePoint$2 = vec2(0, 0); + var clipPoint$1 = vec2(0, 0); + exports2.ManifoldType = void 0; + (function(ManifoldType2) { + ManifoldType2[ManifoldType2["e_unset"] = -1] = "e_unset"; + ManifoldType2[ManifoldType2["e_circles"] = 0] = "e_circles"; + ManifoldType2[ManifoldType2["e_faceA"] = 1] = "e_faceA"; + ManifoldType2[ManifoldType2["e_faceB"] = 2] = "e_faceB"; + })(exports2.ManifoldType || (exports2.ManifoldType = {})); + exports2.ContactFeatureType = void 0; + (function(ContactFeatureType2) { + ContactFeatureType2[ContactFeatureType2["e_unset"] = -1] = "e_unset"; + ContactFeatureType2[ContactFeatureType2["e_vertex"] = 0] = "e_vertex"; + ContactFeatureType2[ContactFeatureType2["e_face"] = 1] = "e_face"; + })(exports2.ContactFeatureType || (exports2.ContactFeatureType = {})); + exports2.PointState = void 0; + (function(PointState2) { + PointState2[PointState2["nullState"] = 0] = "nullState"; + PointState2[PointState2["addState"] = 1] = "addState"; + PointState2[PointState2["persistState"] = 2] = "persistState"; + PointState2[PointState2["removeState"] = 3] = "removeState"; + })(exports2.PointState || (exports2.PointState = {})); + var ClipVertex = ( + /** @class */ + function() { + function ClipVertex2() { + this.v = vec2(0, 0); + this.id = new ContactID(); + } + ClipVertex2.prototype.set = function(o) { + copyVec2(this.v, o.v); + this.id.set(o.id); + }; + ClipVertex2.prototype.recycle = function() { + zeroVec2(this.v); + this.id.recycle(); + }; + return ClipVertex2; + }() + ); + var Manifold = ( + /** @class */ + function() { + function Manifold2() { + this.localNormal = vec2(0, 0); + this.localPoint = vec2(0, 0); + this.points = [new ManifoldPoint(), new ManifoldPoint()]; + this.pointCount = 0; + } + Manifold2.prototype.set = function(that) { + this.type = that.type; + copyVec2(this.localNormal, that.localNormal); + copyVec2(this.localPoint, that.localPoint); + this.pointCount = that.pointCount; + this.points[0].set(that.points[0]); + this.points[1].set(that.points[1]); + }; + Manifold2.prototype.recycle = function() { + this.type = exports2.ManifoldType.e_unset; + zeroVec2(this.localNormal); + zeroVec2(this.localPoint); + this.pointCount = 0; + this.points[0].recycle(); + this.points[1].recycle(); + }; + Manifold2.prototype.getWorldManifold = function(wm, xfA2, radiusA, xfB2, radiusB) { + if (this.pointCount == 0) { + return wm; + } + wm = wm || new WorldManifold(); + wm.pointCount = this.pointCount; + var normal3 = wm.normal; + var points = wm.points; + var separations = wm.separations; + switch (this.type) { + case exports2.ManifoldType.e_circles: { + setVec2(normal3, 1, 0); + var manifoldPoint = this.points[0]; + transformVec2(pointA$1, xfA2, this.localPoint); + transformVec2(pointB$1, xfB2, manifoldPoint.localPoint); + subVec2(dist, pointB$1, pointA$1); + var lengthSqr = lengthSqrVec2(dist); + if (lengthSqr > EPSILON * EPSILON) { + var length_1 = math_sqrt$4(lengthSqr); + scaleVec2(normal3, 1 / length_1, dist); + } + combine2Vec2(cA$1, 1, pointA$1, radiusA, normal3); + combine2Vec2(cB$1, 1, pointB$1, -radiusB, normal3); + combine2Vec2(points[0], 0.5, cA$1, 0.5, cB$1); + separations[0] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal3); + break; + } + case exports2.ManifoldType.e_faceA: { + rotVec2(normal3, xfA2.q, this.localNormal); + transformVec2(planePoint$2, xfA2, this.localPoint); + for (var i = 0; i < this.pointCount; ++i) { + var manifoldPoint = this.points[i]; + transformVec2(clipPoint$1, xfB2, manifoldPoint.localPoint); + combine2Vec2(cA$1, 1, clipPoint$1, radiusA - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal3), normal3); + combine2Vec2(cB$1, 1, clipPoint$1, -radiusB, normal3); + combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); + separations[i] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal3); } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; + break; + } + case exports2.ManifoldType.e_faceB: { + rotVec2(normal3, xfB2.q, this.localNormal); + transformVec2(planePoint$2, xfB2, this.localPoint); + for (var i = 0; i < this.pointCount; ++i) { + var manifoldPoint = this.points[i]; + transformVec2(clipPoint$1, xfA2, manifoldPoint.localPoint); + combine2Vec2(cB$1, 1, clipPoint$1, radiusB - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal3), normal3); + combine2Vec2(cA$1, 1, clipPoint$1, -radiusA, normal3); + combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); + separations[i] = dotVec2(subVec2(temp$3, cA$1, cB$1), normal3); + } + negVec2(normal3); + break; + } + } + return wm; + }; + Manifold2.clipSegmentToLine = clipSegmentToLine; + Manifold2.ClipVertex = ClipVertex; + Manifold2.getPointStates = getPointStates; + Manifold2.PointState = exports2.PointState; + return Manifold2; + }() + ); + var ManifoldPoint = ( + /** @class */ + function() { + function ManifoldPoint2() { + this.localPoint = vec2(0, 0); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.id = new ContactID(); + } + ManifoldPoint2.prototype.set = function(that) { + copyVec2(this.localPoint, that.localPoint); + this.normalImpulse = that.normalImpulse; + this.tangentImpulse = that.tangentImpulse; + this.id.set(that.id); + }; + ManifoldPoint2.prototype.recycle = function() { + zeroVec2(this.localPoint); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.id.recycle(); + }; + return ManifoldPoint2; + }() + ); + var ContactID = ( + /** @class */ + function() { + function ContactID2() { + this.key = -1; + this.indexA = -1; + this.indexB = -1; + this.typeA = exports2.ContactFeatureType.e_unset; + this.typeB = exports2.ContactFeatureType.e_unset; + } + ContactID2.prototype.setFeatures = function(indexA, typeA, indexB, typeB) { + this.indexA = indexA; + this.indexB = indexB; + this.typeA = typeA; + this.typeB = typeB; + this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; + }; + ContactID2.prototype.set = function(that) { + this.indexA = that.indexA; + this.indexB = that.indexB; + this.typeA = that.typeA; + this.typeB = that.typeB; + this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; + }; + ContactID2.prototype.swapFeatures = function() { + var indexA = this.indexA; + var indexB = this.indexB; + var typeA = this.typeA; + var typeB = this.typeB; + this.indexA = indexB; + this.indexB = indexA; + this.typeA = typeB; + this.typeB = typeA; + this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; + }; + ContactID2.prototype.recycle = function() { + this.indexA = 0; + this.indexB = 0; + this.typeA = exports2.ContactFeatureType.e_unset; + this.typeB = exports2.ContactFeatureType.e_unset; + this.key = -1; + }; + return ContactID2; + }() + ); + var WorldManifold = ( + /** @class */ + function() { + function WorldManifold2() { + this.normal = vec2(0, 0); + this.points = [vec2(0, 0), vec2(0, 0)]; + this.separations = [0, 0]; + this.pointCount = 0; + } + WorldManifold2.prototype.recycle = function() { + zeroVec2(this.normal); + zeroVec2(this.points[0]); + zeroVec2(this.points[1]); + this.separations[0] = 0; + this.separations[1] = 0; + this.pointCount = 0; + }; + return WorldManifold2; + }() + ); + function getPointStates(state1, state2, manifold1, manifold2) { + for (var i = 0; i < manifold1.pointCount; ++i) { + var id = manifold1.points[i].id; + state1[i] = exports2.PointState.removeState; + for (var j = 0; j < manifold2.pointCount; ++j) { + if (manifold2.points[j].id.key === id.key) { + state1[i] = exports2.PointState.persistState; + break; + } + } + } + for (var i = 0; i < manifold2.pointCount; ++i) { + var id = manifold2.points[i].id; + state2[i] = exports2.PointState.addState; + for (var j = 0; j < manifold1.pointCount; ++j) { + if (manifold1.points[j].id.key === id.key) { + state2[i] = exports2.PointState.persistState; + break; + } + } + } + } + function clipSegmentToLine(vOut, vIn, normal3, offset, vertexIndexA) { + var numOut = 0; + var distance0 = dotVec2(normal3, vIn[0].v) - offset; + var distance1 = dotVec2(normal3, vIn[1].v) - offset; + if (distance0 <= 0) + vOut[numOut++].set(vIn[0]); + if (distance1 <= 0) + vOut[numOut++].set(vIn[1]); + if (distance0 * distance1 < 0) { + var interp = distance0 / (distance0 - distance1); + combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v); + vOut[numOut].id.setFeatures(vertexIndexA, exports2.ContactFeatureType.e_vertex, vIn[0].id.indexB, exports2.ContactFeatureType.e_face); + ++numOut; + } + return numOut; + } + var math_sqrt$3 = Math.sqrt; + var math_max$3 = Math.max; + var math_min$5 = Math.min; + var contactPool = new Pool({ + create: function() { + return new Contact(); + }, + release: function(contact) { + contact.recycle(); + } + }); + var oldManifold = new Manifold(); + var worldManifold = new WorldManifold(); + var ContactEdge = ( + /** @class */ + function() { + function ContactEdge2(contact) { + this.prev = null; + this.next = null; + this.other = null; + this.contact = contact; + } + ContactEdge2.prototype.recycle = function() { + this.prev = null; + this.next = null; + this.other = null; + }; + return ContactEdge2; + }() + ); + function mixFriction(friction1, friction2) { + return math_sqrt$3(friction1 * friction2); + } + function mixRestitution(restitution1, restitution2) { + return restitution1 > restitution2 ? restitution1 : restitution2; + } + var s_registers = []; + var VelocityConstraintPoint = ( + /** @class */ + function() { + function VelocityConstraintPoint2() { + this.rA = vec2(0, 0); + this.rB = vec2(0, 0); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.normalMass = 0; + this.tangentMass = 0; + this.velocityBias = 0; + } + VelocityConstraintPoint2.prototype.recycle = function() { + zeroVec2(this.rA); + zeroVec2(this.rB); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.normalMass = 0; + this.tangentMass = 0; + this.velocityBias = 0; + }; + return VelocityConstraintPoint2; + }() + ); + var cA = vec2(0, 0); + var vA = vec2(0, 0); + var cB = vec2(0, 0); + var vB = vec2(0, 0); + var tangent$1 = vec2(0, 0); + var xfA = transform(0, 0, 0); + var xfB = transform(0, 0, 0); + var pointA = vec2(0, 0); + var pointB = vec2(0, 0); + var clipPoint = vec2(0, 0); + var planePoint$1 = vec2(0, 0); + var rA = vec2(0, 0); + var rB = vec2(0, 0); + var P$1 = vec2(0, 0); + var normal$2 = vec2(0, 0); + var point = vec2(0, 0); + var dv = vec2(0, 0); + var dv1 = vec2(0, 0); + var dv2 = vec2(0, 0); + var b = vec2(0, 0); + var a = vec2(0, 0); + var x = vec2(0, 0); + var d = vec2(0, 0); + var P1 = vec2(0, 0); + var P2 = vec2(0, 0); + var temp$2 = vec2(0, 0); + var Contact = ( + /** @class */ + function() { + function Contact2() { + this.m_nodeA = new ContactEdge(this); + this.m_nodeB = new ContactEdge(this); + this.m_fixtureA = null; + this.m_fixtureB = null; + this.m_indexA = -1; + this.m_indexB = -1; + this.m_evaluateFcn = null; + this.m_manifold = new Manifold(); + this.m_prev = null; + this.m_next = null; + this.m_toi = 1; + this.m_toiCount = 0; + this.m_toiFlag = false; + this.m_friction = 0; + this.m_restitution = 0; + this.m_tangentSpeed = 0; + this.m_enabledFlag = true; + this.m_islandFlag = false; + this.m_touchingFlag = false; + this.m_filterFlag = false; + this.m_bulletHitFlag = false; + this.m_impulse = new ContactImpulse(this); + this.v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; + this.v_normal = vec2(0, 0); + this.v_normalMass = new Mat22(); + this.v_K = new Mat22(); + this.v_pointCount = 0; + this.v_tangentSpeed = 0; + this.v_friction = 0; + this.v_restitution = 0; + this.v_invMassA = 0; + this.v_invMassB = 0; + this.v_invIA = 0; + this.v_invIB = 0; + this.p_localPoints = [vec2(0, 0), vec2(0, 0)]; + this.p_localNormal = vec2(0, 0); + this.p_localPoint = vec2(0, 0); + this.p_localCenterA = vec2(0, 0); + this.p_localCenterB = vec2(0, 0); + this.p_type = exports2.ManifoldType.e_unset; + this.p_radiusA = 0; + this.p_radiusB = 0; + this.p_pointCount = 0; + this.p_invMassA = 0; + this.p_invMassB = 0; + this.p_invIA = 0; + this.p_invIB = 0; + } + Contact2.prototype.initialize = function(fA, indexA, fB, indexB, evaluateFcn) { + this.m_fixtureA = fA; + this.m_fixtureB = fB; + this.m_indexA = indexA; + this.m_indexB = indexB; + this.m_evaluateFcn = evaluateFcn; + this.m_friction = mixFriction(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction); + this.m_restitution = mixRestitution(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution); + }; + Contact2.prototype.recycle = function() { + this.m_nodeA.recycle(); + this.m_nodeB.recycle(); + this.m_fixtureA = null; + this.m_fixtureB = null; + this.m_indexA = -1; + this.m_indexB = -1; + this.m_evaluateFcn = null; + this.m_manifold.recycle(); + this.m_prev = null; + this.m_next = null; + this.m_toi = 1; + this.m_toiCount = 0; + this.m_toiFlag = false; + this.m_friction = 0; + this.m_restitution = 0; + this.m_tangentSpeed = 0; + this.m_enabledFlag = true; + this.m_islandFlag = false; + this.m_touchingFlag = false; + this.m_filterFlag = false; + this.m_bulletHitFlag = false; + this.m_impulse.recycle(); + for (var _i = 0, _a2 = this.v_points; _i < _a2.length; _i++) { + var point_1 = _a2[_i]; + point_1.recycle(); + } + zeroVec2(this.v_normal); + this.v_normalMass.setZero(); + this.v_K.setZero(); + this.v_pointCount = 0; + this.v_tangentSpeed = 0; + this.v_friction = 0; + this.v_restitution = 0; + this.v_invMassA = 0; + this.v_invMassB = 0; + this.v_invIA = 0; + this.v_invIB = 0; + for (var _b = 0, _c = this.p_localPoints; _b < _c.length; _b++) { + var point_2 = _c[_b]; + zeroVec2(point_2); + } + zeroVec2(this.p_localNormal); + zeroVec2(this.p_localPoint); + zeroVec2(this.p_localCenterA); + zeroVec2(this.p_localCenterB); + this.p_type = exports2.ManifoldType.e_unset; + this.p_radiusA = 0; + this.p_radiusB = 0; + this.p_pointCount = 0; + this.p_invMassA = 0; + this.p_invMassB = 0; + this.p_invIA = 0; + this.p_invIB = 0; + }; + Contact2.prototype.initConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var shapeA = fixtureA.m_shape; + var shapeB = fixtureB.m_shape; + if (shapeA === null || shapeB === null) + return; + var manifold = this.m_manifold; + var pointCount = manifold.pointCount; + this.v_invMassA = bodyA.m_invMass; + this.v_invMassB = bodyB.m_invMass; + this.v_invIA = bodyA.m_invI; + this.v_invIB = bodyB.m_invI; + this.v_friction = this.m_friction; + this.v_restitution = this.m_restitution; + this.v_tangentSpeed = this.m_tangentSpeed; + this.v_pointCount = pointCount; + this.v_K.setZero(); + this.v_normalMass.setZero(); + this.p_invMassA = bodyA.m_invMass; + this.p_invMassB = bodyB.m_invMass; + this.p_invIA = bodyA.m_invI; + this.p_invIB = bodyB.m_invI; + copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter); + copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter); + this.p_radiusA = shapeA.m_radius; + this.p_radiusB = shapeB.m_radius; + this.p_type = manifold.type; + copyVec2(this.p_localNormal, manifold.localNormal); + copyVec2(this.p_localPoint, manifold.localPoint); + this.p_pointCount = pointCount; + for (var j = 0; j < SettingsInternal.maxManifoldPoints; ++j) { + this.v_points[j].recycle(); + zeroVec2(this.p_localPoints[j]); + } + for (var j = 0; j < pointCount; ++j) { + var cp = manifold.points[j]; + var vcp = this.v_points[j]; + if (step.warmStarting) { + vcp.normalImpulse = step.dtRatio * cp.normalImpulse; + vcp.tangentImpulse = step.dtRatio * cp.tangentImpulse; + } + copyVec2(this.p_localPoints[j], cp.localPoint); + } + }; + Contact2.prototype.getManifold = function() { + return this.m_manifold; + }; + Contact2.prototype.getWorldManifold = function(worldManifold2) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var shapeA = fixtureA.m_shape; + var shapeB = fixtureB.m_shape; + if (shapeA === null || shapeB === null) + return; + return this.m_manifold.getWorldManifold(worldManifold2, bodyA.getTransform(), shapeA.m_radius, bodyB.getTransform(), shapeB.m_radius); + }; + Contact2.prototype.setEnabled = function(flag) { + this.m_enabledFlag = !!flag; + }; + Contact2.prototype.isEnabled = function() { + return this.m_enabledFlag; + }; + Contact2.prototype.isTouching = function() { + return this.m_touchingFlag; + }; + Contact2.prototype.getNext = function() { + return this.m_next; + }; + Contact2.prototype.getFixtureA = function() { + return this.m_fixtureA; + }; + Contact2.prototype.getFixtureB = function() { + return this.m_fixtureB; + }; + Contact2.prototype.getChildIndexA = function() { + return this.m_indexA; + }; + Contact2.prototype.getChildIndexB = function() { + return this.m_indexB; + }; + Contact2.prototype.flagForFiltering = function() { + this.m_filterFlag = true; + }; + Contact2.prototype.setFriction = function(friction) { + this.m_friction = friction; + }; + Contact2.prototype.getFriction = function() { + return this.m_friction; + }; + Contact2.prototype.resetFriction = function() { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction); + }; + Contact2.prototype.setRestitution = function(restitution) { + this.m_restitution = restitution; + }; + Contact2.prototype.getRestitution = function() { + return this.m_restitution; + }; + Contact2.prototype.resetRestitution = function() { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution); + }; + Contact2.prototype.setTangentSpeed = function(speed) { + this.m_tangentSpeed = speed; + }; + Contact2.prototype.getTangentSpeed = function() { + return this.m_tangentSpeed; + }; + Contact2.prototype.evaluate = function(manifold, xfA2, xfB2) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + this.m_evaluateFcn(manifold, xfA2, fixtureA, this.m_indexA, xfB2, fixtureB, this.m_indexB); + }; + Contact2.prototype.update = function(listener) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var shapeA = fixtureA.m_shape; + var shapeB = fixtureB.m_shape; + if (shapeA === null || shapeB === null) + return; + this.m_enabledFlag = true; + var touching = false; + var wasTouching = this.m_touchingFlag; + var sensorA = fixtureA.m_isSensor; + var sensorB = fixtureB.m_isSensor; + var sensor = sensorA || sensorB; + var xfA2 = bodyA.m_xf; + var xfB2 = bodyB.m_xf; + if (sensor) { + touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA2, xfB2); + this.m_manifold.pointCount = 0; + } else { + oldManifold.recycle(); + oldManifold.set(this.m_manifold); + this.m_manifold.recycle(); + this.evaluate(this.m_manifold, xfA2, xfB2); + touching = this.m_manifold.pointCount > 0; + for (var i = 0; i < this.m_manifold.pointCount; ++i) { + var nmp = this.m_manifold.points[i]; + nmp.normalImpulse = 0; + nmp.tangentImpulse = 0; + for (var j = 0; j < oldManifold.pointCount; ++j) { + var omp = oldManifold.points[j]; + if (omp.id.key === nmp.id.key) { + nmp.normalImpulse = omp.normalImpulse; + nmp.tangentImpulse = omp.tangentImpulse; + break; + } } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; + } + if (touching !== wasTouching) { + bodyA.setAwake(true); + bodyB.setAwake(true); + } + } + this.m_touchingFlag = touching; + var hasListener = typeof listener === "object" && listener !== null; + if (!wasTouching && touching && hasListener) { + listener.beginContact(this); + } + if (wasTouching && !touching && hasListener) { + listener.endContact(this); + } + if (!sensor && touching && hasListener && oldManifold) { + listener.preSolve(this, oldManifold); + } + }; + Contact2.prototype.solvePositionConstraint = function(step) { + return this._solvePositionConstraint(step, null, null); + }; + Contact2.prototype.solvePositionConstraintTOI = function(step, toiA, toiB) { + return this._solvePositionConstraint(step, toiA, toiB); + }; + Contact2.prototype._solvePositionConstraint = function(step, toiA, toiB) { + var toi = toiA !== null && toiB !== null ? true : false; + var minSeparation = 0; + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return minSeparation; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return minSeparation; + bodyA.c_velocity; + bodyB.c_velocity; + var positionA = bodyA.c_position; + var positionB = bodyB.c_position; + var localCenterA = this.p_localCenterA; + var localCenterB = this.p_localCenterB; + var mA = 0; + var iA = 0; + if (!toi || (bodyA === toiA || bodyA === toiB)) { + mA = this.p_invMassA; + iA = this.p_invIA; + } + var mB = 0; + var iB = 0; + if (!toi || (bodyB === toiA || bodyB === toiB)) { + mB = this.p_invMassB; + iB = this.p_invIB; + } + copyVec2(cA, positionA.c); + var aA = positionA.a; + copyVec2(cB, positionB.c); + var aB = positionB.a; + for (var j = 0; j < this.p_pointCount; ++j) { + getTransform(xfA, localCenterA, cA, aA); + getTransform(xfB, localCenterB, cB, aB); + var separation = void 0; + switch (this.p_type) { + case exports2.ManifoldType.e_circles: { + transformVec2(pointA, xfA, this.p_localPoint); + transformVec2(pointB, xfB, this.p_localPoints[0]); + subVec2(normal$2, pointB, pointA); + normalizeVec2(normal$2); + combine2Vec2(point, 0.5, pointA, 0.5, pointB); + separation = dotVec2(pointB, normal$2) - dotVec2(pointA, normal$2) - this.p_radiusA - this.p_radiusB; + break; + } + case exports2.ManifoldType.e_faceA: { + rotVec2(normal$2, xfA.q, this.p_localNormal); + transformVec2(planePoint$1, xfA, this.p_localPoint); + transformVec2(clipPoint, xfB, this.p_localPoints[j]); + separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; + copyVec2(point, clipPoint); + break; + } + case exports2.ManifoldType.e_faceB: { + rotVec2(normal$2, xfB.q, this.p_localNormal); + transformVec2(planePoint$1, xfB, this.p_localPoint); + transformVec2(clipPoint, xfA, this.p_localPoints[j]); + separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; + copyVec2(point, clipPoint); + negVec2(normal$2); + break; + } + default: { + return minSeparation; + } + } + subVec2(rA, point, cA); + subVec2(rB, point, cB); + minSeparation = math_min$5(minSeparation, separation); + var baumgarte = toi ? SettingsInternal.toiBaugarte : SettingsInternal.baumgarte; + var linearSlop = SettingsInternal.linearSlop; + var maxLinearCorrection = SettingsInternal.maxLinearCorrection; + var C = clamp$1(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0); + var rnA = crossVec2Vec2(rA, normal$2); + var rnB = crossVec2Vec2(rB, normal$2); + var K = mA + mB + iA * rnA * rnA + iB * rnB * rnB; + var impulse = K > 0 ? -C / K : 0; + scaleVec2(P$1, impulse, normal$2); + minusScaleVec2(cA, mA, P$1); + aA -= iA * crossVec2Vec2(rA, P$1); + plusScaleVec2(cB, mB, P$1); + aB += iB * crossVec2Vec2(rB, P$1); + } + copyVec2(positionA.c, cA); + positionA.a = aA; + copyVec2(positionB.c, cB); + positionB.a = aB; + return minSeparation; + }; + Contact2.prototype.initVelocityConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var velocityA = bodyA.c_velocity; + var velocityB = bodyB.c_velocity; + var positionA = bodyA.c_position; + var positionB = bodyB.c_position; + var radiusA = this.p_radiusA; + var radiusB = this.p_radiusB; + var manifold = this.m_manifold; + var mA = this.v_invMassA; + var mB = this.v_invMassB; + var iA = this.v_invIA; + var iB = this.v_invIB; + var localCenterA = this.p_localCenterA; + var localCenterB = this.p_localCenterB; + copyVec2(cA, positionA.c); + var aA = positionA.a; + copyVec2(vA, velocityA.v); + var wA = velocityA.w; + copyVec2(cB, positionB.c); + var aB = positionB.a; + copyVec2(vB, velocityB.v); + var wB = velocityB.w; + getTransform(xfA, localCenterA, cA, aA); + getTransform(xfB, localCenterB, cB, aB); + worldManifold.recycle(); + manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB); + copyVec2(this.v_normal, worldManifold.normal); + for (var j = 0; j < this.v_pointCount; ++j) { + var vcp = this.v_points[j]; + var wmp = worldManifold.points[j]; + subVec2(vcp.rA, wmp, cA); + subVec2(vcp.rB, wmp, cB); + var rnA = crossVec2Vec2(vcp.rA, this.v_normal); + var rnB = crossVec2Vec2(vcp.rB, this.v_normal); + var kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB; + vcp.normalMass = kNormal > 0 ? 1 / kNormal : 0; + crossVec2Num(tangent$1, this.v_normal, 1); + var rtA = crossVec2Vec2(vcp.rA, tangent$1); + var rtB = crossVec2Vec2(vcp.rB, tangent$1); + var kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB; + vcp.tangentMass = kTangent > 0 ? 1 / kTangent : 0; + vcp.velocityBias = 0; + var vRel = 0; + vRel += dotVec2(this.v_normal, vB); + vRel += dotVec2(this.v_normal, crossNumVec2(temp$2, wB, vcp.rB)); + vRel -= dotVec2(this.v_normal, vA); + vRel -= dotVec2(this.v_normal, crossNumVec2(temp$2, wA, vcp.rA)); + if (vRel < -SettingsInternal.velocityThreshold) { + vcp.velocityBias = -this.v_restitution * vRel; + } + } + if (this.v_pointCount == 2 && step.blockSolve) { + var vcp1 = this.v_points[0]; + var vcp2 = this.v_points[1]; + var rn1A = crossVec2Vec2(vcp1.rA, this.v_normal); + var rn1B = crossVec2Vec2(vcp1.rB, this.v_normal); + var rn2A = crossVec2Vec2(vcp2.rA, this.v_normal); + var rn2B = crossVec2Vec2(vcp2.rB, this.v_normal); + var k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B; + var k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B; + var k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B; + var k_maxConditionNumber = 1e3; + if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) { + this.v_K.ex.setNum(k11, k12); + this.v_K.ey.setNum(k12, k22); + var a_1 = this.v_K.ex.x; + var b_1 = this.v_K.ey.x; + var c2 = this.v_K.ex.y; + var d_1 = this.v_K.ey.y; + var det = a_1 * d_1 - b_1 * c2; + if (det !== 0) { + det = 1 / det; + } + this.v_normalMass.ex.x = det * d_1; + this.v_normalMass.ey.x = -det * b_1; + this.v_normalMass.ex.y = -det * c2; + this.v_normalMass.ey.y = det * a_1; + } else { + this.v_pointCount = 1; + } + } + copyVec2(positionA.c, cA); + positionA.a = aA; + copyVec2(velocityA.v, vA); + velocityA.w = wA; + copyVec2(positionB.c, cB); + positionB.a = aB; + copyVec2(velocityB.v, vB); + velocityB.w = wB; + }; + Contact2.prototype.warmStartConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var velocityA = bodyA.c_velocity; + var velocityB = bodyB.c_velocity; + bodyA.c_position; + bodyB.c_position; + var mA = this.v_invMassA; + var iA = this.v_invIA; + var mB = this.v_invMassB; + var iB = this.v_invIB; + copyVec2(vA, velocityA.v); + var wA = velocityA.w; + copyVec2(vB, velocityB.v); + var wB = velocityB.w; + copyVec2(normal$2, this.v_normal); + crossVec2Num(tangent$1, normal$2, 1); + for (var j = 0; j < this.v_pointCount; ++j) { + var vcp = this.v_points[j]; + combine2Vec2(P$1, vcp.normalImpulse, normal$2, vcp.tangentImpulse, tangent$1); + wA -= iA * crossVec2Vec2(vcp.rA, P$1); + minusScaleVec2(vA, mA, P$1); + wB += iB * crossVec2Vec2(vcp.rB, P$1); + plusScaleVec2(vB, mB, P$1); + } + copyVec2(velocityA.v, vA); + velocityA.w = wA; + copyVec2(velocityB.v, vB); + velocityB.w = wB; + }; + Contact2.prototype.storeConstraintImpulses = function(step) { + var manifold = this.m_manifold; + for (var j = 0; j < this.v_pointCount; ++j) { + manifold.points[j].normalImpulse = this.v_points[j].normalImpulse; + manifold.points[j].tangentImpulse = this.v_points[j].tangentImpulse; + } + }; + Contact2.prototype.solveVelocityConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var velocityA = bodyA.c_velocity; + bodyA.c_position; + var velocityB = bodyB.c_velocity; + bodyB.c_position; + var mA = this.v_invMassA; + var iA = this.v_invIA; + var mB = this.v_invMassB; + var iB = this.v_invIB; + copyVec2(vA, velocityA.v); + var wA = velocityA.w; + copyVec2(vB, velocityB.v); + var wB = velocityB.w; + copyVec2(normal$2, this.v_normal); + crossVec2Num(tangent$1, normal$2, 1); + var friction = this.v_friction; + for (var j = 0; j < this.v_pointCount; ++j) { + var vcp = this.v_points[j]; + zeroVec2(dv); + plusVec2(dv, vB); + plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); + minusVec2(dv, vA); + minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); + var vt = dotVec2(dv, tangent$1) - this.v_tangentSpeed; + var lambda = vcp.tangentMass * -vt; + var maxFriction = friction * vcp.normalImpulse; + var newImpulse = clamp$1(vcp.tangentImpulse + lambda, -maxFriction, maxFriction); + lambda = newImpulse - vcp.tangentImpulse; + vcp.tangentImpulse = newImpulse; + scaleVec2(P$1, lambda, tangent$1); + minusScaleVec2(vA, mA, P$1); + wA -= iA * crossVec2Vec2(vcp.rA, P$1); + plusScaleVec2(vB, mB, P$1); + wB += iB * crossVec2Vec2(vcp.rB, P$1); + } + if (this.v_pointCount == 1 || step.blockSolve == false) { + for (var i = 0; i < this.v_pointCount; ++i) { + var vcp = this.v_points[i]; + zeroVec2(dv); + plusVec2(dv, vB); + plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); + minusVec2(dv, vA); + minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); + var vn = dotVec2(dv, normal$2); + var lambda = -vcp.normalMass * (vn - vcp.velocityBias); + var newImpulse = math_max$3(vcp.normalImpulse + lambda, 0); + lambda = newImpulse - vcp.normalImpulse; + vcp.normalImpulse = newImpulse; + scaleVec2(P$1, lambda, normal$2); + minusScaleVec2(vA, mA, P$1); + wA -= iA * crossVec2Vec2(vcp.rA, P$1); + plusScaleVec2(vB, mB, P$1); + wB += iB * crossVec2Vec2(vcp.rB, P$1); + } + } else { + var vcp1 = this.v_points[0]; + var vcp2 = this.v_points[1]; + setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse); + zeroVec2(dv1); + plusVec2(dv1, vB); + plusVec2(dv1, crossNumVec2(temp$2, wB, vcp1.rB)); + minusVec2(dv1, vA); + minusVec2(dv1, crossNumVec2(temp$2, wA, vcp1.rA)); + zeroVec2(dv2); + plusVec2(dv2, vB); + plusVec2(dv2, crossNumVec2(temp$2, wB, vcp2.rB)); + minusVec2(dv2, vA); + minusVec2(dv2, crossNumVec2(temp$2, wA, vcp2.rA)); + var vn1 = dotVec2(dv1, normal$2); + var vn2 = dotVec2(dv2, normal$2); + setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias); + b.x -= this.v_K.ex.x * a.x + this.v_K.ey.x * a.y; + b.y -= this.v_K.ex.y * a.x + this.v_K.ey.y * a.y; + while (true) { + zeroVec2(x); + x.x = -(this.v_normalMass.ex.x * b.x + this.v_normalMass.ey.x * b.y); + x.y = -(this.v_normalMass.ex.y * b.x + this.v_normalMass.ey.y * b.y); + if (x.x >= 0 && x.y >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + x.x = -vcp1.normalMass * b.x; + x.y = 0; + vn1 = 0; + vn2 = this.v_K.ex.y * x.x + b.y; + if (x.x >= 0 && vn2 >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + x.x = 0; + x.y = -vcp2.normalMass * b.y; + vn1 = this.v_K.ey.x * x.y + b.x; + vn2 = 0; + if (x.y >= 0 && vn1 >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + x.x = 0; + x.y = 0; + vn1 = b.x; + vn2 = b.y; + if (vn1 >= 0 && vn2 >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; } + break; + } + } + copyVec2(velocityA.v, vA); + velocityA.w = wA; + copyVec2(velocityB.v, vB); + velocityB.w = wB; + }; + Contact2.addType = function(type1, type2, callback) { + s_registers[type1] = s_registers[type1] || {}; + s_registers[type1][type2] = callback; + }; + Contact2.create = function(fixtureA, indexA, fixtureB, indexB) { + var typeA = fixtureA.m_shape.m_type; + var typeB = fixtureB.m_shape.m_type; + var contact = contactPool.allocate(); + var evaluateFcn; + if (evaluateFcn = s_registers[typeA] && s_registers[typeA][typeB]) { + contact.initialize(fixtureA, indexA, fixtureB, indexB, evaluateFcn); + } else if (evaluateFcn = s_registers[typeB] && s_registers[typeB][typeA]) { + contact.initialize(fixtureB, indexB, fixtureA, indexA, evaluateFcn); + } else { + return null; + } + fixtureA = contact.m_fixtureA; + fixtureB = contact.m_fixtureB; + indexA = contact.getChildIndexA(); + indexB = contact.getChildIndexB(); + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + contact.m_nodeA.contact = contact; + contact.m_nodeA.other = bodyB; + contact.m_nodeA.prev = null; + contact.m_nodeA.next = bodyA.m_contactList; + if (bodyA.m_contactList != null) { + bodyA.m_contactList.prev = contact.m_nodeA; + } + bodyA.m_contactList = contact.m_nodeA; + contact.m_nodeB.contact = contact; + contact.m_nodeB.other = bodyA; + contact.m_nodeB.prev = null; + contact.m_nodeB.next = bodyB.m_contactList; + if (bodyB.m_contactList != null) { + bodyB.m_contactList.prev = contact.m_nodeB; + } + bodyB.m_contactList = contact.m_nodeB; + if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) { + bodyA.setAwake(true); + bodyB.setAwake(true); + } + return contact; + }; + Contact2.destroy = function(contact, listener) { + var fixtureA = contact.m_fixtureA; + var fixtureB = contact.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + if (contact.isTouching()) { + listener.endContact(contact); + } + if (contact.m_nodeA.prev) { + contact.m_nodeA.prev.next = contact.m_nodeA.next; + } + if (contact.m_nodeA.next) { + contact.m_nodeA.next.prev = contact.m_nodeA.prev; + } + if (contact.m_nodeA == bodyA.m_contactList) { + bodyA.m_contactList = contact.m_nodeA.next; + } + if (contact.m_nodeB.prev) { + contact.m_nodeB.prev.next = contact.m_nodeB.next; + } + if (contact.m_nodeB.next) { + contact.m_nodeB.next.prev = contact.m_nodeB.prev; + } + if (contact.m_nodeB == bodyB.m_contactList) { + bodyB.m_contactList = contact.m_nodeB.next; + } + if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) { + bodyA.setAwake(true); + bodyB.setAwake(true); + } + contactPool.release(contact); + }; + return Contact2; + }() + ); + var DEFAULTS$b = { + gravity: Vec2.zero(), + allowSleep: true, + warmStarting: true, + continuousPhysics: true, + subStepping: false, + blockSolve: true, + velocityIterations: 8, + positionIterations: 3 + }; + var World = ( + /** @class */ + function() { + function World2(def) { + if (!(this instanceof World2)) { + return new World2(def); + } + this.s_step = new TimeStep(); + if (!def) { + def = {}; + } else if (Vec2.isValid(def)) { + def = { gravity: def }; + } + def = options(def, DEFAULTS$b); + this.m_solver = new Solver(this); + this.m_broadPhase = new BroadPhase(); + this.m_contactList = null; + this.m_contactCount = 0; + this.m_bodyList = null; + this.m_bodyCount = 0; + this.m_jointList = null; + this.m_jointCount = 0; + this.m_stepComplete = true; + this.m_allowSleep = def.allowSleep; + this.m_gravity = Vec2.clone(def.gravity); + this.m_clearForces = true; + this.m_newFixture = false; + this.m_locked = false; + this.m_warmStarting = def.warmStarting; + this.m_continuousPhysics = def.continuousPhysics; + this.m_subStepping = def.subStepping; + this.m_blockSolve = def.blockSolve; + this.m_velocityIterations = def.velocityIterations; + this.m_positionIterations = def.positionIterations; + this.m_t = 0; + } + World2.prototype._serialize = function() { + var bodies = []; + var joints = []; + for (var b2 = this.getBodyList(); b2; b2 = b2.getNext()) { + bodies.push(b2); + } + for (var j = this.getJointList(); j; j = j.getNext()) { + if (typeof j._serialize === "function") { + joints.push(j); + } + } + return { + gravity: this.m_gravity, + bodies, + joints }; - /** - * The local anchor point relative to bodyA's origin. - */ - WeldJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - WeldJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Get the reference angle. - */ - WeldJoint.prototype.getReferenceAngle = function () { - return this.m_referenceAngle; - }; - /** - * Set frequency in Hz. - */ - WeldJoint.prototype.setFrequency = function (hz) { - this.m_frequencyHz = hz; - }; - /** - * Get frequency in Hz. - */ - WeldJoint.prototype.getFrequency = function () { - return this.m_frequencyHz; - }; - /** - * Set damping ratio. - */ - WeldJoint.prototype.setDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - /** - * Get damping ratio. - */ - WeldJoint.prototype.getDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - WeldJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - WeldJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - WeldJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - WeldJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_impulse.z; - }; - WeldJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // [ 0 -1 0 1] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var K = new Mat33(); - K.ex.x = mA + mB + this.m_rA.y * this.m_rA.y * iA + this.m_rB.y * this.m_rB.y - * iB; - K.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; - K.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; - K.ex.y = K.ey.x; - K.ey.y = mA + mB + this.m_rA.x * this.m_rA.x * iA + this.m_rB.x * this.m_rB.x - * iB; - K.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; - K.ex.z = K.ez.x; - K.ey.z = K.ez.y; - K.ez.z = iA + iB; - if (this.m_frequencyHz > 0.0) { - K.getInverse22(this.m_mass); - var invM = iA + iB; - var m = invM > 0.0 ? 1.0 / invM : 0.0; - var C = aB - aA - this.m_referenceAngle; - // Frequency - var omega = 2.0 * math_PI$2 * this.m_frequencyHz; - // Damping coefficient - var d = 2.0 * m * this.m_dampingRatio * omega; - // Spring stiffness - var k = m * omega * omega; - // magic formulas - var h = step.dt; - this.m_gamma = h * (d + h * k); - this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0; - this.m_bias = C * h * k * this.m_gamma; - invM += this.m_gamma; - this.m_mass.ez.z = invM != 0.0 ? 1.0 / invM : 0.0; - } - else if (K.ez.z == 0.0) { - K.getInverse22(this.m_mass); - this.m_gamma = 0.0; - this.m_bias = 0.0; - } - else { - K.getSymInverse33(this.m_mass); - this.m_gamma = 0.0; - this.m_bias = 0.0; - } - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_impulse.mul(step.dtRatio); - var P = Vec2.neo(this.m_impulse.x, this.m_impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_impulse.z); - } - else { - this.m_impulse.setZero(); + }; + World2._deserialize = function(data, context, restore) { + if (!data) { + return new World2(); + } + var world = new World2(data.gravity); + if (data.bodies) { + for (var i = data.bodies.length - 1; i >= 0; i -= 1) { + world._addBody(restore(Body, data.bodies[i], world)); + } + } + if (data.joints) { + for (var i = data.joints.length - 1; i >= 0; i--) { + world.createJoint(restore(Joint, data.joints[i], world)); + } + } + return world; + }; + World2.prototype.getBodyList = function() { + return this.m_bodyList; + }; + World2.prototype.getJointList = function() { + return this.m_jointList; + }; + World2.prototype.getContactList = function() { + return this.m_contactList; + }; + World2.prototype.getBodyCount = function() { + return this.m_bodyCount; + }; + World2.prototype.getJointCount = function() { + return this.m_jointCount; + }; + World2.prototype.getContactCount = function() { + return this.m_contactCount; + }; + World2.prototype.setGravity = function(gravity) { + this.m_gravity.set(gravity); + }; + World2.prototype.getGravity = function() { + return this.m_gravity; + }; + World2.prototype.isLocked = function() { + return this.m_locked; + }; + World2.prototype.setAllowSleeping = function(flag) { + if (flag == this.m_allowSleep) { + return; + } + this.m_allowSleep = flag; + if (this.m_allowSleep == false) { + for (var b2 = this.m_bodyList; b2; b2 = b2.m_next) { + b2.setAwake(true); + } + } + }; + World2.prototype.getAllowSleeping = function() { + return this.m_allowSleep; + }; + World2.prototype.setWarmStarting = function(flag) { + this.m_warmStarting = flag; + }; + World2.prototype.getWarmStarting = function() { + return this.m_warmStarting; + }; + World2.prototype.setContinuousPhysics = function(flag) { + this.m_continuousPhysics = flag; + }; + World2.prototype.getContinuousPhysics = function() { + return this.m_continuousPhysics; + }; + World2.prototype.setSubStepping = function(flag) { + this.m_subStepping = flag; + }; + World2.prototype.getSubStepping = function() { + return this.m_subStepping; + }; + World2.prototype.setAutoClearForces = function(flag) { + this.m_clearForces = flag; + }; + World2.prototype.getAutoClearForces = function() { + return this.m_clearForces; + }; + World2.prototype.clearForces = function() { + for (var body = this.m_bodyList; body; body = body.getNext()) { + body.m_force.setZero(); + body.m_torque = 0; + } + }; + World2.prototype.queryAABB = function(aabb, callback) { + var broadPhase = this.m_broadPhase; + this.m_broadPhase.query(aabb, function(proxyId) { + var proxy = broadPhase.getUserData(proxyId); + return callback(proxy.fixture); + }); + }; + World2.prototype.rayCast = function(point1, point2, callback) { + var broadPhase = this.m_broadPhase; + this.m_broadPhase.rayCast({ + maxFraction: 1, + p1: point1, + p2: point2 + }, function(input2, proxyId) { + var proxy = broadPhase.getUserData(proxyId); + var fixture = proxy.fixture; + var index = proxy.childIndex; + var output2 = {}; + var hit = fixture.rayCast(output2, input2, index); + if (hit) { + var fraction = output2.fraction; + var point3 = Vec2.add(Vec2.mulNumVec2(1 - fraction, input2.p1), Vec2.mulNumVec2(fraction, input2.p2)); + return callback(fixture, point3, output2.normal, fraction); + } + return input2.maxFraction; + }); + }; + World2.prototype.getProxyCount = function() { + return this.m_broadPhase.getProxyCount(); + }; + World2.prototype.getTreeHeight = function() { + return this.m_broadPhase.getTreeHeight(); + }; + World2.prototype.getTreeBalance = function() { + return this.m_broadPhase.getTreeBalance(); + }; + World2.prototype.getTreeQuality = function() { + return this.m_broadPhase.getTreeQuality(); + }; + World2.prototype.shiftOrigin = function(newOrigin) { + if (this.m_locked) { + return; + } + for (var b2 = this.m_bodyList; b2; b2 = b2.m_next) { + b2.m_xf.p.sub(newOrigin); + b2.m_sweep.c0.sub(newOrigin); + b2.m_sweep.c.sub(newOrigin); + } + for (var j = this.m_jointList; j; j = j.m_next) { + j.shiftOrigin(newOrigin); + } + this.m_broadPhase.shiftOrigin(newOrigin); + }; + World2.prototype._addBody = function(body) { + if (this.isLocked()) { + return; + } + body.m_prev = null; + body.m_next = this.m_bodyList; + if (this.m_bodyList) { + this.m_bodyList.m_prev = body; + } + this.m_bodyList = body; + ++this.m_bodyCount; + }; + World2.prototype.createBody = function(arg1, arg2) { + if (this.isLocked()) { + return null; + } + var def = {}; + if (!arg1) ; + else if (Vec2.isValid(arg1)) { + def = { position: arg1, angle: arg2 }; + } else if (typeof arg1 === "object") { + def = arg1; + } + var body = new Body(this, def); + this._addBody(body); + return body; + }; + World2.prototype.createDynamicBody = function(arg1, arg2) { + var def = {}; + if (!arg1) ; + else if (Vec2.isValid(arg1)) { + def = { position: arg1, angle: arg2 }; + } else if (typeof arg1 === "object") { + def = arg1; + } + def.type = "dynamic"; + return this.createBody(def); + }; + World2.prototype.createKinematicBody = function(arg1, arg2) { + var def = {}; + if (!arg1) ; + else if (Vec2.isValid(arg1)) { + def = { position: arg1, angle: arg2 }; + } else if (typeof arg1 === "object") { + def = arg1; + } + def.type = "kinematic"; + return this.createBody(def); + }; + World2.prototype.destroyBody = function(b2) { + if (this.isLocked()) { + return; + } + if (b2.m_destroyed) { + return false; + } + var je = b2.m_jointList; + while (je) { + var je0 = je; + je = je.next; + this.publish("remove-joint", je0.joint); + this.destroyJoint(je0.joint); + b2.m_jointList = je; + } + b2.m_jointList = null; + var ce = b2.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.destroyContact(ce0.contact); + b2.m_contactList = ce; + } + b2.m_contactList = null; + var f = b2.m_fixtureList; + while (f) { + var f0 = f; + f = f.m_next; + this.publish("remove-fixture", f0); + f0.destroyProxies(this.m_broadPhase); + b2.m_fixtureList = f; + } + b2.m_fixtureList = null; + if (b2.m_prev) { + b2.m_prev.m_next = b2.m_next; + } + if (b2.m_next) { + b2.m_next.m_prev = b2.m_prev; + } + if (b2 == this.m_bodyList) { + this.m_bodyList = b2.m_next; + } + b2.m_destroyed = true; + --this.m_bodyCount; + this.publish("remove-body", b2); + return true; + }; + World2.prototype.createJoint = function(joint) { + if (this.isLocked()) { + return null; + } + joint.m_prev = null; + joint.m_next = this.m_jointList; + if (this.m_jointList) { + this.m_jointList.m_prev = joint; + } + this.m_jointList = joint; + ++this.m_jointCount; + joint.m_edgeA.joint = joint; + joint.m_edgeA.other = joint.m_bodyB; + joint.m_edgeA.prev = null; + joint.m_edgeA.next = joint.m_bodyA.m_jointList; + if (joint.m_bodyA.m_jointList) + joint.m_bodyA.m_jointList.prev = joint.m_edgeA; + joint.m_bodyA.m_jointList = joint.m_edgeA; + joint.m_edgeB.joint = joint; + joint.m_edgeB.other = joint.m_bodyA; + joint.m_edgeB.prev = null; + joint.m_edgeB.next = joint.m_bodyB.m_jointList; + if (joint.m_bodyB.m_jointList) + joint.m_bodyB.m_jointList.prev = joint.m_edgeB; + joint.m_bodyB.m_jointList = joint.m_edgeB; + if (joint.m_collideConnected == false) { + for (var edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) { + if (edge.other == joint.m_bodyA) { + edge.contact.flagForFiltering(); + } + } + } + return joint; + }; + World2.prototype.destroyJoint = function(joint) { + if (this.isLocked()) { + return; + } + if (joint.m_prev) { + joint.m_prev.m_next = joint.m_next; + } + if (joint.m_next) { + joint.m_next.m_prev = joint.m_prev; + } + if (joint == this.m_jointList) { + this.m_jointList = joint.m_next; + } + var bodyA = joint.m_bodyA; + var bodyB = joint.m_bodyB; + bodyA.setAwake(true); + bodyB.setAwake(true); + if (joint.m_edgeA.prev) { + joint.m_edgeA.prev.next = joint.m_edgeA.next; + } + if (joint.m_edgeA.next) { + joint.m_edgeA.next.prev = joint.m_edgeA.prev; + } + if (joint.m_edgeA == bodyA.m_jointList) { + bodyA.m_jointList = joint.m_edgeA.next; + } + joint.m_edgeA.prev = null; + joint.m_edgeA.next = null; + if (joint.m_edgeB.prev) { + joint.m_edgeB.prev.next = joint.m_edgeB.next; + } + if (joint.m_edgeB.next) { + joint.m_edgeB.next.prev = joint.m_edgeB.prev; + } + if (joint.m_edgeB == bodyB.m_jointList) { + bodyB.m_jointList = joint.m_edgeB.next; + } + joint.m_edgeB.prev = null; + joint.m_edgeB.next = null; + --this.m_jointCount; + if (joint.m_collideConnected == false) { + var edge = bodyB.getContactList(); + while (edge) { + if (edge.other == bodyA) { + edge.contact.flagForFiltering(); } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - WeldJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - if (this.m_frequencyHz > 0.0) { - var Cdot2 = wB - wA; - var impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z); - this.m_impulse.z += impulse2; - wA -= iA * impulse2; - wB += iB * impulse2; - var Cdot1 = Vec2.zero(); - Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1)); - this.m_impulse.x += impulse1.x; - this.m_impulse.y += impulse1.y; - var P = Vec2.clone(impulse1); - vA.subMul(mA, P); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(mB, P); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, P); + edge = edge.next; + } + } + this.publish("remove-joint", joint); + }; + World2.prototype.step = function(timeStep, velocityIterations, positionIterations) { + this.publish("pre-step", timeStep); + if ((velocityIterations | 0) !== velocityIterations) { + velocityIterations = 0; + } + velocityIterations = velocityIterations || this.m_velocityIterations; + positionIterations = positionIterations || this.m_positionIterations; + if (this.m_newFixture) { + this.findNewContacts(); + this.m_newFixture = false; + } + this.m_locked = true; + this.s_step.reset(timeStep); + this.s_step.velocityIterations = velocityIterations; + this.s_step.positionIterations = positionIterations; + this.s_step.warmStarting = this.m_warmStarting; + this.s_step.blockSolve = this.m_blockSolve; + this.updateContacts(); + if (this.m_stepComplete && timeStep > 0) { + this.m_solver.solveWorld(this.s_step); + for (var b2 = this.m_bodyList; b2; b2 = b2.getNext()) { + if (b2.m_islandFlag == false) { + continue; + } + if (b2.isStatic()) { + continue; + } + b2.synchronizeFixtures(); + } + this.findNewContacts(); + } + if (this.m_continuousPhysics && timeStep > 0) { + this.m_solver.solveWorldTOI(this.s_step); + } + if (this.m_clearForces) { + this.clearForces(); + } + this.m_locked = false; + this.publish("post-step", timeStep); + }; + World2.prototype.findNewContacts = function() { + var _this = this; + this.m_broadPhase.updatePairs(function(proxyA, proxyB) { + return _this.createContact(proxyA, proxyB); + }); + }; + World2.prototype.createContact = function(proxyA, proxyB) { + var fixtureA = proxyA.fixture; + var fixtureB = proxyB.fixture; + var indexA = proxyA.childIndex; + var indexB = proxyB.childIndex; + var bodyA = fixtureA.getBody(); + var bodyB = fixtureB.getBody(); + if (bodyA == bodyB) { + return; + } + var edge = bodyB.getContactList(); + while (edge) { + if (edge.other == bodyA) { + var fA = edge.contact.getFixtureA(); + var fB = edge.contact.getFixtureB(); + var iA = edge.contact.getChildIndexA(); + var iB = edge.contact.getChildIndexB(); + if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) { + return; } - else { - var Cdot1 = Vec2.zero(); - Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var Cdot2 = wB - wA; - var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); - var impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot)); - this.m_impulse.add(impulse); - var P = Vec2.neo(impulse.x, impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z); + if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) { + return; } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - WeldJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var positionError; - var angularError; - var K = new Mat33(); - K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB; - K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB; - K.ez.x = -rA.y * iA - rB.y * iB; - K.ex.y = K.ey.x; - K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB; - K.ez.y = rA.x * iA + rB.x * iB; - K.ex.z = K.ez.x; - K.ey.z = K.ez.y; - K.ez.z = iA + iB; - if (this.m_frequencyHz > 0.0) { - var C1 = Vec2.zero(); - C1.addCombine(1, cB, 1, rB); - C1.subCombine(1, cA, 1, rA); - positionError = C1.length(); - angularError = 0.0; - var P = Vec2.neg(K.solve22(C1)); - cA.subMul(mA, P); - aA -= iA * Vec2.crossVec2Vec2(rA, P); - cB.addMul(mB, P); - aB += iB * Vec2.crossVec2Vec2(rB, P); + } + edge = edge.next; + } + if (bodyB.shouldCollide(bodyA) == false) { + return; + } + if (fixtureB.shouldCollide(fixtureA) == false) { + return; + } + var contact = Contact.create(fixtureA, indexA, fixtureB, indexB); + if (contact == null) { + return; + } + contact.m_prev = null; + if (this.m_contactList != null) { + contact.m_next = this.m_contactList; + this.m_contactList.m_prev = contact; + } + this.m_contactList = contact; + ++this.m_contactCount; + }; + World2.prototype.updateContacts = function() { + var c2; + var next_c = this.m_contactList; + while (c2 = next_c) { + next_c = c2.getNext(); + var fixtureA = c2.getFixtureA(); + var fixtureB = c2.getFixtureB(); + var indexA = c2.getChildIndexA(); + var indexB = c2.getChildIndexB(); + var bodyA = fixtureA.getBody(); + var bodyB = fixtureB.getBody(); + if (c2.m_filterFlag) { + if (bodyB.shouldCollide(bodyA) == false) { + this.destroyContact(c2); + continue; } - else { - var C1 = Vec2.zero(); - C1.addCombine(1, cB, 1, rB); - C1.subCombine(1, cA, 1, rA); - var C2 = aB - aA - this.m_referenceAngle; - positionError = C1.length(); - angularError = math_abs$2(C2); - var C = new Vec3(C1.x, C1.y, C2); - var impulse = new Vec3(); - if (K.ez.z > 0.0) { - impulse = Vec3.neg(K.solve33(C)); - } - else { - var impulse2 = Vec2.neg(K.solve22(C1)); - impulse.set(impulse2.x, impulse2.y, 0.0); - } - var P = Vec2.neo(impulse.x, impulse.y); - cA.subMul(mA, P); - aA -= iA * (Vec2.crossVec2Vec2(rA, P) + impulse.z); - cB.addMul(mB, P); - aB += iB * (Vec2.crossVec2Vec2(rB, P) + impulse.z); + if (fixtureB.shouldCollide(fixtureA) == false) { + this.destroyContact(c2); + continue; } - this.m_bodyA.c_position.c = cA; - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c = cB; - this.m_bodyB.c_position.a = aB; - return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; + c2.m_filterFlag = false; + } + var activeA = bodyA.isAwake() && !bodyA.isStatic(); + var activeB = bodyB.isAwake() && !bodyB.isStatic(); + if (activeA == false && activeB == false) { + continue; + } + var proxyIdA = fixtureA.m_proxies[indexA].proxyId; + var proxyIdB = fixtureB.m_proxies[indexB].proxyId; + var overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB); + if (overlap == false) { + this.destroyContact(c2); + continue; + } + c2.update(this); + } + }; + World2.prototype.destroyContact = function(contact) { + if (contact.m_prev) { + contact.m_prev.m_next = contact.m_next; + } + if (contact.m_next) { + contact.m_next.m_prev = contact.m_prev; + } + if (contact == this.m_contactList) { + this.m_contactList = contact.m_next; + } + Contact.destroy(contact, this); + --this.m_contactCount; + }; + World2.prototype.on = function(name, listener) { + if (typeof name !== "string" || typeof listener !== "function") { + return this; + } + if (!this._listeners) { + this._listeners = {}; + } + if (!this._listeners[name]) { + this._listeners[name] = []; + } + this._listeners[name].push(listener); + return this; + }; + World2.prototype.off = function(name, listener) { + if (typeof name !== "string" || typeof listener !== "function") { + return this; + } + var listeners = this._listeners && this._listeners[name]; + if (!listeners || !listeners.length) { + return this; + } + var index = listeners.indexOf(listener); + if (index >= 0) { + listeners.splice(index, 1); + } + return this; + }; + World2.prototype.publish = function(name, arg1, arg2, arg3) { + var listeners = this._listeners && this._listeners[name]; + if (!listeners || !listeners.length) { + return 0; + } + for (var l = 0; l < listeners.length; l++) { + listeners[l].call(this, arg1, arg2, arg3); + } + return listeners.length; + }; + World2.prototype.beginContact = function(contact) { + this.publish("begin-contact", contact); + }; + World2.prototype.endContact = function(contact) { + this.publish("end-contact", contact); + }; + World2.prototype.preSolve = function(contact, oldManifold2) { + this.publish("pre-solve", contact, oldManifold2); + }; + World2.prototype.postSolve = function(contact, impulse) { + this.publish("post-solve", contact, impulse); + }; + return World2; + }() + ); + var Vec3 = ( + /** @class */ + function() { + function Vec32(x2, y, z) { + if (!(this instanceof Vec32)) { + return new Vec32(x2, y, z); + } + if (typeof x2 === "undefined") { + this.x = 0; + this.y = 0; + this.z = 0; + } else if (typeof x2 === "object") { + this.x = x2.x; + this.y = x2.y; + this.z = x2.z; + } else { + this.x = x2; + this.y = y; + this.z = z; + } + } + Vec32.prototype._serialize = function() { + return { + x: this.x, + y: this.y, + z: this.z }; - WeldJoint.TYPE = "weld-joint"; - return WeldJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$1 = Math.abs; - /** @internal */ var math_PI$1 = Math.PI; - /** @internal */ var DEFAULTS = { - enableMotor: false, - maxMotorTorque: 0.0, - motorSpeed: 0.0, - frequencyHz: 2.0, - dampingRatio: 0.7, - }; - /** - * A wheel joint. This joint provides two degrees of freedom: translation along - * an axis fixed in bodyA and rotation in the plane. In other words, it is a - * point to line constraint with a rotational motor and a linear spring/damper. - * This joint is designed for vehicle suspensions. - */ - var WheelJoint = /** @class */ (function (_super) { - __extends$a(WheelJoint, _super); - function WheelJoint(def, bodyA, bodyB, anchor, axis) { - var _this = this; - // @ts-ignore - if (!(_this instanceof WheelJoint)) { - return new WheelJoint(def, bodyA, bodyB, anchor, axis); - } - def = options(def, DEFAULTS); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_ax = Vec2.zero(); - _this.m_ay = Vec2.zero(); - _this.m_type = WheelJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - if (Vec2.isValid(axis)) { - _this.m_localXAxisA = bodyA.getLocalVector(axis); - } - else if (Vec2.isValid(def.localAxisA)) { - _this.m_localXAxisA = Vec2.clone(def.localAxisA); - } - else if (Vec2.isValid(def.localAxis)) { - // localAxis is renamed to localAxisA, this is for backward compatibility - _this.m_localXAxisA = Vec2.clone(def.localAxis); - } - else { - _this.m_localXAxisA = Vec2.neo(1.0, 0.0); - } - _this.m_localYAxisA = Vec2.crossNumVec2(1.0, _this.m_localXAxisA); - _this.m_mass = 0.0; - _this.m_impulse = 0.0; - _this.m_motorMass = 0.0; - _this.m_motorImpulse = 0.0; - _this.m_springMass = 0.0; - _this.m_springImpulse = 0.0; - _this.m_maxMotorTorque = def.maxMotorTorque; - _this.m_motorSpeed = def.motorSpeed; - _this.m_enableMotor = def.enableMotor; - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_bias = 0.0; - _this.m_gamma = 0.0; - return _this; - // Linear constraint (point-to-line) - // d = pB - pA = xB + rB - xA - rA - // C = dot(ay, d) - // Cdot = dot(d, cross(wA, ay)) + dot(ay, vB + cross(wB, rB) - vA - cross(wA, - // rA)) - // = -dot(ay, vA) - dot(cross(d + rA, ay), wA) + dot(ay, vB) + dot(cross(rB, - // ay), vB) - // J = [-ay, -cross(d + rA, ay), ay, cross(rB, ay)] - // Spring linear constraint - // C = dot(ax, d) - // Cdot = = -dot(ax, vA) - dot(cross(d + rA, ax), wA) + dot(ax, vB) + - // dot(cross(rB, ax), vB) - // J = [-ax -cross(d+rA, ax) ax cross(rB, ax)] - // Motor rotational constraint - // Cdot = wB - wA - // J = [0 0 -1 0 0 1] - } - /** @internal */ - WheelJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - enableMotor: this.m_enableMotor, - maxMotorTorque: this.m_maxMotorTorque, - motorSpeed: this.m_motorSpeed, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - localAxisA: this.m_localXAxisA, - }; + }; + Vec32._deserialize = function(data) { + var obj = Object.create(Vec32.prototype); + obj.x = data.x; + obj.y = data.y; + obj.z = data.z; + return obj; + }; + Vec32.neo = function(x2, y, z) { + var obj = Object.create(Vec32.prototype); + obj.x = x2; + obj.y = y; + obj.z = z; + return obj; + }; + Vec32.zero = function() { + var obj = Object.create(Vec32.prototype); + obj.x = 0; + obj.y = 0; + obj.z = 0; + return obj; + }; + Vec32.clone = function(v3) { + return Vec32.neo(v3.x, v3.y, v3.z); + }; + Vec32.prototype.toString = function() { + return JSON.stringify(this); + }; + Vec32.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Number.isFinite(obj.x) && Number.isFinite(obj.y) && Number.isFinite(obj.z); + }; + Vec32.assert = function(o) { + }; + Vec32.prototype.setZero = function() { + this.x = 0; + this.y = 0; + this.z = 0; + return this; + }; + Vec32.prototype.set = function(x2, y, z) { + this.x = x2; + this.y = y; + this.z = z; + return this; + }; + Vec32.prototype.add = function(w) { + this.x += w.x; + this.y += w.y; + this.z += w.z; + return this; + }; + Vec32.prototype.sub = function(w) { + this.x -= w.x; + this.y -= w.y; + this.z -= w.z; + return this; + }; + Vec32.prototype.mul = function(m) { + this.x *= m; + this.y *= m; + this.z *= m; + return this; + }; + Vec32.areEqual = function(v3, w) { + 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; + }; + Vec32.dot = function(v3, w) { + return v3.x * w.x + v3.y * w.y + v3.z * w.z; + }; + Vec32.cross = function(v3, w) { + 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); + }; + Vec32.add = function(v3, w) { + return new Vec32(v3.x + w.x, v3.y + w.y, v3.z + w.z); + }; + Vec32.sub = function(v3, w) { + return new Vec32(v3.x - w.x, v3.y - w.y, v3.z - w.z); + }; + Vec32.mul = function(v3, m) { + return new Vec32(m * v3.x, m * v3.y, m * v3.z); + }; + Vec32.prototype.neg = function() { + this.x = -this.x; + this.y = -this.y; + this.z = -this.z; + return this; + }; + Vec32.neg = function(v3) { + return new Vec32(-v3.x, -v3.y, -v3.z); + }; + return Vec32; + }() + ); + var v1$2 = vec2(0, 0); + var v2$1 = vec2(0, 0); + var EdgeShape = ( + /** @class */ + function(_super) { + __extends$a(EdgeShape2, _super); + function EdgeShape2(v122, v22) { + var _this = this; + if (!(_this instanceof EdgeShape2)) { + return new EdgeShape2(v122, v22); + } + _this = _super.call(this) || this; + _this.m_type = EdgeShape2.TYPE; + _this.m_radius = SettingsInternal.polygonRadius; + _this.m_vertex1 = v122 ? Vec2.clone(v122) : Vec2.zero(); + _this.m_vertex2 = v22 ? Vec2.clone(v22) : Vec2.zero(); + _this.m_vertex0 = Vec2.zero(); + _this.m_vertex3 = Vec2.zero(); + _this.m_hasVertex0 = false; + _this.m_hasVertex3 = false; + return _this; + } + EdgeShape2.prototype._serialize = function() { + return { + type: this.m_type, + vertex1: this.m_vertex1, + vertex2: this.m_vertex2, + vertex0: this.m_vertex0, + vertex3: this.m_vertex3, + hasVertex0: this.m_hasVertex0, + hasVertex3: this.m_hasVertex3 }; - /** @internal */ - WheelJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new WheelJoint(data); - return joint; + }; + EdgeShape2._deserialize = function(data) { + var shape = new EdgeShape2(data.vertex1, data.vertex2); + if (shape.m_hasVertex0) { + shape.setPrevVertex(data.vertex0); + } + if (shape.m_hasVertex3) { + shape.setNextVertex(data.vertex3); + } + return shape; + }; + EdgeShape2.prototype._reset = function() { + }; + EdgeShape2.prototype.getRadius = function() { + return this.m_radius; + }; + EdgeShape2.prototype.getType = function() { + return this.m_type; + }; + EdgeShape2.prototype.setNext = function(v3) { + return this.setNextVertex(v3); + }; + EdgeShape2.prototype.setNextVertex = function(v3) { + if (v3) { + this.m_vertex3.setVec2(v3); + this.m_hasVertex3 = true; + } else { + this.m_vertex3.setZero(); + this.m_hasVertex3 = false; + } + return this; + }; + EdgeShape2.prototype.getNextVertex = function() { + return this.m_vertex3; + }; + EdgeShape2.prototype.setPrev = function(v3) { + return this.setPrevVertex(v3); + }; + EdgeShape2.prototype.setPrevVertex = function(v3) { + if (v3) { + this.m_vertex0.setVec2(v3); + this.m_hasVertex0 = true; + } else { + this.m_vertex0.setZero(); + this.m_hasVertex0 = false; + } + return this; + }; + EdgeShape2.prototype.getPrevVertex = function() { + return this.m_vertex0; + }; + EdgeShape2.prototype._set = function(v122, v22) { + this.m_vertex1.setVec2(v122); + this.m_vertex2.setVec2(v22); + this.m_hasVertex0 = false; + this.m_hasVertex3 = false; + return this; + }; + EdgeShape2.prototype._clone = function() { + var clone = new EdgeShape2(); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_vertex1.setVec2(this.m_vertex1); + clone.m_vertex2.setVec2(this.m_vertex2); + clone.m_vertex0.setVec2(this.m_vertex0); + clone.m_vertex3.setVec2(this.m_vertex3); + clone.m_hasVertex0 = this.m_hasVertex0; + clone.m_hasVertex3 = this.m_hasVertex3; + return clone; + }; + EdgeShape2.prototype.getChildCount = function() { + return 1; + }; + EdgeShape2.prototype.testPoint = function(xf2, p) { + return false; + }; + EdgeShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var p1 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p1, xf2.p)); + var p2 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p2, xf2.p)); + var d2 = Vec2.sub(p2, p1); + var v122 = this.m_vertex1; + var v22 = this.m_vertex2; + var e3 = Vec2.sub(v22, v122); + var normal3 = Vec2.neo(e3.y, -e3.x); + normal3.normalize(); + var numerator = Vec2.dot(normal3, Vec2.sub(v122, p1)); + var denominator = Vec2.dot(normal3, d2); + if (denominator == 0) { + return false; + } + var t = numerator / denominator; + if (t < 0 || input2.maxFraction < t) { + return false; + } + var q = Vec2.add(p1, Vec2.mulNumVec2(t, d2)); + var r = Vec2.sub(v22, v122); + var rr = Vec2.dot(r, r); + if (rr == 0) { + return false; + } + var s2 = Vec2.dot(Vec2.sub(q, v122), r) / rr; + if (s2 < 0 || 1 < s2) { + return false; + } + output2.fraction = t; + if (numerator > 0) { + output2.normal = Rot.mulVec2(xf2.q, normal3).neg(); + } else { + output2.normal = Rot.mulVec2(xf2.q, normal3); + } + return true; + }; + EdgeShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + transformVec2(v1$2, xf2, this.m_vertex1); + transformVec2(v2$1, xf2, this.m_vertex2); + AABB.combinePoints(aabb, v1$2, v2$1); + AABB.extend(aabb, this.m_radius); + }; + EdgeShape2.prototype.computeMass = function(massData, density) { + massData.mass = 0; + combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2); + massData.I = 0; + }; + EdgeShape2.prototype.computeDistanceProxy = function(proxy) { + proxy.m_vertices[0] = this.m_vertex1; + proxy.m_vertices[1] = this.m_vertex2; + proxy.m_vertices.length = 2; + proxy.m_count = 2; + proxy.m_radius = this.m_radius; + }; + EdgeShape2.TYPE = "edge"; + return EdgeShape2; + }(Shape) + ); + var Edge = EdgeShape; + var v1$1 = vec2(0, 0); + var v2 = vec2(0, 0); + var ChainShape = ( + /** @class */ + function(_super) { + __extends$a(ChainShape2, _super); + function ChainShape2(vertices, loop) { + var _this = this; + if (!(_this instanceof ChainShape2)) { + return new ChainShape2(vertices, loop); + } + _this = _super.call(this) || this; + _this.m_type = ChainShape2.TYPE; + _this.m_radius = SettingsInternal.polygonRadius; + _this.m_vertices = []; + _this.m_count = 0; + _this.m_prevVertex = null; + _this.m_nextVertex = null; + _this.m_hasPrevVertex = false; + _this.m_hasNextVertex = false; + _this.m_isLoop = !!loop; + if (vertices && vertices.length) { + if (loop) { + _this._createLoop(vertices); + } else { + _this._createChain(vertices); + } + } + return _this; + } + ChainShape2.prototype._serialize = function() { + var data = { + type: this.m_type, + vertices: this.m_vertices, + isLoop: this.m_isLoop, + hasPrevVertex: this.m_hasPrevVertex, + hasNextVertex: this.m_hasNextVertex, + prevVertex: null, + nextVertex: null + }; + if (this.m_prevVertex) { + data.prevVertex = this.m_prevVertex; + } + if (this.m_nextVertex) { + data.nextVertex = this.m_nextVertex; + } + return data; + }; + ChainShape2._deserialize = function(data, fixture, restore) { + var vertices = []; + if (data.vertices) { + for (var i = 0; i < data.vertices.length; i++) { + vertices.push(restore(Vec2, data.vertices[i])); + } + } + var shape = new ChainShape2(vertices, data.isLoop); + if (data.prevVertex) { + shape.setPrevVertex(data.prevVertex); + } + if (data.nextVertex) { + shape.setNextVertex(data.nextVertex); + } + return shape; + }; + ChainShape2.prototype.getType = function() { + return this.m_type; + }; + ChainShape2.prototype.getRadius = function() { + return this.m_radius; + }; + ChainShape2.prototype._createLoop = function(vertices) { + if (vertices.length < 3) { + return; + } + for (var i = 1; i < vertices.length; ++i) { + vertices[i - 1]; + vertices[i]; + } + this.m_vertices = []; + this.m_count = vertices.length + 1; + for (var i = 0; i < vertices.length; ++i) { + this.m_vertices[i] = Vec2.clone(vertices[i]); + } + this.m_vertices[vertices.length] = Vec2.clone(vertices[0]); + this.m_prevVertex = this.m_vertices[this.m_count - 2]; + this.m_nextVertex = this.m_vertices[1]; + this.m_hasPrevVertex = true; + this.m_hasNextVertex = true; + return this; + }; + ChainShape2.prototype._createChain = function(vertices) { + for (var i = 1; i < vertices.length; ++i) { + vertices[i - 1]; + vertices[i]; + } + this.m_count = vertices.length; + for (var i = 0; i < vertices.length; ++i) { + this.m_vertices[i] = Vec2.clone(vertices[i]); + } + this.m_hasPrevVertex = false; + this.m_hasNextVertex = false; + this.m_prevVertex = null; + this.m_nextVertex = null; + return this; + }; + ChainShape2.prototype._reset = function() { + if (this.m_isLoop) { + this._createLoop(this.m_vertices); + } else { + this._createChain(this.m_vertices); + } + }; + ChainShape2.prototype.setPrevVertex = function(prevVertex) { + this.m_prevVertex = prevVertex; + this.m_hasPrevVertex = true; + }; + ChainShape2.prototype.getPrevVertex = function() { + return this.m_prevVertex; + }; + ChainShape2.prototype.setNextVertex = function(nextVertex) { + this.m_nextVertex = nextVertex; + this.m_hasNextVertex = true; + }; + ChainShape2.prototype.getNextVertex = function() { + return this.m_nextVertex; + }; + ChainShape2.prototype._clone = function() { + var clone = new ChainShape2(); + clone._createChain(this.m_vertices); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_prevVertex = this.m_prevVertex; + clone.m_nextVertex = this.m_nextVertex; + clone.m_hasPrevVertex = this.m_hasPrevVertex; + clone.m_hasNextVertex = this.m_hasNextVertex; + return clone; + }; + ChainShape2.prototype.getChildCount = function() { + return this.m_count - 1; + }; + ChainShape2.prototype.getChildEdge = function(edge, childIndex) { + edge.m_type = EdgeShape.TYPE; + edge.m_radius = this.m_radius; + edge.m_vertex1 = this.m_vertices[childIndex]; + edge.m_vertex2 = this.m_vertices[childIndex + 1]; + if (childIndex > 0) { + edge.m_vertex0 = this.m_vertices[childIndex - 1]; + edge.m_hasVertex0 = true; + } else { + edge.m_vertex0 = this.m_prevVertex; + edge.m_hasVertex0 = this.m_hasPrevVertex; + } + if (childIndex < this.m_count - 2) { + edge.m_vertex3 = this.m_vertices[childIndex + 2]; + edge.m_hasVertex3 = true; + } else { + edge.m_vertex3 = this.m_nextVertex; + edge.m_hasVertex3 = this.m_hasNextVertex; + } + }; + ChainShape2.prototype.getVertex = function(index) { + if (index < this.m_count) { + return this.m_vertices[index]; + } else { + return this.m_vertices[0]; + } + }; + ChainShape2.prototype.isLoop = function() { + return this.m_isLoop; + }; + ChainShape2.prototype.testPoint = function(xf2, p) { + return false; + }; + ChainShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1)); + return edgeShape.rayCast(output2, input2, xf2, 0); + }; + ChainShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + transformVec2(v1$1, xf2, this.getVertex(childIndex)); + transformVec2(v2, xf2, this.getVertex(childIndex + 1)); + AABB.combinePoints(aabb, v1$1, v2); + }; + ChainShape2.prototype.computeMass = function(massData, density) { + massData.mass = 0; + zeroVec2(massData.center); + massData.I = 0; + }; + ChainShape2.prototype.computeDistanceProxy = function(proxy, childIndex) { + proxy.m_vertices[0] = this.getVertex(childIndex); + proxy.m_vertices[1] = this.getVertex(childIndex + 1); + proxy.m_count = 2; + proxy.m_radius = this.m_radius; + }; + ChainShape2.TYPE = "chain"; + return ChainShape2; + }(Shape) + ); + var Chain = ChainShape; + var math_max$2 = Math.max; + var math_min$4 = Math.min; + var temp$1 = vec2(0, 0); + var e$1 = vec2(0, 0); + var e1$1 = vec2(0, 0); + var e2$1 = vec2(0, 0); + var center = vec2(0, 0); + var s = vec2(0, 0); + var PolygonShape = ( + /** @class */ + function(_super) { + __extends$a(PolygonShape2, _super); + function PolygonShape2(vertices) { + var _this = this; + if (!(_this instanceof PolygonShape2)) { + return new PolygonShape2(vertices); + } + _this = _super.call(this) || this; + _this.m_type = PolygonShape2.TYPE; + _this.m_radius = SettingsInternal.polygonRadius; + _this.m_centroid = Vec2.zero(); + _this.m_vertices = []; + _this.m_normals = []; + _this.m_count = 0; + if (vertices && vertices.length) { + _this._set(vertices); + } + return _this; + } + PolygonShape2.prototype._serialize = function() { + return { + type: this.m_type, + vertices: this.m_vertices }; - /** @hidden */ - WheelJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (def.localAxisA) { - this.m_localXAxisA.setVec2(def.localAxisA); - this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1.0, def.localAxisA)); - } - if (def.enableMotor !== undefined) { - this.m_enableMotor = def.enableMotor; - } - if (Number.isFinite(def.maxMotorTorque)) { - this.m_maxMotorTorque = def.maxMotorTorque; - } - if (Number.isFinite(def.motorSpeed)) { - this.m_motorSpeed = def.motorSpeed; + }; + PolygonShape2._deserialize = function(data, fixture, restore) { + var vertices = []; + if (data.vertices) { + for (var i = 0; i < data.vertices.length; i++) { + vertices.push(restore(Vec2, data.vertices[i])); + } + } + var shape = new PolygonShape2(vertices); + return shape; + }; + PolygonShape2.prototype.getType = function() { + return this.m_type; + }; + PolygonShape2.prototype.getRadius = function() { + return this.m_radius; + }; + PolygonShape2.prototype._clone = function() { + var clone = new PolygonShape2(); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_count = this.m_count; + clone.m_centroid.setVec2(this.m_centroid); + for (var i = 0; i < this.m_count; i++) { + clone.m_vertices.push(this.m_vertices[i].clone()); + } + for (var i = 0; i < this.m_normals.length; i++) { + clone.m_normals.push(this.m_normals[i].clone()); + } + return clone; + }; + PolygonShape2.prototype.getChildCount = function() { + return 1; + }; + PolygonShape2.prototype._reset = function() { + this._set(this.m_vertices); + }; + PolygonShape2.prototype._set = function(vertices) { + if (vertices.length < 3) { + this._setAsBox(1, 1); + return; + } + var n2 = math_min$4(vertices.length, SettingsInternal.maxPolygonVertices); + var ps = []; + for (var i = 0; i < n2; ++i) { + var v3 = vertices[i]; + var unique = true; + for (var j = 0; j < ps.length; ++j) { + if (Vec2.distanceSquared(v3, ps[j]) < 0.25 * SettingsInternal.linearSlopSquared) { + unique = false; + break; + } + } + if (unique) { + ps.push(Vec2.clone(v3)); + } + } + n2 = ps.length; + if (n2 < 3) { + this._setAsBox(1, 1); + return; + } + var i0 = 0; + var x0 = ps[0].x; + for (var i = 1; i < n2; ++i) { + var x2 = ps[i].x; + if (x2 > x0 || x2 === x0 && ps[i].y < ps[i0].y) { + i0 = i; + x0 = x2; + } + } + var hull = []; + var m = 0; + var ih = i0; + while (true) { + hull[m] = ih; + var ie2 = 0; + for (var j = 1; j < n2; ++j) { + if (ie2 === ih) { + ie2 = j; + continue; + } + var r = Vec2.sub(ps[ie2], ps[hull[m]]); + var v3 = Vec2.sub(ps[j], ps[hull[m]]); + var c2 = Vec2.crossVec2Vec2(r, v3); + if (c2 < 0) { + ie2 = j; + } + if (c2 === 0 && v3.lengthSquared() > r.lengthSquared()) { + ie2 = j; + } + } + ++m; + ih = ie2; + if (ie2 === i0) { + break; + } + } + if (m < 3) { + this._setAsBox(1, 1); + return; + } + this.m_count = m; + this.m_vertices = []; + for (var i = 0; i < m; ++i) { + this.m_vertices[i] = ps[hull[i]]; + } + for (var i = 0; i < m; ++i) { + var i1 = i; + var i2 = i + 1 < m ? i + 1 : 0; + var edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]); + this.m_normals[i] = Vec2.crossVec2Num(edge, 1); + this.m_normals[i].normalize(); + } + this.m_centroid = computeCentroid(this.m_vertices, m); + }; + PolygonShape2.prototype._setAsBox = function(hx, hy, center2, angle) { + this.m_vertices[0] = Vec2.neo(hx, -hy); + this.m_vertices[1] = Vec2.neo(hx, hy); + this.m_vertices[2] = Vec2.neo(-hx, hy); + this.m_vertices[3] = Vec2.neo(-hx, -hy); + this.m_normals[0] = Vec2.neo(1, 0); + this.m_normals[1] = Vec2.neo(0, 1); + this.m_normals[2] = Vec2.neo(-1, 0); + this.m_normals[3] = Vec2.neo(0, -1); + this.m_count = 4; + if (center2 && Vec2.isValid(center2)) { + angle = angle || 0; + copyVec2(this.m_centroid, center2); + var xf2 = Transform.identity(); + xf2.p.setVec2(center2); + xf2.q.setAngle(angle); + for (var i = 0; i < this.m_count; ++i) { + this.m_vertices[i] = Transform.mulVec2(xf2, this.m_vertices[i]); + this.m_normals[i] = Rot.mulVec2(xf2.q, this.m_normals[i]); + } + } + }; + PolygonShape2.prototype.testPoint = function(xf2, p) { + var pLocal = detransformVec2(temp$1, xf2, p); + for (var i = 0; i < this.m_count; ++i) { + var dot = dotVec2(this.m_normals[i], pLocal) - dotVec2(this.m_normals[i], this.m_vertices[i]); + if (dot > 0) { + return false; + } + } + return true; + }; + PolygonShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var p1 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p1, xf2.p)); + var p2 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p2, xf2.p)); + var d2 = Vec2.sub(p2, p1); + var lower = 0; + var upper = input2.maxFraction; + var index = -1; + for (var i = 0; i < this.m_count; ++i) { + var numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1)); + var denominator = Vec2.dot(this.m_normals[i], d2); + if (denominator == 0) { + if (numerator < 0) { + return false; } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; + } else { + if (denominator < 0 && numerator < lower * denominator) { + lower = numerator / denominator; + index = i; + } else if (denominator > 0 && numerator < upper * denominator) { + upper = numerator / denominator; } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; + } + if (upper < lower) { + return false; + } + } + if (index >= 0) { + output2.fraction = lower; + output2.normal = Rot.mulVec2(xf2.q, this.m_normals[index]); + return true; + } + return false; + }; + PolygonShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + var minX = Infinity; + var minY = Infinity; + var maxX = -Infinity; + var maxY = -Infinity; + for (var i = 0; i < this.m_count; ++i) { + var v3 = transformVec2(temp$1, xf2, this.m_vertices[i]); + minX = math_min$4(minX, v3.x); + maxX = math_max$2(maxX, v3.x); + minY = math_min$4(minY, v3.y); + maxY = math_max$2(maxY, v3.y); + } + setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius); + setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius); + }; + PolygonShape2.prototype.computeMass = function(massData, density) { + zeroVec2(center); + var area = 0; + var I = 0; + zeroVec2(s); + for (var i = 0; i < this.m_count; ++i) { + plusVec2(s, this.m_vertices[i]); + } + scaleVec2(s, 1 / this.m_count, s); + var k_inv3 = 1 / 3; + for (var i = 0; i < this.m_count; ++i) { + subVec2(e1$1, this.m_vertices[i], s); + if (i + 1 < this.m_count) { + subVec2(e2$1, this.m_vertices[i + 1], s); + } else { + subVec2(e2$1, this.m_vertices[0], s); + } + var D = crossVec2Vec2(e1$1, e2$1); + var triangleArea = 0.5 * D; + area += triangleArea; + combine2Vec2(temp$1, triangleArea * k_inv3, e1$1, triangleArea * k_inv3, e2$1); + plusVec2(center, temp$1); + var ex1 = e1$1.x; + var ey1 = e1$1.y; + var ex2 = e2$1.x; + var ey2 = e2$1.y; + var intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2; + var inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2; + I += 0.25 * k_inv3 * D * (intx2 + inty2); + } + massData.mass = density * area; + scaleVec2(center, 1 / area, center); + addVec2(massData.center, center, s); + massData.I = density * I; + massData.I += massData.mass * (dotVec2(massData.center, massData.center) - dotVec2(center, center)); + }; + PolygonShape2.prototype.validate = function() { + for (var i = 0; i < this.m_count; ++i) { + var i1 = i; + var i2 = i < this.m_count - 1 ? i1 + 1 : 0; + var p = this.m_vertices[i1]; + subVec2(e$1, this.m_vertices[i2], p); + for (var j = 0; j < this.m_count; ++j) { + if (j == i1 || j == i2) { + continue; + } + var c2 = crossVec2Vec2(e$1, subVec2(temp$1, this.m_vertices[j], p)); + if (c2 < 0) { + return false; } + } + } + return true; + }; + PolygonShape2.prototype.computeDistanceProxy = function(proxy) { + for (var i = 0; i < this.m_count; ++i) { + proxy.m_vertices[i] = this.m_vertices[i]; + } + proxy.m_vertices.length = this.m_count; + proxy.m_count = this.m_count; + proxy.m_radius = this.m_radius; + }; + PolygonShape2.TYPE = "polygon"; + return PolygonShape2; + }(Shape) + ); + function computeCentroid(vs, count) { + var c2 = Vec2.zero(); + var area = 0; + var pRef = Vec2.zero(); + var i; + var inv3 = 1 / 3; + for (var i = 0; i < count; ++i) { + var p1 = pRef; + var p2 = vs[i]; + var p3 = i + 1 < count ? vs[i + 1] : vs[0]; + var e1_1 = Vec2.sub(p2, p1); + var e2_1 = Vec2.sub(p3, p1); + var D = Vec2.crossVec2Vec2(e1_1, e2_1); + var triangleArea = 0.5 * D; + area += triangleArea; + combine3Vec2(temp$1, 1, p1, 1, p2, 1, p3); + plusScaleVec2(c2, triangleArea * inv3, temp$1); + } + c2.mul(1 / area); + return c2; + } + var Polygon = PolygonShape; + var math_sqrt$2 = Math.sqrt; + var math_PI$5 = Math.PI; + var temp = vec2(0, 0); + var CircleShape = ( + /** @class */ + function(_super) { + __extends$a(CircleShape2, _super); + function CircleShape2(a2, b2) { + var _this = this; + if (!(_this instanceof CircleShape2)) { + return new CircleShape2(a2, b2); + } + _this = _super.call(this) || this; + _this.m_type = CircleShape2.TYPE; + _this.m_p = Vec2.zero(); + _this.m_radius = 1; + if (typeof a2 === "object" && Vec2.isValid(a2)) { + _this.m_p.setVec2(a2); + if (typeof b2 === "number") { + _this.m_radius = b2; + } + } else if (typeof a2 === "number") { + _this.m_radius = a2; + } + return _this; + } + CircleShape2.prototype._serialize = function() { + return { + type: this.m_type, + p: this.m_p, + radius: this.m_radius }; - /** - * The local anchor point relative to bodyA's origin. - */ - WheelJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - WheelJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * The local joint axis relative to bodyA. - */ - WheelJoint.prototype.getLocalAxisA = function () { - return this.m_localXAxisA; - }; - /** - * Get the current joint translation, usually in meters. - */ - WheelJoint.prototype.getJointTranslation = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - var pA = bA.getWorldPoint(this.m_localAnchorA); - var pB = bB.getWorldPoint(this.m_localAnchorB); - var d = Vec2.sub(pB, pA); - var axis = bA.getWorldVector(this.m_localXAxisA); - var translation = Vec2.dot(d, axis); - return translation; - }; - /** - * Get the current joint translation speed, usually in meters per second. - */ - WheelJoint.prototype.getJointSpeed = function () { - var wA = this.m_bodyA.m_angularVelocity; - var wB = this.m_bodyB.m_angularVelocity; - return wB - wA; - }; - /** - * Is the joint motor enabled? - */ - WheelJoint.prototype.isMotorEnabled = function () { - return this.m_enableMotor; - }; - /** - * Enable/disable the joint motor. - */ - WheelJoint.prototype.enableMotor = function (flag) { - if (flag == this.m_enableMotor) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableMotor = flag; - }; - /** - * Set the motor speed, usually in radians per second. - */ - WheelJoint.prototype.setMotorSpeed = function (speed) { - if (speed == this.m_motorSpeed) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_motorSpeed = speed; - }; - /** - * Get the motor speed, usually in radians per second. - */ - WheelJoint.prototype.getMotorSpeed = function () { - return this.m_motorSpeed; - }; - /** - * Set/Get the maximum motor force, usually in N-m. - */ - WheelJoint.prototype.setMaxMotorTorque = function (torque) { - if (torque == this.m_maxMotorTorque) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_maxMotorTorque = torque; - }; - WheelJoint.prototype.getMaxMotorTorque = function () { - return this.m_maxMotorTorque; - }; - /** - * Get the current motor torque given the inverse time step, usually in N-m. - */ - WheelJoint.prototype.getMotorTorque = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - /** - * Set/Get the spring frequency in hertz. Setting the frequency to zero disables - * the spring. - */ - WheelJoint.prototype.setSpringFrequencyHz = function (hz) { - this.m_frequencyHz = hz; - }; - WheelJoint.prototype.getSpringFrequencyHz = function () { - return this.m_frequencyHz; - }; - /** - * Set/Get the spring damping ratio - */ - WheelJoint.prototype.setSpringDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - WheelJoint.prototype.getSpringDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - WheelJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + CircleShape2._deserialize = function(data) { + return new CircleShape2(data.p, data.radius); + }; + CircleShape2.prototype._reset = function() { + }; + CircleShape2.prototype.getType = function() { + return this.m_type; + }; + CircleShape2.prototype.getRadius = function() { + return this.m_radius; + }; + CircleShape2.prototype.getCenter = function() { + return this.m_p; + }; + CircleShape2.prototype._clone = function() { + var clone = new CircleShape2(); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_p = this.m_p.clone(); + return clone; + }; + CircleShape2.prototype.getChildCount = function() { + return 1; + }; + CircleShape2.prototype.testPoint = function(xf2, p) { + var center2 = transformVec2(temp, xf2, this.m_p); + return distSqrVec2(p, center2) <= this.m_radius * this.m_radius; + }; + CircleShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var position = Vec2.add(xf2.p, Rot.mulVec2(xf2.q, this.m_p)); + var s2 = Vec2.sub(input2.p1, position); + var b2 = Vec2.dot(s2, s2) - this.m_radius * this.m_radius; + var r = Vec2.sub(input2.p2, input2.p1); + var c2 = Vec2.dot(s2, r); + var rr = Vec2.dot(r, r); + var sigma = c2 * c2 - rr * b2; + if (sigma < 0 || rr < EPSILON) { + return false; + } + var a2 = -(c2 + math_sqrt$2(sigma)); + if (0 <= a2 && a2 <= input2.maxFraction * rr) { + a2 /= rr; + output2.fraction = a2; + output2.normal = Vec2.add(s2, Vec2.mulNumVec2(a2, r)); + output2.normal.normalize(); + return true; + } + return false; + }; + CircleShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + var p = transformVec2(temp, xf2, this.m_p); + setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius); + setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius); + }; + CircleShape2.prototype.computeMass = function(massData, density) { + massData.mass = density * math_PI$5 * this.m_radius * this.m_radius; + copyVec2(massData.center, this.m_p); + massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + lengthSqrVec2(this.m_p)); + }; + CircleShape2.prototype.computeDistanceProxy = function(proxy) { + proxy.m_vertices[0] = this.m_p; + proxy.m_vertices.length = 1; + proxy.m_count = 1; + proxy.m_radius = this.m_radius; + }; + CircleShape2.TYPE = "circle"; + return CircleShape2; + }(Shape) + ); + var Circle = CircleShape; + var math_abs$6 = Math.abs; + var math_PI$4 = Math.PI; + var DEFAULTS$a = { + frequencyHz: 0, + dampingRatio: 0 + }; + var DistanceJoint = ( + /** @class */ + function(_super) { + __extends$a(DistanceJoint2, _super); + function DistanceJoint2(def, bodyA, bodyB, anchorA, anchorB) { + var _this = this; + if (!(_this instanceof DistanceJoint2)) { + return new DistanceJoint2(def, bodyA, bodyB, anchorA, anchorB); + } + if (bodyB && anchorA && "m_type" in anchorA && "x" in bodyB && "y" in bodyB) { + var temp3 = bodyB; + bodyB = anchorA; + anchorA = temp3; + } + def = options(def, DEFAULTS$a); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = DistanceJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.zero()); + _this.m_length = Number.isFinite(def.length) ? def.length : Vec2.distance(bodyA.getWorldPoint(_this.m_localAnchorA), bodyB.getWorldPoint(_this.m_localAnchorB)); + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_impulse = 0; + _this.m_gamma = 0; + _this.m_bias = 0; + return _this; + } + DistanceJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + length: this.m_length, + impulse: this.m_impulse, + gamma: this.m_gamma, + bias: this.m_bias }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - WheelJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + DistanceJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new DistanceJoint2(data); + return joint; + }; + DistanceJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (def.length > 0) { + this.m_length = +def.length; + } else if (def.length < 0) ; + else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) { + this.m_length = Vec2.distance(this.m_bodyA.getWorldPoint(this.m_localAnchorA), this.m_bodyB.getWorldPoint(this.m_localAnchorB)); + } + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; + } + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; + } + }; + DistanceJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + DistanceJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + DistanceJoint2.prototype.setLength = function(length2) { + this.m_length = length2; + }; + DistanceJoint2.prototype.getLength = function() { + return this.m_length; + }; + DistanceJoint2.prototype.setFrequency = function(hz) { + this.m_frequencyHz = hz; + }; + DistanceJoint2.prototype.getFrequency = function() { + return this.m_frequencyHz; + }; + DistanceJoint2.prototype.setDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + DistanceJoint2.prototype.getDampingRatio = function() { + return this.m_dampingRatio; + }; + DistanceJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + DistanceJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + DistanceJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); + }; + DistanceJoint2.prototype.getReactionTorque = function(inv_dt) { + return 0; + }; + DistanceJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + this.m_u = Vec2.sub(Vec2.add(cB2, this.m_rB), Vec2.add(cA2, this.m_rA)); + var length2 = this.m_u.length(); + if (length2 > SettingsInternal.linearSlop) { + this.m_u.mul(1 / length2); + } else { + this.m_u.setNum(0, 0); + } + var crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u); + var crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u); + var invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu; + this.m_mass = invMass != 0 ? 1 / invMass : 0; + if (this.m_frequencyHz > 0) { + var C = length2 - this.m_length; + var omega = 2 * math_PI$4 * this.m_frequencyHz; + var d2 = 2 * this.m_mass * this.m_dampingRatio * omega; + var k = this.m_mass * omega * omega; + var h = step.dt; + this.m_gamma = h * (d2 + h * k); + this.m_gamma = this.m_gamma != 0 ? 1 / this.m_gamma : 0; + this.m_bias = C * h * k * this.m_gamma; + invMass += this.m_gamma; + this.m_mass = invMass != 0 ? 1 / invMass : 0; + } else { + this.m_gamma = 0; + this.m_bias = 0; + } + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + var P3 = Vec2.mulNumVec2(this.m_impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + DistanceJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vpA = Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA)); + var vpB = Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB)); + var Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA); + var impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse); + this.m_impulse += impulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + DistanceJoint2.prototype.solvePositionConstraints = function(step) { + if (this.m_frequencyHz > 0) { + return true; + } + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); + var u = Vec2.sub(Vec2.add(cB2, rB2), Vec2.add(cA2, rA2)); + var length2 = u.normalize(); + var C = clamp$1(length2 - this.m_length, -SettingsInternal.maxLinearCorrection, SettingsInternal.maxLinearCorrection); + var impulse = -this.m_mass * C; + var P3 = Vec2.mulNumVec2(impulse, u); + cA2.subMul(this.m_invMassA, P3); + aA -= this.m_invIA * Vec2.crossVec2Vec2(rA2, P3); + cB2.addMul(this.m_invMassB, P3); + aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, P3); + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return math_abs$6(C) < SettingsInternal.linearSlop; + }; + DistanceJoint2.TYPE = "distance-joint"; + return DistanceJoint2; + }(Joint) + ); + var DEFAULTS$9 = { + maxForce: 0, + maxTorque: 0 + }; + var FrictionJoint = ( + /** @class */ + function(_super) { + __extends$a(FrictionJoint2, _super); + function FrictionJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + if (!(_this instanceof FrictionJoint2)) { + return new FrictionJoint2(def, bodyA, bodyB, anchor); + } + def = options(def, DEFAULTS$9); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = FrictionJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + _this.m_linearImpulse = Vec2.zero(); + _this.m_angularImpulse = 0; + _this.m_maxForce = def.maxForce; + _this.m_maxTorque = def.maxTorque; + return _this; + } + FrictionJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + maxForce: this.m_maxForce, + maxTorque: this.m_maxTorque, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - WheelJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt); + }; + FrictionJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new FrictionJoint2(data); + return joint; + }; + FrictionJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (Number.isFinite(def.maxForce)) { + this.m_maxForce = def.maxForce; + } + if (Number.isFinite(def.maxTorque)) { + this.m_maxTorque = def.maxTorque; + } + }; + FrictionJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + FrictionJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + FrictionJoint2.prototype.setMaxForce = function(force) { + this.m_maxForce = force; + }; + FrictionJoint2.prototype.getMaxForce = function() { + return this.m_maxForce; + }; + FrictionJoint2.prototype.setMaxTorque = function(torque) { + this.m_maxTorque = torque; + }; + FrictionJoint2.prototype.getMaxTorque = function() { + return this.m_maxTorque; + }; + FrictionJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + FrictionJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + FrictionJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); + }; + FrictionJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_angularImpulse; + }; + FrictionJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var K = new Mat22(); + K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y; + K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x; + this.m_linearMass = K.getInverse(); + this.m_angularMass = iA + iB; + if (this.m_angularMass > 0) { + this.m_angularMass = 1 / this.m_angularMass; + } + if (step.warmStarting) { + this.m_linearImpulse.mul(step.dtRatio); + this.m_angularImpulse *= step.dtRatio; + var P3 = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_angularImpulse); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_angularImpulse); + } else { + this.m_linearImpulse.setZero(); + this.m_angularImpulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + FrictionJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var h = step.dt; + { + var Cdot = wB - wA; + var impulse = -this.m_angularMass * Cdot; + var oldImpulse = this.m_angularImpulse; + var maxImpulse = h * this.m_maxTorque; + this.m_angularImpulse = clamp$1(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_angularImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + { + var Cdot = Vec2.sub(Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB)), Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA))); + var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); + var oldImpulse = this.m_linearImpulse; + this.m_linearImpulse.add(impulse); + var maxImpulse = h * this.m_maxForce; + if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) { + this.m_linearImpulse.normalize(); + this.m_linearImpulse.mul(maxImpulse); + } + impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); + vA2.subMul(mA, impulse); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); + vB2.addMul(mB, impulse); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + FrictionJoint2.prototype.solvePositionConstraints = function(step) { + return true; + }; + FrictionJoint2.TYPE = "friction-joint"; + return FrictionJoint2; + }(Joint) + ); + var Mat33 = ( + /** @class */ + function() { + function Mat332(a2, b2, c2) { + if (typeof a2 === "object" && a2 !== null) { + this.ex = Vec3.clone(a2); + this.ey = Vec3.clone(b2); + this.ez = Vec3.clone(c2); + } else { + this.ex = Vec3.zero(); + this.ey = Vec3.zero(); + this.ez = Vec3.zero(); + } + } + Mat332.prototype.toString = function() { + return JSON.stringify(this); + }; + Mat332.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec3.isValid(obj.ex) && Vec3.isValid(obj.ey) && Vec3.isValid(obj.ez); + }; + Mat332.assert = function(o) { + }; + Mat332.prototype.setZero = function() { + this.ex.setZero(); + this.ey.setZero(); + this.ez.setZero(); + return this; + }; + Mat332.prototype.solve33 = function(v3) { + var cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; + var cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; + var cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; + var det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z; + if (det !== 0) { + det = 1 / det; + } + var r = new Vec3(); + cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; + cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; + cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; + r.x = det * (v3.x * cross_x + v3.y * cross_y + v3.z * cross_z); + cross_x = v3.y * this.ez.z - v3.z * this.ez.y; + cross_y = v3.z * this.ez.x - v3.x * this.ez.z; + cross_z = v3.x * this.ez.y - v3.y * this.ez.x; + r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); + cross_x = this.ey.y * v3.z - this.ey.z * v3.y; + cross_y = this.ey.z * v3.x - this.ey.x * v3.z; + cross_z = this.ey.x * v3.y - this.ey.y * v3.x; + r.z = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); + return r; + }; + Mat332.prototype.solve22 = function(v3) { + var a11 = this.ex.x; + var a12 = this.ey.x; + var a21 = this.ex.y; + var a22 = this.ey.y; + var det = a11 * a22 - a12 * a21; + if (det !== 0) { + det = 1 / det; + } + var r = Vec2.zero(); + r.x = det * (a22 * v3.x - a12 * v3.y); + r.y = det * (a11 * v3.y - a21 * v3.x); + return r; + }; + Mat332.prototype.getInverse22 = function(M) { + var a2 = this.ex.x; + var b2 = this.ey.x; + var c2 = this.ex.y; + var d2 = this.ey.y; + var det = a2 * d2 - b2 * c2; + if (det !== 0) { + det = 1 / det; + } + M.ex.x = det * d2; + M.ey.x = -det * b2; + M.ex.z = 0; + M.ex.y = -det * c2; + M.ey.y = det * a2; + M.ey.z = 0; + M.ez.x = 0; + M.ez.y = 0; + M.ez.z = 0; + }; + Mat332.prototype.getSymInverse33 = function(M) { + var det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez)); + if (det !== 0) { + det = 1 / det; + } + var a11 = this.ex.x; + var a12 = this.ey.x; + var a13 = this.ez.x; + var a22 = this.ey.y; + var a23 = this.ez.y; + var a33 = this.ez.z; + M.ex.x = det * (a22 * a33 - a23 * a23); + M.ex.y = det * (a13 * a23 - a12 * a33); + M.ex.z = det * (a12 * a23 - a13 * a22); + M.ey.x = M.ex.y; + M.ey.y = det * (a11 * a33 - a13 * a13); + M.ey.z = det * (a13 * a12 - a11 * a23); + M.ez.x = M.ex.z; + M.ez.y = M.ey.z; + M.ez.z = det * (a11 * a22 - a12 * a12); + }; + Mat332.mul = function(a2, b2) { + if (b2 && "z" in b2 && "y" in b2 && "x" in b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y + a2.ez.x * b2.z; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y + a2.ez.y * b2.z; + var z = a2.ex.z * b2.x + a2.ey.z * b2.y + a2.ez.z * b2.z; + return new Vec3(x2, y, z); + } else if (b2 && "y" in b2 && "x" in b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y; + return Vec2.neo(x2, y); + } + }; + Mat332.mulVec3 = function(a2, b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y + a2.ez.x * b2.z; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y + a2.ez.y * b2.z; + var z = a2.ex.z * b2.x + a2.ey.z * b2.y + a2.ez.z * b2.z; + return new Vec3(x2, y, z); + }; + Mat332.mulVec2 = function(a2, b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y; + return Vec2.neo(x2, y); + }; + Mat332.add = function(a2, b2) { + return new Mat332(Vec3.add(a2.ex, b2.ex), Vec3.add(a2.ey, b2.ey), Vec3.add(a2.ez, b2.ez)); + }; + return Mat332; + }() + ); + var math_abs$5 = Math.abs; + var LimitState$2; + (function(LimitState2) { + LimitState2[LimitState2["inactiveLimit"] = 0] = "inactiveLimit"; + LimitState2[LimitState2["atLowerLimit"] = 1] = "atLowerLimit"; + LimitState2[LimitState2["atUpperLimit"] = 2] = "atUpperLimit"; + LimitState2[LimitState2["equalLimits"] = 3] = "equalLimits"; + })(LimitState$2 || (LimitState$2 = {})); + var DEFAULTS$8 = { + lowerAngle: 0, + upperAngle: 0, + maxMotorTorque: 0, + motorSpeed: 0, + enableLimit: false, + enableMotor: false + }; + var RevoluteJoint = ( + /** @class */ + function(_super) { + __extends$a(RevoluteJoint2, _super); + function RevoluteJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + var _a2, _b, _c, _d, _e, _f; + if (!(_this instanceof RevoluteJoint2)) { + return new RevoluteJoint2(def, bodyA, bodyB, anchor); + } + def = def !== null && def !== void 0 ? def : {}; + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_mass = new Mat33(); + _this.m_limitState = LimitState$2.inactiveLimit; + _this.m_type = RevoluteJoint2.TYPE; + if (Vec2.isValid(anchor)) { + _this.m_localAnchorA = bodyA.getLocalPoint(anchor); + } else if (Vec2.isValid(def.localAnchorA)) { + _this.m_localAnchorA = Vec2.clone(def.localAnchorA); + } else { + _this.m_localAnchorA = Vec2.zero(); + } + if (Vec2.isValid(anchor)) { + _this.m_localAnchorB = bodyB.getLocalPoint(anchor); + } else if (Vec2.isValid(def.localAnchorB)) { + _this.m_localAnchorB = Vec2.clone(def.localAnchorB); + } else { + _this.m_localAnchorB = Vec2.zero(); + } + if (Number.isFinite(def.referenceAngle)) { + _this.m_referenceAngle = def.referenceAngle; + } else { + _this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle(); + } + _this.m_impulse = new Vec3(); + _this.m_motorImpulse = 0; + _this.m_lowerAngle = (_a2 = def.lowerAngle) !== null && _a2 !== void 0 ? _a2 : DEFAULTS$8.lowerAngle; + _this.m_upperAngle = (_b = def.upperAngle) !== null && _b !== void 0 ? _b : DEFAULTS$8.upperAngle; + _this.m_maxMotorTorque = (_c = def.maxMotorTorque) !== null && _c !== void 0 ? _c : DEFAULTS$8.maxMotorTorque; + _this.m_motorSpeed = (_d = def.motorSpeed) !== null && _d !== void 0 ? _d : DEFAULTS$8.motorSpeed; + _this.m_enableLimit = (_e = def.enableLimit) !== null && _e !== void 0 ? _e : DEFAULTS$8.enableLimit; + _this.m_enableMotor = (_f = def.enableMotor) !== null && _f !== void 0 ? _f : DEFAULTS$8.enableMotor; + return _this; + } + RevoluteJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + lowerAngle: this.m_lowerAngle, + upperAngle: this.m_upperAngle, + maxMotorTorque: this.m_maxMotorTorque, + motorSpeed: this.m_motorSpeed, + enableLimit: this.m_enableLimit, + enableMotor: this.m_enableMotor, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + referenceAngle: this.m_referenceAngle }; - /** - * Get the reaction torque on bodyB in N*m. - */ - WheelJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_motorImpulse; + }; + RevoluteJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new RevoluteJoint2(data); + return joint; + }; + RevoluteJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (Number.isFinite(def.referenceAngle)) { + this.m_referenceAngle = def.referenceAngle; + } + if (def.enableLimit !== void 0) { + this.m_enableLimit = def.enableLimit; + } + if (Number.isFinite(def.lowerAngle)) { + this.m_lowerAngle = def.lowerAngle; + } + if (Number.isFinite(def.upperAngle)) { + this.m_upperAngle = def.upperAngle; + } + if (Number.isFinite(def.maxMotorTorque)) { + this.m_maxMotorTorque = def.maxMotorTorque; + } + if (Number.isFinite(def.motorSpeed)) { + this.m_motorSpeed = def.motorSpeed; + } + if (def.enableMotor !== void 0) { + this.m_enableMotor = def.enableMotor; + } + }; + RevoluteJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + RevoluteJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + RevoluteJoint2.prototype.getReferenceAngle = function() { + return this.m_referenceAngle; + }; + RevoluteJoint2.prototype.getJointAngle = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle; + }; + RevoluteJoint2.prototype.getJointSpeed = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + return bB.m_angularVelocity - bA.m_angularVelocity; + }; + RevoluteJoint2.prototype.isMotorEnabled = function() { + return this.m_enableMotor; + }; + RevoluteJoint2.prototype.enableMotor = function(flag) { + if (flag == this.m_enableMotor) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableMotor = flag; + }; + RevoluteJoint2.prototype.getMotorTorque = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + RevoluteJoint2.prototype.setMotorSpeed = function(speed) { + if (speed == this.m_motorSpeed) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_motorSpeed = speed; + }; + RevoluteJoint2.prototype.getMotorSpeed = function() { + return this.m_motorSpeed; + }; + RevoluteJoint2.prototype.setMaxMotorTorque = function(torque) { + if (torque == this.m_maxMotorTorque) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_maxMotorTorque = torque; + }; + RevoluteJoint2.prototype.getMaxMotorTorque = function() { + return this.m_maxMotorTorque; + }; + RevoluteJoint2.prototype.isLimitEnabled = function() { + return this.m_enableLimit; + }; + RevoluteJoint2.prototype.enableLimit = function(flag) { + if (flag != this.m_enableLimit) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableLimit = flag; + this.m_impulse.z = 0; + } + }; + RevoluteJoint2.prototype.getLowerLimit = function() { + return this.m_lowerAngle; + }; + RevoluteJoint2.prototype.getUpperLimit = function() { + return this.m_upperAngle; + }; + RevoluteJoint2.prototype.setLimits = function(lower, upper) { + if (lower != this.m_lowerAngle || upper != this.m_upperAngle) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_impulse.z = 0; + this.m_lowerAngle = lower; + this.m_upperAngle = upper; + } + }; + RevoluteJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + RevoluteJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + RevoluteJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); + }; + RevoluteJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_impulse.z; + }; + RevoluteJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var fixedRotation = iA + iB === 0; + 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; + this.m_mass.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; + this.m_mass.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; + this.m_mass.ex.y = this.m_mass.ey.x; + 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; + this.m_mass.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; + this.m_mass.ex.z = this.m_mass.ez.x; + this.m_mass.ey.z = this.m_mass.ez.y; + this.m_mass.ez.z = iA + iB; + this.m_motorMass = iA + iB; + if (this.m_motorMass > 0) { + this.m_motorMass = 1 / this.m_motorMass; + } + if (this.m_enableMotor == false || fixedRotation) { + this.m_motorImpulse = 0; + } + if (this.m_enableLimit && fixedRotation == false) { + var jointAngle = aB - aA - this.m_referenceAngle; + if (math_abs$5(this.m_upperAngle - this.m_lowerAngle) < 2 * SettingsInternal.angularSlop) { + this.m_limitState = LimitState$2.equalLimits; + } else if (jointAngle <= this.m_lowerAngle) { + if (this.m_limitState != LimitState$2.atLowerLimit) { + this.m_impulse.z = 0; + } + this.m_limitState = LimitState$2.atLowerLimit; + } else if (jointAngle >= this.m_upperAngle) { + if (this.m_limitState != LimitState$2.atUpperLimit) { + this.m_impulse.z = 0; + } + this.m_limitState = LimitState$2.atUpperLimit; + } else { + this.m_limitState = LimitState$2.inactiveLimit; + this.m_impulse.z = 0; + } + } else { + this.m_limitState = LimitState$2.inactiveLimit; + } + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + this.m_motorImpulse *= step.dtRatio; + var P3 = Vec2.neo(this.m_impulse.x, this.m_impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_motorImpulse + this.m_impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_motorImpulse + this.m_impulse.z); + } else { + this.m_impulse.setZero(); + this.m_motorImpulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + RevoluteJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var fixedRotation = iA + iB === 0; + if (this.m_enableMotor && this.m_limitState != LimitState$2.equalLimits && fixedRotation == false) { + var Cdot = wB - wA - this.m_motorSpeed; + var impulse = -this.m_motorMass * Cdot; + var oldImpulse = this.m_motorImpulse; + var maxImpulse = step.dt * this.m_maxMotorTorque; + this.m_motorImpulse = clamp$1(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { + var Cdot1 = Vec2.zero(); + Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var Cdot2 = wB - wA; + var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); + var impulse = Vec3.neg(this.m_mass.solve33(Cdot)); + if (this.m_limitState == LimitState$2.equalLimits) { + this.m_impulse.add(impulse); + } else if (this.m_limitState == LimitState$2.atLowerLimit) { + var newImpulse = this.m_impulse.z + impulse.z; + if (newImpulse < 0) { + var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); + var reduced = this.m_mass.solve22(rhs); + impulse.x = reduced.x; + impulse.y = reduced.y; + impulse.z = -this.m_impulse.z; + this.m_impulse.x += reduced.x; + this.m_impulse.y += reduced.y; + this.m_impulse.z = 0; + } else { + this.m_impulse.add(impulse); + } + } else if (this.m_limitState == LimitState$2.atUpperLimit) { + var newImpulse = this.m_impulse.z + impulse.z; + if (newImpulse > 0) { + var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); + var reduced = this.m_mass.solve22(rhs); + impulse.x = reduced.x; + impulse.y = reduced.y; + impulse.z = -this.m_impulse.z; + this.m_impulse.x += reduced.x; + this.m_impulse.y += reduced.y; + this.m_impulse.z = 0; + } else { + this.m_impulse.add(impulse); + } + } + var P3 = Vec2.neo(impulse.x, impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + impulse.z); + } else { + var Cdot = Vec2.zero(); + Cdot.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var impulse = this.m_mass.solve22(Vec2.neg(Cdot)); + this.m_impulse.x += impulse.x; + this.m_impulse.y += impulse.y; + vA2.subMul(mA, impulse); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); + vB2.addMul(mB, impulse); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + RevoluteJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var angularError = 0; + var positionError = 0; + var fixedRotation = this.m_invIA + this.m_invIB == 0; + if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { + var angle = aB - aA - this.m_referenceAngle; + var limitImpulse = 0; + if (this.m_limitState == LimitState$2.equalLimits) { + var C = clamp$1(angle - this.m_lowerAngle, -SettingsInternal.maxAngularCorrection, SettingsInternal.maxAngularCorrection); + limitImpulse = -this.m_motorMass * C; + angularError = math_abs$5(C); + } else if (this.m_limitState == LimitState$2.atLowerLimit) { + var C = angle - this.m_lowerAngle; + angularError = -C; + C = clamp$1(C + SettingsInternal.angularSlop, -SettingsInternal.maxAngularCorrection, 0); + limitImpulse = -this.m_motorMass * C; + } else if (this.m_limitState == LimitState$2.atUpperLimit) { + var C = angle - this.m_upperAngle; + angularError = C; + C = clamp$1(C - SettingsInternal.angularSlop, 0, SettingsInternal.maxAngularCorrection); + limitImpulse = -this.m_motorMass * C; + } + aA -= this.m_invIA * limitImpulse; + aB += this.m_invIB * limitImpulse; + } + { + qA.setAngle(aA); + qB.setAngle(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var C = Vec2.zero(); + C.addCombine(1, cB2, 1, rB2); + C.subCombine(1, cA2, 1, rA2); + positionError = C.length(); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var K = new Mat22(); + K.ex.x = mA + mB + iA * rA2.y * rA2.y + iB * rB2.y * rB2.y; + K.ex.y = -iA * rA2.x * rA2.y - iB * rB2.x * rB2.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * rA2.x * rA2.x + iB * rB2.x * rB2.x; + var impulse = Vec2.neg(K.solve(C)); + cA2.subMul(mA, impulse); + aA -= iA * Vec2.crossVec2Vec2(rA2, impulse); + cB2.addMul(mB, impulse); + aB += iB * Vec2.crossVec2Vec2(rB2, impulse); + } + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; + }; + RevoluteJoint2.TYPE = "revolute-joint"; + return RevoluteJoint2; + }(Joint) + ); + var math_abs$4 = Math.abs; + var math_max$1 = Math.max; + var math_min$3 = Math.min; + var LimitState$1; + (function(LimitState2) { + LimitState2[LimitState2["inactiveLimit"] = 0] = "inactiveLimit"; + LimitState2[LimitState2["atLowerLimit"] = 1] = "atLowerLimit"; + LimitState2[LimitState2["atUpperLimit"] = 2] = "atUpperLimit"; + LimitState2[LimitState2["equalLimits"] = 3] = "equalLimits"; + })(LimitState$1 || (LimitState$1 = {})); + var DEFAULTS$7 = { + enableLimit: false, + lowerTranslation: 0, + upperTranslation: 0, + enableMotor: false, + maxMotorForce: 0, + motorSpeed: 0 + }; + var PrismaticJoint = ( + /** @class */ + function(_super) { + __extends$a(PrismaticJoint2, _super); + function PrismaticJoint2(def, bodyA, bodyB, anchor, axis) { + var _this = this; + if (!(_this instanceof PrismaticJoint2)) { + return new PrismaticJoint2(def, bodyA, bodyB, anchor, axis); + } + def = options(def, DEFAULTS$7); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = PrismaticJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + _this.m_localXAxisA = Vec2.clone(axis ? bodyA.getLocalVector(axis) : def.localAxisA || Vec2.neo(1, 0)); + _this.m_localXAxisA.normalize(); + _this.m_localYAxisA = Vec2.crossNumVec2(1, _this.m_localXAxisA); + _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); + _this.m_impulse = new Vec3(); + _this.m_motorMass = 0; + _this.m_motorImpulse = 0; + _this.m_lowerTranslation = def.lowerTranslation; + _this.m_upperTranslation = def.upperTranslation; + _this.m_maxMotorForce = def.maxMotorForce; + _this.m_motorSpeed = def.motorSpeed; + _this.m_enableLimit = def.enableLimit; + _this.m_enableMotor = def.enableMotor; + _this.m_limitState = LimitState$1.inactiveLimit; + _this.m_axis = Vec2.zero(); + _this.m_perp = Vec2.zero(); + _this.m_K = new Mat33(); + return _this; + } + PrismaticJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + lowerTranslation: this.m_lowerTranslation, + upperTranslation: this.m_upperTranslation, + maxMotorForce: this.m_maxMotorForce, + motorSpeed: this.m_motorSpeed, + enableLimit: this.m_enableLimit, + enableMotor: this.m_enableMotor, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + localAxisA: this.m_localXAxisA, + referenceAngle: this.m_referenceAngle }; - WheelJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective masses. - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.zero(); - d.addCombine(1, cB, 1, rB); - d.subCombine(1, cA, 1, rA); - // Point to line constraint - { - this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA); - this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ay); - this.m_sBy = Vec2.crossVec2Vec2(rB, this.m_ay); - this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy - * this.m_sBy; - if (this.m_mass > 0.0) { - this.m_mass = 1.0 / this.m_mass; - } - } - // Spring constraint - this.m_springMass = 0.0; - this.m_bias = 0.0; - this.m_gamma = 0.0; - if (this.m_frequencyHz > 0.0) { - this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA); - this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ax); - this.m_sBx = Vec2.crossVec2Vec2(rB, this.m_ax); - var invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx - * this.m_sBx; - if (invMass > 0.0) { - this.m_springMass = 1.0 / invMass; - var C = Vec2.dot(d, this.m_ax); - // Frequency - var omega = 2.0 * math_PI$1 * this.m_frequencyHz; - // Damping coefficient - var damp = 2.0 * this.m_springMass * this.m_dampingRatio * omega; - // Spring stiffness - var k = this.m_springMass * omega * omega; - // magic formulas - var h = step.dt; - this.m_gamma = h * (damp + h * k); - if (this.m_gamma > 0.0) { - this.m_gamma = 1.0 / this.m_gamma; - } - this.m_bias = C * h * k * this.m_gamma; - this.m_springMass = invMass + this.m_gamma; - if (this.m_springMass > 0.0) { - this.m_springMass = 1.0 / this.m_springMass; - } - } - } - else { - this.m_springImpulse = 0.0; - } - // Rotational motor - if (this.m_enableMotor) { - this.m_motorMass = iA + iB; - if (this.m_motorMass > 0.0) { - this.m_motorMass = 1.0 / this.m_motorMass; - } - } - else { - this.m_motorMass = 0.0; - this.m_motorImpulse = 0.0; - } - if (step.warmStarting) { - // Account for variable time step. - this.m_impulse *= step.dtRatio; - this.m_springImpulse *= step.dtRatio; - this.m_motorImpulse *= step.dtRatio; - var P = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax); - var LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse; - var LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse; - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * LA; - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * LB; - } - else { - this.m_impulse = 0.0; - this.m_springImpulse = 0.0; - this.m_motorImpulse = 0.0; + }; + PrismaticJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + data.localAxisA = Vec2.clone(data.localAxisA); + var joint = new PrismaticJoint2(data); + return joint; + }; + PrismaticJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (def.localAxisA) { + this.m_localXAxisA.setVec2(def.localAxisA); + this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1, def.localAxisA)); + } + if (Number.isFinite(def.referenceAngle)) { + this.m_referenceAngle = def.referenceAngle; + } + if (typeof def.enableLimit !== "undefined") { + this.m_enableLimit = !!def.enableLimit; + } + if (Number.isFinite(def.lowerTranslation)) { + this.m_lowerTranslation = def.lowerTranslation; + } + if (Number.isFinite(def.upperTranslation)) { + this.m_upperTranslation = def.upperTranslation; + } + if (typeof def.enableMotor !== "undefined") { + this.m_enableMotor = !!def.enableMotor; + } + if (Number.isFinite(def.maxMotorForce)) { + this.m_maxMotorForce = def.maxMotorForce; + } + if (Number.isFinite(def.motorSpeed)) { + this.m_motorSpeed = def.motorSpeed; + } + }; + PrismaticJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + PrismaticJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + PrismaticJoint2.prototype.getLocalAxisA = function() { + return this.m_localXAxisA; + }; + PrismaticJoint2.prototype.getReferenceAngle = function() { + return this.m_referenceAngle; + }; + PrismaticJoint2.prototype.getJointTranslation = function() { + var pA2 = this.m_bodyA.getWorldPoint(this.m_localAnchorA); + var pB2 = this.m_bodyB.getWorldPoint(this.m_localAnchorB); + var d2 = Vec2.sub(pB2, pA2); + var axis = this.m_bodyA.getWorldVector(this.m_localXAxisA); + var translation2 = Vec2.dot(d2, axis); + return translation2; + }; + PrismaticJoint2.prototype.getJointSpeed = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + var rA2 = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter)); + var rB2 = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter)); + var p1 = Vec2.add(bA.m_sweep.c, rA2); + var p2 = Vec2.add(bB.m_sweep.c, rB2); + var d2 = Vec2.sub(p2, p1); + var axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA); + var vA2 = bA.m_linearVelocity; + var vB2 = bB.m_linearVelocity; + var wA = bA.m_angularVelocity; + var wB = bB.m_angularVelocity; + var speed = Vec2.dot(d2, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB2, wB, rB2), Vec2.addCrossNumVec2(vA2, wA, rA2))); + return speed; + }; + PrismaticJoint2.prototype.isLimitEnabled = function() { + return this.m_enableLimit; + }; + PrismaticJoint2.prototype.enableLimit = function(flag) { + if (flag != this.m_enableLimit) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableLimit = flag; + this.m_impulse.z = 0; + } + }; + PrismaticJoint2.prototype.getLowerLimit = function() { + return this.m_lowerTranslation; + }; + PrismaticJoint2.prototype.getUpperLimit = function() { + return this.m_upperTranslation; + }; + PrismaticJoint2.prototype.setLimits = function(lower, upper) { + if (lower != this.m_lowerTranslation || upper != this.m_upperTranslation) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_lowerTranslation = lower; + this.m_upperTranslation = upper; + this.m_impulse.z = 0; + } + }; + PrismaticJoint2.prototype.isMotorEnabled = function() { + return this.m_enableMotor; + }; + PrismaticJoint2.prototype.enableMotor = function(flag) { + if (flag == this.m_enableMotor) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableMotor = flag; + }; + PrismaticJoint2.prototype.setMotorSpeed = function(speed) { + if (speed == this.m_motorSpeed) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_motorSpeed = speed; + }; + PrismaticJoint2.prototype.setMaxMotorForce = function(force) { + if (force == this.m_maxMotorForce) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_maxMotorForce = force; + }; + PrismaticJoint2.prototype.getMaxMotorForce = function() { + return this.m_maxMotorForce; + }; + PrismaticJoint2.prototype.getMotorSpeed = function() { + return this.m_motorSpeed; + }; + PrismaticJoint2.prototype.getMotorForce = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + PrismaticJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + PrismaticJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + PrismaticJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis).mul(inv_dt); + }; + PrismaticJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_impulse.y; + }; + PrismaticJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.zero(); + d2.addCombine(1, cB2, 1, rB2); + d2.subCombine(1, cA2, 1, rA2); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + { + this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA); + this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_axis); + this.m_a2 = Vec2.crossVec2Vec2(rB2, this.m_axis); + this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2; + if (this.m_motorMass > 0) { + this.m_motorMass = 1 / this.m_motorMass; + } + } + { + this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA); + this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_perp); + this.m_s2 = Vec2.crossVec2Vec2(rB2, this.m_perp); + Vec2.crossVec2Vec2(rA2, this.m_perp); + var k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2; + var k12 = iA * this.m_s1 + iB * this.m_s2; + var k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2; + var k22 = iA + iB; + if (k22 == 0) { + k22 = 1; + } + var k23 = iA * this.m_a1 + iB * this.m_a2; + var k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2; + this.m_K.ex.set(k11, k12, k13); + this.m_K.ey.set(k12, k22, k23); + this.m_K.ez.set(k13, k23, k33); + } + if (this.m_enableLimit) { + var jointTranslation = Vec2.dot(this.m_axis, d2); + if (math_abs$4(this.m_upperTranslation - this.m_lowerTranslation) < 2 * SettingsInternal.linearSlop) { + this.m_limitState = LimitState$1.equalLimits; + } else if (jointTranslation <= this.m_lowerTranslation) { + if (this.m_limitState != LimitState$1.atLowerLimit) { + this.m_limitState = LimitState$1.atLowerLimit; + this.m_impulse.z = 0; + } + } else if (jointTranslation >= this.m_upperTranslation) { + if (this.m_limitState != LimitState$1.atUpperLimit) { + this.m_limitState = LimitState$1.atUpperLimit; + this.m_impulse.z = 0; } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; + } else { + this.m_limitState = LimitState$1.inactiveLimit; + this.m_impulse.z = 0; + } + } else { + this.m_limitState = LimitState$1.inactiveLimit; + this.m_impulse.z = 0; + } + if (this.m_enableMotor == false) { + this.m_motorImpulse = 0; + } + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + this.m_motorImpulse *= step.dtRatio; + var P3 = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis); + var LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1; + var LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } else { + this.m_impulse.setZero(); + this.m_motorImpulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + PrismaticJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + if (this.m_enableMotor && this.m_limitState != LimitState$1.equalLimits) { + var Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB2, vA2)) + this.m_a2 * wB - this.m_a1 * wA; + var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot); + var oldImpulse = this.m_motorImpulse; + var maxImpulse = step.dt * this.m_maxMotorForce; + this.m_motorImpulse = clamp$1(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_axis); + var LA = impulse * this.m_a1; + var LB = impulse * this.m_a2; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + var Cdot1 = Vec2.zero(); + Cdot1.x += Vec2.dot(this.m_perp, vB2) + this.m_s2 * wB; + Cdot1.x -= Vec2.dot(this.m_perp, vA2) + this.m_s1 * wA; + Cdot1.y = wB - wA; + if (this.m_enableLimit && this.m_limitState != LimitState$1.inactiveLimit) { + var Cdot2 = 0; + Cdot2 += Vec2.dot(this.m_axis, vB2) + this.m_a2 * wB; + Cdot2 -= Vec2.dot(this.m_axis, vA2) + this.m_a1 * wA; + var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); + var f1 = Vec3.clone(this.m_impulse); + var df = this.m_K.solve33(Vec3.neg(Cdot)); + this.m_impulse.add(df); + if (this.m_limitState == LimitState$1.atLowerLimit) { + this.m_impulse.z = math_max$1(this.m_impulse.z, 0); + } else if (this.m_limitState == LimitState$1.atUpperLimit) { + this.m_impulse.z = math_min$3(this.m_impulse.z, 0); + } + var b2 = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y)); + var f2r = Vec2.add(this.m_K.solve22(b2), Vec2.neo(f1.x, f1.y)); + this.m_impulse.x = f2r.x; + this.m_impulse.y = f2r.y; + df = Vec3.sub(this.m_impulse, f1); + var P3 = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis); + var LA = df.x * this.m_s1 + df.y + df.z * this.m_a1; + var LB = df.x * this.m_s2 + df.y + df.z * this.m_a2; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } else { + var df = this.m_K.solve22(Vec2.neg(Cdot1)); + this.m_impulse.x += df.x; + this.m_impulse.y += df.y; + var P3 = Vec2.mulNumVec2(df.x, this.m_perp); + var LA = df.x * this.m_s1 + df.y; + var LB = df.x * this.m_s2 + df.y; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + PrismaticJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.sub(Vec2.add(cB2, rB2), Vec2.add(cA2, rA2)); + var axis = Rot.mulVec2(qA, this.m_localXAxisA); + var a1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), axis); + var a2 = Vec2.crossVec2Vec2(rB2, axis); + var perp2 = Rot.mulVec2(qA, this.m_localYAxisA); + var s1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), perp2); + var s2 = Vec2.crossVec2Vec2(rB2, perp2); + var impulse = new Vec3(); + var C1 = Vec2.zero(); + C1.x = Vec2.dot(perp2, d2); + C1.y = aB - aA - this.m_referenceAngle; + var linearError = math_abs$4(C1.x); + var angularError = math_abs$4(C1.y); + var linearSlop = SettingsInternal.linearSlop; + var maxLinearCorrection = SettingsInternal.maxLinearCorrection; + var active = false; + var C2 = 0; + if (this.m_enableLimit) { + var translation2 = Vec2.dot(axis, d2); + if (math_abs$4(this.m_upperTranslation - this.m_lowerTranslation) < 2 * linearSlop) { + C2 = clamp$1(translation2, -maxLinearCorrection, maxLinearCorrection); + linearError = math_max$1(linearError, math_abs$4(translation2)); + active = true; + } else if (translation2 <= this.m_lowerTranslation) { + C2 = clamp$1(translation2 - this.m_lowerTranslation + linearSlop, -maxLinearCorrection, 0); + linearError = Math.max(linearError, this.m_lowerTranslation - translation2); + active = true; + } else if (translation2 >= this.m_upperTranslation) { + C2 = clamp$1(translation2 - this.m_upperTranslation - linearSlop, 0, maxLinearCorrection); + linearError = Math.max(linearError, translation2 - this.m_upperTranslation); + active = true; + } + } + if (active) { + var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; + var k12 = iA * s1 + iB * s2; + var k13 = iA * s1 * a1 + iB * s2 * a2; + var k22 = iA + iB; + if (k22 == 0) { + k22 = 1; + } + var k23 = iA * a1 + iB * a2; + var k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2; + var K = new Mat33(); + K.ex.set(k11, k12, k13); + K.ey.set(k12, k22, k23); + K.ez.set(k13, k23, k33); + var C = new Vec3(); + C.x = C1.x; + C.y = C1.y; + C.z = C2; + impulse = K.solve33(Vec3.neg(C)); + } else { + var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; + var k12 = iA * s1 + iB * s2; + var k22 = iA + iB; + if (k22 == 0) { + k22 = 1; + } + var K = new Mat22(); + K.ex.setNum(k11, k12); + K.ey.setNum(k12, k22); + var impulse1 = K.solve(Vec2.neg(C1)); + impulse.x = impulse1.x; + impulse.y = impulse1.y; + impulse.z = 0; + } + var P3 = Vec2.combine(impulse.x, perp2, impulse.z, axis); + var LA = impulse.x * s1 + impulse.y + impulse.z * a1; + var LB = impulse.x * s2 + impulse.y + impulse.z * a2; + cA2.subMul(mA, P3); + aA -= iA * LA; + cB2.addMul(mB, P3); + aB += iB * LB; + this.m_bodyA.c_position.c = cA2; + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c = cB2; + this.m_bodyB.c_position.a = aB; + return linearError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; + }; + PrismaticJoint2.TYPE = "prismatic-joint"; + return PrismaticJoint2; + }(Joint) + ); + var DEFAULTS$6 = { + ratio: 1 + }; + var GearJoint = ( + /** @class */ + function(_super) { + __extends$a(GearJoint2, _super); + function GearJoint2(def, bodyA, bodyB, joint1, joint2, ratio) { + var _this = this; + if (!(_this instanceof GearJoint2)) { + return new GearJoint2(def, bodyA, bodyB, joint1, joint2, ratio); + } + def = options(def, DEFAULTS$6); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = GearJoint2.TYPE; + _this.m_joint1 = joint1 ? joint1 : def.joint1; + _this.m_joint2 = joint2 ? joint2 : def.joint2; + _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; + _this.m_type1 = _this.m_joint1.getType(); + _this.m_type2 = _this.m_joint2.getType(); + var coordinateA; + var coordinateB; + _this.m_bodyC = _this.m_joint1.getBodyA(); + _this.m_bodyA = _this.m_joint1.getBodyB(); + var xfA2 = _this.m_bodyA.m_xf; + var aA = _this.m_bodyA.m_sweep.a; + var xfC = _this.m_bodyC.m_xf; + var aC = _this.m_bodyC.m_sweep.a; + if (_this.m_type1 === RevoluteJoint.TYPE) { + var revolute = _this.m_joint1; + _this.m_localAnchorC = revolute.m_localAnchorA; + _this.m_localAnchorA = revolute.m_localAnchorB; + _this.m_referenceAngleA = revolute.m_referenceAngle; + _this.m_localAxisC = Vec2.zero(); + coordinateA = aA - aC - _this.m_referenceAngleA; + } else { + var prismatic = _this.m_joint1; + _this.m_localAnchorC = prismatic.m_localAnchorA; + _this.m_localAnchorA = prismatic.m_localAnchorB; + _this.m_referenceAngleA = prismatic.m_referenceAngle; + _this.m_localAxisC = prismatic.m_localXAxisA; + var pC = _this.m_localAnchorC; + var pA2 = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA2.q, _this.m_localAnchorA), Vec2.sub(xfA2.p, xfC.p))); + coordinateA = Vec2.dot(pA2, _this.m_localAxisC) - Vec2.dot(pC, _this.m_localAxisC); + } + _this.m_bodyD = _this.m_joint2.getBodyA(); + _this.m_bodyB = _this.m_joint2.getBodyB(); + var xfB2 = _this.m_bodyB.m_xf; + var aB = _this.m_bodyB.m_sweep.a; + var xfD = _this.m_bodyD.m_xf; + var aD = _this.m_bodyD.m_sweep.a; + if (_this.m_type2 === RevoluteJoint.TYPE) { + var revolute = _this.m_joint2; + _this.m_localAnchorD = revolute.m_localAnchorA; + _this.m_localAnchorB = revolute.m_localAnchorB; + _this.m_referenceAngleB = revolute.m_referenceAngle; + _this.m_localAxisD = Vec2.zero(); + coordinateB = aB - aD - _this.m_referenceAngleB; + } else { + var prismatic = _this.m_joint2; + _this.m_localAnchorD = prismatic.m_localAnchorA; + _this.m_localAnchorB = prismatic.m_localAnchorB; + _this.m_referenceAngleB = prismatic.m_referenceAngle; + _this.m_localAxisD = prismatic.m_localXAxisA; + var pD = _this.m_localAnchorD; + var pB2 = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB2.q, _this.m_localAnchorB), Vec2.sub(xfB2.p, xfD.p))); + coordinateB = Vec2.dot(pB2, _this.m_localAxisD) - Vec2.dot(pD, _this.m_localAxisD); + } + _this.m_constant = coordinateA + _this.m_ratio * coordinateB; + _this.m_impulse = 0; + return _this; + } + GearJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + joint1: this.m_joint1, + joint2: this.m_joint2, + ratio: this.m_ratio + // _constant: this.m_constant, }; - WheelJoint.prototype.solveVelocityConstraints = function (step) { - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - // Solve spring constraint - { - var Cdot = Vec2.dot(this.m_ax, vB) - Vec2.dot(this.m_ax, vA) + this.m_sBx * wB - this.m_sAx * wA; - var impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse); - this.m_springImpulse += impulse; - var P = Vec2.mulNumVec2(impulse, this.m_ax); - var LA = impulse * this.m_sAx; - var LB = impulse * this.m_sBx; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - // Solve rotational motor constraint - { - var Cdot = wB - wA - this.m_motorSpeed; - var impulse = -this.m_motorMass * Cdot; - var oldImpulse = this.m_motorImpulse; - var maxImpulse = step.dt * this.m_maxMotorTorque; - this.m_motorImpulse = clamp$1(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_motorImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve point to line constraint - { - var Cdot = Vec2.dot(this.m_ay, vB) - Vec2.dot(this.m_ay, vA) + this.m_sBy * wB - this.m_sAy * wA; - var impulse = -this.m_mass * Cdot; - this.m_impulse += impulse; - var P = Vec2.mulNumVec2(impulse, this.m_ay); - var LA = impulse * this.m_sAy; - var LB = impulse * this.m_sBy; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; + }; + GearJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + data.joint1 = restore(Joint, data.joint1, world); + data.joint2 = restore(Joint, data.joint2, world); + var joint = new GearJoint2(data); + return joint; + }; + GearJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.ratio)) { + this.m_ratio = def.ratio; + } + }; + GearJoint2.prototype.getJoint1 = function() { + return this.m_joint1; + }; + GearJoint2.prototype.getJoint2 = function() { + return this.m_joint2; + }; + GearJoint2.prototype.setRatio = function(ratio) { + this.m_ratio = ratio; + }; + GearJoint2.prototype.getRatio = function() { + return this.m_ratio; + }; + GearJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + GearJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + GearJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt); + }; + GearJoint2.prototype.getReactionTorque = function(inv_dt) { + var L = this.m_impulse * this.m_JwA; + return inv_dt * L; + }; + GearJoint2.prototype.initVelocityConstraints = function(step) { + this.m_lcA = this.m_bodyA.m_sweep.localCenter; + this.m_lcB = this.m_bodyB.m_sweep.localCenter; + this.m_lcC = this.m_bodyC.m_sweep.localCenter; + this.m_lcD = this.m_bodyD.m_sweep.localCenter; + this.m_mA = this.m_bodyA.m_invMass; + this.m_mB = this.m_bodyB.m_invMass; + this.m_mC = this.m_bodyC.m_invMass; + this.m_mD = this.m_bodyD.m_invMass; + this.m_iA = this.m_bodyA.m_invI; + this.m_iB = this.m_bodyB.m_invI; + this.m_iC = this.m_bodyC.m_invI; + this.m_iD = this.m_bodyD.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var aC = this.m_bodyC.c_position.a; + var vC = this.m_bodyC.c_velocity.v; + var wC = this.m_bodyC.c_velocity.w; + var aD = this.m_bodyD.c_position.a; + var vD = this.m_bodyD.c_velocity.v; + var wD = this.m_bodyD.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var qC = Rot.neo(aC); + var qD = Rot.neo(aD); + this.m_mass = 0; + if (this.m_type1 == RevoluteJoint.TYPE) { + this.m_JvAC = Vec2.zero(); + this.m_JwA = 1; + this.m_JwC = 1; + this.m_mass += this.m_iA + this.m_iC; + } else { + var u = Rot.mulVec2(qC, this.m_localAxisC); + var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); + this.m_JvAC = u; + this.m_JwC = Vec2.crossVec2Vec2(rC, u); + this.m_JwA = Vec2.crossVec2Vec2(rA2, u); + 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; + } + if (this.m_type2 == RevoluteJoint.TYPE) { + this.m_JvBD = Vec2.zero(); + this.m_JwB = this.m_ratio; + this.m_JwD = this.m_ratio; + this.m_mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); + } else { + var u = Rot.mulVec2(qD, this.m_localAxisD); + var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); + this.m_JvBD = Vec2.mulNumVec2(this.m_ratio, u); + this.m_JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); + this.m_JwB = this.m_ratio * Vec2.crossVec2Vec2(rB2, u); + 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; + } + this.m_mass = this.m_mass > 0 ? 1 / this.m_mass : 0; + if (step.warmStarting) { + vA2.addMul(this.m_mA * this.m_impulse, this.m_JvAC); + wA += this.m_iA * this.m_impulse * this.m_JwA; + vB2.addMul(this.m_mB * this.m_impulse, this.m_JvBD); + wB += this.m_iB * this.m_impulse * this.m_JwB; + vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC); + wC -= this.m_iC * this.m_impulse * this.m_JwC; + vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD); + wD -= this.m_iD * this.m_impulse * this.m_JwD; + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + this.m_bodyC.c_velocity.v.setVec2(vC); + this.m_bodyC.c_velocity.w = wC; + this.m_bodyD.c_velocity.v.setVec2(vD); + this.m_bodyD.c_velocity.w = wD; + }; + GearJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vC = this.m_bodyC.c_velocity.v; + var wC = this.m_bodyC.c_velocity.w; + var vD = this.m_bodyD.c_velocity.v; + var wD = this.m_bodyD.c_velocity.w; + 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); + Cdot += this.m_JwA * wA - this.m_JwC * wC + (this.m_JwB * wB - this.m_JwD * wD); + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + vA2.addMul(this.m_mA * impulse, this.m_JvAC); + wA += this.m_iA * impulse * this.m_JwA; + vB2.addMul(this.m_mB * impulse, this.m_JvBD); + wB += this.m_iB * impulse * this.m_JwB; + vC.subMul(this.m_mC * impulse, this.m_JvAC); + wC -= this.m_iC * impulse * this.m_JwC; + vD.subMul(this.m_mD * impulse, this.m_JvBD); + wD -= this.m_iD * impulse * this.m_JwD; + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + this.m_bodyC.c_velocity.v.setVec2(vC); + this.m_bodyC.c_velocity.w = wC; + this.m_bodyD.c_velocity.v.setVec2(vD); + this.m_bodyD.c_velocity.w = wD; + }; + GearJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var cC = this.m_bodyC.c_position.c; + var aC = this.m_bodyC.c_position.a; + var cD = this.m_bodyD.c_position.c; + var aD = this.m_bodyD.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var qC = Rot.neo(aC); + var qD = Rot.neo(aD); + var linearError = 0; + var coordinateA; + var coordinateB; + var JvAC; + var JvBD; + var JwA; + var JwB; + var JwC; + var JwD; + var mass = 0; + if (this.m_type1 == RevoluteJoint.TYPE) { + JvAC = Vec2.zero(); + JwA = 1; + JwC = 1; + mass += this.m_iA + this.m_iC; + coordinateA = aA - aC - this.m_referenceAngleA; + } else { + var u = Rot.mulVec2(qC, this.m_localAxisC); + var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); + JvAC = u; + JwC = Vec2.crossVec2Vec2(rC, u); + JwA = Vec2.crossVec2Vec2(rA2, u); + mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA; + var pC = Vec2.sub(this.m_localAnchorC, this.m_lcC); + var pA2 = Rot.mulTVec2(qC, Vec2.add(rA2, Vec2.sub(cA2, cC))); + coordinateA = Vec2.dot(Vec2.sub(pA2, pC), this.m_localAxisC); + } + if (this.m_type2 == RevoluteJoint.TYPE) { + JvBD = Vec2.zero(); + JwB = this.m_ratio; + JwD = this.m_ratio; + mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); + coordinateB = aB - aD - this.m_referenceAngleB; + } else { + var u = Rot.mulVec2(qD, this.m_localAxisD); + var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); + JvBD = Vec2.mulNumVec2(this.m_ratio, u); + JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); + JwB = this.m_ratio * Vec2.crossVec2Vec2(rB2, u); + mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * JwD * JwD + this.m_iB * JwB * JwB; + var pD = Vec2.sub(this.m_localAnchorD, this.m_lcD); + var pB2 = Rot.mulTVec2(qD, Vec2.add(rB2, Vec2.sub(cB2, cD))); + coordinateB = Vec2.dot(pB2, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD); + } + var C = coordinateA + this.m_ratio * coordinateB - this.m_constant; + var impulse = 0; + if (mass > 0) { + impulse = -C / mass; + } + cA2.addMul(this.m_mA * impulse, JvAC); + aA += this.m_iA * impulse * JwA; + cB2.addMul(this.m_mB * impulse, JvBD); + aB += this.m_iB * impulse * JwB; + cC.subMul(this.m_mC * impulse, JvAC); + aC -= this.m_iC * impulse * JwC; + cD.subMul(this.m_mD * impulse, JvBD); + aD -= this.m_iD * impulse * JwD; + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + this.m_bodyC.c_position.c.setVec2(cC); + this.m_bodyC.c_position.a = aC; + this.m_bodyD.c_position.c.setVec2(cD); + this.m_bodyD.c_position.a = aD; + return linearError < SettingsInternal.linearSlop; + }; + GearJoint2.TYPE = "gear-joint"; + return GearJoint2; + }(Joint) + ); + var DEFAULTS$5 = { + maxForce: 1, + maxTorque: 1, + correctionFactor: 0.3 + }; + var MotorJoint = ( + /** @class */ + function(_super) { + __extends$a(MotorJoint2, _super); + function MotorJoint2(def, bodyA, bodyB) { + var _this = this; + if (!(_this instanceof MotorJoint2)) { + return new MotorJoint2(def, bodyA, bodyB); + } + def = options(def, DEFAULTS$5); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = MotorJoint2.TYPE; + _this.m_linearOffset = Vec2.isValid(def.linearOffset) ? Vec2.clone(def.linearOffset) : bodyA.getLocalPoint(bodyB.getPosition()); + _this.m_angularOffset = Number.isFinite(def.angularOffset) ? def.angularOffset : bodyB.getAngle() - bodyA.getAngle(); + _this.m_linearImpulse = Vec2.zero(); + _this.m_angularImpulse = 0; + _this.m_maxForce = def.maxForce; + _this.m_maxTorque = def.maxTorque; + _this.m_correctionFactor = def.correctionFactor; + return _this; + } + MotorJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + maxForce: this.m_maxForce, + maxTorque: this.m_maxTorque, + correctionFactor: this.m_correctionFactor, + linearOffset: this.m_linearOffset, + angularOffset: this.m_angularOffset }; - /** - * This returns true if the position errors are within tolerance. - */ - WheelJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.zero(); - d.addCombine(1, cB, 1, rB); - d.subCombine(1, cA, 1, rA); - var ay = Rot.mulVec2(qA, this.m_localYAxisA); - var sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), ay); - var sBy = Vec2.crossVec2Vec2(rB, ay); - var C = Vec2.dot(d, ay); - 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; - var impulse = k != 0.0 ? -C / k : 0.0; - var P = Vec2.mulNumVec2(impulse, ay); - var LA = impulse * sAy; - var LB = impulse * sBy; - cA.subMul(this.m_invMassA, P); - aA -= this.m_invIA * LA; - cB.addMul(this.m_invMassB, P); - aB += this.m_invIB * LB; - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return math_abs$1(C) <= SettingsInternal.linearSlop; + }; + MotorJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new MotorJoint2(data); + return joint; + }; + MotorJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.angularOffset)) { + this.m_angularOffset = def.angularOffset; + } + if (Number.isFinite(def.maxForce)) { + this.m_maxForce = def.maxForce; + } + if (Number.isFinite(def.maxTorque)) { + this.m_maxTorque = def.maxTorque; + } + if (Number.isFinite(def.correctionFactor)) { + this.m_correctionFactor = def.correctionFactor; + } + if (Vec2.isValid(def.linearOffset)) { + this.m_linearOffset.set(def.linearOffset); + } + }; + MotorJoint2.prototype.setMaxForce = function(force) { + this.m_maxForce = force; + }; + MotorJoint2.prototype.getMaxForce = function() { + return this.m_maxForce; + }; + MotorJoint2.prototype.setMaxTorque = function(torque) { + this.m_maxTorque = torque; + }; + MotorJoint2.prototype.getMaxTorque = function() { + return this.m_maxTorque; + }; + MotorJoint2.prototype.setCorrectionFactor = function(factor) { + this.m_correctionFactor = factor; + }; + MotorJoint2.prototype.getCorrectionFactor = function() { + return this.m_correctionFactor; + }; + MotorJoint2.prototype.setLinearOffset = function(linearOffset) { + if (linearOffset.x != this.m_linearOffset.x || linearOffset.y != this.m_linearOffset.y) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_linearOffset.set(linearOffset); + } + }; + MotorJoint2.prototype.getLinearOffset = function() { + return this.m_linearOffset; + }; + MotorJoint2.prototype.setAngularOffset = function(angularOffset) { + if (angularOffset != this.m_angularOffset) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_angularOffset = angularOffset; + } + }; + MotorJoint2.prototype.getAngularOffset = function() { + return this.m_angularOffset; + }; + MotorJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getPosition(); + }; + MotorJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getPosition(); + }; + MotorJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); + }; + MotorJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_angularImpulse; + }; + MotorJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_linearOffset, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.neg(this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var K = new Mat22(); + K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y; + K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x; + this.m_linearMass = K.getInverse(); + this.m_angularMass = iA + iB; + if (this.m_angularMass > 0) { + this.m_angularMass = 1 / this.m_angularMass; + } + this.m_linearError = Vec2.zero(); + this.m_linearError.addCombine(1, cB2, 1, this.m_rB); + this.m_linearError.subCombine(1, cA2, 1, this.m_rA); + this.m_angularError = aB - aA - this.m_angularOffset; + if (step.warmStarting) { + this.m_linearImpulse.mul(step.dtRatio); + this.m_angularImpulse *= step.dtRatio; + var P3 = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_angularImpulse); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_angularImpulse); + } else { + this.m_linearImpulse.setZero(); + this.m_angularImpulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + MotorJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var h = step.dt; + var inv_h = step.inv_dt; + { + var Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError; + var impulse = -this.m_angularMass * Cdot; + var oldImpulse = this.m_angularImpulse; + var maxImpulse = h * this.m_maxTorque; + this.m_angularImpulse = clamp$1(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_angularImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + { + var Cdot = Vec2.zero(); + Cdot.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError); + var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); + var oldImpulse = Vec2.clone(this.m_linearImpulse); + this.m_linearImpulse.add(impulse); + var maxImpulse = h * this.m_maxForce; + this.m_linearImpulse.clamp(maxImpulse); + impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); + vA2.subMul(mA, impulse); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); + vB2.addMul(mB, impulse); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + MotorJoint2.prototype.solvePositionConstraints = function(step) { + return true; + }; + MotorJoint2.TYPE = "motor-joint"; + return MotorJoint2; + }(Joint) + ); + var math_PI$3 = Math.PI; + var DEFAULTS$4 = { + maxForce: 0, + frequencyHz: 5, + dampingRatio: 0.7 + }; + var MouseJoint = ( + /** @class */ + function(_super) { + __extends$a(MouseJoint2, _super); + function MouseJoint2(def, bodyA, bodyB, target) { + var _this = this; + if (!(_this instanceof MouseJoint2)) { + return new MouseJoint2(def, bodyA, bodyB, target); + } + def = options(def, DEFAULTS$4); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = MouseJoint2.TYPE; + if (Vec2.isValid(target)) { + _this.m_targetA = Vec2.clone(target); + } else if (Vec2.isValid(def.target)) { + _this.m_targetA = Vec2.clone(def.target); + } else { + _this.m_targetA = Vec2.zero(); + } + _this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), _this.m_targetA); + _this.m_maxForce = def.maxForce; + _this.m_impulse = Vec2.zero(); + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_beta = 0; + _this.m_gamma = 0; + _this.m_rB = Vec2.zero(); + _this.m_localCenterB = Vec2.zero(); + _this.m_invMassB = 0; + _this.m_invIB = 0; + _this.m_mass = new Mat22(); + _this.m_C = Vec2.zero(); + return _this; + } + MouseJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + target: this.m_targetA, + maxForce: this.m_maxForce, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + _localAnchorB: this.m_localAnchorB }; - WheelJoint.TYPE = "wheel-joint"; - return WheelJoint; - }(Joint)); - - var _a; - var SID = 0; - // Classes to be serialized as reference objects - var SERIALIZE_REF_TYPES = { - "World": World, - "Body": Body, - "Joint": Joint, - "Fixture": Fixture, - "Shape": Shape, - }; - // For deserializing reference objects by reference type - var DESERIALIZE_BY_REF_TYPE = { - "Vec2": Vec2, - "Vec3": Vec3, - "World": World, - "Body": Body, - "Joint": Joint, - "Fixture": Fixture, - "Shape": Shape, - }; - // For deserializing data objects by type field - var DESERIALIZE_BY_TYPE_FIELD = (_a = {}, - _a[Body.STATIC] = Body, - _a[Body.DYNAMIC] = Body, - _a[Body.KINEMATIC] = Body, - _a[ChainShape.TYPE] = ChainShape, - // [BoxShape.TYPE]: BoxShape, - _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); - var DEFAULT_OPTIONS = { - rootClass: World, - preSerialize: function (obj) { return obj; }, - postSerialize: function (data, obj) { return data; }, - preDeserialize: function (data) { return data; }, - postDeserialize: function (obj, data) { return obj; }, - }; - var Serializer = /** @class */ (function () { - function Serializer(options) { - var _this = this; - this.toJson = function (root) { - var preSerialize = _this.options.preSerialize; - var postSerialize = _this.options.postSerialize; - var json = []; - // Breadth-first ref serialization queue - var refQueue = [root]; - var refMemoById = {}; - function addToRefQueue(value, typeName) { - value.__sid = value.__sid || ++SID; - if (!refMemoById[value.__sid]) { - refQueue.push(value); - var index = json.length + refQueue.length; - var ref = { - refIndex: index, - refType: typeName - }; - refMemoById[value.__sid] = ref; - } - return refMemoById[value.__sid]; - } - function serializeWithHooks(obj) { - obj = preSerialize(obj); - var data = obj._serialize(); - data = postSerialize(data, obj); - return data; - } - // traverse the object graph - // ref objects are pushed into the queue - // other objects are serialize in-place - function traverse(value, noRefType) { - if (noRefType === void 0) { noRefType = false; } - if (typeof value !== "object" || value === null) { - return value; - } - // object with _serialize function - if (typeof value._serialize === "function") { - if (!noRefType) { - for (var typeName in SERIALIZE_REF_TYPES) { - if (value instanceof SERIALIZE_REF_TYPES[typeName]) { - return addToRefQueue(value, typeName); - } - } - } - // object with _serialize function - value = serializeWithHooks(value); - } - // recursive for arrays any objects - if (Array.isArray(value)) { - var newValue = []; - for (var key = 0; key < value.length; key++) { - newValue[key] = traverse(value[key]); - } - value = newValue; - } - else { - var newValue = {}; - for (var key in value) { - if (value.hasOwnProperty(key)) { - newValue[key] = traverse(value[key]); - } - } - value = newValue; - } - return value; - } - while (refQueue.length) { - var obj = refQueue.shift(); - var str = traverse(obj, true); - json.push(str); - } - return json; - }; - this.fromJson = function (json) { - var preDeserialize = _this.options.preDeserialize; - var postDeserialize = _this.options.postDeserialize; - var rootClass = _this.options.rootClass; - var deserializedRefMemoByIndex = {}; - function deserializeWithHooks(classHint, data, context) { - if (!classHint || !classHint._deserialize) { - classHint = DESERIALIZE_BY_TYPE_FIELD[data.type]; - } - var deserializer = classHint && classHint._deserialize; - if (!deserializer) { - return; - } - data = preDeserialize(data); - var classDeserializeFn = classHint._deserialize; - var obj = classDeserializeFn(data, context, deserializeChild); - obj = postDeserialize(obj, data); - return obj; - } - /** - * Recursive callback function to deserialize a child data object or reference object. - * - * @param classHint suggested class to deserialize obj to - * @param dataOrRef data or reference object - * @param context for example world when deserializing bodies and joints - */ - function deserializeChild(classHint, dataOrRef, context) { - var isRefObject = dataOrRef.refIndex && dataOrRef.refType; - if (!isRefObject) { - return deserializeWithHooks(classHint, dataOrRef, context); - } - var ref = dataOrRef; - if (DESERIALIZE_BY_REF_TYPE[ref.refType]) { - classHint = DESERIALIZE_BY_REF_TYPE[ref.refType]; - } - var refIndex = ref.refIndex; - if (!deserializedRefMemoByIndex[refIndex]) { - var data = json[refIndex]; - var obj = deserializeWithHooks(classHint, data, context); - deserializedRefMemoByIndex[refIndex] = obj; - } - return deserializedRefMemoByIndex[refIndex]; - } - var root = deserializeWithHooks(rootClass, json[0], null); - return root; - }; - this.options = __assign$1(__assign$1({}, DEFAULT_OPTIONS), options); + }; + MouseJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + data.target = Vec2.clone(data.target); + var joint = new MouseJoint2(data); + if (data._localAnchorB) { + joint.m_localAnchorB = data._localAnchorB; + } + return joint; + }; + MouseJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.maxForce)) { + this.m_maxForce = def.maxForce; + } + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; + } + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; + } + }; + MouseJoint2.prototype.setTarget = function(target) { + if (Vec2.areEqual(target, this.m_targetA)) + return; + this.m_bodyB.setAwake(true); + this.m_targetA.set(target); + }; + MouseJoint2.prototype.getTarget = function() { + return this.m_targetA; + }; + MouseJoint2.prototype.setMaxForce = function(force) { + this.m_maxForce = force; + }; + MouseJoint2.prototype.getMaxForce = function() { + return this.m_maxForce; + }; + MouseJoint2.prototype.setFrequency = function(hz) { + this.m_frequencyHz = hz; + }; + MouseJoint2.prototype.getFrequency = function() { + return this.m_frequencyHz; + }; + MouseJoint2.prototype.setDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + MouseJoint2.prototype.getDampingRatio = function() { + return this.m_dampingRatio; + }; + MouseJoint2.prototype.getAnchorA = function() { + return Vec2.clone(this.m_targetA); + }; + MouseJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + MouseJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(inv_dt, this.m_impulse); + }; + MouseJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * 0; + }; + MouseJoint2.prototype.shiftOrigin = function(newOrigin) { + this.m_targetA.sub(newOrigin); + }; + MouseJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIB = this.m_bodyB.m_invI; + var position = this.m_bodyB.c_position; + var velocity = this.m_bodyB.c_velocity; + var cB2 = position.c; + var aB = position.a; + var vB2 = velocity.v; + var wB = velocity.w; + var qB = Rot.neo(aB); + var mass = this.m_bodyB.getMass(); + var omega = 2 * math_PI$3 * this.m_frequencyHz; + var d2 = 2 * mass * this.m_dampingRatio * omega; + var k = mass * (omega * omega); + var h = step.dt; + this.m_gamma = h * (d2 + h * k); + if (this.m_gamma != 0) { + this.m_gamma = 1 / this.m_gamma; + } + this.m_beta = h * k * this.m_gamma; + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var K = new Mat22(); + K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y + this.m_gamma; + K.ex.y = -this.m_invIB * this.m_rB.x * this.m_rB.y; + K.ey.x = K.ex.y; + K.ey.y = this.m_invMassB + this.m_invIB * this.m_rB.x * this.m_rB.x + this.m_gamma; + this.m_mass = K.getInverse(); + this.m_C.setVec2(cB2); + this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA); + this.m_C.mul(this.m_beta); + wB *= 0.98; + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + vB2.addMul(this.m_invMassB, this.m_impulse); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse); + } else { + this.m_impulse.setZero(); + } + velocity.v.setVec2(vB2); + velocity.w = wB; + }; + MouseJoint2.prototype.solveVelocityConstraints = function(step) { + var velocity = this.m_bodyB.c_velocity; + var vB2 = Vec2.clone(velocity.v); + var wB = velocity.w; + var Cdot = Vec2.crossNumVec2(wB, this.m_rB); + Cdot.add(vB2); + Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse); + Cdot.neg(); + var impulse = Mat22.mulVec2(this.m_mass, Cdot); + var oldImpulse = Vec2.clone(this.m_impulse); + this.m_impulse.add(impulse); + var maxImpulse = step.dt * this.m_maxForce; + this.m_impulse.clamp(maxImpulse); + impulse = Vec2.sub(this.m_impulse, oldImpulse); + vB2.addMul(this.m_invMassB, impulse); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse); + velocity.v.setVec2(vB2); + velocity.w = wB; + }; + MouseJoint2.prototype.solvePositionConstraints = function(step) { + return true; + }; + MouseJoint2.TYPE = "mouse-joint"; + return MouseJoint2; + }(Joint) + ); + var math_abs$3 = Math.abs; + var DEFAULTS$3 = { + collideConnected: true + }; + var PulleyJoint = ( + /** @class */ + function(_super) { + __extends$a(PulleyJoint2, _super); + function PulleyJoint2(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio) { + var _this = this; + if (!(_this instanceof PulleyJoint2)) { + return new PulleyJoint2(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio); + } + def = options(def, DEFAULTS$3); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = PulleyJoint2.TYPE; + _this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1, 1)); + _this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1, 1)); + _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1, 0)); + _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1, 0)); + _this.m_lengthA = Number.isFinite(def.lengthA) ? def.lengthA : Vec2.distance(anchorA, groundA); + _this.m_lengthB = Number.isFinite(def.lengthB) ? def.lengthB : Vec2.distance(anchorB, groundB); + _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; + _this.m_constant = _this.m_lengthA + _this.m_ratio * _this.m_lengthB; + _this.m_impulse = 0; + return _this; + } + PulleyJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + groundAnchorA: this.m_groundAnchorA, + groundAnchorB: this.m_groundAnchorB, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + lengthA: this.m_lengthA, + lengthB: this.m_lengthB, + ratio: this.m_ratio + }; + }; + PulleyJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new PulleyJoint2(data); + return joint; + }; + PulleyJoint2.prototype._reset = function(def) { + if (Vec2.isValid(def.groundAnchorA)) { + this.m_groundAnchorA.set(def.groundAnchorA); } - return Serializer; - }()); - var worldSerializer = new Serializer({ - rootClass: World, - }); - Serializer.fromJson = worldSerializer.fromJson; - Serializer.toJson = worldSerializer.toJson; - - var Testbed = /** @class */ (function () { - function Testbed() { - /** World viewbox width. */ - this.width = 80; - /** World viewbox height. */ - this.height = 60; - /** World viewbox center vertical offset. */ - this.x = 0; - /** World viewbox center horizontal offset. */ - this.y = -10; - /** @hidden */ - this.scaleY = -1; - /** World simulation step frequency */ - this.hz = 60; - /** World simulation speed, default is 1 */ - this.speed = 1; - this.background = "#222222"; - this.activeKeys = {}; - /** callback, to be implemented by user */ - this.step = function (dt, t) { - return; - }; - /** callback, to be implemented by user */ - this.keydown = function (keyCode, label) { - return; - }; - /** callback, to be implemented by user */ - this.keyup = function (keyCode, label) { - return; - }; + if (Vec2.isValid(def.groundAnchorB)) { + this.m_groundAnchorB.set(def.groundAnchorB); } - /** - * Mounts testbed. Call start with a world to start simulation and rendering. - */ - Testbed.mount = function (options) { - throw new Error("Not implemented"); - }; - /** - * Mounts testbed if needed, then starts simulation and rendering. - * - * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`. - */ - Testbed.start = function (world) { - var testbed = Testbed.mount(); - testbed.start(world); - return testbed; - }; - Testbed.prototype.color = function (r, g, b) { - r = r * 256 | 0; - g = g * 256 | 0; - b = b * 256 | 0; - return "rgb(" + r + ", " + g + ", " + b + ")"; + if (Vec2.isValid(def.localAnchorA)) { + this.m_localAnchorA.set(def.localAnchorA); + } else if (Vec2.isValid(def.anchorA)) { + this.m_localAnchorA.set(this.m_bodyA.getLocalPoint(def.anchorA)); + } + if (Vec2.isValid(def.localAnchorB)) { + this.m_localAnchorB.set(def.localAnchorB); + } else if (Vec2.isValid(def.anchorB)) { + this.m_localAnchorB.set(this.m_bodyB.getLocalPoint(def.anchorB)); + } + if (Number.isFinite(def.lengthA)) { + this.m_lengthA = def.lengthA; + } + if (Number.isFinite(def.lengthB)) { + this.m_lengthB = def.lengthB; + } + if (Number.isFinite(def.ratio)) { + this.m_ratio = def.ratio; + } + }; + PulleyJoint2.prototype.getGroundAnchorA = function() { + return this.m_groundAnchorA; + }; + PulleyJoint2.prototype.getGroundAnchorB = function() { + return this.m_groundAnchorB; + }; + PulleyJoint2.prototype.getLengthA = function() { + return this.m_lengthA; + }; + PulleyJoint2.prototype.getLengthB = function() { + return this.m_lengthB; + }; + PulleyJoint2.prototype.getRatio = function() { + return this.m_ratio; + }; + PulleyJoint2.prototype.getCurrentLengthA = function() { + var p = this.m_bodyA.getWorldPoint(this.m_localAnchorA); + var s2 = this.m_groundAnchorA; + return Vec2.distance(p, s2); + }; + PulleyJoint2.prototype.getCurrentLengthB = function() { + var p = this.m_bodyB.getWorldPoint(this.m_localAnchorB); + var s2 = this.m_groundAnchorB; + return Vec2.distance(p, s2); + }; + PulleyJoint2.prototype.shiftOrigin = function(newOrigin) { + this.m_groundAnchorA.sub(newOrigin); + this.m_groundAnchorB.sub(newOrigin); + }; + PulleyJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + PulleyJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + PulleyJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt); + }; + PulleyJoint2.prototype.getReactionTorque = function(inv_dt) { + return 0; + }; + PulleyJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + this.m_uA = Vec2.sub(Vec2.add(cA2, this.m_rA), this.m_groundAnchorA); + this.m_uB = Vec2.sub(Vec2.add(cB2, this.m_rB), this.m_groundAnchorB); + var lengthA = this.m_uA.length(); + var lengthB = this.m_uB.length(); + if (lengthA > 10 * SettingsInternal.linearSlop) { + this.m_uA.mul(1 / lengthA); + } else { + this.m_uA.setZero(); + } + if (lengthB > 10 * SettingsInternal.linearSlop) { + this.m_uB.mul(1 / lengthB); + } else { + this.m_uB.setZero(); + } + var ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA); + var ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB); + var mA = this.m_invMassA + this.m_invIA * ruA * ruA; + var mB = this.m_invMassB + this.m_invIB * ruB * ruB; + this.m_mass = mA + this.m_ratio * this.m_ratio * mB; + if (this.m_mass > 0) { + this.m_mass = 1 / this.m_mass; + } + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + var PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA); + var PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB); + vA2.addMul(this.m_invMassA, PA); + wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); + vB2.addMul(this.m_invMassB, PB); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + PulleyJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vpA = Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA)); + var vpB = Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB)); + var Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB); + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + var PA = Vec2.mulNumVec2(-impulse, this.m_uA); + var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB); + vA2.addMul(this.m_invMassA, PA); + wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); + vB2.addMul(this.m_invMassB, PB); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + PulleyJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var uA = Vec2.sub(Vec2.add(cA2, this.m_rA), this.m_groundAnchorA); + var uB = Vec2.sub(Vec2.add(cB2, this.m_rB), this.m_groundAnchorB); + var lengthA = uA.length(); + var lengthB = uB.length(); + if (lengthA > 10 * SettingsInternal.linearSlop) { + uA.mul(1 / lengthA); + } else { + uA.setZero(); + } + if (lengthB > 10 * SettingsInternal.linearSlop) { + uB.mul(1 / lengthB); + } else { + uB.setZero(); + } + var ruA = Vec2.crossVec2Vec2(rA2, uA); + var ruB = Vec2.crossVec2Vec2(rB2, uB); + var mA = this.m_invMassA + this.m_invIA * ruA * ruA; + var mB = this.m_invMassB + this.m_invIB * ruB * ruB; + var mass = mA + this.m_ratio * this.m_ratio * mB; + if (mass > 0) { + mass = 1 / mass; + } + var C = this.m_constant - lengthA - this.m_ratio * lengthB; + var linearError = math_abs$3(C); + var impulse = -mass * C; + var PA = Vec2.mulNumVec2(-impulse, uA); + var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB); + cA2.addMul(this.m_invMassA, PA); + aA += this.m_invIA * Vec2.crossVec2Vec2(rA2, PA); + cB2.addMul(this.m_invMassB, PB); + aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, PB); + this.m_bodyA.c_position.c = cA2; + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c = cB2; + this.m_bodyB.c_position.a = aB; + return linearError < SettingsInternal.linearSlop; + }; + PulleyJoint2.TYPE = "pulley-joint"; + return PulleyJoint2; + }(Joint) + ); + var math_min$2 = Math.min; + var LimitState; + (function(LimitState2) { + LimitState2[LimitState2["inactiveLimit"] = 0] = "inactiveLimit"; + LimitState2[LimitState2["atLowerLimit"] = 1] = "atLowerLimit"; + LimitState2[LimitState2["atUpperLimit"] = 2] = "atUpperLimit"; + LimitState2[LimitState2["equalLimits"] = 3] = "equalLimits"; + })(LimitState || (LimitState = {})); + var DEFAULTS$2 = { + maxLength: 0 + }; + var RopeJoint = ( + /** @class */ + function(_super) { + __extends$a(RopeJoint2, _super); + function RopeJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + if (!(_this instanceof RopeJoint2)) { + return new RopeJoint2(def, bodyA, bodyB, anchor); + } + def = options(def, DEFAULTS$2); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = RopeJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1, 0)); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1, 0)); + _this.m_maxLength = def.maxLength; + _this.m_mass = 0; + _this.m_impulse = 0; + _this.m_length = 0; + _this.m_state = LimitState.inactiveLimit; + return _this; + } + RopeJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + maxLength: this.m_maxLength }; - return Testbed; - }()); - /** @internal */ - function testbed(a, b) { - var callback; - var options; - if (typeof a === "function") { - callback = a; - options = b; - } - else if (typeof b === "function") { - callback = b; - options = a; - } - else { - options = a !== null && a !== void 0 ? a : b; - } - var testbed = Testbed.mount(options); - if (callback) { - // this is for backwards compatibility - var world = callback(testbed) || testbed.world; - testbed.start(world); - } - else { - return testbed; + }; + RopeJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new RopeJoint2(data); + return joint; + }; + RopeJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.maxLength)) { + this.m_maxLength = def.maxLength; } - } - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** - * A rectangle polygon which extend PolygonShape. - */ - var BoxShape = /** @class */ (function (_super) { - __extends$a(BoxShape, _super); - /** - * - * @param halfWidth - * @param halfHeight - * @param center coordinate of the center of the box relative to the body - * @param angle angle of the box relative to the body - */ - function BoxShape(halfWidth, halfHeight, center, angle) { - var _this = this; - // @ts-ignore - if (!(_this instanceof BoxShape)) { - return new BoxShape(halfWidth, halfHeight, center, angle); - } - _this = _super.call(this) || this; - _this._setAsBox(halfWidth, halfHeight, center, angle); - return _this; - } - // note that box is serialized/deserialized as polygon - BoxShape.TYPE = "polygon"; - return BoxShape; - }(PolygonShape)); - var Box = BoxShape; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - Contact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact); - /** @internal */ function CircleCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - CollideCircles(manifold, fixtureA.getShape(), xfA, fixtureB.getShape(), xfB); - } - /** @internal */ var pA = vec2(0, 0); - /** @internal */ var pB = vec2(0, 0); - var CollideCircles = function (manifold, circleA, xfA, circleB, xfB) { - manifold.pointCount = 0; - transformVec2(pA, xfA, circleA.m_p); - transformVec2(pB, xfB, circleB.m_p); - var distSqr = distSqrVec2(pB, pA); - var rA = circleA.m_radius; - var rB = circleB.m_radius; - var radius = rA + rB; - if (distSqr > radius * radius) { - return; + }; + RopeJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + RopeJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + RopeJoint2.prototype.setMaxLength = function(length2) { + this.m_maxLength = length2; + }; + RopeJoint2.prototype.getMaxLength = function() { + return this.m_maxLength; + }; + RopeJoint2.prototype.getLimitState = function() { + return this.m_state; + }; + RopeJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + RopeJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + RopeJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); + }; + RopeJoint2.prototype.getReactionTorque = function(inv_dt) { + return 0; + }; + RopeJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); + this.m_rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); + this.m_u = Vec2.zero(); + this.m_u.addCombine(1, cB2, 1, this.m_rB); + this.m_u.subCombine(1, cA2, 1, this.m_rA); + this.m_length = this.m_u.length(); + var C = this.m_length - this.m_maxLength; + if (C > 0) { + this.m_state = LimitState.atUpperLimit; + } else { + this.m_state = LimitState.inactiveLimit; + } + if (this.m_length > SettingsInternal.linearSlop) { + this.m_u.mul(1 / this.m_length); + } else { + this.m_u.setZero(); + this.m_mass = 0; + this.m_impulse = 0; + return; + } + var crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u); + var crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u); + var invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB; + this.m_mass = invMass != 0 ? 1 / invMass : 0; + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + var P3 = Vec2.mulNumVec2(this.m_impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + RopeJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vpA = Vec2.addCrossNumVec2(vA2, wA, this.m_rA); + var vpB = Vec2.addCrossNumVec2(vB2, wB, this.m_rB); + var C = this.m_length - this.m_maxLength; + var Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA)); + if (C < 0) { + Cdot += step.inv_dt * C; + } + var impulse = -this.m_mass * Cdot; + var oldImpulse = this.m_impulse; + this.m_impulse = math_min$2(0, this.m_impulse + impulse); + impulse = this.m_impulse - oldImpulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + RopeJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); + var u = Vec2.zero(); + u.addCombine(1, cB2, 1, rB2); + u.subCombine(1, cA2, 1, rA2); + var length2 = u.normalize(); + var C = length2 - this.m_maxLength; + C = clamp$1(C, 0, SettingsInternal.maxLinearCorrection); + var impulse = -this.m_mass * C; + var P3 = Vec2.mulNumVec2(impulse, u); + cA2.subMul(this.m_invMassA, P3); + aA -= this.m_invIA * Vec2.crossVec2Vec2(rA2, P3); + cB2.addMul(this.m_invMassB, P3); + aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, P3); + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return length2 - this.m_maxLength < SettingsInternal.linearSlop; + }; + RopeJoint2.TYPE = "rope-joint"; + return RopeJoint2; + }(Joint) + ); + var math_abs$2 = Math.abs; + var math_PI$2 = Math.PI; + var DEFAULTS$1 = { + frequencyHz: 0, + dampingRatio: 0 + }; + var WeldJoint = ( + /** @class */ + function(_super) { + __extends$a(WeldJoint2, _super); + function WeldJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + if (!(_this instanceof WeldJoint2)) { + return new WeldJoint2(def, bodyA, bodyB, anchor); + } + def = options(def, DEFAULTS$1); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = WeldJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_impulse = new Vec3(); + _this.m_bias = 0; + _this.m_gamma = 0; + _this.m_rA; + _this.m_rB; + _this.m_localCenterA; + _this.m_localCenterB; + _this.m_invMassA; + _this.m_invMassB; + _this.m_invIA; + _this.m_invIB; + _this.m_mass = new Mat33(); + return _this; + } + WeldJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + referenceAngle: this.m_referenceAngle + }; + }; + WeldJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new WeldJoint2(data); + return joint; + }; + WeldJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); } - manifold.type = exports.ManifoldType.e_circles; - copyVec2(manifold.localPoint, circleA.m_p); - zeroVec2(manifold.localNormal); - manifold.pointCount = 1; - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, exports.ContactFeatureType.e_vertex, 0, exports.ContactFeatureType.e_vertex); - }; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - Contact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact); - Contact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact); - /** @internal */ function EdgeCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - var shapeA = fixtureA.getShape(); - var shapeB = fixtureB.getShape(); - CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB); - } - function ChainCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - var chain = fixtureA.getShape(); - var edge = new EdgeShape(); - chain.getChildEdge(edge, indexA); - var shapeA = edge; - var shapeB = fixtureB.getShape(); - CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB); - } - /** @internal */ var e = vec2(0, 0); - /** @internal */ var e1 = vec2(0, 0); - /** @internal */ var e2 = vec2(0, 0); - /** @internal */ var Q = vec2(0, 0); - /** @internal */ var P = vec2(0, 0); - /** @internal */ var n$2 = vec2(0, 0); - // Compute contact points for edge versus circle. - // This accounts for edge connectivity. - var CollideEdgeCircle = function (manifold, edgeA, xfA, circleB, xfB) { - manifold.pointCount = 0; - // Compute circle in frame of edge - retransformVec2(Q, xfB, xfA, circleB.m_p); - var A = edgeA.m_vertex1; - var B = edgeA.m_vertex2; - subVec2(e, B, A); - // Barycentric coordinates - var u = dotVec2(e, B) - dotVec2(e, Q); - var v = dotVec2(e, Q) - dotVec2(e, A); - var radius = edgeA.m_radius + circleB.m_radius; - // Region A - if (v <= 0.0) { - copyVec2(P, A); - var dd_1 = distSqrVec2(Q, A); - if (dd_1 > radius * radius) { - return; - } - // Is there an edge connected to A? - if (edgeA.m_hasVertex0) { - var A1 = edgeA.m_vertex0; - var B1 = A; - subVec2(e1, B1, A1); - var u1 = dotVec2(e1, B1) - dotVec2(e1, Q); - // Is the circle in Region AB of the previous edge? - if (u1 > 0.0) { - return; - } - } - manifold.type = exports.ManifoldType.e_circles; - zeroVec2(manifold.localNormal); - copyVec2(manifold.localPoint, P); - manifold.pointCount = 1; - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, exports.ContactFeatureType.e_vertex, 0, exports.ContactFeatureType.e_vertex); - return; + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); } - // Region B - if (u <= 0.0) { - copyVec2(P, B); - var dd_2 = distSqrVec2(Q, P); - if (dd_2 > radius * radius) { - return; - } - // Is there an edge connected to B? - if (edgeA.m_hasVertex3) { - var B2 = edgeA.m_vertex3; - var A2 = B; - subVec2(e2, B2, A2); - var v2 = dotVec2(e2, Q) - dotVec2(e2, A2); - // Is the circle in Region AB of the next edge? - if (v2 > 0.0) { - return; - } - } - manifold.type = exports.ManifoldType.e_circles; - zeroVec2(manifold.localNormal); - copyVec2(manifold.localPoint, P); - manifold.pointCount = 1; - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(1, exports.ContactFeatureType.e_vertex, 0, exports.ContactFeatureType.e_vertex); - return; + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; } - // Region AB - var den = lengthSqrVec2(e); - combine2Vec2(P, u / den, A, v / den, B); - var dd = distSqrVec2(Q, P); - if (dd > radius * radius) { - return; + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; } - crossNumVec2(n$2, 1, e); - if (dotVec2(n$2, Q) - dotVec2(n$2, A) < 0.0) { - negVec2(n$2); - } - normalizeVec2(n$2); - manifold.type = exports.ManifoldType.e_faceA; - copyVec2(manifold.localNormal, n$2); - copyVec2(manifold.localPoint, A); - manifold.pointCount = 1; - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, exports.ContactFeatureType.e_face, 0, exports.ContactFeatureType.e_vertex); - }; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var incidentEdge = [new ClipVertex(), new ClipVertex()]; - /** @internal */ var clipPoints1$1 = [new ClipVertex(), new ClipVertex()]; - /** @internal */ var clipPoints2$1 = [new ClipVertex(), new ClipVertex()]; - /** @internal */ var clipSegmentToLineNormal = vec2(0, 0); - /** @internal */ var v1 = vec2(0, 0); - /** @internal */ var n$1 = vec2(0, 0); - /** @internal */ var xf$1 = transform(0, 0, 0); - /** @internal */ var v11 = vec2(0, 0); - /** @internal */ var v12 = vec2(0, 0); - /** @internal */ var localTangent = vec2(0, 0); - /** @internal */ var localNormal = vec2(0, 0); - /** @internal */ var planePoint = vec2(0, 0); - /** @internal */ var tangent = vec2(0, 0); - /** @internal */ var normal$1 = vec2(0, 0); - /** @internal */ var normal1$1 = vec2(0, 0); - Contact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact); - /** @internal */ function PolygonContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - CollidePolygons(manifold, fixtureA.getShape(), xfA, fixtureB.getShape(), xfB); - } - /** - * Find the max separation between poly1 and poly2 using edge normals from - * poly1. - */ - /** @internal */ function findMaxSeparation(poly1, xf1, poly2, xf2, output) { - var count1 = poly1.m_count; - var count2 = poly2.m_count; - var n1s = poly1.m_normals; - var v1s = poly1.m_vertices; - var v2s = poly2.m_vertices; - detransformTransform(xf$1, xf2, xf1); - var bestIndex = 0; - var maxSeparation = -Infinity; - for (var i = 0; i < count1; ++i) { - // Get poly1 normal in frame2. - rotVec2(n$1, xf$1.q, n1s[i]); - transformVec2(v1, xf$1, v1s[i]); - // Find deepest point for normal i. - var si = Infinity; - for (var j = 0; j < count2; ++j) { - var sij = dotVec2(n$1, v2s[j]) - dotVec2(n$1, v1); - if (sij < si) { - si = sij; - } - } - if (si > maxSeparation) { - maxSeparation = si; - bestIndex = i; - } + }; + WeldJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + WeldJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + WeldJoint2.prototype.getReferenceAngle = function() { + return this.m_referenceAngle; + }; + WeldJoint2.prototype.setFrequency = function(hz) { + this.m_frequencyHz = hz; + }; + WeldJoint2.prototype.getFrequency = function() { + return this.m_frequencyHz; + }; + WeldJoint2.prototype.setDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + WeldJoint2.prototype.getDampingRatio = function() { + return this.m_dampingRatio; + }; + WeldJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + WeldJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + WeldJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); + }; + WeldJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_impulse.z; + }; + WeldJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var K = new Mat33(); + K.ex.x = mA + mB + this.m_rA.y * this.m_rA.y * iA + this.m_rB.y * this.m_rB.y * iB; + K.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; + K.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; + K.ex.y = K.ey.x; + K.ey.y = mA + mB + this.m_rA.x * this.m_rA.x * iA + this.m_rB.x * this.m_rB.x * iB; + K.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; + K.ex.z = K.ez.x; + K.ey.z = K.ez.y; + K.ez.z = iA + iB; + if (this.m_frequencyHz > 0) { + K.getInverse22(this.m_mass); + var invM = iA + iB; + var m = invM > 0 ? 1 / invM : 0; + var C = aB - aA - this.m_referenceAngle; + var omega = 2 * math_PI$2 * this.m_frequencyHz; + var d2 = 2 * m * this.m_dampingRatio * omega; + var k = m * omega * omega; + var h = step.dt; + this.m_gamma = h * (d2 + h * k); + this.m_gamma = this.m_gamma != 0 ? 1 / this.m_gamma : 0; + this.m_bias = C * h * k * this.m_gamma; + invM += this.m_gamma; + this.m_mass.ez.z = invM != 0 ? 1 / invM : 0; + } else if (K.ez.z == 0) { + K.getInverse22(this.m_mass); + this.m_gamma = 0; + this.m_bias = 0; + } else { + K.getSymInverse33(this.m_mass); + this.m_gamma = 0; + this.m_bias = 0; + } + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + var P3 = Vec2.neo(this.m_impulse.x, this.m_impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_impulse.z); + } else { + this.m_impulse.setZero(); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + WeldJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + if (this.m_frequencyHz > 0) { + var Cdot2 = wB - wA; + var impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z); + this.m_impulse.z += impulse2; + wA -= iA * impulse2; + wB += iB * impulse2; + var Cdot1 = Vec2.zero(); + Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1)); + this.m_impulse.x += impulse1.x; + this.m_impulse.y += impulse1.y; + var P3 = Vec2.clone(impulse1); + vA2.subMul(mA, P3); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(mB, P3); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, P3); + } else { + var Cdot1 = Vec2.zero(); + Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var Cdot2 = wB - wA; + var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); + var impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot)); + this.m_impulse.add(impulse); + var P3 = Vec2.neo(impulse.x, impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + impulse.z); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + WeldJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var positionError; + var angularError; + var K = new Mat33(); + K.ex.x = mA + mB + rA2.y * rA2.y * iA + rB2.y * rB2.y * iB; + K.ey.x = -rA2.y * rA2.x * iA - rB2.y * rB2.x * iB; + K.ez.x = -rA2.y * iA - rB2.y * iB; + K.ex.y = K.ey.x; + K.ey.y = mA + mB + rA2.x * rA2.x * iA + rB2.x * rB2.x * iB; + K.ez.y = rA2.x * iA + rB2.x * iB; + K.ex.z = K.ez.x; + K.ey.z = K.ez.y; + K.ez.z = iA + iB; + if (this.m_frequencyHz > 0) { + var C1 = Vec2.zero(); + C1.addCombine(1, cB2, 1, rB2); + C1.subCombine(1, cA2, 1, rA2); + positionError = C1.length(); + angularError = 0; + var P3 = Vec2.neg(K.solve22(C1)); + cA2.subMul(mA, P3); + aA -= iA * Vec2.crossVec2Vec2(rA2, P3); + cB2.addMul(mB, P3); + aB += iB * Vec2.crossVec2Vec2(rB2, P3); + } else { + var C1 = Vec2.zero(); + C1.addCombine(1, cB2, 1, rB2); + C1.subCombine(1, cA2, 1, rA2); + var C2 = aB - aA - this.m_referenceAngle; + positionError = C1.length(); + angularError = math_abs$2(C2); + var C = new Vec3(C1.x, C1.y, C2); + var impulse = new Vec3(); + if (K.ez.z > 0) { + impulse = Vec3.neg(K.solve33(C)); + } else { + var impulse2 = Vec2.neg(K.solve22(C1)); + impulse.set(impulse2.x, impulse2.y, 0); + } + var P3 = Vec2.neo(impulse.x, impulse.y); + cA2.subMul(mA, P3); + aA -= iA * (Vec2.crossVec2Vec2(rA2, P3) + impulse.z); + cB2.addMul(mB, P3); + aB += iB * (Vec2.crossVec2Vec2(rB2, P3) + impulse.z); + } + this.m_bodyA.c_position.c = cA2; + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c = cB2; + this.m_bodyB.c_position.a = aB; + return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; + }; + WeldJoint2.TYPE = "weld-joint"; + return WeldJoint2; + }(Joint) + ); + var math_abs$1 = Math.abs; + var math_PI$1 = Math.PI; + var DEFAULTS = { + enableMotor: false, + maxMotorTorque: 0, + motorSpeed: 0, + frequencyHz: 2, + dampingRatio: 0.7 + }; + var WheelJoint = ( + /** @class */ + function(_super) { + __extends$a(WheelJoint2, _super); + function WheelJoint2(def, bodyA, bodyB, anchor, axis) { + var _this = this; + if (!(_this instanceof WheelJoint2)) { + return new WheelJoint2(def, bodyA, bodyB, anchor, axis); + } + def = options(def, DEFAULTS); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_ax = Vec2.zero(); + _this.m_ay = Vec2.zero(); + _this.m_type = WheelJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + if (Vec2.isValid(axis)) { + _this.m_localXAxisA = bodyA.getLocalVector(axis); + } else if (Vec2.isValid(def.localAxisA)) { + _this.m_localXAxisA = Vec2.clone(def.localAxisA); + } else if (Vec2.isValid(def.localAxis)) { + _this.m_localXAxisA = Vec2.clone(def.localAxis); + } else { + _this.m_localXAxisA = Vec2.neo(1, 0); + } + _this.m_localYAxisA = Vec2.crossNumVec2(1, _this.m_localXAxisA); + _this.m_mass = 0; + _this.m_impulse = 0; + _this.m_motorMass = 0; + _this.m_motorImpulse = 0; + _this.m_springMass = 0; + _this.m_springImpulse = 0; + _this.m_maxMotorTorque = def.maxMotorTorque; + _this.m_motorSpeed = def.motorSpeed; + _this.m_enableMotor = def.enableMotor; + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_bias = 0; + _this.m_gamma = 0; + return _this; + } + WheelJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + enableMotor: this.m_enableMotor, + maxMotorTorque: this.m_maxMotorTorque, + motorSpeed: this.m_motorSpeed, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + localAxisA: this.m_localXAxisA + }; + }; + WheelJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new WheelJoint2(data); + return joint; + }; + WheelJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); } - // used to keep last FindMaxSeparation call values - output.maxSeparation = maxSeparation; - output.bestIndex = bestIndex; - } - /** @internal */ function findIncidentEdge(clipVertex, poly1, xf1, edge1, poly2, xf2) { - var normals1 = poly1.m_normals; - var count2 = poly2.m_count; - var vertices2 = poly2.m_vertices; - var normals2 = poly2.m_normals; - // Get the normal of the reference edge in poly2's frame. - rerotVec2(normal1$1, xf2.q, xf1.q, normals1[edge1]); - // Find the incident edge on poly2. - var index = 0; - var minDot = Infinity; - for (var i = 0; i < count2; ++i) { - var dot = dotVec2(normal1$1, normals2[i]); - if (dot < minDot) { - minDot = dot; - index = i; - } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); } - // Build the clip vertices for the incident edge. - var i1 = index; - var i2 = i1 + 1 < count2 ? i1 + 1 : 0; - transformVec2(clipVertex[0].v, xf2, vertices2[i1]); - clipVertex[0].id.setFeatures(edge1, exports.ContactFeatureType.e_face, i1, exports.ContactFeatureType.e_vertex); - transformVec2(clipVertex[1].v, xf2, vertices2[i2]); - clipVertex[1].id.setFeatures(edge1, exports.ContactFeatureType.e_face, i2, exports.ContactFeatureType.e_vertex); - } - /** @internal */ var maxSeparation = { - maxSeparation: 0, - bestIndex: 0, - }; - /** - * - * Find edge normal of max separation on A - return if separating axis is found
- * Find edge normal of max separation on B - return if separation axis is found
- * Choose reference edge as min(minA, minB)
- * Find incident edge
- * Clip - * - * The normal points from 1 to 2 - */ - var CollidePolygons = function (manifold, polyA, xfA, polyB, xfB) { - manifold.pointCount = 0; - var totalRadius = polyA.m_radius + polyB.m_radius; - findMaxSeparation(polyA, xfA, polyB, xfB, maxSeparation); - var edgeA = maxSeparation.bestIndex; - var separationA = maxSeparation.maxSeparation; - if (separationA > totalRadius) - return; - findMaxSeparation(polyB, xfB, polyA, xfA, maxSeparation); - var edgeB = maxSeparation.bestIndex; - var separationB = maxSeparation.maxSeparation; - if (separationB > totalRadius) - return; - var poly1; // reference polygon - var poly2; // incident polygon - var xf1; - var xf2; - var edge1; // reference edge - var flip; - var k_tol = 0.1 * SettingsInternal.linearSlop; - if (separationB > separationA + k_tol) { - poly1 = polyB; - poly2 = polyA; - xf1 = xfB; - xf2 = xfA; - edge1 = edgeB; - manifold.type = exports.ManifoldType.e_faceB; - flip = true; - } - else { - poly1 = polyA; - poly2 = polyB; - xf1 = xfA; - xf2 = xfB; - edge1 = edgeA; - manifold.type = exports.ManifoldType.e_faceA; - flip = false; - } - incidentEdge[0].recycle(), incidentEdge[1].recycle(); - findIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2); - var count1 = poly1.m_count; - var vertices1 = poly1.m_vertices; - var iv1 = edge1; - var iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0; - copyVec2(v11, vertices1[iv1]); - copyVec2(v12, vertices1[iv2]); - subVec2(localTangent, v12, v11); - normalizeVec2(localTangent); - crossVec2Num(localNormal, localTangent, 1.0); - combine2Vec2(planePoint, 0.5, v11, 0.5, v12); - rotVec2(tangent, xf1.q, localTangent); - crossVec2Num(normal$1, tangent, 1.0); - transformVec2(v11, xf1, v11); - transformVec2(v12, xf1, v12); - // Face offset. - var frontOffset = dotVec2(normal$1, v11); - // Side offsets, extended by polytope skin thickness. - var sideOffset1 = -dotVec2(tangent, v11) + totalRadius; - var sideOffset2 = dotVec2(tangent, v12) + totalRadius; - // Clip incident edge against extruded edge1 side edges. - clipPoints1$1[0].recycle(), clipPoints1$1[1].recycle(); - clipPoints2$1[0].recycle(), clipPoints2$1[1].recycle(); - // Clip to box side 1 - setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y); - var np1 = clipSegmentToLine(clipPoints1$1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1); - if (np1 < 2) { - return; + if (def.localAxisA) { + this.m_localXAxisA.setVec2(def.localAxisA); + this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1, def.localAxisA)); } - // Clip to negative box side 1 - setVec2(clipSegmentToLineNormal, tangent.x, tangent.y); - var np2 = clipSegmentToLine(clipPoints2$1, clipPoints1$1, clipSegmentToLineNormal, sideOffset2, iv2); - if (np2 < 2) { - return; + if (def.enableMotor !== void 0) { + this.m_enableMotor = def.enableMotor; } - // Now clipPoints2 contains the clipped points. - copyVec2(manifold.localNormal, localNormal); - copyVec2(manifold.localPoint, planePoint); - var pointCount = 0; - for (var i = 0; i < clipPoints2$1.length /* maxManifoldPoints */; ++i) { - var separation = dotVec2(normal$1, clipPoints2$1[i].v) - frontOffset; - if (separation <= totalRadius) { - var cp = manifold.points[pointCount]; - detransformVec2(cp.localPoint, xf2, clipPoints2$1[i].v); - cp.id.set(clipPoints2$1[i].id); - if (flip) { - // Swap features - cp.id.swapFeatures(); - } - ++pointCount; - } + if (Number.isFinite(def.maxMotorTorque)) { + this.m_maxMotorTorque = def.maxMotorTorque; } - manifold.pointCount = pointCount; - }; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - Contact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact); - /** @internal */ function PolygonCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - CollidePolygonCircle(manifold, fixtureA.getShape(), xfA, fixtureB.getShape(), xfB); - } - /** @internal */ var cLocal = vec2(0, 0); - /** @internal */ var faceCenter = vec2(0, 0); - var CollidePolygonCircle = function (manifold, polygonA, xfA, circleB, xfB) { - manifold.pointCount = 0; - // Compute circle position in the frame of the polygon. - retransformVec2(cLocal, xfB, xfA, circleB.m_p); - // Find the min separating edge. - var normalIndex = 0; - var separation = -Infinity; - var radius = polygonA.m_radius + circleB.m_radius; - var vertexCount = polygonA.m_count; - var vertices = polygonA.m_vertices; - var normals = polygonA.m_normals; - for (var i = 0; i < vertexCount; ++i) { - var s = dotVec2(normals[i], cLocal) - dotVec2(normals[i], vertices[i]); - if (s > radius) { - // Early out. - return; - } - if (s > separation) { - separation = s; - normalIndex = i; - } + if (Number.isFinite(def.motorSpeed)) { + this.m_motorSpeed = def.motorSpeed; } - // Vertices that subtend the incident face. - var vertIndex1 = normalIndex; - var vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0; - var v1 = vertices[vertIndex1]; - var v2 = vertices[vertIndex2]; - // If the center is inside the polygon ... - if (separation < EPSILON) { - manifold.pointCount = 1; - manifold.type = exports.ManifoldType.e_faceA; - copyVec2(manifold.localNormal, normals[normalIndex]); - combine2Vec2(manifold.localPoint, 0.5, v1, 0.5, v2); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, exports.ContactFeatureType.e_vertex, 0, exports.ContactFeatureType.e_vertex); - return; + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; } - // Compute barycentric coordinates - // u1 = (cLocal - v1) dot (v2 - v1)) - var u1 = dotVec2(cLocal, v2) - dotVec2(cLocal, v1) - dotVec2(v1, v2) + dotVec2(v1, v1); - // u2 = (cLocal - v2) dot (v1 - v2) - var u2 = dotVec2(cLocal, v1) - dotVec2(cLocal, v2) - dotVec2(v2, v1) + dotVec2(v2, v2); - if (u1 <= 0.0) { - if (distSqrVec2(cLocal, v1) > radius * radius) { - return; - } - manifold.pointCount = 1; - manifold.type = exports.ManifoldType.e_faceA; - subVec2(manifold.localNormal, cLocal, v1); - normalizeVec2(manifold.localNormal); - copyVec2(manifold.localPoint, v1); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, exports.ContactFeatureType.e_vertex, 0, exports.ContactFeatureType.e_vertex); - } - else if (u2 <= 0.0) { - if (distSqrVec2(cLocal, v2) > radius * radius) { - return; - } - manifold.pointCount = 1; - manifold.type = exports.ManifoldType.e_faceA; - subVec2(manifold.localNormal, cLocal, v2); - normalizeVec2(manifold.localNormal); - copyVec2(manifold.localPoint, v2); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, exports.ContactFeatureType.e_vertex, 0, exports.ContactFeatureType.e_vertex); - } - else { - combine2Vec2(faceCenter, 0.5, v1, 0.5, v2); - var separation_1 = dotVec2(cLocal, normals[vertIndex1]) - dotVec2(faceCenter, normals[vertIndex1]); - if (separation_1 > radius) { - return; - } - manifold.pointCount = 1; - manifold.type = exports.ManifoldType.e_faceA; - copyVec2(manifold.localNormal, normals[vertIndex1]); - copyVec2(manifold.localPoint, faceCenter); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, exports.ContactFeatureType.e_vertex, 0, exports.ContactFeatureType.e_vertex); + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; } - }; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_min$1 = Math.min; - Contact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact); - Contact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact); - /** @internal */ function EdgePolygonContact(manifold, xfA, fA, indexA, xfB, fB, indexB) { - CollideEdgePolygon(manifold, fA.getShape(), xfA, fB.getShape(), xfB); - } - // reused - /** @internal */ var edge_reuse = new EdgeShape(); - /** @internal */ function ChainPolygonContact(manifold, xfA, fA, indexA, xfB, fB, indexB) { - var chain = fA.getShape(); - chain.getChildEdge(edge_reuse, indexA); - CollideEdgePolygon(manifold, edge_reuse, xfA, fB.getShape(), xfB); + }; + WheelJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + WheelJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + WheelJoint2.prototype.getLocalAxisA = function() { + return this.m_localXAxisA; + }; + WheelJoint2.prototype.getJointTranslation = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + var pA2 = bA.getWorldPoint(this.m_localAnchorA); + var pB2 = bB.getWorldPoint(this.m_localAnchorB); + var d2 = Vec2.sub(pB2, pA2); + var axis = bA.getWorldVector(this.m_localXAxisA); + var translation2 = Vec2.dot(d2, axis); + return translation2; + }; + WheelJoint2.prototype.getJointSpeed = function() { + var wA = this.m_bodyA.m_angularVelocity; + var wB = this.m_bodyB.m_angularVelocity; + return wB - wA; + }; + WheelJoint2.prototype.isMotorEnabled = function() { + return this.m_enableMotor; + }; + WheelJoint2.prototype.enableMotor = function(flag) { + if (flag == this.m_enableMotor) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableMotor = flag; + }; + WheelJoint2.prototype.setMotorSpeed = function(speed) { + if (speed == this.m_motorSpeed) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_motorSpeed = speed; + }; + WheelJoint2.prototype.getMotorSpeed = function() { + return this.m_motorSpeed; + }; + WheelJoint2.prototype.setMaxMotorTorque = function(torque) { + if (torque == this.m_maxMotorTorque) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_maxMotorTorque = torque; + }; + WheelJoint2.prototype.getMaxMotorTorque = function() { + return this.m_maxMotorTorque; + }; + WheelJoint2.prototype.getMotorTorque = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + WheelJoint2.prototype.setSpringFrequencyHz = function(hz) { + this.m_frequencyHz = hz; + }; + WheelJoint2.prototype.getSpringFrequencyHz = function() { + return this.m_frequencyHz; + }; + WheelJoint2.prototype.setSpringDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + WheelJoint2.prototype.getSpringDampingRatio = function() { + return this.m_dampingRatio; + }; + WheelJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + WheelJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + WheelJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt); + }; + WheelJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + WheelJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.zero(); + d2.addCombine(1, cB2, 1, rB2); + d2.subCombine(1, cA2, 1, rA2); + { + this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA); + this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_ay); + this.m_sBy = Vec2.crossVec2Vec2(rB2, this.m_ay); + this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy * this.m_sBy; + if (this.m_mass > 0) { + this.m_mass = 1 / this.m_mass; + } + } + this.m_springMass = 0; + this.m_bias = 0; + this.m_gamma = 0; + if (this.m_frequencyHz > 0) { + this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA); + this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_ax); + this.m_sBx = Vec2.crossVec2Vec2(rB2, this.m_ax); + var invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx * this.m_sBx; + if (invMass > 0) { + this.m_springMass = 1 / invMass; + var C = Vec2.dot(d2, this.m_ax); + var omega = 2 * math_PI$1 * this.m_frequencyHz; + var damp = 2 * this.m_springMass * this.m_dampingRatio * omega; + var k = this.m_springMass * omega * omega; + var h = step.dt; + this.m_gamma = h * (damp + h * k); + if (this.m_gamma > 0) { + this.m_gamma = 1 / this.m_gamma; + } + this.m_bias = C * h * k * this.m_gamma; + this.m_springMass = invMass + this.m_gamma; + if (this.m_springMass > 0) { + this.m_springMass = 1 / this.m_springMass; + } + } + } else { + this.m_springImpulse = 0; + } + if (this.m_enableMotor) { + this.m_motorMass = iA + iB; + if (this.m_motorMass > 0) { + this.m_motorMass = 1 / this.m_motorMass; + } + } else { + this.m_motorMass = 0; + this.m_motorImpulse = 0; + } + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + this.m_springImpulse *= step.dtRatio; + this.m_motorImpulse *= step.dtRatio; + var P3 = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax); + var LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse; + var LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse; + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * LA; + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * LB; + } else { + this.m_impulse = 0; + this.m_springImpulse = 0; + this.m_motorImpulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + WheelJoint2.prototype.solveVelocityConstraints = function(step) { + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + { + var Cdot = Vec2.dot(this.m_ax, vB2) - Vec2.dot(this.m_ax, vA2) + this.m_sBx * wB - this.m_sAx * wA; + var impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse); + this.m_springImpulse += impulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_ax); + var LA = impulse * this.m_sAx; + var LB = impulse * this.m_sBx; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + { + var Cdot = wB - wA - this.m_motorSpeed; + var impulse = -this.m_motorMass * Cdot; + var oldImpulse = this.m_motorImpulse; + var maxImpulse = step.dt * this.m_maxMotorTorque; + this.m_motorImpulse = clamp$1(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + { + var Cdot = Vec2.dot(this.m_ay, vB2) - Vec2.dot(this.m_ay, vA2) + this.m_sBy * wB - this.m_sAy * wA; + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_ay); + var LA = impulse * this.m_sAy; + var LB = impulse * this.m_sBy; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + WheelJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.zero(); + d2.addCombine(1, cB2, 1, rB2); + d2.subCombine(1, cA2, 1, rA2); + var ay = Rot.mulVec2(qA, this.m_localYAxisA); + var sAy = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), ay); + var sBy = Vec2.crossVec2Vec2(rB2, ay); + var C = Vec2.dot(d2, ay); + 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; + var impulse = k != 0 ? -C / k : 0; + var P3 = Vec2.mulNumVec2(impulse, ay); + var LA = impulse * sAy; + var LB = impulse * sBy; + cA2.subMul(this.m_invMassA, P3); + aA -= this.m_invIA * LA; + cB2.addMul(this.m_invMassB, P3); + aB += this.m_invIB * LB; + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return math_abs$1(C) <= SettingsInternal.linearSlop; + }; + WheelJoint2.TYPE = "wheel-joint"; + return WheelJoint2; + }(Joint) + ); + var _a; + var SID = 0; + var SERIALIZE_REF_TYPES = { + "World": World, + "Body": Body, + "Joint": Joint, + "Fixture": Fixture, + "Shape": Shape + }; + var DESERIALIZE_BY_REF_TYPE = { + "Vec2": Vec2, + "Vec3": Vec3, + "World": World, + "Body": Body, + "Joint": Joint, + "Fixture": Fixture, + "Shape": Shape + }; + var DESERIALIZE_BY_TYPE_FIELD = (_a = {}, _a[Body.STATIC] = Body, _a[Body.DYNAMIC] = Body, _a[Body.KINEMATIC] = Body, _a[ChainShape.TYPE] = ChainShape, // [BoxShape.TYPE]: BoxShape, + _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); + var DEFAULT_OPTIONS = { + rootClass: World, + preSerialize: function(obj) { + return obj; + }, + postSerialize: function(data, obj) { + return data; + }, + preDeserialize: function(data) { + return data; + }, + postDeserialize: function(obj, data) { + return obj; } - /** @internal */ var EPAxisType; - (function (EPAxisType) { - EPAxisType[EPAxisType["e_unknown"] = -1] = "e_unknown"; - EPAxisType[EPAxisType["e_edgeA"] = 1] = "e_edgeA"; - EPAxisType[EPAxisType["e_edgeB"] = 2] = "e_edgeB"; - })(EPAxisType || (EPAxisType = {})); - // unused? - /** @internal */ var VertexType; - (function (VertexType) { - VertexType[VertexType["e_isolated"] = 0] = "e_isolated"; - VertexType[VertexType["e_concave"] = 1] = "e_concave"; - VertexType[VertexType["e_convex"] = 2] = "e_convex"; - })(VertexType || (VertexType = {})); - /** - * This structure is used to keep track of the best separating axis. - */ - /** @internal */ var EPAxis = /** @class */ (function () { - function EPAxis() { - } - return EPAxis; - }()); - /** - * This holds polygon B expressed in frame A. - */ - /** @internal */ var TempPolygon = /** @class */ (function () { - function TempPolygon() { - this.vertices = []; // [Settings.maxPolygonVertices] - this.normals = []; // [Settings.maxPolygonVertices]; - this.count = 0; - for (var i = 0; i < SettingsInternal.maxPolygonVertices; i++) { - this.vertices.push(vec2(0, 0)); - this.normals.push(vec2(0, 0)); - } - } - return TempPolygon; - }()); - /** - * Reference face used for clipping - */ - /** @internal */ var ReferenceFace = /** @class */ (function () { - function ReferenceFace() { - this.v1 = vec2(0, 0); - this.v2 = vec2(0, 0); - this.normal = vec2(0, 0); - this.sideNormal1 = vec2(0, 0); - this.sideNormal2 = vec2(0, 0); - } - ReferenceFace.prototype.recycle = function () { - zeroVec2(this.v1); - zeroVec2(this.v2); - zeroVec2(this.normal); - zeroVec2(this.sideNormal1); - zeroVec2(this.sideNormal2); - }; - return ReferenceFace; - }()); - // reused - /** @internal */ var clipPoints1 = [new ClipVertex(), new ClipVertex()]; - /** @internal */ var clipPoints2 = [new ClipVertex(), new ClipVertex()]; - /** @internal */ var ie = [new ClipVertex(), new ClipVertex()]; - /** @internal */ var edgeAxis = new EPAxis(); - /** @internal */ var polygonAxis = new EPAxis(); - /** @internal */ var polygonBA = new TempPolygon(); - /** @internal */ var rf = new ReferenceFace(); - /** @internal */ var centroidB = vec2(0, 0); - /** @internal */ var edge0 = vec2(0, 0); - /** @internal */ var edge1 = vec2(0, 0); - /** @internal */ var edge2 = vec2(0, 0); - /** @internal */ var xf = transform(0, 0, 0); - /** @internal */ var normal = vec2(0, 0); - /** @internal */ var normal0 = vec2(0, 0); - /** @internal */ var normal1 = vec2(0, 0); - /** @internal */ var normal2 = vec2(0, 0); - /** @internal */ var lowerLimit = vec2(0, 0); - /** @internal */ var upperLimit = vec2(0, 0); - /** @internal */ var perp = vec2(0, 0); - /** @internal */ var n = vec2(0, 0); - /** - * This function collides and edge and a polygon, taking into account edge - * adjacency. - */ - var CollideEdgePolygon = function (manifold, edgeA, xfA, polygonB, xfB) { - // Algorithm: - // 1. Classify v1 and v2 - // 2. Classify polygon centroid as front or back - // 3. Flip normal if necessary - // 4. Initialize normal range to [-pi, pi] about face normal - // 5. Adjust normal range according to adjacent edges - // 6. Visit each separating axes, only accept axes within the range - // 7. Return if _any_ axis indicates separation - // 8. Clip - // let m_type1: VertexType; - // let m_type2: VertexType; - detransformTransform(xf, xfA, xfB); - transformVec2(centroidB, xf, polygonB.m_centroid); - var v0 = edgeA.m_vertex0; - var v1 = edgeA.m_vertex1; - var v2 = edgeA.m_vertex2; - var v3 = edgeA.m_vertex3; - var hasVertex0 = edgeA.m_hasVertex0; - var hasVertex3 = edgeA.m_hasVertex3; - subVec2(edge1, v2, v1); - normalizeVec2(edge1); - setVec2(normal1, edge1.y, -edge1.x); - var offset1 = dotVec2(normal1, centroidB) - dotVec2(normal1, v1); - var offset0 = 0.0; - var offset2 = 0.0; - var convex1 = false; - var convex2 = false; - zeroVec2(normal0); - zeroVec2(normal2); - // Is there a preceding edge? - if (hasVertex0) { - subVec2(edge0, v1, v0); - normalizeVec2(edge0); - setVec2(normal0, edge0.y, -edge0.x); - convex1 = crossVec2Vec2(edge0, edge1) >= 0.0; - offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0); - } - // Is there a following edge? - if (hasVertex3) { - subVec2(edge2, v3, v2); - normalizeVec2(edge2); - setVec2(normal2, edge2.y, -edge2.x); - convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0.0; - offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v2); - } - var front; - zeroVec2(normal); - zeroVec2(lowerLimit); - zeroVec2(upperLimit); - // Determine front or back collision. Determine collision normal limits. - if (hasVertex0 && hasVertex3) { - if (convex1 && convex2) { - front = offset0 >= 0.0 || offset1 >= 0.0 || offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal0); - copyVec2(upperLimit, normal2); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal1); - scaleVec2(upperLimit, -1, normal1); - } - } - else if (convex1) { - front = offset0 >= 0.0 || (offset1 >= 0.0 && offset2 >= 0.0); - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal0); - copyVec2(upperLimit, normal1); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal2); - scaleVec2(upperLimit, -1, normal1); - } - } - else if (convex2) { - front = offset2 >= 0.0 || (offset0 >= 0.0 && offset1 >= 0.0); - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal1); - copyVec2(upperLimit, normal2); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal1); - scaleVec2(upperLimit, -1, normal0); - } + }; + var Serializer = ( + /** @class */ + /* @__PURE__ */ function() { + function Serializer2(options2) { + var _this = this; + this.toJson = function(root) { + var preSerialize = _this.options.preSerialize; + var postSerialize = _this.options.postSerialize; + var json = []; + var refQueue = [root]; + var refMemoById = {}; + function addToRefQueue(value, typeName) { + value.__sid = value.__sid || ++SID; + if (!refMemoById[value.__sid]) { + refQueue.push(value); + var index = json.length + refQueue.length; + var ref = { + refIndex: index, + refType: typeName + }; + refMemoById[value.__sid] = ref; + } + return refMemoById[value.__sid]; + } + function serializeWithHooks(obj2) { + obj2 = preSerialize(obj2); + var data = obj2._serialize(); + data = postSerialize(data, obj2); + return data; + } + function traverse(value, noRefType) { + if (noRefType === void 0) { + noRefType = false; } - else { - front = offset0 >= 0.0 && offset1 >= 0.0 && offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal1); - copyVec2(upperLimit, normal1); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal2); - scaleVec2(upperLimit, -1, normal0); - } + if (typeof value !== "object" || value === null) { + return value; } - } - else if (hasVertex0) { - if (convex1) { - front = offset0 >= 0.0 || offset1 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal0); - scaleVec2(upperLimit, -1, normal1); - } - else { - scaleVec2(normal, -1, normal1); - copyVec2(lowerLimit, normal1); - scaleVec2(upperLimit, -1, normal1); + if (typeof value._serialize === "function") { + if (!noRefType) { + for (var typeName in SERIALIZE_REF_TYPES) { + if (value instanceof SERIALIZE_REF_TYPES[typeName]) { + return addToRefQueue(value, typeName); + } } + } + value = serializeWithHooks(value); } - else { - front = offset0 >= 0.0 && offset1 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal1); - scaleVec2(upperLimit, -1, normal1); - } - else { - scaleVec2(normal, -1, normal1); - copyVec2(lowerLimit, normal1); - scaleVec2(upperLimit, -1, normal0); + if (Array.isArray(value)) { + var newValue = []; + for (var key = 0; key < value.length; key++) { + newValue[key] = traverse(value[key]); + } + value = newValue; + } else { + var newValue = {}; + for (var key in value) { + if (value.hasOwnProperty(key)) { + newValue[key] = traverse(value[key]); } + } + value = newValue; } - } - else if (hasVertex3) { - if (convex2) { - front = offset1 >= 0.0 || offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - scaleVec2(lowerLimit, -1, normal1); - copyVec2(upperLimit, normal2); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal1); - copyVec2(upperLimit, normal1); - } + return value; + } + while (refQueue.length) { + var obj = refQueue.shift(); + var str = traverse(obj, true); + json.push(str); + } + return json; + }; + this.fromJson = function(json) { + var preDeserialize = _this.options.preDeserialize; + var postDeserialize = _this.options.postDeserialize; + var rootClass = _this.options.rootClass; + var deserializedRefMemoByIndex = {}; + function deserializeWithHooks(classHint, data, context) { + if (!classHint || !classHint._deserialize) { + classHint = DESERIALIZE_BY_TYPE_FIELD[data.type]; } - else { - front = offset1 >= 0.0 && offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - scaleVec2(lowerLimit, -1, normal1); - copyVec2(upperLimit, normal1); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal2); - copyVec2(upperLimit, normal1); - } + var deserializer = classHint && classHint._deserialize; + if (!deserializer) { + return; } - } - else { - front = offset1 >= 0.0; - if (front) { - copyVec2(normal, normal1); - scaleVec2(lowerLimit, -1, normal1); - scaleVec2(upperLimit, -1, normal1); + data = preDeserialize(data); + var classDeserializeFn = classHint._deserialize; + var obj = classDeserializeFn(data, context, deserializeChild); + obj = postDeserialize(obj, data); + return obj; + } + function deserializeChild(classHint, dataOrRef, context) { + var isRefObject = dataOrRef.refIndex && dataOrRef.refType; + if (!isRefObject) { + return deserializeWithHooks(classHint, dataOrRef, context); } - else { - scaleVec2(normal, -1, normal1); - copyVec2(lowerLimit, normal1); - copyVec2(upperLimit, normal1); + var ref = dataOrRef; + if (DESERIALIZE_BY_REF_TYPE[ref.refType]) { + classHint = DESERIALIZE_BY_REF_TYPE[ref.refType]; } - } - // Get polygonB in frameA - polygonBA.count = polygonB.m_count; - for (var i = 0; i < polygonB.m_count; ++i) { - transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]); - rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]); - } - var radius = polygonB.m_radius + edgeA.m_radius; - manifold.pointCount = 0; - { // ComputeEdgeSeparation - edgeAxis.type = EPAxisType.e_edgeA; - edgeAxis.index = front ? 0 : 1; - edgeAxis.separation = Infinity; - for (var i = 0; i < polygonBA.count; ++i) { - var v = polygonBA.vertices[i]; - var s = dotVec2(normal, v) - dotVec2(normal, v1); - if (s < edgeAxis.separation) { - edgeAxis.separation = s; - } + var refIndex = ref.refIndex; + if (!deserializedRefMemoByIndex[refIndex]) { + var data = json[refIndex]; + var obj = deserializeWithHooks(classHint, data, context); + deserializedRefMemoByIndex[refIndex] = obj; } + return deserializedRefMemoByIndex[refIndex]; + } + var root = deserializeWithHooks(rootClass, json[0], null); + return root; + }; + this.options = __assign$1(__assign$1({}, DEFAULT_OPTIONS), options2); + } + return Serializer2; + }() + ); + var worldSerializer = new Serializer({ + rootClass: World + }); + Serializer.fromJson = worldSerializer.fromJson; + Serializer.toJson = worldSerializer.toJson; + var Testbed = ( + /** @class */ + function() { + function Testbed2() { + this.width = 80; + this.height = 60; + this.x = 0; + this.y = -10; + this.scaleY = -1; + this.hz = 60; + this.speed = 1; + this.background = "#222222"; + this.activeKeys = {}; + this.step = function(dt, t) { + return; + }; + this.keydown = function(keyCode, label) { + return; + }; + this.keyup = function(keyCode, label) { + return; + }; + } + Testbed2.mount = function(options2) { + throw new Error("Not implemented"); + }; + Testbed2.start = function(world) { + var testbed2 = Testbed2.mount(); + testbed2.start(world); + return testbed2; + }; + Testbed2.prototype.color = function(r, g, b2) { + r = r * 256 | 0; + g = g * 256 | 0; + b2 = b2 * 256 | 0; + return "rgb(" + r + ", " + g + ", " + b2 + ")"; + }; + return Testbed2; + }() + ); + function testbed(a2, b2) { + var callback; + var options2; + if (typeof a2 === "function") { + callback = a2; + options2 = b2; + } else if (typeof b2 === "function") { + callback = b2; + options2 = a2; + } else { + options2 = a2 !== null && a2 !== void 0 ? a2 : b2; + } + var testbed2 = Testbed.mount(options2); + if (callback) { + var world = callback(testbed2) || testbed2.world; + testbed2.start(world); + } else { + return testbed2; + } + } + var BoxShape = ( + /** @class */ + function(_super) { + __extends$a(BoxShape2, _super); + function BoxShape2(halfWidth, halfHeight, center2, angle) { + var _this = this; + if (!(_this instanceof BoxShape2)) { + return new BoxShape2(halfWidth, halfHeight, center2, angle); + } + _this = _super.call(this) || this; + _this._setAsBox(halfWidth, halfHeight, center2, angle); + return _this; + } + BoxShape2.TYPE = "polygon"; + return BoxShape2; + }(PolygonShape) + ); + var Box = BoxShape; + Contact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact); + function CircleCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + CollideCircles(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2); + } + var pA = vec2(0, 0); + var pB = vec2(0, 0); + var CollideCircles = function(manifold, circleA, xfA2, circleB, xfB2) { + manifold.pointCount = 0; + transformVec2(pA, xfA2, circleA.m_p); + transformVec2(pB, xfB2, circleB.m_p); + var distSqr = distSqrVec2(pB, pA); + var rA2 = circleA.m_radius; + var rB2 = circleB.m_radius; + var radius = rA2 + rB2; + if (distSqr > radius * radius) { + return; + } + manifold.type = exports2.ManifoldType.e_circles; + copyVec2(manifold.localPoint, circleA.m_p); + zeroVec2(manifold.localNormal); + manifold.pointCount = 1; + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, 0, exports2.ContactFeatureType.e_vertex); + }; + Contact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact); + Contact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact); + function EdgeCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + var shapeA = fixtureA.getShape(); + var shapeB = fixtureB.getShape(); + CollideEdgeCircle(manifold, shapeA, xfA2, shapeB, xfB2); + } + function ChainCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + var chain = fixtureA.getShape(); + var edge = new EdgeShape(); + chain.getChildEdge(edge, indexA); + var shapeA = edge; + var shapeB = fixtureB.getShape(); + CollideEdgeCircle(manifold, shapeA, xfA2, shapeB, xfB2); + } + var e = vec2(0, 0); + var e1 = vec2(0, 0); + var e2 = vec2(0, 0); + var Q = vec2(0, 0); + var P = vec2(0, 0); + var n$2 = vec2(0, 0); + var CollideEdgeCircle = function(manifold, edgeA, xfA2, circleB, xfB2) { + manifold.pointCount = 0; + retransformVec2(Q, xfB2, xfA2, circleB.m_p); + var A = edgeA.m_vertex1; + var B = edgeA.m_vertex2; + subVec2(e, B, A); + var u = dotVec2(e, B) - dotVec2(e, Q); + var v3 = dotVec2(e, Q) - dotVec2(e, A); + var radius = edgeA.m_radius + circleB.m_radius; + if (v3 <= 0) { + copyVec2(P, A); + var dd_1 = distSqrVec2(Q, A); + if (dd_1 > radius * radius) { + return; + } + if (edgeA.m_hasVertex0) { + var A1 = edgeA.m_vertex0; + var B1 = A; + subVec2(e1, B1, A1); + var u1 = dotVec2(e1, B1) - dotVec2(e1, Q); + if (u1 > 0) { + return; } - // If no valid normal can be found than this edge should not collide. - // @ts-ignore todo: why we need this if here? - if (edgeAxis.type == EPAxisType.e_unknown) { - return; + } + manifold.type = exports2.ManifoldType.e_circles; + zeroVec2(manifold.localNormal); + copyVec2(manifold.localPoint, P); + manifold.pointCount = 1; + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, 0, exports2.ContactFeatureType.e_vertex); + return; + } + if (u <= 0) { + copyVec2(P, B); + var dd_2 = distSqrVec2(Q, P); + if (dd_2 > radius * radius) { + return; + } + if (edgeA.m_hasVertex3) { + var B2 = edgeA.m_vertex3; + var A2 = B; + subVec2(e2, B2, A2); + var v22 = dotVec2(e2, Q) - dotVec2(e2, A2); + if (v22 > 0) { + return; } - if (edgeAxis.separation > radius) { - return; + } + manifold.type = exports2.ManifoldType.e_circles; + zeroVec2(manifold.localNormal); + copyVec2(manifold.localPoint, P); + manifold.pointCount = 1; + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(1, exports2.ContactFeatureType.e_vertex, 0, exports2.ContactFeatureType.e_vertex); + return; + } + var den = lengthSqrVec2(e); + combine2Vec2(P, u / den, A, v3 / den, B); + var dd = distSqrVec2(Q, P); + if (dd > radius * radius) { + return; + } + crossNumVec2(n$2, 1, e); + if (dotVec2(n$2, Q) - dotVec2(n$2, A) < 0) { + negVec2(n$2); + } + normalizeVec2(n$2); + manifold.type = exports2.ManifoldType.e_faceA; + copyVec2(manifold.localNormal, n$2); + copyVec2(manifold.localPoint, A); + manifold.pointCount = 1; + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, exports2.ContactFeatureType.e_face, 0, exports2.ContactFeatureType.e_vertex); + }; + var incidentEdge = [new ClipVertex(), new ClipVertex()]; + var clipPoints1$1 = [new ClipVertex(), new ClipVertex()]; + var clipPoints2$1 = [new ClipVertex(), new ClipVertex()]; + var clipSegmentToLineNormal = vec2(0, 0); + var v1 = vec2(0, 0); + var n$1 = vec2(0, 0); + var xf$1 = transform(0, 0, 0); + var v11 = vec2(0, 0); + var v12 = vec2(0, 0); + var localTangent = vec2(0, 0); + var localNormal = vec2(0, 0); + var planePoint = vec2(0, 0); + var tangent = vec2(0, 0); + var normal$1 = vec2(0, 0); + var normal1$1 = vec2(0, 0); + Contact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact); + function PolygonContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + CollidePolygons(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2); + } + function findMaxSeparation(poly1, xf1, poly2, xf2, output2) { + var count1 = poly1.m_count; + var count2 = poly2.m_count; + var n1s = poly1.m_normals; + var v1s = poly1.m_vertices; + var v2s = poly2.m_vertices; + detransformTransform(xf$1, xf2, xf1); + var bestIndex = 0; + var maxSeparation2 = -Infinity; + for (var i = 0; i < count1; ++i) { + rotVec2(n$1, xf$1.q, n1s[i]); + transformVec2(v1, xf$1, v1s[i]); + var si = Infinity; + for (var j = 0; j < count2; ++j) { + var sij = dotVec2(n$1, v2s[j]) - dotVec2(n$1, v1); + if (sij < si) { + si = sij; } - { // ComputePolygonSeparation - polygonAxis.type = EPAxisType.e_unknown; - polygonAxis.index = -1; - polygonAxis.separation = -Infinity; - setVec2(perp, -normal.y, normal.x); - for (var i = 0; i < polygonBA.count; ++i) { - scaleVec2(n, -1, polygonBA.normals[i]); - var s1 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v1); - var s2 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v2); - var s = math_min$1(s1, s2); - if (s > radius) { - // No collision - polygonAxis.type = EPAxisType.e_edgeB; - polygonAxis.index = i; - polygonAxis.separation = s; - break; - } - // Adjacency - if (dotVec2(n, perp) >= 0.0) { - if (dotVec2(n, normal) - dotVec2(upperLimit, normal) < -SettingsInternal.angularSlop) { - continue; - } - } - else { - if (dotVec2(n, normal) - dotVec2(lowerLimit, normal) < -SettingsInternal.angularSlop) { - continue; - } - } - if (s > polygonAxis.separation) { - polygonAxis.type = EPAxisType.e_edgeB; - polygonAxis.index = i; - polygonAxis.separation = s; - } - } + } + if (si > maxSeparation2) { + maxSeparation2 = si; + bestIndex = i; + } + } + output2.maxSeparation = maxSeparation2; + output2.bestIndex = bestIndex; + } + function findIncidentEdge(clipVertex, poly1, xf1, edge12, poly2, xf2) { + var normals1 = poly1.m_normals; + var count2 = poly2.m_count; + var vertices2 = poly2.m_vertices; + var normals2 = poly2.m_normals; + rerotVec2(normal1$1, xf2.q, xf1.q, normals1[edge12]); + var index = 0; + var minDot = Infinity; + for (var i = 0; i < count2; ++i) { + var dot = dotVec2(normal1$1, normals2[i]); + if (dot < minDot) { + minDot = dot; + index = i; + } + } + var i1 = index; + var i2 = i1 + 1 < count2 ? i1 + 1 : 0; + transformVec2(clipVertex[0].v, xf2, vertices2[i1]); + clipVertex[0].id.setFeatures(edge12, exports2.ContactFeatureType.e_face, i1, exports2.ContactFeatureType.e_vertex); + transformVec2(clipVertex[1].v, xf2, vertices2[i2]); + clipVertex[1].id.setFeatures(edge12, exports2.ContactFeatureType.e_face, i2, exports2.ContactFeatureType.e_vertex); + } + var maxSeparation = { + maxSeparation: 0, + bestIndex: 0 + }; + var CollidePolygons = function(manifold, polyA, xfA2, polyB, xfB2) { + manifold.pointCount = 0; + var totalRadius = polyA.m_radius + polyB.m_radius; + findMaxSeparation(polyA, xfA2, polyB, xfB2, maxSeparation); + var edgeA = maxSeparation.bestIndex; + var separationA = maxSeparation.maxSeparation; + if (separationA > totalRadius) + return; + findMaxSeparation(polyB, xfB2, polyA, xfA2, maxSeparation); + var edgeB = maxSeparation.bestIndex; + var separationB = maxSeparation.maxSeparation; + if (separationB > totalRadius) + return; + var poly1; + var poly2; + var xf1; + var xf2; + var edge12; + var flip; + var k_tol = 0.1 * SettingsInternal.linearSlop; + if (separationB > separationA + k_tol) { + poly1 = polyB; + poly2 = polyA; + xf1 = xfB2; + xf2 = xfA2; + edge12 = edgeB; + manifold.type = exports2.ManifoldType.e_faceB; + flip = true; + } else { + poly1 = polyA; + poly2 = polyB; + xf1 = xfA2; + xf2 = xfB2; + edge12 = edgeA; + manifold.type = exports2.ManifoldType.e_faceA; + flip = false; + } + incidentEdge[0].recycle(), incidentEdge[1].recycle(); + findIncidentEdge(incidentEdge, poly1, xf1, edge12, poly2, xf2); + var count1 = poly1.m_count; + var vertices1 = poly1.m_vertices; + var iv1 = edge12; + var iv2 = edge12 + 1 < count1 ? edge12 + 1 : 0; + copyVec2(v11, vertices1[iv1]); + copyVec2(v12, vertices1[iv2]); + subVec2(localTangent, v12, v11); + normalizeVec2(localTangent); + crossVec2Num(localNormal, localTangent, 1); + combine2Vec2(planePoint, 0.5, v11, 0.5, v12); + rotVec2(tangent, xf1.q, localTangent); + crossVec2Num(normal$1, tangent, 1); + transformVec2(v11, xf1, v11); + transformVec2(v12, xf1, v12); + var frontOffset = dotVec2(normal$1, v11); + var sideOffset1 = -dotVec2(tangent, v11) + totalRadius; + var sideOffset2 = dotVec2(tangent, v12) + totalRadius; + clipPoints1$1[0].recycle(), clipPoints1$1[1].recycle(); + clipPoints2$1[0].recycle(), clipPoints2$1[1].recycle(); + setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y); + var np1 = clipSegmentToLine(clipPoints1$1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1); + if (np1 < 2) { + return; + } + setVec2(clipSegmentToLineNormal, tangent.x, tangent.y); + var np2 = clipSegmentToLine(clipPoints2$1, clipPoints1$1, clipSegmentToLineNormal, sideOffset2, iv2); + if (np2 < 2) { + return; + } + copyVec2(manifold.localNormal, localNormal); + copyVec2(manifold.localPoint, planePoint); + var pointCount = 0; + for (var i = 0; i < clipPoints2$1.length; ++i) { + var separation = dotVec2(normal$1, clipPoints2$1[i].v) - frontOffset; + if (separation <= totalRadius) { + var cp = manifold.points[pointCount]; + detransformVec2(cp.localPoint, xf2, clipPoints2$1[i].v); + cp.id.set(clipPoints2$1[i].id); + if (flip) { + cp.id.swapFeatures(); + } + ++pointCount; + } + } + manifold.pointCount = pointCount; + }; + Contact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact); + function PolygonCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + CollidePolygonCircle(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2); + } + var cLocal = vec2(0, 0); + var faceCenter = vec2(0, 0); + var CollidePolygonCircle = function(manifold, polygonA, xfA2, circleB, xfB2) { + manifold.pointCount = 0; + retransformVec2(cLocal, xfB2, xfA2, circleB.m_p); + var normalIndex = 0; + var separation = -Infinity; + var radius = polygonA.m_radius + circleB.m_radius; + var vertexCount = polygonA.m_count; + var vertices = polygonA.m_vertices; + var normals = polygonA.m_normals; + for (var i = 0; i < vertexCount; ++i) { + var s2 = dotVec2(normals[i], cLocal) - dotVec2(normals[i], vertices[i]); + if (s2 > radius) { + return; + } + if (s2 > separation) { + separation = s2; + normalIndex = i; + } + } + var vertIndex1 = normalIndex; + var vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0; + var v13 = vertices[vertIndex1]; + var v22 = vertices[vertIndex2]; + if (separation < EPSILON) { + manifold.pointCount = 1; + manifold.type = exports2.ManifoldType.e_faceA; + copyVec2(manifold.localNormal, normals[normalIndex]); + combine2Vec2(manifold.localPoint, 0.5, v13, 0.5, v22); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, 0, exports2.ContactFeatureType.e_vertex); + return; + } + var u1 = dotVec2(cLocal, v22) - dotVec2(cLocal, v13) - dotVec2(v13, v22) + dotVec2(v13, v13); + var u2 = dotVec2(cLocal, v13) - dotVec2(cLocal, v22) - dotVec2(v22, v13) + dotVec2(v22, v22); + if (u1 <= 0) { + if (distSqrVec2(cLocal, v13) > radius * radius) { + return; + } + manifold.pointCount = 1; + manifold.type = exports2.ManifoldType.e_faceA; + subVec2(manifold.localNormal, cLocal, v13); + normalizeVec2(manifold.localNormal); + copyVec2(manifold.localPoint, v13); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, 0, exports2.ContactFeatureType.e_vertex); + } else if (u2 <= 0) { + if (distSqrVec2(cLocal, v22) > radius * radius) { + return; + } + manifold.pointCount = 1; + manifold.type = exports2.ManifoldType.e_faceA; + subVec2(manifold.localNormal, cLocal, v22); + normalizeVec2(manifold.localNormal); + copyVec2(manifold.localPoint, v22); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, 0, exports2.ContactFeatureType.e_vertex); + } else { + combine2Vec2(faceCenter, 0.5, v13, 0.5, v22); + var separation_1 = dotVec2(cLocal, normals[vertIndex1]) - dotVec2(faceCenter, normals[vertIndex1]); + if (separation_1 > radius) { + return; + } + manifold.pointCount = 1; + manifold.type = exports2.ManifoldType.e_faceA; + copyVec2(manifold.localNormal, normals[vertIndex1]); + copyVec2(manifold.localPoint, faceCenter); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, 0, exports2.ContactFeatureType.e_vertex); + } + }; + var math_min$1 = Math.min; + Contact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact); + Contact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact); + function EdgePolygonContact(manifold, xfA2, fA, indexA, xfB2, fB, indexB) { + CollideEdgePolygon(manifold, fA.getShape(), xfA2, fB.getShape(), xfB2); + } + var edge_reuse = new EdgeShape(); + function ChainPolygonContact(manifold, xfA2, fA, indexA, xfB2, fB, indexB) { + var chain = fA.getShape(); + chain.getChildEdge(edge_reuse, indexA); + CollideEdgePolygon(manifold, edge_reuse, xfA2, fB.getShape(), xfB2); + } + var EPAxisType; + (function(EPAxisType2) { + EPAxisType2[EPAxisType2["e_unknown"] = -1] = "e_unknown"; + EPAxisType2[EPAxisType2["e_edgeA"] = 1] = "e_edgeA"; + EPAxisType2[EPAxisType2["e_edgeB"] = 2] = "e_edgeB"; + })(EPAxisType || (EPAxisType = {})); + var VertexType; + (function(VertexType2) { + VertexType2[VertexType2["e_isolated"] = 0] = "e_isolated"; + VertexType2[VertexType2["e_concave"] = 1] = "e_concave"; + VertexType2[VertexType2["e_convex"] = 2] = "e_convex"; + })(VertexType || (VertexType = {})); + var EPAxis = ( + /** @class */ + /* @__PURE__ */ function() { + function EPAxis2() { + } + return EPAxis2; + }() + ); + var TempPolygon = ( + /** @class */ + /* @__PURE__ */ function() { + function TempPolygon2() { + this.vertices = []; + this.normals = []; + this.count = 0; + for (var i = 0; i < SettingsInternal.maxPolygonVertices; i++) { + this.vertices.push(vec2(0, 0)); + this.normals.push(vec2(0, 0)); } - if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) { - return; + } + return TempPolygon2; + }() + ); + var ReferenceFace = ( + /** @class */ + function() { + function ReferenceFace2() { + this.v1 = vec2(0, 0); + this.v2 = vec2(0, 0); + this.normal = vec2(0, 0); + this.sideNormal1 = vec2(0, 0); + this.sideNormal2 = vec2(0, 0); + } + ReferenceFace2.prototype.recycle = function() { + zeroVec2(this.v1); + zeroVec2(this.v2); + zeroVec2(this.normal); + zeroVec2(this.sideNormal1); + zeroVec2(this.sideNormal2); + }; + return ReferenceFace2; + }() + ); + var clipPoints1 = [new ClipVertex(), new ClipVertex()]; + var clipPoints2 = [new ClipVertex(), new ClipVertex()]; + var ie = [new ClipVertex(), new ClipVertex()]; + var edgeAxis = new EPAxis(); + var polygonAxis = new EPAxis(); + var polygonBA = new TempPolygon(); + var rf = new ReferenceFace(); + var centroidB = vec2(0, 0); + var edge0 = vec2(0, 0); + var edge1 = vec2(0, 0); + var edge2 = vec2(0, 0); + var xf = transform(0, 0, 0); + var normal = vec2(0, 0); + var normal0 = vec2(0, 0); + var normal1 = vec2(0, 0); + var normal2 = vec2(0, 0); + var lowerLimit = vec2(0, 0); + var upperLimit = vec2(0, 0); + var perp = vec2(0, 0); + var n = vec2(0, 0); + var CollideEdgePolygon = function(manifold, edgeA, xfA2, polygonB, xfB2) { + detransformTransform(xf, xfA2, xfB2); + transformVec2(centroidB, xf, polygonB.m_centroid); + var v0 = edgeA.m_vertex0; + var v13 = edgeA.m_vertex1; + var v22 = edgeA.m_vertex2; + var v3 = edgeA.m_vertex3; + var hasVertex0 = edgeA.m_hasVertex0; + var hasVertex3 = edgeA.m_hasVertex3; + subVec2(edge1, v22, v13); + normalizeVec2(edge1); + setVec2(normal1, edge1.y, -edge1.x); + var offset1 = dotVec2(normal1, centroidB) - dotVec2(normal1, v13); + var offset0 = 0; + var offset2 = 0; + var convex1 = false; + var convex2 = false; + zeroVec2(normal0); + zeroVec2(normal2); + if (hasVertex0) { + subVec2(edge0, v13, v0); + normalizeVec2(edge0); + setVec2(normal0, edge0.y, -edge0.x); + convex1 = crossVec2Vec2(edge0, edge1) >= 0; + offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0); + } + if (hasVertex3) { + subVec2(edge2, v3, v22); + normalizeVec2(edge2); + setVec2(normal2, edge2.y, -edge2.x); + convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0; + offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v22); + } + var front; + zeroVec2(normal); + zeroVec2(lowerLimit); + zeroVec2(upperLimit); + if (hasVertex0 && hasVertex3) { + if (convex1 && convex2) { + front = offset0 >= 0 || offset1 >= 0 || offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal0); + copyVec2(upperLimit, normal2); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal1); + scaleVec2(upperLimit, -1, normal1); + } + } else if (convex1) { + front = offset0 >= 0 || offset1 >= 0 && offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal0); + copyVec2(upperLimit, normal1); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal2); + scaleVec2(upperLimit, -1, normal1); + } + } else if (convex2) { + front = offset2 >= 0 || offset0 >= 0 && offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal1); + copyVec2(upperLimit, normal2); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal1); + scaleVec2(upperLimit, -1, normal0); } - // Use hysteresis for jitter reduction. - var k_relativeTol = 0.98; - var k_absoluteTol = 0.001; - var primaryAxis; - if (polygonAxis.type == EPAxisType.e_unknown) { - primaryAxis = edgeAxis; + } else { + front = offset0 >= 0 && offset1 >= 0 && offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal1); + copyVec2(upperLimit, normal1); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal2); + scaleVec2(upperLimit, -1, normal0); } - else if (polygonAxis.separation > k_relativeTol * edgeAxis.separation + k_absoluteTol) { - primaryAxis = polygonAxis; + } + } else if (hasVertex0) { + if (convex1) { + front = offset0 >= 0 || offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal0); + scaleVec2(upperLimit, -1, normal1); + } else { + scaleVec2(normal, -1, normal1); + copyVec2(lowerLimit, normal1); + scaleVec2(upperLimit, -1, normal1); } - else { - primaryAxis = edgeAxis; + } else { + front = offset0 >= 0 && offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal1); + scaleVec2(upperLimit, -1, normal1); + } else { + scaleVec2(normal, -1, normal1); + copyVec2(lowerLimit, normal1); + scaleVec2(upperLimit, -1, normal0); } - ie[0].recycle(), ie[1].recycle(); - if (primaryAxis.type == EPAxisType.e_edgeA) { - manifold.type = exports.ManifoldType.e_faceA; - // Search for the polygon normal that is most anti-parallel to the edge - // normal. - var bestIndex = 0; - var bestValue = dotVec2(normal, polygonBA.normals[0]); - for (var i = 1; i < polygonBA.count; ++i) { - var value = dotVec2(normal, polygonBA.normals[i]); - if (value < bestValue) { - bestValue = value; - bestIndex = i; - } - } - var i1 = bestIndex; - var i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0; - copyVec2(ie[0].v, polygonBA.vertices[i1]); - ie[0].id.setFeatures(0, exports.ContactFeatureType.e_face, i1, exports.ContactFeatureType.e_vertex); - copyVec2(ie[1].v, polygonBA.vertices[i2]); - ie[1].id.setFeatures(0, exports.ContactFeatureType.e_face, i2, exports.ContactFeatureType.e_vertex); - if (front) { - rf.i1 = 0; - rf.i2 = 1; - copyVec2(rf.v1, v1); - copyVec2(rf.v2, v2); - copyVec2(rf.normal, normal1); - } - else { - rf.i1 = 1; - rf.i2 = 0; - copyVec2(rf.v1, v2); - copyVec2(rf.v2, v1); - scaleVec2(rf.normal, -1, normal1); - } + } + } else if (hasVertex3) { + if (convex2) { + front = offset1 >= 0 || offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + scaleVec2(lowerLimit, -1, normal1); + copyVec2(upperLimit, normal2); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal1); + copyVec2(upperLimit, normal1); } - else { - manifold.type = exports.ManifoldType.e_faceB; - copyVec2(ie[0].v, v1); - ie[0].id.setFeatures(0, exports.ContactFeatureType.e_vertex, primaryAxis.index, exports.ContactFeatureType.e_face); - copyVec2(ie[1].v, v2); - ie[1].id.setFeatures(0, exports.ContactFeatureType.e_vertex, primaryAxis.index, exports.ContactFeatureType.e_face); - rf.i1 = primaryAxis.index; - rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0; - copyVec2(rf.v1, polygonBA.vertices[rf.i1]); - copyVec2(rf.v2, polygonBA.vertices[rf.i2]); - copyVec2(rf.normal, polygonBA.normals[rf.i1]); - } - setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x); - setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y); - rf.sideOffset1 = dotVec2(rf.sideNormal1, rf.v1); - rf.sideOffset2 = dotVec2(rf.sideNormal2, rf.v2); - // Clip incident edge against extruded edge1 side edges. - clipPoints1[0].recycle(), clipPoints1[1].recycle(); - clipPoints2[0].recycle(), clipPoints2[1].recycle(); - // Clip to box side 1 - var np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1); - if (np1 < SettingsInternal.maxManifoldPoints) { - return; + } else { + front = offset1 >= 0 && offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + scaleVec2(lowerLimit, -1, normal1); + copyVec2(upperLimit, normal1); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal2); + copyVec2(upperLimit, normal1); } - // Clip to negative box side 1 - var np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2); - if (np2 < SettingsInternal.maxManifoldPoints) { - return; + } + } else { + front = offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + scaleVec2(lowerLimit, -1, normal1); + scaleVec2(upperLimit, -1, normal1); + } else { + scaleVec2(normal, -1, normal1); + copyVec2(lowerLimit, normal1); + copyVec2(upperLimit, normal1); + } + } + polygonBA.count = polygonB.m_count; + for (var i = 0; i < polygonB.m_count; ++i) { + transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]); + rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]); + } + var radius = polygonB.m_radius + edgeA.m_radius; + manifold.pointCount = 0; + { + edgeAxis.type = EPAxisType.e_edgeA; + edgeAxis.index = front ? 0 : 1; + edgeAxis.separation = Infinity; + for (var i = 0; i < polygonBA.count; ++i) { + var v4 = polygonBA.vertices[i]; + var s2 = dotVec2(normal, v4) - dotVec2(normal, v13); + if (s2 < edgeAxis.separation) { + edgeAxis.separation = s2; } - // Now clipPoints2 contains the clipped points. - if (primaryAxis.type == EPAxisType.e_edgeA) { - copyVec2(manifold.localNormal, rf.normal); - copyVec2(manifold.localPoint, rf.v1); - } - else { - copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]); - copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]); - } - var pointCount = 0; - for (var i = 0; i < SettingsInternal.maxManifoldPoints; ++i) { - var separation = dotVec2(rf.normal, clipPoints2[i].v) - dotVec2(rf.normal, rf.v1); - if (separation <= radius) { - var cp = manifold.points[pointCount]; // ManifoldPoint - if (primaryAxis.type == EPAxisType.e_edgeA) { - detransformVec2(cp.localPoint, xf, clipPoints2[i].v); - cp.id.set(clipPoints2[i].id); - } - else { - copyVec2(cp.localPoint, clipPoints2[i].v); - cp.id.set(clipPoints2[i].id); - cp.id.swapFeatures(); - } - ++pointCount; - } + } + } + if (edgeAxis.type == EPAxisType.e_unknown) { + return; + } + if (edgeAxis.separation > radius) { + return; + } + { + polygonAxis.type = EPAxisType.e_unknown; + polygonAxis.index = -1; + polygonAxis.separation = -Infinity; + setVec2(perp, -normal.y, normal.x); + for (var i = 0; i < polygonBA.count; ++i) { + scaleVec2(n, -1, polygonBA.normals[i]); + var s1 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v13); + var s22 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v22); + var s2 = math_min$1(s1, s22); + if (s2 > radius) { + polygonAxis.type = EPAxisType.e_edgeB; + polygonAxis.index = i; + polygonAxis.separation = s2; + break; + } + if (dotVec2(n, perp) >= 0) { + if (dotVec2(n, normal) - dotVec2(upperLimit, normal) < -SettingsInternal.angularSlop) { + continue; + } + } else { + if (dotVec2(n, normal) - dotVec2(lowerLimit, normal) < -SettingsInternal.angularSlop) { + continue; + } + } + if (s2 > polygonAxis.separation) { + polygonAxis.type = EPAxisType.e_edgeB; + polygonAxis.index = i; + polygonAxis.separation = s2; } - manifold.pointCount = pointCount; - }; - - /** @hidden @deprecated Merged with main namespace */ - var internal = { - CollidePolygons: CollidePolygons, - Settings: Settings, - Sweep: Sweep, - Manifold: Manifold, - Distance: Distance, - TimeOfImpact: TimeOfImpact, - DynamicTree: DynamicTree, - stats: stats$1 - }; - - /** - * Stage.js 1.0.0-alpha.5 - * - * @copyright Copyright (c) 2024 Ali Shakiba - * @license The MIT License (MIT) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - var math_random = Math.random; - var math_sqrt$1 = Math.sqrt; - function random(min, max) { - if (typeof min === "undefined") { - max = 1; - min = 0; - } else if (typeof max === "undefined") { - max = min; - min = 0; } - return min == max ? min : math_random() * (max - min) + min; } - function wrap(num, min, max) { - if (typeof min === "undefined") { - max = 1; - min = 0; - } else if (typeof max === "undefined") { - max = min; - min = 0; + if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) { + return; + } + var k_relativeTol = 0.98; + var k_absoluteTol = 1e-3; + var primaryAxis; + if (polygonAxis.type == EPAxisType.e_unknown) { + primaryAxis = edgeAxis; + } else if (polygonAxis.separation > k_relativeTol * edgeAxis.separation + k_absoluteTol) { + primaryAxis = polygonAxis; + } else { + primaryAxis = edgeAxis; + } + ie[0].recycle(), ie[1].recycle(); + if (primaryAxis.type == EPAxisType.e_edgeA) { + manifold.type = exports2.ManifoldType.e_faceA; + var bestIndex = 0; + var bestValue = dotVec2(normal, polygonBA.normals[0]); + for (var i = 1; i < polygonBA.count; ++i) { + var value = dotVec2(normal, polygonBA.normals[i]); + if (value < bestValue) { + bestValue = value; + bestIndex = i; + } } - if (max > min) { - num = (num - min) % (max - min); - return num + (num < 0 ? max : min); + var i1 = bestIndex; + var i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0; + copyVec2(ie[0].v, polygonBA.vertices[i1]); + ie[0].id.setFeatures(0, exports2.ContactFeatureType.e_face, i1, exports2.ContactFeatureType.e_vertex); + copyVec2(ie[1].v, polygonBA.vertices[i2]); + ie[1].id.setFeatures(0, exports2.ContactFeatureType.e_face, i2, exports2.ContactFeatureType.e_vertex); + if (front) { + rf.i1 = 0; + rf.i2 = 1; + copyVec2(rf.v1, v13); + copyVec2(rf.v2, v22); + copyVec2(rf.normal, normal1); } else { - num = (num - max) % (min - max); - return num + (num <= 0 ? min : max); + rf.i1 = 1; + rf.i2 = 0; + copyVec2(rf.v1, v22); + copyVec2(rf.v2, v13); + scaleVec2(rf.normal, -1, normal1); } + } else { + manifold.type = exports2.ManifoldType.e_faceB; + copyVec2(ie[0].v, v13); + ie[0].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, primaryAxis.index, exports2.ContactFeatureType.e_face); + copyVec2(ie[1].v, v22); + ie[1].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, primaryAxis.index, exports2.ContactFeatureType.e_face); + rf.i1 = primaryAxis.index; + rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0; + copyVec2(rf.v1, polygonBA.vertices[rf.i1]); + copyVec2(rf.v2, polygonBA.vertices[rf.i2]); + copyVec2(rf.normal, polygonBA.normals[rf.i1]); } - function clamp(num, min, max) { - if (num < min) { - return min; - } else if (num > max) { - return max; - } else { - return num; + setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x); + setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y); + rf.sideOffset1 = dotVec2(rf.sideNormal1, rf.v1); + rf.sideOffset2 = dotVec2(rf.sideNormal2, rf.v2); + clipPoints1[0].recycle(), clipPoints1[1].recycle(); + clipPoints2[0].recycle(), clipPoints2[1].recycle(); + var np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1); + if (np1 < SettingsInternal.maxManifoldPoints) { + return; + } + var np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2); + if (np2 < SettingsInternal.maxManifoldPoints) { + return; + } + if (primaryAxis.type == EPAxisType.e_edgeA) { + copyVec2(manifold.localNormal, rf.normal); + copyVec2(manifold.localPoint, rf.v1); + } else { + copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]); + copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]); + } + var pointCount = 0; + for (var i = 0; i < SettingsInternal.maxManifoldPoints; ++i) { + var separation = dotVec2(rf.normal, clipPoints2[i].v) - dotVec2(rf.normal, rf.v1); + if (separation <= radius) { + var cp = manifold.points[pointCount]; + if (primaryAxis.type == EPAxisType.e_edgeA) { + detransformVec2(cp.localPoint, xf, clipPoints2[i].v); + cp.id.set(clipPoints2[i].id); + } else { + copyVec2(cp.localPoint, clipPoints2[i].v); + cp.id.set(clipPoints2[i].id); + cp.id.swapFeatures(); + } + ++pointCount; } } - function length(x, y) { - return math_sqrt$1(x * x + y * y); + manifold.pointCount = pointCount; + }; + var internal = { + CollidePolygons, + Settings, + Sweep, + Manifold, + Distance, + TimeOfImpact, + DynamicTree, + stats: stats$1 + }; + /** + * Stage.js 1.0.0-alpha.5 + * + * @copyright Copyright (c) 2024 Ali Shakiba + * @license The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + var math_random = Math.random; + var math_sqrt$1 = Math.sqrt; + function random(min, max) { + if (typeof min === "undefined") { + max = 1; + min = 0; + } else if (typeof max === "undefined") { + max = min; + min = 0; } - var math = Object.create(Math); - math.random = random; - math.wrap = wrap; - math.clamp = clamp; - math.length = length; - math.rotate = wrap; - math.limit = clamp; - var Matrix = ( - /** @class */ - function() { - function Matrix2(a, b, c, d, e, f) { - this.a = 1; - this.b = 0; - this.c = 0; - this.d = 1; - this.e = 0; - this.f = 0; - if (typeof a === "object") { - this.reset(a); - } else { - this.reset(a, b, c, d, e, f); - } + return min == max ? min : math_random() * (max - min) + min; + } + function wrap(num, min, max) { + if (typeof min === "undefined") { + max = 1; + min = 0; + } else if (typeof max === "undefined") { + max = min; + min = 0; + } + if (max > min) { + num = (num - min) % (max - min); + return num + (num < 0 ? max : min); + } else { + num = (num - max) % (min - max); + return num + (num <= 0 ? min : max); + } + } + function clamp(num, min, max) { + if (num < min) { + return min; + } else if (num > max) { + return max; + } else { + return num; + } + } + function length(x2, y) { + return math_sqrt$1(x2 * x2 + y * y); + } + var math = Object.create(Math); + math.random = random; + math.wrap = wrap; + math.clamp = clamp; + math.length = length; + math.rotate = wrap; + math.limit = clamp; + var Matrix = ( + /** @class */ + function() { + function Matrix2(a2, b2, c2, d2, e3, f) { + this.a = 1; + this.b = 0; + this.c = 0; + this.d = 1; + this.e = 0; + this.f = 0; + if (typeof a2 === "object") { + this.reset(a2); + } else { + this.reset(a2, b2, c2, d2, e3, f); } - Matrix2.prototype.toString = function() { - return "[" + this.a + ", " + this.b + ", " + this.c + ", " + this.d + ", " + this.e + ", " + this.f + "]"; - }; - Matrix2.prototype.clone = function() { - return new Matrix2(this.a, this.b, this.c, this.d, this.e, this.f); - }; - Matrix2.prototype.reset = function(a, b, c, d, e, f) { - this._dirty = true; - if (typeof a === "object") { - this.a = a.a; - this.d = a.d; - this.b = a.b; - this.c = a.c; - this.e = a.e; - this.f = a.f; - } else { - this.a = typeof a === "number" ? a : 1; - this.b = typeof b === "number" ? b : 0; - this.c = typeof c === "number" ? c : 0; - this.d = typeof d === "number" ? d : 1; - this.e = typeof e === "number" ? e : 0; - this.f = typeof f === "number" ? f : 0; - } - return this; - }; - Matrix2.prototype.identity = function() { - this._dirty = true; - this.a = 1; - this.b = 0; - this.c = 0; - this.d = 1; - this.e = 0; - this.f = 0; - return this; - }; - Matrix2.prototype.rotate = function(angle) { - if (!angle) { - return this; - } - this._dirty = true; - var u = angle ? Math.cos(angle) : 1; - var v = angle ? Math.sin(angle) : 0; - var a = u * this.a - v * this.b; - var b = u * this.b + v * this.a; - var c = u * this.c - v * this.d; - var d = u * this.d + v * this.c; - var e = u * this.e - v * this.f; - var f = u * this.f + v * this.e; - this.a = a; - this.b = b; - this.c = c; - this.d = d; - this.e = e; - this.f = f; - return this; - }; - Matrix2.prototype.translate = function(x, y) { - if (!x && !y) { - return this; - } - this._dirty = true; - this.e += x; - this.f += y; + } + Matrix2.prototype.toString = function() { + return "[" + this.a + ", " + this.b + ", " + this.c + ", " + this.d + ", " + this.e + ", " + this.f + "]"; + }; + Matrix2.prototype.clone = function() { + return new Matrix2(this.a, this.b, this.c, this.d, this.e, this.f); + }; + Matrix2.prototype.reset = function(a2, b2, c2, d2, e3, f) { + this._dirty = true; + if (typeof a2 === "object") { + this.a = a2.a; + this.d = a2.d; + this.b = a2.b; + this.c = a2.c; + this.e = a2.e; + this.f = a2.f; + } else { + this.a = typeof a2 === "number" ? a2 : 1; + this.b = typeof b2 === "number" ? b2 : 0; + this.c = typeof c2 === "number" ? c2 : 0; + this.d = typeof d2 === "number" ? d2 : 1; + this.e = typeof e3 === "number" ? e3 : 0; + this.f = typeof f === "number" ? f : 0; + } + return this; + }; + Matrix2.prototype.identity = function() { + this._dirty = true; + this.a = 1; + this.b = 0; + this.c = 0; + this.d = 1; + this.e = 0; + this.f = 0; + return this; + }; + Matrix2.prototype.rotate = function(angle) { + if (!angle) { return this; - }; - Matrix2.prototype.scale = function(x, y) { - if (!(x - 1) && !(y - 1)) { - return this; - } - this._dirty = true; - this.a *= x; - this.b *= y; - this.c *= x; - this.d *= y; - this.e *= x; - this.f *= y; + } + this._dirty = true; + var u = angle ? Math.cos(angle) : 1; + var v3 = angle ? Math.sin(angle) : 0; + var a2 = u * this.a - v3 * this.b; + var b2 = u * this.b + v3 * this.a; + var c2 = u * this.c - v3 * this.d; + var d2 = u * this.d + v3 * this.c; + var e3 = u * this.e - v3 * this.f; + var f = u * this.f + v3 * this.e; + this.a = a2; + this.b = b2; + this.c = c2; + this.d = d2; + this.e = e3; + this.f = f; + return this; + }; + Matrix2.prototype.translate = function(x2, y) { + if (!x2 && !y) { return this; - }; - Matrix2.prototype.skew = function(x, y) { - if (!x && !y) { - return this; - } - this._dirty = true; - var a = this.a + this.b * x; - var b = this.b + this.a * y; - var c = this.c + this.d * x; - var d = this.d + this.c * y; - var e = this.e + this.f * x; - var f = this.f + this.e * y; - this.a = a; - this.b = b; - this.c = c; - this.d = d; - this.e = e; - this.f = f; + } + this._dirty = true; + this.e += x2; + this.f += y; + return this; + }; + Matrix2.prototype.scale = function(x2, y) { + if (!(x2 - 1) && !(y - 1)) { return this; - }; - Matrix2.prototype.concat = function(m) { - this._dirty = true; - var a = this.a * m.a + this.b * m.c; - var b = this.b * m.d + this.a * m.b; - var c = this.c * m.a + this.d * m.c; - var d = this.d * m.d + this.c * m.b; - var e = this.e * m.a + m.e + this.f * m.c; - var f = this.f * m.d + m.f + this.e * m.b; - this.a = a; - this.b = b; - this.c = c; - this.d = d; - this.e = e; - this.f = f; + } + this._dirty = true; + this.a *= x2; + this.b *= y; + this.c *= x2; + this.d *= y; + this.e *= x2; + this.f *= y; + return this; + }; + Matrix2.prototype.skew = function(x2, y) { + if (!x2 && !y) { return this; - }; - Matrix2.prototype.inverse = function() { - if (this._dirty) { - this._dirty = false; - if (!this.inverted) { - this.inverted = new Matrix2(); - } - var z = this.a * this.d - this.b * this.c; - this.inverted.a = this.d / z; - this.inverted.b = -this.b / z; - this.inverted.c = -this.c / z; - this.inverted.d = this.a / z; - this.inverted.e = (this.c * this.f - this.e * this.d) / z; - this.inverted.f = (this.e * this.b - this.a * this.f) / z; - } - return this.inverted; - }; - Matrix2.prototype.map = function(p, q) { - q = q || { x: 0, y: 0 }; - q.x = this.a * p.x + this.c * p.y + this.e; - q.y = this.b * p.x + this.d * p.y + this.f; - return q; - }; - Matrix2.prototype.mapX = function(x, y) { - if (typeof x === "object") { - y = x.y; - x = x.x; - } - return this.a * x + this.c * y + this.e; - }; - Matrix2.prototype.mapY = function(x, y) { - if (typeof x === "object") { - y = x.y; - x = x.x; + } + this._dirty = true; + var a2 = this.a + this.b * x2; + var b2 = this.b + this.a * y; + var c2 = this.c + this.d * x2; + var d2 = this.d + this.c * y; + var e3 = this.e + this.f * x2; + var f = this.f + this.e * y; + this.a = a2; + this.b = b2; + this.c = c2; + this.d = d2; + this.e = e3; + this.f = f; + return this; + }; + Matrix2.prototype.concat = function(m) { + this._dirty = true; + var a2 = this.a * m.a + this.b * m.c; + var b2 = this.b * m.d + this.a * m.b; + var c2 = this.c * m.a + this.d * m.c; + var d2 = this.d * m.d + this.c * m.b; + var e3 = this.e * m.a + m.e + this.f * m.c; + var f = this.f * m.d + m.f + this.e * m.b; + this.a = a2; + this.b = b2; + this.c = c2; + this.d = d2; + this.e = e3; + this.f = f; + return this; + }; + Matrix2.prototype.inverse = function() { + if (this._dirty) { + this._dirty = false; + if (!this.inverted) { + this.inverted = new Matrix2(); + } + var z = this.a * this.d - this.b * this.c; + this.inverted.a = this.d / z; + this.inverted.b = -this.b / z; + this.inverted.c = -this.c / z; + this.inverted.d = this.a / z; + this.inverted.e = (this.c * this.f - this.e * this.d) / z; + this.inverted.f = (this.e * this.b - this.a * this.f) / z; + } + return this.inverted; + }; + Matrix2.prototype.map = function(p, q) { + q = q || { x: 0, y: 0 }; + q.x = this.a * p.x + this.c * p.y + this.e; + q.y = this.b * p.x + this.d * p.y + this.f; + return q; + }; + Matrix2.prototype.mapX = function(x2, y) { + if (typeof x2 === "object") { + y = x2.y; + x2 = x2.x; + } + return this.a * x2 + this.c * y + this.e; + }; + Matrix2.prototype.mapY = function(x2, y) { + if (typeof x2 === "object") { + y = x2.y; + x2 = x2.x; + } + return this.b * x2 + this.d * y + this.f; + }; + return Matrix2; + }() + ); + var objectToString = Object.prototype.toString; + function isFn(value) { + var str = objectToString.call(value); + return str === "[object Function]" || str === "[object GeneratorFunction]" || str === "[object AsyncFunction]"; + } + function isHash(value) { + return objectToString.call(value) === "[object Object]" && value.constructor === Object; + } + const stats = { + create: 0, + tick: 0, + node: 0, + draw: 0, + fps: 0 + }; + var uid = function() { + return Date.now().toString(36) + Math.random().toString(36).slice(2); + }; + var Texture = ( + /** @class */ + function() { + function Texture2() { + this.uid = "texture:" + uid(); + this.sx = 0; + this.sy = 0; + this.dx = 0; + this.dy = 0; + } + Texture2.prototype.setSourceCoordinate = function(x2, y) { + this.sx = x2; + this.sy = y; + }; + Texture2.prototype.setSourceDimension = function(w, h) { + this.sw = w; + this.sh = h; + }; + Texture2.prototype.setDestinationCoordinate = function(x2, y) { + this.dx = x2; + this.dy = y; + }; + Texture2.prototype.setDestinationDimension = function(w, h) { + this.dw = w; + this.dh = h; + }; + Texture2.prototype.draw = function(context, x1, y1, w1, h1, x2, y2, w2, h2) { + var sx = this.sx; + var sy = this.sy; + var sw = this.sw; + var sh = this.sh; + var dx = this.dx; + var dy = this.dy; + var dw = this.dw; + var dh = this.dh; + if (typeof x1 === "number" || typeof y1 === "number" || typeof w1 === "number" || typeof h1 === "number" || typeof x2 === "number" || typeof y2 === "number" || typeof w2 === "number" || typeof h2 === "number") { + if (typeof x2 === "number" || typeof y2 === "number" || typeof w2 === "number" || typeof h2 === "number") { + sx += x1; + sy += y1; + sw = w1 !== null && w1 !== void 0 ? w1 : sw; + sh = h1 !== null && h1 !== void 0 ? h1 : sh; + dx += x2; + dy += y2; + dw = w2 !== null && w2 !== void 0 ? w2 : dw; + dh = h2 !== null && h2 !== void 0 ? h2 : dh; + } else { + dx += x1; + dy += y1; + dw = w1; + dh = h1; } - return this.b * x + this.d * y + this.f; - }; - return Matrix2; - }() - ); - var objectToString = Object.prototype.toString; - function isFn(value) { - var str = objectToString.call(value); - return str === "[object Function]" || str === "[object GeneratorFunction]" || str === "[object AsyncFunction]"; - } - function isHash(value) { - return objectToString.call(value) === "[object Object]" && value.constructor === Object; - } - const stats = { - create: 0, - tick: 0, - node: 0, - draw: 0, - fps: 0 + } + this.drawWithNormalizedArgs(context, sx, sy, sw, sh, dx, dy, dw, dh); + }; + return Texture2; + }() + ); + var __extends$9 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); }; - var uid = function() { - return Date.now().toString(36) + Math.random().toString(36).slice(2); + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); + function __() { + this.constructor = d2; + } + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); }; - var Texture = ( - /** @class */ - function() { - function Texture2() { - this.uid = "texture:" + uid(); - this.sx = 0; - this.sy = 0; - this.dx = 0; - this.dy = 0; - } - Texture2.prototype.setSourceCoordinate = function(x, y) { - this.sx = x; - this.sy = y; - }; - Texture2.prototype.setSourceDimension = function(w, h) { - this.sw = w; - this.sh = h; - }; - Texture2.prototype.setDestinationCoordinate = function(x, y) { - this.dx = x; - this.dy = y; - }; - Texture2.prototype.setDestinationDimension = function(w, h) { - this.dw = w; - this.dh = h; - }; - Texture2.prototype.draw = function(context, x1, y1, w1, h1, x2, y2, w2, h2) { - var sx = this.sx; - var sy = this.sy; - var sw = this.sw; - var sh = this.sh; - var dx = this.dx; - var dy = this.dy; - var dw = this.dw; - var dh = this.dh; - if (typeof x1 === "number" || typeof y1 === "number" || typeof w1 === "number" || typeof h1 === "number" || typeof x2 === "number" || typeof y2 === "number" || typeof w2 === "number" || typeof h2 === "number") { - if (typeof x2 === "number" || typeof y2 === "number" || typeof w2 === "number" || typeof h2 === "number") { - sx += x1; - sy += y1; - sw = w1 !== null && w1 !== void 0 ? w1 : sw; - sh = h1 !== null && h1 !== void 0 ? h1 : sh; - dx += x2; - dy += y2; - dw = w2 !== null && w2 !== void 0 ? w2 : dw; - dh = h2 !== null && h2 !== void 0 ? h2 : dh; - } else { - dx += x1; - dy += y1; - dw = w1; - dh = h1; - } - } - this.drawWithNormalizedArgs(context, sx, sy, sw, sh, dx, dy, dw, dh); - }; - return Texture2; - }() - ); - var __extends$9 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); - }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { - this.constructor = d; - } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - }(); - var ImageTexture = ( - /** @class */ - function(_super) { - __extends$9(ImageTexture2, _super); - function ImageTexture2(source, pixelRatio) { - var _this = _super.call(this) || this; - _this._pixelRatio = 1; - if (typeof source === "object") { - _this.setSourceImage(source, pixelRatio); - } - return _this; - } - ImageTexture2.prototype.setSourceImage = function(image2, pixelRatio) { - if (pixelRatio === void 0) { - pixelRatio = 1; - } - this._source = image2; - this._pixelRatio = pixelRatio; - }; - ImageTexture2.prototype.getWidth = function() { - return this._source.width / this._pixelRatio; - }; - ImageTexture2.prototype.getHeight = function() { - return this._source.height / this._pixelRatio; - }; - ImageTexture2.prototype.prerender = function(context) { - return false; - }; - ImageTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) { - var image2 = this._source; - if (image2 === null || typeof image2 !== "object") { - return; - } - sw = sw !== null && sw !== void 0 ? sw : this.getWidth(); - sh = sh !== null && sh !== void 0 ? sh : this.getHeight(); - dw = dw !== null && dw !== void 0 ? dw : sw; - dh = dh !== null && dh !== void 0 ? dh : sh; - sx *= this._pixelRatio; - sy *= this._pixelRatio; - sw *= this._pixelRatio; - sh *= this._pixelRatio; - try { - stats.draw++; - context.drawImage(image2, sx, sy, sw, sh, dx, dy, dw, dh); - } catch (ex) { - if (!this._draw_failed) { - console.log("Unable to draw: ", image2); - console.log(ex); - this._draw_failed = true; - } - } - }; - return ImageTexture2; - }(Texture) - ); - var __extends$8 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); - }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { - this.constructor = d; - } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - }(); - var PipeTexture = ( - /** @class */ - function(_super) { - __extends$8(PipeTexture2, _super); - function PipeTexture2(source) { - var _this = _super.call(this) || this; - _this._source = source; - return _this; - } - PipeTexture2.prototype.setSourceTexture = function(texture2) { - this._source = texture2; - }; - PipeTexture2.prototype.getWidth = function() { - var _a, _b; - return (_b = (_a = this.dw) !== null && _a !== void 0 ? _a : this.sw) !== null && _b !== void 0 ? _b : this._source.getWidth(); - }; - PipeTexture2.prototype.getHeight = function() { - var _a, _b; - return (_b = (_a = this.dh) !== null && _a !== void 0 ? _a : this.sh) !== null && _b !== void 0 ? _b : this._source.getHeight(); - }; - PipeTexture2.prototype.prerender = function(context) { - return this._source.prerender(context); - }; - PipeTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) { - var texture2 = this._source; - if (texture2 === null || typeof texture2 !== "object") { - return; - } - texture2.draw(context, sx, sy, sw, sh, dx, dy, dw, dh); - }; - return PipeTexture2; - }(Texture) - ); - var __extends$7 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); - }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { - this.constructor = d; - } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - }(); - var __awaiter$1 = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve) { - resolve(value); - }); + }(); + var ImageTexture = ( + /** @class */ + function(_super) { + __extends$9(ImageTexture2, _super); + function ImageTexture2(source, pixelRatio) { + var _this = _super.call(this) || this; + _this._pixelRatio = 1; + if (typeof source === "object") { + _this.setSourceImage(source, pixelRatio); + } + return _this; } - return new (P || (P = Promise))(function(resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } + ImageTexture2.prototype.setSourceImage = function(image2, pixelRatio) { + if (pixelRatio === void 0) { + pixelRatio = 1; } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); + this._source = image2; + this._pixelRatio = pixelRatio; + }; + ImageTexture2.prototype.getWidth = function() { + return this._source.width / this._pixelRatio; + }; + ImageTexture2.prototype.getHeight = function() { + return this._source.height / this._pixelRatio; + }; + ImageTexture2.prototype.prerender = function(context) { + return false; + }; + ImageTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) { + var image2 = this._source; + if (image2 === null || typeof image2 !== "object") { + return; + } + sw = sw !== null && sw !== void 0 ? sw : this.getWidth(); + sh = sh !== null && sh !== void 0 ? sh : this.getHeight(); + dw = dw !== null && dw !== void 0 ? dw : sw; + dh = dh !== null && dh !== void 0 ? dh : sh; + sx *= this._pixelRatio; + sy *= this._pixelRatio; + sw *= this._pixelRatio; + sh *= this._pixelRatio; + try { + stats.draw++; + context.drawImage(image2, sx, sy, sw, sh, dx, dy, dw, dh); + } catch (ex) { + if (!this._draw_failed) { + console.log("Unable to draw: ", image2); + console.log(ex); + this._draw_failed = true; } } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + }; + return ImageTexture2; + }(Texture) + ); + var __extends$8 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); + }; + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); + function __() { + this.constructor = d2; + } + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); + }; + }(); + var PipeTexture = ( + /** @class */ + function(_super) { + __extends$8(PipeTexture2, _super); + function PipeTexture2(source) { + var _this = _super.call(this) || this; + _this._source = source; + return _this; + } + PipeTexture2.prototype.setSourceTexture = function(texture2) { + this._source = texture2; + }; + PipeTexture2.prototype.getWidth = function() { + var _a2, _b; + return (_b = (_a2 = this.dw) !== null && _a2 !== void 0 ? _a2 : this.sw) !== null && _b !== void 0 ? _b : this._source.getWidth(); + }; + PipeTexture2.prototype.getHeight = function() { + var _a2, _b; + return (_b = (_a2 = this.dh) !== null && _a2 !== void 0 ? _a2 : this.sh) !== null && _b !== void 0 ? _b : this._source.getHeight(); + }; + PipeTexture2.prototype.prerender = function(context) { + return this._source.prerender(context); + }; + PipeTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) { + var texture2 = this._source; + if (texture2 === null || typeof texture2 !== "object") { + return; } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); + texture2.draw(context, sx, sy, sw, sh, dx, dy, dw, dh); + }; + return PipeTexture2; + }(Texture) + ); + var __extends$7 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); }; - var __generator$1 = function(thisArg, body) { - var _ = { label: 0, sent: function() { - if (t[0] & 1) - throw t[1]; - return t[1]; - }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { - return this; - }), g; - function verb(n) { - return function(v) { - return step([n, v]); - }; + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); + function __() { + this.constructor = d2; } - function step(op) { - if (f) - throw new TypeError("Generator is already executing."); - while (_) - try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) - return t; - if (y = 0, t) - op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: - case 1: + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); + }; + }(); + var __awaiter$1 = function(thisArg, _arguments, P3, generator) { + function adopt(value) { + return value instanceof P3 ? value : new P3(function(resolve) { + resolve(value); + }); + } + return new (P3 || (P3 = Promise))(function(resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e3) { + reject(e3); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e3) { + reject(e3); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, [])).next()); + }); + }; + var __generator$1 = function(thisArg, body) { + var _ = { label: 0, sent: function() { + if (t[0] & 1) + throw t[1]; + return t[1]; + }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { + return this; + }), g; + function verb(n2) { + return function(v3) { + return step([n2, v3]); + }; + } + function step(op) { + if (f) + throw new TypeError("Generator is already executing."); + while (_) + try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) + return t; + if (y = 0, t) + op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: + case 1: + t = op; + break; + case 4: + _.label++; + return { value: op[1], done: false }; + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { + _ = 0; + continue; + } + if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { + _.label = op[1]; + break; + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; t = op; break; - case 4: - _.label++; - return { value: op[1], done: false }; - case 5: - _.label++; - y = op[1]; - op = [0]; - continue; - case 7: - op = _.ops.pop(); - _.trys.pop(); - continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { - _ = 0; - continue; - } - if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { - _.label = op[1]; - break; - } - if (op[0] === 6 && _.label < t[1]) { - _.label = t[1]; - t = op; - break; - } - if (t && _.label < t[2]) { - _.label = t[2]; - _.ops.push(op); - break; - } - if (t[2]) - _.ops.pop(); - _.trys.pop(); - continue; - } - op = body.call(thisArg, _); - } catch (e) { - op = [6, e]; - y = 0; - } finally { - f = t = 0; - } - if (op[0] & 5) - throw op[1]; - return { value: op[0] ? op[1] : void 0, done: true }; - } - }; - var Atlas = ( - /** @class */ - function(_super) { - __extends$7(Atlas2, _super); - function Atlas2(def) { - if (def === void 0) { - def = {}; - } - var _this = _super.call(this) || this; - _this.pipeSpriteTexture = function(def2) { - var map = _this._map; - var ppu = _this._ppu; - var trim = _this._trim; - if (!def2) { - return void 0; - } - def2 = Object.assign({}, def2); - if (isFn(map)) { - def2 = map(def2); - } - if (ppu != 1) { - def2.x *= ppu; - def2.y *= ppu; - def2.width *= ppu; - def2.height *= ppu; - def2.top *= ppu; - def2.bottom *= ppu; - def2.left *= ppu; - def2.right *= ppu; - } - if (trim != 0) { - def2.x += trim; - def2.y += trim; - def2.width -= 2 * trim; - def2.height -= 2 * trim; - def2.top -= trim; - def2.bottom -= trim; - def2.left -= trim; - def2.right -= trim; - } - var texture2 = new PipeTexture(_this); - texture2.top = def2.top; - texture2.bottom = def2.bottom; - texture2.left = def2.left; - texture2.right = def2.right; - texture2.setSourceCoordinate(def2.x, def2.y); - texture2.setSourceDimension(def2.width, def2.height); - return texture2; - }; - _this.findSpriteDefinition = function(query) { - var textures = _this._textures; - if (textures) { - if (isFn(textures)) { - return textures(query); - } else if (isHash(textures)) { - return textures[query]; } - } - }; - _this.select = function(query) { - if (!query) { - return new TextureSelection(new PipeTexture(_this)); - } - var textureDefinition = _this.findSpriteDefinition(query); - if (textureDefinition) { - return new TextureSelection(textureDefinition, _this); - } - }; - _this.name = def.name; - _this._ppu = def.ppu || def.ratio || 1; - _this._trim = def.trim || 0; - _this._map = def.map || def.filter; - _this._textures = def.textures; - if (typeof def.image === "object" && isHash(def.image)) { - _this._imageSrc = def.image.src || def.image.url; - if (typeof def.image.ratio === "number") { - _this._pixelRatio = def.image.ratio; - } - } else { - if (typeof def.imagePath === "string") { - _this._imageSrc = def.imagePath; - } else if (typeof def.image === "string") { - _this._imageSrc = def.image; - } - if (typeof def.imageRatio === "number") { - _this._pixelRatio = def.imageRatio; - } - } - deprecatedWarning(def); - return _this; - } - Atlas2.prototype.load = function() { - return __awaiter$1(this, void 0, void 0, function() { - var image2; - return __generator$1(this, function(_a) { - switch (_a.label) { - case 0: - if (!this._imageSrc) - return [3, 2]; - return [4, asyncLoadImage(this._imageSrc)]; - case 1: - image2 = _a.sent(); - this.setSourceImage(image2, this._pixelRatio); - _a.label = 2; - case 2: - return [ - 2 - /*return*/ - ]; + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; } - }); - }); - }; - return Atlas2; - }(ImageTexture) - ); - function asyncLoadImage(src) { - return new Promise(function(resolve, reject) { - var img = new Image(); - img.onload = function() { - resolve(img); - }; - img.onerror = function(error) { - console.error("Loading failed: " + src); - reject(error); - }; - img.src = src; - }); + if (t[2]) + _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } catch (e3) { + op = [6, e3]; + y = 0; + } finally { + f = t = 0; + } + if (op[0] & 5) + throw op[1]; + return { value: op[0] ? op[1] : void 0, done: true }; } - function deprecatedWarning(def) { - if ("filter" in def) - console.warn("'filter' field of atlas definition is deprecated"); - if ("cutouts" in def) - console.warn("'cutouts' field of atlas definition is deprecated"); - if ("sprites" in def) - console.warn("'sprites' field of atlas definition is deprecated"); - if ("factory" in def) - console.warn("'factory' field of atlas definition is deprecated"); - if ("ratio" in def) - console.warn("'ratio' field of atlas definition is deprecated"); - if ("imagePath" in def) - console.warn("'imagePath' field of atlas definition is deprecated"); - if ("imageRatio" in def) - console.warn("'imageRatio' field of atlas definition is deprecated"); - if (typeof def.image === "object" && "url" in def.image) - console.warn("'image.url' field of atlas definition is deprecated"); + }; + /** @class */ + (function(_super) { + __extends$7(Atlas2, _super); + function Atlas2(def) { + if (def === void 0) { + def = {}; + } + var _this = _super.call(this) || this; + _this.pipeSpriteTexture = function(def2) { + var map = _this._map; + var ppu = _this._ppu; + var trim = _this._trim; + if (!def2) { + return void 0; + } + def2 = Object.assign({}, def2); + if (isFn(map)) { + def2 = map(def2); + } + if (ppu != 1) { + def2.x *= ppu; + def2.y *= ppu; + def2.width *= ppu; + def2.height *= ppu; + def2.top *= ppu; + def2.bottom *= ppu; + def2.left *= ppu; + def2.right *= ppu; + } + if (trim != 0) { + def2.x += trim; + def2.y += trim; + def2.width -= 2 * trim; + def2.height -= 2 * trim; + def2.top -= trim; + def2.bottom -= trim; + def2.left -= trim; + def2.right -= trim; + } + var texture2 = new PipeTexture(_this); + texture2.top = def2.top; + texture2.bottom = def2.bottom; + texture2.left = def2.left; + texture2.right = def2.right; + texture2.setSourceCoordinate(def2.x, def2.y); + texture2.setSourceDimension(def2.width, def2.height); + return texture2; + }; + _this.findSpriteDefinition = function(query) { + var textures = _this._textures; + if (textures) { + if (isFn(textures)) { + return textures(query); + } else if (isHash(textures)) { + return textures[query]; + } + } + }; + _this.select = function(query) { + if (!query) { + return new TextureSelection(new PipeTexture(_this)); + } + var textureDefinition = _this.findSpriteDefinition(query); + if (textureDefinition) { + return new TextureSelection(textureDefinition, _this); + } + }; + _this.name = def.name; + _this._ppu = def.ppu || def.ratio || 1; + _this._trim = def.trim || 0; + _this._map = def.map || def.filter; + _this._textures = def.textures; + if (typeof def.image === "object" && isHash(def.image)) { + _this._imageSrc = def.image.src || def.image.url; + if (typeof def.image.ratio === "number") { + _this._pixelRatio = def.image.ratio; + } + } else { + if (typeof def.imagePath === "string") { + _this._imageSrc = def.imagePath; + } else if (typeof def.image === "string") { + _this._imageSrc = def.image; + } + if (typeof def.imageRatio === "number") { + _this._pixelRatio = def.imageRatio; + } + } + deprecatedWarning(def); + return _this; } - var __extends$6 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); - }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { - this.constructor = d; - } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - }(); - var __awaiter = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve) { - resolve(value); + Atlas2.prototype.load = function() { + return __awaiter$1(this, void 0, void 0, function() { + var image2; + return __generator$1(this, function(_a2) { + switch (_a2.label) { + case 0: + if (!this._imageSrc) + return [3, 2]; + return [4, asyncLoadImage(this._imageSrc)]; + case 1: + image2 = _a2.sent(); + this.setSourceImage(image2, this._pixelRatio); + _a2.label = 2; + case 2: + return [ + 2 + /*return*/ + ]; + } }); + }); + }; + return Atlas2; + })(ImageTexture); + function asyncLoadImage(src) { + return new Promise(function(resolve, reject) { + var img = new Image(); + img.onload = function() { + resolve(img); + }; + img.onerror = function(error) { + console.error("Loading failed: " + src); + reject(error); + }; + img.src = src; + }); + } + function deprecatedWarning(def) { + if ("filter" in def) + console.warn("'filter' field of atlas definition is deprecated"); + if ("cutouts" in def) + console.warn("'cutouts' field of atlas definition is deprecated"); + if ("sprites" in def) + console.warn("'sprites' field of atlas definition is deprecated"); + if ("factory" in def) + console.warn("'factory' field of atlas definition is deprecated"); + if ("ratio" in def) + console.warn("'ratio' field of atlas definition is deprecated"); + if ("imagePath" in def) + console.warn("'imagePath' field of atlas definition is deprecated"); + if ("imageRatio" in def) + console.warn("'imageRatio' field of atlas definition is deprecated"); + if (typeof def.image === "object" && "url" in def.image) + console.warn("'image.url' field of atlas definition is deprecated"); + } + var __extends$6 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); + }; + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); + function __() { + this.constructor = d2; } - return new (P || (P = Promise))(function(resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); + }; + }(); + function isAtlasSpriteDefinition(selection) { + return typeof selection === "object" && isHash(selection) && "number" === typeof selection.width && "number" === typeof selection.height; + } + var TextureSelection = ( + /** @class */ + function() { + function TextureSelection2(selection, atlas2) { + this.selection = selection; + this.atlas = atlas2; + } + TextureSelection2.prototype.resolve = function(selection, subquery) { + if (!selection) { + return NO_TEXTURE; + } else if (Array.isArray(selection)) { + return this.resolve(selection[0]); + } else if (selection instanceof Texture) { + return selection; + } else if (isAtlasSpriteDefinition(selection)) { + if (!this.atlas) { + return NO_TEXTURE; } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); + return this.atlas.pipeSpriteTexture(selection); + } else if (typeof selection === "object" && isHash(selection) && typeof subquery !== "undefined") { + return this.resolve(selection[subquery]); + } else if (typeof selection === "function" && isFn(selection)) { + return this.resolve(selection(subquery)); + } else if (typeof selection === "string") { + if (!this.atlas) { + return NO_TEXTURE; } + return this.resolve(this.atlas.findSpriteDefinition(selection)); } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + }; + TextureSelection2.prototype.one = function(subquery) { + return this.resolve(this.selection, subquery); + }; + TextureSelection2.prototype.array = function(arr) { + var array = Array.isArray(arr) ? arr : []; + if (Array.isArray(this.selection)) { + for (var i = 0; i < this.selection.length; i++) { + array[i] = this.resolve(this.selection[i]); + } + } else { + array[0] = this.resolve(this.selection); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); + return array; + }; + return TextureSelection2; + }() + ); + var NO_TEXTURE = new /** @class */ + (function(_super) { + __extends$6(class_1, _super); + function class_1() { + var _this = _super.call(this) || this; + _this.setSourceDimension(0, 0); + return _this; + } + class_1.prototype.getWidth = function() { + return 0; }; - var __generator = function(thisArg, body) { - var _ = { label: 0, sent: function() { - if (t[0] & 1) - throw t[1]; - return t[1]; - }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { - return this; - }), g; - function verb(n) { - return function(v) { - return step([n, v]); - }; + class_1.prototype.getHeight = function() { + return 0; + }; + class_1.prototype.prerender = function(context) { + return false; + }; + class_1.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) { + }; + class_1.prototype.setSourceCoordinate = function(x2, y) { + }; + class_1.prototype.setSourceDimension = function(w, h) { + }; + class_1.prototype.setDestinationCoordinate = function(x2, y) { + }; + class_1.prototype.setDestinationDimension = function(w, h) { + }; + class_1.prototype.draw = function() { + }; + return class_1; + }(Texture))(); + var NO_SELECTION = new TextureSelection(NO_TEXTURE); + var ATLAS_MEMO_BY_NAME = {}; + var ATLAS_ARRAY = []; + function texture(query) { + if ("string" !== typeof query) { + return new TextureSelection(query); + } + var result = null; + var colonIndex = query.indexOf(":"); + if (colonIndex > 0 && query.length > colonIndex + 1) { + var atlas_1 = ATLAS_MEMO_BY_NAME[query.slice(0, colonIndex)]; + result = atlas_1 && atlas_1.select(query.slice(colonIndex + 1)); + } + if (!result) { + var atlas_2 = ATLAS_MEMO_BY_NAME[query]; + result = atlas_2 && atlas_2.select(); + } + if (!result) { + for (var i = 0; i < ATLAS_ARRAY.length; i++) { + result = ATLAS_ARRAY[i].select(query); + if (result) { + break; + } } - function step(op) { - if (f) - throw new TypeError("Generator is already executing."); - while (_) - try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) - return t; - if (y = 0, t) - op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: - case 1: - t = op; - break; - case 4: - _.label++; - return { value: op[1], done: false }; - case 5: - _.label++; - y = op[1]; - op = [0]; - continue; - case 7: - op = _.ops.pop(); - _.trys.pop(); - continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { - _ = 0; - continue; - } - if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { - _.label = op[1]; - break; - } - if (op[0] === 6 && _.label < t[1]) { - _.label = t[1]; - t = op; - break; - } - if (t && _.label < t[2]) { - _.label = t[2]; - _.ops.push(op); - break; - } - if (t[2]) - _.ops.pop(); - _.trys.pop(); - continue; - } - op = body.call(thisArg, _); - } catch (e) { - op = [6, e]; - y = 0; - } finally { - f = t = 0; - } - if (op[0] & 5) - throw op[1]; - return { value: op[0] ? op[1] : void 0, done: true }; + } + if (!result) { + console.error("Texture not found: " + query); + result = NO_SELECTION; + } + return result; + } + var __extends$5 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); + }; + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); + function __() { + this.constructor = d2; } + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); }; - function isAtlasSpriteDefinition(selection) { - return typeof selection === "object" && isHash(selection) && "number" === typeof selection.width && "number" === typeof selection.height; - } - var TextureSelection = ( - /** @class */ - function() { - function TextureSelection2(selection, atlas2) { - this.selection = selection; - this.atlas = atlas2; - } - TextureSelection2.prototype.resolve = function(selection, subquery) { - if (!selection) { - return NO_TEXTURE; - } else if (Array.isArray(selection)) { - return this.resolve(selection[0]); - } else if (selection instanceof Texture) { - return selection; - } else if (isAtlasSpriteDefinition(selection)) { - if (!this.atlas) { - return NO_TEXTURE; - } - return this.atlas.pipeSpriteTexture(selection); - } else if (typeof selection === "object" && isHash(selection) && typeof subquery !== "undefined") { - return this.resolve(selection[subquery]); - } else if (typeof selection === "function" && isFn(selection)) { - return this.resolve(selection(subquery)); - } else if (typeof selection === "string") { - if (!this.atlas) { - return NO_TEXTURE; - } - return this.resolve(this.atlas.findSpriteDefinition(selection)); - } - }; - TextureSelection2.prototype.one = function(subquery) { - return this.resolve(this.selection, subquery); - }; - TextureSelection2.prototype.array = function(arr) { - var array = Array.isArray(arr) ? arr : []; - if (Array.isArray(this.selection)) { - for (var i = 0; i < this.selection.length; i++) { - array[i] = this.resolve(this.selection[i]); - } - } else { - array[0] = this.resolve(this.selection); - } - return array; - }; - return TextureSelection2; - }() - ); - var NO_TEXTURE = new /** @class */ - (function(_super) { - __extends$6(class_1, _super); - function class_1() { + }(); + var ResizableTexture = ( + /** @class */ + function(_super) { + __extends$5(ResizableTexture2, _super); + function ResizableTexture2(source, mode) { var _this = _super.call(this) || this; - _this.setSourceDimension(0, 0); + _this._source = source; + _this._resizeMode = mode; return _this; } - class_1.prototype.getWidth = function() { - return 0; + ResizableTexture2.prototype.getWidth = function() { + var _a2; + return (_a2 = this.dw) !== null && _a2 !== void 0 ? _a2 : this._source.getWidth(); }; - class_1.prototype.getHeight = function() { - return 0; + ResizableTexture2.prototype.getHeight = function() { + var _a2; + return (_a2 = this.dh) !== null && _a2 !== void 0 ? _a2 : this._source.getHeight(); }; - class_1.prototype.prerender = function(context) { + ResizableTexture2.prototype.prerender = function(context) { return false; }; - class_1.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) { - }; - class_1.prototype.setSourceCoordinate = function(x, y) { + ResizableTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) { + var texture2 = this._source; + if (texture2 === null || typeof texture2 !== "object") { + return; + } + var outWidth = dw; + var outHeight = dh; + var left = Number.isFinite(texture2.left) ? texture2.left : 0; + var right = Number.isFinite(texture2.right) ? texture2.right : 0; + var top = Number.isFinite(texture2.top) ? texture2.top : 0; + var bottom = Number.isFinite(texture2.bottom) ? texture2.bottom : 0; + var width = texture2.getWidth() - left - right; + var height = texture2.getHeight() - top - bottom; + if (!this._innerSize) { + outWidth = Math.max(outWidth - left - right, 0); + outHeight = Math.max(outHeight - top - bottom, 0); + } + if (top > 0 && left > 0) { + texture2.draw(context, 0, 0, left, top, 0, 0, left, top); + } + if (bottom > 0 && left > 0) { + texture2.draw(context, 0, height + top, left, bottom, 0, outHeight + top, left, bottom); + } + if (top > 0 && right > 0) { + texture2.draw(context, width + left, 0, right, top, outWidth + left, 0, right, top); + } + if (bottom > 0 && right > 0) { + texture2.draw(context, width + left, height + top, right, bottom, outWidth + left, outHeight + top, right, bottom); + } + if (this._resizeMode === "stretch") { + if (top > 0) { + texture2.draw(context, left, 0, width, top, left, 0, outWidth, top); + } + if (bottom > 0) { + texture2.draw(context, left, height + top, width, bottom, left, outHeight + top, outWidth, bottom); + } + if (left > 0) { + texture2.draw(context, 0, top, left, height, 0, top, left, outHeight); + } + if (right > 0) { + texture2.draw(context, width + left, top, right, height, outWidth + left, top, right, outHeight); + } + texture2.draw(context, left, top, width, height, left, top, outWidth, outHeight); + } else if (this._resizeMode === "tile") { + var l = left; + var r = outWidth; + var w = void 0; + while (r > 0) { + w = Math.min(width, r); + r -= width; + var t = top; + var b2 = outHeight; + var h = void 0; + while (b2 > 0) { + h = Math.min(height, b2); + b2 -= height; + texture2.draw(context, left, top, w, h, l, t, w, h); + if (r <= 0) { + if (left) { + texture2.draw(context, 0, top, left, h, 0, t, left, h); + } + if (right) { + texture2.draw(context, width + left, top, right, h, l + w, t, right, h); + } + } + t += h; + } + if (top) { + texture2.draw(context, left, 0, w, top, l, 0, w, top); + } + if (bottom) { + texture2.draw(context, left, height + top, w, bottom, l, t, w, bottom); + } + l += w; + } + } }; - class_1.prototype.setSourceDimension = function(w, h) { + return ResizableTexture2; + }(Texture) + ); + function getPixelRatio() { + return typeof window !== "undefined" ? window.devicePixelRatio || 1 : 1; + } + function isValidFitMode(value) { + return value && (value === "cover" || value === "contain" || value === "fill" || value === "in" || value === "in-pad" || value === "out" || value === "out-crop"); + } + var iid$1 = 0; + var Pin = ( + /** @class */ + function() { + function Pin2(owner) { + this.uid = "pin:" + uid(); + this._owner = owner; + this._parent = null; + this._relativeMatrix = new Matrix(); + this._absoluteMatrix = new Matrix(); + this.reset(); + } + Pin2.prototype.reset = function() { + this._textureAlpha = 1; + this._alpha = 1; + this._width = 0; + this._height = 0; + this._scaleX = 1; + this._scaleY = 1; + this._skewX = 0; + this._skewY = 0; + this._rotation = 0; + this._pivoted = false; + this._pivotX = 0; + this._pivotY = 0; + this._handled = false; + this._handleX = 0; + this._handleY = 0; + this._aligned = false; + this._alignX = 0; + this._alignY = 0; + this._offsetX = 0; + this._offsetY = 0; + this._boxX = 0; + this._boxY = 0; + this._boxWidth = this._width; + this._boxHeight = this._height; + this._ts_translate = ++iid$1; + this._ts_transform = ++iid$1; + this._ts_matrix = ++iid$1; }; - class_1.prototype.setDestinationCoordinate = function(x, y) { + Pin2.prototype._update = function() { + this._parent = this._owner._parent && this._owner._parent._pin; + if (this._handled && this._mo_handle != this._ts_transform) { + this._mo_handle = this._ts_transform; + this._ts_translate = ++iid$1; + } + if (this._aligned && this._parent && this._mo_align != this._parent._ts_transform) { + this._mo_align = this._parent._ts_transform; + this._ts_translate = ++iid$1; + } + return this; }; - class_1.prototype.setDestinationDimension = function(w, h) { + Pin2.prototype.toString = function() { + return this._owner + " (" + (this._parent ? this._parent._owner : null) + ")"; }; - class_1.prototype.draw = function() { + Pin2.prototype.absoluteMatrix = function() { + this._update(); + var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_matrix : 0); + if (this._mo_abs == ts) { + return this._absoluteMatrix; + } + this._mo_abs = ts; + var abs = this._absoluteMatrix; + abs.reset(this.relativeMatrix()); + this._parent && abs.concat(this._parent._absoluteMatrix); + this._ts_matrix = ++iid$1; + return abs; }; - return class_1; - }(Texture))(); - var NO_SELECTION = new TextureSelection(NO_TEXTURE); - var ATLAS_MEMO_BY_NAME = {}; - var ATLAS_ARRAY = []; - function atlas(def) { - return __awaiter(this, void 0, Promise, function() { - var atlas2; - return __generator(this, function(_a) { - switch (_a.label) { - case 0: - if (def instanceof Atlas) { - atlas2 = def; - } else { - atlas2 = new Atlas(def); - } - if (atlas2.name) { - ATLAS_MEMO_BY_NAME[atlas2.name] = atlas2; - } - ATLAS_ARRAY.push(atlas2); - return [4, atlas2.load()]; - case 1: - _a.sent(); - return [2, atlas2]; - } - }); - }); - } - function texture(query) { - if ("string" !== typeof query) { - return new TextureSelection(query); - } - var result = null; - var colonIndex = query.indexOf(":"); - if (colonIndex > 0 && query.length > colonIndex + 1) { - var atlas_1 = ATLAS_MEMO_BY_NAME[query.slice(0, colonIndex)]; - result = atlas_1 && atlas_1.select(query.slice(colonIndex + 1)); - } - if (!result) { - var atlas_2 = ATLAS_MEMO_BY_NAME[query]; - result = atlas_2 && atlas_2.select(); - } - if (!result) { - for (var i = 0; i < ATLAS_ARRAY.length; i++) { - result = ATLAS_ARRAY[i].select(query); - if (result) { - break; - } + Pin2.prototype.relativeMatrix = function() { + this._update(); + var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_transform : 0); + if (this._mo_rel == ts) { + return this._relativeMatrix; } - } - if (!result) { - console.error("Texture not found: " + query); - result = NO_SELECTION; - } - return result; - } - var __extends$5 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); - }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { - this.constructor = d; - } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - }(); - var ResizableTexture = ( - /** @class */ - function(_super) { - __extends$5(ResizableTexture2, _super); - function ResizableTexture2(source, mode) { - var _this = _super.call(this) || this; - _this._source = source; - _this._resizeMode = mode; - return _this; - } - ResizableTexture2.prototype.getWidth = function() { - var _a; - return (_a = this.dw) !== null && _a !== void 0 ? _a : this._source.getWidth(); - }; - ResizableTexture2.prototype.getHeight = function() { - var _a; - return (_a = this.dh) !== null && _a !== void 0 ? _a : this._source.getHeight(); - }; - ResizableTexture2.prototype.prerender = function(context) { - return false; - }; - ResizableTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) { - var texture2 = this._source; - if (texture2 === null || typeof texture2 !== "object") { - return; - } - var outWidth = dw; - var outHeight = dh; - var left = Number.isFinite(texture2.left) ? texture2.left : 0; - var right = Number.isFinite(texture2.right) ? texture2.right : 0; - var top = Number.isFinite(texture2.top) ? texture2.top : 0; - var bottom = Number.isFinite(texture2.bottom) ? texture2.bottom : 0; - var width = texture2.getWidth() - left - right; - var height = texture2.getHeight() - top - bottom; - if (!this._innerSize) { - outWidth = Math.max(outWidth - left - right, 0); - outHeight = Math.max(outHeight - top - bottom, 0); - } - if (top > 0 && left > 0) { - texture2.draw(context, 0, 0, left, top, 0, 0, left, top); - } - if (bottom > 0 && left > 0) { - texture2.draw(context, 0, height + top, left, bottom, 0, outHeight + top, left, bottom); - } - if (top > 0 && right > 0) { - texture2.draw(context, width + left, 0, right, top, outWidth + left, 0, right, top); - } - if (bottom > 0 && right > 0) { - texture2.draw(context, width + left, height + top, right, bottom, outWidth + left, outHeight + top, right, bottom); - } - if (this._resizeMode === "stretch") { - if (top > 0) { - texture2.draw(context, left, 0, width, top, left, 0, outWidth, top); - } - if (bottom > 0) { - texture2.draw(context, left, height + top, width, bottom, left, outHeight + top, outWidth, bottom); - } - if (left > 0) { - texture2.draw(context, 0, top, left, height, 0, top, left, outHeight); - } - if (right > 0) { - texture2.draw(context, width + left, top, right, height, outWidth + left, top, right, outHeight); - } - texture2.draw(context, left, top, width, height, left, top, outWidth, outHeight); - } else if (this._resizeMode === "tile") { - var l = left; - var r = outWidth; - var w = void 0; - while (r > 0) { - w = Math.min(width, r); - r -= width; - var t = top; - var b = outHeight; - var h = void 0; - while (b > 0) { - h = Math.min(height, b); - b -= height; - texture2.draw(context, left, top, w, h, l, t, w, h); - if (r <= 0) { - if (left) { - texture2.draw(context, 0, top, left, h, 0, t, left, h); - } - if (right) { - texture2.draw(context, width + left, top, right, h, l + w, t, right, h); - } - } - t += h; - } - if (top) { - texture2.draw(context, left, 0, w, top, l, 0, w, top); - } - if (bottom) { - texture2.draw(context, left, height + top, w, bottom, l, t, w, bottom); - } - l += w; - } - } - }; - return ResizableTexture2; - }(Texture) - ); - function getPixelRatio() { - return typeof window !== "undefined" ? window.devicePixelRatio || 1 : 1; - } - function isValidFitMode(value) { - return value && (value === "cover" || value === "contain" || value === "fill" || value === "in" || value === "in-pad" || value === "out" || value === "out-crop"); - } - var iid$1 = 0; - var Pin = ( - /** @class */ - function() { - function Pin2(owner) { - this.uid = "pin:" + uid(); - this._owner = owner; - this._parent = null; - this._relativeMatrix = new Matrix(); - this._absoluteMatrix = new Matrix(); - this.reset(); - } - Pin2.prototype.reset = function() { - this._textureAlpha = 1; - this._alpha = 1; - this._width = 0; - this._height = 0; - this._scaleX = 1; - this._scaleY = 1; - this._skewX = 0; - this._skewY = 0; - this._rotation = 0; - this._pivoted = false; - this._pivotX = 0; - this._pivotY = 0; - this._handled = false; - this._handleX = 0; - this._handleY = 0; - this._aligned = false; - this._alignX = 0; - this._alignY = 0; - this._offsetX = 0; - this._offsetY = 0; + this._mo_rel = ts; + var rel = this._relativeMatrix; + rel.identity(); + if (this._pivoted) { + rel.translate(-this._pivotX * this._width, -this._pivotY * this._height); + } + rel.scale(this._scaleX, this._scaleY); + rel.skew(this._skewX, this._skewY); + rel.rotate(this._rotation); + if (this._pivoted) { + rel.translate(this._pivotX * this._width, this._pivotY * this._height); + } + if (this._pivoted) { this._boxX = 0; this._boxY = 0; this._boxWidth = this._width; this._boxHeight = this._height; - this._ts_translate = ++iid$1; - this._ts_transform = ++iid$1; - this._ts_matrix = ++iid$1; - }; - Pin2.prototype._update = function() { - this._parent = this._owner._parent && this._owner._parent._pin; - if (this._handled && this._mo_handle != this._ts_transform) { - this._mo_handle = this._ts_transform; - this._ts_translate = ++iid$1; - } - if (this._aligned && this._parent && this._mo_align != this._parent._ts_transform) { - this._mo_align = this._parent._ts_transform; - this._ts_translate = ++iid$1; - } - return this; - }; - Pin2.prototype.toString = function() { - return this._owner + " (" + (this._parent ? this._parent._owner : null) + ")"; - }; - Pin2.prototype.absoluteMatrix = function() { - this._update(); - var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_matrix : 0); - if (this._mo_abs == ts) { - return this._absoluteMatrix; - } - this._mo_abs = ts; - var abs = this._absoluteMatrix; - abs.reset(this.relativeMatrix()); - this._parent && abs.concat(this._parent._absoluteMatrix); - this._ts_matrix = ++iid$1; - return abs; - }; - Pin2.prototype.relativeMatrix = function() { - this._update(); - var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_transform : 0); - if (this._mo_rel == ts) { - return this._relativeMatrix; - } - this._mo_rel = ts; - var rel = this._relativeMatrix; - rel.identity(); - if (this._pivoted) { - rel.translate(-this._pivotX * this._width, -this._pivotY * this._height); - } - rel.scale(this._scaleX, this._scaleY); - rel.skew(this._skewX, this._skewY); - rel.rotate(this._rotation); - if (this._pivoted) { - rel.translate(this._pivotX * this._width, this._pivotY * this._height); - } - if (this._pivoted) { - this._boxX = 0; - this._boxY = 0; - this._boxWidth = this._width; - this._boxHeight = this._height; + } else { + var p = void 0; + var q = void 0; + if (rel.a > 0 && rel.c > 0 || rel.a < 0 && rel.c < 0) { + p = 0; + q = rel.a * this._width + rel.c * this._height; } else { - var p = void 0; - var q = void 0; - if (rel.a > 0 && rel.c > 0 || rel.a < 0 && rel.c < 0) { - p = 0; - q = rel.a * this._width + rel.c * this._height; - } else { - p = rel.a * this._width; - q = rel.c * this._height; - } - if (p > q) { - this._boxX = q; - this._boxWidth = p - q; - } else { - this._boxX = p; - this._boxWidth = q - p; - } - if (rel.b > 0 && rel.d > 0 || rel.b < 0 && rel.d < 0) { - p = 0; - q = rel.b * this._width + rel.d * this._height; - } else { - p = rel.b * this._width; - q = rel.d * this._height; - } - if (p > q) { - this._boxY = q; - this._boxHeight = p - q; - } else { - this._boxY = p; - this._boxHeight = q - p; - } + p = rel.a * this._width; + q = rel.c * this._height; } - this._x = this._offsetX; - this._y = this._offsetY; - this._x -= this._boxX + this._handleX * this._boxWidth; - this._y -= this._boxY + this._handleY * this._boxHeight; - if (this._aligned && this._parent) { - this._parent.relativeMatrix(); - this._x += this._alignX * this._parent._width; - this._y += this._alignY * this._parent._height; + if (p > q) { + this._boxX = q; + this._boxWidth = p - q; + } else { + this._boxX = p; + this._boxWidth = q - p; } - rel.translate(this._x, this._y); - return this._relativeMatrix; - }; - Pin2.prototype.get = function(key) { - if (typeof getters[key] === "function") { - return getters[key](this); + if (rel.b > 0 && rel.d > 0 || rel.b < 0 && rel.d < 0) { + p = 0; + q = rel.b * this._width + rel.d * this._height; + } else { + p = rel.b * this._width; + q = rel.d * this._height; } - }; - Pin2.prototype.set = function(a, b) { - if (typeof a === "string") { - if (typeof setters[a] === "function" && typeof b !== "undefined") { - setters[a](this, b); - } - } else if (typeof a === "object") { - for (b in a) { - if (typeof setters[b] === "function" && typeof a[b] !== "undefined") { - setters[b](this, a[b], a); - } - } + if (p > q) { + this._boxY = q; + this._boxHeight = p - q; + } else { + this._boxY = p; + this._boxHeight = q - p; } - if (this._owner) { - this._owner._ts_pin = ++iid$1; - this._owner.touch(); + } + this._x = this._offsetX; + this._y = this._offsetY; + this._x -= this._boxX + this._handleX * this._boxWidth; + this._y -= this._boxY + this._handleY * this._boxHeight; + if (this._aligned && this._parent) { + this._parent.relativeMatrix(); + this._x += this._alignX * this._parent._width; + this._y += this._alignY * this._parent._height; + } + rel.translate(this._x, this._y); + return this._relativeMatrix; + }; + Pin2.prototype.get = function(key) { + if (typeof getters[key] === "function") { + return getters[key](this); + } + }; + Pin2.prototype.set = function(a2, b2) { + if (typeof a2 === "string") { + if (typeof setters[a2] === "function" && typeof b2 !== "undefined") { + setters[a2](this, b2); } - return this; - }; - Pin2.prototype.fit = function(width, height, mode) { - this._ts_transform = ++iid$1; - if (mode === "contain") { - mode = "in-pad"; - } - if (mode === "cover") { - mode = "out-crop"; - } - if (typeof width === "number") { - this._scaleX = width / this._unscaled_width; - this._width = this._unscaled_width; - } - if (typeof height === "number") { - this._scaleY = height / this._unscaled_height; - this._height = this._unscaled_height; - } - if (typeof width === "number" && typeof height === "number" && typeof mode === "string") { - if (mode === "fill") - ; - else if (mode === "out" || mode === "out-crop") { - this._scaleX = this._scaleY = Math.max(this._scaleX, this._scaleY); - } else if (mode === "in" || mode === "in-pad") { - this._scaleX = this._scaleY = Math.min(this._scaleX, this._scaleY); - } - if (mode === "out-crop" || mode === "in-pad") { - this._width = width / this._scaleX; - this._height = height / this._scaleY; + } else if (typeof a2 === "object") { + for (b2 in a2) { + if (typeof setters[b2] === "function" && typeof a2[b2] !== "undefined") { + setters[b2](this, a2[b2], a2); } } - }; - return Pin2; - }() - ); - var getters = { - alpha: function(pin) { - return pin._alpha; - }, - textureAlpha: function(pin) { - return pin._textureAlpha; - }, - width: function(pin) { - return pin._width; - }, - height: function(pin) { - return pin._height; - }, - boxWidth: function(pin) { - return pin._boxWidth; - }, - boxHeight: function(pin) { - return pin._boxHeight; - }, - // scale : function(pin: Pin) { - // }, - scaleX: function(pin) { - return pin._scaleX; - }, - scaleY: function(pin) { - return pin._scaleY; - }, - // skew : function(pin: Pin) { - // }, - skewX: function(pin) { - return pin._skewX; - }, - skewY: function(pin) { - return pin._skewY; - }, - rotation: function(pin) { - return pin._rotation; - }, - // pivot : function(pin: Pin) { - // }, - pivotX: function(pin) { - return pin._pivotX; - }, - pivotY: function(pin) { - return pin._pivotY; - }, - // offset : function(pin: Pin) { - // }, - offsetX: function(pin) { - return pin._offsetX; - }, - offsetY: function(pin) { - return pin._offsetY; - }, - // align : function(pin: Pin) { - // }, - alignX: function(pin) { - return pin._alignX; - }, - alignY: function(pin) { - return pin._alignY; - }, - // handle : function(pin: Pin) { - // }, - handleX: function(pin) { - return pin._handleX; - }, - handleY: function(pin) { - return pin._handleY; - } - }; - var setters = { - alpha: function(pin, value) { - pin._alpha = value; - }, - textureAlpha: function(pin, value) { - pin._textureAlpha = value; - }, - width: function(pin, value) { - pin._unscaled_width = value; - pin._width = value; - pin._ts_transform = ++iid$1; - }, - height: function(pin, value) { - pin._unscaled_height = value; - pin._height = value; - pin._ts_transform = ++iid$1; - }, - scale: function(pin, value) { - pin._scaleX = value; - pin._scaleY = value; - pin._ts_transform = ++iid$1; - }, - scaleX: function(pin, value) { - pin._scaleX = value; - pin._ts_transform = ++iid$1; - }, - scaleY: function(pin, value) { - pin._scaleY = value; - pin._ts_transform = ++iid$1; - }, - skew: function(pin, value) { - pin._skewX = value; - pin._skewY = value; - pin._ts_transform = ++iid$1; - }, - skewX: function(pin, value) { - pin._skewX = value; - pin._ts_transform = ++iid$1; - }, - skewY: function(pin, value) { - pin._skewY = value; - pin._ts_transform = ++iid$1; - }, - rotation: function(pin, value) { - pin._rotation = value; - pin._ts_transform = ++iid$1; - }, - pivot: function(pin, value) { - pin._pivotX = value; - pin._pivotY = value; - pin._pivoted = true; - pin._ts_transform = ++iid$1; - }, - pivotX: function(pin, value) { - pin._pivotX = value; - pin._pivoted = true; - pin._ts_transform = ++iid$1; - }, - pivotY: function(pin, value) { - pin._pivotY = value; - pin._pivoted = true; - pin._ts_transform = ++iid$1; - }, - offset: function(pin, value) { - pin._offsetX = value; - pin._offsetY = value; - pin._ts_translate = ++iid$1; - }, - offsetX: function(pin, value) { - pin._offsetX = value; - pin._ts_translate = ++iid$1; - }, - offsetY: function(pin, value) { - pin._offsetY = value; - pin._ts_translate = ++iid$1; - }, - align: function(pin, value) { - this.alignX(pin, value); - this.alignY(pin, value); - }, - alignX: function(pin, value) { - pin._alignX = value; - pin._aligned = true; - pin._ts_translate = ++iid$1; - this.handleX(pin, value); - }, - alignY: function(pin, value) { - pin._alignY = value; - pin._aligned = true; - pin._ts_translate = ++iid$1; - this.handleY(pin, value); - }, - handle: function(pin, value) { - this.handleX(pin, value); - this.handleY(pin, value); - }, - handleX: function(pin, value) { - pin._handleX = value; - pin._handled = true; - pin._ts_translate = ++iid$1; - }, - handleY: function(pin, value) { - pin._handleY = value; - pin._handled = true; - pin._ts_translate = ++iid$1; - }, - resizeMode: function(pin, value, all) { - if (all) { - if (value == "in") { - value = "in-pad"; - } else if (value == "out") { - value = "out-crop"; - } - pin.fit(all.resizeWidth, all.resizeHeight, value); - } - }, - resizeWidth: function(pin, value, all) { - if (!all || !all.resizeMode) { - pin.fit(value, null); - } - }, - resizeHeight: function(pin, value, all) { - if (!all || !all.resizeMode) { - pin.fit(null, value); - } - }, - scaleMode: function(pin, value, all) { - if (all) { - pin.fit(all.scaleWidth, all.scaleHeight, value); - } - }, - scaleWidth: function(pin, value, all) { - if (!all || !all.scaleMode) { - pin.fit(value, null); - } - }, - scaleHeight: function(pin, value, all) { - if (!all || !all.scaleMode) { - pin.fit(null, value); - } - }, - matrix: function(pin, value) { - this.scaleX(pin, value.a); - this.skewX(pin, value.c / value.d); - this.skewY(pin, value.b / value.a); - this.scaleY(pin, value.d); - this.offsetX(pin, value.e); - this.offsetY(pin, value.f); - this.rotation(pin, 0); - } - }; - function IDENTITY(x) { - return x; - } - var LOOKUP_CACHE = {}; - var MODE_BY_NAME = {}; - var EASE_BY_NAME = {}; - var Easing = ( - /** @class */ - function() { - function Easing2() { - } - Easing2.get = function(token, fallback) { - fallback = fallback || IDENTITY; - if (typeof token === "function") { - return token; - } - if (typeof token !== "string") { - return fallback; - } - var easeFn = LOOKUP_CACHE[token]; - if (easeFn) { - return easeFn; - } - var tokens = /^(\w+)(-(in|out|in-out|out-in))?(\((.*)\))?$/i.exec(token); - if (!tokens || !tokens.length) { - return fallback; - } - var easeName = tokens[1]; - var easing = EASE_BY_NAME[easeName]; - var modeName = tokens[3]; - var modeFn = MODE_BY_NAME[modeName]; - var params = tokens[5]; - if (!easing) { - easeFn = fallback; - } else if ("fn" in easing && typeof easing.fn === "function") { - easeFn = easing.fn; - } else if ("fc" in easing && typeof easing.fc === "function") { - var args = params ? params.replace(/\s+/, "").split(",") : void 0; - easeFn = easing.fc.apply(easing.fc, args); - } else { - easeFn = fallback; + } + if (this._owner) { + this._owner._ts_pin = ++iid$1; + this._owner.touch(); + } + return this; + }; + Pin2.prototype.fit = function(width, height, mode) { + this._ts_transform = ++iid$1; + if (mode === "contain") { + mode = "in-pad"; + } + if (mode === "cover") { + mode = "out-crop"; + } + if (typeof width === "number") { + this._scaleX = width / this._unscaled_width; + this._width = this._unscaled_width; + } + if (typeof height === "number") { + this._scaleY = height / this._unscaled_height; + this._height = this._unscaled_height; + } + if (typeof width === "number" && typeof height === "number" && typeof mode === "string") { + if (mode === "fill") + ; + else if (mode === "out" || mode === "out-crop") { + this._scaleX = this._scaleY = Math.max(this._scaleX, this._scaleY); + } else if (mode === "in" || mode === "in-pad") { + this._scaleX = this._scaleY = Math.min(this._scaleX, this._scaleY); } - if (modeFn) { - easeFn = modeFn(easeFn); + if (mode === "out-crop" || mode === "in-pad") { + this._width = width / this._scaleX; + this._height = height / this._scaleY; } - LOOKUP_CACHE[token] = easeFn; - return easeFn; - }; - return Easing2; - }() - ); - function addMode(name, fn) { - MODE_BY_NAME[name] = fn; - } - function addEaseFn(data) { - var names = data.name.split(/\s+/); - for (var i = 0; i < names.length; i++) { - var key = names[i]; - if (key) { - EASE_BY_NAME[key] = data; } - } - } - addMode("in", function(f) { - return f; - }); - addMode("out", function(f) { - return function(t) { - return 1 - f(1 - t); - }; - }); - addMode("in-out", function(f) { - return function(t) { - return t < 0.5 ? f(2 * t) / 2 : 1 - f(2 * (1 - t)) / 2; }; - }); - addMode("out-in", function(f) { - return function(t) { - return t < 0.5 ? 1 - f(2 * (1 - t)) / 2 : f(2 * t) / 2; - }; - }); - addEaseFn({ - name: "linear", - fn: function(t) { - return t; - } - }); - addEaseFn({ - name: "quad", - fn: function(t) { - return t * t; - } - }); - addEaseFn({ - name: "cubic", - fn: function(t) { - return t * t * t; - } - }); - addEaseFn({ - name: "quart", - fn: function(t) { - return t * t * t * t; - } - }); - addEaseFn({ - name: "quint", - fn: function(t) { - return t * t * t * t * t; - } - }); - addEaseFn({ - name: "sin sine", - fn: function(t) { - return 1 - Math.cos(t * Math.PI / 2); - } - }); - addEaseFn({ - name: "exp expo", - fn: function(t) { - return t == 0 ? 0 : Math.pow(2, 10 * (t - 1)); - } - }); - addEaseFn({ - name: "circle circ", - fn: function(t) { - return 1 - Math.sqrt(1 - t * t); + return Pin2; + }() + ); + var getters = { + alpha: function(pin) { + return pin._alpha; + }, + textureAlpha: function(pin) { + return pin._textureAlpha; + }, + width: function(pin) { + return pin._width; + }, + height: function(pin) { + return pin._height; + }, + boxWidth: function(pin) { + return pin._boxWidth; + }, + boxHeight: function(pin) { + return pin._boxHeight; + }, + // scale : function(pin: Pin) { + // }, + scaleX: function(pin) { + return pin._scaleX; + }, + scaleY: function(pin) { + return pin._scaleY; + }, + // skew : function(pin: Pin) { + // }, + skewX: function(pin) { + return pin._skewX; + }, + skewY: function(pin) { + return pin._skewY; + }, + rotation: function(pin) { + return pin._rotation; + }, + // pivot : function(pin: Pin) { + // }, + pivotX: function(pin) { + return pin._pivotX; + }, + pivotY: function(pin) { + return pin._pivotY; + }, + // offset : function(pin: Pin) { + // }, + offsetX: function(pin) { + return pin._offsetX; + }, + offsetY: function(pin) { + return pin._offsetY; + }, + // align : function(pin: Pin) { + // }, + alignX: function(pin) { + return pin._alignX; + }, + alignY: function(pin) { + return pin._alignY; + }, + // handle : function(pin: Pin) { + // }, + handleX: function(pin) { + return pin._handleX; + }, + handleY: function(pin) { + return pin._handleY; + } + }; + var setters = { + alpha: function(pin, value) { + pin._alpha = value; + }, + textureAlpha: function(pin, value) { + pin._textureAlpha = value; + }, + width: function(pin, value) { + pin._unscaled_width = value; + pin._width = value; + pin._ts_transform = ++iid$1; + }, + height: function(pin, value) { + pin._unscaled_height = value; + pin._height = value; + pin._ts_transform = ++iid$1; + }, + scale: function(pin, value) { + pin._scaleX = value; + pin._scaleY = value; + pin._ts_transform = ++iid$1; + }, + scaleX: function(pin, value) { + pin._scaleX = value; + pin._ts_transform = ++iid$1; + }, + scaleY: function(pin, value) { + pin._scaleY = value; + pin._ts_transform = ++iid$1; + }, + skew: function(pin, value) { + pin._skewX = value; + pin._skewY = value; + pin._ts_transform = ++iid$1; + }, + skewX: function(pin, value) { + pin._skewX = value; + pin._ts_transform = ++iid$1; + }, + skewY: function(pin, value) { + pin._skewY = value; + pin._ts_transform = ++iid$1; + }, + rotation: function(pin, value) { + pin._rotation = value; + pin._ts_transform = ++iid$1; + }, + pivot: function(pin, value) { + pin._pivotX = value; + pin._pivotY = value; + pin._pivoted = true; + pin._ts_transform = ++iid$1; + }, + pivotX: function(pin, value) { + pin._pivotX = value; + pin._pivoted = true; + pin._ts_transform = ++iid$1; + }, + pivotY: function(pin, value) { + pin._pivotY = value; + pin._pivoted = true; + pin._ts_transform = ++iid$1; + }, + offset: function(pin, value) { + pin._offsetX = value; + pin._offsetY = value; + pin._ts_translate = ++iid$1; + }, + offsetX: function(pin, value) { + pin._offsetX = value; + pin._ts_translate = ++iid$1; + }, + offsetY: function(pin, value) { + pin._offsetY = value; + pin._ts_translate = ++iid$1; + }, + align: function(pin, value) { + this.alignX(pin, value); + this.alignY(pin, value); + }, + alignX: function(pin, value) { + pin._alignX = value; + pin._aligned = true; + pin._ts_translate = ++iid$1; + this.handleX(pin, value); + }, + alignY: function(pin, value) { + pin._alignY = value; + pin._aligned = true; + pin._ts_translate = ++iid$1; + this.handleY(pin, value); + }, + handle: function(pin, value) { + this.handleX(pin, value); + this.handleY(pin, value); + }, + handleX: function(pin, value) { + pin._handleX = value; + pin._handled = true; + pin._ts_translate = ++iid$1; + }, + handleY: function(pin, value) { + pin._handleY = value; + pin._handled = true; + pin._ts_translate = ++iid$1; + }, + resizeMode: function(pin, value, all) { + if (all) { + if (value == "in") { + value = "in-pad"; + } else if (value == "out") { + value = "out-crop"; + } + pin.fit(all.resizeWidth, all.resizeHeight, value); } - }); - addEaseFn({ - name: "bounce", - fn: function(t) { - return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 : 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375; + }, + resizeWidth: function(pin, value, all) { + if (!all || !all.resizeMode) { + pin.fit(value, null); } - }); - addEaseFn({ - name: "poly", - fc: function(e) { - return function(t) { - return Math.pow(t, e); - }; + }, + resizeHeight: function(pin, value, all) { + if (!all || !all.resizeMode) { + pin.fit(null, value); } - }); - addEaseFn({ - name: "elastic", - fc: function(a, p) { - p = p || 0.45; - a = a || 1; - var s = p / (2 * Math.PI) * Math.asin(1 / a); - return function(t) { - return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p); - }; + }, + scaleMode: function(pin, value, all) { + if (all) { + pin.fit(all.scaleWidth, all.scaleHeight, value); } - }); - addEaseFn({ - name: "back", - fc: function(s) { - s = typeof s !== "undefined" ? s : 1.70158; - return function(t) { - return t * t * ((s + 1) * t - s); - }; + }, + scaleWidth: function(pin, value, all) { + if (!all || !all.scaleMode) { + pin.fit(value, null); } - }); - var Transition = ( - /** @class */ - function() { - function Transition2(owner, options) { - if (options === void 0) { - options = {}; - } - this.uid = "transition:" + uid(); - this._ending = []; - this._end = {}; - this._duration = options.duration || 400; - this._delay = options.delay || 0; - this._owner = owner; - this._time = 0; - } - Transition2.prototype.tick = function(node, elapsed, now, last) { - this._time += elapsed; - if (this._time < this._delay) { - return; - } - var time = this._time - this._delay; - if (!this._start) { - this._start = {}; - for (var key in this._end) { - this._start[key] = this._owner.pin(key); - } - } - var p = Math.min(time / this._duration, 1); - var ended = p >= 1; - if (typeof this._easing == "function") { - p = this._easing(p); - } - var q = 1 - p; - for (var key in this._end) { - this._owner.pin(key, this._start[key] * q + this._end[key] * p); - } - return ended; - }; - Transition2.prototype.finish = function() { - var _this = this; - this._ending.forEach(function(callback) { - try { - callback.call(_this._owner); - } catch (e) { - console.error(e); - } - }); - return this._next; - }; - Transition2.prototype.tween = function(a, b) { - var options; - if (typeof a === "object" && a !== null) { - options = a; - } else { - options = {}; - if (typeof a === "number") { - options.duration = a; - if (typeof b === "number") { - options.delay = b; - } - } - } - return this._next = new Transition2(this._owner, options); - }; - Transition2.prototype.duration = function(duration) { - this._duration = duration; - return this; - }; - Transition2.prototype.delay = function(delay) { - this._delay = delay; - return this; - }; - Transition2.prototype.ease = function(easing) { - this._easing = Easing.get(easing); - return this; - }; - Transition2.prototype.done = function(fn) { - this._ending.push(fn); - return this; - }; - Transition2.prototype.hide = function() { - this._ending.push(function() { - this.hide(); - }); - this._hide = true; - return this; - }; - Transition2.prototype.remove = function() { - this._ending.push(function() { - this.remove(); - }); - this._remove = true; - return this; - }; - Transition2.prototype.pin = function(a, b) { - if (typeof a === "object") { - for (var attr in a) { - pinning(this._owner, this._end, attr, a[attr]); - } - } else if (typeof b !== "undefined") { - pinning(this._owner, this._end, a, b); - } - return this; - }; - Transition2.prototype.then = function(fn) { - this.done(fn); - return this; - }; - Transition2.prototype.clear = function(forward) { - return this; - }; - Transition2.prototype.size = function(w, h) { - this.pin("width", w); - this.pin("height", h); - return this; - }; - Transition2.prototype.width = function(w) { - if (typeof w === "undefined") { - return this.pin("width"); - } - this.pin("width", w); - return this; - }; - Transition2.prototype.height = function(h) { - if (typeof h === "undefined") { - return this.pin("height"); - } - this.pin("height", h); - return this; - }; - Transition2.prototype.offset = function(a, b) { - if (typeof a === "object") { - b = a.y; - a = a.x; - } - this.pin("offsetX", a); - this.pin("offsetY", b); - return this; - }; - Transition2.prototype.rotate = function(a) { - this.pin("rotation", a); - return this; - }; - Transition2.prototype.skew = function(a, b) { - if (typeof a === "object") { - b = a.y; - a = a.x; - } else if (typeof b === "undefined") { - b = a; - } - this.pin("skewX", a); - this.pin("skewY", b); - return this; - }; - Transition2.prototype.scale = function(a, b) { - if (typeof a === "object") { - b = a.y; - a = a.x; - } else if (typeof b === "undefined") { - b = a; - } - this.pin("scaleX", a); - this.pin("scaleY", b); - return this; - }; - Transition2.prototype.alpha = function(a, ta) { - this.pin("alpha", a); - if (typeof ta !== "undefined") { - this.pin("textureAlpha", ta); - } - return this; - }; - return Transition2; - }() - ); - function pinning(node, map, key, value) { - if (typeof node.pin(key) === "number") { - map[key] = value; - } else if (typeof node.pin(key + "X") === "number" && typeof node.pin(key + "Y") === "number") { - map[key + "X"] = value; - map[key + "Y"] = value; + }, + scaleHeight: function(pin, value, all) { + if (!all || !all.scaleMode) { + pin.fit(null, value); } + }, + matrix: function(pin, value) { + this.scaleX(pin, value.a); + this.skewX(pin, value.c / value.d); + this.skewY(pin, value.b / value.a); + this.scaleY(pin, value.d); + this.offsetX(pin, value.e); + this.offsetY(pin, value.f); + this.rotation(pin, 0); } - var iid = 0; - stats.create = 0; - function assertType(obj) { - if (obj && obj instanceof Node) { - return obj; + }; + function IDENTITY(x2) { + return x2; + } + var LOOKUP_CACHE = {}; + var MODE_BY_NAME = {}; + var EASE_BY_NAME = {}; + var Easing = ( + /** @class */ + function() { + function Easing2() { + } + Easing2.get = function(token, fallback) { + fallback = fallback || IDENTITY; + if (typeof token === "function") { + return token; + } + if (typeof token !== "string") { + return fallback; + } + var easeFn = LOOKUP_CACHE[token]; + if (easeFn) { + return easeFn; + } + var tokens = /^(\w+)(-(in|out|in-out|out-in))?(\((.*)\))?$/i.exec(token); + if (!tokens || !tokens.length) { + return fallback; + } + var easeName = tokens[1]; + var easing = EASE_BY_NAME[easeName]; + var modeName = tokens[3]; + var modeFn = MODE_BY_NAME[modeName]; + var params = tokens[5]; + if (!easing) { + easeFn = fallback; + } else if ("fn" in easing && typeof easing.fn === "function") { + easeFn = easing.fn; + } else if ("fc" in easing && typeof easing.fc === "function") { + var args = params ? params.replace(/\s+/, "").split(",") : void 0; + easeFn = easing.fc.apply(easing.fc, args); + } else { + easeFn = fallback; + } + if (modeFn) { + easeFn = modeFn(easeFn); + } + LOOKUP_CACHE[token] = easeFn; + return easeFn; + }; + return Easing2; + }() + ); + function addMode(name, fn) { + MODE_BY_NAME[name] = fn; + } + function addEaseFn(data) { + var names = data.name.split(/\s+/); + for (var i = 0; i < names.length; i++) { + var key = names[i]; + if (key) { + EASE_BY_NAME[key] = data; } - throw "Invalid node: " + obj; } - function create() { - return layout(); + } + addMode("in", function(f) { + return f; + }); + addMode("out", function(f) { + return function(t) { + return 1 - f(1 - t); + }; + }); + addMode("in-out", function(f) { + return function(t) { + return t < 0.5 ? f(2 * t) / 2 : 1 - f(2 * (1 - t)) / 2; + }; + }); + addMode("out-in", function(f) { + return function(t) { + return t < 0.5 ? 1 - f(2 * (1 - t)) / 2 : f(2 * t) / 2; + }; + }); + addEaseFn({ + name: "linear", + fn: function(t) { + return t; } - function layer() { - return maximize(); + }); + addEaseFn({ + name: "quad", + fn: function(t) { + return t * t; } - function box() { - return minimize(); + }); + addEaseFn({ + name: "cubic", + fn: function(t) { + return t * t * t; } - function layout() { - return new Node(); + }); + addEaseFn({ + name: "quart", + fn: function(t) { + return t * t * t * t; } - function row(align) { - return layout().row(align).label("Row"); + }); + addEaseFn({ + name: "quint", + fn: function(t) { + return t * t * t * t * t; } - function column(align) { - return layout().column(align).label("Column"); + }); + addEaseFn({ + name: "sin sine", + fn: function(t) { + return 1 - Math.cos(t * Math.PI / 2); } - function minimize() { - return layout().minimize().label("Minimize"); + }); + addEaseFn({ + name: "exp expo", + fn: function(t) { + return t == 0 ? 0 : Math.pow(2, 10 * (t - 1)); } - function maximize() { - return layout().maximize().label("Maximize"); + }); + addEaseFn({ + name: "circle circ", + fn: function(t) { + return 1 - Math.sqrt(1 - t * t); } - var Node = ( - /** @class */ - function() { - function Node2() { - var _this = this; - this.uid = "node:" + uid(); - this._label = ""; - this._parent = null; - this._next = null; - this._prev = null; - this._first = null; - this._last = null; - this._visible = true; - this._alpha = 1; - this._padding = 0; - this._spacing = 0; - this._pin = new Pin(this); - this._listeners = {}; - this._attrs = {}; - this._flags = {}; - this._transitions = []; - this._tickBefore = []; - this._tickAfter = []; - this.MAX_ELAPSE = Infinity; - this._transitionTickInitied = false; - this._transitionTickLastTime = 0; - this._transitionTick = function(elapsed, now, last) { - if (!_this._transitions.length) { - return false; - } - var ignore = _this._transitionTickLastTime !== last; - _this._transitionTickLastTime = now; - if (ignore) { - return true; - } - var head = _this._transitions[0]; - var ended = head.tick(_this, elapsed, now, last); - if (ended) { - if (head === _this._transitions[0]) { - _this._transitions.shift(); - } - var next = head.finish(); - if (next) { - _this._transitions.unshift(next); - } - } - return true; - }; - stats.create++; - } - Node2.prototype.matrix = function(relative) { - if (relative === void 0) { - relative = false; + }); + addEaseFn({ + name: "bounce", + fn: function(t) { + return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 : 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375; + } + }); + addEaseFn({ + name: "poly", + fc: function(e3) { + return function(t) { + return Math.pow(t, e3); + }; + } + }); + addEaseFn({ + name: "elastic", + fc: function(a2, p) { + p = p || 0.45; + a2 = a2 || 1; + var s2 = p / (2 * Math.PI) * Math.asin(1 / a2); + return function(t) { + return 1 + a2 * Math.pow(2, -10 * t) * Math.sin((t - s2) * (2 * Math.PI) / p); + }; + } + }); + addEaseFn({ + name: "back", + fc: function(s2) { + s2 = typeof s2 !== "undefined" ? s2 : 1.70158; + return function(t) { + return t * t * ((s2 + 1) * t - s2); + }; + } + }); + var Transition = ( + /** @class */ + function() { + function Transition2(owner, options2) { + if (options2 === void 0) { + options2 = {}; + } + this.uid = "transition:" + uid(); + this._ending = []; + this._end = {}; + this._duration = options2.duration || 400; + this._delay = options2.delay || 0; + this._owner = owner; + this._time = 0; + } + Transition2.prototype.tick = function(node, elapsed, now2, last) { + this._time += elapsed; + if (this._time < this._delay) { + return; + } + var time = this._time - this._delay; + if (!this._start) { + this._start = {}; + for (var key in this._end) { + this._start[key] = this._owner.pin(key); } - if (relative === true) { - return this._pin.relativeMatrix(); + } + var p = Math.min(time / this._duration, 1); + var ended = p >= 1; + if (typeof this._easing == "function") { + p = this._easing(p); + } + var q = 1 - p; + for (var key in this._end) { + this._owner.pin(key, this._start[key] * q + this._end[key] * p); + } + return ended; + }; + Transition2.prototype.finish = function() { + var _this = this; + this._ending.forEach(function(callback) { + try { + callback.call(_this._owner); + } catch (e3) { + console.error(e3); } - return this._pin.absoluteMatrix(); - }; - Node2.prototype.getPixelRatio = function() { - var _a; - var m = (_a = this._parent) === null || _a === void 0 ? void 0 : _a.matrix(); - var pixelRatio = !m ? 1 : Math.max(Math.abs(m.a), Math.abs(m.b)) / getPixelRatio(); - return pixelRatio; - }; - Node2.prototype.pin = function(a, b) { - if (typeof a === "object") { - this._pin.set(a); - return this; - } else if (typeof a === "string") { - if (typeof b === "undefined") { - return this._pin.get(a); - } else { - this._pin.set(a, b); - return this; + }); + return this._next; + }; + Transition2.prototype.tween = function(a2, b2) { + var options2; + if (typeof a2 === "object" && a2 !== null) { + options2 = a2; + } else { + options2 = {}; + if (typeof a2 === "number") { + options2.duration = a2; + if (typeof b2 === "number") { + options2.delay = b2; } - } else if (typeof a === "undefined") { - return this._pin; - } - }; - Node2.prototype.fit = function(a, b, c) { - if (typeof a === "object") { - c = b; - b = a.y; - a = a.x; - } - this._pin.fit(a, b, c); - return this; - }; - Node2.prototype.scaleTo = function(a, b, c) { - return this.fit(a, b, c); - }; - Node2.prototype.toString = function() { - return "[" + this._label + "]"; - }; - Node2.prototype.id = function(id) { - return this.label(id); - }; - Node2.prototype.label = function(label) { - if (typeof label === "undefined") { - return this._label; - } - this._label = label; - return this; - }; - Node2.prototype.attr = function(name, value) { - if (typeof value === "undefined") { - return this._attrs !== null ? this._attrs[name] : void 0; - } - (this._attrs !== null ? this._attrs : this._attrs = {})[name] = value; - return this; - }; - Node2.prototype.visible = function(visible) { - if (typeof visible === "undefined") { - return this._visible; - } - this._visible = visible; - this._parent && (this._parent._ts_children = ++iid); - this._ts_pin = ++iid; - this.touch(); - return this; - }; - Node2.prototype.hide = function() { - this.visible(false); - return this; - }; - Node2.prototype.show = function() { - this.visible(true); - return this; - }; - Node2.prototype.parent = function() { - return this._parent; - }; - Node2.prototype.next = function(visible) { - var next = this._next; - while (next && visible && !next._visible) { - next = next._next; - } - return next; - }; - Node2.prototype.prev = function(visible) { - var prev = this._prev; - while (prev && visible && !prev._visible) { - prev = prev._prev; - } - return prev; - }; - Node2.prototype.first = function(visible) { - var next = this._first; - while (next && visible && !next._visible) { - next = next._next; - } - return next; - }; - Node2.prototype.last = function(visible) { - var prev = this._last; - while (prev && visible && !prev._visible) { - prev = prev._prev; } - return prev; - }; - Node2.prototype.visit = function(visitor, payload) { - var reverse = visitor.reverse; - var visible = visitor.visible; - if (visitor.start && visitor.start(this, payload)) { - return; + } + return this._next = new Transition2(this._owner, options2); + }; + Transition2.prototype.duration = function(duration) { + this._duration = duration; + return this; + }; + Transition2.prototype.delay = function(delay) { + this._delay = delay; + return this; + }; + Transition2.prototype.ease = function(easing) { + this._easing = Easing.get(easing); + return this; + }; + Transition2.prototype.done = function(fn) { + this._ending.push(fn); + return this; + }; + Transition2.prototype.hide = function() { + this._ending.push(function() { + this.hide(); + }); + this._hide = true; + return this; + }; + Transition2.prototype.remove = function() { + this._ending.push(function() { + this.remove(); + }); + this._remove = true; + return this; + }; + Transition2.prototype.pin = function(a2, b2) { + if (typeof a2 === "object") { + for (var attr in a2) { + pinning(this._owner, this._end, attr, a2[attr]); } - var child; - var next = reverse ? this.last(visible) : this.first(visible); - while (child = next) { - next = reverse ? child.prev(visible) : child.next(visible); - if (child.visit(visitor, payload)) { - return true; - } + } else if (typeof b2 !== "undefined") { + pinning(this._owner, this._end, a2, b2); + } + return this; + }; + Transition2.prototype.then = function(fn) { + this.done(fn); + return this; + }; + Transition2.prototype.clear = function(forward) { + return this; + }; + Transition2.prototype.size = function(w, h) { + this.pin("width", w); + this.pin("height", h); + return this; + }; + Transition2.prototype.width = function(w) { + if (typeof w === "undefined") { + return this.pin("width"); + } + this.pin("width", w); + return this; + }; + Transition2.prototype.height = function(h) { + if (typeof h === "undefined") { + return this.pin("height"); + } + this.pin("height", h); + return this; + }; + Transition2.prototype.offset = function(a2, b2) { + if (typeof a2 === "object") { + b2 = a2.y; + a2 = a2.x; + } + this.pin("offsetX", a2); + this.pin("offsetY", b2); + return this; + }; + Transition2.prototype.rotate = function(a2) { + this.pin("rotation", a2); + return this; + }; + Transition2.prototype.skew = function(a2, b2) { + if (typeof a2 === "object") { + b2 = a2.y; + a2 = a2.x; + } else if (typeof b2 === "undefined") { + b2 = a2; + } + this.pin("skewX", a2); + this.pin("skewY", b2); + return this; + }; + Transition2.prototype.scale = function(a2, b2) { + if (typeof a2 === "object") { + b2 = a2.y; + a2 = a2.x; + } else if (typeof b2 === "undefined") { + b2 = a2; + } + this.pin("scaleX", a2); + this.pin("scaleY", b2); + return this; + }; + Transition2.prototype.alpha = function(a2, ta) { + this.pin("alpha", a2); + if (typeof ta !== "undefined") { + this.pin("textureAlpha", ta); + } + return this; + }; + return Transition2; + }() + ); + function pinning(node, map, key, value) { + if (typeof node.pin(key) === "number") { + map[key] = value; + } else if (typeof node.pin(key + "X") === "number" && typeof node.pin(key + "Y") === "number") { + map[key + "X"] = value; + map[key + "Y"] = value; + } + } + var iid = 0; + stats.create = 0; + function assertType(obj) { + if (obj && obj instanceof Node) { + return obj; + } + throw "Invalid node: " + obj; + } + function layout() { + return new Node(); + } + var Node = ( + /** @class */ + function() { + function Node2() { + var _this = this; + this.uid = "node:" + uid(); + this._label = ""; + this._parent = null; + this._next = null; + this._prev = null; + this._first = null; + this._last = null; + this._visible = true; + this._alpha = 1; + this._padding = 0; + this._spacing = 0; + this._pin = new Pin(this); + this._listeners = {}; + this._attrs = {}; + this._flags = {}; + this._transitions = []; + this._tickBefore = []; + this._tickAfter = []; + this.MAX_ELAPSE = Infinity; + this._transitionTickInitied = false; + this._transitionTickLastTime = 0; + this._transitionTick = function(elapsed, now2, last) { + if (!_this._transitions.length) { + return false; } - return visitor.end && visitor.end(this, payload); - }; - Node2.prototype.append = function(child, more) { - if (Array.isArray(child)) { - for (var i = 0; i < child.length; i++) { - Node2.append(this, child[i]); - } - } else if (typeof more !== "undefined") { - for (var i = 0; i < arguments.length; i++) { - Node2.append(this, arguments[i]); - } - } else if (typeof child !== "undefined") - Node2.append(this, child); - return this; - }; - Node2.prototype.prepend = function(child, more) { - if (Array.isArray(child)) { - for (var i = child.length - 1; i >= 0; i--) { - Node2.prepend(this, child[i]); - } - } else if (typeof more !== "undefined") { - for (var i = arguments.length - 1; i >= 0; i--) { - Node2.prepend(this, arguments[i]); - } - } else if (typeof child !== "undefined") - Node2.prepend(this, child); - return this; - }; - Node2.prototype.appendTo = function(parent) { - Node2.append(parent, this); - return this; - }; - Node2.prototype.prependTo = function(parent) { - Node2.prepend(parent, this); - return this; - }; - Node2.prototype.insertNext = function(sibling, more) { - if (Array.isArray(sibling)) { - for (var i = 0; i < sibling.length; i++) { - Node2.insertAfter(sibling[i], this); - } - } else if (typeof more !== "undefined") { - for (var i = 0; i < arguments.length; i++) { - Node2.insertAfter(arguments[i], this); - } - } else if (typeof sibling !== "undefined") { - Node2.insertAfter(sibling, this); + var ignore = _this._transitionTickLastTime !== last; + _this._transitionTickLastTime = now2; + if (ignore) { + return true; } - return this; - }; - Node2.prototype.insertPrev = function(sibling, more) { - if (Array.isArray(sibling)) { - for (var i = sibling.length - 1; i >= 0; i--) { - Node2.insertBefore(sibling[i], this); + var head = _this._transitions[0]; + var ended = head.tick(_this, elapsed, now2, last); + if (ended) { + if (head === _this._transitions[0]) { + _this._transitions.shift(); } - } else if (typeof more !== "undefined") { - for (var i = arguments.length - 1; i >= 0; i--) { - Node2.insertBefore(arguments[i], this); + var next = head.finish(); + if (next) { + _this._transitions.unshift(next); } - } else if (typeof sibling !== "undefined") { - Node2.insertBefore(sibling, this); } - return this; - }; - Node2.prototype.insertAfter = function(prev) { - Node2.insertAfter(this, prev); - return this; + return true; }; - Node2.prototype.insertBefore = function(next) { - Node2.insertBefore(this, next); + stats.create++; + } + Node2.prototype.matrix = function(relative) { + if (relative === void 0) { + relative = false; + } + if (relative === true) { + return this._pin.relativeMatrix(); + } + return this._pin.absoluteMatrix(); + }; + Node2.prototype.getPixelRatio = function() { + var _a2; + var m = (_a2 = this._parent) === null || _a2 === void 0 ? void 0 : _a2.matrix(); + var pixelRatio = !m ? 1 : Math.max(Math.abs(m.a), Math.abs(m.b)) / getPixelRatio(); + return pixelRatio; + }; + Node2.prototype.pin = function(a2, b2) { + if (typeof a2 === "object") { + this._pin.set(a2); return this; - }; - Node2.append = function(parent, child) { - assertType(child); - assertType(parent); - child.remove(); - if (parent._last) { - parent._last._next = child; - child._prev = parent._last; - } - child._parent = parent; - parent._last = child; - if (!parent._first) { - parent._first = child; - } - child._parent._flag(child, true); - child._ts_parent = ++iid; - parent._ts_children = ++iid; - parent.touch(); - }; - Node2.prepend = function(parent, child) { - assertType(child); - assertType(parent); - child.remove(); - if (parent._first) { - parent._first._prev = child; - child._next = parent._first; - } - child._parent = parent; - parent._first = child; - if (!parent._last) { - parent._last = child; - } - child._parent._flag(child, true); - child._ts_parent = ++iid; - parent._ts_children = ++iid; - parent.touch(); - }; - Node2.insertBefore = function(self, next) { - assertType(self); - assertType(next); - self.remove(); - var parent = next._parent; - var prev = next._prev; - if (!parent) { - return; - } - next._prev = self; - prev && (prev._next = self) || parent && (parent._first = self); - self._parent = parent; - self._prev = prev; - self._next = next; - self._parent._flag(self, true); - self._ts_parent = ++iid; - self.touch(); - }; - Node2.insertAfter = function(self, prev) { - assertType(self); - assertType(prev); - self.remove(); - var parent = prev._parent; - var next = prev._next; - if (!parent) { - return; - } - prev._next = self; - next && (next._prev = self) || parent && (parent._last = self); - self._parent = parent; - self._prev = prev; - self._next = next; - self._parent._flag(self, true); - self._ts_parent = ++iid; - self.touch(); - }; - Node2.prototype.remove = function(child, more) { - if (typeof child !== "undefined") { - if (Array.isArray(child)) { - for (var i = 0; i < child.length; i++) { - assertType(child[i]).remove(); - } - } else if (typeof more !== "undefined") { - for (var i = 0; i < arguments.length; i++) { - assertType(arguments[i]).remove(); - } - } else { - assertType(child).remove(); - } + } else if (typeof a2 === "string") { + if (typeof b2 === "undefined") { + return this._pin.get(a2); + } else { + this._pin.set(a2, b2); return this; } - if (this._prev) { - this._prev._next = this._next; - } - if (this._next) { - this._next._prev = this._prev; - } - if (this._parent) { - if (this._parent._first === this) { - this._parent._first = this._next; - } - if (this._parent._last === this) { - this._parent._last = this._prev; - } - this._parent._flag(this, false); - this._parent._ts_children = ++iid; - this._parent.touch(); - } - this._prev = this._next = this._parent = null; - this._ts_parent = ++iid; - return this; - }; - Node2.prototype.empty = function() { - var child = null; - var next = this._first; - while (child = next) { - next = child._next; - child._prev = child._next = child._parent = null; - this._flag(child, false); - } - this._first = this._last = null; - this._ts_children = ++iid; - this.touch(); - return this; - }; - Node2.prototype.touch = function() { - this._ts_touch = ++iid; - this._parent && this._parent.touch(); - return this; - }; - Node2.prototype._flag = function(key, value) { - if (typeof value === "undefined") { - return this._flags !== null && this._flags[key] || 0; - } - if (typeof key === "string") { - if (value) { - this._flags = this._flags || {}; - if (!this._flags[key] && this._parent) { - this._parent._flag(key, true); - } - this._flags[key] = (this._flags[key] || 0) + 1; - } else if (this._flags && this._flags[key] > 0) { - if (this._flags[key] == 1 && this._parent) { - this._parent._flag(key, false); - } - this._flags[key] = this._flags[key] - 1; - } - } - if (typeof key === "object") { - if (key._flags) { - for (var type in key._flags) { - if (key._flags[type] > 0) { - this._flag(type, value); - } - } - } - } - return this; - }; - Node2.prototype.hitTest = function(hit) { - var width = this._pin._width; - var height = this._pin._height; - return hit.x >= 0 && hit.x <= width && hit.y >= 0 && hit.y <= height; - }; - Node2.prototype.prerender = function() { - if (!this._visible) { - return; + } else if (typeof a2 === "undefined") { + return this._pin; + } + }; + Node2.prototype.fit = function(a2, b2, c2) { + if (typeof a2 === "object") { + c2 = b2; + b2 = a2.y; + a2 = a2.x; + } + this._pin.fit(a2, b2, c2); + return this; + }; + Node2.prototype.scaleTo = function(a2, b2, c2) { + return this.fit(a2, b2, c2); + }; + Node2.prototype.toString = function() { + return "[" + this._label + "]"; + }; + Node2.prototype.id = function(id) { + return this.label(id); + }; + Node2.prototype.label = function(label) { + if (typeof label === "undefined") { + return this._label; + } + this._label = label; + return this; + }; + Node2.prototype.attr = function(name, value) { + if (typeof value === "undefined") { + return this._attrs !== null ? this._attrs[name] : void 0; + } + (this._attrs !== null ? this._attrs : this._attrs = {})[name] = value; + return this; + }; + Node2.prototype.visible = function(visible) { + if (typeof visible === "undefined") { + return this._visible; + } + this._visible = visible; + this._parent && (this._parent._ts_children = ++iid); + this._ts_pin = ++iid; + this.touch(); + return this; + }; + Node2.prototype.hide = function() { + this.visible(false); + return this; + }; + Node2.prototype.show = function() { + this.visible(true); + return this; + }; + Node2.prototype.parent = function() { + return this._parent; + }; + Node2.prototype.next = function(visible) { + var next = this._next; + while (next && visible && !next._visible) { + next = next._next; + } + return next; + }; + Node2.prototype.prev = function(visible) { + var prev = this._prev; + while (prev && visible && !prev._visible) { + prev = prev._prev; + } + return prev; + }; + Node2.prototype.first = function(visible) { + var next = this._first; + while (next && visible && !next._visible) { + next = next._next; + } + return next; + }; + Node2.prototype.last = function(visible) { + var prev = this._last; + while (prev && visible && !prev._visible) { + prev = prev._prev; + } + return prev; + }; + Node2.prototype.visit = function(visitor, payload) { + var reverse = visitor.reverse; + var visible = visitor.visible; + if (visitor.start && visitor.start(this, payload)) { + return; + } + var child; + var next = reverse ? this.last(visible) : this.first(visible); + while (child = next) { + next = reverse ? child.prev(visible) : child.next(visible); + if (child.visit(visitor, payload)) { + return true; } - var child; - var next = this._first; - while (child = next) { - next = child._next; - child.prerender(); + } + return visitor.end && visitor.end(this, payload); + }; + Node2.prototype.append = function(child, more) { + if (Array.isArray(child)) { + for (var i = 0; i < child.length; i++) { + Node2.append(this, child[i]); } - }; - Node2.prototype.render = function(context) { - if (!this._visible) { - return; + } else if (typeof more !== "undefined") { + for (var i = 0; i < arguments.length; i++) { + Node2.append(this, arguments[i]); } - stats.node++; - var m = this.matrix(); - context.setTransform(m.a, m.b, m.c, m.d, m.e, m.f); - this._alpha = this._pin._alpha * (this._parent ? this._parent._alpha : 1); - var alpha = this._pin._textureAlpha * this._alpha; - if (context.globalAlpha != alpha) { - context.globalAlpha = alpha; - } - if (this._textures) { - for (var i = 0, n = this._textures.length; i < n; i++) { - this._textures[i].draw(context); - } + } else if (typeof child !== "undefined") + Node2.append(this, child); + return this; + }; + Node2.prototype.prepend = function(child, more) { + if (Array.isArray(child)) { + for (var i = child.length - 1; i >= 0; i--) { + Node2.prepend(this, child[i]); } - if (context.globalAlpha != this._alpha) { - context.globalAlpha = this._alpha; + } else if (typeof more !== "undefined") { + for (var i = arguments.length - 1; i >= 0; i--) { + Node2.prepend(this, arguments[i]); } - var child; - var next = this._first; - while (child = next) { - next = child._next; - child.render(context); + } else if (typeof child !== "undefined") + Node2.prepend(this, child); + return this; + }; + Node2.prototype.appendTo = function(parent) { + Node2.append(parent, this); + return this; + }; + Node2.prototype.prependTo = function(parent) { + Node2.prepend(parent, this); + return this; + }; + Node2.prototype.insertNext = function(sibling, more) { + if (Array.isArray(sibling)) { + for (var i = 0; i < sibling.length; i++) { + Node2.insertAfter(sibling[i], this); } - }; - Node2.prototype._tick = function(elapsed, now, last) { - if (!this._visible) { - return; + } else if (typeof more !== "undefined") { + for (var i = 0; i < arguments.length; i++) { + Node2.insertAfter(arguments[i], this); } - if (elapsed > this.MAX_ELAPSE) { - elapsed = this.MAX_ELAPSE; + } else if (typeof sibling !== "undefined") { + Node2.insertAfter(sibling, this); + } + return this; + }; + Node2.prototype.insertPrev = function(sibling, more) { + if (Array.isArray(sibling)) { + for (var i = sibling.length - 1; i >= 0; i--) { + Node2.insertBefore(sibling[i], this); } - var ticked = false; - if (this._tickBefore !== null) { - for (var i = 0; i < this._tickBefore.length; i++) { - stats.tick++; - var tickFn = this._tickBefore[i]; - ticked = tickFn.call(this, elapsed, now, last) === true || ticked; - } + } else if (typeof more !== "undefined") { + for (var i = arguments.length - 1; i >= 0; i--) { + Node2.insertBefore(arguments[i], this); } - var child; - var next = this._first; - while (child = next) { - next = child._next; - if (child._flag("_tick")) { - ticked = child._tick(elapsed, now, last) === true ? true : ticked; + } else if (typeof sibling !== "undefined") { + Node2.insertBefore(sibling, this); + } + return this; + }; + Node2.prototype.insertAfter = function(prev) { + Node2.insertAfter(this, prev); + return this; + }; + Node2.prototype.insertBefore = function(next) { + Node2.insertBefore(this, next); + return this; + }; + Node2.append = function(parent, child) { + assertType(child); + assertType(parent); + child.remove(); + if (parent._last) { + parent._last._next = child; + child._prev = parent._last; + } + child._parent = parent; + parent._last = child; + if (!parent._first) { + parent._first = child; + } + child._parent._flag(child, true); + child._ts_parent = ++iid; + parent._ts_children = ++iid; + parent.touch(); + }; + Node2.prepend = function(parent, child) { + assertType(child); + assertType(parent); + child.remove(); + if (parent._first) { + parent._first._prev = child; + child._next = parent._first; + } + child._parent = parent; + parent._first = child; + if (!parent._last) { + parent._last = child; + } + child._parent._flag(child, true); + child._ts_parent = ++iid; + parent._ts_children = ++iid; + parent.touch(); + }; + Node2.insertBefore = function(self2, next) { + assertType(self2); + assertType(next); + self2.remove(); + var parent = next._parent; + var prev = next._prev; + if (!parent) { + return; + } + next._prev = self2; + prev && (prev._next = self2) || parent && (parent._first = self2); + self2._parent = parent; + self2._prev = prev; + self2._next = next; + self2._parent._flag(self2, true); + self2._ts_parent = ++iid; + self2.touch(); + }; + Node2.insertAfter = function(self2, prev) { + assertType(self2); + assertType(prev); + self2.remove(); + var parent = prev._parent; + var next = prev._next; + if (!parent) { + return; + } + prev._next = self2; + next && (next._prev = self2) || parent && (parent._last = self2); + self2._parent = parent; + self2._prev = prev; + self2._next = next; + self2._parent._flag(self2, true); + self2._ts_parent = ++iid; + self2.touch(); + }; + Node2.prototype.remove = function(child, more) { + if (typeof child !== "undefined") { + if (Array.isArray(child)) { + for (var i = 0; i < child.length; i++) { + assertType(child[i]).remove(); } - } - if (this._tickAfter !== null) { - for (var i = 0; i < this._tickAfter.length; i++) { - stats.tick++; - var tickFn = this._tickAfter[i]; - ticked = tickFn.call(this, elapsed, now, last) === true || ticked; + } else if (typeof more !== "undefined") { + for (var i = 0; i < arguments.length; i++) { + assertType(arguments[i]).remove(); } + } else { + assertType(child).remove(); } - return ticked; - }; - Node2.prototype.tick = function(callback, before) { - var _a, _b; - if (before === void 0) { - before = false; + return this; + } + if (this._prev) { + this._prev._next = this._next; + } + if (this._next) { + this._next._prev = this._prev; + } + if (this._parent) { + if (this._parent._first === this) { + this._parent._first = this._next; } - if (typeof callback !== "function") { - return; + if (this._parent._last === this) { + this._parent._last = this._prev; } - if (before) { - if (this._tickBefore === null) { - this._tickBefore = []; + this._parent._flag(this, false); + this._parent._ts_children = ++iid; + this._parent.touch(); + } + this._prev = this._next = this._parent = null; + this._ts_parent = ++iid; + return this; + }; + Node2.prototype.empty = function() { + var child = null; + var next = this._first; + while (child = next) { + next = child._next; + child._prev = child._next = child._parent = null; + this._flag(child, false); + } + this._first = this._last = null; + this._ts_children = ++iid; + this.touch(); + return this; + }; + Node2.prototype.touch = function() { + this._ts_touch = ++iid; + this._parent && this._parent.touch(); + return this; + }; + Node2.prototype._flag = function(key, value) { + if (typeof value === "undefined") { + return this._flags !== null && this._flags[key] || 0; + } + if (typeof key === "string") { + if (value) { + this._flags = this._flags || {}; + if (!this._flags[key] && this._parent) { + this._parent._flag(key, true); } - this._tickBefore.push(callback); - } else { - if (this._tickAfter === null) { - this._tickAfter = []; + this._flags[key] = (this._flags[key] || 0) + 1; + } else if (this._flags && this._flags[key] > 0) { + if (this._flags[key] == 1 && this._parent) { + this._parent._flag(key, false); } - this._tickAfter.push(callback); - } - var hasTickListener = ((_a = this._tickAfter) === null || _a === void 0 ? void 0 : _a.length) > 0 || ((_b = this._tickBefore) === null || _b === void 0 ? void 0 : _b.length) > 0; - this._flag("_tick", hasTickListener); - }; - Node2.prototype.untick = function(callback) { - if (typeof callback !== "function") { - return; - } - var i; - if (this._tickBefore !== null && (i = this._tickBefore.indexOf(callback)) >= 0) { - this._tickBefore.splice(i, 1); - } - if (this._tickAfter !== null && (i = this._tickAfter.indexOf(callback)) >= 0) { - this._tickAfter.splice(i, 1); + this._flags[key] = this._flags[key] - 1; } - }; - Node2.prototype.timeout = function(callback, time) { - this.setTimeout(callback, time); - }; - Node2.prototype.setTimeout = function(callback, time) { - function timer(t) { - if ((time -= t) < 0) { - this.untick(timer); - callback.call(this); - } else { - return true; + } + if (typeof key === "object") { + if (key._flags) { + for (var type in key._flags) { + if (key._flags[type] > 0) { + this._flag(type, value); + } } } - this.tick(timer); - return timer; - }; - Node2.prototype.clearTimeout = function(timer) { - this.untick(timer); - }; - Node2.prototype.on = function(type, listener) { - if (!type || !type.length || typeof listener !== "function") { - return this; - } - if (typeof type !== "string" && typeof type.join === "function") { - for (var i = 0; i < type.length; i++) { - this.on(type[i], listener); - } - } else if (typeof type === "string" && type.indexOf(" ") > -1) { - type = type.match(/\S+/g); - for (var i = 0; i < type.length; i++) { - this._on(type[i], listener); - } - } else if (typeof type === "string") { - this._on(type, listener); - } else - ; - return this; - }; - Node2.prototype._on = function(type, listener) { - if (typeof type !== "string" && typeof listener !== "function") { - return; + } + return this; + }; + Node2.prototype.hitTest = function(hit) { + var width = this._pin._width; + var height = this._pin._height; + return hit.x >= 0 && hit.x <= width && hit.y >= 0 && hit.y <= height; + }; + Node2.prototype.prerender = function() { + if (!this._visible) { + return; + } + var child; + var next = this._first; + while (child = next) { + next = child._next; + child.prerender(); + } + }; + Node2.prototype.render = function(context) { + if (!this._visible) { + return; + } + stats.node++; + var m = this.matrix(); + context.setTransform(m.a, m.b, m.c, m.d, m.e, m.f); + this._alpha = this._pin._alpha * (this._parent ? this._parent._alpha : 1); + var alpha = this._pin._textureAlpha * this._alpha; + if (context.globalAlpha != alpha) { + context.globalAlpha = alpha; + } + if (this._textures) { + for (var i = 0, n2 = this._textures.length; i < n2; i++) { + this._textures[i].draw(context); } - this._listeners[type] = this._listeners[type] || []; - this._listeners[type].push(listener); - this._flag(type, true); - }; - Node2.prototype.off = function(type, listener) { - if (!type || !type.length || typeof listener !== "function") { - return this; + } + if (context.globalAlpha != this._alpha) { + context.globalAlpha = this._alpha; + } + var child; + var next = this._first; + while (child = next) { + next = child._next; + child.render(context); + } + }; + Node2.prototype._tick = function(elapsed, now2, last) { + if (!this._visible) { + return; + } + if (elapsed > this.MAX_ELAPSE) { + elapsed = this.MAX_ELAPSE; + } + var ticked = false; + if (this._tickBefore !== null) { + for (var i = 0; i < this._tickBefore.length; i++) { + stats.tick++; + var tickFn = this._tickBefore[i]; + ticked = tickFn.call(this, elapsed, now2, last) === true || ticked; } - if (typeof type !== "string" && typeof type.join === "function") { - for (var i = 0; i < type.length; i++) { - this.off(type[i], listener); - } - } else if (typeof type === "string" && type.indexOf(" ") > -1) { - type = type.match(/\S+/g); - for (var i = 0; i < type.length; i++) { - this._off(type[i], listener); - } - } else if (typeof type === "string") { - this._off(type, listener); - } else - ; - return this; - }; - Node2.prototype._off = function(type, listener) { - if (typeof type !== "string" && typeof listener !== "function") { - return; + } + var child; + var next = this._first; + while (child = next) { + next = child._next; + if (child._flag("_tick")) { + ticked = child._tick(elapsed, now2, last) === true ? true : ticked; } - var listeners = this._listeners[type]; - if (!listeners || !listeners.length) { - return; + } + if (this._tickAfter !== null) { + for (var i = 0; i < this._tickAfter.length; i++) { + stats.tick++; + var tickFn = this._tickAfter[i]; + ticked = tickFn.call(this, elapsed, now2, last) === true || ticked; } - var index = listeners.indexOf(listener); - if (index >= 0) { - listeners.splice(index, 1); - this._flag(type, false); + } + return ticked; + }; + Node2.prototype.tick = function(callback, before) { + var _a2, _b; + if (before === void 0) { + before = false; + } + if (typeof callback !== "function") { + return; + } + if (before) { + if (this._tickBefore === null) { + this._tickBefore = []; } - }; - Node2.prototype.listeners = function(type) { - return this._listeners[type]; - }; - Node2.prototype.publish = function(name, args) { - var listeners = this.listeners(name); - if (!listeners || !listeners.length) { - return 0; + this._tickBefore.push(callback); + } else { + if (this._tickAfter === null) { + this._tickAfter = []; } - for (var l = 0; l < listeners.length; l++) { - listeners[l].apply(this, args); + this._tickAfter.push(callback); + } + var hasTickListener = ((_a2 = this._tickAfter) === null || _a2 === void 0 ? void 0 : _a2.length) > 0 || ((_b = this._tickBefore) === null || _b === void 0 ? void 0 : _b.length) > 0; + this._flag("_tick", hasTickListener); + }; + Node2.prototype.untick = function(callback) { + if (typeof callback !== "function") { + return; + } + var i; + if (this._tickBefore !== null && (i = this._tickBefore.indexOf(callback)) >= 0) { + this._tickBefore.splice(i, 1); + } + if (this._tickAfter !== null && (i = this._tickAfter.indexOf(callback)) >= 0) { + this._tickAfter.splice(i, 1); + } + }; + Node2.prototype.timeout = function(callback, time) { + this.setTimeout(callback, time); + }; + Node2.prototype.setTimeout = function(callback, time) { + function timer(t) { + if ((time -= t) < 0) { + this.untick(timer); + callback.call(this); + } else { + return true; } - return listeners.length; - }; - Node2.prototype.trigger = function(name, args) { - this.publish(name, args); - return this; - }; - Node2.prototype.size = function(w, h) { - this.pin("width", w); - this.pin("height", h); + } + this.tick(timer); + return timer; + }; + Node2.prototype.clearTimeout = function(timer) { + this.untick(timer); + }; + Node2.prototype.on = function(type, listener) { + if (!type || !type.length || typeof listener !== "function") { return this; - }; - Node2.prototype.width = function(w) { - if (typeof w === "undefined") { - return this.pin("width"); + } + if (typeof type !== "string" && typeof type.join === "function") { + for (var i = 0; i < type.length; i++) { + this.on(type[i], listener); } - this.pin("width", w); - return this; - }; - Node2.prototype.height = function(h) { - if (typeof h === "undefined") { - return this.pin("height"); + } else if (typeof type === "string" && type.indexOf(" ") > -1) { + type = type.match(/\S+/g); + for (var i = 0; i < type.length; i++) { + this._on(type[i], listener); } - this.pin("height", h); + } else if (typeof type === "string") { + this._on(type, listener); + } else + ; + return this; + }; + Node2.prototype._on = function(type, listener) { + if (typeof type !== "string" && typeof listener !== "function") { + return; + } + this._listeners[type] = this._listeners[type] || []; + this._listeners[type].push(listener); + this._flag(type, true); + }; + Node2.prototype.off = function(type, listener) { + if (!type || !type.length || typeof listener !== "function") { return this; - }; - Node2.prototype.offset = function(a, b) { - if (typeof a === "object") { - b = a.y; - a = a.x; + } + if (typeof type !== "string" && typeof type.join === "function") { + for (var i = 0; i < type.length; i++) { + this.off(type[i], listener); } - this.pin("offsetX", a); - this.pin("offsetY", b); - return this; - }; - Node2.prototype.rotate = function(a) { - this.pin("rotation", a); - return this; - }; - Node2.prototype.skew = function(a, b) { - if (typeof a === "object") { - b = a.y; - a = a.x; - } else if (typeof b === "undefined") - b = a; - this.pin("skewX", a); - this.pin("skewY", b); - return this; - }; - Node2.prototype.scale = function(a, b) { - if (typeof a === "object") { - b = a.y; - a = a.x; - } else if (typeof b === "undefined") - b = a; - this.pin("scaleX", a); - this.pin("scaleY", b); - return this; - }; - Node2.prototype.alpha = function(a, ta) { - this.pin("alpha", a); - if (typeof ta !== "undefined") { - this.pin("textureAlpha", ta); + } else if (typeof type === "string" && type.indexOf(" ") > -1) { + type = type.match(/\S+/g); + for (var i = 0; i < type.length; i++) { + this._off(type[i], listener); } - return this; - }; - Node2.prototype.tween = function(a, b, c) { - var options; - if (typeof a === "object" && a !== null) { - options = a; - } else { - options = {}; - if (typeof a === "number") { - options.duration = a; - if (typeof b === "number") { - options.delay = b; - if (typeof c === "boolean") { - options.append = c; - } - } else if (typeof b === "boolean") { - options.append = b; + } else if (typeof type === "string") { + this._off(type, listener); + } else + ; + return this; + }; + Node2.prototype._off = function(type, listener) { + if (typeof type !== "string" && typeof listener !== "function") { + return; + } + var listeners = this._listeners[type]; + if (!listeners || !listeners.length) { + return; + } + var index = listeners.indexOf(listener); + if (index >= 0) { + listeners.splice(index, 1); + this._flag(type, false); + } + }; + Node2.prototype.listeners = function(type) { + return this._listeners[type]; + }; + Node2.prototype.publish = function(name, args) { + var listeners = this.listeners(name); + if (!listeners || !listeners.length) { + return 0; + } + for (var l = 0; l < listeners.length; l++) { + listeners[l].apply(this, args); + } + return listeners.length; + }; + Node2.prototype.trigger = function(name, args) { + this.publish(name, args); + return this; + }; + Node2.prototype.size = function(w, h) { + this.pin("width", w); + this.pin("height", h); + return this; + }; + Node2.prototype.width = function(w) { + if (typeof w === "undefined") { + return this.pin("width"); + } + this.pin("width", w); + return this; + }; + Node2.prototype.height = function(h) { + if (typeof h === "undefined") { + return this.pin("height"); + } + this.pin("height", h); + return this; + }; + Node2.prototype.offset = function(a2, b2) { + if (typeof a2 === "object") { + b2 = a2.y; + a2 = a2.x; + } + this.pin("offsetX", a2); + this.pin("offsetY", b2); + return this; + }; + Node2.prototype.rotate = function(a2) { + this.pin("rotation", a2); + return this; + }; + Node2.prototype.skew = function(a2, b2) { + if (typeof a2 === "object") { + b2 = a2.y; + a2 = a2.x; + } else if (typeof b2 === "undefined") + b2 = a2; + this.pin("skewX", a2); + this.pin("skewY", b2); + return this; + }; + Node2.prototype.scale = function(a2, b2) { + if (typeof a2 === "object") { + b2 = a2.y; + a2 = a2.x; + } else if (typeof b2 === "undefined") + b2 = a2; + this.pin("scaleX", a2); + this.pin("scaleY", b2); + return this; + }; + Node2.prototype.alpha = function(a2, ta) { + this.pin("alpha", a2); + if (typeof ta !== "undefined") { + this.pin("textureAlpha", ta); + } + return this; + }; + Node2.prototype.tween = function(a2, b2, c2) { + var options2; + if (typeof a2 === "object" && a2 !== null) { + options2 = a2; + } else { + options2 = {}; + if (typeof a2 === "number") { + options2.duration = a2; + if (typeof b2 === "number") { + options2.delay = b2; + if (typeof c2 === "boolean") { + options2.append = c2; } - } else if (typeof a === "boolean") { - options.append = a; + } else if (typeof b2 === "boolean") { + options2.append = b2; } + } else if (typeof a2 === "boolean") { + options2.append = a2; } - if (!this._transitionTickInitied) { - this.tick(this._transitionTick, true); - this._transitionTickInitied = true; - } - this.touch(); - if (!options.append) { - this._transitions.length = 0; + } + if (!this._transitionTickInitied) { + this.tick(this._transitionTick, true); + this._transitionTickInitied = true; + } + this.touch(); + if (!options2.append) { + this._transitions.length = 0; + } + var transition = new Transition(this, options2); + this._transitions.push(transition); + return transition; + }; + Node2.prototype.row = function(align) { + this.align("row", align); + return this; + }; + Node2.prototype.column = function(align) { + this.align("column", align); + return this; + }; + Node2.prototype.align = function(type, align) { + var _this = this; + this._padding = this._padding; + this._spacing = this._spacing; + this._layoutTicker && this.untick(this._layoutTicker); + this.tick(this._layoutTicker = function() { + if (_this._mo_seq == _this._ts_touch) { + return; } - var transition = new Transition(this, options); - this._transitions.push(transition); - return transition; - }; - Node2.prototype.row = function(align) { - this.align("row", align); - return this; - }; - Node2.prototype.column = function(align) { - this.align("column", align); - return this; - }; - Node2.prototype.align = function(type, align) { - var _this = this; - this._padding = this._padding; - this._spacing = this._spacing; - this._layoutTicker && this.untick(this._layoutTicker); - this.tick(this._layoutTicker = function() { - if (_this._mo_seq == _this._ts_touch) { - return; - } - _this._mo_seq = _this._ts_touch; - var alignChildren = _this._mo_seqAlign != _this._ts_children; - _this._mo_seqAlign = _this._ts_children; - var width = 0; - var height = 0; - var child; - var next = _this.first(true); - var first = true; - while (child = next) { - next = child.next(true); - child.matrix(true); - var w = child.pin("boxWidth"); - var h = child.pin("boxHeight"); - if (type == "column") { - !first && (height += _this._spacing); - child.pin("offsetY") != height && child.pin("offsetY", height); - width = Math.max(width, w); - height = height + h; - alignChildren && child.pin("alignX", align); - } else if (type == "row") { - !first && (width += _this._spacing); - child.pin("offsetX") != width && child.pin("offsetX", width); - width = width + w; - height = Math.max(height, h); - alignChildren && child.pin("alignY", align); - } - first = false; - } - width += 2 * _this._padding; - height += 2 * _this._padding; - _this.pin("width") != width && _this.pin("width", width); - _this.pin("height") != height && _this.pin("height", height); - }); - return this; - }; - Node2.prototype.box = function() { - return this.minimize(); - }; - Node2.prototype.layer = function() { - return this.maximize(); - }; - Node2.prototype.minimize = function() { - var _this = this; - this._padding = this._padding; - this._layoutTicker && this.untick(this._layoutTicker); - this.tick(this._layoutTicker = function() { - if (_this._mo_box == _this._ts_touch) { - return; - } - _this._mo_box = _this._ts_touch; - var width = 0; - var height = 0; - var child; - var next = _this.first(true); - while (child = next) { - next = child.next(true); - child.matrix(true); - var w = child.pin("boxWidth"); - var h = child.pin("boxHeight"); + _this._mo_seq = _this._ts_touch; + var alignChildren = _this._mo_seqAlign != _this._ts_children; + _this._mo_seqAlign = _this._ts_children; + var width = 0; + var height = 0; + var child; + var next = _this.first(true); + var first = true; + while (child = next) { + next = child.next(true); + child.matrix(true); + var w = child.pin("boxWidth"); + var h = child.pin("boxHeight"); + if (type == "column") { + !first && (height += _this._spacing); + child.pin("offsetY") != height && child.pin("offsetY", height); width = Math.max(width, w); + height = height + h; + alignChildren && child.pin("alignX", align); + } else if (type == "row") { + !first && (width += _this._spacing); + child.pin("offsetX") != width && child.pin("offsetX", width); + width = width + w; height = Math.max(height, h); + alignChildren && child.pin("alignY", align); } - width += 2 * _this._padding; - height += 2 * _this._padding; - _this.pin("width") != width && _this.pin("width", width); - _this.pin("height") != height && _this.pin("height", height); - }); - return this; - }; - Node2.prototype.maximize = function() { - var _this = this; - this._layoutTicker && this.untick(this._layoutTicker); - this.tick(this._layoutTicker = function() { - var parent = _this.parent(); - if (parent) { - var width = parent.pin("width"); - if (_this.pin("width") != width) { - _this.pin("width", width); - } - var height = parent.pin("height"); - if (_this.pin("height") != height) { - _this.pin("height", height); - } - } - }, true); - return this; - }; - Node2.prototype.padding = function(pad) { - this._padding = pad; - return this; - }; - Node2.prototype.spacing = function(space) { - this._spacing = space; - return this; - }; - return Node2; - }() - ); - var __extends$4 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); - }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { - this.constructor = d; - } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - }(); - function sprite(frame) { - var sprite2 = new Sprite(); - frame && sprite2.texture(frame); - return sprite2; - } - var Sprite = ( - /** @class */ - function(_super) { - __extends$4(Sprite2, _super); - function Sprite2() { - var _this = _super.call(this) || this; - _this._tiled = false; - _this._stretched = false; - _this.prerenderContext = {}; - _this.label("Sprite"); - _this._textures = []; - _this._image = null; - return _this; - } - Sprite2.prototype.texture = function(frame) { - this._image = texture(frame).one(); - if (this._image) { - this.pin("width", this._image.getWidth()); - this.pin("height", this._image.getHeight()); - if (this._tiled) { - this._textures[0] = new ResizableTexture(this._image, "tile"); - } else if (this._stretched) { - this._textures[0] = new ResizableTexture(this._image, "stretch"); - } else { - this._textures[0] = new PipeTexture(this._image); - } - this._textures.length = 1; + first = false; + } + width += 2 * _this._padding; + height += 2 * _this._padding; + _this.pin("width") != width && _this.pin("width", width); + _this.pin("height") != height && _this.pin("height", height); + }); + return this; + }; + Node2.prototype.box = function() { + return this.minimize(); + }; + Node2.prototype.layer = function() { + return this.maximize(); + }; + Node2.prototype.minimize = function() { + var _this = this; + this._padding = this._padding; + this._layoutTicker && this.untick(this._layoutTicker); + this.tick(this._layoutTicker = function() { + if (_this._mo_box == _this._ts_touch) { + return; + } + _this._mo_box = _this._ts_touch; + var width = 0; + var height = 0; + var child; + var next = _this.first(true); + while (child = next) { + next = child.next(true); + child.matrix(true); + var w = child.pin("boxWidth"); + var h = child.pin("boxHeight"); + width = Math.max(width, w); + height = Math.max(height, h); + } + width += 2 * _this._padding; + height += 2 * _this._padding; + _this.pin("width") != width && _this.pin("width", width); + _this.pin("height") != height && _this.pin("height", height); + }); + return this; + }; + Node2.prototype.maximize = function() { + var _this = this; + this._layoutTicker && this.untick(this._layoutTicker); + this.tick(this._layoutTicker = function() { + var parent = _this.parent(); + if (parent) { + var width = parent.pin("width"); + if (_this.pin("width") != width) { + _this.pin("width", width); + } + var height = parent.pin("height"); + if (_this.pin("height") != height) { + _this.pin("height", height); + } + } + }, true); + return this; + }; + Node2.prototype.padding = function(pad) { + this._padding = pad; + return this; + }; + Node2.prototype.spacing = function(space) { + this._spacing = space; + return this; + }; + return Node2; + }() + ); + var __extends$4 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); + }; + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); + function __() { + this.constructor = d2; + } + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); + }; + }(); + function sprite(frame) { + var sprite2 = new Sprite(); + frame && sprite2.texture(frame); + return sprite2; + } + var Sprite = ( + /** @class */ + function(_super) { + __extends$4(Sprite2, _super); + function Sprite2() { + var _this = _super.call(this) || this; + _this._tiled = false; + _this._stretched = false; + _this.prerenderContext = {}; + _this.label("Sprite"); + _this._textures = []; + _this._image = null; + return _this; + } + Sprite2.prototype.texture = function(frame) { + this._image = texture(frame).one(); + if (this._image) { + this.pin("width", this._image.getWidth()); + this.pin("height", this._image.getHeight()); + if (this._tiled) { + this._textures[0] = new ResizableTexture(this._image, "tile"); + } else if (this._stretched) { + this._textures[0] = new ResizableTexture(this._image, "stretch"); } else { - this.pin("width", 0); - this.pin("height", 0); - this._textures.length = 0; + this._textures[0] = new PipeTexture(this._image); + } + this._textures.length = 1; + } else { + this.pin("width", 0); + this.pin("height", 0); + this._textures.length = 0; + } + return this; + }; + Sprite2.prototype.image = function(frame) { + return this.texture(frame); + }; + Sprite2.prototype.tile = function(inner) { + this._tiled = true; + var texture2 = new ResizableTexture(this._image, "tile"); + this._textures[0] = texture2; + return this; + }; + Sprite2.prototype.stretch = function(inner) { + this._stretched = true; + var texture2 = new ResizableTexture(this._image, "stretch"); + this._textures[0] = texture2; + return this; + }; + Sprite2.prototype.prerender = function() { + if (!this._visible) { + return; + } + if (this._image) { + var pixelRatio = this.getPixelRatio(); + this.prerenderContext.pixelRatio = pixelRatio; + var updated = this._image.prerender(this.prerenderContext); + if (updated === true) { + var w = this._image.getWidth(); + var h = this._image.getHeight(); + this.size(w, h); + } + } + _super.prototype.prerender.call(this); + }; + Sprite2.prototype.render = function(context) { + var texture2 = this._textures[0]; + if (texture2 === null || texture2 === void 0 ? void 0 : texture2["_resizeMode"]) { + texture2.dw = this.pin("width"); + texture2.dh = this.pin("height"); + } + _super.prototype.render.call(this, context); + }; + return Sprite2; + }(Node) + ); + var __extends$3 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); + }; + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); + function __() { + this.constructor = d2; + } + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); + }; + }(); + var CanvasTexture = ( + /** @class */ + function(_super) { + __extends$3(CanvasTexture2, _super); + function CanvasTexture2() { + var _this = _super.call(this, document.createElement("canvas")) || this; + _this._lastPixelRatio = 0; + return _this; + } + CanvasTexture2.prototype.setSize = function(textureWidth, textureHeight, pixelRatio) { + if (pixelRatio === void 0) { + pixelRatio = 1; + } + this._source.width = textureWidth * pixelRatio; + this._source.height = textureHeight * pixelRatio; + this._pixelRatio = pixelRatio; + }; + CanvasTexture2.prototype.getContext = function(type, attributes) { + if (type === void 0) { + type = "2d"; + } + return this._source.getContext(type, attributes); + }; + CanvasTexture2.prototype.getOptimalPixelRatio = function() { + return Math.ceil(this._lastPixelRatio); + }; + CanvasTexture2.prototype.setMemoizer = function(memoizer) { + this._memoizer = memoizer; + }; + CanvasTexture2.prototype.setDrawer = function(drawer) { + this._drawer = drawer; + }; + CanvasTexture2.prototype.prerender = function(context) { + var newPixelRatio = context.pixelRatio; + var lastPixelRatio = this._lastPixelRatio; + var pixelRationChange = lastPixelRatio / newPixelRatio; + var pixelRatioChanged = lastPixelRatio === 0 || pixelRationChange > 1.25 || pixelRationChange < 0.8; + if (pixelRatioChanged) { + this._lastPixelRatio = newPixelRatio; + } + var newMemoKey = this._memoizer ? this._memoizer.call(this) : null; + var memoKeyChanged = this._lastMemoKey !== newMemoKey; + if (pixelRatioChanged || memoKeyChanged) { + this._lastMemoKey = newMemoKey; + this._lastPixelRatio = newPixelRatio; + if (typeof this._drawer === "function") { + this._drawer.call(this); + } + return true; + } + }; + CanvasTexture2.prototype.size = function(width, height, pixelRatio) { + this.setSize(width, height, pixelRatio); + return this; + }; + CanvasTexture2.prototype.context = function(type, attributes) { + if (type === void 0) { + type = "2d"; + } + return this.getContext(type, attributes); + }; + CanvasTexture2.prototype.canvas = function(legacyTextureDrawer) { + if (typeof legacyTextureDrawer === "function") { + legacyTextureDrawer.call(this, this.getContext()); + } else if (typeof legacyTextureDrawer === "undefined") { + if (typeof this._drawer === "function") { + this._drawer.call(this); } - return this; - }; - Sprite2.prototype.image = function(frame) { - return this.texture(frame); - }; - Sprite2.prototype.tile = function(inner) { - this._tiled = true; - var texture2 = new ResizableTexture(this._image, "tile"); - this._textures[0] = texture2; - return this; - }; - Sprite2.prototype.stretch = function(inner) { - this._stretched = true; - var texture2 = new ResizableTexture(this._image, "stretch"); - this._textures[0] = texture2; - return this; - }; - Sprite2.prototype.prerender = function() { - if (!this._visible) { + } + return this; + }; + return CanvasTexture2; + }(ImageTexture) + ); + function canvas(type, attributes, legacyTextureDrawer) { + if (typeof type === "function") { + var texture_1 = new CanvasTexture(); + legacyTextureDrawer = type; + texture_1.setDrawer(function() { + legacyTextureDrawer.call(texture_1, texture_1.getContext()); + }); + return texture_1; + } else if (typeof attributes === "function") { + var texture_2 = new CanvasTexture(); + legacyTextureDrawer = attributes; + texture_2.setDrawer(function() { + legacyTextureDrawer.call(texture_2, texture_2.getContext(type)); + }); + return texture_2; + } else if (typeof legacyTextureDrawer === "function") { + var texture_3 = new CanvasTexture(); + texture_3.setDrawer(function() { + legacyTextureDrawer.call(texture_3, texture_3.getContext(type, attributes)); + }); + return texture_3; + } else { + var texture2 = new CanvasTexture(); + return texture2; + } + } + var POINTER_START = "touchstart mousedown"; + var POINTER_MOVE = "touchmove mousemove"; + var POINTER_END = "touchend mouseup"; + var POINTER_CANCEL = "touchcancel mousecancel"; + var EventPoint = ( + /** @class */ + function() { + function EventPoint2() { + } + EventPoint2.prototype.clone = function(obj) { + if (obj) { + obj.x = this.x; + obj.y = this.y; + } else { + obj = { + x: this.x, + y: this.y + }; + } + return obj; + }; + EventPoint2.prototype.toString = function() { + return (this.x | 0) + "x" + (this.y | 0); + }; + return EventPoint2; + }() + ); + var PointerSyntheticEvent = ( + /** @class */ + function() { + function PointerSyntheticEvent2() { + this.abs = new EventPoint(); + } + PointerSyntheticEvent2.prototype.clone = function(obj) { + if (obj) { + obj.x = this.x; + obj.y = this.y; + } else { + obj = { + x: this.x, + y: this.y + }; + } + return obj; + }; + PointerSyntheticEvent2.prototype.toString = function() { + return this.type + ": " + (this.x | 0) + "x" + (this.y | 0); + }; + return PointerSyntheticEvent2; + }() + ); + var VisitPayload = ( + /** @class */ + function() { + function VisitPayload2() { + this.type = ""; + this.x = 0; + this.y = 0; + this.timeStamp = -1; + this.event = null; + this.root = null; + this.collected = null; + } + VisitPayload2.prototype.toString = function() { + return this.type + ": " + (this.x | 0) + "x" + (this.y | 0); + }; + return VisitPayload2; + }() + ); + var syntheticEvent = new PointerSyntheticEvent(); + var PAYLOAD = new VisitPayload(); + var Pointer = ( + /** @class */ + function() { + function Pointer2() { + var _this = this; + this.ratio = 1; + this.clickList = []; + this.cancelList = []; + this.handleStart = function(event) { + event.preventDefault(); + _this.localPoint(event); + _this.dispatchEvent(event.type, event); + _this.findTargets("click", _this.clickList); + _this.findTargets("mousecancel", _this.cancelList); + }; + this.handleMove = function(event) { + event.preventDefault(); + _this.localPoint(event); + _this.dispatchEvent(event.type, event); + }; + this.handleEnd = function(event) { + event.preventDefault(); + _this.dispatchEvent(event.type, event); + if (_this.clickList.length) { + _this.dispatchEvent("click", event, _this.clickList); + } + _this.cancelList.length = 0; + }; + this.handleCancel = function(event) { + if (_this.cancelList.length) { + _this.dispatchEvent("mousecancel", event, _this.cancelList); + } + _this.clickList.length = 0; + }; + this.visitStart = function(node, payload) { + return !node._flag(payload.type); + }; + this.visitEnd = function(node, payload) { + syntheticEvent.raw = payload.event; + syntheticEvent.type = payload.type; + syntheticEvent.timeStamp = payload.timeStamp; + syntheticEvent.abs.x = payload.x; + syntheticEvent.abs.y = payload.y; + var listeners = node.listeners(payload.type); + if (!listeners) { return; } - if (this._image) { - var pixelRatio = this.getPixelRatio(); - this.prerenderContext.pixelRatio = pixelRatio; - var updated = this._image.prerender(this.prerenderContext); - if (updated === true) { - var w = this._image.getWidth(); - var h = this._image.getHeight(); - this.size(w, h); - } - } - _super.prototype.prerender.call(this); - }; - Sprite2.prototype.render = function(context) { - var texture2 = this._textures[0]; - if (texture2 === null || texture2 === void 0 ? void 0 : texture2["_resizeMode"]) { - texture2.dw = this.pin("width"); - texture2.dh = this.pin("height"); - } - _super.prototype.render.call(this, context); - }; - return Sprite2; - }(Node) - ); - var image = sprite; - var Image$1 = Sprite; - var __extends$3 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); - }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { - this.constructor = d; - } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - }(); - var CanvasTexture = ( - /** @class */ - function(_super) { - __extends$3(CanvasTexture2, _super); - function CanvasTexture2() { - var _this = _super.call(this, document.createElement("canvas")) || this; - _this._lastPixelRatio = 0; - return _this; - } - CanvasTexture2.prototype.setSize = function(textureWidth, textureHeight, pixelRatio) { - if (pixelRatio === void 0) { - pixelRatio = 1; - } - this._source.width = textureWidth * pixelRatio; - this._source.height = textureHeight * pixelRatio; - this._pixelRatio = pixelRatio; - }; - CanvasTexture2.prototype.getContext = function(type, attributes) { - if (type === void 0) { - type = "2d"; - } - return this._source.getContext(type, attributes); - }; - CanvasTexture2.prototype.getOptimalPixelRatio = function() { - return Math.ceil(this._lastPixelRatio); - }; - CanvasTexture2.prototype.setMemoizer = function(memoizer) { - this._memoizer = memoizer; - }; - CanvasTexture2.prototype.setDrawer = function(drawer) { - this._drawer = drawer; - }; - CanvasTexture2.prototype.prerender = function(context) { - var newPixelRatio = context.pixelRatio; - var lastPixelRatio = this._lastPixelRatio; - var pixelRationChange = lastPixelRatio / newPixelRatio; - var pixelRatioChanged = lastPixelRatio === 0 || pixelRationChange > 1.25 || pixelRationChange < 0.8; - if (pixelRatioChanged) { - this._lastPixelRatio = newPixelRatio; - } - var newMemoKey = this._memoizer ? this._memoizer.call(this) : null; - var memoKeyChanged = this._lastMemoKey !== newMemoKey; - if (pixelRatioChanged || memoKeyChanged) { - this._lastMemoKey = newMemoKey; - this._lastPixelRatio = newPixelRatio; - if (typeof this._drawer === "function") { - this._drawer.call(this); - } - return true; + node.matrix().inverse().map(payload, syntheticEvent); + var isEventTarget = node === payload.root || node.attr("spy") || node.hitTest(syntheticEvent); + if (!isEventTarget) { + return; } - }; - CanvasTexture2.prototype.size = function(width, height, pixelRatio) { - this.setSize(width, height, pixelRatio); - return this; - }; - CanvasTexture2.prototype.context = function(type, attributes) { - if (type === void 0) { - type = "2d"; + if (payload.collected) { + payload.collected.push(node); } - return this.getContext(type, attributes); - }; - CanvasTexture2.prototype.canvas = function(legacyTextureDrawer) { - if (typeof legacyTextureDrawer === "function") { - legacyTextureDrawer.call(this, this.getContext()); - } else if (typeof legacyTextureDrawer === "undefined") { - if (typeof this._drawer === "function") { - this._drawer.call(this); + if (payload.event) { + var cancel = false; + for (var l = 0; l < listeners.length; l++) { + cancel = listeners[l].call(node, syntheticEvent) ? true : cancel; } + return cancel; } - return this; }; - return CanvasTexture2; - }(ImageTexture) - ); - function canvas(type, attributes, legacyTextureDrawer) { - if (typeof type === "function") { - var texture_1 = new CanvasTexture(); - legacyTextureDrawer = type; - texture_1.setDrawer(function() { - legacyTextureDrawer.call(texture_1, texture_1.getContext()); - }); - return texture_1; - } else if (typeof attributes === "function") { - var texture_2 = new CanvasTexture(); - legacyTextureDrawer = attributes; - texture_2.setDrawer(function() { - legacyTextureDrawer.call(texture_2, texture_2.getContext(type)); - }); - return texture_2; - } else if (typeof legacyTextureDrawer === "function") { - var texture_3 = new CanvasTexture(); - texture_3.setDrawer(function() { - legacyTextureDrawer.call(texture_3, texture_3.getContext(type, attributes)); + } + Pointer2.prototype.mount = function(stage, elem) { + var _this = this; + this.stage = stage; + this.elem = elem; + this.ratio = stage.viewport().ratio || 1; + stage.on("viewport", function(viewport) { + var _a2; + _this.ratio = (_a2 = viewport.ratio) !== null && _a2 !== void 0 ? _a2 : _this.ratio; }); - return texture_3; - } else { - var texture2 = new CanvasTexture(); - return texture2; + elem.addEventListener("touchstart", this.handleStart); + elem.addEventListener("touchend", this.handleEnd); + elem.addEventListener("touchmove", this.handleMove); + elem.addEventListener("touchcancel", this.handleCancel); + elem.addEventListener("mousedown", this.handleStart); + elem.addEventListener("mouseup", this.handleEnd); + elem.addEventListener("mousemove", this.handleMove); + document.addEventListener("mouseup", this.handleCancel); + window.addEventListener("blur", this.handleCancel); + return this; + }; + Pointer2.prototype.unmount = function() { + var elem = this.elem; + elem.removeEventListener("touchstart", this.handleStart); + elem.removeEventListener("touchend", this.handleEnd); + elem.removeEventListener("touchmove", this.handleMove); + elem.removeEventListener("touchcancel", this.handleCancel); + elem.removeEventListener("mousedown", this.handleStart); + elem.removeEventListener("mouseup", this.handleEnd); + elem.removeEventListener("mousemove", this.handleMove); + document.removeEventListener("mouseup", this.handleCancel); + window.removeEventListener("blur", this.handleCancel); + return this; + }; + Pointer2.prototype.localPoint = function(event) { + var _a2; + var elem = this.elem; + var x2; + var y; + if ((_a2 = event.touches) === null || _a2 === void 0 ? void 0 : _a2.length) { + x2 = event.touches[0].clientX; + y = event.touches[0].clientY; + } else { + x2 = event.clientX; + y = event.clientY; + } + var rect = elem.getBoundingClientRect(); + x2 -= rect.left; + y -= rect.top; + x2 -= elem.clientLeft | 0; + y -= elem.clientTop | 0; + PAYLOAD.x = x2 * this.ratio; + PAYLOAD.y = y * this.ratio; + }; + Pointer2.prototype.findTargets = function(type, result) { + var payload = PAYLOAD; + payload.type = type; + payload.root = this.stage; + payload.event = null; + payload.collected = result; + payload.collected.length = 0; + this.stage.visit({ + reverse: true, + visible: true, + start: this.visitStart, + end: this.visitEnd + }, payload); + }; + Pointer2.prototype.dispatchEvent = function(type, event, targets) { + var payload = PAYLOAD; + payload.type = type; + payload.root = this.stage; + payload.event = event; + payload.timeStamp = Date.now(); + payload.collected = null; + if (targets) { + while (targets.length) { + var node = targets.shift(); + if (this.visitEnd(node, payload)) { + break; + } + } + targets.length = 0; + } else { + this.stage.visit({ + reverse: true, + visible: true, + start: this.visitStart, + end: this.visitEnd + }, payload); + } + }; + return Pointer2; + }() + ); + var __extends$2 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); + }; + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); + function __() { + this.constructor = d2; } - } - function memoizeDraw(legacySpriteDrawer, legacySpriteMemoizer) { - if (legacySpriteMemoizer === void 0) { - legacySpriteMemoizer = function() { - return null; - }; + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); + }; + }(); + var __assign = function() { + __assign = Object.assign || function(t) { + for (var s2, i = 1, n2 = arguments.length; i < n2; i++) { + s2 = arguments[i]; + for (var p in s2) + if (Object.prototype.hasOwnProperty.call(s2, p)) + t[p] = s2[p]; } - var sprite2 = new Sprite(); - var texture2 = new CanvasTexture(); - sprite2.texture(texture2); - texture2.setDrawer(function() { - legacySpriteDrawer(2.5 * texture2._lastPixelRatio, texture2, sprite2); - }); - texture2.setMemoizer(legacySpriteMemoizer); - return sprite2; + return t; + }; + return __assign.apply(this, arguments); + }; + function mount(configs) { + if (configs === void 0) { + configs = {}; } - var POINTER_CLICK = "click"; - var POINTER_START = "touchstart mousedown"; - var POINTER_MOVE = "touchmove mousemove"; - var POINTER_END = "touchend mouseup"; - var POINTER_CANCEL = "touchcancel mousecancel"; - var EventPoint = ( - /** @class */ - function() { - function EventPoint2() { - } - EventPoint2.prototype.clone = function(obj) { - if (obj) { - obj.x = this.x; - obj.y = this.y; - } else { - obj = { - x: this.x, - y: this.y - }; + var root = new Root(); + root.mount(configs); + root.pointer = new Pointer().mount(root, root.dom); + return root; + } + var Root = ( + /** @class */ + function(_super) { + __extends$2(Root2, _super); + function Root2() { + var _this = _super.call(this) || this; + _this.canvas = null; + _this.dom = null; + _this.context = null; + _this.pixelWidth = -1; + _this.pixelHeight = -1; + _this.pixelRatio = 1; + _this.drawingWidth = 0; + _this.drawingHeight = 0; + _this.mounted = false; + _this.paused = false; + _this.sleep = false; + _this.mount = function(configs) { + if (configs === void 0) { + configs = {}; + } + if (typeof configs.canvas === "string") { + _this.canvas = document.getElementById(configs.canvas); + if (!_this.canvas) { + console.error("Canvas element not found: ", configs.canvas); + } + } else if (configs.canvas instanceof HTMLCanvasElement) { + _this.canvas = configs.canvas; + } else if (configs.canvas) { + console.error("Unknown value for canvas:", configs.canvas); + } + if (!_this.canvas) { + _this.canvas = document.getElementById("cutjs") || document.getElementById("stage"); + } + if (!_this.canvas) { + _this.canvas = document.createElement("canvas"); + Object.assign(_this.canvas.style, { + position: "absolute", + display: "block", + top: "0", + left: "0", + bottom: "0", + right: "0", + width: "100%", + height: "100%" + }); + var body = document.body; + body.insertBefore(_this.canvas, body.firstChild); } - return obj; - }; - EventPoint2.prototype.toString = function() { - return (this.x | 0) + "x" + (this.y | 0); - }; - return EventPoint2; - }() - ); - var PointerSyntheticEvent = ( - /** @class */ - function() { - function PointerSyntheticEvent2() { - this.abs = new EventPoint(); - } - PointerSyntheticEvent2.prototype.clone = function(obj) { - if (obj) { - obj.x = this.x; - obj.y = this.y; + _this.dom = _this.canvas; + _this.context = _this.canvas.getContext("2d"); + var devicePixelRatio = window.devicePixelRatio || 1; + var backingStorePixelRatio = ( + // @ts-ignore + _this.context.webkitBackingStorePixelRatio || // @ts-ignore + _this.context.mozBackingStorePixelRatio || // @ts-ignore + _this.context.msBackingStorePixelRatio || // @ts-ignore + _this.context.oBackingStorePixelRatio || // @ts-ignore + _this.context.backingStorePixelRatio || 1 + ); + _this.devicePixelRatio = devicePixelRatio; + _this.backingStoreRatio = backingStorePixelRatio; + _this.pixelRatio = _this.devicePixelRatio / _this.backingStoreRatio; + _this.mounted = true; + _this.requestFrame(); + }; + _this.frameRequested = false; + _this.requestFrame = function() { + if (!_this.frameRequested) { + _this.frameRequested = true; + requestAnimationFrame(_this.onFrame); + } + }; + _this._lastFrameTime = 0; + _this._mo_touch = null; + _this.onFrame = function(now2) { + _this.frameRequested = false; + if (!_this.mounted || !_this.canvas || !_this.context) { + return; + } + _this.requestFrame(); + var newPixelWidth = _this.canvas.clientWidth; + var newPixelHeight = _this.canvas.clientHeight; + if (_this.pixelWidth !== newPixelWidth || _this.pixelHeight !== newPixelHeight) { + _this.pixelWidth = newPixelWidth; + _this.pixelHeight = newPixelHeight; + _this.drawingWidth = newPixelWidth * _this.pixelRatio; + _this.drawingHeight = newPixelHeight * _this.pixelRatio; + if (_this.canvas.width !== _this.drawingWidth || _this.canvas.height !== _this.drawingHeight) { + _this.canvas.width = _this.drawingWidth; + _this.canvas.height = _this.drawingHeight; + _this.viewport({ + width: _this.drawingWidth, + height: _this.drawingHeight, + ratio: _this.pixelRatio + }); + } + } + var last = _this._lastFrameTime || now2; + var elapsed = now2 - last; + if (!_this.mounted || _this.paused || _this.sleep) { + return; + } + _this._lastFrameTime = now2; + _this.prerender(); + var tickRequest = _this._tick(elapsed, now2, last); + if (_this._mo_touch != _this._ts_touch) { + _this._mo_touch = _this._ts_touch; + _this.sleep = false; + if (_this.drawingWidth > 0 && _this.drawingHeight > 0) { + _this.context.setTransform(1, 0, 0, 1, 0, 0); + _this.context.clearRect(0, 0, _this.drawingWidth, _this.drawingHeight); + _this.render(_this.context); + } + } else if (tickRequest) { + _this.sleep = false; } else { - obj = { - x: this.x, - y: this.y - }; + _this.sleep = true; } - return obj; + stats.fps = elapsed ? 1e3 / elapsed : 0; }; - PointerSyntheticEvent2.prototype.toString = function() { - return this.type + ": " + (this.x | 0) + "x" + (this.y | 0); - }; - return PointerSyntheticEvent2; - }() - ); - var VisitPayload = ( - /** @class */ - function() { - function VisitPayload2() { - this.type = ""; - this.x = 0; - this.y = 0; - this.timeStamp = -1; - this.event = null; - this.root = null; - this.collected = null; + _this.label("Root"); + return _this; + } + Root2.prototype.resume = function() { + if (this.sleep || this.paused) { + this.requestFrame(); } - VisitPayload2.prototype.toString = function() { - return this.type + ": " + (this.x | 0) + "x" + (this.y | 0); - }; - return VisitPayload2; - }() - ); - var syntheticEvent = new PointerSyntheticEvent(); - var PAYLOAD = new VisitPayload(); - var Pointer = ( - /** @class */ - function() { - function Pointer2() { - var _this = this; - this.ratio = 1; - this.clickList = []; - this.cancelList = []; - this.handleStart = function(event) { - event.preventDefault(); - _this.localPoint(event); - _this.dispatchEvent(event.type, event); - _this.findTargets("click", _this.clickList); - _this.findTargets("mousecancel", _this.cancelList); - }; - this.handleMove = function(event) { - event.preventDefault(); - _this.localPoint(event); - _this.dispatchEvent(event.type, event); - }; - this.handleEnd = function(event) { - event.preventDefault(); - _this.dispatchEvent(event.type, event); - if (_this.clickList.length) { - _this.dispatchEvent("click", event, _this.clickList); - } - _this.cancelList.length = 0; - }; - this.handleCancel = function(event) { - if (_this.cancelList.length) { - _this.dispatchEvent("mousecancel", event, _this.cancelList); - } - _this.clickList.length = 0; - }; - this.visitStart = function(node, payload) { - return !node._flag(payload.type); + this.paused = false; + this.sleep = false; + this.publish("resume"); + return this; + }; + Root2.prototype.pause = function() { + if (!this.paused) { + this.publish("pause"); + } + this.paused = true; + return this; + }; + Root2.prototype.touch = function() { + if (this.sleep || this.paused) { + this.requestFrame(); + } + this.sleep = false; + return _super.prototype.touch.call(this); + }; + Root2.prototype.unmount = function() { + var _a2; + this.mounted = false; + (_a2 = this.pointer) === null || _a2 === void 0 ? void 0 : _a2.unmount(); + return this; + }; + Root2.prototype.background = function(color) { + if (this.dom) { + this.dom.style.backgroundColor = color; + } + return this; + }; + Root2.prototype.viewport = function(width, height, ratio) { + if (typeof width === "undefined") { + return Object.assign({}, this._viewport); + } + if (typeof width === "object") { + var options2 = width; + width = options2.width; + height = options2.height; + ratio = options2.ratio; + } + if (typeof width === "number" && typeof height === "number") { + this._viewport = { + width, + height, + ratio: typeof ratio === "number" ? ratio : 1 }; - this.visitEnd = function(node, payload) { - syntheticEvent.raw = payload.event; - syntheticEvent.type = payload.type; - syntheticEvent.timeStamp = payload.timeStamp; - syntheticEvent.abs.x = payload.x; - syntheticEvent.abs.y = payload.y; - var listeners = node.listeners(payload.type); - if (!listeners) { - return; - } - node.matrix().inverse().map(payload, syntheticEvent); - var isEventTarget = node === payload.root || node.attr("spy") || node.hitTest(syntheticEvent); - if (!isEventTarget) { - return; - } - if (payload.collected) { - payload.collected.push(node); - } - if (payload.event) { - var cancel = false; - for (var l = 0; l < listeners.length; l++) { - cancel = listeners[l].call(node, syntheticEvent) ? true : cancel; + this.viewbox(); + var data_1 = Object.assign({}, this._viewport); + this.visit({ + start: function(node) { + if (!node._flag("viewport")) { + return true; } - return cancel; + node.publish("viewport", [data_1]); } + }); + } + return this; + }; + Root2.prototype.viewbox = function(width, height, mode) { + if (typeof width === "number" && typeof height === "number") { + this._viewbox = { + width, + height, + mode }; + } else if (typeof width === "object" && width !== null) { + this._viewbox = __assign({}, width); } - Pointer2.prototype.mount = function(stage, elem) { - var _this = this; - this.stage = stage; - this.elem = elem; - this.ratio = stage.viewport().ratio || 1; - stage.on("viewport", function(viewport) { - var _a; - _this.ratio = (_a = viewport.ratio) !== null && _a !== void 0 ? _a : _this.ratio; - }); - elem.addEventListener("touchstart", this.handleStart); - elem.addEventListener("touchend", this.handleEnd); - elem.addEventListener("touchmove", this.handleMove); - elem.addEventListener("touchcancel", this.handleCancel); - elem.addEventListener("mousedown", this.handleStart); - elem.addEventListener("mouseup", this.handleEnd); - elem.addEventListener("mousemove", this.handleMove); - document.addEventListener("mouseup", this.handleCancel); - window.addEventListener("blur", this.handleCancel); - return this; - }; - Pointer2.prototype.unmount = function() { - var elem = this.elem; - elem.removeEventListener("touchstart", this.handleStart); - elem.removeEventListener("touchend", this.handleEnd); - elem.removeEventListener("touchmove", this.handleMove); - elem.removeEventListener("touchcancel", this.handleCancel); - elem.removeEventListener("mousedown", this.handleStart); - elem.removeEventListener("mouseup", this.handleEnd); - elem.removeEventListener("mousemove", this.handleMove); - document.removeEventListener("mouseup", this.handleCancel); - window.removeEventListener("blur", this.handleCancel); - return this; - }; - Pointer2.prototype.localPoint = function(event) { - var _a; - var elem = this.elem; - var x; - var y; - if ((_a = event.touches) === null || _a === void 0 ? void 0 : _a.length) { - x = event.touches[0].clientX; - y = event.touches[0].clientY; - } else { - x = event.clientX; - y = event.clientY; - } - var rect = elem.getBoundingClientRect(); - x -= rect.left; - y -= rect.top; - x -= elem.clientLeft | 0; - y -= elem.clientTop | 0; - PAYLOAD.x = x * this.ratio; - PAYLOAD.y = y * this.ratio; - }; - Pointer2.prototype.findTargets = function(type, result) { - var payload = PAYLOAD; - payload.type = type; - payload.root = this.stage; - payload.event = null; - payload.collected = result; - payload.collected.length = 0; - this.stage.visit({ - reverse: true, - visible: true, - start: this.visitStart, - end: this.visitEnd - }, payload); - }; - Pointer2.prototype.dispatchEvent = function(type, event, targets) { - var payload = PAYLOAD; - payload.type = type; - payload.root = this.stage; - payload.event = event; - payload.timeStamp = Date.now(); - payload.collected = null; - if (targets) { - while (targets.length) { - var node = targets.shift(); - if (this.visitEnd(node, payload)) { - break; - } - } - targets.length = 0; - } else { - this.stage.visit({ - reverse: true, - visible: true, - start: this.visitStart, - end: this.visitEnd - }, payload); - } - }; - return Pointer2; - }() - ); - var Mouse = { - CLICK: "click", - START: "touchstart mousedown", - MOVE: "touchmove mousemove", - END: "touchend mouseup", - CANCEL: "touchcancel mousecancel" - }; - var __extends$2 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); + this.rescale(); + return this; + }; + Root2.prototype.camera = function(matrix) { + this._camera = matrix; + this.rescale(); + return this; }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { - this.constructor = d; + Root2.prototype.rescale = function() { + var viewbox = this._viewbox; + var viewport = this._viewport; + var camera = this._camera; + if (viewport && viewbox) { + var viewportWidth = viewport.width; + var viewportHeight = viewport.height; + var viewboxMode = isValidFitMode(viewbox.mode) ? viewbox.mode : "in-pad"; + var viewboxWidth = viewbox.width; + var viewboxHeight = viewbox.height; + this.pin({ + width: viewboxWidth, + height: viewboxHeight + }); + this.scaleTo(viewportWidth, viewportHeight, viewboxMode); + var viewboxX = viewbox.x || 0; + var viewboxY = viewbox.y || 0; + var cameraZoom = (camera === null || camera === void 0 ? void 0 : camera.a) || 1; + var cameraX = (camera === null || camera === void 0 ? void 0 : camera.e) || 0; + var cameraY = (camera === null || camera === void 0 ? void 0 : camera.f) || 0; + var scaleX = this.pin("scaleX"); + var scaleY = this.pin("scaleY"); + this.pin("scaleX", scaleX * cameraZoom); + this.pin("scaleY", scaleY * cameraZoom); + this.pin("offsetX", cameraX - viewboxX * scaleX * cameraZoom); + this.pin("offsetY", cameraY - viewboxY * scaleY * cameraZoom); + } else if (viewport) { + this.pin({ + width: viewport.width, + height: viewport.height + }); } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + return this; }; - }(); - var __assign = function() { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) - if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; + return Root2; + }(Node) + ); + var __extends$1 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); + }; + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); + function __() { + this.constructor = d2; + } + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); + }; + }(); + var FPS = 15; + /** @class */ + (function(_super) { + __extends$1(Anim2, _super); + function Anim2() { + var _this = _super.call(this) || this; + _this.label("Anim"); + _this._textures = []; + _this._fps = FPS; + _this._ft = 1e3 / _this._fps; + _this._time = -1; + _this._repeat = 0; + _this._index = 0; + _this._frames = []; + var lastTime = 0; + _this.tick(function(t, now2, last) { + if (this._time < 0 || this._frames.length <= 1) { + return; + } + var ignore = lastTime != last; + lastTime = now2; + if (ignore) { + return true; + } + this._time += t; + if (this._time < this._ft) { + return true; + } + var n2 = this._time / this._ft | 0; + this._time -= n2 * this._ft; + this.moveFrame(n2); + if (this._repeat > 0 && (this._repeat -= n2) <= 0) { + this.stop(); + this._callback && this._callback(); + return false; } - return t; + return true; + }, false); + return _this; + } + Anim2.prototype.fps = function(fps) { + if (typeof fps === "undefined") { + return this._fps; + } + this._fps = fps > 0 ? fps : FPS; + this._ft = 1e3 / this._fps; + return this; + }; + Anim2.prototype.setFrames = function(frames) { + return this.frames(frames); + }; + Anim2.prototype.frames = function(frames) { + this._index = 0; + this._frames = texture(frames).array(); + this.touch(); + return this; + }; + Anim2.prototype.length = function() { + return this._frames ? this._frames.length : 0; + }; + Anim2.prototype.gotoFrame = function(frame, resize) { + if (resize === void 0) { + resize = false; + } + this._index = math.wrap(frame, this._frames.length) | 0; + resize = resize || !this._textures[0]; + this._textures[0] = this._frames[this._index]; + if (resize) { + this.pin("width", this._textures[0].getWidth()); + this.pin("height", this._textures[0].getHeight()); + } + this.touch(); + return this; + }; + Anim2.prototype.moveFrame = function(move) { + return this.gotoFrame(this._index + move); + }; + Anim2.prototype.repeat = function(repeat, callback) { + this._repeat = repeat * this._frames.length - 1; + this._callback = callback; + this.play(); + return this; + }; + Anim2.prototype.play = function(frame) { + if (typeof frame !== "undefined") { + this.gotoFrame(frame); + this._time = 0; + } else if (this._time < 0) { + this._time = 0; + } + this.touch(); + return this; + }; + Anim2.prototype.stop = function(frame) { + this._time = -1; + if (typeof frame !== "undefined") { + this.gotoFrame(frame); + } + return this; + }; + return Anim2; + })(Node); + var __extends = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; }; - return __assign.apply(this, arguments); + return extendStatics2(d2, b2); }; - var ROOTS = []; - function pause() { - for (var i = ROOTS.length - 1; i >= 0; i--) { - ROOTS[i].pause(); + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); + function __() { + this.constructor = d2; } + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); + }; + }(); + /** @class */ + (function(_super) { + __extends(Monotype2, _super); + function Monotype2() { + var _this = _super.call(this) || this; + _this.label("String"); + _this._textures = []; + return _this; } - function resume() { - for (var i = ROOTS.length - 1; i >= 0; i--) { - ROOTS[i].resume(); + Monotype2.prototype.setFont = function(frames) { + return this.frames(frames); + }; + Monotype2.prototype.frames = function(frames) { + this._textures = []; + if (typeof frames == "string") { + var selection_1 = texture(frames); + this._font = function(value) { + return selection_1.one(value); + }; + } else if (typeof frames === "object") { + this._font = function(value) { + return frames[value]; + }; + } else if (typeof frames === "function") { + this._font = frames; + } + return this; + }; + Monotype2.prototype.setValue = function(value) { + return this.value(value); + }; + Monotype2.prototype.value = function(value) { + if (typeof value === "undefined") { + return this._value; } + if (this._value === value) { + return this; + } + this._value = value; + if (value === null) { + value = ""; + } else if (typeof value !== "string" && !Array.isArray(value)) { + value = value.toString(); + } + this._spacing = this._spacing || 0; + var width = 0; + var height = 0; + for (var i = 0; i < value.length; i++) { + var v3 = value[i]; + var texture_1 = this._textures[i] = this._font(typeof v3 === "string" ? v3 : v3 + ""); + width += i > 0 ? this._spacing : 0; + texture_1.setDestinationCoordinate(width, 0); + width = width + texture_1.getWidth(); + height = Math.max(height, texture_1.getHeight()); + } + this.pin("width", width); + this.pin("height", height); + this._textures.length = value.length; + return this; + }; + return Monotype2; + })(Node); + var math_atan2 = Math.atan2; + var math_abs = Math.abs; + var math_sqrt = Math.sqrt; + var math_PI = Math.PI; + var math_max = Math.max; + var math_min = Math.min; + var mounted = null; + function memo() { + var memory = []; + function recall() { + var rest = []; + for (var _i = 0; _i < arguments.length; _i++) { + rest[_i] = arguments[_i]; + } + var equal = memory.length === rest.length; + for (var i = 0; equal && i < rest.length; i++) { + equal = equal && memory[i] === rest[i]; + memory[i] = rest[i]; + } + memory.length = rest.length; + return equal; + } + function reset() { + memory.length = 0; } - function mount(configs) { - if (configs === void 0) { - configs = {}; + return { + recall, + reset + }; + } + Testbed.mount = function() { + if (mounted) { + return mounted; + } + mounted = new StageTestbed(); + var playButton = document.getElementById("testbed-play"); + var statusElement = document.getElementById("testbed-status"); + var infoElement = document.getElementById("testbed-info"); + if (playButton) { + playButton.addEventListener("click", function() { + mounted.isPaused() ? mounted.resume() : mounted.pause(); + }); + mounted._pause = function() { + playButton.classList.add("pause"); + playButton.classList.remove("play"); + }; + mounted._resume = function() { + playButton.classList.add("play"); + playButton.classList.remove("pause"); + }; + } else { + console.log("Please create a button with id='testbed-play'"); + } + var lastStatus = ""; + if (statusElement) { + statusElement.innerText = lastStatus; + } + mounted._status = function(text) { + if (lastStatus === text) { + return; + } + lastStatus = text; + if (statusElement) { + statusElement.innerText = text; } - var root = new Root(); - root.mount(configs); - root.pointer = new Pointer().mount(root, root.dom); - return root; + }; + var lastInfo = ""; + if (infoElement) { + infoElement.innerText = lastInfo; } - var Root = ( - /** @class */ - function(_super) { - __extends$2(Root2, _super); - function Root2() { - var _this = _super.call(this) || this; - _this.canvas = null; - _this.dom = null; - _this.context = null; - _this.pixelWidth = -1; - _this.pixelHeight = -1; - _this.pixelRatio = 1; - _this.drawingWidth = 0; - _this.drawingHeight = 0; - _this.mounted = false; + mounted._info = function(text) { + if (lastInfo === text) { + return; + } + lastInfo = text; + if (infoElement) { + infoElement.innerText = text; + } + }; + return mounted; + }; + var getStyle = function(obj) { + var _a2, _b; + return (_b = (_a2 = obj["render"]) !== null && _a2 !== void 0 ? _a2 : obj["style"]) !== null && _b !== void 0 ? _b : {}; + }; + function findBody(world, point2) { + var body = null; + var aabb = { + lowerBound: point2, + upperBound: point2 + }; + world.queryAABB(aabb, function(fixture) { + if (!fixture.getBody().isDynamic() || !fixture.testPoint(point2)) { + return true; + } + body = fixture.getBody(); + return false; + }); + return body; + } + var StageTestbed = ( + /** @class */ + function(_super) { + __extends$a(StageTestbed2, _super); + function StageTestbed2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.paused = false; + _this.lastDrawHash = ""; + _this.newDrawHash = ""; + _this.buffer = []; + _this.statusText = ""; + _this.statusMap = {}; + _this.drawSegment = _this.drawEdge; + return _this; + } + StageTestbed2.prototype.start = function(world) { + var _this = this; + var stage = this.stage = mount(); + var canvas2 = this.canvas = stage.dom; + var testbed2 = this; + this.canvas = canvas2; + stage.on(POINTER_START, function() { + var _a2; + window.focus(); + (_a2 = document.activeElement) === null || _a2 === void 0 ? void 0 : _a2.blur(); + canvas2.focus(); + }); + stage.MAX_ELAPSE = 1e3 / 30; + stage.on("resume", function() { _this.paused = false; - _this.sleep = false; - _this.mount = function(configs) { - if (configs === void 0) { - configs = {}; - } - if (typeof configs.canvas === "string") { - _this.canvas = document.getElementById(configs.canvas); - if (!_this.canvas) { - console.error("Canvas element not found: ", configs.canvas); - } - } else if (configs.canvas instanceof HTMLCanvasElement) { - _this.canvas = configs.canvas; - } else if (configs.canvas) { - console.error("Unknown value for canvas:", configs.canvas); - } - if (!_this.canvas) { - _this.canvas = document.getElementById("cutjs") || document.getElementById("stage"); - } - if (!_this.canvas) { - _this.canvas = document.createElement("canvas"); - Object.assign(_this.canvas.style, { - position: "absolute", - display: "block", - top: "0", - left: "0", - bottom: "0", - right: "0", - width: "100%", - height: "100%" - }); - var body = document.body; - body.insertBefore(_this.canvas, body.firstChild); - } - _this.dom = _this.canvas; - _this.context = _this.canvas.getContext("2d"); - var devicePixelRatio = window.devicePixelRatio || 1; - var backingStorePixelRatio = ( - // @ts-ignore - _this.context.webkitBackingStorePixelRatio || // @ts-ignore - _this.context.mozBackingStorePixelRatio || // @ts-ignore - _this.context.msBackingStorePixelRatio || // @ts-ignore - _this.context.oBackingStorePixelRatio || // @ts-ignore - _this.context.backingStorePixelRatio || 1 - ); - _this.devicePixelRatio = devicePixelRatio; - _this.backingStoreRatio = backingStorePixelRatio; - _this.pixelRatio = _this.devicePixelRatio / _this.backingStoreRatio; - _this.mounted = true; - ROOTS.push(_this); - _this.requestFrame(); - }; - _this.frameRequested = false; - _this.requestFrame = function() { - if (!_this.frameRequested) { - _this.frameRequested = true; - requestAnimationFrame(_this.onFrame); - } - }; - _this._lastFrameTime = 0; - _this._mo_touch = null; - _this.onFrame = function(now) { - _this.frameRequested = false; - if (!_this.mounted || !_this.canvas || !_this.context) { - return; - } - _this.requestFrame(); - var newPixelWidth = _this.canvas.clientWidth; - var newPixelHeight = _this.canvas.clientHeight; - if (_this.pixelWidth !== newPixelWidth || _this.pixelHeight !== newPixelHeight) { - _this.pixelWidth = newPixelWidth; - _this.pixelHeight = newPixelHeight; - _this.drawingWidth = newPixelWidth * _this.pixelRatio; - _this.drawingHeight = newPixelHeight * _this.pixelRatio; - if (_this.canvas.width !== _this.drawingWidth || _this.canvas.height !== _this.drawingHeight) { - _this.canvas.width = _this.drawingWidth; - _this.canvas.height = _this.drawingHeight; - _this.viewport({ - width: _this.drawingWidth, - height: _this.drawingHeight, - ratio: _this.pixelRatio - }); - } - } - var last = _this._lastFrameTime || now; - var elapsed = now - last; - if (!_this.mounted || _this.paused || _this.sleep) { - return; - } - _this._lastFrameTime = now; - _this.prerender(); - var tickRequest = _this._tick(elapsed, now, last); - if (_this._mo_touch != _this._ts_touch) { - _this._mo_touch = _this._ts_touch; - _this.sleep = false; - if (_this.drawingWidth > 0 && _this.drawingHeight > 0) { - _this.context.setTransform(1, 0, 0, 1, 0, 0); - _this.context.clearRect(0, 0, _this.drawingWidth, _this.drawingHeight); - _this.render(_this.context); - } - } else if (tickRequest) { - _this.sleep = false; - } else { - _this.sleep = true; - } - stats.fps = elapsed ? 1e3 / elapsed : 0; - }; - _this.label("Root"); - return _this; - } - Root2.prototype.resume = function() { - if (this.sleep || this.paused) { - this.requestFrame(); + _this._resume(); + }); + stage.on("pause", function() { + _this.paused = true; + _this._pause(); + }); + var drawingTexture = new CanvasTexture(); + drawingTexture.draw = function(ctx) { + var pixelRatio = 2 * drawingTexture.getOptimalPixelRatio(); + ctx.save(); + ctx.transform(1, 0, 0, _this.scaleY, -_this.x, -_this.y); + ctx.lineWidth = 3 / pixelRatio; + ctx.lineCap = "round"; + for (var drawing = _this.buffer.shift(); drawing; drawing = _this.buffer.shift()) { + drawing(ctx, pixelRatio); + } + ctx.restore(); + }; + var drawingElement = sprite(drawingTexture); + stage.append(drawingElement); + stage.tick(function() { + _this.buffer.length = 0; + }, true); + stage.background(this.background); + stage.viewbox(this.width, this.height); + stage.pin("alignX", -0.5); + stage.pin("alignY", -0.5); + var worldNode = new WorldStageNode(world, this); + stage.prepend(worldNode); + var lastX = 0; + var lastY = 0; + stage.tick(function(dt, t) { + if (lastX !== _this.x || lastY !== _this.y) { + worldNode.offset(-_this.x, -_this.y); + lastX = _this.x; + lastY = _this.y; } - this.paused = false; - this.sleep = false; - this.publish("resume"); - return this; - }; - Root2.prototype.pause = function() { - if (!this.paused) { - this.publish("pause"); + }); + worldNode.tick(function(dt, t) { + _this.step(dt, t); + if (targetBody) { + _this.drawSegment(targetBody.getPosition(), mouseMove, "rgba(255,255,255,0.2)"); } - this.paused = true; - return this; - }; - Root2.prototype.touch = function() { - if (this.sleep || this.paused) { - this.requestFrame(); + if (_this.lastDrawHash !== _this.newDrawHash) { + _this.lastDrawHash = _this.newDrawHash; + stage.touch(); } - this.sleep = false; - return _super.prototype.touch.call(this); - }; - Root2.prototype.unmount = function() { - var _a; - this.mounted = false; - var index = ROOTS.indexOf(this); - if (index >= 0) { - ROOTS.splice(index, 1); - } - (_a = this.pointer) === null || _a === void 0 ? void 0 : _a.unmount(); - return this; - }; - Root2.prototype.background = function(color) { - if (this.dom) { - this.dom.style.backgroundColor = color; + _this.newDrawHash = ""; + return true; + }); + var mouseGround = world.createBody(); + var mouseJoint = null; + var targetBody = null; + var mouseMove = { x: 0, y: 0 }; + worldNode.attr("spy", true); + worldNode.on(POINTER_START, function(point2) { + point2 = { x: point2.x, y: testbed2.scaleY * point2.y }; + if (targetBody) { + return; } - return this; - }; - Root2.prototype.viewport = function(width, height, ratio) { - if (typeof width === "undefined") { - return Object.assign({}, this._viewport); - } - if (typeof width === "object") { - var options = width; - width = options.width; - height = options.height; - ratio = options.ratio; - } - if (typeof width === "number" && typeof height === "number") { - this._viewport = { - width, - height, - ratio: typeof ratio === "number" ? ratio : 1 - }; - this.viewbox(); - var data_1 = Object.assign({}, this._viewport); - this.visit({ - start: function(node) { - if (!node._flag("viewport")) { - return true; - } - node.publish("viewport", [data_1]); - } - }); + var body = findBody(world, point2); + if (!body) { + return; + } + if (_this.mouseForce) { + targetBody = body; + } else { + mouseJoint = new MouseJoint({ maxForce: 1e3 }, mouseGround, body, { x: point2.x, y: point2.y }); + world.createJoint(mouseJoint); + } + }); + worldNode.on(POINTER_MOVE, function(point2) { + point2 = { x: point2.x, y: testbed2.scaleY * point2.y }; + if (mouseJoint) { + mouseJoint.setTarget(point2); } - return this; - }; - Root2.prototype.viewbox = function(width, height, mode) { - if (typeof width === "number" && typeof height === "number") { - this._viewbox = { - width, - height, - mode + mouseMove.x = point2.x; + mouseMove.y = point2.y; + }); + worldNode.on(POINTER_END, function(point2) { + point2 = { x: point2.x, y: testbed2.scaleY * point2.y }; + if (mouseJoint) { + world.destroyJoint(mouseJoint); + mouseJoint = null; + } + if (targetBody && _this.mouseForce) { + var target = targetBody.getPosition(); + var force = { + x: (point2.x - target.x) * _this.mouseForce, + y: (point2.y - target.y) * _this.mouseForce }; - } else if (typeof width === "object" && width !== null) { - this._viewbox = __assign({}, width); + targetBody.applyForceToCenter(force, true); + targetBody = null; } - this.rescale(); - return this; - }; - Root2.prototype.camera = function(matrix) { - this._camera = matrix; - this.rescale(); - return this; - }; - Root2.prototype.rescale = function() { - var viewbox = this._viewbox; - var viewport = this._viewport; - var camera = this._camera; - if (viewport && viewbox) { - var viewportWidth = viewport.width; - var viewportHeight = viewport.height; - var viewboxMode = isValidFitMode(viewbox.mode) ? viewbox.mode : "in-pad"; - var viewboxWidth = viewbox.width; - var viewboxHeight = viewbox.height; - this.pin({ - width: viewboxWidth, - height: viewboxHeight - }); - this.scaleTo(viewportWidth, viewportHeight, viewboxMode); - var viewboxX = viewbox.x || 0; - var viewboxY = viewbox.y || 0; - var cameraZoom = (camera === null || camera === void 0 ? void 0 : camera.a) || 1; - var cameraX = (camera === null || camera === void 0 ? void 0 : camera.e) || 0; - var cameraY = (camera === null || camera === void 0 ? void 0 : camera.f) || 0; - var scaleX = this.pin("scaleX"); - var scaleY = this.pin("scaleY"); - this.pin("scaleX", scaleX * cameraZoom); - this.pin("scaleY", scaleY * cameraZoom); - this.pin("offsetX", cameraX - viewboxX * scaleX * cameraZoom); - this.pin("offsetY", cameraY - viewboxY * scaleY * cameraZoom); - } else if (viewport) { - this.pin({ - width: viewport.width, - height: viewport.height - }); + }); + worldNode.on(POINTER_CANCEL, function(point2) { + point2 = { x: point2.x, y: testbed2.scaleY * point2.y }; + if (mouseJoint) { + world.destroyJoint(mouseJoint); + mouseJoint = null; } - return this; - }; - return Root2; - }(Node) - ); - var __extends$1 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); - }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { - this.constructor = d; - } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - }(); - function anim(frames, fps) { - var anim2 = new Anim(); - anim2.frames(frames).gotoFrame(0); - fps && anim2.fps(fps); - return anim2; - } - var FPS = 15; - var Anim = ( - /** @class */ - function(_super) { - __extends$1(Anim2, _super); - function Anim2() { - var _this = _super.call(this) || this; - _this.label("Anim"); - _this._textures = []; - _this._fps = FPS; - _this._ft = 1e3 / _this._fps; - _this._time = -1; - _this._repeat = 0; - _this._index = 0; - _this._frames = []; - var lastTime = 0; - _this.tick(function(t, now, last) { - if (this._time < 0 || this._frames.length <= 1) { - return; - } - var ignore = lastTime != last; - lastTime = now; - if (ignore) { - return true; + if (targetBody) { + targetBody = null; + } + }); + var activeKeys = testbed2.activeKeys; + var downKeys = {}; + function updateActiveKeys(keyCode, down) { + var char = String.fromCharCode(keyCode); + if (/\w/.test(char)) { + activeKeys[char] = down; + } + activeKeys.right = downKeys[39] || activeKeys["D"]; + activeKeys.left = downKeys[37] || activeKeys["A"]; + activeKeys.up = downKeys[38] || activeKeys["W"]; + activeKeys.down = downKeys[40] || activeKeys["S"]; + activeKeys.fire = downKeys[32] || downKeys[13]; + } + window.addEventListener("keydown", function(e3) { + var keyCode = e3.keyCode; + downKeys[keyCode] = true; + updateActiveKeys(keyCode, true); + testbed2.keydown && testbed2.keydown(keyCode, String.fromCharCode(keyCode)); + }); + window.addEventListener("keyup", function(e3) { + var keyCode = e3.keyCode; + downKeys[keyCode] = false; + updateActiveKeys(keyCode, false); + testbed2.keyup && testbed2.keyup(keyCode, String.fromCharCode(keyCode)); + }); + this.resume(); + }; + StageTestbed2.prototype.focus = function() { + document.activeElement && document.activeElement.blur(); + this.canvas.focus(); + }; + StageTestbed2.prototype._pause = function() { + }; + StageTestbed2.prototype._resume = function() { + }; + StageTestbed2.prototype.status = function(a2, b2) { + if (typeof b2 !== "undefined") { + var key_1 = a2; + var value_1 = b2; + if (typeof value_1 !== "function" && typeof value_1 !== "object") { + this.statusMap[key_1] = value_1; + } + } else if (a2 && typeof a2 === "object") { + for (var key_2 in a2) { + var value_2 = a2[key_2]; + if (typeof value_2 !== "function" && typeof value_2 !== "object") { + this.statusMap[key_2] = value_2; + } + } + } else if (typeof a2 === "string") { + this.statusText = a2; + } + var newline = "\n"; + var text = this.statusText || ""; + for (var key in this.statusMap) { + var value = this.statusMap[key]; + if (typeof value === "function") + continue; + text += (text && newline) + key + ": " + value; + } + this._status(text); + }; + StageTestbed2.prototype.info = function(text) { + this._info(text); + }; + StageTestbed2.prototype._status = function(string) { + }; + StageTestbed2.prototype._info = function(text) { + }; + StageTestbed2.prototype.isPaused = function() { + return this.paused; + }; + StageTestbed2.prototype.togglePause = function() { + this.paused ? this.resume() : this.pause(); + }; + StageTestbed2.prototype.pause = function() { + this.stage.pause(); + }; + StageTestbed2.prototype.resume = function() { + this.stage.resume(); + this.focus(); + }; + StageTestbed2.prototype.drawPoint = function(p, r, color) { + this.buffer.push(function(ctx, ratio) { + ctx.beginPath(); + ctx.arc(p.x, p.y, 5 / ratio, 0, 2 * math_PI); + ctx.strokeStyle = color; + ctx.stroke(); + }); + this.newDrawHash += "point" + p.x + "," + p.y + "," + r + "," + color; + }; + StageTestbed2.prototype.drawCircle = function(p, r, color) { + this.buffer.push(function(ctx) { + ctx.beginPath(); + ctx.arc(p.x, p.y, r, 0, 2 * math_PI); + ctx.strokeStyle = color; + ctx.stroke(); + }); + this.newDrawHash += "circle" + p.x + "," + p.y + "," + r + "," + color; + }; + StageTestbed2.prototype.drawEdge = function(a2, b2, color) { + this.buffer.push(function(ctx) { + ctx.beginPath(); + ctx.moveTo(a2.x, a2.y); + ctx.lineTo(b2.x, b2.y); + ctx.strokeStyle = color; + ctx.stroke(); + }); + this.newDrawHash += "segment" + a2.x + "," + a2.y + "," + b2.x + "," + b2.y + "," + color; + }; + StageTestbed2.prototype.drawPolygon = function(points, color) { + if (!points || !points.length) { + return; + } + this.buffer.push(function(ctx) { + ctx.beginPath(); + ctx.moveTo(points[0].x, points[0].y); + for (var i2 = 1; i2 < points.length; i2++) { + ctx.lineTo(points[i2].x, points[i2].y); + } + ctx.strokeStyle = color; + ctx.closePath(); + ctx.stroke(); + }); + this.newDrawHash += "segment"; + for (var i = 1; i < points.length; i++) { + this.newDrawHash += points[i].x + "," + points[i].y + ","; + } + this.newDrawHash += color; + }; + StageTestbed2.prototype.drawAABB = function(aabb, color) { + this.buffer.push(function(ctx) { + ctx.beginPath(); + ctx.moveTo(aabb.lowerBound.x, aabb.lowerBound.y); + ctx.lineTo(aabb.upperBound.x, aabb.lowerBound.y); + ctx.lineTo(aabb.upperBound.x, aabb.upperBound.y); + ctx.lineTo(aabb.lowerBound.x, aabb.upperBound.y); + ctx.strokeStyle = color; + ctx.closePath(); + ctx.stroke(); + }); + this.newDrawHash += "aabb"; + this.newDrawHash += aabb.lowerBound.x + "," + aabb.lowerBound.y + ","; + this.newDrawHash += aabb.upperBound.x + "," + aabb.upperBound.y + ","; + this.newDrawHash += color; + }; + StageTestbed2.prototype.findOne = function(query) { + throw new Error("Not implemented"); + }; + StageTestbed2.prototype.findAll = function(query) { + throw new Error("Not implemented"); + }; + return StageTestbed2; + }(Testbed) + ); + var WorldStageNode = ( + /** @class */ + function(_super) { + __extends$a(WorldStageNode2, _super); + function WorldStageNode2(world, opts) { + if (opts === void 0) { + opts = {}; + } + var _this = _super.call(this) || this; + _this.nodes = /* @__PURE__ */ new WeakMap(); + _this.options = { + speed: 1, + hz: 60, + scaleY: -1, + lineWidth: 3, + stroke: void 0, + fill: void 0 + }; + _this.label("Planck"); + _this.options = __assign$1(__assign$1({}, _this.options), opts); + if (math_abs(_this.options.hz) < 1) { + _this.options.hz = 1 / _this.options.hz; + } + _this.world = world; + _this.testbed = opts; + var timeStep = 1 / _this.options.hz; + var elapsedTime = 0; + var errored = false; + _this.tick(function(dt) { + if (errored) { + return false; + } + try { + dt = dt * 1e-3 * _this.options.speed; + elapsedTime += dt; + while (elapsedTime > timeStep) { + world.step(timeStep); + elapsedTime -= timeStep; } - this._time += t; - if (this._time < this._ft) { - return true; + _this.renderWorld(); + return true; + } catch (error) { + errored = true; + console.error(error); + return false; + } + }, true); + world.on("remove-fixture", function(obj) { + var _a2; + (_a2 = _this.nodes.get(obj)) === null || _a2 === void 0 ? void 0 : _a2.remove(); + }); + world.on("remove-joint", function(obj) { + var _a2; + (_a2 = _this.nodes.get(obj)) === null || _a2 === void 0 ? void 0 : _a2.remove(); + }); + return _this; + } + WorldStageNode2.prototype.renderWorld = function() { + var world = this.world; + var options2 = this.options; + var viewer = this; + for (var b2 = world.getBodyList(); b2; b2 = b2.getNext()) { + for (var f = b2.getFixtureList(); f; f = f.getNext()) { + var node = this.nodes.get(f); + var fstyle = getStyle(f); + var bstyle = getStyle(b2); + if (!node) { + if (fstyle && fstyle.stroke) { + options2.stroke = fstyle.stroke; + } else if (bstyle && bstyle.stroke) { + options2.stroke = bstyle.stroke; + } else if (b2.isDynamic()) { + options2.stroke = "rgba(255,255,255,0.9)"; + } else if (b2.isKinematic()) { + options2.stroke = "rgba(255,255,255,0.7)"; + } else if (b2.isStatic()) { + options2.stroke = "rgba(255,255,255,0.5)"; + } + if (fstyle && fstyle.fill) { + options2.fill = fstyle.fill; + } else if (bstyle && bstyle.fill) { + options2.fill = bstyle.fill; + } else { + options2.fill = ""; + } + var type = f.getType(); + var shape = f.getShape(); + if (type == "circle") { + node = viewer.drawCircle(shape, options2); + } + if (type == "edge") { + node = viewer.drawEdge(shape, options2); + } + if (type == "polygon") { + node = viewer.drawPolygon(shape, options2); + } + if (type == "chain") { + node = viewer.drawChain(shape, options2); + } + if (node) { + node.appendTo(viewer); + this.nodes.set(f, node); + } } - var n = this._time / this._ft | 0; - this._time -= n * this._ft; - this.moveFrame(n); - if (this._repeat > 0 && (this._repeat -= n) <= 0) { - this.stop(); - this._callback && this._callback(); - return false; + if (node) { + var p = b2.getPosition(); + var r = b2.getAngle(); + var isChanged = node.__lastX !== p.x || node.__lastY !== p.y || node.__lastR !== r; + if (isChanged) { + node.__lastX = p.x; + node.__lastY = p.y; + node.__lastR = r; + node.offset(p.x, options2.scaleY * p.y); + node.rotate(options2.scaleY * r); + } } - return true; - }, false); - return _this; + } } - Anim2.prototype.fps = function(fps) { - if (typeof fps === "undefined") { - return this._fps; + for (var j = world.getJointList(); j; j = j.getNext()) { + var type = j.getType(); + if (type == "pulley-joint") { + this.testbed.drawSegment(j.getAnchorA(), j.getGroundAnchorA(), "rgba(255,255,255,0.5)"); + this.testbed.drawSegment(j.getAnchorB(), j.getGroundAnchorB(), "rgba(255,255,255,0.5)"); + this.testbed.drawSegment(j.getGroundAnchorB(), j.getGroundAnchorA(), "rgba(255,255,255,0.5)"); + } else { + this.testbed.drawSegment(j.getAnchorA(), j.getAnchorB(), "rgba(255,255,255,0.5)"); } - this._fps = fps > 0 ? fps : FPS; - this._ft = 1e3 / this._fps; - return this; - }; - Anim2.prototype.setFrames = function(frames) { - return this.frames(frames); - }; - Anim2.prototype.frames = function(frames) { - this._index = 0; - this._frames = texture(frames).array(); - this.touch(); - return this; - }; - Anim2.prototype.length = function() { - return this._frames ? this._frames.length : 0; - }; - Anim2.prototype.gotoFrame = function(frame, resize) { - if (resize === void 0) { - resize = false; - } - this._index = math.wrap(frame, this._frames.length) | 0; - resize = resize || !this._textures[0]; - this._textures[0] = this._frames[this._index]; - if (resize) { - this.pin("width", this._textures[0].getWidth()); - this.pin("height", this._textures[0].getHeight()); - } - this.touch(); - return this; - }; - Anim2.prototype.moveFrame = function(move) { - return this.gotoFrame(this._index + move); - }; - Anim2.prototype.repeat = function(repeat, callback) { - this._repeat = repeat * this._frames.length - 1; - this._callback = callback; - this.play(); - return this; - }; - Anim2.prototype.play = function(frame) { - if (typeof frame !== "undefined") { - this.gotoFrame(frame); - this._time = 0; - } else if (this._time < 0) { - this._time = 0; - } - this.touch(); - return this; - }; - Anim2.prototype.stop = function(frame) { - this._time = -1; - if (typeof frame !== "undefined") { - this.gotoFrame(frame); + } + }; + WorldStageNode2.prototype.drawCircle = function(shape, options2) { + var offsetX = 0; + var offsetY = 0; + var offsetMemo = memo(); + var texture2 = canvas(); + texture2.setDrawer(function() { + var _a2; + var ctx = this.getContext(); + var ratio = 2 * this.getOptimalPixelRatio(); + var lw = options2.lineWidth / ratio; + var r = shape.m_radius; + var cx = r + lw; + var cy = r + lw; + var w = r * 2 + lw * 2; + var h = r * 2 + lw * 2; + offsetX = shape.m_p.x - cx; + offsetY = options2.scaleY * shape.m_p.y - cy; + this.setSize(w, h, ratio); + ctx.scale(ratio, ratio); + ctx.arc(cx, cy, r, 0, 2 * math_PI); + if (options2.fill) { + ctx.fillStyle = options2.fill; + ctx.fill(); + } + ctx.lineTo(cx, cy); + ctx.lineWidth = options2.lineWidth / ratio; + ctx.strokeStyle = (_a2 = options2.stroke) !== null && _a2 !== void 0 ? _a2 : ""; + ctx.stroke(); + }); + var sprite$1 = sprite(texture2); + sprite$1.tick(function() { + if (!offsetMemo.recall(offsetX, offsetY)) { + sprite$1.offset(offsetX, offsetY); } - return this; - }; - return Anim2; - }(Node) - ); - var __extends = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); + }); + var node = layout().append(sprite$1); + return node; }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { - this.constructor = d; - } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + WorldStageNode2.prototype.drawEdge = function(edge, options2) { + var offsetX = 0; + var offsetY = 0; + var offsetA = 0; + var offsetMemo = memo(); + var texture2 = canvas(); + texture2.setDrawer(function() { + var _a2; + var ctx = this.getContext(); + var ratio = 2 * this.getOptimalPixelRatio(); + var lw = options2.lineWidth / ratio; + var v13 = edge.m_vertex1; + var v22 = edge.m_vertex2; + var dx = v22.x - v13.x; + var dy = v22.y - v13.y; + var length2 = math_sqrt(dx * dx + dy * dy); + this.setSize(length2 + 2 * lw, 2 * lw, ratio); + var minX = math_min(v13.x, v22.x); + var minY = math_min(options2.scaleY * v13.y, options2.scaleY * v22.y); + offsetX = minX - lw; + offsetY = minY - lw; + offsetA = options2.scaleY * math_atan2(dy, dx); + ctx.scale(ratio, ratio); + ctx.beginPath(); + ctx.moveTo(lw, lw); + ctx.lineTo(lw + length2, lw); + ctx.lineCap = "round"; + ctx.lineWidth = options2.lineWidth / ratio; + ctx.strokeStyle = (_a2 = options2.stroke) !== null && _a2 !== void 0 ? _a2 : ""; + ctx.stroke(); + }); + var sprite$1 = sprite(texture2); + sprite$1.tick(function() { + if (!offsetMemo.recall(offsetX, offsetY, offsetA)) { + sprite$1.offset(offsetX, offsetY); + sprite$1.rotate(offsetA); + } + }); + var node = layout().append(sprite$1); + return node; }; - }(); - function monotype(chars) { - return new Monotype().frames(chars); - } - var Monotype = ( - /** @class */ - function(_super) { - __extends(Monotype2, _super); - function Monotype2() { - var _this = _super.call(this) || this; - _this.label("String"); - _this._textures = []; - return _this; - } - Monotype2.prototype.setFont = function(frames) { - return this.frames(frames); - }; - Monotype2.prototype.frames = function(frames) { - this._textures = []; - if (typeof frames == "string") { - var selection_1 = texture(frames); - this._font = function(value) { - return selection_1.one(value); - }; - } else if (typeof frames === "object") { - this._font = function(value) { - return frames[value]; - }; - } else if (typeof frames === "function") { - this._font = frames; + WorldStageNode2.prototype.drawPolygon = function(shape, options2) { + var offsetX = 0; + var offsetY = 0; + var offsetMemo = memo(); + var texture2 = canvas(); + texture2.setDrawer(function() { + var _a2; + var ctx = this.getContext(); + var ratio = 2 * this.getOptimalPixelRatio(); + var lw = options2.lineWidth / ratio; + var vertices = shape.m_vertices; + if (!vertices.length) { + return; } - return this; - }; - Monotype2.prototype.setValue = function(value) { - return this.value(value); - }; - Monotype2.prototype.value = function(value) { - if (typeof value === "undefined") { - return this._value; + var minX = Infinity; + var minY = Infinity; + var maxX = -Infinity; + var maxY = -Infinity; + for (var i = 0; i < vertices.length; ++i) { + var v3 = vertices[i]; + minX = math_min(minX, v3.x); + maxX = math_max(maxX, v3.x); + minY = math_min(minY, options2.scaleY * v3.y); + maxY = math_max(maxY, options2.scaleY * v3.y); + } + var width = maxX - minX; + var height = maxY - minY; + offsetX = minX; + offsetY = minY; + this.setSize(width + 2 * lw, height + 2 * lw, ratio); + ctx.scale(ratio, ratio); + ctx.beginPath(); + for (var i = 0; i < vertices.length; ++i) { + var v3 = vertices[i]; + var x2 = v3.x - minX + lw; + var y = options2.scaleY * v3.y - minY + lw; + if (i == 0) + ctx.moveTo(x2, y); + else + ctx.lineTo(x2, y); + } + if (vertices.length > 2) { + ctx.closePath(); + } + if (options2.fill) { + ctx.fillStyle = options2.fill; + ctx.fill(); + ctx.closePath(); + } + ctx.lineCap = "round"; + ctx.lineWidth = options2.lineWidth / ratio; + ctx.strokeStyle = (_a2 = options2.stroke) !== null && _a2 !== void 0 ? _a2 : ""; + ctx.stroke(); + }); + var sprite$1 = sprite(texture2); + sprite$1.tick(function() { + if (!offsetMemo.recall(offsetX, offsetY)) { + sprite$1.offset(offsetX, offsetY); } - if (this._value === value) { - return this; + }); + var node = layout().append(sprite$1); + return node; + }; + WorldStageNode2.prototype.drawChain = function(shape, options2) { + var offsetX = 0; + var offsetY = 0; + var offsetMemo = memo(); + var texture2 = canvas(); + texture2.setDrawer(function() { + var _a2; + var ctx = this.getContext(); + var ratio = 2 * this.getOptimalPixelRatio(); + var lw = options2.lineWidth / ratio; + var vertices = shape.m_vertices; + if (!vertices.length) { + return; } - this._value = value; - if (value === null) { - value = ""; - } else if (typeof value !== "string" && !Array.isArray(value)) { - value = value.toString(); + var minX = Infinity; + var minY = Infinity; + var maxX = -Infinity; + var maxY = -Infinity; + for (var i = 0; i < vertices.length; ++i) { + var v3 = vertices[i]; + minX = math_min(minX, v3.x); + maxX = math_max(maxX, v3.x); + minY = math_min(minY, options2.scaleY * v3.y); + maxY = math_max(maxY, options2.scaleY * v3.y); + } + var width = maxX - minX; + var height = maxY - minY; + offsetX = minX; + offsetY = minY; + this.setSize(width + 2 * lw, height + 2 * lw, ratio); + ctx.scale(ratio, ratio); + ctx.beginPath(); + for (var i = 0; i < vertices.length; ++i) { + var v3 = vertices[i]; + var x2 = v3.x - minX + lw; + var y = options2.scaleY * v3.y - minY + lw; + if (i == 0) + ctx.moveTo(x2, y); + else + ctx.lineTo(x2, y); + } + if (vertices.length > 2) ; + if (options2.fill) { + ctx.fillStyle = options2.fill; + ctx.fill(); + ctx.closePath(); + } + ctx.lineCap = "round"; + ctx.lineWidth = options2.lineWidth / ratio; + ctx.strokeStyle = (_a2 = options2.stroke) !== null && _a2 !== void 0 ? _a2 : ""; + ctx.stroke(); + }); + var sprite$1 = sprite(texture2); + sprite$1.tick(function() { + if (!offsetMemo.recall(offsetX, offsetY)) { + sprite$1.offset(offsetX, offsetY); } - this._spacing = this._spacing || 0; - var width = 0; - var height = 0; - for (var i = 0; i < value.length; i++) { - var v = value[i]; - var texture_1 = this._textures[i] = this._font(typeof v === "string" ? v : v + ""); - width += i > 0 ? this._spacing : 0; - texture_1.setDestinationCoordinate(width, 0); - width = width + texture_1.getWidth(); - height = Math.max(height, texture_1.getHeight()); - } - this.pin("width", width); - this.pin("height", height); - this._textures.length = value.length; - return this; - }; - return Monotype2; - }(Node) - ); - var string = monotype; - var Str = Monotype; - const Stage = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ - __proto__: null, - Anim, - Atlas, - CanvasTexture, - Image: Image$1, - ImageTexture, - Math: math, - Matrix, - Monotype, - Mouse, - Node, - POINTER_CANCEL, - POINTER_CLICK, - POINTER_END, - POINTER_MOVE, - POINTER_START, - Pin, - PipeTexture, - Pointer, - ResizableTexture, - Root, - Sprite, - Str, - Texture, - TextureSelection, - Transition, - anim, - atlas, - box, - canvas, - clamp, - column, - create, - image, - isValidFitMode, - layer, - layout, - length, - math, - maximize, - memoizeDraw, - minimize, - monotype, - mount, - pause, - random, - resume, - row, - sprite, - string, - texture, - wrap - }, Symbol.toStringTag, { value: "Module" })); - - var math_atan2 = Math.atan2; - var math_abs = Math.abs; - var math_sqrt = Math.sqrt; - var math_PI = Math.PI; - var math_max = Math.max; - var math_min = Math.min; - var mounted = null; - /** @internal */ - function memo() { - var memory = []; - function recall() { - var rest = []; - for (var _i = 0; _i < arguments.length; _i++) { - rest[_i] = arguments[_i]; - } - var equal = memory.length === rest.length; - for (var i = 0; equal && i < rest.length; i++) { - equal = equal && memory[i] === rest[i]; - memory[i] = rest[i]; - } - memory.length = rest.length; - return equal; - } - function reset() { - memory.length = 0; - // void 0; - } - return { - recall: recall, - reset: reset, - }; - } - Testbed.mount = function () { - if (mounted) { - return mounted; - } - mounted = new StageTestbed(); - // todo: merge rest of this into StageTestbed - // todo: should we create these elements if not exists? - var playButton = document.getElementById('testbed-play'); - var statusElement = document.getElementById('testbed-status'); - var infoElement = document.getElementById('testbed-info'); - if (playButton) { - playButton.addEventListener('click', function () { - mounted.isPaused() ? mounted.resume() : mounted.pause(); - }); - mounted._pause = function () { - playButton.classList.add('pause'); - playButton.classList.remove('play'); - }; - mounted._resume = function () { - playButton.classList.add('play'); - playButton.classList.remove('pause'); - }; - } - else { - console.log("Please create a button with id='testbed-play'"); - } - var lastStatus = ''; - if (statusElement) { - statusElement.innerText = lastStatus; - } - mounted._status = function (text) { - if (lastStatus === text) { - return; - } - lastStatus = text; - if (statusElement) { - statusElement.innerText = text; - } - }; - var lastInfo = ''; - if (infoElement) { - infoElement.innerText = lastInfo; - } - mounted._info = function (text) { - if (lastInfo === text) { - return; - } - lastInfo = text; - if (infoElement) { - infoElement.innerText = text; - } - }; - return mounted; - }; - var getStyle = function (obj) { - var _a, _b; - return (_b = (_a = obj['render']) !== null && _a !== void 0 ? _a : obj['style']) !== null && _b !== void 0 ? _b : {}; - }; - function findBody(world, point) { - var body = null; - var aabb = { - lowerBound: point, - upperBound: point, - }; - world.queryAABB(aabb, function (fixture) { - if (!fixture.getBody().isDynamic() || !fixture.testPoint(point)) { - return true; - } - body = fixture.getBody(); - return false; }); - return body; - } - /** @internal */ - var StageTestbed = /** @class */ (function (_super) { - __extends$a(StageTestbed, _super); - function StageTestbed() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.paused = false; - _this.lastDrawHash = ""; - _this.newDrawHash = ""; - _this.buffer = []; - _this.statusText = ''; - _this.statusMap = {}; - _this.drawSegment = _this.drawEdge; - return _this; - } - StageTestbed.prototype.start = function (world) { - var _this = this; - var stage = this.stage = Stage.mount(); - var canvas = this.canvas = stage.dom; - // eslint-disable-next-line @typescript-eslint/no-this-alias - var testbed = this; - this.canvas = canvas; - stage.on(Stage.POINTER_START, function () { - var _a; - window.focus(); - // @ts-ignore - (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.blur(); - canvas.focus(); - }); - stage.MAX_ELAPSE = 1000 / 30; - stage.on('resume', function () { - _this.paused = false; - _this._resume(); - }); - stage.on('pause', function () { - _this.paused = true; - _this._pause(); - }); - var drawingTexture = new Stage.CanvasTexture(); - drawingTexture.draw = function (ctx) { - var pixelRatio = 2 * drawingTexture.getOptimalPixelRatio(); - ctx.save(); - ctx.transform(1, 0, 0, _this.scaleY, -_this.x, -_this.y); - ctx.lineWidth = 3 / pixelRatio; - ctx.lineCap = 'round'; - for (var drawing = _this.buffer.shift(); drawing; drawing = _this.buffer.shift()) { - drawing(ctx, pixelRatio); - } - ctx.restore(); - }; - var drawingElement = Stage.sprite(drawingTexture); - stage.append(drawingElement); - stage.tick(function () { - _this.buffer.length = 0; - }, true); - stage.background(this.background); - stage.viewbox(this.width, this.height); - stage.pin('alignX', -0.5); - stage.pin('alignY', -0.5); - var worldNode = new WorldStageNode(world, this); - // stage.empty(); - stage.prepend(worldNode); - var lastX = 0; - var lastY = 0; - stage.tick(function (dt, t) { - // update camera position - if (lastX !== _this.x || lastY !== _this.y) { - worldNode.offset(-_this.x, -_this.y); - lastX = _this.x; - lastY = _this.y; - } - }); - worldNode.tick(function (dt, t) { - _this.step(dt, t); - if (targetBody) { - _this.drawSegment(targetBody.getPosition(), mouseMove, 'rgba(255,255,255,0.2)'); - } - if (_this.lastDrawHash !== _this.newDrawHash) { - _this.lastDrawHash = _this.newDrawHash; - stage.touch(); - } - _this.newDrawHash = ""; - return true; - }); - var mouseGround = world.createBody(); - var mouseJoint = null; - var targetBody = null; - var mouseMove = { x: 0, y: 0 }; - worldNode.attr('spy', true); - worldNode.on(Stage.POINTER_START, function (point) { - point = { x: point.x, y: testbed.scaleY * point.y }; - if (targetBody) { - return; - } - var body = findBody(world, point); - if (!body) { - return; - } - if (_this.mouseForce) { - targetBody = body; - } - else { - mouseJoint = new MouseJoint({ maxForce: 1000 }, mouseGround, body, { x: point.x, y: point.y }); - world.createJoint(mouseJoint); - } - }); - worldNode.on(Stage.POINTER_MOVE, function (point) { - point = { x: point.x, y: testbed.scaleY * point.y }; - if (mouseJoint) { - mouseJoint.setTarget(point); - } - mouseMove.x = point.x; - mouseMove.y = point.y; - }); - worldNode.on(Stage.POINTER_END, function (point) { - point = { x: point.x, y: testbed.scaleY * point.y }; - if (mouseJoint) { - world.destroyJoint(mouseJoint); - mouseJoint = null; - } - if (targetBody && _this.mouseForce) { - var target = targetBody.getPosition(); - var force = { - x: (point.x - target.x) * _this.mouseForce, - y: (point.y - target.y) * _this.mouseForce, - }; - targetBody.applyForceToCenter(force, true); - targetBody = null; - } - }); - worldNode.on(Stage.POINTER_CANCEL, function (point) { - point = { x: point.x, y: testbed.scaleY * point.y }; - if (mouseJoint) { - world.destroyJoint(mouseJoint); - mouseJoint = null; - } - if (targetBody) { - targetBody = null; - } - }); - var activeKeys = testbed.activeKeys; - var downKeys = {}; - function updateActiveKeys(keyCode, down) { - var char = String.fromCharCode(keyCode); - if (/\w/.test(char)) { - activeKeys[char] = down; - } - activeKeys.right = downKeys[39] || activeKeys['D']; - activeKeys.left = downKeys[37] || activeKeys['A']; - activeKeys.up = downKeys[38] || activeKeys['W']; - activeKeys.down = downKeys[40] || activeKeys['S']; - activeKeys.fire = downKeys[32] || downKeys[13]; - } - window.addEventListener("keydown", function (e) { - var keyCode = e.keyCode; - downKeys[keyCode] = true; - updateActiveKeys(keyCode, true); - testbed.keydown && testbed.keydown(keyCode, String.fromCharCode(keyCode)); - }); - window.addEventListener("keyup", function (e) { - var keyCode = e.keyCode; - downKeys[keyCode] = false; - updateActiveKeys(keyCode, false); - testbed.keyup && testbed.keyup(keyCode, String.fromCharCode(keyCode)); - }); - this.resume(); - }; - /** @private @internal */ - StageTestbed.prototype.focus = function () { - // @ts-ignore - document.activeElement && document.activeElement.blur(); - this.canvas.focus(); - }; - /** @internal */ - StageTestbed.prototype._pause = function () { - }; - /** @internal */ - StageTestbed.prototype._resume = function () { - }; - StageTestbed.prototype.status = function (a, b) { - if (typeof b !== 'undefined') { - var key_1 = a; - var value_1 = b; - if (typeof value_1 !== 'function' && typeof value_1 !== 'object') { - this.statusMap[key_1] = value_1; - } - } - else if (a && typeof a === 'object') { - // tslint:disable-next-line:no-for-in - for (var key_2 in a) { - var value_2 = a[key_2]; - if (typeof value_2 !== 'function' && typeof value_2 !== 'object') { - this.statusMap[key_2] = value_2; - } - } - } - else if (typeof a === 'string') { - this.statusText = a; - } - var newline = '\n'; - var text = this.statusText || ''; - for (var key in this.statusMap) { - var value = this.statusMap[key]; - if (typeof value === 'function') - continue; - text += (text && newline) + key + ': ' + value; - } - this._status(text); - }; - StageTestbed.prototype.info = function (text) { - this._info(text); - }; - /** @internal */ - StageTestbed.prototype._status = function (string) { - }; - /** @internal */ - StageTestbed.prototype._info = function (text) { - }; - /** @internal */ - StageTestbed.prototype.isPaused = function () { - return this.paused; - }; - /** @internal */ - StageTestbed.prototype.togglePause = function () { - this.paused ? this.resume() : this.pause(); - }; - /** @internal */ - StageTestbed.prototype.pause = function () { - this.stage.pause(); - }; - /** @internal */ - StageTestbed.prototype.resume = function () { - this.stage.resume(); - this.focus(); - }; - StageTestbed.prototype.drawPoint = function (p, r, color) { - this.buffer.push(function (ctx, ratio) { - ctx.beginPath(); - ctx.arc(p.x, p.y, 5 / ratio, 0, 2 * math_PI); - ctx.strokeStyle = color; - ctx.stroke(); - }); - this.newDrawHash += "point" + p.x + ',' + p.y + ',' + r + ',' + color; - }; - StageTestbed.prototype.drawCircle = function (p, r, color) { - this.buffer.push(function (ctx) { - ctx.beginPath(); - ctx.arc(p.x, p.y, r, 0, 2 * math_PI); - ctx.strokeStyle = color; - ctx.stroke(); - }); - this.newDrawHash += "circle" + p.x + ',' + p.y + ',' + r + ',' + color; - }; - StageTestbed.prototype.drawEdge = function (a, b, color) { - this.buffer.push(function (ctx) { - ctx.beginPath(); - ctx.moveTo(a.x, a.y); - ctx.lineTo(b.x, b.y); - ctx.strokeStyle = color; - ctx.stroke(); - }); - this.newDrawHash += "segment" + a.x + ',' + a.y + ',' + b.x + ',' + b.y + ',' + color; - }; - StageTestbed.prototype.drawPolygon = function (points, color) { - if (!points || !points.length) { - return; - } - this.buffer.push(function (ctx) { - ctx.beginPath(); - ctx.moveTo(points[0].x, points[0].y); - for (var i = 1; i < points.length; i++) { - ctx.lineTo(points[i].x, points[i].y); - } - ctx.strokeStyle = color; - ctx.closePath(); - ctx.stroke(); - }); - this.newDrawHash += "segment"; - for (var i = 1; i < points.length; i++) { - this.newDrawHash += points[i].x + ',' + points[i].y + ','; - } - this.newDrawHash += color; - }; - StageTestbed.prototype.drawAABB = function (aabb, color) { - this.buffer.push(function (ctx) { - ctx.beginPath(); - ctx.moveTo(aabb.lowerBound.x, aabb.lowerBound.y); - ctx.lineTo(aabb.upperBound.x, aabb.lowerBound.y); - ctx.lineTo(aabb.upperBound.x, aabb.upperBound.y); - ctx.lineTo(aabb.lowerBound.x, aabb.upperBound.y); - ctx.strokeStyle = color; - ctx.closePath(); - ctx.stroke(); - }); - this.newDrawHash += "aabb"; - this.newDrawHash += aabb.lowerBound.x + ',' + aabb.lowerBound.y + ','; - this.newDrawHash += aabb.upperBound.x + ',' + aabb.upperBound.y + ','; - this.newDrawHash += color; - }; - StageTestbed.prototype.findOne = function (query) { - throw new Error("Not implemented"); - }; - StageTestbed.prototype.findAll = function (query) { - throw new Error("Not implemented"); - }; - return StageTestbed; - }(Testbed)); - var WorldStageNode = /** @class */ (function (_super) { - __extends$a(WorldStageNode, _super); - function WorldStageNode(world, opts) { - if (opts === void 0) { opts = {}; } - var _this = _super.call(this) || this; - _this.nodes = new WeakMap(); - _this.options = { - speed: 1, - hz: 60, - scaleY: -1, - lineWidth: 3, - stroke: undefined, - fill: undefined - }; - _this.label('Planck'); - _this.options = __assign$1(__assign$1({}, _this.options), opts); - if (math_abs(_this.options.hz) < 1) { - _this.options.hz = 1 / _this.options.hz; - } - _this.world = world; - _this.testbed = opts; - var timeStep = 1 / _this.options.hz; - var elapsedTime = 0; - var errored = false; - _this.tick(function (dt) { - if (errored) { - return false; - } - try { - dt = dt * 0.001 * _this.options.speed; - elapsedTime += dt; - while (elapsedTime > timeStep) { - world.step(timeStep); - elapsedTime -= timeStep; - } - _this.renderWorld(); - return true; - } - catch (error) { - errored = true; - console.error(error); - return false; - } - }, true); - world.on('remove-fixture', function (obj) { - var _a; - (_a = _this.nodes.get(obj)) === null || _a === void 0 ? void 0 : _a.remove(); - }); - world.on('remove-joint', function (obj) { - var _a; - (_a = _this.nodes.get(obj)) === null || _a === void 0 ? void 0 : _a.remove(); - }); - return _this; - } - WorldStageNode.prototype.renderWorld = function () { - var world = this.world; - var options = this.options; - // eslint-disable-next-line @typescript-eslint/no-this-alias - var viewer = this; - for (var b = world.getBodyList(); b; b = b.getNext()) { - for (var f = b.getFixtureList(); f; f = f.getNext()) { - var node = this.nodes.get(f); - var fstyle = getStyle(f); - var bstyle = getStyle(b); - if (!node) { - if (fstyle && fstyle.stroke) { - options.stroke = fstyle.stroke; - } - else if (bstyle && bstyle.stroke) { - options.stroke = bstyle.stroke; - } - else if (b.isDynamic()) { - options.stroke = 'rgba(255,255,255,0.9)'; - } - else if (b.isKinematic()) { - options.stroke = 'rgba(255,255,255,0.7)'; - } - else if (b.isStatic()) { - options.stroke = 'rgba(255,255,255,0.5)'; - } - if (fstyle && fstyle.fill) { - options.fill = fstyle.fill; - } - else if (bstyle && bstyle.fill) { - options.fill = bstyle.fill; - } - else { - options.fill = ''; - } - var type = f.getType(); - var shape = f.getShape(); - if (type == 'circle') { - node = viewer.drawCircle(shape, options); - } - if (type == 'edge') { - node = viewer.drawEdge(shape, options); - } - if (type == 'polygon') { - node = viewer.drawPolygon(shape, options); - } - if (type == 'chain') { - node = viewer.drawChain(shape, options); - } - if (node) { - node.appendTo(viewer); - this.nodes.set(f, node); - } - } - if (node) { - var p = b.getPosition(); - var r = b.getAngle(); - // @ts-ignore - var isChanged = node.__lastX !== p.x || node.__lastY !== p.y || node.__lastR !== r; - if (isChanged) { - // @ts-ignore - node.__lastX = p.x; - // @ts-ignore - node.__lastY = p.y; - // @ts-ignore - node.__lastR = r; - node.offset(p.x, options.scaleY * p.y); - node.rotate(options.scaleY * r); - } - } - } - } - for (var j = world.getJointList(); j; j = j.getNext()) { - var type = j.getType(); - if (type == 'pulley-joint') { - this.testbed.drawSegment(j.getAnchorA(), j.getGroundAnchorA(), 'rgba(255,255,255,0.5)'); - this.testbed.drawSegment(j.getAnchorB(), j.getGroundAnchorB(), 'rgba(255,255,255,0.5)'); - this.testbed.drawSegment(j.getGroundAnchorB(), j.getGroundAnchorA(), 'rgba(255,255,255,0.5)'); - } - else { - this.testbed.drawSegment(j.getAnchorA(), j.getAnchorB(), 'rgba(255,255,255,0.5)'); - } - } - }; - WorldStageNode.prototype.drawCircle = function (shape, options) { - var offsetX = 0; - var offsetY = 0; - var offsetMemo = memo(); - var texture = Stage.canvas(); - texture.setDrawer(function () { - var _a; - var ctx = this.getContext(); - var ratio = 2 * this.getOptimalPixelRatio(); - var lw = options.lineWidth / ratio; - var r = shape.m_radius; - var cx = r + lw; - var cy = r + lw; - var w = r * 2 + lw * 2; - var h = r * 2 + lw * 2; - offsetX = shape.m_p.x - cx; - offsetY = options.scaleY * shape.m_p.y - cy; - this.setSize(w, h, ratio); - ctx.scale(ratio, ratio); - ctx.arc(cx, cy, r, 0, 2 * math_PI); - if (options.fill) { - ctx.fillStyle = options.fill; - ctx.fill(); - } - ctx.lineTo(cx, cy); - ctx.lineWidth = options.lineWidth / ratio; - ctx.strokeStyle = (_a = options.stroke) !== null && _a !== void 0 ? _a : ''; - ctx.stroke(); - }); - var sprite = Stage.sprite(texture); - sprite.tick(function () { - if (!offsetMemo.recall(offsetX, offsetY)) { - sprite.offset(offsetX, offsetY); - } - }); - var node = Stage.layout().append(sprite); - return node; - }; - WorldStageNode.prototype.drawEdge = function (edge, options) { - var offsetX = 0; - var offsetY = 0; - var offsetA = 0; - var offsetMemo = memo(); - var texture = Stage.canvas(); - texture.setDrawer(function () { - var _a; - var ctx = this.getContext(); - var ratio = 2 * this.getOptimalPixelRatio(); - var lw = options.lineWidth / ratio; - var v1 = edge.m_vertex1; - var v2 = edge.m_vertex2; - var dx = v2.x - v1.x; - var dy = v2.y - v1.y; - var length = math_sqrt(dx * dx + dy * dy); - this.setSize(length + 2 * lw, 2 * lw, ratio); - var minX = math_min(v1.x, v2.x); - var minY = math_min(options.scaleY * v1.y, options.scaleY * v2.y); - offsetX = minX - lw; - offsetY = minY - lw; - offsetA = options.scaleY * math_atan2(dy, dx); - ctx.scale(ratio, ratio); - ctx.beginPath(); - ctx.moveTo(lw, lw); - ctx.lineTo(lw + length, lw); - ctx.lineCap = 'round'; - ctx.lineWidth = options.lineWidth / ratio; - ctx.strokeStyle = (_a = options.stroke) !== null && _a !== void 0 ? _a : ''; - ctx.stroke(); - }); - var sprite = Stage.sprite(texture); - sprite.tick(function () { - if (!offsetMemo.recall(offsetX, offsetY, offsetA)) { - sprite.offset(offsetX, offsetY); - sprite.rotate(offsetA); - } - }); - var node = Stage.layout().append(sprite); - return node; - }; - WorldStageNode.prototype.drawPolygon = function (shape, options) { - var offsetX = 0; - var offsetY = 0; - var offsetMemo = memo(); - var texture = Stage.canvas(); - texture.setDrawer(function () { - var _a; - var ctx = this.getContext(); - var ratio = 2 * this.getOptimalPixelRatio(); - var lw = options.lineWidth / ratio; - var vertices = shape.m_vertices; - if (!vertices.length) { - return; - } - var minX = Infinity; - var minY = Infinity; - var maxX = -Infinity; - var maxY = -Infinity; - for (var i = 0; i < vertices.length; ++i) { - var v = vertices[i]; - minX = math_min(minX, v.x); - maxX = math_max(maxX, v.x); - minY = math_min(minY, options.scaleY * v.y); - maxY = math_max(maxY, options.scaleY * v.y); - } - var width = maxX - minX; - var height = maxY - minY; - offsetX = minX; - offsetY = minY; - this.setSize(width + 2 * lw, height + 2 * lw, ratio); - ctx.scale(ratio, ratio); - ctx.beginPath(); - for (var i = 0; i < vertices.length; ++i) { - var v = vertices[i]; - var x = v.x - minX + lw; - var y = options.scaleY * v.y - minY + lw; - if (i == 0) - ctx.moveTo(x, y); - else - ctx.lineTo(x, y); - } - if (vertices.length > 2) { - ctx.closePath(); - } - if (options.fill) { - ctx.fillStyle = options.fill; - ctx.fill(); - ctx.closePath(); - } - ctx.lineCap = 'round'; - ctx.lineWidth = options.lineWidth / ratio; - ctx.strokeStyle = (_a = options.stroke) !== null && _a !== void 0 ? _a : ''; - ctx.stroke(); - }); - var sprite = Stage.sprite(texture); - sprite.tick(function () { - if (!offsetMemo.recall(offsetX, offsetY)) { - sprite.offset(offsetX, offsetY); - } - }); - var node = Stage.layout().append(sprite); - return node; - }; - WorldStageNode.prototype.drawChain = function (shape, options) { - var offsetX = 0; - var offsetY = 0; - var offsetMemo = memo(); - var texture = Stage.canvas(); - texture.setDrawer(function () { - var _a; - var ctx = this.getContext(); - var ratio = 2 * this.getOptimalPixelRatio(); - var lw = options.lineWidth / ratio; - var vertices = shape.m_vertices; - if (!vertices.length) { - return; - } - var minX = Infinity; - var minY = Infinity; - var maxX = -Infinity; - var maxY = -Infinity; - for (var i = 0; i < vertices.length; ++i) { - var v = vertices[i]; - minX = math_min(minX, v.x); - maxX = math_max(maxX, v.x); - minY = math_min(minY, options.scaleY * v.y); - maxY = math_max(maxY, options.scaleY * v.y); - } - var width = maxX - minX; - var height = maxY - minY; - offsetX = minX; - offsetY = minY; - this.setSize(width + 2 * lw, height + 2 * lw, ratio); - ctx.scale(ratio, ratio); - ctx.beginPath(); - for (var i = 0; i < vertices.length; ++i) { - var v = vertices[i]; - var x = v.x - minX + lw; - var y = options.scaleY * v.y - minY + lw; - if (i == 0) - ctx.moveTo(x, y); - else - ctx.lineTo(x, y); - } - // TODO: if loop - if (vertices.length > 2) ; - if (options.fill) { - ctx.fillStyle = options.fill; - ctx.fill(); - ctx.closePath(); - } - ctx.lineCap = 'round'; - ctx.lineWidth = options.lineWidth / ratio; - ctx.strokeStyle = (_a = options.stroke) !== null && _a !== void 0 ? _a : ''; - ctx.stroke(); - }); - var sprite = Stage.sprite(texture); - sprite.tick(function () { - if (!offsetMemo.recall(offsetX, offsetY)) { - sprite.offset(offsetX, offsetY); - } - }); - var node = Stage.layout().append(sprite); - return node; - }; - return WorldStageNode; - }(Stage.Node)); - - var planck = /*#__PURE__*/Object.freeze({ - __proto__: null, - Math: math$1, - Serializer: Serializer, - Testbed: Testbed, - testbed: testbed, - Vec2: Vec2, - Vec3: Vec3, - Mat22: Mat22, - Mat33: Mat33, - Transform: Transform, - Rot: Rot, - AABB: AABB, - Shape: Shape, - FixtureProxy: FixtureProxy, - Fixture: Fixture, - Body: Body, - ContactEdge: ContactEdge, - mixFriction: mixFriction, - mixRestitution: mixRestitution, - VelocityConstraintPoint: VelocityConstraintPoint, - Contact: Contact, - JointEdge: JointEdge, - Joint: Joint, - World: World, - CircleShape: CircleShape, - Circle: Circle, - EdgeShape: EdgeShape, - Edge: Edge, - PolygonShape: PolygonShape, - Polygon: Polygon, - ChainShape: ChainShape, - Chain: Chain, - BoxShape: BoxShape, - Box: Box, - CollideCircles: CollideCircles, - CollideEdgeCircle: CollideEdgeCircle, - CollidePolygons: CollidePolygons, - CollidePolygonCircle: CollidePolygonCircle, - CollideEdgePolygon: CollideEdgePolygon, - DistanceJoint: DistanceJoint, - FrictionJoint: FrictionJoint, - GearJoint: GearJoint, - MotorJoint: MotorJoint, - MouseJoint: MouseJoint, - PrismaticJoint: PrismaticJoint, - PulleyJoint: PulleyJoint, - RevoluteJoint: RevoluteJoint, - RopeJoint: RopeJoint, - WeldJoint: WeldJoint, - WheelJoint: WheelJoint, - Settings: Settings, - SettingsInternal: SettingsInternal, - Sweep: Sweep, - get ManifoldType () { return exports.ManifoldType; }, - get ContactFeatureType () { return exports.ContactFeatureType; }, - get PointState () { return exports.PointState; }, - ClipVertex: ClipVertex, - Manifold: Manifold, - ManifoldPoint: ManifoldPoint, - ContactID: ContactID, - WorldManifold: WorldManifold, - getPointStates: getPointStates, - clipSegmentToLine: clipSegmentToLine, - DistanceInput: DistanceInput, - DistanceOutput: DistanceOutput, - SimplexCache: SimplexCache, - Distance: Distance, - DistanceProxy: DistanceProxy, - testOverlap: testOverlap, - ShapeCastInput: ShapeCastInput, - ShapeCastOutput: ShapeCastOutput, - ShapeCast: ShapeCast, - TOIInput: TOIInput, - get TOIOutputState () { return exports.TOIOutputState; }, - TOIOutput: TOIOutput, - TimeOfImpact: TimeOfImpact, - TreeNode: TreeNode, - DynamicTree: DynamicTree, - stats: stats$1, - internal: internal - }); - - exports.AABB = AABB; - exports.Body = Body; - exports.Box = Box; - exports.BoxShape = BoxShape; - exports.Chain = Chain; - exports.ChainShape = ChainShape; - exports.Circle = Circle; - exports.CircleShape = CircleShape; - exports.ClipVertex = ClipVertex; - exports.CollideCircles = CollideCircles; - exports.CollideEdgeCircle = CollideEdgeCircle; - exports.CollideEdgePolygon = CollideEdgePolygon; - exports.CollidePolygonCircle = CollidePolygonCircle; - exports.CollidePolygons = CollidePolygons; - exports.Contact = Contact; - exports.ContactEdge = ContactEdge; - exports.ContactID = ContactID; - exports.Distance = Distance; - exports.DistanceInput = DistanceInput; - exports.DistanceJoint = DistanceJoint; - exports.DistanceOutput = DistanceOutput; - exports.DistanceProxy = DistanceProxy; - exports.DynamicTree = DynamicTree; - exports.Edge = Edge; - exports.EdgeShape = EdgeShape; - exports.Fixture = Fixture; - exports.FixtureProxy = FixtureProxy; - exports.FrictionJoint = FrictionJoint; - exports.GearJoint = GearJoint; - exports.Joint = Joint; - exports.JointEdge = JointEdge; - exports.Manifold = Manifold; - exports.ManifoldPoint = ManifoldPoint; - exports.Mat22 = Mat22; - exports.Mat33 = Mat33; - exports.Math = math$1; - exports.MotorJoint = MotorJoint; - exports.MouseJoint = MouseJoint; - exports.Polygon = Polygon; - exports.PolygonShape = PolygonShape; - exports.PrismaticJoint = PrismaticJoint; - exports.PulleyJoint = PulleyJoint; - exports.RevoluteJoint = RevoluteJoint; - exports.RopeJoint = RopeJoint; - exports.Rot = Rot; - exports.Serializer = Serializer; - exports.Settings = Settings; - exports.SettingsInternal = SettingsInternal; - exports.Shape = Shape; - exports.ShapeCast = ShapeCast; - exports.ShapeCastInput = ShapeCastInput; - exports.ShapeCastOutput = ShapeCastOutput; - exports.SimplexCache = SimplexCache; - exports.Sweep = Sweep; - exports.TOIInput = TOIInput; - exports.TOIOutput = TOIOutput; - exports.Testbed = Testbed; - exports.TimeOfImpact = TimeOfImpact; - exports.Transform = Transform; - exports.TreeNode = TreeNode; - exports.Vec2 = Vec2; - exports.Vec3 = Vec3; - exports.VelocityConstraintPoint = VelocityConstraintPoint; - exports.WeldJoint = WeldJoint; - exports.WheelJoint = WheelJoint; - exports.World = World; - exports.WorldManifold = WorldManifold; - exports.clipSegmentToLine = clipSegmentToLine; - exports["default"] = planck; - exports.getPointStates = getPointStates; - exports.internal = internal; - exports.mixFriction = mixFriction; - exports.mixRestitution = mixRestitution; - exports.stats = stats$1; - exports.testOverlap = testOverlap; - exports.testbed = testbed; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); + var node = layout().append(sprite$1); + return node; + }; + return WorldStageNode2; + }(Node) + ); + const planck = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + AABB, + Body, + Box, + BoxShape, + BroadPhase, + Chain, + ChainShape, + Circle, + CircleShape, + ClipVertex, + CollideCircles, + CollideEdgeCircle, + CollideEdgePolygon, + CollidePolygonCircle, + CollidePolygons, + Contact, + ContactEdge, + get ContactFeatureType() { + return exports2.ContactFeatureType; + }, + ContactID, + ContactImpulse, + Distance, + DistanceInput, + DistanceJoint, + DistanceOutput, + DistanceProxy, + DynamicTree, + Edge, + EdgeShape, + Fixture, + FixtureProxy, + FrictionJoint, + GearJoint, + Joint, + JointEdge, + Manifold, + ManifoldPoint, + get ManifoldType() { + return exports2.ManifoldType; + }, + Mat22, + Mat33, + Math: math$1, + MotorJoint, + MouseJoint, + get PointState() { + return exports2.PointState; + }, + Polygon, + PolygonShape, + PrismaticJoint, + PulleyJoint, + RevoluteJoint, + RopeJoint, + Rot, + Serializer, + Settings, + SettingsInternal, + Shape, + ShapeCast, + ShapeCastInput, + ShapeCastOutput, + SimplexCache, + Solver, + StageTestbed, + Sweep, + TOIInput, + TOIOutput, + get TOIOutputState() { + return exports2.TOIOutputState; + }, + Testbed, + TimeOfImpact, + TimeStep, + Transform, + TreeNode, + Vec2, + Vec3, + VelocityConstraintPoint, + WeldJoint, + WheelJoint, + World, + WorldManifold, + clipSegmentToLine, + getPointStates, + internal, + mixFriction, + mixRestitution, + stats: stats$1, + testOverlap, + testbed + }, Symbol.toStringTag, { value: "Module" })); + exports2.AABB = AABB; + exports2.Body = Body; + exports2.Box = Box; + exports2.BoxShape = BoxShape; + exports2.BroadPhase = BroadPhase; + exports2.Chain = Chain; + exports2.ChainShape = ChainShape; + exports2.Circle = Circle; + exports2.CircleShape = CircleShape; + exports2.ClipVertex = ClipVertex; + exports2.CollideCircles = CollideCircles; + exports2.CollideEdgeCircle = CollideEdgeCircle; + exports2.CollideEdgePolygon = CollideEdgePolygon; + exports2.CollidePolygonCircle = CollidePolygonCircle; + exports2.CollidePolygons = CollidePolygons; + exports2.Contact = Contact; + exports2.ContactEdge = ContactEdge; + exports2.ContactID = ContactID; + exports2.ContactImpulse = ContactImpulse; + exports2.Distance = Distance; + exports2.DistanceInput = DistanceInput; + exports2.DistanceJoint = DistanceJoint; + exports2.DistanceOutput = DistanceOutput; + exports2.DistanceProxy = DistanceProxy; + exports2.DynamicTree = DynamicTree; + exports2.Edge = Edge; + exports2.EdgeShape = EdgeShape; + exports2.Fixture = Fixture; + exports2.FixtureProxy = FixtureProxy; + exports2.FrictionJoint = FrictionJoint; + exports2.GearJoint = GearJoint; + exports2.Joint = Joint; + exports2.JointEdge = JointEdge; + exports2.Manifold = Manifold; + exports2.ManifoldPoint = ManifoldPoint; + exports2.Mat22 = Mat22; + exports2.Mat33 = Mat33; + exports2.Math = math$1; + exports2.MotorJoint = MotorJoint; + exports2.MouseJoint = MouseJoint; + exports2.Polygon = Polygon; + exports2.PolygonShape = PolygonShape; + exports2.PrismaticJoint = PrismaticJoint; + exports2.PulleyJoint = PulleyJoint; + exports2.RevoluteJoint = RevoluteJoint; + exports2.RopeJoint = RopeJoint; + exports2.Rot = Rot; + exports2.Serializer = Serializer; + exports2.Settings = Settings; + exports2.SettingsInternal = SettingsInternal; + exports2.Shape = Shape; + exports2.ShapeCast = ShapeCast; + exports2.ShapeCastInput = ShapeCastInput; + exports2.ShapeCastOutput = ShapeCastOutput; + exports2.SimplexCache = SimplexCache; + exports2.Solver = Solver; + exports2.StageTestbed = StageTestbed; + exports2.Sweep = Sweep; + exports2.TOIInput = TOIInput; + exports2.TOIOutput = TOIOutput; + exports2.Testbed = Testbed; + exports2.TimeOfImpact = TimeOfImpact; + exports2.TimeStep = TimeStep; + exports2.Transform = Transform; + exports2.TreeNode = TreeNode; + exports2.Vec2 = Vec2; + exports2.Vec3 = Vec3; + exports2.VelocityConstraintPoint = VelocityConstraintPoint; + exports2.WeldJoint = WeldJoint; + exports2.WheelJoint = WheelJoint; + exports2.World = World; + exports2.WorldManifold = WorldManifold; + exports2.clipSegmentToLine = clipSegmentToLine; + exports2.default = planck; + exports2.getPointStates = getPointStates; + exports2.internal = internal; + exports2.mixFriction = mixFriction; + exports2.mixRestitution = mixRestitution; + exports2.stats = stats$1; + exports2.testOverlap = testOverlap; + exports2.testbed = testbed; + Object.defineProperties(exports2, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); +}); //# sourceMappingURL=planck-with-testbed.js.map diff --git a/dist/planck-with-testbed.js.map b/dist/planck-with-testbed.js.map index d380a826..718fed8a 100644 --- a/dist/planck-with-testbed.js.map +++ b/dist/planck-with-testbed.js.map @@ -1 +1 @@ -{"version":3,"file":"planck-with-testbed.js","sources":["../node_modules/tslib/tslib.es6.js","../src/util/options.ts","../src/common/Math.ts","../src/common/Vec2.ts","../src/collision/AABB.ts","../src/Settings.ts","../src/util/Pool.ts","../src/collision/DynamicTree.ts","../src/collision/BroadPhase.ts","../src/common/Matrix.ts","../src/common/Rot.ts","../src/common/Sweep.ts","../src/common/Transform.ts","../src/dynamics/Velocity.ts","../src/dynamics/Position.ts","../src/collision/Shape.ts","../src/dynamics/Fixture.ts","../src/dynamics/Body.ts","../src/dynamics/Joint.ts","../src/util/stats.ts","../src/util/Timer.ts","../src/collision/Distance.ts","../src/collision/TimeOfImpact.ts","../src/dynamics/Solver.ts","../src/common/Mat22.ts","../src/collision/Manifold.ts","../src/dynamics/Contact.ts","../src/dynamics/World.ts","../src/common/Vec3.ts","../src/collision/shape/EdgeShape.ts","../src/collision/shape/ChainShape.ts","../src/collision/shape/PolygonShape.ts","../src/collision/shape/CircleShape.ts","../src/dynamics/joint/DistanceJoint.ts","../src/dynamics/joint/FrictionJoint.ts","../src/common/Mat33.ts","../src/dynamics/joint/RevoluteJoint.ts","../src/dynamics/joint/PrismaticJoint.ts","../src/dynamics/joint/GearJoint.ts","../src/dynamics/joint/MotorJoint.ts","../src/dynamics/joint/MouseJoint.ts","../src/dynamics/joint/PulleyJoint.ts","../src/dynamics/joint/RopeJoint.ts","../src/dynamics/joint/WeldJoint.ts","../src/dynamics/joint/WheelJoint.ts","../src/serializer/index.ts","../src/util/Testbed.ts","../src/collision/shape/BoxShape.ts","../src/collision/shape/CollideCircle.ts","../src/collision/shape/CollideEdgeCircle.ts","../src/collision/shape/CollidePolygon.ts","../src/collision/shape/CollideCirclePolygon.ts","../src/collision/shape/CollideEdgePolygon.ts","../src/internal.ts","../node_modules/stage-js/dist/stage.js","../testbed/StageTestbed.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/** @internal */\nexport const options = function(input: T, defaults: object): T {\n if (input === null || typeof input === \"undefined\") {\n // tslint:disable-next-line:no-object-literal-type-assertion\n input = {} as T;\n }\n\n const output = {...input};\n\n // tslint:disable-next-line:no-for-in\n for (const key in defaults) {\n if (defaults.hasOwnProperty(key) && typeof input[key] === \"undefined\") {\n output[key] = defaults[key];\n }\n }\n\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n const symbols = Object.getOwnPropertySymbols(defaults);\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n if (defaults.propertyIsEnumerable(symbol) && typeof input[symbol] === \"undefined\") {\n output[symbol] = defaults[symbol];\n }\n }\n }\n\n return output;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_random = Math.random;\n\n\nexport const EPSILON = 1e-9;\n\n/** @internal @deprecated */\nexport const isFinite = Number.isFinite;\n\n/**\n * @deprecated\n * Next Largest Power of 2 Given a binary integer value x, the next largest\n * power of 2 can be computed by a SWAR algorithm that recursively \"folds\" the\n * upper bits into the lower bits. This process yields a bit vector with the\n * same most significant 1 as x, but all 1's below it. Adding 1 to that value\n * yields the next largest power of 2. For a 32-bit value:\n */\nexport function nextPowerOfTwo(x: number): number {\n x |= (x >> 1);\n x |= (x >> 2);\n x |= (x >> 4);\n x |= (x >> 8);\n x |= (x >> 16);\n return x + 1;\n}\n\n/** @deprecated */\nexport function isPowerOfTwo(x: number): boolean {\n return x > 0 && (x & (x - 1)) === 0;\n}\n\n/** @deprecated */\nexport function mod(num: number, min?: number, max?: number): number {\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}\n\n/**\n * @deprecated\n * Returns a min if num is less than min, and max if more than max, otherwise returns num.\n */\nexport function clamp(num: number, min: number, max: number): number {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n } else {\n return num;\n }\n}\n\n/**\n * @deprecated\n * Returns a random number between min and max when two arguments are provided.\n * If one arg is provided between 0 to max.\n * If one arg is passed between 0 to 1.\n */\nexport function random(min?: number, max?: number): number {\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}\n\n/** @ignore */\nexport const 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;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"./Math\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\nexport interface Vec2Value {\n x: number;\n y: number;\n}\n\nexport class Vec2 {\n x: number;\n y: number;\n\n constructor(x: number, y: number);\n constructor(obj: { x: number, y: number });\n constructor();\n // tslint:disable-next-line:typedef\n constructor(x?, y?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec2)) {\n return new Vec2(x, y);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n } else {\n this.x = x;\n this.y = y;\n }\n _ASSERT && Vec2.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = data.x;\n obj.y = data.y;\n return obj;\n }\n\n static zero(): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = 0;\n obj.y = 0;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = x;\n obj.y = y;\n return obj;\n }\n\n static clone(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(v.x, v.y);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /**\n * Does this vector contain finite coordinates?\n */\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.x) && Number.isFinite(obj.y);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec2.isValid(o), \"Invalid Vec2!\", o);\n }\n\n clone(): Vec2 {\n return Vec2.clone(this);\n }\n\n /**\n * Set this vector to all zeros.\n *\n * @returns this\n */\n setZero(): Vec2 {\n this.x = 0.0;\n this.y = 0.0;\n return this;\n }\n\n set(x: number, y: number): Vec2;\n set(value: Vec2Value): Vec2;\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n // tslint:disable-next-line:typedef\n set(x, y?) {\n if (typeof x === \"object\") {\n _ASSERT && Vec2.assert(x);\n this.x = x.x;\n this.y = x.y;\n } else {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n }\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setNum(x: number, y: number) {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setVec2(value: Vec2Value) {\n _ASSERT && Vec2.assert(value);\n this.x = value.x;\n this.y = value.y;\n\n return this;\n }\n\n /** @internal @deprecated Use setCombine or setMul */\n wSet(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.setCombine(a, v, b, w);\n } else {\n return this.setMul(a, v);\n }\n }\n\n /**\n * Set linear combination of v and w: `a * v + b * w`\n */\n setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x = x;\n this.y = y;\n return this;\n }\n\n setMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * Add a vector to this vector.\n *\n * @returns this\n */\n add(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x += w.x;\n this.y += w.y;\n return this;\n }\n\n /** @internal @deprecated Use addCombine or addMul */\n wAdd(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.addCombine(a, v, b, w);\n } else {\n return this.addMul(a, v);\n }\n }\n\n /**\n * Add linear combination of v and w: `a * v + b * w`\n */\n addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x += x;\n this.y += y;\n return this;\n }\n\n addMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x += x;\n this.y += y;\n return this;\n }\n\n /**\n * @deprecated Use subCombine or subMul\n */\n wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.subCombine(a, v, b, w);\n } else {\n return this.subMul(a, v);\n }}\n\n /**\n * Subtract linear combination of v and w: `a * v + b * w`\n */\n subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n subMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n /**\n * Subtract a vector from this vector\n *\n * @returns this\n */\n sub(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x -= w.x;\n this.y -= w.y;\n return this;\n }\n\n /**\n * Multiply this vector by a scalar.\n *\n * @returns this\n */\n mul(m: number): Vec2 {\n _ASSERT && console.assert(Number.isFinite(m));\n this.x *= m;\n this.y *= m;\n return this;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n length(): number {\n return Vec2.lengthOf(this);\n }\n\n /**\n * Get the length squared.\n */\n lengthSquared(): number {\n return Vec2.lengthSquared(this);\n }\n\n /**\n * Convert this vector into a unit vector.\n *\n * @returns old length\n */\n normalize(): number {\n const length = this.length();\n if (length < EPSILON) {\n return 0.0;\n }\n const invLength = 1.0 / length;\n this.x *= invLength;\n this.y *= invLength;\n return length;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n static lengthOf(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return math_sqrt(v.x * v.x + v.y * v.y);\n }\n\n /**\n * Get the length squared.\n */\n static lengthSquared(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return v.x * v.x + v.y * v.y;\n }\n\n static distance(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return math_sqrt(dx * dx + dy * dy);\n }\n\n static distanceSquared(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return dx * dx + dy * dy;\n }\n\n static areEqual(v: Vec2Value, w: Vec2Value): boolean {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v === w || typeof w === \"object\" && w !== null && v.x === w.x && v.y === w.y;\n }\n\n /**\n * Get the skew vector such that dot(skew_vec, other) == cross(vec, other)\n */\n static skew(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.y, v.x);\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.x + v.y * w.y;\n }\n\n /** Cross product between two vectors */\n static cross(v: Vec2Value, w: Vec2Value): number;\n /** Cross product between a vector and a scalar */\n static cross(v: Vec2Value, w: number): Vec2;\n /** Cross product between a scalar and a vector */\n static cross(v: number, w: Vec2Value): Vec2;\n static cross(v: any, w: any): any {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n\n } else {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n }\n\n /** Cross product on two vectors */\n static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n\n /** Cross product on a vector and a scalar */\n static crossVec2Num(v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n }\n\n /** Cross product on a vector and a scalar */\n static crossNumVec2(v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n }\n\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2;\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2;\n static addCross(a: Vec2Value, v: any, w: any): Vec2 {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n static add(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x + w.x, v.y + w.y);\n }\n\n /** @hidden @deprecated */\n static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return Vec2.combine(a, v, b, w);\n } else {\n return Vec2.mulNumVec2(a, v);\n }\n }\n\n static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n return Vec2.zero().setCombine(a, v, b, w);\n }\n\n static sub(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x - w.x, v.y - w.y);\n }\n\n static mul(a: Vec2Value, b: number): Vec2;\n static mul(a: number, b: Vec2Value): Vec2;\n static mul(a: any, b: any): Vec2 {\n if (typeof a === \"object\") {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n\n } else if (typeof b === \"object\") {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n }\n\n static mulVec2Num(a: Vec2Value, b: number): Vec2 {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n }\n\n static mulNumVec2(a: number, b: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n\n neg(): Vec2 {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n\n static neg(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.x, -v.y);\n }\n\n static abs(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(math_abs(v.x), math_abs(v.y));\n }\n\n static mid(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo((v.x + w.x) * 0.5, (v.y + w.y) * 0.5);\n }\n\n static upper(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_max(v.x, w.x), math_max(v.y, w.y));\n }\n\n static lower(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_min(v.x, w.x), math_min(v.y, w.y));\n }\n\n clamp(max: number): Vec2 {\n const lengthSqr = this.x * this.x + this.y * this.y;\n if (lengthSqr > max * max) {\n const scale = max / math_sqrt(lengthSqr);\n this.x *= scale;\n this.y *= scale;\n }\n return this;\n }\n\n static clamp(v: Vec2Value, max: number): Vec2 {\n const r = Vec2.neo(v.x, v.y);\n r.clamp(max);\n return r;\n }\n\n /** @hidden @deprecated */\n static scaleFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x * x, v.y * y);\n };\n }\n\n /** @hidden @deprecated */\n static translateFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x + x, v.y + y);\n };\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/**\n * Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n */\nexport interface RayCastInput {\n p1: Vec2Value;\n p2: Vec2Value;\n maxFraction: number;\n}\n\nexport type RayCastCallback = (subInput: RayCastInput, id: number) => number;\n\n/**\n * Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`,\n * where `p1` and `p2` come from RayCastInput.\n */\nexport interface RayCastOutput {\n normal: Vec2;\n fraction: number;\n}\n\nexport interface AABBValue {\n lowerBound: Vec2Value;\n upperBound: Vec2Value;\n}\n\nexport class AABB {\n lowerBound: Vec2;\n upperBound: Vec2;\n\n constructor(lower?: Vec2Value, upper?: Vec2Value) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof AABB)) {\n return new AABB(lower, upper);\n }\n\n this.lowerBound = Vec2.zero();\n this.upperBound = Vec2.zero();\n\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\n /**\n * Verify that the bounds are sorted.\n */\n isValid(): boolean {\n return AABB.isValid(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!AABB.isValid(o), \"Invalid AABB!\", o);\n }\n\n /**\n * Get the center of the AABB.\n */\n getCenter(): Vec2 {\n return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5);\n }\n\n /**\n * Get the extents of the AABB (half-widths).\n */\n getExtents(): Vec2 {\n return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5);\n }\n\n /**\n * Get the perimeter length.\n */\n getPerimeter(): number {\n return 2.0 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y);\n }\n\n /**\n * Combine one or two AABB into this one.\n */\n combine(a: AABBValue, b?: AABBValue): void {\n b = b || this;\n\n const lowerA = a.lowerBound;\n const upperA = a.upperBound;\n const lowerB = b.lowerBound;\n const upperB = b.upperBound;\n\n const lowerX = math_min(lowerA.x, lowerB.x);\n const lowerY = math_min(lowerA.y, lowerB.y);\n const upperX = math_max(upperB.x, upperA.x);\n const upperY = math_max(upperB.y, upperA.y);\n\n this.lowerBound.setNum(lowerX, lowerY);\n this.upperBound.setNum(upperX, upperY);\n }\n\n combinePoints(a: Vec2Value, b: Vec2Value): void {\n this.lowerBound.setNum(math_min(a.x, b.x), math_min(a.y, b.y));\n this.upperBound.setNum(math_max(a.x, b.x), math_max(a.y, b.y));\n }\n\n set(aabb: AABBValue): void {\n this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y);\n this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y);\n }\n\n contains(aabb: AABBValue): boolean {\n let 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\n extend(value: number): AABB {\n AABB.extend(this, value);\n return this;\n }\n\n static extend(out: AABBValue, value: number): AABBValue {\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\n static testOverlap(a: AABBValue, b: AABBValue): boolean {\n const d1x = b.lowerBound.x - a.upperBound.x;\n const d2x = a.lowerBound.x - b.upperBound.x;\n\n const d1y = b.lowerBound.y - a.upperBound.y;\n const d2y = a.lowerBound.y - b.upperBound.y;\n\n if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) {\n return false;\n }\n return true;\n }\n\n static areEqual(a: AABBValue, b: AABBValue): boolean {\n return Vec2.areEqual(a.lowerBound, b.lowerBound) && Vec2.areEqual(a.upperBound, b.upperBound);\n }\n\n static diff(a: AABBValue, b: AABBValue): number {\n const wD = math_max(0, math_min(a.upperBound.x, b.upperBound.x) - math_max(b.lowerBound.x, a.lowerBound.x));\n const hD = math_max(0, math_min(a.upperBound.y, b.upperBound.y) - math_max(b.lowerBound.y, a.lowerBound.y));\n\n const wA = a.upperBound.x - a.lowerBound.x;\n const hA = a.upperBound.y - a.lowerBound.y;\n\n const wB = b.upperBound.x - b.lowerBound.x;\n const hB = b.upperBound.y - b.lowerBound.y;\n\n return wA * hA + wB * hB - wD * hD;\n }\n\n rayCast(output: RayCastOutput, input: RayCastInput): boolean {\n // From Real-time Collision Detection, p179.\n\n let tmin = -Infinity;\n let tmax = Infinity;\n\n const p = input.p1;\n const d = Vec2.sub(input.p2, input.p1);\n const absD = Vec2.abs(d);\n\n const normal = Vec2.zero();\n\n for (let f: \"x\" | \"y\" = \"x\"; f !== null; f = (f === \"x\" ? \"y\" : null)) {\n if (absD.x < EPSILON) {\n // Parallel.\n if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) {\n return false;\n }\n } else {\n const inv_d = 1.0 / d[f];\n let t1 = (this.lowerBound[f] - p[f]) * inv_d;\n let t2 = (this.upperBound[f] - p[f]) * inv_d;\n\n // Sign of the normal vector.\n let s = -1.0;\n\n if (t1 > t2) {\n const temp = t1;\n t1 = t2;\n t2 = temp;\n s = 1.0;\n }\n\n // Push the min up\n if (t1 > tmin) {\n normal.setZero();\n normal[f] = s;\n tmin = t1;\n }\n\n // Pull the max down\n tmax = math_min(tmax, t2);\n\n if (tmin > tmax) {\n return false;\n }\n }\n }\n\n // Does the ray start inside the box?\n // Does the ray intersect beyond the max fraction?\n if (tmin < 0.0 || input.maxFraction < tmin) {\n return false;\n }\n\n // Intersection.\n output.fraction = tmin;\n output.normal = normal;\n return true;\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue {\n out.lowerBound.x = math_min(a.x, b.x);\n out.lowerBound.y = math_min(a.y, b.y);\n out.upperBound.x = math_max(a.x, b.x);\n out.upperBound.y = math_max(a.y, b.y);\n return out;\n }\n\n static combinedPerimeter(a: AABBValue, b: AABBValue) {\n const lx = math_min(a.lowerBound.x, b.lowerBound.x);\n const ly = math_min(a.lowerBound.y, b.lowerBound.y);\n const ux = math_max(a.upperBound.x, b.upperBound.x);\n const uy = math_max(a.upperBound.y, b.upperBound.y);\n return 2.0 * (ux - lx + uy - ly); \n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Tuning constants based on meters-kilograms-seconds (MKS) units.\n * \n * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units.\n */\nexport class Settings {\n /**\n * You can use this to change the length scale used by your game.\n * \n * For example for inches you could use 39.4.\n */\n static lengthUnitsPerMeter = 1.0;\n \n // Collision\n /**\n * The maximum number of contact points between two convex shapes. Do not change\n * this value.\n */\n static maxManifoldPoints: number = 2;\n\n /**\n * The maximum number of vertices on a convex polygon. You cannot increase this\n * too much because BlockAllocator has a maximum object size.\n */\n static maxPolygonVertices: number = 12;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This allows proxies to move\n * by a small amount without triggering a tree adjustment. This is in meters.\n */\n static aabbExtension: number = 0.1;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This is used to predict the\n * future position based on the current displacement. This is a dimensionless\n * multiplier.\n */\n static aabbMultiplier: number = 2.0;\n\n /**\n * A small length used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static linearSlop: number = 0.005;\n\n /**\n * A small angle used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static angularSlop: number = (2.0 / 180.0 * math_PI);\n\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 static get polygonRadius(): number { return 2.0 * Settings.linearSlop; }\n\n /**\n * Maximum number of sub-steps per contact in continuous physics simulation.\n */\n static maxSubSteps: number = 8;\n\n // Dynamics\n\n /**\n * Maximum number of contacts to be handled to solve a TOI impact.\n */\n static maxTOIContacts: number = 32;\n\n /**\n * Maximum iterations to solve a TOI.\n */\n static maxTOIIterations: number = 20;\n\n /**\n * Maximum iterations to find Distance.\n */\n static maxDistanceIterations: number = 20;\n\n /**\n * A velocity threshold for elastic collisions. Any collision with a relative\n * linear velocity below this threshold will be treated as inelastic.\n */\n static velocityThreshold: number = 1.0;\n\n /**\n * The maximum linear position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxLinearCorrection: number = 0.2;\n\n /**\n * The maximum angular position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxAngularCorrection: number = (8.0 / 180.0 * math_PI);\n\n /**\n * The maximum linear velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxTranslation: number = 2.0;\n\n /**\n * The maximum angular velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxRotation: number = (0.5 * math_PI);\n\n /**\n * This scale factor controls how fast overlap is resolved. Ideally this would\n * be 1 so that overlap is removed in one time step. However using values close\n * to 1 often lead to overshoot.\n */\n static baumgarte: number = 0.2;\n static toiBaugarte: number = 0.75;\n\n // Sleep\n\n /**\n * The time that a body must be still before it will go to sleep.\n */\n static timeToSleep: number = 0.5;\n\n /**\n * A body cannot sleep if its linear velocity is above this tolerance.\n */\n static linearSleepTolerance: number = 0.01;\n\n /**\n * A body cannot sleep if its angular velocity is above this tolerance.\n */\n static angularSleepTolerance: number = (2.0 / 180.0 * math_PI);\n}\n\n/** @internal */\nexport class SettingsInternal {\n static get maxManifoldPoints() {\n return Settings.maxManifoldPoints;\n }\n static get maxPolygonVertices() {\n return Settings.maxPolygonVertices;\n }\n static get aabbExtension() {\n return Settings.aabbExtension * Settings.lengthUnitsPerMeter;\n }\n static get aabbMultiplier() {\n return Settings.aabbMultiplier;\n }\n static get linearSlop() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get linearSlopSquared() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get angularSlop() {\n return Settings.angularSlop;\n }\n static get polygonRadius() {\n return 2.0 * Settings.linearSlop;\n }\n static get maxSubSteps() {\n return Settings.maxSubSteps;\n }\n static get maxTOIContacts() {\n return Settings.maxTOIContacts;\n }\n static get maxTOIIterations() {\n return Settings.maxTOIIterations;\n }\n static get maxDistanceIterations() {\n return Settings.maxDistanceIterations;\n }\n static get velocityThreshold() {\n return Settings.velocityThreshold * Settings.lengthUnitsPerMeter;\n }\n static get maxLinearCorrection() {\n return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter;\n }\n static get maxAngularCorrection() {\n return Settings.maxAngularCorrection;\n }\n static get maxTranslation() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxTranslationSquared() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxRotation() {\n return Settings.maxRotation;\n }\n static get maxRotationSquared() {\n return Settings.maxRotation * Settings.maxRotation;\n }\n static get baumgarte() {\n return Settings.baumgarte;\n }\n static get toiBaugarte() {\n return Settings.toiBaugarte;\n }\n static get timeToSleep() {\n return Settings.timeToSleep;\n }\n static get linearSleepTolerance() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get linearSleepToleranceSqr() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get angularSleepTolerance() {\n return Settings.angularSleepTolerance;\n }\n static get angularSleepToleranceSqr() {\n return Settings.angularSleepTolerance * Settings.angularSleepTolerance;\n }\n}\n","/*\n * Copyright (c) 2016-2018 Ali Shakiba http://shakiba.me/planck.js\n *\n * This software is provided 'as-is', without any express or implied\n * warranty. In no event will the authors be held liable for any damages\n * arising from the use of this software.\n * Permission is granted to anyone to use this software for any purpose,\n * including commercial applications, and to alter it and redistribute it\n * freely, subject to the following restrictions:\n * 1. The origin of this software must not be misrepresented; you must not\n * claim that you wrote the original software. If you use this software\n * in a product, an acknowledgment in the product documentation would be\n * appreciated but is not required.\n * 2. Altered source versions must be plainly marked as such, and must not be\n * misrepresented as being the original software.\n * 3. This notice may not be removed or altered from any source distribution.\n */\n\n/** @internal */\nexport interface PoolOptions {\n max?: number,\n create?: () => T,\n /** Called when an object is being re-allocated. */\n allocate?: (item: T) => void,\n /** Called when an object is returned to pool. */\n release?: (item: T) => void,\n /** Called when an object is returned to the pool but will be disposed from pool. */\n dispose?: (item: T) => T,\n}\n\n/** @internal */\nexport class Pool {\n _list: T[] = [];\n _max: number = Infinity;\n\n _createFn: () => T;\n _hasCreateFn: boolean = false;\n _createCount: number = 0;\n\n _allocateFn: (item: T) => void;\n _hasAllocateFn: boolean = false;\n _allocateCount: number = 0;\n\n _releaseFn: (item: T) => void;\n _hasReleaseFn: boolean = false;\n _releaseCount: number = 0;\n\n _disposeFn: (item: T) => T;\n _hasDisposeFn: boolean = false;\n _disposeCount: number = 0;\n\n constructor(opts: PoolOptions) {\n this._list = [];\n this._max = opts.max || this._max;\n\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\n max(n?: number): number | Pool {\n if (typeof n === \"number\") {\n this._max = n;\n return this;\n }\n return this._max;\n }\n\n size(): number {\n return this._list.length;\n }\n\n allocate(): T {\n let item: T;\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 // tslint:disable-next-line:no-object-literal-type-assertion\n item = {} as T;\n }\n }\n this._allocateCount++;\n if (this._hasAllocateFn) {\n this._allocateFn(item);\n }\n return item;\n }\n\n release(item: T): void {\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\n toString(): string {\n return \" +\" + this._createCount + \" >\" + this._allocateCount + \" <\" + this._releaseCount + \" -\"\n + this._disposeCount + \" =\" + this._list.length + \"/\" + this._max;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Pool } from \"../util/Pool\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\nexport type DynamicTreeQueryCallback = (nodeId: number) => boolean;\n\n/**\n * A node in the dynamic tree. The client does not interact with this directly.\n */\nexport class TreeNode {\n id: number;\n /** Enlarged AABB */\n aabb: AABB = new AABB();\n userData: T = null;\n parent: TreeNode = null;\n child1: TreeNode = null;\n child2: TreeNode = null;\n /** 0: leaf, -1: free node */\n height: number = -1;\n\n constructor(id?: number) {\n this.id = id;\n }\n\n /** @internal */\n toString(): string {\n return this.id + \": \" + this.userData;\n }\n\n isLeaf(): boolean {\n return this.child1 == null;\n }\n}\n\n/** @internal */ const poolTreeNode = new Pool>({\n create(): TreeNode {\n return new TreeNode();\n },\n release(node: TreeNode) {\n node.userData = null;\n node.parent = null;\n node.child1 = null;\n node.child2 = null;\n node.height = -1;\n node.id = undefined;\n }\n});\n\n/**\n * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A\n * dynamic tree arranges data in a binary tree to accelerate queries such as\n * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we\n * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger\n * than the client object. This allows the client object to move by small\n * amounts without triggering a tree update.\n *\n * Nodes are pooled and relocatable, so we use node indices rather than\n * pointers.\n */\nexport class DynamicTree {\n m_root: TreeNode;\n m_lastProxyId: number;\n m_nodes: {\n [id: number]: TreeNode\n };\n\n constructor() {\n this.m_root = null;\n this.m_nodes = {};\n this.m_lastProxyId = 0;\n }\n\n /**\n * Get proxy user data.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getUserData(id: number): T {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.userData;\n }\n\n /**\n * Get the fat AABB for a node id.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getFatAABB(id: number): AABB {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.aabb;\n }\n\n allocateNode(): TreeNode {\n const node = poolTreeNode.allocate();\n node.id = ++this.m_lastProxyId;\n this.m_nodes[node.id] = node;\n return node;\n }\n\n freeNode(node: TreeNode): void {\n // tslint:disable-next-line:no-dynamic-delete\n delete this.m_nodes[node.id];\n poolTreeNode.release(node);\n }\n\n /**\n * Create a proxy in the tree as a leaf node. We return the index of the node\n * instead of a pointer so that we can grow the node pool.\n *\n * Create a proxy. Provide a tight fitting AABB and a userData pointer.\n */\n createProxy(aabb: AABBValue, userData: T): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n\n const node = this.allocateNode();\n\n node.aabb.set(aabb);\n\n // Fatten the aabb.\n AABB.extend(node.aabb, Settings.aabbExtension);\n\n node.userData = userData;\n node.height = 0;\n\n this.insertLeaf(node);\n\n return node.id;\n }\n\n /**\n * Destroy a proxy. This asserts if the id is invalid.\n */\n destroyProxy(id: number): void {\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n this.removeLeaf(node);\n this.freeNode(node);\n }\n\n /**\n * Move a proxy with a swepted AABB. If the proxy has moved outside of its\n * fattened AABB, then the proxy is removed from the tree and re-inserted.\n * Otherwise the function returns immediately.\n *\n * @param d Displacement\n *\n * @return true if the proxy was re-inserted.\n */\n moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean {\n _ASSERT && console.assert(AABB.isValid(aabb));\n _ASSERT && console.assert(!d || Vec2.isValid(d));\n\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n if (node.aabb.contains(aabb)) {\n return false;\n }\n\n this.removeLeaf(node);\n\n node.aabb.set(aabb);\n\n // Extend AABB.\n aabb = node.aabb;\n AABB.extend(aabb, Settings.aabbExtension);\n\n // Predict AABB displacement.\n // const d = Vec2.mul(Settings.aabbMultiplier, displacement);\n\n if (d.x < 0.0) {\n aabb.lowerBound.x += d.x * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.x += d.x * Settings.aabbMultiplier;\n }\n\n if (d.y < 0.0) {\n aabb.lowerBound.y += d.y * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.y += d.y * Settings.aabbMultiplier;\n }\n\n this.insertLeaf(node);\n\n return true;\n }\n\n insertLeaf(leaf: TreeNode): void {\n _ASSERT && console.assert(AABB.isValid(leaf.aabb));\n\n if (this.m_root == null) {\n this.m_root = leaf;\n this.m_root.parent = null;\n return;\n }\n\n // Find the best sibling for this node\n const leafAABB = leaf.aabb;\n let index = this.m_root;\n while (!index.isLeaf()) {\n const child1 = index.child1;\n const child2 = index.child2;\n\n const area = index.aabb.getPerimeter();\n\n const combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB);\n\n // Cost of creating a new parent for this node and the new leaf\n const cost = 2.0 * combinedArea;\n\n // Minimum cost of pushing the leaf further down the tree\n const inheritanceCost = 2.0 * (combinedArea - area);\n\n // Cost of descending into child1\n const newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb);\n let cost1 = newArea1 + inheritanceCost;\n if (!child1.isLeaf()) {\n const oldArea = child1.aabb.getPerimeter();\n cost1 -= oldArea;\n }\n\n // Cost of descending into child2\n const newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb);\n let cost2 = newArea2 + inheritanceCost;\n if (!child2.isLeaf()) {\n const oldArea = child2.aabb.getPerimeter();\n cost2 -= oldArea;\n }\n\n // Descend according to the minimum cost.\n if (cost < cost1 && cost < cost2) {\n break;\n }\n\n // Descend\n if (cost1 < cost2) {\n index = child1;\n } else {\n index = child2;\n }\n }\n\n const sibling = index;\n\n // Create a new parent.\n const oldParent = sibling.parent;\n const 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\n if (oldParent != null) {\n // The sibling was not the root.\n if (oldParent.child1 === sibling) {\n oldParent.child1 = newParent;\n } else {\n oldParent.child2 = newParent;\n }\n\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n } else {\n // The sibling was the root.\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n this.m_root = newParent;\n }\n\n // Walk back up the tree fixing heights and AABBs\n index = leaf.parent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n _ASSERT && console.assert(child1 != null);\n _ASSERT && console.assert(child2 != null);\n\n index.height = 1 + math_max(child1.height, child2.height);\n index.aabb.combine(child1.aabb, child2.aabb);\n\n index = index.parent;\n }\n\n // validate();\n }\n\n removeLeaf(leaf: TreeNode): void {\n if (leaf === this.m_root) {\n this.m_root = null;\n return;\n }\n\n const parent = leaf.parent;\n const grandParent = parent.parent;\n let sibling;\n if (parent.child1 === leaf) {\n sibling = parent.child2;\n } else {\n sibling = parent.child1;\n }\n\n if (grandParent != null) {\n // Destroy parent and connect sibling to grandParent.\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\n // Adjust ancestor bounds.\n let index = grandParent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n index.aabb.combine(child1.aabb, child2.aabb);\n index.height = 1 + math_max(child1.height, child2.height);\n\n index = index.parent;\n }\n } else {\n this.m_root = sibling;\n sibling.parent = null;\n this.freeNode(parent);\n }\n\n // validate();\n }\n\n /**\n * Perform a left or right rotation if node A is imbalanced. Returns the new\n * root index.\n */\n balance(iA: TreeNode): TreeNode {\n _ASSERT && console.assert(iA != null);\n\n const A = iA;\n if (A.isLeaf() || A.height < 2) {\n return iA;\n }\n\n const B = A.child1;\n const C = A.child2;\n\n const balance = C.height - B.height;\n\n // Rotate C up\n if (balance > 1) {\n const F = C.child1;\n const G = C.child2;\n\n // Swap A and C\n C.child1 = A;\n C.parent = A.parent;\n A.parent = C;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(B.height, G.height);\n C.height = 1 + math_max(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\n A.height = 1 + math_max(B.height, F.height);\n C.height = 1 + math_max(A.height, G.height);\n }\n\n return C;\n }\n\n // Rotate B up\n if (balance < -1) {\n const D = B.child1;\n const E = B.child2;\n\n // Swap A and B\n B.child1 = A;\n B.parent = A.parent;\n A.parent = B;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(C.height, E.height);\n B.height = 1 + math_max(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\n A.height = 1 + math_max(C.height, D.height);\n B.height = 1 + math_max(A.height, E.height);\n }\n\n return B;\n }\n\n return A;\n }\n\n /**\n * Compute the height of the binary tree in O(N) time. Should not be called\n * often.\n */\n getHeight(): number {\n if (this.m_root == null) {\n return 0;\n }\n\n return this.m_root.height;\n }\n\n /**\n * Get the ratio of the sum of the node areas to the root area.\n */\n getAreaRatio(): number {\n if (this.m_root == null) {\n return 0.0;\n }\n\n const root = this.m_root;\n const rootArea = root.aabb.getPerimeter();\n\n let totalArea = 0.0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // Free node in pool\n continue;\n }\n\n totalArea += node.aabb.getPerimeter();\n }\n\n this.iteratorPool.release(it);\n\n return totalArea / rootArea;\n }\n\n /**\n * Compute the height of a sub-tree.\n */\n computeHeight(id?: number): number {\n let node;\n if (typeof id !== \"undefined\") {\n node = this.m_nodes[id];\n } else {\n node = this.m_root;\n }\n\n // _ASSERT && console.assert(0 <= id && id < this.m_nodeCapacity);\n\n if (node.isLeaf()) {\n return 0;\n }\n\n const height1 = this.computeHeight(node.child1.id);\n const height2 = this.computeHeight(node.child2.id);\n return 1 + math_max(height1, height2);\n }\n\n validateStructure(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n if (node === this.m_root) {\n _ASSERT && console.assert(node.parent == null);\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n _ASSERT && console.assert(child1.parent === node);\n _ASSERT && console.assert(child2.parent === node);\n\n this.validateStructure(child1);\n this.validateStructure(child2);\n }\n\n validateMetrics(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n const height1 = child1.height;\n const height2 = child2.height;\n const height = 1 + math_max(height1, height2);\n _ASSERT && console.assert(node.height === height);\n\n const aabb = new AABB();\n aabb.combine(child1.aabb, child2.aabb);\n\n _ASSERT && console.assert(AABB.areEqual(aabb, node.aabb));\n\n this.validateMetrics(child1);\n this.validateMetrics(child2);\n }\n\n /**\n * Validate this tree. For testing.\n */\n validate(): void {\n if (!_ASSERT) return;\n this.validateStructure(this.m_root);\n this.validateMetrics(this.m_root);\n\n console.assert(this.getHeight() === this.computeHeight());\n }\n\n /**\n * Get the maximum balance of an node in the tree. The balance is the difference\n * in height of the two children of a node.\n */\n getMaxBalance(): number {\n let maxBalance = 0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height <= 1) {\n continue;\n }\n\n _ASSERT && console.assert(!node.isLeaf());\n\n const balance = math_abs(node.child2.height - node.child1.height);\n maxBalance = math_max(maxBalance, balance);\n }\n this.iteratorPool.release(it);\n\n return maxBalance;\n }\n\n /**\n * Build an optimal tree. Very expensive. For testing.\n */\n rebuildBottomUp(): void {\n const nodes = [];\n let count = 0;\n\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // free node in pool\n continue;\n }\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\n while (count > 1) {\n let minCost = Infinity;\n let iMin = -1;\n let jMin = -1;\n for (let i = 0; i < count; ++i) {\n const aabbi = nodes[i].aabb;\n for (let j = i + 1; j < count; ++j) {\n const aabbj = nodes[j].aabb;\n const cost = AABB.combinedPerimeter(aabbi, aabbj);\n if (cost < minCost) {\n iMin = i;\n jMin = j;\n minCost = cost;\n }\n }\n }\n\n const child1 = nodes[iMin];\n const child2 = nodes[jMin];\n\n const parent = this.allocateNode();\n parent.child1 = child1;\n parent.child2 = child2;\n parent.height = 1 + math_max(child1.height, child2.height);\n parent.aabb.combine(child1.aabb, child2.aabb);\n parent.parent = null;\n\n child1.parent = parent;\n child2.parent = parent;\n\n nodes[jMin] = nodes[count - 1];\n nodes[iMin] = parent;\n --count;\n }\n\n this.m_root = nodes[0];\n\n _ASSERT && this.validate();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n const 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\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void {\n _ASSERT && console.assert(typeof queryCallback === \"function\");\n const stack = this.stackPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, aabb)) {\n if (node.isLeaf()) {\n const 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\n this.stackPool.release(stack);\n }\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n // TODO: GC\n _ASSERT && console.assert(typeof rayCastCallback === \"function\");\n const p1 = input.p1;\n const p2 = input.p2;\n const r = Vec2.sub(p2, p1);\n _ASSERT && console.assert(r.lengthSquared() > 0.0);\n r.normalize();\n\n // v is perpendicular to the segment.\n const v = Vec2.crossNumVec2(1.0, r);\n const abs_v = Vec2.abs(v);\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n\n let maxFraction = input.maxFraction;\n\n // Build a bounding box for the segment.\n const segmentAABB = new AABB();\n let t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2);\n segmentAABB.combinePoints(p1, t);\n\n const stack = this.stackPool.allocate();\n const subInput = this.inputPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, segmentAABB) === false) {\n continue;\n }\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n const c = node.aabb.getCenter();\n const h = node.aabb.getExtents();\n const separation = math_abs(Vec2.dot(v, Vec2.sub(p1, c))) - Vec2.dot(abs_v, h);\n if (separation > 0.0) {\n continue;\n }\n\n if (node.isLeaf()) {\n subInput.p1 = Vec2.clone(input.p1);\n subInput.p2 = Vec2.clone(input.p2);\n subInput.maxFraction = maxFraction;\n\n const value = rayCastCallback(subInput, node.id);\n\n if (value === 0.0) {\n // The client has terminated the ray cast.\n break;\n } else if (value > 0.0) {\n // update segment bounding box.\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\n private inputPool: Pool = new Pool({\n create(): RayCastInput {\n // tslint:disable-next-line:no-object-literal-type-assertion\n return {} as RayCastInput;\n },\n release(stack: RayCastInput): void {\n }\n });\n\n private stackPool: Pool>> = new Pool>>({\n create(): Array> {\n return [];\n },\n release(stack: Array>): void {\n stack.length = 0;\n }\n });\n\n private iteratorPool: Pool> = new Pool>({\n create(): Iterator {\n return new Iterator();\n },\n release(iterator: Iterator): void {\n iterator.close();\n }\n });\n\n}\n\n/** @internal */\nclass Iterator {\n parents: Array> = [];\n states: number[] = [];\n preorder(root: TreeNode): Iterator {\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 next(): TreeNode {\n while (this.parents.length > 0) {\n const i = this.parents.length - 1;\n const 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 close(): void {\n this.parents.length = 0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\nimport { DynamicTree, DynamicTreeQueryCallback } from \"./DynamicTree\";\nimport { FixtureProxy } from \"../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/**\n * The broad-phase wraps and extends a dynamic-tree to keep track of moved\n * objects and query them on update.\n */\nexport class BroadPhase {\n m_tree: DynamicTree = new DynamicTree();\n m_moveBuffer: number[] = [];\n\n m_callback: (userDataA: any, userDataB: any) => void;\n m_queryProxyId: number;\n\n /**\n * Get user data from a proxy. Returns null if the id is invalid.\n */\n getUserData(proxyId: number): FixtureProxy {\n return this.m_tree.getUserData(proxyId);\n }\n\n /**\n * Test overlap of fat AABBs.\n */\n testOverlap(proxyIdA: number, proxyIdB: number): boolean {\n const aabbA = this.m_tree.getFatAABB(proxyIdA);\n const aabbB = this.m_tree.getFatAABB(proxyIdB);\n return AABB.testOverlap(aabbA, aabbB);\n }\n\n /**\n * Get the fat AABB for a proxy.\n */\n getFatAABB(proxyId: number): AABB {\n return this.m_tree.getFatAABB(proxyId);\n }\n\n /**\n * Get the number of proxies.\n */\n getProxyCount(): number {\n return this.m_moveBuffer.length;\n }\n\n /**\n * Get the height of the embedded tree.\n */\n getTreeHeight(): number {\n return this.m_tree.getHeight();\n }\n\n /**\n * Get the balance (integer) of the embedded tree.\n */\n getTreeBalance(): number {\n return this.m_tree.getMaxBalance();\n }\n\n /**\n * Get the quality metric of the embedded tree.\n */\n getTreeQuality(): number {\n return this.m_tree.getAreaRatio();\n }\n\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query = (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void => {\n this.m_tree.query(aabb, queryCallback);\n };\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n this.m_tree.rayCast(input, rayCastCallback);\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_tree.shiftOrigin(newOrigin);\n }\n\n /**\n * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs\n * is called.\n */\n createProxy(aabb: AABBValue, userData: FixtureProxy): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const proxyId = this.m_tree.createProxy(aabb, userData);\n this.bufferMove(proxyId);\n return proxyId;\n }\n\n /**\n * Destroy a proxy. It is up to the client to remove any pairs.\n */\n destroyProxy(proxyId: number): void {\n this.unbufferMove(proxyId);\n this.m_tree.destroyProxy(proxyId);\n }\n\n /**\n * Call moveProxy as many times as you like, then when you are done call\n * UpdatePairs to finalized the proxy pairs (for your time step).\n */\n moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const changed = this.m_tree.moveProxy(proxyId, aabb, displacement);\n if (changed) {\n this.bufferMove(proxyId);\n }\n }\n\n /**\n * Call to trigger a re-processing of it's pairs on the next call to\n * UpdatePairs.\n */\n touchProxy(proxyId: number): void {\n this.bufferMove(proxyId);\n }\n\n bufferMove(proxyId: number): void {\n this.m_moveBuffer.push(proxyId);\n }\n\n unbufferMove(proxyId: number): void {\n for (let 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\n /**\n * Update the pairs. This results in pair callbacks. This can only add pairs.\n */\n updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void {\n _ASSERT && console.assert(typeof addPairCallback === \"function\");\n this.m_callback = addPairCallback;\n\n // Perform tree queries for all moving proxies.\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\n // We have to query the tree with the fat AABB so that\n // we don't fail to create a pair that may touch later.\n const fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId);\n\n // Query tree, create pairs and add them pair buffer.\n this.m_tree.query(fatAABB, this.queryCallback);\n }\n\n // Try to keep the tree balanced.\n // this.m_tree.rebalance(4);\n }\n\n queryCallback = (proxyId: number): boolean => {\n // A proxy cannot form a pair with itself.\n if (proxyId === this.m_queryProxyId) {\n return true;\n }\n\n const proxyIdA = math_min(proxyId, this.m_queryProxyId);\n const proxyIdB = math_max(proxyId, this.m_queryProxyId);\n\n // TODO: Skip any duplicate pairs.\n\n const userDataA = this.m_tree.getUserData(proxyIdA);\n const userDataB = this.m_tree.getUserData(proxyIdB);\n\n // Send the pairs back to the client.\n this.m_callback(userDataA, userDataB);\n\n return true;\n };\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2023 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\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_sqrt = Math.sqrt;\n\n\nimport { RotValue } from \"./Rot\";\nimport { TransformValue } from \"./Transform\";\nimport { Vec2Value } from \"./Vec2\";\nimport { Vec3Value } from \"./Vec3\";\n\nexport function vec2(x: number, y: number): Vec2Value {\n return { x, y };\n}\n\nexport function vec3(x: number, y: number, z: number): Vec3Value {\n return { x, y, z };\n}\n\nexport function rotation(angle: number): RotValue {\n return { s: math_sin(angle), c: math_cos(angle) };\n}\n\nexport function setVec2(out: Vec2Value, x: number, y: number): Vec2Value {\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function copyVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = w.x;\n out.y = w.y;\n return out;\n}\n\nexport function zeroVec2(out: Vec2Value): Vec2Value {\n out.x = 0;\n out.y = 0;\n return out;\n}\n\nexport function negVec2(out: Vec2Value): Vec2Value {\n out.x = -out.x;\n out.y = -out.y;\n return out;\n}\n\nexport function plusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x += w.x;\n out.y += w.y;\n return out;\n}\n\nexport function addVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x + w.x;\n out.y = v.x + w.y;\n return out;\n}\n\nexport function minusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x -= w.x;\n out.y -= w.y;\n return out;\n}\n\nexport function subVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x - w.x;\n out.y = v.y - w.y;\n return out;\n}\n\nexport function mulVec2(out: Vec2Value, m: number): Vec2Value {\n out.x *= m;\n out.y *= m;\n return out;\n}\n\nexport function scaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x = m * w.x;\n out.y = m * w.y;\n return out;\n}\n\nexport function plusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x += m * w.x;\n out.y += m * w.y;\n return out;\n}\n\nexport function minusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x -= m * w.x;\n out.y -= m * w.y;\n return out;\n}\n\nexport function combine2Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x;\n out.y = am * a.y + bm * b.y;\n return out;\n}\n\nexport function combine3Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value, cm: number, c: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x + cm * c.x;\n out.y = am * a.y + bm * b.y + cm * c.y;\n return out;\n}\n\nexport function normalizeVec2Length(out: Vec2Value): number {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length !== 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return length;\n}\n\nexport function normalizeVec2(out: Vec2Value): Vec2Value {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length > 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return out;\n}\n\nexport function crossVec2Num(out: Vec2Value, v: Vec2Value, w: number): Vec2Value {\n const x = w * v.y;\n const y = -w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossNumVec2(out: Vec2Value, w: number, v: Vec2Value): Vec2Value {\n const x = -w * v.y;\n const y = w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossVec2Vec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.y - a.y * b.x;\n}\n\nexport function dotVec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.x + a.y * b.y;\n}\n\nexport function lengthVec2(a: Vec2Value): number {\n return math_sqrt(a.x * a.x + a.y * a.y);\n}\n\nexport function lengthSqrVec2(a: Vec2Value): number {\n return a.x * a.x + a.y * a.y;\n}\n\nexport function distVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return math_sqrt(dx * dx + dy * dy);\n}\n\nexport function distSqrVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return dx * dx + dy * dy;\n}\n\nexport function dotVec3(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n}\n\nexport function setRotAngle(out: RotValue, a: number): RotValue {\n out.c = math_cos(a);\n out.s = math_sin(a);\n return out;\n}\n\nexport function rotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n out.x = q.c * v.x - q.s * v.y;\n out.y = q.s * v.x + q.c * v.y;\n return out;\n}\n\nexport function derotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n const x = q.c * v.x + q.s * v.y;\n const y = -q.s * v.x + q.c * v.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function rerotVec2(out: Vec2Value, before: RotValue, after: RotValue, v: Vec2Value): Vec2Value {\n const x0 = before.c * v.x + before.s * v.y;\n const y0 = -before.s * v.x + before.c * v.y;\n const x = after.c * x0 - after.s * y0;\n const y = after.s * x0 + after.c * y0;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function transform(x: number, y: number, a: number): TransformValue {\n return { p: vec2(x, y), q: rotation(a) };\n}\n\nexport function copyTransform(out: TransformValue, transform: TransformValue): TransformValue {\n out.p.x = transform.p.x;\n out.p.y = transform.p.y;\n out.q.s = transform.q.s;\n out.q.c = transform.q.c;\n return out;\n}\n\nexport function transformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const x = xf.q.c * v.x - xf.q.s * v.y + xf.p.x;\n const y = xf.q.s * v.x + xf.q.c * v.y + xf.p.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const px = v.x - xf.p.x;\n const py = v.y - xf.p.y;\n const x = (xf.q.c * px + xf.q.s * py);\n const y = (-xf.q.s * px + xf.q.c * py);\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function retransformVec2(out: Vec2Value, from: TransformValue, to: TransformValue, v: Vec2Value): Vec2Value {\n const x0 = from.q.c * v.x - from.q.s * v.y + from.p.x;\n const y0 = from.q.s * v.x + from.q.c * v.y + from.p.y;\n const px = x0 - to.p.x;\n const py = y0 - to.p.y;\n const x = to.q.c * px + to.q.s * py;\n const y = -to.q.s * px + to.q.c * py;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformTransform(out: TransformValue, a: TransformValue, b: TransformValue): TransformValue {\n const c = a.q.c * b.q.c + a.q.s * b.q.s;\n const s = a.q.c * b.q.s - a.q.s * b.q.c;\n const x = a.q.c * (b.p.x - a.p.x) + a.q.s * (b.p.y - a.p.y);\n const y = -a.q.s * (b.p.x - a.p.x) + a.q.c * (b.p.y - a.p.y);\n out.q.c = c;\n out.q.s = s;\n out.p.x = x;\n out.p.y = y;\n return out;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_atan2 = Math.atan2;\n\nexport interface RotValue {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n}\n\nexport class Rot {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n\n /** Initialize from an angle in radians. */\n constructor(angle?: number | RotValue) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Rot)) {\n return new Rot(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\n /** @hidden */\n static neo(angle: number): Rot {\n const obj = Object.create(Rot.prototype);\n obj.setAngle(angle);\n return obj;\n }\n\n static clone(rot: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n const obj = Object.create(Rot.prototype);\n obj.s = rot.s;\n obj.c = rot.c;\n return obj;\n }\n\n static identity(): Rot {\n const obj = Object.create(Rot.prototype);\n obj.s = 0.0;\n obj.c = 1.0;\n return obj;\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.s) && Number.isFinite(obj.c);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Rot.isValid(o), \"Invalid Rot!\", o);\n }\n\n /** Set to the identity rotation. */\n setIdentity(): void {\n this.s = 0.0;\n this.c = 1.0;\n }\n\n set(angle: number | RotValue): void {\n if (typeof angle === \"object\") {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n\n } else {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n }\n\n setRot(angle: RotValue): void {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n }\n\n /** Set using an angle in radians. */\n setAngle(angle: number): void {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n\n /** Get the angle in radians. */\n getAngle(): number {\n return math_atan2(this.s, this.c);\n }\n\n /** Get the x-axis. */\n getXAxis(): Vec2 {\n return Vec2.neo(this.c, this.s);\n }\n\n /** Get the y-axis. */\n getYAxis(): Vec2 {\n return Vec2.neo(-this.s, this.c);\n }\n\n /** Multiply two rotations: q * r */\n static mul(rot: RotValue, m: RotValue): Rot;\n /** Rotate a vector */\n static mul(rot: RotValue, m: Vec2Value): Vec2;\n static mul(rot, m) {\n _ASSERT && Rot.assert(rot);\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Multiply two rotations: q * r */\n static mulRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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\n /** Rotate a vector */\n static mulVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n\n static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2 {\n const x = rot.c * (v.x - w.x) - rot.s * (v.y - w.y);\n const y = rot.s * (v.x - w.x) + rot.c * (v.y - w.y);\n return Vec2.neo(x, y);\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulT(rot: RotValue, m: RotValue): Rot;\n /** Inverse rotate a vector */\n static mulT(rot: RotValue, m: Vec2Value): Vec2;\n static mulT(rot, m) {\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulTRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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\n /** Inverse rotate a vector */\n static mulTVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"./Matrix\";\nimport { mod } from \"./Math\";\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { TransformValue } from \"./Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_atan2 = Math.atan2;\n/** @internal */ const math_PI = Math.PI;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * This describes the motion of a body/shape for TOI computation. Shapes are\n * defined with respect to the body origin, which may not coincide with the\n * center of mass. However, to support dynamics we must interpolate the center\n * of mass position.\n */\nexport class Sweep {\n /** Local center of mass position */\n localCenter = Vec2.zero();\n\n /** World center position */\n c = Vec2.zero();\n\n /** World angle */\n a = 0;\n\n /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */\n alpha0 = 0;\n\n c0 = Vec2.zero();\n a0 = 0;\n\n /** @internal */\n recycle() {\n matrix.zeroVec2(this.localCenter);\n matrix.zeroVec2(this.c);\n this.a = 0;\n this.alpha0 = 0;\n matrix.zeroVec2(this.c0);\n this.a0 = 0;\n }\n\n setTransform(xf: TransformValue): void {\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n\n this.a = this.a0 = math_atan2(xf.q.s, xf.q.c);\n }\n\n setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void {\n matrix.copyVec2(this.localCenter, localCenter);\n\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n }\n\n /**\n * Get the interpolated transform at a specific time.\n *\n * @param xf\n * @param beta A factor in [0,1], where 0 indicates alpha0\n */\n getTransform(xf: TransformValue, beta: number = 0): void {\n matrix.setRotAngle(xf.q, (1.0 - beta) * this.a0 + beta * this.a);\n matrix.combine2Vec2(xf.p, (1.0 - beta), this.c0, beta, this.c);\n\n // shift to origin\n matrix.minusVec2(xf.p, matrix.rotVec2(temp, xf.q, this.localCenter));\n }\n\n /**\n * Advance the sweep forward, yielding a new initial state.\n *\n * @param alpha The new initial time\n */\n advance(alpha: number): void {\n _ASSERT && console.assert(this.alpha0 < 1.0);\n const beta = (alpha - this.alpha0) / (1.0 - this.alpha0);\n matrix.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\n forward(): void {\n this.a0 = this.a;\n matrix.copyVec2(this.c0, this.c);\n }\n\n /**\n * normalize the angles in radians to be between -pi and pi.\n */\n normalize(): void {\n const a0 = mod(this.a0, -math_PI, +math_PI);\n this.a -= this.a0 - a0;\n this.a0 = a0;\n }\n\n set(that: Sweep): void {\n matrix.copyVec2(this.localCenter, that.localCenter);\n matrix.copyVec2(this.c, that.c);\n this.a = that.a;\n this.alpha0 = that.alpha0;\n matrix.copyVec2(this.c0, that.c0);\n this.a0 = that.a0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Rot, RotValue } from \"./Rot\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport type TransformValue = {\n p: Vec2Value;\n q: RotValue;\n};\n\n/**\n * A transform contains translation and rotation. It is used to represent the\n * position and orientation of rigid frames. Initialize using a position vector\n * and a rotation.\n */\nexport class Transform {\n /** position */\n p: Vec2;\n\n /** rotation */\n q: Rot;\n\n constructor(position?: Vec2Value, rotation?: number) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Transform)) {\n return new Transform(position, rotation);\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 rotation !== \"undefined\") {\n this.q.setAngle(rotation);\n }\n }\n\n static clone(xf: Transform): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(xf.p);\n obj.q = Rot.clone(xf.q);\n return obj;\n }\n\n /** @hidden */\n static neo(position: Vec2Value, rotation: Rot): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(position);\n obj.q = Rot.clone(rotation);\n return obj;\n }\n\n static identity(): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.zero();\n obj.q = Rot.identity();\n return obj;\n }\n\n /** Set this to the identity transform */\n setIdentity(): void {\n this.p.setZero();\n this.q.setIdentity();\n }\n\n /** Set position and angle */\n set(position: Vec2Value, rotation: number): void;\n /** Copy from another transform */\n set(xf: TransformValue): void;\n set(a: any, b?: any) {\n if (typeof b === \"undefined\") {\n this.p.set(a.p);\n this.q.set(a.q);\n } else {\n this.p.set(a);\n this.q.set(b);\n }\n }\n\n /** Set position and angle */\n setNum(position: Vec2Value, rotation: number) {\n this.p.setVec2(position);\n this.q.setAngle(rotation);\n }\n\n setTransform(xf: TransformValue): void {\n this.p.setVec2(xf.p);\n this.q.setRot(xf.q);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.p) && Rot.isValid(obj.q);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Transform.isValid(o), \"Invalid Transform!\", o);\n }\n\n static mul(a: TransformValue, b: Vec2Value): Vec2;\n static mul(a: TransformValue, b: TransformValue): Transform;\n // static mul(a: Transform, b: Vec2Value[]): Vec2[];\n // static mul(a: Transform, b: Transform[]): Transform[];\n static mul(a, b) {\n if (Array.isArray(b)) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n\n } else if (\"x\" in b && \"y\" in b) {\n return Transform.mulVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulXf(a, b);\n }\n }\n\n static mulAll(a: Transform, b: Vec2Value[]): Vec2[];\n static mulAll(a: Transform, b: Transform[]): Transform[];\n static mulAll(a: TransformValue, b) {\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n }\n\n /** @hidden @deprecated */\n static mulFn(a: TransformValue) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n return function(b: Vec2Value): Vec2 {\n return Transform.mul(a, b);\n };\n }\n\n static mulVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = (a.q.c * b.x - a.q.s * b.y) + a.p.x;\n const y = (a.q.s * b.x + a.q.c * b.y) + a.p.y;\n return Vec2.neo(x, y);\n }\n\n static mulXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p\n // = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p\n const xf = Transform.identity();\n xf.q = Rot.mulRot(a.q, b.q);\n xf.p = Vec2.add(Rot.mulVec2(a.q, b.p), a.p);\n return xf;\n }\n\n static mulT(a: TransformValue, b: Vec2Value): Vec2;\n static mulT(a: TransformValue, b: TransformValue): Transform;\n static mulT(a, b) {\n if (\"x\" in b && \"y\" in b) {\n return Transform.mulTVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulTXf(a, b);\n }\n }\n\n static mulTVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const px = b.x - a.p.x;\n const py = b.y - a.p.y;\n const x = (a.q.c * px + a.q.s * py);\n const y = (-a.q.s * px + a.q.c * py);\n return Vec2.neo(x, y);\n }\n\n static mulTXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q' * (B.q * v1 + B.p - A.p)\n // = A.q' * B.q * v1 + A.q' * (B.p - A.p)\n const xf = Transform.identity();\n xf.q.setRot(Rot.mulTRot(a.q, b.q));\n xf.p.setVec2(Rot.mulTVec2(a.q, Vec2.sub(b.p, a.p)));\n return xf;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2 } from \"../common/Vec2\";\n\nexport class Velocity {\n /** linear */\n v = Vec2.zero();\n\n /** angular */\n w = 0;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n\n\nexport class Position {\n /** location */\n c = Vec2.zero();\n\n /** angle */\n a = 0;\n\n // todo: cache sin/cos\n getTransform(xf: TransformValue, p: Vec2Value): TransformValue {\n // xf.q = rotation(this.a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(this.a);\n xf.q.s = math_sin(this.a);\n xf.p.x = this.c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = this.c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n }\n}\n\nexport function getTransform(xf: TransformValue, p: Vec2Value, c: Vec2Value, a: number): TransformValue {\n // xf.q = rotation(a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(a);\n xf.q.s = math_sin(a);\n xf.p.x = c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { MassData } from \"../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"./AABB\";\nimport { DistanceProxy } from \"./Distance\";\nimport type { Transform, TransformValue } from \"../common/Transform\";\nimport type { Vec2Value } from \"../common/Vec2\";\nimport { Style } from \"../util/Testbed\";\n\n// todo make shape an interface\n\n/**\n * A shape is used for collision detection. You can create a shape however you\n * like. Shapes used for simulation in World are created automatically when a\n * Fixture is created. Shapes may encapsulate one or more child shapes.\n */\nexport abstract class Shape {\n /** @hidden */ m_type: ShapeType;\n\n /**\n * @hidden\n * Radius of a shape. For polygonal shapes this must be b2_polygonRadius.\n * There is no support for making rounded polygons.\n */\n m_radius: number;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @hidden */\n abstract _reset(): void;\n\n static isValid(obj: any): boolean {\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\n abstract getRadius(): number;\n\n /**\n * Get the type of this shape. You can use this to down cast to the concrete\n * shape.\n *\n * @return the shape type.\n */\n abstract getType(): ShapeType;\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n abstract _clone(): Shape;\n\n /**\n * Get the number of child primitives.\n */\n abstract getChildCount(): number;\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n abstract testPoint(xf: TransformValue, p: Vec2Value): boolean;\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean;\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void;\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n abstract computeMass(massData: MassData, density?: number): void;\n\n abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void;\n\n}\n\nexport type ShapeType = \"circle\" | \"edge\" | \"polygon\" | \"chain\";\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Shape, ShapeType } from \"../collision/Shape\";\nimport { Body, MassData } from \"./Body\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const synchronize_aabb1 = new AABB();\n/** @internal */ const synchronize_aabb2 = new AABB();\n/** @internal */ const displacement = matrix.vec2(0, 0);\n\n/**\n * A fixture definition is used to create a fixture. This class defines an\n * abstract fixture definition. You can reuse fixture definitions safely.\n */\nexport interface FixtureOpt {\n userData?: unknown;\n /**\n * The friction coefficient, usually in the range [0,1]\n */\n friction?: number;\n /**\n * The restitution (elasticity) usually in the range [0,1]\n */\n restitution?: number;\n /**\n * The density, usually in kg/m^2\n */\n density?: number;\n /**\n * A sensor shape collects contact information but never generates a collision response.\n */\n isSensor?: boolean;\n /**\n * Zero, positive or negative collision group.\n * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide.\n */\n filterGroupIndex?: number;\n /**\n * Collision category bit or bits that this fixture belongs to.\n * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa.\n */\n filterCategoryBits?: number;\n /**\n * Collision category bit or bits that this fixture accept for collision.\n */\n filterMaskBits?: number;\n}\n\nexport interface FixtureDef extends FixtureOpt {\n shape: Shape;\n}\n\n/** @internal */ const FixtureDefDefault: FixtureOpt = {\n userData : null,\n friction : 0.2,\n restitution : 0.0,\n density : 0.0,\n isSensor : false,\n\n filterGroupIndex : 0,\n filterCategoryBits : 0x0001,\n filterMaskBits : 0xFFFF\n};\n\n/**\n * This proxy is used internally to connect shape children to the broad-phase.\n */\nexport class FixtureProxy {\n aabb: AABB;\n fixture: Fixture;\n childIndex: number;\n proxyId: number;\n constructor(fixture: Fixture, childIndex: number) {\n this.aabb = new AABB();\n this.fixture = fixture;\n this.childIndex = childIndex;\n this.proxyId;\n }\n}\n\n/**\n * A fixture is used to attach a shape to a body for collision detection. A\n * fixture inherits its transform from its parent. Fixtures hold additional\n * non-geometric data such as friction, collision filters, etc.\n *\n * To create a new Fixture use {@link Body.createFixture}.\n */\nexport class Fixture {\n /** @internal */ m_body: Body;\n /** @internal */ m_friction: number;\n /** @internal */ m_restitution: number;\n /** @internal */ m_density: number;\n /** @internal */ m_isSensor: boolean;\n /** @internal */ m_filterGroupIndex: number;\n /** @internal */ m_filterCategoryBits: number;\n /** @internal */ m_filterMaskBits: number;\n /** @internal */ m_shape: Shape;\n /** @internal */ m_next: Fixture | null;\n /** @internal */ m_proxies: FixtureProxy[];\n // 0 indicates inactive state, this is not the same as m_proxies.length\n /** @internal */ m_proxyCount: number;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(body: Body, def: FixtureDef);\n constructor(body: Body, shape: Shape, def?: FixtureOpt);\n constructor(body: Body, shape: Shape, density?: number);\n /** @internal */\n constructor(body: Body, shape?, def?) {\n if (shape.shape) {\n def = shape;\n shape = shape.shape;\n\n } else if (typeof def === \"number\") {\n def = {density : def};\n }\n\n def = options(def, FixtureDefDefault);\n\n this.m_body = body;\n\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\n this.m_filterGroupIndex = def.filterGroupIndex;\n this.m_filterCategoryBits = def.filterCategoryBits;\n this.m_filterMaskBits = def.filterMaskBits;\n\n // TODO validate shape\n this.m_shape = shape; // .clone();\n\n this.m_next = null;\n\n this.m_proxies = [];\n this.m_proxyCount = 0;\n\n // fixture proxies are created here,\n // but they are activate in when a fixture is added to body\n const childCount = this.m_shape.getChildCount();\n for (let i = 0; i < childCount; ++i) {\n this.m_proxies[i] = new FixtureProxy(this, i);\n }\n\n this.m_userData = def.userData;\n }\n\n /** @hidden Re-setup fixture. */\n _reset(): void {\n const body = this.getBody();\n const broadPhase = body.m_world.m_broadPhase;\n this.destroyProxies(broadPhase);\n if (this.m_shape._reset) {\n this.m_shape._reset();\n }\n const childCount = this.m_shape.getChildCount();\n for (let 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\n /** @internal */\n _serialize(): object {\n return {\n friction: this.m_friction,\n restitution: this.m_restitution,\n density: this.m_density,\n isSensor: this.m_isSensor,\n\n filterGroupIndex: this.m_filterGroupIndex,\n filterCategoryBits: this.m_filterCategoryBits,\n filterMaskBits: this.m_filterMaskBits,\n\n shape: this.m_shape,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, body: any, restore: any): Fixture {\n const shape = restore(Shape, data.shape);\n const fixture = shape && new Fixture(body, shape, data);\n return fixture;\n }\n\n /**\n * Get the type of the child shape. You can use this to down cast to the\n * concrete shape.\n */\n getType(): ShapeType {\n return this.m_shape.m_type;\n }\n\n /**\n * Get the child shape. You can modify the child shape, however you should not\n * change the number of vertices because this will crash some collision caching\n * mechanisms. Manipulating the shape may lead to non-physical behavior.\n */\n getShape(): Shape {\n return this.m_shape;\n }\n\n /**\n * A sensor shape collects contact information but never generates a collision\n * response.\n */\n isSensor(): boolean {\n return this.m_isSensor;\n }\n\n /**\n * Set if this fixture is a sensor.\n */\n setSensor(sensor: boolean): void {\n if (sensor != this.m_isSensor) {\n this.m_body.setAwake(true);\n this.m_isSensor = sensor;\n }\n }\n\n // /**\n // * Get the contact filtering data.\n // */\n // getFilterData() {\n // return this.m_filter;\n // }\n\n /**\n * Get the user data that was assigned in the fixture definition. Use this to\n * store your application specific data.\n */\n getUserData(): unknown {\n return this.m_userData;\n }\n\n /**\n * Set the user data. Use this to store your application specific data.\n */\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get the parent body of this fixture. This is null if the fixture is not\n * attached.\n */\n getBody(): Body {\n return this.m_body;\n }\n\n /**\n * Get the next fixture in the parent body's fixture list.\n */\n getNext(): Fixture | null {\n return this.m_next;\n }\n\n /**\n * Get the density of this fixture.\n */\n getDensity(): number {\n return this.m_density;\n }\n\n /**\n * Set the density of this fixture. This will _not_ automatically adjust the\n * mass of the body. You must call Body.resetMassData to update the body's mass.\n */\n setDensity(density: number): void {\n _ASSERT && console.assert(Number.isFinite(density) && density >= 0.0);\n this.m_density = density;\n }\n\n /**\n * Get the coefficient of friction, usually in the range [0,1].\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Set the coefficient of friction. This will not change the friction of\n * existing contacts.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the coefficient of restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Set the coefficient of restitution. This will not change the restitution of\n * existing contacts.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Test a point in world coordinates for containment in this fixture.\n */\n testPoint(p: Vec2Value): boolean {\n return this.m_shape.testPoint(this.m_body.getTransform(), p);\n }\n\n /**\n * Cast a ray against this shape.\n */\n rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean {\n return this.m_shape.rayCast(output, input, this.m_body.getTransform(), childIndex);\n }\n\n /**\n * Get the mass data for this fixture. The mass data is based on the density and\n * the shape. The rotational inertia is about the shape's origin. This operation\n * may be expensive.\n */\n getMassData(massData: MassData): void {\n this.m_shape.computeMass(massData, this.m_density);\n }\n\n /**\n * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a\n * more accurate AABB, compute it using the shape and the body transform.\n */\n getAABB(childIndex: number): AABB {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_proxies.length);\n return this.m_proxies[childIndex].aabb;\n }\n\n /**\n * These support body activation/deactivation.\n */\n createProxies(broadPhase: BroadPhase, xf: TransformValue): void {\n _ASSERT && console.assert(this.m_proxyCount == 0);\n\n // Create proxies in the broad-phase.\n this.m_proxyCount = this.m_shape.getChildCount();\n\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n this.m_shape.computeAABB(proxy.aabb, xf, i);\n proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy);\n }\n }\n\n destroyProxies(broadPhase: BroadPhase): void {\n // Destroy proxies in the broad-phase.\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n broadPhase.destroyProxy(proxy.proxyId);\n proxy.proxyId = null;\n }\n\n this.m_proxyCount = 0;\n }\n\n /**\n * Updates this fixture proxy in broad-phase (with combined AABB of current and\n * next transformation).\n */\n synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void {\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n // Compute an AABB that covers the swept shape (may miss some rotation\n // effect).\n this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex);\n this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex);\n\n proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2);\n\n matrix.subVec2(displacement, xf2.p, xf1.p);\n\n broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement);\n }\n }\n\n /**\n * Set the contact filtering data. This will not update contacts until the next\n * time step when either parent body is active and awake. This automatically\n * calls refilter.\n */\n setFilterData(filter: { groupIndex: number, categoryBits: number, maskBits: number }): void {\n this.m_filterGroupIndex = filter.groupIndex;\n this.m_filterCategoryBits = filter.categoryBits;\n this.m_filterMaskBits = filter.maskBits;\n this.refilter();\n }\n\n getFilterGroupIndex(): number {\n return this.m_filterGroupIndex;\n }\n\n setFilterGroupIndex(groupIndex: number): void {\n this.m_filterGroupIndex = groupIndex;\n this.refilter();\n }\n\n getFilterCategoryBits(): number {\n return this.m_filterCategoryBits;\n }\n\n setFilterCategoryBits(categoryBits: number): void {\n this.m_filterCategoryBits = categoryBits;\n this.refilter();\n }\n\n getFilterMaskBits(): number {\n return this.m_filterMaskBits;\n }\n\n setFilterMaskBits(maskBits: number): void {\n this.m_filterMaskBits = maskBits;\n this.refilter();\n }\n\n /**\n * Call this if you want to establish collision that was previously disabled by\n * ContactFilter.\n */\n refilter(): void {\n if (this.m_body == null) {\n return;\n }\n\n // Flag associated contacts for filtering.\n let edge = this.m_body.getContactList();\n while (edge) {\n const contact = edge.contact;\n const fixtureA = contact.getFixtureA();\n const fixtureB = contact.getFixtureB();\n if (fixtureA == this || fixtureB == this) {\n contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n\n const world = this.m_body.getWorld();\n\n if (world == null) {\n return;\n }\n\n // Touch each proxy so that new pairs may be created\n const broadPhase = world.m_broadPhase;\n for (let i = 0; i < this.m_proxyCount; ++i) {\n broadPhase.touchProxy(this.m_proxies[i].proxyId);\n }\n }\n\n /**\n * Implement this method to provide collision filtering, if you want finer\n * control over contact creation.\n *\n * Return true if contact calculations should be performed between these two\n * fixtures.\n *\n * Warning: for performance reasons this is only called when the AABBs begin to\n * overlap.\n */\n shouldCollide(that: Fixture): boolean {\n\n if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) {\n return that.m_filterGroupIndex > 0;\n }\n\n const collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0;\n const collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0;\n const collide = collideA && collideB;\n return collide;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Velocity } from \"./Velocity\";\nimport { Position } from \"./Position\";\nimport { Fixture, FixtureDef, FixtureOpt } from \"./Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { JointEdge } from \"./Joint\";\nimport { World } from \"./World\";\nimport { ContactEdge } from \"./Contact\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nexport type BodyType = \"static\" | \"kinematic\" | \"dynamic\";\n\n/** @internal */ const STATIC = \"static\";\n/** @internal */ const KINEMATIC = \"kinematic\";\n/** @internal */ const DYNAMIC = \"dynamic\";\n\n/** @internal */ const oldCenter = matrix.vec2(0, 0);\n/** @internal */ const localCenter = matrix.vec2(0, 0);\n/** @internal */ const shift = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n\nexport interface BodyDef {\n /**\n * Body types are static, kinematic, or dynamic. Note: if a dynamic\n * body would have zero mass, the mass is set to one.\n */\n type?: BodyType;\n /**\n * The world position of the body. Avoid creating bodies at the\n * origin since this can lead to many overlapping shapes.\n */\n position?: Vec2Value;\n /**\n * The world angle of the body in radians.\n */\n angle?: number;\n /**\n * The linear velocity of the body's origin in world co-ordinates.\n */\n linearVelocity?: Vec2Value;\n angularVelocity?: number;\n /**\n * Linear damping is use to reduce the linear velocity. The\n * damping parameter can be larger than 1.0 but the damping effect becomes\n * sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n linearDamping?: number;\n /**\n * Angular damping is use to reduce the angular velocity.\n * The damping parameter can be larger than 1.0 but the damping effect\n * becomes sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n angularDamping?: number;\n /**\n * Should this body be prevented from rotating? Useful for characters.\n */\n fixedRotation?: boolean;\n /**\n * Is this a fast moving body that should be prevented from\n * tunneling through other moving bodies? Note that all bodies are\n * prevented from tunneling through kinematic and static bodies. This\n * setting is only considered on dynamic bodies. Warning: You should use\n * this flag sparingly since it increases processing time.\n */\n bullet?: boolean;\n gravityScale?: number;\n /**\n * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage.\n */\n allowSleep?: boolean;\n /**\n * Is this body initially awake or sleeping?\n */\n awake?: boolean;\n /**\n * Does this body start out active?\n */\n active?: boolean;\n userData?: any;\n}\n\n/** @internal */ const BodyDefDefault: BodyDef = {\n type : STATIC,\n position : Vec2.zero(),\n angle : 0.0,\n\n linearVelocity : Vec2.zero(),\n angularVelocity : 0.0,\n\n linearDamping : 0.0,\n angularDamping : 0.0,\n\n fixedRotation : false,\n bullet : false,\n gravityScale : 1.0,\n\n allowSleep : true,\n awake : true,\n active : true,\n\n userData : null\n};\n\n/**\n * MassData This holds the mass data computed for a shape.\n */\nexport interface MassData {\n /** The mass of the shape, usually in kilograms. */\n mass: number;\n /** The position of the shape's centroid relative to the shape's origin. */\n center: Vec2Value;\n /** The rotational inertia of the shape about the local origin. */\n I: number;\n}\n\n/**\n * A rigid body composed of one or more fixtures.\n *\n * To create a new Body use {@link World.createBody}.\n */\nexport class Body {\n /**\n * A static body does not move under simulation and behaves as if it has infinite mass.\n * Internally, zero is stored for the mass and the inverse mass.\n * Static bodies can be moved manually by the user.\n * A static body has zero velocity.\n * Static bodies do not collide with other static or kinematic bodies.\n */\n static readonly STATIC: BodyType = \"static\";\n /**\n * A kinematic body moves under simulation according to its velocity.\n * Kinematic bodies do not respond to forces.\n * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity.\n * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass.\n * Kinematic bodies do not collide with other kinematic or static bodies.\n */\n static readonly KINEMATIC: BodyType = \"kinematic\";\n\n /**\n * A dynamic body is fully simulated.\n * They can be moved manually by the user, but normally they move according to forces.\n * A dynamic body can collide with all body types.\n * A dynamic body always has finite, non-zero mass.\n * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate.\n */\n static readonly DYNAMIC: BodyType = \"dynamic\";\n\n /** @internal */ m_world: World;\n /** @internal */ m_awakeFlag: boolean;\n /** @internal */ m_autoSleepFlag: boolean;\n /** @internal */ m_bulletFlag: boolean;\n /** @internal */ m_fixedRotationFlag: boolean;\n /** @internal */ m_activeFlag: boolean;\n /** @internal */ m_islandFlag: boolean;\n /** @internal */ m_toiFlag: boolean;\n /** @internal */ m_userData: unknown;\n /** @internal */ m_type: BodyType;\n /** @internal */ m_mass: number;\n /** @internal */ m_invMass: number;\n /** @internal Rotational inertia about the center of mass. */\n m_I: number;\n /** @internal */ m_invI: number;\n /** @internal the body origin transform */\n m_xf: Transform;\n /** @internal the swept motion for CCD */\n m_sweep: Sweep;\n // position and velocity correction\n /** @internal */ c_velocity: Velocity;\n /** @internal */ c_position: Position;\n /** @internal */ m_force: Vec2;\n /** @internal */ m_torque: number;\n /** @internal */ m_linearVelocity: Vec2;\n /** @internal */ m_angularVelocity: number;\n /** @internal */ m_linearDamping: number;\n /** @internal */ m_angularDamping: number;\n /** @internal */ m_gravityScale: number;\n /** @internal */ m_sleepTime: number;\n /** @internal */ m_jointList: JointEdge | null;\n /** @internal */ m_contactList: ContactEdge | null;\n /** @internal */ m_fixtureList: Fixture | null;\n /** @internal */ m_prev: Body | null;\n /** @internal */ m_next: Body | null;\n /** @internal */ m_destroyed: boolean;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @internal */\n constructor(world: World, def: BodyDef) {\n def = options(def, BodyDefDefault);\n\n _ASSERT && console.assert(Vec2.isValid(def.position));\n _ASSERT && console.assert(Vec2.isValid(def.linearVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angle));\n _ASSERT && console.assert(Number.isFinite(def.angularVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angularDamping) && def.angularDamping >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.linearDamping) && def.linearDamping >= 0.0);\n\n this.m_world = world;\n\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\n this.m_islandFlag = false;\n this.m_toiFlag = false;\n\n this.m_userData = def.userData;\n this.m_type = def.type;\n\n if (this.m_type == DYNAMIC) {\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n } else {\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n }\n\n // Rotational inertia about the center of mass.\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n // the body origin transform\n this.m_xf = Transform.identity();\n this.m_xf.p.setVec2(def.position);\n this.m_xf.q.setAngle(def.angle);\n\n // the swept motion for CCD\n this.m_sweep = new Sweep();\n this.m_sweep.setTransform(this.m_xf);\n\n // position and velocity correction\n this.c_velocity = new Velocity();\n this.c_position = new Position();\n\n this.m_force = Vec2.zero();\n this.m_torque = 0.0;\n\n this.m_linearVelocity = Vec2.clone(def.linearVelocity);\n this.m_angularVelocity = def.angularVelocity;\n\n this.m_linearDamping = def.linearDamping;\n this.m_angularDamping = def.angularDamping;\n this.m_gravityScale = def.gravityScale;\n\n this.m_sleepTime = 0.0;\n\n this.m_jointList = null;\n this.m_contactList = null;\n this.m_fixtureList = null;\n\n this.m_prev = null;\n this.m_next = null;\n\n this.m_destroyed = false;\n }\n\n /** @internal */\n _serialize(): object {\n const fixtures = [];\n for (let 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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): Body {\n const body = new Body(world, data);\n\n if (data.fixtures) {\n for (let i = data.fixtures.length - 1; i >= 0; i--) {\n const fixture = restore(Fixture, data.fixtures[i], body);\n body._addFixture(fixture);\n }\n }\n return body;\n }\n\n isWorldLocked(): boolean {\n return this.m_world && this.m_world.isLocked() ? true : false;\n }\n\n getWorld(): World {\n return this.m_world;\n }\n\n getNext(): Body | null {\n return this.m_next;\n }\n\n setUserData(data: any): void {\n this.m_userData = data;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n getFixtureList(): Fixture | null {\n return this.m_fixtureList;\n }\n\n getJointList(): JointEdge | null {\n return this.m_jointList;\n }\n\n /**\n * Warning: this list changes during the time step and you may miss some\n * collisions if you don't use ContactListener.\n */\n getContactList(): ContactEdge | null {\n return this.m_contactList;\n }\n\n isStatic(): boolean {\n return this.m_type == STATIC;\n }\n\n isDynamic(): boolean {\n return this.m_type == DYNAMIC;\n }\n\n isKinematic(): boolean {\n return this.m_type == KINEMATIC;\n }\n\n /**\n * This will alter the mass and velocity.\n */\n setStatic(): Body {\n this.setType(STATIC);\n return this;\n }\n\n setDynamic(): Body {\n this.setType(DYNAMIC);\n return this;\n }\n\n setKinematic(): Body {\n this.setType(KINEMATIC);\n return this;\n }\n\n /**\n * Get the type of the body.\n */\n getType(): BodyType {\n return this.m_type;\n }\n\n /**\n * Set the type of the body to \"static\", \"kinematic\" or \"dynamic\".\n * @param type The type of the body.\n */\n setType(type: BodyType): void {\n _ASSERT && console.assert(type === STATIC || type === KINEMATIC || type === DYNAMIC);\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type == type) {\n return;\n }\n\n this.m_type = type;\n\n this.resetMassData();\n\n if (this.m_type == STATIC) {\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_sweep.forward();\n this.synchronizeFixtures();\n }\n\n this.setAwake(true);\n\n this.m_force.setZero();\n this.m_torque = 0.0;\n\n // Delete the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n\n // Touch the proxies so that new contacts will be created (when appropriate)\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n for (let i = 0; i < f.m_proxyCount; ++i) {\n broadPhase.touchProxy(f.m_proxies[i].proxyId);\n }\n }\n }\n\n isBullet(): boolean {\n return this.m_bulletFlag;\n }\n\n /**\n * Should this body be treated like a bullet for continuous collision detection?\n */\n setBullet(flag: boolean): void {\n this.m_bulletFlag = !!flag;\n }\n\n isSleepingAllowed(): boolean {\n return this.m_autoSleepFlag;\n }\n\n setSleepingAllowed(flag: boolean): void {\n this.m_autoSleepFlag = !!flag;\n if (this.m_autoSleepFlag == false) {\n this.setAwake(true);\n }\n }\n\n isAwake(): boolean {\n return this.m_awakeFlag;\n }\n\n /**\n * Set the sleep state of the body. A sleeping body has very low CPU cost.\n *\n * @param flag Set to true to wake the body, false to put it to sleep.\n */\n setAwake(flag: boolean): void {\n if (flag) {\n this.m_awakeFlag = true;\n this.m_sleepTime = 0.0;\n } else {\n this.m_awakeFlag = false;\n this.m_sleepTime = 0.0;\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_force.setZero();\n this.m_torque = 0.0;\n }\n }\n\n isActive(): boolean {\n return this.m_activeFlag;\n }\n\n /**\n * Set the active state of the body. An inactive body is not simulated and\n * cannot be collided with or woken up. If you pass a flag of true, all fixtures\n * will be added to the broad-phase. If you pass a flag of false, all fixtures\n * will be removed from the broad-phase and all contacts will be destroyed.\n * Fixtures and joints are otherwise unaffected.\n *\n * You may continue to create/destroy fixtures and joints on inactive bodies.\n * Fixtures on an inactive body are implicitly inactive and will not participate\n * in collisions, ray-casts, or queries. Joints connected to an inactive body\n * are implicitly inactive. An inactive body is still owned by a World object\n * and remains\n */\n setActive(flag: boolean): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (flag == this.m_activeFlag) {\n return;\n }\n\n this.m_activeFlag = !!flag;\n\n if (this.m_activeFlag) {\n // Create all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.createProxies(broadPhase, this.m_xf);\n }\n\t\t // Contacts are created at the beginning of the next\n\t\t this.m_world.m_newFixture = true;\n } else {\n // Destroy all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.destroyProxies(broadPhase);\n }\n\n // Destroy the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n }\n }\n\n isFixedRotation(): boolean {\n return this.m_fixedRotationFlag;\n }\n\n /**\n * Set this body to have fixed rotation. This causes the mass to be reset.\n */\n setFixedRotation(flag: boolean): void {\n if (this.m_fixedRotationFlag == flag) {\n return;\n }\n\n this.m_fixedRotationFlag = !!flag;\n\n this.m_angularVelocity = 0.0;\n\n this.resetMassData();\n }\n\n /**\n * Get the world transform for the body's origin.\n */\n getTransform(): Transform {\n return this.m_xf;\n }\n\n /**\n * Set the position of the body's origin and rotation. Manipulating a body's\n * transform may cause non-physical behavior. Note: contacts are updated on the\n * next call to World.step.\n *\n * @param position The world position of the body's local origin.\n * @param angle The world rotation in radians.\n */\n setTransform(position: Vec2Value, angle: number): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n this.m_xf.setNum(position, angle);\n this.m_sweep.setTransform(this.m_xf);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let 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\n synchronizeTransform(): void {\n this.m_sweep.getTransform(this.m_xf, 1);\n }\n\n /**\n * Update fixtures in broad-phase.\n */\n synchronizeFixtures(): void {\n this.m_sweep.getTransform(xf, 0);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.synchronize(broadPhase, xf, this.m_xf);\n }\n }\n\n /**\n * Used in TOI.\n */\n advance(alpha: number): void {\n // Advance to the new safe time. This doesn't sync the broad-phase.\n this.m_sweep.advance(alpha);\n matrix.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\n /**\n * Get the world position for the body's origin.\n */\n getPosition(): Vec2 {\n return this.m_xf.p;\n }\n\n setPosition(p: Vec2Value): void {\n this.setTransform(p, this.m_sweep.a);\n }\n\n /**\n * Get the current world rotation angle in radians.\n */\n getAngle(): number {\n return this.m_sweep.a;\n }\n\n setAngle(angle: number): void {\n this.setTransform(this.m_xf.p, angle);\n }\n\n /**\n * Get the world position of the center of mass.\n */\n getWorldCenter(): Vec2 {\n return this.m_sweep.c;\n }\n\n /**\n * Get the local position of the center of mass.\n */\n getLocalCenter(): Vec2 {\n return this.m_sweep.localCenter;\n }\n\n /**\n * Get the linear velocity of the center of mass.\n *\n * @return the linear velocity of the center of mass.\n */\n getLinearVelocity(): Vec2 {\n return this.m_linearVelocity;\n }\n\n /**\n * Get the world linear velocity of a world point attached to this body.\n *\n * @param worldPoint A point in world coordinates.\n */\n getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2 {\n const localCenter = Vec2.sub(worldPoint, this.m_sweep.c);\n return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity,\n localCenter));\n }\n\n /**\n * Get the world velocity of a local point.\n *\n * @param localPoint A point in local coordinates.\n */\n getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2 {\n return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint));\n }\n\n /**\n * Set the linear velocity of the center of mass.\n *\n * @param v The new linear velocity of the center of mass.\n */\n setLinearVelocity(v: Vec2Value): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (Vec2.dot(v, v) > 0.0) {\n this.setAwake(true);\n }\n this.m_linearVelocity.setVec2(v);\n }\n\n /**\n * Get the angular velocity.\n *\n * @returns the angular velocity in radians/second.\n */\n getAngularVelocity(): number {\n return this.m_angularVelocity;\n }\n\n /**\n * Set the angular velocity.\n *\n * @param omega The new angular velocity in radians/second.\n */\n setAngularVelocity(w: number): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (w * w > 0.0) {\n this.setAwake(true);\n }\n this.m_angularVelocity = w;\n }\n\n getLinearDamping(): number {\n return this.m_linearDamping;\n }\n\n setLinearDamping(linearDamping: number): void {\n this.m_linearDamping = linearDamping;\n }\n\n getAngularDamping(): number {\n return this.m_angularDamping;\n }\n\n setAngularDamping(angularDamping: number): void {\n this.m_angularDamping = angularDamping;\n }\n\n getGravityScale(): number {\n return this.m_gravityScale;\n }\n\n /**\n * Scale the gravity applied to this body.\n */\n setGravityScale(scale: number): void {\n this.m_gravityScale = scale;\n }\n\n /**\n * Get the total mass of the body.\n *\n * @returns The mass, usually in kilograms (kg).\n */\n getMass(): number {\n return this.m_mass;\n }\n\n /**\n * Get the rotational inertia of the body about the local origin.\n *\n * @return the rotational inertia, usually in kg-m^2.\n */\n getInertia(): number {\n return this.m_I + this.m_mass\n * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter);\n }\n\n /**\n * Copy the mass data of the body to data.\n */\n getMassData(data: MassData): void {\n data.mass = this.m_mass;\n data.I = this.getInertia();\n matrix.copyVec2(data.center, this.m_sweep.localCenter);\n }\n\n /**\n * This resets the mass properties to the sum of the mass properties of the\n * fixtures. This normally does not need to be called unless you called\n * SetMassData to override the mass and you later want to reset the mass.\n */\n resetMassData(): void {\n // Compute mass data from shapes. Each shape has its own density.\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n matrix.zeroVec2(this.m_sweep.localCenter);\n\n // Static and kinematic bodies have zero mass.\n if (this.isStatic() || this.isKinematic()) {\n matrix.copyVec2(this.m_sweep.c0, this.m_xf.p);\n matrix.copyVec2(this.m_sweep.c, this.m_xf.p);\n this.m_sweep.a0 = this.m_sweep.a;\n return;\n }\n\n _ASSERT && console.assert(this.isDynamic());\n\n // Accumulate mass over all fixtures.\n matrix.zeroVec2(localCenter);\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n if (f.m_density == 0.0) {\n continue;\n }\n\n const massData: MassData = {\n mass: 0,\n center: matrix.vec2(0, 0),\n I: 0\n };\n f.getMassData(massData);\n this.m_mass += massData.mass;\n matrix.plusScaleVec2(localCenter, massData.mass, massData.center);\n this.m_I += massData.I;\n }\n\n // Compute center of mass.\n if (this.m_mass > 0.0) {\n this.m_invMass = 1.0 / this.m_mass;\n matrix.scaleVec2(localCenter, this.m_invMass, localCenter);\n\n } else {\n // Force all dynamic bodies to have a positive mass.\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n }\n\n if (this.m_I > 0.0 && this.m_fixedRotationFlag == false) {\n // Center the inertia about the center of mass.\n this.m_I -= this.m_mass * matrix.dotVec2(localCenter, localCenter);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n\n } else {\n this.m_I = 0.0;\n this.m_invI = 0.0;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(localCenter, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Set the mass properties to override the mass properties of the fixtures. Note\n * that this changes the center of mass position. Note that creating or\n * destroying fixtures can also alter the mass. This function has no effect if\n * the body isn't dynamic.\n *\n * @param massData The mass properties.\n */\n setMassData(massData: MassData): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n this.m_mass = massData.mass;\n if (this.m_mass <= 0.0) {\n this.m_mass = 1.0;\n }\n\n this.m_invMass = 1.0 / this.m_mass;\n\n if (massData.I > 0.0 && this.m_fixedRotationFlag == false) {\n this.m_I = massData.I - this.m_mass * matrix.dotVec2(massData.center, massData.center);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(massData.center, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Apply a force at a world point. If the force is not applied at the center of\n * mass, it will generate a torque and affect the angular velocity. This wakes\n * up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyForce(force: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping.\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), force);\n }\n }\n\n /**\n * Apply a force to the center of mass. This wakes up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param wake Also wake up the body\n */\n applyForceToCenter(force: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n }\n }\n\n /**\n * Apply a torque. This affects the angular velocity without affecting the\n * linear velocity of the center of mass. This wakes up the body.\n *\n * @param torque About the z-axis (out of the screen), usually in N-m.\n * @param wake Also wake up the body\n */\n applyTorque(torque: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_torque += torque;\n }\n }\n\n /**\n * Apply an impulse at a point. This immediately modifies the velocity. It also\n * modifies the angular velocity if the point of application is not at the\n * center of mass. This wakes up the body.\n *\n * @param impulse The world impulse vector, usually in N-seconds or kg-m/s.\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n\n // Don't accumulate velocity if the body is sleeping\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(point, this.m_sweep.c), impulse);\n }\n }\n\n /**\n * Apply an angular impulse.\n *\n * @param impulse The angular impulse in units of kg*m*m/s\n * @param wake Also wake up the body\n */\n applyAngularImpulse(impulse: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate velocity if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_angularVelocity += this.m_invI * impulse;\n }\n }\n\n /**\n * This is used to test if two bodies should collide.\n * \n * Bodies do not collide when:\n * - Neither of them is dynamic\n * - They are connected by a joint with collideConnected == false\n */\n shouldCollide(that: Body): boolean {\n // At least one body should be dynamic.\n if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) {\n return false;\n }\n // Does a joint prevent collision?\n for (let 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\n /** @internal Used for deserialize. */\n _addFixture(fixture: Fixture): Fixture {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.createProxies(broadPhase, this.m_xf);\n }\n\n fixture.m_next = this.m_fixtureList;\n this.m_fixtureList = fixture;\n\n // Adjust mass properties if needed.\n if (fixture.m_density > 0.0) {\n this.resetMassData();\n }\n\n // Let the world know we have a new fixture. This will cause new contacts\n // to be created at the beginning of the next time step.\n this.m_world.m_newFixture = true;\n\n return fixture;\n }\n\n /**\n * Creates a fixture and attach it to this body.\n *\n * If the density is non-zero, this function automatically updates the mass of\n * the body.\n *\n * Contacts are not created until the next time step.\n *\n * Warning: This function is locked during callbacks.\n */\n createFixture(def: FixtureDef): Fixture;\n createFixture(shape: Shape, opt?: FixtureOpt): Fixture;\n createFixture(shape: Shape, density?: number): Fixture;\n // tslint:disable-next-line:typedef\n createFixture(shape, fixdef?) {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n const fixture = new Fixture(this, shape, fixdef);\n this._addFixture(fixture);\n return fixture;\n }\n\n /**\n * Destroy a fixture. This removes the fixture from the broad-phase and destroys\n * all contacts associated with this fixture. This will automatically adjust the\n * mass of the body if the body is dynamic and the fixture has positive density.\n * All fixtures attached to a body are implicitly destroyed when the body is\n * destroyed.\n *\n * Warning: This function is locked during callbacks.\n *\n * @param fixture The fixture to be removed.\n */\n destroyFixture(fixture: Fixture): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n _ASSERT && console.assert(fixture.m_body == this);\n\n // Remove the fixture from this body's singly linked list.\n let found = false;\n if (this.m_fixtureList === fixture) {\n this.m_fixtureList = fixture.m_next;\n found = true;\n\n } else {\n let node = this.m_fixtureList;\n while (node != null) {\n if (node.m_next === fixture) {\n node.m_next = fixture.m_next;\n found = true;\n break;\n }\n node = node.m_next;\n }\n }\n\n // You tried to remove a shape that is not attached to this body.\n _ASSERT && console.assert(found);\n\n // Destroy any contacts associated with the fixture.\n let edge = this.m_contactList;\n while (edge) {\n const c = edge.contact;\n edge = edge.next;\n\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n\n if (fixture == fixtureA || fixture == fixtureB) {\n // This destroys the contact and removes it from\n // this body's contact list.\n this.m_world.destroyContact(c);\n }\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.destroyProxies(broadPhase);\n }\n\n fixture.m_body = null;\n fixture.m_next = null;\n\n this.m_world.publish(\"remove-fixture\", fixture);\n\n // Reset the mass data.\n this.resetMassData();\n }\n\n /**\n * Get the corresponding world point of a local point.\n */\n getWorldPoint(localPoint: Vec2Value): Vec2 {\n return Transform.mulVec2(this.m_xf, localPoint);\n }\n\n /**\n * Get the corresponding world vector of a local vector.\n */\n getWorldVector(localVector: Vec2Value): Vec2 {\n return Rot.mulVec2(this.m_xf.q, localVector);\n }\n\n /**\n * Gets the corresponding local point of a world point.\n */\n getLocalPoint(worldPoint: Vec2Value): Vec2 {\n return Transform.mulTVec2(this.m_xf, worldPoint);\n }\n\n /**\n * Gets the corresponding local vector of a world vector.\n */\n getLocalVector(worldVector: Vec2Value): Vec2 {\n return Rot.mulTVec2(this.m_xf.q, worldVector);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2, Vec2Value } from \"../common/Vec2\";\nimport type { Body } from \"./Body\";\nimport { TimeStep } from \"./Solver\";\nimport { Style } from \"../util/Testbed\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/**\n * A joint edge is used to connect bodies and joints together in a joint graph\n * where each body is a node and each joint is an edge. A joint edge belongs to\n * a doubly linked list maintained in each attached body. Each joint has two\n * joint nodes, one for each attached body.\n */\nexport class JointEdge {\n /**\n * provides quick access to the other body attached.\n */\n other: Body | null = null;\n /**\n * the joint\n */\n joint: Joint | null = null;\n /**\n * prev the previous joint edge in the body's joint list\n */\n prev: JointEdge | null = null;\n /**\n * the next joint edge in the body's joint list\n */\n next: JointEdge | null = null;\n}\n\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointOpt {\n /**\n * Use this to attach application specific data to your joints.\n */\n userData?: any;\n /**\n * Set this flag to true if the attached bodies\n * should collide.\n */\n collideConnected?: boolean;\n}\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointDef extends JointOpt {\n /**\n * The first attached body.\n */\n bodyA: Body;\n /**\n * The second attached body.\n */\n bodyB: Body;\n}\n\n/** @internal */ const DEFAULTS = {\n userData : null,\n collideConnected : false\n};\n\n/**\n * The base joint class. Joints are used to constraint two bodies together in\n * various fashions. Some joints also feature limits and motors.\n */\nexport abstract class Joint {\n\n /** @internal */ m_type: string = \"unknown-joint\";\n\n /** @internal */ m_bodyA: Body;\n /** @internal */ m_bodyB: Body;\n\n /** @internal */ m_collideConnected: boolean;\n\n /** @internal */ m_prev: Joint | null = null;\n /** @internal */ m_next: Joint | null = null;\n\n /** @internal */ m_edgeA: JointEdge = new JointEdge();\n /** @internal */ m_edgeB: JointEdge = new JointEdge();\n\n /** @internal */ m_islandFlag: boolean = false;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(def: JointDef);\n constructor(def: JointOpt, bodyA: Body, bodyB: Body);\n constructor(def: JointDef | JointOpt, bodyA?: Body, bodyB?: Body) {\n bodyA = \"bodyA\" in def ? def.bodyA : bodyA;\n bodyB = \"bodyB\" in def ? def.bodyB : bodyB;\n\n _ASSERT && console.assert(!!bodyA);\n _ASSERT && console.assert(!!bodyB);\n _ASSERT && console.assert(bodyA != bodyB);\n\n this.m_bodyA = bodyA!;\n this.m_bodyB = bodyB!;\n\n this.m_collideConnected = !!def.collideConnected;\n this.m_userData = def.userData;\n }\n\n /**\n * Short-cut function to determine if either body is inactive.\n */\n isActive(): boolean {\n return this.m_bodyA.isActive() && this.m_bodyB.isActive();\n }\n\n /**\n * Get the type of the concrete joint.\n */\n getType(): string {\n return this.m_type;\n }\n\n /**\n * Get the first body attached to this joint.\n */\n getBodyA(): Body {\n return this.m_bodyA;\n }\n\n /**\n * Get the second body attached to this joint.\n */\n getBodyB(): Body {\n return this.m_bodyB;\n }\n\n /**\n * Get the next joint the world joint list.\n */\n getNext(): Joint {\n return this.m_next;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get collide connected. Note: modifying the collide connect flag won't work\n * correctly because the flag is only checked when fixture AABBs begin to\n * overlap.\n */\n getCollideConnected(): boolean {\n return this.m_collideConnected;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n abstract getAnchorA(): Vec2;\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n abstract getAnchorB(): Vec2;\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n abstract getReactionForce(inv_dt: number): Vec2;\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n abstract getReactionTorque(inv_dt: number): number;\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {}\n\n abstract initVelocityConstraints(step: TimeStep): void;\n\n abstract solveVelocityConstraints(step: TimeStep): void;\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n abstract solvePositionConstraints(step: TimeStep): boolean;\n\n /**\n * @hidden @experimental\n * Update joint with new props.\n */\n abstract _reset(def: Partial): void;\n\n /**\n * @internal @deprecated\n * Temporary for backward compatibility, will be removed.\n */\n _resetAnchors(def: any): void {\n return this._reset(def);\n }\n}\n","/** @hidden */\nexport const stats = {\n gjkCalls: 0,\n gjkIters: 0,\n gjkMaxIters: 0,\n\n toiTime: 0,\n toiMaxTime: 0,\n toiCalls: 0,\n toiIters: 0,\n toiMaxIters: 0,\n toiRootIters: 0,\n toiMaxRootIters: 0,\n\n toString(newline?: string): string {\n newline = typeof newline === \"string\" ? newline : \"\\n\";\n let string = \"\";\n // tslint:disable-next-line:no-for-in\n for (const name in this) {\n if (typeof this[name] !== \"function\" && typeof this[name] !== \"object\") {\n string += name + \": \" + this[name] + newline;\n }\n }\n return string;\n }\n};\n","/** @internal */\nexport const now = function(): number {\n return Date.now();\n};\n\n/** @internal */\nexport const diff = function(time: number): number {\n return Date.now() - time;\n};\n\n/** @internal */\nexport default {\n now,\n diff,\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport { Shape } from \"./Shape\";\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Transform, TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const e12 = matrix.vec2(0, 0);\n/** @internal */ const e13 = matrix.vec2(0, 0);\n/** @internal */ const e23 = matrix.vec2(0, 0);\n/** @internal */ const temp1 = matrix.vec2(0, 0);\n/** @internal */ const temp2 = matrix.vec2(0, 0);\n\n/**\n * GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates.\n */\n\nstats.gjkCalls = 0;\nstats.gjkIters = 0;\nstats.gjkMaxIters = 0;\n\n/**\n * Input for Distance. You have to option to use the shape radii in the\n * computation. Even\n */\nexport class DistanceInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n useRadii = false;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n this.useRadii = false;\n }\n}\n\n/**\n * Output for Distance.\n */\nexport class DistanceOutput {\n /** closest point on shapeA */\n pointA = matrix.vec2(0, 0);\n /** closest point on shapeB */\n pointB = matrix.vec2(0, 0);\n distance = 0;\n /** iterations number of GJK iterations used */\n iterations = 0;\n recycle() {\n matrix.zeroVec2(this.pointA);\n matrix.zeroVec2(this.pointB);\n this.distance = 0;\n this.iterations = 0;\n }\n}\n\n/**\n * Used to warm start Distance. Set count to zero on first call.\n */\nexport class SimplexCache {\n /** length or area */\n metric: number = 0;\n /** vertices on shape A */\n indexA: number[] = [];\n /** vertices on shape B */\n indexB: number[] = [];\n count: number = 0;\n recycle() {\n this.metric = 0;\n this.indexA.length = 0;\n this.indexB.length = 0;\n this.count = 0;\n }\n}\n\n/**\n * Compute the closest points between two shapes. Supports any combination of:\n * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On\n * the first call set SimplexCache.count to zero.\n */\nexport const Distance = function (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void {\n ++stats.gjkCalls;\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n // Initialize the simplex.\n // const simplex = new Simplex();\n simplex.recycle();\n simplex.readCache(cache, proxyA, xfA, proxyB, xfB);\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n const k_maxIters = Settings.maxDistanceIterations;\n\n // These store the vertices of the last simplex so that we\n // can check for duplicates and prevent cycling.\n const saveA = [];\n const saveB = []; // int[3]\n let saveCount = 0;\n\n // Main iteration loop.\n let iter = 0;\n while (iter < k_maxIters) {\n // Copy simplex so we can identify duplicates.\n saveCount = simplex.m_count;\n for (let i = 0; i < saveCount; ++i) {\n saveA[i] = vertices[i].indexA;\n saveB[i] = vertices[i].indexB;\n }\n\n simplex.solve();\n\n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count === 3) {\n break;\n }\n\n // Get search direction.\n const d = simplex.getSearchDirection();\n\n // Ensure the search direction is numerically fit.\n if (matrix.lengthSqrVec2(d) < EPSILON * EPSILON) {\n // The origin is probably contained by a line segment\n // or triangle. Thus the shapes are overlapped.\n\n // We can't return zero here even though there may be overlap.\n // In case the simplex is a point, segment, or triangle it is difficult\n // to determine if the origin is contained in the CSO or very close to it.\n break;\n }\n\n // Compute a tentative new simplex vertex using support points.\n const vertex = vertices[simplex.m_count]; // SimplexVertex\n\n vertex.indexA = proxyA.getSupport(matrix.derotVec2(temp, xfA.q, matrix.scaleVec2(temp, -1, d)));\n matrix.transformVec2(vertex.wA, xfA, proxyA.getVertex(vertex.indexA));\n\n vertex.indexB = proxyB.getSupport(matrix.derotVec2(temp, xfB.q, d));\n matrix.transformVec2(vertex.wB, xfB, proxyB.getVertex(vertex.indexB));\n\n matrix.subVec2(vertex.w, vertex.wB, vertex.wA);\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n ++stats.gjkIters;\n\n // Check for duplicate support points. This is the main termination\n // criteria.\n let duplicate = false;\n for (let i = 0; i < saveCount; ++i) {\n if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) {\n duplicate = true;\n break;\n }\n }\n\n // If we found a duplicate support point we must exit to avoid cycling.\n if (duplicate) {\n break;\n }\n\n // New vertex is ok and needed.\n ++simplex.m_count;\n }\n\n stats.gjkMaxIters = math_max(stats.gjkMaxIters, iter);\n\n // Prepare output.\n simplex.getWitnessPoints(output.pointA, output.pointB);\n output.distance = matrix.distVec2(output.pointA, output.pointB);\n output.iterations = iter;\n\n // Cache the simplex.\n simplex.writeCache(cache);\n\n // Apply radii if requested.\n if (input.useRadii) {\n const rA = proxyA.m_radius;\n const rB = proxyB.m_radius;\n\n if (output.distance > rA + rB && output.distance > EPSILON) {\n // Shapes are still no overlapped.\n // Move the witness points to the outer surface.\n output.distance -= rA + rB;\n matrix.subVec2(normal, output.pointB, output.pointA);\n matrix.normalizeVec2(normal);\n matrix.plusScaleVec2(output.pointA, rA, normal);\n matrix.minusScaleVec2(output.pointB, rB, normal);\n } else {\n // Shapes are overlapped when radii are considered.\n // Move the witness points to the middle.\n const p = matrix.subVec2(temp, output.pointA, output.pointB);\n matrix.copyVec2(output.pointA, p);\n matrix.copyVec2(output.pointB, p);\n output.distance = 0.0;\n }\n }\n};\n\n/**\n * A distance proxy is used by the GJK algorithm. It encapsulates any shape.\n */\nexport class DistanceProxy {\n /** @internal */ m_vertices: Vec2Value[] = [];\n // todo: remove this?\n /** @internal */ m_count = 0;\n /** @internal */ m_radius = 0;\n\n recycle() {\n this.m_vertices.length = 0;\n this.m_count = 0;\n this.m_radius = 0;\n }\n\n /**\n * Get the vertex count.\n */\n getVertexCount(): number {\n return this.m_count;\n }\n\n /**\n * Get a vertex by index. Used by Distance.\n */\n getVertex(index: number): Vec2Value {\n _ASSERT && console.assert(0 <= index && index < this.m_count);\n return this.m_vertices[index];\n }\n\n /**\n * Get the supporting vertex index in the given direction.\n */\n getSupport(d: Vec2Value): number {\n let bestIndex = -1;\n let bestValue = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const value = matrix.dotVec2(this.m_vertices[i], d);\n if (value > bestValue) {\n bestIndex = i;\n bestValue = value;\n }\n }\n return bestIndex;\n }\n\n /**\n * Get the supporting vertex in the given direction.\n */\n getSupportVertex(d: Vec2Value): Vec2Value {\n return this.m_vertices[this.getSupport(d)];\n }\n\n /**\n * Initialize the proxy using the given shape. The shape must remain in scope\n * while the proxy is in use.\n */\n set(shape: Shape, index: number): void {\n // TODO remove, use shape instead\n _ASSERT && console.assert(typeof shape.computeDistanceProxy === \"function\");\n shape.computeDistanceProxy(this, index);\n }\n\n /**\n * Initialize the proxy using a vertex cloud and radius. The vertices\n * must remain in scope while the proxy is in use.\n */\n setVertices(vertices: Vec2Value[], count: number, radius: number) {\n this.m_vertices = vertices;\n this.m_count = count;\n this.m_radius = radius;\n }\n}\n\nclass SimplexVertex {\n /** support point in proxyA */\n wA = matrix.vec2(0, 0);\n /** wA index */\n indexA = 0;\n\n /** support point in proxyB */\n wB = matrix.vec2(0, 0);\n /** wB index */\n indexB = 0;\n\n /** wB - wA; */\n w = matrix.vec2(0, 0);\n /** barycentric coordinate for closest point */\n a = 0;\n\n recycle() {\n this.indexA = 0;\n this.indexB = 0;\n matrix.zeroVec2(this.wA);\n matrix.zeroVec2(this.wB);\n matrix.zeroVec2(this.w);\n this.a = 0;\n }\n set(v: SimplexVertex): void {\n this.indexA = v.indexA;\n this.indexB = v.indexB;\n matrix.copyVec2(this.wA, v.wA);\n matrix.copyVec2(this.wB, v.wB);\n matrix.copyVec2(this.w, v.w);\n this.a = v.a;\n }\n}\n\n/** @internal */ const searchDirection_reuse = matrix.vec2(0, 0);\n/** @internal */ const closestPoint_reuse = matrix.vec2(0, 0); \n\nclass Simplex {\n m_v1 = new SimplexVertex();\n m_v2 = new SimplexVertex();\n m_v3 = new SimplexVertex();\n m_v = [this.m_v1, this.m_v2, this.m_v3];\n m_count: number;\n recycle() {\n this.m_v1.recycle();\n this.m_v2.recycle();\n this.m_v3.recycle();\n this.m_count = 0;\n }\n\n /** @internal */ toString(): string {\n if (this.m_count === 3) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y,\n this.m_v3.a, this.m_v3.wA.x, this.m_v3.wA.y, this.m_v3.wB.x, this.m_v3.wB.y\n ].toString();\n\n } else if (this.m_count === 2) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y\n ].toString();\n\n } else if (this.m_count === 1) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y\n ].toString();\n\n } else {\n return \"+\" + this.m_count;\n }\n }\n\n readCache(cache: SimplexCache, proxyA: DistanceProxy, transformA: TransformValue, proxyB: DistanceProxy, transformB: TransformValue): void {\n _ASSERT && console.assert(cache.count <= 3);\n\n // Copy data from cache.\n this.m_count = cache.count;\n for (let i = 0; i < this.m_count; ++i) {\n const v = this.m_v[i];\n v.indexA = cache.indexA[i];\n v.indexB = cache.indexB[i];\n const wALocal = proxyA.getVertex(v.indexA);\n const wBLocal = proxyB.getVertex(v.indexB);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 0.0;\n }\n\n // Compute the new simplex metric, if it is substantially different than\n // old metric then flush the simplex.\n if (this.m_count > 1) {\n const metric1 = cache.metric;\n const metric2 = this.getMetric();\n if (metric2 < 0.5 * metric1 || 2.0 * metric1 < metric2 || metric2 < EPSILON) {\n // Reset the simplex.\n this.m_count = 0;\n }\n }\n\n // If the cache is empty or invalid...\n if (this.m_count === 0) {\n const v = this.m_v[0];\n v.indexA = 0;\n v.indexB = 0;\n const wALocal = proxyA.getVertex(0);\n const wBLocal = proxyB.getVertex(0);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 1.0;\n this.m_count = 1;\n }\n }\n\n writeCache(cache: SimplexCache): void {\n cache.metric = this.getMetric();\n cache.count = this.m_count;\n for (let i = 0; i < this.m_count; ++i) {\n cache.indexA[i] = this.m_v[i].indexA;\n cache.indexB[i] = this.m_v[i].indexB;\n }\n }\n\n getSearchDirection(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 1:\n return matrix.setVec2(searchDirection_reuse, -v1.w.x, -v1.w.y);\n\n case 2: {\n matrix.subVec2(e12, v2.w, v1.w);\n const sgn = -matrix.crossVec2Vec2(e12, v1.w);\n if (sgn > 0.0) {\n // Origin is left of e12.\n return matrix.setVec2(searchDirection_reuse, -e12.y, e12.x);\n } else {\n // Origin is right of e12.\n return matrix.setVec2(searchDirection_reuse, e12.y, -e12.x);\n }\n }\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(searchDirection_reuse);\n }\n }\n\n getClosestPoint(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n\n case 1:\n return matrix.copyVec2(closestPoint_reuse, v1.w);\n\n case 2:\n return matrix.combine2Vec2(closestPoint_reuse, v1.a, v1.w, v2.a, v2.w);\n\n case 3:\n return matrix.zeroVec2(closestPoint_reuse);\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n }\n }\n\n getWitnessPoints(pA: Vec2Value, pB: Vec2Value): void {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n break;\n\n case 1:\n matrix.copyVec2(pA, v1.wA);\n matrix.copyVec2(pB, v1.wB);\n break;\n\n case 2:\n matrix.combine2Vec2(pA, v1.a, v1.wA, v2.a, v2.wA);\n matrix.combine2Vec2(pB, v1.a, v1.wB, v2.a, v2.wB);\n break;\n\n case 3:\n matrix.combine3Vec2(pA, v1.a, v1.wA, v2.a, v2.wA, v3.a, v3.wA);\n matrix.copyVec2(pB, pA);\n break;\n\n default:\n _ASSERT && console.assert(false);\n break;\n }\n }\n\n getMetric(): number {\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return 0.0;\n\n case 1:\n return 0.0;\n\n case 2:\n return matrix.distVec2(this.m_v1.w, this.m_v2.w);\n\n case 3:\n return matrix.crossVec2Vec2(\n matrix.subVec2(temp1, this.m_v2.w, this.m_v1.w),\n matrix.subVec2(temp2, this.m_v3.w, this.m_v1.w),\n );\n\n default:\n _ASSERT && console.assert(false);\n return 0.0;\n }\n }\n\n solve(): void {\n switch (this.m_count) {\n case 1:\n break;\n\n case 2:\n this.solve2();\n break;\n\n case 3:\n this.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n }\n\n// Solve a line segment using barycentric coordinates.\n//\n// p = a1 * w1 + a2 * w2\n// a1 + a2 = 1\n//\n// The vector from the origin to the closest point on the line is\n// perpendicular to the line.\n// e12 = w2 - w1\n// dot(p, e) = 0\n// a1 * dot(w1, e) + a2 * dot(w2, e) = 0\n//\n// 2-by-2 linear system\n// [1 1 ][a1] = [1]\n// [w1.e12 w2.e12][a2] = [0]\n//\n// Define\n// d12_1 = dot(w2, e12)\n// d12_2 = -dot(w1, e12)\n// d12 = d12_1 + d12_2\n//\n// Solution\n// a1 = d12_1 / d12\n// a2 = d12_2 / d12\n solve2(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n matrix.subVec2(e12, w2, w1);\n\n // w1 region\n const d12_2 = -matrix.dotVec2(w1, e12);\n if (d12_2 <= 0.0) {\n // a2 <= 0, so we clamp it to 0\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // w2 region\n const d12_1 = matrix.dotVec2(w2, e12);\n if (d12_1 <= 0.0) {\n // a1 <= 0, so we clamp it to 0\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // Must be in e12 region.\n const inv_d12 = 1.0 / (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\n// Possible regions:\n// - points[2]\n// - edge points[0]-points[2]\n// - edge points[1]-points[2]\n// - inside the triangle\n solve3(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n const w3 = this.m_v3.w;\n\n // Edge12\n // [1 1 ][a1] = [1]\n // [w1.e12 w2.e12][a2] = [0]\n // a3 = 0\n matrix.subVec2(e12, w2, w1);\n const w1e12 = matrix.dotVec2(w1, e12);\n const w2e12 = matrix.dotVec2(w2, e12);\n const d12_1 = w2e12;\n const d12_2 = -w1e12;\n\n // Edge13\n // [1 1 ][a1] = [1]\n // [w1.e13 w3.e13][a3] = [0]\n // a2 = 0\n matrix.subVec2(e13, w3, w1);\n const w1e13 = matrix.dotVec2(w1, e13);\n const w3e13 = matrix.dotVec2(w3, e13);\n const d13_1 = w3e13;\n const d13_2 = -w1e13;\n\n // Edge23\n // [1 1 ][a2] = [1]\n // [w2.e23 w3.e23][a3] = [0]\n // a1 = 0\n matrix.subVec2(e23, w3, w2);\n const w2e23 = matrix.dotVec2(w2, e23);\n const w3e23 = matrix.dotVec2(w3, e23);\n const d23_1 = w3e23;\n const d23_2 = -w2e23;\n\n // Triangle123\n const n123 = matrix.crossVec2Vec2(e12, e13);\n\n const d123_1 = n123 * matrix.crossVec2Vec2(w2, w3);\n const d123_2 = n123 * matrix.crossVec2Vec2(w3, w1);\n const d123_3 = n123 * matrix.crossVec2Vec2(w1, w2);\n\n // w1 region\n if (d12_2 <= 0.0 && d13_2 <= 0.0) {\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // e12\n if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) {\n const inv_d12 = 1.0 / (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\n // e13\n if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) {\n const inv_d13 = 1.0 / (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\n // w2 region\n if (d12_1 <= 0.0 && d23_2 <= 0.0) {\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // w3 region\n if (d13_1 <= 0.0 && d23_1 <= 0.0) {\n this.m_v3.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v3);\n return;\n }\n\n // e23\n if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) {\n const inv_d23 = 1.0 / (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\n // Must be in triangle123\n const inv_d123 = 1.0 / (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}\n\n/** @internal */ const simplex = new Simplex();\n\n/** @internal */ const input = new DistanceInput();\n/** @internal */ const cache = new SimplexCache();\n/** @internal */ const output = new DistanceOutput();\n\n/**\n * Determine if two generic shapes overlap.\n */\nexport const testOverlap = function (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue): boolean {\n input.recycle();\n input.proxyA.set(shapeA, indexA);\n input.proxyB.set(shapeB, indexB);\n matrix.copyTransform(input.transformA, xfA);\n matrix.copyTransform(input.transformB, xfB);\n input.useRadii = true;\n\n output.recycle();\n cache.recycle();\n\n Distance(output, cache, input);\n\n return output.distance < 10.0 * EPSILON;\n};\n\n// legacy exports\nDistance.testOverlap = testOverlap;\nDistance.Input = DistanceInput;\nDistance.Output = DistanceOutput;\nDistance.Proxy = DistanceProxy;\nDistance.Cache = SimplexCache;\n\n/**\n * Input parameters for ShapeCast\n */\nexport class ShapeCastInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n readonly translationB = Vec2.zero();\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n matrix.zeroVec2(this.translationB);\n }\n}\n\n/**\n * Output results for b2ShapeCast\n */\nexport class ShapeCastOutput {\n point: Vec2 = Vec2.zero();\n normal: Vec2 = Vec2.zero();\n lambda = 1.0;\n iterations = 0;\n}\n\n/**\n * Perform a linear shape cast of shape B moving and shape A fixed. Determines\n * the hit point, normal, and translation fraction.\n * \n * @returns true if hit, false if there is no hit or an initial overlap\n */\n//\n// GJK-raycast\n// Algorithm by Gino van den Bergen.\n// \"Smooth Mesh Contacts with GJK\" in Game Physics Pearls. 2010\nexport const ShapeCast = function(output: ShapeCastOutput, input: ShapeCastInput): boolean {\n output.iterations = 0;\n output.lambda = 1.0;\n output.normal.setZero();\n output.point.setZero();\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n\n const radiusA = math_max(proxyA.m_radius, Settings.polygonRadius);\n const radiusB = math_max(proxyB.m_radius, Settings.polygonRadius);\n const radius = radiusA + radiusB;\n\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n const r = input.translationB;\n const n = Vec2.zero();\n let lambda = 0.0;\n\n // Initial simplex\n const simplex = new Simplex();\n simplex.m_count = 0;\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n\n // Get support point in -r direction\n let indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(r)));\n let wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n let indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, r));\n let wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const v = Vec2.sub(wA, wB);\n\n // Sigma is the target distance between polygons\n const sigma = math_max(Settings.polygonRadius, radius - Settings.polygonRadius);\n const tolerance = 0.5 * Settings.linearSlop;\n\n // Main iteration loop.\n const k_maxIters = 20;\n let iter = 0;\n while (iter < k_maxIters && v.length() - sigma > tolerance) {\n _ASSERT && console.assert(simplex.m_count < 3);\n\n output.iterations += 1;\n\n // Support in direction -v (A - B)\n indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(v)));\n wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, v));\n wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const p = Vec2.sub(wA, wB);\n\n // -v is a normal at p\n v.normalize();\n\n // Intersect ray with plane\n const vp = Vec2.dot(v, p);\n const vr = Vec2.dot(v, r);\n if (vp - sigma > lambda * vr) {\n if (vr <= 0.0) {\n return false;\n }\n\n lambda = (vp - sigma) / vr;\n if (lambda > 1.0) {\n return false;\n }\n\n n.setMul(-1, v);\n simplex.m_count = 0;\n }\n\n // Reverse simplex since it works with B - A.\n // Shift by lambda * r because we want the closest point to the current clip point.\n // Note that the support point p is not shifted because we want the plane equation\n // to be formed in unshifted space.\n const vertex = vertices[simplex.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.0;\n simplex.m_count += 1;\n\n switch (simplex.m_count) {\n case 1:\n break;\n\n case 2:\n simplex.solve2();\n break;\n\n case 3:\n simplex.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n \n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count == 3) {\n // Overlap\n return false;\n }\n\n // Get search direction.\n v.setVec2(simplex.getClosestPoint());\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n }\n\n if (iter == 0) {\n // Initial overlap\n return false;\n\t}\n\n // Prepare output.\n const pointA = Vec2.zero();\n const pointB = Vec2.zero();\n simplex.getWitnessPoints(pointB, pointA);\n\n if (v.lengthSquared() > 0.0) {\n n.setMul(-1, v);\n n.normalize();\n }\n\n output.point = Vec2.combine(1, pointA, radiusA, n);\n output.normal = n;\n output.lambda = lambda;\n output.iterations = iter;\n return true;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport Timer from \"../util/Timer\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Distance, DistanceInput, DistanceOutput, DistanceProxy, SimplexCache } from \"./Distance\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\n/**\n * Input parameters for TimeOfImpact.\n */\nexport class TOIInput {\n proxyA = new DistanceProxy();\n proxyB = new DistanceProxy();\n sweepA = new Sweep();\n sweepB = new Sweep();\n /** defines sweep interval [0, tMax] */\n tMax: number;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.sweepA.recycle();\n this.sweepB.recycle();\n this.tMax = -1;\n }\n}\n\nexport enum TOIOutputState {\n e_unset = -1,\n e_unknown = 0,\n e_failed = 1,\n e_overlapped = 2,\n e_touching = 3,\n e_separated = 4,\n}\n\n/**\n * Output parameters for TimeOfImpact.\n */\nexport class TOIOutput {\n state = TOIOutputState.e_unset;\n t = -1;\n recycle() {\n this.state = TOIOutputState.e_unset;\n this.t = -1;\n }\n}\n\nstats.toiTime = 0;\nstats.toiMaxTime = 0;\nstats.toiCalls = 0;\nstats.toiIters = 0;\nstats.toiMaxIters = 0;\nstats.toiRootIters = 0;\nstats.toiMaxRootIters = 0;\n\n/** @internal */ const distanceInput = new DistanceInput();\n/** @internal */ const distanceOutput = new DistanceOutput();\n// this is passed to Distance and SeparationFunction\n/** @internal */ const cache = new SimplexCache();\n\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const axisA = matrix.vec2(0, 0);\n/** @internal */ const axisB = matrix.vec2(0, 0);\n/** @internal */ const localPointA = matrix.vec2(0, 0);\n/** @internal */ const localPointB = matrix.vec2(0, 0);\n\n\n/**\n * Compute the upper bound on time before two shapes penetrate. Time is\n * represented as a fraction between [0,tMax]. This uses a swept separating axis\n * and may miss some intermediate, non-tunneling collisions. If you change the\n * time interval, you should call this function again.\n *\n * Note: use Distance to compute the contact point and normal at the time of\n * impact.\n *\n * CCD via the local separating axis method. This seeks progression by computing\n * the largest time at which separation is maintained.\n */\nexport const TimeOfImpact = function (output: TOIOutput, input: TOIInput): void {\n const timer = Timer.now();\n\n ++stats.toiCalls;\n\n output.state = TOIOutputState.e_unknown;\n output.t = input.tMax;\n\n const proxyA = input.proxyA; // DistanceProxy\n const proxyB = input.proxyB; // DistanceProxy\n\n const sweepA = input.sweepA; // Sweep\n const sweepB = input.sweepB; // Sweep\n\n // Large rotations can make the root finder fail, so we normalize the\n // sweep angles.\n sweepA.normalize();\n sweepB.normalize();\n\n const tMax = input.tMax;\n\n const totalRadius = proxyA.m_radius + proxyB.m_radius;\n const target = math_max(Settings.linearSlop, totalRadius - 3.0 * Settings.linearSlop);\n const tolerance = 0.25 * Settings.linearSlop;\n _ASSERT && console.assert(target > tolerance);\n\n let t1 = 0.0;\n const k_maxIterations = Settings.maxTOIIterations;\n let iter = 0;\n\n // Prepare input for distance query.\n // const cache = new SimplexCache();\n cache.recycle();\n\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\n // The outer loop progressively attempts to compute new separating axes.\n // This loop terminates when an axis is repeated (no progress is made).\n while (true) {\n sweepA.getTransform(xfA, t1);\n sweepB.getTransform(xfB, t1);\n\n // Get the distance between shapes. We can also use the results\n // to get a separating axis.\n matrix.copyTransform(distanceInput.transformA, xfA);\n matrix.copyTransform(distanceInput.transformB, xfB);\n Distance(distanceOutput, cache, distanceInput);\n\n // If the shapes are overlapped, we give up on continuous collision.\n if (distanceOutput.distance <= 0.0) {\n // Failure!\n output.state = TOIOutputState.e_overlapped;\n output.t = 0.0;\n break;\n }\n\n if (distanceOutput.distance < target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n break;\n }\n\n // Initialize the separating axis.\n separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1);\n\n // if (false) {\n // // Dump the curve seen by the root finder\n // const N = 100;\n // const dx = 1.0 / N;\n // const xs = []; // [ N + 1 ];\n // const fs = []; // [ N + 1 ];\n // const x = 0.0;\n // for (const i = 0; i <= N; ++i) {\n // sweepA.getTransform(xfA, x);\n // sweepB.getTransform(xfB, x);\n // const f = fcn.evaluate(xfA, xfB) - target;\n // printf(\"%g %g\\n\", x, f);\n // xs[i] = x;\n // fs[i] = f;\n // x += dx;\n // }\n // }\n\n // Compute the TOI on the separating axis. We do this by successively\n // resolving the deepest point. This loop is bounded by the number of\n // vertices.\n let done = false;\n let t2 = tMax;\n let pushBackIter = 0;\n while (true) {\n // Find the deepest point at t2. Store the witness point indices.\n let s2 = separationFunction.findMinSeparation(t2);\n\n // Is the final configuration separated?\n if (s2 > target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_separated;\n output.t = tMax;\n done = true;\n break;\n }\n\n // Has the separation reached tolerance?\n if (s2 > target - tolerance) {\n // Advance the sweeps\n t1 = t2;\n break;\n }\n\n // Compute the initial separation of the witness points.\n let s1 = separationFunction.evaluate(t1);\n\n // Check for initial overlap. This might happen if the root finder\n // runs out of iterations.\n if (s1 < target - tolerance) {\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n done = true;\n break;\n }\n\n // Check for touching\n if (s1 <= target + tolerance) {\n // Victory! t1 should hold the TOI (could be 0.0).\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n done = true;\n break;\n }\n\n // Compute 1D root of: f(x) - target = 0\n let rootIterCount = 0;\n let a1 = t1;\n let a2 = t2;\n while (true) {\n // Use a mix of the secant rule and bisection.\n let t;\n if (rootIterCount & 1) {\n // Secant rule to improve convergence.\n t = a1 + (target - s1) * (a2 - a1) / (s2 - s1);\n } else {\n // Bisection to guarantee progress.\n t = 0.5 * (a1 + a2);\n }\n\n ++rootIterCount;\n ++stats.toiRootIters;\n\n const s = separationFunction.evaluate(t);\n\n if (math_abs(s - target) < tolerance) {\n // t2 holds a tentative value for t1\n t2 = t;\n break;\n }\n\n // Ensure we continue to bracket the root.\n if (s > target) {\n a1 = t;\n s1 = s;\n } else {\n a2 = t;\n s2 = s;\n }\n\n if (rootIterCount === 50) {\n break;\n }\n }\n\n stats.toiMaxRootIters = math_max(stats.toiMaxRootIters, rootIterCount);\n\n ++pushBackIter;\n\n if (pushBackIter === Settings.maxPolygonVertices) {\n break;\n }\n }\n\n ++iter;\n ++stats.toiIters;\n\n if (done) {\n break;\n }\n\n if (iter === k_maxIterations) {\n // Root finder got stuck. Semi-victory.\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n break;\n }\n }\n\n stats.toiMaxIters = math_max(stats.toiMaxIters, iter);\n\n const time = Timer.diff(timer);\n stats.toiMaxTime = math_max(stats.toiMaxTime, time);\n stats.toiTime += time;\n\n separationFunction.recycle();\n};\n\nenum SeparationFunctionType {\n e_unset = -1,\n e_points = 1,\n e_faceA = 2,\n e_faceB = 3,\n}\n\nclass SeparationFunction {\n // input cache\n // todo: maybe assign by copy instead of reference?\n m_proxyA: DistanceProxy = null;\n m_proxyB: DistanceProxy = null;\n m_sweepA: Sweep = null;\n m_sweepB: Sweep = null;\n\n // initialize cache\n m_type = SeparationFunctionType.e_unset;\n m_localPoint = matrix.vec2(0, 0);\n m_axis = matrix.vec2(0, 0);\n\n // compute output\n indexA = -1;\n indexB = -1;\n\n recycle() {\n this.m_proxyA = null;\n this.m_proxyB = null;\n this.m_sweepA = null;\n this.m_sweepB = null;\n\n this.m_type = SeparationFunctionType.e_unset;\n matrix.zeroVec2(this.m_localPoint);\n matrix.zeroVec2(this.m_axis);\n\n this.indexA = -1;\n this.indexB = -1;\n }\n\n // TODO_ERIN might not need to return the separation\n\n initialize(cache: SimplexCache, proxyA: DistanceProxy, sweepA: Sweep, proxyB: DistanceProxy, sweepB: Sweep, t1: number): number {\n const count = cache.count;\n _ASSERT && console.assert(0 < count && count < 3);\n\n this.m_proxyA = proxyA;\n this.m_proxyB = proxyB;\n this.m_sweepA = sweepA;\n this.m_sweepB = sweepB;\n\n this.m_sweepA.getTransform(xfA, t1);\n this.m_sweepB.getTransform(xfB, t1);\n\n if (count === 1) {\n this.m_type = SeparationFunctionType.e_points;\n const localPointA = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n matrix.subVec2(this.m_axis, pointB, pointA);\n const s = matrix.normalizeVec2Length(this.m_axis);\n return s;\n\n } else if (cache.indexA[0] === cache.indexA[1]) {\n // Two points on B and one on A.\n this.m_type = SeparationFunctionType.e_faceB;\n const localPointB1 = proxyB.getVertex(cache.indexB[0]);\n const localPointB2 = proxyB.getVertex(cache.indexB[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointB2, localPointB1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n const localPointA = proxyA.getVertex(cache.indexA[0]);\n const pointA = Transform.mulVec2(xfA, localPointA);\n\n let s = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n\n } else {\n // Two points on A and one or two points on B.\n this.m_type = SeparationFunctionType.e_faceA;\n const localPointA1 = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointA2 = this.m_proxyA.getVertex(cache.indexA[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointA2, localPointA1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n let s = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n }\n }\n\n compute(find: boolean, t: number): number {\n // It was findMinSeparation and evaluate\n this.m_sweepA.getTransform(xfA, t);\n this.m_sweepB.getTransform(xfB, t);\n\n switch (this.m_type) {\n case SeparationFunctionType.e_points: {\n if (find) {\n matrix.derotVec2(axisA, xfA.q, this.m_axis);\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, this.m_axis));\n\n this.indexA = this.m_proxyA.getSupport(axisA);\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, this.m_axis) - matrix.dotVec2(pointA, this.m_axis);\n return sep;\n }\n\n case SeparationFunctionType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexA = -1;\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n return sep;\n }\n\n case SeparationFunctionType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisA, xfA.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexB = -1;\n this.indexA = this.m_proxyA.getSupport(axisA);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.transformVec2(pointA, xfA, localPointA);\n\n const sep = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n return sep;\n }\n\n default:\n _ASSERT && console.assert(false);\n if (find) {\n this.indexA = -1;\n this.indexB = -1;\n }\n return 0.0;\n }\n }\n\n findMinSeparation(t: number): number {\n return this.compute(true, t);\n }\n\n evaluate(t: number): number {\n return this.compute(false, t);\n }\n}\n\n/** @internal */ const separationFunction = new SeparationFunction();\n\n// legacy exports\nTimeOfImpact.Input = TOIInput;\nTimeOfImpact.Output = TOIOutput;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { EPSILON } from \"../common/Math\";\nimport { Body } from \"./Body\";\nimport type { Contact } from \"./Contact\";\nimport { Joint } from \"./Joint\";\nimport { TimeOfImpact, TOIInput, TOIOutput, TOIOutputState } from \"../collision/TimeOfImpact\";\nimport { Distance, DistanceInput, DistanceOutput, SimplexCache } from \"../collision/Distance\";\nimport { World } from \"./World\";\nimport { Sweep } from \"../common/Sweep\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_min = Math.min;\n\n\nexport class TimeStep {\n /** time step */\n dt: number = 0;\n /** inverse time step (0 if dt == 0) */\n inv_dt: number = 0;\n velocityIterations: number = 0;\n positionIterations: number = 0;\n warmStarting: boolean = false;\n blockSolve: boolean = true;\n\n /** timestep ratio for variable timestep */\n inv_dt0: number = 0.0;\n /** dt * inv_dt0 */\n dtRatio: number = 1;\n\n reset(dt: number): void {\n if (this.dt > 0.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}\n\n// reuse\n/** @internal */ const s_subStep = new TimeStep();\n/** @internal */ const c = matrix.vec2(0, 0);\n/** @internal */ const v = matrix.vec2(0, 0);\n/** @internal */ const translation = matrix.vec2(0, 0);\n/** @internal */ const input = new TOIInput();\n/** @internal */ const output = new TOIOutput();\n/** @internal */ const backup = new Sweep();\n/** @internal */ const backup1 = new Sweep();\n/** @internal */ const backup2 = new Sweep();\n\n/**\n * Contact impulses for reporting. Impulses are used instead of forces because\n * sub-step forces may approach infinity for rigid body collisions. These match\n * up one-to-one with the contact points in Manifold.\n */\nexport class ContactImpulse {\n // TODO: merge with Contact class?\n\n private readonly contact: Contact;\n private readonly normals: number[];\n private readonly tangents: number[];\n\n constructor(contact: Contact) {\n this.contact = contact;\n this.normals = [];\n this.tangents = [];\n }\n\n recycle() {\n this.normals.length = 0;\n this.tangents.length = 0;\n }\n\n get normalImpulses(): number[] {\n const contact = this.contact;\n const normals = this.normals;\n normals.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n normals.push(contact.v_points[p].normalImpulse);\n }\n return normals;\n }\n\n get tangentImpulses(): number[] {\n const contact = this.contact;\n const tangents = this.tangents;\n tangents.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n tangents.push(contact.v_points[p].tangentImpulse);\n }\n return tangents;\n }\n}\n\n/**\n * Finds and solves islands. An island is a connected subset of the world.\n */\nexport class Solver {\n m_world: World;\n m_stack: Body[];\n m_bodies: Body[];\n m_contacts: Contact[];\n m_joints: Joint[];\n\n constructor(world: World) {\n this.m_world = world;\n this.m_stack = [];\n this.m_bodies = [];\n this.m_contacts = [];\n this.m_joints = [];\n }\n\n clear(): void {\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\n addBody(body: Body): void {\n _ASSERT && console.assert(body instanceof Body, \"Not a Body!\", body);\n this.m_bodies.push(body);\n // why?\n // body.c_position.c.setZero();\n // body.c_position.a = 0;\n // body.c_velocity.v.setZero();\n // body.c_velocity.w = 0;\n }\n\n addContact(contact: Contact): void {\n // _ASSERT && console.assert(contact instanceof Contact, 'Not a Contact!', contact);\n this.m_contacts.push(contact);\n }\n\n addJoint(joint: Joint): void {\n _ASSERT && console.assert(joint instanceof Joint, \"Not a Joint!\", joint);\n this.m_joints.push(joint);\n }\n\n solveWorld(step: TimeStep): void {\n const world = this.m_world;\n\n // Clear all the island flags.\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n }\n for (let c = world.m_contactList; c; c = c.m_next) {\n c.m_islandFlag = false;\n }\n for (let j = world.m_jointList; j; j = j.m_next) {\n j.m_islandFlag = false;\n }\n\n // Build and simulate all awake islands.\n const stack = this.m_stack;\n let loop = -1;\n for (let seed = world.m_bodyList; seed; seed = seed.m_next) {\n loop++;\n if (seed.m_islandFlag) {\n continue;\n }\n\n if (seed.isAwake() == false || seed.isActive() == false) {\n continue;\n }\n\n // The seed can be dynamic or kinematic.\n if (seed.isStatic()) {\n continue;\n }\n\n // Reset island and stack.\n this.clear();\n\n stack.push(seed);\n\n seed.m_islandFlag = true;\n\n // Perform a depth first search (DFS) on the constraint graph.\n while (stack.length > 0) {\n // Grab the next body off the stack and add it to the island.\n const b = stack.pop();\n _ASSERT && console.assert(b.isActive() == true);\n this.addBody(b);\n\n // Make sure the body is awake (without resetting sleep timer).\n b.m_awakeFlag = true;\n\n // To keep islands as small as possible, we don't\n // propagate islands across static bodies.\n if (b.isStatic()) {\n continue;\n }\n\n // Search all contacts connected to this body.\n for (let ce = b.m_contactList; ce; ce = ce.next) {\n const contact = ce.contact;\n\n // Has this contact already been added to an island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Is this contact solid and touching?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n this.addContact(contact);\n contact.m_islandFlag = true;\n\n const other = ce.other;\n\n // Was the other body already added to this island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n\n // Search all joints connect to this body.\n for (let je = b.m_jointList; je; je = je.next) {\n if (je.joint.m_islandFlag == true) {\n continue;\n }\n\n const other = je.other;\n\n // Don't simulate joints connected to inactive bodies.\n if (other.isActive() == false) {\n continue;\n }\n\n this.addJoint(je.joint);\n je.joint.m_islandFlag = true;\n\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n }\n\n this.solveIsland(step);\n\n // Post solve cleanup.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n // Allow static bodies to participate in other islands.\n // TODO: are they added at all?\n const b = this.m_bodies[i];\n if (b.isStatic()) {\n b.m_islandFlag = false;\n }\n }\n }\n }\n\n solveIsland(step: TimeStep): void {\n // B2: Island Solve\n const world = this.m_world;\n const gravity = world.m_gravity;\n const allowSleep = world.m_allowSleep;\n\n const h = step.dt;\n\n // Integrate velocities and apply damping. Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.m_sweep.c);\n const a = body.m_sweep.a;\n matrix.copyVec2(v, body.m_linearVelocity);\n let w = body.m_angularVelocity;\n\n // Store positions for continuous collision.\n matrix.copyVec2(body.m_sweep.c0, body.m_sweep.c);\n body.m_sweep.a0 = body.m_sweep.a;\n\n if (body.isDynamic()) {\n // Integrate velocities.\n matrix.plusScaleVec2(v, h * body.m_gravityScale, gravity);\n matrix.plusScaleVec2(v, h * body.m_invMass, body.m_force);\n w += h * body.m_invI * body.m_torque;\n /**\n *
\n         * Apply damping.\n         * ODE: dv/dt + c * v = 0\n         * Solution: v(t) = v0 * exp(-c * t)\n         * Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)\n         * v2 = exp(-c * dt) * v1\n         * Pade approximation:\n         * v2 = v1 * 1 / (1 + c * dt)\n         * 
\n */\n matrix.scaleVec2(v, 1.0 / (1.0 + h * body.m_linearDamping), v);\n w *= 1.0 / (1.0 + h * body.m_angularDamping);\n }\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(step);\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(step);\n }\n\n if (step.warmStarting) {\n // Warm start.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.warmStartConstraint(step);\n }\n }\n\n for (let i = 0; i < this.m_joints.length; ++i) {\n const joint = this.m_joints[i];\n joint.initVelocityConstraints(step);\n }\n\n // Solve velocity constraints\n for (let i = 0; i < step.velocityIterations; ++i) {\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n joint.solveVelocityConstraints(step);\n }\n\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(step);\n }\n }\n\n // Store impulses for warm starting\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.storeConstraintImpulses(step);\n }\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n // Solve position constraints\n let positionSolved = false;\n for (let i = 0; i < step.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraint(step);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -3.0 * Settings.linearSlop;\n\n let jointsOkay = true;\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n const jointOkay = joint.solvePositionConstraints(step);\n jointsOkay = jointsOkay && jointOkay;\n }\n\n if (contactsOkay && jointsOkay) {\n // Exit early if the position errors are small.\n positionSolved = true;\n break;\n }\n }\n\n // Copy state buffers back to the bodies\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(body.m_sweep.c, body.c_position.c);\n body.m_sweep.a = body.c_position.a;\n matrix.copyVec2(body.m_linearVelocity, body.c_velocity.v);\n body.m_angularVelocity = body.c_velocity.w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n\n if (allowSleep) {\n let minSleepTime = Infinity;\n\n const linTolSqr = Settings.linearSleepToleranceSqr;\n const angTolSqr = Settings.angularSleepToleranceSqr;\n\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n if (body.isStatic()) {\n continue;\n }\n\n if ((body.m_autoSleepFlag == false)\n || (body.m_angularVelocity * body.m_angularVelocity > angTolSqr)\n || (matrix.lengthSqrVec2(body.m_linearVelocity) > linTolSqr)) {\n body.m_sleepTime = 0.0;\n minSleepTime = 0.0;\n } else {\n body.m_sleepTime += h;\n minSleepTime = math_min(minSleepTime, body.m_sleepTime);\n }\n }\n\n if (minSleepTime >= Settings.timeToSleep && positionSolved) {\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.setAwake(false);\n }\n }\n }\n }\n\n /**\n * Find TOI contacts and solve them.\n */\n solveWorldTOI(step: TimeStep): void {\n const world = this.m_world;\n\n if (world.m_stepComplete) {\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n b.m_sweep.alpha0 = 0.0;\n }\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Invalidate TOI\n c.m_toiFlag = false;\n c.m_islandFlag = false;\n c.m_toiCount = 0;\n c.m_toi = 1.0;\n }\n }\n\n // Find TOI events and solve them.\n while (true) {\n // Find the first TOI.\n let minContact: Contact | null = null;\n let minAlpha = 1.0;\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Is this contact disabled?\n if (c.isEnabled() == false) {\n continue;\n }\n\n // Prevent excessive sub-stepping.\n if (c.m_toiCount > Settings.maxSubSteps) {\n continue;\n }\n\n let alpha = 1.0;\n if (c.m_toiFlag) {\n // This contact has a valid cached TOI.\n alpha = c.m_toi;\n } else {\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n // Is there a sensor?\n if (fA.isSensor() || fB.isSensor()) {\n continue;\n }\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n _ASSERT && console.assert(bA.isDynamic() || bB.isDynamic());\n\n const activeA = bA.isAwake() && !bA.isStatic();\n const activeB = bB.isAwake() && !bB.isStatic();\n\n // Is at least one body active (awake and dynamic or kinematic)?\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const collideA = bA.isBullet() || !bA.isDynamic();\n const collideB = bB.isBullet() || !bB.isDynamic();\n\n // Are these two non-bullet dynamic bodies?\n if (collideA == false && collideB == false) {\n continue;\n }\n\n // Compute the TOI for this contact.\n // Put the sweeps onto the same time interval.\n let alpha0 = bA.m_sweep.alpha0;\n\n if (bA.m_sweep.alpha0 < bB.m_sweep.alpha0) {\n alpha0 = bB.m_sweep.alpha0;\n bA.m_sweep.advance(alpha0);\n } else if (bB.m_sweep.alpha0 < bA.m_sweep.alpha0) {\n alpha0 = bA.m_sweep.alpha0;\n bB.m_sweep.advance(alpha0);\n }\n\n _ASSERT && console.assert(alpha0 < 1.0);\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const sweepA = bA.m_sweep;\n const sweepB = bB.m_sweep;\n\n // Compute the time of impact in interval [0, minTOI]\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.sweepA.set(bA.m_sweep);\n input.sweepB.set(bB.m_sweep);\n input.tMax = 1.0;\n\n TimeOfImpact(output, input);\n\n // Beta is the fraction of the remaining portion of the [time?].\n const beta = output.t;\n if (output.state == TOIOutputState.e_touching) {\n alpha = math_min(alpha0 + (1.0 - alpha0) * beta, 1.0);\n } else {\n alpha = 1.0;\n }\n\n c.m_toi = alpha;\n c.m_toiFlag = true;\n }\n\n if (alpha < minAlpha) {\n // This is the minimum TOI found so far.\n minContact = c;\n minAlpha = alpha;\n }\n }\n\n if (minContact == null || 1.0 - 10.0 * EPSILON < minAlpha) {\n // No more TOI events. Done!\n world.m_stepComplete = true;\n break;\n }\n\n // Advance the bodies to the TOI.\n const fA = minContact.getFixtureA();\n const fB = minContact.getFixtureB();\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n backup1.set(bA.m_sweep);\n backup2.set(bB.m_sweep);\n\n bA.advance(minAlpha);\n bB.advance(minAlpha);\n\n // The TOI contact likely has some new contact points.\n minContact.update(world);\n minContact.m_toiFlag = false;\n ++minContact.m_toiCount;\n\n // Is the contact solid?\n if (minContact.isEnabled() == false || minContact.isTouching() == false) {\n // Restore the sweeps.\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\n bA.setAwake(true);\n bB.setAwake(true);\n\n // Build the island\n this.clear();\n this.addBody(bA);\n this.addBody(bB);\n this.addContact(minContact);\n\n bA.m_islandFlag = true;\n bB.m_islandFlag = true;\n minContact.m_islandFlag = true;\n\n // Get contacts on bodyA and bodyB.\n const bodies = [ bA, bB ];\n for (let i = 0; i < bodies.length; ++i) {\n const body = bodies[i];\n if (body.isDynamic()) {\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n // if (this.m_bodyCount == this.m_bodyCapacity) { break; }\n // if (this.m_contactCount == this.m_contactCapacity) { break; }\n\n const contact = ce.contact;\n\n // Has this contact already been added to the island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Only add if either is static, kinematic or bullet.\n const other = ce.other;\n if (other.isDynamic() && !body.isBullet() && !other.isBullet()) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n // Tentatively advance the body to the TOI.\n backup.set(other.m_sweep);\n if (other.m_islandFlag == false) {\n other.advance(minAlpha);\n }\n\n // Update the contact points\n contact.update(world);\n\n // Was the contact disabled by the user?\n // Are there contact points?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n other.m_sweep.set(backup);\n other.synchronizeTransform();\n continue;\n }\n\n // Add the contact to the island\n contact.m_islandFlag = true;\n this.addContact(contact);\n\n // Has the other body already been added to the island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // Add the other body to the island.\n other.m_islandFlag = true;\n\n if (!other.isStatic()) {\n other.setAwake(true);\n }\n\n this.addBody(other);\n }\n }\n }\n\n s_subStep.reset((1.0 - minAlpha) * step.dt);\n s_subStep.dtRatio = 1.0;\n s_subStep.positionIterations = 20;\n s_subStep.velocityIterations = step.velocityIterations;\n s_subStep.warmStarting = false;\n\n this.solveIslandTOI(s_subStep, bA, bB);\n\n // Reset island flags and synchronize broad-phase proxies.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.m_islandFlag = false;\n\n if (!body.isDynamic()) {\n continue;\n }\n\n body.synchronizeFixtures();\n\n // Invalidate all contact TOIs on this displaced body.\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n ce.contact.m_toiFlag = false;\n ce.contact.m_islandFlag = false;\n }\n }\n\n // Commit fixture proxy movements to the broad-phase so that new contacts\n // are created.\n // Also, some contacts can be destroyed.\n world.findNewContacts();\n\n if (world.m_subStepping) {\n world.m_stepComplete = false;\n break;\n }\n }\n }\n\n solveIslandTOI(subStep: TimeStep, toiA: Body, toiB: Body): void {\n\n // Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n matrix.copyVec2(body.c_position.c, body.m_sweep.c);\n body.c_position.a = body.m_sweep.a;\n matrix.copyVec2(body.c_velocity.v, body.m_linearVelocity);\n body.c_velocity.w = body.m_angularVelocity;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(subStep);\n }\n\n // Solve position constraints.\n for (let i = 0; i < subStep.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -1.5 * Settings.linearSlop;\n if (contactsOkay) {\n break;\n }\n }\n\n if (false) {\n // Is the new position really safe?\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const c = this.m_contacts[i];\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const input = new DistanceInput();\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.transformA.set(bA.getTransform());\n input.transformB.set(bB.getTransform());\n input.useRadii = false;\n\n const output = new DistanceOutput();\n const cache = new SimplexCache();\n Distance(output, cache, input);\n\n if (output.distance == 0 || cache.count == 3) {\n cache.count += 0;\n }\n }\n }\n\n // Leap of faith to new safe state.\n matrix.copyVec2(toiA.m_sweep.c0, toiA.c_position.c);\n toiA.m_sweep.a0 = toiA.c_position.a;\n matrix.copyVec2(toiB.m_sweep.c0, toiB.c_position.c);\n toiB.m_sweep.a0 = toiB.c_position.a;\n\n // No warm starting is needed for TOI events because warm\n // starting impulses were applied in the discrete solver.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(subStep);\n }\n\n // Solve velocity constraints.\n for (let i = 0; i < subStep.velocityIterations; ++i) {\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(subStep);\n }\n }\n\n // Don't store the TOI contact forces for warm starting\n // because they can be quite large.\n\n const h = subStep.dt;\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n\n // Sync bodies\n matrix.copyVec2(body.m_sweep.c, c);\n body.m_sweep.a = a;\n matrix.copyVec2(body.m_linearVelocity, v);\n body.m_angularVelocity = w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n }\n\n /** @internal */\n postSolveIsland(): void {\n for (let c = 0; c < this.m_contacts.length; ++c) {\n const contact = this.m_contacts[c];\n this.m_world.postSolve(contact, contact.m_impulse);\n }\n }\n}\n\n// @ts-ignore\nSolver.TimeStep = TimeStep;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 2-by-2 matrix. Stored in column-major order.\n */\nexport class Mat22 {\n ex: Vec2;\n ey: Vec2;\n\n constructor(a: number, b: number, c: number, d: number);\n constructor(a: { x: number; y: number }, b: { x: number; y: number });\n constructor();\n constructor(a?, b?, c?, d?) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec2.clone(a);\n this.ey = Vec2.clone(b);\n } else if (typeof a === \"number\") {\n this.ex = Vec2.neo(a, c);\n this.ey = Vec2.neo(b, d);\n } else {\n this.ex = Vec2.zero();\n this.ey = Vec2.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat22.isValid(o), \"Invalid Mat22!\", o);\n }\n\n set(a: Mat22): void;\n set(a: Vec2Value, b: Vec2Value): void;\n set(a: number, b: number, c: number, d: number): void;\n set(a, b?, c?, d?): void {\n if (typeof a === \"number\" && typeof b === \"number\" && typeof c === \"number\"\n && typeof d === \"number\") {\n this.ex.setNum(a, c);\n this.ey.setNum(b, d);\n\n } else if (typeof a === \"object\" && typeof b === \"object\") {\n this.ex.setVec2(a);\n this.ey.setVec2(b);\n\n } else if (typeof a === \"object\") {\n _ASSERT && Mat22.assert(a);\n this.ex.setVec2(a.ex);\n this.ey.setVec2(a.ey);\n\n } else {\n _ASSERT && console.assert(false);\n }\n }\n\n setIdentity(): void {\n this.ex.x = 1.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 1.0;\n }\n\n setZero(): void {\n this.ex.x = 0.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 0.0;\n }\n\n getInverse(): Mat22 {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const imx = new Mat22();\n imx.ex.x = det * d;\n imx.ey.x = -det * b;\n imx.ex.y = -det * c;\n imx.ey.y = det * a;\n return imx;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const w = Vec2.zero();\n w.x = det * (d * v.x - b * v.y);\n w.y = det * (a * v.y - c * v.x);\n return w;\n }\n\n /**\n * Multiply a matrix times a vector. If a rotation matrix is provided, then this\n * transforms the vector from one frame to another.\n */\n static mul(mx: Mat22, my: Mat22): Mat22;\n static mul(mx: Mat22, v: Vec2Value): Vec2;\n static mul(mx, v) {\n if (v && \"x\" in v && \"y\" in v) {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n }\n\n static mulMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n /**\n * Multiply a matrix transpose times a vector. If a rotation matrix is provided,\n * then this transforms the vector from one frame to another (inverse\n * transform).\n */\n static mulT(mx: Mat22, my: Mat22): Mat22;\n static mulT(mx: Mat22, v: Vec2Value): Vec2;\n static mulT(mx, v) {\n if (v && \"x\" in v && \"y\" in v) { // Vec2\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulTVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n }\n\n static mulTMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n static abs(mx: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n return new Mat22(Vec2.abs(mx.ex), Vec2.abs(mx.ey));\n }\n\n static add(mx1: Mat22, mx2: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx1);\n _ASSERT && Mat22.assert(mx2);\n return new Mat22(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey));\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\nimport { EPSILON } from \"../common/Math\";\n\n\n/** @internal */ const math_sqrt = Math.sqrt;\n\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const dist = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n\nexport enum ManifoldType {\n e_unset = -1,\n e_circles = 0,\n e_faceA = 1,\n e_faceB = 2\n}\n\nexport enum ContactFeatureType {\n e_unset = -1,\n e_vertex = 0,\n e_face = 1\n}\n\n/**\n * This is used for determining the state of contact points.\n */\n export enum PointState {\n /** Point does not exist */\n nullState = 0,\n /** Point was added in the update */\n addState = 1,\n /** Point persisted across the update */\n persistState = 2,\n /** Point was removed in the update */\n removeState = 3\n}\n\n/**\n * Used for computing contact manifolds.\n */\n export class ClipVertex {\n v = matrix.vec2(0, 0);\n id: ContactID = new ContactID();\n\n set(o: ClipVertex): void {\n matrix.copyVec2(this.v, o.v);\n this.id.set(o.id);\n }\n recycle() {\n matrix.zeroVec2(this.v);\n this.id.recycle();\n }\n}\n\n/**\n * A manifold for two touching convex shapes. Manifolds are created in `evaluate`\n * method of Contact subclasses.\n *\n * Supported manifold types are e_faceA or e_faceB for clip point versus plane\n * with radius and e_circles point versus point with radius.\n *\n * We store contacts in this way so that position correction can account for\n * movement, which is critical for continuous physics. All contact scenarios\n * must be expressed in one of these types. This structure is stored across time\n * steps, so we keep it small.\n */\nexport class Manifold {\n type: ManifoldType;\n\n /**\n * Usage depends on manifold type:\n * - circles: not used\n * - faceA: the normal on polygonA\n * - faceB: the normal on polygonB\n */\n localNormal = matrix.vec2(0, 0);\n\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleA\n * - faceA: the center of faceA\n * - faceB: the center of faceB\n */\n localPoint = matrix.vec2(0, 0);\n\n /** The points of contact */\n points: ManifoldPoint[] = [ new ManifoldPoint(), new ManifoldPoint() ];\n\n /** The number of manifold points */\n pointCount: number = 0;\n\n set(that: Manifold): void {\n this.type = that.type;\n matrix.copyVec2(this.localNormal, that.localNormal);\n matrix.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\n recycle(): void {\n this.type = ManifoldType.e_unset;\n matrix.zeroVec2(this.localNormal);\n matrix.zeroVec2(this.localPoint);\n this.pointCount = 0;\n this.points[0].recycle();\n this.points[1].recycle();\n }\n\n /**\n * Evaluate the manifold with supplied transforms. This assumes modest motion\n * from the original state. This does not change the point count, impulses, etc.\n * The radii must come from the shapes that generated the manifold.\n */\n getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold {\n if (this.pointCount == 0) {\n return wm;\n }\n\n wm = wm || new WorldManifold();\n\n wm.pointCount = this.pointCount;\n\n const normal = wm.normal;\n const points = wm.points;\n const separations = wm.separations;\n\n switch (this.type) {\n case ManifoldType.e_circles: {\n matrix.setVec2(normal, 1.0, 0.0);\n const manifoldPoint = this.points[0];\n matrix.transformVec2(pointA, xfA, this.localPoint);\n matrix.transformVec2(pointB, xfB, manifoldPoint.localPoint);\n matrix.subVec2(dist, pointB, pointA);\n const lengthSqr = matrix.lengthSqrVec2(dist);\n if (lengthSqr > EPSILON * EPSILON) {\n const length = math_sqrt(lengthSqr);\n matrix.scaleVec2(normal, 1 / length, dist);\n }\n matrix.combine2Vec2(cA, 1, pointA, radiusA, normal);\n matrix.combine2Vec2(cB, 1, pointB, -radiusB, normal);\n matrix.combine2Vec2(points[0], 0.5, cA, 0.5, cB);\n separations[0] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.localNormal);\n matrix.transformVec2(planePoint, xfA, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfB, manifoldPoint.localPoint);\n matrix.combine2Vec2(cA, 1, clipPoint, radiusA - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cB, 1, clipPoint, -radiusB, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n }\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.localNormal);\n matrix.transformVec2(planePoint, xfB, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfA, manifoldPoint.localPoint);\n matrix.combine2Vec2(cB, 1, clipPoint, radiusB - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cA, 1, clipPoint, -radiusA, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cA, cB), normal);\n }\n // Ensure normal points from A to B.\n matrix.negVec2(normal);\n break;\n }\n }\n\n return wm;\n }\n\n static clipSegmentToLine = clipSegmentToLine;\n static ClipVertex = ClipVertex;\n static getPointStates = getPointStates;\n static PointState = PointState;\n}\n\n/**\n * A manifold point is a contact point belonging to a contact manifold. It holds\n * details related to the geometry and dynamics of the contact points.\n *\n * This structure is stored across time steps, so we keep it small.\n *\n * Note: impulses are used for internal caching and may not provide reliable\n * contact forces, especially for high speed collisions.\n */\nexport class ManifoldPoint {\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleB\n * - faceA: the local center of circleB or the clip point of polygonB\n * - faceB: the clip point of polygonA\n */\n localPoint = matrix.vec2(0, 0);\n /**\n * The non-penetration impulse\n */\n normalImpulse = 0;\n /**\n * The friction impulse\n */\n tangentImpulse = 0;\n /**\n * Uniquely identifies a contact point between two shapes to facilitate warm starting\n */\n readonly id = new ContactID();\n\n set(that: ManifoldPoint): void {\n matrix.copyVec2(this.localPoint, that.localPoint);\n this.normalImpulse = that.normalImpulse;\n this.tangentImpulse = that.tangentImpulse;\n this.id.set(that.id);\n }\n\n recycle(): void {\n matrix.zeroVec2(this.localPoint);\n this.normalImpulse = 0;\n this.tangentImpulse = 0;\n this.id.recycle();\n }\n}\n\n/**\n * Contact ids to facilitate warm starting.\n * \n * ContactFeature: The features that intersect to form the contact point.\n */\nexport class ContactID {\n\n /**\n * Used to quickly compare contact ids.\n */\n key = -1;\n\n /** ContactFeature index on shapeA */\n indexA = -1;\n\n /** ContactFeature index on shapeB */\n indexB = -1;\n\n /** ContactFeature type on shapeA */\n typeA = ContactFeatureType.e_unset;\n\n /** ContactFeature type on shapeB */\n typeB = ContactFeatureType.e_unset;\n\n setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void {\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\n set(that: ContactID): void {\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\n swapFeatures(): void {\n const indexA = this.indexA;\n const indexB = this.indexB;\n const typeA = this.typeA;\n const 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\n recycle(): void {\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}\n\n/**\n * This is used to compute the current state of a contact manifold.\n */\nexport class WorldManifold {\n /** World vector pointing from A to B */\n normal = matrix.vec2(0, 0);\n\n /** World contact point (point of intersection) */\n points = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints]\n\n /** A negative value indicates overlap, in meters */\n separations = [0, 0]; // [maxManifoldPoints]\n\n /** The number of manifold points */\n pointCount = 0;\n\n recycle() {\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.points[0]);\n matrix.zeroVec2(this.points[1]);\n this.separations[0] = 0;\n this.separations[1] = 0;\n this.pointCount = 0;\n }\n}\n\n/**\n * Compute the point states given two manifolds. The states pertain to the\n * transition from manifold1 to manifold2. So state1 is either persist or remove\n * while state2 is either add or persist.\n */\nexport function getPointStates(\n state1: PointState[],\n state2: PointState[],\n manifold1: Manifold,\n manifold2: Manifold\n): void {\n // state1, state2: PointState[Settings.maxManifoldPoints]\n\n // for (var i = 0; i < Settings.maxManifoldPoints; ++i) {\n // state1[i] = PointState.nullState;\n // state2[i] = PointState.nullState;\n // }\n\n // Detect persists and removes.\n for (let i = 0; i < manifold1.pointCount; ++i) {\n const id = manifold1.points[i].id;\n\n state1[i] = PointState.removeState;\n\n for (let 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\n // Detect persists and adds.\n for (let i = 0; i < manifold2.pointCount; ++i) {\n const id = manifold2.points[i].id;\n\n state2[i] = PointState.addState;\n\n for (let 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}\n\n/**\n * Clipping for contact manifolds. Sutherland-Hodgman clipping.\n */\nexport function clipSegmentToLine(\n vOut: ClipVertex[],\n vIn: ClipVertex[],\n normal: Vec2Value,\n offset: number,\n vertexIndexA: number\n): number {\n // Start with no output points\n let numOut = 0;\n\n // Calculate the distance of end points to the line\n const distance0 = matrix.dotVec2(normal, vIn[0].v) - offset;\n const distance1 = matrix.dotVec2(normal, vIn[1].v) - offset;\n\n // If the points are behind the plane\n if (distance0 <= 0.0)\n vOut[numOut++].set(vIn[0]);\n if (distance1 <= 0.0)\n vOut[numOut++].set(vIn[1]);\n\n // If the points are on different sides of the plane\n if (distance0 * distance1 < 0.0) {\n // Find intersection point of edge and plane\n const interp = distance0 / (distance0 - distance1);\n matrix.combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v);\n\n // VertexA is hitting edgeB.\n vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face);\n ++numOut;\n }\n\n return numOut;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { ShapeType } from \"../collision/Shape\";\nimport { clamp } from \"../common/Math\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Mat22 } from \"../common/Mat22\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Manifold, ManifoldType, WorldManifold } from \"../collision/Manifold\";\nimport { testOverlap } from \"../collision/Distance\";\nimport { Fixture } from \"./Fixture\";\nimport { Body } from \"./Body\";\nimport { ContactImpulse, TimeStep } from \"./Solver\";\nimport { Pool } from \"../util/Pool\";\nimport { getTransform } from \"./Position\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n// Solver debugging is normally disabled because the block solver sometimes has to deal with a poorly conditioned effective mass matrix.\n/** @internal */ const DEBUG_SOLVER = false;\n\n/** @internal */ const contactPool = new Pool({\n create() {\n return new Contact();\n },\n release(contact: Contact) {\n contact.recycle();\n }\n});\n\n/** @internal */ const oldManifold = new Manifold();\n\n/** @internal */ const worldManifold = new WorldManifold();\n\n/**\n * A contact edge is used to connect bodies and contacts together in a contact\n * graph where each body is a node and each contact is an edge. A contact edge\n * belongs to a doubly linked list maintained in each attached body. Each\n * contact has two contact nodes, one for each attached body.\n */\nexport class ContactEdge {\n contact: Contact;\n prev: ContactEdge | null = null;\n next: ContactEdge | null = null;\n other: Body | null = null;\n constructor(contact: Contact) {\n this.contact = contact;\n }\n\n /** @internal */\n recycle() {\n this.prev = null;\n this.next = null;\n this.other = null;\n }\n}\n\nexport type EvaluateFunction = (\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number\n) => void;\n\n/**\n * Friction mixing law. The idea is to allow either fixture to drive the\n * friction to zero. For example, anything slides on ice.\n */\nexport function mixFriction(friction1: number, friction2: number): number {\n return math_sqrt(friction1 * friction2);\n}\n\n/**\n * Restitution mixing law. The idea is allow for anything to bounce off an\n * inelastic surface. For example, a superball bounces on anything.\n */\nexport function mixRestitution(restitution1: number, restitution2: number): number {\n return restitution1 > restitution2 ? restitution1 : restitution2;\n}\n\n// TODO: move this to Settings?\n/** @internal */ const s_registers = [];\n\n// TODO: merge with ManifoldPoint?\nexport class VelocityConstraintPoint {\n rA = matrix.vec2(0, 0);\n rB = matrix.vec2(0, 0);\n normalImpulse = 0;\n tangentImpulse = 0;\n normalMass = 0;\n tangentMass = 0;\n velocityBias = 0;\n\n recycle() {\n matrix.zeroVec2(this.rA);\n matrix.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}\n\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const vA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const vB = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const rA = matrix.vec2(0, 0);\n/** @internal */ const rB = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const point = matrix.vec2(0, 0);\n/** @internal */ const dv = matrix.vec2(0, 0);\n/** @internal */ const dv1 = matrix.vec2(0, 0);\n/** @internal */ const dv2 = matrix.vec2(0, 0);\n/** @internal */ const b = matrix.vec2(0, 0);\n/** @internal */ const a = matrix.vec2(0, 0);\n/** @internal */ const x = matrix.vec2(0, 0);\n/** @internal */ const d = matrix.vec2(0, 0);\n/** @internal */ const P1 = matrix.vec2(0, 0);\n/** @internal */ const P2 = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * The class manages contact between two shapes. A contact exists for each\n * overlapping AABB in the broad-phase (except if filtered). Therefore a contact\n * object may exist that has no contact points.\n */\nexport class Contact {\n // Nodes for connecting bodies.\n /** @internal */ m_nodeA = new ContactEdge(this);\n /** @internal */ m_nodeB = new ContactEdge(this);\n /** @internal */ m_fixtureA: Fixture | null = null;\n /** @internal */ m_fixtureB: Fixture | null = null;\n /** @internal */ m_indexA = -1;\n /** @internal */ m_indexB = -1;\n /** @internal */ m_evaluateFcn: EvaluateFunction | null = null;\n /** @internal */ m_manifold: Manifold = new Manifold();\n /** @internal */ m_prev: Contact | null = null;\n /** @internal */ m_next: Contact | null = null;\n /** @internal */ m_toi = 1.0;\n /** @internal */ m_toiCount = 0;\n // This contact has a valid TOI in m_toi\n /** @internal */ m_toiFlag = false;\n /** @internal */ m_friction = 0.0;\n /** @internal */ m_restitution = 0.0;\n /** @internal */ m_tangentSpeed = 0.0;\n /** @internal This contact can be disabled (by user) */\n m_enabledFlag = true;\n /** @internal Used when crawling contact graph when forming islands. */\n m_islandFlag = false;\n /** @internal Set when the shapes are touching. */\n m_touchingFlag = false;\n /** @internal This contact needs filtering because a fixture filter was changed. */\n m_filterFlag = false;\n /** @internal This bullet contact had a TOI event */\n m_bulletHitFlag = false;\n\n /** @internal Contact reporting impulse object cache */\n m_impulse: ContactImpulse = new ContactImpulse(this);\n\n // VelocityConstraint\n /** @internal */ v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; // [maxManifoldPoints];\n /** @internal */ v_normal = matrix.vec2(0, 0);\n /** @internal */ v_normalMass: Mat22 = new Mat22();\n /** @internal */ v_K: Mat22 = new Mat22();\n /** @internal */ v_pointCount = 0;\n /** @internal */ v_tangentSpeed = 0;\n /** @internal */ v_friction = 0;\n /** @internal */ v_restitution = 0;\n /** @internal */ v_invMassA = 0;\n /** @internal */ v_invMassB = 0;\n /** @internal */ v_invIA = 0;\n /** @internal */ v_invIB = 0;\n\n // PositionConstraint\n /** @internal */ p_localPoints = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints];\n /** @internal */ p_localNormal = matrix.vec2(0, 0);\n /** @internal */ p_localPoint = matrix.vec2(0, 0);\n /** @internal */ p_localCenterA = matrix.vec2(0, 0);\n /** @internal */ p_localCenterB = matrix.vec2(0, 0);\n /** @internal */ p_type = ManifoldType.e_unset;\n /** @internal */ p_radiusA = 0;\n /** @internal */ p_radiusB = 0;\n /** @internal */ p_pointCount = 0;\n /** @internal */ p_invMassA = 0;\n /** @internal */ p_invMassB = 0;\n /** @internal */ p_invIA = 0;\n /** @internal */ p_invIB = 0;\n\n /** @internal */ \n initialize(fA: Fixture, indexA: number, fB: Fixture, indexB: number, evaluateFcn: EvaluateFunction) {\n this.m_fixtureA = fA;\n this.m_fixtureB = fB;\n\n this.m_indexA = indexA;\n this.m_indexB = indexB;\n\n this.m_evaluateFcn = evaluateFcn;\n\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\n /** @internal */ \n recycle() {\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\n this.m_impulse.recycle();\n\n // VelocityConstraint\n for(const point of this.v_points) {\n point.recycle();\n }\n matrix.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\n // PositionConstraint\n for(const point of this.p_localPoints) {\n matrix.zeroVec2(point);\n }\n matrix.zeroVec2(this.p_localNormal);\n matrix.zeroVec2(this.p_localPoint);\n matrix.zeroVec2(this.p_localCenterA);\n matrix.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\n initConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n const manifold = this.m_manifold;\n\n const pointCount = manifold.pointCount;\n _ASSERT && console.assert(pointCount > 0);\n\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\n this.v_friction = this.m_friction;\n this.v_restitution = this.m_restitution;\n this.v_tangentSpeed = this.m_tangentSpeed;\n\n this.v_pointCount = pointCount;\n\n this.v_K.setZero();\n this.v_normalMass.setZero();\n\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 matrix.copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter);\n matrix.copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter);\n\n this.p_radiusA = shapeA.m_radius;\n this.p_radiusB = shapeB.m_radius;\n\n this.p_type = manifold.type;\n matrix.copyVec2(this.p_localNormal, manifold.localNormal);\n matrix.copyVec2(this.p_localPoint, manifold.localPoint);\n this.p_pointCount = pointCount;\n\n for (let j = 0; j < Settings.maxManifoldPoints; ++j) {\n this.v_points[j].recycle();\n matrix.zeroVec2(this.p_localPoints[j]);\n }\n\n for (let j = 0; j < pointCount; ++j) {\n const cp = manifold.points[j];\n const 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 matrix.copyVec2(this.p_localPoints[j], cp.localPoint);\n }\n }\n\n /**\n * Get the contact manifold. Do not modify the manifold unless you understand\n * the internals of the library.\n */\n getManifold(): Manifold {\n return this.m_manifold;\n }\n\n /**\n * Get the world manifold.\n */\n getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n return this.m_manifold.getWorldManifold(\n worldManifold,\n bodyA.getTransform(), shapeA.m_radius,\n bodyB.getTransform(), shapeB.m_radius\n );\n }\n\n /**\n * Enable/disable this contact. This can be used inside the pre-solve contact\n * listener. The contact is only disabled for the current time step (or sub-step\n * in continuous collisions).\n */\n setEnabled(flag: boolean): void {\n this.m_enabledFlag = !!flag;\n }\n\n /**\n * Has this contact been disabled?\n */\n isEnabled(): boolean {\n return this.m_enabledFlag;\n }\n\n /**\n * Is this contact touching?\n */\n isTouching(): boolean {\n return this.m_touchingFlag;\n }\n\n /**\n * Get the next contact in the world's contact list.\n */\n getNext(): Contact | null {\n return this.m_next;\n }\n\n /**\n * Get fixture A in this contact.\n */\n getFixtureA(): Fixture {\n return this.m_fixtureA;\n }\n\n /**\n * Get fixture B in this contact.\n */\n getFixtureB(): Fixture {\n return this.m_fixtureB;\n }\n\n /**\n * Get the child primitive index for fixture A.\n */\n getChildIndexA(): number {\n return this.m_indexA;\n }\n\n /**\n * Get the child primitive index for fixture B.\n */\n getChildIndexB(): number {\n return this.m_indexB;\n }\n\n /**\n * Flag this contact for filtering. Filtering will occur the next time step.\n */\n flagForFiltering(): void {\n this.m_filterFlag = true;\n }\n\n /**\n * Override the default friction mixture. You can call this in\n * \"pre-solve\" callback. This value persists until set or reset.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the friction.\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Reset the friction mixture to the default value.\n */\n resetFriction(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction);\n }\n\n /**\n * Override the default restitution mixture. You can call this in\n * \"pre-solve\" callback. The value persists until you set or reset.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Get the restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Reset the restitution to the default value.\n */\n resetRestitution(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution);\n }\n\n /**\n * Set the desired tangent speed for a conveyor belt behavior. In meters per\n * second.\n */\n setTangentSpeed(speed: number): void {\n this.m_tangentSpeed = speed;\n }\n\n /**\n * Get the desired tangent speed. In meters per second.\n */\n getTangentSpeed(): number {\n return this.m_tangentSpeed;\n }\n\n /**\n * Called by Update method, and implemented by subclasses.\n */\n evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_evaluateFcn(manifold, xfA, fixtureA, this.m_indexA, xfB, fixtureB, this.m_indexB);\n }\n\n /**\n * Updates the contact manifold and touching status.\n *\n * Note: do not assume the fixture AABBs are overlapping or are valid.\n *\n * @param listener.beginContact\n * @param listener.endContact\n * @param listener.preSolve\n */\n update(listener?: {\n beginContact(contact: Contact): void,\n endContact(contact: Contact): void,\n preSolve(contact: Contact, oldManifold: Manifold): void\n }): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n // Re-enable this contact.\n this.m_enabledFlag = true;\n\n let touching = false;\n const wasTouching = this.m_touchingFlag;\n\n const sensorA = fixtureA.m_isSensor;\n const sensorB = fixtureB.m_isSensor;\n const sensor = sensorA || sensorB;\n\n const xfA = bodyA.m_xf;\n const xfB = bodyB.m_xf;\n\n // Is this contact a sensor?\n if (sensor) {\n touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB);\n\n // Sensors don't generate manifolds.\n this.m_manifold.pointCount = 0;\n } else {\n\n oldManifold.recycle();\n oldManifold.set(this.m_manifold);\n this.m_manifold.recycle();\n\n this.evaluate(this.m_manifold, xfA, xfB);\n touching = this.m_manifold.pointCount > 0;\n\n // Match old contact ids to new contact ids and copy the\n // stored impulses to warm start the solver.\n for (let i = 0; i < this.m_manifold.pointCount; ++i) {\n const nmp = this.m_manifold.points[i];\n nmp.normalImpulse = 0.0;\n nmp.tangentImpulse = 0.0;\n\n for (let j = 0; j < oldManifold.pointCount; ++j) {\n const 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\n if (touching !== wasTouching) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n }\n\n this.m_touchingFlag = touching;\n\n const hasListener = typeof listener === \"object\" && listener !== null;\n\n if (!wasTouching && touching && hasListener) {\n listener.beginContact(this);\n }\n\n if (wasTouching && !touching && hasListener) {\n listener.endContact(this);\n }\n\n if (!sensor && touching && hasListener && oldManifold) {\n listener.preSolve(this, oldManifold);\n }\n }\n\n solvePositionConstraint(step: TimeStep): number {\n return this._solvePositionConstraint(step, null, null);\n }\n\n solvePositionConstraintTOI(step: TimeStep, toiA: Body, toiB: Body): number {\n return this._solvePositionConstraint(step, toiA, toiB);\n }\n\n private _solvePositionConstraint(step: TimeStep, toiA: Body | null, toiB: Body | null): number {\n const toi = toiA !== null && toiB !== null ? true : false;\n let minSeparation = 0.0;\n\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return minSeparation;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return minSeparation;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n let mA = 0.0;\n let iA = 0.0;\n if (!toi || (bodyA === toiA || bodyA === toiB)) {\n mA = this.p_invMassA;\n iA = this.p_invIA;\n }\n\n let mB = 0.0;\n let iB = 0.0;\n if (!toi || (bodyB === toiA || bodyB === toiB)) {\n mB = this.p_invMassB;\n iB = this.p_invIB;\n }\n\n matrix.copyVec2(cA, positionA.c);\n let aA = positionA.a;\n\n matrix.copyVec2(cB, positionB.c);\n let aB = positionB.a;\n\n // Solve normal constraints\n for (let j = 0; j < this.p_pointCount; ++j) {\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n // PositionSolverManifold\n let separation: number;\n switch (this.p_type) {\n case ManifoldType.e_circles: {\n matrix.transformVec2(pointA, xfA, this.p_localPoint);\n matrix.transformVec2(pointB, xfB, this.p_localPoints[0]);\n matrix.subVec2(normal, pointB, pointA);\n matrix.normalizeVec2(normal);\n\n matrix.combine2Vec2(point, 0.5, pointA, 0.5, pointB);\n separation = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal) - this.p_radiusA - this.p_radiusB;\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfA, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfB, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfB, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfA, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n\n // Ensure normal points from A to B\n matrix.negVec2(normal);\n break;\n }\n // todo: what should we do here?\n default: {\n return minSeparation;\n }\n }\n\n matrix.subVec2(rA, point, cA);\n matrix.subVec2(rB, point, cB);\n\n // Track max constraint error.\n minSeparation = math_min(minSeparation, separation);\n\n const baumgarte = toi ? Settings.toiBaugarte : Settings.baumgarte;\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n // Prevent large corrections and allow slop.\n const C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0.0);\n\n // Compute the effective mass.\n const rnA = matrix.crossVec2Vec2(rA, normal);\n const rnB = matrix.crossVec2Vec2(rB, normal);\n const K = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n // Compute normal impulse\n const impulse = K > 0.0 ? -C / K : 0.0;\n\n matrix.scaleVec2(P, impulse, normal);\n\n matrix.minusScaleVec2(cA, mA, P);\n aA -= iA * matrix.crossVec2Vec2(rA, P);\n\n matrix.plusScaleVec2(cB, mB, P);\n aB += iB * matrix.crossVec2Vec2(rB, P);\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n\n return minSeparation;\n }\n\n initVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const radiusA = this.p_radiusA;\n const radiusB = this.p_radiusB;\n const manifold = this.m_manifold;\n\n const mA = this.v_invMassA;\n const mB = this.v_invMassB;\n const iA = this.v_invIA;\n const iB = this.v_invIB;\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n matrix.copyVec2(cA, positionA.c);\n const aA = positionA.a;\n matrix.copyVec2(vA, velocityA.v);\n const wA = velocityA.w;\n\n matrix.copyVec2(cB, positionB.c);\n const aB = positionB.a;\n matrix.copyVec2(vB, velocityB.v);\n const wB = velocityB.w;\n\n _ASSERT && console.assert(manifold.pointCount > 0);\n\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n worldManifold.recycle();\n manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB);\n\n matrix.copyVec2(this.v_normal, worldManifold.normal);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n const wmp = worldManifold.points[j];\n\n matrix.subVec2(vcp.rA, wmp, cA);\n matrix.subVec2(vcp.rB, wmp, cB);\n\n const rnA = matrix.crossVec2Vec2(vcp.rA, this.v_normal);\n const rnB = matrix.crossVec2Vec2(vcp.rB, this.v_normal);\n\n const kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n vcp.normalMass = kNormal > 0.0 ? 1.0 / kNormal : 0.0;\n\n matrix.crossVec2Num(tangent, this.v_normal, 1.0);\n\n const rtA = matrix.crossVec2Vec2(vcp.rA, tangent);\n const rtB = matrix.crossVec2Vec2(vcp.rB, tangent);\n\n const kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB;\n\n vcp.tangentMass = kTangent > 0.0 ? 1.0 / kTangent : 0.0;\n\n // Setup a velocity bias for restitution.\n vcp.velocityBias = 0.0;\n let vRel = 0;\n vRel += matrix.dotVec2(this.v_normal, vB);\n vRel += matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wB, vcp.rB));\n vRel -= matrix.dotVec2(this.v_normal, vA);\n vRel -= matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wA, vcp.rA));\n if (vRel < -Settings.velocityThreshold) {\n vcp.velocityBias = -this.v_restitution * vRel;\n }\n }\n\n // If we have two points, then prepare the block solver.\n if (this.v_pointCount == 2 && step.blockSolve) {\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n const rn1A = matrix.crossVec2Vec2(vcp1.rA, this.v_normal);\n const rn1B = matrix.crossVec2Vec2(vcp1.rB, this.v_normal);\n const rn2A = matrix.crossVec2Vec2(vcp2.rA, this.v_normal);\n const rn2B = matrix.crossVec2Vec2(vcp2.rB, this.v_normal);\n\n const k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B;\n const k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B;\n const k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B;\n\n // Ensure a reasonable condition number.\n const k_maxConditionNumber = 1000.0;\n if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) {\n // K is safe to invert.\n this.v_K.ex.setNum(k11, k12);\n this.v_K.ey.setNum(k12, k22);\n // this.v_normalMass.set(this.v_K.getInverse());\n const a = this.v_K.ex.x;\n const b = this.v_K.ey.x;\n const c = this.v_K.ex.y;\n const d = this.v_K.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n this.v_normalMass.ex.x = det * d;\n this.v_normalMass.ey.x = -det * b;\n this.v_normalMass.ex.y = -det * c;\n this.v_normalMass.ey.y = det * a;\n\n } else {\n // The constraints are redundant, just use one.\n // TODO_ERIN use deepest?\n this.v_pointCount = 1;\n }\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n warmStartConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n matrix.combine2Vec2(P, vcp.normalImpulse, normal, vcp.tangentImpulse, tangent);\n\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n matrix.minusScaleVec2(vA, mA, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n matrix.plusScaleVec2(vB, mB, P);\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n storeConstraintImpulses(step: TimeStep): void {\n const manifold = this.m_manifold;\n for (let 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\n solveVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const positionA = bodyA.c_position;\n\n const velocityB = bodyB.c_velocity;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n const friction = this.v_friction;\n\n _ASSERT && console.assert(this.v_pointCount == 1 || this.v_pointCount == 2);\n\n // Solve tangent constraints first because non-penetration is more important\n // than friction.\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute tangent force\n const vt = matrix.dotVec2(dv, tangent) - this.v_tangentSpeed;\n let lambda = vcp.tangentMass * (-vt);\n\n // Clamp the accumulated force\n const maxFriction = friction * vcp.normalImpulse;\n const newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction);\n lambda = newImpulse - vcp.tangentImpulse;\n vcp.tangentImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, tangent);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n\n // Solve normal constraints\n if (this.v_pointCount == 1 || step.blockSolve == false) {\n for (let i = 0; i < this.v_pointCount; ++i) {\n const vcp = this.v_points[i]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute normal impulse\n const vn = matrix.dotVec2(dv, normal);\n let lambda = -vcp.normalMass * (vn - vcp.velocityBias);\n\n // Clamp the accumulated impulse\n const newImpulse = math_max(vcp.normalImpulse + lambda, 0.0);\n lambda = newImpulse - vcp.normalImpulse;\n vcp.normalImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, normal);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n } else {\n // Block solver developed in collaboration with Dirk Gregorius (back in\n // 01/07 on Box2D_Lite).\n // Build the mini LCP for this contact patch\n //\n // vn = A * x + b, vn >= 0, x >= 0 and vn_i * x_i = 0 with i = 1..2\n //\n // A = J * W * JT and J = ( -n, -r1 x n, n, r2 x n )\n // b = vn0 - velocityBias\n //\n // The system is solved using the \"Total enumeration method\" (s. Murty).\n // The complementary constraint vn_i * x_i\n // implies that we must have in any solution either vn_i = 0 or x_i = 0.\n // So for the 2D contact problem the cases\n // vn1 = 0 and vn2 = 0, x1 = 0 and x2 = 0, x1 = 0 and vn2 = 0, x2 = 0 and\n // vn1 = 0 need to be tested. The first valid\n // solution that satisfies the problem is chosen.\n //\n // In order to account of the accumulated impulse 'a' (because of the\n // iterative nature of the solver which only requires\n // that the accumulated impulse is clamped and not the incremental\n // impulse) we change the impulse variable (x_i).\n //\n // Substitute:\n //\n // x = a + d\n //\n // a := old total impulse\n // x := new total impulse\n // d := incremental impulse\n //\n // For the current iteration we extend the formula for the incremental\n // impulse\n // to compute the new total impulse:\n //\n // vn = A * d + b\n // = A * (x - a) + b\n // = A * x + b - A * a\n // = A * x + b'\n // b' = b - A * a;\n\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n matrix.setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse);\n _ASSERT && console.assert(a.x >= 0.0 && a.y >= 0.0);\n\n // Relative velocity at contact\n // let dv1 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp1.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp1.rA));\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // let dv2 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp2.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp2.rA));\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n let vn1 = matrix.dotVec2(dv1, normal);\n let vn2 = matrix.dotVec2(dv2, normal);\n\n matrix.setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias);\n\n // Compute b'\n // b.sub(Mat22.mulVec2(this.v_K, a));\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\n const k_errorTol = 1e-3;\n // NOT_USED(k_errorTol);\n\n while (true) {\n //\n // Case 1: vn = 0\n //\n // 0 = A * x + b'\n //\n // Solve for x:\n //\n // x = - inv(A) * b'\n //\n // const x = Mat22.mulVec2(this.v_normalMass, b).neg();\n matrix.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\n if (x.x >= 0.0 && x.y >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 2: vn1 = 0 and x2 = 0\n //\n // 0 = a11 * x1 + a12 * 0 + b1'\n // vn2 = a21 * x1 + a22 * 0 + b2'\n //\n x.x = -vcp1.normalMass * b.x;\n x.y = 0.0;\n vn1 = 0.0;\n vn2 = this.v_K.ex.y * x.x + b.y;\n\n if (x.x >= 0.0 && vn2 >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 3: vn2 = 0 and x1 = 0\n //\n // vn1 = a11 * 0 + a12 * x2 + b1'\n // 0 = a21 * 0 + a22 * x2 + b2'\n //\n x.x = 0.0;\n x.y = -vcp2.normalMass * b.y;\n vn1 = this.v_K.ey.x * x.y + b.x;\n vn2 = 0.0;\n\n if (x.y >= 0.0 && vn1 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 4: x1 = 0 and x2 = 0\n //\n // vn1 = b1\n // vn2 = b2;\n //\n x.x = 0.0;\n x.y = 0.0;\n vn1 = b.x;\n vn2 = b.y;\n\n if (vn1 >= 0.0 && vn2 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n break;\n }\n\n // No solution, give up. This is hit sometimes, but it doesn't seem to\n // matter.\n break;\n }\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n /** @internal */\n static addType(type1: ShapeType, type2: ShapeType, callback: EvaluateFunction): void {\n s_registers[type1] = s_registers[type1] || {};\n s_registers[type1][type2] = callback;\n }\n\n /** @internal */\n static create(fixtureA: Fixture, indexA: number, fixtureB: Fixture, indexB: number): Contact | null {\n const typeA = fixtureA.m_shape.m_type;\n const typeB = fixtureB.m_shape.m_type;\n\n const contact = contactPool.allocate();\n let 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\n // Contact creation may swap fixtures.\n fixtureA = contact.m_fixtureA;\n fixtureB = contact.m_fixtureB;\n indexA = contact.getChildIndexA();\n indexB = contact.getChildIndexB();\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n\n // Connect to body A\n contact.m_nodeA.contact = contact;\n contact.m_nodeA.other = bodyB;\n\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\n // Connect to body B\n contact.m_nodeB.contact = contact;\n contact.m_nodeB.other = bodyA;\n\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\n // Wake up the bodies\n if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n return contact;\n }\n\n /** @internal */\n static destroy(contact: Contact, listener: { endContact: (contact: Contact) => void }): void {\n const fixtureA = contact.m_fixtureA;\n const fixtureB = contact.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n if (contact.isTouching()) {\n listener.endContact(contact);\n }\n\n // Remove from body 1\n if (contact.m_nodeA.prev) {\n contact.m_nodeA.prev.next = contact.m_nodeA.next;\n }\n\n if (contact.m_nodeA.next) {\n contact.m_nodeA.next.prev = contact.m_nodeA.prev;\n }\n\n if (contact.m_nodeA == bodyA.m_contactList) {\n bodyA.m_contactList = contact.m_nodeA.next;\n }\n\n // Remove from body 2\n if (contact.m_nodeB.prev) {\n contact.m_nodeB.prev.next = contact.m_nodeB.next;\n }\n\n if (contact.m_nodeB.next) {\n contact.m_nodeB.next.prev = contact.m_nodeB.prev;\n }\n\n if (contact.m_nodeB == bodyB.m_contactList) {\n bodyB.m_contactList = contact.m_nodeB.next;\n }\n\n if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n // const typeA = fixtureA.getType();\n // const typeB = fixtureB.getType();\n\n // const destroyFcn = s_registers[typeA][typeB].destroyFcn;\n // if (typeof destroyFcn === 'function') {\n // destroyFcn(contact);\n // }\n\n contactPool.release(contact);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { Solver, ContactImpulse, TimeStep } from \"./Solver\";\nimport { Body, BodyDef } from \"./Body\";\nimport { Joint } from \"./Joint\";\nimport { Contact } from \"./Contact\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Fixture, FixtureProxy } from \"./Fixture\";\nimport { Manifold } from \"../collision/Manifold\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface WorldDef {\n /** [default: { x : 0, y : 0}] */\n gravity?: Vec2Value;\n\n /** [default: true] */\n allowSleep?: boolean;\n\n /** [default: true] */\n warmStarting?: boolean;\n\n /** [default: true] */\n continuousPhysics?: boolean;\n\n /** [default: false] */\n subStepping?: boolean;\n\n /** [default: true] */\n blockSolve?: boolean;\n\n /** @internal [8] For the velocity constraint solver. */\n velocityIterations?: number;\n\n /** @internal [3] For the position constraint solver. */\n positionIterations?: number;\n}\n\n/** @internal */ const DEFAULTS: WorldDef = {\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};\n\n/**\n * Callback function for ray casts, see {@link World.rayCast}.\n *\n * Called for each fixture found in the query.\n * The returned value replaces the ray-cast input maxFraction.\n * You control how the ray cast proceeds by returning a numeric/float value.\n * \n * - `0` to terminate the ray cast\n * - `fraction` to clip the ray cast at current point\n * - `1` don't clip the ray and continue\n * - `-1` (or anything else) to continue\n *\n * @param fixture The fixture hit by the ray\n * @param point The point of initial intersection\n * @param normal The normal vector at the point of intersection\n * @param fraction The fraction along the ray at the point of intersection\n *\n * @returns A number to update the maxFraction\n */\nexport type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number;\n\n/**\n * Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\nexport type WorldAABBQueryCallback = (fixture: Fixture) => boolean;\n\nexport class World {\n /** @internal */ m_solver: Solver;\n /** @internal */ m_broadPhase: BroadPhase;\n /** @internal */ m_contactList: Contact | null;\n /** @internal */ m_contactCount: number;\n /** @internal */ m_bodyList: Body | null;\n /** @internal */ m_bodyCount: number;\n /** @internal */ m_jointList: Joint | null;\n /** @internal */ m_jointCount: number;\n /** @internal */ m_stepComplete: boolean;\n /** @internal */ m_allowSleep: boolean;\n /** @internal */ m_gravity: Vec2;\n /** @internal */ m_clearForces: boolean;\n /** @internal */ m_newFixture: boolean;\n /** @internal */ m_locked: boolean;\n /** @internal */ m_warmStarting: boolean;\n /** @internal */ m_continuousPhysics: boolean;\n /** @internal */ m_subStepping: boolean;\n /** @internal */ m_blockSolve: boolean;\n /** @internal */ m_velocityIterations: number;\n /** @internal */ m_positionIterations: number;\n /** @internal */ m_t: number;\n\n // TODO\n /** @internal */ _listeners: {\n [key: string]: any[]\n };\n\n /**\n * @param def World definition or gravity vector.\n */\n constructor(def?: WorldDef | Vec2 | null) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof World)) {\n return new World(def);\n }\n\n this.s_step = new TimeStep();\n\n\n if (!def) {\n def = {};\n } else if (Vec2.isValid(def)) {\n def = { gravity: def as Vec2 };\n }\n\n def = options(def, DEFAULTS) as WorldDef;\n\n this.m_solver = new Solver(this);\n\n this.m_broadPhase = new BroadPhase();\n\n this.m_contactList = null;\n this.m_contactCount = 0;\n\n this.m_bodyList = null;\n this.m_bodyCount = 0;\n\n this.m_jointList = null;\n this.m_jointCount = 0;\n\n this.m_stepComplete = true;\n\n this.m_allowSleep = def.allowSleep;\n this.m_gravity = Vec2.clone(def.gravity);\n\n this.m_clearForces = true;\n this.m_newFixture = false;\n this.m_locked = false;\n\n // These are for debugging the solver.\n this.m_warmStarting = def.warmStarting;\n this.m_continuousPhysics = def.continuousPhysics;\n this.m_subStepping = def.subStepping;\n\n this.m_blockSolve = def.blockSolve;\n this.m_velocityIterations = def.velocityIterations;\n this.m_positionIterations = def.positionIterations;\n\n this.m_t = 0;\n }\n\n /** @internal */\n _serialize(): object {\n const bodies = [];\n const joints = [];\n\n for (let b = this.getBodyList(); b; b = b.getNext()) {\n bodies.push(b);\n }\n\n for (let j = this.getJointList(); j; j = j.getNext()) {\n // @ts-ignore\n if (typeof j._serialize === \"function\") {\n joints.push(j);\n }\n }\n\n return {\n gravity: this.m_gravity,\n bodies,\n joints,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, context: any, restore: any): World {\n if (!data) {\n return new World();\n }\n\n const world = new World(data.gravity);\n\n if (data.bodies) {\n for (let i = data.bodies.length - 1; i >= 0; i -= 1) {\n world._addBody(restore(Body, data.bodies[i], world));\n }\n }\n\n if (data.joints) {\n for (let i = data.joints.length - 1; i >= 0; i--) {\n world.createJoint(restore(Joint, data.joints[i], world));\n }\n }\n\n return world;\n }\n\n /**\n * Get the world body list. With the returned body, use Body.getNext to get the\n * next body in the world list. A null body indicates the end of the list.\n *\n * @return the head of the world body list.\n */\n getBodyList(): Body | null {\n return this.m_bodyList;\n }\n\n /**\n * Get the world joint list. With the returned joint, use Joint.getNext to get\n * the next joint in the world list. A null joint indicates the end of the list.\n *\n * @return the head of the world joint list.\n */\n getJointList(): Joint | null {\n return this.m_jointList;\n }\n\n /**\n * Get the world contact list. With the returned contact, use Contact.getNext to\n * get the next contact in the world list. A null contact indicates the end of\n * the list.\n *\n * Warning: contacts are created and destroyed in the middle of a time step.\n * Use ContactListener to avoid missing contacts.\n *\n * @return the head of the world contact list.\n */\n getContactList(): Contact | null {\n return this.m_contactList;\n }\n\n getBodyCount(): number {\n return this.m_bodyCount;\n }\n\n getJointCount(): number {\n return this.m_jointCount;\n }\n\n /**\n * Get the number of contacts (each may have 0 or more contact points).\n */\n getContactCount(): number {\n return this.m_contactCount;\n }\n\n /**\n * Change the global gravity vector.\n */\n setGravity(gravity: Vec2Value): void {\n this.m_gravity.set(gravity);\n }\n\n /**\n * Get the global gravity vector.\n */\n getGravity(): Vec2 {\n return this.m_gravity;\n }\n\n /**\n * Is the world locked (in the middle of a time step).\n */\n isLocked(): boolean {\n return this.m_locked;\n }\n\n /**\n * Enable/disable sleep.\n */\n setAllowSleeping(flag: boolean): void {\n if (flag == this.m_allowSleep) {\n return;\n }\n\n this.m_allowSleep = flag;\n if (this.m_allowSleep == false) {\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.setAwake(true);\n }\n }\n }\n\n getAllowSleeping(): boolean {\n return this.m_allowSleep;\n }\n\n /**\n * Enable/disable warm starting. For testing.\n */\n setWarmStarting(flag: boolean): void {\n this.m_warmStarting = flag;\n }\n\n getWarmStarting(): boolean {\n return this.m_warmStarting;\n }\n\n /**\n * Enable/disable continuous physics. For testing.\n */\n setContinuousPhysics(flag: boolean): void {\n this.m_continuousPhysics = flag;\n }\n\n getContinuousPhysics(): boolean {\n return this.m_continuousPhysics;\n }\n\n /**\n * Enable/disable single stepped continuous physics. For testing.\n */\n setSubStepping(flag: boolean): void {\n this.m_subStepping = flag;\n }\n\n getSubStepping(): boolean {\n return this.m_subStepping;\n }\n\n /**\n * Set flag to control automatic clearing of forces after each time step.\n */\n setAutoClearForces(flag: boolean): void {\n this.m_clearForces = flag;\n }\n\n /**\n * Get the flag that controls automatic clearing of forces after each time step.\n */\n getAutoClearForces(): boolean {\n return this.m_clearForces;\n }\n\n /**\n * Manually clear the force buffer on all bodies. By default, forces are cleared\n * automatically after each call to step. The default behavior is modified by\n * calling setAutoClearForces. The purpose of this function is to support\n * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step\n * under a variable frame-rate. When you perform sub-stepping you will disable\n * auto clearing of forces and instead call clearForces after all sub-steps are\n * complete in one pass of your game loop.\n *\n * See {@link World.setAutoClearForces}\n */\n clearForces(): void {\n for (let body = this.m_bodyList; body; body = body.getNext()) {\n body.m_force.setZero();\n body.m_torque = 0.0;\n }\n }\n\n /**\n * Query the world for all fixtures that potentially overlap the provided AABB.\n *\n * @param aabb The query box.\n * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\n queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n this.m_broadPhase.query(aabb, function(proxyId: number): boolean { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n return callback(proxy.fixture);\n });\n }\n\n /**\n * Ray-cast the world for all fixtures in the path of the ray. Your callback\n * controls whether you get the closest point, any point, or n-points. The\n * ray-cast ignores shapes that contain the starting point.\n *\n * @param point1 The ray starting point\n * @param point2 The ray ending point\n * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value.\n */\n rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n\n this.m_broadPhase.rayCast({\n maxFraction : 1.0,\n p1 : point1,\n p2 : point2\n }, function(input: RayCastInput, proxyId: number): number { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n const fixture = proxy.fixture;\n const index = proxy.childIndex;\n // @ts-ignore\n const output: RayCastOutput = {}; // TODO GC\n const hit = fixture.rayCast(output, input, index);\n if (hit) {\n const fraction = output.fraction;\n const point = Vec2.add(Vec2.mulNumVec2((1.0 - fraction), input.p1), Vec2.mulNumVec2(fraction, input.p2));\n return callback(fixture, point, output.normal, fraction);\n }\n return input.maxFraction;\n });\n }\n\n /**\n * Get the number of broad-phase proxies.\n */\n getProxyCount(): number {\n return this.m_broadPhase.getProxyCount();\n }\n\n /**\n * Get the height of broad-phase dynamic tree.\n */\n getTreeHeight(): number {\n return this.m_broadPhase.getTreeHeight();\n }\n\n /**\n * Get the balance of broad-phase dynamic tree.\n */\n getTreeBalance(): number {\n return this.m_broadPhase.getTreeBalance();\n }\n\n /**\n * Get the quality metric of broad-phase dynamic tree. The smaller the better.\n * The minimum is 1.\n */\n getTreeQuality(): number {\n return this.m_broadPhase.getTreeQuality();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The body shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n _ASSERT && console.assert(this.m_locked == false);\n if (this.m_locked) {\n return;\n }\n\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.m_xf.p.sub(newOrigin);\n b.m_sweep.c0.sub(newOrigin);\n b.m_sweep.c.sub(newOrigin);\n }\n\n for (let j = this.m_jointList; j; j = j.m_next) {\n j.shiftOrigin(newOrigin);\n }\n\n this.m_broadPhase.shiftOrigin(newOrigin);\n }\n\n /** @internal Used for deserialize. */\n _addBody(body: Body): void {\n _ASSERT && console.assert(this.isLocked() === false);\n if (this.isLocked()) {\n return;\n }\n\n // Add to world doubly linked list.\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\n /**\n * Create a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This function is locked during callbacks.\n */\n createBody(def?: BodyDef): Body;\n createBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createBody(arg1?, arg2?) {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n let def: BodyDef = {};\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\n const body = new Body(this, def);\n this._addBody(body);\n return body;\n }\n\n createDynamicBody(def?: BodyDef): Body;\n createDynamicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createDynamicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n createKinematicBody(def?: BodyDef): Body;\n createKinematicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createKinematicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n /**\n * Destroy a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This automatically deletes all associated shapes and joints.\n *\n * Warning: This function is locked during callbacks.\n */\n destroyBody(b: Body): boolean {\n _ASSERT && console.assert(this.m_bodyCount > 0);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n if (b.m_destroyed) {\n return false;\n }\n\n // Delete the attached joints.\n let je = b.m_jointList;\n while (je) {\n const je0 = je;\n je = je.next;\n\n this.publish(\"remove-joint\", je0.joint);\n this.destroyJoint(je0.joint);\n\n b.m_jointList = je;\n }\n b.m_jointList = null;\n\n // Delete the attached contacts.\n let ce = b.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n\n this.destroyContact(ce0.contact);\n\n b.m_contactList = ce;\n }\n b.m_contactList = null;\n\n // Delete the attached fixtures. This destroys broad-phase proxies.\n let f = b.m_fixtureList;\n while (f) {\n const f0 = f;\n f = f.m_next;\n\n this.publish(\"remove-fixture\", f0);\n f0.destroyProxies(this.m_broadPhase);\n\n b.m_fixtureList = f;\n }\n b.m_fixtureList = null;\n\n // Remove world body list.\n if (b.m_prev) {\n b.m_prev.m_next = b.m_next;\n }\n\n if (b.m_next) {\n b.m_next.m_prev = b.m_prev;\n }\n\n if (b == this.m_bodyList) {\n this.m_bodyList = b.m_next;\n }\n\n b.m_destroyed = true;\n\n --this.m_bodyCount;\n\n this.publish(\"remove-body\", b);\n\n return true;\n }\n\n /**\n * Create a joint to constrain bodies together. No reference to the definition\n * is retained. This may cause the connected bodies to cease colliding.\n *\n * Warning: This function is locked during callbacks.\n */\n createJoint(joint: T): T | null {\n _ASSERT && console.assert(!!joint.m_bodyA);\n _ASSERT && console.assert(!!joint.m_bodyB);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n // Connect to the world list.\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\n // Connect to the bodies' doubly linked lists.\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\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\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n for (let edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) {\n if (edge.other == joint.m_bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n }\n }\n\n // Note: creating a joint doesn't wake the bodies.\n\n return joint;\n }\n\n /**\n * Destroy a joint. This may cause the connected bodies to begin colliding.\n * Warning: This function is locked during callbacks.\n */\n destroyJoint(joint: Joint): void {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n // Remove from the doubly linked list.\n if (joint.m_prev) {\n joint.m_prev.m_next = joint.m_next;\n }\n\n if (joint.m_next) {\n joint.m_next.m_prev = joint.m_prev;\n }\n\n if (joint == this.m_jointList) {\n this.m_jointList = joint.m_next;\n }\n\n // Disconnect from bodies.\n const bodyA = joint.m_bodyA;\n const bodyB = joint.m_bodyB;\n\n // Wake up connected bodies.\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n\n // Remove from body 1.\n if (joint.m_edgeA.prev) {\n joint.m_edgeA.prev.next = joint.m_edgeA.next;\n }\n\n if (joint.m_edgeA.next) {\n joint.m_edgeA.next.prev = joint.m_edgeA.prev;\n }\n\n if (joint.m_edgeA == bodyA.m_jointList) {\n bodyA.m_jointList = joint.m_edgeA.next;\n }\n\n joint.m_edgeA.prev = null;\n joint.m_edgeA.next = null;\n\n // Remove from body 2\n if (joint.m_edgeB.prev) {\n joint.m_edgeB.prev.next = joint.m_edgeB.next;\n }\n\n if (joint.m_edgeB.next) {\n joint.m_edgeB.next.prev = joint.m_edgeB.prev;\n }\n\n if (joint.m_edgeB == bodyB.m_jointList) {\n bodyB.m_jointList = joint.m_edgeB.next;\n }\n\n joint.m_edgeB.prev = null;\n joint.m_edgeB.next = null;\n\n _ASSERT && console.assert(this.m_jointCount > 0);\n --this.m_jointCount;\n\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n let edge = bodyB.getContactList();\n while (edge) {\n if (edge.other == bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n }\n\n this.publish(\"remove-joint\", joint);\n }\n\n /** @internal */\n s_step: TimeStep; // reuse\n\n /**\n * Take a time step. This performs collision detection, integration, and\n * constraint solution.\n *\n * Broad-phase, narrow-phase, solve and solve time of impacts.\n *\n * @param timeStep Time step, this should not vary.\n */\n step(timeStep: number, velocityIterations?: number, positionIterations?: number): void {\n this.publish(\"pre-step\", timeStep);\n\n if ((velocityIterations | 0) !== velocityIterations) {\n // TODO: remove this in future\n velocityIterations = 0;\n }\n\n velocityIterations = velocityIterations || this.m_velocityIterations;\n positionIterations = positionIterations || this.m_positionIterations;\n\n // If new fixtures were added, we need to find the new contacts.\n if (this.m_newFixture) {\n this.findNewContacts();\n this.m_newFixture = false;\n }\n\n this.m_locked = true;\n\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\n // Update contacts. This is where some contacts are destroyed.\n this.updateContacts();\n\n // Integrate velocities, solve velocity constraints, and integrate positions.\n if (this.m_stepComplete && timeStep > 0.0) {\n this.m_solver.solveWorld(this.s_step);\n\n // Synchronize fixtures, check for out of range bodies.\n for (let b = this.m_bodyList; b; b = b.getNext()) {\n // If a body was not in an island then it did not move.\n if (b.m_islandFlag == false) {\n continue;\n }\n\n if (b.isStatic()) {\n continue;\n }\n\n // Update fixtures (for broad-phase).\n b.synchronizeFixtures();\n }\n // Look for new contacts.\n this.findNewContacts();\n }\n\n // Handle TOI events.\n if (this.m_continuousPhysics && timeStep > 0.0) {\n this.m_solver.solveWorldTOI(this.s_step);\n }\n\n if (this.m_clearForces) {\n this.clearForces();\n }\n\n this.m_locked = false;\n\n this.publish(\"post-step\", timeStep);\n }\n\n /**\n * @internal\n * Call this method to find new contacts.\n */\n findNewContacts(): void {\n this.m_broadPhase.updatePairs(\n (proxyA: FixtureProxy, proxyB: FixtureProxy) => this.createContact(proxyA, proxyB)\n );\n }\n\n /**\n * @internal\n * Callback for broad-phase.\n */\n createContact(proxyA: FixtureProxy, proxyB: FixtureProxy): void {\n const fixtureA = proxyA.fixture;\n const fixtureB = proxyB.fixture;\n\n const indexA = proxyA.childIndex;\n const indexB = proxyB.childIndex;\n\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Are the fixtures on the same body?\n if (bodyA == bodyB) {\n return;\n }\n\n // TODO_ERIN use a hash table to remove a potential bottleneck when both\n // bodies have a lot of contacts.\n // Does a contact already exist?\n let edge = bodyB.getContactList(); // ContactEdge\n while (edge) {\n if (edge.other == bodyA) {\n const fA = edge.contact.getFixtureA();\n const fB = edge.contact.getFixtureB();\n const iA = edge.contact.getChildIndexA();\n const iB = edge.contact.getChildIndexB();\n\n if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) {\n // A contact already exists.\n return;\n }\n\n if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) {\n // A contact already exists.\n return;\n }\n }\n\n edge = edge.next;\n }\n\n if (bodyB.shouldCollide(bodyA) == false) {\n return;\n }\n if (fixtureB.shouldCollide(fixtureA) == false) {\n return;\n }\n\n // Call the factory.\n const contact = Contact.create(fixtureA, indexA, fixtureB, indexB);\n if (contact == null) {\n return;\n }\n\n // Insert into the world.\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\n ++this.m_contactCount;\n }\n\n /**\n * @internal\n * Removes old non-overlapping contacts, applies filters and updates contacts.\n */\n updateContacts(): void {\n // Update awake contacts.\n let c: Contact;\n let next_c = this.m_contactList;\n while (c = next_c) {\n next_c = c.getNext();\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Is this contact flagged for filtering?\n if (c.m_filterFlag) {\n if (bodyB.shouldCollide(bodyA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n if (fixtureB.shouldCollide(fixtureA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n // Clear the filtering flag.\n c.m_filterFlag = false;\n }\n\n const activeA = bodyA.isAwake() && !bodyA.isStatic();\n const activeB = bodyB.isAwake() && !bodyB.isStatic();\n\n // At least one body must be awake and it must be dynamic or kinematic.\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const proxyIdA = fixtureA.m_proxies[indexA].proxyId;\n const proxyIdB = fixtureB.m_proxies[indexB].proxyId;\n const overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB);\n\n // Here we destroy contacts that cease to overlap in the broad-phase.\n if (overlap == false) {\n this.destroyContact(c);\n continue;\n }\n\n // The contact persists.\n c.update(this);\n }\n }\n\n /** @internal */\n destroyContact(contact: Contact): void {\n // Remove from the world.\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\n Contact.destroy(contact, this);\n\n --this.m_contactCount;\n }\n\n\n /**\n * Called when two fixtures begin to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n /**\n * Called when two fixtures cease to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"end-contact\", listener: (contact: Contact) => void): World;\n /**\n * This is called after a contact is updated. This allows you to inspect a\n * contact before it goes to the solver. If you are careful, you can modify the\n * contact manifold (e.g. disable contact). A copy of the old manifold is\n * provided so that you can detect changes. Note: this is called only for awake\n * bodies. Note: this is called even when the number of contact points is zero.\n * Note: this is not called for sensors. Note: if you set the number of contact\n * points to zero, you will not get an end-contact callback. However, you may get\n * a begin-contact callback the next step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n /**\n * This lets you inspect a contact after the solver is finished. This is useful\n * for inspecting impulses. Note: the contact manifold does not include time of\n * impact impulses, which can be arbitrarily large if the sub-step is small.\n * Hence the impulse is provided explicitly in a separate data structure. Note:\n * this is only called for contacts that are touching, solid, and awake.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n /** Listener is called whenever a body is removed. */\n on(name: \"remove-body\", listener: (body: Body) => void): World;\n /** Listener is called whenever a joint is removed implicitly or explicitly. */\n on(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n /** Listener is called whenever a fixture is removed implicitly or explicitly. */\n on(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Register an event listener.\n */\n // tslint:disable-next-line:typedef\n on(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\n off(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n off(name: \"end-contact\", listener: (contact: Contact) => void): World;\n off(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n off(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n off(name: \"remove-body\", listener: (body: Body) => void): World;\n off(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n off(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Remove an event listener.\n */\n // tslint:disable-next-line:typedef\n off(name, listener) {\n if (typeof name !== \"string\" || typeof listener !== \"function\") {\n return this;\n }\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return this;\n }\n const index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n return this;\n }\n\n publish(name: string, arg1?: any, arg2?: any, arg3?: any): number {\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return 0;\n }\n for (let l = 0; l < listeners.length; l++) {\n listeners[l].call(this, arg1, arg2, arg3);\n }\n return listeners.length;\n }\n\n /** @internal */\n beginContact(contact: Contact): void {\n this.publish(\"begin-contact\", contact);\n }\n\n /** @internal */\n endContact(contact: Contact): void {\n this.publish(\"end-contact\", contact);\n }\n\n /** @internal */\n preSolve(contact: Contact, oldManifold: Manifold): void {\n this.publish(\"pre-solve\", contact, oldManifold);\n }\n\n /** @internal */\n postSolve(contact: Contact, impulse: ContactImpulse): void {\n this.publish(\"post-solve\", contact, impulse);\n }\n\n /**\n * Joints and fixtures are destroyed when their associated body is destroyed.\n * Register a destruction listener so that you may nullify references to these\n * joints and shapes.\n *\n * `function(object)` is called when any joint or fixture is about to\n * be destroyed due to the destruction of one of its attached or parent bodies.\n */\n\n /**\n * Register a contact filter to provide specific control over collision.\n * Otherwise the default filter is used (defaultFilter). The listener is owned\n * by you and must remain in scope.\n *\n * Moved to Fixture.\n */\n}","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface Vec3Value {\n x: number;\n y: number;\n z: number;\n}\n\nexport class Vec3 {\n x: number;\n y: number;\n z: number;\n\n constructor(x: number, y: number, z: number);\n constructor(obj: { x: number, y: number, z: number });\n constructor();\n constructor(x?, y?, z?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec3)) {\n return new Vec3(x, y, z);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n } else {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n _ASSERT && Vec3.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y,\n z: this.z\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = data.x;\n obj.y = data.y;\n obj.z = data.z;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number, z: number): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = x;\n obj.y = y;\n obj.z = z;\n return obj;\n }\n\n static zero(): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = 0;\n obj.y = 0;\n obj.z = 0;\n return obj;\n }\n\n static clone(v: Vec3Value): Vec3 {\n _ASSERT && Vec3.assert(v);\n return Vec3.neo(v.x, v.y, v.z);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /** Does this vector contain finite coordinates? */\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec3.isValid(o), \"Invalid Vec3!\", o);\n }\n\n setZero(): Vec3 {\n this.x = 0.0;\n this.y = 0.0;\n this.z = 0.0;\n return this;\n }\n\n set(x: number, y: number, z: number): Vec3 {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n\n add(w: Vec3Value): Vec3 {\n this.x += w.x;\n this.y += w.y;\n this.z += w.z;\n return this;\n }\n\n sub(w: Vec3Value): Vec3 {\n this.x -= w.x;\n this.y -= w.y;\n this.z -= w.z;\n return this;\n }\n\n mul(m: number): Vec3 {\n this.x *= m;\n this.y *= m;\n this.z *= m;\n return this;\n }\n\n static areEqual(v: Vec3Value, w: Vec3Value): boolean {\n _ASSERT && Vec3.assert(v);\n _ASSERT && Vec3.assert(w);\n return v === w ||\n typeof v === \"object\" && v !== null &&\n typeof w === \"object\" && w !== null &&\n v.x === w.x && v.y === w.y && v.z === w.z;\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n }\n\n /** Cross product on two vectors */\n static cross(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(\n v.y * w.z - v.z * w.y,\n v.z * w.x - v.x * w.z,\n v.x * w.y - v.y * w.x\n );\n }\n\n static add(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x + w.x, v.y + w.y, v.z + w.z);\n }\n\n static sub(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x - w.x, v.y - w.y, v.z - w.z);\n }\n\n static mul(v: Vec3Value, m: number): Vec3 {\n return new Vec3(m * v.x, m * v.y, m * v.z);\n }\n\n neg(): Vec3 {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n\n static neg(v: Vec3Value): Vec3 {\n return new Vec3(-v.x, -v.y, -v.z);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Shape } from \"../Shape\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { AABB, AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\n/**\n * A line segment (edge) shape. These can be connected in chains or loops to\n * other edge shapes. The connectivity information is used to ensure correct\n * contact normals.\n */\nexport class EdgeShape extends Shape {\n static TYPE = \"edge\" as const;\n /** @hidden */ m_type: \"edge\";\n\n /** @hidden */ m_radius: number;\n\n // These are the edge vertices\n /** @hidden */ m_vertex1: Vec2;\n /** @hidden */ m_vertex2: Vec2;\n\n // Optional adjacent vertices. These are used for smooth collision.\n // Used by chain shape.\n /** @hidden */ m_vertex0: Vec2;\n /** @hidden */ m_vertex3: Vec2;\n /** @hidden */ m_hasVertex0: boolean;\n /** @hidden */ m_hasVertex3: boolean;\n\n constructor(v1?: Vec2Value, v2?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof EdgeShape)) {\n return new EdgeShape(v1, v2);\n }\n\n super();\n\n this.m_type = EdgeShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n\n this.m_vertex1 = v1 ? Vec2.clone(v1) : Vec2.zero();\n this.m_vertex2 = v2 ? Vec2.clone(v2) : Vec2.zero();\n\n this.m_vertex0 = Vec2.zero();\n this.m_vertex3 = Vec2.zero();\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertex1: this.m_vertex1,\n vertex2: this.m_vertex2,\n\n vertex0: this.m_vertex0,\n vertex3: this.m_vertex3,\n hasVertex0: this.m_hasVertex0,\n hasVertex3: this.m_hasVertex3,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): EdgeShape {\n const shape = new EdgeShape(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\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getType(): \"edge\" {\n return this.m_type;\n }\n\n /** @internal @deprecated */\n setNext(v?: Vec2Value): EdgeShape {\n return this.setNextVertex(v);\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n setNextVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex3.setVec2(v);\n this.m_hasVertex3 = true;\n } else {\n this.m_vertex3.setZero();\n this.m_hasVertex3 = false;\n }\n return this;\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n getNextVertex(): Vec2 {\n return this.m_vertex3;\n }\n\n /** @internal @deprecated */\n setPrev(v?: Vec2Value): EdgeShape {\n return this.setPrevVertex(v);\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n setPrevVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex0.setVec2(v);\n this.m_hasVertex0 = true;\n } else {\n this.m_vertex0.setZero();\n this.m_hasVertex0 = false;\n }\n return this;\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n getPrevVertex(): Vec2 {\n return this.m_vertex0;\n }\n\n /**\n * Set this as an isolated edge.\n */\n _set(v1: Vec2Value, v2: Vec2Value): EdgeShape {\n this.m_vertex1.setVec2(v1);\n this.m_vertex2.setVec2(v2);\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n return this;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): EdgeShape {\n const clone = new EdgeShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // p = p1 + t * d\n // v = v1 + s * e\n // p1 + t * d = v1 + s * e\n // s * e - t * d = p1 - v1\n\n // NOT_USED(childIndex);\n\n // Put the ray into the edge's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n const v1 = this.m_vertex1;\n const v2 = this.m_vertex2;\n const e = Vec2.sub(v2, v1);\n const normal = Vec2.neo(e.y, -e.x);\n normal.normalize();\n\n // q = p1 + t * d\n // dot(normal, q - v1) = 0\n // dot(normal, p1 - v1) + t * dot(normal, d) = 0\n const numerator = Vec2.dot(normal, Vec2.sub(v1, p1));\n const denominator = Vec2.dot(normal, d);\n\n if (denominator == 0.0) {\n return false;\n }\n\n const t = numerator / denominator;\n if (t < 0.0 || input.maxFraction < t) {\n return false;\n }\n\n const q = Vec2.add(p1, Vec2.mulNumVec2(t, d));\n\n // q = v1 + s * r\n // s = dot(q - v1, r) / dot(r, r)\n const r = Vec2.sub(v2, v1);\n const rr = Vec2.dot(r, r);\n if (rr == 0.0) {\n return false;\n }\n\n const s = Vec2.dot(Vec2.sub(q, v1), r) / rr;\n if (s < 0.0 || 1.0 < s) {\n return false;\n }\n\n output.fraction = t;\n if (numerator > 0.0) {\n output.normal = Rot.mulVec2(xf.q, normal).neg();\n } else {\n output.normal = Rot.mulVec2(xf.q, normal);\n }\n return true;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n matrix.transformVec2(v1, xf, this.m_vertex1);\n matrix.transformVec2(v2, xf, this.m_vertex2);\n\n AABB.combinePoints(aabb, v1, v2);\n AABB.extend(aabb, this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Edge = EdgeShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { AABBValue, RayCastOutput, RayCastInput, AABB } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\nimport { EdgeShape } from \"./EdgeShape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\n\n/**\n * A chain shape is a free form sequence of line segments. The chain has\n * two-sided collision, so you can use inside and outside collision. Therefore,\n * you may use any winding order. Connectivity information is used to create\n * smooth collisions.\n *\n * WARNING: The chain will not collide properly if there are self-intersections.\n */\nexport class ChainShape extends Shape {\n static TYPE = \"chain\" as const;\n /** @hidden */ m_type: \"chain\";\n\n /** @hidden */ m_radius: number;\n\n /** @hidden */ m_vertices: Vec2[];\n /** @hidden */ m_count: number;\n /** @hidden */ m_prevVertex: Vec2 | null;\n /** @hidden */ m_nextVertex: Vec2 | null;\n /** @hidden */ m_hasPrevVertex: boolean;\n /** @hidden */ m_hasNextVertex: boolean;\n\n /** @hidden */ m_isLoop: boolean;\n\n constructor(vertices?: Vec2Value[], loop?: boolean) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof ChainShape)) {\n return new ChainShape(vertices, loop);\n }\n\n super();\n\n this.m_type = ChainShape.TYPE;\n this.m_radius = Settings.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\n this.m_isLoop = !!loop;\n\n if (vertices && vertices.length) {\n if (loop) {\n this._createLoop(vertices);\n } else {\n this._createChain(vertices);\n }\n }\n }\n\n /** @internal */\n _serialize(): object {\n const data = {\n type: this.m_type,\n vertices: this.m_vertices,\n isLoop: this.m_isLoop,\n hasPrevVertex: this.m_hasPrevVertex,\n hasNextVertex: this.m_hasNextVertex,\n prevVertex: null as Vec2 | null,\n nextVertex: null as Vec2 | 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\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): ChainShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n const shape = new ChainShape(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\n // clear() {\n // this.m_vertices.length = 0;\n // this.m_count = 0;\n // }\n\n getType(): \"chain\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal\n * Create a loop. This automatically adjusts connectivity.\n *\n * @param vertices an array of vertices, these are copied\n * @param count the vertex count\n */\n _createLoop(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 3);\n if (vertices.length < 3) {\n return;\n }\n\n for (let i = 1; i < vertices.length; ++i) {\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n // If the code crashes here, it means your vertices are too close together.\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_vertices = [];\n this.m_count = vertices.length + 1;\n for (let 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\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\n /**\n * @internal\n * Create a chain with isolated end vertices.\n *\n * @param vertices an array of vertices, these are copied\n */\n _createChain(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 2);\n for (let i = 1; i < vertices.length; ++i) {\n // If the code crashes here, it means your vertices are too close together.\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_count = vertices.length;\n for (let i = 0; i < vertices.length; ++i) {\n this.m_vertices[i] = Vec2.clone(vertices[i]);\n }\n\n this.m_hasPrevVertex = false;\n this.m_hasNextVertex = false;\n this.m_prevVertex = null;\n this.m_nextVertex = null;\n return this;\n }\n\n /** @hidden */\n _reset(): void {\n if (this.m_isLoop) {\n this._createLoop(this.m_vertices);\n } else {\n this._createChain(this.m_vertices);\n }\n }\n\n /**\n * Establish connectivity to a vertex that precedes the first vertex. Don't call\n * this for loops.\n */\n setPrevVertex(prevVertex: Vec2): void {\n // todo: copy or reference\n this.m_prevVertex = prevVertex;\n this.m_hasPrevVertex = true;\n }\n\n getPrevVertex(): Vec2 {\n return this.m_prevVertex;\n }\n\n /**\n * Establish connectivity to a vertex that follows the last vertex. Don't call\n * this for loops.\n */\n setNextVertex(nextVertex: Vec2): void {\n // todo: copy or reference\n this.m_nextVertex = nextVertex;\n this.m_hasNextVertex = true;\n }\n\n getNextVertex(): Vec2 {\n return this.m_nextVertex;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): ChainShape {\n const clone = new ChainShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): number {\n // edge count = vertex count - 1\n return this.m_count - 1;\n }\n\n // Get a child edge.\n getChildEdge(edge: EdgeShape, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count - 1);\n edge.m_type = EdgeShape.TYPE;\n edge.m_radius = this.m_radius;\n\n edge.m_vertex1 = this.m_vertices[childIndex];\n edge.m_vertex2 = this.m_vertices[childIndex + 1];\n\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\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\n getVertex(index: number): Vec2 {\n _ASSERT && console.assert(0 <= index && index <= this.m_count);\n if (index < this.m_count) {\n return this.m_vertices[index];\n } else {\n return this.m_vertices[0];\n }\n }\n\n isLoop(): boolean {\n return this.m_isLoop;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * This always return false.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n const edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1));\n return edgeShape.rayCast(output, input, xf, 0);\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n matrix.transformVec2(v1, xf, this.getVertex(childIndex));\n matrix.transformVec2(v2, xf, this.getVertex(childIndex + 1));\n\n AABB.combinePoints(aabb, v1, v2);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * Chains have zero mass.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.zeroVec2(massData.center);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\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}\n\nexport const Chain = ChainShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const center = matrix.vec2(0, 0);\n/** @internal */ const s = matrix.vec2(0, 0);\n\n/**\n * A convex polygon. It is assumed that the interior of the polygon is to the\n * left of each edge. Polygons have a maximum number of vertices equal to\n * Settings.maxPolygonVertices. In most cases you should not need many vertices\n * for a convex polygon. extends Shape\n */\nexport class PolygonShape extends Shape {\n static TYPE = \"polygon\" as const;\n /** @hidden */ m_type: \"polygon\";\n\n /** @hidden */ m_centroid: Vec2;\n /** @hidden */ m_vertices: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_normals: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_count: number;\n /** @hidden */ m_radius: number;\n\n constructor(vertices?: Vec2Value[]) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PolygonShape)) {\n return new PolygonShape(vertices);\n }\n\n super();\n\n this.m_type = PolygonShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n this.m_centroid = Vec2.zero();\n this.m_vertices = [];\n this.m_normals = [];\n this.m_count = 0;\n\n if (vertices && vertices.length) {\n this._set(vertices);\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertices: this.m_vertices,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): PolygonShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n\n const shape = new PolygonShape(vertices);\n return shape;\n }\n\n getType(): \"polygon\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): PolygonShape {\n const clone = new PolygonShape();\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 (let i = 0; i < this.m_count; i++) {\n clone.m_vertices.push(this.m_vertices[i].clone());\n }\n for (let i = 0; i < this.m_normals.length; i++) {\n clone.m_normals.push(this.m_normals[i].clone());\n }\n return clone;\n }\n\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /** @hidden */\n _reset(): void {\n this._set(this.m_vertices);\n }\n\n /**\n * @internal\n *\n * Create a convex hull from the given array of local points. The count must be\n * in the range [3, Settings.maxPolygonVertices].\n *\n * Warning: the points may be re-ordered, even if they form a convex polygon\n * Warning: collinear points are handled but not removed. Collinear points may\n * lead to poor stacking behavior.\n */\n _set(vertices: Vec2Value[]): void {\n _ASSERT && console.assert(3 <= vertices.length && vertices.length <= Settings.maxPolygonVertices);\n if (vertices.length < 3) {\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n let n = math_min(vertices.length, Settings.maxPolygonVertices);\n\n // Perform welding and copy vertices into local buffer.\n const ps: Vec2[] = []; // [Settings.maxPolygonVertices];\n for (let i = 0; i < n; ++i) {\n const v = vertices[i];\n\n let unique = true;\n for (let j = 0; j < ps.length; ++j) {\n if (Vec2.distanceSquared(v, ps[j]) < 0.25 * Settings.linearSlopSquared) {\n unique = false;\n break;\n }\n }\n\n if (unique) {\n ps.push(Vec2.clone(v));\n }\n }\n\n n = ps.length;\n if (n < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n // Create the convex hull using the Gift wrapping algorithm\n // http://en.wikipedia.org/wiki/Gift_wrapping_algorithm\n\n // Find the right most point on the hull (in case of multiple points bottom most is used)\n let i0 = 0;\n let x0 = ps[0].x;\n for (let i = 1; i < n; ++i) {\n const x = ps[i].x;\n if (x > x0 || (x === x0 && ps[i].y < ps[i0].y)) {\n i0 = i;\n x0 = x;\n }\n }\n\n const hull = [] as number[]; // [Settings.maxPolygonVertices];\n let m = 0;\n let ih = i0;\n\n while (true) {\n _ASSERT && console.assert(m < Settings.maxPolygonVertices);\n hull[m] = ih;\n\n let ie = 0;\n for (let j = 1; j < n; ++j) {\n if (ie === ih) {\n ie = j;\n continue;\n }\n\n const r = Vec2.sub(ps[ie], ps[hull[m]]);\n const v = Vec2.sub(ps[j], ps[hull[m]]);\n const c = Vec2.crossVec2Vec2(r, v);\n // c < 0 means counter-clockwise wrapping, c > 0 means clockwise wrapping\n if (c < 0.0) {\n ie = j;\n }\n\n // Collinearity check\n if (c === 0.0 && v.lengthSquared() > r.lengthSquared()) {\n ie = j;\n }\n }\n\n ++m;\n ih = ie;\n\n if (ie === i0) {\n break;\n }\n }\n\n if (m < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n this.m_count = m;\n\n // Copy vertices.\n this.m_vertices = [];\n for (let i = 0; i < m; ++i) {\n this.m_vertices[i] = ps[hull[i]];\n }\n\n // Compute normals. Ensure the edges have non-zero length.\n for (let i = 0; i < m; ++i) {\n const i1 = i;\n const i2 = i + 1 < m ? i + 1 : 0;\n const edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]);\n _ASSERT && console.assert(edge.lengthSquared() > EPSILON * EPSILON);\n this.m_normals[i] = Vec2.crossVec2Num(edge, 1.0);\n this.m_normals[i].normalize();\n }\n\n // Compute the polygon centroid.\n this.m_centroid = computeCentroid(this.m_vertices, m);\n }\n\n /** @internal */ _setAsBox(hx: number, hy: number, center?: Vec2Value, angle?: number): void {\n // start with right-bottom, counter-clockwise, as in Gift wrapping algorithm in PolygonShape._set()\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\n this.m_normals[0] = Vec2.neo(1.0, 0.0);\n this.m_normals[1] = Vec2.neo(0.0, 1.0);\n this.m_normals[2] = Vec2.neo(-1.0, 0.0);\n this.m_normals[3] = Vec2.neo(0.0, -1.0);\n\n this.m_count = 4;\n\n if (center && Vec2.isValid(center)) {\n angle = angle || 0;\n\n matrix.copyVec2(this.m_centroid, center);\n\n const xf = Transform.identity();\n xf.p.setVec2(center);\n xf.q.setAngle(angle);\n\n // Transform vertices and normals.\n for (let i = 0; i < this.m_count; ++i) {\n this.m_vertices[i] = Transform.mulVec2(xf, this.m_vertices[i]);\n this.m_normals[i] = Rot.mulVec2(xf.q, this.m_normals[i]);\n }\n }\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const pLocal = matrix.detransformVec2(temp, xf, p);\n\n for (let i = 0; i < this.m_count; ++i) {\n const dot = matrix.dotVec2(this.m_normals[i], pLocal) - matrix.dotVec2(this.m_normals[i], this.m_vertices[i]);\n if (dot > 0.0) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n\n // Put the ray into the polygon's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n let lower = 0.0;\n let upper = input.maxFraction;\n\n let index = -1;\n\n for (let i = 0; i < this.m_count; ++i) {\n // p = p1 + a * d\n // dot(normal, p - v) = 0\n // dot(normal, p1 - v) + a * dot(normal, d) = 0\n const numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1));\n const denominator = Vec2.dot(this.m_normals[i], d);\n\n if (denominator == 0.0) {\n if (numerator < 0.0) {\n return false;\n }\n } else {\n // Note: we want this predicate without division:\n // lower < numerator / denominator, where denominator < 0\n // Since denominator < 0, we have to flip the inequality:\n // lower < numerator / denominator <==> denominator * lower > numerator.\n if (denominator < 0.0 && numerator < lower * denominator) {\n // Increase lower.\n // The segment enters this half-space.\n lower = numerator / denominator;\n index = i;\n } else if (denominator > 0.0 && numerator < upper * denominator) {\n // Decrease upper.\n // The segment exits this half-space.\n upper = numerator / denominator;\n }\n }\n\n // The use of epsilon here causes the assert on lower to trip\n // in some cases. Apparently the use of epsilon was to make edge\n // shapes work, but now those are handled separately.\n // if (upper < lower - matrix.EPSILON)\n if (upper < lower) {\n return false;\n }\n }\n\n _ASSERT && console.assert(0.0 <= lower && lower <= input.maxFraction);\n\n if (index >= 0) {\n output.fraction = lower;\n output.normal = Rot.mulVec2(xf.q, this.m_normals[index]);\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const v = matrix.transformVec2(temp, xf, this.m_vertices[i]);\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, v.y);\n maxY = math_max(maxY, v.y);\n }\n\n matrix.setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius);\n matrix.setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n // Polygon mass, centroid, and inertia.\n // Let rho be the polygon density in mass per unit area.\n // Then:\n // mass = rho * int(dA)\n // centroid.x = (1/mass) * rho * int(x * dA)\n // centroid.y = (1/mass) * rho * int(y * dA)\n // I = rho * int((x*x + y*y) * dA)\n //\n // We can compute these integrals by summing all the integrals\n // for each triangle of the polygon. To evaluate the integral\n // for a single triangle, we make a change of variables to\n // the (u,v) coordinates of the triangle:\n // x = x0 + e1x * u + e2x * v\n // y = y0 + e1y * u + e2y * v\n // where 0 <= u && 0 <= v && u + v <= 1.\n //\n // We integrate u from [0,1-v] and then v from [0,1].\n // We also need to use the Jacobian of the transformation:\n // D = cross(e1, e2)\n //\n // Simplification: triangle centroid = (1/3) * (p1 + p2 + p3)\n //\n // The rest of the derivation is handled by computer algebra.\n\n _ASSERT && console.assert(this.m_count >= 3);\n\n matrix.zeroVec2(center);\n let area = 0.0;\n let I = 0.0;\n\n // s is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n matrix.zeroVec2(s);\n\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < this.m_count; ++i) {\n matrix.plusVec2(s, this.m_vertices[i]);\n }\n matrix.scaleVec2(s, 1.0 / this.m_count, s);\n\n const k_inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < this.m_count; ++i) {\n // Triangle vertices.\n matrix.subVec2(e1, this.m_vertices[i], s);\n if ( i + 1 < this.m_count) {\n matrix.subVec2(e2, this.m_vertices[i + 1], s);\n } else {\n matrix.subVec2(e2, this.m_vertices[0], s);\n }\n\n const D = matrix.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine2Vec2(temp, triangleArea * k_inv3, e1, triangleArea * k_inv3, e2);\n matrix.plusVec2(center, temp);\n\n const ex1 = e1.x;\n const ey1 = e1.y;\n const ex2 = e2.x;\n const ey2 = e2.y;\n\n const intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2;\n const inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2;\n\n I += (0.25 * k_inv3 * D) * (intx2 + inty2);\n }\n\n // Total mass\n massData.mass = density * area;\n\n // Center of mass\n _ASSERT && console.assert(area > EPSILON);\n matrix.scaleVec2(center, 1.0 / area, center);\n matrix.addVec2(massData.center, center, s);\n\n // Inertia tensor relative to the local origin (point s).\n massData.I = density * I;\n\n // Shift to center of mass then to original body origin.\n massData.I += massData.mass * (matrix.dotVec2(massData.center, massData.center) - matrix.dotVec2(center, center));\n }\n\n /**\n * Validate convexity. This is a very time consuming operation.\n * @returns true if valid\n */\n validate(): boolean {\n for (let i = 0; i < this.m_count; ++i) {\n const i1 = i;\n const i2 = i < this.m_count - 1 ? i1 + 1 : 0;\n const p = this.m_vertices[i1];\n matrix.subVec2(e, this.m_vertices[i2], p);\n\n for (let j = 0; j < this.m_count; ++j) {\n if (j == i1 || j == i2) {\n continue;\n }\n\n const c = matrix.crossVec2Vec2(e, matrix.subVec2(temp, this.m_vertices[j], p));\n if (c < 0.0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\n for (let 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}\n\n/** @internal */ function computeCentroid(vs: Vec2[], count: number): Vec2 {\n _ASSERT && console.assert(count >= 3);\n\n const c = Vec2.zero();\n let area = 0.0;\n\n // pRef is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n const pRef = Vec2.zero();\n if (false) {\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < count; ++i) {\n pRef.add(vs[i]);\n }\n pRef.mul(1.0 / count);\n }\n\n const inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < count; ++i) {\n // Triangle vertices.\n const p1 = pRef;\n const p2 = vs[i];\n const p3 = i + 1 < count ? vs[i + 1] : vs[0];\n\n const e1 = Vec2.sub(p2, p1);\n const e2 = Vec2.sub(p3, p1);\n\n const D = Vec2.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine3Vec2(temp, 1, p1, 1, p2, 1, p3);\n matrix.plusScaleVec2(c, triangleArea * inv3, temp);\n }\n\n // Centroid\n _ASSERT && console.assert(area > EPSILON);\n c.mul(1.0 / area);\n return c;\n}\n\nexport const Polygon = PolygonShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Shape } from \"../Shape\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_PI = Math.PI;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\nexport class CircleShape extends Shape {\n static TYPE = \"circle\" as const;\n /** @hidden */ m_type: \"circle\";\n\n /** @hidden */ m_p: Vec2;\n /** @hidden */ m_radius: number;\n\n constructor(position: Vec2Value, radius?: number);\n constructor(radius?: number);\n constructor(a: any, b?: any) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof CircleShape)) {\n return new CircleShape(a, b);\n }\n\n super();\n\n this.m_type = CircleShape.TYPE;\n this.m_p = Vec2.zero();\n this.m_radius = 1;\n\n if (typeof a === \"object\" && Vec2.isValid(a)) {\n this.m_p.setVec2(a);\n\n if (typeof b === \"number\") {\n this.m_radius = b;\n }\n\n } else if (typeof a === \"number\") {\n this.m_radius = a;\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n p: this.m_p,\n radius: this.m_radius,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): CircleShape {\n return new CircleShape(data.p, data.radius);\n }\n\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getType(): \"circle\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getCenter(): Vec2 {\n return this.m_p;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): CircleShape {\n const clone = new CircleShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const center = matrix.transformVec2(temp, xf, this.m_p);\n return matrix.distSqrVec2(p, center) <= this.m_radius * this.m_radius;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // Collision Detection in Interactive 3D Environments by Gino van den Bergen\n // From Section 3.1.2\n // x = s + a * r\n // norm(x) = radius\n\n const position = Vec2.add(xf.p, Rot.mulVec2(xf.q, this.m_p));\n const s = Vec2.sub(input.p1, position);\n const b = Vec2.dot(s, s) - this.m_radius * this.m_radius;\n\n // Solve quadratic equation.\n const r = Vec2.sub(input.p2, input.p1);\n const c = Vec2.dot(s, r);\n const rr = Vec2.dot(r, r);\n const sigma = c * c - rr * b;\n\n // Check for negative discriminant and short segment.\n if (sigma < 0.0 || rr < EPSILON) {\n return false;\n }\n\n // Find the point of intersection of the line with the circle.\n let a = -(c + math_sqrt(sigma));\n\n // Is the intersection point on the segment?\n if (0.0 <= a && a <= input.maxFraction * rr) {\n a /= rr;\n output.fraction = a;\n output.normal = Vec2.add(s, Vec2.mulNumVec2(a, r));\n output.normal.normalize();\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n const p = matrix.transformVec2(temp, xf, this.m_p);\n\n matrix.setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius);\n matrix.setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n massData.mass = density * math_PI * this.m_radius * this.m_radius;\n matrix.copyVec2(massData.center, this.m_p);\n // inertia about the local origin\n massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + matrix.lengthSqrVec2(this.m_p));\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Circle = CircleShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. A value of 0 disables softness.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * Distance length.\n */\n length?: number;\n}\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointDef extends JointDef, DistanceJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0\n};\n\n/**\n * A distance joint constrains two points on two bodies to remain at a fixed\n * distance from each other. You can view this as a massless, rigid rod.\n */\nexport class DistanceJoint extends Joint {\n static TYPE = \"distance-joint\" as const;\n\n // Solver shared\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_length: number;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_gamma: number;\n /** @internal */ m_bias: number;\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n /**\n * @param def DistanceJoint definition.\n */\n constructor(def: DistanceJointDef);\n /**\n * @param anchorA Anchor A in global coordination.\n * @param anchorB Anchor B in global coordination.\n */\n constructor(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value);\n constructor(def: DistanceJointDef, bodyA?: Body, bodyB?: Body, anchorA?: Vec2Value, anchorB?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof DistanceJoint)) {\n return new DistanceJoint(def, bodyA, bodyB, anchorA, anchorB);\n }\n\n // order of constructor arguments is changed in v0.2\n if (bodyB && anchorA && (\"m_type\" in anchorA) && (\"x\" in bodyB) && (\"y\" in bodyB)) {\n const temp = bodyB;\n bodyB = anchorA as any as Body;\n anchorA = temp as any as Vec2;\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = DistanceJoint.TYPE;\n\n // Solver shared\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 :\n 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.0;\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n\n // 1-D constrained system\n // m (v2 - v1) = lambda\n // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass.\n // x2 = x1 + h * v2\n\n // 1-D mass-damper-spring system\n // m (v2 - v1) + h * d * v2 + h * k *\n\n // C = norm(p2 - p1) - L\n // u = (p2 - p1) / norm(p2 - p1)\n // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1))\n // J = [-u -cross(r1, u) u cross(r2, u)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n length: this.m_length,\n\n impulse: this.m_impulse,\n gamma: this.m_gamma,\n bias: this.m_bias,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): DistanceJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new DistanceJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\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\n if (def.length > 0) {\n this.m_length = +def.length;\n } else if (def.length < 0) { // don't change length\n } else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) {\n this.m_length = Vec2.distance(\n this.m_bodyA.getWorldPoint(this.m_localAnchorA),\n this.m_bodyB.getWorldPoint(this.m_localAnchorB)\n );\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the natural length. Manipulating the length can lead to non-physical\n * behavior when the frequency is zero.\n */\n setLength(length: number): void {\n this.m_length = length;\n }\n\n /**\n * Get the natural length.\n */\n getLength(): number {\n return this.m_length;\n }\n\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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(cB, this.m_rB), Vec2.add(cA, this.m_rA));\n\n // Handle singularity.\n const length = this.m_u.length();\n if (length > Settings.linearSlop) {\n this.m_u.mul(1.0 / length);\n } else {\n this.m_u.setNum(0.0, 0.0);\n }\n\n const crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n let invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu;\n\n // Compute the effective mass matrix.\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (this.m_frequencyHz > 0.0) {\n const C = length - this.m_length;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * this.m_mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_mass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invMass += this.m_gamma;\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n } else {\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n const Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA);\n\n const impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse);\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n if (this.m_frequencyHz > 0.0) {\n // There is no position correction for soft distance constraints.\n return true;\n }\n\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const length = u.normalize();\n const C = clamp(length - this.m_length, -Settings.maxLinearCorrection, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointOpt extends JointOpt {\n /**\n * The maximum friction force in N.\n */\n maxForce?: number;\n /**\n * The maximum friction torque in N-m.\n */\n maxTorque?: number;\n}\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointDef extends JointDef, FrictionJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n maxTorque : 0.0,\n};\n\n/**\n * Friction joint. This is used for top-down friction. It provides 2D\n * translational friction and angular friction.\n */\nexport class FrictionJoint extends Joint {\n static TYPE = \"friction-joint\" as const;\n\n /** @internal */ m_type: \"friction-joint\";\n\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n // Solver shared\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: FrictionJointDef);\n /**\n * @param anchor Anchor in global coordination.\n */\n constructor(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: FrictionJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof FrictionJoint)) {\n return new FrictionJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = FrictionJoint.TYPE;\n\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\n // Solver shared\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): FrictionJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new FrictionJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y\n * 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\n * this.m_rB.x;\n\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.sub(\n Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)),\n Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA))\n );\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = this.m_linearImpulse;\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) {\n this.m_linearImpulse.normalize();\n this.m_linearImpulse.mul(maxImpulse);\n }\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Vec3, Vec3Value } from \"./Vec3\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 3-by-3 matrix. Stored in column-major order.\n */\nexport class Mat33 {\n ex: Vec3;\n ey: Vec3;\n ez: Vec3;\n\n constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value);\n constructor();\n constructor(a?: Vec3Value, b?: Vec3Value, c?: Vec3Value) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec3.clone(a);\n this.ey = Vec3.clone(b);\n this.ez = Vec3.clone(c);\n } else {\n this.ex = Vec3.zero();\n this.ey = Vec3.zero();\n this.ez = Vec3.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat33.isValid(o), \"Invalid Mat33!\", o);\n }\n\n /**\n * Set this matrix to all zeros.\n */\n setZero(): Mat33 {\n this.ex.setZero();\n this.ey.setZero();\n this.ez.setZero();\n return this;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve33(v: Vec3Value): Vec3 {\n // let det = matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, this.ez));\n let cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y;\n let cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z;\n let cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x;\n let det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = new Vec3();\n // r.x = det * matrix.dotVec3(v, matrix.newCrossVec3(this.ey, this.ez));\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 * (v.x * cross_x + v.y * cross_y + v.z * cross_z);\n\n // r.y = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(v, this.ez));\n cross_x = v.y * this.ez.z - v.z * this.ez.y;\n cross_y = v.z * this.ez.x - v.x * this.ez.z;\n cross_z = v.x * this.ez.y - v.y * this.ez.x;\n r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z);\n\n // r.z = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, v));\n cross_x = this.ey.y * v.z - this.ey.z * v.y;\n cross_y = this.ey.z * v.x - this.ey.x * v.z;\n cross_z = this.ey.x * v.y - this.ey.y * v.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\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix\n * equation.\n */\n solve22(v: Vec2Value): Vec2 {\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a21 = this.ex.y;\n const a22 = this.ey.y;\n let det = a11 * a22 - a12 * a21;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = Vec2.zero();\n r.x = det * (a22 * v.x - a12 * v.y);\n r.y = det * (a11 * v.y - a21 * v.x);\n return r;\n }\n\n /**\n * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if\n * singular.\n */\n getInverse22(M: Mat33): void {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n M.ex.x = det * d;\n M.ey.x = -det * b;\n M.ex.z = 0.0;\n M.ex.y = -det * c;\n M.ey.y = det * a;\n M.ey.z = 0.0;\n M.ez.x = 0.0;\n M.ez.y = 0.0;\n M.ez.z = 0.0;\n }\n\n /**\n * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix\n * if singular.\n */\n getSymInverse33(M: Mat33): void {\n let det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez));\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a13 = this.ez.x;\n const a22 = this.ey.y;\n const a23 = this.ez.y;\n const a33 = this.ez.z;\n\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\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\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\n /**\n * Multiply a matrix times a vector.\n */\n static mul(a: Mat33, b: Vec2Value): Vec2;\n static mul(a: Mat33, b: Vec3Value): Vec3;\n static mul(a, b) {\n _ASSERT && Mat33.assert(a);\n if (b && \"z\" in b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n\n } else if (b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec3(a: Mat33, b: Vec3Value): Vec3 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n }\n\n static mulVec2(a: Mat33, b: Vec2Value): Vec2 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n static add(a: Mat33, b: Mat33): Mat33 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Mat33.assert(b);\n return new Mat33(\n Vec3.add(a.ex, b.ex),\n Vec3.add(a.ey, b.ey),\n Vec3.add(a.ez, b.ez)\n );\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n// todo: use string?\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n} \n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointOpt extends JointOpt {\n /**\n * The lower angle for the joint limit (radians).\n */\n lowerAngle?: number;\n /**\n * The upper angle for the joint limit (radians).\n */\n upperAngle?: number;\n /**\n * The maximum motor torque used to achieve the desired motor speed. Usually\n * in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed. Usually in radians per second.\n */\n motorSpeed?: number;\n /**\n * A flag to enable joint limits.\n */\n enableLimit?: boolean;\n /**\n * A flag to enable the joint motor.\n */\n enableMotor?: boolean;\n}\n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointDef extends JointDef, RevoluteJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n lowerAngle : 0.0,\n upperAngle : 0.0,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n enableLimit : false,\n enableMotor : false\n};\n\n/**\n * A revolute joint constrains two bodies to share a common point while they are\n * free to rotate about the point. The relative rotation about the shared point\n * is the joint angle. You can limit the relative rotation with a joint limit\n * that specifies a lower and upper angle. You can use a motor to drive the\n * relative rotation about the shared point. A maximum motor torque is provided\n * so that infinite forces are not generated.\n */\nexport class RevoluteJoint extends Joint {\n static TYPE = \"revolute-joint\" as const;\n\n /** @internal */ m_type: \"revolute-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerAngle: number;\n /** @internal */ m_upperAngle: number;\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n // effective mass for point-to-point constraint.\n /** @internal */ m_mass: Mat33;\n // effective mass for motor/limit angular constraint.\n /** @internal */ m_motorMass: number;\n /** @internal */ m_limitState: number;\n\n constructor(def: RevoluteJointDef);\n constructor(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RevoluteJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RevoluteJoint)) {\n return new RevoluteJoint(def, bodyA, bodyB, anchor);\n }\n\n def = def ?? {} as RevoluteJointDef;\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_mass = new Mat33();\n this.m_limitState = LimitState.inactiveLimit;\n\n this.m_type = RevoluteJoint.TYPE;\n\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\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\n if (Number.isFinite(def.referenceAngle)) {\n this.m_referenceAngle = def.referenceAngle;\n } else {\n this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle();\n }\n\n this.m_impulse = new Vec3();\n this.m_motorImpulse = 0.0;\n\n this.m_lowerAngle = def.lowerAngle ?? DEFAULTS.lowerAngle;\n this.m_upperAngle = def.upperAngle ?? DEFAULTS.upperAngle;\n this.m_maxMotorTorque = def.maxMotorTorque ?? DEFAULTS.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed ?? DEFAULTS.motorSpeed;\n this.m_enableLimit = def.enableLimit ?? DEFAULTS.enableLimit;\n this.m_enableMotor = def.enableMotor ?? DEFAULTS.enableMotor;\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Motor constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any):RevoluteJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RevoluteJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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 !== undefined) {\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 !== undefined) {\n this.m_enableMotor = def.enableMotor;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle in radians.\n */\n getJointAngle(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle speed in radians per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_angularVelocity - bA.m_angularVelocity;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Get the current motor torque given the inverse time step. Unit is N*m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set the motor speed in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set the maximum motor torque, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit in radians.\n */\n getLowerLimit(): number {\n return this.m_lowerAngle;\n }\n\n /**\n * Get the upper joint limit in radians.\n */\n getUpperLimit(): number {\n return this.m_upperAngle;\n }\n\n /**\n * Set the joint limits in radians.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(lower <= upper);\n\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.0;\n this.m_lowerAngle = lower;\n this.m_upperAngle = upper;\n }\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force given the inverse time step. Unit is N.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque due to the joint limit given the inverse time step.\n * Unit is N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\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\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n\n if (this.m_enableMotor == false || fixedRotation) {\n this.m_motorImpulse = 0.0;\n }\n\n if (this.m_enableLimit && fixedRotation == false) {\n const jointAngle = aB - aA - this.m_referenceAngle;\n\n if (math_abs(this.m_upperAngle - this.m_lowerAngle) < 2.0 * Settings.angularSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointAngle <= this.m_lowerAngle) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atLowerLimit;\n\n } else if (jointAngle >= this.m_upperAngle) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atUpperLimit;\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\n // Solve motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits && fixedRotation == false) {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(this.m_mass.solve33(Cdot));\n\n if (this.m_limitState == LimitState.equalLimits) {\n this.m_impulse.add(impulse);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse < 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse > 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n\n } else {\n // Solve point-to-point constraint\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const impulse = this.m_mass.solve22(Vec2.neg(Cdot));\n\n this.m_impulse.x += impulse.x;\n this.m_impulse.y += impulse.y;\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n let angularError = 0.0;\n let positionError = 0.0;\n\n const fixedRotation = (this.m_invIA + this.m_invIB == 0.0);\n\n // Solve angular limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const angle = aB - aA - this.m_referenceAngle;\n let limitImpulse = 0.0;\n\n if (this.m_limitState == LimitState.equalLimits) {\n // Prevent large angular corrections\n const C = clamp(angle - this.m_lowerAngle, -Settings.maxAngularCorrection, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n angularError = math_abs(C);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n let C = angle - this.m_lowerAngle;\n angularError = -C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C + Settings.angularSlop, -Settings.maxAngularCorrection, 0.0);\n limitImpulse = -this.m_motorMass * C;\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n let C = angle - this.m_upperAngle;\n angularError = C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C - Settings.angularSlop, 0.0, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n }\n\n aA -= this.m_invIA * limitImpulse;\n aB += this.m_invIB * limitImpulse;\n }\n\n // Solve point-to-point constraint.\n {\n qA.setAngle(aA);\n qB.setAngle(aB);\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n const C = Vec2.zero();\n C.addCombine(1, cB, 1, rB);\n C.subCombine(1, cA, 1, rA);\n positionError = C.length();\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y;\n K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y;\n K.ey.x = K.ex.y;\n K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x;\n\n const impulse = Vec2.neg(K.solve(C));\n\n cA.subMul(mA, impulse);\n aA -= iA * Vec2.crossVec2Vec2(rA, impulse);\n\n cB.addMul(mB, impulse);\n aB += iB * Vec2.crossVec2Vec2(rB, impulse);\n }\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3, \n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointOpt extends JointOpt {\n /**\n * Enable/disable the joint limit.\n */\n enableLimit?: boolean;\n /**\n * The lower translation limit, usually in meters.\n */\n lowerTranslation?: number;\n /**\n * The upper translation limit, usually in meters.\n */\n upperTranslation?: number;\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorForce?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointDef extends JointDef, PrismaticJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation unit axis in bodyA.\n */\n localAxisA: Vec2Value;\n /**\n * referenceAngle The constrained angle between the bodies:\n * bodyB_angle - bodyA_angle.\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableLimit : false,\n lowerTranslation : 0.0,\n upperTranslation : 0.0,\n enableMotor : false,\n maxMotorForce : 0.0,\n motorSpeed : 0.0\n};\n\n/**\n * A prismatic joint. This joint provides one degree of freedom: translation\n * along an axis fixed in bodyA. Relative rotation is prevented. You can use a\n * joint limit to restrict the range of motion and a joint motor to drive the\n * motion or to model joint friction.\n */\nexport class PrismaticJoint extends Joint {\n static TYPE = \"prismatic-joint\" as const;\n\n /** @internal */ m_type: \"prismatic-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerTranslation: number;\n /** @internal */ m_upperTranslation: number;\n /** @internal */ m_maxMotorForce: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n /** @internal */ m_limitState: number; // TODO enum\n /** @internal */ m_axis: Vec2;\n /** @internal */ m_perp: Vec2;\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_s1: number;\n /** @internal */ m_s2: number;\n /** @internal */ m_a1: number;\n /** @internal */ m_a2: number;\n /** @internal */ m_K: Mat33;\n\n constructor(def: PrismaticJointDef);\n constructor(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: PrismaticJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PrismaticJoint)) {\n return new PrismaticJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PrismaticJoint.TYPE;\n\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, 0.0));\n this.m_localXAxisA.normalize();\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle();\n\n this.m_impulse = new Vec3();\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n\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.inactiveLimit;\n\n this.m_axis = Vec2.zero();\n this.m_perp = Vec2.zero();\n\n this.m_K = new Mat33();\n\n // Linear constraint (point-to-line)\n // d = p2 - p1 = x2 + r2 - x1 - r1\n // C = dot(perp, d)\n // Cdot = dot(d, cross(w1, perp)) + dot(perp, v2 + cross(w2, r2) - v1 -\n // cross(w1, r1))\n // = -dot(perp, v1) - dot(cross(d + r1, perp), w1) + dot(perp, v2) +\n // dot(cross(r2, perp), v2)\n // J = [-perp, -cross(d + r1, perp), perp, cross(r2,perp)]\n //\n // Angular constraint\n // C = a2 - a1 + a_initial\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n //\n // K = J * invM * JT\n //\n // J = [-a -s1 a s2]\n // [0 -1 0 1]\n // a = perp\n // s1 = cross(d + r1, a) = cross(p2 - x1, a)\n // s2 = cross(r2, a) = cross(p2 - x2, a)\n\n // Motor/Limit linear constraint\n // C = dot(ax1, d)\n // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) +\n // dot(cross(r2, ax1), v2)\n // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)]\n\n // Block Solver\n // We develop a block solver that includes the joint limit. This makes the\n // limit stiff (inelastic) even\n // when the mass has poor distribution (leading to large torques about the\n // joint anchor points).\n //\n // The Jacobian has 3 rows:\n // J = [-uT -s1 uT s2] // linear\n // [0 -1 0 1] // angular\n // [-vT -a1 vT a2] // limit\n //\n // u = perp\n // v = axis\n // s1 = cross(d + r1, u), s2 = cross(r2, u)\n // a1 = cross(d + r1, v), a2 = cross(r2, v)\n\n // M * (v2 - v1) = JT * df\n // J * v2 = bias\n //\n // v2 = v1 + invM * JT * df\n // J * (v1 + invM * JT * df) = bias\n // K * df = bias - J * v1 = -Cdot\n // K = J * invM * JT\n // Cdot = J * v1 - bias\n //\n // Now solve for f2.\n // df = f2 - f1\n // K * (f2 - f1) = -Cdot\n // f2 = invK * (-Cdot) + f1\n //\n // Clamp accumulated limit impulse.\n // lower: f2(3) = max(f2(3), 0)\n // upper: f2(3) = min(f2(3), 0)\n //\n // Solve for correct f2(1:2)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:3) * f1\n // = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:2) * f1(1:2) + K(1:2,3) * f1(3)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3)) +\n // K(1:2,1:2) * f1(1:2)\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n //\n // Now compute impulse to be applied:\n // df = f2 - f1\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PrismaticJoint {\n data = {...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 const joint = new PrismaticJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, 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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const pA = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const pB = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = this.m_bodyA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const rA = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter));\n const rB = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter));\n const p1 = Vec2.add(bA.m_sweep.c, rA);\n const p2 = Vec2.add(bB.m_sweep.c, rB);\n const d = Vec2.sub(p2, p1);\n const axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA);\n\n const vA = bA.m_linearVelocity;\n const vB = bB.m_linearVelocity;\n const wA = bA.m_angularVelocity;\n const wB = bB.m_angularVelocity;\n\n const speed = Vec2.dot(d, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB, wB, rB), Vec2.addCrossNumVec2(vA, wA, rA)));\n return speed;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit, usually in meters.\n */\n getLowerLimit(): number {\n return this.m_lowerTranslation;\n }\n\n /**\n * Get the upper joint limit, usually in meters.\n */\n getUpperLimit(): number {\n return this.m_upperTranslation;\n }\n\n /**\n * Set the joint limits, usually in meters.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(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.0;\n }\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in meters per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Set the maximum motor force, usually in N.\n */\n setMaxMotorForce(force: number): void {\n if (force == this.m_maxMotorForce) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorForce = force;\n }\n\n getMaxMotorForce(): number {\n return this.m_maxMotorForce;\n }\n\n /**\n * Get the motor speed, usually in meters per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Get the current motor force given the inverse time step, usually in N.\n */\n getMotorForce(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\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\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.y;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute motor Jacobian and effective mass.\n {\n this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_axis);\n this.m_a2 = Vec2.crossVec2Vec2(rB, this.m_axis);\n\n this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2\n * this.m_a2;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n }\n\n // Prismatic constraint.\n {\n this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_perp);\n this.m_s2 = Vec2.crossVec2Vec2(rB, this.m_perp);\n\n const s1test = Vec2.crossVec2Vec2(rA, this.m_perp);\n\n const k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2;\n const k12 = iA * this.m_s1 + iB * this.m_s2;\n const k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For bodies with fixed rotation.\n k22 = 1.0;\n }\n const k23 = iA * this.m_a1 + iB * this.m_a2;\n const k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2;\n\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\n // Compute motor and limit terms.\n if (this.m_enableLimit) {\n\n const jointTranslation = Vec2.dot(this.m_axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Settings.linearSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointTranslation <= this.m_lowerTranslation) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_limitState = LimitState.atLowerLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else if (jointTranslation >= this.m_upperTranslation) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_limitState = LimitState.atUpperLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n if (this.m_enableMotor == false) {\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse\n + this.m_impulse.z, this.m_axis);\n const LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1;\n const LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Solve linear motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits) {\n const Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB, vA)) + this.m_a2 * wB\n - this.m_a1 * wA;\n let impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorForce;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse,\n -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_axis);\n const LA = impulse * this.m_a1;\n const LB = impulse * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n const Cdot1 = Vec2.zero();\n Cdot1.x += Vec2.dot(this.m_perp, vB) + this.m_s2 * wB;\n Cdot1.x -= Vec2.dot(this.m_perp, vA) + this.m_s1 * wA;\n Cdot1.y = wB - wA;\n\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit) {\n // Solve prismatic and limit constraint in block form.\n let Cdot2 = 0;\n Cdot2 += Vec2.dot(this.m_axis, vB) + this.m_a2 * wB;\n Cdot2 -= Vec2.dot(this.m_axis, vA) + this.m_a1 * wA;\n\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const f1 = Vec3.clone(this.m_impulse);\n let df = this.m_K.solve33(Vec3.neg(Cdot));\n this.m_impulse.add(df);\n\n if (this.m_limitState == LimitState.atLowerLimit) {\n this.m_impulse.z = math_max(this.m_impulse.z, 0.0);\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n this.m_impulse.z = math_min(this.m_impulse.z, 0.0);\n }\n\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n const b = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y));\n const f2r = Vec2.add(this.m_K.solve22(b), Vec2.neo(f1.x, f1.y));\n this.m_impulse.x = f2r.x;\n this.m_impulse.y = f2r.y;\n\n df = Vec3.sub(this.m_impulse, f1);\n\n const P = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis);\n const LA = df.x * this.m_s1 + df.y + df.z * this.m_a1;\n const LB = df.x * this.m_s2 + df.y + df.z * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n // Limit is inactive, just solve the prismatic constraint in block form.\n const df = this.m_K.solve22(Vec2.neg(Cdot1));\n this.m_impulse.x += df.x;\n this.m_impulse.y += df.y;\n\n const P = Vec2.mulNumVec2(df.x, this.m_perp);\n const LA = df.x * this.m_s1 + df.y;\n const LB = df.x * this.m_s2 + df.y;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute fresh Jacobians\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const axis = Rot.mulVec2(qA, this.m_localXAxisA);\n const a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), axis);\n const a2 = Vec2.crossVec2Vec2(rB, axis);\n const perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), perp);\n const s2 = Vec2.crossVec2Vec2(rB, perp);\n\n let impulse = new Vec3();\n const C1 = Vec2.zero();\n C1.x = Vec2.dot(perp, d);\n C1.y = aB - aA - this.m_referenceAngle;\n\n let linearError = math_abs(C1.x);\n const angularError = math_abs(C1.y);\n\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n let active = false; // bool\n let C2 = 0.0;\n if (this.m_enableLimit) {\n\n const translation = Vec2.dot(axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * linearSlop) {\n // Prevent large angular corrections\n C2 = clamp(translation, -maxLinearCorrection, maxLinearCorrection);\n linearError = math_max(linearError, math_abs(translation));\n active = true;\n\n } else if (translation <= this.m_lowerTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_lowerTranslation + linearSlop,\n -maxLinearCorrection, 0.0);\n linearError = Math\n .max(linearError, this.m_lowerTranslation - translation);\n active = true;\n\n } else if (translation >= this.m_upperTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_upperTranslation - linearSlop, 0.0,\n maxLinearCorrection);\n linearError = Math\n .max(linearError, translation - this.m_upperTranslation);\n active = true;\n }\n }\n\n if (active) {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n const k13 = iA * s1 * a1 + iB * s2 * a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For fixed rotation\n k22 = 1.0;\n }\n const k23 = iA * a1 + iB * a2;\n const k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2;\n\n const 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\n const C = new Vec3();\n C.x = C1.x;\n C.y = C1.y;\n C.z = C2;\n\n impulse = K.solve33(Vec3.neg(C));\n } else {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n k22 = 1.0;\n }\n\n const K = new Mat22();\n K.ex.setNum(k11, k12);\n K.ey.setNum(k12, k22);\n\n const impulse1 = K.solve(Vec2.neg(C1));\n impulse.x = impulse1.x;\n impulse.y = impulse1.y;\n impulse.z = 0.0;\n }\n\n const P = Vec2.combine(impulse.x, perp, impulse.z, axis);\n const LA = impulse.x * s1 + impulse.y + impulse.z * a1;\n const LB = impulse.x * s2 + impulse.y + impulse.z * a2;\n\n cA.subMul(mA, P);\n aA -= iA * LA;\n cB.addMul(mB, P);\n aB += iB * LB;\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError <= Settings.linearSlop\n && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { } from \"../../common/Math\";\nimport { Vec2 } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { RevoluteJoint } from \"./RevoluteJoint\";\nimport { PrismaticJoint } from \"./PrismaticJoint\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointOpt extends JointOpt {\n /**\n * The gear ratio. See {@link GearJoint} for explanation.\n */\n ratio?: number;\n}\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointDef extends JointDef, GearJointOpt {\n /**\n * The first revolute/prismatic joint attached to the gear joint.\n */\n joint1: RevoluteJoint | PrismaticJoint;\n /**\n * The second prismatic/revolute joint attached to the gear joint.\n */\n joint2: RevoluteJoint | PrismaticJoint;\n}\n\n/** @internal */ const DEFAULTS = {\n ratio : 1.0\n};\n\n/**\n * A gear joint is used to connect two joints together. Either joint can be a\n * revolute or prismatic joint. You specify a gear ratio to bind the motions\n * together: coordinate1 + ratio * coordinate2 = constant\n *\n * The ratio can be negative or positive. If one joint is a revolute joint and\n * the other joint is a prismatic joint, then the ratio will have units of\n * length or units of 1/length. Warning: You have to manually destroy the gear\n * joint if joint1 or joint2 is destroyed.\n *\n * This definition requires two existing revolute or prismatic joints (any\n * combination will work).\n */\nexport class GearJoint extends Joint {\n static TYPE = \"gear-joint\" as const;\n\n /** @internal */ m_type: \"gear-joint\";\n /** @internal */ m_joint1: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_joint2: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_type1: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_type2: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_bodyC: Body;\n /** @internal */ m_localAnchorC: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_referenceAngleA: number;\n /** @internal */ m_localAxisC: Vec2;\n /** @internal */ m_bodyD: Body;\n /** @internal */ m_localAnchorD: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngleB: number;\n /** @internal */ m_localAxisD: Vec2;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_lcA: Vec2;\n /** @internal */ m_lcB: Vec2;\n /** @internal */ m_lcC: Vec2;\n /** @internal */ m_lcD: Vec2;\n /** @internal */ m_mA: number;\n /** @internal */ m_mB: number;\n /** @internal */ m_mC: number;\n /** @internal */ m_mD: number;\n /** @internal */ m_iA: number;\n /** @internal */ m_iB: number;\n /** @internal */ m_iC: number;\n /** @internal */ m_iD: number;\n /** @internal */ m_JvAC: Vec2;\n /** @internal */ m_JvBD: Vec2;\n /** @internal */ m_JwA: number;\n /** @internal */ m_JwB: number;\n /** @internal */ m_JwC: number;\n /** @internal */ m_JwD: number;\n /** @internal */ m_mass: number;\n\n constructor(def: GearJointDef);\n constructor(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number);\n constructor(def: GearJointDef, bodyA?: Body, bodyB?: Body, joint1?: RevoluteJoint | PrismaticJoint, joint2?: RevoluteJoint | PrismaticJoint, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof GearJoint)) {\n return new GearJoint(def, bodyA, bodyB, joint1, joint2, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = GearJoint.TYPE;\n\n _ASSERT && console.assert(joint1.m_type === RevoluteJoint.TYPE || joint1.m_type === PrismaticJoint.TYPE);\n _ASSERT && console.assert(joint2.m_type === RevoluteJoint.TYPE || joint2.m_type === PrismaticJoint.TYPE);\n\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\n this.m_type1 = this.m_joint1.getType() as \"revolute-joint\" | \"prismatic-joint\";\n this.m_type2 = this.m_joint2.getType() as \"revolute-joint\" | \"prismatic-joint\";\n\n // joint1 connects body A to body C\n // joint2 connects body B to body D\n\n let coordinateA: number;\n let coordinateB: number;\n\n // TODO_ERIN there might be some problem with the joint edges in Joint.\n\n this.m_bodyC = this.m_joint1.getBodyA();\n this.m_bodyA = this.m_joint1.getBodyB();\n\n // Get geometry of joint1\n const xfA = this.m_bodyA.m_xf;\n const aA = this.m_bodyA.m_sweep.a;\n const xfC = this.m_bodyC.m_xf;\n const aC = this.m_bodyC.m_sweep.a;\n\n if (this.m_type1 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint1 as RevoluteJoint;\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\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const prismatic = this.m_joint1 as PrismaticJoint;\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\n const pC = this.m_localAnchorC;\n const pA = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA.q, this.m_localAnchorA), Vec2.sub(xfA.p, xfC.p)));\n coordinateA = Vec2.dot(pA, this.m_localAxisC) - Vec2.dot(pC, this.m_localAxisC);\n }\n\n this.m_bodyD = this.m_joint2.getBodyA();\n this.m_bodyB = this.m_joint2.getBodyB();\n\n // Get geometry of joint2\n const xfB = this.m_bodyB.m_xf;\n const aB = this.m_bodyB.m_sweep.a;\n const xfD = this.m_bodyD.m_xf;\n const aD = this.m_bodyD.m_sweep.a;\n\n if (this.m_type2 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint2 as RevoluteJoint;\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const prismatic = this.m_joint2 as PrismaticJoint;\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\n const pD = this.m_localAnchorD;\n const pB = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB.q, this.m_localAnchorB), Vec2.sub(xfB.p, xfD.p)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n this.m_constant = coordinateA + this.m_ratio * coordinateB;\n\n this.m_impulse = 0.0;\n\n // Gear Joint:\n // C0 = (coordinate1 + ratio * coordinate2)_initial\n // C = (coordinate1 + ratio * coordinate2) - C0 = 0\n // J = [J1 ratio * J2]\n // K = J * invM * JT\n // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T\n //\n // Revolute:\n // coordinate = rotation\n // Cdot = angularVelocity\n // J = [0 0 1]\n // K = J * invM * JT = invI\n //\n // Prismatic:\n // coordinate = dot(p - pg, ug)\n // Cdot = dot(v + cross(w, r), ug)\n // J = [ug cross(r, ug)]\n // K = J * invM * JT = invMass + invI * cross(r, ug)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n joint1: this.m_joint1,\n joint2: this.m_joint2,\n ratio: this.m_ratio,\n\n // _constant: this.m_constant,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): GearJoint {\n data = {...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 const joint = new GearJoint(data);\n // if (data._constant) joint.m_constant = data._constant;\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n // todo: implement other fields\n if (Number.isFinite(def.ratio)) {\n this.m_ratio = def.ratio;\n }\n }\n\n /**\n * Get the first joint.\n */\n getJoint1(): Joint {\n return this.m_joint1;\n }\n\n /**\n * Get the second joint.\n */\n getJoint2(): Joint {\n return this.m_joint2;\n }\n\n /**\n * Set the gear ratio.\n */\n setRatio(ratio: number): void {\n _ASSERT && console.assert(Number.isFinite(ratio));\n this.m_ratio = ratio;\n }\n\n /**\n * Get the gear ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n const L = this.m_impulse * this.m_JwA;\n return inv_dt * L;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const aC = this.m_bodyC.c_position.a;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n\n const aD = this.m_bodyD.c_position.a;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n this.m_mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n this.m_JvAC = Vec2.zero();\n this.m_JwA = 1.0;\n this.m_JwC = 1.0;\n this.m_mass += this.m_iA + this.m_iC;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = 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(rA, 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\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 const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n // Compute effective mass.\n this.m_mass = this.m_mass > 0.0 ? 1.0 / this.m_mass : 0.0;\n\n if (step.warmStarting) {\n vA.addMul(this.m_mA * this.m_impulse, this.m_JvAC);\n wA += this.m_iA * this.m_impulse * this.m_JwA;\n\n vB.addMul(this.m_mB * this.m_impulse, this.m_JvBD);\n wB += this.m_iB * this.m_impulse * this.m_JwB;\n\n vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC);\n wC -= this.m_iC * this.m_impulse * this.m_JwC;\n\n vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD);\n wD -= this.m_iD * this.m_impulse * this.m_JwD;\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n let Cdot = Vec2.dot(this.m_JvAC, vA) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB) - 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\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n vA.addMul(this.m_mA * impulse, this.m_JvAC);\n wA += this.m_iA * impulse * this.m_JwA;\n vB.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\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n const cC = this.m_bodyC.c_position.c;\n let aC = this.m_bodyC.c_position.a;\n const cD = this.m_bodyD.c_position.c;\n let aD = this.m_bodyD.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n const linearError = 0.0;\n\n let coordinateA: number;\n let coordinateB: number;\n\n let JvAC: Vec2;\n let JvBD: Vec2;\n let JwA: number;\n let JwB: number;\n let JwC: number;\n let JwD: number;\n let mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n JvAC = Vec2.zero();\n JwA = 1.0;\n JwC = 1.0;\n mass += this.m_iA + this.m_iC;\n\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA);\n JvAC = u;\n JwC = Vec2.crossVec2Vec2(rC, u);\n JwA = Vec2.crossVec2Vec2(rA, u);\n mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA;\n\n const pC = Vec2.sub(this.m_localAnchorC, this.m_lcC);\n const pA = Rot.mulTVec2(qC, Vec2.add(rA, Vec2.sub(cA, cC)));\n coordinateA = Vec2.dot(Vec2.sub(pA, pC), this.m_localAxisC);\n }\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n const pD = Vec2.sub(this.m_localAnchorD, this.m_lcD);\n const pB = Rot.mulTVec2(qD, Vec2.add(rB, Vec2.sub(cB, cD)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n const C = (coordinateA + this.m_ratio * coordinateB) - this.m_constant;\n\n let impulse = 0.0;\n if (mass > 0.0) {\n impulse = -C / mass;\n }\n\n cA.addMul(this.m_mA * impulse, JvAC);\n aA += this.m_iA * impulse * JwA;\n cB.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\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\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\n // TODO_ERIN not implemented\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointOpt extends JointOpt {\n /**\n * The bodyB angle minus bodyA angle in radians.\n */\n angularOffset?: number;\n /**\n * The maximum motor force in N.\n */\n maxForce?: number;\n /**\n * The maximum motor torque in N-m.\n */\n maxTorque?: number;\n /**\n * Position correction factor in the range [0,1].\n */\n correctionFactor?: number;\n /**\n * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters.\n */\n linearOffset?: Vec2Value;\n}\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointDef extends JointDef, MotorJointOpt {\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 1.0,\n maxTorque : 1.0,\n correctionFactor : 0.3\n};\n\n/**\n * A motor joint is used to control the relative motion between two bodies. A\n * typical usage is to control the movement of a dynamic body with respect to\n * the ground.\n */\nexport class MotorJoint extends Joint {\n static TYPE = \"motor-joint\" as const;\n\n /** @internal */ m_type: \"motor-joint\";\n /** @internal */ m_linearOffset: Vec2;\n /** @internal */ m_angularOffset: number;\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n /** @internal */ m_correctionFactor: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_linearError: Vec2;\n /** @internal */ m_angularError: number;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: MotorJointDef);\n constructor(def: MotorJointOpt, bodyA: Body, bodyB: Body);\n constructor(def: MotorJointDef | MotorJointOpt, bodyA?: Body, bodyB?: Body) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MotorJoint)) {\n return new MotorJoint(def, bodyA, bodyB);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MotorJoint.TYPE;\n\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\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n this.m_correctionFactor = def.correctionFactor;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n //\n // r1 = offset - c1\n // r2 = -c2\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n correctionFactor: this.m_correctionFactor,\n\n linearOffset: this.m_linearOffset,\n angularOffset: this.m_angularOffset,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MotorJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new MotorJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Set the position correction factor in the range [0,1].\n */\n setCorrectionFactor(factor: number): void {\n _ASSERT && console.assert(Number.isFinite(factor) && 0.0 <= factor && factor <= 1.0);\n this.m_correctionFactor = factor;\n }\n\n /**\n * Get the position correction factor in the range [0,1].\n */\n getCorrectionFactor(): number {\n return this.m_correctionFactor;\n }\n\n /**\n * Set/get the target linear offset, in frame A, in meters.\n */\n setLinearOffset(linearOffset: Vec2Value): void {\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\n getLinearOffset(): Vec2 {\n return this.m_linearOffset;\n }\n\n /**\n * Set/get the target angular offset, in radians.\n */\n setAngularOffset(angularOffset: number): void {\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\n getAngularOffset(): number {\n return this.m_angularOffset;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getPosition();\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getPosition();\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Upper 2 by 2 of K for point to point\n const 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\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n this.m_linearError = Vec2.zero();\n this.m_linearError.addCombine(1, cB, 1, this.m_rB);\n this.m_linearError.subCombine(1, cA, 1, this.m_rA);\n\n this.m_angularError = aB - aA - this.m_angularOffset;\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n const inv_h = step.inv_dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError);\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = Vec2.clone(this.m_linearImpulse);\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n this.m_linearImpulse.clamp(maxImpulse);\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Transform } from \"../../common/Transform\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointOpt extends JointOpt {\n /**\n * [maxForce = 0.0] The maximum constraint force that can be exerted to move\n * the candidate body. Usually you will express as some multiple of the\n * weight (multiplier * mass * gravity).\n */\n maxForce?: number;\n /**\n * [frequencyHz = 5.0] The response speed.\n */\n frequencyHz?: number;\n /**\n * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical\n * damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointDef extends JointDef, MouseJointOpt {\n /**\n * The initial world target point. This is assumed to coincide with the body\n * anchor initially.\n */\n target: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n frequencyHz : 5.0,\n dampingRatio : 0.7\n};\n\n/**\n * A mouse joint is used to make a point on a body track a specified world\n * point. This a soft constraint with a maximum force. This allows the\n * constraint to stretch and without applying huge forces.\n *\n * You need to call setTarget(target) every time that mouse is \n * moved, to track the new location of the mouse.\n *\n * NOTE: this joint is not documented in the manual because it was developed to\n * be used in the testbed. If you want to learn how to use the mouse joint, look\n * at the testbed.\n */\nexport class MouseJoint extends Joint {\n static TYPE = \"mouse-joint\" as const;\n\n /** @internal */ m_type: \"mouse-joint\";\n /** @internal */ m_targetA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_impulse: Vec2;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_beta: number;\n /** @internal */ m_gamma: number;\n // Solver temp\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat22;\n /** @internal */ m_C: Vec2;\n\n constructor(def: MouseJointDef);\n constructor(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value);\n constructor(def: MouseJointDef, bodyA?: Body, bodyB?: Body, target?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MouseJoint)) {\n return new MouseJoint(def, bodyA, bodyB, target);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MouseJoint.TYPE;\n\n _ASSERT && console.assert(Number.isFinite(def.maxForce) && def.maxForce >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.frequencyHz) && def.frequencyHz >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.dampingRatio) && def.dampingRatio >= 0.0);\n\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\n this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), this.m_targetA);\n\n this.m_maxForce = def.maxForce;\n this.m_impulse = Vec2.zero();\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_beta = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rB = Vec2.zero();\n this.m_localCenterB = Vec2.zero();\n this.m_invMassB = 0.0;\n this.m_invIB = 0.0;\n this.m_mass = new Mat22();\n this.m_C = Vec2.zero();\n\n // p = attached point, m = mouse point\n // C = p - m\n // Cdot = v\n // = v + cross(w, r)\n // J = [I r_skew]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n target: this.m_targetA,\n maxForce: this.m_maxForce,\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n _localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MouseJoint {\n data = {...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 const joint = new MouseJoint(data);\n if (data._localAnchorB) {\n joint.m_localAnchorB = data._localAnchorB;\n }\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Use this to update the target point.\n */\n setTarget(target: Vec2Value): void {\n if (Vec2.areEqual(target, this.m_targetA)) return;\n this.m_bodyB.setAwake(true);\n this.m_targetA.set(target);\n }\n\n getTarget(): Vec2 {\n return this.m_targetA;\n }\n\n /**\n * Set the maximum force in Newtons.\n */\n setMaxForce(force: number): void {\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum force in Newtons.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the frequency in Hertz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get the frequency in Hertz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set the damping ratio (dimensionless).\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get the damping ratio (dimensionless).\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return Vec2.clone(this.m_targetA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_impulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * 0.0;\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_targetA.sub(newOrigin);\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const position = this.m_bodyB.c_position;\n const velocity = this.m_bodyB.c_velocity;\n\n const cB = position.c;\n const aB = position.a;\n const vB = velocity.v;\n let wB = velocity.w;\n\n const qB = Rot.neo(aB);\n\n const mass = this.m_bodyB.getMass();\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = mass * (omega * omega);\n\n // magic formulas\n // gamma has units of inverse mass.\n // beta has units of inverse time.\n const h = step.dt;\n _ASSERT && console.assert(d + h * k > EPSILON);\n this.m_gamma = h * (d + h * k);\n if (this.m_gamma != 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n this.m_beta = h * k * this.m_gamma;\n\n // Compute the effective mass matrix.\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) *\n // invI2 * skew(r2)]\n // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y\n // -r1.x*r1.y]\n // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x]\n const K = new Mat22();\n K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y\n + 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\n + this.m_gamma;\n\n this.m_mass = K.getInverse();\n\n this.m_C.setVec2(cB);\n this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA);\n this.m_C.mul(this.m_beta);\n\n // Cheat with some damping\n wB *= 0.98;\n\n if (step.warmStarting) {\n this.m_impulse.mul(step.dtRatio);\n vB.addMul(this.m_invMassB, this.m_impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse);\n\n } else {\n this.m_impulse.setZero();\n }\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const velocity = this.m_bodyB.c_velocity;\n const vB = Vec2.clone(velocity.v);\n let wB = velocity.w;\n\n // Cdot = v + cross(w, r)\n\n const Cdot = Vec2.crossNumVec2(wB, this.m_rB);\n Cdot.add(vB);\n\n Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse);\n Cdot.neg();\n\n let impulse = Mat22.mulVec2(this.m_mass, Cdot);\n\n const oldImpulse = Vec2.clone(this.m_impulse);\n this.m_impulse.add(impulse);\n const maxImpulse = step.dt * this.m_maxForce;\n this.m_impulse.clamp(maxImpulse);\n impulse = Vec2.sub(this.m_impulse, oldImpulse);\n\n vB.addMul(this.m_invMassB, impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\n// tslint:disable-next-line:no-empty-interface\nexport interface PulleyJointOpt extends JointOpt {\n}\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\nexport interface PulleyJointDef extends JointDef, PulleyJointOpt {\n /**\n * The first ground anchor in world coordinates. This point never moves.\n */\n groundAnchorA: Vec2Value;\n /**\n * The second ground anchor in world coordinates. This point never moves.\n */\n groundAnchorB: Vec2Value;\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The reference length for the segment attached to bodyA.\n */\n lengthA: number;\n /**\n * The reference length for the segment attached to bodyB.\n */\n lengthB: number;\n /**\n * The pulley ratio, used to simulate a block-and-tackle.\n */\n ratio: number;\n\n /** @hidden */ anchorA?: Vec2Value;\n /** @hidden */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n collideConnected : true\n};\n\n/**\n * The pulley joint is connected to two bodies and two fixed ground points. The\n * pulley supports a ratio such that: length1 + ratio * length2 <= constant\n *\n * Yes, the force transmitted is scaled by the ratio.\n *\n * Warning: the pulley joint can get a bit squirrelly by itself. They often work\n * better when combined with prismatic joints. You should also cover the the\n * anchor points with static shapes to prevent one side from going to zero\n * length.\n */\nexport class PulleyJoint extends Joint {\n static TYPE = \"pulley-joint\" as const;\n // static MIN_PULLEY_LENGTH: number = 2.0; // TODO where this is used?\n\n /** @internal */ m_type: \"pulley-joint\";\n /** @internal */ m_groundAnchorA: Vec2;\n /** @internal */ m_groundAnchorB: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_lengthA: number;\n /** @internal */ m_lengthB: number;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_uA: Vec2;\n /** @internal */ m_uB: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n constructor(def: PulleyJointDef);\n constructor(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number);\n constructor(def: PulleyJointDef, bodyA?: Body, bodyB?: Body, groundA?: Vec2Value, groundB?: Vec2Value, anchorA?: Vec2Value, anchorB?: Vec2Value, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PulleyJoint)) {\n return new PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PulleyJoint.TYPE;\n this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1.0, 1.0));\n this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1.0, 1.0));\n this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1.0, 0.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\n _ASSERT && console.assert(ratio > EPSILON);\n\n this.m_constant = this.m_lengthA + this.m_ratio * this.m_lengthB;\n\n this.m_impulse = 0.0;\n\n // Pulley:\n // length1 = norm(p1 - s1)\n // length2 = norm(p2 - s2)\n // C0 = (length1 + ratio * length2)_initial\n // C = C0 - (length1 + ratio * length2)\n // u1 = (p1 - s1) / norm(p1 - s1)\n // u2 = (p2 - s2) / norm(p2 - s2)\n // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2))\n // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 *\n // cross(r2, u2)^2)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PulleyJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new PulleyJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Get the first ground anchor.\n */\n getGroundAnchorA(): Vec2 {\n return this.m_groundAnchorA;\n }\n\n /**\n * Get the second ground anchor.\n */\n getGroundAnchorB(): Vec2 {\n return this.m_groundAnchorB;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getLengthA(): number {\n return this.m_lengthA;\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getLengthB(): number {\n return this.m_lengthB;\n }\n\n /**\n * Get the pulley ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getCurrentLengthA(): number {\n const p = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const s = this.m_groundAnchorA;\n return Vec2.distance(p, s);\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getCurrentLengthB(): number {\n const p = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const s = this.m_groundAnchorB;\n return Vec2.distance(p, s);\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n *\n * @param newOrigin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_groundAnchorA.sub(newOrigin);\n this.m_groundAnchorB.sub(newOrigin);\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // Get the pulley axes.\n this.m_uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n this.m_uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = this.m_uA.length();\n const lengthB = this.m_uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n this.m_uA.mul(1.0 / lengthA);\n } else {\n this.m_uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n this.m_uB.mul(1.0 / lengthB);\n } else {\n this.m_uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA);\n const ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n this.m_mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support variable time steps.\n this.m_impulse *= step.dtRatio;\n\n // Warm starting.\n const PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB);\n\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n\n const Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB);\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const PA = Vec2.mulNumVec2(-impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB);\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // Get the pulley axes.\n const uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n const uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = uA.length();\n const lengthB = uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n uA.mul(1.0 / lengthA);\n } else {\n uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n uB.mul(1.0 / lengthB);\n } else {\n uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(rA, uA);\n const ruB = Vec2.crossVec2Vec2(rB, uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n let mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (mass > 0.0) {\n mass = 1.0 / mass;\n }\n\n const C = this.m_constant - lengthA - this.m_ratio * lengthB;\n const linearError = math_abs(C);\n\n const impulse = -mass * C;\n\n const PA = Vec2.mulNumVec2(-impulse, uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB);\n\n cA.addMul(this.m_invMassA, PA);\n aA += this.m_invIA * Vec2.crossVec2Vec2(rA, PA);\n cB.addMul(this.m_invMassB, PB);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, PB);\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointOpt extends JointOpt {\n /**\n * The maximum length of the rope.\n * Warning: this must be larger than linearSlop or the joint will have no effect.\n */\n maxLength?: number;\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointDef extends JointDef, RopeJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxLength : 0.0,\n};\n\n/**\n * A rope joint enforces a maximum distance between two points on two bodies. It\n * has no other effect.\n *\n * Warning: if you attempt to change the maximum length during the simulation\n * you will get some non-physical behavior.\n *\n * A model that would allow you to dynamically modify the length would have some\n * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you\n * want to dynamically control length.\n */\nexport class RopeJoint extends Joint {\n static TYPE = \"rope-joint\" as const;\n\n /** @internal */ m_type: \"rope-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n /** @internal */ m_maxLength: number;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_length: number;\n /** @internal */ m_state: number; // TODO enum\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n constructor(def: RopeJointDef);\n constructor(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RopeJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RopeJoint)) {\n return new RopeJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = RopeJoint.TYPE;\n this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1.0, 0.0));\n\n this.m_maxLength = def.maxLength;\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_length = 0.0;\n this.m_state = LimitState.inactiveLimit;\n\n // Limit:\n // C = norm(pB - pA) - L\n // u = (pB - pA) / norm(pB - pA)\n // Cdot = dot(u, vB + cross(wB, rB) - vA - cross(wA, rA))\n // J = [-u -cross(rA, u) u cross(rB, u)]\n // K = J * invM * JT\n // = invMassA + invIA * cross(rA, u)^2 + invMassB + invIB * cross(rB, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n maxLength: this.m_maxLength,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): RopeJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RopeJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n if (Number.isFinite(def.maxLength)) {\n this.m_maxLength = def.maxLength;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum length of the rope.\n */\n setMaxLength(length: number): void {\n this.m_maxLength = length;\n }\n\n /**\n * Get the maximum length of the rope.\n */\n getMaxLength(): number {\n return this.m_maxLength;\n }\n\n getLimitState(): number {\n // TODO LimitState\n return this.m_state;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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, cB, 1, this.m_rB);\n this.m_u.subCombine(1, cA, 1, this.m_rA);\n\n this.m_length = this.m_u.length();\n\n const C = this.m_length - this.m_maxLength;\n if (C > 0.0) {\n this.m_state = LimitState.atUpperLimit;\n } else {\n this.m_state = LimitState.inactiveLimit;\n }\n\n if (this.m_length > Settings.linearSlop) {\n this.m_u.mul(1.0 / this.m_length);\n } else {\n this.m_u.setZero();\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n return;\n }\n\n // Compute effective mass.\n const crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n const invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB;\n\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.addCrossNumVec2(vA, wA, this.m_rA);\n const vpB = Vec2.addCrossNumVec2(vB, wB, this.m_rB);\n const C = this.m_length - this.m_maxLength;\n let Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA));\n\n // Predictive constraint.\n if (C < 0.0) {\n Cdot += step.inv_dt * C;\n }\n\n let impulse = -this.m_mass * Cdot;\n const oldImpulse = this.m_impulse;\n this.m_impulse = math_min(0.0, this.m_impulse + impulse);\n impulse = this.m_impulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.zero();\n u.addCombine(1, cB, 1, rB);\n u.subCombine(1, cA, 1, rA);\n\n const length = u.normalize();\n let C = length - this.m_maxLength;\n\n C = clamp(C, 0.0, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return length - this.m_maxLength < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness\n * with a value of 0.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle?: number;\n}\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointDef extends JointDef, WeldJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0,\n};\n\n/**\n * A weld joint essentially glues two bodies together. A weld joint may distort\n * somewhat because the island constraint solver is approximate.\n */\nexport class WeldJoint extends Joint {\n static TYPE = \"weld-joint\" as const;\n\n /** @internal */ m_type: \"weld-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_impulse: Vec3;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat33;\n\n constructor(def: WeldJointDef);\n constructor(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: WeldJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WeldJoint)) {\n return new WeldJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = WeldJoint.TYPE;\n\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\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_impulse = new Vec3();\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rA;\n this.m_rB;\n this.m_localCenterA;\n this.m_localCenterB;\n this.m_invMassA;\n this.m_invMassB;\n this.m_invIA;\n this.m_invIB;\n this.m_mass = new Mat33();\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // / = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // C = angle2 - angle1 - referenceAngle\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WeldJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WeldJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Set frequency in Hz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get frequency in Hz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set damping ratio.\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get damping ratio.\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const 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\n * 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\n * 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\n if (this.m_frequencyHz > 0.0) {\n K.getInverse22(this.m_mass);\n\n let invM = iA + iB;\n const m = invM > 0.0 ? 1.0 / invM : 0.0;\n\n const C = aB - aA - this.m_referenceAngle;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * m * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = m * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invM += this.m_gamma;\n this.m_mass.ez.z = invM != 0.0 ? 1.0 / invM : 0.0;\n } else if (K.ez.z == 0.0) {\n K.getInverse22(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n } else {\n K.getSymInverse33(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n if (this.m_frequencyHz > 0.0) {\n const Cdot2 = wB - wA;\n\n const impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z);\n this.m_impulse.z += impulse2;\n\n wA -= iA * impulse2;\n wB += iB * impulse2;\n\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n\n const impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1));\n this.m_impulse.x += impulse1.x;\n this.m_impulse.y += impulse1.y;\n\n const P = Vec2.clone(impulse1);\n\n vA.subMul(mA, P);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(mB, P);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, P);\n } else {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot));\n this.m_impulse.add(impulse);\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n let positionError: number;\n let angularError: number;\n\n const K = new Mat33();\n K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB;\n K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB;\n K.ez.x = -rA.y * iA - rB.y * iB;\n K.ex.y = K.ey.x;\n K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB;\n K.ez.y = rA.x * iA + rB.x * iB;\n K.ex.z = K.ez.x;\n K.ey.z = K.ez.y;\n K.ez.z = iA + iB;\n\n if (this.m_frequencyHz > 0.0) {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n positionError = C1.length();\n angularError = 0.0;\n\n const P = Vec2.neg(K.solve22(C1));\n\n cA.subMul(mA, P);\n aA -= iA * Vec2.crossVec2Vec2(rA, P);\n\n cB.addMul(mB, P);\n aB += iB * Vec2.crossVec2Vec2(rB, P);\n } else {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n const C2 = aB - aA - this.m_referenceAngle;\n\n positionError = C1.length();\n angularError = math_abs(C2);\n\n const C = new Vec3(C1.x, C1.y, C2);\n\n let impulse = new Vec3();\n if (K.ez.z > 0.0) {\n impulse = Vec3.neg(K.solve33(C));\n } else {\n const impulse2 = Vec2.neg(K.solve22(C1));\n impulse.set(impulse2.x, impulse2.y, 0.0);\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n cA.subMul(mA, P);\n aA -= iA * (Vec2.crossVec2Vec2(rA, P) + impulse.z);\n\n cB.addMul(mB, P);\n aB += iB * (Vec2.crossVec2Vec2(rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointOpt extends JointOpt {\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n /**\n * Suspension frequency, zero indicates no suspension.\n */\n frequencyHz?: number;\n /**\n * Suspension damping ratio, one indicates critical damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointDef extends JointDef, WheelJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation axis in bodyA.\n */\n localAxisA: Vec2Value;\n\n /** @internal renamed to localAxisA */\n localAxis?: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableMotor : false,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n frequencyHz : 2.0,\n dampingRatio : 0.7,\n};\n\n/**\n * A wheel joint. This joint provides two degrees of freedom: translation along\n * an axis fixed in bodyA and rotation in the plane. In other words, it is a\n * point to line constraint with a rotational motor and a linear spring/damper.\n * This joint is designed for vehicle suspensions.\n */\nexport class WheelJoint extends Joint {\n static TYPE = \"wheel-joint\" as const;\n\n /** @internal */ m_type: \"wheel-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_springMass: number;\n /** @internal */ m_springImpulse: number;\n\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableMotor: boolean;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n /** @internal */ m_ax: Vec2;\n /** @internal */ m_ay: Vec2;\n /** @internal */ m_sAx: number;\n /** @internal */ m_sBx: number;\n /** @internal */ m_sAy: number;\n /** @internal */ m_sBy: number;\n\n constructor(def: WheelJointDef);\n constructor(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: WheelJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WheelJoint)) {\n return new WheelJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_ax = Vec2.zero();\n this.m_ay = Vec2.zero();\n\n this.m_type = WheelJoint.TYPE;\n\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\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 // localAxis is renamed to localAxisA, this is for backward compatibility\n this.m_localXAxisA = Vec2.clone(def.localAxis);\n } else {\n this.m_localXAxisA = Vec2.neo(1.0, 0.0);\n }\n\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n this.m_springMass = 0.0;\n this.m_springImpulse = 0.0;\n\n this.m_maxMotorTorque = def.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed;\n this.m_enableMotor = def.enableMotor;\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Linear constraint (point-to-line)\n // d = pB - pA = xB + rB - xA - rA\n // C = dot(ay, d)\n // Cdot = dot(d, cross(wA, ay)) + dot(ay, vB + cross(wB, rB) - vA - cross(wA,\n // rA))\n // = -dot(ay, vA) - dot(cross(d + rA, ay), wA) + dot(ay, vB) + dot(cross(rB,\n // ay), vB)\n // J = [-ay, -cross(d + rA, ay), ay, cross(rB, ay)]\n\n // Spring linear constraint\n // C = dot(ax, d)\n // Cdot = = -dot(ax, vA) - dot(cross(d + rA, ax), wA) + dot(ax, vB) +\n // dot(cross(rB, ax), vB)\n // J = [-ax -cross(d+rA, ax) ax cross(rB, ax)]\n\n // Motor rotational constraint\n // Cdot = wB - wA\n // J = [0 0 -1 0 0 1]\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WheelJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WheelJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, def.localAxisA));\n }\n if (def.enableMotor !== undefined) {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const pA = bA.getWorldPoint(this.m_localAnchorA);\n const pB = bB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = bA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const wA = this.m_bodyA.m_angularVelocity;\n const wB = this.m_bodyB.m_angularVelocity;\n return wB - wA;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed, usually in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set/Get the maximum motor force, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Get the current motor torque given the inverse time step, usually in N-m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set/Get the spring frequency in hertz. Setting the frequency to zero disables\n * the spring.\n */\n setSpringFrequencyHz(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getSpringFrequencyHz(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set/Get the spring damping ratio\n */\n setSpringDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getSpringDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n // Point to line constraint\n {\n this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA);\n this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ay);\n this.m_sBy = Vec2.crossVec2Vec2(rB, this.m_ay);\n\n this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy\n * this.m_sBy;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n }\n\n // Spring constraint\n this.m_springMass = 0.0;\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n if (this.m_frequencyHz > 0.0) {\n this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ax);\n this.m_sBx = Vec2.crossVec2Vec2(rB, this.m_ax);\n\n const invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx\n * this.m_sBx;\n\n if (invMass > 0.0) {\n this.m_springMass = 1.0 / invMass;\n\n const C = Vec2.dot(d, this.m_ax);\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const damp = 2.0 * this.m_springMass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_springMass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (damp + h * k);\n if (this.m_gamma > 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n\n this.m_bias = C * h * k * this.m_gamma;\n\n this.m_springMass = invMass + this.m_gamma;\n if (this.m_springMass > 0.0) {\n this.m_springMass = 1.0 / this.m_springMass;\n }\n }\n } else {\n this.m_springImpulse = 0.0;\n }\n\n // Rotational motor\n if (this.m_enableMotor) {\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n } else {\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse *= step.dtRatio;\n this.m_springImpulse *= step.dtRatio;\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax);\n const LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse;\n const LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse;\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * LA;\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * LB;\n\n } else {\n this.m_impulse = 0.0;\n this.m_springImpulse = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Solve spring constraint\n {\n const Cdot = Vec2.dot(this.m_ax, vB) - Vec2.dot(this.m_ax, vA) + this.m_sBx * wB - this.m_sAx * wA;\n const impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse);\n this.m_springImpulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ax);\n const LA = impulse * this.m_sAx;\n const LB = impulse * this.m_sBx;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n // Solve rotational motor constraint\n {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve point to line constraint\n {\n const Cdot = Vec2.dot(this.m_ay, vB) - Vec2.dot(this.m_ay, vA) + this.m_sBy * wB - this.m_sAy * wA;\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ay);\n const LA = impulse * this.m_sAy;\n const LB = impulse * this.m_sBy;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const ay = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), ay);\n const sBy = Vec2.crossVec2Vec2(rB, ay);\n\n const C = Vec2.dot(d, ay);\n\n const 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\n const impulse = k != 0.0 ? -C / k : 0.0;\n\n const P = Vec2.mulNumVec2(impulse, ay);\n const LA = impulse * sAy;\n const LB = impulse * sBy;\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * LA;\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * LB;\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) <= Settings.linearSlop;\n }\n\n}\n","import { World } from \"../dynamics/World\";\nimport { Body } from \"../dynamics/Body\";\nimport { Joint } from \"../dynamics/Joint\";\nimport { Fixture } from \"../dynamics/Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { Vec2 } from \"../common/Vec2\";\nimport { Vec3 } from \"../common/Vec3\";\nimport { ChainShape } from \"../collision/shape/ChainShape\";\n// import { BoxShape } from \"../collision/shape/BoxShape\";\nimport { EdgeShape } from \"../collision/shape/EdgeShape\";\nimport { PolygonShape } from \"../collision/shape/PolygonShape\";\nimport { CircleShape } from \"../collision/shape/CircleShape\";\nimport { DistanceJoint } from \"../dynamics/joint/DistanceJoint\";\nimport { FrictionJoint } from \"../dynamics/joint/FrictionJoint\";\nimport { GearJoint } from \"../dynamics/joint/GearJoint\";\nimport { MotorJoint } from \"../dynamics/joint/MotorJoint\";\nimport { MouseJoint } from \"../dynamics/joint/MouseJoint\";\nimport { PrismaticJoint } from \"../dynamics/joint/PrismaticJoint\";\nimport { PulleyJoint } from \"../dynamics/joint/PulleyJoint\";\nimport { RevoluteJoint } from \"../dynamics/joint/RevoluteJoint\";\nimport { RopeJoint } from \"../dynamics/joint/RopeJoint\";\nimport { WeldJoint } from \"../dynamics/joint/WeldJoint\";\nimport { WheelJoint } from \"../dynamics/joint/WheelJoint\";\n\nlet SID = 0;\n\n// Classes to be serialized as reference objects\nconst SERIALIZE_REF_TYPES = {\n \"World\": World,\n \"Body\": Body,\n \"Joint\": Joint,\n \"Fixture\": Fixture,\n \"Shape\": Shape,\n};\n\n// For deserializing reference objects by reference type\nconst 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};\n\n// For deserializing data objects by type field\nconst DESERIALIZE_BY_TYPE_FIELD = {\n [Body.STATIC]: Body,\n [Body.DYNAMIC]: Body,\n [Body.KINEMATIC]: Body,\n [ChainShape.TYPE]: ChainShape,\n // [BoxShape.TYPE]: BoxShape,\n [PolygonShape.TYPE]: PolygonShape,\n [EdgeShape.TYPE]: EdgeShape,\n [CircleShape.TYPE]: CircleShape,\n [DistanceJoint.TYPE]: DistanceJoint,\n [FrictionJoint.TYPE]: FrictionJoint,\n [GearJoint.TYPE]: GearJoint,\n [MotorJoint.TYPE]: MotorJoint,\n [MouseJoint.TYPE]: MouseJoint,\n [PrismaticJoint.TYPE]: PrismaticJoint,\n [PulleyJoint.TYPE]: PulleyJoint,\n [RevoluteJoint.TYPE]: RevoluteJoint,\n [RopeJoint.TYPE]: RopeJoint,\n [WeldJoint.TYPE]: WeldJoint,\n [WheelJoint.TYPE]: WheelJoint,\n};\n\n// dummy types\ntype DataType = any;\ntype ObjectType = any;\ntype ClassName = any;\n\ntype SerializedType = object[];\n\ntype RefType = {\n refIndex: number,\n refType: string,\n};\n\ntype SerializerOptions = {\n rootClass: ClassName,\n preSerialize?: (obj: ObjectType) => DataType,\n postSerialize?: (data: DataType, obj: any) => DataType,\n preDeserialize?: (data: DataType) => DataType,\n postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType,\n};\n\nconst DEFAULT_OPTIONS: SerializerOptions = {\n rootClass: World,\n preSerialize: function(obj) { return obj; },\n postSerialize: function(data, obj) { return data; },\n preDeserialize: function(data: DataType) { return data; },\n postDeserialize: function(obj, data) { return obj; },\n};\n\ntype DeserializeChildCallback = (classHint: any, obj: any, context: any) => any;\ntype ClassDeserializerMethod = (data: any, context: any, deserialize: DeserializeChildCallback) => any;\n\nexport class Serializer {\n private options: SerializerOptions;\n constructor(options: SerializerOptions) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n toJson = (root: T): SerializedType => {\n const preSerialize = this.options.preSerialize;\n const postSerialize = this.options.postSerialize;\n const json = [];\n\n // Breadth-first ref serialization queue\n const refQueue = [root];\n\n const refMemoById: Record = {};\n\n function addToRefQueue(value: any, typeName: string) {\n value.__sid = value.__sid || ++SID;\n if (!refMemoById[value.__sid]) {\n refQueue.push(value);\n const index = json.length + refQueue.length;\n const ref = {\n refIndex: index,\n refType: typeName\n };\n refMemoById[value.__sid] = ref;\n }\n return refMemoById[value.__sid];\n }\n\n function serializeWithHooks(obj: ObjectType) {\n obj = preSerialize(obj);\n let data = obj._serialize();\n data = postSerialize(data, obj);\n return data;\n }\n\n // traverse the object graph\n // ref objects are pushed into the queue\n // other objects are serialize in-place \n function traverse(value: any, noRefType = false) {\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n // object with _serialize function\n if (typeof value._serialize === \"function\") {\n if (!noRefType) {\n for (const typeName in SERIALIZE_REF_TYPES) {\n if (value instanceof SERIALIZE_REF_TYPES[typeName]) {\n return addToRefQueue(value, typeName);\n }\n }\n }\n // object with _serialize function\n value = serializeWithHooks(value);\n }\n // recursive for arrays any objects\n if (Array.isArray(value)) {\n const newValue = [];\n for (let key = 0; key < value.length; key++) {\n newValue[key] = traverse(value[key]);\n }\n value = newValue;\n\n } else {\n const newValue = {};\n for (const 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\n while (refQueue.length) {\n const obj = refQueue.shift();\n const str = traverse(obj, true);\n json.push(str);\n }\n\n return json;\n };\n\n fromJson = (json: SerializedType): T => {\n const preDeserialize = this.options.preDeserialize;\n const postDeserialize = this.options.postDeserialize;\n const rootClass = this.options.rootClass;\n\n const deserializedRefMemoByIndex: Record = {};\n\n function deserializeWithHooks(classHint: ClassName, data: DataType, context: any): ObjectType {\n if (!classHint || !classHint._deserialize) {\n classHint = DESERIALIZE_BY_TYPE_FIELD[data.type];\n }\n const deserializer = classHint && classHint._deserialize;\n if (!deserializer) {\n return;\n }\n data = preDeserialize(data);\n const classDeserializeFn = classHint._deserialize as ClassDeserializerMethod;\n let obj = classDeserializeFn(data, context, deserializeChild);\n obj = postDeserialize(obj, data);\n return obj;\n }\n\n /**\n * Recursive callback function to deserialize a child data object or reference object.\n * \n * @param classHint suggested class to deserialize obj to\n * @param dataOrRef data or reference object\n * @param context for example world when deserializing bodies and joints\n */\n function deserializeChild(classHint: ClassName, dataOrRef: DataType | RefType, context: any) {\n const isRefObject = dataOrRef.refIndex && dataOrRef.refType;\n if (!isRefObject) {\n return deserializeWithHooks(classHint, dataOrRef, context); \n }\n const ref = dataOrRef as RefType;\n if (DESERIALIZE_BY_REF_TYPE[ref.refType]) {\n classHint = DESERIALIZE_BY_REF_TYPE[ref.refType];\n }\n const refIndex = ref.refIndex;\n if (!deserializedRefMemoByIndex[refIndex]) {\n const data = json[refIndex];\n const obj = deserializeWithHooks(classHint, data, context);\n deserializedRefMemoByIndex[refIndex] = obj;\n }\n return deserializedRefMemoByIndex[refIndex];\n }\n\n const root = deserializeWithHooks(rootClass, json[0], null);\n\n return root;\n };\n\n static toJson: (root: World) => SerializedType;\n static fromJson: (json: SerializedType) => World;\n}\n\nconst worldSerializer = new Serializer({\n rootClass: World,\n});\n\nSerializer.fromJson = worldSerializer.fromJson;\nSerializer.toJson = worldSerializer.toJson;\n","import type { AABBValue } from \"../collision/AABB\";\nimport type { World } from \"../dynamics/World\";\nimport type { Joint } from \"../dynamics/Joint\";\nimport type { Fixture } from \"../dynamics/Fixture\";\nimport type { Body } from \"../dynamics/Body\";\n\nexport interface Style {\n stroke?: string;\n fill?: string;\n lineWidth?: number;\n}\n\ntype KEY = \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" |\n \"8\" | \"9\" | \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\" |\n \"H\" | \"I\" | \"J\" | \"K\" | \"L\" | \"M\" | \"N\" | \"O\" | \"P\" |\n \"Q\" | \"R\" | \"S\" | \"T\" | \"U\" | \"V\" | \"W\" | \"X\" | \"Y\" |\n \"Z\" | \"right\" | \"left\" | \"up\" | \"down\" | \"fire\";\n\nexport type ActiveKeys = { [key in KEY]?: boolean };\n\ntype TestbedMountOptions = {};\n\nexport abstract class Testbed {\n /**\n * Mounts testbed. Call start with a world to start simulation and rendering.\n */\n static mount(options?: TestbedMountOptions): Testbed {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Mounts testbed if needed, then starts simulation and rendering.\n * \n * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`.\n */\n static start(world: World): Testbed {\n const testbed = Testbed.mount();\n testbed.start(world);\n return testbed;\n }\n\n /** World viewbox width. */\n width: number = 80;\n\n /** World viewbox height. */\n height: number = 60;\n\n /** World viewbox center vertical offset. */\n x: number = 0;\n\n /** World viewbox center horizontal offset. */\n y: number = -10;\n\n /** @hidden */\n scaleY: number = -1;\n\n /** World simulation step frequency */\n hz: number = 60;\n\n /** World simulation speed, default is 1 */\n speed: number = 1;\n\n background: string = \"#222222\";\n\n mouseForce?: number;\n activeKeys: ActiveKeys = {};\n\n /** callback, to be implemented by user */\n step = (dt: number, t: number): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keydown = (keyCode: number, label: string): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keyup = (keyCode: number, label: string): void => {\n return;\n };\n\n abstract status(name: string, value: any): void;\n abstract status(value: object | string): void;\n\n abstract info(text: string): void;\n\n color(r: number, g: number, b: number): string {\n r = r * 256 | 0;\n g = g * 256 | 0;\n b = b * 256 | 0;\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n }\n\n abstract drawPoint(p: {x: number, y: number}, r: any, color: string): void;\n abstract drawCircle(p: {x: number, y: number}, r: number, color: string): void;\n abstract drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawSegment(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawPolygon(points: Array<{x: number, y: number}>, color: string): void;\n abstract drawAABB(aabb: AABBValue, color: string): void;\n\n abstract start(world: World): void;\n\n abstract findOne(query: string): (Body | Joint | Fixture | null);\n abstract findAll(query: string): (Body | Joint | Fixture)[];\n}\n\ntype TestbedFactoryOptions = string | {};\n\n/** @deprecated */\ntype TestbedCallback = (testbed: Testbed) => (World | undefined);\n\n/** @deprecated */\nexport function testbed(callback: TestbedCallback): void;\n/** @deprecated */\nexport function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void;\n/** @internal */\nexport function testbed(a?: any, b?: any) {\n let callback: TestbedCallback | undefined;\n let options;\n if (typeof a === \"function\") {\n callback = a;\n options = b;\n } else if (typeof b === \"function\") {\n callback = b;\n options = a;\n } else {\n options = a ?? b;\n }\n const testbed = Testbed.mount(options);\n if (callback) {\n // this is for backwards compatibility\n const world = callback(testbed) || (testbed as any).world;\n testbed.start(world);\n } else {\n return testbed;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2Value } from \"../../common/Vec2\";\nimport { PolygonShape } from \"./PolygonShape\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * A rectangle polygon which extend PolygonShape.\n */\nexport class BoxShape extends PolygonShape {\n // note that box is serialized/deserialized as polygon\n static TYPE = \"polygon\" as const;\n\n /**\n * \n * @param halfWidth \n * @param halfHeight \n * @param center coordinate of the center of the box relative to the body\n * @param angle angle of the box relative to the body\n */\n constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof BoxShape)) {\n return new BoxShape(halfWidth, halfHeight, center, angle);\n }\n\n super();\n\n this._setAsBox(halfWidth, halfHeight, center, angle);\n }\n}\n\nexport const Box = BoxShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\nimport * as matrix from \"../../common/Matrix\";\nimport { Transform } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact);\n\n/** @internal */ function CircleCircleContact(manifold: Manifold, xfA: Transform, fixtureA: Fixture, indexA: number, xfB: Transform, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == CircleShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollideCircles(manifold, fixtureA.getShape() as CircleShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const pA = matrix.vec2(0, 0);\n/** @internal */ const pB = matrix.vec2(0, 0);\n\nexport const CollideCircles = function (manifold: Manifold, circleA: CircleShape, xfA: Transform, circleB: CircleShape, xfB: Transform): void {\n manifold.pointCount = 0;\n\n matrix.transformVec2(pA, xfA, circleA.m_p);\n matrix.transformVec2(pB, xfB, circleB.m_p);\n\n const distSqr = matrix.distSqrVec2(pB, pA);\n const rA = circleA.m_radius;\n const rB = circleB.m_radius;\n const radius = rA + rB;\n if (distSqr > radius * radius) {\n return;\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.copyVec2(manifold.localPoint, circleA.m_p);\n matrix.zeroVec2(manifold.localNormal);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact);\nContact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact);\n\n/** @internal */ function EdgeCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const shapeA = fixtureA.getShape() as EdgeShape;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\nfunction ChainCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const chain = fixtureA.getShape() as ChainShape;\n const edge = new EdgeShape();\n chain.getChildEdge(edge, indexA);\n\n const shapeA = edge;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const Q = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n// Compute contact points for edge versus circle.\n// This accounts for edge connectivity.\nexport const CollideEdgeCircle = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle in frame of edge\n matrix.retransformVec2(Q, xfB, xfA, circleB.m_p);\n\n const A = edgeA.m_vertex1;\n const B = edgeA.m_vertex2;\n matrix.subVec2(e, B, A);\n\n // Barycentric coordinates\n const u = matrix.dotVec2(e, B) - matrix.dotVec2(e, Q);\n const v = matrix.dotVec2(e, Q) - matrix.dotVec2(e, A);\n\n const radius = edgeA.m_radius + circleB.m_radius;\n\n // Region A\n if (v <= 0.0) {\n matrix.copyVec2(P, A);\n const dd = matrix.distSqrVec2(Q, A);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to A?\n if (edgeA.m_hasVertex0) {\n const A1 = edgeA.m_vertex0;\n const B1 = A;\n matrix.subVec2(e1, B1, A1);\n const u1 = matrix.dotVec2(e1, B1) - matrix.dotVec2(e1, Q);\n\n // Is the circle in Region AB of the previous edge?\n if (u1 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Region B\n if (u <= 0.0) {\n matrix.copyVec2(P, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to B?\n if (edgeA.m_hasVertex3) {\n const B2 = edgeA.m_vertex3;\n const A2 = B;\n matrix.subVec2(e2, B2, A2);\n const v2 = matrix.dotVec2(e2, Q) - matrix.dotVec2(e2, A2);\n\n // Is the circle in Region AB of the next edge?\n if (v2 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n\n return;\n }\n\n // Region AB\n const den = matrix.lengthSqrVec2(e);\n _ASSERT && console.assert(den > 0.0);\n matrix.combine2Vec2(P, u / den, A, v / den, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n matrix.crossNumVec2(n, 1, e);\n if (matrix.dotVec2(n, Q) - matrix.dotVec2(n, A) < 0.0) {\n matrix.negVec2(n);\n }\n matrix.normalizeVec2(n);\n\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, n);\n matrix.copyVec2(manifold.localPoint, A);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const incidentEdge = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipSegmentToLineNormal = matrix.vec2(0, 0);\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const v11 = matrix.vec2(0, 0);\n/** @internal */ const v12 = matrix.vec2(0, 0);\n/** @internal */ const localTangent = matrix.vec2(0, 0);\n/** @internal */ const localNormal = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n\n\nContact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact);\n\n/** @internal */ function PolygonContact(\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number,\n): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == PolygonShape.TYPE);\n CollidePolygons(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ interface MaxSeparation {\n maxSeparation: number;\n bestIndex: number;\n}\n\n/**\n * Find the max separation between poly1 and poly2 using edge normals from\n * poly1.\n */\n/** @internal */ function findMaxSeparation(\n poly1: PolygonShape,\n xf1: TransformValue,\n poly2: PolygonShape,\n xf2: TransformValue,\n output: MaxSeparation,\n): void {\n const count1 = poly1.m_count;\n const count2 = poly2.m_count;\n const n1s = poly1.m_normals;\n const v1s = poly1.m_vertices;\n const v2s = poly2.m_vertices;\n\n matrix.detransformTransform(xf, xf2, xf1);\n\n let bestIndex = 0;\n let maxSeparation = -Infinity;\n for (let i = 0; i < count1; ++i) {\n // Get poly1 normal in frame2.\n matrix.rotVec2(n, xf.q, n1s[i]);\n matrix.transformVec2(v1, xf, v1s[i]);\n\n // Find deepest point for normal i.\n let si = Infinity;\n for (let j = 0; j < count2; ++j) {\n const sij = matrix.dotVec2(n, v2s[j]) - matrix.dotVec2(n, v1);\n if (sij < si) {\n si = sij;\n }\n }\n\n if (si > maxSeparation) {\n maxSeparation = si;\n bestIndex = i;\n }\n }\n\n // used to keep last FindMaxSeparation call values\n output.maxSeparation = maxSeparation;\n output.bestIndex = bestIndex;\n}\n\n/** @internal */ function findIncidentEdge(\n clipVertex: ClipVertex[],\n poly1: PolygonShape,\n xf1: TransformValue,\n edge1: number,\n poly2: PolygonShape,\n xf2: TransformValue,\n): void {\n const normals1 = poly1.m_normals;\n\n const count2 = poly2.m_count;\n const vertices2 = poly2.m_vertices;\n const normals2 = poly2.m_normals;\n\n _ASSERT && console.assert(0 <= edge1 && edge1 < poly1.m_count);\n\n // Get the normal of the reference edge in poly2's frame.\n matrix.rerotVec2(normal1, xf2.q, xf1.q, normals1[edge1]);\n\n // Find the incident edge on poly2.\n let index = 0;\n let minDot = Infinity;\n for (let i = 0; i < count2; ++i) {\n const dot = matrix.dotVec2(normal1, normals2[i]);\n if (dot < minDot) {\n minDot = dot;\n index = i;\n }\n }\n\n // Build the clip vertices for the incident edge.\n const i1 = index;\n const i2 = i1 + 1 < count2 ? i1 + 1 : 0;\n\n matrix.transformVec2(clipVertex[0].v, xf2, vertices2[i1]);\n clipVertex[0].id.setFeatures(edge1, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.transformVec2(clipVertex[1].v, xf2, vertices2[i2]);\n clipVertex[1].id.setFeatures(edge1, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n}\n\n/** @internal */ const maxSeparation = {\n maxSeparation: 0,\n bestIndex: 0,\n};\n\n/**\n *\n * Find edge normal of max separation on A - return if separating axis is found
\n * Find edge normal of max separation on B - return if separation axis is found
\n * Choose reference edge as min(minA, minB)
\n * Find incident edge
\n * Clip\n *\n * The normal points from 1 to 2\n */\nexport const CollidePolygons = function (\n manifold: Manifold,\n polyA: PolygonShape,\n xfA: TransformValue,\n polyB: PolygonShape,\n xfB: TransformValue,\n): void {\n manifold.pointCount = 0;\n const totalRadius = polyA.m_radius + polyB.m_radius;\n\n findMaxSeparation(polyA, xfA, polyB, xfB, maxSeparation);\n const edgeA = maxSeparation.bestIndex;\n const separationA = maxSeparation.maxSeparation;\n if (separationA > totalRadius)\n return;\n\n findMaxSeparation(polyB, xfB, polyA, xfA, maxSeparation);\n const edgeB = maxSeparation.bestIndex;\n const separationB = maxSeparation.maxSeparation;\n if (separationB > totalRadius)\n return;\n\n let poly1: PolygonShape; // reference polygon\n let poly2: PolygonShape; // incident polygon\n let xf1: TransformValue;\n let xf2: TransformValue;\n let edge1: number; // reference edge\n let flip: boolean;\n const k_tol = 0.1 * Settings.linearSlop;\n\n if (separationB > separationA + k_tol) {\n poly1 = polyB;\n poly2 = polyA;\n xf1 = xfB;\n xf2 = xfA;\n edge1 = edgeB;\n manifold.type = ManifoldType.e_faceB;\n flip = true;\n } else {\n poly1 = polyA;\n poly2 = polyB;\n xf1 = xfA;\n xf2 = xfB;\n edge1 = edgeA;\n manifold.type = ManifoldType.e_faceA;\n flip = false;\n }\n\n incidentEdge[0].recycle(), incidentEdge[1].recycle();\n findIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2);\n\n const count1 = poly1.m_count;\n const vertices1 = poly1.m_vertices;\n\n const iv1 = edge1;\n const iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0;\n\n matrix.copyVec2(v11, vertices1[iv1]);\n matrix.copyVec2(v12, vertices1[iv2]);\n\n matrix.subVec2(localTangent, v12, v11);\n matrix.normalizeVec2(localTangent);\n\n matrix.crossVec2Num(localNormal, localTangent, 1.0);\n matrix.combine2Vec2(planePoint, 0.5, v11, 0.5, v12);\n\n matrix.rotVec2(tangent, xf1.q, localTangent);\n matrix.crossVec2Num(normal, tangent, 1.0);\n\n matrix.transformVec2(v11, xf1, v11);\n matrix.transformVec2(v12, xf1, v12);\n\n // Face offset.\n const frontOffset = matrix.dotVec2(normal, v11);\n\n // Side offsets, extended by polytope skin thickness.\n const sideOffset1 = -matrix.dotVec2(tangent, v11) + totalRadius;\n const sideOffset2 = matrix.dotVec2(tangent, v12) + totalRadius;\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n matrix.setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y);\n const np1 = clipSegmentToLine(clipPoints1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1);\n\n if (np1 < 2) {\n return;\n }\n\n // Clip to negative box side 1\n matrix.setVec2(clipSegmentToLineNormal, tangent.x, tangent.y);\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, clipSegmentToLineNormal, sideOffset2, iv2);\n\n if (np2 < 2) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n matrix.copyVec2(manifold.localNormal, localNormal);\n matrix.copyVec2(manifold.localPoint, planePoint);\n\n let pointCount = 0;\n for (let i = 0; i < clipPoints2.length/* maxManifoldPoints */; ++i) {\n const separation = matrix.dotVec2(normal, clipPoints2[i].v) - frontOffset;\n\n if (separation <= totalRadius) {\n const cp = manifold.points[pointCount];\n matrix.detransformVec2(cp.localPoint, xf2, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n if (flip) {\n // Swap features\n cp.id.swapFeatures();\n }\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact);\n\n/** @internal */ function PolygonCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollidePolygonCircle(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const cLocal = matrix.vec2(0, 0);\n/** @internal */ const faceCenter = matrix.vec2(0, 0);\n\nexport const CollidePolygonCircle = function (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle position in the frame of the polygon.\n matrix.retransformVec2(cLocal, xfB, xfA, circleB.m_p);\n\n // Find the min separating edge.\n let normalIndex = 0;\n let separation = -Infinity;\n const radius = polygonA.m_radius + circleB.m_radius;\n const vertexCount = polygonA.m_count;\n const vertices = polygonA.m_vertices;\n const normals = polygonA.m_normals;\n\n for (let i = 0; i < vertexCount; ++i) {\n const s = matrix.dotVec2(normals[i], cLocal) - matrix.dotVec2(normals[i], vertices[i]);\n\n if (s > radius) {\n // Early out.\n return;\n }\n\n if (s > separation) {\n separation = s;\n normalIndex = i;\n }\n }\n\n // Vertices that subtend the incident face.\n const vertIndex1 = normalIndex;\n const vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0;\n const v1 = vertices[vertIndex1];\n const v2 = vertices[vertIndex2];\n\n // If the center is inside the polygon ...\n if (separation < EPSILON) {\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[normalIndex]);\n matrix.combine2Vec2(manifold.localPoint, 0.5, v1, 0.5, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Compute barycentric coordinates\n // u1 = (cLocal - v1) dot (v2 - v1))\n const u1 = matrix.dotVec2(cLocal, v2) - matrix.dotVec2(cLocal, v1) - matrix.dotVec2(v1, v2) + matrix.dotVec2(v1, v1);\n // u2 = (cLocal - v2) dot (v1 - v2)\n const u2 = matrix.dotVec2(cLocal, v1) - matrix.dotVec2(cLocal, v2) - matrix.dotVec2(v2, v1) + matrix.dotVec2(v2, v2);\n if (u1 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v1) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v1);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v1);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else if (u2 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v2) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v2);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else {\n matrix.combine2Vec2(faceCenter, 0.5, v1, 0.5, v2);\n const separation = matrix.dotVec2(cLocal, normals[vertIndex1]) - matrix.dotVec2(faceCenter, normals[vertIndex1]);\n if (separation > radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[vertIndex1]);\n matrix.copyVec2(manifold.localPoint, faceCenter);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n }\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_min = Math.min;\n\nContact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact);\nContact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact);\n\n/** @internal */ function EdgePolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n CollideEdgePolygon(manifold, fA.getShape() as EdgeShape, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n// reused\n/** @internal */ const edge_reuse = new EdgeShape();\n\n/** @internal */ function ChainPolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n const chain = fA.getShape() as ChainShape;\n chain.getChildEdge(edge_reuse, indexA);\n\n CollideEdgePolygon(manifold, edge_reuse, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ enum EPAxisType {\n e_unknown = -1,\n e_edgeA = 1,\n e_edgeB = 2,\n}\n\n// unused?\n/** @internal */ enum VertexType {\n e_isolated = 0,\n e_concave = 1,\n e_convex = 2,\n}\n\n/**\n * This structure is used to keep track of the best separating axis.\n */\n/** @internal */ class EPAxis {\n type: EPAxisType;\n index: number;\n separation: number;\n}\n\n/**\n * This holds polygon B expressed in frame A.\n */\n/** @internal */ class TempPolygon {\n vertices: Vec2Value[] = []; // [Settings.maxPolygonVertices]\n normals: Vec2Value[] = []; // [Settings.maxPolygonVertices];\n count: number = 0;\n constructor() {\n for (let i = 0; i < Settings.maxPolygonVertices; i++) {\n this.vertices.push(matrix.vec2(0, 0));\n this.normals.push(matrix.vec2(0, 0));\n }\n }\n}\n\n/**\n * Reference face used for clipping\n */\n/** @internal */ class ReferenceFace {\n i1: number;\n i2: number;\n readonly v1 = matrix.vec2(0 ,0);\n readonly v2 = matrix.vec2(0 ,0);\n readonly normal = matrix.vec2(0 ,0);\n readonly sideNormal1 = matrix.vec2(0 ,0);\n sideOffset1: number;\n readonly sideNormal2 = matrix.vec2(0 ,0);\n sideOffset2: number;\n recycle() {\n matrix.zeroVec2(this.v1);\n matrix.zeroVec2(this.v2);\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.sideNormal1);\n matrix.zeroVec2(this.sideNormal2);\n }\n}\n\n// reused\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const ie = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const edgeAxis = new EPAxis();\n/** @internal */ const polygonAxis = new EPAxis();\n/** @internal */ const polygonBA = new TempPolygon();\n/** @internal */ const rf = new ReferenceFace();\n/** @internal */ const centroidB = matrix.vec2(0, 0);\n/** @internal */ const edge0 = matrix.vec2(0, 0);\n/** @internal */ const edge1 = matrix.vec2(0, 0);\n/** @internal */ const edge2 = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal0 = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n/** @internal */ const normal2 = matrix.vec2(0, 0);\n/** @internal */ const lowerLimit = matrix.vec2(0, 0);\n/** @internal */ const upperLimit = matrix.vec2(0, 0);\n/** @internal */ const perp = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n/**\n * This function collides and edge and a polygon, taking into account edge\n * adjacency.\n */\nexport const CollideEdgePolygon = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue): void {\n // Algorithm:\n // 1. Classify v1 and v2\n // 2. Classify polygon centroid as front or back\n // 3. Flip normal if necessary\n // 4. Initialize normal range to [-pi, pi] about face normal\n // 5. Adjust normal range according to adjacent edges\n // 6. Visit each separating axes, only accept axes within the range\n // 7. Return if _any_ axis indicates separation\n // 8. Clip\n\n // let m_type1: VertexType;\n // let m_type2: VertexType;\n\n matrix.detransformTransform(xf, xfA, xfB);\n matrix.transformVec2(centroidB, xf, polygonB.m_centroid);\n\n const v0 = edgeA.m_vertex0;\n const v1 = edgeA.m_vertex1;\n const v2 = edgeA.m_vertex2;\n const v3 = edgeA.m_vertex3;\n\n const hasVertex0 = edgeA.m_hasVertex0;\n const hasVertex3 = edgeA.m_hasVertex3;\n\n matrix.subVec2(edge1, v2, v1);\n matrix.normalizeVec2(edge1);\n matrix.setVec2(normal1, edge1.y, -edge1.x);\n const offset1 = matrix.dotVec2(normal1, centroidB) - matrix.dotVec2(normal1, v1);\n let offset0 = 0.0;\n let offset2 = 0.0;\n let convex1 = false;\n let convex2 = false;\n\n matrix.zeroVec2(normal0);\n matrix.zeroVec2(normal2);\n\n // Is there a preceding edge?\n if (hasVertex0) {\n matrix.subVec2(edge0, v1, v0);\n matrix.normalizeVec2(edge0);\n matrix.setVec2(normal0, edge0.y, -edge0.x);\n convex1 = matrix.crossVec2Vec2(edge0, edge1) >= 0.0;\n offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0);\n }\n\n // Is there a following edge?\n if (hasVertex3) {\n matrix.subVec2(edge2, v3, v2);\n matrix.normalizeVec2(edge2);\n matrix.setVec2(normal2, edge2.y, -edge2.x);\n convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0.0;\n offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v2);\n }\n\n let front: boolean;\n matrix.zeroVec2(normal);\n matrix.zeroVec2(lowerLimit);\n matrix.zeroVec2(upperLimit);\n\n // Determine front or back collision. Determine collision normal limits.\n if (hasVertex0 && hasVertex3) {\n if (convex1 && convex2) {\n front = offset0 >= 0.0 || offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex1) {\n front = offset0 >= 0.0 || (offset1 >= 0.0 && offset2 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex2) {\n front = offset2 >= 0.0 || (offset0 >= 0.0 && offset1 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex0) {\n if (convex1) {\n front = offset0 >= 0.0 || offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex3) {\n if (convex2) {\n front = offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n } else {\n front = offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n } else {\n front = offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n\n // Get polygonB in frameA\n polygonBA.count = polygonB.m_count;\n for (let i = 0; i < polygonB.m_count; ++i) {\n matrix.transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]);\n matrix.rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]);\n }\n\n const radius = polygonB.m_radius + edgeA.m_radius;\n\n manifold.pointCount = 0;\n\n { // ComputeEdgeSeparation\n edgeAxis.type = EPAxisType.e_edgeA;\n edgeAxis.index = front ? 0 : 1;\n edgeAxis.separation = Infinity;\n\n for (let i = 0; i < polygonBA.count; ++i) {\n const v = polygonBA.vertices[i];\n const s = matrix.dotVec2(normal, v) - matrix.dotVec2(normal, v1);\n if (s < edgeAxis.separation) {\n edgeAxis.separation = s;\n }\n }\n }\n\n // If no valid normal can be found than this edge should not collide.\n // @ts-ignore todo: why we need this if here?\n if (edgeAxis.type == EPAxisType.e_unknown) {\n return;\n }\n\n if (edgeAxis.separation > radius) {\n return;\n }\n\n { // ComputePolygonSeparation\n polygonAxis.type = EPAxisType.e_unknown;\n polygonAxis.index = -1;\n polygonAxis.separation = -Infinity;\n\n matrix.setVec2(perp, -normal.y, normal.x);\n\n for (let i = 0; i < polygonBA.count; ++i) {\n matrix.scaleVec2(n, -1, polygonBA.normals[i]);\n\n const s1 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v1);\n const s2 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v2);\n const s = math_min(s1, s2);\n\n if (s > radius) {\n // No collision\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n break;\n }\n\n // Adjacency\n if (matrix.dotVec2(n, perp) >= 0.0) {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(upperLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n } else {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(lowerLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n }\n\n if (s > polygonAxis.separation) {\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n }\n }\n }\n\n if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) {\n return;\n }\n\n // Use hysteresis for jitter reduction.\n const k_relativeTol = 0.98;\n const k_absoluteTol = 0.001;\n\n let primaryAxis: EPAxis;\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\n ie[0].recycle(), ie[1].recycle();\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n manifold.type = ManifoldType.e_faceA;\n\n // Search for the polygon normal that is most anti-parallel to the edge\n // normal.\n let bestIndex = 0;\n let bestValue = matrix.dotVec2(normal, polygonBA.normals[0]);\n for (let i = 1; i < polygonBA.count; ++i) {\n const value = matrix.dotVec2(normal, polygonBA.normals[i]);\n if (value < bestValue) {\n bestValue = value;\n bestIndex = i;\n }\n }\n\n const i1 = bestIndex;\n const i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0;\n\n matrix.copyVec2(ie[0].v, polygonBA.vertices[i1]);\n ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.copyVec2(ie[1].v, polygonBA.vertices[i2]);\n ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n\n if (front) {\n rf.i1 = 0;\n rf.i2 = 1;\n matrix.copyVec2(rf.v1, v1);\n matrix.copyVec2(rf.v2, v2);\n matrix.copyVec2(rf.normal, normal1);\n } else {\n rf.i1 = 1;\n rf.i2 = 0;\n matrix.copyVec2(rf.v1, v2);\n matrix.copyVec2(rf.v2, v1);\n matrix.scaleVec2(rf.normal, -1, normal1);\n }\n } else {\n manifold.type = ManifoldType.e_faceB;\n\n matrix.copyVec2(ie[0].v, v1);\n ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n matrix.copyVec2(ie[1].v, v2);\n ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n rf.i1 = primaryAxis.index;\n rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0;\n matrix.copyVec2(rf.v1, polygonBA.vertices[rf.i1]);\n matrix.copyVec2(rf.v2, polygonBA.vertices[rf.i2]);\n matrix.copyVec2(rf.normal, polygonBA.normals[rf.i1]);\n }\n\n matrix.setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x);\n matrix.setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y);\n rf.sideOffset1 = matrix.dotVec2(rf.sideNormal1, rf.v1);\n rf.sideOffset2 = matrix.dotVec2(rf.sideNormal2, rf.v2);\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n const np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1);\n\n if (np1 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Clip to negative box side 1\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2);\n\n if (np2 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.copyVec2(manifold.localNormal, rf.normal);\n matrix.copyVec2(manifold.localPoint, rf.v1);\n } else {\n matrix.copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]);\n matrix.copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]);\n }\n\n let pointCount = 0;\n for (let i = 0; i < Settings.maxManifoldPoints; ++i) {\n const separation = matrix.dotVec2(rf.normal, clipPoints2[i].v) - matrix.dotVec2(rf.normal, rf.v1);\n\n if (separation <= radius) {\n const cp = manifold.points[pointCount]; // ManifoldPoint\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.detransformVec2(cp.localPoint, xf, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n } else {\n matrix.copyVec2(cp.localPoint, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n cp.id.swapFeatures();\n }\n\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","import { CollidePolygons } from \"./collision/shape/CollidePolygon\";\nimport { Settings } from \"./Settings\";\nimport { Sweep } from \"./common/Sweep\";\nimport { DynamicTree } from \"./collision/DynamicTree\";\nimport { Manifold } from \"./collision/Manifold\";\nimport { Distance } from \"./collision/Distance\";\nimport { TimeOfImpact } from \"./collision/TimeOfImpact\";\nimport { stats } from \"./util/stats\";\n\n/** @hidden @deprecated Merged with main namespace */\nexport const internal = {\n CollidePolygons,\n Settings,\n Sweep,\n Manifold,\n Distance,\n TimeOfImpact,\n DynamicTree,\n stats\n};\n","/**\n * Stage.js 1.0.0-alpha.5\n *\n * @copyright Copyright (c) 2024 Ali Shakiba\n * @license The MIT License (MIT)\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 */\nvar math_random = Math.random;\nvar math_sqrt = Math.sqrt;\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}\nfunction wrap(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 length(x, y) {\n return math_sqrt(x * x + y * y);\n}\nvar math = Object.create(Math);\nmath.random = random;\nmath.wrap = wrap;\nmath.clamp = clamp;\nmath.length = length;\nmath.rotate = wrap;\nmath.limit = clamp;\nvar Matrix = (\n /** @class */\n function() {\n function Matrix2(a, b, c, d, e, f) {\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.e = 0;\n this.f = 0;\n if (typeof a === \"object\") {\n this.reset(a);\n } else {\n this.reset(a, b, c, d, e, f);\n }\n }\n Matrix2.prototype.toString = function() {\n return \"[\" + this.a + \", \" + this.b + \", \" + this.c + \", \" + this.d + \", \" + this.e + \", \" + this.f + \"]\";\n };\n Matrix2.prototype.clone = function() {\n return new Matrix2(this.a, this.b, this.c, this.d, this.e, this.f);\n };\n Matrix2.prototype.reset = function(a, b, c, d, e, f) {\n this._dirty = true;\n if (typeof a === \"object\") {\n this.a = a.a;\n this.d = a.d;\n this.b = a.b;\n this.c = a.c;\n this.e = a.e;\n this.f = a.f;\n } else {\n this.a = typeof a === \"number\" ? a : 1;\n this.b = typeof b === \"number\" ? b : 0;\n this.c = typeof c === \"number\" ? c : 0;\n this.d = typeof d === \"number\" ? d : 1;\n this.e = typeof e === \"number\" ? e : 0;\n this.f = typeof f === \"number\" ? f : 0;\n }\n return this;\n };\n Matrix2.prototype.identity = function() {\n this._dirty = true;\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.e = 0;\n this.f = 0;\n return this;\n };\n Matrix2.prototype.rotate = function(angle) {\n if (!angle) {\n return this;\n }\n this._dirty = true;\n var u = angle ? Math.cos(angle) : 1;\n var v = angle ? Math.sin(angle) : 0;\n var a = u * this.a - v * this.b;\n var b = u * this.b + v * this.a;\n var c = u * this.c - v * this.d;\n var d = u * this.d + v * this.c;\n var e = u * this.e - v * this.f;\n var f = u * this.f + v * this.e;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.translate = function(x, y) {\n if (!x && !y) {\n return this;\n }\n this._dirty = true;\n this.e += x;\n this.f += y;\n return this;\n };\n Matrix2.prototype.scale = function(x, y) {\n if (!(x - 1) && !(y - 1)) {\n return this;\n }\n this._dirty = true;\n this.a *= x;\n this.b *= y;\n this.c *= x;\n this.d *= y;\n this.e *= x;\n this.f *= y;\n return this;\n };\n Matrix2.prototype.skew = function(x, y) {\n if (!x && !y) {\n return this;\n }\n this._dirty = true;\n var a = this.a + this.b * x;\n var b = this.b + this.a * y;\n var c = this.c + this.d * x;\n var d = this.d + this.c * y;\n var e = this.e + this.f * x;\n var f = this.f + this.e * y;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.concat = function(m) {\n this._dirty = true;\n var a = this.a * m.a + this.b * m.c;\n var b = this.b * m.d + this.a * m.b;\n var c = this.c * m.a + this.d * m.c;\n var d = this.d * m.d + this.c * m.b;\n var e = this.e * m.a + m.e + this.f * m.c;\n var f = this.f * m.d + m.f + this.e * m.b;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.inverse = function() {\n if (this._dirty) {\n this._dirty = false;\n if (!this.inverted) {\n this.inverted = new Matrix2();\n }\n var z = this.a * this.d - this.b * this.c;\n this.inverted.a = this.d / z;\n this.inverted.b = -this.b / z;\n this.inverted.c = -this.c / z;\n this.inverted.d = this.a / z;\n this.inverted.e = (this.c * this.f - this.e * this.d) / z;\n this.inverted.f = (this.e * this.b - this.a * this.f) / z;\n }\n return this.inverted;\n };\n Matrix2.prototype.map = function(p, q) {\n q = q || { x: 0, y: 0 };\n q.x = this.a * p.x + this.c * p.y + this.e;\n q.y = this.b * p.x + this.d * p.y + this.f;\n return q;\n };\n Matrix2.prototype.mapX = function(x, y) {\n if (typeof x === \"object\") {\n y = x.y;\n x = x.x;\n }\n return this.a * x + this.c * y + this.e;\n };\n Matrix2.prototype.mapY = function(x, y) {\n if (typeof x === \"object\") {\n y = x.y;\n x = x.x;\n }\n return this.b * x + this.d * y + this.f;\n };\n return Matrix2;\n }()\n);\nvar objectToString = Object.prototype.toString;\nfunction isFn(value) {\n var str = objectToString.call(value);\n return str === \"[object Function]\" || str === \"[object GeneratorFunction]\" || str === \"[object AsyncFunction]\";\n}\nfunction isHash(value) {\n return objectToString.call(value) === \"[object Object]\" && value.constructor === Object;\n}\nconst stats = {\n create: 0,\n tick: 0,\n node: 0,\n draw: 0,\n fps: 0\n};\nvar uid = function() {\n return Date.now().toString(36) + Math.random().toString(36).slice(2);\n};\nvar Texture = (\n /** @class */\n function() {\n function Texture2() {\n this.uid = \"texture:\" + uid();\n this.sx = 0;\n this.sy = 0;\n this.dx = 0;\n this.dy = 0;\n }\n Texture2.prototype.setSourceCoordinate = function(x, y) {\n this.sx = x;\n this.sy = y;\n };\n Texture2.prototype.setSourceDimension = function(w, h) {\n this.sw = w;\n this.sh = h;\n };\n Texture2.prototype.setDestinationCoordinate = function(x, y) {\n this.dx = x;\n this.dy = y;\n };\n Texture2.prototype.setDestinationDimension = function(w, h) {\n this.dw = w;\n this.dh = h;\n };\n Texture2.prototype.draw = function(context, x1, y1, w1, h1, x2, y2, w2, h2) {\n var sx = this.sx;\n var sy = this.sy;\n var sw = this.sw;\n var sh = this.sh;\n var dx = this.dx;\n var dy = this.dy;\n var dw = this.dw;\n var dh = this.dh;\n if (typeof x1 === \"number\" || typeof y1 === \"number\" || typeof w1 === \"number\" || typeof h1 === \"number\" || typeof x2 === \"number\" || typeof y2 === \"number\" || typeof w2 === \"number\" || typeof h2 === \"number\") {\n if (typeof x2 === \"number\" || typeof y2 === \"number\" || typeof w2 === \"number\" || typeof h2 === \"number\") {\n sx += x1;\n sy += y1;\n sw = w1 !== null && w1 !== void 0 ? w1 : sw;\n sh = h1 !== null && h1 !== void 0 ? h1 : sh;\n dx += x2;\n dy += y2;\n dw = w2 !== null && w2 !== void 0 ? w2 : dw;\n dh = h2 !== null && h2 !== void 0 ? h2 : dh;\n } else {\n dx += x1;\n dy += y1;\n dw = w1;\n dh = h1;\n }\n }\n this.drawWithNormalizedArgs(context, sx, sy, sw, sh, dx, dy, dw, dh);\n };\n return Texture2;\n }()\n);\nvar __extends$9 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar ImageTexture = (\n /** @class */\n function(_super) {\n __extends$9(ImageTexture2, _super);\n function ImageTexture2(source, pixelRatio) {\n var _this = _super.call(this) || this;\n _this._pixelRatio = 1;\n if (typeof source === \"object\") {\n _this.setSourceImage(source, pixelRatio);\n }\n return _this;\n }\n ImageTexture2.prototype.setSourceImage = function(image2, pixelRatio) {\n if (pixelRatio === void 0) {\n pixelRatio = 1;\n }\n this._source = image2;\n this._pixelRatio = pixelRatio;\n };\n ImageTexture2.prototype.getWidth = function() {\n return this._source.width / this._pixelRatio;\n };\n ImageTexture2.prototype.getHeight = function() {\n return this._source.height / this._pixelRatio;\n };\n ImageTexture2.prototype.prerender = function(context) {\n return false;\n };\n ImageTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var image2 = this._source;\n if (image2 === null || typeof image2 !== \"object\") {\n return;\n }\n sw = sw !== null && sw !== void 0 ? sw : this.getWidth();\n sh = sh !== null && sh !== void 0 ? sh : this.getHeight();\n dw = dw !== null && dw !== void 0 ? dw : sw;\n dh = dh !== null && dh !== void 0 ? dh : sh;\n sx *= this._pixelRatio;\n sy *= this._pixelRatio;\n sw *= this._pixelRatio;\n sh *= this._pixelRatio;\n try {\n stats.draw++;\n context.drawImage(image2, sx, sy, sw, sh, dx, dy, dw, dh);\n } catch (ex) {\n if (!this._draw_failed) {\n console.log(\"Unable to draw: \", image2);\n console.log(ex);\n this._draw_failed = true;\n }\n }\n };\n return ImageTexture2;\n }(Texture)\n);\nvar __extends$8 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar PipeTexture = (\n /** @class */\n function(_super) {\n __extends$8(PipeTexture2, _super);\n function PipeTexture2(source) {\n var _this = _super.call(this) || this;\n _this._source = source;\n return _this;\n }\n PipeTexture2.prototype.setSourceTexture = function(texture2) {\n this._source = texture2;\n };\n PipeTexture2.prototype.getWidth = function() {\n var _a, _b;\n return (_b = (_a = this.dw) !== null && _a !== void 0 ? _a : this.sw) !== null && _b !== void 0 ? _b : this._source.getWidth();\n };\n PipeTexture2.prototype.getHeight = function() {\n var _a, _b;\n return (_b = (_a = this.dh) !== null && _a !== void 0 ? _a : this.sh) !== null && _b !== void 0 ? _b : this._source.getHeight();\n };\n PipeTexture2.prototype.prerender = function(context) {\n return this._source.prerender(context);\n };\n PipeTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var texture2 = this._source;\n if (texture2 === null || typeof texture2 !== \"object\") {\n return;\n }\n texture2.draw(context, sx, sy, sw, sh, dx, dy, dw, dh);\n };\n return PipeTexture2;\n }(Texture)\n);\nvar __extends$7 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __awaiter$1 = function(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator$1 = function(thisArg, body) {\n var _ = { label: 0, sent: function() {\n if (t[0] & 1)\n throw t[1];\n return t[1];\n }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f)\n throw new TypeError(\"Generator is already executing.\");\n while (_)\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n return t;\n if (y = 0, t)\n op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return { value: op[1], done: false };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2])\n _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5)\n throw op[1];\n return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar Atlas = (\n /** @class */\n function(_super) {\n __extends$7(Atlas2, _super);\n function Atlas2(def) {\n if (def === void 0) {\n def = {};\n }\n var _this = _super.call(this) || this;\n _this.pipeSpriteTexture = function(def2) {\n var map = _this._map;\n var ppu = _this._ppu;\n var trim = _this._trim;\n if (!def2) {\n return void 0;\n }\n def2 = Object.assign({}, def2);\n if (isFn(map)) {\n def2 = map(def2);\n }\n if (ppu != 1) {\n def2.x *= ppu;\n def2.y *= ppu;\n def2.width *= ppu;\n def2.height *= ppu;\n def2.top *= ppu;\n def2.bottom *= ppu;\n def2.left *= ppu;\n def2.right *= ppu;\n }\n if (trim != 0) {\n def2.x += trim;\n def2.y += trim;\n def2.width -= 2 * trim;\n def2.height -= 2 * trim;\n def2.top -= trim;\n def2.bottom -= trim;\n def2.left -= trim;\n def2.right -= trim;\n }\n var texture2 = new PipeTexture(_this);\n texture2.top = def2.top;\n texture2.bottom = def2.bottom;\n texture2.left = def2.left;\n texture2.right = def2.right;\n texture2.setSourceCoordinate(def2.x, def2.y);\n texture2.setSourceDimension(def2.width, def2.height);\n return texture2;\n };\n _this.findSpriteDefinition = function(query) {\n var textures = _this._textures;\n if (textures) {\n if (isFn(textures)) {\n return textures(query);\n } else if (isHash(textures)) {\n return textures[query];\n }\n }\n };\n _this.select = function(query) {\n if (!query) {\n return new TextureSelection(new PipeTexture(_this));\n }\n var textureDefinition = _this.findSpriteDefinition(query);\n if (textureDefinition) {\n return new TextureSelection(textureDefinition, _this);\n }\n };\n _this.name = def.name;\n _this._ppu = def.ppu || def.ratio || 1;\n _this._trim = def.trim || 0;\n _this._map = def.map || def.filter;\n _this._textures = def.textures;\n if (typeof def.image === \"object\" && isHash(def.image)) {\n _this._imageSrc = def.image.src || def.image.url;\n if (typeof def.image.ratio === \"number\") {\n _this._pixelRatio = def.image.ratio;\n }\n } else {\n if (typeof def.imagePath === \"string\") {\n _this._imageSrc = def.imagePath;\n } else if (typeof def.image === \"string\") {\n _this._imageSrc = def.image;\n }\n if (typeof def.imageRatio === \"number\") {\n _this._pixelRatio = def.imageRatio;\n }\n }\n deprecatedWarning(def);\n return _this;\n }\n Atlas2.prototype.load = function() {\n return __awaiter$1(this, void 0, void 0, function() {\n var image2;\n return __generator$1(this, function(_a) {\n switch (_a.label) {\n case 0:\n if (!this._imageSrc)\n return [3, 2];\n return [4, asyncLoadImage(this._imageSrc)];\n case 1:\n image2 = _a.sent();\n this.setSourceImage(image2, this._pixelRatio);\n _a.label = 2;\n case 2:\n return [\n 2\n /*return*/\n ];\n }\n });\n });\n };\n return Atlas2;\n }(ImageTexture)\n);\nfunction asyncLoadImage(src) {\n return new Promise(function(resolve, reject) {\n var img = new Image();\n img.onload = function() {\n resolve(img);\n };\n img.onerror = function(error) {\n console.error(\"Loading failed: \" + src);\n reject(error);\n };\n img.src = src;\n });\n}\nfunction deprecatedWarning(def) {\n if (\"filter\" in def)\n console.warn(\"'filter' field of atlas definition is deprecated\");\n if (\"cutouts\" in def)\n console.warn(\"'cutouts' field of atlas definition is deprecated\");\n if (\"sprites\" in def)\n console.warn(\"'sprites' field of atlas definition is deprecated\");\n if (\"factory\" in def)\n console.warn(\"'factory' field of atlas definition is deprecated\");\n if (\"ratio\" in def)\n console.warn(\"'ratio' field of atlas definition is deprecated\");\n if (\"imagePath\" in def)\n console.warn(\"'imagePath' field of atlas definition is deprecated\");\n if (\"imageRatio\" in def)\n console.warn(\"'imageRatio' field of atlas definition is deprecated\");\n if (typeof def.image === \"object\" && \"url\" in def.image)\n console.warn(\"'image.url' field of atlas definition is deprecated\");\n}\nvar __extends$6 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __awaiter = function(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = function(thisArg, body) {\n var _ = { label: 0, sent: function() {\n if (t[0] & 1)\n throw t[1];\n return t[1];\n }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f)\n throw new TypeError(\"Generator is already executing.\");\n while (_)\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n return t;\n if (y = 0, t)\n op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return { value: op[1], done: false };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2])\n _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5)\n throw op[1];\n return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nfunction isAtlasSpriteDefinition(selection) {\n return typeof selection === \"object\" && isHash(selection) && \"number\" === typeof selection.width && \"number\" === typeof selection.height;\n}\nvar TextureSelection = (\n /** @class */\n function() {\n function TextureSelection2(selection, atlas2) {\n this.selection = selection;\n this.atlas = atlas2;\n }\n TextureSelection2.prototype.resolve = function(selection, subquery) {\n if (!selection) {\n return NO_TEXTURE;\n } else if (Array.isArray(selection)) {\n return this.resolve(selection[0]);\n } else if (selection instanceof Texture) {\n return selection;\n } else if (isAtlasSpriteDefinition(selection)) {\n if (!this.atlas) {\n return NO_TEXTURE;\n }\n return this.atlas.pipeSpriteTexture(selection);\n } else if (typeof selection === \"object\" && isHash(selection) && typeof subquery !== \"undefined\") {\n return this.resolve(selection[subquery]);\n } else if (typeof selection === \"function\" && isFn(selection)) {\n return this.resolve(selection(subquery));\n } else if (typeof selection === \"string\") {\n if (!this.atlas) {\n return NO_TEXTURE;\n }\n return this.resolve(this.atlas.findSpriteDefinition(selection));\n }\n };\n TextureSelection2.prototype.one = function(subquery) {\n return this.resolve(this.selection, subquery);\n };\n TextureSelection2.prototype.array = function(arr) {\n var array = Array.isArray(arr) ? arr : [];\n if (Array.isArray(this.selection)) {\n for (var i = 0; i < this.selection.length; i++) {\n array[i] = this.resolve(this.selection[i]);\n }\n } else {\n array[0] = this.resolve(this.selection);\n }\n return array;\n };\n return TextureSelection2;\n }()\n);\nvar NO_TEXTURE = new /** @class */\n(function(_super) {\n __extends$6(class_1, _super);\n function class_1() {\n var _this = _super.call(this) || this;\n _this.setSourceDimension(0, 0);\n return _this;\n }\n class_1.prototype.getWidth = function() {\n return 0;\n };\n class_1.prototype.getHeight = function() {\n return 0;\n };\n class_1.prototype.prerender = function(context) {\n return false;\n };\n class_1.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n };\n class_1.prototype.setSourceCoordinate = function(x, y) {\n };\n class_1.prototype.setSourceDimension = function(w, h) {\n };\n class_1.prototype.setDestinationCoordinate = function(x, y) {\n };\n class_1.prototype.setDestinationDimension = function(w, h) {\n };\n class_1.prototype.draw = function() {\n };\n return class_1;\n}(Texture))();\nvar NO_SELECTION = new TextureSelection(NO_TEXTURE);\nvar ATLAS_MEMO_BY_NAME = {};\nvar ATLAS_ARRAY = [];\nfunction atlas(def) {\n return __awaiter(this, void 0, Promise, function() {\n var atlas2;\n return __generator(this, function(_a) {\n switch (_a.label) {\n case 0:\n if (def instanceof Atlas) {\n atlas2 = def;\n } else {\n atlas2 = new Atlas(def);\n }\n if (atlas2.name) {\n ATLAS_MEMO_BY_NAME[atlas2.name] = atlas2;\n }\n ATLAS_ARRAY.push(atlas2);\n return [4, atlas2.load()];\n case 1:\n _a.sent();\n return [2, atlas2];\n }\n });\n });\n}\nfunction texture(query) {\n if (\"string\" !== typeof query) {\n return new TextureSelection(query);\n }\n var result = null;\n var colonIndex = query.indexOf(\":\");\n if (colonIndex > 0 && query.length > colonIndex + 1) {\n var atlas_1 = ATLAS_MEMO_BY_NAME[query.slice(0, colonIndex)];\n result = atlas_1 && atlas_1.select(query.slice(colonIndex + 1));\n }\n if (!result) {\n var atlas_2 = ATLAS_MEMO_BY_NAME[query];\n result = atlas_2 && atlas_2.select();\n }\n if (!result) {\n for (var i = 0; i < ATLAS_ARRAY.length; i++) {\n result = ATLAS_ARRAY[i].select(query);\n if (result) {\n break;\n }\n }\n }\n if (!result) {\n console.error(\"Texture not found: \" + query);\n result = NO_SELECTION;\n }\n return result;\n}\nvar __extends$5 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar ResizableTexture = (\n /** @class */\n function(_super) {\n __extends$5(ResizableTexture2, _super);\n function ResizableTexture2(source, mode) {\n var _this = _super.call(this) || this;\n _this._source = source;\n _this._resizeMode = mode;\n return _this;\n }\n ResizableTexture2.prototype.getWidth = function() {\n var _a;\n return (_a = this.dw) !== null && _a !== void 0 ? _a : this._source.getWidth();\n };\n ResizableTexture2.prototype.getHeight = function() {\n var _a;\n return (_a = this.dh) !== null && _a !== void 0 ? _a : this._source.getHeight();\n };\n ResizableTexture2.prototype.prerender = function(context) {\n return false;\n };\n ResizableTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var texture2 = this._source;\n if (texture2 === null || typeof texture2 !== \"object\") {\n return;\n }\n var outWidth = dw;\n var outHeight = dh;\n var left = Number.isFinite(texture2.left) ? texture2.left : 0;\n var right = Number.isFinite(texture2.right) ? texture2.right : 0;\n var top = Number.isFinite(texture2.top) ? texture2.top : 0;\n var bottom = Number.isFinite(texture2.bottom) ? texture2.bottom : 0;\n var width = texture2.getWidth() - left - right;\n var height = texture2.getHeight() - top - bottom;\n if (!this._innerSize) {\n outWidth = Math.max(outWidth - left - right, 0);\n outHeight = Math.max(outHeight - top - bottom, 0);\n }\n if (top > 0 && left > 0) {\n texture2.draw(context, 0, 0, left, top, 0, 0, left, top);\n }\n if (bottom > 0 && left > 0) {\n texture2.draw(context, 0, height + top, left, bottom, 0, outHeight + top, left, bottom);\n }\n if (top > 0 && right > 0) {\n texture2.draw(context, width + left, 0, right, top, outWidth + left, 0, right, top);\n }\n if (bottom > 0 && right > 0) {\n texture2.draw(context, width + left, height + top, right, bottom, outWidth + left, outHeight + top, right, bottom);\n }\n if (this._resizeMode === \"stretch\") {\n if (top > 0) {\n texture2.draw(context, left, 0, width, top, left, 0, outWidth, top);\n }\n if (bottom > 0) {\n texture2.draw(context, left, height + top, width, bottom, left, outHeight + top, outWidth, bottom);\n }\n if (left > 0) {\n texture2.draw(context, 0, top, left, height, 0, top, left, outHeight);\n }\n if (right > 0) {\n texture2.draw(context, width + left, top, right, height, outWidth + left, top, right, outHeight);\n }\n texture2.draw(context, left, top, width, height, left, top, outWidth, outHeight);\n } else if (this._resizeMode === \"tile\") {\n var l = left;\n var r = outWidth;\n var w = void 0;\n while (r > 0) {\n w = Math.min(width, r);\n r -= width;\n var t = top;\n var b = outHeight;\n var h = void 0;\n while (b > 0) {\n h = Math.min(height, b);\n b -= height;\n texture2.draw(context, left, top, w, h, l, t, w, h);\n if (r <= 0) {\n if (left) {\n texture2.draw(context, 0, top, left, h, 0, t, left, h);\n }\n if (right) {\n texture2.draw(context, width + left, top, right, h, l + w, t, right, h);\n }\n }\n t += h;\n }\n if (top) {\n texture2.draw(context, left, 0, w, top, l, 0, w, top);\n }\n if (bottom) {\n texture2.draw(context, left, height + top, w, bottom, l, t, w, bottom);\n }\n l += w;\n }\n }\n };\n return ResizableTexture2;\n }(Texture)\n);\nfunction getPixelRatio() {\n return typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1;\n}\nfunction isValidFitMode(value) {\n return value && (value === \"cover\" || value === \"contain\" || value === \"fill\" || value === \"in\" || value === \"in-pad\" || value === \"out\" || value === \"out-crop\");\n}\nvar iid$1 = 0;\nvar Pin = (\n /** @class */\n function() {\n function Pin2(owner) {\n this.uid = \"pin:\" + uid();\n this._owner = owner;\n this._parent = null;\n this._relativeMatrix = new Matrix();\n this._absoluteMatrix = new Matrix();\n this.reset();\n }\n Pin2.prototype.reset = function() {\n this._textureAlpha = 1;\n this._alpha = 1;\n this._width = 0;\n this._height = 0;\n this._scaleX = 1;\n this._scaleY = 1;\n this._skewX = 0;\n this._skewY = 0;\n this._rotation = 0;\n this._pivoted = false;\n this._pivotX = 0;\n this._pivotY = 0;\n this._handled = false;\n this._handleX = 0;\n this._handleY = 0;\n this._aligned = false;\n this._alignX = 0;\n this._alignY = 0;\n this._offsetX = 0;\n this._offsetY = 0;\n this._boxX = 0;\n this._boxY = 0;\n this._boxWidth = this._width;\n this._boxHeight = this._height;\n this._ts_translate = ++iid$1;\n this._ts_transform = ++iid$1;\n this._ts_matrix = ++iid$1;\n };\n Pin2.prototype._update = function() {\n this._parent = this._owner._parent && this._owner._parent._pin;\n if (this._handled && this._mo_handle != this._ts_transform) {\n this._mo_handle = this._ts_transform;\n this._ts_translate = ++iid$1;\n }\n if (this._aligned && this._parent && this._mo_align != this._parent._ts_transform) {\n this._mo_align = this._parent._ts_transform;\n this._ts_translate = ++iid$1;\n }\n return this;\n };\n Pin2.prototype.toString = function() {\n return this._owner + \" (\" + (this._parent ? this._parent._owner : null) + \")\";\n };\n Pin2.prototype.absoluteMatrix = function() {\n this._update();\n var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_matrix : 0);\n if (this._mo_abs == ts) {\n return this._absoluteMatrix;\n }\n this._mo_abs = ts;\n var abs = this._absoluteMatrix;\n abs.reset(this.relativeMatrix());\n this._parent && abs.concat(this._parent._absoluteMatrix);\n this._ts_matrix = ++iid$1;\n return abs;\n };\n Pin2.prototype.relativeMatrix = function() {\n this._update();\n var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_transform : 0);\n if (this._mo_rel == ts) {\n return this._relativeMatrix;\n }\n this._mo_rel = ts;\n var rel = this._relativeMatrix;\n rel.identity();\n if (this._pivoted) {\n rel.translate(-this._pivotX * this._width, -this._pivotY * this._height);\n }\n rel.scale(this._scaleX, this._scaleY);\n rel.skew(this._skewX, this._skewY);\n rel.rotate(this._rotation);\n if (this._pivoted) {\n rel.translate(this._pivotX * this._width, this._pivotY * this._height);\n }\n if (this._pivoted) {\n this._boxX = 0;\n this._boxY = 0;\n this._boxWidth = this._width;\n this._boxHeight = this._height;\n } else {\n var p = void 0;\n var q = void 0;\n if (rel.a > 0 && rel.c > 0 || rel.a < 0 && rel.c < 0) {\n p = 0;\n q = rel.a * this._width + rel.c * this._height;\n } else {\n p = rel.a * this._width;\n q = rel.c * this._height;\n }\n if (p > q) {\n this._boxX = q;\n this._boxWidth = p - q;\n } else {\n this._boxX = p;\n this._boxWidth = q - p;\n }\n if (rel.b > 0 && rel.d > 0 || rel.b < 0 && rel.d < 0) {\n p = 0;\n q = rel.b * this._width + rel.d * this._height;\n } else {\n p = rel.b * this._width;\n q = rel.d * this._height;\n }\n if (p > q) {\n this._boxY = q;\n this._boxHeight = p - q;\n } else {\n this._boxY = p;\n this._boxHeight = q - p;\n }\n }\n this._x = this._offsetX;\n this._y = this._offsetY;\n this._x -= this._boxX + this._handleX * this._boxWidth;\n this._y -= this._boxY + this._handleY * this._boxHeight;\n if (this._aligned && this._parent) {\n this._parent.relativeMatrix();\n this._x += this._alignX * this._parent._width;\n this._y += this._alignY * this._parent._height;\n }\n rel.translate(this._x, this._y);\n return this._relativeMatrix;\n };\n Pin2.prototype.get = function(key) {\n if (typeof getters[key] === \"function\") {\n return getters[key](this);\n }\n };\n Pin2.prototype.set = function(a, b) {\n if (typeof a === \"string\") {\n if (typeof setters[a] === \"function\" && typeof b !== \"undefined\") {\n setters[a](this, b);\n }\n } else if (typeof a === \"object\") {\n for (b in a) {\n if (typeof setters[b] === \"function\" && typeof a[b] !== \"undefined\") {\n setters[b](this, a[b], a);\n }\n }\n }\n if (this._owner) {\n this._owner._ts_pin = ++iid$1;\n this._owner.touch();\n }\n return this;\n };\n Pin2.prototype.fit = function(width, height, mode) {\n this._ts_transform = ++iid$1;\n if (mode === \"contain\") {\n mode = \"in-pad\";\n }\n if (mode === \"cover\") {\n mode = \"out-crop\";\n }\n if (typeof width === \"number\") {\n this._scaleX = width / this._unscaled_width;\n this._width = this._unscaled_width;\n }\n if (typeof height === \"number\") {\n this._scaleY = height / this._unscaled_height;\n this._height = this._unscaled_height;\n }\n if (typeof width === \"number\" && typeof height === \"number\" && typeof mode === \"string\") {\n if (mode === \"fill\")\n ;\n else if (mode === \"out\" || mode === \"out-crop\") {\n this._scaleX = this._scaleY = Math.max(this._scaleX, this._scaleY);\n } else if (mode === \"in\" || mode === \"in-pad\") {\n this._scaleX = this._scaleY = Math.min(this._scaleX, this._scaleY);\n }\n if (mode === \"out-crop\" || mode === \"in-pad\") {\n this._width = width / this._scaleX;\n this._height = height / this._scaleY;\n }\n }\n };\n return Pin2;\n }()\n);\nvar getters = {\n alpha: function(pin) {\n return pin._alpha;\n },\n textureAlpha: function(pin) {\n return pin._textureAlpha;\n },\n width: function(pin) {\n return pin._width;\n },\n height: function(pin) {\n return pin._height;\n },\n boxWidth: function(pin) {\n return pin._boxWidth;\n },\n boxHeight: function(pin) {\n return pin._boxHeight;\n },\n // scale : function(pin: Pin) {\n // },\n scaleX: function(pin) {\n return pin._scaleX;\n },\n scaleY: function(pin) {\n return pin._scaleY;\n },\n // skew : function(pin: Pin) {\n // },\n skewX: function(pin) {\n return pin._skewX;\n },\n skewY: function(pin) {\n return pin._skewY;\n },\n rotation: function(pin) {\n return pin._rotation;\n },\n // pivot : function(pin: Pin) {\n // },\n pivotX: function(pin) {\n return pin._pivotX;\n },\n pivotY: function(pin) {\n return pin._pivotY;\n },\n // offset : function(pin: Pin) {\n // },\n offsetX: function(pin) {\n return pin._offsetX;\n },\n offsetY: function(pin) {\n return pin._offsetY;\n },\n // align : function(pin: Pin) {\n // },\n alignX: function(pin) {\n return pin._alignX;\n },\n alignY: function(pin) {\n return pin._alignY;\n },\n // handle : function(pin: Pin) {\n // },\n handleX: function(pin) {\n return pin._handleX;\n },\n handleY: function(pin) {\n return pin._handleY;\n }\n};\nvar setters = {\n alpha: function(pin, value) {\n pin._alpha = value;\n },\n textureAlpha: function(pin, value) {\n pin._textureAlpha = value;\n },\n width: function(pin, value) {\n pin._unscaled_width = value;\n pin._width = value;\n pin._ts_transform = ++iid$1;\n },\n height: function(pin, value) {\n pin._unscaled_height = value;\n pin._height = value;\n pin._ts_transform = ++iid$1;\n },\n scale: function(pin, value) {\n pin._scaleX = value;\n pin._scaleY = value;\n pin._ts_transform = ++iid$1;\n },\n scaleX: function(pin, value) {\n pin._scaleX = value;\n pin._ts_transform = ++iid$1;\n },\n scaleY: function(pin, value) {\n pin._scaleY = value;\n pin._ts_transform = ++iid$1;\n },\n skew: function(pin, value) {\n pin._skewX = value;\n pin._skewY = value;\n pin._ts_transform = ++iid$1;\n },\n skewX: function(pin, value) {\n pin._skewX = value;\n pin._ts_transform = ++iid$1;\n },\n skewY: function(pin, value) {\n pin._skewY = value;\n pin._ts_transform = ++iid$1;\n },\n rotation: function(pin, value) {\n pin._rotation = value;\n pin._ts_transform = ++iid$1;\n },\n pivot: function(pin, value) {\n pin._pivotX = value;\n pin._pivotY = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n pivotX: function(pin, value) {\n pin._pivotX = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n pivotY: function(pin, value) {\n pin._pivotY = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n offset: function(pin, value) {\n pin._offsetX = value;\n pin._offsetY = value;\n pin._ts_translate = ++iid$1;\n },\n offsetX: function(pin, value) {\n pin._offsetX = value;\n pin._ts_translate = ++iid$1;\n },\n offsetY: function(pin, value) {\n pin._offsetY = value;\n pin._ts_translate = ++iid$1;\n },\n align: function(pin, value) {\n this.alignX(pin, value);\n this.alignY(pin, value);\n },\n alignX: function(pin, value) {\n pin._alignX = value;\n pin._aligned = true;\n pin._ts_translate = ++iid$1;\n this.handleX(pin, value);\n },\n alignY: function(pin, value) {\n pin._alignY = value;\n pin._aligned = true;\n pin._ts_translate = ++iid$1;\n this.handleY(pin, value);\n },\n handle: function(pin, value) {\n this.handleX(pin, value);\n this.handleY(pin, value);\n },\n handleX: function(pin, value) {\n pin._handleX = value;\n pin._handled = true;\n pin._ts_translate = ++iid$1;\n },\n handleY: function(pin, value) {\n pin._handleY = value;\n pin._handled = true;\n pin._ts_translate = ++iid$1;\n },\n resizeMode: function(pin, value, all) {\n if (all) {\n if (value == \"in\") {\n value = \"in-pad\";\n } else if (value == \"out\") {\n value = \"out-crop\";\n }\n pin.fit(all.resizeWidth, all.resizeHeight, value);\n }\n },\n resizeWidth: function(pin, value, all) {\n if (!all || !all.resizeMode) {\n pin.fit(value, null);\n }\n },\n resizeHeight: function(pin, value, all) {\n if (!all || !all.resizeMode) {\n pin.fit(null, value);\n }\n },\n scaleMode: function(pin, value, all) {\n if (all) {\n pin.fit(all.scaleWidth, all.scaleHeight, value);\n }\n },\n scaleWidth: function(pin, value, all) {\n if (!all || !all.scaleMode) {\n pin.fit(value, null);\n }\n },\n scaleHeight: function(pin, value, all) {\n if (!all || !all.scaleMode) {\n pin.fit(null, value);\n }\n },\n matrix: function(pin, value) {\n this.scaleX(pin, value.a);\n this.skewX(pin, value.c / value.d);\n this.skewY(pin, value.b / value.a);\n this.scaleY(pin, value.d);\n this.offsetX(pin, value.e);\n this.offsetY(pin, value.f);\n this.rotation(pin, 0);\n }\n};\nfunction IDENTITY(x) {\n return x;\n}\nvar LOOKUP_CACHE = {};\nvar MODE_BY_NAME = {};\nvar EASE_BY_NAME = {};\nvar Easing = (\n /** @class */\n function() {\n function Easing2() {\n }\n Easing2.get = function(token, fallback) {\n fallback = fallback || IDENTITY;\n if (typeof token === \"function\") {\n return token;\n }\n if (typeof token !== \"string\") {\n return fallback;\n }\n var easeFn = LOOKUP_CACHE[token];\n if (easeFn) {\n return easeFn;\n }\n var tokens = /^(\\w+)(-(in|out|in-out|out-in))?(\\((.*)\\))?$/i.exec(token);\n if (!tokens || !tokens.length) {\n return fallback;\n }\n var easeName = tokens[1];\n var easing = EASE_BY_NAME[easeName];\n var modeName = tokens[3];\n var modeFn = MODE_BY_NAME[modeName];\n var params = tokens[5];\n if (!easing) {\n easeFn = fallback;\n } else if (\"fn\" in easing && typeof easing.fn === \"function\") {\n easeFn = easing.fn;\n } else if (\"fc\" in easing && typeof easing.fc === \"function\") {\n var args = params ? params.replace(/\\s+/, \"\").split(\",\") : void 0;\n easeFn = easing.fc.apply(easing.fc, args);\n } else {\n easeFn = fallback;\n }\n if (modeFn) {\n easeFn = modeFn(easeFn);\n }\n LOOKUP_CACHE[token] = easeFn;\n return easeFn;\n };\n return Easing2;\n }()\n);\nfunction addMode(name, fn) {\n MODE_BY_NAME[name] = fn;\n}\nfunction addEaseFn(data) {\n var names = data.name.split(/\\s+/);\n for (var i = 0; i < names.length; i++) {\n var key = names[i];\n if (key) {\n EASE_BY_NAME[key] = data;\n }\n }\n}\naddMode(\"in\", function(f) {\n return f;\n});\naddMode(\"out\", function(f) {\n return function(t) {\n return 1 - f(1 - t);\n };\n});\naddMode(\"in-out\", function(f) {\n return function(t) {\n return t < 0.5 ? f(2 * t) / 2 : 1 - f(2 * (1 - t)) / 2;\n };\n});\naddMode(\"out-in\", function(f) {\n return function(t) {\n return t < 0.5 ? 1 - f(2 * (1 - t)) / 2 : f(2 * t) / 2;\n };\n});\naddEaseFn({\n name: \"linear\",\n fn: function(t) {\n return t;\n }\n});\naddEaseFn({\n name: \"quad\",\n fn: function(t) {\n return t * t;\n }\n});\naddEaseFn({\n name: \"cubic\",\n fn: function(t) {\n return t * t * t;\n }\n});\naddEaseFn({\n name: \"quart\",\n fn: function(t) {\n return t * t * t * t;\n }\n});\naddEaseFn({\n name: \"quint\",\n fn: function(t) {\n return t * t * t * t * t;\n }\n});\naddEaseFn({\n name: \"sin sine\",\n fn: function(t) {\n return 1 - Math.cos(t * Math.PI / 2);\n }\n});\naddEaseFn({\n name: \"exp expo\",\n fn: function(t) {\n return t == 0 ? 0 : Math.pow(2, 10 * (t - 1));\n }\n});\naddEaseFn({\n name: \"circle circ\",\n fn: function(t) {\n return 1 - Math.sqrt(1 - t * t);\n }\n});\naddEaseFn({\n name: \"bounce\",\n fn: function(t) {\n return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 : 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n }\n});\naddEaseFn({\n name: \"poly\",\n fc: function(e) {\n return function(t) {\n return Math.pow(t, e);\n };\n }\n});\naddEaseFn({\n name: \"elastic\",\n fc: function(a, p) {\n p = p || 0.45;\n a = a || 1;\n var s = p / (2 * Math.PI) * Math.asin(1 / a);\n return function(t) {\n return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p);\n };\n }\n});\naddEaseFn({\n name: \"back\",\n fc: function(s) {\n s = typeof s !== \"undefined\" ? s : 1.70158;\n return function(t) {\n return t * t * ((s + 1) * t - s);\n };\n }\n});\nvar Transition = (\n /** @class */\n function() {\n function Transition2(owner, options) {\n if (options === void 0) {\n options = {};\n }\n this.uid = \"transition:\" + uid();\n this._ending = [];\n this._end = {};\n this._duration = options.duration || 400;\n this._delay = options.delay || 0;\n this._owner = owner;\n this._time = 0;\n }\n Transition2.prototype.tick = function(node, elapsed, now, last) {\n this._time += elapsed;\n if (this._time < this._delay) {\n return;\n }\n var time = this._time - this._delay;\n if (!this._start) {\n this._start = {};\n for (var key in this._end) {\n this._start[key] = this._owner.pin(key);\n }\n }\n var p = Math.min(time / this._duration, 1);\n var ended = p >= 1;\n if (typeof this._easing == \"function\") {\n p = this._easing(p);\n }\n var q = 1 - p;\n for (var key in this._end) {\n this._owner.pin(key, this._start[key] * q + this._end[key] * p);\n }\n return ended;\n };\n Transition2.prototype.finish = function() {\n var _this = this;\n this._ending.forEach(function(callback) {\n try {\n callback.call(_this._owner);\n } catch (e) {\n console.error(e);\n }\n });\n return this._next;\n };\n Transition2.prototype.tween = function(a, b) {\n var options;\n if (typeof a === \"object\" && a !== null) {\n options = a;\n } else {\n options = {};\n if (typeof a === \"number\") {\n options.duration = a;\n if (typeof b === \"number\") {\n options.delay = b;\n }\n }\n }\n return this._next = new Transition2(this._owner, options);\n };\n Transition2.prototype.duration = function(duration) {\n this._duration = duration;\n return this;\n };\n Transition2.prototype.delay = function(delay) {\n this._delay = delay;\n return this;\n };\n Transition2.prototype.ease = function(easing) {\n this._easing = Easing.get(easing);\n return this;\n };\n Transition2.prototype.done = function(fn) {\n this._ending.push(fn);\n return this;\n };\n Transition2.prototype.hide = function() {\n this._ending.push(function() {\n this.hide();\n });\n this._hide = true;\n return this;\n };\n Transition2.prototype.remove = function() {\n this._ending.push(function() {\n this.remove();\n });\n this._remove = true;\n return this;\n };\n Transition2.prototype.pin = function(a, b) {\n if (typeof a === \"object\") {\n for (var attr in a) {\n pinning(this._owner, this._end, attr, a[attr]);\n }\n } else if (typeof b !== \"undefined\") {\n pinning(this._owner, this._end, a, b);\n }\n return this;\n };\n Transition2.prototype.then = function(fn) {\n this.done(fn);\n return this;\n };\n Transition2.prototype.clear = function(forward) {\n return this;\n };\n Transition2.prototype.size = function(w, h) {\n this.pin(\"width\", w);\n this.pin(\"height\", h);\n return this;\n };\n Transition2.prototype.width = function(w) {\n if (typeof w === \"undefined\") {\n return this.pin(\"width\");\n }\n this.pin(\"width\", w);\n return this;\n };\n Transition2.prototype.height = function(h) {\n if (typeof h === \"undefined\") {\n return this.pin(\"height\");\n }\n this.pin(\"height\", h);\n return this;\n };\n Transition2.prototype.offset = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n }\n this.pin(\"offsetX\", a);\n this.pin(\"offsetY\", b);\n return this;\n };\n Transition2.prototype.rotate = function(a) {\n this.pin(\"rotation\", a);\n return this;\n };\n Transition2.prototype.skew = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\") {\n b = a;\n }\n this.pin(\"skewX\", a);\n this.pin(\"skewY\", b);\n return this;\n };\n Transition2.prototype.scale = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\") {\n b = a;\n }\n this.pin(\"scaleX\", a);\n this.pin(\"scaleY\", b);\n return this;\n };\n Transition2.prototype.alpha = function(a, ta) {\n this.pin(\"alpha\", a);\n if (typeof ta !== \"undefined\") {\n this.pin(\"textureAlpha\", ta);\n }\n return this;\n };\n return Transition2;\n }()\n);\nfunction pinning(node, map, key, value) {\n if (typeof node.pin(key) === \"number\") {\n map[key] = value;\n } else if (typeof node.pin(key + \"X\") === \"number\" && typeof node.pin(key + \"Y\") === \"number\") {\n map[key + \"X\"] = value;\n map[key + \"Y\"] = value;\n }\n}\nvar iid = 0;\nstats.create = 0;\nfunction assertType(obj) {\n if (obj && obj instanceof Node) {\n return obj;\n }\n throw \"Invalid node: \" + obj;\n}\nfunction create() {\n return layout();\n}\nfunction layer() {\n return maximize();\n}\nfunction box() {\n return minimize();\n}\nfunction layout() {\n return new Node();\n}\nfunction row(align) {\n return layout().row(align).label(\"Row\");\n}\nfunction column(align) {\n return layout().column(align).label(\"Column\");\n}\nfunction minimize() {\n return layout().minimize().label(\"Minimize\");\n}\nfunction maximize() {\n return layout().maximize().label(\"Maximize\");\n}\nvar Node = (\n /** @class */\n function() {\n function Node2() {\n var _this = this;\n this.uid = \"node:\" + uid();\n this._label = \"\";\n this._parent = null;\n this._next = null;\n this._prev = null;\n this._first = null;\n this._last = null;\n this._visible = true;\n this._alpha = 1;\n this._padding = 0;\n this._spacing = 0;\n this._pin = new Pin(this);\n this._listeners = {};\n this._attrs = {};\n this._flags = {};\n this._transitions = [];\n this._tickBefore = [];\n this._tickAfter = [];\n this.MAX_ELAPSE = Infinity;\n this._transitionTickInitied = false;\n this._transitionTickLastTime = 0;\n this._transitionTick = function(elapsed, now, last) {\n if (!_this._transitions.length) {\n return false;\n }\n var ignore = _this._transitionTickLastTime !== last;\n _this._transitionTickLastTime = now;\n if (ignore) {\n return true;\n }\n var head = _this._transitions[0];\n var ended = head.tick(_this, elapsed, now, last);\n if (ended) {\n if (head === _this._transitions[0]) {\n _this._transitions.shift();\n }\n var next = head.finish();\n if (next) {\n _this._transitions.unshift(next);\n }\n }\n return true;\n };\n stats.create++;\n }\n Node2.prototype.matrix = function(relative) {\n if (relative === void 0) {\n relative = false;\n }\n if (relative === true) {\n return this._pin.relativeMatrix();\n }\n return this._pin.absoluteMatrix();\n };\n Node2.prototype.getPixelRatio = function() {\n var _a;\n var m = (_a = this._parent) === null || _a === void 0 ? void 0 : _a.matrix();\n var pixelRatio = !m ? 1 : Math.max(Math.abs(m.a), Math.abs(m.b)) / getPixelRatio();\n return pixelRatio;\n };\n Node2.prototype.pin = function(a, b) {\n if (typeof a === \"object\") {\n this._pin.set(a);\n return this;\n } else if (typeof a === \"string\") {\n if (typeof b === \"undefined\") {\n return this._pin.get(a);\n } else {\n this._pin.set(a, b);\n return this;\n }\n } else if (typeof a === \"undefined\") {\n return this._pin;\n }\n };\n Node2.prototype.fit = function(a, b, c) {\n if (typeof a === \"object\") {\n c = b;\n b = a.y;\n a = a.x;\n }\n this._pin.fit(a, b, c);\n return this;\n };\n Node2.prototype.scaleTo = function(a, b, c) {\n return this.fit(a, b, c);\n };\n Node2.prototype.toString = function() {\n return \"[\" + this._label + \"]\";\n };\n Node2.prototype.id = function(id) {\n return this.label(id);\n };\n Node2.prototype.label = function(label) {\n if (typeof label === \"undefined\") {\n return this._label;\n }\n this._label = label;\n return this;\n };\n Node2.prototype.attr = function(name, value) {\n if (typeof value === \"undefined\") {\n return this._attrs !== null ? this._attrs[name] : void 0;\n }\n (this._attrs !== null ? this._attrs : this._attrs = {})[name] = value;\n return this;\n };\n Node2.prototype.visible = function(visible) {\n if (typeof visible === \"undefined\") {\n return this._visible;\n }\n this._visible = visible;\n this._parent && (this._parent._ts_children = ++iid);\n this._ts_pin = ++iid;\n this.touch();\n return this;\n };\n Node2.prototype.hide = function() {\n this.visible(false);\n return this;\n };\n Node2.prototype.show = function() {\n this.visible(true);\n return this;\n };\n Node2.prototype.parent = function() {\n return this._parent;\n };\n Node2.prototype.next = function(visible) {\n var next = this._next;\n while (next && visible && !next._visible) {\n next = next._next;\n }\n return next;\n };\n Node2.prototype.prev = function(visible) {\n var prev = this._prev;\n while (prev && visible && !prev._visible) {\n prev = prev._prev;\n }\n return prev;\n };\n Node2.prototype.first = function(visible) {\n var next = this._first;\n while (next && visible && !next._visible) {\n next = next._next;\n }\n return next;\n };\n Node2.prototype.last = function(visible) {\n var prev = this._last;\n while (prev && visible && !prev._visible) {\n prev = prev._prev;\n }\n return prev;\n };\n Node2.prototype.visit = function(visitor, payload) {\n var reverse = visitor.reverse;\n var visible = visitor.visible;\n if (visitor.start && visitor.start(this, payload)) {\n return;\n }\n var child;\n var next = reverse ? this.last(visible) : this.first(visible);\n while (child = next) {\n next = reverse ? child.prev(visible) : child.next(visible);\n if (child.visit(visitor, payload)) {\n return true;\n }\n }\n return visitor.end && visitor.end(this, payload);\n };\n Node2.prototype.append = function(child, more) {\n if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) {\n Node2.append(this, child[i]);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n Node2.append(this, arguments[i]);\n }\n } else if (typeof child !== \"undefined\")\n Node2.append(this, child);\n return this;\n };\n Node2.prototype.prepend = function(child, more) {\n if (Array.isArray(child)) {\n for (var i = child.length - 1; i >= 0; i--) {\n Node2.prepend(this, child[i]);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = arguments.length - 1; i >= 0; i--) {\n Node2.prepend(this, arguments[i]);\n }\n } else if (typeof child !== \"undefined\")\n Node2.prepend(this, child);\n return this;\n };\n Node2.prototype.appendTo = function(parent) {\n Node2.append(parent, this);\n return this;\n };\n Node2.prototype.prependTo = function(parent) {\n Node2.prepend(parent, this);\n return this;\n };\n Node2.prototype.insertNext = function(sibling, more) {\n if (Array.isArray(sibling)) {\n for (var i = 0; i < sibling.length; i++) {\n Node2.insertAfter(sibling[i], this);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n Node2.insertAfter(arguments[i], this);\n }\n } else if (typeof sibling !== \"undefined\") {\n Node2.insertAfter(sibling, this);\n }\n return this;\n };\n Node2.prototype.insertPrev = function(sibling, more) {\n if (Array.isArray(sibling)) {\n for (var i = sibling.length - 1; i >= 0; i--) {\n Node2.insertBefore(sibling[i], this);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = arguments.length - 1; i >= 0; i--) {\n Node2.insertBefore(arguments[i], this);\n }\n } else if (typeof sibling !== \"undefined\") {\n Node2.insertBefore(sibling, this);\n }\n return this;\n };\n Node2.prototype.insertAfter = function(prev) {\n Node2.insertAfter(this, prev);\n return this;\n };\n Node2.prototype.insertBefore = function(next) {\n Node2.insertBefore(this, next);\n return this;\n };\n Node2.append = function(parent, child) {\n assertType(child);\n assertType(parent);\n child.remove();\n if (parent._last) {\n parent._last._next = child;\n child._prev = parent._last;\n }\n child._parent = parent;\n parent._last = child;\n if (!parent._first) {\n parent._first = child;\n }\n child._parent._flag(child, true);\n child._ts_parent = ++iid;\n parent._ts_children = ++iid;\n parent.touch();\n };\n Node2.prepend = function(parent, child) {\n assertType(child);\n assertType(parent);\n child.remove();\n if (parent._first) {\n parent._first._prev = child;\n child._next = parent._first;\n }\n child._parent = parent;\n parent._first = child;\n if (!parent._last) {\n parent._last = child;\n }\n child._parent._flag(child, true);\n child._ts_parent = ++iid;\n parent._ts_children = ++iid;\n parent.touch();\n };\n Node2.insertBefore = function(self, next) {\n assertType(self);\n assertType(next);\n self.remove();\n var parent = next._parent;\n var prev = next._prev;\n if (!parent) {\n return;\n }\n next._prev = self;\n prev && (prev._next = self) || parent && (parent._first = self);\n self._parent = parent;\n self._prev = prev;\n self._next = next;\n self._parent._flag(self, true);\n self._ts_parent = ++iid;\n self.touch();\n };\n Node2.insertAfter = function(self, prev) {\n assertType(self);\n assertType(prev);\n self.remove();\n var parent = prev._parent;\n var next = prev._next;\n if (!parent) {\n return;\n }\n prev._next = self;\n next && (next._prev = self) || parent && (parent._last = self);\n self._parent = parent;\n self._prev = prev;\n self._next = next;\n self._parent._flag(self, true);\n self._ts_parent = ++iid;\n self.touch();\n };\n Node2.prototype.remove = function(child, more) {\n if (typeof child !== \"undefined\") {\n if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) {\n assertType(child[i]).remove();\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n assertType(arguments[i]).remove();\n }\n } else {\n assertType(child).remove();\n }\n return this;\n }\n if (this._prev) {\n this._prev._next = this._next;\n }\n if (this._next) {\n this._next._prev = this._prev;\n }\n if (this._parent) {\n if (this._parent._first === this) {\n this._parent._first = this._next;\n }\n if (this._parent._last === this) {\n this._parent._last = this._prev;\n }\n this._parent._flag(this, false);\n this._parent._ts_children = ++iid;\n this._parent.touch();\n }\n this._prev = this._next = this._parent = null;\n this._ts_parent = ++iid;\n return this;\n };\n Node2.prototype.empty = function() {\n var child = null;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child._prev = child._next = child._parent = null;\n this._flag(child, false);\n }\n this._first = this._last = null;\n this._ts_children = ++iid;\n this.touch();\n return this;\n };\n Node2.prototype.touch = function() {\n this._ts_touch = ++iid;\n this._parent && this._parent.touch();\n return this;\n };\n Node2.prototype._flag = function(key, value) {\n if (typeof value === \"undefined\") {\n return this._flags !== null && this._flags[key] || 0;\n }\n if (typeof key === \"string\") {\n if (value) {\n this._flags = this._flags || {};\n if (!this._flags[key] && this._parent) {\n this._parent._flag(key, true);\n }\n this._flags[key] = (this._flags[key] || 0) + 1;\n } else if (this._flags && this._flags[key] > 0) {\n if (this._flags[key] == 1 && this._parent) {\n this._parent._flag(key, false);\n }\n this._flags[key] = this._flags[key] - 1;\n }\n }\n if (typeof key === \"object\") {\n if (key._flags) {\n for (var type in key._flags) {\n if (key._flags[type] > 0) {\n this._flag(type, value);\n }\n }\n }\n }\n return this;\n };\n Node2.prototype.hitTest = function(hit) {\n var width = this._pin._width;\n var height = this._pin._height;\n return hit.x >= 0 && hit.x <= width && hit.y >= 0 && hit.y <= height;\n };\n Node2.prototype.prerender = function() {\n if (!this._visible) {\n return;\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child.prerender();\n }\n };\n Node2.prototype.render = function(context) {\n if (!this._visible) {\n return;\n }\n stats.node++;\n var m = this.matrix();\n context.setTransform(m.a, m.b, m.c, m.d, m.e, m.f);\n this._alpha = this._pin._alpha * (this._parent ? this._parent._alpha : 1);\n var alpha = this._pin._textureAlpha * this._alpha;\n if (context.globalAlpha != alpha) {\n context.globalAlpha = alpha;\n }\n if (this._textures) {\n for (var i = 0, n = this._textures.length; i < n; i++) {\n this._textures[i].draw(context);\n }\n }\n if (context.globalAlpha != this._alpha) {\n context.globalAlpha = this._alpha;\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child.render(context);\n }\n };\n Node2.prototype._tick = function(elapsed, now, last) {\n if (!this._visible) {\n return;\n }\n if (elapsed > this.MAX_ELAPSE) {\n elapsed = this.MAX_ELAPSE;\n }\n var ticked = false;\n if (this._tickBefore !== null) {\n for (var i = 0; i < this._tickBefore.length; i++) {\n stats.tick++;\n var tickFn = this._tickBefore[i];\n ticked = tickFn.call(this, elapsed, now, last) === true || ticked;\n }\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n if (child._flag(\"_tick\")) {\n ticked = child._tick(elapsed, now, last) === true ? true : ticked;\n }\n }\n if (this._tickAfter !== null) {\n for (var i = 0; i < this._tickAfter.length; i++) {\n stats.tick++;\n var tickFn = this._tickAfter[i];\n ticked = tickFn.call(this, elapsed, now, last) === true || ticked;\n }\n }\n return ticked;\n };\n Node2.prototype.tick = function(callback, before) {\n var _a, _b;\n if (before === void 0) {\n before = false;\n }\n if (typeof callback !== \"function\") {\n return;\n }\n if (before) {\n if (this._tickBefore === null) {\n this._tickBefore = [];\n }\n this._tickBefore.push(callback);\n } else {\n if (this._tickAfter === null) {\n this._tickAfter = [];\n }\n this._tickAfter.push(callback);\n }\n var hasTickListener = ((_a = this._tickAfter) === null || _a === void 0 ? void 0 : _a.length) > 0 || ((_b = this._tickBefore) === null || _b === void 0 ? void 0 : _b.length) > 0;\n this._flag(\"_tick\", hasTickListener);\n };\n Node2.prototype.untick = function(callback) {\n if (typeof callback !== \"function\") {\n return;\n }\n var i;\n if (this._tickBefore !== null && (i = this._tickBefore.indexOf(callback)) >= 0) {\n this._tickBefore.splice(i, 1);\n }\n if (this._tickAfter !== null && (i = this._tickAfter.indexOf(callback)) >= 0) {\n this._tickAfter.splice(i, 1);\n }\n };\n Node2.prototype.timeout = function(callback, time) {\n this.setTimeout(callback, time);\n };\n Node2.prototype.setTimeout = function(callback, time) {\n function timer(t) {\n if ((time -= t) < 0) {\n this.untick(timer);\n callback.call(this);\n } else {\n return true;\n }\n }\n this.tick(timer);\n return timer;\n };\n Node2.prototype.clearTimeout = function(timer) {\n this.untick(timer);\n };\n Node2.prototype.on = function(type, listener) {\n if (!type || !type.length || typeof listener !== \"function\") {\n return this;\n }\n if (typeof type !== \"string\" && typeof type.join === \"function\") {\n for (var i = 0; i < type.length; i++) {\n this.on(type[i], listener);\n }\n } else if (typeof type === \"string\" && type.indexOf(\" \") > -1) {\n type = type.match(/\\S+/g);\n for (var i = 0; i < type.length; i++) {\n this._on(type[i], listener);\n }\n } else if (typeof type === \"string\") {\n this._on(type, listener);\n } else\n ;\n return this;\n };\n Node2.prototype._on = function(type, listener) {\n if (typeof type !== \"string\" && typeof listener !== \"function\") {\n return;\n }\n this._listeners[type] = this._listeners[type] || [];\n this._listeners[type].push(listener);\n this._flag(type, true);\n };\n Node2.prototype.off = function(type, listener) {\n if (!type || !type.length || typeof listener !== \"function\") {\n return this;\n }\n if (typeof type !== \"string\" && typeof type.join === \"function\") {\n for (var i = 0; i < type.length; i++) {\n this.off(type[i], listener);\n }\n } else if (typeof type === \"string\" && type.indexOf(\" \") > -1) {\n type = type.match(/\\S+/g);\n for (var i = 0; i < type.length; i++) {\n this._off(type[i], listener);\n }\n } else if (typeof type === \"string\") {\n this._off(type, listener);\n } else\n ;\n return this;\n };\n Node2.prototype._off = function(type, listener) {\n if (typeof type !== \"string\" && typeof listener !== \"function\") {\n return;\n }\n var listeners = this._listeners[type];\n if (!listeners || !listeners.length) {\n return;\n }\n var index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n this._flag(type, false);\n }\n };\n Node2.prototype.listeners = function(type) {\n return this._listeners[type];\n };\n Node2.prototype.publish = function(name, args) {\n var 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].apply(this, args);\n }\n return listeners.length;\n };\n Node2.prototype.trigger = function(name, args) {\n this.publish(name, args);\n return this;\n };\n Node2.prototype.size = function(w, h) {\n this.pin(\"width\", w);\n this.pin(\"height\", h);\n return this;\n };\n Node2.prototype.width = function(w) {\n if (typeof w === \"undefined\") {\n return this.pin(\"width\");\n }\n this.pin(\"width\", w);\n return this;\n };\n Node2.prototype.height = function(h) {\n if (typeof h === \"undefined\") {\n return this.pin(\"height\");\n }\n this.pin(\"height\", h);\n return this;\n };\n Node2.prototype.offset = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n }\n this.pin(\"offsetX\", a);\n this.pin(\"offsetY\", b);\n return this;\n };\n Node2.prototype.rotate = function(a) {\n this.pin(\"rotation\", a);\n return this;\n };\n Node2.prototype.skew = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\")\n b = a;\n this.pin(\"skewX\", a);\n this.pin(\"skewY\", b);\n return this;\n };\n Node2.prototype.scale = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\")\n b = a;\n this.pin(\"scaleX\", a);\n this.pin(\"scaleY\", b);\n return this;\n };\n Node2.prototype.alpha = function(a, ta) {\n this.pin(\"alpha\", a);\n if (typeof ta !== \"undefined\") {\n this.pin(\"textureAlpha\", ta);\n }\n return this;\n };\n Node2.prototype.tween = function(a, b, c) {\n var options;\n if (typeof a === \"object\" && a !== null) {\n options = a;\n } else {\n options = {};\n if (typeof a === \"number\") {\n options.duration = a;\n if (typeof b === \"number\") {\n options.delay = b;\n if (typeof c === \"boolean\") {\n options.append = c;\n }\n } else if (typeof b === \"boolean\") {\n options.append = b;\n }\n } else if (typeof a === \"boolean\") {\n options.append = a;\n }\n }\n if (!this._transitionTickInitied) {\n this.tick(this._transitionTick, true);\n this._transitionTickInitied = true;\n }\n this.touch();\n if (!options.append) {\n this._transitions.length = 0;\n }\n var transition = new Transition(this, options);\n this._transitions.push(transition);\n return transition;\n };\n Node2.prototype.row = function(align) {\n this.align(\"row\", align);\n return this;\n };\n Node2.prototype.column = function(align) {\n this.align(\"column\", align);\n return this;\n };\n Node2.prototype.align = function(type, align) {\n var _this = this;\n this._padding = this._padding;\n this._spacing = this._spacing;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n if (_this._mo_seq == _this._ts_touch) {\n return;\n }\n _this._mo_seq = _this._ts_touch;\n var alignChildren = _this._mo_seqAlign != _this._ts_children;\n _this._mo_seqAlign = _this._ts_children;\n var width = 0;\n var height = 0;\n var child;\n var next = _this.first(true);\n var first = true;\n while (child = next) {\n next = child.next(true);\n child.matrix(true);\n var w = child.pin(\"boxWidth\");\n var h = child.pin(\"boxHeight\");\n if (type == \"column\") {\n !first && (height += _this._spacing);\n child.pin(\"offsetY\") != height && child.pin(\"offsetY\", height);\n width = Math.max(width, w);\n height = height + h;\n alignChildren && child.pin(\"alignX\", align);\n } else if (type == \"row\") {\n !first && (width += _this._spacing);\n child.pin(\"offsetX\") != width && child.pin(\"offsetX\", width);\n width = width + w;\n height = Math.max(height, h);\n alignChildren && child.pin(\"alignY\", align);\n }\n first = false;\n }\n width += 2 * _this._padding;\n height += 2 * _this._padding;\n _this.pin(\"width\") != width && _this.pin(\"width\", width);\n _this.pin(\"height\") != height && _this.pin(\"height\", height);\n });\n return this;\n };\n Node2.prototype.box = function() {\n return this.minimize();\n };\n Node2.prototype.layer = function() {\n return this.maximize();\n };\n Node2.prototype.minimize = function() {\n var _this = this;\n this._padding = this._padding;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n if (_this._mo_box == _this._ts_touch) {\n return;\n }\n _this._mo_box = _this._ts_touch;\n var width = 0;\n var height = 0;\n var child;\n var next = _this.first(true);\n while (child = next) {\n next = child.next(true);\n child.matrix(true);\n var w = child.pin(\"boxWidth\");\n var h = child.pin(\"boxHeight\");\n width = Math.max(width, w);\n height = Math.max(height, h);\n }\n width += 2 * _this._padding;\n height += 2 * _this._padding;\n _this.pin(\"width\") != width && _this.pin(\"width\", width);\n _this.pin(\"height\") != height && _this.pin(\"height\", height);\n });\n return this;\n };\n Node2.prototype.maximize = function() {\n var _this = this;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n var parent = _this.parent();\n if (parent) {\n var width = parent.pin(\"width\");\n if (_this.pin(\"width\") != width) {\n _this.pin(\"width\", width);\n }\n var height = parent.pin(\"height\");\n if (_this.pin(\"height\") != height) {\n _this.pin(\"height\", height);\n }\n }\n }, true);\n return this;\n };\n Node2.prototype.padding = function(pad) {\n this._padding = pad;\n return this;\n };\n Node2.prototype.spacing = function(space) {\n this._spacing = space;\n return this;\n };\n return Node2;\n }()\n);\nvar __extends$4 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction sprite(frame) {\n var sprite2 = new Sprite();\n frame && sprite2.texture(frame);\n return sprite2;\n}\nvar Sprite = (\n /** @class */\n function(_super) {\n __extends$4(Sprite2, _super);\n function Sprite2() {\n var _this = _super.call(this) || this;\n _this._tiled = false;\n _this._stretched = false;\n _this.prerenderContext = {};\n _this.label(\"Sprite\");\n _this._textures = [];\n _this._image = null;\n return _this;\n }\n Sprite2.prototype.texture = function(frame) {\n this._image = texture(frame).one();\n if (this._image) {\n this.pin(\"width\", this._image.getWidth());\n this.pin(\"height\", this._image.getHeight());\n if (this._tiled) {\n this._textures[0] = new ResizableTexture(this._image, \"tile\");\n } else if (this._stretched) {\n this._textures[0] = new ResizableTexture(this._image, \"stretch\");\n } else {\n this._textures[0] = new PipeTexture(this._image);\n }\n this._textures.length = 1;\n } else {\n this.pin(\"width\", 0);\n this.pin(\"height\", 0);\n this._textures.length = 0;\n }\n return this;\n };\n Sprite2.prototype.image = function(frame) {\n return this.texture(frame);\n };\n Sprite2.prototype.tile = function(inner) {\n this._tiled = true;\n var texture2 = new ResizableTexture(this._image, \"tile\");\n this._textures[0] = texture2;\n return this;\n };\n Sprite2.prototype.stretch = function(inner) {\n this._stretched = true;\n var texture2 = new ResizableTexture(this._image, \"stretch\");\n this._textures[0] = texture2;\n return this;\n };\n Sprite2.prototype.prerender = function() {\n if (!this._visible) {\n return;\n }\n if (this._image) {\n var pixelRatio = this.getPixelRatio();\n this.prerenderContext.pixelRatio = pixelRatio;\n var updated = this._image.prerender(this.prerenderContext);\n if (updated === true) {\n var w = this._image.getWidth();\n var h = this._image.getHeight();\n this.size(w, h);\n }\n }\n _super.prototype.prerender.call(this);\n };\n Sprite2.prototype.render = function(context) {\n var texture2 = this._textures[0];\n if (texture2 === null || texture2 === void 0 ? void 0 : texture2[\"_resizeMode\"]) {\n texture2.dw = this.pin(\"width\");\n texture2.dh = this.pin(\"height\");\n }\n _super.prototype.render.call(this, context);\n };\n return Sprite2;\n }(Node)\n);\nvar image = sprite;\nvar Image$1 = Sprite;\nvar __extends$3 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar CanvasTexture = (\n /** @class */\n function(_super) {\n __extends$3(CanvasTexture2, _super);\n function CanvasTexture2() {\n var _this = _super.call(this, document.createElement(\"canvas\")) || this;\n _this._lastPixelRatio = 0;\n return _this;\n }\n CanvasTexture2.prototype.setSize = function(textureWidth, textureHeight, pixelRatio) {\n if (pixelRatio === void 0) {\n pixelRatio = 1;\n }\n this._source.width = textureWidth * pixelRatio;\n this._source.height = textureHeight * pixelRatio;\n this._pixelRatio = pixelRatio;\n };\n CanvasTexture2.prototype.getContext = function(type, attributes) {\n if (type === void 0) {\n type = \"2d\";\n }\n return this._source.getContext(type, attributes);\n };\n CanvasTexture2.prototype.getOptimalPixelRatio = function() {\n return Math.ceil(this._lastPixelRatio);\n };\n CanvasTexture2.prototype.setMemoizer = function(memoizer) {\n this._memoizer = memoizer;\n };\n CanvasTexture2.prototype.setDrawer = function(drawer) {\n this._drawer = drawer;\n };\n CanvasTexture2.prototype.prerender = function(context) {\n var newPixelRatio = context.pixelRatio;\n var lastPixelRatio = this._lastPixelRatio;\n var pixelRationChange = lastPixelRatio / newPixelRatio;\n var pixelRatioChanged = lastPixelRatio === 0 || pixelRationChange > 1.25 || pixelRationChange < 0.8;\n if (pixelRatioChanged) {\n this._lastPixelRatio = newPixelRatio;\n }\n var newMemoKey = this._memoizer ? this._memoizer.call(this) : null;\n var memoKeyChanged = this._lastMemoKey !== newMemoKey;\n if (pixelRatioChanged || memoKeyChanged) {\n this._lastMemoKey = newMemoKey;\n this._lastPixelRatio = newPixelRatio;\n if (typeof this._drawer === \"function\") {\n this._drawer.call(this);\n }\n return true;\n }\n };\n CanvasTexture2.prototype.size = function(width, height, pixelRatio) {\n this.setSize(width, height, pixelRatio);\n return this;\n };\n CanvasTexture2.prototype.context = function(type, attributes) {\n if (type === void 0) {\n type = \"2d\";\n }\n return this.getContext(type, attributes);\n };\n CanvasTexture2.prototype.canvas = function(legacyTextureDrawer) {\n if (typeof legacyTextureDrawer === \"function\") {\n legacyTextureDrawer.call(this, this.getContext());\n } else if (typeof legacyTextureDrawer === \"undefined\") {\n if (typeof this._drawer === \"function\") {\n this._drawer.call(this);\n }\n }\n return this;\n };\n return CanvasTexture2;\n }(ImageTexture)\n);\nfunction canvas(type, attributes, legacyTextureDrawer) {\n if (typeof type === \"function\") {\n var texture_1 = new CanvasTexture();\n legacyTextureDrawer = type;\n texture_1.setDrawer(function() {\n legacyTextureDrawer.call(texture_1, texture_1.getContext());\n });\n return texture_1;\n } else if (typeof attributes === \"function\") {\n var texture_2 = new CanvasTexture();\n legacyTextureDrawer = attributes;\n texture_2.setDrawer(function() {\n legacyTextureDrawer.call(texture_2, texture_2.getContext(type));\n });\n return texture_2;\n } else if (typeof legacyTextureDrawer === \"function\") {\n var texture_3 = new CanvasTexture();\n texture_3.setDrawer(function() {\n legacyTextureDrawer.call(texture_3, texture_3.getContext(type, attributes));\n });\n return texture_3;\n } else {\n var texture2 = new CanvasTexture();\n return texture2;\n }\n}\nfunction memoizeDraw(legacySpriteDrawer, legacySpriteMemoizer) {\n if (legacySpriteMemoizer === void 0) {\n legacySpriteMemoizer = function() {\n return null;\n };\n }\n var sprite2 = new Sprite();\n var texture2 = new CanvasTexture();\n sprite2.texture(texture2);\n texture2.setDrawer(function() {\n legacySpriteDrawer(2.5 * texture2._lastPixelRatio, texture2, sprite2);\n });\n texture2.setMemoizer(legacySpriteMemoizer);\n return sprite2;\n}\nvar POINTER_CLICK = \"click\";\nvar POINTER_START = \"touchstart mousedown\";\nvar POINTER_MOVE = \"touchmove mousemove\";\nvar POINTER_END = \"touchend mouseup\";\nvar POINTER_CANCEL = \"touchcancel mousecancel\";\nvar EventPoint = (\n /** @class */\n function() {\n function EventPoint2() {\n }\n EventPoint2.prototype.clone = function(obj) {\n if (obj) {\n obj.x = this.x;\n obj.y = this.y;\n } else {\n obj = {\n x: this.x,\n y: this.y\n };\n }\n return obj;\n };\n EventPoint2.prototype.toString = function() {\n return (this.x | 0) + \"x\" + (this.y | 0);\n };\n return EventPoint2;\n }()\n);\nvar PointerSyntheticEvent = (\n /** @class */\n function() {\n function PointerSyntheticEvent2() {\n this.abs = new EventPoint();\n }\n PointerSyntheticEvent2.prototype.clone = function(obj) {\n if (obj) {\n obj.x = this.x;\n obj.y = this.y;\n } else {\n obj = {\n x: this.x,\n y: this.y\n };\n }\n return obj;\n };\n PointerSyntheticEvent2.prototype.toString = function() {\n return this.type + \": \" + (this.x | 0) + \"x\" + (this.y | 0);\n };\n return PointerSyntheticEvent2;\n }()\n);\nvar VisitPayload = (\n /** @class */\n function() {\n function VisitPayload2() {\n this.type = \"\";\n this.x = 0;\n this.y = 0;\n this.timeStamp = -1;\n this.event = null;\n this.root = null;\n this.collected = null;\n }\n VisitPayload2.prototype.toString = function() {\n return this.type + \": \" + (this.x | 0) + \"x\" + (this.y | 0);\n };\n return VisitPayload2;\n }()\n);\nvar syntheticEvent = new PointerSyntheticEvent();\nvar PAYLOAD = new VisitPayload();\nvar Pointer = (\n /** @class */\n function() {\n function Pointer2() {\n var _this = this;\n this.ratio = 1;\n this.clickList = [];\n this.cancelList = [];\n this.handleStart = function(event) {\n event.preventDefault();\n _this.localPoint(event);\n _this.dispatchEvent(event.type, event);\n _this.findTargets(\"click\", _this.clickList);\n _this.findTargets(\"mousecancel\", _this.cancelList);\n };\n this.handleMove = function(event) {\n event.preventDefault();\n _this.localPoint(event);\n _this.dispatchEvent(event.type, event);\n };\n this.handleEnd = function(event) {\n event.preventDefault();\n _this.dispatchEvent(event.type, event);\n if (_this.clickList.length) {\n _this.dispatchEvent(\"click\", event, _this.clickList);\n }\n _this.cancelList.length = 0;\n };\n this.handleCancel = function(event) {\n if (_this.cancelList.length) {\n _this.dispatchEvent(\"mousecancel\", event, _this.cancelList);\n }\n _this.clickList.length = 0;\n };\n this.visitStart = function(node, payload) {\n return !node._flag(payload.type);\n };\n this.visitEnd = function(node, payload) {\n syntheticEvent.raw = payload.event;\n syntheticEvent.type = payload.type;\n syntheticEvent.timeStamp = payload.timeStamp;\n syntheticEvent.abs.x = payload.x;\n syntheticEvent.abs.y = payload.y;\n var listeners = node.listeners(payload.type);\n if (!listeners) {\n return;\n }\n node.matrix().inverse().map(payload, syntheticEvent);\n var isEventTarget = node === payload.root || node.attr(\"spy\") || node.hitTest(syntheticEvent);\n if (!isEventTarget) {\n return;\n }\n if (payload.collected) {\n payload.collected.push(node);\n }\n if (payload.event) {\n var cancel = false;\n for (var l = 0; l < listeners.length; l++) {\n cancel = listeners[l].call(node, syntheticEvent) ? true : cancel;\n }\n return cancel;\n }\n };\n }\n Pointer2.prototype.mount = function(stage, elem) {\n var _this = this;\n this.stage = stage;\n this.elem = elem;\n this.ratio = stage.viewport().ratio || 1;\n stage.on(\"viewport\", function(viewport) {\n var _a;\n _this.ratio = (_a = viewport.ratio) !== null && _a !== void 0 ? _a : _this.ratio;\n });\n elem.addEventListener(\"touchstart\", this.handleStart);\n elem.addEventListener(\"touchend\", this.handleEnd);\n elem.addEventListener(\"touchmove\", this.handleMove);\n elem.addEventListener(\"touchcancel\", this.handleCancel);\n elem.addEventListener(\"mousedown\", this.handleStart);\n elem.addEventListener(\"mouseup\", this.handleEnd);\n elem.addEventListener(\"mousemove\", this.handleMove);\n document.addEventListener(\"mouseup\", this.handleCancel);\n window.addEventListener(\"blur\", this.handleCancel);\n return this;\n };\n Pointer2.prototype.unmount = function() {\n var elem = this.elem;\n elem.removeEventListener(\"touchstart\", this.handleStart);\n elem.removeEventListener(\"touchend\", this.handleEnd);\n elem.removeEventListener(\"touchmove\", this.handleMove);\n elem.removeEventListener(\"touchcancel\", this.handleCancel);\n elem.removeEventListener(\"mousedown\", this.handleStart);\n elem.removeEventListener(\"mouseup\", this.handleEnd);\n elem.removeEventListener(\"mousemove\", this.handleMove);\n document.removeEventListener(\"mouseup\", this.handleCancel);\n window.removeEventListener(\"blur\", this.handleCancel);\n return this;\n };\n Pointer2.prototype.localPoint = function(event) {\n var _a;\n var elem = this.elem;\n var x;\n var y;\n if ((_a = event.touches) === null || _a === void 0 ? void 0 : _a.length) {\n x = event.touches[0].clientX;\n y = event.touches[0].clientY;\n } else {\n x = event.clientX;\n y = event.clientY;\n }\n var rect = elem.getBoundingClientRect();\n x -= rect.left;\n y -= rect.top;\n x -= elem.clientLeft | 0;\n y -= elem.clientTop | 0;\n PAYLOAD.x = x * this.ratio;\n PAYLOAD.y = y * this.ratio;\n };\n Pointer2.prototype.findTargets = function(type, result) {\n var payload = PAYLOAD;\n payload.type = type;\n payload.root = this.stage;\n payload.event = null;\n payload.collected = result;\n payload.collected.length = 0;\n this.stage.visit({\n reverse: true,\n visible: true,\n start: this.visitStart,\n end: this.visitEnd\n }, payload);\n };\n Pointer2.prototype.dispatchEvent = function(type, event, targets) {\n var payload = PAYLOAD;\n payload.type = type;\n payload.root = this.stage;\n payload.event = event;\n payload.timeStamp = Date.now();\n payload.collected = null;\n if (targets) {\n while (targets.length) {\n var node = targets.shift();\n if (this.visitEnd(node, payload)) {\n break;\n }\n }\n targets.length = 0;\n } else {\n this.stage.visit({\n reverse: true,\n visible: true,\n start: this.visitStart,\n end: this.visitEnd\n }, payload);\n }\n };\n return Pointer2;\n }()\n);\nvar Mouse = {\n CLICK: \"click\",\n START: \"touchstart mousedown\",\n MOVE: \"touchmove mousemove\",\n END: \"touchend mouseup\",\n CANCEL: \"touchcancel mousecancel\"\n};\nvar __extends$2 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __assign = function() {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar ROOTS = [];\nfunction pause() {\n for (var i = ROOTS.length - 1; i >= 0; i--) {\n ROOTS[i].pause();\n }\n}\nfunction resume() {\n for (var i = ROOTS.length - 1; i >= 0; i--) {\n ROOTS[i].resume();\n }\n}\nfunction mount(configs) {\n if (configs === void 0) {\n configs = {};\n }\n var root = new Root();\n root.mount(configs);\n root.pointer = new Pointer().mount(root, root.dom);\n return root;\n}\nvar Root = (\n /** @class */\n function(_super) {\n __extends$2(Root2, _super);\n function Root2() {\n var _this = _super.call(this) || this;\n _this.canvas = null;\n _this.dom = null;\n _this.context = null;\n _this.pixelWidth = -1;\n _this.pixelHeight = -1;\n _this.pixelRatio = 1;\n _this.drawingWidth = 0;\n _this.drawingHeight = 0;\n _this.mounted = false;\n _this.paused = false;\n _this.sleep = false;\n _this.mount = function(configs) {\n if (configs === void 0) {\n configs = {};\n }\n if (typeof configs.canvas === \"string\") {\n _this.canvas = document.getElementById(configs.canvas);\n if (!_this.canvas) {\n console.error(\"Canvas element not found: \", configs.canvas);\n }\n } else if (configs.canvas instanceof HTMLCanvasElement) {\n _this.canvas = configs.canvas;\n } else if (configs.canvas) {\n console.error(\"Unknown value for canvas:\", configs.canvas);\n }\n if (!_this.canvas) {\n _this.canvas = document.getElementById(\"cutjs\") || document.getElementById(\"stage\");\n }\n if (!_this.canvas) {\n _this.canvas = document.createElement(\"canvas\");\n Object.assign(_this.canvas.style, {\n position: \"absolute\",\n display: \"block\",\n top: \"0\",\n left: \"0\",\n bottom: \"0\",\n right: \"0\",\n width: \"100%\",\n height: \"100%\"\n });\n var body = document.body;\n body.insertBefore(_this.canvas, body.firstChild);\n }\n _this.dom = _this.canvas;\n _this.context = _this.canvas.getContext(\"2d\");\n var devicePixelRatio = window.devicePixelRatio || 1;\n var backingStorePixelRatio = (\n // @ts-ignore\n _this.context.webkitBackingStorePixelRatio || // @ts-ignore\n _this.context.mozBackingStorePixelRatio || // @ts-ignore\n _this.context.msBackingStorePixelRatio || // @ts-ignore\n _this.context.oBackingStorePixelRatio || // @ts-ignore\n _this.context.backingStorePixelRatio || 1\n );\n _this.devicePixelRatio = devicePixelRatio;\n _this.backingStoreRatio = backingStorePixelRatio;\n _this.pixelRatio = _this.devicePixelRatio / _this.backingStoreRatio;\n _this.mounted = true;\n ROOTS.push(_this);\n _this.requestFrame();\n };\n _this.frameRequested = false;\n _this.requestFrame = function() {\n if (!_this.frameRequested) {\n _this.frameRequested = true;\n requestAnimationFrame(_this.onFrame);\n }\n };\n _this._lastFrameTime = 0;\n _this._mo_touch = null;\n _this.onFrame = function(now) {\n _this.frameRequested = false;\n if (!_this.mounted || !_this.canvas || !_this.context) {\n return;\n }\n _this.requestFrame();\n var newPixelWidth = _this.canvas.clientWidth;\n var newPixelHeight = _this.canvas.clientHeight;\n if (_this.pixelWidth !== newPixelWidth || _this.pixelHeight !== newPixelHeight) {\n _this.pixelWidth = newPixelWidth;\n _this.pixelHeight = newPixelHeight;\n _this.drawingWidth = newPixelWidth * _this.pixelRatio;\n _this.drawingHeight = newPixelHeight * _this.pixelRatio;\n if (_this.canvas.width !== _this.drawingWidth || _this.canvas.height !== _this.drawingHeight) {\n _this.canvas.width = _this.drawingWidth;\n _this.canvas.height = _this.drawingHeight;\n _this.viewport({\n width: _this.drawingWidth,\n height: _this.drawingHeight,\n ratio: _this.pixelRatio\n });\n }\n }\n var last = _this._lastFrameTime || now;\n var elapsed = now - last;\n if (!_this.mounted || _this.paused || _this.sleep) {\n return;\n }\n _this._lastFrameTime = now;\n _this.prerender();\n var tickRequest = _this._tick(elapsed, now, last);\n if (_this._mo_touch != _this._ts_touch) {\n _this._mo_touch = _this._ts_touch;\n _this.sleep = false;\n if (_this.drawingWidth > 0 && _this.drawingHeight > 0) {\n _this.context.setTransform(1, 0, 0, 1, 0, 0);\n _this.context.clearRect(0, 0, _this.drawingWidth, _this.drawingHeight);\n _this.render(_this.context);\n }\n } else if (tickRequest) {\n _this.sleep = false;\n } else {\n _this.sleep = true;\n }\n stats.fps = elapsed ? 1e3 / elapsed : 0;\n };\n _this.label(\"Root\");\n return _this;\n }\n Root2.prototype.resume = function() {\n if (this.sleep || this.paused) {\n this.requestFrame();\n }\n this.paused = false;\n this.sleep = false;\n this.publish(\"resume\");\n return this;\n };\n Root2.prototype.pause = function() {\n if (!this.paused) {\n this.publish(\"pause\");\n }\n this.paused = true;\n return this;\n };\n Root2.prototype.touch = function() {\n if (this.sleep || this.paused) {\n this.requestFrame();\n }\n this.sleep = false;\n return _super.prototype.touch.call(this);\n };\n Root2.prototype.unmount = function() {\n var _a;\n this.mounted = false;\n var index = ROOTS.indexOf(this);\n if (index >= 0) {\n ROOTS.splice(index, 1);\n }\n (_a = this.pointer) === null || _a === void 0 ? void 0 : _a.unmount();\n return this;\n };\n Root2.prototype.background = function(color) {\n if (this.dom) {\n this.dom.style.backgroundColor = color;\n }\n return this;\n };\n Root2.prototype.viewport = function(width, height, ratio) {\n if (typeof width === \"undefined\") {\n return Object.assign({}, this._viewport);\n }\n if (typeof width === \"object\") {\n var options = width;\n width = options.width;\n height = options.height;\n ratio = options.ratio;\n }\n if (typeof width === \"number\" && typeof height === \"number\") {\n this._viewport = {\n width,\n height,\n ratio: typeof ratio === \"number\" ? ratio : 1\n };\n this.viewbox();\n var data_1 = Object.assign({}, this._viewport);\n this.visit({\n start: function(node) {\n if (!node._flag(\"viewport\")) {\n return true;\n }\n node.publish(\"viewport\", [data_1]);\n }\n });\n }\n return this;\n };\n Root2.prototype.viewbox = function(width, height, mode) {\n if (typeof width === \"number\" && typeof height === \"number\") {\n this._viewbox = {\n width,\n height,\n mode\n };\n } else if (typeof width === \"object\" && width !== null) {\n this._viewbox = __assign({}, width);\n }\n this.rescale();\n return this;\n };\n Root2.prototype.camera = function(matrix) {\n this._camera = matrix;\n this.rescale();\n return this;\n };\n Root2.prototype.rescale = function() {\n var viewbox = this._viewbox;\n var viewport = this._viewport;\n var camera = this._camera;\n if (viewport && viewbox) {\n var viewportWidth = viewport.width;\n var viewportHeight = viewport.height;\n var viewboxMode = isValidFitMode(viewbox.mode) ? viewbox.mode : \"in-pad\";\n var viewboxWidth = viewbox.width;\n var viewboxHeight = viewbox.height;\n this.pin({\n width: viewboxWidth,\n height: viewboxHeight\n });\n this.scaleTo(viewportWidth, viewportHeight, viewboxMode);\n var viewboxX = viewbox.x || 0;\n var viewboxY = viewbox.y || 0;\n var cameraZoom = (camera === null || camera === void 0 ? void 0 : camera.a) || 1;\n var cameraX = (camera === null || camera === void 0 ? void 0 : camera.e) || 0;\n var cameraY = (camera === null || camera === void 0 ? void 0 : camera.f) || 0;\n var scaleX = this.pin(\"scaleX\");\n var scaleY = this.pin(\"scaleY\");\n this.pin(\"scaleX\", scaleX * cameraZoom);\n this.pin(\"scaleY\", scaleY * cameraZoom);\n this.pin(\"offsetX\", cameraX - viewboxX * scaleX * cameraZoom);\n this.pin(\"offsetY\", cameraY - viewboxY * scaleY * cameraZoom);\n } else if (viewport) {\n this.pin({\n width: viewport.width,\n height: viewport.height\n });\n }\n return this;\n };\n return Root2;\n }(Node)\n);\nvar __extends$1 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction anim(frames, fps) {\n var anim2 = new Anim();\n anim2.frames(frames).gotoFrame(0);\n fps && anim2.fps(fps);\n return anim2;\n}\nvar FPS = 15;\nvar Anim = (\n /** @class */\n function(_super) {\n __extends$1(Anim2, _super);\n function Anim2() {\n var _this = _super.call(this) || this;\n _this.label(\"Anim\");\n _this._textures = [];\n _this._fps = FPS;\n _this._ft = 1e3 / _this._fps;\n _this._time = -1;\n _this._repeat = 0;\n _this._index = 0;\n _this._frames = [];\n var lastTime = 0;\n _this.tick(function(t, now, last) {\n if (this._time < 0 || this._frames.length <= 1) {\n return;\n }\n var ignore = lastTime != last;\n lastTime = now;\n if (ignore) {\n return true;\n }\n this._time += t;\n if (this._time < this._ft) {\n return true;\n }\n var n = this._time / this._ft | 0;\n this._time -= n * this._ft;\n this.moveFrame(n);\n if (this._repeat > 0 && (this._repeat -= n) <= 0) {\n this.stop();\n this._callback && this._callback();\n return false;\n }\n return true;\n }, false);\n return _this;\n }\n Anim2.prototype.fps = function(fps) {\n if (typeof fps === \"undefined\") {\n return this._fps;\n }\n this._fps = fps > 0 ? fps : FPS;\n this._ft = 1e3 / this._fps;\n return this;\n };\n Anim2.prototype.setFrames = function(frames) {\n return this.frames(frames);\n };\n Anim2.prototype.frames = function(frames) {\n this._index = 0;\n this._frames = texture(frames).array();\n this.touch();\n return this;\n };\n Anim2.prototype.length = function() {\n return this._frames ? this._frames.length : 0;\n };\n Anim2.prototype.gotoFrame = function(frame, resize) {\n if (resize === void 0) {\n resize = false;\n }\n this._index = math.wrap(frame, this._frames.length) | 0;\n resize = resize || !this._textures[0];\n this._textures[0] = this._frames[this._index];\n if (resize) {\n this.pin(\"width\", this._textures[0].getWidth());\n this.pin(\"height\", this._textures[0].getHeight());\n }\n this.touch();\n return this;\n };\n Anim2.prototype.moveFrame = function(move) {\n return this.gotoFrame(this._index + move);\n };\n Anim2.prototype.repeat = function(repeat, callback) {\n this._repeat = repeat * this._frames.length - 1;\n this._callback = callback;\n this.play();\n return this;\n };\n Anim2.prototype.play = function(frame) {\n if (typeof frame !== \"undefined\") {\n this.gotoFrame(frame);\n this._time = 0;\n } else if (this._time < 0) {\n this._time = 0;\n }\n this.touch();\n return this;\n };\n Anim2.prototype.stop = function(frame) {\n this._time = -1;\n if (typeof frame !== \"undefined\") {\n this.gotoFrame(frame);\n }\n return this;\n };\n return Anim2;\n }(Node)\n);\nvar __extends = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction monotype(chars) {\n return new Monotype().frames(chars);\n}\nvar Monotype = (\n /** @class */\n function(_super) {\n __extends(Monotype2, _super);\n function Monotype2() {\n var _this = _super.call(this) || this;\n _this.label(\"String\");\n _this._textures = [];\n return _this;\n }\n Monotype2.prototype.setFont = function(frames) {\n return this.frames(frames);\n };\n Monotype2.prototype.frames = function(frames) {\n this._textures = [];\n if (typeof frames == \"string\") {\n var selection_1 = texture(frames);\n this._font = function(value) {\n return selection_1.one(value);\n };\n } else if (typeof frames === \"object\") {\n this._font = function(value) {\n return frames[value];\n };\n } else if (typeof frames === \"function\") {\n this._font = frames;\n }\n return this;\n };\n Monotype2.prototype.setValue = function(value) {\n return this.value(value);\n };\n Monotype2.prototype.value = function(value) {\n if (typeof value === \"undefined\") {\n return this._value;\n }\n if (this._value === value) {\n return this;\n }\n this._value = value;\n if (value === null) {\n value = \"\";\n } else if (typeof value !== \"string\" && !Array.isArray(value)) {\n value = value.toString();\n }\n this._spacing = this._spacing || 0;\n var width = 0;\n var height = 0;\n for (var i = 0; i < value.length; i++) {\n var v = value[i];\n var texture_1 = this._textures[i] = this._font(typeof v === \"string\" ? v : v + \"\");\n width += i > 0 ? this._spacing : 0;\n texture_1.setDestinationCoordinate(width, 0);\n width = width + texture_1.getWidth();\n height = Math.max(height, texture_1.getHeight());\n }\n this.pin(\"width\", width);\n this.pin(\"height\", height);\n this._textures.length = value.length;\n return this;\n };\n return Monotype2;\n }(Node)\n);\nvar string = monotype;\nvar Str = Monotype;\nconst Stage = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n Anim,\n Atlas,\n CanvasTexture,\n Image: Image$1,\n ImageTexture,\n Math: math,\n Matrix,\n Monotype,\n Mouse,\n Node,\n POINTER_CANCEL,\n POINTER_CLICK,\n POINTER_END,\n POINTER_MOVE,\n POINTER_START,\n Pin,\n PipeTexture,\n Pointer,\n ResizableTexture,\n Root,\n Sprite,\n Str,\n Texture,\n TextureSelection,\n Transition,\n anim,\n atlas,\n box,\n canvas,\n clamp,\n column,\n create,\n image,\n isValidFitMode,\n layer,\n layout,\n length,\n math,\n maximize,\n memoizeDraw,\n minimize,\n monotype,\n mount,\n pause,\n random,\n resume,\n row,\n sprite,\n string,\n texture,\n wrap\n}, Symbol.toStringTag, { value: \"Module\" }));\nexport {\n Anim,\n Atlas,\n CanvasTexture,\n Image$1 as Image,\n ImageTexture,\n math as Math,\n Matrix,\n Monotype,\n Mouse,\n Node,\n POINTER_CANCEL,\n POINTER_CLICK,\n POINTER_END,\n POINTER_MOVE,\n POINTER_START,\n Pin,\n PipeTexture,\n Pointer,\n ResizableTexture,\n Root,\n Sprite,\n Str,\n Texture,\n TextureSelection,\n Transition,\n anim,\n atlas,\n box,\n canvas,\n clamp,\n column,\n create,\n Stage as default,\n image,\n isValidFitMode,\n layer,\n layout,\n length,\n math,\n maximize,\n memoizeDraw,\n minimize,\n monotype,\n mount,\n pause,\n random,\n resume,\n row,\n sprite,\n string,\n texture,\n wrap\n};\n","import Stage from 'stage-js';\n\nimport type { Vec2Value } from '../src/common/Vec2';\nimport type { World } from \"../src/dynamics/World\";\nimport type { Joint } from \"../src/dynamics/Joint\";\nimport type { Fixture } from \"../src/dynamics/Fixture\";\nimport type { Body } from \"../src/dynamics/Body\";\nimport type { AABBValue } from \"../src/collision/AABB\";\nimport type { Style } from '../src/util/Testbed';\nimport { Testbed } from '../src/util/Testbed';\nimport type { EdgeShape } from \"../src/collision/shape/EdgeShape\";\nimport type { PolygonShape } from \"../src/collision/shape/PolygonShape\";\nimport type { ChainShape } from \"../src/collision/shape/ChainShape\";\nimport type { CircleShape } from \"../src/collision/shape/CircleShape\";\nimport type { PulleyJoint } from \"../src/dynamics/joint/PulleyJoint\";\nimport { MouseJoint } from \"../src/dynamics/joint/MouseJoint\";\n\nconst math_atan2 = Math.atan2;\nconst math_abs = Math.abs;\nconst math_sqrt = Math.sqrt;\nconst math_PI = Math.PI;\nconst math_max = Math.max;\nconst math_min = Math.min;\n\n\nlet mounted: StageTestbed | null = null;\n\n/** @internal */\nfunction memo() {\n const memory: any = [];\n function recall(...rest: any[]) {\n let equal = memory.length === rest.length;\n for (let i = 0; equal && i < rest.length; i++) {\n equal = equal && memory[i] === rest[i];\n memory[i] = rest[i];\n }\n memory.length = rest.length;\n return equal;\n }\n function reset() {\n memory.length = 0;\n // void 0;\n }\n return {\n recall,\n reset,\n };\n}\n\nTestbed.mount = () => {\n if (mounted) {\n return mounted;\n }\n\n mounted = new StageTestbed();\n\n // todo: merge rest of this into StageTestbed\n\n // todo: should we create these elements if not exists?\n const playButton = document.getElementById('testbed-play');\n const statusElement = document.getElementById('testbed-status');\n const infoElement = document.getElementById('testbed-info');\n\n if (playButton) {\n playButton.addEventListener('click', () => {\n mounted.isPaused() ? mounted.resume() : mounted.pause();\n });\n\n mounted._pause = () => {\n playButton.classList.add('pause');\n playButton.classList.remove('play');\n };\n\n mounted._resume = () => {\n playButton.classList.add('play');\n playButton.classList.remove('pause');\n };\n } else {\n console.log(\"Please create a button with id='testbed-play'\");\n }\n\n let lastStatus = '';\n if (statusElement) {\n statusElement.innerText = lastStatus;\n }\n mounted._status = (text: string) => {\n if (lastStatus === text) {\n return;\n }\n lastStatus = text;\n if (statusElement) {\n statusElement.innerText = text;\n }\n };\n\n let lastInfo = '';\n if (infoElement) {\n infoElement.innerText = lastInfo;\n }\n mounted._info = (text: string) => {\n if (lastInfo === text) {\n return;\n }\n lastInfo = text;\n if (infoElement) {\n infoElement.innerText = text;\n }\n };\n\n return mounted;\n};\n\nconst getStyle = function(obj: Body | Fixture | Joint): Style {\n return obj['render'] ?? obj['style'] ?? {};\n};\n\nfunction findBody(world: World, point: Vec2Value) {\n let body: Body | null = null;\n const aabb = {\n lowerBound: point,\n upperBound: point,\n };\n world.queryAABB(aabb, (fixture: Fixture) => {\n if (!fixture.getBody().isDynamic() || !fixture.testPoint(point)) {\n return true;\n }\n body = fixture.getBody();\n return false;\n });\n return body;\n}\n\n/** @internal */\nclass StageTestbed extends Testbed {\n private canvas: HTMLCanvasElement;\n private stage: Stage.Root;\n private paused: boolean = false;\n private lastDrawHash = \"\";\n private newDrawHash = \"\";\n private buffer: ((context: CanvasRenderingContext2D, ratio: number)=> void)[] = [];\n\n start(world: World) {\n const stage = this.stage = Stage.mount();\n const canvas = this.canvas = stage.dom as HTMLCanvasElement;\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const testbed = this;\n this.canvas = canvas;\n\n stage.on(Stage.POINTER_START, () => {\n window.focus();\n // @ts-ignore\n document.activeElement?.blur();\n canvas.focus();\n });\n\n stage.MAX_ELAPSE = 1000 / 30;\n\n stage.on('resume', () => {\n this.paused = false;\n this._resume();\n });\n stage.on('pause', () => {\n this.paused = true;\n this._pause();\n });\n\n const drawingTexture = new Stage.CanvasTexture();\n drawingTexture.draw = (ctx: CanvasRenderingContext2D) => {\n const pixelRatio = 2 * drawingTexture.getOptimalPixelRatio();\n ctx.save();\n ctx.transform(1, 0, 0, this.scaleY, -this.x, -this.y);\n ctx.lineWidth = 3 / pixelRatio;\n ctx.lineCap = 'round';\n for (let drawing = this.buffer.shift(); drawing; drawing = this.buffer.shift()) {\n drawing(ctx, pixelRatio);\n }\n ctx.restore();\n };\n\n const drawingElement = Stage.sprite(drawingTexture);\n stage.append(drawingElement);\n stage.tick(() => {\n this.buffer.length = 0;\n }, true);\n\n\n stage.background(this.background);\n stage.viewbox(this.width, this.height);\n stage.pin('alignX', -0.5);\n stage.pin('alignY', -0.5);\n\n const worldNode = new WorldStageNode(world, this);\n\n // stage.empty();\n stage.prepend(worldNode);\n\n let lastX = 0;\n let lastY = 0;\n stage.tick((dt: number, t: number) => {\n // update camera position\n if (lastX !== this.x || lastY !== this.y) {\n worldNode.offset(-this.x, -this.y);\n lastX = this.x;\n lastY = this.y;\n }\n });\n\n worldNode.tick((dt: number, t: number) => {\n this.step(dt, t);\n\n if (targetBody) {\n this.drawSegment(targetBody.getPosition(), mouseMove, 'rgba(255,255,255,0.2)');\n }\n\n if (this.lastDrawHash !== this.newDrawHash) {\n this.lastDrawHash = this.newDrawHash;\n stage.touch();\n }\n this.newDrawHash = \"\";\n\n return true;\n });\n\n const mouseGround = world.createBody();\n let mouseJoint: MouseJoint | null = null;\n let targetBody: Body | null = null;\n const mouseMove = {x: 0, y: 0};\n\n worldNode.attr('spy', true);\n\n worldNode.on(Stage.POINTER_START, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (targetBody) {\n return;\n }\n\n const body = findBody(world, point);\n if (!body) {\n return;\n }\n\n if (this.mouseForce) {\n targetBody = body;\n\n } else {\n mouseJoint = new MouseJoint({maxForce: 1000}, mouseGround, body, { x: point.x, y: point.y });\n world.createJoint(mouseJoint);\n }\n });\n\n worldNode.on(Stage.POINTER_MOVE, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n mouseJoint.setTarget(point);\n }\n\n mouseMove.x = point.x;\n mouseMove.y = point.y;\n });\n\n worldNode.on(Stage.POINTER_END, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n world.destroyJoint(mouseJoint);\n mouseJoint = null;\n }\n if (targetBody && this.mouseForce) {\n const target = targetBody.getPosition();\n const force = {\n x: (point.x - target.x) * this.mouseForce,\n y: (point.y - target.y) * this.mouseForce,\n };\n targetBody.applyForceToCenter(force, true);\n targetBody = null;\n }\n });\n\n worldNode.on(Stage.POINTER_CANCEL, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n world.destroyJoint(mouseJoint);\n mouseJoint = null;\n }\n if (targetBody) {\n targetBody = null;\n }\n });\n\n const activeKeys = testbed.activeKeys;\n const downKeys: Record = {};\n function updateActiveKeys(keyCode: number, down: boolean) {\n const char = String.fromCharCode(keyCode);\n if (/\\w/.test(char)) {\n activeKeys[char] = down;\n }\n activeKeys.right = downKeys[39] || activeKeys['D'];\n activeKeys.left = downKeys[37] || activeKeys['A'];\n activeKeys.up = downKeys[38] || activeKeys['W'];\n activeKeys.down = downKeys[40] || activeKeys['S'];\n activeKeys.fire = downKeys[32] || downKeys[13] ;\n }\n\n window.addEventListener(\"keydown\", function(e) {\n const keyCode = e.keyCode;\n downKeys[keyCode] = true;\n updateActiveKeys(keyCode, true);\n testbed.keydown && testbed.keydown(keyCode, String.fromCharCode(keyCode));\n });\n window.addEventListener(\"keyup\", function(e) {\n const keyCode = e.keyCode;\n downKeys[keyCode] = false;\n updateActiveKeys(keyCode, false);\n testbed.keyup && testbed.keyup(keyCode, String.fromCharCode(keyCode));\n });\n\n this.resume();\n }\n\n /** @private @internal */\n focus() {\n // @ts-ignore\n document.activeElement && document.activeElement.blur();\n this.canvas.focus();\n }\n\n /** @internal */\n _pause() {\n }\n\n /** @internal */\n _resume() {\n }\n\n private statusText = '';\n private statusMap: Record = {};\n\n status(name: string, value: any): void;\n status(value: object | string): void;\n status(a: any, b?: any) {\n if (typeof b !== 'undefined') {\n const key = a;\n const value = b;\n if (typeof value !== 'function' && typeof value !== 'object') {\n this.statusMap[key] = value;\n }\n } else if (a && typeof a === 'object') {\n // tslint:disable-next-line:no-for-in\n for (const key in a) {\n const value = a[key];\n if (typeof value !== 'function' && typeof value !== 'object') {\n this.statusMap[key] = value;\n }\n }\n } else if (typeof a === 'string') {\n this.statusText = a;\n }\n\n var newline = '\\n';\n var text = this.statusText || '';\n for (var key in this.statusMap) {\n var value = this.statusMap[key];\n if (typeof value === 'function') continue;\n text += (text && newline) + key + ': ' + value;\n }\n\n this._status(text);\n }\n\n info(text: string): void {\n this._info(text);\n }\n\n /** @internal */\n _status(string: string) {\n }\n\n /** @internal */ \n _info(text: string) {\n }\n\n /** @internal */\n isPaused() {\n return this.paused;\n }\n\n /** @internal */\n togglePause() {\n this.paused ? this.resume() : this.pause();\n }\n\n /** @internal */\n pause() {\n this.stage.pause();\n }\n\n /** @internal */\n resume() {\n this.stage.resume();\n this.focus();\n }\n\n drawPoint(p: {x: number, y: number}, r: number, color: string): void {\n this.buffer.push(function(ctx, ratio) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, 5 / ratio, 0, 2 * math_PI);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"point\" + p.x + ',' + p.y + ',' + r + ',' + color;\n }\n\n drawCircle(p: {x: number, y: number}, r: number, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, r, 0, 2 * math_PI);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"circle\" + p.x + ',' + p.y + ',' + r + ',' + color;\n }\n\n drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(a.x, a.y);\n ctx.lineTo(b.x, b.y);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"segment\" + a.x + ',' + a.y + ',' + b.x + ',' + b.y + ',' + color;\n }\n\n drawSegment = this.drawEdge;\n\n drawPolygon(points: Array<{x: number, y: number}>, color: string): void {\n if (!points || !points.length) {\n return;\n }\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(points[0].x, points[0].y);\n for (let i = 1; i < points.length; i++) {\n ctx.lineTo(points[i].x, points[i].y);\n }\n ctx.strokeStyle = color;\n ctx.closePath();\n ctx.stroke();\n });\n this.newDrawHash += \"segment\";\n for (let i = 1; i < points.length; i++) {\n this.newDrawHash += points[i].x + ',' + points[i].y + ',';\n }\n this.newDrawHash += color;\n }\n\n drawAABB(aabb: AABBValue, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(aabb.lowerBound.x, aabb.lowerBound.y);\n ctx.lineTo(aabb.upperBound.x, aabb.lowerBound.y);\n ctx.lineTo(aabb.upperBound.x, aabb.upperBound.y);\n ctx.lineTo(aabb.lowerBound.x, aabb.upperBound.y);\n ctx.strokeStyle = color;\n ctx.closePath();\n ctx.stroke();\n });\n this.newDrawHash += \"aabb\";\n this.newDrawHash += aabb.lowerBound.x + ',' + aabb.lowerBound.y + ',';\n this.newDrawHash += aabb.upperBound.x + ',' + aabb.upperBound.y + ',';\n this.newDrawHash += color;\n }\n\n findOne(query: string): (Body | Joint | Fixture | null) {\n throw new Error(\"Not implemented\");\n }\n\n findAll(query: string): (Body | Joint | Fixture)[] {\n throw new Error(\"Not implemented\");\n }\n}\n\ninterface WorldStageOptions {\n speed: number;\n hz: number;\n scaleY: number;\n lineWidth: number;\n stroke: string | undefined;\n fill: string | undefined;\n}\n\nclass WorldStageNode extends Stage.Node {\n private nodes = new WeakMap();\n\n private options: WorldStageOptions = {\n speed: 1,\n hz: 60,\n scaleY: -1,\n lineWidth: 3,\n stroke: undefined,\n fill: undefined\n };\n\n private world: World;\n private testbed: Testbed;\n\n constructor(world: World, opts: Partial = {}) {\n super();\n this.label('Planck');\n\n this.options = { ...this.options, ...opts };\n\n if (math_abs(this.options.hz) < 1) {\n this.options.hz = 1 / this.options.hz;\n }\n\n this.world = world;\n this.testbed = opts as Testbed;\n\n const timeStep = 1 / this.options.hz;\n let elapsedTime = 0;\n let errored = false;\n this.tick((dt: number) => {\n if (errored) {\n return false;\n }\n try {\n dt = dt * 0.001 * this.options.speed;\n elapsedTime += dt;\n while (elapsedTime > timeStep) {\n world.step(timeStep);\n elapsedTime -= timeStep;\n }\n this.renderWorld();\n return true; \n } catch (error) {\n errored = true;\n console.error(error);\n return false;\n }\n }, true);\n\n world.on('remove-fixture', (obj: Fixture) => {\n this.nodes.get(obj)?.remove();\n });\n\n world.on('remove-joint', (obj: Joint) => {\n this.nodes.get(obj)?.remove();\n });\n }\n\n renderWorld() {\n const world = this.world;\n const options = this.options;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const viewer = this;\n\n for (let b = world.getBodyList(); b; b = b.getNext()) {\n for (let f = b.getFixtureList(); f; f = f.getNext()) {\n\n let node = this.nodes.get(f);\n const fstyle = getStyle(f);\n const bstyle = getStyle(b);\n if (!node) {\n if (fstyle && fstyle.stroke) {\n options.stroke = fstyle.stroke;\n } else if (bstyle && bstyle.stroke) {\n options.stroke = bstyle.stroke;\n } else if (b.isDynamic()) {\n options.stroke = 'rgba(255,255,255,0.9)';\n } else if (b.isKinematic()) {\n options.stroke = 'rgba(255,255,255,0.7)';\n } else if (b.isStatic()) {\n options.stroke = 'rgba(255,255,255,0.5)';\n }\n\n if (fstyle && fstyle.fill) {\n options.fill = fstyle.fill;\n } else if (bstyle && bstyle.fill) {\n options.fill = bstyle.fill;\n } else {\n options.fill = '';\n }\n\n const type = f.getType();\n const shape = f.getShape();\n if (type == 'circle') {\n node = viewer.drawCircle(shape as CircleShape, options);\n }\n if (type == 'edge') {\n node = viewer.drawEdge(shape as EdgeShape, options);\n }\n if (type == 'polygon') {\n node = viewer.drawPolygon(shape as PolygonShape, options);\n }\n if (type == 'chain') {\n node = viewer.drawChain(shape as ChainShape, options);\n }\n\n if (node) {\n node.appendTo(viewer);\n this.nodes.set(f, node);\n }\n }\n\n if (node) {\n const p = b.getPosition();\n const r = b.getAngle();\n // @ts-ignore\n const isChanged = node.__lastX !== p.x || node.__lastY !== p.y || node.__lastR !== r;\n if (isChanged) {\n // @ts-ignore\n node.__lastX = p.x;\n // @ts-ignore\n node.__lastY = p.y;\n // @ts-ignore\n node.__lastR = r;\n node.offset(p.x, options.scaleY * p.y);\n node.rotate(options.scaleY * r);\n }\n }\n\n }\n }\n\n for (let j = world.getJointList(); j; j = j.getNext()) {\n const type = j.getType();\n if (type == 'pulley-joint') {\n this.testbed.drawSegment(j.getAnchorA(), (j as PulleyJoint).getGroundAnchorA(), 'rgba(255,255,255,0.5)');\n this.testbed.drawSegment(j.getAnchorB(), (j as PulleyJoint).getGroundAnchorB(), 'rgba(255,255,255,0.5)');\n this.testbed.drawSegment((j as PulleyJoint).getGroundAnchorB(), (j as PulleyJoint).getGroundAnchorA(), 'rgba(255,255,255,0.5)');\n } else {\n this.testbed.drawSegment(j.getAnchorA(), j.getAnchorB(), 'rgba(255,255,255,0.5)');\n }\n }\n }\n\n drawCircle(shape: CircleShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const r = shape.m_radius;\n const cx = r + lw;\n const cy = r + lw;\n const w = r * 2 + lw * 2;\n const h = r * 2 + lw * 2;\n\n offsetX = shape.m_p.x - cx;\n offsetY = options.scaleY * shape.m_p.y - cy\n\n this.setSize(w, h, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.arc(cx, cy, r, 0, 2 * math_PI);\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n }\n ctx.lineTo(cx, cy);\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? '';\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if (!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawEdge(edge: EdgeShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n let offsetA = 0\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const v1 = edge.m_vertex1;\n const v2 = edge.m_vertex2;\n\n const dx = v2.x - v1.x;\n const dy = v2.y - v1.y;\n\n const length = math_sqrt(dx * dx + dy * dy);\n\n this.setSize(length + 2 * lw, 2 * lw, ratio);\n\n const minX = math_min(v1.x, v2.x);\n const minY = math_min(options.scaleY * v1.y, options.scaleY * v2.y);\n \n offsetX = minX - lw;\n offsetY = minY - lw;\n offsetA = options.scaleY * math_atan2(dy, dx);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n ctx.moveTo(lw, lw);\n ctx.lineTo(lw + length, lw);\n\n ctx.lineCap = 'round';\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? '';\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY, offsetA)) {\n sprite.offset(offsetX, offsetY);\n sprite.rotate(offsetA);\n }\n });\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawPolygon(shape: PolygonShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const vertices = shape.m_vertices;\n\n if (!vertices.length) {\n return;\n }\n \n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, options.scaleY * v.y);\n maxY = math_max(maxY, options.scaleY * v.y);\n }\n \n const width = maxX - minX;\n const height = maxY - minY;\n\n offsetX = minX;\n offsetY = minY;\n\n this.setSize(width + 2 * lw, height + 2 * lw, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n const x = v.x - minX + lw;\n const y = options.scaleY * v.y - minY + lw;\n if (i == 0)\n ctx.moveTo(x, y);\n\n else\n ctx.lineTo(x, y);\n }\n\n if (vertices.length > 2) {\n ctx.closePath();\n }\n\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n ctx.closePath();\n }\n\n ctx.lineCap = 'round';\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? '';\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawChain(shape: ChainShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const vertices = shape.m_vertices;\n\n if (!vertices.length) {\n return;\n }\n \n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, options.scaleY * v.y);\n maxY = math_max(maxY, options.scaleY * v.y);\n }\n \n const width = maxX - minX;\n const height = maxY - minY;\n\n offsetX = minX;\n offsetY = minY;\n\n this.setSize(width + 2 * lw, height + 2 * lw, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n const x = v.x - minX + lw;\n const y = options.scaleY * v.y - minY + lw;\n if (i == 0)\n ctx.moveTo(x, y);\n\n else\n ctx.lineTo(x, y);\n }\n\n // TODO: if loop\n if (vertices.length > 2) {\n // ctx.closePath();\n }\n\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n ctx.closePath();\n }\n\n ctx.lineCap = 'round';\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? '';\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n}\n"],"names":["__extends","__assign","math_random","clamp","random","math","math_abs","math_sqrt","math_max","math_min","math_PI","Settings","math_sin","math_cos","math_atan2","temp","matrix.vec2","matrix.zeroVec2","matrix.transformVec2","matrix.copyVec2","matrix.setRotAngle","matrix.combine2Vec2","matrix.minusVec2","matrix.rotVec2","matrix.subVec2","xf","matrix.transform","matrix.plusScaleVec2","matrix.scaleVec2","matrix.dotVec2","matrix.crossNumVec2","matrix.plusVec2","stats","normal","matrix.lengthSqrVec2","matrix.derotVec2","matrix.distVec2","matrix.normalizeVec2","matrix.minusScaleVec2","matrix.setVec2","matrix.crossVec2Vec2","matrix.combine3Vec2","input","cache","output","matrix.copyTransform","TOIOutputState","xfA","xfB","pointA","pointB","matrix.normalizeVec2Length","matrix.crossVec2Num","matrix.negVec2","matrix.mulVec2","cA","cB","planePoint","clipPoint","ManifoldType","ContactFeatureType","PointState","tangent","P","DEFAULTS","v1","v2","e","e1","e2","matrix.detransformVec2","matrix.addVec2","matrix.distSqrVec2","LimitState","n","matrix.retransformVec2","clipPoints1","clipPoints2","normal1","matrix.detransformTransform","matrix.rerotVec2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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CAAI,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAC,IAAI,CAAI,CAAA,CAAA,CAAA,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AAC1D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAC,IAAI,CAAI,CAAA,CAAA,CAAA,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AAC1D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAC,IAAI,CAAI,CAAA,CAAA,CAAA,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AAC1D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAC,IAAI,CAAI,CAAA,CAAA,CAAA,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;IAC1D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,C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AAA,CAAA,CAAA,CAAI,CAAC,CAAC,EAAE,CAAI,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,EAAE,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAE,CAAA,CAAC,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA;AAC3E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,EAAE,CAAI,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,EAAE,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAE,CAAA,CAAC,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA;AAC3E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,EAAE,CAAI,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,EAAE,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAE,CAAA,CAAC,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA;IACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;IACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA;IAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA;IACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;IACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;IACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA;IACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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A,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA;;IAEb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;;IAEZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA;;IAEhB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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CAAC,CAAC,CAAA,CAAE,CAAC,CAAC,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAC;AACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAC,CAAC,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAC;AACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAC,CAAC,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAC;KAEvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAC,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAC,CAAC,CAAC;AAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAC,CAAC,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAC;AACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAC,CAAC,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,GAAG,CAAG,CAAA,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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC;AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIzB,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,IAAI,CAAC;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAE,GAAG,CAAE,CAAA,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,WAAW,CAAE,CAAA,CAAA;IAClC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAC,CAAC;IACZ,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAC,CAAC;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,MAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,WAAW,CAAE,CAAA,CAAA;IACzC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC;IACd,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAC,CAAC;IACZ,CAAG,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,OAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAG,GAAG,CAAC;IAC9D,CAAC;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,IAAI,CAAC,CAAA,CAAA,CAAG,EAAE,CAAG,CAAA,CAAA,CAAA,CAAE,GAAG,CAAE,CAAA,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,WAAW,CAAE,CAAA,CAAA;IAClC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAC,CAAC;IACZ,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAC,CAAC;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,MAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,WAAW,CAAE,CAAA,CAAA;IACzC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC;IACd,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAC,CAAC;IACZ,CAAG,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA;IACjB,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAC,CAAC;IACpC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAC,CAAC;AACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACT,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAC,CAAC;IACpC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAC,CAAC;IACxC,CAAG,CAAA,CAAA;IACH,CAAC;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,KAAK,CAAC,CAAA,CAAA,CAAG,EAAE,CAAG,CAAA,CAAA,CAAA,CAAE,GAAG,CAAE,CAAA,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA;IACjB,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAG,CAAC;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,GAAG,CAAE,CAAA,CAAA;IACxB,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAG,CAAC;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACT,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAG,CAAC;IACf,CAAG,CAAA,CAAA;IACH,CAAC;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAC,CAAE,CAAA,CAAA;IACtB,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,GAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC;AAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAC,EAAE,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAC,CAAE,CAAA,CAAA;AACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,QAAQ,CAAE,CAAA,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAC,CAAC,CAAC;AACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAC,EAAE,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAC,CAAE,CAAA,CAAC,CAAE,CAAA,CAAC,CAAC,CAAC;IACrC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACP,CAAK,CAAA,CAAA,CAAA,CAAA;AACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,OAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA,CAAA,CAAG,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,IAAI,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,GAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA,CAAA,CAAG,GAAG,CAAC;AAChH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,OAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC,CAAC;AACzE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,OAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,SAAS,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAC,CAAE,CAAA,CAAC,EAAE,CAAC,CAAA,CAAE,CAAC,CAAE,CAAA,CAAA;AACzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,IAAI,CAAC;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,QAAQ,CAAE,CAAA,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAG,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;AAC/C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAG,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;AAC/C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAG,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;AAC/C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAG,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;AAC/C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAG,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;AAC/C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAG,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;IAC/C,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACP,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,IAAI,CAAC;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,OAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,GAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,IAAI,CAAC;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;IACjB,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,IAAI,CAAC;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC;IACN,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,KAAK,CAAE,CAAA,CAAA;IAC/C,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA;IAClB,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,IAAI,CAAC;IACpB,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,IAAI,CAAC;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,GAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,GAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,GAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,GAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA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AAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAA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"} \ No newline at end of file +{"version":3,"file":"planck-with-testbed.js","sources":["../node_modules/tslib/tslib.es6.js","../src/util/options.ts","../src/common/Math.ts","../src/common/Vec2.ts","../src/collision/AABB.ts","../src/Settings.ts","../src/util/Pool.ts","../src/collision/DynamicTree.ts","../src/collision/BroadPhase.ts","../src/common/Matrix.ts","../src/common/Rot.ts","../src/common/Sweep.ts","../src/common/Transform.ts","../src/dynamics/Velocity.ts","../src/dynamics/Position.ts","../src/collision/Shape.ts","../src/dynamics/Fixture.ts","../src/dynamics/Body.ts","../src/dynamics/Joint.ts","../src/util/stats.ts","../src/util/Timer.ts","../src/collision/Distance.ts","../src/collision/TimeOfImpact.ts","../src/dynamics/Solver.ts","../src/common/Mat22.ts","../src/collision/Manifold.ts","../src/dynamics/Contact.ts","../src/dynamics/World.ts","../src/common/Vec3.ts","../src/collision/shape/EdgeShape.ts","../src/collision/shape/ChainShape.ts","../src/collision/shape/PolygonShape.ts","../src/collision/shape/CircleShape.ts","../src/dynamics/joint/DistanceJoint.ts","../src/dynamics/joint/FrictionJoint.ts","../src/common/Mat33.ts","../src/dynamics/joint/RevoluteJoint.ts","../src/dynamics/joint/PrismaticJoint.ts","../src/dynamics/joint/GearJoint.ts","../src/dynamics/joint/MotorJoint.ts","../src/dynamics/joint/MouseJoint.ts","../src/dynamics/joint/PulleyJoint.ts","../src/dynamics/joint/RopeJoint.ts","../src/dynamics/joint/WeldJoint.ts","../src/dynamics/joint/WheelJoint.ts","../src/serializer/index.ts","../src/util/Testbed.ts","../src/collision/shape/BoxShape.ts","../src/collision/shape/CollideCircle.ts","../src/collision/shape/CollideEdgeCircle.ts","../src/collision/shape/CollidePolygon.ts","../src/collision/shape/CollideCirclePolygon.ts","../src/collision/shape/CollideEdgePolygon.ts","../src/internal.ts","../node_modules/stage-js/dist/stage.js","../testbed/StageTestbed.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/** @internal */\nexport const options = function(input: T, defaults: object): T {\n if (input === null || typeof input === \"undefined\") {\n // tslint:disable-next-line:no-object-literal-type-assertion\n input = {} as T;\n }\n\n const output = {...input};\n\n // tslint:disable-next-line:no-for-in\n for (const key in defaults) {\n if (defaults.hasOwnProperty(key) && typeof input[key] === \"undefined\") {\n output[key] = defaults[key];\n }\n }\n\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n const symbols = Object.getOwnPropertySymbols(defaults);\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n if (defaults.propertyIsEnumerable(symbol) && typeof input[symbol] === \"undefined\") {\n output[symbol] = defaults[symbol];\n }\n }\n }\n\n return output;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_random = Math.random;\n\n\nexport const EPSILON = 1e-9;\n\n/** @internal @deprecated */\nexport const isFinite = Number.isFinite;\n\n/**\n * @deprecated\n * Next Largest Power of 2 Given a binary integer value x, the next largest\n * power of 2 can be computed by a SWAR algorithm that recursively \"folds\" the\n * upper bits into the lower bits. This process yields a bit vector with the\n * same most significant 1 as x, but all 1's below it. Adding 1 to that value\n * yields the next largest power of 2. For a 32-bit value:\n */\nexport function nextPowerOfTwo(x: number): number {\n x |= (x >> 1);\n x |= (x >> 2);\n x |= (x >> 4);\n x |= (x >> 8);\n x |= (x >> 16);\n return x + 1;\n}\n\n/** @deprecated */\nexport function isPowerOfTwo(x: number): boolean {\n return x > 0 && (x & (x - 1)) === 0;\n}\n\n/** @deprecated */\nexport function mod(num: number, min?: number, max?: number): number {\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}\n\n/**\n * @deprecated\n * Returns a min if num is less than min, and max if more than max, otherwise returns num.\n */\nexport function clamp(num: number, min: number, max: number): number {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n } else {\n return num;\n }\n}\n\n/**\n * @deprecated\n * Returns a random number between min and max when two arguments are provided.\n * If one arg is provided between 0 to max.\n * If one arg is passed between 0 to 1.\n */\nexport function random(min?: number, max?: number): number {\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}\n\n/** @ignore */\nexport const 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;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"./Math\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/** 2D vector */\nexport interface Vec2Value {\n x: number;\n y: number;\n}\n\ndeclare module \"./Vec2\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec2(x: number, y: number): Vec2;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec2(obj: Vec2Value): Vec2;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec2(): Vec2;\n}\n\n/** 2D vector */\n// @ts-expect-error\nexport class Vec2 {\n x: number;\n y: number;\n\n constructor(x: number, y: number);\n constructor(obj: Vec2Value);\n constructor();\n // tslint:disable-next-line:typedef\n constructor(x?, y?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec2)) {\n return new Vec2(x, y);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n } else {\n this.x = x;\n this.y = y;\n }\n _ASSERT && Vec2.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = data.x;\n obj.y = data.y;\n return obj;\n }\n\n static zero(): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = 0;\n obj.y = 0;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = x;\n obj.y = y;\n return obj;\n }\n\n static clone(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(v.x, v.y);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /**\n * Does this vector contain finite coordinates?\n */\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.x) && Number.isFinite(obj.y);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec2.isValid(o), \"Invalid Vec2!\", o);\n }\n\n clone(): Vec2 {\n return Vec2.clone(this);\n }\n\n /**\n * Set this vector to all zeros.\n *\n * @returns this\n */\n setZero(): Vec2 {\n this.x = 0.0;\n this.y = 0.0;\n return this;\n }\n\n set(x: number, y: number): Vec2;\n set(value: Vec2Value): Vec2;\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n // tslint:disable-next-line:typedef\n set(x, y?) {\n if (typeof x === \"object\") {\n _ASSERT && Vec2.assert(x);\n this.x = x.x;\n this.y = x.y;\n } else {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n }\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setNum(x: number, y: number) {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setVec2(value: Vec2Value) {\n _ASSERT && Vec2.assert(value);\n this.x = value.x;\n this.y = value.y;\n\n return this;\n }\n\n /** @internal @deprecated Use setCombine or setMul */\n wSet(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.setCombine(a, v, b, w);\n } else {\n return this.setMul(a, v);\n }\n }\n\n /**\n * Set linear combination of v and w: `a * v + b * w`\n */\n setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x = x;\n this.y = y;\n return this;\n }\n\n setMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * Add a vector to this vector.\n *\n * @returns this\n */\n add(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x += w.x;\n this.y += w.y;\n return this;\n }\n\n /** @internal @deprecated Use addCombine or addMul */\n wAdd(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.addCombine(a, v, b, w);\n } else {\n return this.addMul(a, v);\n }\n }\n\n /**\n * Add linear combination of v and w: `a * v + b * w`\n */\n addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x += x;\n this.y += y;\n return this;\n }\n\n addMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x += x;\n this.y += y;\n return this;\n }\n\n /**\n * @deprecated Use subCombine or subMul\n */\n wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.subCombine(a, v, b, w);\n } else {\n return this.subMul(a, v);\n }}\n\n /**\n * Subtract linear combination of v and w: `a * v + b * w`\n */\n subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n subMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n /**\n * Subtract a vector from this vector\n *\n * @returns this\n */\n sub(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x -= w.x;\n this.y -= w.y;\n return this;\n }\n\n /**\n * Multiply this vector by a scalar.\n *\n * @returns this\n */\n mul(m: number): Vec2 {\n _ASSERT && console.assert(Number.isFinite(m));\n this.x *= m;\n this.y *= m;\n return this;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n length(): number {\n return Vec2.lengthOf(this);\n }\n\n /**\n * Get the length squared.\n */\n lengthSquared(): number {\n return Vec2.lengthSquared(this);\n }\n\n /**\n * Convert this vector into a unit vector.\n *\n * @returns old length\n */\n normalize(): number {\n const length = this.length();\n if (length < EPSILON) {\n return 0.0;\n }\n const invLength = 1.0 / length;\n this.x *= invLength;\n this.y *= invLength;\n return length;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n static lengthOf(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return math_sqrt(v.x * v.x + v.y * v.y);\n }\n\n /**\n * Get the length squared.\n */\n static lengthSquared(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return v.x * v.x + v.y * v.y;\n }\n\n static distance(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return math_sqrt(dx * dx + dy * dy);\n }\n\n static distanceSquared(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return dx * dx + dy * dy;\n }\n\n static areEqual(v: Vec2Value, w: Vec2Value): boolean {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v === w || typeof w === \"object\" && w !== null && v.x === w.x && v.y === w.y;\n }\n\n /**\n * Get the skew vector such that dot(skew_vec, other) == cross(vec, other)\n */\n static skew(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.y, v.x);\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.x + v.y * w.y;\n }\n\n /** Cross product between two vectors */\n static cross(v: Vec2Value, w: Vec2Value): number;\n /** Cross product between a vector and a scalar */\n static cross(v: Vec2Value, w: number): Vec2;\n /** Cross product between a scalar and a vector */\n static cross(v: number, w: Vec2Value): Vec2;\n static cross(v: any, w: any): any {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n\n } else {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n }\n\n /** Cross product on two vectors */\n static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n\n /** Cross product on a vector and a scalar */\n static crossVec2Num(v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n }\n\n /** Cross product on a vector and a scalar */\n static crossNumVec2(v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n }\n\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2;\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2;\n static addCross(a: Vec2Value, v: any, w: any): Vec2 {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n static add(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x + w.x, v.y + w.y);\n }\n\n /** @hidden @deprecated */\n static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return Vec2.combine(a, v, b, w);\n } else {\n return Vec2.mulNumVec2(a, v);\n }\n }\n\n static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n return Vec2.zero().setCombine(a, v, b, w);\n }\n\n static sub(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x - w.x, v.y - w.y);\n }\n\n static mul(a: Vec2Value, b: number): Vec2;\n static mul(a: number, b: Vec2Value): Vec2;\n static mul(a: any, b: any): Vec2 {\n if (typeof a === \"object\") {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n\n } else if (typeof b === \"object\") {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n }\n\n static mulVec2Num(a: Vec2Value, b: number): Vec2 {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n }\n\n static mulNumVec2(a: number, b: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n\n neg(): Vec2 {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n\n static neg(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.x, -v.y);\n }\n\n static abs(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(math_abs(v.x), math_abs(v.y));\n }\n\n static mid(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo((v.x + w.x) * 0.5, (v.y + w.y) * 0.5);\n }\n\n static upper(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_max(v.x, w.x), math_max(v.y, w.y));\n }\n\n static lower(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_min(v.x, w.x), math_min(v.y, w.y));\n }\n\n clamp(max: number): Vec2 {\n const lengthSqr = this.x * this.x + this.y * this.y;\n if (lengthSqr > max * max) {\n const scale = max / math_sqrt(lengthSqr);\n this.x *= scale;\n this.y *= scale;\n }\n return this;\n }\n\n static clamp(v: Vec2Value, max: number): Vec2 {\n const r = Vec2.neo(v.x, v.y);\n r.clamp(max);\n return r;\n }\n\n /** @hidden @deprecated */\n static scaleFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x * x, v.y * y);\n };\n }\n\n /** @hidden @deprecated */\n static translateFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x + x, v.y + y);\n };\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/**\n * Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n */\nexport interface RayCastInput {\n p1: Vec2Value;\n p2: Vec2Value;\n maxFraction: number;\n}\n\nexport type RayCastCallback = (subInput: RayCastInput, id: number) => number;\n\n/**\n * Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`,\n * where `p1` and `p2` come from RayCastInput.\n */\nexport interface RayCastOutput {\n normal: Vec2;\n fraction: number;\n}\n\n/** Axis-aligned bounding box */\nexport interface AABBValue {\n lowerBound: Vec2Value;\n upperBound: Vec2Value;\n}\n\ndeclare module \"./AABB\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function AABB(lower?: Vec2Value, upper?: Vec2Value): AABB;\n}\n\n/** Axis-aligned bounding box */\n// @ts-expect-error\nexport class AABB {\n lowerBound: Vec2;\n upperBound: Vec2;\n\n constructor(lower?: Vec2Value, upper?: Vec2Value) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof AABB)) {\n return new AABB(lower, upper);\n }\n\n this.lowerBound = Vec2.zero();\n this.upperBound = Vec2.zero();\n\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\n /**\n * Verify that the bounds are sorted.\n */\n isValid(): boolean {\n return AABB.isValid(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!AABB.isValid(o), \"Invalid AABB!\", o);\n }\n\n /**\n * Get the center of the AABB.\n */\n getCenter(): Vec2 {\n return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5);\n }\n\n /**\n * Get the extents of the AABB (half-widths).\n */\n getExtents(): Vec2 {\n return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5);\n }\n\n /**\n * Get the perimeter length.\n */\n getPerimeter(): number {\n return 2.0 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y);\n }\n\n /**\n * Combine one or two AABB into this one.\n */\n combine(a: AABBValue, b?: AABBValue): void {\n b = b || this;\n\n const lowerA = a.lowerBound;\n const upperA = a.upperBound;\n const lowerB = b.lowerBound;\n const upperB = b.upperBound;\n\n const lowerX = math_min(lowerA.x, lowerB.x);\n const lowerY = math_min(lowerA.y, lowerB.y);\n const upperX = math_max(upperB.x, upperA.x);\n const upperY = math_max(upperB.y, upperA.y);\n\n this.lowerBound.setNum(lowerX, lowerY);\n this.upperBound.setNum(upperX, upperY);\n }\n\n combinePoints(a: Vec2Value, b: Vec2Value): void {\n this.lowerBound.setNum(math_min(a.x, b.x), math_min(a.y, b.y));\n this.upperBound.setNum(math_max(a.x, b.x), math_max(a.y, b.y));\n }\n\n set(aabb: AABBValue): void {\n this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y);\n this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y);\n }\n\n contains(aabb: AABBValue): boolean {\n let 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\n extend(value: number): AABB {\n AABB.extend(this, value);\n return this;\n }\n\n static extend(out: AABBValue, value: number): AABBValue {\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\n static testOverlap(a: AABBValue, b: AABBValue): boolean {\n const d1x = b.lowerBound.x - a.upperBound.x;\n const d2x = a.lowerBound.x - b.upperBound.x;\n\n const d1y = b.lowerBound.y - a.upperBound.y;\n const d2y = a.lowerBound.y - b.upperBound.y;\n\n if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) {\n return false;\n }\n return true;\n }\n\n static areEqual(a: AABBValue, b: AABBValue): boolean {\n return Vec2.areEqual(a.lowerBound, b.lowerBound) && Vec2.areEqual(a.upperBound, b.upperBound);\n }\n\n static diff(a: AABBValue, b: AABBValue): number {\n const wD = math_max(0, math_min(a.upperBound.x, b.upperBound.x) - math_max(b.lowerBound.x, a.lowerBound.x));\n const hD = math_max(0, math_min(a.upperBound.y, b.upperBound.y) - math_max(b.lowerBound.y, a.lowerBound.y));\n\n const wA = a.upperBound.x - a.lowerBound.x;\n const hA = a.upperBound.y - a.lowerBound.y;\n\n const wB = b.upperBound.x - b.lowerBound.x;\n const hB = b.upperBound.y - b.lowerBound.y;\n\n return wA * hA + wB * hB - wD * hD;\n }\n\n rayCast(output: RayCastOutput, input: RayCastInput): boolean {\n // From Real-time Collision Detection, p179.\n\n let tmin = -Infinity;\n let tmax = Infinity;\n\n const p = input.p1;\n const d = Vec2.sub(input.p2, input.p1);\n const absD = Vec2.abs(d);\n\n const normal = Vec2.zero();\n\n for (let f: \"x\" | \"y\" = \"x\"; f !== null; f = (f === \"x\" ? \"y\" : null)) {\n if (absD.x < EPSILON) {\n // Parallel.\n if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) {\n return false;\n }\n } else {\n const inv_d = 1.0 / d[f];\n let t1 = (this.lowerBound[f] - p[f]) * inv_d;\n let t2 = (this.upperBound[f] - p[f]) * inv_d;\n\n // Sign of the normal vector.\n let s = -1.0;\n\n if (t1 > t2) {\n const temp = t1;\n t1 = t2;\n t2 = temp;\n s = 1.0;\n }\n\n // Push the min up\n if (t1 > tmin) {\n normal.setZero();\n normal[f] = s;\n tmin = t1;\n }\n\n // Pull the max down\n tmax = math_min(tmax, t2);\n\n if (tmin > tmax) {\n return false;\n }\n }\n }\n\n // Does the ray start inside the box?\n // Does the ray intersect beyond the max fraction?\n if (tmin < 0.0 || input.maxFraction < tmin) {\n return false;\n }\n\n // Intersection.\n output.fraction = tmin;\n output.normal = normal;\n return true;\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue {\n out.lowerBound.x = math_min(a.x, b.x);\n out.lowerBound.y = math_min(a.y, b.y);\n out.upperBound.x = math_max(a.x, b.x);\n out.upperBound.y = math_max(a.y, b.y);\n return out;\n }\n\n static combinedPerimeter(a: AABBValue, b: AABBValue) {\n const lx = math_min(a.lowerBound.x, b.lowerBound.x);\n const ly = math_min(a.lowerBound.y, b.lowerBound.y);\n const ux = math_max(a.upperBound.x, b.upperBound.x);\n const uy = math_max(a.upperBound.y, b.upperBound.y);\n return 2.0 * (ux - lx + uy - ly); \n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Tuning constants based on meters-kilograms-seconds (MKS) units.\n * \n * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units.\n */\nexport class Settings {\n /**\n * You can use this to change the length scale used by your game.\n * \n * For example for inches you could use 39.4.\n */\n static lengthUnitsPerMeter = 1.0;\n \n // Collision\n /**\n * The maximum number of contact points between two convex shapes. Do not change\n * this value.\n */\n static maxManifoldPoints: number = 2;\n\n /**\n * The maximum number of vertices on a convex polygon. You cannot increase this\n * too much because BlockAllocator has a maximum object size.\n */\n static maxPolygonVertices: number = 12;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This allows proxies to move\n * by a small amount without triggering a tree adjustment. This is in meters.\n */\n static aabbExtension: number = 0.1;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This is used to predict the\n * future position based on the current displacement. This is a dimensionless\n * multiplier.\n */\n static aabbMultiplier: number = 2.0;\n\n /**\n * A small length used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static linearSlop: number = 0.005;\n\n /**\n * A small angle used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static angularSlop: number = (2.0 / 180.0 * math_PI);\n\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 static get polygonRadius(): number { return 2.0 * Settings.linearSlop; }\n\n /**\n * Maximum number of sub-steps per contact in continuous physics simulation.\n */\n static maxSubSteps: number = 8;\n\n // Dynamics\n\n /**\n * Maximum number of contacts to be handled to solve a TOI impact.\n */\n static maxTOIContacts: number = 32;\n\n /**\n * Maximum iterations to solve a TOI.\n */\n static maxTOIIterations: number = 20;\n\n /**\n * Maximum iterations to find Distance.\n */\n static maxDistanceIterations: number = 20;\n\n /**\n * A velocity threshold for elastic collisions. Any collision with a relative\n * linear velocity below this threshold will be treated as inelastic.\n */\n static velocityThreshold: number = 1.0;\n\n /**\n * The maximum linear position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxLinearCorrection: number = 0.2;\n\n /**\n * The maximum angular position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxAngularCorrection: number = (8.0 / 180.0 * math_PI);\n\n /**\n * The maximum linear velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxTranslation: number = 2.0;\n\n /**\n * The maximum angular velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxRotation: number = (0.5 * math_PI);\n\n /**\n * This scale factor controls how fast overlap is resolved. Ideally this would\n * be 1 so that overlap is removed in one time step. However using values close\n * to 1 often lead to overshoot.\n */\n static baumgarte: number = 0.2;\n static toiBaugarte: number = 0.75;\n\n // Sleep\n\n /**\n * The time that a body must be still before it will go to sleep.\n */\n static timeToSleep: number = 0.5;\n\n /**\n * A body cannot sleep if its linear velocity is above this tolerance.\n */\n static linearSleepTolerance: number = 0.01;\n\n /**\n * A body cannot sleep if its angular velocity is above this tolerance.\n */\n static angularSleepTolerance: number = (2.0 / 180.0 * math_PI);\n}\n\n/** @internal */\nexport class SettingsInternal {\n static get maxManifoldPoints() {\n return Settings.maxManifoldPoints;\n }\n static get maxPolygonVertices() {\n return Settings.maxPolygonVertices;\n }\n static get aabbExtension() {\n return Settings.aabbExtension * Settings.lengthUnitsPerMeter;\n }\n static get aabbMultiplier() {\n return Settings.aabbMultiplier;\n }\n static get linearSlop() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get linearSlopSquared() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get angularSlop() {\n return Settings.angularSlop;\n }\n static get polygonRadius() {\n return 2.0 * Settings.linearSlop;\n }\n static get maxSubSteps() {\n return Settings.maxSubSteps;\n }\n static get maxTOIContacts() {\n return Settings.maxTOIContacts;\n }\n static get maxTOIIterations() {\n return Settings.maxTOIIterations;\n }\n static get maxDistanceIterations() {\n return Settings.maxDistanceIterations;\n }\n static get velocityThreshold() {\n return Settings.velocityThreshold * Settings.lengthUnitsPerMeter;\n }\n static get maxLinearCorrection() {\n return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter;\n }\n static get maxAngularCorrection() {\n return Settings.maxAngularCorrection;\n }\n static get maxTranslation() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxTranslationSquared() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxRotation() {\n return Settings.maxRotation;\n }\n static get maxRotationSquared() {\n return Settings.maxRotation * Settings.maxRotation;\n }\n static get baumgarte() {\n return Settings.baumgarte;\n }\n static get toiBaugarte() {\n return Settings.toiBaugarte;\n }\n static get timeToSleep() {\n return Settings.timeToSleep;\n }\n static get linearSleepTolerance() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get linearSleepToleranceSqr() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get angularSleepTolerance() {\n return Settings.angularSleepTolerance;\n }\n static get angularSleepToleranceSqr() {\n return Settings.angularSleepTolerance * Settings.angularSleepTolerance;\n }\n}\n","/*\n * Copyright (c) 2016-2018 Ali Shakiba http://shakiba.me/planck.js\n *\n * This software is provided 'as-is', without any express or implied\n * warranty. In no event will the authors be held liable for any damages\n * arising from the use of this software.\n * Permission is granted to anyone to use this software for any purpose,\n * including commercial applications, and to alter it and redistribute it\n * freely, subject to the following restrictions:\n * 1. The origin of this software must not be misrepresented; you must not\n * claim that you wrote the original software. If you use this software\n * in a product, an acknowledgment in the product documentation would be\n * appreciated but is not required.\n * 2. Altered source versions must be plainly marked as such, and must not be\n * misrepresented as being the original software.\n * 3. This notice may not be removed or altered from any source distribution.\n */\n\n/** @internal */\nexport interface PoolOptions {\n max?: number,\n create?: () => T,\n /** Called when an object is being re-allocated. */\n allocate?: (item: T) => void,\n /** Called when an object is returned to pool. */\n release?: (item: T) => void,\n /** Called when an object is returned to the pool but will be disposed from pool. */\n dispose?: (item: T) => T,\n}\n\n/** @internal */\nexport class Pool {\n _list: T[] = [];\n _max: number = Infinity;\n\n _createFn: () => T;\n _hasCreateFn: boolean = false;\n _createCount: number = 0;\n\n _allocateFn: (item: T) => void;\n _hasAllocateFn: boolean = false;\n _allocateCount: number = 0;\n\n _releaseFn: (item: T) => void;\n _hasReleaseFn: boolean = false;\n _releaseCount: number = 0;\n\n _disposeFn: (item: T) => T;\n _hasDisposeFn: boolean = false;\n _disposeCount: number = 0;\n\n constructor(opts: PoolOptions) {\n this._list = [];\n this._max = opts.max || this._max;\n\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\n max(n?: number): number | Pool {\n if (typeof n === \"number\") {\n this._max = n;\n return this;\n }\n return this._max;\n }\n\n size(): number {\n return this._list.length;\n }\n\n allocate(): T {\n let item: T;\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 // tslint:disable-next-line:no-object-literal-type-assertion\n item = {} as T;\n }\n }\n this._allocateCount++;\n if (this._hasAllocateFn) {\n this._allocateFn(item);\n }\n return item;\n }\n\n release(item: T): void {\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\n toString(): string {\n return \" +\" + this._createCount + \" >\" + this._allocateCount + \" <\" + this._releaseCount + \" -\"\n + this._disposeCount + \" =\" + this._list.length + \"/\" + this._max;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Pool } from \"../util/Pool\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\nexport type DynamicTreeQueryCallback = (nodeId: number) => boolean;\n\n/**\n * A node in the dynamic tree. The client does not interact with this directly.\n */\nexport class TreeNode {\n id: number;\n /** Enlarged AABB */\n aabb: AABB = new AABB();\n userData: T = null;\n parent: TreeNode = null;\n child1: TreeNode = null;\n child2: TreeNode = null;\n /** 0: leaf, -1: free node */\n height: number = -1;\n\n constructor(id?: number) {\n this.id = id;\n }\n\n /** @internal */\n toString(): string {\n return this.id + \": \" + this.userData;\n }\n\n isLeaf(): boolean {\n return this.child1 == null;\n }\n}\n\n/** @internal */ const poolTreeNode = new Pool>({\n create(): TreeNode {\n return new TreeNode();\n },\n release(node: TreeNode) {\n node.userData = null;\n node.parent = null;\n node.child1 = null;\n node.child2 = null;\n node.height = -1;\n node.id = undefined;\n }\n});\n\n/**\n * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A\n * dynamic tree arranges data in a binary tree to accelerate queries such as\n * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we\n * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger\n * than the client object. This allows the client object to move by small\n * amounts without triggering a tree update.\n *\n * Nodes are pooled and relocatable, so we use node indices rather than\n * pointers.\n */\nexport class DynamicTree {\n m_root: TreeNode;\n m_lastProxyId: number;\n m_nodes: {\n [id: number]: TreeNode\n };\n\n constructor() {\n this.m_root = null;\n this.m_nodes = {};\n this.m_lastProxyId = 0;\n }\n\n /**\n * Get proxy user data.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getUserData(id: number): T {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.userData;\n }\n\n /**\n * Get the fat AABB for a node id.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getFatAABB(id: number): AABB {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.aabb;\n }\n\n allocateNode(): TreeNode {\n const node = poolTreeNode.allocate();\n node.id = ++this.m_lastProxyId;\n this.m_nodes[node.id] = node;\n return node;\n }\n\n freeNode(node: TreeNode): void {\n // tslint:disable-next-line:no-dynamic-delete\n delete this.m_nodes[node.id];\n poolTreeNode.release(node);\n }\n\n /**\n * Create a proxy in the tree as a leaf node. We return the index of the node\n * instead of a pointer so that we can grow the node pool.\n *\n * Create a proxy. Provide a tight fitting AABB and a userData pointer.\n */\n createProxy(aabb: AABBValue, userData: T): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n\n const node = this.allocateNode();\n\n node.aabb.set(aabb);\n\n // Fatten the aabb.\n AABB.extend(node.aabb, Settings.aabbExtension);\n\n node.userData = userData;\n node.height = 0;\n\n this.insertLeaf(node);\n\n return node.id;\n }\n\n /**\n * Destroy a proxy. This asserts if the id is invalid.\n */\n destroyProxy(id: number): void {\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n this.removeLeaf(node);\n this.freeNode(node);\n }\n\n /**\n * Move a proxy with a swepted AABB. If the proxy has moved outside of its\n * fattened AABB, then the proxy is removed from the tree and re-inserted.\n * Otherwise the function returns immediately.\n *\n * @param d Displacement\n *\n * @return true if the proxy was re-inserted.\n */\n moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean {\n _ASSERT && console.assert(AABB.isValid(aabb));\n _ASSERT && console.assert(!d || Vec2.isValid(d));\n\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n if (node.aabb.contains(aabb)) {\n return false;\n }\n\n this.removeLeaf(node);\n\n node.aabb.set(aabb);\n\n // Extend AABB.\n aabb = node.aabb;\n AABB.extend(aabb, Settings.aabbExtension);\n\n // Predict AABB displacement.\n // const d = Vec2.mul(Settings.aabbMultiplier, displacement);\n\n if (d.x < 0.0) {\n aabb.lowerBound.x += d.x * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.x += d.x * Settings.aabbMultiplier;\n }\n\n if (d.y < 0.0) {\n aabb.lowerBound.y += d.y * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.y += d.y * Settings.aabbMultiplier;\n }\n\n this.insertLeaf(node);\n\n return true;\n }\n\n insertLeaf(leaf: TreeNode): void {\n _ASSERT && console.assert(AABB.isValid(leaf.aabb));\n\n if (this.m_root == null) {\n this.m_root = leaf;\n this.m_root.parent = null;\n return;\n }\n\n // Find the best sibling for this node\n const leafAABB = leaf.aabb;\n let index = this.m_root;\n while (!index.isLeaf()) {\n const child1 = index.child1;\n const child2 = index.child2;\n\n const area = index.aabb.getPerimeter();\n\n const combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB);\n\n // Cost of creating a new parent for this node and the new leaf\n const cost = 2.0 * combinedArea;\n\n // Minimum cost of pushing the leaf further down the tree\n const inheritanceCost = 2.0 * (combinedArea - area);\n\n // Cost of descending into child1\n const newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb);\n let cost1 = newArea1 + inheritanceCost;\n if (!child1.isLeaf()) {\n const oldArea = child1.aabb.getPerimeter();\n cost1 -= oldArea;\n }\n\n // Cost of descending into child2\n const newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb);\n let cost2 = newArea2 + inheritanceCost;\n if (!child2.isLeaf()) {\n const oldArea = child2.aabb.getPerimeter();\n cost2 -= oldArea;\n }\n\n // Descend according to the minimum cost.\n if (cost < cost1 && cost < cost2) {\n break;\n }\n\n // Descend\n if (cost1 < cost2) {\n index = child1;\n } else {\n index = child2;\n }\n }\n\n const sibling = index;\n\n // Create a new parent.\n const oldParent = sibling.parent;\n const 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\n if (oldParent != null) {\n // The sibling was not the root.\n if (oldParent.child1 === sibling) {\n oldParent.child1 = newParent;\n } else {\n oldParent.child2 = newParent;\n }\n\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n } else {\n // The sibling was the root.\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n this.m_root = newParent;\n }\n\n // Walk back up the tree fixing heights and AABBs\n index = leaf.parent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n _ASSERT && console.assert(child1 != null);\n _ASSERT && console.assert(child2 != null);\n\n index.height = 1 + math_max(child1.height, child2.height);\n index.aabb.combine(child1.aabb, child2.aabb);\n\n index = index.parent;\n }\n\n // validate();\n }\n\n removeLeaf(leaf: TreeNode): void {\n if (leaf === this.m_root) {\n this.m_root = null;\n return;\n }\n\n const parent = leaf.parent;\n const grandParent = parent.parent;\n let sibling;\n if (parent.child1 === leaf) {\n sibling = parent.child2;\n } else {\n sibling = parent.child1;\n }\n\n if (grandParent != null) {\n // Destroy parent and connect sibling to grandParent.\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\n // Adjust ancestor bounds.\n let index = grandParent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n index.aabb.combine(child1.aabb, child2.aabb);\n index.height = 1 + math_max(child1.height, child2.height);\n\n index = index.parent;\n }\n } else {\n this.m_root = sibling;\n sibling.parent = null;\n this.freeNode(parent);\n }\n\n // validate();\n }\n\n /**\n * Perform a left or right rotation if node A is imbalanced. Returns the new\n * root index.\n */\n balance(iA: TreeNode): TreeNode {\n _ASSERT && console.assert(iA != null);\n\n const A = iA;\n if (A.isLeaf() || A.height < 2) {\n return iA;\n }\n\n const B = A.child1;\n const C = A.child2;\n\n const balance = C.height - B.height;\n\n // Rotate C up\n if (balance > 1) {\n const F = C.child1;\n const G = C.child2;\n\n // Swap A and C\n C.child1 = A;\n C.parent = A.parent;\n A.parent = C;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(B.height, G.height);\n C.height = 1 + math_max(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\n A.height = 1 + math_max(B.height, F.height);\n C.height = 1 + math_max(A.height, G.height);\n }\n\n return C;\n }\n\n // Rotate B up\n if (balance < -1) {\n const D = B.child1;\n const E = B.child2;\n\n // Swap A and B\n B.child1 = A;\n B.parent = A.parent;\n A.parent = B;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(C.height, E.height);\n B.height = 1 + math_max(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\n A.height = 1 + math_max(C.height, D.height);\n B.height = 1 + math_max(A.height, E.height);\n }\n\n return B;\n }\n\n return A;\n }\n\n /**\n * Compute the height of the binary tree in O(N) time. Should not be called\n * often.\n */\n getHeight(): number {\n if (this.m_root == null) {\n return 0;\n }\n\n return this.m_root.height;\n }\n\n /**\n * Get the ratio of the sum of the node areas to the root area.\n */\n getAreaRatio(): number {\n if (this.m_root == null) {\n return 0.0;\n }\n\n const root = this.m_root;\n const rootArea = root.aabb.getPerimeter();\n\n let totalArea = 0.0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // Free node in pool\n continue;\n }\n\n totalArea += node.aabb.getPerimeter();\n }\n\n this.iteratorPool.release(it);\n\n return totalArea / rootArea;\n }\n\n /**\n * Compute the height of a sub-tree.\n */\n computeHeight(id?: number): number {\n let node;\n if (typeof id !== \"undefined\") {\n node = this.m_nodes[id];\n } else {\n node = this.m_root;\n }\n\n // _ASSERT && console.assert(0 <= id && id < this.m_nodeCapacity);\n\n if (node.isLeaf()) {\n return 0;\n }\n\n const height1 = this.computeHeight(node.child1.id);\n const height2 = this.computeHeight(node.child2.id);\n return 1 + math_max(height1, height2);\n }\n\n validateStructure(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n if (node === this.m_root) {\n _ASSERT && console.assert(node.parent == null);\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n _ASSERT && console.assert(child1.parent === node);\n _ASSERT && console.assert(child2.parent === node);\n\n this.validateStructure(child1);\n this.validateStructure(child2);\n }\n\n validateMetrics(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n const height1 = child1.height;\n const height2 = child2.height;\n const height = 1 + math_max(height1, height2);\n _ASSERT && console.assert(node.height === height);\n\n const aabb = new AABB();\n aabb.combine(child1.aabb, child2.aabb);\n\n _ASSERT && console.assert(AABB.areEqual(aabb, node.aabb));\n\n this.validateMetrics(child1);\n this.validateMetrics(child2);\n }\n\n /**\n * Validate this tree. For testing.\n */\n validate(): void {\n if (!_ASSERT) return;\n this.validateStructure(this.m_root);\n this.validateMetrics(this.m_root);\n\n console.assert(this.getHeight() === this.computeHeight());\n }\n\n /**\n * Get the maximum balance of an node in the tree. The balance is the difference\n * in height of the two children of a node.\n */\n getMaxBalance(): number {\n let maxBalance = 0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height <= 1) {\n continue;\n }\n\n _ASSERT && console.assert(!node.isLeaf());\n\n const balance = math_abs(node.child2.height - node.child1.height);\n maxBalance = math_max(maxBalance, balance);\n }\n this.iteratorPool.release(it);\n\n return maxBalance;\n }\n\n /**\n * Build an optimal tree. Very expensive. For testing.\n */\n rebuildBottomUp(): void {\n const nodes = [];\n let count = 0;\n\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // free node in pool\n continue;\n }\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\n while (count > 1) {\n let minCost = Infinity;\n let iMin = -1;\n let jMin = -1;\n for (let i = 0; i < count; ++i) {\n const aabbi = nodes[i].aabb;\n for (let j = i + 1; j < count; ++j) {\n const aabbj = nodes[j].aabb;\n const cost = AABB.combinedPerimeter(aabbi, aabbj);\n if (cost < minCost) {\n iMin = i;\n jMin = j;\n minCost = cost;\n }\n }\n }\n\n const child1 = nodes[iMin];\n const child2 = nodes[jMin];\n\n const parent = this.allocateNode();\n parent.child1 = child1;\n parent.child2 = child2;\n parent.height = 1 + math_max(child1.height, child2.height);\n parent.aabb.combine(child1.aabb, child2.aabb);\n parent.parent = null;\n\n child1.parent = parent;\n child2.parent = parent;\n\n nodes[jMin] = nodes[count - 1];\n nodes[iMin] = parent;\n --count;\n }\n\n this.m_root = nodes[0];\n\n _ASSERT && this.validate();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n const 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\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void {\n _ASSERT && console.assert(typeof queryCallback === \"function\");\n const stack = this.stackPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, aabb)) {\n if (node.isLeaf()) {\n const 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\n this.stackPool.release(stack);\n }\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n // TODO: GC\n _ASSERT && console.assert(typeof rayCastCallback === \"function\");\n const p1 = input.p1;\n const p2 = input.p2;\n const r = Vec2.sub(p2, p1);\n _ASSERT && console.assert(r.lengthSquared() > 0.0);\n r.normalize();\n\n // v is perpendicular to the segment.\n const v = Vec2.crossNumVec2(1.0, r);\n const abs_v = Vec2.abs(v);\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n\n let maxFraction = input.maxFraction;\n\n // Build a bounding box for the segment.\n const segmentAABB = new AABB();\n let t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2);\n segmentAABB.combinePoints(p1, t);\n\n const stack = this.stackPool.allocate();\n const subInput = this.inputPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, segmentAABB) === false) {\n continue;\n }\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n const c = node.aabb.getCenter();\n const h = node.aabb.getExtents();\n const separation = math_abs(Vec2.dot(v, Vec2.sub(p1, c))) - Vec2.dot(abs_v, h);\n if (separation > 0.0) {\n continue;\n }\n\n if (node.isLeaf()) {\n subInput.p1 = Vec2.clone(input.p1);\n subInput.p2 = Vec2.clone(input.p2);\n subInput.maxFraction = maxFraction;\n\n const value = rayCastCallback(subInput, node.id);\n\n if (value === 0.0) {\n // The client has terminated the ray cast.\n break;\n } else if (value > 0.0) {\n // update segment bounding box.\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\n private inputPool: Pool = new Pool({\n create(): RayCastInput {\n // tslint:disable-next-line:no-object-literal-type-assertion\n return {} as RayCastInput;\n },\n release(stack: RayCastInput): void {\n }\n });\n\n private stackPool: Pool>> = new Pool>>({\n create(): Array> {\n return [];\n },\n release(stack: Array>): void {\n stack.length = 0;\n }\n });\n\n private iteratorPool: Pool> = new Pool>({\n create(): Iterator {\n return new Iterator();\n },\n release(iterator: Iterator): void {\n iterator.close();\n }\n });\n\n}\n\n/** @internal */\nclass Iterator {\n parents: Array> = [];\n states: number[] = [];\n preorder(root: TreeNode): Iterator {\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 next(): TreeNode {\n while (this.parents.length > 0) {\n const i = this.parents.length - 1;\n const 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 close(): void {\n this.parents.length = 0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\nimport { DynamicTree, DynamicTreeQueryCallback } from \"./DynamicTree\";\nimport { FixtureProxy } from \"../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/**\n * The broad-phase wraps and extends a dynamic-tree to keep track of moved\n * objects and query them on update.\n */\nexport class BroadPhase {\n m_tree: DynamicTree = new DynamicTree();\n m_moveBuffer: number[] = [];\n\n m_callback: (userDataA: any, userDataB: any) => void;\n m_queryProxyId: number;\n\n /**\n * Get user data from a proxy. Returns null if the id is invalid.\n */\n getUserData(proxyId: number): FixtureProxy {\n return this.m_tree.getUserData(proxyId);\n }\n\n /**\n * Test overlap of fat AABBs.\n */\n testOverlap(proxyIdA: number, proxyIdB: number): boolean {\n const aabbA = this.m_tree.getFatAABB(proxyIdA);\n const aabbB = this.m_tree.getFatAABB(proxyIdB);\n return AABB.testOverlap(aabbA, aabbB);\n }\n\n /**\n * Get the fat AABB for a proxy.\n */\n getFatAABB(proxyId: number): AABB {\n return this.m_tree.getFatAABB(proxyId);\n }\n\n /**\n * Get the number of proxies.\n */\n getProxyCount(): number {\n return this.m_moveBuffer.length;\n }\n\n /**\n * Get the height of the embedded tree.\n */\n getTreeHeight(): number {\n return this.m_tree.getHeight();\n }\n\n /**\n * Get the balance (integer) of the embedded tree.\n */\n getTreeBalance(): number {\n return this.m_tree.getMaxBalance();\n }\n\n /**\n * Get the quality metric of the embedded tree.\n */\n getTreeQuality(): number {\n return this.m_tree.getAreaRatio();\n }\n\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query = (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void => {\n this.m_tree.query(aabb, queryCallback);\n };\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n this.m_tree.rayCast(input, rayCastCallback);\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_tree.shiftOrigin(newOrigin);\n }\n\n /**\n * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs\n * is called.\n */\n createProxy(aabb: AABBValue, userData: FixtureProxy): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const proxyId = this.m_tree.createProxy(aabb, userData);\n this.bufferMove(proxyId);\n return proxyId;\n }\n\n /**\n * Destroy a proxy. It is up to the client to remove any pairs.\n */\n destroyProxy(proxyId: number): void {\n this.unbufferMove(proxyId);\n this.m_tree.destroyProxy(proxyId);\n }\n\n /**\n * Call moveProxy as many times as you like, then when you are done call\n * UpdatePairs to finalized the proxy pairs (for your time step).\n */\n moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const changed = this.m_tree.moveProxy(proxyId, aabb, displacement);\n if (changed) {\n this.bufferMove(proxyId);\n }\n }\n\n /**\n * Call to trigger a re-processing of it's pairs on the next call to\n * UpdatePairs.\n */\n touchProxy(proxyId: number): void {\n this.bufferMove(proxyId);\n }\n\n bufferMove(proxyId: number): void {\n this.m_moveBuffer.push(proxyId);\n }\n\n unbufferMove(proxyId: number): void {\n for (let 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\n /**\n * Update the pairs. This results in pair callbacks. This can only add pairs.\n */\n updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void {\n _ASSERT && console.assert(typeof addPairCallback === \"function\");\n this.m_callback = addPairCallback;\n\n // Perform tree queries for all moving proxies.\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\n // We have to query the tree with the fat AABB so that\n // we don't fail to create a pair that may touch later.\n const fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId);\n\n // Query tree, create pairs and add them pair buffer.\n this.m_tree.query(fatAABB, this.queryCallback);\n }\n\n // Try to keep the tree balanced.\n // this.m_tree.rebalance(4);\n }\n\n queryCallback = (proxyId: number): boolean => {\n // A proxy cannot form a pair with itself.\n if (proxyId === this.m_queryProxyId) {\n return true;\n }\n\n const proxyIdA = math_min(proxyId, this.m_queryProxyId);\n const proxyIdB = math_max(proxyId, this.m_queryProxyId);\n\n // TODO: Skip any duplicate pairs.\n\n const userDataA = this.m_tree.getUserData(proxyIdA);\n const userDataB = this.m_tree.getUserData(proxyIdB);\n\n // Send the pairs back to the client.\n this.m_callback(userDataA, userDataB);\n\n return true;\n };\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2023 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\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_sqrt = Math.sqrt;\n\n\nimport { RotValue } from \"./Rot\";\nimport { TransformValue } from \"./Transform\";\nimport { Vec2Value } from \"./Vec2\";\nimport { Vec3Value } from \"./Vec3\";\n\nexport function vec2(x: number, y: number): Vec2Value {\n return { x, y };\n}\n\nexport function vec3(x: number, y: number, z: number): Vec3Value {\n return { x, y, z };\n}\n\nexport function rotation(angle: number): RotValue {\n return { s: math_sin(angle), c: math_cos(angle) };\n}\n\nexport function setVec2(out: Vec2Value, x: number, y: number): Vec2Value {\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function copyVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = w.x;\n out.y = w.y;\n return out;\n}\n\nexport function zeroVec2(out: Vec2Value): Vec2Value {\n out.x = 0;\n out.y = 0;\n return out;\n}\n\nexport function negVec2(out: Vec2Value): Vec2Value {\n out.x = -out.x;\n out.y = -out.y;\n return out;\n}\n\nexport function plusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x += w.x;\n out.y += w.y;\n return out;\n}\n\nexport function addVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x + w.x;\n out.y = v.x + w.y;\n return out;\n}\n\nexport function minusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x -= w.x;\n out.y -= w.y;\n return out;\n}\n\nexport function subVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x - w.x;\n out.y = v.y - w.y;\n return out;\n}\n\nexport function mulVec2(out: Vec2Value, m: number): Vec2Value {\n out.x *= m;\n out.y *= m;\n return out;\n}\n\nexport function scaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x = m * w.x;\n out.y = m * w.y;\n return out;\n}\n\nexport function plusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x += m * w.x;\n out.y += m * w.y;\n return out;\n}\n\nexport function minusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x -= m * w.x;\n out.y -= m * w.y;\n return out;\n}\n\nexport function combine2Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x;\n out.y = am * a.y + bm * b.y;\n return out;\n}\n\nexport function combine3Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value, cm: number, c: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x + cm * c.x;\n out.y = am * a.y + bm * b.y + cm * c.y;\n return out;\n}\n\nexport function normalizeVec2Length(out: Vec2Value): number {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length !== 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return length;\n}\n\nexport function normalizeVec2(out: Vec2Value): Vec2Value {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length > 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return out;\n}\n\nexport function crossVec2Num(out: Vec2Value, v: Vec2Value, w: number): Vec2Value {\n const x = w * v.y;\n const y = -w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossNumVec2(out: Vec2Value, w: number, v: Vec2Value): Vec2Value {\n const x = -w * v.y;\n const y = w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossVec2Vec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.y - a.y * b.x;\n}\n\nexport function dotVec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.x + a.y * b.y;\n}\n\nexport function lengthVec2(a: Vec2Value): number {\n return math_sqrt(a.x * a.x + a.y * a.y);\n}\n\nexport function lengthSqrVec2(a: Vec2Value): number {\n return a.x * a.x + a.y * a.y;\n}\n\nexport function distVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return math_sqrt(dx * dx + dy * dy);\n}\n\nexport function distSqrVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return dx * dx + dy * dy;\n}\n\nexport function dotVec3(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n}\n\nexport function setRotAngle(out: RotValue, a: number): RotValue {\n out.c = math_cos(a);\n out.s = math_sin(a);\n return out;\n}\n\nexport function rotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n out.x = q.c * v.x - q.s * v.y;\n out.y = q.s * v.x + q.c * v.y;\n return out;\n}\n\nexport function derotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n const x = q.c * v.x + q.s * v.y;\n const y = -q.s * v.x + q.c * v.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function rerotVec2(out: Vec2Value, before: RotValue, after: RotValue, v: Vec2Value): Vec2Value {\n const x0 = before.c * v.x + before.s * v.y;\n const y0 = -before.s * v.x + before.c * v.y;\n const x = after.c * x0 - after.s * y0;\n const y = after.s * x0 + after.c * y0;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function transform(x: number, y: number, a: number): TransformValue {\n return { p: vec2(x, y), q: rotation(a) };\n}\n\nexport function copyTransform(out: TransformValue, transform: TransformValue): TransformValue {\n out.p.x = transform.p.x;\n out.p.y = transform.p.y;\n out.q.s = transform.q.s;\n out.q.c = transform.q.c;\n return out;\n}\n\nexport function transformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const x = xf.q.c * v.x - xf.q.s * v.y + xf.p.x;\n const y = xf.q.s * v.x + xf.q.c * v.y + xf.p.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const px = v.x - xf.p.x;\n const py = v.y - xf.p.y;\n const x = (xf.q.c * px + xf.q.s * py);\n const y = (-xf.q.s * px + xf.q.c * py);\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function retransformVec2(out: Vec2Value, from: TransformValue, to: TransformValue, v: Vec2Value): Vec2Value {\n const x0 = from.q.c * v.x - from.q.s * v.y + from.p.x;\n const y0 = from.q.s * v.x + from.q.c * v.y + from.p.y;\n const px = x0 - to.p.x;\n const py = y0 - to.p.y;\n const x = to.q.c * px + to.q.s * py;\n const y = -to.q.s * px + to.q.c * py;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformTransform(out: TransformValue, a: TransformValue, b: TransformValue): TransformValue {\n const c = a.q.c * b.q.c + a.q.s * b.q.s;\n const s = a.q.c * b.q.s - a.q.s * b.q.c;\n const x = a.q.c * (b.p.x - a.p.x) + a.q.s * (b.p.y - a.p.y);\n const y = -a.q.s * (b.p.x - a.p.x) + a.q.c * (b.p.y - a.p.y);\n out.q.c = c;\n out.q.s = s;\n out.p.x = x;\n out.p.y = y;\n return out;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_atan2 = Math.atan2;\n\nexport interface RotValue {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n}\n\ndeclare module \"./Rot\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Rot(angle: number): Rot;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Rot(obj: RotValue): Rot;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Rot(): Rot;\n}\n\n/** Rotation */\n// @ts-expect-error\nexport class Rot {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n\n /** Initialize from an angle in radians. */\n constructor(angle?: number | RotValue) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Rot)) {\n return new Rot(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\n /** @hidden */\n static neo(angle: number): Rot {\n const obj = Object.create(Rot.prototype);\n obj.setAngle(angle);\n return obj;\n }\n\n static clone(rot: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n const obj = Object.create(Rot.prototype);\n obj.s = rot.s;\n obj.c = rot.c;\n return obj;\n }\n\n static identity(): Rot {\n const obj = Object.create(Rot.prototype);\n obj.s = 0.0;\n obj.c = 1.0;\n return obj;\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.s) && Number.isFinite(obj.c);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Rot.isValid(o), \"Invalid Rot!\", o);\n }\n\n /** Set to the identity rotation. */\n setIdentity(): void {\n this.s = 0.0;\n this.c = 1.0;\n }\n\n set(angle: number | RotValue): void {\n if (typeof angle === \"object\") {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n\n } else {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n }\n\n setRot(angle: RotValue): void {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n }\n\n /** Set using an angle in radians. */\n setAngle(angle: number): void {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n\n /** Get the angle in radians. */\n getAngle(): number {\n return math_atan2(this.s, this.c);\n }\n\n /** Get the x-axis. */\n getXAxis(): Vec2 {\n return Vec2.neo(this.c, this.s);\n }\n\n /** Get the y-axis. */\n getYAxis(): Vec2 {\n return Vec2.neo(-this.s, this.c);\n }\n\n /** Multiply two rotations: q * r */\n static mul(rot: RotValue, m: RotValue): Rot;\n /** Rotate a vector */\n static mul(rot: RotValue, m: Vec2Value): Vec2;\n static mul(rot, m) {\n _ASSERT && Rot.assert(rot);\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Multiply two rotations: q * r */\n static mulRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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\n /** Rotate a vector */\n static mulVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n\n static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2 {\n const x = rot.c * (v.x - w.x) - rot.s * (v.y - w.y);\n const y = rot.s * (v.x - w.x) + rot.c * (v.y - w.y);\n return Vec2.neo(x, y);\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulT(rot: RotValue, m: RotValue): Rot;\n /** Inverse rotate a vector */\n static mulT(rot: RotValue, m: Vec2Value): Vec2;\n static mulT(rot, m) {\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulTRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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\n /** Inverse rotate a vector */\n static mulTVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"./Matrix\";\nimport { mod } from \"./Math\";\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { TransformValue } from \"./Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_atan2 = Math.atan2;\n/** @internal */ const math_PI = Math.PI;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * This describes the motion of a body/shape for TOI computation. Shapes are\n * defined with respect to the body origin, which may not coincide with the\n * center of mass. However, to support dynamics we must interpolate the center\n * of mass position.\n */\nexport class Sweep {\n /** Local center of mass position */\n localCenter = Vec2.zero();\n\n /** World center position */\n c = Vec2.zero();\n\n /** World angle */\n a = 0;\n\n /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */\n alpha0 = 0;\n\n c0 = Vec2.zero();\n a0 = 0;\n\n /** @internal */\n recycle() {\n matrix.zeroVec2(this.localCenter);\n matrix.zeroVec2(this.c);\n this.a = 0;\n this.alpha0 = 0;\n matrix.zeroVec2(this.c0);\n this.a0 = 0;\n }\n\n setTransform(xf: TransformValue): void {\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n\n this.a = this.a0 = math_atan2(xf.q.s, xf.q.c);\n }\n\n setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void {\n matrix.copyVec2(this.localCenter, localCenter);\n\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n }\n\n /**\n * Get the interpolated transform at a specific time.\n *\n * @param xf\n * @param beta A factor in [0,1], where 0 indicates alpha0\n */\n getTransform(xf: TransformValue, beta: number = 0): void {\n matrix.setRotAngle(xf.q, (1.0 - beta) * this.a0 + beta * this.a);\n matrix.combine2Vec2(xf.p, (1.0 - beta), this.c0, beta, this.c);\n\n // shift to origin\n matrix.minusVec2(xf.p, matrix.rotVec2(temp, xf.q, this.localCenter));\n }\n\n /**\n * Advance the sweep forward, yielding a new initial state.\n *\n * @param alpha The new initial time\n */\n advance(alpha: number): void {\n _ASSERT && console.assert(this.alpha0 < 1.0);\n const beta = (alpha - this.alpha0) / (1.0 - this.alpha0);\n matrix.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\n forward(): void {\n this.a0 = this.a;\n matrix.copyVec2(this.c0, this.c);\n }\n\n /**\n * normalize the angles in radians to be between -pi and pi.\n */\n normalize(): void {\n const a0 = mod(this.a0, -math_PI, +math_PI);\n this.a -= this.a0 - a0;\n this.a0 = a0;\n }\n\n set(that: Sweep): void {\n matrix.copyVec2(this.localCenter, that.localCenter);\n matrix.copyVec2(this.c, that.c);\n this.a = that.a;\n this.alpha0 = that.alpha0;\n matrix.copyVec2(this.c0, that.c0);\n this.a0 = that.a0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Rot, RotValue } from \"./Rot\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport type TransformValue = {\n p: Vec2Value;\n q: RotValue;\n};\n\ndeclare module \"./Transform\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Transform(position?: Vec2Value, rotation?: number): Transform;\n}\n\n/**\n * A transform contains translation and rotation. It is used to represent the\n * position and orientation of rigid frames. Initialize using a position vector\n * and a rotation.\n */\n// @ts-expect-error\nexport class Transform {\n /** position */\n p: Vec2;\n\n /** rotation */\n q: Rot;\n\n constructor(position?: Vec2Value, rotation?: number) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Transform)) {\n return new Transform(position, rotation);\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 rotation !== \"undefined\") {\n this.q.setAngle(rotation);\n }\n }\n\n static clone(xf: Transform): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(xf.p);\n obj.q = Rot.clone(xf.q);\n return obj;\n }\n\n /** @hidden */\n static neo(position: Vec2Value, rotation: Rot): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(position);\n obj.q = Rot.clone(rotation);\n return obj;\n }\n\n static identity(): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.zero();\n obj.q = Rot.identity();\n return obj;\n }\n\n /** Set this to the identity transform */\n setIdentity(): void {\n this.p.setZero();\n this.q.setIdentity();\n }\n\n /** Set position and angle */\n set(position: Vec2Value, rotation: number): void;\n /** Copy from another transform */\n set(xf: TransformValue): void;\n set(a: any, b?: any) {\n if (typeof b === \"undefined\") {\n this.p.set(a.p);\n this.q.set(a.q);\n } else {\n this.p.set(a);\n this.q.set(b);\n }\n }\n\n /** Set position and angle */\n setNum(position: Vec2Value, rotation: number) {\n this.p.setVec2(position);\n this.q.setAngle(rotation);\n }\n\n setTransform(xf: TransformValue): void {\n this.p.setVec2(xf.p);\n this.q.setRot(xf.q);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.p) && Rot.isValid(obj.q);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Transform.isValid(o), \"Invalid Transform!\", o);\n }\n\n static mul(a: TransformValue, b: Vec2Value): Vec2;\n static mul(a: TransformValue, b: TransformValue): Transform;\n // static mul(a: Transform, b: Vec2Value[]): Vec2[];\n // static mul(a: Transform, b: Transform[]): Transform[];\n static mul(a, b) {\n if (Array.isArray(b)) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n\n } else if (\"x\" in b && \"y\" in b) {\n return Transform.mulVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulXf(a, b);\n }\n }\n\n static mulAll(a: Transform, b: Vec2Value[]): Vec2[];\n static mulAll(a: Transform, b: Transform[]): Transform[];\n static mulAll(a: TransformValue, b) {\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n }\n\n /** @hidden @deprecated */\n static mulFn(a: TransformValue) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n return function(b: Vec2Value): Vec2 {\n return Transform.mul(a, b);\n };\n }\n\n static mulVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = (a.q.c * b.x - a.q.s * b.y) + a.p.x;\n const y = (a.q.s * b.x + a.q.c * b.y) + a.p.y;\n return Vec2.neo(x, y);\n }\n\n static mulXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p\n // = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p\n const xf = Transform.identity();\n xf.q = Rot.mulRot(a.q, b.q);\n xf.p = Vec2.add(Rot.mulVec2(a.q, b.p), a.p);\n return xf;\n }\n\n static mulT(a: TransformValue, b: Vec2Value): Vec2;\n static mulT(a: TransformValue, b: TransformValue): Transform;\n static mulT(a, b) {\n if (\"x\" in b && \"y\" in b) {\n return Transform.mulTVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulTXf(a, b);\n }\n }\n\n static mulTVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const px = b.x - a.p.x;\n const py = b.y - a.p.y;\n const x = (a.q.c * px + a.q.s * py);\n const y = (-a.q.s * px + a.q.c * py);\n return Vec2.neo(x, y);\n }\n\n static mulTXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q' * (B.q * v1 + B.p - A.p)\n // = A.q' * B.q * v1 + A.q' * (B.p - A.p)\n const xf = Transform.identity();\n xf.q.setRot(Rot.mulTRot(a.q, b.q));\n xf.p.setVec2(Rot.mulTVec2(a.q, Vec2.sub(b.p, a.p)));\n return xf;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2 } from \"../common/Vec2\";\n\nexport class Velocity {\n /** linear */\n v = Vec2.zero();\n\n /** angular */\n w = 0;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n\n\nexport class Position {\n /** location */\n c = Vec2.zero();\n\n /** angle */\n a = 0;\n\n // todo: cache sin/cos\n getTransform(xf: TransformValue, p: Vec2Value): TransformValue {\n // xf.q = rotation(this.a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(this.a);\n xf.q.s = math_sin(this.a);\n xf.p.x = this.c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = this.c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n }\n}\n\nexport function getTransform(xf: TransformValue, p: Vec2Value, c: Vec2Value, a: number): TransformValue {\n // xf.q = rotation(a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(a);\n xf.q.s = math_sin(a);\n xf.p.x = c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { MassData } from \"../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"./AABB\";\nimport { DistanceProxy } from \"./Distance\";\nimport type { Transform, TransformValue } from \"../common/Transform\";\nimport type { Vec2Value } from \"../common/Vec2\";\nimport { Style } from \"../util/Testbed\";\n\n// todo make shape an interface\n\n/**\n * A shape is used for collision detection. You can create a shape however you\n * like. Shapes used for simulation in World are created automatically when a\n * Fixture is created. Shapes may encapsulate one or more child shapes.\n */\nexport abstract class Shape {\n /** @hidden */ m_type: ShapeType;\n\n /**\n * @hidden\n * Radius of a shape. For polygonal shapes this must be b2_polygonRadius.\n * There is no support for making rounded polygons.\n */\n m_radius: number;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @hidden */\n abstract _reset(): void;\n\n static isValid(obj: any): boolean {\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\n abstract getRadius(): number;\n\n /**\n * Get the type of this shape. You can use this to down cast to the concrete\n * shape.\n *\n * @return the shape type.\n */\n abstract getType(): ShapeType;\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n abstract _clone(): Shape;\n\n /**\n * Get the number of child primitives.\n */\n abstract getChildCount(): number;\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n abstract testPoint(xf: TransformValue, p: Vec2Value): boolean;\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean;\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void;\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n abstract computeMass(massData: MassData, density?: number): void;\n\n abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void;\n\n}\n\nexport type ShapeType = \"circle\" | \"edge\" | \"polygon\" | \"chain\";\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Shape, ShapeType } from \"../collision/Shape\";\nimport { Body, MassData } from \"./Body\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const synchronize_aabb1 = new AABB();\n/** @internal */ const synchronize_aabb2 = new AABB();\n/** @internal */ const displacement = matrix.vec2(0, 0);\n\n/**\n * A fixture definition is used to create a fixture. This class defines an\n * abstract fixture definition. You can reuse fixture definitions safely.\n */\nexport interface FixtureOpt {\n userData?: unknown;\n /**\n * The friction coefficient, usually in the range [0,1]\n */\n friction?: number;\n /**\n * The restitution (elasticity) usually in the range [0,1]\n */\n restitution?: number;\n /**\n * The density, usually in kg/m^2\n */\n density?: number;\n /**\n * A sensor shape collects contact information but never generates a collision response.\n */\n isSensor?: boolean;\n /**\n * Zero, positive or negative collision group.\n * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide.\n */\n filterGroupIndex?: number;\n /**\n * Collision category bit or bits that this fixture belongs to.\n * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa.\n */\n filterCategoryBits?: number;\n /**\n * Collision category bit or bits that this fixture accept for collision.\n */\n filterMaskBits?: number;\n}\n\nexport interface FixtureDef extends FixtureOpt {\n shape: Shape;\n}\n\n/** @internal */ const FixtureDefDefault: FixtureOpt = {\n userData : null,\n friction : 0.2,\n restitution : 0.0,\n density : 0.0,\n isSensor : false,\n\n filterGroupIndex : 0,\n filterCategoryBits : 0x0001,\n filterMaskBits : 0xFFFF\n};\n\n/**\n * This proxy is used internally to connect shape children to the broad-phase.\n */\nexport class FixtureProxy {\n aabb: AABB;\n fixture: Fixture;\n childIndex: number;\n proxyId: number;\n constructor(fixture: Fixture, childIndex: number) {\n this.aabb = new AABB();\n this.fixture = fixture;\n this.childIndex = childIndex;\n this.proxyId;\n }\n}\n\n/**\n * A fixture is used to attach a shape to a body for collision detection. A\n * fixture inherits its transform from its parent. Fixtures hold additional\n * non-geometric data such as friction, collision filters, etc.\n *\n * To create a new Fixture use {@link Body.createFixture}.\n */\nexport class Fixture {\n /** @internal */ m_body: Body;\n /** @internal */ m_friction: number;\n /** @internal */ m_restitution: number;\n /** @internal */ m_density: number;\n /** @internal */ m_isSensor: boolean;\n /** @internal */ m_filterGroupIndex: number;\n /** @internal */ m_filterCategoryBits: number;\n /** @internal */ m_filterMaskBits: number;\n /** @internal */ m_shape: Shape;\n /** @internal */ m_next: Fixture | null;\n /** @internal */ m_proxies: FixtureProxy[];\n // 0 indicates inactive state, this is not the same as m_proxies.length\n /** @internal */ m_proxyCount: number;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(body: Body, def: FixtureDef);\n constructor(body: Body, shape: Shape, def?: FixtureOpt);\n constructor(body: Body, shape: Shape, density?: number);\n /** @internal */\n constructor(body: Body, shape?, def?) {\n if (shape.shape) {\n def = shape;\n shape = shape.shape;\n\n } else if (typeof def === \"number\") {\n def = {density : def};\n }\n\n def = options(def, FixtureDefDefault);\n\n this.m_body = body;\n\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\n this.m_filterGroupIndex = def.filterGroupIndex;\n this.m_filterCategoryBits = def.filterCategoryBits;\n this.m_filterMaskBits = def.filterMaskBits;\n\n // TODO validate shape\n this.m_shape = shape; // .clone();\n\n this.m_next = null;\n\n this.m_proxies = [];\n this.m_proxyCount = 0;\n\n // fixture proxies are created here,\n // but they are activate in when a fixture is added to body\n const childCount = this.m_shape.getChildCount();\n for (let i = 0; i < childCount; ++i) {\n this.m_proxies[i] = new FixtureProxy(this, i);\n }\n\n this.m_userData = def.userData;\n }\n\n /** @hidden Re-setup fixture. */\n _reset(): void {\n const body = this.getBody();\n const broadPhase = body.m_world.m_broadPhase;\n this.destroyProxies(broadPhase);\n if (this.m_shape._reset) {\n this.m_shape._reset();\n }\n const childCount = this.m_shape.getChildCount();\n for (let 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\n /** @internal */\n _serialize(): object {\n return {\n friction: this.m_friction,\n restitution: this.m_restitution,\n density: this.m_density,\n isSensor: this.m_isSensor,\n\n filterGroupIndex: this.m_filterGroupIndex,\n filterCategoryBits: this.m_filterCategoryBits,\n filterMaskBits: this.m_filterMaskBits,\n\n shape: this.m_shape,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, body: any, restore: any): Fixture {\n const shape = restore(Shape, data.shape);\n const fixture = shape && new Fixture(body, shape, data);\n return fixture;\n }\n\n /**\n * Get the type of the child shape. You can use this to down cast to the\n * concrete shape.\n */\n getType(): ShapeType {\n return this.m_shape.m_type;\n }\n\n /**\n * Get the child shape. You can modify the child shape, however you should not\n * change the number of vertices because this will crash some collision caching\n * mechanisms. Manipulating the shape may lead to non-physical behavior.\n */\n getShape(): Shape {\n return this.m_shape;\n }\n\n /**\n * A sensor shape collects contact information but never generates a collision\n * response.\n */\n isSensor(): boolean {\n return this.m_isSensor;\n }\n\n /**\n * Set if this fixture is a sensor.\n */\n setSensor(sensor: boolean): void {\n if (sensor != this.m_isSensor) {\n this.m_body.setAwake(true);\n this.m_isSensor = sensor;\n }\n }\n\n // /**\n // * Get the contact filtering data.\n // */\n // getFilterData() {\n // return this.m_filter;\n // }\n\n /**\n * Get the user data that was assigned in the fixture definition. Use this to\n * store your application specific data.\n */\n getUserData(): unknown {\n return this.m_userData;\n }\n\n /**\n * Set the user data. Use this to store your application specific data.\n */\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get the parent body of this fixture. This is null if the fixture is not\n * attached.\n */\n getBody(): Body {\n return this.m_body;\n }\n\n /**\n * Get the next fixture in the parent body's fixture list.\n */\n getNext(): Fixture | null {\n return this.m_next;\n }\n\n /**\n * Get the density of this fixture.\n */\n getDensity(): number {\n return this.m_density;\n }\n\n /**\n * Set the density of this fixture. This will _not_ automatically adjust the\n * mass of the body. You must call Body.resetMassData to update the body's mass.\n */\n setDensity(density: number): void {\n _ASSERT && console.assert(Number.isFinite(density) && density >= 0.0);\n this.m_density = density;\n }\n\n /**\n * Get the coefficient of friction, usually in the range [0,1].\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Set the coefficient of friction. This will not change the friction of\n * existing contacts.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the coefficient of restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Set the coefficient of restitution. This will not change the restitution of\n * existing contacts.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Test a point in world coordinates for containment in this fixture.\n */\n testPoint(p: Vec2Value): boolean {\n return this.m_shape.testPoint(this.m_body.getTransform(), p);\n }\n\n /**\n * Cast a ray against this shape.\n */\n rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean {\n return this.m_shape.rayCast(output, input, this.m_body.getTransform(), childIndex);\n }\n\n /**\n * Get the mass data for this fixture. The mass data is based on the density and\n * the shape. The rotational inertia is about the shape's origin. This operation\n * may be expensive.\n */\n getMassData(massData: MassData): void {\n this.m_shape.computeMass(massData, this.m_density);\n }\n\n /**\n * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a\n * more accurate AABB, compute it using the shape and the body transform.\n */\n getAABB(childIndex: number): AABB {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_proxies.length);\n return this.m_proxies[childIndex].aabb;\n }\n\n /**\n * These support body activation/deactivation.\n */\n createProxies(broadPhase: BroadPhase, xf: TransformValue): void {\n _ASSERT && console.assert(this.m_proxyCount == 0);\n\n // Create proxies in the broad-phase.\n this.m_proxyCount = this.m_shape.getChildCount();\n\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n this.m_shape.computeAABB(proxy.aabb, xf, i);\n proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy);\n }\n }\n\n destroyProxies(broadPhase: BroadPhase): void {\n // Destroy proxies in the broad-phase.\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n broadPhase.destroyProxy(proxy.proxyId);\n proxy.proxyId = null;\n }\n\n this.m_proxyCount = 0;\n }\n\n /**\n * Updates this fixture proxy in broad-phase (with combined AABB of current and\n * next transformation).\n */\n synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void {\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n // Compute an AABB that covers the swept shape (may miss some rotation\n // effect).\n this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex);\n this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex);\n\n proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2);\n\n matrix.subVec2(displacement, xf2.p, xf1.p);\n\n broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement);\n }\n }\n\n /**\n * Set the contact filtering data. This will not update contacts until the next\n * time step when either parent body is active and awake. This automatically\n * calls refilter.\n */\n setFilterData(filter: { groupIndex: number, categoryBits: number, maskBits: number }): void {\n this.m_filterGroupIndex = filter.groupIndex;\n this.m_filterCategoryBits = filter.categoryBits;\n this.m_filterMaskBits = filter.maskBits;\n this.refilter();\n }\n\n getFilterGroupIndex(): number {\n return this.m_filterGroupIndex;\n }\n\n setFilterGroupIndex(groupIndex: number): void {\n this.m_filterGroupIndex = groupIndex;\n this.refilter();\n }\n\n getFilterCategoryBits(): number {\n return this.m_filterCategoryBits;\n }\n\n setFilterCategoryBits(categoryBits: number): void {\n this.m_filterCategoryBits = categoryBits;\n this.refilter();\n }\n\n getFilterMaskBits(): number {\n return this.m_filterMaskBits;\n }\n\n setFilterMaskBits(maskBits: number): void {\n this.m_filterMaskBits = maskBits;\n this.refilter();\n }\n\n /**\n * Call this if you want to establish collision that was previously disabled by\n * ContactFilter.\n */\n refilter(): void {\n if (this.m_body == null) {\n return;\n }\n\n // Flag associated contacts for filtering.\n let edge = this.m_body.getContactList();\n while (edge) {\n const contact = edge.contact;\n const fixtureA = contact.getFixtureA();\n const fixtureB = contact.getFixtureB();\n if (fixtureA == this || fixtureB == this) {\n contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n\n const world = this.m_body.getWorld();\n\n if (world == null) {\n return;\n }\n\n // Touch each proxy so that new pairs may be created\n const broadPhase = world.m_broadPhase;\n for (let i = 0; i < this.m_proxyCount; ++i) {\n broadPhase.touchProxy(this.m_proxies[i].proxyId);\n }\n }\n\n /**\n * Implement this method to provide collision filtering, if you want finer\n * control over contact creation.\n *\n * Return true if contact calculations should be performed between these two\n * fixtures.\n *\n * Warning: for performance reasons this is only called when the AABBs begin to\n * overlap.\n */\n shouldCollide(that: Fixture): boolean {\n\n if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) {\n return that.m_filterGroupIndex > 0;\n }\n\n const collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0;\n const collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0;\n const collide = collideA && collideB;\n return collide;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Velocity } from \"./Velocity\";\nimport { Position } from \"./Position\";\nimport { Fixture, FixtureDef, FixtureOpt } from \"./Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { JointEdge } from \"./Joint\";\nimport { World } from \"./World\";\nimport { ContactEdge } from \"./Contact\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A static body does not move under simulation and behaves as if it has infinite mass.\n * Internally, zero is stored for the mass and the inverse mass.\n * Static bodies can be moved manually by the user.\n * A static body has zero velocity.\n * Static bodies do not collide with other static or kinematic bodies.\n * \n * A kinematic body moves under simulation according to its velocity.\n * Kinematic bodies do not respond to forces.\n * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity.\n * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass.\n * Kinematic bodies do not collide with other kinematic or static bodies.\n * \n * A dynamic body is fully simulated.\n * They can be moved manually by the user, but normally they move according to forces.\n * A dynamic body can collide with all body types.\n * A dynamic body always has finite, non-zero mass.\n * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate.\n */\nexport type BodyType = \"static\" | \"kinematic\" | \"dynamic\";\n\n/** @internal */ const STATIC = \"static\";\n/** @internal */ const KINEMATIC = \"kinematic\";\n/** @internal */ const DYNAMIC = \"dynamic\";\n\n/** @internal */ const oldCenter = matrix.vec2(0, 0);\n/** @internal */ const localCenter = matrix.vec2(0, 0);\n/** @internal */ const shift = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n\nexport interface BodyDef {\n /**\n * Body types are static, kinematic, or dynamic. Note: if a dynamic\n * body would have zero mass, the mass is set to one.\n */\n type?: BodyType;\n /**\n * The world position of the body. Avoid creating bodies at the\n * origin since this can lead to many overlapping shapes.\n */\n position?: Vec2Value;\n /**\n * The world angle of the body in radians.\n */\n angle?: number;\n /**\n * The linear velocity of the body's origin in world co-ordinates.\n */\n linearVelocity?: Vec2Value;\n angularVelocity?: number;\n /**\n * Linear damping is use to reduce the linear velocity. The\n * damping parameter can be larger than 1.0 but the damping effect becomes\n * sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n linearDamping?: number;\n /**\n * Angular damping is use to reduce the angular velocity.\n * The damping parameter can be larger than 1.0 but the damping effect\n * becomes sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n angularDamping?: number;\n /**\n * Should this body be prevented from rotating? Useful for characters.\n */\n fixedRotation?: boolean;\n /**\n * Is this a fast moving body that should be prevented from\n * tunneling through other moving bodies? Note that all bodies are\n * prevented from tunneling through kinematic and static bodies. This\n * setting is only considered on dynamic bodies. Warning: You should use\n * this flag sparingly since it increases processing time.\n */\n bullet?: boolean;\n gravityScale?: number;\n /**\n * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage.\n */\n allowSleep?: boolean;\n /**\n * Is this body initially awake or sleeping?\n */\n awake?: boolean;\n /**\n * Does this body start out active?\n */\n active?: boolean;\n userData?: any;\n}\n\n/** @internal */ const BodyDefDefault: BodyDef = {\n type : STATIC,\n position : Vec2.zero(),\n angle : 0.0,\n\n linearVelocity : Vec2.zero(),\n angularVelocity : 0.0,\n\n linearDamping : 0.0,\n angularDamping : 0.0,\n\n fixedRotation : false,\n bullet : false,\n gravityScale : 1.0,\n\n allowSleep : true,\n awake : true,\n active : true,\n\n userData : null\n};\n\n/**\n * MassData This holds the mass data computed for a shape.\n */\nexport interface MassData {\n /** The mass of the shape, usually in kilograms. */\n mass: number;\n /** The position of the shape's centroid relative to the shape's origin. */\n center: Vec2Value;\n /** The rotational inertia of the shape about the local origin. */\n I: number;\n}\n\n/**\n * A rigid body composed of one or more fixtures.\n *\n * To create a new Body use {@link World.createBody}.\n */\nexport class Body {\n /** @hidden */\n static readonly STATIC: BodyType = \"static\";\n /** @hidden */\n static readonly KINEMATIC: BodyType = \"kinematic\";\n /** @hidden */\n static readonly DYNAMIC: BodyType = \"dynamic\";\n\n /** @internal */ m_world: World;\n /** @internal */ m_awakeFlag: boolean;\n /** @internal */ m_autoSleepFlag: boolean;\n /** @internal */ m_bulletFlag: boolean;\n /** @internal */ m_fixedRotationFlag: boolean;\n /** @internal */ m_activeFlag: boolean;\n /** @internal */ m_islandFlag: boolean;\n /** @internal */ m_toiFlag: boolean;\n /** @internal */ m_userData: unknown;\n /** @internal */ m_type: BodyType;\n /** @internal */ m_mass: number;\n /** @internal */ m_invMass: number;\n /** @internal Rotational inertia about the center of mass. */\n m_I: number;\n /** @internal */ m_invI: number;\n /** @internal the body origin transform */\n m_xf: Transform;\n /** @internal the swept motion for CCD */\n m_sweep: Sweep;\n // position and velocity correction\n /** @internal */ c_velocity: Velocity;\n /** @internal */ c_position: Position;\n /** @internal */ m_force: Vec2;\n /** @internal */ m_torque: number;\n /** @internal */ m_linearVelocity: Vec2;\n /** @internal */ m_angularVelocity: number;\n /** @internal */ m_linearDamping: number;\n /** @internal */ m_angularDamping: number;\n /** @internal */ m_gravityScale: number;\n /** @internal */ m_sleepTime: number;\n /** @internal */ m_jointList: JointEdge | null;\n /** @internal */ m_contactList: ContactEdge | null;\n /** @internal */ m_fixtureList: Fixture | null;\n /** @internal */ m_prev: Body | null;\n /** @internal */ m_next: Body | null;\n /** @internal */ m_destroyed: boolean;\n\n /** @hidden Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @internal */\n constructor(world: World, def: BodyDef) {\n def = options(def, BodyDefDefault);\n\n _ASSERT && console.assert(Vec2.isValid(def.position));\n _ASSERT && console.assert(Vec2.isValid(def.linearVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angle));\n _ASSERT && console.assert(Number.isFinite(def.angularVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angularDamping) && def.angularDamping >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.linearDamping) && def.linearDamping >= 0.0);\n\n this.m_world = world;\n\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\n this.m_islandFlag = false;\n this.m_toiFlag = false;\n\n this.m_userData = def.userData;\n this.m_type = def.type;\n\n if (this.m_type == DYNAMIC) {\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n } else {\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n }\n\n // Rotational inertia about the center of mass.\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n // the body origin transform\n this.m_xf = Transform.identity();\n this.m_xf.p.setVec2(def.position);\n this.m_xf.q.setAngle(def.angle);\n\n // the swept motion for CCD\n this.m_sweep = new Sweep();\n this.m_sweep.setTransform(this.m_xf);\n\n // position and velocity correction\n this.c_velocity = new Velocity();\n this.c_position = new Position();\n\n this.m_force = Vec2.zero();\n this.m_torque = 0.0;\n\n this.m_linearVelocity = Vec2.clone(def.linearVelocity);\n this.m_angularVelocity = def.angularVelocity;\n\n this.m_linearDamping = def.linearDamping;\n this.m_angularDamping = def.angularDamping;\n this.m_gravityScale = def.gravityScale;\n\n this.m_sleepTime = 0.0;\n\n this.m_jointList = null;\n this.m_contactList = null;\n this.m_fixtureList = null;\n\n this.m_prev = null;\n this.m_next = null;\n\n this.m_destroyed = false;\n }\n\n /** @internal */\n _serialize(): object {\n const fixtures = [];\n for (let 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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): Body {\n const body = new Body(world, data);\n\n if (data.fixtures) {\n for (let i = data.fixtures.length - 1; i >= 0; i--) {\n const fixture = restore(Fixture, data.fixtures[i], body);\n body._addFixture(fixture);\n }\n }\n return body;\n }\n\n isWorldLocked(): boolean {\n return this.m_world && this.m_world.isLocked() ? true : false;\n }\n\n getWorld(): World {\n return this.m_world;\n }\n\n getNext(): Body | null {\n return this.m_next;\n }\n\n setUserData(data: any): void {\n this.m_userData = data;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n getFixtureList(): Fixture | null {\n return this.m_fixtureList;\n }\n\n getJointList(): JointEdge | null {\n return this.m_jointList;\n }\n\n /**\n * Warning: this list changes during the time step and you may miss some\n * collisions if you don't use ContactListener.\n */\n getContactList(): ContactEdge | null {\n return this.m_contactList;\n }\n\n isStatic(): boolean {\n return this.m_type == STATIC;\n }\n\n isDynamic(): boolean {\n return this.m_type == DYNAMIC;\n }\n\n isKinematic(): boolean {\n return this.m_type == KINEMATIC;\n }\n\n /**\n * This will alter the mass and velocity.\n */\n setStatic(): Body {\n this.setType(STATIC);\n return this;\n }\n\n setDynamic(): Body {\n this.setType(DYNAMIC);\n return this;\n }\n\n setKinematic(): Body {\n this.setType(KINEMATIC);\n return this;\n }\n\n /**\n * Get the type of the body.\n */\n getType(): BodyType {\n return this.m_type;\n }\n\n /**\n * Set the type of the body to \"static\", \"kinematic\" or \"dynamic\".\n * @param type The type of the body.\n */\n setType(type: BodyType): void {\n _ASSERT && console.assert(type === STATIC || type === KINEMATIC || type === DYNAMIC);\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type == type) {\n return;\n }\n\n this.m_type = type;\n\n this.resetMassData();\n\n if (this.m_type == STATIC) {\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_sweep.forward();\n this.synchronizeFixtures();\n }\n\n this.setAwake(true);\n\n this.m_force.setZero();\n this.m_torque = 0.0;\n\n // Delete the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n\n // Touch the proxies so that new contacts will be created (when appropriate)\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n for (let i = 0; i < f.m_proxyCount; ++i) {\n broadPhase.touchProxy(f.m_proxies[i].proxyId);\n }\n }\n }\n\n isBullet(): boolean {\n return this.m_bulletFlag;\n }\n\n /**\n * Should this body be treated like a bullet for continuous collision detection?\n */\n setBullet(flag: boolean): void {\n this.m_bulletFlag = !!flag;\n }\n\n isSleepingAllowed(): boolean {\n return this.m_autoSleepFlag;\n }\n\n setSleepingAllowed(flag: boolean): void {\n this.m_autoSleepFlag = !!flag;\n if (this.m_autoSleepFlag == false) {\n this.setAwake(true);\n }\n }\n\n isAwake(): boolean {\n return this.m_awakeFlag;\n }\n\n /**\n * Set the sleep state of the body. A sleeping body has very low CPU cost.\n *\n * @param flag Set to true to wake the body, false to put it to sleep.\n */\n setAwake(flag: boolean): void {\n if (flag) {\n this.m_awakeFlag = true;\n this.m_sleepTime = 0.0;\n } else {\n this.m_awakeFlag = false;\n this.m_sleepTime = 0.0;\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_force.setZero();\n this.m_torque = 0.0;\n }\n }\n\n isActive(): boolean {\n return this.m_activeFlag;\n }\n\n /**\n * Set the active state of the body. An inactive body is not simulated and\n * cannot be collided with or woken up. If you pass a flag of true, all fixtures\n * will be added to the broad-phase. If you pass a flag of false, all fixtures\n * will be removed from the broad-phase and all contacts will be destroyed.\n * Fixtures and joints are otherwise unaffected.\n *\n * You may continue to create/destroy fixtures and joints on inactive bodies.\n * Fixtures on an inactive body are implicitly inactive and will not participate\n * in collisions, ray-casts, or queries. Joints connected to an inactive body\n * are implicitly inactive. An inactive body is still owned by a World object\n * and remains\n */\n setActive(flag: boolean): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (flag == this.m_activeFlag) {\n return;\n }\n\n this.m_activeFlag = !!flag;\n\n if (this.m_activeFlag) {\n // Create all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.createProxies(broadPhase, this.m_xf);\n }\n\t\t // Contacts are created at the beginning of the next\n\t\t this.m_world.m_newFixture = true;\n } else {\n // Destroy all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.destroyProxies(broadPhase);\n }\n\n // Destroy the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n }\n }\n\n isFixedRotation(): boolean {\n return this.m_fixedRotationFlag;\n }\n\n /**\n * Set this body to have fixed rotation. This causes the mass to be reset.\n */\n setFixedRotation(flag: boolean): void {\n if (this.m_fixedRotationFlag == flag) {\n return;\n }\n\n this.m_fixedRotationFlag = !!flag;\n\n this.m_angularVelocity = 0.0;\n\n this.resetMassData();\n }\n\n /**\n * Get the world transform for the body's origin.\n */\n getTransform(): Transform {\n return this.m_xf;\n }\n\n /**\n * Set the position of the body's origin and rotation. Manipulating a body's\n * transform may cause non-physical behavior. Note: contacts are updated on the\n * next call to World.step.\n *\n * @param position The world position of the body's local origin.\n * @param angle The world rotation in radians.\n */\n setTransform(position: Vec2Value, angle: number): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n this.m_xf.setNum(position, angle);\n this.m_sweep.setTransform(this.m_xf);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let 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\n synchronizeTransform(): void {\n this.m_sweep.getTransform(this.m_xf, 1);\n }\n\n /**\n * Update fixtures in broad-phase.\n */\n synchronizeFixtures(): void {\n this.m_sweep.getTransform(xf, 0);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.synchronize(broadPhase, xf, this.m_xf);\n }\n }\n\n /**\n * Used in TOI.\n */\n advance(alpha: number): void {\n // Advance to the new safe time. This doesn't sync the broad-phase.\n this.m_sweep.advance(alpha);\n matrix.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\n /**\n * Get the world position for the body's origin.\n */\n getPosition(): Vec2 {\n return this.m_xf.p;\n }\n\n setPosition(p: Vec2Value): void {\n this.setTransform(p, this.m_sweep.a);\n }\n\n /**\n * Get the current world rotation angle in radians.\n */\n getAngle(): number {\n return this.m_sweep.a;\n }\n\n setAngle(angle: number): void {\n this.setTransform(this.m_xf.p, angle);\n }\n\n /**\n * Get the world position of the center of mass.\n */\n getWorldCenter(): Vec2 {\n return this.m_sweep.c;\n }\n\n /**\n * Get the local position of the center of mass.\n */\n getLocalCenter(): Vec2 {\n return this.m_sweep.localCenter;\n }\n\n /**\n * Get the linear velocity of the center of mass.\n *\n * @return the linear velocity of the center of mass.\n */\n getLinearVelocity(): Vec2 {\n return this.m_linearVelocity;\n }\n\n /**\n * Get the world linear velocity of a world point attached to this body.\n *\n * @param worldPoint A point in world coordinates.\n */\n getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2 {\n const localCenter = Vec2.sub(worldPoint, this.m_sweep.c);\n return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity,\n localCenter));\n }\n\n /**\n * Get the world velocity of a local point.\n *\n * @param localPoint A point in local coordinates.\n */\n getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2 {\n return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint));\n }\n\n /**\n * Set the linear velocity of the center of mass.\n *\n * @param v The new linear velocity of the center of mass.\n */\n setLinearVelocity(v: Vec2Value): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (Vec2.dot(v, v) > 0.0) {\n this.setAwake(true);\n }\n this.m_linearVelocity.setVec2(v);\n }\n\n /**\n * Get the angular velocity.\n *\n * @returns the angular velocity in radians/second.\n */\n getAngularVelocity(): number {\n return this.m_angularVelocity;\n }\n\n /**\n * Set the angular velocity.\n *\n * @param w The new angular velocity in radians/second.\n */\n setAngularVelocity(w: number): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (w * w > 0.0) {\n this.setAwake(true);\n }\n this.m_angularVelocity = w;\n }\n\n getLinearDamping(): number {\n return this.m_linearDamping;\n }\n\n setLinearDamping(linearDamping: number): void {\n this.m_linearDamping = linearDamping;\n }\n\n getAngularDamping(): number {\n return this.m_angularDamping;\n }\n\n setAngularDamping(angularDamping: number): void {\n this.m_angularDamping = angularDamping;\n }\n\n getGravityScale(): number {\n return this.m_gravityScale;\n }\n\n /**\n * Scale the gravity applied to this body.\n */\n setGravityScale(scale: number): void {\n this.m_gravityScale = scale;\n }\n\n /**\n * Get the total mass of the body.\n *\n * @returns The mass, usually in kilograms (kg).\n */\n getMass(): number {\n return this.m_mass;\n }\n\n /**\n * Get the rotational inertia of the body about the local origin.\n *\n * @return the rotational inertia, usually in kg-m^2.\n */\n getInertia(): number {\n return this.m_I + this.m_mass\n * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter);\n }\n\n /**\n * Copy the mass data of the body to data.\n */\n getMassData(data: MassData): void {\n data.mass = this.m_mass;\n data.I = this.getInertia();\n matrix.copyVec2(data.center, this.m_sweep.localCenter);\n }\n\n /**\n * This resets the mass properties to the sum of the mass properties of the\n * fixtures. This normally does not need to be called unless you called\n * SetMassData to override the mass and you later want to reset the mass.\n */\n resetMassData(): void {\n // Compute mass data from shapes. Each shape has its own density.\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n matrix.zeroVec2(this.m_sweep.localCenter);\n\n // Static and kinematic bodies have zero mass.\n if (this.isStatic() || this.isKinematic()) {\n matrix.copyVec2(this.m_sweep.c0, this.m_xf.p);\n matrix.copyVec2(this.m_sweep.c, this.m_xf.p);\n this.m_sweep.a0 = this.m_sweep.a;\n return;\n }\n\n _ASSERT && console.assert(this.isDynamic());\n\n // Accumulate mass over all fixtures.\n matrix.zeroVec2(localCenter);\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n if (f.m_density == 0.0) {\n continue;\n }\n\n const massData: MassData = {\n mass: 0,\n center: matrix.vec2(0, 0),\n I: 0\n };\n f.getMassData(massData);\n this.m_mass += massData.mass;\n matrix.plusScaleVec2(localCenter, massData.mass, massData.center);\n this.m_I += massData.I;\n }\n\n // Compute center of mass.\n if (this.m_mass > 0.0) {\n this.m_invMass = 1.0 / this.m_mass;\n matrix.scaleVec2(localCenter, this.m_invMass, localCenter);\n\n } else {\n // Force all dynamic bodies to have a positive mass.\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n }\n\n if (this.m_I > 0.0 && this.m_fixedRotationFlag == false) {\n // Center the inertia about the center of mass.\n this.m_I -= this.m_mass * matrix.dotVec2(localCenter, localCenter);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n\n } else {\n this.m_I = 0.0;\n this.m_invI = 0.0;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(localCenter, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Set the mass properties to override the mass properties of the fixtures. Note\n * that this changes the center of mass position. Note that creating or\n * destroying fixtures can also alter the mass. This function has no effect if\n * the body isn't dynamic.\n *\n * @param massData The mass properties.\n */\n setMassData(massData: MassData): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n this.m_mass = massData.mass;\n if (this.m_mass <= 0.0) {\n this.m_mass = 1.0;\n }\n\n this.m_invMass = 1.0 / this.m_mass;\n\n if (massData.I > 0.0 && this.m_fixedRotationFlag == false) {\n this.m_I = massData.I - this.m_mass * matrix.dotVec2(massData.center, massData.center);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(massData.center, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Apply a force at a world point. If the force is not applied at the center of\n * mass, it will generate a torque and affect the angular velocity. This wakes\n * up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyForce(force: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping.\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), force);\n }\n }\n\n /**\n * Apply a force to the center of mass. This wakes up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param wake Also wake up the body\n */\n applyForceToCenter(force: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n }\n }\n\n /**\n * Apply a torque. This affects the angular velocity without affecting the\n * linear velocity of the center of mass. This wakes up the body.\n *\n * @param torque About the z-axis (out of the screen), usually in N-m.\n * @param wake Also wake up the body\n */\n applyTorque(torque: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_torque += torque;\n }\n }\n\n /**\n * Apply an impulse at a point. This immediately modifies the velocity. It also\n * modifies the angular velocity if the point of application is not at the\n * center of mass. This wakes up the body.\n *\n * @param impulse The world impulse vector, usually in N-seconds or kg-m/s.\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n\n // Don't accumulate velocity if the body is sleeping\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(point, this.m_sweep.c), impulse);\n }\n }\n\n /**\n * Apply an angular impulse.\n *\n * @param impulse The angular impulse in units of kg*m*m/s\n * @param wake Also wake up the body\n */\n applyAngularImpulse(impulse: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate velocity if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_angularVelocity += this.m_invI * impulse;\n }\n }\n\n /**\n * This is used to test if two bodies should collide.\n * \n * Bodies do not collide when:\n * - Neither of them is dynamic\n * - They are connected by a joint with collideConnected == false\n */\n shouldCollide(that: Body): boolean {\n // At least one body should be dynamic.\n if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) {\n return false;\n }\n // Does a joint prevent collision?\n for (let 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\n /** @internal Used for deserialize. */\n _addFixture(fixture: Fixture): Fixture {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.createProxies(broadPhase, this.m_xf);\n }\n\n fixture.m_next = this.m_fixtureList;\n this.m_fixtureList = fixture;\n\n // Adjust mass properties if needed.\n if (fixture.m_density > 0.0) {\n this.resetMassData();\n }\n\n // Let the world know we have a new fixture. This will cause new contacts\n // to be created at the beginning of the next time step.\n this.m_world.m_newFixture = true;\n\n return fixture;\n }\n\n /**\n * Creates a fixture and attach it to this body.\n *\n * If the density is non-zero, this function automatically updates the mass of\n * the body.\n *\n * Contacts are not created until the next time step.\n *\n * Warning: This function is locked during callbacks.\n */\n createFixture(def: FixtureDef): Fixture;\n createFixture(shape: Shape, opt?: FixtureOpt): Fixture;\n createFixture(shape: Shape, density?: number): Fixture;\n // tslint:disable-next-line:typedef\n createFixture(shape, fixdef?) {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n const fixture = new Fixture(this, shape, fixdef);\n this._addFixture(fixture);\n return fixture;\n }\n\n /**\n * Destroy a fixture. This removes the fixture from the broad-phase and destroys\n * all contacts associated with this fixture. This will automatically adjust the\n * mass of the body if the body is dynamic and the fixture has positive density.\n * All fixtures attached to a body are implicitly destroyed when the body is\n * destroyed.\n *\n * Warning: This function is locked during callbacks.\n *\n * @param fixture The fixture to be removed.\n */\n destroyFixture(fixture: Fixture): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n _ASSERT && console.assert(fixture.m_body == this);\n\n // Remove the fixture from this body's singly linked list.\n let found = false;\n if (this.m_fixtureList === fixture) {\n this.m_fixtureList = fixture.m_next;\n found = true;\n\n } else {\n let node = this.m_fixtureList;\n while (node != null) {\n if (node.m_next === fixture) {\n node.m_next = fixture.m_next;\n found = true;\n break;\n }\n node = node.m_next;\n }\n }\n\n // You tried to remove a shape that is not attached to this body.\n _ASSERT && console.assert(found);\n\n // Destroy any contacts associated with the fixture.\n let edge = this.m_contactList;\n while (edge) {\n const c = edge.contact;\n edge = edge.next;\n\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n\n if (fixture == fixtureA || fixture == fixtureB) {\n // This destroys the contact and removes it from\n // this body's contact list.\n this.m_world.destroyContact(c);\n }\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.destroyProxies(broadPhase);\n }\n\n fixture.m_body = null;\n fixture.m_next = null;\n\n this.m_world.publish(\"remove-fixture\", fixture);\n\n // Reset the mass data.\n this.resetMassData();\n }\n\n /**\n * Get the corresponding world point of a local point.\n */\n getWorldPoint(localPoint: Vec2Value): Vec2 {\n return Transform.mulVec2(this.m_xf, localPoint);\n }\n\n /**\n * Get the corresponding world vector of a local vector.\n */\n getWorldVector(localVector: Vec2Value): Vec2 {\n return Rot.mulVec2(this.m_xf.q, localVector);\n }\n\n /**\n * Gets the corresponding local point of a world point.\n */\n getLocalPoint(worldPoint: Vec2Value): Vec2 {\n return Transform.mulTVec2(this.m_xf, worldPoint);\n }\n\n /**\n * Gets the corresponding local vector of a world vector.\n */\n getLocalVector(worldVector: Vec2Value): Vec2 {\n return Rot.mulTVec2(this.m_xf.q, worldVector);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2, Vec2Value } from \"../common/Vec2\";\nimport type { Body } from \"./Body\";\nimport { TimeStep } from \"./Solver\";\nimport { Style } from \"../util/Testbed\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/**\n * A joint edge is used to connect bodies and joints together in a joint graph\n * where each body is a node and each joint is an edge. A joint edge belongs to\n * a doubly linked list maintained in each attached body. Each joint has two\n * joint nodes, one for each attached body.\n */\nexport class JointEdge {\n /**\n * provides quick access to the other body attached.\n */\n other: Body | null = null;\n /**\n * the joint\n */\n joint: Joint | null = null;\n /**\n * prev the previous joint edge in the body's joint list\n */\n prev: JointEdge | null = null;\n /**\n * the next joint edge in the body's joint list\n */\n next: JointEdge | null = null;\n}\n\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointOpt {\n /**\n * Use this to attach application specific data to your joints.\n */\n userData?: any;\n /**\n * Set this flag to true if the attached bodies\n * should collide.\n */\n collideConnected?: boolean;\n}\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointDef extends JointOpt {\n /**\n * The first attached body.\n */\n bodyA: Body;\n /**\n * The second attached body.\n */\n bodyB: Body;\n}\n\n/** @internal */ const DEFAULTS = {\n userData : null,\n collideConnected : false\n};\n\n/**\n * The base joint class. Joints are used to constraint two bodies together in\n * various fashions. Some joints also feature limits and motors.\n */\nexport abstract class Joint {\n\n /** @internal */ m_type: string = \"unknown-joint\";\n\n /** @internal */ m_bodyA: Body;\n /** @internal */ m_bodyB: Body;\n\n /** @internal */ m_collideConnected: boolean;\n\n /** @internal */ m_prev: Joint | null = null;\n /** @internal */ m_next: Joint | null = null;\n\n /** @internal */ m_edgeA: JointEdge = new JointEdge();\n /** @internal */ m_edgeB: JointEdge = new JointEdge();\n\n /** @internal */ m_islandFlag: boolean = false;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(def: JointDef);\n constructor(def: JointOpt, bodyA: Body, bodyB: Body);\n constructor(def: JointDef | JointOpt, bodyA?: Body, bodyB?: Body) {\n bodyA = \"bodyA\" in def ? def.bodyA : bodyA;\n bodyB = \"bodyB\" in def ? def.bodyB : bodyB;\n\n _ASSERT && console.assert(!!bodyA);\n _ASSERT && console.assert(!!bodyB);\n _ASSERT && console.assert(bodyA != bodyB);\n\n this.m_bodyA = bodyA!;\n this.m_bodyB = bodyB!;\n\n this.m_collideConnected = !!def.collideConnected;\n this.m_userData = def.userData;\n }\n\n /**\n * Short-cut function to determine if either body is inactive.\n */\n isActive(): boolean {\n return this.m_bodyA.isActive() && this.m_bodyB.isActive();\n }\n\n /**\n * Get the type of the concrete joint.\n */\n getType(): string {\n return this.m_type;\n }\n\n /**\n * Get the first body attached to this joint.\n */\n getBodyA(): Body {\n return this.m_bodyA;\n }\n\n /**\n * Get the second body attached to this joint.\n */\n getBodyB(): Body {\n return this.m_bodyB;\n }\n\n /**\n * Get the next joint the world joint list.\n */\n getNext(): Joint {\n return this.m_next;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get collide connected. Note: modifying the collide connect flag won't work\n * correctly because the flag is only checked when fixture AABBs begin to\n * overlap.\n */\n getCollideConnected(): boolean {\n return this.m_collideConnected;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n abstract getAnchorA(): Vec2;\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n abstract getAnchorB(): Vec2;\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n abstract getReactionForce(inv_dt: number): Vec2;\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n abstract getReactionTorque(inv_dt: number): number;\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {}\n\n abstract initVelocityConstraints(step: TimeStep): void;\n\n abstract solveVelocityConstraints(step: TimeStep): void;\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n abstract solvePositionConstraints(step: TimeStep): boolean;\n\n /**\n * @hidden @experimental\n * Update joint with new props.\n */\n abstract _reset(def: Partial): void;\n\n /**\n * @internal @deprecated\n * Temporary for backward compatibility, will be removed.\n */\n _resetAnchors(def: any): void {\n return this._reset(def);\n }\n}\n","/** @hidden */\nexport const stats = {\n gjkCalls: 0,\n gjkIters: 0,\n gjkMaxIters: 0,\n\n toiTime: 0,\n toiMaxTime: 0,\n toiCalls: 0,\n toiIters: 0,\n toiMaxIters: 0,\n toiRootIters: 0,\n toiMaxRootIters: 0,\n\n toString(newline?: string): string {\n newline = typeof newline === \"string\" ? newline : \"\\n\";\n let string = \"\";\n // tslint:disable-next-line:no-for-in\n for (const name in this) {\n if (typeof this[name] !== \"function\" && typeof this[name] !== \"object\") {\n string += name + \": \" + this[name] + newline;\n }\n }\n return string;\n }\n};\n","/** @internal */\nexport const now = function(): number {\n return Date.now();\n};\n\n/** @internal */\nexport const diff = function(time: number): number {\n return Date.now() - time;\n};\n\n/** @internal */\nexport default {\n now,\n diff,\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport { Shape } from \"./Shape\";\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Transform, TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const e12 = matrix.vec2(0, 0);\n/** @internal */ const e13 = matrix.vec2(0, 0);\n/** @internal */ const e23 = matrix.vec2(0, 0);\n/** @internal */ const temp1 = matrix.vec2(0, 0);\n/** @internal */ const temp2 = matrix.vec2(0, 0);\n\n/**\n * GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates.\n */\n\nstats.gjkCalls = 0;\nstats.gjkIters = 0;\nstats.gjkMaxIters = 0;\n\n/**\n * Input for Distance. You have to option to use the shape radii in the\n * computation. Even\n */\nexport class DistanceInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n useRadii = false;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n this.useRadii = false;\n }\n}\n\n/**\n * Output for Distance.\n */\nexport class DistanceOutput {\n /** closest point on shapeA */\n pointA = matrix.vec2(0, 0);\n /** closest point on shapeB */\n pointB = matrix.vec2(0, 0);\n distance = 0;\n /** iterations number of GJK iterations used */\n iterations = 0;\n recycle() {\n matrix.zeroVec2(this.pointA);\n matrix.zeroVec2(this.pointB);\n this.distance = 0;\n this.iterations = 0;\n }\n}\n\n/**\n * Used to warm start Distance. Set count to zero on first call.\n */\nexport class SimplexCache {\n /** length or area */\n metric: number = 0;\n /** vertices on shape A */\n indexA: number[] = [];\n /** vertices on shape B */\n indexB: number[] = [];\n count: number = 0;\n recycle() {\n this.metric = 0;\n this.indexA.length = 0;\n this.indexB.length = 0;\n this.count = 0;\n }\n}\n\n/**\n * Compute the closest points between two shapes. Supports any combination of:\n * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On\n * the first call set SimplexCache.count to zero.\n */\nexport const Distance = function (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void {\n ++stats.gjkCalls;\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n // Initialize the simplex.\n // const simplex = new Simplex();\n simplex.recycle();\n simplex.readCache(cache, proxyA, xfA, proxyB, xfB);\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n const k_maxIters = Settings.maxDistanceIterations;\n\n // These store the vertices of the last simplex so that we\n // can check for duplicates and prevent cycling.\n const saveA = [];\n const saveB = []; // int[3]\n let saveCount = 0;\n\n // Main iteration loop.\n let iter = 0;\n while (iter < k_maxIters) {\n // Copy simplex so we can identify duplicates.\n saveCount = simplex.m_count;\n for (let i = 0; i < saveCount; ++i) {\n saveA[i] = vertices[i].indexA;\n saveB[i] = vertices[i].indexB;\n }\n\n simplex.solve();\n\n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count === 3) {\n break;\n }\n\n // Get search direction.\n const d = simplex.getSearchDirection();\n\n // Ensure the search direction is numerically fit.\n if (matrix.lengthSqrVec2(d) < EPSILON * EPSILON) {\n // The origin is probably contained by a line segment\n // or triangle. Thus the shapes are overlapped.\n\n // We can't return zero here even though there may be overlap.\n // In case the simplex is a point, segment, or triangle it is difficult\n // to determine if the origin is contained in the CSO or very close to it.\n break;\n }\n\n // Compute a tentative new simplex vertex using support points.\n const vertex = vertices[simplex.m_count]; // SimplexVertex\n\n vertex.indexA = proxyA.getSupport(matrix.derotVec2(temp, xfA.q, matrix.scaleVec2(temp, -1, d)));\n matrix.transformVec2(vertex.wA, xfA, proxyA.getVertex(vertex.indexA));\n\n vertex.indexB = proxyB.getSupport(matrix.derotVec2(temp, xfB.q, d));\n matrix.transformVec2(vertex.wB, xfB, proxyB.getVertex(vertex.indexB));\n\n matrix.subVec2(vertex.w, vertex.wB, vertex.wA);\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n ++stats.gjkIters;\n\n // Check for duplicate support points. This is the main termination\n // criteria.\n let duplicate = false;\n for (let i = 0; i < saveCount; ++i) {\n if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) {\n duplicate = true;\n break;\n }\n }\n\n // If we found a duplicate support point we must exit to avoid cycling.\n if (duplicate) {\n break;\n }\n\n // New vertex is ok and needed.\n ++simplex.m_count;\n }\n\n stats.gjkMaxIters = math_max(stats.gjkMaxIters, iter);\n\n // Prepare output.\n simplex.getWitnessPoints(output.pointA, output.pointB);\n output.distance = matrix.distVec2(output.pointA, output.pointB);\n output.iterations = iter;\n\n // Cache the simplex.\n simplex.writeCache(cache);\n\n // Apply radii if requested.\n if (input.useRadii) {\n const rA = proxyA.m_radius;\n const rB = proxyB.m_radius;\n\n if (output.distance > rA + rB && output.distance > EPSILON) {\n // Shapes are still no overlapped.\n // Move the witness points to the outer surface.\n output.distance -= rA + rB;\n matrix.subVec2(normal, output.pointB, output.pointA);\n matrix.normalizeVec2(normal);\n matrix.plusScaleVec2(output.pointA, rA, normal);\n matrix.minusScaleVec2(output.pointB, rB, normal);\n } else {\n // Shapes are overlapped when radii are considered.\n // Move the witness points to the middle.\n const p = matrix.subVec2(temp, output.pointA, output.pointB);\n matrix.copyVec2(output.pointA, p);\n matrix.copyVec2(output.pointB, p);\n output.distance = 0.0;\n }\n }\n};\n\n/**\n * A distance proxy is used by the GJK algorithm. It encapsulates any shape.\n */\nexport class DistanceProxy {\n /** @internal */ m_vertices: Vec2Value[] = [];\n // todo: remove this?\n /** @internal */ m_count = 0;\n /** @internal */ m_radius = 0;\n\n recycle() {\n this.m_vertices.length = 0;\n this.m_count = 0;\n this.m_radius = 0;\n }\n\n /**\n * Get the vertex count.\n */\n getVertexCount(): number {\n return this.m_count;\n }\n\n /**\n * Get a vertex by index. Used by Distance.\n */\n getVertex(index: number): Vec2Value {\n _ASSERT && console.assert(0 <= index && index < this.m_count);\n return this.m_vertices[index];\n }\n\n /**\n * Get the supporting vertex index in the given direction.\n */\n getSupport(d: Vec2Value): number {\n let bestIndex = -1;\n let bestValue = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const value = matrix.dotVec2(this.m_vertices[i], d);\n if (value > bestValue) {\n bestIndex = i;\n bestValue = value;\n }\n }\n return bestIndex;\n }\n\n /**\n * Get the supporting vertex in the given direction.\n */\n getSupportVertex(d: Vec2Value): Vec2Value {\n return this.m_vertices[this.getSupport(d)];\n }\n\n /**\n * Initialize the proxy using the given shape. The shape must remain in scope\n * while the proxy is in use.\n */\n set(shape: Shape, index: number): void {\n // TODO remove, use shape instead\n _ASSERT && console.assert(typeof shape.computeDistanceProxy === \"function\");\n shape.computeDistanceProxy(this, index);\n }\n\n /**\n * Initialize the proxy using a vertex cloud and radius. The vertices\n * must remain in scope while the proxy is in use.\n */\n setVertices(vertices: Vec2Value[], count: number, radius: number) {\n this.m_vertices = vertices;\n this.m_count = count;\n this.m_radius = radius;\n }\n}\n\nclass SimplexVertex {\n /** support point in proxyA */\n wA = matrix.vec2(0, 0);\n /** wA index */\n indexA = 0;\n\n /** support point in proxyB */\n wB = matrix.vec2(0, 0);\n /** wB index */\n indexB = 0;\n\n /** wB - wA; */\n w = matrix.vec2(0, 0);\n /** barycentric coordinate for closest point */\n a = 0;\n\n recycle() {\n this.indexA = 0;\n this.indexB = 0;\n matrix.zeroVec2(this.wA);\n matrix.zeroVec2(this.wB);\n matrix.zeroVec2(this.w);\n this.a = 0;\n }\n set(v: SimplexVertex): void {\n this.indexA = v.indexA;\n this.indexB = v.indexB;\n matrix.copyVec2(this.wA, v.wA);\n matrix.copyVec2(this.wB, v.wB);\n matrix.copyVec2(this.w, v.w);\n this.a = v.a;\n }\n}\n\n/** @internal */ const searchDirection_reuse = matrix.vec2(0, 0);\n/** @internal */ const closestPoint_reuse = matrix.vec2(0, 0); \n\nclass Simplex {\n m_v1 = new SimplexVertex();\n m_v2 = new SimplexVertex();\n m_v3 = new SimplexVertex();\n m_v = [this.m_v1, this.m_v2, this.m_v3];\n m_count: number;\n recycle() {\n this.m_v1.recycle();\n this.m_v2.recycle();\n this.m_v3.recycle();\n this.m_count = 0;\n }\n\n /** @internal */ toString(): string {\n if (this.m_count === 3) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y,\n this.m_v3.a, this.m_v3.wA.x, this.m_v3.wA.y, this.m_v3.wB.x, this.m_v3.wB.y\n ].toString();\n\n } else if (this.m_count === 2) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y\n ].toString();\n\n } else if (this.m_count === 1) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y\n ].toString();\n\n } else {\n return \"+\" + this.m_count;\n }\n }\n\n readCache(cache: SimplexCache, proxyA: DistanceProxy, transformA: TransformValue, proxyB: DistanceProxy, transformB: TransformValue): void {\n _ASSERT && console.assert(cache.count <= 3);\n\n // Copy data from cache.\n this.m_count = cache.count;\n for (let i = 0; i < this.m_count; ++i) {\n const v = this.m_v[i];\n v.indexA = cache.indexA[i];\n v.indexB = cache.indexB[i];\n const wALocal = proxyA.getVertex(v.indexA);\n const wBLocal = proxyB.getVertex(v.indexB);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 0.0;\n }\n\n // Compute the new simplex metric, if it is substantially different than\n // old metric then flush the simplex.\n if (this.m_count > 1) {\n const metric1 = cache.metric;\n const metric2 = this.getMetric();\n if (metric2 < 0.5 * metric1 || 2.0 * metric1 < metric2 || metric2 < EPSILON) {\n // Reset the simplex.\n this.m_count = 0;\n }\n }\n\n // If the cache is empty or invalid...\n if (this.m_count === 0) {\n const v = this.m_v[0];\n v.indexA = 0;\n v.indexB = 0;\n const wALocal = proxyA.getVertex(0);\n const wBLocal = proxyB.getVertex(0);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 1.0;\n this.m_count = 1;\n }\n }\n\n writeCache(cache: SimplexCache): void {\n cache.metric = this.getMetric();\n cache.count = this.m_count;\n for (let i = 0; i < this.m_count; ++i) {\n cache.indexA[i] = this.m_v[i].indexA;\n cache.indexB[i] = this.m_v[i].indexB;\n }\n }\n\n getSearchDirection(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 1:\n return matrix.setVec2(searchDirection_reuse, -v1.w.x, -v1.w.y);\n\n case 2: {\n matrix.subVec2(e12, v2.w, v1.w);\n const sgn = -matrix.crossVec2Vec2(e12, v1.w);\n if (sgn > 0.0) {\n // Origin is left of e12.\n return matrix.setVec2(searchDirection_reuse, -e12.y, e12.x);\n } else {\n // Origin is right of e12.\n return matrix.setVec2(searchDirection_reuse, e12.y, -e12.x);\n }\n }\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(searchDirection_reuse);\n }\n }\n\n getClosestPoint(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n\n case 1:\n return matrix.copyVec2(closestPoint_reuse, v1.w);\n\n case 2:\n return matrix.combine2Vec2(closestPoint_reuse, v1.a, v1.w, v2.a, v2.w);\n\n case 3:\n return matrix.zeroVec2(closestPoint_reuse);\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n }\n }\n\n getWitnessPoints(pA: Vec2Value, pB: Vec2Value): void {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n break;\n\n case 1:\n matrix.copyVec2(pA, v1.wA);\n matrix.copyVec2(pB, v1.wB);\n break;\n\n case 2:\n matrix.combine2Vec2(pA, v1.a, v1.wA, v2.a, v2.wA);\n matrix.combine2Vec2(pB, v1.a, v1.wB, v2.a, v2.wB);\n break;\n\n case 3:\n matrix.combine3Vec2(pA, v1.a, v1.wA, v2.a, v2.wA, v3.a, v3.wA);\n matrix.copyVec2(pB, pA);\n break;\n\n default:\n _ASSERT && console.assert(false);\n break;\n }\n }\n\n getMetric(): number {\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return 0.0;\n\n case 1:\n return 0.0;\n\n case 2:\n return matrix.distVec2(this.m_v1.w, this.m_v2.w);\n\n case 3:\n return matrix.crossVec2Vec2(\n matrix.subVec2(temp1, this.m_v2.w, this.m_v1.w),\n matrix.subVec2(temp2, this.m_v3.w, this.m_v1.w),\n );\n\n default:\n _ASSERT && console.assert(false);\n return 0.0;\n }\n }\n\n solve(): void {\n switch (this.m_count) {\n case 1:\n break;\n\n case 2:\n this.solve2();\n break;\n\n case 3:\n this.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n }\n\n// Solve a line segment using barycentric coordinates.\n//\n// p = a1 * w1 + a2 * w2\n// a1 + a2 = 1\n//\n// The vector from the origin to the closest point on the line is\n// perpendicular to the line.\n// e12 = w2 - w1\n// dot(p, e) = 0\n// a1 * dot(w1, e) + a2 * dot(w2, e) = 0\n//\n// 2-by-2 linear system\n// [1 1 ][a1] = [1]\n// [w1.e12 w2.e12][a2] = [0]\n//\n// Define\n// d12_1 = dot(w2, e12)\n// d12_2 = -dot(w1, e12)\n// d12 = d12_1 + d12_2\n//\n// Solution\n// a1 = d12_1 / d12\n// a2 = d12_2 / d12\n solve2(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n matrix.subVec2(e12, w2, w1);\n\n // w1 region\n const d12_2 = -matrix.dotVec2(w1, e12);\n if (d12_2 <= 0.0) {\n // a2 <= 0, so we clamp it to 0\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // w2 region\n const d12_1 = matrix.dotVec2(w2, e12);\n if (d12_1 <= 0.0) {\n // a1 <= 0, so we clamp it to 0\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // Must be in e12 region.\n const inv_d12 = 1.0 / (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\n// Possible regions:\n// - points[2]\n// - edge points[0]-points[2]\n// - edge points[1]-points[2]\n// - inside the triangle\n solve3(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n const w3 = this.m_v3.w;\n\n // Edge12\n // [1 1 ][a1] = [1]\n // [w1.e12 w2.e12][a2] = [0]\n // a3 = 0\n matrix.subVec2(e12, w2, w1);\n const w1e12 = matrix.dotVec2(w1, e12);\n const w2e12 = matrix.dotVec2(w2, e12);\n const d12_1 = w2e12;\n const d12_2 = -w1e12;\n\n // Edge13\n // [1 1 ][a1] = [1]\n // [w1.e13 w3.e13][a3] = [0]\n // a2 = 0\n matrix.subVec2(e13, w3, w1);\n const w1e13 = matrix.dotVec2(w1, e13);\n const w3e13 = matrix.dotVec2(w3, e13);\n const d13_1 = w3e13;\n const d13_2 = -w1e13;\n\n // Edge23\n // [1 1 ][a2] = [1]\n // [w2.e23 w3.e23][a3] = [0]\n // a1 = 0\n matrix.subVec2(e23, w3, w2);\n const w2e23 = matrix.dotVec2(w2, e23);\n const w3e23 = matrix.dotVec2(w3, e23);\n const d23_1 = w3e23;\n const d23_2 = -w2e23;\n\n // Triangle123\n const n123 = matrix.crossVec2Vec2(e12, e13);\n\n const d123_1 = n123 * matrix.crossVec2Vec2(w2, w3);\n const d123_2 = n123 * matrix.crossVec2Vec2(w3, w1);\n const d123_3 = n123 * matrix.crossVec2Vec2(w1, w2);\n\n // w1 region\n if (d12_2 <= 0.0 && d13_2 <= 0.0) {\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // e12\n if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) {\n const inv_d12 = 1.0 / (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\n // e13\n if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) {\n const inv_d13 = 1.0 / (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\n // w2 region\n if (d12_1 <= 0.0 && d23_2 <= 0.0) {\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // w3 region\n if (d13_1 <= 0.0 && d23_1 <= 0.0) {\n this.m_v3.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v3);\n return;\n }\n\n // e23\n if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) {\n const inv_d23 = 1.0 / (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\n // Must be in triangle123\n const inv_d123 = 1.0 / (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}\n\n/** @internal */ const simplex = new Simplex();\n\n/** @internal */ const input = new DistanceInput();\n/** @internal */ const cache = new SimplexCache();\n/** @internal */ const output = new DistanceOutput();\n\n/**\n * Determine if two generic shapes overlap.\n */\nexport const testOverlap = function (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue): boolean {\n input.recycle();\n input.proxyA.set(shapeA, indexA);\n input.proxyB.set(shapeB, indexB);\n matrix.copyTransform(input.transformA, xfA);\n matrix.copyTransform(input.transformB, xfB);\n input.useRadii = true;\n\n output.recycle();\n cache.recycle();\n\n Distance(output, cache, input);\n\n return output.distance < 10.0 * EPSILON;\n};\n\n// legacy exports\nDistance.testOverlap = testOverlap;\nDistance.Input = DistanceInput;\nDistance.Output = DistanceOutput;\nDistance.Proxy = DistanceProxy;\nDistance.Cache = SimplexCache;\n\n/**\n * Input parameters for ShapeCast\n */\nexport class ShapeCastInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n readonly translationB = Vec2.zero();\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n matrix.zeroVec2(this.translationB);\n }\n}\n\n/**\n * Output results for b2ShapeCast\n */\nexport class ShapeCastOutput {\n point: Vec2 = Vec2.zero();\n normal: Vec2 = Vec2.zero();\n lambda = 1.0;\n iterations = 0;\n}\n\n/**\n * Perform a linear shape cast of shape B moving and shape A fixed. Determines\n * the hit point, normal, and translation fraction.\n * \n * @returns true if hit, false if there is no hit or an initial overlap\n */\n//\n// GJK-raycast\n// Algorithm by Gino van den Bergen.\n// \"Smooth Mesh Contacts with GJK\" in Game Physics Pearls. 2010\nexport const ShapeCast = function(output: ShapeCastOutput, input: ShapeCastInput): boolean {\n output.iterations = 0;\n output.lambda = 1.0;\n output.normal.setZero();\n output.point.setZero();\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n\n const radiusA = math_max(proxyA.m_radius, Settings.polygonRadius);\n const radiusB = math_max(proxyB.m_radius, Settings.polygonRadius);\n const radius = radiusA + radiusB;\n\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n const r = input.translationB;\n const n = Vec2.zero();\n let lambda = 0.0;\n\n // Initial simplex\n const simplex = new Simplex();\n simplex.m_count = 0;\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n\n // Get support point in -r direction\n let indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(r)));\n let wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n let indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, r));\n let wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const v = Vec2.sub(wA, wB);\n\n // Sigma is the target distance between polygons\n const sigma = math_max(Settings.polygonRadius, radius - Settings.polygonRadius);\n const tolerance = 0.5 * Settings.linearSlop;\n\n // Main iteration loop.\n const k_maxIters = 20;\n let iter = 0;\n while (iter < k_maxIters && v.length() - sigma > tolerance) {\n _ASSERT && console.assert(simplex.m_count < 3);\n\n output.iterations += 1;\n\n // Support in direction -v (A - B)\n indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(v)));\n wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, v));\n wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const p = Vec2.sub(wA, wB);\n\n // -v is a normal at p\n v.normalize();\n\n // Intersect ray with plane\n const vp = Vec2.dot(v, p);\n const vr = Vec2.dot(v, r);\n if (vp - sigma > lambda * vr) {\n if (vr <= 0.0) {\n return false;\n }\n\n lambda = (vp - sigma) / vr;\n if (lambda > 1.0) {\n return false;\n }\n\n n.setMul(-1, v);\n simplex.m_count = 0;\n }\n\n // Reverse simplex since it works with B - A.\n // Shift by lambda * r because we want the closest point to the current clip point.\n // Note that the support point p is not shifted because we want the plane equation\n // to be formed in unshifted space.\n const vertex = vertices[simplex.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.0;\n simplex.m_count += 1;\n\n switch (simplex.m_count) {\n case 1:\n break;\n\n case 2:\n simplex.solve2();\n break;\n\n case 3:\n simplex.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n \n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count == 3) {\n // Overlap\n return false;\n }\n\n // Get search direction.\n v.setVec2(simplex.getClosestPoint());\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n }\n\n if (iter == 0) {\n // Initial overlap\n return false;\n\t}\n\n // Prepare output.\n const pointA = Vec2.zero();\n const pointB = Vec2.zero();\n simplex.getWitnessPoints(pointB, pointA);\n\n if (v.lengthSquared() > 0.0) {\n n.setMul(-1, v);\n n.normalize();\n }\n\n output.point = Vec2.combine(1, pointA, radiusA, n);\n output.normal = n;\n output.lambda = lambda;\n output.iterations = iter;\n return true;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport Timer from \"../util/Timer\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Distance, DistanceInput, DistanceOutput, DistanceProxy, SimplexCache } from \"./Distance\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\n/**\n * Input parameters for TimeOfImpact.\n */\nexport class TOIInput {\n proxyA = new DistanceProxy();\n proxyB = new DistanceProxy();\n sweepA = new Sweep();\n sweepB = new Sweep();\n /** defines sweep interval [0, tMax] */\n tMax: number;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.sweepA.recycle();\n this.sweepB.recycle();\n this.tMax = -1;\n }\n}\n\nexport enum TOIOutputState {\n e_unset = -1,\n e_unknown = 0,\n e_failed = 1,\n e_overlapped = 2,\n e_touching = 3,\n e_separated = 4,\n}\n\n/**\n * Output parameters for TimeOfImpact.\n */\nexport class TOIOutput {\n state = TOIOutputState.e_unset;\n t = -1;\n recycle() {\n this.state = TOIOutputState.e_unset;\n this.t = -1;\n }\n}\n\nstats.toiTime = 0;\nstats.toiMaxTime = 0;\nstats.toiCalls = 0;\nstats.toiIters = 0;\nstats.toiMaxIters = 0;\nstats.toiRootIters = 0;\nstats.toiMaxRootIters = 0;\n\n/** @internal */ const distanceInput = new DistanceInput();\n/** @internal */ const distanceOutput = new DistanceOutput();\n// this is passed to Distance and SeparationFunction\n/** @internal */ const cache = new SimplexCache();\n\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const axisA = matrix.vec2(0, 0);\n/** @internal */ const axisB = matrix.vec2(0, 0);\n/** @internal */ const localPointA = matrix.vec2(0, 0);\n/** @internal */ const localPointB = matrix.vec2(0, 0);\n\n\n/**\n * Compute the upper bound on time before two shapes penetrate. Time is\n * represented as a fraction between [0,tMax]. This uses a swept separating axis\n * and may miss some intermediate, non-tunneling collisions. If you change the\n * time interval, you should call this function again.\n *\n * Note: use Distance to compute the contact point and normal at the time of\n * impact.\n *\n * CCD via the local separating axis method. This seeks progression by computing\n * the largest time at which separation is maintained.\n */\nexport const TimeOfImpact = function (output: TOIOutput, input: TOIInput): void {\n const timer = Timer.now();\n\n ++stats.toiCalls;\n\n output.state = TOIOutputState.e_unknown;\n output.t = input.tMax;\n\n const proxyA = input.proxyA; // DistanceProxy\n const proxyB = input.proxyB; // DistanceProxy\n\n const sweepA = input.sweepA; // Sweep\n const sweepB = input.sweepB; // Sweep\n\n // Large rotations can make the root finder fail, so we normalize the\n // sweep angles.\n sweepA.normalize();\n sweepB.normalize();\n\n const tMax = input.tMax;\n\n const totalRadius = proxyA.m_radius + proxyB.m_radius;\n const target = math_max(Settings.linearSlop, totalRadius - 3.0 * Settings.linearSlop);\n const tolerance = 0.25 * Settings.linearSlop;\n _ASSERT && console.assert(target > tolerance);\n\n let t1 = 0.0;\n const k_maxIterations = Settings.maxTOIIterations;\n let iter = 0;\n\n // Prepare input for distance query.\n // const cache = new SimplexCache();\n cache.recycle();\n\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\n // The outer loop progressively attempts to compute new separating axes.\n // This loop terminates when an axis is repeated (no progress is made).\n while (true) {\n sweepA.getTransform(xfA, t1);\n sweepB.getTransform(xfB, t1);\n\n // Get the distance between shapes. We can also use the results\n // to get a separating axis.\n matrix.copyTransform(distanceInput.transformA, xfA);\n matrix.copyTransform(distanceInput.transformB, xfB);\n Distance(distanceOutput, cache, distanceInput);\n\n // If the shapes are overlapped, we give up on continuous collision.\n if (distanceOutput.distance <= 0.0) {\n // Failure!\n output.state = TOIOutputState.e_overlapped;\n output.t = 0.0;\n break;\n }\n\n if (distanceOutput.distance < target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n break;\n }\n\n // Initialize the separating axis.\n separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1);\n\n // if (false) {\n // // Dump the curve seen by the root finder\n // const N = 100;\n // const dx = 1.0 / N;\n // const xs = []; // [ N + 1 ];\n // const fs = []; // [ N + 1 ];\n // const x = 0.0;\n // for (const i = 0; i <= N; ++i) {\n // sweepA.getTransform(xfA, x);\n // sweepB.getTransform(xfB, x);\n // const f = fcn.evaluate(xfA, xfB) - target;\n // printf(\"%g %g\\n\", x, f);\n // xs[i] = x;\n // fs[i] = f;\n // x += dx;\n // }\n // }\n\n // Compute the TOI on the separating axis. We do this by successively\n // resolving the deepest point. This loop is bounded by the number of\n // vertices.\n let done = false;\n let t2 = tMax;\n let pushBackIter = 0;\n while (true) {\n // Find the deepest point at t2. Store the witness point indices.\n let s2 = separationFunction.findMinSeparation(t2);\n\n // Is the final configuration separated?\n if (s2 > target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_separated;\n output.t = tMax;\n done = true;\n break;\n }\n\n // Has the separation reached tolerance?\n if (s2 > target - tolerance) {\n // Advance the sweeps\n t1 = t2;\n break;\n }\n\n // Compute the initial separation of the witness points.\n let s1 = separationFunction.evaluate(t1);\n\n // Check for initial overlap. This might happen if the root finder\n // runs out of iterations.\n if (s1 < target - tolerance) {\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n done = true;\n break;\n }\n\n // Check for touching\n if (s1 <= target + tolerance) {\n // Victory! t1 should hold the TOI (could be 0.0).\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n done = true;\n break;\n }\n\n // Compute 1D root of: f(x) - target = 0\n let rootIterCount = 0;\n let a1 = t1;\n let a2 = t2;\n while (true) {\n // Use a mix of the secant rule and bisection.\n let t;\n if (rootIterCount & 1) {\n // Secant rule to improve convergence.\n t = a1 + (target - s1) * (a2 - a1) / (s2 - s1);\n } else {\n // Bisection to guarantee progress.\n t = 0.5 * (a1 + a2);\n }\n\n ++rootIterCount;\n ++stats.toiRootIters;\n\n const s = separationFunction.evaluate(t);\n\n if (math_abs(s - target) < tolerance) {\n // t2 holds a tentative value for t1\n t2 = t;\n break;\n }\n\n // Ensure we continue to bracket the root.\n if (s > target) {\n a1 = t;\n s1 = s;\n } else {\n a2 = t;\n s2 = s;\n }\n\n if (rootIterCount === 50) {\n break;\n }\n }\n\n stats.toiMaxRootIters = math_max(stats.toiMaxRootIters, rootIterCount);\n\n ++pushBackIter;\n\n if (pushBackIter === Settings.maxPolygonVertices) {\n break;\n }\n }\n\n ++iter;\n ++stats.toiIters;\n\n if (done) {\n break;\n }\n\n if (iter === k_maxIterations) {\n // Root finder got stuck. Semi-victory.\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n break;\n }\n }\n\n stats.toiMaxIters = math_max(stats.toiMaxIters, iter);\n\n const time = Timer.diff(timer);\n stats.toiMaxTime = math_max(stats.toiMaxTime, time);\n stats.toiTime += time;\n\n separationFunction.recycle();\n};\n\nenum SeparationFunctionType {\n e_unset = -1,\n e_points = 1,\n e_faceA = 2,\n e_faceB = 3,\n}\n\nclass SeparationFunction {\n // input cache\n // todo: maybe assign by copy instead of reference?\n m_proxyA: DistanceProxy = null;\n m_proxyB: DistanceProxy = null;\n m_sweepA: Sweep = null;\n m_sweepB: Sweep = null;\n\n // initialize cache\n m_type = SeparationFunctionType.e_unset;\n m_localPoint = matrix.vec2(0, 0);\n m_axis = matrix.vec2(0, 0);\n\n // compute output\n indexA = -1;\n indexB = -1;\n\n recycle() {\n this.m_proxyA = null;\n this.m_proxyB = null;\n this.m_sweepA = null;\n this.m_sweepB = null;\n\n this.m_type = SeparationFunctionType.e_unset;\n matrix.zeroVec2(this.m_localPoint);\n matrix.zeroVec2(this.m_axis);\n\n this.indexA = -1;\n this.indexB = -1;\n }\n\n // TODO_ERIN might not need to return the separation\n\n initialize(cache: SimplexCache, proxyA: DistanceProxy, sweepA: Sweep, proxyB: DistanceProxy, sweepB: Sweep, t1: number): number {\n const count = cache.count;\n _ASSERT && console.assert(0 < count && count < 3);\n\n this.m_proxyA = proxyA;\n this.m_proxyB = proxyB;\n this.m_sweepA = sweepA;\n this.m_sweepB = sweepB;\n\n this.m_sweepA.getTransform(xfA, t1);\n this.m_sweepB.getTransform(xfB, t1);\n\n if (count === 1) {\n this.m_type = SeparationFunctionType.e_points;\n const localPointA = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n matrix.subVec2(this.m_axis, pointB, pointA);\n const s = matrix.normalizeVec2Length(this.m_axis);\n return s;\n\n } else if (cache.indexA[0] === cache.indexA[1]) {\n // Two points on B and one on A.\n this.m_type = SeparationFunctionType.e_faceB;\n const localPointB1 = proxyB.getVertex(cache.indexB[0]);\n const localPointB2 = proxyB.getVertex(cache.indexB[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointB2, localPointB1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n const localPointA = proxyA.getVertex(cache.indexA[0]);\n const pointA = Transform.mulVec2(xfA, localPointA);\n\n let s = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n\n } else {\n // Two points on A and one or two points on B.\n this.m_type = SeparationFunctionType.e_faceA;\n const localPointA1 = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointA2 = this.m_proxyA.getVertex(cache.indexA[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointA2, localPointA1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n let s = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n }\n }\n\n compute(find: boolean, t: number): number {\n // It was findMinSeparation and evaluate\n this.m_sweepA.getTransform(xfA, t);\n this.m_sweepB.getTransform(xfB, t);\n\n switch (this.m_type) {\n case SeparationFunctionType.e_points: {\n if (find) {\n matrix.derotVec2(axisA, xfA.q, this.m_axis);\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, this.m_axis));\n\n this.indexA = this.m_proxyA.getSupport(axisA);\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, this.m_axis) - matrix.dotVec2(pointA, this.m_axis);\n return sep;\n }\n\n case SeparationFunctionType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexA = -1;\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n return sep;\n }\n\n case SeparationFunctionType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisA, xfA.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexB = -1;\n this.indexA = this.m_proxyA.getSupport(axisA);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.transformVec2(pointA, xfA, localPointA);\n\n const sep = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n return sep;\n }\n\n default:\n _ASSERT && console.assert(false);\n if (find) {\n this.indexA = -1;\n this.indexB = -1;\n }\n return 0.0;\n }\n }\n\n findMinSeparation(t: number): number {\n return this.compute(true, t);\n }\n\n evaluate(t: number): number {\n return this.compute(false, t);\n }\n}\n\n/** @internal */ const separationFunction = new SeparationFunction();\n\n// legacy exports\nTimeOfImpact.Input = TOIInput;\nTimeOfImpact.Output = TOIOutput;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { EPSILON } from \"../common/Math\";\nimport { Body } from \"./Body\";\nimport type { Contact } from \"./Contact\";\nimport { Joint } from \"./Joint\";\nimport { TimeOfImpact, TOIInput, TOIOutput, TOIOutputState } from \"../collision/TimeOfImpact\";\nimport { Distance, DistanceInput, DistanceOutput, SimplexCache } from \"../collision/Distance\";\nimport { World } from \"./World\";\nimport { Sweep } from \"../common/Sweep\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_min = Math.min;\n\n\nexport class TimeStep {\n /** time step */\n dt: number = 0;\n /** inverse time step (0 if dt == 0) */\n inv_dt: number = 0;\n velocityIterations: number = 0;\n positionIterations: number = 0;\n warmStarting: boolean = false;\n blockSolve: boolean = true;\n\n /** timestep ratio for variable timestep */\n inv_dt0: number = 0.0;\n /** dt * inv_dt0 */\n dtRatio: number = 1;\n\n reset(dt: number): void {\n if (this.dt > 0.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}\n\n// reuse\n/** @internal */ const s_subStep = new TimeStep();\n/** @internal */ const c = matrix.vec2(0, 0);\n/** @internal */ const v = matrix.vec2(0, 0);\n/** @internal */ const translation = matrix.vec2(0, 0);\n/** @internal */ const input = new TOIInput();\n/** @internal */ const output = new TOIOutput();\n/** @internal */ const backup = new Sweep();\n/** @internal */ const backup1 = new Sweep();\n/** @internal */ const backup2 = new Sweep();\n\n/**\n * Contact impulses for reporting. Impulses are used instead of forces because\n * sub-step forces may approach infinity for rigid body collisions. These match\n * up one-to-one with the contact points in Manifold.\n */\nexport class ContactImpulse {\n // TODO: merge with Contact class?\n\n private readonly contact: Contact;\n private readonly normals: number[];\n private readonly tangents: number[];\n\n constructor(contact: Contact) {\n this.contact = contact;\n this.normals = [];\n this.tangents = [];\n }\n\n recycle() {\n this.normals.length = 0;\n this.tangents.length = 0;\n }\n\n get normalImpulses(): number[] {\n const contact = this.contact;\n const normals = this.normals;\n normals.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n normals.push(contact.v_points[p].normalImpulse);\n }\n return normals;\n }\n\n get tangentImpulses(): number[] {\n const contact = this.contact;\n const tangents = this.tangents;\n tangents.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n tangents.push(contact.v_points[p].tangentImpulse);\n }\n return tangents;\n }\n}\n\n/**\n * Finds and solves islands. An island is a connected subset of the world.\n */\nexport class Solver {\n m_world: World;\n m_stack: Body[];\n m_bodies: Body[];\n m_contacts: Contact[];\n m_joints: Joint[];\n\n constructor(world: World) {\n this.m_world = world;\n this.m_stack = [];\n this.m_bodies = [];\n this.m_contacts = [];\n this.m_joints = [];\n }\n\n clear(): void {\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\n addBody(body: Body): void {\n _ASSERT && console.assert(body instanceof Body, \"Not a Body!\", body);\n this.m_bodies.push(body);\n // why?\n // body.c_position.c.setZero();\n // body.c_position.a = 0;\n // body.c_velocity.v.setZero();\n // body.c_velocity.w = 0;\n }\n\n addContact(contact: Contact): void {\n // _ASSERT && console.assert(contact instanceof Contact, 'Not a Contact!', contact);\n this.m_contacts.push(contact);\n }\n\n addJoint(joint: Joint): void {\n _ASSERT && console.assert(joint instanceof Joint, \"Not a Joint!\", joint);\n this.m_joints.push(joint);\n }\n\n solveWorld(step: TimeStep): void {\n const world = this.m_world;\n\n // Clear all the island flags.\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n }\n for (let c = world.m_contactList; c; c = c.m_next) {\n c.m_islandFlag = false;\n }\n for (let j = world.m_jointList; j; j = j.m_next) {\n j.m_islandFlag = false;\n }\n\n // Build and simulate all awake islands.\n const stack = this.m_stack;\n let loop = -1;\n for (let seed = world.m_bodyList; seed; seed = seed.m_next) {\n loop++;\n if (seed.m_islandFlag) {\n continue;\n }\n\n if (seed.isAwake() == false || seed.isActive() == false) {\n continue;\n }\n\n // The seed can be dynamic or kinematic.\n if (seed.isStatic()) {\n continue;\n }\n\n // Reset island and stack.\n this.clear();\n\n stack.push(seed);\n\n seed.m_islandFlag = true;\n\n // Perform a depth first search (DFS) on the constraint graph.\n while (stack.length > 0) {\n // Grab the next body off the stack and add it to the island.\n const b = stack.pop();\n _ASSERT && console.assert(b.isActive() == true);\n this.addBody(b);\n\n // Make sure the body is awake (without resetting sleep timer).\n b.m_awakeFlag = true;\n\n // To keep islands as small as possible, we don't\n // propagate islands across static bodies.\n if (b.isStatic()) {\n continue;\n }\n\n // Search all contacts connected to this body.\n for (let ce = b.m_contactList; ce; ce = ce.next) {\n const contact = ce.contact;\n\n // Has this contact already been added to an island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Is this contact solid and touching?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n this.addContact(contact);\n contact.m_islandFlag = true;\n\n const other = ce.other;\n\n // Was the other body already added to this island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n\n // Search all joints connect to this body.\n for (let je = b.m_jointList; je; je = je.next) {\n if (je.joint.m_islandFlag == true) {\n continue;\n }\n\n const other = je.other;\n\n // Don't simulate joints connected to inactive bodies.\n if (other.isActive() == false) {\n continue;\n }\n\n this.addJoint(je.joint);\n je.joint.m_islandFlag = true;\n\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n }\n\n this.solveIsland(step);\n\n // Post solve cleanup.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n // Allow static bodies to participate in other islands.\n // TODO: are they added at all?\n const b = this.m_bodies[i];\n if (b.isStatic()) {\n b.m_islandFlag = false;\n }\n }\n }\n }\n\n solveIsland(step: TimeStep): void {\n // B2: Island Solve\n const world = this.m_world;\n const gravity = world.m_gravity;\n const allowSleep = world.m_allowSleep;\n\n const h = step.dt;\n\n // Integrate velocities and apply damping. Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.m_sweep.c);\n const a = body.m_sweep.a;\n matrix.copyVec2(v, body.m_linearVelocity);\n let w = body.m_angularVelocity;\n\n // Store positions for continuous collision.\n matrix.copyVec2(body.m_sweep.c0, body.m_sweep.c);\n body.m_sweep.a0 = body.m_sweep.a;\n\n if (body.isDynamic()) {\n // Integrate velocities.\n matrix.plusScaleVec2(v, h * body.m_gravityScale, gravity);\n matrix.plusScaleVec2(v, h * body.m_invMass, body.m_force);\n w += h * body.m_invI * body.m_torque;\n /**\n *
\n         * Apply damping.\n         * ODE: dv/dt + c * v = 0\n         * Solution: v(t) = v0 * exp(-c * t)\n         * Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)\n         * v2 = exp(-c * dt) * v1\n         * Pade approximation:\n         * v2 = v1 * 1 / (1 + c * dt)\n         * 
\n */\n matrix.scaleVec2(v, 1.0 / (1.0 + h * body.m_linearDamping), v);\n w *= 1.0 / (1.0 + h * body.m_angularDamping);\n }\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(step);\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(step);\n }\n\n if (step.warmStarting) {\n // Warm start.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.warmStartConstraint(step);\n }\n }\n\n for (let i = 0; i < this.m_joints.length; ++i) {\n const joint = this.m_joints[i];\n joint.initVelocityConstraints(step);\n }\n\n // Solve velocity constraints\n for (let i = 0; i < step.velocityIterations; ++i) {\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n joint.solveVelocityConstraints(step);\n }\n\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(step);\n }\n }\n\n // Store impulses for warm starting\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.storeConstraintImpulses(step);\n }\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n // Solve position constraints\n let positionSolved = false;\n for (let i = 0; i < step.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraint(step);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -3.0 * Settings.linearSlop;\n\n let jointsOkay = true;\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n const jointOkay = joint.solvePositionConstraints(step);\n jointsOkay = jointsOkay && jointOkay;\n }\n\n if (contactsOkay && jointsOkay) {\n // Exit early if the position errors are small.\n positionSolved = true;\n break;\n }\n }\n\n // Copy state buffers back to the bodies\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(body.m_sweep.c, body.c_position.c);\n body.m_sweep.a = body.c_position.a;\n matrix.copyVec2(body.m_linearVelocity, body.c_velocity.v);\n body.m_angularVelocity = body.c_velocity.w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n\n if (allowSleep) {\n let minSleepTime = Infinity;\n\n const linTolSqr = Settings.linearSleepToleranceSqr;\n const angTolSqr = Settings.angularSleepToleranceSqr;\n\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n if (body.isStatic()) {\n continue;\n }\n\n if ((body.m_autoSleepFlag == false)\n || (body.m_angularVelocity * body.m_angularVelocity > angTolSqr)\n || (matrix.lengthSqrVec2(body.m_linearVelocity) > linTolSqr)) {\n body.m_sleepTime = 0.0;\n minSleepTime = 0.0;\n } else {\n body.m_sleepTime += h;\n minSleepTime = math_min(minSleepTime, body.m_sleepTime);\n }\n }\n\n if (minSleepTime >= Settings.timeToSleep && positionSolved) {\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.setAwake(false);\n }\n }\n }\n }\n\n /**\n * Find TOI contacts and solve them.\n */\n solveWorldTOI(step: TimeStep): void {\n const world = this.m_world;\n\n if (world.m_stepComplete) {\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n b.m_sweep.alpha0 = 0.0;\n }\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Invalidate TOI\n c.m_toiFlag = false;\n c.m_islandFlag = false;\n c.m_toiCount = 0;\n c.m_toi = 1.0;\n }\n }\n\n // Find TOI events and solve them.\n while (true) {\n // Find the first TOI.\n let minContact: Contact | null = null;\n let minAlpha = 1.0;\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Is this contact disabled?\n if (c.isEnabled() == false) {\n continue;\n }\n\n // Prevent excessive sub-stepping.\n if (c.m_toiCount > Settings.maxSubSteps) {\n continue;\n }\n\n let alpha = 1.0;\n if (c.m_toiFlag) {\n // This contact has a valid cached TOI.\n alpha = c.m_toi;\n } else {\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n // Is there a sensor?\n if (fA.isSensor() || fB.isSensor()) {\n continue;\n }\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n _ASSERT && console.assert(bA.isDynamic() || bB.isDynamic());\n\n const activeA = bA.isAwake() && !bA.isStatic();\n const activeB = bB.isAwake() && !bB.isStatic();\n\n // Is at least one body active (awake and dynamic or kinematic)?\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const collideA = bA.isBullet() || !bA.isDynamic();\n const collideB = bB.isBullet() || !bB.isDynamic();\n\n // Are these two non-bullet dynamic bodies?\n if (collideA == false && collideB == false) {\n continue;\n }\n\n // Compute the TOI for this contact.\n // Put the sweeps onto the same time interval.\n let alpha0 = bA.m_sweep.alpha0;\n\n if (bA.m_sweep.alpha0 < bB.m_sweep.alpha0) {\n alpha0 = bB.m_sweep.alpha0;\n bA.m_sweep.advance(alpha0);\n } else if (bB.m_sweep.alpha0 < bA.m_sweep.alpha0) {\n alpha0 = bA.m_sweep.alpha0;\n bB.m_sweep.advance(alpha0);\n }\n\n _ASSERT && console.assert(alpha0 < 1.0);\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const sweepA = bA.m_sweep;\n const sweepB = bB.m_sweep;\n\n // Compute the time of impact in interval [0, minTOI]\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.sweepA.set(bA.m_sweep);\n input.sweepB.set(bB.m_sweep);\n input.tMax = 1.0;\n\n TimeOfImpact(output, input);\n\n // Beta is the fraction of the remaining portion of the [time?].\n const beta = output.t;\n if (output.state == TOIOutputState.e_touching) {\n alpha = math_min(alpha0 + (1.0 - alpha0) * beta, 1.0);\n } else {\n alpha = 1.0;\n }\n\n c.m_toi = alpha;\n c.m_toiFlag = true;\n }\n\n if (alpha < minAlpha) {\n // This is the minimum TOI found so far.\n minContact = c;\n minAlpha = alpha;\n }\n }\n\n if (minContact == null || 1.0 - 10.0 * EPSILON < minAlpha) {\n // No more TOI events. Done!\n world.m_stepComplete = true;\n break;\n }\n\n // Advance the bodies to the TOI.\n const fA = minContact.getFixtureA();\n const fB = minContact.getFixtureB();\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n backup1.set(bA.m_sweep);\n backup2.set(bB.m_sweep);\n\n bA.advance(minAlpha);\n bB.advance(minAlpha);\n\n // The TOI contact likely has some new contact points.\n minContact.update(world);\n minContact.m_toiFlag = false;\n ++minContact.m_toiCount;\n\n // Is the contact solid?\n if (minContact.isEnabled() == false || minContact.isTouching() == false) {\n // Restore the sweeps.\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\n bA.setAwake(true);\n bB.setAwake(true);\n\n // Build the island\n this.clear();\n this.addBody(bA);\n this.addBody(bB);\n this.addContact(minContact);\n\n bA.m_islandFlag = true;\n bB.m_islandFlag = true;\n minContact.m_islandFlag = true;\n\n // Get contacts on bodyA and bodyB.\n const bodies = [ bA, bB ];\n for (let i = 0; i < bodies.length; ++i) {\n const body = bodies[i];\n if (body.isDynamic()) {\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n // if (this.m_bodyCount == this.m_bodyCapacity) { break; }\n // if (this.m_contactCount == this.m_contactCapacity) { break; }\n\n const contact = ce.contact;\n\n // Has this contact already been added to the island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Only add if either is static, kinematic or bullet.\n const other = ce.other;\n if (other.isDynamic() && !body.isBullet() && !other.isBullet()) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n // Tentatively advance the body to the TOI.\n backup.set(other.m_sweep);\n if (other.m_islandFlag == false) {\n other.advance(minAlpha);\n }\n\n // Update the contact points\n contact.update(world);\n\n // Was the contact disabled by the user?\n // Are there contact points?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n other.m_sweep.set(backup);\n other.synchronizeTransform();\n continue;\n }\n\n // Add the contact to the island\n contact.m_islandFlag = true;\n this.addContact(contact);\n\n // Has the other body already been added to the island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // Add the other body to the island.\n other.m_islandFlag = true;\n\n if (!other.isStatic()) {\n other.setAwake(true);\n }\n\n this.addBody(other);\n }\n }\n }\n\n s_subStep.reset((1.0 - minAlpha) * step.dt);\n s_subStep.dtRatio = 1.0;\n s_subStep.positionIterations = 20;\n s_subStep.velocityIterations = step.velocityIterations;\n s_subStep.warmStarting = false;\n\n this.solveIslandTOI(s_subStep, bA, bB);\n\n // Reset island flags and synchronize broad-phase proxies.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.m_islandFlag = false;\n\n if (!body.isDynamic()) {\n continue;\n }\n\n body.synchronizeFixtures();\n\n // Invalidate all contact TOIs on this displaced body.\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n ce.contact.m_toiFlag = false;\n ce.contact.m_islandFlag = false;\n }\n }\n\n // Commit fixture proxy movements to the broad-phase so that new contacts\n // are created.\n // Also, some contacts can be destroyed.\n world.findNewContacts();\n\n if (world.m_subStepping) {\n world.m_stepComplete = false;\n break;\n }\n }\n }\n\n solveIslandTOI(subStep: TimeStep, toiA: Body, toiB: Body): void {\n\n // Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n matrix.copyVec2(body.c_position.c, body.m_sweep.c);\n body.c_position.a = body.m_sweep.a;\n matrix.copyVec2(body.c_velocity.v, body.m_linearVelocity);\n body.c_velocity.w = body.m_angularVelocity;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(subStep);\n }\n\n // Solve position constraints.\n for (let i = 0; i < subStep.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -1.5 * Settings.linearSlop;\n if (contactsOkay) {\n break;\n }\n }\n\n if (false) {\n // Is the new position really safe?\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const c = this.m_contacts[i];\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const input = new DistanceInput();\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.transformA.set(bA.getTransform());\n input.transformB.set(bB.getTransform());\n input.useRadii = false;\n\n const output = new DistanceOutput();\n const cache = new SimplexCache();\n Distance(output, cache, input);\n\n if (output.distance == 0 || cache.count == 3) {\n cache.count += 0;\n }\n }\n }\n\n // Leap of faith to new safe state.\n matrix.copyVec2(toiA.m_sweep.c0, toiA.c_position.c);\n toiA.m_sweep.a0 = toiA.c_position.a;\n matrix.copyVec2(toiB.m_sweep.c0, toiB.c_position.c);\n toiB.m_sweep.a0 = toiB.c_position.a;\n\n // No warm starting is needed for TOI events because warm\n // starting impulses were applied in the discrete solver.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(subStep);\n }\n\n // Solve velocity constraints.\n for (let i = 0; i < subStep.velocityIterations; ++i) {\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(subStep);\n }\n }\n\n // Don't store the TOI contact forces for warm starting\n // because they can be quite large.\n\n const h = subStep.dt;\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n\n // Sync bodies\n matrix.copyVec2(body.m_sweep.c, c);\n body.m_sweep.a = a;\n matrix.copyVec2(body.m_linearVelocity, v);\n body.m_angularVelocity = w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n }\n\n /** @internal */\n postSolveIsland(): void {\n for (let c = 0; c < this.m_contacts.length; ++c) {\n const contact = this.m_contacts[c];\n this.m_world.postSolve(contact, contact.m_impulse);\n }\n }\n}\n\n// @ts-ignore\nSolver.TimeStep = TimeStep;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 2-by-2 matrix. Stored in column-major order.\n */\nexport class Mat22 {\n ex: Vec2;\n ey: Vec2;\n\n constructor(a: number, b: number, c: number, d: number);\n constructor(a: { x: number; y: number }, b: { x: number; y: number });\n constructor();\n constructor(a?, b?, c?, d?) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec2.clone(a);\n this.ey = Vec2.clone(b);\n } else if (typeof a === \"number\") {\n this.ex = Vec2.neo(a, c);\n this.ey = Vec2.neo(b, d);\n } else {\n this.ex = Vec2.zero();\n this.ey = Vec2.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat22.isValid(o), \"Invalid Mat22!\", o);\n }\n\n set(a: Mat22): void;\n set(a: Vec2Value, b: Vec2Value): void;\n set(a: number, b: number, c: number, d: number): void;\n set(a, b?, c?, d?): void {\n if (typeof a === \"number\" && typeof b === \"number\" && typeof c === \"number\"\n && typeof d === \"number\") {\n this.ex.setNum(a, c);\n this.ey.setNum(b, d);\n\n } else if (typeof a === \"object\" && typeof b === \"object\") {\n this.ex.setVec2(a);\n this.ey.setVec2(b);\n\n } else if (typeof a === \"object\") {\n _ASSERT && Mat22.assert(a);\n this.ex.setVec2(a.ex);\n this.ey.setVec2(a.ey);\n\n } else {\n _ASSERT && console.assert(false);\n }\n }\n\n setIdentity(): void {\n this.ex.x = 1.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 1.0;\n }\n\n setZero(): void {\n this.ex.x = 0.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 0.0;\n }\n\n getInverse(): Mat22 {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const imx = new Mat22();\n imx.ex.x = det * d;\n imx.ey.x = -det * b;\n imx.ex.y = -det * c;\n imx.ey.y = det * a;\n return imx;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const w = Vec2.zero();\n w.x = det * (d * v.x - b * v.y);\n w.y = det * (a * v.y - c * v.x);\n return w;\n }\n\n /**\n * Multiply a matrix times a vector. If a rotation matrix is provided, then this\n * transforms the vector from one frame to another.\n */\n static mul(mx: Mat22, my: Mat22): Mat22;\n static mul(mx: Mat22, v: Vec2Value): Vec2;\n static mul(mx, v) {\n if (v && \"x\" in v && \"y\" in v) {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n }\n\n static mulMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n /**\n * Multiply a matrix transpose times a vector. If a rotation matrix is provided,\n * then this transforms the vector from one frame to another (inverse\n * transform).\n */\n static mulT(mx: Mat22, my: Mat22): Mat22;\n static mulT(mx: Mat22, v: Vec2Value): Vec2;\n static mulT(mx, v) {\n if (v && \"x\" in v && \"y\" in v) { // Vec2\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulTVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n }\n\n static mulTMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n static abs(mx: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n return new Mat22(Vec2.abs(mx.ex), Vec2.abs(mx.ey));\n }\n\n static add(mx1: Mat22, mx2: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx1);\n _ASSERT && Mat22.assert(mx2);\n return new Mat22(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey));\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\nimport { EPSILON } from \"../common/Math\";\n\n\n/** @internal */ const math_sqrt = Math.sqrt;\n\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const dist = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n\nexport enum ManifoldType {\n e_unset = -1,\n e_circles = 0,\n e_faceA = 1,\n e_faceB = 2\n}\n\nexport enum ContactFeatureType {\n e_unset = -1,\n e_vertex = 0,\n e_face = 1\n}\n\n/**\n * This is used for determining the state of contact points.\n */\n export enum PointState {\n /** Point does not exist */\n nullState = 0,\n /** Point was added in the update */\n addState = 1,\n /** Point persisted across the update */\n persistState = 2,\n /** Point was removed in the update */\n removeState = 3\n}\n\n/**\n * Used for computing contact manifolds.\n */\n export class ClipVertex {\n v = matrix.vec2(0, 0);\n id: ContactID = new ContactID();\n\n set(o: ClipVertex): void {\n matrix.copyVec2(this.v, o.v);\n this.id.set(o.id);\n }\n recycle() {\n matrix.zeroVec2(this.v);\n this.id.recycle();\n }\n}\n\n/**\n * A manifold for two touching convex shapes. Manifolds are created in `evaluate`\n * method of Contact subclasses.\n *\n * Supported manifold types are e_faceA or e_faceB for clip point versus plane\n * with radius and e_circles point versus point with radius.\n *\n * We store contacts in this way so that position correction can account for\n * movement, which is critical for continuous physics. All contact scenarios\n * must be expressed in one of these types. This structure is stored across time\n * steps, so we keep it small.\n */\nexport class Manifold {\n type: ManifoldType;\n\n /**\n * Usage depends on manifold type:\n * - circles: not used\n * - faceA: the normal on polygonA\n * - faceB: the normal on polygonB\n */\n localNormal = matrix.vec2(0, 0);\n\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleA\n * - faceA: the center of faceA\n * - faceB: the center of faceB\n */\n localPoint = matrix.vec2(0, 0);\n\n /** The points of contact */\n points: ManifoldPoint[] = [ new ManifoldPoint(), new ManifoldPoint() ];\n\n /** The number of manifold points */\n pointCount: number = 0;\n\n set(that: Manifold): void {\n this.type = that.type;\n matrix.copyVec2(this.localNormal, that.localNormal);\n matrix.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\n recycle(): void {\n this.type = ManifoldType.e_unset;\n matrix.zeroVec2(this.localNormal);\n matrix.zeroVec2(this.localPoint);\n this.pointCount = 0;\n this.points[0].recycle();\n this.points[1].recycle();\n }\n\n /**\n * Evaluate the manifold with supplied transforms. This assumes modest motion\n * from the original state. This does not change the point count, impulses, etc.\n * The radii must come from the shapes that generated the manifold.\n */\n getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold {\n if (this.pointCount == 0) {\n return wm;\n }\n\n wm = wm || new WorldManifold();\n\n wm.pointCount = this.pointCount;\n\n const normal = wm.normal;\n const points = wm.points;\n const separations = wm.separations;\n\n switch (this.type) {\n case ManifoldType.e_circles: {\n matrix.setVec2(normal, 1.0, 0.0);\n const manifoldPoint = this.points[0];\n matrix.transformVec2(pointA, xfA, this.localPoint);\n matrix.transformVec2(pointB, xfB, manifoldPoint.localPoint);\n matrix.subVec2(dist, pointB, pointA);\n const lengthSqr = matrix.lengthSqrVec2(dist);\n if (lengthSqr > EPSILON * EPSILON) {\n const length = math_sqrt(lengthSqr);\n matrix.scaleVec2(normal, 1 / length, dist);\n }\n matrix.combine2Vec2(cA, 1, pointA, radiusA, normal);\n matrix.combine2Vec2(cB, 1, pointB, -radiusB, normal);\n matrix.combine2Vec2(points[0], 0.5, cA, 0.5, cB);\n separations[0] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.localNormal);\n matrix.transformVec2(planePoint, xfA, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfB, manifoldPoint.localPoint);\n matrix.combine2Vec2(cA, 1, clipPoint, radiusA - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cB, 1, clipPoint, -radiusB, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n }\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.localNormal);\n matrix.transformVec2(planePoint, xfB, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfA, manifoldPoint.localPoint);\n matrix.combine2Vec2(cB, 1, clipPoint, radiusB - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cA, 1, clipPoint, -radiusA, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cA, cB), normal);\n }\n // Ensure normal points from A to B.\n matrix.negVec2(normal);\n break;\n }\n }\n\n return wm;\n }\n\n static clipSegmentToLine = clipSegmentToLine;\n static ClipVertex = ClipVertex;\n static getPointStates = getPointStates;\n static PointState = PointState;\n}\n\n/**\n * A manifold point is a contact point belonging to a contact manifold. It holds\n * details related to the geometry and dynamics of the contact points.\n *\n * This structure is stored across time steps, so we keep it small.\n *\n * Note: impulses are used for internal caching and may not provide reliable\n * contact forces, especially for high speed collisions.\n */\nexport class ManifoldPoint {\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleB\n * - faceA: the local center of circleB or the clip point of polygonB\n * - faceB: the clip point of polygonA\n */\n localPoint = matrix.vec2(0, 0);\n /**\n * The non-penetration impulse\n */\n normalImpulse = 0;\n /**\n * The friction impulse\n */\n tangentImpulse = 0;\n /**\n * Uniquely identifies a contact point between two shapes to facilitate warm starting\n */\n readonly id = new ContactID();\n\n set(that: ManifoldPoint): void {\n matrix.copyVec2(this.localPoint, that.localPoint);\n this.normalImpulse = that.normalImpulse;\n this.tangentImpulse = that.tangentImpulse;\n this.id.set(that.id);\n }\n\n recycle(): void {\n matrix.zeroVec2(this.localPoint);\n this.normalImpulse = 0;\n this.tangentImpulse = 0;\n this.id.recycle();\n }\n}\n\n/**\n * Contact ids to facilitate warm starting.\n * \n * ContactFeature: The features that intersect to form the contact point.\n */\nexport class ContactID {\n\n /**\n * Used to quickly compare contact ids.\n */\n key = -1;\n\n /** ContactFeature index on shapeA */\n indexA = -1;\n\n /** ContactFeature index on shapeB */\n indexB = -1;\n\n /** ContactFeature type on shapeA */\n typeA = ContactFeatureType.e_unset;\n\n /** ContactFeature type on shapeB */\n typeB = ContactFeatureType.e_unset;\n\n setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void {\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\n set(that: ContactID): void {\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\n swapFeatures(): void {\n const indexA = this.indexA;\n const indexB = this.indexB;\n const typeA = this.typeA;\n const 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\n recycle(): void {\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}\n\n/**\n * This is used to compute the current state of a contact manifold.\n */\nexport class WorldManifold {\n /** World vector pointing from A to B */\n normal = matrix.vec2(0, 0);\n\n /** World contact point (point of intersection) */\n points = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints]\n\n /** A negative value indicates overlap, in meters */\n separations = [0, 0]; // [maxManifoldPoints]\n\n /** The number of manifold points */\n pointCount = 0;\n\n recycle() {\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.points[0]);\n matrix.zeroVec2(this.points[1]);\n this.separations[0] = 0;\n this.separations[1] = 0;\n this.pointCount = 0;\n }\n}\n\n/**\n * Compute the point states given two manifolds. The states pertain to the\n * transition from manifold1 to manifold2. So state1 is either persist or remove\n * while state2 is either add or persist.\n */\nexport function getPointStates(\n state1: PointState[],\n state2: PointState[],\n manifold1: Manifold,\n manifold2: Manifold\n): void {\n // state1, state2: PointState[Settings.maxManifoldPoints]\n\n // for (var i = 0; i < Settings.maxManifoldPoints; ++i) {\n // state1[i] = PointState.nullState;\n // state2[i] = PointState.nullState;\n // }\n\n // Detect persists and removes.\n for (let i = 0; i < manifold1.pointCount; ++i) {\n const id = manifold1.points[i].id;\n\n state1[i] = PointState.removeState;\n\n for (let 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\n // Detect persists and adds.\n for (let i = 0; i < manifold2.pointCount; ++i) {\n const id = manifold2.points[i].id;\n\n state2[i] = PointState.addState;\n\n for (let 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}\n\n/**\n * Clipping for contact manifolds. Sutherland-Hodgman clipping.\n */\nexport function clipSegmentToLine(\n vOut: ClipVertex[],\n vIn: ClipVertex[],\n normal: Vec2Value,\n offset: number,\n vertexIndexA: number\n): number {\n // Start with no output points\n let numOut = 0;\n\n // Calculate the distance of end points to the line\n const distance0 = matrix.dotVec2(normal, vIn[0].v) - offset;\n const distance1 = matrix.dotVec2(normal, vIn[1].v) - offset;\n\n // If the points are behind the plane\n if (distance0 <= 0.0)\n vOut[numOut++].set(vIn[0]);\n if (distance1 <= 0.0)\n vOut[numOut++].set(vIn[1]);\n\n // If the points are on different sides of the plane\n if (distance0 * distance1 < 0.0) {\n // Find intersection point of edge and plane\n const interp = distance0 / (distance0 - distance1);\n matrix.combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v);\n\n // VertexA is hitting edgeB.\n vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face);\n ++numOut;\n }\n\n return numOut;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { ShapeType } from \"../collision/Shape\";\nimport { clamp } from \"../common/Math\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Mat22 } from \"../common/Mat22\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Manifold, ManifoldType, WorldManifold } from \"../collision/Manifold\";\nimport { testOverlap } from \"../collision/Distance\";\nimport { Fixture } from \"./Fixture\";\nimport { Body } from \"./Body\";\nimport { ContactImpulse, TimeStep } from \"./Solver\";\nimport { Pool } from \"../util/Pool\";\nimport { getTransform } from \"./Position\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n// Solver debugging is normally disabled because the block solver sometimes has to deal with a poorly conditioned effective mass matrix.\n/** @internal */ const DEBUG_SOLVER = false;\n\n/** @internal */ const contactPool = new Pool({\n create() {\n return new Contact();\n },\n release(contact: Contact) {\n contact.recycle();\n }\n});\n\n/** @internal */ const oldManifold = new Manifold();\n\n/** @internal */ const worldManifold = new WorldManifold();\n\n/**\n * A contact edge is used to connect bodies and contacts together in a contact\n * graph where each body is a node and each contact is an edge. A contact edge\n * belongs to a doubly linked list maintained in each attached body. Each\n * contact has two contact nodes, one for each attached body.\n */\nexport class ContactEdge {\n contact: Contact;\n prev: ContactEdge | null = null;\n next: ContactEdge | null = null;\n other: Body | null = null;\n constructor(contact: Contact) {\n this.contact = contact;\n }\n\n /** @internal */\n recycle() {\n this.prev = null;\n this.next = null;\n this.other = null;\n }\n}\n\nexport type EvaluateFunction = (\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number\n) => void;\n\n/**\n * Friction mixing law. The idea is to allow either fixture to drive the\n * friction to zero. For example, anything slides on ice.\n */\nexport function mixFriction(friction1: number, friction2: number): number {\n return math_sqrt(friction1 * friction2);\n}\n\n/**\n * Restitution mixing law. The idea is allow for anything to bounce off an\n * inelastic surface. For example, a superball bounces on anything.\n */\nexport function mixRestitution(restitution1: number, restitution2: number): number {\n return restitution1 > restitution2 ? restitution1 : restitution2;\n}\n\n// TODO: move this to Settings?\n/** @internal */ const s_registers = [];\n\n// TODO: merge with ManifoldPoint?\nexport class VelocityConstraintPoint {\n rA = matrix.vec2(0, 0);\n rB = matrix.vec2(0, 0);\n normalImpulse = 0;\n tangentImpulse = 0;\n normalMass = 0;\n tangentMass = 0;\n velocityBias = 0;\n\n recycle() {\n matrix.zeroVec2(this.rA);\n matrix.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}\n\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const vA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const vB = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const rA = matrix.vec2(0, 0);\n/** @internal */ const rB = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const point = matrix.vec2(0, 0);\n/** @internal */ const dv = matrix.vec2(0, 0);\n/** @internal */ const dv1 = matrix.vec2(0, 0);\n/** @internal */ const dv2 = matrix.vec2(0, 0);\n/** @internal */ const b = matrix.vec2(0, 0);\n/** @internal */ const a = matrix.vec2(0, 0);\n/** @internal */ const x = matrix.vec2(0, 0);\n/** @internal */ const d = matrix.vec2(0, 0);\n/** @internal */ const P1 = matrix.vec2(0, 0);\n/** @internal */ const P2 = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * The class manages contact between two shapes. A contact exists for each\n * overlapping AABB in the broad-phase (except if filtered). Therefore a contact\n * object may exist that has no contact points.\n */\nexport class Contact {\n // Nodes for connecting bodies.\n /** @internal */ m_nodeA = new ContactEdge(this);\n /** @internal */ m_nodeB = new ContactEdge(this);\n /** @internal */ m_fixtureA: Fixture | null = null;\n /** @internal */ m_fixtureB: Fixture | null = null;\n /** @internal */ m_indexA = -1;\n /** @internal */ m_indexB = -1;\n /** @internal */ m_evaluateFcn: EvaluateFunction | null = null;\n /** @internal */ m_manifold: Manifold = new Manifold();\n /** @internal */ m_prev: Contact | null = null;\n /** @internal */ m_next: Contact | null = null;\n /** @internal */ m_toi = 1.0;\n /** @internal */ m_toiCount = 0;\n // This contact has a valid TOI in m_toi\n /** @internal */ m_toiFlag = false;\n /** @internal */ m_friction = 0.0;\n /** @internal */ m_restitution = 0.0;\n /** @internal */ m_tangentSpeed = 0.0;\n /** @internal This contact can be disabled (by user) */\n m_enabledFlag = true;\n /** @internal Used when crawling contact graph when forming islands. */\n m_islandFlag = false;\n /** @internal Set when the shapes are touching. */\n m_touchingFlag = false;\n /** @internal This contact needs filtering because a fixture filter was changed. */\n m_filterFlag = false;\n /** @internal This bullet contact had a TOI event */\n m_bulletHitFlag = false;\n\n /** @internal Contact reporting impulse object cache */\n m_impulse: ContactImpulse = new ContactImpulse(this);\n\n // VelocityConstraint\n /** @internal */ v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; // [maxManifoldPoints];\n /** @internal */ v_normal = matrix.vec2(0, 0);\n /** @internal */ v_normalMass: Mat22 = new Mat22();\n /** @internal */ v_K: Mat22 = new Mat22();\n /** @internal */ v_pointCount = 0;\n /** @internal */ v_tangentSpeed = 0;\n /** @internal */ v_friction = 0;\n /** @internal */ v_restitution = 0;\n /** @internal */ v_invMassA = 0;\n /** @internal */ v_invMassB = 0;\n /** @internal */ v_invIA = 0;\n /** @internal */ v_invIB = 0;\n\n // PositionConstraint\n /** @internal */ p_localPoints = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints];\n /** @internal */ p_localNormal = matrix.vec2(0, 0);\n /** @internal */ p_localPoint = matrix.vec2(0, 0);\n /** @internal */ p_localCenterA = matrix.vec2(0, 0);\n /** @internal */ p_localCenterB = matrix.vec2(0, 0);\n /** @internal */ p_type = ManifoldType.e_unset;\n /** @internal */ p_radiusA = 0;\n /** @internal */ p_radiusB = 0;\n /** @internal */ p_pointCount = 0;\n /** @internal */ p_invMassA = 0;\n /** @internal */ p_invMassB = 0;\n /** @internal */ p_invIA = 0;\n /** @internal */ p_invIB = 0;\n\n /** @internal */ \n initialize(fA: Fixture, indexA: number, fB: Fixture, indexB: number, evaluateFcn: EvaluateFunction) {\n this.m_fixtureA = fA;\n this.m_fixtureB = fB;\n\n this.m_indexA = indexA;\n this.m_indexB = indexB;\n\n this.m_evaluateFcn = evaluateFcn;\n\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\n /** @internal */ \n recycle() {\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\n this.m_impulse.recycle();\n\n // VelocityConstraint\n for(const point of this.v_points) {\n point.recycle();\n }\n matrix.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\n // PositionConstraint\n for(const point of this.p_localPoints) {\n matrix.zeroVec2(point);\n }\n matrix.zeroVec2(this.p_localNormal);\n matrix.zeroVec2(this.p_localPoint);\n matrix.zeroVec2(this.p_localCenterA);\n matrix.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\n initConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n const manifold = this.m_manifold;\n\n const pointCount = manifold.pointCount;\n _ASSERT && console.assert(pointCount > 0);\n\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\n this.v_friction = this.m_friction;\n this.v_restitution = this.m_restitution;\n this.v_tangentSpeed = this.m_tangentSpeed;\n\n this.v_pointCount = pointCount;\n\n this.v_K.setZero();\n this.v_normalMass.setZero();\n\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 matrix.copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter);\n matrix.copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter);\n\n this.p_radiusA = shapeA.m_radius;\n this.p_radiusB = shapeB.m_radius;\n\n this.p_type = manifold.type;\n matrix.copyVec2(this.p_localNormal, manifold.localNormal);\n matrix.copyVec2(this.p_localPoint, manifold.localPoint);\n this.p_pointCount = pointCount;\n\n for (let j = 0; j < Settings.maxManifoldPoints; ++j) {\n this.v_points[j].recycle();\n matrix.zeroVec2(this.p_localPoints[j]);\n }\n\n for (let j = 0; j < pointCount; ++j) {\n const cp = manifold.points[j];\n const 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 matrix.copyVec2(this.p_localPoints[j], cp.localPoint);\n }\n }\n\n /**\n * Get the contact manifold. Do not modify the manifold unless you understand\n * the internals of the library.\n */\n getManifold(): Manifold {\n return this.m_manifold;\n }\n\n /**\n * Get the world manifold.\n */\n getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n return this.m_manifold.getWorldManifold(\n worldManifold,\n bodyA.getTransform(), shapeA.m_radius,\n bodyB.getTransform(), shapeB.m_radius\n );\n }\n\n /**\n * Enable/disable this contact. This can be used inside the pre-solve contact\n * listener. The contact is only disabled for the current time step (or sub-step\n * in continuous collisions).\n */\n setEnabled(flag: boolean): void {\n this.m_enabledFlag = !!flag;\n }\n\n /**\n * Has this contact been disabled?\n */\n isEnabled(): boolean {\n return this.m_enabledFlag;\n }\n\n /**\n * Is this contact touching?\n */\n isTouching(): boolean {\n return this.m_touchingFlag;\n }\n\n /**\n * Get the next contact in the world's contact list.\n */\n getNext(): Contact | null {\n return this.m_next;\n }\n\n /**\n * Get fixture A in this contact.\n */\n getFixtureA(): Fixture {\n return this.m_fixtureA;\n }\n\n /**\n * Get fixture B in this contact.\n */\n getFixtureB(): Fixture {\n return this.m_fixtureB;\n }\n\n /**\n * Get the child primitive index for fixture A.\n */\n getChildIndexA(): number {\n return this.m_indexA;\n }\n\n /**\n * Get the child primitive index for fixture B.\n */\n getChildIndexB(): number {\n return this.m_indexB;\n }\n\n /**\n * Flag this contact for filtering. Filtering will occur the next time step.\n */\n flagForFiltering(): void {\n this.m_filterFlag = true;\n }\n\n /**\n * Override the default friction mixture. You can call this in\n * \"pre-solve\" callback. This value persists until set or reset.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the friction.\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Reset the friction mixture to the default value.\n */\n resetFriction(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction);\n }\n\n /**\n * Override the default restitution mixture. You can call this in\n * \"pre-solve\" callback. The value persists until you set or reset.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Get the restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Reset the restitution to the default value.\n */\n resetRestitution(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution);\n }\n\n /**\n * Set the desired tangent speed for a conveyor belt behavior. In meters per\n * second.\n */\n setTangentSpeed(speed: number): void {\n this.m_tangentSpeed = speed;\n }\n\n /**\n * Get the desired tangent speed. In meters per second.\n */\n getTangentSpeed(): number {\n return this.m_tangentSpeed;\n }\n\n /**\n * Called by Update method, and implemented by subclasses.\n */\n evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_evaluateFcn(manifold, xfA, fixtureA, this.m_indexA, xfB, fixtureB, this.m_indexB);\n }\n\n /**\n * Updates the contact manifold and touching status.\n *\n * Note: do not assume the fixture AABBs are overlapping or are valid.\n *\n * @param listener.beginContact\n * @param listener.endContact\n * @param listener.preSolve\n */\n update(listener?: {\n beginContact(contact: Contact): void,\n endContact(contact: Contact): void,\n preSolve(contact: Contact, oldManifold: Manifold): void\n }): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n // Re-enable this contact.\n this.m_enabledFlag = true;\n\n let touching = false;\n const wasTouching = this.m_touchingFlag;\n\n const sensorA = fixtureA.m_isSensor;\n const sensorB = fixtureB.m_isSensor;\n const sensor = sensorA || sensorB;\n\n const xfA = bodyA.m_xf;\n const xfB = bodyB.m_xf;\n\n // Is this contact a sensor?\n if (sensor) {\n touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB);\n\n // Sensors don't generate manifolds.\n this.m_manifold.pointCount = 0;\n } else {\n\n oldManifold.recycle();\n oldManifold.set(this.m_manifold);\n this.m_manifold.recycle();\n\n this.evaluate(this.m_manifold, xfA, xfB);\n touching = this.m_manifold.pointCount > 0;\n\n // Match old contact ids to new contact ids and copy the\n // stored impulses to warm start the solver.\n for (let i = 0; i < this.m_manifold.pointCount; ++i) {\n const nmp = this.m_manifold.points[i];\n nmp.normalImpulse = 0.0;\n nmp.tangentImpulse = 0.0;\n\n for (let j = 0; j < oldManifold.pointCount; ++j) {\n const 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\n if (touching !== wasTouching) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n }\n\n this.m_touchingFlag = touching;\n\n const hasListener = typeof listener === \"object\" && listener !== null;\n\n if (!wasTouching && touching && hasListener) {\n listener.beginContact(this);\n }\n\n if (wasTouching && !touching && hasListener) {\n listener.endContact(this);\n }\n\n if (!sensor && touching && hasListener && oldManifold) {\n listener.preSolve(this, oldManifold);\n }\n }\n\n solvePositionConstraint(step: TimeStep): number {\n return this._solvePositionConstraint(step, null, null);\n }\n\n solvePositionConstraintTOI(step: TimeStep, toiA: Body, toiB: Body): number {\n return this._solvePositionConstraint(step, toiA, toiB);\n }\n\n private _solvePositionConstraint(step: TimeStep, toiA: Body | null, toiB: Body | null): number {\n const toi = toiA !== null && toiB !== null ? true : false;\n let minSeparation = 0.0;\n\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return minSeparation;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return minSeparation;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n let mA = 0.0;\n let iA = 0.0;\n if (!toi || (bodyA === toiA || bodyA === toiB)) {\n mA = this.p_invMassA;\n iA = this.p_invIA;\n }\n\n let mB = 0.0;\n let iB = 0.0;\n if (!toi || (bodyB === toiA || bodyB === toiB)) {\n mB = this.p_invMassB;\n iB = this.p_invIB;\n }\n\n matrix.copyVec2(cA, positionA.c);\n let aA = positionA.a;\n\n matrix.copyVec2(cB, positionB.c);\n let aB = positionB.a;\n\n // Solve normal constraints\n for (let j = 0; j < this.p_pointCount; ++j) {\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n // PositionSolverManifold\n let separation: number;\n switch (this.p_type) {\n case ManifoldType.e_circles: {\n matrix.transformVec2(pointA, xfA, this.p_localPoint);\n matrix.transformVec2(pointB, xfB, this.p_localPoints[0]);\n matrix.subVec2(normal, pointB, pointA);\n matrix.normalizeVec2(normal);\n\n matrix.combine2Vec2(point, 0.5, pointA, 0.5, pointB);\n separation = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal) - this.p_radiusA - this.p_radiusB;\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfA, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfB, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfB, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfA, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n\n // Ensure normal points from A to B\n matrix.negVec2(normal);\n break;\n }\n // todo: what should we do here?\n default: {\n return minSeparation;\n }\n }\n\n matrix.subVec2(rA, point, cA);\n matrix.subVec2(rB, point, cB);\n\n // Track max constraint error.\n minSeparation = math_min(minSeparation, separation);\n\n const baumgarte = toi ? Settings.toiBaugarte : Settings.baumgarte;\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n // Prevent large corrections and allow slop.\n const C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0.0);\n\n // Compute the effective mass.\n const rnA = matrix.crossVec2Vec2(rA, normal);\n const rnB = matrix.crossVec2Vec2(rB, normal);\n const K = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n // Compute normal impulse\n const impulse = K > 0.0 ? -C / K : 0.0;\n\n matrix.scaleVec2(P, impulse, normal);\n\n matrix.minusScaleVec2(cA, mA, P);\n aA -= iA * matrix.crossVec2Vec2(rA, P);\n\n matrix.plusScaleVec2(cB, mB, P);\n aB += iB * matrix.crossVec2Vec2(rB, P);\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n\n return minSeparation;\n }\n\n initVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const radiusA = this.p_radiusA;\n const radiusB = this.p_radiusB;\n const manifold = this.m_manifold;\n\n const mA = this.v_invMassA;\n const mB = this.v_invMassB;\n const iA = this.v_invIA;\n const iB = this.v_invIB;\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n matrix.copyVec2(cA, positionA.c);\n const aA = positionA.a;\n matrix.copyVec2(vA, velocityA.v);\n const wA = velocityA.w;\n\n matrix.copyVec2(cB, positionB.c);\n const aB = positionB.a;\n matrix.copyVec2(vB, velocityB.v);\n const wB = velocityB.w;\n\n _ASSERT && console.assert(manifold.pointCount > 0);\n\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n worldManifold.recycle();\n manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB);\n\n matrix.copyVec2(this.v_normal, worldManifold.normal);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n const wmp = worldManifold.points[j];\n\n matrix.subVec2(vcp.rA, wmp, cA);\n matrix.subVec2(vcp.rB, wmp, cB);\n\n const rnA = matrix.crossVec2Vec2(vcp.rA, this.v_normal);\n const rnB = matrix.crossVec2Vec2(vcp.rB, this.v_normal);\n\n const kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n vcp.normalMass = kNormal > 0.0 ? 1.0 / kNormal : 0.0;\n\n matrix.crossVec2Num(tangent, this.v_normal, 1.0);\n\n const rtA = matrix.crossVec2Vec2(vcp.rA, tangent);\n const rtB = matrix.crossVec2Vec2(vcp.rB, tangent);\n\n const kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB;\n\n vcp.tangentMass = kTangent > 0.0 ? 1.0 / kTangent : 0.0;\n\n // Setup a velocity bias for restitution.\n vcp.velocityBias = 0.0;\n let vRel = 0;\n vRel += matrix.dotVec2(this.v_normal, vB);\n vRel += matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wB, vcp.rB));\n vRel -= matrix.dotVec2(this.v_normal, vA);\n vRel -= matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wA, vcp.rA));\n if (vRel < -Settings.velocityThreshold) {\n vcp.velocityBias = -this.v_restitution * vRel;\n }\n }\n\n // If we have two points, then prepare the block solver.\n if (this.v_pointCount == 2 && step.blockSolve) {\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n const rn1A = matrix.crossVec2Vec2(vcp1.rA, this.v_normal);\n const rn1B = matrix.crossVec2Vec2(vcp1.rB, this.v_normal);\n const rn2A = matrix.crossVec2Vec2(vcp2.rA, this.v_normal);\n const rn2B = matrix.crossVec2Vec2(vcp2.rB, this.v_normal);\n\n const k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B;\n const k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B;\n const k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B;\n\n // Ensure a reasonable condition number.\n const k_maxConditionNumber = 1000.0;\n if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) {\n // K is safe to invert.\n this.v_K.ex.setNum(k11, k12);\n this.v_K.ey.setNum(k12, k22);\n // this.v_normalMass.set(this.v_K.getInverse());\n const a = this.v_K.ex.x;\n const b = this.v_K.ey.x;\n const c = this.v_K.ex.y;\n const d = this.v_K.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n this.v_normalMass.ex.x = det * d;\n this.v_normalMass.ey.x = -det * b;\n this.v_normalMass.ex.y = -det * c;\n this.v_normalMass.ey.y = det * a;\n\n } else {\n // The constraints are redundant, just use one.\n // TODO_ERIN use deepest?\n this.v_pointCount = 1;\n }\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n warmStartConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n matrix.combine2Vec2(P, vcp.normalImpulse, normal, vcp.tangentImpulse, tangent);\n\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n matrix.minusScaleVec2(vA, mA, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n matrix.plusScaleVec2(vB, mB, P);\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n storeConstraintImpulses(step: TimeStep): void {\n const manifold = this.m_manifold;\n for (let 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\n solveVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const positionA = bodyA.c_position;\n\n const velocityB = bodyB.c_velocity;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n const friction = this.v_friction;\n\n _ASSERT && console.assert(this.v_pointCount == 1 || this.v_pointCount == 2);\n\n // Solve tangent constraints first because non-penetration is more important\n // than friction.\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute tangent force\n const vt = matrix.dotVec2(dv, tangent) - this.v_tangentSpeed;\n let lambda = vcp.tangentMass * (-vt);\n\n // Clamp the accumulated force\n const maxFriction = friction * vcp.normalImpulse;\n const newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction);\n lambda = newImpulse - vcp.tangentImpulse;\n vcp.tangentImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, tangent);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n\n // Solve normal constraints\n if (this.v_pointCount == 1 || step.blockSolve == false) {\n for (let i = 0; i < this.v_pointCount; ++i) {\n const vcp = this.v_points[i]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute normal impulse\n const vn = matrix.dotVec2(dv, normal);\n let lambda = -vcp.normalMass * (vn - vcp.velocityBias);\n\n // Clamp the accumulated impulse\n const newImpulse = math_max(vcp.normalImpulse + lambda, 0.0);\n lambda = newImpulse - vcp.normalImpulse;\n vcp.normalImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, normal);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n } else {\n // Block solver developed in collaboration with Dirk Gregorius (back in\n // 01/07 on Box2D_Lite).\n // Build the mini LCP for this contact patch\n //\n // vn = A * x + b, vn >= 0, x >= 0 and vn_i * x_i = 0 with i = 1..2\n //\n // A = J * W * JT and J = ( -n, -r1 x n, n, r2 x n )\n // b = vn0 - velocityBias\n //\n // The system is solved using the \"Total enumeration method\" (s. Murty).\n // The complementary constraint vn_i * x_i\n // implies that we must have in any solution either vn_i = 0 or x_i = 0.\n // So for the 2D contact problem the cases\n // vn1 = 0 and vn2 = 0, x1 = 0 and x2 = 0, x1 = 0 and vn2 = 0, x2 = 0 and\n // vn1 = 0 need to be tested. The first valid\n // solution that satisfies the problem is chosen.\n //\n // In order to account of the accumulated impulse 'a' (because of the\n // iterative nature of the solver which only requires\n // that the accumulated impulse is clamped and not the incremental\n // impulse) we change the impulse variable (x_i).\n //\n // Substitute:\n //\n // x = a + d\n //\n // a := old total impulse\n // x := new total impulse\n // d := incremental impulse\n //\n // For the current iteration we extend the formula for the incremental\n // impulse\n // to compute the new total impulse:\n //\n // vn = A * d + b\n // = A * (x - a) + b\n // = A * x + b - A * a\n // = A * x + b'\n // b' = b - A * a;\n\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n matrix.setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse);\n _ASSERT && console.assert(a.x >= 0.0 && a.y >= 0.0);\n\n // Relative velocity at contact\n // let dv1 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp1.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp1.rA));\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // let dv2 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp2.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp2.rA));\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n let vn1 = matrix.dotVec2(dv1, normal);\n let vn2 = matrix.dotVec2(dv2, normal);\n\n matrix.setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias);\n\n // Compute b'\n // b.sub(Mat22.mulVec2(this.v_K, a));\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\n const k_errorTol = 1e-3;\n // NOT_USED(k_errorTol);\n\n while (true) {\n //\n // Case 1: vn = 0\n //\n // 0 = A * x + b'\n //\n // Solve for x:\n //\n // x = - inv(A) * b'\n //\n // const x = Mat22.mulVec2(this.v_normalMass, b).neg();\n matrix.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\n if (x.x >= 0.0 && x.y >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 2: vn1 = 0 and x2 = 0\n //\n // 0 = a11 * x1 + a12 * 0 + b1'\n // vn2 = a21 * x1 + a22 * 0 + b2'\n //\n x.x = -vcp1.normalMass * b.x;\n x.y = 0.0;\n vn1 = 0.0;\n vn2 = this.v_K.ex.y * x.x + b.y;\n\n if (x.x >= 0.0 && vn2 >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 3: vn2 = 0 and x1 = 0\n //\n // vn1 = a11 * 0 + a12 * x2 + b1'\n // 0 = a21 * 0 + a22 * x2 + b2'\n //\n x.x = 0.0;\n x.y = -vcp2.normalMass * b.y;\n vn1 = this.v_K.ey.x * x.y + b.x;\n vn2 = 0.0;\n\n if (x.y >= 0.0 && vn1 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 4: x1 = 0 and x2 = 0\n //\n // vn1 = b1\n // vn2 = b2;\n //\n x.x = 0.0;\n x.y = 0.0;\n vn1 = b.x;\n vn2 = b.y;\n\n if (vn1 >= 0.0 && vn2 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n break;\n }\n\n // No solution, give up. This is hit sometimes, but it doesn't seem to\n // matter.\n break;\n }\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n /** @internal */\n static addType(type1: ShapeType, type2: ShapeType, callback: EvaluateFunction): void {\n s_registers[type1] = s_registers[type1] || {};\n s_registers[type1][type2] = callback;\n }\n\n /** @internal */\n static create(fixtureA: Fixture, indexA: number, fixtureB: Fixture, indexB: number): Contact | null {\n const typeA = fixtureA.m_shape.m_type;\n const typeB = fixtureB.m_shape.m_type;\n\n const contact = contactPool.allocate();\n let 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\n // Contact creation may swap fixtures.\n fixtureA = contact.m_fixtureA;\n fixtureB = contact.m_fixtureB;\n indexA = contact.getChildIndexA();\n indexB = contact.getChildIndexB();\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n\n // Connect to body A\n contact.m_nodeA.contact = contact;\n contact.m_nodeA.other = bodyB;\n\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\n // Connect to body B\n contact.m_nodeB.contact = contact;\n contact.m_nodeB.other = bodyA;\n\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\n // Wake up the bodies\n if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n return contact;\n }\n\n /** @internal */\n static destroy(contact: Contact, listener: { endContact: (contact: Contact) => void }): void {\n const fixtureA = contact.m_fixtureA;\n const fixtureB = contact.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n if (contact.isTouching()) {\n listener.endContact(contact);\n }\n\n // Remove from body 1\n if (contact.m_nodeA.prev) {\n contact.m_nodeA.prev.next = contact.m_nodeA.next;\n }\n\n if (contact.m_nodeA.next) {\n contact.m_nodeA.next.prev = contact.m_nodeA.prev;\n }\n\n if (contact.m_nodeA == bodyA.m_contactList) {\n bodyA.m_contactList = contact.m_nodeA.next;\n }\n\n // Remove from body 2\n if (contact.m_nodeB.prev) {\n contact.m_nodeB.prev.next = contact.m_nodeB.next;\n }\n\n if (contact.m_nodeB.next) {\n contact.m_nodeB.next.prev = contact.m_nodeB.prev;\n }\n\n if (contact.m_nodeB == bodyB.m_contactList) {\n bodyB.m_contactList = contact.m_nodeB.next;\n }\n\n if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n // const typeA = fixtureA.getType();\n // const typeB = fixtureB.getType();\n\n // const destroyFcn = s_registers[typeA][typeB].destroyFcn;\n // if (typeof destroyFcn === 'function') {\n // destroyFcn(contact);\n // }\n\n contactPool.release(contact);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { Solver, ContactImpulse, TimeStep } from \"./Solver\";\nimport { Body, BodyDef } from \"./Body\";\nimport { Joint } from \"./Joint\";\nimport { Contact } from \"./Contact\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Fixture, FixtureProxy } from \"./Fixture\";\nimport { Manifold } from \"../collision/Manifold\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface WorldDef {\n /** [default: { x : 0, y : 0}] */\n gravity?: Vec2Value;\n\n /** [default: true] */\n allowSleep?: boolean;\n\n /** [default: true] */\n warmStarting?: boolean;\n\n /** [default: true] */\n continuousPhysics?: boolean;\n\n /** [default: false] */\n subStepping?: boolean;\n\n /** [default: true] */\n blockSolve?: boolean;\n\n /** @internal [8] For the velocity constraint solver. */\n velocityIterations?: number;\n\n /** @internal [3] For the position constraint solver. */\n positionIterations?: number;\n}\n\n/** @internal */ const DEFAULTS: WorldDef = {\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};\n\n/**\n * Callback function for ray casts, see {@link World.rayCast}.\n *\n * Called for each fixture found in the query.\n * The returned value replaces the ray-cast input maxFraction.\n * You control how the ray cast proceeds by returning a numeric/float value.\n * \n * - `0` to terminate the ray cast\n * - `fraction` to clip the ray cast at current point\n * - `1` don't clip the ray and continue\n * - `-1` (or anything else) to continue\n *\n * @param fixture The fixture hit by the ray\n * @param point The point of initial intersection\n * @param normal The normal vector at the point of intersection\n * @param fraction The fraction along the ray at the point of intersection\n *\n * @returns A number to update the maxFraction\n */\nexport type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number;\n\n/**\n * Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\nexport type WorldAABBQueryCallback = (fixture: Fixture) => boolean;\n\ndeclare module \"./World\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function World(deg: WorldDef): World;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function World(gravity: Vec2): World;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function World(): World;\n}\n\n/**\n * The `World` class contains the bodies and joints. It manages all aspects\n * of the simulation and allows for asynchronous queries (like AABB queries\n * and ray-casts). Much of your interactions with Planck.js will be with a\n * World object.\n */\n// @ts-expect-error\nexport class World {\n /** @internal */ m_solver: Solver;\n /** @internal */ m_broadPhase: BroadPhase;\n /** @internal */ m_contactList: Contact | null;\n /** @internal */ m_contactCount: number;\n /** @internal */ m_bodyList: Body | null;\n /** @internal */ m_bodyCount: number;\n /** @internal */ m_jointList: Joint | null;\n /** @internal */ m_jointCount: number;\n /** @internal */ m_stepComplete: boolean;\n /** @internal */ m_allowSleep: boolean;\n /** @internal */ m_gravity: Vec2;\n /** @internal */ m_clearForces: boolean;\n /** @internal */ m_newFixture: boolean;\n /** @internal */ m_locked: boolean;\n /** @internal */ m_warmStarting: boolean;\n /** @internal */ m_continuousPhysics: boolean;\n /** @internal */ m_subStepping: boolean;\n /** @internal */ m_blockSolve: boolean;\n /** @internal */ m_velocityIterations: number;\n /** @internal */ m_positionIterations: number;\n /** @internal */ m_t: number;\n\n // TODO\n /** @internal */ _listeners: {\n [key: string]: any[]\n };\n\n /**\n * @param def World definition or gravity vector.\n */\n constructor(def?: WorldDef | Vec2Value) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof World)) {\n return new World(def);\n }\n\n this.s_step = new TimeStep();\n\n\n if (!def) {\n def = {};\n } else if (Vec2.isValid(def)) {\n def = { gravity: def as Vec2 };\n }\n\n def = options(def, DEFAULTS) as WorldDef;\n\n this.m_solver = new Solver(this);\n\n this.m_broadPhase = new BroadPhase();\n\n this.m_contactList = null;\n this.m_contactCount = 0;\n\n this.m_bodyList = null;\n this.m_bodyCount = 0;\n\n this.m_jointList = null;\n this.m_jointCount = 0;\n\n this.m_stepComplete = true;\n\n this.m_allowSleep = def.allowSleep;\n this.m_gravity = Vec2.clone(def.gravity);\n\n this.m_clearForces = true;\n this.m_newFixture = false;\n this.m_locked = false;\n\n // These are for debugging the solver.\n this.m_warmStarting = def.warmStarting;\n this.m_continuousPhysics = def.continuousPhysics;\n this.m_subStepping = def.subStepping;\n\n this.m_blockSolve = def.blockSolve;\n this.m_velocityIterations = def.velocityIterations;\n this.m_positionIterations = def.positionIterations;\n\n this.m_t = 0;\n }\n\n /** @internal */\n _serialize(): object {\n const bodies = [];\n const joints = [];\n\n for (let b = this.getBodyList(); b; b = b.getNext()) {\n bodies.push(b);\n }\n\n for (let j = this.getJointList(); j; j = j.getNext()) {\n // @ts-ignore\n if (typeof j._serialize === \"function\") {\n joints.push(j);\n }\n }\n\n return {\n gravity: this.m_gravity,\n bodies,\n joints,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, context: any, restore: any): World {\n if (!data) {\n return new World();\n }\n\n const world = new World(data.gravity);\n\n if (data.bodies) {\n for (let i = data.bodies.length - 1; i >= 0; i -= 1) {\n world._addBody(restore(Body, data.bodies[i], world));\n }\n }\n\n if (data.joints) {\n for (let i = data.joints.length - 1; i >= 0; i--) {\n world.createJoint(restore(Joint, data.joints[i], world));\n }\n }\n\n return world;\n }\n\n /**\n * Get the world body list. With the returned body, use Body.getNext to get the\n * next body in the world list. A null body indicates the end of the list.\n *\n * @return the head of the world body list.\n */\n getBodyList(): Body | null {\n return this.m_bodyList;\n }\n\n /**\n * Get the world joint list. With the returned joint, use Joint.getNext to get\n * the next joint in the world list. A null joint indicates the end of the list.\n *\n * @return the head of the world joint list.\n */\n getJointList(): Joint | null {\n return this.m_jointList;\n }\n\n /**\n * Get the world contact list. With the returned contact, use Contact.getNext to\n * get the next contact in the world list. A null contact indicates the end of\n * the list.\n *\n * Warning: contacts are created and destroyed in the middle of a time step.\n * Use ContactListener to avoid missing contacts.\n *\n * @return the head of the world contact list.\n */\n getContactList(): Contact | null {\n return this.m_contactList;\n }\n\n getBodyCount(): number {\n return this.m_bodyCount;\n }\n\n getJointCount(): number {\n return this.m_jointCount;\n }\n\n /**\n * Get the number of contacts (each may have 0 or more contact points).\n */\n getContactCount(): number {\n return this.m_contactCount;\n }\n\n /**\n * Change the global gravity vector.\n */\n setGravity(gravity: Vec2Value): void {\n this.m_gravity.set(gravity);\n }\n\n /**\n * Get the global gravity vector.\n */\n getGravity(): Vec2 {\n return this.m_gravity;\n }\n\n /**\n * Is the world locked (in the middle of a time step).\n */\n isLocked(): boolean {\n return this.m_locked;\n }\n\n /**\n * Enable/disable sleep.\n */\n setAllowSleeping(flag: boolean): void {\n if (flag == this.m_allowSleep) {\n return;\n }\n\n this.m_allowSleep = flag;\n if (this.m_allowSleep == false) {\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.setAwake(true);\n }\n }\n }\n\n getAllowSleeping(): boolean {\n return this.m_allowSleep;\n }\n\n /**\n * Enable/disable warm starting. For testing.\n */\n setWarmStarting(flag: boolean): void {\n this.m_warmStarting = flag;\n }\n\n getWarmStarting(): boolean {\n return this.m_warmStarting;\n }\n\n /**\n * Enable/disable continuous physics. For testing.\n */\n setContinuousPhysics(flag: boolean): void {\n this.m_continuousPhysics = flag;\n }\n\n getContinuousPhysics(): boolean {\n return this.m_continuousPhysics;\n }\n\n /**\n * Enable/disable single stepped continuous physics. For testing.\n */\n setSubStepping(flag: boolean): void {\n this.m_subStepping = flag;\n }\n\n getSubStepping(): boolean {\n return this.m_subStepping;\n }\n\n /**\n * Set flag to control automatic clearing of forces after each time step.\n */\n setAutoClearForces(flag: boolean): void {\n this.m_clearForces = flag;\n }\n\n /**\n * Get the flag that controls automatic clearing of forces after each time step.\n */\n getAutoClearForces(): boolean {\n return this.m_clearForces;\n }\n\n /**\n * Manually clear the force buffer on all bodies. By default, forces are cleared\n * automatically after each call to step. The default behavior is modified by\n * calling setAutoClearForces. The purpose of this function is to support\n * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step\n * under a variable frame-rate. When you perform sub-stepping you will disable\n * auto clearing of forces and instead call clearForces after all sub-steps are\n * complete in one pass of your game loop.\n *\n * See {@link World.setAutoClearForces}\n */\n clearForces(): void {\n for (let body = this.m_bodyList; body; body = body.getNext()) {\n body.m_force.setZero();\n body.m_torque = 0.0;\n }\n }\n\n /**\n * Query the world for all fixtures that potentially overlap the provided AABB.\n *\n * @param aabb The query box.\n * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\n queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n this.m_broadPhase.query(aabb, function(proxyId: number): boolean { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n return callback(proxy.fixture);\n });\n }\n\n /**\n * Ray-cast the world for all fixtures in the path of the ray. Your callback\n * controls whether you get the closest point, any point, or n-points. The\n * ray-cast ignores shapes that contain the starting point.\n *\n * @param point1 The ray starting point\n * @param point2 The ray ending point\n * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value.\n */\n rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n\n this.m_broadPhase.rayCast({\n maxFraction : 1.0,\n p1 : point1,\n p2 : point2\n }, function(input: RayCastInput, proxyId: number): number { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n const fixture = proxy.fixture;\n const index = proxy.childIndex;\n // @ts-ignore\n const output: RayCastOutput = {}; // TODO GC\n const hit = fixture.rayCast(output, input, index);\n if (hit) {\n const fraction = output.fraction;\n const point = Vec2.add(Vec2.mulNumVec2((1.0 - fraction), input.p1), Vec2.mulNumVec2(fraction, input.p2));\n return callback(fixture, point, output.normal, fraction);\n }\n return input.maxFraction;\n });\n }\n\n /**\n * Get the number of broad-phase proxies.\n */\n getProxyCount(): number {\n return this.m_broadPhase.getProxyCount();\n }\n\n /**\n * Get the height of broad-phase dynamic tree.\n */\n getTreeHeight(): number {\n return this.m_broadPhase.getTreeHeight();\n }\n\n /**\n * Get the balance of broad-phase dynamic tree.\n */\n getTreeBalance(): number {\n return this.m_broadPhase.getTreeBalance();\n }\n\n /**\n * Get the quality metric of broad-phase dynamic tree. The smaller the better.\n * The minimum is 1.\n */\n getTreeQuality(): number {\n return this.m_broadPhase.getTreeQuality();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The body shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n _ASSERT && console.assert(this.m_locked == false);\n if (this.m_locked) {\n return;\n }\n\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.m_xf.p.sub(newOrigin);\n b.m_sweep.c0.sub(newOrigin);\n b.m_sweep.c.sub(newOrigin);\n }\n\n for (let j = this.m_jointList; j; j = j.m_next) {\n j.shiftOrigin(newOrigin);\n }\n\n this.m_broadPhase.shiftOrigin(newOrigin);\n }\n\n /** @internal Used for deserialize. */\n _addBody(body: Body): void {\n _ASSERT && console.assert(this.isLocked() === false);\n if (this.isLocked()) {\n return;\n }\n\n // Add to world doubly linked list.\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\n /**\n * Create a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This function is locked during callbacks.\n */\n createBody(def?: BodyDef): Body;\n createBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createBody(arg1?, arg2?) {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n let def: BodyDef = {};\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\n const body = new Body(this, def);\n this._addBody(body);\n return body;\n }\n\n createDynamicBody(def?: BodyDef): Body;\n createDynamicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createDynamicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n createKinematicBody(def?: BodyDef): Body;\n createKinematicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createKinematicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n /**\n * Destroy a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This automatically deletes all associated shapes and joints.\n *\n * Warning: This function is locked during callbacks.\n */\n destroyBody(b: Body): boolean {\n _ASSERT && console.assert(this.m_bodyCount > 0);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n if (b.m_destroyed) {\n return false;\n }\n\n // Delete the attached joints.\n let je = b.m_jointList;\n while (je) {\n const je0 = je;\n je = je.next;\n\n this.publish(\"remove-joint\", je0.joint);\n this.destroyJoint(je0.joint);\n\n b.m_jointList = je;\n }\n b.m_jointList = null;\n\n // Delete the attached contacts.\n let ce = b.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n\n this.destroyContact(ce0.contact);\n\n b.m_contactList = ce;\n }\n b.m_contactList = null;\n\n // Delete the attached fixtures. This destroys broad-phase proxies.\n let f = b.m_fixtureList;\n while (f) {\n const f0 = f;\n f = f.m_next;\n\n this.publish(\"remove-fixture\", f0);\n f0.destroyProxies(this.m_broadPhase);\n\n b.m_fixtureList = f;\n }\n b.m_fixtureList = null;\n\n // Remove world body list.\n if (b.m_prev) {\n b.m_prev.m_next = b.m_next;\n }\n\n if (b.m_next) {\n b.m_next.m_prev = b.m_prev;\n }\n\n if (b == this.m_bodyList) {\n this.m_bodyList = b.m_next;\n }\n\n b.m_destroyed = true;\n\n --this.m_bodyCount;\n\n this.publish(\"remove-body\", b);\n\n return true;\n }\n\n /**\n * Create a joint to constrain bodies together. No reference to the definition\n * is retained. This may cause the connected bodies to cease colliding.\n *\n * Warning: This function is locked during callbacks.\n */\n createJoint(joint: T): T | null {\n _ASSERT && console.assert(!!joint.m_bodyA);\n _ASSERT && console.assert(!!joint.m_bodyB);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n // Connect to the world list.\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\n // Connect to the bodies' doubly linked lists.\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\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\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n for (let edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) {\n if (edge.other == joint.m_bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n }\n }\n\n // Note: creating a joint doesn't wake the bodies.\n\n return joint;\n }\n\n /**\n * Destroy a joint. This may cause the connected bodies to begin colliding.\n * Warning: This function is locked during callbacks.\n */\n destroyJoint(joint: Joint): void {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n // Remove from the doubly linked list.\n if (joint.m_prev) {\n joint.m_prev.m_next = joint.m_next;\n }\n\n if (joint.m_next) {\n joint.m_next.m_prev = joint.m_prev;\n }\n\n if (joint == this.m_jointList) {\n this.m_jointList = joint.m_next;\n }\n\n // Disconnect from bodies.\n const bodyA = joint.m_bodyA;\n const bodyB = joint.m_bodyB;\n\n // Wake up connected bodies.\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n\n // Remove from body 1.\n if (joint.m_edgeA.prev) {\n joint.m_edgeA.prev.next = joint.m_edgeA.next;\n }\n\n if (joint.m_edgeA.next) {\n joint.m_edgeA.next.prev = joint.m_edgeA.prev;\n }\n\n if (joint.m_edgeA == bodyA.m_jointList) {\n bodyA.m_jointList = joint.m_edgeA.next;\n }\n\n joint.m_edgeA.prev = null;\n joint.m_edgeA.next = null;\n\n // Remove from body 2\n if (joint.m_edgeB.prev) {\n joint.m_edgeB.prev.next = joint.m_edgeB.next;\n }\n\n if (joint.m_edgeB.next) {\n joint.m_edgeB.next.prev = joint.m_edgeB.prev;\n }\n\n if (joint.m_edgeB == bodyB.m_jointList) {\n bodyB.m_jointList = joint.m_edgeB.next;\n }\n\n joint.m_edgeB.prev = null;\n joint.m_edgeB.next = null;\n\n _ASSERT && console.assert(this.m_jointCount > 0);\n --this.m_jointCount;\n\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n let edge = bodyB.getContactList();\n while (edge) {\n if (edge.other == bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n }\n\n this.publish(\"remove-joint\", joint);\n }\n\n /** @internal */\n s_step: TimeStep; // reuse\n\n /**\n * Take a time step. This performs collision detection, integration, and\n * constraint solution.\n *\n * Broad-phase, narrow-phase, solve and solve time of impacts.\n *\n * @param timeStep Time step, this should not vary.\n */\n step(timeStep: number, velocityIterations?: number, positionIterations?: number): void {\n this.publish(\"pre-step\", timeStep);\n\n if ((velocityIterations | 0) !== velocityIterations) {\n // TODO: remove this in future\n velocityIterations = 0;\n }\n\n velocityIterations = velocityIterations || this.m_velocityIterations;\n positionIterations = positionIterations || this.m_positionIterations;\n\n // If new fixtures were added, we need to find the new contacts.\n if (this.m_newFixture) {\n this.findNewContacts();\n this.m_newFixture = false;\n }\n\n this.m_locked = true;\n\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\n // Update contacts. This is where some contacts are destroyed.\n this.updateContacts();\n\n // Integrate velocities, solve velocity constraints, and integrate positions.\n if (this.m_stepComplete && timeStep > 0.0) {\n this.m_solver.solveWorld(this.s_step);\n\n // Synchronize fixtures, check for out of range bodies.\n for (let b = this.m_bodyList; b; b = b.getNext()) {\n // If a body was not in an island then it did not move.\n if (b.m_islandFlag == false) {\n continue;\n }\n\n if (b.isStatic()) {\n continue;\n }\n\n // Update fixtures (for broad-phase).\n b.synchronizeFixtures();\n }\n // Look for new contacts.\n this.findNewContacts();\n }\n\n // Handle TOI events.\n if (this.m_continuousPhysics && timeStep > 0.0) {\n this.m_solver.solveWorldTOI(this.s_step);\n }\n\n if (this.m_clearForces) {\n this.clearForces();\n }\n\n this.m_locked = false;\n\n this.publish(\"post-step\", timeStep);\n }\n\n /**\n * @internal\n * Call this method to find new contacts.\n */\n findNewContacts(): void {\n this.m_broadPhase.updatePairs(\n (proxyA: FixtureProxy, proxyB: FixtureProxy) => this.createContact(proxyA, proxyB)\n );\n }\n\n /**\n * @internal\n * Callback for broad-phase.\n */\n createContact(proxyA: FixtureProxy, proxyB: FixtureProxy): void {\n const fixtureA = proxyA.fixture;\n const fixtureB = proxyB.fixture;\n\n const indexA = proxyA.childIndex;\n const indexB = proxyB.childIndex;\n\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Are the fixtures on the same body?\n if (bodyA == bodyB) {\n return;\n }\n\n // TODO_ERIN use a hash table to remove a potential bottleneck when both\n // bodies have a lot of contacts.\n // Does a contact already exist?\n let edge = bodyB.getContactList(); // ContactEdge\n while (edge) {\n if (edge.other == bodyA) {\n const fA = edge.contact.getFixtureA();\n const fB = edge.contact.getFixtureB();\n const iA = edge.contact.getChildIndexA();\n const iB = edge.contact.getChildIndexB();\n\n if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) {\n // A contact already exists.\n return;\n }\n\n if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) {\n // A contact already exists.\n return;\n }\n }\n\n edge = edge.next;\n }\n\n if (bodyB.shouldCollide(bodyA) == false) {\n return;\n }\n if (fixtureB.shouldCollide(fixtureA) == false) {\n return;\n }\n\n // Call the factory.\n const contact = Contact.create(fixtureA, indexA, fixtureB, indexB);\n if (contact == null) {\n return;\n }\n\n // Insert into the world.\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\n ++this.m_contactCount;\n }\n\n /**\n * @internal\n * Removes old non-overlapping contacts, applies filters and updates contacts.\n */\n updateContacts(): void {\n // Update awake contacts.\n let c: Contact;\n let next_c = this.m_contactList;\n while (c = next_c) {\n next_c = c.getNext();\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Is this contact flagged for filtering?\n if (c.m_filterFlag) {\n if (bodyB.shouldCollide(bodyA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n if (fixtureB.shouldCollide(fixtureA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n // Clear the filtering flag.\n c.m_filterFlag = false;\n }\n\n const activeA = bodyA.isAwake() && !bodyA.isStatic();\n const activeB = bodyB.isAwake() && !bodyB.isStatic();\n\n // At least one body must be awake and it must be dynamic or kinematic.\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const proxyIdA = fixtureA.m_proxies[indexA].proxyId;\n const proxyIdB = fixtureB.m_proxies[indexB].proxyId;\n const overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB);\n\n // Here we destroy contacts that cease to overlap in the broad-phase.\n if (overlap == false) {\n this.destroyContact(c);\n continue;\n }\n\n // The contact persists.\n c.update(this);\n }\n }\n\n /** @internal */\n destroyContact(contact: Contact): void {\n // Remove from the world.\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\n Contact.destroy(contact, this);\n\n --this.m_contactCount;\n }\n\n\n /**\n * Called when two fixtures begin to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n /**\n * Called when two fixtures cease to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"end-contact\", listener: (contact: Contact) => void): World;\n /**\n * This is called after a contact is updated. This allows you to inspect a\n * contact before it goes to the solver. If you are careful, you can modify the\n * contact manifold (e.g. disable contact). A copy of the old manifold is\n * provided so that you can detect changes. Note: this is called only for awake\n * bodies. Note: this is called even when the number of contact points is zero.\n * Note: this is not called for sensors. Note: if you set the number of contact\n * points to zero, you will not get an end-contact callback. However, you may get\n * a begin-contact callback the next step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n /**\n * This lets you inspect a contact after the solver is finished. This is useful\n * for inspecting impulses. Note: the contact manifold does not include time of\n * impact impulses, which can be arbitrarily large if the sub-step is small.\n * Hence the impulse is provided explicitly in a separate data structure. Note:\n * this is only called for contacts that are touching, solid, and awake.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n /** Listener is called whenever a body is removed. */\n on(name: \"remove-body\", listener: (body: Body) => void): World;\n /** Listener is called whenever a joint is removed implicitly or explicitly. */\n on(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n /** Listener is called whenever a fixture is removed implicitly or explicitly. */\n on(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Register an event listener.\n */\n // tslint:disable-next-line:typedef\n on(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\n off(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n off(name: \"end-contact\", listener: (contact: Contact) => void): World;\n off(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n off(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n off(name: \"remove-body\", listener: (body: Body) => void): World;\n off(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n off(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Remove an event listener.\n */\n // tslint:disable-next-line:typedef\n off(name, listener) {\n if (typeof name !== \"string\" || typeof listener !== \"function\") {\n return this;\n }\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return this;\n }\n const index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n return this;\n }\n\n publish(name: string, arg1?: any, arg2?: any, arg3?: any): number {\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return 0;\n }\n for (let l = 0; l < listeners.length; l++) {\n listeners[l].call(this, arg1, arg2, arg3);\n }\n return listeners.length;\n }\n\n /** @internal */\n beginContact(contact: Contact): void {\n this.publish(\"begin-contact\", contact);\n }\n\n /** @internal */\n endContact(contact: Contact): void {\n this.publish(\"end-contact\", contact);\n }\n\n /** @internal */\n preSolve(contact: Contact, oldManifold: Manifold): void {\n this.publish(\"pre-solve\", contact, oldManifold);\n }\n\n /** @internal */\n postSolve(contact: Contact, impulse: ContactImpulse): void {\n this.publish(\"post-solve\", contact, impulse);\n }\n\n /**\n * Joints and fixtures are destroyed when their associated body is destroyed.\n * Register a destruction listener so that you may nullify references to these\n * joints and shapes.\n *\n * `function(object)` is called when any joint or fixture is about to\n * be destroyed due to the destruction of one of its attached or parent bodies.\n */\n\n /**\n * Register a contact filter to provide specific control over collision.\n * Otherwise the default filter is used (defaultFilter). The listener is owned\n * by you and must remain in scope.\n *\n * Moved to Fixture.\n */\n}","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/** 3D vector */\nexport interface Vec3Value {\n x: number;\n y: number;\n z: number;\n}\n\ndeclare module \"./Vec3\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec3(x: number, y: number, z: number): Vec3;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec3(obj: Vec3Value): Vec3;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec3(): Vec3;\n}\n\n/** 3D vector */\n// @ts-expect-error\nexport class Vec3 {\n x: number;\n y: number;\n z: number;\n\n constructor(x: number, y: number, z: number);\n constructor(obj: Vec3Value);\n constructor();\n constructor(x?, y?, z?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec3)) {\n return new Vec3(x, y, z);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n } else {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n _ASSERT && Vec3.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y,\n z: this.z\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = data.x;\n obj.y = data.y;\n obj.z = data.z;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number, z: number): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = x;\n obj.y = y;\n obj.z = z;\n return obj;\n }\n\n static zero(): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = 0;\n obj.y = 0;\n obj.z = 0;\n return obj;\n }\n\n static clone(v: Vec3Value): Vec3 {\n _ASSERT && Vec3.assert(v);\n return Vec3.neo(v.x, v.y, v.z);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /** Does this vector contain finite coordinates? */\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec3.isValid(o), \"Invalid Vec3!\", o);\n }\n\n setZero(): Vec3 {\n this.x = 0.0;\n this.y = 0.0;\n this.z = 0.0;\n return this;\n }\n\n set(x: number, y: number, z: number): Vec3 {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n\n add(w: Vec3Value): Vec3 {\n this.x += w.x;\n this.y += w.y;\n this.z += w.z;\n return this;\n }\n\n sub(w: Vec3Value): Vec3 {\n this.x -= w.x;\n this.y -= w.y;\n this.z -= w.z;\n return this;\n }\n\n mul(m: number): Vec3 {\n this.x *= m;\n this.y *= m;\n this.z *= m;\n return this;\n }\n\n static areEqual(v: Vec3Value, w: Vec3Value): boolean {\n _ASSERT && Vec3.assert(v);\n _ASSERT && Vec3.assert(w);\n return v === w ||\n typeof v === \"object\" && v !== null &&\n typeof w === \"object\" && w !== null &&\n v.x === w.x && v.y === w.y && v.z === w.z;\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n }\n\n /** Cross product on two vectors */\n static cross(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(\n v.y * w.z - v.z * w.y,\n v.z * w.x - v.x * w.z,\n v.x * w.y - v.y * w.x\n );\n }\n\n static add(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x + w.x, v.y + w.y, v.z + w.z);\n }\n\n static sub(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x - w.x, v.y - w.y, v.z - w.z);\n }\n\n static mul(v: Vec3Value, m: number): Vec3 {\n return new Vec3(m * v.x, m * v.y, m * v.z);\n }\n\n neg(): Vec3 {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n\n static neg(v: Vec3Value): Vec3 {\n return new Vec3(-v.x, -v.y, -v.z);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Shape } from \"../Shape\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { AABB, AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\ndeclare module \"./EdgeShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function EdgeShape(v1?: Vec2Value, v2?: Vec2Value): EdgeShape;\n}\n\n/**\n * A line segment (edge) shape. These can be connected in chains or loops to\n * other edge shapes. The connectivity information is used to ensure correct\n * contact normals.\n */\n// @ts-expect-error\nexport class EdgeShape extends Shape {\n static TYPE = \"edge\" as const;\n /** @hidden */ m_type: \"edge\";\n\n /** @hidden */ m_radius: number;\n\n // These are the edge vertices\n /** @hidden */ m_vertex1: Vec2;\n /** @hidden */ m_vertex2: Vec2;\n\n // Optional adjacent vertices. These are used for smooth collision.\n // Used by chain shape.\n /** @hidden */ m_vertex0: Vec2;\n /** @hidden */ m_vertex3: Vec2;\n /** @hidden */ m_hasVertex0: boolean;\n /** @hidden */ m_hasVertex3: boolean;\n\n constructor(v1?: Vec2Value, v2?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof EdgeShape)) {\n return new EdgeShape(v1, v2);\n }\n\n super();\n\n this.m_type = EdgeShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n\n this.m_vertex1 = v1 ? Vec2.clone(v1) : Vec2.zero();\n this.m_vertex2 = v2 ? Vec2.clone(v2) : Vec2.zero();\n\n this.m_vertex0 = Vec2.zero();\n this.m_vertex3 = Vec2.zero();\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertex1: this.m_vertex1,\n vertex2: this.m_vertex2,\n\n vertex0: this.m_vertex0,\n vertex3: this.m_vertex3,\n hasVertex0: this.m_hasVertex0,\n hasVertex3: this.m_hasVertex3,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): EdgeShape {\n const shape = new EdgeShape(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\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getType(): \"edge\" {\n return this.m_type;\n }\n\n /** @internal @deprecated */\n setNext(v?: Vec2Value): EdgeShape {\n return this.setNextVertex(v);\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n setNextVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex3.setVec2(v);\n this.m_hasVertex3 = true;\n } else {\n this.m_vertex3.setZero();\n this.m_hasVertex3 = false;\n }\n return this;\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n getNextVertex(): Vec2 {\n return this.m_vertex3;\n }\n\n /** @internal @deprecated */\n setPrev(v?: Vec2Value): EdgeShape {\n return this.setPrevVertex(v);\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n setPrevVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex0.setVec2(v);\n this.m_hasVertex0 = true;\n } else {\n this.m_vertex0.setZero();\n this.m_hasVertex0 = false;\n }\n return this;\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n getPrevVertex(): Vec2 {\n return this.m_vertex0;\n }\n\n /**\n * Set this as an isolated edge.\n */\n _set(v1: Vec2Value, v2: Vec2Value): EdgeShape {\n this.m_vertex1.setVec2(v1);\n this.m_vertex2.setVec2(v2);\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n return this;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): EdgeShape {\n const clone = new EdgeShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // p = p1 + t * d\n // v = v1 + s * e\n // p1 + t * d = v1 + s * e\n // s * e - t * d = p1 - v1\n\n // NOT_USED(childIndex);\n\n // Put the ray into the edge's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n const v1 = this.m_vertex1;\n const v2 = this.m_vertex2;\n const e = Vec2.sub(v2, v1);\n const normal = Vec2.neo(e.y, -e.x);\n normal.normalize();\n\n // q = p1 + t * d\n // dot(normal, q - v1) = 0\n // dot(normal, p1 - v1) + t * dot(normal, d) = 0\n const numerator = Vec2.dot(normal, Vec2.sub(v1, p1));\n const denominator = Vec2.dot(normal, d);\n\n if (denominator == 0.0) {\n return false;\n }\n\n const t = numerator / denominator;\n if (t < 0.0 || input.maxFraction < t) {\n return false;\n }\n\n const q = Vec2.add(p1, Vec2.mulNumVec2(t, d));\n\n // q = v1 + s * r\n // s = dot(q - v1, r) / dot(r, r)\n const r = Vec2.sub(v2, v1);\n const rr = Vec2.dot(r, r);\n if (rr == 0.0) {\n return false;\n }\n\n const s = Vec2.dot(Vec2.sub(q, v1), r) / rr;\n if (s < 0.0 || 1.0 < s) {\n return false;\n }\n\n output.fraction = t;\n if (numerator > 0.0) {\n output.normal = Rot.mulVec2(xf.q, normal).neg();\n } else {\n output.normal = Rot.mulVec2(xf.q, normal);\n }\n return true;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n matrix.transformVec2(v1, xf, this.m_vertex1);\n matrix.transformVec2(v2, xf, this.m_vertex2);\n\n AABB.combinePoints(aabb, v1, v2);\n AABB.extend(aabb, this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Edge = EdgeShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { AABBValue, RayCastOutput, RayCastInput, AABB } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\nimport { EdgeShape } from \"./EdgeShape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\ndeclare module \"./ChainShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function ChainShape(vertices?: Vec2Value[], loop?: boolean): ChainShape;\n}\n\n/**\n * A chain shape is a free form sequence of line segments. The chain has\n * two-sided collision, so you can use inside and outside collision. Therefore,\n * you may use any winding order. Connectivity information is used to create\n * smooth collisions.\n *\n * WARNING: The chain will not collide properly if there are self-intersections.\n */\n// @ts-expect-error\nexport class ChainShape extends Shape {\n static TYPE = \"chain\" as const;\n /** @hidden */ m_type: \"chain\";\n\n /** @hidden */ m_radius: number;\n\n /** @hidden */ m_vertices: Vec2[];\n /** @hidden */ m_count: number;\n /** @hidden */ m_prevVertex: Vec2 | null;\n /** @hidden */ m_nextVertex: Vec2 | null;\n /** @hidden */ m_hasPrevVertex: boolean;\n /** @hidden */ m_hasNextVertex: boolean;\n\n /** @hidden */ m_isLoop: boolean;\n\n constructor(vertices?: Vec2Value[], loop?: boolean) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof ChainShape)) {\n return new ChainShape(vertices, loop);\n }\n\n super();\n\n this.m_type = ChainShape.TYPE;\n this.m_radius = Settings.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\n this.m_isLoop = !!loop;\n\n if (vertices && vertices.length) {\n if (loop) {\n this._createLoop(vertices);\n } else {\n this._createChain(vertices);\n }\n }\n }\n\n /** @internal */\n _serialize(): object {\n const data = {\n type: this.m_type,\n vertices: this.m_vertices,\n isLoop: this.m_isLoop,\n hasPrevVertex: this.m_hasPrevVertex,\n hasNextVertex: this.m_hasNextVertex,\n prevVertex: null as Vec2 | null,\n nextVertex: null as Vec2 | 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\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): ChainShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n const shape = new ChainShape(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\n // clear() {\n // this.m_vertices.length = 0;\n // this.m_count = 0;\n // }\n\n getType(): \"chain\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal\n * Create a loop. This automatically adjusts connectivity.\n *\n * @param vertices an array of vertices, these are copied\n * @param count the vertex count\n */\n _createLoop(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 3);\n if (vertices.length < 3) {\n return;\n }\n\n for (let i = 1; i < vertices.length; ++i) {\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n // If the code crashes here, it means your vertices are too close together.\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_vertices = [];\n this.m_count = vertices.length + 1;\n for (let 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\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\n /**\n * @internal\n * Create a chain with isolated end vertices.\n *\n * @param vertices an array of vertices, these are copied\n */\n _createChain(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 2);\n for (let i = 1; i < vertices.length; ++i) {\n // If the code crashes here, it means your vertices are too close together.\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_count = vertices.length;\n for (let i = 0; i < vertices.length; ++i) {\n this.m_vertices[i] = Vec2.clone(vertices[i]);\n }\n\n this.m_hasPrevVertex = false;\n this.m_hasNextVertex = false;\n this.m_prevVertex = null;\n this.m_nextVertex = null;\n return this;\n }\n\n /** @hidden */\n _reset(): void {\n if (this.m_isLoop) {\n this._createLoop(this.m_vertices);\n } else {\n this._createChain(this.m_vertices);\n }\n }\n\n /**\n * Establish connectivity to a vertex that precedes the first vertex. Don't call\n * this for loops.\n */\n setPrevVertex(prevVertex: Vec2): void {\n // todo: copy or reference\n this.m_prevVertex = prevVertex;\n this.m_hasPrevVertex = true;\n }\n\n getPrevVertex(): Vec2 {\n return this.m_prevVertex;\n }\n\n /**\n * Establish connectivity to a vertex that follows the last vertex. Don't call\n * this for loops.\n */\n setNextVertex(nextVertex: Vec2): void {\n // todo: copy or reference\n this.m_nextVertex = nextVertex;\n this.m_hasNextVertex = true;\n }\n\n getNextVertex(): Vec2 {\n return this.m_nextVertex;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): ChainShape {\n const clone = new ChainShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): number {\n // edge count = vertex count - 1\n return this.m_count - 1;\n }\n\n // Get a child edge.\n getChildEdge(edge: EdgeShape, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count - 1);\n edge.m_type = EdgeShape.TYPE;\n edge.m_radius = this.m_radius;\n\n edge.m_vertex1 = this.m_vertices[childIndex];\n edge.m_vertex2 = this.m_vertices[childIndex + 1];\n\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\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\n getVertex(index: number): Vec2 {\n _ASSERT && console.assert(0 <= index && index <= this.m_count);\n if (index < this.m_count) {\n return this.m_vertices[index];\n } else {\n return this.m_vertices[0];\n }\n }\n\n isLoop(): boolean {\n return this.m_isLoop;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * This always return false.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n const edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1));\n return edgeShape.rayCast(output, input, xf, 0);\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n matrix.transformVec2(v1, xf, this.getVertex(childIndex));\n matrix.transformVec2(v2, xf, this.getVertex(childIndex + 1));\n\n AABB.combinePoints(aabb, v1, v2);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * Chains have zero mass.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.zeroVec2(massData.center);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\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}\n\nexport const Chain = ChainShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const center = matrix.vec2(0, 0);\n/** @internal */ const s = matrix.vec2(0, 0);\n\ndeclare module \"./PolygonShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PolygonShape(vertices?: Vec2Value[]): PolygonShape;\n}\n\n/**\n * A convex polygon. It is assumed that the interior of the polygon is to the\n * left of each edge. Polygons have a maximum number of vertices equal to\n * Settings.maxPolygonVertices. In most cases you should not need many vertices\n * for a convex polygon. extends Shape\n */\n// @ts-expect-error\nexport class PolygonShape extends Shape {\n static TYPE = \"polygon\" as const;\n /** @hidden */ m_type: \"polygon\";\n\n /** @hidden */ m_centroid: Vec2;\n /** @hidden */ m_vertices: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_normals: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_count: number;\n /** @hidden */ m_radius: number;\n\n constructor(vertices?: Vec2Value[]) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PolygonShape)) {\n return new PolygonShape(vertices);\n }\n\n super();\n\n this.m_type = PolygonShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n this.m_centroid = Vec2.zero();\n this.m_vertices = [];\n this.m_normals = [];\n this.m_count = 0;\n\n if (vertices && vertices.length) {\n this._set(vertices);\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertices: this.m_vertices,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): PolygonShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n\n const shape = new PolygonShape(vertices);\n return shape;\n }\n\n getType(): \"polygon\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): PolygonShape {\n const clone = new PolygonShape();\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 (let i = 0; i < this.m_count; i++) {\n clone.m_vertices.push(this.m_vertices[i].clone());\n }\n for (let i = 0; i < this.m_normals.length; i++) {\n clone.m_normals.push(this.m_normals[i].clone());\n }\n return clone;\n }\n\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /** @hidden */\n _reset(): void {\n this._set(this.m_vertices);\n }\n\n /**\n * @internal\n *\n * Create a convex hull from the given array of local points. The count must be\n * in the range [3, Settings.maxPolygonVertices].\n *\n * Warning: the points may be re-ordered, even if they form a convex polygon\n * Warning: collinear points are handled but not removed. Collinear points may\n * lead to poor stacking behavior.\n */\n _set(vertices: Vec2Value[]): void {\n _ASSERT && console.assert(3 <= vertices.length && vertices.length <= Settings.maxPolygonVertices);\n if (vertices.length < 3) {\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n let n = math_min(vertices.length, Settings.maxPolygonVertices);\n\n // Perform welding and copy vertices into local buffer.\n const ps: Vec2[] = []; // [Settings.maxPolygonVertices];\n for (let i = 0; i < n; ++i) {\n const v = vertices[i];\n\n let unique = true;\n for (let j = 0; j < ps.length; ++j) {\n if (Vec2.distanceSquared(v, ps[j]) < 0.25 * Settings.linearSlopSquared) {\n unique = false;\n break;\n }\n }\n\n if (unique) {\n ps.push(Vec2.clone(v));\n }\n }\n\n n = ps.length;\n if (n < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n // Create the convex hull using the Gift wrapping algorithm\n // http://en.wikipedia.org/wiki/Gift_wrapping_algorithm\n\n // Find the right most point on the hull (in case of multiple points bottom most is used)\n let i0 = 0;\n let x0 = ps[0].x;\n for (let i = 1; i < n; ++i) {\n const x = ps[i].x;\n if (x > x0 || (x === x0 && ps[i].y < ps[i0].y)) {\n i0 = i;\n x0 = x;\n }\n }\n\n const hull = [] as number[]; // [Settings.maxPolygonVertices];\n let m = 0;\n let ih = i0;\n\n while (true) {\n _ASSERT && console.assert(m < Settings.maxPolygonVertices);\n hull[m] = ih;\n\n let ie = 0;\n for (let j = 1; j < n; ++j) {\n if (ie === ih) {\n ie = j;\n continue;\n }\n\n const r = Vec2.sub(ps[ie], ps[hull[m]]);\n const v = Vec2.sub(ps[j], ps[hull[m]]);\n const c = Vec2.crossVec2Vec2(r, v);\n // c < 0 means counter-clockwise wrapping, c > 0 means clockwise wrapping\n if (c < 0.0) {\n ie = j;\n }\n\n // Collinearity check\n if (c === 0.0 && v.lengthSquared() > r.lengthSquared()) {\n ie = j;\n }\n }\n\n ++m;\n ih = ie;\n\n if (ie === i0) {\n break;\n }\n }\n\n if (m < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n this.m_count = m;\n\n // Copy vertices.\n this.m_vertices = [];\n for (let i = 0; i < m; ++i) {\n this.m_vertices[i] = ps[hull[i]];\n }\n\n // Compute normals. Ensure the edges have non-zero length.\n for (let i = 0; i < m; ++i) {\n const i1 = i;\n const i2 = i + 1 < m ? i + 1 : 0;\n const edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]);\n _ASSERT && console.assert(edge.lengthSquared() > EPSILON * EPSILON);\n this.m_normals[i] = Vec2.crossVec2Num(edge, 1.0);\n this.m_normals[i].normalize();\n }\n\n // Compute the polygon centroid.\n this.m_centroid = computeCentroid(this.m_vertices, m);\n }\n\n /** @internal */ _setAsBox(hx: number, hy: number, center?: Vec2Value, angle?: number): void {\n // start with right-bottom, counter-clockwise, as in Gift wrapping algorithm in PolygonShape._set()\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\n this.m_normals[0] = Vec2.neo(1.0, 0.0);\n this.m_normals[1] = Vec2.neo(0.0, 1.0);\n this.m_normals[2] = Vec2.neo(-1.0, 0.0);\n this.m_normals[3] = Vec2.neo(0.0, -1.0);\n\n this.m_count = 4;\n\n if (center && Vec2.isValid(center)) {\n angle = angle || 0;\n\n matrix.copyVec2(this.m_centroid, center);\n\n const xf = Transform.identity();\n xf.p.setVec2(center);\n xf.q.setAngle(angle);\n\n // Transform vertices and normals.\n for (let i = 0; i < this.m_count; ++i) {\n this.m_vertices[i] = Transform.mulVec2(xf, this.m_vertices[i]);\n this.m_normals[i] = Rot.mulVec2(xf.q, this.m_normals[i]);\n }\n }\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const pLocal = matrix.detransformVec2(temp, xf, p);\n\n for (let i = 0; i < this.m_count; ++i) {\n const dot = matrix.dotVec2(this.m_normals[i], pLocal) - matrix.dotVec2(this.m_normals[i], this.m_vertices[i]);\n if (dot > 0.0) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n\n // Put the ray into the polygon's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n let lower = 0.0;\n let upper = input.maxFraction;\n\n let index = -1;\n\n for (let i = 0; i < this.m_count; ++i) {\n // p = p1 + a * d\n // dot(normal, p - v) = 0\n // dot(normal, p1 - v) + a * dot(normal, d) = 0\n const numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1));\n const denominator = Vec2.dot(this.m_normals[i], d);\n\n if (denominator == 0.0) {\n if (numerator < 0.0) {\n return false;\n }\n } else {\n // Note: we want this predicate without division:\n // lower < numerator / denominator, where denominator < 0\n // Since denominator < 0, we have to flip the inequality:\n // lower < numerator / denominator <==> denominator * lower > numerator.\n if (denominator < 0.0 && numerator < lower * denominator) {\n // Increase lower.\n // The segment enters this half-space.\n lower = numerator / denominator;\n index = i;\n } else if (denominator > 0.0 && numerator < upper * denominator) {\n // Decrease upper.\n // The segment exits this half-space.\n upper = numerator / denominator;\n }\n }\n\n // The use of epsilon here causes the assert on lower to trip\n // in some cases. Apparently the use of epsilon was to make edge\n // shapes work, but now those are handled separately.\n // if (upper < lower - matrix.EPSILON)\n if (upper < lower) {\n return false;\n }\n }\n\n _ASSERT && console.assert(0.0 <= lower && lower <= input.maxFraction);\n\n if (index >= 0) {\n output.fraction = lower;\n output.normal = Rot.mulVec2(xf.q, this.m_normals[index]);\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const v = matrix.transformVec2(temp, xf, this.m_vertices[i]);\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, v.y);\n maxY = math_max(maxY, v.y);\n }\n\n matrix.setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius);\n matrix.setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n // Polygon mass, centroid, and inertia.\n // Let rho be the polygon density in mass per unit area.\n // Then:\n // mass = rho * int(dA)\n // centroid.x = (1/mass) * rho * int(x * dA)\n // centroid.y = (1/mass) * rho * int(y * dA)\n // I = rho * int((x*x + y*y) * dA)\n //\n // We can compute these integrals by summing all the integrals\n // for each triangle of the polygon. To evaluate the integral\n // for a single triangle, we make a change of variables to\n // the (u,v) coordinates of the triangle:\n // x = x0 + e1x * u + e2x * v\n // y = y0 + e1y * u + e2y * v\n // where 0 <= u && 0 <= v && u + v <= 1.\n //\n // We integrate u from [0,1-v] and then v from [0,1].\n // We also need to use the Jacobian of the transformation:\n // D = cross(e1, e2)\n //\n // Simplification: triangle centroid = (1/3) * (p1 + p2 + p3)\n //\n // The rest of the derivation is handled by computer algebra.\n\n _ASSERT && console.assert(this.m_count >= 3);\n\n matrix.zeroVec2(center);\n let area = 0.0;\n let I = 0.0;\n\n // s is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n matrix.zeroVec2(s);\n\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < this.m_count; ++i) {\n matrix.plusVec2(s, this.m_vertices[i]);\n }\n matrix.scaleVec2(s, 1.0 / this.m_count, s);\n\n const k_inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < this.m_count; ++i) {\n // Triangle vertices.\n matrix.subVec2(e1, this.m_vertices[i], s);\n if ( i + 1 < this.m_count) {\n matrix.subVec2(e2, this.m_vertices[i + 1], s);\n } else {\n matrix.subVec2(e2, this.m_vertices[0], s);\n }\n\n const D = matrix.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine2Vec2(temp, triangleArea * k_inv3, e1, triangleArea * k_inv3, e2);\n matrix.plusVec2(center, temp);\n\n const ex1 = e1.x;\n const ey1 = e1.y;\n const ex2 = e2.x;\n const ey2 = e2.y;\n\n const intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2;\n const inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2;\n\n I += (0.25 * k_inv3 * D) * (intx2 + inty2);\n }\n\n // Total mass\n massData.mass = density * area;\n\n // Center of mass\n _ASSERT && console.assert(area > EPSILON);\n matrix.scaleVec2(center, 1.0 / area, center);\n matrix.addVec2(massData.center, center, s);\n\n // Inertia tensor relative to the local origin (point s).\n massData.I = density * I;\n\n // Shift to center of mass then to original body origin.\n massData.I += massData.mass * (matrix.dotVec2(massData.center, massData.center) - matrix.dotVec2(center, center));\n }\n\n /**\n * Validate convexity. This is a very time consuming operation.\n * @returns true if valid\n */\n validate(): boolean {\n for (let i = 0; i < this.m_count; ++i) {\n const i1 = i;\n const i2 = i < this.m_count - 1 ? i1 + 1 : 0;\n const p = this.m_vertices[i1];\n matrix.subVec2(e, this.m_vertices[i2], p);\n\n for (let j = 0; j < this.m_count; ++j) {\n if (j == i1 || j == i2) {\n continue;\n }\n\n const c = matrix.crossVec2Vec2(e, matrix.subVec2(temp, this.m_vertices[j], p));\n if (c < 0.0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\n for (let 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}\n\n/** @internal */ function computeCentroid(vs: Vec2[], count: number): Vec2 {\n _ASSERT && console.assert(count >= 3);\n\n const c = Vec2.zero();\n let area = 0.0;\n\n // pRef is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n const pRef = Vec2.zero();\n if (false) {\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < count; ++i) {\n pRef.add(vs[i]);\n }\n pRef.mul(1.0 / count);\n }\n\n const inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < count; ++i) {\n // Triangle vertices.\n const p1 = pRef;\n const p2 = vs[i];\n const p3 = i + 1 < count ? vs[i + 1] : vs[0];\n\n const e1 = Vec2.sub(p2, p1);\n const e2 = Vec2.sub(p3, p1);\n\n const D = Vec2.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine3Vec2(temp, 1, p1, 1, p2, 1, p3);\n matrix.plusScaleVec2(c, triangleArea * inv3, temp);\n }\n\n // Centroid\n _ASSERT && console.assert(area > EPSILON);\n c.mul(1.0 / area);\n return c;\n}\n\nexport const Polygon = PolygonShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Shape } from \"../Shape\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_PI = Math.PI;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\ndeclare module \"./CircleShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function CircleShape(position: Vec2Value, radius?: number): CircleShape;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function CircleShape(radius?: number): CircleShape;\n}\n\n/** Circle shape. */\n// @ts-expect-error\nexport class CircleShape extends Shape {\n static TYPE = \"circle\" as const;\n /** @hidden */ m_type: \"circle\";\n\n /** @hidden */ m_p: Vec2;\n /** @hidden */ m_radius: number;\n\n constructor(position: Vec2Value, radius?: number);\n constructor(radius?: number);\n constructor(a: any, b?: any) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof CircleShape)) {\n return new CircleShape(a, b);\n }\n\n super();\n\n this.m_type = CircleShape.TYPE;\n this.m_p = Vec2.zero();\n this.m_radius = 1;\n\n if (typeof a === \"object\" && Vec2.isValid(a)) {\n this.m_p.setVec2(a);\n\n if (typeof b === \"number\") {\n this.m_radius = b;\n }\n\n } else if (typeof a === \"number\") {\n this.m_radius = a;\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n p: this.m_p,\n radius: this.m_radius,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): CircleShape {\n return new CircleShape(data.p, data.radius);\n }\n\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getType(): \"circle\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getCenter(): Vec2 {\n return this.m_p;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): CircleShape {\n const clone = new CircleShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const center = matrix.transformVec2(temp, xf, this.m_p);\n return matrix.distSqrVec2(p, center) <= this.m_radius * this.m_radius;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // Collision Detection in Interactive 3D Environments by Gino van den Bergen\n // From Section 3.1.2\n // x = s + a * r\n // norm(x) = radius\n\n const position = Vec2.add(xf.p, Rot.mulVec2(xf.q, this.m_p));\n const s = Vec2.sub(input.p1, position);\n const b = Vec2.dot(s, s) - this.m_radius * this.m_radius;\n\n // Solve quadratic equation.\n const r = Vec2.sub(input.p2, input.p1);\n const c = Vec2.dot(s, r);\n const rr = Vec2.dot(r, r);\n const sigma = c * c - rr * b;\n\n // Check for negative discriminant and short segment.\n if (sigma < 0.0 || rr < EPSILON) {\n return false;\n }\n\n // Find the point of intersection of the line with the circle.\n let a = -(c + math_sqrt(sigma));\n\n // Is the intersection point on the segment?\n if (0.0 <= a && a <= input.maxFraction * rr) {\n a /= rr;\n output.fraction = a;\n output.normal = Vec2.add(s, Vec2.mulNumVec2(a, r));\n output.normal.normalize();\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n const p = matrix.transformVec2(temp, xf, this.m_p);\n\n matrix.setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius);\n matrix.setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n massData.mass = density * math_PI * this.m_radius * this.m_radius;\n matrix.copyVec2(massData.center, this.m_p);\n // inertia about the local origin\n massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + matrix.lengthSqrVec2(this.m_p));\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Circle = CircleShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. A value of 0 disables softness.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * Distance length.\n */\n length?: number;\n}\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointDef extends JointDef, DistanceJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0\n};\n\ndeclare module \"./DistanceJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function DistanceJoint(def: DistanceJointDef): DistanceJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function DistanceJoint(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value): DistanceJoint;\n}\n\n/**\n * A distance joint constrains two points on two bodies to remain at a fixed\n * distance from each other. You can view this as a massless, rigid rod.\n */\n// @ts-expect-error\nexport class DistanceJoint extends Joint {\n static TYPE = \"distance-joint\" as const;\n\n // Solver shared\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_length: number;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_gamma: number;\n /** @internal */ m_bias: number;\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n /**\n * @param def DistanceJoint definition.\n */\n constructor(def: DistanceJointDef);\n /**\n * @param anchorA Anchor A in global coordination.\n * @param anchorB Anchor B in global coordination.\n */\n constructor(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value);\n constructor(def: DistanceJointDef, bodyA?: Body, bodyB?: Body, anchorA?: Vec2Value, anchorB?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof DistanceJoint)) {\n return new DistanceJoint(def, bodyA, bodyB, anchorA, anchorB);\n }\n\n // order of constructor arguments is changed in v0.2\n if (bodyB && anchorA && (\"m_type\" in anchorA) && (\"x\" in bodyB) && (\"y\" in bodyB)) {\n const temp = bodyB;\n bodyB = anchorA as any as Body;\n anchorA = temp as any as Vec2;\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = DistanceJoint.TYPE;\n\n // Solver shared\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 :\n 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.0;\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n\n // 1-D constrained system\n // m (v2 - v1) = lambda\n // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass.\n // x2 = x1 + h * v2\n\n // 1-D mass-damper-spring system\n // m (v2 - v1) + h * d * v2 + h * k *\n\n // C = norm(p2 - p1) - L\n // u = (p2 - p1) / norm(p2 - p1)\n // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1))\n // J = [-u -cross(r1, u) u cross(r2, u)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n length: this.m_length,\n\n impulse: this.m_impulse,\n gamma: this.m_gamma,\n bias: this.m_bias,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): DistanceJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new DistanceJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\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\n if (def.length > 0) {\n this.m_length = +def.length;\n } else if (def.length < 0) { // don't change length\n } else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) {\n this.m_length = Vec2.distance(\n this.m_bodyA.getWorldPoint(this.m_localAnchorA),\n this.m_bodyB.getWorldPoint(this.m_localAnchorB)\n );\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the natural length. Manipulating the length can lead to non-physical\n * behavior when the frequency is zero.\n */\n setLength(length: number): void {\n this.m_length = length;\n }\n\n /**\n * Get the natural length.\n */\n getLength(): number {\n return this.m_length;\n }\n\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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(cB, this.m_rB), Vec2.add(cA, this.m_rA));\n\n // Handle singularity.\n const length = this.m_u.length();\n if (length > Settings.linearSlop) {\n this.m_u.mul(1.0 / length);\n } else {\n this.m_u.setNum(0.0, 0.0);\n }\n\n const crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n let invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu;\n\n // Compute the effective mass matrix.\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (this.m_frequencyHz > 0.0) {\n const C = length - this.m_length;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * this.m_mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_mass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invMass += this.m_gamma;\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n } else {\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n const Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA);\n\n const impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse);\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n if (this.m_frequencyHz > 0.0) {\n // There is no position correction for soft distance constraints.\n return true;\n }\n\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const length = u.normalize();\n const C = clamp(length - this.m_length, -Settings.maxLinearCorrection, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointOpt extends JointOpt {\n /**\n * The maximum friction force in N.\n */\n maxForce?: number;\n /**\n * The maximum friction torque in N-m.\n */\n maxTorque?: number;\n}\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointDef extends JointDef, FrictionJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n maxTorque : 0.0,\n};\n\ndeclare module \"./FrictionJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function FrictionJoint(def: FrictionJointDef): FrictionJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function FrictionJoint(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): FrictionJoint;\n}\n\n/**\n * Friction joint. This is used for top-down friction. It provides 2D\n * translational friction and angular friction.\n */\n// @ts-expect-error\nexport class FrictionJoint extends Joint {\n static TYPE = \"friction-joint\" as const;\n\n /** @internal */ m_type: \"friction-joint\";\n\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n // Solver shared\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: FrictionJointDef);\n /**\n * @param anchor Anchor in global coordination.\n */\n constructor(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: FrictionJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof FrictionJoint)) {\n return new FrictionJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = FrictionJoint.TYPE;\n\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\n // Solver shared\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): FrictionJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new FrictionJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y\n * 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\n * this.m_rB.x;\n\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.sub(\n Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)),\n Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA))\n );\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = this.m_linearImpulse;\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) {\n this.m_linearImpulse.normalize();\n this.m_linearImpulse.mul(maxImpulse);\n }\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Vec3, Vec3Value } from \"./Vec3\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 3-by-3 matrix. Stored in column-major order.\n */\nexport class Mat33 {\n ex: Vec3;\n ey: Vec3;\n ez: Vec3;\n\n constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value);\n constructor();\n constructor(a?: Vec3Value, b?: Vec3Value, c?: Vec3Value) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec3.clone(a);\n this.ey = Vec3.clone(b);\n this.ez = Vec3.clone(c);\n } else {\n this.ex = Vec3.zero();\n this.ey = Vec3.zero();\n this.ez = Vec3.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat33.isValid(o), \"Invalid Mat33!\", o);\n }\n\n /**\n * Set this matrix to all zeros.\n */\n setZero(): Mat33 {\n this.ex.setZero();\n this.ey.setZero();\n this.ez.setZero();\n return this;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve33(v: Vec3Value): Vec3 {\n // let det = matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, this.ez));\n let cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y;\n let cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z;\n let cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x;\n let det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = new Vec3();\n // r.x = det * matrix.dotVec3(v, matrix.newCrossVec3(this.ey, this.ez));\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 * (v.x * cross_x + v.y * cross_y + v.z * cross_z);\n\n // r.y = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(v, this.ez));\n cross_x = v.y * this.ez.z - v.z * this.ez.y;\n cross_y = v.z * this.ez.x - v.x * this.ez.z;\n cross_z = v.x * this.ez.y - v.y * this.ez.x;\n r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z);\n\n // r.z = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, v));\n cross_x = this.ey.y * v.z - this.ey.z * v.y;\n cross_y = this.ey.z * v.x - this.ey.x * v.z;\n cross_z = this.ey.x * v.y - this.ey.y * v.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\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix\n * equation.\n */\n solve22(v: Vec2Value): Vec2 {\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a21 = this.ex.y;\n const a22 = this.ey.y;\n let det = a11 * a22 - a12 * a21;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = Vec2.zero();\n r.x = det * (a22 * v.x - a12 * v.y);\n r.y = det * (a11 * v.y - a21 * v.x);\n return r;\n }\n\n /**\n * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if\n * singular.\n */\n getInverse22(M: Mat33): void {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n M.ex.x = det * d;\n M.ey.x = -det * b;\n M.ex.z = 0.0;\n M.ex.y = -det * c;\n M.ey.y = det * a;\n M.ey.z = 0.0;\n M.ez.x = 0.0;\n M.ez.y = 0.0;\n M.ez.z = 0.0;\n }\n\n /**\n * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix\n * if singular.\n */\n getSymInverse33(M: Mat33): void {\n let det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez));\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a13 = this.ez.x;\n const a22 = this.ey.y;\n const a23 = this.ez.y;\n const a33 = this.ez.z;\n\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\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\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\n /**\n * Multiply a matrix times a vector.\n */\n static mul(a: Mat33, b: Vec2Value): Vec2;\n static mul(a: Mat33, b: Vec3Value): Vec3;\n static mul(a, b) {\n _ASSERT && Mat33.assert(a);\n if (b && \"z\" in b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n\n } else if (b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec3(a: Mat33, b: Vec3Value): Vec3 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n }\n\n static mulVec2(a: Mat33, b: Vec2Value): Vec2 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n static add(a: Mat33, b: Mat33): Mat33 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Mat33.assert(b);\n return new Mat33(\n Vec3.add(a.ex, b.ex),\n Vec3.add(a.ey, b.ey),\n Vec3.add(a.ez, b.ez)\n );\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n// todo: use string?\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n} \n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointOpt extends JointOpt {\n /**\n * The lower angle for the joint limit (radians).\n */\n lowerAngle?: number;\n /**\n * The upper angle for the joint limit (radians).\n */\n upperAngle?: number;\n /**\n * The maximum motor torque used to achieve the desired motor speed. Usually\n * in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed. Usually in radians per second.\n */\n motorSpeed?: number;\n /**\n * A flag to enable joint limits.\n */\n enableLimit?: boolean;\n /**\n * A flag to enable the joint motor.\n */\n enableMotor?: boolean;\n}\n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointDef extends JointDef, RevoluteJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n lowerAngle : 0.0,\n upperAngle : 0.0,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n enableLimit : false,\n enableMotor : false\n};\n\ndeclare module \"./RevoluteJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RevoluteJoint(def: RevoluteJointDef): RevoluteJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RevoluteJoint(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): RevoluteJoint;\n}\n\n/**\n * A revolute joint constrains two bodies to share a common point while they are\n * free to rotate about the point. The relative rotation about the shared point\n * is the joint angle. You can limit the relative rotation with a joint limit\n * that specifies a lower and upper angle. You can use a motor to drive the\n * relative rotation about the shared point. A maximum motor torque is provided\n * so that infinite forces are not generated.\n */\n// @ts-expect-error\nexport class RevoluteJoint extends Joint {\n static TYPE = \"revolute-joint\" as const;\n\n /** @internal */ m_type: \"revolute-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerAngle: number;\n /** @internal */ m_upperAngle: number;\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n // effective mass for point-to-point constraint.\n /** @internal */ m_mass: Mat33;\n // effective mass for motor/limit angular constraint.\n /** @internal */ m_motorMass: number;\n /** @internal */ m_limitState: number;\n\n constructor(def: RevoluteJointDef);\n constructor(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RevoluteJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RevoluteJoint)) {\n return new RevoluteJoint(def, bodyA, bodyB, anchor);\n }\n\n def = def ?? {} as RevoluteJointDef;\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_mass = new Mat33();\n this.m_limitState = LimitState.inactiveLimit;\n\n this.m_type = RevoluteJoint.TYPE;\n\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\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\n if (Number.isFinite(def.referenceAngle)) {\n this.m_referenceAngle = def.referenceAngle;\n } else {\n this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle();\n }\n\n this.m_impulse = new Vec3();\n this.m_motorImpulse = 0.0;\n\n this.m_lowerAngle = def.lowerAngle ?? DEFAULTS.lowerAngle;\n this.m_upperAngle = def.upperAngle ?? DEFAULTS.upperAngle;\n this.m_maxMotorTorque = def.maxMotorTorque ?? DEFAULTS.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed ?? DEFAULTS.motorSpeed;\n this.m_enableLimit = def.enableLimit ?? DEFAULTS.enableLimit;\n this.m_enableMotor = def.enableMotor ?? DEFAULTS.enableMotor;\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Motor constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any):RevoluteJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RevoluteJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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 !== undefined) {\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 !== undefined) {\n this.m_enableMotor = def.enableMotor;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle in radians.\n */\n getJointAngle(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle speed in radians per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_angularVelocity - bA.m_angularVelocity;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Get the current motor torque given the inverse time step. Unit is N*m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set the motor speed in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set the maximum motor torque, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit in radians.\n */\n getLowerLimit(): number {\n return this.m_lowerAngle;\n }\n\n /**\n * Get the upper joint limit in radians.\n */\n getUpperLimit(): number {\n return this.m_upperAngle;\n }\n\n /**\n * Set the joint limits in radians.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(lower <= upper);\n\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.0;\n this.m_lowerAngle = lower;\n this.m_upperAngle = upper;\n }\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force given the inverse time step. Unit is N.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque due to the joint limit given the inverse time step.\n * Unit is N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\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\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n\n if (this.m_enableMotor == false || fixedRotation) {\n this.m_motorImpulse = 0.0;\n }\n\n if (this.m_enableLimit && fixedRotation == false) {\n const jointAngle = aB - aA - this.m_referenceAngle;\n\n if (math_abs(this.m_upperAngle - this.m_lowerAngle) < 2.0 * Settings.angularSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointAngle <= this.m_lowerAngle) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atLowerLimit;\n\n } else if (jointAngle >= this.m_upperAngle) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atUpperLimit;\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\n // Solve motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits && fixedRotation == false) {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(this.m_mass.solve33(Cdot));\n\n if (this.m_limitState == LimitState.equalLimits) {\n this.m_impulse.add(impulse);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse < 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse > 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n\n } else {\n // Solve point-to-point constraint\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const impulse = this.m_mass.solve22(Vec2.neg(Cdot));\n\n this.m_impulse.x += impulse.x;\n this.m_impulse.y += impulse.y;\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n let angularError = 0.0;\n let positionError = 0.0;\n\n const fixedRotation = (this.m_invIA + this.m_invIB == 0.0);\n\n // Solve angular limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const angle = aB - aA - this.m_referenceAngle;\n let limitImpulse = 0.0;\n\n if (this.m_limitState == LimitState.equalLimits) {\n // Prevent large angular corrections\n const C = clamp(angle - this.m_lowerAngle, -Settings.maxAngularCorrection, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n angularError = math_abs(C);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n let C = angle - this.m_lowerAngle;\n angularError = -C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C + Settings.angularSlop, -Settings.maxAngularCorrection, 0.0);\n limitImpulse = -this.m_motorMass * C;\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n let C = angle - this.m_upperAngle;\n angularError = C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C - Settings.angularSlop, 0.0, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n }\n\n aA -= this.m_invIA * limitImpulse;\n aB += this.m_invIB * limitImpulse;\n }\n\n // Solve point-to-point constraint.\n {\n qA.setAngle(aA);\n qB.setAngle(aB);\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n const C = Vec2.zero();\n C.addCombine(1, cB, 1, rB);\n C.subCombine(1, cA, 1, rA);\n positionError = C.length();\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y;\n K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y;\n K.ey.x = K.ex.y;\n K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x;\n\n const impulse = Vec2.neg(K.solve(C));\n\n cA.subMul(mA, impulse);\n aA -= iA * Vec2.crossVec2Vec2(rA, impulse);\n\n cB.addMul(mB, impulse);\n aB += iB * Vec2.crossVec2Vec2(rB, impulse);\n }\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3, \n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointOpt extends JointOpt {\n /**\n * Enable/disable the joint limit.\n */\n enableLimit?: boolean;\n /**\n * The lower translation limit, usually in meters.\n */\n lowerTranslation?: number;\n /**\n * The upper translation limit, usually in meters.\n */\n upperTranslation?: number;\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorForce?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointDef extends JointDef, PrismaticJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation unit axis in bodyA.\n */\n localAxisA: Vec2Value;\n /**\n * referenceAngle The constrained angle between the bodies:\n * bodyB_angle - bodyA_angle.\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableLimit : false,\n lowerTranslation : 0.0,\n upperTranslation : 0.0,\n enableMotor : false,\n maxMotorForce : 0.0,\n motorSpeed : 0.0\n};\n\ndeclare module \"./PrismaticJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PrismaticJoint(def: PrismaticJointDef): PrismaticJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PrismaticJoint(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value): PrismaticJoint;\n}\n\n/**\n * A prismatic joint. This joint provides one degree of freedom: translation\n * along an axis fixed in bodyA. Relative rotation is prevented. You can use a\n * joint limit to restrict the range of motion and a joint motor to drive the\n * motion or to model joint friction.\n */\n// @ts-expect-error\nexport class PrismaticJoint extends Joint {\n static TYPE = \"prismatic-joint\" as const;\n\n /** @internal */ m_type: \"prismatic-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerTranslation: number;\n /** @internal */ m_upperTranslation: number;\n /** @internal */ m_maxMotorForce: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n /** @internal */ m_limitState: number; // TODO enum\n /** @internal */ m_axis: Vec2;\n /** @internal */ m_perp: Vec2;\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_s1: number;\n /** @internal */ m_s2: number;\n /** @internal */ m_a1: number;\n /** @internal */ m_a2: number;\n /** @internal */ m_K: Mat33;\n\n constructor(def: PrismaticJointDef);\n constructor(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: PrismaticJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PrismaticJoint)) {\n return new PrismaticJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PrismaticJoint.TYPE;\n\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, 0.0));\n this.m_localXAxisA.normalize();\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle();\n\n this.m_impulse = new Vec3();\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n\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.inactiveLimit;\n\n this.m_axis = Vec2.zero();\n this.m_perp = Vec2.zero();\n\n this.m_K = new Mat33();\n\n // Linear constraint (point-to-line)\n // d = p2 - p1 = x2 + r2 - x1 - r1\n // C = dot(perp, d)\n // Cdot = dot(d, cross(w1, perp)) + dot(perp, v2 + cross(w2, r2) - v1 -\n // cross(w1, r1))\n // = -dot(perp, v1) - dot(cross(d + r1, perp), w1) + dot(perp, v2) +\n // dot(cross(r2, perp), v2)\n // J = [-perp, -cross(d + r1, perp), perp, cross(r2,perp)]\n //\n // Angular constraint\n // C = a2 - a1 + a_initial\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n //\n // K = J * invM * JT\n //\n // J = [-a -s1 a s2]\n // [0 -1 0 1]\n // a = perp\n // s1 = cross(d + r1, a) = cross(p2 - x1, a)\n // s2 = cross(r2, a) = cross(p2 - x2, a)\n\n // Motor/Limit linear constraint\n // C = dot(ax1, d)\n // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) +\n // dot(cross(r2, ax1), v2)\n // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)]\n\n // Block Solver\n // We develop a block solver that includes the joint limit. This makes the\n // limit stiff (inelastic) even\n // when the mass has poor distribution (leading to large torques about the\n // joint anchor points).\n //\n // The Jacobian has 3 rows:\n // J = [-uT -s1 uT s2] // linear\n // [0 -1 0 1] // angular\n // [-vT -a1 vT a2] // limit\n //\n // u = perp\n // v = axis\n // s1 = cross(d + r1, u), s2 = cross(r2, u)\n // a1 = cross(d + r1, v), a2 = cross(r2, v)\n\n // M * (v2 - v1) = JT * df\n // J * v2 = bias\n //\n // v2 = v1 + invM * JT * df\n // J * (v1 + invM * JT * df) = bias\n // K * df = bias - J * v1 = -Cdot\n // K = J * invM * JT\n // Cdot = J * v1 - bias\n //\n // Now solve for f2.\n // df = f2 - f1\n // K * (f2 - f1) = -Cdot\n // f2 = invK * (-Cdot) + f1\n //\n // Clamp accumulated limit impulse.\n // lower: f2(3) = max(f2(3), 0)\n // upper: f2(3) = min(f2(3), 0)\n //\n // Solve for correct f2(1:2)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:3) * f1\n // = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:2) * f1(1:2) + K(1:2,3) * f1(3)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3)) +\n // K(1:2,1:2) * f1(1:2)\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n //\n // Now compute impulse to be applied:\n // df = f2 - f1\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PrismaticJoint {\n data = {...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 const joint = new PrismaticJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, 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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const pA = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const pB = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = this.m_bodyA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const rA = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter));\n const rB = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter));\n const p1 = Vec2.add(bA.m_sweep.c, rA);\n const p2 = Vec2.add(bB.m_sweep.c, rB);\n const d = Vec2.sub(p2, p1);\n const axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA);\n\n const vA = bA.m_linearVelocity;\n const vB = bB.m_linearVelocity;\n const wA = bA.m_angularVelocity;\n const wB = bB.m_angularVelocity;\n\n const speed = Vec2.dot(d, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB, wB, rB), Vec2.addCrossNumVec2(vA, wA, rA)));\n return speed;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit, usually in meters.\n */\n getLowerLimit(): number {\n return this.m_lowerTranslation;\n }\n\n /**\n * Get the upper joint limit, usually in meters.\n */\n getUpperLimit(): number {\n return this.m_upperTranslation;\n }\n\n /**\n * Set the joint limits, usually in meters.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(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.0;\n }\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in meters per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Set the maximum motor force, usually in N.\n */\n setMaxMotorForce(force: number): void {\n if (force == this.m_maxMotorForce) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorForce = force;\n }\n\n getMaxMotorForce(): number {\n return this.m_maxMotorForce;\n }\n\n /**\n * Get the motor speed, usually in meters per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Get the current motor force given the inverse time step, usually in N.\n */\n getMotorForce(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\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\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.y;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute motor Jacobian and effective mass.\n {\n this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_axis);\n this.m_a2 = Vec2.crossVec2Vec2(rB, this.m_axis);\n\n this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2\n * this.m_a2;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n }\n\n // Prismatic constraint.\n {\n this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_perp);\n this.m_s2 = Vec2.crossVec2Vec2(rB, this.m_perp);\n\n const s1test = Vec2.crossVec2Vec2(rA, this.m_perp);\n\n const k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2;\n const k12 = iA * this.m_s1 + iB * this.m_s2;\n const k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For bodies with fixed rotation.\n k22 = 1.0;\n }\n const k23 = iA * this.m_a1 + iB * this.m_a2;\n const k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2;\n\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\n // Compute motor and limit terms.\n if (this.m_enableLimit) {\n\n const jointTranslation = Vec2.dot(this.m_axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Settings.linearSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointTranslation <= this.m_lowerTranslation) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_limitState = LimitState.atLowerLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else if (jointTranslation >= this.m_upperTranslation) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_limitState = LimitState.atUpperLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n if (this.m_enableMotor == false) {\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse\n + this.m_impulse.z, this.m_axis);\n const LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1;\n const LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Solve linear motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits) {\n const Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB, vA)) + this.m_a2 * wB\n - this.m_a1 * wA;\n let impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorForce;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse,\n -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_axis);\n const LA = impulse * this.m_a1;\n const LB = impulse * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n const Cdot1 = Vec2.zero();\n Cdot1.x += Vec2.dot(this.m_perp, vB) + this.m_s2 * wB;\n Cdot1.x -= Vec2.dot(this.m_perp, vA) + this.m_s1 * wA;\n Cdot1.y = wB - wA;\n\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit) {\n // Solve prismatic and limit constraint in block form.\n let Cdot2 = 0;\n Cdot2 += Vec2.dot(this.m_axis, vB) + this.m_a2 * wB;\n Cdot2 -= Vec2.dot(this.m_axis, vA) + this.m_a1 * wA;\n\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const f1 = Vec3.clone(this.m_impulse);\n let df = this.m_K.solve33(Vec3.neg(Cdot));\n this.m_impulse.add(df);\n\n if (this.m_limitState == LimitState.atLowerLimit) {\n this.m_impulse.z = math_max(this.m_impulse.z, 0.0);\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n this.m_impulse.z = math_min(this.m_impulse.z, 0.0);\n }\n\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n const b = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y));\n const f2r = Vec2.add(this.m_K.solve22(b), Vec2.neo(f1.x, f1.y));\n this.m_impulse.x = f2r.x;\n this.m_impulse.y = f2r.y;\n\n df = Vec3.sub(this.m_impulse, f1);\n\n const P = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis);\n const LA = df.x * this.m_s1 + df.y + df.z * this.m_a1;\n const LB = df.x * this.m_s2 + df.y + df.z * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n // Limit is inactive, just solve the prismatic constraint in block form.\n const df = this.m_K.solve22(Vec2.neg(Cdot1));\n this.m_impulse.x += df.x;\n this.m_impulse.y += df.y;\n\n const P = Vec2.mulNumVec2(df.x, this.m_perp);\n const LA = df.x * this.m_s1 + df.y;\n const LB = df.x * this.m_s2 + df.y;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute fresh Jacobians\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const axis = Rot.mulVec2(qA, this.m_localXAxisA);\n const a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), axis);\n const a2 = Vec2.crossVec2Vec2(rB, axis);\n const perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), perp);\n const s2 = Vec2.crossVec2Vec2(rB, perp);\n\n let impulse = new Vec3();\n const C1 = Vec2.zero();\n C1.x = Vec2.dot(perp, d);\n C1.y = aB - aA - this.m_referenceAngle;\n\n let linearError = math_abs(C1.x);\n const angularError = math_abs(C1.y);\n\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n let active = false; // bool\n let C2 = 0.0;\n if (this.m_enableLimit) {\n\n const translation = Vec2.dot(axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * linearSlop) {\n // Prevent large angular corrections\n C2 = clamp(translation, -maxLinearCorrection, maxLinearCorrection);\n linearError = math_max(linearError, math_abs(translation));\n active = true;\n\n } else if (translation <= this.m_lowerTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_lowerTranslation + linearSlop,\n -maxLinearCorrection, 0.0);\n linearError = Math\n .max(linearError, this.m_lowerTranslation - translation);\n active = true;\n\n } else if (translation >= this.m_upperTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_upperTranslation - linearSlop, 0.0,\n maxLinearCorrection);\n linearError = Math\n .max(linearError, translation - this.m_upperTranslation);\n active = true;\n }\n }\n\n if (active) {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n const k13 = iA * s1 * a1 + iB * s2 * a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For fixed rotation\n k22 = 1.0;\n }\n const k23 = iA * a1 + iB * a2;\n const k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2;\n\n const 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\n const C = new Vec3();\n C.x = C1.x;\n C.y = C1.y;\n C.z = C2;\n\n impulse = K.solve33(Vec3.neg(C));\n } else {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n k22 = 1.0;\n }\n\n const K = new Mat22();\n K.ex.setNum(k11, k12);\n K.ey.setNum(k12, k22);\n\n const impulse1 = K.solve(Vec2.neg(C1));\n impulse.x = impulse1.x;\n impulse.y = impulse1.y;\n impulse.z = 0.0;\n }\n\n const P = Vec2.combine(impulse.x, perp, impulse.z, axis);\n const LA = impulse.x * s1 + impulse.y + impulse.z * a1;\n const LB = impulse.x * s2 + impulse.y + impulse.z * a2;\n\n cA.subMul(mA, P);\n aA -= iA * LA;\n cB.addMul(mB, P);\n aB += iB * LB;\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError <= Settings.linearSlop\n && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { } from \"../../common/Math\";\nimport { Vec2 } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { RevoluteJoint } from \"./RevoluteJoint\";\nimport { PrismaticJoint } from \"./PrismaticJoint\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointOpt extends JointOpt {\n /**\n * The gear ratio. See {@link GearJoint} for explanation.\n */\n ratio?: number;\n}\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointDef extends JointDef, GearJointOpt {\n /**\n * The first revolute/prismatic joint attached to the gear joint.\n */\n joint1: RevoluteJoint | PrismaticJoint;\n /**\n * The second prismatic/revolute joint attached to the gear joint.\n */\n joint2: RevoluteJoint | PrismaticJoint;\n}\n\n/** @internal */ const DEFAULTS = {\n ratio : 1.0\n};\n\ndeclare module \"./GearJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function GearJoint(def: GearJointDef): GearJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function GearJoint(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number): GearJoint;\n}\n\n/**\n * A gear joint is used to connect two joints together. Either joint can be a\n * revolute or prismatic joint. You specify a gear ratio to bind the motions\n * together: coordinate1 + ratio * coordinate2 = constant\n *\n * The ratio can be negative or positive. If one joint is a revolute joint and\n * the other joint is a prismatic joint, then the ratio will have units of\n * length or units of 1/length. Warning: You have to manually destroy the gear\n * joint if joint1 or joint2 is destroyed.\n *\n * This definition requires two existing revolute or prismatic joints (any\n * combination will work).\n */\n// @ts-expect-error\nexport class GearJoint extends Joint {\n static TYPE = \"gear-joint\" as const;\n\n /** @internal */ m_type: \"gear-joint\";\n /** @internal */ m_joint1: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_joint2: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_type1: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_type2: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_bodyC: Body;\n /** @internal */ m_localAnchorC: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_referenceAngleA: number;\n /** @internal */ m_localAxisC: Vec2;\n /** @internal */ m_bodyD: Body;\n /** @internal */ m_localAnchorD: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngleB: number;\n /** @internal */ m_localAxisD: Vec2;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_lcA: Vec2;\n /** @internal */ m_lcB: Vec2;\n /** @internal */ m_lcC: Vec2;\n /** @internal */ m_lcD: Vec2;\n /** @internal */ m_mA: number;\n /** @internal */ m_mB: number;\n /** @internal */ m_mC: number;\n /** @internal */ m_mD: number;\n /** @internal */ m_iA: number;\n /** @internal */ m_iB: number;\n /** @internal */ m_iC: number;\n /** @internal */ m_iD: number;\n /** @internal */ m_JvAC: Vec2;\n /** @internal */ m_JvBD: Vec2;\n /** @internal */ m_JwA: number;\n /** @internal */ m_JwB: number;\n /** @internal */ m_JwC: number;\n /** @internal */ m_JwD: number;\n /** @internal */ m_mass: number;\n\n constructor(def: GearJointDef);\n constructor(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number);\n constructor(def: GearJointDef, bodyA?: Body, bodyB?: Body, joint1?: RevoluteJoint | PrismaticJoint, joint2?: RevoluteJoint | PrismaticJoint, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof GearJoint)) {\n return new GearJoint(def, bodyA, bodyB, joint1, joint2, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = GearJoint.TYPE;\n\n _ASSERT && console.assert(joint1.m_type === RevoluteJoint.TYPE || joint1.m_type === PrismaticJoint.TYPE);\n _ASSERT && console.assert(joint2.m_type === RevoluteJoint.TYPE || joint2.m_type === PrismaticJoint.TYPE);\n\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\n this.m_type1 = this.m_joint1.getType() as \"revolute-joint\" | \"prismatic-joint\";\n this.m_type2 = this.m_joint2.getType() as \"revolute-joint\" | \"prismatic-joint\";\n\n // joint1 connects body A to body C\n // joint2 connects body B to body D\n\n let coordinateA: number;\n let coordinateB: number;\n\n // TODO_ERIN there might be some problem with the joint edges in Joint.\n\n this.m_bodyC = this.m_joint1.getBodyA();\n this.m_bodyA = this.m_joint1.getBodyB();\n\n // Get geometry of joint1\n const xfA = this.m_bodyA.m_xf;\n const aA = this.m_bodyA.m_sweep.a;\n const xfC = this.m_bodyC.m_xf;\n const aC = this.m_bodyC.m_sweep.a;\n\n if (this.m_type1 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint1 as RevoluteJoint;\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\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const prismatic = this.m_joint1 as PrismaticJoint;\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\n const pC = this.m_localAnchorC;\n const pA = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA.q, this.m_localAnchorA), Vec2.sub(xfA.p, xfC.p)));\n coordinateA = Vec2.dot(pA, this.m_localAxisC) - Vec2.dot(pC, this.m_localAxisC);\n }\n\n this.m_bodyD = this.m_joint2.getBodyA();\n this.m_bodyB = this.m_joint2.getBodyB();\n\n // Get geometry of joint2\n const xfB = this.m_bodyB.m_xf;\n const aB = this.m_bodyB.m_sweep.a;\n const xfD = this.m_bodyD.m_xf;\n const aD = this.m_bodyD.m_sweep.a;\n\n if (this.m_type2 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint2 as RevoluteJoint;\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const prismatic = this.m_joint2 as PrismaticJoint;\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\n const pD = this.m_localAnchorD;\n const pB = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB.q, this.m_localAnchorB), Vec2.sub(xfB.p, xfD.p)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n this.m_constant = coordinateA + this.m_ratio * coordinateB;\n\n this.m_impulse = 0.0;\n\n // Gear Joint:\n // C0 = (coordinate1 + ratio * coordinate2)_initial\n // C = (coordinate1 + ratio * coordinate2) - C0 = 0\n // J = [J1 ratio * J2]\n // K = J * invM * JT\n // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T\n //\n // Revolute:\n // coordinate = rotation\n // Cdot = angularVelocity\n // J = [0 0 1]\n // K = J * invM * JT = invI\n //\n // Prismatic:\n // coordinate = dot(p - pg, ug)\n // Cdot = dot(v + cross(w, r), ug)\n // J = [ug cross(r, ug)]\n // K = J * invM * JT = invMass + invI * cross(r, ug)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n joint1: this.m_joint1,\n joint2: this.m_joint2,\n ratio: this.m_ratio,\n\n // _constant: this.m_constant,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): GearJoint {\n data = {...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 const joint = new GearJoint(data);\n // if (data._constant) joint.m_constant = data._constant;\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n // todo: implement other fields\n if (Number.isFinite(def.ratio)) {\n this.m_ratio = def.ratio;\n }\n }\n\n /**\n * Get the first joint.\n */\n getJoint1(): Joint {\n return this.m_joint1;\n }\n\n /**\n * Get the second joint.\n */\n getJoint2(): Joint {\n return this.m_joint2;\n }\n\n /**\n * Set the gear ratio.\n */\n setRatio(ratio: number): void {\n _ASSERT && console.assert(Number.isFinite(ratio));\n this.m_ratio = ratio;\n }\n\n /**\n * Get the gear ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n const L = this.m_impulse * this.m_JwA;\n return inv_dt * L;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const aC = this.m_bodyC.c_position.a;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n\n const aD = this.m_bodyD.c_position.a;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n this.m_mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n this.m_JvAC = Vec2.zero();\n this.m_JwA = 1.0;\n this.m_JwC = 1.0;\n this.m_mass += this.m_iA + this.m_iC;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = 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(rA, 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\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 const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n // Compute effective mass.\n this.m_mass = this.m_mass > 0.0 ? 1.0 / this.m_mass : 0.0;\n\n if (step.warmStarting) {\n vA.addMul(this.m_mA * this.m_impulse, this.m_JvAC);\n wA += this.m_iA * this.m_impulse * this.m_JwA;\n\n vB.addMul(this.m_mB * this.m_impulse, this.m_JvBD);\n wB += this.m_iB * this.m_impulse * this.m_JwB;\n\n vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC);\n wC -= this.m_iC * this.m_impulse * this.m_JwC;\n\n vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD);\n wD -= this.m_iD * this.m_impulse * this.m_JwD;\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n let Cdot = Vec2.dot(this.m_JvAC, vA) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB) - 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\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n vA.addMul(this.m_mA * impulse, this.m_JvAC);\n wA += this.m_iA * impulse * this.m_JwA;\n vB.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\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n const cC = this.m_bodyC.c_position.c;\n let aC = this.m_bodyC.c_position.a;\n const cD = this.m_bodyD.c_position.c;\n let aD = this.m_bodyD.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n const linearError = 0.0;\n\n let coordinateA: number;\n let coordinateB: number;\n\n let JvAC: Vec2;\n let JvBD: Vec2;\n let JwA: number;\n let JwB: number;\n let JwC: number;\n let JwD: number;\n let mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n JvAC = Vec2.zero();\n JwA = 1.0;\n JwC = 1.0;\n mass += this.m_iA + this.m_iC;\n\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA);\n JvAC = u;\n JwC = Vec2.crossVec2Vec2(rC, u);\n JwA = Vec2.crossVec2Vec2(rA, u);\n mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA;\n\n const pC = Vec2.sub(this.m_localAnchorC, this.m_lcC);\n const pA = Rot.mulTVec2(qC, Vec2.add(rA, Vec2.sub(cA, cC)));\n coordinateA = Vec2.dot(Vec2.sub(pA, pC), this.m_localAxisC);\n }\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n const pD = Vec2.sub(this.m_localAnchorD, this.m_lcD);\n const pB = Rot.mulTVec2(qD, Vec2.add(rB, Vec2.sub(cB, cD)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n const C = (coordinateA + this.m_ratio * coordinateB) - this.m_constant;\n\n let impulse = 0.0;\n if (mass > 0.0) {\n impulse = -C / mass;\n }\n\n cA.addMul(this.m_mA * impulse, JvAC);\n aA += this.m_iA * impulse * JwA;\n cB.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\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\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\n // TODO_ERIN not implemented\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointOpt extends JointOpt {\n /**\n * The bodyB angle minus bodyA angle in radians.\n */\n angularOffset?: number;\n /**\n * The maximum motor force in N.\n */\n maxForce?: number;\n /**\n * The maximum motor torque in N-m.\n */\n maxTorque?: number;\n /**\n * Position correction factor in the range [0,1].\n */\n correctionFactor?: number;\n /**\n * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters.\n */\n linearOffset?: Vec2Value;\n}\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointDef extends JointDef, MotorJointOpt {\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 1.0,\n maxTorque : 1.0,\n correctionFactor : 0.3\n};\n\ndeclare module \"./MotorJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MotorJoint(def: MotorJointDef): MotorJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MotorJoint(def: MotorJointOpt, bodyA: Body, bodyB: Body): MotorJoint;\n}\n\n/**\n * A motor joint is used to control the relative motion between two bodies. A\n * typical usage is to control the movement of a dynamic body with respect to\n * the ground.\n */\n// @ts-expect-error\nexport class MotorJoint extends Joint {\n static TYPE = \"motor-joint\" as const;\n\n /** @internal */ m_type: \"motor-joint\";\n /** @internal */ m_linearOffset: Vec2;\n /** @internal */ m_angularOffset: number;\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n /** @internal */ m_correctionFactor: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_linearError: Vec2;\n /** @internal */ m_angularError: number;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: MotorJointDef);\n constructor(def: MotorJointOpt, bodyA: Body, bodyB: Body);\n constructor(def: MotorJointDef | MotorJointOpt, bodyA?: Body, bodyB?: Body) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MotorJoint)) {\n return new MotorJoint(def, bodyA, bodyB);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MotorJoint.TYPE;\n\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\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n this.m_correctionFactor = def.correctionFactor;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n //\n // r1 = offset - c1\n // r2 = -c2\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n correctionFactor: this.m_correctionFactor,\n\n linearOffset: this.m_linearOffset,\n angularOffset: this.m_angularOffset,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MotorJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new MotorJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Set the position correction factor in the range [0,1].\n */\n setCorrectionFactor(factor: number): void {\n _ASSERT && console.assert(Number.isFinite(factor) && 0.0 <= factor && factor <= 1.0);\n this.m_correctionFactor = factor;\n }\n\n /**\n * Get the position correction factor in the range [0,1].\n */\n getCorrectionFactor(): number {\n return this.m_correctionFactor;\n }\n\n /**\n * Set/get the target linear offset, in frame A, in meters.\n */\n setLinearOffset(linearOffset: Vec2Value): void {\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\n getLinearOffset(): Vec2 {\n return this.m_linearOffset;\n }\n\n /**\n * Set/get the target angular offset, in radians.\n */\n setAngularOffset(angularOffset: number): void {\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\n getAngularOffset(): number {\n return this.m_angularOffset;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getPosition();\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getPosition();\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Upper 2 by 2 of K for point to point\n const 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\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n this.m_linearError = Vec2.zero();\n this.m_linearError.addCombine(1, cB, 1, this.m_rB);\n this.m_linearError.subCombine(1, cA, 1, this.m_rA);\n\n this.m_angularError = aB - aA - this.m_angularOffset;\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n const inv_h = step.inv_dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError);\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = Vec2.clone(this.m_linearImpulse);\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n this.m_linearImpulse.clamp(maxImpulse);\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Transform } from \"../../common/Transform\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointOpt extends JointOpt {\n /**\n * [maxForce = 0.0] The maximum constraint force that can be exerted to move\n * the candidate body. Usually you will express as some multiple of the\n * weight (multiplier * mass * gravity).\n */\n maxForce?: number;\n /**\n * [frequencyHz = 5.0] The response speed.\n */\n frequencyHz?: number;\n /**\n * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical\n * damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointDef extends JointDef, MouseJointOpt {\n /**\n * The initial world target point. This is assumed to coincide with the body\n * anchor initially.\n */\n target: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n frequencyHz : 5.0,\n dampingRatio : 0.7\n};\n\ndeclare module \"./MouseJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MouseJoint(def: MouseJointDef): MouseJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MouseJoint(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value): MouseJoint;\n}\n\n/**\n * A mouse joint is used to make a point on a body track a specified world\n * point. This a soft constraint with a maximum force. This allows the\n * constraint to stretch and without applying huge forces.\n *\n * You need to call setTarget(target) every time that mouse is \n * moved, to track the new location of the mouse.\n *\n * NOTE: this joint is not documented in the manual because it was developed to\n * be used in the testbed. If you want to learn how to use the mouse joint, look\n * at the testbed.\n */\n// @ts-expect-error\nexport class MouseJoint extends Joint {\n static TYPE = \"mouse-joint\" as const;\n\n /** @internal */ m_type: \"mouse-joint\";\n /** @internal */ m_targetA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_impulse: Vec2;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_beta: number;\n /** @internal */ m_gamma: number;\n // Solver temp\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat22;\n /** @internal */ m_C: Vec2;\n\n constructor(def: MouseJointDef);\n constructor(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value);\n constructor(def: MouseJointDef, bodyA?: Body, bodyB?: Body, target?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MouseJoint)) {\n return new MouseJoint(def, bodyA, bodyB, target);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MouseJoint.TYPE;\n\n _ASSERT && console.assert(Number.isFinite(def.maxForce) && def.maxForce >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.frequencyHz) && def.frequencyHz >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.dampingRatio) && def.dampingRatio >= 0.0);\n\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\n this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), this.m_targetA);\n\n this.m_maxForce = def.maxForce;\n this.m_impulse = Vec2.zero();\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_beta = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rB = Vec2.zero();\n this.m_localCenterB = Vec2.zero();\n this.m_invMassB = 0.0;\n this.m_invIB = 0.0;\n this.m_mass = new Mat22();\n this.m_C = Vec2.zero();\n\n // p = attached point, m = mouse point\n // C = p - m\n // Cdot = v\n // = v + cross(w, r)\n // J = [I r_skew]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n target: this.m_targetA,\n maxForce: this.m_maxForce,\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n _localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MouseJoint {\n data = {...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 const joint = new MouseJoint(data);\n if (data._localAnchorB) {\n joint.m_localAnchorB = data._localAnchorB;\n }\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Use this to update the target point.\n */\n setTarget(target: Vec2Value): void {\n if (Vec2.areEqual(target, this.m_targetA)) return;\n this.m_bodyB.setAwake(true);\n this.m_targetA.set(target);\n }\n\n getTarget(): Vec2 {\n return this.m_targetA;\n }\n\n /**\n * Set the maximum force in Newtons.\n */\n setMaxForce(force: number): void {\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum force in Newtons.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the frequency in Hertz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get the frequency in Hertz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set the damping ratio (dimensionless).\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get the damping ratio (dimensionless).\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return Vec2.clone(this.m_targetA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_impulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * 0.0;\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_targetA.sub(newOrigin);\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const position = this.m_bodyB.c_position;\n const velocity = this.m_bodyB.c_velocity;\n\n const cB = position.c;\n const aB = position.a;\n const vB = velocity.v;\n let wB = velocity.w;\n\n const qB = Rot.neo(aB);\n\n const mass = this.m_bodyB.getMass();\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = mass * (omega * omega);\n\n // magic formulas\n // gamma has units of inverse mass.\n // beta has units of inverse time.\n const h = step.dt;\n _ASSERT && console.assert(d + h * k > EPSILON);\n this.m_gamma = h * (d + h * k);\n if (this.m_gamma != 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n this.m_beta = h * k * this.m_gamma;\n\n // Compute the effective mass matrix.\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) *\n // invI2 * skew(r2)]\n // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y\n // -r1.x*r1.y]\n // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x]\n const K = new Mat22();\n K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y\n + 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\n + this.m_gamma;\n\n this.m_mass = K.getInverse();\n\n this.m_C.setVec2(cB);\n this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA);\n this.m_C.mul(this.m_beta);\n\n // Cheat with some damping\n wB *= 0.98;\n\n if (step.warmStarting) {\n this.m_impulse.mul(step.dtRatio);\n vB.addMul(this.m_invMassB, this.m_impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse);\n\n } else {\n this.m_impulse.setZero();\n }\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const velocity = this.m_bodyB.c_velocity;\n const vB = Vec2.clone(velocity.v);\n let wB = velocity.w;\n\n // Cdot = v + cross(w, r)\n\n const Cdot = Vec2.crossNumVec2(wB, this.m_rB);\n Cdot.add(vB);\n\n Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse);\n Cdot.neg();\n\n let impulse = Mat22.mulVec2(this.m_mass, Cdot);\n\n const oldImpulse = Vec2.clone(this.m_impulse);\n this.m_impulse.add(impulse);\n const maxImpulse = step.dt * this.m_maxForce;\n this.m_impulse.clamp(maxImpulse);\n impulse = Vec2.sub(this.m_impulse, oldImpulse);\n\n vB.addMul(this.m_invMassB, impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\n// tslint:disable-next-line:no-empty-interface\nexport interface PulleyJointOpt extends JointOpt {\n}\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\nexport interface PulleyJointDef extends JointDef, PulleyJointOpt {\n /**\n * The first ground anchor in world coordinates. This point never moves.\n */\n groundAnchorA: Vec2Value;\n /**\n * The second ground anchor in world coordinates. This point never moves.\n */\n groundAnchorB: Vec2Value;\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The reference length for the segment attached to bodyA.\n */\n lengthA: number;\n /**\n * The reference length for the segment attached to bodyB.\n */\n lengthB: number;\n /**\n * The pulley ratio, used to simulate a block-and-tackle.\n */\n ratio: number;\n\n /** @hidden */ anchorA?: Vec2Value;\n /** @hidden */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n collideConnected : true\n};\n\ndeclare module \"./PulleyJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PulleyJoint(def: PulleyJointDef): PulleyJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PulleyJoint(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number): PulleyJoint;\n}\n\n/**\n * The pulley joint is connected to two bodies and two fixed ground points. The\n * pulley supports a ratio such that: length1 + ratio * length2 <= constant\n *\n * Yes, the force transmitted is scaled by the ratio.\n *\n * Warning: the pulley joint can get a bit squirrelly by itself. They often work\n * better when combined with prismatic joints. You should also cover the the\n * anchor points with static shapes to prevent one side from going to zero\n * length.\n */\n// @ts-expect-error\nexport class PulleyJoint extends Joint {\n static TYPE = \"pulley-joint\" as const;\n // static MIN_PULLEY_LENGTH: number = 2.0; // TODO where this is used?\n\n /** @internal */ m_type: \"pulley-joint\";\n /** @internal */ m_groundAnchorA: Vec2;\n /** @internal */ m_groundAnchorB: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_lengthA: number;\n /** @internal */ m_lengthB: number;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_uA: Vec2;\n /** @internal */ m_uB: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n constructor(def: PulleyJointDef);\n constructor(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number);\n constructor(def: PulleyJointDef, bodyA?: Body, bodyB?: Body, groundA?: Vec2Value, groundB?: Vec2Value, anchorA?: Vec2Value, anchorB?: Vec2Value, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PulleyJoint)) {\n return new PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PulleyJoint.TYPE;\n this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1.0, 1.0));\n this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1.0, 1.0));\n this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1.0, 0.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\n _ASSERT && console.assert(ratio > EPSILON);\n\n this.m_constant = this.m_lengthA + this.m_ratio * this.m_lengthB;\n\n this.m_impulse = 0.0;\n\n // Pulley:\n // length1 = norm(p1 - s1)\n // length2 = norm(p2 - s2)\n // C0 = (length1 + ratio * length2)_initial\n // C = C0 - (length1 + ratio * length2)\n // u1 = (p1 - s1) / norm(p1 - s1)\n // u2 = (p2 - s2) / norm(p2 - s2)\n // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2))\n // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 *\n // cross(r2, u2)^2)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PulleyJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new PulleyJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Get the first ground anchor.\n */\n getGroundAnchorA(): Vec2 {\n return this.m_groundAnchorA;\n }\n\n /**\n * Get the second ground anchor.\n */\n getGroundAnchorB(): Vec2 {\n return this.m_groundAnchorB;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getLengthA(): number {\n return this.m_lengthA;\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getLengthB(): number {\n return this.m_lengthB;\n }\n\n /**\n * Get the pulley ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getCurrentLengthA(): number {\n const p = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const s = this.m_groundAnchorA;\n return Vec2.distance(p, s);\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getCurrentLengthB(): number {\n const p = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const s = this.m_groundAnchorB;\n return Vec2.distance(p, s);\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n *\n * @param newOrigin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_groundAnchorA.sub(newOrigin);\n this.m_groundAnchorB.sub(newOrigin);\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // Get the pulley axes.\n this.m_uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n this.m_uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = this.m_uA.length();\n const lengthB = this.m_uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n this.m_uA.mul(1.0 / lengthA);\n } else {\n this.m_uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n this.m_uB.mul(1.0 / lengthB);\n } else {\n this.m_uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA);\n const ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n this.m_mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support variable time steps.\n this.m_impulse *= step.dtRatio;\n\n // Warm starting.\n const PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB);\n\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n\n const Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB);\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const PA = Vec2.mulNumVec2(-impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB);\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // Get the pulley axes.\n const uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n const uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = uA.length();\n const lengthB = uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n uA.mul(1.0 / lengthA);\n } else {\n uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n uB.mul(1.0 / lengthB);\n } else {\n uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(rA, uA);\n const ruB = Vec2.crossVec2Vec2(rB, uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n let mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (mass > 0.0) {\n mass = 1.0 / mass;\n }\n\n const C = this.m_constant - lengthA - this.m_ratio * lengthB;\n const linearError = math_abs(C);\n\n const impulse = -mass * C;\n\n const PA = Vec2.mulNumVec2(-impulse, uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB);\n\n cA.addMul(this.m_invMassA, PA);\n aA += this.m_invIA * Vec2.crossVec2Vec2(rA, PA);\n cB.addMul(this.m_invMassB, PB);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, PB);\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointOpt extends JointOpt {\n /**\n * The maximum length of the rope.\n * Warning: this must be larger than linearSlop or the joint will have no effect.\n */\n maxLength?: number;\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointDef extends JointDef, RopeJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxLength : 0.0,\n};\n\ndeclare module \"./RopeJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RopeJoint(def: RopeJointDef): RopeJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RopeJoint(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): RopeJoint;\n}\n\n/**\n * A rope joint enforces a maximum distance between two points on two bodies. It\n * has no other effect.\n *\n * Warning: if you attempt to change the maximum length during the simulation\n * you will get some non-physical behavior.\n *\n * A model that would allow you to dynamically modify the length would have some\n * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you\n * want to dynamically control length.\n */\n// @ts-expect-error\nexport class RopeJoint extends Joint {\n static TYPE = \"rope-joint\" as const;\n\n /** @internal */ m_type: \"rope-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n /** @internal */ m_maxLength: number;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_length: number;\n /** @internal */ m_state: number; // TODO enum\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n constructor(def: RopeJointDef);\n constructor(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RopeJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RopeJoint)) {\n return new RopeJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = RopeJoint.TYPE;\n this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1.0, 0.0));\n\n this.m_maxLength = def.maxLength;\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_length = 0.0;\n this.m_state = LimitState.inactiveLimit;\n\n // Limit:\n // C = norm(pB - pA) - L\n // u = (pB - pA) / norm(pB - pA)\n // Cdot = dot(u, vB + cross(wB, rB) - vA - cross(wA, rA))\n // J = [-u -cross(rA, u) u cross(rB, u)]\n // K = J * invM * JT\n // = invMassA + invIA * cross(rA, u)^2 + invMassB + invIB * cross(rB, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n maxLength: this.m_maxLength,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): RopeJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RopeJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n if (Number.isFinite(def.maxLength)) {\n this.m_maxLength = def.maxLength;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum length of the rope.\n */\n setMaxLength(length: number): void {\n this.m_maxLength = length;\n }\n\n /**\n * Get the maximum length of the rope.\n */\n getMaxLength(): number {\n return this.m_maxLength;\n }\n\n getLimitState(): number {\n // TODO LimitState\n return this.m_state;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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, cB, 1, this.m_rB);\n this.m_u.subCombine(1, cA, 1, this.m_rA);\n\n this.m_length = this.m_u.length();\n\n const C = this.m_length - this.m_maxLength;\n if (C > 0.0) {\n this.m_state = LimitState.atUpperLimit;\n } else {\n this.m_state = LimitState.inactiveLimit;\n }\n\n if (this.m_length > Settings.linearSlop) {\n this.m_u.mul(1.0 / this.m_length);\n } else {\n this.m_u.setZero();\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n return;\n }\n\n // Compute effective mass.\n const crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n const invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB;\n\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.addCrossNumVec2(vA, wA, this.m_rA);\n const vpB = Vec2.addCrossNumVec2(vB, wB, this.m_rB);\n const C = this.m_length - this.m_maxLength;\n let Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA));\n\n // Predictive constraint.\n if (C < 0.0) {\n Cdot += step.inv_dt * C;\n }\n\n let impulse = -this.m_mass * Cdot;\n const oldImpulse = this.m_impulse;\n this.m_impulse = math_min(0.0, this.m_impulse + impulse);\n impulse = this.m_impulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.zero();\n u.addCombine(1, cB, 1, rB);\n u.subCombine(1, cA, 1, rA);\n\n const length = u.normalize();\n let C = length - this.m_maxLength;\n\n C = clamp(C, 0.0, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return length - this.m_maxLength < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness\n * with a value of 0.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle?: number;\n}\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointDef extends JointDef, WeldJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0,\n};\n\ndeclare module \"./WeldJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WeldJoint(def: WeldJointDef): WeldJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WeldJoint(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): WeldJoint;\n}\n\n/**\n * A weld joint essentially glues two bodies together. A weld joint may distort\n * somewhat because the island constraint solver is approximate.\n */\n// @ts-expect-error\nexport class WeldJoint extends Joint {\n static TYPE = \"weld-joint\" as const;\n\n /** @internal */ m_type: \"weld-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_impulse: Vec3;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat33;\n\n constructor(def: WeldJointDef);\n constructor(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: WeldJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WeldJoint)) {\n return new WeldJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = WeldJoint.TYPE;\n\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\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_impulse = new Vec3();\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rA;\n this.m_rB;\n this.m_localCenterA;\n this.m_localCenterB;\n this.m_invMassA;\n this.m_invMassB;\n this.m_invIA;\n this.m_invIB;\n this.m_mass = new Mat33();\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // / = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // C = angle2 - angle1 - referenceAngle\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WeldJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WeldJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Set frequency in Hz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get frequency in Hz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set damping ratio.\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get damping ratio.\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const 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\n * 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\n * 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\n if (this.m_frequencyHz > 0.0) {\n K.getInverse22(this.m_mass);\n\n let invM = iA + iB;\n const m = invM > 0.0 ? 1.0 / invM : 0.0;\n\n const C = aB - aA - this.m_referenceAngle;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * m * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = m * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invM += this.m_gamma;\n this.m_mass.ez.z = invM != 0.0 ? 1.0 / invM : 0.0;\n } else if (K.ez.z == 0.0) {\n K.getInverse22(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n } else {\n K.getSymInverse33(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n if (this.m_frequencyHz > 0.0) {\n const Cdot2 = wB - wA;\n\n const impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z);\n this.m_impulse.z += impulse2;\n\n wA -= iA * impulse2;\n wB += iB * impulse2;\n\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n\n const impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1));\n this.m_impulse.x += impulse1.x;\n this.m_impulse.y += impulse1.y;\n\n const P = Vec2.clone(impulse1);\n\n vA.subMul(mA, P);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(mB, P);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, P);\n } else {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot));\n this.m_impulse.add(impulse);\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n let positionError: number;\n let angularError: number;\n\n const K = new Mat33();\n K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB;\n K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB;\n K.ez.x = -rA.y * iA - rB.y * iB;\n K.ex.y = K.ey.x;\n K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB;\n K.ez.y = rA.x * iA + rB.x * iB;\n K.ex.z = K.ez.x;\n K.ey.z = K.ez.y;\n K.ez.z = iA + iB;\n\n if (this.m_frequencyHz > 0.0) {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n positionError = C1.length();\n angularError = 0.0;\n\n const P = Vec2.neg(K.solve22(C1));\n\n cA.subMul(mA, P);\n aA -= iA * Vec2.crossVec2Vec2(rA, P);\n\n cB.addMul(mB, P);\n aB += iB * Vec2.crossVec2Vec2(rB, P);\n } else {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n const C2 = aB - aA - this.m_referenceAngle;\n\n positionError = C1.length();\n angularError = math_abs(C2);\n\n const C = new Vec3(C1.x, C1.y, C2);\n\n let impulse = new Vec3();\n if (K.ez.z > 0.0) {\n impulse = Vec3.neg(K.solve33(C));\n } else {\n const impulse2 = Vec2.neg(K.solve22(C1));\n impulse.set(impulse2.x, impulse2.y, 0.0);\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n cA.subMul(mA, P);\n aA -= iA * (Vec2.crossVec2Vec2(rA, P) + impulse.z);\n\n cB.addMul(mB, P);\n aB += iB * (Vec2.crossVec2Vec2(rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointOpt extends JointOpt {\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n /**\n * Suspension frequency, zero indicates no suspension.\n */\n frequencyHz?: number;\n /**\n * Suspension damping ratio, one indicates critical damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointDef extends JointDef, WheelJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation axis in bodyA.\n */\n localAxisA: Vec2Value;\n\n /** @internal renamed to localAxisA */\n localAxis?: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableMotor : false,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n frequencyHz : 2.0,\n dampingRatio : 0.7,\n};\n\ndeclare module \"./WheelJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WheelJoint(def: WheelJointDef): WheelJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WheelJoint(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value): WheelJoint;\n}\n\n/**\n * A wheel joint. This joint provides two degrees of freedom: translation along\n * an axis fixed in bodyA and rotation in the plane. In other words, it is a\n * point to line constraint with a rotational motor and a linear spring/damper.\n * This joint is designed for vehicle suspensions.\n */\n// @ts-expect-error\nexport class WheelJoint extends Joint {\n static TYPE = \"wheel-joint\" as const;\n\n /** @internal */ m_type: \"wheel-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_springMass: number;\n /** @internal */ m_springImpulse: number;\n\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableMotor: boolean;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n /** @internal */ m_ax: Vec2;\n /** @internal */ m_ay: Vec2;\n /** @internal */ m_sAx: number;\n /** @internal */ m_sBx: number;\n /** @internal */ m_sAy: number;\n /** @internal */ m_sBy: number;\n\n constructor(def: WheelJointDef);\n constructor(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: WheelJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WheelJoint)) {\n return new WheelJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_ax = Vec2.zero();\n this.m_ay = Vec2.zero();\n\n this.m_type = WheelJoint.TYPE;\n\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\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 // localAxis is renamed to localAxisA, this is for backward compatibility\n this.m_localXAxisA = Vec2.clone(def.localAxis);\n } else {\n this.m_localXAxisA = Vec2.neo(1.0, 0.0);\n }\n\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n this.m_springMass = 0.0;\n this.m_springImpulse = 0.0;\n\n this.m_maxMotorTorque = def.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed;\n this.m_enableMotor = def.enableMotor;\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Linear constraint (point-to-line)\n // d = pB - pA = xB + rB - xA - rA\n // C = dot(ay, d)\n // Cdot = dot(d, cross(wA, ay)) + dot(ay, vB + cross(wB, rB) - vA - cross(wA,\n // rA))\n // = -dot(ay, vA) - dot(cross(d + rA, ay), wA) + dot(ay, vB) + dot(cross(rB,\n // ay), vB)\n // J = [-ay, -cross(d + rA, ay), ay, cross(rB, ay)]\n\n // Spring linear constraint\n // C = dot(ax, d)\n // Cdot = = -dot(ax, vA) - dot(cross(d + rA, ax), wA) + dot(ax, vB) +\n // dot(cross(rB, ax), vB)\n // J = [-ax -cross(d+rA, ax) ax cross(rB, ax)]\n\n // Motor rotational constraint\n // Cdot = wB - wA\n // J = [0 0 -1 0 0 1]\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WheelJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WheelJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, def.localAxisA));\n }\n if (def.enableMotor !== undefined) {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const pA = bA.getWorldPoint(this.m_localAnchorA);\n const pB = bB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = bA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const wA = this.m_bodyA.m_angularVelocity;\n const wB = this.m_bodyB.m_angularVelocity;\n return wB - wA;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed, usually in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set/Get the maximum motor force, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Get the current motor torque given the inverse time step, usually in N-m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set/Get the spring frequency in hertz. Setting the frequency to zero disables\n * the spring.\n */\n setSpringFrequencyHz(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getSpringFrequencyHz(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set/Get the spring damping ratio\n */\n setSpringDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getSpringDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n // Point to line constraint\n {\n this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA);\n this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ay);\n this.m_sBy = Vec2.crossVec2Vec2(rB, this.m_ay);\n\n this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy\n * this.m_sBy;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n }\n\n // Spring constraint\n this.m_springMass = 0.0;\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n if (this.m_frequencyHz > 0.0) {\n this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ax);\n this.m_sBx = Vec2.crossVec2Vec2(rB, this.m_ax);\n\n const invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx\n * this.m_sBx;\n\n if (invMass > 0.0) {\n this.m_springMass = 1.0 / invMass;\n\n const C = Vec2.dot(d, this.m_ax);\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const damp = 2.0 * this.m_springMass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_springMass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (damp + h * k);\n if (this.m_gamma > 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n\n this.m_bias = C * h * k * this.m_gamma;\n\n this.m_springMass = invMass + this.m_gamma;\n if (this.m_springMass > 0.0) {\n this.m_springMass = 1.0 / this.m_springMass;\n }\n }\n } else {\n this.m_springImpulse = 0.0;\n }\n\n // Rotational motor\n if (this.m_enableMotor) {\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n } else {\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse *= step.dtRatio;\n this.m_springImpulse *= step.dtRatio;\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax);\n const LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse;\n const LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse;\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * LA;\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * LB;\n\n } else {\n this.m_impulse = 0.0;\n this.m_springImpulse = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Solve spring constraint\n {\n const Cdot = Vec2.dot(this.m_ax, vB) - Vec2.dot(this.m_ax, vA) + this.m_sBx * wB - this.m_sAx * wA;\n const impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse);\n this.m_springImpulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ax);\n const LA = impulse * this.m_sAx;\n const LB = impulse * this.m_sBx;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n // Solve rotational motor constraint\n {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve point to line constraint\n {\n const Cdot = Vec2.dot(this.m_ay, vB) - Vec2.dot(this.m_ay, vA) + this.m_sBy * wB - this.m_sAy * wA;\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ay);\n const LA = impulse * this.m_sAy;\n const LB = impulse * this.m_sBy;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const ay = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), ay);\n const sBy = Vec2.crossVec2Vec2(rB, ay);\n\n const C = Vec2.dot(d, ay);\n\n const 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\n const impulse = k != 0.0 ? -C / k : 0.0;\n\n const P = Vec2.mulNumVec2(impulse, ay);\n const LA = impulse * sAy;\n const LB = impulse * sBy;\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * LA;\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * LB;\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) <= Settings.linearSlop;\n }\n\n}\n","import { World } from \"../dynamics/World\";\nimport { Body } from \"../dynamics/Body\";\nimport { Joint } from \"../dynamics/Joint\";\nimport { Fixture } from \"../dynamics/Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { Vec2 } from \"../common/Vec2\";\nimport { Vec3 } from \"../common/Vec3\";\nimport { ChainShape } from \"../collision/shape/ChainShape\";\n// import { BoxShape } from \"../collision/shape/BoxShape\";\nimport { EdgeShape } from \"../collision/shape/EdgeShape\";\nimport { PolygonShape } from \"../collision/shape/PolygonShape\";\nimport { CircleShape } from \"../collision/shape/CircleShape\";\nimport { DistanceJoint } from \"../dynamics/joint/DistanceJoint\";\nimport { FrictionJoint } from \"../dynamics/joint/FrictionJoint\";\nimport { GearJoint } from \"../dynamics/joint/GearJoint\";\nimport { MotorJoint } from \"../dynamics/joint/MotorJoint\";\nimport { MouseJoint } from \"../dynamics/joint/MouseJoint\";\nimport { PrismaticJoint } from \"../dynamics/joint/PrismaticJoint\";\nimport { PulleyJoint } from \"../dynamics/joint/PulleyJoint\";\nimport { RevoluteJoint } from \"../dynamics/joint/RevoluteJoint\";\nimport { RopeJoint } from \"../dynamics/joint/RopeJoint\";\nimport { WeldJoint } from \"../dynamics/joint/WeldJoint\";\nimport { WheelJoint } from \"../dynamics/joint/WheelJoint\";\n\nlet SID = 0;\n\n// Classes to be serialized as reference objects\nconst SERIALIZE_REF_TYPES = {\n \"World\": World,\n \"Body\": Body,\n \"Joint\": Joint,\n \"Fixture\": Fixture,\n \"Shape\": Shape,\n};\n\n// For deserializing reference objects by reference type\nconst 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};\n\n// For deserializing data objects by type field\nconst DESERIALIZE_BY_TYPE_FIELD = {\n [Body.STATIC]: Body,\n [Body.DYNAMIC]: Body,\n [Body.KINEMATIC]: Body,\n [ChainShape.TYPE]: ChainShape,\n // [BoxShape.TYPE]: BoxShape,\n [PolygonShape.TYPE]: PolygonShape,\n [EdgeShape.TYPE]: EdgeShape,\n [CircleShape.TYPE]: CircleShape,\n [DistanceJoint.TYPE]: DistanceJoint,\n [FrictionJoint.TYPE]: FrictionJoint,\n [GearJoint.TYPE]: GearJoint,\n [MotorJoint.TYPE]: MotorJoint,\n [MouseJoint.TYPE]: MouseJoint,\n [PrismaticJoint.TYPE]: PrismaticJoint,\n [PulleyJoint.TYPE]: PulleyJoint,\n [RevoluteJoint.TYPE]: RevoluteJoint,\n [RopeJoint.TYPE]: RopeJoint,\n [WeldJoint.TYPE]: WeldJoint,\n [WheelJoint.TYPE]: WheelJoint,\n};\n\n// dummy types\ntype DataType = any;\ntype ObjectType = any;\ntype ClassName = any;\n\ntype SerializedType = object[];\n\ntype RefType = {\n refIndex: number,\n refType: string,\n};\n\ntype SerializerOptions = {\n rootClass: ClassName,\n preSerialize?: (obj: ObjectType) => DataType,\n postSerialize?: (data: DataType, obj: any) => DataType,\n preDeserialize?: (data: DataType) => DataType,\n postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType,\n};\n\nconst DEFAULT_OPTIONS: SerializerOptions = {\n rootClass: World,\n preSerialize: function(obj) { return obj; },\n postSerialize: function(data, obj) { return data; },\n preDeserialize: function(data: DataType) { return data; },\n postDeserialize: function(obj, data) { return obj; },\n};\n\ntype DeserializeChildCallback = (classHint: any, obj: any, context: any) => any;\ntype ClassDeserializerMethod = (data: any, context: any, deserialize: DeserializeChildCallback) => any;\n\nexport class Serializer {\n private options: SerializerOptions;\n constructor(options: SerializerOptions) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n toJson = (root: T): SerializedType => {\n const preSerialize = this.options.preSerialize;\n const postSerialize = this.options.postSerialize;\n const json = [];\n\n // Breadth-first ref serialization queue\n const refQueue = [root];\n\n const refMemoById: Record = {};\n\n function addToRefQueue(value: any, typeName: string) {\n value.__sid = value.__sid || ++SID;\n if (!refMemoById[value.__sid]) {\n refQueue.push(value);\n const index = json.length + refQueue.length;\n const ref = {\n refIndex: index,\n refType: typeName\n };\n refMemoById[value.__sid] = ref;\n }\n return refMemoById[value.__sid];\n }\n\n function serializeWithHooks(obj: ObjectType) {\n obj = preSerialize(obj);\n let data = obj._serialize();\n data = postSerialize(data, obj);\n return data;\n }\n\n // traverse the object graph\n // ref objects are pushed into the queue\n // other objects are serialize in-place \n function traverse(value: any, noRefType = false) {\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n // object with _serialize function\n if (typeof value._serialize === \"function\") {\n if (!noRefType) {\n for (const typeName in SERIALIZE_REF_TYPES) {\n if (value instanceof SERIALIZE_REF_TYPES[typeName]) {\n return addToRefQueue(value, typeName);\n }\n }\n }\n // object with _serialize function\n value = serializeWithHooks(value);\n }\n // recursive for arrays any objects\n if (Array.isArray(value)) {\n const newValue = [];\n for (let key = 0; key < value.length; key++) {\n newValue[key] = traverse(value[key]);\n }\n value = newValue;\n\n } else {\n const newValue = {};\n for (const 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\n while (refQueue.length) {\n const obj = refQueue.shift();\n const str = traverse(obj, true);\n json.push(str);\n }\n\n return json;\n };\n\n fromJson = (json: SerializedType): T => {\n const preDeserialize = this.options.preDeserialize;\n const postDeserialize = this.options.postDeserialize;\n const rootClass = this.options.rootClass;\n\n const deserializedRefMemoByIndex: Record = {};\n\n function deserializeWithHooks(classHint: ClassName, data: DataType, context: any): ObjectType {\n if (!classHint || !classHint._deserialize) {\n classHint = DESERIALIZE_BY_TYPE_FIELD[data.type];\n }\n const deserializer = classHint && classHint._deserialize;\n if (!deserializer) {\n return;\n }\n data = preDeserialize(data);\n const classDeserializeFn = classHint._deserialize as ClassDeserializerMethod;\n let obj = classDeserializeFn(data, context, deserializeChild);\n obj = postDeserialize(obj, data);\n return obj;\n }\n\n /**\n * Recursive callback function to deserialize a child data object or reference object.\n * \n * @param classHint suggested class to deserialize obj to\n * @param dataOrRef data or reference object\n * @param context for example world when deserializing bodies and joints\n */\n function deserializeChild(classHint: ClassName, dataOrRef: DataType | RefType, context: any) {\n const isRefObject = dataOrRef.refIndex && dataOrRef.refType;\n if (!isRefObject) {\n return deserializeWithHooks(classHint, dataOrRef, context); \n }\n const ref = dataOrRef as RefType;\n if (DESERIALIZE_BY_REF_TYPE[ref.refType]) {\n classHint = DESERIALIZE_BY_REF_TYPE[ref.refType];\n }\n const refIndex = ref.refIndex;\n if (!deserializedRefMemoByIndex[refIndex]) {\n const data = json[refIndex];\n const obj = deserializeWithHooks(classHint, data, context);\n deserializedRefMemoByIndex[refIndex] = obj;\n }\n return deserializedRefMemoByIndex[refIndex];\n }\n\n const root = deserializeWithHooks(rootClass, json[0], null);\n\n return root;\n };\n\n static toJson: (root: World) => SerializedType;\n static fromJson: (json: SerializedType) => World;\n}\n\nconst worldSerializer = new Serializer({\n rootClass: World,\n});\n\nSerializer.fromJson = worldSerializer.fromJson;\nSerializer.toJson = worldSerializer.toJson;\n","import type { AABBValue } from \"../collision/AABB\";\nimport type { World } from \"../dynamics/World\";\nimport type { Joint } from \"../dynamics/Joint\";\nimport type { Fixture } from \"../dynamics/Fixture\";\nimport type { Body } from \"../dynamics/Body\";\n\nexport interface Style {\n stroke?: string;\n fill?: string;\n lineWidth?: number;\n}\n\ntype KEY = \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" |\n \"8\" | \"9\" | \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\" |\n \"H\" | \"I\" | \"J\" | \"K\" | \"L\" | \"M\" | \"N\" | \"O\" | \"P\" |\n \"Q\" | \"R\" | \"S\" | \"T\" | \"U\" | \"V\" | \"W\" | \"X\" | \"Y\" |\n \"Z\" | \"right\" | \"left\" | \"up\" | \"down\" | \"fire\";\n\nexport type ActiveKeys = { [key in KEY]?: boolean };\n\ntype TestbedMountOptions = {};\n\nexport abstract class Testbed {\n /**\n * Mounts testbed. Call start with a world to start simulation and rendering.\n */\n static mount(options?: TestbedMountOptions): Testbed {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Mounts testbed if needed, then starts simulation and rendering.\n * \n * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`.\n */\n static start(world: World): Testbed {\n const testbed = Testbed.mount();\n testbed.start(world);\n return testbed;\n }\n\n /** World viewbox width. */\n width: number = 80;\n\n /** World viewbox height. */\n height: number = 60;\n\n /** World viewbox center vertical offset. */\n x: number = 0;\n\n /** World viewbox center horizontal offset. */\n y: number = -10;\n\n /** @hidden */\n scaleY: number = -1;\n\n /** World simulation step frequency */\n hz: number = 60;\n\n /** World simulation speed, default is 1 */\n speed: number = 1;\n\n background: string = \"#222222\";\n\n mouseForce?: number;\n activeKeys: ActiveKeys = {};\n\n /** callback, to be implemented by user */\n step = (dt: number, t: number): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keydown = (keyCode: number, label: string): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keyup = (keyCode: number, label: string): void => {\n return;\n };\n\n abstract status(name: string, value: any): void;\n abstract status(value: object | string): void;\n\n abstract info(text: string): void;\n\n color(r: number, g: number, b: number): string {\n r = r * 256 | 0;\n g = g * 256 | 0;\n b = b * 256 | 0;\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n }\n\n abstract drawPoint(p: {x: number, y: number}, r: any, color: string): void;\n abstract drawCircle(p: {x: number, y: number}, r: number, color: string): void;\n abstract drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawSegment(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawPolygon(points: Array<{x: number, y: number}>, color: string): void;\n abstract drawAABB(aabb: AABBValue, color: string): void;\n\n abstract start(world: World): void;\n\n abstract findOne(query: string): (Body | Joint | Fixture | null);\n abstract findAll(query: string): (Body | Joint | Fixture)[];\n}\n\ntype TestbedFactoryOptions = string | {};\n\n/** @deprecated */\ntype TestbedCallback = (testbed: Testbed) => (World | undefined);\n\n/** @deprecated */\nexport function testbed(callback: TestbedCallback): void;\n/** @deprecated */\nexport function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void;\n/** @internal */\nexport function testbed(a?: any, b?: any) {\n let callback: TestbedCallback | undefined;\n let options;\n if (typeof a === \"function\") {\n callback = a;\n options = b;\n } else if (typeof b === \"function\") {\n callback = b;\n options = a;\n } else {\n options = a ?? b;\n }\n const testbed = Testbed.mount(options);\n if (callback) {\n // this is for backwards compatibility\n const world = callback(testbed) || (testbed as any).world;\n testbed.start(world);\n } else {\n return testbed;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2Value } from \"../../common/Vec2\";\nimport { PolygonShape } from \"./PolygonShape\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\ndeclare module \"./BoxShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function BoxShape(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number): BoxShape;\n}\n\n/**\n * A rectangle polygon which extend PolygonShape.\n */\n// @ts-expect-error\nexport class BoxShape extends PolygonShape {\n // note that box is serialized/deserialized as polygon\n static TYPE = \"polygon\" as const;\n\n /**\n * \n * @param halfWidth \n * @param halfHeight \n * @param center coordinate of the center of the box relative to the body\n * @param angle angle of the box relative to the body\n */\n constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof BoxShape)) {\n return new BoxShape(halfWidth, halfHeight, center, angle);\n }\n\n super();\n\n this._setAsBox(halfWidth, halfHeight, center, angle);\n }\n}\n\nexport const Box = BoxShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\nimport * as matrix from \"../../common/Matrix\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact);\n\n/** @internal */ function CircleCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == CircleShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollideCircles(manifold, fixtureA.getShape() as CircleShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const pA = matrix.vec2(0, 0);\n/** @internal */ const pB = matrix.vec2(0, 0);\n\nexport const CollideCircles = function (manifold: Manifold, circleA: CircleShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n matrix.transformVec2(pA, xfA, circleA.m_p);\n matrix.transformVec2(pB, xfB, circleB.m_p);\n\n const distSqr = matrix.distSqrVec2(pB, pA);\n const rA = circleA.m_radius;\n const rB = circleB.m_radius;\n const radius = rA + rB;\n if (distSqr > radius * radius) {\n return;\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.copyVec2(manifold.localPoint, circleA.m_p);\n matrix.zeroVec2(manifold.localNormal);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact);\nContact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact);\n\n/** @internal */ function EdgeCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const shapeA = fixtureA.getShape() as EdgeShape;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\nfunction ChainCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const chain = fixtureA.getShape() as ChainShape;\n const edge = new EdgeShape();\n chain.getChildEdge(edge, indexA);\n\n const shapeA = edge;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const Q = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n// Compute contact points for edge versus circle.\n// This accounts for edge connectivity.\nexport const CollideEdgeCircle = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle in frame of edge\n matrix.retransformVec2(Q, xfB, xfA, circleB.m_p);\n\n const A = edgeA.m_vertex1;\n const B = edgeA.m_vertex2;\n matrix.subVec2(e, B, A);\n\n // Barycentric coordinates\n const u = matrix.dotVec2(e, B) - matrix.dotVec2(e, Q);\n const v = matrix.dotVec2(e, Q) - matrix.dotVec2(e, A);\n\n const radius = edgeA.m_radius + circleB.m_radius;\n\n // Region A\n if (v <= 0.0) {\n matrix.copyVec2(P, A);\n const dd = matrix.distSqrVec2(Q, A);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to A?\n if (edgeA.m_hasVertex0) {\n const A1 = edgeA.m_vertex0;\n const B1 = A;\n matrix.subVec2(e1, B1, A1);\n const u1 = matrix.dotVec2(e1, B1) - matrix.dotVec2(e1, Q);\n\n // Is the circle in Region AB of the previous edge?\n if (u1 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Region B\n if (u <= 0.0) {\n matrix.copyVec2(P, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to B?\n if (edgeA.m_hasVertex3) {\n const B2 = edgeA.m_vertex3;\n const A2 = B;\n matrix.subVec2(e2, B2, A2);\n const v2 = matrix.dotVec2(e2, Q) - matrix.dotVec2(e2, A2);\n\n // Is the circle in Region AB of the next edge?\n if (v2 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n\n return;\n }\n\n // Region AB\n const den = matrix.lengthSqrVec2(e);\n _ASSERT && console.assert(den > 0.0);\n matrix.combine2Vec2(P, u / den, A, v / den, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n matrix.crossNumVec2(n, 1, e);\n if (matrix.dotVec2(n, Q) - matrix.dotVec2(n, A) < 0.0) {\n matrix.negVec2(n);\n }\n matrix.normalizeVec2(n);\n\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, n);\n matrix.copyVec2(manifold.localPoint, A);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const incidentEdge = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipSegmentToLineNormal = matrix.vec2(0, 0);\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const v11 = matrix.vec2(0, 0);\n/** @internal */ const v12 = matrix.vec2(0, 0);\n/** @internal */ const localTangent = matrix.vec2(0, 0);\n/** @internal */ const localNormal = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n\n\nContact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact);\n\n/** @internal */ function PolygonContact(\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number,\n): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == PolygonShape.TYPE);\n CollidePolygons(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ interface MaxSeparation {\n maxSeparation: number;\n bestIndex: number;\n}\n\n/**\n * Find the max separation between poly1 and poly2 using edge normals from\n * poly1.\n */\n/** @internal */ function findMaxSeparation(\n poly1: PolygonShape,\n xf1: TransformValue,\n poly2: PolygonShape,\n xf2: TransformValue,\n output: MaxSeparation,\n): void {\n const count1 = poly1.m_count;\n const count2 = poly2.m_count;\n const n1s = poly1.m_normals;\n const v1s = poly1.m_vertices;\n const v2s = poly2.m_vertices;\n\n matrix.detransformTransform(xf, xf2, xf1);\n\n let bestIndex = 0;\n let maxSeparation = -Infinity;\n for (let i = 0; i < count1; ++i) {\n // Get poly1 normal in frame2.\n matrix.rotVec2(n, xf.q, n1s[i]);\n matrix.transformVec2(v1, xf, v1s[i]);\n\n // Find deepest point for normal i.\n let si = Infinity;\n for (let j = 0; j < count2; ++j) {\n const sij = matrix.dotVec2(n, v2s[j]) - matrix.dotVec2(n, v1);\n if (sij < si) {\n si = sij;\n }\n }\n\n if (si > maxSeparation) {\n maxSeparation = si;\n bestIndex = i;\n }\n }\n\n // used to keep last FindMaxSeparation call values\n output.maxSeparation = maxSeparation;\n output.bestIndex = bestIndex;\n}\n\n/** @internal */ function findIncidentEdge(\n clipVertex: ClipVertex[],\n poly1: PolygonShape,\n xf1: TransformValue,\n edge1: number,\n poly2: PolygonShape,\n xf2: TransformValue,\n): void {\n const normals1 = poly1.m_normals;\n\n const count2 = poly2.m_count;\n const vertices2 = poly2.m_vertices;\n const normals2 = poly2.m_normals;\n\n _ASSERT && console.assert(0 <= edge1 && edge1 < poly1.m_count);\n\n // Get the normal of the reference edge in poly2's frame.\n matrix.rerotVec2(normal1, xf2.q, xf1.q, normals1[edge1]);\n\n // Find the incident edge on poly2.\n let index = 0;\n let minDot = Infinity;\n for (let i = 0; i < count2; ++i) {\n const dot = matrix.dotVec2(normal1, normals2[i]);\n if (dot < minDot) {\n minDot = dot;\n index = i;\n }\n }\n\n // Build the clip vertices for the incident edge.\n const i1 = index;\n const i2 = i1 + 1 < count2 ? i1 + 1 : 0;\n\n matrix.transformVec2(clipVertex[0].v, xf2, vertices2[i1]);\n clipVertex[0].id.setFeatures(edge1, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.transformVec2(clipVertex[1].v, xf2, vertices2[i2]);\n clipVertex[1].id.setFeatures(edge1, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n}\n\n/** @internal */ const maxSeparation = {\n maxSeparation: 0,\n bestIndex: 0,\n};\n\n/**\n *\n * Find edge normal of max separation on A - return if separating axis is found
\n * Find edge normal of max separation on B - return if separation axis is found
\n * Choose reference edge as min(minA, minB)
\n * Find incident edge
\n * Clip\n *\n * The normal points from 1 to 2\n */\nexport const CollidePolygons = function (\n manifold: Manifold,\n polyA: PolygonShape,\n xfA: TransformValue,\n polyB: PolygonShape,\n xfB: TransformValue,\n): void {\n manifold.pointCount = 0;\n const totalRadius = polyA.m_radius + polyB.m_radius;\n\n findMaxSeparation(polyA, xfA, polyB, xfB, maxSeparation);\n const edgeA = maxSeparation.bestIndex;\n const separationA = maxSeparation.maxSeparation;\n if (separationA > totalRadius)\n return;\n\n findMaxSeparation(polyB, xfB, polyA, xfA, maxSeparation);\n const edgeB = maxSeparation.bestIndex;\n const separationB = maxSeparation.maxSeparation;\n if (separationB > totalRadius)\n return;\n\n let poly1: PolygonShape; // reference polygon\n let poly2: PolygonShape; // incident polygon\n let xf1: TransformValue;\n let xf2: TransformValue;\n let edge1: number; // reference edge\n let flip: boolean;\n const k_tol = 0.1 * Settings.linearSlop;\n\n if (separationB > separationA + k_tol) {\n poly1 = polyB;\n poly2 = polyA;\n xf1 = xfB;\n xf2 = xfA;\n edge1 = edgeB;\n manifold.type = ManifoldType.e_faceB;\n flip = true;\n } else {\n poly1 = polyA;\n poly2 = polyB;\n xf1 = xfA;\n xf2 = xfB;\n edge1 = edgeA;\n manifold.type = ManifoldType.e_faceA;\n flip = false;\n }\n\n incidentEdge[0].recycle(), incidentEdge[1].recycle();\n findIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2);\n\n const count1 = poly1.m_count;\n const vertices1 = poly1.m_vertices;\n\n const iv1 = edge1;\n const iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0;\n\n matrix.copyVec2(v11, vertices1[iv1]);\n matrix.copyVec2(v12, vertices1[iv2]);\n\n matrix.subVec2(localTangent, v12, v11);\n matrix.normalizeVec2(localTangent);\n\n matrix.crossVec2Num(localNormal, localTangent, 1.0);\n matrix.combine2Vec2(planePoint, 0.5, v11, 0.5, v12);\n\n matrix.rotVec2(tangent, xf1.q, localTangent);\n matrix.crossVec2Num(normal, tangent, 1.0);\n\n matrix.transformVec2(v11, xf1, v11);\n matrix.transformVec2(v12, xf1, v12);\n\n // Face offset.\n const frontOffset = matrix.dotVec2(normal, v11);\n\n // Side offsets, extended by polytope skin thickness.\n const sideOffset1 = -matrix.dotVec2(tangent, v11) + totalRadius;\n const sideOffset2 = matrix.dotVec2(tangent, v12) + totalRadius;\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n matrix.setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y);\n const np1 = clipSegmentToLine(clipPoints1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1);\n\n if (np1 < 2) {\n return;\n }\n\n // Clip to negative box side 1\n matrix.setVec2(clipSegmentToLineNormal, tangent.x, tangent.y);\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, clipSegmentToLineNormal, sideOffset2, iv2);\n\n if (np2 < 2) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n matrix.copyVec2(manifold.localNormal, localNormal);\n matrix.copyVec2(manifold.localPoint, planePoint);\n\n let pointCount = 0;\n for (let i = 0; i < clipPoints2.length/* maxManifoldPoints */; ++i) {\n const separation = matrix.dotVec2(normal, clipPoints2[i].v) - frontOffset;\n\n if (separation <= totalRadius) {\n const cp = manifold.points[pointCount];\n matrix.detransformVec2(cp.localPoint, xf2, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n if (flip) {\n // Swap features\n cp.id.swapFeatures();\n }\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact);\n\n/** @internal */ function PolygonCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollidePolygonCircle(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const cLocal = matrix.vec2(0, 0);\n/** @internal */ const faceCenter = matrix.vec2(0, 0);\n\nexport const CollidePolygonCircle = function (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle position in the frame of the polygon.\n matrix.retransformVec2(cLocal, xfB, xfA, circleB.m_p);\n\n // Find the min separating edge.\n let normalIndex = 0;\n let separation = -Infinity;\n const radius = polygonA.m_radius + circleB.m_radius;\n const vertexCount = polygonA.m_count;\n const vertices = polygonA.m_vertices;\n const normals = polygonA.m_normals;\n\n for (let i = 0; i < vertexCount; ++i) {\n const s = matrix.dotVec2(normals[i], cLocal) - matrix.dotVec2(normals[i], vertices[i]);\n\n if (s > radius) {\n // Early out.\n return;\n }\n\n if (s > separation) {\n separation = s;\n normalIndex = i;\n }\n }\n\n // Vertices that subtend the incident face.\n const vertIndex1 = normalIndex;\n const vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0;\n const v1 = vertices[vertIndex1];\n const v2 = vertices[vertIndex2];\n\n // If the center is inside the polygon ...\n if (separation < EPSILON) {\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[normalIndex]);\n matrix.combine2Vec2(manifold.localPoint, 0.5, v1, 0.5, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Compute barycentric coordinates\n // u1 = (cLocal - v1) dot (v2 - v1))\n const u1 = matrix.dotVec2(cLocal, v2) - matrix.dotVec2(cLocal, v1) - matrix.dotVec2(v1, v2) + matrix.dotVec2(v1, v1);\n // u2 = (cLocal - v2) dot (v1 - v2)\n const u2 = matrix.dotVec2(cLocal, v1) - matrix.dotVec2(cLocal, v2) - matrix.dotVec2(v2, v1) + matrix.dotVec2(v2, v2);\n if (u1 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v1) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v1);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v1);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else if (u2 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v2) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v2);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else {\n matrix.combine2Vec2(faceCenter, 0.5, v1, 0.5, v2);\n const separation = matrix.dotVec2(cLocal, normals[vertIndex1]) - matrix.dotVec2(faceCenter, normals[vertIndex1]);\n if (separation > radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[vertIndex1]);\n matrix.copyVec2(manifold.localPoint, faceCenter);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n }\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_min = Math.min;\n\nContact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact);\nContact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact);\n\n/** @internal */ function EdgePolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n CollideEdgePolygon(manifold, fA.getShape() as EdgeShape, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n// reused\n/** @internal */ const edge_reuse = new EdgeShape();\n\n/** @internal */ function ChainPolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n const chain = fA.getShape() as ChainShape;\n chain.getChildEdge(edge_reuse, indexA);\n\n CollideEdgePolygon(manifold, edge_reuse, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ enum EPAxisType {\n e_unknown = -1,\n e_edgeA = 1,\n e_edgeB = 2,\n}\n\n// unused?\n/** @internal */ enum VertexType {\n e_isolated = 0,\n e_concave = 1,\n e_convex = 2,\n}\n\n/**\n * This structure is used to keep track of the best separating axis.\n */\n/** @internal */ class EPAxis {\n type: EPAxisType;\n index: number;\n separation: number;\n}\n\n/**\n * This holds polygon B expressed in frame A.\n */\n/** @internal */ class TempPolygon {\n vertices: Vec2Value[] = []; // [Settings.maxPolygonVertices]\n normals: Vec2Value[] = []; // [Settings.maxPolygonVertices];\n count: number = 0;\n constructor() {\n for (let i = 0; i < Settings.maxPolygonVertices; i++) {\n this.vertices.push(matrix.vec2(0, 0));\n this.normals.push(matrix.vec2(0, 0));\n }\n }\n}\n\n/**\n * Reference face used for clipping\n */\n/** @internal */ class ReferenceFace {\n i1: number;\n i2: number;\n readonly v1 = matrix.vec2(0 ,0);\n readonly v2 = matrix.vec2(0 ,0);\n readonly normal = matrix.vec2(0 ,0);\n readonly sideNormal1 = matrix.vec2(0 ,0);\n sideOffset1: number;\n readonly sideNormal2 = matrix.vec2(0 ,0);\n sideOffset2: number;\n recycle() {\n matrix.zeroVec2(this.v1);\n matrix.zeroVec2(this.v2);\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.sideNormal1);\n matrix.zeroVec2(this.sideNormal2);\n }\n}\n\n// reused\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const ie = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const edgeAxis = new EPAxis();\n/** @internal */ const polygonAxis = new EPAxis();\n/** @internal */ const polygonBA = new TempPolygon();\n/** @internal */ const rf = new ReferenceFace();\n/** @internal */ const centroidB = matrix.vec2(0, 0);\n/** @internal */ const edge0 = matrix.vec2(0, 0);\n/** @internal */ const edge1 = matrix.vec2(0, 0);\n/** @internal */ const edge2 = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal0 = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n/** @internal */ const normal2 = matrix.vec2(0, 0);\n/** @internal */ const lowerLimit = matrix.vec2(0, 0);\n/** @internal */ const upperLimit = matrix.vec2(0, 0);\n/** @internal */ const perp = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n/**\n * This function collides and edge and a polygon, taking into account edge\n * adjacency.\n */\nexport const CollideEdgePolygon = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue): void {\n // Algorithm:\n // 1. Classify v1 and v2\n // 2. Classify polygon centroid as front or back\n // 3. Flip normal if necessary\n // 4. Initialize normal range to [-pi, pi] about face normal\n // 5. Adjust normal range according to adjacent edges\n // 6. Visit each separating axes, only accept axes within the range\n // 7. Return if _any_ axis indicates separation\n // 8. Clip\n\n // let m_type1: VertexType;\n // let m_type2: VertexType;\n\n matrix.detransformTransform(xf, xfA, xfB);\n matrix.transformVec2(centroidB, xf, polygonB.m_centroid);\n\n const v0 = edgeA.m_vertex0;\n const v1 = edgeA.m_vertex1;\n const v2 = edgeA.m_vertex2;\n const v3 = edgeA.m_vertex3;\n\n const hasVertex0 = edgeA.m_hasVertex0;\n const hasVertex3 = edgeA.m_hasVertex3;\n\n matrix.subVec2(edge1, v2, v1);\n matrix.normalizeVec2(edge1);\n matrix.setVec2(normal1, edge1.y, -edge1.x);\n const offset1 = matrix.dotVec2(normal1, centroidB) - matrix.dotVec2(normal1, v1);\n let offset0 = 0.0;\n let offset2 = 0.0;\n let convex1 = false;\n let convex2 = false;\n\n matrix.zeroVec2(normal0);\n matrix.zeroVec2(normal2);\n\n // Is there a preceding edge?\n if (hasVertex0) {\n matrix.subVec2(edge0, v1, v0);\n matrix.normalizeVec2(edge0);\n matrix.setVec2(normal0, edge0.y, -edge0.x);\n convex1 = matrix.crossVec2Vec2(edge0, edge1) >= 0.0;\n offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0);\n }\n\n // Is there a following edge?\n if (hasVertex3) {\n matrix.subVec2(edge2, v3, v2);\n matrix.normalizeVec2(edge2);\n matrix.setVec2(normal2, edge2.y, -edge2.x);\n convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0.0;\n offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v2);\n }\n\n let front: boolean;\n matrix.zeroVec2(normal);\n matrix.zeroVec2(lowerLimit);\n matrix.zeroVec2(upperLimit);\n\n // Determine front or back collision. Determine collision normal limits.\n if (hasVertex0 && hasVertex3) {\n if (convex1 && convex2) {\n front = offset0 >= 0.0 || offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex1) {\n front = offset0 >= 0.0 || (offset1 >= 0.0 && offset2 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex2) {\n front = offset2 >= 0.0 || (offset0 >= 0.0 && offset1 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex0) {\n if (convex1) {\n front = offset0 >= 0.0 || offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex3) {\n if (convex2) {\n front = offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n } else {\n front = offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n } else {\n front = offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n\n // Get polygonB in frameA\n polygonBA.count = polygonB.m_count;\n for (let i = 0; i < polygonB.m_count; ++i) {\n matrix.transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]);\n matrix.rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]);\n }\n\n const radius = polygonB.m_radius + edgeA.m_radius;\n\n manifold.pointCount = 0;\n\n { // ComputeEdgeSeparation\n edgeAxis.type = EPAxisType.e_edgeA;\n edgeAxis.index = front ? 0 : 1;\n edgeAxis.separation = Infinity;\n\n for (let i = 0; i < polygonBA.count; ++i) {\n const v = polygonBA.vertices[i];\n const s = matrix.dotVec2(normal, v) - matrix.dotVec2(normal, v1);\n if (s < edgeAxis.separation) {\n edgeAxis.separation = s;\n }\n }\n }\n\n // If no valid normal can be found than this edge should not collide.\n // @ts-ignore todo: why we need this if here?\n if (edgeAxis.type == EPAxisType.e_unknown) {\n return;\n }\n\n if (edgeAxis.separation > radius) {\n return;\n }\n\n { // ComputePolygonSeparation\n polygonAxis.type = EPAxisType.e_unknown;\n polygonAxis.index = -1;\n polygonAxis.separation = -Infinity;\n\n matrix.setVec2(perp, -normal.y, normal.x);\n\n for (let i = 0; i < polygonBA.count; ++i) {\n matrix.scaleVec2(n, -1, polygonBA.normals[i]);\n\n const s1 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v1);\n const s2 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v2);\n const s = math_min(s1, s2);\n\n if (s > radius) {\n // No collision\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n break;\n }\n\n // Adjacency\n if (matrix.dotVec2(n, perp) >= 0.0) {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(upperLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n } else {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(lowerLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n }\n\n if (s > polygonAxis.separation) {\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n }\n }\n }\n\n if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) {\n return;\n }\n\n // Use hysteresis for jitter reduction.\n const k_relativeTol = 0.98;\n const k_absoluteTol = 0.001;\n\n let primaryAxis: EPAxis;\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\n ie[0].recycle(), ie[1].recycle();\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n manifold.type = ManifoldType.e_faceA;\n\n // Search for the polygon normal that is most anti-parallel to the edge\n // normal.\n let bestIndex = 0;\n let bestValue = matrix.dotVec2(normal, polygonBA.normals[0]);\n for (let i = 1; i < polygonBA.count; ++i) {\n const value = matrix.dotVec2(normal, polygonBA.normals[i]);\n if (value < bestValue) {\n bestValue = value;\n bestIndex = i;\n }\n }\n\n const i1 = bestIndex;\n const i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0;\n\n matrix.copyVec2(ie[0].v, polygonBA.vertices[i1]);\n ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.copyVec2(ie[1].v, polygonBA.vertices[i2]);\n ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n\n if (front) {\n rf.i1 = 0;\n rf.i2 = 1;\n matrix.copyVec2(rf.v1, v1);\n matrix.copyVec2(rf.v2, v2);\n matrix.copyVec2(rf.normal, normal1);\n } else {\n rf.i1 = 1;\n rf.i2 = 0;\n matrix.copyVec2(rf.v1, v2);\n matrix.copyVec2(rf.v2, v1);\n matrix.scaleVec2(rf.normal, -1, normal1);\n }\n } else {\n manifold.type = ManifoldType.e_faceB;\n\n matrix.copyVec2(ie[0].v, v1);\n ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n matrix.copyVec2(ie[1].v, v2);\n ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n rf.i1 = primaryAxis.index;\n rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0;\n matrix.copyVec2(rf.v1, polygonBA.vertices[rf.i1]);\n matrix.copyVec2(rf.v2, polygonBA.vertices[rf.i2]);\n matrix.copyVec2(rf.normal, polygonBA.normals[rf.i1]);\n }\n\n matrix.setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x);\n matrix.setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y);\n rf.sideOffset1 = matrix.dotVec2(rf.sideNormal1, rf.v1);\n rf.sideOffset2 = matrix.dotVec2(rf.sideNormal2, rf.v2);\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n const np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1);\n\n if (np1 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Clip to negative box side 1\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2);\n\n if (np2 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.copyVec2(manifold.localNormal, rf.normal);\n matrix.copyVec2(manifold.localPoint, rf.v1);\n } else {\n matrix.copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]);\n matrix.copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]);\n }\n\n let pointCount = 0;\n for (let i = 0; i < Settings.maxManifoldPoints; ++i) {\n const separation = matrix.dotVec2(rf.normal, clipPoints2[i].v) - matrix.dotVec2(rf.normal, rf.v1);\n\n if (separation <= radius) {\n const cp = manifold.points[pointCount]; // ManifoldPoint\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.detransformVec2(cp.localPoint, xf, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n } else {\n matrix.copyVec2(cp.localPoint, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n cp.id.swapFeatures();\n }\n\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","import { CollidePolygons } from \"./collision/shape/CollidePolygon\";\nimport { Settings } from \"./Settings\";\nimport { Sweep } from \"./common/Sweep\";\nimport { DynamicTree } from \"./collision/DynamicTree\";\nimport { Manifold } from \"./collision/Manifold\";\nimport { Distance } from \"./collision/Distance\";\nimport { TimeOfImpact } from \"./collision/TimeOfImpact\";\nimport { stats } from \"./util/stats\";\n\n/** @hidden @deprecated Merged with main namespace */\nexport const internal = {\n CollidePolygons,\n Settings,\n Sweep,\n Manifold,\n Distance,\n TimeOfImpact,\n DynamicTree,\n stats\n};\n","/**\n * Stage.js 1.0.0-alpha.5\n *\n * @copyright Copyright (c) 2024 Ali Shakiba\n * @license The MIT License (MIT)\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 */\nvar math_random = Math.random;\nvar math_sqrt = Math.sqrt;\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}\nfunction wrap(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 length(x, y) {\n return math_sqrt(x * x + y * y);\n}\nvar math = Object.create(Math);\nmath.random = random;\nmath.wrap = wrap;\nmath.clamp = clamp;\nmath.length = length;\nmath.rotate = wrap;\nmath.limit = clamp;\nvar Matrix = (\n /** @class */\n function() {\n function Matrix2(a, b, c, d, e, f) {\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.e = 0;\n this.f = 0;\n if (typeof a === \"object\") {\n this.reset(a);\n } else {\n this.reset(a, b, c, d, e, f);\n }\n }\n Matrix2.prototype.toString = function() {\n return \"[\" + this.a + \", \" + this.b + \", \" + this.c + \", \" + this.d + \", \" + this.e + \", \" + this.f + \"]\";\n };\n Matrix2.prototype.clone = function() {\n return new Matrix2(this.a, this.b, this.c, this.d, this.e, this.f);\n };\n Matrix2.prototype.reset = function(a, b, c, d, e, f) {\n this._dirty = true;\n if (typeof a === \"object\") {\n this.a = a.a;\n this.d = a.d;\n this.b = a.b;\n this.c = a.c;\n this.e = a.e;\n this.f = a.f;\n } else {\n this.a = typeof a === \"number\" ? a : 1;\n this.b = typeof b === \"number\" ? b : 0;\n this.c = typeof c === \"number\" ? c : 0;\n this.d = typeof d === \"number\" ? d : 1;\n this.e = typeof e === \"number\" ? e : 0;\n this.f = typeof f === \"number\" ? f : 0;\n }\n return this;\n };\n Matrix2.prototype.identity = function() {\n this._dirty = true;\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.e = 0;\n this.f = 0;\n return this;\n };\n Matrix2.prototype.rotate = function(angle) {\n if (!angle) {\n return this;\n }\n this._dirty = true;\n var u = angle ? Math.cos(angle) : 1;\n var v = angle ? Math.sin(angle) : 0;\n var a = u * this.a - v * this.b;\n var b = u * this.b + v * this.a;\n var c = u * this.c - v * this.d;\n var d = u * this.d + v * this.c;\n var e = u * this.e - v * this.f;\n var f = u * this.f + v * this.e;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.translate = function(x, y) {\n if (!x && !y) {\n return this;\n }\n this._dirty = true;\n this.e += x;\n this.f += y;\n return this;\n };\n Matrix2.prototype.scale = function(x, y) {\n if (!(x - 1) && !(y - 1)) {\n return this;\n }\n this._dirty = true;\n this.a *= x;\n this.b *= y;\n this.c *= x;\n this.d *= y;\n this.e *= x;\n this.f *= y;\n return this;\n };\n Matrix2.prototype.skew = function(x, y) {\n if (!x && !y) {\n return this;\n }\n this._dirty = true;\n var a = this.a + this.b * x;\n var b = this.b + this.a * y;\n var c = this.c + this.d * x;\n var d = this.d + this.c * y;\n var e = this.e + this.f * x;\n var f = this.f + this.e * y;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.concat = function(m) {\n this._dirty = true;\n var a = this.a * m.a + this.b * m.c;\n var b = this.b * m.d + this.a * m.b;\n var c = this.c * m.a + this.d * m.c;\n var d = this.d * m.d + this.c * m.b;\n var e = this.e * m.a + m.e + this.f * m.c;\n var f = this.f * m.d + m.f + this.e * m.b;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.inverse = function() {\n if (this._dirty) {\n this._dirty = false;\n if (!this.inverted) {\n this.inverted = new Matrix2();\n }\n var z = this.a * this.d - this.b * this.c;\n this.inverted.a = this.d / z;\n this.inverted.b = -this.b / z;\n this.inverted.c = -this.c / z;\n this.inverted.d = this.a / z;\n this.inverted.e = (this.c * this.f - this.e * this.d) / z;\n this.inverted.f = (this.e * this.b - this.a * this.f) / z;\n }\n return this.inverted;\n };\n Matrix2.prototype.map = function(p, q) {\n q = q || { x: 0, y: 0 };\n q.x = this.a * p.x + this.c * p.y + this.e;\n q.y = this.b * p.x + this.d * p.y + this.f;\n return q;\n };\n Matrix2.prototype.mapX = function(x, y) {\n if (typeof x === \"object\") {\n y = x.y;\n x = x.x;\n }\n return this.a * x + this.c * y + this.e;\n };\n Matrix2.prototype.mapY = function(x, y) {\n if (typeof x === \"object\") {\n y = x.y;\n x = x.x;\n }\n return this.b * x + this.d * y + this.f;\n };\n return Matrix2;\n }()\n);\nvar objectToString = Object.prototype.toString;\nfunction isFn(value) {\n var str = objectToString.call(value);\n return str === \"[object Function]\" || str === \"[object GeneratorFunction]\" || str === \"[object AsyncFunction]\";\n}\nfunction isHash(value) {\n return objectToString.call(value) === \"[object Object]\" && value.constructor === Object;\n}\nconst stats = {\n create: 0,\n tick: 0,\n node: 0,\n draw: 0,\n fps: 0\n};\nvar uid = function() {\n return Date.now().toString(36) + Math.random().toString(36).slice(2);\n};\nvar Texture = (\n /** @class */\n function() {\n function Texture2() {\n this.uid = \"texture:\" + uid();\n this.sx = 0;\n this.sy = 0;\n this.dx = 0;\n this.dy = 0;\n }\n Texture2.prototype.setSourceCoordinate = function(x, y) {\n this.sx = x;\n this.sy = y;\n };\n Texture2.prototype.setSourceDimension = function(w, h) {\n this.sw = w;\n this.sh = h;\n };\n Texture2.prototype.setDestinationCoordinate = function(x, y) {\n this.dx = x;\n this.dy = y;\n };\n Texture2.prototype.setDestinationDimension = function(w, h) {\n this.dw = w;\n this.dh = h;\n };\n Texture2.prototype.draw = function(context, x1, y1, w1, h1, x2, y2, w2, h2) {\n var sx = this.sx;\n var sy = this.sy;\n var sw = this.sw;\n var sh = this.sh;\n var dx = this.dx;\n var dy = this.dy;\n var dw = this.dw;\n var dh = this.dh;\n if (typeof x1 === \"number\" || typeof y1 === \"number\" || typeof w1 === \"number\" || typeof h1 === \"number\" || typeof x2 === \"number\" || typeof y2 === \"number\" || typeof w2 === \"number\" || typeof h2 === \"number\") {\n if (typeof x2 === \"number\" || typeof y2 === \"number\" || typeof w2 === \"number\" || typeof h2 === \"number\") {\n sx += x1;\n sy += y1;\n sw = w1 !== null && w1 !== void 0 ? w1 : sw;\n sh = h1 !== null && h1 !== void 0 ? h1 : sh;\n dx += x2;\n dy += y2;\n dw = w2 !== null && w2 !== void 0 ? w2 : dw;\n dh = h2 !== null && h2 !== void 0 ? h2 : dh;\n } else {\n dx += x1;\n dy += y1;\n dw = w1;\n dh = h1;\n }\n }\n this.drawWithNormalizedArgs(context, sx, sy, sw, sh, dx, dy, dw, dh);\n };\n return Texture2;\n }()\n);\nvar __extends$9 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar ImageTexture = (\n /** @class */\n function(_super) {\n __extends$9(ImageTexture2, _super);\n function ImageTexture2(source, pixelRatio) {\n var _this = _super.call(this) || this;\n _this._pixelRatio = 1;\n if (typeof source === \"object\") {\n _this.setSourceImage(source, pixelRatio);\n }\n return _this;\n }\n ImageTexture2.prototype.setSourceImage = function(image2, pixelRatio) {\n if (pixelRatio === void 0) {\n pixelRatio = 1;\n }\n this._source = image2;\n this._pixelRatio = pixelRatio;\n };\n ImageTexture2.prototype.getWidth = function() {\n return this._source.width / this._pixelRatio;\n };\n ImageTexture2.prototype.getHeight = function() {\n return this._source.height / this._pixelRatio;\n };\n ImageTexture2.prototype.prerender = function(context) {\n return false;\n };\n ImageTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var image2 = this._source;\n if (image2 === null || typeof image2 !== \"object\") {\n return;\n }\n sw = sw !== null && sw !== void 0 ? sw : this.getWidth();\n sh = sh !== null && sh !== void 0 ? sh : this.getHeight();\n dw = dw !== null && dw !== void 0 ? dw : sw;\n dh = dh !== null && dh !== void 0 ? dh : sh;\n sx *= this._pixelRatio;\n sy *= this._pixelRatio;\n sw *= this._pixelRatio;\n sh *= this._pixelRatio;\n try {\n stats.draw++;\n context.drawImage(image2, sx, sy, sw, sh, dx, dy, dw, dh);\n } catch (ex) {\n if (!this._draw_failed) {\n console.log(\"Unable to draw: \", image2);\n console.log(ex);\n this._draw_failed = true;\n }\n }\n };\n return ImageTexture2;\n }(Texture)\n);\nvar __extends$8 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar PipeTexture = (\n /** @class */\n function(_super) {\n __extends$8(PipeTexture2, _super);\n function PipeTexture2(source) {\n var _this = _super.call(this) || this;\n _this._source = source;\n return _this;\n }\n PipeTexture2.prototype.setSourceTexture = function(texture2) {\n this._source = texture2;\n };\n PipeTexture2.prototype.getWidth = function() {\n var _a, _b;\n return (_b = (_a = this.dw) !== null && _a !== void 0 ? _a : this.sw) !== null && _b !== void 0 ? _b : this._source.getWidth();\n };\n PipeTexture2.prototype.getHeight = function() {\n var _a, _b;\n return (_b = (_a = this.dh) !== null && _a !== void 0 ? _a : this.sh) !== null && _b !== void 0 ? _b : this._source.getHeight();\n };\n PipeTexture2.prototype.prerender = function(context) {\n return this._source.prerender(context);\n };\n PipeTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var texture2 = this._source;\n if (texture2 === null || typeof texture2 !== \"object\") {\n return;\n }\n texture2.draw(context, sx, sy, sw, sh, dx, dy, dw, dh);\n };\n return PipeTexture2;\n }(Texture)\n);\nvar __extends$7 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __awaiter$1 = function(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator$1 = function(thisArg, body) {\n var _ = { label: 0, sent: function() {\n if (t[0] & 1)\n throw t[1];\n return t[1];\n }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f)\n throw new TypeError(\"Generator is already executing.\");\n while (_)\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n return t;\n if (y = 0, t)\n op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return { value: op[1], done: false };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2])\n _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5)\n throw op[1];\n return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar Atlas = (\n /** @class */\n function(_super) {\n __extends$7(Atlas2, _super);\n function Atlas2(def) {\n if (def === void 0) {\n def = {};\n }\n var _this = _super.call(this) || this;\n _this.pipeSpriteTexture = function(def2) {\n var map = _this._map;\n var ppu = _this._ppu;\n var trim = _this._trim;\n if (!def2) {\n return void 0;\n }\n def2 = Object.assign({}, def2);\n if (isFn(map)) {\n def2 = map(def2);\n }\n if (ppu != 1) {\n def2.x *= ppu;\n def2.y *= ppu;\n def2.width *= ppu;\n def2.height *= ppu;\n def2.top *= ppu;\n def2.bottom *= ppu;\n def2.left *= ppu;\n def2.right *= ppu;\n }\n if (trim != 0) {\n def2.x += trim;\n def2.y += trim;\n def2.width -= 2 * trim;\n def2.height -= 2 * trim;\n def2.top -= trim;\n def2.bottom -= trim;\n def2.left -= trim;\n def2.right -= trim;\n }\n var texture2 = new PipeTexture(_this);\n texture2.top = def2.top;\n texture2.bottom = def2.bottom;\n texture2.left = def2.left;\n texture2.right = def2.right;\n texture2.setSourceCoordinate(def2.x, def2.y);\n texture2.setSourceDimension(def2.width, def2.height);\n return texture2;\n };\n _this.findSpriteDefinition = function(query) {\n var textures = _this._textures;\n if (textures) {\n if (isFn(textures)) {\n return textures(query);\n } else if (isHash(textures)) {\n return textures[query];\n }\n }\n };\n _this.select = function(query) {\n if (!query) {\n return new TextureSelection(new PipeTexture(_this));\n }\n var textureDefinition = _this.findSpriteDefinition(query);\n if (textureDefinition) {\n return new TextureSelection(textureDefinition, _this);\n }\n };\n _this.name = def.name;\n _this._ppu = def.ppu || def.ratio || 1;\n _this._trim = def.trim || 0;\n _this._map = def.map || def.filter;\n _this._textures = def.textures;\n if (typeof def.image === \"object\" && isHash(def.image)) {\n _this._imageSrc = def.image.src || def.image.url;\n if (typeof def.image.ratio === \"number\") {\n _this._pixelRatio = def.image.ratio;\n }\n } else {\n if (typeof def.imagePath === \"string\") {\n _this._imageSrc = def.imagePath;\n } else if (typeof def.image === \"string\") {\n _this._imageSrc = def.image;\n }\n if (typeof def.imageRatio === \"number\") {\n _this._pixelRatio = def.imageRatio;\n }\n }\n deprecatedWarning(def);\n return _this;\n }\n Atlas2.prototype.load = function() {\n return __awaiter$1(this, void 0, void 0, function() {\n var image2;\n return __generator$1(this, function(_a) {\n switch (_a.label) {\n case 0:\n if (!this._imageSrc)\n return [3, 2];\n return [4, asyncLoadImage(this._imageSrc)];\n case 1:\n image2 = _a.sent();\n this.setSourceImage(image2, this._pixelRatio);\n _a.label = 2;\n case 2:\n return [\n 2\n /*return*/\n ];\n }\n });\n });\n };\n return Atlas2;\n }(ImageTexture)\n);\nfunction asyncLoadImage(src) {\n return new Promise(function(resolve, reject) {\n var img = new Image();\n img.onload = function() {\n resolve(img);\n };\n img.onerror = function(error) {\n console.error(\"Loading failed: \" + src);\n reject(error);\n };\n img.src = src;\n });\n}\nfunction deprecatedWarning(def) {\n if (\"filter\" in def)\n console.warn(\"'filter' field of atlas definition is deprecated\");\n if (\"cutouts\" in def)\n console.warn(\"'cutouts' field of atlas definition is deprecated\");\n if (\"sprites\" in def)\n console.warn(\"'sprites' field of atlas definition is deprecated\");\n if (\"factory\" in def)\n console.warn(\"'factory' field of atlas definition is deprecated\");\n if (\"ratio\" in def)\n console.warn(\"'ratio' field of atlas definition is deprecated\");\n if (\"imagePath\" in def)\n console.warn(\"'imagePath' field of atlas definition is deprecated\");\n if (\"imageRatio\" in def)\n console.warn(\"'imageRatio' field of atlas definition is deprecated\");\n if (typeof def.image === \"object\" && \"url\" in def.image)\n console.warn(\"'image.url' field of atlas definition is deprecated\");\n}\nvar __extends$6 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __awaiter = function(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = function(thisArg, body) {\n var _ = { label: 0, sent: function() {\n if (t[0] & 1)\n throw t[1];\n return t[1];\n }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f)\n throw new TypeError(\"Generator is already executing.\");\n while (_)\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n return t;\n if (y = 0, t)\n op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return { value: op[1], done: false };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2])\n _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5)\n throw op[1];\n return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nfunction isAtlasSpriteDefinition(selection) {\n return typeof selection === \"object\" && isHash(selection) && \"number\" === typeof selection.width && \"number\" === typeof selection.height;\n}\nvar TextureSelection = (\n /** @class */\n function() {\n function TextureSelection2(selection, atlas2) {\n this.selection = selection;\n this.atlas = atlas2;\n }\n TextureSelection2.prototype.resolve = function(selection, subquery) {\n if (!selection) {\n return NO_TEXTURE;\n } else if (Array.isArray(selection)) {\n return this.resolve(selection[0]);\n } else if (selection instanceof Texture) {\n return selection;\n } else if (isAtlasSpriteDefinition(selection)) {\n if (!this.atlas) {\n return NO_TEXTURE;\n }\n return this.atlas.pipeSpriteTexture(selection);\n } else if (typeof selection === \"object\" && isHash(selection) && typeof subquery !== \"undefined\") {\n return this.resolve(selection[subquery]);\n } else if (typeof selection === \"function\" && isFn(selection)) {\n return this.resolve(selection(subquery));\n } else if (typeof selection === \"string\") {\n if (!this.atlas) {\n return NO_TEXTURE;\n }\n return this.resolve(this.atlas.findSpriteDefinition(selection));\n }\n };\n TextureSelection2.prototype.one = function(subquery) {\n return this.resolve(this.selection, subquery);\n };\n TextureSelection2.prototype.array = function(arr) {\n var array = Array.isArray(arr) ? arr : [];\n if (Array.isArray(this.selection)) {\n for (var i = 0; i < this.selection.length; i++) {\n array[i] = this.resolve(this.selection[i]);\n }\n } else {\n array[0] = this.resolve(this.selection);\n }\n return array;\n };\n return TextureSelection2;\n }()\n);\nvar NO_TEXTURE = new /** @class */\n(function(_super) {\n __extends$6(class_1, _super);\n function class_1() {\n var _this = _super.call(this) || this;\n _this.setSourceDimension(0, 0);\n return _this;\n }\n class_1.prototype.getWidth = function() {\n return 0;\n };\n class_1.prototype.getHeight = function() {\n return 0;\n };\n class_1.prototype.prerender = function(context) {\n return false;\n };\n class_1.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n };\n class_1.prototype.setSourceCoordinate = function(x, y) {\n };\n class_1.prototype.setSourceDimension = function(w, h) {\n };\n class_1.prototype.setDestinationCoordinate = function(x, y) {\n };\n class_1.prototype.setDestinationDimension = function(w, h) {\n };\n class_1.prototype.draw = function() {\n };\n return class_1;\n}(Texture))();\nvar NO_SELECTION = new TextureSelection(NO_TEXTURE);\nvar ATLAS_MEMO_BY_NAME = {};\nvar ATLAS_ARRAY = [];\nfunction atlas(def) {\n return __awaiter(this, void 0, Promise, function() {\n var atlas2;\n return __generator(this, function(_a) {\n switch (_a.label) {\n case 0:\n if (def instanceof Atlas) {\n atlas2 = def;\n } else {\n atlas2 = new Atlas(def);\n }\n if (atlas2.name) {\n ATLAS_MEMO_BY_NAME[atlas2.name] = atlas2;\n }\n ATLAS_ARRAY.push(atlas2);\n return [4, atlas2.load()];\n case 1:\n _a.sent();\n return [2, atlas2];\n }\n });\n });\n}\nfunction texture(query) {\n if (\"string\" !== typeof query) {\n return new TextureSelection(query);\n }\n var result = null;\n var colonIndex = query.indexOf(\":\");\n if (colonIndex > 0 && query.length > colonIndex + 1) {\n var atlas_1 = ATLAS_MEMO_BY_NAME[query.slice(0, colonIndex)];\n result = atlas_1 && atlas_1.select(query.slice(colonIndex + 1));\n }\n if (!result) {\n var atlas_2 = ATLAS_MEMO_BY_NAME[query];\n result = atlas_2 && atlas_2.select();\n }\n if (!result) {\n for (var i = 0; i < ATLAS_ARRAY.length; i++) {\n result = ATLAS_ARRAY[i].select(query);\n if (result) {\n break;\n }\n }\n }\n if (!result) {\n console.error(\"Texture not found: \" + query);\n result = NO_SELECTION;\n }\n return result;\n}\nvar __extends$5 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar ResizableTexture = (\n /** @class */\n function(_super) {\n __extends$5(ResizableTexture2, _super);\n function ResizableTexture2(source, mode) {\n var _this = _super.call(this) || this;\n _this._source = source;\n _this._resizeMode = mode;\n return _this;\n }\n ResizableTexture2.prototype.getWidth = function() {\n var _a;\n return (_a = this.dw) !== null && _a !== void 0 ? _a : this._source.getWidth();\n };\n ResizableTexture2.prototype.getHeight = function() {\n var _a;\n return (_a = this.dh) !== null && _a !== void 0 ? _a : this._source.getHeight();\n };\n ResizableTexture2.prototype.prerender = function(context) {\n return false;\n };\n ResizableTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var texture2 = this._source;\n if (texture2 === null || typeof texture2 !== \"object\") {\n return;\n }\n var outWidth = dw;\n var outHeight = dh;\n var left = Number.isFinite(texture2.left) ? texture2.left : 0;\n var right = Number.isFinite(texture2.right) ? texture2.right : 0;\n var top = Number.isFinite(texture2.top) ? texture2.top : 0;\n var bottom = Number.isFinite(texture2.bottom) ? texture2.bottom : 0;\n var width = texture2.getWidth() - left - right;\n var height = texture2.getHeight() - top - bottom;\n if (!this._innerSize) {\n outWidth = Math.max(outWidth - left - right, 0);\n outHeight = Math.max(outHeight - top - bottom, 0);\n }\n if (top > 0 && left > 0) {\n texture2.draw(context, 0, 0, left, top, 0, 0, left, top);\n }\n if (bottom > 0 && left > 0) {\n texture2.draw(context, 0, height + top, left, bottom, 0, outHeight + top, left, bottom);\n }\n if (top > 0 && right > 0) {\n texture2.draw(context, width + left, 0, right, top, outWidth + left, 0, right, top);\n }\n if (bottom > 0 && right > 0) {\n texture2.draw(context, width + left, height + top, right, bottom, outWidth + left, outHeight + top, right, bottom);\n }\n if (this._resizeMode === \"stretch\") {\n if (top > 0) {\n texture2.draw(context, left, 0, width, top, left, 0, outWidth, top);\n }\n if (bottom > 0) {\n texture2.draw(context, left, height + top, width, bottom, left, outHeight + top, outWidth, bottom);\n }\n if (left > 0) {\n texture2.draw(context, 0, top, left, height, 0, top, left, outHeight);\n }\n if (right > 0) {\n texture2.draw(context, width + left, top, right, height, outWidth + left, top, right, outHeight);\n }\n texture2.draw(context, left, top, width, height, left, top, outWidth, outHeight);\n } else if (this._resizeMode === \"tile\") {\n var l = left;\n var r = outWidth;\n var w = void 0;\n while (r > 0) {\n w = Math.min(width, r);\n r -= width;\n var t = top;\n var b = outHeight;\n var h = void 0;\n while (b > 0) {\n h = Math.min(height, b);\n b -= height;\n texture2.draw(context, left, top, w, h, l, t, w, h);\n if (r <= 0) {\n if (left) {\n texture2.draw(context, 0, top, left, h, 0, t, left, h);\n }\n if (right) {\n texture2.draw(context, width + left, top, right, h, l + w, t, right, h);\n }\n }\n t += h;\n }\n if (top) {\n texture2.draw(context, left, 0, w, top, l, 0, w, top);\n }\n if (bottom) {\n texture2.draw(context, left, height + top, w, bottom, l, t, w, bottom);\n }\n l += w;\n }\n }\n };\n return ResizableTexture2;\n }(Texture)\n);\nfunction getPixelRatio() {\n return typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1;\n}\nfunction isValidFitMode(value) {\n return value && (value === \"cover\" || value === \"contain\" || value === \"fill\" || value === \"in\" || value === \"in-pad\" || value === \"out\" || value === \"out-crop\");\n}\nvar iid$1 = 0;\nvar Pin = (\n /** @class */\n function() {\n function Pin2(owner) {\n this.uid = \"pin:\" + uid();\n this._owner = owner;\n this._parent = null;\n this._relativeMatrix = new Matrix();\n this._absoluteMatrix = new Matrix();\n this.reset();\n }\n Pin2.prototype.reset = function() {\n this._textureAlpha = 1;\n this._alpha = 1;\n this._width = 0;\n this._height = 0;\n this._scaleX = 1;\n this._scaleY = 1;\n this._skewX = 0;\n this._skewY = 0;\n this._rotation = 0;\n this._pivoted = false;\n this._pivotX = 0;\n this._pivotY = 0;\n this._handled = false;\n this._handleX = 0;\n this._handleY = 0;\n this._aligned = false;\n this._alignX = 0;\n this._alignY = 0;\n this._offsetX = 0;\n this._offsetY = 0;\n this._boxX = 0;\n this._boxY = 0;\n this._boxWidth = this._width;\n this._boxHeight = this._height;\n this._ts_translate = ++iid$1;\n this._ts_transform = ++iid$1;\n this._ts_matrix = ++iid$1;\n };\n Pin2.prototype._update = function() {\n this._parent = this._owner._parent && this._owner._parent._pin;\n if (this._handled && this._mo_handle != this._ts_transform) {\n this._mo_handle = this._ts_transform;\n this._ts_translate = ++iid$1;\n }\n if (this._aligned && this._parent && this._mo_align != this._parent._ts_transform) {\n this._mo_align = this._parent._ts_transform;\n this._ts_translate = ++iid$1;\n }\n return this;\n };\n Pin2.prototype.toString = function() {\n return this._owner + \" (\" + (this._parent ? this._parent._owner : null) + \")\";\n };\n Pin2.prototype.absoluteMatrix = function() {\n this._update();\n var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_matrix : 0);\n if (this._mo_abs == ts) {\n return this._absoluteMatrix;\n }\n this._mo_abs = ts;\n var abs = this._absoluteMatrix;\n abs.reset(this.relativeMatrix());\n this._parent && abs.concat(this._parent._absoluteMatrix);\n this._ts_matrix = ++iid$1;\n return abs;\n };\n Pin2.prototype.relativeMatrix = function() {\n this._update();\n var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_transform : 0);\n if (this._mo_rel == ts) {\n return this._relativeMatrix;\n }\n this._mo_rel = ts;\n var rel = this._relativeMatrix;\n rel.identity();\n if (this._pivoted) {\n rel.translate(-this._pivotX * this._width, -this._pivotY * this._height);\n }\n rel.scale(this._scaleX, this._scaleY);\n rel.skew(this._skewX, this._skewY);\n rel.rotate(this._rotation);\n if (this._pivoted) {\n rel.translate(this._pivotX * this._width, this._pivotY * this._height);\n }\n if (this._pivoted) {\n this._boxX = 0;\n this._boxY = 0;\n this._boxWidth = this._width;\n this._boxHeight = this._height;\n } else {\n var p = void 0;\n var q = void 0;\n if (rel.a > 0 && rel.c > 0 || rel.a < 0 && rel.c < 0) {\n p = 0;\n q = rel.a * this._width + rel.c * this._height;\n } else {\n p = rel.a * this._width;\n q = rel.c * this._height;\n }\n if (p > q) {\n this._boxX = q;\n this._boxWidth = p - q;\n } else {\n this._boxX = p;\n this._boxWidth = q - p;\n }\n if (rel.b > 0 && rel.d > 0 || rel.b < 0 && rel.d < 0) {\n p = 0;\n q = rel.b * this._width + rel.d * this._height;\n } else {\n p = rel.b * this._width;\n q = rel.d * this._height;\n }\n if (p > q) {\n this._boxY = q;\n this._boxHeight = p - q;\n } else {\n this._boxY = p;\n this._boxHeight = q - p;\n }\n }\n this._x = this._offsetX;\n this._y = this._offsetY;\n this._x -= this._boxX + this._handleX * this._boxWidth;\n this._y -= this._boxY + this._handleY * this._boxHeight;\n if (this._aligned && this._parent) {\n this._parent.relativeMatrix();\n this._x += this._alignX * this._parent._width;\n this._y += this._alignY * this._parent._height;\n }\n rel.translate(this._x, this._y);\n return this._relativeMatrix;\n };\n Pin2.prototype.get = function(key) {\n if (typeof getters[key] === \"function\") {\n return getters[key](this);\n }\n };\n Pin2.prototype.set = function(a, b) {\n if (typeof a === \"string\") {\n if (typeof setters[a] === \"function\" && typeof b !== \"undefined\") {\n setters[a](this, b);\n }\n } else if (typeof a === \"object\") {\n for (b in a) {\n if (typeof setters[b] === \"function\" && typeof a[b] !== \"undefined\") {\n setters[b](this, a[b], a);\n }\n }\n }\n if (this._owner) {\n this._owner._ts_pin = ++iid$1;\n this._owner.touch();\n }\n return this;\n };\n Pin2.prototype.fit = function(width, height, mode) {\n this._ts_transform = ++iid$1;\n if (mode === \"contain\") {\n mode = \"in-pad\";\n }\n if (mode === \"cover\") {\n mode = \"out-crop\";\n }\n if (typeof width === \"number\") {\n this._scaleX = width / this._unscaled_width;\n this._width = this._unscaled_width;\n }\n if (typeof height === \"number\") {\n this._scaleY = height / this._unscaled_height;\n this._height = this._unscaled_height;\n }\n if (typeof width === \"number\" && typeof height === \"number\" && typeof mode === \"string\") {\n if (mode === \"fill\")\n ;\n else if (mode === \"out\" || mode === \"out-crop\") {\n this._scaleX = this._scaleY = Math.max(this._scaleX, this._scaleY);\n } else if (mode === \"in\" || mode === \"in-pad\") {\n this._scaleX = this._scaleY = Math.min(this._scaleX, this._scaleY);\n }\n if (mode === \"out-crop\" || mode === \"in-pad\") {\n this._width = width / this._scaleX;\n this._height = height / this._scaleY;\n }\n }\n };\n return Pin2;\n }()\n);\nvar getters = {\n alpha: function(pin) {\n return pin._alpha;\n },\n textureAlpha: function(pin) {\n return pin._textureAlpha;\n },\n width: function(pin) {\n return pin._width;\n },\n height: function(pin) {\n return pin._height;\n },\n boxWidth: function(pin) {\n return pin._boxWidth;\n },\n boxHeight: function(pin) {\n return pin._boxHeight;\n },\n // scale : function(pin: Pin) {\n // },\n scaleX: function(pin) {\n return pin._scaleX;\n },\n scaleY: function(pin) {\n return pin._scaleY;\n },\n // skew : function(pin: Pin) {\n // },\n skewX: function(pin) {\n return pin._skewX;\n },\n skewY: function(pin) {\n return pin._skewY;\n },\n rotation: function(pin) {\n return pin._rotation;\n },\n // pivot : function(pin: Pin) {\n // },\n pivotX: function(pin) {\n return pin._pivotX;\n },\n pivotY: function(pin) {\n return pin._pivotY;\n },\n // offset : function(pin: Pin) {\n // },\n offsetX: function(pin) {\n return pin._offsetX;\n },\n offsetY: function(pin) {\n return pin._offsetY;\n },\n // align : function(pin: Pin) {\n // },\n alignX: function(pin) {\n return pin._alignX;\n },\n alignY: function(pin) {\n return pin._alignY;\n },\n // handle : function(pin: Pin) {\n // },\n handleX: function(pin) {\n return pin._handleX;\n },\n handleY: function(pin) {\n return pin._handleY;\n }\n};\nvar setters = {\n alpha: function(pin, value) {\n pin._alpha = value;\n },\n textureAlpha: function(pin, value) {\n pin._textureAlpha = value;\n },\n width: function(pin, value) {\n pin._unscaled_width = value;\n pin._width = value;\n pin._ts_transform = ++iid$1;\n },\n height: function(pin, value) {\n pin._unscaled_height = value;\n pin._height = value;\n pin._ts_transform = ++iid$1;\n },\n scale: function(pin, value) {\n pin._scaleX = value;\n pin._scaleY = value;\n pin._ts_transform = ++iid$1;\n },\n scaleX: function(pin, value) {\n pin._scaleX = value;\n pin._ts_transform = ++iid$1;\n },\n scaleY: function(pin, value) {\n pin._scaleY = value;\n pin._ts_transform = ++iid$1;\n },\n skew: function(pin, value) {\n pin._skewX = value;\n pin._skewY = value;\n pin._ts_transform = ++iid$1;\n },\n skewX: function(pin, value) {\n pin._skewX = value;\n pin._ts_transform = ++iid$1;\n },\n skewY: function(pin, value) {\n pin._skewY = value;\n pin._ts_transform = ++iid$1;\n },\n rotation: function(pin, value) {\n pin._rotation = value;\n pin._ts_transform = ++iid$1;\n },\n pivot: function(pin, value) {\n pin._pivotX = value;\n pin._pivotY = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n pivotX: function(pin, value) {\n pin._pivotX = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n pivotY: function(pin, value) {\n pin._pivotY = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n offset: function(pin, value) {\n pin._offsetX = value;\n pin._offsetY = value;\n pin._ts_translate = ++iid$1;\n },\n offsetX: function(pin, value) {\n pin._offsetX = value;\n pin._ts_translate = ++iid$1;\n },\n offsetY: function(pin, value) {\n pin._offsetY = value;\n pin._ts_translate = ++iid$1;\n },\n align: function(pin, value) {\n this.alignX(pin, value);\n this.alignY(pin, value);\n },\n alignX: function(pin, value) {\n pin._alignX = value;\n pin._aligned = true;\n pin._ts_translate = ++iid$1;\n this.handleX(pin, value);\n },\n alignY: function(pin, value) {\n pin._alignY = value;\n pin._aligned = true;\n pin._ts_translate = ++iid$1;\n this.handleY(pin, value);\n },\n handle: function(pin, value) {\n this.handleX(pin, value);\n this.handleY(pin, value);\n },\n handleX: function(pin, value) {\n pin._handleX = value;\n pin._handled = true;\n pin._ts_translate = ++iid$1;\n },\n handleY: function(pin, value) {\n pin._handleY = value;\n pin._handled = true;\n pin._ts_translate = ++iid$1;\n },\n resizeMode: function(pin, value, all) {\n if (all) {\n if (value == \"in\") {\n value = \"in-pad\";\n } else if (value == \"out\") {\n value = \"out-crop\";\n }\n pin.fit(all.resizeWidth, all.resizeHeight, value);\n }\n },\n resizeWidth: function(pin, value, all) {\n if (!all || !all.resizeMode) {\n pin.fit(value, null);\n }\n },\n resizeHeight: function(pin, value, all) {\n if (!all || !all.resizeMode) {\n pin.fit(null, value);\n }\n },\n scaleMode: function(pin, value, all) {\n if (all) {\n pin.fit(all.scaleWidth, all.scaleHeight, value);\n }\n },\n scaleWidth: function(pin, value, all) {\n if (!all || !all.scaleMode) {\n pin.fit(value, null);\n }\n },\n scaleHeight: function(pin, value, all) {\n if (!all || !all.scaleMode) {\n pin.fit(null, value);\n }\n },\n matrix: function(pin, value) {\n this.scaleX(pin, value.a);\n this.skewX(pin, value.c / value.d);\n this.skewY(pin, value.b / value.a);\n this.scaleY(pin, value.d);\n this.offsetX(pin, value.e);\n this.offsetY(pin, value.f);\n this.rotation(pin, 0);\n }\n};\nfunction IDENTITY(x) {\n return x;\n}\nvar LOOKUP_CACHE = {};\nvar MODE_BY_NAME = {};\nvar EASE_BY_NAME = {};\nvar Easing = (\n /** @class */\n function() {\n function Easing2() {\n }\n Easing2.get = function(token, fallback) {\n fallback = fallback || IDENTITY;\n if (typeof token === \"function\") {\n return token;\n }\n if (typeof token !== \"string\") {\n return fallback;\n }\n var easeFn = LOOKUP_CACHE[token];\n if (easeFn) {\n return easeFn;\n }\n var tokens = /^(\\w+)(-(in|out|in-out|out-in))?(\\((.*)\\))?$/i.exec(token);\n if (!tokens || !tokens.length) {\n return fallback;\n }\n var easeName = tokens[1];\n var easing = EASE_BY_NAME[easeName];\n var modeName = tokens[3];\n var modeFn = MODE_BY_NAME[modeName];\n var params = tokens[5];\n if (!easing) {\n easeFn = fallback;\n } else if (\"fn\" in easing && typeof easing.fn === \"function\") {\n easeFn = easing.fn;\n } else if (\"fc\" in easing && typeof easing.fc === \"function\") {\n var args = params ? params.replace(/\\s+/, \"\").split(\",\") : void 0;\n easeFn = easing.fc.apply(easing.fc, args);\n } else {\n easeFn = fallback;\n }\n if (modeFn) {\n easeFn = modeFn(easeFn);\n }\n LOOKUP_CACHE[token] = easeFn;\n return easeFn;\n };\n return Easing2;\n }()\n);\nfunction addMode(name, fn) {\n MODE_BY_NAME[name] = fn;\n}\nfunction addEaseFn(data) {\n var names = data.name.split(/\\s+/);\n for (var i = 0; i < names.length; i++) {\n var key = names[i];\n if (key) {\n EASE_BY_NAME[key] = data;\n }\n }\n}\naddMode(\"in\", function(f) {\n return f;\n});\naddMode(\"out\", function(f) {\n return function(t) {\n return 1 - f(1 - t);\n };\n});\naddMode(\"in-out\", function(f) {\n return function(t) {\n return t < 0.5 ? f(2 * t) / 2 : 1 - f(2 * (1 - t)) / 2;\n };\n});\naddMode(\"out-in\", function(f) {\n return function(t) {\n return t < 0.5 ? 1 - f(2 * (1 - t)) / 2 : f(2 * t) / 2;\n };\n});\naddEaseFn({\n name: \"linear\",\n fn: function(t) {\n return t;\n }\n});\naddEaseFn({\n name: \"quad\",\n fn: function(t) {\n return t * t;\n }\n});\naddEaseFn({\n name: \"cubic\",\n fn: function(t) {\n return t * t * t;\n }\n});\naddEaseFn({\n name: \"quart\",\n fn: function(t) {\n return t * t * t * t;\n }\n});\naddEaseFn({\n name: \"quint\",\n fn: function(t) {\n return t * t * t * t * t;\n }\n});\naddEaseFn({\n name: \"sin sine\",\n fn: function(t) {\n return 1 - Math.cos(t * Math.PI / 2);\n }\n});\naddEaseFn({\n name: \"exp expo\",\n fn: function(t) {\n return t == 0 ? 0 : Math.pow(2, 10 * (t - 1));\n }\n});\naddEaseFn({\n name: \"circle circ\",\n fn: function(t) {\n return 1 - Math.sqrt(1 - t * t);\n }\n});\naddEaseFn({\n name: \"bounce\",\n fn: function(t) {\n return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 : 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n }\n});\naddEaseFn({\n name: \"poly\",\n fc: function(e) {\n return function(t) {\n return Math.pow(t, e);\n };\n }\n});\naddEaseFn({\n name: \"elastic\",\n fc: function(a, p) {\n p = p || 0.45;\n a = a || 1;\n var s = p / (2 * Math.PI) * Math.asin(1 / a);\n return function(t) {\n return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p);\n };\n }\n});\naddEaseFn({\n name: \"back\",\n fc: function(s) {\n s = typeof s !== \"undefined\" ? s : 1.70158;\n return function(t) {\n return t * t * ((s + 1) * t - s);\n };\n }\n});\nvar Transition = (\n /** @class */\n function() {\n function Transition2(owner, options) {\n if (options === void 0) {\n options = {};\n }\n this.uid = \"transition:\" + uid();\n this._ending = [];\n this._end = {};\n this._duration = options.duration || 400;\n this._delay = options.delay || 0;\n this._owner = owner;\n this._time = 0;\n }\n Transition2.prototype.tick = function(node, elapsed, now, last) {\n this._time += elapsed;\n if (this._time < this._delay) {\n return;\n }\n var time = this._time - this._delay;\n if (!this._start) {\n this._start = {};\n for (var key in this._end) {\n this._start[key] = this._owner.pin(key);\n }\n }\n var p = Math.min(time / this._duration, 1);\n var ended = p >= 1;\n if (typeof this._easing == \"function\") {\n p = this._easing(p);\n }\n var q = 1 - p;\n for (var key in this._end) {\n this._owner.pin(key, this._start[key] * q + this._end[key] * p);\n }\n return ended;\n };\n Transition2.prototype.finish = function() {\n var _this = this;\n this._ending.forEach(function(callback) {\n try {\n callback.call(_this._owner);\n } catch (e) {\n console.error(e);\n }\n });\n return this._next;\n };\n Transition2.prototype.tween = function(a, b) {\n var options;\n if (typeof a === \"object\" && a !== null) {\n options = a;\n } else {\n options = {};\n if (typeof a === \"number\") {\n options.duration = a;\n if (typeof b === \"number\") {\n options.delay = b;\n }\n }\n }\n return this._next = new Transition2(this._owner, options);\n };\n Transition2.prototype.duration = function(duration) {\n this._duration = duration;\n return this;\n };\n Transition2.prototype.delay = function(delay) {\n this._delay = delay;\n return this;\n };\n Transition2.prototype.ease = function(easing) {\n this._easing = Easing.get(easing);\n return this;\n };\n Transition2.prototype.done = function(fn) {\n this._ending.push(fn);\n return this;\n };\n Transition2.prototype.hide = function() {\n this._ending.push(function() {\n this.hide();\n });\n this._hide = true;\n return this;\n };\n Transition2.prototype.remove = function() {\n this._ending.push(function() {\n this.remove();\n });\n this._remove = true;\n return this;\n };\n Transition2.prototype.pin = function(a, b) {\n if (typeof a === \"object\") {\n for (var attr in a) {\n pinning(this._owner, this._end, attr, a[attr]);\n }\n } else if (typeof b !== \"undefined\") {\n pinning(this._owner, this._end, a, b);\n }\n return this;\n };\n Transition2.prototype.then = function(fn) {\n this.done(fn);\n return this;\n };\n Transition2.prototype.clear = function(forward) {\n return this;\n };\n Transition2.prototype.size = function(w, h) {\n this.pin(\"width\", w);\n this.pin(\"height\", h);\n return this;\n };\n Transition2.prototype.width = function(w) {\n if (typeof w === \"undefined\") {\n return this.pin(\"width\");\n }\n this.pin(\"width\", w);\n return this;\n };\n Transition2.prototype.height = function(h) {\n if (typeof h === \"undefined\") {\n return this.pin(\"height\");\n }\n this.pin(\"height\", h);\n return this;\n };\n Transition2.prototype.offset = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n }\n this.pin(\"offsetX\", a);\n this.pin(\"offsetY\", b);\n return this;\n };\n Transition2.prototype.rotate = function(a) {\n this.pin(\"rotation\", a);\n return this;\n };\n Transition2.prototype.skew = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\") {\n b = a;\n }\n this.pin(\"skewX\", a);\n this.pin(\"skewY\", b);\n return this;\n };\n Transition2.prototype.scale = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\") {\n b = a;\n }\n this.pin(\"scaleX\", a);\n this.pin(\"scaleY\", b);\n return this;\n };\n Transition2.prototype.alpha = function(a, ta) {\n this.pin(\"alpha\", a);\n if (typeof ta !== \"undefined\") {\n this.pin(\"textureAlpha\", ta);\n }\n return this;\n };\n return Transition2;\n }()\n);\nfunction pinning(node, map, key, value) {\n if (typeof node.pin(key) === \"number\") {\n map[key] = value;\n } else if (typeof node.pin(key + \"X\") === \"number\" && typeof node.pin(key + \"Y\") === \"number\") {\n map[key + \"X\"] = value;\n map[key + \"Y\"] = value;\n }\n}\nvar iid = 0;\nstats.create = 0;\nfunction assertType(obj) {\n if (obj && obj instanceof Node) {\n return obj;\n }\n throw \"Invalid node: \" + obj;\n}\nfunction create() {\n return layout();\n}\nfunction layer() {\n return maximize();\n}\nfunction box() {\n return minimize();\n}\nfunction layout() {\n return new Node();\n}\nfunction row(align) {\n return layout().row(align).label(\"Row\");\n}\nfunction column(align) {\n return layout().column(align).label(\"Column\");\n}\nfunction minimize() {\n return layout().minimize().label(\"Minimize\");\n}\nfunction maximize() {\n return layout().maximize().label(\"Maximize\");\n}\nvar Node = (\n /** @class */\n function() {\n function Node2() {\n var _this = this;\n this.uid = \"node:\" + uid();\n this._label = \"\";\n this._parent = null;\n this._next = null;\n this._prev = null;\n this._first = null;\n this._last = null;\n this._visible = true;\n this._alpha = 1;\n this._padding = 0;\n this._spacing = 0;\n this._pin = new Pin(this);\n this._listeners = {};\n this._attrs = {};\n this._flags = {};\n this._transitions = [];\n this._tickBefore = [];\n this._tickAfter = [];\n this.MAX_ELAPSE = Infinity;\n this._transitionTickInitied = false;\n this._transitionTickLastTime = 0;\n this._transitionTick = function(elapsed, now, last) {\n if (!_this._transitions.length) {\n return false;\n }\n var ignore = _this._transitionTickLastTime !== last;\n _this._transitionTickLastTime = now;\n if (ignore) {\n return true;\n }\n var head = _this._transitions[0];\n var ended = head.tick(_this, elapsed, now, last);\n if (ended) {\n if (head === _this._transitions[0]) {\n _this._transitions.shift();\n }\n var next = head.finish();\n if (next) {\n _this._transitions.unshift(next);\n }\n }\n return true;\n };\n stats.create++;\n }\n Node2.prototype.matrix = function(relative) {\n if (relative === void 0) {\n relative = false;\n }\n if (relative === true) {\n return this._pin.relativeMatrix();\n }\n return this._pin.absoluteMatrix();\n };\n Node2.prototype.getPixelRatio = function() {\n var _a;\n var m = (_a = this._parent) === null || _a === void 0 ? void 0 : _a.matrix();\n var pixelRatio = !m ? 1 : Math.max(Math.abs(m.a), Math.abs(m.b)) / getPixelRatio();\n return pixelRatio;\n };\n Node2.prototype.pin = function(a, b) {\n if (typeof a === \"object\") {\n this._pin.set(a);\n return this;\n } else if (typeof a === \"string\") {\n if (typeof b === \"undefined\") {\n return this._pin.get(a);\n } else {\n this._pin.set(a, b);\n return this;\n }\n } else if (typeof a === \"undefined\") {\n return this._pin;\n }\n };\n Node2.prototype.fit = function(a, b, c) {\n if (typeof a === \"object\") {\n c = b;\n b = a.y;\n a = a.x;\n }\n this._pin.fit(a, b, c);\n return this;\n };\n Node2.prototype.scaleTo = function(a, b, c) {\n return this.fit(a, b, c);\n };\n Node2.prototype.toString = function() {\n return \"[\" + this._label + \"]\";\n };\n Node2.prototype.id = function(id) {\n return this.label(id);\n };\n Node2.prototype.label = function(label) {\n if (typeof label === \"undefined\") {\n return this._label;\n }\n this._label = label;\n return this;\n };\n Node2.prototype.attr = function(name, value) {\n if (typeof value === \"undefined\") {\n return this._attrs !== null ? this._attrs[name] : void 0;\n }\n (this._attrs !== null ? this._attrs : this._attrs = {})[name] = value;\n return this;\n };\n Node2.prototype.visible = function(visible) {\n if (typeof visible === \"undefined\") {\n return this._visible;\n }\n this._visible = visible;\n this._parent && (this._parent._ts_children = ++iid);\n this._ts_pin = ++iid;\n this.touch();\n return this;\n };\n Node2.prototype.hide = function() {\n this.visible(false);\n return this;\n };\n Node2.prototype.show = function() {\n this.visible(true);\n return this;\n };\n Node2.prototype.parent = function() {\n return this._parent;\n };\n Node2.prototype.next = function(visible) {\n var next = this._next;\n while (next && visible && !next._visible) {\n next = next._next;\n }\n return next;\n };\n Node2.prototype.prev = function(visible) {\n var prev = this._prev;\n while (prev && visible && !prev._visible) {\n prev = prev._prev;\n }\n return prev;\n };\n Node2.prototype.first = function(visible) {\n var next = this._first;\n while (next && visible && !next._visible) {\n next = next._next;\n }\n return next;\n };\n Node2.prototype.last = function(visible) {\n var prev = this._last;\n while (prev && visible && !prev._visible) {\n prev = prev._prev;\n }\n return prev;\n };\n Node2.prototype.visit = function(visitor, payload) {\n var reverse = visitor.reverse;\n var visible = visitor.visible;\n if (visitor.start && visitor.start(this, payload)) {\n return;\n }\n var child;\n var next = reverse ? this.last(visible) : this.first(visible);\n while (child = next) {\n next = reverse ? child.prev(visible) : child.next(visible);\n if (child.visit(visitor, payload)) {\n return true;\n }\n }\n return visitor.end && visitor.end(this, payload);\n };\n Node2.prototype.append = function(child, more) {\n if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) {\n Node2.append(this, child[i]);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n Node2.append(this, arguments[i]);\n }\n } else if (typeof child !== \"undefined\")\n Node2.append(this, child);\n return this;\n };\n Node2.prototype.prepend = function(child, more) {\n if (Array.isArray(child)) {\n for (var i = child.length - 1; i >= 0; i--) {\n Node2.prepend(this, child[i]);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = arguments.length - 1; i >= 0; i--) {\n Node2.prepend(this, arguments[i]);\n }\n } else if (typeof child !== \"undefined\")\n Node2.prepend(this, child);\n return this;\n };\n Node2.prototype.appendTo = function(parent) {\n Node2.append(parent, this);\n return this;\n };\n Node2.prototype.prependTo = function(parent) {\n Node2.prepend(parent, this);\n return this;\n };\n Node2.prototype.insertNext = function(sibling, more) {\n if (Array.isArray(sibling)) {\n for (var i = 0; i < sibling.length; i++) {\n Node2.insertAfter(sibling[i], this);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n Node2.insertAfter(arguments[i], this);\n }\n } else if (typeof sibling !== \"undefined\") {\n Node2.insertAfter(sibling, this);\n }\n return this;\n };\n Node2.prototype.insertPrev = function(sibling, more) {\n if (Array.isArray(sibling)) {\n for (var i = sibling.length - 1; i >= 0; i--) {\n Node2.insertBefore(sibling[i], this);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = arguments.length - 1; i >= 0; i--) {\n Node2.insertBefore(arguments[i], this);\n }\n } else if (typeof sibling !== \"undefined\") {\n Node2.insertBefore(sibling, this);\n }\n return this;\n };\n Node2.prototype.insertAfter = function(prev) {\n Node2.insertAfter(this, prev);\n return this;\n };\n Node2.prototype.insertBefore = function(next) {\n Node2.insertBefore(this, next);\n return this;\n };\n Node2.append = function(parent, child) {\n assertType(child);\n assertType(parent);\n child.remove();\n if (parent._last) {\n parent._last._next = child;\n child._prev = parent._last;\n }\n child._parent = parent;\n parent._last = child;\n if (!parent._first) {\n parent._first = child;\n }\n child._parent._flag(child, true);\n child._ts_parent = ++iid;\n parent._ts_children = ++iid;\n parent.touch();\n };\n Node2.prepend = function(parent, child) {\n assertType(child);\n assertType(parent);\n child.remove();\n if (parent._first) {\n parent._first._prev = child;\n child._next = parent._first;\n }\n child._parent = parent;\n parent._first = child;\n if (!parent._last) {\n parent._last = child;\n }\n child._parent._flag(child, true);\n child._ts_parent = ++iid;\n parent._ts_children = ++iid;\n parent.touch();\n };\n Node2.insertBefore = function(self, next) {\n assertType(self);\n assertType(next);\n self.remove();\n var parent = next._parent;\n var prev = next._prev;\n if (!parent) {\n return;\n }\n next._prev = self;\n prev && (prev._next = self) || parent && (parent._first = self);\n self._parent = parent;\n self._prev = prev;\n self._next = next;\n self._parent._flag(self, true);\n self._ts_parent = ++iid;\n self.touch();\n };\n Node2.insertAfter = function(self, prev) {\n assertType(self);\n assertType(prev);\n self.remove();\n var parent = prev._parent;\n var next = prev._next;\n if (!parent) {\n return;\n }\n prev._next = self;\n next && (next._prev = self) || parent && (parent._last = self);\n self._parent = parent;\n self._prev = prev;\n self._next = next;\n self._parent._flag(self, true);\n self._ts_parent = ++iid;\n self.touch();\n };\n Node2.prototype.remove = function(child, more) {\n if (typeof child !== \"undefined\") {\n if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) {\n assertType(child[i]).remove();\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n assertType(arguments[i]).remove();\n }\n } else {\n assertType(child).remove();\n }\n return this;\n }\n if (this._prev) {\n this._prev._next = this._next;\n }\n if (this._next) {\n this._next._prev = this._prev;\n }\n if (this._parent) {\n if (this._parent._first === this) {\n this._parent._first = this._next;\n }\n if (this._parent._last === this) {\n this._parent._last = this._prev;\n }\n this._parent._flag(this, false);\n this._parent._ts_children = ++iid;\n this._parent.touch();\n }\n this._prev = this._next = this._parent = null;\n this._ts_parent = ++iid;\n return this;\n };\n Node2.prototype.empty = function() {\n var child = null;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child._prev = child._next = child._parent = null;\n this._flag(child, false);\n }\n this._first = this._last = null;\n this._ts_children = ++iid;\n this.touch();\n return this;\n };\n Node2.prototype.touch = function() {\n this._ts_touch = ++iid;\n this._parent && this._parent.touch();\n return this;\n };\n Node2.prototype._flag = function(key, value) {\n if (typeof value === \"undefined\") {\n return this._flags !== null && this._flags[key] || 0;\n }\n if (typeof key === \"string\") {\n if (value) {\n this._flags = this._flags || {};\n if (!this._flags[key] && this._parent) {\n this._parent._flag(key, true);\n }\n this._flags[key] = (this._flags[key] || 0) + 1;\n } else if (this._flags && this._flags[key] > 0) {\n if (this._flags[key] == 1 && this._parent) {\n this._parent._flag(key, false);\n }\n this._flags[key] = this._flags[key] - 1;\n }\n }\n if (typeof key === \"object\") {\n if (key._flags) {\n for (var type in key._flags) {\n if (key._flags[type] > 0) {\n this._flag(type, value);\n }\n }\n }\n }\n return this;\n };\n Node2.prototype.hitTest = function(hit) {\n var width = this._pin._width;\n var height = this._pin._height;\n return hit.x >= 0 && hit.x <= width && hit.y >= 0 && hit.y <= height;\n };\n Node2.prototype.prerender = function() {\n if (!this._visible) {\n return;\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child.prerender();\n }\n };\n Node2.prototype.render = function(context) {\n if (!this._visible) {\n return;\n }\n stats.node++;\n var m = this.matrix();\n context.setTransform(m.a, m.b, m.c, m.d, m.e, m.f);\n this._alpha = this._pin._alpha * (this._parent ? this._parent._alpha : 1);\n var alpha = this._pin._textureAlpha * this._alpha;\n if (context.globalAlpha != alpha) {\n context.globalAlpha = alpha;\n }\n if (this._textures) {\n for (var i = 0, n = this._textures.length; i < n; i++) {\n this._textures[i].draw(context);\n }\n }\n if (context.globalAlpha != this._alpha) {\n context.globalAlpha = this._alpha;\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child.render(context);\n }\n };\n Node2.prototype._tick = function(elapsed, now, last) {\n if (!this._visible) {\n return;\n }\n if (elapsed > this.MAX_ELAPSE) {\n elapsed = this.MAX_ELAPSE;\n }\n var ticked = false;\n if (this._tickBefore !== null) {\n for (var i = 0; i < this._tickBefore.length; i++) {\n stats.tick++;\n var tickFn = this._tickBefore[i];\n ticked = tickFn.call(this, elapsed, now, last) === true || ticked;\n }\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n if (child._flag(\"_tick\")) {\n ticked = child._tick(elapsed, now, last) === true ? true : ticked;\n }\n }\n if (this._tickAfter !== null) {\n for (var i = 0; i < this._tickAfter.length; i++) {\n stats.tick++;\n var tickFn = this._tickAfter[i];\n ticked = tickFn.call(this, elapsed, now, last) === true || ticked;\n }\n }\n return ticked;\n };\n Node2.prototype.tick = function(callback, before) {\n var _a, _b;\n if (before === void 0) {\n before = false;\n }\n if (typeof callback !== \"function\") {\n return;\n }\n if (before) {\n if (this._tickBefore === null) {\n this._tickBefore = [];\n }\n this._tickBefore.push(callback);\n } else {\n if (this._tickAfter === null) {\n this._tickAfter = [];\n }\n this._tickAfter.push(callback);\n }\n var hasTickListener = ((_a = this._tickAfter) === null || _a === void 0 ? void 0 : _a.length) > 0 || ((_b = this._tickBefore) === null || _b === void 0 ? void 0 : _b.length) > 0;\n this._flag(\"_tick\", hasTickListener);\n };\n Node2.prototype.untick = function(callback) {\n if (typeof callback !== \"function\") {\n return;\n }\n var i;\n if (this._tickBefore !== null && (i = this._tickBefore.indexOf(callback)) >= 0) {\n this._tickBefore.splice(i, 1);\n }\n if (this._tickAfter !== null && (i = this._tickAfter.indexOf(callback)) >= 0) {\n this._tickAfter.splice(i, 1);\n }\n };\n Node2.prototype.timeout = function(callback, time) {\n this.setTimeout(callback, time);\n };\n Node2.prototype.setTimeout = function(callback, time) {\n function timer(t) {\n if ((time -= t) < 0) {\n this.untick(timer);\n callback.call(this);\n } else {\n return true;\n }\n }\n this.tick(timer);\n return timer;\n };\n Node2.prototype.clearTimeout = function(timer) {\n this.untick(timer);\n };\n Node2.prototype.on = function(type, listener) {\n if (!type || !type.length || typeof listener !== \"function\") {\n return this;\n }\n if (typeof type !== \"string\" && typeof type.join === \"function\") {\n for (var i = 0; i < type.length; i++) {\n this.on(type[i], listener);\n }\n } else if (typeof type === \"string\" && type.indexOf(\" \") > -1) {\n type = type.match(/\\S+/g);\n for (var i = 0; i < type.length; i++) {\n this._on(type[i], listener);\n }\n } else if (typeof type === \"string\") {\n this._on(type, listener);\n } else\n ;\n return this;\n };\n Node2.prototype._on = function(type, listener) {\n if (typeof type !== \"string\" && typeof listener !== \"function\") {\n return;\n }\n this._listeners[type] = this._listeners[type] || [];\n this._listeners[type].push(listener);\n this._flag(type, true);\n };\n Node2.prototype.off = function(type, listener) {\n if (!type || !type.length || typeof listener !== \"function\") {\n return this;\n }\n if (typeof type !== \"string\" && typeof type.join === \"function\") {\n for (var i = 0; i < type.length; i++) {\n this.off(type[i], listener);\n }\n } else if (typeof type === \"string\" && type.indexOf(\" \") > -1) {\n type = type.match(/\\S+/g);\n for (var i = 0; i < type.length; i++) {\n this._off(type[i], listener);\n }\n } else if (typeof type === \"string\") {\n this._off(type, listener);\n } else\n ;\n return this;\n };\n Node2.prototype._off = function(type, listener) {\n if (typeof type !== \"string\" && typeof listener !== \"function\") {\n return;\n }\n var listeners = this._listeners[type];\n if (!listeners || !listeners.length) {\n return;\n }\n var index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n this._flag(type, false);\n }\n };\n Node2.prototype.listeners = function(type) {\n return this._listeners[type];\n };\n Node2.prototype.publish = function(name, args) {\n var 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].apply(this, args);\n }\n return listeners.length;\n };\n Node2.prototype.trigger = function(name, args) {\n this.publish(name, args);\n return this;\n };\n Node2.prototype.size = function(w, h) {\n this.pin(\"width\", w);\n this.pin(\"height\", h);\n return this;\n };\n Node2.prototype.width = function(w) {\n if (typeof w === \"undefined\") {\n return this.pin(\"width\");\n }\n this.pin(\"width\", w);\n return this;\n };\n Node2.prototype.height = function(h) {\n if (typeof h === \"undefined\") {\n return this.pin(\"height\");\n }\n this.pin(\"height\", h);\n return this;\n };\n Node2.prototype.offset = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n }\n this.pin(\"offsetX\", a);\n this.pin(\"offsetY\", b);\n return this;\n };\n Node2.prototype.rotate = function(a) {\n this.pin(\"rotation\", a);\n return this;\n };\n Node2.prototype.skew = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\")\n b = a;\n this.pin(\"skewX\", a);\n this.pin(\"skewY\", b);\n return this;\n };\n Node2.prototype.scale = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\")\n b = a;\n this.pin(\"scaleX\", a);\n this.pin(\"scaleY\", b);\n return this;\n };\n Node2.prototype.alpha = function(a, ta) {\n this.pin(\"alpha\", a);\n if (typeof ta !== \"undefined\") {\n this.pin(\"textureAlpha\", ta);\n }\n return this;\n };\n Node2.prototype.tween = function(a, b, c) {\n var options;\n if (typeof a === \"object\" && a !== null) {\n options = a;\n } else {\n options = {};\n if (typeof a === \"number\") {\n options.duration = a;\n if (typeof b === \"number\") {\n options.delay = b;\n if (typeof c === \"boolean\") {\n options.append = c;\n }\n } else if (typeof b === \"boolean\") {\n options.append = b;\n }\n } else if (typeof a === \"boolean\") {\n options.append = a;\n }\n }\n if (!this._transitionTickInitied) {\n this.tick(this._transitionTick, true);\n this._transitionTickInitied = true;\n }\n this.touch();\n if (!options.append) {\n this._transitions.length = 0;\n }\n var transition = new Transition(this, options);\n this._transitions.push(transition);\n return transition;\n };\n Node2.prototype.row = function(align) {\n this.align(\"row\", align);\n return this;\n };\n Node2.prototype.column = function(align) {\n this.align(\"column\", align);\n return this;\n };\n Node2.prototype.align = function(type, align) {\n var _this = this;\n this._padding = this._padding;\n this._spacing = this._spacing;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n if (_this._mo_seq == _this._ts_touch) {\n return;\n }\n _this._mo_seq = _this._ts_touch;\n var alignChildren = _this._mo_seqAlign != _this._ts_children;\n _this._mo_seqAlign = _this._ts_children;\n var width = 0;\n var height = 0;\n var child;\n var next = _this.first(true);\n var first = true;\n while (child = next) {\n next = child.next(true);\n child.matrix(true);\n var w = child.pin(\"boxWidth\");\n var h = child.pin(\"boxHeight\");\n if (type == \"column\") {\n !first && (height += _this._spacing);\n child.pin(\"offsetY\") != height && child.pin(\"offsetY\", height);\n width = Math.max(width, w);\n height = height + h;\n alignChildren && child.pin(\"alignX\", align);\n } else if (type == \"row\") {\n !first && (width += _this._spacing);\n child.pin(\"offsetX\") != width && child.pin(\"offsetX\", width);\n width = width + w;\n height = Math.max(height, h);\n alignChildren && child.pin(\"alignY\", align);\n }\n first = false;\n }\n width += 2 * _this._padding;\n height += 2 * _this._padding;\n _this.pin(\"width\") != width && _this.pin(\"width\", width);\n _this.pin(\"height\") != height && _this.pin(\"height\", height);\n });\n return this;\n };\n Node2.prototype.box = function() {\n return this.minimize();\n };\n Node2.prototype.layer = function() {\n return this.maximize();\n };\n Node2.prototype.minimize = function() {\n var _this = this;\n this._padding = this._padding;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n if (_this._mo_box == _this._ts_touch) {\n return;\n }\n _this._mo_box = _this._ts_touch;\n var width = 0;\n var height = 0;\n var child;\n var next = _this.first(true);\n while (child = next) {\n next = child.next(true);\n child.matrix(true);\n var w = child.pin(\"boxWidth\");\n var h = child.pin(\"boxHeight\");\n width = Math.max(width, w);\n height = Math.max(height, h);\n }\n width += 2 * _this._padding;\n height += 2 * _this._padding;\n _this.pin(\"width\") != width && _this.pin(\"width\", width);\n _this.pin(\"height\") != height && _this.pin(\"height\", height);\n });\n return this;\n };\n Node2.prototype.maximize = function() {\n var _this = this;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n var parent = _this.parent();\n if (parent) {\n var width = parent.pin(\"width\");\n if (_this.pin(\"width\") != width) {\n _this.pin(\"width\", width);\n }\n var height = parent.pin(\"height\");\n if (_this.pin(\"height\") != height) {\n _this.pin(\"height\", height);\n }\n }\n }, true);\n return this;\n };\n Node2.prototype.padding = function(pad) {\n this._padding = pad;\n return this;\n };\n Node2.prototype.spacing = function(space) {\n this._spacing = space;\n return this;\n };\n return Node2;\n }()\n);\nvar __extends$4 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction sprite(frame) {\n var sprite2 = new Sprite();\n frame && sprite2.texture(frame);\n return sprite2;\n}\nvar Sprite = (\n /** @class */\n function(_super) {\n __extends$4(Sprite2, _super);\n function Sprite2() {\n var _this = _super.call(this) || this;\n _this._tiled = false;\n _this._stretched = false;\n _this.prerenderContext = {};\n _this.label(\"Sprite\");\n _this._textures = [];\n _this._image = null;\n return _this;\n }\n Sprite2.prototype.texture = function(frame) {\n this._image = texture(frame).one();\n if (this._image) {\n this.pin(\"width\", this._image.getWidth());\n this.pin(\"height\", this._image.getHeight());\n if (this._tiled) {\n this._textures[0] = new ResizableTexture(this._image, \"tile\");\n } else if (this._stretched) {\n this._textures[0] = new ResizableTexture(this._image, \"stretch\");\n } else {\n this._textures[0] = new PipeTexture(this._image);\n }\n this._textures.length = 1;\n } else {\n this.pin(\"width\", 0);\n this.pin(\"height\", 0);\n this._textures.length = 0;\n }\n return this;\n };\n Sprite2.prototype.image = function(frame) {\n return this.texture(frame);\n };\n Sprite2.prototype.tile = function(inner) {\n this._tiled = true;\n var texture2 = new ResizableTexture(this._image, \"tile\");\n this._textures[0] = texture2;\n return this;\n };\n Sprite2.prototype.stretch = function(inner) {\n this._stretched = true;\n var texture2 = new ResizableTexture(this._image, \"stretch\");\n this._textures[0] = texture2;\n return this;\n };\n Sprite2.prototype.prerender = function() {\n if (!this._visible) {\n return;\n }\n if (this._image) {\n var pixelRatio = this.getPixelRatio();\n this.prerenderContext.pixelRatio = pixelRatio;\n var updated = this._image.prerender(this.prerenderContext);\n if (updated === true) {\n var w = this._image.getWidth();\n var h = this._image.getHeight();\n this.size(w, h);\n }\n }\n _super.prototype.prerender.call(this);\n };\n Sprite2.prototype.render = function(context) {\n var texture2 = this._textures[0];\n if (texture2 === null || texture2 === void 0 ? void 0 : texture2[\"_resizeMode\"]) {\n texture2.dw = this.pin(\"width\");\n texture2.dh = this.pin(\"height\");\n }\n _super.prototype.render.call(this, context);\n };\n return Sprite2;\n }(Node)\n);\nvar image = sprite;\nvar Image$1 = Sprite;\nvar __extends$3 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar CanvasTexture = (\n /** @class */\n function(_super) {\n __extends$3(CanvasTexture2, _super);\n function CanvasTexture2() {\n var _this = _super.call(this, document.createElement(\"canvas\")) || this;\n _this._lastPixelRatio = 0;\n return _this;\n }\n CanvasTexture2.prototype.setSize = function(textureWidth, textureHeight, pixelRatio) {\n if (pixelRatio === void 0) {\n pixelRatio = 1;\n }\n this._source.width = textureWidth * pixelRatio;\n this._source.height = textureHeight * pixelRatio;\n this._pixelRatio = pixelRatio;\n };\n CanvasTexture2.prototype.getContext = function(type, attributes) {\n if (type === void 0) {\n type = \"2d\";\n }\n return this._source.getContext(type, attributes);\n };\n CanvasTexture2.prototype.getOptimalPixelRatio = function() {\n return Math.ceil(this._lastPixelRatio);\n };\n CanvasTexture2.prototype.setMemoizer = function(memoizer) {\n this._memoizer = memoizer;\n };\n CanvasTexture2.prototype.setDrawer = function(drawer) {\n this._drawer = drawer;\n };\n CanvasTexture2.prototype.prerender = function(context) {\n var newPixelRatio = context.pixelRatio;\n var lastPixelRatio = this._lastPixelRatio;\n var pixelRationChange = lastPixelRatio / newPixelRatio;\n var pixelRatioChanged = lastPixelRatio === 0 || pixelRationChange > 1.25 || pixelRationChange < 0.8;\n if (pixelRatioChanged) {\n this._lastPixelRatio = newPixelRatio;\n }\n var newMemoKey = this._memoizer ? this._memoizer.call(this) : null;\n var memoKeyChanged = this._lastMemoKey !== newMemoKey;\n if (pixelRatioChanged || memoKeyChanged) {\n this._lastMemoKey = newMemoKey;\n this._lastPixelRatio = newPixelRatio;\n if (typeof this._drawer === \"function\") {\n this._drawer.call(this);\n }\n return true;\n }\n };\n CanvasTexture2.prototype.size = function(width, height, pixelRatio) {\n this.setSize(width, height, pixelRatio);\n return this;\n };\n CanvasTexture2.prototype.context = function(type, attributes) {\n if (type === void 0) {\n type = \"2d\";\n }\n return this.getContext(type, attributes);\n };\n CanvasTexture2.prototype.canvas = function(legacyTextureDrawer) {\n if (typeof legacyTextureDrawer === \"function\") {\n legacyTextureDrawer.call(this, this.getContext());\n } else if (typeof legacyTextureDrawer === \"undefined\") {\n if (typeof this._drawer === \"function\") {\n this._drawer.call(this);\n }\n }\n return this;\n };\n return CanvasTexture2;\n }(ImageTexture)\n);\nfunction canvas(type, attributes, legacyTextureDrawer) {\n if (typeof type === \"function\") {\n var texture_1 = new CanvasTexture();\n legacyTextureDrawer = type;\n texture_1.setDrawer(function() {\n legacyTextureDrawer.call(texture_1, texture_1.getContext());\n });\n return texture_1;\n } else if (typeof attributes === \"function\") {\n var texture_2 = new CanvasTexture();\n legacyTextureDrawer = attributes;\n texture_2.setDrawer(function() {\n legacyTextureDrawer.call(texture_2, texture_2.getContext(type));\n });\n return texture_2;\n } else if (typeof legacyTextureDrawer === \"function\") {\n var texture_3 = new CanvasTexture();\n texture_3.setDrawer(function() {\n legacyTextureDrawer.call(texture_3, texture_3.getContext(type, attributes));\n });\n return texture_3;\n } else {\n var texture2 = new CanvasTexture();\n return texture2;\n }\n}\nfunction memoizeDraw(legacySpriteDrawer, legacySpriteMemoizer) {\n if (legacySpriteMemoizer === void 0) {\n legacySpriteMemoizer = function() {\n return null;\n };\n }\n var sprite2 = new Sprite();\n var texture2 = new CanvasTexture();\n sprite2.texture(texture2);\n texture2.setDrawer(function() {\n legacySpriteDrawer(2.5 * texture2._lastPixelRatio, texture2, sprite2);\n });\n texture2.setMemoizer(legacySpriteMemoizer);\n return sprite2;\n}\nvar POINTER_CLICK = \"click\";\nvar POINTER_START = \"touchstart mousedown\";\nvar POINTER_MOVE = \"touchmove mousemove\";\nvar POINTER_END = \"touchend mouseup\";\nvar POINTER_CANCEL = \"touchcancel mousecancel\";\nvar EventPoint = (\n /** @class */\n function() {\n function EventPoint2() {\n }\n EventPoint2.prototype.clone = function(obj) {\n if (obj) {\n obj.x = this.x;\n obj.y = this.y;\n } else {\n obj = {\n x: this.x,\n y: this.y\n };\n }\n return obj;\n };\n EventPoint2.prototype.toString = function() {\n return (this.x | 0) + \"x\" + (this.y | 0);\n };\n return EventPoint2;\n }()\n);\nvar PointerSyntheticEvent = (\n /** @class */\n function() {\n function PointerSyntheticEvent2() {\n this.abs = new EventPoint();\n }\n PointerSyntheticEvent2.prototype.clone = function(obj) {\n if (obj) {\n obj.x = this.x;\n obj.y = this.y;\n } else {\n obj = {\n x: this.x,\n y: this.y\n };\n }\n return obj;\n };\n PointerSyntheticEvent2.prototype.toString = function() {\n return this.type + \": \" + (this.x | 0) + \"x\" + (this.y | 0);\n };\n return PointerSyntheticEvent2;\n }()\n);\nvar VisitPayload = (\n /** @class */\n function() {\n function VisitPayload2() {\n this.type = \"\";\n this.x = 0;\n this.y = 0;\n this.timeStamp = -1;\n this.event = null;\n this.root = null;\n this.collected = null;\n }\n VisitPayload2.prototype.toString = function() {\n return this.type + \": \" + (this.x | 0) + \"x\" + (this.y | 0);\n };\n return VisitPayload2;\n }()\n);\nvar syntheticEvent = new PointerSyntheticEvent();\nvar PAYLOAD = new VisitPayload();\nvar Pointer = (\n /** @class */\n function() {\n function Pointer2() {\n var _this = this;\n this.ratio = 1;\n this.clickList = [];\n this.cancelList = [];\n this.handleStart = function(event) {\n event.preventDefault();\n _this.localPoint(event);\n _this.dispatchEvent(event.type, event);\n _this.findTargets(\"click\", _this.clickList);\n _this.findTargets(\"mousecancel\", _this.cancelList);\n };\n this.handleMove = function(event) {\n event.preventDefault();\n _this.localPoint(event);\n _this.dispatchEvent(event.type, event);\n };\n this.handleEnd = function(event) {\n event.preventDefault();\n _this.dispatchEvent(event.type, event);\n if (_this.clickList.length) {\n _this.dispatchEvent(\"click\", event, _this.clickList);\n }\n _this.cancelList.length = 0;\n };\n this.handleCancel = function(event) {\n if (_this.cancelList.length) {\n _this.dispatchEvent(\"mousecancel\", event, _this.cancelList);\n }\n _this.clickList.length = 0;\n };\n this.visitStart = function(node, payload) {\n return !node._flag(payload.type);\n };\n this.visitEnd = function(node, payload) {\n syntheticEvent.raw = payload.event;\n syntheticEvent.type = payload.type;\n syntheticEvent.timeStamp = payload.timeStamp;\n syntheticEvent.abs.x = payload.x;\n syntheticEvent.abs.y = payload.y;\n var listeners = node.listeners(payload.type);\n if (!listeners) {\n return;\n }\n node.matrix().inverse().map(payload, syntheticEvent);\n var isEventTarget = node === payload.root || node.attr(\"spy\") || node.hitTest(syntheticEvent);\n if (!isEventTarget) {\n return;\n }\n if (payload.collected) {\n payload.collected.push(node);\n }\n if (payload.event) {\n var cancel = false;\n for (var l = 0; l < listeners.length; l++) {\n cancel = listeners[l].call(node, syntheticEvent) ? true : cancel;\n }\n return cancel;\n }\n };\n }\n Pointer2.prototype.mount = function(stage, elem) {\n var _this = this;\n this.stage = stage;\n this.elem = elem;\n this.ratio = stage.viewport().ratio || 1;\n stage.on(\"viewport\", function(viewport) {\n var _a;\n _this.ratio = (_a = viewport.ratio) !== null && _a !== void 0 ? _a : _this.ratio;\n });\n elem.addEventListener(\"touchstart\", this.handleStart);\n elem.addEventListener(\"touchend\", this.handleEnd);\n elem.addEventListener(\"touchmove\", this.handleMove);\n elem.addEventListener(\"touchcancel\", this.handleCancel);\n elem.addEventListener(\"mousedown\", this.handleStart);\n elem.addEventListener(\"mouseup\", this.handleEnd);\n elem.addEventListener(\"mousemove\", this.handleMove);\n document.addEventListener(\"mouseup\", this.handleCancel);\n window.addEventListener(\"blur\", this.handleCancel);\n return this;\n };\n Pointer2.prototype.unmount = function() {\n var elem = this.elem;\n elem.removeEventListener(\"touchstart\", this.handleStart);\n elem.removeEventListener(\"touchend\", this.handleEnd);\n elem.removeEventListener(\"touchmove\", this.handleMove);\n elem.removeEventListener(\"touchcancel\", this.handleCancel);\n elem.removeEventListener(\"mousedown\", this.handleStart);\n elem.removeEventListener(\"mouseup\", this.handleEnd);\n elem.removeEventListener(\"mousemove\", this.handleMove);\n document.removeEventListener(\"mouseup\", this.handleCancel);\n window.removeEventListener(\"blur\", this.handleCancel);\n return this;\n };\n Pointer2.prototype.localPoint = function(event) {\n var _a;\n var elem = this.elem;\n var x;\n var y;\n if ((_a = event.touches) === null || _a === void 0 ? void 0 : _a.length) {\n x = event.touches[0].clientX;\n y = event.touches[0].clientY;\n } else {\n x = event.clientX;\n y = event.clientY;\n }\n var rect = elem.getBoundingClientRect();\n x -= rect.left;\n y -= rect.top;\n x -= elem.clientLeft | 0;\n y -= elem.clientTop | 0;\n PAYLOAD.x = x * this.ratio;\n PAYLOAD.y = y * this.ratio;\n };\n Pointer2.prototype.findTargets = function(type, result) {\n var payload = PAYLOAD;\n payload.type = type;\n payload.root = this.stage;\n payload.event = null;\n payload.collected = result;\n payload.collected.length = 0;\n this.stage.visit({\n reverse: true,\n visible: true,\n start: this.visitStart,\n end: this.visitEnd\n }, payload);\n };\n Pointer2.prototype.dispatchEvent = function(type, event, targets) {\n var payload = PAYLOAD;\n payload.type = type;\n payload.root = this.stage;\n payload.event = event;\n payload.timeStamp = Date.now();\n payload.collected = null;\n if (targets) {\n while (targets.length) {\n var node = targets.shift();\n if (this.visitEnd(node, payload)) {\n break;\n }\n }\n targets.length = 0;\n } else {\n this.stage.visit({\n reverse: true,\n visible: true,\n start: this.visitStart,\n end: this.visitEnd\n }, payload);\n }\n };\n return Pointer2;\n }()\n);\nvar Mouse = {\n CLICK: \"click\",\n START: \"touchstart mousedown\",\n MOVE: \"touchmove mousemove\",\n END: \"touchend mouseup\",\n CANCEL: \"touchcancel mousecancel\"\n};\nvar __extends$2 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __assign = function() {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar ROOTS = [];\nfunction pause() {\n for (var i = ROOTS.length - 1; i >= 0; i--) {\n ROOTS[i].pause();\n }\n}\nfunction resume() {\n for (var i = ROOTS.length - 1; i >= 0; i--) {\n ROOTS[i].resume();\n }\n}\nfunction mount(configs) {\n if (configs === void 0) {\n configs = {};\n }\n var root = new Root();\n root.mount(configs);\n root.pointer = new Pointer().mount(root, root.dom);\n return root;\n}\nvar Root = (\n /** @class */\n function(_super) {\n __extends$2(Root2, _super);\n function Root2() {\n var _this = _super.call(this) || this;\n _this.canvas = null;\n _this.dom = null;\n _this.context = null;\n _this.pixelWidth = -1;\n _this.pixelHeight = -1;\n _this.pixelRatio = 1;\n _this.drawingWidth = 0;\n _this.drawingHeight = 0;\n _this.mounted = false;\n _this.paused = false;\n _this.sleep = false;\n _this.mount = function(configs) {\n if (configs === void 0) {\n configs = {};\n }\n if (typeof configs.canvas === \"string\") {\n _this.canvas = document.getElementById(configs.canvas);\n if (!_this.canvas) {\n console.error(\"Canvas element not found: \", configs.canvas);\n }\n } else if (configs.canvas instanceof HTMLCanvasElement) {\n _this.canvas = configs.canvas;\n } else if (configs.canvas) {\n console.error(\"Unknown value for canvas:\", configs.canvas);\n }\n if (!_this.canvas) {\n _this.canvas = document.getElementById(\"cutjs\") || document.getElementById(\"stage\");\n }\n if (!_this.canvas) {\n _this.canvas = document.createElement(\"canvas\");\n Object.assign(_this.canvas.style, {\n position: \"absolute\",\n display: \"block\",\n top: \"0\",\n left: \"0\",\n bottom: \"0\",\n right: \"0\",\n width: \"100%\",\n height: \"100%\"\n });\n var body = document.body;\n body.insertBefore(_this.canvas, body.firstChild);\n }\n _this.dom = _this.canvas;\n _this.context = _this.canvas.getContext(\"2d\");\n var devicePixelRatio = window.devicePixelRatio || 1;\n var backingStorePixelRatio = (\n // @ts-ignore\n _this.context.webkitBackingStorePixelRatio || // @ts-ignore\n _this.context.mozBackingStorePixelRatio || // @ts-ignore\n _this.context.msBackingStorePixelRatio || // @ts-ignore\n _this.context.oBackingStorePixelRatio || // @ts-ignore\n _this.context.backingStorePixelRatio || 1\n );\n _this.devicePixelRatio = devicePixelRatio;\n _this.backingStoreRatio = backingStorePixelRatio;\n _this.pixelRatio = _this.devicePixelRatio / _this.backingStoreRatio;\n _this.mounted = true;\n ROOTS.push(_this);\n _this.requestFrame();\n };\n _this.frameRequested = false;\n _this.requestFrame = function() {\n if (!_this.frameRequested) {\n _this.frameRequested = true;\n requestAnimationFrame(_this.onFrame);\n }\n };\n _this._lastFrameTime = 0;\n _this._mo_touch = null;\n _this.onFrame = function(now) {\n _this.frameRequested = false;\n if (!_this.mounted || !_this.canvas || !_this.context) {\n return;\n }\n _this.requestFrame();\n var newPixelWidth = _this.canvas.clientWidth;\n var newPixelHeight = _this.canvas.clientHeight;\n if (_this.pixelWidth !== newPixelWidth || _this.pixelHeight !== newPixelHeight) {\n _this.pixelWidth = newPixelWidth;\n _this.pixelHeight = newPixelHeight;\n _this.drawingWidth = newPixelWidth * _this.pixelRatio;\n _this.drawingHeight = newPixelHeight * _this.pixelRatio;\n if (_this.canvas.width !== _this.drawingWidth || _this.canvas.height !== _this.drawingHeight) {\n _this.canvas.width = _this.drawingWidth;\n _this.canvas.height = _this.drawingHeight;\n _this.viewport({\n width: _this.drawingWidth,\n height: _this.drawingHeight,\n ratio: _this.pixelRatio\n });\n }\n }\n var last = _this._lastFrameTime || now;\n var elapsed = now - last;\n if (!_this.mounted || _this.paused || _this.sleep) {\n return;\n }\n _this._lastFrameTime = now;\n _this.prerender();\n var tickRequest = _this._tick(elapsed, now, last);\n if (_this._mo_touch != _this._ts_touch) {\n _this._mo_touch = _this._ts_touch;\n _this.sleep = false;\n if (_this.drawingWidth > 0 && _this.drawingHeight > 0) {\n _this.context.setTransform(1, 0, 0, 1, 0, 0);\n _this.context.clearRect(0, 0, _this.drawingWidth, _this.drawingHeight);\n _this.render(_this.context);\n }\n } else if (tickRequest) {\n _this.sleep = false;\n } else {\n _this.sleep = true;\n }\n stats.fps = elapsed ? 1e3 / elapsed : 0;\n };\n _this.label(\"Root\");\n return _this;\n }\n Root2.prototype.resume = function() {\n if (this.sleep || this.paused) {\n this.requestFrame();\n }\n this.paused = false;\n this.sleep = false;\n this.publish(\"resume\");\n return this;\n };\n Root2.prototype.pause = function() {\n if (!this.paused) {\n this.publish(\"pause\");\n }\n this.paused = true;\n return this;\n };\n Root2.prototype.touch = function() {\n if (this.sleep || this.paused) {\n this.requestFrame();\n }\n this.sleep = false;\n return _super.prototype.touch.call(this);\n };\n Root2.prototype.unmount = function() {\n var _a;\n this.mounted = false;\n var index = ROOTS.indexOf(this);\n if (index >= 0) {\n ROOTS.splice(index, 1);\n }\n (_a = this.pointer) === null || _a === void 0 ? void 0 : _a.unmount();\n return this;\n };\n Root2.prototype.background = function(color) {\n if (this.dom) {\n this.dom.style.backgroundColor = color;\n }\n return this;\n };\n Root2.prototype.viewport = function(width, height, ratio) {\n if (typeof width === \"undefined\") {\n return Object.assign({}, this._viewport);\n }\n if (typeof width === \"object\") {\n var options = width;\n width = options.width;\n height = options.height;\n ratio = options.ratio;\n }\n if (typeof width === \"number\" && typeof height === \"number\") {\n this._viewport = {\n width,\n height,\n ratio: typeof ratio === \"number\" ? ratio : 1\n };\n this.viewbox();\n var data_1 = Object.assign({}, this._viewport);\n this.visit({\n start: function(node) {\n if (!node._flag(\"viewport\")) {\n return true;\n }\n node.publish(\"viewport\", [data_1]);\n }\n });\n }\n return this;\n };\n Root2.prototype.viewbox = function(width, height, mode) {\n if (typeof width === \"number\" && typeof height === \"number\") {\n this._viewbox = {\n width,\n height,\n mode\n };\n } else if (typeof width === \"object\" && width !== null) {\n this._viewbox = __assign({}, width);\n }\n this.rescale();\n return this;\n };\n Root2.prototype.camera = function(matrix) {\n this._camera = matrix;\n this.rescale();\n return this;\n };\n Root2.prototype.rescale = function() {\n var viewbox = this._viewbox;\n var viewport = this._viewport;\n var camera = this._camera;\n if (viewport && viewbox) {\n var viewportWidth = viewport.width;\n var viewportHeight = viewport.height;\n var viewboxMode = isValidFitMode(viewbox.mode) ? viewbox.mode : \"in-pad\";\n var viewboxWidth = viewbox.width;\n var viewboxHeight = viewbox.height;\n this.pin({\n width: viewboxWidth,\n height: viewboxHeight\n });\n this.scaleTo(viewportWidth, viewportHeight, viewboxMode);\n var viewboxX = viewbox.x || 0;\n var viewboxY = viewbox.y || 0;\n var cameraZoom = (camera === null || camera === void 0 ? void 0 : camera.a) || 1;\n var cameraX = (camera === null || camera === void 0 ? void 0 : camera.e) || 0;\n var cameraY = (camera === null || camera === void 0 ? void 0 : camera.f) || 0;\n var scaleX = this.pin(\"scaleX\");\n var scaleY = this.pin(\"scaleY\");\n this.pin(\"scaleX\", scaleX * cameraZoom);\n this.pin(\"scaleY\", scaleY * cameraZoom);\n this.pin(\"offsetX\", cameraX - viewboxX * scaleX * cameraZoom);\n this.pin(\"offsetY\", cameraY - viewboxY * scaleY * cameraZoom);\n } else if (viewport) {\n this.pin({\n width: viewport.width,\n height: viewport.height\n });\n }\n return this;\n };\n return Root2;\n }(Node)\n);\nvar __extends$1 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction anim(frames, fps) {\n var anim2 = new Anim();\n anim2.frames(frames).gotoFrame(0);\n fps && anim2.fps(fps);\n return anim2;\n}\nvar FPS = 15;\nvar Anim = (\n /** @class */\n function(_super) {\n __extends$1(Anim2, _super);\n function Anim2() {\n var _this = _super.call(this) || this;\n _this.label(\"Anim\");\n _this._textures = [];\n _this._fps = FPS;\n _this._ft = 1e3 / _this._fps;\n _this._time = -1;\n _this._repeat = 0;\n _this._index = 0;\n _this._frames = [];\n var lastTime = 0;\n _this.tick(function(t, now, last) {\n if (this._time < 0 || this._frames.length <= 1) {\n return;\n }\n var ignore = lastTime != last;\n lastTime = now;\n if (ignore) {\n return true;\n }\n this._time += t;\n if (this._time < this._ft) {\n return true;\n }\n var n = this._time / this._ft | 0;\n this._time -= n * this._ft;\n this.moveFrame(n);\n if (this._repeat > 0 && (this._repeat -= n) <= 0) {\n this.stop();\n this._callback && this._callback();\n return false;\n }\n return true;\n }, false);\n return _this;\n }\n Anim2.prototype.fps = function(fps) {\n if (typeof fps === \"undefined\") {\n return this._fps;\n }\n this._fps = fps > 0 ? fps : FPS;\n this._ft = 1e3 / this._fps;\n return this;\n };\n Anim2.prototype.setFrames = function(frames) {\n return this.frames(frames);\n };\n Anim2.prototype.frames = function(frames) {\n this._index = 0;\n this._frames = texture(frames).array();\n this.touch();\n return this;\n };\n Anim2.prototype.length = function() {\n return this._frames ? this._frames.length : 0;\n };\n Anim2.prototype.gotoFrame = function(frame, resize) {\n if (resize === void 0) {\n resize = false;\n }\n this._index = math.wrap(frame, this._frames.length) | 0;\n resize = resize || !this._textures[0];\n this._textures[0] = this._frames[this._index];\n if (resize) {\n this.pin(\"width\", this._textures[0].getWidth());\n this.pin(\"height\", this._textures[0].getHeight());\n }\n this.touch();\n return this;\n };\n Anim2.prototype.moveFrame = function(move) {\n return this.gotoFrame(this._index + move);\n };\n Anim2.prototype.repeat = function(repeat, callback) {\n this._repeat = repeat * this._frames.length - 1;\n this._callback = callback;\n this.play();\n return this;\n };\n Anim2.prototype.play = function(frame) {\n if (typeof frame !== \"undefined\") {\n this.gotoFrame(frame);\n this._time = 0;\n } else if (this._time < 0) {\n this._time = 0;\n }\n this.touch();\n return this;\n };\n Anim2.prototype.stop = function(frame) {\n this._time = -1;\n if (typeof frame !== \"undefined\") {\n this.gotoFrame(frame);\n }\n return this;\n };\n return Anim2;\n }(Node)\n);\nvar __extends = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction monotype(chars) {\n return new Monotype().frames(chars);\n}\nvar Monotype = (\n /** @class */\n function(_super) {\n __extends(Monotype2, _super);\n function Monotype2() {\n var _this = _super.call(this) || this;\n _this.label(\"String\");\n _this._textures = [];\n return _this;\n }\n Monotype2.prototype.setFont = function(frames) {\n return this.frames(frames);\n };\n Monotype2.prototype.frames = function(frames) {\n this._textures = [];\n if (typeof frames == \"string\") {\n var selection_1 = texture(frames);\n this._font = function(value) {\n return selection_1.one(value);\n };\n } else if (typeof frames === \"object\") {\n this._font = function(value) {\n return frames[value];\n };\n } else if (typeof frames === \"function\") {\n this._font = frames;\n }\n return this;\n };\n Monotype2.prototype.setValue = function(value) {\n return this.value(value);\n };\n Monotype2.prototype.value = function(value) {\n if (typeof value === \"undefined\") {\n return this._value;\n }\n if (this._value === value) {\n return this;\n }\n this._value = value;\n if (value === null) {\n value = \"\";\n } else if (typeof value !== \"string\" && !Array.isArray(value)) {\n value = value.toString();\n }\n this._spacing = this._spacing || 0;\n var width = 0;\n var height = 0;\n for (var i = 0; i < value.length; i++) {\n var v = value[i];\n var texture_1 = this._textures[i] = this._font(typeof v === \"string\" ? v : v + \"\");\n width += i > 0 ? this._spacing : 0;\n texture_1.setDestinationCoordinate(width, 0);\n width = width + texture_1.getWidth();\n height = Math.max(height, texture_1.getHeight());\n }\n this.pin(\"width\", width);\n this.pin(\"height\", height);\n this._textures.length = value.length;\n return this;\n };\n return Monotype2;\n }(Node)\n);\nvar string = monotype;\nvar Str = Monotype;\nconst Stage = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n Anim,\n Atlas,\n CanvasTexture,\n Image: Image$1,\n ImageTexture,\n Math: math,\n Matrix,\n Monotype,\n Mouse,\n Node,\n POINTER_CANCEL,\n POINTER_CLICK,\n POINTER_END,\n POINTER_MOVE,\n POINTER_START,\n Pin,\n PipeTexture,\n Pointer,\n ResizableTexture,\n Root,\n Sprite,\n Str,\n Texture,\n TextureSelection,\n Transition,\n anim,\n atlas,\n box,\n canvas,\n clamp,\n column,\n create,\n image,\n isValidFitMode,\n layer,\n layout,\n length,\n math,\n maximize,\n memoizeDraw,\n minimize,\n monotype,\n mount,\n pause,\n random,\n resume,\n row,\n sprite,\n string,\n texture,\n wrap\n}, Symbol.toStringTag, { value: \"Module\" }));\nexport {\n Anim,\n Atlas,\n CanvasTexture,\n Image$1 as Image,\n ImageTexture,\n math as Math,\n Matrix,\n Monotype,\n Mouse,\n Node,\n POINTER_CANCEL,\n POINTER_CLICK,\n POINTER_END,\n POINTER_MOVE,\n POINTER_START,\n Pin,\n PipeTexture,\n Pointer,\n ResizableTexture,\n Root,\n Sprite,\n Str,\n Texture,\n TextureSelection,\n Transition,\n anim,\n atlas,\n box,\n canvas,\n clamp,\n column,\n create,\n Stage as default,\n image,\n isValidFitMode,\n layer,\n layout,\n length,\n math,\n maximize,\n memoizeDraw,\n minimize,\n monotype,\n mount,\n pause,\n random,\n resume,\n row,\n sprite,\n string,\n texture,\n wrap\n};\n","import * as Stage from \"stage-js\";\n\nimport type { Vec2Value } from \"../src/common/Vec2\";\nimport type { World } from \"../src/dynamics/World\";\nimport type { Joint } from \"../src/dynamics/Joint\";\nimport type { Fixture } from \"../src/dynamics/Fixture\";\nimport type { Body } from \"../src/dynamics/Body\";\nimport type { AABBValue } from \"../src/collision/AABB\";\nimport type { Style } from \"../src/util/Testbed\";\nimport { Testbed } from \"../src/util/Testbed\";\nimport type { EdgeShape } from \"../src/collision/shape/EdgeShape\";\nimport type { PolygonShape } from \"../src/collision/shape/PolygonShape\";\nimport type { ChainShape } from \"../src/collision/shape/ChainShape\";\nimport type { CircleShape } from \"../src/collision/shape/CircleShape\";\nimport type { PulleyJoint } from \"../src/dynamics/joint/PulleyJoint\";\nimport { MouseJoint } from \"../src/dynamics/joint/MouseJoint\";\n\nconst math_atan2 = Math.atan2;\nconst math_abs = Math.abs;\nconst math_sqrt = Math.sqrt;\nconst math_PI = Math.PI;\nconst math_max = Math.max;\nconst math_min = Math.min;\n\n\nlet mounted: StageTestbed | null = null;\n\n/** @internal */\nfunction memo() {\n const memory: any = [];\n function recall(...rest: any[]) {\n let equal = memory.length === rest.length;\n for (let i = 0; equal && i < rest.length; i++) {\n equal = equal && memory[i] === rest[i];\n memory[i] = rest[i];\n }\n memory.length = rest.length;\n return equal;\n }\n function reset() {\n memory.length = 0;\n // void 0;\n }\n return {\n recall,\n reset,\n };\n}\n\nTestbed.mount = () => {\n if (mounted) {\n return mounted;\n }\n\n mounted = new StageTestbed();\n\n // todo: merge rest of this into StageTestbed\n\n // todo: should we create these elements if not exists?\n const playButton = document.getElementById(\"testbed-play\");\n const statusElement = document.getElementById(\"testbed-status\");\n const infoElement = document.getElementById(\"testbed-info\");\n\n if (playButton) {\n playButton.addEventListener(\"click\", () => {\n mounted.isPaused() ? mounted.resume() : mounted.pause();\n });\n\n mounted._pause = () => {\n playButton.classList.add(\"pause\");\n playButton.classList.remove(\"play\");\n };\n\n mounted._resume = () => {\n playButton.classList.add(\"play\");\n playButton.classList.remove(\"pause\");\n };\n } else {\n console.log(\"Please create a button with id='testbed-play'\");\n }\n\n let lastStatus = \"\";\n if (statusElement) {\n statusElement.innerText = lastStatus;\n }\n mounted._status = (text: string) => {\n if (lastStatus === text) {\n return;\n }\n lastStatus = text;\n if (statusElement) {\n statusElement.innerText = text;\n }\n };\n\n let lastInfo = \"\";\n if (infoElement) {\n infoElement.innerText = lastInfo;\n }\n mounted._info = (text: string) => {\n if (lastInfo === text) {\n return;\n }\n lastInfo = text;\n if (infoElement) {\n infoElement.innerText = text;\n }\n };\n\n return mounted;\n};\n\nconst getStyle = function(obj: Body | Fixture | Joint): Style {\n return obj[\"render\"] ?? obj[\"style\"] ?? {};\n};\n\nfunction findBody(world: World, point: Vec2Value) {\n let body: Body | null = null;\n const aabb = {\n lowerBound: point,\n upperBound: point,\n };\n world.queryAABB(aabb, (fixture: Fixture) => {\n if (!fixture.getBody().isDynamic() || !fixture.testPoint(point)) {\n return true;\n }\n body = fixture.getBody();\n return false;\n });\n return body;\n}\n\n/** @internal */\nexport class StageTestbed extends Testbed {\n private canvas: HTMLCanvasElement;\n private stage: Stage.Root;\n private paused: boolean = false;\n private lastDrawHash = \"\";\n private newDrawHash = \"\";\n private buffer: ((context: CanvasRenderingContext2D, ratio: number)=> void)[] = [];\n\n start(world: World) {\n const stage = this.stage = Stage.mount();\n const canvas = this.canvas = stage.dom as HTMLCanvasElement;\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const testbed = this;\n this.canvas = canvas;\n\n stage.on(Stage.POINTER_START, () => {\n window.focus();\n // @ts-ignore\n document.activeElement?.blur();\n canvas.focus();\n });\n\n stage.MAX_ELAPSE = 1000 / 30;\n\n stage.on(\"resume\", () => {\n this.paused = false;\n this._resume();\n });\n stage.on(\"pause\", () => {\n this.paused = true;\n this._pause();\n });\n\n const drawingTexture = new Stage.CanvasTexture();\n drawingTexture.draw = (ctx: CanvasRenderingContext2D) => {\n const pixelRatio = 2 * drawingTexture.getOptimalPixelRatio();\n ctx.save();\n ctx.transform(1, 0, 0, this.scaleY, -this.x, -this.y);\n ctx.lineWidth = 3 / pixelRatio;\n ctx.lineCap = \"round\";\n for (let drawing = this.buffer.shift(); drawing; drawing = this.buffer.shift()) {\n drawing(ctx, pixelRatio);\n }\n ctx.restore();\n };\n\n const drawingElement = Stage.sprite(drawingTexture);\n stage.append(drawingElement);\n stage.tick(() => {\n this.buffer.length = 0;\n }, true);\n\n\n stage.background(this.background);\n stage.viewbox(this.width, this.height);\n stage.pin(\"alignX\", -0.5);\n stage.pin(\"alignY\", -0.5);\n\n const worldNode = new WorldStageNode(world, this);\n\n // stage.empty();\n stage.prepend(worldNode);\n\n let lastX = 0;\n let lastY = 0;\n stage.tick((dt: number, t: number) => {\n // update camera position\n if (lastX !== this.x || lastY !== this.y) {\n worldNode.offset(-this.x, -this.y);\n lastX = this.x;\n lastY = this.y;\n }\n });\n\n worldNode.tick((dt: number, t: number) => {\n this.step(dt, t);\n\n if (targetBody) {\n this.drawSegment(targetBody.getPosition(), mouseMove, \"rgba(255,255,255,0.2)\");\n }\n\n if (this.lastDrawHash !== this.newDrawHash) {\n this.lastDrawHash = this.newDrawHash;\n stage.touch();\n }\n this.newDrawHash = \"\";\n\n return true;\n });\n\n const mouseGround = world.createBody();\n let mouseJoint: MouseJoint | null = null;\n let targetBody: Body | null = null;\n const mouseMove = {x: 0, y: 0};\n\n worldNode.attr(\"spy\", true);\n\n worldNode.on(Stage.POINTER_START, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (targetBody) {\n return;\n }\n\n const body = findBody(world, point);\n if (!body) {\n return;\n }\n\n if (this.mouseForce) {\n targetBody = body;\n\n } else {\n mouseJoint = new MouseJoint({maxForce: 1000}, mouseGround, body, { x: point.x, y: point.y });\n world.createJoint(mouseJoint);\n }\n });\n\n worldNode.on(Stage.POINTER_MOVE, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n mouseJoint.setTarget(point);\n }\n\n mouseMove.x = point.x;\n mouseMove.y = point.y;\n });\n\n worldNode.on(Stage.POINTER_END, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n world.destroyJoint(mouseJoint);\n mouseJoint = null;\n }\n if (targetBody && this.mouseForce) {\n const target = targetBody.getPosition();\n const force = {\n x: (point.x - target.x) * this.mouseForce,\n y: (point.y - target.y) * this.mouseForce,\n };\n targetBody.applyForceToCenter(force, true);\n targetBody = null;\n }\n });\n\n worldNode.on(Stage.POINTER_CANCEL, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n world.destroyJoint(mouseJoint);\n mouseJoint = null;\n }\n if (targetBody) {\n targetBody = null;\n }\n });\n\n const activeKeys = testbed.activeKeys;\n const downKeys: Record = {};\n function updateActiveKeys(keyCode: number, down: boolean) {\n const char = String.fromCharCode(keyCode);\n if (/\\w/.test(char)) {\n activeKeys[char] = down;\n }\n activeKeys.right = downKeys[39] || activeKeys[\"D\"];\n activeKeys.left = downKeys[37] || activeKeys[\"A\"];\n activeKeys.up = downKeys[38] || activeKeys[\"W\"];\n activeKeys.down = downKeys[40] || activeKeys[\"S\"];\n activeKeys.fire = downKeys[32] || downKeys[13] ;\n }\n\n window.addEventListener(\"keydown\", function(e) {\n const keyCode = e.keyCode;\n downKeys[keyCode] = true;\n updateActiveKeys(keyCode, true);\n testbed.keydown && testbed.keydown(keyCode, String.fromCharCode(keyCode));\n });\n window.addEventListener(\"keyup\", function(e) {\n const keyCode = e.keyCode;\n downKeys[keyCode] = false;\n updateActiveKeys(keyCode, false);\n testbed.keyup && testbed.keyup(keyCode, String.fromCharCode(keyCode));\n });\n\n this.resume();\n }\n\n /** @private @internal */\n focus() {\n // @ts-ignore\n document.activeElement && document.activeElement.blur();\n this.canvas.focus();\n }\n\n /** @internal */\n _pause() {\n }\n\n /** @internal */\n _resume() {\n }\n\n private statusText = \"\";\n private statusMap: Record = {};\n\n status(name: string, value: any): void;\n status(value: object | string): void;\n status(a: any, b?: any) {\n if (typeof b !== \"undefined\") {\n const key = a;\n const value = b;\n if (typeof value !== \"function\" && typeof value !== \"object\") {\n this.statusMap[key] = value;\n }\n } else if (a && typeof a === \"object\") {\n // tslint:disable-next-line:no-for-in\n for (const key in a) {\n const value = a[key];\n if (typeof value !== \"function\" && typeof value !== \"object\") {\n this.statusMap[key] = value;\n }\n }\n } else if (typeof a === \"string\") {\n this.statusText = a;\n }\n\n var newline = \"\\n\";\n var text = this.statusText || \"\";\n for (var key in this.statusMap) {\n var value = this.statusMap[key];\n if (typeof value === \"function\") continue;\n text += (text && newline) + key + \": \" + value;\n }\n\n this._status(text);\n }\n\n info(text: string): void {\n this._info(text);\n }\n\n /** @internal */\n _status(string: string) {\n }\n\n /** @internal */ \n _info(text: string) {\n }\n\n /** @internal */\n isPaused() {\n return this.paused;\n }\n\n /** @internal */\n togglePause() {\n this.paused ? this.resume() : this.pause();\n }\n\n /** @internal */\n pause() {\n this.stage.pause();\n }\n\n /** @internal */\n resume() {\n this.stage.resume();\n this.focus();\n }\n\n drawPoint(p: {x: number, y: number}, r: number, color: string): void {\n this.buffer.push(function(ctx, ratio) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, 5 / ratio, 0, 2 * math_PI);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"point\" + p.x + \",\" + p.y + \",\" + r + \",\" + color;\n }\n\n drawCircle(p: {x: number, y: number}, r: number, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, r, 0, 2 * math_PI);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"circle\" + p.x + \",\" + p.y + \",\" + r + \",\" + color;\n }\n\n drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(a.x, a.y);\n ctx.lineTo(b.x, b.y);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"segment\" + a.x + \",\" + a.y + \",\" + b.x + \",\" + b.y + \",\" + color;\n }\n\n drawSegment = this.drawEdge;\n\n drawPolygon(points: Array<{x: number, y: number}>, color: string): void {\n if (!points || !points.length) {\n return;\n }\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(points[0].x, points[0].y);\n for (let i = 1; i < points.length; i++) {\n ctx.lineTo(points[i].x, points[i].y);\n }\n ctx.strokeStyle = color;\n ctx.closePath();\n ctx.stroke();\n });\n this.newDrawHash += \"segment\";\n for (let i = 1; i < points.length; i++) {\n this.newDrawHash += points[i].x + \",\" + points[i].y + \",\";\n }\n this.newDrawHash += color;\n }\n\n drawAABB(aabb: AABBValue, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(aabb.lowerBound.x, aabb.lowerBound.y);\n ctx.lineTo(aabb.upperBound.x, aabb.lowerBound.y);\n ctx.lineTo(aabb.upperBound.x, aabb.upperBound.y);\n ctx.lineTo(aabb.lowerBound.x, aabb.upperBound.y);\n ctx.strokeStyle = color;\n ctx.closePath();\n ctx.stroke();\n });\n this.newDrawHash += \"aabb\";\n this.newDrawHash += aabb.lowerBound.x + \",\" + aabb.lowerBound.y + \",\";\n this.newDrawHash += aabb.upperBound.x + \",\" + aabb.upperBound.y + \",\";\n this.newDrawHash += color;\n }\n\n findOne(query: string): (Body | Joint | Fixture | null) {\n throw new Error(\"Not implemented\");\n }\n\n findAll(query: string): (Body | Joint | Fixture)[] {\n throw new Error(\"Not implemented\");\n }\n}\n\ninterface WorldStageOptions {\n speed: number;\n hz: number;\n scaleY: number;\n lineWidth: number;\n stroke: string | undefined;\n fill: string | undefined;\n}\n\nclass WorldStageNode extends Stage.Node {\n private nodes = new WeakMap();\n\n private options: WorldStageOptions = {\n speed: 1,\n hz: 60,\n scaleY: -1,\n lineWidth: 3,\n stroke: undefined,\n fill: undefined\n };\n\n private world: World;\n private testbed: Testbed;\n\n constructor(world: World, opts: Partial = {}) {\n super();\n this.label(\"Planck\");\n\n this.options = { ...this.options, ...opts };\n\n if (math_abs(this.options.hz) < 1) {\n this.options.hz = 1 / this.options.hz;\n }\n\n this.world = world;\n this.testbed = opts as Testbed;\n\n const timeStep = 1 / this.options.hz;\n let elapsedTime = 0;\n let errored = false;\n this.tick((dt: number) => {\n if (errored) {\n return false;\n }\n try {\n dt = dt * 0.001 * this.options.speed;\n elapsedTime += dt;\n while (elapsedTime > timeStep) {\n world.step(timeStep);\n elapsedTime -= timeStep;\n }\n this.renderWorld();\n return true; \n } catch (error) {\n errored = true;\n console.error(error);\n return false;\n }\n }, true);\n\n world.on(\"remove-fixture\", (obj: Fixture) => {\n this.nodes.get(obj)?.remove();\n });\n\n world.on(\"remove-joint\", (obj: Joint) => {\n this.nodes.get(obj)?.remove();\n });\n }\n\n renderWorld() {\n const world = this.world;\n const options = this.options;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const viewer = this;\n\n for (let b = world.getBodyList(); b; b = b.getNext()) {\n for (let f = b.getFixtureList(); f; f = f.getNext()) {\n\n let node = this.nodes.get(f);\n const fstyle = getStyle(f);\n const bstyle = getStyle(b);\n if (!node) {\n if (fstyle && fstyle.stroke) {\n options.stroke = fstyle.stroke;\n } else if (bstyle && bstyle.stroke) {\n options.stroke = bstyle.stroke;\n } else if (b.isDynamic()) {\n options.stroke = \"rgba(255,255,255,0.9)\";\n } else if (b.isKinematic()) {\n options.stroke = \"rgba(255,255,255,0.7)\";\n } else if (b.isStatic()) {\n options.stroke = \"rgba(255,255,255,0.5)\";\n }\n\n if (fstyle && fstyle.fill) {\n options.fill = fstyle.fill;\n } else if (bstyle && bstyle.fill) {\n options.fill = bstyle.fill;\n } else {\n options.fill = \"\";\n }\n\n const type = f.getType();\n const shape = f.getShape();\n if (type == \"circle\") {\n node = viewer.drawCircle(shape as CircleShape, options);\n }\n if (type == \"edge\") {\n node = viewer.drawEdge(shape as EdgeShape, options);\n }\n if (type == \"polygon\") {\n node = viewer.drawPolygon(shape as PolygonShape, options);\n }\n if (type == \"chain\") {\n node = viewer.drawChain(shape as ChainShape, options);\n }\n\n if (node) {\n node.appendTo(viewer);\n this.nodes.set(f, node);\n }\n }\n\n if (node) {\n const p = b.getPosition();\n const r = b.getAngle();\n // @ts-ignore\n const isChanged = node.__lastX !== p.x || node.__lastY !== p.y || node.__lastR !== r;\n if (isChanged) {\n // @ts-ignore\n node.__lastX = p.x;\n // @ts-ignore\n node.__lastY = p.y;\n // @ts-ignore\n node.__lastR = r;\n node.offset(p.x, options.scaleY * p.y);\n node.rotate(options.scaleY * r);\n }\n }\n\n }\n }\n\n for (let j = world.getJointList(); j; j = j.getNext()) {\n const type = j.getType();\n if (type == \"pulley-joint\") {\n this.testbed.drawSegment(j.getAnchorA(), (j as PulleyJoint).getGroundAnchorA(), \"rgba(255,255,255,0.5)\");\n this.testbed.drawSegment(j.getAnchorB(), (j as PulleyJoint).getGroundAnchorB(), \"rgba(255,255,255,0.5)\");\n this.testbed.drawSegment((j as PulleyJoint).getGroundAnchorB(), (j as PulleyJoint).getGroundAnchorA(), \"rgba(255,255,255,0.5)\");\n } else {\n this.testbed.drawSegment(j.getAnchorA(), j.getAnchorB(), \"rgba(255,255,255,0.5)\");\n }\n }\n }\n\n drawCircle(shape: CircleShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const r = shape.m_radius;\n const cx = r + lw;\n const cy = r + lw;\n const w = r * 2 + lw * 2;\n const h = r * 2 + lw * 2;\n\n offsetX = shape.m_p.x - cx;\n offsetY = options.scaleY * shape.m_p.y - cy;\n\n this.setSize(w, h, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.arc(cx, cy, r, 0, 2 * math_PI);\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n }\n ctx.lineTo(cx, cy);\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? \"\";\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if (!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawEdge(edge: EdgeShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n let offsetA = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const v1 = edge.m_vertex1;\n const v2 = edge.m_vertex2;\n\n const dx = v2.x - v1.x;\n const dy = v2.y - v1.y;\n\n const length = math_sqrt(dx * dx + dy * dy);\n\n this.setSize(length + 2 * lw, 2 * lw, ratio);\n\n const minX = math_min(v1.x, v2.x);\n const minY = math_min(options.scaleY * v1.y, options.scaleY * v2.y);\n \n offsetX = minX - lw;\n offsetY = minY - lw;\n offsetA = options.scaleY * math_atan2(dy, dx);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n ctx.moveTo(lw, lw);\n ctx.lineTo(lw + length, lw);\n\n ctx.lineCap = \"round\";\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? \"\";\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY, offsetA)) {\n sprite.offset(offsetX, offsetY);\n sprite.rotate(offsetA);\n }\n });\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawPolygon(shape: PolygonShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const vertices = shape.m_vertices;\n\n if (!vertices.length) {\n return;\n }\n \n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, options.scaleY * v.y);\n maxY = math_max(maxY, options.scaleY * v.y);\n }\n \n const width = maxX - minX;\n const height = maxY - minY;\n\n offsetX = minX;\n offsetY = minY;\n\n this.setSize(width + 2 * lw, height + 2 * lw, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n const x = v.x - minX + lw;\n const y = options.scaleY * v.y - minY + lw;\n if (i == 0)\n ctx.moveTo(x, y);\n\n else\n ctx.lineTo(x, y);\n }\n\n if (vertices.length > 2) {\n ctx.closePath();\n }\n\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n ctx.closePath();\n }\n\n ctx.lineCap = \"round\";\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? \"\";\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawChain(shape: ChainShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const vertices = shape.m_vertices;\n\n if (!vertices.length) {\n return;\n }\n \n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, options.scaleY * v.y);\n maxY = math_max(maxY, options.scaleY * v.y);\n }\n \n const width = maxX - minX;\n const height = maxY - minY;\n\n offsetX = minX;\n offsetY = minY;\n\n this.setSize(width + 2 * lw, height + 2 * lw, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n const x = v.x - minX + lw;\n const y = options.scaleY * v.y - minY + lw;\n if (i == 0)\n ctx.moveTo(x, y);\n\n else\n ctx.lineTo(x, y);\n }\n\n // TODO: if loop\n if (vertices.length > 2) {\n // ctx.closePath();\n }\n\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n ctx.closePath();\n }\n\n ctx.lineCap = \"round\";\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? \"\";\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n}\n"],"names":["d","b","__extends","__assign","s","n","input","output","math_random","x","clamp","random","math","math_abs","math_sqrt","math_max","math_min","Vec2","v","a","length","AABB","normal","temp","math_PI","Settings","SettingsInternal","Pool","TreeNode","DynamicTree","c","Iterator","BroadPhase","displacement","math_sin","math_cos","transform","xf","math_atan2","Rot","matrix.vec2","Sweep","matrix.zeroVec2","matrix.transformVec2","matrix.copyVec2","localCenter","matrix.setRotAngle","matrix.combine2Vec2","matrix.minusVec2","matrix.rotVec2","Transform","rotation","Velocity","Position","Shape","FixtureProxy","Fixture","matrix.subVec2","matrix.transform","Body","matrix.plusScaleVec2","matrix.scaleVec2","matrix.dotVec2","matrix.crossNumVec2","matrix.plusVec2","point","JointEdge","Joint","stats","DistanceInput","DistanceOutput","SimplexCache","cache","xfA","xfB","matrix.lengthSqrVec2","matrix.derotVec2","matrix.distVec2","rA","rB","matrix.normalizeVec2","matrix.minusScaleVec2","DistanceProxy","SimplexVertex","Simplex","v1","v2","matrix.setVec2","matrix.crossVec2Vec2","pA","pB","matrix.combine3Vec2","matrix.copyTransform","ShapeCastInput","ShapeCastOutput","simplex","pointA","pointB","TOIInput","TOIOutputState","TOIOutput","SeparationFunctionType","SeparationFunction","matrix.normalizeVec2Length","matrix.crossVec2Num","matrix.negVec2","TimeStep","ContactImpulse","Solver","matrix.mulVec2","Mat22","cA","cB","planePoint","clipPoint","ManifoldType","ContactFeatureType","PointState","ClipVertex","Manifold","ManifoldPoint","ContactID","WorldManifold","ContactEdge","VelocityConstraintPoint","tangent","P","Contact","_a","worldManifold","DEFAULTS","World","oldManifold","Vec3","EdgeShape","e","ChainShape","e1","e2","PolygonShape","ie","center","matrix.detransformVec2","matrix.addVec2","CircleShape","matrix.distSqrVec2","DistanceJoint","vA","vB","FrictionJoint","Mat33","LimitState","RevoluteJoint","PrismaticJoint","translation","perp","GearJoint","MotorJoint","MouseJoint","PulleyJoint","RopeJoint","WeldJoint","WheelJoint","Serializer","options","obj","Testbed","testbed","BoxShape","matrix.retransformVec2","clipPoints1","clipPoints2","normal1","matrix.detransformTransform","maxSeparation","edge1","matrix.rerotVec2","EPAxisType","VertexType","EPAxis","TempPolygon","ReferenceFace","s2","extendStatics","d2","b2","now","self","StageTestbed","Stage.mount","canvas","Stage.POINTER_START","Stage.CanvasTexture","Stage.sprite","Stage.POINTER_MOVE","Stage.POINTER_END","Stage.POINTER_CANCEL","i","WorldStageNode","texture","Stage.canvas","sprite","Stage.layout","Stage.Node"],"mappings":"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","x_google_ignoreList":[0,54]} \ No newline at end of file diff --git a/dist/planck-with-testbed.min.js b/dist/planck-with-testbed.min.js index 3f5f9796..58e90b47 100644 --- a/dist/planck-with-testbed.min.js +++ b/dist/planck-with-testbed.min.js @@ -1,7 +1,8 @@ +(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?factory(exports):typeof define==="function"&&define.amd?define(["exports"],factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,factory(global.planck={}))})(this,(function(exports2){"use strict"; /** - * Planck.js v1.0.9 + * Planck.js v1.1.0-alpha * @license The MIT license - * @copyright Copyright (c) 2023 Erin Catto, Ali Shakiba + * @copyright Copyright (c) 2024 Erin Catto, Ali Shakiba * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -21,19 +22,41 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).planck={})}(this,(function(t){"use strict"; /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */var e=function(t,i){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])})(t,i)};function i(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function o(){this.constructor=t}e(t,i),t.prototype=null===i?Object.create(i):(o.prototype=i.prototype,new o)}var o=function(){return(o=Object.assign||function(t){for(var e,i=1,o=arguments.length;ie?(t=(t-e)%(i-e))+(t<0?i:e):(t=(t-i)%(e-i))+(t<=0?e:i)}function c(t,e,i){return ti?i:t}var m=Object.create(Math);m.EPSILON=r,m.isFinite=a,m.nextPowerOfTwo=function(t){return t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,(t|=t>>16)+1},m.isPowerOfTwo=function(t){return t>0&&0==(t&t-1)},m.mod=h,m.clamp=c,m.random=function(t,e){return void 0===t?(e=1,t=0):void 0===e&&(e=t,t=0),t===e?t:s()*(e-t)+t};var l=Math.abs,u=Math.sqrt,_=Math.max,p=Math.min,y=function(){function t(e,i){if(!(this instanceof t))return new t(e,i);void 0===e?(this.x=0,this.y=0):"object"==typeof e?(this.x=e.x,this.y=e.y):(this.x=e,this.y=i)}return t.prototype._serialize=function(){return{x:this.x,y:this.y}},t._deserialize=function(e){var i=Object.create(t.prototype);return i.x=e.x,i.y=e.y,i},t.zero=function(){var e=Object.create(t.prototype);return e.x=0,e.y=0,e},t.neo=function(e,i){var o=Object.create(t.prototype);return o.x=e,o.y=i,o},t.clone=function(e){return t.neo(e.x,e.y)},t.prototype.toString=function(){return JSON.stringify(this)},t.isValid=function(t){return null!=t&&(Number.isFinite(t.x)&&Number.isFinite(t.y))},t.assert=function(t){},t.prototype.clone=function(){return t.clone(this)},t.prototype.setZero=function(){return this.x=0,this.y=0,this},t.prototype.set=function(t,e){return"object"==typeof t?(this.x=t.x,this.y=t.y):(this.x=t,this.y=e),this},t.prototype.setNum=function(t,e){return this.x=t,this.y=e,this},t.prototype.setVec2=function(t){return this.x=t.x,this.y=t.y,this},t.prototype.wSet=function(t,e,i,o){return void 0!==i||void 0!==o?this.setCombine(t,e,i,o):this.setMul(t,e)},t.prototype.setCombine=function(t,e,i,o){var n=t*e.x+i*o.x,s=t*e.y+i*o.y;return this.x=n,this.y=s,this},t.prototype.setMul=function(t,e){var i=t*e.x,o=t*e.y;return this.x=i,this.y=o,this},t.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this},t.prototype.wAdd=function(t,e,i,o){return void 0!==i||void 0!==o?this.addCombine(t,e,i,o):this.addMul(t,e)},t.prototype.addCombine=function(t,e,i,o){var n=t*e.x+i*o.x,s=t*e.y+i*o.y;return this.x+=n,this.y+=s,this},t.prototype.addMul=function(t,e){var i=t*e.x,o=t*e.y;return this.x+=i,this.y+=o,this},t.prototype.wSub=function(t,e,i,o){return void 0!==i||void 0!==o?this.subCombine(t,e,i,o):this.subMul(t,e)},t.prototype.subCombine=function(t,e,i,o){var n=t*e.x+i*o.x,s=t*e.y+i*o.y;return this.x-=n,this.y-=s,this},t.prototype.subMul=function(t,e){var i=t*e.x,o=t*e.y;return this.x-=i,this.y-=o,this},t.prototype.sub=function(t){return this.x-=t.x,this.y-=t.y,this},t.prototype.mul=function(t){return this.x*=t,this.y*=t,this},t.prototype.length=function(){return t.lengthOf(this)},t.prototype.lengthSquared=function(){return t.lengthSquared(this)},t.prototype.normalize=function(){var t=this.length();if(tt*t){var i=t/u(e);this.x*=i,this.y*=i}return this},t.clamp=function(e,i){var o=t.neo(e.x,e.y);return o.clamp(i),o},t.scaleFn=function(e,i){return function(o){return t.neo(o.x*e,o.y*i)}},t.translateFn=function(e,i){return function(o){return t.neo(o.x+e,o.y+i)}},t}(),f=Math.max,d=Math.min,v=function(){function t(e,i){if(!(this instanceof t))return new t(e,i);this.lowerBound=y.zero(),this.upperBound=y.zero(),"object"==typeof e&&this.lowerBound.setVec2(e),"object"==typeof i?this.upperBound.setVec2(i):"object"==typeof e&&this.upperBound.setVec2(e)}return t.prototype.isValid=function(){return t.isValid(this)},t.isValid=function(t){return null!=t&&(y.isValid(t.lowerBound)&&y.isValid(t.upperBound)&&y.sub(t.upperBound,t.lowerBound).lengthSquared()>=0)},t.assert=function(t){},t.prototype.getCenter=function(){return y.neo(.5*(this.lowerBound.x+this.upperBound.x),.5*(this.lowerBound.y+this.upperBound.y))},t.prototype.getExtents=function(){return y.neo(.5*(this.upperBound.x-this.lowerBound.x),.5*(this.upperBound.y-this.lowerBound.y))},t.prototype.getPerimeter=function(){return 2*(this.upperBound.x-this.lowerBound.x+this.upperBound.y-this.lowerBound.y)},t.prototype.combine=function(t,e){e=e||this;var i=t.lowerBound,o=t.upperBound,n=e.lowerBound,s=e.upperBound,r=d(i.x,n.x),a=d(i.y,n.y),h=f(s.x,o.x),c=f(s.y,o.y);this.lowerBound.setNum(r,a),this.upperBound.setNum(h,c)},t.prototype.combinePoints=function(t,e){this.lowerBound.setNum(d(t.x,e.x),d(t.y,e.y)),this.upperBound.setNum(f(t.x,e.x),f(t.y,e.y))},t.prototype.set=function(t){this.lowerBound.setNum(t.lowerBound.x,t.lowerBound.y),this.upperBound.setNum(t.upperBound.x,t.upperBound.y)},t.prototype.contains=function(t){var e=!0;return e=(e=(e=(e=e&&this.lowerBound.x<=t.lowerBound.x)&&this.lowerBound.y<=t.lowerBound.y)&&t.upperBound.x<=this.upperBound.x)&&t.upperBound.y<=this.upperBound.y},t.prototype.extend=function(e){return t.extend(this,e),this},t.extend=function(t,e){return t.lowerBound.x-=e,t.lowerBound.y-=e,t.upperBound.x+=e,t.upperBound.y+=e,t},t.testOverlap=function(t,e){var i=e.lowerBound.x-t.upperBound.x,o=t.lowerBound.x-e.upperBound.x,n=e.lowerBound.y-t.upperBound.y,s=t.lowerBound.y-e.upperBound.y;return!(i>0||n>0||o>0||s>0)},t.areEqual=function(t,e){return y.areEqual(t.lowerBound,e.lowerBound)&&y.areEqual(t.upperBound,e.upperBound)},t.diff=function(t,e){var i=f(0,d(t.upperBound.x,e.upperBound.x)-f(e.lowerBound.x,t.lowerBound.x)),o=f(0,d(t.upperBound.y,e.upperBound.y)-f(e.lowerBound.y,t.lowerBound.y));return(t.upperBound.x-t.lowerBound.x)*(t.upperBound.y-t.lowerBound.y)+(e.upperBound.x-e.lowerBound.x)*(e.upperBound.y-e.lowerBound.y)-i*o},t.prototype.rayCast=function(t,e){for(var i=-1/0,o=1/0,n=e.p1,s=y.sub(e.p2,e.p1),a=y.abs(s),h=y.zero(),c="x";null!==c;c="x"===c?"y":null)if(a.xu){var p=l;l=u,u=p,_=1}if(l>i&&(h.setZero(),h[c]=_,i=l),i>(o=d(o,u)))return!1}return!(i<0||e.maxFraction0?t=this._list.shift():(this._createCount++,t=this._hasCreateFn?this._createFn():{}),this._allocateCount++,this._hasAllocateFn&&this._allocateFn(t),t},t.prototype.release=function(t){this._list.length"+this._allocateCount+" <"+this._releaseCount+" -"+this._disposeCount+" ="+this._list.length+"/"+this._max},t}(),B=Math.abs,w=Math.max,C=function(){function t(t){this.aabb=new v,this.userData=null,this.parent=null,this.child1=null,this.child2=null,this.height=-1,this.id=t}return t.prototype.toString=function(){return this.id+": "+this.userData},t.prototype.isLeaf=function(){return null==this.child1},t}(),M=new A({create:function(){return new C},release:function(t){t.userData=null,t.parent=null,t.child1=null,t.child2=null,t.height=-1,t.id=void 0}}),V=function(){function t(){this.inputPool=new A({create:function(){return{}},release:function(t){}}),this.stackPool=new A({create:function(){return[]},release:function(t){t.length=0}}),this.iteratorPool=new A({create:function(){return new S},release:function(t){t.close()}}),this.m_root=null,this.m_nodes={},this.m_lastProxyId=0}return t.prototype.getUserData=function(t){return this.m_nodes[t].userData},t.prototype.getFatAABB=function(t){return this.m_nodes[t].aabb},t.prototype.allocateNode=function(){var t=M.allocate();return t.id=++this.m_lastProxyId,this.m_nodes[t.id]=t,t},t.prototype.freeNode=function(t){delete this.m_nodes[t.id],M.release(t)},t.prototype.createProxy=function(t,e){var i=this.allocateNode();return i.aabb.set(t),v.extend(i.aabb,b.aabbExtension),i.userData=e,i.height=0,this.insertLeaf(i),i.id},t.prototype.destroyProxy=function(t){var e=this.m_nodes[t];this.removeLeaf(e),this.freeNode(e)},t.prototype.moveProxy=function(t,e,i){var o=this.m_nodes[t];return!o.aabb.contains(e)&&(this.removeLeaf(o),o.aabb.set(e),e=o.aabb,v.extend(e,b.aabbExtension),i.x<0?e.lowerBound.x+=i.x*b.aabbMultiplier:e.upperBound.x+=i.x*b.aabbMultiplier,i.y<0?e.lowerBound.y+=i.y*b.aabbMultiplier:e.upperBound.y+=i.y*b.aabbMultiplier,this.insertLeaf(o),!0)},t.prototype.insertLeaf=function(t){if(null==this.m_root)return this.m_root=t,void(this.m_root.parent=null);for(var e=t.aabb,i=this.m_root;!i.isLeaf();){var o=i.child1,n=i.child2,s=i.aabb.getPerimeter(),r=v.combinedPerimeter(i.aabb,e),a=2*r,h=2*(r-s),c=v.combinedPerimeter(e,o.aabb)+h;if(!o.isLeaf())c-=o.aabb.getPerimeter();var m=v.combinedPerimeter(e,n.aabb)+h;if(!n.isLeaf())m-=n.aabb.getPerimeter();if(a1){var s=o.child1,r=o.child2;return o.child1=e,o.parent=e.parent,e.parent=o,null!=o.parent?o.parent.child1===t?o.parent.child1=o:o.parent.child2=o:this.m_root=o,s.height>r.height?(o.child2=s,e.child2=r,r.parent=e,e.aabb.combine(i.aabb,r.aabb),o.aabb.combine(e.aabb,s.aabb),e.height=1+w(i.height,r.height),o.height=1+w(e.height,s.height)):(o.child2=r,e.child2=s,s.parent=e,e.aabb.combine(i.aabb,s.aabb),o.aabb.combine(e.aabb,r.aabb),e.height=1+w(i.height,s.height),o.height=1+w(e.height,r.height)),o}if(n<-1){var a=i.child1,h=i.child2;return i.child1=e,i.parent=e.parent,e.parent=i,null!=i.parent?i.parent.child1===e?i.parent.child1=i:i.parent.child2=i:this.m_root=i,a.height>h.height?(i.child2=a,e.child1=h,h.parent=e,e.aabb.combine(o.aabb,h.aabb),i.aabb.combine(e.aabb,a.aabb),e.height=1+w(o.height,h.height),i.height=1+w(e.height,a.height)):(i.child2=h,e.child1=a,a.parent=e,e.aabb.combine(o.aabb,a.aabb),i.aabb.combine(e.aabb,h.aabb),e.height=1+w(o.height,a.height),i.height=1+w(e.height,h.height)),i}return e},t.prototype.getHeight=function(){return null==this.m_root?0:this.m_root.height},t.prototype.getAreaRatio=function(){if(null==this.m_root)return 0;for(var t,e=this.m_root.aabb.getPerimeter(),i=0,o=this.iteratorPool.allocate().preorder(this.m_root);t=o.next();)t.height<0||(i+=t.aabb.getPerimeter());return this.iteratorPool.release(o),i/e},t.prototype.computeHeight=function(t){var e;if((e=void 0!==t?this.m_nodes[t]:this.m_root).isLeaf())return 0;var i=this.computeHeight(e.child1.id),o=this.computeHeight(e.child2.id);return 1+w(i,o)},t.prototype.validateStructure=function(t){if(null!=t){this.m_root;var e=t.child1,i=t.child2;t.isLeaf()||(this.validateStructure(e),this.validateStructure(i))}},t.prototype.validateMetrics=function(t){if(null!=t){var e=t.child1,i=t.child2;if(!t.isLeaf())e.height,i.height,(new v).combine(e.aabb,i.aabb),this.validateMetrics(e),this.validateMetrics(i)}},t.prototype.validate=function(){},t.prototype.getMaxBalance=function(){for(var t,e=0,i=this.iteratorPool.allocate().preorder(this.m_root);t=i.next();)if(!(t.height<=1)){var o=B(t.child2.height-t.child1.height);e=w(e,o)}return this.iteratorPool.release(i),e},t.prototype.rebuildBottomUp=function(){for(var t,e=[],i=0,o=this.iteratorPool.allocate().preorder(this.m_root);t=o.next();)t.height<0||(t.isLeaf()?(t.parent=null,e[i]=t,++i):this.freeNode(t));for(this.iteratorPool.release(o);i>1;){for(var n=1/0,s=-1,r=-1,a=0;a0;){var o=i.pop();if(null!=o)if(v.testOverlap(o.aabb,t))if(o.isLeaf()){if(!1===e(o.id))return}else i.push(o.child1),i.push(o.child2)}this.stackPool.release(i)},t.prototype.rayCast=function(t,e){var i=t.p1,o=t.p2,n=y.sub(o,i);n.normalize();var s=y.crossNumVec2(1,n),r=y.abs(s),a=t.maxFraction,h=new v,c=y.combine(1-a,i,a,o);h.combinePoints(i,c);var m=this.stackPool.allocate(),l=this.inputPool.allocate();for(m.push(this.m_root);m.length>0;){var u=m.pop();if(null!=u&&!1!==v.testOverlap(u.aabb,h)){var _=u.aabb.getCenter(),p=u.aabb.getExtents();if(!(B(y.dot(s,y.sub(i,_)))-y.dot(r,p)>0))if(u.isLeaf()){l.p1=y.clone(t.p1),l.p2=y.clone(t.p2),l.maxFraction=a;var f=e(l,u.id);if(0===f)break;f>0&&(a=f,c=y.combine(1-a,i,a,o),h.combinePoints(i,c))}else m.push(u.child1),m.push(u.child2)}}this.stackPool.release(m),this.inputPool.release(l)},t}(),S=function(){function t(){this.parents=[],this.states=[]}return t.prototype.preorder=function(t){return this.parents.length=0,this.parents.push(t),this.states.length=0,this.states.push(0),this},t.prototype.next=function(){for(;this.parents.length>0;){var t=this.parents.length-1,e=this.parents[t];if(0===this.states[t])return this.states[t]=1,e;if(1===this.states[t]&&(this.states[t]=2,e.child1))return this.parents.push(e.child1),this.states.push(1),e.child1;if(2===this.states[t]&&(this.states[t]=3,e.child2))return this.parents.push(e.child2),this.states.push(1),e.child2;this.parents.pop(),this.states.pop()}},t.prototype.close=function(){this.parents.length=0},t}(),P=Math.max,T=Math.min,I=function(){function t(){var t=this;this.m_tree=new V,this.m_moveBuffer=[],this.query=function(e,i){t.m_tree.query(e,i)},this.queryCallback=function(e){if(e===t.m_queryProxyId)return!0;var i=T(e,t.m_queryProxyId),o=P(e,t.m_queryProxyId),n=t.m_tree.getUserData(i),s=t.m_tree.getUserData(o);return t.m_callback(n,s),!0}}return t.prototype.getUserData=function(t){return this.m_tree.getUserData(t)},t.prototype.testOverlap=function(t,e){var i=this.m_tree.getFatAABB(t),o=this.m_tree.getFatAABB(e);return v.testOverlap(i,o)},t.prototype.getFatAABB=function(t){return this.m_tree.getFatAABB(t)},t.prototype.getProxyCount=function(){return this.m_moveBuffer.length},t.prototype.getTreeHeight=function(){return this.m_tree.getHeight()},t.prototype.getTreeBalance=function(){return this.m_tree.getMaxBalance()},t.prototype.getTreeQuality=function(){return this.m_tree.getAreaRatio()},t.prototype.rayCast=function(t,e){this.m_tree.rayCast(t,e)},t.prototype.shiftOrigin=function(t){this.m_tree.shiftOrigin(t)},t.prototype.createProxy=function(t,e){var i=this.m_tree.createProxy(t,e);return this.bufferMove(i),i},t.prototype.destroyProxy=function(t){this.unbufferMove(t),this.m_tree.destroyProxy(t)},t.prototype.moveProxy=function(t,e,i){this.m_tree.moveProxy(t,e,i)&&this.bufferMove(t)},t.prototype.touchProxy=function(t){this.bufferMove(t)},t.prototype.bufferMove=function(t){this.m_moveBuffer.push(t)},t.prototype.unbufferMove=function(t){for(var e=0;e0;)if(this.m_queryProxyId=this.m_moveBuffer.pop(),null!==this.m_queryProxyId){var e=this.m_tree.getFatAABB(this.m_queryProxyId);this.m_tree.query(e,this.queryCallback)}},t}(),z=Math.sin,F=Math.cos,L=Math.sqrt;function k(t,e){return{x:t,y:e}}function q(t,e,i){return t.x=e,t.y=i,t}function O(t,e){return t.x=e.x,t.y=e.y,t}function j(t){return t.x=0,t.y=0,t}function N(t){return t.x=-t.x,t.y=-t.y,t}function R(t,e){return t.x+=e.x,t.y+=e.y,t}function D(t,e){return t.x-=e.x,t.y-=e.y,t}function E(t,e,i){return t.x=e.x-i.x,t.y=e.y-i.y,t}function Y(t,e){return t.x*=e,t.y*=e,t}function W(t,e,i){return t.x=e*i.x,t.y=e*i.y,t}function H(t,e,i){return t.x+=e*i.x,t.y+=e*i.y,t}function X(t,e,i){return t.x-=e*i.x,t.y-=e*i.y,t}function J(t,e,i,o,n){return t.x=e*i.x+o*n.x,t.y=e*i.y+o*n.y,t}function U(t,e,i,o,n,s,r){return t.x=e*i.x+o*n.x+s*r.x,t.y=e*i.y+o*n.y+s*r.y,t}function K(t){var e=L(t.x*t.x+t.y*t.y);if(e>0){var i=1/e;t.x*=i,t.y*=i}return t}function Z(t,e,i){var o=i*e.y,n=-i*e.x;return t.x=o,t.y=n,t}function G(t,e,i){var o=-e*i.y,n=e*i.x;return t.x=o,t.y=n,t}function Q(t,e){return t.x*e.y-t.y*e.x}function $(t,e){return t.x*e.x+t.y*e.y}function tt(t){return t.x*t.x+t.y*t.y}function et(t,e){var i=t.x-e.x,o=t.y-e.y;return L(i*i+o*o)}function it(t,e){var i=t.x-e.x,o=t.y-e.y;return i*i+o*o}function ot(t,e,i){return t.x=e.c*i.x-e.s*i.y,t.y=e.s*i.x+e.c*i.y,t}function nt(t,e,i){var o=e.c*i.x+e.s*i.y,n=-e.s*i.x+e.c*i.y;return t.x=o,t.y=n,t}function st(t,e,i){return{p:k(t,e),q:(o=i,{s:z(o),c:F(o)})};var o}function rt(t,e){return t.p.x=e.p.x,t.p.y=e.p.y,t.q.s=e.q.s,t.q.c=e.q.c,t}function at(t,e,i){var o=e.q.c*i.x-e.q.s*i.y+e.p.x,n=e.q.s*i.x+e.q.c*i.y+e.p.y;return t.x=o,t.y=n,t}function ht(t,e,i){var o=i.x-e.p.x,n=i.y-e.p.y,s=e.q.c*o+e.q.s*n,r=-e.q.s*o+e.q.c*n;return t.x=s,t.y=r,t}function ct(t,e,i,o){var n=e.q.c*o.x-e.q.s*o.y+e.p.x,s=e.q.s*o.x+e.q.c*o.y+e.p.y,r=n-i.p.x,a=s-i.p.y,h=i.q.c*r+i.q.s*a,c=-i.q.s*r+i.q.c*a;return t.x=h,t.y=c,t}function mt(t,e,i){var o=e.q.c*i.q.c+e.q.s*i.q.s,n=e.q.c*i.q.s-e.q.s*i.q.c,s=e.q.c*(i.p.x-e.p.x)+e.q.s*(i.p.y-e.p.y),r=-e.q.s*(i.p.x-e.p.x)+e.q.c*(i.p.y-e.p.y);return t.q.c=o,t.q.s=n,t.p.x=s,t.p.y=r,t}var lt=Math.sin,ut=Math.cos,_t=Math.atan2,pt=function(){function t(e){if(!(this instanceof t))return new t(e);"number"==typeof e?this.setAngle(e):"object"==typeof e?this.setRot(e):this.setIdentity()}return t.neo=function(e){var i=Object.create(t.prototype);return i.setAngle(e),i},t.clone=function(e){var i=Object.create(t.prototype);return i.s=e.s,i.c=e.c,i},t.identity=function(){var e=Object.create(t.prototype);return e.s=0,e.c=1,e},t.isValid=function(t){return null!=t&&(Number.isFinite(t.s)&&Number.isFinite(t.c))},t.assert=function(t){},t.prototype.setIdentity=function(){this.s=0,this.c=1},t.prototype.set=function(t){"object"==typeof t?(this.s=t.s,this.c=t.c):(this.s=lt(t),this.c=ut(t))},t.prototype.setRot=function(t){this.s=t.s,this.c=t.c},t.prototype.setAngle=function(t){this.s=lt(t),this.c=ut(t)},t.prototype.getAngle=function(){return _t(this.s,this.c)},t.prototype.getXAxis=function(){return y.neo(this.c,this.s)},t.prototype.getYAxis=function(){return y.neo(-this.s,this.c)},t.mul=function(e,i){if("c"in i&&"s"in i){var o=t.identity();return o.s=e.s*i.c+e.c*i.s,o.c=e.c*i.c-e.s*i.s,o}if("x"in i&&"y"in i)return y.neo(e.c*i.x-e.s*i.y,e.s*i.x+e.c*i.y)},t.mulRot=function(e,i){var o=t.identity();return o.s=e.s*i.c+e.c*i.s,o.c=e.c*i.c-e.s*i.s,o},t.mulVec2=function(t,e){return y.neo(t.c*e.x-t.s*e.y,t.s*e.x+t.c*e.y)},t.mulSub=function(t,e,i){var o=t.c*(e.x-i.x)-t.s*(e.y-i.y),n=t.s*(e.x-i.x)+t.c*(e.y-i.y);return y.neo(o,n)},t.mulT=function(e,i){if("c"in i&&"s"in i){var o=t.identity();return o.s=e.c*i.s-e.s*i.c,o.c=e.c*i.c+e.s*i.s,o}if("x"in i&&"y"in i)return y.neo(e.c*i.x+e.s*i.y,-e.s*i.x+e.c*i.y)},t.mulTRot=function(e,i){var o=t.identity();return o.s=e.c*i.s-e.s*i.c,o.c=e.c*i.c+e.s*i.s,o},t.mulTVec2=function(t,e){return y.neo(t.c*e.x+t.s*e.y,-t.s*e.x+t.c*e.y)},t}(),yt=Math.atan2,ft=Math.PI,dt=k(0,0),vt=function(){function t(){this.localCenter=y.zero(),this.c=y.zero(),this.a=0,this.alpha0=0,this.c0=y.zero(),this.a0=0}return t.prototype.recycle=function(){j(this.localCenter),j(this.c),this.a=0,this.alpha0=0,j(this.c0),this.a0=0},t.prototype.setTransform=function(t){at(dt,t,this.localCenter),O(this.c,dt),O(this.c0,dt),this.a=this.a0=yt(t.q.s,t.q.c)},t.prototype.setLocalCenter=function(t,e){O(this.localCenter,t),at(dt,e,this.localCenter),O(this.c,dt),O(this.c0,dt)},t.prototype.getTransform=function(t,e){void 0===e&&(e=0),function(t,e){t.c=F(e),t.s=z(e)}(t.q,(1-e)*this.a0+e*this.a),J(t.p,1-e,this.c0,e,this.c),D(t.p,ot(dt,t.q,this.localCenter))},t.prototype.advance=function(t){var e=(t-this.alpha0)/(1-this.alpha0);J(this.c0,e,this.c,1-e,this.c0),this.a0=e*this.a+(1-e)*this.a0,this.alpha0=t},t.prototype.forward=function(){this.a0=this.a,O(this.c0,this.c)},t.prototype.normalize=function(){var t=h(this.a0,-ft,+ft);this.a-=this.a0-t,this.a0=t},t.prototype.set=function(t){O(this.localCenter,t.localCenter),O(this.c,t.c),this.a=t.a,this.alpha0=t.alpha0,O(this.c0,t.c0),this.a0=t.a0},t}(),xt=function(){function t(e,i){if(!(this instanceof t))return new t(e,i);this.p=y.zero(),this.q=pt.identity(),void 0!==e&&this.p.setVec2(e),void 0!==i&&this.q.setAngle(i)}return t.clone=function(e){var i=Object.create(t.prototype);return i.p=y.clone(e.p),i.q=pt.clone(e.q),i},t.neo=function(e,i){var o=Object.create(t.prototype);return o.p=y.clone(e),o.q=pt.clone(i),o},t.identity=function(){var e=Object.create(t.prototype);return e.p=y.zero(),e.q=pt.identity(),e},t.prototype.setIdentity=function(){this.p.setZero(),this.q.setIdentity()},t.prototype.set=function(t,e){void 0===e?(this.p.set(t.p),this.q.set(t.q)):(this.p.set(t),this.q.set(e))},t.prototype.setNum=function(t,e){this.p.setVec2(t),this.q.setAngle(e)},t.prototype.setTransform=function(t){this.p.setVec2(t.p),this.q.setRot(t.q)},t.isValid=function(t){return null!=t&&(y.isValid(t.p)&&pt.isValid(t.q))},t.assert=function(t){},t.mul=function(e,i){if(Array.isArray(i)){for(var o=[],n=0;n0;var e=0!=(t.m_filterMaskBits&this.m_filterCategoryBits),i=0!=(t.m_filterCategoryBits&this.m_filterMaskBits);return e&&i},t}(),zt="static",Ft="kinematic",Lt="dynamic",kt=k(0,0),qt=k(0,0),Ot=k(0,0),jt=k(0,0),Nt=st(0,0,0),Rt={type:zt,position:y.zero(),angle:0,linearVelocity:y.zero(),angularVelocity:0,linearDamping:0,angularDamping:0,fixedRotation:!1,bullet:!1,gravityScale:1,allowSleep:!0,awake:!0,active:!0,userData:null},Dt=function(){function t(t,e){this.style={},this.appData={},e=n(e,Rt),this.m_world=t,this.m_awakeFlag=e.awake,this.m_autoSleepFlag=e.allowSleep,this.m_bulletFlag=e.bullet,this.m_fixedRotationFlag=e.fixedRotation,this.m_activeFlag=e.active,this.m_islandFlag=!1,this.m_toiFlag=!1,this.m_userData=e.userData,this.m_type=e.type,this.m_type==Lt?(this.m_mass=1,this.m_invMass=1):(this.m_mass=0,this.m_invMass=0),this.m_I=0,this.m_invI=0,this.m_xf=xt.identity(),this.m_xf.p.setVec2(e.position),this.m_xf.q.setAngle(e.angle),this.m_sweep=new vt,this.m_sweep.setTransform(this.m_xf),this.c_velocity=new gt,this.c_position=new Bt,this.m_force=y.zero(),this.m_torque=0,this.m_linearVelocity=y.clone(e.linearVelocity),this.m_angularVelocity=e.angularVelocity,this.m_linearDamping=e.linearDamping,this.m_angularDamping=e.angularDamping,this.m_gravityScale=e.gravityScale,this.m_sleepTime=0,this.m_jointList=null,this.m_contactList=null,this.m_fixtureList=null,this.m_prev=null,this.m_next=null,this.m_destroyed=!1}return t.prototype._serialize=function(){for(var t=[],e=this.m_fixtureList;e;e=e.m_next)t.push(e);return{type:this.m_type,bullet:this.m_bulletFlag,position:this.m_xf.p,angle:this.m_xf.q.getAngle(),linearVelocity:this.m_linearVelocity,angularVelocity:this.m_angularVelocity,fixtures:t}},t._deserialize=function(e,i,o){var n=new t(i,e);if(e.fixtures)for(var s=e.fixtures.length-1;s>=0;s--){var r=o(It,e.fixtures[s],n);n._addFixture(r)}return n},t.prototype.isWorldLocked=function(){return!(!this.m_world||!this.m_world.isLocked())},t.prototype.getWorld=function(){return this.m_world},t.prototype.getNext=function(){return this.m_next},t.prototype.setUserData=function(t){this.m_userData=t},t.prototype.getUserData=function(){return this.m_userData},t.prototype.getFixtureList=function(){return this.m_fixtureList},t.prototype.getJointList=function(){return this.m_jointList},t.prototype.getContactList=function(){return this.m_contactList},t.prototype.isStatic=function(){return this.m_type==zt},t.prototype.isDynamic=function(){return this.m_type==Lt},t.prototype.isKinematic=function(){return this.m_type==Ft},t.prototype.setStatic=function(){return this.setType(zt),this},t.prototype.setDynamic=function(){return this.setType(Lt),this},t.prototype.setKinematic=function(){return this.setType(Ft),this},t.prototype.getType=function(){return this.m_type},t.prototype.setType=function(t){if(1!=this.isWorldLocked()&&this.m_type!=t){this.m_type=t,this.resetMassData(),this.m_type==zt&&(this.m_linearVelocity.setZero(),this.m_angularVelocity=0,this.m_sweep.forward(),this.synchronizeFixtures()),this.setAwake(!0),this.m_force.setZero(),this.m_torque=0;for(var e=this.m_contactList;e;){var i=e;e=e.next,this.m_world.destroyContact(i.contact)}this.m_contactList=null;for(var o=this.m_world.m_broadPhase,n=this.m_fixtureList;n;n=n.m_next)for(var s=0;s0&&this.setAwake(!0),this.m_linearVelocity.setVec2(t))},t.prototype.getAngularVelocity=function(){return this.m_angularVelocity},t.prototype.setAngularVelocity=function(t){this.m_type!=zt&&(t*t>0&&this.setAwake(!0),this.m_angularVelocity=t)},t.prototype.getLinearDamping=function(){return this.m_linearDamping},t.prototype.setLinearDamping=function(t){this.m_linearDamping=t},t.prototype.getAngularDamping=function(){return this.m_angularDamping},t.prototype.setAngularDamping=function(t){this.m_angularDamping=t},t.prototype.getGravityScale=function(){return this.m_gravityScale},t.prototype.setGravityScale=function(t){this.m_gravityScale=t},t.prototype.getMass=function(){return this.m_mass},t.prototype.getInertia=function(){return this.m_I+this.m_mass*y.dot(this.m_sweep.localCenter,this.m_sweep.localCenter)},t.prototype.getMassData=function(t){t.mass=this.m_mass,t.I=this.getInertia(),O(t.center,this.m_sweep.localCenter)},t.prototype.resetMassData=function(){if(this.m_mass=0,this.m_invMass=0,this.m_I=0,this.m_invI=0,j(this.m_sweep.localCenter),this.isStatic()||this.isKinematic())return O(this.m_sweep.c0,this.m_xf.p),O(this.m_sweep.c,this.m_xf.p),void(this.m_sweep.a0=this.m_sweep.a);j(qt);for(var t=this.m_fixtureList;t;t=t.m_next)if(0!=t.m_density){var e={mass:0,center:k(0,0),I:0};t.getMassData(e),this.m_mass+=e.mass,H(qt,e.mass,e.center),this.m_I+=e.I}this.m_mass>0?(this.m_invMass=1/this.m_mass,W(qt,this.m_invMass,qt)):(this.m_mass=1,this.m_invMass=1),this.m_I>0&&0==this.m_fixedRotationFlag?(this.m_I-=this.m_mass*$(qt,qt),this.m_invI=1/this.m_I):(this.m_I=0,this.m_invI=0),O(kt,this.m_sweep.c),this.m_sweep.setLocalCenter(qt,this.m_xf),E(Ot,this.m_sweep.c,kt),G(jt,this.m_angularVelocity,Ot),R(this.m_linearVelocity,jt)},t.prototype.setMassData=function(t){1!=this.isWorldLocked()&&this.m_type==Lt&&(this.m_invMass=0,this.m_I=0,this.m_invI=0,this.m_mass=t.mass,this.m_mass<=0&&(this.m_mass=1),this.m_invMass=1/this.m_mass,t.I>0&&0==this.m_fixedRotationFlag&&(this.m_I=t.I-this.m_mass*$(t.center,t.center),this.m_invI=1/this.m_I),O(kt,this.m_sweep.c),this.m_sweep.setLocalCenter(t.center,this.m_xf),E(Ot,this.m_sweep.c,kt),G(jt,this.m_angularVelocity,Ot),R(this.m_linearVelocity,jt))},t.prototype.applyForce=function(t,e,i){void 0===i&&(i=!0),this.m_type==Lt&&(i&&0==this.m_awakeFlag&&this.setAwake(!0),this.m_awakeFlag&&(this.m_force.add(t),this.m_torque+=y.crossVec2Vec2(y.sub(e,this.m_sweep.c),t)))},t.prototype.applyForceToCenter=function(t,e){void 0===e&&(e=!0),this.m_type==Lt&&(e&&0==this.m_awakeFlag&&this.setAwake(!0),this.m_awakeFlag&&this.m_force.add(t))},t.prototype.applyTorque=function(t,e){void 0===e&&(e=!0),this.m_type==Lt&&(e&&0==this.m_awakeFlag&&this.setAwake(!0),this.m_awakeFlag&&(this.m_torque+=t))},t.prototype.applyLinearImpulse=function(t,e,i){void 0===i&&(i=!0),this.m_type==Lt&&(i&&0==this.m_awakeFlag&&this.setAwake(!0),this.m_awakeFlag&&(this.m_linearVelocity.addMul(this.m_invMass,t),this.m_angularVelocity+=this.m_invI*y.crossVec2Vec2(y.sub(e,this.m_sweep.c),t)))},t.prototype.applyAngularImpulse=function(t,e){void 0===e&&(e=!0),this.m_type==Lt&&(e&&0==this.m_awakeFlag&&this.setAwake(!0),this.m_awakeFlag&&(this.m_angularVelocity+=this.m_invI*t))},t.prototype.shouldCollide=function(t){if(this.m_type!=Lt&&t.m_type!=Lt)return!1;for(var e=this.m_jointList;e;e=e.next)if(e.other==t&&0==e.joint.m_collideConnected)return!1;return!0},t.prototype._addFixture=function(t){if(1==this.isWorldLocked())return null;if(this.m_activeFlag){var e=this.m_world.m_broadPhase;t.createProxies(e,this.m_xf)}return t.m_next=this.m_fixtureList,this.m_fixtureList=t,t.m_density>0&&this.resetMassData(),this.m_world.m_newFixture=!0,t},t.prototype.createFixture=function(t,e){if(1==this.isWorldLocked())return null;var i=new It(this,t,e);return this._addFixture(i),i},t.prototype.destroyFixture=function(t){if(1!=this.isWorldLocked()){if(this.m_fixtureList===t)this.m_fixtureList=t.m_next;else for(var e=this.m_fixtureList;null!=e;){if(e.m_next===t){e.m_next=t.m_next;break}e=e.m_next}for(var i=this.m_contactList;i;){var o=i.contact;i=i.next;var n=o.getFixtureA(),s=o.getFixtureB();t!=n&&t!=s||this.m_world.destroyContact(o)}if(this.m_activeFlag){var r=this.m_world.m_broadPhase;t.destroyProxies(r)}t.m_body=null,t.m_next=null,this.m_world.publish("remove-fixture",t),this.resetMassData()}},t.prototype.getWorldPoint=function(t){return xt.mulVec2(this.m_xf,t)},t.prototype.getWorldVector=function(t){return pt.mulVec2(this.m_xf.q,t)},t.prototype.getLocalPoint=function(t){return xt.mulTVec2(this.m_xf,t)},t.prototype.getLocalVector=function(t){return pt.mulTVec2(this.m_xf.q,t)},t.STATIC="static",t.KINEMATIC="kinematic",t.DYNAMIC="dynamic",t}(),Et=function(){this.other=null,this.joint=null,this.prev=null,this.next=null},Yt=function(){function t(t,e,i){this.m_type="unknown-joint",this.m_prev=null,this.m_next=null,this.m_edgeA=new Et,this.m_edgeB=new Et,this.m_islandFlag=!1,this.style={},this.appData={},e="bodyA"in t?t.bodyA:e,i="bodyB"in t?t.bodyB:i,this.m_bodyA=e,this.m_bodyB=i,this.m_collideConnected=!!t.collideConnected,this.m_userData=t.userData}return t.prototype.isActive=function(){return this.m_bodyA.isActive()&&this.m_bodyB.isActive()},t.prototype.getType=function(){return this.m_type},t.prototype.getBodyA=function(){return this.m_bodyA},t.prototype.getBodyB=function(){return this.m_bodyB},t.prototype.getNext=function(){return this.m_next},t.prototype.getUserData=function(){return this.m_userData},t.prototype.setUserData=function(t){this.m_userData=t},t.prototype.getCollideConnected=function(){return this.m_collideConnected},t.prototype.shiftOrigin=function(t){},t.prototype._resetAnchors=function(t){return this._reset(t)},t}(),Wt={gjkCalls:0,gjkIters:0,gjkMaxIters:0,toiTime:0,toiMaxTime:0,toiCalls:0,toiIters:0,toiMaxIters:0,toiRootIters:0,toiMaxRootIters:0,toString:function(t){t="string"==typeof t?t:"\n";var e="";for(var i in this)"function"!=typeof this[i]&&"object"!=typeof this[i]&&(e+=i+": "+this[i]+t);return e}},Ht=function(){return Date.now()},Xt=function(t){return Date.now()-t},Jt=Math.max,Ut=k(0,0),Kt=k(0,0),Zt=k(0,0),Gt=k(0,0),Qt=k(0,0),$t=k(0,0),te=k(0,0);Wt.gjkCalls=0,Wt.gjkIters=0,Wt.gjkMaxIters=0;var ee=function(){function t(){this.proxyA=new se,this.proxyB=new se,this.transformA=xt.identity(),this.transformB=xt.identity(),this.useRadii=!1}return t.prototype.recycle=function(){this.proxyA.recycle(),this.proxyB.recycle(),this.transformA.setIdentity(),this.transformB.setIdentity(),this.useRadii=!1},t}(),ie=function(){function t(){this.pointA=k(0,0),this.pointB=k(0,0),this.distance=0,this.iterations=0}return t.prototype.recycle=function(){j(this.pointA),j(this.pointB),this.distance=0,this.iterations=0},t}(),oe=function(){function t(){this.metric=0,this.indexA=[],this.indexB=[],this.count=0}return t.prototype.recycle=function(){this.metric=0,this.indexA.length=0,this.indexB.length=0,this.count=0},t}(),ne=function(t,e,i){++Wt.gjkCalls;var o=i.proxyA,n=i.proxyB,s=i.transformA,a=i.transformB;me.recycle(),me.readCache(e,o,s,n,a);for(var h=me.m_v,c=b.maxDistanceIterations,m=[],l=[],u=0,_=0;_v+x&&t.distance>r)t.distance-=v+x,E(Kt,t.pointB,t.pointA),K(Kt),H(t.pointA,v,Kt),X(t.pointB,x,Kt);else{var g=E(Ut,t.pointA,t.pointB);O(t.pointA,g),O(t.pointB,g),t.distance=0}}},se=function(){function t(){this.m_vertices=[],this.m_count=0,this.m_radius=0}return t.prototype.recycle=function(){this.m_vertices.length=0,this.m_count=0,this.m_radius=0},t.prototype.getVertexCount=function(){return this.m_count},t.prototype.getVertex=function(t){return this.m_vertices[t]},t.prototype.getSupport=function(t){for(var e=-1,i=-1/0,o=0;oi&&(e=o,i=n)}return e},t.prototype.getSupportVertex=function(t){return this.m_vertices[this.getSupport(t)]},t.prototype.set=function(t,e){t.computeDistanceProxy(this,e)},t.prototype.setVertices=function(t,e,i){this.m_vertices=t,this.m_count=e,this.m_radius=i},t}(),re=function(){function t(){this.wA=k(0,0),this.indexA=0,this.wB=k(0,0),this.indexB=0,this.w=k(0,0),this.a=0}return t.prototype.recycle=function(){this.indexA=0,this.indexB=0,j(this.wA),j(this.wB),j(this.w),this.a=0},t.prototype.set=function(t){this.indexA=t.indexA,this.indexB=t.indexB,O(this.wA,t.wA),O(this.wB,t.wB),O(this.w,t.w),this.a=t.a},t}(),ae=k(0,0),he=k(0,0),ce=function(){function t(){this.m_v1=new re,this.m_v2=new re,this.m_v3=new re,this.m_v=[this.m_v1,this.m_v2,this.m_v3]}return t.prototype.recycle=function(){this.m_v1.recycle(),this.m_v2.recycle(),this.m_v3.recycle(),this.m_count=0},t.prototype.toString=function(){return 3===this.m_count?["+"+this.m_count,this.m_v1.a,this.m_v1.wA.x,this.m_v1.wA.y,this.m_v1.wB.x,this.m_v1.wB.y,this.m_v2.a,this.m_v2.wA.x,this.m_v2.wA.y,this.m_v2.wB.x,this.m_v2.wB.y,this.m_v3.a,this.m_v3.wA.x,this.m_v3.wA.y,this.m_v3.wB.x,this.m_v3.wB.y].toString():2===this.m_count?["+"+this.m_count,this.m_v1.a,this.m_v1.wA.x,this.m_v1.wA.y,this.m_v1.wB.x,this.m_v1.wB.y,this.m_v2.a,this.m_v2.wA.x,this.m_v2.wA.y,this.m_v2.wB.x,this.m_v2.wB.y].toString():1===this.m_count?["+"+this.m_count,this.m_v1.a,this.m_v1.wA.x,this.m_v1.wA.y,this.m_v1.wB.x,this.m_v1.wB.y].toString():"+"+this.m_count},t.prototype.readCache=function(t,e,i,o,n){this.m_count=t.count;for(var s=0;s1){var c=t.metric,m=this.getMetric();(m<.5*c||2*c0?q(ae,-Zt.y,Zt.x):q(ae,Zt.y,-Zt.x);default:return j(ae)}},t.prototype.getClosestPoint=function(){var t=this.m_v1,e=this.m_v2;switch(this.m_v3,this.m_count){case 0:return j(he);case 1:return O(he,t.w);case 2:return J(he,t.a,t.w,e.a,e.w);case 3:default:return j(he)}},t.prototype.getWitnessPoints=function(t,e){var i=this.m_v1,o=this.m_v2,n=this.m_v3;switch(this.m_count){case 0:break;case 1:O(t,i.wA),O(e,i.wB);break;case 2:J(t,i.a,i.wA,o.a,o.wA),J(e,i.a,i.wB,o.a,o.wB);break;case 3:U(t,i.a,i.wA,o.a,o.wA,n.a,n.wA),O(e,t)}},t.prototype.getMetric=function(){switch(this.m_count){case 0:case 1:return 0;case 2:return et(this.m_v1.w,this.m_v2.w);case 3:return Q(E($t,this.m_v2.w,this.m_v1.w),E(te,this.m_v3.w,this.m_v1.w));default:return 0}},t.prototype.solve=function(){switch(this.m_count){case 1:break;case 2:this.solve2();break;case 3:this.solve3()}},t.prototype.solve2=function(){var t=this.m_v1.w,e=this.m_v2.w;E(Zt,e,t);var i=-$(t,Zt);if(i<=0)return this.m_v1.a=1,void(this.m_count=1);var o=$(e,Zt);if(o<=0)return this.m_v2.a=1,this.m_count=1,void this.m_v1.set(this.m_v2);var n=1/(o+i);this.m_v1.a=o*n,this.m_v2.a=i*n,this.m_count=2},t.prototype.solve3=function(){var t=this.m_v1.w,e=this.m_v2.w,i=this.m_v3.w;E(Zt,e,t);var o=$(t,Zt),n=$(e,Zt),s=-o;E(Gt,i,t);var r=$(t,Gt),a=$(i,Gt),h=-r;E(Qt,i,e);var c=$(e,Qt),m=$(i,Qt),l=-c,u=Q(Zt,Gt),_=u*Q(e,i),p=u*Q(i,t),y=u*Q(t,e);if(s<=0&&h<=0)return this.m_v1.a=1,void(this.m_count=1);if(n>0&&s>0&&y<=0){var f=1/(n+s);return this.m_v1.a=n*f,this.m_v2.a=s*f,void(this.m_count=2)}if(a>0&&h>0&&p<=0){var d=1/(a+h);return this.m_v1.a=a*d,this.m_v3.a=h*d,this.m_count=2,void this.m_v2.set(this.m_v3)}if(n<=0&&l<=0)return this.m_v2.a=1,this.m_count=1,void this.m_v1.set(this.m_v2);if(a<=0&&m<=0)return this.m_v3.a=1,this.m_count=1,void this.m_v1.set(this.m_v3);if(m>0&&l>0&&_<=0){var v=1/(m+l);return this.m_v2.a=m*v,this.m_v3.a=l*v,this.m_count=2,void this.m_v1.set(this.m_v3)}var x=1/(_+p+y);this.m_v1.a=_*x,this.m_v2.a=p*x,this.m_v3.a=y*x,this.m_count=3},t}(),me=new ce,le=new ee,ue=new oe,_e=new ie,pe=function(t,e,i,o,n,s){return le.recycle(),le.proxyA.set(t,e),le.proxyB.set(i,o),rt(le.transformA,n),rt(le.transformB,s),le.useRadii=!0,_e.recycle(),ue.recycle(),ne(_e,ue,le),_e.distance<1e-8};ne.testOverlap=pe,ne.Input=ee,ne.Output=ie,ne.Proxy=se,ne.Cache=oe;var ye,fe=function(){function t(){this.proxyA=new se,this.proxyB=new se,this.transformA=xt.identity(),this.transformB=xt.identity(),this.translationB=y.zero()}return t.prototype.recycle=function(){this.proxyA.recycle(),this.proxyB.recycle(),this.transformA.setIdentity(),this.transformB.setIdentity(),j(this.translationB)},t}(),de=function(){this.point=y.zero(),this.normal=y.zero(),this.lambda=1,this.iterations=0},ve=function(t,e){t.iterations=0,t.lambda=1,t.normal.setZero(),t.point.setZero();var i=e.proxyA,o=e.proxyB,n=Jt(i.m_radius,b.polygonRadius),s=n+Jt(o.m_radius,b.polygonRadius),r=e.transformA,a=e.transformB,h=e.translationB,c=y.zero(),m=0,l=new ce;l.m_count=0;for(var u=l.m_v,_=i.getSupport(pt.mulTVec2(r.q,y.neg(h))),p=xt.mulVec2(r,i.getVertex(_)),f=o.getSupport(pt.mulTVec2(a.q,h)),d=xt.mulVec2(a,o.getVertex(f)),v=y.sub(p,d),x=Jt(b.polygonRadius,s-b.polygonRadius),g=.5*b.linearSlop,A=0;A<20&&v.length()-x>g;){t.iterations+=1,_=i.getSupport(pt.mulTVec2(r.q,y.neg(v))),p=xt.mulVec2(r,i.getVertex(_)),f=o.getSupport(pt.mulTVec2(a.q,v)),d=xt.mulVec2(a,o.getVertex(f));var B=y.sub(p,d);v.normalize();var w=y.dot(v,B),C=y.dot(v,h);if(w-x>m*C){if(C<=0)return!1;if((m=(w-x)/C)>1)return!1;c.setMul(-1,v),l.m_count=0}var M=u[l.m_count];switch(M.indexA=f,M.wA=y.combine(1,d,m,h),M.indexB=_,M.wB=p,M.w=y.sub(M.wB,M.wA),M.a=1,l.m_count+=1,l.m_count){case 1:break;case 2:l.solve2();break;case 3:l.solve3()}if(3==l.m_count)return!1;v.setVec2(l.getClosestPoint()),++A}if(0==A)return!1;var V=y.zero(),S=y.zero();return l.getWitnessPoints(S,V),v.lengthSquared()>0&&(c.setMul(-1,v),c.normalize()),t.point=y.combine(1,V,n,c),t.normal=c,t.lambda=m,t.iterations=A,!0},xe=Math.abs,ge=Math.max,be=function(){function t(){this.proxyA=new se,this.proxyB=new se,this.sweepA=new vt,this.sweepB=new vt}return t.prototype.recycle=function(){this.proxyA.recycle(),this.proxyB.recycle(),this.sweepA.recycle(),this.sweepB.recycle(),this.tMax=-1},t}();t.TOIOutputState=void 0,(ye=t.TOIOutputState||(t.TOIOutputState={}))[ye.e_unset=-1]="e_unset",ye[ye.e_unknown=0]="e_unknown",ye[ye.e_failed=1]="e_failed",ye[ye.e_overlapped=2]="e_overlapped",ye[ye.e_touching=3]="e_touching",ye[ye.e_separated=4]="e_separated";var Ae=function(){function e(){this.state=t.TOIOutputState.e_unset,this.t=-1}return e.prototype.recycle=function(){this.state=t.TOIOutputState.e_unset,this.t=-1},e}();Wt.toiTime=0,Wt.toiMaxTime=0,Wt.toiCalls=0,Wt.toiIters=0,Wt.toiMaxIters=0,Wt.toiRootIters=0,Wt.toiMaxRootIters=0;var Be,we=new ee,Ce=new ie,Me=new oe,Ve=st(0,0,0),Se=st(0,0,0),Pe=k(0,0),Te=k(0,0),Ie=k(0,0),ze=k(0,0),Fe=k(0,0),Le=k(0,0),ke=k(0,0),qe=k(0,0),Oe=function(e,i){var o=Ht();++Wt.toiCalls,e.state=t.TOIOutputState.e_unknown,e.t=i.tMax;var n=i.proxyA,s=i.proxyB,r=i.sweepA,a=i.sweepB;r.normalize(),a.normalize();var h=i.tMax,c=n.m_radius+s.m_radius,m=ge(b.linearSlop,c-3*b.linearSlop),l=.25*b.linearSlop,u=0,_=b.maxTOIIterations,p=0;for(Me.recycle(),we.proxyA.setVertices(n.m_vertices,n.m_count,n.m_radius),we.proxyB.setVertices(s.m_vertices,s.m_count,s.m_radius),we.useRadii=!1;;){if(r.getTransform(Ve,u),a.getTransform(Se,u),rt(we.transformA,Ve),rt(we.transformB,Se),ne(Ce,Me,we),Ce.distance<=0){e.state=t.TOIOutputState.e_overlapped,e.t=0;break}if(Ce.distancem+l){e.state=t.TOIOutputState.e_separated,e.t=h,y=!0;break}if(v>m-l){u=f;break}var x=je.evaluate(u);if(xm?(A=w,x=C):(B=w,v=C),50===g)break}if(Wt.toiMaxRootIters=ge(Wt.toiMaxRootIters,g),++d===b.maxPolygonVertices)break}if(++p,++Wt.toiIters,y)break;if(p===_){e.state=t.TOIOutputState.e_failed,e.t=u;break}}Wt.toiMaxIters=ge(Wt.toiMaxIters,p);var M=Xt(o);Wt.toiMaxTime=ge(Wt.toiMaxTime,M),Wt.toiTime+=M,je.recycle()};!function(t){t[t.e_unset=-1]="e_unset",t[t.e_points=1]="e_points",t[t.e_faceA=2]="e_faceA",t[t.e_faceB=3]="e_faceB"}(Be||(Be={}));var je=new(function(){function t(){this.m_proxyA=null,this.m_proxyB=null,this.m_sweepA=null,this.m_sweepB=null,this.m_type=Be.e_unset,this.m_localPoint=k(0,0),this.m_axis=k(0,0),this.indexA=-1,this.indexB=-1}return t.prototype.recycle=function(){this.m_proxyA=null,this.m_proxyB=null,this.m_sweepA=null,this.m_sweepB=null,this.m_type=Be.e_unset,j(this.m_localPoint),j(this.m_axis),this.indexA=-1,this.indexB=-1},t.prototype.initialize=function(t,e,i,o,n,s){var r=t.count;if(this.m_proxyA=e,this.m_proxyB=o,this.m_sweepA=i,this.m_sweepB=n,this.m_sweepA.getTransform(Ve,s),this.m_sweepB.getTransform(Se,s),1===r){this.m_type=Be.e_points;var a=this.m_proxyA.getVertex(t.indexA[0]),h=this.m_proxyB.getVertex(t.indexB[0]);return at(Te,Ve,a),at(Ie,Se,h),E(this.m_axis,Ie,Te),p=function(t){var e=L(t.x*t.x+t.y*t.y);if(0!==e){var i=1/e;t.x*=i,t.y*=i}return e}(this.m_axis)}if(t.indexA[0]===t.indexA[1]){this.m_type=Be.e_faceB;var c=o.getVertex(t.indexB[0]),m=o.getVertex(t.indexB[1]);Z(this.m_axis,E(Pe,m,c),1),K(this.m_axis),ot(ze,Se.q,this.m_axis),J(this.m_localPoint,.5,c,.5,m),at(Ie,Se,this.m_localPoint);var l=e.getVertex(t.indexA[0]);return(p=$(xt.mulVec2(Ve,l),ze)-$(Ie,ze))<0&&(N(this.m_axis),p=-p),p}this.m_type=Be.e_faceA;var u=this.m_proxyA.getVertex(t.indexA[0]),_=this.m_proxyA.getVertex(t.indexA[1]);Z(this.m_axis,E(Pe,_,u),1),K(this.m_axis),ot(ze,Ve.q,this.m_axis),J(this.m_localPoint,.5,u,.5,_),at(Te,Ve,this.m_localPoint);var p,y=this.m_proxyB.getVertex(t.indexB[0]);return at(Ie,Se,y),(p=$(Ie,ze)-$(Te,ze))<0&&(N(this.m_axis),p=-p),p},t.prototype.compute=function(t,e){switch(this.m_sweepA.getTransform(Ve,e),this.m_sweepB.getTransform(Se,e),this.m_type){case Be.e_points:return t&&(nt(Fe,Ve.q,this.m_axis),nt(Le,Se.q,W(Pe,-1,this.m_axis)),this.indexA=this.m_proxyA.getSupport(Fe),this.indexB=this.m_proxyB.getSupport(Le)),O(ke,this.m_proxyA.getVertex(this.indexA)),O(qe,this.m_proxyB.getVertex(this.indexB)),at(Te,Ve,ke),at(Ie,Se,qe),$(Ie,this.m_axis)-$(Te,this.m_axis);case Be.e_faceA:return ot(ze,Ve.q,this.m_axis),at(Te,Ve,this.m_localPoint),t&&(nt(Le,Se.q,W(Pe,-1,ze)),this.indexA=-1,this.indexB=this.m_proxyB.getSupport(Le)),O(qe,this.m_proxyB.getVertex(this.indexB)),at(Ie,Se,qe),$(Ie,ze)-$(Te,ze);case Be.e_faceB:return ot(ze,Se.q,this.m_axis),at(Ie,Se,this.m_localPoint),t&&(nt(Fe,Ve.q,W(Pe,-1,ze)),this.indexB=-1,this.indexA=this.m_proxyA.getSupport(Fe)),O(ke,this.m_proxyA.getVertex(this.indexA)),at(Te,Ve,ke),$(Te,ze)-$(Ie,ze);default:return t&&(this.indexA=-1,this.indexB=-1),0}},t.prototype.findMinSeparation=function(t){return this.compute(!0,t)},t.prototype.evaluate=function(t){return this.compute(!1,t)},t}());Oe.Input=be,Oe.Output=Ae;var Ne=Math.abs,Re=Math.sqrt,De=Math.min,Ee=function(){function t(){this.dt=0,this.inv_dt=0,this.velocityIterations=0,this.positionIterations=0,this.warmStarting=!1,this.blockSolve=!0,this.inv_dt0=0,this.dtRatio=1}return t.prototype.reset=function(t){this.dt>0&&(this.inv_dt0=this.inv_dt),this.dt=t,this.inv_dt=0==t?0:1/t,this.dtRatio=t*this.inv_dt0},t}(),Ye=new Ee,We=k(0,0),He=k(0,0),Xe=k(0,0),Je=new be,Ue=new Ae,Ke=new vt,Ze=new vt,Ge=new vt,Qe=function(){function t(t){this.contact=t,this.normals=[],this.tangents=[]}return t.prototype.recycle=function(){this.normals.length=0,this.tangents.length=0},Object.defineProperty(t.prototype,"normalImpulses",{get:function(){var t=this.contact,e=this.normals;e.length=0;for(var i=0;i0;){i=s.pop();if(this.addBody(i),i.m_awakeFlag=!0,!i.isStatic()){for(var a=i.m_contactList;a;a=a.next){var h=a.contact;if(!h.m_islandFlag&&(0!=h.isEnabled()&&0!=h.isTouching())){var c=h.m_fixtureA.m_isSensor,m=h.m_fixtureB.m_isSensor;if(!c&&!m)this.addContact(h),h.m_islandFlag=!0,(u=a.other).m_islandFlag||(s.push(u),u.m_islandFlag=!0)}}for(var l=i.m_jointList;l;l=l.next){var u;if(1!=l.joint.m_islandFlag)0!=(u=l.other).isActive()&&(this.addJoint(l.joint),l.joint.m_islandFlag=!0,u.m_islandFlag||(s.push(u),u.m_islandFlag=!0))}}}this.solveIsland(t);for(var _=0;_b.maxTranslationSquared){var l=b.maxTranslation/Re(m);Y(He,l)}var u=n*h;if(u*u>b.maxRotationSquared)h*=l=b.maxRotation/Ne(u);H(We,n,He),a+=n*h,O(r.c_position.c,We),r.c_position.a=a,O(r.c_velocity.v,He),r.c_velocity.w=h}var _=!1;for(s=0;s=-3*b.linearSlop,d=!0;for(c=0;cA||tt(r.m_linearVelocity)>g?(r.m_sleepTime=0,x=0):(r.m_sleepTime+=n,x=De(x,r.m_sleepTime)))}if(x>=b.timeToSleep&&_)for(s=0;sb.maxSubSteps)){var h=1;if(a.m_toiFlag)h=a.m_toi;else{var c=a.getFixtureA(),m=a.getFixtureB();if(c.isSensor()||m.isSensor())continue;var l=c.getBody(),u=m.getBody(),_=l.isAwake()&&!l.isStatic(),p=u.isAwake()&&!u.isStatic();if(0==_&&0==p)continue;var y=l.isBullet()||!l.isDynamic(),f=u.isBullet()||!u.isDynamic();if(0==y&&0==f)continue;var d=l.m_sweep.alpha0;l.m_sweep.alpha0=-1.5*b.linearSlop)break}O(e.m_sweep.c0,e.c_position.c),e.m_sweep.a0=e.c_position.a,O(i.m_sweep.c0,i.c_position.c),i.m_sweep.a0=i.c_position.a;for(o=0;ob.maxTranslationSquared){var u=b.maxTranslation/Re(l);Y(He,u)}var _=a*m;if(_*_>b.maxRotationSquared)m*=u=b.maxRotation/Ne(_);H(We,a,He),c+=a*m,O(h.c_position.c,We),h.c_position.a=c,O(h.c_velocity.v,He),h.c_velocity.w=m,O(h.m_sweep.c,We),h.m_sweep.a=c,O(h.m_linearVelocity,He),h.m_angularVelocity=m,h.synchronizeTransform()}this.postSolveIsland()},e.prototype.postSolveIsland=function(){for(var t=0;t1e-18)W(r,1/ni(m),mi);J(hi,1,si,o,r),J(ci,1,ri,-s,r),J(a[0],.5,hi,.5,ci),h[0]=$(E(ai,ci,hi),r);break;case t.ManifoldType.e_faceA:ot(r,i.q,this.localNormal),at(li,i,this.localPoint);for(var l=0;le?t:e}var Pi=[],Ti=function(){function t(){this.rA=k(0,0),this.rB=k(0,0),this.normalImpulse=0,this.tangentImpulse=0,this.normalMass=0,this.tangentMass=0,this.velocityBias=0}return t.prototype.recycle=function(){j(this.rA),j(this.rB),this.normalImpulse=0,this.tangentImpulse=0,this.normalMass=0,this.tangentMass=0,this.velocityBias=0},t}(),Ii=k(0,0),zi=k(0,0),Fi=k(0,0),Li=k(0,0),ki=k(0,0),qi=st(0,0,0),Oi=st(0,0,0),ji=k(0,0),Ni=k(0,0),Ri=k(0,0),Di=k(0,0),Ei=k(0,0),Yi=k(0,0),Wi=k(0,0),Hi=k(0,0),Xi=k(0,0),Ji=k(0,0),Ui=k(0,0),Ki=k(0,0),Zi=k(0,0),Gi=k(0,0),Qi=k(0,0),$i=k(0,0),to=k(0,0),eo=k(0,0),io=k(0,0),oo=function(){function e(){this.m_nodeA=new Mi(this),this.m_nodeB=new Mi(this),this.m_fixtureA=null,this.m_fixtureB=null,this.m_indexA=-1,this.m_indexB=-1,this.m_evaluateFcn=null,this.m_manifold=new pi,this.m_prev=null,this.m_next=null,this.m_toi=1,this.m_toiCount=0,this.m_toiFlag=!1,this.m_friction=0,this.m_restitution=0,this.m_tangentSpeed=0,this.m_enabledFlag=!0,this.m_islandFlag=!1,this.m_touchingFlag=!1,this.m_filterFlag=!1,this.m_bulletHitFlag=!1,this.m_impulse=new Qe(this),this.v_points=[new Ti,new Ti],this.v_normal=k(0,0),this.v_normalMass=new oi,this.v_K=new oi,this.v_pointCount=0,this.v_tangentSpeed=0,this.v_friction=0,this.v_restitution=0,this.v_invMassA=0,this.v_invMassB=0,this.v_invIA=0,this.v_invIB=0,this.p_localPoints=[k(0,0),k(0,0)],this.p_localNormal=k(0,0),this.p_localPoint=k(0,0),this.p_localCenterA=k(0,0),this.p_localCenterB=k(0,0),this.p_type=t.ManifoldType.e_unset,this.p_radiusA=0,this.p_radiusB=0,this.p_pointCount=0,this.p_invMassA=0,this.p_invMassB=0,this.p_invIA=0,this.p_invIB=0}return e.prototype.initialize=function(t,e,i,o,n){this.m_fixtureA=t,this.m_fixtureB=i,this.m_indexA=e,this.m_indexB=o,this.m_evaluateFcn=n,this.m_friction=Vi(this.m_fixtureA.m_friction,this.m_fixtureB.m_friction),this.m_restitution=Si(this.m_fixtureA.m_restitution,this.m_fixtureB.m_restitution)},e.prototype.recycle=function(){this.m_nodeA.recycle(),this.m_nodeB.recycle(),this.m_fixtureA=null,this.m_fixtureB=null,this.m_indexA=-1,this.m_indexB=-1,this.m_evaluateFcn=null,this.m_manifold.recycle(),this.m_prev=null,this.m_next=null,this.m_toi=1,this.m_toiCount=0,this.m_toiFlag=!1,this.m_friction=0,this.m_restitution=0,this.m_tangentSpeed=0,this.m_enabledFlag=!0,this.m_islandFlag=!1,this.m_touchingFlag=!1,this.m_filterFlag=!1,this.m_bulletHitFlag=!1,this.m_impulse.recycle();for(var e=0,i=this.v_points;e0;for(var p=0;p0?-w/V:0,Hi),X(Ii,y,Wi),x-=f*Q(Ei,Wi),H(Fi,d,Wi),g+=v*Q(Yi,Wi)}return O(l.c,Ii),l.a=x,O(u.c,Fi),u.a=g,s},e.prototype.initVelocityConstraint=function(t){var e=this.m_fixtureA,i=this.m_fixtureB;if(null!==e&&null!==i){var o=e.m_body,n=i.m_body;if(null!==o&&null!==n){var s=o.c_velocity,r=n.c_velocity,a=o.c_position,h=n.c_position,c=this.p_radiusA,m=this.p_radiusB,l=this.m_manifold,u=this.v_invMassA,_=this.v_invMassB,p=this.v_invIA,y=this.v_invIB,f=this.p_localCenterA,d=this.p_localCenterB;O(Ii,a.c);var v=a.a;O(zi,s.v);var x=s.w;O(Fi,h.c);var g=h.a;O(Li,r.v);var A=r.w;wt(qi,f,Ii,v),wt(Oi,d,Fi,g),Ci.recycle(),l.getWorldManifold(Ci,qi,c,Oi,m),O(this.v_normal,Ci.normal);for(var B=0;B0?1/S:0,Z(ki,this.v_normal,1);var P=Q(w.rA,ki),T=Q(w.rB,ki),I=u+_+p*P*P+y*T*T;w.tangentMass=I>0?1/I:0,w.velocityBias=0;var z=0;z+=$(this.v_normal,Li),z+=$(this.v_normal,G(io,A,w.rB)),z-=$(this.v_normal,zi),(z-=$(this.v_normal,G(io,x,w.rA)))<-b.velocityThreshold&&(w.velocityBias=-this.v_restitution*z)}if(2==this.v_pointCount&&t.blockSolve){var F=this.v_points[0],L=this.v_points[1],k=Q(F.rA,this.v_normal),q=Q(F.rB,this.v_normal),j=Q(L.rA,this.v_normal),N=Q(L.rB,this.v_normal),R=u+_+p*k*k+y*q*q,D=u+_+p*j*j+y*N*N,Y=u+_+p*k*j+y*q*N;if(R*R<1e3*(R*D-Y*Y)){this.v_K.ex.setNum(R,Y),this.v_K.ey.setNum(Y,D);var W=this.v_K.ex.x,H=this.v_K.ey.x,X=this.v_K.ex.y,J=this.v_K.ey.y,U=W*J-H*X;0!==U&&(U=1/U),this.v_normalMass.ex.x=U*J,this.v_normalMass.ey.x=-U*H,this.v_normalMass.ex.y=-U*X,this.v_normalMass.ey.y=U*W}else this.v_pointCount=1}O(a.c,Ii),a.a=v,O(s.v,zi),s.w=x,O(h.c,Fi),h.a=g,O(r.v,Li),r.w=A}}},e.prototype.warmStartConstraint=function(t){var e=this.m_fixtureA,i=this.m_fixtureB;if(null!==e&&null!==i){var o=e.m_body,n=i.m_body;if(null!==o&&null!==n){var s=o.c_velocity,r=n.c_velocity;o.c_position,n.c_position;var a=this.v_invMassA,h=this.v_invIA,c=this.v_invMassB,m=this.v_invIB;O(zi,s.v);var l=s.w;O(Li,r.v);var u=r.w;O(Hi,this.v_normal),Z(ki,Hi,1);for(var _=0;_=0&&Qi.y>=0){E($i,Qi,Gi),W(to,$i.x,Hi),W(eo,$i.y,Hi),U(zi,-a,to,-a,eo,1,zi),u-=h*(Q(B.rA,to)+Q(w.rA,eo)),U(Li,m,to,m,eo,1,Li),_+=l*(Q(B.rB,to)+Q(w.rB,eo)),B.normalImpulse=Qi.x,w.normalImpulse=Qi.y;break}if(Qi.x=-B.normalMass*Zi.x,Qi.y=0,C=0,M=this.v_K.ex.y*Qi.x+Zi.y,Qi.x>=0&&M>=0){E($i,Qi,Gi),W(to,$i.x,Hi),W(eo,$i.y,Hi),U(zi,-a,to,-a,eo,1,zi),u-=h*(Q(B.rA,to)+Q(w.rA,eo)),U(Li,m,to,m,eo,1,Li),_+=l*(Q(B.rB,to)+Q(w.rB,eo)),B.normalImpulse=Qi.x,w.normalImpulse=Qi.y;break}if(Qi.x=0,Qi.y=-w.normalMass*Zi.y,C=this.v_K.ey.x*Qi.y+Zi.x,M=0,Qi.y>=0&&C>=0){E($i,Qi,Gi),W(to,$i.x,Hi),W(eo,$i.y,Hi),U(zi,-a,to,-a,eo,1,zi),u-=h*(Q(B.rA,to)+Q(w.rA,eo)),U(Li,m,to,m,eo,1,Li),_+=l*(Q(B.rB,to)+Q(w.rB,eo)),B.normalImpulse=Qi.x,w.normalImpulse=Qi.y;break}if(Qi.x=0,Qi.y=0,C=Zi.x,M=Zi.y,C>=0&&M>=0){E($i,Qi,Gi),W(to,$i.x,Hi),W(eo,$i.y,Hi),U(zi,-a,to,-a,eo,1,zi),u-=h*(Q(B.rA,to)+Q(w.rA,eo)),U(Li,m,to,m,eo,1,Li),_+=l*(Q(B.rB,to)+Q(w.rB,eo)),B.normalImpulse=Qi.x,w.normalImpulse=Qi.y;break}break}}O(s.v,zi),s.w=u,O(r.v,Li),r.w=_}}},e.addType=function(t,e,i){Pi[t]=Pi[t]||{},Pi[t][e]=i},e.create=function(t,e,i,o){var n,s=t.m_shape.m_type,r=i.m_shape.m_type,a=Bi.allocate();if(n=Pi[s]&&Pi[s][r])a.initialize(t,e,i,o,n);else{if(!(n=Pi[r]&&Pi[r][s]))return null;a.initialize(i,o,t,e,n)}t=a.m_fixtureA,i=a.m_fixtureB,e=a.getChildIndexA(),o=a.getChildIndexB();var h=t.m_body,c=i.m_body;return a.m_nodeA.contact=a,a.m_nodeA.other=c,a.m_nodeA.prev=null,a.m_nodeA.next=h.m_contactList,null!=h.m_contactList&&(h.m_contactList.prev=a.m_nodeA),h.m_contactList=a.m_nodeA,a.m_nodeB.contact=a,a.m_nodeB.other=h,a.m_nodeB.prev=null,a.m_nodeB.next=c.m_contactList,null!=c.m_contactList&&(c.m_contactList.prev=a.m_nodeB),c.m_contactList=a.m_nodeB,0==t.isSensor()&&0==i.isSensor()&&(h.setAwake(!0),c.setAwake(!0)),a},e.destroy=function(t,e){var i=t.m_fixtureA,o=t.m_fixtureB;if(null!==i&&null!==o){var n=i.m_body,s=o.m_body;null!==n&&null!==s&&(t.isTouching()&&e.endContact(t),t.m_nodeA.prev&&(t.m_nodeA.prev.next=t.m_nodeA.next),t.m_nodeA.next&&(t.m_nodeA.next.prev=t.m_nodeA.prev),t.m_nodeA==n.m_contactList&&(n.m_contactList=t.m_nodeA.next),t.m_nodeB.prev&&(t.m_nodeB.prev.next=t.m_nodeB.next),t.m_nodeB.next&&(t.m_nodeB.next.prev=t.m_nodeB.prev),t.m_nodeB==s.m_contactList&&(s.m_contactList=t.m_nodeB.next),t.m_manifold.pointCount>0&&!i.m_isSensor&&!o.m_isSensor&&(n.setAwake(!0),s.setAwake(!0)),Bi.release(t))}},e}(),no={gravity:y.zero(),allowSleep:!0,warmStarting:!0,continuousPhysics:!0,subStepping:!1,blockSolve:!0,velocityIterations:8,positionIterations:3},so=function(){function t(e){if(!(this instanceof t))return new t(e);this.s_step=new Ee,e?y.isValid(e)&&(e={gravity:e}):e={},e=n(e,no),this.m_solver=new $e(this),this.m_broadPhase=new I,this.m_contactList=null,this.m_contactCount=0,this.m_bodyList=null,this.m_bodyCount=0,this.m_jointList=null,this.m_jointCount=0,this.m_stepComplete=!0,this.m_allowSleep=e.allowSleep,this.m_gravity=y.clone(e.gravity),this.m_clearForces=!0,this.m_newFixture=!1,this.m_locked=!1,this.m_warmStarting=e.warmStarting,this.m_continuousPhysics=e.continuousPhysics,this.m_subStepping=e.subStepping,this.m_blockSolve=e.blockSolve,this.m_velocityIterations=e.velocityIterations,this.m_positionIterations=e.positionIterations,this.m_t=0}return t.prototype._serialize=function(){for(var t=[],e=[],i=this.getBodyList();i;i=i.getNext())t.push(i);for(var o=this.getJointList();o;o=o.getNext())"function"==typeof o._serialize&&e.push(o);return{gravity:this.m_gravity,bodies:t,joints:e}},t._deserialize=function(e,i,o){if(!e)return new t;var n=new t(e.gravity);if(e.bodies)for(var s=e.bodies.length-1;s>=0;s-=1)n._addBody(o(Dt,e.bodies[s],n));if(e.joints)for(s=e.joints.length-1;s>=0;s--)n.createJoint(o(Yt,e.joints[s],n));return n},t.prototype.getBodyList=function(){return this.m_bodyList},t.prototype.getJointList=function(){return this.m_jointList},t.prototype.getContactList=function(){return this.m_contactList},t.prototype.getBodyCount=function(){return this.m_bodyCount},t.prototype.getJointCount=function(){return this.m_jointCount},t.prototype.getContactCount=function(){return this.m_contactCount},t.prototype.setGravity=function(t){this.m_gravity.set(t)},t.prototype.getGravity=function(){return this.m_gravity},t.prototype.isLocked=function(){return this.m_locked},t.prototype.setAllowSleeping=function(t){if(t!=this.m_allowSleep&&(this.m_allowSleep=t,0==this.m_allowSleep))for(var e=this.m_bodyList;e;e=e.m_next)e.setAwake(!0)},t.prototype.getAllowSleeping=function(){return this.m_allowSleep},t.prototype.setWarmStarting=function(t){this.m_warmStarting=t},t.prototype.getWarmStarting=function(){return this.m_warmStarting},t.prototype.setContinuousPhysics=function(t){this.m_continuousPhysics=t},t.prototype.getContinuousPhysics=function(){return this.m_continuousPhysics},t.prototype.setSubStepping=function(t){this.m_subStepping=t},t.prototype.getSubStepping=function(){return this.m_subStepping},t.prototype.setAutoClearForces=function(t){this.m_clearForces=t},t.prototype.getAutoClearForces=function(){return this.m_clearForces},t.prototype.clearForces=function(){for(var t=this.m_bodyList;t;t=t.getNext())t.m_force.setZero(),t.m_torque=0},t.prototype.queryAABB=function(t,e){var i=this.m_broadPhase;this.m_broadPhase.query(t,(function(t){var o=i.getUserData(t);return e(o.fixture)}))},t.prototype.rayCast=function(t,e,i){var o=this.m_broadPhase;this.m_broadPhase.rayCast({maxFraction:1,p1:t,p2:e},(function(t,e){var n=o.getUserData(e),s=n.fixture,r=n.childIndex,a={};if(s.rayCast(a,t,r)){var h=a.fraction,c=y.add(y.mulNumVec2(1-h,t.p1),y.mulNumVec2(h,t.p2));return i(s,c,a.normal,h)}return t.maxFraction}))},t.prototype.getProxyCount=function(){return this.m_broadPhase.getProxyCount()},t.prototype.getTreeHeight=function(){return this.m_broadPhase.getTreeHeight()},t.prototype.getTreeBalance=function(){return this.m_broadPhase.getTreeBalance()},t.prototype.getTreeQuality=function(){return this.m_broadPhase.getTreeQuality()},t.prototype.shiftOrigin=function(t){if(!this.m_locked){for(var e=this.m_bodyList;e;e=e.m_next)e.m_xf.p.sub(t),e.m_sweep.c0.sub(t),e.m_sweep.c.sub(t);for(var i=this.m_jointList;i;i=i.m_next)i.shiftOrigin(t);this.m_broadPhase.shiftOrigin(t)}},t.prototype._addBody=function(t){this.isLocked()||(t.m_prev=null,t.m_next=this.m_bodyList,this.m_bodyList&&(this.m_bodyList.m_prev=t),this.m_bodyList=t,++this.m_bodyCount)},t.prototype.createBody=function(t,e){if(this.isLocked())return null;var i={};t&&(y.isValid(t)?i={position:t,angle:e}:"object"==typeof t&&(i=t));var o=new Dt(this,i);return this._addBody(o),o},t.prototype.createDynamicBody=function(t,e){var i={};return t&&(y.isValid(t)?i={position:t,angle:e}:"object"==typeof t&&(i=t)),i.type="dynamic",this.createBody(i)},t.prototype.createKinematicBody=function(t,e){var i={};return t&&(y.isValid(t)?i={position:t,angle:e}:"object"==typeof t&&(i=t)),i.type="kinematic",this.createBody(i)},t.prototype.destroyBody=function(t){if(!this.isLocked()){if(t.m_destroyed)return!1;for(var e=t.m_jointList;e;){var i=e;e=e.next,this.publish("remove-joint",i.joint),this.destroyJoint(i.joint),t.m_jointList=e}t.m_jointList=null;for(var o=t.m_contactList;o;){var n=o;o=o.next,this.destroyContact(n.contact),t.m_contactList=o}t.m_contactList=null;for(var s=t.m_fixtureList;s;){var r=s;s=s.m_next,this.publish("remove-fixture",r),r.destroyProxies(this.m_broadPhase),t.m_fixtureList=s}return t.m_fixtureList=null,t.m_prev&&(t.m_prev.m_next=t.m_next),t.m_next&&(t.m_next.m_prev=t.m_prev),t==this.m_bodyList&&(this.m_bodyList=t.m_next),t.m_destroyed=!0,--this.m_bodyCount,this.publish("remove-body",t),!0}},t.prototype.createJoint=function(t){if(this.isLocked())return null;if(t.m_prev=null,t.m_next=this.m_jointList,this.m_jointList&&(this.m_jointList.m_prev=t),this.m_jointList=t,++this.m_jointCount,t.m_edgeA.joint=t,t.m_edgeA.other=t.m_bodyB,t.m_edgeA.prev=null,t.m_edgeA.next=t.m_bodyA.m_jointList,t.m_bodyA.m_jointList&&(t.m_bodyA.m_jointList.prev=t.m_edgeA),t.m_bodyA.m_jointList=t.m_edgeA,t.m_edgeB.joint=t,t.m_edgeB.other=t.m_bodyA,t.m_edgeB.prev=null,t.m_edgeB.next=t.m_bodyB.m_jointList,t.m_bodyB.m_jointList&&(t.m_bodyB.m_jointList.prev=t.m_edgeB),t.m_bodyB.m_jointList=t.m_edgeB,0==t.m_collideConnected)for(var e=t.m_bodyB.getContactList();e;e=e.next)e.other==t.m_bodyA&&e.contact.flagForFiltering();return t},t.prototype.destroyJoint=function(t){if(!this.isLocked()){t.m_prev&&(t.m_prev.m_next=t.m_next),t.m_next&&(t.m_next.m_prev=t.m_prev),t==this.m_jointList&&(this.m_jointList=t.m_next);var e=t.m_bodyA,i=t.m_bodyB;if(e.setAwake(!0),i.setAwake(!0),t.m_edgeA.prev&&(t.m_edgeA.prev.next=t.m_edgeA.next),t.m_edgeA.next&&(t.m_edgeA.next.prev=t.m_edgeA.prev),t.m_edgeA==e.m_jointList&&(e.m_jointList=t.m_edgeA.next),t.m_edgeA.prev=null,t.m_edgeA.next=null,t.m_edgeB.prev&&(t.m_edgeB.prev.next=t.m_edgeB.next),t.m_edgeB.next&&(t.m_edgeB.next.prev=t.m_edgeB.prev),t.m_edgeB==i.m_jointList&&(i.m_jointList=t.m_edgeB.next),t.m_edgeB.prev=null,t.m_edgeB.next=null,--this.m_jointCount,0==t.m_collideConnected)for(var o=i.getContactList();o;)o.other==e&&o.contact.flagForFiltering(),o=o.next;this.publish("remove-joint",t)}},t.prototype.step=function(t,e,i){if(this.publish("pre-step",t),(0|e)!==e&&(e=0),e=e||this.m_velocityIterations,i=i||this.m_positionIterations,this.m_newFixture&&(this.findNewContacts(),this.m_newFixture=!1),this.m_locked=!0,this.s_step.reset(t),this.s_step.velocityIterations=e,this.s_step.positionIterations=i,this.s_step.warmStarting=this.m_warmStarting,this.s_step.blockSolve=this.m_blockSolve,this.updateContacts(),this.m_stepComplete&&t>0){this.m_solver.solveWorld(this.s_step);for(var o=this.m_bodyList;o;o=o.getNext())0!=o.m_islandFlag&&(o.isStatic()||o.synchronizeFixtures());this.findNewContacts()}this.m_continuousPhysics&&t>0&&this.m_solver.solveWorldTOI(this.s_step),this.m_clearForces&&this.clearForces(),this.m_locked=!1,this.publish("post-step",t)},t.prototype.findNewContacts=function(){var t=this;this.m_broadPhase.updatePairs((function(e,i){return t.createContact(e,i)}))},t.prototype.createContact=function(t,e){var i=t.fixture,o=e.fixture,n=t.childIndex,s=e.childIndex,r=i.getBody(),a=o.getBody();if(r!=a){for(var h=a.getContactList();h;){if(h.other==r){var c=h.contact.getFixtureA(),m=h.contact.getFixtureB(),l=h.contact.getChildIndexA(),u=h.contact.getChildIndexB();if(c==i&&m==o&&l==n&&u==s)return;if(c==o&&m==i&&l==s&&u==n)return}h=h.next}if(0!=a.shouldCollide(r)&&0!=o.shouldCollide(i)){var _=oo.create(i,n,o,s);null!=_&&(_.m_prev=null,null!=this.m_contactList&&(_.m_next=this.m_contactList,this.m_contactList.m_prev=_),this.m_contactList=_,++this.m_contactCount)}}},t.prototype.updateContacts=function(){for(var t,e=this.m_contactList;t=e;){e=t.getNext();var i=t.getFixtureA(),o=t.getFixtureB(),n=t.getChildIndexA(),s=t.getChildIndexB(),r=i.getBody(),a=o.getBody();if(t.m_filterFlag){if(0==a.shouldCollide(r)){this.destroyContact(t);continue}if(0==o.shouldCollide(i)){this.destroyContact(t);continue}t.m_filterFlag=!1}var h=r.isAwake()&&!r.isStatic(),c=a.isAwake()&&!a.isStatic();if(0!=h||0!=c){var m=i.m_proxies[n].proxyId,l=o.m_proxies[s].proxyId;0!=this.m_broadPhase.testOverlap(m,l)?t.update(this):this.destroyContact(t)}}},t.prototype.destroyContact=function(t){t.m_prev&&(t.m_prev.m_next=t.m_next),t.m_next&&(t.m_next.m_prev=t.m_prev),t==this.m_contactList&&(this.m_contactList=t.m_next),oo.destroy(t,this),--this.m_contactCount},t.prototype.on=function(t,e){return"string"!=typeof t||"function"!=typeof e||(this._listeners||(this._listeners={}),this._listeners[t]||(this._listeners[t]=[]),this._listeners[t].push(e)),this},t.prototype.off=function(t,e){if("string"!=typeof t||"function"!=typeof e)return this;var i=this._listeners&&this._listeners[t];if(!i||!i.length)return this;var o=i.indexOf(e);return o>=0&&i.splice(o,1),this},t.prototype.publish=function(t,e,i,o){var n=this._listeners&&this._listeners[t];if(!n||!n.length)return 0;for(var s=0;s0?pt.mulVec2(i.q,m).neg():pt.mulVec2(i.q,m),!0)},e.prototype.computeAABB=function(t,e,i){at(ao,e,this.m_vertex1),at(ho,e,this.m_vertex2),v.combinePoints(t,ao,ho),v.extend(t,this.m_radius)},e.prototype.computeMass=function(t,e){t.mass=0,J(t.center,.5,this.m_vertex1,.5,this.m_vertex2),t.I=0},e.prototype.computeDistanceProxy=function(t){t.m_vertices[0]=this.m_vertex1,t.m_vertices[1]=this.m_vertex2,t.m_vertices.length=2,t.m_count=2,t.m_radius=this.m_radius},e.TYPE="edge",e}(Ct),mo=co,lo=k(0,0),uo=k(0,0),_o=function(t){function e(i,o){var n=this;return n instanceof e?((n=t.call(this)||this).m_type=e.TYPE,n.m_radius=b.polygonRadius,n.m_vertices=[],n.m_count=0,n.m_prevVertex=null,n.m_nextVertex=null,n.m_hasPrevVertex=!1,n.m_hasNextVertex=!1,n.m_isLoop=!!o,i&&i.length&&(o?n._createLoop(i):n._createChain(i)),n):new e(i,o)}return i(e,t),e.prototype._serialize=function(){var t={type:this.m_type,vertices:this.m_vertices,isLoop:this.m_isLoop,hasPrevVertex:this.m_hasPrevVertex,hasNextVertex:this.m_hasNextVertex,prevVertex:null,nextVertex:null};return this.m_prevVertex&&(t.prevVertex=this.m_prevVertex),this.m_nextVertex&&(t.nextVertex=this.m_nextVertex),t},e._deserialize=function(t,i,o){var n=[];if(t.vertices)for(var s=0;s0?(t.m_vertex0=this.m_vertices[e-1],t.m_hasVertex0=!0):(t.m_vertex0=this.m_prevVertex,t.m_hasVertex0=this.m_hasPrevVertex),eh||c===h&&i[o].yp.lengthSquared()&&(_=r)}else _=r;if(++l,u=_,_===a)break}if(l<3)this._setAsBox(1,1);else{this.m_count=l,this.m_vertices=[];for(o=0;o0)return!1}return!0},e.prototype.rayCast=function(t,e,i,o){for(var n=pt.mulTVec2(i.q,y.sub(e.p1,i.p)),s=pt.mulTVec2(i.q,y.sub(e.p2,i.p)),r=y.sub(s,n),a=0,h=e.maxFraction,c=-1,m=0;m0&&l=0&&(t.fraction=a,t.normal=pt.mulVec2(i.q,this.m_normals[c]),!0)},e.prototype.computeAABB=function(t,e,i){for(var o=1/0,n=1/0,s=-1/0,r=-1/0,a=0;a0?this.m_length=+t.length:t.length<0||(t.anchorA||t.anchorA||t.anchorA||t.anchorA)&&(this.m_length=y.distance(this.m_bodyA.getWorldPoint(this.m_localAnchorA),this.m_bodyB.getWorldPoint(this.m_localAnchorB))),Number.isFinite(t.frequencyHz)&&(this.m_frequencyHz=t.frequencyHz),Number.isFinite(t.dampingRatio)&&(this.m_dampingRatio=t.dampingRatio)},e.prototype.getLocalAnchorA=function(){return this.m_localAnchorA},e.prototype.getLocalAnchorB=function(){return this.m_localAnchorB},e.prototype.setLength=function(t){this.m_length=t},e.prototype.getLength=function(){return this.m_length},e.prototype.setFrequency=function(t){this.m_frequencyHz=t},e.prototype.getFrequency=function(){return this.m_frequencyHz},e.prototype.setDampingRatio=function(t){this.m_dampingRatio=t},e.prototype.getDampingRatio=function(){return this.m_dampingRatio},e.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)},e.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)},e.prototype.getReactionForce=function(t){return y.mulNumVec2(this.m_impulse,this.m_u).mul(t)},e.prototype.getReactionTorque=function(t){return 0},e.prototype.initVelocityConstraints=function(t){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter,this.m_localCenterB=this.m_bodyB.m_sweep.localCenter,this.m_invMassA=this.m_bodyA.m_invMass,this.m_invMassB=this.m_bodyB.m_invMass,this.m_invIA=this.m_bodyA.m_invI,this.m_invIB=this.m_bodyB.m_invI;var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyA.c_velocity.v,n=this.m_bodyA.c_velocity.w,s=this.m_bodyB.c_position.c,r=this.m_bodyB.c_position.a,a=this.m_bodyB.c_velocity.v,h=this.m_bodyB.c_velocity.w,c=pt.neo(i),m=pt.neo(r);this.m_rA=pt.mulVec2(c,y.sub(this.m_localAnchorA,this.m_localCenterA)),this.m_rB=pt.mulVec2(m,y.sub(this.m_localAnchorB,this.m_localCenterB)),this.m_u=y.sub(y.add(s,this.m_rB),y.add(e,this.m_rA));var l=this.m_u.length();l>b.linearSlop?this.m_u.mul(1/l):this.m_u.setNum(0,0);var u=y.crossVec2Vec2(this.m_rA,this.m_u),_=y.crossVec2Vec2(this.m_rB,this.m_u),p=this.m_invMassA+this.m_invIA*u*u+this.m_invMassB+this.m_invIB*_*_;if(this.m_mass=0!=p?1/p:0,this.m_frequencyHz>0){var f=l-this.m_length,d=2*Fo*this.m_frequencyHz,v=2*this.m_mass*this.m_dampingRatio*d,x=this.m_mass*d*d,g=t.dt;this.m_gamma=g*(v+g*x),this.m_gamma=0!=this.m_gamma?1/this.m_gamma:0,this.m_bias=f*g*x*this.m_gamma,p+=this.m_gamma,this.m_mass=0!=p?1/p:0}else this.m_gamma=0,this.m_bias=0;if(t.warmStarting){this.m_impulse*=t.dtRatio;var A=y.mulNumVec2(this.m_impulse,this.m_u);o.subMul(this.m_invMassA,A),n-=this.m_invIA*y.crossVec2Vec2(this.m_rA,A),a.addMul(this.m_invMassB,A),h+=this.m_invIB*y.crossVec2Vec2(this.m_rB,A)}else this.m_impulse=0;this.m_bodyA.c_velocity.v.setVec2(o),this.m_bodyA.c_velocity.w=n,this.m_bodyB.c_velocity.v.setVec2(a),this.m_bodyB.c_velocity.w=h},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,n=this.m_bodyB.c_velocity.w,s=y.add(e,y.crossNumVec2(i,this.m_rA)),r=y.add(o,y.crossNumVec2(n,this.m_rB)),a=y.dot(this.m_u,r)-y.dot(this.m_u,s),h=-this.m_mass*(a+this.m_bias+this.m_gamma*this.m_impulse);this.m_impulse+=h;var c=y.mulNumVec2(h,this.m_u);e.subMul(this.m_invMassA,c),i-=this.m_invIA*y.crossVec2Vec2(this.m_rA,c),o.addMul(this.m_invMassB,c),n+=this.m_invIB*y.crossVec2Vec2(this.m_rB,c),this.m_bodyA.c_velocity.v.setVec2(e),this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v.setVec2(o),this.m_bodyB.c_velocity.w=n},e.prototype.solvePositionConstraints=function(t){if(this.m_frequencyHz>0)return!0;var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyB.c_position.c,n=this.m_bodyB.c_position.a,s=pt.neo(i),r=pt.neo(n),a=pt.mulSub(s,this.m_localAnchorA,this.m_localCenterA),h=pt.mulSub(r,this.m_localAnchorB,this.m_localCenterB),m=y.sub(y.add(o,h),y.add(e,a)),l=c(m.normalize()-this.m_length,-b.maxLinearCorrection,b.maxLinearCorrection),u=-this.m_mass*l,_=y.mulNumVec2(u,m);return e.subMul(this.m_invMassA,_),i-=this.m_invIA*y.crossVec2Vec2(a,_),o.addMul(this.m_invMassB,_),n+=this.m_invIB*y.crossVec2Vec2(h,_),this.m_bodyA.c_position.c.setVec2(e),this.m_bodyA.c_position.a=i,this.m_bodyB.c_position.c.setVec2(o),this.m_bodyB.c_position.a=n,zo(l)0&&(this.m_angularMass=1/this.m_angularMass),t.warmStarting){this.m_linearImpulse.mul(t.dtRatio),this.m_angularImpulse*=t.dtRatio;var p=y.neo(this.m_linearImpulse.x,this.m_linearImpulse.y);i.subMul(c,p),o-=l*(y.crossVec2Vec2(this.m_rA,p)+this.m_angularImpulse),s.addMul(m,p),r+=u*(y.crossVec2Vec2(this.m_rB,p)+this.m_angularImpulse)}else this.m_linearImpulse.setZero(),this.m_angularImpulse=0;this.m_bodyA.c_velocity.v=i,this.m_bodyA.c_velocity.w=o,this.m_bodyB.c_velocity.v=s,this.m_bodyB.c_velocity.w=r},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,n=this.m_bodyB.c_velocity.w,s=this.m_invMassA,r=this.m_invMassB,a=this.m_invIA,h=this.m_invIB,m=t.dt,l=n-i,u=-this.m_angularMass*l,_=this.m_angularImpulse,p=m*this.m_maxTorque;this.m_angularImpulse=c(this.m_angularImpulse+u,-p,p),i-=a*(u=this.m_angularImpulse-_),n+=h*u;l=y.sub(y.add(o,y.crossNumVec2(n,this.m_rB)),y.add(e,y.crossNumVec2(i,this.m_rA))),u=y.neg(oi.mulVec2(this.m_linearMass,l)),_=this.m_linearImpulse;this.m_linearImpulse.add(u);p=m*this.m_maxForce;this.m_linearImpulse.lengthSquared()>p*p&&(this.m_linearImpulse.normalize(),this.m_linearImpulse.mul(p)),u=y.sub(this.m_linearImpulse,_),e.subMul(s,u),i-=a*y.crossVec2Vec2(this.m_rA,u),o.addMul(r,u),n+=h*y.crossVec2Vec2(this.m_rB,u),this.m_bodyA.c_velocity.v=e,this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v=o,this.m_bodyB.c_velocity.w=n},e.prototype.solvePositionConstraints=function(t){return!0},e.TYPE="friction-joint",e}(Yt),jo=function(){function t(t,e,i){"object"==typeof t&&null!==t?(this.ex=ro.clone(t),this.ey=ro.clone(e),this.ez=ro.clone(i)):(this.ex=ro.zero(),this.ey=ro.zero(),this.ez=ro.zero())}return t.prototype.toString=function(){return JSON.stringify(this)},t.isValid=function(t){return null!=t&&(ro.isValid(t.ex)&&ro.isValid(t.ey)&&ro.isValid(t.ez))},t.assert=function(t){},t.prototype.setZero=function(){return this.ex.setZero(),this.ey.setZero(),this.ez.setZero(),this},t.prototype.solve33=function(t){var e=this.ey.y*this.ez.z-this.ey.z*this.ez.y,i=this.ey.z*this.ez.x-this.ey.x*this.ez.z,o=this.ey.x*this.ez.y-this.ey.y*this.ez.x,n=this.ex.x*e+this.ex.y*i+this.ex.z*o;0!==n&&(n=1/n);var s=new ro;return e=this.ey.y*this.ez.z-this.ey.z*this.ez.y,i=this.ey.z*this.ez.x-this.ey.x*this.ez.z,o=this.ey.x*this.ez.y-this.ey.y*this.ez.x,s.x=n*(t.x*e+t.y*i+t.z*o),e=t.y*this.ez.z-t.z*this.ez.y,i=t.z*this.ez.x-t.x*this.ez.z,o=t.x*this.ez.y-t.y*this.ez.x,s.y=n*(this.ex.x*e+this.ex.y*i+this.ex.z*o),e=this.ey.y*t.z-this.ey.z*t.y,i=this.ey.z*t.x-this.ey.x*t.z,o=this.ey.x*t.y-this.ey.y*t.x,s.z=n*(this.ex.x*e+this.ex.y*i+this.ex.z*o),s},t.prototype.solve22=function(t){var e=this.ex.x,i=this.ey.x,o=this.ex.y,n=this.ey.y,s=e*n-i*o;0!==s&&(s=1/s);var r=y.zero();return r.x=s*(n*t.x-i*t.y),r.y=s*(e*t.y-o*t.x),r},t.prototype.getInverse22=function(t){var e=this.ex.x,i=this.ey.x,o=this.ex.y,n=this.ey.y,s=e*n-i*o;0!==s&&(s=1/s),t.ex.x=s*n,t.ey.x=-s*i,t.ex.z=0,t.ex.y=-s*o,t.ey.y=s*e,t.ey.z=0,t.ez.x=0,t.ez.y=0,t.ez.z=0},t.prototype.getSymInverse33=function(t){var e=ro.dot(this.ex,ro.cross(this.ey,this.ez));0!==e&&(e=1/e);var i=this.ex.x,o=this.ey.x,n=this.ez.x,s=this.ey.y,r=this.ez.y,a=this.ez.z;t.ex.x=e*(s*a-r*r),t.ex.y=e*(n*r-o*a),t.ex.z=e*(o*r-n*s),t.ey.x=t.ex.y,t.ey.y=e*(i*a-n*n),t.ey.z=e*(n*o-i*r),t.ez.x=t.ex.z,t.ez.y=t.ey.z,t.ez.z=e*(i*s-o*o)},t.mul=function(t,e){if(e&&"z"in e&&"y"in e&&"x"in e){var i=t.ex.x*e.x+t.ey.x*e.y+t.ez.x*e.z,o=t.ex.y*e.x+t.ey.y*e.y+t.ez.y*e.z,n=t.ex.z*e.x+t.ey.z*e.y+t.ez.z*e.z;return new ro(i,o,n)}if(e&&"y"in e&&"x"in e){i=t.ex.x*e.x+t.ey.x*e.y,o=t.ex.y*e.x+t.ey.y*e.y;return y.neo(i,o)}},t.mulVec3=function(t,e){var i=t.ex.x*e.x+t.ey.x*e.y+t.ez.x*e.z,o=t.ex.y*e.x+t.ey.y*e.y+t.ez.y*e.z,n=t.ex.z*e.x+t.ey.z*e.y+t.ez.z*e.z;return new ro(i,o,n)},t.mulVec2=function(t,e){var i=t.ex.x*e.x+t.ey.x*e.y,o=t.ex.y*e.x+t.ey.y*e.y;return y.neo(i,o)},t.add=function(e,i){return new t(ro.add(e.ex,i.ex),ro.add(e.ey,i.ey),ro.add(e.ez,i.ez))},t}(),No=Math.abs;!function(t){t[t.inactiveLimit=0]="inactiveLimit",t[t.atLowerLimit=1]="atLowerLimit",t[t.atUpperLimit=2]="atUpperLimit",t[t.equalLimits=3]="equalLimits"}(Co||(Co={}));var Ro,Do=0,Eo=0,Yo=0,Wo=0,Ho=!1,Xo=!1,Jo=function(t){function e(i,o,n,s){var r,a,h,c,m,l,u=this;return u instanceof e?(i=null!=i?i:{},o=(u=t.call(this,i,o,n)||this).m_bodyA,n=u.m_bodyB,u.m_mass=new jo,u.m_limitState=Co.inactiveLimit,u.m_type=e.TYPE,y.isValid(s)?u.m_localAnchorA=o.getLocalPoint(s):y.isValid(i.localAnchorA)?u.m_localAnchorA=y.clone(i.localAnchorA):u.m_localAnchorA=y.zero(),y.isValid(s)?u.m_localAnchorB=n.getLocalPoint(s):y.isValid(i.localAnchorB)?u.m_localAnchorB=y.clone(i.localAnchorB):u.m_localAnchorB=y.zero(),Number.isFinite(i.referenceAngle)?u.m_referenceAngle=i.referenceAngle:u.m_referenceAngle=n.getAngle()-o.getAngle(),u.m_impulse=new ro,u.m_motorImpulse=0,u.m_lowerAngle=null!==(r=i.lowerAngle)&&void 0!==r?r:Do,u.m_upperAngle=null!==(a=i.upperAngle)&&void 0!==a?a:Eo,u.m_maxMotorTorque=null!==(h=i.maxMotorTorque)&&void 0!==h?h:Yo,u.m_motorSpeed=null!==(c=i.motorSpeed)&&void 0!==c?c:Wo,u.m_enableLimit=null!==(m=i.enableLimit)&&void 0!==m?m:Ho,u.m_enableMotor=null!==(l=i.enableMotor)&&void 0!==l?l:Xo,u):new e(i,o,n,s)}return i(e,t),e.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,lowerAngle:this.m_lowerAngle,upperAngle:this.m_upperAngle,maxMotorTorque:this.m_maxMotorTorque,motorSpeed:this.m_motorSpeed,enableLimit:this.m_enableLimit,enableMotor:this.m_enableMotor,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,referenceAngle:this.m_referenceAngle}},e._deserialize=function(t,i,n){return(t=o({},t)).bodyA=n(Dt,t.bodyA,i),t.bodyB=n(Dt,t.bodyB,i),new e(t)},e.prototype._reset=function(t){t.anchorA?this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(t.anchorA)):t.localAnchorA&&this.m_localAnchorA.setVec2(t.localAnchorA),t.anchorB?this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(t.anchorB)):t.localAnchorB&&this.m_localAnchorB.setVec2(t.localAnchorB),Number.isFinite(t.referenceAngle)&&(this.m_referenceAngle=t.referenceAngle),void 0!==t.enableLimit&&(this.m_enableLimit=t.enableLimit),Number.isFinite(t.lowerAngle)&&(this.m_lowerAngle=t.lowerAngle),Number.isFinite(t.upperAngle)&&(this.m_upperAngle=t.upperAngle),Number.isFinite(t.maxMotorTorque)&&(this.m_maxMotorTorque=t.maxMotorTorque),Number.isFinite(t.motorSpeed)&&(this.m_motorSpeed=t.motorSpeed),void 0!==t.enableMotor&&(this.m_enableMotor=t.enableMotor)},e.prototype.getLocalAnchorA=function(){return this.m_localAnchorA},e.prototype.getLocalAnchorB=function(){return this.m_localAnchorB},e.prototype.getReferenceAngle=function(){return this.m_referenceAngle},e.prototype.getJointAngle=function(){var t=this.m_bodyA;return this.m_bodyB.m_sweep.a-t.m_sweep.a-this.m_referenceAngle},e.prototype.getJointSpeed=function(){var t=this.m_bodyA;return this.m_bodyB.m_angularVelocity-t.m_angularVelocity},e.prototype.isMotorEnabled=function(){return this.m_enableMotor},e.prototype.enableMotor=function(t){t!=this.m_enableMotor&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_enableMotor=t)},e.prototype.getMotorTorque=function(t){return t*this.m_motorImpulse},e.prototype.setMotorSpeed=function(t){t!=this.m_motorSpeed&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_motorSpeed=t)},e.prototype.getMotorSpeed=function(){return this.m_motorSpeed},e.prototype.setMaxMotorTorque=function(t){t!=this.m_maxMotorTorque&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_maxMotorTorque=t)},e.prototype.getMaxMotorTorque=function(){return this.m_maxMotorTorque},e.prototype.isLimitEnabled=function(){return this.m_enableLimit},e.prototype.enableLimit=function(t){t!=this.m_enableLimit&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_enableLimit=t,this.m_impulse.z=0)},e.prototype.getLowerLimit=function(){return this.m_lowerAngle},e.prototype.getUpperLimit=function(){return this.m_upperAngle},e.prototype.setLimits=function(t,e){t==this.m_lowerAngle&&e==this.m_upperAngle||(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_impulse.z=0,this.m_lowerAngle=t,this.m_upperAngle=e)},e.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)},e.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)},e.prototype.getReactionForce=function(t){return y.neo(this.m_impulse.x,this.m_impulse.y).mul(t)},e.prototype.getReactionTorque=function(t){return t*this.m_impulse.z},e.prototype.initVelocityConstraints=function(t){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter,this.m_localCenterB=this.m_bodyB.m_sweep.localCenter,this.m_invMassA=this.m_bodyA.m_invMass,this.m_invMassB=this.m_bodyB.m_invMass,this.m_invIA=this.m_bodyA.m_invI,this.m_invIB=this.m_bodyB.m_invI;var e=this.m_bodyA.c_position.a,i=this.m_bodyA.c_velocity.v,o=this.m_bodyA.c_velocity.w,n=this.m_bodyB.c_position.a,s=this.m_bodyB.c_velocity.v,r=this.m_bodyB.c_velocity.w,a=pt.neo(e),h=pt.neo(n);this.m_rA=pt.mulVec2(a,y.sub(this.m_localAnchorA,this.m_localCenterA)),this.m_rB=pt.mulVec2(h,y.sub(this.m_localAnchorB,this.m_localCenterB));var c=this.m_invMassA,m=this.m_invMassB,l=this.m_invIA,u=this.m_invIB,_=l+u===0;if(this.m_mass.ex.x=c+m+this.m_rA.y*this.m_rA.y*l+this.m_rB.y*this.m_rB.y*u,this.m_mass.ey.x=-this.m_rA.y*this.m_rA.x*l-this.m_rB.y*this.m_rB.x*u,this.m_mass.ez.x=-this.m_rA.y*l-this.m_rB.y*u,this.m_mass.ex.y=this.m_mass.ey.x,this.m_mass.ey.y=c+m+this.m_rA.x*this.m_rA.x*l+this.m_rB.x*this.m_rB.x*u,this.m_mass.ez.y=this.m_rA.x*l+this.m_rB.x*u,this.m_mass.ex.z=this.m_mass.ez.x,this.m_mass.ey.z=this.m_mass.ez.y,this.m_mass.ez.z=l+u,this.m_motorMass=l+u,this.m_motorMass>0&&(this.m_motorMass=1/this.m_motorMass),(0==this.m_enableMotor||_)&&(this.m_motorImpulse=0),this.m_enableLimit&&0==_){var p=n-e-this.m_referenceAngle;No(this.m_upperAngle-this.m_lowerAngle)<2*b.angularSlop?this.m_limitState=Co.equalLimits:p<=this.m_lowerAngle?(this.m_limitState!=Co.atLowerLimit&&(this.m_impulse.z=0),this.m_limitState=Co.atLowerLimit):p>=this.m_upperAngle?(this.m_limitState!=Co.atUpperLimit&&(this.m_impulse.z=0),this.m_limitState=Co.atUpperLimit):(this.m_limitState=Co.inactiveLimit,this.m_impulse.z=0)}else this.m_limitState=Co.inactiveLimit;if(t.warmStarting){this.m_impulse.mul(t.dtRatio),this.m_motorImpulse*=t.dtRatio;var f=y.neo(this.m_impulse.x,this.m_impulse.y);i.subMul(c,f),o-=l*(y.crossVec2Vec2(this.m_rA,f)+this.m_motorImpulse+this.m_impulse.z),s.addMul(m,f),r+=u*(y.crossVec2Vec2(this.m_rB,f)+this.m_motorImpulse+this.m_impulse.z)}else this.m_impulse.setZero(),this.m_motorImpulse=0;this.m_bodyA.c_velocity.v=i,this.m_bodyA.c_velocity.w=o,this.m_bodyB.c_velocity.v=s,this.m_bodyB.c_velocity.w=r},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,n=this.m_bodyB.c_velocity.w,s=this.m_invMassA,r=this.m_invMassB,a=this.m_invIA,h=this.m_invIB,m=a+h===0;if(this.m_enableMotor&&this.m_limitState!=Co.equalLimits&&0==m){var l=n-i-this.m_motorSpeed,u=-this.m_motorMass*l,_=this.m_motorImpulse,p=t.dt*this.m_maxMotorTorque;this.m_motorImpulse=c(this.m_motorImpulse+u,-p,p),i-=a*(u=this.m_motorImpulse-_),n+=h*u}if(this.m_enableLimit&&this.m_limitState!=Co.inactiveLimit&&0==m){var f=y.zero();f.addCombine(1,o,1,y.crossNumVec2(n,this.m_rB)),f.subCombine(1,e,1,y.crossNumVec2(i,this.m_rA));var d=n-i;l=new ro(f.x,f.y,d),u=ro.neg(this.m_mass.solve33(l));if(this.m_limitState==Co.equalLimits)this.m_impulse.add(u);else if(this.m_limitState==Co.atLowerLimit){if(this.m_impulse.z+u.z<0){var v=y.combine(-1,f,this.m_impulse.z,y.neo(this.m_mass.ez.x,this.m_mass.ez.y)),x=this.m_mass.solve22(v);u.x=x.x,u.y=x.y,u.z=-this.m_impulse.z,this.m_impulse.x+=x.x,this.m_impulse.y+=x.y,this.m_impulse.z=0}else this.m_impulse.add(u)}else if(this.m_limitState==Co.atUpperLimit){if(this.m_impulse.z+u.z>0){v=y.combine(-1,f,this.m_impulse.z,y.neo(this.m_mass.ez.x,this.m_mass.ez.y)),x=this.m_mass.solve22(v);u.x=x.x,u.y=x.y,u.z=-this.m_impulse.z,this.m_impulse.x+=x.x,this.m_impulse.y+=x.y,this.m_impulse.z=0}else this.m_impulse.add(u)}var g=y.neo(u.x,u.y);e.subMul(s,g),i-=a*(y.crossVec2Vec2(this.m_rA,g)+u.z),o.addMul(r,g),n+=h*(y.crossVec2Vec2(this.m_rB,g)+u.z)}else{(l=y.zero()).addCombine(1,o,1,y.crossNumVec2(n,this.m_rB)),l.subCombine(1,e,1,y.crossNumVec2(i,this.m_rA));u=this.m_mass.solve22(y.neg(l));this.m_impulse.x+=u.x,this.m_impulse.y+=u.y,e.subMul(s,u),i-=a*y.crossVec2Vec2(this.m_rA,u),o.addMul(r,u),n+=h*y.crossVec2Vec2(this.m_rB,u)}this.m_bodyA.c_velocity.v=e,this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v=o,this.m_bodyB.c_velocity.w=n},e.prototype.solvePositionConstraints=function(t){var e,i=this.m_bodyA.c_position.c,o=this.m_bodyA.c_position.a,n=this.m_bodyB.c_position.c,s=this.m_bodyB.c_position.a,r=pt.neo(o),a=pt.neo(s),h=0,m=this.m_invIA+this.m_invIB==0;if(this.m_enableLimit&&this.m_limitState!=Co.inactiveLimit&&0==m){var l=s-o-this.m_referenceAngle,u=0;if(this.m_limitState==Co.equalLimits){var _=c(l-this.m_lowerAngle,-b.maxAngularCorrection,b.maxAngularCorrection);u=-this.m_motorMass*_,h=No(_)}else if(this.m_limitState==Co.atLowerLimit){h=-(_=l-this.m_lowerAngle),_=c(_+b.angularSlop,-b.maxAngularCorrection,0),u=-this.m_motorMass*_}else if(this.m_limitState==Co.atUpperLimit){h=_=l-this.m_upperAngle,_=c(_-b.angularSlop,0,b.maxAngularCorrection),u=-this.m_motorMass*_}o-=this.m_invIA*u,s+=this.m_invIB*u}r.setAngle(o),a.setAngle(s);var p=pt.mulVec2(r,y.sub(this.m_localAnchorA,this.m_localCenterA)),f=pt.mulVec2(a,y.sub(this.m_localAnchorB,this.m_localCenterB));(_=y.zero()).addCombine(1,n,1,f),_.subCombine(1,i,1,p),e=_.length();var d=this.m_invMassA,v=this.m_invMassB,x=this.m_invIA,g=this.m_invIB,A=new oi;A.ex.x=d+v+x*p.y*p.y+g*f.y*f.y,A.ex.y=-x*p.x*p.y-g*f.x*f.y,A.ey.x=A.ex.y,A.ey.y=d+v+x*p.x*p.x+g*f.x*f.x;var B=y.neg(A.solve(_));return i.subMul(d,B),o-=x*y.crossVec2Vec2(p,B),n.addMul(v,B),s+=g*y.crossVec2Vec2(f,B),this.m_bodyA.c_position.c.setVec2(i),this.m_bodyA.c_position.a=o,this.m_bodyB.c_position.c.setVec2(n),this.m_bodyB.c_position.a=s,e<=b.linearSlop&&h<=b.angularSlop},e.TYPE="revolute-joint",e}(Yt),Uo=Math.abs,Ko=Math.max,Zo=Math.min;!function(t){t[t.inactiveLimit=0]="inactiveLimit",t[t.atLowerLimit=1]="atLowerLimit",t[t.atUpperLimit=2]="atUpperLimit",t[t.equalLimits=3]="equalLimits"}(Ro||(Ro={}));var Go,Qo={enableLimit:!1,lowerTranslation:0,upperTranslation:0,enableMotor:!1,maxMotorForce:0,motorSpeed:0},$o=function(t){function e(i,o,s,r,a){var h=this;return h instanceof e?(i=n(i,Qo),o=(h=t.call(this,i,o,s)||this).m_bodyA,s=h.m_bodyB,h.m_type=e.TYPE,h.m_localAnchorA=y.clone(r?o.getLocalPoint(r):i.localAnchorA||y.zero()),h.m_localAnchorB=y.clone(r?s.getLocalPoint(r):i.localAnchorB||y.zero()),h.m_localXAxisA=y.clone(a?o.getLocalVector(a):i.localAxisA||y.neo(1,0)),h.m_localXAxisA.normalize(),h.m_localYAxisA=y.crossNumVec2(1,h.m_localXAxisA),h.m_referenceAngle=Number.isFinite(i.referenceAngle)?i.referenceAngle:s.getAngle()-o.getAngle(),h.m_impulse=new ro,h.m_motorMass=0,h.m_motorImpulse=0,h.m_lowerTranslation=i.lowerTranslation,h.m_upperTranslation=i.upperTranslation,h.m_maxMotorForce=i.maxMotorForce,h.m_motorSpeed=i.motorSpeed,h.m_enableLimit=i.enableLimit,h.m_enableMotor=i.enableMotor,h.m_limitState=Ro.inactiveLimit,h.m_axis=y.zero(),h.m_perp=y.zero(),h.m_K=new jo,h):new e(i,o,s,r,a)}return i(e,t),e.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,lowerTranslation:this.m_lowerTranslation,upperTranslation:this.m_upperTranslation,maxMotorForce:this.m_maxMotorForce,motorSpeed:this.m_motorSpeed,enableLimit:this.m_enableLimit,enableMotor:this.m_enableMotor,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,localAxisA:this.m_localXAxisA,referenceAngle:this.m_referenceAngle}},e._deserialize=function(t,i,n){return(t=o({},t)).bodyA=n(Dt,t.bodyA,i),t.bodyB=n(Dt,t.bodyB,i),t.localAxisA=y.clone(t.localAxisA),new e(t)},e.prototype._reset=function(t){t.anchorA?this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(t.anchorA)):t.localAnchorA&&this.m_localAnchorA.setVec2(t.localAnchorA),t.anchorB?this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(t.anchorB)):t.localAnchorB&&this.m_localAnchorB.setVec2(t.localAnchorB),t.localAxisA&&(this.m_localXAxisA.setVec2(t.localAxisA),this.m_localYAxisA.setVec2(y.crossNumVec2(1,t.localAxisA))),Number.isFinite(t.referenceAngle)&&(this.m_referenceAngle=t.referenceAngle),void 0!==t.enableLimit&&(this.m_enableLimit=!!t.enableLimit),Number.isFinite(t.lowerTranslation)&&(this.m_lowerTranslation=t.lowerTranslation),Number.isFinite(t.upperTranslation)&&(this.m_upperTranslation=t.upperTranslation),void 0!==t.enableMotor&&(this.m_enableMotor=!!t.enableMotor),Number.isFinite(t.maxMotorForce)&&(this.m_maxMotorForce=t.maxMotorForce),Number.isFinite(t.motorSpeed)&&(this.m_motorSpeed=t.motorSpeed)},e.prototype.getLocalAnchorA=function(){return this.m_localAnchorA},e.prototype.getLocalAnchorB=function(){return this.m_localAnchorB},e.prototype.getLocalAxisA=function(){return this.m_localXAxisA},e.prototype.getReferenceAngle=function(){return this.m_referenceAngle},e.prototype.getJointTranslation=function(){var t=this.m_bodyA.getWorldPoint(this.m_localAnchorA),e=this.m_bodyB.getWorldPoint(this.m_localAnchorB),i=y.sub(e,t),o=this.m_bodyA.getWorldVector(this.m_localXAxisA);return y.dot(i,o)},e.prototype.getJointSpeed=function(){var t=this.m_bodyA,e=this.m_bodyB,i=pt.mulVec2(t.m_xf.q,y.sub(this.m_localAnchorA,t.m_sweep.localCenter)),o=pt.mulVec2(e.m_xf.q,y.sub(this.m_localAnchorB,e.m_sweep.localCenter)),n=y.add(t.m_sweep.c,i),s=y.add(e.m_sweep.c,o),r=y.sub(s,n),a=pt.mulVec2(t.m_xf.q,this.m_localXAxisA),h=t.m_linearVelocity,c=e.m_linearVelocity,m=t.m_angularVelocity,l=e.m_angularVelocity;return y.dot(r,y.crossNumVec2(m,a))+y.dot(a,y.sub(y.addCrossNumVec2(c,l,o),y.addCrossNumVec2(h,m,i)))},e.prototype.isLimitEnabled=function(){return this.m_enableLimit},e.prototype.enableLimit=function(t){t!=this.m_enableLimit&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_enableLimit=t,this.m_impulse.z=0)},e.prototype.getLowerLimit=function(){return this.m_lowerTranslation},e.prototype.getUpperLimit=function(){return this.m_upperTranslation},e.prototype.setLimits=function(t,e){t==this.m_lowerTranslation&&e==this.m_upperTranslation||(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_lowerTranslation=t,this.m_upperTranslation=e,this.m_impulse.z=0)},e.prototype.isMotorEnabled=function(){return this.m_enableMotor},e.prototype.enableMotor=function(t){t!=this.m_enableMotor&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_enableMotor=t)},e.prototype.setMotorSpeed=function(t){t!=this.m_motorSpeed&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_motorSpeed=t)},e.prototype.setMaxMotorForce=function(t){t!=this.m_maxMotorForce&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_maxMotorForce=t)},e.prototype.getMaxMotorForce=function(){return this.m_maxMotorForce},e.prototype.getMotorSpeed=function(){return this.m_motorSpeed},e.prototype.getMotorForce=function(t){return t*this.m_motorImpulse},e.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)},e.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)},e.prototype.getReactionForce=function(t){return y.combine(this.m_impulse.x,this.m_perp,this.m_motorImpulse+this.m_impulse.z,this.m_axis).mul(t)},e.prototype.getReactionTorque=function(t){return t*this.m_impulse.y},e.prototype.initVelocityConstraints=function(t){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter,this.m_localCenterB=this.m_bodyB.m_sweep.localCenter,this.m_invMassA=this.m_bodyA.m_invMass,this.m_invMassB=this.m_bodyB.m_invMass,this.m_invIA=this.m_bodyA.m_invI,this.m_invIB=this.m_bodyB.m_invI;var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyA.c_velocity.v,n=this.m_bodyA.c_velocity.w,s=this.m_bodyB.c_position.c,r=this.m_bodyB.c_position.a,a=this.m_bodyB.c_velocity.v,h=this.m_bodyB.c_velocity.w,c=pt.neo(i),m=pt.neo(r),l=pt.mulVec2(c,y.sub(this.m_localAnchorA,this.m_localCenterA)),u=pt.mulVec2(m,y.sub(this.m_localAnchorB,this.m_localCenterB)),_=y.zero();_.addCombine(1,s,1,u),_.subCombine(1,e,1,l);var p=this.m_invMassA,f=this.m_invMassB,d=this.m_invIA,v=this.m_invIB;this.m_axis=pt.mulVec2(c,this.m_localXAxisA),this.m_a1=y.crossVec2Vec2(y.add(_,l),this.m_axis),this.m_a2=y.crossVec2Vec2(u,this.m_axis),this.m_motorMass=p+f+d*this.m_a1*this.m_a1+v*this.m_a2*this.m_a2,this.m_motorMass>0&&(this.m_motorMass=1/this.m_motorMass),this.m_perp=pt.mulVec2(c,this.m_localYAxisA),this.m_s1=y.crossVec2Vec2(y.add(_,l),this.m_perp),this.m_s2=y.crossVec2Vec2(u,this.m_perp),y.crossVec2Vec2(l,this.m_perp);var x=p+f+d*this.m_s1*this.m_s1+v*this.m_s2*this.m_s2,g=d*this.m_s1+v*this.m_s2,A=d*this.m_s1*this.m_a1+v*this.m_s2*this.m_a2,B=d+v;0==B&&(B=1);var w=d*this.m_a1+v*this.m_a2,C=p+f+d*this.m_a1*this.m_a1+v*this.m_a2*this.m_a2;if(this.m_K.ex.set(x,g,A),this.m_K.ey.set(g,B,w),this.m_K.ez.set(A,w,C),this.m_enableLimit){var M=y.dot(this.m_axis,_);Uo(this.m_upperTranslation-this.m_lowerTranslation)<2*b.linearSlop?this.m_limitState=Ro.equalLimits:M<=this.m_lowerTranslation?this.m_limitState!=Ro.atLowerLimit&&(this.m_limitState=Ro.atLowerLimit,this.m_impulse.z=0):M>=this.m_upperTranslation?this.m_limitState!=Ro.atUpperLimit&&(this.m_limitState=Ro.atUpperLimit,this.m_impulse.z=0):(this.m_limitState=Ro.inactiveLimit,this.m_impulse.z=0)}else this.m_limitState=Ro.inactiveLimit,this.m_impulse.z=0;if(0==this.m_enableMotor&&(this.m_motorImpulse=0),t.warmStarting){this.m_impulse.mul(t.dtRatio),this.m_motorImpulse*=t.dtRatio;var V=y.combine(this.m_impulse.x,this.m_perp,this.m_motorImpulse+this.m_impulse.z,this.m_axis),S=this.m_impulse.x*this.m_s1+this.m_impulse.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_a1,P=this.m_impulse.x*this.m_s2+this.m_impulse.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_a2;o.subMul(p,V),n-=d*S,a.addMul(f,V),h+=v*P}else this.m_impulse.setZero(),this.m_motorImpulse=0;this.m_bodyA.c_velocity.v.setVec2(o),this.m_bodyA.c_velocity.w=n,this.m_bodyB.c_velocity.v.setVec2(a),this.m_bodyB.c_velocity.w=h},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,n=this.m_bodyB.c_velocity.w,s=this.m_invMassA,r=this.m_invMassB,a=this.m_invIA,h=this.m_invIB;if(this.m_enableMotor&&this.m_limitState!=Ro.equalLimits){var m=y.dot(this.m_axis,y.sub(o,e))+this.m_a2*n-this.m_a1*i,l=this.m_motorMass*(this.m_motorSpeed-m),u=this.m_motorImpulse,_=t.dt*this.m_maxMotorForce;this.m_motorImpulse=c(this.m_motorImpulse+l,-_,_),l=this.m_motorImpulse-u;var p=y.mulNumVec2(l,this.m_axis),f=l*this.m_a1,d=l*this.m_a2;e.subMul(s,p),i-=a*f,o.addMul(r,p),n+=h*d}var v=y.zero();if(v.x+=y.dot(this.m_perp,o)+this.m_s2*n,v.x-=y.dot(this.m_perp,e)+this.m_s1*i,v.y=n-i,this.m_enableLimit&&this.m_limitState!=Ro.inactiveLimit){var x=0;x+=y.dot(this.m_axis,o)+this.m_a2*n,x-=y.dot(this.m_axis,e)+this.m_a1*i;m=new ro(v.x,v.y,x);var g=ro.clone(this.m_impulse),b=this.m_K.solve33(ro.neg(m));this.m_impulse.add(b),this.m_limitState==Ro.atLowerLimit?this.m_impulse.z=Ko(this.m_impulse.z,0):this.m_limitState==Ro.atUpperLimit&&(this.m_impulse.z=Zo(this.m_impulse.z,0));var A=y.combine(-1,v,-(this.m_impulse.z-g.z),y.neo(this.m_K.ez.x,this.m_K.ez.y)),B=y.add(this.m_K.solve22(A),y.neo(g.x,g.y));this.m_impulse.x=B.x,this.m_impulse.y=B.y,b=ro.sub(this.m_impulse,g);p=y.combine(b.x,this.m_perp,b.z,this.m_axis),f=b.x*this.m_s1+b.y+b.z*this.m_a1,d=b.x*this.m_s2+b.y+b.z*this.m_a2;e.subMul(s,p),i-=a*f,o.addMul(r,p),n+=h*d}else{b=this.m_K.solve22(y.neg(v));this.m_impulse.x+=b.x,this.m_impulse.y+=b.y;p=y.mulNumVec2(b.x,this.m_perp),f=b.x*this.m_s1+b.y,d=b.x*this.m_s2+b.y;e.subMul(s,p),i-=a*f,o.addMul(r,p),n+=h*d}this.m_bodyA.c_velocity.v=e,this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v=o,this.m_bodyB.c_velocity.w=n},e.prototype.solvePositionConstraints=function(t){var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyB.c_position.c,n=this.m_bodyB.c_position.a,s=pt.neo(i),r=pt.neo(n),a=this.m_invMassA,h=this.m_invMassB,m=this.m_invIA,l=this.m_invIB,u=pt.mulVec2(s,y.sub(this.m_localAnchorA,this.m_localCenterA)),_=pt.mulVec2(r,y.sub(this.m_localAnchorB,this.m_localCenterB)),p=y.sub(y.add(o,_),y.add(e,u)),f=pt.mulVec2(s,this.m_localXAxisA),d=y.crossVec2Vec2(y.add(p,u),f),v=y.crossVec2Vec2(_,f),x=pt.mulVec2(s,this.m_localYAxisA),g=y.crossVec2Vec2(y.add(p,u),x),A=y.crossVec2Vec2(_,x),B=new ro,w=y.zero();w.x=y.dot(x,p),w.y=n-i-this.m_referenceAngle;var C=Uo(w.x),M=Uo(w.y),V=b.linearSlop,S=b.maxLinearCorrection,P=!1,T=0;if(this.m_enableLimit){var I=y.dot(f,p);Uo(this.m_upperTranslation-this.m_lowerTranslation)<2*V?(T=c(I,-S,S),C=Ko(C,Uo(I)),P=!0):I<=this.m_lowerTranslation?(T=c(I-this.m_lowerTranslation+V,-S,0),C=Math.max(C,this.m_lowerTranslation-I),P=!0):I>=this.m_upperTranslation&&(T=c(I-this.m_upperTranslation-V,0,S),C=Math.max(C,I-this.m_upperTranslation),P=!0)}if(P){var z=a+h+m*g*g+l*A*A,F=m*g+l*A,L=m*g*d+l*A*v;0==(j=m+l)&&(j=1);var k=m*d+l*v,q=a+h+m*d*d+l*v*v;(N=new jo).ex.set(z,F,L),N.ey.set(F,j,k),N.ez.set(L,k,q);var O=new ro;O.x=w.x,O.y=w.y,O.z=T,B=N.solve33(ro.neg(O))}else{var j,N;z=a+h+m*g*g+l*A*A,F=m*g+l*A;0==(j=m+l)&&(j=1),(N=new oi).ex.setNum(z,F),N.ey.setNum(F,j);var R=N.solve(y.neg(w));B.x=R.x,B.y=R.y,B.z=0}var D=y.combine(B.x,x,B.z,f),E=B.x*g+B.y+B.z*d,Y=B.x*A+B.y+B.z*v;return e.subMul(a,D),i-=m*E,o.addMul(h,D),n+=l*Y,this.m_bodyA.c_position.c=e,this.m_bodyA.c_position.a=i,this.m_bodyB.c_position.c=o,this.m_bodyB.c_position.a=n,C<=b.linearSlop&&M<=b.angularSlop},e.TYPE="prismatic-joint",e}(Yt),tn={ratio:1},en=function(t){function e(i,o,s,r,a,h){var c,m,l=this;if(!(l instanceof e))return new e(i,o,s,r,a,h);i=n(i,tn),o=(l=t.call(this,i,o,s)||this).m_bodyA,s=l.m_bodyB,l.m_type=e.TYPE,l.m_joint1=r||i.joint1,l.m_joint2=a||i.joint2,l.m_ratio=Number.isFinite(h)?h:i.ratio,l.m_type1=l.m_joint1.getType(),l.m_type2=l.m_joint2.getType(),l.m_bodyC=l.m_joint1.getBodyA(),l.m_bodyA=l.m_joint1.getBodyB();var u=l.m_bodyA.m_xf,_=l.m_bodyA.m_sweep.a,p=l.m_bodyC.m_xf,f=l.m_bodyC.m_sweep.a;if(l.m_type1===Jo.TYPE){var d=l.m_joint1;l.m_localAnchorC=d.m_localAnchorA,l.m_localAnchorA=d.m_localAnchorB,l.m_referenceAngleA=d.m_referenceAngle,l.m_localAxisC=y.zero(),c=_-f-l.m_referenceAngleA}else{var v=l.m_joint1;l.m_localAnchorC=v.m_localAnchorA,l.m_localAnchorA=v.m_localAnchorB,l.m_referenceAngleA=v.m_referenceAngle,l.m_localAxisC=v.m_localXAxisA;var x=l.m_localAnchorC,g=pt.mulTVec2(p.q,y.add(pt.mulVec2(u.q,l.m_localAnchorA),y.sub(u.p,p.p)));c=y.dot(g,l.m_localAxisC)-y.dot(x,l.m_localAxisC)}l.m_bodyD=l.m_joint2.getBodyA(),l.m_bodyB=l.m_joint2.getBodyB();var b=l.m_bodyB.m_xf,A=l.m_bodyB.m_sweep.a,B=l.m_bodyD.m_xf,w=l.m_bodyD.m_sweep.a;if(l.m_type2===Jo.TYPE){d=l.m_joint2;l.m_localAnchorD=d.m_localAnchorA,l.m_localAnchorB=d.m_localAnchorB,l.m_referenceAngleB=d.m_referenceAngle,l.m_localAxisD=y.zero(),m=A-w-l.m_referenceAngleB}else{v=l.m_joint2;l.m_localAnchorD=v.m_localAnchorA,l.m_localAnchorB=v.m_localAnchorB,l.m_referenceAngleB=v.m_referenceAngle,l.m_localAxisD=v.m_localXAxisA;var C=l.m_localAnchorD,M=pt.mulTVec2(B.q,y.add(pt.mulVec2(b.q,l.m_localAnchorB),y.sub(b.p,B.p)));m=y.dot(M,l.m_localAxisD)-y.dot(C,l.m_localAxisD)}return l.m_constant=c+l.m_ratio*m,l.m_impulse=0,l}return i(e,t),e.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,joint1:this.m_joint1,joint2:this.m_joint2,ratio:this.m_ratio}},e._deserialize=function(t,i,n){return(t=o({},t)).bodyA=n(Dt,t.bodyA,i),t.bodyB=n(Dt,t.bodyB,i),t.joint1=n(Yt,t.joint1,i),t.joint2=n(Yt,t.joint2,i),new e(t)},e.prototype._reset=function(t){Number.isFinite(t.ratio)&&(this.m_ratio=t.ratio)},e.prototype.getJoint1=function(){return this.m_joint1},e.prototype.getJoint2=function(){return this.m_joint2},e.prototype.setRatio=function(t){this.m_ratio=t},e.prototype.getRatio=function(){return this.m_ratio},e.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)},e.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)},e.prototype.getReactionForce=function(t){return y.mulNumVec2(this.m_impulse,this.m_JvAC).mul(t)},e.prototype.getReactionTorque=function(t){return t*(this.m_impulse*this.m_JwA)},e.prototype.initVelocityConstraints=function(t){this.m_lcA=this.m_bodyA.m_sweep.localCenter,this.m_lcB=this.m_bodyB.m_sweep.localCenter,this.m_lcC=this.m_bodyC.m_sweep.localCenter,this.m_lcD=this.m_bodyD.m_sweep.localCenter,this.m_mA=this.m_bodyA.m_invMass,this.m_mB=this.m_bodyB.m_invMass,this.m_mC=this.m_bodyC.m_invMass,this.m_mD=this.m_bodyD.m_invMass,this.m_iA=this.m_bodyA.m_invI,this.m_iB=this.m_bodyB.m_invI,this.m_iC=this.m_bodyC.m_invI,this.m_iD=this.m_bodyD.m_invI;var e=this.m_bodyA.c_position.a,i=this.m_bodyA.c_velocity.v,o=this.m_bodyA.c_velocity.w,n=this.m_bodyB.c_position.a,s=this.m_bodyB.c_velocity.v,r=this.m_bodyB.c_velocity.w,a=this.m_bodyC.c_position.a,h=this.m_bodyC.c_velocity.v,c=this.m_bodyC.c_velocity.w,m=this.m_bodyD.c_position.a,l=this.m_bodyD.c_velocity.v,u=this.m_bodyD.c_velocity.w,_=pt.neo(e),p=pt.neo(n),f=pt.neo(a),d=pt.neo(m);if(this.m_mass=0,this.m_type1==Jo.TYPE)this.m_JvAC=y.zero(),this.m_JwA=1,this.m_JwC=1,this.m_mass+=this.m_iA+this.m_iC;else{var v=pt.mulVec2(f,this.m_localAxisC),x=pt.mulSub(f,this.m_localAnchorC,this.m_lcC),g=pt.mulSub(_,this.m_localAnchorA,this.m_lcA);this.m_JvAC=v,this.m_JwC=y.crossVec2Vec2(x,v),this.m_JwA=y.crossVec2Vec2(g,v),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}if(this.m_type2==Jo.TYPE)this.m_JvBD=y.zero(),this.m_JwB=this.m_ratio,this.m_JwD=this.m_ratio,this.m_mass+=this.m_ratio*this.m_ratio*(this.m_iB+this.m_iD);else{v=pt.mulVec2(d,this.m_localAxisD);var b=pt.mulSub(d,this.m_localAnchorD,this.m_lcD),A=pt.mulSub(p,this.m_localAnchorB,this.m_lcB);this.m_JvBD=y.mulNumVec2(this.m_ratio,v),this.m_JwD=this.m_ratio*y.crossVec2Vec2(b,v),this.m_JwB=this.m_ratio*y.crossVec2Vec2(A,v),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}this.m_mass=this.m_mass>0?1/this.m_mass:0,t.warmStarting?(i.addMul(this.m_mA*this.m_impulse,this.m_JvAC),o+=this.m_iA*this.m_impulse*this.m_JwA,s.addMul(this.m_mB*this.m_impulse,this.m_JvBD),r+=this.m_iB*this.m_impulse*this.m_JwB,h.subMul(this.m_mC*this.m_impulse,this.m_JvAC),c-=this.m_iC*this.m_impulse*this.m_JwC,l.subMul(this.m_mD*this.m_impulse,this.m_JvBD),u-=this.m_iD*this.m_impulse*this.m_JwD):this.m_impulse=0,this.m_bodyA.c_velocity.v.setVec2(i),this.m_bodyA.c_velocity.w=o,this.m_bodyB.c_velocity.v.setVec2(s),this.m_bodyB.c_velocity.w=r,this.m_bodyC.c_velocity.v.setVec2(h),this.m_bodyC.c_velocity.w=c,this.m_bodyD.c_velocity.v.setVec2(l),this.m_bodyD.c_velocity.w=u},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,n=this.m_bodyB.c_velocity.w,s=this.m_bodyC.c_velocity.v,r=this.m_bodyC.c_velocity.w,a=this.m_bodyD.c_velocity.v,h=this.m_bodyD.c_velocity.w,c=y.dot(this.m_JvAC,e)-y.dot(this.m_JvAC,s)+y.dot(this.m_JvBD,o)-y.dot(this.m_JvBD,a);c+=this.m_JwA*i-this.m_JwC*r+(this.m_JwB*n-this.m_JwD*h);var m=-this.m_mass*c;this.m_impulse+=m,e.addMul(this.m_mA*m,this.m_JvAC),i+=this.m_iA*m*this.m_JwA,o.addMul(this.m_mB*m,this.m_JvBD),n+=this.m_iB*m*this.m_JwB,s.subMul(this.m_mC*m,this.m_JvAC),r-=this.m_iC*m*this.m_JwC,a.subMul(this.m_mD*m,this.m_JvBD),h-=this.m_iD*m*this.m_JwD,this.m_bodyA.c_velocity.v.setVec2(e),this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v.setVec2(o),this.m_bodyB.c_velocity.w=n,this.m_bodyC.c_velocity.v.setVec2(s),this.m_bodyC.c_velocity.w=r,this.m_bodyD.c_velocity.v.setVec2(a),this.m_bodyD.c_velocity.w=h},e.prototype.solvePositionConstraints=function(t){var e,i,o,n,s,r,a,h,c=this.m_bodyA.c_position.c,m=this.m_bodyA.c_position.a,l=this.m_bodyB.c_position.c,u=this.m_bodyB.c_position.a,_=this.m_bodyC.c_position.c,p=this.m_bodyC.c_position.a,f=this.m_bodyD.c_position.c,d=this.m_bodyD.c_position.a,v=pt.neo(m),x=pt.neo(u),g=pt.neo(p),A=pt.neo(d),B=0;if(this.m_type1==Jo.TYPE)o=y.zero(),s=1,a=1,B+=this.m_iA+this.m_iC,e=m-p-this.m_referenceAngleA;else{var w=pt.mulVec2(g,this.m_localAxisC),C=pt.mulSub(g,this.m_localAnchorC,this.m_lcC),M=pt.mulSub(v,this.m_localAnchorA,this.m_lcA);o=w,a=y.crossVec2Vec2(C,w),s=y.crossVec2Vec2(M,w),B+=this.m_mC+this.m_mA+this.m_iC*a*a+this.m_iA*s*s;var V=y.sub(this.m_localAnchorC,this.m_lcC),S=pt.mulTVec2(g,y.add(M,y.sub(c,_)));e=y.dot(y.sub(S,V),this.m_localAxisC)}if(this.m_type2==Jo.TYPE)n=y.zero(),r=this.m_ratio,h=this.m_ratio,B+=this.m_ratio*this.m_ratio*(this.m_iB+this.m_iD),i=u-d-this.m_referenceAngleB;else{w=pt.mulVec2(A,this.m_localAxisD);var P=pt.mulSub(A,this.m_localAnchorD,this.m_lcD),T=pt.mulSub(x,this.m_localAnchorB,this.m_lcB);n=y.mulNumVec2(this.m_ratio,w),h=this.m_ratio*y.crossVec2Vec2(P,w),r=this.m_ratio*y.crossVec2Vec2(T,w),B+=this.m_ratio*this.m_ratio*(this.m_mD+this.m_mB)+this.m_iD*h*h+this.m_iB*r*r;var I=y.sub(this.m_localAnchorD,this.m_lcD),z=pt.mulTVec2(A,y.add(T,y.sub(l,f)));i=y.dot(z,this.m_localAxisD)-y.dot(I,this.m_localAxisD)}var F=e+this.m_ratio*i-this.m_constant,L=0;return B>0&&(L=-F/B),c.addMul(this.m_mA*L,o),m+=this.m_iA*L*s,l.addMul(this.m_mB*L,n),u+=this.m_iB*L*r,_.subMul(this.m_mC*L,o),p-=this.m_iC*L*a,f.subMul(this.m_mD*L,n),d-=this.m_iD*L*h,this.m_bodyA.c_position.c.setVec2(c),this.m_bodyA.c_position.a=m,this.m_bodyB.c_position.c.setVec2(l),this.m_bodyB.c_position.a=u,this.m_bodyC.c_position.c.setVec2(_),this.m_bodyC.c_position.a=p,this.m_bodyD.c_position.c.setVec2(f),this.m_bodyD.c_position.a=d,00&&(this.m_angularMass=1/this.m_angularMass),this.m_linearError=y.zero(),this.m_linearError.addCombine(1,s,1,this.m_rB),this.m_linearError.subCombine(1,e,1,this.m_rA),this.m_angularError=r-i-this.m_angularOffset,t.warmStarting){this.m_linearImpulse.mul(t.dtRatio),this.m_angularImpulse*=t.dtRatio;var d=y.neo(this.m_linearImpulse.x,this.m_linearImpulse.y);o.subMul(l,d),n-=_*(y.crossVec2Vec2(this.m_rA,d)+this.m_angularImpulse),a.addMul(u,d),h+=p*(y.crossVec2Vec2(this.m_rB,d)+this.m_angularImpulse)}else this.m_linearImpulse.setZero(),this.m_angularImpulse=0;this.m_bodyA.c_velocity.v=o,this.m_bodyA.c_velocity.w=n,this.m_bodyB.c_velocity.v=a,this.m_bodyB.c_velocity.w=h},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,n=this.m_bodyB.c_velocity.w,s=this.m_invMassA,r=this.m_invMassB,a=this.m_invIA,h=this.m_invIB,m=t.dt,l=t.inv_dt,u=n-i+l*this.m_correctionFactor*this.m_angularError,_=-this.m_angularMass*u,p=this.m_angularImpulse,f=m*this.m_maxTorque;this.m_angularImpulse=c(this.m_angularImpulse+_,-f,f),i-=a*(_=this.m_angularImpulse-p),n+=h*_,(u=y.zero()).addCombine(1,o,1,y.crossNumVec2(n,this.m_rB)),u.subCombine(1,e,1,y.crossNumVec2(i,this.m_rA)),u.addMul(l*this.m_correctionFactor,this.m_linearError);_=y.neg(oi.mulVec2(this.m_linearMass,u)),p=y.clone(this.m_linearImpulse);this.m_linearImpulse.add(_);f=m*this.m_maxForce;this.m_linearImpulse.clamp(f),_=y.sub(this.m_linearImpulse,p),e.subMul(s,_),i-=a*y.crossVec2Vec2(this.m_rA,_),o.addMul(r,_),n+=h*y.crossVec2Vec2(this.m_rB,_),this.m_bodyA.c_velocity.v=e,this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v=o,this.m_bodyB.c_velocity.w=n},e.prototype.solvePositionConstraints=function(t){return!0},e.TYPE="motor-joint",e}(Yt),sn=Math.PI,rn={maxForce:0,frequencyHz:5,dampingRatio:.7},an=function(t){function e(i,o,s,r){var a=this;return a instanceof e?(i=n(i,rn),o=(a=t.call(this,i,o,s)||this).m_bodyA,s=a.m_bodyB,a.m_type=e.TYPE,y.isValid(r)?a.m_targetA=y.clone(r):y.isValid(i.target)?a.m_targetA=y.clone(i.target):a.m_targetA=y.zero(),a.m_localAnchorB=xt.mulTVec2(s.getTransform(),a.m_targetA),a.m_maxForce=i.maxForce,a.m_impulse=y.zero(),a.m_frequencyHz=i.frequencyHz,a.m_dampingRatio=i.dampingRatio,a.m_beta=0,a.m_gamma=0,a.m_rB=y.zero(),a.m_localCenterB=y.zero(),a.m_invMassB=0,a.m_invIB=0,a.m_mass=new oi,a.m_C=y.zero(),a):new e(i,o,s,r)}return i(e,t),e.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,target:this.m_targetA,maxForce:this.m_maxForce,frequencyHz:this.m_frequencyHz,dampingRatio:this.m_dampingRatio,_localAnchorB:this.m_localAnchorB}},e._deserialize=function(t,i,n){(t=o({},t)).bodyA=n(Dt,t.bodyA,i),t.bodyB=n(Dt,t.bodyB,i),t.target=y.clone(t.target);var s=new e(t);return t._localAnchorB&&(s.m_localAnchorB=t._localAnchorB),s},e.prototype._reset=function(t){Number.isFinite(t.maxForce)&&(this.m_maxForce=t.maxForce),Number.isFinite(t.frequencyHz)&&(this.m_frequencyHz=t.frequencyHz),Number.isFinite(t.dampingRatio)&&(this.m_dampingRatio=t.dampingRatio)},e.prototype.setTarget=function(t){y.areEqual(t,this.m_targetA)||(this.m_bodyB.setAwake(!0),this.m_targetA.set(t))},e.prototype.getTarget=function(){return this.m_targetA},e.prototype.setMaxForce=function(t){this.m_maxForce=t},e.prototype.getMaxForce=function(){return this.m_maxForce},e.prototype.setFrequency=function(t){this.m_frequencyHz=t},e.prototype.getFrequency=function(){return this.m_frequencyHz},e.prototype.setDampingRatio=function(t){this.m_dampingRatio=t},e.prototype.getDampingRatio=function(){return this.m_dampingRatio},e.prototype.getAnchorA=function(){return y.clone(this.m_targetA)},e.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)},e.prototype.getReactionForce=function(t){return y.mulNumVec2(t,this.m_impulse)},e.prototype.getReactionTorque=function(t){return 0*t},e.prototype.shiftOrigin=function(t){this.m_targetA.sub(t)},e.prototype.initVelocityConstraints=function(t){this.m_localCenterB=this.m_bodyB.m_sweep.localCenter,this.m_invMassB=this.m_bodyB.m_invMass,this.m_invIB=this.m_bodyB.m_invI;var e=this.m_bodyB.c_position,i=this.m_bodyB.c_velocity,o=e.c,n=e.a,s=i.v,r=i.w,a=pt.neo(n),h=this.m_bodyB.getMass(),c=2*sn*this.m_frequencyHz,m=2*h*this.m_dampingRatio*c,l=h*(c*c),u=t.dt;this.m_gamma=u*(m+u*l),0!=this.m_gamma&&(this.m_gamma=1/this.m_gamma),this.m_beta=u*l*this.m_gamma,this.m_rB=pt.mulVec2(a,y.sub(this.m_localAnchorB,this.m_localCenterB));var _=new oi;_.ex.x=this.m_invMassB+this.m_invIB*this.m_rB.y*this.m_rB.y+this.m_gamma,_.ex.y=-this.m_invIB*this.m_rB.x*this.m_rB.y,_.ey.x=_.ex.y,_.ey.y=this.m_invMassB+this.m_invIB*this.m_rB.x*this.m_rB.x+this.m_gamma,this.m_mass=_.getInverse(),this.m_C.setVec2(o),this.m_C.addCombine(1,this.m_rB,-1,this.m_targetA),this.m_C.mul(this.m_beta),r*=.98,t.warmStarting?(this.m_impulse.mul(t.dtRatio),s.addMul(this.m_invMassB,this.m_impulse),r+=this.m_invIB*y.crossVec2Vec2(this.m_rB,this.m_impulse)):this.m_impulse.setZero(),i.v.setVec2(s),i.w=r},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyB.c_velocity,i=y.clone(e.v),o=e.w,n=y.crossNumVec2(o,this.m_rB);n.add(i),n.addCombine(1,this.m_C,this.m_gamma,this.m_impulse),n.neg();var s=oi.mulVec2(this.m_mass,n),r=y.clone(this.m_impulse);this.m_impulse.add(s);var a=t.dt*this.m_maxForce;this.m_impulse.clamp(a),s=y.sub(this.m_impulse,r),i.addMul(this.m_invMassB,s),o+=this.m_invIB*y.crossVec2Vec2(this.m_rB,s),e.v.setVec2(i),e.w=o},e.prototype.solvePositionConstraints=function(t){return!0},e.TYPE="mouse-joint",e}(Yt),hn=Math.abs,cn={collideConnected:!0},mn=function(t){function e(i,o,s,r,a,h,c,m){var l=this;return l instanceof e?(i=n(i,cn),o=(l=t.call(this,i,o,s)||this).m_bodyA,s=l.m_bodyB,l.m_type=e.TYPE,l.m_groundAnchorA=y.clone(r||(i.groundAnchorA||y.neo(-1,1))),l.m_groundAnchorB=y.clone(a||(i.groundAnchorB||y.neo(1,1))),l.m_localAnchorA=y.clone(h?o.getLocalPoint(h):i.localAnchorA||y.neo(-1,0)),l.m_localAnchorB=y.clone(c?s.getLocalPoint(c):i.localAnchorB||y.neo(1,0)),l.m_lengthA=Number.isFinite(i.lengthA)?i.lengthA:y.distance(h,r),l.m_lengthB=Number.isFinite(i.lengthB)?i.lengthB:y.distance(c,a),l.m_ratio=Number.isFinite(m)?m:i.ratio,l.m_constant=l.m_lengthA+l.m_ratio*l.m_lengthB,l.m_impulse=0,l):new e(i,o,s,r,a,h,c,m)}return i(e,t),e.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,groundAnchorA:this.m_groundAnchorA,groundAnchorB:this.m_groundAnchorB,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,lengthA:this.m_lengthA,lengthB:this.m_lengthB,ratio:this.m_ratio}},e._deserialize=function(t,i,n){return(t=o({},t)).bodyA=n(Dt,t.bodyA,i),t.bodyB=n(Dt,t.bodyB,i),new e(t)},e.prototype._reset=function(t){y.isValid(t.groundAnchorA)&&this.m_groundAnchorA.set(t.groundAnchorA),y.isValid(t.groundAnchorB)&&this.m_groundAnchorB.set(t.groundAnchorB),y.isValid(t.localAnchorA)?this.m_localAnchorA.set(t.localAnchorA):y.isValid(t.anchorA)&&this.m_localAnchorA.set(this.m_bodyA.getLocalPoint(t.anchorA)),y.isValid(t.localAnchorB)?this.m_localAnchorB.set(t.localAnchorB):y.isValid(t.anchorB)&&this.m_localAnchorB.set(this.m_bodyB.getLocalPoint(t.anchorB)),Number.isFinite(t.lengthA)&&(this.m_lengthA=t.lengthA),Number.isFinite(t.lengthB)&&(this.m_lengthB=t.lengthB),Number.isFinite(t.ratio)&&(this.m_ratio=t.ratio)},e.prototype.getGroundAnchorA=function(){return this.m_groundAnchorA},e.prototype.getGroundAnchorB=function(){return this.m_groundAnchorB},e.prototype.getLengthA=function(){return this.m_lengthA},e.prototype.getLengthB=function(){return this.m_lengthB},e.prototype.getRatio=function(){return this.m_ratio},e.prototype.getCurrentLengthA=function(){var t=this.m_bodyA.getWorldPoint(this.m_localAnchorA),e=this.m_groundAnchorA;return y.distance(t,e)},e.prototype.getCurrentLengthB=function(){var t=this.m_bodyB.getWorldPoint(this.m_localAnchorB),e=this.m_groundAnchorB;return y.distance(t,e)},e.prototype.shiftOrigin=function(t){this.m_groundAnchorA.sub(t),this.m_groundAnchorB.sub(t)},e.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)},e.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)},e.prototype.getReactionForce=function(t){return y.mulNumVec2(this.m_impulse,this.m_uB).mul(t)},e.prototype.getReactionTorque=function(t){return 0},e.prototype.initVelocityConstraints=function(t){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter,this.m_localCenterB=this.m_bodyB.m_sweep.localCenter,this.m_invMassA=this.m_bodyA.m_invMass,this.m_invMassB=this.m_bodyB.m_invMass,this.m_invIA=this.m_bodyA.m_invI,this.m_invIB=this.m_bodyB.m_invI;var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyA.c_velocity.v,n=this.m_bodyA.c_velocity.w,s=this.m_bodyB.c_position.c,r=this.m_bodyB.c_position.a,a=this.m_bodyB.c_velocity.v,h=this.m_bodyB.c_velocity.w,c=pt.neo(i),m=pt.neo(r);this.m_rA=pt.mulVec2(c,y.sub(this.m_localAnchorA,this.m_localCenterA)),this.m_rB=pt.mulVec2(m,y.sub(this.m_localAnchorB,this.m_localCenterB)),this.m_uA=y.sub(y.add(e,this.m_rA),this.m_groundAnchorA),this.m_uB=y.sub(y.add(s,this.m_rB),this.m_groundAnchorB);var l=this.m_uA.length(),u=this.m_uB.length();l>10*b.linearSlop?this.m_uA.mul(1/l):this.m_uA.setZero(),u>10*b.linearSlop?this.m_uB.mul(1/u):this.m_uB.setZero();var _=y.crossVec2Vec2(this.m_rA,this.m_uA),p=y.crossVec2Vec2(this.m_rB,this.m_uB),f=this.m_invMassA+this.m_invIA*_*_,d=this.m_invMassB+this.m_invIB*p*p;if(this.m_mass=f+this.m_ratio*this.m_ratio*d,this.m_mass>0&&(this.m_mass=1/this.m_mass),t.warmStarting){this.m_impulse*=t.dtRatio;var v=y.mulNumVec2(-this.m_impulse,this.m_uA),x=y.mulNumVec2(-this.m_ratio*this.m_impulse,this.m_uB);o.addMul(this.m_invMassA,v),n+=this.m_invIA*y.crossVec2Vec2(this.m_rA,v),a.addMul(this.m_invMassB,x),h+=this.m_invIB*y.crossVec2Vec2(this.m_rB,x)}else this.m_impulse=0;this.m_bodyA.c_velocity.v=o,this.m_bodyA.c_velocity.w=n,this.m_bodyB.c_velocity.v=a,this.m_bodyB.c_velocity.w=h},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,n=this.m_bodyB.c_velocity.w,s=y.add(e,y.crossNumVec2(i,this.m_rA)),r=y.add(o,y.crossNumVec2(n,this.m_rB)),a=-y.dot(this.m_uA,s)-this.m_ratio*y.dot(this.m_uB,r),h=-this.m_mass*a;this.m_impulse+=h;var c=y.mulNumVec2(-h,this.m_uA),m=y.mulNumVec2(-this.m_ratio*h,this.m_uB);e.addMul(this.m_invMassA,c),i+=this.m_invIA*y.crossVec2Vec2(this.m_rA,c),o.addMul(this.m_invMassB,m),n+=this.m_invIB*y.crossVec2Vec2(this.m_rB,m),this.m_bodyA.c_velocity.v=e,this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v=o,this.m_bodyB.c_velocity.w=n},e.prototype.solvePositionConstraints=function(t){var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyB.c_position.c,n=this.m_bodyB.c_position.a,s=pt.neo(i),r=pt.neo(n),a=pt.mulVec2(s,y.sub(this.m_localAnchorA,this.m_localCenterA)),h=pt.mulVec2(r,y.sub(this.m_localAnchorB,this.m_localCenterB)),c=y.sub(y.add(e,this.m_rA),this.m_groundAnchorA),m=y.sub(y.add(o,this.m_rB),this.m_groundAnchorB),l=c.length(),u=m.length();l>10*b.linearSlop?c.mul(1/l):c.setZero(),u>10*b.linearSlop?m.mul(1/u):m.setZero();var _=y.crossVec2Vec2(a,c),p=y.crossVec2Vec2(h,m),f=this.m_invMassA+this.m_invIA*_*_,d=this.m_invMassB+this.m_invIB*p*p,v=f+this.m_ratio*this.m_ratio*d;v>0&&(v=1/v);var x=this.m_constant-l-this.m_ratio*u,g=hn(x),A=-v*x,B=y.mulNumVec2(-A,c),w=y.mulNumVec2(-this.m_ratio*A,m);return e.addMul(this.m_invMassA,B),i+=this.m_invIA*y.crossVec2Vec2(a,B),o.addMul(this.m_invMassB,w),n+=this.m_invIB*y.crossVec2Vec2(h,w),this.m_bodyA.c_position.c=e,this.m_bodyA.c_position.a=i,this.m_bodyB.c_position.c=o,this.m_bodyB.c_position.a=n,g0?Go.atUpperLimit:Go.inactiveLimit,!(this.m_length>b.linearSlop))return this.m_u.setZero(),this.m_mass=0,void(this.m_impulse=0);this.m_u.mul(1/this.m_length);var u=y.crossVec2Vec2(this.m_rA,this.m_u),_=y.crossVec2Vec2(this.m_rB,this.m_u),p=this.m_invMassA+this.m_invIA*u*u+this.m_invMassB+this.m_invIB*_*_;if(this.m_mass=0!=p?1/p:0,t.warmStarting){this.m_impulse*=t.dtRatio;var f=y.mulNumVec2(this.m_impulse,this.m_u);o.subMul(this.m_invMassA,f),n-=this.m_invIA*y.crossVec2Vec2(this.m_rA,f),a.addMul(this.m_invMassB,f),h+=this.m_invIB*y.crossVec2Vec2(this.m_rB,f)}else this.m_impulse=0;this.m_bodyA.c_velocity.v.setVec2(o),this.m_bodyA.c_velocity.w=n,this.m_bodyB.c_velocity.v.setVec2(a),this.m_bodyB.c_velocity.w=h},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,n=this.m_bodyB.c_velocity.w,s=y.addCrossNumVec2(e,i,this.m_rA),r=y.addCrossNumVec2(o,n,this.m_rB),a=this.m_length-this.m_maxLength,h=y.dot(this.m_u,y.sub(r,s));a<0&&(h+=t.inv_dt*a);var c=-this.m_mass*h,m=this.m_impulse;this.m_impulse=ln(0,this.m_impulse+c),c=this.m_impulse-m;var l=y.mulNumVec2(c,this.m_u);e.subMul(this.m_invMassA,l),i-=this.m_invIA*y.crossVec2Vec2(this.m_rA,l),o.addMul(this.m_invMassB,l),n+=this.m_invIB*y.crossVec2Vec2(this.m_rB,l),this.m_bodyA.c_velocity.v=e,this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v=o,this.m_bodyB.c_velocity.w=n},e.prototype.solvePositionConstraints=function(t){var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyB.c_position.c,n=this.m_bodyB.c_position.a,s=pt.neo(i),r=pt.neo(n),a=pt.mulSub(s,this.m_localAnchorA,this.m_localCenterA),h=pt.mulSub(r,this.m_localAnchorB,this.m_localCenterB),m=y.zero();m.addCombine(1,o,1,h),m.subCombine(1,e,1,a);var l=m.normalize(),u=l-this.m_maxLength;u=c(u,0,b.maxLinearCorrection);var _=-this.m_mass*u,p=y.mulNumVec2(_,m);return e.subMul(this.m_invMassA,p),i-=this.m_invIA*y.crossVec2Vec2(a,p),o.addMul(this.m_invMassB,p),n+=this.m_invIB*y.crossVec2Vec2(h,p),this.m_bodyA.c_position.c.setVec2(e),this.m_bodyA.c_position.a=i,this.m_bodyB.c_position.c.setVec2(o),this.m_bodyB.c_position.a=n,l-this.m_maxLength0){_.getInverse22(this.m_mass);var p=l+u,f=p>0?1/p:0,d=n-e-this.m_referenceAngle,v=2*fn*this.m_frequencyHz,x=2*f*this.m_dampingRatio*v,g=f*v*v,b=t.dt;this.m_gamma=b*(x+b*g),this.m_gamma=0!=this.m_gamma?1/this.m_gamma:0,this.m_bias=d*b*g*this.m_gamma,p+=this.m_gamma,this.m_mass.ez.z=0!=p?1/p:0}else 0==_.ez.z?(_.getInverse22(this.m_mass),this.m_gamma=0,this.m_bias=0):(_.getSymInverse33(this.m_mass),this.m_gamma=0,this.m_bias=0);if(t.warmStarting){this.m_impulse.mul(t.dtRatio);var A=y.neo(this.m_impulse.x,this.m_impulse.y);i.subMul(c,A),o-=l*(y.crossVec2Vec2(this.m_rA,A)+this.m_impulse.z),s.addMul(m,A),r+=u*(y.crossVec2Vec2(this.m_rB,A)+this.m_impulse.z)}else this.m_impulse.setZero();this.m_bodyA.c_velocity.v=i,this.m_bodyA.c_velocity.w=o,this.m_bodyB.c_velocity.v=s,this.m_bodyB.c_velocity.w=r},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,n=this.m_bodyB.c_velocity.w,s=this.m_invMassA,r=this.m_invMassB,a=this.m_invIA,h=this.m_invIB;if(this.m_frequencyHz>0){var c=n-i,m=-this.m_mass.ez.z*(c+this.m_bias+this.m_gamma*this.m_impulse.z);this.m_impulse.z+=m,i-=a*m,n+=h*m,(_=y.zero()).addCombine(1,o,1,y.crossNumVec2(n,this.m_rB)),_.subCombine(1,e,1,y.crossNumVec2(i,this.m_rA));var l=y.neg(jo.mulVec2(this.m_mass,_));this.m_impulse.x+=l.x,this.m_impulse.y+=l.y;var u=y.clone(l);e.subMul(s,u),i-=a*y.crossVec2Vec2(this.m_rA,u),o.addMul(r,u),n+=h*y.crossVec2Vec2(this.m_rB,u)}else{var _;(_=y.zero()).addCombine(1,o,1,y.crossNumVec2(n,this.m_rB)),_.subCombine(1,e,1,y.crossNumVec2(i,this.m_rA));c=n-i;var p=new ro(_.x,_.y,c),f=ro.neg(jo.mulVec3(this.m_mass,p));this.m_impulse.add(f);u=y.neo(f.x,f.y);e.subMul(s,u),i-=a*(y.crossVec2Vec2(this.m_rA,u)+f.z),o.addMul(r,u),n+=h*(y.crossVec2Vec2(this.m_rB,u)+f.z)}this.m_bodyA.c_velocity.v=e,this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v=o,this.m_bodyB.c_velocity.w=n},e.prototype.solvePositionConstraints=function(t){var e,i,o=this.m_bodyA.c_position.c,n=this.m_bodyA.c_position.a,s=this.m_bodyB.c_position.c,r=this.m_bodyB.c_position.a,a=pt.neo(n),h=pt.neo(r),c=this.m_invMassA,m=this.m_invMassB,l=this.m_invIA,u=this.m_invIB,_=pt.mulVec2(a,y.sub(this.m_localAnchorA,this.m_localCenterA)),p=pt.mulVec2(h,y.sub(this.m_localAnchorB,this.m_localCenterB)),f=new jo;if(f.ex.x=c+m+_.y*_.y*l+p.y*p.y*u,f.ey.x=-_.y*_.x*l-p.y*p.x*u,f.ez.x=-_.y*l-p.y*u,f.ex.y=f.ey.x,f.ey.y=c+m+_.x*_.x*l+p.x*p.x*u,f.ez.y=_.x*l+p.x*u,f.ex.z=f.ez.x,f.ey.z=f.ez.y,f.ez.z=l+u,this.m_frequencyHz>0){(v=y.zero()).addCombine(1,s,1,p),v.subCombine(1,o,1,_),e=v.length(),i=0;var d=y.neg(f.solve22(v));o.subMul(c,d),n-=l*y.crossVec2Vec2(_,d),s.addMul(m,d),r+=u*y.crossVec2Vec2(p,d)}else{var v;(v=y.zero()).addCombine(1,s,1,p),v.subCombine(1,o,1,_);var x=r-n-this.m_referenceAngle;e=v.length(),i=yn(x);var g=new ro(v.x,v.y,x),A=new ro;if(f.ez.z>0)A=ro.neg(f.solve33(g));else{var B=y.neg(f.solve22(v));A.set(B.x,B.y,0)}d=y.neo(A.x,A.y);o.subMul(c,d),n-=l*(y.crossVec2Vec2(_,d)+A.z),s.addMul(m,d),r+=u*(y.crossVec2Vec2(p,d)+A.z)}return this.m_bodyA.c_position.c=o,this.m_bodyA.c_position.a=n,this.m_bodyB.c_position.c=s,this.m_bodyB.c_position.a=r,e<=b.linearSlop&&i<=b.angularSlop},e.TYPE="weld-joint",e}(Yt),xn=Math.abs,gn=Math.PI,bn={enableMotor:!1,maxMotorTorque:0,motorSpeed:0,frequencyHz:2,dampingRatio:.7},An=function(t){function e(i,o,s,r,a){var h=this;return h instanceof e?(i=n(i,bn),o=(h=t.call(this,i,o,s)||this).m_bodyA,s=h.m_bodyB,h.m_ax=y.zero(),h.m_ay=y.zero(),h.m_type=e.TYPE,h.m_localAnchorA=y.clone(r?o.getLocalPoint(r):i.localAnchorA||y.zero()),h.m_localAnchorB=y.clone(r?s.getLocalPoint(r):i.localAnchorB||y.zero()),y.isValid(a)?h.m_localXAxisA=o.getLocalVector(a):y.isValid(i.localAxisA)?h.m_localXAxisA=y.clone(i.localAxisA):y.isValid(i.localAxis)?h.m_localXAxisA=y.clone(i.localAxis):h.m_localXAxisA=y.neo(1,0),h.m_localYAxisA=y.crossNumVec2(1,h.m_localXAxisA),h.m_mass=0,h.m_impulse=0,h.m_motorMass=0,h.m_motorImpulse=0,h.m_springMass=0,h.m_springImpulse=0,h.m_maxMotorTorque=i.maxMotorTorque,h.m_motorSpeed=i.motorSpeed,h.m_enableMotor=i.enableMotor,h.m_frequencyHz=i.frequencyHz,h.m_dampingRatio=i.dampingRatio,h.m_bias=0,h.m_gamma=0,h):new e(i,o,s,r,a)}return i(e,t),e.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,enableMotor:this.m_enableMotor,maxMotorTorque:this.m_maxMotorTorque,motorSpeed:this.m_motorSpeed,frequencyHz:this.m_frequencyHz,dampingRatio:this.m_dampingRatio,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,localAxisA:this.m_localXAxisA}},e._deserialize=function(t,i,n){return(t=o({},t)).bodyA=n(Dt,t.bodyA,i),t.bodyB=n(Dt,t.bodyB,i),new e(t)},e.prototype._reset=function(t){t.anchorA?this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(t.anchorA)):t.localAnchorA&&this.m_localAnchorA.setVec2(t.localAnchorA),t.anchorB?this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(t.anchorB)):t.localAnchorB&&this.m_localAnchorB.setVec2(t.localAnchorB),t.localAxisA&&(this.m_localXAxisA.setVec2(t.localAxisA),this.m_localYAxisA.setVec2(y.crossNumVec2(1,t.localAxisA))),void 0!==t.enableMotor&&(this.m_enableMotor=t.enableMotor),Number.isFinite(t.maxMotorTorque)&&(this.m_maxMotorTorque=t.maxMotorTorque),Number.isFinite(t.motorSpeed)&&(this.m_motorSpeed=t.motorSpeed),Number.isFinite(t.frequencyHz)&&(this.m_frequencyHz=t.frequencyHz),Number.isFinite(t.dampingRatio)&&(this.m_dampingRatio=t.dampingRatio)},e.prototype.getLocalAnchorA=function(){return this.m_localAnchorA},e.prototype.getLocalAnchorB=function(){return this.m_localAnchorB},e.prototype.getLocalAxisA=function(){return this.m_localXAxisA},e.prototype.getJointTranslation=function(){var t=this.m_bodyA,e=this.m_bodyB,i=t.getWorldPoint(this.m_localAnchorA),o=e.getWorldPoint(this.m_localAnchorB),n=y.sub(o,i),s=t.getWorldVector(this.m_localXAxisA);return y.dot(n,s)},e.prototype.getJointSpeed=function(){var t=this.m_bodyA.m_angularVelocity;return this.m_bodyB.m_angularVelocity-t},e.prototype.isMotorEnabled=function(){return this.m_enableMotor},e.prototype.enableMotor=function(t){t!=this.m_enableMotor&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_enableMotor=t)},e.prototype.setMotorSpeed=function(t){t!=this.m_motorSpeed&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_motorSpeed=t)},e.prototype.getMotorSpeed=function(){return this.m_motorSpeed},e.prototype.setMaxMotorTorque=function(t){t!=this.m_maxMotorTorque&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_maxMotorTorque=t)},e.prototype.getMaxMotorTorque=function(){return this.m_maxMotorTorque},e.prototype.getMotorTorque=function(t){return t*this.m_motorImpulse},e.prototype.setSpringFrequencyHz=function(t){this.m_frequencyHz=t},e.prototype.getSpringFrequencyHz=function(){return this.m_frequencyHz},e.prototype.setSpringDampingRatio=function(t){this.m_dampingRatio=t},e.prototype.getSpringDampingRatio=function(){return this.m_dampingRatio},e.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)},e.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)},e.prototype.getReactionForce=function(t){return y.combine(this.m_impulse,this.m_ay,this.m_springImpulse,this.m_ax).mul(t)},e.prototype.getReactionTorque=function(t){return t*this.m_motorImpulse},e.prototype.initVelocityConstraints=function(t){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter,this.m_localCenterB=this.m_bodyB.m_sweep.localCenter,this.m_invMassA=this.m_bodyA.m_invMass,this.m_invMassB=this.m_bodyB.m_invMass,this.m_invIA=this.m_bodyA.m_invI,this.m_invIB=this.m_bodyB.m_invI;var e=this.m_invMassA,i=this.m_invMassB,o=this.m_invIA,n=this.m_invIB,s=this.m_bodyA.c_position.c,r=this.m_bodyA.c_position.a,a=this.m_bodyA.c_velocity.v,h=this.m_bodyA.c_velocity.w,c=this.m_bodyB.c_position.c,m=this.m_bodyB.c_position.a,l=this.m_bodyB.c_velocity.v,u=this.m_bodyB.c_velocity.w,_=pt.neo(r),p=pt.neo(m),f=pt.mulVec2(_,y.sub(this.m_localAnchorA,this.m_localCenterA)),d=pt.mulVec2(p,y.sub(this.m_localAnchorB,this.m_localCenterB)),v=y.zero();if(v.addCombine(1,c,1,d),v.subCombine(1,s,1,f),this.m_ay=pt.mulVec2(_,this.m_localYAxisA),this.m_sAy=y.crossVec2Vec2(y.add(v,f),this.m_ay),this.m_sBy=y.crossVec2Vec2(d,this.m_ay),this.m_mass=e+i+o*this.m_sAy*this.m_sAy+n*this.m_sBy*this.m_sBy,this.m_mass>0&&(this.m_mass=1/this.m_mass),this.m_springMass=0,this.m_bias=0,this.m_gamma=0,this.m_frequencyHz>0){this.m_ax=pt.mulVec2(_,this.m_localXAxisA),this.m_sAx=y.crossVec2Vec2(y.add(v,f),this.m_ax),this.m_sBx=y.crossVec2Vec2(d,this.m_ax);var x=e+i+o*this.m_sAx*this.m_sAx+n*this.m_sBx*this.m_sBx;if(x>0){this.m_springMass=1/x;var g=y.dot(v,this.m_ax),b=2*gn*this.m_frequencyHz,A=2*this.m_springMass*this.m_dampingRatio*b,B=this.m_springMass*b*b,w=t.dt;this.m_gamma=w*(A+w*B),this.m_gamma>0&&(this.m_gamma=1/this.m_gamma),this.m_bias=g*w*B*this.m_gamma,this.m_springMass=x+this.m_gamma,this.m_springMass>0&&(this.m_springMass=1/this.m_springMass)}}else this.m_springImpulse=0;if(this.m_enableMotor?(this.m_motorMass=o+n,this.m_motorMass>0&&(this.m_motorMass=1/this.m_motorMass)):(this.m_motorMass=0,this.m_motorImpulse=0),t.warmStarting){this.m_impulse*=t.dtRatio,this.m_springImpulse*=t.dtRatio,this.m_motorImpulse*=t.dtRatio;var C=y.combine(this.m_impulse,this.m_ay,this.m_springImpulse,this.m_ax),M=this.m_impulse*this.m_sAy+this.m_springImpulse*this.m_sAx+this.m_motorImpulse,V=this.m_impulse*this.m_sBy+this.m_springImpulse*this.m_sBx+this.m_motorImpulse;a.subMul(this.m_invMassA,C),h-=this.m_invIA*M,l.addMul(this.m_invMassB,C),u+=this.m_invIB*V}else this.m_impulse=0,this.m_springImpulse=0,this.m_motorImpulse=0;this.m_bodyA.c_velocity.v.setVec2(a),this.m_bodyA.c_velocity.w=h,this.m_bodyB.c_velocity.v.setVec2(l),this.m_bodyB.c_velocity.w=u},e.prototype.solveVelocityConstraints=function(t){var e=this.m_invMassA,i=this.m_invMassB,o=this.m_invIA,n=this.m_invIB,s=this.m_bodyA.c_velocity.v,r=this.m_bodyA.c_velocity.w,a=this.m_bodyB.c_velocity.v,h=this.m_bodyB.c_velocity.w,m=y.dot(this.m_ax,a)-y.dot(this.m_ax,s)+this.m_sBx*h-this.m_sAx*r,l=-this.m_springMass*(m+this.m_bias+this.m_gamma*this.m_springImpulse);this.m_springImpulse+=l;var u=y.mulNumVec2(l,this.m_ax),_=l*this.m_sAx,p=l*this.m_sBx;s.subMul(e,u),r-=o*_,a.addMul(i,u);m=(h+=n*p)-r-this.m_motorSpeed,l=-this.m_motorMass*m;var f=this.m_motorImpulse,d=t.dt*this.m_maxMotorTorque;this.m_motorImpulse=c(this.m_motorImpulse+l,-d,d),r-=o*(l=this.m_motorImpulse-f),h+=n*l;m=y.dot(this.m_ay,a)-y.dot(this.m_ay,s)+this.m_sBy*h-this.m_sAy*r,l=-this.m_mass*m;this.m_impulse+=l;u=y.mulNumVec2(l,this.m_ay),_=l*this.m_sAy,p=l*this.m_sBy;s.subMul(e,u),r-=o*_,a.addMul(i,u),h+=n*p,this.m_bodyA.c_velocity.v.setVec2(s),this.m_bodyA.c_velocity.w=r,this.m_bodyB.c_velocity.v.setVec2(a),this.m_bodyB.c_velocity.w=h},e.prototype.solvePositionConstraints=function(t){var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyB.c_position.c,n=this.m_bodyB.c_position.a,s=pt.neo(i),r=pt.neo(n),a=pt.mulVec2(s,y.sub(this.m_localAnchorA,this.m_localCenterA)),h=pt.mulVec2(r,y.sub(this.m_localAnchorB,this.m_localCenterB)),c=y.zero();c.addCombine(1,o,1,h),c.subCombine(1,e,1,a);var m=pt.mulVec2(s,this.m_localYAxisA),l=y.crossVec2Vec2(y.add(c,a),m),u=y.crossVec2Vec2(h,m),_=y.dot(c,m),p=this.m_invMassA+this.m_invMassB+this.m_invIA*this.m_sAy*this.m_sAy+this.m_invIB*this.m_sBy*this.m_sBy,f=0!=p?-_/p:0,d=y.mulNumVec2(f,m),v=f*l,x=f*u;return e.subMul(this.m_invMassA,d),i-=this.m_invIA*v,o.addMul(this.m_invMassB,d),n+=this.m_invIB*x,this.m_bodyA.c_position.c.setVec2(e),this.m_bodyA.c_position.a=i,this.m_bodyB.c_position.c.setVec2(o),this.m_bodyB.c_position.a=n,xn(_)<=b.linearSlop},e.TYPE="wheel-joint",e}(Yt),Bn=0,wn={World:so,Body:Dt,Joint:Yt,Fixture:It,Shape:Ct},Cn={Vec2:y,Vec3:ro,World:so,Body:Dt,Joint:Yt,Fixture:It,Shape:Ct},Mn=((un={})[Dt.STATIC]=Dt,un[Dt.DYNAMIC]=Dt,un[Dt.KINEMATIC]=Dt,un[_o.TYPE]=_o,un[wo.TYPE]=wo,un[co.TYPE]=co,un[To.TYPE]=To,un[ko.TYPE]=ko,un[Oo.TYPE]=Oo,un[en.TYPE]=en,un[nn.TYPE]=nn,un[an.TYPE]=an,un[$o.TYPE]=$o,un[mn.TYPE]=mn,un[Jo.TYPE]=Jo,un[pn.TYPE]=pn,un[vn.TYPE]=vn,un[An.TYPE]=An,un),Vn={rootClass:so,preSerialize:function(t){return t},postSerialize:function(t,e){return t},preDeserialize:function(t){return t},postDeserialize:function(t,e){return t}},Sn=function(t){var e=this;this.toJson=function(t){var i=e.options.preSerialize,o=e.options.postSerialize,n=[],s=[t],r={};function a(t,e){if(t.__sid=t.__sid||++Bn,!r[t.__sid]){s.push(t);var i={refIndex:n.length+s.length,refType:e};r[t.__sid]=i}return r[t.__sid]}function h(t,e){if(void 0===e&&(e=!1),"object"!=typeof t||null===t)return t;if("function"==typeof t._serialize){if(!e)for(var n in wn)if(t instanceof wn[n])return a(t,n);t=function(t){var e=(t=i(t))._serialize();return o(e,t)}(t)}if(Array.isArray(t)){for(var s=[],r=0;ra*a||(e.type=t.ManifoldType.e_circles,O(e.localPoint,i.m_p),j(e.localNormal),e.pointCount=1,O(e.points[0].localPoint,n.m_p),e.points[0].id.setFeatures(0,t.ContactFeatureType.e_vertex,0,t.ContactFeatureType.e_vertex))};oo.addType(co.TYPE,To.TYPE,(function(t,e,i,o,n,s,r){var a=i.getShape(),h=s.getShape();Yn(t,a,e,h,n)})),oo.addType(_o.TYPE,To.TYPE,(function(t,e,i,o,n,s,r){var a=i.getShape(),h=new co;a.getChildEdge(h,o);var c=h,m=s.getShape();Yn(t,c,e,m,n)}));var On=k(0,0),jn=k(0,0),Nn=k(0,0),Rn=k(0,0),Dn=k(0,0),En=k(0,0),Yn=function(e,i,o,n,s){e.pointCount=0,ct(Rn,s,o,n.m_p);var r=i.m_vertex1,a=i.m_vertex2;E(On,a,r);var h=$(On,a)-$(On,Rn),c=$(On,Rn)-$(On,r),m=i.m_radius+n.m_radius;if(c<=0){if(O(Dn,r),it(Rn,r)>m*m)return;if(i.m_hasVertex0){var l=i.m_vertex0,u=r;if(E(jn,u,l),$(jn,u)-$(jn,Rn)>0)return}return e.type=t.ManifoldType.e_circles,j(e.localNormal),O(e.localPoint,Dn),e.pointCount=1,O(e.points[0].localPoint,n.m_p),void e.points[0].id.setFeatures(0,t.ContactFeatureType.e_vertex,0,t.ContactFeatureType.e_vertex)}if(h<=0){if(O(Dn,a),it(Rn,Dn)>m*m)return;if(i.m_hasVertex3){var _=i.m_vertex3,p=a;if(E(Nn,_,p),$(Nn,Rn)-$(Nn,p)>0)return}return e.type=t.ManifoldType.e_circles,j(e.localNormal),O(e.localPoint,Dn),e.pointCount=1,O(e.points[0].localPoint,n.m_p),void e.points[0].id.setFeatures(1,t.ContactFeatureType.e_vertex,0,t.ContactFeatureType.e_vertex)}var y=tt(On);J(Dn,h/y,r,c/y,a),it(Rn,Dn)>m*m||(G(En,1,On),$(En,Rn)-$(En,r)<0&&N(En),K(En),e.type=t.ManifoldType.e_faceA,O(e.localNormal,En),O(e.localPoint,r),e.pointCount=1,O(e.points[0].localPoint,n.m_p),e.points[0].id.setFeatures(0,t.ContactFeatureType.e_face,0,t.ContactFeatureType.e_vertex))},Wn=[new _i,new _i],Hn=[new _i,new _i],Xn=[new _i,new _i],Jn=k(0,0),Un=k(0,0),Kn=k(0,0),Zn=st(0,0,0),Gn=k(0,0),Qn=k(0,0),$n=k(0,0),ts=k(0,0),es=k(0,0),is=k(0,0),os=k(0,0),ns=k(0,0);function ss(t,e,i,o,n){var s=t.m_count,r=i.m_count,a=t.m_normals,h=t.m_vertices,c=i.m_vertices;mt(Zn,o,e);for(var m=0,l=-1/0,u=0;ul&&(l=_,m=u)}n.maxSeparation=l,n.bestIndex=m}oo.addType(wo.TYPE,wo.TYPE,(function(t,e,i,o,n,s,r){as(t,i.getShape(),e,s.getShape(),n)}));var rs={maxSeparation:0,bestIndex:0},as=function(e,i,o,n,s){e.pointCount=0;var r=i.m_radius+n.m_radius;ss(i,o,n,s,rs);var a=rs.bestIndex,h=rs.maxSeparation;if(!(h>r)){ss(n,s,i,o,rs);var c=rs.bestIndex,m=rs.maxSeparation;if(!(m>r)){var l,u,_,p,y,f;m>h+.1*b.linearSlop?(l=n,u=i,_=s,p=o,y=c,e.type=t.ManifoldType.e_faceB,f=!0):(l=i,u=n,_=o,p=s,y=a,e.type=t.ManifoldType.e_faceA,f=!1),Wn[0].recycle(),Wn[1].recycle(),function(e,i,o,n,s,r){var a=i.m_normals,h=s.m_count,c=s.m_vertices,m=s.m_normals;!function(t,e,i,o){var n=e.c*o.x+e.s*o.y,s=-e.s*o.x+e.c*o.y,r=i.c*n-i.s*s,a=i.s*n+i.c*s;t.x=r,t.y=a}(ns,r.q,o.q,a[n]);for(var l=0,u=1/0,_=0;_c)return;p>h&&(h=p,a=_)}var y=a,f=y+1c*c)return;e.pointCount=1,e.type=t.ManifoldType.e_faceA,E(e.localNormal,hs,d),K(e.localNormal),O(e.localPoint,d),O(e.points[0].localPoint,n.m_p),e.points[0].id.setFeatures(0,t.ContactFeatureType.e_vertex,0,t.ContactFeatureType.e_vertex)}else if(g<=0){if(it(hs,v)>c*c)return;e.pointCount=1,e.type=t.ManifoldType.e_faceA,E(e.localNormal,hs,v),K(e.localNormal),O(e.localPoint,v),O(e.points[0].localPoint,n.m_p),e.points[0].id.setFeatures(0,t.ContactFeatureType.e_vertex,0,t.ContactFeatureType.e_vertex)}else{if(J(cs,.5,d,.5,v),$(hs,u[y])-$(cs,u[y])>c)return;e.pointCount=1,e.type=t.ManifoldType.e_faceA,O(e.localNormal,u[y]),O(e.localPoint,cs),O(e.points[0].localPoint,n.m_p),e.points[0].id.setFeatures(0,t.ContactFeatureType.e_vertex,0,t.ContactFeatureType.e_vertex)}},ls=Math.min;oo.addType(co.TYPE,wo.TYPE,(function(t,e,i,o,n,s,r){js(t,i.getShape(),e,s.getShape(),n)})),oo.addType(_o.TYPE,wo.TYPE,(function(t,e,i,o,n,s,r){i.getShape().getChildEdge(ps,o),js(t,ps,e,s.getShape(),n)}));var us,_s,ps=new co;!function(t){t[t.e_unknown=-1]="e_unknown",t[t.e_edgeA=1]="e_edgeA",t[t.e_edgeB=2]="e_edgeB"}(us||(us={})),function(t){t[t.e_isolated=0]="e_isolated",t[t.e_concave=1]="e_concave",t[t.e_convex=2]="e_convex"}(_s||(_s={}));var ys=function(){},fs=function(){this.vertices=[],this.normals=[],this.count=0;for(var t=0;t=0,p=y.dot(Is,Cs)-y.dot(Is,r)),l&&(E(Ss,c,h),K(Ss),q(Fs,Ss.y,-Ss.x),v=y.crossVec2Vec2(Vs,Ss)>0,f=y.dot(Fs,Cs)-y.dot(Fs,h)),j(Ts),j(Ls),j(ks),m&&l?d&&v?(u=p>=0||_>=0||f>=0)?(O(Ts,zs),O(Ls,Is),O(ks,Fs)):(W(Ts,-1,zs),W(Ls,-1,zs),W(ks,-1,zs)):d?(u=p>=0||_>=0&&f>=0)?(O(Ts,zs),O(Ls,Is),O(ks,zs)):(W(Ts,-1,zs),W(Ls,-1,Fs),W(ks,-1,zs)):v?(u=f>=0||p>=0&&_>=0)?(O(Ts,zs),O(Ls,zs),O(ks,Fs)):(W(Ts,-1,zs),W(Ls,-1,zs),W(ks,-1,Is)):(u=p>=0&&_>=0&&f>=0)?(O(Ts,zs),O(Ls,zs),O(ks,zs)):(W(Ts,-1,zs),W(Ls,-1,Fs),W(ks,-1,Is)):m?d?(u=p>=0||_>=0)?(O(Ts,zs),O(Ls,Is),W(ks,-1,zs)):(W(Ts,-1,zs),O(Ls,zs),W(ks,-1,zs)):(u=p>=0&&_>=0)?(O(Ts,zs),O(Ls,zs),W(ks,-1,zs)):(W(Ts,-1,zs),O(Ls,zs),W(ks,-1,Is)):l?v?(u=_>=0||f>=0)?(O(Ts,zs),W(Ls,-1,zs),O(ks,Fs)):(W(Ts,-1,zs),W(Ls,-1,zs),O(ks,zs)):(u=_>=0&&f>=0)?(O(Ts,zs),W(Ls,-1,zs),O(ks,zs)):(W(Ts,-1,zs),W(Ls,-1,Fs),O(ks,zs)):(u=_>=0)?(O(Ts,zs),W(Ls,-1,zs),W(ks,-1,zs)):(W(Ts,-1,zs),O(Ls,zs),O(ks,zs)),Bs.count=n.m_count;for(var x=0;xg)){As.type=us.e_unknown,As.index=-1,As.separation=-1/0,q(qs,-Ts.y,Ts.x);for(x=0;xg){As.type=us.e_edgeB,As.index=x,As.separation=B;break}if($(Os,qs)>=0){if($(Os,Ts)-$(ks,Ts)<-b.angularSlop)continue}else if($(Os,Ts)-$(Ls,Ts)<-b.angularSlop)continue;B>As.separation&&(As.type=us.e_edgeB,As.index=x,As.separation=B)}if(!(As.type!=us.e_unknown&&As.separation>g)){var M;if(M=As.type==us.e_unknown?bs:As.separation>.98*bs.separation+.001?As:bs,gs[0].recycle(),gs[1].recycle(),M.type==us.e_edgeA){e.type=t.ManifoldType.e_faceA;var V=0,S=$(Ts,Bs.normals[0]);for(x=1;xe?(t=(t-e)%(i-e))+(t<0?i:e):(t=(t-i)%(e-i))+(t<=0?e:i)}function Ws(t,e,i){return ti?i:t}function Hs(t,e){return Ds(t*t+e*e)}var Xs=Object.create(Math);Xs.random=Es,Xs.wrap=Ys,Xs.clamp=Ws,Xs.length=Hs,Xs.rotate=Ys,Xs.limit=Ws;var Js=function(){function t(t,e,i,o,n,s){this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,"object"==typeof t?this.reset(t):this.reset(t,e,i,o,n,s)}return t.prototype.toString=function(){return"["+this.a+", "+this.b+", "+this.c+", "+this.d+", "+this.e+", "+this.f+"]"},t.prototype.clone=function(){return new t(this.a,this.b,this.c,this.d,this.e,this.f)},t.prototype.reset=function(t,e,i,o,n,s){return this._dirty=!0,"object"==typeof t?(this.a=t.a,this.d=t.d,this.b=t.b,this.c=t.c,this.e=t.e,this.f=t.f):(this.a="number"==typeof t?t:1,this.b="number"==typeof e?e:0,this.c="number"==typeof i?i:0,this.d="number"==typeof o?o:1,this.e="number"==typeof n?n:0,this.f="number"==typeof s?s:0),this},t.prototype.identity=function(){return this._dirty=!0,this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this},t.prototype.rotate=function(t){if(!t)return this;this._dirty=!0;var e=t?Math.cos(t):1,i=t?Math.sin(t):0,o=e*this.a-i*this.b,n=e*this.b+i*this.a,s=e*this.c-i*this.d,r=e*this.d+i*this.c,a=e*this.e-i*this.f,h=e*this.f+i*this.e;return this.a=o,this.b=n,this.c=s,this.d=r,this.e=a,this.f=h,this},t.prototype.translate=function(t,e){return t||e?(this._dirty=!0,this.e+=t,this.f+=e,this):this},t.prototype.scale=function(t,e){return t-1||e-1?(this._dirty=!0,this.a*=t,this.b*=e,this.c*=t,this.d*=e,this.e*=t,this.f*=e,this):this},t.prototype.skew=function(t,e){if(!t&&!e)return this;this._dirty=!0;var i=this.a+this.b*t,o=this.b+this.a*e,n=this.c+this.d*t,s=this.d+this.c*e,r=this.e+this.f*t,a=this.f+this.e*e;return this.a=i,this.b=o,this.c=n,this.d=s,this.e=r,this.f=a,this},t.prototype.concat=function(t){this._dirty=!0;var e=this.a*t.a+this.b*t.c,i=this.b*t.d+this.a*t.b,o=this.c*t.a+this.d*t.c,n=this.d*t.d+this.c*t.b,s=this.e*t.a+t.e+this.f*t.c,r=this.f*t.d+t.f+this.e*t.b;return this.a=e,this.b=i,this.c=o,this.d=n,this.e=s,this.f=r,this},t.prototype.inverse=function(){if(this._dirty){this._dirty=!1,this.inverted||(this.inverted=new t);var e=this.a*this.d-this.b*this.c;this.inverted.a=this.d/e,this.inverted.b=-this.b/e,this.inverted.c=-this.c/e,this.inverted.d=this.a/e,this.inverted.e=(this.c*this.f-this.e*this.d)/e,this.inverted.f=(this.e*this.b-this.a*this.f)/e}return this.inverted},t.prototype.map=function(t,e){return(e=e||{x:0,y:0}).x=this.a*t.x+this.c*t.y+this.e,e.y=this.b*t.x+this.d*t.y+this.f,e},t.prototype.mapX=function(t,e){return"object"==typeof t&&(e=t.y,t=t.x),this.a*t+this.c*e+this.e},t.prototype.mapY=function(t,e){return"object"==typeof t&&(e=t.y,t=t.x),this.b*t+this.d*e+this.f},t}(),Us=Object.prototype.toString;function Ks(t){var e=Us.call(t);return"[object Function]"===e||"[object GeneratorFunction]"===e||"[object AsyncFunction]"===e}function Zs(t){return"[object Object]"===Us.call(t)&&t.constructor===Object}const Gs={create:0,tick:0,node:0,draw:0,fps:0};var Qs=function(){return Date.now().toString(36)+Math.random().toString(36).slice(2)},$s=function(){function t(){this.uid="texture:"+Qs(),this.sx=0,this.sy=0,this.dx=0,this.dy=0}return t.prototype.setSourceCoordinate=function(t,e){this.sx=t,this.sy=e},t.prototype.setSourceDimension=function(t,e){this.sw=t,this.sh=e},t.prototype.setDestinationCoordinate=function(t,e){this.dx=t,this.dy=e},t.prototype.setDestinationDimension=function(t,e){this.dw=t,this.dh=e},t.prototype.draw=function(t,e,i,o,n,s,r,a,h){var c=this.sx,m=this.sy,l=this.sw,u=this.sh,_=this.dx,p=this.dy,y=this.dw,f=this.dh;"number"!=typeof e&&"number"!=typeof i&&"number"!=typeof o&&"number"!=typeof n&&"number"!=typeof s&&"number"!=typeof r&&"number"!=typeof a&&"number"!=typeof h||("number"==typeof s||"number"==typeof r||"number"==typeof a||"number"==typeof h?(c+=e,m+=i,l=null!=o?o:l,u=null!=n?n:u,_+=s,p+=r,y=null!=a?a:y,f=null!=h?h:f):(_+=e,p+=i,y=o,f=n)),this.drawWithNormalizedArgs(t,c,m,l,u,_,p,y,f)},t}(),tr=function(){var t=function(e,i){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])})(e,i)};return function(e,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function o(){this.constructor=e}t(e,i),e.prototype=null===i?Object.create(i):(o.prototype=i.prototype,new o)}}(),er=function(t){function e(e,i){var o=t.call(this)||this;return o._pixelRatio=1,"object"==typeof e&&o.setSourceImage(e,i),o}return tr(e,t),e.prototype.setSourceImage=function(t,e){void 0===e&&(e=1),this._source=t,this._pixelRatio=e},e.prototype.getWidth=function(){return this._source.width/this._pixelRatio},e.prototype.getHeight=function(){return this._source.height/this._pixelRatio},e.prototype.prerender=function(t){return!1},e.prototype.drawWithNormalizedArgs=function(t,e,i,o,n,s,r,a,h){var c=this._source;if(null!==c&&"object"==typeof c){o=null!=o?o:this.getWidth(),n=null!=n?n:this.getHeight(),a=null!=a?a:o,h=null!=h?h:n,e*=this._pixelRatio,i*=this._pixelRatio,o*=this._pixelRatio,n*=this._pixelRatio;try{Gs.draw++,t.drawImage(c,e,i,o,n,s,r,a,h)}catch(t){this._draw_failed||(console.log("Unable to draw: ",c),console.log(t),this._draw_failed=!0)}}},e}($s),ir=function(){var t=function(e,i){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])})(e,i)};return function(e,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function o(){this.constructor=e}t(e,i),e.prototype=null===i?Object.create(i):(o.prototype=i.prototype,new o)}}(),or=function(t){function e(e){var i=t.call(this)||this;return i._source=e,i}return ir(e,t),e.prototype.setSourceTexture=function(t){this._source=t},e.prototype.getWidth=function(){var t,e;return null!==(e=null!==(t=this.dw)&&void 0!==t?t:this.sw)&&void 0!==e?e:this._source.getWidth()},e.prototype.getHeight=function(){var t,e;return null!==(e=null!==(t=this.dh)&&void 0!==t?t:this.sh)&&void 0!==e?e:this._source.getHeight()},e.prototype.prerender=function(t){return this._source.prerender(t)},e.prototype.drawWithNormalizedArgs=function(t,e,i,o,n,s,r,a,h){var c=this._source;null!==c&&"object"==typeof c&&c.draw(t,e,i,o,n,s,r,a,h)},e}($s),nr=function(){var t=function(e,i){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])})(e,i)};return function(e,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function o(){this.constructor=e}t(e,i),e.prototype=null===i?Object.create(i):(o.prototype=i.prototype,new o)}}(),sr=function(t,e,i,o){return new(i||(i=Promise))((function(n,s){function r(t){try{h(o.next(t))}catch(t){s(t)}}function a(t){try{h(o.throw(t))}catch(t){s(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(r,a)}h((o=o.apply(t,e||[])).next())}))},rr=function(t,e){var i,o,n,s,r={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(i)throw new TypeError("Generator is already executing.");for(;r;)try{if(i=1,o&&(n=2&s[0]?o.return:s[0]?o.throw||((n=o.return)&&n.call(o),0):o.next)&&!(n=n.call(o,s[1])).done)return n;switch(o=0,n&&(s=[2&s[0],n.value]),s[0]){case 0:case 1:n=s;break;case 4:return r.label++,{value:s[1],done:!1};case 5:r.label++,o=s[1],s=[0];continue;case 7:s=r.ops.pop(),r.trys.pop();continue;default:if(!(n=r.trys,(n=n.length>0&&n[n.length-1])||6!==s[0]&&2!==s[0])){r=0;continue}if(3===s[0]&&(!n||s[1]>n[0]&&s[1]0&&n[n.length-1])||6!==s[0]&&2!==s[0])){r=0;continue}if(3===s[0]&&(!n||s[1]>n[0]&&s[1]0&&t.length>i+1){var o=pr[t.slice(0,i)];e=o&&o.select(t.slice(i+1))}if(!e){var n=pr[t];e=n&&n.select()}if(!e)for(var s=0;s0&&u>0&&c.draw(t,0,0,u,p,0,0,u,p),y>0&&u>0&&c.draw(t,0,d+p,u,y,0,l+p,u,y),p>0&&_>0&&c.draw(t,f+u,0,_,p,m+u,0,_,p),y>0&&_>0&&c.draw(t,f+u,d+p,_,y,m+u,l+p,_,y),"stretch"===this._resizeMode)p>0&&c.draw(t,u,0,f,p,u,0,m,p),y>0&&c.draw(t,u,d+p,f,y,u,l+p,m,y),u>0&&c.draw(t,0,p,u,d,0,p,u,l),_>0&&c.draw(t,f+u,p,_,d,m+u,p,_,l),c.draw(t,u,p,f,d,u,p,m,l);else if("tile"===this._resizeMode)for(var v=u,x=m,g=void 0;x>0;){g=Math.min(f,x),x-=f;for(var b=p,A=l,B=void 0;A>0;)B=Math.min(d,A),A-=d,c.draw(t,u,p,g,B,v,b,g,B),x<=0&&(u&&c.draw(t,0,p,u,B,0,b,u,B),_&&c.draw(t,f+u,p,_,B,v+g,b,_,B)),b+=B;p&&c.draw(t,u,0,g,p,v,0,g,p),y&&c.draw(t,u,d+p,g,y,v,b,g,y),v+=g}}},e}($s);function xr(t){return t&&("cover"===t||"contain"===t||"fill"===t||"in"===t||"in-pad"===t||"out"===t||"out-crop"===t)}var gr=0,br=function(){function t(t){this.uid="pin:"+Qs(),this._owner=t,this._parent=null,this._relativeMatrix=new Js,this._absoluteMatrix=new Js,this.reset()}return t.prototype.reset=function(){this._textureAlpha=1,this._alpha=1,this._width=0,this._height=0,this._scaleX=1,this._scaleY=1,this._skewX=0,this._skewY=0,this._rotation=0,this._pivoted=!1,this._pivotX=0,this._pivotY=0,this._handled=!1,this._handleX=0,this._handleY=0,this._aligned=!1,this._alignX=0,this._alignY=0,this._offsetX=0,this._offsetY=0,this._boxX=0,this._boxY=0,this._boxWidth=this._width,this._boxHeight=this._height,this._ts_translate=++gr,this._ts_transform=++gr,this._ts_matrix=++gr},t.prototype._update=function(){return this._parent=this._owner._parent&&this._owner._parent._pin,this._handled&&this._mo_handle!=this._ts_transform&&(this._mo_handle=this._ts_transform,this._ts_translate=++gr),this._aligned&&this._parent&&this._mo_align!=this._parent._ts_transform&&(this._mo_align=this._parent._ts_transform,this._ts_translate=++gr),this},t.prototype.toString=function(){return this._owner+" ("+(this._parent?this._parent._owner:null)+")"},t.prototype.absoluteMatrix=function(){this._update();var t=Math.max(this._ts_transform,this._ts_translate,this._parent?this._parent._ts_matrix:0);if(this._mo_abs==t)return this._absoluteMatrix;this._mo_abs=t;var e=this._absoluteMatrix;return e.reset(this.relativeMatrix()),this._parent&&e.concat(this._parent._absoluteMatrix),this._ts_matrix=++gr,e},t.prototype.relativeMatrix=function(){this._update();var t=Math.max(this._ts_transform,this._ts_translate,this._parent?this._parent._ts_transform:0);if(this._mo_rel==t)return this._relativeMatrix;this._mo_rel=t;var e=this._relativeMatrix;if(e.identity(),this._pivoted&&e.translate(-this._pivotX*this._width,-this._pivotY*this._height),e.scale(this._scaleX,this._scaleY),e.skew(this._skewX,this._skewY),e.rotate(this._rotation),this._pivoted&&e.translate(this._pivotX*this._width,this._pivotY*this._height),this._pivoted)this._boxX=0,this._boxY=0,this._boxWidth=this._width,this._boxHeight=this._height;else{var i=void 0,o=void 0;e.a>0&&e.c>0||e.a<0&&e.c<0?(i=0,o=e.a*this._width+e.c*this._height):(i=e.a*this._width,o=e.c*this._height),i>o?(this._boxX=o,this._boxWidth=i-o):(this._boxX=i,this._boxWidth=o-i),e.b>0&&e.d>0||e.b<0&&e.d<0?(i=0,o=e.b*this._width+e.d*this._height):(i=e.b*this._width,o=e.d*this._height),i>o?(this._boxY=o,this._boxHeight=i-o):(this._boxY=i,this._boxHeight=o-i)}return this._x=this._offsetX,this._y=this._offsetY,this._x-=this._boxX+this._handleX*this._boxWidth,this._y-=this._boxY+this._handleY*this._boxHeight,this._aligned&&this._parent&&(this._parent.relativeMatrix(),this._x+=this._alignX*this._parent._width,this._y+=this._alignY*this._parent._height),e.translate(this._x,this._y),this._relativeMatrix},t.prototype.get=function(t){if("function"==typeof Ar[t])return Ar[t](this)},t.prototype.set=function(t,e){if("string"==typeof t)"function"==typeof Br[t]&&void 0!==e&&Br[t](this,e);else if("object"==typeof t)for(e in t)"function"==typeof Br[e]&&void 0!==t[e]&&Br[e](this,t[e],t);return this._owner&&(this._owner._ts_pin=++gr,this._owner.touch()),this},t.prototype.fit=function(t,e,i){this._ts_transform=++gr,"contain"===i&&(i="in-pad"),"cover"===i&&(i="out-crop"),"number"==typeof t&&(this._scaleX=t/this._unscaled_width,this._width=this._unscaled_width),"number"==typeof e&&(this._scaleY=e/this._unscaled_height,this._height=this._unscaled_height),"number"==typeof t&&"number"==typeof e&&"string"==typeof i&&("fill"===i||("out"===i||"out-crop"===i?this._scaleX=this._scaleY=Math.max(this._scaleX,this._scaleY):"in"!==i&&"in-pad"!==i||(this._scaleX=this._scaleY=Math.min(this._scaleX,this._scaleY))),"out-crop"!==i&&"in-pad"!==i||(this._width=t/this._scaleX,this._height=e/this._scaleY))},t}(),Ar={alpha:function(t){return t._alpha},textureAlpha:function(t){return t._textureAlpha},width:function(t){return t._width},height:function(t){return t._height},boxWidth:function(t){return t._boxWidth},boxHeight:function(t){return t._boxHeight},scaleX:function(t){return t._scaleX},scaleY:function(t){return t._scaleY},skewX:function(t){return t._skewX},skewY:function(t){return t._skewY},rotation:function(t){return t._rotation},pivotX:function(t){return t._pivotX},pivotY:function(t){return t._pivotY},offsetX:function(t){return t._offsetX},offsetY:function(t){return t._offsetY},alignX:function(t){return t._alignX},alignY:function(t){return t._alignY},handleX:function(t){return t._handleX},handleY:function(t){return t._handleY}},Br={alpha:function(t,e){t._alpha=e},textureAlpha:function(t,e){t._textureAlpha=e},width:function(t,e){t._unscaled_width=e,t._width=e,t._ts_transform=++gr},height:function(t,e){t._unscaled_height=e,t._height=e,t._ts_transform=++gr},scale:function(t,e){t._scaleX=e,t._scaleY=e,t._ts_transform=++gr},scaleX:function(t,e){t._scaleX=e,t._ts_transform=++gr},scaleY:function(t,e){t._scaleY=e,t._ts_transform=++gr},skew:function(t,e){t._skewX=e,t._skewY=e,t._ts_transform=++gr},skewX:function(t,e){t._skewX=e,t._ts_transform=++gr},skewY:function(t,e){t._skewY=e,t._ts_transform=++gr},rotation:function(t,e){t._rotation=e,t._ts_transform=++gr},pivot:function(t,e){t._pivotX=e,t._pivotY=e,t._pivoted=!0,t._ts_transform=++gr},pivotX:function(t,e){t._pivotX=e,t._pivoted=!0,t._ts_transform=++gr},pivotY:function(t,e){t._pivotY=e,t._pivoted=!0,t._ts_transform=++gr},offset:function(t,e){t._offsetX=e,t._offsetY=e,t._ts_translate=++gr},offsetX:function(t,e){t._offsetX=e,t._ts_translate=++gr},offsetY:function(t,e){t._offsetY=e,t._ts_translate=++gr},align:function(t,e){this.alignX(t,e),this.alignY(t,e)},alignX:function(t,e){t._alignX=e,t._aligned=!0,t._ts_translate=++gr,this.handleX(t,e)},alignY:function(t,e){t._alignY=e,t._aligned=!0,t._ts_translate=++gr,this.handleY(t,e)},handle:function(t,e){this.handleX(t,e),this.handleY(t,e)},handleX:function(t,e){t._handleX=e,t._handled=!0,t._ts_translate=++gr},handleY:function(t,e){t._handleY=e,t._handled=!0,t._ts_translate=++gr},resizeMode:function(t,e,i){i&&("in"==e?e="in-pad":"out"==e&&(e="out-crop"),t.fit(i.resizeWidth,i.resizeHeight,e))},resizeWidth:function(t,e,i){i&&i.resizeMode||t.fit(e,null)},resizeHeight:function(t,e,i){i&&i.resizeMode||t.fit(null,e)},scaleMode:function(t,e,i){i&&t.fit(i.scaleWidth,i.scaleHeight,e)},scaleWidth:function(t,e,i){i&&i.scaleMode||t.fit(e,null)},scaleHeight:function(t,e,i){i&&i.scaleMode||t.fit(null,e)},matrix:function(t,e){this.scaleX(t,e.a),this.skewX(t,e.c/e.d),this.skewY(t,e.b/e.a),this.scaleY(t,e.d),this.offsetX(t,e.e),this.offsetY(t,e.f),this.rotation(t,0)}};function wr(t){return t}var Cr={},Mr={},Vr={},Sr=function(){function t(){}return t.get=function(t,e){if(e=e||wr,"function"==typeof t)return t;if("string"!=typeof t)return e;var i=Cr[t];if(i)return i;var o=/^(\w+)(-(in|out|in-out|out-in))?(\((.*)\))?$/i.exec(t);if(!o||!o.length)return e;var n=o[1],s=Vr[n],r=o[3],a=Mr[r],h=o[5];if(s)if("fn"in s&&"function"==typeof s.fn)i=s.fn;else if("fc"in s&&"function"==typeof s.fc){var c=h?h.replace(/\s+/,"").split(","):void 0;i=s.fc.apply(s.fc,c)}else i=e;else i=e;return a&&(i=a(i)),Cr[t]=i,i},t}();function Pr(t,e){Mr[t]=e}function Tr(t){for(var e=t.name.split(/\s+/),i=0;i=1;"function"==typeof this._easing&&(r=this._easing(r));var h=1-r;for(var s in this._end)this._owner.pin(s,this._start[s]*h+this._end[s]*r);return a}},t.prototype.finish=function(){var t=this;return this._ending.forEach((function(e){try{e.call(t._owner)}catch(t){console.error(t)}})),this._next},t.prototype.tween=function(e,i){var o;return"object"==typeof e&&null!==e?o=e:(o={},"number"==typeof e&&(o.duration=e,"number"==typeof i&&(o.delay=i))),this._next=new t(this._owner,o)},t.prototype.duration=function(t){return this._duration=t,this},t.prototype.delay=function(t){return this._delay=t,this},t.prototype.ease=function(t){return this._easing=Sr.get(t),this},t.prototype.done=function(t){return this._ending.push(t),this},t.prototype.hide=function(){return this._ending.push((function(){this.hide()})),this._hide=!0,this},t.prototype.remove=function(){return this._ending.push((function(){this.remove()})),this._remove=!0,this},t.prototype.pin=function(t,e){if("object"==typeof t)for(var i in t)zr(this._owner,this._end,i,t[i]);else void 0!==e&&zr(this._owner,this._end,t,e);return this},t.prototype.then=function(t){return this.done(t),this},t.prototype.clear=function(t){return this},t.prototype.size=function(t,e){return this.pin("width",t),this.pin("height",e),this},t.prototype.width=function(t){return void 0===t?this.pin("width"):(this.pin("width",t),this)},t.prototype.height=function(t){return void 0===t?this.pin("height"):(this.pin("height",t),this)},t.prototype.offset=function(t,e){return"object"==typeof t&&(e=t.y,t=t.x),this.pin("offsetX",t),this.pin("offsetY",e),this},t.prototype.rotate=function(t){return this.pin("rotation",t),this},t.prototype.skew=function(t,e){return"object"==typeof t?(e=t.y,t=t.x):void 0===e&&(e=t),this.pin("skewX",t),this.pin("skewY",e),this},t.prototype.scale=function(t,e){return"object"==typeof t?(e=t.y,t=t.x):void 0===e&&(e=t),this.pin("scaleX",t),this.pin("scaleY",e),this},t.prototype.alpha=function(t,e){return this.pin("alpha",t),void 0!==e&&this.pin("textureAlpha",e),this},t}();function zr(t,e,i,o){"number"==typeof t.pin(i)?e[i]=o:"number"==typeof t.pin(i+"X")&&"number"==typeof t.pin(i+"Y")&&(e[i+"X"]=o,e[i+"Y"]=o)}var Fr=0;function Lr(t){if(t&&t instanceof jr)return t;throw"Invalid node: "+t}function kr(){return new jr}function qr(){return kr().minimize().label("Minimize")}function Or(){return kr().maximize().label("Maximize")}Gs.create=0;var jr=function(){function t(){var t=this;this.uid="node:"+Qs(),this._label="",this._parent=null,this._next=null,this._prev=null,this._first=null,this._last=null,this._visible=!0,this._alpha=1,this._padding=0,this._spacing=0,this._pin=new br(this),this._listeners={},this._attrs={},this._flags={},this._transitions=[],this._tickBefore=[],this._tickAfter=[],this.MAX_ELAPSE=1/0,this._transitionTickInitied=!1,this._transitionTickLastTime=0,this._transitionTick=function(e,i,o){if(!t._transitions.length)return!1;var n=t._transitionTickLastTime!==o;if(t._transitionTickLastTime=i,n)return!0;var s=t._transitions[0];if(s.tick(t,e,i,o)){s===t._transitions[0]&&t._transitions.shift();var r=s.finish();r&&t._transitions.unshift(r)}return!0},Gs.create++}return t.prototype.matrix=function(t){return void 0===t&&(t=!1),!0===t?this._pin.relativeMatrix():this._pin.absoluteMatrix()},t.prototype.getPixelRatio=function(){var t,e=null===(t=this._parent)||void 0===t?void 0:t.matrix();return e?Math.max(Math.abs(e.a),Math.abs(e.b))/("undefined"!=typeof window&&window.devicePixelRatio||1):1},t.prototype.pin=function(t,e){return"object"==typeof t?(this._pin.set(t),this):"string"==typeof t?void 0===e?this._pin.get(t):(this._pin.set(t,e),this):void 0===t?this._pin:void 0},t.prototype.fit=function(t,e,i){return"object"==typeof t&&(i=e,e=t.y,t=t.x),this._pin.fit(t,e,i),this},t.prototype.scaleTo=function(t,e,i){return this.fit(t,e,i)},t.prototype.toString=function(){return"["+this._label+"]"},t.prototype.id=function(t){return this.label(t)},t.prototype.label=function(t){return void 0===t?this._label:(this._label=t,this)},t.prototype.attr=function(t,e){return void 0===e?null!==this._attrs?this._attrs[t]:void 0:((null!==this._attrs?this._attrs:this._attrs={})[t]=e,this)},t.prototype.visible=function(t){return void 0===t?this._visible:(this._visible=t,this._parent&&(this._parent._ts_children=++Fr),this._ts_pin=++Fr,this.touch(),this)},t.prototype.hide=function(){return this.visible(!1),this},t.prototype.show=function(){return this.visible(!0),this},t.prototype.parent=function(){return this._parent},t.prototype.next=function(t){for(var e=this._next;e&&t&&!e._visible;)e=e._next;return e},t.prototype.prev=function(t){for(var e=this._prev;e&&t&&!e._visible;)e=e._prev;return e},t.prototype.first=function(t){for(var e=this._first;e&&t&&!e._visible;)e=e._next;return e},t.prototype.last=function(t){for(var e=this._last;e&&t&&!e._visible;)e=e._prev;return e},t.prototype.visit=function(t,e){var i=t.reverse,o=t.visible;if(!t.start||!t.start(this,e)){for(var n,s=i?this.last(o):this.first(o);n=s;)if(s=i?n.prev(o):n.next(o),n.visit(t,e))return!0;return t.end&&t.end(this,e)}},t.prototype.append=function(e,i){if(Array.isArray(e))for(var o=0;o=0;o--)t.prepend(this,e[o]);else if(void 0!==i)for(o=arguments.length-1;o>=0;o--)t.prepend(this,arguments[o]);else void 0!==e&&t.prepend(this,e);return this},t.prototype.appendTo=function(e){return t.append(e,this),this},t.prototype.prependTo=function(e){return t.prepend(e,this),this},t.prototype.insertNext=function(e,i){if(Array.isArray(e))for(var o=0;o=0;o--)t.insertBefore(e[o],this);else if(void 0!==i)for(o=arguments.length-1;o>=0;o--)t.insertBefore(arguments[o],this);else void 0!==e&&t.insertBefore(e,this);return this},t.prototype.insertAfter=function(e){return t.insertAfter(this,e),this},t.prototype.insertBefore=function(e){return t.insertBefore(this,e),this},t.append=function(t,e){Lr(e),Lr(t),e.remove(),t._last&&(t._last._next=e,e._prev=t._last),e._parent=t,t._last=e,t._first||(t._first=e),e._parent._flag(e,!0),e._ts_parent=++Fr,t._ts_children=++Fr,t.touch()},t.prepend=function(t,e){Lr(e),Lr(t),e.remove(),t._first&&(t._first._prev=e,e._next=t._first),e._parent=t,t._first=e,t._last||(t._last=e),e._parent._flag(e,!0),e._ts_parent=++Fr,t._ts_children=++Fr,t.touch()},t.insertBefore=function(t,e){Lr(t),Lr(e),t.remove();var i=e._parent,o=e._prev;i&&(e._prev=t,o&&(o._next=t)||i&&(i._first=t),t._parent=i,t._prev=o,t._next=e,t._parent._flag(t,!0),t._ts_parent=++Fr,t.touch())},t.insertAfter=function(t,e){Lr(t),Lr(e),t.remove();var i=e._parent,o=e._next;i&&(e._next=t,o&&(o._prev=t)||i&&(i._last=t),t._parent=i,t._prev=e,t._next=o,t._parent._flag(t,!0),t._ts_parent=++Fr,t.touch())},t.prototype.remove=function(t,e){if(void 0!==t){if(Array.isArray(t))for(var i=0;i0&&(1==this._flags[t]&&this._parent&&this._parent._flag(t,!1),this._flags[t]=this._flags[t]-1)),"object"==typeof t&&t._flags)for(var i in t._flags)t._flags[i]>0&&this._flag(i,e);return this},t.prototype.hitTest=function(t){var e=this._pin._width,i=this._pin._height;return t.x>=0&&t.x<=e&&t.y>=0&&t.y<=i},t.prototype.prerender=function(){if(this._visible)for(var t,e=this._first;t=e;)e=t._next,t.prerender()},t.prototype.render=function(t){if(this._visible){Gs.node++;var e=this.matrix();t.setTransform(e.a,e.b,e.c,e.d,e.e,e.f),this._alpha=this._pin._alpha*(this._parent?this._parent._alpha:1);var i,o=this._pin._textureAlpha*this._alpha;if(t.globalAlpha!=o&&(t.globalAlpha=o),this._textures)for(var n=0,s=this._textures.length;nthis.MAX_ELAPSE&&(t=this.MAX_ELAPSE);var o,n=!1;if(null!==this._tickBefore)for(var s=0;s0||(null===(o=this._tickBefore)||void 0===o?void 0:o.length)>0;this._flag("_tick",n)}},t.prototype.untick=function(t){var e;"function"==typeof t&&(null!==this._tickBefore&&(e=this._tickBefore.indexOf(t))>=0&&this._tickBefore.splice(e,1),null!==this._tickAfter&&(e=this._tickAfter.indexOf(t))>=0&&this._tickAfter.splice(e,1))},t.prototype.timeout=function(t,e){this.setTimeout(t,e)},t.prototype.setTimeout=function(t,e){function i(o){if(!((e-=o)<0))return!0;this.untick(i),t.call(this)}return this.tick(i),i},t.prototype.clearTimeout=function(t){this.untick(t)},t.prototype.on=function(t,e){if(!t||!t.length||"function"!=typeof e)return this;if("string"!=typeof t&&"function"==typeof t.join)for(var i=0;i-1){t=t.match(/\S+/g);for(i=0;i-1){t=t.match(/\S+/g);for(i=0;i=0&&(i.splice(o,1),this._flag(t,!1))}}},t.prototype.listeners=function(t){return this._listeners[t]},t.prototype.publish=function(t,e){var i=this.listeners(t);if(!i||!i.length)return 0;for(var o=0;o1.25||o<.8;n&&(this._lastPixelRatio=e);var s=this._memoizer?this._memoizer.call(this):null,r=this._lastMemoKey!==s;if(n||r)return this._lastMemoKey=s,this._lastPixelRatio=e,"function"==typeof this._drawer&&this._drawer.call(this),!0},e.prototype.size=function(t,e,i){return this.setSize(t,e,i),this},e.prototype.context=function(t,e){return void 0===t&&(t="2d"),this.getContext(t,e)},e.prototype.canvas=function(t){return"function"==typeof t?t.call(this,this.getContext()):void 0===t&&"function"==typeof this._drawer&&this._drawer.call(this),this},e}(er);var Xr=function(){function t(){}return t.prototype.clone=function(t){return t?(t.x=this.x,t.y=this.y):t={x:this.x,y:this.y},t},t.prototype.toString=function(){return(0|this.x)+"x"+(0|this.y)},t}(),Jr=function(){function t(){this.abs=new Xr}return t.prototype.clone=function(t){return t?(t.x=this.x,t.y=this.y):t={x:this.x,y:this.y},t},t.prototype.toString=function(){return this.type+": "+(0|this.x)+"x"+(0|this.y)},t}(),Ur=function(){function t(){this.type="",this.x=0,this.y=0,this.timeStamp=-1,this.event=null,this.root=null,this.collected=null}return t.prototype.toString=function(){return this.type+": "+(0|this.x)+"x"+(0|this.y)},t}(),Kr=new Jr,Zr=new Ur,Gr=function(){function t(){var t=this;this.ratio=1,this.clickList=[],this.cancelList=[],this.handleStart=function(e){e.preventDefault(),t.localPoint(e),t.dispatchEvent(e.type,e),t.findTargets("click",t.clickList),t.findTargets("mousecancel",t.cancelList)},this.handleMove=function(e){e.preventDefault(),t.localPoint(e),t.dispatchEvent(e.type,e)},this.handleEnd=function(e){e.preventDefault(),t.dispatchEvent(e.type,e),t.clickList.length&&t.dispatchEvent("click",e,t.clickList),t.cancelList.length=0},this.handleCancel=function(e){t.cancelList.length&&t.dispatchEvent("mousecancel",e,t.cancelList),t.clickList.length=0},this.visitStart=function(t,e){return!t._flag(e.type)},this.visitEnd=function(t,e){Kr.raw=e.event,Kr.type=e.type,Kr.timeStamp=e.timeStamp,Kr.abs.x=e.x,Kr.abs.y=e.y;var i=t.listeners(e.type);if(i&&(t.matrix().inverse().map(e,Kr),(t===e.root||t.attr("spy")||t.hitTest(Kr))&&(e.collected&&e.collected.push(t),e.event))){for(var o=!1,n=0;n0&&e.drawingHeight>0&&(e.context.setTransform(1,0,0,1,0,0),e.context.clearRect(0,0,e.drawingWidth,e.drawingHeight),e.render(e.context))):e.sleep=!r,Gs.fps=s?1e3/s:0}}},e.label("Root"),e}return Qr(e,t),e.prototype.resume=function(){return(this.sleep||this.paused)&&this.requestFrame(),this.paused=!1,this.sleep=!1,this.publish("resume"),this},e.prototype.pause=function(){return this.paused||this.publish("pause"),this.paused=!0,this},e.prototype.touch=function(){return(this.sleep||this.paused)&&this.requestFrame(),this.sleep=!1,t.prototype.touch.call(this)},e.prototype.unmount=function(){var t;this.mounted=!1;var e=ta.indexOf(this);return e>=0&&ta.splice(e,1),null===(t=this.pointer)||void 0===t||t.unmount(),this},e.prototype.background=function(t){return this.dom&&(this.dom.style.backgroundColor=t),this},e.prototype.viewport=function(t,e,i){if(void 0===t)return Object.assign({},this._viewport);if("object"==typeof t){var o=t;t=o.width,e=o.height,i=o.ratio}if("number"==typeof t&&"number"==typeof e){this._viewport={width:t,height:e,ratio:"number"==typeof i?i:1},this.viewbox();var n=Object.assign({},this._viewport);this.visit({start:function(t){if(!t._flag("viewport"))return!0;t.publish("viewport",[n])}})}return this},e.prototype.viewbox=function(t,e,i){return"number"==typeof t&&"number"==typeof e?this._viewbox={width:t,height:e,mode:i}:"object"==typeof t&&null!==t&&(this._viewbox=$r({},t)),this.rescale(),this},e.prototype.camera=function(t){return this._camera=t,this.rescale(),this},e.prototype.rescale=function(){var t=this._viewbox,e=this._viewport,i=this._camera;if(e&&t){var o=e.width,n=e.height,s=xr(t.mode)?t.mode:"in-pad",r=t.width,a=t.height;this.pin({width:r,height:a}),this.scaleTo(o,n,s);var h=t.x||0,c=t.y||0,m=(null==i?void 0:i.a)||1,l=(null==i?void 0:i.e)||0,u=(null==i?void 0:i.f)||0,_=this.pin("scaleX"),p=this.pin("scaleY");this.pin("scaleX",_*m),this.pin("scaleY",p*m),this.pin("offsetX",l-h*_*m),this.pin("offsetY",u-c*p*m)}else e&&this.pin({width:e.width,height:e.height});return this},e}(jr),ia=function(){var t=function(e,i){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])})(e,i)};return function(e,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function o(){this.constructor=e}t(e,i),e.prototype=null===i?Object.create(i):(o.prototype=i.prototype,new o)}}();var oa=function(t){function e(){var e=t.call(this)||this;e.label("Anim"),e._textures=[],e._fps=15,e._ft=1e3/e._fps,e._time=-1,e._repeat=0,e._index=0,e._frames=[];var i=0;return e.tick((function(t,e,o){if(!(this._time<0||this._frames.length<=1)){var n=i!=o;if(i=e,n)return!0;if(this._time+=t,this._time0&&(this._repeat-=s)<=0)||(this.stop(),this._callback&&this._callback(),!1)}}),!1),e}return ia(e,t),e.prototype.fps=function(t){return void 0===t?this._fps:(this._fps=t>0?t:15,this._ft=1e3/this._fps,this)},e.prototype.setFrames=function(t){return this.frames(t)},e.prototype.frames=function(t){return this._index=0,this._frames=fr(t).array(),this.touch(),this},e.prototype.length=function(){return this._frames?this._frames.length:0},e.prototype.gotoFrame=function(t,e){return void 0===e&&(e=!1),this._index=0|Xs.wrap(t,this._frames.length),e=e||!this._textures[0],this._textures[0]=this._frames[this._index],e&&(this.pin("width",this._textures[0].getWidth()),this.pin("height",this._textures[0].getHeight())),this.touch(),this},e.prototype.moveFrame=function(t){return this.gotoFrame(this._index+t)},e.prototype.repeat=function(t,e){return this._repeat=t*this._frames.length-1,this._callback=e,this.play(),this},e.prototype.play=function(t){return void 0!==t?(this.gotoFrame(t),this._time=0):this._time<0&&(this._time=0),this.touch(),this},e.prototype.stop=function(t){return this._time=-1,void 0!==t&&this.gotoFrame(t),this},e}(jr),na=function(){var t=function(e,i){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])})(e,i)};return function(e,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function o(){this.constructor=e}t(e,i),e.prototype=null===i?Object.create(i):(o.prototype=i.prototype,new o)}}();function sa(t){return(new ra).frames(t)}var ra=function(t){function e(){var e=t.call(this)||this;return e.label("String"),e._textures=[],e}return na(e,t),e.prototype.setFont=function(t){return this.frames(t)},e.prototype.frames=function(t){if(this._textures=[],"string"==typeof t){var e=fr(t);this._font=function(t){return e.one(t)}}else"object"==typeof t?this._font=function(e){return t[e]}:"function"==typeof t&&(this._font=t);return this},e.prototype.setValue=function(t){return this.value(t)},e.prototype.value=function(t){if(void 0===t)return this._value;if(this._value===t)return this;this._value=t,null===t?t="":"string"==typeof t||Array.isArray(t)||(t=t.toString()),this._spacing=this._spacing||0;for(var e=0,i=0,o=0;o0?this._spacing:0,s.setDestinationCoordinate(e,0),e+=s.getWidth(),i=Math.max(i,s.getHeight())}return this.pin("width",e),this.pin("height",i),this._textures.length=t.length,this},e}(jr),aa=sa,ha=ra;const ca=Object.freeze(Object.defineProperty({__proto__:null,Anim:oa,Atlas:ar,CanvasTexture:Hr,Image:Yr,ImageTexture:er,Math:Xs,Matrix:Js,Monotype:ra,Mouse:{CLICK:"click",START:"touchstart mousedown",MOVE:"touchmove mousemove",END:"touchend mouseup",CANCEL:"touchcancel mousecancel"},Node:jr,POINTER_CANCEL:"touchcancel mousecancel",POINTER_CLICK:"click",POINTER_END:"touchend mouseup",POINTER_MOVE:"touchmove mousemove",POINTER_START:"touchstart mousedown",Pin:br,PipeTexture:or,Pointer:Gr,ResizableTexture:vr,Root:ea,Sprite:Dr,Str:ha,Texture:$s,TextureSelection:lr,Transition:Ir,anim:function(t,e){var i=new oa;return i.frames(t).gotoFrame(0),e&&i.fps(e),i},atlas:function(t){return cr(this,void 0,Promise,(function(){var e;return mr(this,(function(i){switch(i.label){case 0:return(e=t instanceof ar?t:new ar(t)).name&&(pr[e.name]=e),yr.push(e),[4,e.load()];case 1:return i.sent(),[2,e]}}))}))},box:function(){return qr()},canvas:function(t,e,i){if("function"==typeof t){var o=new Hr;return i=t,o.setDrawer((function(){i.call(o,o.getContext())})),o}if("function"==typeof e){var n=new Hr;return i=e,n.setDrawer((function(){i.call(n,n.getContext(t))})),n}if("function"==typeof i){var s=new Hr;return s.setDrawer((function(){i.call(s,s.getContext(t,e))})),s}return new Hr},clamp:Ws,column:function(t){return kr().column(t).label("Column")},create:function(){return kr()},image:Er,isValidFitMode:xr,layer:function(){return Or()},layout:kr,length:Hs,math:Xs,maximize:Or,memoizeDraw:function(t,e){void 0===e&&(e=function(){return null});var i=new Dr,o=new Hr;return i.texture(o),o.setDrawer((function(){t(2.5*o._lastPixelRatio,o,i)})),o.setMemoizer(e),i},minimize:qr,monotype:sa,mount:function(t){void 0===t&&(t={});var e=new ea;return e.mount(t),e.pointer=(new Gr).mount(e,e.dom),e},pause:function(){for(var t=ta.length-1;t>=0;t--)ta[t].pause()},random:Es,resume:function(){for(var t=ta.length-1;t>=0;t--)ta[t].resume()},row:function(t){return kr().row(t).label("Row")},sprite:Rr,string:aa,texture:fr,wrap:Ys},Symbol.toStringTag,{value:"Module"}));var ma=Math.atan2,la=Math.abs,ua=Math.sqrt,_a=Math.PI,pa=Math.max,ya=Math.min,fa=null;function da(){var t=[];return{recall:function(){for(var e=[],i=0;is;)e.step(s),r-=s;return n.renderWorld(),!0}catch(t){return a=!0,console.error(t),!1}}),!0),e.on("remove-fixture",(function(t){var e;null===(e=n.nodes.get(t))||void 0===e||e.remove()})),e.on("remove-joint",(function(t){var e;null===(e=n.nodes.get(t))||void 0===e||e.remove()})),n}return i(e,t),e.prototype.renderWorld=function(){for(var t=this.world,e=this.options,i=this,o=t.getBodyList();o;o=o.getNext())for(var n=o.getFixtureList();n;n=n.getNext()){var s=this.nodes.get(n),r=va(n),a=va(o);if(!s){r&&r.stroke?e.stroke=r.stroke:a&&a.stroke?e.stroke=a.stroke:o.isDynamic()?e.stroke="rgba(255,255,255,0.9)":o.isKinematic()?e.stroke="rgba(255,255,255,0.7)":o.isStatic()&&(e.stroke="rgba(255,255,255,0.5)"),r&&r.fill?e.fill=r.fill:a&&a.fill?e.fill=a.fill:e.fill="";var h=n.getType(),c=n.getShape();"circle"==h&&(s=i.drawCircle(c,e)),"edge"==h&&(s=i.drawEdge(c,e)),"polygon"==h&&(s=i.drawPolygon(c,e)),"chain"==h&&(s=i.drawChain(c,e)),s&&(s.appendTo(i),this.nodes.set(n,s))}if(s){var m=o.getPosition(),l=o.getAngle();(s.__lastX!==m.x||s.__lastY!==m.y||s.__lastR!==l)&&(s.__lastX=m.x,s.__lastY=m.y,s.__lastR=l,s.offset(m.x,e.scaleY*m.y),s.rotate(e.scaleY*l))}}for(var u=t.getJointList();u;u=u.getNext()){"pulley-joint"==(h=u.getType())?(this.testbed.drawSegment(u.getAnchorA(),u.getGroundAnchorA(),"rgba(255,255,255,0.5)"),this.testbed.drawSegment(u.getAnchorB(),u.getGroundAnchorB(),"rgba(255,255,255,0.5)"),this.testbed.drawSegment(u.getGroundAnchorB(),u.getGroundAnchorA(),"rgba(255,255,255,0.5)")):this.testbed.drawSegment(u.getAnchorA(),u.getAnchorB(),"rgba(255,255,255,0.5)")}},e.prototype.drawCircle=function(t,e){var i=0,o=0,n=da(),s=ca.canvas();s.setDrawer((function(){var n,s=this.getContext(),r=2*this.getOptimalPixelRatio(),a=e.lineWidth/r,h=t.m_radius,c=h+a,m=h+a,l=2*h+2*a,u=2*h+2*a;i=t.m_p.x-c,o=e.scaleY*t.m_p.y-m,this.setSize(l,u,r),s.scale(r,r),s.arc(c,m,h,0,2*_a),e.fill&&(s.fillStyle=e.fill,s.fill()),s.lineTo(c,m),s.lineWidth=e.lineWidth/r,s.strokeStyle=null!==(n=e.stroke)&&void 0!==n?n:"",s.stroke()}));var r=ca.sprite(s);return r.tick((function(){n.recall(i,o)||r.offset(i,o)})),ca.layout().append(r)},e.prototype.drawEdge=function(t,e){var i=0,o=0,n=0,s=da(),r=ca.canvas();r.setDrawer((function(){var s,r=this.getContext(),a=2*this.getOptimalPixelRatio(),h=e.lineWidth/a,c=t.m_vertex1,m=t.m_vertex2,l=m.x-c.x,u=m.y-c.y,_=ua(l*l+u*u);this.setSize(_+2*h,2*h,a);var p=ya(c.x,m.x),y=ya(e.scaleY*c.y,e.scaleY*m.y);i=p-h,o=y-h,n=e.scaleY*ma(u,l),r.scale(a,a),r.beginPath(),r.moveTo(h,h),r.lineTo(h+_,h),r.lineCap="round",r.lineWidth=e.lineWidth/a,r.strokeStyle=null!==(s=e.stroke)&&void 0!==s?s:"",r.stroke()}));var a=ca.sprite(r);return a.tick((function(){s.recall(i,o,n)||(a.offset(i,o),a.rotate(n))})),ca.layout().append(a)},e.prototype.drawPolygon=function(t,e){var i=0,o=0,n=da(),s=ca.canvas();s.setDrawer((function(){var n,s=this.getContext(),r=2*this.getOptimalPixelRatio(),a=e.lineWidth/r,h=t.m_vertices;if(h.length){for(var c=1/0,m=1/0,l=-1/0,u=-1/0,_=0;_2&&s.closePath(),e.fill&&(s.fillStyle=e.fill,s.fill(),s.closePath()),s.lineCap="round",s.lineWidth=e.lineWidth/r,s.strokeStyle=null!==(n=e.stroke)&&void 0!==n?n:"",s.stroke()}}));var r=ca.sprite(s);return r.tick((function(){n.recall(i,o)||r.offset(i,o)})),ca.layout().append(r)},e.prototype.drawChain=function(t,e){var i=0,o=0,n=da(),s=ca.canvas();s.setDrawer((function(){var n,s=this.getContext(),r=2*this.getOptimalPixelRatio(),a=e.lineWidth/r,h=t.m_vertices;if(h.length){for(var c=1/0,m=1/0,l=-1/0,u=-1/0,_=0;_>1;x2|=x2>>2;x2|=x2>>4;x2|=x2>>8;x2|=x2>>16;return x2+1}function isPowerOfTwo(x2){return x2>0&&(x2&x2-1)===0}function mod(num,min,max){if(typeof min==="undefined"){max=1;min=0}else if(typeof max==="undefined"){max=min;min=0}if(max>min){num=(num-min)%(max-min);return num+(num<0?max:min)}else{num=(num-max)%(min-max);return num+(num<=0?min:max)}}function clamp$1(num,min,max){if(nummax){return max}else{return num}}function random$1(min,max){if(typeof min==="undefined"){max=1;min=0}else if(typeof max==="undefined"){max=min;min=0}return min===max?min:math_random$1()*(max-min)+min}var math$1=Object.create(Math);math$1.EPSILON=EPSILON;math$1.isFinite=isFinite;math$1.nextPowerOfTwo=nextPowerOfTwo;math$1.isPowerOfTwo=isPowerOfTwo;math$1.mod=mod;math$1.clamp=clamp$1;math$1.random=random$1;var math_abs$a=Math.abs;var math_sqrt$7=Math.sqrt;var math_max$9=Math.max;var math_min$9=Math.min;var Vec2=function(){function Vec22(x2,y){if(!(this instanceof Vec22)){return new Vec22(x2,y)}if(typeof x2==="undefined"){this.x=0;this.y=0}else if(typeof x2==="object"){this.x=x2.x;this.y=x2.y}else{this.x=x2;this.y=y}}Vec22.prototype._serialize=function(){return{x:this.x,y:this.y}};Vec22._deserialize=function(data){var obj=Object.create(Vec22.prototype);obj.x=data.x;obj.y=data.y;return obj};Vec22.zero=function(){var obj=Object.create(Vec22.prototype);obj.x=0;obj.y=0;return obj};Vec22.neo=function(x2,y){var obj=Object.create(Vec22.prototype);obj.x=x2;obj.y=y;return obj};Vec22.clone=function(v3){return Vec22.neo(v3.x,v3.y)};Vec22.prototype.toString=function(){return JSON.stringify(this)};Vec22.isValid=function(obj){if(obj===null||typeof obj==="undefined"){return false}return Number.isFinite(obj.x)&&Number.isFinite(obj.y)};Vec22.assert=function(o){};Vec22.prototype.clone=function(){return Vec22.clone(this)};Vec22.prototype.setZero=function(){this.x=0;this.y=0;return this};Vec22.prototype.set=function(x2,y){if(typeof x2==="object"){this.x=x2.x;this.y=x2.y}else{this.x=x2;this.y=y}return this};Vec22.prototype.setNum=function(x2,y){this.x=x2;this.y=y;return this};Vec22.prototype.setVec2=function(value){this.x=value.x;this.y=value.y;return this};Vec22.prototype.wSet=function(a2,v3,b2,w){if(typeof b2!=="undefined"||typeof w!=="undefined"){return this.setCombine(a2,v3,b2,w)}else{return this.setMul(a2,v3)}};Vec22.prototype.setCombine=function(a2,v3,b2,w){var x2=a2*v3.x+b2*w.x;var y=a2*v3.y+b2*w.y;this.x=x2;this.y=y;return this};Vec22.prototype.setMul=function(a2,v3){var x2=a2*v3.x;var y=a2*v3.y;this.x=x2;this.y=y;return this};Vec22.prototype.add=function(w){this.x+=w.x;this.y+=w.y;return this};Vec22.prototype.wAdd=function(a2,v3,b2,w){if(typeof b2!=="undefined"||typeof w!=="undefined"){return this.addCombine(a2,v3,b2,w)}else{return this.addMul(a2,v3)}};Vec22.prototype.addCombine=function(a2,v3,b2,w){var x2=a2*v3.x+b2*w.x;var y=a2*v3.y+b2*w.y;this.x+=x2;this.y+=y;return this};Vec22.prototype.addMul=function(a2,v3){var x2=a2*v3.x;var y=a2*v3.y;this.x+=x2;this.y+=y;return this};Vec22.prototype.wSub=function(a2,v3,b2,w){if(typeof b2!=="undefined"||typeof w!=="undefined"){return this.subCombine(a2,v3,b2,w)}else{return this.subMul(a2,v3)}};Vec22.prototype.subCombine=function(a2,v3,b2,w){var x2=a2*v3.x+b2*w.x;var y=a2*v3.y+b2*w.y;this.x-=x2;this.y-=y;return this};Vec22.prototype.subMul=function(a2,v3){var x2=a2*v3.x;var y=a2*v3.y;this.x-=x2;this.y-=y;return this};Vec22.prototype.sub=function(w){this.x-=w.x;this.y-=w.y;return this};Vec22.prototype.mul=function(m){this.x*=m;this.y*=m;return this};Vec22.prototype.length=function(){return Vec22.lengthOf(this)};Vec22.prototype.lengthSquared=function(){return Vec22.lengthSquared(this)};Vec22.prototype.normalize=function(){var length2=this.length();if(length2max*max){var scale=max/math_sqrt$7(lengthSqr);this.x*=scale;this.y*=scale}return this};Vec22.clamp=function(v3,max){var r=Vec22.neo(v3.x,v3.y);r.clamp(max);return r};Vec22.scaleFn=function(x2,y){return function(v3){return Vec22.neo(v3.x*x2,v3.y*y)}};Vec22.translateFn=function(x2,y){return function(v3){return Vec22.neo(v3.x+x2,v3.y+y)}};return Vec22}();var math_max$8=Math.max;var math_min$8=Math.min;var AABB=function(){function AABB2(lower,upper){if(!(this instanceof AABB2)){return new AABB2(lower,upper)}this.lowerBound=Vec2.zero();this.upperBound=Vec2.zero();if(typeof lower==="object"){this.lowerBound.setVec2(lower)}if(typeof upper==="object"){this.upperBound.setVec2(upper)}else if(typeof lower==="object"){this.upperBound.setVec2(lower)}}AABB2.prototype.isValid=function(){return AABB2.isValid(this)};AABB2.isValid=function(obj){if(obj===null||typeof obj==="undefined"){return false}return Vec2.isValid(obj.lowerBound)&&Vec2.isValid(obj.upperBound)&&Vec2.sub(obj.upperBound,obj.lowerBound).lengthSquared()>=0};AABB2.assert=function(o){};AABB2.prototype.getCenter=function(){return Vec2.neo((this.lowerBound.x+this.upperBound.x)*.5,(this.lowerBound.y+this.upperBound.y)*.5)};AABB2.prototype.getExtents=function(){return Vec2.neo((this.upperBound.x-this.lowerBound.x)*.5,(this.upperBound.y-this.lowerBound.y)*.5)};AABB2.prototype.getPerimeter=function(){return 2*(this.upperBound.x-this.lowerBound.x+this.upperBound.y-this.lowerBound.y)};AABB2.prototype.combine=function(a2,b2){b2=b2||this;var lowerA=a2.lowerBound;var upperA=a2.upperBound;var lowerB=b2.lowerBound;var upperB=b2.upperBound;var lowerX=math_min$8(lowerA.x,lowerB.x);var lowerY=math_min$8(lowerA.y,lowerB.y);var upperX=math_max$8(upperB.x,upperA.x);var upperY=math_max$8(upperB.y,upperA.y);this.lowerBound.setNum(lowerX,lowerY);this.upperBound.setNum(upperX,upperY)};AABB2.prototype.combinePoints=function(a2,b2){this.lowerBound.setNum(math_min$8(a2.x,b2.x),math_min$8(a2.y,b2.y));this.upperBound.setNum(math_max$8(a2.x,b2.x),math_max$8(a2.y,b2.y))};AABB2.prototype.set=function(aabb){this.lowerBound.setNum(aabb.lowerBound.x,aabb.lowerBound.y);this.upperBound.setNum(aabb.upperBound.x,aabb.upperBound.y)};AABB2.prototype.contains=function(aabb){var result=true;result=result&&this.lowerBound.x<=aabb.lowerBound.x;result=result&&this.lowerBound.y<=aabb.lowerBound.y;result=result&&aabb.upperBound.x<=this.upperBound.x;result=result&&aabb.upperBound.y<=this.upperBound.y;return result};AABB2.prototype.extend=function(value){AABB2.extend(this,value);return this};AABB2.extend=function(out,value){out.lowerBound.x-=value;out.lowerBound.y-=value;out.upperBound.x+=value;out.upperBound.y+=value;return out};AABB2.testOverlap=function(a2,b2){var d1x=b2.lowerBound.x-a2.upperBound.x;var d2x=a2.lowerBound.x-b2.upperBound.x;var d1y=b2.lowerBound.y-a2.upperBound.y;var d2y=a2.lowerBound.y-b2.upperBound.y;if(d1x>0||d1y>0||d2x>0||d2y>0){return false}return true};AABB2.areEqual=function(a2,b2){return Vec2.areEqual(a2.lowerBound,b2.lowerBound)&&Vec2.areEqual(a2.upperBound,b2.upperBound)};AABB2.diff=function(a2,b2){var wD=math_max$8(0,math_min$8(a2.upperBound.x,b2.upperBound.x)-math_max$8(b2.lowerBound.x,a2.lowerBound.x));var hD=math_max$8(0,math_min$8(a2.upperBound.y,b2.upperBound.y)-math_max$8(b2.lowerBound.y,a2.lowerBound.y));var wA=a2.upperBound.x-a2.lowerBound.x;var hA=a2.upperBound.y-a2.lowerBound.y;var wB=b2.upperBound.x-b2.lowerBound.x;var hB=b2.upperBound.y-b2.lowerBound.y;return wA*hA+wB*hB-wD*hD};AABB2.prototype.rayCast=function(output2,input2){var tmin=-Infinity;var tmax=Infinity;var p=input2.p1;var d2=Vec2.sub(input2.p2,input2.p1);var absD=Vec2.abs(d2);var normal3=Vec2.zero();for(var f="x";f!==null;f=f==="x"?"y":null){if(absD.xt2){var temp3=t1;t1=t2;t2=temp3;s2=1}if(t1>tmin){normal3.setZero();normal3[f]=s2;tmin=t1}tmax=math_min$8(tmax,t2);if(tmin>tmax){return false}}}if(tmin<0||input2.maxFraction0){item=this._list.shift()}else{this._createCount++;if(this._hasCreateFn){item=this._createFn()}else{item={}}}this._allocateCount++;if(this._hasAllocateFn){this._allocateFn(item)}return item};Pool2.prototype.release=function(item){if(this._list.length"+this._allocateCount+" <"+this._releaseCount+" -"+this._disposeCount+" ="+this._list.length+"/"+this._max};return Pool2}();var math_abs$9=Math.abs;var math_max$7=Math.max;var TreeNode=function(){function TreeNode2(id){this.aabb=new AABB;this.userData=null;this.parent=null;this.child1=null;this.child2=null;this.height=-1;this.id=id}TreeNode2.prototype.toString=function(){return this.id+": "+this.userData};TreeNode2.prototype.isLeaf=function(){return this.child1==null};return TreeNode2}();var poolTreeNode=new Pool({create:function(){return new TreeNode},release:function(node){node.userData=null;node.parent=null;node.child1=null;node.child2=null;node.height=-1;node.id=void 0}});var DynamicTree=function(){function DynamicTree2(){this.inputPool=new Pool({create:function(){return{}},release:function(stack){}});this.stackPool=new Pool({create:function(){return[]},release:function(stack){stack.length=0}});this.iteratorPool=new Pool({create:function(){return new Iterator},release:function(iterator){iterator.close()}});this.m_root=null;this.m_nodes={};this.m_lastProxyId=0}DynamicTree2.prototype.getUserData=function(id){var node=this.m_nodes[id];return node.userData};DynamicTree2.prototype.getFatAABB=function(id){var node=this.m_nodes[id];return node.aabb};DynamicTree2.prototype.allocateNode=function(){var node=poolTreeNode.allocate();node.id=++this.m_lastProxyId;this.m_nodes[node.id]=node;return node};DynamicTree2.prototype.freeNode=function(node){delete this.m_nodes[node.id];poolTreeNode.release(node)};DynamicTree2.prototype.createProxy=function(aabb,userData){var node=this.allocateNode();node.aabb.set(aabb);AABB.extend(node.aabb,SettingsInternal.aabbExtension);node.userData=userData;node.height=0;this.insertLeaf(node);return node.id};DynamicTree2.prototype.destroyProxy=function(id){var node=this.m_nodes[id];this.removeLeaf(node);this.freeNode(node)};DynamicTree2.prototype.moveProxy=function(id,aabb,d2){var node=this.m_nodes[id];if(node.aabb.contains(aabb)){return false}this.removeLeaf(node);node.aabb.set(aabb);aabb=node.aabb;AABB.extend(aabb,SettingsInternal.aabbExtension);if(d2.x<0){aabb.lowerBound.x+=d2.x*SettingsInternal.aabbMultiplier}else{aabb.upperBound.x+=d2.x*SettingsInternal.aabbMultiplier}if(d2.y<0){aabb.lowerBound.y+=d2.y*SettingsInternal.aabbMultiplier}else{aabb.upperBound.y+=d2.y*SettingsInternal.aabbMultiplier}this.insertLeaf(node);return true};DynamicTree2.prototype.insertLeaf=function(leaf){if(this.m_root==null){this.m_root=leaf;this.m_root.parent=null;return}var leafAABB=leaf.aabb;var index=this.m_root;while(!index.isLeaf()){var child1=index.child1;var child2=index.child2;var area=index.aabb.getPerimeter();var combinedArea=AABB.combinedPerimeter(index.aabb,leafAABB);var cost=2*combinedArea;var inheritanceCost=2*(combinedArea-area);var newArea1=AABB.combinedPerimeter(leafAABB,child1.aabb);var cost1=newArea1+inheritanceCost;if(!child1.isLeaf()){var oldArea=child1.aabb.getPerimeter();cost1-=oldArea}var newArea2=AABB.combinedPerimeter(leafAABB,child2.aabb);var cost2=newArea2+inheritanceCost;if(!child2.isLeaf()){var oldArea=child2.aabb.getPerimeter();cost2-=oldArea}if(cost1){var F=C.child1;var G=C.child2;C.child1=A;C.parent=A.parent;A.parent=C;if(C.parent!=null){if(C.parent.child1===iA){C.parent.child1=C}else{C.parent.child2=C}}else{this.m_root=C}if(F.height>G.height){C.child2=F;A.child2=G;G.parent=A;A.aabb.combine(B.aabb,G.aabb);C.aabb.combine(A.aabb,F.aabb);A.height=1+math_max$7(B.height,G.height);C.height=1+math_max$7(A.height,F.height)}else{C.child2=G;A.child2=F;F.parent=A;A.aabb.combine(B.aabb,F.aabb);C.aabb.combine(A.aabb,G.aabb);A.height=1+math_max$7(B.height,F.height);C.height=1+math_max$7(A.height,G.height)}return C}if(balance<-1){var D=B.child1;var E=B.child2;B.child1=A;B.parent=A.parent;A.parent=B;if(B.parent!=null){if(B.parent.child1===A){B.parent.child1=B}else{B.parent.child2=B}}else{this.m_root=B}if(D.height>E.height){B.child2=D;A.child1=E;E.parent=A;A.aabb.combine(C.aabb,E.aabb);B.aabb.combine(A.aabb,D.aabb);A.height=1+math_max$7(C.height,E.height);B.height=1+math_max$7(A.height,D.height)}else{B.child2=E;A.child1=D;D.parent=A;A.aabb.combine(C.aabb,D.aabb);B.aabb.combine(A.aabb,E.aabb);A.height=1+math_max$7(C.height,D.height);B.height=1+math_max$7(A.height,E.height)}return B}return A};DynamicTree2.prototype.getHeight=function(){if(this.m_root==null){return 0}return this.m_root.height};DynamicTree2.prototype.getAreaRatio=function(){if(this.m_root==null){return 0}var root=this.m_root;var rootArea=root.aabb.getPerimeter();var totalArea=0;var node;var it=this.iteratorPool.allocate().preorder(this.m_root);while(node=it.next()){if(node.height<0){continue}totalArea+=node.aabb.getPerimeter()}this.iteratorPool.release(it);return totalArea/rootArea};DynamicTree2.prototype.computeHeight=function(id){var node;if(typeof id!=="undefined"){node=this.m_nodes[id]}else{node=this.m_root}if(node.isLeaf()){return 0}var height1=this.computeHeight(node.child1.id);var height2=this.computeHeight(node.child2.id);return 1+math_max$7(height1,height2)};DynamicTree2.prototype.validateStructure=function(node){if(node==null){return}if(node===this.m_root);var child1=node.child1;var child2=node.child2;if(node.isLeaf()){return}this.validateStructure(child1);this.validateStructure(child2)};DynamicTree2.prototype.validateMetrics=function(node){if(node==null){return}var child1=node.child1;var child2=node.child2;if(node.isLeaf()){return}child1.height;child2.height;var aabb=new AABB;aabb.combine(child1.aabb,child2.aabb);this.validateMetrics(child1);this.validateMetrics(child2)};DynamicTree2.prototype.validate=function(){return};DynamicTree2.prototype.getMaxBalance=function(){var maxBalance=0;var node;var it=this.iteratorPool.allocate().preorder(this.m_root);while(node=it.next()){if(node.height<=1){continue}var balance=math_abs$9(node.child2.height-node.child1.height);maxBalance=math_max$7(maxBalance,balance)}this.iteratorPool.release(it);return maxBalance};DynamicTree2.prototype.rebuildBottomUp=function(){var nodes=[];var count=0;var node;var it=this.iteratorPool.allocate().preorder(this.m_root);while(node=it.next()){if(node.height<0){continue}if(node.isLeaf()){node.parent=null;nodes[count]=node;++count}else{this.freeNode(node)}}this.iteratorPool.release(it);while(count>1){var minCost=Infinity;var iMin=-1;var jMin=-1;for(var i=0;i0){var node=stack.pop();if(node==null){continue}if(AABB.testOverlap(node.aabb,aabb)){if(node.isLeaf()){var proceed=queryCallback(node.id);if(proceed===false){return}}else{stack.push(node.child1);stack.push(node.child2)}}}this.stackPool.release(stack)};DynamicTree2.prototype.rayCast=function(input2,rayCastCallback){var p1=input2.p1;var p2=input2.p2;var r=Vec2.sub(p2,p1);r.normalize();var v3=Vec2.crossNumVec2(1,r);var abs_v=Vec2.abs(v3);var maxFraction=input2.maxFraction;var segmentAABB=new AABB;var t=Vec2.combine(1-maxFraction,p1,maxFraction,p2);segmentAABB.combinePoints(p1,t);var stack=this.stackPool.allocate();var subInput=this.inputPool.allocate();stack.push(this.m_root);while(stack.length>0){var node=stack.pop();if(node==null){continue}if(AABB.testOverlap(node.aabb,segmentAABB)===false){continue}var c2=node.aabb.getCenter();var h=node.aabb.getExtents();var separation=math_abs$9(Vec2.dot(v3,Vec2.sub(p1,c2)))-Vec2.dot(abs_v,h);if(separation>0){continue}if(node.isLeaf()){subInput.p1=Vec2.clone(input2.p1);subInput.p2=Vec2.clone(input2.p2);subInput.maxFraction=maxFraction;var value=rayCastCallback(subInput,node.id);if(value===0){break}else if(value>0){maxFraction=value;t=Vec2.combine(1-maxFraction,p1,maxFraction,p2);segmentAABB.combinePoints(p1,t)}}else{stack.push(node.child1);stack.push(node.child2)}}this.stackPool.release(stack);this.inputPool.release(subInput)};return DynamicTree2}();var Iterator=function(){function Iterator2(){this.parents=[];this.states=[]}Iterator2.prototype.preorder=function(root){this.parents.length=0;this.parents.push(root);this.states.length=0;this.states.push(0);return this};Iterator2.prototype.next=function(){while(this.parents.length>0){var i=this.parents.length-1;var node=this.parents[i];if(this.states[i]===0){this.states[i]=1;return node}if(this.states[i]===1){this.states[i]=2;if(node.child1){this.parents.push(node.child1);this.states.push(1);return node.child1}}if(this.states[i]===2){this.states[i]=3;if(node.child2){this.parents.push(node.child2);this.states.push(1);return node.child2}}this.parents.pop();this.states.pop()}};Iterator2.prototype.close=function(){this.parents.length=0};return Iterator2}();var math_max$6=Math.max;var math_min$7=Math.min;var BroadPhase=function(){function BroadPhase2(){var _this=this;this.m_tree=new DynamicTree;this.m_moveBuffer=[];this.query=function(aabb,queryCallback){_this.m_tree.query(aabb,queryCallback)};this.queryCallback=function(proxyId){if(proxyId===_this.m_queryProxyId){return true}var proxyIdA=math_min$7(proxyId,_this.m_queryProxyId);var proxyIdB=math_max$6(proxyId,_this.m_queryProxyId);var userDataA=_this.m_tree.getUserData(proxyIdA);var userDataB=_this.m_tree.getUserData(proxyIdB);_this.m_callback(userDataA,userDataB);return true}}BroadPhase2.prototype.getUserData=function(proxyId){return this.m_tree.getUserData(proxyId)};BroadPhase2.prototype.testOverlap=function(proxyIdA,proxyIdB){var aabbA=this.m_tree.getFatAABB(proxyIdA);var aabbB=this.m_tree.getFatAABB(proxyIdB);return AABB.testOverlap(aabbA,aabbB)};BroadPhase2.prototype.getFatAABB=function(proxyId){return this.m_tree.getFatAABB(proxyId)};BroadPhase2.prototype.getProxyCount=function(){return this.m_moveBuffer.length};BroadPhase2.prototype.getTreeHeight=function(){return this.m_tree.getHeight()};BroadPhase2.prototype.getTreeBalance=function(){return this.m_tree.getMaxBalance()};BroadPhase2.prototype.getTreeQuality=function(){return this.m_tree.getAreaRatio()};BroadPhase2.prototype.rayCast=function(input2,rayCastCallback){this.m_tree.rayCast(input2,rayCastCallback)};BroadPhase2.prototype.shiftOrigin=function(newOrigin){this.m_tree.shiftOrigin(newOrigin)};BroadPhase2.prototype.createProxy=function(aabb,userData){var proxyId=this.m_tree.createProxy(aabb,userData);this.bufferMove(proxyId);return proxyId};BroadPhase2.prototype.destroyProxy=function(proxyId){this.unbufferMove(proxyId);this.m_tree.destroyProxy(proxyId)};BroadPhase2.prototype.moveProxy=function(proxyId,aabb,displacement2){var changed=this.m_tree.moveProxy(proxyId,aabb,displacement2);if(changed){this.bufferMove(proxyId)}};BroadPhase2.prototype.touchProxy=function(proxyId){this.bufferMove(proxyId)};BroadPhase2.prototype.bufferMove=function(proxyId){this.m_moveBuffer.push(proxyId)};BroadPhase2.prototype.unbufferMove=function(proxyId){for(var i=0;i0){this.m_queryProxyId=this.m_moveBuffer.pop();if(this.m_queryProxyId===null){continue}var fatAABB=this.m_tree.getFatAABB(this.m_queryProxyId);this.m_tree.query(fatAABB,this.queryCallback)}};return BroadPhase2}();var math_sin$2=Math.sin;var math_cos$2=Math.cos;var math_sqrt$6=Math.sqrt;function vec2(x2,y){return{x:x2,y:y}}function rotation(angle){return{s:math_sin$2(angle),c:math_cos$2(angle)}}function setVec2(out,x2,y){out.x=x2;out.y=y;return out}function copyVec2(out,w){out.x=w.x;out.y=w.y;return out}function zeroVec2(out){out.x=0;out.y=0;return out}function negVec2(out){out.x=-out.x;out.y=-out.y;return out}function plusVec2(out,w){out.x+=w.x;out.y+=w.y;return out}function addVec2(out,v3,w){out.x=v3.x+w.x;out.y=v3.x+w.y;return out}function minusVec2(out,w){out.x-=w.x;out.y-=w.y;return out}function subVec2(out,v3,w){out.x=v3.x-w.x;out.y=v3.y-w.y;return out}function mulVec2(out,m){out.x*=m;out.y*=m;return out}function scaleVec2(out,m,w){out.x=m*w.x;out.y=m*w.y;return out}function plusScaleVec2(out,m,w){out.x+=m*w.x;out.y+=m*w.y;return out}function minusScaleVec2(out,m,w){out.x-=m*w.x;out.y-=m*w.y;return out}function combine2Vec2(out,am,a2,bm,b2){out.x=am*a2.x+bm*b2.x;out.y=am*a2.y+bm*b2.y;return out}function combine3Vec2(out,am,a2,bm,b2,cm,c2){out.x=am*a2.x+bm*b2.x+cm*c2.x;out.y=am*a2.y+bm*b2.y+cm*c2.y;return out}function normalizeVec2Length(out){var length2=math_sqrt$6(out.x*out.x+out.y*out.y);if(length2!==0){var invLength=1/length2;out.x*=invLength;out.y*=invLength}return length2}function normalizeVec2(out){var length2=math_sqrt$6(out.x*out.x+out.y*out.y);if(length2>0){var invLength=1/length2;out.x*=invLength;out.y*=invLength}return out}function crossVec2Num(out,v3,w){var x2=w*v3.y;var y=-w*v3.x;out.x=x2;out.y=y;return out}function crossNumVec2(out,w,v3){var x2=-w*v3.y;var y=w*v3.x;out.x=x2;out.y=y;return out}function crossVec2Vec2(a2,b2){return a2.x*b2.y-a2.y*b2.x}function dotVec2(a2,b2){return a2.x*b2.x+a2.y*b2.y}function lengthSqrVec2(a2){return a2.x*a2.x+a2.y*a2.y}function distVec2(a2,b2){var dx=a2.x-b2.x;var dy=a2.y-b2.y;return math_sqrt$6(dx*dx+dy*dy)}function distSqrVec2(a2,b2){var dx=a2.x-b2.x;var dy=a2.y-b2.y;return dx*dx+dy*dy}function setRotAngle(out,a2){out.c=math_cos$2(a2);out.s=math_sin$2(a2);return out}function rotVec2(out,q,v3){out.x=q.c*v3.x-q.s*v3.y;out.y=q.s*v3.x+q.c*v3.y;return out}function derotVec2(out,q,v3){var x2=q.c*v3.x+q.s*v3.y;var y=-q.s*v3.x+q.c*v3.y;out.x=x2;out.y=y;return out}function rerotVec2(out,before,after,v3){var x0=before.c*v3.x+before.s*v3.y;var y0=-before.s*v3.x+before.c*v3.y;var x2=after.c*x0-after.s*y0;var y=after.s*x0+after.c*y0;out.x=x2;out.y=y;return out}function transform(x2,y,a2){return{p:vec2(x2,y),q:rotation(a2)}}function copyTransform(out,transform2){out.p.x=transform2.p.x;out.p.y=transform2.p.y;out.q.s=transform2.q.s;out.q.c=transform2.q.c;return out}function transformVec2(out,xf2,v3){var x2=xf2.q.c*v3.x-xf2.q.s*v3.y+xf2.p.x;var y=xf2.q.s*v3.x+xf2.q.c*v3.y+xf2.p.y;out.x=x2;out.y=y;return out}function detransformVec2(out,xf2,v3){var px=v3.x-xf2.p.x;var py=v3.y-xf2.p.y;var x2=xf2.q.c*px+xf2.q.s*py;var y=-xf2.q.s*px+xf2.q.c*py;out.x=x2;out.y=y;return out}function retransformVec2(out,from,to,v3){var x0=from.q.c*v3.x-from.q.s*v3.y+from.p.x;var y0=from.q.s*v3.x+from.q.c*v3.y+from.p.y;var px=x0-to.p.x;var py=y0-to.p.y;var x2=to.q.c*px+to.q.s*py;var y=-to.q.s*px+to.q.c*py;out.x=x2;out.y=y;return out}function detransformTransform(out,a2,b2){var c2=a2.q.c*b2.q.c+a2.q.s*b2.q.s;var s2=a2.q.c*b2.q.s-a2.q.s*b2.q.c;var x2=a2.q.c*(b2.p.x-a2.p.x)+a2.q.s*(b2.p.y-a2.p.y);var y=-a2.q.s*(b2.p.x-a2.p.x)+a2.q.c*(b2.p.y-a2.p.y);out.q.c=c2;out.q.s=s2;out.p.x=x2;out.p.y=y;return out}var math_sin$1=Math.sin;var math_cos$1=Math.cos;var math_atan2$2=Math.atan2;var Rot=function(){function Rot2(angle){if(!(this instanceof Rot2)){return new Rot2(angle)}if(typeof angle==="number"){this.setAngle(angle)}else if(typeof angle==="object"){this.setRot(angle)}else{this.setIdentity()}}Rot2.neo=function(angle){var obj=Object.create(Rot2.prototype);obj.setAngle(angle);return obj};Rot2.clone=function(rot){var obj=Object.create(Rot2.prototype);obj.s=rot.s;obj.c=rot.c;return obj};Rot2.identity=function(){var obj=Object.create(Rot2.prototype);obj.s=0;obj.c=1;return obj};Rot2.isValid=function(obj){if(obj===null||typeof obj==="undefined"){return false}return Number.isFinite(obj.s)&&Number.isFinite(obj.c)};Rot2.assert=function(o){};Rot2.prototype.setIdentity=function(){this.s=0;this.c=1};Rot2.prototype.set=function(angle){if(typeof angle==="object"){this.s=angle.s;this.c=angle.c}else{this.s=math_sin$1(angle);this.c=math_cos$1(angle)}};Rot2.prototype.setRot=function(angle){this.s=angle.s;this.c=angle.c};Rot2.prototype.setAngle=function(angle){this.s=math_sin$1(angle);this.c=math_cos$1(angle)};Rot2.prototype.getAngle=function(){return math_atan2$2(this.s,this.c)};Rot2.prototype.getXAxis=function(){return Vec2.neo(this.c,this.s)};Rot2.prototype.getYAxis=function(){return Vec2.neo(-this.s,this.c)};Rot2.mul=function(rot,m){if("c"in m&&"s"in m){var qr=Rot2.identity();qr.s=rot.s*m.c+rot.c*m.s;qr.c=rot.c*m.c-rot.s*m.s;return qr}else if("x"in m&&"y"in m){return Vec2.neo(rot.c*m.x-rot.s*m.y,rot.s*m.x+rot.c*m.y)}};Rot2.mulRot=function(rot,m){var qr=Rot2.identity();qr.s=rot.s*m.c+rot.c*m.s;qr.c=rot.c*m.c-rot.s*m.s;return qr};Rot2.mulVec2=function(rot,m){return Vec2.neo(rot.c*m.x-rot.s*m.y,rot.s*m.x+rot.c*m.y)};Rot2.mulSub=function(rot,v3,w){var x2=rot.c*(v3.x-w.x)-rot.s*(v3.y-w.y);var y=rot.s*(v3.x-w.x)+rot.c*(v3.y-w.y);return Vec2.neo(x2,y)};Rot2.mulT=function(rot,m){if("c"in m&&"s"in m){var qr=Rot2.identity();qr.s=rot.c*m.s-rot.s*m.c;qr.c=rot.c*m.c+rot.s*m.s;return qr}else if("x"in m&&"y"in m){return Vec2.neo(rot.c*m.x+rot.s*m.y,-rot.s*m.x+rot.c*m.y)}};Rot2.mulTRot=function(rot,m){var qr=Rot2.identity();qr.s=rot.c*m.s-rot.s*m.c;qr.c=rot.c*m.c+rot.s*m.s;return qr};Rot2.mulTVec2=function(rot,m){return Vec2.neo(rot.c*m.x+rot.s*m.y,-rot.s*m.x+rot.c*m.y)};return Rot2}();var math_atan2$1=Math.atan2;var math_PI$6=Math.PI;var temp$7=vec2(0,0);var Sweep=function(){function Sweep2(){this.localCenter=Vec2.zero();this.c=Vec2.zero();this.a=0;this.alpha0=0;this.c0=Vec2.zero();this.a0=0}Sweep2.prototype.recycle=function(){zeroVec2(this.localCenter);zeroVec2(this.c);this.a=0;this.alpha0=0;zeroVec2(this.c0);this.a0=0};Sweep2.prototype.setTransform=function(xf2){transformVec2(temp$7,xf2,this.localCenter);copyVec2(this.c,temp$7);copyVec2(this.c0,temp$7);this.a=this.a0=math_atan2$1(xf2.q.s,xf2.q.c)};Sweep2.prototype.setLocalCenter=function(localCenter2,xf2){copyVec2(this.localCenter,localCenter2);transformVec2(temp$7,xf2,this.localCenter);copyVec2(this.c,temp$7);copyVec2(this.c0,temp$7)};Sweep2.prototype.getTransform=function(xf2,beta){if(beta===void 0){beta=0}setRotAngle(xf2.q,(1-beta)*this.a0+beta*this.a);combine2Vec2(xf2.p,1-beta,this.c0,beta,this.c);minusVec2(xf2.p,rotVec2(temp$7,xf2.q,this.localCenter))};Sweep2.prototype.advance=function(alpha){var beta=(alpha-this.alpha0)/(1-this.alpha0);combine2Vec2(this.c0,beta,this.c,1-beta,this.c0);this.a0=beta*this.a+(1-beta)*this.a0;this.alpha0=alpha};Sweep2.prototype.forward=function(){this.a0=this.a;copyVec2(this.c0,this.c)};Sweep2.prototype.normalize=function(){var a0=mod(this.a0,-math_PI$6,+math_PI$6);this.a-=this.a0-a0;this.a0=a0};Sweep2.prototype.set=function(that){copyVec2(this.localCenter,that.localCenter);copyVec2(this.c,that.c);this.a=that.a;this.alpha0=that.alpha0;copyVec2(this.c0,that.c0);this.a0=that.a0};return Sweep2}();var Transform=function(){function Transform2(position,rotation2){if(!(this instanceof Transform2)){return new Transform2(position,rotation2)}this.p=Vec2.zero();this.q=Rot.identity();if(typeof position!=="undefined"){this.p.setVec2(position)}if(typeof rotation2!=="undefined"){this.q.setAngle(rotation2)}}Transform2.clone=function(xf2){var obj=Object.create(Transform2.prototype);obj.p=Vec2.clone(xf2.p);obj.q=Rot.clone(xf2.q);return obj};Transform2.neo=function(position,rotation2){var obj=Object.create(Transform2.prototype);obj.p=Vec2.clone(position);obj.q=Rot.clone(rotation2);return obj};Transform2.identity=function(){var obj=Object.create(Transform2.prototype);obj.p=Vec2.zero();obj.q=Rot.identity();return obj};Transform2.prototype.setIdentity=function(){this.p.setZero();this.q.setIdentity()};Transform2.prototype.set=function(a2,b2){if(typeof b2==="undefined"){this.p.set(a2.p);this.q.set(a2.q)}else{this.p.set(a2);this.q.set(b2)}};Transform2.prototype.setNum=function(position,rotation2){this.p.setVec2(position);this.q.setAngle(rotation2)};Transform2.prototype.setTransform=function(xf2){this.p.setVec2(xf2.p);this.q.setRot(xf2.q)};Transform2.isValid=function(obj){if(obj===null||typeof obj==="undefined"){return false}return Vec2.isValid(obj.p)&&Rot.isValid(obj.q)};Transform2.assert=function(o){};Transform2.mul=function(a2,b2){if(Array.isArray(b2)){var arr=[];for(var i=0;i0}var collideA=(that.m_filterMaskBits&this.m_filterCategoryBits)!==0;var collideB=(that.m_filterCategoryBits&this.m_filterMaskBits)!==0;var collide=collideA&&collideB;return collide};return Fixture2}();var STATIC="static";var KINEMATIC="kinematic";var DYNAMIC="dynamic";var oldCenter=vec2(0,0);var localCenter=vec2(0,0);var shift=vec2(0,0);var temp$6=vec2(0,0);var xf$2=transform(0,0,0);var BodyDefDefault={type:STATIC,position:Vec2.zero(),angle:0,linearVelocity:Vec2.zero(),angularVelocity:0,linearDamping:0,angularDamping:0,fixedRotation:false,bullet:false,gravityScale:1,allowSleep:true,awake:true,active:true,userData:null};var Body=function(){function Body2(world,def){this.style={};this.appData={};def=options(def,BodyDefDefault);this.m_world=world;this.m_awakeFlag=def.awake;this.m_autoSleepFlag=def.allowSleep;this.m_bulletFlag=def.bullet;this.m_fixedRotationFlag=def.fixedRotation;this.m_activeFlag=def.active;this.m_islandFlag=false;this.m_toiFlag=false;this.m_userData=def.userData;this.m_type=def.type;if(this.m_type==DYNAMIC){this.m_mass=1;this.m_invMass=1}else{this.m_mass=0;this.m_invMass=0}this.m_I=0;this.m_invI=0;this.m_xf=Transform.identity();this.m_xf.p.setVec2(def.position);this.m_xf.q.setAngle(def.angle);this.m_sweep=new Sweep;this.m_sweep.setTransform(this.m_xf);this.c_velocity=new Velocity;this.c_position=new Position;this.m_force=Vec2.zero();this.m_torque=0;this.m_linearVelocity=Vec2.clone(def.linearVelocity);this.m_angularVelocity=def.angularVelocity;this.m_linearDamping=def.linearDamping;this.m_angularDamping=def.angularDamping;this.m_gravityScale=def.gravityScale;this.m_sleepTime=0;this.m_jointList=null;this.m_contactList=null;this.m_fixtureList=null;this.m_prev=null;this.m_next=null;this.m_destroyed=false}Body2.prototype._serialize=function(){var fixtures=[];for(var f=this.m_fixtureList;f;f=f.m_next){fixtures.push(f)}return{type:this.m_type,bullet:this.m_bulletFlag,position:this.m_xf.p,angle:this.m_xf.q.getAngle(),linearVelocity:this.m_linearVelocity,angularVelocity:this.m_angularVelocity,fixtures:fixtures}};Body2._deserialize=function(data,world,restore){var body=new Body2(world,data);if(data.fixtures){for(var i=data.fixtures.length-1;i>=0;i--){var fixture=restore(Fixture,data.fixtures[i],body);body._addFixture(fixture)}}return body};Body2.prototype.isWorldLocked=function(){return this.m_world&&this.m_world.isLocked()?true:false};Body2.prototype.getWorld=function(){return this.m_world};Body2.prototype.getNext=function(){return this.m_next};Body2.prototype.setUserData=function(data){this.m_userData=data};Body2.prototype.getUserData=function(){return this.m_userData};Body2.prototype.getFixtureList=function(){return this.m_fixtureList};Body2.prototype.getJointList=function(){return this.m_jointList};Body2.prototype.getContactList=function(){return this.m_contactList};Body2.prototype.isStatic=function(){return this.m_type==STATIC};Body2.prototype.isDynamic=function(){return this.m_type==DYNAMIC};Body2.prototype.isKinematic=function(){return this.m_type==KINEMATIC};Body2.prototype.setStatic=function(){this.setType(STATIC);return this};Body2.prototype.setDynamic=function(){this.setType(DYNAMIC);return this};Body2.prototype.setKinematic=function(){this.setType(KINEMATIC);return this};Body2.prototype.getType=function(){return this.m_type};Body2.prototype.setType=function(type){if(this.isWorldLocked()==true){return}if(this.m_type==type){return}this.m_type=type;this.resetMassData();if(this.m_type==STATIC){this.m_linearVelocity.setZero();this.m_angularVelocity=0;this.m_sweep.forward();this.synchronizeFixtures()}this.setAwake(true);this.m_force.setZero();this.m_torque=0;var ce=this.m_contactList;while(ce){var ce0=ce;ce=ce.next;this.m_world.destroyContact(ce0.contact)}this.m_contactList=null;var broadPhase=this.m_world.m_broadPhase;for(var f=this.m_fixtureList;f;f=f.m_next){for(var i=0;i0){this.setAwake(true)}this.m_linearVelocity.setVec2(v3)};Body2.prototype.getAngularVelocity=function(){return this.m_angularVelocity};Body2.prototype.setAngularVelocity=function(w){if(this.m_type==STATIC){return}if(w*w>0){this.setAwake(true)}this.m_angularVelocity=w};Body2.prototype.getLinearDamping=function(){return this.m_linearDamping};Body2.prototype.setLinearDamping=function(linearDamping){this.m_linearDamping=linearDamping};Body2.prototype.getAngularDamping=function(){return this.m_angularDamping};Body2.prototype.setAngularDamping=function(angularDamping){this.m_angularDamping=angularDamping};Body2.prototype.getGravityScale=function(){return this.m_gravityScale};Body2.prototype.setGravityScale=function(scale){this.m_gravityScale=scale};Body2.prototype.getMass=function(){return this.m_mass};Body2.prototype.getInertia=function(){return this.m_I+this.m_mass*Vec2.dot(this.m_sweep.localCenter,this.m_sweep.localCenter)};Body2.prototype.getMassData=function(data){data.mass=this.m_mass;data.I=this.getInertia();copyVec2(data.center,this.m_sweep.localCenter)};Body2.prototype.resetMassData=function(){this.m_mass=0;this.m_invMass=0;this.m_I=0;this.m_invI=0;zeroVec2(this.m_sweep.localCenter);if(this.isStatic()||this.isKinematic()){copyVec2(this.m_sweep.c0,this.m_xf.p);copyVec2(this.m_sweep.c,this.m_xf.p);this.m_sweep.a0=this.m_sweep.a;return}zeroVec2(localCenter);for(var f=this.m_fixtureList;f;f=f.m_next){if(f.m_density==0){continue}var massData={mass:0,center:vec2(0,0),I:0};f.getMassData(massData);this.m_mass+=massData.mass;plusScaleVec2(localCenter,massData.mass,massData.center);this.m_I+=massData.I}if(this.m_mass>0){this.m_invMass=1/this.m_mass;scaleVec2(localCenter,this.m_invMass,localCenter)}else{this.m_mass=1;this.m_invMass=1}if(this.m_I>0&&this.m_fixedRotationFlag==false){this.m_I-=this.m_mass*dotVec2(localCenter,localCenter);this.m_invI=1/this.m_I}else{this.m_I=0;this.m_invI=0}copyVec2(oldCenter,this.m_sweep.c);this.m_sweep.setLocalCenter(localCenter,this.m_xf);subVec2(shift,this.m_sweep.c,oldCenter);crossNumVec2(temp$6,this.m_angularVelocity,shift);plusVec2(this.m_linearVelocity,temp$6)};Body2.prototype.setMassData=function(massData){if(this.isWorldLocked()==true){return}if(this.m_type!=DYNAMIC){return}this.m_invMass=0;this.m_I=0;this.m_invI=0;this.m_mass=massData.mass;if(this.m_mass<=0){this.m_mass=1}this.m_invMass=1/this.m_mass;if(massData.I>0&&this.m_fixedRotationFlag==false){this.m_I=massData.I-this.m_mass*dotVec2(massData.center,massData.center);this.m_invI=1/this.m_I}copyVec2(oldCenter,this.m_sweep.c);this.m_sweep.setLocalCenter(massData.center,this.m_xf);subVec2(shift,this.m_sweep.c,oldCenter);crossNumVec2(temp$6,this.m_angularVelocity,shift);plusVec2(this.m_linearVelocity,temp$6)};Body2.prototype.applyForce=function(force,point2,wake){if(wake===void 0){wake=true}if(this.m_type!=DYNAMIC){return}if(wake&&this.m_awakeFlag==false){this.setAwake(true)}if(this.m_awakeFlag){this.m_force.add(force);this.m_torque+=Vec2.crossVec2Vec2(Vec2.sub(point2,this.m_sweep.c),force)}};Body2.prototype.applyForceToCenter=function(force,wake){if(wake===void 0){wake=true}if(this.m_type!=DYNAMIC){return}if(wake&&this.m_awakeFlag==false){this.setAwake(true)}if(this.m_awakeFlag){this.m_force.add(force)}};Body2.prototype.applyTorque=function(torque,wake){if(wake===void 0){wake=true}if(this.m_type!=DYNAMIC){return}if(wake&&this.m_awakeFlag==false){this.setAwake(true)}if(this.m_awakeFlag){this.m_torque+=torque}};Body2.prototype.applyLinearImpulse=function(impulse,point2,wake){if(wake===void 0){wake=true}if(this.m_type!=DYNAMIC){return}if(wake&&this.m_awakeFlag==false){this.setAwake(true)}if(this.m_awakeFlag){this.m_linearVelocity.addMul(this.m_invMass,impulse);this.m_angularVelocity+=this.m_invI*Vec2.crossVec2Vec2(Vec2.sub(point2,this.m_sweep.c),impulse)}};Body2.prototype.applyAngularImpulse=function(impulse,wake){if(wake===void 0){wake=true}if(this.m_type!=DYNAMIC){return}if(wake&&this.m_awakeFlag==false){this.setAwake(true)}if(this.m_awakeFlag){this.m_angularVelocity+=this.m_invI*impulse}};Body2.prototype.shouldCollide=function(that){if(this.m_type!=DYNAMIC&&that.m_type!=DYNAMIC){return false}for(var jn=this.m_jointList;jn;jn=jn.next){if(jn.other==that){if(jn.joint.m_collideConnected==false){return false}}}return true};Body2.prototype._addFixture=function(fixture){if(this.isWorldLocked()==true){return null}if(this.m_activeFlag){var broadPhase=this.m_world.m_broadPhase;fixture.createProxies(broadPhase,this.m_xf)}fixture.m_next=this.m_fixtureList;this.m_fixtureList=fixture;if(fixture.m_density>0){this.resetMassData()}this.m_world.m_newFixture=true;return fixture};Body2.prototype.createFixture=function(shape,fixdef){if(this.isWorldLocked()==true){return null}var fixture=new Fixture(this,shape,fixdef);this._addFixture(fixture);return fixture};Body2.prototype.destroyFixture=function(fixture){if(this.isWorldLocked()==true){return}if(this.m_fixtureList===fixture){this.m_fixtureList=fixture.m_next}else{var node=this.m_fixtureList;while(node!=null){if(node.m_next===fixture){node.m_next=fixture.m_next;break}node=node.m_next}}var edge=this.m_contactList;while(edge){var c2=edge.contact;edge=edge.next;var fixtureA=c2.getFixtureA();var fixtureB=c2.getFixtureB();if(fixture==fixtureA||fixture==fixtureB){this.m_world.destroyContact(c2)}}if(this.m_activeFlag){var broadPhase=this.m_world.m_broadPhase;fixture.destroyProxies(broadPhase)}fixture.m_body=null;fixture.m_next=null;this.m_world.publish("remove-fixture",fixture);this.resetMassData()};Body2.prototype.getWorldPoint=function(localPoint){return Transform.mulVec2(this.m_xf,localPoint)};Body2.prototype.getWorldVector=function(localVector){return Rot.mulVec2(this.m_xf.q,localVector)};Body2.prototype.getLocalPoint=function(worldPoint){return Transform.mulTVec2(this.m_xf,worldPoint)};Body2.prototype.getLocalVector=function(worldVector){return Rot.mulTVec2(this.m_xf.q,worldVector)};Body2.STATIC="static";Body2.KINEMATIC="kinematic";Body2.DYNAMIC="dynamic";return Body2}();var JointEdge=function(){function JointEdge2(){this.other=null;this.joint=null;this.prev=null;this.next=null}return JointEdge2}();var Joint=function(){function Joint2(def,bodyA,bodyB){this.m_type="unknown-joint";this.m_prev=null;this.m_next=null;this.m_edgeA=new JointEdge;this.m_edgeB=new JointEdge;this.m_islandFlag=false;this.style={};this.appData={};bodyA="bodyA"in def?def.bodyA:bodyA;bodyB="bodyB"in def?def.bodyB:bodyB;this.m_bodyA=bodyA;this.m_bodyB=bodyB;this.m_collideConnected=!!def.collideConnected;this.m_userData=def.userData}Joint2.prototype.isActive=function(){return this.m_bodyA.isActive()&&this.m_bodyB.isActive()};Joint2.prototype.getType=function(){return this.m_type};Joint2.prototype.getBodyA=function(){return this.m_bodyA};Joint2.prototype.getBodyB=function(){return this.m_bodyB};Joint2.prototype.getNext=function(){return this.m_next};Joint2.prototype.getUserData=function(){return this.m_userData};Joint2.prototype.setUserData=function(data){this.m_userData=data};Joint2.prototype.getCollideConnected=function(){return this.m_collideConnected};Joint2.prototype.shiftOrigin=function(newOrigin){};Joint2.prototype._resetAnchors=function(def){return this._reset(def)};return Joint2}();var stats$1={gjkCalls:0,gjkIters:0,gjkMaxIters:0,toiTime:0,toiMaxTime:0,toiCalls:0,toiIters:0,toiMaxIters:0,toiRootIters:0,toiMaxRootIters:0,toString:function(newline){newline=typeof newline==="string"?newline:"\n";var string="";for(var name_1 in this){if(typeof this[name_1]!=="function"&&typeof this[name_1]!=="object"){string+=name_1+": "+this[name_1]+newline}}return string}};var now=function(){return Date.now()};var diff=function(time){return Date.now()-time};const Timer={now:now,diff:diff};var math_max$5=Math.max;var temp$5=vec2(0,0);var normal$4=vec2(0,0);var e12=vec2(0,0);var e13=vec2(0,0);var e23=vec2(0,0);var temp1=vec2(0,0);var temp2=vec2(0,0);stats$1.gjkCalls=0;stats$1.gjkIters=0;stats$1.gjkMaxIters=0;var DistanceInput=function(){function DistanceInput2(){this.proxyA=new DistanceProxy;this.proxyB=new DistanceProxy;this.transformA=Transform.identity();this.transformB=Transform.identity();this.useRadii=false}DistanceInput2.prototype.recycle=function(){this.proxyA.recycle();this.proxyB.recycle();this.transformA.setIdentity();this.transformB.setIdentity();this.useRadii=false};return DistanceInput2}();var DistanceOutput=function(){function DistanceOutput2(){this.pointA=vec2(0,0);this.pointB=vec2(0,0);this.distance=0;this.iterations=0}DistanceOutput2.prototype.recycle=function(){zeroVec2(this.pointA);zeroVec2(this.pointB);this.distance=0;this.iterations=0};return DistanceOutput2}();var SimplexCache=function(){function SimplexCache2(){this.metric=0;this.indexA=[];this.indexB=[];this.count=0}SimplexCache2.prototype.recycle=function(){this.metric=0;this.indexA.length=0;this.indexB.length=0;this.count=0};return SimplexCache2}();var Distance=function(output2,cache2,input2){++stats$1.gjkCalls;var proxyA=input2.proxyA;var proxyB=input2.proxyB;var xfA2=input2.transformA;var xfB2=input2.transformB;simplex.recycle();simplex.readCache(cache2,proxyA,xfA2,proxyB,xfB2);var vertices=simplex.m_v;var k_maxIters=SettingsInternal.maxDistanceIterations;var saveA=[];var saveB=[];var saveCount=0;var iter=0;while(iterrA2+rB2&&output2.distance>EPSILON){output2.distance-=rA2+rB2;subVec2(normal$4,output2.pointB,output2.pointA);normalizeVec2(normal$4);plusScaleVec2(output2.pointA,rA2,normal$4);minusScaleVec2(output2.pointB,rB2,normal$4)}else{var p=subVec2(temp$5,output2.pointA,output2.pointB);copyVec2(output2.pointA,p);copyVec2(output2.pointB,p);output2.distance=0}}};var DistanceProxy=function(){function DistanceProxy2(){this.m_vertices=[];this.m_count=0;this.m_radius=0}DistanceProxy2.prototype.recycle=function(){this.m_vertices.length=0;this.m_count=0;this.m_radius=0};DistanceProxy2.prototype.getVertexCount=function(){return this.m_count};DistanceProxy2.prototype.getVertex=function(index){return this.m_vertices[index]};DistanceProxy2.prototype.getSupport=function(d2){var bestIndex=-1;var bestValue=-Infinity;for(var i=0;ibestValue){bestIndex=i;bestValue=value}}return bestIndex};DistanceProxy2.prototype.getSupportVertex=function(d2){return this.m_vertices[this.getSupport(d2)]};DistanceProxy2.prototype.set=function(shape,index){shape.computeDistanceProxy(this,index)};DistanceProxy2.prototype.setVertices=function(vertices,count,radius){this.m_vertices=vertices;this.m_count=count;this.m_radius=radius};return DistanceProxy2}();var SimplexVertex=function(){function SimplexVertex2(){this.wA=vec2(0,0);this.indexA=0;this.wB=vec2(0,0);this.indexB=0;this.w=vec2(0,0);this.a=0}SimplexVertex2.prototype.recycle=function(){this.indexA=0;this.indexB=0;zeroVec2(this.wA);zeroVec2(this.wB);zeroVec2(this.w);this.a=0};SimplexVertex2.prototype.set=function(v3){this.indexA=v3.indexA;this.indexB=v3.indexB;copyVec2(this.wA,v3.wA);copyVec2(this.wB,v3.wB);copyVec2(this.w,v3.w);this.a=v3.a};return SimplexVertex2}();var searchDirection_reuse=vec2(0,0);var closestPoint_reuse=vec2(0,0);var Simplex=function(){function Simplex2(){this.m_v1=new SimplexVertex;this.m_v2=new SimplexVertex;this.m_v3=new SimplexVertex;this.m_v=[this.m_v1,this.m_v2,this.m_v3]}Simplex2.prototype.recycle=function(){this.m_v1.recycle();this.m_v2.recycle();this.m_v3.recycle();this.m_count=0};Simplex2.prototype.toString=function(){if(this.m_count===3){return["+"+this.m_count,this.m_v1.a,this.m_v1.wA.x,this.m_v1.wA.y,this.m_v1.wB.x,this.m_v1.wB.y,this.m_v2.a,this.m_v2.wA.x,this.m_v2.wA.y,this.m_v2.wB.x,this.m_v2.wB.y,this.m_v3.a,this.m_v3.wA.x,this.m_v3.wA.y,this.m_v3.wB.x,this.m_v3.wB.y].toString()}else if(this.m_count===2){return["+"+this.m_count,this.m_v1.a,this.m_v1.wA.x,this.m_v1.wA.y,this.m_v1.wB.x,this.m_v1.wB.y,this.m_v2.a,this.m_v2.wA.x,this.m_v2.wA.y,this.m_v2.wB.x,this.m_v2.wB.y].toString()}else if(this.m_count===1){return["+"+this.m_count,this.m_v1.a,this.m_v1.wA.x,this.m_v1.wA.y,this.m_v1.wB.x,this.m_v1.wB.y].toString()}else{return"+"+this.m_count}};Simplex2.prototype.readCache=function(cache2,proxyA,transformA,proxyB,transformB){this.m_count=cache2.count;for(var i=0;i1){var metric1=cache2.metric;var metric2=this.getMetric();if(metric2<.5*metric1||2*metric10){return setVec2(searchDirection_reuse,-e12.y,e12.x)}else{return setVec2(searchDirection_reuse,e12.y,-e12.x)}}default:return zeroVec2(searchDirection_reuse)}};Simplex2.prototype.getClosestPoint=function(){var v13=this.m_v1;var v22=this.m_v2;this.m_v3;switch(this.m_count){case 0:return zeroVec2(closestPoint_reuse);case 1:return copyVec2(closestPoint_reuse,v13.w);case 2:return combine2Vec2(closestPoint_reuse,v13.a,v13.w,v22.a,v22.w);case 3:return zeroVec2(closestPoint_reuse);default:return zeroVec2(closestPoint_reuse)}};Simplex2.prototype.getWitnessPoints=function(pA2,pB2){var v13=this.m_v1;var v22=this.m_v2;var v3=this.m_v3;switch(this.m_count){case 0:break;case 1:copyVec2(pA2,v13.wA);copyVec2(pB2,v13.wB);break;case 2:combine2Vec2(pA2,v13.a,v13.wA,v22.a,v22.wA);combine2Vec2(pB2,v13.a,v13.wB,v22.a,v22.wB);break;case 3:combine3Vec2(pA2,v13.a,v13.wA,v22.a,v22.wA,v3.a,v3.wA);copyVec2(pB2,pA2);break}};Simplex2.prototype.getMetric=function(){switch(this.m_count){case 0:return 0;case 1:return 0;case 2:return distVec2(this.m_v1.w,this.m_v2.w);case 3:return crossVec2Vec2(subVec2(temp1,this.m_v2.w,this.m_v1.w),subVec2(temp2,this.m_v3.w,this.m_v1.w));default:return 0}};Simplex2.prototype.solve=function(){switch(this.m_count){case 1:break;case 2:this.solve2();break;case 3:this.solve3();break}};Simplex2.prototype.solve2=function(){var w1=this.m_v1.w;var w2=this.m_v2.w;subVec2(e12,w2,w1);var d12_2=-dotVec2(w1,e12);if(d12_2<=0){this.m_v1.a=1;this.m_count=1;return}var d12_1=dotVec2(w2,e12);if(d12_1<=0){this.m_v2.a=1;this.m_count=1;this.m_v1.set(this.m_v2);return}var inv_d12=1/(d12_1+d12_2);this.m_v1.a=d12_1*inv_d12;this.m_v2.a=d12_2*inv_d12;this.m_count=2};Simplex2.prototype.solve3=function(){var w1=this.m_v1.w;var w2=this.m_v2.w;var w3=this.m_v3.w;subVec2(e12,w2,w1);var w1e12=dotVec2(w1,e12);var w2e12=dotVec2(w2,e12);var d12_1=w2e12;var d12_2=-w1e12;subVec2(e13,w3,w1);var w1e13=dotVec2(w1,e13);var w3e13=dotVec2(w3,e13);var d13_1=w3e13;var d13_2=-w1e13;subVec2(e23,w3,w2);var w2e23=dotVec2(w2,e23);var w3e23=dotVec2(w3,e23);var d23_1=w3e23;var d23_2=-w2e23;var n123=crossVec2Vec2(e12,e13);var d123_1=n123*crossVec2Vec2(w2,w3);var d123_2=n123*crossVec2Vec2(w3,w1);var d123_3=n123*crossVec2Vec2(w1,w2);if(d12_2<=0&&d13_2<=0){this.m_v1.a=1;this.m_count=1;return}if(d12_1>0&&d12_2>0&&d123_3<=0){var inv_d12=1/(d12_1+d12_2);this.m_v1.a=d12_1*inv_d12;this.m_v2.a=d12_2*inv_d12;this.m_count=2;return}if(d13_1>0&&d13_2>0&&d123_2<=0){var inv_d13=1/(d13_1+d13_2);this.m_v1.a=d13_1*inv_d13;this.m_v3.a=d13_2*inv_d13;this.m_count=2;this.m_v2.set(this.m_v3);return}if(d12_1<=0&&d23_2<=0){this.m_v2.a=1;this.m_count=1;this.m_v1.set(this.m_v2);return}if(d13_1<=0&&d23_1<=0){this.m_v3.a=1;this.m_count=1;this.m_v1.set(this.m_v3);return}if(d23_1>0&&d23_2>0&&d123_1<=0){var inv_d23=1/(d23_1+d23_2);this.m_v2.a=d23_1*inv_d23;this.m_v3.a=d23_2*inv_d23;this.m_count=2;this.m_v1.set(this.m_v3);return}var inv_d123=1/(d123_1+d123_2+d123_3);this.m_v1.a=d123_1*inv_d123;this.m_v2.a=d123_2*inv_d123;this.m_v3.a=d123_3*inv_d123;this.m_count=3};return Simplex2}();var simplex=new Simplex;var input$1=new DistanceInput;var cache$1=new SimplexCache;var output$1=new DistanceOutput;var testOverlap=function(shapeA,indexA,shapeB,indexB,xfA2,xfB2){input$1.recycle();input$1.proxyA.set(shapeA,indexA);input$1.proxyB.set(shapeB,indexB);copyTransform(input$1.transformA,xfA2);copyTransform(input$1.transformB,xfB2);input$1.useRadii=true;output$1.recycle();cache$1.recycle();Distance(output$1,cache$1,input$1);return output$1.distance<10*EPSILON};Distance.testOverlap=testOverlap;Distance.Input=DistanceInput;Distance.Output=DistanceOutput;Distance.Proxy=DistanceProxy;Distance.Cache=SimplexCache;var ShapeCastInput=function(){function ShapeCastInput2(){this.proxyA=new DistanceProxy;this.proxyB=new DistanceProxy;this.transformA=Transform.identity();this.transformB=Transform.identity();this.translationB=Vec2.zero()}ShapeCastInput2.prototype.recycle=function(){this.proxyA.recycle();this.proxyB.recycle();this.transformA.setIdentity();this.transformB.setIdentity();zeroVec2(this.translationB)};return ShapeCastInput2}();var ShapeCastOutput=function(){function ShapeCastOutput2(){this.point=Vec2.zero();this.normal=Vec2.zero();this.lambda=1;this.iterations=0}return ShapeCastOutput2}();var ShapeCast=function(output2,input2){output2.iterations=0;output2.lambda=1;output2.normal.setZero();output2.point.setZero();var proxyA=input2.proxyA;var proxyB=input2.proxyB;var radiusA=math_max$5(proxyA.m_radius,SettingsInternal.polygonRadius);var radiusB=math_max$5(proxyB.m_radius,SettingsInternal.polygonRadius);var radius=radiusA+radiusB;var xfA2=input2.transformA;var xfB2=input2.transformB;var r=input2.translationB;var n2=Vec2.zero();var lambda=0;var simplex2=new Simplex;simplex2.m_count=0;var vertices=simplex2.m_v;var indexA=proxyA.getSupport(Rot.mulTVec2(xfA2.q,Vec2.neg(r)));var wA=Transform.mulVec2(xfA2,proxyA.getVertex(indexA));var indexB=proxyB.getSupport(Rot.mulTVec2(xfB2.q,r));var wB=Transform.mulVec2(xfB2,proxyB.getVertex(indexB));var v3=Vec2.sub(wA,wB);var sigma=math_max$5(SettingsInternal.polygonRadius,radius-SettingsInternal.polygonRadius);var tolerance=.5*SettingsInternal.linearSlop;var k_maxIters=20;var iter=0;while(itertolerance){output2.iterations+=1;indexA=proxyA.getSupport(Rot.mulTVec2(xfA2.q,Vec2.neg(v3)));wA=Transform.mulVec2(xfA2,proxyA.getVertex(indexA));indexB=proxyB.getSupport(Rot.mulTVec2(xfB2.q,v3));wB=Transform.mulVec2(xfB2,proxyB.getVertex(indexB));var p=Vec2.sub(wA,wB);v3.normalize();var vp=Vec2.dot(v3,p);var vr=Vec2.dot(v3,r);if(vp-sigma>lambda*vr){if(vr<=0){return false}lambda=(vp-sigma)/vr;if(lambda>1){return false}n2.setMul(-1,v3);simplex2.m_count=0}var vertex=vertices[simplex2.m_count];vertex.indexA=indexB;vertex.wA=Vec2.combine(1,wB,lambda,r);vertex.indexB=indexA;vertex.wB=wA;vertex.w=Vec2.sub(vertex.wB,vertex.wA);vertex.a=1;simplex2.m_count+=1;switch(simplex2.m_count){case 1:break;case 2:simplex2.solve2();break;case 3:simplex2.solve3();break}if(simplex2.m_count==3){return false}v3.setVec2(simplex2.getClosestPoint());++iter}if(iter==0){return false}var pointA2=Vec2.zero();var pointB2=Vec2.zero();simplex2.getWitnessPoints(pointB2,pointA2);if(v3.lengthSquared()>0){n2.setMul(-1,v3);n2.normalize()}output2.point=Vec2.combine(1,pointA2,radiusA,n2);output2.normal=n2;output2.lambda=lambda;output2.iterations=iter;return true};var math_abs$8=Math.abs;var math_max$4=Math.max;var TOIInput=function(){function TOIInput2(){this.proxyA=new DistanceProxy;this.proxyB=new DistanceProxy;this.sweepA=new Sweep;this.sweepB=new Sweep}TOIInput2.prototype.recycle=function(){this.proxyA.recycle();this.proxyB.recycle();this.sweepA.recycle();this.sweepB.recycle();this.tMax=-1};return TOIInput2}();exports2.TOIOutputState=void 0;(function(TOIOutputState2){TOIOutputState2[TOIOutputState2["e_unset"]=-1]="e_unset";TOIOutputState2[TOIOutputState2["e_unknown"]=0]="e_unknown";TOIOutputState2[TOIOutputState2["e_failed"]=1]="e_failed";TOIOutputState2[TOIOutputState2["e_overlapped"]=2]="e_overlapped";TOIOutputState2[TOIOutputState2["e_touching"]=3]="e_touching";TOIOutputState2[TOIOutputState2["e_separated"]=4]="e_separated"})(exports2.TOIOutputState||(exports2.TOIOutputState={}));var TOIOutput=function(){function TOIOutput2(){this.state=exports2.TOIOutputState.e_unset;this.t=-1}TOIOutput2.prototype.recycle=function(){this.state=exports2.TOIOutputState.e_unset;this.t=-1};return TOIOutput2}();stats$1.toiTime=0;stats$1.toiMaxTime=0;stats$1.toiCalls=0;stats$1.toiIters=0;stats$1.toiMaxIters=0;stats$1.toiRootIters=0;stats$1.toiMaxRootIters=0;var distanceInput=new DistanceInput;var distanceOutput=new DistanceOutput;var cache=new SimplexCache;var xfA$1=transform(0,0,0);var xfB$1=transform(0,0,0);var temp$4=vec2(0,0);var pointA$2=vec2(0,0);var pointB$2=vec2(0,0);var normal$3=vec2(0,0);var axisA=vec2(0,0);var axisB=vec2(0,0);var localPointA=vec2(0,0);var localPointB=vec2(0,0);var TimeOfImpact=function(output2,input2){var timer=Timer.now();++stats$1.toiCalls;output2.state=exports2.TOIOutputState.e_unknown;output2.t=input2.tMax;var proxyA=input2.proxyA;var proxyB=input2.proxyB;var sweepA=input2.sweepA;var sweepB=input2.sweepB;sweepA.normalize();sweepB.normalize();var tMax=input2.tMax;var totalRadius=proxyA.m_radius+proxyB.m_radius;var target=math_max$4(SettingsInternal.linearSlop,totalRadius-3*SettingsInternal.linearSlop);var tolerance=.25*SettingsInternal.linearSlop;var t1=0;var k_maxIterations=SettingsInternal.maxTOIIterations;var iter=0;cache.recycle();distanceInput.proxyA.setVertices(proxyA.m_vertices,proxyA.m_count,proxyA.m_radius);distanceInput.proxyB.setVertices(proxyB.m_vertices,proxyB.m_count,proxyB.m_radius);distanceInput.useRadii=false;while(true){sweepA.getTransform(xfA$1,t1);sweepB.getTransform(xfB$1,t1);copyTransform(distanceInput.transformA,xfA$1);copyTransform(distanceInput.transformB,xfB$1);Distance(distanceOutput,cache,distanceInput);if(distanceOutput.distance<=0){output2.state=exports2.TOIOutputState.e_overlapped;output2.t=0;break}if(distanceOutput.distancetarget+tolerance){output2.state=exports2.TOIOutputState.e_separated;output2.t=tMax;done=true;break}if(s2>target-tolerance){t1=t2;break}var s1=separationFunction.evaluate(t1);if(s1target){a1=t;s1=s3}else{a2=t;s2=s3}if(rootIterCount===50){break}}stats$1.toiMaxRootIters=math_max$4(stats$1.toiMaxRootIters,rootIterCount);++pushBackIter;if(pushBackIter===SettingsInternal.maxPolygonVertices){break}}++iter;++stats$1.toiIters;if(done){break}if(iter===k_maxIterations){output2.state=exports2.TOIOutputState.e_failed;output2.t=t1;break}}stats$1.toiMaxIters=math_max$4(stats$1.toiMaxIters,iter);var time=Timer.diff(timer);stats$1.toiMaxTime=math_max$4(stats$1.toiMaxTime,time);stats$1.toiTime+=time;separationFunction.recycle()};var SeparationFunctionType;(function(SeparationFunctionType2){SeparationFunctionType2[SeparationFunctionType2["e_unset"]=-1]="e_unset";SeparationFunctionType2[SeparationFunctionType2["e_points"]=1]="e_points";SeparationFunctionType2[SeparationFunctionType2["e_faceA"]=2]="e_faceA";SeparationFunctionType2[SeparationFunctionType2["e_faceB"]=3]="e_faceB"})(SeparationFunctionType||(SeparationFunctionType={}));var SeparationFunction=function(){function SeparationFunction2(){this.m_proxyA=null;this.m_proxyB=null;this.m_sweepA=null;this.m_sweepB=null;this.m_type=SeparationFunctionType.e_unset;this.m_localPoint=vec2(0,0);this.m_axis=vec2(0,0);this.indexA=-1;this.indexB=-1}SeparationFunction2.prototype.recycle=function(){this.m_proxyA=null;this.m_proxyB=null;this.m_sweepA=null;this.m_sweepB=null;this.m_type=SeparationFunctionType.e_unset;zeroVec2(this.m_localPoint);zeroVec2(this.m_axis);this.indexA=-1;this.indexB=-1};SeparationFunction2.prototype.initialize=function(cache2,proxyA,sweepA,proxyB,sweepB,t1){var count=cache2.count;this.m_proxyA=proxyA;this.m_proxyB=proxyB;this.m_sweepA=sweepA;this.m_sweepB=sweepB;this.m_sweepA.getTransform(xfA$1,t1);this.m_sweepB.getTransform(xfB$1,t1);if(count===1){this.m_type=SeparationFunctionType.e_points;var localPointA_1=this.m_proxyA.getVertex(cache2.indexA[0]);var localPointB_1=this.m_proxyB.getVertex(cache2.indexB[0]);transformVec2(pointA$2,xfA$1,localPointA_1);transformVec2(pointB$2,xfB$1,localPointB_1);subVec2(this.m_axis,pointB$2,pointA$2);var s2=normalizeVec2Length(this.m_axis);return s2}else if(cache2.indexA[0]===cache2.indexA[1]){this.m_type=SeparationFunctionType.e_faceB;var localPointB1=proxyB.getVertex(cache2.indexB[0]);var localPointB2=proxyB.getVertex(cache2.indexB[1]);crossVec2Num(this.m_axis,subVec2(temp$4,localPointB2,localPointB1),1);normalizeVec2(this.m_axis);rotVec2(normal$3,xfB$1.q,this.m_axis);combine2Vec2(this.m_localPoint,.5,localPointB1,.5,localPointB2);transformVec2(pointB$2,xfB$1,this.m_localPoint);var localPointA_2=proxyA.getVertex(cache2.indexA[0]);var pointA_1=Transform.mulVec2(xfA$1,localPointA_2);var s2=dotVec2(pointA_1,normal$3)-dotVec2(pointB$2,normal$3);if(s2<0){negVec2(this.m_axis);s2=-s2}return s2}else{this.m_type=SeparationFunctionType.e_faceA;var localPointA1=this.m_proxyA.getVertex(cache2.indexA[0]);var localPointA2=this.m_proxyA.getVertex(cache2.indexA[1]);crossVec2Num(this.m_axis,subVec2(temp$4,localPointA2,localPointA1),1);normalizeVec2(this.m_axis);rotVec2(normal$3,xfA$1.q,this.m_axis);combine2Vec2(this.m_localPoint,.5,localPointA1,.5,localPointA2);transformVec2(pointA$2,xfA$1,this.m_localPoint);var localPointB_2=this.m_proxyB.getVertex(cache2.indexB[0]);transformVec2(pointB$2,xfB$1,localPointB_2);var s2=dotVec2(pointB$2,normal$3)-dotVec2(pointA$2,normal$3);if(s2<0){negVec2(this.m_axis);s2=-s2}return s2}};SeparationFunction2.prototype.compute=function(find,t){this.m_sweepA.getTransform(xfA$1,t);this.m_sweepB.getTransform(xfB$1,t);switch(this.m_type){case SeparationFunctionType.e_points:{if(find){derotVec2(axisA,xfA$1.q,this.m_axis);derotVec2(axisB,xfB$1.q,scaleVec2(temp$4,-1,this.m_axis));this.indexA=this.m_proxyA.getSupport(axisA);this.indexB=this.m_proxyB.getSupport(axisB)}copyVec2(localPointA,this.m_proxyA.getVertex(this.indexA));copyVec2(localPointB,this.m_proxyB.getVertex(this.indexB));transformVec2(pointA$2,xfA$1,localPointA);transformVec2(pointB$2,xfB$1,localPointB);var sep=dotVec2(pointB$2,this.m_axis)-dotVec2(pointA$2,this.m_axis);return sep}case SeparationFunctionType.e_faceA:{rotVec2(normal$3,xfA$1.q,this.m_axis);transformVec2(pointA$2,xfA$1,this.m_localPoint);if(find){derotVec2(axisB,xfB$1.q,scaleVec2(temp$4,-1,normal$3));this.indexA=-1;this.indexB=this.m_proxyB.getSupport(axisB)}copyVec2(localPointB,this.m_proxyB.getVertex(this.indexB));transformVec2(pointB$2,xfB$1,localPointB);var sep=dotVec2(pointB$2,normal$3)-dotVec2(pointA$2,normal$3);return sep}case SeparationFunctionType.e_faceB:{rotVec2(normal$3,xfB$1.q,this.m_axis);transformVec2(pointB$2,xfB$1,this.m_localPoint);if(find){derotVec2(axisA,xfA$1.q,scaleVec2(temp$4,-1,normal$3));this.indexB=-1;this.indexA=this.m_proxyA.getSupport(axisA)}copyVec2(localPointA,this.m_proxyA.getVertex(this.indexA));transformVec2(pointA$2,xfA$1,localPointA);var sep=dotVec2(pointA$2,normal$3)-dotVec2(pointB$2,normal$3);return sep}default:if(find){this.indexA=-1;this.indexB=-1}return 0}};SeparationFunction2.prototype.findMinSeparation=function(t){return this.compute(true,t)};SeparationFunction2.prototype.evaluate=function(t){return this.compute(false,t)};return SeparationFunction2}();var separationFunction=new SeparationFunction;TimeOfImpact.Input=TOIInput;TimeOfImpact.Output=TOIOutput;var math_abs$7=Math.abs;var math_sqrt$5=Math.sqrt;var math_min$6=Math.min;var TimeStep=function(){function TimeStep2(){this.dt=0;this.inv_dt=0;this.velocityIterations=0;this.positionIterations=0;this.warmStarting=false;this.blockSolve=true;this.inv_dt0=0;this.dtRatio=1}TimeStep2.prototype.reset=function(dt){if(this.dt>0){this.inv_dt0=this.inv_dt}this.dt=dt;this.inv_dt=dt==0?0:1/dt;this.dtRatio=dt*this.inv_dt0};return TimeStep2}();var s_subStep=new TimeStep;var c=vec2(0,0);var v=vec2(0,0);var translation=vec2(0,0);var input=new TOIInput;var output=new TOIOutput;var backup=new Sweep;var backup1=new Sweep;var backup2=new Sweep;var ContactImpulse=function(){function ContactImpulse2(contact){this.contact=contact;this.normals=[];this.tangents=[]}ContactImpulse2.prototype.recycle=function(){this.normals.length=0;this.tangents.length=0};Object.defineProperty(ContactImpulse2.prototype,"normalImpulses",{get:function(){var contact=this.contact;var normals=this.normals;normals.length=0;for(var p=0;p0){var b2=stack.pop();this.addBody(b2);b2.m_awakeFlag=true;if(b2.isStatic()){continue}for(var ce=b2.m_contactList;ce;ce=ce.next){var contact=ce.contact;if(contact.m_islandFlag){continue}if(contact.isEnabled()==false||contact.isTouching()==false){continue}var sensorA=contact.m_fixtureA.m_isSensor;var sensorB=contact.m_fixtureB.m_isSensor;if(sensorA||sensorB){continue}this.addContact(contact);contact.m_islandFlag=true;var other=ce.other;if(other.m_islandFlag){continue}stack.push(other);other.m_islandFlag=true}for(var je=b2.m_jointList;je;je=je.next){if(je.joint.m_islandFlag==true){continue}var other=je.other;if(other.isActive()==false){continue}this.addJoint(je.joint);je.joint.m_islandFlag=true;if(other.m_islandFlag){continue}stack.push(other);other.m_islandFlag=true}}this.solveIsland(step);for(var i=0;iSettingsInternal.maxTranslationSquared){var ratio=SettingsInternal.maxTranslation/math_sqrt$5(translationLengthSqr);mulVec2(v,ratio)}var rotation2=h*w;if(rotation2*rotation2>SettingsInternal.maxRotationSquared){var ratio=SettingsInternal.maxRotation/math_abs$7(rotation2);w*=ratio}plusScaleVec2(c,h,v);a2+=h*w;copyVec2(body.c_position.c,c);body.c_position.a=a2;copyVec2(body.c_velocity.v,v);body.c_velocity.w=w}var positionSolved=false;for(var i=0;i=-3*SettingsInternal.linearSlop;var jointsOkay=true;for(var j=0;jangTolSqr||lengthSqrVec2(body.m_linearVelocity)>linTolSqr){body.m_sleepTime=0;minSleepTime=0}else{body.m_sleepTime+=h;minSleepTime=math_min$6(minSleepTime,body.m_sleepTime)}}if(minSleepTime>=SettingsInternal.timeToSleep&&positionSolved){for(var i=0;iSettingsInternal.maxSubSteps){continue}var alpha=1;if(c_3.m_toiFlag){alpha=c_3.m_toi}else{var fA_1=c_3.getFixtureA();var fB_1=c_3.getFixtureB();if(fA_1.isSensor()||fB_1.isSensor()){continue}var bA_1=fA_1.getBody();var bB_1=fB_1.getBody();var activeA=bA_1.isAwake()&&!bA_1.isStatic();var activeB=bB_1.isAwake()&&!bB_1.isStatic();if(activeA==false&&activeB==false){continue}var collideA=bA_1.isBullet()||!bA_1.isDynamic();var collideB=bB_1.isBullet()||!bB_1.isDynamic();if(collideA==false&&collideB==false){continue}var alpha0=bA_1.m_sweep.alpha0;if(bA_1.m_sweep.alpha0=-1.5*SettingsInternal.linearSlop;if(contactsOkay){break}}var i;copyVec2(toiA.m_sweep.c0,toiA.c_position.c);toiA.m_sweep.a0=toiA.c_position.a;copyVec2(toiB.m_sweep.c0,toiB.c_position.c);toiB.m_sweep.a0=toiB.c_position.a;for(var i=0;iSettingsInternal.maxTranslationSquared){var ratio=SettingsInternal.maxTranslation/math_sqrt$5(translationLengthSqr);mulVec2(v,ratio)}var rotation2=h*w;if(rotation2*rotation2>SettingsInternal.maxRotationSquared){var ratio=SettingsInternal.maxRotation/math_abs$7(rotation2);w*=ratio}plusScaleVec2(c,h,v);a2+=h*w;copyVec2(body.c_position.c,c);body.c_position.a=a2;copyVec2(body.c_velocity.v,v);body.c_velocity.w=w;copyVec2(body.m_sweep.c,c);body.m_sweep.a=a2;copyVec2(body.m_linearVelocity,v);body.m_angularVelocity=w;body.synchronizeTransform()}this.postSolveIsland()};Solver2.prototype.postSolveIsland=function(){for(var c_5=0;c_5EPSILON*EPSILON){var length_1=math_sqrt$4(lengthSqr);scaleVec2(normal3,1/length_1,dist)}combine2Vec2(cA$1,1,pointA$1,radiusA,normal3);combine2Vec2(cB$1,1,pointB$1,-radiusB,normal3);combine2Vec2(points[0],.5,cA$1,.5,cB$1);separations[0]=dotVec2(subVec2(temp$3,cB$1,cA$1),normal3);break}case exports2.ManifoldType.e_faceA:{rotVec2(normal3,xfA2.q,this.localNormal);transformVec2(planePoint$2,xfA2,this.localPoint);for(var i=0;irestitution2?restitution1:restitution2}var s_registers=[];var VelocityConstraintPoint=function(){function VelocityConstraintPoint2(){this.rA=vec2(0,0);this.rB=vec2(0,0);this.normalImpulse=0;this.tangentImpulse=0;this.normalMass=0;this.tangentMass=0;this.velocityBias=0}VelocityConstraintPoint2.prototype.recycle=function(){zeroVec2(this.rA);zeroVec2(this.rB);this.normalImpulse=0;this.tangentImpulse=0;this.normalMass=0;this.tangentMass=0;this.velocityBias=0};return VelocityConstraintPoint2}();var cA=vec2(0,0);var vA=vec2(0,0);var cB=vec2(0,0);var vB=vec2(0,0);var tangent$1=vec2(0,0);var xfA=transform(0,0,0);var xfB=transform(0,0,0);var pointA=vec2(0,0);var pointB=vec2(0,0);var clipPoint=vec2(0,0);var planePoint$1=vec2(0,0);var rA=vec2(0,0);var rB=vec2(0,0);var P$1=vec2(0,0);var normal$2=vec2(0,0);var point=vec2(0,0);var dv=vec2(0,0);var dv1=vec2(0,0);var dv2=vec2(0,0);var b=vec2(0,0);var a=vec2(0,0);var x=vec2(0,0);var d=vec2(0,0);var P1=vec2(0,0);var P2=vec2(0,0);var temp$2=vec2(0,0);var Contact=function(){function Contact2(){this.m_nodeA=new ContactEdge(this);this.m_nodeB=new ContactEdge(this);this.m_fixtureA=null;this.m_fixtureB=null;this.m_indexA=-1;this.m_indexB=-1;this.m_evaluateFcn=null;this.m_manifold=new Manifold;this.m_prev=null;this.m_next=null;this.m_toi=1;this.m_toiCount=0;this.m_toiFlag=false;this.m_friction=0;this.m_restitution=0;this.m_tangentSpeed=0;this.m_enabledFlag=true;this.m_islandFlag=false;this.m_touchingFlag=false;this.m_filterFlag=false;this.m_bulletHitFlag=false;this.m_impulse=new ContactImpulse(this);this.v_points=[new VelocityConstraintPoint,new VelocityConstraintPoint];this.v_normal=vec2(0,0);this.v_normalMass=new Mat22;this.v_K=new Mat22;this.v_pointCount=0;this.v_tangentSpeed=0;this.v_friction=0;this.v_restitution=0;this.v_invMassA=0;this.v_invMassB=0;this.v_invIA=0;this.v_invIB=0;this.p_localPoints=[vec2(0,0),vec2(0,0)];this.p_localNormal=vec2(0,0);this.p_localPoint=vec2(0,0);this.p_localCenterA=vec2(0,0);this.p_localCenterB=vec2(0,0);this.p_type=exports2.ManifoldType.e_unset;this.p_radiusA=0;this.p_radiusB=0;this.p_pointCount=0;this.p_invMassA=0;this.p_invMassB=0;this.p_invIA=0;this.p_invIB=0}Contact2.prototype.initialize=function(fA,indexA,fB,indexB,evaluateFcn){this.m_fixtureA=fA;this.m_fixtureB=fB;this.m_indexA=indexA;this.m_indexB=indexB;this.m_evaluateFcn=evaluateFcn;this.m_friction=mixFriction(this.m_fixtureA.m_friction,this.m_fixtureB.m_friction);this.m_restitution=mixRestitution(this.m_fixtureA.m_restitution,this.m_fixtureB.m_restitution)};Contact2.prototype.recycle=function(){this.m_nodeA.recycle();this.m_nodeB.recycle();this.m_fixtureA=null;this.m_fixtureB=null;this.m_indexA=-1;this.m_indexB=-1;this.m_evaluateFcn=null;this.m_manifold.recycle();this.m_prev=null;this.m_next=null;this.m_toi=1;this.m_toiCount=0;this.m_toiFlag=false;this.m_friction=0;this.m_restitution=0;this.m_tangentSpeed=0;this.m_enabledFlag=true;this.m_islandFlag=false;this.m_touchingFlag=false;this.m_filterFlag=false;this.m_bulletHitFlag=false;this.m_impulse.recycle();for(var _i=0,_a2=this.v_points;_i<_a2.length;_i++){var point_1=_a2[_i];point_1.recycle()}zeroVec2(this.v_normal);this.v_normalMass.setZero();this.v_K.setZero();this.v_pointCount=0;this.v_tangentSpeed=0;this.v_friction=0;this.v_restitution=0;this.v_invMassA=0;this.v_invMassB=0;this.v_invIA=0;this.v_invIB=0;for(var _b=0,_c=this.p_localPoints;_b<_c.length;_b++){var point_2=_c[_b];zeroVec2(point_2)}zeroVec2(this.p_localNormal);zeroVec2(this.p_localPoint);zeroVec2(this.p_localCenterA);zeroVec2(this.p_localCenterB);this.p_type=exports2.ManifoldType.e_unset;this.p_radiusA=0;this.p_radiusB=0;this.p_pointCount=0;this.p_invMassA=0;this.p_invMassB=0;this.p_invIA=0;this.p_invIB=0};Contact2.prototype.initConstraint=function(step){var fixtureA=this.m_fixtureA;var fixtureB=this.m_fixtureB;if(fixtureA===null||fixtureB===null)return;var bodyA=fixtureA.m_body;var bodyB=fixtureB.m_body;if(bodyA===null||bodyB===null)return;var shapeA=fixtureA.m_shape;var shapeB=fixtureB.m_shape;if(shapeA===null||shapeB===null)return;var manifold=this.m_manifold;var pointCount=manifold.pointCount;this.v_invMassA=bodyA.m_invMass;this.v_invMassB=bodyB.m_invMass;this.v_invIA=bodyA.m_invI;this.v_invIB=bodyB.m_invI;this.v_friction=this.m_friction;this.v_restitution=this.m_restitution;this.v_tangentSpeed=this.m_tangentSpeed;this.v_pointCount=pointCount;this.v_K.setZero();this.v_normalMass.setZero();this.p_invMassA=bodyA.m_invMass;this.p_invMassB=bodyB.m_invMass;this.p_invIA=bodyA.m_invI;this.p_invIB=bodyB.m_invI;copyVec2(this.p_localCenterA,bodyA.m_sweep.localCenter);copyVec2(this.p_localCenterB,bodyB.m_sweep.localCenter);this.p_radiusA=shapeA.m_radius;this.p_radiusB=shapeB.m_radius;this.p_type=manifold.type;copyVec2(this.p_localNormal,manifold.localNormal);copyVec2(this.p_localPoint,manifold.localPoint);this.p_pointCount=pointCount;for(var j=0;j0;for(var i=0;i0?-C/K:0;scaleVec2(P$1,impulse,normal$2);minusScaleVec2(cA,mA,P$1);aA-=iA*crossVec2Vec2(rA,P$1);plusScaleVec2(cB,mB,P$1);aB+=iB*crossVec2Vec2(rB,P$1)}copyVec2(positionA.c,cA);positionA.a=aA;copyVec2(positionB.c,cB);positionB.a=aB;return minSeparation};Contact2.prototype.initVelocityConstraint=function(step){var fixtureA=this.m_fixtureA;var fixtureB=this.m_fixtureB;if(fixtureA===null||fixtureB===null)return;var bodyA=fixtureA.m_body;var bodyB=fixtureB.m_body;if(bodyA===null||bodyB===null)return;var velocityA=bodyA.c_velocity;var velocityB=bodyB.c_velocity;var positionA=bodyA.c_position;var positionB=bodyB.c_position;var radiusA=this.p_radiusA;var radiusB=this.p_radiusB;var manifold=this.m_manifold;var mA=this.v_invMassA;var mB=this.v_invMassB;var iA=this.v_invIA;var iB=this.v_invIB;var localCenterA=this.p_localCenterA;var localCenterB=this.p_localCenterB;copyVec2(cA,positionA.c);var aA=positionA.a;copyVec2(vA,velocityA.v);var wA=velocityA.w;copyVec2(cB,positionB.c);var aB=positionB.a;copyVec2(vB,velocityB.v);var wB=velocityB.w;getTransform(xfA,localCenterA,cA,aA);getTransform(xfB,localCenterB,cB,aB);worldManifold.recycle();manifold.getWorldManifold(worldManifold,xfA,radiusA,xfB,radiusB);copyVec2(this.v_normal,worldManifold.normal);for(var j=0;j0?1/kNormal:0;crossVec2Num(tangent$1,this.v_normal,1);var rtA=crossVec2Vec2(vcp.rA,tangent$1);var rtB=crossVec2Vec2(vcp.rB,tangent$1);var kTangent=mA+mB+iA*rtA*rtA+iB*rtB*rtB;vcp.tangentMass=kTangent>0?1/kTangent:0;vcp.velocityBias=0;var vRel=0;vRel+=dotVec2(this.v_normal,vB);vRel+=dotVec2(this.v_normal,crossNumVec2(temp$2,wB,vcp.rB));vRel-=dotVec2(this.v_normal,vA);vRel-=dotVec2(this.v_normal,crossNumVec2(temp$2,wA,vcp.rA));if(vRel<-SettingsInternal.velocityThreshold){vcp.velocityBias=-this.v_restitution*vRel}}if(this.v_pointCount==2&&step.blockSolve){var vcp1=this.v_points[0];var vcp2=this.v_points[1];var rn1A=crossVec2Vec2(vcp1.rA,this.v_normal);var rn1B=crossVec2Vec2(vcp1.rB,this.v_normal);var rn2A=crossVec2Vec2(vcp2.rA,this.v_normal);var rn2B=crossVec2Vec2(vcp2.rB,this.v_normal);var k11=mA+mB+iA*rn1A*rn1A+iB*rn1B*rn1B;var k22=mA+mB+iA*rn2A*rn2A+iB*rn2B*rn2B;var k12=mA+mB+iA*rn1A*rn2A+iB*rn1B*rn2B;var k_maxConditionNumber=1e3;if(k11*k11=0&&x.y>=0){subVec2(d,x,a);scaleVec2(P1,d.x,normal$2);scaleVec2(P2,d.y,normal$2);combine3Vec2(vA,-mA,P1,-mA,P2,1,vA);wA-=iA*(crossVec2Vec2(vcp1.rA,P1)+crossVec2Vec2(vcp2.rA,P2));combine3Vec2(vB,mB,P1,mB,P2,1,vB);wB+=iB*(crossVec2Vec2(vcp1.rB,P1)+crossVec2Vec2(vcp2.rB,P2));vcp1.normalImpulse=x.x;vcp2.normalImpulse=x.y;break}x.x=-vcp1.normalMass*b.x;x.y=0;vn1=0;vn2=this.v_K.ex.y*x.x+b.y;if(x.x>=0&&vn2>=0){subVec2(d,x,a);scaleVec2(P1,d.x,normal$2);scaleVec2(P2,d.y,normal$2);combine3Vec2(vA,-mA,P1,-mA,P2,1,vA);wA-=iA*(crossVec2Vec2(vcp1.rA,P1)+crossVec2Vec2(vcp2.rA,P2));combine3Vec2(vB,mB,P1,mB,P2,1,vB);wB+=iB*(crossVec2Vec2(vcp1.rB,P1)+crossVec2Vec2(vcp2.rB,P2));vcp1.normalImpulse=x.x;vcp2.normalImpulse=x.y;break}x.x=0;x.y=-vcp2.normalMass*b.y;vn1=this.v_K.ey.x*x.y+b.x;vn2=0;if(x.y>=0&&vn1>=0){subVec2(d,x,a);scaleVec2(P1,d.x,normal$2);scaleVec2(P2,d.y,normal$2);combine3Vec2(vA,-mA,P1,-mA,P2,1,vA);wA-=iA*(crossVec2Vec2(vcp1.rA,P1)+crossVec2Vec2(vcp2.rA,P2));combine3Vec2(vB,mB,P1,mB,P2,1,vB);wB+=iB*(crossVec2Vec2(vcp1.rB,P1)+crossVec2Vec2(vcp2.rB,P2));vcp1.normalImpulse=x.x;vcp2.normalImpulse=x.y;break}x.x=0;x.y=0;vn1=b.x;vn2=b.y;if(vn1>=0&&vn2>=0){subVec2(d,x,a);scaleVec2(P1,d.x,normal$2);scaleVec2(P2,d.y,normal$2);combine3Vec2(vA,-mA,P1,-mA,P2,1,vA);wA-=iA*(crossVec2Vec2(vcp1.rA,P1)+crossVec2Vec2(vcp2.rA,P2));combine3Vec2(vB,mB,P1,mB,P2,1,vB);wB+=iB*(crossVec2Vec2(vcp1.rB,P1)+crossVec2Vec2(vcp2.rB,P2));vcp1.normalImpulse=x.x;vcp2.normalImpulse=x.y;break}break}}copyVec2(velocityA.v,vA);velocityA.w=wA;copyVec2(velocityB.v,vB);velocityB.w=wB};Contact2.addType=function(type1,type2,callback){s_registers[type1]=s_registers[type1]||{};s_registers[type1][type2]=callback};Contact2.create=function(fixtureA,indexA,fixtureB,indexB){var typeA=fixtureA.m_shape.m_type;var typeB=fixtureB.m_shape.m_type;var contact=contactPool.allocate();var evaluateFcn;if(evaluateFcn=s_registers[typeA]&&s_registers[typeA][typeB]){contact.initialize(fixtureA,indexA,fixtureB,indexB,evaluateFcn)}else if(evaluateFcn=s_registers[typeB]&&s_registers[typeB][typeA]){contact.initialize(fixtureB,indexB,fixtureA,indexA,evaluateFcn)}else{return null}fixtureA=contact.m_fixtureA;fixtureB=contact.m_fixtureB;indexA=contact.getChildIndexA();indexB=contact.getChildIndexB();var bodyA=fixtureA.m_body;var bodyB=fixtureB.m_body;contact.m_nodeA.contact=contact;contact.m_nodeA.other=bodyB;contact.m_nodeA.prev=null;contact.m_nodeA.next=bodyA.m_contactList;if(bodyA.m_contactList!=null){bodyA.m_contactList.prev=contact.m_nodeA}bodyA.m_contactList=contact.m_nodeA;contact.m_nodeB.contact=contact;contact.m_nodeB.other=bodyA;contact.m_nodeB.prev=null;contact.m_nodeB.next=bodyB.m_contactList;if(bodyB.m_contactList!=null){bodyB.m_contactList.prev=contact.m_nodeB}bodyB.m_contactList=contact.m_nodeB;if(fixtureA.isSensor()==false&&fixtureB.isSensor()==false){bodyA.setAwake(true);bodyB.setAwake(true)}return contact};Contact2.destroy=function(contact,listener){var fixtureA=contact.m_fixtureA;var fixtureB=contact.m_fixtureB;if(fixtureA===null||fixtureB===null)return;var bodyA=fixtureA.m_body;var bodyB=fixtureB.m_body;if(bodyA===null||bodyB===null)return;if(contact.isTouching()){listener.endContact(contact)}if(contact.m_nodeA.prev){contact.m_nodeA.prev.next=contact.m_nodeA.next}if(contact.m_nodeA.next){contact.m_nodeA.next.prev=contact.m_nodeA.prev}if(contact.m_nodeA==bodyA.m_contactList){bodyA.m_contactList=contact.m_nodeA.next}if(contact.m_nodeB.prev){contact.m_nodeB.prev.next=contact.m_nodeB.next}if(contact.m_nodeB.next){contact.m_nodeB.next.prev=contact.m_nodeB.prev}if(contact.m_nodeB==bodyB.m_contactList){bodyB.m_contactList=contact.m_nodeB.next}if(contact.m_manifold.pointCount>0&&!fixtureA.m_isSensor&&!fixtureB.m_isSensor){bodyA.setAwake(true);bodyB.setAwake(true)}contactPool.release(contact)};return Contact2}();var DEFAULTS$b={gravity:Vec2.zero(),allowSleep:true,warmStarting:true,continuousPhysics:true,subStepping:false,blockSolve:true,velocityIterations:8,positionIterations:3};var World=function(){function World2(def){if(!(this instanceof World2)){return new World2(def)}this.s_step=new TimeStep;if(!def){def={}}else if(Vec2.isValid(def)){def={gravity:def}}def=options(def,DEFAULTS$b);this.m_solver=new Solver(this);this.m_broadPhase=new BroadPhase;this.m_contactList=null;this.m_contactCount=0;this.m_bodyList=null;this.m_bodyCount=0;this.m_jointList=null;this.m_jointCount=0;this.m_stepComplete=true;this.m_allowSleep=def.allowSleep;this.m_gravity=Vec2.clone(def.gravity);this.m_clearForces=true;this.m_newFixture=false;this.m_locked=false;this.m_warmStarting=def.warmStarting;this.m_continuousPhysics=def.continuousPhysics;this.m_subStepping=def.subStepping;this.m_blockSolve=def.blockSolve;this.m_velocityIterations=def.velocityIterations;this.m_positionIterations=def.positionIterations;this.m_t=0}World2.prototype._serialize=function(){var bodies=[];var joints=[];for(var b2=this.getBodyList();b2;b2=b2.getNext()){bodies.push(b2)}for(var j=this.getJointList();j;j=j.getNext()){if(typeof j._serialize==="function"){joints.push(j)}}return{gravity:this.m_gravity,bodies:bodies,joints:joints}};World2._deserialize=function(data,context,restore){if(!data){return new World2}var world=new World2(data.gravity);if(data.bodies){for(var i=data.bodies.length-1;i>=0;i-=1){world._addBody(restore(Body,data.bodies[i],world))}}if(data.joints){for(var i=data.joints.length-1;i>=0;i--){world.createJoint(restore(Joint,data.joints[i],world))}}return world};World2.prototype.getBodyList=function(){return this.m_bodyList};World2.prototype.getJointList=function(){return this.m_jointList};World2.prototype.getContactList=function(){return this.m_contactList};World2.prototype.getBodyCount=function(){return this.m_bodyCount};World2.prototype.getJointCount=function(){return this.m_jointCount};World2.prototype.getContactCount=function(){return this.m_contactCount};World2.prototype.setGravity=function(gravity){this.m_gravity.set(gravity)};World2.prototype.getGravity=function(){return this.m_gravity};World2.prototype.isLocked=function(){return this.m_locked};World2.prototype.setAllowSleeping=function(flag){if(flag==this.m_allowSleep){return}this.m_allowSleep=flag;if(this.m_allowSleep==false){for(var b2=this.m_bodyList;b2;b2=b2.m_next){b2.setAwake(true)}}};World2.prototype.getAllowSleeping=function(){return this.m_allowSleep};World2.prototype.setWarmStarting=function(flag){this.m_warmStarting=flag};World2.prototype.getWarmStarting=function(){return this.m_warmStarting};World2.prototype.setContinuousPhysics=function(flag){this.m_continuousPhysics=flag};World2.prototype.getContinuousPhysics=function(){return this.m_continuousPhysics};World2.prototype.setSubStepping=function(flag){this.m_subStepping=flag};World2.prototype.getSubStepping=function(){return this.m_subStepping};World2.prototype.setAutoClearForces=function(flag){this.m_clearForces=flag};World2.prototype.getAutoClearForces=function(){return this.m_clearForces};World2.prototype.clearForces=function(){for(var body=this.m_bodyList;body;body=body.getNext()){body.m_force.setZero();body.m_torque=0}};World2.prototype.queryAABB=function(aabb,callback){var broadPhase=this.m_broadPhase;this.m_broadPhase.query(aabb,(function(proxyId){var proxy=broadPhase.getUserData(proxyId);return callback(proxy.fixture)}))};World2.prototype.rayCast=function(point1,point2,callback){var broadPhase=this.m_broadPhase;this.m_broadPhase.rayCast({maxFraction:1,p1:point1,p2:point2},(function(input2,proxyId){var proxy=broadPhase.getUserData(proxyId);var fixture=proxy.fixture;var index=proxy.childIndex;var output2={};var hit=fixture.rayCast(output2,input2,index);if(hit){var fraction=output2.fraction;var point3=Vec2.add(Vec2.mulNumVec2(1-fraction,input2.p1),Vec2.mulNumVec2(fraction,input2.p2));return callback(fixture,point3,output2.normal,fraction)}return input2.maxFraction}))};World2.prototype.getProxyCount=function(){return this.m_broadPhase.getProxyCount()};World2.prototype.getTreeHeight=function(){return this.m_broadPhase.getTreeHeight()};World2.prototype.getTreeBalance=function(){return this.m_broadPhase.getTreeBalance()};World2.prototype.getTreeQuality=function(){return this.m_broadPhase.getTreeQuality()};World2.prototype.shiftOrigin=function(newOrigin){if(this.m_locked){return}for(var b2=this.m_bodyList;b2;b2=b2.m_next){b2.m_xf.p.sub(newOrigin);b2.m_sweep.c0.sub(newOrigin);b2.m_sweep.c.sub(newOrigin)}for(var j=this.m_jointList;j;j=j.m_next){j.shiftOrigin(newOrigin)}this.m_broadPhase.shiftOrigin(newOrigin)};World2.prototype._addBody=function(body){if(this.isLocked()){return}body.m_prev=null;body.m_next=this.m_bodyList;if(this.m_bodyList){this.m_bodyList.m_prev=body}this.m_bodyList=body;++this.m_bodyCount};World2.prototype.createBody=function(arg1,arg2){if(this.isLocked()){return null}var def={};if(!arg1);else if(Vec2.isValid(arg1)){def={position:arg1,angle:arg2}}else if(typeof arg1==="object"){def=arg1}var body=new Body(this,def);this._addBody(body);return body};World2.prototype.createDynamicBody=function(arg1,arg2){var def={};if(!arg1);else if(Vec2.isValid(arg1)){def={position:arg1,angle:arg2}}else if(typeof arg1==="object"){def=arg1}def.type="dynamic";return this.createBody(def)};World2.prototype.createKinematicBody=function(arg1,arg2){var def={};if(!arg1);else if(Vec2.isValid(arg1)){def={position:arg1,angle:arg2}}else if(typeof arg1==="object"){def=arg1}def.type="kinematic";return this.createBody(def)};World2.prototype.destroyBody=function(b2){if(this.isLocked()){return}if(b2.m_destroyed){return false}var je=b2.m_jointList;while(je){var je0=je;je=je.next;this.publish("remove-joint",je0.joint);this.destroyJoint(je0.joint);b2.m_jointList=je}b2.m_jointList=null;var ce=b2.m_contactList;while(ce){var ce0=ce;ce=ce.next;this.destroyContact(ce0.contact);b2.m_contactList=ce}b2.m_contactList=null;var f=b2.m_fixtureList;while(f){var f0=f;f=f.m_next;this.publish("remove-fixture",f0);f0.destroyProxies(this.m_broadPhase);b2.m_fixtureList=f}b2.m_fixtureList=null;if(b2.m_prev){b2.m_prev.m_next=b2.m_next}if(b2.m_next){b2.m_next.m_prev=b2.m_prev}if(b2==this.m_bodyList){this.m_bodyList=b2.m_next}b2.m_destroyed=true;--this.m_bodyCount;this.publish("remove-body",b2);return true};World2.prototype.createJoint=function(joint){if(this.isLocked()){return null}joint.m_prev=null;joint.m_next=this.m_jointList;if(this.m_jointList){this.m_jointList.m_prev=joint}this.m_jointList=joint;++this.m_jointCount;joint.m_edgeA.joint=joint;joint.m_edgeA.other=joint.m_bodyB;joint.m_edgeA.prev=null;joint.m_edgeA.next=joint.m_bodyA.m_jointList;if(joint.m_bodyA.m_jointList)joint.m_bodyA.m_jointList.prev=joint.m_edgeA;joint.m_bodyA.m_jointList=joint.m_edgeA;joint.m_edgeB.joint=joint;joint.m_edgeB.other=joint.m_bodyA;joint.m_edgeB.prev=null;joint.m_edgeB.next=joint.m_bodyB.m_jointList;if(joint.m_bodyB.m_jointList)joint.m_bodyB.m_jointList.prev=joint.m_edgeB;joint.m_bodyB.m_jointList=joint.m_edgeB;if(joint.m_collideConnected==false){for(var edge=joint.m_bodyB.getContactList();edge;edge=edge.next){if(edge.other==joint.m_bodyA){edge.contact.flagForFiltering()}}}return joint};World2.prototype.destroyJoint=function(joint){if(this.isLocked()){return}if(joint.m_prev){joint.m_prev.m_next=joint.m_next}if(joint.m_next){joint.m_next.m_prev=joint.m_prev}if(joint==this.m_jointList){this.m_jointList=joint.m_next}var bodyA=joint.m_bodyA;var bodyB=joint.m_bodyB;bodyA.setAwake(true);bodyB.setAwake(true);if(joint.m_edgeA.prev){joint.m_edgeA.prev.next=joint.m_edgeA.next}if(joint.m_edgeA.next){joint.m_edgeA.next.prev=joint.m_edgeA.prev}if(joint.m_edgeA==bodyA.m_jointList){bodyA.m_jointList=joint.m_edgeA.next}joint.m_edgeA.prev=null;joint.m_edgeA.next=null;if(joint.m_edgeB.prev){joint.m_edgeB.prev.next=joint.m_edgeB.next}if(joint.m_edgeB.next){joint.m_edgeB.next.prev=joint.m_edgeB.prev}if(joint.m_edgeB==bodyB.m_jointList){bodyB.m_jointList=joint.m_edgeB.next}joint.m_edgeB.prev=null;joint.m_edgeB.next=null;--this.m_jointCount;if(joint.m_collideConnected==false){var edge=bodyB.getContactList();while(edge){if(edge.other==bodyA){edge.contact.flagForFiltering()}edge=edge.next}}this.publish("remove-joint",joint)};World2.prototype.step=function(timeStep,velocityIterations,positionIterations){this.publish("pre-step",timeStep);if((velocityIterations|0)!==velocityIterations){velocityIterations=0}velocityIterations=velocityIterations||this.m_velocityIterations;positionIterations=positionIterations||this.m_positionIterations;if(this.m_newFixture){this.findNewContacts();this.m_newFixture=false}this.m_locked=true;this.s_step.reset(timeStep);this.s_step.velocityIterations=velocityIterations;this.s_step.positionIterations=positionIterations;this.s_step.warmStarting=this.m_warmStarting;this.s_step.blockSolve=this.m_blockSolve;this.updateContacts();if(this.m_stepComplete&&timeStep>0){this.m_solver.solveWorld(this.s_step);for(var b2=this.m_bodyList;b2;b2=b2.getNext()){if(b2.m_islandFlag==false){continue}if(b2.isStatic()){continue}b2.synchronizeFixtures()}this.findNewContacts()}if(this.m_continuousPhysics&&timeStep>0){this.m_solver.solveWorldTOI(this.s_step)}if(this.m_clearForces){this.clearForces()}this.m_locked=false;this.publish("post-step",timeStep)};World2.prototype.findNewContacts=function(){var _this=this;this.m_broadPhase.updatePairs((function(proxyA,proxyB){return _this.createContact(proxyA,proxyB)}))};World2.prototype.createContact=function(proxyA,proxyB){var fixtureA=proxyA.fixture;var fixtureB=proxyB.fixture;var indexA=proxyA.childIndex;var indexB=proxyB.childIndex;var bodyA=fixtureA.getBody();var bodyB=fixtureB.getBody();if(bodyA==bodyB){return}var edge=bodyB.getContactList();while(edge){if(edge.other==bodyA){var fA=edge.contact.getFixtureA();var fB=edge.contact.getFixtureB();var iA=edge.contact.getChildIndexA();var iB=edge.contact.getChildIndexB();if(fA==fixtureA&&fB==fixtureB&&iA==indexA&&iB==indexB){return}if(fA==fixtureB&&fB==fixtureA&&iA==indexB&&iB==indexA){return}}edge=edge.next}if(bodyB.shouldCollide(bodyA)==false){return}if(fixtureB.shouldCollide(fixtureA)==false){return}var contact=Contact.create(fixtureA,indexA,fixtureB,indexB);if(contact==null){return}contact.m_prev=null;if(this.m_contactList!=null){contact.m_next=this.m_contactList;this.m_contactList.m_prev=contact}this.m_contactList=contact;++this.m_contactCount};World2.prototype.updateContacts=function(){var c2;var next_c=this.m_contactList;while(c2=next_c){next_c=c2.getNext();var fixtureA=c2.getFixtureA();var fixtureB=c2.getFixtureB();var indexA=c2.getChildIndexA();var indexB=c2.getChildIndexB();var bodyA=fixtureA.getBody();var bodyB=fixtureB.getBody();if(c2.m_filterFlag){if(bodyB.shouldCollide(bodyA)==false){this.destroyContact(c2);continue}if(fixtureB.shouldCollide(fixtureA)==false){this.destroyContact(c2);continue}c2.m_filterFlag=false}var activeA=bodyA.isAwake()&&!bodyA.isStatic();var activeB=bodyB.isAwake()&&!bodyB.isStatic();if(activeA==false&&activeB==false){continue}var proxyIdA=fixtureA.m_proxies[indexA].proxyId;var proxyIdB=fixtureB.m_proxies[indexB].proxyId;var overlap=this.m_broadPhase.testOverlap(proxyIdA,proxyIdB);if(overlap==false){this.destroyContact(c2);continue}c2.update(this)}};World2.prototype.destroyContact=function(contact){if(contact.m_prev){contact.m_prev.m_next=contact.m_next}if(contact.m_next){contact.m_next.m_prev=contact.m_prev}if(contact==this.m_contactList){this.m_contactList=contact.m_next}Contact.destroy(contact,this);--this.m_contactCount};World2.prototype.on=function(name,listener){if(typeof name!=="string"||typeof listener!=="function"){return this}if(!this._listeners){this._listeners={}}if(!this._listeners[name]){this._listeners[name]=[]}this._listeners[name].push(listener);return this};World2.prototype.off=function(name,listener){if(typeof name!=="string"||typeof listener!=="function"){return this}var listeners=this._listeners&&this._listeners[name];if(!listeners||!listeners.length){return this}var index=listeners.indexOf(listener);if(index>=0){listeners.splice(index,1)}return this};World2.prototype.publish=function(name,arg1,arg2,arg3){var listeners=this._listeners&&this._listeners[name];if(!listeners||!listeners.length){return 0}for(var l=0;l0){output2.normal=Rot.mulVec2(xf2.q,normal3).neg()}else{output2.normal=Rot.mulVec2(xf2.q,normal3)}return true};EdgeShape2.prototype.computeAABB=function(aabb,xf2,childIndex){transformVec2(v1$2,xf2,this.m_vertex1);transformVec2(v2$1,xf2,this.m_vertex2);AABB.combinePoints(aabb,v1$2,v2$1);AABB.extend(aabb,this.m_radius)};EdgeShape2.prototype.computeMass=function(massData,density){massData.mass=0;combine2Vec2(massData.center,.5,this.m_vertex1,.5,this.m_vertex2);massData.I=0};EdgeShape2.prototype.computeDistanceProxy=function(proxy){proxy.m_vertices[0]=this.m_vertex1;proxy.m_vertices[1]=this.m_vertex2;proxy.m_vertices.length=2;proxy.m_count=2;proxy.m_radius=this.m_radius};EdgeShape2.TYPE="edge";return EdgeShape2}(Shape);var Edge=EdgeShape;var v1$1=vec2(0,0);var v2=vec2(0,0);var ChainShape=function(_super){__extends$a(ChainShape2,_super);function ChainShape2(vertices,loop){var _this=this;if(!(_this instanceof ChainShape2)){return new ChainShape2(vertices,loop)}_this=_super.call(this)||this;_this.m_type=ChainShape2.TYPE;_this.m_radius=SettingsInternal.polygonRadius;_this.m_vertices=[];_this.m_count=0;_this.m_prevVertex=null;_this.m_nextVertex=null;_this.m_hasPrevVertex=false;_this.m_hasNextVertex=false;_this.m_isLoop=!!loop;if(vertices&&vertices.length){if(loop){_this._createLoop(vertices)}else{_this._createChain(vertices)}}return _this}ChainShape2.prototype._serialize=function(){var data={type:this.m_type,vertices:this.m_vertices,isLoop:this.m_isLoop,hasPrevVertex:this.m_hasPrevVertex,hasNextVertex:this.m_hasNextVertex,prevVertex:null,nextVertex:null};if(this.m_prevVertex){data.prevVertex=this.m_prevVertex}if(this.m_nextVertex){data.nextVertex=this.m_nextVertex}return data};ChainShape2._deserialize=function(data,fixture,restore){var vertices=[];if(data.vertices){for(var i=0;i0){edge.m_vertex0=this.m_vertices[childIndex-1];edge.m_hasVertex0=true}else{edge.m_vertex0=this.m_prevVertex;edge.m_hasVertex0=this.m_hasPrevVertex}if(childIndexx0||x2===x0&&ps[i].yr.lengthSquared()){ie2=j}}++m;ih=ie2;if(ie2===i0){break}}if(m<3){this._setAsBox(1,1);return}this.m_count=m;this.m_vertices=[];for(var i=0;i0){return false}}return true};PolygonShape2.prototype.rayCast=function(output2,input2,xf2,childIndex){var p1=Rot.mulTVec2(xf2.q,Vec2.sub(input2.p1,xf2.p));var p2=Rot.mulTVec2(xf2.q,Vec2.sub(input2.p2,xf2.p));var d2=Vec2.sub(p2,p1);var lower=0;var upper=input2.maxFraction;var index=-1;for(var i=0;i0&&numerator=0){output2.fraction=lower;output2.normal=Rot.mulVec2(xf2.q,this.m_normals[index]);return true}return false};PolygonShape2.prototype.computeAABB=function(aabb,xf2,childIndex){var minX=Infinity;var minY=Infinity;var maxX=-Infinity;var maxY=-Infinity;for(var i=0;i0){this.m_length=+def.length}else if(def.length<0);else if(def.anchorA||def.anchorA||def.anchorA||def.anchorA){this.m_length=Vec2.distance(this.m_bodyA.getWorldPoint(this.m_localAnchorA),this.m_bodyB.getWorldPoint(this.m_localAnchorB))}if(Number.isFinite(def.frequencyHz)){this.m_frequencyHz=def.frequencyHz}if(Number.isFinite(def.dampingRatio)){this.m_dampingRatio=def.dampingRatio}};DistanceJoint2.prototype.getLocalAnchorA=function(){return this.m_localAnchorA};DistanceJoint2.prototype.getLocalAnchorB=function(){return this.m_localAnchorB};DistanceJoint2.prototype.setLength=function(length2){this.m_length=length2};DistanceJoint2.prototype.getLength=function(){return this.m_length};DistanceJoint2.prototype.setFrequency=function(hz){this.m_frequencyHz=hz};DistanceJoint2.prototype.getFrequency=function(){return this.m_frequencyHz};DistanceJoint2.prototype.setDampingRatio=function(ratio){this.m_dampingRatio=ratio};DistanceJoint2.prototype.getDampingRatio=function(){return this.m_dampingRatio};DistanceJoint2.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)};DistanceJoint2.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)};DistanceJoint2.prototype.getReactionForce=function(inv_dt){return Vec2.mulNumVec2(this.m_impulse,this.m_u).mul(inv_dt)};DistanceJoint2.prototype.getReactionTorque=function(inv_dt){return 0};DistanceJoint2.prototype.initVelocityConstraints=function(step){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter;this.m_localCenterB=this.m_bodyB.m_sweep.localCenter;this.m_invMassA=this.m_bodyA.m_invMass;this.m_invMassB=this.m_bodyB.m_invMass;this.m_invIA=this.m_bodyA.m_invI;this.m_invIB=this.m_bodyB.m_invI;var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var qA=Rot.neo(aA);var qB=Rot.neo(aB);this.m_rA=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));this.m_rB=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));this.m_u=Vec2.sub(Vec2.add(cB2,this.m_rB),Vec2.add(cA2,this.m_rA));var length2=this.m_u.length();if(length2>SettingsInternal.linearSlop){this.m_u.mul(1/length2)}else{this.m_u.setNum(0,0)}var crAu=Vec2.crossVec2Vec2(this.m_rA,this.m_u);var crBu=Vec2.crossVec2Vec2(this.m_rB,this.m_u);var invMass=this.m_invMassA+this.m_invIA*crAu*crAu+this.m_invMassB+this.m_invIB*crBu*crBu;this.m_mass=invMass!=0?1/invMass:0;if(this.m_frequencyHz>0){var C=length2-this.m_length;var omega=2*math_PI$4*this.m_frequencyHz;var d2=2*this.m_mass*this.m_dampingRatio*omega;var k=this.m_mass*omega*omega;var h=step.dt;this.m_gamma=h*(d2+h*k);this.m_gamma=this.m_gamma!=0?1/this.m_gamma:0;this.m_bias=C*h*k*this.m_gamma;invMass+=this.m_gamma;this.m_mass=invMass!=0?1/invMass:0}else{this.m_gamma=0;this.m_bias=0}if(step.warmStarting){this.m_impulse*=step.dtRatio;var P3=Vec2.mulNumVec2(this.m_impulse,this.m_u);vA2.subMul(this.m_invMassA,P3);wA-=this.m_invIA*Vec2.crossVec2Vec2(this.m_rA,P3);vB2.addMul(this.m_invMassB,P3);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,P3)}else{this.m_impulse=0}this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB};DistanceJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var vpA=Vec2.add(vA2,Vec2.crossNumVec2(wA,this.m_rA));var vpB=Vec2.add(vB2,Vec2.crossNumVec2(wB,this.m_rB));var Cdot=Vec2.dot(this.m_u,vpB)-Vec2.dot(this.m_u,vpA);var impulse=-this.m_mass*(Cdot+this.m_bias+this.m_gamma*this.m_impulse);this.m_impulse+=impulse;var P3=Vec2.mulNumVec2(impulse,this.m_u);vA2.subMul(this.m_invMassA,P3);wA-=this.m_invIA*Vec2.crossVec2Vec2(this.m_rA,P3);vB2.addMul(this.m_invMassB,P3);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,P3);this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB};DistanceJoint2.prototype.solvePositionConstraints=function(step){if(this.m_frequencyHz>0){return true}var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var rA2=Rot.mulSub(qA,this.m_localAnchorA,this.m_localCenterA);var rB2=Rot.mulSub(qB,this.m_localAnchorB,this.m_localCenterB);var u=Vec2.sub(Vec2.add(cB2,rB2),Vec2.add(cA2,rA2));var length2=u.normalize();var C=clamp$1(length2-this.m_length,-SettingsInternal.maxLinearCorrection,SettingsInternal.maxLinearCorrection);var impulse=-this.m_mass*C;var P3=Vec2.mulNumVec2(impulse,u);cA2.subMul(this.m_invMassA,P3);aA-=this.m_invIA*Vec2.crossVec2Vec2(rA2,P3);cB2.addMul(this.m_invMassB,P3);aB+=this.m_invIB*Vec2.crossVec2Vec2(rB2,P3);this.m_bodyA.c_position.c.setVec2(cA2);this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c.setVec2(cB2);this.m_bodyB.c_position.a=aB;return math_abs$6(C)0){this.m_angularMass=1/this.m_angularMass}if(step.warmStarting){this.m_linearImpulse.mul(step.dtRatio);this.m_angularImpulse*=step.dtRatio;var P3=Vec2.neo(this.m_linearImpulse.x,this.m_linearImpulse.y);vA2.subMul(mA,P3);wA-=iA*(Vec2.crossVec2Vec2(this.m_rA,P3)+this.m_angularImpulse);vB2.addMul(mB,P3);wB+=iB*(Vec2.crossVec2Vec2(this.m_rB,P3)+this.m_angularImpulse)}else{this.m_linearImpulse.setZero();this.m_angularImpulse=0}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};FrictionJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var h=step.dt;{var Cdot=wB-wA;var impulse=-this.m_angularMass*Cdot;var oldImpulse=this.m_angularImpulse;var maxImpulse=h*this.m_maxTorque;this.m_angularImpulse=clamp$1(this.m_angularImpulse+impulse,-maxImpulse,maxImpulse);impulse=this.m_angularImpulse-oldImpulse;wA-=iA*impulse;wB+=iB*impulse}{var Cdot=Vec2.sub(Vec2.add(vB2,Vec2.crossNumVec2(wB,this.m_rB)),Vec2.add(vA2,Vec2.crossNumVec2(wA,this.m_rA)));var impulse=Vec2.neg(Mat22.mulVec2(this.m_linearMass,Cdot));var oldImpulse=this.m_linearImpulse;this.m_linearImpulse.add(impulse);var maxImpulse=h*this.m_maxForce;if(this.m_linearImpulse.lengthSquared()>maxImpulse*maxImpulse){this.m_linearImpulse.normalize();this.m_linearImpulse.mul(maxImpulse)}impulse=Vec2.sub(this.m_linearImpulse,oldImpulse);vA2.subMul(mA,impulse);wA-=iA*Vec2.crossVec2Vec2(this.m_rA,impulse);vB2.addMul(mB,impulse);wB+=iB*Vec2.crossVec2Vec2(this.m_rB,impulse)}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};FrictionJoint2.prototype.solvePositionConstraints=function(step){return true};FrictionJoint2.TYPE="friction-joint";return FrictionJoint2}(Joint);var Mat33=function(){function Mat332(a2,b2,c2){if(typeof a2==="object"&&a2!==null){this.ex=Vec3.clone(a2);this.ey=Vec3.clone(b2);this.ez=Vec3.clone(c2)}else{this.ex=Vec3.zero();this.ey=Vec3.zero();this.ez=Vec3.zero()}}Mat332.prototype.toString=function(){return JSON.stringify(this)};Mat332.isValid=function(obj){if(obj===null||typeof obj==="undefined"){return false}return Vec3.isValid(obj.ex)&&Vec3.isValid(obj.ey)&&Vec3.isValid(obj.ez)};Mat332.assert=function(o){};Mat332.prototype.setZero=function(){this.ex.setZero();this.ey.setZero();this.ez.setZero();return this};Mat332.prototype.solve33=function(v3){var cross_x=this.ey.y*this.ez.z-this.ey.z*this.ez.y;var cross_y=this.ey.z*this.ez.x-this.ey.x*this.ez.z;var cross_z=this.ey.x*this.ez.y-this.ey.y*this.ez.x;var det=this.ex.x*cross_x+this.ex.y*cross_y+this.ex.z*cross_z;if(det!==0){det=1/det}var r=new Vec3;cross_x=this.ey.y*this.ez.z-this.ey.z*this.ez.y;cross_y=this.ey.z*this.ez.x-this.ey.x*this.ez.z;cross_z=this.ey.x*this.ez.y-this.ey.y*this.ez.x;r.x=det*(v3.x*cross_x+v3.y*cross_y+v3.z*cross_z);cross_x=v3.y*this.ez.z-v3.z*this.ez.y;cross_y=v3.z*this.ez.x-v3.x*this.ez.z;cross_z=v3.x*this.ez.y-v3.y*this.ez.x;r.y=det*(this.ex.x*cross_x+this.ex.y*cross_y+this.ex.z*cross_z);cross_x=this.ey.y*v3.z-this.ey.z*v3.y;cross_y=this.ey.z*v3.x-this.ey.x*v3.z;cross_z=this.ey.x*v3.y-this.ey.y*v3.x;r.z=det*(this.ex.x*cross_x+this.ex.y*cross_y+this.ex.z*cross_z);return r};Mat332.prototype.solve22=function(v3){var a11=this.ex.x;var a12=this.ey.x;var a21=this.ex.y;var a22=this.ey.y;var det=a11*a22-a12*a21;if(det!==0){det=1/det}var r=Vec2.zero();r.x=det*(a22*v3.x-a12*v3.y);r.y=det*(a11*v3.y-a21*v3.x);return r};Mat332.prototype.getInverse22=function(M){var a2=this.ex.x;var b2=this.ey.x;var c2=this.ex.y;var d2=this.ey.y;var det=a2*d2-b2*c2;if(det!==0){det=1/det}M.ex.x=det*d2;M.ey.x=-det*b2;M.ex.z=0;M.ex.y=-det*c2;M.ey.y=det*a2;M.ey.z=0;M.ez.x=0;M.ez.y=0;M.ez.z=0};Mat332.prototype.getSymInverse33=function(M){var det=Vec3.dot(this.ex,Vec3.cross(this.ey,this.ez));if(det!==0){det=1/det}var a11=this.ex.x;var a12=this.ey.x;var a13=this.ez.x;var a22=this.ey.y;var a23=this.ez.y;var a33=this.ez.z;M.ex.x=det*(a22*a33-a23*a23);M.ex.y=det*(a13*a23-a12*a33);M.ex.z=det*(a12*a23-a13*a22);M.ey.x=M.ex.y;M.ey.y=det*(a11*a33-a13*a13);M.ey.z=det*(a13*a12-a11*a23);M.ez.x=M.ex.z;M.ez.y=M.ey.z;M.ez.z=det*(a11*a22-a12*a12)};Mat332.mul=function(a2,b2){if(b2&&"z"in b2&&"y"in b2&&"x"in b2){var x2=a2.ex.x*b2.x+a2.ey.x*b2.y+a2.ez.x*b2.z;var y=a2.ex.y*b2.x+a2.ey.y*b2.y+a2.ez.y*b2.z;var z=a2.ex.z*b2.x+a2.ey.z*b2.y+a2.ez.z*b2.z;return new Vec3(x2,y,z)}else if(b2&&"y"in b2&&"x"in b2){var x2=a2.ex.x*b2.x+a2.ey.x*b2.y;var y=a2.ex.y*b2.x+a2.ey.y*b2.y;return Vec2.neo(x2,y)}};Mat332.mulVec3=function(a2,b2){var x2=a2.ex.x*b2.x+a2.ey.x*b2.y+a2.ez.x*b2.z;var y=a2.ex.y*b2.x+a2.ey.y*b2.y+a2.ez.y*b2.z;var z=a2.ex.z*b2.x+a2.ey.z*b2.y+a2.ez.z*b2.z;return new Vec3(x2,y,z)};Mat332.mulVec2=function(a2,b2){var x2=a2.ex.x*b2.x+a2.ey.x*b2.y;var y=a2.ex.y*b2.x+a2.ey.y*b2.y;return Vec2.neo(x2,y)};Mat332.add=function(a2,b2){return new Mat332(Vec3.add(a2.ex,b2.ex),Vec3.add(a2.ey,b2.ey),Vec3.add(a2.ez,b2.ez))};return Mat332}();var math_abs$5=Math.abs;var LimitState$2;(function(LimitState2){LimitState2[LimitState2["inactiveLimit"]=0]="inactiveLimit";LimitState2[LimitState2["atLowerLimit"]=1]="atLowerLimit";LimitState2[LimitState2["atUpperLimit"]=2]="atUpperLimit";LimitState2[LimitState2["equalLimits"]=3]="equalLimits"})(LimitState$2||(LimitState$2={}));var DEFAULTS$8={lowerAngle:0,upperAngle:0,maxMotorTorque:0,motorSpeed:0,enableLimit:false,enableMotor:false};var RevoluteJoint=function(_super){__extends$a(RevoluteJoint2,_super);function RevoluteJoint2(def,bodyA,bodyB,anchor){var _this=this;var _a2,_b,_c,_d,_e,_f;if(!(_this instanceof RevoluteJoint2)){return new RevoluteJoint2(def,bodyA,bodyB,anchor)}def=def!==null&&def!==void 0?def:{};_this=_super.call(this,def,bodyA,bodyB)||this;bodyA=_this.m_bodyA;bodyB=_this.m_bodyB;_this.m_mass=new Mat33;_this.m_limitState=LimitState$2.inactiveLimit;_this.m_type=RevoluteJoint2.TYPE;if(Vec2.isValid(anchor)){_this.m_localAnchorA=bodyA.getLocalPoint(anchor)}else if(Vec2.isValid(def.localAnchorA)){_this.m_localAnchorA=Vec2.clone(def.localAnchorA)}else{_this.m_localAnchorA=Vec2.zero()}if(Vec2.isValid(anchor)){_this.m_localAnchorB=bodyB.getLocalPoint(anchor)}else if(Vec2.isValid(def.localAnchorB)){_this.m_localAnchorB=Vec2.clone(def.localAnchorB)}else{_this.m_localAnchorB=Vec2.zero()}if(Number.isFinite(def.referenceAngle)){_this.m_referenceAngle=def.referenceAngle}else{_this.m_referenceAngle=bodyB.getAngle()-bodyA.getAngle()}_this.m_impulse=new Vec3;_this.m_motorImpulse=0;_this.m_lowerAngle=(_a2=def.lowerAngle)!==null&&_a2!==void 0?_a2:DEFAULTS$8.lowerAngle;_this.m_upperAngle=(_b=def.upperAngle)!==null&&_b!==void 0?_b:DEFAULTS$8.upperAngle;_this.m_maxMotorTorque=(_c=def.maxMotorTorque)!==null&&_c!==void 0?_c:DEFAULTS$8.maxMotorTorque;_this.m_motorSpeed=(_d=def.motorSpeed)!==null&&_d!==void 0?_d:DEFAULTS$8.motorSpeed;_this.m_enableLimit=(_e=def.enableLimit)!==null&&_e!==void 0?_e:DEFAULTS$8.enableLimit;_this.m_enableMotor=(_f=def.enableMotor)!==null&&_f!==void 0?_f:DEFAULTS$8.enableMotor;return _this}RevoluteJoint2.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,lowerAngle:this.m_lowerAngle,upperAngle:this.m_upperAngle,maxMotorTorque:this.m_maxMotorTorque,motorSpeed:this.m_motorSpeed,enableLimit:this.m_enableLimit,enableMotor:this.m_enableMotor,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,referenceAngle:this.m_referenceAngle}};RevoluteJoint2._deserialize=function(data,world,restore){data=__assign$1({},data);data.bodyA=restore(Body,data.bodyA,world);data.bodyB=restore(Body,data.bodyB,world);var joint=new RevoluteJoint2(data);return joint};RevoluteJoint2.prototype._reset=function(def){if(def.anchorA){this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA))}else if(def.localAnchorA){this.m_localAnchorA.setVec2(def.localAnchorA)}if(def.anchorB){this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB))}else if(def.localAnchorB){this.m_localAnchorB.setVec2(def.localAnchorB)}if(Number.isFinite(def.referenceAngle)){this.m_referenceAngle=def.referenceAngle}if(def.enableLimit!==void 0){this.m_enableLimit=def.enableLimit}if(Number.isFinite(def.lowerAngle)){this.m_lowerAngle=def.lowerAngle}if(Number.isFinite(def.upperAngle)){this.m_upperAngle=def.upperAngle}if(Number.isFinite(def.maxMotorTorque)){this.m_maxMotorTorque=def.maxMotorTorque}if(Number.isFinite(def.motorSpeed)){this.m_motorSpeed=def.motorSpeed}if(def.enableMotor!==void 0){this.m_enableMotor=def.enableMotor}};RevoluteJoint2.prototype.getLocalAnchorA=function(){return this.m_localAnchorA};RevoluteJoint2.prototype.getLocalAnchorB=function(){return this.m_localAnchorB};RevoluteJoint2.prototype.getReferenceAngle=function(){return this.m_referenceAngle};RevoluteJoint2.prototype.getJointAngle=function(){var bA=this.m_bodyA;var bB=this.m_bodyB;return bB.m_sweep.a-bA.m_sweep.a-this.m_referenceAngle};RevoluteJoint2.prototype.getJointSpeed=function(){var bA=this.m_bodyA;var bB=this.m_bodyB;return bB.m_angularVelocity-bA.m_angularVelocity};RevoluteJoint2.prototype.isMotorEnabled=function(){return this.m_enableMotor};RevoluteJoint2.prototype.enableMotor=function(flag){if(flag==this.m_enableMotor)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_enableMotor=flag};RevoluteJoint2.prototype.getMotorTorque=function(inv_dt){return inv_dt*this.m_motorImpulse};RevoluteJoint2.prototype.setMotorSpeed=function(speed){if(speed==this.m_motorSpeed)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_motorSpeed=speed};RevoluteJoint2.prototype.getMotorSpeed=function(){return this.m_motorSpeed};RevoluteJoint2.prototype.setMaxMotorTorque=function(torque){if(torque==this.m_maxMotorTorque)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_maxMotorTorque=torque};RevoluteJoint2.prototype.getMaxMotorTorque=function(){return this.m_maxMotorTorque};RevoluteJoint2.prototype.isLimitEnabled=function(){return this.m_enableLimit};RevoluteJoint2.prototype.enableLimit=function(flag){if(flag!=this.m_enableLimit){this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_enableLimit=flag;this.m_impulse.z=0}};RevoluteJoint2.prototype.getLowerLimit=function(){return this.m_lowerAngle};RevoluteJoint2.prototype.getUpperLimit=function(){return this.m_upperAngle};RevoluteJoint2.prototype.setLimits=function(lower,upper){if(lower!=this.m_lowerAngle||upper!=this.m_upperAngle){this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_impulse.z=0;this.m_lowerAngle=lower;this.m_upperAngle=upper}};RevoluteJoint2.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)};RevoluteJoint2.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)};RevoluteJoint2.prototype.getReactionForce=function(inv_dt){return Vec2.neo(this.m_impulse.x,this.m_impulse.y).mul(inv_dt)};RevoluteJoint2.prototype.getReactionTorque=function(inv_dt){return inv_dt*this.m_impulse.z};RevoluteJoint2.prototype.initVelocityConstraints=function(step){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter;this.m_localCenterB=this.m_bodyB.m_sweep.localCenter;this.m_invMassA=this.m_bodyA.m_invMass;this.m_invMassB=this.m_bodyB.m_invMass;this.m_invIA=this.m_bodyA.m_invI;this.m_invIB=this.m_bodyB.m_invI;var aA=this.m_bodyA.c_position.a;var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var aB=this.m_bodyB.c_position.a;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var qA=Rot.neo(aA);var qB=Rot.neo(aB);this.m_rA=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));this.m_rB=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var fixedRotation=iA+iB===0;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;this.m_mass.ey.x=-this.m_rA.y*this.m_rA.x*iA-this.m_rB.y*this.m_rB.x*iB;this.m_mass.ez.x=-this.m_rA.y*iA-this.m_rB.y*iB;this.m_mass.ex.y=this.m_mass.ey.x;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;this.m_mass.ez.y=this.m_rA.x*iA+this.m_rB.x*iB;this.m_mass.ex.z=this.m_mass.ez.x;this.m_mass.ey.z=this.m_mass.ez.y;this.m_mass.ez.z=iA+iB;this.m_motorMass=iA+iB;if(this.m_motorMass>0){this.m_motorMass=1/this.m_motorMass}if(this.m_enableMotor==false||fixedRotation){this.m_motorImpulse=0}if(this.m_enableLimit&&fixedRotation==false){var jointAngle=aB-aA-this.m_referenceAngle;if(math_abs$5(this.m_upperAngle-this.m_lowerAngle)<2*SettingsInternal.angularSlop){this.m_limitState=LimitState$2.equalLimits}else if(jointAngle<=this.m_lowerAngle){if(this.m_limitState!=LimitState$2.atLowerLimit){this.m_impulse.z=0}this.m_limitState=LimitState$2.atLowerLimit}else if(jointAngle>=this.m_upperAngle){if(this.m_limitState!=LimitState$2.atUpperLimit){this.m_impulse.z=0}this.m_limitState=LimitState$2.atUpperLimit}else{this.m_limitState=LimitState$2.inactiveLimit;this.m_impulse.z=0}}else{this.m_limitState=LimitState$2.inactiveLimit}if(step.warmStarting){this.m_impulse.mul(step.dtRatio);this.m_motorImpulse*=step.dtRatio;var P3=Vec2.neo(this.m_impulse.x,this.m_impulse.y);vA2.subMul(mA,P3);wA-=iA*(Vec2.crossVec2Vec2(this.m_rA,P3)+this.m_motorImpulse+this.m_impulse.z);vB2.addMul(mB,P3);wB+=iB*(Vec2.crossVec2Vec2(this.m_rB,P3)+this.m_motorImpulse+this.m_impulse.z)}else{this.m_impulse.setZero();this.m_motorImpulse=0}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};RevoluteJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var fixedRotation=iA+iB===0;if(this.m_enableMotor&&this.m_limitState!=LimitState$2.equalLimits&&fixedRotation==false){var Cdot=wB-wA-this.m_motorSpeed;var impulse=-this.m_motorMass*Cdot;var oldImpulse=this.m_motorImpulse;var maxImpulse=step.dt*this.m_maxMotorTorque;this.m_motorImpulse=clamp$1(this.m_motorImpulse+impulse,-maxImpulse,maxImpulse);impulse=this.m_motorImpulse-oldImpulse;wA-=iA*impulse;wB+=iB*impulse}if(this.m_enableLimit&&this.m_limitState!=LimitState$2.inactiveLimit&&fixedRotation==false){var Cdot1=Vec2.zero();Cdot1.addCombine(1,vB2,1,Vec2.crossNumVec2(wB,this.m_rB));Cdot1.subCombine(1,vA2,1,Vec2.crossNumVec2(wA,this.m_rA));var Cdot2=wB-wA;var Cdot=new Vec3(Cdot1.x,Cdot1.y,Cdot2);var impulse=Vec3.neg(this.m_mass.solve33(Cdot));if(this.m_limitState==LimitState$2.equalLimits){this.m_impulse.add(impulse)}else if(this.m_limitState==LimitState$2.atLowerLimit){var newImpulse=this.m_impulse.z+impulse.z;if(newImpulse<0){var rhs=Vec2.combine(-1,Cdot1,this.m_impulse.z,Vec2.neo(this.m_mass.ez.x,this.m_mass.ez.y));var reduced=this.m_mass.solve22(rhs);impulse.x=reduced.x;impulse.y=reduced.y;impulse.z=-this.m_impulse.z;this.m_impulse.x+=reduced.x;this.m_impulse.y+=reduced.y;this.m_impulse.z=0}else{this.m_impulse.add(impulse)}}else if(this.m_limitState==LimitState$2.atUpperLimit){var newImpulse=this.m_impulse.z+impulse.z;if(newImpulse>0){var rhs=Vec2.combine(-1,Cdot1,this.m_impulse.z,Vec2.neo(this.m_mass.ez.x,this.m_mass.ez.y));var reduced=this.m_mass.solve22(rhs);impulse.x=reduced.x;impulse.y=reduced.y;impulse.z=-this.m_impulse.z;this.m_impulse.x+=reduced.x;this.m_impulse.y+=reduced.y;this.m_impulse.z=0}else{this.m_impulse.add(impulse)}}var P3=Vec2.neo(impulse.x,impulse.y);vA2.subMul(mA,P3);wA-=iA*(Vec2.crossVec2Vec2(this.m_rA,P3)+impulse.z);vB2.addMul(mB,P3);wB+=iB*(Vec2.crossVec2Vec2(this.m_rB,P3)+impulse.z)}else{var Cdot=Vec2.zero();Cdot.addCombine(1,vB2,1,Vec2.crossNumVec2(wB,this.m_rB));Cdot.subCombine(1,vA2,1,Vec2.crossNumVec2(wA,this.m_rA));var impulse=this.m_mass.solve22(Vec2.neg(Cdot));this.m_impulse.x+=impulse.x;this.m_impulse.y+=impulse.y;vA2.subMul(mA,impulse);wA-=iA*Vec2.crossVec2Vec2(this.m_rA,impulse);vB2.addMul(mB,impulse);wB+=iB*Vec2.crossVec2Vec2(this.m_rB,impulse)}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};RevoluteJoint2.prototype.solvePositionConstraints=function(step){var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var angularError=0;var positionError=0;var fixedRotation=this.m_invIA+this.m_invIB==0;if(this.m_enableLimit&&this.m_limitState!=LimitState$2.inactiveLimit&&fixedRotation==false){var angle=aB-aA-this.m_referenceAngle;var limitImpulse=0;if(this.m_limitState==LimitState$2.equalLimits){var C=clamp$1(angle-this.m_lowerAngle,-SettingsInternal.maxAngularCorrection,SettingsInternal.maxAngularCorrection);limitImpulse=-this.m_motorMass*C;angularError=math_abs$5(C)}else if(this.m_limitState==LimitState$2.atLowerLimit){var C=angle-this.m_lowerAngle;angularError=-C;C=clamp$1(C+SettingsInternal.angularSlop,-SettingsInternal.maxAngularCorrection,0);limitImpulse=-this.m_motorMass*C}else if(this.m_limitState==LimitState$2.atUpperLimit){var C=angle-this.m_upperAngle;angularError=C;C=clamp$1(C-SettingsInternal.angularSlop,0,SettingsInternal.maxAngularCorrection);limitImpulse=-this.m_motorMass*C}aA-=this.m_invIA*limitImpulse;aB+=this.m_invIB*limitImpulse}{qA.setAngle(aA);qB.setAngle(aB);var rA2=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));var rB2=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var C=Vec2.zero();C.addCombine(1,cB2,1,rB2);C.subCombine(1,cA2,1,rA2);positionError=C.length();var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var K=new Mat22;K.ex.x=mA+mB+iA*rA2.y*rA2.y+iB*rB2.y*rB2.y;K.ex.y=-iA*rA2.x*rA2.y-iB*rB2.x*rB2.y;K.ey.x=K.ex.y;K.ey.y=mA+mB+iA*rA2.x*rA2.x+iB*rB2.x*rB2.x;var impulse=Vec2.neg(K.solve(C));cA2.subMul(mA,impulse);aA-=iA*Vec2.crossVec2Vec2(rA2,impulse);cB2.addMul(mB,impulse);aB+=iB*Vec2.crossVec2Vec2(rB2,impulse)}this.m_bodyA.c_position.c.setVec2(cA2);this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c.setVec2(cB2);this.m_bodyB.c_position.a=aB;return positionError<=SettingsInternal.linearSlop&&angularError<=SettingsInternal.angularSlop};RevoluteJoint2.TYPE="revolute-joint";return RevoluteJoint2}(Joint);var math_abs$4=Math.abs;var math_max$1=Math.max;var math_min$3=Math.min;var LimitState$1;(function(LimitState2){LimitState2[LimitState2["inactiveLimit"]=0]="inactiveLimit";LimitState2[LimitState2["atLowerLimit"]=1]="atLowerLimit";LimitState2[LimitState2["atUpperLimit"]=2]="atUpperLimit";LimitState2[LimitState2["equalLimits"]=3]="equalLimits"})(LimitState$1||(LimitState$1={}));var DEFAULTS$7={enableLimit:false,lowerTranslation:0,upperTranslation:0,enableMotor:false,maxMotorForce:0,motorSpeed:0};var PrismaticJoint=function(_super){__extends$a(PrismaticJoint2,_super);function PrismaticJoint2(def,bodyA,bodyB,anchor,axis){var _this=this;if(!(_this instanceof PrismaticJoint2)){return new PrismaticJoint2(def,bodyA,bodyB,anchor,axis)}def=options(def,DEFAULTS$7);_this=_super.call(this,def,bodyA,bodyB)||this;bodyA=_this.m_bodyA;bodyB=_this.m_bodyB;_this.m_type=PrismaticJoint2.TYPE;_this.m_localAnchorA=Vec2.clone(anchor?bodyA.getLocalPoint(anchor):def.localAnchorA||Vec2.zero());_this.m_localAnchorB=Vec2.clone(anchor?bodyB.getLocalPoint(anchor):def.localAnchorB||Vec2.zero());_this.m_localXAxisA=Vec2.clone(axis?bodyA.getLocalVector(axis):def.localAxisA||Vec2.neo(1,0));_this.m_localXAxisA.normalize();_this.m_localYAxisA=Vec2.crossNumVec2(1,_this.m_localXAxisA);_this.m_referenceAngle=Number.isFinite(def.referenceAngle)?def.referenceAngle:bodyB.getAngle()-bodyA.getAngle();_this.m_impulse=new Vec3;_this.m_motorMass=0;_this.m_motorImpulse=0;_this.m_lowerTranslation=def.lowerTranslation;_this.m_upperTranslation=def.upperTranslation;_this.m_maxMotorForce=def.maxMotorForce;_this.m_motorSpeed=def.motorSpeed;_this.m_enableLimit=def.enableLimit;_this.m_enableMotor=def.enableMotor;_this.m_limitState=LimitState$1.inactiveLimit;_this.m_axis=Vec2.zero();_this.m_perp=Vec2.zero();_this.m_K=new Mat33;return _this}PrismaticJoint2.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,lowerTranslation:this.m_lowerTranslation,upperTranslation:this.m_upperTranslation,maxMotorForce:this.m_maxMotorForce,motorSpeed:this.m_motorSpeed,enableLimit:this.m_enableLimit,enableMotor:this.m_enableMotor,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,localAxisA:this.m_localXAxisA,referenceAngle:this.m_referenceAngle}};PrismaticJoint2._deserialize=function(data,world,restore){data=__assign$1({},data);data.bodyA=restore(Body,data.bodyA,world);data.bodyB=restore(Body,data.bodyB,world);data.localAxisA=Vec2.clone(data.localAxisA);var joint=new PrismaticJoint2(data);return joint};PrismaticJoint2.prototype._reset=function(def){if(def.anchorA){this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA))}else if(def.localAnchorA){this.m_localAnchorA.setVec2(def.localAnchorA)}if(def.anchorB){this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB))}else if(def.localAnchorB){this.m_localAnchorB.setVec2(def.localAnchorB)}if(def.localAxisA){this.m_localXAxisA.setVec2(def.localAxisA);this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1,def.localAxisA))}if(Number.isFinite(def.referenceAngle)){this.m_referenceAngle=def.referenceAngle}if(typeof def.enableLimit!=="undefined"){this.m_enableLimit=!!def.enableLimit}if(Number.isFinite(def.lowerTranslation)){this.m_lowerTranslation=def.lowerTranslation}if(Number.isFinite(def.upperTranslation)){this.m_upperTranslation=def.upperTranslation}if(typeof def.enableMotor!=="undefined"){this.m_enableMotor=!!def.enableMotor}if(Number.isFinite(def.maxMotorForce)){this.m_maxMotorForce=def.maxMotorForce}if(Number.isFinite(def.motorSpeed)){this.m_motorSpeed=def.motorSpeed}};PrismaticJoint2.prototype.getLocalAnchorA=function(){return this.m_localAnchorA};PrismaticJoint2.prototype.getLocalAnchorB=function(){return this.m_localAnchorB};PrismaticJoint2.prototype.getLocalAxisA=function(){return this.m_localXAxisA};PrismaticJoint2.prototype.getReferenceAngle=function(){return this.m_referenceAngle};PrismaticJoint2.prototype.getJointTranslation=function(){var pA2=this.m_bodyA.getWorldPoint(this.m_localAnchorA);var pB2=this.m_bodyB.getWorldPoint(this.m_localAnchorB);var d2=Vec2.sub(pB2,pA2);var axis=this.m_bodyA.getWorldVector(this.m_localXAxisA);var translation2=Vec2.dot(d2,axis);return translation2};PrismaticJoint2.prototype.getJointSpeed=function(){var bA=this.m_bodyA;var bB=this.m_bodyB;var rA2=Rot.mulVec2(bA.m_xf.q,Vec2.sub(this.m_localAnchorA,bA.m_sweep.localCenter));var rB2=Rot.mulVec2(bB.m_xf.q,Vec2.sub(this.m_localAnchorB,bB.m_sweep.localCenter));var p1=Vec2.add(bA.m_sweep.c,rA2);var p2=Vec2.add(bB.m_sweep.c,rB2);var d2=Vec2.sub(p2,p1);var axis=Rot.mulVec2(bA.m_xf.q,this.m_localXAxisA);var vA2=bA.m_linearVelocity;var vB2=bB.m_linearVelocity;var wA=bA.m_angularVelocity;var wB=bB.m_angularVelocity;var speed=Vec2.dot(d2,Vec2.crossNumVec2(wA,axis))+Vec2.dot(axis,Vec2.sub(Vec2.addCrossNumVec2(vB2,wB,rB2),Vec2.addCrossNumVec2(vA2,wA,rA2)));return speed};PrismaticJoint2.prototype.isLimitEnabled=function(){return this.m_enableLimit};PrismaticJoint2.prototype.enableLimit=function(flag){if(flag!=this.m_enableLimit){this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_enableLimit=flag;this.m_impulse.z=0}};PrismaticJoint2.prototype.getLowerLimit=function(){return this.m_lowerTranslation};PrismaticJoint2.prototype.getUpperLimit=function(){return this.m_upperTranslation};PrismaticJoint2.prototype.setLimits=function(lower,upper){if(lower!=this.m_lowerTranslation||upper!=this.m_upperTranslation){this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_lowerTranslation=lower;this.m_upperTranslation=upper;this.m_impulse.z=0}};PrismaticJoint2.prototype.isMotorEnabled=function(){return this.m_enableMotor};PrismaticJoint2.prototype.enableMotor=function(flag){if(flag==this.m_enableMotor)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_enableMotor=flag};PrismaticJoint2.prototype.setMotorSpeed=function(speed){if(speed==this.m_motorSpeed)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_motorSpeed=speed};PrismaticJoint2.prototype.setMaxMotorForce=function(force){if(force==this.m_maxMotorForce)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_maxMotorForce=force};PrismaticJoint2.prototype.getMaxMotorForce=function(){return this.m_maxMotorForce};PrismaticJoint2.prototype.getMotorSpeed=function(){return this.m_motorSpeed};PrismaticJoint2.prototype.getMotorForce=function(inv_dt){return inv_dt*this.m_motorImpulse};PrismaticJoint2.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)};PrismaticJoint2.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)};PrismaticJoint2.prototype.getReactionForce=function(inv_dt){return Vec2.combine(this.m_impulse.x,this.m_perp,this.m_motorImpulse+this.m_impulse.z,this.m_axis).mul(inv_dt)};PrismaticJoint2.prototype.getReactionTorque=function(inv_dt){return inv_dt*this.m_impulse.y};PrismaticJoint2.prototype.initVelocityConstraints=function(step){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter;this.m_localCenterB=this.m_bodyB.m_sweep.localCenter;this.m_invMassA=this.m_bodyA.m_invMass;this.m_invMassB=this.m_bodyB.m_invMass;this.m_invIA=this.m_bodyA.m_invI;this.m_invIB=this.m_bodyB.m_invI;var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var rA2=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));var rB2=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var d2=Vec2.zero();d2.addCombine(1,cB2,1,rB2);d2.subCombine(1,cA2,1,rA2);var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;{this.m_axis=Rot.mulVec2(qA,this.m_localXAxisA);this.m_a1=Vec2.crossVec2Vec2(Vec2.add(d2,rA2),this.m_axis);this.m_a2=Vec2.crossVec2Vec2(rB2,this.m_axis);this.m_motorMass=mA+mB+iA*this.m_a1*this.m_a1+iB*this.m_a2*this.m_a2;if(this.m_motorMass>0){this.m_motorMass=1/this.m_motorMass}}{this.m_perp=Rot.mulVec2(qA,this.m_localYAxisA);this.m_s1=Vec2.crossVec2Vec2(Vec2.add(d2,rA2),this.m_perp);this.m_s2=Vec2.crossVec2Vec2(rB2,this.m_perp);Vec2.crossVec2Vec2(rA2,this.m_perp);var k11=mA+mB+iA*this.m_s1*this.m_s1+iB*this.m_s2*this.m_s2;var k12=iA*this.m_s1+iB*this.m_s2;var k13=iA*this.m_s1*this.m_a1+iB*this.m_s2*this.m_a2;var k22=iA+iB;if(k22==0){k22=1}var k23=iA*this.m_a1+iB*this.m_a2;var k33=mA+mB+iA*this.m_a1*this.m_a1+iB*this.m_a2*this.m_a2;this.m_K.ex.set(k11,k12,k13);this.m_K.ey.set(k12,k22,k23);this.m_K.ez.set(k13,k23,k33)}if(this.m_enableLimit){var jointTranslation=Vec2.dot(this.m_axis,d2);if(math_abs$4(this.m_upperTranslation-this.m_lowerTranslation)<2*SettingsInternal.linearSlop){this.m_limitState=LimitState$1.equalLimits}else if(jointTranslation<=this.m_lowerTranslation){if(this.m_limitState!=LimitState$1.atLowerLimit){this.m_limitState=LimitState$1.atLowerLimit;this.m_impulse.z=0}}else if(jointTranslation>=this.m_upperTranslation){if(this.m_limitState!=LimitState$1.atUpperLimit){this.m_limitState=LimitState$1.atUpperLimit;this.m_impulse.z=0}}else{this.m_limitState=LimitState$1.inactiveLimit;this.m_impulse.z=0}}else{this.m_limitState=LimitState$1.inactiveLimit;this.m_impulse.z=0}if(this.m_enableMotor==false){this.m_motorImpulse=0}if(step.warmStarting){this.m_impulse.mul(step.dtRatio);this.m_motorImpulse*=step.dtRatio;var P3=Vec2.combine(this.m_impulse.x,this.m_perp,this.m_motorImpulse+this.m_impulse.z,this.m_axis);var LA=this.m_impulse.x*this.m_s1+this.m_impulse.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_a1;var LB=this.m_impulse.x*this.m_s2+this.m_impulse.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_a2;vA2.subMul(mA,P3);wA-=iA*LA;vB2.addMul(mB,P3);wB+=iB*LB}else{this.m_impulse.setZero();this.m_motorImpulse=0}this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB};PrismaticJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;if(this.m_enableMotor&&this.m_limitState!=LimitState$1.equalLimits){var Cdot=Vec2.dot(this.m_axis,Vec2.sub(vB2,vA2))+this.m_a2*wB-this.m_a1*wA;var impulse=this.m_motorMass*(this.m_motorSpeed-Cdot);var oldImpulse=this.m_motorImpulse;var maxImpulse=step.dt*this.m_maxMotorForce;this.m_motorImpulse=clamp$1(this.m_motorImpulse+impulse,-maxImpulse,maxImpulse);impulse=this.m_motorImpulse-oldImpulse;var P3=Vec2.mulNumVec2(impulse,this.m_axis);var LA=impulse*this.m_a1;var LB=impulse*this.m_a2;vA2.subMul(mA,P3);wA-=iA*LA;vB2.addMul(mB,P3);wB+=iB*LB}var Cdot1=Vec2.zero();Cdot1.x+=Vec2.dot(this.m_perp,vB2)+this.m_s2*wB;Cdot1.x-=Vec2.dot(this.m_perp,vA2)+this.m_s1*wA;Cdot1.y=wB-wA;if(this.m_enableLimit&&this.m_limitState!=LimitState$1.inactiveLimit){var Cdot2=0;Cdot2+=Vec2.dot(this.m_axis,vB2)+this.m_a2*wB;Cdot2-=Vec2.dot(this.m_axis,vA2)+this.m_a1*wA;var Cdot=new Vec3(Cdot1.x,Cdot1.y,Cdot2);var f1=Vec3.clone(this.m_impulse);var df=this.m_K.solve33(Vec3.neg(Cdot));this.m_impulse.add(df);if(this.m_limitState==LimitState$1.atLowerLimit){this.m_impulse.z=math_max$1(this.m_impulse.z,0)}else if(this.m_limitState==LimitState$1.atUpperLimit){this.m_impulse.z=math_min$3(this.m_impulse.z,0)}var b2=Vec2.combine(-1,Cdot1,-(this.m_impulse.z-f1.z),Vec2.neo(this.m_K.ez.x,this.m_K.ez.y));var f2r=Vec2.add(this.m_K.solve22(b2),Vec2.neo(f1.x,f1.y));this.m_impulse.x=f2r.x;this.m_impulse.y=f2r.y;df=Vec3.sub(this.m_impulse,f1);var P3=Vec2.combine(df.x,this.m_perp,df.z,this.m_axis);var LA=df.x*this.m_s1+df.y+df.z*this.m_a1;var LB=df.x*this.m_s2+df.y+df.z*this.m_a2;vA2.subMul(mA,P3);wA-=iA*LA;vB2.addMul(mB,P3);wB+=iB*LB}else{var df=this.m_K.solve22(Vec2.neg(Cdot1));this.m_impulse.x+=df.x;this.m_impulse.y+=df.y;var P3=Vec2.mulNumVec2(df.x,this.m_perp);var LA=df.x*this.m_s1+df.y;var LB=df.x*this.m_s2+df.y;vA2.subMul(mA,P3);wA-=iA*LA;vB2.addMul(mB,P3);wB+=iB*LB}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};PrismaticJoint2.prototype.solvePositionConstraints=function(step){var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var rA2=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));var rB2=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var d2=Vec2.sub(Vec2.add(cB2,rB2),Vec2.add(cA2,rA2));var axis=Rot.mulVec2(qA,this.m_localXAxisA);var a1=Vec2.crossVec2Vec2(Vec2.add(d2,rA2),axis);var a2=Vec2.crossVec2Vec2(rB2,axis);var perp2=Rot.mulVec2(qA,this.m_localYAxisA);var s1=Vec2.crossVec2Vec2(Vec2.add(d2,rA2),perp2);var s2=Vec2.crossVec2Vec2(rB2,perp2);var impulse=new Vec3;var C1=Vec2.zero();C1.x=Vec2.dot(perp2,d2);C1.y=aB-aA-this.m_referenceAngle;var linearError=math_abs$4(C1.x);var angularError=math_abs$4(C1.y);var linearSlop=SettingsInternal.linearSlop;var maxLinearCorrection=SettingsInternal.maxLinearCorrection;var active=false;var C2=0;if(this.m_enableLimit){var translation2=Vec2.dot(axis,d2);if(math_abs$4(this.m_upperTranslation-this.m_lowerTranslation)<2*linearSlop){C2=clamp$1(translation2,-maxLinearCorrection,maxLinearCorrection);linearError=math_max$1(linearError,math_abs$4(translation2));active=true}else if(translation2<=this.m_lowerTranslation){C2=clamp$1(translation2-this.m_lowerTranslation+linearSlop,-maxLinearCorrection,0);linearError=Math.max(linearError,this.m_lowerTranslation-translation2);active=true}else if(translation2>=this.m_upperTranslation){C2=clamp$1(translation2-this.m_upperTranslation-linearSlop,0,maxLinearCorrection);linearError=Math.max(linearError,translation2-this.m_upperTranslation);active=true}}if(active){var k11=mA+mB+iA*s1*s1+iB*s2*s2;var k12=iA*s1+iB*s2;var k13=iA*s1*a1+iB*s2*a2;var k22=iA+iB;if(k22==0){k22=1}var k23=iA*a1+iB*a2;var k33=mA+mB+iA*a1*a1+iB*a2*a2;var K=new Mat33;K.ex.set(k11,k12,k13);K.ey.set(k12,k22,k23);K.ez.set(k13,k23,k33);var C=new Vec3;C.x=C1.x;C.y=C1.y;C.z=C2;impulse=K.solve33(Vec3.neg(C))}else{var k11=mA+mB+iA*s1*s1+iB*s2*s2;var k12=iA*s1+iB*s2;var k22=iA+iB;if(k22==0){k22=1}var K=new Mat22;K.ex.setNum(k11,k12);K.ey.setNum(k12,k22);var impulse1=K.solve(Vec2.neg(C1));impulse.x=impulse1.x;impulse.y=impulse1.y;impulse.z=0}var P3=Vec2.combine(impulse.x,perp2,impulse.z,axis);var LA=impulse.x*s1+impulse.y+impulse.z*a1;var LB=impulse.x*s2+impulse.y+impulse.z*a2;cA2.subMul(mA,P3);aA-=iA*LA;cB2.addMul(mB,P3);aB+=iB*LB;this.m_bodyA.c_position.c=cA2;this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c=cB2;this.m_bodyB.c_position.a=aB;return linearError<=SettingsInternal.linearSlop&&angularError<=SettingsInternal.angularSlop};PrismaticJoint2.TYPE="prismatic-joint";return PrismaticJoint2}(Joint);var DEFAULTS$6={ratio:1};var GearJoint=function(_super){__extends$a(GearJoint2,_super);function GearJoint2(def,bodyA,bodyB,joint1,joint2,ratio){var _this=this;if(!(_this instanceof GearJoint2)){return new GearJoint2(def,bodyA,bodyB,joint1,joint2,ratio)}def=options(def,DEFAULTS$6);_this=_super.call(this,def,bodyA,bodyB)||this;bodyA=_this.m_bodyA;bodyB=_this.m_bodyB;_this.m_type=GearJoint2.TYPE;_this.m_joint1=joint1?joint1:def.joint1;_this.m_joint2=joint2?joint2:def.joint2;_this.m_ratio=Number.isFinite(ratio)?ratio:def.ratio;_this.m_type1=_this.m_joint1.getType();_this.m_type2=_this.m_joint2.getType();var coordinateA;var coordinateB;_this.m_bodyC=_this.m_joint1.getBodyA();_this.m_bodyA=_this.m_joint1.getBodyB();var xfA2=_this.m_bodyA.m_xf;var aA=_this.m_bodyA.m_sweep.a;var xfC=_this.m_bodyC.m_xf;var aC=_this.m_bodyC.m_sweep.a;if(_this.m_type1===RevoluteJoint.TYPE){var revolute=_this.m_joint1;_this.m_localAnchorC=revolute.m_localAnchorA;_this.m_localAnchorA=revolute.m_localAnchorB;_this.m_referenceAngleA=revolute.m_referenceAngle;_this.m_localAxisC=Vec2.zero();coordinateA=aA-aC-_this.m_referenceAngleA}else{var prismatic=_this.m_joint1;_this.m_localAnchorC=prismatic.m_localAnchorA;_this.m_localAnchorA=prismatic.m_localAnchorB;_this.m_referenceAngleA=prismatic.m_referenceAngle;_this.m_localAxisC=prismatic.m_localXAxisA;var pC=_this.m_localAnchorC;var pA2=Rot.mulTVec2(xfC.q,Vec2.add(Rot.mulVec2(xfA2.q,_this.m_localAnchorA),Vec2.sub(xfA2.p,xfC.p)));coordinateA=Vec2.dot(pA2,_this.m_localAxisC)-Vec2.dot(pC,_this.m_localAxisC)}_this.m_bodyD=_this.m_joint2.getBodyA();_this.m_bodyB=_this.m_joint2.getBodyB();var xfB2=_this.m_bodyB.m_xf;var aB=_this.m_bodyB.m_sweep.a;var xfD=_this.m_bodyD.m_xf;var aD=_this.m_bodyD.m_sweep.a;if(_this.m_type2===RevoluteJoint.TYPE){var revolute=_this.m_joint2;_this.m_localAnchorD=revolute.m_localAnchorA;_this.m_localAnchorB=revolute.m_localAnchorB;_this.m_referenceAngleB=revolute.m_referenceAngle;_this.m_localAxisD=Vec2.zero();coordinateB=aB-aD-_this.m_referenceAngleB}else{var prismatic=_this.m_joint2;_this.m_localAnchorD=prismatic.m_localAnchorA;_this.m_localAnchorB=prismatic.m_localAnchorB;_this.m_referenceAngleB=prismatic.m_referenceAngle;_this.m_localAxisD=prismatic.m_localXAxisA;var pD=_this.m_localAnchorD;var pB2=Rot.mulTVec2(xfD.q,Vec2.add(Rot.mulVec2(xfB2.q,_this.m_localAnchorB),Vec2.sub(xfB2.p,xfD.p)));coordinateB=Vec2.dot(pB2,_this.m_localAxisD)-Vec2.dot(pD,_this.m_localAxisD)}_this.m_constant=coordinateA+_this.m_ratio*coordinateB;_this.m_impulse=0;return _this}GearJoint2.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,joint1:this.m_joint1,joint2:this.m_joint2,ratio:this.m_ratio}};GearJoint2._deserialize=function(data,world,restore){data=__assign$1({},data);data.bodyA=restore(Body,data.bodyA,world);data.bodyB=restore(Body,data.bodyB,world);data.joint1=restore(Joint,data.joint1,world);data.joint2=restore(Joint,data.joint2,world);var joint=new GearJoint2(data);return joint};GearJoint2.prototype._reset=function(def){if(Number.isFinite(def.ratio)){this.m_ratio=def.ratio}};GearJoint2.prototype.getJoint1=function(){return this.m_joint1};GearJoint2.prototype.getJoint2=function(){return this.m_joint2};GearJoint2.prototype.setRatio=function(ratio){this.m_ratio=ratio};GearJoint2.prototype.getRatio=function(){return this.m_ratio};GearJoint2.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)};GearJoint2.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)};GearJoint2.prototype.getReactionForce=function(inv_dt){return Vec2.mulNumVec2(this.m_impulse,this.m_JvAC).mul(inv_dt)};GearJoint2.prototype.getReactionTorque=function(inv_dt){var L=this.m_impulse*this.m_JwA;return inv_dt*L};GearJoint2.prototype.initVelocityConstraints=function(step){this.m_lcA=this.m_bodyA.m_sweep.localCenter;this.m_lcB=this.m_bodyB.m_sweep.localCenter;this.m_lcC=this.m_bodyC.m_sweep.localCenter;this.m_lcD=this.m_bodyD.m_sweep.localCenter;this.m_mA=this.m_bodyA.m_invMass;this.m_mB=this.m_bodyB.m_invMass;this.m_mC=this.m_bodyC.m_invMass;this.m_mD=this.m_bodyD.m_invMass;this.m_iA=this.m_bodyA.m_invI;this.m_iB=this.m_bodyB.m_invI;this.m_iC=this.m_bodyC.m_invI;this.m_iD=this.m_bodyD.m_invI;var aA=this.m_bodyA.c_position.a;var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var aB=this.m_bodyB.c_position.a;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var aC=this.m_bodyC.c_position.a;var vC=this.m_bodyC.c_velocity.v;var wC=this.m_bodyC.c_velocity.w;var aD=this.m_bodyD.c_position.a;var vD=this.m_bodyD.c_velocity.v;var wD=this.m_bodyD.c_velocity.w;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var qC=Rot.neo(aC);var qD=Rot.neo(aD);this.m_mass=0;if(this.m_type1==RevoluteJoint.TYPE){this.m_JvAC=Vec2.zero();this.m_JwA=1;this.m_JwC=1;this.m_mass+=this.m_iA+this.m_iC}else{var u=Rot.mulVec2(qC,this.m_localAxisC);var rC=Rot.mulSub(qC,this.m_localAnchorC,this.m_lcC);var rA2=Rot.mulSub(qA,this.m_localAnchorA,this.m_lcA);this.m_JvAC=u;this.m_JwC=Vec2.crossVec2Vec2(rC,u);this.m_JwA=Vec2.crossVec2Vec2(rA2,u);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}if(this.m_type2==RevoluteJoint.TYPE){this.m_JvBD=Vec2.zero();this.m_JwB=this.m_ratio;this.m_JwD=this.m_ratio;this.m_mass+=this.m_ratio*this.m_ratio*(this.m_iB+this.m_iD)}else{var u=Rot.mulVec2(qD,this.m_localAxisD);var rD=Rot.mulSub(qD,this.m_localAnchorD,this.m_lcD);var rB2=Rot.mulSub(qB,this.m_localAnchorB,this.m_lcB);this.m_JvBD=Vec2.mulNumVec2(this.m_ratio,u);this.m_JwD=this.m_ratio*Vec2.crossVec2Vec2(rD,u);this.m_JwB=this.m_ratio*Vec2.crossVec2Vec2(rB2,u);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}this.m_mass=this.m_mass>0?1/this.m_mass:0;if(step.warmStarting){vA2.addMul(this.m_mA*this.m_impulse,this.m_JvAC);wA+=this.m_iA*this.m_impulse*this.m_JwA;vB2.addMul(this.m_mB*this.m_impulse,this.m_JvBD);wB+=this.m_iB*this.m_impulse*this.m_JwB;vC.subMul(this.m_mC*this.m_impulse,this.m_JvAC);wC-=this.m_iC*this.m_impulse*this.m_JwC;vD.subMul(this.m_mD*this.m_impulse,this.m_JvBD);wD-=this.m_iD*this.m_impulse*this.m_JwD}else{this.m_impulse=0}this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB;this.m_bodyC.c_velocity.v.setVec2(vC);this.m_bodyC.c_velocity.w=wC;this.m_bodyD.c_velocity.v.setVec2(vD);this.m_bodyD.c_velocity.w=wD};GearJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var vC=this.m_bodyC.c_velocity.v;var wC=this.m_bodyC.c_velocity.w;var vD=this.m_bodyD.c_velocity.v;var wD=this.m_bodyD.c_velocity.w;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);Cdot+=this.m_JwA*wA-this.m_JwC*wC+(this.m_JwB*wB-this.m_JwD*wD);var impulse=-this.m_mass*Cdot;this.m_impulse+=impulse;vA2.addMul(this.m_mA*impulse,this.m_JvAC);wA+=this.m_iA*impulse*this.m_JwA;vB2.addMul(this.m_mB*impulse,this.m_JvBD);wB+=this.m_iB*impulse*this.m_JwB;vC.subMul(this.m_mC*impulse,this.m_JvAC);wC-=this.m_iC*impulse*this.m_JwC;vD.subMul(this.m_mD*impulse,this.m_JvBD);wD-=this.m_iD*impulse*this.m_JwD;this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB;this.m_bodyC.c_velocity.v.setVec2(vC);this.m_bodyC.c_velocity.w=wC;this.m_bodyD.c_velocity.v.setVec2(vD);this.m_bodyD.c_velocity.w=wD};GearJoint2.prototype.solvePositionConstraints=function(step){var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var cC=this.m_bodyC.c_position.c;var aC=this.m_bodyC.c_position.a;var cD=this.m_bodyD.c_position.c;var aD=this.m_bodyD.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var qC=Rot.neo(aC);var qD=Rot.neo(aD);var linearError=0;var coordinateA;var coordinateB;var JvAC;var JvBD;var JwA;var JwB;var JwC;var JwD;var mass=0;if(this.m_type1==RevoluteJoint.TYPE){JvAC=Vec2.zero();JwA=1;JwC=1;mass+=this.m_iA+this.m_iC;coordinateA=aA-aC-this.m_referenceAngleA}else{var u=Rot.mulVec2(qC,this.m_localAxisC);var rC=Rot.mulSub(qC,this.m_localAnchorC,this.m_lcC);var rA2=Rot.mulSub(qA,this.m_localAnchorA,this.m_lcA);JvAC=u;JwC=Vec2.crossVec2Vec2(rC,u);JwA=Vec2.crossVec2Vec2(rA2,u);mass+=this.m_mC+this.m_mA+this.m_iC*JwC*JwC+this.m_iA*JwA*JwA;var pC=Vec2.sub(this.m_localAnchorC,this.m_lcC);var pA2=Rot.mulTVec2(qC,Vec2.add(rA2,Vec2.sub(cA2,cC)));coordinateA=Vec2.dot(Vec2.sub(pA2,pC),this.m_localAxisC)}if(this.m_type2==RevoluteJoint.TYPE){JvBD=Vec2.zero();JwB=this.m_ratio;JwD=this.m_ratio;mass+=this.m_ratio*this.m_ratio*(this.m_iB+this.m_iD);coordinateB=aB-aD-this.m_referenceAngleB}else{var u=Rot.mulVec2(qD,this.m_localAxisD);var rD=Rot.mulSub(qD,this.m_localAnchorD,this.m_lcD);var rB2=Rot.mulSub(qB,this.m_localAnchorB,this.m_lcB);JvBD=Vec2.mulNumVec2(this.m_ratio,u);JwD=this.m_ratio*Vec2.crossVec2Vec2(rD,u);JwB=this.m_ratio*Vec2.crossVec2Vec2(rB2,u);mass+=this.m_ratio*this.m_ratio*(this.m_mD+this.m_mB)+this.m_iD*JwD*JwD+this.m_iB*JwB*JwB;var pD=Vec2.sub(this.m_localAnchorD,this.m_lcD);var pB2=Rot.mulTVec2(qD,Vec2.add(rB2,Vec2.sub(cB2,cD)));coordinateB=Vec2.dot(pB2,this.m_localAxisD)-Vec2.dot(pD,this.m_localAxisD)}var C=coordinateA+this.m_ratio*coordinateB-this.m_constant;var impulse=0;if(mass>0){impulse=-C/mass}cA2.addMul(this.m_mA*impulse,JvAC);aA+=this.m_iA*impulse*JwA;cB2.addMul(this.m_mB*impulse,JvBD);aB+=this.m_iB*impulse*JwB;cC.subMul(this.m_mC*impulse,JvAC);aC-=this.m_iC*impulse*JwC;cD.subMul(this.m_mD*impulse,JvBD);aD-=this.m_iD*impulse*JwD;this.m_bodyA.c_position.c.setVec2(cA2);this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c.setVec2(cB2);this.m_bodyB.c_position.a=aB;this.m_bodyC.c_position.c.setVec2(cC);this.m_bodyC.c_position.a=aC;this.m_bodyD.c_position.c.setVec2(cD);this.m_bodyD.c_position.a=aD;return linearError0){this.m_angularMass=1/this.m_angularMass}this.m_linearError=Vec2.zero();this.m_linearError.addCombine(1,cB2,1,this.m_rB);this.m_linearError.subCombine(1,cA2,1,this.m_rA);this.m_angularError=aB-aA-this.m_angularOffset;if(step.warmStarting){this.m_linearImpulse.mul(step.dtRatio);this.m_angularImpulse*=step.dtRatio;var P3=Vec2.neo(this.m_linearImpulse.x,this.m_linearImpulse.y);vA2.subMul(mA,P3);wA-=iA*(Vec2.crossVec2Vec2(this.m_rA,P3)+this.m_angularImpulse);vB2.addMul(mB,P3);wB+=iB*(Vec2.crossVec2Vec2(this.m_rB,P3)+this.m_angularImpulse)}else{this.m_linearImpulse.setZero();this.m_angularImpulse=0}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};MotorJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var h=step.dt;var inv_h=step.inv_dt;{var Cdot=wB-wA+inv_h*this.m_correctionFactor*this.m_angularError;var impulse=-this.m_angularMass*Cdot;var oldImpulse=this.m_angularImpulse;var maxImpulse=h*this.m_maxTorque;this.m_angularImpulse=clamp$1(this.m_angularImpulse+impulse,-maxImpulse,maxImpulse);impulse=this.m_angularImpulse-oldImpulse;wA-=iA*impulse;wB+=iB*impulse}{var Cdot=Vec2.zero();Cdot.addCombine(1,vB2,1,Vec2.crossNumVec2(wB,this.m_rB));Cdot.subCombine(1,vA2,1,Vec2.crossNumVec2(wA,this.m_rA));Cdot.addMul(inv_h*this.m_correctionFactor,this.m_linearError);var impulse=Vec2.neg(Mat22.mulVec2(this.m_linearMass,Cdot));var oldImpulse=Vec2.clone(this.m_linearImpulse);this.m_linearImpulse.add(impulse);var maxImpulse=h*this.m_maxForce;this.m_linearImpulse.clamp(maxImpulse);impulse=Vec2.sub(this.m_linearImpulse,oldImpulse);vA2.subMul(mA,impulse);wA-=iA*Vec2.crossVec2Vec2(this.m_rA,impulse);vB2.addMul(mB,impulse);wB+=iB*Vec2.crossVec2Vec2(this.m_rB,impulse)}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};MotorJoint2.prototype.solvePositionConstraints=function(step){return true};MotorJoint2.TYPE="motor-joint";return MotorJoint2}(Joint);var math_PI$3=Math.PI;var DEFAULTS$4={maxForce:0,frequencyHz:5,dampingRatio:.7};var MouseJoint=function(_super){__extends$a(MouseJoint2,_super);function MouseJoint2(def,bodyA,bodyB,target){var _this=this;if(!(_this instanceof MouseJoint2)){return new MouseJoint2(def,bodyA,bodyB,target)}def=options(def,DEFAULTS$4);_this=_super.call(this,def,bodyA,bodyB)||this;bodyA=_this.m_bodyA;bodyB=_this.m_bodyB;_this.m_type=MouseJoint2.TYPE;if(Vec2.isValid(target)){_this.m_targetA=Vec2.clone(target)}else if(Vec2.isValid(def.target)){_this.m_targetA=Vec2.clone(def.target)}else{_this.m_targetA=Vec2.zero()}_this.m_localAnchorB=Transform.mulTVec2(bodyB.getTransform(),_this.m_targetA);_this.m_maxForce=def.maxForce;_this.m_impulse=Vec2.zero();_this.m_frequencyHz=def.frequencyHz;_this.m_dampingRatio=def.dampingRatio;_this.m_beta=0;_this.m_gamma=0;_this.m_rB=Vec2.zero();_this.m_localCenterB=Vec2.zero();_this.m_invMassB=0;_this.m_invIB=0;_this.m_mass=new Mat22;_this.m_C=Vec2.zero();return _this}MouseJoint2.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,target:this.m_targetA,maxForce:this.m_maxForce,frequencyHz:this.m_frequencyHz,dampingRatio:this.m_dampingRatio,_localAnchorB:this.m_localAnchorB}};MouseJoint2._deserialize=function(data,world,restore){data=__assign$1({},data);data.bodyA=restore(Body,data.bodyA,world);data.bodyB=restore(Body,data.bodyB,world);data.target=Vec2.clone(data.target);var joint=new MouseJoint2(data);if(data._localAnchorB){joint.m_localAnchorB=data._localAnchorB}return joint};MouseJoint2.prototype._reset=function(def){if(Number.isFinite(def.maxForce)){this.m_maxForce=def.maxForce}if(Number.isFinite(def.frequencyHz)){this.m_frequencyHz=def.frequencyHz}if(Number.isFinite(def.dampingRatio)){this.m_dampingRatio=def.dampingRatio}};MouseJoint2.prototype.setTarget=function(target){if(Vec2.areEqual(target,this.m_targetA))return;this.m_bodyB.setAwake(true);this.m_targetA.set(target)};MouseJoint2.prototype.getTarget=function(){return this.m_targetA};MouseJoint2.prototype.setMaxForce=function(force){this.m_maxForce=force};MouseJoint2.prototype.getMaxForce=function(){return this.m_maxForce};MouseJoint2.prototype.setFrequency=function(hz){this.m_frequencyHz=hz};MouseJoint2.prototype.getFrequency=function(){return this.m_frequencyHz};MouseJoint2.prototype.setDampingRatio=function(ratio){this.m_dampingRatio=ratio};MouseJoint2.prototype.getDampingRatio=function(){return this.m_dampingRatio};MouseJoint2.prototype.getAnchorA=function(){return Vec2.clone(this.m_targetA)};MouseJoint2.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)};MouseJoint2.prototype.getReactionForce=function(inv_dt){return Vec2.mulNumVec2(inv_dt,this.m_impulse)};MouseJoint2.prototype.getReactionTorque=function(inv_dt){return inv_dt*0};MouseJoint2.prototype.shiftOrigin=function(newOrigin){this.m_targetA.sub(newOrigin)};MouseJoint2.prototype.initVelocityConstraints=function(step){this.m_localCenterB=this.m_bodyB.m_sweep.localCenter;this.m_invMassB=this.m_bodyB.m_invMass;this.m_invIB=this.m_bodyB.m_invI;var position=this.m_bodyB.c_position;var velocity=this.m_bodyB.c_velocity;var cB2=position.c;var aB=position.a;var vB2=velocity.v;var wB=velocity.w;var qB=Rot.neo(aB);var mass=this.m_bodyB.getMass();var omega=2*math_PI$3*this.m_frequencyHz;var d2=2*mass*this.m_dampingRatio*omega;var k=mass*(omega*omega);var h=step.dt;this.m_gamma=h*(d2+h*k);if(this.m_gamma!=0){this.m_gamma=1/this.m_gamma}this.m_beta=h*k*this.m_gamma;this.m_rB=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var K=new Mat22;K.ex.x=this.m_invMassB+this.m_invIB*this.m_rB.y*this.m_rB.y+this.m_gamma;K.ex.y=-this.m_invIB*this.m_rB.x*this.m_rB.y;K.ey.x=K.ex.y;K.ey.y=this.m_invMassB+this.m_invIB*this.m_rB.x*this.m_rB.x+this.m_gamma;this.m_mass=K.getInverse();this.m_C.setVec2(cB2);this.m_C.addCombine(1,this.m_rB,-1,this.m_targetA);this.m_C.mul(this.m_beta);wB*=.98;if(step.warmStarting){this.m_impulse.mul(step.dtRatio);vB2.addMul(this.m_invMassB,this.m_impulse);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,this.m_impulse)}else{this.m_impulse.setZero()}velocity.v.setVec2(vB2);velocity.w=wB};MouseJoint2.prototype.solveVelocityConstraints=function(step){var velocity=this.m_bodyB.c_velocity;var vB2=Vec2.clone(velocity.v);var wB=velocity.w;var Cdot=Vec2.crossNumVec2(wB,this.m_rB);Cdot.add(vB2);Cdot.addCombine(1,this.m_C,this.m_gamma,this.m_impulse);Cdot.neg();var impulse=Mat22.mulVec2(this.m_mass,Cdot);var oldImpulse=Vec2.clone(this.m_impulse);this.m_impulse.add(impulse);var maxImpulse=step.dt*this.m_maxForce;this.m_impulse.clamp(maxImpulse);impulse=Vec2.sub(this.m_impulse,oldImpulse);vB2.addMul(this.m_invMassB,impulse);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,impulse);velocity.v.setVec2(vB2);velocity.w=wB};MouseJoint2.prototype.solvePositionConstraints=function(step){return true};MouseJoint2.TYPE="mouse-joint";return MouseJoint2}(Joint);var math_abs$3=Math.abs;var DEFAULTS$3={collideConnected:true};var PulleyJoint=function(_super){__extends$a(PulleyJoint2,_super);function PulleyJoint2(def,bodyA,bodyB,groundA,groundB,anchorA,anchorB,ratio){var _this=this;if(!(_this instanceof PulleyJoint2)){return new PulleyJoint2(def,bodyA,bodyB,groundA,groundB,anchorA,anchorB,ratio)}def=options(def,DEFAULTS$3);_this=_super.call(this,def,bodyA,bodyB)||this;bodyA=_this.m_bodyA;bodyB=_this.m_bodyB;_this.m_type=PulleyJoint2.TYPE;_this.m_groundAnchorA=Vec2.clone(groundA?groundA:def.groundAnchorA||Vec2.neo(-1,1));_this.m_groundAnchorB=Vec2.clone(groundB?groundB:def.groundAnchorB||Vec2.neo(1,1));_this.m_localAnchorA=Vec2.clone(anchorA?bodyA.getLocalPoint(anchorA):def.localAnchorA||Vec2.neo(-1,0));_this.m_localAnchorB=Vec2.clone(anchorB?bodyB.getLocalPoint(anchorB):def.localAnchorB||Vec2.neo(1,0));_this.m_lengthA=Number.isFinite(def.lengthA)?def.lengthA:Vec2.distance(anchorA,groundA);_this.m_lengthB=Number.isFinite(def.lengthB)?def.lengthB:Vec2.distance(anchorB,groundB);_this.m_ratio=Number.isFinite(ratio)?ratio:def.ratio;_this.m_constant=_this.m_lengthA+_this.m_ratio*_this.m_lengthB;_this.m_impulse=0;return _this}PulleyJoint2.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,groundAnchorA:this.m_groundAnchorA,groundAnchorB:this.m_groundAnchorB,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,lengthA:this.m_lengthA,lengthB:this.m_lengthB,ratio:this.m_ratio}};PulleyJoint2._deserialize=function(data,world,restore){data=__assign$1({},data);data.bodyA=restore(Body,data.bodyA,world);data.bodyB=restore(Body,data.bodyB,world);var joint=new PulleyJoint2(data);return joint};PulleyJoint2.prototype._reset=function(def){if(Vec2.isValid(def.groundAnchorA)){this.m_groundAnchorA.set(def.groundAnchorA)}if(Vec2.isValid(def.groundAnchorB)){this.m_groundAnchorB.set(def.groundAnchorB)}if(Vec2.isValid(def.localAnchorA)){this.m_localAnchorA.set(def.localAnchorA)}else if(Vec2.isValid(def.anchorA)){this.m_localAnchorA.set(this.m_bodyA.getLocalPoint(def.anchorA))}if(Vec2.isValid(def.localAnchorB)){this.m_localAnchorB.set(def.localAnchorB)}else if(Vec2.isValid(def.anchorB)){this.m_localAnchorB.set(this.m_bodyB.getLocalPoint(def.anchorB))}if(Number.isFinite(def.lengthA)){this.m_lengthA=def.lengthA}if(Number.isFinite(def.lengthB)){this.m_lengthB=def.lengthB}if(Number.isFinite(def.ratio)){this.m_ratio=def.ratio}};PulleyJoint2.prototype.getGroundAnchorA=function(){return this.m_groundAnchorA};PulleyJoint2.prototype.getGroundAnchorB=function(){return this.m_groundAnchorB};PulleyJoint2.prototype.getLengthA=function(){return this.m_lengthA};PulleyJoint2.prototype.getLengthB=function(){return this.m_lengthB};PulleyJoint2.prototype.getRatio=function(){return this.m_ratio};PulleyJoint2.prototype.getCurrentLengthA=function(){var p=this.m_bodyA.getWorldPoint(this.m_localAnchorA);var s2=this.m_groundAnchorA;return Vec2.distance(p,s2)};PulleyJoint2.prototype.getCurrentLengthB=function(){var p=this.m_bodyB.getWorldPoint(this.m_localAnchorB);var s2=this.m_groundAnchorB;return Vec2.distance(p,s2)};PulleyJoint2.prototype.shiftOrigin=function(newOrigin){this.m_groundAnchorA.sub(newOrigin);this.m_groundAnchorB.sub(newOrigin)};PulleyJoint2.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)};PulleyJoint2.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)};PulleyJoint2.prototype.getReactionForce=function(inv_dt){return Vec2.mulNumVec2(this.m_impulse,this.m_uB).mul(inv_dt)};PulleyJoint2.prototype.getReactionTorque=function(inv_dt){return 0};PulleyJoint2.prototype.initVelocityConstraints=function(step){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter;this.m_localCenterB=this.m_bodyB.m_sweep.localCenter;this.m_invMassA=this.m_bodyA.m_invMass;this.m_invMassB=this.m_bodyB.m_invMass;this.m_invIA=this.m_bodyA.m_invI;this.m_invIB=this.m_bodyB.m_invI;var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var qA=Rot.neo(aA);var qB=Rot.neo(aB);this.m_rA=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));this.m_rB=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));this.m_uA=Vec2.sub(Vec2.add(cA2,this.m_rA),this.m_groundAnchorA);this.m_uB=Vec2.sub(Vec2.add(cB2,this.m_rB),this.m_groundAnchorB);var lengthA=this.m_uA.length();var lengthB=this.m_uB.length();if(lengthA>10*SettingsInternal.linearSlop){this.m_uA.mul(1/lengthA)}else{this.m_uA.setZero()}if(lengthB>10*SettingsInternal.linearSlop){this.m_uB.mul(1/lengthB)}else{this.m_uB.setZero()}var ruA=Vec2.crossVec2Vec2(this.m_rA,this.m_uA);var ruB=Vec2.crossVec2Vec2(this.m_rB,this.m_uB);var mA=this.m_invMassA+this.m_invIA*ruA*ruA;var mB=this.m_invMassB+this.m_invIB*ruB*ruB;this.m_mass=mA+this.m_ratio*this.m_ratio*mB;if(this.m_mass>0){this.m_mass=1/this.m_mass}if(step.warmStarting){this.m_impulse*=step.dtRatio;var PA=Vec2.mulNumVec2(-this.m_impulse,this.m_uA);var PB=Vec2.mulNumVec2(-this.m_ratio*this.m_impulse,this.m_uB);vA2.addMul(this.m_invMassA,PA);wA+=this.m_invIA*Vec2.crossVec2Vec2(this.m_rA,PA);vB2.addMul(this.m_invMassB,PB);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,PB)}else{this.m_impulse=0}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};PulleyJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var vpA=Vec2.add(vA2,Vec2.crossNumVec2(wA,this.m_rA));var vpB=Vec2.add(vB2,Vec2.crossNumVec2(wB,this.m_rB));var Cdot=-Vec2.dot(this.m_uA,vpA)-this.m_ratio*Vec2.dot(this.m_uB,vpB);var impulse=-this.m_mass*Cdot;this.m_impulse+=impulse;var PA=Vec2.mulNumVec2(-impulse,this.m_uA);var PB=Vec2.mulNumVec2(-this.m_ratio*impulse,this.m_uB);vA2.addMul(this.m_invMassA,PA);wA+=this.m_invIA*Vec2.crossVec2Vec2(this.m_rA,PA);vB2.addMul(this.m_invMassB,PB);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,PB);this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};PulleyJoint2.prototype.solvePositionConstraints=function(step){var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var rA2=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));var rB2=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var uA=Vec2.sub(Vec2.add(cA2,this.m_rA),this.m_groundAnchorA);var uB=Vec2.sub(Vec2.add(cB2,this.m_rB),this.m_groundAnchorB);var lengthA=uA.length();var lengthB=uB.length();if(lengthA>10*SettingsInternal.linearSlop){uA.mul(1/lengthA)}else{uA.setZero()}if(lengthB>10*SettingsInternal.linearSlop){uB.mul(1/lengthB)}else{uB.setZero()}var ruA=Vec2.crossVec2Vec2(rA2,uA);var ruB=Vec2.crossVec2Vec2(rB2,uB);var mA=this.m_invMassA+this.m_invIA*ruA*ruA;var mB=this.m_invMassB+this.m_invIB*ruB*ruB;var mass=mA+this.m_ratio*this.m_ratio*mB;if(mass>0){mass=1/mass}var C=this.m_constant-lengthA-this.m_ratio*lengthB;var linearError=math_abs$3(C);var impulse=-mass*C;var PA=Vec2.mulNumVec2(-impulse,uA);var PB=Vec2.mulNumVec2(-this.m_ratio*impulse,uB);cA2.addMul(this.m_invMassA,PA);aA+=this.m_invIA*Vec2.crossVec2Vec2(rA2,PA);cB2.addMul(this.m_invMassB,PB);aB+=this.m_invIB*Vec2.crossVec2Vec2(rB2,PB);this.m_bodyA.c_position.c=cA2;this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c=cB2;this.m_bodyB.c_position.a=aB;return linearError0){this.m_state=LimitState.atUpperLimit}else{this.m_state=LimitState.inactiveLimit}if(this.m_length>SettingsInternal.linearSlop){this.m_u.mul(1/this.m_length)}else{this.m_u.setZero();this.m_mass=0;this.m_impulse=0;return}var crA=Vec2.crossVec2Vec2(this.m_rA,this.m_u);var crB=Vec2.crossVec2Vec2(this.m_rB,this.m_u);var invMass=this.m_invMassA+this.m_invIA*crA*crA+this.m_invMassB+this.m_invIB*crB*crB;this.m_mass=invMass!=0?1/invMass:0;if(step.warmStarting){this.m_impulse*=step.dtRatio;var P3=Vec2.mulNumVec2(this.m_impulse,this.m_u);vA2.subMul(this.m_invMassA,P3);wA-=this.m_invIA*Vec2.crossVec2Vec2(this.m_rA,P3);vB2.addMul(this.m_invMassB,P3);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,P3)}else{this.m_impulse=0}this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB};RopeJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var vpA=Vec2.addCrossNumVec2(vA2,wA,this.m_rA);var vpB=Vec2.addCrossNumVec2(vB2,wB,this.m_rB);var C=this.m_length-this.m_maxLength;var Cdot=Vec2.dot(this.m_u,Vec2.sub(vpB,vpA));if(C<0){Cdot+=step.inv_dt*C}var impulse=-this.m_mass*Cdot;var oldImpulse=this.m_impulse;this.m_impulse=math_min$2(0,this.m_impulse+impulse);impulse=this.m_impulse-oldImpulse;var P3=Vec2.mulNumVec2(impulse,this.m_u);vA2.subMul(this.m_invMassA,P3);wA-=this.m_invIA*Vec2.crossVec2Vec2(this.m_rA,P3);vB2.addMul(this.m_invMassB,P3);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,P3);this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};RopeJoint2.prototype.solvePositionConstraints=function(step){var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var rA2=Rot.mulSub(qA,this.m_localAnchorA,this.m_localCenterA);var rB2=Rot.mulSub(qB,this.m_localAnchorB,this.m_localCenterB);var u=Vec2.zero();u.addCombine(1,cB2,1,rB2);u.subCombine(1,cA2,1,rA2);var length2=u.normalize();var C=length2-this.m_maxLength;C=clamp$1(C,0,SettingsInternal.maxLinearCorrection);var impulse=-this.m_mass*C;var P3=Vec2.mulNumVec2(impulse,u);cA2.subMul(this.m_invMassA,P3);aA-=this.m_invIA*Vec2.crossVec2Vec2(rA2,P3);cB2.addMul(this.m_invMassB,P3);aB+=this.m_invIB*Vec2.crossVec2Vec2(rB2,P3);this.m_bodyA.c_position.c.setVec2(cA2);this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c.setVec2(cB2);this.m_bodyB.c_position.a=aB;return length2-this.m_maxLength0){K.getInverse22(this.m_mass);var invM=iA+iB;var m=invM>0?1/invM:0;var C=aB-aA-this.m_referenceAngle;var omega=2*math_PI$2*this.m_frequencyHz;var d2=2*m*this.m_dampingRatio*omega;var k=m*omega*omega;var h=step.dt;this.m_gamma=h*(d2+h*k);this.m_gamma=this.m_gamma!=0?1/this.m_gamma:0;this.m_bias=C*h*k*this.m_gamma;invM+=this.m_gamma;this.m_mass.ez.z=invM!=0?1/invM:0}else if(K.ez.z==0){K.getInverse22(this.m_mass);this.m_gamma=0;this.m_bias=0}else{K.getSymInverse33(this.m_mass);this.m_gamma=0;this.m_bias=0}if(step.warmStarting){this.m_impulse.mul(step.dtRatio);var P3=Vec2.neo(this.m_impulse.x,this.m_impulse.y);vA2.subMul(mA,P3);wA-=iA*(Vec2.crossVec2Vec2(this.m_rA,P3)+this.m_impulse.z);vB2.addMul(mB,P3);wB+=iB*(Vec2.crossVec2Vec2(this.m_rB,P3)+this.m_impulse.z)}else{this.m_impulse.setZero()}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};WeldJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;if(this.m_frequencyHz>0){var Cdot2=wB-wA;var impulse2=-this.m_mass.ez.z*(Cdot2+this.m_bias+this.m_gamma*this.m_impulse.z);this.m_impulse.z+=impulse2;wA-=iA*impulse2;wB+=iB*impulse2;var Cdot1=Vec2.zero();Cdot1.addCombine(1,vB2,1,Vec2.crossNumVec2(wB,this.m_rB));Cdot1.subCombine(1,vA2,1,Vec2.crossNumVec2(wA,this.m_rA));var impulse1=Vec2.neg(Mat33.mulVec2(this.m_mass,Cdot1));this.m_impulse.x+=impulse1.x;this.m_impulse.y+=impulse1.y;var P3=Vec2.clone(impulse1);vA2.subMul(mA,P3);wA-=iA*Vec2.crossVec2Vec2(this.m_rA,P3);vB2.addMul(mB,P3);wB+=iB*Vec2.crossVec2Vec2(this.m_rB,P3)}else{var Cdot1=Vec2.zero();Cdot1.addCombine(1,vB2,1,Vec2.crossNumVec2(wB,this.m_rB));Cdot1.subCombine(1,vA2,1,Vec2.crossNumVec2(wA,this.m_rA));var Cdot2=wB-wA;var Cdot=new Vec3(Cdot1.x,Cdot1.y,Cdot2);var impulse=Vec3.neg(Mat33.mulVec3(this.m_mass,Cdot));this.m_impulse.add(impulse);var P3=Vec2.neo(impulse.x,impulse.y);vA2.subMul(mA,P3);wA-=iA*(Vec2.crossVec2Vec2(this.m_rA,P3)+impulse.z);vB2.addMul(mB,P3);wB+=iB*(Vec2.crossVec2Vec2(this.m_rB,P3)+impulse.z)}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};WeldJoint2.prototype.solvePositionConstraints=function(step){var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var rA2=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));var rB2=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var positionError;var angularError;var K=new Mat33;K.ex.x=mA+mB+rA2.y*rA2.y*iA+rB2.y*rB2.y*iB;K.ey.x=-rA2.y*rA2.x*iA-rB2.y*rB2.x*iB;K.ez.x=-rA2.y*iA-rB2.y*iB;K.ex.y=K.ey.x;K.ey.y=mA+mB+rA2.x*rA2.x*iA+rB2.x*rB2.x*iB;K.ez.y=rA2.x*iA+rB2.x*iB;K.ex.z=K.ez.x;K.ey.z=K.ez.y;K.ez.z=iA+iB;if(this.m_frequencyHz>0){var C1=Vec2.zero();C1.addCombine(1,cB2,1,rB2);C1.subCombine(1,cA2,1,rA2);positionError=C1.length();angularError=0;var P3=Vec2.neg(K.solve22(C1));cA2.subMul(mA,P3);aA-=iA*Vec2.crossVec2Vec2(rA2,P3);cB2.addMul(mB,P3);aB+=iB*Vec2.crossVec2Vec2(rB2,P3)}else{var C1=Vec2.zero();C1.addCombine(1,cB2,1,rB2);C1.subCombine(1,cA2,1,rA2);var C2=aB-aA-this.m_referenceAngle;positionError=C1.length();angularError=math_abs$2(C2);var C=new Vec3(C1.x,C1.y,C2);var impulse=new Vec3;if(K.ez.z>0){impulse=Vec3.neg(K.solve33(C))}else{var impulse2=Vec2.neg(K.solve22(C1));impulse.set(impulse2.x,impulse2.y,0)}var P3=Vec2.neo(impulse.x,impulse.y);cA2.subMul(mA,P3);aA-=iA*(Vec2.crossVec2Vec2(rA2,P3)+impulse.z);cB2.addMul(mB,P3);aB+=iB*(Vec2.crossVec2Vec2(rB2,P3)+impulse.z)}this.m_bodyA.c_position.c=cA2;this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c=cB2;this.m_bodyB.c_position.a=aB;return positionError<=SettingsInternal.linearSlop&&angularError<=SettingsInternal.angularSlop};WeldJoint2.TYPE="weld-joint";return WeldJoint2}(Joint);var math_abs$1=Math.abs;var math_PI$1=Math.PI;var DEFAULTS={enableMotor:false,maxMotorTorque:0,motorSpeed:0,frequencyHz:2,dampingRatio:.7};var WheelJoint=function(_super){__extends$a(WheelJoint2,_super);function WheelJoint2(def,bodyA,bodyB,anchor,axis){var _this=this;if(!(_this instanceof WheelJoint2)){return new WheelJoint2(def,bodyA,bodyB,anchor,axis)}def=options(def,DEFAULTS);_this=_super.call(this,def,bodyA,bodyB)||this;bodyA=_this.m_bodyA;bodyB=_this.m_bodyB;_this.m_ax=Vec2.zero();_this.m_ay=Vec2.zero();_this.m_type=WheelJoint2.TYPE;_this.m_localAnchorA=Vec2.clone(anchor?bodyA.getLocalPoint(anchor):def.localAnchorA||Vec2.zero());_this.m_localAnchorB=Vec2.clone(anchor?bodyB.getLocalPoint(anchor):def.localAnchorB||Vec2.zero());if(Vec2.isValid(axis)){_this.m_localXAxisA=bodyA.getLocalVector(axis)}else if(Vec2.isValid(def.localAxisA)){_this.m_localXAxisA=Vec2.clone(def.localAxisA)}else if(Vec2.isValid(def.localAxis)){_this.m_localXAxisA=Vec2.clone(def.localAxis)}else{_this.m_localXAxisA=Vec2.neo(1,0)}_this.m_localYAxisA=Vec2.crossNumVec2(1,_this.m_localXAxisA);_this.m_mass=0;_this.m_impulse=0;_this.m_motorMass=0;_this.m_motorImpulse=0;_this.m_springMass=0;_this.m_springImpulse=0;_this.m_maxMotorTorque=def.maxMotorTorque;_this.m_motorSpeed=def.motorSpeed;_this.m_enableMotor=def.enableMotor;_this.m_frequencyHz=def.frequencyHz;_this.m_dampingRatio=def.dampingRatio;_this.m_bias=0;_this.m_gamma=0;return _this}WheelJoint2.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,enableMotor:this.m_enableMotor,maxMotorTorque:this.m_maxMotorTorque,motorSpeed:this.m_motorSpeed,frequencyHz:this.m_frequencyHz,dampingRatio:this.m_dampingRatio,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,localAxisA:this.m_localXAxisA}};WheelJoint2._deserialize=function(data,world,restore){data=__assign$1({},data);data.bodyA=restore(Body,data.bodyA,world);data.bodyB=restore(Body,data.bodyB,world);var joint=new WheelJoint2(data);return joint};WheelJoint2.prototype._reset=function(def){if(def.anchorA){this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA))}else if(def.localAnchorA){this.m_localAnchorA.setVec2(def.localAnchorA)}if(def.anchorB){this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB))}else if(def.localAnchorB){this.m_localAnchorB.setVec2(def.localAnchorB)}if(def.localAxisA){this.m_localXAxisA.setVec2(def.localAxisA);this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1,def.localAxisA))}if(def.enableMotor!==void 0){this.m_enableMotor=def.enableMotor}if(Number.isFinite(def.maxMotorTorque)){this.m_maxMotorTorque=def.maxMotorTorque}if(Number.isFinite(def.motorSpeed)){this.m_motorSpeed=def.motorSpeed}if(Number.isFinite(def.frequencyHz)){this.m_frequencyHz=def.frequencyHz}if(Number.isFinite(def.dampingRatio)){this.m_dampingRatio=def.dampingRatio}};WheelJoint2.prototype.getLocalAnchorA=function(){return this.m_localAnchorA};WheelJoint2.prototype.getLocalAnchorB=function(){return this.m_localAnchorB};WheelJoint2.prototype.getLocalAxisA=function(){return this.m_localXAxisA};WheelJoint2.prototype.getJointTranslation=function(){var bA=this.m_bodyA;var bB=this.m_bodyB;var pA2=bA.getWorldPoint(this.m_localAnchorA);var pB2=bB.getWorldPoint(this.m_localAnchorB);var d2=Vec2.sub(pB2,pA2);var axis=bA.getWorldVector(this.m_localXAxisA);var translation2=Vec2.dot(d2,axis);return translation2};WheelJoint2.prototype.getJointSpeed=function(){var wA=this.m_bodyA.m_angularVelocity;var wB=this.m_bodyB.m_angularVelocity;return wB-wA};WheelJoint2.prototype.isMotorEnabled=function(){return this.m_enableMotor};WheelJoint2.prototype.enableMotor=function(flag){if(flag==this.m_enableMotor)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_enableMotor=flag};WheelJoint2.prototype.setMotorSpeed=function(speed){if(speed==this.m_motorSpeed)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_motorSpeed=speed};WheelJoint2.prototype.getMotorSpeed=function(){return this.m_motorSpeed};WheelJoint2.prototype.setMaxMotorTorque=function(torque){if(torque==this.m_maxMotorTorque)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_maxMotorTorque=torque};WheelJoint2.prototype.getMaxMotorTorque=function(){return this.m_maxMotorTorque};WheelJoint2.prototype.getMotorTorque=function(inv_dt){return inv_dt*this.m_motorImpulse};WheelJoint2.prototype.setSpringFrequencyHz=function(hz){this.m_frequencyHz=hz};WheelJoint2.prototype.getSpringFrequencyHz=function(){return this.m_frequencyHz};WheelJoint2.prototype.setSpringDampingRatio=function(ratio){this.m_dampingRatio=ratio};WheelJoint2.prototype.getSpringDampingRatio=function(){return this.m_dampingRatio};WheelJoint2.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)};WheelJoint2.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)};WheelJoint2.prototype.getReactionForce=function(inv_dt){return Vec2.combine(this.m_impulse,this.m_ay,this.m_springImpulse,this.m_ax).mul(inv_dt)};WheelJoint2.prototype.getReactionTorque=function(inv_dt){return inv_dt*this.m_motorImpulse};WheelJoint2.prototype.initVelocityConstraints=function(step){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter;this.m_localCenterB=this.m_bodyB.m_sweep.localCenter;this.m_invMassA=this.m_bodyA.m_invMass;this.m_invMassB=this.m_bodyB.m_invMass;this.m_invIA=this.m_bodyA.m_invI;this.m_invIB=this.m_bodyB.m_invI;var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var rA2=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));var rB2=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var d2=Vec2.zero();d2.addCombine(1,cB2,1,rB2);d2.subCombine(1,cA2,1,rA2);{this.m_ay=Rot.mulVec2(qA,this.m_localYAxisA);this.m_sAy=Vec2.crossVec2Vec2(Vec2.add(d2,rA2),this.m_ay);this.m_sBy=Vec2.crossVec2Vec2(rB2,this.m_ay);this.m_mass=mA+mB+iA*this.m_sAy*this.m_sAy+iB*this.m_sBy*this.m_sBy;if(this.m_mass>0){this.m_mass=1/this.m_mass}}this.m_springMass=0;this.m_bias=0;this.m_gamma=0;if(this.m_frequencyHz>0){this.m_ax=Rot.mulVec2(qA,this.m_localXAxisA);this.m_sAx=Vec2.crossVec2Vec2(Vec2.add(d2,rA2),this.m_ax);this.m_sBx=Vec2.crossVec2Vec2(rB2,this.m_ax);var invMass=mA+mB+iA*this.m_sAx*this.m_sAx+iB*this.m_sBx*this.m_sBx;if(invMass>0){this.m_springMass=1/invMass;var C=Vec2.dot(d2,this.m_ax);var omega=2*math_PI$1*this.m_frequencyHz;var damp=2*this.m_springMass*this.m_dampingRatio*omega;var k=this.m_springMass*omega*omega;var h=step.dt;this.m_gamma=h*(damp+h*k);if(this.m_gamma>0){this.m_gamma=1/this.m_gamma}this.m_bias=C*h*k*this.m_gamma;this.m_springMass=invMass+this.m_gamma;if(this.m_springMass>0){this.m_springMass=1/this.m_springMass}}}else{this.m_springImpulse=0}if(this.m_enableMotor){this.m_motorMass=iA+iB;if(this.m_motorMass>0){this.m_motorMass=1/this.m_motorMass}}else{this.m_motorMass=0;this.m_motorImpulse=0}if(step.warmStarting){this.m_impulse*=step.dtRatio;this.m_springImpulse*=step.dtRatio;this.m_motorImpulse*=step.dtRatio;var P3=Vec2.combine(this.m_impulse,this.m_ay,this.m_springImpulse,this.m_ax);var LA=this.m_impulse*this.m_sAy+this.m_springImpulse*this.m_sAx+this.m_motorImpulse;var LB=this.m_impulse*this.m_sBy+this.m_springImpulse*this.m_sBx+this.m_motorImpulse;vA2.subMul(this.m_invMassA,P3);wA-=this.m_invIA*LA;vB2.addMul(this.m_invMassB,P3);wB+=this.m_invIB*LB}else{this.m_impulse=0;this.m_springImpulse=0;this.m_motorImpulse=0}this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB};WheelJoint2.prototype.solveVelocityConstraints=function(step){var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;{var Cdot=Vec2.dot(this.m_ax,vB2)-Vec2.dot(this.m_ax,vA2)+this.m_sBx*wB-this.m_sAx*wA;var impulse=-this.m_springMass*(Cdot+this.m_bias+this.m_gamma*this.m_springImpulse);this.m_springImpulse+=impulse;var P3=Vec2.mulNumVec2(impulse,this.m_ax);var LA=impulse*this.m_sAx;var LB=impulse*this.m_sBx;vA2.subMul(mA,P3);wA-=iA*LA;vB2.addMul(mB,P3);wB+=iB*LB}{var Cdot=wB-wA-this.m_motorSpeed;var impulse=-this.m_motorMass*Cdot;var oldImpulse=this.m_motorImpulse;var maxImpulse=step.dt*this.m_maxMotorTorque;this.m_motorImpulse=clamp$1(this.m_motorImpulse+impulse,-maxImpulse,maxImpulse);impulse=this.m_motorImpulse-oldImpulse;wA-=iA*impulse;wB+=iB*impulse}{var Cdot=Vec2.dot(this.m_ay,vB2)-Vec2.dot(this.m_ay,vA2)+this.m_sBy*wB-this.m_sAy*wA;var impulse=-this.m_mass*Cdot;this.m_impulse+=impulse;var P3=Vec2.mulNumVec2(impulse,this.m_ay);var LA=impulse*this.m_sAy;var LB=impulse*this.m_sBy;vA2.subMul(mA,P3);wA-=iA*LA;vB2.addMul(mB,P3);wB+=iB*LB}this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB};WheelJoint2.prototype.solvePositionConstraints=function(step){var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var rA2=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));var rB2=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var d2=Vec2.zero();d2.addCombine(1,cB2,1,rB2);d2.subCombine(1,cA2,1,rA2);var ay=Rot.mulVec2(qA,this.m_localYAxisA);var sAy=Vec2.crossVec2Vec2(Vec2.add(d2,rA2),ay);var sBy=Vec2.crossVec2Vec2(rB2,ay);var C=Vec2.dot(d2,ay);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;var impulse=k!=0?-C/k:0;var P3=Vec2.mulNumVec2(impulse,ay);var LA=impulse*sAy;var LB=impulse*sBy;cA2.subMul(this.m_invMassA,P3);aA-=this.m_invIA*LA;cB2.addMul(this.m_invMassB,P3);aB+=this.m_invIB*LB;this.m_bodyA.c_position.c.setVec2(cA2);this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c.setVec2(cB2);this.m_bodyB.c_position.a=aB;return math_abs$1(C)<=SettingsInternal.linearSlop};WheelJoint2.TYPE="wheel-joint";return WheelJoint2}(Joint);var _a;var SID=0;var SERIALIZE_REF_TYPES={World:World,Body:Body,Joint:Joint,Fixture:Fixture,Shape:Shape};var DESERIALIZE_BY_REF_TYPE={Vec2:Vec2,Vec3:Vec3,World:World,Body:Body,Joint:Joint,Fixture:Fixture,Shape:Shape};var DESERIALIZE_BY_TYPE_FIELD=(_a={},_a[Body.STATIC]=Body,_a[Body.DYNAMIC]=Body,_a[Body.KINEMATIC]=Body,_a[ChainShape.TYPE]=ChainShape,_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);var DEFAULT_OPTIONS={rootClass:World,preSerialize:function(obj){return obj},postSerialize:function(data,obj){return data},preDeserialize:function(data){return data},postDeserialize:function(obj,data){return obj}};var Serializer=function(){function Serializer2(options2){var _this=this;this.toJson=function(root){var preSerialize=_this.options.preSerialize;var postSerialize=_this.options.postSerialize;var json=[];var refQueue=[root];var refMemoById={};function addToRefQueue(value,typeName){value.__sid=value.__sid||++SID;if(!refMemoById[value.__sid]){refQueue.push(value);var index=json.length+refQueue.length;var ref={refIndex:index,refType:typeName};refMemoById[value.__sid]=ref}return refMemoById[value.__sid]}function serializeWithHooks(obj2){obj2=preSerialize(obj2);var data=obj2._serialize();data=postSerialize(data,obj2);return data}function traverse(value,noRefType){if(noRefType===void 0){noRefType=false}if(typeof value!=="object"||value===null){return value}if(typeof value._serialize==="function"){if(!noRefType){for(var typeName in SERIALIZE_REF_TYPES){if(value instanceof SERIALIZE_REF_TYPES[typeName]){return addToRefQueue(value,typeName)}}}value=serializeWithHooks(value)}if(Array.isArray(value)){var newValue=[];for(var key=0;keyradius*radius){return}manifold.type=exports2.ManifoldType.e_circles;copyVec2(manifold.localPoint,circleA.m_p);zeroVec2(manifold.localNormal);manifold.pointCount=1;copyVec2(manifold.points[0].localPoint,circleB.m_p);manifold.points[0].id.setFeatures(0,exports2.ContactFeatureType.e_vertex,0,exports2.ContactFeatureType.e_vertex)};Contact.addType(EdgeShape.TYPE,CircleShape.TYPE,EdgeCircleContact);Contact.addType(ChainShape.TYPE,CircleShape.TYPE,ChainCircleContact);function EdgeCircleContact(manifold,xfA2,fixtureA,indexA,xfB2,fixtureB,indexB){var shapeA=fixtureA.getShape();var shapeB=fixtureB.getShape();CollideEdgeCircle(manifold,shapeA,xfA2,shapeB,xfB2)}function ChainCircleContact(manifold,xfA2,fixtureA,indexA,xfB2,fixtureB,indexB){var chain=fixtureA.getShape();var edge=new EdgeShape;chain.getChildEdge(edge,indexA);var shapeA=edge;var shapeB=fixtureB.getShape();CollideEdgeCircle(manifold,shapeA,xfA2,shapeB,xfB2)}var e=vec2(0,0);var e1=vec2(0,0);var e2=vec2(0,0);var Q=vec2(0,0);var P=vec2(0,0);var n$2=vec2(0,0);var CollideEdgeCircle=function(manifold,edgeA,xfA2,circleB,xfB2){manifold.pointCount=0;retransformVec2(Q,xfB2,xfA2,circleB.m_p);var A=edgeA.m_vertex1;var B=edgeA.m_vertex2;subVec2(e,B,A);var u=dotVec2(e,B)-dotVec2(e,Q);var v3=dotVec2(e,Q)-dotVec2(e,A);var radius=edgeA.m_radius+circleB.m_radius;if(v3<=0){copyVec2(P,A);var dd_1=distSqrVec2(Q,A);if(dd_1>radius*radius){return}if(edgeA.m_hasVertex0){var A1=edgeA.m_vertex0;var B1=A;subVec2(e1,B1,A1);var u1=dotVec2(e1,B1)-dotVec2(e1,Q);if(u1>0){return}}manifold.type=exports2.ManifoldType.e_circles;zeroVec2(manifold.localNormal);copyVec2(manifold.localPoint,P);manifold.pointCount=1;copyVec2(manifold.points[0].localPoint,circleB.m_p);manifold.points[0].id.setFeatures(0,exports2.ContactFeatureType.e_vertex,0,exports2.ContactFeatureType.e_vertex);return}if(u<=0){copyVec2(P,B);var dd_2=distSqrVec2(Q,P);if(dd_2>radius*radius){return}if(edgeA.m_hasVertex3){var B2=edgeA.m_vertex3;var A2=B;subVec2(e2,B2,A2);var v22=dotVec2(e2,Q)-dotVec2(e2,A2);if(v22>0){return}}manifold.type=exports2.ManifoldType.e_circles;zeroVec2(manifold.localNormal);copyVec2(manifold.localPoint,P);manifold.pointCount=1;copyVec2(manifold.points[0].localPoint,circleB.m_p);manifold.points[0].id.setFeatures(1,exports2.ContactFeatureType.e_vertex,0,exports2.ContactFeatureType.e_vertex);return}var den=lengthSqrVec2(e);combine2Vec2(P,u/den,A,v3/den,B);var dd=distSqrVec2(Q,P);if(dd>radius*radius){return}crossNumVec2(n$2,1,e);if(dotVec2(n$2,Q)-dotVec2(n$2,A)<0){negVec2(n$2)}normalizeVec2(n$2);manifold.type=exports2.ManifoldType.e_faceA;copyVec2(manifold.localNormal,n$2);copyVec2(manifold.localPoint,A);manifold.pointCount=1;copyVec2(manifold.points[0].localPoint,circleB.m_p);manifold.points[0].id.setFeatures(0,exports2.ContactFeatureType.e_face,0,exports2.ContactFeatureType.e_vertex)};var incidentEdge=[new ClipVertex,new ClipVertex];var clipPoints1$1=[new ClipVertex,new ClipVertex];var clipPoints2$1=[new ClipVertex,new ClipVertex];var clipSegmentToLineNormal=vec2(0,0);var v1=vec2(0,0);var n$1=vec2(0,0);var xf$1=transform(0,0,0);var v11=vec2(0,0);var v12=vec2(0,0);var localTangent=vec2(0,0);var localNormal=vec2(0,0);var planePoint=vec2(0,0);var tangent=vec2(0,0);var normal$1=vec2(0,0);var normal1$1=vec2(0,0);Contact.addType(PolygonShape.TYPE,PolygonShape.TYPE,PolygonContact);function PolygonContact(manifold,xfA2,fixtureA,indexA,xfB2,fixtureB,indexB){CollidePolygons(manifold,fixtureA.getShape(),xfA2,fixtureB.getShape(),xfB2)}function findMaxSeparation(poly1,xf1,poly2,xf2,output2){var count1=poly1.m_count;var count2=poly2.m_count;var n1s=poly1.m_normals;var v1s=poly1.m_vertices;var v2s=poly2.m_vertices;detransformTransform(xf$1,xf2,xf1);var bestIndex=0;var maxSeparation2=-Infinity;for(var i=0;imaxSeparation2){maxSeparation2=si;bestIndex=i}}output2.maxSeparation=maxSeparation2;output2.bestIndex=bestIndex}function findIncidentEdge(clipVertex,poly1,xf1,edge12,poly2,xf2){var normals1=poly1.m_normals;var count2=poly2.m_count;var vertices2=poly2.m_vertices;var normals2=poly2.m_normals;rerotVec2(normal1$1,xf2.q,xf1.q,normals1[edge12]);var index=0;var minDot=Infinity;for(var i=0;itotalRadius)return;findMaxSeparation(polyB,xfB2,polyA,xfA2,maxSeparation);var edgeB=maxSeparation.bestIndex;var separationB=maxSeparation.maxSeparation;if(separationB>totalRadius)return;var poly1;var poly2;var xf1;var xf2;var edge12;var flip;var k_tol=.1*SettingsInternal.linearSlop;if(separationB>separationA+k_tol){poly1=polyB;poly2=polyA;xf1=xfB2;xf2=xfA2;edge12=edgeB;manifold.type=exports2.ManifoldType.e_faceB;flip=true}else{poly1=polyA;poly2=polyB;xf1=xfA2;xf2=xfB2;edge12=edgeA;manifold.type=exports2.ManifoldType.e_faceA;flip=false}incidentEdge[0].recycle(),incidentEdge[1].recycle();findIncidentEdge(incidentEdge,poly1,xf1,edge12,poly2,xf2);var count1=poly1.m_count;var vertices1=poly1.m_vertices;var iv1=edge12;var iv2=edge12+1radius){return}if(s2>separation){separation=s2;normalIndex=i}}var vertIndex1=normalIndex;var vertIndex2=vertIndex1+1radius*radius){return}manifold.pointCount=1;manifold.type=exports2.ManifoldType.e_faceA;subVec2(manifold.localNormal,cLocal,v13);normalizeVec2(manifold.localNormal);copyVec2(manifold.localPoint,v13);copyVec2(manifold.points[0].localPoint,circleB.m_p);manifold.points[0].id.setFeatures(0,exports2.ContactFeatureType.e_vertex,0,exports2.ContactFeatureType.e_vertex)}else if(u2<=0){if(distSqrVec2(cLocal,v22)>radius*radius){return}manifold.pointCount=1;manifold.type=exports2.ManifoldType.e_faceA;subVec2(manifold.localNormal,cLocal,v22);normalizeVec2(manifold.localNormal);copyVec2(manifold.localPoint,v22);copyVec2(manifold.points[0].localPoint,circleB.m_p);manifold.points[0].id.setFeatures(0,exports2.ContactFeatureType.e_vertex,0,exports2.ContactFeatureType.e_vertex)}else{combine2Vec2(faceCenter,.5,v13,.5,v22);var separation_1=dotVec2(cLocal,normals[vertIndex1])-dotVec2(faceCenter,normals[vertIndex1]);if(separation_1>radius){return}manifold.pointCount=1;manifold.type=exports2.ManifoldType.e_faceA;copyVec2(manifold.localNormal,normals[vertIndex1]);copyVec2(manifold.localPoint,faceCenter);copyVec2(manifold.points[0].localPoint,circleB.m_p);manifold.points[0].id.setFeatures(0,exports2.ContactFeatureType.e_vertex,0,exports2.ContactFeatureType.e_vertex)}};var math_min$1=Math.min;Contact.addType(EdgeShape.TYPE,PolygonShape.TYPE,EdgePolygonContact);Contact.addType(ChainShape.TYPE,PolygonShape.TYPE,ChainPolygonContact);function EdgePolygonContact(manifold,xfA2,fA,indexA,xfB2,fB,indexB){CollideEdgePolygon(manifold,fA.getShape(),xfA2,fB.getShape(),xfB2)}var edge_reuse=new EdgeShape;function ChainPolygonContact(manifold,xfA2,fA,indexA,xfB2,fB,indexB){var chain=fA.getShape();chain.getChildEdge(edge_reuse,indexA);CollideEdgePolygon(manifold,edge_reuse,xfA2,fB.getShape(),xfB2)}var EPAxisType;(function(EPAxisType2){EPAxisType2[EPAxisType2["e_unknown"]=-1]="e_unknown";EPAxisType2[EPAxisType2["e_edgeA"]=1]="e_edgeA";EPAxisType2[EPAxisType2["e_edgeB"]=2]="e_edgeB"})(EPAxisType||(EPAxisType={}));var VertexType;(function(VertexType2){VertexType2[VertexType2["e_isolated"]=0]="e_isolated";VertexType2[VertexType2["e_concave"]=1]="e_concave";VertexType2[VertexType2["e_convex"]=2]="e_convex"})(VertexType||(VertexType={}));var EPAxis=function(){function EPAxis2(){}return EPAxis2}();var TempPolygon=function(){function TempPolygon2(){this.vertices=[];this.normals=[];this.count=0;for(var i=0;i=0;offset0=Vec2.dot(normal0,centroidB)-Vec2.dot(normal0,v0)}if(hasVertex3){subVec2(edge2,v3,v22);normalizeVec2(edge2);setVec2(normal2,edge2.y,-edge2.x);convex2=Vec2.crossVec2Vec2(edge1,edge2)>0;offset2=Vec2.dot(normal2,centroidB)-Vec2.dot(normal2,v22)}var front;zeroVec2(normal);zeroVec2(lowerLimit);zeroVec2(upperLimit);if(hasVertex0&&hasVertex3){if(convex1&&convex2){front=offset0>=0||offset1>=0||offset2>=0;if(front){copyVec2(normal,normal1);copyVec2(lowerLimit,normal0);copyVec2(upperLimit,normal2)}else{scaleVec2(normal,-1,normal1);scaleVec2(lowerLimit,-1,normal1);scaleVec2(upperLimit,-1,normal1)}}else if(convex1){front=offset0>=0||offset1>=0&&offset2>=0;if(front){copyVec2(normal,normal1);copyVec2(lowerLimit,normal0);copyVec2(upperLimit,normal1)}else{scaleVec2(normal,-1,normal1);scaleVec2(lowerLimit,-1,normal2);scaleVec2(upperLimit,-1,normal1)}}else if(convex2){front=offset2>=0||offset0>=0&&offset1>=0;if(front){copyVec2(normal,normal1);copyVec2(lowerLimit,normal1);copyVec2(upperLimit,normal2)}else{scaleVec2(normal,-1,normal1);scaleVec2(lowerLimit,-1,normal1);scaleVec2(upperLimit,-1,normal0)}}else{front=offset0>=0&&offset1>=0&&offset2>=0;if(front){copyVec2(normal,normal1);copyVec2(lowerLimit,normal1);copyVec2(upperLimit,normal1)}else{scaleVec2(normal,-1,normal1);scaleVec2(lowerLimit,-1,normal2);scaleVec2(upperLimit,-1,normal0)}}}else if(hasVertex0){if(convex1){front=offset0>=0||offset1>=0;if(front){copyVec2(normal,normal1);copyVec2(lowerLimit,normal0);scaleVec2(upperLimit,-1,normal1)}else{scaleVec2(normal,-1,normal1);copyVec2(lowerLimit,normal1);scaleVec2(upperLimit,-1,normal1)}}else{front=offset0>=0&&offset1>=0;if(front){copyVec2(normal,normal1);copyVec2(lowerLimit,normal1);scaleVec2(upperLimit,-1,normal1)}else{scaleVec2(normal,-1,normal1);copyVec2(lowerLimit,normal1);scaleVec2(upperLimit,-1,normal0)}}}else if(hasVertex3){if(convex2){front=offset1>=0||offset2>=0;if(front){copyVec2(normal,normal1);scaleVec2(lowerLimit,-1,normal1);copyVec2(upperLimit,normal2)}else{scaleVec2(normal,-1,normal1);scaleVec2(lowerLimit,-1,normal1);copyVec2(upperLimit,normal1)}}else{front=offset1>=0&&offset2>=0;if(front){copyVec2(normal,normal1);scaleVec2(lowerLimit,-1,normal1);copyVec2(upperLimit,normal1)}else{scaleVec2(normal,-1,normal1);scaleVec2(lowerLimit,-1,normal2);copyVec2(upperLimit,normal1)}}}else{front=offset1>=0;if(front){copyVec2(normal,normal1);scaleVec2(lowerLimit,-1,normal1);scaleVec2(upperLimit,-1,normal1)}else{scaleVec2(normal,-1,normal1);copyVec2(lowerLimit,normal1);copyVec2(upperLimit,normal1)}}polygonBA.count=polygonB.m_count;for(var i=0;iradius){return}{polygonAxis.type=EPAxisType.e_unknown;polygonAxis.index=-1;polygonAxis.separation=-Infinity;setVec2(perp,-normal.y,normal.x);for(var i=0;iradius){polygonAxis.type=EPAxisType.e_edgeB;polygonAxis.index=i;polygonAxis.separation=s2;break}if(dotVec2(n,perp)>=0){if(dotVec2(n,normal)-dotVec2(upperLimit,normal)<-SettingsInternal.angularSlop){continue}}else{if(dotVec2(n,normal)-dotVec2(lowerLimit,normal)<-SettingsInternal.angularSlop){continue}}if(s2>polygonAxis.separation){polygonAxis.type=EPAxisType.e_edgeB;polygonAxis.index=i;polygonAxis.separation=s2}}}if(polygonAxis.type!=EPAxisType.e_unknown&&polygonAxis.separation>radius){return}var k_relativeTol=.98;var k_absoluteTol=.001;var primaryAxis;if(polygonAxis.type==EPAxisType.e_unknown){primaryAxis=edgeAxis}else if(polygonAxis.separation>k_relativeTol*edgeAxis.separation+k_absoluteTol){primaryAxis=polygonAxis}else{primaryAxis=edgeAxis}ie[0].recycle(),ie[1].recycle();if(primaryAxis.type==EPAxisType.e_edgeA){manifold.type=exports2.ManifoldType.e_faceA;var bestIndex=0;var bestValue=dotVec2(normal,polygonBA.normals[0]);for(var i=1;imin){num=(num-min)%(max-min);return num+(num<0?max:min)}else{num=(num-max)%(min-max);return num+(num<=0?min:max)}}function clamp(num,min,max){if(nummax){return max}else{return num}}function length(x2,y){return math_sqrt$1(x2*x2+y*y)}var math=Object.create(Math);math.random=random;math.wrap=wrap;math.clamp=clamp;math.length=length;math.rotate=wrap;math.limit=clamp;var Matrix=function(){function Matrix2(a2,b2,c2,d2,e3,f){this.a=1;this.b=0;this.c=0;this.d=1;this.e=0;this.f=0;if(typeof a2==="object"){this.reset(a2)}else{this.reset(a2,b2,c2,d2,e3,f)}}Matrix2.prototype.toString=function(){return"["+this.a+", "+this.b+", "+this.c+", "+this.d+", "+this.e+", "+this.f+"]"};Matrix2.prototype.clone=function(){return new Matrix2(this.a,this.b,this.c,this.d,this.e,this.f)};Matrix2.prototype.reset=function(a2,b2,c2,d2,e3,f){this._dirty=true;if(typeof a2==="object"){this.a=a2.a;this.d=a2.d;this.b=a2.b;this.c=a2.c;this.e=a2.e;this.f=a2.f}else{this.a=typeof a2==="number"?a2:1;this.b=typeof b2==="number"?b2:0;this.c=typeof c2==="number"?c2:0;this.d=typeof d2==="number"?d2:1;this.e=typeof e3==="number"?e3:0;this.f=typeof f==="number"?f:0}return this};Matrix2.prototype.identity=function(){this._dirty=true;this.a=1;this.b=0;this.c=0;this.d=1;this.e=0;this.f=0;return this};Matrix2.prototype.rotate=function(angle){if(!angle){return this}this._dirty=true;var u=angle?Math.cos(angle):1;var v3=angle?Math.sin(angle):0;var a2=u*this.a-v3*this.b;var b2=u*this.b+v3*this.a;var c2=u*this.c-v3*this.d;var d2=u*this.d+v3*this.c;var e3=u*this.e-v3*this.f;var f=u*this.f+v3*this.e;this.a=a2;this.b=b2;this.c=c2;this.d=d2;this.e=e3;this.f=f;return this};Matrix2.prototype.translate=function(x2,y){if(!x2&&!y){return this}this._dirty=true;this.e+=x2;this.f+=y;return this};Matrix2.prototype.scale=function(x2,y){if(!(x2-1)&&!(y-1)){return this}this._dirty=true;this.a*=x2;this.b*=y;this.c*=x2;this.d*=y;this.e*=x2;this.f*=y;return this};Matrix2.prototype.skew=function(x2,y){if(!x2&&!y){return this}this._dirty=true;var a2=this.a+this.b*x2;var b2=this.b+this.a*y;var c2=this.c+this.d*x2;var d2=this.d+this.c*y;var e3=this.e+this.f*x2;var f=this.f+this.e*y;this.a=a2;this.b=b2;this.c=c2;this.d=d2;this.e=e3;this.f=f;return this};Matrix2.prototype.concat=function(m){this._dirty=true;var a2=this.a*m.a+this.b*m.c;var b2=this.b*m.d+this.a*m.b;var c2=this.c*m.a+this.d*m.c;var d2=this.d*m.d+this.c*m.b;var e3=this.e*m.a+m.e+this.f*m.c;var f=this.f*m.d+m.f+this.e*m.b;this.a=a2;this.b=b2;this.c=c2;this.d=d2;this.e=e3;this.f=f;return this};Matrix2.prototype.inverse=function(){if(this._dirty){this._dirty=false;if(!this.inverted){this.inverted=new Matrix2}var z=this.a*this.d-this.b*this.c;this.inverted.a=this.d/z;this.inverted.b=-this.b/z;this.inverted.c=-this.c/z;this.inverted.d=this.a/z;this.inverted.e=(this.c*this.f-this.e*this.d)/z;this.inverted.f=(this.e*this.b-this.a*this.f)/z}return this.inverted};Matrix2.prototype.map=function(p,q){q=q||{x:0,y:0};q.x=this.a*p.x+this.c*p.y+this.e;q.y=this.b*p.x+this.d*p.y+this.f;return q};Matrix2.prototype.mapX=function(x2,y){if(typeof x2==="object"){y=x2.y;x2=x2.x}return this.a*x2+this.c*y+this.e};Matrix2.prototype.mapY=function(x2,y){if(typeof x2==="object"){y=x2.y;x2=x2.x}return this.b*x2+this.d*y+this.f};return Matrix2}();var objectToString=Object.prototype.toString;function isFn(value){var str=objectToString.call(value);return str==="[object Function]"||str==="[object GeneratorFunction]"||str==="[object AsyncFunction]"}function isHash(value){return objectToString.call(value)==="[object Object]"&&value.constructor===Object}const stats={create:0,tick:0,node:0,draw:0,fps:0};var uid=function(){return Date.now().toString(36)+Math.random().toString(36).slice(2)};var Texture=function(){function Texture2(){this.uid="texture:"+uid();this.sx=0;this.sy=0;this.dx=0;this.dy=0}Texture2.prototype.setSourceCoordinate=function(x2,y){this.sx=x2;this.sy=y};Texture2.prototype.setSourceDimension=function(w,h){this.sw=w;this.sh=h};Texture2.prototype.setDestinationCoordinate=function(x2,y){this.dx=x2;this.dy=y};Texture2.prototype.setDestinationDimension=function(w,h){this.dw=w;this.dh=h};Texture2.prototype.draw=function(context,x1,y1,w1,h1,x2,y2,w2,h2){var sx=this.sx;var sy=this.sy;var sw=this.sw;var sh=this.sh;var dx=this.dx;var dy=this.dy;var dw=this.dw;var dh=this.dh;if(typeof x1==="number"||typeof y1==="number"||typeof w1==="number"||typeof h1==="number"||typeof x2==="number"||typeof y2==="number"||typeof w2==="number"||typeof h2==="number"){if(typeof x2==="number"||typeof y2==="number"||typeof w2==="number"||typeof h2==="number"){sx+=x1;sy+=y1;sw=w1!==null&&w1!==void 0?w1:sw;sh=h1!==null&&h1!==void 0?h1:sh;dx+=x2;dy+=y2;dw=w2!==null&&w2!==void 0?w2:dw;dh=h2!==null&&h2!==void 0?h2:dh}else{dx+=x1;dy+=y1;dw=w1;dh=h1}}this.drawWithNormalizedArgs(context,sx,sy,sw,sh,dx,dy,dw,dh)};return Texture2}();var __extends$9=function(){var extendStatics2=function(d2,b2){extendStatics2=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d22,b22){d22.__proto__=b22}||function(d22,b22){for(var p in b22)if(Object.prototype.hasOwnProperty.call(b22,p))d22[p]=b22[p]};return extendStatics2(d2,b2)};return function(d2,b2){if(typeof b2!=="function"&&b2!==null)throw new TypeError("Class extends value "+String(b2)+" is not a constructor or null");extendStatics2(d2,b2);function __(){this.constructor=d2}d2.prototype=b2===null?Object.create(b2):(__.prototype=b2.prototype,new __)}}();var ImageTexture=function(_super){__extends$9(ImageTexture2,_super);function ImageTexture2(source,pixelRatio){var _this=_super.call(this)||this;_this._pixelRatio=1;if(typeof source==="object"){_this.setSourceImage(source,pixelRatio)}return _this}ImageTexture2.prototype.setSourceImage=function(image2,pixelRatio){if(pixelRatio===void 0){pixelRatio=1}this._source=image2;this._pixelRatio=pixelRatio};ImageTexture2.prototype.getWidth=function(){return this._source.width/this._pixelRatio};ImageTexture2.prototype.getHeight=function(){return this._source.height/this._pixelRatio};ImageTexture2.prototype.prerender=function(context){return false};ImageTexture2.prototype.drawWithNormalizedArgs=function(context,sx,sy,sw,sh,dx,dy,dw,dh){var image2=this._source;if(image2===null||typeof image2!=="object"){return}sw=sw!==null&&sw!==void 0?sw:this.getWidth();sh=sh!==null&&sh!==void 0?sh:this.getHeight();dw=dw!==null&&dw!==void 0?dw:sw;dh=dh!==null&&dh!==void 0?dh:sh;sx*=this._pixelRatio;sy*=this._pixelRatio;sw*=this._pixelRatio;sh*=this._pixelRatio;try{stats.draw++;context.drawImage(image2,sx,sy,sw,sh,dx,dy,dw,dh)}catch(ex){if(!this._draw_failed){console.log("Unable to draw: ",image2);console.log(ex);this._draw_failed=true}}};return ImageTexture2}(Texture);var __extends$8=function(){var extendStatics2=function(d2,b2){extendStatics2=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d22,b22){d22.__proto__=b22}||function(d22,b22){for(var p in b22)if(Object.prototype.hasOwnProperty.call(b22,p))d22[p]=b22[p]};return extendStatics2(d2,b2)};return function(d2,b2){if(typeof b2!=="function"&&b2!==null)throw new TypeError("Class extends value "+String(b2)+" is not a constructor or null");extendStatics2(d2,b2);function __(){this.constructor=d2}d2.prototype=b2===null?Object.create(b2):(__.prototype=b2.prototype,new __)}}();var PipeTexture=function(_super){__extends$8(PipeTexture2,_super);function PipeTexture2(source){var _this=_super.call(this)||this;_this._source=source;return _this}PipeTexture2.prototype.setSourceTexture=function(texture2){this._source=texture2};PipeTexture2.prototype.getWidth=function(){var _a2,_b;return(_b=(_a2=this.dw)!==null&&_a2!==void 0?_a2:this.sw)!==null&&_b!==void 0?_b:this._source.getWidth()};PipeTexture2.prototype.getHeight=function(){var _a2,_b;return(_b=(_a2=this.dh)!==null&&_a2!==void 0?_a2:this.sh)!==null&&_b!==void 0?_b:this._source.getHeight()};PipeTexture2.prototype.prerender=function(context){return this._source.prerender(context)};PipeTexture2.prototype.drawWithNormalizedArgs=function(context,sx,sy,sw,sh,dx,dy,dw,dh){var texture2=this._source;if(texture2===null||typeof texture2!=="object"){return}texture2.draw(context,sx,sy,sw,sh,dx,dy,dw,dh)};return PipeTexture2}(Texture);var __extends$7=function(){var extendStatics2=function(d2,b2){extendStatics2=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d22,b22){d22.__proto__=b22}||function(d22,b22){for(var p in b22)if(Object.prototype.hasOwnProperty.call(b22,p))d22[p]=b22[p]};return extendStatics2(d2,b2)};return function(d2,b2){if(typeof b2!=="function"&&b2!==null)throw new TypeError("Class extends value "+String(b2)+" is not a constructor or null");extendStatics2(d2,b2);function __(){this.constructor=d2}d2.prototype=b2===null?Object.create(b2):(__.prototype=b2.prototype,new __)}}();var __awaiter$1=function(thisArg,_arguments,P3,generator){function adopt(value){return value instanceof P3?value:new P3((function(resolve){resolve(value)}))}return new(P3||(P3=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e3){reject(e3)}}function rejected(value){try{step(generator["throw"](value))}catch(e3){reject(e3)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,[])).next())}))};var __generator$1=function(thisArg,body){var _={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},f,y,t,g;return g={next:verb(0),throw:verb(1),return:verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n2){return function(v3){return step([n2,v3])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]0&&query.length>colonIndex+1){var atlas_1=ATLAS_MEMO_BY_NAME[query.slice(0,colonIndex)];result=atlas_1&&atlas_1.select(query.slice(colonIndex+1))}if(!result){var atlas_2=ATLAS_MEMO_BY_NAME[query];result=atlas_2&&atlas_2.select()}if(!result){for(var i=0;i0&&left>0){texture2.draw(context,0,0,left,top,0,0,left,top)}if(bottom>0&&left>0){texture2.draw(context,0,height+top,left,bottom,0,outHeight+top,left,bottom)}if(top>0&&right>0){texture2.draw(context,width+left,0,right,top,outWidth+left,0,right,top)}if(bottom>0&&right>0){texture2.draw(context,width+left,height+top,right,bottom,outWidth+left,outHeight+top,right,bottom)}if(this._resizeMode==="stretch"){if(top>0){texture2.draw(context,left,0,width,top,left,0,outWidth,top)}if(bottom>0){texture2.draw(context,left,height+top,width,bottom,left,outHeight+top,outWidth,bottom)}if(left>0){texture2.draw(context,0,top,left,height,0,top,left,outHeight)}if(right>0){texture2.draw(context,width+left,top,right,height,outWidth+left,top,right,outHeight)}texture2.draw(context,left,top,width,height,left,top,outWidth,outHeight)}else if(this._resizeMode==="tile"){var l=left;var r=outWidth;var w=void 0;while(r>0){w=Math.min(width,r);r-=width;var t=top;var b2=outHeight;var h=void 0;while(b2>0){h=Math.min(height,b2);b2-=height;texture2.draw(context,left,top,w,h,l,t,w,h);if(r<=0){if(left){texture2.draw(context,0,top,left,h,0,t,left,h)}if(right){texture2.draw(context,width+left,top,right,h,l+w,t,right,h)}}t+=h}if(top){texture2.draw(context,left,0,w,top,l,0,w,top)}if(bottom){texture2.draw(context,left,height+top,w,bottom,l,t,w,bottom)}l+=w}}};return ResizableTexture2}(Texture);function getPixelRatio(){return typeof window!=="undefined"?window.devicePixelRatio||1:1}function isValidFitMode(value){return value&&(value==="cover"||value==="contain"||value==="fill"||value==="in"||value==="in-pad"||value==="out"||value==="out-crop")}var iid$1=0;var Pin=function(){function Pin2(owner){this.uid="pin:"+uid();this._owner=owner;this._parent=null;this._relativeMatrix=new Matrix;this._absoluteMatrix=new Matrix;this.reset()}Pin2.prototype.reset=function(){this._textureAlpha=1;this._alpha=1;this._width=0;this._height=0;this._scaleX=1;this._scaleY=1;this._skewX=0;this._skewY=0;this._rotation=0;this._pivoted=false;this._pivotX=0;this._pivotY=0;this._handled=false;this._handleX=0;this._handleY=0;this._aligned=false;this._alignX=0;this._alignY=0;this._offsetX=0;this._offsetY=0;this._boxX=0;this._boxY=0;this._boxWidth=this._width;this._boxHeight=this._height;this._ts_translate=++iid$1;this._ts_transform=++iid$1;this._ts_matrix=++iid$1};Pin2.prototype._update=function(){this._parent=this._owner._parent&&this._owner._parent._pin;if(this._handled&&this._mo_handle!=this._ts_transform){this._mo_handle=this._ts_transform;this._ts_translate=++iid$1}if(this._aligned&&this._parent&&this._mo_align!=this._parent._ts_transform){this._mo_align=this._parent._ts_transform;this._ts_translate=++iid$1}return this};Pin2.prototype.toString=function(){return this._owner+" ("+(this._parent?this._parent._owner:null)+")"};Pin2.prototype.absoluteMatrix=function(){this._update();var ts=Math.max(this._ts_transform,this._ts_translate,this._parent?this._parent._ts_matrix:0);if(this._mo_abs==ts){return this._absoluteMatrix}this._mo_abs=ts;var abs=this._absoluteMatrix;abs.reset(this.relativeMatrix());this._parent&&abs.concat(this._parent._absoluteMatrix);this._ts_matrix=++iid$1;return abs};Pin2.prototype.relativeMatrix=function(){this._update();var ts=Math.max(this._ts_transform,this._ts_translate,this._parent?this._parent._ts_transform:0);if(this._mo_rel==ts){return this._relativeMatrix}this._mo_rel=ts;var rel=this._relativeMatrix;rel.identity();if(this._pivoted){rel.translate(-this._pivotX*this._width,-this._pivotY*this._height)}rel.scale(this._scaleX,this._scaleY);rel.skew(this._skewX,this._skewY);rel.rotate(this._rotation);if(this._pivoted){rel.translate(this._pivotX*this._width,this._pivotY*this._height)}if(this._pivoted){this._boxX=0;this._boxY=0;this._boxWidth=this._width;this._boxHeight=this._height}else{var p=void 0;var q=void 0;if(rel.a>0&&rel.c>0||rel.a<0&&rel.c<0){p=0;q=rel.a*this._width+rel.c*this._height}else{p=rel.a*this._width;q=rel.c*this._height}if(p>q){this._boxX=q;this._boxWidth=p-q}else{this._boxX=p;this._boxWidth=q-p}if(rel.b>0&&rel.d>0||rel.b<0&&rel.d<0){p=0;q=rel.b*this._width+rel.d*this._height}else{p=rel.b*this._width;q=rel.d*this._height}if(p>q){this._boxY=q;this._boxHeight=p-q}else{this._boxY=p;this._boxHeight=q-p}}this._x=this._offsetX;this._y=this._offsetY;this._x-=this._boxX+this._handleX*this._boxWidth;this._y-=this._boxY+this._handleY*this._boxHeight;if(this._aligned&&this._parent){this._parent.relativeMatrix();this._x+=this._alignX*this._parent._width;this._y+=this._alignY*this._parent._height}rel.translate(this._x,this._y);return this._relativeMatrix};Pin2.prototype.get=function(key){if(typeof getters[key]==="function"){return getters[key](this)}};Pin2.prototype.set=function(a2,b2){if(typeof a2==="string"){if(typeof setters[a2]==="function"&&typeof b2!=="undefined"){setters[a2](this,b2)}}else if(typeof a2==="object"){for(b2 in a2){if(typeof setters[b2]==="function"&&typeof a2[b2]!=="undefined"){setters[b2](this,a2[b2],a2)}}}if(this._owner){this._owner._ts_pin=++iid$1;this._owner.touch()}return this};Pin2.prototype.fit=function(width,height,mode){this._ts_transform=++iid$1;if(mode==="contain"){mode="in-pad"}if(mode==="cover"){mode="out-crop"}if(typeof width==="number"){this._scaleX=width/this._unscaled_width;this._width=this._unscaled_width}if(typeof height==="number"){this._scaleY=height/this._unscaled_height;this._height=this._unscaled_height}if(typeof width==="number"&&typeof height==="number"&&typeof mode==="string"){if(mode==="fill");else if(mode==="out"||mode==="out-crop"){this._scaleX=this._scaleY=Math.max(this._scaleX,this._scaleY)}else if(mode==="in"||mode==="in-pad"){this._scaleX=this._scaleY=Math.min(this._scaleX,this._scaleY)}if(mode==="out-crop"||mode==="in-pad"){this._width=width/this._scaleX;this._height=height/this._scaleY}}};return Pin2}();var getters={alpha:function(pin){return pin._alpha},textureAlpha:function(pin){return pin._textureAlpha},width:function(pin){return pin._width},height:function(pin){return pin._height},boxWidth:function(pin){return pin._boxWidth},boxHeight:function(pin){return pin._boxHeight},scaleX:function(pin){return pin._scaleX},scaleY:function(pin){return pin._scaleY},skewX:function(pin){return pin._skewX},skewY:function(pin){return pin._skewY},rotation:function(pin){return pin._rotation},pivotX:function(pin){return pin._pivotX},pivotY:function(pin){return pin._pivotY},offsetX:function(pin){return pin._offsetX},offsetY:function(pin){return pin._offsetY},alignX:function(pin){return pin._alignX},alignY:function(pin){return pin._alignY},handleX:function(pin){return pin._handleX},handleY:function(pin){return pin._handleY}};var setters={alpha:function(pin,value){pin._alpha=value},textureAlpha:function(pin,value){pin._textureAlpha=value},width:function(pin,value){pin._unscaled_width=value;pin._width=value;pin._ts_transform=++iid$1},height:function(pin,value){pin._unscaled_height=value;pin._height=value;pin._ts_transform=++iid$1},scale:function(pin,value){pin._scaleX=value;pin._scaleY=value;pin._ts_transform=++iid$1},scaleX:function(pin,value){pin._scaleX=value;pin._ts_transform=++iid$1},scaleY:function(pin,value){pin._scaleY=value;pin._ts_transform=++iid$1},skew:function(pin,value){pin._skewX=value;pin._skewY=value;pin._ts_transform=++iid$1},skewX:function(pin,value){pin._skewX=value;pin._ts_transform=++iid$1},skewY:function(pin,value){pin._skewY=value;pin._ts_transform=++iid$1},rotation:function(pin,value){pin._rotation=value;pin._ts_transform=++iid$1},pivot:function(pin,value){pin._pivotX=value;pin._pivotY=value;pin._pivoted=true;pin._ts_transform=++iid$1},pivotX:function(pin,value){pin._pivotX=value;pin._pivoted=true;pin._ts_transform=++iid$1},pivotY:function(pin,value){pin._pivotY=value;pin._pivoted=true;pin._ts_transform=++iid$1},offset:function(pin,value){pin._offsetX=value;pin._offsetY=value;pin._ts_translate=++iid$1},offsetX:function(pin,value){pin._offsetX=value;pin._ts_translate=++iid$1},offsetY:function(pin,value){pin._offsetY=value;pin._ts_translate=++iid$1},align:function(pin,value){this.alignX(pin,value);this.alignY(pin,value)},alignX:function(pin,value){pin._alignX=value;pin._aligned=true;pin._ts_translate=++iid$1;this.handleX(pin,value)},alignY:function(pin,value){pin._alignY=value;pin._aligned=true;pin._ts_translate=++iid$1;this.handleY(pin,value)},handle:function(pin,value){this.handleX(pin,value);this.handleY(pin,value)},handleX:function(pin,value){pin._handleX=value;pin._handled=true;pin._ts_translate=++iid$1},handleY:function(pin,value){pin._handleY=value;pin._handled=true;pin._ts_translate=++iid$1},resizeMode:function(pin,value,all){if(all){if(value=="in"){value="in-pad"}else if(value=="out"){value="out-crop"}pin.fit(all.resizeWidth,all.resizeHeight,value)}},resizeWidth:function(pin,value,all){if(!all||!all.resizeMode){pin.fit(value,null)}},resizeHeight:function(pin,value,all){if(!all||!all.resizeMode){pin.fit(null,value)}},scaleMode:function(pin,value,all){if(all){pin.fit(all.scaleWidth,all.scaleHeight,value)}},scaleWidth:function(pin,value,all){if(!all||!all.scaleMode){pin.fit(value,null)}},scaleHeight:function(pin,value,all){if(!all||!all.scaleMode){pin.fit(null,value)}},matrix:function(pin,value){this.scaleX(pin,value.a);this.skewX(pin,value.c/value.d);this.skewY(pin,value.b/value.a);this.scaleY(pin,value.d);this.offsetX(pin,value.e);this.offsetY(pin,value.f);this.rotation(pin,0)}};function IDENTITY(x2){return x2}var LOOKUP_CACHE={};var MODE_BY_NAME={};var EASE_BY_NAME={};var Easing=function(){function Easing2(){}Easing2.get=function(token,fallback){fallback=fallback||IDENTITY;if(typeof token==="function"){return token}if(typeof token!=="string"){return fallback}var easeFn=LOOKUP_CACHE[token];if(easeFn){return easeFn}var tokens=/^(\w+)(-(in|out|in-out|out-in))?(\((.*)\))?$/i.exec(token);if(!tokens||!tokens.length){return fallback}var easeName=tokens[1];var easing=EASE_BY_NAME[easeName];var modeName=tokens[3];var modeFn=MODE_BY_NAME[modeName];var params=tokens[5];if(!easing){easeFn=fallback}else if("fn"in easing&&typeof easing.fn==="function"){easeFn=easing.fn}else if("fc"in easing&&typeof easing.fc==="function"){var args=params?params.replace(/\s+/,"").split(","):void 0;easeFn=easing.fc.apply(easing.fc,args)}else{easeFn=fallback}if(modeFn){easeFn=modeFn(easeFn)}LOOKUP_CACHE[token]=easeFn;return easeFn};return Easing2}();function addMode(name,fn){MODE_BY_NAME[name]=fn}function addEaseFn(data){var names=data.name.split(/\s+/);for(var i=0;i=1;if(typeof this._easing=="function"){p=this._easing(p)}var q=1-p;for(var key in this._end){this._owner.pin(key,this._start[key]*q+this._end[key]*p)}return ended};Transition2.prototype.finish=function(){var _this=this;this._ending.forEach((function(callback){try{callback.call(_this._owner)}catch(e3){console.error(e3)}}));return this._next};Transition2.prototype.tween=function(a2,b2){var options2;if(typeof a2==="object"&&a2!==null){options2=a2}else{options2={};if(typeof a2==="number"){options2.duration=a2;if(typeof b2==="number"){options2.delay=b2}}}return this._next=new Transition2(this._owner,options2)};Transition2.prototype.duration=function(duration){this._duration=duration;return this};Transition2.prototype.delay=function(delay){this._delay=delay;return this};Transition2.prototype.ease=function(easing){this._easing=Easing.get(easing);return this};Transition2.prototype.done=function(fn){this._ending.push(fn);return this};Transition2.prototype.hide=function(){this._ending.push((function(){this.hide()}));this._hide=true;return this};Transition2.prototype.remove=function(){this._ending.push((function(){this.remove()}));this._remove=true;return this};Transition2.prototype.pin=function(a2,b2){if(typeof a2==="object"){for(var attr in a2){pinning(this._owner,this._end,attr,a2[attr])}}else if(typeof b2!=="undefined"){pinning(this._owner,this._end,a2,b2)}return this};Transition2.prototype.then=function(fn){this.done(fn);return this};Transition2.prototype.clear=function(forward){return this};Transition2.prototype.size=function(w,h){this.pin("width",w);this.pin("height",h);return this};Transition2.prototype.width=function(w){if(typeof w==="undefined"){return this.pin("width")}this.pin("width",w);return this};Transition2.prototype.height=function(h){if(typeof h==="undefined"){return this.pin("height")}this.pin("height",h);return this};Transition2.prototype.offset=function(a2,b2){if(typeof a2==="object"){b2=a2.y;a2=a2.x}this.pin("offsetX",a2);this.pin("offsetY",b2);return this};Transition2.prototype.rotate=function(a2){this.pin("rotation",a2);return this};Transition2.prototype.skew=function(a2,b2){if(typeof a2==="object"){b2=a2.y;a2=a2.x}else if(typeof b2==="undefined"){b2=a2}this.pin("skewX",a2);this.pin("skewY",b2);return this};Transition2.prototype.scale=function(a2,b2){if(typeof a2==="object"){b2=a2.y;a2=a2.x}else if(typeof b2==="undefined"){b2=a2}this.pin("scaleX",a2);this.pin("scaleY",b2);return this};Transition2.prototype.alpha=function(a2,ta){this.pin("alpha",a2);if(typeof ta!=="undefined"){this.pin("textureAlpha",ta)}return this};return Transition2}();function pinning(node,map,key,value){if(typeof node.pin(key)==="number"){map[key]=value}else if(typeof node.pin(key+"X")==="number"&&typeof node.pin(key+"Y")==="number"){map[key+"X"]=value;map[key+"Y"]=value}}var iid=0;stats.create=0;function assertType(obj){if(obj&&obj instanceof Node){return obj}throw"Invalid node: "+obj}function layout(){return new Node}var Node=function(){function Node2(){var _this=this;this.uid="node:"+uid();this._label="";this._parent=null;this._next=null;this._prev=null;this._first=null;this._last=null;this._visible=true;this._alpha=1;this._padding=0;this._spacing=0;this._pin=new Pin(this);this._listeners={};this._attrs={};this._flags={};this._transitions=[];this._tickBefore=[];this._tickAfter=[];this.MAX_ELAPSE=Infinity;this._transitionTickInitied=false;this._transitionTickLastTime=0;this._transitionTick=function(elapsed,now2,last){if(!_this._transitions.length){return false}var ignore=_this._transitionTickLastTime!==last;_this._transitionTickLastTime=now2;if(ignore){return true}var head=_this._transitions[0];var ended=head.tick(_this,elapsed,now2,last);if(ended){if(head===_this._transitions[0]){_this._transitions.shift()}var next=head.finish();if(next){_this._transitions.unshift(next)}}return true};stats.create++}Node2.prototype.matrix=function(relative){if(relative===void 0){relative=false}if(relative===true){return this._pin.relativeMatrix()}return this._pin.absoluteMatrix()};Node2.prototype.getPixelRatio=function(){var _a2;var m=(_a2=this._parent)===null||_a2===void 0?void 0:_a2.matrix();var pixelRatio=!m?1:Math.max(Math.abs(m.a),Math.abs(m.b))/getPixelRatio();return pixelRatio};Node2.prototype.pin=function(a2,b2){if(typeof a2==="object"){this._pin.set(a2);return this}else if(typeof a2==="string"){if(typeof b2==="undefined"){return this._pin.get(a2)}else{this._pin.set(a2,b2);return this}}else if(typeof a2==="undefined"){return this._pin}};Node2.prototype.fit=function(a2,b2,c2){if(typeof a2==="object"){c2=b2;b2=a2.y;a2=a2.x}this._pin.fit(a2,b2,c2);return this};Node2.prototype.scaleTo=function(a2,b2,c2){return this.fit(a2,b2,c2)};Node2.prototype.toString=function(){return"["+this._label+"]"};Node2.prototype.id=function(id){return this.label(id)};Node2.prototype.label=function(label){if(typeof label==="undefined"){return this._label}this._label=label;return this};Node2.prototype.attr=function(name,value){if(typeof value==="undefined"){return this._attrs!==null?this._attrs[name]:void 0}(this._attrs!==null?this._attrs:this._attrs={})[name]=value;return this};Node2.prototype.visible=function(visible){if(typeof visible==="undefined"){return this._visible}this._visible=visible;this._parent&&(this._parent._ts_children=++iid);this._ts_pin=++iid;this.touch();return this};Node2.prototype.hide=function(){this.visible(false);return this};Node2.prototype.show=function(){this.visible(true);return this};Node2.prototype.parent=function(){return this._parent};Node2.prototype.next=function(visible){var next=this._next;while(next&&visible&&!next._visible){next=next._next}return next};Node2.prototype.prev=function(visible){var prev=this._prev;while(prev&&visible&&!prev._visible){prev=prev._prev}return prev};Node2.prototype.first=function(visible){var next=this._first;while(next&&visible&&!next._visible){next=next._next}return next};Node2.prototype.last=function(visible){var prev=this._last;while(prev&&visible&&!prev._visible){prev=prev._prev}return prev};Node2.prototype.visit=function(visitor,payload){var reverse=visitor.reverse;var visible=visitor.visible;if(visitor.start&&visitor.start(this,payload)){return}var child;var next=reverse?this.last(visible):this.first(visible);while(child=next){next=reverse?child.prev(visible):child.next(visible);if(child.visit(visitor,payload)){return true}}return visitor.end&&visitor.end(this,payload)};Node2.prototype.append=function(child,more){if(Array.isArray(child)){for(var i=0;i=0;i--){Node2.prepend(this,child[i])}}else if(typeof more!=="undefined"){for(var i=arguments.length-1;i>=0;i--){Node2.prepend(this,arguments[i])}}else if(typeof child!=="undefined")Node2.prepend(this,child);return this};Node2.prototype.appendTo=function(parent){Node2.append(parent,this);return this};Node2.prototype.prependTo=function(parent){Node2.prepend(parent,this);return this};Node2.prototype.insertNext=function(sibling,more){if(Array.isArray(sibling)){for(var i=0;i=0;i--){Node2.insertBefore(sibling[i],this)}}else if(typeof more!=="undefined"){for(var i=arguments.length-1;i>=0;i--){Node2.insertBefore(arguments[i],this)}}else if(typeof sibling!=="undefined"){Node2.insertBefore(sibling,this)}return this};Node2.prototype.insertAfter=function(prev){Node2.insertAfter(this,prev);return this};Node2.prototype.insertBefore=function(next){Node2.insertBefore(this,next);return this};Node2.append=function(parent,child){assertType(child);assertType(parent);child.remove();if(parent._last){parent._last._next=child;child._prev=parent._last}child._parent=parent;parent._last=child;if(!parent._first){parent._first=child}child._parent._flag(child,true);child._ts_parent=++iid;parent._ts_children=++iid;parent.touch()};Node2.prepend=function(parent,child){assertType(child);assertType(parent);child.remove();if(parent._first){parent._first._prev=child;child._next=parent._first}child._parent=parent;parent._first=child;if(!parent._last){parent._last=child}child._parent._flag(child,true);child._ts_parent=++iid;parent._ts_children=++iid;parent.touch()};Node2.insertBefore=function(self2,next){assertType(self2);assertType(next);self2.remove();var parent=next._parent;var prev=next._prev;if(!parent){return}next._prev=self2;prev&&(prev._next=self2)||parent&&(parent._first=self2);self2._parent=parent;self2._prev=prev;self2._next=next;self2._parent._flag(self2,true);self2._ts_parent=++iid;self2.touch()};Node2.insertAfter=function(self2,prev){assertType(self2);assertType(prev);self2.remove();var parent=prev._parent;var next=prev._next;if(!parent){return}prev._next=self2;next&&(next._prev=self2)||parent&&(parent._last=self2);self2._parent=parent;self2._prev=prev;self2._next=next;self2._parent._flag(self2,true);self2._ts_parent=++iid;self2.touch()};Node2.prototype.remove=function(child,more){if(typeof child!=="undefined"){if(Array.isArray(child)){for(var i=0;i0){if(this._flags[key]==1&&this._parent){this._parent._flag(key,false)}this._flags[key]=this._flags[key]-1}}if(typeof key==="object"){if(key._flags){for(var type in key._flags){if(key._flags[type]>0){this._flag(type,value)}}}}return this};Node2.prototype.hitTest=function(hit){var width=this._pin._width;var height=this._pin._height;return hit.x>=0&&hit.x<=width&&hit.y>=0&&hit.y<=height};Node2.prototype.prerender=function(){if(!this._visible){return}var child;var next=this._first;while(child=next){next=child._next;child.prerender()}};Node2.prototype.render=function(context){if(!this._visible){return}stats.node++;var m=this.matrix();context.setTransform(m.a,m.b,m.c,m.d,m.e,m.f);this._alpha=this._pin._alpha*(this._parent?this._parent._alpha:1);var alpha=this._pin._textureAlpha*this._alpha;if(context.globalAlpha!=alpha){context.globalAlpha=alpha}if(this._textures){for(var i=0,n2=this._textures.length;ithis.MAX_ELAPSE){elapsed=this.MAX_ELAPSE}var ticked=false;if(this._tickBefore!==null){for(var i=0;i0||((_b=this._tickBefore)===null||_b===void 0?void 0:_b.length)>0;this._flag("_tick",hasTickListener)};Node2.prototype.untick=function(callback){if(typeof callback!=="function"){return}var i;if(this._tickBefore!==null&&(i=this._tickBefore.indexOf(callback))>=0){this._tickBefore.splice(i,1)}if(this._tickAfter!==null&&(i=this._tickAfter.indexOf(callback))>=0){this._tickAfter.splice(i,1)}};Node2.prototype.timeout=function(callback,time){this.setTimeout(callback,time)};Node2.prototype.setTimeout=function(callback,time){function timer(t){if((time-=t)<0){this.untick(timer);callback.call(this)}else{return true}}this.tick(timer);return timer};Node2.prototype.clearTimeout=function(timer){this.untick(timer)};Node2.prototype.on=function(type,listener){if(!type||!type.length||typeof listener!=="function"){return this}if(typeof type!=="string"&&typeof type.join==="function"){for(var i=0;i-1){type=type.match(/\S+/g);for(var i=0;i-1){type=type.match(/\S+/g);for(var i=0;i=0){listeners.splice(index,1);this._flag(type,false)}};Node2.prototype.listeners=function(type){return this._listeners[type]};Node2.prototype.publish=function(name,args){var listeners=this.listeners(name);if(!listeners||!listeners.length){return 0}for(var l=0;l1.25||pixelRationChange<.8;if(pixelRatioChanged){this._lastPixelRatio=newPixelRatio}var newMemoKey=this._memoizer?this._memoizer.call(this):null;var memoKeyChanged=this._lastMemoKey!==newMemoKey;if(pixelRatioChanged||memoKeyChanged){this._lastMemoKey=newMemoKey;this._lastPixelRatio=newPixelRatio;if(typeof this._drawer==="function"){this._drawer.call(this)}return true}};CanvasTexture2.prototype.size=function(width,height,pixelRatio){this.setSize(width,height,pixelRatio);return this};CanvasTexture2.prototype.context=function(type,attributes){if(type===void 0){type="2d"}return this.getContext(type,attributes)};CanvasTexture2.prototype.canvas=function(legacyTextureDrawer){if(typeof legacyTextureDrawer==="function"){legacyTextureDrawer.call(this,this.getContext())}else if(typeof legacyTextureDrawer==="undefined"){if(typeof this._drawer==="function"){this._drawer.call(this)}}return this};return CanvasTexture2}(ImageTexture);function canvas(type,attributes,legacyTextureDrawer){if(typeof type==="function"){var texture_1=new CanvasTexture;legacyTextureDrawer=type;texture_1.setDrawer((function(){legacyTextureDrawer.call(texture_1,texture_1.getContext())}));return texture_1}else if(typeof attributes==="function"){var texture_2=new CanvasTexture;legacyTextureDrawer=attributes;texture_2.setDrawer((function(){legacyTextureDrawer.call(texture_2,texture_2.getContext(type))}));return texture_2}else if(typeof legacyTextureDrawer==="function"){var texture_3=new CanvasTexture;texture_3.setDrawer((function(){legacyTextureDrawer.call(texture_3,texture_3.getContext(type,attributes))}));return texture_3}else{var texture2=new CanvasTexture;return texture2}}var POINTER_START="touchstart mousedown";var POINTER_MOVE="touchmove mousemove";var POINTER_END="touchend mouseup";var POINTER_CANCEL="touchcancel mousecancel";var EventPoint=function(){function EventPoint2(){}EventPoint2.prototype.clone=function(obj){if(obj){obj.x=this.x;obj.y=this.y}else{obj={x:this.x,y:this.y}}return obj};EventPoint2.prototype.toString=function(){return(this.x|0)+"x"+(this.y|0)};return EventPoint2}();var PointerSyntheticEvent=function(){function PointerSyntheticEvent2(){this.abs=new EventPoint}PointerSyntheticEvent2.prototype.clone=function(obj){if(obj){obj.x=this.x;obj.y=this.y}else{obj={x:this.x,y:this.y}}return obj};PointerSyntheticEvent2.prototype.toString=function(){return this.type+": "+(this.x|0)+"x"+(this.y|0)};return PointerSyntheticEvent2}();var VisitPayload=function(){function VisitPayload2(){this.type="";this.x=0;this.y=0;this.timeStamp=-1;this.event=null;this.root=null;this.collected=null}VisitPayload2.prototype.toString=function(){return this.type+": "+(this.x|0)+"x"+(this.y|0)};return VisitPayload2}();var syntheticEvent=new PointerSyntheticEvent;var PAYLOAD=new VisitPayload;var Pointer=function(){function Pointer2(){var _this=this;this.ratio=1;this.clickList=[];this.cancelList=[];this.handleStart=function(event){event.preventDefault();_this.localPoint(event);_this.dispatchEvent(event.type,event);_this.findTargets("click",_this.clickList);_this.findTargets("mousecancel",_this.cancelList)};this.handleMove=function(event){event.preventDefault();_this.localPoint(event);_this.dispatchEvent(event.type,event)};this.handleEnd=function(event){event.preventDefault();_this.dispatchEvent(event.type,event);if(_this.clickList.length){_this.dispatchEvent("click",event,_this.clickList)}_this.cancelList.length=0};this.handleCancel=function(event){if(_this.cancelList.length){_this.dispatchEvent("mousecancel",event,_this.cancelList)}_this.clickList.length=0};this.visitStart=function(node,payload){return!node._flag(payload.type)};this.visitEnd=function(node,payload){syntheticEvent.raw=payload.event;syntheticEvent.type=payload.type;syntheticEvent.timeStamp=payload.timeStamp;syntheticEvent.abs.x=payload.x;syntheticEvent.abs.y=payload.y;var listeners=node.listeners(payload.type);if(!listeners){return}node.matrix().inverse().map(payload,syntheticEvent);var isEventTarget=node===payload.root||node.attr("spy")||node.hitTest(syntheticEvent);if(!isEventTarget){return}if(payload.collected){payload.collected.push(node)}if(payload.event){var cancel=false;for(var l=0;l0&&_this.drawingHeight>0){_this.context.setTransform(1,0,0,1,0,0);_this.context.clearRect(0,0,_this.drawingWidth,_this.drawingHeight);_this.render(_this.context)}}else if(tickRequest){_this.sleep=false}else{_this.sleep=true}stats.fps=elapsed?1e3/elapsed:0};_this.label("Root");return _this}Root2.prototype.resume=function(){if(this.sleep||this.paused){this.requestFrame()}this.paused=false;this.sleep=false;this.publish("resume");return this};Root2.prototype.pause=function(){if(!this.paused){this.publish("pause")}this.paused=true;return this};Root2.prototype.touch=function(){if(this.sleep||this.paused){this.requestFrame()}this.sleep=false;return _super.prototype.touch.call(this)};Root2.prototype.unmount=function(){var _a2;this.mounted=false;(_a2=this.pointer)===null||_a2===void 0?void 0:_a2.unmount();return this};Root2.prototype.background=function(color){if(this.dom){this.dom.style.backgroundColor=color}return this};Root2.prototype.viewport=function(width,height,ratio){if(typeof width==="undefined"){return Object.assign({},this._viewport)}if(typeof width==="object"){var options2=width;width=options2.width;height=options2.height;ratio=options2.ratio}if(typeof width==="number"&&typeof height==="number"){this._viewport={width:width,height:height,ratio:typeof ratio==="number"?ratio:1};this.viewbox();var data_1=Object.assign({},this._viewport);this.visit({start:function(node){if(!node._flag("viewport")){return true}node.publish("viewport",[data_1])}})}return this};Root2.prototype.viewbox=function(width,height,mode){if(typeof width==="number"&&typeof height==="number"){this._viewbox={width:width,height:height,mode:mode}}else if(typeof width==="object"&&width!==null){this._viewbox=__assign({},width)}this.rescale();return this};Root2.prototype.camera=function(matrix){this._camera=matrix;this.rescale();return this};Root2.prototype.rescale=function(){var viewbox=this._viewbox;var viewport=this._viewport;var camera=this._camera;if(viewport&&viewbox){var viewportWidth=viewport.width;var viewportHeight=viewport.height;var viewboxMode=isValidFitMode(viewbox.mode)?viewbox.mode:"in-pad";var viewboxWidth=viewbox.width;var viewboxHeight=viewbox.height;this.pin({width:viewboxWidth,height:viewboxHeight});this.scaleTo(viewportWidth,viewportHeight,viewboxMode);var viewboxX=viewbox.x||0;var viewboxY=viewbox.y||0;var cameraZoom=(camera===null||camera===void 0?void 0:camera.a)||1;var cameraX=(camera===null||camera===void 0?void 0:camera.e)||0;var cameraY=(camera===null||camera===void 0?void 0:camera.f)||0;var scaleX=this.pin("scaleX");var scaleY=this.pin("scaleY");this.pin("scaleX",scaleX*cameraZoom);this.pin("scaleY",scaleY*cameraZoom);this.pin("offsetX",cameraX-viewboxX*scaleX*cameraZoom);this.pin("offsetY",cameraY-viewboxY*scaleY*cameraZoom)}else if(viewport){this.pin({width:viewport.width,height:viewport.height})}return this};return Root2}(Node);var __extends$1=function(){var extendStatics2=function(d2,b2){extendStatics2=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d22,b22){d22.__proto__=b22}||function(d22,b22){for(var p in b22)if(Object.prototype.hasOwnProperty.call(b22,p))d22[p]=b22[p]};return extendStatics2(d2,b2)};return function(d2,b2){if(typeof b2!=="function"&&b2!==null)throw new TypeError("Class extends value "+String(b2)+" is not a constructor or null");extendStatics2(d2,b2);function __(){this.constructor=d2}d2.prototype=b2===null?Object.create(b2):(__.prototype=b2.prototype,new __)}}();var FPS=15;(function(_super){__extends$1(Anim2,_super);function Anim2(){var _this=_super.call(this)||this;_this.label("Anim");_this._textures=[];_this._fps=FPS;_this._ft=1e3/_this._fps;_this._time=-1;_this._repeat=0;_this._index=0;_this._frames=[];var lastTime=0;_this.tick((function(t,now2,last){if(this._time<0||this._frames.length<=1){return}var ignore=lastTime!=last;lastTime=now2;if(ignore){return true}this._time+=t;if(this._time0&&(this._repeat-=n2)<=0){this.stop();this._callback&&this._callback();return false}return true}),false);return _this}Anim2.prototype.fps=function(fps){if(typeof fps==="undefined"){return this._fps}this._fps=fps>0?fps:FPS;this._ft=1e3/this._fps;return this};Anim2.prototype.setFrames=function(frames){return this.frames(frames)};Anim2.prototype.frames=function(frames){this._index=0;this._frames=texture(frames).array();this.touch();return this};Anim2.prototype.length=function(){return this._frames?this._frames.length:0};Anim2.prototype.gotoFrame=function(frame,resize){if(resize===void 0){resize=false}this._index=math.wrap(frame,this._frames.length)|0;resize=resize||!this._textures[0];this._textures[0]=this._frames[this._index];if(resize){this.pin("width",this._textures[0].getWidth());this.pin("height",this._textures[0].getHeight())}this.touch();return this};Anim2.prototype.moveFrame=function(move){return this.gotoFrame(this._index+move)};Anim2.prototype.repeat=function(repeat,callback){this._repeat=repeat*this._frames.length-1;this._callback=callback;this.play();return this};Anim2.prototype.play=function(frame){if(typeof frame!=="undefined"){this.gotoFrame(frame);this._time=0}else if(this._time<0){this._time=0}this.touch();return this};Anim2.prototype.stop=function(frame){this._time=-1;if(typeof frame!=="undefined"){this.gotoFrame(frame)}return this};return Anim2})(Node);var __extends=function(){var extendStatics2=function(d2,b2){extendStatics2=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d22,b22){d22.__proto__=b22}||function(d22,b22){for(var p in b22)if(Object.prototype.hasOwnProperty.call(b22,p))d22[p]=b22[p]};return extendStatics2(d2,b2)};return function(d2,b2){if(typeof b2!=="function"&&b2!==null)throw new TypeError("Class extends value "+String(b2)+" is not a constructor or null");extendStatics2(d2,b2);function __(){this.constructor=d2}d2.prototype=b2===null?Object.create(b2):(__.prototype=b2.prototype,new __)}}();(function(_super){__extends(Monotype2,_super);function Monotype2(){var _this=_super.call(this)||this;_this.label("String");_this._textures=[];return _this}Monotype2.prototype.setFont=function(frames){return this.frames(frames)};Monotype2.prototype.frames=function(frames){this._textures=[];if(typeof frames=="string"){var selection_1=texture(frames);this._font=function(value){return selection_1.one(value)}}else if(typeof frames==="object"){this._font=function(value){return frames[value]}}else if(typeof frames==="function"){this._font=frames}return this};Monotype2.prototype.setValue=function(value){return this.value(value)};Monotype2.prototype.value=function(value){if(typeof value==="undefined"){return this._value}if(this._value===value){return this}this._value=value;if(value===null){value=""}else if(typeof value!=="string"&&!Array.isArray(value)){value=value.toString()}this._spacing=this._spacing||0;var width=0;var height=0;for(var i=0;i0?this._spacing:0;texture_1.setDestinationCoordinate(width,0);width=width+texture_1.getWidth();height=Math.max(height,texture_1.getHeight())}this.pin("width",width);this.pin("height",height);this._textures.length=value.length;return this};return Monotype2})(Node);var math_atan2=Math.atan2;var math_abs=Math.abs;var math_sqrt=Math.sqrt;var math_PI=Math.PI;var math_max=Math.max;var math_min=Math.min;var mounted=null;function memo(){var memory=[];function recall(){var rest=[];for(var _i=0;_itimeStep){world.step(timeStep);elapsedTime-=timeStep}_this.renderWorld();return true}catch(error){errored=true;console.error(error);return false}}),true);world.on("remove-fixture",(function(obj){var _a2;(_a2=_this.nodes.get(obj))===null||_a2===void 0?void 0:_a2.remove()}));world.on("remove-joint",(function(obj){var _a2;(_a2=_this.nodes.get(obj))===null||_a2===void 0?void 0:_a2.remove()}));return _this}WorldStageNode2.prototype.renderWorld=function(){var world=this.world;var options2=this.options;var viewer=this;for(var b2=world.getBodyList();b2;b2=b2.getNext()){for(var f=b2.getFixtureList();f;f=f.getNext()){var node=this.nodes.get(f);var fstyle=getStyle(f);var bstyle=getStyle(b2);if(!node){if(fstyle&&fstyle.stroke){options2.stroke=fstyle.stroke}else if(bstyle&&bstyle.stroke){options2.stroke=bstyle.stroke}else if(b2.isDynamic()){options2.stroke="rgba(255,255,255,0.9)"}else if(b2.isKinematic()){options2.stroke="rgba(255,255,255,0.7)"}else if(b2.isStatic()){options2.stroke="rgba(255,255,255,0.5)"}if(fstyle&&fstyle.fill){options2.fill=fstyle.fill}else if(bstyle&&bstyle.fill){options2.fill=bstyle.fill}else{options2.fill=""}var type=f.getType();var shape=f.getShape();if(type=="circle"){node=viewer.drawCircle(shape,options2)}if(type=="edge"){node=viewer.drawEdge(shape,options2)}if(type=="polygon"){node=viewer.drawPolygon(shape,options2)}if(type=="chain"){node=viewer.drawChain(shape,options2)}if(node){node.appendTo(viewer);this.nodes.set(f,node)}}if(node){var p=b2.getPosition();var r=b2.getAngle();var isChanged=node.__lastX!==p.x||node.__lastY!==p.y||node.__lastR!==r;if(isChanged){node.__lastX=p.x;node.__lastY=p.y;node.__lastR=r;node.offset(p.x,options2.scaleY*p.y);node.rotate(options2.scaleY*r)}}}}for(var j=world.getJointList();j;j=j.getNext()){var type=j.getType();if(type=="pulley-joint"){this.testbed.drawSegment(j.getAnchorA(),j.getGroundAnchorA(),"rgba(255,255,255,0.5)");this.testbed.drawSegment(j.getAnchorB(),j.getGroundAnchorB(),"rgba(255,255,255,0.5)");this.testbed.drawSegment(j.getGroundAnchorB(),j.getGroundAnchorA(),"rgba(255,255,255,0.5)")}else{this.testbed.drawSegment(j.getAnchorA(),j.getAnchorB(),"rgba(255,255,255,0.5)")}}};WorldStageNode2.prototype.drawCircle=function(shape,options2){var offsetX=0;var offsetY=0;var offsetMemo=memo();var texture2=canvas();texture2.setDrawer((function(){var _a2;var ctx=this.getContext();var ratio=2*this.getOptimalPixelRatio();var lw=options2.lineWidth/ratio;var r=shape.m_radius;var cx=r+lw;var cy=r+lw;var w=r*2+lw*2;var h=r*2+lw*2;offsetX=shape.m_p.x-cx;offsetY=options2.scaleY*shape.m_p.y-cy;this.setSize(w,h,ratio);ctx.scale(ratio,ratio);ctx.arc(cx,cy,r,0,2*math_PI);if(options2.fill){ctx.fillStyle=options2.fill;ctx.fill()}ctx.lineTo(cx,cy);ctx.lineWidth=options2.lineWidth/ratio;ctx.strokeStyle=(_a2=options2.stroke)!==null&&_a2!==void 0?_a2:"";ctx.stroke()}));var sprite$1=sprite(texture2);sprite$1.tick((function(){if(!offsetMemo.recall(offsetX,offsetY)){sprite$1.offset(offsetX,offsetY)}}));var node=layout().append(sprite$1);return node};WorldStageNode2.prototype.drawEdge=function(edge,options2){var offsetX=0;var offsetY=0;var offsetA=0;var offsetMemo=memo();var texture2=canvas();texture2.setDrawer((function(){var _a2;var ctx=this.getContext();var ratio=2*this.getOptimalPixelRatio();var lw=options2.lineWidth/ratio;var v13=edge.m_vertex1;var v22=edge.m_vertex2;var dx=v22.x-v13.x;var dy=v22.y-v13.y;var length2=math_sqrt(dx*dx+dy*dy);this.setSize(length2+2*lw,2*lw,ratio);var minX=math_min(v13.x,v22.x);var minY=math_min(options2.scaleY*v13.y,options2.scaleY*v22.y);offsetX=minX-lw;offsetY=minY-lw;offsetA=options2.scaleY*math_atan2(dy,dx);ctx.scale(ratio,ratio);ctx.beginPath();ctx.moveTo(lw,lw);ctx.lineTo(lw+length2,lw);ctx.lineCap="round";ctx.lineWidth=options2.lineWidth/ratio;ctx.strokeStyle=(_a2=options2.stroke)!==null&&_a2!==void 0?_a2:"";ctx.stroke()}));var sprite$1=sprite(texture2);sprite$1.tick((function(){if(!offsetMemo.recall(offsetX,offsetY,offsetA)){sprite$1.offset(offsetX,offsetY);sprite$1.rotate(offsetA)}}));var node=layout().append(sprite$1);return node};WorldStageNode2.prototype.drawPolygon=function(shape,options2){var offsetX=0;var offsetY=0;var offsetMemo=memo();var texture2=canvas();texture2.setDrawer((function(){var _a2;var ctx=this.getContext();var ratio=2*this.getOptimalPixelRatio();var lw=options2.lineWidth/ratio;var vertices=shape.m_vertices;if(!vertices.length){return}var minX=Infinity;var minY=Infinity;var maxX=-Infinity;var maxY=-Infinity;for(var i=0;i2){ctx.closePath()}if(options2.fill){ctx.fillStyle=options2.fill;ctx.fill();ctx.closePath()}ctx.lineCap="round";ctx.lineWidth=options2.lineWidth/ratio;ctx.strokeStyle=(_a2=options2.stroke)!==null&&_a2!==void 0?_a2:"";ctx.stroke()}));var sprite$1=sprite(texture2);sprite$1.tick((function(){if(!offsetMemo.recall(offsetX,offsetY)){sprite$1.offset(offsetX,offsetY)}}));var node=layout().append(sprite$1);return node};WorldStageNode2.prototype.drawChain=function(shape,options2){var offsetX=0;var offsetY=0;var offsetMemo=memo();var texture2=canvas();texture2.setDrawer((function(){var _a2;var ctx=this.getContext();var ratio=2*this.getOptimalPixelRatio();var lw=options2.lineWidth/ratio;var vertices=shape.m_vertices;if(!vertices.length){return}var minX=Infinity;var minY=Infinity;var maxX=-Infinity;var maxY=-Infinity;for(var i=0;i2);if(options2.fill){ctx.fillStyle=options2.fill;ctx.fill();ctx.closePath()}ctx.lineCap="round";ctx.lineWidth=options2.lineWidth/ratio;ctx.strokeStyle=(_a2=options2.stroke)!==null&&_a2!==void 0?_a2:"";ctx.stroke()}));var sprite$1=sprite(texture2);sprite$1.tick((function(){if(!offsetMemo.recall(offsetX,offsetY)){sprite$1.offset(offsetX,offsetY)}}));var node=layout().append(sprite$1);return node};return WorldStageNode2}(Node);const planck=Object.freeze(Object.defineProperty({__proto__:null,AABB:AABB,Body:Body,Box:Box,BoxShape:BoxShape,BroadPhase:BroadPhase,Chain:Chain,ChainShape:ChainShape,Circle:Circle,CircleShape:CircleShape,ClipVertex:ClipVertex,CollideCircles:CollideCircles,CollideEdgeCircle:CollideEdgeCircle,CollideEdgePolygon:CollideEdgePolygon,CollidePolygonCircle:CollidePolygonCircle,CollidePolygons:CollidePolygons,Contact:Contact,ContactEdge:ContactEdge,get ContactFeatureType(){return exports2.ContactFeatureType},ContactID:ContactID,ContactImpulse:ContactImpulse,Distance:Distance,DistanceInput:DistanceInput,DistanceJoint:DistanceJoint,DistanceOutput:DistanceOutput,DistanceProxy:DistanceProxy,DynamicTree:DynamicTree,Edge:Edge,EdgeShape:EdgeShape,Fixture:Fixture,FixtureProxy:FixtureProxy,FrictionJoint:FrictionJoint,GearJoint:GearJoint,Joint:Joint,JointEdge:JointEdge,Manifold:Manifold,ManifoldPoint:ManifoldPoint,get ManifoldType(){return exports2.ManifoldType},Mat22:Mat22,Mat33:Mat33,Math:math$1,MotorJoint:MotorJoint,MouseJoint:MouseJoint,get PointState(){return exports2.PointState},Polygon:Polygon,PolygonShape:PolygonShape,PrismaticJoint:PrismaticJoint,PulleyJoint:PulleyJoint,RevoluteJoint:RevoluteJoint,RopeJoint:RopeJoint,Rot:Rot,Serializer:Serializer,Settings:Settings,SettingsInternal:SettingsInternal,Shape:Shape,ShapeCast:ShapeCast,ShapeCastInput:ShapeCastInput,ShapeCastOutput:ShapeCastOutput,SimplexCache:SimplexCache,Solver:Solver,StageTestbed:StageTestbed,Sweep:Sweep,TOIInput:TOIInput,TOIOutput:TOIOutput,get TOIOutputState(){return exports2.TOIOutputState},Testbed:Testbed,TimeOfImpact:TimeOfImpact,TimeStep:TimeStep,Transform:Transform,TreeNode:TreeNode,Vec2:Vec2,Vec3:Vec3,VelocityConstraintPoint:VelocityConstraintPoint,WeldJoint:WeldJoint,WheelJoint:WheelJoint,World:World,WorldManifold:WorldManifold,clipSegmentToLine:clipSegmentToLine,getPointStates:getPointStates,internal:internal,mixFriction:mixFriction,mixRestitution:mixRestitution,stats:stats$1,testOverlap:testOverlap,testbed:testbed},Symbol.toStringTag,{value:"Module"}));exports2.AABB=AABB;exports2.Body=Body;exports2.Box=Box;exports2.BoxShape=BoxShape;exports2.BroadPhase=BroadPhase;exports2.Chain=Chain;exports2.ChainShape=ChainShape;exports2.Circle=Circle;exports2.CircleShape=CircleShape;exports2.ClipVertex=ClipVertex;exports2.CollideCircles=CollideCircles;exports2.CollideEdgeCircle=CollideEdgeCircle;exports2.CollideEdgePolygon=CollideEdgePolygon;exports2.CollidePolygonCircle=CollidePolygonCircle;exports2.CollidePolygons=CollidePolygons;exports2.Contact=Contact;exports2.ContactEdge=ContactEdge;exports2.ContactID=ContactID;exports2.ContactImpulse=ContactImpulse;exports2.Distance=Distance;exports2.DistanceInput=DistanceInput;exports2.DistanceJoint=DistanceJoint;exports2.DistanceOutput=DistanceOutput;exports2.DistanceProxy=DistanceProxy;exports2.DynamicTree=DynamicTree;exports2.Edge=Edge;exports2.EdgeShape=EdgeShape;exports2.Fixture=Fixture;exports2.FixtureProxy=FixtureProxy;exports2.FrictionJoint=FrictionJoint;exports2.GearJoint=GearJoint;exports2.Joint=Joint;exports2.JointEdge=JointEdge;exports2.Manifold=Manifold;exports2.ManifoldPoint=ManifoldPoint;exports2.Mat22=Mat22;exports2.Mat33=Mat33;exports2.Math=math$1;exports2.MotorJoint=MotorJoint;exports2.MouseJoint=MouseJoint;exports2.Polygon=Polygon;exports2.PolygonShape=PolygonShape;exports2.PrismaticJoint=PrismaticJoint;exports2.PulleyJoint=PulleyJoint;exports2.RevoluteJoint=RevoluteJoint;exports2.RopeJoint=RopeJoint;exports2.Rot=Rot;exports2.Serializer=Serializer;exports2.Settings=Settings;exports2.SettingsInternal=SettingsInternal;exports2.Shape=Shape;exports2.ShapeCast=ShapeCast;exports2.ShapeCastInput=ShapeCastInput;exports2.ShapeCastOutput=ShapeCastOutput;exports2.SimplexCache=SimplexCache;exports2.Solver=Solver;exports2.StageTestbed=StageTestbed;exports2.Sweep=Sweep;exports2.TOIInput=TOIInput;exports2.TOIOutput=TOIOutput;exports2.Testbed=Testbed;exports2.TimeOfImpact=TimeOfImpact;exports2.TimeStep=TimeStep;exports2.Transform=Transform;exports2.TreeNode=TreeNode;exports2.Vec2=Vec2;exports2.Vec3=Vec3;exports2.VelocityConstraintPoint=VelocityConstraintPoint;exports2.WeldJoint=WeldJoint;exports2.WheelJoint=WheelJoint;exports2.World=World;exports2.WorldManifold=WorldManifold;exports2.clipSegmentToLine=clipSegmentToLine;exports2.default=planck;exports2.getPointStates=getPointStates;exports2.internal=internal;exports2.mixFriction=mixFriction;exports2.mixRestitution=mixRestitution;exports2.stats=stats$1;exports2.testOverlap=testOverlap;exports2.testbed=testbed;Object.defineProperties(exports2,{__esModule:{value:true},[Symbol.toStringTag]:{value:"Module"}})})); \ No newline at end of file diff --git a/dist/planck-with-testbed.min.js.map b/dist/planck-with-testbed.min.js.map index 92fbc9ce..c080f9db 100644 --- a/dist/planck-with-testbed.min.js.map +++ b/dist/planck-with-testbed.min.js.map @@ -1 +1 @@ -{"version":3,"file":"planck-with-testbed.min.js","sources":["../node_modules/tslib/tslib.es6.js","../src/util/options.ts","../src/common/Math.ts","../src/common/Vec2.ts","../src/collision/AABB.ts","../src/Settings.ts","../src/util/Pool.ts","../src/collision/DynamicTree.ts","../src/collision/BroadPhase.ts","../src/common/Matrix.ts","../src/common/Rot.ts","../src/common/Sweep.ts","../src/common/Transform.ts","../src/dynamics/Velocity.ts","../src/dynamics/Position.ts","../src/collision/Shape.ts","../src/dynamics/Fixture.ts","../src/dynamics/Body.ts","../src/dynamics/Joint.ts","../src/util/stats.ts","../src/util/Timer.ts","../src/collision/Distance.ts","../src/collision/TimeOfImpact.ts","../src/dynamics/Solver.ts","../src/common/Mat22.ts","../src/collision/Manifold.ts","../src/dynamics/Contact.ts","../src/dynamics/World.ts","../src/common/Vec3.ts","../src/collision/shape/EdgeShape.ts","../src/collision/shape/ChainShape.ts","../src/collision/shape/PolygonShape.ts","../src/dynamics/joint/RevoluteJoint.ts","../src/collision/shape/CircleShape.ts","../src/dynamics/joint/DistanceJoint.ts","../src/dynamics/joint/FrictionJoint.ts","../src/common/Mat33.ts","../src/dynamics/joint/PrismaticJoint.ts","../src/dynamics/joint/RopeJoint.ts","../src/dynamics/joint/GearJoint.ts","../src/dynamics/joint/MotorJoint.ts","../src/dynamics/joint/MouseJoint.ts","../src/dynamics/joint/PulleyJoint.ts","../src/dynamics/joint/WeldJoint.ts","../src/dynamics/joint/WheelJoint.ts","../src/serializer/index.ts","../src/util/Testbed.ts","../src/collision/shape/BoxShape.ts","../src/collision/shape/CollideCircle.ts","../src/collision/shape/CollideEdgeCircle.ts","../src/collision/shape/CollidePolygon.ts","../src/collision/shape/CollideCirclePolygon.ts","../src/collision/shape/CollideEdgePolygon.ts","../src/internal.ts","../node_modules/stage-js/dist/stage.js","../testbed/StageTestbed.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/** @internal */\nexport const options = function(input: T, defaults: object): T {\n if (input === null || typeof input === \"undefined\") {\n // tslint:disable-next-line:no-object-literal-type-assertion\n input = {} as T;\n }\n\n const output = {...input};\n\n // tslint:disable-next-line:no-for-in\n for (const key in defaults) {\n if (defaults.hasOwnProperty(key) && typeof input[key] === \"undefined\") {\n output[key] = defaults[key];\n }\n }\n\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n const symbols = Object.getOwnPropertySymbols(defaults);\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n if (defaults.propertyIsEnumerable(symbol) && typeof input[symbol] === \"undefined\") {\n output[symbol] = defaults[symbol];\n }\n }\n }\n\n return output;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_random = Math.random;\n\n\nexport const EPSILON = 1e-9;\n\n/** @internal @deprecated */\nexport const isFinite = Number.isFinite;\n\n/**\n * @deprecated\n * Next Largest Power of 2 Given a binary integer value x, the next largest\n * power of 2 can be computed by a SWAR algorithm that recursively \"folds\" the\n * upper bits into the lower bits. This process yields a bit vector with the\n * same most significant 1 as x, but all 1's below it. Adding 1 to that value\n * yields the next largest power of 2. For a 32-bit value:\n */\nexport function nextPowerOfTwo(x: number): number {\n x |= (x >> 1);\n x |= (x >> 2);\n x |= (x >> 4);\n x |= (x >> 8);\n x |= (x >> 16);\n return x + 1;\n}\n\n/** @deprecated */\nexport function isPowerOfTwo(x: number): boolean {\n return x > 0 && (x & (x - 1)) === 0;\n}\n\n/** @deprecated */\nexport function mod(num: number, min?: number, max?: number): number {\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}\n\n/**\n * @deprecated\n * Returns a min if num is less than min, and max if more than max, otherwise returns num.\n */\nexport function clamp(num: number, min: number, max: number): number {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n } else {\n return num;\n }\n}\n\n/**\n * @deprecated\n * Returns a random number between min and max when two arguments are provided.\n * If one arg is provided between 0 to max.\n * If one arg is passed between 0 to 1.\n */\nexport function random(min?: number, max?: number): number {\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}\n\n/** @ignore */\nexport const 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;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"./Math\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\nexport interface Vec2Value {\n x: number;\n y: number;\n}\n\nexport class Vec2 {\n x: number;\n y: number;\n\n constructor(x: number, y: number);\n constructor(obj: { x: number, y: number });\n constructor();\n // tslint:disable-next-line:typedef\n constructor(x?, y?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec2)) {\n return new Vec2(x, y);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n } else {\n this.x = x;\n this.y = y;\n }\n _ASSERT && Vec2.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = data.x;\n obj.y = data.y;\n return obj;\n }\n\n static zero(): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = 0;\n obj.y = 0;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = x;\n obj.y = y;\n return obj;\n }\n\n static clone(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(v.x, v.y);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /**\n * Does this vector contain finite coordinates?\n */\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.x) && Number.isFinite(obj.y);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec2.isValid(o), \"Invalid Vec2!\", o);\n }\n\n clone(): Vec2 {\n return Vec2.clone(this);\n }\n\n /**\n * Set this vector to all zeros.\n *\n * @returns this\n */\n setZero(): Vec2 {\n this.x = 0.0;\n this.y = 0.0;\n return this;\n }\n\n set(x: number, y: number): Vec2;\n set(value: Vec2Value): Vec2;\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n // tslint:disable-next-line:typedef\n set(x, y?) {\n if (typeof x === \"object\") {\n _ASSERT && Vec2.assert(x);\n this.x = x.x;\n this.y = x.y;\n } else {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n }\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setNum(x: number, y: number) {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setVec2(value: Vec2Value) {\n _ASSERT && Vec2.assert(value);\n this.x = value.x;\n this.y = value.y;\n\n return this;\n }\n\n /** @internal @deprecated Use setCombine or setMul */\n wSet(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.setCombine(a, v, b, w);\n } else {\n return this.setMul(a, v);\n }\n }\n\n /**\n * Set linear combination of v and w: `a * v + b * w`\n */\n setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x = x;\n this.y = y;\n return this;\n }\n\n setMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * Add a vector to this vector.\n *\n * @returns this\n */\n add(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x += w.x;\n this.y += w.y;\n return this;\n }\n\n /** @internal @deprecated Use addCombine or addMul */\n wAdd(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.addCombine(a, v, b, w);\n } else {\n return this.addMul(a, v);\n }\n }\n\n /**\n * Add linear combination of v and w: `a * v + b * w`\n */\n addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x += x;\n this.y += y;\n return this;\n }\n\n addMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x += x;\n this.y += y;\n return this;\n }\n\n /**\n * @deprecated Use subCombine or subMul\n */\n wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.subCombine(a, v, b, w);\n } else {\n return this.subMul(a, v);\n }}\n\n /**\n * Subtract linear combination of v and w: `a * v + b * w`\n */\n subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n subMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n /**\n * Subtract a vector from this vector\n *\n * @returns this\n */\n sub(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x -= w.x;\n this.y -= w.y;\n return this;\n }\n\n /**\n * Multiply this vector by a scalar.\n *\n * @returns this\n */\n mul(m: number): Vec2 {\n _ASSERT && console.assert(Number.isFinite(m));\n this.x *= m;\n this.y *= m;\n return this;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n length(): number {\n return Vec2.lengthOf(this);\n }\n\n /**\n * Get the length squared.\n */\n lengthSquared(): number {\n return Vec2.lengthSquared(this);\n }\n\n /**\n * Convert this vector into a unit vector.\n *\n * @returns old length\n */\n normalize(): number {\n const length = this.length();\n if (length < EPSILON) {\n return 0.0;\n }\n const invLength = 1.0 / length;\n this.x *= invLength;\n this.y *= invLength;\n return length;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n static lengthOf(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return math_sqrt(v.x * v.x + v.y * v.y);\n }\n\n /**\n * Get the length squared.\n */\n static lengthSquared(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return v.x * v.x + v.y * v.y;\n }\n\n static distance(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return math_sqrt(dx * dx + dy * dy);\n }\n\n static distanceSquared(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return dx * dx + dy * dy;\n }\n\n static areEqual(v: Vec2Value, w: Vec2Value): boolean {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v === w || typeof w === \"object\" && w !== null && v.x === w.x && v.y === w.y;\n }\n\n /**\n * Get the skew vector such that dot(skew_vec, other) == cross(vec, other)\n */\n static skew(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.y, v.x);\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.x + v.y * w.y;\n }\n\n /** Cross product between two vectors */\n static cross(v: Vec2Value, w: Vec2Value): number;\n /** Cross product between a vector and a scalar */\n static cross(v: Vec2Value, w: number): Vec2;\n /** Cross product between a scalar and a vector */\n static cross(v: number, w: Vec2Value): Vec2;\n static cross(v: any, w: any): any {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n\n } else {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n }\n\n /** Cross product on two vectors */\n static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n\n /** Cross product on a vector and a scalar */\n static crossVec2Num(v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n }\n\n /** Cross product on a vector and a scalar */\n static crossNumVec2(v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n }\n\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2;\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2;\n static addCross(a: Vec2Value, v: any, w: any): Vec2 {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n static add(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x + w.x, v.y + w.y);\n }\n\n /** @hidden @deprecated */\n static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return Vec2.combine(a, v, b, w);\n } else {\n return Vec2.mulNumVec2(a, v);\n }\n }\n\n static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n return Vec2.zero().setCombine(a, v, b, w);\n }\n\n static sub(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x - w.x, v.y - w.y);\n }\n\n static mul(a: Vec2Value, b: number): Vec2;\n static mul(a: number, b: Vec2Value): Vec2;\n static mul(a: any, b: any): Vec2 {\n if (typeof a === \"object\") {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n\n } else if (typeof b === \"object\") {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n }\n\n static mulVec2Num(a: Vec2Value, b: number): Vec2 {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n }\n\n static mulNumVec2(a: number, b: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n\n neg(): Vec2 {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n\n static neg(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.x, -v.y);\n }\n\n static abs(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(math_abs(v.x), math_abs(v.y));\n }\n\n static mid(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo((v.x + w.x) * 0.5, (v.y + w.y) * 0.5);\n }\n\n static upper(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_max(v.x, w.x), math_max(v.y, w.y));\n }\n\n static lower(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_min(v.x, w.x), math_min(v.y, w.y));\n }\n\n clamp(max: number): Vec2 {\n const lengthSqr = this.x * this.x + this.y * this.y;\n if (lengthSqr > max * max) {\n const scale = max / math_sqrt(lengthSqr);\n this.x *= scale;\n this.y *= scale;\n }\n return this;\n }\n\n static clamp(v: Vec2Value, max: number): Vec2 {\n const r = Vec2.neo(v.x, v.y);\n r.clamp(max);\n return r;\n }\n\n /** @hidden @deprecated */\n static scaleFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x * x, v.y * y);\n };\n }\n\n /** @hidden @deprecated */\n static translateFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x + x, v.y + y);\n };\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/**\n * Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n */\nexport interface RayCastInput {\n p1: Vec2Value;\n p2: Vec2Value;\n maxFraction: number;\n}\n\nexport type RayCastCallback = (subInput: RayCastInput, id: number) => number;\n\n/**\n * Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`,\n * where `p1` and `p2` come from RayCastInput.\n */\nexport interface RayCastOutput {\n normal: Vec2;\n fraction: number;\n}\n\nexport interface AABBValue {\n lowerBound: Vec2Value;\n upperBound: Vec2Value;\n}\n\nexport class AABB {\n lowerBound: Vec2;\n upperBound: Vec2;\n\n constructor(lower?: Vec2Value, upper?: Vec2Value) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof AABB)) {\n return new AABB(lower, upper);\n }\n\n this.lowerBound = Vec2.zero();\n this.upperBound = Vec2.zero();\n\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\n /**\n * Verify that the bounds are sorted.\n */\n isValid(): boolean {\n return AABB.isValid(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!AABB.isValid(o), \"Invalid AABB!\", o);\n }\n\n /**\n * Get the center of the AABB.\n */\n getCenter(): Vec2 {\n return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5);\n }\n\n /**\n * Get the extents of the AABB (half-widths).\n */\n getExtents(): Vec2 {\n return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5);\n }\n\n /**\n * Get the perimeter length.\n */\n getPerimeter(): number {\n return 2.0 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y);\n }\n\n /**\n * Combine one or two AABB into this one.\n */\n combine(a: AABBValue, b?: AABBValue): void {\n b = b || this;\n\n const lowerA = a.lowerBound;\n const upperA = a.upperBound;\n const lowerB = b.lowerBound;\n const upperB = b.upperBound;\n\n const lowerX = math_min(lowerA.x, lowerB.x);\n const lowerY = math_min(lowerA.y, lowerB.y);\n const upperX = math_max(upperB.x, upperA.x);\n const upperY = math_max(upperB.y, upperA.y);\n\n this.lowerBound.setNum(lowerX, lowerY);\n this.upperBound.setNum(upperX, upperY);\n }\n\n combinePoints(a: Vec2Value, b: Vec2Value): void {\n this.lowerBound.setNum(math_min(a.x, b.x), math_min(a.y, b.y));\n this.upperBound.setNum(math_max(a.x, b.x), math_max(a.y, b.y));\n }\n\n set(aabb: AABBValue): void {\n this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y);\n this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y);\n }\n\n contains(aabb: AABBValue): boolean {\n let 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\n extend(value: number): AABB {\n AABB.extend(this, value);\n return this;\n }\n\n static extend(out: AABBValue, value: number): AABBValue {\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\n static testOverlap(a: AABBValue, b: AABBValue): boolean {\n const d1x = b.lowerBound.x - a.upperBound.x;\n const d2x = a.lowerBound.x - b.upperBound.x;\n\n const d1y = b.lowerBound.y - a.upperBound.y;\n const d2y = a.lowerBound.y - b.upperBound.y;\n\n if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) {\n return false;\n }\n return true;\n }\n\n static areEqual(a: AABBValue, b: AABBValue): boolean {\n return Vec2.areEqual(a.lowerBound, b.lowerBound) && Vec2.areEqual(a.upperBound, b.upperBound);\n }\n\n static diff(a: AABBValue, b: AABBValue): number {\n const wD = math_max(0, math_min(a.upperBound.x, b.upperBound.x) - math_max(b.lowerBound.x, a.lowerBound.x));\n const hD = math_max(0, math_min(a.upperBound.y, b.upperBound.y) - math_max(b.lowerBound.y, a.lowerBound.y));\n\n const wA = a.upperBound.x - a.lowerBound.x;\n const hA = a.upperBound.y - a.lowerBound.y;\n\n const wB = b.upperBound.x - b.lowerBound.x;\n const hB = b.upperBound.y - b.lowerBound.y;\n\n return wA * hA + wB * hB - wD * hD;\n }\n\n rayCast(output: RayCastOutput, input: RayCastInput): boolean {\n // From Real-time Collision Detection, p179.\n\n let tmin = -Infinity;\n let tmax = Infinity;\n\n const p = input.p1;\n const d = Vec2.sub(input.p2, input.p1);\n const absD = Vec2.abs(d);\n\n const normal = Vec2.zero();\n\n for (let f: \"x\" | \"y\" = \"x\"; f !== null; f = (f === \"x\" ? \"y\" : null)) {\n if (absD.x < EPSILON) {\n // Parallel.\n if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) {\n return false;\n }\n } else {\n const inv_d = 1.0 / d[f];\n let t1 = (this.lowerBound[f] - p[f]) * inv_d;\n let t2 = (this.upperBound[f] - p[f]) * inv_d;\n\n // Sign of the normal vector.\n let s = -1.0;\n\n if (t1 > t2) {\n const temp = t1;\n t1 = t2;\n t2 = temp;\n s = 1.0;\n }\n\n // Push the min up\n if (t1 > tmin) {\n normal.setZero();\n normal[f] = s;\n tmin = t1;\n }\n\n // Pull the max down\n tmax = math_min(tmax, t2);\n\n if (tmin > tmax) {\n return false;\n }\n }\n }\n\n // Does the ray start inside the box?\n // Does the ray intersect beyond the max fraction?\n if (tmin < 0.0 || input.maxFraction < tmin) {\n return false;\n }\n\n // Intersection.\n output.fraction = tmin;\n output.normal = normal;\n return true;\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue {\n out.lowerBound.x = math_min(a.x, b.x);\n out.lowerBound.y = math_min(a.y, b.y);\n out.upperBound.x = math_max(a.x, b.x);\n out.upperBound.y = math_max(a.y, b.y);\n return out;\n }\n\n static combinedPerimeter(a: AABBValue, b: AABBValue) {\n const lx = math_min(a.lowerBound.x, b.lowerBound.x);\n const ly = math_min(a.lowerBound.y, b.lowerBound.y);\n const ux = math_max(a.upperBound.x, b.upperBound.x);\n const uy = math_max(a.upperBound.y, b.upperBound.y);\n return 2.0 * (ux - lx + uy - ly); \n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Tuning constants based on meters-kilograms-seconds (MKS) units.\n * \n * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units.\n */\nexport class Settings {\n /**\n * You can use this to change the length scale used by your game.\n * \n * For example for inches you could use 39.4.\n */\n static lengthUnitsPerMeter = 1.0;\n \n // Collision\n /**\n * The maximum number of contact points between two convex shapes. Do not change\n * this value.\n */\n static maxManifoldPoints: number = 2;\n\n /**\n * The maximum number of vertices on a convex polygon. You cannot increase this\n * too much because BlockAllocator has a maximum object size.\n */\n static maxPolygonVertices: number = 12;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This allows proxies to move\n * by a small amount without triggering a tree adjustment. This is in meters.\n */\n static aabbExtension: number = 0.1;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This is used to predict the\n * future position based on the current displacement. This is a dimensionless\n * multiplier.\n */\n static aabbMultiplier: number = 2.0;\n\n /**\n * A small length used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static linearSlop: number = 0.005;\n\n /**\n * A small angle used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static angularSlop: number = (2.0 / 180.0 * math_PI);\n\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 static get polygonRadius(): number { return 2.0 * Settings.linearSlop; }\n\n /**\n * Maximum number of sub-steps per contact in continuous physics simulation.\n */\n static maxSubSteps: number = 8;\n\n // Dynamics\n\n /**\n * Maximum number of contacts to be handled to solve a TOI impact.\n */\n static maxTOIContacts: number = 32;\n\n /**\n * Maximum iterations to solve a TOI.\n */\n static maxTOIIterations: number = 20;\n\n /**\n * Maximum iterations to find Distance.\n */\n static maxDistanceIterations: number = 20;\n\n /**\n * A velocity threshold for elastic collisions. Any collision with a relative\n * linear velocity below this threshold will be treated as inelastic.\n */\n static velocityThreshold: number = 1.0;\n\n /**\n * The maximum linear position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxLinearCorrection: number = 0.2;\n\n /**\n * The maximum angular position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxAngularCorrection: number = (8.0 / 180.0 * math_PI);\n\n /**\n * The maximum linear velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxTranslation: number = 2.0;\n\n /**\n * The maximum angular velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxRotation: number = (0.5 * math_PI);\n\n /**\n * This scale factor controls how fast overlap is resolved. Ideally this would\n * be 1 so that overlap is removed in one time step. However using values close\n * to 1 often lead to overshoot.\n */\n static baumgarte: number = 0.2;\n static toiBaugarte: number = 0.75;\n\n // Sleep\n\n /**\n * The time that a body must be still before it will go to sleep.\n */\n static timeToSleep: number = 0.5;\n\n /**\n * A body cannot sleep if its linear velocity is above this tolerance.\n */\n static linearSleepTolerance: number = 0.01;\n\n /**\n * A body cannot sleep if its angular velocity is above this tolerance.\n */\n static angularSleepTolerance: number = (2.0 / 180.0 * math_PI);\n}\n\n/** @internal */\nexport class SettingsInternal {\n static get maxManifoldPoints() {\n return Settings.maxManifoldPoints;\n }\n static get maxPolygonVertices() {\n return Settings.maxPolygonVertices;\n }\n static get aabbExtension() {\n return Settings.aabbExtension * Settings.lengthUnitsPerMeter;\n }\n static get aabbMultiplier() {\n return Settings.aabbMultiplier;\n }\n static get linearSlop() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get linearSlopSquared() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get angularSlop() {\n return Settings.angularSlop;\n }\n static get polygonRadius() {\n return 2.0 * Settings.linearSlop;\n }\n static get maxSubSteps() {\n return Settings.maxSubSteps;\n }\n static get maxTOIContacts() {\n return Settings.maxTOIContacts;\n }\n static get maxTOIIterations() {\n return Settings.maxTOIIterations;\n }\n static get maxDistanceIterations() {\n return Settings.maxDistanceIterations;\n }\n static get velocityThreshold() {\n return Settings.velocityThreshold * Settings.lengthUnitsPerMeter;\n }\n static get maxLinearCorrection() {\n return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter;\n }\n static get maxAngularCorrection() {\n return Settings.maxAngularCorrection;\n }\n static get maxTranslation() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxTranslationSquared() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxRotation() {\n return Settings.maxRotation;\n }\n static get maxRotationSquared() {\n return Settings.maxRotation * Settings.maxRotation;\n }\n static get baumgarte() {\n return Settings.baumgarte;\n }\n static get toiBaugarte() {\n return Settings.toiBaugarte;\n }\n static get timeToSleep() {\n return Settings.timeToSleep;\n }\n static get linearSleepTolerance() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get linearSleepToleranceSqr() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get angularSleepTolerance() {\n return Settings.angularSleepTolerance;\n }\n static get angularSleepToleranceSqr() {\n return Settings.angularSleepTolerance * Settings.angularSleepTolerance;\n }\n}\n","/*\n * Copyright (c) 2016-2018 Ali Shakiba http://shakiba.me/planck.js\n *\n * This software is provided 'as-is', without any express or implied\n * warranty. In no event will the authors be held liable for any damages\n * arising from the use of this software.\n * Permission is granted to anyone to use this software for any purpose,\n * including commercial applications, and to alter it and redistribute it\n * freely, subject to the following restrictions:\n * 1. The origin of this software must not be misrepresented; you must not\n * claim that you wrote the original software. If you use this software\n * in a product, an acknowledgment in the product documentation would be\n * appreciated but is not required.\n * 2. Altered source versions must be plainly marked as such, and must not be\n * misrepresented as being the original software.\n * 3. This notice may not be removed or altered from any source distribution.\n */\n\n/** @internal */\nexport interface PoolOptions {\n max?: number,\n create?: () => T,\n /** Called when an object is being re-allocated. */\n allocate?: (item: T) => void,\n /** Called when an object is returned to pool. */\n release?: (item: T) => void,\n /** Called when an object is returned to the pool but will be disposed from pool. */\n dispose?: (item: T) => T,\n}\n\n/** @internal */\nexport class Pool {\n _list: T[] = [];\n _max: number = Infinity;\n\n _createFn: () => T;\n _hasCreateFn: boolean = false;\n _createCount: number = 0;\n\n _allocateFn: (item: T) => void;\n _hasAllocateFn: boolean = false;\n _allocateCount: number = 0;\n\n _releaseFn: (item: T) => void;\n _hasReleaseFn: boolean = false;\n _releaseCount: number = 0;\n\n _disposeFn: (item: T) => T;\n _hasDisposeFn: boolean = false;\n _disposeCount: number = 0;\n\n constructor(opts: PoolOptions) {\n this._list = [];\n this._max = opts.max || this._max;\n\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\n max(n?: number): number | Pool {\n if (typeof n === \"number\") {\n this._max = n;\n return this;\n }\n return this._max;\n }\n\n size(): number {\n return this._list.length;\n }\n\n allocate(): T {\n let item: T;\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 // tslint:disable-next-line:no-object-literal-type-assertion\n item = {} as T;\n }\n }\n this._allocateCount++;\n if (this._hasAllocateFn) {\n this._allocateFn(item);\n }\n return item;\n }\n\n release(item: T): void {\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\n toString(): string {\n return \" +\" + this._createCount + \" >\" + this._allocateCount + \" <\" + this._releaseCount + \" -\"\n + this._disposeCount + \" =\" + this._list.length + \"/\" + this._max;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Pool } from \"../util/Pool\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\nexport type DynamicTreeQueryCallback = (nodeId: number) => boolean;\n\n/**\n * A node in the dynamic tree. The client does not interact with this directly.\n */\nexport class TreeNode {\n id: number;\n /** Enlarged AABB */\n aabb: AABB = new AABB();\n userData: T = null;\n parent: TreeNode = null;\n child1: TreeNode = null;\n child2: TreeNode = null;\n /** 0: leaf, -1: free node */\n height: number = -1;\n\n constructor(id?: number) {\n this.id = id;\n }\n\n /** @internal */\n toString(): string {\n return this.id + \": \" + this.userData;\n }\n\n isLeaf(): boolean {\n return this.child1 == null;\n }\n}\n\n/** @internal */ const poolTreeNode = new Pool>({\n create(): TreeNode {\n return new TreeNode();\n },\n release(node: TreeNode) {\n node.userData = null;\n node.parent = null;\n node.child1 = null;\n node.child2 = null;\n node.height = -1;\n node.id = undefined;\n }\n});\n\n/**\n * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A\n * dynamic tree arranges data in a binary tree to accelerate queries such as\n * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we\n * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger\n * than the client object. This allows the client object to move by small\n * amounts without triggering a tree update.\n *\n * Nodes are pooled and relocatable, so we use node indices rather than\n * pointers.\n */\nexport class DynamicTree {\n m_root: TreeNode;\n m_lastProxyId: number;\n m_nodes: {\n [id: number]: TreeNode\n };\n\n constructor() {\n this.m_root = null;\n this.m_nodes = {};\n this.m_lastProxyId = 0;\n }\n\n /**\n * Get proxy user data.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getUserData(id: number): T {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.userData;\n }\n\n /**\n * Get the fat AABB for a node id.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getFatAABB(id: number): AABB {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.aabb;\n }\n\n allocateNode(): TreeNode {\n const node = poolTreeNode.allocate();\n node.id = ++this.m_lastProxyId;\n this.m_nodes[node.id] = node;\n return node;\n }\n\n freeNode(node: TreeNode): void {\n // tslint:disable-next-line:no-dynamic-delete\n delete this.m_nodes[node.id];\n poolTreeNode.release(node);\n }\n\n /**\n * Create a proxy in the tree as a leaf node. We return the index of the node\n * instead of a pointer so that we can grow the node pool.\n *\n * Create a proxy. Provide a tight fitting AABB and a userData pointer.\n */\n createProxy(aabb: AABBValue, userData: T): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n\n const node = this.allocateNode();\n\n node.aabb.set(aabb);\n\n // Fatten the aabb.\n AABB.extend(node.aabb, Settings.aabbExtension);\n\n node.userData = userData;\n node.height = 0;\n\n this.insertLeaf(node);\n\n return node.id;\n }\n\n /**\n * Destroy a proxy. This asserts if the id is invalid.\n */\n destroyProxy(id: number): void {\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n this.removeLeaf(node);\n this.freeNode(node);\n }\n\n /**\n * Move a proxy with a swepted AABB. If the proxy has moved outside of its\n * fattened AABB, then the proxy is removed from the tree and re-inserted.\n * Otherwise the function returns immediately.\n *\n * @param d Displacement\n *\n * @return true if the proxy was re-inserted.\n */\n moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean {\n _ASSERT && console.assert(AABB.isValid(aabb));\n _ASSERT && console.assert(!d || Vec2.isValid(d));\n\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n if (node.aabb.contains(aabb)) {\n return false;\n }\n\n this.removeLeaf(node);\n\n node.aabb.set(aabb);\n\n // Extend AABB.\n aabb = node.aabb;\n AABB.extend(aabb, Settings.aabbExtension);\n\n // Predict AABB displacement.\n // const d = Vec2.mul(Settings.aabbMultiplier, displacement);\n\n if (d.x < 0.0) {\n aabb.lowerBound.x += d.x * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.x += d.x * Settings.aabbMultiplier;\n }\n\n if (d.y < 0.0) {\n aabb.lowerBound.y += d.y * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.y += d.y * Settings.aabbMultiplier;\n }\n\n this.insertLeaf(node);\n\n return true;\n }\n\n insertLeaf(leaf: TreeNode): void {\n _ASSERT && console.assert(AABB.isValid(leaf.aabb));\n\n if (this.m_root == null) {\n this.m_root = leaf;\n this.m_root.parent = null;\n return;\n }\n\n // Find the best sibling for this node\n const leafAABB = leaf.aabb;\n let index = this.m_root;\n while (!index.isLeaf()) {\n const child1 = index.child1;\n const child2 = index.child2;\n\n const area = index.aabb.getPerimeter();\n\n const combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB);\n\n // Cost of creating a new parent for this node and the new leaf\n const cost = 2.0 * combinedArea;\n\n // Minimum cost of pushing the leaf further down the tree\n const inheritanceCost = 2.0 * (combinedArea - area);\n\n // Cost of descending into child1\n const newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb);\n let cost1 = newArea1 + inheritanceCost;\n if (!child1.isLeaf()) {\n const oldArea = child1.aabb.getPerimeter();\n cost1 -= oldArea;\n }\n\n // Cost of descending into child2\n const newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb);\n let cost2 = newArea2 + inheritanceCost;\n if (!child2.isLeaf()) {\n const oldArea = child2.aabb.getPerimeter();\n cost2 -= oldArea;\n }\n\n // Descend according to the minimum cost.\n if (cost < cost1 && cost < cost2) {\n break;\n }\n\n // Descend\n if (cost1 < cost2) {\n index = child1;\n } else {\n index = child2;\n }\n }\n\n const sibling = index;\n\n // Create a new parent.\n const oldParent = sibling.parent;\n const 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\n if (oldParent != null) {\n // The sibling was not the root.\n if (oldParent.child1 === sibling) {\n oldParent.child1 = newParent;\n } else {\n oldParent.child2 = newParent;\n }\n\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n } else {\n // The sibling was the root.\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n this.m_root = newParent;\n }\n\n // Walk back up the tree fixing heights and AABBs\n index = leaf.parent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n _ASSERT && console.assert(child1 != null);\n _ASSERT && console.assert(child2 != null);\n\n index.height = 1 + math_max(child1.height, child2.height);\n index.aabb.combine(child1.aabb, child2.aabb);\n\n index = index.parent;\n }\n\n // validate();\n }\n\n removeLeaf(leaf: TreeNode): void {\n if (leaf === this.m_root) {\n this.m_root = null;\n return;\n }\n\n const parent = leaf.parent;\n const grandParent = parent.parent;\n let sibling;\n if (parent.child1 === leaf) {\n sibling = parent.child2;\n } else {\n sibling = parent.child1;\n }\n\n if (grandParent != null) {\n // Destroy parent and connect sibling to grandParent.\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\n // Adjust ancestor bounds.\n let index = grandParent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n index.aabb.combine(child1.aabb, child2.aabb);\n index.height = 1 + math_max(child1.height, child2.height);\n\n index = index.parent;\n }\n } else {\n this.m_root = sibling;\n sibling.parent = null;\n this.freeNode(parent);\n }\n\n // validate();\n }\n\n /**\n * Perform a left or right rotation if node A is imbalanced. Returns the new\n * root index.\n */\n balance(iA: TreeNode): TreeNode {\n _ASSERT && console.assert(iA != null);\n\n const A = iA;\n if (A.isLeaf() || A.height < 2) {\n return iA;\n }\n\n const B = A.child1;\n const C = A.child2;\n\n const balance = C.height - B.height;\n\n // Rotate C up\n if (balance > 1) {\n const F = C.child1;\n const G = C.child2;\n\n // Swap A and C\n C.child1 = A;\n C.parent = A.parent;\n A.parent = C;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(B.height, G.height);\n C.height = 1 + math_max(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\n A.height = 1 + math_max(B.height, F.height);\n C.height = 1 + math_max(A.height, G.height);\n }\n\n return C;\n }\n\n // Rotate B up\n if (balance < -1) {\n const D = B.child1;\n const E = B.child2;\n\n // Swap A and B\n B.child1 = A;\n B.parent = A.parent;\n A.parent = B;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(C.height, E.height);\n B.height = 1 + math_max(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\n A.height = 1 + math_max(C.height, D.height);\n B.height = 1 + math_max(A.height, E.height);\n }\n\n return B;\n }\n\n return A;\n }\n\n /**\n * Compute the height of the binary tree in O(N) time. Should not be called\n * often.\n */\n getHeight(): number {\n if (this.m_root == null) {\n return 0;\n }\n\n return this.m_root.height;\n }\n\n /**\n * Get the ratio of the sum of the node areas to the root area.\n */\n getAreaRatio(): number {\n if (this.m_root == null) {\n return 0.0;\n }\n\n const root = this.m_root;\n const rootArea = root.aabb.getPerimeter();\n\n let totalArea = 0.0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // Free node in pool\n continue;\n }\n\n totalArea += node.aabb.getPerimeter();\n }\n\n this.iteratorPool.release(it);\n\n return totalArea / rootArea;\n }\n\n /**\n * Compute the height of a sub-tree.\n */\n computeHeight(id?: number): number {\n let node;\n if (typeof id !== \"undefined\") {\n node = this.m_nodes[id];\n } else {\n node = this.m_root;\n }\n\n // _ASSERT && console.assert(0 <= id && id < this.m_nodeCapacity);\n\n if (node.isLeaf()) {\n return 0;\n }\n\n const height1 = this.computeHeight(node.child1.id);\n const height2 = this.computeHeight(node.child2.id);\n return 1 + math_max(height1, height2);\n }\n\n validateStructure(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n if (node === this.m_root) {\n _ASSERT && console.assert(node.parent == null);\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n _ASSERT && console.assert(child1.parent === node);\n _ASSERT && console.assert(child2.parent === node);\n\n this.validateStructure(child1);\n this.validateStructure(child2);\n }\n\n validateMetrics(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n const height1 = child1.height;\n const height2 = child2.height;\n const height = 1 + math_max(height1, height2);\n _ASSERT && console.assert(node.height === height);\n\n const aabb = new AABB();\n aabb.combine(child1.aabb, child2.aabb);\n\n _ASSERT && console.assert(AABB.areEqual(aabb, node.aabb));\n\n this.validateMetrics(child1);\n this.validateMetrics(child2);\n }\n\n /**\n * Validate this tree. For testing.\n */\n validate(): void {\n if (!_ASSERT) return;\n this.validateStructure(this.m_root);\n this.validateMetrics(this.m_root);\n\n console.assert(this.getHeight() === this.computeHeight());\n }\n\n /**\n * Get the maximum balance of an node in the tree. The balance is the difference\n * in height of the two children of a node.\n */\n getMaxBalance(): number {\n let maxBalance = 0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height <= 1) {\n continue;\n }\n\n _ASSERT && console.assert(!node.isLeaf());\n\n const balance = math_abs(node.child2.height - node.child1.height);\n maxBalance = math_max(maxBalance, balance);\n }\n this.iteratorPool.release(it);\n\n return maxBalance;\n }\n\n /**\n * Build an optimal tree. Very expensive. For testing.\n */\n rebuildBottomUp(): void {\n const nodes = [];\n let count = 0;\n\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // free node in pool\n continue;\n }\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\n while (count > 1) {\n let minCost = Infinity;\n let iMin = -1;\n let jMin = -1;\n for (let i = 0; i < count; ++i) {\n const aabbi = nodes[i].aabb;\n for (let j = i + 1; j < count; ++j) {\n const aabbj = nodes[j].aabb;\n const cost = AABB.combinedPerimeter(aabbi, aabbj);\n if (cost < minCost) {\n iMin = i;\n jMin = j;\n minCost = cost;\n }\n }\n }\n\n const child1 = nodes[iMin];\n const child2 = nodes[jMin];\n\n const parent = this.allocateNode();\n parent.child1 = child1;\n parent.child2 = child2;\n parent.height = 1 + math_max(child1.height, child2.height);\n parent.aabb.combine(child1.aabb, child2.aabb);\n parent.parent = null;\n\n child1.parent = parent;\n child2.parent = parent;\n\n nodes[jMin] = nodes[count - 1];\n nodes[iMin] = parent;\n --count;\n }\n\n this.m_root = nodes[0];\n\n _ASSERT && this.validate();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n const 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\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void {\n _ASSERT && console.assert(typeof queryCallback === \"function\");\n const stack = this.stackPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, aabb)) {\n if (node.isLeaf()) {\n const 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\n this.stackPool.release(stack);\n }\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n // TODO: GC\n _ASSERT && console.assert(typeof rayCastCallback === \"function\");\n const p1 = input.p1;\n const p2 = input.p2;\n const r = Vec2.sub(p2, p1);\n _ASSERT && console.assert(r.lengthSquared() > 0.0);\n r.normalize();\n\n // v is perpendicular to the segment.\n const v = Vec2.crossNumVec2(1.0, r);\n const abs_v = Vec2.abs(v);\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n\n let maxFraction = input.maxFraction;\n\n // Build a bounding box for the segment.\n const segmentAABB = new AABB();\n let t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2);\n segmentAABB.combinePoints(p1, t);\n\n const stack = this.stackPool.allocate();\n const subInput = this.inputPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, segmentAABB) === false) {\n continue;\n }\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n const c = node.aabb.getCenter();\n const h = node.aabb.getExtents();\n const separation = math_abs(Vec2.dot(v, Vec2.sub(p1, c))) - Vec2.dot(abs_v, h);\n if (separation > 0.0) {\n continue;\n }\n\n if (node.isLeaf()) {\n subInput.p1 = Vec2.clone(input.p1);\n subInput.p2 = Vec2.clone(input.p2);\n subInput.maxFraction = maxFraction;\n\n const value = rayCastCallback(subInput, node.id);\n\n if (value === 0.0) {\n // The client has terminated the ray cast.\n break;\n } else if (value > 0.0) {\n // update segment bounding box.\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\n private inputPool: Pool = new Pool({\n create(): RayCastInput {\n // tslint:disable-next-line:no-object-literal-type-assertion\n return {} as RayCastInput;\n },\n release(stack: RayCastInput): void {\n }\n });\n\n private stackPool: Pool>> = new Pool>>({\n create(): Array> {\n return [];\n },\n release(stack: Array>): void {\n stack.length = 0;\n }\n });\n\n private iteratorPool: Pool> = new Pool>({\n create(): Iterator {\n return new Iterator();\n },\n release(iterator: Iterator): void {\n iterator.close();\n }\n });\n\n}\n\n/** @internal */\nclass Iterator {\n parents: Array> = [];\n states: number[] = [];\n preorder(root: TreeNode): Iterator {\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 next(): TreeNode {\n while (this.parents.length > 0) {\n const i = this.parents.length - 1;\n const 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 close(): void {\n this.parents.length = 0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\nimport { DynamicTree, DynamicTreeQueryCallback } from \"./DynamicTree\";\nimport { FixtureProxy } from \"../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/**\n * The broad-phase wraps and extends a dynamic-tree to keep track of moved\n * objects and query them on update.\n */\nexport class BroadPhase {\n m_tree: DynamicTree = new DynamicTree();\n m_moveBuffer: number[] = [];\n\n m_callback: (userDataA: any, userDataB: any) => void;\n m_queryProxyId: number;\n\n /**\n * Get user data from a proxy. Returns null if the id is invalid.\n */\n getUserData(proxyId: number): FixtureProxy {\n return this.m_tree.getUserData(proxyId);\n }\n\n /**\n * Test overlap of fat AABBs.\n */\n testOverlap(proxyIdA: number, proxyIdB: number): boolean {\n const aabbA = this.m_tree.getFatAABB(proxyIdA);\n const aabbB = this.m_tree.getFatAABB(proxyIdB);\n return AABB.testOverlap(aabbA, aabbB);\n }\n\n /**\n * Get the fat AABB for a proxy.\n */\n getFatAABB(proxyId: number): AABB {\n return this.m_tree.getFatAABB(proxyId);\n }\n\n /**\n * Get the number of proxies.\n */\n getProxyCount(): number {\n return this.m_moveBuffer.length;\n }\n\n /**\n * Get the height of the embedded tree.\n */\n getTreeHeight(): number {\n return this.m_tree.getHeight();\n }\n\n /**\n * Get the balance (integer) of the embedded tree.\n */\n getTreeBalance(): number {\n return this.m_tree.getMaxBalance();\n }\n\n /**\n * Get the quality metric of the embedded tree.\n */\n getTreeQuality(): number {\n return this.m_tree.getAreaRatio();\n }\n\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query = (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void => {\n this.m_tree.query(aabb, queryCallback);\n };\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n this.m_tree.rayCast(input, rayCastCallback);\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_tree.shiftOrigin(newOrigin);\n }\n\n /**\n * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs\n * is called.\n */\n createProxy(aabb: AABBValue, userData: FixtureProxy): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const proxyId = this.m_tree.createProxy(aabb, userData);\n this.bufferMove(proxyId);\n return proxyId;\n }\n\n /**\n * Destroy a proxy. It is up to the client to remove any pairs.\n */\n destroyProxy(proxyId: number): void {\n this.unbufferMove(proxyId);\n this.m_tree.destroyProxy(proxyId);\n }\n\n /**\n * Call moveProxy as many times as you like, then when you are done call\n * UpdatePairs to finalized the proxy pairs (for your time step).\n */\n moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const changed = this.m_tree.moveProxy(proxyId, aabb, displacement);\n if (changed) {\n this.bufferMove(proxyId);\n }\n }\n\n /**\n * Call to trigger a re-processing of it's pairs on the next call to\n * UpdatePairs.\n */\n touchProxy(proxyId: number): void {\n this.bufferMove(proxyId);\n }\n\n bufferMove(proxyId: number): void {\n this.m_moveBuffer.push(proxyId);\n }\n\n unbufferMove(proxyId: number): void {\n for (let 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\n /**\n * Update the pairs. This results in pair callbacks. This can only add pairs.\n */\n updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void {\n _ASSERT && console.assert(typeof addPairCallback === \"function\");\n this.m_callback = addPairCallback;\n\n // Perform tree queries for all moving proxies.\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\n // We have to query the tree with the fat AABB so that\n // we don't fail to create a pair that may touch later.\n const fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId);\n\n // Query tree, create pairs and add them pair buffer.\n this.m_tree.query(fatAABB, this.queryCallback);\n }\n\n // Try to keep the tree balanced.\n // this.m_tree.rebalance(4);\n }\n\n queryCallback = (proxyId: number): boolean => {\n // A proxy cannot form a pair with itself.\n if (proxyId === this.m_queryProxyId) {\n return true;\n }\n\n const proxyIdA = math_min(proxyId, this.m_queryProxyId);\n const proxyIdB = math_max(proxyId, this.m_queryProxyId);\n\n // TODO: Skip any duplicate pairs.\n\n const userDataA = this.m_tree.getUserData(proxyIdA);\n const userDataB = this.m_tree.getUserData(proxyIdB);\n\n // Send the pairs back to the client.\n this.m_callback(userDataA, userDataB);\n\n return true;\n };\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2023 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\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_sqrt = Math.sqrt;\n\n\nimport { RotValue } from \"./Rot\";\nimport { TransformValue } from \"./Transform\";\nimport { Vec2Value } from \"./Vec2\";\nimport { Vec3Value } from \"./Vec3\";\n\nexport function vec2(x: number, y: number): Vec2Value {\n return { x, y };\n}\n\nexport function vec3(x: number, y: number, z: number): Vec3Value {\n return { x, y, z };\n}\n\nexport function rotation(angle: number): RotValue {\n return { s: math_sin(angle), c: math_cos(angle) };\n}\n\nexport function setVec2(out: Vec2Value, x: number, y: number): Vec2Value {\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function copyVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = w.x;\n out.y = w.y;\n return out;\n}\n\nexport function zeroVec2(out: Vec2Value): Vec2Value {\n out.x = 0;\n out.y = 0;\n return out;\n}\n\nexport function negVec2(out: Vec2Value): Vec2Value {\n out.x = -out.x;\n out.y = -out.y;\n return out;\n}\n\nexport function plusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x += w.x;\n out.y += w.y;\n return out;\n}\n\nexport function addVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x + w.x;\n out.y = v.x + w.y;\n return out;\n}\n\nexport function minusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x -= w.x;\n out.y -= w.y;\n return out;\n}\n\nexport function subVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x - w.x;\n out.y = v.y - w.y;\n return out;\n}\n\nexport function mulVec2(out: Vec2Value, m: number): Vec2Value {\n out.x *= m;\n out.y *= m;\n return out;\n}\n\nexport function scaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x = m * w.x;\n out.y = m * w.y;\n return out;\n}\n\nexport function plusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x += m * w.x;\n out.y += m * w.y;\n return out;\n}\n\nexport function minusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x -= m * w.x;\n out.y -= m * w.y;\n return out;\n}\n\nexport function combine2Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x;\n out.y = am * a.y + bm * b.y;\n return out;\n}\n\nexport function combine3Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value, cm: number, c: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x + cm * c.x;\n out.y = am * a.y + bm * b.y + cm * c.y;\n return out;\n}\n\nexport function normalizeVec2Length(out: Vec2Value): number {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length !== 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return length;\n}\n\nexport function normalizeVec2(out: Vec2Value): Vec2Value {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length > 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return out;\n}\n\nexport function crossVec2Num(out: Vec2Value, v: Vec2Value, w: number): Vec2Value {\n const x = w * v.y;\n const y = -w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossNumVec2(out: Vec2Value, w: number, v: Vec2Value): Vec2Value {\n const x = -w * v.y;\n const y = w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossVec2Vec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.y - a.y * b.x;\n}\n\nexport function dotVec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.x + a.y * b.y;\n}\n\nexport function lengthVec2(a: Vec2Value): number {\n return math_sqrt(a.x * a.x + a.y * a.y);\n}\n\nexport function lengthSqrVec2(a: Vec2Value): number {\n return a.x * a.x + a.y * a.y;\n}\n\nexport function distVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return math_sqrt(dx * dx + dy * dy);\n}\n\nexport function distSqrVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return dx * dx + dy * dy;\n}\n\nexport function dotVec3(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n}\n\nexport function setRotAngle(out: RotValue, a: number): RotValue {\n out.c = math_cos(a);\n out.s = math_sin(a);\n return out;\n}\n\nexport function rotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n out.x = q.c * v.x - q.s * v.y;\n out.y = q.s * v.x + q.c * v.y;\n return out;\n}\n\nexport function derotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n const x = q.c * v.x + q.s * v.y;\n const y = -q.s * v.x + q.c * v.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function rerotVec2(out: Vec2Value, before: RotValue, after: RotValue, v: Vec2Value): Vec2Value {\n const x0 = before.c * v.x + before.s * v.y;\n const y0 = -before.s * v.x + before.c * v.y;\n const x = after.c * x0 - after.s * y0;\n const y = after.s * x0 + after.c * y0;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function transform(x: number, y: number, a: number): TransformValue {\n return { p: vec2(x, y), q: rotation(a) };\n}\n\nexport function copyTransform(out: TransformValue, transform: TransformValue): TransformValue {\n out.p.x = transform.p.x;\n out.p.y = transform.p.y;\n out.q.s = transform.q.s;\n out.q.c = transform.q.c;\n return out;\n}\n\nexport function transformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const x = xf.q.c * v.x - xf.q.s * v.y + xf.p.x;\n const y = xf.q.s * v.x + xf.q.c * v.y + xf.p.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const px = v.x - xf.p.x;\n const py = v.y - xf.p.y;\n const x = (xf.q.c * px + xf.q.s * py);\n const y = (-xf.q.s * px + xf.q.c * py);\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function retransformVec2(out: Vec2Value, from: TransformValue, to: TransformValue, v: Vec2Value): Vec2Value {\n const x0 = from.q.c * v.x - from.q.s * v.y + from.p.x;\n const y0 = from.q.s * v.x + from.q.c * v.y + from.p.y;\n const px = x0 - to.p.x;\n const py = y0 - to.p.y;\n const x = to.q.c * px + to.q.s * py;\n const y = -to.q.s * px + to.q.c * py;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformTransform(out: TransformValue, a: TransformValue, b: TransformValue): TransformValue {\n const c = a.q.c * b.q.c + a.q.s * b.q.s;\n const s = a.q.c * b.q.s - a.q.s * b.q.c;\n const x = a.q.c * (b.p.x - a.p.x) + a.q.s * (b.p.y - a.p.y);\n const y = -a.q.s * (b.p.x - a.p.x) + a.q.c * (b.p.y - a.p.y);\n out.q.c = c;\n out.q.s = s;\n out.p.x = x;\n out.p.y = y;\n return out;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_atan2 = Math.atan2;\n\nexport interface RotValue {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n}\n\nexport class Rot {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n\n /** Initialize from an angle in radians. */\n constructor(angle?: number | RotValue) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Rot)) {\n return new Rot(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\n /** @hidden */\n static neo(angle: number): Rot {\n const obj = Object.create(Rot.prototype);\n obj.setAngle(angle);\n return obj;\n }\n\n static clone(rot: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n const obj = Object.create(Rot.prototype);\n obj.s = rot.s;\n obj.c = rot.c;\n return obj;\n }\n\n static identity(): Rot {\n const obj = Object.create(Rot.prototype);\n obj.s = 0.0;\n obj.c = 1.0;\n return obj;\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.s) && Number.isFinite(obj.c);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Rot.isValid(o), \"Invalid Rot!\", o);\n }\n\n /** Set to the identity rotation. */\n setIdentity(): void {\n this.s = 0.0;\n this.c = 1.0;\n }\n\n set(angle: number | RotValue): void {\n if (typeof angle === \"object\") {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n\n } else {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n }\n\n setRot(angle: RotValue): void {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n }\n\n /** Set using an angle in radians. */\n setAngle(angle: number): void {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n\n /** Get the angle in radians. */\n getAngle(): number {\n return math_atan2(this.s, this.c);\n }\n\n /** Get the x-axis. */\n getXAxis(): Vec2 {\n return Vec2.neo(this.c, this.s);\n }\n\n /** Get the y-axis. */\n getYAxis(): Vec2 {\n return Vec2.neo(-this.s, this.c);\n }\n\n /** Multiply two rotations: q * r */\n static mul(rot: RotValue, m: RotValue): Rot;\n /** Rotate a vector */\n static mul(rot: RotValue, m: Vec2Value): Vec2;\n static mul(rot, m) {\n _ASSERT && Rot.assert(rot);\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Multiply two rotations: q * r */\n static mulRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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\n /** Rotate a vector */\n static mulVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n\n static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2 {\n const x = rot.c * (v.x - w.x) - rot.s * (v.y - w.y);\n const y = rot.s * (v.x - w.x) + rot.c * (v.y - w.y);\n return Vec2.neo(x, y);\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulT(rot: RotValue, m: RotValue): Rot;\n /** Inverse rotate a vector */\n static mulT(rot: RotValue, m: Vec2Value): Vec2;\n static mulT(rot, m) {\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulTRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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\n /** Inverse rotate a vector */\n static mulTVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"./Matrix\";\nimport { mod } from \"./Math\";\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { TransformValue } from \"./Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_atan2 = Math.atan2;\n/** @internal */ const math_PI = Math.PI;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * This describes the motion of a body/shape for TOI computation. Shapes are\n * defined with respect to the body origin, which may not coincide with the\n * center of mass. However, to support dynamics we must interpolate the center\n * of mass position.\n */\nexport class Sweep {\n /** Local center of mass position */\n localCenter = Vec2.zero();\n\n /** World center position */\n c = Vec2.zero();\n\n /** World angle */\n a = 0;\n\n /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */\n alpha0 = 0;\n\n c0 = Vec2.zero();\n a0 = 0;\n\n /** @internal */\n recycle() {\n matrix.zeroVec2(this.localCenter);\n matrix.zeroVec2(this.c);\n this.a = 0;\n this.alpha0 = 0;\n matrix.zeroVec2(this.c0);\n this.a0 = 0;\n }\n\n setTransform(xf: TransformValue): void {\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n\n this.a = this.a0 = math_atan2(xf.q.s, xf.q.c);\n }\n\n setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void {\n matrix.copyVec2(this.localCenter, localCenter);\n\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n }\n\n /**\n * Get the interpolated transform at a specific time.\n *\n * @param xf\n * @param beta A factor in [0,1], where 0 indicates alpha0\n */\n getTransform(xf: TransformValue, beta: number = 0): void {\n matrix.setRotAngle(xf.q, (1.0 - beta) * this.a0 + beta * this.a);\n matrix.combine2Vec2(xf.p, (1.0 - beta), this.c0, beta, this.c);\n\n // shift to origin\n matrix.minusVec2(xf.p, matrix.rotVec2(temp, xf.q, this.localCenter));\n }\n\n /**\n * Advance the sweep forward, yielding a new initial state.\n *\n * @param alpha The new initial time\n */\n advance(alpha: number): void {\n _ASSERT && console.assert(this.alpha0 < 1.0);\n const beta = (alpha - this.alpha0) / (1.0 - this.alpha0);\n matrix.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\n forward(): void {\n this.a0 = this.a;\n matrix.copyVec2(this.c0, this.c);\n }\n\n /**\n * normalize the angles in radians to be between -pi and pi.\n */\n normalize(): void {\n const a0 = mod(this.a0, -math_PI, +math_PI);\n this.a -= this.a0 - a0;\n this.a0 = a0;\n }\n\n set(that: Sweep): void {\n matrix.copyVec2(this.localCenter, that.localCenter);\n matrix.copyVec2(this.c, that.c);\n this.a = that.a;\n this.alpha0 = that.alpha0;\n matrix.copyVec2(this.c0, that.c0);\n this.a0 = that.a0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Rot, RotValue } from \"./Rot\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport type TransformValue = {\n p: Vec2Value;\n q: RotValue;\n};\n\n/**\n * A transform contains translation and rotation. It is used to represent the\n * position and orientation of rigid frames. Initialize using a position vector\n * and a rotation.\n */\nexport class Transform {\n /** position */\n p: Vec2;\n\n /** rotation */\n q: Rot;\n\n constructor(position?: Vec2Value, rotation?: number) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Transform)) {\n return new Transform(position, rotation);\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 rotation !== \"undefined\") {\n this.q.setAngle(rotation);\n }\n }\n\n static clone(xf: Transform): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(xf.p);\n obj.q = Rot.clone(xf.q);\n return obj;\n }\n\n /** @hidden */\n static neo(position: Vec2Value, rotation: Rot): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(position);\n obj.q = Rot.clone(rotation);\n return obj;\n }\n\n static identity(): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.zero();\n obj.q = Rot.identity();\n return obj;\n }\n\n /** Set this to the identity transform */\n setIdentity(): void {\n this.p.setZero();\n this.q.setIdentity();\n }\n\n /** Set position and angle */\n set(position: Vec2Value, rotation: number): void;\n /** Copy from another transform */\n set(xf: TransformValue): void;\n set(a: any, b?: any) {\n if (typeof b === \"undefined\") {\n this.p.set(a.p);\n this.q.set(a.q);\n } else {\n this.p.set(a);\n this.q.set(b);\n }\n }\n\n /** Set position and angle */\n setNum(position: Vec2Value, rotation: number) {\n this.p.setVec2(position);\n this.q.setAngle(rotation);\n }\n\n setTransform(xf: TransformValue): void {\n this.p.setVec2(xf.p);\n this.q.setRot(xf.q);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.p) && Rot.isValid(obj.q);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Transform.isValid(o), \"Invalid Transform!\", o);\n }\n\n static mul(a: TransformValue, b: Vec2Value): Vec2;\n static mul(a: TransformValue, b: TransformValue): Transform;\n // static mul(a: Transform, b: Vec2Value[]): Vec2[];\n // static mul(a: Transform, b: Transform[]): Transform[];\n static mul(a, b) {\n if (Array.isArray(b)) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n\n } else if (\"x\" in b && \"y\" in b) {\n return Transform.mulVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulXf(a, b);\n }\n }\n\n static mulAll(a: Transform, b: Vec2Value[]): Vec2[];\n static mulAll(a: Transform, b: Transform[]): Transform[];\n static mulAll(a: TransformValue, b) {\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n }\n\n /** @hidden @deprecated */\n static mulFn(a: TransformValue) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n return function(b: Vec2Value): Vec2 {\n return Transform.mul(a, b);\n };\n }\n\n static mulVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = (a.q.c * b.x - a.q.s * b.y) + a.p.x;\n const y = (a.q.s * b.x + a.q.c * b.y) + a.p.y;\n return Vec2.neo(x, y);\n }\n\n static mulXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p\n // = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p\n const xf = Transform.identity();\n xf.q = Rot.mulRot(a.q, b.q);\n xf.p = Vec2.add(Rot.mulVec2(a.q, b.p), a.p);\n return xf;\n }\n\n static mulT(a: TransformValue, b: Vec2Value): Vec2;\n static mulT(a: TransformValue, b: TransformValue): Transform;\n static mulT(a, b) {\n if (\"x\" in b && \"y\" in b) {\n return Transform.mulTVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulTXf(a, b);\n }\n }\n\n static mulTVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const px = b.x - a.p.x;\n const py = b.y - a.p.y;\n const x = (a.q.c * px + a.q.s * py);\n const y = (-a.q.s * px + a.q.c * py);\n return Vec2.neo(x, y);\n }\n\n static mulTXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q' * (B.q * v1 + B.p - A.p)\n // = A.q' * B.q * v1 + A.q' * (B.p - A.p)\n const xf = Transform.identity();\n xf.q.setRot(Rot.mulTRot(a.q, b.q));\n xf.p.setVec2(Rot.mulTVec2(a.q, Vec2.sub(b.p, a.p)));\n return xf;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2 } from \"../common/Vec2\";\n\nexport class Velocity {\n /** linear */\n v = Vec2.zero();\n\n /** angular */\n w = 0;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n\n\nexport class Position {\n /** location */\n c = Vec2.zero();\n\n /** angle */\n a = 0;\n\n // todo: cache sin/cos\n getTransform(xf: TransformValue, p: Vec2Value): TransformValue {\n // xf.q = rotation(this.a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(this.a);\n xf.q.s = math_sin(this.a);\n xf.p.x = this.c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = this.c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n }\n}\n\nexport function getTransform(xf: TransformValue, p: Vec2Value, c: Vec2Value, a: number): TransformValue {\n // xf.q = rotation(a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(a);\n xf.q.s = math_sin(a);\n xf.p.x = c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { MassData } from \"../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"./AABB\";\nimport { DistanceProxy } from \"./Distance\";\nimport type { Transform, TransformValue } from \"../common/Transform\";\nimport type { Vec2Value } from \"../common/Vec2\";\nimport { Style } from \"../util/Testbed\";\n\n// todo make shape an interface\n\n/**\n * A shape is used for collision detection. You can create a shape however you\n * like. Shapes used for simulation in World are created automatically when a\n * Fixture is created. Shapes may encapsulate one or more child shapes.\n */\nexport abstract class Shape {\n /** @hidden */ m_type: ShapeType;\n\n /**\n * @hidden\n * Radius of a shape. For polygonal shapes this must be b2_polygonRadius.\n * There is no support for making rounded polygons.\n */\n m_radius: number;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @hidden */\n abstract _reset(): void;\n\n static isValid(obj: any): boolean {\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\n abstract getRadius(): number;\n\n /**\n * Get the type of this shape. You can use this to down cast to the concrete\n * shape.\n *\n * @return the shape type.\n */\n abstract getType(): ShapeType;\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n abstract _clone(): Shape;\n\n /**\n * Get the number of child primitives.\n */\n abstract getChildCount(): number;\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n abstract testPoint(xf: TransformValue, p: Vec2Value): boolean;\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean;\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void;\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n abstract computeMass(massData: MassData, density?: number): void;\n\n abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void;\n\n}\n\nexport type ShapeType = \"circle\" | \"edge\" | \"polygon\" | \"chain\";\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Shape, ShapeType } from \"../collision/Shape\";\nimport { Body, MassData } from \"./Body\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const synchronize_aabb1 = new AABB();\n/** @internal */ const synchronize_aabb2 = new AABB();\n/** @internal */ const displacement = matrix.vec2(0, 0);\n\n/**\n * A fixture definition is used to create a fixture. This class defines an\n * abstract fixture definition. You can reuse fixture definitions safely.\n */\nexport interface FixtureOpt {\n userData?: unknown;\n /**\n * The friction coefficient, usually in the range [0,1]\n */\n friction?: number;\n /**\n * The restitution (elasticity) usually in the range [0,1]\n */\n restitution?: number;\n /**\n * The density, usually in kg/m^2\n */\n density?: number;\n /**\n * A sensor shape collects contact information but never generates a collision response.\n */\n isSensor?: boolean;\n /**\n * Zero, positive or negative collision group.\n * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide.\n */\n filterGroupIndex?: number;\n /**\n * Collision category bit or bits that this fixture belongs to.\n * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa.\n */\n filterCategoryBits?: number;\n /**\n * Collision category bit or bits that this fixture accept for collision.\n */\n filterMaskBits?: number;\n}\n\nexport interface FixtureDef extends FixtureOpt {\n shape: Shape;\n}\n\n/** @internal */ const FixtureDefDefault: FixtureOpt = {\n userData : null,\n friction : 0.2,\n restitution : 0.0,\n density : 0.0,\n isSensor : false,\n\n filterGroupIndex : 0,\n filterCategoryBits : 0x0001,\n filterMaskBits : 0xFFFF\n};\n\n/**\n * This proxy is used internally to connect shape children to the broad-phase.\n */\nexport class FixtureProxy {\n aabb: AABB;\n fixture: Fixture;\n childIndex: number;\n proxyId: number;\n constructor(fixture: Fixture, childIndex: number) {\n this.aabb = new AABB();\n this.fixture = fixture;\n this.childIndex = childIndex;\n this.proxyId;\n }\n}\n\n/**\n * A fixture is used to attach a shape to a body for collision detection. A\n * fixture inherits its transform from its parent. Fixtures hold additional\n * non-geometric data such as friction, collision filters, etc.\n *\n * To create a new Fixture use {@link Body.createFixture}.\n */\nexport class Fixture {\n /** @internal */ m_body: Body;\n /** @internal */ m_friction: number;\n /** @internal */ m_restitution: number;\n /** @internal */ m_density: number;\n /** @internal */ m_isSensor: boolean;\n /** @internal */ m_filterGroupIndex: number;\n /** @internal */ m_filterCategoryBits: number;\n /** @internal */ m_filterMaskBits: number;\n /** @internal */ m_shape: Shape;\n /** @internal */ m_next: Fixture | null;\n /** @internal */ m_proxies: FixtureProxy[];\n // 0 indicates inactive state, this is not the same as m_proxies.length\n /** @internal */ m_proxyCount: number;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(body: Body, def: FixtureDef);\n constructor(body: Body, shape: Shape, def?: FixtureOpt);\n constructor(body: Body, shape: Shape, density?: number);\n /** @internal */\n constructor(body: Body, shape?, def?) {\n if (shape.shape) {\n def = shape;\n shape = shape.shape;\n\n } else if (typeof def === \"number\") {\n def = {density : def};\n }\n\n def = options(def, FixtureDefDefault);\n\n this.m_body = body;\n\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\n this.m_filterGroupIndex = def.filterGroupIndex;\n this.m_filterCategoryBits = def.filterCategoryBits;\n this.m_filterMaskBits = def.filterMaskBits;\n\n // TODO validate shape\n this.m_shape = shape; // .clone();\n\n this.m_next = null;\n\n this.m_proxies = [];\n this.m_proxyCount = 0;\n\n // fixture proxies are created here,\n // but they are activate in when a fixture is added to body\n const childCount = this.m_shape.getChildCount();\n for (let i = 0; i < childCount; ++i) {\n this.m_proxies[i] = new FixtureProxy(this, i);\n }\n\n this.m_userData = def.userData;\n }\n\n /** @hidden Re-setup fixture. */\n _reset(): void {\n const body = this.getBody();\n const broadPhase = body.m_world.m_broadPhase;\n this.destroyProxies(broadPhase);\n if (this.m_shape._reset) {\n this.m_shape._reset();\n }\n const childCount = this.m_shape.getChildCount();\n for (let 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\n /** @internal */\n _serialize(): object {\n return {\n friction: this.m_friction,\n restitution: this.m_restitution,\n density: this.m_density,\n isSensor: this.m_isSensor,\n\n filterGroupIndex: this.m_filterGroupIndex,\n filterCategoryBits: this.m_filterCategoryBits,\n filterMaskBits: this.m_filterMaskBits,\n\n shape: this.m_shape,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, body: any, restore: any): Fixture {\n const shape = restore(Shape, data.shape);\n const fixture = shape && new Fixture(body, shape, data);\n return fixture;\n }\n\n /**\n * Get the type of the child shape. You can use this to down cast to the\n * concrete shape.\n */\n getType(): ShapeType {\n return this.m_shape.m_type;\n }\n\n /**\n * Get the child shape. You can modify the child shape, however you should not\n * change the number of vertices because this will crash some collision caching\n * mechanisms. Manipulating the shape may lead to non-physical behavior.\n */\n getShape(): Shape {\n return this.m_shape;\n }\n\n /**\n * A sensor shape collects contact information but never generates a collision\n * response.\n */\n isSensor(): boolean {\n return this.m_isSensor;\n }\n\n /**\n * Set if this fixture is a sensor.\n */\n setSensor(sensor: boolean): void {\n if (sensor != this.m_isSensor) {\n this.m_body.setAwake(true);\n this.m_isSensor = sensor;\n }\n }\n\n // /**\n // * Get the contact filtering data.\n // */\n // getFilterData() {\n // return this.m_filter;\n // }\n\n /**\n * Get the user data that was assigned in the fixture definition. Use this to\n * store your application specific data.\n */\n getUserData(): unknown {\n return this.m_userData;\n }\n\n /**\n * Set the user data. Use this to store your application specific data.\n */\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get the parent body of this fixture. This is null if the fixture is not\n * attached.\n */\n getBody(): Body {\n return this.m_body;\n }\n\n /**\n * Get the next fixture in the parent body's fixture list.\n */\n getNext(): Fixture | null {\n return this.m_next;\n }\n\n /**\n * Get the density of this fixture.\n */\n getDensity(): number {\n return this.m_density;\n }\n\n /**\n * Set the density of this fixture. This will _not_ automatically adjust the\n * mass of the body. You must call Body.resetMassData to update the body's mass.\n */\n setDensity(density: number): void {\n _ASSERT && console.assert(Number.isFinite(density) && density >= 0.0);\n this.m_density = density;\n }\n\n /**\n * Get the coefficient of friction, usually in the range [0,1].\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Set the coefficient of friction. This will not change the friction of\n * existing contacts.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the coefficient of restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Set the coefficient of restitution. This will not change the restitution of\n * existing contacts.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Test a point in world coordinates for containment in this fixture.\n */\n testPoint(p: Vec2Value): boolean {\n return this.m_shape.testPoint(this.m_body.getTransform(), p);\n }\n\n /**\n * Cast a ray against this shape.\n */\n rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean {\n return this.m_shape.rayCast(output, input, this.m_body.getTransform(), childIndex);\n }\n\n /**\n * Get the mass data for this fixture. The mass data is based on the density and\n * the shape. The rotational inertia is about the shape's origin. This operation\n * may be expensive.\n */\n getMassData(massData: MassData): void {\n this.m_shape.computeMass(massData, this.m_density);\n }\n\n /**\n * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a\n * more accurate AABB, compute it using the shape and the body transform.\n */\n getAABB(childIndex: number): AABB {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_proxies.length);\n return this.m_proxies[childIndex].aabb;\n }\n\n /**\n * These support body activation/deactivation.\n */\n createProxies(broadPhase: BroadPhase, xf: TransformValue): void {\n _ASSERT && console.assert(this.m_proxyCount == 0);\n\n // Create proxies in the broad-phase.\n this.m_proxyCount = this.m_shape.getChildCount();\n\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n this.m_shape.computeAABB(proxy.aabb, xf, i);\n proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy);\n }\n }\n\n destroyProxies(broadPhase: BroadPhase): void {\n // Destroy proxies in the broad-phase.\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n broadPhase.destroyProxy(proxy.proxyId);\n proxy.proxyId = null;\n }\n\n this.m_proxyCount = 0;\n }\n\n /**\n * Updates this fixture proxy in broad-phase (with combined AABB of current and\n * next transformation).\n */\n synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void {\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n // Compute an AABB that covers the swept shape (may miss some rotation\n // effect).\n this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex);\n this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex);\n\n proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2);\n\n matrix.subVec2(displacement, xf2.p, xf1.p);\n\n broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement);\n }\n }\n\n /**\n * Set the contact filtering data. This will not update contacts until the next\n * time step when either parent body is active and awake. This automatically\n * calls refilter.\n */\n setFilterData(filter: { groupIndex: number, categoryBits: number, maskBits: number }): void {\n this.m_filterGroupIndex = filter.groupIndex;\n this.m_filterCategoryBits = filter.categoryBits;\n this.m_filterMaskBits = filter.maskBits;\n this.refilter();\n }\n\n getFilterGroupIndex(): number {\n return this.m_filterGroupIndex;\n }\n\n setFilterGroupIndex(groupIndex: number): void {\n this.m_filterGroupIndex = groupIndex;\n this.refilter();\n }\n\n getFilterCategoryBits(): number {\n return this.m_filterCategoryBits;\n }\n\n setFilterCategoryBits(categoryBits: number): void {\n this.m_filterCategoryBits = categoryBits;\n this.refilter();\n }\n\n getFilterMaskBits(): number {\n return this.m_filterMaskBits;\n }\n\n setFilterMaskBits(maskBits: number): void {\n this.m_filterMaskBits = maskBits;\n this.refilter();\n }\n\n /**\n * Call this if you want to establish collision that was previously disabled by\n * ContactFilter.\n */\n refilter(): void {\n if (this.m_body == null) {\n return;\n }\n\n // Flag associated contacts for filtering.\n let edge = this.m_body.getContactList();\n while (edge) {\n const contact = edge.contact;\n const fixtureA = contact.getFixtureA();\n const fixtureB = contact.getFixtureB();\n if (fixtureA == this || fixtureB == this) {\n contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n\n const world = this.m_body.getWorld();\n\n if (world == null) {\n return;\n }\n\n // Touch each proxy so that new pairs may be created\n const broadPhase = world.m_broadPhase;\n for (let i = 0; i < this.m_proxyCount; ++i) {\n broadPhase.touchProxy(this.m_proxies[i].proxyId);\n }\n }\n\n /**\n * Implement this method to provide collision filtering, if you want finer\n * control over contact creation.\n *\n * Return true if contact calculations should be performed between these two\n * fixtures.\n *\n * Warning: for performance reasons this is only called when the AABBs begin to\n * overlap.\n */\n shouldCollide(that: Fixture): boolean {\n\n if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) {\n return that.m_filterGroupIndex > 0;\n }\n\n const collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0;\n const collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0;\n const collide = collideA && collideB;\n return collide;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Velocity } from \"./Velocity\";\nimport { Position } from \"./Position\";\nimport { Fixture, FixtureDef, FixtureOpt } from \"./Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { JointEdge } from \"./Joint\";\nimport { World } from \"./World\";\nimport { ContactEdge } from \"./Contact\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nexport type BodyType = \"static\" | \"kinematic\" | \"dynamic\";\n\n/** @internal */ const STATIC = \"static\";\n/** @internal */ const KINEMATIC = \"kinematic\";\n/** @internal */ const DYNAMIC = \"dynamic\";\n\n/** @internal */ const oldCenter = matrix.vec2(0, 0);\n/** @internal */ const localCenter = matrix.vec2(0, 0);\n/** @internal */ const shift = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n\nexport interface BodyDef {\n /**\n * Body types are static, kinematic, or dynamic. Note: if a dynamic\n * body would have zero mass, the mass is set to one.\n */\n type?: BodyType;\n /**\n * The world position of the body. Avoid creating bodies at the\n * origin since this can lead to many overlapping shapes.\n */\n position?: Vec2Value;\n /**\n * The world angle of the body in radians.\n */\n angle?: number;\n /**\n * The linear velocity of the body's origin in world co-ordinates.\n */\n linearVelocity?: Vec2Value;\n angularVelocity?: number;\n /**\n * Linear damping is use to reduce the linear velocity. The\n * damping parameter can be larger than 1.0 but the damping effect becomes\n * sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n linearDamping?: number;\n /**\n * Angular damping is use to reduce the angular velocity.\n * The damping parameter can be larger than 1.0 but the damping effect\n * becomes sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n angularDamping?: number;\n /**\n * Should this body be prevented from rotating? Useful for characters.\n */\n fixedRotation?: boolean;\n /**\n * Is this a fast moving body that should be prevented from\n * tunneling through other moving bodies? Note that all bodies are\n * prevented from tunneling through kinematic and static bodies. This\n * setting is only considered on dynamic bodies. Warning: You should use\n * this flag sparingly since it increases processing time.\n */\n bullet?: boolean;\n gravityScale?: number;\n /**\n * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage.\n */\n allowSleep?: boolean;\n /**\n * Is this body initially awake or sleeping?\n */\n awake?: boolean;\n /**\n * Does this body start out active?\n */\n active?: boolean;\n userData?: any;\n}\n\n/** @internal */ const BodyDefDefault: BodyDef = {\n type : STATIC,\n position : Vec2.zero(),\n angle : 0.0,\n\n linearVelocity : Vec2.zero(),\n angularVelocity : 0.0,\n\n linearDamping : 0.0,\n angularDamping : 0.0,\n\n fixedRotation : false,\n bullet : false,\n gravityScale : 1.0,\n\n allowSleep : true,\n awake : true,\n active : true,\n\n userData : null\n};\n\n/**\n * MassData This holds the mass data computed for a shape.\n */\nexport interface MassData {\n /** The mass of the shape, usually in kilograms. */\n mass: number;\n /** The position of the shape's centroid relative to the shape's origin. */\n center: Vec2Value;\n /** The rotational inertia of the shape about the local origin. */\n I: number;\n}\n\n/**\n * A rigid body composed of one or more fixtures.\n *\n * To create a new Body use {@link World.createBody}.\n */\nexport class Body {\n /**\n * A static body does not move under simulation and behaves as if it has infinite mass.\n * Internally, zero is stored for the mass and the inverse mass.\n * Static bodies can be moved manually by the user.\n * A static body has zero velocity.\n * Static bodies do not collide with other static or kinematic bodies.\n */\n static readonly STATIC: BodyType = \"static\";\n /**\n * A kinematic body moves under simulation according to its velocity.\n * Kinematic bodies do not respond to forces.\n * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity.\n * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass.\n * Kinematic bodies do not collide with other kinematic or static bodies.\n */\n static readonly KINEMATIC: BodyType = \"kinematic\";\n\n /**\n * A dynamic body is fully simulated.\n * They can be moved manually by the user, but normally they move according to forces.\n * A dynamic body can collide with all body types.\n * A dynamic body always has finite, non-zero mass.\n * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate.\n */\n static readonly DYNAMIC: BodyType = \"dynamic\";\n\n /** @internal */ m_world: World;\n /** @internal */ m_awakeFlag: boolean;\n /** @internal */ m_autoSleepFlag: boolean;\n /** @internal */ m_bulletFlag: boolean;\n /** @internal */ m_fixedRotationFlag: boolean;\n /** @internal */ m_activeFlag: boolean;\n /** @internal */ m_islandFlag: boolean;\n /** @internal */ m_toiFlag: boolean;\n /** @internal */ m_userData: unknown;\n /** @internal */ m_type: BodyType;\n /** @internal */ m_mass: number;\n /** @internal */ m_invMass: number;\n /** @internal Rotational inertia about the center of mass. */\n m_I: number;\n /** @internal */ m_invI: number;\n /** @internal the body origin transform */\n m_xf: Transform;\n /** @internal the swept motion for CCD */\n m_sweep: Sweep;\n // position and velocity correction\n /** @internal */ c_velocity: Velocity;\n /** @internal */ c_position: Position;\n /** @internal */ m_force: Vec2;\n /** @internal */ m_torque: number;\n /** @internal */ m_linearVelocity: Vec2;\n /** @internal */ m_angularVelocity: number;\n /** @internal */ m_linearDamping: number;\n /** @internal */ m_angularDamping: number;\n /** @internal */ m_gravityScale: number;\n /** @internal */ m_sleepTime: number;\n /** @internal */ m_jointList: JointEdge | null;\n /** @internal */ m_contactList: ContactEdge | null;\n /** @internal */ m_fixtureList: Fixture | null;\n /** @internal */ m_prev: Body | null;\n /** @internal */ m_next: Body | null;\n /** @internal */ m_destroyed: boolean;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @internal */\n constructor(world: World, def: BodyDef) {\n def = options(def, BodyDefDefault);\n\n _ASSERT && console.assert(Vec2.isValid(def.position));\n _ASSERT && console.assert(Vec2.isValid(def.linearVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angle));\n _ASSERT && console.assert(Number.isFinite(def.angularVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angularDamping) && def.angularDamping >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.linearDamping) && def.linearDamping >= 0.0);\n\n this.m_world = world;\n\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\n this.m_islandFlag = false;\n this.m_toiFlag = false;\n\n this.m_userData = def.userData;\n this.m_type = def.type;\n\n if (this.m_type == DYNAMIC) {\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n } else {\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n }\n\n // Rotational inertia about the center of mass.\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n // the body origin transform\n this.m_xf = Transform.identity();\n this.m_xf.p.setVec2(def.position);\n this.m_xf.q.setAngle(def.angle);\n\n // the swept motion for CCD\n this.m_sweep = new Sweep();\n this.m_sweep.setTransform(this.m_xf);\n\n // position and velocity correction\n this.c_velocity = new Velocity();\n this.c_position = new Position();\n\n this.m_force = Vec2.zero();\n this.m_torque = 0.0;\n\n this.m_linearVelocity = Vec2.clone(def.linearVelocity);\n this.m_angularVelocity = def.angularVelocity;\n\n this.m_linearDamping = def.linearDamping;\n this.m_angularDamping = def.angularDamping;\n this.m_gravityScale = def.gravityScale;\n\n this.m_sleepTime = 0.0;\n\n this.m_jointList = null;\n this.m_contactList = null;\n this.m_fixtureList = null;\n\n this.m_prev = null;\n this.m_next = null;\n\n this.m_destroyed = false;\n }\n\n /** @internal */\n _serialize(): object {\n const fixtures = [];\n for (let 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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): Body {\n const body = new Body(world, data);\n\n if (data.fixtures) {\n for (let i = data.fixtures.length - 1; i >= 0; i--) {\n const fixture = restore(Fixture, data.fixtures[i], body);\n body._addFixture(fixture);\n }\n }\n return body;\n }\n\n isWorldLocked(): boolean {\n return this.m_world && this.m_world.isLocked() ? true : false;\n }\n\n getWorld(): World {\n return this.m_world;\n }\n\n getNext(): Body | null {\n return this.m_next;\n }\n\n setUserData(data: any): void {\n this.m_userData = data;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n getFixtureList(): Fixture | null {\n return this.m_fixtureList;\n }\n\n getJointList(): JointEdge | null {\n return this.m_jointList;\n }\n\n /**\n * Warning: this list changes during the time step and you may miss some\n * collisions if you don't use ContactListener.\n */\n getContactList(): ContactEdge | null {\n return this.m_contactList;\n }\n\n isStatic(): boolean {\n return this.m_type == STATIC;\n }\n\n isDynamic(): boolean {\n return this.m_type == DYNAMIC;\n }\n\n isKinematic(): boolean {\n return this.m_type == KINEMATIC;\n }\n\n /**\n * This will alter the mass and velocity.\n */\n setStatic(): Body {\n this.setType(STATIC);\n return this;\n }\n\n setDynamic(): Body {\n this.setType(DYNAMIC);\n return this;\n }\n\n setKinematic(): Body {\n this.setType(KINEMATIC);\n return this;\n }\n\n /**\n * Get the type of the body.\n */\n getType(): BodyType {\n return this.m_type;\n }\n\n /**\n * Set the type of the body to \"static\", \"kinematic\" or \"dynamic\".\n * @param type The type of the body.\n */\n setType(type: BodyType): void {\n _ASSERT && console.assert(type === STATIC || type === KINEMATIC || type === DYNAMIC);\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type == type) {\n return;\n }\n\n this.m_type = type;\n\n this.resetMassData();\n\n if (this.m_type == STATIC) {\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_sweep.forward();\n this.synchronizeFixtures();\n }\n\n this.setAwake(true);\n\n this.m_force.setZero();\n this.m_torque = 0.0;\n\n // Delete the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n\n // Touch the proxies so that new contacts will be created (when appropriate)\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n for (let i = 0; i < f.m_proxyCount; ++i) {\n broadPhase.touchProxy(f.m_proxies[i].proxyId);\n }\n }\n }\n\n isBullet(): boolean {\n return this.m_bulletFlag;\n }\n\n /**\n * Should this body be treated like a bullet for continuous collision detection?\n */\n setBullet(flag: boolean): void {\n this.m_bulletFlag = !!flag;\n }\n\n isSleepingAllowed(): boolean {\n return this.m_autoSleepFlag;\n }\n\n setSleepingAllowed(flag: boolean): void {\n this.m_autoSleepFlag = !!flag;\n if (this.m_autoSleepFlag == false) {\n this.setAwake(true);\n }\n }\n\n isAwake(): boolean {\n return this.m_awakeFlag;\n }\n\n /**\n * Set the sleep state of the body. A sleeping body has very low CPU cost.\n *\n * @param flag Set to true to wake the body, false to put it to sleep.\n */\n setAwake(flag: boolean): void {\n if (flag) {\n this.m_awakeFlag = true;\n this.m_sleepTime = 0.0;\n } else {\n this.m_awakeFlag = false;\n this.m_sleepTime = 0.0;\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_force.setZero();\n this.m_torque = 0.0;\n }\n }\n\n isActive(): boolean {\n return this.m_activeFlag;\n }\n\n /**\n * Set the active state of the body. An inactive body is not simulated and\n * cannot be collided with or woken up. If you pass a flag of true, all fixtures\n * will be added to the broad-phase. If you pass a flag of false, all fixtures\n * will be removed from the broad-phase and all contacts will be destroyed.\n * Fixtures and joints are otherwise unaffected.\n *\n * You may continue to create/destroy fixtures and joints on inactive bodies.\n * Fixtures on an inactive body are implicitly inactive and will not participate\n * in collisions, ray-casts, or queries. Joints connected to an inactive body\n * are implicitly inactive. An inactive body is still owned by a World object\n * and remains\n */\n setActive(flag: boolean): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (flag == this.m_activeFlag) {\n return;\n }\n\n this.m_activeFlag = !!flag;\n\n if (this.m_activeFlag) {\n // Create all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.createProxies(broadPhase, this.m_xf);\n }\n\t\t // Contacts are created at the beginning of the next\n\t\t this.m_world.m_newFixture = true;\n } else {\n // Destroy all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.destroyProxies(broadPhase);\n }\n\n // Destroy the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n }\n }\n\n isFixedRotation(): boolean {\n return this.m_fixedRotationFlag;\n }\n\n /**\n * Set this body to have fixed rotation. This causes the mass to be reset.\n */\n setFixedRotation(flag: boolean): void {\n if (this.m_fixedRotationFlag == flag) {\n return;\n }\n\n this.m_fixedRotationFlag = !!flag;\n\n this.m_angularVelocity = 0.0;\n\n this.resetMassData();\n }\n\n /**\n * Get the world transform for the body's origin.\n */\n getTransform(): Transform {\n return this.m_xf;\n }\n\n /**\n * Set the position of the body's origin and rotation. Manipulating a body's\n * transform may cause non-physical behavior. Note: contacts are updated on the\n * next call to World.step.\n *\n * @param position The world position of the body's local origin.\n * @param angle The world rotation in radians.\n */\n setTransform(position: Vec2Value, angle: number): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n this.m_xf.setNum(position, angle);\n this.m_sweep.setTransform(this.m_xf);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let 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\n synchronizeTransform(): void {\n this.m_sweep.getTransform(this.m_xf, 1);\n }\n\n /**\n * Update fixtures in broad-phase.\n */\n synchronizeFixtures(): void {\n this.m_sweep.getTransform(xf, 0);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.synchronize(broadPhase, xf, this.m_xf);\n }\n }\n\n /**\n * Used in TOI.\n */\n advance(alpha: number): void {\n // Advance to the new safe time. This doesn't sync the broad-phase.\n this.m_sweep.advance(alpha);\n matrix.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\n /**\n * Get the world position for the body's origin.\n */\n getPosition(): Vec2 {\n return this.m_xf.p;\n }\n\n setPosition(p: Vec2Value): void {\n this.setTransform(p, this.m_sweep.a);\n }\n\n /**\n * Get the current world rotation angle in radians.\n */\n getAngle(): number {\n return this.m_sweep.a;\n }\n\n setAngle(angle: number): void {\n this.setTransform(this.m_xf.p, angle);\n }\n\n /**\n * Get the world position of the center of mass.\n */\n getWorldCenter(): Vec2 {\n return this.m_sweep.c;\n }\n\n /**\n * Get the local position of the center of mass.\n */\n getLocalCenter(): Vec2 {\n return this.m_sweep.localCenter;\n }\n\n /**\n * Get the linear velocity of the center of mass.\n *\n * @return the linear velocity of the center of mass.\n */\n getLinearVelocity(): Vec2 {\n return this.m_linearVelocity;\n }\n\n /**\n * Get the world linear velocity of a world point attached to this body.\n *\n * @param worldPoint A point in world coordinates.\n */\n getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2 {\n const localCenter = Vec2.sub(worldPoint, this.m_sweep.c);\n return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity,\n localCenter));\n }\n\n /**\n * Get the world velocity of a local point.\n *\n * @param localPoint A point in local coordinates.\n */\n getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2 {\n return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint));\n }\n\n /**\n * Set the linear velocity of the center of mass.\n *\n * @param v The new linear velocity of the center of mass.\n */\n setLinearVelocity(v: Vec2Value): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (Vec2.dot(v, v) > 0.0) {\n this.setAwake(true);\n }\n this.m_linearVelocity.setVec2(v);\n }\n\n /**\n * Get the angular velocity.\n *\n * @returns the angular velocity in radians/second.\n */\n getAngularVelocity(): number {\n return this.m_angularVelocity;\n }\n\n /**\n * Set the angular velocity.\n *\n * @param omega The new angular velocity in radians/second.\n */\n setAngularVelocity(w: number): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (w * w > 0.0) {\n this.setAwake(true);\n }\n this.m_angularVelocity = w;\n }\n\n getLinearDamping(): number {\n return this.m_linearDamping;\n }\n\n setLinearDamping(linearDamping: number): void {\n this.m_linearDamping = linearDamping;\n }\n\n getAngularDamping(): number {\n return this.m_angularDamping;\n }\n\n setAngularDamping(angularDamping: number): void {\n this.m_angularDamping = angularDamping;\n }\n\n getGravityScale(): number {\n return this.m_gravityScale;\n }\n\n /**\n * Scale the gravity applied to this body.\n */\n setGravityScale(scale: number): void {\n this.m_gravityScale = scale;\n }\n\n /**\n * Get the total mass of the body.\n *\n * @returns The mass, usually in kilograms (kg).\n */\n getMass(): number {\n return this.m_mass;\n }\n\n /**\n * Get the rotational inertia of the body about the local origin.\n *\n * @return the rotational inertia, usually in kg-m^2.\n */\n getInertia(): number {\n return this.m_I + this.m_mass\n * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter);\n }\n\n /**\n * Copy the mass data of the body to data.\n */\n getMassData(data: MassData): void {\n data.mass = this.m_mass;\n data.I = this.getInertia();\n matrix.copyVec2(data.center, this.m_sweep.localCenter);\n }\n\n /**\n * This resets the mass properties to the sum of the mass properties of the\n * fixtures. This normally does not need to be called unless you called\n * SetMassData to override the mass and you later want to reset the mass.\n */\n resetMassData(): void {\n // Compute mass data from shapes. Each shape has its own density.\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n matrix.zeroVec2(this.m_sweep.localCenter);\n\n // Static and kinematic bodies have zero mass.\n if (this.isStatic() || this.isKinematic()) {\n matrix.copyVec2(this.m_sweep.c0, this.m_xf.p);\n matrix.copyVec2(this.m_sweep.c, this.m_xf.p);\n this.m_sweep.a0 = this.m_sweep.a;\n return;\n }\n\n _ASSERT && console.assert(this.isDynamic());\n\n // Accumulate mass over all fixtures.\n matrix.zeroVec2(localCenter);\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n if (f.m_density == 0.0) {\n continue;\n }\n\n const massData: MassData = {\n mass: 0,\n center: matrix.vec2(0, 0),\n I: 0\n };\n f.getMassData(massData);\n this.m_mass += massData.mass;\n matrix.plusScaleVec2(localCenter, massData.mass, massData.center);\n this.m_I += massData.I;\n }\n\n // Compute center of mass.\n if (this.m_mass > 0.0) {\n this.m_invMass = 1.0 / this.m_mass;\n matrix.scaleVec2(localCenter, this.m_invMass, localCenter);\n\n } else {\n // Force all dynamic bodies to have a positive mass.\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n }\n\n if (this.m_I > 0.0 && this.m_fixedRotationFlag == false) {\n // Center the inertia about the center of mass.\n this.m_I -= this.m_mass * matrix.dotVec2(localCenter, localCenter);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n\n } else {\n this.m_I = 0.0;\n this.m_invI = 0.0;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(localCenter, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Set the mass properties to override the mass properties of the fixtures. Note\n * that this changes the center of mass position. Note that creating or\n * destroying fixtures can also alter the mass. This function has no effect if\n * the body isn't dynamic.\n *\n * @param massData The mass properties.\n */\n setMassData(massData: MassData): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n this.m_mass = massData.mass;\n if (this.m_mass <= 0.0) {\n this.m_mass = 1.0;\n }\n\n this.m_invMass = 1.0 / this.m_mass;\n\n if (massData.I > 0.0 && this.m_fixedRotationFlag == false) {\n this.m_I = massData.I - this.m_mass * matrix.dotVec2(massData.center, massData.center);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(massData.center, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Apply a force at a world point. If the force is not applied at the center of\n * mass, it will generate a torque and affect the angular velocity. This wakes\n * up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyForce(force: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping.\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), force);\n }\n }\n\n /**\n * Apply a force to the center of mass. This wakes up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param wake Also wake up the body\n */\n applyForceToCenter(force: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n }\n }\n\n /**\n * Apply a torque. This affects the angular velocity without affecting the\n * linear velocity of the center of mass. This wakes up the body.\n *\n * @param torque About the z-axis (out of the screen), usually in N-m.\n * @param wake Also wake up the body\n */\n applyTorque(torque: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_torque += torque;\n }\n }\n\n /**\n * Apply an impulse at a point. This immediately modifies the velocity. It also\n * modifies the angular velocity if the point of application is not at the\n * center of mass. This wakes up the body.\n *\n * @param impulse The world impulse vector, usually in N-seconds or kg-m/s.\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n\n // Don't accumulate velocity if the body is sleeping\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(point, this.m_sweep.c), impulse);\n }\n }\n\n /**\n * Apply an angular impulse.\n *\n * @param impulse The angular impulse in units of kg*m*m/s\n * @param wake Also wake up the body\n */\n applyAngularImpulse(impulse: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate velocity if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_angularVelocity += this.m_invI * impulse;\n }\n }\n\n /**\n * This is used to test if two bodies should collide.\n * \n * Bodies do not collide when:\n * - Neither of them is dynamic\n * - They are connected by a joint with collideConnected == false\n */\n shouldCollide(that: Body): boolean {\n // At least one body should be dynamic.\n if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) {\n return false;\n }\n // Does a joint prevent collision?\n for (let 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\n /** @internal Used for deserialize. */\n _addFixture(fixture: Fixture): Fixture {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.createProxies(broadPhase, this.m_xf);\n }\n\n fixture.m_next = this.m_fixtureList;\n this.m_fixtureList = fixture;\n\n // Adjust mass properties if needed.\n if (fixture.m_density > 0.0) {\n this.resetMassData();\n }\n\n // Let the world know we have a new fixture. This will cause new contacts\n // to be created at the beginning of the next time step.\n this.m_world.m_newFixture = true;\n\n return fixture;\n }\n\n /**\n * Creates a fixture and attach it to this body.\n *\n * If the density is non-zero, this function automatically updates the mass of\n * the body.\n *\n * Contacts are not created until the next time step.\n *\n * Warning: This function is locked during callbacks.\n */\n createFixture(def: FixtureDef): Fixture;\n createFixture(shape: Shape, opt?: FixtureOpt): Fixture;\n createFixture(shape: Shape, density?: number): Fixture;\n // tslint:disable-next-line:typedef\n createFixture(shape, fixdef?) {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n const fixture = new Fixture(this, shape, fixdef);\n this._addFixture(fixture);\n return fixture;\n }\n\n /**\n * Destroy a fixture. This removes the fixture from the broad-phase and destroys\n * all contacts associated with this fixture. This will automatically adjust the\n * mass of the body if the body is dynamic and the fixture has positive density.\n * All fixtures attached to a body are implicitly destroyed when the body is\n * destroyed.\n *\n * Warning: This function is locked during callbacks.\n *\n * @param fixture The fixture to be removed.\n */\n destroyFixture(fixture: Fixture): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n _ASSERT && console.assert(fixture.m_body == this);\n\n // Remove the fixture from this body's singly linked list.\n let found = false;\n if (this.m_fixtureList === fixture) {\n this.m_fixtureList = fixture.m_next;\n found = true;\n\n } else {\n let node = this.m_fixtureList;\n while (node != null) {\n if (node.m_next === fixture) {\n node.m_next = fixture.m_next;\n found = true;\n break;\n }\n node = node.m_next;\n }\n }\n\n // You tried to remove a shape that is not attached to this body.\n _ASSERT && console.assert(found);\n\n // Destroy any contacts associated with the fixture.\n let edge = this.m_contactList;\n while (edge) {\n const c = edge.contact;\n edge = edge.next;\n\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n\n if (fixture == fixtureA || fixture == fixtureB) {\n // This destroys the contact and removes it from\n // this body's contact list.\n this.m_world.destroyContact(c);\n }\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.destroyProxies(broadPhase);\n }\n\n fixture.m_body = null;\n fixture.m_next = null;\n\n this.m_world.publish(\"remove-fixture\", fixture);\n\n // Reset the mass data.\n this.resetMassData();\n }\n\n /**\n * Get the corresponding world point of a local point.\n */\n getWorldPoint(localPoint: Vec2Value): Vec2 {\n return Transform.mulVec2(this.m_xf, localPoint);\n }\n\n /**\n * Get the corresponding world vector of a local vector.\n */\n getWorldVector(localVector: Vec2Value): Vec2 {\n return Rot.mulVec2(this.m_xf.q, localVector);\n }\n\n /**\n * Gets the corresponding local point of a world point.\n */\n getLocalPoint(worldPoint: Vec2Value): Vec2 {\n return Transform.mulTVec2(this.m_xf, worldPoint);\n }\n\n /**\n * Gets the corresponding local vector of a world vector.\n */\n getLocalVector(worldVector: Vec2Value): Vec2 {\n return Rot.mulTVec2(this.m_xf.q, worldVector);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2, Vec2Value } from \"../common/Vec2\";\nimport type { Body } from \"./Body\";\nimport { TimeStep } from \"./Solver\";\nimport { Style } from \"../util/Testbed\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/**\n * A joint edge is used to connect bodies and joints together in a joint graph\n * where each body is a node and each joint is an edge. A joint edge belongs to\n * a doubly linked list maintained in each attached body. Each joint has two\n * joint nodes, one for each attached body.\n */\nexport class JointEdge {\n /**\n * provides quick access to the other body attached.\n */\n other: Body | null = null;\n /**\n * the joint\n */\n joint: Joint | null = null;\n /**\n * prev the previous joint edge in the body's joint list\n */\n prev: JointEdge | null = null;\n /**\n * the next joint edge in the body's joint list\n */\n next: JointEdge | null = null;\n}\n\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointOpt {\n /**\n * Use this to attach application specific data to your joints.\n */\n userData?: any;\n /**\n * Set this flag to true if the attached bodies\n * should collide.\n */\n collideConnected?: boolean;\n}\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointDef extends JointOpt {\n /**\n * The first attached body.\n */\n bodyA: Body;\n /**\n * The second attached body.\n */\n bodyB: Body;\n}\n\n/** @internal */ const DEFAULTS = {\n userData : null,\n collideConnected : false\n};\n\n/**\n * The base joint class. Joints are used to constraint two bodies together in\n * various fashions. Some joints also feature limits and motors.\n */\nexport abstract class Joint {\n\n /** @internal */ m_type: string = \"unknown-joint\";\n\n /** @internal */ m_bodyA: Body;\n /** @internal */ m_bodyB: Body;\n\n /** @internal */ m_collideConnected: boolean;\n\n /** @internal */ m_prev: Joint | null = null;\n /** @internal */ m_next: Joint | null = null;\n\n /** @internal */ m_edgeA: JointEdge = new JointEdge();\n /** @internal */ m_edgeB: JointEdge = new JointEdge();\n\n /** @internal */ m_islandFlag: boolean = false;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(def: JointDef);\n constructor(def: JointOpt, bodyA: Body, bodyB: Body);\n constructor(def: JointDef | JointOpt, bodyA?: Body, bodyB?: Body) {\n bodyA = \"bodyA\" in def ? def.bodyA : bodyA;\n bodyB = \"bodyB\" in def ? def.bodyB : bodyB;\n\n _ASSERT && console.assert(!!bodyA);\n _ASSERT && console.assert(!!bodyB);\n _ASSERT && console.assert(bodyA != bodyB);\n\n this.m_bodyA = bodyA!;\n this.m_bodyB = bodyB!;\n\n this.m_collideConnected = !!def.collideConnected;\n this.m_userData = def.userData;\n }\n\n /**\n * Short-cut function to determine if either body is inactive.\n */\n isActive(): boolean {\n return this.m_bodyA.isActive() && this.m_bodyB.isActive();\n }\n\n /**\n * Get the type of the concrete joint.\n */\n getType(): string {\n return this.m_type;\n }\n\n /**\n * Get the first body attached to this joint.\n */\n getBodyA(): Body {\n return this.m_bodyA;\n }\n\n /**\n * Get the second body attached to this joint.\n */\n getBodyB(): Body {\n return this.m_bodyB;\n }\n\n /**\n * Get the next joint the world joint list.\n */\n getNext(): Joint {\n return this.m_next;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get collide connected. Note: modifying the collide connect flag won't work\n * correctly because the flag is only checked when fixture AABBs begin to\n * overlap.\n */\n getCollideConnected(): boolean {\n return this.m_collideConnected;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n abstract getAnchorA(): Vec2;\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n abstract getAnchorB(): Vec2;\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n abstract getReactionForce(inv_dt: number): Vec2;\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n abstract getReactionTorque(inv_dt: number): number;\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {}\n\n abstract initVelocityConstraints(step: TimeStep): void;\n\n abstract solveVelocityConstraints(step: TimeStep): void;\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n abstract solvePositionConstraints(step: TimeStep): boolean;\n\n /**\n * @hidden @experimental\n * Update joint with new props.\n */\n abstract _reset(def: Partial): void;\n\n /**\n * @internal @deprecated\n * Temporary for backward compatibility, will be removed.\n */\n _resetAnchors(def: any): void {\n return this._reset(def);\n }\n}\n","/** @hidden */\nexport const stats = {\n gjkCalls: 0,\n gjkIters: 0,\n gjkMaxIters: 0,\n\n toiTime: 0,\n toiMaxTime: 0,\n toiCalls: 0,\n toiIters: 0,\n toiMaxIters: 0,\n toiRootIters: 0,\n toiMaxRootIters: 0,\n\n toString(newline?: string): string {\n newline = typeof newline === \"string\" ? newline : \"\\n\";\n let string = \"\";\n // tslint:disable-next-line:no-for-in\n for (const name in this) {\n if (typeof this[name] !== \"function\" && typeof this[name] !== \"object\") {\n string += name + \": \" + this[name] + newline;\n }\n }\n return string;\n }\n};\n","/** @internal */\nexport const now = function(): number {\n return Date.now();\n};\n\n/** @internal */\nexport const diff = function(time: number): number {\n return Date.now() - time;\n};\n\n/** @internal */\nexport default {\n now,\n diff,\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport { Shape } from \"./Shape\";\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Transform, TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const e12 = matrix.vec2(0, 0);\n/** @internal */ const e13 = matrix.vec2(0, 0);\n/** @internal */ const e23 = matrix.vec2(0, 0);\n/** @internal */ const temp1 = matrix.vec2(0, 0);\n/** @internal */ const temp2 = matrix.vec2(0, 0);\n\n/**\n * GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates.\n */\n\nstats.gjkCalls = 0;\nstats.gjkIters = 0;\nstats.gjkMaxIters = 0;\n\n/**\n * Input for Distance. You have to option to use the shape radii in the\n * computation. Even\n */\nexport class DistanceInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n useRadii = false;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n this.useRadii = false;\n }\n}\n\n/**\n * Output for Distance.\n */\nexport class DistanceOutput {\n /** closest point on shapeA */\n pointA = matrix.vec2(0, 0);\n /** closest point on shapeB */\n pointB = matrix.vec2(0, 0);\n distance = 0;\n /** iterations number of GJK iterations used */\n iterations = 0;\n recycle() {\n matrix.zeroVec2(this.pointA);\n matrix.zeroVec2(this.pointB);\n this.distance = 0;\n this.iterations = 0;\n }\n}\n\n/**\n * Used to warm start Distance. Set count to zero on first call.\n */\nexport class SimplexCache {\n /** length or area */\n metric: number = 0;\n /** vertices on shape A */\n indexA: number[] = [];\n /** vertices on shape B */\n indexB: number[] = [];\n count: number = 0;\n recycle() {\n this.metric = 0;\n this.indexA.length = 0;\n this.indexB.length = 0;\n this.count = 0;\n }\n}\n\n/**\n * Compute the closest points between two shapes. Supports any combination of:\n * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On\n * the first call set SimplexCache.count to zero.\n */\nexport const Distance = function (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void {\n ++stats.gjkCalls;\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n // Initialize the simplex.\n // const simplex = new Simplex();\n simplex.recycle();\n simplex.readCache(cache, proxyA, xfA, proxyB, xfB);\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n const k_maxIters = Settings.maxDistanceIterations;\n\n // These store the vertices of the last simplex so that we\n // can check for duplicates and prevent cycling.\n const saveA = [];\n const saveB = []; // int[3]\n let saveCount = 0;\n\n // Main iteration loop.\n let iter = 0;\n while (iter < k_maxIters) {\n // Copy simplex so we can identify duplicates.\n saveCount = simplex.m_count;\n for (let i = 0; i < saveCount; ++i) {\n saveA[i] = vertices[i].indexA;\n saveB[i] = vertices[i].indexB;\n }\n\n simplex.solve();\n\n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count === 3) {\n break;\n }\n\n // Get search direction.\n const d = simplex.getSearchDirection();\n\n // Ensure the search direction is numerically fit.\n if (matrix.lengthSqrVec2(d) < EPSILON * EPSILON) {\n // The origin is probably contained by a line segment\n // or triangle. Thus the shapes are overlapped.\n\n // We can't return zero here even though there may be overlap.\n // In case the simplex is a point, segment, or triangle it is difficult\n // to determine if the origin is contained in the CSO or very close to it.\n break;\n }\n\n // Compute a tentative new simplex vertex using support points.\n const vertex = vertices[simplex.m_count]; // SimplexVertex\n\n vertex.indexA = proxyA.getSupport(matrix.derotVec2(temp, xfA.q, matrix.scaleVec2(temp, -1, d)));\n matrix.transformVec2(vertex.wA, xfA, proxyA.getVertex(vertex.indexA));\n\n vertex.indexB = proxyB.getSupport(matrix.derotVec2(temp, xfB.q, d));\n matrix.transformVec2(vertex.wB, xfB, proxyB.getVertex(vertex.indexB));\n\n matrix.subVec2(vertex.w, vertex.wB, vertex.wA);\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n ++stats.gjkIters;\n\n // Check for duplicate support points. This is the main termination\n // criteria.\n let duplicate = false;\n for (let i = 0; i < saveCount; ++i) {\n if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) {\n duplicate = true;\n break;\n }\n }\n\n // If we found a duplicate support point we must exit to avoid cycling.\n if (duplicate) {\n break;\n }\n\n // New vertex is ok and needed.\n ++simplex.m_count;\n }\n\n stats.gjkMaxIters = math_max(stats.gjkMaxIters, iter);\n\n // Prepare output.\n simplex.getWitnessPoints(output.pointA, output.pointB);\n output.distance = matrix.distVec2(output.pointA, output.pointB);\n output.iterations = iter;\n\n // Cache the simplex.\n simplex.writeCache(cache);\n\n // Apply radii if requested.\n if (input.useRadii) {\n const rA = proxyA.m_radius;\n const rB = proxyB.m_radius;\n\n if (output.distance > rA + rB && output.distance > EPSILON) {\n // Shapes are still no overlapped.\n // Move the witness points to the outer surface.\n output.distance -= rA + rB;\n matrix.subVec2(normal, output.pointB, output.pointA);\n matrix.normalizeVec2(normal);\n matrix.plusScaleVec2(output.pointA, rA, normal);\n matrix.minusScaleVec2(output.pointB, rB, normal);\n } else {\n // Shapes are overlapped when radii are considered.\n // Move the witness points to the middle.\n const p = matrix.subVec2(temp, output.pointA, output.pointB);\n matrix.copyVec2(output.pointA, p);\n matrix.copyVec2(output.pointB, p);\n output.distance = 0.0;\n }\n }\n};\n\n/**\n * A distance proxy is used by the GJK algorithm. It encapsulates any shape.\n */\nexport class DistanceProxy {\n /** @internal */ m_vertices: Vec2Value[] = [];\n // todo: remove this?\n /** @internal */ m_count = 0;\n /** @internal */ m_radius = 0;\n\n recycle() {\n this.m_vertices.length = 0;\n this.m_count = 0;\n this.m_radius = 0;\n }\n\n /**\n * Get the vertex count.\n */\n getVertexCount(): number {\n return this.m_count;\n }\n\n /**\n * Get a vertex by index. Used by Distance.\n */\n getVertex(index: number): Vec2Value {\n _ASSERT && console.assert(0 <= index && index < this.m_count);\n return this.m_vertices[index];\n }\n\n /**\n * Get the supporting vertex index in the given direction.\n */\n getSupport(d: Vec2Value): number {\n let bestIndex = -1;\n let bestValue = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const value = matrix.dotVec2(this.m_vertices[i], d);\n if (value > bestValue) {\n bestIndex = i;\n bestValue = value;\n }\n }\n return bestIndex;\n }\n\n /**\n * Get the supporting vertex in the given direction.\n */\n getSupportVertex(d: Vec2Value): Vec2Value {\n return this.m_vertices[this.getSupport(d)];\n }\n\n /**\n * Initialize the proxy using the given shape. The shape must remain in scope\n * while the proxy is in use.\n */\n set(shape: Shape, index: number): void {\n // TODO remove, use shape instead\n _ASSERT && console.assert(typeof shape.computeDistanceProxy === \"function\");\n shape.computeDistanceProxy(this, index);\n }\n\n /**\n * Initialize the proxy using a vertex cloud and radius. The vertices\n * must remain in scope while the proxy is in use.\n */\n setVertices(vertices: Vec2Value[], count: number, radius: number) {\n this.m_vertices = vertices;\n this.m_count = count;\n this.m_radius = radius;\n }\n}\n\nclass SimplexVertex {\n /** support point in proxyA */\n wA = matrix.vec2(0, 0);\n /** wA index */\n indexA = 0;\n\n /** support point in proxyB */\n wB = matrix.vec2(0, 0);\n /** wB index */\n indexB = 0;\n\n /** wB - wA; */\n w = matrix.vec2(0, 0);\n /** barycentric coordinate for closest point */\n a = 0;\n\n recycle() {\n this.indexA = 0;\n this.indexB = 0;\n matrix.zeroVec2(this.wA);\n matrix.zeroVec2(this.wB);\n matrix.zeroVec2(this.w);\n this.a = 0;\n }\n set(v: SimplexVertex): void {\n this.indexA = v.indexA;\n this.indexB = v.indexB;\n matrix.copyVec2(this.wA, v.wA);\n matrix.copyVec2(this.wB, v.wB);\n matrix.copyVec2(this.w, v.w);\n this.a = v.a;\n }\n}\n\n/** @internal */ const searchDirection_reuse = matrix.vec2(0, 0);\n/** @internal */ const closestPoint_reuse = matrix.vec2(0, 0); \n\nclass Simplex {\n m_v1 = new SimplexVertex();\n m_v2 = new SimplexVertex();\n m_v3 = new SimplexVertex();\n m_v = [this.m_v1, this.m_v2, this.m_v3];\n m_count: number;\n recycle() {\n this.m_v1.recycle();\n this.m_v2.recycle();\n this.m_v3.recycle();\n this.m_count = 0;\n }\n\n /** @internal */ toString(): string {\n if (this.m_count === 3) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y,\n this.m_v3.a, this.m_v3.wA.x, this.m_v3.wA.y, this.m_v3.wB.x, this.m_v3.wB.y\n ].toString();\n\n } else if (this.m_count === 2) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y\n ].toString();\n\n } else if (this.m_count === 1) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y\n ].toString();\n\n } else {\n return \"+\" + this.m_count;\n }\n }\n\n readCache(cache: SimplexCache, proxyA: DistanceProxy, transformA: TransformValue, proxyB: DistanceProxy, transformB: TransformValue): void {\n _ASSERT && console.assert(cache.count <= 3);\n\n // Copy data from cache.\n this.m_count = cache.count;\n for (let i = 0; i < this.m_count; ++i) {\n const v = this.m_v[i];\n v.indexA = cache.indexA[i];\n v.indexB = cache.indexB[i];\n const wALocal = proxyA.getVertex(v.indexA);\n const wBLocal = proxyB.getVertex(v.indexB);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 0.0;\n }\n\n // Compute the new simplex metric, if it is substantially different than\n // old metric then flush the simplex.\n if (this.m_count > 1) {\n const metric1 = cache.metric;\n const metric2 = this.getMetric();\n if (metric2 < 0.5 * metric1 || 2.0 * metric1 < metric2 || metric2 < EPSILON) {\n // Reset the simplex.\n this.m_count = 0;\n }\n }\n\n // If the cache is empty or invalid...\n if (this.m_count === 0) {\n const v = this.m_v[0];\n v.indexA = 0;\n v.indexB = 0;\n const wALocal = proxyA.getVertex(0);\n const wBLocal = proxyB.getVertex(0);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 1.0;\n this.m_count = 1;\n }\n }\n\n writeCache(cache: SimplexCache): void {\n cache.metric = this.getMetric();\n cache.count = this.m_count;\n for (let i = 0; i < this.m_count; ++i) {\n cache.indexA[i] = this.m_v[i].indexA;\n cache.indexB[i] = this.m_v[i].indexB;\n }\n }\n\n getSearchDirection(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 1:\n return matrix.setVec2(searchDirection_reuse, -v1.w.x, -v1.w.y);\n\n case 2: {\n matrix.subVec2(e12, v2.w, v1.w);\n const sgn = -matrix.crossVec2Vec2(e12, v1.w);\n if (sgn > 0.0) {\n // Origin is left of e12.\n return matrix.setVec2(searchDirection_reuse, -e12.y, e12.x);\n } else {\n // Origin is right of e12.\n return matrix.setVec2(searchDirection_reuse, e12.y, -e12.x);\n }\n }\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(searchDirection_reuse);\n }\n }\n\n getClosestPoint(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n\n case 1:\n return matrix.copyVec2(closestPoint_reuse, v1.w);\n\n case 2:\n return matrix.combine2Vec2(closestPoint_reuse, v1.a, v1.w, v2.a, v2.w);\n\n case 3:\n return matrix.zeroVec2(closestPoint_reuse);\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n }\n }\n\n getWitnessPoints(pA: Vec2Value, pB: Vec2Value): void {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n break;\n\n case 1:\n matrix.copyVec2(pA, v1.wA);\n matrix.copyVec2(pB, v1.wB);\n break;\n\n case 2:\n matrix.combine2Vec2(pA, v1.a, v1.wA, v2.a, v2.wA);\n matrix.combine2Vec2(pB, v1.a, v1.wB, v2.a, v2.wB);\n break;\n\n case 3:\n matrix.combine3Vec2(pA, v1.a, v1.wA, v2.a, v2.wA, v3.a, v3.wA);\n matrix.copyVec2(pB, pA);\n break;\n\n default:\n _ASSERT && console.assert(false);\n break;\n }\n }\n\n getMetric(): number {\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return 0.0;\n\n case 1:\n return 0.0;\n\n case 2:\n return matrix.distVec2(this.m_v1.w, this.m_v2.w);\n\n case 3:\n return matrix.crossVec2Vec2(\n matrix.subVec2(temp1, this.m_v2.w, this.m_v1.w),\n matrix.subVec2(temp2, this.m_v3.w, this.m_v1.w),\n );\n\n default:\n _ASSERT && console.assert(false);\n return 0.0;\n }\n }\n\n solve(): void {\n switch (this.m_count) {\n case 1:\n break;\n\n case 2:\n this.solve2();\n break;\n\n case 3:\n this.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n }\n\n// Solve a line segment using barycentric coordinates.\n//\n// p = a1 * w1 + a2 * w2\n// a1 + a2 = 1\n//\n// The vector from the origin to the closest point on the line is\n// perpendicular to the line.\n// e12 = w2 - w1\n// dot(p, e) = 0\n// a1 * dot(w1, e) + a2 * dot(w2, e) = 0\n//\n// 2-by-2 linear system\n// [1 1 ][a1] = [1]\n// [w1.e12 w2.e12][a2] = [0]\n//\n// Define\n// d12_1 = dot(w2, e12)\n// d12_2 = -dot(w1, e12)\n// d12 = d12_1 + d12_2\n//\n// Solution\n// a1 = d12_1 / d12\n// a2 = d12_2 / d12\n solve2(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n matrix.subVec2(e12, w2, w1);\n\n // w1 region\n const d12_2 = -matrix.dotVec2(w1, e12);\n if (d12_2 <= 0.0) {\n // a2 <= 0, so we clamp it to 0\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // w2 region\n const d12_1 = matrix.dotVec2(w2, e12);\n if (d12_1 <= 0.0) {\n // a1 <= 0, so we clamp it to 0\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // Must be in e12 region.\n const inv_d12 = 1.0 / (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\n// Possible regions:\n// - points[2]\n// - edge points[0]-points[2]\n// - edge points[1]-points[2]\n// - inside the triangle\n solve3(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n const w3 = this.m_v3.w;\n\n // Edge12\n // [1 1 ][a1] = [1]\n // [w1.e12 w2.e12][a2] = [0]\n // a3 = 0\n matrix.subVec2(e12, w2, w1);\n const w1e12 = matrix.dotVec2(w1, e12);\n const w2e12 = matrix.dotVec2(w2, e12);\n const d12_1 = w2e12;\n const d12_2 = -w1e12;\n\n // Edge13\n // [1 1 ][a1] = [1]\n // [w1.e13 w3.e13][a3] = [0]\n // a2 = 0\n matrix.subVec2(e13, w3, w1);\n const w1e13 = matrix.dotVec2(w1, e13);\n const w3e13 = matrix.dotVec2(w3, e13);\n const d13_1 = w3e13;\n const d13_2 = -w1e13;\n\n // Edge23\n // [1 1 ][a2] = [1]\n // [w2.e23 w3.e23][a3] = [0]\n // a1 = 0\n matrix.subVec2(e23, w3, w2);\n const w2e23 = matrix.dotVec2(w2, e23);\n const w3e23 = matrix.dotVec2(w3, e23);\n const d23_1 = w3e23;\n const d23_2 = -w2e23;\n\n // Triangle123\n const n123 = matrix.crossVec2Vec2(e12, e13);\n\n const d123_1 = n123 * matrix.crossVec2Vec2(w2, w3);\n const d123_2 = n123 * matrix.crossVec2Vec2(w3, w1);\n const d123_3 = n123 * matrix.crossVec2Vec2(w1, w2);\n\n // w1 region\n if (d12_2 <= 0.0 && d13_2 <= 0.0) {\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // e12\n if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) {\n const inv_d12 = 1.0 / (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\n // e13\n if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) {\n const inv_d13 = 1.0 / (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\n // w2 region\n if (d12_1 <= 0.0 && d23_2 <= 0.0) {\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // w3 region\n if (d13_1 <= 0.0 && d23_1 <= 0.0) {\n this.m_v3.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v3);\n return;\n }\n\n // e23\n if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) {\n const inv_d23 = 1.0 / (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\n // Must be in triangle123\n const inv_d123 = 1.0 / (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}\n\n/** @internal */ const simplex = new Simplex();\n\n/** @internal */ const input = new DistanceInput();\n/** @internal */ const cache = new SimplexCache();\n/** @internal */ const output = new DistanceOutput();\n\n/**\n * Determine if two generic shapes overlap.\n */\nexport const testOverlap = function (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue): boolean {\n input.recycle();\n input.proxyA.set(shapeA, indexA);\n input.proxyB.set(shapeB, indexB);\n matrix.copyTransform(input.transformA, xfA);\n matrix.copyTransform(input.transformB, xfB);\n input.useRadii = true;\n\n output.recycle();\n cache.recycle();\n\n Distance(output, cache, input);\n\n return output.distance < 10.0 * EPSILON;\n};\n\n// legacy exports\nDistance.testOverlap = testOverlap;\nDistance.Input = DistanceInput;\nDistance.Output = DistanceOutput;\nDistance.Proxy = DistanceProxy;\nDistance.Cache = SimplexCache;\n\n/**\n * Input parameters for ShapeCast\n */\nexport class ShapeCastInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n readonly translationB = Vec2.zero();\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n matrix.zeroVec2(this.translationB);\n }\n}\n\n/**\n * Output results for b2ShapeCast\n */\nexport class ShapeCastOutput {\n point: Vec2 = Vec2.zero();\n normal: Vec2 = Vec2.zero();\n lambda = 1.0;\n iterations = 0;\n}\n\n/**\n * Perform a linear shape cast of shape B moving and shape A fixed. Determines\n * the hit point, normal, and translation fraction.\n * \n * @returns true if hit, false if there is no hit or an initial overlap\n */\n//\n// GJK-raycast\n// Algorithm by Gino van den Bergen.\n// \"Smooth Mesh Contacts with GJK\" in Game Physics Pearls. 2010\nexport const ShapeCast = function(output: ShapeCastOutput, input: ShapeCastInput): boolean {\n output.iterations = 0;\n output.lambda = 1.0;\n output.normal.setZero();\n output.point.setZero();\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n\n const radiusA = math_max(proxyA.m_radius, Settings.polygonRadius);\n const radiusB = math_max(proxyB.m_radius, Settings.polygonRadius);\n const radius = radiusA + radiusB;\n\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n const r = input.translationB;\n const n = Vec2.zero();\n let lambda = 0.0;\n\n // Initial simplex\n const simplex = new Simplex();\n simplex.m_count = 0;\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n\n // Get support point in -r direction\n let indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(r)));\n let wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n let indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, r));\n let wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const v = Vec2.sub(wA, wB);\n\n // Sigma is the target distance between polygons\n const sigma = math_max(Settings.polygonRadius, radius - Settings.polygonRadius);\n const tolerance = 0.5 * Settings.linearSlop;\n\n // Main iteration loop.\n const k_maxIters = 20;\n let iter = 0;\n while (iter < k_maxIters && v.length() - sigma > tolerance) {\n _ASSERT && console.assert(simplex.m_count < 3);\n\n output.iterations += 1;\n\n // Support in direction -v (A - B)\n indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(v)));\n wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, v));\n wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const p = Vec2.sub(wA, wB);\n\n // -v is a normal at p\n v.normalize();\n\n // Intersect ray with plane\n const vp = Vec2.dot(v, p);\n const vr = Vec2.dot(v, r);\n if (vp - sigma > lambda * vr) {\n if (vr <= 0.0) {\n return false;\n }\n\n lambda = (vp - sigma) / vr;\n if (lambda > 1.0) {\n return false;\n }\n\n n.setMul(-1, v);\n simplex.m_count = 0;\n }\n\n // Reverse simplex since it works with B - A.\n // Shift by lambda * r because we want the closest point to the current clip point.\n // Note that the support point p is not shifted because we want the plane equation\n // to be formed in unshifted space.\n const vertex = vertices[simplex.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.0;\n simplex.m_count += 1;\n\n switch (simplex.m_count) {\n case 1:\n break;\n\n case 2:\n simplex.solve2();\n break;\n\n case 3:\n simplex.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n \n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count == 3) {\n // Overlap\n return false;\n }\n\n // Get search direction.\n v.setVec2(simplex.getClosestPoint());\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n }\n\n if (iter == 0) {\n // Initial overlap\n return false;\n\t}\n\n // Prepare output.\n const pointA = Vec2.zero();\n const pointB = Vec2.zero();\n simplex.getWitnessPoints(pointB, pointA);\n\n if (v.lengthSquared() > 0.0) {\n n.setMul(-1, v);\n n.normalize();\n }\n\n output.point = Vec2.combine(1, pointA, radiusA, n);\n output.normal = n;\n output.lambda = lambda;\n output.iterations = iter;\n return true;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport Timer from \"../util/Timer\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Distance, DistanceInput, DistanceOutput, DistanceProxy, SimplexCache } from \"./Distance\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\n/**\n * Input parameters for TimeOfImpact.\n */\nexport class TOIInput {\n proxyA = new DistanceProxy();\n proxyB = new DistanceProxy();\n sweepA = new Sweep();\n sweepB = new Sweep();\n /** defines sweep interval [0, tMax] */\n tMax: number;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.sweepA.recycle();\n this.sweepB.recycle();\n this.tMax = -1;\n }\n}\n\nexport enum TOIOutputState {\n e_unset = -1,\n e_unknown = 0,\n e_failed = 1,\n e_overlapped = 2,\n e_touching = 3,\n e_separated = 4,\n}\n\n/**\n * Output parameters for TimeOfImpact.\n */\nexport class TOIOutput {\n state = TOIOutputState.e_unset;\n t = -1;\n recycle() {\n this.state = TOIOutputState.e_unset;\n this.t = -1;\n }\n}\n\nstats.toiTime = 0;\nstats.toiMaxTime = 0;\nstats.toiCalls = 0;\nstats.toiIters = 0;\nstats.toiMaxIters = 0;\nstats.toiRootIters = 0;\nstats.toiMaxRootIters = 0;\n\n/** @internal */ const distanceInput = new DistanceInput();\n/** @internal */ const distanceOutput = new DistanceOutput();\n// this is passed to Distance and SeparationFunction\n/** @internal */ const cache = new SimplexCache();\n\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const axisA = matrix.vec2(0, 0);\n/** @internal */ const axisB = matrix.vec2(0, 0);\n/** @internal */ const localPointA = matrix.vec2(0, 0);\n/** @internal */ const localPointB = matrix.vec2(0, 0);\n\n\n/**\n * Compute the upper bound on time before two shapes penetrate. Time is\n * represented as a fraction between [0,tMax]. This uses a swept separating axis\n * and may miss some intermediate, non-tunneling collisions. If you change the\n * time interval, you should call this function again.\n *\n * Note: use Distance to compute the contact point and normal at the time of\n * impact.\n *\n * CCD via the local separating axis method. This seeks progression by computing\n * the largest time at which separation is maintained.\n */\nexport const TimeOfImpact = function (output: TOIOutput, input: TOIInput): void {\n const timer = Timer.now();\n\n ++stats.toiCalls;\n\n output.state = TOIOutputState.e_unknown;\n output.t = input.tMax;\n\n const proxyA = input.proxyA; // DistanceProxy\n const proxyB = input.proxyB; // DistanceProxy\n\n const sweepA = input.sweepA; // Sweep\n const sweepB = input.sweepB; // Sweep\n\n // Large rotations can make the root finder fail, so we normalize the\n // sweep angles.\n sweepA.normalize();\n sweepB.normalize();\n\n const tMax = input.tMax;\n\n const totalRadius = proxyA.m_radius + proxyB.m_radius;\n const target = math_max(Settings.linearSlop, totalRadius - 3.0 * Settings.linearSlop);\n const tolerance = 0.25 * Settings.linearSlop;\n _ASSERT && console.assert(target > tolerance);\n\n let t1 = 0.0;\n const k_maxIterations = Settings.maxTOIIterations;\n let iter = 0;\n\n // Prepare input for distance query.\n // const cache = new SimplexCache();\n cache.recycle();\n\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\n // The outer loop progressively attempts to compute new separating axes.\n // This loop terminates when an axis is repeated (no progress is made).\n while (true) {\n sweepA.getTransform(xfA, t1);\n sweepB.getTransform(xfB, t1);\n\n // Get the distance between shapes. We can also use the results\n // to get a separating axis.\n matrix.copyTransform(distanceInput.transformA, xfA);\n matrix.copyTransform(distanceInput.transformB, xfB);\n Distance(distanceOutput, cache, distanceInput);\n\n // If the shapes are overlapped, we give up on continuous collision.\n if (distanceOutput.distance <= 0.0) {\n // Failure!\n output.state = TOIOutputState.e_overlapped;\n output.t = 0.0;\n break;\n }\n\n if (distanceOutput.distance < target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n break;\n }\n\n // Initialize the separating axis.\n separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1);\n\n // if (false) {\n // // Dump the curve seen by the root finder\n // const N = 100;\n // const dx = 1.0 / N;\n // const xs = []; // [ N + 1 ];\n // const fs = []; // [ N + 1 ];\n // const x = 0.0;\n // for (const i = 0; i <= N; ++i) {\n // sweepA.getTransform(xfA, x);\n // sweepB.getTransform(xfB, x);\n // const f = fcn.evaluate(xfA, xfB) - target;\n // printf(\"%g %g\\n\", x, f);\n // xs[i] = x;\n // fs[i] = f;\n // x += dx;\n // }\n // }\n\n // Compute the TOI on the separating axis. We do this by successively\n // resolving the deepest point. This loop is bounded by the number of\n // vertices.\n let done = false;\n let t2 = tMax;\n let pushBackIter = 0;\n while (true) {\n // Find the deepest point at t2. Store the witness point indices.\n let s2 = separationFunction.findMinSeparation(t2);\n\n // Is the final configuration separated?\n if (s2 > target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_separated;\n output.t = tMax;\n done = true;\n break;\n }\n\n // Has the separation reached tolerance?\n if (s2 > target - tolerance) {\n // Advance the sweeps\n t1 = t2;\n break;\n }\n\n // Compute the initial separation of the witness points.\n let s1 = separationFunction.evaluate(t1);\n\n // Check for initial overlap. This might happen if the root finder\n // runs out of iterations.\n if (s1 < target - tolerance) {\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n done = true;\n break;\n }\n\n // Check for touching\n if (s1 <= target + tolerance) {\n // Victory! t1 should hold the TOI (could be 0.0).\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n done = true;\n break;\n }\n\n // Compute 1D root of: f(x) - target = 0\n let rootIterCount = 0;\n let a1 = t1;\n let a2 = t2;\n while (true) {\n // Use a mix of the secant rule and bisection.\n let t;\n if (rootIterCount & 1) {\n // Secant rule to improve convergence.\n t = a1 + (target - s1) * (a2 - a1) / (s2 - s1);\n } else {\n // Bisection to guarantee progress.\n t = 0.5 * (a1 + a2);\n }\n\n ++rootIterCount;\n ++stats.toiRootIters;\n\n const s = separationFunction.evaluate(t);\n\n if (math_abs(s - target) < tolerance) {\n // t2 holds a tentative value for t1\n t2 = t;\n break;\n }\n\n // Ensure we continue to bracket the root.\n if (s > target) {\n a1 = t;\n s1 = s;\n } else {\n a2 = t;\n s2 = s;\n }\n\n if (rootIterCount === 50) {\n break;\n }\n }\n\n stats.toiMaxRootIters = math_max(stats.toiMaxRootIters, rootIterCount);\n\n ++pushBackIter;\n\n if (pushBackIter === Settings.maxPolygonVertices) {\n break;\n }\n }\n\n ++iter;\n ++stats.toiIters;\n\n if (done) {\n break;\n }\n\n if (iter === k_maxIterations) {\n // Root finder got stuck. Semi-victory.\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n break;\n }\n }\n\n stats.toiMaxIters = math_max(stats.toiMaxIters, iter);\n\n const time = Timer.diff(timer);\n stats.toiMaxTime = math_max(stats.toiMaxTime, time);\n stats.toiTime += time;\n\n separationFunction.recycle();\n};\n\nenum SeparationFunctionType {\n e_unset = -1,\n e_points = 1,\n e_faceA = 2,\n e_faceB = 3,\n}\n\nclass SeparationFunction {\n // input cache\n // todo: maybe assign by copy instead of reference?\n m_proxyA: DistanceProxy = null;\n m_proxyB: DistanceProxy = null;\n m_sweepA: Sweep = null;\n m_sweepB: Sweep = null;\n\n // initialize cache\n m_type = SeparationFunctionType.e_unset;\n m_localPoint = matrix.vec2(0, 0);\n m_axis = matrix.vec2(0, 0);\n\n // compute output\n indexA = -1;\n indexB = -1;\n\n recycle() {\n this.m_proxyA = null;\n this.m_proxyB = null;\n this.m_sweepA = null;\n this.m_sweepB = null;\n\n this.m_type = SeparationFunctionType.e_unset;\n matrix.zeroVec2(this.m_localPoint);\n matrix.zeroVec2(this.m_axis);\n\n this.indexA = -1;\n this.indexB = -1;\n }\n\n // TODO_ERIN might not need to return the separation\n\n initialize(cache: SimplexCache, proxyA: DistanceProxy, sweepA: Sweep, proxyB: DistanceProxy, sweepB: Sweep, t1: number): number {\n const count = cache.count;\n _ASSERT && console.assert(0 < count && count < 3);\n\n this.m_proxyA = proxyA;\n this.m_proxyB = proxyB;\n this.m_sweepA = sweepA;\n this.m_sweepB = sweepB;\n\n this.m_sweepA.getTransform(xfA, t1);\n this.m_sweepB.getTransform(xfB, t1);\n\n if (count === 1) {\n this.m_type = SeparationFunctionType.e_points;\n const localPointA = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n matrix.subVec2(this.m_axis, pointB, pointA);\n const s = matrix.normalizeVec2Length(this.m_axis);\n return s;\n\n } else if (cache.indexA[0] === cache.indexA[1]) {\n // Two points on B and one on A.\n this.m_type = SeparationFunctionType.e_faceB;\n const localPointB1 = proxyB.getVertex(cache.indexB[0]);\n const localPointB2 = proxyB.getVertex(cache.indexB[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointB2, localPointB1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n const localPointA = proxyA.getVertex(cache.indexA[0]);\n const pointA = Transform.mulVec2(xfA, localPointA);\n\n let s = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n\n } else {\n // Two points on A and one or two points on B.\n this.m_type = SeparationFunctionType.e_faceA;\n const localPointA1 = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointA2 = this.m_proxyA.getVertex(cache.indexA[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointA2, localPointA1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n let s = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n }\n }\n\n compute(find: boolean, t: number): number {\n // It was findMinSeparation and evaluate\n this.m_sweepA.getTransform(xfA, t);\n this.m_sweepB.getTransform(xfB, t);\n\n switch (this.m_type) {\n case SeparationFunctionType.e_points: {\n if (find) {\n matrix.derotVec2(axisA, xfA.q, this.m_axis);\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, this.m_axis));\n\n this.indexA = this.m_proxyA.getSupport(axisA);\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, this.m_axis) - matrix.dotVec2(pointA, this.m_axis);\n return sep;\n }\n\n case SeparationFunctionType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexA = -1;\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n return sep;\n }\n\n case SeparationFunctionType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisA, xfA.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexB = -1;\n this.indexA = this.m_proxyA.getSupport(axisA);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.transformVec2(pointA, xfA, localPointA);\n\n const sep = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n return sep;\n }\n\n default:\n _ASSERT && console.assert(false);\n if (find) {\n this.indexA = -1;\n this.indexB = -1;\n }\n return 0.0;\n }\n }\n\n findMinSeparation(t: number): number {\n return this.compute(true, t);\n }\n\n evaluate(t: number): number {\n return this.compute(false, t);\n }\n}\n\n/** @internal */ const separationFunction = new SeparationFunction();\n\n// legacy exports\nTimeOfImpact.Input = TOIInput;\nTimeOfImpact.Output = TOIOutput;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { EPSILON } from \"../common/Math\";\nimport { Body } from \"./Body\";\nimport type { Contact } from \"./Contact\";\nimport { Joint } from \"./Joint\";\nimport { TimeOfImpact, TOIInput, TOIOutput, TOIOutputState } from \"../collision/TimeOfImpact\";\nimport { Distance, DistanceInput, DistanceOutput, SimplexCache } from \"../collision/Distance\";\nimport { World } from \"./World\";\nimport { Sweep } from \"../common/Sweep\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_min = Math.min;\n\n\nexport class TimeStep {\n /** time step */\n dt: number = 0;\n /** inverse time step (0 if dt == 0) */\n inv_dt: number = 0;\n velocityIterations: number = 0;\n positionIterations: number = 0;\n warmStarting: boolean = false;\n blockSolve: boolean = true;\n\n /** timestep ratio for variable timestep */\n inv_dt0: number = 0.0;\n /** dt * inv_dt0 */\n dtRatio: number = 1;\n\n reset(dt: number): void {\n if (this.dt > 0.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}\n\n// reuse\n/** @internal */ const s_subStep = new TimeStep();\n/** @internal */ const c = matrix.vec2(0, 0);\n/** @internal */ const v = matrix.vec2(0, 0);\n/** @internal */ const translation = matrix.vec2(0, 0);\n/** @internal */ const input = new TOIInput();\n/** @internal */ const output = new TOIOutput();\n/** @internal */ const backup = new Sweep();\n/** @internal */ const backup1 = new Sweep();\n/** @internal */ const backup2 = new Sweep();\n\n/**\n * Contact impulses for reporting. Impulses are used instead of forces because\n * sub-step forces may approach infinity for rigid body collisions. These match\n * up one-to-one with the contact points in Manifold.\n */\nexport class ContactImpulse {\n // TODO: merge with Contact class?\n\n private readonly contact: Contact;\n private readonly normals: number[];\n private readonly tangents: number[];\n\n constructor(contact: Contact) {\n this.contact = contact;\n this.normals = [];\n this.tangents = [];\n }\n\n recycle() {\n this.normals.length = 0;\n this.tangents.length = 0;\n }\n\n get normalImpulses(): number[] {\n const contact = this.contact;\n const normals = this.normals;\n normals.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n normals.push(contact.v_points[p].normalImpulse);\n }\n return normals;\n }\n\n get tangentImpulses(): number[] {\n const contact = this.contact;\n const tangents = this.tangents;\n tangents.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n tangents.push(contact.v_points[p].tangentImpulse);\n }\n return tangents;\n }\n}\n\n/**\n * Finds and solves islands. An island is a connected subset of the world.\n */\nexport class Solver {\n m_world: World;\n m_stack: Body[];\n m_bodies: Body[];\n m_contacts: Contact[];\n m_joints: Joint[];\n\n constructor(world: World) {\n this.m_world = world;\n this.m_stack = [];\n this.m_bodies = [];\n this.m_contacts = [];\n this.m_joints = [];\n }\n\n clear(): void {\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\n addBody(body: Body): void {\n _ASSERT && console.assert(body instanceof Body, \"Not a Body!\", body);\n this.m_bodies.push(body);\n // why?\n // body.c_position.c.setZero();\n // body.c_position.a = 0;\n // body.c_velocity.v.setZero();\n // body.c_velocity.w = 0;\n }\n\n addContact(contact: Contact): void {\n // _ASSERT && console.assert(contact instanceof Contact, 'Not a Contact!', contact);\n this.m_contacts.push(contact);\n }\n\n addJoint(joint: Joint): void {\n _ASSERT && console.assert(joint instanceof Joint, \"Not a Joint!\", joint);\n this.m_joints.push(joint);\n }\n\n solveWorld(step: TimeStep): void {\n const world = this.m_world;\n\n // Clear all the island flags.\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n }\n for (let c = world.m_contactList; c; c = c.m_next) {\n c.m_islandFlag = false;\n }\n for (let j = world.m_jointList; j; j = j.m_next) {\n j.m_islandFlag = false;\n }\n\n // Build and simulate all awake islands.\n const stack = this.m_stack;\n let loop = -1;\n for (let seed = world.m_bodyList; seed; seed = seed.m_next) {\n loop++;\n if (seed.m_islandFlag) {\n continue;\n }\n\n if (seed.isAwake() == false || seed.isActive() == false) {\n continue;\n }\n\n // The seed can be dynamic or kinematic.\n if (seed.isStatic()) {\n continue;\n }\n\n // Reset island and stack.\n this.clear();\n\n stack.push(seed);\n\n seed.m_islandFlag = true;\n\n // Perform a depth first search (DFS) on the constraint graph.\n while (stack.length > 0) {\n // Grab the next body off the stack and add it to the island.\n const b = stack.pop();\n _ASSERT && console.assert(b.isActive() == true);\n this.addBody(b);\n\n // Make sure the body is awake (without resetting sleep timer).\n b.m_awakeFlag = true;\n\n // To keep islands as small as possible, we don't\n // propagate islands across static bodies.\n if (b.isStatic()) {\n continue;\n }\n\n // Search all contacts connected to this body.\n for (let ce = b.m_contactList; ce; ce = ce.next) {\n const contact = ce.contact;\n\n // Has this contact already been added to an island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Is this contact solid and touching?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n this.addContact(contact);\n contact.m_islandFlag = true;\n\n const other = ce.other;\n\n // Was the other body already added to this island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n\n // Search all joints connect to this body.\n for (let je = b.m_jointList; je; je = je.next) {\n if (je.joint.m_islandFlag == true) {\n continue;\n }\n\n const other = je.other;\n\n // Don't simulate joints connected to inactive bodies.\n if (other.isActive() == false) {\n continue;\n }\n\n this.addJoint(je.joint);\n je.joint.m_islandFlag = true;\n\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n }\n\n this.solveIsland(step);\n\n // Post solve cleanup.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n // Allow static bodies to participate in other islands.\n // TODO: are they added at all?\n const b = this.m_bodies[i];\n if (b.isStatic()) {\n b.m_islandFlag = false;\n }\n }\n }\n }\n\n solveIsland(step: TimeStep): void {\n // B2: Island Solve\n const world = this.m_world;\n const gravity = world.m_gravity;\n const allowSleep = world.m_allowSleep;\n\n const h = step.dt;\n\n // Integrate velocities and apply damping. Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.m_sweep.c);\n const a = body.m_sweep.a;\n matrix.copyVec2(v, body.m_linearVelocity);\n let w = body.m_angularVelocity;\n\n // Store positions for continuous collision.\n matrix.copyVec2(body.m_sweep.c0, body.m_sweep.c);\n body.m_sweep.a0 = body.m_sweep.a;\n\n if (body.isDynamic()) {\n // Integrate velocities.\n matrix.plusScaleVec2(v, h * body.m_gravityScale, gravity);\n matrix.plusScaleVec2(v, h * body.m_invMass, body.m_force);\n w += h * body.m_invI * body.m_torque;\n /**\n *
\n         * Apply damping.\n         * ODE: dv/dt + c * v = 0\n         * Solution: v(t) = v0 * exp(-c * t)\n         * Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)\n         * v2 = exp(-c * dt) * v1\n         * Pade approximation:\n         * v2 = v1 * 1 / (1 + c * dt)\n         * 
\n */\n matrix.scaleVec2(v, 1.0 / (1.0 + h * body.m_linearDamping), v);\n w *= 1.0 / (1.0 + h * body.m_angularDamping);\n }\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(step);\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(step);\n }\n\n if (step.warmStarting) {\n // Warm start.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.warmStartConstraint(step);\n }\n }\n\n for (let i = 0; i < this.m_joints.length; ++i) {\n const joint = this.m_joints[i];\n joint.initVelocityConstraints(step);\n }\n\n // Solve velocity constraints\n for (let i = 0; i < step.velocityIterations; ++i) {\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n joint.solveVelocityConstraints(step);\n }\n\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(step);\n }\n }\n\n // Store impulses for warm starting\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.storeConstraintImpulses(step);\n }\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n // Solve position constraints\n let positionSolved = false;\n for (let i = 0; i < step.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraint(step);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -3.0 * Settings.linearSlop;\n\n let jointsOkay = true;\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n const jointOkay = joint.solvePositionConstraints(step);\n jointsOkay = jointsOkay && jointOkay;\n }\n\n if (contactsOkay && jointsOkay) {\n // Exit early if the position errors are small.\n positionSolved = true;\n break;\n }\n }\n\n // Copy state buffers back to the bodies\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(body.m_sweep.c, body.c_position.c);\n body.m_sweep.a = body.c_position.a;\n matrix.copyVec2(body.m_linearVelocity, body.c_velocity.v);\n body.m_angularVelocity = body.c_velocity.w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n\n if (allowSleep) {\n let minSleepTime = Infinity;\n\n const linTolSqr = Settings.linearSleepToleranceSqr;\n const angTolSqr = Settings.angularSleepToleranceSqr;\n\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n if (body.isStatic()) {\n continue;\n }\n\n if ((body.m_autoSleepFlag == false)\n || (body.m_angularVelocity * body.m_angularVelocity > angTolSqr)\n || (matrix.lengthSqrVec2(body.m_linearVelocity) > linTolSqr)) {\n body.m_sleepTime = 0.0;\n minSleepTime = 0.0;\n } else {\n body.m_sleepTime += h;\n minSleepTime = math_min(minSleepTime, body.m_sleepTime);\n }\n }\n\n if (minSleepTime >= Settings.timeToSleep && positionSolved) {\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.setAwake(false);\n }\n }\n }\n }\n\n /**\n * Find TOI contacts and solve them.\n */\n solveWorldTOI(step: TimeStep): void {\n const world = this.m_world;\n\n if (world.m_stepComplete) {\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n b.m_sweep.alpha0 = 0.0;\n }\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Invalidate TOI\n c.m_toiFlag = false;\n c.m_islandFlag = false;\n c.m_toiCount = 0;\n c.m_toi = 1.0;\n }\n }\n\n // Find TOI events and solve them.\n while (true) {\n // Find the first TOI.\n let minContact: Contact | null = null;\n let minAlpha = 1.0;\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Is this contact disabled?\n if (c.isEnabled() == false) {\n continue;\n }\n\n // Prevent excessive sub-stepping.\n if (c.m_toiCount > Settings.maxSubSteps) {\n continue;\n }\n\n let alpha = 1.0;\n if (c.m_toiFlag) {\n // This contact has a valid cached TOI.\n alpha = c.m_toi;\n } else {\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n // Is there a sensor?\n if (fA.isSensor() || fB.isSensor()) {\n continue;\n }\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n _ASSERT && console.assert(bA.isDynamic() || bB.isDynamic());\n\n const activeA = bA.isAwake() && !bA.isStatic();\n const activeB = bB.isAwake() && !bB.isStatic();\n\n // Is at least one body active (awake and dynamic or kinematic)?\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const collideA = bA.isBullet() || !bA.isDynamic();\n const collideB = bB.isBullet() || !bB.isDynamic();\n\n // Are these two non-bullet dynamic bodies?\n if (collideA == false && collideB == false) {\n continue;\n }\n\n // Compute the TOI for this contact.\n // Put the sweeps onto the same time interval.\n let alpha0 = bA.m_sweep.alpha0;\n\n if (bA.m_sweep.alpha0 < bB.m_sweep.alpha0) {\n alpha0 = bB.m_sweep.alpha0;\n bA.m_sweep.advance(alpha0);\n } else if (bB.m_sweep.alpha0 < bA.m_sweep.alpha0) {\n alpha0 = bA.m_sweep.alpha0;\n bB.m_sweep.advance(alpha0);\n }\n\n _ASSERT && console.assert(alpha0 < 1.0);\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const sweepA = bA.m_sweep;\n const sweepB = bB.m_sweep;\n\n // Compute the time of impact in interval [0, minTOI]\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.sweepA.set(bA.m_sweep);\n input.sweepB.set(bB.m_sweep);\n input.tMax = 1.0;\n\n TimeOfImpact(output, input);\n\n // Beta is the fraction of the remaining portion of the [time?].\n const beta = output.t;\n if (output.state == TOIOutputState.e_touching) {\n alpha = math_min(alpha0 + (1.0 - alpha0) * beta, 1.0);\n } else {\n alpha = 1.0;\n }\n\n c.m_toi = alpha;\n c.m_toiFlag = true;\n }\n\n if (alpha < minAlpha) {\n // This is the minimum TOI found so far.\n minContact = c;\n minAlpha = alpha;\n }\n }\n\n if (minContact == null || 1.0 - 10.0 * EPSILON < minAlpha) {\n // No more TOI events. Done!\n world.m_stepComplete = true;\n break;\n }\n\n // Advance the bodies to the TOI.\n const fA = minContact.getFixtureA();\n const fB = minContact.getFixtureB();\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n backup1.set(bA.m_sweep);\n backup2.set(bB.m_sweep);\n\n bA.advance(minAlpha);\n bB.advance(minAlpha);\n\n // The TOI contact likely has some new contact points.\n minContact.update(world);\n minContact.m_toiFlag = false;\n ++minContact.m_toiCount;\n\n // Is the contact solid?\n if (minContact.isEnabled() == false || minContact.isTouching() == false) {\n // Restore the sweeps.\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\n bA.setAwake(true);\n bB.setAwake(true);\n\n // Build the island\n this.clear();\n this.addBody(bA);\n this.addBody(bB);\n this.addContact(minContact);\n\n bA.m_islandFlag = true;\n bB.m_islandFlag = true;\n minContact.m_islandFlag = true;\n\n // Get contacts on bodyA and bodyB.\n const bodies = [ bA, bB ];\n for (let i = 0; i < bodies.length; ++i) {\n const body = bodies[i];\n if (body.isDynamic()) {\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n // if (this.m_bodyCount == this.m_bodyCapacity) { break; }\n // if (this.m_contactCount == this.m_contactCapacity) { break; }\n\n const contact = ce.contact;\n\n // Has this contact already been added to the island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Only add if either is static, kinematic or bullet.\n const other = ce.other;\n if (other.isDynamic() && !body.isBullet() && !other.isBullet()) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n // Tentatively advance the body to the TOI.\n backup.set(other.m_sweep);\n if (other.m_islandFlag == false) {\n other.advance(minAlpha);\n }\n\n // Update the contact points\n contact.update(world);\n\n // Was the contact disabled by the user?\n // Are there contact points?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n other.m_sweep.set(backup);\n other.synchronizeTransform();\n continue;\n }\n\n // Add the contact to the island\n contact.m_islandFlag = true;\n this.addContact(contact);\n\n // Has the other body already been added to the island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // Add the other body to the island.\n other.m_islandFlag = true;\n\n if (!other.isStatic()) {\n other.setAwake(true);\n }\n\n this.addBody(other);\n }\n }\n }\n\n s_subStep.reset((1.0 - minAlpha) * step.dt);\n s_subStep.dtRatio = 1.0;\n s_subStep.positionIterations = 20;\n s_subStep.velocityIterations = step.velocityIterations;\n s_subStep.warmStarting = false;\n\n this.solveIslandTOI(s_subStep, bA, bB);\n\n // Reset island flags and synchronize broad-phase proxies.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.m_islandFlag = false;\n\n if (!body.isDynamic()) {\n continue;\n }\n\n body.synchronizeFixtures();\n\n // Invalidate all contact TOIs on this displaced body.\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n ce.contact.m_toiFlag = false;\n ce.contact.m_islandFlag = false;\n }\n }\n\n // Commit fixture proxy movements to the broad-phase so that new contacts\n // are created.\n // Also, some contacts can be destroyed.\n world.findNewContacts();\n\n if (world.m_subStepping) {\n world.m_stepComplete = false;\n break;\n }\n }\n }\n\n solveIslandTOI(subStep: TimeStep, toiA: Body, toiB: Body): void {\n\n // Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n matrix.copyVec2(body.c_position.c, body.m_sweep.c);\n body.c_position.a = body.m_sweep.a;\n matrix.copyVec2(body.c_velocity.v, body.m_linearVelocity);\n body.c_velocity.w = body.m_angularVelocity;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(subStep);\n }\n\n // Solve position constraints.\n for (let i = 0; i < subStep.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -1.5 * Settings.linearSlop;\n if (contactsOkay) {\n break;\n }\n }\n\n if (false) {\n // Is the new position really safe?\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const c = this.m_contacts[i];\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const input = new DistanceInput();\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.transformA.set(bA.getTransform());\n input.transformB.set(bB.getTransform());\n input.useRadii = false;\n\n const output = new DistanceOutput();\n const cache = new SimplexCache();\n Distance(output, cache, input);\n\n if (output.distance == 0 || cache.count == 3) {\n cache.count += 0;\n }\n }\n }\n\n // Leap of faith to new safe state.\n matrix.copyVec2(toiA.m_sweep.c0, toiA.c_position.c);\n toiA.m_sweep.a0 = toiA.c_position.a;\n matrix.copyVec2(toiB.m_sweep.c0, toiB.c_position.c);\n toiB.m_sweep.a0 = toiB.c_position.a;\n\n // No warm starting is needed for TOI events because warm\n // starting impulses were applied in the discrete solver.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(subStep);\n }\n\n // Solve velocity constraints.\n for (let i = 0; i < subStep.velocityIterations; ++i) {\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(subStep);\n }\n }\n\n // Don't store the TOI contact forces for warm starting\n // because they can be quite large.\n\n const h = subStep.dt;\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n\n // Sync bodies\n matrix.copyVec2(body.m_sweep.c, c);\n body.m_sweep.a = a;\n matrix.copyVec2(body.m_linearVelocity, v);\n body.m_angularVelocity = w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n }\n\n /** @internal */\n postSolveIsland(): void {\n for (let c = 0; c < this.m_contacts.length; ++c) {\n const contact = this.m_contacts[c];\n this.m_world.postSolve(contact, contact.m_impulse);\n }\n }\n}\n\n// @ts-ignore\nSolver.TimeStep = TimeStep;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 2-by-2 matrix. Stored in column-major order.\n */\nexport class Mat22 {\n ex: Vec2;\n ey: Vec2;\n\n constructor(a: number, b: number, c: number, d: number);\n constructor(a: { x: number; y: number }, b: { x: number; y: number });\n constructor();\n constructor(a?, b?, c?, d?) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec2.clone(a);\n this.ey = Vec2.clone(b);\n } else if (typeof a === \"number\") {\n this.ex = Vec2.neo(a, c);\n this.ey = Vec2.neo(b, d);\n } else {\n this.ex = Vec2.zero();\n this.ey = Vec2.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat22.isValid(o), \"Invalid Mat22!\", o);\n }\n\n set(a: Mat22): void;\n set(a: Vec2Value, b: Vec2Value): void;\n set(a: number, b: number, c: number, d: number): void;\n set(a, b?, c?, d?): void {\n if (typeof a === \"number\" && typeof b === \"number\" && typeof c === \"number\"\n && typeof d === \"number\") {\n this.ex.setNum(a, c);\n this.ey.setNum(b, d);\n\n } else if (typeof a === \"object\" && typeof b === \"object\") {\n this.ex.setVec2(a);\n this.ey.setVec2(b);\n\n } else if (typeof a === \"object\") {\n _ASSERT && Mat22.assert(a);\n this.ex.setVec2(a.ex);\n this.ey.setVec2(a.ey);\n\n } else {\n _ASSERT && console.assert(false);\n }\n }\n\n setIdentity(): void {\n this.ex.x = 1.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 1.0;\n }\n\n setZero(): void {\n this.ex.x = 0.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 0.0;\n }\n\n getInverse(): Mat22 {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const imx = new Mat22();\n imx.ex.x = det * d;\n imx.ey.x = -det * b;\n imx.ex.y = -det * c;\n imx.ey.y = det * a;\n return imx;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const w = Vec2.zero();\n w.x = det * (d * v.x - b * v.y);\n w.y = det * (a * v.y - c * v.x);\n return w;\n }\n\n /**\n * Multiply a matrix times a vector. If a rotation matrix is provided, then this\n * transforms the vector from one frame to another.\n */\n static mul(mx: Mat22, my: Mat22): Mat22;\n static mul(mx: Mat22, v: Vec2Value): Vec2;\n static mul(mx, v) {\n if (v && \"x\" in v && \"y\" in v) {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n }\n\n static mulMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n /**\n * Multiply a matrix transpose times a vector. If a rotation matrix is provided,\n * then this transforms the vector from one frame to another (inverse\n * transform).\n */\n static mulT(mx: Mat22, my: Mat22): Mat22;\n static mulT(mx: Mat22, v: Vec2Value): Vec2;\n static mulT(mx, v) {\n if (v && \"x\" in v && \"y\" in v) { // Vec2\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulTVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n }\n\n static mulTMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n static abs(mx: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n return new Mat22(Vec2.abs(mx.ex), Vec2.abs(mx.ey));\n }\n\n static add(mx1: Mat22, mx2: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx1);\n _ASSERT && Mat22.assert(mx2);\n return new Mat22(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey));\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\nimport { EPSILON } from \"../common/Math\";\n\n\n/** @internal */ const math_sqrt = Math.sqrt;\n\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const dist = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n\nexport enum ManifoldType {\n e_unset = -1,\n e_circles = 0,\n e_faceA = 1,\n e_faceB = 2\n}\n\nexport enum ContactFeatureType {\n e_unset = -1,\n e_vertex = 0,\n e_face = 1\n}\n\n/**\n * This is used for determining the state of contact points.\n */\n export enum PointState {\n /** Point does not exist */\n nullState = 0,\n /** Point was added in the update */\n addState = 1,\n /** Point persisted across the update */\n persistState = 2,\n /** Point was removed in the update */\n removeState = 3\n}\n\n/**\n * Used for computing contact manifolds.\n */\n export class ClipVertex {\n v = matrix.vec2(0, 0);\n id: ContactID = new ContactID();\n\n set(o: ClipVertex): void {\n matrix.copyVec2(this.v, o.v);\n this.id.set(o.id);\n }\n recycle() {\n matrix.zeroVec2(this.v);\n this.id.recycle();\n }\n}\n\n/**\n * A manifold for two touching convex shapes. Manifolds are created in `evaluate`\n * method of Contact subclasses.\n *\n * Supported manifold types are e_faceA or e_faceB for clip point versus plane\n * with radius and e_circles point versus point with radius.\n *\n * We store contacts in this way so that position correction can account for\n * movement, which is critical for continuous physics. All contact scenarios\n * must be expressed in one of these types. This structure is stored across time\n * steps, so we keep it small.\n */\nexport class Manifold {\n type: ManifoldType;\n\n /**\n * Usage depends on manifold type:\n * - circles: not used\n * - faceA: the normal on polygonA\n * - faceB: the normal on polygonB\n */\n localNormal = matrix.vec2(0, 0);\n\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleA\n * - faceA: the center of faceA\n * - faceB: the center of faceB\n */\n localPoint = matrix.vec2(0, 0);\n\n /** The points of contact */\n points: ManifoldPoint[] = [ new ManifoldPoint(), new ManifoldPoint() ];\n\n /** The number of manifold points */\n pointCount: number = 0;\n\n set(that: Manifold): void {\n this.type = that.type;\n matrix.copyVec2(this.localNormal, that.localNormal);\n matrix.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\n recycle(): void {\n this.type = ManifoldType.e_unset;\n matrix.zeroVec2(this.localNormal);\n matrix.zeroVec2(this.localPoint);\n this.pointCount = 0;\n this.points[0].recycle();\n this.points[1].recycle();\n }\n\n /**\n * Evaluate the manifold with supplied transforms. This assumes modest motion\n * from the original state. This does not change the point count, impulses, etc.\n * The radii must come from the shapes that generated the manifold.\n */\n getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold {\n if (this.pointCount == 0) {\n return wm;\n }\n\n wm = wm || new WorldManifold();\n\n wm.pointCount = this.pointCount;\n\n const normal = wm.normal;\n const points = wm.points;\n const separations = wm.separations;\n\n switch (this.type) {\n case ManifoldType.e_circles: {\n matrix.setVec2(normal, 1.0, 0.0);\n const manifoldPoint = this.points[0];\n matrix.transformVec2(pointA, xfA, this.localPoint);\n matrix.transformVec2(pointB, xfB, manifoldPoint.localPoint);\n matrix.subVec2(dist, pointB, pointA);\n const lengthSqr = matrix.lengthSqrVec2(dist);\n if (lengthSqr > EPSILON * EPSILON) {\n const length = math_sqrt(lengthSqr);\n matrix.scaleVec2(normal, 1 / length, dist);\n }\n matrix.combine2Vec2(cA, 1, pointA, radiusA, normal);\n matrix.combine2Vec2(cB, 1, pointB, -radiusB, normal);\n matrix.combine2Vec2(points[0], 0.5, cA, 0.5, cB);\n separations[0] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.localNormal);\n matrix.transformVec2(planePoint, xfA, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfB, manifoldPoint.localPoint);\n matrix.combine2Vec2(cA, 1, clipPoint, radiusA - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cB, 1, clipPoint, -radiusB, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n }\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.localNormal);\n matrix.transformVec2(planePoint, xfB, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfA, manifoldPoint.localPoint);\n matrix.combine2Vec2(cB, 1, clipPoint, radiusB - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cA, 1, clipPoint, -radiusA, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cA, cB), normal);\n }\n // Ensure normal points from A to B.\n matrix.negVec2(normal);\n break;\n }\n }\n\n return wm;\n }\n\n static clipSegmentToLine = clipSegmentToLine;\n static ClipVertex = ClipVertex;\n static getPointStates = getPointStates;\n static PointState = PointState;\n}\n\n/**\n * A manifold point is a contact point belonging to a contact manifold. It holds\n * details related to the geometry and dynamics of the contact points.\n *\n * This structure is stored across time steps, so we keep it small.\n *\n * Note: impulses are used for internal caching and may not provide reliable\n * contact forces, especially for high speed collisions.\n */\nexport class ManifoldPoint {\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleB\n * - faceA: the local center of circleB or the clip point of polygonB\n * - faceB: the clip point of polygonA\n */\n localPoint = matrix.vec2(0, 0);\n /**\n * The non-penetration impulse\n */\n normalImpulse = 0;\n /**\n * The friction impulse\n */\n tangentImpulse = 0;\n /**\n * Uniquely identifies a contact point between two shapes to facilitate warm starting\n */\n readonly id = new ContactID();\n\n set(that: ManifoldPoint): void {\n matrix.copyVec2(this.localPoint, that.localPoint);\n this.normalImpulse = that.normalImpulse;\n this.tangentImpulse = that.tangentImpulse;\n this.id.set(that.id);\n }\n\n recycle(): void {\n matrix.zeroVec2(this.localPoint);\n this.normalImpulse = 0;\n this.tangentImpulse = 0;\n this.id.recycle();\n }\n}\n\n/**\n * Contact ids to facilitate warm starting.\n * \n * ContactFeature: The features that intersect to form the contact point.\n */\nexport class ContactID {\n\n /**\n * Used to quickly compare contact ids.\n */\n key = -1;\n\n /** ContactFeature index on shapeA */\n indexA = -1;\n\n /** ContactFeature index on shapeB */\n indexB = -1;\n\n /** ContactFeature type on shapeA */\n typeA = ContactFeatureType.e_unset;\n\n /** ContactFeature type on shapeB */\n typeB = ContactFeatureType.e_unset;\n\n setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void {\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\n set(that: ContactID): void {\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\n swapFeatures(): void {\n const indexA = this.indexA;\n const indexB = this.indexB;\n const typeA = this.typeA;\n const 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\n recycle(): void {\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}\n\n/**\n * This is used to compute the current state of a contact manifold.\n */\nexport class WorldManifold {\n /** World vector pointing from A to B */\n normal = matrix.vec2(0, 0);\n\n /** World contact point (point of intersection) */\n points = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints]\n\n /** A negative value indicates overlap, in meters */\n separations = [0, 0]; // [maxManifoldPoints]\n\n /** The number of manifold points */\n pointCount = 0;\n\n recycle() {\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.points[0]);\n matrix.zeroVec2(this.points[1]);\n this.separations[0] = 0;\n this.separations[1] = 0;\n this.pointCount = 0;\n }\n}\n\n/**\n * Compute the point states given two manifolds. The states pertain to the\n * transition from manifold1 to manifold2. So state1 is either persist or remove\n * while state2 is either add or persist.\n */\nexport function getPointStates(\n state1: PointState[],\n state2: PointState[],\n manifold1: Manifold,\n manifold2: Manifold\n): void {\n // state1, state2: PointState[Settings.maxManifoldPoints]\n\n // for (var i = 0; i < Settings.maxManifoldPoints; ++i) {\n // state1[i] = PointState.nullState;\n // state2[i] = PointState.nullState;\n // }\n\n // Detect persists and removes.\n for (let i = 0; i < manifold1.pointCount; ++i) {\n const id = manifold1.points[i].id;\n\n state1[i] = PointState.removeState;\n\n for (let 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\n // Detect persists and adds.\n for (let i = 0; i < manifold2.pointCount; ++i) {\n const id = manifold2.points[i].id;\n\n state2[i] = PointState.addState;\n\n for (let 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}\n\n/**\n * Clipping for contact manifolds. Sutherland-Hodgman clipping.\n */\nexport function clipSegmentToLine(\n vOut: ClipVertex[],\n vIn: ClipVertex[],\n normal: Vec2Value,\n offset: number,\n vertexIndexA: number\n): number {\n // Start with no output points\n let numOut = 0;\n\n // Calculate the distance of end points to the line\n const distance0 = matrix.dotVec2(normal, vIn[0].v) - offset;\n const distance1 = matrix.dotVec2(normal, vIn[1].v) - offset;\n\n // If the points are behind the plane\n if (distance0 <= 0.0)\n vOut[numOut++].set(vIn[0]);\n if (distance1 <= 0.0)\n vOut[numOut++].set(vIn[1]);\n\n // If the points are on different sides of the plane\n if (distance0 * distance1 < 0.0) {\n // Find intersection point of edge and plane\n const interp = distance0 / (distance0 - distance1);\n matrix.combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v);\n\n // VertexA is hitting edgeB.\n vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face);\n ++numOut;\n }\n\n return numOut;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { ShapeType } from \"../collision/Shape\";\nimport { clamp } from \"../common/Math\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Mat22 } from \"../common/Mat22\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Manifold, ManifoldType, WorldManifold } from \"../collision/Manifold\";\nimport { testOverlap } from \"../collision/Distance\";\nimport { Fixture } from \"./Fixture\";\nimport { Body } from \"./Body\";\nimport { ContactImpulse, TimeStep } from \"./Solver\";\nimport { Pool } from \"../util/Pool\";\nimport { getTransform } from \"./Position\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n// Solver debugging is normally disabled because the block solver sometimes has to deal with a poorly conditioned effective mass matrix.\n/** @internal */ const DEBUG_SOLVER = false;\n\n/** @internal */ const contactPool = new Pool({\n create() {\n return new Contact();\n },\n release(contact: Contact) {\n contact.recycle();\n }\n});\n\n/** @internal */ const oldManifold = new Manifold();\n\n/** @internal */ const worldManifold = new WorldManifold();\n\n/**\n * A contact edge is used to connect bodies and contacts together in a contact\n * graph where each body is a node and each contact is an edge. A contact edge\n * belongs to a doubly linked list maintained in each attached body. Each\n * contact has two contact nodes, one for each attached body.\n */\nexport class ContactEdge {\n contact: Contact;\n prev: ContactEdge | null = null;\n next: ContactEdge | null = null;\n other: Body | null = null;\n constructor(contact: Contact) {\n this.contact = contact;\n }\n\n /** @internal */\n recycle() {\n this.prev = null;\n this.next = null;\n this.other = null;\n }\n}\n\nexport type EvaluateFunction = (\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number\n) => void;\n\n/**\n * Friction mixing law. The idea is to allow either fixture to drive the\n * friction to zero. For example, anything slides on ice.\n */\nexport function mixFriction(friction1: number, friction2: number): number {\n return math_sqrt(friction1 * friction2);\n}\n\n/**\n * Restitution mixing law. The idea is allow for anything to bounce off an\n * inelastic surface. For example, a superball bounces on anything.\n */\nexport function mixRestitution(restitution1: number, restitution2: number): number {\n return restitution1 > restitution2 ? restitution1 : restitution2;\n}\n\n// TODO: move this to Settings?\n/** @internal */ const s_registers = [];\n\n// TODO: merge with ManifoldPoint?\nexport class VelocityConstraintPoint {\n rA = matrix.vec2(0, 0);\n rB = matrix.vec2(0, 0);\n normalImpulse = 0;\n tangentImpulse = 0;\n normalMass = 0;\n tangentMass = 0;\n velocityBias = 0;\n\n recycle() {\n matrix.zeroVec2(this.rA);\n matrix.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}\n\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const vA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const vB = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const rA = matrix.vec2(0, 0);\n/** @internal */ const rB = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const point = matrix.vec2(0, 0);\n/** @internal */ const dv = matrix.vec2(0, 0);\n/** @internal */ const dv1 = matrix.vec2(0, 0);\n/** @internal */ const dv2 = matrix.vec2(0, 0);\n/** @internal */ const b = matrix.vec2(0, 0);\n/** @internal */ const a = matrix.vec2(0, 0);\n/** @internal */ const x = matrix.vec2(0, 0);\n/** @internal */ const d = matrix.vec2(0, 0);\n/** @internal */ const P1 = matrix.vec2(0, 0);\n/** @internal */ const P2 = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * The class manages contact between two shapes. A contact exists for each\n * overlapping AABB in the broad-phase (except if filtered). Therefore a contact\n * object may exist that has no contact points.\n */\nexport class Contact {\n // Nodes for connecting bodies.\n /** @internal */ m_nodeA = new ContactEdge(this);\n /** @internal */ m_nodeB = new ContactEdge(this);\n /** @internal */ m_fixtureA: Fixture | null = null;\n /** @internal */ m_fixtureB: Fixture | null = null;\n /** @internal */ m_indexA = -1;\n /** @internal */ m_indexB = -1;\n /** @internal */ m_evaluateFcn: EvaluateFunction | null = null;\n /** @internal */ m_manifold: Manifold = new Manifold();\n /** @internal */ m_prev: Contact | null = null;\n /** @internal */ m_next: Contact | null = null;\n /** @internal */ m_toi = 1.0;\n /** @internal */ m_toiCount = 0;\n // This contact has a valid TOI in m_toi\n /** @internal */ m_toiFlag = false;\n /** @internal */ m_friction = 0.0;\n /** @internal */ m_restitution = 0.0;\n /** @internal */ m_tangentSpeed = 0.0;\n /** @internal This contact can be disabled (by user) */\n m_enabledFlag = true;\n /** @internal Used when crawling contact graph when forming islands. */\n m_islandFlag = false;\n /** @internal Set when the shapes are touching. */\n m_touchingFlag = false;\n /** @internal This contact needs filtering because a fixture filter was changed. */\n m_filterFlag = false;\n /** @internal This bullet contact had a TOI event */\n m_bulletHitFlag = false;\n\n /** @internal Contact reporting impulse object cache */\n m_impulse: ContactImpulse = new ContactImpulse(this);\n\n // VelocityConstraint\n /** @internal */ v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; // [maxManifoldPoints];\n /** @internal */ v_normal = matrix.vec2(0, 0);\n /** @internal */ v_normalMass: Mat22 = new Mat22();\n /** @internal */ v_K: Mat22 = new Mat22();\n /** @internal */ v_pointCount = 0;\n /** @internal */ v_tangentSpeed = 0;\n /** @internal */ v_friction = 0;\n /** @internal */ v_restitution = 0;\n /** @internal */ v_invMassA = 0;\n /** @internal */ v_invMassB = 0;\n /** @internal */ v_invIA = 0;\n /** @internal */ v_invIB = 0;\n\n // PositionConstraint\n /** @internal */ p_localPoints = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints];\n /** @internal */ p_localNormal = matrix.vec2(0, 0);\n /** @internal */ p_localPoint = matrix.vec2(0, 0);\n /** @internal */ p_localCenterA = matrix.vec2(0, 0);\n /** @internal */ p_localCenterB = matrix.vec2(0, 0);\n /** @internal */ p_type = ManifoldType.e_unset;\n /** @internal */ p_radiusA = 0;\n /** @internal */ p_radiusB = 0;\n /** @internal */ p_pointCount = 0;\n /** @internal */ p_invMassA = 0;\n /** @internal */ p_invMassB = 0;\n /** @internal */ p_invIA = 0;\n /** @internal */ p_invIB = 0;\n\n /** @internal */ \n initialize(fA: Fixture, indexA: number, fB: Fixture, indexB: number, evaluateFcn: EvaluateFunction) {\n this.m_fixtureA = fA;\n this.m_fixtureB = fB;\n\n this.m_indexA = indexA;\n this.m_indexB = indexB;\n\n this.m_evaluateFcn = evaluateFcn;\n\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\n /** @internal */ \n recycle() {\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\n this.m_impulse.recycle();\n\n // VelocityConstraint\n for(const point of this.v_points) {\n point.recycle();\n }\n matrix.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\n // PositionConstraint\n for(const point of this.p_localPoints) {\n matrix.zeroVec2(point);\n }\n matrix.zeroVec2(this.p_localNormal);\n matrix.zeroVec2(this.p_localPoint);\n matrix.zeroVec2(this.p_localCenterA);\n matrix.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\n initConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n const manifold = this.m_manifold;\n\n const pointCount = manifold.pointCount;\n _ASSERT && console.assert(pointCount > 0);\n\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\n this.v_friction = this.m_friction;\n this.v_restitution = this.m_restitution;\n this.v_tangentSpeed = this.m_tangentSpeed;\n\n this.v_pointCount = pointCount;\n\n this.v_K.setZero();\n this.v_normalMass.setZero();\n\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 matrix.copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter);\n matrix.copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter);\n\n this.p_radiusA = shapeA.m_radius;\n this.p_radiusB = shapeB.m_radius;\n\n this.p_type = manifold.type;\n matrix.copyVec2(this.p_localNormal, manifold.localNormal);\n matrix.copyVec2(this.p_localPoint, manifold.localPoint);\n this.p_pointCount = pointCount;\n\n for (let j = 0; j < Settings.maxManifoldPoints; ++j) {\n this.v_points[j].recycle();\n matrix.zeroVec2(this.p_localPoints[j]);\n }\n\n for (let j = 0; j < pointCount; ++j) {\n const cp = manifold.points[j];\n const 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 matrix.copyVec2(this.p_localPoints[j], cp.localPoint);\n }\n }\n\n /**\n * Get the contact manifold. Do not modify the manifold unless you understand\n * the internals of the library.\n */\n getManifold(): Manifold {\n return this.m_manifold;\n }\n\n /**\n * Get the world manifold.\n */\n getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n return this.m_manifold.getWorldManifold(\n worldManifold,\n bodyA.getTransform(), shapeA.m_radius,\n bodyB.getTransform(), shapeB.m_radius\n );\n }\n\n /**\n * Enable/disable this contact. This can be used inside the pre-solve contact\n * listener. The contact is only disabled for the current time step (or sub-step\n * in continuous collisions).\n */\n setEnabled(flag: boolean): void {\n this.m_enabledFlag = !!flag;\n }\n\n /**\n * Has this contact been disabled?\n */\n isEnabled(): boolean {\n return this.m_enabledFlag;\n }\n\n /**\n * Is this contact touching?\n */\n isTouching(): boolean {\n return this.m_touchingFlag;\n }\n\n /**\n * Get the next contact in the world's contact list.\n */\n getNext(): Contact | null {\n return this.m_next;\n }\n\n /**\n * Get fixture A in this contact.\n */\n getFixtureA(): Fixture {\n return this.m_fixtureA;\n }\n\n /**\n * Get fixture B in this contact.\n */\n getFixtureB(): Fixture {\n return this.m_fixtureB;\n }\n\n /**\n * Get the child primitive index for fixture A.\n */\n getChildIndexA(): number {\n return this.m_indexA;\n }\n\n /**\n * Get the child primitive index for fixture B.\n */\n getChildIndexB(): number {\n return this.m_indexB;\n }\n\n /**\n * Flag this contact for filtering. Filtering will occur the next time step.\n */\n flagForFiltering(): void {\n this.m_filterFlag = true;\n }\n\n /**\n * Override the default friction mixture. You can call this in\n * \"pre-solve\" callback. This value persists until set or reset.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the friction.\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Reset the friction mixture to the default value.\n */\n resetFriction(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction);\n }\n\n /**\n * Override the default restitution mixture. You can call this in\n * \"pre-solve\" callback. The value persists until you set or reset.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Get the restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Reset the restitution to the default value.\n */\n resetRestitution(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution);\n }\n\n /**\n * Set the desired tangent speed for a conveyor belt behavior. In meters per\n * second.\n */\n setTangentSpeed(speed: number): void {\n this.m_tangentSpeed = speed;\n }\n\n /**\n * Get the desired tangent speed. In meters per second.\n */\n getTangentSpeed(): number {\n return this.m_tangentSpeed;\n }\n\n /**\n * Called by Update method, and implemented by subclasses.\n */\n evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_evaluateFcn(manifold, xfA, fixtureA, this.m_indexA, xfB, fixtureB, this.m_indexB);\n }\n\n /**\n * Updates the contact manifold and touching status.\n *\n * Note: do not assume the fixture AABBs are overlapping or are valid.\n *\n * @param listener.beginContact\n * @param listener.endContact\n * @param listener.preSolve\n */\n update(listener?: {\n beginContact(contact: Contact): void,\n endContact(contact: Contact): void,\n preSolve(contact: Contact, oldManifold: Manifold): void\n }): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n // Re-enable this contact.\n this.m_enabledFlag = true;\n\n let touching = false;\n const wasTouching = this.m_touchingFlag;\n\n const sensorA = fixtureA.m_isSensor;\n const sensorB = fixtureB.m_isSensor;\n const sensor = sensorA || sensorB;\n\n const xfA = bodyA.m_xf;\n const xfB = bodyB.m_xf;\n\n // Is this contact a sensor?\n if (sensor) {\n touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB);\n\n // Sensors don't generate manifolds.\n this.m_manifold.pointCount = 0;\n } else {\n\n oldManifold.recycle();\n oldManifold.set(this.m_manifold);\n this.m_manifold.recycle();\n\n this.evaluate(this.m_manifold, xfA, xfB);\n touching = this.m_manifold.pointCount > 0;\n\n // Match old contact ids to new contact ids and copy the\n // stored impulses to warm start the solver.\n for (let i = 0; i < this.m_manifold.pointCount; ++i) {\n const nmp = this.m_manifold.points[i];\n nmp.normalImpulse = 0.0;\n nmp.tangentImpulse = 0.0;\n\n for (let j = 0; j < oldManifold.pointCount; ++j) {\n const 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\n if (touching !== wasTouching) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n }\n\n this.m_touchingFlag = touching;\n\n const hasListener = typeof listener === \"object\" && listener !== null;\n\n if (!wasTouching && touching && hasListener) {\n listener.beginContact(this);\n }\n\n if (wasTouching && !touching && hasListener) {\n listener.endContact(this);\n }\n\n if (!sensor && touching && hasListener && oldManifold) {\n listener.preSolve(this, oldManifold);\n }\n }\n\n solvePositionConstraint(step: TimeStep): number {\n return this._solvePositionConstraint(step, null, null);\n }\n\n solvePositionConstraintTOI(step: TimeStep, toiA: Body, toiB: Body): number {\n return this._solvePositionConstraint(step, toiA, toiB);\n }\n\n private _solvePositionConstraint(step: TimeStep, toiA: Body | null, toiB: Body | null): number {\n const toi = toiA !== null && toiB !== null ? true : false;\n let minSeparation = 0.0;\n\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return minSeparation;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return minSeparation;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n let mA = 0.0;\n let iA = 0.0;\n if (!toi || (bodyA === toiA || bodyA === toiB)) {\n mA = this.p_invMassA;\n iA = this.p_invIA;\n }\n\n let mB = 0.0;\n let iB = 0.0;\n if (!toi || (bodyB === toiA || bodyB === toiB)) {\n mB = this.p_invMassB;\n iB = this.p_invIB;\n }\n\n matrix.copyVec2(cA, positionA.c);\n let aA = positionA.a;\n\n matrix.copyVec2(cB, positionB.c);\n let aB = positionB.a;\n\n // Solve normal constraints\n for (let j = 0; j < this.p_pointCount; ++j) {\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n // PositionSolverManifold\n let separation: number;\n switch (this.p_type) {\n case ManifoldType.e_circles: {\n matrix.transformVec2(pointA, xfA, this.p_localPoint);\n matrix.transformVec2(pointB, xfB, this.p_localPoints[0]);\n matrix.subVec2(normal, pointB, pointA);\n matrix.normalizeVec2(normal);\n\n matrix.combine2Vec2(point, 0.5, pointA, 0.5, pointB);\n separation = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal) - this.p_radiusA - this.p_radiusB;\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfA, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfB, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfB, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfA, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n\n // Ensure normal points from A to B\n matrix.negVec2(normal);\n break;\n }\n // todo: what should we do here?\n default: {\n return minSeparation;\n }\n }\n\n matrix.subVec2(rA, point, cA);\n matrix.subVec2(rB, point, cB);\n\n // Track max constraint error.\n minSeparation = math_min(minSeparation, separation);\n\n const baumgarte = toi ? Settings.toiBaugarte : Settings.baumgarte;\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n // Prevent large corrections and allow slop.\n const C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0.0);\n\n // Compute the effective mass.\n const rnA = matrix.crossVec2Vec2(rA, normal);\n const rnB = matrix.crossVec2Vec2(rB, normal);\n const K = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n // Compute normal impulse\n const impulse = K > 0.0 ? -C / K : 0.0;\n\n matrix.scaleVec2(P, impulse, normal);\n\n matrix.minusScaleVec2(cA, mA, P);\n aA -= iA * matrix.crossVec2Vec2(rA, P);\n\n matrix.plusScaleVec2(cB, mB, P);\n aB += iB * matrix.crossVec2Vec2(rB, P);\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n\n return minSeparation;\n }\n\n initVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const radiusA = this.p_radiusA;\n const radiusB = this.p_radiusB;\n const manifold = this.m_manifold;\n\n const mA = this.v_invMassA;\n const mB = this.v_invMassB;\n const iA = this.v_invIA;\n const iB = this.v_invIB;\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n matrix.copyVec2(cA, positionA.c);\n const aA = positionA.a;\n matrix.copyVec2(vA, velocityA.v);\n const wA = velocityA.w;\n\n matrix.copyVec2(cB, positionB.c);\n const aB = positionB.a;\n matrix.copyVec2(vB, velocityB.v);\n const wB = velocityB.w;\n\n _ASSERT && console.assert(manifold.pointCount > 0);\n\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n worldManifold.recycle();\n manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB);\n\n matrix.copyVec2(this.v_normal, worldManifold.normal);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n const wmp = worldManifold.points[j];\n\n matrix.subVec2(vcp.rA, wmp, cA);\n matrix.subVec2(vcp.rB, wmp, cB);\n\n const rnA = matrix.crossVec2Vec2(vcp.rA, this.v_normal);\n const rnB = matrix.crossVec2Vec2(vcp.rB, this.v_normal);\n\n const kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n vcp.normalMass = kNormal > 0.0 ? 1.0 / kNormal : 0.0;\n\n matrix.crossVec2Num(tangent, this.v_normal, 1.0);\n\n const rtA = matrix.crossVec2Vec2(vcp.rA, tangent);\n const rtB = matrix.crossVec2Vec2(vcp.rB, tangent);\n\n const kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB;\n\n vcp.tangentMass = kTangent > 0.0 ? 1.0 / kTangent : 0.0;\n\n // Setup a velocity bias for restitution.\n vcp.velocityBias = 0.0;\n let vRel = 0;\n vRel += matrix.dotVec2(this.v_normal, vB);\n vRel += matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wB, vcp.rB));\n vRel -= matrix.dotVec2(this.v_normal, vA);\n vRel -= matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wA, vcp.rA));\n if (vRel < -Settings.velocityThreshold) {\n vcp.velocityBias = -this.v_restitution * vRel;\n }\n }\n\n // If we have two points, then prepare the block solver.\n if (this.v_pointCount == 2 && step.blockSolve) {\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n const rn1A = matrix.crossVec2Vec2(vcp1.rA, this.v_normal);\n const rn1B = matrix.crossVec2Vec2(vcp1.rB, this.v_normal);\n const rn2A = matrix.crossVec2Vec2(vcp2.rA, this.v_normal);\n const rn2B = matrix.crossVec2Vec2(vcp2.rB, this.v_normal);\n\n const k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B;\n const k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B;\n const k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B;\n\n // Ensure a reasonable condition number.\n const k_maxConditionNumber = 1000.0;\n if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) {\n // K is safe to invert.\n this.v_K.ex.setNum(k11, k12);\n this.v_K.ey.setNum(k12, k22);\n // this.v_normalMass.set(this.v_K.getInverse());\n const a = this.v_K.ex.x;\n const b = this.v_K.ey.x;\n const c = this.v_K.ex.y;\n const d = this.v_K.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n this.v_normalMass.ex.x = det * d;\n this.v_normalMass.ey.x = -det * b;\n this.v_normalMass.ex.y = -det * c;\n this.v_normalMass.ey.y = det * a;\n\n } else {\n // The constraints are redundant, just use one.\n // TODO_ERIN use deepest?\n this.v_pointCount = 1;\n }\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n warmStartConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n matrix.combine2Vec2(P, vcp.normalImpulse, normal, vcp.tangentImpulse, tangent);\n\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n matrix.minusScaleVec2(vA, mA, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n matrix.plusScaleVec2(vB, mB, P);\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n storeConstraintImpulses(step: TimeStep): void {\n const manifold = this.m_manifold;\n for (let 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\n solveVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const positionA = bodyA.c_position;\n\n const velocityB = bodyB.c_velocity;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n const friction = this.v_friction;\n\n _ASSERT && console.assert(this.v_pointCount == 1 || this.v_pointCount == 2);\n\n // Solve tangent constraints first because non-penetration is more important\n // than friction.\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute tangent force\n const vt = matrix.dotVec2(dv, tangent) - this.v_tangentSpeed;\n let lambda = vcp.tangentMass * (-vt);\n\n // Clamp the accumulated force\n const maxFriction = friction * vcp.normalImpulse;\n const newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction);\n lambda = newImpulse - vcp.tangentImpulse;\n vcp.tangentImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, tangent);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n\n // Solve normal constraints\n if (this.v_pointCount == 1 || step.blockSolve == false) {\n for (let i = 0; i < this.v_pointCount; ++i) {\n const vcp = this.v_points[i]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute normal impulse\n const vn = matrix.dotVec2(dv, normal);\n let lambda = -vcp.normalMass * (vn - vcp.velocityBias);\n\n // Clamp the accumulated impulse\n const newImpulse = math_max(vcp.normalImpulse + lambda, 0.0);\n lambda = newImpulse - vcp.normalImpulse;\n vcp.normalImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, normal);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n } else {\n // Block solver developed in collaboration with Dirk Gregorius (back in\n // 01/07 on Box2D_Lite).\n // Build the mini LCP for this contact patch\n //\n // vn = A * x + b, vn >= 0, x >= 0 and vn_i * x_i = 0 with i = 1..2\n //\n // A = J * W * JT and J = ( -n, -r1 x n, n, r2 x n )\n // b = vn0 - velocityBias\n //\n // The system is solved using the \"Total enumeration method\" (s. Murty).\n // The complementary constraint vn_i * x_i\n // implies that we must have in any solution either vn_i = 0 or x_i = 0.\n // So for the 2D contact problem the cases\n // vn1 = 0 and vn2 = 0, x1 = 0 and x2 = 0, x1 = 0 and vn2 = 0, x2 = 0 and\n // vn1 = 0 need to be tested. The first valid\n // solution that satisfies the problem is chosen.\n //\n // In order to account of the accumulated impulse 'a' (because of the\n // iterative nature of the solver which only requires\n // that the accumulated impulse is clamped and not the incremental\n // impulse) we change the impulse variable (x_i).\n //\n // Substitute:\n //\n // x = a + d\n //\n // a := old total impulse\n // x := new total impulse\n // d := incremental impulse\n //\n // For the current iteration we extend the formula for the incremental\n // impulse\n // to compute the new total impulse:\n //\n // vn = A * d + b\n // = A * (x - a) + b\n // = A * x + b - A * a\n // = A * x + b'\n // b' = b - A * a;\n\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n matrix.setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse);\n _ASSERT && console.assert(a.x >= 0.0 && a.y >= 0.0);\n\n // Relative velocity at contact\n // let dv1 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp1.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp1.rA));\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // let dv2 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp2.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp2.rA));\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n let vn1 = matrix.dotVec2(dv1, normal);\n let vn2 = matrix.dotVec2(dv2, normal);\n\n matrix.setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias);\n\n // Compute b'\n // b.sub(Mat22.mulVec2(this.v_K, a));\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\n const k_errorTol = 1e-3;\n // NOT_USED(k_errorTol);\n\n while (true) {\n //\n // Case 1: vn = 0\n //\n // 0 = A * x + b'\n //\n // Solve for x:\n //\n // x = - inv(A) * b'\n //\n // const x = Mat22.mulVec2(this.v_normalMass, b).neg();\n matrix.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\n if (x.x >= 0.0 && x.y >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 2: vn1 = 0 and x2 = 0\n //\n // 0 = a11 * x1 + a12 * 0 + b1'\n // vn2 = a21 * x1 + a22 * 0 + b2'\n //\n x.x = -vcp1.normalMass * b.x;\n x.y = 0.0;\n vn1 = 0.0;\n vn2 = this.v_K.ex.y * x.x + b.y;\n\n if (x.x >= 0.0 && vn2 >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 3: vn2 = 0 and x1 = 0\n //\n // vn1 = a11 * 0 + a12 * x2 + b1'\n // 0 = a21 * 0 + a22 * x2 + b2'\n //\n x.x = 0.0;\n x.y = -vcp2.normalMass * b.y;\n vn1 = this.v_K.ey.x * x.y + b.x;\n vn2 = 0.0;\n\n if (x.y >= 0.0 && vn1 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 4: x1 = 0 and x2 = 0\n //\n // vn1 = b1\n // vn2 = b2;\n //\n x.x = 0.0;\n x.y = 0.0;\n vn1 = b.x;\n vn2 = b.y;\n\n if (vn1 >= 0.0 && vn2 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n break;\n }\n\n // No solution, give up. This is hit sometimes, but it doesn't seem to\n // matter.\n break;\n }\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n /** @internal */\n static addType(type1: ShapeType, type2: ShapeType, callback: EvaluateFunction): void {\n s_registers[type1] = s_registers[type1] || {};\n s_registers[type1][type2] = callback;\n }\n\n /** @internal */\n static create(fixtureA: Fixture, indexA: number, fixtureB: Fixture, indexB: number): Contact | null {\n const typeA = fixtureA.m_shape.m_type;\n const typeB = fixtureB.m_shape.m_type;\n\n const contact = contactPool.allocate();\n let 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\n // Contact creation may swap fixtures.\n fixtureA = contact.m_fixtureA;\n fixtureB = contact.m_fixtureB;\n indexA = contact.getChildIndexA();\n indexB = contact.getChildIndexB();\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n\n // Connect to body A\n contact.m_nodeA.contact = contact;\n contact.m_nodeA.other = bodyB;\n\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\n // Connect to body B\n contact.m_nodeB.contact = contact;\n contact.m_nodeB.other = bodyA;\n\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\n // Wake up the bodies\n if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n return contact;\n }\n\n /** @internal */\n static destroy(contact: Contact, listener: { endContact: (contact: Contact) => void }): void {\n const fixtureA = contact.m_fixtureA;\n const fixtureB = contact.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n if (contact.isTouching()) {\n listener.endContact(contact);\n }\n\n // Remove from body 1\n if (contact.m_nodeA.prev) {\n contact.m_nodeA.prev.next = contact.m_nodeA.next;\n }\n\n if (contact.m_nodeA.next) {\n contact.m_nodeA.next.prev = contact.m_nodeA.prev;\n }\n\n if (contact.m_nodeA == bodyA.m_contactList) {\n bodyA.m_contactList = contact.m_nodeA.next;\n }\n\n // Remove from body 2\n if (contact.m_nodeB.prev) {\n contact.m_nodeB.prev.next = contact.m_nodeB.next;\n }\n\n if (contact.m_nodeB.next) {\n contact.m_nodeB.next.prev = contact.m_nodeB.prev;\n }\n\n if (contact.m_nodeB == bodyB.m_contactList) {\n bodyB.m_contactList = contact.m_nodeB.next;\n }\n\n if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n // const typeA = fixtureA.getType();\n // const typeB = fixtureB.getType();\n\n // const destroyFcn = s_registers[typeA][typeB].destroyFcn;\n // if (typeof destroyFcn === 'function') {\n // destroyFcn(contact);\n // }\n\n contactPool.release(contact);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { Solver, ContactImpulse, TimeStep } from \"./Solver\";\nimport { Body, BodyDef } from \"./Body\";\nimport { Joint } from \"./Joint\";\nimport { Contact } from \"./Contact\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Fixture, FixtureProxy } from \"./Fixture\";\nimport { Manifold } from \"../collision/Manifold\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface WorldDef {\n /** [default: { x : 0, y : 0}] */\n gravity?: Vec2Value;\n\n /** [default: true] */\n allowSleep?: boolean;\n\n /** [default: true] */\n warmStarting?: boolean;\n\n /** [default: true] */\n continuousPhysics?: boolean;\n\n /** [default: false] */\n subStepping?: boolean;\n\n /** [default: true] */\n blockSolve?: boolean;\n\n /** @internal [8] For the velocity constraint solver. */\n velocityIterations?: number;\n\n /** @internal [3] For the position constraint solver. */\n positionIterations?: number;\n}\n\n/** @internal */ const DEFAULTS: WorldDef = {\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};\n\n/**\n * Callback function for ray casts, see {@link World.rayCast}.\n *\n * Called for each fixture found in the query.\n * The returned value replaces the ray-cast input maxFraction.\n * You control how the ray cast proceeds by returning a numeric/float value.\n * \n * - `0` to terminate the ray cast\n * - `fraction` to clip the ray cast at current point\n * - `1` don't clip the ray and continue\n * - `-1` (or anything else) to continue\n *\n * @param fixture The fixture hit by the ray\n * @param point The point of initial intersection\n * @param normal The normal vector at the point of intersection\n * @param fraction The fraction along the ray at the point of intersection\n *\n * @returns A number to update the maxFraction\n */\nexport type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number;\n\n/**\n * Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\nexport type WorldAABBQueryCallback = (fixture: Fixture) => boolean;\n\nexport class World {\n /** @internal */ m_solver: Solver;\n /** @internal */ m_broadPhase: BroadPhase;\n /** @internal */ m_contactList: Contact | null;\n /** @internal */ m_contactCount: number;\n /** @internal */ m_bodyList: Body | null;\n /** @internal */ m_bodyCount: number;\n /** @internal */ m_jointList: Joint | null;\n /** @internal */ m_jointCount: number;\n /** @internal */ m_stepComplete: boolean;\n /** @internal */ m_allowSleep: boolean;\n /** @internal */ m_gravity: Vec2;\n /** @internal */ m_clearForces: boolean;\n /** @internal */ m_newFixture: boolean;\n /** @internal */ m_locked: boolean;\n /** @internal */ m_warmStarting: boolean;\n /** @internal */ m_continuousPhysics: boolean;\n /** @internal */ m_subStepping: boolean;\n /** @internal */ m_blockSolve: boolean;\n /** @internal */ m_velocityIterations: number;\n /** @internal */ m_positionIterations: number;\n /** @internal */ m_t: number;\n\n // TODO\n /** @internal */ _listeners: {\n [key: string]: any[]\n };\n\n /**\n * @param def World definition or gravity vector.\n */\n constructor(def?: WorldDef | Vec2 | null) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof World)) {\n return new World(def);\n }\n\n this.s_step = new TimeStep();\n\n\n if (!def) {\n def = {};\n } else if (Vec2.isValid(def)) {\n def = { gravity: def as Vec2 };\n }\n\n def = options(def, DEFAULTS) as WorldDef;\n\n this.m_solver = new Solver(this);\n\n this.m_broadPhase = new BroadPhase();\n\n this.m_contactList = null;\n this.m_contactCount = 0;\n\n this.m_bodyList = null;\n this.m_bodyCount = 0;\n\n this.m_jointList = null;\n this.m_jointCount = 0;\n\n this.m_stepComplete = true;\n\n this.m_allowSleep = def.allowSleep;\n this.m_gravity = Vec2.clone(def.gravity);\n\n this.m_clearForces = true;\n this.m_newFixture = false;\n this.m_locked = false;\n\n // These are for debugging the solver.\n this.m_warmStarting = def.warmStarting;\n this.m_continuousPhysics = def.continuousPhysics;\n this.m_subStepping = def.subStepping;\n\n this.m_blockSolve = def.blockSolve;\n this.m_velocityIterations = def.velocityIterations;\n this.m_positionIterations = def.positionIterations;\n\n this.m_t = 0;\n }\n\n /** @internal */\n _serialize(): object {\n const bodies = [];\n const joints = [];\n\n for (let b = this.getBodyList(); b; b = b.getNext()) {\n bodies.push(b);\n }\n\n for (let j = this.getJointList(); j; j = j.getNext()) {\n // @ts-ignore\n if (typeof j._serialize === \"function\") {\n joints.push(j);\n }\n }\n\n return {\n gravity: this.m_gravity,\n bodies,\n joints,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, context: any, restore: any): World {\n if (!data) {\n return new World();\n }\n\n const world = new World(data.gravity);\n\n if (data.bodies) {\n for (let i = data.bodies.length - 1; i >= 0; i -= 1) {\n world._addBody(restore(Body, data.bodies[i], world));\n }\n }\n\n if (data.joints) {\n for (let i = data.joints.length - 1; i >= 0; i--) {\n world.createJoint(restore(Joint, data.joints[i], world));\n }\n }\n\n return world;\n }\n\n /**\n * Get the world body list. With the returned body, use Body.getNext to get the\n * next body in the world list. A null body indicates the end of the list.\n *\n * @return the head of the world body list.\n */\n getBodyList(): Body | null {\n return this.m_bodyList;\n }\n\n /**\n * Get the world joint list. With the returned joint, use Joint.getNext to get\n * the next joint in the world list. A null joint indicates the end of the list.\n *\n * @return the head of the world joint list.\n */\n getJointList(): Joint | null {\n return this.m_jointList;\n }\n\n /**\n * Get the world contact list. With the returned contact, use Contact.getNext to\n * get the next contact in the world list. A null contact indicates the end of\n * the list.\n *\n * Warning: contacts are created and destroyed in the middle of a time step.\n * Use ContactListener to avoid missing contacts.\n *\n * @return the head of the world contact list.\n */\n getContactList(): Contact | null {\n return this.m_contactList;\n }\n\n getBodyCount(): number {\n return this.m_bodyCount;\n }\n\n getJointCount(): number {\n return this.m_jointCount;\n }\n\n /**\n * Get the number of contacts (each may have 0 or more contact points).\n */\n getContactCount(): number {\n return this.m_contactCount;\n }\n\n /**\n * Change the global gravity vector.\n */\n setGravity(gravity: Vec2Value): void {\n this.m_gravity.set(gravity);\n }\n\n /**\n * Get the global gravity vector.\n */\n getGravity(): Vec2 {\n return this.m_gravity;\n }\n\n /**\n * Is the world locked (in the middle of a time step).\n */\n isLocked(): boolean {\n return this.m_locked;\n }\n\n /**\n * Enable/disable sleep.\n */\n setAllowSleeping(flag: boolean): void {\n if (flag == this.m_allowSleep) {\n return;\n }\n\n this.m_allowSleep = flag;\n if (this.m_allowSleep == false) {\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.setAwake(true);\n }\n }\n }\n\n getAllowSleeping(): boolean {\n return this.m_allowSleep;\n }\n\n /**\n * Enable/disable warm starting. For testing.\n */\n setWarmStarting(flag: boolean): void {\n this.m_warmStarting = flag;\n }\n\n getWarmStarting(): boolean {\n return this.m_warmStarting;\n }\n\n /**\n * Enable/disable continuous physics. For testing.\n */\n setContinuousPhysics(flag: boolean): void {\n this.m_continuousPhysics = flag;\n }\n\n getContinuousPhysics(): boolean {\n return this.m_continuousPhysics;\n }\n\n /**\n * Enable/disable single stepped continuous physics. For testing.\n */\n setSubStepping(flag: boolean): void {\n this.m_subStepping = flag;\n }\n\n getSubStepping(): boolean {\n return this.m_subStepping;\n }\n\n /**\n * Set flag to control automatic clearing of forces after each time step.\n */\n setAutoClearForces(flag: boolean): void {\n this.m_clearForces = flag;\n }\n\n /**\n * Get the flag that controls automatic clearing of forces after each time step.\n */\n getAutoClearForces(): boolean {\n return this.m_clearForces;\n }\n\n /**\n * Manually clear the force buffer on all bodies. By default, forces are cleared\n * automatically after each call to step. The default behavior is modified by\n * calling setAutoClearForces. The purpose of this function is to support\n * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step\n * under a variable frame-rate. When you perform sub-stepping you will disable\n * auto clearing of forces and instead call clearForces after all sub-steps are\n * complete in one pass of your game loop.\n *\n * See {@link World.setAutoClearForces}\n */\n clearForces(): void {\n for (let body = this.m_bodyList; body; body = body.getNext()) {\n body.m_force.setZero();\n body.m_torque = 0.0;\n }\n }\n\n /**\n * Query the world for all fixtures that potentially overlap the provided AABB.\n *\n * @param aabb The query box.\n * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\n queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n this.m_broadPhase.query(aabb, function(proxyId: number): boolean { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n return callback(proxy.fixture);\n });\n }\n\n /**\n * Ray-cast the world for all fixtures in the path of the ray. Your callback\n * controls whether you get the closest point, any point, or n-points. The\n * ray-cast ignores shapes that contain the starting point.\n *\n * @param point1 The ray starting point\n * @param point2 The ray ending point\n * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value.\n */\n rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n\n this.m_broadPhase.rayCast({\n maxFraction : 1.0,\n p1 : point1,\n p2 : point2\n }, function(input: RayCastInput, proxyId: number): number { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n const fixture = proxy.fixture;\n const index = proxy.childIndex;\n // @ts-ignore\n const output: RayCastOutput = {}; // TODO GC\n const hit = fixture.rayCast(output, input, index);\n if (hit) {\n const fraction = output.fraction;\n const point = Vec2.add(Vec2.mulNumVec2((1.0 - fraction), input.p1), Vec2.mulNumVec2(fraction, input.p2));\n return callback(fixture, point, output.normal, fraction);\n }\n return input.maxFraction;\n });\n }\n\n /**\n * Get the number of broad-phase proxies.\n */\n getProxyCount(): number {\n return this.m_broadPhase.getProxyCount();\n }\n\n /**\n * Get the height of broad-phase dynamic tree.\n */\n getTreeHeight(): number {\n return this.m_broadPhase.getTreeHeight();\n }\n\n /**\n * Get the balance of broad-phase dynamic tree.\n */\n getTreeBalance(): number {\n return this.m_broadPhase.getTreeBalance();\n }\n\n /**\n * Get the quality metric of broad-phase dynamic tree. The smaller the better.\n * The minimum is 1.\n */\n getTreeQuality(): number {\n return this.m_broadPhase.getTreeQuality();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The body shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n _ASSERT && console.assert(this.m_locked == false);\n if (this.m_locked) {\n return;\n }\n\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.m_xf.p.sub(newOrigin);\n b.m_sweep.c0.sub(newOrigin);\n b.m_sweep.c.sub(newOrigin);\n }\n\n for (let j = this.m_jointList; j; j = j.m_next) {\n j.shiftOrigin(newOrigin);\n }\n\n this.m_broadPhase.shiftOrigin(newOrigin);\n }\n\n /** @internal Used for deserialize. */\n _addBody(body: Body): void {\n _ASSERT && console.assert(this.isLocked() === false);\n if (this.isLocked()) {\n return;\n }\n\n // Add to world doubly linked list.\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\n /**\n * Create a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This function is locked during callbacks.\n */\n createBody(def?: BodyDef): Body;\n createBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createBody(arg1?, arg2?) {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n let def: BodyDef = {};\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\n const body = new Body(this, def);\n this._addBody(body);\n return body;\n }\n\n createDynamicBody(def?: BodyDef): Body;\n createDynamicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createDynamicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n createKinematicBody(def?: BodyDef): Body;\n createKinematicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createKinematicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n /**\n * Destroy a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This automatically deletes all associated shapes and joints.\n *\n * Warning: This function is locked during callbacks.\n */\n destroyBody(b: Body): boolean {\n _ASSERT && console.assert(this.m_bodyCount > 0);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n if (b.m_destroyed) {\n return false;\n }\n\n // Delete the attached joints.\n let je = b.m_jointList;\n while (je) {\n const je0 = je;\n je = je.next;\n\n this.publish(\"remove-joint\", je0.joint);\n this.destroyJoint(je0.joint);\n\n b.m_jointList = je;\n }\n b.m_jointList = null;\n\n // Delete the attached contacts.\n let ce = b.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n\n this.destroyContact(ce0.contact);\n\n b.m_contactList = ce;\n }\n b.m_contactList = null;\n\n // Delete the attached fixtures. This destroys broad-phase proxies.\n let f = b.m_fixtureList;\n while (f) {\n const f0 = f;\n f = f.m_next;\n\n this.publish(\"remove-fixture\", f0);\n f0.destroyProxies(this.m_broadPhase);\n\n b.m_fixtureList = f;\n }\n b.m_fixtureList = null;\n\n // Remove world body list.\n if (b.m_prev) {\n b.m_prev.m_next = b.m_next;\n }\n\n if (b.m_next) {\n b.m_next.m_prev = b.m_prev;\n }\n\n if (b == this.m_bodyList) {\n this.m_bodyList = b.m_next;\n }\n\n b.m_destroyed = true;\n\n --this.m_bodyCount;\n\n this.publish(\"remove-body\", b);\n\n return true;\n }\n\n /**\n * Create a joint to constrain bodies together. No reference to the definition\n * is retained. This may cause the connected bodies to cease colliding.\n *\n * Warning: This function is locked during callbacks.\n */\n createJoint(joint: T): T | null {\n _ASSERT && console.assert(!!joint.m_bodyA);\n _ASSERT && console.assert(!!joint.m_bodyB);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n // Connect to the world list.\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\n // Connect to the bodies' doubly linked lists.\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\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\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n for (let edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) {\n if (edge.other == joint.m_bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n }\n }\n\n // Note: creating a joint doesn't wake the bodies.\n\n return joint;\n }\n\n /**\n * Destroy a joint. This may cause the connected bodies to begin colliding.\n * Warning: This function is locked during callbacks.\n */\n destroyJoint(joint: Joint): void {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n // Remove from the doubly linked list.\n if (joint.m_prev) {\n joint.m_prev.m_next = joint.m_next;\n }\n\n if (joint.m_next) {\n joint.m_next.m_prev = joint.m_prev;\n }\n\n if (joint == this.m_jointList) {\n this.m_jointList = joint.m_next;\n }\n\n // Disconnect from bodies.\n const bodyA = joint.m_bodyA;\n const bodyB = joint.m_bodyB;\n\n // Wake up connected bodies.\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n\n // Remove from body 1.\n if (joint.m_edgeA.prev) {\n joint.m_edgeA.prev.next = joint.m_edgeA.next;\n }\n\n if (joint.m_edgeA.next) {\n joint.m_edgeA.next.prev = joint.m_edgeA.prev;\n }\n\n if (joint.m_edgeA == bodyA.m_jointList) {\n bodyA.m_jointList = joint.m_edgeA.next;\n }\n\n joint.m_edgeA.prev = null;\n joint.m_edgeA.next = null;\n\n // Remove from body 2\n if (joint.m_edgeB.prev) {\n joint.m_edgeB.prev.next = joint.m_edgeB.next;\n }\n\n if (joint.m_edgeB.next) {\n joint.m_edgeB.next.prev = joint.m_edgeB.prev;\n }\n\n if (joint.m_edgeB == bodyB.m_jointList) {\n bodyB.m_jointList = joint.m_edgeB.next;\n }\n\n joint.m_edgeB.prev = null;\n joint.m_edgeB.next = null;\n\n _ASSERT && console.assert(this.m_jointCount > 0);\n --this.m_jointCount;\n\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n let edge = bodyB.getContactList();\n while (edge) {\n if (edge.other == bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n }\n\n this.publish(\"remove-joint\", joint);\n }\n\n /** @internal */\n s_step: TimeStep; // reuse\n\n /**\n * Take a time step. This performs collision detection, integration, and\n * constraint solution.\n *\n * Broad-phase, narrow-phase, solve and solve time of impacts.\n *\n * @param timeStep Time step, this should not vary.\n */\n step(timeStep: number, velocityIterations?: number, positionIterations?: number): void {\n this.publish(\"pre-step\", timeStep);\n\n if ((velocityIterations | 0) !== velocityIterations) {\n // TODO: remove this in future\n velocityIterations = 0;\n }\n\n velocityIterations = velocityIterations || this.m_velocityIterations;\n positionIterations = positionIterations || this.m_positionIterations;\n\n // If new fixtures were added, we need to find the new contacts.\n if (this.m_newFixture) {\n this.findNewContacts();\n this.m_newFixture = false;\n }\n\n this.m_locked = true;\n\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\n // Update contacts. This is where some contacts are destroyed.\n this.updateContacts();\n\n // Integrate velocities, solve velocity constraints, and integrate positions.\n if (this.m_stepComplete && timeStep > 0.0) {\n this.m_solver.solveWorld(this.s_step);\n\n // Synchronize fixtures, check for out of range bodies.\n for (let b = this.m_bodyList; b; b = b.getNext()) {\n // If a body was not in an island then it did not move.\n if (b.m_islandFlag == false) {\n continue;\n }\n\n if (b.isStatic()) {\n continue;\n }\n\n // Update fixtures (for broad-phase).\n b.synchronizeFixtures();\n }\n // Look for new contacts.\n this.findNewContacts();\n }\n\n // Handle TOI events.\n if (this.m_continuousPhysics && timeStep > 0.0) {\n this.m_solver.solveWorldTOI(this.s_step);\n }\n\n if (this.m_clearForces) {\n this.clearForces();\n }\n\n this.m_locked = false;\n\n this.publish(\"post-step\", timeStep);\n }\n\n /**\n * @internal\n * Call this method to find new contacts.\n */\n findNewContacts(): void {\n this.m_broadPhase.updatePairs(\n (proxyA: FixtureProxy, proxyB: FixtureProxy) => this.createContact(proxyA, proxyB)\n );\n }\n\n /**\n * @internal\n * Callback for broad-phase.\n */\n createContact(proxyA: FixtureProxy, proxyB: FixtureProxy): void {\n const fixtureA = proxyA.fixture;\n const fixtureB = proxyB.fixture;\n\n const indexA = proxyA.childIndex;\n const indexB = proxyB.childIndex;\n\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Are the fixtures on the same body?\n if (bodyA == bodyB) {\n return;\n }\n\n // TODO_ERIN use a hash table to remove a potential bottleneck when both\n // bodies have a lot of contacts.\n // Does a contact already exist?\n let edge = bodyB.getContactList(); // ContactEdge\n while (edge) {\n if (edge.other == bodyA) {\n const fA = edge.contact.getFixtureA();\n const fB = edge.contact.getFixtureB();\n const iA = edge.contact.getChildIndexA();\n const iB = edge.contact.getChildIndexB();\n\n if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) {\n // A contact already exists.\n return;\n }\n\n if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) {\n // A contact already exists.\n return;\n }\n }\n\n edge = edge.next;\n }\n\n if (bodyB.shouldCollide(bodyA) == false) {\n return;\n }\n if (fixtureB.shouldCollide(fixtureA) == false) {\n return;\n }\n\n // Call the factory.\n const contact = Contact.create(fixtureA, indexA, fixtureB, indexB);\n if (contact == null) {\n return;\n }\n\n // Insert into the world.\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\n ++this.m_contactCount;\n }\n\n /**\n * @internal\n * Removes old non-overlapping contacts, applies filters and updates contacts.\n */\n updateContacts(): void {\n // Update awake contacts.\n let c: Contact;\n let next_c = this.m_contactList;\n while (c = next_c) {\n next_c = c.getNext();\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Is this contact flagged for filtering?\n if (c.m_filterFlag) {\n if (bodyB.shouldCollide(bodyA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n if (fixtureB.shouldCollide(fixtureA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n // Clear the filtering flag.\n c.m_filterFlag = false;\n }\n\n const activeA = bodyA.isAwake() && !bodyA.isStatic();\n const activeB = bodyB.isAwake() && !bodyB.isStatic();\n\n // At least one body must be awake and it must be dynamic or kinematic.\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const proxyIdA = fixtureA.m_proxies[indexA].proxyId;\n const proxyIdB = fixtureB.m_proxies[indexB].proxyId;\n const overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB);\n\n // Here we destroy contacts that cease to overlap in the broad-phase.\n if (overlap == false) {\n this.destroyContact(c);\n continue;\n }\n\n // The contact persists.\n c.update(this);\n }\n }\n\n /** @internal */\n destroyContact(contact: Contact): void {\n // Remove from the world.\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\n Contact.destroy(contact, this);\n\n --this.m_contactCount;\n }\n\n\n /**\n * Called when two fixtures begin to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n /**\n * Called when two fixtures cease to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"end-contact\", listener: (contact: Contact) => void): World;\n /**\n * This is called after a contact is updated. This allows you to inspect a\n * contact before it goes to the solver. If you are careful, you can modify the\n * contact manifold (e.g. disable contact). A copy of the old manifold is\n * provided so that you can detect changes. Note: this is called only for awake\n * bodies. Note: this is called even when the number of contact points is zero.\n * Note: this is not called for sensors. Note: if you set the number of contact\n * points to zero, you will not get an end-contact callback. However, you may get\n * a begin-contact callback the next step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n /**\n * This lets you inspect a contact after the solver is finished. This is useful\n * for inspecting impulses. Note: the contact manifold does not include time of\n * impact impulses, which can be arbitrarily large if the sub-step is small.\n * Hence the impulse is provided explicitly in a separate data structure. Note:\n * this is only called for contacts that are touching, solid, and awake.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n /** Listener is called whenever a body is removed. */\n on(name: \"remove-body\", listener: (body: Body) => void): World;\n /** Listener is called whenever a joint is removed implicitly or explicitly. */\n on(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n /** Listener is called whenever a fixture is removed implicitly or explicitly. */\n on(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Register an event listener.\n */\n // tslint:disable-next-line:typedef\n on(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\n off(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n off(name: \"end-contact\", listener: (contact: Contact) => void): World;\n off(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n off(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n off(name: \"remove-body\", listener: (body: Body) => void): World;\n off(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n off(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Remove an event listener.\n */\n // tslint:disable-next-line:typedef\n off(name, listener) {\n if (typeof name !== \"string\" || typeof listener !== \"function\") {\n return this;\n }\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return this;\n }\n const index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n return this;\n }\n\n publish(name: string, arg1?: any, arg2?: any, arg3?: any): number {\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return 0;\n }\n for (let l = 0; l < listeners.length; l++) {\n listeners[l].call(this, arg1, arg2, arg3);\n }\n return listeners.length;\n }\n\n /** @internal */\n beginContact(contact: Contact): void {\n this.publish(\"begin-contact\", contact);\n }\n\n /** @internal */\n endContact(contact: Contact): void {\n this.publish(\"end-contact\", contact);\n }\n\n /** @internal */\n preSolve(contact: Contact, oldManifold: Manifold): void {\n this.publish(\"pre-solve\", contact, oldManifold);\n }\n\n /** @internal */\n postSolve(contact: Contact, impulse: ContactImpulse): void {\n this.publish(\"post-solve\", contact, impulse);\n }\n\n /**\n * Joints and fixtures are destroyed when their associated body is destroyed.\n * Register a destruction listener so that you may nullify references to these\n * joints and shapes.\n *\n * `function(object)` is called when any joint or fixture is about to\n * be destroyed due to the destruction of one of its attached or parent bodies.\n */\n\n /**\n * Register a contact filter to provide specific control over collision.\n * Otherwise the default filter is used (defaultFilter). The listener is owned\n * by you and must remain in scope.\n *\n * Moved to Fixture.\n */\n}","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface Vec3Value {\n x: number;\n y: number;\n z: number;\n}\n\nexport class Vec3 {\n x: number;\n y: number;\n z: number;\n\n constructor(x: number, y: number, z: number);\n constructor(obj: { x: number, y: number, z: number });\n constructor();\n constructor(x?, y?, z?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec3)) {\n return new Vec3(x, y, z);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n } else {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n _ASSERT && Vec3.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y,\n z: this.z\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = data.x;\n obj.y = data.y;\n obj.z = data.z;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number, z: number): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = x;\n obj.y = y;\n obj.z = z;\n return obj;\n }\n\n static zero(): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = 0;\n obj.y = 0;\n obj.z = 0;\n return obj;\n }\n\n static clone(v: Vec3Value): Vec3 {\n _ASSERT && Vec3.assert(v);\n return Vec3.neo(v.x, v.y, v.z);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /** Does this vector contain finite coordinates? */\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec3.isValid(o), \"Invalid Vec3!\", o);\n }\n\n setZero(): Vec3 {\n this.x = 0.0;\n this.y = 0.0;\n this.z = 0.0;\n return this;\n }\n\n set(x: number, y: number, z: number): Vec3 {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n\n add(w: Vec3Value): Vec3 {\n this.x += w.x;\n this.y += w.y;\n this.z += w.z;\n return this;\n }\n\n sub(w: Vec3Value): Vec3 {\n this.x -= w.x;\n this.y -= w.y;\n this.z -= w.z;\n return this;\n }\n\n mul(m: number): Vec3 {\n this.x *= m;\n this.y *= m;\n this.z *= m;\n return this;\n }\n\n static areEqual(v: Vec3Value, w: Vec3Value): boolean {\n _ASSERT && Vec3.assert(v);\n _ASSERT && Vec3.assert(w);\n return v === w ||\n typeof v === \"object\" && v !== null &&\n typeof w === \"object\" && w !== null &&\n v.x === w.x && v.y === w.y && v.z === w.z;\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n }\n\n /** Cross product on two vectors */\n static cross(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(\n v.y * w.z - v.z * w.y,\n v.z * w.x - v.x * w.z,\n v.x * w.y - v.y * w.x\n );\n }\n\n static add(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x + w.x, v.y + w.y, v.z + w.z);\n }\n\n static sub(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x - w.x, v.y - w.y, v.z - w.z);\n }\n\n static mul(v: Vec3Value, m: number): Vec3 {\n return new Vec3(m * v.x, m * v.y, m * v.z);\n }\n\n neg(): Vec3 {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n\n static neg(v: Vec3Value): Vec3 {\n return new Vec3(-v.x, -v.y, -v.z);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Shape } from \"../Shape\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { AABB, AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\n/**\n * A line segment (edge) shape. These can be connected in chains or loops to\n * other edge shapes. The connectivity information is used to ensure correct\n * contact normals.\n */\nexport class EdgeShape extends Shape {\n static TYPE = \"edge\" as const;\n /** @hidden */ m_type: \"edge\";\n\n /** @hidden */ m_radius: number;\n\n // These are the edge vertices\n /** @hidden */ m_vertex1: Vec2;\n /** @hidden */ m_vertex2: Vec2;\n\n // Optional adjacent vertices. These are used for smooth collision.\n // Used by chain shape.\n /** @hidden */ m_vertex0: Vec2;\n /** @hidden */ m_vertex3: Vec2;\n /** @hidden */ m_hasVertex0: boolean;\n /** @hidden */ m_hasVertex3: boolean;\n\n constructor(v1?: Vec2Value, v2?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof EdgeShape)) {\n return new EdgeShape(v1, v2);\n }\n\n super();\n\n this.m_type = EdgeShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n\n this.m_vertex1 = v1 ? Vec2.clone(v1) : Vec2.zero();\n this.m_vertex2 = v2 ? Vec2.clone(v2) : Vec2.zero();\n\n this.m_vertex0 = Vec2.zero();\n this.m_vertex3 = Vec2.zero();\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertex1: this.m_vertex1,\n vertex2: this.m_vertex2,\n\n vertex0: this.m_vertex0,\n vertex3: this.m_vertex3,\n hasVertex0: this.m_hasVertex0,\n hasVertex3: this.m_hasVertex3,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): EdgeShape {\n const shape = new EdgeShape(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\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getType(): \"edge\" {\n return this.m_type;\n }\n\n /** @internal @deprecated */\n setNext(v?: Vec2Value): EdgeShape {\n return this.setNextVertex(v);\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n setNextVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex3.setVec2(v);\n this.m_hasVertex3 = true;\n } else {\n this.m_vertex3.setZero();\n this.m_hasVertex3 = false;\n }\n return this;\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n getNextVertex(): Vec2 {\n return this.m_vertex3;\n }\n\n /** @internal @deprecated */\n setPrev(v?: Vec2Value): EdgeShape {\n return this.setPrevVertex(v);\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n setPrevVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex0.setVec2(v);\n this.m_hasVertex0 = true;\n } else {\n this.m_vertex0.setZero();\n this.m_hasVertex0 = false;\n }\n return this;\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n getPrevVertex(): Vec2 {\n return this.m_vertex0;\n }\n\n /**\n * Set this as an isolated edge.\n */\n _set(v1: Vec2Value, v2: Vec2Value): EdgeShape {\n this.m_vertex1.setVec2(v1);\n this.m_vertex2.setVec2(v2);\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n return this;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): EdgeShape {\n const clone = new EdgeShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // p = p1 + t * d\n // v = v1 + s * e\n // p1 + t * d = v1 + s * e\n // s * e - t * d = p1 - v1\n\n // NOT_USED(childIndex);\n\n // Put the ray into the edge's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n const v1 = this.m_vertex1;\n const v2 = this.m_vertex2;\n const e = Vec2.sub(v2, v1);\n const normal = Vec2.neo(e.y, -e.x);\n normal.normalize();\n\n // q = p1 + t * d\n // dot(normal, q - v1) = 0\n // dot(normal, p1 - v1) + t * dot(normal, d) = 0\n const numerator = Vec2.dot(normal, Vec2.sub(v1, p1));\n const denominator = Vec2.dot(normal, d);\n\n if (denominator == 0.0) {\n return false;\n }\n\n const t = numerator / denominator;\n if (t < 0.0 || input.maxFraction < t) {\n return false;\n }\n\n const q = Vec2.add(p1, Vec2.mulNumVec2(t, d));\n\n // q = v1 + s * r\n // s = dot(q - v1, r) / dot(r, r)\n const r = Vec2.sub(v2, v1);\n const rr = Vec2.dot(r, r);\n if (rr == 0.0) {\n return false;\n }\n\n const s = Vec2.dot(Vec2.sub(q, v1), r) / rr;\n if (s < 0.0 || 1.0 < s) {\n return false;\n }\n\n output.fraction = t;\n if (numerator > 0.0) {\n output.normal = Rot.mulVec2(xf.q, normal).neg();\n } else {\n output.normal = Rot.mulVec2(xf.q, normal);\n }\n return true;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n matrix.transformVec2(v1, xf, this.m_vertex1);\n matrix.transformVec2(v2, xf, this.m_vertex2);\n\n AABB.combinePoints(aabb, v1, v2);\n AABB.extend(aabb, this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Edge = EdgeShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { AABBValue, RayCastOutput, RayCastInput, AABB } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\nimport { EdgeShape } from \"./EdgeShape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\n\n/**\n * A chain shape is a free form sequence of line segments. The chain has\n * two-sided collision, so you can use inside and outside collision. Therefore,\n * you may use any winding order. Connectivity information is used to create\n * smooth collisions.\n *\n * WARNING: The chain will not collide properly if there are self-intersections.\n */\nexport class ChainShape extends Shape {\n static TYPE = \"chain\" as const;\n /** @hidden */ m_type: \"chain\";\n\n /** @hidden */ m_radius: number;\n\n /** @hidden */ m_vertices: Vec2[];\n /** @hidden */ m_count: number;\n /** @hidden */ m_prevVertex: Vec2 | null;\n /** @hidden */ m_nextVertex: Vec2 | null;\n /** @hidden */ m_hasPrevVertex: boolean;\n /** @hidden */ m_hasNextVertex: boolean;\n\n /** @hidden */ m_isLoop: boolean;\n\n constructor(vertices?: Vec2Value[], loop?: boolean) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof ChainShape)) {\n return new ChainShape(vertices, loop);\n }\n\n super();\n\n this.m_type = ChainShape.TYPE;\n this.m_radius = Settings.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\n this.m_isLoop = !!loop;\n\n if (vertices && vertices.length) {\n if (loop) {\n this._createLoop(vertices);\n } else {\n this._createChain(vertices);\n }\n }\n }\n\n /** @internal */\n _serialize(): object {\n const data = {\n type: this.m_type,\n vertices: this.m_vertices,\n isLoop: this.m_isLoop,\n hasPrevVertex: this.m_hasPrevVertex,\n hasNextVertex: this.m_hasNextVertex,\n prevVertex: null as Vec2 | null,\n nextVertex: null as Vec2 | 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\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): ChainShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n const shape = new ChainShape(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\n // clear() {\n // this.m_vertices.length = 0;\n // this.m_count = 0;\n // }\n\n getType(): \"chain\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal\n * Create a loop. This automatically adjusts connectivity.\n *\n * @param vertices an array of vertices, these are copied\n * @param count the vertex count\n */\n _createLoop(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 3);\n if (vertices.length < 3) {\n return;\n }\n\n for (let i = 1; i < vertices.length; ++i) {\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n // If the code crashes here, it means your vertices are too close together.\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_vertices = [];\n this.m_count = vertices.length + 1;\n for (let 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\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\n /**\n * @internal\n * Create a chain with isolated end vertices.\n *\n * @param vertices an array of vertices, these are copied\n */\n _createChain(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 2);\n for (let i = 1; i < vertices.length; ++i) {\n // If the code crashes here, it means your vertices are too close together.\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_count = vertices.length;\n for (let i = 0; i < vertices.length; ++i) {\n this.m_vertices[i] = Vec2.clone(vertices[i]);\n }\n\n this.m_hasPrevVertex = false;\n this.m_hasNextVertex = false;\n this.m_prevVertex = null;\n this.m_nextVertex = null;\n return this;\n }\n\n /** @hidden */\n _reset(): void {\n if (this.m_isLoop) {\n this._createLoop(this.m_vertices);\n } else {\n this._createChain(this.m_vertices);\n }\n }\n\n /**\n * Establish connectivity to a vertex that precedes the first vertex. Don't call\n * this for loops.\n */\n setPrevVertex(prevVertex: Vec2): void {\n // todo: copy or reference\n this.m_prevVertex = prevVertex;\n this.m_hasPrevVertex = true;\n }\n\n getPrevVertex(): Vec2 {\n return this.m_prevVertex;\n }\n\n /**\n * Establish connectivity to a vertex that follows the last vertex. Don't call\n * this for loops.\n */\n setNextVertex(nextVertex: Vec2): void {\n // todo: copy or reference\n this.m_nextVertex = nextVertex;\n this.m_hasNextVertex = true;\n }\n\n getNextVertex(): Vec2 {\n return this.m_nextVertex;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): ChainShape {\n const clone = new ChainShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): number {\n // edge count = vertex count - 1\n return this.m_count - 1;\n }\n\n // Get a child edge.\n getChildEdge(edge: EdgeShape, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count - 1);\n edge.m_type = EdgeShape.TYPE;\n edge.m_radius = this.m_radius;\n\n edge.m_vertex1 = this.m_vertices[childIndex];\n edge.m_vertex2 = this.m_vertices[childIndex + 1];\n\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\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\n getVertex(index: number): Vec2 {\n _ASSERT && console.assert(0 <= index && index <= this.m_count);\n if (index < this.m_count) {\n return this.m_vertices[index];\n } else {\n return this.m_vertices[0];\n }\n }\n\n isLoop(): boolean {\n return this.m_isLoop;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * This always return false.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n const edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1));\n return edgeShape.rayCast(output, input, xf, 0);\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n matrix.transformVec2(v1, xf, this.getVertex(childIndex));\n matrix.transformVec2(v2, xf, this.getVertex(childIndex + 1));\n\n AABB.combinePoints(aabb, v1, v2);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * Chains have zero mass.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.zeroVec2(massData.center);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\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}\n\nexport const Chain = ChainShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const center = matrix.vec2(0, 0);\n/** @internal */ const s = matrix.vec2(0, 0);\n\n/**\n * A convex polygon. It is assumed that the interior of the polygon is to the\n * left of each edge. Polygons have a maximum number of vertices equal to\n * Settings.maxPolygonVertices. In most cases you should not need many vertices\n * for a convex polygon. extends Shape\n */\nexport class PolygonShape extends Shape {\n static TYPE = \"polygon\" as const;\n /** @hidden */ m_type: \"polygon\";\n\n /** @hidden */ m_centroid: Vec2;\n /** @hidden */ m_vertices: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_normals: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_count: number;\n /** @hidden */ m_radius: number;\n\n constructor(vertices?: Vec2Value[]) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PolygonShape)) {\n return new PolygonShape(vertices);\n }\n\n super();\n\n this.m_type = PolygonShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n this.m_centroid = Vec2.zero();\n this.m_vertices = [];\n this.m_normals = [];\n this.m_count = 0;\n\n if (vertices && vertices.length) {\n this._set(vertices);\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertices: this.m_vertices,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): PolygonShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n\n const shape = new PolygonShape(vertices);\n return shape;\n }\n\n getType(): \"polygon\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): PolygonShape {\n const clone = new PolygonShape();\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 (let i = 0; i < this.m_count; i++) {\n clone.m_vertices.push(this.m_vertices[i].clone());\n }\n for (let i = 0; i < this.m_normals.length; i++) {\n clone.m_normals.push(this.m_normals[i].clone());\n }\n return clone;\n }\n\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /** @hidden */\n _reset(): void {\n this._set(this.m_vertices);\n }\n\n /**\n * @internal\n *\n * Create a convex hull from the given array of local points. The count must be\n * in the range [3, Settings.maxPolygonVertices].\n *\n * Warning: the points may be re-ordered, even if they form a convex polygon\n * Warning: collinear points are handled but not removed. Collinear points may\n * lead to poor stacking behavior.\n */\n _set(vertices: Vec2Value[]): void {\n _ASSERT && console.assert(3 <= vertices.length && vertices.length <= Settings.maxPolygonVertices);\n if (vertices.length < 3) {\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n let n = math_min(vertices.length, Settings.maxPolygonVertices);\n\n // Perform welding and copy vertices into local buffer.\n const ps: Vec2[] = []; // [Settings.maxPolygonVertices];\n for (let i = 0; i < n; ++i) {\n const v = vertices[i];\n\n let unique = true;\n for (let j = 0; j < ps.length; ++j) {\n if (Vec2.distanceSquared(v, ps[j]) < 0.25 * Settings.linearSlopSquared) {\n unique = false;\n break;\n }\n }\n\n if (unique) {\n ps.push(Vec2.clone(v));\n }\n }\n\n n = ps.length;\n if (n < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n // Create the convex hull using the Gift wrapping algorithm\n // http://en.wikipedia.org/wiki/Gift_wrapping_algorithm\n\n // Find the right most point on the hull (in case of multiple points bottom most is used)\n let i0 = 0;\n let x0 = ps[0].x;\n for (let i = 1; i < n; ++i) {\n const x = ps[i].x;\n if (x > x0 || (x === x0 && ps[i].y < ps[i0].y)) {\n i0 = i;\n x0 = x;\n }\n }\n\n const hull = [] as number[]; // [Settings.maxPolygonVertices];\n let m = 0;\n let ih = i0;\n\n while (true) {\n _ASSERT && console.assert(m < Settings.maxPolygonVertices);\n hull[m] = ih;\n\n let ie = 0;\n for (let j = 1; j < n; ++j) {\n if (ie === ih) {\n ie = j;\n continue;\n }\n\n const r = Vec2.sub(ps[ie], ps[hull[m]]);\n const v = Vec2.sub(ps[j], ps[hull[m]]);\n const c = Vec2.crossVec2Vec2(r, v);\n // c < 0 means counter-clockwise wrapping, c > 0 means clockwise wrapping\n if (c < 0.0) {\n ie = j;\n }\n\n // Collinearity check\n if (c === 0.0 && v.lengthSquared() > r.lengthSquared()) {\n ie = j;\n }\n }\n\n ++m;\n ih = ie;\n\n if (ie === i0) {\n break;\n }\n }\n\n if (m < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n this.m_count = m;\n\n // Copy vertices.\n this.m_vertices = [];\n for (let i = 0; i < m; ++i) {\n this.m_vertices[i] = ps[hull[i]];\n }\n\n // Compute normals. Ensure the edges have non-zero length.\n for (let i = 0; i < m; ++i) {\n const i1 = i;\n const i2 = i + 1 < m ? i + 1 : 0;\n const edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]);\n _ASSERT && console.assert(edge.lengthSquared() > EPSILON * EPSILON);\n this.m_normals[i] = Vec2.crossVec2Num(edge, 1.0);\n this.m_normals[i].normalize();\n }\n\n // Compute the polygon centroid.\n this.m_centroid = computeCentroid(this.m_vertices, m);\n }\n\n /** @internal */ _setAsBox(hx: number, hy: number, center?: Vec2Value, angle?: number): void {\n // start with right-bottom, counter-clockwise, as in Gift wrapping algorithm in PolygonShape._set()\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\n this.m_normals[0] = Vec2.neo(1.0, 0.0);\n this.m_normals[1] = Vec2.neo(0.0, 1.0);\n this.m_normals[2] = Vec2.neo(-1.0, 0.0);\n this.m_normals[3] = Vec2.neo(0.0, -1.0);\n\n this.m_count = 4;\n\n if (center && Vec2.isValid(center)) {\n angle = angle || 0;\n\n matrix.copyVec2(this.m_centroid, center);\n\n const xf = Transform.identity();\n xf.p.setVec2(center);\n xf.q.setAngle(angle);\n\n // Transform vertices and normals.\n for (let i = 0; i < this.m_count; ++i) {\n this.m_vertices[i] = Transform.mulVec2(xf, this.m_vertices[i]);\n this.m_normals[i] = Rot.mulVec2(xf.q, this.m_normals[i]);\n }\n }\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const pLocal = matrix.detransformVec2(temp, xf, p);\n\n for (let i = 0; i < this.m_count; ++i) {\n const dot = matrix.dotVec2(this.m_normals[i], pLocal) - matrix.dotVec2(this.m_normals[i], this.m_vertices[i]);\n if (dot > 0.0) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n\n // Put the ray into the polygon's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n let lower = 0.0;\n let upper = input.maxFraction;\n\n let index = -1;\n\n for (let i = 0; i < this.m_count; ++i) {\n // p = p1 + a * d\n // dot(normal, p - v) = 0\n // dot(normal, p1 - v) + a * dot(normal, d) = 0\n const numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1));\n const denominator = Vec2.dot(this.m_normals[i], d);\n\n if (denominator == 0.0) {\n if (numerator < 0.0) {\n return false;\n }\n } else {\n // Note: we want this predicate without division:\n // lower < numerator / denominator, where denominator < 0\n // Since denominator < 0, we have to flip the inequality:\n // lower < numerator / denominator <==> denominator * lower > numerator.\n if (denominator < 0.0 && numerator < lower * denominator) {\n // Increase lower.\n // The segment enters this half-space.\n lower = numerator / denominator;\n index = i;\n } else if (denominator > 0.0 && numerator < upper * denominator) {\n // Decrease upper.\n // The segment exits this half-space.\n upper = numerator / denominator;\n }\n }\n\n // The use of epsilon here causes the assert on lower to trip\n // in some cases. Apparently the use of epsilon was to make edge\n // shapes work, but now those are handled separately.\n // if (upper < lower - matrix.EPSILON)\n if (upper < lower) {\n return false;\n }\n }\n\n _ASSERT && console.assert(0.0 <= lower && lower <= input.maxFraction);\n\n if (index >= 0) {\n output.fraction = lower;\n output.normal = Rot.mulVec2(xf.q, this.m_normals[index]);\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const v = matrix.transformVec2(temp, xf, this.m_vertices[i]);\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, v.y);\n maxY = math_max(maxY, v.y);\n }\n\n matrix.setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius);\n matrix.setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n // Polygon mass, centroid, and inertia.\n // Let rho be the polygon density in mass per unit area.\n // Then:\n // mass = rho * int(dA)\n // centroid.x = (1/mass) * rho * int(x * dA)\n // centroid.y = (1/mass) * rho * int(y * dA)\n // I = rho * int((x*x + y*y) * dA)\n //\n // We can compute these integrals by summing all the integrals\n // for each triangle of the polygon. To evaluate the integral\n // for a single triangle, we make a change of variables to\n // the (u,v) coordinates of the triangle:\n // x = x0 + e1x * u + e2x * v\n // y = y0 + e1y * u + e2y * v\n // where 0 <= u && 0 <= v && u + v <= 1.\n //\n // We integrate u from [0,1-v] and then v from [0,1].\n // We also need to use the Jacobian of the transformation:\n // D = cross(e1, e2)\n //\n // Simplification: triangle centroid = (1/3) * (p1 + p2 + p3)\n //\n // The rest of the derivation is handled by computer algebra.\n\n _ASSERT && console.assert(this.m_count >= 3);\n\n matrix.zeroVec2(center);\n let area = 0.0;\n let I = 0.0;\n\n // s is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n matrix.zeroVec2(s);\n\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < this.m_count; ++i) {\n matrix.plusVec2(s, this.m_vertices[i]);\n }\n matrix.scaleVec2(s, 1.0 / this.m_count, s);\n\n const k_inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < this.m_count; ++i) {\n // Triangle vertices.\n matrix.subVec2(e1, this.m_vertices[i], s);\n if ( i + 1 < this.m_count) {\n matrix.subVec2(e2, this.m_vertices[i + 1], s);\n } else {\n matrix.subVec2(e2, this.m_vertices[0], s);\n }\n\n const D = matrix.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine2Vec2(temp, triangleArea * k_inv3, e1, triangleArea * k_inv3, e2);\n matrix.plusVec2(center, temp);\n\n const ex1 = e1.x;\n const ey1 = e1.y;\n const ex2 = e2.x;\n const ey2 = e2.y;\n\n const intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2;\n const inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2;\n\n I += (0.25 * k_inv3 * D) * (intx2 + inty2);\n }\n\n // Total mass\n massData.mass = density * area;\n\n // Center of mass\n _ASSERT && console.assert(area > EPSILON);\n matrix.scaleVec2(center, 1.0 / area, center);\n matrix.addVec2(massData.center, center, s);\n\n // Inertia tensor relative to the local origin (point s).\n massData.I = density * I;\n\n // Shift to center of mass then to original body origin.\n massData.I += massData.mass * (matrix.dotVec2(massData.center, massData.center) - matrix.dotVec2(center, center));\n }\n\n /**\n * Validate convexity. This is a very time consuming operation.\n * @returns true if valid\n */\n validate(): boolean {\n for (let i = 0; i < this.m_count; ++i) {\n const i1 = i;\n const i2 = i < this.m_count - 1 ? i1 + 1 : 0;\n const p = this.m_vertices[i1];\n matrix.subVec2(e, this.m_vertices[i2], p);\n\n for (let j = 0; j < this.m_count; ++j) {\n if (j == i1 || j == i2) {\n continue;\n }\n\n const c = matrix.crossVec2Vec2(e, matrix.subVec2(temp, this.m_vertices[j], p));\n if (c < 0.0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\n for (let 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}\n\n/** @internal */ function computeCentroid(vs: Vec2[], count: number): Vec2 {\n _ASSERT && console.assert(count >= 3);\n\n const c = Vec2.zero();\n let area = 0.0;\n\n // pRef is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n const pRef = Vec2.zero();\n if (false) {\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < count; ++i) {\n pRef.add(vs[i]);\n }\n pRef.mul(1.0 / count);\n }\n\n const inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < count; ++i) {\n // Triangle vertices.\n const p1 = pRef;\n const p2 = vs[i];\n const p3 = i + 1 < count ? vs[i + 1] : vs[0];\n\n const e1 = Vec2.sub(p2, p1);\n const e2 = Vec2.sub(p3, p1);\n\n const D = Vec2.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine3Vec2(temp, 1, p1, 1, p2, 1, p3);\n matrix.plusScaleVec2(c, triangleArea * inv3, temp);\n }\n\n // Centroid\n _ASSERT && console.assert(area > EPSILON);\n c.mul(1.0 / area);\n return c;\n}\n\nexport const Polygon = PolygonShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n// todo: use string?\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n} \n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointOpt extends JointOpt {\n /**\n * The lower angle for the joint limit (radians).\n */\n lowerAngle?: number;\n /**\n * The upper angle for the joint limit (radians).\n */\n upperAngle?: number;\n /**\n * The maximum motor torque used to achieve the desired motor speed. Usually\n * in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed. Usually in radians per second.\n */\n motorSpeed?: number;\n /**\n * A flag to enable joint limits.\n */\n enableLimit?: boolean;\n /**\n * A flag to enable the joint motor.\n */\n enableMotor?: boolean;\n}\n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointDef extends JointDef, RevoluteJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n lowerAngle : 0.0,\n upperAngle : 0.0,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n enableLimit : false,\n enableMotor : false\n};\n\n/**\n * A revolute joint constrains two bodies to share a common point while they are\n * free to rotate about the point. The relative rotation about the shared point\n * is the joint angle. You can limit the relative rotation with a joint limit\n * that specifies a lower and upper angle. You can use a motor to drive the\n * relative rotation about the shared point. A maximum motor torque is provided\n * so that infinite forces are not generated.\n */\nexport class RevoluteJoint extends Joint {\n static TYPE = \"revolute-joint\" as const;\n\n /** @internal */ m_type: \"revolute-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerAngle: number;\n /** @internal */ m_upperAngle: number;\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n // effective mass for point-to-point constraint.\n /** @internal */ m_mass: Mat33;\n // effective mass for motor/limit angular constraint.\n /** @internal */ m_motorMass: number;\n /** @internal */ m_limitState: number;\n\n constructor(def: RevoluteJointDef);\n constructor(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RevoluteJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RevoluteJoint)) {\n return new RevoluteJoint(def, bodyA, bodyB, anchor);\n }\n\n def = def ?? {} as RevoluteJointDef;\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_mass = new Mat33();\n this.m_limitState = LimitState.inactiveLimit;\n\n this.m_type = RevoluteJoint.TYPE;\n\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\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\n if (Number.isFinite(def.referenceAngle)) {\n this.m_referenceAngle = def.referenceAngle;\n } else {\n this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle();\n }\n\n this.m_impulse = new Vec3();\n this.m_motorImpulse = 0.0;\n\n this.m_lowerAngle = def.lowerAngle ?? DEFAULTS.lowerAngle;\n this.m_upperAngle = def.upperAngle ?? DEFAULTS.upperAngle;\n this.m_maxMotorTorque = def.maxMotorTorque ?? DEFAULTS.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed ?? DEFAULTS.motorSpeed;\n this.m_enableLimit = def.enableLimit ?? DEFAULTS.enableLimit;\n this.m_enableMotor = def.enableMotor ?? DEFAULTS.enableMotor;\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Motor constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any):RevoluteJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RevoluteJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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 !== undefined) {\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 !== undefined) {\n this.m_enableMotor = def.enableMotor;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle in radians.\n */\n getJointAngle(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle speed in radians per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_angularVelocity - bA.m_angularVelocity;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Get the current motor torque given the inverse time step. Unit is N*m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set the motor speed in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set the maximum motor torque, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit in radians.\n */\n getLowerLimit(): number {\n return this.m_lowerAngle;\n }\n\n /**\n * Get the upper joint limit in radians.\n */\n getUpperLimit(): number {\n return this.m_upperAngle;\n }\n\n /**\n * Set the joint limits in radians.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(lower <= upper);\n\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.0;\n this.m_lowerAngle = lower;\n this.m_upperAngle = upper;\n }\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force given the inverse time step. Unit is N.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque due to the joint limit given the inverse time step.\n * Unit is N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\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\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n\n if (this.m_enableMotor == false || fixedRotation) {\n this.m_motorImpulse = 0.0;\n }\n\n if (this.m_enableLimit && fixedRotation == false) {\n const jointAngle = aB - aA - this.m_referenceAngle;\n\n if (math_abs(this.m_upperAngle - this.m_lowerAngle) < 2.0 * Settings.angularSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointAngle <= this.m_lowerAngle) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atLowerLimit;\n\n } else if (jointAngle >= this.m_upperAngle) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atUpperLimit;\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\n // Solve motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits && fixedRotation == false) {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(this.m_mass.solve33(Cdot));\n\n if (this.m_limitState == LimitState.equalLimits) {\n this.m_impulse.add(impulse);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse < 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse > 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n\n } else {\n // Solve point-to-point constraint\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const impulse = this.m_mass.solve22(Vec2.neg(Cdot));\n\n this.m_impulse.x += impulse.x;\n this.m_impulse.y += impulse.y;\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n let angularError = 0.0;\n let positionError = 0.0;\n\n const fixedRotation = (this.m_invIA + this.m_invIB == 0.0);\n\n // Solve angular limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const angle = aB - aA - this.m_referenceAngle;\n let limitImpulse = 0.0;\n\n if (this.m_limitState == LimitState.equalLimits) {\n // Prevent large angular corrections\n const C = clamp(angle - this.m_lowerAngle, -Settings.maxAngularCorrection, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n angularError = math_abs(C);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n let C = angle - this.m_lowerAngle;\n angularError = -C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C + Settings.angularSlop, -Settings.maxAngularCorrection, 0.0);\n limitImpulse = -this.m_motorMass * C;\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n let C = angle - this.m_upperAngle;\n angularError = C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C - Settings.angularSlop, 0.0, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n }\n\n aA -= this.m_invIA * limitImpulse;\n aB += this.m_invIB * limitImpulse;\n }\n\n // Solve point-to-point constraint.\n {\n qA.setAngle(aA);\n qB.setAngle(aB);\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n const C = Vec2.zero();\n C.addCombine(1, cB, 1, rB);\n C.subCombine(1, cA, 1, rA);\n positionError = C.length();\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y;\n K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y;\n K.ey.x = K.ex.y;\n K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x;\n\n const impulse = Vec2.neg(K.solve(C));\n\n cA.subMul(mA, impulse);\n aA -= iA * Vec2.crossVec2Vec2(rA, impulse);\n\n cB.addMul(mB, impulse);\n aB += iB * Vec2.crossVec2Vec2(rB, impulse);\n }\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Shape } from \"../Shape\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_PI = Math.PI;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\nexport class CircleShape extends Shape {\n static TYPE = \"circle\" as const;\n /** @hidden */ m_type: \"circle\";\n\n /** @hidden */ m_p: Vec2;\n /** @hidden */ m_radius: number;\n\n constructor(position: Vec2Value, radius?: number);\n constructor(radius?: number);\n constructor(a: any, b?: any) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof CircleShape)) {\n return new CircleShape(a, b);\n }\n\n super();\n\n this.m_type = CircleShape.TYPE;\n this.m_p = Vec2.zero();\n this.m_radius = 1;\n\n if (typeof a === \"object\" && Vec2.isValid(a)) {\n this.m_p.setVec2(a);\n\n if (typeof b === \"number\") {\n this.m_radius = b;\n }\n\n } else if (typeof a === \"number\") {\n this.m_radius = a;\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n p: this.m_p,\n radius: this.m_radius,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): CircleShape {\n return new CircleShape(data.p, data.radius);\n }\n\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getType(): \"circle\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getCenter(): Vec2 {\n return this.m_p;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): CircleShape {\n const clone = new CircleShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const center = matrix.transformVec2(temp, xf, this.m_p);\n return matrix.distSqrVec2(p, center) <= this.m_radius * this.m_radius;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // Collision Detection in Interactive 3D Environments by Gino van den Bergen\n // From Section 3.1.2\n // x = s + a * r\n // norm(x) = radius\n\n const position = Vec2.add(xf.p, Rot.mulVec2(xf.q, this.m_p));\n const s = Vec2.sub(input.p1, position);\n const b = Vec2.dot(s, s) - this.m_radius * this.m_radius;\n\n // Solve quadratic equation.\n const r = Vec2.sub(input.p2, input.p1);\n const c = Vec2.dot(s, r);\n const rr = Vec2.dot(r, r);\n const sigma = c * c - rr * b;\n\n // Check for negative discriminant and short segment.\n if (sigma < 0.0 || rr < EPSILON) {\n return false;\n }\n\n // Find the point of intersection of the line with the circle.\n let a = -(c + math_sqrt(sigma));\n\n // Is the intersection point on the segment?\n if (0.0 <= a && a <= input.maxFraction * rr) {\n a /= rr;\n output.fraction = a;\n output.normal = Vec2.add(s, Vec2.mulNumVec2(a, r));\n output.normal.normalize();\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n const p = matrix.transformVec2(temp, xf, this.m_p);\n\n matrix.setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius);\n matrix.setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n massData.mass = density * math_PI * this.m_radius * this.m_radius;\n matrix.copyVec2(massData.center, this.m_p);\n // inertia about the local origin\n massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + matrix.lengthSqrVec2(this.m_p));\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Circle = CircleShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. A value of 0 disables softness.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * Distance length.\n */\n length?: number;\n}\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointDef extends JointDef, DistanceJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0\n};\n\n/**\n * A distance joint constrains two points on two bodies to remain at a fixed\n * distance from each other. You can view this as a massless, rigid rod.\n */\nexport class DistanceJoint extends Joint {\n static TYPE = \"distance-joint\" as const;\n\n // Solver shared\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_length: number;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_gamma: number;\n /** @internal */ m_bias: number;\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n /**\n * @param def DistanceJoint definition.\n */\n constructor(def: DistanceJointDef);\n /**\n * @param anchorA Anchor A in global coordination.\n * @param anchorB Anchor B in global coordination.\n */\n constructor(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value);\n constructor(def: DistanceJointDef, bodyA?: Body, bodyB?: Body, anchorA?: Vec2Value, anchorB?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof DistanceJoint)) {\n return new DistanceJoint(def, bodyA, bodyB, anchorA, anchorB);\n }\n\n // order of constructor arguments is changed in v0.2\n if (bodyB && anchorA && (\"m_type\" in anchorA) && (\"x\" in bodyB) && (\"y\" in bodyB)) {\n const temp = bodyB;\n bodyB = anchorA as any as Body;\n anchorA = temp as any as Vec2;\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = DistanceJoint.TYPE;\n\n // Solver shared\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 :\n 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.0;\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n\n // 1-D constrained system\n // m (v2 - v1) = lambda\n // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass.\n // x2 = x1 + h * v2\n\n // 1-D mass-damper-spring system\n // m (v2 - v1) + h * d * v2 + h * k *\n\n // C = norm(p2 - p1) - L\n // u = (p2 - p1) / norm(p2 - p1)\n // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1))\n // J = [-u -cross(r1, u) u cross(r2, u)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n length: this.m_length,\n\n impulse: this.m_impulse,\n gamma: this.m_gamma,\n bias: this.m_bias,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): DistanceJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new DistanceJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\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\n if (def.length > 0) {\n this.m_length = +def.length;\n } else if (def.length < 0) { // don't change length\n } else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) {\n this.m_length = Vec2.distance(\n this.m_bodyA.getWorldPoint(this.m_localAnchorA),\n this.m_bodyB.getWorldPoint(this.m_localAnchorB)\n );\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the natural length. Manipulating the length can lead to non-physical\n * behavior when the frequency is zero.\n */\n setLength(length: number): void {\n this.m_length = length;\n }\n\n /**\n * Get the natural length.\n */\n getLength(): number {\n return this.m_length;\n }\n\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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(cB, this.m_rB), Vec2.add(cA, this.m_rA));\n\n // Handle singularity.\n const length = this.m_u.length();\n if (length > Settings.linearSlop) {\n this.m_u.mul(1.0 / length);\n } else {\n this.m_u.setNum(0.0, 0.0);\n }\n\n const crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n let invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu;\n\n // Compute the effective mass matrix.\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (this.m_frequencyHz > 0.0) {\n const C = length - this.m_length;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * this.m_mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_mass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invMass += this.m_gamma;\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n } else {\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n const Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA);\n\n const impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse);\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n if (this.m_frequencyHz > 0.0) {\n // There is no position correction for soft distance constraints.\n return true;\n }\n\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const length = u.normalize();\n const C = clamp(length - this.m_length, -Settings.maxLinearCorrection, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointOpt extends JointOpt {\n /**\n * The maximum friction force in N.\n */\n maxForce?: number;\n /**\n * The maximum friction torque in N-m.\n */\n maxTorque?: number;\n}\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointDef extends JointDef, FrictionJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n maxTorque : 0.0,\n};\n\n/**\n * Friction joint. This is used for top-down friction. It provides 2D\n * translational friction and angular friction.\n */\nexport class FrictionJoint extends Joint {\n static TYPE = \"friction-joint\" as const;\n\n /** @internal */ m_type: \"friction-joint\";\n\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n // Solver shared\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: FrictionJointDef);\n /**\n * @param anchor Anchor in global coordination.\n */\n constructor(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: FrictionJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof FrictionJoint)) {\n return new FrictionJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = FrictionJoint.TYPE;\n\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\n // Solver shared\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): FrictionJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new FrictionJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y\n * 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\n * this.m_rB.x;\n\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.sub(\n Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)),\n Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA))\n );\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = this.m_linearImpulse;\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) {\n this.m_linearImpulse.normalize();\n this.m_linearImpulse.mul(maxImpulse);\n }\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Vec3, Vec3Value } from \"./Vec3\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 3-by-3 matrix. Stored in column-major order.\n */\nexport class Mat33 {\n ex: Vec3;\n ey: Vec3;\n ez: Vec3;\n\n constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value);\n constructor();\n constructor(a?: Vec3Value, b?: Vec3Value, c?: Vec3Value) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec3.clone(a);\n this.ey = Vec3.clone(b);\n this.ez = Vec3.clone(c);\n } else {\n this.ex = Vec3.zero();\n this.ey = Vec3.zero();\n this.ez = Vec3.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat33.isValid(o), \"Invalid Mat33!\", o);\n }\n\n /**\n * Set this matrix to all zeros.\n */\n setZero(): Mat33 {\n this.ex.setZero();\n this.ey.setZero();\n this.ez.setZero();\n return this;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve33(v: Vec3Value): Vec3 {\n // let det = matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, this.ez));\n let cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y;\n let cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z;\n let cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x;\n let det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = new Vec3();\n // r.x = det * matrix.dotVec3(v, matrix.newCrossVec3(this.ey, this.ez));\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 * (v.x * cross_x + v.y * cross_y + v.z * cross_z);\n\n // r.y = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(v, this.ez));\n cross_x = v.y * this.ez.z - v.z * this.ez.y;\n cross_y = v.z * this.ez.x - v.x * this.ez.z;\n cross_z = v.x * this.ez.y - v.y * this.ez.x;\n r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z);\n\n // r.z = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, v));\n cross_x = this.ey.y * v.z - this.ey.z * v.y;\n cross_y = this.ey.z * v.x - this.ey.x * v.z;\n cross_z = this.ey.x * v.y - this.ey.y * v.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\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix\n * equation.\n */\n solve22(v: Vec2Value): Vec2 {\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a21 = this.ex.y;\n const a22 = this.ey.y;\n let det = a11 * a22 - a12 * a21;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = Vec2.zero();\n r.x = det * (a22 * v.x - a12 * v.y);\n r.y = det * (a11 * v.y - a21 * v.x);\n return r;\n }\n\n /**\n * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if\n * singular.\n */\n getInverse22(M: Mat33): void {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n M.ex.x = det * d;\n M.ey.x = -det * b;\n M.ex.z = 0.0;\n M.ex.y = -det * c;\n M.ey.y = det * a;\n M.ey.z = 0.0;\n M.ez.x = 0.0;\n M.ez.y = 0.0;\n M.ez.z = 0.0;\n }\n\n /**\n * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix\n * if singular.\n */\n getSymInverse33(M: Mat33): void {\n let det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez));\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a13 = this.ez.x;\n const a22 = this.ey.y;\n const a23 = this.ez.y;\n const a33 = this.ez.z;\n\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\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\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\n /**\n * Multiply a matrix times a vector.\n */\n static mul(a: Mat33, b: Vec2Value): Vec2;\n static mul(a: Mat33, b: Vec3Value): Vec3;\n static mul(a, b) {\n _ASSERT && Mat33.assert(a);\n if (b && \"z\" in b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n\n } else if (b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec3(a: Mat33, b: Vec3Value): Vec3 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n }\n\n static mulVec2(a: Mat33, b: Vec2Value): Vec2 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n static add(a: Mat33, b: Mat33): Mat33 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Mat33.assert(b);\n return new Mat33(\n Vec3.add(a.ex, b.ex),\n Vec3.add(a.ey, b.ey),\n Vec3.add(a.ez, b.ez)\n );\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3, \n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointOpt extends JointOpt {\n /**\n * Enable/disable the joint limit.\n */\n enableLimit?: boolean;\n /**\n * The lower translation limit, usually in meters.\n */\n lowerTranslation?: number;\n /**\n * The upper translation limit, usually in meters.\n */\n upperTranslation?: number;\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorForce?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointDef extends JointDef, PrismaticJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation unit axis in bodyA.\n */\n localAxisA: Vec2Value;\n /**\n * referenceAngle The constrained angle between the bodies:\n * bodyB_angle - bodyA_angle.\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableLimit : false,\n lowerTranslation : 0.0,\n upperTranslation : 0.0,\n enableMotor : false,\n maxMotorForce : 0.0,\n motorSpeed : 0.0\n};\n\n/**\n * A prismatic joint. This joint provides one degree of freedom: translation\n * along an axis fixed in bodyA. Relative rotation is prevented. You can use a\n * joint limit to restrict the range of motion and a joint motor to drive the\n * motion or to model joint friction.\n */\nexport class PrismaticJoint extends Joint {\n static TYPE = \"prismatic-joint\" as const;\n\n /** @internal */ m_type: \"prismatic-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerTranslation: number;\n /** @internal */ m_upperTranslation: number;\n /** @internal */ m_maxMotorForce: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n /** @internal */ m_limitState: number; // TODO enum\n /** @internal */ m_axis: Vec2;\n /** @internal */ m_perp: Vec2;\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_s1: number;\n /** @internal */ m_s2: number;\n /** @internal */ m_a1: number;\n /** @internal */ m_a2: number;\n /** @internal */ m_K: Mat33;\n\n constructor(def: PrismaticJointDef);\n constructor(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: PrismaticJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PrismaticJoint)) {\n return new PrismaticJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PrismaticJoint.TYPE;\n\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, 0.0));\n this.m_localXAxisA.normalize();\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle();\n\n this.m_impulse = new Vec3();\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n\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.inactiveLimit;\n\n this.m_axis = Vec2.zero();\n this.m_perp = Vec2.zero();\n\n this.m_K = new Mat33();\n\n // Linear constraint (point-to-line)\n // d = p2 - p1 = x2 + r2 - x1 - r1\n // C = dot(perp, d)\n // Cdot = dot(d, cross(w1, perp)) + dot(perp, v2 + cross(w2, r2) - v1 -\n // cross(w1, r1))\n // = -dot(perp, v1) - dot(cross(d + r1, perp), w1) + dot(perp, v2) +\n // dot(cross(r2, perp), v2)\n // J = [-perp, -cross(d + r1, perp), perp, cross(r2,perp)]\n //\n // Angular constraint\n // C = a2 - a1 + a_initial\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n //\n // K = J * invM * JT\n //\n // J = [-a -s1 a s2]\n // [0 -1 0 1]\n // a = perp\n // s1 = cross(d + r1, a) = cross(p2 - x1, a)\n // s2 = cross(r2, a) = cross(p2 - x2, a)\n\n // Motor/Limit linear constraint\n // C = dot(ax1, d)\n // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) +\n // dot(cross(r2, ax1), v2)\n // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)]\n\n // Block Solver\n // We develop a block solver that includes the joint limit. This makes the\n // limit stiff (inelastic) even\n // when the mass has poor distribution (leading to large torques about the\n // joint anchor points).\n //\n // The Jacobian has 3 rows:\n // J = [-uT -s1 uT s2] // linear\n // [0 -1 0 1] // angular\n // [-vT -a1 vT a2] // limit\n //\n // u = perp\n // v = axis\n // s1 = cross(d + r1, u), s2 = cross(r2, u)\n // a1 = cross(d + r1, v), a2 = cross(r2, v)\n\n // M * (v2 - v1) = JT * df\n // J * v2 = bias\n //\n // v2 = v1 + invM * JT * df\n // J * (v1 + invM * JT * df) = bias\n // K * df = bias - J * v1 = -Cdot\n // K = J * invM * JT\n // Cdot = J * v1 - bias\n //\n // Now solve for f2.\n // df = f2 - f1\n // K * (f2 - f1) = -Cdot\n // f2 = invK * (-Cdot) + f1\n //\n // Clamp accumulated limit impulse.\n // lower: f2(3) = max(f2(3), 0)\n // upper: f2(3) = min(f2(3), 0)\n //\n // Solve for correct f2(1:2)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:3) * f1\n // = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:2) * f1(1:2) + K(1:2,3) * f1(3)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3)) +\n // K(1:2,1:2) * f1(1:2)\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n //\n // Now compute impulse to be applied:\n // df = f2 - f1\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PrismaticJoint {\n data = {...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 const joint = new PrismaticJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, 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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const pA = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const pB = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = this.m_bodyA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const rA = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter));\n const rB = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter));\n const p1 = Vec2.add(bA.m_sweep.c, rA);\n const p2 = Vec2.add(bB.m_sweep.c, rB);\n const d = Vec2.sub(p2, p1);\n const axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA);\n\n const vA = bA.m_linearVelocity;\n const vB = bB.m_linearVelocity;\n const wA = bA.m_angularVelocity;\n const wB = bB.m_angularVelocity;\n\n const speed = Vec2.dot(d, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB, wB, rB), Vec2.addCrossNumVec2(vA, wA, rA)));\n return speed;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit, usually in meters.\n */\n getLowerLimit(): number {\n return this.m_lowerTranslation;\n }\n\n /**\n * Get the upper joint limit, usually in meters.\n */\n getUpperLimit(): number {\n return this.m_upperTranslation;\n }\n\n /**\n * Set the joint limits, usually in meters.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(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.0;\n }\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in meters per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Set the maximum motor force, usually in N.\n */\n setMaxMotorForce(force: number): void {\n if (force == this.m_maxMotorForce) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorForce = force;\n }\n\n getMaxMotorForce(): number {\n return this.m_maxMotorForce;\n }\n\n /**\n * Get the motor speed, usually in meters per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Get the current motor force given the inverse time step, usually in N.\n */\n getMotorForce(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\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\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.y;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute motor Jacobian and effective mass.\n {\n this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_axis);\n this.m_a2 = Vec2.crossVec2Vec2(rB, this.m_axis);\n\n this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2\n * this.m_a2;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n }\n\n // Prismatic constraint.\n {\n this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_perp);\n this.m_s2 = Vec2.crossVec2Vec2(rB, this.m_perp);\n\n const s1test = Vec2.crossVec2Vec2(rA, this.m_perp);\n\n const k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2;\n const k12 = iA * this.m_s1 + iB * this.m_s2;\n const k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For bodies with fixed rotation.\n k22 = 1.0;\n }\n const k23 = iA * this.m_a1 + iB * this.m_a2;\n const k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2;\n\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\n // Compute motor and limit terms.\n if (this.m_enableLimit) {\n\n const jointTranslation = Vec2.dot(this.m_axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Settings.linearSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointTranslation <= this.m_lowerTranslation) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_limitState = LimitState.atLowerLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else if (jointTranslation >= this.m_upperTranslation) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_limitState = LimitState.atUpperLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n if (this.m_enableMotor == false) {\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse\n + this.m_impulse.z, this.m_axis);\n const LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1;\n const LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Solve linear motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits) {\n const Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB, vA)) + this.m_a2 * wB\n - this.m_a1 * wA;\n let impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorForce;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse,\n -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_axis);\n const LA = impulse * this.m_a1;\n const LB = impulse * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n const Cdot1 = Vec2.zero();\n Cdot1.x += Vec2.dot(this.m_perp, vB) + this.m_s2 * wB;\n Cdot1.x -= Vec2.dot(this.m_perp, vA) + this.m_s1 * wA;\n Cdot1.y = wB - wA;\n\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit) {\n // Solve prismatic and limit constraint in block form.\n let Cdot2 = 0;\n Cdot2 += Vec2.dot(this.m_axis, vB) + this.m_a2 * wB;\n Cdot2 -= Vec2.dot(this.m_axis, vA) + this.m_a1 * wA;\n\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const f1 = Vec3.clone(this.m_impulse);\n let df = this.m_K.solve33(Vec3.neg(Cdot));\n this.m_impulse.add(df);\n\n if (this.m_limitState == LimitState.atLowerLimit) {\n this.m_impulse.z = math_max(this.m_impulse.z, 0.0);\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n this.m_impulse.z = math_min(this.m_impulse.z, 0.0);\n }\n\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n const b = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y));\n const f2r = Vec2.add(this.m_K.solve22(b), Vec2.neo(f1.x, f1.y));\n this.m_impulse.x = f2r.x;\n this.m_impulse.y = f2r.y;\n\n df = Vec3.sub(this.m_impulse, f1);\n\n const P = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis);\n const LA = df.x * this.m_s1 + df.y + df.z * this.m_a1;\n const LB = df.x * this.m_s2 + df.y + df.z * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n // Limit is inactive, just solve the prismatic constraint in block form.\n const df = this.m_K.solve22(Vec2.neg(Cdot1));\n this.m_impulse.x += df.x;\n this.m_impulse.y += df.y;\n\n const P = Vec2.mulNumVec2(df.x, this.m_perp);\n const LA = df.x * this.m_s1 + df.y;\n const LB = df.x * this.m_s2 + df.y;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute fresh Jacobians\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const axis = Rot.mulVec2(qA, this.m_localXAxisA);\n const a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), axis);\n const a2 = Vec2.crossVec2Vec2(rB, axis);\n const perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), perp);\n const s2 = Vec2.crossVec2Vec2(rB, perp);\n\n let impulse = new Vec3();\n const C1 = Vec2.zero();\n C1.x = Vec2.dot(perp, d);\n C1.y = aB - aA - this.m_referenceAngle;\n\n let linearError = math_abs(C1.x);\n const angularError = math_abs(C1.y);\n\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n let active = false; // bool\n let C2 = 0.0;\n if (this.m_enableLimit) {\n\n const translation = Vec2.dot(axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * linearSlop) {\n // Prevent large angular corrections\n C2 = clamp(translation, -maxLinearCorrection, maxLinearCorrection);\n linearError = math_max(linearError, math_abs(translation));\n active = true;\n\n } else if (translation <= this.m_lowerTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_lowerTranslation + linearSlop,\n -maxLinearCorrection, 0.0);\n linearError = Math\n .max(linearError, this.m_lowerTranslation - translation);\n active = true;\n\n } else if (translation >= this.m_upperTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_upperTranslation - linearSlop, 0.0,\n maxLinearCorrection);\n linearError = Math\n .max(linearError, translation - this.m_upperTranslation);\n active = true;\n }\n }\n\n if (active) {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n const k13 = iA * s1 * a1 + iB * s2 * a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For fixed rotation\n k22 = 1.0;\n }\n const k23 = iA * a1 + iB * a2;\n const k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2;\n\n const 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\n const C = new Vec3();\n C.x = C1.x;\n C.y = C1.y;\n C.z = C2;\n\n impulse = K.solve33(Vec3.neg(C));\n } else {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n k22 = 1.0;\n }\n\n const K = new Mat22();\n K.ex.setNum(k11, k12);\n K.ey.setNum(k12, k22);\n\n const impulse1 = K.solve(Vec2.neg(C1));\n impulse.x = impulse1.x;\n impulse.y = impulse1.y;\n impulse.z = 0.0;\n }\n\n const P = Vec2.combine(impulse.x, perp, impulse.z, axis);\n const LA = impulse.x * s1 + impulse.y + impulse.z * a1;\n const LB = impulse.x * s2 + impulse.y + impulse.z * a2;\n\n cA.subMul(mA, P);\n aA -= iA * LA;\n cB.addMul(mB, P);\n aB += iB * LB;\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError <= Settings.linearSlop\n && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointOpt extends JointOpt {\n /**\n * The maximum length of the rope.\n * Warning: this must be larger than linearSlop or the joint will have no effect.\n */\n maxLength?: number;\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointDef extends JointDef, RopeJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxLength : 0.0,\n};\n\n/**\n * A rope joint enforces a maximum distance between two points on two bodies. It\n * has no other effect.\n *\n * Warning: if you attempt to change the maximum length during the simulation\n * you will get some non-physical behavior.\n *\n * A model that would allow you to dynamically modify the length would have some\n * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you\n * want to dynamically control length.\n */\nexport class RopeJoint extends Joint {\n static TYPE = \"rope-joint\" as const;\n\n /** @internal */ m_type: \"rope-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n /** @internal */ m_maxLength: number;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_length: number;\n /** @internal */ m_state: number; // TODO enum\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n constructor(def: RopeJointDef);\n constructor(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RopeJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RopeJoint)) {\n return new RopeJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = RopeJoint.TYPE;\n this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1.0, 0.0));\n\n this.m_maxLength = def.maxLength;\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_length = 0.0;\n this.m_state = LimitState.inactiveLimit;\n\n // Limit:\n // C = norm(pB - pA) - L\n // u = (pB - pA) / norm(pB - pA)\n // Cdot = dot(u, vB + cross(wB, rB) - vA - cross(wA, rA))\n // J = [-u -cross(rA, u) u cross(rB, u)]\n // K = J * invM * JT\n // = invMassA + invIA * cross(rA, u)^2 + invMassB + invIB * cross(rB, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n maxLength: this.m_maxLength,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): RopeJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RopeJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n if (Number.isFinite(def.maxLength)) {\n this.m_maxLength = def.maxLength;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum length of the rope.\n */\n setMaxLength(length: number): void {\n this.m_maxLength = length;\n }\n\n /**\n * Get the maximum length of the rope.\n */\n getMaxLength(): number {\n return this.m_maxLength;\n }\n\n getLimitState(): number {\n // TODO LimitState\n return this.m_state;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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, cB, 1, this.m_rB);\n this.m_u.subCombine(1, cA, 1, this.m_rA);\n\n this.m_length = this.m_u.length();\n\n const C = this.m_length - this.m_maxLength;\n if (C > 0.0) {\n this.m_state = LimitState.atUpperLimit;\n } else {\n this.m_state = LimitState.inactiveLimit;\n }\n\n if (this.m_length > Settings.linearSlop) {\n this.m_u.mul(1.0 / this.m_length);\n } else {\n this.m_u.setZero();\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n return;\n }\n\n // Compute effective mass.\n const crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n const invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB;\n\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.addCrossNumVec2(vA, wA, this.m_rA);\n const vpB = Vec2.addCrossNumVec2(vB, wB, this.m_rB);\n const C = this.m_length - this.m_maxLength;\n let Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA));\n\n // Predictive constraint.\n if (C < 0.0) {\n Cdot += step.inv_dt * C;\n }\n\n let impulse = -this.m_mass * Cdot;\n const oldImpulse = this.m_impulse;\n this.m_impulse = math_min(0.0, this.m_impulse + impulse);\n impulse = this.m_impulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.zero();\n u.addCombine(1, cB, 1, rB);\n u.subCombine(1, cA, 1, rA);\n\n const length = u.normalize();\n let C = length - this.m_maxLength;\n\n C = clamp(C, 0.0, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return length - this.m_maxLength < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { } from \"../../common/Math\";\nimport { Vec2 } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { RevoluteJoint } from \"./RevoluteJoint\";\nimport { PrismaticJoint } from \"./PrismaticJoint\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointOpt extends JointOpt {\n /**\n * The gear ratio. See {@link GearJoint} for explanation.\n */\n ratio?: number;\n}\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointDef extends JointDef, GearJointOpt {\n /**\n * The first revolute/prismatic joint attached to the gear joint.\n */\n joint1: RevoluteJoint | PrismaticJoint;\n /**\n * The second prismatic/revolute joint attached to the gear joint.\n */\n joint2: RevoluteJoint | PrismaticJoint;\n}\n\n/** @internal */ const DEFAULTS = {\n ratio : 1.0\n};\n\n/**\n * A gear joint is used to connect two joints together. Either joint can be a\n * revolute or prismatic joint. You specify a gear ratio to bind the motions\n * together: coordinate1 + ratio * coordinate2 = constant\n *\n * The ratio can be negative or positive. If one joint is a revolute joint and\n * the other joint is a prismatic joint, then the ratio will have units of\n * length or units of 1/length. Warning: You have to manually destroy the gear\n * joint if joint1 or joint2 is destroyed.\n *\n * This definition requires two existing revolute or prismatic joints (any\n * combination will work).\n */\nexport class GearJoint extends Joint {\n static TYPE = \"gear-joint\" as const;\n\n /** @internal */ m_type: \"gear-joint\";\n /** @internal */ m_joint1: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_joint2: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_type1: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_type2: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_bodyC: Body;\n /** @internal */ m_localAnchorC: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_referenceAngleA: number;\n /** @internal */ m_localAxisC: Vec2;\n /** @internal */ m_bodyD: Body;\n /** @internal */ m_localAnchorD: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngleB: number;\n /** @internal */ m_localAxisD: Vec2;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_lcA: Vec2;\n /** @internal */ m_lcB: Vec2;\n /** @internal */ m_lcC: Vec2;\n /** @internal */ m_lcD: Vec2;\n /** @internal */ m_mA: number;\n /** @internal */ m_mB: number;\n /** @internal */ m_mC: number;\n /** @internal */ m_mD: number;\n /** @internal */ m_iA: number;\n /** @internal */ m_iB: number;\n /** @internal */ m_iC: number;\n /** @internal */ m_iD: number;\n /** @internal */ m_JvAC: Vec2;\n /** @internal */ m_JvBD: Vec2;\n /** @internal */ m_JwA: number;\n /** @internal */ m_JwB: number;\n /** @internal */ m_JwC: number;\n /** @internal */ m_JwD: number;\n /** @internal */ m_mass: number;\n\n constructor(def: GearJointDef);\n constructor(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number);\n constructor(def: GearJointDef, bodyA?: Body, bodyB?: Body, joint1?: RevoluteJoint | PrismaticJoint, joint2?: RevoluteJoint | PrismaticJoint, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof GearJoint)) {\n return new GearJoint(def, bodyA, bodyB, joint1, joint2, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = GearJoint.TYPE;\n\n _ASSERT && console.assert(joint1.m_type === RevoluteJoint.TYPE || joint1.m_type === PrismaticJoint.TYPE);\n _ASSERT && console.assert(joint2.m_type === RevoluteJoint.TYPE || joint2.m_type === PrismaticJoint.TYPE);\n\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\n this.m_type1 = this.m_joint1.getType() as \"revolute-joint\" | \"prismatic-joint\";\n this.m_type2 = this.m_joint2.getType() as \"revolute-joint\" | \"prismatic-joint\";\n\n // joint1 connects body A to body C\n // joint2 connects body B to body D\n\n let coordinateA: number;\n let coordinateB: number;\n\n // TODO_ERIN there might be some problem with the joint edges in Joint.\n\n this.m_bodyC = this.m_joint1.getBodyA();\n this.m_bodyA = this.m_joint1.getBodyB();\n\n // Get geometry of joint1\n const xfA = this.m_bodyA.m_xf;\n const aA = this.m_bodyA.m_sweep.a;\n const xfC = this.m_bodyC.m_xf;\n const aC = this.m_bodyC.m_sweep.a;\n\n if (this.m_type1 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint1 as RevoluteJoint;\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\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const prismatic = this.m_joint1 as PrismaticJoint;\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\n const pC = this.m_localAnchorC;\n const pA = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA.q, this.m_localAnchorA), Vec2.sub(xfA.p, xfC.p)));\n coordinateA = Vec2.dot(pA, this.m_localAxisC) - Vec2.dot(pC, this.m_localAxisC);\n }\n\n this.m_bodyD = this.m_joint2.getBodyA();\n this.m_bodyB = this.m_joint2.getBodyB();\n\n // Get geometry of joint2\n const xfB = this.m_bodyB.m_xf;\n const aB = this.m_bodyB.m_sweep.a;\n const xfD = this.m_bodyD.m_xf;\n const aD = this.m_bodyD.m_sweep.a;\n\n if (this.m_type2 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint2 as RevoluteJoint;\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const prismatic = this.m_joint2 as PrismaticJoint;\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\n const pD = this.m_localAnchorD;\n const pB = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB.q, this.m_localAnchorB), Vec2.sub(xfB.p, xfD.p)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n this.m_constant = coordinateA + this.m_ratio * coordinateB;\n\n this.m_impulse = 0.0;\n\n // Gear Joint:\n // C0 = (coordinate1 + ratio * coordinate2)_initial\n // C = (coordinate1 + ratio * coordinate2) - C0 = 0\n // J = [J1 ratio * J2]\n // K = J * invM * JT\n // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T\n //\n // Revolute:\n // coordinate = rotation\n // Cdot = angularVelocity\n // J = [0 0 1]\n // K = J * invM * JT = invI\n //\n // Prismatic:\n // coordinate = dot(p - pg, ug)\n // Cdot = dot(v + cross(w, r), ug)\n // J = [ug cross(r, ug)]\n // K = J * invM * JT = invMass + invI * cross(r, ug)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n joint1: this.m_joint1,\n joint2: this.m_joint2,\n ratio: this.m_ratio,\n\n // _constant: this.m_constant,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): GearJoint {\n data = {...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 const joint = new GearJoint(data);\n // if (data._constant) joint.m_constant = data._constant;\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n // todo: implement other fields\n if (Number.isFinite(def.ratio)) {\n this.m_ratio = def.ratio;\n }\n }\n\n /**\n * Get the first joint.\n */\n getJoint1(): Joint {\n return this.m_joint1;\n }\n\n /**\n * Get the second joint.\n */\n getJoint2(): Joint {\n return this.m_joint2;\n }\n\n /**\n * Set the gear ratio.\n */\n setRatio(ratio: number): void {\n _ASSERT && console.assert(Number.isFinite(ratio));\n this.m_ratio = ratio;\n }\n\n /**\n * Get the gear ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n const L = this.m_impulse * this.m_JwA;\n return inv_dt * L;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const aC = this.m_bodyC.c_position.a;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n\n const aD = this.m_bodyD.c_position.a;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n this.m_mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n this.m_JvAC = Vec2.zero();\n this.m_JwA = 1.0;\n this.m_JwC = 1.0;\n this.m_mass += this.m_iA + this.m_iC;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = 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(rA, 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\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 const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n // Compute effective mass.\n this.m_mass = this.m_mass > 0.0 ? 1.0 / this.m_mass : 0.0;\n\n if (step.warmStarting) {\n vA.addMul(this.m_mA * this.m_impulse, this.m_JvAC);\n wA += this.m_iA * this.m_impulse * this.m_JwA;\n\n vB.addMul(this.m_mB * this.m_impulse, this.m_JvBD);\n wB += this.m_iB * this.m_impulse * this.m_JwB;\n\n vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC);\n wC -= this.m_iC * this.m_impulse * this.m_JwC;\n\n vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD);\n wD -= this.m_iD * this.m_impulse * this.m_JwD;\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n let Cdot = Vec2.dot(this.m_JvAC, vA) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB) - 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\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n vA.addMul(this.m_mA * impulse, this.m_JvAC);\n wA += this.m_iA * impulse * this.m_JwA;\n vB.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\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n const cC = this.m_bodyC.c_position.c;\n let aC = this.m_bodyC.c_position.a;\n const cD = this.m_bodyD.c_position.c;\n let aD = this.m_bodyD.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n const linearError = 0.0;\n\n let coordinateA: number;\n let coordinateB: number;\n\n let JvAC: Vec2;\n let JvBD: Vec2;\n let JwA: number;\n let JwB: number;\n let JwC: number;\n let JwD: number;\n let mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n JvAC = Vec2.zero();\n JwA = 1.0;\n JwC = 1.0;\n mass += this.m_iA + this.m_iC;\n\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA);\n JvAC = u;\n JwC = Vec2.crossVec2Vec2(rC, u);\n JwA = Vec2.crossVec2Vec2(rA, u);\n mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA;\n\n const pC = Vec2.sub(this.m_localAnchorC, this.m_lcC);\n const pA = Rot.mulTVec2(qC, Vec2.add(rA, Vec2.sub(cA, cC)));\n coordinateA = Vec2.dot(Vec2.sub(pA, pC), this.m_localAxisC);\n }\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n const pD = Vec2.sub(this.m_localAnchorD, this.m_lcD);\n const pB = Rot.mulTVec2(qD, Vec2.add(rB, Vec2.sub(cB, cD)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n const C = (coordinateA + this.m_ratio * coordinateB) - this.m_constant;\n\n let impulse = 0.0;\n if (mass > 0.0) {\n impulse = -C / mass;\n }\n\n cA.addMul(this.m_mA * impulse, JvAC);\n aA += this.m_iA * impulse * JwA;\n cB.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\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\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\n // TODO_ERIN not implemented\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointOpt extends JointOpt {\n /**\n * The bodyB angle minus bodyA angle in radians.\n */\n angularOffset?: number;\n /**\n * The maximum motor force in N.\n */\n maxForce?: number;\n /**\n * The maximum motor torque in N-m.\n */\n maxTorque?: number;\n /**\n * Position correction factor in the range [0,1].\n */\n correctionFactor?: number;\n /**\n * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters.\n */\n linearOffset?: Vec2Value;\n}\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointDef extends JointDef, MotorJointOpt {\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 1.0,\n maxTorque : 1.0,\n correctionFactor : 0.3\n};\n\n/**\n * A motor joint is used to control the relative motion between two bodies. A\n * typical usage is to control the movement of a dynamic body with respect to\n * the ground.\n */\nexport class MotorJoint extends Joint {\n static TYPE = \"motor-joint\" as const;\n\n /** @internal */ m_type: \"motor-joint\";\n /** @internal */ m_linearOffset: Vec2;\n /** @internal */ m_angularOffset: number;\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n /** @internal */ m_correctionFactor: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_linearError: Vec2;\n /** @internal */ m_angularError: number;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: MotorJointDef);\n constructor(def: MotorJointOpt, bodyA: Body, bodyB: Body);\n constructor(def: MotorJointDef | MotorJointOpt, bodyA?: Body, bodyB?: Body) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MotorJoint)) {\n return new MotorJoint(def, bodyA, bodyB);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MotorJoint.TYPE;\n\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\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n this.m_correctionFactor = def.correctionFactor;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n //\n // r1 = offset - c1\n // r2 = -c2\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n correctionFactor: this.m_correctionFactor,\n\n linearOffset: this.m_linearOffset,\n angularOffset: this.m_angularOffset,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MotorJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new MotorJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Set the position correction factor in the range [0,1].\n */\n setCorrectionFactor(factor: number): void {\n _ASSERT && console.assert(Number.isFinite(factor) && 0.0 <= factor && factor <= 1.0);\n this.m_correctionFactor = factor;\n }\n\n /**\n * Get the position correction factor in the range [0,1].\n */\n getCorrectionFactor(): number {\n return this.m_correctionFactor;\n }\n\n /**\n * Set/get the target linear offset, in frame A, in meters.\n */\n setLinearOffset(linearOffset: Vec2Value): void {\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\n getLinearOffset(): Vec2 {\n return this.m_linearOffset;\n }\n\n /**\n * Set/get the target angular offset, in radians.\n */\n setAngularOffset(angularOffset: number): void {\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\n getAngularOffset(): number {\n return this.m_angularOffset;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getPosition();\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getPosition();\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Upper 2 by 2 of K for point to point\n const 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\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n this.m_linearError = Vec2.zero();\n this.m_linearError.addCombine(1, cB, 1, this.m_rB);\n this.m_linearError.subCombine(1, cA, 1, this.m_rA);\n\n this.m_angularError = aB - aA - this.m_angularOffset;\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n const inv_h = step.inv_dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError);\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = Vec2.clone(this.m_linearImpulse);\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n this.m_linearImpulse.clamp(maxImpulse);\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Transform } from \"../../common/Transform\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointOpt extends JointOpt {\n /**\n * [maxForce = 0.0] The maximum constraint force that can be exerted to move\n * the candidate body. Usually you will express as some multiple of the\n * weight (multiplier * mass * gravity).\n */\n maxForce?: number;\n /**\n * [frequencyHz = 5.0] The response speed.\n */\n frequencyHz?: number;\n /**\n * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical\n * damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointDef extends JointDef, MouseJointOpt {\n /**\n * The initial world target point. This is assumed to coincide with the body\n * anchor initially.\n */\n target: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n frequencyHz : 5.0,\n dampingRatio : 0.7\n};\n\n/**\n * A mouse joint is used to make a point on a body track a specified world\n * point. This a soft constraint with a maximum force. This allows the\n * constraint to stretch and without applying huge forces.\n *\n * You need to call setTarget(target) every time that mouse is \n * moved, to track the new location of the mouse.\n *\n * NOTE: this joint is not documented in the manual because it was developed to\n * be used in the testbed. If you want to learn how to use the mouse joint, look\n * at the testbed.\n */\nexport class MouseJoint extends Joint {\n static TYPE = \"mouse-joint\" as const;\n\n /** @internal */ m_type: \"mouse-joint\";\n /** @internal */ m_targetA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_impulse: Vec2;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_beta: number;\n /** @internal */ m_gamma: number;\n // Solver temp\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat22;\n /** @internal */ m_C: Vec2;\n\n constructor(def: MouseJointDef);\n constructor(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value);\n constructor(def: MouseJointDef, bodyA?: Body, bodyB?: Body, target?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MouseJoint)) {\n return new MouseJoint(def, bodyA, bodyB, target);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MouseJoint.TYPE;\n\n _ASSERT && console.assert(Number.isFinite(def.maxForce) && def.maxForce >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.frequencyHz) && def.frequencyHz >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.dampingRatio) && def.dampingRatio >= 0.0);\n\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\n this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), this.m_targetA);\n\n this.m_maxForce = def.maxForce;\n this.m_impulse = Vec2.zero();\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_beta = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rB = Vec2.zero();\n this.m_localCenterB = Vec2.zero();\n this.m_invMassB = 0.0;\n this.m_invIB = 0.0;\n this.m_mass = new Mat22();\n this.m_C = Vec2.zero();\n\n // p = attached point, m = mouse point\n // C = p - m\n // Cdot = v\n // = v + cross(w, r)\n // J = [I r_skew]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n target: this.m_targetA,\n maxForce: this.m_maxForce,\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n _localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MouseJoint {\n data = {...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 const joint = new MouseJoint(data);\n if (data._localAnchorB) {\n joint.m_localAnchorB = data._localAnchorB;\n }\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Use this to update the target point.\n */\n setTarget(target: Vec2Value): void {\n if (Vec2.areEqual(target, this.m_targetA)) return;\n this.m_bodyB.setAwake(true);\n this.m_targetA.set(target);\n }\n\n getTarget(): Vec2 {\n return this.m_targetA;\n }\n\n /**\n * Set the maximum force in Newtons.\n */\n setMaxForce(force: number): void {\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum force in Newtons.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the frequency in Hertz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get the frequency in Hertz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set the damping ratio (dimensionless).\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get the damping ratio (dimensionless).\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return Vec2.clone(this.m_targetA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_impulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * 0.0;\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_targetA.sub(newOrigin);\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const position = this.m_bodyB.c_position;\n const velocity = this.m_bodyB.c_velocity;\n\n const cB = position.c;\n const aB = position.a;\n const vB = velocity.v;\n let wB = velocity.w;\n\n const qB = Rot.neo(aB);\n\n const mass = this.m_bodyB.getMass();\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = mass * (omega * omega);\n\n // magic formulas\n // gamma has units of inverse mass.\n // beta has units of inverse time.\n const h = step.dt;\n _ASSERT && console.assert(d + h * k > EPSILON);\n this.m_gamma = h * (d + h * k);\n if (this.m_gamma != 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n this.m_beta = h * k * this.m_gamma;\n\n // Compute the effective mass matrix.\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) *\n // invI2 * skew(r2)]\n // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y\n // -r1.x*r1.y]\n // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x]\n const K = new Mat22();\n K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y\n + 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\n + this.m_gamma;\n\n this.m_mass = K.getInverse();\n\n this.m_C.setVec2(cB);\n this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA);\n this.m_C.mul(this.m_beta);\n\n // Cheat with some damping\n wB *= 0.98;\n\n if (step.warmStarting) {\n this.m_impulse.mul(step.dtRatio);\n vB.addMul(this.m_invMassB, this.m_impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse);\n\n } else {\n this.m_impulse.setZero();\n }\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const velocity = this.m_bodyB.c_velocity;\n const vB = Vec2.clone(velocity.v);\n let wB = velocity.w;\n\n // Cdot = v + cross(w, r)\n\n const Cdot = Vec2.crossNumVec2(wB, this.m_rB);\n Cdot.add(vB);\n\n Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse);\n Cdot.neg();\n\n let impulse = Mat22.mulVec2(this.m_mass, Cdot);\n\n const oldImpulse = Vec2.clone(this.m_impulse);\n this.m_impulse.add(impulse);\n const maxImpulse = step.dt * this.m_maxForce;\n this.m_impulse.clamp(maxImpulse);\n impulse = Vec2.sub(this.m_impulse, oldImpulse);\n\n vB.addMul(this.m_invMassB, impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\n// tslint:disable-next-line:no-empty-interface\nexport interface PulleyJointOpt extends JointOpt {\n}\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\nexport interface PulleyJointDef extends JointDef, PulleyJointOpt {\n /**\n * The first ground anchor in world coordinates. This point never moves.\n */\n groundAnchorA: Vec2Value;\n /**\n * The second ground anchor in world coordinates. This point never moves.\n */\n groundAnchorB: Vec2Value;\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The reference length for the segment attached to bodyA.\n */\n lengthA: number;\n /**\n * The reference length for the segment attached to bodyB.\n */\n lengthB: number;\n /**\n * The pulley ratio, used to simulate a block-and-tackle.\n */\n ratio: number;\n\n /** @hidden */ anchorA?: Vec2Value;\n /** @hidden */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n collideConnected : true\n};\n\n/**\n * The pulley joint is connected to two bodies and two fixed ground points. The\n * pulley supports a ratio such that: length1 + ratio * length2 <= constant\n *\n * Yes, the force transmitted is scaled by the ratio.\n *\n * Warning: the pulley joint can get a bit squirrelly by itself. They often work\n * better when combined with prismatic joints. You should also cover the the\n * anchor points with static shapes to prevent one side from going to zero\n * length.\n */\nexport class PulleyJoint extends Joint {\n static TYPE = \"pulley-joint\" as const;\n // static MIN_PULLEY_LENGTH: number = 2.0; // TODO where this is used?\n\n /** @internal */ m_type: \"pulley-joint\";\n /** @internal */ m_groundAnchorA: Vec2;\n /** @internal */ m_groundAnchorB: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_lengthA: number;\n /** @internal */ m_lengthB: number;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_uA: Vec2;\n /** @internal */ m_uB: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n constructor(def: PulleyJointDef);\n constructor(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number);\n constructor(def: PulleyJointDef, bodyA?: Body, bodyB?: Body, groundA?: Vec2Value, groundB?: Vec2Value, anchorA?: Vec2Value, anchorB?: Vec2Value, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PulleyJoint)) {\n return new PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PulleyJoint.TYPE;\n this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1.0, 1.0));\n this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1.0, 1.0));\n this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1.0, 0.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\n _ASSERT && console.assert(ratio > EPSILON);\n\n this.m_constant = this.m_lengthA + this.m_ratio * this.m_lengthB;\n\n this.m_impulse = 0.0;\n\n // Pulley:\n // length1 = norm(p1 - s1)\n // length2 = norm(p2 - s2)\n // C0 = (length1 + ratio * length2)_initial\n // C = C0 - (length1 + ratio * length2)\n // u1 = (p1 - s1) / norm(p1 - s1)\n // u2 = (p2 - s2) / norm(p2 - s2)\n // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2))\n // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 *\n // cross(r2, u2)^2)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PulleyJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new PulleyJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Get the first ground anchor.\n */\n getGroundAnchorA(): Vec2 {\n return this.m_groundAnchorA;\n }\n\n /**\n * Get the second ground anchor.\n */\n getGroundAnchorB(): Vec2 {\n return this.m_groundAnchorB;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getLengthA(): number {\n return this.m_lengthA;\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getLengthB(): number {\n return this.m_lengthB;\n }\n\n /**\n * Get the pulley ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getCurrentLengthA(): number {\n const p = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const s = this.m_groundAnchorA;\n return Vec2.distance(p, s);\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getCurrentLengthB(): number {\n const p = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const s = this.m_groundAnchorB;\n return Vec2.distance(p, s);\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n *\n * @param newOrigin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_groundAnchorA.sub(newOrigin);\n this.m_groundAnchorB.sub(newOrigin);\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // Get the pulley axes.\n this.m_uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n this.m_uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = this.m_uA.length();\n const lengthB = this.m_uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n this.m_uA.mul(1.0 / lengthA);\n } else {\n this.m_uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n this.m_uB.mul(1.0 / lengthB);\n } else {\n this.m_uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA);\n const ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n this.m_mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support variable time steps.\n this.m_impulse *= step.dtRatio;\n\n // Warm starting.\n const PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB);\n\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n\n const Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB);\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const PA = Vec2.mulNumVec2(-impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB);\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // Get the pulley axes.\n const uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n const uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = uA.length();\n const lengthB = uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n uA.mul(1.0 / lengthA);\n } else {\n uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n uB.mul(1.0 / lengthB);\n } else {\n uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(rA, uA);\n const ruB = Vec2.crossVec2Vec2(rB, uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n let mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (mass > 0.0) {\n mass = 1.0 / mass;\n }\n\n const C = this.m_constant - lengthA - this.m_ratio * lengthB;\n const linearError = math_abs(C);\n\n const impulse = -mass * C;\n\n const PA = Vec2.mulNumVec2(-impulse, uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB);\n\n cA.addMul(this.m_invMassA, PA);\n aA += this.m_invIA * Vec2.crossVec2Vec2(rA, PA);\n cB.addMul(this.m_invMassB, PB);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, PB);\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness\n * with a value of 0.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle?: number;\n}\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointDef extends JointDef, WeldJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0,\n};\n\n/**\n * A weld joint essentially glues two bodies together. A weld joint may distort\n * somewhat because the island constraint solver is approximate.\n */\nexport class WeldJoint extends Joint {\n static TYPE = \"weld-joint\" as const;\n\n /** @internal */ m_type: \"weld-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_impulse: Vec3;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat33;\n\n constructor(def: WeldJointDef);\n constructor(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: WeldJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WeldJoint)) {\n return new WeldJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = WeldJoint.TYPE;\n\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\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_impulse = new Vec3();\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rA;\n this.m_rB;\n this.m_localCenterA;\n this.m_localCenterB;\n this.m_invMassA;\n this.m_invMassB;\n this.m_invIA;\n this.m_invIB;\n this.m_mass = new Mat33();\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // / = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // C = angle2 - angle1 - referenceAngle\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WeldJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WeldJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Set frequency in Hz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get frequency in Hz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set damping ratio.\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get damping ratio.\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const 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\n * 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\n * 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\n if (this.m_frequencyHz > 0.0) {\n K.getInverse22(this.m_mass);\n\n let invM = iA + iB;\n const m = invM > 0.0 ? 1.0 / invM : 0.0;\n\n const C = aB - aA - this.m_referenceAngle;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * m * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = m * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invM += this.m_gamma;\n this.m_mass.ez.z = invM != 0.0 ? 1.0 / invM : 0.0;\n } else if (K.ez.z == 0.0) {\n K.getInverse22(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n } else {\n K.getSymInverse33(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n if (this.m_frequencyHz > 0.0) {\n const Cdot2 = wB - wA;\n\n const impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z);\n this.m_impulse.z += impulse2;\n\n wA -= iA * impulse2;\n wB += iB * impulse2;\n\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n\n const impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1));\n this.m_impulse.x += impulse1.x;\n this.m_impulse.y += impulse1.y;\n\n const P = Vec2.clone(impulse1);\n\n vA.subMul(mA, P);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(mB, P);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, P);\n } else {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot));\n this.m_impulse.add(impulse);\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n let positionError: number;\n let angularError: number;\n\n const K = new Mat33();\n K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB;\n K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB;\n K.ez.x = -rA.y * iA - rB.y * iB;\n K.ex.y = K.ey.x;\n K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB;\n K.ez.y = rA.x * iA + rB.x * iB;\n K.ex.z = K.ez.x;\n K.ey.z = K.ez.y;\n K.ez.z = iA + iB;\n\n if (this.m_frequencyHz > 0.0) {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n positionError = C1.length();\n angularError = 0.0;\n\n const P = Vec2.neg(K.solve22(C1));\n\n cA.subMul(mA, P);\n aA -= iA * Vec2.crossVec2Vec2(rA, P);\n\n cB.addMul(mB, P);\n aB += iB * Vec2.crossVec2Vec2(rB, P);\n } else {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n const C2 = aB - aA - this.m_referenceAngle;\n\n positionError = C1.length();\n angularError = math_abs(C2);\n\n const C = new Vec3(C1.x, C1.y, C2);\n\n let impulse = new Vec3();\n if (K.ez.z > 0.0) {\n impulse = Vec3.neg(K.solve33(C));\n } else {\n const impulse2 = Vec2.neg(K.solve22(C1));\n impulse.set(impulse2.x, impulse2.y, 0.0);\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n cA.subMul(mA, P);\n aA -= iA * (Vec2.crossVec2Vec2(rA, P) + impulse.z);\n\n cB.addMul(mB, P);\n aB += iB * (Vec2.crossVec2Vec2(rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointOpt extends JointOpt {\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n /**\n * Suspension frequency, zero indicates no suspension.\n */\n frequencyHz?: number;\n /**\n * Suspension damping ratio, one indicates critical damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointDef extends JointDef, WheelJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation axis in bodyA.\n */\n localAxisA: Vec2Value;\n\n /** @internal renamed to localAxisA */\n localAxis?: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableMotor : false,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n frequencyHz : 2.0,\n dampingRatio : 0.7,\n};\n\n/**\n * A wheel joint. This joint provides two degrees of freedom: translation along\n * an axis fixed in bodyA and rotation in the plane. In other words, it is a\n * point to line constraint with a rotational motor and a linear spring/damper.\n * This joint is designed for vehicle suspensions.\n */\nexport class WheelJoint extends Joint {\n static TYPE = \"wheel-joint\" as const;\n\n /** @internal */ m_type: \"wheel-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_springMass: number;\n /** @internal */ m_springImpulse: number;\n\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableMotor: boolean;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n /** @internal */ m_ax: Vec2;\n /** @internal */ m_ay: Vec2;\n /** @internal */ m_sAx: number;\n /** @internal */ m_sBx: number;\n /** @internal */ m_sAy: number;\n /** @internal */ m_sBy: number;\n\n constructor(def: WheelJointDef);\n constructor(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: WheelJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WheelJoint)) {\n return new WheelJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_ax = Vec2.zero();\n this.m_ay = Vec2.zero();\n\n this.m_type = WheelJoint.TYPE;\n\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\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 // localAxis is renamed to localAxisA, this is for backward compatibility\n this.m_localXAxisA = Vec2.clone(def.localAxis);\n } else {\n this.m_localXAxisA = Vec2.neo(1.0, 0.0);\n }\n\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n this.m_springMass = 0.0;\n this.m_springImpulse = 0.0;\n\n this.m_maxMotorTorque = def.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed;\n this.m_enableMotor = def.enableMotor;\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Linear constraint (point-to-line)\n // d = pB - pA = xB + rB - xA - rA\n // C = dot(ay, d)\n // Cdot = dot(d, cross(wA, ay)) + dot(ay, vB + cross(wB, rB) - vA - cross(wA,\n // rA))\n // = -dot(ay, vA) - dot(cross(d + rA, ay), wA) + dot(ay, vB) + dot(cross(rB,\n // ay), vB)\n // J = [-ay, -cross(d + rA, ay), ay, cross(rB, ay)]\n\n // Spring linear constraint\n // C = dot(ax, d)\n // Cdot = = -dot(ax, vA) - dot(cross(d + rA, ax), wA) + dot(ax, vB) +\n // dot(cross(rB, ax), vB)\n // J = [-ax -cross(d+rA, ax) ax cross(rB, ax)]\n\n // Motor rotational constraint\n // Cdot = wB - wA\n // J = [0 0 -1 0 0 1]\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WheelJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WheelJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, def.localAxisA));\n }\n if (def.enableMotor !== undefined) {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const pA = bA.getWorldPoint(this.m_localAnchorA);\n const pB = bB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = bA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const wA = this.m_bodyA.m_angularVelocity;\n const wB = this.m_bodyB.m_angularVelocity;\n return wB - wA;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed, usually in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set/Get the maximum motor force, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Get the current motor torque given the inverse time step, usually in N-m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set/Get the spring frequency in hertz. Setting the frequency to zero disables\n * the spring.\n */\n setSpringFrequencyHz(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getSpringFrequencyHz(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set/Get the spring damping ratio\n */\n setSpringDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getSpringDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n // Point to line constraint\n {\n this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA);\n this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ay);\n this.m_sBy = Vec2.crossVec2Vec2(rB, this.m_ay);\n\n this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy\n * this.m_sBy;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n }\n\n // Spring constraint\n this.m_springMass = 0.0;\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n if (this.m_frequencyHz > 0.0) {\n this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ax);\n this.m_sBx = Vec2.crossVec2Vec2(rB, this.m_ax);\n\n const invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx\n * this.m_sBx;\n\n if (invMass > 0.0) {\n this.m_springMass = 1.0 / invMass;\n\n const C = Vec2.dot(d, this.m_ax);\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const damp = 2.0 * this.m_springMass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_springMass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (damp + h * k);\n if (this.m_gamma > 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n\n this.m_bias = C * h * k * this.m_gamma;\n\n this.m_springMass = invMass + this.m_gamma;\n if (this.m_springMass > 0.0) {\n this.m_springMass = 1.0 / this.m_springMass;\n }\n }\n } else {\n this.m_springImpulse = 0.0;\n }\n\n // Rotational motor\n if (this.m_enableMotor) {\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n } else {\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse *= step.dtRatio;\n this.m_springImpulse *= step.dtRatio;\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax);\n const LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse;\n const LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse;\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * LA;\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * LB;\n\n } else {\n this.m_impulse = 0.0;\n this.m_springImpulse = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Solve spring constraint\n {\n const Cdot = Vec2.dot(this.m_ax, vB) - Vec2.dot(this.m_ax, vA) + this.m_sBx * wB - this.m_sAx * wA;\n const impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse);\n this.m_springImpulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ax);\n const LA = impulse * this.m_sAx;\n const LB = impulse * this.m_sBx;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n // Solve rotational motor constraint\n {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve point to line constraint\n {\n const Cdot = Vec2.dot(this.m_ay, vB) - Vec2.dot(this.m_ay, vA) + this.m_sBy * wB - this.m_sAy * wA;\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ay);\n const LA = impulse * this.m_sAy;\n const LB = impulse * this.m_sBy;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const ay = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), ay);\n const sBy = Vec2.crossVec2Vec2(rB, ay);\n\n const C = Vec2.dot(d, ay);\n\n const 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\n const impulse = k != 0.0 ? -C / k : 0.0;\n\n const P = Vec2.mulNumVec2(impulse, ay);\n const LA = impulse * sAy;\n const LB = impulse * sBy;\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * LA;\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * LB;\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) <= Settings.linearSlop;\n }\n\n}\n","import { World } from \"../dynamics/World\";\nimport { Body } from \"../dynamics/Body\";\nimport { Joint } from \"../dynamics/Joint\";\nimport { Fixture } from \"../dynamics/Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { Vec2 } from \"../common/Vec2\";\nimport { Vec3 } from \"../common/Vec3\";\nimport { ChainShape } from \"../collision/shape/ChainShape\";\n// import { BoxShape } from \"../collision/shape/BoxShape\";\nimport { EdgeShape } from \"../collision/shape/EdgeShape\";\nimport { PolygonShape } from \"../collision/shape/PolygonShape\";\nimport { CircleShape } from \"../collision/shape/CircleShape\";\nimport { DistanceJoint } from \"../dynamics/joint/DistanceJoint\";\nimport { FrictionJoint } from \"../dynamics/joint/FrictionJoint\";\nimport { GearJoint } from \"../dynamics/joint/GearJoint\";\nimport { MotorJoint } from \"../dynamics/joint/MotorJoint\";\nimport { MouseJoint } from \"../dynamics/joint/MouseJoint\";\nimport { PrismaticJoint } from \"../dynamics/joint/PrismaticJoint\";\nimport { PulleyJoint } from \"../dynamics/joint/PulleyJoint\";\nimport { RevoluteJoint } from \"../dynamics/joint/RevoluteJoint\";\nimport { RopeJoint } from \"../dynamics/joint/RopeJoint\";\nimport { WeldJoint } from \"../dynamics/joint/WeldJoint\";\nimport { WheelJoint } from \"../dynamics/joint/WheelJoint\";\n\nlet SID = 0;\n\n// Classes to be serialized as reference objects\nconst SERIALIZE_REF_TYPES = {\n \"World\": World,\n \"Body\": Body,\n \"Joint\": Joint,\n \"Fixture\": Fixture,\n \"Shape\": Shape,\n};\n\n// For deserializing reference objects by reference type\nconst 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};\n\n// For deserializing data objects by type field\nconst DESERIALIZE_BY_TYPE_FIELD = {\n [Body.STATIC]: Body,\n [Body.DYNAMIC]: Body,\n [Body.KINEMATIC]: Body,\n [ChainShape.TYPE]: ChainShape,\n // [BoxShape.TYPE]: BoxShape,\n [PolygonShape.TYPE]: PolygonShape,\n [EdgeShape.TYPE]: EdgeShape,\n [CircleShape.TYPE]: CircleShape,\n [DistanceJoint.TYPE]: DistanceJoint,\n [FrictionJoint.TYPE]: FrictionJoint,\n [GearJoint.TYPE]: GearJoint,\n [MotorJoint.TYPE]: MotorJoint,\n [MouseJoint.TYPE]: MouseJoint,\n [PrismaticJoint.TYPE]: PrismaticJoint,\n [PulleyJoint.TYPE]: PulleyJoint,\n [RevoluteJoint.TYPE]: RevoluteJoint,\n [RopeJoint.TYPE]: RopeJoint,\n [WeldJoint.TYPE]: WeldJoint,\n [WheelJoint.TYPE]: WheelJoint,\n};\n\n// dummy types\ntype DataType = any;\ntype ObjectType = any;\ntype ClassName = any;\n\ntype SerializedType = object[];\n\ntype RefType = {\n refIndex: number,\n refType: string,\n};\n\ntype SerializerOptions = {\n rootClass: ClassName,\n preSerialize?: (obj: ObjectType) => DataType,\n postSerialize?: (data: DataType, obj: any) => DataType,\n preDeserialize?: (data: DataType) => DataType,\n postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType,\n};\n\nconst DEFAULT_OPTIONS: SerializerOptions = {\n rootClass: World,\n preSerialize: function(obj) { return obj; },\n postSerialize: function(data, obj) { return data; },\n preDeserialize: function(data: DataType) { return data; },\n postDeserialize: function(obj, data) { return obj; },\n};\n\ntype DeserializeChildCallback = (classHint: any, obj: any, context: any) => any;\ntype ClassDeserializerMethod = (data: any, context: any, deserialize: DeserializeChildCallback) => any;\n\nexport class Serializer {\n private options: SerializerOptions;\n constructor(options: SerializerOptions) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n toJson = (root: T): SerializedType => {\n const preSerialize = this.options.preSerialize;\n const postSerialize = this.options.postSerialize;\n const json = [];\n\n // Breadth-first ref serialization queue\n const refQueue = [root];\n\n const refMemoById: Record = {};\n\n function addToRefQueue(value: any, typeName: string) {\n value.__sid = value.__sid || ++SID;\n if (!refMemoById[value.__sid]) {\n refQueue.push(value);\n const index = json.length + refQueue.length;\n const ref = {\n refIndex: index,\n refType: typeName\n };\n refMemoById[value.__sid] = ref;\n }\n return refMemoById[value.__sid];\n }\n\n function serializeWithHooks(obj: ObjectType) {\n obj = preSerialize(obj);\n let data = obj._serialize();\n data = postSerialize(data, obj);\n return data;\n }\n\n // traverse the object graph\n // ref objects are pushed into the queue\n // other objects are serialize in-place \n function traverse(value: any, noRefType = false) {\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n // object with _serialize function\n if (typeof value._serialize === \"function\") {\n if (!noRefType) {\n for (const typeName in SERIALIZE_REF_TYPES) {\n if (value instanceof SERIALIZE_REF_TYPES[typeName]) {\n return addToRefQueue(value, typeName);\n }\n }\n }\n // object with _serialize function\n value = serializeWithHooks(value);\n }\n // recursive for arrays any objects\n if (Array.isArray(value)) {\n const newValue = [];\n for (let key = 0; key < value.length; key++) {\n newValue[key] = traverse(value[key]);\n }\n value = newValue;\n\n } else {\n const newValue = {};\n for (const 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\n while (refQueue.length) {\n const obj = refQueue.shift();\n const str = traverse(obj, true);\n json.push(str);\n }\n\n return json;\n };\n\n fromJson = (json: SerializedType): T => {\n const preDeserialize = this.options.preDeserialize;\n const postDeserialize = this.options.postDeserialize;\n const rootClass = this.options.rootClass;\n\n const deserializedRefMemoByIndex: Record = {};\n\n function deserializeWithHooks(classHint: ClassName, data: DataType, context: any): ObjectType {\n if (!classHint || !classHint._deserialize) {\n classHint = DESERIALIZE_BY_TYPE_FIELD[data.type];\n }\n const deserializer = classHint && classHint._deserialize;\n if (!deserializer) {\n return;\n }\n data = preDeserialize(data);\n const classDeserializeFn = classHint._deserialize as ClassDeserializerMethod;\n let obj = classDeserializeFn(data, context, deserializeChild);\n obj = postDeserialize(obj, data);\n return obj;\n }\n\n /**\n * Recursive callback function to deserialize a child data object or reference object.\n * \n * @param classHint suggested class to deserialize obj to\n * @param dataOrRef data or reference object\n * @param context for example world when deserializing bodies and joints\n */\n function deserializeChild(classHint: ClassName, dataOrRef: DataType | RefType, context: any) {\n const isRefObject = dataOrRef.refIndex && dataOrRef.refType;\n if (!isRefObject) {\n return deserializeWithHooks(classHint, dataOrRef, context); \n }\n const ref = dataOrRef as RefType;\n if (DESERIALIZE_BY_REF_TYPE[ref.refType]) {\n classHint = DESERIALIZE_BY_REF_TYPE[ref.refType];\n }\n const refIndex = ref.refIndex;\n if (!deserializedRefMemoByIndex[refIndex]) {\n const data = json[refIndex];\n const obj = deserializeWithHooks(classHint, data, context);\n deserializedRefMemoByIndex[refIndex] = obj;\n }\n return deserializedRefMemoByIndex[refIndex];\n }\n\n const root = deserializeWithHooks(rootClass, json[0], null);\n\n return root;\n };\n\n static toJson: (root: World) => SerializedType;\n static fromJson: (json: SerializedType) => World;\n}\n\nconst worldSerializer = new Serializer({\n rootClass: World,\n});\n\nSerializer.fromJson = worldSerializer.fromJson;\nSerializer.toJson = worldSerializer.toJson;\n","import type { AABBValue } from \"../collision/AABB\";\nimport type { World } from \"../dynamics/World\";\nimport type { Joint } from \"../dynamics/Joint\";\nimport type { Fixture } from \"../dynamics/Fixture\";\nimport type { Body } from \"../dynamics/Body\";\n\nexport interface Style {\n stroke?: string;\n fill?: string;\n lineWidth?: number;\n}\n\ntype KEY = \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" |\n \"8\" | \"9\" | \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\" |\n \"H\" | \"I\" | \"J\" | \"K\" | \"L\" | \"M\" | \"N\" | \"O\" | \"P\" |\n \"Q\" | \"R\" | \"S\" | \"T\" | \"U\" | \"V\" | \"W\" | \"X\" | \"Y\" |\n \"Z\" | \"right\" | \"left\" | \"up\" | \"down\" | \"fire\";\n\nexport type ActiveKeys = { [key in KEY]?: boolean };\n\ntype TestbedMountOptions = {};\n\nexport abstract class Testbed {\n /**\n * Mounts testbed. Call start with a world to start simulation and rendering.\n */\n static mount(options?: TestbedMountOptions): Testbed {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Mounts testbed if needed, then starts simulation and rendering.\n * \n * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`.\n */\n static start(world: World): Testbed {\n const testbed = Testbed.mount();\n testbed.start(world);\n return testbed;\n }\n\n /** World viewbox width. */\n width: number = 80;\n\n /** World viewbox height. */\n height: number = 60;\n\n /** World viewbox center vertical offset. */\n x: number = 0;\n\n /** World viewbox center horizontal offset. */\n y: number = -10;\n\n /** @hidden */\n scaleY: number = -1;\n\n /** World simulation step frequency */\n hz: number = 60;\n\n /** World simulation speed, default is 1 */\n speed: number = 1;\n\n background: string = \"#222222\";\n\n mouseForce?: number;\n activeKeys: ActiveKeys = {};\n\n /** callback, to be implemented by user */\n step = (dt: number, t: number): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keydown = (keyCode: number, label: string): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keyup = (keyCode: number, label: string): void => {\n return;\n };\n\n abstract status(name: string, value: any): void;\n abstract status(value: object | string): void;\n\n abstract info(text: string): void;\n\n color(r: number, g: number, b: number): string {\n r = r * 256 | 0;\n g = g * 256 | 0;\n b = b * 256 | 0;\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n }\n\n abstract drawPoint(p: {x: number, y: number}, r: any, color: string): void;\n abstract drawCircle(p: {x: number, y: number}, r: number, color: string): void;\n abstract drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawSegment(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawPolygon(points: Array<{x: number, y: number}>, color: string): void;\n abstract drawAABB(aabb: AABBValue, color: string): void;\n\n abstract start(world: World): void;\n\n abstract findOne(query: string): (Body | Joint | Fixture | null);\n abstract findAll(query: string): (Body | Joint | Fixture)[];\n}\n\ntype TestbedFactoryOptions = string | {};\n\n/** @deprecated */\ntype TestbedCallback = (testbed: Testbed) => (World | undefined);\n\n/** @deprecated */\nexport function testbed(callback: TestbedCallback): void;\n/** @deprecated */\nexport function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void;\n/** @internal */\nexport function testbed(a?: any, b?: any) {\n let callback: TestbedCallback | undefined;\n let options;\n if (typeof a === \"function\") {\n callback = a;\n options = b;\n } else if (typeof b === \"function\") {\n callback = b;\n options = a;\n } else {\n options = a ?? b;\n }\n const testbed = Testbed.mount(options);\n if (callback) {\n // this is for backwards compatibility\n const world = callback(testbed) || (testbed as any).world;\n testbed.start(world);\n } else {\n return testbed;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2Value } from \"../../common/Vec2\";\nimport { PolygonShape } from \"./PolygonShape\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * A rectangle polygon which extend PolygonShape.\n */\nexport class BoxShape extends PolygonShape {\n // note that box is serialized/deserialized as polygon\n static TYPE = \"polygon\" as const;\n\n /**\n * \n * @param halfWidth \n * @param halfHeight \n * @param center coordinate of the center of the box relative to the body\n * @param angle angle of the box relative to the body\n */\n constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof BoxShape)) {\n return new BoxShape(halfWidth, halfHeight, center, angle);\n }\n\n super();\n\n this._setAsBox(halfWidth, halfHeight, center, angle);\n }\n}\n\nexport const Box = BoxShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\nimport * as matrix from \"../../common/Matrix\";\nimport { Transform } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact);\n\n/** @internal */ function CircleCircleContact(manifold: Manifold, xfA: Transform, fixtureA: Fixture, indexA: number, xfB: Transform, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == CircleShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollideCircles(manifold, fixtureA.getShape() as CircleShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const pA = matrix.vec2(0, 0);\n/** @internal */ const pB = matrix.vec2(0, 0);\n\nexport const CollideCircles = function (manifold: Manifold, circleA: CircleShape, xfA: Transform, circleB: CircleShape, xfB: Transform): void {\n manifold.pointCount = 0;\n\n matrix.transformVec2(pA, xfA, circleA.m_p);\n matrix.transformVec2(pB, xfB, circleB.m_p);\n\n const distSqr = matrix.distSqrVec2(pB, pA);\n const rA = circleA.m_radius;\n const rB = circleB.m_radius;\n const radius = rA + rB;\n if (distSqr > radius * radius) {\n return;\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.copyVec2(manifold.localPoint, circleA.m_p);\n matrix.zeroVec2(manifold.localNormal);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact);\nContact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact);\n\n/** @internal */ function EdgeCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const shapeA = fixtureA.getShape() as EdgeShape;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\nfunction ChainCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const chain = fixtureA.getShape() as ChainShape;\n const edge = new EdgeShape();\n chain.getChildEdge(edge, indexA);\n\n const shapeA = edge;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const Q = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n// Compute contact points for edge versus circle.\n// This accounts for edge connectivity.\nexport const CollideEdgeCircle = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle in frame of edge\n matrix.retransformVec2(Q, xfB, xfA, circleB.m_p);\n\n const A = edgeA.m_vertex1;\n const B = edgeA.m_vertex2;\n matrix.subVec2(e, B, A);\n\n // Barycentric coordinates\n const u = matrix.dotVec2(e, B) - matrix.dotVec2(e, Q);\n const v = matrix.dotVec2(e, Q) - matrix.dotVec2(e, A);\n\n const radius = edgeA.m_radius + circleB.m_radius;\n\n // Region A\n if (v <= 0.0) {\n matrix.copyVec2(P, A);\n const dd = matrix.distSqrVec2(Q, A);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to A?\n if (edgeA.m_hasVertex0) {\n const A1 = edgeA.m_vertex0;\n const B1 = A;\n matrix.subVec2(e1, B1, A1);\n const u1 = matrix.dotVec2(e1, B1) - matrix.dotVec2(e1, Q);\n\n // Is the circle in Region AB of the previous edge?\n if (u1 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Region B\n if (u <= 0.0) {\n matrix.copyVec2(P, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to B?\n if (edgeA.m_hasVertex3) {\n const B2 = edgeA.m_vertex3;\n const A2 = B;\n matrix.subVec2(e2, B2, A2);\n const v2 = matrix.dotVec2(e2, Q) - matrix.dotVec2(e2, A2);\n\n // Is the circle in Region AB of the next edge?\n if (v2 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n\n return;\n }\n\n // Region AB\n const den = matrix.lengthSqrVec2(e);\n _ASSERT && console.assert(den > 0.0);\n matrix.combine2Vec2(P, u / den, A, v / den, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n matrix.crossNumVec2(n, 1, e);\n if (matrix.dotVec2(n, Q) - matrix.dotVec2(n, A) < 0.0) {\n matrix.negVec2(n);\n }\n matrix.normalizeVec2(n);\n\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, n);\n matrix.copyVec2(manifold.localPoint, A);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const incidentEdge = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipSegmentToLineNormal = matrix.vec2(0, 0);\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const v11 = matrix.vec2(0, 0);\n/** @internal */ const v12 = matrix.vec2(0, 0);\n/** @internal */ const localTangent = matrix.vec2(0, 0);\n/** @internal */ const localNormal = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n\n\nContact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact);\n\n/** @internal */ function PolygonContact(\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number,\n): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == PolygonShape.TYPE);\n CollidePolygons(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ interface MaxSeparation {\n maxSeparation: number;\n bestIndex: number;\n}\n\n/**\n * Find the max separation between poly1 and poly2 using edge normals from\n * poly1.\n */\n/** @internal */ function findMaxSeparation(\n poly1: PolygonShape,\n xf1: TransformValue,\n poly2: PolygonShape,\n xf2: TransformValue,\n output: MaxSeparation,\n): void {\n const count1 = poly1.m_count;\n const count2 = poly2.m_count;\n const n1s = poly1.m_normals;\n const v1s = poly1.m_vertices;\n const v2s = poly2.m_vertices;\n\n matrix.detransformTransform(xf, xf2, xf1);\n\n let bestIndex = 0;\n let maxSeparation = -Infinity;\n for (let i = 0; i < count1; ++i) {\n // Get poly1 normal in frame2.\n matrix.rotVec2(n, xf.q, n1s[i]);\n matrix.transformVec2(v1, xf, v1s[i]);\n\n // Find deepest point for normal i.\n let si = Infinity;\n for (let j = 0; j < count2; ++j) {\n const sij = matrix.dotVec2(n, v2s[j]) - matrix.dotVec2(n, v1);\n if (sij < si) {\n si = sij;\n }\n }\n\n if (si > maxSeparation) {\n maxSeparation = si;\n bestIndex = i;\n }\n }\n\n // used to keep last FindMaxSeparation call values\n output.maxSeparation = maxSeparation;\n output.bestIndex = bestIndex;\n}\n\n/** @internal */ function findIncidentEdge(\n clipVertex: ClipVertex[],\n poly1: PolygonShape,\n xf1: TransformValue,\n edge1: number,\n poly2: PolygonShape,\n xf2: TransformValue,\n): void {\n const normals1 = poly1.m_normals;\n\n const count2 = poly2.m_count;\n const vertices2 = poly2.m_vertices;\n const normals2 = poly2.m_normals;\n\n _ASSERT && console.assert(0 <= edge1 && edge1 < poly1.m_count);\n\n // Get the normal of the reference edge in poly2's frame.\n matrix.rerotVec2(normal1, xf2.q, xf1.q, normals1[edge1]);\n\n // Find the incident edge on poly2.\n let index = 0;\n let minDot = Infinity;\n for (let i = 0; i < count2; ++i) {\n const dot = matrix.dotVec2(normal1, normals2[i]);\n if (dot < minDot) {\n minDot = dot;\n index = i;\n }\n }\n\n // Build the clip vertices for the incident edge.\n const i1 = index;\n const i2 = i1 + 1 < count2 ? i1 + 1 : 0;\n\n matrix.transformVec2(clipVertex[0].v, xf2, vertices2[i1]);\n clipVertex[0].id.setFeatures(edge1, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.transformVec2(clipVertex[1].v, xf2, vertices2[i2]);\n clipVertex[1].id.setFeatures(edge1, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n}\n\n/** @internal */ const maxSeparation = {\n maxSeparation: 0,\n bestIndex: 0,\n};\n\n/**\n *\n * Find edge normal of max separation on A - return if separating axis is found
\n * Find edge normal of max separation on B - return if separation axis is found
\n * Choose reference edge as min(minA, minB)
\n * Find incident edge
\n * Clip\n *\n * The normal points from 1 to 2\n */\nexport const CollidePolygons = function (\n manifold: Manifold,\n polyA: PolygonShape,\n xfA: TransformValue,\n polyB: PolygonShape,\n xfB: TransformValue,\n): void {\n manifold.pointCount = 0;\n const totalRadius = polyA.m_radius + polyB.m_radius;\n\n findMaxSeparation(polyA, xfA, polyB, xfB, maxSeparation);\n const edgeA = maxSeparation.bestIndex;\n const separationA = maxSeparation.maxSeparation;\n if (separationA > totalRadius)\n return;\n\n findMaxSeparation(polyB, xfB, polyA, xfA, maxSeparation);\n const edgeB = maxSeparation.bestIndex;\n const separationB = maxSeparation.maxSeparation;\n if (separationB > totalRadius)\n return;\n\n let poly1: PolygonShape; // reference polygon\n let poly2: PolygonShape; // incident polygon\n let xf1: TransformValue;\n let xf2: TransformValue;\n let edge1: number; // reference edge\n let flip: boolean;\n const k_tol = 0.1 * Settings.linearSlop;\n\n if (separationB > separationA + k_tol) {\n poly1 = polyB;\n poly2 = polyA;\n xf1 = xfB;\n xf2 = xfA;\n edge1 = edgeB;\n manifold.type = ManifoldType.e_faceB;\n flip = true;\n } else {\n poly1 = polyA;\n poly2 = polyB;\n xf1 = xfA;\n xf2 = xfB;\n edge1 = edgeA;\n manifold.type = ManifoldType.e_faceA;\n flip = false;\n }\n\n incidentEdge[0].recycle(), incidentEdge[1].recycle();\n findIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2);\n\n const count1 = poly1.m_count;\n const vertices1 = poly1.m_vertices;\n\n const iv1 = edge1;\n const iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0;\n\n matrix.copyVec2(v11, vertices1[iv1]);\n matrix.copyVec2(v12, vertices1[iv2]);\n\n matrix.subVec2(localTangent, v12, v11);\n matrix.normalizeVec2(localTangent);\n\n matrix.crossVec2Num(localNormal, localTangent, 1.0);\n matrix.combine2Vec2(planePoint, 0.5, v11, 0.5, v12);\n\n matrix.rotVec2(tangent, xf1.q, localTangent);\n matrix.crossVec2Num(normal, tangent, 1.0);\n\n matrix.transformVec2(v11, xf1, v11);\n matrix.transformVec2(v12, xf1, v12);\n\n // Face offset.\n const frontOffset = matrix.dotVec2(normal, v11);\n\n // Side offsets, extended by polytope skin thickness.\n const sideOffset1 = -matrix.dotVec2(tangent, v11) + totalRadius;\n const sideOffset2 = matrix.dotVec2(tangent, v12) + totalRadius;\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n matrix.setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y);\n const np1 = clipSegmentToLine(clipPoints1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1);\n\n if (np1 < 2) {\n return;\n }\n\n // Clip to negative box side 1\n matrix.setVec2(clipSegmentToLineNormal, tangent.x, tangent.y);\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, clipSegmentToLineNormal, sideOffset2, iv2);\n\n if (np2 < 2) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n matrix.copyVec2(manifold.localNormal, localNormal);\n matrix.copyVec2(manifold.localPoint, planePoint);\n\n let pointCount = 0;\n for (let i = 0; i < clipPoints2.length/* maxManifoldPoints */; ++i) {\n const separation = matrix.dotVec2(normal, clipPoints2[i].v) - frontOffset;\n\n if (separation <= totalRadius) {\n const cp = manifold.points[pointCount];\n matrix.detransformVec2(cp.localPoint, xf2, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n if (flip) {\n // Swap features\n cp.id.swapFeatures();\n }\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact);\n\n/** @internal */ function PolygonCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollidePolygonCircle(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const cLocal = matrix.vec2(0, 0);\n/** @internal */ const faceCenter = matrix.vec2(0, 0);\n\nexport const CollidePolygonCircle = function (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle position in the frame of the polygon.\n matrix.retransformVec2(cLocal, xfB, xfA, circleB.m_p);\n\n // Find the min separating edge.\n let normalIndex = 0;\n let separation = -Infinity;\n const radius = polygonA.m_radius + circleB.m_radius;\n const vertexCount = polygonA.m_count;\n const vertices = polygonA.m_vertices;\n const normals = polygonA.m_normals;\n\n for (let i = 0; i < vertexCount; ++i) {\n const s = matrix.dotVec2(normals[i], cLocal) - matrix.dotVec2(normals[i], vertices[i]);\n\n if (s > radius) {\n // Early out.\n return;\n }\n\n if (s > separation) {\n separation = s;\n normalIndex = i;\n }\n }\n\n // Vertices that subtend the incident face.\n const vertIndex1 = normalIndex;\n const vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0;\n const v1 = vertices[vertIndex1];\n const v2 = vertices[vertIndex2];\n\n // If the center is inside the polygon ...\n if (separation < EPSILON) {\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[normalIndex]);\n matrix.combine2Vec2(manifold.localPoint, 0.5, v1, 0.5, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Compute barycentric coordinates\n // u1 = (cLocal - v1) dot (v2 - v1))\n const u1 = matrix.dotVec2(cLocal, v2) - matrix.dotVec2(cLocal, v1) - matrix.dotVec2(v1, v2) + matrix.dotVec2(v1, v1);\n // u2 = (cLocal - v2) dot (v1 - v2)\n const u2 = matrix.dotVec2(cLocal, v1) - matrix.dotVec2(cLocal, v2) - matrix.dotVec2(v2, v1) + matrix.dotVec2(v2, v2);\n if (u1 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v1) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v1);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v1);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else if (u2 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v2) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v2);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else {\n matrix.combine2Vec2(faceCenter, 0.5, v1, 0.5, v2);\n const separation = matrix.dotVec2(cLocal, normals[vertIndex1]) - matrix.dotVec2(faceCenter, normals[vertIndex1]);\n if (separation > radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[vertIndex1]);\n matrix.copyVec2(manifold.localPoint, faceCenter);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n }\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_min = Math.min;\n\nContact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact);\nContact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact);\n\n/** @internal */ function EdgePolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n CollideEdgePolygon(manifold, fA.getShape() as EdgeShape, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n// reused\n/** @internal */ const edge_reuse = new EdgeShape();\n\n/** @internal */ function ChainPolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n const chain = fA.getShape() as ChainShape;\n chain.getChildEdge(edge_reuse, indexA);\n\n CollideEdgePolygon(manifold, edge_reuse, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ enum EPAxisType {\n e_unknown = -1,\n e_edgeA = 1,\n e_edgeB = 2,\n}\n\n// unused?\n/** @internal */ enum VertexType {\n e_isolated = 0,\n e_concave = 1,\n e_convex = 2,\n}\n\n/**\n * This structure is used to keep track of the best separating axis.\n */\n/** @internal */ class EPAxis {\n type: EPAxisType;\n index: number;\n separation: number;\n}\n\n/**\n * This holds polygon B expressed in frame A.\n */\n/** @internal */ class TempPolygon {\n vertices: Vec2Value[] = []; // [Settings.maxPolygonVertices]\n normals: Vec2Value[] = []; // [Settings.maxPolygonVertices];\n count: number = 0;\n constructor() {\n for (let i = 0; i < Settings.maxPolygonVertices; i++) {\n this.vertices.push(matrix.vec2(0, 0));\n this.normals.push(matrix.vec2(0, 0));\n }\n }\n}\n\n/**\n * Reference face used for clipping\n */\n/** @internal */ class ReferenceFace {\n i1: number;\n i2: number;\n readonly v1 = matrix.vec2(0 ,0);\n readonly v2 = matrix.vec2(0 ,0);\n readonly normal = matrix.vec2(0 ,0);\n readonly sideNormal1 = matrix.vec2(0 ,0);\n sideOffset1: number;\n readonly sideNormal2 = matrix.vec2(0 ,0);\n sideOffset2: number;\n recycle() {\n matrix.zeroVec2(this.v1);\n matrix.zeroVec2(this.v2);\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.sideNormal1);\n matrix.zeroVec2(this.sideNormal2);\n }\n}\n\n// reused\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const ie = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const edgeAxis = new EPAxis();\n/** @internal */ const polygonAxis = new EPAxis();\n/** @internal */ const polygonBA = new TempPolygon();\n/** @internal */ const rf = new ReferenceFace();\n/** @internal */ const centroidB = matrix.vec2(0, 0);\n/** @internal */ const edge0 = matrix.vec2(0, 0);\n/** @internal */ const edge1 = matrix.vec2(0, 0);\n/** @internal */ const edge2 = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal0 = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n/** @internal */ const normal2 = matrix.vec2(0, 0);\n/** @internal */ const lowerLimit = matrix.vec2(0, 0);\n/** @internal */ const upperLimit = matrix.vec2(0, 0);\n/** @internal */ const perp = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n/**\n * This function collides and edge and a polygon, taking into account edge\n * adjacency.\n */\nexport const CollideEdgePolygon = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue): void {\n // Algorithm:\n // 1. Classify v1 and v2\n // 2. Classify polygon centroid as front or back\n // 3. Flip normal if necessary\n // 4. Initialize normal range to [-pi, pi] about face normal\n // 5. Adjust normal range according to adjacent edges\n // 6. Visit each separating axes, only accept axes within the range\n // 7. Return if _any_ axis indicates separation\n // 8. Clip\n\n // let m_type1: VertexType;\n // let m_type2: VertexType;\n\n matrix.detransformTransform(xf, xfA, xfB);\n matrix.transformVec2(centroidB, xf, polygonB.m_centroid);\n\n const v0 = edgeA.m_vertex0;\n const v1 = edgeA.m_vertex1;\n const v2 = edgeA.m_vertex2;\n const v3 = edgeA.m_vertex3;\n\n const hasVertex0 = edgeA.m_hasVertex0;\n const hasVertex3 = edgeA.m_hasVertex3;\n\n matrix.subVec2(edge1, v2, v1);\n matrix.normalizeVec2(edge1);\n matrix.setVec2(normal1, edge1.y, -edge1.x);\n const offset1 = matrix.dotVec2(normal1, centroidB) - matrix.dotVec2(normal1, v1);\n let offset0 = 0.0;\n let offset2 = 0.0;\n let convex1 = false;\n let convex2 = false;\n\n matrix.zeroVec2(normal0);\n matrix.zeroVec2(normal2);\n\n // Is there a preceding edge?\n if (hasVertex0) {\n matrix.subVec2(edge0, v1, v0);\n matrix.normalizeVec2(edge0);\n matrix.setVec2(normal0, edge0.y, -edge0.x);\n convex1 = matrix.crossVec2Vec2(edge0, edge1) >= 0.0;\n offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0);\n }\n\n // Is there a following edge?\n if (hasVertex3) {\n matrix.subVec2(edge2, v3, v2);\n matrix.normalizeVec2(edge2);\n matrix.setVec2(normal2, edge2.y, -edge2.x);\n convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0.0;\n offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v2);\n }\n\n let front: boolean;\n matrix.zeroVec2(normal);\n matrix.zeroVec2(lowerLimit);\n matrix.zeroVec2(upperLimit);\n\n // Determine front or back collision. Determine collision normal limits.\n if (hasVertex0 && hasVertex3) {\n if (convex1 && convex2) {\n front = offset0 >= 0.0 || offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex1) {\n front = offset0 >= 0.0 || (offset1 >= 0.0 && offset2 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex2) {\n front = offset2 >= 0.0 || (offset0 >= 0.0 && offset1 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex0) {\n if (convex1) {\n front = offset0 >= 0.0 || offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex3) {\n if (convex2) {\n front = offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n } else {\n front = offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n } else {\n front = offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n\n // Get polygonB in frameA\n polygonBA.count = polygonB.m_count;\n for (let i = 0; i < polygonB.m_count; ++i) {\n matrix.transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]);\n matrix.rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]);\n }\n\n const radius = polygonB.m_radius + edgeA.m_radius;\n\n manifold.pointCount = 0;\n\n { // ComputeEdgeSeparation\n edgeAxis.type = EPAxisType.e_edgeA;\n edgeAxis.index = front ? 0 : 1;\n edgeAxis.separation = Infinity;\n\n for (let i = 0; i < polygonBA.count; ++i) {\n const v = polygonBA.vertices[i];\n const s = matrix.dotVec2(normal, v) - matrix.dotVec2(normal, v1);\n if (s < edgeAxis.separation) {\n edgeAxis.separation = s;\n }\n }\n }\n\n // If no valid normal can be found than this edge should not collide.\n // @ts-ignore todo: why we need this if here?\n if (edgeAxis.type == EPAxisType.e_unknown) {\n return;\n }\n\n if (edgeAxis.separation > radius) {\n return;\n }\n\n { // ComputePolygonSeparation\n polygonAxis.type = EPAxisType.e_unknown;\n polygonAxis.index = -1;\n polygonAxis.separation = -Infinity;\n\n matrix.setVec2(perp, -normal.y, normal.x);\n\n for (let i = 0; i < polygonBA.count; ++i) {\n matrix.scaleVec2(n, -1, polygonBA.normals[i]);\n\n const s1 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v1);\n const s2 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v2);\n const s = math_min(s1, s2);\n\n if (s > radius) {\n // No collision\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n break;\n }\n\n // Adjacency\n if (matrix.dotVec2(n, perp) >= 0.0) {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(upperLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n } else {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(lowerLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n }\n\n if (s > polygonAxis.separation) {\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n }\n }\n }\n\n if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) {\n return;\n }\n\n // Use hysteresis for jitter reduction.\n const k_relativeTol = 0.98;\n const k_absoluteTol = 0.001;\n\n let primaryAxis: EPAxis;\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\n ie[0].recycle(), ie[1].recycle();\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n manifold.type = ManifoldType.e_faceA;\n\n // Search for the polygon normal that is most anti-parallel to the edge\n // normal.\n let bestIndex = 0;\n let bestValue = matrix.dotVec2(normal, polygonBA.normals[0]);\n for (let i = 1; i < polygonBA.count; ++i) {\n const value = matrix.dotVec2(normal, polygonBA.normals[i]);\n if (value < bestValue) {\n bestValue = value;\n bestIndex = i;\n }\n }\n\n const i1 = bestIndex;\n const i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0;\n\n matrix.copyVec2(ie[0].v, polygonBA.vertices[i1]);\n ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.copyVec2(ie[1].v, polygonBA.vertices[i2]);\n ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n\n if (front) {\n rf.i1 = 0;\n rf.i2 = 1;\n matrix.copyVec2(rf.v1, v1);\n matrix.copyVec2(rf.v2, v2);\n matrix.copyVec2(rf.normal, normal1);\n } else {\n rf.i1 = 1;\n rf.i2 = 0;\n matrix.copyVec2(rf.v1, v2);\n matrix.copyVec2(rf.v2, v1);\n matrix.scaleVec2(rf.normal, -1, normal1);\n }\n } else {\n manifold.type = ManifoldType.e_faceB;\n\n matrix.copyVec2(ie[0].v, v1);\n ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n matrix.copyVec2(ie[1].v, v2);\n ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n rf.i1 = primaryAxis.index;\n rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0;\n matrix.copyVec2(rf.v1, polygonBA.vertices[rf.i1]);\n matrix.copyVec2(rf.v2, polygonBA.vertices[rf.i2]);\n matrix.copyVec2(rf.normal, polygonBA.normals[rf.i1]);\n }\n\n matrix.setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x);\n matrix.setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y);\n rf.sideOffset1 = matrix.dotVec2(rf.sideNormal1, rf.v1);\n rf.sideOffset2 = matrix.dotVec2(rf.sideNormal2, rf.v2);\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n const np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1);\n\n if (np1 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Clip to negative box side 1\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2);\n\n if (np2 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.copyVec2(manifold.localNormal, rf.normal);\n matrix.copyVec2(manifold.localPoint, rf.v1);\n } else {\n matrix.copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]);\n matrix.copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]);\n }\n\n let pointCount = 0;\n for (let i = 0; i < Settings.maxManifoldPoints; ++i) {\n const separation = matrix.dotVec2(rf.normal, clipPoints2[i].v) - matrix.dotVec2(rf.normal, rf.v1);\n\n if (separation <= radius) {\n const cp = manifold.points[pointCount]; // ManifoldPoint\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.detransformVec2(cp.localPoint, xf, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n } else {\n matrix.copyVec2(cp.localPoint, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n cp.id.swapFeatures();\n }\n\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","import { CollidePolygons } from \"./collision/shape/CollidePolygon\";\nimport { Settings } from \"./Settings\";\nimport { Sweep } from \"./common/Sweep\";\nimport { DynamicTree } from \"./collision/DynamicTree\";\nimport { Manifold } from \"./collision/Manifold\";\nimport { Distance } from \"./collision/Distance\";\nimport { TimeOfImpact } from \"./collision/TimeOfImpact\";\nimport { stats } from \"./util/stats\";\n\n/** @hidden @deprecated Merged with main namespace */\nexport const internal = {\n CollidePolygons,\n Settings,\n Sweep,\n Manifold,\n Distance,\n TimeOfImpact,\n DynamicTree,\n stats\n};\n","/**\n * Stage.js 1.0.0-alpha.5\n *\n * @copyright Copyright (c) 2024 Ali Shakiba\n * @license The MIT License (MIT)\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 */\nvar math_random = Math.random;\nvar math_sqrt = Math.sqrt;\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}\nfunction wrap(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 length(x, y) {\n return math_sqrt(x * x + y * y);\n}\nvar math = Object.create(Math);\nmath.random = random;\nmath.wrap = wrap;\nmath.clamp = clamp;\nmath.length = length;\nmath.rotate = wrap;\nmath.limit = clamp;\nvar Matrix = (\n /** @class */\n function() {\n function Matrix2(a, b, c, d, e, f) {\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.e = 0;\n this.f = 0;\n if (typeof a === \"object\") {\n this.reset(a);\n } else {\n this.reset(a, b, c, d, e, f);\n }\n }\n Matrix2.prototype.toString = function() {\n return \"[\" + this.a + \", \" + this.b + \", \" + this.c + \", \" + this.d + \", \" + this.e + \", \" + this.f + \"]\";\n };\n Matrix2.prototype.clone = function() {\n return new Matrix2(this.a, this.b, this.c, this.d, this.e, this.f);\n };\n Matrix2.prototype.reset = function(a, b, c, d, e, f) {\n this._dirty = true;\n if (typeof a === \"object\") {\n this.a = a.a;\n this.d = a.d;\n this.b = a.b;\n this.c = a.c;\n this.e = a.e;\n this.f = a.f;\n } else {\n this.a = typeof a === \"number\" ? a : 1;\n this.b = typeof b === \"number\" ? b : 0;\n this.c = typeof c === \"number\" ? c : 0;\n this.d = typeof d === \"number\" ? d : 1;\n this.e = typeof e === \"number\" ? e : 0;\n this.f = typeof f === \"number\" ? f : 0;\n }\n return this;\n };\n Matrix2.prototype.identity = function() {\n this._dirty = true;\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.e = 0;\n this.f = 0;\n return this;\n };\n Matrix2.prototype.rotate = function(angle) {\n if (!angle) {\n return this;\n }\n this._dirty = true;\n var u = angle ? Math.cos(angle) : 1;\n var v = angle ? Math.sin(angle) : 0;\n var a = u * this.a - v * this.b;\n var b = u * this.b + v * this.a;\n var c = u * this.c - v * this.d;\n var d = u * this.d + v * this.c;\n var e = u * this.e - v * this.f;\n var f = u * this.f + v * this.e;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.translate = function(x, y) {\n if (!x && !y) {\n return this;\n }\n this._dirty = true;\n this.e += x;\n this.f += y;\n return this;\n };\n Matrix2.prototype.scale = function(x, y) {\n if (!(x - 1) && !(y - 1)) {\n return this;\n }\n this._dirty = true;\n this.a *= x;\n this.b *= y;\n this.c *= x;\n this.d *= y;\n this.e *= x;\n this.f *= y;\n return this;\n };\n Matrix2.prototype.skew = function(x, y) {\n if (!x && !y) {\n return this;\n }\n this._dirty = true;\n var a = this.a + this.b * x;\n var b = this.b + this.a * y;\n var c = this.c + this.d * x;\n var d = this.d + this.c * y;\n var e = this.e + this.f * x;\n var f = this.f + this.e * y;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.concat = function(m) {\n this._dirty = true;\n var a = this.a * m.a + this.b * m.c;\n var b = this.b * m.d + this.a * m.b;\n var c = this.c * m.a + this.d * m.c;\n var d = this.d * m.d + this.c * m.b;\n var e = this.e * m.a + m.e + this.f * m.c;\n var f = this.f * m.d + m.f + this.e * m.b;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.inverse = function() {\n if (this._dirty) {\n this._dirty = false;\n if (!this.inverted) {\n this.inverted = new Matrix2();\n }\n var z = this.a * this.d - this.b * this.c;\n this.inverted.a = this.d / z;\n this.inverted.b = -this.b / z;\n this.inverted.c = -this.c / z;\n this.inverted.d = this.a / z;\n this.inverted.e = (this.c * this.f - this.e * this.d) / z;\n this.inverted.f = (this.e * this.b - this.a * this.f) / z;\n }\n return this.inverted;\n };\n Matrix2.prototype.map = function(p, q) {\n q = q || { x: 0, y: 0 };\n q.x = this.a * p.x + this.c * p.y + this.e;\n q.y = this.b * p.x + this.d * p.y + this.f;\n return q;\n };\n Matrix2.prototype.mapX = function(x, y) {\n if (typeof x === \"object\") {\n y = x.y;\n x = x.x;\n }\n return this.a * x + this.c * y + this.e;\n };\n Matrix2.prototype.mapY = function(x, y) {\n if (typeof x === \"object\") {\n y = x.y;\n x = x.x;\n }\n return this.b * x + this.d * y + this.f;\n };\n return Matrix2;\n }()\n);\nvar objectToString = Object.prototype.toString;\nfunction isFn(value) {\n var str = objectToString.call(value);\n return str === \"[object Function]\" || str === \"[object GeneratorFunction]\" || str === \"[object AsyncFunction]\";\n}\nfunction isHash(value) {\n return objectToString.call(value) === \"[object Object]\" && value.constructor === Object;\n}\nconst stats = {\n create: 0,\n tick: 0,\n node: 0,\n draw: 0,\n fps: 0\n};\nvar uid = function() {\n return Date.now().toString(36) + Math.random().toString(36).slice(2);\n};\nvar Texture = (\n /** @class */\n function() {\n function Texture2() {\n this.uid = \"texture:\" + uid();\n this.sx = 0;\n this.sy = 0;\n this.dx = 0;\n this.dy = 0;\n }\n Texture2.prototype.setSourceCoordinate = function(x, y) {\n this.sx = x;\n this.sy = y;\n };\n Texture2.prototype.setSourceDimension = function(w, h) {\n this.sw = w;\n this.sh = h;\n };\n Texture2.prototype.setDestinationCoordinate = function(x, y) {\n this.dx = x;\n this.dy = y;\n };\n Texture2.prototype.setDestinationDimension = function(w, h) {\n this.dw = w;\n this.dh = h;\n };\n Texture2.prototype.draw = function(context, x1, y1, w1, h1, x2, y2, w2, h2) {\n var sx = this.sx;\n var sy = this.sy;\n var sw = this.sw;\n var sh = this.sh;\n var dx = this.dx;\n var dy = this.dy;\n var dw = this.dw;\n var dh = this.dh;\n if (typeof x1 === \"number\" || typeof y1 === \"number\" || typeof w1 === \"number\" || typeof h1 === \"number\" || typeof x2 === \"number\" || typeof y2 === \"number\" || typeof w2 === \"number\" || typeof h2 === \"number\") {\n if (typeof x2 === \"number\" || typeof y2 === \"number\" || typeof w2 === \"number\" || typeof h2 === \"number\") {\n sx += x1;\n sy += y1;\n sw = w1 !== null && w1 !== void 0 ? w1 : sw;\n sh = h1 !== null && h1 !== void 0 ? h1 : sh;\n dx += x2;\n dy += y2;\n dw = w2 !== null && w2 !== void 0 ? w2 : dw;\n dh = h2 !== null && h2 !== void 0 ? h2 : dh;\n } else {\n dx += x1;\n dy += y1;\n dw = w1;\n dh = h1;\n }\n }\n this.drawWithNormalizedArgs(context, sx, sy, sw, sh, dx, dy, dw, dh);\n };\n return Texture2;\n }()\n);\nvar __extends$9 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar ImageTexture = (\n /** @class */\n function(_super) {\n __extends$9(ImageTexture2, _super);\n function ImageTexture2(source, pixelRatio) {\n var _this = _super.call(this) || this;\n _this._pixelRatio = 1;\n if (typeof source === \"object\") {\n _this.setSourceImage(source, pixelRatio);\n }\n return _this;\n }\n ImageTexture2.prototype.setSourceImage = function(image2, pixelRatio) {\n if (pixelRatio === void 0) {\n pixelRatio = 1;\n }\n this._source = image2;\n this._pixelRatio = pixelRatio;\n };\n ImageTexture2.prototype.getWidth = function() {\n return this._source.width / this._pixelRatio;\n };\n ImageTexture2.prototype.getHeight = function() {\n return this._source.height / this._pixelRatio;\n };\n ImageTexture2.prototype.prerender = function(context) {\n return false;\n };\n ImageTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var image2 = this._source;\n if (image2 === null || typeof image2 !== \"object\") {\n return;\n }\n sw = sw !== null && sw !== void 0 ? sw : this.getWidth();\n sh = sh !== null && sh !== void 0 ? sh : this.getHeight();\n dw = dw !== null && dw !== void 0 ? dw : sw;\n dh = dh !== null && dh !== void 0 ? dh : sh;\n sx *= this._pixelRatio;\n sy *= this._pixelRatio;\n sw *= this._pixelRatio;\n sh *= this._pixelRatio;\n try {\n stats.draw++;\n context.drawImage(image2, sx, sy, sw, sh, dx, dy, dw, dh);\n } catch (ex) {\n if (!this._draw_failed) {\n console.log(\"Unable to draw: \", image2);\n console.log(ex);\n this._draw_failed = true;\n }\n }\n };\n return ImageTexture2;\n }(Texture)\n);\nvar __extends$8 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar PipeTexture = (\n /** @class */\n function(_super) {\n __extends$8(PipeTexture2, _super);\n function PipeTexture2(source) {\n var _this = _super.call(this) || this;\n _this._source = source;\n return _this;\n }\n PipeTexture2.prototype.setSourceTexture = function(texture2) {\n this._source = texture2;\n };\n PipeTexture2.prototype.getWidth = function() {\n var _a, _b;\n return (_b = (_a = this.dw) !== null && _a !== void 0 ? _a : this.sw) !== null && _b !== void 0 ? _b : this._source.getWidth();\n };\n PipeTexture2.prototype.getHeight = function() {\n var _a, _b;\n return (_b = (_a = this.dh) !== null && _a !== void 0 ? _a : this.sh) !== null && _b !== void 0 ? _b : this._source.getHeight();\n };\n PipeTexture2.prototype.prerender = function(context) {\n return this._source.prerender(context);\n };\n PipeTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var texture2 = this._source;\n if (texture2 === null || typeof texture2 !== \"object\") {\n return;\n }\n texture2.draw(context, sx, sy, sw, sh, dx, dy, dw, dh);\n };\n return PipeTexture2;\n }(Texture)\n);\nvar __extends$7 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __awaiter$1 = function(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator$1 = function(thisArg, body) {\n var _ = { label: 0, sent: function() {\n if (t[0] & 1)\n throw t[1];\n return t[1];\n }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f)\n throw new TypeError(\"Generator is already executing.\");\n while (_)\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n return t;\n if (y = 0, t)\n op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return { value: op[1], done: false };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2])\n _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5)\n throw op[1];\n return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar Atlas = (\n /** @class */\n function(_super) {\n __extends$7(Atlas2, _super);\n function Atlas2(def) {\n if (def === void 0) {\n def = {};\n }\n var _this = _super.call(this) || this;\n _this.pipeSpriteTexture = function(def2) {\n var map = _this._map;\n var ppu = _this._ppu;\n var trim = _this._trim;\n if (!def2) {\n return void 0;\n }\n def2 = Object.assign({}, def2);\n if (isFn(map)) {\n def2 = map(def2);\n }\n if (ppu != 1) {\n def2.x *= ppu;\n def2.y *= ppu;\n def2.width *= ppu;\n def2.height *= ppu;\n def2.top *= ppu;\n def2.bottom *= ppu;\n def2.left *= ppu;\n def2.right *= ppu;\n }\n if (trim != 0) {\n def2.x += trim;\n def2.y += trim;\n def2.width -= 2 * trim;\n def2.height -= 2 * trim;\n def2.top -= trim;\n def2.bottom -= trim;\n def2.left -= trim;\n def2.right -= trim;\n }\n var texture2 = new PipeTexture(_this);\n texture2.top = def2.top;\n texture2.bottom = def2.bottom;\n texture2.left = def2.left;\n texture2.right = def2.right;\n texture2.setSourceCoordinate(def2.x, def2.y);\n texture2.setSourceDimension(def2.width, def2.height);\n return texture2;\n };\n _this.findSpriteDefinition = function(query) {\n var textures = _this._textures;\n if (textures) {\n if (isFn(textures)) {\n return textures(query);\n } else if (isHash(textures)) {\n return textures[query];\n }\n }\n };\n _this.select = function(query) {\n if (!query) {\n return new TextureSelection(new PipeTexture(_this));\n }\n var textureDefinition = _this.findSpriteDefinition(query);\n if (textureDefinition) {\n return new TextureSelection(textureDefinition, _this);\n }\n };\n _this.name = def.name;\n _this._ppu = def.ppu || def.ratio || 1;\n _this._trim = def.trim || 0;\n _this._map = def.map || def.filter;\n _this._textures = def.textures;\n if (typeof def.image === \"object\" && isHash(def.image)) {\n _this._imageSrc = def.image.src || def.image.url;\n if (typeof def.image.ratio === \"number\") {\n _this._pixelRatio = def.image.ratio;\n }\n } else {\n if (typeof def.imagePath === \"string\") {\n _this._imageSrc = def.imagePath;\n } else if (typeof def.image === \"string\") {\n _this._imageSrc = def.image;\n }\n if (typeof def.imageRatio === \"number\") {\n _this._pixelRatio = def.imageRatio;\n }\n }\n deprecatedWarning(def);\n return _this;\n }\n Atlas2.prototype.load = function() {\n return __awaiter$1(this, void 0, void 0, function() {\n var image2;\n return __generator$1(this, function(_a) {\n switch (_a.label) {\n case 0:\n if (!this._imageSrc)\n return [3, 2];\n return [4, asyncLoadImage(this._imageSrc)];\n case 1:\n image2 = _a.sent();\n this.setSourceImage(image2, this._pixelRatio);\n _a.label = 2;\n case 2:\n return [\n 2\n /*return*/\n ];\n }\n });\n });\n };\n return Atlas2;\n }(ImageTexture)\n);\nfunction asyncLoadImage(src) {\n return new Promise(function(resolve, reject) {\n var img = new Image();\n img.onload = function() {\n resolve(img);\n };\n img.onerror = function(error) {\n console.error(\"Loading failed: \" + src);\n reject(error);\n };\n img.src = src;\n });\n}\nfunction deprecatedWarning(def) {\n if (\"filter\" in def)\n console.warn(\"'filter' field of atlas definition is deprecated\");\n if (\"cutouts\" in def)\n console.warn(\"'cutouts' field of atlas definition is deprecated\");\n if (\"sprites\" in def)\n console.warn(\"'sprites' field of atlas definition is deprecated\");\n if (\"factory\" in def)\n console.warn(\"'factory' field of atlas definition is deprecated\");\n if (\"ratio\" in def)\n console.warn(\"'ratio' field of atlas definition is deprecated\");\n if (\"imagePath\" in def)\n console.warn(\"'imagePath' field of atlas definition is deprecated\");\n if (\"imageRatio\" in def)\n console.warn(\"'imageRatio' field of atlas definition is deprecated\");\n if (typeof def.image === \"object\" && \"url\" in def.image)\n console.warn(\"'image.url' field of atlas definition is deprecated\");\n}\nvar __extends$6 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __awaiter = function(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = function(thisArg, body) {\n var _ = { label: 0, sent: function() {\n if (t[0] & 1)\n throw t[1];\n return t[1];\n }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f)\n throw new TypeError(\"Generator is already executing.\");\n while (_)\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n return t;\n if (y = 0, t)\n op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return { value: op[1], done: false };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2])\n _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5)\n throw op[1];\n return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nfunction isAtlasSpriteDefinition(selection) {\n return typeof selection === \"object\" && isHash(selection) && \"number\" === typeof selection.width && \"number\" === typeof selection.height;\n}\nvar TextureSelection = (\n /** @class */\n function() {\n function TextureSelection2(selection, atlas2) {\n this.selection = selection;\n this.atlas = atlas2;\n }\n TextureSelection2.prototype.resolve = function(selection, subquery) {\n if (!selection) {\n return NO_TEXTURE;\n } else if (Array.isArray(selection)) {\n return this.resolve(selection[0]);\n } else if (selection instanceof Texture) {\n return selection;\n } else if (isAtlasSpriteDefinition(selection)) {\n if (!this.atlas) {\n return NO_TEXTURE;\n }\n return this.atlas.pipeSpriteTexture(selection);\n } else if (typeof selection === \"object\" && isHash(selection) && typeof subquery !== \"undefined\") {\n return this.resolve(selection[subquery]);\n } else if (typeof selection === \"function\" && isFn(selection)) {\n return this.resolve(selection(subquery));\n } else if (typeof selection === \"string\") {\n if (!this.atlas) {\n return NO_TEXTURE;\n }\n return this.resolve(this.atlas.findSpriteDefinition(selection));\n }\n };\n TextureSelection2.prototype.one = function(subquery) {\n return this.resolve(this.selection, subquery);\n };\n TextureSelection2.prototype.array = function(arr) {\n var array = Array.isArray(arr) ? arr : [];\n if (Array.isArray(this.selection)) {\n for (var i = 0; i < this.selection.length; i++) {\n array[i] = this.resolve(this.selection[i]);\n }\n } else {\n array[0] = this.resolve(this.selection);\n }\n return array;\n };\n return TextureSelection2;\n }()\n);\nvar NO_TEXTURE = new /** @class */\n(function(_super) {\n __extends$6(class_1, _super);\n function class_1() {\n var _this = _super.call(this) || this;\n _this.setSourceDimension(0, 0);\n return _this;\n }\n class_1.prototype.getWidth = function() {\n return 0;\n };\n class_1.prototype.getHeight = function() {\n return 0;\n };\n class_1.prototype.prerender = function(context) {\n return false;\n };\n class_1.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n };\n class_1.prototype.setSourceCoordinate = function(x, y) {\n };\n class_1.prototype.setSourceDimension = function(w, h) {\n };\n class_1.prototype.setDestinationCoordinate = function(x, y) {\n };\n class_1.prototype.setDestinationDimension = function(w, h) {\n };\n class_1.prototype.draw = function() {\n };\n return class_1;\n}(Texture))();\nvar NO_SELECTION = new TextureSelection(NO_TEXTURE);\nvar ATLAS_MEMO_BY_NAME = {};\nvar ATLAS_ARRAY = [];\nfunction atlas(def) {\n return __awaiter(this, void 0, Promise, function() {\n var atlas2;\n return __generator(this, function(_a) {\n switch (_a.label) {\n case 0:\n if (def instanceof Atlas) {\n atlas2 = def;\n } else {\n atlas2 = new Atlas(def);\n }\n if (atlas2.name) {\n ATLAS_MEMO_BY_NAME[atlas2.name] = atlas2;\n }\n ATLAS_ARRAY.push(atlas2);\n return [4, atlas2.load()];\n case 1:\n _a.sent();\n return [2, atlas2];\n }\n });\n });\n}\nfunction texture(query) {\n if (\"string\" !== typeof query) {\n return new TextureSelection(query);\n }\n var result = null;\n var colonIndex = query.indexOf(\":\");\n if (colonIndex > 0 && query.length > colonIndex + 1) {\n var atlas_1 = ATLAS_MEMO_BY_NAME[query.slice(0, colonIndex)];\n result = atlas_1 && atlas_1.select(query.slice(colonIndex + 1));\n }\n if (!result) {\n var atlas_2 = ATLAS_MEMO_BY_NAME[query];\n result = atlas_2 && atlas_2.select();\n }\n if (!result) {\n for (var i = 0; i < ATLAS_ARRAY.length; i++) {\n result = ATLAS_ARRAY[i].select(query);\n if (result) {\n break;\n }\n }\n }\n if (!result) {\n console.error(\"Texture not found: \" + query);\n result = NO_SELECTION;\n }\n return result;\n}\nvar __extends$5 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar ResizableTexture = (\n /** @class */\n function(_super) {\n __extends$5(ResizableTexture2, _super);\n function ResizableTexture2(source, mode) {\n var _this = _super.call(this) || this;\n _this._source = source;\n _this._resizeMode = mode;\n return _this;\n }\n ResizableTexture2.prototype.getWidth = function() {\n var _a;\n return (_a = this.dw) !== null && _a !== void 0 ? _a : this._source.getWidth();\n };\n ResizableTexture2.prototype.getHeight = function() {\n var _a;\n return (_a = this.dh) !== null && _a !== void 0 ? _a : this._source.getHeight();\n };\n ResizableTexture2.prototype.prerender = function(context) {\n return false;\n };\n ResizableTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var texture2 = this._source;\n if (texture2 === null || typeof texture2 !== \"object\") {\n return;\n }\n var outWidth = dw;\n var outHeight = dh;\n var left = Number.isFinite(texture2.left) ? texture2.left : 0;\n var right = Number.isFinite(texture2.right) ? texture2.right : 0;\n var top = Number.isFinite(texture2.top) ? texture2.top : 0;\n var bottom = Number.isFinite(texture2.bottom) ? texture2.bottom : 0;\n var width = texture2.getWidth() - left - right;\n var height = texture2.getHeight() - top - bottom;\n if (!this._innerSize) {\n outWidth = Math.max(outWidth - left - right, 0);\n outHeight = Math.max(outHeight - top - bottom, 0);\n }\n if (top > 0 && left > 0) {\n texture2.draw(context, 0, 0, left, top, 0, 0, left, top);\n }\n if (bottom > 0 && left > 0) {\n texture2.draw(context, 0, height + top, left, bottom, 0, outHeight + top, left, bottom);\n }\n if (top > 0 && right > 0) {\n texture2.draw(context, width + left, 0, right, top, outWidth + left, 0, right, top);\n }\n if (bottom > 0 && right > 0) {\n texture2.draw(context, width + left, height + top, right, bottom, outWidth + left, outHeight + top, right, bottom);\n }\n if (this._resizeMode === \"stretch\") {\n if (top > 0) {\n texture2.draw(context, left, 0, width, top, left, 0, outWidth, top);\n }\n if (bottom > 0) {\n texture2.draw(context, left, height + top, width, bottom, left, outHeight + top, outWidth, bottom);\n }\n if (left > 0) {\n texture2.draw(context, 0, top, left, height, 0, top, left, outHeight);\n }\n if (right > 0) {\n texture2.draw(context, width + left, top, right, height, outWidth + left, top, right, outHeight);\n }\n texture2.draw(context, left, top, width, height, left, top, outWidth, outHeight);\n } else if (this._resizeMode === \"tile\") {\n var l = left;\n var r = outWidth;\n var w = void 0;\n while (r > 0) {\n w = Math.min(width, r);\n r -= width;\n var t = top;\n var b = outHeight;\n var h = void 0;\n while (b > 0) {\n h = Math.min(height, b);\n b -= height;\n texture2.draw(context, left, top, w, h, l, t, w, h);\n if (r <= 0) {\n if (left) {\n texture2.draw(context, 0, top, left, h, 0, t, left, h);\n }\n if (right) {\n texture2.draw(context, width + left, top, right, h, l + w, t, right, h);\n }\n }\n t += h;\n }\n if (top) {\n texture2.draw(context, left, 0, w, top, l, 0, w, top);\n }\n if (bottom) {\n texture2.draw(context, left, height + top, w, bottom, l, t, w, bottom);\n }\n l += w;\n }\n }\n };\n return ResizableTexture2;\n }(Texture)\n);\nfunction getPixelRatio() {\n return typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1;\n}\nfunction isValidFitMode(value) {\n return value && (value === \"cover\" || value === \"contain\" || value === \"fill\" || value === \"in\" || value === \"in-pad\" || value === \"out\" || value === \"out-crop\");\n}\nvar iid$1 = 0;\nvar Pin = (\n /** @class */\n function() {\n function Pin2(owner) {\n this.uid = \"pin:\" + uid();\n this._owner = owner;\n this._parent = null;\n this._relativeMatrix = new Matrix();\n this._absoluteMatrix = new Matrix();\n this.reset();\n }\n Pin2.prototype.reset = function() {\n this._textureAlpha = 1;\n this._alpha = 1;\n this._width = 0;\n this._height = 0;\n this._scaleX = 1;\n this._scaleY = 1;\n this._skewX = 0;\n this._skewY = 0;\n this._rotation = 0;\n this._pivoted = false;\n this._pivotX = 0;\n this._pivotY = 0;\n this._handled = false;\n this._handleX = 0;\n this._handleY = 0;\n this._aligned = false;\n this._alignX = 0;\n this._alignY = 0;\n this._offsetX = 0;\n this._offsetY = 0;\n this._boxX = 0;\n this._boxY = 0;\n this._boxWidth = this._width;\n this._boxHeight = this._height;\n this._ts_translate = ++iid$1;\n this._ts_transform = ++iid$1;\n this._ts_matrix = ++iid$1;\n };\n Pin2.prototype._update = function() {\n this._parent = this._owner._parent && this._owner._parent._pin;\n if (this._handled && this._mo_handle != this._ts_transform) {\n this._mo_handle = this._ts_transform;\n this._ts_translate = ++iid$1;\n }\n if (this._aligned && this._parent && this._mo_align != this._parent._ts_transform) {\n this._mo_align = this._parent._ts_transform;\n this._ts_translate = ++iid$1;\n }\n return this;\n };\n Pin2.prototype.toString = function() {\n return this._owner + \" (\" + (this._parent ? this._parent._owner : null) + \")\";\n };\n Pin2.prototype.absoluteMatrix = function() {\n this._update();\n var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_matrix : 0);\n if (this._mo_abs == ts) {\n return this._absoluteMatrix;\n }\n this._mo_abs = ts;\n var abs = this._absoluteMatrix;\n abs.reset(this.relativeMatrix());\n this._parent && abs.concat(this._parent._absoluteMatrix);\n this._ts_matrix = ++iid$1;\n return abs;\n };\n Pin2.prototype.relativeMatrix = function() {\n this._update();\n var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_transform : 0);\n if (this._mo_rel == ts) {\n return this._relativeMatrix;\n }\n this._mo_rel = ts;\n var rel = this._relativeMatrix;\n rel.identity();\n if (this._pivoted) {\n rel.translate(-this._pivotX * this._width, -this._pivotY * this._height);\n }\n rel.scale(this._scaleX, this._scaleY);\n rel.skew(this._skewX, this._skewY);\n rel.rotate(this._rotation);\n if (this._pivoted) {\n rel.translate(this._pivotX * this._width, this._pivotY * this._height);\n }\n if (this._pivoted) {\n this._boxX = 0;\n this._boxY = 0;\n this._boxWidth = this._width;\n this._boxHeight = this._height;\n } else {\n var p = void 0;\n var q = void 0;\n if (rel.a > 0 && rel.c > 0 || rel.a < 0 && rel.c < 0) {\n p = 0;\n q = rel.a * this._width + rel.c * this._height;\n } else {\n p = rel.a * this._width;\n q = rel.c * this._height;\n }\n if (p > q) {\n this._boxX = q;\n this._boxWidth = p - q;\n } else {\n this._boxX = p;\n this._boxWidth = q - p;\n }\n if (rel.b > 0 && rel.d > 0 || rel.b < 0 && rel.d < 0) {\n p = 0;\n q = rel.b * this._width + rel.d * this._height;\n } else {\n p = rel.b * this._width;\n q = rel.d * this._height;\n }\n if (p > q) {\n this._boxY = q;\n this._boxHeight = p - q;\n } else {\n this._boxY = p;\n this._boxHeight = q - p;\n }\n }\n this._x = this._offsetX;\n this._y = this._offsetY;\n this._x -= this._boxX + this._handleX * this._boxWidth;\n this._y -= this._boxY + this._handleY * this._boxHeight;\n if (this._aligned && this._parent) {\n this._parent.relativeMatrix();\n this._x += this._alignX * this._parent._width;\n this._y += this._alignY * this._parent._height;\n }\n rel.translate(this._x, this._y);\n return this._relativeMatrix;\n };\n Pin2.prototype.get = function(key) {\n if (typeof getters[key] === \"function\") {\n return getters[key](this);\n }\n };\n Pin2.prototype.set = function(a, b) {\n if (typeof a === \"string\") {\n if (typeof setters[a] === \"function\" && typeof b !== \"undefined\") {\n setters[a](this, b);\n }\n } else if (typeof a === \"object\") {\n for (b in a) {\n if (typeof setters[b] === \"function\" && typeof a[b] !== \"undefined\") {\n setters[b](this, a[b], a);\n }\n }\n }\n if (this._owner) {\n this._owner._ts_pin = ++iid$1;\n this._owner.touch();\n }\n return this;\n };\n Pin2.prototype.fit = function(width, height, mode) {\n this._ts_transform = ++iid$1;\n if (mode === \"contain\") {\n mode = \"in-pad\";\n }\n if (mode === \"cover\") {\n mode = \"out-crop\";\n }\n if (typeof width === \"number\") {\n this._scaleX = width / this._unscaled_width;\n this._width = this._unscaled_width;\n }\n if (typeof height === \"number\") {\n this._scaleY = height / this._unscaled_height;\n this._height = this._unscaled_height;\n }\n if (typeof width === \"number\" && typeof height === \"number\" && typeof mode === \"string\") {\n if (mode === \"fill\")\n ;\n else if (mode === \"out\" || mode === \"out-crop\") {\n this._scaleX = this._scaleY = Math.max(this._scaleX, this._scaleY);\n } else if (mode === \"in\" || mode === \"in-pad\") {\n this._scaleX = this._scaleY = Math.min(this._scaleX, this._scaleY);\n }\n if (mode === \"out-crop\" || mode === \"in-pad\") {\n this._width = width / this._scaleX;\n this._height = height / this._scaleY;\n }\n }\n };\n return Pin2;\n }()\n);\nvar getters = {\n alpha: function(pin) {\n return pin._alpha;\n },\n textureAlpha: function(pin) {\n return pin._textureAlpha;\n },\n width: function(pin) {\n return pin._width;\n },\n height: function(pin) {\n return pin._height;\n },\n boxWidth: function(pin) {\n return pin._boxWidth;\n },\n boxHeight: function(pin) {\n return pin._boxHeight;\n },\n // scale : function(pin: Pin) {\n // },\n scaleX: function(pin) {\n return pin._scaleX;\n },\n scaleY: function(pin) {\n return pin._scaleY;\n },\n // skew : function(pin: Pin) {\n // },\n skewX: function(pin) {\n return pin._skewX;\n },\n skewY: function(pin) {\n return pin._skewY;\n },\n rotation: function(pin) {\n return pin._rotation;\n },\n // pivot : function(pin: Pin) {\n // },\n pivotX: function(pin) {\n return pin._pivotX;\n },\n pivotY: function(pin) {\n return pin._pivotY;\n },\n // offset : function(pin: Pin) {\n // },\n offsetX: function(pin) {\n return pin._offsetX;\n },\n offsetY: function(pin) {\n return pin._offsetY;\n },\n // align : function(pin: Pin) {\n // },\n alignX: function(pin) {\n return pin._alignX;\n },\n alignY: function(pin) {\n return pin._alignY;\n },\n // handle : function(pin: Pin) {\n // },\n handleX: function(pin) {\n return pin._handleX;\n },\n handleY: function(pin) {\n return pin._handleY;\n }\n};\nvar setters = {\n alpha: function(pin, value) {\n pin._alpha = value;\n },\n textureAlpha: function(pin, value) {\n pin._textureAlpha = value;\n },\n width: function(pin, value) {\n pin._unscaled_width = value;\n pin._width = value;\n pin._ts_transform = ++iid$1;\n },\n height: function(pin, value) {\n pin._unscaled_height = value;\n pin._height = value;\n pin._ts_transform = ++iid$1;\n },\n scale: function(pin, value) {\n pin._scaleX = value;\n pin._scaleY = value;\n pin._ts_transform = ++iid$1;\n },\n scaleX: function(pin, value) {\n pin._scaleX = value;\n pin._ts_transform = ++iid$1;\n },\n scaleY: function(pin, value) {\n pin._scaleY = value;\n pin._ts_transform = ++iid$1;\n },\n skew: function(pin, value) {\n pin._skewX = value;\n pin._skewY = value;\n pin._ts_transform = ++iid$1;\n },\n skewX: function(pin, value) {\n pin._skewX = value;\n pin._ts_transform = ++iid$1;\n },\n skewY: function(pin, value) {\n pin._skewY = value;\n pin._ts_transform = ++iid$1;\n },\n rotation: function(pin, value) {\n pin._rotation = value;\n pin._ts_transform = ++iid$1;\n },\n pivot: function(pin, value) {\n pin._pivotX = value;\n pin._pivotY = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n pivotX: function(pin, value) {\n pin._pivotX = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n pivotY: function(pin, value) {\n pin._pivotY = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n offset: function(pin, value) {\n pin._offsetX = value;\n pin._offsetY = value;\n pin._ts_translate = ++iid$1;\n },\n offsetX: function(pin, value) {\n pin._offsetX = value;\n pin._ts_translate = ++iid$1;\n },\n offsetY: function(pin, value) {\n pin._offsetY = value;\n pin._ts_translate = ++iid$1;\n },\n align: function(pin, value) {\n this.alignX(pin, value);\n this.alignY(pin, value);\n },\n alignX: function(pin, value) {\n pin._alignX = value;\n pin._aligned = true;\n pin._ts_translate = ++iid$1;\n this.handleX(pin, value);\n },\n alignY: function(pin, value) {\n pin._alignY = value;\n pin._aligned = true;\n pin._ts_translate = ++iid$1;\n this.handleY(pin, value);\n },\n handle: function(pin, value) {\n this.handleX(pin, value);\n this.handleY(pin, value);\n },\n handleX: function(pin, value) {\n pin._handleX = value;\n pin._handled = true;\n pin._ts_translate = ++iid$1;\n },\n handleY: function(pin, value) {\n pin._handleY = value;\n pin._handled = true;\n pin._ts_translate = ++iid$1;\n },\n resizeMode: function(pin, value, all) {\n if (all) {\n if (value == \"in\") {\n value = \"in-pad\";\n } else if (value == \"out\") {\n value = \"out-crop\";\n }\n pin.fit(all.resizeWidth, all.resizeHeight, value);\n }\n },\n resizeWidth: function(pin, value, all) {\n if (!all || !all.resizeMode) {\n pin.fit(value, null);\n }\n },\n resizeHeight: function(pin, value, all) {\n if (!all || !all.resizeMode) {\n pin.fit(null, value);\n }\n },\n scaleMode: function(pin, value, all) {\n if (all) {\n pin.fit(all.scaleWidth, all.scaleHeight, value);\n }\n },\n scaleWidth: function(pin, value, all) {\n if (!all || !all.scaleMode) {\n pin.fit(value, null);\n }\n },\n scaleHeight: function(pin, value, all) {\n if (!all || !all.scaleMode) {\n pin.fit(null, value);\n }\n },\n matrix: function(pin, value) {\n this.scaleX(pin, value.a);\n this.skewX(pin, value.c / value.d);\n this.skewY(pin, value.b / value.a);\n this.scaleY(pin, value.d);\n this.offsetX(pin, value.e);\n this.offsetY(pin, value.f);\n this.rotation(pin, 0);\n }\n};\nfunction IDENTITY(x) {\n return x;\n}\nvar LOOKUP_CACHE = {};\nvar MODE_BY_NAME = {};\nvar EASE_BY_NAME = {};\nvar Easing = (\n /** @class */\n function() {\n function Easing2() {\n }\n Easing2.get = function(token, fallback) {\n fallback = fallback || IDENTITY;\n if (typeof token === \"function\") {\n return token;\n }\n if (typeof token !== \"string\") {\n return fallback;\n }\n var easeFn = LOOKUP_CACHE[token];\n if (easeFn) {\n return easeFn;\n }\n var tokens = /^(\\w+)(-(in|out|in-out|out-in))?(\\((.*)\\))?$/i.exec(token);\n if (!tokens || !tokens.length) {\n return fallback;\n }\n var easeName = tokens[1];\n var easing = EASE_BY_NAME[easeName];\n var modeName = tokens[3];\n var modeFn = MODE_BY_NAME[modeName];\n var params = tokens[5];\n if (!easing) {\n easeFn = fallback;\n } else if (\"fn\" in easing && typeof easing.fn === \"function\") {\n easeFn = easing.fn;\n } else if (\"fc\" in easing && typeof easing.fc === \"function\") {\n var args = params ? params.replace(/\\s+/, \"\").split(\",\") : void 0;\n easeFn = easing.fc.apply(easing.fc, args);\n } else {\n easeFn = fallback;\n }\n if (modeFn) {\n easeFn = modeFn(easeFn);\n }\n LOOKUP_CACHE[token] = easeFn;\n return easeFn;\n };\n return Easing2;\n }()\n);\nfunction addMode(name, fn) {\n MODE_BY_NAME[name] = fn;\n}\nfunction addEaseFn(data) {\n var names = data.name.split(/\\s+/);\n for (var i = 0; i < names.length; i++) {\n var key = names[i];\n if (key) {\n EASE_BY_NAME[key] = data;\n }\n }\n}\naddMode(\"in\", function(f) {\n return f;\n});\naddMode(\"out\", function(f) {\n return function(t) {\n return 1 - f(1 - t);\n };\n});\naddMode(\"in-out\", function(f) {\n return function(t) {\n return t < 0.5 ? f(2 * t) / 2 : 1 - f(2 * (1 - t)) / 2;\n };\n});\naddMode(\"out-in\", function(f) {\n return function(t) {\n return t < 0.5 ? 1 - f(2 * (1 - t)) / 2 : f(2 * t) / 2;\n };\n});\naddEaseFn({\n name: \"linear\",\n fn: function(t) {\n return t;\n }\n});\naddEaseFn({\n name: \"quad\",\n fn: function(t) {\n return t * t;\n }\n});\naddEaseFn({\n name: \"cubic\",\n fn: function(t) {\n return t * t * t;\n }\n});\naddEaseFn({\n name: \"quart\",\n fn: function(t) {\n return t * t * t * t;\n }\n});\naddEaseFn({\n name: \"quint\",\n fn: function(t) {\n return t * t * t * t * t;\n }\n});\naddEaseFn({\n name: \"sin sine\",\n fn: function(t) {\n return 1 - Math.cos(t * Math.PI / 2);\n }\n});\naddEaseFn({\n name: \"exp expo\",\n fn: function(t) {\n return t == 0 ? 0 : Math.pow(2, 10 * (t - 1));\n }\n});\naddEaseFn({\n name: \"circle circ\",\n fn: function(t) {\n return 1 - Math.sqrt(1 - t * t);\n }\n});\naddEaseFn({\n name: \"bounce\",\n fn: function(t) {\n return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 : 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n }\n});\naddEaseFn({\n name: \"poly\",\n fc: function(e) {\n return function(t) {\n return Math.pow(t, e);\n };\n }\n});\naddEaseFn({\n name: \"elastic\",\n fc: function(a, p) {\n p = p || 0.45;\n a = a || 1;\n var s = p / (2 * Math.PI) * Math.asin(1 / a);\n return function(t) {\n return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p);\n };\n }\n});\naddEaseFn({\n name: \"back\",\n fc: function(s) {\n s = typeof s !== \"undefined\" ? s : 1.70158;\n return function(t) {\n return t * t * ((s + 1) * t - s);\n };\n }\n});\nvar Transition = (\n /** @class */\n function() {\n function Transition2(owner, options) {\n if (options === void 0) {\n options = {};\n }\n this.uid = \"transition:\" + uid();\n this._ending = [];\n this._end = {};\n this._duration = options.duration || 400;\n this._delay = options.delay || 0;\n this._owner = owner;\n this._time = 0;\n }\n Transition2.prototype.tick = function(node, elapsed, now, last) {\n this._time += elapsed;\n if (this._time < this._delay) {\n return;\n }\n var time = this._time - this._delay;\n if (!this._start) {\n this._start = {};\n for (var key in this._end) {\n this._start[key] = this._owner.pin(key);\n }\n }\n var p = Math.min(time / this._duration, 1);\n var ended = p >= 1;\n if (typeof this._easing == \"function\") {\n p = this._easing(p);\n }\n var q = 1 - p;\n for (var key in this._end) {\n this._owner.pin(key, this._start[key] * q + this._end[key] * p);\n }\n return ended;\n };\n Transition2.prototype.finish = function() {\n var _this = this;\n this._ending.forEach(function(callback) {\n try {\n callback.call(_this._owner);\n } catch (e) {\n console.error(e);\n }\n });\n return this._next;\n };\n Transition2.prototype.tween = function(a, b) {\n var options;\n if (typeof a === \"object\" && a !== null) {\n options = a;\n } else {\n options = {};\n if (typeof a === \"number\") {\n options.duration = a;\n if (typeof b === \"number\") {\n options.delay = b;\n }\n }\n }\n return this._next = new Transition2(this._owner, options);\n };\n Transition2.prototype.duration = function(duration) {\n this._duration = duration;\n return this;\n };\n Transition2.prototype.delay = function(delay) {\n this._delay = delay;\n return this;\n };\n Transition2.prototype.ease = function(easing) {\n this._easing = Easing.get(easing);\n return this;\n };\n Transition2.prototype.done = function(fn) {\n this._ending.push(fn);\n return this;\n };\n Transition2.prototype.hide = function() {\n this._ending.push(function() {\n this.hide();\n });\n this._hide = true;\n return this;\n };\n Transition2.prototype.remove = function() {\n this._ending.push(function() {\n this.remove();\n });\n this._remove = true;\n return this;\n };\n Transition2.prototype.pin = function(a, b) {\n if (typeof a === \"object\") {\n for (var attr in a) {\n pinning(this._owner, this._end, attr, a[attr]);\n }\n } else if (typeof b !== \"undefined\") {\n pinning(this._owner, this._end, a, b);\n }\n return this;\n };\n Transition2.prototype.then = function(fn) {\n this.done(fn);\n return this;\n };\n Transition2.prototype.clear = function(forward) {\n return this;\n };\n Transition2.prototype.size = function(w, h) {\n this.pin(\"width\", w);\n this.pin(\"height\", h);\n return this;\n };\n Transition2.prototype.width = function(w) {\n if (typeof w === \"undefined\") {\n return this.pin(\"width\");\n }\n this.pin(\"width\", w);\n return this;\n };\n Transition2.prototype.height = function(h) {\n if (typeof h === \"undefined\") {\n return this.pin(\"height\");\n }\n this.pin(\"height\", h);\n return this;\n };\n Transition2.prototype.offset = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n }\n this.pin(\"offsetX\", a);\n this.pin(\"offsetY\", b);\n return this;\n };\n Transition2.prototype.rotate = function(a) {\n this.pin(\"rotation\", a);\n return this;\n };\n Transition2.prototype.skew = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\") {\n b = a;\n }\n this.pin(\"skewX\", a);\n this.pin(\"skewY\", b);\n return this;\n };\n Transition2.prototype.scale = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\") {\n b = a;\n }\n this.pin(\"scaleX\", a);\n this.pin(\"scaleY\", b);\n return this;\n };\n Transition2.prototype.alpha = function(a, ta) {\n this.pin(\"alpha\", a);\n if (typeof ta !== \"undefined\") {\n this.pin(\"textureAlpha\", ta);\n }\n return this;\n };\n return Transition2;\n }()\n);\nfunction pinning(node, map, key, value) {\n if (typeof node.pin(key) === \"number\") {\n map[key] = value;\n } else if (typeof node.pin(key + \"X\") === \"number\" && typeof node.pin(key + \"Y\") === \"number\") {\n map[key + \"X\"] = value;\n map[key + \"Y\"] = value;\n }\n}\nvar iid = 0;\nstats.create = 0;\nfunction assertType(obj) {\n if (obj && obj instanceof Node) {\n return obj;\n }\n throw \"Invalid node: \" + obj;\n}\nfunction create() {\n return layout();\n}\nfunction layer() {\n return maximize();\n}\nfunction box() {\n return minimize();\n}\nfunction layout() {\n return new Node();\n}\nfunction row(align) {\n return layout().row(align).label(\"Row\");\n}\nfunction column(align) {\n return layout().column(align).label(\"Column\");\n}\nfunction minimize() {\n return layout().minimize().label(\"Minimize\");\n}\nfunction maximize() {\n return layout().maximize().label(\"Maximize\");\n}\nvar Node = (\n /** @class */\n function() {\n function Node2() {\n var _this = this;\n this.uid = \"node:\" + uid();\n this._label = \"\";\n this._parent = null;\n this._next = null;\n this._prev = null;\n this._first = null;\n this._last = null;\n this._visible = true;\n this._alpha = 1;\n this._padding = 0;\n this._spacing = 0;\n this._pin = new Pin(this);\n this._listeners = {};\n this._attrs = {};\n this._flags = {};\n this._transitions = [];\n this._tickBefore = [];\n this._tickAfter = [];\n this.MAX_ELAPSE = Infinity;\n this._transitionTickInitied = false;\n this._transitionTickLastTime = 0;\n this._transitionTick = function(elapsed, now, last) {\n if (!_this._transitions.length) {\n return false;\n }\n var ignore = _this._transitionTickLastTime !== last;\n _this._transitionTickLastTime = now;\n if (ignore) {\n return true;\n }\n var head = _this._transitions[0];\n var ended = head.tick(_this, elapsed, now, last);\n if (ended) {\n if (head === _this._transitions[0]) {\n _this._transitions.shift();\n }\n var next = head.finish();\n if (next) {\n _this._transitions.unshift(next);\n }\n }\n return true;\n };\n stats.create++;\n }\n Node2.prototype.matrix = function(relative) {\n if (relative === void 0) {\n relative = false;\n }\n if (relative === true) {\n return this._pin.relativeMatrix();\n }\n return this._pin.absoluteMatrix();\n };\n Node2.prototype.getPixelRatio = function() {\n var _a;\n var m = (_a = this._parent) === null || _a === void 0 ? void 0 : _a.matrix();\n var pixelRatio = !m ? 1 : Math.max(Math.abs(m.a), Math.abs(m.b)) / getPixelRatio();\n return pixelRatio;\n };\n Node2.prototype.pin = function(a, b) {\n if (typeof a === \"object\") {\n this._pin.set(a);\n return this;\n } else if (typeof a === \"string\") {\n if (typeof b === \"undefined\") {\n return this._pin.get(a);\n } else {\n this._pin.set(a, b);\n return this;\n }\n } else if (typeof a === \"undefined\") {\n return this._pin;\n }\n };\n Node2.prototype.fit = function(a, b, c) {\n if (typeof a === \"object\") {\n c = b;\n b = a.y;\n a = a.x;\n }\n this._pin.fit(a, b, c);\n return this;\n };\n Node2.prototype.scaleTo = function(a, b, c) {\n return this.fit(a, b, c);\n };\n Node2.prototype.toString = function() {\n return \"[\" + this._label + \"]\";\n };\n Node2.prototype.id = function(id) {\n return this.label(id);\n };\n Node2.prototype.label = function(label) {\n if (typeof label === \"undefined\") {\n return this._label;\n }\n this._label = label;\n return this;\n };\n Node2.prototype.attr = function(name, value) {\n if (typeof value === \"undefined\") {\n return this._attrs !== null ? this._attrs[name] : void 0;\n }\n (this._attrs !== null ? this._attrs : this._attrs = {})[name] = value;\n return this;\n };\n Node2.prototype.visible = function(visible) {\n if (typeof visible === \"undefined\") {\n return this._visible;\n }\n this._visible = visible;\n this._parent && (this._parent._ts_children = ++iid);\n this._ts_pin = ++iid;\n this.touch();\n return this;\n };\n Node2.prototype.hide = function() {\n this.visible(false);\n return this;\n };\n Node2.prototype.show = function() {\n this.visible(true);\n return this;\n };\n Node2.prototype.parent = function() {\n return this._parent;\n };\n Node2.prototype.next = function(visible) {\n var next = this._next;\n while (next && visible && !next._visible) {\n next = next._next;\n }\n return next;\n };\n Node2.prototype.prev = function(visible) {\n var prev = this._prev;\n while (prev && visible && !prev._visible) {\n prev = prev._prev;\n }\n return prev;\n };\n Node2.prototype.first = function(visible) {\n var next = this._first;\n while (next && visible && !next._visible) {\n next = next._next;\n }\n return next;\n };\n Node2.prototype.last = function(visible) {\n var prev = this._last;\n while (prev && visible && !prev._visible) {\n prev = prev._prev;\n }\n return prev;\n };\n Node2.prototype.visit = function(visitor, payload) {\n var reverse = visitor.reverse;\n var visible = visitor.visible;\n if (visitor.start && visitor.start(this, payload)) {\n return;\n }\n var child;\n var next = reverse ? this.last(visible) : this.first(visible);\n while (child = next) {\n next = reverse ? child.prev(visible) : child.next(visible);\n if (child.visit(visitor, payload)) {\n return true;\n }\n }\n return visitor.end && visitor.end(this, payload);\n };\n Node2.prototype.append = function(child, more) {\n if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) {\n Node2.append(this, child[i]);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n Node2.append(this, arguments[i]);\n }\n } else if (typeof child !== \"undefined\")\n Node2.append(this, child);\n return this;\n };\n Node2.prototype.prepend = function(child, more) {\n if (Array.isArray(child)) {\n for (var i = child.length - 1; i >= 0; i--) {\n Node2.prepend(this, child[i]);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = arguments.length - 1; i >= 0; i--) {\n Node2.prepend(this, arguments[i]);\n }\n } else if (typeof child !== \"undefined\")\n Node2.prepend(this, child);\n return this;\n };\n Node2.prototype.appendTo = function(parent) {\n Node2.append(parent, this);\n return this;\n };\n Node2.prototype.prependTo = function(parent) {\n Node2.prepend(parent, this);\n return this;\n };\n Node2.prototype.insertNext = function(sibling, more) {\n if (Array.isArray(sibling)) {\n for (var i = 0; i < sibling.length; i++) {\n Node2.insertAfter(sibling[i], this);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n Node2.insertAfter(arguments[i], this);\n }\n } else if (typeof sibling !== \"undefined\") {\n Node2.insertAfter(sibling, this);\n }\n return this;\n };\n Node2.prototype.insertPrev = function(sibling, more) {\n if (Array.isArray(sibling)) {\n for (var i = sibling.length - 1; i >= 0; i--) {\n Node2.insertBefore(sibling[i], this);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = arguments.length - 1; i >= 0; i--) {\n Node2.insertBefore(arguments[i], this);\n }\n } else if (typeof sibling !== \"undefined\") {\n Node2.insertBefore(sibling, this);\n }\n return this;\n };\n Node2.prototype.insertAfter = function(prev) {\n Node2.insertAfter(this, prev);\n return this;\n };\n Node2.prototype.insertBefore = function(next) {\n Node2.insertBefore(this, next);\n return this;\n };\n Node2.append = function(parent, child) {\n assertType(child);\n assertType(parent);\n child.remove();\n if (parent._last) {\n parent._last._next = child;\n child._prev = parent._last;\n }\n child._parent = parent;\n parent._last = child;\n if (!parent._first) {\n parent._first = child;\n }\n child._parent._flag(child, true);\n child._ts_parent = ++iid;\n parent._ts_children = ++iid;\n parent.touch();\n };\n Node2.prepend = function(parent, child) {\n assertType(child);\n assertType(parent);\n child.remove();\n if (parent._first) {\n parent._first._prev = child;\n child._next = parent._first;\n }\n child._parent = parent;\n parent._first = child;\n if (!parent._last) {\n parent._last = child;\n }\n child._parent._flag(child, true);\n child._ts_parent = ++iid;\n parent._ts_children = ++iid;\n parent.touch();\n };\n Node2.insertBefore = function(self, next) {\n assertType(self);\n assertType(next);\n self.remove();\n var parent = next._parent;\n var prev = next._prev;\n if (!parent) {\n return;\n }\n next._prev = self;\n prev && (prev._next = self) || parent && (parent._first = self);\n self._parent = parent;\n self._prev = prev;\n self._next = next;\n self._parent._flag(self, true);\n self._ts_parent = ++iid;\n self.touch();\n };\n Node2.insertAfter = function(self, prev) {\n assertType(self);\n assertType(prev);\n self.remove();\n var parent = prev._parent;\n var next = prev._next;\n if (!parent) {\n return;\n }\n prev._next = self;\n next && (next._prev = self) || parent && (parent._last = self);\n self._parent = parent;\n self._prev = prev;\n self._next = next;\n self._parent._flag(self, true);\n self._ts_parent = ++iid;\n self.touch();\n };\n Node2.prototype.remove = function(child, more) {\n if (typeof child !== \"undefined\") {\n if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) {\n assertType(child[i]).remove();\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n assertType(arguments[i]).remove();\n }\n } else {\n assertType(child).remove();\n }\n return this;\n }\n if (this._prev) {\n this._prev._next = this._next;\n }\n if (this._next) {\n this._next._prev = this._prev;\n }\n if (this._parent) {\n if (this._parent._first === this) {\n this._parent._first = this._next;\n }\n if (this._parent._last === this) {\n this._parent._last = this._prev;\n }\n this._parent._flag(this, false);\n this._parent._ts_children = ++iid;\n this._parent.touch();\n }\n this._prev = this._next = this._parent = null;\n this._ts_parent = ++iid;\n return this;\n };\n Node2.prototype.empty = function() {\n var child = null;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child._prev = child._next = child._parent = null;\n this._flag(child, false);\n }\n this._first = this._last = null;\n this._ts_children = ++iid;\n this.touch();\n return this;\n };\n Node2.prototype.touch = function() {\n this._ts_touch = ++iid;\n this._parent && this._parent.touch();\n return this;\n };\n Node2.prototype._flag = function(key, value) {\n if (typeof value === \"undefined\") {\n return this._flags !== null && this._flags[key] || 0;\n }\n if (typeof key === \"string\") {\n if (value) {\n this._flags = this._flags || {};\n if (!this._flags[key] && this._parent) {\n this._parent._flag(key, true);\n }\n this._flags[key] = (this._flags[key] || 0) + 1;\n } else if (this._flags && this._flags[key] > 0) {\n if (this._flags[key] == 1 && this._parent) {\n this._parent._flag(key, false);\n }\n this._flags[key] = this._flags[key] - 1;\n }\n }\n if (typeof key === \"object\") {\n if (key._flags) {\n for (var type in key._flags) {\n if (key._flags[type] > 0) {\n this._flag(type, value);\n }\n }\n }\n }\n return this;\n };\n Node2.prototype.hitTest = function(hit) {\n var width = this._pin._width;\n var height = this._pin._height;\n return hit.x >= 0 && hit.x <= width && hit.y >= 0 && hit.y <= height;\n };\n Node2.prototype.prerender = function() {\n if (!this._visible) {\n return;\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child.prerender();\n }\n };\n Node2.prototype.render = function(context) {\n if (!this._visible) {\n return;\n }\n stats.node++;\n var m = this.matrix();\n context.setTransform(m.a, m.b, m.c, m.d, m.e, m.f);\n this._alpha = this._pin._alpha * (this._parent ? this._parent._alpha : 1);\n var alpha = this._pin._textureAlpha * this._alpha;\n if (context.globalAlpha != alpha) {\n context.globalAlpha = alpha;\n }\n if (this._textures) {\n for (var i = 0, n = this._textures.length; i < n; i++) {\n this._textures[i].draw(context);\n }\n }\n if (context.globalAlpha != this._alpha) {\n context.globalAlpha = this._alpha;\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child.render(context);\n }\n };\n Node2.prototype._tick = function(elapsed, now, last) {\n if (!this._visible) {\n return;\n }\n if (elapsed > this.MAX_ELAPSE) {\n elapsed = this.MAX_ELAPSE;\n }\n var ticked = false;\n if (this._tickBefore !== null) {\n for (var i = 0; i < this._tickBefore.length; i++) {\n stats.tick++;\n var tickFn = this._tickBefore[i];\n ticked = tickFn.call(this, elapsed, now, last) === true || ticked;\n }\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n if (child._flag(\"_tick\")) {\n ticked = child._tick(elapsed, now, last) === true ? true : ticked;\n }\n }\n if (this._tickAfter !== null) {\n for (var i = 0; i < this._tickAfter.length; i++) {\n stats.tick++;\n var tickFn = this._tickAfter[i];\n ticked = tickFn.call(this, elapsed, now, last) === true || ticked;\n }\n }\n return ticked;\n };\n Node2.prototype.tick = function(callback, before) {\n var _a, _b;\n if (before === void 0) {\n before = false;\n }\n if (typeof callback !== \"function\") {\n return;\n }\n if (before) {\n if (this._tickBefore === null) {\n this._tickBefore = [];\n }\n this._tickBefore.push(callback);\n } else {\n if (this._tickAfter === null) {\n this._tickAfter = [];\n }\n this._tickAfter.push(callback);\n }\n var hasTickListener = ((_a = this._tickAfter) === null || _a === void 0 ? void 0 : _a.length) > 0 || ((_b = this._tickBefore) === null || _b === void 0 ? void 0 : _b.length) > 0;\n this._flag(\"_tick\", hasTickListener);\n };\n Node2.prototype.untick = function(callback) {\n if (typeof callback !== \"function\") {\n return;\n }\n var i;\n if (this._tickBefore !== null && (i = this._tickBefore.indexOf(callback)) >= 0) {\n this._tickBefore.splice(i, 1);\n }\n if (this._tickAfter !== null && (i = this._tickAfter.indexOf(callback)) >= 0) {\n this._tickAfter.splice(i, 1);\n }\n };\n Node2.prototype.timeout = function(callback, time) {\n this.setTimeout(callback, time);\n };\n Node2.prototype.setTimeout = function(callback, time) {\n function timer(t) {\n if ((time -= t) < 0) {\n this.untick(timer);\n callback.call(this);\n } else {\n return true;\n }\n }\n this.tick(timer);\n return timer;\n };\n Node2.prototype.clearTimeout = function(timer) {\n this.untick(timer);\n };\n Node2.prototype.on = function(type, listener) {\n if (!type || !type.length || typeof listener !== \"function\") {\n return this;\n }\n if (typeof type !== \"string\" && typeof type.join === \"function\") {\n for (var i = 0; i < type.length; i++) {\n this.on(type[i], listener);\n }\n } else if (typeof type === \"string\" && type.indexOf(\" \") > -1) {\n type = type.match(/\\S+/g);\n for (var i = 0; i < type.length; i++) {\n this._on(type[i], listener);\n }\n } else if (typeof type === \"string\") {\n this._on(type, listener);\n } else\n ;\n return this;\n };\n Node2.prototype._on = function(type, listener) {\n if (typeof type !== \"string\" && typeof listener !== \"function\") {\n return;\n }\n this._listeners[type] = this._listeners[type] || [];\n this._listeners[type].push(listener);\n this._flag(type, true);\n };\n Node2.prototype.off = function(type, listener) {\n if (!type || !type.length || typeof listener !== \"function\") {\n return this;\n }\n if (typeof type !== \"string\" && typeof type.join === \"function\") {\n for (var i = 0; i < type.length; i++) {\n this.off(type[i], listener);\n }\n } else if (typeof type === \"string\" && type.indexOf(\" \") > -1) {\n type = type.match(/\\S+/g);\n for (var i = 0; i < type.length; i++) {\n this._off(type[i], listener);\n }\n } else if (typeof type === \"string\") {\n this._off(type, listener);\n } else\n ;\n return this;\n };\n Node2.prototype._off = function(type, listener) {\n if (typeof type !== \"string\" && typeof listener !== \"function\") {\n return;\n }\n var listeners = this._listeners[type];\n if (!listeners || !listeners.length) {\n return;\n }\n var index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n this._flag(type, false);\n }\n };\n Node2.prototype.listeners = function(type) {\n return this._listeners[type];\n };\n Node2.prototype.publish = function(name, args) {\n var 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].apply(this, args);\n }\n return listeners.length;\n };\n Node2.prototype.trigger = function(name, args) {\n this.publish(name, args);\n return this;\n };\n Node2.prototype.size = function(w, h) {\n this.pin(\"width\", w);\n this.pin(\"height\", h);\n return this;\n };\n Node2.prototype.width = function(w) {\n if (typeof w === \"undefined\") {\n return this.pin(\"width\");\n }\n this.pin(\"width\", w);\n return this;\n };\n Node2.prototype.height = function(h) {\n if (typeof h === \"undefined\") {\n return this.pin(\"height\");\n }\n this.pin(\"height\", h);\n return this;\n };\n Node2.prototype.offset = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n }\n this.pin(\"offsetX\", a);\n this.pin(\"offsetY\", b);\n return this;\n };\n Node2.prototype.rotate = function(a) {\n this.pin(\"rotation\", a);\n return this;\n };\n Node2.prototype.skew = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\")\n b = a;\n this.pin(\"skewX\", a);\n this.pin(\"skewY\", b);\n return this;\n };\n Node2.prototype.scale = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\")\n b = a;\n this.pin(\"scaleX\", a);\n this.pin(\"scaleY\", b);\n return this;\n };\n Node2.prototype.alpha = function(a, ta) {\n this.pin(\"alpha\", a);\n if (typeof ta !== \"undefined\") {\n this.pin(\"textureAlpha\", ta);\n }\n return this;\n };\n Node2.prototype.tween = function(a, b, c) {\n var options;\n if (typeof a === \"object\" && a !== null) {\n options = a;\n } else {\n options = {};\n if (typeof a === \"number\") {\n options.duration = a;\n if (typeof b === \"number\") {\n options.delay = b;\n if (typeof c === \"boolean\") {\n options.append = c;\n }\n } else if (typeof b === \"boolean\") {\n options.append = b;\n }\n } else if (typeof a === \"boolean\") {\n options.append = a;\n }\n }\n if (!this._transitionTickInitied) {\n this.tick(this._transitionTick, true);\n this._transitionTickInitied = true;\n }\n this.touch();\n if (!options.append) {\n this._transitions.length = 0;\n }\n var transition = new Transition(this, options);\n this._transitions.push(transition);\n return transition;\n };\n Node2.prototype.row = function(align) {\n this.align(\"row\", align);\n return this;\n };\n Node2.prototype.column = function(align) {\n this.align(\"column\", align);\n return this;\n };\n Node2.prototype.align = function(type, align) {\n var _this = this;\n this._padding = this._padding;\n this._spacing = this._spacing;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n if (_this._mo_seq == _this._ts_touch) {\n return;\n }\n _this._mo_seq = _this._ts_touch;\n var alignChildren = _this._mo_seqAlign != _this._ts_children;\n _this._mo_seqAlign = _this._ts_children;\n var width = 0;\n var height = 0;\n var child;\n var next = _this.first(true);\n var first = true;\n while (child = next) {\n next = child.next(true);\n child.matrix(true);\n var w = child.pin(\"boxWidth\");\n var h = child.pin(\"boxHeight\");\n if (type == \"column\") {\n !first && (height += _this._spacing);\n child.pin(\"offsetY\") != height && child.pin(\"offsetY\", height);\n width = Math.max(width, w);\n height = height + h;\n alignChildren && child.pin(\"alignX\", align);\n } else if (type == \"row\") {\n !first && (width += _this._spacing);\n child.pin(\"offsetX\") != width && child.pin(\"offsetX\", width);\n width = width + w;\n height = Math.max(height, h);\n alignChildren && child.pin(\"alignY\", align);\n }\n first = false;\n }\n width += 2 * _this._padding;\n height += 2 * _this._padding;\n _this.pin(\"width\") != width && _this.pin(\"width\", width);\n _this.pin(\"height\") != height && _this.pin(\"height\", height);\n });\n return this;\n };\n Node2.prototype.box = function() {\n return this.minimize();\n };\n Node2.prototype.layer = function() {\n return this.maximize();\n };\n Node2.prototype.minimize = function() {\n var _this = this;\n this._padding = this._padding;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n if (_this._mo_box == _this._ts_touch) {\n return;\n }\n _this._mo_box = _this._ts_touch;\n var width = 0;\n var height = 0;\n var child;\n var next = _this.first(true);\n while (child = next) {\n next = child.next(true);\n child.matrix(true);\n var w = child.pin(\"boxWidth\");\n var h = child.pin(\"boxHeight\");\n width = Math.max(width, w);\n height = Math.max(height, h);\n }\n width += 2 * _this._padding;\n height += 2 * _this._padding;\n _this.pin(\"width\") != width && _this.pin(\"width\", width);\n _this.pin(\"height\") != height && _this.pin(\"height\", height);\n });\n return this;\n };\n Node2.prototype.maximize = function() {\n var _this = this;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n var parent = _this.parent();\n if (parent) {\n var width = parent.pin(\"width\");\n if (_this.pin(\"width\") != width) {\n _this.pin(\"width\", width);\n }\n var height = parent.pin(\"height\");\n if (_this.pin(\"height\") != height) {\n _this.pin(\"height\", height);\n }\n }\n }, true);\n return this;\n };\n Node2.prototype.padding = function(pad) {\n this._padding = pad;\n return this;\n };\n Node2.prototype.spacing = function(space) {\n this._spacing = space;\n return this;\n };\n return Node2;\n }()\n);\nvar __extends$4 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction sprite(frame) {\n var sprite2 = new Sprite();\n frame && sprite2.texture(frame);\n return sprite2;\n}\nvar Sprite = (\n /** @class */\n function(_super) {\n __extends$4(Sprite2, _super);\n function Sprite2() {\n var _this = _super.call(this) || this;\n _this._tiled = false;\n _this._stretched = false;\n _this.prerenderContext = {};\n _this.label(\"Sprite\");\n _this._textures = [];\n _this._image = null;\n return _this;\n }\n Sprite2.prototype.texture = function(frame) {\n this._image = texture(frame).one();\n if (this._image) {\n this.pin(\"width\", this._image.getWidth());\n this.pin(\"height\", this._image.getHeight());\n if (this._tiled) {\n this._textures[0] = new ResizableTexture(this._image, \"tile\");\n } else if (this._stretched) {\n this._textures[0] = new ResizableTexture(this._image, \"stretch\");\n } else {\n this._textures[0] = new PipeTexture(this._image);\n }\n this._textures.length = 1;\n } else {\n this.pin(\"width\", 0);\n this.pin(\"height\", 0);\n this._textures.length = 0;\n }\n return this;\n };\n Sprite2.prototype.image = function(frame) {\n return this.texture(frame);\n };\n Sprite2.prototype.tile = function(inner) {\n this._tiled = true;\n var texture2 = new ResizableTexture(this._image, \"tile\");\n this._textures[0] = texture2;\n return this;\n };\n Sprite2.prototype.stretch = function(inner) {\n this._stretched = true;\n var texture2 = new ResizableTexture(this._image, \"stretch\");\n this._textures[0] = texture2;\n return this;\n };\n Sprite2.prototype.prerender = function() {\n if (!this._visible) {\n return;\n }\n if (this._image) {\n var pixelRatio = this.getPixelRatio();\n this.prerenderContext.pixelRatio = pixelRatio;\n var updated = this._image.prerender(this.prerenderContext);\n if (updated === true) {\n var w = this._image.getWidth();\n var h = this._image.getHeight();\n this.size(w, h);\n }\n }\n _super.prototype.prerender.call(this);\n };\n Sprite2.prototype.render = function(context) {\n var texture2 = this._textures[0];\n if (texture2 === null || texture2 === void 0 ? void 0 : texture2[\"_resizeMode\"]) {\n texture2.dw = this.pin(\"width\");\n texture2.dh = this.pin(\"height\");\n }\n _super.prototype.render.call(this, context);\n };\n return Sprite2;\n }(Node)\n);\nvar image = sprite;\nvar Image$1 = Sprite;\nvar __extends$3 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar CanvasTexture = (\n /** @class */\n function(_super) {\n __extends$3(CanvasTexture2, _super);\n function CanvasTexture2() {\n var _this = _super.call(this, document.createElement(\"canvas\")) || this;\n _this._lastPixelRatio = 0;\n return _this;\n }\n CanvasTexture2.prototype.setSize = function(textureWidth, textureHeight, pixelRatio) {\n if (pixelRatio === void 0) {\n pixelRatio = 1;\n }\n this._source.width = textureWidth * pixelRatio;\n this._source.height = textureHeight * pixelRatio;\n this._pixelRatio = pixelRatio;\n };\n CanvasTexture2.prototype.getContext = function(type, attributes) {\n if (type === void 0) {\n type = \"2d\";\n }\n return this._source.getContext(type, attributes);\n };\n CanvasTexture2.prototype.getOptimalPixelRatio = function() {\n return Math.ceil(this._lastPixelRatio);\n };\n CanvasTexture2.prototype.setMemoizer = function(memoizer) {\n this._memoizer = memoizer;\n };\n CanvasTexture2.prototype.setDrawer = function(drawer) {\n this._drawer = drawer;\n };\n CanvasTexture2.prototype.prerender = function(context) {\n var newPixelRatio = context.pixelRatio;\n var lastPixelRatio = this._lastPixelRatio;\n var pixelRationChange = lastPixelRatio / newPixelRatio;\n var pixelRatioChanged = lastPixelRatio === 0 || pixelRationChange > 1.25 || pixelRationChange < 0.8;\n if (pixelRatioChanged) {\n this._lastPixelRatio = newPixelRatio;\n }\n var newMemoKey = this._memoizer ? this._memoizer.call(this) : null;\n var memoKeyChanged = this._lastMemoKey !== newMemoKey;\n if (pixelRatioChanged || memoKeyChanged) {\n this._lastMemoKey = newMemoKey;\n this._lastPixelRatio = newPixelRatio;\n if (typeof this._drawer === \"function\") {\n this._drawer.call(this);\n }\n return true;\n }\n };\n CanvasTexture2.prototype.size = function(width, height, pixelRatio) {\n this.setSize(width, height, pixelRatio);\n return this;\n };\n CanvasTexture2.prototype.context = function(type, attributes) {\n if (type === void 0) {\n type = \"2d\";\n }\n return this.getContext(type, attributes);\n };\n CanvasTexture2.prototype.canvas = function(legacyTextureDrawer) {\n if (typeof legacyTextureDrawer === \"function\") {\n legacyTextureDrawer.call(this, this.getContext());\n } else if (typeof legacyTextureDrawer === \"undefined\") {\n if (typeof this._drawer === \"function\") {\n this._drawer.call(this);\n }\n }\n return this;\n };\n return CanvasTexture2;\n }(ImageTexture)\n);\nfunction canvas(type, attributes, legacyTextureDrawer) {\n if (typeof type === \"function\") {\n var texture_1 = new CanvasTexture();\n legacyTextureDrawer = type;\n texture_1.setDrawer(function() {\n legacyTextureDrawer.call(texture_1, texture_1.getContext());\n });\n return texture_1;\n } else if (typeof attributes === \"function\") {\n var texture_2 = new CanvasTexture();\n legacyTextureDrawer = attributes;\n texture_2.setDrawer(function() {\n legacyTextureDrawer.call(texture_2, texture_2.getContext(type));\n });\n return texture_2;\n } else if (typeof legacyTextureDrawer === \"function\") {\n var texture_3 = new CanvasTexture();\n texture_3.setDrawer(function() {\n legacyTextureDrawer.call(texture_3, texture_3.getContext(type, attributes));\n });\n return texture_3;\n } else {\n var texture2 = new CanvasTexture();\n return texture2;\n }\n}\nfunction memoizeDraw(legacySpriteDrawer, legacySpriteMemoizer) {\n if (legacySpriteMemoizer === void 0) {\n legacySpriteMemoizer = function() {\n return null;\n };\n }\n var sprite2 = new Sprite();\n var texture2 = new CanvasTexture();\n sprite2.texture(texture2);\n texture2.setDrawer(function() {\n legacySpriteDrawer(2.5 * texture2._lastPixelRatio, texture2, sprite2);\n });\n texture2.setMemoizer(legacySpriteMemoizer);\n return sprite2;\n}\nvar POINTER_CLICK = \"click\";\nvar POINTER_START = \"touchstart mousedown\";\nvar POINTER_MOVE = \"touchmove mousemove\";\nvar POINTER_END = \"touchend mouseup\";\nvar POINTER_CANCEL = \"touchcancel mousecancel\";\nvar EventPoint = (\n /** @class */\n function() {\n function EventPoint2() {\n }\n EventPoint2.prototype.clone = function(obj) {\n if (obj) {\n obj.x = this.x;\n obj.y = this.y;\n } else {\n obj = {\n x: this.x,\n y: this.y\n };\n }\n return obj;\n };\n EventPoint2.prototype.toString = function() {\n return (this.x | 0) + \"x\" + (this.y | 0);\n };\n return EventPoint2;\n }()\n);\nvar PointerSyntheticEvent = (\n /** @class */\n function() {\n function PointerSyntheticEvent2() {\n this.abs = new EventPoint();\n }\n PointerSyntheticEvent2.prototype.clone = function(obj) {\n if (obj) {\n obj.x = this.x;\n obj.y = this.y;\n } else {\n obj = {\n x: this.x,\n y: this.y\n };\n }\n return obj;\n };\n PointerSyntheticEvent2.prototype.toString = function() {\n return this.type + \": \" + (this.x | 0) + \"x\" + (this.y | 0);\n };\n return PointerSyntheticEvent2;\n }()\n);\nvar VisitPayload = (\n /** @class */\n function() {\n function VisitPayload2() {\n this.type = \"\";\n this.x = 0;\n this.y = 0;\n this.timeStamp = -1;\n this.event = null;\n this.root = null;\n this.collected = null;\n }\n VisitPayload2.prototype.toString = function() {\n return this.type + \": \" + (this.x | 0) + \"x\" + (this.y | 0);\n };\n return VisitPayload2;\n }()\n);\nvar syntheticEvent = new PointerSyntheticEvent();\nvar PAYLOAD = new VisitPayload();\nvar Pointer = (\n /** @class */\n function() {\n function Pointer2() {\n var _this = this;\n this.ratio = 1;\n this.clickList = [];\n this.cancelList = [];\n this.handleStart = function(event) {\n event.preventDefault();\n _this.localPoint(event);\n _this.dispatchEvent(event.type, event);\n _this.findTargets(\"click\", _this.clickList);\n _this.findTargets(\"mousecancel\", _this.cancelList);\n };\n this.handleMove = function(event) {\n event.preventDefault();\n _this.localPoint(event);\n _this.dispatchEvent(event.type, event);\n };\n this.handleEnd = function(event) {\n event.preventDefault();\n _this.dispatchEvent(event.type, event);\n if (_this.clickList.length) {\n _this.dispatchEvent(\"click\", event, _this.clickList);\n }\n _this.cancelList.length = 0;\n };\n this.handleCancel = function(event) {\n if (_this.cancelList.length) {\n _this.dispatchEvent(\"mousecancel\", event, _this.cancelList);\n }\n _this.clickList.length = 0;\n };\n this.visitStart = function(node, payload) {\n return !node._flag(payload.type);\n };\n this.visitEnd = function(node, payload) {\n syntheticEvent.raw = payload.event;\n syntheticEvent.type = payload.type;\n syntheticEvent.timeStamp = payload.timeStamp;\n syntheticEvent.abs.x = payload.x;\n syntheticEvent.abs.y = payload.y;\n var listeners = node.listeners(payload.type);\n if (!listeners) {\n return;\n }\n node.matrix().inverse().map(payload, syntheticEvent);\n var isEventTarget = node === payload.root || node.attr(\"spy\") || node.hitTest(syntheticEvent);\n if (!isEventTarget) {\n return;\n }\n if (payload.collected) {\n payload.collected.push(node);\n }\n if (payload.event) {\n var cancel = false;\n for (var l = 0; l < listeners.length; l++) {\n cancel = listeners[l].call(node, syntheticEvent) ? true : cancel;\n }\n return cancel;\n }\n };\n }\n Pointer2.prototype.mount = function(stage, elem) {\n var _this = this;\n this.stage = stage;\n this.elem = elem;\n this.ratio = stage.viewport().ratio || 1;\n stage.on(\"viewport\", function(viewport) {\n var _a;\n _this.ratio = (_a = viewport.ratio) !== null && _a !== void 0 ? _a : _this.ratio;\n });\n elem.addEventListener(\"touchstart\", this.handleStart);\n elem.addEventListener(\"touchend\", this.handleEnd);\n elem.addEventListener(\"touchmove\", this.handleMove);\n elem.addEventListener(\"touchcancel\", this.handleCancel);\n elem.addEventListener(\"mousedown\", this.handleStart);\n elem.addEventListener(\"mouseup\", this.handleEnd);\n elem.addEventListener(\"mousemove\", this.handleMove);\n document.addEventListener(\"mouseup\", this.handleCancel);\n window.addEventListener(\"blur\", this.handleCancel);\n return this;\n };\n Pointer2.prototype.unmount = function() {\n var elem = this.elem;\n elem.removeEventListener(\"touchstart\", this.handleStart);\n elem.removeEventListener(\"touchend\", this.handleEnd);\n elem.removeEventListener(\"touchmove\", this.handleMove);\n elem.removeEventListener(\"touchcancel\", this.handleCancel);\n elem.removeEventListener(\"mousedown\", this.handleStart);\n elem.removeEventListener(\"mouseup\", this.handleEnd);\n elem.removeEventListener(\"mousemove\", this.handleMove);\n document.removeEventListener(\"mouseup\", this.handleCancel);\n window.removeEventListener(\"blur\", this.handleCancel);\n return this;\n };\n Pointer2.prototype.localPoint = function(event) {\n var _a;\n var elem = this.elem;\n var x;\n var y;\n if ((_a = event.touches) === null || _a === void 0 ? void 0 : _a.length) {\n x = event.touches[0].clientX;\n y = event.touches[0].clientY;\n } else {\n x = event.clientX;\n y = event.clientY;\n }\n var rect = elem.getBoundingClientRect();\n x -= rect.left;\n y -= rect.top;\n x -= elem.clientLeft | 0;\n y -= elem.clientTop | 0;\n PAYLOAD.x = x * this.ratio;\n PAYLOAD.y = y * this.ratio;\n };\n Pointer2.prototype.findTargets = function(type, result) {\n var payload = PAYLOAD;\n payload.type = type;\n payload.root = this.stage;\n payload.event = null;\n payload.collected = result;\n payload.collected.length = 0;\n this.stage.visit({\n reverse: true,\n visible: true,\n start: this.visitStart,\n end: this.visitEnd\n }, payload);\n };\n Pointer2.prototype.dispatchEvent = function(type, event, targets) {\n var payload = PAYLOAD;\n payload.type = type;\n payload.root = this.stage;\n payload.event = event;\n payload.timeStamp = Date.now();\n payload.collected = null;\n if (targets) {\n while (targets.length) {\n var node = targets.shift();\n if (this.visitEnd(node, payload)) {\n break;\n }\n }\n targets.length = 0;\n } else {\n this.stage.visit({\n reverse: true,\n visible: true,\n start: this.visitStart,\n end: this.visitEnd\n }, payload);\n }\n };\n return Pointer2;\n }()\n);\nvar Mouse = {\n CLICK: \"click\",\n START: \"touchstart mousedown\",\n MOVE: \"touchmove mousemove\",\n END: \"touchend mouseup\",\n CANCEL: \"touchcancel mousecancel\"\n};\nvar __extends$2 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __assign = function() {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar ROOTS = [];\nfunction pause() {\n for (var i = ROOTS.length - 1; i >= 0; i--) {\n ROOTS[i].pause();\n }\n}\nfunction resume() {\n for (var i = ROOTS.length - 1; i >= 0; i--) {\n ROOTS[i].resume();\n }\n}\nfunction mount(configs) {\n if (configs === void 0) {\n configs = {};\n }\n var root = new Root();\n root.mount(configs);\n root.pointer = new Pointer().mount(root, root.dom);\n return root;\n}\nvar Root = (\n /** @class */\n function(_super) {\n __extends$2(Root2, _super);\n function Root2() {\n var _this = _super.call(this) || this;\n _this.canvas = null;\n _this.dom = null;\n _this.context = null;\n _this.pixelWidth = -1;\n _this.pixelHeight = -1;\n _this.pixelRatio = 1;\n _this.drawingWidth = 0;\n _this.drawingHeight = 0;\n _this.mounted = false;\n _this.paused = false;\n _this.sleep = false;\n _this.mount = function(configs) {\n if (configs === void 0) {\n configs = {};\n }\n if (typeof configs.canvas === \"string\") {\n _this.canvas = document.getElementById(configs.canvas);\n if (!_this.canvas) {\n console.error(\"Canvas element not found: \", configs.canvas);\n }\n } else if (configs.canvas instanceof HTMLCanvasElement) {\n _this.canvas = configs.canvas;\n } else if (configs.canvas) {\n console.error(\"Unknown value for canvas:\", configs.canvas);\n }\n if (!_this.canvas) {\n _this.canvas = document.getElementById(\"cutjs\") || document.getElementById(\"stage\");\n }\n if (!_this.canvas) {\n _this.canvas = document.createElement(\"canvas\");\n Object.assign(_this.canvas.style, {\n position: \"absolute\",\n display: \"block\",\n top: \"0\",\n left: \"0\",\n bottom: \"0\",\n right: \"0\",\n width: \"100%\",\n height: \"100%\"\n });\n var body = document.body;\n body.insertBefore(_this.canvas, body.firstChild);\n }\n _this.dom = _this.canvas;\n _this.context = _this.canvas.getContext(\"2d\");\n var devicePixelRatio = window.devicePixelRatio || 1;\n var backingStorePixelRatio = (\n // @ts-ignore\n _this.context.webkitBackingStorePixelRatio || // @ts-ignore\n _this.context.mozBackingStorePixelRatio || // @ts-ignore\n _this.context.msBackingStorePixelRatio || // @ts-ignore\n _this.context.oBackingStorePixelRatio || // @ts-ignore\n _this.context.backingStorePixelRatio || 1\n );\n _this.devicePixelRatio = devicePixelRatio;\n _this.backingStoreRatio = backingStorePixelRatio;\n _this.pixelRatio = _this.devicePixelRatio / _this.backingStoreRatio;\n _this.mounted = true;\n ROOTS.push(_this);\n _this.requestFrame();\n };\n _this.frameRequested = false;\n _this.requestFrame = function() {\n if (!_this.frameRequested) {\n _this.frameRequested = true;\n requestAnimationFrame(_this.onFrame);\n }\n };\n _this._lastFrameTime = 0;\n _this._mo_touch = null;\n _this.onFrame = function(now) {\n _this.frameRequested = false;\n if (!_this.mounted || !_this.canvas || !_this.context) {\n return;\n }\n _this.requestFrame();\n var newPixelWidth = _this.canvas.clientWidth;\n var newPixelHeight = _this.canvas.clientHeight;\n if (_this.pixelWidth !== newPixelWidth || _this.pixelHeight !== newPixelHeight) {\n _this.pixelWidth = newPixelWidth;\n _this.pixelHeight = newPixelHeight;\n _this.drawingWidth = newPixelWidth * _this.pixelRatio;\n _this.drawingHeight = newPixelHeight * _this.pixelRatio;\n if (_this.canvas.width !== _this.drawingWidth || _this.canvas.height !== _this.drawingHeight) {\n _this.canvas.width = _this.drawingWidth;\n _this.canvas.height = _this.drawingHeight;\n _this.viewport({\n width: _this.drawingWidth,\n height: _this.drawingHeight,\n ratio: _this.pixelRatio\n });\n }\n }\n var last = _this._lastFrameTime || now;\n var elapsed = now - last;\n if (!_this.mounted || _this.paused || _this.sleep) {\n return;\n }\n _this._lastFrameTime = now;\n _this.prerender();\n var tickRequest = _this._tick(elapsed, now, last);\n if (_this._mo_touch != _this._ts_touch) {\n _this._mo_touch = _this._ts_touch;\n _this.sleep = false;\n if (_this.drawingWidth > 0 && _this.drawingHeight > 0) {\n _this.context.setTransform(1, 0, 0, 1, 0, 0);\n _this.context.clearRect(0, 0, _this.drawingWidth, _this.drawingHeight);\n _this.render(_this.context);\n }\n } else if (tickRequest) {\n _this.sleep = false;\n } else {\n _this.sleep = true;\n }\n stats.fps = elapsed ? 1e3 / elapsed : 0;\n };\n _this.label(\"Root\");\n return _this;\n }\n Root2.prototype.resume = function() {\n if (this.sleep || this.paused) {\n this.requestFrame();\n }\n this.paused = false;\n this.sleep = false;\n this.publish(\"resume\");\n return this;\n };\n Root2.prototype.pause = function() {\n if (!this.paused) {\n this.publish(\"pause\");\n }\n this.paused = true;\n return this;\n };\n Root2.prototype.touch = function() {\n if (this.sleep || this.paused) {\n this.requestFrame();\n }\n this.sleep = false;\n return _super.prototype.touch.call(this);\n };\n Root2.prototype.unmount = function() {\n var _a;\n this.mounted = false;\n var index = ROOTS.indexOf(this);\n if (index >= 0) {\n ROOTS.splice(index, 1);\n }\n (_a = this.pointer) === null || _a === void 0 ? void 0 : _a.unmount();\n return this;\n };\n Root2.prototype.background = function(color) {\n if (this.dom) {\n this.dom.style.backgroundColor = color;\n }\n return this;\n };\n Root2.prototype.viewport = function(width, height, ratio) {\n if (typeof width === \"undefined\") {\n return Object.assign({}, this._viewport);\n }\n if (typeof width === \"object\") {\n var options = width;\n width = options.width;\n height = options.height;\n ratio = options.ratio;\n }\n if (typeof width === \"number\" && typeof height === \"number\") {\n this._viewport = {\n width,\n height,\n ratio: typeof ratio === \"number\" ? ratio : 1\n };\n this.viewbox();\n var data_1 = Object.assign({}, this._viewport);\n this.visit({\n start: function(node) {\n if (!node._flag(\"viewport\")) {\n return true;\n }\n node.publish(\"viewport\", [data_1]);\n }\n });\n }\n return this;\n };\n Root2.prototype.viewbox = function(width, height, mode) {\n if (typeof width === \"number\" && typeof height === \"number\") {\n this._viewbox = {\n width,\n height,\n mode\n };\n } else if (typeof width === \"object\" && width !== null) {\n this._viewbox = __assign({}, width);\n }\n this.rescale();\n return this;\n };\n Root2.prototype.camera = function(matrix) {\n this._camera = matrix;\n this.rescale();\n return this;\n };\n Root2.prototype.rescale = function() {\n var viewbox = this._viewbox;\n var viewport = this._viewport;\n var camera = this._camera;\n if (viewport && viewbox) {\n var viewportWidth = viewport.width;\n var viewportHeight = viewport.height;\n var viewboxMode = isValidFitMode(viewbox.mode) ? viewbox.mode : \"in-pad\";\n var viewboxWidth = viewbox.width;\n var viewboxHeight = viewbox.height;\n this.pin({\n width: viewboxWidth,\n height: viewboxHeight\n });\n this.scaleTo(viewportWidth, viewportHeight, viewboxMode);\n var viewboxX = viewbox.x || 0;\n var viewboxY = viewbox.y || 0;\n var cameraZoom = (camera === null || camera === void 0 ? void 0 : camera.a) || 1;\n var cameraX = (camera === null || camera === void 0 ? void 0 : camera.e) || 0;\n var cameraY = (camera === null || camera === void 0 ? void 0 : camera.f) || 0;\n var scaleX = this.pin(\"scaleX\");\n var scaleY = this.pin(\"scaleY\");\n this.pin(\"scaleX\", scaleX * cameraZoom);\n this.pin(\"scaleY\", scaleY * cameraZoom);\n this.pin(\"offsetX\", cameraX - viewboxX * scaleX * cameraZoom);\n this.pin(\"offsetY\", cameraY - viewboxY * scaleY * cameraZoom);\n } else if (viewport) {\n this.pin({\n width: viewport.width,\n height: viewport.height\n });\n }\n return this;\n };\n return Root2;\n }(Node)\n);\nvar __extends$1 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction anim(frames, fps) {\n var anim2 = new Anim();\n anim2.frames(frames).gotoFrame(0);\n fps && anim2.fps(fps);\n return anim2;\n}\nvar FPS = 15;\nvar Anim = (\n /** @class */\n function(_super) {\n __extends$1(Anim2, _super);\n function Anim2() {\n var _this = _super.call(this) || this;\n _this.label(\"Anim\");\n _this._textures = [];\n _this._fps = FPS;\n _this._ft = 1e3 / _this._fps;\n _this._time = -1;\n _this._repeat = 0;\n _this._index = 0;\n _this._frames = [];\n var lastTime = 0;\n _this.tick(function(t, now, last) {\n if (this._time < 0 || this._frames.length <= 1) {\n return;\n }\n var ignore = lastTime != last;\n lastTime = now;\n if (ignore) {\n return true;\n }\n this._time += t;\n if (this._time < this._ft) {\n return true;\n }\n var n = this._time / this._ft | 0;\n this._time -= n * this._ft;\n this.moveFrame(n);\n if (this._repeat > 0 && (this._repeat -= n) <= 0) {\n this.stop();\n this._callback && this._callback();\n return false;\n }\n return true;\n }, false);\n return _this;\n }\n Anim2.prototype.fps = function(fps) {\n if (typeof fps === \"undefined\") {\n return this._fps;\n }\n this._fps = fps > 0 ? fps : FPS;\n this._ft = 1e3 / this._fps;\n return this;\n };\n Anim2.prototype.setFrames = function(frames) {\n return this.frames(frames);\n };\n Anim2.prototype.frames = function(frames) {\n this._index = 0;\n this._frames = texture(frames).array();\n this.touch();\n return this;\n };\n Anim2.prototype.length = function() {\n return this._frames ? this._frames.length : 0;\n };\n Anim2.prototype.gotoFrame = function(frame, resize) {\n if (resize === void 0) {\n resize = false;\n }\n this._index = math.wrap(frame, this._frames.length) | 0;\n resize = resize || !this._textures[0];\n this._textures[0] = this._frames[this._index];\n if (resize) {\n this.pin(\"width\", this._textures[0].getWidth());\n this.pin(\"height\", this._textures[0].getHeight());\n }\n this.touch();\n return this;\n };\n Anim2.prototype.moveFrame = function(move) {\n return this.gotoFrame(this._index + move);\n };\n Anim2.prototype.repeat = function(repeat, callback) {\n this._repeat = repeat * this._frames.length - 1;\n this._callback = callback;\n this.play();\n return this;\n };\n Anim2.prototype.play = function(frame) {\n if (typeof frame !== \"undefined\") {\n this.gotoFrame(frame);\n this._time = 0;\n } else if (this._time < 0) {\n this._time = 0;\n }\n this.touch();\n return this;\n };\n Anim2.prototype.stop = function(frame) {\n this._time = -1;\n if (typeof frame !== \"undefined\") {\n this.gotoFrame(frame);\n }\n return this;\n };\n return Anim2;\n }(Node)\n);\nvar __extends = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction monotype(chars) {\n return new Monotype().frames(chars);\n}\nvar Monotype = (\n /** @class */\n function(_super) {\n __extends(Monotype2, _super);\n function Monotype2() {\n var _this = _super.call(this) || this;\n _this.label(\"String\");\n _this._textures = [];\n return _this;\n }\n Monotype2.prototype.setFont = function(frames) {\n return this.frames(frames);\n };\n Monotype2.prototype.frames = function(frames) {\n this._textures = [];\n if (typeof frames == \"string\") {\n var selection_1 = texture(frames);\n this._font = function(value) {\n return selection_1.one(value);\n };\n } else if (typeof frames === \"object\") {\n this._font = function(value) {\n return frames[value];\n };\n } else if (typeof frames === \"function\") {\n this._font = frames;\n }\n return this;\n };\n Monotype2.prototype.setValue = function(value) {\n return this.value(value);\n };\n Monotype2.prototype.value = function(value) {\n if (typeof value === \"undefined\") {\n return this._value;\n }\n if (this._value === value) {\n return this;\n }\n this._value = value;\n if (value === null) {\n value = \"\";\n } else if (typeof value !== \"string\" && !Array.isArray(value)) {\n value = value.toString();\n }\n this._spacing = this._spacing || 0;\n var width = 0;\n var height = 0;\n for (var i = 0; i < value.length; i++) {\n var v = value[i];\n var texture_1 = this._textures[i] = this._font(typeof v === \"string\" ? v : v + \"\");\n width += i > 0 ? this._spacing : 0;\n texture_1.setDestinationCoordinate(width, 0);\n width = width + texture_1.getWidth();\n height = Math.max(height, texture_1.getHeight());\n }\n this.pin(\"width\", width);\n this.pin(\"height\", height);\n this._textures.length = value.length;\n return this;\n };\n return Monotype2;\n }(Node)\n);\nvar string = monotype;\nvar Str = Monotype;\nconst Stage = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n Anim,\n Atlas,\n CanvasTexture,\n Image: Image$1,\n ImageTexture,\n Math: math,\n Matrix,\n Monotype,\n Mouse,\n Node,\n POINTER_CANCEL,\n POINTER_CLICK,\n POINTER_END,\n POINTER_MOVE,\n POINTER_START,\n Pin,\n PipeTexture,\n Pointer,\n ResizableTexture,\n Root,\n Sprite,\n Str,\n Texture,\n TextureSelection,\n Transition,\n anim,\n atlas,\n box,\n canvas,\n clamp,\n column,\n create,\n image,\n isValidFitMode,\n layer,\n layout,\n length,\n math,\n maximize,\n memoizeDraw,\n minimize,\n monotype,\n mount,\n pause,\n random,\n resume,\n row,\n sprite,\n string,\n texture,\n wrap\n}, Symbol.toStringTag, { value: \"Module\" }));\nexport {\n Anim,\n Atlas,\n CanvasTexture,\n Image$1 as Image,\n ImageTexture,\n math as Math,\n Matrix,\n Monotype,\n Mouse,\n Node,\n POINTER_CANCEL,\n POINTER_CLICK,\n POINTER_END,\n POINTER_MOVE,\n POINTER_START,\n Pin,\n PipeTexture,\n Pointer,\n ResizableTexture,\n Root,\n Sprite,\n Str,\n Texture,\n TextureSelection,\n Transition,\n anim,\n atlas,\n box,\n canvas,\n clamp,\n column,\n create,\n Stage as default,\n image,\n isValidFitMode,\n layer,\n layout,\n length,\n math,\n maximize,\n memoizeDraw,\n minimize,\n monotype,\n mount,\n pause,\n random,\n resume,\n row,\n sprite,\n string,\n texture,\n wrap\n};\n","import Stage from 'stage-js';\n\nimport type { Vec2Value } from '../src/common/Vec2';\nimport type { World } from \"../src/dynamics/World\";\nimport type { Joint } from \"../src/dynamics/Joint\";\nimport type { Fixture } from \"../src/dynamics/Fixture\";\nimport type { Body } from \"../src/dynamics/Body\";\nimport type { AABBValue } from \"../src/collision/AABB\";\nimport type { Style } from '../src/util/Testbed';\nimport { Testbed } from '../src/util/Testbed';\nimport type { EdgeShape } from \"../src/collision/shape/EdgeShape\";\nimport type { PolygonShape } from \"../src/collision/shape/PolygonShape\";\nimport type { ChainShape } from \"../src/collision/shape/ChainShape\";\nimport type { CircleShape } from \"../src/collision/shape/CircleShape\";\nimport type { PulleyJoint } from \"../src/dynamics/joint/PulleyJoint\";\nimport { MouseJoint } from \"../src/dynamics/joint/MouseJoint\";\n\nconst math_atan2 = Math.atan2;\nconst math_abs = Math.abs;\nconst math_sqrt = Math.sqrt;\nconst math_PI = Math.PI;\nconst math_max = Math.max;\nconst math_min = Math.min;\n\n\nlet mounted: StageTestbed | null = null;\n\n/** @internal */\nfunction memo() {\n const memory: any = [];\n function recall(...rest: any[]) {\n let equal = memory.length === rest.length;\n for (let i = 0; equal && i < rest.length; i++) {\n equal = equal && memory[i] === rest[i];\n memory[i] = rest[i];\n }\n memory.length = rest.length;\n return equal;\n }\n function reset() {\n memory.length = 0;\n // void 0;\n }\n return {\n recall,\n reset,\n };\n}\n\nTestbed.mount = () => {\n if (mounted) {\n return mounted;\n }\n\n mounted = new StageTestbed();\n\n // todo: merge rest of this into StageTestbed\n\n // todo: should we create these elements if not exists?\n const playButton = document.getElementById('testbed-play');\n const statusElement = document.getElementById('testbed-status');\n const infoElement = document.getElementById('testbed-info');\n\n if (playButton) {\n playButton.addEventListener('click', () => {\n mounted.isPaused() ? mounted.resume() : mounted.pause();\n });\n\n mounted._pause = () => {\n playButton.classList.add('pause');\n playButton.classList.remove('play');\n };\n\n mounted._resume = () => {\n playButton.classList.add('play');\n playButton.classList.remove('pause');\n };\n } else {\n console.log(\"Please create a button with id='testbed-play'\");\n }\n\n let lastStatus = '';\n if (statusElement) {\n statusElement.innerText = lastStatus;\n }\n mounted._status = (text: string) => {\n if (lastStatus === text) {\n return;\n }\n lastStatus = text;\n if (statusElement) {\n statusElement.innerText = text;\n }\n };\n\n let lastInfo = '';\n if (infoElement) {\n infoElement.innerText = lastInfo;\n }\n mounted._info = (text: string) => {\n if (lastInfo === text) {\n return;\n }\n lastInfo = text;\n if (infoElement) {\n infoElement.innerText = text;\n }\n };\n\n return mounted;\n};\n\nconst getStyle = function(obj: Body | Fixture | Joint): Style {\n return obj['render'] ?? obj['style'] ?? {};\n};\n\nfunction findBody(world: World, point: Vec2Value) {\n let body: Body | null = null;\n const aabb = {\n lowerBound: point,\n upperBound: point,\n };\n world.queryAABB(aabb, (fixture: Fixture) => {\n if (!fixture.getBody().isDynamic() || !fixture.testPoint(point)) {\n return true;\n }\n body = fixture.getBody();\n return false;\n });\n return body;\n}\n\n/** @internal */\nclass StageTestbed extends Testbed {\n private canvas: HTMLCanvasElement;\n private stage: Stage.Root;\n private paused: boolean = false;\n private lastDrawHash = \"\";\n private newDrawHash = \"\";\n private buffer: ((context: CanvasRenderingContext2D, ratio: number)=> void)[] = [];\n\n start(world: World) {\n const stage = this.stage = Stage.mount();\n const canvas = this.canvas = stage.dom as HTMLCanvasElement;\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const testbed = this;\n this.canvas = canvas;\n\n stage.on(Stage.POINTER_START, () => {\n window.focus();\n // @ts-ignore\n document.activeElement?.blur();\n canvas.focus();\n });\n\n stage.MAX_ELAPSE = 1000 / 30;\n\n stage.on('resume', () => {\n this.paused = false;\n this._resume();\n });\n stage.on('pause', () => {\n this.paused = true;\n this._pause();\n });\n\n const drawingTexture = new Stage.CanvasTexture();\n drawingTexture.draw = (ctx: CanvasRenderingContext2D) => {\n const pixelRatio = 2 * drawingTexture.getOptimalPixelRatio();\n ctx.save();\n ctx.transform(1, 0, 0, this.scaleY, -this.x, -this.y);\n ctx.lineWidth = 3 / pixelRatio;\n ctx.lineCap = 'round';\n for (let drawing = this.buffer.shift(); drawing; drawing = this.buffer.shift()) {\n drawing(ctx, pixelRatio);\n }\n ctx.restore();\n };\n\n const drawingElement = Stage.sprite(drawingTexture);\n stage.append(drawingElement);\n stage.tick(() => {\n this.buffer.length = 0;\n }, true);\n\n\n stage.background(this.background);\n stage.viewbox(this.width, this.height);\n stage.pin('alignX', -0.5);\n stage.pin('alignY', -0.5);\n\n const worldNode = new WorldStageNode(world, this);\n\n // stage.empty();\n stage.prepend(worldNode);\n\n let lastX = 0;\n let lastY = 0;\n stage.tick((dt: number, t: number) => {\n // update camera position\n if (lastX !== this.x || lastY !== this.y) {\n worldNode.offset(-this.x, -this.y);\n lastX = this.x;\n lastY = this.y;\n }\n });\n\n worldNode.tick((dt: number, t: number) => {\n this.step(dt, t);\n\n if (targetBody) {\n this.drawSegment(targetBody.getPosition(), mouseMove, 'rgba(255,255,255,0.2)');\n }\n\n if (this.lastDrawHash !== this.newDrawHash) {\n this.lastDrawHash = this.newDrawHash;\n stage.touch();\n }\n this.newDrawHash = \"\";\n\n return true;\n });\n\n const mouseGround = world.createBody();\n let mouseJoint: MouseJoint | null = null;\n let targetBody: Body | null = null;\n const mouseMove = {x: 0, y: 0};\n\n worldNode.attr('spy', true);\n\n worldNode.on(Stage.POINTER_START, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (targetBody) {\n return;\n }\n\n const body = findBody(world, point);\n if (!body) {\n return;\n }\n\n if (this.mouseForce) {\n targetBody = body;\n\n } else {\n mouseJoint = new MouseJoint({maxForce: 1000}, mouseGround, body, { x: point.x, y: point.y });\n world.createJoint(mouseJoint);\n }\n });\n\n worldNode.on(Stage.POINTER_MOVE, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n mouseJoint.setTarget(point);\n }\n\n mouseMove.x = point.x;\n mouseMove.y = point.y;\n });\n\n worldNode.on(Stage.POINTER_END, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n world.destroyJoint(mouseJoint);\n mouseJoint = null;\n }\n if (targetBody && this.mouseForce) {\n const target = targetBody.getPosition();\n const force = {\n x: (point.x - target.x) * this.mouseForce,\n y: (point.y - target.y) * this.mouseForce,\n };\n targetBody.applyForceToCenter(force, true);\n targetBody = null;\n }\n });\n\n worldNode.on(Stage.POINTER_CANCEL, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n world.destroyJoint(mouseJoint);\n mouseJoint = null;\n }\n if (targetBody) {\n targetBody = null;\n }\n });\n\n const activeKeys = testbed.activeKeys;\n const downKeys: Record = {};\n function updateActiveKeys(keyCode: number, down: boolean) {\n const char = String.fromCharCode(keyCode);\n if (/\\w/.test(char)) {\n activeKeys[char] = down;\n }\n activeKeys.right = downKeys[39] || activeKeys['D'];\n activeKeys.left = downKeys[37] || activeKeys['A'];\n activeKeys.up = downKeys[38] || activeKeys['W'];\n activeKeys.down = downKeys[40] || activeKeys['S'];\n activeKeys.fire = downKeys[32] || downKeys[13] ;\n }\n\n window.addEventListener(\"keydown\", function(e) {\n const keyCode = e.keyCode;\n downKeys[keyCode] = true;\n updateActiveKeys(keyCode, true);\n testbed.keydown && testbed.keydown(keyCode, String.fromCharCode(keyCode));\n });\n window.addEventListener(\"keyup\", function(e) {\n const keyCode = e.keyCode;\n downKeys[keyCode] = false;\n updateActiveKeys(keyCode, false);\n testbed.keyup && testbed.keyup(keyCode, String.fromCharCode(keyCode));\n });\n\n this.resume();\n }\n\n /** @private @internal */\n focus() {\n // @ts-ignore\n document.activeElement && document.activeElement.blur();\n this.canvas.focus();\n }\n\n /** @internal */\n _pause() {\n }\n\n /** @internal */\n _resume() {\n }\n\n private statusText = '';\n private statusMap: Record = {};\n\n status(name: string, value: any): void;\n status(value: object | string): void;\n status(a: any, b?: any) {\n if (typeof b !== 'undefined') {\n const key = a;\n const value = b;\n if (typeof value !== 'function' && typeof value !== 'object') {\n this.statusMap[key] = value;\n }\n } else if (a && typeof a === 'object') {\n // tslint:disable-next-line:no-for-in\n for (const key in a) {\n const value = a[key];\n if (typeof value !== 'function' && typeof value !== 'object') {\n this.statusMap[key] = value;\n }\n }\n } else if (typeof a === 'string') {\n this.statusText = a;\n }\n\n var newline = '\\n';\n var text = this.statusText || '';\n for (var key in this.statusMap) {\n var value = this.statusMap[key];\n if (typeof value === 'function') continue;\n text += (text && newline) + key + ': ' + value;\n }\n\n this._status(text);\n }\n\n info(text: string): void {\n this._info(text);\n }\n\n /** @internal */\n _status(string: string) {\n }\n\n /** @internal */ \n _info(text: string) {\n }\n\n /** @internal */\n isPaused() {\n return this.paused;\n }\n\n /** @internal */\n togglePause() {\n this.paused ? this.resume() : this.pause();\n }\n\n /** @internal */\n pause() {\n this.stage.pause();\n }\n\n /** @internal */\n resume() {\n this.stage.resume();\n this.focus();\n }\n\n drawPoint(p: {x: number, y: number}, r: number, color: string): void {\n this.buffer.push(function(ctx, ratio) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, 5 / ratio, 0, 2 * math_PI);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"point\" + p.x + ',' + p.y + ',' + r + ',' + color;\n }\n\n drawCircle(p: {x: number, y: number}, r: number, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, r, 0, 2 * math_PI);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"circle\" + p.x + ',' + p.y + ',' + r + ',' + color;\n }\n\n drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(a.x, a.y);\n ctx.lineTo(b.x, b.y);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"segment\" + a.x + ',' + a.y + ',' + b.x + ',' + b.y + ',' + color;\n }\n\n drawSegment = this.drawEdge;\n\n drawPolygon(points: Array<{x: number, y: number}>, color: string): void {\n if (!points || !points.length) {\n return;\n }\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(points[0].x, points[0].y);\n for (let i = 1; i < points.length; i++) {\n ctx.lineTo(points[i].x, points[i].y);\n }\n ctx.strokeStyle = color;\n ctx.closePath();\n ctx.stroke();\n });\n this.newDrawHash += \"segment\";\n for (let i = 1; i < points.length; i++) {\n this.newDrawHash += points[i].x + ',' + points[i].y + ',';\n }\n this.newDrawHash += color;\n }\n\n drawAABB(aabb: AABBValue, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(aabb.lowerBound.x, aabb.lowerBound.y);\n ctx.lineTo(aabb.upperBound.x, aabb.lowerBound.y);\n ctx.lineTo(aabb.upperBound.x, aabb.upperBound.y);\n ctx.lineTo(aabb.lowerBound.x, aabb.upperBound.y);\n ctx.strokeStyle = color;\n ctx.closePath();\n ctx.stroke();\n });\n this.newDrawHash += \"aabb\";\n this.newDrawHash += aabb.lowerBound.x + ',' + aabb.lowerBound.y + ',';\n this.newDrawHash += aabb.upperBound.x + ',' + aabb.upperBound.y + ',';\n this.newDrawHash += color;\n }\n\n findOne(query: string): (Body | Joint | Fixture | null) {\n throw new Error(\"Not implemented\");\n }\n\n findAll(query: string): (Body | Joint | Fixture)[] {\n throw new Error(\"Not implemented\");\n }\n}\n\ninterface WorldStageOptions {\n speed: number;\n hz: number;\n scaleY: number;\n lineWidth: number;\n stroke: string | undefined;\n fill: string | undefined;\n}\n\nclass WorldStageNode extends Stage.Node {\n private nodes = new WeakMap();\n\n private options: WorldStageOptions = {\n speed: 1,\n hz: 60,\n scaleY: -1,\n lineWidth: 3,\n stroke: undefined,\n fill: undefined\n };\n\n private world: World;\n private testbed: Testbed;\n\n constructor(world: World, opts: Partial = {}) {\n super();\n this.label('Planck');\n\n this.options = { ...this.options, ...opts };\n\n if (math_abs(this.options.hz) < 1) {\n this.options.hz = 1 / this.options.hz;\n }\n\n this.world = world;\n this.testbed = opts as Testbed;\n\n const timeStep = 1 / this.options.hz;\n let elapsedTime = 0;\n let errored = false;\n this.tick((dt: number) => {\n if (errored) {\n return false;\n }\n try {\n dt = dt * 0.001 * this.options.speed;\n elapsedTime += dt;\n while (elapsedTime > timeStep) {\n world.step(timeStep);\n elapsedTime -= timeStep;\n }\n this.renderWorld();\n return true; \n } catch (error) {\n errored = true;\n console.error(error);\n return false;\n }\n }, true);\n\n world.on('remove-fixture', (obj: Fixture) => {\n this.nodes.get(obj)?.remove();\n });\n\n world.on('remove-joint', (obj: Joint) => {\n this.nodes.get(obj)?.remove();\n });\n }\n\n renderWorld() {\n const world = this.world;\n const options = this.options;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const viewer = this;\n\n for (let b = world.getBodyList(); b; b = b.getNext()) {\n for (let f = b.getFixtureList(); f; f = f.getNext()) {\n\n let node = this.nodes.get(f);\n const fstyle = getStyle(f);\n const bstyle = getStyle(b);\n if (!node) {\n if (fstyle && fstyle.stroke) {\n options.stroke = fstyle.stroke;\n } else if (bstyle && bstyle.stroke) {\n options.stroke = bstyle.stroke;\n } else if (b.isDynamic()) {\n options.stroke = 'rgba(255,255,255,0.9)';\n } else if (b.isKinematic()) {\n options.stroke = 'rgba(255,255,255,0.7)';\n } else if (b.isStatic()) {\n options.stroke = 'rgba(255,255,255,0.5)';\n }\n\n if (fstyle && fstyle.fill) {\n options.fill = fstyle.fill;\n } else if (bstyle && bstyle.fill) {\n options.fill = bstyle.fill;\n } else {\n options.fill = '';\n }\n\n const type = f.getType();\n const shape = f.getShape();\n if (type == 'circle') {\n node = viewer.drawCircle(shape as CircleShape, options);\n }\n if (type == 'edge') {\n node = viewer.drawEdge(shape as EdgeShape, options);\n }\n if (type == 'polygon') {\n node = viewer.drawPolygon(shape as PolygonShape, options);\n }\n if (type == 'chain') {\n node = viewer.drawChain(shape as ChainShape, options);\n }\n\n if (node) {\n node.appendTo(viewer);\n this.nodes.set(f, node);\n }\n }\n\n if (node) {\n const p = b.getPosition();\n const r = b.getAngle();\n // @ts-ignore\n const isChanged = node.__lastX !== p.x || node.__lastY !== p.y || node.__lastR !== r;\n if (isChanged) {\n // @ts-ignore\n node.__lastX = p.x;\n // @ts-ignore\n node.__lastY = p.y;\n // @ts-ignore\n node.__lastR = r;\n node.offset(p.x, options.scaleY * p.y);\n node.rotate(options.scaleY * r);\n }\n }\n\n }\n }\n\n for (let j = world.getJointList(); j; j = j.getNext()) {\n const type = j.getType();\n if (type == 'pulley-joint') {\n this.testbed.drawSegment(j.getAnchorA(), (j as PulleyJoint).getGroundAnchorA(), 'rgba(255,255,255,0.5)');\n this.testbed.drawSegment(j.getAnchorB(), (j as PulleyJoint).getGroundAnchorB(), 'rgba(255,255,255,0.5)');\n this.testbed.drawSegment((j as PulleyJoint).getGroundAnchorB(), (j as PulleyJoint).getGroundAnchorA(), 'rgba(255,255,255,0.5)');\n } else {\n this.testbed.drawSegment(j.getAnchorA(), j.getAnchorB(), 'rgba(255,255,255,0.5)');\n }\n }\n }\n\n drawCircle(shape: CircleShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const r = shape.m_radius;\n const cx = r + lw;\n const cy = r + lw;\n const w = r * 2 + lw * 2;\n const h = r * 2 + lw * 2;\n\n offsetX = shape.m_p.x - cx;\n offsetY = options.scaleY * shape.m_p.y - cy\n\n this.setSize(w, h, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.arc(cx, cy, r, 0, 2 * math_PI);\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n }\n ctx.lineTo(cx, cy);\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? '';\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if (!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawEdge(edge: EdgeShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n let offsetA = 0\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const v1 = edge.m_vertex1;\n const v2 = edge.m_vertex2;\n\n const dx = v2.x - v1.x;\n const dy = v2.y - v1.y;\n\n const length = math_sqrt(dx * dx + dy * dy);\n\n this.setSize(length + 2 * lw, 2 * lw, ratio);\n\n const minX = math_min(v1.x, v2.x);\n const minY = math_min(options.scaleY * v1.y, options.scaleY * v2.y);\n \n offsetX = minX - lw;\n offsetY = minY - lw;\n offsetA = options.scaleY * math_atan2(dy, dx);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n ctx.moveTo(lw, lw);\n ctx.lineTo(lw + length, lw);\n\n ctx.lineCap = 'round';\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? '';\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY, offsetA)) {\n sprite.offset(offsetX, offsetY);\n sprite.rotate(offsetA);\n }\n });\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawPolygon(shape: PolygonShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const vertices = shape.m_vertices;\n\n if (!vertices.length) {\n return;\n }\n \n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, options.scaleY * v.y);\n maxY = math_max(maxY, options.scaleY * v.y);\n }\n \n const width = maxX - minX;\n const height = maxY - minY;\n\n offsetX = minX;\n offsetY = minY;\n\n this.setSize(width + 2 * lw, height + 2 * lw, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n const x = v.x - minX + lw;\n const y = options.scaleY * v.y - minY + lw;\n if (i == 0)\n ctx.moveTo(x, y);\n\n else\n ctx.lineTo(x, y);\n }\n\n if (vertices.length > 2) {\n ctx.closePath();\n }\n\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n ctx.closePath();\n }\n\n ctx.lineCap = 'round';\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? '';\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawChain(shape: ChainShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const vertices = shape.m_vertices;\n\n if (!vertices.length) {\n return;\n }\n \n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, options.scaleY * v.y);\n maxY = math_max(maxY, options.scaleY * v.y);\n }\n \n const width = maxX - minX;\n const height = maxY - minY;\n\n offsetX = minX;\n offsetY = minY;\n\n this.setSize(width + 2 * lw, height + 2 * lw, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n const x = v.x - minX + lw;\n const y = options.scaleY * v.y - minY + lw;\n if (i == 0)\n ctx.moveTo(x, y);\n\n else\n ctx.lineTo(x, y);\n }\n\n // TODO: if loop\n if (vertices.length > 2) {\n // ctx.closePath();\n }\n\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n ctx.closePath();\n }\n\n ctx.lineCap = 'round';\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? '';\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n}\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","options","input","defaults","output","key","getOwnPropertySymbols","symbols","symbol","propertyIsEnumerable","math_random","Math","random","EPSILON","isFinite","Number","mod","num","min","max","clamp","math","nextPowerOfTwo","x","isPowerOfTwo","math$1","math_abs","abs","math_sqrt","sqrt","math_max","math_min","Vec2","y","_serialize","_deserialize","data","obj","zero","neo","clone","v","toString","JSON","stringify","isValid","assert","o","setZero","set","setNum","setVec2","value","wSet","a","w","setCombine","setMul","add","wAdd","addCombine","addMul","wSub","subCombine","subMul","sub","mul","m","lengthOf","lengthSquared","normalize","invLength","distance","dx","dy","distanceSquared","areEqual","skew","dot","cross","crossVec2Vec2","crossVec2Num","crossNumVec2","addCross","addCrossVec2Num","addCrossNumVec2","combine","mulNumVec2","mulVec2Num","neg","mid","upper","lower","lengthSqr","scale","r","scaleFn","translateFn","AABB","lowerBound","upperBound","getCenter","getExtents","getPerimeter","lowerA","upperA","lowerB","upperB","lowerX","lowerY","upperX","upperY","combinePoints","aabb","contains","result","extend","out","testOverlap","d1x","d2x","d1y","d2y","diff","wD","hD","rayCast","tmin","Infinity","tmax","p1","p2","absD","normal","f","inv_d","t1","t2","temp","maxFraction","fraction","combinedPerimeter","lx","ly","math_PI","PI","Settings","defineProperty","linearSlop","lengthUnitsPerMeter","maxManifoldPoints","maxPolygonVertices","aabbExtension","aabbMultiplier","angularSlop","maxSubSteps","maxTOIContacts","maxTOIIterations","maxDistanceIterations","velocityThreshold","maxLinearCorrection","maxAngularCorrection","maxTranslation","maxRotation","baumgarte","toiBaugarte","timeToSleep","linearSleepTolerance","angularSleepTolerance","SettingsInternal","get","Pool","opts","_list","_max","_hasCreateFn","_createCount","_hasAllocateFn","_allocateCount","_hasReleaseFn","_releaseCount","_hasDisposeFn","_disposeCount","_createFn","_allocateFn","allocate","_releaseFn","release","_disposeFn","dispose","size","item","shift","push","TreeNode","id","userData","parent","child1","child2","height","isLeaf","poolTreeNode","node","undefined","DynamicTree","inputPool","stack","stackPool","iteratorPool","Iterator","iterator","close","m_root","m_nodes","m_lastProxyId","getUserData","getFatAABB","allocateNode","freeNode","createProxy","insertLeaf","destroyProxy","removeLeaf","moveProxy","leaf","leafAABB","index","area","combinedArea","cost","inheritanceCost","cost1","cost2","sibling","oldParent","newParent","balance","grandParent","iA","A","B","C","F","G","D","E","getHeight","getAreaRatio","rootArea","totalArea","it","preorder","next","computeHeight","height1","height2","validateStructure","validateMetrics","validate","getMaxBalance","maxBalance","rebuildBottomUp","nodes","count","minCost","iMin","jMin","aabbi","j","aabbj","parent_1","shiftOrigin","newOrigin","query","queryCallback","pop","rayCastCallback","abs_v","segmentAABB","subInput","c","h","parents","states","root","BroadPhase","_this","m_tree","m_moveBuffer","proxyId","m_queryProxyId","proxyIdA","proxyIdB","userDataA","userDataB","m_callback","aabbA","aabbB","getProxyCount","getTreeHeight","getTreeBalance","getTreeQuality","bufferMove","unbufferMove","displacement","touchProxy","updatePairs","addPairCallback","fatAABB","math_sin","sin","math_cos","cos","vec2","copyVec2","zeroVec2","negVec2","plusVec2","minusVec2","subVec2","mulVec2","scaleVec2","plusScaleVec2","minusScaleVec2","combine2Vec2","am","bm","combine3Vec2","cm","normalizeVec2","dotVec2","lengthSqrVec2","distVec2","distSqrVec2","rotVec2","q","derotVec2","transform","angle","copyTransform","transformVec2","xf","detransformVec2","px","py","retransformVec2","from","to","x0","y0","detransformTransform","math_atan2","atan2","Rot","setAngle","setRot","setIdentity","rot","identity","getAngle","getXAxis","getYAxis","qr","mulRot","mulSub","mulT","mulTRot","mulTVec2","matrix.vec2","Sweep","localCenter","alpha0","c0","a0","recycle","matrix.zeroVec2","setTransform","matrix.transformVec2","matrix.copyVec2","setLocalCenter","getTransform","beta","matrix.setRotAngle","matrix.combine2Vec2","matrix.minusVec2","matrix.rotVec2","advance","alpha","forward","that","Transform","position","rotation","isArray","arr","mulXf","mulAll","mulFn","mulTXf","Velocity","Position","Shape","style","appData","m_type","m_radius","synchronize_aabb1","synchronize_aabb2","FixtureDefDefault","friction","restitution","density","isSensor","filterGroupIndex","filterCategoryBits","filterMaskBits","FixtureProxy","fixture","childIndex","Fixture","body","shape","def","m_body","m_friction","m_restitution","m_density","m_isSensor","m_filterGroupIndex","m_filterCategoryBits","m_filterMaskBits","m_shape","m_next","m_proxies","m_proxyCount","childCount","getChildCount","m_userData","_reset","getBody","broadPhase","m_world","m_broadPhase","destroyProxies","createProxies","m_xf","resetMassData","restore","getType","getShape","setSensor","sensor","setAwake","setUserData","getNext","getDensity","setDensity","getFriction","setFriction","getRestitution","setRestitution","testPoint","getMassData","massData","computeMass","getAABB","proxy","computeAABB","synchronize","xf1","xf2","matrix.subVec2","setFilterData","filter","groupIndex","categoryBits","maskBits","refilter","getFilterGroupIndex","setFilterGroupIndex","getFilterCategoryBits","setFilterCategoryBits","getFilterMaskBits","setFilterMaskBits","edge","getContactList","contact","fixtureA","getFixtureA","fixtureB","getFixtureB","flagForFiltering","world","getWorld","shouldCollide","collideA","collideB","STATIC","KINEMATIC","DYNAMIC","oldCenter","matrix.transform","BodyDefDefault","type","linearVelocity","angularVelocity","linearDamping","angularDamping","fixedRotation","bullet","gravityScale","allowSleep","awake","active","Body","m_awakeFlag","m_autoSleepFlag","m_bulletFlag","m_fixedRotationFlag","m_activeFlag","m_islandFlag","m_toiFlag","m_mass","m_invMass","m_I","m_invI","m_sweep","c_velocity","c_position","m_force","m_torque","m_linearVelocity","m_angularVelocity","m_linearDamping","m_angularDamping","m_gravityScale","m_sleepTime","m_jointList","m_contactList","m_fixtureList","m_prev","m_destroyed","fixtures","_addFixture","isWorldLocked","isLocked","getFixtureList","getJointList","isStatic","isDynamic","isKinematic","setStatic","setType","setDynamic","setKinematic","synchronizeFixtures","ce","ce0","destroyContact","isBullet","setBullet","flag","isSleepingAllowed","setSleepingAllowed","isAwake","isActive","setActive","m_newFixture","isFixedRotation","setFixedRotation","synchronizeTransform","getPosition","setPosition","getWorldCenter","getLocalCenter","getLinearVelocity","getLinearVelocityFromWorldPoint","worldPoint","getLinearVelocityFromLocalPoint","localPoint","getWorldPoint","setLinearVelocity","getAngularVelocity","setAngularVelocity","getLinearDamping","setLinearDamping","getAngularDamping","setAngularDamping","getGravityScale","setGravityScale","getMass","getInertia","mass","I","center","matrix.plusScaleVec2","matrix.scaleVec2","matrix.dotVec2","matrix.crossNumVec2","matrix.plusVec2","setMassData","applyForce","force","point","wake","applyForceToCenter","applyTorque","torque","applyLinearImpulse","impulse","applyAngularImpulse","jn","other","joint","m_collideConnected","createFixture","fixdef","destroyFixture","publish","getWorldVector","localVector","getLocalPoint","getLocalVector","worldVector","JointEdge","prev","Joint","bodyA","bodyB","m_edgeA","m_edgeB","m_bodyA","m_bodyB","collideConnected","getBodyA","getBodyB","getCollideConnected","_resetAnchors","stats","gjkCalls","gjkIters","gjkMaxIters","toiTime","toiMaxTime","toiCalls","toiIters","toiMaxIters","toiRootIters","toiMaxRootIters","newline","string","name_1","Timer","Date","now","time","e12","e13","e23","temp1","temp2","DistanceInput","proxyA","DistanceProxy","proxyB","transformA","transformB","useRadii","DistanceOutput","pointA","pointB","iterations","SimplexCache","metric","indexA","indexB","Distance","cache","xfA","xfB","simplex","readCache","vertices","m_v","k_maxIters","saveA","saveB","saveCount","iter","m_count","solve","getSearchDirection","matrix.lengthSqrVec2","vertex","getSupport","matrix.derotVec2","wA","getVertex","wB","duplicate","getWitnessPoints","matrix.distVec2","writeCache","rA","rB","matrix.normalizeVec2","matrix.minusScaleVec2","m_vertices","getVertexCount","bestIndex","bestValue","getSupportVertex","computeDistanceProxy","setVertices","radius","SimplexVertex","searchDirection_reuse","closestPoint_reuse","Simplex","m_v1","m_v2","m_v3","wALocal","wBLocal","metric1","metric2","getMetric","v1","v2","matrix.setVec2","matrix.crossVec2Vec2","getClosestPoint","pA","pB","v3","matrix.combine3Vec2","solve2","solve3","w1","w2","d12_2","d12_1","inv_d12","w3","w1e12","w1e13","d13_1","d13_2","w2e23","d23_1","d23_2","n123","d123_1","d123_2","d123_3","inv_d13","inv_d23","inv_d123","shapeA","shapeB","matrix.copyTransform","Input","Output","Proxy","Cache","TOIOutputState","ShapeCastInput","translationB","ShapeCastOutput","lambda","ShapeCast","radiusA","polygonRadius","sigma","tolerance","vp","vr","TOIInput","sweepA","sweepB","tMax","exports","TOIOutput","state","e_unset","SeparationFunctionType","distanceInput","distanceOutput","axisA","axisB","localPointA","localPointB","TimeOfImpact","timer","e_unknown","totalRadius","target","k_maxIterations","e_overlapped","e_touching","separationFunction","initialize","done","pushBackIter","s2","findMinSeparation","e_separated","s1","evaluate","e_failed","rootIterCount","a1","a2","SeparationFunction","m_proxyA","m_proxyB","m_sweepA","m_sweepB","m_localPoint","m_axis","e_points","localPointA_1","localPointB_1","matrix.normalizeVec2Length","e_faceB","localPointB1","localPointB2","matrix.crossVec2Num","localPointA_2","matrix.negVec2","e_faceA","localPointA1","localPointA2","localPointB_2","compute","find","TimeStep","dt","inv_dt","velocityIterations","positionIterations","warmStarting","blockSolve","inv_dt0","dtRatio","reset","s_subStep","translation","backup","backup1","backup2","ContactImpulse","normals","tangents","v_points","normalImpulse","tangentImpulse","Solver","m_stack","m_bodies","m_contacts","m_joints","clear","addBody","addContact","addJoint","solveWorld","step","m_bodyList","c_1","seed","isEnabled","isTouching","sensorA","m_fixtureA","sensorB","m_fixtureB","je","solveIsland","gravity","m_gravity","m_allowSleep","initConstraint","initVelocityConstraint","warmStartConstraint","initVelocityConstraints","solveVelocityConstraints","solveVelocityConstraint","storeConstraintImpulses","translationLengthSqr","maxTranslationSquared","ratio","matrix.mulVec2","maxRotationSquared","positionSolved","minSeparation","separation","solvePositionConstraint","contactsOkay","jointsOkay","jointOkay","solvePositionConstraints","postSolveIsland","minSleepTime","linTolSqr","linearSleepToleranceSqr","angTolSqr","angularSleepToleranceSqr","solveWorldTOI","m_stepComplete","c_2","m_toiCount","m_toi","minContact","minAlpha","c_3","fA_1","fB_1","bA_1","bB_1","activeA","activeB","getChildIndexA","getChildIndexB","fA","fB","bA","bB","update","bodies","solveIslandTOI","findNewContacts","m_subStepping","setEnabled","subStep","toiA","toiB","solvePositionConstraintTOI","c_5","postSolve","m_impulse","ManifoldType","ContactFeatureType","PointState","Mat22","ex","ey","getInverse","det","imx","mx","mulMat22","mulTMat22","mx1","mx2","cA","cB","dist","planePoint","clipPoint","ClipVertex","ContactID","Manifold","localNormal","points","ManifoldPoint","pointCount","getWorldManifold","wm","radiusB","WorldManifold","separations","e_circles","manifoldPoint","clipSegmentToLine","getPointStates","typeA","typeB","setFeatures","swapFeatures","state1","state2","manifold1","manifold2","removeState","persistState","addState","vOut","vIn","offset","vertexIndexA","numOut","distance0","distance1","interp","e_vertex","e_face","contactPool","Contact","oldManifold","worldManifold","ContactEdge","mixFriction","friction1","friction2","mixRestitution","restitution1","restitution2","s_registers","VelocityConstraintPoint","normalMass","tangentMass","velocityBias","vA","vB","tangent","P","dv","dv1","dv2","P1","P2","m_indexA","m_indexB","m_evaluateFcn","m_manifold","m_tangentSpeed","m_enabledFlag","m_touchingFlag","m_filterFlag","m_bulletHitFlag","v_normal","v_normalMass","v_K","v_pointCount","v_tangentSpeed","v_friction","v_restitution","v_invMassA","v_invMassB","v_invIA","v_invIB","p_localPoints","p_localNormal","p_localPoint","p_localCenterA","p_localCenterB","p_type","p_radiusA","p_radiusB","p_pointCount","p_invMassA","p_invMassB","p_invIA","p_invIB","evaluateFcn","m_nodeA","m_nodeB","_i","_a","_b","_c","manifold","cp","vcp","getManifold","resetFriction","resetRestitution","setTangentSpeed","speed","getTangentSpeed","listener","touching","wasTouching","nmp","omp","hasListener","beginContact","endContact","preSolve","_solvePositionConstraint","toi","positionA","positionB","localCenterA","localCenterB","mA","mB","iB","aA","aB","rnA","rnB","K","velocityA","velocityB","wmp","kNormal","rtA","rtB","kTangent","vRel","vcp1","vcp2","rn1A","rn1B","rn2A","rn2B","k11","k22","k12","a_1","b_1","d_1","vt","maxFriction","newImpulse","vn","vn1","vn2","addType","type1","type2","callback","destroy","DEFAULTS","continuousPhysics","subStepping","World","s_step","m_solver","m_contactCount","m_bodyCount","m_jointCount","m_clearForces","m_locked","m_warmStarting","m_continuousPhysics","m_blockSolve","m_velocityIterations","m_positionIterations","m_t","joints","getBodyList","context","_addBody","createJoint","getBodyCount","getJointCount","getContactCount","setGravity","getGravity","setAllowSleeping","getAllowSleeping","setWarmStarting","getWarmStarting","setContinuousPhysics","getContinuousPhysics","setSubStepping","getSubStepping","setAutoClearForces","getAutoClearForces","clearForces","queryAABB","point1","point2","createBody","arg1","arg2","createDynamicBody","createKinematicBody","destroyBody","je0","destroyJoint","f0","timeStep","updateContacts","createContact","next_c","on","name","_listeners","off","listeners","indexOf","splice","arg3","l","Vec3","z","EdgeShape","_super","TYPE","m_vertex1","m_vertex2","m_vertex0","m_vertex3","m_hasVertex0","m_hasVertex3","vertex1","vertex2","vertex0","vertex3","hasVertex0","hasVertex3","setPrevVertex","setNextVertex","getRadius","setNext","getNextVertex","setPrev","getPrevVertex","_set","_clone","e","numerator","denominator","rr","Edge","ChainShape","loop","m_prevVertex","m_nextVertex","m_hasPrevVertex","m_hasNextVertex","m_isLoop","_createLoop","_createChain","isLoop","hasPrevVertex","hasNextVertex","prevVertex","nextVertex","getChildEdge","Chain","e1","e2","PolygonShape","m_centroid","m_normals","_setAsBox","ps","unique","linearSlopSquared","i0","hull","ih","ie","i1","i2","vs","pRef","inv3","p3","e1_1","e2_1","triangleArea","computeCentroid","hx","hy","pLocal","matrix.detransformVec2","minX","minY","maxX","maxY","k_inv3","ex1","ey1","ex2","ey2","matrix.addVec2","LimitState","Polygon","CircleShape","m_p","matrix.distSqrVec2","Circle","frequencyHz","dampingRatio","DistanceJoint","anchorA","anchorB","m_localAnchorA","localAnchorA","m_localAnchorB","localAnchorB","m_length","m_frequencyHz","m_dampingRatio","m_gamma","m_bias","gamma","bias","getLocalAnchorA","getLocalAnchorB","setLength","getLength","setFrequency","hz","getFrequency","setDampingRatio","getDampingRatio","getAnchorA","getAnchorB","getReactionForce","m_u","getReactionTorque","m_localCenterA","m_localCenterB","m_invMassA","m_invMassB","m_invIA","m_invIB","qA","qB","m_rA","m_rB","crAu","crBu","invMass","omega","k","vpA","vpB","Cdot","u","maxForce","maxTorque","FrictionJoint","anchor","m_linearImpulse","m_angularImpulse","m_maxForce","m_maxTorque","setMaxForce","getMaxForce","setMaxTorque","getMaxTorque","m_linearMass","m_angularMass","oldImpulse","maxImpulse","Mat33","ez","solve33","cross_x","cross_y","cross_z","solve22","a11","a12","a21","a22","getInverse22","M","getSymInverse33","a13","a23","a33","mulVec3","RevoluteJoint","m_limitState","inactiveLimit","referenceAngle","m_referenceAngle","m_motorImpulse","m_lowerAngle","lowerAngle","m_upperAngle","upperAngle","m_maxMotorTorque","maxMotorTorque","m_motorSpeed","_d","motorSpeed","m_enableLimit","_e","enableLimit","m_enableMotor","_f","enableMotor","getReferenceAngle","getJointAngle","getJointSpeed","isMotorEnabled","getMotorTorque","setMotorSpeed","getMotorSpeed","setMaxMotorTorque","getMaxMotorTorque","isLimitEnabled","getLowerLimit","getUpperLimit","setLimits","m_motorMass","jointAngle","equalLimits","atLowerLimit","atUpperLimit","Cdot1","Cdot2","rhs","reduced","positionError","angularError","limitImpulse","lowerTranslation","upperTranslation","maxMotorForce","PrismaticJoint","axis","m_localXAxisA","localAxisA","m_localYAxisA","m_lowerTranslation","m_upperTranslation","m_maxMotorForce","m_perp","m_K","getLocalAxisA","getJointTranslation","setMaxMotorForce","getMaxMotorForce","getMotorForce","m_a1","m_a2","m_s1","m_s2","k13","k23","k33","jointTranslation","LA","LB","f1","df","f2r","perp","C1","linearError","C2","impulse1","GearJoint","joint1","joint2","coordinateA","coordinateB","m_joint1","m_joint2","m_ratio","m_type1","m_type2","m_bodyC","xfC","aC","revolute","m_localAnchorC","m_referenceAngleA","m_localAxisC","prismatic","pC","m_bodyD","xfD","aD","m_localAnchorD","m_referenceAngleB","m_localAxisD","pD","m_constant","getJoint1","getJoint2","setRatio","getRatio","m_JvAC","m_JwA","m_lcA","m_lcB","m_lcC","m_lcD","m_mA","m_mB","m_mC","m_mD","m_iA","m_iB","m_iC","m_iD","vC","wC","vD","qC","qD","m_JwC","rC","m_JvBD","m_JwB","m_JwD","rD","JvAC","JvBD","JwA","JwB","JwC","JwD","cC","cD","correctionFactor","MotorJoint","m_linearOffset","linearOffset","m_angularOffset","angularOffset","m_correctionFactor","setCorrectionFactor","factor","getCorrectionFactor","setLinearOffset","getLinearOffset","setAngularOffset","getAngularOffset","m_linearError","m_angularError","inv_h","MouseJoint","m_targetA","m_beta","m_C","_localAnchorB","setTarget","getTarget","velocity","PulleyJoint","groundA","groundB","m_groundAnchorA","groundAnchorA","m_groundAnchorB","groundAnchorB","m_lengthA","lengthA","m_lengthB","lengthB","getGroundAnchorA","getGroundAnchorB","getLengthA","getLengthB","getCurrentLengthA","getCurrentLengthB","m_uB","m_uA","ruA","ruB","PA","PB","uA","uB","maxLength","RopeJoint","m_maxLength","m_state","setMaxLength","getMaxLength","getLimitState","crA","crB","WeldJoint","invM","impulse2","WheelJoint","m_ax","m_ay","localAxis","m_springMass","m_springImpulse","setSpringFrequencyHz","getSpringFrequencyHz","setSpringDampingRatio","getSpringDampingRatio","m_sAy","m_sBy","m_sAx","m_sBx","damp","ay","sAy","sBy","SID","SERIALIZE_REF_TYPES","DESERIALIZE_BY_REF_TYPE","DESERIALIZE_BY_TYPE_FIELD","DEFAULT_OPTIONS","rootClass","preSerialize","postSerialize","preDeserialize","postDeserialize","Serializer","toJson","json","refQueue","refMemoById","addToRefQueue","typeName","__sid","ref","refIndex","refType","traverse","noRefType","serializeWithHooks","newValue","str","fromJson","deserializedRefMemoByIndex","deserializeWithHooks","classHint","classDeserializeFn","deserializeChild","dataOrRef","worldSerializer","Testbed","width","scaleY","background","activeKeys","keydown","keyCode","label","keyup","mount","Error","start","testbed","color","g","BoxShape","halfWidth","halfHeight","Box","CollideCircles","circleA","circleB","distSqr","CollideEdgeCircle","chain","Q","edgeA","matrix.retransformVec2","A1","B1","B2","A2","den","incidentEdge","clipPoints1","clipPoints2","clipSegmentToLineNormal","v11","v12","localTangent","normal1","findMaxSeparation","poly1","poly2","count1","count2","n1s","v1s","v2s","matrix.detransformTransform","maxSeparation","si","sij","CollidePolygons","polyA","polyB","separationA","edgeB","separationB","edge1","flip","clipVertex","normals1","vertices2","normals2","before","after","matrix.rerotVec2","minDot","findIncidentEdge","vertices1","iv1","iv2","frontOffset","sideOffset1","sideOffset2","CollidePolygonCircle","cLocal","faceCenter","polygonA","normalIndex","vertexCount","vertIndex1","vertIndex2","u1","u2","CollideEdgePolygon","edge_reuse","EPAxisType","VertexType","EPAxis","TempPolygon","ReferenceFace","sideNormal1","sideNormal2","edgeAxis","polygonAxis","polygonBA","rf","centroidB","edge0","edge2","normal0","normal2","lowerLimit","upperLimit","polygonB","v0","front","offset1","offset0","offset2","convex1","convex2","e_edgeA","e_edgeB","primaryAxis","internal","wrap","rotate","limit","Matrix","Matrix2","_dirty","translate","concat","inverse","inverted","map","mapX","mapY","objectToString","isFn","isHash","tick","draw","fps","uid","slice","Texture","Texture2","sx","sy","setSourceCoordinate","setSourceDimension","sw","sh","setDestinationCoordinate","setDestinationDimension","dw","dh","x1","y1","h1","x2","y2","h2","drawWithNormalizedArgs","__extends$9","d2","b2","ImageTexture","ImageTexture2","source","pixelRatio","_pixelRatio","setSourceImage","image2","_source","getWidth","prerender","drawImage","_draw_failed","console","log","__extends$8","PipeTexture","PipeTexture2","setSourceTexture","texture2","__extends$7","__awaiter$1","thisArg","_arguments","generator","Promise","resolve","reject","fulfilled","rejected","then","__generator$1","_","sent","trys","ops","verb","throw","return","Symbol","op","Atlas","Atlas2","pipeSpriteTexture","def2","_map","ppu","_ppu","trim","_trim","top","bottom","left","right","findSpriteDefinition","textures","_textures","select","TextureSelection","textureDefinition","image","_imageSrc","src","url","imagePath","imageRatio","warn","deprecatedWarning","load","img","Image","onload","onerror","error","__extends$6","__awaiter","__generator","TextureSelection2","selection","atlas2","atlas","subquery","isAtlasSpriteDefinition","NO_TEXTURE","one","array","class_1","NO_SELECTION","ATLAS_MEMO_BY_NAME","ATLAS_ARRAY","texture","colonIndex","atlas_1","atlas_2","__extends$5","ResizableTexture","ResizableTexture2","mode","_resizeMode","outWidth","outHeight","_innerSize","isValidFitMode","iid$1","Pin","Pin2","owner","_owner","_parent","_relativeMatrix","_absoluteMatrix","_textureAlpha","_alpha","_width","_height","_scaleX","_scaleY","_skewX","_skewY","_rotation","_pivoted","_pivotX","_pivotY","_handled","_handleX","_handleY","_aligned","_alignX","_alignY","_offsetX","_offsetY","_boxX","_boxY","_boxWidth","_boxHeight","_ts_translate","_ts_transform","_ts_matrix","_update","_pin","_mo_handle","_mo_align","absoluteMatrix","ts","_mo_abs","relativeMatrix","_mo_rel","rel","_x","_y","getters","setters","_ts_pin","touch","fit","_unscaled_width","_unscaled_height","pin","textureAlpha","boxWidth","boxHeight","scaleX","skewX","skewY","pivotX","pivotY","offsetX","offsetY","alignX","alignY","handleX","handleY","pivot","align","handle","resizeMode","all","resizeWidth","resizeHeight","scaleMode","scaleWidth","scaleHeight","matrix","IDENTITY","LOOKUP_CACHE","MODE_BY_NAME","EASE_BY_NAME","Easing","Easing2","token","fallback","easeFn","tokens","exec","easeName","easing","modeName","modeFn","params","fn","fc","args","replace","split","addMode","addEaseFn","names","pow","asin","Transition","Transition2","_ending","_end","_duration","duration","_delay","delay","_time","elapsed","last","_start","ended","_easing","finish","forEach","_next","tween","ease","hide","_hide","remove","_remove","attr","pinning","ta","iid","assertType","Node","layout","minimize","maximize","Node2","_label","_prev","_first","_last","_visible","_padding","_spacing","_attrs","_flags","_transitions","_tickBefore","_tickAfter","MAX_ELAPSE","_transitionTickInitied","_transitionTickLastTime","_transitionTick","ignore","head","unshift","relative","getPixelRatio","window","devicePixelRatio","scaleTo","visible","_ts_children","show","first","visit","visitor","payload","reverse","child","end","append","more","prepend","appendTo","prependTo","insertNext","insertAfter","insertPrev","insertBefore","_flag","_ts_parent","self","empty","_ts_touch","hitTest","hit","render","globalAlpha","_tick","ticked","hasTickListener","untick","timeout","setTimeout","clearTimeout","join","match","_on","_off","trigger","transition","row","column","_layoutTicker","_mo_seq","alignChildren","_mo_seqAlign","box","layer","_mo_box","padding","pad","spacing","space","__extends$4","sprite","frame","sprite2","Sprite","Sprite2","_tiled","_stretched","prerenderContext","_image","tile","inner","stretch","Image$1","__extends$3","CanvasTexture","CanvasTexture2","document","createElement","_lastPixelRatio","setSize","textureWidth","textureHeight","getContext","attributes","getOptimalPixelRatio","ceil","setMemoizer","memoizer","_memoizer","setDrawer","drawer","_drawer","newPixelRatio","lastPixelRatio","pixelRationChange","pixelRatioChanged","newMemoKey","memoKeyChanged","_lastMemoKey","canvas","legacyTextureDrawer","EventPoint","EventPoint2","PointerSyntheticEvent","PointerSyntheticEvent2","VisitPayload","VisitPayload2","timeStamp","event","collected","syntheticEvent","PAYLOAD","Pointer","Pointer2","clickList","cancelList","handleStart","preventDefault","dispatchEvent","findTargets","handleMove","handleEnd","handleCancel","visitStart","visitEnd","raw","cancel","stage","elem","viewport","addEventListener","unmount","removeEventListener","touches","clientX","clientY","rect","getBoundingClientRect","clientLeft","clientTop","targets","__extends$2","ROOTS","Root","Root2","dom","pixelWidth","pixelHeight","drawingWidth","drawingHeight","mounted","paused","sleep","configs","getElementById","HTMLCanvasElement","display","firstChild","backingStorePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStoreRatio","requestFrame","frameRequested","requestAnimationFrame","onFrame","_lastFrameTime","_mo_touch","newPixelWidth","clientWidth","newPixelHeight","clientHeight","tickRequest","clearRect","resume","pause","pointer","backgroundColor","_viewport","viewbox","data_1","_viewbox","rescale","camera","_camera","viewportWidth","viewportHeight","viewboxMode","viewboxWidth","viewboxHeight","viewboxX","viewboxY","cameraZoom","cameraX","cameraY","__extends$1","Anim","Anim2","_fps","_ft","_repeat","_index","_frames","lastTime","moveFrame","stop","_callback","setFrames","frames","gotoFrame","resize","move","repeat","play","monotype","chars","Monotype","Monotype2","setFont","selection_1","_font","setValue","_value","texture_1","Str","Stage","freeze","Mouse","CLICK","START","MOVE","END","CANCEL","POINTER_CANCEL","POINTER_CLICK","POINTER_END","POINTER_MOVE","POINTER_START","anim","anim2","texture_2","texture_3","memoizeDraw","legacySpriteDrawer","legacySpriteMemoizer","toStringTag","memo","memory","recall","rest","equal","StageTestbed","playButton","statusElement","infoElement","isPaused","_pause","classList","_resume","lastStatus","innerText","_status","text","lastInfo","_info","getStyle","lastDrawHash","newDrawHash","buffer","statusText","statusMap","drawSegment","drawEdge","focus","activeElement","blur","drawingTexture","ctx","save","lineWidth","lineCap","drawing","drawingElement","worldNode","WorldStageNode","lastX","lastY","targetBody","mouseMove","mouseGround","mouseJoint","findBody","mouseForce","downKeys","updateActiveKeys","down","char","fromCharCode","test","up","fire","status","key_1","value_1","key_2","value_2","info","togglePause","drawPoint","beginPath","arc","strokeStyle","stroke","drawCircle","moveTo","lineTo","drawPolygon","closePath","drawAABB","findOne","findAll","WeakMap","fill","elapsedTime","errored","renderWorld","viewer","fstyle","bstyle","drawChain","__lastX","__lastY","__lastR","offsetMemo","lw","cx","cy","fillStyle","offsetA"],"mappings":"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"} \ No newline at end of file +{"version":3,"names":["global","factory","exports","module","define","amd","globalThis","self","planck","this","exports2","extendStatics","d2","b2","Object","setPrototypeOf","__proto__","Array","d3","b3","p","prototype","hasOwnProperty","call","__extends$a","TypeError","String","__","constructor","create","__assign$1","assign","__assign2","t","s2","i","n2","arguments","length","apply","options","input2","defaults","output2","key","getOwnPropertySymbols","symbols","symbol","propertyIsEnumerable","math_random$1","Math","random","EPSILON","isFinite","Number","nextPowerOfTwo","x2","isPowerOfTwo","mod","num","min","max","clamp$1","random$1","math$1","clamp","math_abs$a","abs","math_sqrt$7","sqrt","math_max$9","math_min$9","Vec2","Vec22","y","x","_serialize","_deserialize","data","obj","zero","neo","clone","v3","toString","JSON","stringify","isValid","assert","o","setZero","set","setNum","setVec2","value","wSet","a2","w","setCombine","setMul","add","wAdd","addCombine","addMul","wSub","subCombine","subMul","sub","mul","m","lengthOf","lengthSquared","normalize","length2","invLength","distance","dx","dy","distanceSquared","areEqual","skew","dot","cross","crossVec2Vec2","crossVec2Num","crossNumVec2","addCross","addCrossVec2Num","addCrossNumVec2","combine","mulNumVec2","mulVec2Num","neg","mid","upper","lower","lengthSqr","scale","r","scaleFn","translateFn","math_max$8","math_min$8","AABB","AABB2","lowerBound","upperBound","getCenter","getExtents","getPerimeter","lowerA","upperA","lowerB","upperB","lowerX","lowerY","upperX","upperY","combinePoints","aabb","contains","result","extend","out","testOverlap","d1x","d2x","d1y","d2y","diff","wD","hD","wA","hA","wB","hB","rayCast","tmin","Infinity","tmax","p1","p2","absD","normal3","f","inv_d","t1","t2","temp3","maxFraction","fraction","normal","combinedPerimeter","lx","ly","ux","uy","math_PI$7","PI","Settings","Settings2","defineProperty","get","linearSlop","enumerable","configurable","lengthUnitsPerMeter","maxManifoldPoints","maxPolygonVertices","aabbExtension","aabbMultiplier","angularSlop","maxSubSteps","maxTOIContacts","maxTOIIterations","maxDistanceIterations","velocityThreshold","maxLinearCorrection","maxAngularCorrection","maxTranslation","maxRotation","baumgarte","toiBaugarte","timeToSleep","linearSleepTolerance","angularSleepTolerance","SettingsInternal","SettingsInternal2","Pool","Pool2","opts","_list","_max","_hasCreateFn","_createCount","_hasAllocateFn","_allocateCount","_hasReleaseFn","_releaseCount","_hasDisposeFn","_disposeCount","_createFn","_allocateFn","allocate","_releaseFn","release","_disposeFn","dispose","size","item","shift","push","math_abs$9","math_max$7","TreeNode","TreeNode2","id","userData","parent","child1","child2","height","isLeaf","poolTreeNode","node","DynamicTree","DynamicTree2","inputPool","stack","stackPool","iteratorPool","Iterator","iterator","close","m_root","m_nodes","m_lastProxyId","getUserData","getFatAABB","allocateNode","freeNode","createProxy","insertLeaf","destroyProxy","removeLeaf","moveProxy","leaf","leafAABB","index","area","combinedArea","cost","inheritanceCost","newArea1","cost1","oldArea","newArea2","cost2","sibling","oldParent","newParent","balance","grandParent","iA","A","B","C","F","G","D","E","getHeight","getAreaRatio","root","rootArea","totalArea","it","preorder","next","computeHeight","height1","height2","validateStructure","validateMetrics","validate","getMaxBalance","maxBalance","rebuildBottomUp","nodes","count","minCost","iMin","jMin","aabbi","j","aabbj","parent_1","shiftOrigin","newOrigin","query","queryCallback","pop","proceed","rayCastCallback","abs_v","segmentAABB","subInput","c2","h","separation","Iterator2","parents","states","math_max$6","math_min$7","BroadPhase","BroadPhase2","_this","m_tree","m_moveBuffer","proxyId","m_queryProxyId","proxyIdA","proxyIdB","userDataA","userDataB","m_callback","aabbA","aabbB","getProxyCount","getTreeHeight","getTreeBalance","getTreeQuality","bufferMove","unbufferMove","displacement2","changed","touchProxy","updatePairs","addPairCallback","fatAABB","math_sin$2","sin","math_cos$2","cos","math_sqrt$6","vec2","rotation","angle","s","c","copyVec2","zeroVec2","negVec2","plusVec2","addVec2","minusVec2","subVec2","mulVec2","scaleVec2","plusScaleVec2","minusScaleVec2","combine2Vec2","am","bm","combine3Vec2","cm","normalizeVec2Length","normalizeVec2","dotVec2","lengthSqrVec2","distVec2","distSqrVec2","setRotAngle","rotVec2","q","derotVec2","rerotVec2","before","after","x0","y0","transform","copyTransform","transform2","transformVec2","xf2","detransformVec2","px","py","retransformVec2","from","to","detransformTransform","math_sin$1","math_cos$1","math_atan2$2","atan2","Rot","Rot2","setAngle","setRot","setIdentity","rot","identity","getAngle","getXAxis","getYAxis","qr","mulRot","mulSub","mulT","mulTRot","mulTVec2","math_atan2$1","math_PI$6","temp$7","Sweep","Sweep2","localCenter","a","alpha0","c0","a0","recycle","setTransform","setLocalCenter","localCenter2","getTransform","beta","advance","alpha","forward","that","Transform","Transform2","position","rotation2","isArray","arr","mulXf","mulAll","mulFn","mulTXf","Velocity","Velocity2","v","math_sin","math_cos","Position","Position2","Shape","Shape2","style","appData","m_type","m_radius","synchronize_aabb1","synchronize_aabb2","displacement","FixtureDefDefault","friction","restitution","density","isSensor","filterGroupIndex","filterCategoryBits","filterMaskBits","FixtureProxy","FixtureProxy2","fixture","childIndex","Fixture","Fixture2","body","shape","def","m_body","m_friction","m_restitution","m_density","m_isSensor","m_filterGroupIndex","m_filterCategoryBits","m_filterMaskBits","m_shape","m_next","m_proxies","m_proxyCount","childCount","getChildCount","m_userData","_reset","getBody","broadPhase","m_world","m_broadPhase","destroyProxies","createProxies","m_xf","resetMassData","restore","getType","getShape","setSensor","sensor","setAwake","setUserData","getNext","getDensity","setDensity","getFriction","setFriction","getRestitution","setRestitution","testPoint","getMassData","massData","computeMass","getAABB","proxy","computeAABB","synchronize","xf1","setFilterData","filter","groupIndex","categoryBits","maskBits","refilter","getFilterGroupIndex","setFilterGroupIndex","getFilterCategoryBits","setFilterCategoryBits","getFilterMaskBits","setFilterMaskBits","edge","getContactList","contact","fixtureA","getFixtureA","fixtureB","getFixtureB","flagForFiltering","world","getWorld","shouldCollide","collideA","collideB","collide","STATIC","KINEMATIC","DYNAMIC","oldCenter","temp$6","xf$2","BodyDefDefault","type","linearVelocity","angularVelocity","linearDamping","angularDamping","fixedRotation","bullet","gravityScale","allowSleep","awake","active","Body","Body2","m_awakeFlag","m_autoSleepFlag","m_bulletFlag","m_fixedRotationFlag","m_activeFlag","m_islandFlag","m_toiFlag","m_mass","m_invMass","m_I","m_invI","m_sweep","c_velocity","c_position","m_force","m_torque","m_linearVelocity","m_angularVelocity","m_linearDamping","m_angularDamping","m_gravityScale","m_sleepTime","m_jointList","m_contactList","m_fixtureList","m_prev","m_destroyed","fixtures","_addFixture","isWorldLocked","isLocked","getFixtureList","getJointList","isStatic","isDynamic","isKinematic","setStatic","setType","setDynamic","setKinematic","synchronizeFixtures","ce","ce0","destroyContact","isBullet","setBullet","flag","isSleepingAllowed","setSleepingAllowed","isAwake","isActive","setActive","m_newFixture","isFixedRotation","setFixedRotation","synchronizeTransform","getPosition","setPosition","getWorldCenter","getLocalCenter","getLinearVelocity","getLinearVelocityFromWorldPoint","worldPoint","getLinearVelocityFromLocalPoint","localPoint","getWorldPoint","setLinearVelocity","getAngularVelocity","setAngularVelocity","getLinearDamping","setLinearDamping","getAngularDamping","setAngularDamping","getGravityScale","setGravityScale","getMass","getInertia","mass","I","center","setMassData","applyForce","force","point2","wake","applyForceToCenter","applyTorque","torque","applyLinearImpulse","impulse","applyAngularImpulse","jn","other","joint","m_collideConnected","createFixture","fixdef","destroyFixture","publish","getWorldVector","localVector","getLocalPoint","getLocalVector","worldVector","JointEdge","JointEdge2","prev","Joint","Joint2","bodyA","bodyB","m_edgeA","m_edgeB","m_bodyA","m_bodyB","collideConnected","getBodyA","getBodyB","getCollideConnected","_resetAnchors","stats$1","gjkCalls","gjkIters","gjkMaxIters","toiTime","toiMaxTime","toiCalls","toiIters","toiMaxIters","toiRootIters","toiMaxRootIters","newline","string","name_1","now","Date","time","Timer","math_max$5","temp$5","normal$4","e12","e13","e23","temp1","temp2","DistanceInput","DistanceInput2","proxyA","DistanceProxy","proxyB","transformA","transformB","useRadii","DistanceOutput","DistanceOutput2","pointA","pointB","iterations","SimplexCache","SimplexCache2","metric","indexA","indexB","Distance","cache2","xfA2","xfB2","simplex","readCache","vertices","m_v","k_maxIters","saveA","saveB","saveCount","iter","m_count","solve","getSearchDirection","vertex","getSupport","getVertex","duplicate","getWitnessPoints","writeCache","rA2","rB2","DistanceProxy2","m_vertices","getVertexCount","bestIndex","bestValue","getSupportVertex","computeDistanceProxy","setVertices","radius","SimplexVertex","SimplexVertex2","searchDirection_reuse","closestPoint_reuse","Simplex","Simplex2","m_v1","m_v2","m_v3","wALocal","wBLocal","metric1","metric2","getMetric","v13","v22","sgn","getClosestPoint","pA2","pB2","solve2","solve3","w1","w2","d12_2","d12_1","inv_d12","w3","w1e12","w2e12","w1e13","w3e13","d13_1","d13_2","w2e23","w3e23","d23_1","d23_2","n123","d123_1","d123_2","d123_3","inv_d13","inv_d23","inv_d123","input$1","cache$1","output$1","shapeA","shapeB","Input","Output","Proxy","Cache","ShapeCastInput","ShapeCastInput2","translationB","ShapeCastOutput","ShapeCastOutput2","point","lambda","ShapeCast","radiusA","polygonRadius","radiusB","simplex2","sigma","tolerance","vp","vr","pointA2","pointB2","math_abs$8","math_max$4","TOIInput","TOIInput2","sweepA","sweepB","tMax","TOIOutputState","TOIOutputState2","TOIOutput","TOIOutput2","state","e_unset","distanceInput","distanceOutput","cache","xfA$1","xfB$1","temp$4","pointA$2","pointB$2","normal$3","axisA","axisB","localPointA","localPointB","TimeOfImpact","timer","e_unknown","totalRadius","target","k_maxIterations","e_overlapped","e_touching","separationFunction","initialize","done","pushBackIter","findMinSeparation","e_separated","s1","evaluate","e_failed","rootIterCount","a1","s3","SeparationFunctionType","SeparationFunctionType2","SeparationFunction","SeparationFunction2","m_proxyA","m_proxyB","m_sweepA","m_sweepB","m_localPoint","m_axis","e_points","localPointA_1","localPointB_1","e_faceB","localPointB1","localPointB2","localPointA_2","pointA_1","e_faceA","localPointA1","localPointA2","localPointB_2","compute","find","sep","math_abs$7","math_sqrt$5","math_min$6","TimeStep","TimeStep2","dt","inv_dt","velocityIterations","positionIterations","warmStarting","blockSolve","inv_dt0","dtRatio","reset","s_subStep","translation","input","output","backup","backup1","backup2","ContactImpulse","ContactImpulse2","normals","tangents","v_points","normalImpulse","tangentImpulse","Solver","Solver2","m_stack","m_bodies","m_contacts","m_joints","clear","addBody","addContact","addJoint","solveWorld","step","m_bodyList","c_1","seed","isEnabled","isTouching","sensorA","m_fixtureA","sensorB","m_fixtureB","je","solveIsland","gravity","m_gravity","m_allowSleep","initConstraint","initVelocityConstraint","warmStartConstraint","initVelocityConstraints","solveVelocityConstraints","solveVelocityConstraint","storeConstraintImpulses","translationLengthSqr","maxTranslationSquared","ratio","maxRotationSquared","positionSolved","minSeparation","solvePositionConstraint","contactsOkay","jointsOkay","jointOkay","solvePositionConstraints","postSolveIsland","minSleepTime","linTolSqr","linearSleepToleranceSqr","angTolSqr","angularSleepToleranceSqr","solveWorldTOI","m_stepComplete","c_2","m_toiCount","m_toi","minContact","minAlpha","c_3","fA_1","fB_1","bA_1","bB_1","activeA","activeB","getChildIndexA","getChildIndexB","fA","fB","bA","bB","update","setEnabled","bodies","solveIslandTOI","findNewContacts","m_subStepping","subStep","toiA","toiB","solvePositionConstraintTOI","c_5","postSolve","m_impulse","Mat22","Mat222","ex","ey","getInverse","det","imx","mx","mulMat22","c1","mulTMat22","mx1","mx2","math_sqrt$4","pointA$1","pointB$1","temp$3","cA$1","cB$1","dist","planePoint$2","clipPoint$1","ManifoldType","ManifoldType2","ContactFeatureType","ContactFeatureType2","PointState","PointState2","ClipVertex","ClipVertex2","ContactID","Manifold","Manifold2","localNormal","points","ManifoldPoint","pointCount","getWorldManifold","wm","WorldManifold","separations","e_circles","manifoldPoint","length_1","clipSegmentToLine","getPointStates","ManifoldPoint2","ContactID2","typeA","typeB","setFeatures","swapFeatures","WorldManifold2","state1","state2","manifold1","manifold2","removeState","persistState","addState","vOut","vIn","offset","vertexIndexA","numOut","distance0","distance1","interp","e_vertex","e_face","math_sqrt$3","math_max$3","math_min$5","contactPool","Contact","oldManifold","worldManifold","ContactEdge","ContactEdge2","mixFriction","friction1","friction2","mixRestitution","restitution1","restitution2","s_registers","VelocityConstraintPoint","VelocityConstraintPoint2","rA","rB","normalMass","tangentMass","velocityBias","cA","vA","cB","vB","tangent$1","xfA","xfB","clipPoint","planePoint$1","P$1","normal$2","dv","dv1","dv2","b","d","P1","P2","temp$2","Contact2","m_nodeA","m_nodeB","m_indexA","m_indexB","m_evaluateFcn","m_manifold","m_tangentSpeed","m_enabledFlag","m_touchingFlag","m_filterFlag","m_bulletHitFlag","v_normal","v_normalMass","v_K","v_pointCount","v_tangentSpeed","v_friction","v_restitution","v_invMassA","v_invMassB","v_invIA","v_invIB","p_localPoints","p_localNormal","p_localPoint","p_localCenterA","p_localCenterB","p_type","p_radiusA","p_radiusB","p_pointCount","p_invMassA","p_invMassB","p_invIA","p_invIB","evaluateFcn","_i","_a2","point_1","_b","_c","point_2","manifold","cp","vcp","getManifold","worldManifold2","resetFriction","resetRestitution","setTangentSpeed","speed","getTangentSpeed","listener","touching","wasTouching","nmp","omp","hasListener","beginContact","endContact","preSolve","_solvePositionConstraint","toi","positionA","positionB","localCenterA","localCenterB","mA","mB","iB","aA","aB","rnA","rnB","K","velocityA","velocityB","wmp","kNormal","rtA","rtB","kTangent","vRel","vcp1","vcp2","rn1A","rn1B","rn2A","rn2B","k11","k22","k12","k_maxConditionNumber","a_1","b_1","d_1","vt","maxFriction","newImpulse","vn","vn1","vn2","addType","type1","type2","callback","destroy","DEFAULTS$b","continuousPhysics","subStepping","World","World2","s_step","m_solver","m_contactCount","m_bodyCount","m_jointCount","m_clearForces","m_locked","m_warmStarting","m_continuousPhysics","m_blockSolve","m_velocityIterations","m_positionIterations","m_t","joints","getBodyList","context","_addBody","createJoint","getBodyCount","getJointCount","getContactCount","setGravity","getGravity","setAllowSleeping","getAllowSleeping","setWarmStarting","getWarmStarting","setContinuousPhysics","getContinuousPhysics","setSubStepping","getSubStepping","setAutoClearForces","getAutoClearForces","clearForces","queryAABB","point1","hit","point3","createBody","arg1","arg2","createDynamicBody","createKinematicBody","destroyBody","je0","destroyJoint","f0","timeStep","updateContacts","createContact","next_c","overlap","on","name","_listeners","off","listeners","indexOf","splice","arg3","l","oldManifold2","Vec3","Vec32","z","v1$2","v2$1","EdgeShape","_super","EdgeShape2","v122","TYPE","m_vertex1","m_vertex2","m_vertex0","m_vertex3","m_hasVertex0","m_hasVertex3","vertex1","vertex2","vertex0","vertex3","hasVertex0","hasVertex3","setPrevVertex","setNextVertex","getRadius","setNext","getNextVertex","setPrev","getPrevVertex","_set","_clone","e3","numerator","denominator","rr","Edge","v1$1","v2","ChainShape","ChainShape2","loop","m_prevVertex","m_nextVertex","m_hasPrevVertex","m_hasNextVertex","m_isLoop","_createLoop","_createChain","isLoop","hasPrevVertex","hasNextVertex","prevVertex","nextVertex","getChildEdge","edgeShape","Chain","math_max$2","math_min$4","temp$1","e$1","e1$1","e2$1","PolygonShape","PolygonShape2","m_centroid","m_normals","_setAsBox","ps","unique","linearSlopSquared","i0","hull","ih","ie2","i1","i2","computeCentroid","hx","hy","center2","pLocal","minX","minY","maxX","maxY","k_inv3","triangleArea","ex1","ey1","ex2","ey2","intx2","inty2","vs","pRef","inv3","p3","e1_1","e2_1","Polygon","math_sqrt$2","math_PI$5","temp","CircleShape","CircleShape2","m_p","Circle","math_abs$6","math_PI$4","DEFAULTS$a","frequencyHz","dampingRatio","DistanceJoint","DistanceJoint2","anchorA","anchorB","m_localAnchorA","localAnchorA","m_localAnchorB","localAnchorB","m_length","m_frequencyHz","m_dampingRatio","m_gamma","m_bias","gamma","bias","getLocalAnchorA","getLocalAnchorB","setLength","getLength","setFrequency","hz","getFrequency","setDampingRatio","getDampingRatio","getAnchorA","getAnchorB","getReactionForce","m_u","getReactionTorque","m_localCenterA","m_localCenterB","m_invMassA","m_invMassB","m_invIA","m_invIB","cA2","vA2","cB2","vB2","qA","qB","m_rA","m_rB","crAu","crBu","invMass","omega","k","P3","vpA","vpB","Cdot","u","DEFAULTS$9","maxForce","maxTorque","FrictionJoint","FrictionJoint2","anchor","m_linearImpulse","m_angularImpulse","m_maxForce","m_maxTorque","setMaxForce","getMaxForce","setMaxTorque","getMaxTorque","m_linearMass","m_angularMass","oldImpulse","maxImpulse","Mat33","Mat332","ez","solve33","cross_x","cross_y","cross_z","solve22","a11","a12","a21","a22","getInverse22","M","getSymInverse33","a13","a23","a33","mulVec3","math_abs$5","LimitState$2","LimitState2","DEFAULTS$8","lowerAngle","upperAngle","maxMotorTorque","motorSpeed","enableLimit","enableMotor","RevoluteJoint","RevoluteJoint2","_d","_e","_f","m_limitState","inactiveLimit","referenceAngle","m_referenceAngle","m_motorImpulse","m_lowerAngle","m_upperAngle","m_maxMotorTorque","m_motorSpeed","m_enableLimit","m_enableMotor","getReferenceAngle","getJointAngle","getJointSpeed","isMotorEnabled","getMotorTorque","setMotorSpeed","getMotorSpeed","setMaxMotorTorque","getMaxMotorTorque","isLimitEnabled","getLowerLimit","getUpperLimit","setLimits","m_motorMass","jointAngle","equalLimits","atLowerLimit","atUpperLimit","Cdot1","Cdot2","rhs","reduced","angularError","positionError","limitImpulse","math_abs$4","math_max$1","math_min$3","LimitState$1","DEFAULTS$7","lowerTranslation","upperTranslation","maxMotorForce","PrismaticJoint","PrismaticJoint2","axis","m_localXAxisA","localAxisA","m_localYAxisA","m_lowerTranslation","m_upperTranslation","m_maxMotorForce","m_perp","m_K","getLocalAxisA","getJointTranslation","translation2","setMaxMotorForce","getMaxMotorForce","getMotorForce","m_a1","m_a2","m_s1","m_s2","k13","k23","k33","jointTranslation","LA","LB","f1","df","f2r","perp2","C1","linearError","C2","impulse1","DEFAULTS$6","GearJoint","GearJoint2","joint1","joint2","m_joint1","m_joint2","m_ratio","m_type1","m_type2","coordinateA","coordinateB","m_bodyC","xfC","aC","revolute","m_localAnchorC","m_referenceAngleA","m_localAxisC","prismatic","pC","m_bodyD","xfD","aD","m_localAnchorD","m_referenceAngleB","m_localAxisD","pD","m_constant","getJoint1","getJoint2","setRatio","getRatio","m_JvAC","L","m_JwA","m_lcA","m_lcB","m_lcC","m_lcD","m_mA","m_mB","m_mC","m_mD","m_iA","m_iB","m_iC","m_iD","vC","wC","vD","qC","qD","m_JwC","rC","m_JvBD","m_JwB","m_JwD","rD","cC","cD","JvAC","JvBD","JwA","JwB","JwC","JwD","DEFAULTS$5","correctionFactor","MotorJoint","MotorJoint2","m_linearOffset","linearOffset","m_angularOffset","angularOffset","m_correctionFactor","setCorrectionFactor","factor","getCorrectionFactor","setLinearOffset","getLinearOffset","setAngularOffset","getAngularOffset","m_linearError","m_angularError","inv_h","math_PI$3","DEFAULTS$4","MouseJoint","MouseJoint2","m_targetA","m_beta","m_C","_localAnchorB","setTarget","getTarget","velocity","math_abs$3","DEFAULTS$3","PulleyJoint","PulleyJoint2","groundA","groundB","m_groundAnchorA","groundAnchorA","m_groundAnchorB","groundAnchorB","m_lengthA","lengthA","m_lengthB","lengthB","getGroundAnchorA","getGroundAnchorB","getLengthA","getLengthB","getCurrentLengthA","getCurrentLengthB","m_uB","m_uA","ruA","ruB","PA","PB","uA","uB","math_min$2","LimitState","DEFAULTS$2","maxLength","RopeJoint","RopeJoint2","m_maxLength","m_state","setMaxLength","getMaxLength","getLimitState","crA","crB","math_abs$2","math_PI$2","DEFAULTS$1","WeldJoint","WeldJoint2","invM","impulse2","math_abs$1","math_PI$1","DEFAULTS","WheelJoint","WheelJoint2","m_ax","m_ay","localAxis","m_springMass","m_springImpulse","setSpringFrequencyHz","getSpringFrequencyHz","setSpringDampingRatio","getSpringDampingRatio","m_sAy","m_sBy","m_sAx","m_sBx","damp","ay","sAy","sBy","_a","SID","SERIALIZE_REF_TYPES","DESERIALIZE_BY_REF_TYPE","DESERIALIZE_BY_TYPE_FIELD","DEFAULT_OPTIONS","rootClass","preSerialize","postSerialize","preDeserialize","postDeserialize","Serializer","Serializer2","options2","toJson","json","refQueue","refMemoById","addToRefQueue","typeName","__sid","ref","refIndex","refType","serializeWithHooks","obj2","traverse","noRefType","newValue","str","fromJson","deserializedRefMemoByIndex","deserializeWithHooks","classHint","deserializer","classDeserializeFn","deserializeChild","dataOrRef","isRefObject","worldSerializer","Testbed","Testbed2","width","scaleY","background","activeKeys","keydown","keyCode","label","keyup","mount","Error","start","testbed2","color","g","testbed","BoxShape","BoxShape2","halfWidth","halfHeight","Box","CircleCircleContact","CollideCircles","pA","pB","circleA","circleB","distSqr","EdgeCircleContact","ChainCircleContact","CollideEdgeCircle","chain","e","e1","e2","Q","P","n$2","edgeA","dd_1","A1","B1","u1","dd_2","B2","A2","den","dd","incidentEdge","clipPoints1$1","clipPoints2$1","clipSegmentToLineNormal","v1","n$1","xf$1","v11","v12","localTangent","planePoint","tangent","normal$1","normal1$1","PolygonContact","CollidePolygons","findMaxSeparation","poly1","poly2","count1","count2","n1s","v1s","v2s","maxSeparation2","si","sij","maxSeparation","findIncidentEdge","clipVertex","edge12","normals1","vertices2","normals2","minDot","polyA","polyB","separationA","edgeB","separationB","flip","k_tol","vertices1","iv1","iv2","frontOffset","sideOffset1","sideOffset2","np1","np2","PolygonCircleContact","CollidePolygonCircle","cLocal","faceCenter","polygonA","normalIndex","vertexCount","vertIndex1","vertIndex2","u2","separation_1","math_min$1","EdgePolygonContact","ChainPolygonContact","CollideEdgePolygon","edge_reuse","EPAxisType","EPAxisType2","VertexType","VertexType2","EPAxis","EPAxis2","TempPolygon","TempPolygon2","ReferenceFace","ReferenceFace2","sideNormal1","sideNormal2","clipPoints1","clipPoints2","ie","edgeAxis","polygonAxis","polygonBA","rf","centroidB","edge0","edge1","edge2","xf","normal0","normal1","normal2","lowerLimit","upperLimit","perp","n","polygonB","v0","offset1","offset0","offset2","convex1","convex2","front","e_edgeA","v4","s22","e_edgeB","k_relativeTol","k_absoluteTol","primaryAxis","internal","stats","math_random","math_sqrt$1","wrap","math","rotate","limit","Matrix","Matrix2","_dirty","translate","concat","inverse","inverted","map","mapX","mapY","objectToString","isFn","isHash","tick","draw","fps","uid","slice","Texture","Texture2","sx","sy","setSourceCoordinate","setSourceDimension","sw","sh","setDestinationCoordinate","setDestinationDimension","dw","dh","x1","y1","h1","y2","h2","drawWithNormalizedArgs","__extends$9","extendStatics2","d22","b22","ImageTexture","ImageTexture2","source","pixelRatio","_pixelRatio","setSourceImage","image2","_source","getWidth","prerender","drawImage","_draw_failed","console","log","__extends$8","PipeTexture","PipeTexture2","setSourceTexture","texture2","__extends$7","__awaiter$1","thisArg","_arguments","generator","adopt","resolve","Promise","reject","fulfilled","rejected","then","__generator$1","_","sent","trys","ops","verb","throw","return","Symbol","op","Atlas2","pipeSpriteTexture","def2","_map","ppu","_ppu","trim","_trim","top","bottom","left","right","findSpriteDefinition","textures","_textures","select","TextureSelection","textureDefinition","image","_imageSrc","src","url","imagePath","imageRatio","deprecatedWarning","load","asyncLoadImage","img","Image","onload","onerror","error","warn","__extends$6","isAtlasSpriteDefinition","selection","TextureSelection2","atlas2","atlas","subquery","NO_TEXTURE","one","array","class_1","NO_SELECTION","ATLAS_MEMO_BY_NAME","ATLAS_ARRAY","texture","colonIndex","atlas_1","atlas_2","__extends$5","ResizableTexture","ResizableTexture2","mode","_resizeMode","outWidth","outHeight","_innerSize","getPixelRatio","window","devicePixelRatio","isValidFitMode","iid$1","Pin","Pin2","owner","_owner","_parent","_relativeMatrix","_absoluteMatrix","_textureAlpha","_alpha","_width","_height","_scaleX","_scaleY","_skewX","_skewY","_rotation","_pivoted","_pivotX","_pivotY","_handled","_handleX","_handleY","_aligned","_alignX","_alignY","_offsetX","_offsetY","_boxX","_boxY","_boxWidth","_boxHeight","_ts_translate","_ts_transform","_ts_matrix","_update","_pin","_mo_handle","_mo_align","absoluteMatrix","ts","_mo_abs","relativeMatrix","_mo_rel","rel","_x","_y","getters","setters","_ts_pin","touch","fit","_unscaled_width","_unscaled_height","pin","textureAlpha","boxWidth","boxHeight","scaleX","skewX","skewY","pivotX","pivotY","offsetX","offsetY","alignX","alignY","handleX","handleY","pivot","align","handle","resizeMode","all","resizeWidth","resizeHeight","scaleMode","scaleWidth","scaleHeight","matrix","IDENTITY","LOOKUP_CACHE","MODE_BY_NAME","EASE_BY_NAME","Easing","Easing2","token","fallback","easeFn","tokens","exec","easeName","easing","modeName","modeFn","params","fn","fc","args","replace","split","addMode","addEaseFn","names","pow","asin","Transition","Transition2","_ending","_end","_duration","duration","_delay","delay","_time","elapsed","now2","last","_start","ended","_easing","finish","forEach","_next","tween","ease","hide","_hide","remove","_remove","attr","pinning","ta","iid","assertType","Node","layout","Node2","_label","_prev","_first","_last","_visible","_padding","_spacing","_attrs","_flags","_transitions","_tickBefore","_tickAfter","MAX_ELAPSE","_transitionTickInitied","_transitionTickLastTime","_transitionTick","ignore","head","unshift","relative","scaleTo","visible","_ts_children","show","first","visit","visitor","payload","reverse","child","end","append","more","prepend","appendTo","prependTo","insertNext","insertAfter","insertPrev","insertBefore","_flag","_ts_parent","self2","empty","_ts_touch","hitTest","render","globalAlpha","_tick","ticked","tickFn","hasTickListener","untick","timeout","setTimeout","clearTimeout","join","match","_on","_off","trigger","transition","row","column","_layoutTicker","_mo_seq","alignChildren","_mo_seqAlign","box","minimize","layer","maximize","_mo_box","padding","pad","spacing","space","__extends$4","sprite","frame","sprite2","Sprite","Sprite2","_tiled","_stretched","prerenderContext","_image","tile","inner","stretch","updated","__extends$3","CanvasTexture","CanvasTexture2","document","createElement","_lastPixelRatio","setSize","textureWidth","textureHeight","getContext","attributes","getOptimalPixelRatio","ceil","setMemoizer","memoizer","_memoizer","setDrawer","drawer","_drawer","newPixelRatio","lastPixelRatio","pixelRationChange","pixelRatioChanged","newMemoKey","memoKeyChanged","_lastMemoKey","canvas","legacyTextureDrawer","texture_1","texture_2","texture_3","POINTER_START","POINTER_MOVE","POINTER_END","POINTER_CANCEL","EventPoint","EventPoint2","PointerSyntheticEvent","PointerSyntheticEvent2","VisitPayload","VisitPayload2","timeStamp","event","collected","syntheticEvent","PAYLOAD","Pointer","Pointer2","clickList","cancelList","handleStart","preventDefault","dispatchEvent","findTargets","handleMove","handleEnd","handleCancel","visitStart","visitEnd","raw","isEventTarget","cancel","stage","elem","viewport","addEventListener","unmount","removeEventListener","touches","clientX","clientY","rect","getBoundingClientRect","clientLeft","clientTop","targets","__extends$2","__assign","configs","Root","pointer","dom","Root2","pixelWidth","pixelHeight","drawingWidth","drawingHeight","mounted","paused","sleep","getElementById","HTMLCanvasElement","display","firstChild","backingStorePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStoreRatio","requestFrame","frameRequested","requestAnimationFrame","onFrame","_lastFrameTime","_mo_touch","newPixelWidth","clientWidth","newPixelHeight","clientHeight","tickRequest","clearRect","resume","pause","backgroundColor","_viewport","viewbox","data_1","_viewbox","rescale","camera","_camera","viewportWidth","viewportHeight","viewboxMode","viewboxWidth","viewboxHeight","viewboxX","viewboxY","cameraZoom","cameraX","cameraY","__extends$1","FPS","Anim2","_fps","_ft","_repeat","_index","_frames","lastTime","moveFrame","stop","_callback","setFrames","frames","gotoFrame","resize","move","repeat","play","__extends","Monotype2","setFont","selection_1","_font","setValue","_value","math_atan2","math_abs","math_sqrt","math_PI","math_max","math_min","memo","memory","recall","rest","equal","StageTestbed","playButton","statusElement","infoElement","isPaused","_pause","classList","_resume","lastStatus","innerText","_status","text","lastInfo","_info","getStyle","findBody","StageTestbed2","lastDrawHash","newDrawHash","buffer","statusText","statusMap","drawSegment","drawEdge","canvas2","focus","activeElement","blur","drawingTexture","ctx","save","lineWidth","lineCap","drawing","drawingElement","worldNode","WorldStageNode","lastX","lastY","targetBody","mouseMove","mouseGround","mouseJoint","mouseForce","downKeys","updateActiveKeys","down","char","fromCharCode","test","up","fire","status","key_1","value_1","key_2","value_2","info","togglePause","drawPoint","beginPath","arc","strokeStyle","stroke","drawCircle","moveTo","lineTo","drawPolygon","closePath","drawAABB","findOne","findAll","WorldStageNode2","WeakMap","fill","elapsedTime","errored","renderWorld","viewer","fstyle","bstyle","drawChain","isChanged","__lastX","__lastY","__lastR","offsetMemo","lw","cx","cy","fillStyle","sprite$1","offsetA","freeze","toStringTag","default","defineProperties","__esModule"],"sources":["./dist/planck-with-testbed.js"],"mappings":"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AAe,CACjFzL,UAAW,KACX+H,UACAid,UACAgvC,QACAJ,kBACAz+C,sBACAwhC,YACAjB,sBACAoE,cACAH,wBACA1W,sBACAixB,8BACAQ,oCACAkF,sCACAb,0CACApC,gCACA5wB,gBACAG,wBACA,sBAAIrD,GACF,OAAOnjC,SAASmjC,kBAClB,EACAM,oBACAxH,8BACArM,kBACAlB,4BACAgsB,4BACAxrB,8BACAL,4BACA9e,wBACA8lC,UACA9B,oBACAz0B,gBACAJ,0BACAg/B,4BACAiI,oBACAh6B,YACAH,oBACA0X,kBACAI,4BACA,gBAAIb,GACF,OAAOjjC,SAASijC,YAClB,EACAtB,YACAsd,YACAz8C,KAAMc,OACNinD,sBACAmB,sBACA,cAAIroB,GACF,OAAOrjC,SAASqjC,UAClB,EACAwW,gBACArC,0BACAuM,8BACAsI,wBACAvL,4BACAqN,oBACAvzC,QACAw2C,sBACAvlD,kBACA2B,kCACAyQ,YACAyX,oBACAP,8BACAG,gCACA/F,0BACAiN,cACAgjD,0BACAzjE,YACAwa,kBACAO,oBACA,kBAAIF,GACF,OAAO52B,SAAS42B,cAClB,EACAq8B,gBACAl7B,0BACAgD,kBACA/d,oBACA5N,kBACAtL,UACA4vC,UACAzM,gDACA8nB,oBACAO,sBACA5f,YACAxL,4BACAK,oCACAC,8BACA04B,kBACAx2B,wBACAG,8BACAs2B,MAAOnwC,QACPtjB,wBACAuqD,iBACCwO,OAAO6iB,YAAa,CAAElgF,MAAO,YAChCpF,SAASqI,KAAOA,KAChBrI,SAASslB,KAAOA,KAChBtlB,SAASs0D,IAAMA,IACft0D,SAASk0D,SAAWA,SACpBl0D,SAASyV,WAAaA,WACtBzV,SAASi3C,MAAQA,MACjBj3C,SAASg2C,WAAaA,WACtBh2C,SAASo6C,OAASA,OAClBp6C,SAASi6C,YAAcA,YACvBj6C,SAASujC,WAAaA,WACtBvjC,SAASw0D,eAAiBA,eAC1Bx0D,SAASg1D,kBAAoBA,kBAC7Bh1D,SAASk6D,mBAAqBA,mBAC9Bl6D,SAASq5D,qBAAuBA,qBAChCr5D,SAASi3D,gBAAkBA,gBAC3Bj3D,SAASqmC,QAAUA,QACnBrmC,SAASwmC,YAAcA,YACvBxmC,SAASyjC,UAAYA,UACrBzjC,SAASi8B,eAAiBA,eAC1Bj8B,SAAS4vB,SAAWA,SACpB5vB,SAAS0uB,cAAgBA,cACzB1uB,SAAS06C,cAAgBA,cACzB16C,SAASkvB,eAAiBA,eAC1BlvB,SAAS6uB,cAAgBA,cACzB7uB,SAAS+P,YAAcA,YACvB/P,SAAS61C,KAAOA,KAChB71C,SAAS+zC,UAAYA,UACrB/zC,SAASsf,QAAUA,QACnBtf,SAASkf,aAAeA,aACxBlf,SAASk+C,cAAgBA,cACzBl+C,SAASmmD,UAAYA,UACrBnmD,SAASmsB,MAAQA,MACjBnsB,SAASgsB,UAAYA,UACrBhsB,SAAS0jC,SAAWA,SACpB1jC,SAAS8jC,cAAgBA,cACzB9jC,SAAS2hC,MAAQA,MACjB3hC,SAASi/C,MAAQA,MACjBj/C,SAASwC,KAAOc,OAChBtD,SAASuqD,WAAaA,WACtBvqD,SAAS0rD,WAAaA,WACtB1rD,SAAS65C,QAAUA,QACnB75C,SAASw3C,aAAeA,aACxBx3C,SAAS+jD,eAAiBA,eAC1B/jD,SAASqsD,YAAcA,YACvBrsD,SAAS8gD,cAAgBA,cACzB9gD,SAASmuD,UAAYA,UACrBnuD,SAAS4a,IAAMA,IACf5a,SAASoxD,WAAaA,WACtBpxD,SAAS6L,SAAWA,SACpB7L,SAASwN,iBAAmBA,iBAC5BxN,SAASie,MAAQA,MACjBje,SAAS01B,UAAYA,UACrB11B,SAASm1B,eAAiBA,eAC1Bn1B,SAASs1B,gBAAkBA,gBAC3Bt1B,SAASuvB,aAAeA,aACxBvvB,SAASw8B,OAASA,OAClBx8B,SAASw/E,aAAeA,aACxBx/E,SAAS+b,MAAQA,MACjB/b,SAASu2B,SAAWA,SACpBv2B,SAAS82B,UAAYA,UACrB92B,SAASizD,QAAUA,QACnBjzD,SAAS+3B,aAAeA,aACxB/3B,SAAS+6B,SAAWA,SACpB/6B,SAASgd,UAAYA,UACrBhd,SAASoP,SAAWA,SACpBpP,SAAS8D,KAAOA,KAChB9D,SAAS0zC,KAAOA,KAChB1zC,SAASinC,wBAA0BA,wBACnCjnC,SAAS+uD,UAAYA,UACrB/uD,SAASsvD,WAAaA,WACtBtvD,SAAS0vC,MAAQA,MACjB1vC,SAASkkC,cAAgBA,cACzBlkC,SAASukC,kBAAoBA,kBAC7BvkC,SAASulF,QAAUzlF,OACnBE,SAASwkC,eAAiBA,eAC1BxkC,SAASk9D,SAAWA,SACpBl9D,SAAS0mC,YAAcA,YACvB1mC,SAAS6mC,eAAiBA,eAC1B7mC,SAASm9D,MAAQnwC,QACjBhtB,SAAS0J,YAAcA,YACvB1J,SAASi0D,QAAUA,QACnB7zD,OAAOolF,iBAAiBxlF,SAAU,CAAEylF,WAAY,CAAErgF,MAAO,MAAQ,CAACq9D,OAAO6iB,aAAc,CAAElgF,MAAO,WAClG","ignoreList":[]} \ No newline at end of file diff --git a/dist/planck-with-testbed.mjs b/dist/planck-with-testbed.mjs index 779710b3..42ee0e1d 100644 --- a/dist/planck-with-testbed.mjs +++ b/dist/planck-with-testbed.mjs @@ -1,7 +1,7 @@ /** - * Planck.js v1.0.9 + * Planck.js v1.1.0-alpha * @license The MIT license - * @copyright Copyright (c) 2023 Erin Catto, Ali Shakiba + * @copyright Copyright (c) 2024 Erin Catto, Ali Shakiba * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -21,7 +21,6 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - /*! ***************************************************************************** Copyright (c) Microsoft Corporation. @@ -36,158 +35,103 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); +var extendStatics = function(d2, b2) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b3) { + d3.__proto__ = b3; + } || function(d3, b3) { + for (var p in b3) if (Object.prototype.hasOwnProperty.call(b3, p)) d3[p] = b3[p]; + }; + return extendStatics(d2, b2); }; - -function __extends$a(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +function __extends$a(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics(d2, b2); + function __() { + this.constructor = d2; + } + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); } - var __assign$1 = function() { - __assign$1 = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign$1.apply(this, arguments); -}; - -/** @internal */ -var options = function (input, defaults) { - if (input === null || typeof input === "undefined") { - // tslint:disable-next-line:no-object-literal-type-assertion - input = {}; + __assign$1 = Object.assign || function __assign2(t) { + for (var s2, i = 1, n2 = arguments.length; i < n2; i++) { + s2 = arguments[i]; + for (var p in s2) if (Object.prototype.hasOwnProperty.call(s2, p)) t[p] = s2[p]; } - var output = __assign$1({}, input); - // tslint:disable-next-line:no-for-in - for (var key in defaults) { - if (defaults.hasOwnProperty(key) && typeof input[key] === "undefined") { - output[key] = defaults[key]; - } + return t; + }; + return __assign$1.apply(this, arguments); +}; +var options = function(input2, defaults) { + if (input2 === null || typeof input2 === "undefined") { + input2 = {}; + } + var output2 = __assign$1({}, input2); + for (var key in defaults) { + if (defaults.hasOwnProperty(key) && typeof input2[key] === "undefined") { + output2[key] = defaults[key]; } - if (typeof Object.getOwnPropertySymbols === "function") { - var symbols = Object.getOwnPropertySymbols(defaults); - for (var i = 0; i < symbols.length; i++) { - var symbol = symbols[i]; - if (defaults.propertyIsEnumerable(symbol) && typeof input[symbol] === "undefined") { - output[symbol] = defaults[symbol]; - } - } + } + if (typeof Object.getOwnPropertySymbols === "function") { + var symbols = Object.getOwnPropertySymbols(defaults); + for (var i = 0; i < symbols.length; i++) { + var symbol = symbols[i]; + if (defaults.propertyIsEnumerable(symbol) && typeof input2[symbol] === "undefined") { + output2[symbol] = defaults[symbol]; + } } - return output; + } + return output2; }; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_random$1 = Math.random; +var math_random$1 = Math.random; var EPSILON = 1e-9; -/** @internal @deprecated */ var isFinite = Number.isFinite; -/** - * @deprecated - * Next Largest Power of 2 Given a binary integer value x, the next largest - * power of 2 can be computed by a SWAR algorithm that recursively "folds" the - * upper bits into the lower bits. This process yields a bit vector with the - * same most significant 1 as x, but all 1's below it. Adding 1 to that value - * yields the next largest power of 2. For a 32-bit value: - */ -function nextPowerOfTwo(x) { - x |= (x >> 1); - x |= (x >> 2); - x |= (x >> 4); - x |= (x >> 8); - x |= (x >> 16); - return x + 1; +function nextPowerOfTwo(x2) { + x2 |= x2 >> 1; + x2 |= x2 >> 2; + x2 |= x2 >> 4; + x2 |= x2 >> 8; + x2 |= x2 >> 16; + return x2 + 1; } -/** @deprecated */ -function isPowerOfTwo(x) { - return x > 0 && (x & (x - 1)) === 0; +function isPowerOfTwo(x2) { + return x2 > 0 && (x2 & x2 - 1) === 0; } -/** @deprecated */ function mod(num, min, max) { - if (typeof min === "undefined") { - max = 1; - min = 0; - } - else if (typeof max === "undefined") { - max = min; - min = 0; - } - if (max > min) { - num = (num - min) % (max - min); - return num + (num < 0 ? max : min); - } - else { - num = (num - max) % (min - max); - return num + (num <= 0 ? min : max); - } + if (typeof min === "undefined") { + max = 1; + min = 0; + } else if (typeof max === "undefined") { + max = min; + min = 0; + } + if (max > min) { + num = (num - min) % (max - min); + return num + (num < 0 ? max : min); + } else { + num = (num - max) % (min - max); + return num + (num <= 0 ? min : max); + } } -/** - * @deprecated - * Returns a min if num is less than min, and max if more than max, otherwise returns num. - */ function clamp$1(num, min, max) { - if (num < min) { - return min; - } - else if (num > max) { - return max; - } - else { - return num; - } + if (num < min) { + return min; + } else if (num > max) { + return max; + } else { + return num; + } } -/** - * @deprecated - * Returns a random number between min and max when two arguments are provided. - * If one arg is provided between 0 to max. - * If one arg is passed between 0 to 1. - */ function random$1(min, max) { - if (typeof min === "undefined") { - max = 1; - min = 0; - } - else if (typeof max === "undefined") { - max = min; - min = 0; - } - return min === max ? min : math_random$1() * (max - min) + min; + if (typeof min === "undefined") { + max = 1; + min = 0; + } else if (typeof max === "undefined") { + max = min; + min = 0; + } + return min === max ? min : math_random$1() * (max - min) + min; } -/** @ignore */ var math$1 = Object.create(Math); math$1.EPSILON = EPSILON; math$1.isFinite = isFinite; @@ -196,5102 +140,3618 @@ math$1.isPowerOfTwo = isPowerOfTwo; math$1.mod = mod; math$1.clamp = clamp$1; math$1.random = random$1; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$a = Math.abs; -/** @internal */ var math_sqrt$7 = Math.sqrt; -/** @internal */ var math_max$9 = Math.max; -/** @internal */ var math_min$9 = Math.min; -var Vec2 = /** @class */ (function () { - // tslint:disable-next-line:typedef - function Vec2(x, y) { - if (!(this instanceof Vec2)) { - return new Vec2(x, y); - } - if (typeof x === "undefined") { - this.x = 0; - this.y = 0; - } - else if (typeof x === "object") { - this.x = x.x; - this.y = x.y; - } - else { - this.x = x; - this.y = y; - } +var math_abs$a = Math.abs; +var math_sqrt$7 = Math.sqrt; +var math_max$9 = Math.max; +var math_min$9 = Math.min; +var Vec2 = ( + /** @class */ + function() { + function Vec22(x2, y) { + if (!(this instanceof Vec22)) { + return new Vec22(x2, y); + } + if (typeof x2 === "undefined") { + this.x = 0; + this.y = 0; + } else if (typeof x2 === "object") { + this.x = x2.x; + this.y = x2.y; + } else { + this.x = x2; + this.y = y; + } } - /** @internal */ - Vec2.prototype._serialize = function () { - return { - x: this.x, - y: this.y - }; + Vec22.prototype._serialize = function() { + return { + x: this.x, + y: this.y + }; }; - /** @internal */ - Vec2._deserialize = function (data) { - var obj = Object.create(Vec2.prototype); - obj.x = data.x; - obj.y = data.y; - return obj; - }; - Vec2.zero = function () { - var obj = Object.create(Vec2.prototype); - obj.x = 0; - obj.y = 0; - return obj; - }; - /** @hidden */ - Vec2.neo = function (x, y) { - var obj = Object.create(Vec2.prototype); - obj.x = x; - obj.y = y; - return obj; - }; - Vec2.clone = function (v) { - return Vec2.neo(v.x, v.y); - }; - /** @hidden */ - Vec2.prototype.toString = function () { - return JSON.stringify(this); - }; - /** - * Does this vector contain finite coordinates? - */ - Vec2.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Number.isFinite(obj.x) && Number.isFinite(obj.y); + Vec22._deserialize = function(data) { + var obj = Object.create(Vec22.prototype); + obj.x = data.x; + obj.y = data.y; + return obj; }; - Vec2.assert = function (o) { + Vec22.zero = function() { + var obj = Object.create(Vec22.prototype); + obj.x = 0; + obj.y = 0; + return obj; }; - Vec2.prototype.clone = function () { - return Vec2.clone(this); + Vec22.neo = function(x2, y) { + var obj = Object.create(Vec22.prototype); + obj.x = x2; + obj.y = y; + return obj; }; - /** - * Set this vector to all zeros. - * - * @returns this - */ - Vec2.prototype.setZero = function () { - this.x = 0.0; - this.y = 0.0; - return this; + Vec22.clone = function(v3) { + return Vec22.neo(v3.x, v3.y); }; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - // tslint:disable-next-line:typedef - Vec2.prototype.set = function (x, y) { - if (typeof x === "object") { - this.x = x.x; - this.y = x.y; - } - else { - this.x = x; - this.y = y; - } - return this; + Vec22.prototype.toString = function() { + return JSON.stringify(this); }; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - Vec2.prototype.setNum = function (x, y) { - this.x = x; - this.y = y; - return this; + Vec22.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Number.isFinite(obj.x) && Number.isFinite(obj.y); }; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - Vec2.prototype.setVec2 = function (value) { - this.x = value.x; - this.y = value.y; - return this; + Vec22.assert = function(o) { }; - /** @internal @deprecated Use setCombine or setMul */ - Vec2.prototype.wSet = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return this.setCombine(a, v, b, w); - } - else { - return this.setMul(a, v); - } + Vec22.prototype.clone = function() { + return Vec22.clone(this); }; - /** - * Set linear combination of v and w: `a * v + b * w` - */ - Vec2.prototype.setCombine = function (a, v, b, w) { - var x = a * v.x + b * w.x; - var y = a * v.y + b * w.y; - // `this` may be `w` - this.x = x; - this.y = y; - return this; + Vec22.prototype.setZero = function() { + this.x = 0; + this.y = 0; + return this; }; - Vec2.prototype.setMul = function (a, v) { - var x = a * v.x; - var y = a * v.y; - this.x = x; + Vec22.prototype.set = function(x2, y) { + if (typeof x2 === "object") { + this.x = x2.x; + this.y = x2.y; + } else { + this.x = x2; this.y = y; - return this; + } + return this; }; - /** - * Add a vector to this vector. - * - * @returns this - */ - Vec2.prototype.add = function (w) { - this.x += w.x; - this.y += w.y; - return this; + Vec22.prototype.setNum = function(x2, y) { + this.x = x2; + this.y = y; + return this; }; - /** @internal @deprecated Use addCombine or addMul */ - Vec2.prototype.wAdd = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return this.addCombine(a, v, b, w); - } - else { - return this.addMul(a, v); - } + Vec22.prototype.setVec2 = function(value) { + this.x = value.x; + this.y = value.y; + return this; }; - /** - * Add linear combination of v and w: `a * v + b * w` - */ - Vec2.prototype.addCombine = function (a, v, b, w) { - var x = a * v.x + b * w.x; - var y = a * v.y + b * w.y; - // `this` may be `w` - this.x += x; - this.y += y; - return this; + Vec22.prototype.wSet = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return this.setCombine(a2, v3, b2, w); + } else { + return this.setMul(a2, v3); + } }; - Vec2.prototype.addMul = function (a, v) { - var x = a * v.x; - var y = a * v.y; - this.x += x; - this.y += y; - return this; + Vec22.prototype.setCombine = function(a2, v3, b2, w) { + var x2 = a2 * v3.x + b2 * w.x; + var y = a2 * v3.y + b2 * w.y; + this.x = x2; + this.y = y; + return this; }; - /** - * @deprecated Use subCombine or subMul - */ - Vec2.prototype.wSub = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return this.subCombine(a, v, b, w); - } - else { - return this.subMul(a, v); - } - }; - /** - * Subtract linear combination of v and w: `a * v + b * w` - */ - Vec2.prototype.subCombine = function (a, v, b, w) { - var x = a * v.x + b * w.x; - var y = a * v.y + b * w.y; - // `this` may be `w` - this.x -= x; - this.y -= y; - return this; + Vec22.prototype.setMul = function(a2, v3) { + var x2 = a2 * v3.x; + var y = a2 * v3.y; + this.x = x2; + this.y = y; + return this; }; - Vec2.prototype.subMul = function (a, v) { - var x = a * v.x; - var y = a * v.y; - this.x -= x; - this.y -= y; - return this; + Vec22.prototype.add = function(w) { + this.x += w.x; + this.y += w.y; + return this; }; - /** - * Subtract a vector from this vector - * - * @returns this - */ - Vec2.prototype.sub = function (w) { - this.x -= w.x; - this.y -= w.y; - return this; + Vec22.prototype.wAdd = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return this.addCombine(a2, v3, b2, w); + } else { + return this.addMul(a2, v3); + } }; - /** - * Multiply this vector by a scalar. - * - * @returns this - */ - Vec2.prototype.mul = function (m) { - this.x *= m; - this.y *= m; - return this; + Vec22.prototype.addCombine = function(a2, v3, b2, w) { + var x2 = a2 * v3.x + b2 * w.x; + var y = a2 * v3.y + b2 * w.y; + this.x += x2; + this.y += y; + return this; }; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - Vec2.prototype.length = function () { - return Vec2.lengthOf(this); - }; - /** - * Get the length squared. - */ - Vec2.prototype.lengthSquared = function () { - return Vec2.lengthSquared(this); - }; - /** - * Convert this vector into a unit vector. - * - * @returns old length - */ - Vec2.prototype.normalize = function () { - var length = this.length(); - if (length < EPSILON) { - return 0.0; - } - var invLength = 1.0 / length; - this.x *= invLength; - this.y *= invLength; - return length; - }; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - Vec2.lengthOf = function (v) { - return math_sqrt$7(v.x * v.x + v.y * v.y); - }; - /** - * Get the length squared. - */ - Vec2.lengthSquared = function (v) { - return v.x * v.x + v.y * v.y; - }; - Vec2.distance = function (v, w) { - var dx = v.x - w.x; - var dy = v.y - w.y; - return math_sqrt$7(dx * dx + dy * dy); - }; - Vec2.distanceSquared = function (v, w) { - var dx = v.x - w.x; - var dy = v.y - w.y; - return dx * dx + dy * dy; - }; - Vec2.areEqual = function (v, w) { - return v === w || typeof w === "object" && w !== null && v.x === w.x && v.y === w.y; - }; - /** - * Get the skew vector such that dot(skew_vec, other) == cross(vec, other) - */ - Vec2.skew = function (v) { - return Vec2.neo(-v.y, v.x); - }; - /** Dot product on two vectors */ - Vec2.dot = function (v, w) { - return v.x * w.x + v.y * w.y; - }; - Vec2.cross = function (v, w) { - if (typeof w === "number") { - return Vec2.neo(w * v.y, -w * v.x); - } - else if (typeof v === "number") { - return Vec2.neo(-v * w.y, v * w.x); - } - else { - return v.x * w.y - v.y * w.x; - } - }; - /** Cross product on two vectors */ - Vec2.crossVec2Vec2 = function (v, w) { - return v.x * w.y - v.y * w.x; - }; - /** Cross product on a vector and a scalar */ - Vec2.crossVec2Num = function (v, w) { - return Vec2.neo(w * v.y, -w * v.x); - }; - /** Cross product on a vector and a scalar */ - Vec2.crossNumVec2 = function (v, w) { - return Vec2.neo(-v * w.y, v * w.x); - }; - Vec2.addCross = function (a, v, w) { - if (typeof w === "number") { - return Vec2.neo(w * v.y + a.x, -w * v.x + a.y); - } - else if (typeof v === "number") { - return Vec2.neo(-v * w.y + a.x, v * w.x + a.y); - } - }; - /** - * Returns `a + (v x w)` - */ - Vec2.addCrossVec2Num = function (a, v, w) { - return Vec2.neo(w * v.y + a.x, -w * v.x + a.y); - }; - /** - * Returns `a + (v x w)` - */ - Vec2.addCrossNumVec2 = function (a, v, w) { - return Vec2.neo(-v * w.y + a.x, v * w.x + a.y); - }; - Vec2.add = function (v, w) { - return Vec2.neo(v.x + w.x, v.y + w.y); + Vec22.prototype.addMul = function(a2, v3) { + var x2 = a2 * v3.x; + var y = a2 * v3.y; + this.x += x2; + this.y += y; + return this; }; - /** @hidden @deprecated */ - Vec2.wAdd = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return Vec2.combine(a, v, b, w); - } - else { - return Vec2.mulNumVec2(a, v); - } + Vec22.prototype.wSub = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return this.subCombine(a2, v3, b2, w); + } else { + return this.subMul(a2, v3); + } }; - Vec2.combine = function (a, v, b, w) { - return Vec2.zero().setCombine(a, v, b, w); + Vec22.prototype.subCombine = function(a2, v3, b2, w) { + var x2 = a2 * v3.x + b2 * w.x; + var y = a2 * v3.y + b2 * w.y; + this.x -= x2; + this.y -= y; + return this; }; - Vec2.sub = function (v, w) { - return Vec2.neo(v.x - w.x, v.y - w.y); + Vec22.prototype.subMul = function(a2, v3) { + var x2 = a2 * v3.x; + var y = a2 * v3.y; + this.x -= x2; + this.y -= y; + return this; }; - Vec2.mul = function (a, b) { - if (typeof a === "object") { - return Vec2.neo(a.x * b, a.y * b); - } - else if (typeof b === "object") { - return Vec2.neo(a * b.x, a * b.y); - } + Vec22.prototype.sub = function(w) { + this.x -= w.x; + this.y -= w.y; + return this; }; - Vec2.mulVec2Num = function (a, b) { - return Vec2.neo(a.x * b, a.y * b); + Vec22.prototype.mul = function(m) { + this.x *= m; + this.y *= m; + return this; }; - Vec2.mulNumVec2 = function (a, b) { - return Vec2.neo(a * b.x, a * b.y); + Vec22.prototype.length = function() { + return Vec22.lengthOf(this); }; - Vec2.prototype.neg = function () { - this.x = -this.x; - this.y = -this.y; - return this; + Vec22.prototype.lengthSquared = function() { + return Vec22.lengthSquared(this); }; - Vec2.neg = function (v) { - return Vec2.neo(-v.x, -v.y); + Vec22.prototype.normalize = function() { + var length2 = this.length(); + if (length2 < EPSILON) { + return 0; + } + var invLength = 1 / length2; + this.x *= invLength; + this.y *= invLength; + return length2; }; - Vec2.abs = function (v) { - return Vec2.neo(math_abs$a(v.x), math_abs$a(v.y)); + Vec22.lengthOf = function(v3) { + return math_sqrt$7(v3.x * v3.x + v3.y * v3.y); }; - Vec2.mid = function (v, w) { - return Vec2.neo((v.x + w.x) * 0.5, (v.y + w.y) * 0.5); + Vec22.lengthSquared = function(v3) { + return v3.x * v3.x + v3.y * v3.y; }; - Vec2.upper = function (v, w) { - return Vec2.neo(math_max$9(v.x, w.x), math_max$9(v.y, w.y)); + Vec22.distance = function(v3, w) { + var dx = v3.x - w.x; + var dy = v3.y - w.y; + return math_sqrt$7(dx * dx + dy * dy); }; - Vec2.lower = function (v, w) { - return Vec2.neo(math_min$9(v.x, w.x), math_min$9(v.y, w.y)); + Vec22.distanceSquared = function(v3, w) { + var dx = v3.x - w.x; + var dy = v3.y - w.y; + return dx * dx + dy * dy; }; - Vec2.prototype.clamp = function (max) { - var lengthSqr = this.x * this.x + this.y * this.y; - if (lengthSqr > max * max) { - var scale = max / math_sqrt$7(lengthSqr); - this.x *= scale; - this.y *= scale; - } - return this; + Vec22.areEqual = function(v3, w) { + return v3 === w || typeof w === "object" && w !== null && v3.x === w.x && v3.y === w.y; }; - Vec2.clamp = function (v, max) { - var r = Vec2.neo(v.x, v.y); - r.clamp(max); - return r; + Vec22.skew = function(v3) { + return Vec22.neo(-v3.y, v3.x); }; - /** @hidden @deprecated */ - Vec2.scaleFn = function (x, y) { - // todo: this was used in examples, remove in the future - return function (v) { - return Vec2.neo(v.x * x, v.y * y); - }; + Vec22.dot = function(v3, w) { + return v3.x * w.x + v3.y * w.y; }; - /** @hidden @deprecated */ - Vec2.translateFn = function (x, y) { - // todo: this was used in examples, remove in the future - return function (v) { - return Vec2.neo(v.x + x, v.y + y); - }; + Vec22.cross = function(v3, w) { + if (typeof w === "number") { + return Vec22.neo(w * v3.y, -w * v3.x); + } else if (typeof v3 === "number") { + return Vec22.neo(-v3 * w.y, v3 * w.x); + } else { + return v3.x * w.y - v3.y * w.x; + } }; - return Vec2; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_max$8 = Math.max; -/** @internal */ var math_min$8 = Math.min; -var AABB = /** @class */ (function () { - function AABB(lower, upper) { - if (!(this instanceof AABB)) { - return new AABB(lower, upper); - } - this.lowerBound = Vec2.zero(); - this.upperBound = Vec2.zero(); - if (typeof lower === "object") { - this.lowerBound.setVec2(lower); - } - if (typeof upper === "object") { - this.upperBound.setVec2(upper); - } - else if (typeof lower === "object") { - this.upperBound.setVec2(lower); - } + Vec22.crossVec2Vec2 = function(v3, w) { + return v3.x * w.y - v3.y * w.x; + }; + Vec22.crossVec2Num = function(v3, w) { + return Vec22.neo(w * v3.y, -w * v3.x); + }; + Vec22.crossNumVec2 = function(v3, w) { + return Vec22.neo(-v3 * w.y, v3 * w.x); + }; + Vec22.addCross = function(a2, v3, w) { + if (typeof w === "number") { + return Vec22.neo(w * v3.y + a2.x, -w * v3.x + a2.y); + } else if (typeof v3 === "number") { + return Vec22.neo(-v3 * w.y + a2.x, v3 * w.x + a2.y); + } + }; + Vec22.addCrossVec2Num = function(a2, v3, w) { + return Vec22.neo(w * v3.y + a2.x, -w * v3.x + a2.y); + }; + Vec22.addCrossNumVec2 = function(a2, v3, w) { + return Vec22.neo(-v3 * w.y + a2.x, v3 * w.x + a2.y); + }; + Vec22.add = function(v3, w) { + return Vec22.neo(v3.x + w.x, v3.y + w.y); + }; + Vec22.wAdd = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return Vec22.combine(a2, v3, b2, w); + } else { + return Vec22.mulNumVec2(a2, v3); + } + }; + Vec22.combine = function(a2, v3, b2, w) { + return Vec22.zero().setCombine(a2, v3, b2, w); + }; + Vec22.sub = function(v3, w) { + return Vec22.neo(v3.x - w.x, v3.y - w.y); + }; + Vec22.mul = function(a2, b2) { + if (typeof a2 === "object") { + return Vec22.neo(a2.x * b2, a2.y * b2); + } else if (typeof b2 === "object") { + return Vec22.neo(a2 * b2.x, a2 * b2.y); + } + }; + Vec22.mulVec2Num = function(a2, b2) { + return Vec22.neo(a2.x * b2, a2.y * b2); + }; + Vec22.mulNumVec2 = function(a2, b2) { + return Vec22.neo(a2 * b2.x, a2 * b2.y); + }; + Vec22.prototype.neg = function() { + this.x = -this.x; + this.y = -this.y; + return this; + }; + Vec22.neg = function(v3) { + return Vec22.neo(-v3.x, -v3.y); + }; + Vec22.abs = function(v3) { + return Vec22.neo(math_abs$a(v3.x), math_abs$a(v3.y)); + }; + Vec22.mid = function(v3, w) { + return Vec22.neo((v3.x + w.x) * 0.5, (v3.y + w.y) * 0.5); + }; + Vec22.upper = function(v3, w) { + return Vec22.neo(math_max$9(v3.x, w.x), math_max$9(v3.y, w.y)); + }; + Vec22.lower = function(v3, w) { + return Vec22.neo(math_min$9(v3.x, w.x), math_min$9(v3.y, w.y)); + }; + Vec22.prototype.clamp = function(max) { + var lengthSqr = this.x * this.x + this.y * this.y; + if (lengthSqr > max * max) { + var scale = max / math_sqrt$7(lengthSqr); + this.x *= scale; + this.y *= scale; + } + return this; + }; + Vec22.clamp = function(v3, max) { + var r = Vec22.neo(v3.x, v3.y); + r.clamp(max); + return r; + }; + Vec22.scaleFn = function(x2, y) { + return function(v3) { + return Vec22.neo(v3.x * x2, v3.y * y); + }; + }; + Vec22.translateFn = function(x2, y) { + return function(v3) { + return Vec22.neo(v3.x + x2, v3.y + y); + }; + }; + return Vec22; + }() +); +var math_max$8 = Math.max; +var math_min$8 = Math.min; +var AABB = ( + /** @class */ + function() { + function AABB2(lower, upper) { + if (!(this instanceof AABB2)) { + return new AABB2(lower, upper); + } + this.lowerBound = Vec2.zero(); + this.upperBound = Vec2.zero(); + if (typeof lower === "object") { + this.lowerBound.setVec2(lower); + } + if (typeof upper === "object") { + this.upperBound.setVec2(upper); + } else if (typeof lower === "object") { + this.upperBound.setVec2(lower); + } } - /** - * Verify that the bounds are sorted. - */ - AABB.prototype.isValid = function () { - return AABB.isValid(this); - }; - AABB.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec2.isValid(obj.lowerBound) && Vec2.isValid(obj.upperBound) && Vec2.sub(obj.upperBound, obj.lowerBound).lengthSquared() >= 0; - }; - AABB.assert = function (o) { - }; - /** - * Get the center of the AABB. - */ - AABB.prototype.getCenter = function () { - return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5); - }; - /** - * Get the extents of the AABB (half-widths). - */ - AABB.prototype.getExtents = function () { - return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5); - }; - /** - * Get the perimeter length. - */ - AABB.prototype.getPerimeter = function () { - return 2.0 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y); - }; - /** - * Combine one or two AABB into this one. - */ - AABB.prototype.combine = function (a, b) { - b = b || this; - var lowerA = a.lowerBound; - var upperA = a.upperBound; - var lowerB = b.lowerBound; - var upperB = b.upperBound; - var lowerX = math_min$8(lowerA.x, lowerB.x); - var lowerY = math_min$8(lowerA.y, lowerB.y); - var upperX = math_max$8(upperB.x, upperA.x); - var upperY = math_max$8(upperB.y, upperA.y); - this.lowerBound.setNum(lowerX, lowerY); - this.upperBound.setNum(upperX, upperY); - }; - AABB.prototype.combinePoints = function (a, b) { - this.lowerBound.setNum(math_min$8(a.x, b.x), math_min$8(a.y, b.y)); - this.upperBound.setNum(math_max$8(a.x, b.x), math_max$8(a.y, b.y)); - }; - AABB.prototype.set = function (aabb) { - this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y); - this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y); - }; - AABB.prototype.contains = function (aabb) { - var result = true; - result = result && this.lowerBound.x <= aabb.lowerBound.x; - result = result && this.lowerBound.y <= aabb.lowerBound.y; - result = result && aabb.upperBound.x <= this.upperBound.x; - result = result && aabb.upperBound.y <= this.upperBound.y; - return result; - }; - AABB.prototype.extend = function (value) { - AABB.extend(this, value); - return this; + AABB2.prototype.isValid = function() { + return AABB2.isValid(this); + }; + AABB2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec2.isValid(obj.lowerBound) && Vec2.isValid(obj.upperBound) && Vec2.sub(obj.upperBound, obj.lowerBound).lengthSquared() >= 0; + }; + AABB2.assert = function(o) { + }; + AABB2.prototype.getCenter = function() { + return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5); + }; + AABB2.prototype.getExtents = function() { + return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5); + }; + AABB2.prototype.getPerimeter = function() { + return 2 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y); + }; + AABB2.prototype.combine = function(a2, b2) { + b2 = b2 || this; + var lowerA = a2.lowerBound; + var upperA = a2.upperBound; + var lowerB = b2.lowerBound; + var upperB = b2.upperBound; + var lowerX = math_min$8(lowerA.x, lowerB.x); + var lowerY = math_min$8(lowerA.y, lowerB.y); + var upperX = math_max$8(upperB.x, upperA.x); + var upperY = math_max$8(upperB.y, upperA.y); + this.lowerBound.setNum(lowerX, lowerY); + this.upperBound.setNum(upperX, upperY); + }; + AABB2.prototype.combinePoints = function(a2, b2) { + this.lowerBound.setNum(math_min$8(a2.x, b2.x), math_min$8(a2.y, b2.y)); + this.upperBound.setNum(math_max$8(a2.x, b2.x), math_max$8(a2.y, b2.y)); + }; + AABB2.prototype.set = function(aabb) { + this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y); + this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y); + }; + AABB2.prototype.contains = function(aabb) { + var result = true; + result = result && this.lowerBound.x <= aabb.lowerBound.x; + result = result && this.lowerBound.y <= aabb.lowerBound.y; + result = result && aabb.upperBound.x <= this.upperBound.x; + result = result && aabb.upperBound.y <= this.upperBound.y; + return result; + }; + AABB2.prototype.extend = function(value) { + AABB2.extend(this, value); + return this; }; - AABB.extend = function (out, value) { - out.lowerBound.x -= value; - out.lowerBound.y -= value; - out.upperBound.x += value; - out.upperBound.y += value; - return out; - }; - AABB.testOverlap = function (a, b) { - var d1x = b.lowerBound.x - a.upperBound.x; - var d2x = a.lowerBound.x - b.upperBound.x; - var d1y = b.lowerBound.y - a.upperBound.y; - var d2y = a.lowerBound.y - b.upperBound.y; - if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) { + AABB2.extend = function(out, value) { + out.lowerBound.x -= value; + out.lowerBound.y -= value; + out.upperBound.x += value; + out.upperBound.y += value; + return out; + }; + AABB2.testOverlap = function(a2, b2) { + var d1x = b2.lowerBound.x - a2.upperBound.x; + var d2x = a2.lowerBound.x - b2.upperBound.x; + var d1y = b2.lowerBound.y - a2.upperBound.y; + var d2y = a2.lowerBound.y - b2.upperBound.y; + if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) { + return false; + } + return true; + }; + AABB2.areEqual = function(a2, b2) { + return Vec2.areEqual(a2.lowerBound, b2.lowerBound) && Vec2.areEqual(a2.upperBound, b2.upperBound); + }; + AABB2.diff = function(a2, b2) { + var wD = math_max$8(0, math_min$8(a2.upperBound.x, b2.upperBound.x) - math_max$8(b2.lowerBound.x, a2.lowerBound.x)); + var hD = math_max$8(0, math_min$8(a2.upperBound.y, b2.upperBound.y) - math_max$8(b2.lowerBound.y, a2.lowerBound.y)); + var wA = a2.upperBound.x - a2.lowerBound.x; + var hA = a2.upperBound.y - a2.lowerBound.y; + var wB = b2.upperBound.x - b2.lowerBound.x; + var hB = b2.upperBound.y - b2.lowerBound.y; + return wA * hA + wB * hB - wD * hD; + }; + AABB2.prototype.rayCast = function(output2, input2) { + var tmin = -Infinity; + var tmax = Infinity; + var p = input2.p1; + var d2 = Vec2.sub(input2.p2, input2.p1); + var absD = Vec2.abs(d2); + var normal3 = Vec2.zero(); + for (var f = "x"; f !== null; f = f === "x" ? "y" : null) { + if (absD.x < EPSILON) { + if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) { return false; + } + } else { + var inv_d = 1 / d2[f]; + var t1 = (this.lowerBound[f] - p[f]) * inv_d; + var t2 = (this.upperBound[f] - p[f]) * inv_d; + var s2 = -1; + if (t1 > t2) { + var temp3 = t1; + t1 = t2; + t2 = temp3; + s2 = 1; + } + if (t1 > tmin) { + normal3.setZero(); + normal3[f] = s2; + tmin = t1; + } + tmax = math_min$8(tmax, t2); + if (tmin > tmax) { + return false; + } } - return true; - }; - AABB.areEqual = function (a, b) { - return Vec2.areEqual(a.lowerBound, b.lowerBound) && Vec2.areEqual(a.upperBound, b.upperBound); - }; - AABB.diff = function (a, b) { - var wD = math_max$8(0, math_min$8(a.upperBound.x, b.upperBound.x) - math_max$8(b.lowerBound.x, a.lowerBound.x)); - var hD = math_max$8(0, math_min$8(a.upperBound.y, b.upperBound.y) - math_max$8(b.lowerBound.y, a.lowerBound.y)); - var wA = a.upperBound.x - a.lowerBound.x; - var hA = a.upperBound.y - a.lowerBound.y; - var wB = b.upperBound.x - b.lowerBound.x; - var hB = b.upperBound.y - b.lowerBound.y; - return wA * hA + wB * hB - wD * hD; - }; - AABB.prototype.rayCast = function (output, input) { - // From Real-time Collision Detection, p179. - var tmin = -Infinity; - var tmax = Infinity; - var p = input.p1; - var d = Vec2.sub(input.p2, input.p1); - var absD = Vec2.abs(d); - var normal = Vec2.zero(); - for (var f = "x"; f !== null; f = (f === "x" ? "y" : null)) { - if (absD.x < EPSILON) { - // Parallel. - if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) { - return false; - } - } - else { - var inv_d = 1.0 / d[f]; - var t1 = (this.lowerBound[f] - p[f]) * inv_d; - var t2 = (this.upperBound[f] - p[f]) * inv_d; - // Sign of the normal vector. - var s = -1.0; - if (t1 > t2) { - var temp = t1; - t1 = t2; - t2 = temp; - s = 1.0; - } - // Push the min up - if (t1 > tmin) { - normal.setZero(); - normal[f] = s; - tmin = t1; - } - // Pull the max down - tmax = math_min$8(tmax, t2); - if (tmin > tmax) { - return false; - } - } - } - // Does the ray start inside the box? - // Does the ray intersect beyond the max fraction? - if (tmin < 0.0 || input.maxFraction < tmin) { - return false; - } - // Intersection. - output.fraction = tmin; - output.normal = normal; - return true; + } + if (tmin < 0 || input2.maxFraction < tmin) { + return false; + } + output2.fraction = tmin; + output2.normal = normal3; + return true; }; - /** @hidden */ - AABB.prototype.toString = function () { - return JSON.stringify(this); - }; - AABB.combinePoints = function (out, a, b) { - out.lowerBound.x = math_min$8(a.x, b.x); - out.lowerBound.y = math_min$8(a.y, b.y); - out.upperBound.x = math_max$8(a.x, b.x); - out.upperBound.y = math_max$8(a.y, b.y); - return out; - }; - AABB.combinedPerimeter = function (a, b) { - var lx = math_min$8(a.lowerBound.x, b.lowerBound.x); - var ly = math_min$8(a.lowerBound.y, b.lowerBound.y); - var ux = math_max$8(a.upperBound.x, b.upperBound.x); - var uy = math_max$8(a.upperBound.y, b.upperBound.y); - return 2.0 * (ux - lx + uy - ly); - }; - return AABB; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_PI$7 = Math.PI; -/** - * Tuning constants based on meters-kilograms-seconds (MKS) units. - * - * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units. - */ -var Settings = /** @class */ (function () { - function Settings() { - } - Object.defineProperty(Settings, "polygonRadius", { - /** - * The radius of the polygon/edge shape skin. This should not be modified. - * Making this smaller means polygons will have an insufficient buffer for - * continuous collision. Making it larger may create artifacts for vertex - * collision. - */ - get: function () { return 2.0 * Settings.linearSlop; }, - enumerable: false, - configurable: true + AABB2.prototype.toString = function() { + return JSON.stringify(this); + }; + AABB2.combinePoints = function(out, a2, b2) { + out.lowerBound.x = math_min$8(a2.x, b2.x); + out.lowerBound.y = math_min$8(a2.y, b2.y); + out.upperBound.x = math_max$8(a2.x, b2.x); + out.upperBound.y = math_max$8(a2.y, b2.y); + return out; + }; + AABB2.combinedPerimeter = function(a2, b2) { + var lx = math_min$8(a2.lowerBound.x, b2.lowerBound.x); + var ly = math_min$8(a2.lowerBound.y, b2.lowerBound.y); + var ux = math_max$8(a2.upperBound.x, b2.upperBound.x); + var uy = math_max$8(a2.upperBound.y, b2.upperBound.y); + return 2 * (ux - lx + uy - ly); + }; + return AABB2; + }() +); +var math_PI$7 = Math.PI; +var Settings = ( + /** @class */ + function() { + function Settings2() { + } + Object.defineProperty(Settings2, "polygonRadius", { + /** + * The radius of the polygon/edge shape skin. This should not be modified. + * Making this smaller means polygons will have an insufficient buffer for + * continuous collision. Making it larger may create artifacts for vertex + * collision. + */ + get: function() { + return 2 * Settings2.linearSlop; + }, + enumerable: false, + configurable: true }); - /** - * You can use this to change the length scale used by your game. - * - * For example for inches you could use 39.4. - */ - Settings.lengthUnitsPerMeter = 1.0; - // Collision - /** - * The maximum number of contact points between two convex shapes. Do not change - * this value. - */ - Settings.maxManifoldPoints = 2; - /** - * The maximum number of vertices on a convex polygon. You cannot increase this - * too much because BlockAllocator has a maximum object size. - */ - Settings.maxPolygonVertices = 12; - /** - * This is used to fatten AABBs in the dynamic tree. This allows proxies to move - * by a small amount without triggering a tree adjustment. This is in meters. - */ - Settings.aabbExtension = 0.1; - /** - * This is used to fatten AABBs in the dynamic tree. This is used to predict the - * future position based on the current displacement. This is a dimensionless - * multiplier. - */ - Settings.aabbMultiplier = 2.0; - /** - * A small length used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - Settings.linearSlop = 0.005; - /** - * A small angle used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - Settings.angularSlop = (2.0 / 180.0 * math_PI$7); - /** - * Maximum number of sub-steps per contact in continuous physics simulation. - */ - Settings.maxSubSteps = 8; - // Dynamics - /** - * Maximum number of contacts to be handled to solve a TOI impact. - */ - Settings.maxTOIContacts = 32; - /** - * Maximum iterations to solve a TOI. - */ - Settings.maxTOIIterations = 20; - /** - * Maximum iterations to find Distance. - */ - Settings.maxDistanceIterations = 20; - /** - * A velocity threshold for elastic collisions. Any collision with a relative - * linear velocity below this threshold will be treated as inelastic. - */ - Settings.velocityThreshold = 1.0; - /** - * The maximum linear position correction used when solving constraints. This - * helps to prevent overshoot. - */ - Settings.maxLinearCorrection = 0.2; - /** - * The maximum angular position correction used when solving constraints. This - * helps to prevent overshoot. - */ - Settings.maxAngularCorrection = (8.0 / 180.0 * math_PI$7); - /** - * The maximum linear velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - Settings.maxTranslation = 2.0; - /** - * The maximum angular velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - Settings.maxRotation = (0.5 * math_PI$7); - /** - * This scale factor controls how fast overlap is resolved. Ideally this would - * be 1 so that overlap is removed in one time step. However using values close - * to 1 often lead to overshoot. - */ - Settings.baumgarte = 0.2; - Settings.toiBaugarte = 0.75; - // Sleep - /** - * The time that a body must be still before it will go to sleep. - */ - Settings.timeToSleep = 0.5; - /** - * A body cannot sleep if its linear velocity is above this tolerance. - */ - Settings.linearSleepTolerance = 0.01; - /** - * A body cannot sleep if its angular velocity is above this tolerance. - */ - Settings.angularSleepTolerance = (2.0 / 180.0 * math_PI$7); - return Settings; -}()); -/** @internal */ -var SettingsInternal = /** @class */ (function () { - function SettingsInternal() { - } - Object.defineProperty(SettingsInternal, "maxManifoldPoints", { - get: function () { - return Settings.maxManifoldPoints; - }, - enumerable: false, - configurable: true + Settings2.lengthUnitsPerMeter = 1; + Settings2.maxManifoldPoints = 2; + Settings2.maxPolygonVertices = 12; + Settings2.aabbExtension = 0.1; + Settings2.aabbMultiplier = 2; + Settings2.linearSlop = 5e-3; + Settings2.angularSlop = 2 / 180 * math_PI$7; + Settings2.maxSubSteps = 8; + Settings2.maxTOIContacts = 32; + Settings2.maxTOIIterations = 20; + Settings2.maxDistanceIterations = 20; + Settings2.velocityThreshold = 1; + Settings2.maxLinearCorrection = 0.2; + Settings2.maxAngularCorrection = 8 / 180 * math_PI$7; + Settings2.maxTranslation = 2; + Settings2.maxRotation = 0.5 * math_PI$7; + Settings2.baumgarte = 0.2; + Settings2.toiBaugarte = 0.75; + Settings2.timeToSleep = 0.5; + Settings2.linearSleepTolerance = 0.01; + Settings2.angularSleepTolerance = 2 / 180 * math_PI$7; + return Settings2; + }() +); +var SettingsInternal = ( + /** @class */ + function() { + function SettingsInternal2() { + } + Object.defineProperty(SettingsInternal2, "maxManifoldPoints", { + get: function() { + return Settings.maxManifoldPoints; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxPolygonVertices", { - get: function () { - return Settings.maxPolygonVertices; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxPolygonVertices", { + get: function() { + return Settings.maxPolygonVertices; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "aabbExtension", { - get: function () { - return Settings.aabbExtension * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "aabbExtension", { + get: function() { + return Settings.aabbExtension * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "aabbMultiplier", { - get: function () { - return Settings.aabbMultiplier; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "aabbMultiplier", { + get: function() { + return Settings.aabbMultiplier; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "linearSlop", { - get: function () { - return Settings.linearSlop * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "linearSlop", { + get: function() { + return Settings.linearSlop * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "linearSlopSquared", { - get: function () { - return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "linearSlopSquared", { + get: function() { + return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "angularSlop", { - get: function () { - return Settings.angularSlop; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "angularSlop", { + get: function() { + return Settings.angularSlop; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "polygonRadius", { - get: function () { - return 2.0 * Settings.linearSlop; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "polygonRadius", { + get: function() { + return 2 * Settings.linearSlop; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxSubSteps", { - get: function () { - return Settings.maxSubSteps; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxSubSteps", { + get: function() { + return Settings.maxSubSteps; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxTOIContacts", { - get: function () { - return Settings.maxTOIContacts; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxTOIContacts", { + get: function() { + return Settings.maxTOIContacts; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxTOIIterations", { - get: function () { - return Settings.maxTOIIterations; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxTOIIterations", { + get: function() { + return Settings.maxTOIIterations; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxDistanceIterations", { - get: function () { - return Settings.maxDistanceIterations; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxDistanceIterations", { + get: function() { + return Settings.maxDistanceIterations; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "velocityThreshold", { - get: function () { - return Settings.velocityThreshold * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "velocityThreshold", { + get: function() { + return Settings.velocityThreshold * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxLinearCorrection", { - get: function () { - return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxLinearCorrection", { + get: function() { + return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxAngularCorrection", { - get: function () { - return Settings.maxAngularCorrection; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxAngularCorrection", { + get: function() { + return Settings.maxAngularCorrection; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxTranslation", { - get: function () { - return Settings.maxTranslation * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxTranslation", { + get: function() { + return Settings.maxTranslation * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxTranslationSquared", { - get: function () { - return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxTranslationSquared", { + get: function() { + return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxRotation", { - get: function () { - return Settings.maxRotation; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxRotation", { + get: function() { + return Settings.maxRotation; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxRotationSquared", { - get: function () { - return Settings.maxRotation * Settings.maxRotation; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxRotationSquared", { + get: function() { + return Settings.maxRotation * Settings.maxRotation; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "baumgarte", { - get: function () { - return Settings.baumgarte; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "baumgarte", { + get: function() { + return Settings.baumgarte; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "toiBaugarte", { - get: function () { - return Settings.toiBaugarte; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "toiBaugarte", { + get: function() { + return Settings.toiBaugarte; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "timeToSleep", { - get: function () { - return Settings.timeToSleep; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "timeToSleep", { + get: function() { + return Settings.timeToSleep; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "linearSleepTolerance", { - get: function () { - return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "linearSleepTolerance", { + get: function() { + return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "linearSleepToleranceSqr", { - get: function () { - return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "linearSleepToleranceSqr", { + get: function() { + return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "angularSleepTolerance", { - get: function () { - return Settings.angularSleepTolerance; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "angularSleepTolerance", { + get: function() { + return Settings.angularSleepTolerance; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "angularSleepToleranceSqr", { - get: function () { - return Settings.angularSleepTolerance * Settings.angularSleepTolerance; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "angularSleepToleranceSqr", { + get: function() { + return Settings.angularSleepTolerance * Settings.angularSleepTolerance; + }, + enumerable: false, + configurable: true }); - return SettingsInternal; -}()); - -/* - * Copyright (c) 2016-2018 Ali Shakiba http://shakiba.me/planck.js - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - */ -/** @internal */ -var Pool = /** @class */ (function () { - function Pool(opts) { - this._list = []; - this._max = Infinity; - this._hasCreateFn = false; - this._createCount = 0; - this._hasAllocateFn = false; - this._allocateCount = 0; - this._hasReleaseFn = false; - this._releaseCount = 0; - this._hasDisposeFn = false; - this._disposeCount = 0; - this._list = []; - this._max = opts.max || this._max; - this._createFn = opts.create; - this._hasCreateFn = typeof this._createFn === "function"; - this._allocateFn = opts.allocate; - this._hasAllocateFn = typeof this._allocateFn === "function"; - this._releaseFn = opts.release; - this._hasReleaseFn = typeof this._releaseFn === "function"; - this._disposeFn = opts.dispose; - this._hasDisposeFn = typeof this._disposeFn === "function"; - } - Pool.prototype.max = function (n) { - if (typeof n === "number") { - this._max = n; - return this; - } - return this._max; + return SettingsInternal2; + }() +); +var Pool = ( + /** @class */ + function() { + function Pool2(opts) { + this._list = []; + this._max = Infinity; + this._hasCreateFn = false; + this._createCount = 0; + this._hasAllocateFn = false; + this._allocateCount = 0; + this._hasReleaseFn = false; + this._releaseCount = 0; + this._hasDisposeFn = false; + this._disposeCount = 0; + this._list = []; + this._max = opts.max || this._max; + this._createFn = opts.create; + this._hasCreateFn = typeof this._createFn === "function"; + this._allocateFn = opts.allocate; + this._hasAllocateFn = typeof this._allocateFn === "function"; + this._releaseFn = opts.release; + this._hasReleaseFn = typeof this._releaseFn === "function"; + this._disposeFn = opts.dispose; + this._hasDisposeFn = typeof this._disposeFn === "function"; + } + Pool2.prototype.max = function(n2) { + if (typeof n2 === "number") { + this._max = n2; + return this; + } + return this._max; }; - Pool.prototype.size = function () { - return this._list.length; + Pool2.prototype.size = function() { + return this._list.length; }; - Pool.prototype.allocate = function () { - var item; - if (this._list.length > 0) { - item = this._list.shift(); - } - else { - this._createCount++; - if (this._hasCreateFn) { - item = this._createFn(); - } - else { - // tslint:disable-next-line:no-object-literal-type-assertion - item = {}; - } - } - this._allocateCount++; - if (this._hasAllocateFn) { - this._allocateFn(item); + Pool2.prototype.allocate = function() { + var item; + if (this._list.length > 0) { + item = this._list.shift(); + } else { + this._createCount++; + if (this._hasCreateFn) { + item = this._createFn(); + } else { + item = {}; } - return item; + } + this._allocateCount++; + if (this._hasAllocateFn) { + this._allocateFn(item); + } + return item; }; - Pool.prototype.release = function (item) { - if (this._list.length < this._max) { - this._releaseCount++; - if (this._hasReleaseFn) { - this._releaseFn(item); - } - this._list.push(item); + Pool2.prototype.release = function(item) { + if (this._list.length < this._max) { + this._releaseCount++; + if (this._hasReleaseFn) { + this._releaseFn(item); } - else { - this._disposeCount++; - if (this._hasDisposeFn) { - item = this._disposeFn(item); - } + this._list.push(item); + } else { + this._disposeCount++; + if (this._hasDisposeFn) { + item = this._disposeFn(item); } + } }; - Pool.prototype.toString = function () { - return " +" + this._createCount + " >" + this._allocateCount + " <" + this._releaseCount + " -" - + this._disposeCount + " =" + this._list.length + "/" + this._max; + Pool2.prototype.toString = function() { + return " +" + this._createCount + " >" + this._allocateCount + " <" + this._releaseCount + " -" + this._disposeCount + " =" + this._list.length + "/" + this._max; }; - return Pool; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$9 = Math.abs; -/** @internal */ var math_max$7 = Math.max; -/** - * A node in the dynamic tree. The client does not interact with this directly. - */ -var TreeNode = /** @class */ (function () { - function TreeNode(id) { - /** Enlarged AABB */ - this.aabb = new AABB(); - this.userData = null; - this.parent = null; - this.child1 = null; - this.child2 = null; - /** 0: leaf, -1: free node */ - this.height = -1; - this.id = id; - } - /** @internal */ - TreeNode.prototype.toString = function () { - return this.id + ": " + this.userData; - }; - TreeNode.prototype.isLeaf = function () { - return this.child1 == null; - }; - return TreeNode; -}()); -/** @internal */ var poolTreeNode = new Pool({ - create: function () { - return new TreeNode(); - }, - release: function (node) { - node.userData = null; - node.parent = null; - node.child1 = null; - node.child2 = null; - node.height = -1; - node.id = undefined; - } + return Pool2; + }() +); +var math_abs$9 = Math.abs; +var math_max$7 = Math.max; +var TreeNode = ( + /** @class */ + function() { + function TreeNode2(id) { + this.aabb = new AABB(); + this.userData = null; + this.parent = null; + this.child1 = null; + this.child2 = null; + this.height = -1; + this.id = id; + } + TreeNode2.prototype.toString = function() { + return this.id + ": " + this.userData; + }; + TreeNode2.prototype.isLeaf = function() { + return this.child1 == null; + }; + return TreeNode2; + }() +); +var poolTreeNode = new Pool({ + create: function() { + return new TreeNode(); + }, + release: function(node) { + node.userData = null; + node.parent = null; + node.child1 = null; + node.child2 = null; + node.height = -1; + node.id = void 0; + } }); -/** - * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A - * dynamic tree arranges data in a binary tree to accelerate queries such as - * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we - * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger - * than the client object. This allows the client object to move by small - * amounts without triggering a tree update. - * - * Nodes are pooled and relocatable, so we use node indices rather than - * pointers. - */ -var DynamicTree = /** @class */ (function () { - function DynamicTree() { - this.inputPool = new Pool({ - create: function () { - // tslint:disable-next-line:no-object-literal-type-assertion - return {}; - }, - release: function (stack) { - } - }); - this.stackPool = new Pool({ - create: function () { - return []; - }, - release: function (stack) { - stack.length = 0; - } - }); - this.iteratorPool = new Pool({ - create: function () { - return new Iterator(); - }, - release: function (iterator) { - iterator.close(); - } - }); - this.m_root = null; - this.m_nodes = {}; - this.m_lastProxyId = 0; - } - /** - * Get proxy user data. - * - * @return the proxy user data or 0 if the id is invalid. - */ - DynamicTree.prototype.getUserData = function (id) { - var node = this.m_nodes[id]; - return node.userData; - }; - /** - * Get the fat AABB for a node id. - * - * @return the proxy user data or 0 if the id is invalid. - */ - DynamicTree.prototype.getFatAABB = function (id) { - var node = this.m_nodes[id]; - return node.aabb; - }; - DynamicTree.prototype.allocateNode = function () { - var node = poolTreeNode.allocate(); - node.id = ++this.m_lastProxyId; - this.m_nodes[node.id] = node; - return node; - }; - DynamicTree.prototype.freeNode = function (node) { - // tslint:disable-next-line:no-dynamic-delete - delete this.m_nodes[node.id]; - poolTreeNode.release(node); - }; - /** - * Create a proxy in the tree as a leaf node. We return the index of the node - * instead of a pointer so that we can grow the node pool. - * - * Create a proxy. Provide a tight fitting AABB and a userData pointer. - */ - DynamicTree.prototype.createProxy = function (aabb, userData) { - var node = this.allocateNode(); - node.aabb.set(aabb); - // Fatten the aabb. - AABB.extend(node.aabb, SettingsInternal.aabbExtension); - node.userData = userData; - node.height = 0; - this.insertLeaf(node); - return node.id; - }; - /** - * Destroy a proxy. This asserts if the id is invalid. - */ - DynamicTree.prototype.destroyProxy = function (id) { - var node = this.m_nodes[id]; - this.removeLeaf(node); - this.freeNode(node); - }; - /** - * Move a proxy with a swepted AABB. If the proxy has moved outside of its - * fattened AABB, then the proxy is removed from the tree and re-inserted. - * Otherwise the function returns immediately. - * - * @param d Displacement - * - * @return true if the proxy was re-inserted. - */ - DynamicTree.prototype.moveProxy = function (id, aabb, d) { - var node = this.m_nodes[id]; - if (node.aabb.contains(aabb)) { - return false; - } - this.removeLeaf(node); - node.aabb.set(aabb); - // Extend AABB. - aabb = node.aabb; - AABB.extend(aabb, SettingsInternal.aabbExtension); - // Predict AABB displacement. - // const d = Vec2.mul(Settings.aabbMultiplier, displacement); - if (d.x < 0.0) { - aabb.lowerBound.x += d.x * SettingsInternal.aabbMultiplier; - } - else { - aabb.upperBound.x += d.x * SettingsInternal.aabbMultiplier; +var DynamicTree = ( + /** @class */ + function() { + function DynamicTree2() { + this.inputPool = new Pool({ + create: function() { + return {}; + }, + release: function(stack) { } - if (d.y < 0.0) { - aabb.lowerBound.y += d.y * SettingsInternal.aabbMultiplier; + }); + this.stackPool = new Pool({ + create: function() { + return []; + }, + release: function(stack) { + stack.length = 0; } - else { - aabb.upperBound.y += d.y * SettingsInternal.aabbMultiplier; + }); + this.iteratorPool = new Pool({ + create: function() { + return new Iterator(); + }, + release: function(iterator) { + iterator.close(); } - this.insertLeaf(node); - return true; + }); + this.m_root = null; + this.m_nodes = {}; + this.m_lastProxyId = 0; + } + DynamicTree2.prototype.getUserData = function(id) { + var node = this.m_nodes[id]; + return node.userData; + }; + DynamicTree2.prototype.getFatAABB = function(id) { + var node = this.m_nodes[id]; + return node.aabb; + }; + DynamicTree2.prototype.allocateNode = function() { + var node = poolTreeNode.allocate(); + node.id = ++this.m_lastProxyId; + this.m_nodes[node.id] = node; + return node; + }; + DynamicTree2.prototype.freeNode = function(node) { + delete this.m_nodes[node.id]; + poolTreeNode.release(node); + }; + DynamicTree2.prototype.createProxy = function(aabb, userData) { + var node = this.allocateNode(); + node.aabb.set(aabb); + AABB.extend(node.aabb, SettingsInternal.aabbExtension); + node.userData = userData; + node.height = 0; + this.insertLeaf(node); + return node.id; + }; + DynamicTree2.prototype.destroyProxy = function(id) { + var node = this.m_nodes[id]; + this.removeLeaf(node); + this.freeNode(node); + }; + DynamicTree2.prototype.moveProxy = function(id, aabb, d2) { + var node = this.m_nodes[id]; + if (node.aabb.contains(aabb)) { + return false; + } + this.removeLeaf(node); + node.aabb.set(aabb); + aabb = node.aabb; + AABB.extend(aabb, SettingsInternal.aabbExtension); + if (d2.x < 0) { + aabb.lowerBound.x += d2.x * SettingsInternal.aabbMultiplier; + } else { + aabb.upperBound.x += d2.x * SettingsInternal.aabbMultiplier; + } + if (d2.y < 0) { + aabb.lowerBound.y += d2.y * SettingsInternal.aabbMultiplier; + } else { + aabb.upperBound.y += d2.y * SettingsInternal.aabbMultiplier; + } + this.insertLeaf(node); + return true; }; - DynamicTree.prototype.insertLeaf = function (leaf) { - if (this.m_root == null) { - this.m_root = leaf; - this.m_root.parent = null; - return; + DynamicTree2.prototype.insertLeaf = function(leaf) { + if (this.m_root == null) { + this.m_root = leaf; + this.m_root.parent = null; + return; + } + var leafAABB = leaf.aabb; + var index = this.m_root; + while (!index.isLeaf()) { + var child1 = index.child1; + var child2 = index.child2; + var area = index.aabb.getPerimeter(); + var combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB); + var cost = 2 * combinedArea; + var inheritanceCost = 2 * (combinedArea - area); + var newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb); + var cost1 = newArea1 + inheritanceCost; + if (!child1.isLeaf()) { + var oldArea = child1.aabb.getPerimeter(); + cost1 -= oldArea; + } + var newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb); + var cost2 = newArea2 + inheritanceCost; + if (!child2.isLeaf()) { + var oldArea = child2.aabb.getPerimeter(); + cost2 -= oldArea; + } + if (cost < cost1 && cost < cost2) { + break; + } + if (cost1 < cost2) { + index = child1; + } else { + index = child2; + } + } + var sibling = index; + var oldParent = sibling.parent; + var newParent = this.allocateNode(); + newParent.parent = oldParent; + newParent.userData = null; + newParent.aabb.combine(leafAABB, sibling.aabb); + newParent.height = sibling.height + 1; + if (oldParent != null) { + if (oldParent.child1 === sibling) { + oldParent.child1 = newParent; + } else { + oldParent.child2 = newParent; } - // Find the best sibling for this node - var leafAABB = leaf.aabb; - var index = this.m_root; - while (!index.isLeaf()) { - var child1 = index.child1; - var child2 = index.child2; - var area = index.aabb.getPerimeter(); - var combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB); - // Cost of creating a new parent for this node and the new leaf - var cost = 2.0 * combinedArea; - // Minimum cost of pushing the leaf further down the tree - var inheritanceCost = 2.0 * (combinedArea - area); - // Cost of descending into child1 - var newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb); - var cost1 = newArea1 + inheritanceCost; - if (!child1.isLeaf()) { - var oldArea = child1.aabb.getPerimeter(); - cost1 -= oldArea; - } - // Cost of descending into child2 - var newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb); - var cost2 = newArea2 + inheritanceCost; - if (!child2.isLeaf()) { - var oldArea = child2.aabb.getPerimeter(); - cost2 -= oldArea; - } - // Descend according to the minimum cost. - if (cost < cost1 && cost < cost2) { - break; - } - // Descend - if (cost1 < cost2) { - index = child1; - } - else { - index = child2; - } + newParent.child1 = sibling; + newParent.child2 = leaf; + sibling.parent = newParent; + leaf.parent = newParent; + } else { + newParent.child1 = sibling; + newParent.child2 = leaf; + sibling.parent = newParent; + leaf.parent = newParent; + this.m_root = newParent; + } + index = leaf.parent; + while (index != null) { + index = this.balance(index); + var child1 = index.child1; + var child2 = index.child2; + index.height = 1 + math_max$7(child1.height, child2.height); + index.aabb.combine(child1.aabb, child2.aabb); + index = index.parent; + } + }; + DynamicTree2.prototype.removeLeaf = function(leaf) { + if (leaf === this.m_root) { + this.m_root = null; + return; + } + var parent = leaf.parent; + var grandParent = parent.parent; + var sibling; + if (parent.child1 === leaf) { + sibling = parent.child2; + } else { + sibling = parent.child1; + } + if (grandParent != null) { + if (grandParent.child1 === parent) { + grandParent.child1 = sibling; + } else { + grandParent.child2 = sibling; } - var sibling = index; - // Create a new parent. - var oldParent = sibling.parent; - var newParent = this.allocateNode(); - newParent.parent = oldParent; - newParent.userData = null; - newParent.aabb.combine(leafAABB, sibling.aabb); - newParent.height = sibling.height + 1; - if (oldParent != null) { - // The sibling was not the root. - if (oldParent.child1 === sibling) { - oldParent.child1 = newParent; - } - else { - oldParent.child2 = newParent; - } - newParent.child1 = sibling; - newParent.child2 = leaf; - sibling.parent = newParent; - leaf.parent = newParent; - } - else { - // The sibling was the root. - newParent.child1 = sibling; - newParent.child2 = leaf; - sibling.parent = newParent; - leaf.parent = newParent; - this.m_root = newParent; - } - // Walk back up the tree fixing heights and AABBs - index = leaf.parent; + sibling.parent = grandParent; + this.freeNode(parent); + var index = grandParent; while (index != null) { - index = this.balance(index); - var child1 = index.child1; - var child2 = index.child2; - index.height = 1 + math_max$7(child1.height, child2.height); - index.aabb.combine(child1.aabb, child2.aabb); - index = index.parent; - } - // validate(); - }; - DynamicTree.prototype.removeLeaf = function (leaf) { - if (leaf === this.m_root) { - this.m_root = null; - return; - } - var parent = leaf.parent; - var grandParent = parent.parent; - var sibling; - if (parent.child1 === leaf) { - sibling = parent.child2; - } - else { - sibling = parent.child1; - } - if (grandParent != null) { - // Destroy parent and connect sibling to grandParent. - if (grandParent.child1 === parent) { - grandParent.child1 = sibling; - } - else { - grandParent.child2 = sibling; - } - sibling.parent = grandParent; - this.freeNode(parent); - // Adjust ancestor bounds. - var index = grandParent; - while (index != null) { - index = this.balance(index); - var child1 = index.child1; - var child2 = index.child2; - index.aabb.combine(child1.aabb, child2.aabb); - index.height = 1 + math_max$7(child1.height, child2.height); - index = index.parent; - } + index = this.balance(index); + var child1 = index.child1; + var child2 = index.child2; + index.aabb.combine(child1.aabb, child2.aabb); + index.height = 1 + math_max$7(child1.height, child2.height); + index = index.parent; } - else { - this.m_root = sibling; - sibling.parent = null; - this.freeNode(parent); - } - // validate(); - }; - /** - * Perform a left or right rotation if node A is imbalanced. Returns the new - * root index. - */ - DynamicTree.prototype.balance = function (iA) { - var A = iA; - if (A.isLeaf() || A.height < 2) { - return iA; - } - var B = A.child1; - var C = A.child2; - var balance = C.height - B.height; - // Rotate C up - if (balance > 1) { - var F = C.child1; - var G = C.child2; - // Swap A and C - C.child1 = A; - C.parent = A.parent; - A.parent = C; - // A's old parent should point to C - if (C.parent != null) { - if (C.parent.child1 === iA) { - C.parent.child1 = C; - } - else { - C.parent.child2 = C; - } - } - else { - this.m_root = C; - } - // Rotate - if (F.height > G.height) { - C.child2 = F; - A.child2 = G; - G.parent = A; - A.aabb.combine(B.aabb, G.aabb); - C.aabb.combine(A.aabb, F.aabb); - A.height = 1 + math_max$7(B.height, G.height); - C.height = 1 + math_max$7(A.height, F.height); - } - else { - C.child2 = G; - A.child2 = F; - F.parent = A; - A.aabb.combine(B.aabb, F.aabb); - C.aabb.combine(A.aabb, G.aabb); - A.height = 1 + math_max$7(B.height, F.height); - C.height = 1 + math_max$7(A.height, G.height); - } - return C; - } - // Rotate B up - if (balance < -1) { - var D = B.child1; - var E = B.child2; - // Swap A and B - B.child1 = A; - B.parent = A.parent; - A.parent = B; - // A's old parent should point to B - if (B.parent != null) { - if (B.parent.child1 === A) { - B.parent.child1 = B; - } - else { - B.parent.child2 = B; - } - } - else { - this.m_root = B; - } - // Rotate - if (D.height > E.height) { - B.child2 = D; - A.child1 = E; - E.parent = A; - A.aabb.combine(C.aabb, E.aabb); - B.aabb.combine(A.aabb, D.aabb); - A.height = 1 + math_max$7(C.height, E.height); - B.height = 1 + math_max$7(A.height, D.height); - } - else { - B.child2 = E; - A.child1 = D; - D.parent = A; - A.aabb.combine(C.aabb, D.aabb); - B.aabb.combine(A.aabb, E.aabb); - A.height = 1 + math_max$7(C.height, D.height); - B.height = 1 + math_max$7(A.height, E.height); - } - return B; - } - return A; - }; - /** - * Compute the height of the binary tree in O(N) time. Should not be called - * often. - */ - DynamicTree.prototype.getHeight = function () { - if (this.m_root == null) { - return 0; - } - return this.m_root.height; - }; - /** - * Get the ratio of the sum of the node areas to the root area. - */ - DynamicTree.prototype.getAreaRatio = function () { - if (this.m_root == null) { - return 0.0; - } - var root = this.m_root; - var rootArea = root.aabb.getPerimeter(); - var totalArea = 0.0; - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - if (node.height < 0) { - // Free node in pool - continue; - } - totalArea += node.aabb.getPerimeter(); + } else { + this.m_root = sibling; + sibling.parent = null; + this.freeNode(parent); + } + }; + DynamicTree2.prototype.balance = function(iA) { + var A = iA; + if (A.isLeaf() || A.height < 2) { + return iA; + } + var B = A.child1; + var C = A.child2; + var balance = C.height - B.height; + if (balance > 1) { + var F = C.child1; + var G = C.child2; + C.child1 = A; + C.parent = A.parent; + A.parent = C; + if (C.parent != null) { + if (C.parent.child1 === iA) { + C.parent.child1 = C; + } else { + C.parent.child2 = C; + } + } else { + this.m_root = C; + } + if (F.height > G.height) { + C.child2 = F; + A.child2 = G; + G.parent = A; + A.aabb.combine(B.aabb, G.aabb); + C.aabb.combine(A.aabb, F.aabb); + A.height = 1 + math_max$7(B.height, G.height); + C.height = 1 + math_max$7(A.height, F.height); + } else { + C.child2 = G; + A.child2 = F; + F.parent = A; + A.aabb.combine(B.aabb, F.aabb); + C.aabb.combine(A.aabb, G.aabb); + A.height = 1 + math_max$7(B.height, F.height); + C.height = 1 + math_max$7(A.height, G.height); + } + return C; + } + if (balance < -1) { + var D = B.child1; + var E = B.child2; + B.child1 = A; + B.parent = A.parent; + A.parent = B; + if (B.parent != null) { + if (B.parent.child1 === A) { + B.parent.child1 = B; + } else { + B.parent.child2 = B; + } + } else { + this.m_root = B; + } + if (D.height > E.height) { + B.child2 = D; + A.child1 = E; + E.parent = A; + A.aabb.combine(C.aabb, E.aabb); + B.aabb.combine(A.aabb, D.aabb); + A.height = 1 + math_max$7(C.height, E.height); + B.height = 1 + math_max$7(A.height, D.height); + } else { + B.child2 = E; + A.child1 = D; + D.parent = A; + A.aabb.combine(C.aabb, D.aabb); + B.aabb.combine(A.aabb, E.aabb); + A.height = 1 + math_max$7(C.height, D.height); + B.height = 1 + math_max$7(A.height, E.height); } - this.iteratorPool.release(it); - return totalArea / rootArea; + return B; + } + return A; + }; + DynamicTree2.prototype.getHeight = function() { + if (this.m_root == null) { + return 0; + } + return this.m_root.height; }; - /** - * Compute the height of a sub-tree. - */ - DynamicTree.prototype.computeHeight = function (id) { - var node; - if (typeof id !== "undefined") { - node = this.m_nodes[id]; + DynamicTree2.prototype.getAreaRatio = function() { + if (this.m_root == null) { + return 0; + } + var root = this.m_root; + var rootArea = root.aabb.getPerimeter(); + var totalArea = 0; + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + if (node.height < 0) { + continue; } - else { - node = this.m_root; + totalArea += node.aabb.getPerimeter(); + } + this.iteratorPool.release(it); + return totalArea / rootArea; + }; + DynamicTree2.prototype.computeHeight = function(id) { + var node; + if (typeof id !== "undefined") { + node = this.m_nodes[id]; + } else { + node = this.m_root; + } + if (node.isLeaf()) { + return 0; + } + var height1 = this.computeHeight(node.child1.id); + var height2 = this.computeHeight(node.child2.id); + return 1 + math_max$7(height1, height2); + }; + DynamicTree2.prototype.validateStructure = function(node) { + if (node == null) { + return; + } + if (node === this.m_root) ; + var child1 = node.child1; + var child2 = node.child2; + if (node.isLeaf()) { + return; + } + this.validateStructure(child1); + this.validateStructure(child2); + }; + DynamicTree2.prototype.validateMetrics = function(node) { + if (node == null) { + return; + } + var child1 = node.child1; + var child2 = node.child2; + if (node.isLeaf()) { + return; + } + child1.height; + child2.height; + var aabb = new AABB(); + aabb.combine(child1.aabb, child2.aabb); + this.validateMetrics(child1); + this.validateMetrics(child2); + }; + DynamicTree2.prototype.validate = function() { + return; + }; + DynamicTree2.prototype.getMaxBalance = function() { + var maxBalance = 0; + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + if (node.height <= 1) { + continue; + } + var balance = math_abs$9(node.child2.height - node.child1.height); + maxBalance = math_max$7(maxBalance, balance); + } + this.iteratorPool.release(it); + return maxBalance; + }; + DynamicTree2.prototype.rebuildBottomUp = function() { + var nodes = []; + var count = 0; + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + if (node.height < 0) { + continue; } - // false && console.assert(0 <= id && id < this.m_nodeCapacity); if (node.isLeaf()) { - return 0; + node.parent = null; + nodes[count] = node; + ++count; + } else { + this.freeNode(node); + } + } + this.iteratorPool.release(it); + while (count > 1) { + var minCost = Infinity; + var iMin = -1; + var jMin = -1; + for (var i = 0; i < count; ++i) { + var aabbi = nodes[i].aabb; + for (var j = i + 1; j < count; ++j) { + var aabbj = nodes[j].aabb; + var cost = AABB.combinedPerimeter(aabbi, aabbj); + if (cost < minCost) { + iMin = i; + jMin = j; + minCost = cost; + } + } } - var height1 = this.computeHeight(node.child1.id); - var height2 = this.computeHeight(node.child2.id); - return 1 + math_max$7(height1, height2); - }; - DynamicTree.prototype.validateStructure = function (node) { + var child1 = nodes[iMin]; + var child2 = nodes[jMin]; + var parent_1 = this.allocateNode(); + parent_1.child1 = child1; + parent_1.child2 = child2; + parent_1.height = 1 + math_max$7(child1.height, child2.height); + parent_1.aabb.combine(child1.aabb, child2.aabb); + parent_1.parent = null; + child1.parent = parent_1; + child2.parent = parent_1; + nodes[jMin] = nodes[count - 1]; + nodes[iMin] = parent_1; + --count; + } + this.m_root = nodes[0]; + }; + DynamicTree2.prototype.shiftOrigin = function(newOrigin) { + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + var aabb = node.aabb; + aabb.lowerBound.x -= newOrigin.x; + aabb.lowerBound.y -= newOrigin.y; + aabb.upperBound.x -= newOrigin.x; + aabb.upperBound.y -= newOrigin.y; + } + this.iteratorPool.release(it); + }; + DynamicTree2.prototype.query = function(aabb, queryCallback) { + var stack = this.stackPool.allocate(); + stack.push(this.m_root); + while (stack.length > 0) { + var node = stack.pop(); if (node == null) { - return; + continue; } - if (node === this.m_root) ; - var child1 = node.child1; - var child2 = node.child2; - if (node.isLeaf()) { - return; + if (AABB.testOverlap(node.aabb, aabb)) { + if (node.isLeaf()) { + var proceed = queryCallback(node.id); + if (proceed === false) { + return; + } + } else { + stack.push(node.child1); + stack.push(node.child2); + } } - this.validateStructure(child1); - this.validateStructure(child2); - }; - DynamicTree.prototype.validateMetrics = function (node) { + } + this.stackPool.release(stack); + }; + DynamicTree2.prototype.rayCast = function(input2, rayCastCallback) { + var p1 = input2.p1; + var p2 = input2.p2; + var r = Vec2.sub(p2, p1); + r.normalize(); + var v3 = Vec2.crossNumVec2(1, r); + var abs_v = Vec2.abs(v3); + var maxFraction = input2.maxFraction; + var segmentAABB = new AABB(); + var t = Vec2.combine(1 - maxFraction, p1, maxFraction, p2); + segmentAABB.combinePoints(p1, t); + var stack = this.stackPool.allocate(); + var subInput = this.inputPool.allocate(); + stack.push(this.m_root); + while (stack.length > 0) { + var node = stack.pop(); if (node == null) { - return; + continue; + } + if (AABB.testOverlap(node.aabb, segmentAABB) === false) { + continue; + } + var c2 = node.aabb.getCenter(); + var h = node.aabb.getExtents(); + var separation = math_abs$9(Vec2.dot(v3, Vec2.sub(p1, c2))) - Vec2.dot(abs_v, h); + if (separation > 0) { + continue; } - var child1 = node.child1; - var child2 = node.child2; if (node.isLeaf()) { - return; + subInput.p1 = Vec2.clone(input2.p1); + subInput.p2 = Vec2.clone(input2.p2); + subInput.maxFraction = maxFraction; + var value = rayCastCallback(subInput, node.id); + if (value === 0) { + break; + } else if (value > 0) { + maxFraction = value; + t = Vec2.combine(1 - maxFraction, p1, maxFraction, p2); + segmentAABB.combinePoints(p1, t); + } + } else { + stack.push(node.child1); + stack.push(node.child2); } - // false && console.assert(0 <= child1 && child1 < this.m_nodeCapacity); - // false && console.assert(0 <= child2 && child2 < this.m_nodeCapacity); - child1.height; - child2.height; - var aabb = new AABB(); - aabb.combine(child1.aabb, child2.aabb); - this.validateMetrics(child1); - this.validateMetrics(child2); - }; - /** - * Validate this tree. For testing. - */ - DynamicTree.prototype.validate = function () { - return; + } + this.stackPool.release(stack); + this.inputPool.release(subInput); }; - /** - * Get the maximum balance of an node in the tree. The balance is the difference - * in height of the two children of a node. - */ - DynamicTree.prototype.getMaxBalance = function () { - var maxBalance = 0; - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - if (node.height <= 1) { - continue; - } - var balance = math_abs$9(node.child2.height - node.child1.height); - maxBalance = math_max$7(maxBalance, balance); - } - this.iteratorPool.release(it); - return maxBalance; - }; - /** - * Build an optimal tree. Very expensive. For testing. - */ - DynamicTree.prototype.rebuildBottomUp = function () { - var nodes = []; - var count = 0; - // Build array of leaves. Free the rest. - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - if (node.height < 0) { - // free node in pool - continue; - } - if (node.isLeaf()) { - node.parent = null; - nodes[count] = node; - ++count; - } - else { - this.freeNode(node); - } - } - this.iteratorPool.release(it); - while (count > 1) { - var minCost = Infinity; - var iMin = -1; - var jMin = -1; - for (var i = 0; i < count; ++i) { - var aabbi = nodes[i].aabb; - for (var j = i + 1; j < count; ++j) { - var aabbj = nodes[j].aabb; - var cost = AABB.combinedPerimeter(aabbi, aabbj); - if (cost < minCost) { - iMin = i; - jMin = j; - minCost = cost; - } - } - } - var child1 = nodes[iMin]; - var child2 = nodes[jMin]; - var parent_1 = this.allocateNode(); - parent_1.child1 = child1; - parent_1.child2 = child2; - parent_1.height = 1 + math_max$7(child1.height, child2.height); - parent_1.aabb.combine(child1.aabb, child2.aabb); - parent_1.parent = null; - child1.parent = parent_1; - child2.parent = parent_1; - nodes[jMin] = nodes[count - 1]; - nodes[iMin] = parent_1; - --count; - } - this.m_root = nodes[0]; - }; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - DynamicTree.prototype.shiftOrigin = function (newOrigin) { - // Build array of leaves. Free the rest. - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - var aabb = node.aabb; - aabb.lowerBound.x -= newOrigin.x; - aabb.lowerBound.y -= newOrigin.y; - aabb.upperBound.x -= newOrigin.x; - aabb.upperBound.y -= newOrigin.y; - } - this.iteratorPool.release(it); - }; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - DynamicTree.prototype.query = function (aabb, queryCallback) { - var stack = this.stackPool.allocate(); - stack.push(this.m_root); - while (stack.length > 0) { - var node = stack.pop(); - if (node == null) { - continue; - } - if (AABB.testOverlap(node.aabb, aabb)) { - if (node.isLeaf()) { - var proceed = queryCallback(node.id); - if (proceed === false) { - return; - } - } - else { - stack.push(node.child1); - stack.push(node.child2); - } - } + return DynamicTree2; + }() +); +var Iterator = ( + /** @class */ + function() { + function Iterator2() { + this.parents = []; + this.states = []; + } + Iterator2.prototype.preorder = function(root) { + this.parents.length = 0; + this.parents.push(root); + this.states.length = 0; + this.states.push(0); + return this; + }; + Iterator2.prototype.next = function() { + while (this.parents.length > 0) { + var i = this.parents.length - 1; + var node = this.parents[i]; + if (this.states[i] === 0) { + this.states[i] = 1; + return node; + } + if (this.states[i] === 1) { + this.states[i] = 2; + if (node.child1) { + this.parents.push(node.child1); + this.states.push(1); + return node.child1; + } } - this.stackPool.release(stack); - }; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - DynamicTree.prototype.rayCast = function (input, rayCastCallback) { - var p1 = input.p1; - var p2 = input.p2; - var r = Vec2.sub(p2, p1); - r.normalize(); - // v is perpendicular to the segment. - var v = Vec2.crossNumVec2(1.0, r); - var abs_v = Vec2.abs(v); - // Separating axis for segment (Gino, p80). - // |dot(v, p1 - c)| > dot(|v|, h) - var maxFraction = input.maxFraction; - // Build a bounding box for the segment. - var segmentAABB = new AABB(); - var t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2); - segmentAABB.combinePoints(p1, t); - var stack = this.stackPool.allocate(); - var subInput = this.inputPool.allocate(); - stack.push(this.m_root); - while (stack.length > 0) { - var node = stack.pop(); - if (node == null) { - continue; - } - if (AABB.testOverlap(node.aabb, segmentAABB) === false) { - continue; - } - // Separating axis for segment (Gino, p80). - // |dot(v, p1 - c)| > dot(|v|, h) - var c = node.aabb.getCenter(); - var h = node.aabb.getExtents(); - var separation = math_abs$9(Vec2.dot(v, Vec2.sub(p1, c))) - Vec2.dot(abs_v, h); - if (separation > 0.0) { - continue; - } - if (node.isLeaf()) { - subInput.p1 = Vec2.clone(input.p1); - subInput.p2 = Vec2.clone(input.p2); - subInput.maxFraction = maxFraction; - var value = rayCastCallback(subInput, node.id); - if (value === 0.0) { - // The client has terminated the ray cast. - break; - } - else if (value > 0.0) { - // update segment bounding box. - maxFraction = value; - t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2); - segmentAABB.combinePoints(p1, t); - } - } - else { - stack.push(node.child1); - stack.push(node.child2); - } + if (this.states[i] === 2) { + this.states[i] = 3; + if (node.child2) { + this.parents.push(node.child2); + this.states.push(1); + return node.child2; + } } - this.stackPool.release(stack); - this.inputPool.release(subInput); + this.parents.pop(); + this.states.pop(); + } }; - return DynamicTree; -}()); -/** @internal */ -var Iterator = /** @class */ (function () { - function Iterator() { - this.parents = []; - this.states = []; - } - Iterator.prototype.preorder = function (root) { - this.parents.length = 0; - this.parents.push(root); - this.states.length = 0; - this.states.push(0); - return this; + Iterator2.prototype.close = function() { + this.parents.length = 0; }; - Iterator.prototype.next = function () { - while (this.parents.length > 0) { - var i = this.parents.length - 1; - var node = this.parents[i]; - if (this.states[i] === 0) { - this.states[i] = 1; - return node; - } - if (this.states[i] === 1) { - this.states[i] = 2; - if (node.child1) { - this.parents.push(node.child1); - this.states.push(1); - return node.child1; - } - } - if (this.states[i] === 2) { - this.states[i] = 3; - if (node.child2) { - this.parents.push(node.child2); - this.states.push(1); - return node.child2; - } - } - this.parents.pop(); - this.states.pop(); + return Iterator2; + }() +); +var math_max$6 = Math.max; +var math_min$7 = Math.min; +var BroadPhase = ( + /** @class */ + function() { + function BroadPhase2() { + var _this = this; + this.m_tree = new DynamicTree(); + this.m_moveBuffer = []; + this.query = function(aabb, queryCallback) { + _this.m_tree.query(aabb, queryCallback); + }; + this.queryCallback = function(proxyId) { + if (proxyId === _this.m_queryProxyId) { + return true; } + var proxyIdA = math_min$7(proxyId, _this.m_queryProxyId); + var proxyIdB = math_max$6(proxyId, _this.m_queryProxyId); + var userDataA = _this.m_tree.getUserData(proxyIdA); + var userDataB = _this.m_tree.getUserData(proxyIdB); + _this.m_callback(userDataA, userDataB); + return true; + }; + } + BroadPhase2.prototype.getUserData = function(proxyId) { + return this.m_tree.getUserData(proxyId); }; - Iterator.prototype.close = function () { - this.parents.length = 0; + BroadPhase2.prototype.testOverlap = function(proxyIdA, proxyIdB) { + var aabbA = this.m_tree.getFatAABB(proxyIdA); + var aabbB = this.m_tree.getFatAABB(proxyIdB); + return AABB.testOverlap(aabbA, aabbB); }; - return Iterator; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_max$6 = Math.max; -/** @internal */ var math_min$7 = Math.min; -/** - * The broad-phase wraps and extends a dynamic-tree to keep track of moved - * objects and query them on update. - */ -var BroadPhase = /** @class */ (function () { - function BroadPhase() { - var _this = this; - this.m_tree = new DynamicTree(); - this.m_moveBuffer = []; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - this.query = function (aabb, queryCallback) { - _this.m_tree.query(aabb, queryCallback); - }; - this.queryCallback = function (proxyId) { - // A proxy cannot form a pair with itself. - if (proxyId === _this.m_queryProxyId) { - return true; - } - var proxyIdA = math_min$7(proxyId, _this.m_queryProxyId); - var proxyIdB = math_max$6(proxyId, _this.m_queryProxyId); - // TODO: Skip any duplicate pairs. - var userDataA = _this.m_tree.getUserData(proxyIdA); - var userDataB = _this.m_tree.getUserData(proxyIdB); - // Send the pairs back to the client. - _this.m_callback(userDataA, userDataB); - return true; - }; - } - /** - * Get user data from a proxy. Returns null if the id is invalid. - */ - BroadPhase.prototype.getUserData = function (proxyId) { - return this.m_tree.getUserData(proxyId); - }; - /** - * Test overlap of fat AABBs. - */ - BroadPhase.prototype.testOverlap = function (proxyIdA, proxyIdB) { - var aabbA = this.m_tree.getFatAABB(proxyIdA); - var aabbB = this.m_tree.getFatAABB(proxyIdB); - return AABB.testOverlap(aabbA, aabbB); - }; - /** - * Get the fat AABB for a proxy. - */ - BroadPhase.prototype.getFatAABB = function (proxyId) { - return this.m_tree.getFatAABB(proxyId); - }; - /** - * Get the number of proxies. - */ - BroadPhase.prototype.getProxyCount = function () { - return this.m_moveBuffer.length; - }; - /** - * Get the height of the embedded tree. - */ - BroadPhase.prototype.getTreeHeight = function () { - return this.m_tree.getHeight(); - }; - /** - * Get the balance (integer) of the embedded tree. - */ - BroadPhase.prototype.getTreeBalance = function () { - return this.m_tree.getMaxBalance(); - }; - /** - * Get the quality metric of the embedded tree. - */ - BroadPhase.prototype.getTreeQuality = function () { - return this.m_tree.getAreaRatio(); - }; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - BroadPhase.prototype.rayCast = function (input, rayCastCallback) { - this.m_tree.rayCast(input, rayCastCallback); - }; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - BroadPhase.prototype.shiftOrigin = function (newOrigin) { - this.m_tree.shiftOrigin(newOrigin); - }; - /** - * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs - * is called. - */ - BroadPhase.prototype.createProxy = function (aabb, userData) { - var proxyId = this.m_tree.createProxy(aabb, userData); - this.bufferMove(proxyId); - return proxyId; - }; - /** - * Destroy a proxy. It is up to the client to remove any pairs. - */ - BroadPhase.prototype.destroyProxy = function (proxyId) { - this.unbufferMove(proxyId); - this.m_tree.destroyProxy(proxyId); - }; - /** - * Call moveProxy as many times as you like, then when you are done call - * UpdatePairs to finalized the proxy pairs (for your time step). - */ - BroadPhase.prototype.moveProxy = function (proxyId, aabb, displacement) { - var changed = this.m_tree.moveProxy(proxyId, aabb, displacement); - if (changed) { - this.bufferMove(proxyId); - } - }; - /** - * Call to trigger a re-processing of it's pairs on the next call to - * UpdatePairs. - */ - BroadPhase.prototype.touchProxy = function (proxyId) { + BroadPhase2.prototype.getFatAABB = function(proxyId) { + return this.m_tree.getFatAABB(proxyId); + }; + BroadPhase2.prototype.getProxyCount = function() { + return this.m_moveBuffer.length; + }; + BroadPhase2.prototype.getTreeHeight = function() { + return this.m_tree.getHeight(); + }; + BroadPhase2.prototype.getTreeBalance = function() { + return this.m_tree.getMaxBalance(); + }; + BroadPhase2.prototype.getTreeQuality = function() { + return this.m_tree.getAreaRatio(); + }; + BroadPhase2.prototype.rayCast = function(input2, rayCastCallback) { + this.m_tree.rayCast(input2, rayCastCallback); + }; + BroadPhase2.prototype.shiftOrigin = function(newOrigin) { + this.m_tree.shiftOrigin(newOrigin); + }; + BroadPhase2.prototype.createProxy = function(aabb, userData) { + var proxyId = this.m_tree.createProxy(aabb, userData); + this.bufferMove(proxyId); + return proxyId; + }; + BroadPhase2.prototype.destroyProxy = function(proxyId) { + this.unbufferMove(proxyId); + this.m_tree.destroyProxy(proxyId); + }; + BroadPhase2.prototype.moveProxy = function(proxyId, aabb, displacement2) { + var changed = this.m_tree.moveProxy(proxyId, aabb, displacement2); + if (changed) { this.bufferMove(proxyId); + } }; - BroadPhase.prototype.bufferMove = function (proxyId) { - this.m_moveBuffer.push(proxyId); + BroadPhase2.prototype.touchProxy = function(proxyId) { + this.bufferMove(proxyId); }; - BroadPhase.prototype.unbufferMove = function (proxyId) { - for (var i = 0; i < this.m_moveBuffer.length; ++i) { - if (this.m_moveBuffer[i] === proxyId) { - this.m_moveBuffer[i] = null; - } + BroadPhase2.prototype.bufferMove = function(proxyId) { + this.m_moveBuffer.push(proxyId); + }; + BroadPhase2.prototype.unbufferMove = function(proxyId) { + for (var i = 0; i < this.m_moveBuffer.length; ++i) { + if (this.m_moveBuffer[i] === proxyId) { + this.m_moveBuffer[i] = null; } + } }; - /** - * Update the pairs. This results in pair callbacks. This can only add pairs. - */ - BroadPhase.prototype.updatePairs = function (addPairCallback) { - this.m_callback = addPairCallback; - // Perform tree queries for all moving proxies. - while (this.m_moveBuffer.length > 0) { - this.m_queryProxyId = this.m_moveBuffer.pop(); - if (this.m_queryProxyId === null) { - continue; - } - // We have to query the tree with the fat AABB so that - // we don't fail to create a pair that may touch later. - var fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId); - // Query tree, create pairs and add them pair buffer. - this.m_tree.query(fatAABB, this.queryCallback); + BroadPhase2.prototype.updatePairs = function(addPairCallback) { + this.m_callback = addPairCallback; + while (this.m_moveBuffer.length > 0) { + this.m_queryProxyId = this.m_moveBuffer.pop(); + if (this.m_queryProxyId === null) { + continue; } - // Try to keep the tree balanced. - // this.m_tree.rebalance(4); + var fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId); + this.m_tree.query(fatAABB, this.queryCallback); + } }; - return BroadPhase; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2023 Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_sin$2 = Math.sin; -/** @internal */ var math_cos$2 = Math.cos; -/** @internal */ var math_sqrt$6 = Math.sqrt; -function vec2(x, y) { - return { x: x, y: y }; + return BroadPhase2; + }() +); +var math_sin$2 = Math.sin; +var math_cos$2 = Math.cos; +var math_sqrt$6 = Math.sqrt; +function vec2(x2, y) { + return { x: x2, y }; } function rotation(angle) { - return { s: math_sin$2(angle), c: math_cos$2(angle) }; + return { s: math_sin$2(angle), c: math_cos$2(angle) }; } -function setVec2(out, x, y) { - out.x = x; - out.y = y; - return out; +function setVec2(out, x2, y) { + out.x = x2; + out.y = y; + return out; } function copyVec2(out, w) { - out.x = w.x; - out.y = w.y; - return out; + out.x = w.x; + out.y = w.y; + return out; } function zeroVec2(out) { - out.x = 0; - out.y = 0; - return out; + out.x = 0; + out.y = 0; + return out; } function negVec2(out) { - out.x = -out.x; - out.y = -out.y; - return out; + out.x = -out.x; + out.y = -out.y; + return out; } function plusVec2(out, w) { - out.x += w.x; - out.y += w.y; - return out; + out.x += w.x; + out.y += w.y; + return out; } -function addVec2(out, v, w) { - out.x = v.x + w.x; - out.y = v.x + w.y; - return out; +function addVec2(out, v3, w) { + out.x = v3.x + w.x; + out.y = v3.x + w.y; + return out; } function minusVec2(out, w) { - out.x -= w.x; - out.y -= w.y; - return out; + out.x -= w.x; + out.y -= w.y; + return out; } -function subVec2(out, v, w) { - out.x = v.x - w.x; - out.y = v.y - w.y; - return out; +function subVec2(out, v3, w) { + out.x = v3.x - w.x; + out.y = v3.y - w.y; + return out; } function mulVec2(out, m) { - out.x *= m; - out.y *= m; - return out; + out.x *= m; + out.y *= m; + return out; } function scaleVec2(out, m, w) { - out.x = m * w.x; - out.y = m * w.y; - return out; + out.x = m * w.x; + out.y = m * w.y; + return out; } function plusScaleVec2(out, m, w) { - out.x += m * w.x; - out.y += m * w.y; - return out; + out.x += m * w.x; + out.y += m * w.y; + return out; } function minusScaleVec2(out, m, w) { - out.x -= m * w.x; - out.y -= m * w.y; - return out; + out.x -= m * w.x; + out.y -= m * w.y; + return out; } -function combine2Vec2(out, am, a, bm, b) { - out.x = am * a.x + bm * b.x; - out.y = am * a.y + bm * b.y; - return out; +function combine2Vec2(out, am, a2, bm, b2) { + out.x = am * a2.x + bm * b2.x; + out.y = am * a2.y + bm * b2.y; + return out; } -function combine3Vec2(out, am, a, bm, b, cm, c) { - out.x = am * a.x + bm * b.x + cm * c.x; - out.y = am * a.y + bm * b.y + cm * c.y; - return out; +function combine3Vec2(out, am, a2, bm, b2, cm, c2) { + out.x = am * a2.x + bm * b2.x + cm * c2.x; + out.y = am * a2.y + bm * b2.y + cm * c2.y; + return out; } function normalizeVec2Length(out) { - var length = math_sqrt$6(out.x * out.x + out.y * out.y); - if (length !== 0) { - var invLength = 1 / length; - out.x *= invLength; - out.y *= invLength; - } - return length; + var length2 = math_sqrt$6(out.x * out.x + out.y * out.y); + if (length2 !== 0) { + var invLength = 1 / length2; + out.x *= invLength; + out.y *= invLength; + } + return length2; } function normalizeVec2(out) { - var length = math_sqrt$6(out.x * out.x + out.y * out.y); - if (length > 0) { - var invLength = 1 / length; - out.x *= invLength; - out.y *= invLength; - } - return out; + var length2 = math_sqrt$6(out.x * out.x + out.y * out.y); + if (length2 > 0) { + var invLength = 1 / length2; + out.x *= invLength; + out.y *= invLength; + } + return out; } -function crossVec2Num(out, v, w) { - var x = w * v.y; - var y = -w * v.x; - out.x = x; - out.y = y; - return out; +function crossVec2Num(out, v3, w) { + var x2 = w * v3.y; + var y = -w * v3.x; + out.x = x2; + out.y = y; + return out; } -function crossNumVec2(out, w, v) { - var x = -w * v.y; - var y = w * v.x; - out.x = x; - out.y = y; - return out; +function crossNumVec2(out, w, v3) { + var x2 = -w * v3.y; + var y = w * v3.x; + out.x = x2; + out.y = y; + return out; } -function crossVec2Vec2(a, b) { - return a.x * b.y - a.y * b.x; +function crossVec2Vec2(a2, b2) { + return a2.x * b2.y - a2.y * b2.x; } -function dotVec2(a, b) { - return a.x * b.x + a.y * b.y; +function dotVec2(a2, b2) { + return a2.x * b2.x + a2.y * b2.y; } -function lengthSqrVec2(a) { - return a.x * a.x + a.y * a.y; +function lengthSqrVec2(a2) { + return a2.x * a2.x + a2.y * a2.y; } -function distVec2(a, b) { - var dx = a.x - b.x; - var dy = a.y - b.y; - return math_sqrt$6(dx * dx + dy * dy); +function distVec2(a2, b2) { + var dx = a2.x - b2.x; + var dy = a2.y - b2.y; + return math_sqrt$6(dx * dx + dy * dy); } -function distSqrVec2(a, b) { - var dx = a.x - b.x; - var dy = a.y - b.y; - return dx * dx + dy * dy; +function distSqrVec2(a2, b2) { + var dx = a2.x - b2.x; + var dy = a2.y - b2.y; + return dx * dx + dy * dy; } -function setRotAngle(out, a) { - out.c = math_cos$2(a); - out.s = math_sin$2(a); - return out; +function setRotAngle(out, a2) { + out.c = math_cos$2(a2); + out.s = math_sin$2(a2); + return out; } -function rotVec2(out, q, v) { - out.x = q.c * v.x - q.s * v.y; - out.y = q.s * v.x + q.c * v.y; - return out; +function rotVec2(out, q, v3) { + out.x = q.c * v3.x - q.s * v3.y; + out.y = q.s * v3.x + q.c * v3.y; + return out; } -function derotVec2(out, q, v) { - var x = q.c * v.x + q.s * v.y; - var y = -q.s * v.x + q.c * v.y; - out.x = x; - out.y = y; - return out; +function derotVec2(out, q, v3) { + var x2 = q.c * v3.x + q.s * v3.y; + var y = -q.s * v3.x + q.c * v3.y; + out.x = x2; + out.y = y; + return out; } -function rerotVec2(out, before, after, v) { - var x0 = before.c * v.x + before.s * v.y; - var y0 = -before.s * v.x + before.c * v.y; - var x = after.c * x0 - after.s * y0; - var y = after.s * x0 + after.c * y0; - out.x = x; - out.y = y; - return out; +function rerotVec2(out, before, after, v3) { + var x0 = before.c * v3.x + before.s * v3.y; + var y0 = -before.s * v3.x + before.c * v3.y; + var x2 = after.c * x0 - after.s * y0; + var y = after.s * x0 + after.c * y0; + out.x = x2; + out.y = y; + return out; } -function transform(x, y, a) { - return { p: vec2(x, y), q: rotation(a) }; +function transform(x2, y, a2) { + return { p: vec2(x2, y), q: rotation(a2) }; } -function copyTransform(out, transform) { - out.p.x = transform.p.x; - out.p.y = transform.p.y; - out.q.s = transform.q.s; - out.q.c = transform.q.c; - return out; +function copyTransform(out, transform2) { + out.p.x = transform2.p.x; + out.p.y = transform2.p.y; + out.q.s = transform2.q.s; + out.q.c = transform2.q.c; + return out; } -function transformVec2(out, xf, v) { - var x = xf.q.c * v.x - xf.q.s * v.y + xf.p.x; - var y = xf.q.s * v.x + xf.q.c * v.y + xf.p.y; - out.x = x; - out.y = y; - return out; +function transformVec2(out, xf2, v3) { + var x2 = xf2.q.c * v3.x - xf2.q.s * v3.y + xf2.p.x; + var y = xf2.q.s * v3.x + xf2.q.c * v3.y + xf2.p.y; + out.x = x2; + out.y = y; + return out; } -function detransformVec2(out, xf, v) { - var px = v.x - xf.p.x; - var py = v.y - xf.p.y; - var x = (xf.q.c * px + xf.q.s * py); - var y = (-xf.q.s * px + xf.q.c * py); - out.x = x; - out.y = y; - return out; +function detransformVec2(out, xf2, v3) { + var px = v3.x - xf2.p.x; + var py = v3.y - xf2.p.y; + var x2 = xf2.q.c * px + xf2.q.s * py; + var y = -xf2.q.s * px + xf2.q.c * py; + out.x = x2; + out.y = y; + return out; } -function retransformVec2(out, from, to, v) { - var x0 = from.q.c * v.x - from.q.s * v.y + from.p.x; - var y0 = from.q.s * v.x + from.q.c * v.y + from.p.y; - var px = x0 - to.p.x; - var py = y0 - to.p.y; - var x = to.q.c * px + to.q.s * py; - var y = -to.q.s * px + to.q.c * py; - out.x = x; - out.y = y; - return out; +function retransformVec2(out, from, to, v3) { + var x0 = from.q.c * v3.x - from.q.s * v3.y + from.p.x; + var y0 = from.q.s * v3.x + from.q.c * v3.y + from.p.y; + var px = x0 - to.p.x; + var py = y0 - to.p.y; + var x2 = to.q.c * px + to.q.s * py; + var y = -to.q.s * px + to.q.c * py; + out.x = x2; + out.y = y; + return out; } -function detransformTransform(out, a, b) { - var c = a.q.c * b.q.c + a.q.s * b.q.s; - var s = a.q.c * b.q.s - a.q.s * b.q.c; - var x = a.q.c * (b.p.x - a.p.x) + a.q.s * (b.p.y - a.p.y); - var y = -a.q.s * (b.p.x - a.p.x) + a.q.c * (b.p.y - a.p.y); - out.q.c = c; - out.q.s = s; - out.p.x = x; - out.p.y = y; - return out; +function detransformTransform(out, a2, b2) { + var c2 = a2.q.c * b2.q.c + a2.q.s * b2.q.s; + var s2 = a2.q.c * b2.q.s - a2.q.s * b2.q.c; + var x2 = a2.q.c * (b2.p.x - a2.p.x) + a2.q.s * (b2.p.y - a2.p.y); + var y = -a2.q.s * (b2.p.x - a2.p.x) + a2.q.c * (b2.p.y - a2.p.y); + out.q.c = c2; + out.q.s = s2; + out.p.x = x2; + out.p.y = y; + return out; } - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_sin$1 = Math.sin; -/** @internal */ var math_cos$1 = Math.cos; -/** @internal */ var math_atan2$2 = Math.atan2; -var Rot = /** @class */ (function () { - /** Initialize from an angle in radians. */ - function Rot(angle) { - if (!(this instanceof Rot)) { - return new Rot(angle); - } - if (typeof angle === "number") { - this.setAngle(angle); - } - else if (typeof angle === "object") { - this.setRot(angle); - } - else { - this.setIdentity(); - } +var math_sin$1 = Math.sin; +var math_cos$1 = Math.cos; +var math_atan2$2 = Math.atan2; +var Rot = ( + /** @class */ + function() { + function Rot2(angle) { + if (!(this instanceof Rot2)) { + return new Rot2(angle); + } + if (typeof angle === "number") { + this.setAngle(angle); + } else if (typeof angle === "object") { + this.setRot(angle); + } else { + this.setIdentity(); + } } - /** @hidden */ - Rot.neo = function (angle) { - var obj = Object.create(Rot.prototype); - obj.setAngle(angle); - return obj; - }; - Rot.clone = function (rot) { - var obj = Object.create(Rot.prototype); - obj.s = rot.s; - obj.c = rot.c; - return obj; - }; - Rot.identity = function () { - var obj = Object.create(Rot.prototype); - obj.s = 0.0; - obj.c = 1.0; - return obj; - }; - Rot.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Number.isFinite(obj.s) && Number.isFinite(obj.c); + Rot2.neo = function(angle) { + var obj = Object.create(Rot2.prototype); + obj.setAngle(angle); + return obj; }; - Rot.assert = function (o) { + Rot2.clone = function(rot) { + var obj = Object.create(Rot2.prototype); + obj.s = rot.s; + obj.c = rot.c; + return obj; }; - /** Set to the identity rotation. */ - Rot.prototype.setIdentity = function () { - this.s = 0.0; - this.c = 1.0; + Rot2.identity = function() { + var obj = Object.create(Rot2.prototype); + obj.s = 0; + obj.c = 1; + return obj; }; - Rot.prototype.set = function (angle) { - if (typeof angle === "object") { - this.s = angle.s; - this.c = angle.c; - } - else { - // TODO_ERIN optimize - this.s = math_sin$1(angle); - this.c = math_cos$1(angle); - } + Rot2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Number.isFinite(obj.s) && Number.isFinite(obj.c); + }; + Rot2.assert = function(o) { }; - Rot.prototype.setRot = function (angle) { + Rot2.prototype.setIdentity = function() { + this.s = 0; + this.c = 1; + }; + Rot2.prototype.set = function(angle) { + if (typeof angle === "object") { this.s = angle.s; this.c = angle.c; - }; - /** Set using an angle in radians. */ - Rot.prototype.setAngle = function (angle) { - // TODO_ERIN optimize + } else { this.s = math_sin$1(angle); this.c = math_cos$1(angle); + } + }; + Rot2.prototype.setRot = function(angle) { + this.s = angle.s; + this.c = angle.c; + }; + Rot2.prototype.setAngle = function(angle) { + this.s = math_sin$1(angle); + this.c = math_cos$1(angle); }; - /** Get the angle in radians. */ - Rot.prototype.getAngle = function () { - return math_atan2$2(this.s, this.c); - }; - /** Get the x-axis. */ - Rot.prototype.getXAxis = function () { - return Vec2.neo(this.c, this.s); - }; - /** Get the y-axis. */ - Rot.prototype.getYAxis = function () { - return Vec2.neo(-this.s, this.c); - }; - Rot.mul = function (rot, m) { - if ("c" in m && "s" in m) { - // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc] - // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc] - // s = qs * rc + qc * rs - // c = qc * rc - qs * rs - var qr = Rot.identity(); - qr.s = rot.s * m.c + rot.c * m.s; - qr.c = rot.c * m.c - rot.s * m.s; - return qr; - } - else if ("x" in m && "y" in m) { - return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y); - } - }; - /** Multiply two rotations: q * r */ - Rot.mulRot = function (rot, m) { - // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc] - // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc] - // s = qs * rc + qc * rs - // c = qc * rc - qs * rs - var qr = Rot.identity(); + Rot2.prototype.getAngle = function() { + return math_atan2$2(this.s, this.c); + }; + Rot2.prototype.getXAxis = function() { + return Vec2.neo(this.c, this.s); + }; + Rot2.prototype.getYAxis = function() { + return Vec2.neo(-this.s, this.c); + }; + Rot2.mul = function(rot, m) { + if ("c" in m && "s" in m) { + var qr = Rot2.identity(); qr.s = rot.s * m.c + rot.c * m.s; qr.c = rot.c * m.c - rot.s * m.s; return qr; - }; - /** Rotate a vector */ - Rot.mulVec2 = function (rot, m) { + } else if ("x" in m && "y" in m) { return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y); + } + }; + Rot2.mulRot = function(rot, m) { + var qr = Rot2.identity(); + qr.s = rot.s * m.c + rot.c * m.s; + qr.c = rot.c * m.c - rot.s * m.s; + return qr; + }; + Rot2.mulVec2 = function(rot, m) { + return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y); + }; + Rot2.mulSub = function(rot, v3, w) { + var x2 = rot.c * (v3.x - w.x) - rot.s * (v3.y - w.y); + var y = rot.s * (v3.x - w.x) + rot.c * (v3.y - w.y); + return Vec2.neo(x2, y); }; - Rot.mulSub = function (rot, v, w) { - var x = rot.c * (v.x - w.x) - rot.s * (v.y - w.y); - var y = rot.s * (v.x - w.x) + rot.c * (v.y - w.y); - return Vec2.neo(x, y); - }; - Rot.mulT = function (rot, m) { - if ("c" in m && "s" in m) { - // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc] - // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc] - // s = qc * rs - qs * rc - // c = qc * rc + qs * rs - var qr = Rot.identity(); - qr.s = rot.c * m.s - rot.s * m.c; - qr.c = rot.c * m.c + rot.s * m.s; - return qr; - } - else if ("x" in m && "y" in m) { - return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y); - } - }; - /** Transpose multiply two rotations: qT * r */ - Rot.mulTRot = function (rot, m) { - // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc] - // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc] - // s = qc * rs - qs * rc - // c = qc * rc + qs * rs - var qr = Rot.identity(); + Rot2.mulT = function(rot, m) { + if ("c" in m && "s" in m) { + var qr = Rot2.identity(); qr.s = rot.c * m.s - rot.s * m.c; qr.c = rot.c * m.c + rot.s * m.s; return qr; - }; - /** Inverse rotate a vector */ - Rot.mulTVec2 = function (rot, m) { + } else if ("x" in m && "y" in m) { return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y); + } }; - return Rot; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_atan2$1 = Math.atan2; -/** @internal */ var math_PI$6 = Math.PI; -/** @internal */ var temp$7 = vec2(0, 0); -/** - * This describes the motion of a body/shape for TOI computation. Shapes are - * defined with respect to the body origin, which may not coincide with the - * center of mass. However, to support dynamics we must interpolate the center - * of mass position. - */ -var Sweep = /** @class */ (function () { - function Sweep() { - /** Local center of mass position */ - this.localCenter = Vec2.zero(); - /** World center position */ - this.c = Vec2.zero(); - /** World angle */ - this.a = 0; - /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */ - this.alpha0 = 0; - this.c0 = Vec2.zero(); - this.a0 = 0; - } - /** @internal */ - Sweep.prototype.recycle = function () { - zeroVec2(this.localCenter); - zeroVec2(this.c); - this.a = 0; - this.alpha0 = 0; - zeroVec2(this.c0); - this.a0 = 0; - }; - Sweep.prototype.setTransform = function (xf) { - transformVec2(temp$7, xf, this.localCenter); - copyVec2(this.c, temp$7); - copyVec2(this.c0, temp$7); - this.a = this.a0 = math_atan2$1(xf.q.s, xf.q.c); - }; - Sweep.prototype.setLocalCenter = function (localCenter, xf) { - copyVec2(this.localCenter, localCenter); - transformVec2(temp$7, xf, this.localCenter); - copyVec2(this.c, temp$7); - copyVec2(this.c0, temp$7); - }; - /** - * Get the interpolated transform at a specific time. - * - * @param xf - * @param beta A factor in [0,1], where 0 indicates alpha0 - */ - Sweep.prototype.getTransform = function (xf, beta) { - if (beta === void 0) { beta = 0; } - setRotAngle(xf.q, (1.0 - beta) * this.a0 + beta * this.a); - combine2Vec2(xf.p, (1.0 - beta), this.c0, beta, this.c); - // shift to origin - minusVec2(xf.p, rotVec2(temp$7, xf.q, this.localCenter)); - }; - /** - * Advance the sweep forward, yielding a new initial state. - * - * @param alpha The new initial time - */ - Sweep.prototype.advance = function (alpha) { - var beta = (alpha - this.alpha0) / (1.0 - this.alpha0); - combine2Vec2(this.c0, beta, this.c, 1 - beta, this.c0); - this.a0 = beta * this.a + (1 - beta) * this.a0; - this.alpha0 = alpha; - }; - Sweep.prototype.forward = function () { - this.a0 = this.a; - copyVec2(this.c0, this.c); - }; - /** - * normalize the angles in radians to be between -pi and pi. - */ - Sweep.prototype.normalize = function () { - var a0 = mod(this.a0, -math_PI$6, +math_PI$6); - this.a -= this.a0 - a0; - this.a0 = a0; - }; - Sweep.prototype.set = function (that) { - copyVec2(this.localCenter, that.localCenter); - copyVec2(this.c, that.c); - this.a = that.a; - this.alpha0 = that.alpha0; - copyVec2(this.c0, that.c0); - this.a0 = that.a0; - }; - return Sweep; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** - * A transform contains translation and rotation. It is used to represent the - * position and orientation of rigid frames. Initialize using a position vector - * and a rotation. - */ -var Transform = /** @class */ (function () { - function Transform(position, rotation) { - if (!(this instanceof Transform)) { - return new Transform(position, rotation); - } - this.p = Vec2.zero(); - this.q = Rot.identity(); - if (typeof position !== "undefined") { - this.p.setVec2(position); - } - if (typeof rotation !== "undefined") { - this.q.setAngle(rotation); - } - } - Transform.clone = function (xf) { - var obj = Object.create(Transform.prototype); - obj.p = Vec2.clone(xf.p); - obj.q = Rot.clone(xf.q); - return obj; - }; - /** @hidden */ - Transform.neo = function (position, rotation) { - var obj = Object.create(Transform.prototype); - obj.p = Vec2.clone(position); - obj.q = Rot.clone(rotation); - return obj; - }; - Transform.identity = function () { - var obj = Object.create(Transform.prototype); - obj.p = Vec2.zero(); - obj.q = Rot.identity(); - return obj; - }; - /** Set this to the identity transform */ - Transform.prototype.setIdentity = function () { - this.p.setZero(); - this.q.setIdentity(); - }; - Transform.prototype.set = function (a, b) { - if (typeof b === "undefined") { - this.p.set(a.p); - this.q.set(a.q); - } - else { - this.p.set(a); - this.q.set(b); - } - }; - /** Set position and angle */ - Transform.prototype.setNum = function (position, rotation) { + Rot2.mulTRot = function(rot, m) { + var qr = Rot2.identity(); + qr.s = rot.c * m.s - rot.s * m.c; + qr.c = rot.c * m.c + rot.s * m.s; + return qr; + }; + Rot2.mulTVec2 = function(rot, m) { + return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y); + }; + return Rot2; + }() +); +var math_atan2$1 = Math.atan2; +var math_PI$6 = Math.PI; +var temp$7 = vec2(0, 0); +var Sweep = ( + /** @class */ + function() { + function Sweep2() { + this.localCenter = Vec2.zero(); + this.c = Vec2.zero(); + this.a = 0; + this.alpha0 = 0; + this.c0 = Vec2.zero(); + this.a0 = 0; + } + Sweep2.prototype.recycle = function() { + zeroVec2(this.localCenter); + zeroVec2(this.c); + this.a = 0; + this.alpha0 = 0; + zeroVec2(this.c0); + this.a0 = 0; + }; + Sweep2.prototype.setTransform = function(xf2) { + transformVec2(temp$7, xf2, this.localCenter); + copyVec2(this.c, temp$7); + copyVec2(this.c0, temp$7); + this.a = this.a0 = math_atan2$1(xf2.q.s, xf2.q.c); + }; + Sweep2.prototype.setLocalCenter = function(localCenter2, xf2) { + copyVec2(this.localCenter, localCenter2); + transformVec2(temp$7, xf2, this.localCenter); + copyVec2(this.c, temp$7); + copyVec2(this.c0, temp$7); + }; + Sweep2.prototype.getTransform = function(xf2, beta) { + if (beta === void 0) { + beta = 0; + } + setRotAngle(xf2.q, (1 - beta) * this.a0 + beta * this.a); + combine2Vec2(xf2.p, 1 - beta, this.c0, beta, this.c); + minusVec2(xf2.p, rotVec2(temp$7, xf2.q, this.localCenter)); + }; + Sweep2.prototype.advance = function(alpha) { + var beta = (alpha - this.alpha0) / (1 - this.alpha0); + combine2Vec2(this.c0, beta, this.c, 1 - beta, this.c0); + this.a0 = beta * this.a + (1 - beta) * this.a0; + this.alpha0 = alpha; + }; + Sweep2.prototype.forward = function() { + this.a0 = this.a; + copyVec2(this.c0, this.c); + }; + Sweep2.prototype.normalize = function() { + var a0 = mod(this.a0, -math_PI$6, +math_PI$6); + this.a -= this.a0 - a0; + this.a0 = a0; + }; + Sweep2.prototype.set = function(that) { + copyVec2(this.localCenter, that.localCenter); + copyVec2(this.c, that.c); + this.a = that.a; + this.alpha0 = that.alpha0; + copyVec2(this.c0, that.c0); + this.a0 = that.a0; + }; + return Sweep2; + }() +); +var Transform = ( + /** @class */ + function() { + function Transform2(position, rotation2) { + if (!(this instanceof Transform2)) { + return new Transform2(position, rotation2); + } + this.p = Vec2.zero(); + this.q = Rot.identity(); + if (typeof position !== "undefined") { this.p.setVec2(position); - this.q.setAngle(rotation); + } + if (typeof rotation2 !== "undefined") { + this.q.setAngle(rotation2); + } + } + Transform2.clone = function(xf2) { + var obj = Object.create(Transform2.prototype); + obj.p = Vec2.clone(xf2.p); + obj.q = Rot.clone(xf2.q); + return obj; }; - Transform.prototype.setTransform = function (xf) { - this.p.setVec2(xf.p); - this.q.setRot(xf.q); + Transform2.neo = function(position, rotation2) { + var obj = Object.create(Transform2.prototype); + obj.p = Vec2.clone(position); + obj.q = Rot.clone(rotation2); + return obj; }; - Transform.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec2.isValid(obj.p) && Rot.isValid(obj.q); + Transform2.identity = function() { + var obj = Object.create(Transform2.prototype); + obj.p = Vec2.zero(); + obj.q = Rot.identity(); + return obj; }; - Transform.assert = function (o) { + Transform2.prototype.setIdentity = function() { + this.p.setZero(); + this.q.setIdentity(); }; - // static mul(a: Transform, b: Vec2Value[]): Vec2[]; - // static mul(a: Transform, b: Transform[]): Transform[]; - Transform.mul = function (a, b) { - if (Array.isArray(b)) { - var arr = []; - for (var i = 0; i < b.length; i++) { - arr[i] = Transform.mul(a, b[i]); - } - return arr; - } - else if ("x" in b && "y" in b) { - return Transform.mulVec2(a, b); - } - else if ("p" in b && "q" in b) { - return Transform.mulXf(a, b); - } + Transform2.prototype.set = function(a2, b2) { + if (typeof b2 === "undefined") { + this.p.set(a2.p); + this.q.set(a2.q); + } else { + this.p.set(a2); + this.q.set(b2); + } + }; + Transform2.prototype.setNum = function(position, rotation2) { + this.p.setVec2(position); + this.q.setAngle(rotation2); + }; + Transform2.prototype.setTransform = function(xf2) { + this.p.setVec2(xf2.p); + this.q.setRot(xf2.q); + }; + Transform2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec2.isValid(obj.p) && Rot.isValid(obj.q); + }; + Transform2.assert = function(o) { }; - Transform.mulAll = function (a, b) { + Transform2.mul = function(a2, b2) { + if (Array.isArray(b2)) { var arr = []; - for (var i = 0; i < b.length; i++) { - arr[i] = Transform.mul(a, b[i]); + for (var i = 0; i < b2.length; i++) { + arr[i] = Transform2.mul(a2, b2[i]); } return arr; + } else if ("x" in b2 && "y" in b2) { + return Transform2.mulVec2(a2, b2); + } else if ("p" in b2 && "q" in b2) { + return Transform2.mulXf(a2, b2); + } }; - /** @hidden @deprecated */ - Transform.mulFn = function (a) { - return function (b) { - return Transform.mul(a, b); - }; + Transform2.mulAll = function(a2, b2) { + var arr = []; + for (var i = 0; i < b2.length; i++) { + arr[i] = Transform2.mul(a2, b2[i]); + } + return arr; }; - Transform.mulVec2 = function (a, b) { - var x = (a.q.c * b.x - a.q.s * b.y) + a.p.x; - var y = (a.q.s * b.x + a.q.c * b.y) + a.p.y; - return Vec2.neo(x, y); - }; - Transform.mulXf = function (a, b) { - // v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p - // = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p - var xf = Transform.identity(); - xf.q = Rot.mulRot(a.q, b.q); - xf.p = Vec2.add(Rot.mulVec2(a.q, b.p), a.p); - return xf; - }; - Transform.mulT = function (a, b) { - if ("x" in b && "y" in b) { - return Transform.mulTVec2(a, b); - } - else if ("p" in b && "q" in b) { - return Transform.mulTXf(a, b); - } - }; - Transform.mulTVec2 = function (a, b) { - var px = b.x - a.p.x; - var py = b.y - a.p.y; - var x = (a.q.c * px + a.q.s * py); - var y = (-a.q.s * px + a.q.c * py); - return Vec2.neo(x, y); - }; - Transform.mulTXf = function (a, b) { - // v2 = A.q' * (B.q * v1 + B.p - A.p) - // = A.q' * B.q * v1 + A.q' * (B.p - A.p) - var xf = Transform.identity(); - xf.q.setRot(Rot.mulTRot(a.q, b.q)); - xf.p.setVec2(Rot.mulTVec2(a.q, Vec2.sub(b.p, a.p))); - return xf; - }; - return Transform; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -var Velocity = /** @class */ (function () { - function Velocity() { - /** linear */ - this.v = Vec2.zero(); - /** angular */ - this.w = 0; - } - return Velocity; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_sin = Math.sin; -/** @internal */ var math_cos = Math.cos; -var Position = /** @class */ (function () { - function Position() { - /** location */ - this.c = Vec2.zero(); - /** angle */ - this.a = 0; + Transform2.mulFn = function(a2) { + return function(b2) { + return Transform2.mul(a2, b2); + }; + }; + Transform2.mulVec2 = function(a2, b2) { + var x2 = a2.q.c * b2.x - a2.q.s * b2.y + a2.p.x; + var y = a2.q.s * b2.x + a2.q.c * b2.y + a2.p.y; + return Vec2.neo(x2, y); + }; + Transform2.mulXf = function(a2, b2) { + var xf2 = Transform2.identity(); + xf2.q = Rot.mulRot(a2.q, b2.q); + xf2.p = Vec2.add(Rot.mulVec2(a2.q, b2.p), a2.p); + return xf2; + }; + Transform2.mulT = function(a2, b2) { + if ("x" in b2 && "y" in b2) { + return Transform2.mulTVec2(a2, b2); + } else if ("p" in b2 && "q" in b2) { + return Transform2.mulTXf(a2, b2); + } + }; + Transform2.mulTVec2 = function(a2, b2) { + var px = b2.x - a2.p.x; + var py = b2.y - a2.p.y; + var x2 = a2.q.c * px + a2.q.s * py; + var y = -a2.q.s * px + a2.q.c * py; + return Vec2.neo(x2, y); + }; + Transform2.mulTXf = function(a2, b2) { + var xf2 = Transform2.identity(); + xf2.q.setRot(Rot.mulTRot(a2.q, b2.q)); + xf2.p.setVec2(Rot.mulTVec2(a2.q, Vec2.sub(b2.p, a2.p))); + return xf2; + }; + return Transform2; + }() +); +var Velocity = ( + /** @class */ + /* @__PURE__ */ function() { + function Velocity2() { + this.v = Vec2.zero(); + this.w = 0; } - // todo: cache sin/cos - Position.prototype.getTransform = function (xf, p) { - // xf.q = rotation(this.a); - // xf.p = this.c - xf.q * p - xf.q.c = math_cos(this.a); - xf.q.s = math_sin(this.a); - xf.p.x = this.c.x - (xf.q.c * p.x - xf.q.s * p.y); - xf.p.y = this.c.y - (xf.q.s * p.x + xf.q.c * p.y); - return xf; - }; - return Position; -}()); -function getTransform(xf, p, c, a) { - // xf.q = rotation(a); - // xf.p = this.c - xf.q * p - xf.q.c = math_cos(a); - xf.q.s = math_sin(a); - xf.p.x = c.x - (xf.q.c * p.x - xf.q.s * p.y); - xf.p.y = c.y - (xf.q.s * p.x + xf.q.c * p.y); - return xf; + return Velocity2; + }() +); +var math_sin = Math.sin; +var math_cos = Math.cos; +var Position = ( + /** @class */ + function() { + function Position2() { + this.c = Vec2.zero(); + this.a = 0; + } + Position2.prototype.getTransform = function(xf2, p) { + xf2.q.c = math_cos(this.a); + xf2.q.s = math_sin(this.a); + xf2.p.x = this.c.x - (xf2.q.c * p.x - xf2.q.s * p.y); + xf2.p.y = this.c.y - (xf2.q.s * p.x + xf2.q.c * p.y); + return xf2; + }; + return Position2; + }() +); +function getTransform(xf2, p, c2, a2) { + xf2.q.c = math_cos(a2); + xf2.q.s = math_sin(a2); + xf2.p.x = c2.x - (xf2.q.c * p.x - xf2.q.s * p.y); + xf2.p.y = c2.y - (xf2.q.s * p.x + xf2.q.c * p.y); + return xf2; } - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -// todo make shape an interface -/** - * A shape is used for collision detection. You can create a shape however you - * like. Shapes used for simulation in World are created automatically when a - * Fixture is created. Shapes may encapsulate one or more child shapes. - */ -var Shape = /** @class */ (function () { - function Shape() { - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; +var Shape = ( + /** @class */ + function() { + function Shape2() { + this.style = {}; + this.appData = {}; } - Shape.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return typeof obj.m_type === "string" && typeof obj.m_radius === "number"; + Shape2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return typeof obj.m_type === "string" && typeof obj.m_radius === "number"; }; - return Shape; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var synchronize_aabb1 = new AABB(); -/** @internal */ var synchronize_aabb2 = new AABB(); -/** @internal */ var displacement = vec2(0, 0); -/** @internal */ var FixtureDefDefault = { - userData: null, - friction: 0.2, - restitution: 0.0, - density: 0.0, - isSensor: false, - filterGroupIndex: 0, - filterCategoryBits: 0x0001, - filterMaskBits: 0xFFFF + return Shape2; + }() +); +var synchronize_aabb1 = new AABB(); +var synchronize_aabb2 = new AABB(); +var displacement = vec2(0, 0); +var FixtureDefDefault = { + userData: null, + friction: 0.2, + restitution: 0, + density: 0, + isSensor: false, + filterGroupIndex: 0, + filterCategoryBits: 1, + filterMaskBits: 65535 }; -/** - * This proxy is used internally to connect shape children to the broad-phase. - */ -var FixtureProxy = /** @class */ (function () { - function FixtureProxy(fixture, childIndex) { - this.aabb = new AABB(); - this.fixture = fixture; - this.childIndex = childIndex; - this.proxyId; - } - return FixtureProxy; -}()); -/** - * A fixture is used to attach a shape to a body for collision detection. A - * fixture inherits its transform from its parent. Fixtures hold additional - * non-geometric data such as friction, collision filters, etc. - * - * To create a new Fixture use {@link Body.createFixture}. - */ -var Fixture = /** @class */ (function () { - /** @internal */ - function Fixture(body, shape, def) { - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - if (shape.shape) { - def = shape; - shape = shape.shape; - } - else if (typeof def === "number") { - def = { density: def }; - } - def = options(def, FixtureDefDefault); - this.m_body = body; - this.m_friction = def.friction; - this.m_restitution = def.restitution; - this.m_density = def.density; - this.m_isSensor = def.isSensor; - this.m_filterGroupIndex = def.filterGroupIndex; - this.m_filterCategoryBits = def.filterCategoryBits; - this.m_filterMaskBits = def.filterMaskBits; - // TODO validate shape - this.m_shape = shape; // .clone(); - this.m_next = null; - this.m_proxies = []; - this.m_proxyCount = 0; - // fixture proxies are created here, - // but they are activate in when a fixture is added to body - var childCount = this.m_shape.getChildCount(); - for (var i = 0; i < childCount; ++i) { - this.m_proxies[i] = new FixtureProxy(this, i); - } - this.m_userData = def.userData; - } - /** @hidden Re-setup fixture. */ - Fixture.prototype._reset = function () { - var body = this.getBody(); - var broadPhase = body.m_world.m_broadPhase; - this.destroyProxies(broadPhase); - if (this.m_shape._reset) { - this.m_shape._reset(); - } - var childCount = this.m_shape.getChildCount(); - for (var i = 0; i < childCount; ++i) { - this.m_proxies[i] = new FixtureProxy(this, i); - } - this.createProxies(broadPhase, body.m_xf); - body.resetMassData(); - }; - /** @internal */ - Fixture.prototype._serialize = function () { - return { - friction: this.m_friction, - restitution: this.m_restitution, - density: this.m_density, - isSensor: this.m_isSensor, - filterGroupIndex: this.m_filterGroupIndex, - filterCategoryBits: this.m_filterCategoryBits, - filterMaskBits: this.m_filterMaskBits, - shape: this.m_shape, - }; +var FixtureProxy = ( + /** @class */ + /* @__PURE__ */ function() { + function FixtureProxy2(fixture, childIndex) { + this.aabb = new AABB(); + this.fixture = fixture; + this.childIndex = childIndex; + this.proxyId; + } + return FixtureProxy2; + }() +); +var Fixture = ( + /** @class */ + function() { + function Fixture2(body, shape, def) { + this.style = {}; + this.appData = {}; + if (shape.shape) { + def = shape; + shape = shape.shape; + } else if (typeof def === "number") { + def = { density: def }; + } + def = options(def, FixtureDefDefault); + this.m_body = body; + this.m_friction = def.friction; + this.m_restitution = def.restitution; + this.m_density = def.density; + this.m_isSensor = def.isSensor; + this.m_filterGroupIndex = def.filterGroupIndex; + this.m_filterCategoryBits = def.filterCategoryBits; + this.m_filterMaskBits = def.filterMaskBits; + this.m_shape = shape; + this.m_next = null; + this.m_proxies = []; + this.m_proxyCount = 0; + var childCount = this.m_shape.getChildCount(); + for (var i = 0; i < childCount; ++i) { + this.m_proxies[i] = new FixtureProxy(this, i); + } + this.m_userData = def.userData; + } + Fixture2.prototype._reset = function() { + var body = this.getBody(); + var broadPhase = body.m_world.m_broadPhase; + this.destroyProxies(broadPhase); + if (this.m_shape._reset) { + this.m_shape._reset(); + } + var childCount = this.m_shape.getChildCount(); + for (var i = 0; i < childCount; ++i) { + this.m_proxies[i] = new FixtureProxy(this, i); + } + this.createProxies(broadPhase, body.m_xf); + body.resetMassData(); + }; + Fixture2.prototype._serialize = function() { + return { + friction: this.m_friction, + restitution: this.m_restitution, + density: this.m_density, + isSensor: this.m_isSensor, + filterGroupIndex: this.m_filterGroupIndex, + filterCategoryBits: this.m_filterCategoryBits, + filterMaskBits: this.m_filterMaskBits, + shape: this.m_shape + }; }; - /** @internal */ - Fixture._deserialize = function (data, body, restore) { - var shape = restore(Shape, data.shape); - var fixture = shape && new Fixture(body, shape, data); - return fixture; - }; - /** - * Get the type of the child shape. You can use this to down cast to the - * concrete shape. - */ - Fixture.prototype.getType = function () { - return this.m_shape.m_type; - }; - /** - * Get the child shape. You can modify the child shape, however you should not - * change the number of vertices because this will crash some collision caching - * mechanisms. Manipulating the shape may lead to non-physical behavior. - */ - Fixture.prototype.getShape = function () { - return this.m_shape; - }; - /** - * A sensor shape collects contact information but never generates a collision - * response. - */ - Fixture.prototype.isSensor = function () { - return this.m_isSensor; - }; - /** - * Set if this fixture is a sensor. - */ - Fixture.prototype.setSensor = function (sensor) { - if (sensor != this.m_isSensor) { - this.m_body.setAwake(true); - this.m_isSensor = sensor; - } - }; - // /** - // * Get the contact filtering data. - // */ - // getFilterData() { - // return this.m_filter; - // } - /** - * Get the user data that was assigned in the fixture definition. Use this to - * store your application specific data. - */ - Fixture.prototype.getUserData = function () { - return this.m_userData; - }; - /** - * Set the user data. Use this to store your application specific data. - */ - Fixture.prototype.setUserData = function (data) { - this.m_userData = data; - }; - /** - * Get the parent body of this fixture. This is null if the fixture is not - * attached. - */ - Fixture.prototype.getBody = function () { - return this.m_body; - }; - /** - * Get the next fixture in the parent body's fixture list. - */ - Fixture.prototype.getNext = function () { - return this.m_next; - }; - /** - * Get the density of this fixture. - */ - Fixture.prototype.getDensity = function () { - return this.m_density; - }; - /** - * Set the density of this fixture. This will _not_ automatically adjust the - * mass of the body. You must call Body.resetMassData to update the body's mass. - */ - Fixture.prototype.setDensity = function (density) { - this.m_density = density; - }; - /** - * Get the coefficient of friction, usually in the range [0,1]. - */ - Fixture.prototype.getFriction = function () { - return this.m_friction; - }; - /** - * Set the coefficient of friction. This will not change the friction of - * existing contacts. - */ - Fixture.prototype.setFriction = function (friction) { - this.m_friction = friction; - }; - /** - * Get the coefficient of restitution. - */ - Fixture.prototype.getRestitution = function () { - return this.m_restitution; - }; - /** - * Set the coefficient of restitution. This will not change the restitution of - * existing contacts. - */ - Fixture.prototype.setRestitution = function (restitution) { - this.m_restitution = restitution; - }; - /** - * Test a point in world coordinates for containment in this fixture. - */ - Fixture.prototype.testPoint = function (p) { - return this.m_shape.testPoint(this.m_body.getTransform(), p); - }; - /** - * Cast a ray against this shape. - */ - Fixture.prototype.rayCast = function (output, input, childIndex) { - return this.m_shape.rayCast(output, input, this.m_body.getTransform(), childIndex); - }; - /** - * Get the mass data for this fixture. The mass data is based on the density and - * the shape. The rotational inertia is about the shape's origin. This operation - * may be expensive. - */ - Fixture.prototype.getMassData = function (massData) { - this.m_shape.computeMass(massData, this.m_density); - }; - /** - * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a - * more accurate AABB, compute it using the shape and the body transform. - */ - Fixture.prototype.getAABB = function (childIndex) { - return this.m_proxies[childIndex].aabb; - }; - /** - * These support body activation/deactivation. - */ - Fixture.prototype.createProxies = function (broadPhase, xf) { - // Create proxies in the broad-phase. - this.m_proxyCount = this.m_shape.getChildCount(); - for (var i = 0; i < this.m_proxyCount; ++i) { - var proxy = this.m_proxies[i]; - this.m_shape.computeAABB(proxy.aabb, xf, i); - proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy); - } - }; - Fixture.prototype.destroyProxies = function (broadPhase) { - // Destroy proxies in the broad-phase. - for (var i = 0; i < this.m_proxyCount; ++i) { - var proxy = this.m_proxies[i]; - broadPhase.destroyProxy(proxy.proxyId); - proxy.proxyId = null; - } - this.m_proxyCount = 0; - }; - /** - * Updates this fixture proxy in broad-phase (with combined AABB of current and - * next transformation). - */ - Fixture.prototype.synchronize = function (broadPhase, xf1, xf2) { - for (var i = 0; i < this.m_proxyCount; ++i) { - var proxy = this.m_proxies[i]; - // Compute an AABB that covers the swept shape (may miss some rotation - // effect). - this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex); - this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex); - proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2); - subVec2(displacement, xf2.p, xf1.p); - broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement); - } - }; - /** - * Set the contact filtering data. This will not update contacts until the next - * time step when either parent body is active and awake. This automatically - * calls refilter. - */ - Fixture.prototype.setFilterData = function (filter) { - this.m_filterGroupIndex = filter.groupIndex; - this.m_filterCategoryBits = filter.categoryBits; - this.m_filterMaskBits = filter.maskBits; - this.refilter(); - }; - Fixture.prototype.getFilterGroupIndex = function () { - return this.m_filterGroupIndex; - }; - Fixture.prototype.setFilterGroupIndex = function (groupIndex) { - this.m_filterGroupIndex = groupIndex; - this.refilter(); - }; - Fixture.prototype.getFilterCategoryBits = function () { - return this.m_filterCategoryBits; - }; - Fixture.prototype.setFilterCategoryBits = function (categoryBits) { - this.m_filterCategoryBits = categoryBits; - this.refilter(); - }; - Fixture.prototype.getFilterMaskBits = function () { - return this.m_filterMaskBits; - }; - Fixture.prototype.setFilterMaskBits = function (maskBits) { - this.m_filterMaskBits = maskBits; - this.refilter(); - }; - /** - * Call this if you want to establish collision that was previously disabled by - * ContactFilter. - */ - Fixture.prototype.refilter = function () { - if (this.m_body == null) { - return; - } - // Flag associated contacts for filtering. - var edge = this.m_body.getContactList(); - while (edge) { - var contact = edge.contact; - var fixtureA = contact.getFixtureA(); - var fixtureB = contact.getFixtureB(); - if (fixtureA == this || fixtureB == this) { - contact.flagForFiltering(); - } - edge = edge.next; - } - var world = this.m_body.getWorld(); - if (world == null) { - return; + Fixture2._deserialize = function(data, body, restore) { + var shape = restore(Shape, data.shape); + var fixture = shape && new Fixture2(body, shape, data); + return fixture; + }; + Fixture2.prototype.getType = function() { + return this.m_shape.m_type; + }; + Fixture2.prototype.getShape = function() { + return this.m_shape; + }; + Fixture2.prototype.isSensor = function() { + return this.m_isSensor; + }; + Fixture2.prototype.setSensor = function(sensor) { + if (sensor != this.m_isSensor) { + this.m_body.setAwake(true); + this.m_isSensor = sensor; + } + }; + Fixture2.prototype.getUserData = function() { + return this.m_userData; + }; + Fixture2.prototype.setUserData = function(data) { + this.m_userData = data; + }; + Fixture2.prototype.getBody = function() { + return this.m_body; + }; + Fixture2.prototype.getNext = function() { + return this.m_next; + }; + Fixture2.prototype.getDensity = function() { + return this.m_density; + }; + Fixture2.prototype.setDensity = function(density) { + this.m_density = density; + }; + Fixture2.prototype.getFriction = function() { + return this.m_friction; + }; + Fixture2.prototype.setFriction = function(friction) { + this.m_friction = friction; + }; + Fixture2.prototype.getRestitution = function() { + return this.m_restitution; + }; + Fixture2.prototype.setRestitution = function(restitution) { + this.m_restitution = restitution; + }; + Fixture2.prototype.testPoint = function(p) { + return this.m_shape.testPoint(this.m_body.getTransform(), p); + }; + Fixture2.prototype.rayCast = function(output2, input2, childIndex) { + return this.m_shape.rayCast(output2, input2, this.m_body.getTransform(), childIndex); + }; + Fixture2.prototype.getMassData = function(massData) { + this.m_shape.computeMass(massData, this.m_density); + }; + Fixture2.prototype.getAABB = function(childIndex) { + return this.m_proxies[childIndex].aabb; + }; + Fixture2.prototype.createProxies = function(broadPhase, xf2) { + this.m_proxyCount = this.m_shape.getChildCount(); + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i]; + this.m_shape.computeAABB(proxy.aabb, xf2, i); + proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy); + } + }; + Fixture2.prototype.destroyProxies = function(broadPhase) { + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i]; + broadPhase.destroyProxy(proxy.proxyId); + proxy.proxyId = null; + } + this.m_proxyCount = 0; + }; + Fixture2.prototype.synchronize = function(broadPhase, xf1, xf2) { + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i]; + this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex); + this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex); + proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2); + subVec2(displacement, xf2.p, xf1.p); + broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement); + } + }; + Fixture2.prototype.setFilterData = function(filter) { + this.m_filterGroupIndex = filter.groupIndex; + this.m_filterCategoryBits = filter.categoryBits; + this.m_filterMaskBits = filter.maskBits; + this.refilter(); + }; + Fixture2.prototype.getFilterGroupIndex = function() { + return this.m_filterGroupIndex; + }; + Fixture2.prototype.setFilterGroupIndex = function(groupIndex) { + this.m_filterGroupIndex = groupIndex; + this.refilter(); + }; + Fixture2.prototype.getFilterCategoryBits = function() { + return this.m_filterCategoryBits; + }; + Fixture2.prototype.setFilterCategoryBits = function(categoryBits) { + this.m_filterCategoryBits = categoryBits; + this.refilter(); + }; + Fixture2.prototype.getFilterMaskBits = function() { + return this.m_filterMaskBits; + }; + Fixture2.prototype.setFilterMaskBits = function(maskBits) { + this.m_filterMaskBits = maskBits; + this.refilter(); + }; + Fixture2.prototype.refilter = function() { + if (this.m_body == null) { + return; + } + var edge = this.m_body.getContactList(); + while (edge) { + var contact = edge.contact; + var fixtureA = contact.getFixtureA(); + var fixtureB = contact.getFixtureB(); + if (fixtureA == this || fixtureB == this) { + contact.flagForFiltering(); } - // Touch each proxy so that new pairs may be created - var broadPhase = world.m_broadPhase; - for (var i = 0; i < this.m_proxyCount; ++i) { - broadPhase.touchProxy(this.m_proxies[i].proxyId); - } - }; - /** - * Implement this method to provide collision filtering, if you want finer - * control over contact creation. - * - * Return true if contact calculations should be performed between these two - * fixtures. - * - * Warning: for performance reasons this is only called when the AABBs begin to - * overlap. - */ - Fixture.prototype.shouldCollide = function (that) { - if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) { - return that.m_filterGroupIndex > 0; - } - var collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0; - var collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0; - var collide = collideA && collideB; - return collide; - }; - return Fixture; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var STATIC = "static"; -/** @internal */ var KINEMATIC = "kinematic"; -/** @internal */ var DYNAMIC = "dynamic"; -/** @internal */ var oldCenter = vec2(0, 0); -/** @internal */ var localCenter = vec2(0, 0); -/** @internal */ var shift = vec2(0, 0); -/** @internal */ var temp$6 = vec2(0, 0); -/** @internal */ var xf$2 = transform(0, 0, 0); -/** @internal */ var BodyDefDefault = { - type: STATIC, - position: Vec2.zero(), - angle: 0.0, - linearVelocity: Vec2.zero(), - angularVelocity: 0.0, - linearDamping: 0.0, - angularDamping: 0.0, - fixedRotation: false, - bullet: false, - gravityScale: 1.0, - allowSleep: true, - awake: true, - active: true, - userData: null + edge = edge.next; + } + var world = this.m_body.getWorld(); + if (world == null) { + return; + } + var broadPhase = world.m_broadPhase; + for (var i = 0; i < this.m_proxyCount; ++i) { + broadPhase.touchProxy(this.m_proxies[i].proxyId); + } + }; + Fixture2.prototype.shouldCollide = function(that) { + if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) { + return that.m_filterGroupIndex > 0; + } + var collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0; + var collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0; + var collide = collideA && collideB; + return collide; + }; + return Fixture2; + }() +); +var STATIC = "static"; +var KINEMATIC = "kinematic"; +var DYNAMIC = "dynamic"; +var oldCenter = vec2(0, 0); +var localCenter = vec2(0, 0); +var shift = vec2(0, 0); +var temp$6 = vec2(0, 0); +var xf$2 = transform(0, 0, 0); +var BodyDefDefault = { + type: STATIC, + position: Vec2.zero(), + angle: 0, + linearVelocity: Vec2.zero(), + angularVelocity: 0, + linearDamping: 0, + angularDamping: 0, + fixedRotation: false, + bullet: false, + gravityScale: 1, + allowSleep: true, + awake: true, + active: true, + userData: null }; -/** - * A rigid body composed of one or more fixtures. - * - * To create a new Body use {@link World.createBody}. - */ -var Body = /** @class */ (function () { - /** @internal */ - function Body(world, def) { - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - def = options(def, BodyDefDefault); - this.m_world = world; - this.m_awakeFlag = def.awake; - this.m_autoSleepFlag = def.allowSleep; - this.m_bulletFlag = def.bullet; - this.m_fixedRotationFlag = def.fixedRotation; - this.m_activeFlag = def.active; - this.m_islandFlag = false; - this.m_toiFlag = false; - this.m_userData = def.userData; - this.m_type = def.type; - if (this.m_type == DYNAMIC) { - this.m_mass = 1.0; - this.m_invMass = 1.0; - } - else { - this.m_mass = 0.0; - this.m_invMass = 0.0; - } - // Rotational inertia about the center of mass. - this.m_I = 0.0; - this.m_invI = 0.0; - // the body origin transform - this.m_xf = Transform.identity(); - this.m_xf.p.setVec2(def.position); - this.m_xf.q.setAngle(def.angle); - // the swept motion for CCD - this.m_sweep = new Sweep(); - this.m_sweep.setTransform(this.m_xf); - // position and velocity correction - this.c_velocity = new Velocity(); - this.c_position = new Position(); - this.m_force = Vec2.zero(); - this.m_torque = 0.0; - this.m_linearVelocity = Vec2.clone(def.linearVelocity); - this.m_angularVelocity = def.angularVelocity; - this.m_linearDamping = def.linearDamping; - this.m_angularDamping = def.angularDamping; - this.m_gravityScale = def.gravityScale; - this.m_sleepTime = 0.0; - this.m_jointList = null; - this.m_contactList = null; - this.m_fixtureList = null; - this.m_prev = null; - this.m_next = null; - this.m_destroyed = false; - } - /** @internal */ - Body.prototype._serialize = function () { - var fixtures = []; - for (var f = this.m_fixtureList; f; f = f.m_next) { - fixtures.push(f); - } - return { - type: this.m_type, - bullet: this.m_bulletFlag, - position: this.m_xf.p, - angle: this.m_xf.q.getAngle(), - linearVelocity: this.m_linearVelocity, - angularVelocity: this.m_angularVelocity, - fixtures: fixtures, - }; +var Body = ( + /** @class */ + function() { + function Body2(world, def) { + this.style = {}; + this.appData = {}; + def = options(def, BodyDefDefault); + this.m_world = world; + this.m_awakeFlag = def.awake; + this.m_autoSleepFlag = def.allowSleep; + this.m_bulletFlag = def.bullet; + this.m_fixedRotationFlag = def.fixedRotation; + this.m_activeFlag = def.active; + this.m_islandFlag = false; + this.m_toiFlag = false; + this.m_userData = def.userData; + this.m_type = def.type; + if (this.m_type == DYNAMIC) { + this.m_mass = 1; + this.m_invMass = 1; + } else { + this.m_mass = 0; + this.m_invMass = 0; + } + this.m_I = 0; + this.m_invI = 0; + this.m_xf = Transform.identity(); + this.m_xf.p.setVec2(def.position); + this.m_xf.q.setAngle(def.angle); + this.m_sweep = new Sweep(); + this.m_sweep.setTransform(this.m_xf); + this.c_velocity = new Velocity(); + this.c_position = new Position(); + this.m_force = Vec2.zero(); + this.m_torque = 0; + this.m_linearVelocity = Vec2.clone(def.linearVelocity); + this.m_angularVelocity = def.angularVelocity; + this.m_linearDamping = def.linearDamping; + this.m_angularDamping = def.angularDamping; + this.m_gravityScale = def.gravityScale; + this.m_sleepTime = 0; + this.m_jointList = null; + this.m_contactList = null; + this.m_fixtureList = null; + this.m_prev = null; + this.m_next = null; + this.m_destroyed = false; + } + Body2.prototype._serialize = function() { + var fixtures = []; + for (var f = this.m_fixtureList; f; f = f.m_next) { + fixtures.push(f); + } + return { + type: this.m_type, + bullet: this.m_bulletFlag, + position: this.m_xf.p, + angle: this.m_xf.q.getAngle(), + linearVelocity: this.m_linearVelocity, + angularVelocity: this.m_angularVelocity, + fixtures + }; }; - /** @internal */ - Body._deserialize = function (data, world, restore) { - var body = new Body(world, data); - if (data.fixtures) { - for (var i = data.fixtures.length - 1; i >= 0; i--) { - var fixture = restore(Fixture, data.fixtures[i], body); - body._addFixture(fixture); - } + Body2._deserialize = function(data, world, restore) { + var body = new Body2(world, data); + if (data.fixtures) { + for (var i = data.fixtures.length - 1; i >= 0; i--) { + var fixture = restore(Fixture, data.fixtures[i], body); + body._addFixture(fixture); } - return body; + } + return body; }; - Body.prototype.isWorldLocked = function () { - return this.m_world && this.m_world.isLocked() ? true : false; + Body2.prototype.isWorldLocked = function() { + return this.m_world && this.m_world.isLocked() ? true : false; }; - Body.prototype.getWorld = function () { - return this.m_world; + Body2.prototype.getWorld = function() { + return this.m_world; }; - Body.prototype.getNext = function () { - return this.m_next; + Body2.prototype.getNext = function() { + return this.m_next; }; - Body.prototype.setUserData = function (data) { - this.m_userData = data; + Body2.prototype.setUserData = function(data) { + this.m_userData = data; }; - Body.prototype.getUserData = function () { - return this.m_userData; + Body2.prototype.getUserData = function() { + return this.m_userData; }; - Body.prototype.getFixtureList = function () { - return this.m_fixtureList; + Body2.prototype.getFixtureList = function() { + return this.m_fixtureList; }; - Body.prototype.getJointList = function () { - return this.m_jointList; + Body2.prototype.getJointList = function() { + return this.m_jointList; }; - /** - * Warning: this list changes during the time step and you may miss some - * collisions if you don't use ContactListener. - */ - Body.prototype.getContactList = function () { - return this.m_contactList; + Body2.prototype.getContactList = function() { + return this.m_contactList; }; - Body.prototype.isStatic = function () { - return this.m_type == STATIC; + Body2.prototype.isStatic = function() { + return this.m_type == STATIC; }; - Body.prototype.isDynamic = function () { - return this.m_type == DYNAMIC; + Body2.prototype.isDynamic = function() { + return this.m_type == DYNAMIC; }; - Body.prototype.isKinematic = function () { - return this.m_type == KINEMATIC; + Body2.prototype.isKinematic = function() { + return this.m_type == KINEMATIC; }; - /** - * This will alter the mass and velocity. - */ - Body.prototype.setStatic = function () { - this.setType(STATIC); - return this; + Body2.prototype.setStatic = function() { + this.setType(STATIC); + return this; }; - Body.prototype.setDynamic = function () { - this.setType(DYNAMIC); - return this; + Body2.prototype.setDynamic = function() { + this.setType(DYNAMIC); + return this; }; - Body.prototype.setKinematic = function () { - this.setType(KINEMATIC); - return this; + Body2.prototype.setKinematic = function() { + this.setType(KINEMATIC); + return this; }; - /** - * Get the type of the body. - */ - Body.prototype.getType = function () { - return this.m_type; - }; - /** - * Set the type of the body to "static", "kinematic" or "dynamic". - * @param type The type of the body. - */ - Body.prototype.setType = function (type) { - if (this.isWorldLocked() == true) { - return; - } - if (this.m_type == type) { - return; - } - this.m_type = type; - this.resetMassData(); - if (this.m_type == STATIC) { - this.m_linearVelocity.setZero(); - this.m_angularVelocity = 0.0; - this.m_sweep.forward(); - this.synchronizeFixtures(); - } - this.setAwake(true); - this.m_force.setZero(); - this.m_torque = 0.0; - // Delete the attached contacts. - var ce = this.m_contactList; - while (ce) { - var ce0 = ce; - ce = ce.next; - this.m_world.destroyContact(ce0.contact); - } - this.m_contactList = null; - // Touch the proxies so that new contacts will be created (when appropriate) - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - for (var i = 0; i < f.m_proxyCount; ++i) { - broadPhase.touchProxy(f.m_proxies[i].proxyId); - } - } + Body2.prototype.getType = function() { + return this.m_type; }; - Body.prototype.isBullet = function () { - return this.m_bulletFlag; - }; - /** - * Should this body be treated like a bullet for continuous collision detection? - */ - Body.prototype.setBullet = function (flag) { - this.m_bulletFlag = !!flag; - }; - Body.prototype.isSleepingAllowed = function () { - return this.m_autoSleepFlag; - }; - Body.prototype.setSleepingAllowed = function (flag) { - this.m_autoSleepFlag = !!flag; - if (this.m_autoSleepFlag == false) { - this.setAwake(true); - } - }; - Body.prototype.isAwake = function () { - return this.m_awakeFlag; - }; - /** - * Set the sleep state of the body. A sleeping body has very low CPU cost. - * - * @param flag Set to true to wake the body, false to put it to sleep. - */ - Body.prototype.setAwake = function (flag) { - if (flag) { - this.m_awakeFlag = true; - this.m_sleepTime = 0.0; - } - else { - this.m_awakeFlag = false; - this.m_sleepTime = 0.0; - this.m_linearVelocity.setZero(); - this.m_angularVelocity = 0.0; - this.m_force.setZero(); - this.m_torque = 0.0; - } - }; - Body.prototype.isActive = function () { - return this.m_activeFlag; - }; - /** - * Set the active state of the body. An inactive body is not simulated and - * cannot be collided with or woken up. If you pass a flag of true, all fixtures - * will be added to the broad-phase. If you pass a flag of false, all fixtures - * will be removed from the broad-phase and all contacts will be destroyed. - * Fixtures and joints are otherwise unaffected. - * - * You may continue to create/destroy fixtures and joints on inactive bodies. - * Fixtures on an inactive body are implicitly inactive and will not participate - * in collisions, ray-casts, or queries. Joints connected to an inactive body - * are implicitly inactive. An inactive body is still owned by a World object - * and remains - */ - Body.prototype.setActive = function (flag) { - if (flag == this.m_activeFlag) { - return; - } - this.m_activeFlag = !!flag; - if (this.m_activeFlag) { - // Create all proxies. - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.createProxies(broadPhase, this.m_xf); - } - // Contacts are created at the beginning of the next - this.m_world.m_newFixture = true; - } - else { - // Destroy all proxies. - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.destroyProxies(broadPhase); - } - // Destroy the attached contacts. - var ce = this.m_contactList; - while (ce) { - var ce0 = ce; - ce = ce.next; - this.m_world.destroyContact(ce0.contact); - } - this.m_contactList = null; + Body2.prototype.setType = function(type) { + if (this.isWorldLocked() == true) { + return; + } + if (this.m_type == type) { + return; + } + this.m_type = type; + this.resetMassData(); + if (this.m_type == STATIC) { + this.m_linearVelocity.setZero(); + this.m_angularVelocity = 0; + this.m_sweep.forward(); + this.synchronizeFixtures(); + } + this.setAwake(true); + this.m_force.setZero(); + this.m_torque = 0; + var ce = this.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.m_world.destroyContact(ce0.contact); + } + this.m_contactList = null; + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + for (var i = 0; i < f.m_proxyCount; ++i) { + broadPhase.touchProxy(f.m_proxies[i].proxyId); } + } }; - Body.prototype.isFixedRotation = function () { - return this.m_fixedRotationFlag; + Body2.prototype.isBullet = function() { + return this.m_bulletFlag; }; - /** - * Set this body to have fixed rotation. This causes the mass to be reset. - */ - Body.prototype.setFixedRotation = function (flag) { - if (this.m_fixedRotationFlag == flag) { - return; - } - this.m_fixedRotationFlag = !!flag; - this.m_angularVelocity = 0.0; - this.resetMassData(); + Body2.prototype.setBullet = function(flag) { + this.m_bulletFlag = !!flag; }; - /** - * Get the world transform for the body's origin. - */ - Body.prototype.getTransform = function () { - return this.m_xf; - }; - /** - * Set the position of the body's origin and rotation. Manipulating a body's - * transform may cause non-physical behavior. Note: contacts are updated on the - * next call to World.step. - * - * @param position The world position of the body's local origin. - * @param angle The world rotation in radians. - */ - Body.prototype.setTransform = function (position, angle) { - if (this.isWorldLocked() == true) { - return; - } - this.m_xf.setNum(position, angle); - this.m_sweep.setTransform(this.m_xf); - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.synchronize(broadPhase, this.m_xf, this.m_xf); - } + Body2.prototype.isSleepingAllowed = function() { + return this.m_autoSleepFlag; + }; + Body2.prototype.setSleepingAllowed = function(flag) { + this.m_autoSleepFlag = !!flag; + if (this.m_autoSleepFlag == false) { this.setAwake(true); + } }; - Body.prototype.synchronizeTransform = function () { - this.m_sweep.getTransform(this.m_xf, 1); + Body2.prototype.isAwake = function() { + return this.m_awakeFlag; }; - /** - * Update fixtures in broad-phase. - */ - Body.prototype.synchronizeFixtures = function () { - this.m_sweep.getTransform(xf$2, 0); + Body2.prototype.setAwake = function(flag) { + if (flag) { + this.m_awakeFlag = true; + this.m_sleepTime = 0; + } else { + this.m_awakeFlag = false; + this.m_sleepTime = 0; + this.m_linearVelocity.setZero(); + this.m_angularVelocity = 0; + this.m_force.setZero(); + this.m_torque = 0; + } + }; + Body2.prototype.isActive = function() { + return this.m_activeFlag; + }; + Body2.prototype.setActive = function(flag) { + if (flag == this.m_activeFlag) { + return; + } + this.m_activeFlag = !!flag; + if (this.m_activeFlag) { var broadPhase = this.m_world.m_broadPhase; for (var f = this.m_fixtureList; f; f = f.m_next) { - f.synchronize(broadPhase, xf$2, this.m_xf); - } - }; - /** - * Used in TOI. - */ - Body.prototype.advance = function (alpha) { - // Advance to the new safe time. This doesn't sync the broad-phase. - this.m_sweep.advance(alpha); - copyVec2(this.m_sweep.c, this.m_sweep.c0); - this.m_sweep.a = this.m_sweep.a0; - this.m_sweep.getTransform(this.m_xf, 1); - }; - /** - * Get the world position for the body's origin. - */ - Body.prototype.getPosition = function () { - return this.m_xf.p; - }; - Body.prototype.setPosition = function (p) { - this.setTransform(p, this.m_sweep.a); - }; - /** - * Get the current world rotation angle in radians. - */ - Body.prototype.getAngle = function () { - return this.m_sweep.a; - }; - Body.prototype.setAngle = function (angle) { - this.setTransform(this.m_xf.p, angle); - }; - /** - * Get the world position of the center of mass. - */ - Body.prototype.getWorldCenter = function () { - return this.m_sweep.c; - }; - /** - * Get the local position of the center of mass. - */ - Body.prototype.getLocalCenter = function () { - return this.m_sweep.localCenter; - }; - /** - * Get the linear velocity of the center of mass. - * - * @return the linear velocity of the center of mass. - */ - Body.prototype.getLinearVelocity = function () { - return this.m_linearVelocity; - }; - /** - * Get the world linear velocity of a world point attached to this body. - * - * @param worldPoint A point in world coordinates. - */ - Body.prototype.getLinearVelocityFromWorldPoint = function (worldPoint) { - var localCenter = Vec2.sub(worldPoint, this.m_sweep.c); - return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity, localCenter)); - }; - /** - * Get the world velocity of a local point. - * - * @param localPoint A point in local coordinates. - */ - Body.prototype.getLinearVelocityFromLocalPoint = function (localPoint) { - return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint)); - }; - /** - * Set the linear velocity of the center of mass. - * - * @param v The new linear velocity of the center of mass. - */ - Body.prototype.setLinearVelocity = function (v) { - if (this.m_type == STATIC) { - return; + f.createProxies(broadPhase, this.m_xf); } - if (Vec2.dot(v, v) > 0.0) { - this.setAwake(true); - } - this.m_linearVelocity.setVec2(v); - }; - /** - * Get the angular velocity. - * - * @returns the angular velocity in radians/second. - */ - Body.prototype.getAngularVelocity = function () { - return this.m_angularVelocity; - }; - /** - * Set the angular velocity. - * - * @param omega The new angular velocity in radians/second. - */ - Body.prototype.setAngularVelocity = function (w) { - if (this.m_type == STATIC) { - return; + this.m_world.m_newFixture = true; + } else { + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.destroyProxies(broadPhase); } - if (w * w > 0.0) { - this.setAwake(true); - } - this.m_angularVelocity = w; - }; - Body.prototype.getLinearDamping = function () { - return this.m_linearDamping; - }; - Body.prototype.setLinearDamping = function (linearDamping) { - this.m_linearDamping = linearDamping; - }; - Body.prototype.getAngularDamping = function () { - return this.m_angularDamping; - }; - Body.prototype.setAngularDamping = function (angularDamping) { - this.m_angularDamping = angularDamping; - }; - Body.prototype.getGravityScale = function () { - return this.m_gravityScale; - }; - /** - * Scale the gravity applied to this body. - */ - Body.prototype.setGravityScale = function (scale) { - this.m_gravityScale = scale; - }; - /** - * Get the total mass of the body. - * - * @returns The mass, usually in kilograms (kg). - */ - Body.prototype.getMass = function () { - return this.m_mass; - }; - /** - * Get the rotational inertia of the body about the local origin. - * - * @return the rotational inertia, usually in kg-m^2. - */ - Body.prototype.getInertia = function () { - return this.m_I + this.m_mass - * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter); - }; - /** - * Copy the mass data of the body to data. - */ - Body.prototype.getMassData = function (data) { - data.mass = this.m_mass; - data.I = this.getInertia(); - copyVec2(data.center, this.m_sweep.localCenter); - }; - /** - * This resets the mass properties to the sum of the mass properties of the - * fixtures. This normally does not need to be called unless you called - * SetMassData to override the mass and you later want to reset the mass. - */ - Body.prototype.resetMassData = function () { - // Compute mass data from shapes. Each shape has its own density. - this.m_mass = 0.0; - this.m_invMass = 0.0; - this.m_I = 0.0; - this.m_invI = 0.0; - zeroVec2(this.m_sweep.localCenter); - // Static and kinematic bodies have zero mass. - if (this.isStatic() || this.isKinematic()) { - copyVec2(this.m_sweep.c0, this.m_xf.p); - copyVec2(this.m_sweep.c, this.m_xf.p); - this.m_sweep.a0 = this.m_sweep.a; - return; - } - // Accumulate mass over all fixtures. - zeroVec2(localCenter); - for (var f = this.m_fixtureList; f; f = f.m_next) { - if (f.m_density == 0.0) { - continue; - } - var massData = { - mass: 0, - center: vec2(0, 0), - I: 0 - }; - f.getMassData(massData); - this.m_mass += massData.mass; - plusScaleVec2(localCenter, massData.mass, massData.center); - this.m_I += massData.I; - } - // Compute center of mass. - if (this.m_mass > 0.0) { - this.m_invMass = 1.0 / this.m_mass; - scaleVec2(localCenter, this.m_invMass, localCenter); - } - else { - // Force all dynamic bodies to have a positive mass. - this.m_mass = 1.0; - this.m_invMass = 1.0; - } - if (this.m_I > 0.0 && this.m_fixedRotationFlag == false) { - // Center the inertia about the center of mass. - this.m_I -= this.m_mass * dotVec2(localCenter, localCenter); - this.m_invI = 1.0 / this.m_I; - } - else { - this.m_I = 0.0; - this.m_invI = 0.0; - } - // Move center of mass. - copyVec2(oldCenter, this.m_sweep.c); - this.m_sweep.setLocalCenter(localCenter, this.m_xf); - // Update center of mass velocity. - subVec2(shift, this.m_sweep.c, oldCenter); - crossNumVec2(temp$6, this.m_angularVelocity, shift); - plusVec2(this.m_linearVelocity, temp$6); - }; - /** - * Set the mass properties to override the mass properties of the fixtures. Note - * that this changes the center of mass position. Note that creating or - * destroying fixtures can also alter the mass. This function has no effect if - * the body isn't dynamic. - * - * @param massData The mass properties. - */ - Body.prototype.setMassData = function (massData) { - if (this.isWorldLocked() == true) { - return; - } - if (this.m_type != DYNAMIC) { - return; - } - this.m_invMass = 0.0; - this.m_I = 0.0; - this.m_invI = 0.0; - this.m_mass = massData.mass; - if (this.m_mass <= 0.0) { - this.m_mass = 1.0; - } - this.m_invMass = 1.0 / this.m_mass; - if (massData.I > 0.0 && this.m_fixedRotationFlag == false) { - this.m_I = massData.I - this.m_mass * dotVec2(massData.center, massData.center); - this.m_invI = 1.0 / this.m_I; - } - // Move center of mass. - copyVec2(oldCenter, this.m_sweep.c); - this.m_sweep.setLocalCenter(massData.center, this.m_xf); - // Update center of mass velocity. - subVec2(shift, this.m_sweep.c, oldCenter); - crossNumVec2(temp$6, this.m_angularVelocity, shift); - plusVec2(this.m_linearVelocity, temp$6); - }; - /** - * Apply a force at a world point. If the force is not applied at the center of - * mass, it will generate a torque and affect the angular velocity. This wakes - * up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - Body.prototype.applyForce = function (force, point, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate a force if the body is sleeping. - if (this.m_awakeFlag) { - this.m_force.add(force); - this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), force); + var ce = this.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.m_world.destroyContact(ce0.contact); } + this.m_contactList = null; + } }; - /** - * Apply a force to the center of mass. This wakes up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param wake Also wake up the body - */ - Body.prototype.applyForceToCenter = function (force, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate a force if the body is sleeping - if (this.m_awakeFlag) { - this.m_force.add(force); - } + Body2.prototype.isFixedRotation = function() { + return this.m_fixedRotationFlag; }; - /** - * Apply a torque. This affects the angular velocity without affecting the - * linear velocity of the center of mass. This wakes up the body. - * - * @param torque About the z-axis (out of the screen), usually in N-m. - * @param wake Also wake up the body - */ - Body.prototype.applyTorque = function (torque, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate a force if the body is sleeping - if (this.m_awakeFlag) { - this.m_torque += torque; - } - }; - /** - * Apply an impulse at a point. This immediately modifies the velocity. It also - * modifies the angular velocity if the point of application is not at the - * center of mass. This wakes up the body. - * - * @param impulse The world impulse vector, usually in N-seconds or kg-m/s. - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - Body.prototype.applyLinearImpulse = function (impulse, point, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate velocity if the body is sleeping - if (this.m_awakeFlag) { - this.m_linearVelocity.addMul(this.m_invMass, impulse); - this.m_angularVelocity += this.m_invI * Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), impulse); - } + Body2.prototype.setFixedRotation = function(flag) { + if (this.m_fixedRotationFlag == flag) { + return; + } + this.m_fixedRotationFlag = !!flag; + this.m_angularVelocity = 0; + this.resetMassData(); }; - /** - * Apply an angular impulse. - * - * @param impulse The angular impulse in units of kg*m*m/s - * @param wake Also wake up the body - */ - Body.prototype.applyAngularImpulse = function (impulse, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate velocity if the body is sleeping - if (this.m_awakeFlag) { - this.m_angularVelocity += this.m_invI * impulse; + Body2.prototype.getTransform = function() { + return this.m_xf; + }; + Body2.prototype.setTransform = function(position, angle) { + if (this.isWorldLocked() == true) { + return; + } + this.m_xf.setNum(position, angle); + this.m_sweep.setTransform(this.m_xf); + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.synchronize(broadPhase, this.m_xf, this.m_xf); + } + this.setAwake(true); + }; + Body2.prototype.synchronizeTransform = function() { + this.m_sweep.getTransform(this.m_xf, 1); + }; + Body2.prototype.synchronizeFixtures = function() { + this.m_sweep.getTransform(xf$2, 0); + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.synchronize(broadPhase, xf$2, this.m_xf); + } + }; + Body2.prototype.advance = function(alpha) { + this.m_sweep.advance(alpha); + copyVec2(this.m_sweep.c, this.m_sweep.c0); + this.m_sweep.a = this.m_sweep.a0; + this.m_sweep.getTransform(this.m_xf, 1); + }; + Body2.prototype.getPosition = function() { + return this.m_xf.p; + }; + Body2.prototype.setPosition = function(p) { + this.setTransform(p, this.m_sweep.a); + }; + Body2.prototype.getAngle = function() { + return this.m_sweep.a; + }; + Body2.prototype.setAngle = function(angle) { + this.setTransform(this.m_xf.p, angle); + }; + Body2.prototype.getWorldCenter = function() { + return this.m_sweep.c; + }; + Body2.prototype.getLocalCenter = function() { + return this.m_sweep.localCenter; + }; + Body2.prototype.getLinearVelocity = function() { + return this.m_linearVelocity; + }; + Body2.prototype.getLinearVelocityFromWorldPoint = function(worldPoint) { + var localCenter2 = Vec2.sub(worldPoint, this.m_sweep.c); + return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity, localCenter2)); + }; + Body2.prototype.getLinearVelocityFromLocalPoint = function(localPoint) { + return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint)); + }; + Body2.prototype.setLinearVelocity = function(v3) { + if (this.m_type == STATIC) { + return; + } + if (Vec2.dot(v3, v3) > 0) { + this.setAwake(true); + } + this.m_linearVelocity.setVec2(v3); + }; + Body2.prototype.getAngularVelocity = function() { + return this.m_angularVelocity; + }; + Body2.prototype.setAngularVelocity = function(w) { + if (this.m_type == STATIC) { + return; + } + if (w * w > 0) { + this.setAwake(true); + } + this.m_angularVelocity = w; + }; + Body2.prototype.getLinearDamping = function() { + return this.m_linearDamping; + }; + Body2.prototype.setLinearDamping = function(linearDamping) { + this.m_linearDamping = linearDamping; + }; + Body2.prototype.getAngularDamping = function() { + return this.m_angularDamping; + }; + Body2.prototype.setAngularDamping = function(angularDamping) { + this.m_angularDamping = angularDamping; + }; + Body2.prototype.getGravityScale = function() { + return this.m_gravityScale; + }; + Body2.prototype.setGravityScale = function(scale) { + this.m_gravityScale = scale; + }; + Body2.prototype.getMass = function() { + return this.m_mass; + }; + Body2.prototype.getInertia = function() { + return this.m_I + this.m_mass * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter); + }; + Body2.prototype.getMassData = function(data) { + data.mass = this.m_mass; + data.I = this.getInertia(); + copyVec2(data.center, this.m_sweep.localCenter); + }; + Body2.prototype.resetMassData = function() { + this.m_mass = 0; + this.m_invMass = 0; + this.m_I = 0; + this.m_invI = 0; + zeroVec2(this.m_sweep.localCenter); + if (this.isStatic() || this.isKinematic()) { + copyVec2(this.m_sweep.c0, this.m_xf.p); + copyVec2(this.m_sweep.c, this.m_xf.p); + this.m_sweep.a0 = this.m_sweep.a; + return; + } + zeroVec2(localCenter); + for (var f = this.m_fixtureList; f; f = f.m_next) { + if (f.m_density == 0) { + continue; } + var massData = { + mass: 0, + center: vec2(0, 0), + I: 0 + }; + f.getMassData(massData); + this.m_mass += massData.mass; + plusScaleVec2(localCenter, massData.mass, massData.center); + this.m_I += massData.I; + } + if (this.m_mass > 0) { + this.m_invMass = 1 / this.m_mass; + scaleVec2(localCenter, this.m_invMass, localCenter); + } else { + this.m_mass = 1; + this.m_invMass = 1; + } + if (this.m_I > 0 && this.m_fixedRotationFlag == false) { + this.m_I -= this.m_mass * dotVec2(localCenter, localCenter); + this.m_invI = 1 / this.m_I; + } else { + this.m_I = 0; + this.m_invI = 0; + } + copyVec2(oldCenter, this.m_sweep.c); + this.m_sweep.setLocalCenter(localCenter, this.m_xf); + subVec2(shift, this.m_sweep.c, oldCenter); + crossNumVec2(temp$6, this.m_angularVelocity, shift); + plusVec2(this.m_linearVelocity, temp$6); + }; + Body2.prototype.setMassData = function(massData) { + if (this.isWorldLocked() == true) { + return; + } + if (this.m_type != DYNAMIC) { + return; + } + this.m_invMass = 0; + this.m_I = 0; + this.m_invI = 0; + this.m_mass = massData.mass; + if (this.m_mass <= 0) { + this.m_mass = 1; + } + this.m_invMass = 1 / this.m_mass; + if (massData.I > 0 && this.m_fixedRotationFlag == false) { + this.m_I = massData.I - this.m_mass * dotVec2(massData.center, massData.center); + this.m_invI = 1 / this.m_I; + } + copyVec2(oldCenter, this.m_sweep.c); + this.m_sweep.setLocalCenter(massData.center, this.m_xf); + subVec2(shift, this.m_sweep.c, oldCenter); + crossNumVec2(temp$6, this.m_angularVelocity, shift); + plusVec2(this.m_linearVelocity, temp$6); + }; + Body2.prototype.applyForce = function(force, point2, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_force.add(force); + this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point2, this.m_sweep.c), force); + } + }; + Body2.prototype.applyForceToCenter = function(force, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_force.add(force); + } + }; + Body2.prototype.applyTorque = function(torque, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_torque += torque; + } + }; + Body2.prototype.applyLinearImpulse = function(impulse, point2, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_linearVelocity.addMul(this.m_invMass, impulse); + this.m_angularVelocity += this.m_invI * Vec2.crossVec2Vec2(Vec2.sub(point2, this.m_sweep.c), impulse); + } + }; + Body2.prototype.applyAngularImpulse = function(impulse, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_angularVelocity += this.m_invI * impulse; + } }; - /** - * This is used to test if two bodies should collide. - * - * Bodies do not collide when: - * - Neither of them is dynamic - * - They are connected by a joint with collideConnected == false - */ - Body.prototype.shouldCollide = function (that) { - // At least one body should be dynamic. - if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) { + Body2.prototype.shouldCollide = function(that) { + if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) { + return false; + } + for (var jn = this.m_jointList; jn; jn = jn.next) { + if (jn.other == that) { + if (jn.joint.m_collideConnected == false) { return false; + } } - // Does a joint prevent collision? - for (var jn = this.m_jointList; jn; jn = jn.next) { - if (jn.other == that) { - if (jn.joint.m_collideConnected == false) { - return false; - } - } - } - return true; + } + return true; }; - /** @internal Used for deserialize. */ - Body.prototype._addFixture = function (fixture) { - if (this.isWorldLocked() == true) { - return null; - } - if (this.m_activeFlag) { - var broadPhase = this.m_world.m_broadPhase; - fixture.createProxies(broadPhase, this.m_xf); - } - fixture.m_next = this.m_fixtureList; - this.m_fixtureList = fixture; - // Adjust mass properties if needed. - if (fixture.m_density > 0.0) { - this.resetMassData(); - } - // Let the world know we have a new fixture. This will cause new contacts - // to be created at the beginning of the next time step. - this.m_world.m_newFixture = true; - return fixture; - }; - // tslint:disable-next-line:typedef - Body.prototype.createFixture = function (shape, fixdef) { - if (this.isWorldLocked() == true) { - return null; - } - var fixture = new Fixture(this, shape, fixdef); - this._addFixture(fixture); - return fixture; - }; - /** - * Destroy a fixture. This removes the fixture from the broad-phase and destroys - * all contacts associated with this fixture. This will automatically adjust the - * mass of the body if the body is dynamic and the fixture has positive density. - * All fixtures attached to a body are implicitly destroyed when the body is - * destroyed. - * - * Warning: This function is locked during callbacks. - * - * @param fixture The fixture to be removed. - */ - Body.prototype.destroyFixture = function (fixture) { - if (this.isWorldLocked() == true) { - return; - } - if (this.m_fixtureList === fixture) { - this.m_fixtureList = fixture.m_next; - } - else { - var node = this.m_fixtureList; - while (node != null) { - if (node.m_next === fixture) { - node.m_next = fixture.m_next; - break; - } - node = node.m_next; - } - } - // Destroy any contacts associated with the fixture. - var edge = this.m_contactList; - while (edge) { - var c = edge.contact; - edge = edge.next; - var fixtureA = c.getFixtureA(); - var fixtureB = c.getFixtureB(); - if (fixture == fixtureA || fixture == fixtureB) { - // This destroys the contact and removes it from - // this body's contact list. - this.m_world.destroyContact(c); - } + Body2.prototype._addFixture = function(fixture) { + if (this.isWorldLocked() == true) { + return null; + } + if (this.m_activeFlag) { + var broadPhase = this.m_world.m_broadPhase; + fixture.createProxies(broadPhase, this.m_xf); + } + fixture.m_next = this.m_fixtureList; + this.m_fixtureList = fixture; + if (fixture.m_density > 0) { + this.resetMassData(); + } + this.m_world.m_newFixture = true; + return fixture; + }; + Body2.prototype.createFixture = function(shape, fixdef) { + if (this.isWorldLocked() == true) { + return null; + } + var fixture = new Fixture(this, shape, fixdef); + this._addFixture(fixture); + return fixture; + }; + Body2.prototype.destroyFixture = function(fixture) { + if (this.isWorldLocked() == true) { + return; + } + if (this.m_fixtureList === fixture) { + this.m_fixtureList = fixture.m_next; + } else { + var node = this.m_fixtureList; + while (node != null) { + if (node.m_next === fixture) { + node.m_next = fixture.m_next; + break; + } + node = node.m_next; } - if (this.m_activeFlag) { - var broadPhase = this.m_world.m_broadPhase; - fixture.destroyProxies(broadPhase); + } + var edge = this.m_contactList; + while (edge) { + var c2 = edge.contact; + edge = edge.next; + var fixtureA = c2.getFixtureA(); + var fixtureB = c2.getFixtureB(); + if (fixture == fixtureA || fixture == fixtureB) { + this.m_world.destroyContact(c2); } - fixture.m_body = null; - fixture.m_next = null; - this.m_world.publish("remove-fixture", fixture); - // Reset the mass data. - this.resetMassData(); + } + if (this.m_activeFlag) { + var broadPhase = this.m_world.m_broadPhase; + fixture.destroyProxies(broadPhase); + } + fixture.m_body = null; + fixture.m_next = null; + this.m_world.publish("remove-fixture", fixture); + this.resetMassData(); }; - /** - * Get the corresponding world point of a local point. - */ - Body.prototype.getWorldPoint = function (localPoint) { - return Transform.mulVec2(this.m_xf, localPoint); - }; - /** - * Get the corresponding world vector of a local vector. - */ - Body.prototype.getWorldVector = function (localVector) { - return Rot.mulVec2(this.m_xf.q, localVector); - }; - /** - * Gets the corresponding local point of a world point. - */ - Body.prototype.getLocalPoint = function (worldPoint) { - return Transform.mulTVec2(this.m_xf, worldPoint); - }; - /** - * Gets the corresponding local vector of a world vector. - */ - Body.prototype.getLocalVector = function (worldVector) { - return Rot.mulTVec2(this.m_xf.q, worldVector); - }; - /** - * A static body does not move under simulation and behaves as if it has infinite mass. - * Internally, zero is stored for the mass and the inverse mass. - * Static bodies can be moved manually by the user. - * A static body has zero velocity. - * Static bodies do not collide with other static or kinematic bodies. - */ - Body.STATIC = "static"; - /** - * A kinematic body moves under simulation according to its velocity. - * Kinematic bodies do not respond to forces. - * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity. - * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass. - * Kinematic bodies do not collide with other kinematic or static bodies. - */ - Body.KINEMATIC = "kinematic"; - /** - * A dynamic body is fully simulated. - * They can be moved manually by the user, but normally they move according to forces. - * A dynamic body can collide with all body types. - * A dynamic body always has finite, non-zero mass. - * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate. - */ - Body.DYNAMIC = "dynamic"; - return Body; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** - * A joint edge is used to connect bodies and joints together in a joint graph - * where each body is a node and each joint is an edge. A joint edge belongs to - * a doubly linked list maintained in each attached body. Each joint has two - * joint nodes, one for each attached body. - */ -var JointEdge = /** @class */ (function () { - function JointEdge() { - /** - * provides quick access to the other body attached. - */ - this.other = null; - /** - * the joint - */ - this.joint = null; - /** - * prev the previous joint edge in the body's joint list - */ - this.prev = null; - /** - * the next joint edge in the body's joint list - */ - this.next = null; - } - return JointEdge; -}()); -/** - * The base joint class. Joints are used to constraint two bodies together in - * various fashions. Some joints also feature limits and motors. - */ -var Joint = /** @class */ (function () { - function Joint(def, bodyA, bodyB) { - /** @internal */ this.m_type = "unknown-joint"; - /** @internal */ this.m_prev = null; - /** @internal */ this.m_next = null; - /** @internal */ this.m_edgeA = new JointEdge(); - /** @internal */ this.m_edgeB = new JointEdge(); - /** @internal */ this.m_islandFlag = false; - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - bodyA = "bodyA" in def ? def.bodyA : bodyA; - bodyB = "bodyB" in def ? def.bodyB : bodyB; - this.m_bodyA = bodyA; - this.m_bodyB = bodyB; - this.m_collideConnected = !!def.collideConnected; - this.m_userData = def.userData; + Body2.prototype.getWorldPoint = function(localPoint) { + return Transform.mulVec2(this.m_xf, localPoint); + }; + Body2.prototype.getWorldVector = function(localVector) { + return Rot.mulVec2(this.m_xf.q, localVector); + }; + Body2.prototype.getLocalPoint = function(worldPoint) { + return Transform.mulTVec2(this.m_xf, worldPoint); + }; + Body2.prototype.getLocalVector = function(worldVector) { + return Rot.mulTVec2(this.m_xf.q, worldVector); + }; + Body2.STATIC = "static"; + Body2.KINEMATIC = "kinematic"; + Body2.DYNAMIC = "dynamic"; + return Body2; + }() +); +var JointEdge = ( + /** @class */ + /* @__PURE__ */ function() { + function JointEdge2() { + this.other = null; + this.joint = null; + this.prev = null; + this.next = null; + } + return JointEdge2; + }() +); +var Joint = ( + /** @class */ + function() { + function Joint2(def, bodyA, bodyB) { + this.m_type = "unknown-joint"; + this.m_prev = null; + this.m_next = null; + this.m_edgeA = new JointEdge(); + this.m_edgeB = new JointEdge(); + this.m_islandFlag = false; + this.style = {}; + this.appData = {}; + bodyA = "bodyA" in def ? def.bodyA : bodyA; + bodyB = "bodyB" in def ? def.bodyB : bodyB; + this.m_bodyA = bodyA; + this.m_bodyB = bodyB; + this.m_collideConnected = !!def.collideConnected; + this.m_userData = def.userData; } - /** - * Short-cut function to determine if either body is inactive. - */ - Joint.prototype.isActive = function () { - return this.m_bodyA.isActive() && this.m_bodyB.isActive(); - }; - /** - * Get the type of the concrete joint. - */ - Joint.prototype.getType = function () { - return this.m_type; - }; - /** - * Get the first body attached to this joint. - */ - Joint.prototype.getBodyA = function () { - return this.m_bodyA; - }; - /** - * Get the second body attached to this joint. - */ - Joint.prototype.getBodyB = function () { - return this.m_bodyB; - }; - /** - * Get the next joint the world joint list. - */ - Joint.prototype.getNext = function () { - return this.m_next; - }; - Joint.prototype.getUserData = function () { - return this.m_userData; - }; - Joint.prototype.setUserData = function (data) { - this.m_userData = data; - }; - /** - * Get collide connected. Note: modifying the collide connect flag won't work - * correctly because the flag is only checked when fixture AABBs begin to - * overlap. - */ - Joint.prototype.getCollideConnected = function () { - return this.m_collideConnected; - }; - /** - * Shift the origin for any points stored in world coordinates. - */ - Joint.prototype.shiftOrigin = function (newOrigin) { }; - /** - * @internal @deprecated - * Temporary for backward compatibility, will be removed. - */ - Joint.prototype._resetAnchors = function (def) { - return this._reset(def); - }; - return Joint; -}()); - -/** @hidden */ + Joint2.prototype.isActive = function() { + return this.m_bodyA.isActive() && this.m_bodyB.isActive(); + }; + Joint2.prototype.getType = function() { + return this.m_type; + }; + Joint2.prototype.getBodyA = function() { + return this.m_bodyA; + }; + Joint2.prototype.getBodyB = function() { + return this.m_bodyB; + }; + Joint2.prototype.getNext = function() { + return this.m_next; + }; + Joint2.prototype.getUserData = function() { + return this.m_userData; + }; + Joint2.prototype.setUserData = function(data) { + this.m_userData = data; + }; + Joint2.prototype.getCollideConnected = function() { + return this.m_collideConnected; + }; + Joint2.prototype.shiftOrigin = function(newOrigin) { + }; + Joint2.prototype._resetAnchors = function(def) { + return this._reset(def); + }; + return Joint2; + }() +); var stats$1 = { - gjkCalls: 0, - gjkIters: 0, - gjkMaxIters: 0, - toiTime: 0, - toiMaxTime: 0, - toiCalls: 0, - toiIters: 0, - toiMaxIters: 0, - toiRootIters: 0, - toiMaxRootIters: 0, - toString: function (newline) { - newline = typeof newline === "string" ? newline : "\n"; - var string = ""; - // tslint:disable-next-line:no-for-in - for (var name_1 in this) { - if (typeof this[name_1] !== "function" && typeof this[name_1] !== "object") { - string += name_1 + ": " + this[name_1] + newline; - } - } - return string; - } + gjkCalls: 0, + gjkIters: 0, + gjkMaxIters: 0, + toiTime: 0, + toiMaxTime: 0, + toiCalls: 0, + toiIters: 0, + toiMaxIters: 0, + toiRootIters: 0, + toiMaxRootIters: 0, + toString: function(newline) { + newline = typeof newline === "string" ? newline : "\n"; + var string = ""; + for (var name_1 in this) { + if (typeof this[name_1] !== "function" && typeof this[name_1] !== "object") { + string += name_1 + ": " + this[name_1] + newline; + } + } + return string; + } }; - -/** @internal */ -var now = function () { - return Date.now(); +var now = function() { + return Date.now(); }; -/** @internal */ -var diff = function (time) { - return Date.now() - time; +var diff = function(time) { + return Date.now() - time; }; -/** @internal */ -var Timer = { - now: now, - diff: diff, +const Timer = { + now, + diff }; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_max$5 = Math.max; -/** @internal */ var temp$5 = vec2(0, 0); -/** @internal */ var normal$4 = vec2(0, 0); -/** @internal */ var e12 = vec2(0, 0); -/** @internal */ var e13 = vec2(0, 0); -/** @internal */ var e23 = vec2(0, 0); -/** @internal */ var temp1 = vec2(0, 0); -/** @internal */ var temp2 = vec2(0, 0); -/** - * GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates. - */ +var math_max$5 = Math.max; +var temp$5 = vec2(0, 0); +var normal$4 = vec2(0, 0); +var e12 = vec2(0, 0); +var e13 = vec2(0, 0); +var e23 = vec2(0, 0); +var temp1 = vec2(0, 0); +var temp2 = vec2(0, 0); stats$1.gjkCalls = 0; stats$1.gjkIters = 0; stats$1.gjkMaxIters = 0; -/** - * Input for Distance. You have to option to use the shape radii in the - * computation. Even - */ -var DistanceInput = /** @class */ (function () { - function DistanceInput() { - this.proxyA = new DistanceProxy(); - this.proxyB = new DistanceProxy(); - this.transformA = Transform.identity(); - this.transformB = Transform.identity(); - this.useRadii = false; +var DistanceInput = ( + /** @class */ + function() { + function DistanceInput2() { + this.proxyA = new DistanceProxy(); + this.proxyB = new DistanceProxy(); + this.transformA = Transform.identity(); + this.transformB = Transform.identity(); + this.useRadii = false; + } + DistanceInput2.prototype.recycle = function() { + this.proxyA.recycle(); + this.proxyB.recycle(); + this.transformA.setIdentity(); + this.transformB.setIdentity(); + this.useRadii = false; + }; + return DistanceInput2; + }() +); +var DistanceOutput = ( + /** @class */ + function() { + function DistanceOutput2() { + this.pointA = vec2(0, 0); + this.pointB = vec2(0, 0); + this.distance = 0; + this.iterations = 0; + } + DistanceOutput2.prototype.recycle = function() { + zeroVec2(this.pointA); + zeroVec2(this.pointB); + this.distance = 0; + this.iterations = 0; + }; + return DistanceOutput2; + }() +); +var SimplexCache = ( + /** @class */ + function() { + function SimplexCache2() { + this.metric = 0; + this.indexA = []; + this.indexB = []; + this.count = 0; + } + SimplexCache2.prototype.recycle = function() { + this.metric = 0; + this.indexA.length = 0; + this.indexB.length = 0; + this.count = 0; + }; + return SimplexCache2; + }() +); +var Distance = function(output2, cache2, input2) { + ++stats$1.gjkCalls; + var proxyA = input2.proxyA; + var proxyB = input2.proxyB; + var xfA2 = input2.transformA; + var xfB2 = input2.transformB; + simplex.recycle(); + simplex.readCache(cache2, proxyA, xfA2, proxyB, xfB2); + var vertices = simplex.m_v; + var k_maxIters = SettingsInternal.maxDistanceIterations; + var saveA = []; + var saveB = []; + var saveCount = 0; + var iter = 0; + while (iter < k_maxIters) { + saveCount = simplex.m_count; + for (var i = 0; i < saveCount; ++i) { + saveA[i] = vertices[i].indexA; + saveB[i] = vertices[i].indexB; + } + simplex.solve(); + if (simplex.m_count === 3) { + break; + } + var d2 = simplex.getSearchDirection(); + if (lengthSqrVec2(d2) < EPSILON * EPSILON) { + break; + } + var vertex = vertices[simplex.m_count]; + vertex.indexA = proxyA.getSupport(derotVec2(temp$5, xfA2.q, scaleVec2(temp$5, -1, d2))); + transformVec2(vertex.wA, xfA2, proxyA.getVertex(vertex.indexA)); + vertex.indexB = proxyB.getSupport(derotVec2(temp$5, xfB2.q, d2)); + transformVec2(vertex.wB, xfB2, proxyB.getVertex(vertex.indexB)); + subVec2(vertex.w, vertex.wB, vertex.wA); + ++iter; + ++stats$1.gjkIters; + var duplicate = false; + for (var i = 0; i < saveCount; ++i) { + if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) { + duplicate = true; + break; + } } - DistanceInput.prototype.recycle = function () { - this.proxyA.recycle(); - this.proxyB.recycle(); - this.transformA.setIdentity(); - this.transformB.setIdentity(); - this.useRadii = false; - }; - return DistanceInput; -}()); -/** - * Output for Distance. - */ -var DistanceOutput = /** @class */ (function () { - function DistanceOutput() { - /** closest point on shapeA */ - this.pointA = vec2(0, 0); - /** closest point on shapeB */ - this.pointB = vec2(0, 0); - this.distance = 0; - /** iterations number of GJK iterations used */ - this.iterations = 0; + if (duplicate) { + break; } - DistanceOutput.prototype.recycle = function () { - zeroVec2(this.pointA); - zeroVec2(this.pointB); - this.distance = 0; - this.iterations = 0; - }; - return DistanceOutput; -}()); -/** - * Used to warm start Distance. Set count to zero on first call. - */ -var SimplexCache = /** @class */ (function () { - function SimplexCache() { - /** length or area */ - this.metric = 0; - /** vertices on shape A */ - this.indexA = []; - /** vertices on shape B */ - this.indexB = []; - this.count = 0; - } - SimplexCache.prototype.recycle = function () { - this.metric = 0; - this.indexA.length = 0; - this.indexB.length = 0; - this.count = 0; - }; - return SimplexCache; -}()); -/** - * Compute the closest points between two shapes. Supports any combination of: - * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On - * the first call set SimplexCache.count to zero. - */ -var Distance = function (output, cache, input) { - ++stats$1.gjkCalls; - var proxyA = input.proxyA; - var proxyB = input.proxyB; - var xfA = input.transformA; - var xfB = input.transformB; - // Initialize the simplex. - // const simplex = new Simplex(); - simplex.recycle(); - simplex.readCache(cache, proxyA, xfA, proxyB, xfB); - // Get simplex vertices as an array. - var vertices = simplex.m_v; - var k_maxIters = SettingsInternal.maxDistanceIterations; - // These store the vertices of the last simplex so that we - // can check for duplicates and prevent cycling. - var saveA = []; - var saveB = []; // int[3] - var saveCount = 0; - // Main iteration loop. - var iter = 0; - while (iter < k_maxIters) { - // Copy simplex so we can identify duplicates. - saveCount = simplex.m_count; - for (var i = 0; i < saveCount; ++i) { - saveA[i] = vertices[i].indexA; - saveB[i] = vertices[i].indexB; - } - simplex.solve(); - // If we have 3 points, then the origin is in the corresponding triangle. - if (simplex.m_count === 3) { - break; - } - // Get search direction. - var d = simplex.getSearchDirection(); - // Ensure the search direction is numerically fit. - if (lengthSqrVec2(d) < EPSILON * EPSILON) { - // The origin is probably contained by a line segment - // or triangle. Thus the shapes are overlapped. - // We can't return zero here even though there may be overlap. - // In case the simplex is a point, segment, or triangle it is difficult - // to determine if the origin is contained in the CSO or very close to it. - break; - } - // Compute a tentative new simplex vertex using support points. - var vertex = vertices[simplex.m_count]; // SimplexVertex - vertex.indexA = proxyA.getSupport(derotVec2(temp$5, xfA.q, scaleVec2(temp$5, -1, d))); - transformVec2(vertex.wA, xfA, proxyA.getVertex(vertex.indexA)); - vertex.indexB = proxyB.getSupport(derotVec2(temp$5, xfB.q, d)); - transformVec2(vertex.wB, xfB, proxyB.getVertex(vertex.indexB)); - subVec2(vertex.w, vertex.wB, vertex.wA); - // Iteration count is equated to the number of support point calls. - ++iter; - ++stats$1.gjkIters; - // Check for duplicate support points. This is the main termination - // criteria. - var duplicate = false; - for (var i = 0; i < saveCount; ++i) { - if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) { - duplicate = true; - break; - } - } - // If we found a duplicate support point we must exit to avoid cycling. - if (duplicate) { - break; - } - // New vertex is ok and needed. - ++simplex.m_count; - } - stats$1.gjkMaxIters = math_max$5(stats$1.gjkMaxIters, iter); - // Prepare output. - simplex.getWitnessPoints(output.pointA, output.pointB); - output.distance = distVec2(output.pointA, output.pointB); - output.iterations = iter; - // Cache the simplex. - simplex.writeCache(cache); - // Apply radii if requested. - if (input.useRadii) { - var rA = proxyA.m_radius; - var rB = proxyB.m_radius; - if (output.distance > rA + rB && output.distance > EPSILON) { - // Shapes are still no overlapped. - // Move the witness points to the outer surface. - output.distance -= rA + rB; - subVec2(normal$4, output.pointB, output.pointA); - normalizeVec2(normal$4); - plusScaleVec2(output.pointA, rA, normal$4); - minusScaleVec2(output.pointB, rB, normal$4); - } - else { - // Shapes are overlapped when radii are considered. - // Move the witness points to the middle. - var p = subVec2(temp$5, output.pointA, output.pointB); - copyVec2(output.pointA, p); - copyVec2(output.pointB, p); - output.distance = 0.0; - } + ++simplex.m_count; + } + stats$1.gjkMaxIters = math_max$5(stats$1.gjkMaxIters, iter); + simplex.getWitnessPoints(output2.pointA, output2.pointB); + output2.distance = distVec2(output2.pointA, output2.pointB); + output2.iterations = iter; + simplex.writeCache(cache2); + if (input2.useRadii) { + var rA2 = proxyA.m_radius; + var rB2 = proxyB.m_radius; + if (output2.distance > rA2 + rB2 && output2.distance > EPSILON) { + output2.distance -= rA2 + rB2; + subVec2(normal$4, output2.pointB, output2.pointA); + normalizeVec2(normal$4); + plusScaleVec2(output2.pointA, rA2, normal$4); + minusScaleVec2(output2.pointB, rB2, normal$4); + } else { + var p = subVec2(temp$5, output2.pointA, output2.pointB); + copyVec2(output2.pointA, p); + copyVec2(output2.pointB, p); + output2.distance = 0; } + } }; -/** - * A distance proxy is used by the GJK algorithm. It encapsulates any shape. - */ -var DistanceProxy = /** @class */ (function () { - function DistanceProxy() { - /** @internal */ this.m_vertices = []; - // todo: remove this? - /** @internal */ this.m_count = 0; - /** @internal */ this.m_radius = 0; +var DistanceProxy = ( + /** @class */ + function() { + function DistanceProxy2() { + this.m_vertices = []; + this.m_count = 0; + this.m_radius = 0; } - DistanceProxy.prototype.recycle = function () { - this.m_vertices.length = 0; - this.m_count = 0; - this.m_radius = 0; - }; - /** - * Get the vertex count. - */ - DistanceProxy.prototype.getVertexCount = function () { - return this.m_count; - }; - /** - * Get a vertex by index. Used by Distance. - */ - DistanceProxy.prototype.getVertex = function (index) { - return this.m_vertices[index]; + DistanceProxy2.prototype.recycle = function() { + this.m_vertices.length = 0; + this.m_count = 0; + this.m_radius = 0; }; - /** - * Get the supporting vertex index in the given direction. - */ - DistanceProxy.prototype.getSupport = function (d) { - var bestIndex = -1; - var bestValue = -Infinity; - for (var i = 0; i < this.m_count; ++i) { - var value = dotVec2(this.m_vertices[i], d); - if (value > bestValue) { - bestIndex = i; - bestValue = value; - } - } - return bestIndex; - }; - /** - * Get the supporting vertex in the given direction. - */ - DistanceProxy.prototype.getSupportVertex = function (d) { - return this.m_vertices[this.getSupport(d)]; - }; - /** - * Initialize the proxy using the given shape. The shape must remain in scope - * while the proxy is in use. - */ - DistanceProxy.prototype.set = function (shape, index) { - shape.computeDistanceProxy(this, index); - }; - /** - * Initialize the proxy using a vertex cloud and radius. The vertices - * must remain in scope while the proxy is in use. - */ - DistanceProxy.prototype.setVertices = function (vertices, count, radius) { - this.m_vertices = vertices; - this.m_count = count; - this.m_radius = radius; - }; - return DistanceProxy; -}()); -var SimplexVertex = /** @class */ (function () { - function SimplexVertex() { - /** support point in proxyA */ - this.wA = vec2(0, 0); - /** wA index */ - this.indexA = 0; - /** support point in proxyB */ - this.wB = vec2(0, 0); - /** wB index */ - this.indexB = 0; - /** wB - wA; */ - this.w = vec2(0, 0); - /** barycentric coordinate for closest point */ - this.a = 0; - } - SimplexVertex.prototype.recycle = function () { - this.indexA = 0; - this.indexB = 0; - zeroVec2(this.wA); - zeroVec2(this.wB); - zeroVec2(this.w); - this.a = 0; - }; - SimplexVertex.prototype.set = function (v) { - this.indexA = v.indexA; - this.indexB = v.indexB; - copyVec2(this.wA, v.wA); - copyVec2(this.wB, v.wB); - copyVec2(this.w, v.w); - this.a = v.a; - }; - return SimplexVertex; -}()); -/** @internal */ var searchDirection_reuse = vec2(0, 0); -/** @internal */ var closestPoint_reuse = vec2(0, 0); -var Simplex = /** @class */ (function () { - function Simplex() { - this.m_v1 = new SimplexVertex(); - this.m_v2 = new SimplexVertex(); - this.m_v3 = new SimplexVertex(); - this.m_v = [this.m_v1, this.m_v2, this.m_v3]; - } - Simplex.prototype.recycle = function () { - this.m_v1.recycle(); - this.m_v2.recycle(); - this.m_v3.recycle(); - this.m_count = 0; - }; - /** @internal */ Simplex.prototype.toString = function () { - if (this.m_count === 3) { - return ["+" + this.m_count, - this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y, - this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y, - this.m_v3.a, this.m_v3.wA.x, this.m_v3.wA.y, this.m_v3.wB.x, this.m_v3.wB.y - ].toString(); - } - else if (this.m_count === 2) { - return ["+" + this.m_count, - this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y, - this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y - ].toString(); - } - else if (this.m_count === 1) { - return ["+" + this.m_count, - this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y - ].toString(); - } - else { - return "+" + this.m_count; - } - }; - Simplex.prototype.readCache = function (cache, proxyA, transformA, proxyB, transformB) { - // Copy data from cache. - this.m_count = cache.count; - for (var i = 0; i < this.m_count; ++i) { - var v = this.m_v[i]; - v.indexA = cache.indexA[i]; - v.indexB = cache.indexB[i]; - var wALocal = proxyA.getVertex(v.indexA); - var wBLocal = proxyB.getVertex(v.indexB); - transformVec2(v.wA, transformA, wALocal); - transformVec2(v.wB, transformB, wBLocal); - subVec2(v.w, v.wB, v.wA); - v.a = 0.0; - } - // Compute the new simplex metric, if it is substantially different than - // old metric then flush the simplex. - if (this.m_count > 1) { - var metric1 = cache.metric; - var metric2 = this.getMetric(); - if (metric2 < 0.5 * metric1 || 2.0 * metric1 < metric2 || metric2 < EPSILON) { - // Reset the simplex. - this.m_count = 0; - } - } - // If the cache is empty or invalid... - if (this.m_count === 0) { - var v = this.m_v[0]; - v.indexA = 0; - v.indexB = 0; - var wALocal = proxyA.getVertex(0); - var wBLocal = proxyB.getVertex(0); - transformVec2(v.wA, transformA, wALocal); - transformVec2(v.wB, transformB, wBLocal); - subVec2(v.w, v.wB, v.wA); - v.a = 1.0; - this.m_count = 1; - } - }; - Simplex.prototype.writeCache = function (cache) { - cache.metric = this.getMetric(); - cache.count = this.m_count; - for (var i = 0; i < this.m_count; ++i) { - cache.indexA[i] = this.m_v[i].indexA; - cache.indexB[i] = this.m_v[i].indexB; - } - }; - Simplex.prototype.getSearchDirection = function () { - var v1 = this.m_v1; - var v2 = this.m_v2; - this.m_v3; - switch (this.m_count) { - case 1: - return setVec2(searchDirection_reuse, -v1.w.x, -v1.w.y); - case 2: { - subVec2(e12, v2.w, v1.w); - var sgn = -crossVec2Vec2(e12, v1.w); - if (sgn > 0.0) { - // Origin is left of e12. - return setVec2(searchDirection_reuse, -e12.y, e12.x); - } - else { - // Origin is right of e12. - return setVec2(searchDirection_reuse, e12.y, -e12.x); - } - } - default: - return zeroVec2(searchDirection_reuse); - } - }; - Simplex.prototype.getClosestPoint = function () { - var v1 = this.m_v1; - var v2 = this.m_v2; - this.m_v3; - switch (this.m_count) { - case 0: - return zeroVec2(closestPoint_reuse); - case 1: - return copyVec2(closestPoint_reuse, v1.w); - case 2: - return combine2Vec2(closestPoint_reuse, v1.a, v1.w, v2.a, v2.w); - case 3: - return zeroVec2(closestPoint_reuse); - default: - return zeroVec2(closestPoint_reuse); - } - }; - Simplex.prototype.getWitnessPoints = function (pA, pB) { - var v1 = this.m_v1; - var v2 = this.m_v2; - var v3 = this.m_v3; - switch (this.m_count) { - case 0: - break; - case 1: - copyVec2(pA, v1.wA); - copyVec2(pB, v1.wB); - break; - case 2: - combine2Vec2(pA, v1.a, v1.wA, v2.a, v2.wA); - combine2Vec2(pB, v1.a, v1.wB, v2.a, v2.wB); - break; - case 3: - combine3Vec2(pA, v1.a, v1.wA, v2.a, v2.wA, v3.a, v3.wA); - copyVec2(pB, pA); - break; - } - }; - Simplex.prototype.getMetric = function () { - switch (this.m_count) { - case 0: - return 0.0; - case 1: - return 0.0; - case 2: - return distVec2(this.m_v1.w, this.m_v2.w); - case 3: - return crossVec2Vec2(subVec2(temp1, this.m_v2.w, this.m_v1.w), subVec2(temp2, this.m_v3.w, this.m_v1.w)); - default: - return 0.0; - } - }; - Simplex.prototype.solve = function () { - switch (this.m_count) { - case 1: - break; - case 2: - this.solve2(); - break; - case 3: - this.solve3(); - break; - } - }; - // Solve a line segment using barycentric coordinates. - // - // p = a1 * w1 + a2 * w2 - // a1 + a2 = 1 - // - // The vector from the origin to the closest point on the line is - // perpendicular to the line. - // e12 = w2 - w1 - // dot(p, e) = 0 - // a1 * dot(w1, e) + a2 * dot(w2, e) = 0 - // - // 2-by-2 linear system - // [1 1 ][a1] = [1] - // [w1.e12 w2.e12][a2] = [0] - // - // Define - // d12_1 = dot(w2, e12) - // d12_2 = -dot(w1, e12) - // d12 = d12_1 + d12_2 - // - // Solution - // a1 = d12_1 / d12 - // a2 = d12_2 / d12 - Simplex.prototype.solve2 = function () { - var w1 = this.m_v1.w; - var w2 = this.m_v2.w; - subVec2(e12, w2, w1); - // w1 region - var d12_2 = -dotVec2(w1, e12); - if (d12_2 <= 0.0) { - // a2 <= 0, so we clamp it to 0 - this.m_v1.a = 1.0; - this.m_count = 1; - return; + DistanceProxy2.prototype.getVertexCount = function() { + return this.m_count; + }; + DistanceProxy2.prototype.getVertex = function(index) { + return this.m_vertices[index]; + }; + DistanceProxy2.prototype.getSupport = function(d2) { + var bestIndex = -1; + var bestValue = -Infinity; + for (var i = 0; i < this.m_count; ++i) { + var value = dotVec2(this.m_vertices[i], d2); + if (value > bestValue) { + bestIndex = i; + bestValue = value; } - // w2 region - var d12_1 = dotVec2(w2, e12); - if (d12_1 <= 0.0) { - // a1 <= 0, so we clamp it to 0 - this.m_v2.a = 1.0; - this.m_count = 1; - this.m_v1.set(this.m_v2); - return; + } + return bestIndex; + }; + DistanceProxy2.prototype.getSupportVertex = function(d2) { + return this.m_vertices[this.getSupport(d2)]; + }; + DistanceProxy2.prototype.set = function(shape, index) { + shape.computeDistanceProxy(this, index); + }; + DistanceProxy2.prototype.setVertices = function(vertices, count, radius) { + this.m_vertices = vertices; + this.m_count = count; + this.m_radius = radius; + }; + return DistanceProxy2; + }() +); +var SimplexVertex = ( + /** @class */ + function() { + function SimplexVertex2() { + this.wA = vec2(0, 0); + this.indexA = 0; + this.wB = vec2(0, 0); + this.indexB = 0; + this.w = vec2(0, 0); + this.a = 0; + } + SimplexVertex2.prototype.recycle = function() { + this.indexA = 0; + this.indexB = 0; + zeroVec2(this.wA); + zeroVec2(this.wB); + zeroVec2(this.w); + this.a = 0; + }; + SimplexVertex2.prototype.set = function(v3) { + this.indexA = v3.indexA; + this.indexB = v3.indexB; + copyVec2(this.wA, v3.wA); + copyVec2(this.wB, v3.wB); + copyVec2(this.w, v3.w); + this.a = v3.a; + }; + return SimplexVertex2; + }() +); +var searchDirection_reuse = vec2(0, 0); +var closestPoint_reuse = vec2(0, 0); +var Simplex = ( + /** @class */ + function() { + function Simplex2() { + this.m_v1 = new SimplexVertex(); + this.m_v2 = new SimplexVertex(); + this.m_v3 = new SimplexVertex(); + this.m_v = [this.m_v1, this.m_v2, this.m_v3]; + } + Simplex2.prototype.recycle = function() { + this.m_v1.recycle(); + this.m_v2.recycle(); + this.m_v3.recycle(); + this.m_count = 0; + }; + Simplex2.prototype.toString = function() { + if (this.m_count === 3) { + return [ + "+" + this.m_count, + this.m_v1.a, + this.m_v1.wA.x, + this.m_v1.wA.y, + this.m_v1.wB.x, + this.m_v1.wB.y, + this.m_v2.a, + this.m_v2.wA.x, + this.m_v2.wA.y, + this.m_v2.wB.x, + this.m_v2.wB.y, + this.m_v3.a, + this.m_v3.wA.x, + this.m_v3.wA.y, + this.m_v3.wB.x, + this.m_v3.wB.y + ].toString(); + } else if (this.m_count === 2) { + return [ + "+" + this.m_count, + this.m_v1.a, + this.m_v1.wA.x, + this.m_v1.wA.y, + this.m_v1.wB.x, + this.m_v1.wB.y, + this.m_v2.a, + this.m_v2.wA.x, + this.m_v2.wA.y, + this.m_v2.wB.x, + this.m_v2.wB.y + ].toString(); + } else if (this.m_count === 1) { + return [ + "+" + this.m_count, + this.m_v1.a, + this.m_v1.wA.x, + this.m_v1.wA.y, + this.m_v1.wB.x, + this.m_v1.wB.y + ].toString(); + } else { + return "+" + this.m_count; + } + }; + Simplex2.prototype.readCache = function(cache2, proxyA, transformA, proxyB, transformB) { + this.m_count = cache2.count; + for (var i = 0; i < this.m_count; ++i) { + var v3 = this.m_v[i]; + v3.indexA = cache2.indexA[i]; + v3.indexB = cache2.indexB[i]; + var wALocal = proxyA.getVertex(v3.indexA); + var wBLocal = proxyB.getVertex(v3.indexB); + transformVec2(v3.wA, transformA, wALocal); + transformVec2(v3.wB, transformB, wBLocal); + subVec2(v3.w, v3.wB, v3.wA); + v3.a = 0; + } + if (this.m_count > 1) { + var metric1 = cache2.metric; + var metric2 = this.getMetric(); + if (metric2 < 0.5 * metric1 || 2 * metric1 < metric2 || metric2 < EPSILON) { + this.m_count = 0; + } + } + if (this.m_count === 0) { + var v3 = this.m_v[0]; + v3.indexA = 0; + v3.indexB = 0; + var wALocal = proxyA.getVertex(0); + var wBLocal = proxyB.getVertex(0); + transformVec2(v3.wA, transformA, wALocal); + transformVec2(v3.wB, transformB, wBLocal); + subVec2(v3.w, v3.wB, v3.wA); + v3.a = 1; + this.m_count = 1; + } + }; + Simplex2.prototype.writeCache = function(cache2) { + cache2.metric = this.getMetric(); + cache2.count = this.m_count; + for (var i = 0; i < this.m_count; ++i) { + cache2.indexA[i] = this.m_v[i].indexA; + cache2.indexB[i] = this.m_v[i].indexB; + } + }; + Simplex2.prototype.getSearchDirection = function() { + var v13 = this.m_v1; + var v22 = this.m_v2; + this.m_v3; + switch (this.m_count) { + case 1: + return setVec2(searchDirection_reuse, -v13.w.x, -v13.w.y); + case 2: { + subVec2(e12, v22.w, v13.w); + var sgn = -crossVec2Vec2(e12, v13.w); + if (sgn > 0) { + return setVec2(searchDirection_reuse, -e12.y, e12.x); + } else { + return setVec2(searchDirection_reuse, e12.y, -e12.x); + } } - // Must be in e12 region. - var inv_d12 = 1.0 / (d12_1 + d12_2); + default: + return zeroVec2(searchDirection_reuse); + } + }; + Simplex2.prototype.getClosestPoint = function() { + var v13 = this.m_v1; + var v22 = this.m_v2; + this.m_v3; + switch (this.m_count) { + case 0: + return zeroVec2(closestPoint_reuse); + case 1: + return copyVec2(closestPoint_reuse, v13.w); + case 2: + return combine2Vec2(closestPoint_reuse, v13.a, v13.w, v22.a, v22.w); + case 3: + return zeroVec2(closestPoint_reuse); + default: + return zeroVec2(closestPoint_reuse); + } + }; + Simplex2.prototype.getWitnessPoints = function(pA2, pB2) { + var v13 = this.m_v1; + var v22 = this.m_v2; + var v3 = this.m_v3; + switch (this.m_count) { + case 0: + break; + case 1: + copyVec2(pA2, v13.wA); + copyVec2(pB2, v13.wB); + break; + case 2: + combine2Vec2(pA2, v13.a, v13.wA, v22.a, v22.wA); + combine2Vec2(pB2, v13.a, v13.wB, v22.a, v22.wB); + break; + case 3: + combine3Vec2(pA2, v13.a, v13.wA, v22.a, v22.wA, v3.a, v3.wA); + copyVec2(pB2, pA2); + break; + } + }; + Simplex2.prototype.getMetric = function() { + switch (this.m_count) { + case 0: + return 0; + case 1: + return 0; + case 2: + return distVec2(this.m_v1.w, this.m_v2.w); + case 3: + return crossVec2Vec2(subVec2(temp1, this.m_v2.w, this.m_v1.w), subVec2(temp2, this.m_v3.w, this.m_v1.w)); + default: + return 0; + } + }; + Simplex2.prototype.solve = function() { + switch (this.m_count) { + case 1: + break; + case 2: + this.solve2(); + break; + case 3: + this.solve3(); + break; + } + }; + Simplex2.prototype.solve2 = function() { + var w1 = this.m_v1.w; + var w2 = this.m_v2.w; + subVec2(e12, w2, w1); + var d12_2 = -dotVec2(w1, e12); + if (d12_2 <= 0) { + this.m_v1.a = 1; + this.m_count = 1; + return; + } + var d12_1 = dotVec2(w2, e12); + if (d12_1 <= 0) { + this.m_v2.a = 1; + this.m_count = 1; + this.m_v1.set(this.m_v2); + return; + } + var inv_d12 = 1 / (d12_1 + d12_2); + this.m_v1.a = d12_1 * inv_d12; + this.m_v2.a = d12_2 * inv_d12; + this.m_count = 2; + }; + Simplex2.prototype.solve3 = function() { + var w1 = this.m_v1.w; + var w2 = this.m_v2.w; + var w3 = this.m_v3.w; + subVec2(e12, w2, w1); + var w1e12 = dotVec2(w1, e12); + var w2e12 = dotVec2(w2, e12); + var d12_1 = w2e12; + var d12_2 = -w1e12; + subVec2(e13, w3, w1); + var w1e13 = dotVec2(w1, e13); + var w3e13 = dotVec2(w3, e13); + var d13_1 = w3e13; + var d13_2 = -w1e13; + subVec2(e23, w3, w2); + var w2e23 = dotVec2(w2, e23); + var w3e23 = dotVec2(w3, e23); + var d23_1 = w3e23; + var d23_2 = -w2e23; + var n123 = crossVec2Vec2(e12, e13); + var d123_1 = n123 * crossVec2Vec2(w2, w3); + var d123_2 = n123 * crossVec2Vec2(w3, w1); + var d123_3 = n123 * crossVec2Vec2(w1, w2); + if (d12_2 <= 0 && d13_2 <= 0) { + this.m_v1.a = 1; + this.m_count = 1; + return; + } + if (d12_1 > 0 && d12_2 > 0 && d123_3 <= 0) { + var inv_d12 = 1 / (d12_1 + d12_2); this.m_v1.a = d12_1 * inv_d12; this.m_v2.a = d12_2 * inv_d12; this.m_count = 2; + return; + } + if (d13_1 > 0 && d13_2 > 0 && d123_2 <= 0) { + var inv_d13 = 1 / (d13_1 + d13_2); + this.m_v1.a = d13_1 * inv_d13; + this.m_v3.a = d13_2 * inv_d13; + this.m_count = 2; + this.m_v2.set(this.m_v3); + return; + } + if (d12_1 <= 0 && d23_2 <= 0) { + this.m_v2.a = 1; + this.m_count = 1; + this.m_v1.set(this.m_v2); + return; + } + if (d13_1 <= 0 && d23_1 <= 0) { + this.m_v3.a = 1; + this.m_count = 1; + this.m_v1.set(this.m_v3); + return; + } + if (d23_1 > 0 && d23_2 > 0 && d123_1 <= 0) { + var inv_d23 = 1 / (d23_1 + d23_2); + this.m_v2.a = d23_1 * inv_d23; + this.m_v3.a = d23_2 * inv_d23; + this.m_count = 2; + this.m_v1.set(this.m_v3); + return; + } + var inv_d123 = 1 / (d123_1 + d123_2 + d123_3); + this.m_v1.a = d123_1 * inv_d123; + this.m_v2.a = d123_2 * inv_d123; + this.m_v3.a = d123_3 * inv_d123; + this.m_count = 3; }; - // Possible regions: - // - points[2] - // - edge points[0]-points[2] - // - edge points[1]-points[2] - // - inside the triangle - Simplex.prototype.solve3 = function () { - var w1 = this.m_v1.w; - var w2 = this.m_v2.w; - var w3 = this.m_v3.w; - // Edge12 - // [1 1 ][a1] = [1] - // [w1.e12 w2.e12][a2] = [0] - // a3 = 0 - subVec2(e12, w2, w1); - var w1e12 = dotVec2(w1, e12); - var w2e12 = dotVec2(w2, e12); - var d12_1 = w2e12; - var d12_2 = -w1e12; - // Edge13 - // [1 1 ][a1] = [1] - // [w1.e13 w3.e13][a3] = [0] - // a2 = 0 - subVec2(e13, w3, w1); - var w1e13 = dotVec2(w1, e13); - var w3e13 = dotVec2(w3, e13); - var d13_1 = w3e13; - var d13_2 = -w1e13; - // Edge23 - // [1 1 ][a2] = [1] - // [w2.e23 w3.e23][a3] = [0] - // a1 = 0 - subVec2(e23, w3, w2); - var w2e23 = dotVec2(w2, e23); - var w3e23 = dotVec2(w3, e23); - var d23_1 = w3e23; - var d23_2 = -w2e23; - // Triangle123 - var n123 = crossVec2Vec2(e12, e13); - var d123_1 = n123 * crossVec2Vec2(w2, w3); - var d123_2 = n123 * crossVec2Vec2(w3, w1); - var d123_3 = n123 * crossVec2Vec2(w1, w2); - // w1 region - if (d12_2 <= 0.0 && d13_2 <= 0.0) { - this.m_v1.a = 1.0; - this.m_count = 1; - return; - } - // e12 - if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) { - var inv_d12 = 1.0 / (d12_1 + d12_2); - this.m_v1.a = d12_1 * inv_d12; - this.m_v2.a = d12_2 * inv_d12; - this.m_count = 2; - return; - } - // e13 - if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) { - var inv_d13 = 1.0 / (d13_1 + d13_2); - this.m_v1.a = d13_1 * inv_d13; - this.m_v3.a = d13_2 * inv_d13; - this.m_count = 2; - this.m_v2.set(this.m_v3); - return; - } - // w2 region - if (d12_1 <= 0.0 && d23_2 <= 0.0) { - this.m_v2.a = 1.0; - this.m_count = 1; - this.m_v1.set(this.m_v2); - return; - } - // w3 region - if (d13_1 <= 0.0 && d23_1 <= 0.0) { - this.m_v3.a = 1.0; - this.m_count = 1; - this.m_v1.set(this.m_v3); - return; - } - // e23 - if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) { - var inv_d23 = 1.0 / (d23_1 + d23_2); - this.m_v2.a = d23_1 * inv_d23; - this.m_v3.a = d23_2 * inv_d23; - this.m_count = 2; - this.m_v1.set(this.m_v3); - return; - } - // Must be in triangle123 - var inv_d123 = 1.0 / (d123_1 + d123_2 + d123_3); - this.m_v1.a = d123_1 * inv_d123; - this.m_v2.a = d123_2 * inv_d123; - this.m_v3.a = d123_3 * inv_d123; - this.m_count = 3; - }; - return Simplex; -}()); -/** @internal */ var simplex = new Simplex(); -/** @internal */ var input$1 = new DistanceInput(); -/** @internal */ var cache$1 = new SimplexCache(); -/** @internal */ var output$1 = new DistanceOutput(); -/** - * Determine if two generic shapes overlap. - */ -var testOverlap = function (shapeA, indexA, shapeB, indexB, xfA, xfB) { - input$1.recycle(); - input$1.proxyA.set(shapeA, indexA); - input$1.proxyB.set(shapeB, indexB); - copyTransform(input$1.transformA, xfA); - copyTransform(input$1.transformB, xfB); - input$1.useRadii = true; - output$1.recycle(); - cache$1.recycle(); - Distance(output$1, cache$1, input$1); - return output$1.distance < 10.0 * EPSILON; + return Simplex2; + }() +); +var simplex = new Simplex(); +var input$1 = new DistanceInput(); +var cache$1 = new SimplexCache(); +var output$1 = new DistanceOutput(); +var testOverlap = function(shapeA, indexA, shapeB, indexB, xfA2, xfB2) { + input$1.recycle(); + input$1.proxyA.set(shapeA, indexA); + input$1.proxyB.set(shapeB, indexB); + copyTransform(input$1.transformA, xfA2); + copyTransform(input$1.transformB, xfB2); + input$1.useRadii = true; + output$1.recycle(); + cache$1.recycle(); + Distance(output$1, cache$1, input$1); + return output$1.distance < 10 * EPSILON; }; -// legacy exports Distance.testOverlap = testOverlap; Distance.Input = DistanceInput; Distance.Output = DistanceOutput; Distance.Proxy = DistanceProxy; Distance.Cache = SimplexCache; -/** - * Input parameters for ShapeCast - */ -var ShapeCastInput = /** @class */ (function () { - function ShapeCastInput() { - this.proxyA = new DistanceProxy(); - this.proxyB = new DistanceProxy(); - this.transformA = Transform.identity(); - this.transformB = Transform.identity(); - this.translationB = Vec2.zero(); - } - ShapeCastInput.prototype.recycle = function () { - this.proxyA.recycle(); - this.proxyB.recycle(); - this.transformA.setIdentity(); - this.transformB.setIdentity(); - zeroVec2(this.translationB); - }; - return ShapeCastInput; -}()); -/** - * Output results for b2ShapeCast - */ -var ShapeCastOutput = /** @class */ (function () { - function ShapeCastOutput() { - this.point = Vec2.zero(); - this.normal = Vec2.zero(); - this.lambda = 1.0; - this.iterations = 0; - } - return ShapeCastOutput; -}()); -/** - * Perform a linear shape cast of shape B moving and shape A fixed. Determines - * the hit point, normal, and translation fraction. - * - * @returns true if hit, false if there is no hit or an initial overlap - */ -// -// GJK-raycast -// Algorithm by Gino van den Bergen. -// "Smooth Mesh Contacts with GJK" in Game Physics Pearls. 2010 -var ShapeCast = function (output, input) { - output.iterations = 0; - output.lambda = 1.0; - output.normal.setZero(); - output.point.setZero(); - var proxyA = input.proxyA; - var proxyB = input.proxyB; - var radiusA = math_max$5(proxyA.m_radius, SettingsInternal.polygonRadius); - var radiusB = math_max$5(proxyB.m_radius, SettingsInternal.polygonRadius); - var radius = radiusA + radiusB; - var xfA = input.transformA; - var xfB = input.transformB; - var r = input.translationB; - var n = Vec2.zero(); - var lambda = 0.0; - // Initial simplex - var simplex = new Simplex(); - simplex.m_count = 0; - // Get simplex vertices as an array. - var vertices = simplex.m_v; - // Get support point in -r direction - var indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(r))); - var wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA)); - var indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, r)); - var wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB)); - var v = Vec2.sub(wA, wB); - // Sigma is the target distance between polygons - var sigma = math_max$5(SettingsInternal.polygonRadius, radius - SettingsInternal.polygonRadius); - var tolerance = 0.5 * SettingsInternal.linearSlop; - // Main iteration loop. - var k_maxIters = 20; - var iter = 0; - while (iter < k_maxIters && v.length() - sigma > tolerance) { - output.iterations += 1; - // Support in direction -v (A - B) - indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(v))); - wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA)); - indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, v)); - wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB)); - var p = Vec2.sub(wA, wB); - // -v is a normal at p - v.normalize(); - // Intersect ray with plane - var vp = Vec2.dot(v, p); - var vr = Vec2.dot(v, r); - if (vp - sigma > lambda * vr) { - if (vr <= 0.0) { - return false; - } - lambda = (vp - sigma) / vr; - if (lambda > 1.0) { - return false; - } - n.setMul(-1, v); - simplex.m_count = 0; - } - // Reverse simplex since it works with B - A. - // Shift by lambda * r because we want the closest point to the current clip point. - // Note that the support point p is not shifted because we want the plane equation - // to be formed in unshifted space. - var vertex = vertices[simplex.m_count]; - vertex.indexA = indexB; - vertex.wA = Vec2.combine(1, wB, lambda, r); - vertex.indexB = indexA; - vertex.wB = wA; - vertex.w = Vec2.sub(vertex.wB, vertex.wA); - vertex.a = 1.0; - simplex.m_count += 1; - switch (simplex.m_count) { - case 1: - break; - case 2: - simplex.solve2(); - break; - case 3: - simplex.solve3(); - break; - } - // If we have 3 points, then the origin is in the corresponding triangle. - if (simplex.m_count == 3) { - // Overlap - return false; - } - // Get search direction. - v.setVec2(simplex.getClosestPoint()); - // Iteration count is equated to the number of support point calls. - ++iter; - } - if (iter == 0) { - // Initial overlap +var ShapeCastInput = ( + /** @class */ + function() { + function ShapeCastInput2() { + this.proxyA = new DistanceProxy(); + this.proxyB = new DistanceProxy(); + this.transformA = Transform.identity(); + this.transformB = Transform.identity(); + this.translationB = Vec2.zero(); + } + ShapeCastInput2.prototype.recycle = function() { + this.proxyA.recycle(); + this.proxyB.recycle(); + this.transformA.setIdentity(); + this.transformB.setIdentity(); + zeroVec2(this.translationB); + }; + return ShapeCastInput2; + }() +); +var ShapeCastOutput = ( + /** @class */ + /* @__PURE__ */ function() { + function ShapeCastOutput2() { + this.point = Vec2.zero(); + this.normal = Vec2.zero(); + this.lambda = 1; + this.iterations = 0; + } + return ShapeCastOutput2; + }() +); +var ShapeCast = function(output2, input2) { + output2.iterations = 0; + output2.lambda = 1; + output2.normal.setZero(); + output2.point.setZero(); + var proxyA = input2.proxyA; + var proxyB = input2.proxyB; + var radiusA = math_max$5(proxyA.m_radius, SettingsInternal.polygonRadius); + var radiusB = math_max$5(proxyB.m_radius, SettingsInternal.polygonRadius); + var radius = radiusA + radiusB; + var xfA2 = input2.transformA; + var xfB2 = input2.transformB; + var r = input2.translationB; + var n2 = Vec2.zero(); + var lambda = 0; + var simplex2 = new Simplex(); + simplex2.m_count = 0; + var vertices = simplex2.m_v; + var indexA = proxyA.getSupport(Rot.mulTVec2(xfA2.q, Vec2.neg(r))); + var wA = Transform.mulVec2(xfA2, proxyA.getVertex(indexA)); + var indexB = proxyB.getSupport(Rot.mulTVec2(xfB2.q, r)); + var wB = Transform.mulVec2(xfB2, proxyB.getVertex(indexB)); + var v3 = Vec2.sub(wA, wB); + var sigma = math_max$5(SettingsInternal.polygonRadius, radius - SettingsInternal.polygonRadius); + var tolerance = 0.5 * SettingsInternal.linearSlop; + var k_maxIters = 20; + var iter = 0; + while (iter < k_maxIters && v3.length() - sigma > tolerance) { + output2.iterations += 1; + indexA = proxyA.getSupport(Rot.mulTVec2(xfA2.q, Vec2.neg(v3))); + wA = Transform.mulVec2(xfA2, proxyA.getVertex(indexA)); + indexB = proxyB.getSupport(Rot.mulTVec2(xfB2.q, v3)); + wB = Transform.mulVec2(xfB2, proxyB.getVertex(indexB)); + var p = Vec2.sub(wA, wB); + v3.normalize(); + var vp = Vec2.dot(v3, p); + var vr = Vec2.dot(v3, r); + if (vp - sigma > lambda * vr) { + if (vr <= 0) { + return false; + } + lambda = (vp - sigma) / vr; + if (lambda > 1) { return false; + } + n2.setMul(-1, v3); + simplex2.m_count = 0; + } + var vertex = vertices[simplex2.m_count]; + vertex.indexA = indexB; + vertex.wA = Vec2.combine(1, wB, lambda, r); + vertex.indexB = indexA; + vertex.wB = wA; + vertex.w = Vec2.sub(vertex.wB, vertex.wA); + vertex.a = 1; + simplex2.m_count += 1; + switch (simplex2.m_count) { + case 1: + break; + case 2: + simplex2.solve2(); + break; + case 3: + simplex2.solve3(); + break; } - // Prepare output. - var pointA = Vec2.zero(); - var pointB = Vec2.zero(); - simplex.getWitnessPoints(pointB, pointA); - if (v.lengthSquared() > 0.0) { - n.setMul(-1, v); - n.normalize(); + if (simplex2.m_count == 3) { + return false; } - output.point = Vec2.combine(1, pointA, radiusA, n); - output.normal = n; - output.lambda = lambda; - output.iterations = iter; - return true; + v3.setVec2(simplex2.getClosestPoint()); + ++iter; + } + if (iter == 0) { + return false; + } + var pointA2 = Vec2.zero(); + var pointB2 = Vec2.zero(); + simplex2.getWitnessPoints(pointB2, pointA2); + if (v3.lengthSquared() > 0) { + n2.setMul(-1, v3); + n2.normalize(); + } + output2.point = Vec2.combine(1, pointA2, radiusA, n2); + output2.normal = n2; + output2.lambda = lambda; + output2.iterations = iter; + return true; }; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$8 = Math.abs; -/** @internal */ var math_max$4 = Math.max; -/** - * Input parameters for TimeOfImpact. - */ -var TOIInput = /** @class */ (function () { - function TOIInput() { - this.proxyA = new DistanceProxy(); - this.proxyB = new DistanceProxy(); - this.sweepA = new Sweep(); - this.sweepB = new Sweep(); - } - TOIInput.prototype.recycle = function () { - this.proxyA.recycle(); - this.proxyB.recycle(); - this.sweepA.recycle(); - this.sweepB.recycle(); - this.tMax = -1; - }; - return TOIInput; -}()); +var math_abs$8 = Math.abs; +var math_max$4 = Math.max; +var TOIInput = ( + /** @class */ + function() { + function TOIInput2() { + this.proxyA = new DistanceProxy(); + this.proxyB = new DistanceProxy(); + this.sweepA = new Sweep(); + this.sweepB = new Sweep(); + } + TOIInput2.prototype.recycle = function() { + this.proxyA.recycle(); + this.proxyB.recycle(); + this.sweepA.recycle(); + this.sweepB.recycle(); + this.tMax = -1; + }; + return TOIInput2; + }() +); var TOIOutputState; -(function (TOIOutputState) { - TOIOutputState[TOIOutputState["e_unset"] = -1] = "e_unset"; - TOIOutputState[TOIOutputState["e_unknown"] = 0] = "e_unknown"; - TOIOutputState[TOIOutputState["e_failed"] = 1] = "e_failed"; - TOIOutputState[TOIOutputState["e_overlapped"] = 2] = "e_overlapped"; - TOIOutputState[TOIOutputState["e_touching"] = 3] = "e_touching"; - TOIOutputState[TOIOutputState["e_separated"] = 4] = "e_separated"; +(function(TOIOutputState2) { + TOIOutputState2[TOIOutputState2["e_unset"] = -1] = "e_unset"; + TOIOutputState2[TOIOutputState2["e_unknown"] = 0] = "e_unknown"; + TOIOutputState2[TOIOutputState2["e_failed"] = 1] = "e_failed"; + TOIOutputState2[TOIOutputState2["e_overlapped"] = 2] = "e_overlapped"; + TOIOutputState2[TOIOutputState2["e_touching"] = 3] = "e_touching"; + TOIOutputState2[TOIOutputState2["e_separated"] = 4] = "e_separated"; })(TOIOutputState || (TOIOutputState = {})); -/** - * Output parameters for TimeOfImpact. - */ -var TOIOutput = /** @class */ (function () { - function TOIOutput() { - this.state = TOIOutputState.e_unset; - this.t = -1; +var TOIOutput = ( + /** @class */ + function() { + function TOIOutput2() { + this.state = TOIOutputState.e_unset; + this.t = -1; } - TOIOutput.prototype.recycle = function () { - this.state = TOIOutputState.e_unset; - this.t = -1; + TOIOutput2.prototype.recycle = function() { + this.state = TOIOutputState.e_unset; + this.t = -1; }; - return TOIOutput; -}()); + return TOIOutput2; + }() +); stats$1.toiTime = 0; stats$1.toiMaxTime = 0; stats$1.toiCalls = 0; @@ -5299,10784 +3759,7883 @@ stats$1.toiIters = 0; stats$1.toiMaxIters = 0; stats$1.toiRootIters = 0; stats$1.toiMaxRootIters = 0; -/** @internal */ var distanceInput = new DistanceInput(); -/** @internal */ var distanceOutput = new DistanceOutput(); -// this is passed to Distance and SeparationFunction -/** @internal */ var cache = new SimplexCache(); -/** @internal */ var xfA$1 = transform(0, 0, 0); -/** @internal */ var xfB$1 = transform(0, 0, 0); -/** @internal */ var temp$4 = vec2(0, 0); -/** @internal */ var pointA$2 = vec2(0, 0); -/** @internal */ var pointB$2 = vec2(0, 0); -/** @internal */ var normal$3 = vec2(0, 0); -/** @internal */ var axisA = vec2(0, 0); -/** @internal */ var axisB = vec2(0, 0); -/** @internal */ var localPointA = vec2(0, 0); -/** @internal */ var localPointB = vec2(0, 0); -/** - * Compute the upper bound on time before two shapes penetrate. Time is - * represented as a fraction between [0,tMax]. This uses a swept separating axis - * and may miss some intermediate, non-tunneling collisions. If you change the - * time interval, you should call this function again. - * - * Note: use Distance to compute the contact point and normal at the time of - * impact. - * - * CCD via the local separating axis method. This seeks progression by computing - * the largest time at which separation is maintained. - */ -var TimeOfImpact = function (output, input) { - var timer = Timer.now(); - ++stats$1.toiCalls; - output.state = TOIOutputState.e_unknown; - output.t = input.tMax; - var proxyA = input.proxyA; // DistanceProxy - var proxyB = input.proxyB; // DistanceProxy - var sweepA = input.sweepA; // Sweep - var sweepB = input.sweepB; // Sweep - // Large rotations can make the root finder fail, so we normalize the - // sweep angles. - sweepA.normalize(); - sweepB.normalize(); - var tMax = input.tMax; - var totalRadius = proxyA.m_radius + proxyB.m_radius; - var target = math_max$4(SettingsInternal.linearSlop, totalRadius - 3.0 * SettingsInternal.linearSlop); - var tolerance = 0.25 * SettingsInternal.linearSlop; - var t1 = 0.0; - var k_maxIterations = SettingsInternal.maxTOIIterations; - var iter = 0; - // Prepare input for distance query. - // const cache = new SimplexCache(); - cache.recycle(); - distanceInput.proxyA.setVertices(proxyA.m_vertices, proxyA.m_count, proxyA.m_radius); - distanceInput.proxyB.setVertices(proxyB.m_vertices, proxyB.m_count, proxyB.m_radius); - distanceInput.useRadii = false; - // The outer loop progressively attempts to compute new separating axes. - // This loop terminates when an axis is repeated (no progress is made). +var distanceInput = new DistanceInput(); +var distanceOutput = new DistanceOutput(); +var cache = new SimplexCache(); +var xfA$1 = transform(0, 0, 0); +var xfB$1 = transform(0, 0, 0); +var temp$4 = vec2(0, 0); +var pointA$2 = vec2(0, 0); +var pointB$2 = vec2(0, 0); +var normal$3 = vec2(0, 0); +var axisA = vec2(0, 0); +var axisB = vec2(0, 0); +var localPointA = vec2(0, 0); +var localPointB = vec2(0, 0); +var TimeOfImpact = function(output2, input2) { + var timer = Timer.now(); + ++stats$1.toiCalls; + output2.state = TOIOutputState.e_unknown; + output2.t = input2.tMax; + var proxyA = input2.proxyA; + var proxyB = input2.proxyB; + var sweepA = input2.sweepA; + var sweepB = input2.sweepB; + sweepA.normalize(); + sweepB.normalize(); + var tMax = input2.tMax; + var totalRadius = proxyA.m_radius + proxyB.m_radius; + var target = math_max$4(SettingsInternal.linearSlop, totalRadius - 3 * SettingsInternal.linearSlop); + var tolerance = 0.25 * SettingsInternal.linearSlop; + var t1 = 0; + var k_maxIterations = SettingsInternal.maxTOIIterations; + var iter = 0; + cache.recycle(); + distanceInput.proxyA.setVertices(proxyA.m_vertices, proxyA.m_count, proxyA.m_radius); + distanceInput.proxyB.setVertices(proxyB.m_vertices, proxyB.m_count, proxyB.m_radius); + distanceInput.useRadii = false; + while (true) { + sweepA.getTransform(xfA$1, t1); + sweepB.getTransform(xfB$1, t1); + copyTransform(distanceInput.transformA, xfA$1); + copyTransform(distanceInput.transformB, xfB$1); + Distance(distanceOutput, cache, distanceInput); + if (distanceOutput.distance <= 0) { + output2.state = TOIOutputState.e_overlapped; + output2.t = 0; + break; + } + if (distanceOutput.distance < target + tolerance) { + output2.state = TOIOutputState.e_touching; + output2.t = t1; + break; + } + separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1); + var done = false; + var t2 = tMax; + var pushBackIter = 0; while (true) { - sweepA.getTransform(xfA$1, t1); - sweepB.getTransform(xfB$1, t1); - // Get the distance between shapes. We can also use the results - // to get a separating axis. - copyTransform(distanceInput.transformA, xfA$1); - copyTransform(distanceInput.transformB, xfB$1); - Distance(distanceOutput, cache, distanceInput); - // If the shapes are overlapped, we give up on continuous collision. - if (distanceOutput.distance <= 0.0) { - // Failure! - output.state = TOIOutputState.e_overlapped; - output.t = 0.0; - break; - } - if (distanceOutput.distance < target + tolerance) { - // Victory! - output.state = TOIOutputState.e_touching; - output.t = t1; - break; - } - // Initialize the separating axis. - separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1); - // if (false) { - // // Dump the curve seen by the root finder - // const N = 100; - // const dx = 1.0 / N; - // const xs = []; // [ N + 1 ]; - // const fs = []; // [ N + 1 ]; - // const x = 0.0; - // for (const i = 0; i <= N; ++i) { - // sweepA.getTransform(xfA, x); - // sweepB.getTransform(xfB, x); - // const f = fcn.evaluate(xfA, xfB) - target; - // printf("%g %g\n", x, f); - // xs[i] = x; - // fs[i] = f; - // x += dx; - // } - // } - // Compute the TOI on the separating axis. We do this by successively - // resolving the deepest point. This loop is bounded by the number of - // vertices. - var done = false; - var t2 = tMax; - var pushBackIter = 0; - while (true) { - // Find the deepest point at t2. Store the witness point indices. - var s2 = separationFunction.findMinSeparation(t2); - // Is the final configuration separated? - if (s2 > target + tolerance) { - // Victory! - output.state = TOIOutputState.e_separated; - output.t = tMax; - done = true; - break; - } - // Has the separation reached tolerance? - if (s2 > target - tolerance) { - // Advance the sweeps - t1 = t2; - break; - } - // Compute the initial separation of the witness points. - var s1 = separationFunction.evaluate(t1); - // Check for initial overlap. This might happen if the root finder - // runs out of iterations. - if (s1 < target - tolerance) { - output.state = TOIOutputState.e_failed; - output.t = t1; - done = true; - break; - } - // Check for touching - if (s1 <= target + tolerance) { - // Victory! t1 should hold the TOI (could be 0.0). - output.state = TOIOutputState.e_touching; - output.t = t1; - done = true; - break; - } - // Compute 1D root of: f(x) - target = 0 - var rootIterCount = 0; - var a1 = t1; - var a2 = t2; - while (true) { - // Use a mix of the secant rule and bisection. - var t = void 0; - if (rootIterCount & 1) { - // Secant rule to improve convergence. - t = a1 + (target - s1) * (a2 - a1) / (s2 - s1); - } - else { - // Bisection to guarantee progress. - t = 0.5 * (a1 + a2); - } - ++rootIterCount; - ++stats$1.toiRootIters; - var s = separationFunction.evaluate(t); - if (math_abs$8(s - target) < tolerance) { - // t2 holds a tentative value for t1 - t2 = t; - break; - } - // Ensure we continue to bracket the root. - if (s > target) { - a1 = t; - s1 = s; - } - else { - a2 = t; - s2 = s; - } - if (rootIterCount === 50) { - break; - } - } - stats$1.toiMaxRootIters = math_max$4(stats$1.toiMaxRootIters, rootIterCount); - ++pushBackIter; - if (pushBackIter === SettingsInternal.maxPolygonVertices) { - break; - } - } - ++iter; - ++stats$1.toiIters; - if (done) { - break; + var s2 = separationFunction.findMinSeparation(t2); + if (s2 > target + tolerance) { + output2.state = TOIOutputState.e_separated; + output2.t = tMax; + done = true; + break; + } + if (s2 > target - tolerance) { + t1 = t2; + break; + } + var s1 = separationFunction.evaluate(t1); + if (s1 < target - tolerance) { + output2.state = TOIOutputState.e_failed; + output2.t = t1; + done = true; + break; + } + if (s1 <= target + tolerance) { + output2.state = TOIOutputState.e_touching; + output2.t = t1; + done = true; + break; + } + var rootIterCount = 0; + var a1 = t1; + var a2 = t2; + while (true) { + var t = void 0; + if (rootIterCount & 1) { + t = a1 + (target - s1) * (a2 - a1) / (s2 - s1); + } else { + t = 0.5 * (a1 + a2); + } + ++rootIterCount; + ++stats$1.toiRootIters; + var s3 = separationFunction.evaluate(t); + if (math_abs$8(s3 - target) < tolerance) { + t2 = t; + break; + } + if (s3 > target) { + a1 = t; + s1 = s3; + } else { + a2 = t; + s2 = s3; } - if (iter === k_maxIterations) { - // Root finder got stuck. Semi-victory. - output.state = TOIOutputState.e_failed; - output.t = t1; - break; + if (rootIterCount === 50) { + break; } + } + stats$1.toiMaxRootIters = math_max$4(stats$1.toiMaxRootIters, rootIterCount); + ++pushBackIter; + if (pushBackIter === SettingsInternal.maxPolygonVertices) { + break; + } + } + ++iter; + ++stats$1.toiIters; + if (done) { + break; + } + if (iter === k_maxIterations) { + output2.state = TOIOutputState.e_failed; + output2.t = t1; + break; } - stats$1.toiMaxIters = math_max$4(stats$1.toiMaxIters, iter); - var time = Timer.diff(timer); - stats$1.toiMaxTime = math_max$4(stats$1.toiMaxTime, time); - stats$1.toiTime += time; - separationFunction.recycle(); + } + stats$1.toiMaxIters = math_max$4(stats$1.toiMaxIters, iter); + var time = Timer.diff(timer); + stats$1.toiMaxTime = math_max$4(stats$1.toiMaxTime, time); + stats$1.toiTime += time; + separationFunction.recycle(); }; var SeparationFunctionType; -(function (SeparationFunctionType) { - SeparationFunctionType[SeparationFunctionType["e_unset"] = -1] = "e_unset"; - SeparationFunctionType[SeparationFunctionType["e_points"] = 1] = "e_points"; - SeparationFunctionType[SeparationFunctionType["e_faceA"] = 2] = "e_faceA"; - SeparationFunctionType[SeparationFunctionType["e_faceB"] = 3] = "e_faceB"; +(function(SeparationFunctionType2) { + SeparationFunctionType2[SeparationFunctionType2["e_unset"] = -1] = "e_unset"; + SeparationFunctionType2[SeparationFunctionType2["e_points"] = 1] = "e_points"; + SeparationFunctionType2[SeparationFunctionType2["e_faceA"] = 2] = "e_faceA"; + SeparationFunctionType2[SeparationFunctionType2["e_faceB"] = 3] = "e_faceB"; })(SeparationFunctionType || (SeparationFunctionType = {})); -var SeparationFunction = /** @class */ (function () { - function SeparationFunction() { - // input cache - // todo: maybe assign by copy instead of reference? - this.m_proxyA = null; - this.m_proxyB = null; - this.m_sweepA = null; - this.m_sweepB = null; - // initialize cache - this.m_type = SeparationFunctionType.e_unset; - this.m_localPoint = vec2(0, 0); - this.m_axis = vec2(0, 0); - // compute output - this.indexA = -1; - this.indexB = -1; - } - SeparationFunction.prototype.recycle = function () { - this.m_proxyA = null; - this.m_proxyB = null; - this.m_sweepA = null; - this.m_sweepB = null; - this.m_type = SeparationFunctionType.e_unset; - zeroVec2(this.m_localPoint); - zeroVec2(this.m_axis); - this.indexA = -1; - this.indexB = -1; - }; - // TODO_ERIN might not need to return the separation - SeparationFunction.prototype.initialize = function (cache, proxyA, sweepA, proxyB, sweepB, t1) { - var count = cache.count; - this.m_proxyA = proxyA; - this.m_proxyB = proxyB; - this.m_sweepA = sweepA; - this.m_sweepB = sweepB; - this.m_sweepA.getTransform(xfA$1, t1); - this.m_sweepB.getTransform(xfB$1, t1); - if (count === 1) { - this.m_type = SeparationFunctionType.e_points; - var localPointA_1 = this.m_proxyA.getVertex(cache.indexA[0]); - var localPointB_1 = this.m_proxyB.getVertex(cache.indexB[0]); - transformVec2(pointA$2, xfA$1, localPointA_1); - transformVec2(pointB$2, xfB$1, localPointB_1); - subVec2(this.m_axis, pointB$2, pointA$2); - var s = normalizeVec2Length(this.m_axis); - return s; - } - else if (cache.indexA[0] === cache.indexA[1]) { - // Two points on B and one on A. - this.m_type = SeparationFunctionType.e_faceB; - var localPointB1 = proxyB.getVertex(cache.indexB[0]); - var localPointB2 = proxyB.getVertex(cache.indexB[1]); - crossVec2Num(this.m_axis, subVec2(temp$4, localPointB2, localPointB1), 1.0); - normalizeVec2(this.m_axis); - rotVec2(normal$3, xfB$1.q, this.m_axis); - combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2); - transformVec2(pointB$2, xfB$1, this.m_localPoint); - var localPointA_2 = proxyA.getVertex(cache.indexA[0]); - var pointA_1 = Transform.mulVec2(xfA$1, localPointA_2); - var s = dotVec2(pointA_1, normal$3) - dotVec2(pointB$2, normal$3); - if (s < 0.0) { - negVec2(this.m_axis); - s = -s; - } - return s; - } - else { - // Two points on A and one or two points on B. - this.m_type = SeparationFunctionType.e_faceA; - var localPointA1 = this.m_proxyA.getVertex(cache.indexA[0]); - var localPointA2 = this.m_proxyA.getVertex(cache.indexA[1]); - crossVec2Num(this.m_axis, subVec2(temp$4, localPointA2, localPointA1), 1.0); - normalizeVec2(this.m_axis); - rotVec2(normal$3, xfA$1.q, this.m_axis); - combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2); - transformVec2(pointA$2, xfA$1, this.m_localPoint); - var localPointB_2 = this.m_proxyB.getVertex(cache.indexB[0]); - transformVec2(pointB$2, xfB$1, localPointB_2); - var s = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); - if (s < 0.0) { - negVec2(this.m_axis); - s = -s; - } - return s; - } - }; - SeparationFunction.prototype.compute = function (find, t) { - // It was findMinSeparation and evaluate - this.m_sweepA.getTransform(xfA$1, t); - this.m_sweepB.getTransform(xfB$1, t); - switch (this.m_type) { - case SeparationFunctionType.e_points: { - if (find) { - derotVec2(axisA, xfA$1.q, this.m_axis); - derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, this.m_axis)); - this.indexA = this.m_proxyA.getSupport(axisA); - this.indexB = this.m_proxyB.getSupport(axisB); - } - copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); - copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); - transformVec2(pointA$2, xfA$1, localPointA); - transformVec2(pointB$2, xfB$1, localPointB); - var sep = dotVec2(pointB$2, this.m_axis) - dotVec2(pointA$2, this.m_axis); - return sep; - } - case SeparationFunctionType.e_faceA: { - rotVec2(normal$3, xfA$1.q, this.m_axis); - transformVec2(pointA$2, xfA$1, this.m_localPoint); - if (find) { - derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, normal$3)); - this.indexA = -1; - this.indexB = this.m_proxyB.getSupport(axisB); - } - copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); - transformVec2(pointB$2, xfB$1, localPointB); - var sep = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); - return sep; - } - case SeparationFunctionType.e_faceB: { - rotVec2(normal$3, xfB$1.q, this.m_axis); - transformVec2(pointB$2, xfB$1, this.m_localPoint); - if (find) { - derotVec2(axisA, xfA$1.q, scaleVec2(temp$4, -1, normal$3)); - this.indexB = -1; - this.indexA = this.m_proxyA.getSupport(axisA); - } - copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); - transformVec2(pointA$2, xfA$1, localPointA); - var sep = dotVec2(pointA$2, normal$3) - dotVec2(pointB$2, normal$3); - return sep; - } - default: - if (find) { - this.indexA = -1; - this.indexB = -1; - } - return 0.0; - } +var SeparationFunction = ( + /** @class */ + function() { + function SeparationFunction2() { + this.m_proxyA = null; + this.m_proxyB = null; + this.m_sweepA = null; + this.m_sweepB = null; + this.m_type = SeparationFunctionType.e_unset; + this.m_localPoint = vec2(0, 0); + this.m_axis = vec2(0, 0); + this.indexA = -1; + this.indexB = -1; + } + SeparationFunction2.prototype.recycle = function() { + this.m_proxyA = null; + this.m_proxyB = null; + this.m_sweepA = null; + this.m_sweepB = null; + this.m_type = SeparationFunctionType.e_unset; + zeroVec2(this.m_localPoint); + zeroVec2(this.m_axis); + this.indexA = -1; + this.indexB = -1; + }; + SeparationFunction2.prototype.initialize = function(cache2, proxyA, sweepA, proxyB, sweepB, t1) { + var count = cache2.count; + this.m_proxyA = proxyA; + this.m_proxyB = proxyB; + this.m_sweepA = sweepA; + this.m_sweepB = sweepB; + this.m_sweepA.getTransform(xfA$1, t1); + this.m_sweepB.getTransform(xfB$1, t1); + if (count === 1) { + this.m_type = SeparationFunctionType.e_points; + var localPointA_1 = this.m_proxyA.getVertex(cache2.indexA[0]); + var localPointB_1 = this.m_proxyB.getVertex(cache2.indexB[0]); + transformVec2(pointA$2, xfA$1, localPointA_1); + transformVec2(pointB$2, xfB$1, localPointB_1); + subVec2(this.m_axis, pointB$2, pointA$2); + var s2 = normalizeVec2Length(this.m_axis); + return s2; + } else if (cache2.indexA[0] === cache2.indexA[1]) { + this.m_type = SeparationFunctionType.e_faceB; + var localPointB1 = proxyB.getVertex(cache2.indexB[0]); + var localPointB2 = proxyB.getVertex(cache2.indexB[1]); + crossVec2Num(this.m_axis, subVec2(temp$4, localPointB2, localPointB1), 1); + normalizeVec2(this.m_axis); + rotVec2(normal$3, xfB$1.q, this.m_axis); + combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2); + transformVec2(pointB$2, xfB$1, this.m_localPoint); + var localPointA_2 = proxyA.getVertex(cache2.indexA[0]); + var pointA_1 = Transform.mulVec2(xfA$1, localPointA_2); + var s2 = dotVec2(pointA_1, normal$3) - dotVec2(pointB$2, normal$3); + if (s2 < 0) { + negVec2(this.m_axis); + s2 = -s2; + } + return s2; + } else { + this.m_type = SeparationFunctionType.e_faceA; + var localPointA1 = this.m_proxyA.getVertex(cache2.indexA[0]); + var localPointA2 = this.m_proxyA.getVertex(cache2.indexA[1]); + crossVec2Num(this.m_axis, subVec2(temp$4, localPointA2, localPointA1), 1); + normalizeVec2(this.m_axis); + rotVec2(normal$3, xfA$1.q, this.m_axis); + combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2); + transformVec2(pointA$2, xfA$1, this.m_localPoint); + var localPointB_2 = this.m_proxyB.getVertex(cache2.indexB[0]); + transformVec2(pointB$2, xfB$1, localPointB_2); + var s2 = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); + if (s2 < 0) { + negVec2(this.m_axis); + s2 = -s2; + } + return s2; + } + }; + SeparationFunction2.prototype.compute = function(find, t) { + this.m_sweepA.getTransform(xfA$1, t); + this.m_sweepB.getTransform(xfB$1, t); + switch (this.m_type) { + case SeparationFunctionType.e_points: { + if (find) { + derotVec2(axisA, xfA$1.q, this.m_axis); + derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, this.m_axis)); + this.indexA = this.m_proxyA.getSupport(axisA); + this.indexB = this.m_proxyB.getSupport(axisB); + } + copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); + copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); + transformVec2(pointA$2, xfA$1, localPointA); + transformVec2(pointB$2, xfB$1, localPointB); + var sep = dotVec2(pointB$2, this.m_axis) - dotVec2(pointA$2, this.m_axis); + return sep; + } + case SeparationFunctionType.e_faceA: { + rotVec2(normal$3, xfA$1.q, this.m_axis); + transformVec2(pointA$2, xfA$1, this.m_localPoint); + if (find) { + derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, normal$3)); + this.indexA = -1; + this.indexB = this.m_proxyB.getSupport(axisB); + } + copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); + transformVec2(pointB$2, xfB$1, localPointB); + var sep = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); + return sep; + } + case SeparationFunctionType.e_faceB: { + rotVec2(normal$3, xfB$1.q, this.m_axis); + transformVec2(pointB$2, xfB$1, this.m_localPoint); + if (find) { + derotVec2(axisA, xfA$1.q, scaleVec2(temp$4, -1, normal$3)); + this.indexB = -1; + this.indexA = this.m_proxyA.getSupport(axisA); + } + copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); + transformVec2(pointA$2, xfA$1, localPointA); + var sep = dotVec2(pointA$2, normal$3) - dotVec2(pointB$2, normal$3); + return sep; + } + default: + if (find) { + this.indexA = -1; + this.indexB = -1; + } + return 0; + } }; - SeparationFunction.prototype.findMinSeparation = function (t) { - return this.compute(true, t); + SeparationFunction2.prototype.findMinSeparation = function(t) { + return this.compute(true, t); }; - SeparationFunction.prototype.evaluate = function (t) { - return this.compute(false, t); + SeparationFunction2.prototype.evaluate = function(t) { + return this.compute(false, t); }; - return SeparationFunction; -}()); -/** @internal */ var separationFunction = new SeparationFunction(); -// legacy exports + return SeparationFunction2; + }() +); +var separationFunction = new SeparationFunction(); TimeOfImpact.Input = TOIInput; TimeOfImpact.Output = TOIOutput; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$7 = Math.abs; -/** @internal */ var math_sqrt$5 = Math.sqrt; -/** @internal */ var math_min$6 = Math.min; -var TimeStep = /** @class */ (function () { - function TimeStep() { - /** time step */ - this.dt = 0; - /** inverse time step (0 if dt == 0) */ - this.inv_dt = 0; - this.velocityIterations = 0; - this.positionIterations = 0; - this.warmStarting = false; - this.blockSolve = true; - /** timestep ratio for variable timestep */ - this.inv_dt0 = 0.0; - /** dt * inv_dt0 */ - this.dtRatio = 1; - } - TimeStep.prototype.reset = function (dt) { - if (this.dt > 0.0) { - this.inv_dt0 = this.inv_dt; - } - this.dt = dt; - this.inv_dt = dt == 0 ? 0 : 1 / dt; - this.dtRatio = dt * this.inv_dt0; - }; - return TimeStep; -}()); -// reuse -/** @internal */ var s_subStep = new TimeStep(); -/** @internal */ var c = vec2(0, 0); -/** @internal */ var v = vec2(0, 0); -/** @internal */ var translation = vec2(0, 0); -/** @internal */ var input = new TOIInput(); -/** @internal */ var output = new TOIOutput(); -/** @internal */ var backup = new Sweep(); -/** @internal */ var backup1 = new Sweep(); -/** @internal */ var backup2 = new Sweep(); -/** - * Contact impulses for reporting. Impulses are used instead of forces because - * sub-step forces may approach infinity for rigid body collisions. These match - * up one-to-one with the contact points in Manifold. - */ -var ContactImpulse = /** @class */ (function () { - function ContactImpulse(contact) { - this.contact = contact; - this.normals = []; - this.tangents = []; - } - ContactImpulse.prototype.recycle = function () { - this.normals.length = 0; - this.tangents.length = 0; - }; - Object.defineProperty(ContactImpulse.prototype, "normalImpulses", { - get: function () { - var contact = this.contact; - var normals = this.normals; - normals.length = 0; - for (var p = 0; p < contact.v_points.length; ++p) { - normals.push(contact.v_points[p].normalImpulse); - } - return normals; - }, - enumerable: false, - configurable: true +var math_abs$7 = Math.abs; +var math_sqrt$5 = Math.sqrt; +var math_min$6 = Math.min; +var TimeStep = ( + /** @class */ + function() { + function TimeStep2() { + this.dt = 0; + this.inv_dt = 0; + this.velocityIterations = 0; + this.positionIterations = 0; + this.warmStarting = false; + this.blockSolve = true; + this.inv_dt0 = 0; + this.dtRatio = 1; + } + TimeStep2.prototype.reset = function(dt) { + if (this.dt > 0) { + this.inv_dt0 = this.inv_dt; + } + this.dt = dt; + this.inv_dt = dt == 0 ? 0 : 1 / dt; + this.dtRatio = dt * this.inv_dt0; + }; + return TimeStep2; + }() +); +var s_subStep = new TimeStep(); +var c = vec2(0, 0); +var v = vec2(0, 0); +var translation = vec2(0, 0); +var input = new TOIInput(); +var output = new TOIOutput(); +var backup = new Sweep(); +var backup1 = new Sweep(); +var backup2 = new Sweep(); +var ContactImpulse = ( + /** @class */ + function() { + function ContactImpulse2(contact) { + this.contact = contact; + this.normals = []; + this.tangents = []; + } + ContactImpulse2.prototype.recycle = function() { + this.normals.length = 0; + this.tangents.length = 0; + }; + Object.defineProperty(ContactImpulse2.prototype, "normalImpulses", { + get: function() { + var contact = this.contact; + var normals = this.normals; + normals.length = 0; + for (var p = 0; p < contact.v_points.length; ++p) { + normals.push(contact.v_points[p].normalImpulse); + } + return normals; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(ContactImpulse.prototype, "tangentImpulses", { - get: function () { - var contact = this.contact; - var tangents = this.tangents; - tangents.length = 0; - for (var p = 0; p < contact.v_points.length; ++p) { - tangents.push(contact.v_points[p].tangentImpulse); - } - return tangents; - }, - enumerable: false, - configurable: true + Object.defineProperty(ContactImpulse2.prototype, "tangentImpulses", { + get: function() { + var contact = this.contact; + var tangents = this.tangents; + tangents.length = 0; + for (var p = 0; p < contact.v_points.length; ++p) { + tangents.push(contact.v_points[p].tangentImpulse); + } + return tangents; + }, + enumerable: false, + configurable: true }); - return ContactImpulse; -}()); -/** - * Finds and solves islands. An island is a connected subset of the world. - */ -var Solver = /** @class */ (function () { - function Solver(world) { - this.m_world = world; - this.m_stack = []; - this.m_bodies = []; - this.m_contacts = []; - this.m_joints = []; + return ContactImpulse2; + }() +); +var Solver = ( + /** @class */ + function() { + function Solver2(world) { + this.m_world = world; + this.m_stack = []; + this.m_bodies = []; + this.m_contacts = []; + this.m_joints = []; } - Solver.prototype.clear = function () { - this.m_stack.length = 0; - this.m_bodies.length = 0; - this.m_contacts.length = 0; - this.m_joints.length = 0; - }; - Solver.prototype.addBody = function (body) { - this.m_bodies.push(body); - // why? - // body.c_position.c.setZero(); - // body.c_position.a = 0; - // body.c_velocity.v.setZero(); - // body.c_velocity.w = 0; - }; - Solver.prototype.addContact = function (contact) { - // false && console.assert(contact instanceof Contact, 'Not a Contact!', contact); - this.m_contacts.push(contact); - }; - Solver.prototype.addJoint = function (joint) { - this.m_joints.push(joint); - }; - Solver.prototype.solveWorld = function (step) { - var world = this.m_world; - // Clear all the island flags. - for (var b = world.m_bodyList; b; b = b.m_next) { - b.m_islandFlag = false; - } - for (var c_1 = world.m_contactList; c_1; c_1 = c_1.m_next) { - c_1.m_islandFlag = false; - } - for (var j = world.m_jointList; j; j = j.m_next) { - j.m_islandFlag = false; - } - // Build and simulate all awake islands. - var stack = this.m_stack; - for (var seed = world.m_bodyList; seed; seed = seed.m_next) { - if (seed.m_islandFlag) { - continue; - } - if (seed.isAwake() == false || seed.isActive() == false) { - continue; - } - // The seed can be dynamic or kinematic. - if (seed.isStatic()) { - continue; - } - // Reset island and stack. - this.clear(); - stack.push(seed); - seed.m_islandFlag = true; - // Perform a depth first search (DFS) on the constraint graph. - while (stack.length > 0) { - // Grab the next body off the stack and add it to the island. - var b = stack.pop(); - this.addBody(b); - // Make sure the body is awake (without resetting sleep timer). - b.m_awakeFlag = true; - // To keep islands as small as possible, we don't - // propagate islands across static bodies. - if (b.isStatic()) { - continue; - } - // Search all contacts connected to this body. - for (var ce = b.m_contactList; ce; ce = ce.next) { - var contact = ce.contact; - // Has this contact already been added to an island? - if (contact.m_islandFlag) { - continue; - } - // Is this contact solid and touching? - if (contact.isEnabled() == false || contact.isTouching() == false) { - continue; - } - // Skip sensors. - var sensorA = contact.m_fixtureA.m_isSensor; - var sensorB = contact.m_fixtureB.m_isSensor; - if (sensorA || sensorB) { - continue; - } - this.addContact(contact); - contact.m_islandFlag = true; - var other = ce.other; - // Was the other body already added to this island? - if (other.m_islandFlag) { - continue; - } - // false && console.assert(stack.length < world.m_bodyCount); - stack.push(other); - other.m_islandFlag = true; - } - // Search all joints connect to this body. - for (var je = b.m_jointList; je; je = je.next) { - if (je.joint.m_islandFlag == true) { - continue; - } - var other = je.other; - // Don't simulate joints connected to inactive bodies. - if (other.isActive() == false) { - continue; - } - this.addJoint(je.joint); - je.joint.m_islandFlag = true; - if (other.m_islandFlag) { - continue; - } - // false && console.assert(stack.length < world.m_bodyCount); - stack.push(other); - other.m_islandFlag = true; - } - } - this.solveIsland(step); - // Post solve cleanup. - for (var i = 0; i < this.m_bodies.length; ++i) { - // Allow static bodies to participate in other islands. - // TODO: are they added at all? - var b = this.m_bodies[i]; - if (b.isStatic()) { - b.m_islandFlag = false; - } - } - } + Solver2.prototype.clear = function() { + this.m_stack.length = 0; + this.m_bodies.length = 0; + this.m_contacts.length = 0; + this.m_joints.length = 0; }; - Solver.prototype.solveIsland = function (step) { - // B2: Island Solve - var world = this.m_world; - var gravity = world.m_gravity; - var allowSleep = world.m_allowSleep; - var h = step.dt; - // Integrate velocities and apply damping. Initialize the body state. - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(c, body.m_sweep.c); - var a = body.m_sweep.a; - copyVec2(v, body.m_linearVelocity); - var w = body.m_angularVelocity; - // Store positions for continuous collision. - copyVec2(body.m_sweep.c0, body.m_sweep.c); - body.m_sweep.a0 = body.m_sweep.a; - if (body.isDynamic()) { - // Integrate velocities. - plusScaleVec2(v, h * body.m_gravityScale, gravity); - plusScaleVec2(v, h * body.m_invMass, body.m_force); - w += h * body.m_invI * body.m_torque; - /** - *
-                 * Apply damping.
-                 * ODE: dv/dt + c * v = 0
-                 * Solution: v(t) = v0 * exp(-c * t)
-                 * Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)
-                 * v2 = exp(-c * dt) * v1
-                 * Pade approximation:
-                 * v2 = v1 * 1 / (1 + c * dt)
-                 * 
- */ - scaleVec2(v, 1.0 / (1.0 + h * body.m_linearDamping), v); - w *= 1.0 / (1.0 + h * body.m_angularDamping); - } - copyVec2(body.c_position.c, c); - body.c_position.a = a; - copyVec2(body.c_velocity.v, v); - body.c_velocity.w = w; - } - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initConstraint(step); - } - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initVelocityConstraint(step); + Solver2.prototype.addBody = function(body) { + this.m_bodies.push(body); + }; + Solver2.prototype.addContact = function(contact) { + this.m_contacts.push(contact); + }; + Solver2.prototype.addJoint = function(joint) { + this.m_joints.push(joint); + }; + Solver2.prototype.solveWorld = function(step) { + var world = this.m_world; + for (var b2 = world.m_bodyList; b2; b2 = b2.m_next) { + b2.m_islandFlag = false; + } + for (var c_1 = world.m_contactList; c_1; c_1 = c_1.m_next) { + c_1.m_islandFlag = false; + } + for (var j = world.m_jointList; j; j = j.m_next) { + j.m_islandFlag = false; + } + var stack = this.m_stack; + for (var seed = world.m_bodyList; seed; seed = seed.m_next) { + if (seed.m_islandFlag) { + continue; } - if (step.warmStarting) { - // Warm start. - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.warmStartConstraint(step); - } + if (seed.isAwake() == false || seed.isActive() == false) { + continue; } - for (var i = 0; i < this.m_joints.length; ++i) { - var joint = this.m_joints[i]; - joint.initVelocityConstraints(step); + if (seed.isStatic()) { + continue; } - // Solve velocity constraints - for (var i = 0; i < step.velocityIterations; ++i) { - for (var j = 0; j < this.m_joints.length; ++j) { - var joint = this.m_joints[j]; - joint.solveVelocityConstraints(step); + this.clear(); + stack.push(seed); + seed.m_islandFlag = true; + while (stack.length > 0) { + var b2 = stack.pop(); + this.addBody(b2); + b2.m_awakeFlag = true; + if (b2.isStatic()) { + continue; + } + for (var ce = b2.m_contactList; ce; ce = ce.next) { + var contact = ce.contact; + if (contact.m_islandFlag) { + continue; } - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - contact.solveVelocityConstraint(step); + if (contact.isEnabled() == false || contact.isTouching() == false) { + continue; } - } - // Store impulses for warm starting - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.storeConstraintImpulses(step); - } - // Integrate positions - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(c, body.c_position.c); - var a = body.c_position.a; - copyVec2(v, body.c_velocity.v); - var w = body.c_velocity.w; - // Check for large velocities - scaleVec2(translation, h, v); - var translationLengthSqr = lengthSqrVec2(translation); - if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { - var ratio = SettingsInternal.maxTranslation / math_sqrt$5(translationLengthSqr); - mulVec2(v, ratio); + var sensorA = contact.m_fixtureA.m_isSensor; + var sensorB = contact.m_fixtureB.m_isSensor; + if (sensorA || sensorB) { + continue; } - var rotation = h * w; - if (rotation * rotation > SettingsInternal.maxRotationSquared) { - var ratio = SettingsInternal.maxRotation / math_abs$7(rotation); - w *= ratio; + this.addContact(contact); + contact.m_islandFlag = true; + var other = ce.other; + if (other.m_islandFlag) { + continue; } - // Integrate - plusScaleVec2(c, h, v); - a += h * w; - copyVec2(body.c_position.c, c); - body.c_position.a = a; - copyVec2(body.c_velocity.v, v); - body.c_velocity.w = w; - } - // Solve position constraints - var positionSolved = false; - for (var i = 0; i < step.positionIterations; ++i) { - var minSeparation = 0.0; - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - var separation = contact.solvePositionConstraint(step); - minSeparation = math_min$6(minSeparation, separation); + stack.push(other); + other.m_islandFlag = true; + } + for (var je = b2.m_jointList; je; je = je.next) { + if (je.joint.m_islandFlag == true) { + continue; } - // We can't expect minSpeparation >= -Settings.linearSlop because we don't - // push the separation above -Settings.linearSlop. - var contactsOkay = minSeparation >= -3.0 * SettingsInternal.linearSlop; - var jointsOkay = true; - for (var j = 0; j < this.m_joints.length; ++j) { - var joint = this.m_joints[j]; - var jointOkay = joint.solvePositionConstraints(step); - jointsOkay = jointsOkay && jointOkay; + var other = je.other; + if (other.isActive() == false) { + continue; } - if (contactsOkay && jointsOkay) { - // Exit early if the position errors are small. - positionSolved = true; - break; + this.addJoint(je.joint); + je.joint.m_islandFlag = true; + if (other.m_islandFlag) { + continue; } + stack.push(other); + other.m_islandFlag = true; + } } - // Copy state buffers back to the bodies + this.solveIsland(step); for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(body.m_sweep.c, body.c_position.c); - body.m_sweep.a = body.c_position.a; - copyVec2(body.m_linearVelocity, body.c_velocity.v); - body.m_angularVelocity = body.c_velocity.w; - body.synchronizeTransform(); - } - this.postSolveIsland(); - if (allowSleep) { - var minSleepTime = Infinity; - var linTolSqr = SettingsInternal.linearSleepToleranceSqr; - var angTolSqr = SettingsInternal.angularSleepToleranceSqr; - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - if (body.isStatic()) { - continue; - } - if ((body.m_autoSleepFlag == false) - || (body.m_angularVelocity * body.m_angularVelocity > angTolSqr) - || (lengthSqrVec2(body.m_linearVelocity) > linTolSqr)) { - body.m_sleepTime = 0.0; - minSleepTime = 0.0; - } - else { - body.m_sleepTime += h; - minSleepTime = math_min$6(minSleepTime, body.m_sleepTime); - } - } - if (minSleepTime >= SettingsInternal.timeToSleep && positionSolved) { - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - body.setAwake(false); - } - } + var b2 = this.m_bodies[i]; + if (b2.isStatic()) { + b2.m_islandFlag = false; + } } + } }; - /** - * Find TOI contacts and solve them. - */ - Solver.prototype.solveWorldTOI = function (step) { - var world = this.m_world; - if (world.m_stepComplete) { - for (var b = world.m_bodyList; b; b = b.m_next) { - b.m_islandFlag = false; - b.m_sweep.alpha0 = 0.0; - } - for (var c_2 = world.m_contactList; c_2; c_2 = c_2.m_next) { - // Invalidate TOI - c_2.m_toiFlag = false; - c_2.m_islandFlag = false; - c_2.m_toiCount = 0; - c_2.m_toi = 1.0; - } + Solver2.prototype.solveIsland = function(step) { + var world = this.m_world; + var gravity = world.m_gravity; + var allowSleep = world.m_allowSleep; + var h = step.dt; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(c, body.m_sweep.c); + var a2 = body.m_sweep.a; + copyVec2(v, body.m_linearVelocity); + var w = body.m_angularVelocity; + copyVec2(body.m_sweep.c0, body.m_sweep.c); + body.m_sweep.a0 = body.m_sweep.a; + if (body.isDynamic()) { + plusScaleVec2(v, h * body.m_gravityScale, gravity); + plusScaleVec2(v, h * body.m_invMass, body.m_force); + w += h * body.m_invI * body.m_torque; + scaleVec2(v, 1 / (1 + h * body.m_linearDamping), v); + w *= 1 / (1 + h * body.m_angularDamping); + } + copyVec2(body.c_position.c, c); + body.c_position.a = a2; + copyVec2(body.c_velocity.v, v); + body.c_velocity.w = w; + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initConstraint(step); + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initVelocityConstraint(step); + } + if (step.warmStarting) { + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.warmStartConstraint(step); + } + } + for (var i = 0; i < this.m_joints.length; ++i) { + var joint = this.m_joints[i]; + joint.initVelocityConstraints(step); + } + for (var i = 0; i < step.velocityIterations; ++i) { + for (var j = 0; j < this.m_joints.length; ++j) { + var joint = this.m_joints[j]; + joint.solveVelocityConstraints(step); + } + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + contact.solveVelocityConstraint(step); + } + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.storeConstraintImpulses(step); + } + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(c, body.c_position.c); + var a2 = body.c_position.a; + copyVec2(v, body.c_velocity.v); + var w = body.c_velocity.w; + scaleVec2(translation, h, v); + var translationLengthSqr = lengthSqrVec2(translation); + if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { + var ratio = SettingsInternal.maxTranslation / math_sqrt$5(translationLengthSqr); + mulVec2(v, ratio); + } + var rotation2 = h * w; + if (rotation2 * rotation2 > SettingsInternal.maxRotationSquared) { + var ratio = SettingsInternal.maxRotation / math_abs$7(rotation2); + w *= ratio; + } + plusScaleVec2(c, h, v); + a2 += h * w; + copyVec2(body.c_position.c, c); + body.c_position.a = a2; + copyVec2(body.c_velocity.v, v); + body.c_velocity.w = w; + } + var positionSolved = false; + for (var i = 0; i < step.positionIterations; ++i) { + var minSeparation = 0; + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + var separation = contact.solvePositionConstraint(step); + minSeparation = math_min$6(minSeparation, separation); + } + var contactsOkay = minSeparation >= -3 * SettingsInternal.linearSlop; + var jointsOkay = true; + for (var j = 0; j < this.m_joints.length; ++j) { + var joint = this.m_joints[j]; + var jointOkay = joint.solvePositionConstraints(step); + jointsOkay = jointsOkay && jointOkay; + } + if (contactsOkay && jointsOkay) { + positionSolved = true; + break; + } + } + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(body.m_sweep.c, body.c_position.c); + body.m_sweep.a = body.c_position.a; + copyVec2(body.m_linearVelocity, body.c_velocity.v); + body.m_angularVelocity = body.c_velocity.w; + body.synchronizeTransform(); + } + this.postSolveIsland(); + if (allowSleep) { + var minSleepTime = Infinity; + var linTolSqr = SettingsInternal.linearSleepToleranceSqr; + var angTolSqr = SettingsInternal.angularSleepToleranceSqr; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + if (body.isStatic()) { + continue; + } + if (body.m_autoSleepFlag == false || body.m_angularVelocity * body.m_angularVelocity > angTolSqr || lengthSqrVec2(body.m_linearVelocity) > linTolSqr) { + body.m_sleepTime = 0; + minSleepTime = 0; + } else { + body.m_sleepTime += h; + minSleepTime = math_min$6(minSleepTime, body.m_sleepTime); + } } - // Find TOI events and solve them. - while (true) { - // Find the first TOI. - var minContact = null; - var minAlpha = 1.0; - for (var c_3 = world.m_contactList; c_3; c_3 = c_3.m_next) { - // Is this contact disabled? - if (c_3.isEnabled() == false) { - continue; - } - // Prevent excessive sub-stepping. - if (c_3.m_toiCount > SettingsInternal.maxSubSteps) { - continue; - } - var alpha = 1.0; - if (c_3.m_toiFlag) { - // This contact has a valid cached TOI. - alpha = c_3.m_toi; - } - else { - var fA_1 = c_3.getFixtureA(); - var fB_1 = c_3.getFixtureB(); - // Is there a sensor? - if (fA_1.isSensor() || fB_1.isSensor()) { - continue; - } - var bA_1 = fA_1.getBody(); - var bB_1 = fB_1.getBody(); - var activeA = bA_1.isAwake() && !bA_1.isStatic(); - var activeB = bB_1.isAwake() && !bB_1.isStatic(); - // Is at least one body active (awake and dynamic or kinematic)? - if (activeA == false && activeB == false) { - continue; - } - var collideA = bA_1.isBullet() || !bA_1.isDynamic(); - var collideB = bB_1.isBullet() || !bB_1.isDynamic(); - // Are these two non-bullet dynamic bodies? - if (collideA == false && collideB == false) { - continue; - } - // Compute the TOI for this contact. - // Put the sweeps onto the same time interval. - var alpha0 = bA_1.m_sweep.alpha0; - if (bA_1.m_sweep.alpha0 < bB_1.m_sweep.alpha0) { - alpha0 = bB_1.m_sweep.alpha0; - bA_1.m_sweep.advance(alpha0); - } - else if (bB_1.m_sweep.alpha0 < bA_1.m_sweep.alpha0) { - alpha0 = bA_1.m_sweep.alpha0; - bB_1.m_sweep.advance(alpha0); - } - var indexA = c_3.getChildIndexA(); - var indexB = c_3.getChildIndexB(); - bA_1.m_sweep; - bB_1.m_sweep; - // Compute the time of impact in interval [0, minTOI] - input.proxyA.set(fA_1.getShape(), indexA); - input.proxyB.set(fB_1.getShape(), indexB); - input.sweepA.set(bA_1.m_sweep); - input.sweepB.set(bB_1.m_sweep); - input.tMax = 1.0; - TimeOfImpact(output, input); - // Beta is the fraction of the remaining portion of the [time?]. - var beta = output.t; - if (output.state == TOIOutputState.e_touching) { - alpha = math_min$6(alpha0 + (1.0 - alpha0) * beta, 1.0); - } - else { - alpha = 1.0; - } - c_3.m_toi = alpha; - c_3.m_toiFlag = true; - } - if (alpha < minAlpha) { - // This is the minimum TOI found so far. - minContact = c_3; - minAlpha = alpha; - } - } - if (minContact == null || 1.0 - 10.0 * EPSILON < minAlpha) { - // No more TOI events. Done! - world.m_stepComplete = true; - break; - } - // Advance the bodies to the TOI. - var fA = minContact.getFixtureA(); - var fB = minContact.getFixtureB(); - var bA = fA.getBody(); - var bB = fB.getBody(); - backup1.set(bA.m_sweep); - backup2.set(bB.m_sweep); - bA.advance(minAlpha); - bB.advance(minAlpha); - // The TOI contact likely has some new contact points. - minContact.update(world); - minContact.m_toiFlag = false; - ++minContact.m_toiCount; - // Is the contact solid? - if (minContact.isEnabled() == false || minContact.isTouching() == false) { - // Restore the sweeps. - minContact.setEnabled(false); - bA.m_sweep.set(backup1); - bB.m_sweep.set(backup2); - bA.synchronizeTransform(); - bB.synchronizeTransform(); - continue; - } - bA.setAwake(true); - bB.setAwake(true); - // Build the island - this.clear(); - this.addBody(bA); - this.addBody(bB); - this.addContact(minContact); - bA.m_islandFlag = true; - bB.m_islandFlag = true; - minContact.m_islandFlag = true; - // Get contacts on bodyA and bodyB. - var bodies = [bA, bB]; - for (var i = 0; i < bodies.length; ++i) { - var body = bodies[i]; - if (body.isDynamic()) { - for (var ce = body.m_contactList; ce; ce = ce.next) { - // if (this.m_bodyCount == this.m_bodyCapacity) { break; } - // if (this.m_contactCount == this.m_contactCapacity) { break; } - var contact = ce.contact; - // Has this contact already been added to the island? - if (contact.m_islandFlag) { - continue; - } - // Only add if either is static, kinematic or bullet. - var other = ce.other; - if (other.isDynamic() && !body.isBullet() && !other.isBullet()) { - continue; - } - // Skip sensors. - var sensorA = contact.m_fixtureA.m_isSensor; - var sensorB = contact.m_fixtureB.m_isSensor; - if (sensorA || sensorB) { - continue; - } - // Tentatively advance the body to the TOI. - backup.set(other.m_sweep); - if (other.m_islandFlag == false) { - other.advance(minAlpha); - } - // Update the contact points - contact.update(world); - // Was the contact disabled by the user? - // Are there contact points? - if (contact.isEnabled() == false || contact.isTouching() == false) { - other.m_sweep.set(backup); - other.synchronizeTransform(); - continue; - } - // Add the contact to the island - contact.m_islandFlag = true; - this.addContact(contact); - // Has the other body already been added to the island? - if (other.m_islandFlag) { - continue; - } - // Add the other body to the island. - other.m_islandFlag = true; - if (!other.isStatic()) { - other.setAwake(true); - } - this.addBody(other); - } - } - } - s_subStep.reset((1.0 - minAlpha) * step.dt); - s_subStep.dtRatio = 1.0; - s_subStep.positionIterations = 20; - s_subStep.velocityIterations = step.velocityIterations; - s_subStep.warmStarting = false; - this.solveIslandTOI(s_subStep, bA, bB); - // Reset island flags and synchronize broad-phase proxies. - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - body.m_islandFlag = false; - if (!body.isDynamic()) { - continue; - } - body.synchronizeFixtures(); - // Invalidate all contact TOIs on this displaced body. - for (var ce = body.m_contactList; ce; ce = ce.next) { - ce.contact.m_toiFlag = false; - ce.contact.m_islandFlag = false; - } - } - // Commit fixture proxy movements to the broad-phase so that new contacts - // are created. - // Also, some contacts can be destroyed. - world.findNewContacts(); - if (world.m_subStepping) { - world.m_stepComplete = false; - break; - } + if (minSleepTime >= SettingsInternal.timeToSleep && positionSolved) { + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + body.setAwake(false); + } } + } }; - Solver.prototype.solveIslandTOI = function (subStep, toiA, toiB) { - // Initialize the body state. - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(body.c_position.c, body.m_sweep.c); - body.c_position.a = body.m_sweep.a; - copyVec2(body.c_velocity.v, body.m_linearVelocity); - body.c_velocity.w = body.m_angularVelocity; + Solver2.prototype.solveWorldTOI = function(step) { + var world = this.m_world; + if (world.m_stepComplete) { + for (var b2 = world.m_bodyList; b2; b2 = b2.m_next) { + b2.m_islandFlag = false; + b2.m_sweep.alpha0 = 0; } - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initConstraint(subStep); - } - // Solve position constraints. - for (var i = 0; i < subStep.positionIterations; ++i) { - var minSeparation = 0.0; - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - var separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB); - minSeparation = math_min$6(minSeparation, separation); + for (var c_2 = world.m_contactList; c_2; c_2 = c_2.m_next) { + c_2.m_toiFlag = false; + c_2.m_islandFlag = false; + c_2.m_toiCount = 0; + c_2.m_toi = 1; + } + } + while (true) { + var minContact = null; + var minAlpha = 1; + for (var c_3 = world.m_contactList; c_3; c_3 = c_3.m_next) { + if (c_3.isEnabled() == false) { + continue; + } + if (c_3.m_toiCount > SettingsInternal.maxSubSteps) { + continue; + } + var alpha = 1; + if (c_3.m_toiFlag) { + alpha = c_3.m_toi; + } else { + var fA_1 = c_3.getFixtureA(); + var fB_1 = c_3.getFixtureB(); + if (fA_1.isSensor() || fB_1.isSensor()) { + continue; + } + var bA_1 = fA_1.getBody(); + var bB_1 = fB_1.getBody(); + var activeA = bA_1.isAwake() && !bA_1.isStatic(); + var activeB = bB_1.isAwake() && !bB_1.isStatic(); + if (activeA == false && activeB == false) { + continue; } - // We can't expect minSpeparation >= -Settings.linearSlop because we don't - // push the separation above -Settings.linearSlop. - var contactsOkay = minSeparation >= -1.5 * SettingsInternal.linearSlop; - if (contactsOkay) { - break; + var collideA = bA_1.isBullet() || !bA_1.isDynamic(); + var collideB = bB_1.isBullet() || !bB_1.isDynamic(); + if (collideA == false && collideB == false) { + continue; } + var alpha0 = bA_1.m_sweep.alpha0; + if (bA_1.m_sweep.alpha0 < bB_1.m_sweep.alpha0) { + alpha0 = bB_1.m_sweep.alpha0; + bA_1.m_sweep.advance(alpha0); + } else if (bB_1.m_sweep.alpha0 < bA_1.m_sweep.alpha0) { + alpha0 = bA_1.m_sweep.alpha0; + bB_1.m_sweep.advance(alpha0); + } + var indexA = c_3.getChildIndexA(); + var indexB = c_3.getChildIndexB(); + bA_1.m_sweep; + bB_1.m_sweep; + input.proxyA.set(fA_1.getShape(), indexA); + input.proxyB.set(fB_1.getShape(), indexB); + input.sweepA.set(bA_1.m_sweep); + input.sweepB.set(bB_1.m_sweep); + input.tMax = 1; + TimeOfImpact(output, input); + var beta = output.t; + if (output.state == TOIOutputState.e_touching) { + alpha = math_min$6(alpha0 + (1 - alpha0) * beta, 1); + } else { + alpha = 1; + } + c_3.m_toi = alpha; + c_3.m_toiFlag = true; + } + if (alpha < minAlpha) { + minContact = c_3; + minAlpha = alpha; + } } - var i; - // Leap of faith to new safe state. - copyVec2(toiA.m_sweep.c0, toiA.c_position.c); - toiA.m_sweep.a0 = toiA.c_position.a; - copyVec2(toiB.m_sweep.c0, toiB.c_position.c); - toiB.m_sweep.a0 = toiB.c_position.a; - // No warm starting is needed for TOI events because warm - // starting impulses were applied in the discrete solver. - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initVelocityConstraint(subStep); - } - // Solve velocity constraints. - for (var i = 0; i < subStep.velocityIterations; ++i) { - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - contact.solveVelocityConstraint(subStep); + if (minContact == null || 1 - 10 * EPSILON < minAlpha) { + world.m_stepComplete = true; + break; + } + var fA = minContact.getFixtureA(); + var fB = minContact.getFixtureB(); + var bA = fA.getBody(); + var bB = fB.getBody(); + backup1.set(bA.m_sweep); + backup2.set(bB.m_sweep); + bA.advance(minAlpha); + bB.advance(minAlpha); + minContact.update(world); + minContact.m_toiFlag = false; + ++minContact.m_toiCount; + if (minContact.isEnabled() == false || minContact.isTouching() == false) { + minContact.setEnabled(false); + bA.m_sweep.set(backup1); + bB.m_sweep.set(backup2); + bA.synchronizeTransform(); + bB.synchronizeTransform(); + continue; + } + bA.setAwake(true); + bB.setAwake(true); + this.clear(); + this.addBody(bA); + this.addBody(bB); + this.addContact(minContact); + bA.m_islandFlag = true; + bB.m_islandFlag = true; + minContact.m_islandFlag = true; + var bodies = [bA, bB]; + for (var i = 0; i < bodies.length; ++i) { + var body = bodies[i]; + if (body.isDynamic()) { + for (var ce = body.m_contactList; ce; ce = ce.next) { + var contact = ce.contact; + if (contact.m_islandFlag) { + continue; + } + var other = ce.other; + if (other.isDynamic() && !body.isBullet() && !other.isBullet()) { + continue; + } + var sensorA = contact.m_fixtureA.m_isSensor; + var sensorB = contact.m_fixtureB.m_isSensor; + if (sensorA || sensorB) { + continue; + } + backup.set(other.m_sweep); + if (other.m_islandFlag == false) { + other.advance(minAlpha); + } + contact.update(world); + if (contact.isEnabled() == false || contact.isTouching() == false) { + other.m_sweep.set(backup); + other.synchronizeTransform(); + continue; + } + contact.m_islandFlag = true; + this.addContact(contact); + if (other.m_islandFlag) { + continue; + } + other.m_islandFlag = true; + if (!other.isStatic()) { + other.setAwake(true); + } + this.addBody(other); } + } } - // Don't store the TOI contact forces for warm starting - // because they can be quite large. - var h = subStep.dt; - // Integrate positions + s_subStep.reset((1 - minAlpha) * step.dt); + s_subStep.dtRatio = 1; + s_subStep.positionIterations = 20; + s_subStep.velocityIterations = step.velocityIterations; + s_subStep.warmStarting = false; + this.solveIslandTOI(s_subStep, bA, bB); for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(c, body.c_position.c); - var a = body.c_position.a; - copyVec2(v, body.c_velocity.v); - var w = body.c_velocity.w; - // Check for large velocities - scaleVec2(translation, h, v); - var translationLengthSqr = lengthSqrVec2(translation); - if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { - var ratio = SettingsInternal.maxTranslation / math_sqrt$5(translationLengthSqr); - mulVec2(v, ratio); - } - var rotation = h * w; - if (rotation * rotation > SettingsInternal.maxRotationSquared) { - var ratio = SettingsInternal.maxRotation / math_abs$7(rotation); - w *= ratio; - } - // Integrate - plusScaleVec2(c, h, v); - a += h * w; - copyVec2(body.c_position.c, c); - body.c_position.a = a; - copyVec2(body.c_velocity.v, v); - body.c_velocity.w = w; - // Sync bodies - copyVec2(body.m_sweep.c, c); - body.m_sweep.a = a; - copyVec2(body.m_linearVelocity, v); - body.m_angularVelocity = w; - body.synchronizeTransform(); - } - this.postSolveIsland(); - }; - /** @internal */ - Solver.prototype.postSolveIsland = function () { - for (var c_5 = 0; c_5 < this.m_contacts.length; ++c_5) { - var contact = this.m_contacts[c_5]; - this.m_world.postSolve(contact, contact.m_impulse); - } - }; - return Solver; -}()); -// @ts-ignore -Solver.TimeStep = TimeStep; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** - * A 2-by-2 matrix. Stored in column-major order. - */ -var Mat22 = /** @class */ (function () { - function Mat22(a, b, c, d) { - if (typeof a === "object" && a !== null) { - this.ex = Vec2.clone(a); - this.ey = Vec2.clone(b); + var body = this.m_bodies[i]; + body.m_islandFlag = false; + if (!body.isDynamic()) { + continue; + } + body.synchronizeFixtures(); + for (var ce = body.m_contactList; ce; ce = ce.next) { + ce.contact.m_toiFlag = false; + ce.contact.m_islandFlag = false; + } } - else if (typeof a === "number") { - this.ex = Vec2.neo(a, c); - this.ey = Vec2.neo(b, d); + world.findNewContacts(); + if (world.m_subStepping) { + world.m_stepComplete = false; + break; + } + } + }; + Solver2.prototype.solveIslandTOI = function(subStep, toiA, toiB) { + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(body.c_position.c, body.m_sweep.c); + body.c_position.a = body.m_sweep.a; + copyVec2(body.c_velocity.v, body.m_linearVelocity); + body.c_velocity.w = body.m_angularVelocity; + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initConstraint(subStep); + } + for (var i = 0; i < subStep.positionIterations; ++i) { + var minSeparation = 0; + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + var separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB); + minSeparation = math_min$6(minSeparation, separation); } - else { - this.ex = Vec2.zero(); - this.ey = Vec2.zero(); + var contactsOkay = minSeparation >= -1.5 * SettingsInternal.linearSlop; + if (contactsOkay) { + break; } + } + var i; + copyVec2(toiA.m_sweep.c0, toiA.c_position.c); + toiA.m_sweep.a0 = toiA.c_position.a; + copyVec2(toiB.m_sweep.c0, toiB.c_position.c); + toiB.m_sweep.a0 = toiB.c_position.a; + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initVelocityConstraint(subStep); + } + for (var i = 0; i < subStep.velocityIterations; ++i) { + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + contact.solveVelocityConstraint(subStep); + } + } + var h = subStep.dt; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(c, body.c_position.c); + var a2 = body.c_position.a; + copyVec2(v, body.c_velocity.v); + var w = body.c_velocity.w; + scaleVec2(translation, h, v); + var translationLengthSqr = lengthSqrVec2(translation); + if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { + var ratio = SettingsInternal.maxTranslation / math_sqrt$5(translationLengthSqr); + mulVec2(v, ratio); + } + var rotation2 = h * w; + if (rotation2 * rotation2 > SettingsInternal.maxRotationSquared) { + var ratio = SettingsInternal.maxRotation / math_abs$7(rotation2); + w *= ratio; + } + plusScaleVec2(c, h, v); + a2 += h * w; + copyVec2(body.c_position.c, c); + body.c_position.a = a2; + copyVec2(body.c_velocity.v, v); + body.c_velocity.w = w; + copyVec2(body.m_sweep.c, c); + body.m_sweep.a = a2; + copyVec2(body.m_linearVelocity, v); + body.m_angularVelocity = w; + body.synchronizeTransform(); + } + this.postSolveIsland(); + }; + Solver2.prototype.postSolveIsland = function() { + for (var c_5 = 0; c_5 < this.m_contacts.length; ++c_5) { + var contact = this.m_contacts[c_5]; + this.m_world.postSolve(contact, contact.m_impulse); + } + }; + return Solver2; + }() +); +Solver.TimeStep = TimeStep; +var Mat22 = ( + /** @class */ + function() { + function Mat222(a2, b2, c2, d2) { + if (typeof a2 === "object" && a2 !== null) { + this.ex = Vec2.clone(a2); + this.ey = Vec2.clone(b2); + } else if (typeof a2 === "number") { + this.ex = Vec2.neo(a2, c2); + this.ey = Vec2.neo(b2, d2); + } else { + this.ex = Vec2.zero(); + this.ey = Vec2.zero(); + } } - /** @hidden */ - Mat22.prototype.toString = function () { - return JSON.stringify(this); + Mat222.prototype.toString = function() { + return JSON.stringify(this); }; - Mat22.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey); - }; - Mat22.assert = function (o) { - }; - Mat22.prototype.set = function (a, b, c, d) { - if (typeof a === "number" && typeof b === "number" && typeof c === "number" - && typeof d === "number") { - this.ex.setNum(a, c); - this.ey.setNum(b, d); - } - else if (typeof a === "object" && typeof b === "object") { - this.ex.setVec2(a); - this.ey.setVec2(b); - } - else if (typeof a === "object") { - this.ex.setVec2(a.ex); - this.ey.setVec2(a.ey); - } - else ; - }; - Mat22.prototype.setIdentity = function () { - this.ex.x = 1.0; - this.ey.x = 0.0; - this.ex.y = 0.0; - this.ey.y = 1.0; - }; - Mat22.prototype.setZero = function () { - this.ex.x = 0.0; - this.ey.x = 0.0; - this.ex.y = 0.0; - this.ey.y = 0.0; - }; - Mat22.prototype.getInverse = function () { - var a = this.ex.x; - var b = this.ey.x; - var c = this.ex.y; - var d = this.ey.y; - var det = a * d - b * c; - if (det !== 0.0) { - det = 1.0 / det; - } - var imx = new Mat22(); - imx.ex.x = det * d; - imx.ey.x = -det * b; - imx.ex.y = -det * c; - imx.ey.y = det * a; - return imx; - }; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - Mat22.prototype.solve = function (v) { - var a = this.ex.x; - var b = this.ey.x; - var c = this.ex.y; - var d = this.ey.y; - var det = a * d - b * c; - if (det !== 0.0) { - det = 1.0 / det; - } - var w = Vec2.zero(); - w.x = det * (d * v.x - b * v.y); - w.y = det * (a * v.y - c * v.x); - return w; - }; - Mat22.mul = function (mx, v) { - if (v && "x" in v && "y" in v) { - var x = mx.ex.x * v.x + mx.ey.x * v.y; - var y = mx.ex.y * v.x + mx.ey.y * v.y; - return Vec2.neo(x, y); - } - else if (v && "ex" in v && "ey" in v) { // Mat22 - // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey)); - var a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y; - var b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y; - var c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y; - var d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y; - return new Mat22(a, b, c, d); - } - }; - Mat22.mulVec2 = function (mx, v) { - var x = mx.ex.x * v.x + mx.ey.x * v.y; - var y = mx.ex.y * v.x + mx.ey.y * v.y; - return Vec2.neo(x, y); - }; - Mat22.mulMat22 = function (mx, v) { - // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey)); - var a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y; - var b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y; - var c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y; - var d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y; - return new Mat22(a, b, c, d); - }; - Mat22.mulT = function (mx, v) { - if (v && "x" in v && "y" in v) { // Vec2 - return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey)); - } - else if (v && "ex" in v && "ey" in v) { // Mat22 - var c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex)); - var c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey)); - return new Mat22(c1, c2); - } - }; - Mat22.mulTVec2 = function (mx, v) { - return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey)); - }; - Mat22.mulTMat22 = function (mx, v) { - var c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex)); - var c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey)); - return new Mat22(c1, c2); - }; - Mat22.abs = function (mx) { - return new Mat22(Vec2.abs(mx.ex), Vec2.abs(mx.ey)); - }; - Mat22.add = function (mx1, mx2) { - return new Mat22(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey)); - }; - return Mat22; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_sqrt$4 = Math.sqrt; -/** @internal */ var pointA$1 = vec2(0, 0); -/** @internal */ var pointB$1 = vec2(0, 0); -/** @internal */ var temp$3 = vec2(0, 0); -/** @internal */ var cA$1 = vec2(0, 0); -/** @internal */ var cB$1 = vec2(0, 0); -/** @internal */ var dist = vec2(0, 0); -/** @internal */ var planePoint$2 = vec2(0, 0); -/** @internal */ var clipPoint$1 = vec2(0, 0); + Mat222.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey); + }; + Mat222.assert = function(o) { + }; + Mat222.prototype.set = function(a2, b2, c2, d2) { + if (typeof a2 === "number" && typeof b2 === "number" && typeof c2 === "number" && typeof d2 === "number") { + this.ex.setNum(a2, c2); + this.ey.setNum(b2, d2); + } else if (typeof a2 === "object" && typeof b2 === "object") { + this.ex.setVec2(a2); + this.ey.setVec2(b2); + } else if (typeof a2 === "object") { + this.ex.setVec2(a2.ex); + this.ey.setVec2(a2.ey); + } else ; + }; + Mat222.prototype.setIdentity = function() { + this.ex.x = 1; + this.ey.x = 0; + this.ex.y = 0; + this.ey.y = 1; + }; + Mat222.prototype.setZero = function() { + this.ex.x = 0; + this.ey.x = 0; + this.ex.y = 0; + this.ey.y = 0; + }; + Mat222.prototype.getInverse = function() { + var a2 = this.ex.x; + var b2 = this.ey.x; + var c2 = this.ex.y; + var d2 = this.ey.y; + var det = a2 * d2 - b2 * c2; + if (det !== 0) { + det = 1 / det; + } + var imx = new Mat222(); + imx.ex.x = det * d2; + imx.ey.x = -det * b2; + imx.ex.y = -det * c2; + imx.ey.y = det * a2; + return imx; + }; + Mat222.prototype.solve = function(v3) { + var a2 = this.ex.x; + var b2 = this.ey.x; + var c2 = this.ex.y; + var d2 = this.ey.y; + var det = a2 * d2 - b2 * c2; + if (det !== 0) { + det = 1 / det; + } + var w = Vec2.zero(); + w.x = det * (d2 * v3.x - b2 * v3.y); + w.y = det * (a2 * v3.y - c2 * v3.x); + return w; + }; + Mat222.mul = function(mx, v3) { + if (v3 && "x" in v3 && "y" in v3) { + var x2 = mx.ex.x * v3.x + mx.ey.x * v3.y; + var y = mx.ex.y * v3.x + mx.ey.y * v3.y; + return Vec2.neo(x2, y); + } else if (v3 && "ex" in v3 && "ey" in v3) { + var a2 = mx.ex.x * v3.ex.x + mx.ey.x * v3.ex.y; + var b2 = mx.ex.x * v3.ey.x + mx.ey.x * v3.ey.y; + var c2 = mx.ex.y * v3.ex.x + mx.ey.y * v3.ex.y; + var d2 = mx.ex.y * v3.ey.x + mx.ey.y * v3.ey.y; + return new Mat222(a2, b2, c2, d2); + } + }; + Mat222.mulVec2 = function(mx, v3) { + var x2 = mx.ex.x * v3.x + mx.ey.x * v3.y; + var y = mx.ex.y * v3.x + mx.ey.y * v3.y; + return Vec2.neo(x2, y); + }; + Mat222.mulMat22 = function(mx, v3) { + var a2 = mx.ex.x * v3.ex.x + mx.ey.x * v3.ex.y; + var b2 = mx.ex.x * v3.ey.x + mx.ey.x * v3.ey.y; + var c2 = mx.ex.y * v3.ex.x + mx.ey.y * v3.ex.y; + var d2 = mx.ex.y * v3.ey.x + mx.ey.y * v3.ey.y; + return new Mat222(a2, b2, c2, d2); + }; + Mat222.mulT = function(mx, v3) { + if (v3 && "x" in v3 && "y" in v3) { + return Vec2.neo(Vec2.dot(v3, mx.ex), Vec2.dot(v3, mx.ey)); + } else if (v3 && "ex" in v3 && "ey" in v3) { + var c1 = Vec2.neo(Vec2.dot(mx.ex, v3.ex), Vec2.dot(mx.ey, v3.ex)); + var c2 = Vec2.neo(Vec2.dot(mx.ex, v3.ey), Vec2.dot(mx.ey, v3.ey)); + return new Mat222(c1, c2); + } + }; + Mat222.mulTVec2 = function(mx, v3) { + return Vec2.neo(Vec2.dot(v3, mx.ex), Vec2.dot(v3, mx.ey)); + }; + Mat222.mulTMat22 = function(mx, v3) { + var c1 = Vec2.neo(Vec2.dot(mx.ex, v3.ex), Vec2.dot(mx.ey, v3.ex)); + var c2 = Vec2.neo(Vec2.dot(mx.ex, v3.ey), Vec2.dot(mx.ey, v3.ey)); + return new Mat222(c1, c2); + }; + Mat222.abs = function(mx) { + return new Mat222(Vec2.abs(mx.ex), Vec2.abs(mx.ey)); + }; + Mat222.add = function(mx1, mx2) { + return new Mat222(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey)); + }; + return Mat222; + }() +); +var math_sqrt$4 = Math.sqrt; +var pointA$1 = vec2(0, 0); +var pointB$1 = vec2(0, 0); +var temp$3 = vec2(0, 0); +var cA$1 = vec2(0, 0); +var cB$1 = vec2(0, 0); +var dist = vec2(0, 0); +var planePoint$2 = vec2(0, 0); +var clipPoint$1 = vec2(0, 0); var ManifoldType; -(function (ManifoldType) { - ManifoldType[ManifoldType["e_unset"] = -1] = "e_unset"; - ManifoldType[ManifoldType["e_circles"] = 0] = "e_circles"; - ManifoldType[ManifoldType["e_faceA"] = 1] = "e_faceA"; - ManifoldType[ManifoldType["e_faceB"] = 2] = "e_faceB"; +(function(ManifoldType2) { + ManifoldType2[ManifoldType2["e_unset"] = -1] = "e_unset"; + ManifoldType2[ManifoldType2["e_circles"] = 0] = "e_circles"; + ManifoldType2[ManifoldType2["e_faceA"] = 1] = "e_faceA"; + ManifoldType2[ManifoldType2["e_faceB"] = 2] = "e_faceB"; })(ManifoldType || (ManifoldType = {})); var ContactFeatureType; -(function (ContactFeatureType) { - ContactFeatureType[ContactFeatureType["e_unset"] = -1] = "e_unset"; - ContactFeatureType[ContactFeatureType["e_vertex"] = 0] = "e_vertex"; - ContactFeatureType[ContactFeatureType["e_face"] = 1] = "e_face"; +(function(ContactFeatureType2) { + ContactFeatureType2[ContactFeatureType2["e_unset"] = -1] = "e_unset"; + ContactFeatureType2[ContactFeatureType2["e_vertex"] = 0] = "e_vertex"; + ContactFeatureType2[ContactFeatureType2["e_face"] = 1] = "e_face"; })(ContactFeatureType || (ContactFeatureType = {})); -/** - * This is used for determining the state of contact points. - */ var PointState; -(function (PointState) { - /** Point does not exist */ - PointState[PointState["nullState"] = 0] = "nullState"; - /** Point was added in the update */ - PointState[PointState["addState"] = 1] = "addState"; - /** Point persisted across the update */ - PointState[PointState["persistState"] = 2] = "persistState"; - /** Point was removed in the update */ - PointState[PointState["removeState"] = 3] = "removeState"; +(function(PointState2) { + PointState2[PointState2["nullState"] = 0] = "nullState"; + PointState2[PointState2["addState"] = 1] = "addState"; + PointState2[PointState2["persistState"] = 2] = "persistState"; + PointState2[PointState2["removeState"] = 3] = "removeState"; })(PointState || (PointState = {})); -/** - * Used for computing contact manifolds. - */ -var ClipVertex = /** @class */ (function () { - function ClipVertex() { - this.v = vec2(0, 0); - this.id = new ContactID(); +var ClipVertex = ( + /** @class */ + function() { + function ClipVertex2() { + this.v = vec2(0, 0); + this.id = new ContactID(); } - ClipVertex.prototype.set = function (o) { - copyVec2(this.v, o.v); - this.id.set(o.id); + ClipVertex2.prototype.set = function(o) { + copyVec2(this.v, o.v); + this.id.set(o.id); }; - ClipVertex.prototype.recycle = function () { - zeroVec2(this.v); - this.id.recycle(); + ClipVertex2.prototype.recycle = function() { + zeroVec2(this.v); + this.id.recycle(); }; - return ClipVertex; -}()); -/** - * A manifold for two touching convex shapes. Manifolds are created in `evaluate` - * method of Contact subclasses. - * - * Supported manifold types are e_faceA or e_faceB for clip point versus plane - * with radius and e_circles point versus point with radius. - * - * We store contacts in this way so that position correction can account for - * movement, which is critical for continuous physics. All contact scenarios - * must be expressed in one of these types. This structure is stored across time - * steps, so we keep it small. - */ -var Manifold = /** @class */ (function () { - function Manifold() { - /** - * Usage depends on manifold type: - * - circles: not used - * - faceA: the normal on polygonA - * - faceB: the normal on polygonB - */ - this.localNormal = vec2(0, 0); - /** - * Usage depends on manifold type: - * - circles: the local center of circleA - * - faceA: the center of faceA - * - faceB: the center of faceB - */ - this.localPoint = vec2(0, 0); - /** The points of contact */ - this.points = [new ManifoldPoint(), new ManifoldPoint()]; - /** The number of manifold points */ - this.pointCount = 0; - } - Manifold.prototype.set = function (that) { - this.type = that.type; - copyVec2(this.localNormal, that.localNormal); - copyVec2(this.localPoint, that.localPoint); - this.pointCount = that.pointCount; - this.points[0].set(that.points[0]); - this.points[1].set(that.points[1]); - }; - Manifold.prototype.recycle = function () { - this.type = ManifoldType.e_unset; - zeroVec2(this.localNormal); - zeroVec2(this.localPoint); - this.pointCount = 0; - this.points[0].recycle(); - this.points[1].recycle(); - }; - /** - * Evaluate the manifold with supplied transforms. This assumes modest motion - * from the original state. This does not change the point count, impulses, etc. - * The radii must come from the shapes that generated the manifold. - */ - Manifold.prototype.getWorldManifold = function (wm, xfA, radiusA, xfB, radiusB) { - if (this.pointCount == 0) { - return wm; - } - wm = wm || new WorldManifold(); - wm.pointCount = this.pointCount; - var normal = wm.normal; - var points = wm.points; - var separations = wm.separations; - switch (this.type) { - case ManifoldType.e_circles: { - setVec2(normal, 1.0, 0.0); - var manifoldPoint = this.points[0]; - transformVec2(pointA$1, xfA, this.localPoint); - transformVec2(pointB$1, xfB, manifoldPoint.localPoint); - subVec2(dist, pointB$1, pointA$1); - var lengthSqr = lengthSqrVec2(dist); - if (lengthSqr > EPSILON * EPSILON) { - var length_1 = math_sqrt$4(lengthSqr); - scaleVec2(normal, 1 / length_1, dist); - } - combine2Vec2(cA$1, 1, pointA$1, radiusA, normal); - combine2Vec2(cB$1, 1, pointB$1, -radiusB, normal); - combine2Vec2(points[0], 0.5, cA$1, 0.5, cB$1); - separations[0] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal); - break; - } - case ManifoldType.e_faceA: { - rotVec2(normal, xfA.q, this.localNormal); - transformVec2(planePoint$2, xfA, this.localPoint); - for (var i = 0; i < this.pointCount; ++i) { - var manifoldPoint = this.points[i]; - transformVec2(clipPoint$1, xfB, manifoldPoint.localPoint); - combine2Vec2(cA$1, 1, clipPoint$1, radiusA - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal), normal); - combine2Vec2(cB$1, 1, clipPoint$1, -radiusB, normal); - combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); - separations[i] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal); - } - break; - } - case ManifoldType.e_faceB: { - rotVec2(normal, xfB.q, this.localNormal); - transformVec2(planePoint$2, xfB, this.localPoint); - for (var i = 0; i < this.pointCount; ++i) { - var manifoldPoint = this.points[i]; - transformVec2(clipPoint$1, xfA, manifoldPoint.localPoint); - combine2Vec2(cB$1, 1, clipPoint$1, radiusB - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal), normal); - combine2Vec2(cA$1, 1, clipPoint$1, -radiusA, normal); - combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); - separations[i] = dotVec2(subVec2(temp$3, cA$1, cB$1), normal); - } - // Ensure normal points from A to B. - negVec2(normal); - break; - } - } + return ClipVertex2; + }() +); +var Manifold = ( + /** @class */ + function() { + function Manifold2() { + this.localNormal = vec2(0, 0); + this.localPoint = vec2(0, 0); + this.points = [new ManifoldPoint(), new ManifoldPoint()]; + this.pointCount = 0; + } + Manifold2.prototype.set = function(that) { + this.type = that.type; + copyVec2(this.localNormal, that.localNormal); + copyVec2(this.localPoint, that.localPoint); + this.pointCount = that.pointCount; + this.points[0].set(that.points[0]); + this.points[1].set(that.points[1]); + }; + Manifold2.prototype.recycle = function() { + this.type = ManifoldType.e_unset; + zeroVec2(this.localNormal); + zeroVec2(this.localPoint); + this.pointCount = 0; + this.points[0].recycle(); + this.points[1].recycle(); + }; + Manifold2.prototype.getWorldManifold = function(wm, xfA2, radiusA, xfB2, radiusB) { + if (this.pointCount == 0) { return wm; + } + wm = wm || new WorldManifold(); + wm.pointCount = this.pointCount; + var normal3 = wm.normal; + var points = wm.points; + var separations = wm.separations; + switch (this.type) { + case ManifoldType.e_circles: { + setVec2(normal3, 1, 0); + var manifoldPoint = this.points[0]; + transformVec2(pointA$1, xfA2, this.localPoint); + transformVec2(pointB$1, xfB2, manifoldPoint.localPoint); + subVec2(dist, pointB$1, pointA$1); + var lengthSqr = lengthSqrVec2(dist); + if (lengthSqr > EPSILON * EPSILON) { + var length_1 = math_sqrt$4(lengthSqr); + scaleVec2(normal3, 1 / length_1, dist); + } + combine2Vec2(cA$1, 1, pointA$1, radiusA, normal3); + combine2Vec2(cB$1, 1, pointB$1, -radiusB, normal3); + combine2Vec2(points[0], 0.5, cA$1, 0.5, cB$1); + separations[0] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal3); + break; + } + case ManifoldType.e_faceA: { + rotVec2(normal3, xfA2.q, this.localNormal); + transformVec2(planePoint$2, xfA2, this.localPoint); + for (var i = 0; i < this.pointCount; ++i) { + var manifoldPoint = this.points[i]; + transformVec2(clipPoint$1, xfB2, manifoldPoint.localPoint); + combine2Vec2(cA$1, 1, clipPoint$1, radiusA - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal3), normal3); + combine2Vec2(cB$1, 1, clipPoint$1, -radiusB, normal3); + combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); + separations[i] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal3); + } + break; + } + case ManifoldType.e_faceB: { + rotVec2(normal3, xfB2.q, this.localNormal); + transformVec2(planePoint$2, xfB2, this.localPoint); + for (var i = 0; i < this.pointCount; ++i) { + var manifoldPoint = this.points[i]; + transformVec2(clipPoint$1, xfA2, manifoldPoint.localPoint); + combine2Vec2(cB$1, 1, clipPoint$1, radiusB - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal3), normal3); + combine2Vec2(cA$1, 1, clipPoint$1, -radiusA, normal3); + combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); + separations[i] = dotVec2(subVec2(temp$3, cA$1, cB$1), normal3); + } + negVec2(normal3); + break; + } + } + return wm; }; - Manifold.clipSegmentToLine = clipSegmentToLine; - Manifold.ClipVertex = ClipVertex; - Manifold.getPointStates = getPointStates; - Manifold.PointState = PointState; - return Manifold; -}()); -/** - * A manifold point is a contact point belonging to a contact manifold. It holds - * details related to the geometry and dynamics of the contact points. - * - * This structure is stored across time steps, so we keep it small. - * - * Note: impulses are used for internal caching and may not provide reliable - * contact forces, especially for high speed collisions. - */ -var ManifoldPoint = /** @class */ (function () { - function ManifoldPoint() { - /** - * Usage depends on manifold type: - * - circles: the local center of circleB - * - faceA: the local center of circleB or the clip point of polygonB - * - faceB: the clip point of polygonA - */ - this.localPoint = vec2(0, 0); - /** - * The non-penetration impulse - */ - this.normalImpulse = 0; - /** - * The friction impulse - */ - this.tangentImpulse = 0; - /** - * Uniquely identifies a contact point between two shapes to facilitate warm starting - */ - this.id = new ContactID(); - } - ManifoldPoint.prototype.set = function (that) { - copyVec2(this.localPoint, that.localPoint); - this.normalImpulse = that.normalImpulse; - this.tangentImpulse = that.tangentImpulse; - this.id.set(that.id); - }; - ManifoldPoint.prototype.recycle = function () { - zeroVec2(this.localPoint); - this.normalImpulse = 0; - this.tangentImpulse = 0; - this.id.recycle(); - }; - return ManifoldPoint; -}()); -/** - * Contact ids to facilitate warm starting. - * - * ContactFeature: The features that intersect to form the contact point. - */ -var ContactID = /** @class */ (function () { - function ContactID() { - /** - * Used to quickly compare contact ids. - */ - this.key = -1; - /** ContactFeature index on shapeA */ - this.indexA = -1; - /** ContactFeature index on shapeB */ - this.indexB = -1; - /** ContactFeature type on shapeA */ - this.typeA = ContactFeatureType.e_unset; - /** ContactFeature type on shapeB */ - this.typeB = ContactFeatureType.e_unset; - } - ContactID.prototype.setFeatures = function (indexA, typeA, indexB, typeB) { - this.indexA = indexA; - this.indexB = indexB; - this.typeA = typeA; - this.typeB = typeB; - this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; - }; - ContactID.prototype.set = function (that) { - this.indexA = that.indexA; - this.indexB = that.indexB; - this.typeA = that.typeA; - this.typeB = that.typeB; - this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; - }; - ContactID.prototype.swapFeatures = function () { - var indexA = this.indexA; - var indexB = this.indexB; - var typeA = this.typeA; - var typeB = this.typeB; - this.indexA = indexB; - this.indexB = indexA; - this.typeA = typeB; - this.typeB = typeA; - this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; - }; - ContactID.prototype.recycle = function () { - this.indexA = 0; - this.indexB = 0; - this.typeA = ContactFeatureType.e_unset; - this.typeB = ContactFeatureType.e_unset; - this.key = -1; - }; - return ContactID; -}()); -/** - * This is used to compute the current state of a contact manifold. - */ -var WorldManifold = /** @class */ (function () { - function WorldManifold() { - /** World vector pointing from A to B */ - this.normal = vec2(0, 0); - /** World contact point (point of intersection) */ - this.points = [vec2(0, 0), vec2(0, 0)]; // [maxManifoldPoints] - /** A negative value indicates overlap, in meters */ - this.separations = [0, 0]; // [maxManifoldPoints] - /** The number of manifold points */ - this.pointCount = 0; - } - WorldManifold.prototype.recycle = function () { - zeroVec2(this.normal); - zeroVec2(this.points[0]); - zeroVec2(this.points[1]); - this.separations[0] = 0; - this.separations[1] = 0; - this.pointCount = 0; - }; - return WorldManifold; -}()); -/** - * Compute the point states given two manifolds. The states pertain to the - * transition from manifold1 to manifold2. So state1 is either persist or remove - * while state2 is either add or persist. - */ + Manifold2.clipSegmentToLine = clipSegmentToLine; + Manifold2.ClipVertex = ClipVertex; + Manifold2.getPointStates = getPointStates; + Manifold2.PointState = PointState; + return Manifold2; + }() +); +var ManifoldPoint = ( + /** @class */ + function() { + function ManifoldPoint2() { + this.localPoint = vec2(0, 0); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.id = new ContactID(); + } + ManifoldPoint2.prototype.set = function(that) { + copyVec2(this.localPoint, that.localPoint); + this.normalImpulse = that.normalImpulse; + this.tangentImpulse = that.tangentImpulse; + this.id.set(that.id); + }; + ManifoldPoint2.prototype.recycle = function() { + zeroVec2(this.localPoint); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.id.recycle(); + }; + return ManifoldPoint2; + }() +); +var ContactID = ( + /** @class */ + function() { + function ContactID2() { + this.key = -1; + this.indexA = -1; + this.indexB = -1; + this.typeA = ContactFeatureType.e_unset; + this.typeB = ContactFeatureType.e_unset; + } + ContactID2.prototype.setFeatures = function(indexA, typeA, indexB, typeB) { + this.indexA = indexA; + this.indexB = indexB; + this.typeA = typeA; + this.typeB = typeB; + this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; + }; + ContactID2.prototype.set = function(that) { + this.indexA = that.indexA; + this.indexB = that.indexB; + this.typeA = that.typeA; + this.typeB = that.typeB; + this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; + }; + ContactID2.prototype.swapFeatures = function() { + var indexA = this.indexA; + var indexB = this.indexB; + var typeA = this.typeA; + var typeB = this.typeB; + this.indexA = indexB; + this.indexB = indexA; + this.typeA = typeB; + this.typeB = typeA; + this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; + }; + ContactID2.prototype.recycle = function() { + this.indexA = 0; + this.indexB = 0; + this.typeA = ContactFeatureType.e_unset; + this.typeB = ContactFeatureType.e_unset; + this.key = -1; + }; + return ContactID2; + }() +); +var WorldManifold = ( + /** @class */ + function() { + function WorldManifold2() { + this.normal = vec2(0, 0); + this.points = [vec2(0, 0), vec2(0, 0)]; + this.separations = [0, 0]; + this.pointCount = 0; + } + WorldManifold2.prototype.recycle = function() { + zeroVec2(this.normal); + zeroVec2(this.points[0]); + zeroVec2(this.points[1]); + this.separations[0] = 0; + this.separations[1] = 0; + this.pointCount = 0; + }; + return WorldManifold2; + }() +); function getPointStates(state1, state2, manifold1, manifold2) { - // state1, state2: PointState[Settings.maxManifoldPoints] - // for (var i = 0; i < Settings.maxManifoldPoints; ++i) { - // state1[i] = PointState.nullState; - // state2[i] = PointState.nullState; - // } - // Detect persists and removes. - for (var i = 0; i < manifold1.pointCount; ++i) { - var id = manifold1.points[i].id; - state1[i] = PointState.removeState; - for (var j = 0; j < manifold2.pointCount; ++j) { - if (manifold2.points[j].id.key === id.key) { - state1[i] = PointState.persistState; - break; - } - } + for (var i = 0; i < manifold1.pointCount; ++i) { + var id = manifold1.points[i].id; + state1[i] = PointState.removeState; + for (var j = 0; j < manifold2.pointCount; ++j) { + if (manifold2.points[j].id.key === id.key) { + state1[i] = PointState.persistState; + break; + } } - // Detect persists and adds. - for (var i = 0; i < manifold2.pointCount; ++i) { - var id = manifold2.points[i].id; - state2[i] = PointState.addState; - for (var j = 0; j < manifold1.pointCount; ++j) { - if (manifold1.points[j].id.key === id.key) { - state2[i] = PointState.persistState; - break; - } - } + } + for (var i = 0; i < manifold2.pointCount; ++i) { + var id = manifold2.points[i].id; + state2[i] = PointState.addState; + for (var j = 0; j < manifold1.pointCount; ++j) { + if (manifold1.points[j].id.key === id.key) { + state2[i] = PointState.persistState; + break; + } } + } } -/** - * Clipping for contact manifolds. Sutherland-Hodgman clipping. - */ -function clipSegmentToLine(vOut, vIn, normal, offset, vertexIndexA) { - // Start with no output points - var numOut = 0; - // Calculate the distance of end points to the line - var distance0 = dotVec2(normal, vIn[0].v) - offset; - var distance1 = dotVec2(normal, vIn[1].v) - offset; - // If the points are behind the plane - if (distance0 <= 0.0) - vOut[numOut++].set(vIn[0]); - if (distance1 <= 0.0) - vOut[numOut++].set(vIn[1]); - // If the points are on different sides of the plane - if (distance0 * distance1 < 0.0) { - // Find intersection point of edge and plane - var interp = distance0 / (distance0 - distance1); - combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v); - // VertexA is hitting edgeB. - vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face); - ++numOut; - } - return numOut; +function clipSegmentToLine(vOut, vIn, normal3, offset, vertexIndexA) { + var numOut = 0; + var distance0 = dotVec2(normal3, vIn[0].v) - offset; + var distance1 = dotVec2(normal3, vIn[1].v) - offset; + if (distance0 <= 0) + vOut[numOut++].set(vIn[0]); + if (distance1 <= 0) + vOut[numOut++].set(vIn[1]); + if (distance0 * distance1 < 0) { + var interp = distance0 / (distance0 - distance1); + combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v); + vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face); + ++numOut; + } + return numOut; } - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_sqrt$3 = Math.sqrt; -/** @internal */ var math_max$3 = Math.max; -/** @internal */ var math_min$5 = Math.min; -/** @internal */ var contactPool = new Pool({ - create: function () { - return new Contact(); - }, - release: function (contact) { - contact.recycle(); - } +var math_sqrt$3 = Math.sqrt; +var math_max$3 = Math.max; +var math_min$5 = Math.min; +var contactPool = new Pool({ + create: function() { + return new Contact(); + }, + release: function(contact) { + contact.recycle(); + } }); -/** @internal */ var oldManifold = new Manifold(); -/** @internal */ var worldManifold = new WorldManifold(); -/** - * A contact edge is used to connect bodies and contacts together in a contact - * graph where each body is a node and each contact is an edge. A contact edge - * belongs to a doubly linked list maintained in each attached body. Each - * contact has two contact nodes, one for each attached body. - */ -var ContactEdge = /** @class */ (function () { - function ContactEdge(contact) { - this.prev = null; - this.next = null; - this.other = null; - this.contact = contact; - } - /** @internal */ - ContactEdge.prototype.recycle = function () { - this.prev = null; - this.next = null; - this.other = null; - }; - return ContactEdge; -}()); -/** - * Friction mixing law. The idea is to allow either fixture to drive the - * friction to zero. For example, anything slides on ice. - */ +var oldManifold = new Manifold(); +var worldManifold = new WorldManifold(); +var ContactEdge = ( + /** @class */ + function() { + function ContactEdge2(contact) { + this.prev = null; + this.next = null; + this.other = null; + this.contact = contact; + } + ContactEdge2.prototype.recycle = function() { + this.prev = null; + this.next = null; + this.other = null; + }; + return ContactEdge2; + }() +); function mixFriction(friction1, friction2) { - return math_sqrt$3(friction1 * friction2); + return math_sqrt$3(friction1 * friction2); } -/** - * Restitution mixing law. The idea is allow for anything to bounce off an - * inelastic surface. For example, a superball bounces on anything. - */ function mixRestitution(restitution1, restitution2) { - return restitution1 > restitution2 ? restitution1 : restitution2; + return restitution1 > restitution2 ? restitution1 : restitution2; } -// TODO: move this to Settings? -/** @internal */ var s_registers = []; -// TODO: merge with ManifoldPoint? -var VelocityConstraintPoint = /** @class */ (function () { - function VelocityConstraintPoint() { - this.rA = vec2(0, 0); - this.rB = vec2(0, 0); - this.normalImpulse = 0; - this.tangentImpulse = 0; - this.normalMass = 0; - this.tangentMass = 0; - this.velocityBias = 0; - } - VelocityConstraintPoint.prototype.recycle = function () { - zeroVec2(this.rA); - zeroVec2(this.rB); - this.normalImpulse = 0; - this.tangentImpulse = 0; - this.normalMass = 0; - this.tangentMass = 0; - this.velocityBias = 0; - }; - return VelocityConstraintPoint; -}()); -/** @internal */ var cA = vec2(0, 0); -/** @internal */ var vA = vec2(0, 0); -/** @internal */ var cB = vec2(0, 0); -/** @internal */ var vB = vec2(0, 0); -/** @internal */ var tangent$1 = vec2(0, 0); -/** @internal */ var xfA = transform(0, 0, 0); -/** @internal */ var xfB = transform(0, 0, 0); -/** @internal */ var pointA = vec2(0, 0); -/** @internal */ var pointB = vec2(0, 0); -/** @internal */ var clipPoint = vec2(0, 0); -/** @internal */ var planePoint$1 = vec2(0, 0); -/** @internal */ var rA = vec2(0, 0); -/** @internal */ var rB = vec2(0, 0); -/** @internal */ var P$1 = vec2(0, 0); -/** @internal */ var normal$2 = vec2(0, 0); -/** @internal */ var point = vec2(0, 0); -/** @internal */ var dv = vec2(0, 0); -/** @internal */ var dv1 = vec2(0, 0); -/** @internal */ var dv2 = vec2(0, 0); -/** @internal */ var b = vec2(0, 0); -/** @internal */ var a = vec2(0, 0); -/** @internal */ var x = vec2(0, 0); -/** @internal */ var d = vec2(0, 0); -/** @internal */ var P1 = vec2(0, 0); -/** @internal */ var P2 = vec2(0, 0); -/** @internal */ var temp$2 = vec2(0, 0); -/** - * The class manages contact between two shapes. A contact exists for each - * overlapping AABB in the broad-phase (except if filtered). Therefore a contact - * object may exist that has no contact points. - */ -var Contact = /** @class */ (function () { - function Contact() { - // Nodes for connecting bodies. - /** @internal */ this.m_nodeA = new ContactEdge(this); - /** @internal */ this.m_nodeB = new ContactEdge(this); - /** @internal */ this.m_fixtureA = null; - /** @internal */ this.m_fixtureB = null; - /** @internal */ this.m_indexA = -1; - /** @internal */ this.m_indexB = -1; - /** @internal */ this.m_evaluateFcn = null; - /** @internal */ this.m_manifold = new Manifold(); - /** @internal */ this.m_prev = null; - /** @internal */ this.m_next = null; - /** @internal */ this.m_toi = 1.0; - /** @internal */ this.m_toiCount = 0; - // This contact has a valid TOI in m_toi - /** @internal */ this.m_toiFlag = false; - /** @internal */ this.m_friction = 0.0; - /** @internal */ this.m_restitution = 0.0; - /** @internal */ this.m_tangentSpeed = 0.0; - /** @internal This contact can be disabled (by user) */ - this.m_enabledFlag = true; - /** @internal Used when crawling contact graph when forming islands. */ - this.m_islandFlag = false; - /** @internal Set when the shapes are touching. */ - this.m_touchingFlag = false; - /** @internal This contact needs filtering because a fixture filter was changed. */ - this.m_filterFlag = false; - /** @internal This bullet contact had a TOI event */ - this.m_bulletHitFlag = false; - /** @internal Contact reporting impulse object cache */ - this.m_impulse = new ContactImpulse(this); - // VelocityConstraint - /** @internal */ this.v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; // [maxManifoldPoints]; - /** @internal */ this.v_normal = vec2(0, 0); - /** @internal */ this.v_normalMass = new Mat22(); - /** @internal */ this.v_K = new Mat22(); - /** @internal */ this.v_pointCount = 0; - /** @internal */ this.v_tangentSpeed = 0; - /** @internal */ this.v_friction = 0; - /** @internal */ this.v_restitution = 0; - /** @internal */ this.v_invMassA = 0; - /** @internal */ this.v_invMassB = 0; - /** @internal */ this.v_invIA = 0; - /** @internal */ this.v_invIB = 0; - // PositionConstraint - /** @internal */ this.p_localPoints = [vec2(0, 0), vec2(0, 0)]; // [maxManifoldPoints]; - /** @internal */ this.p_localNormal = vec2(0, 0); - /** @internal */ this.p_localPoint = vec2(0, 0); - /** @internal */ this.p_localCenterA = vec2(0, 0); - /** @internal */ this.p_localCenterB = vec2(0, 0); - /** @internal */ this.p_type = ManifoldType.e_unset; - /** @internal */ this.p_radiusA = 0; - /** @internal */ this.p_radiusB = 0; - /** @internal */ this.p_pointCount = 0; - /** @internal */ this.p_invMassA = 0; - /** @internal */ this.p_invMassB = 0; - /** @internal */ this.p_invIA = 0; - /** @internal */ this.p_invIB = 0; - } - /** @internal */ - Contact.prototype.initialize = function (fA, indexA, fB, indexB, evaluateFcn) { - this.m_fixtureA = fA; - this.m_fixtureB = fB; - this.m_indexA = indexA; - this.m_indexB = indexB; - this.m_evaluateFcn = evaluateFcn; - this.m_friction = mixFriction(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction); - this.m_restitution = mixRestitution(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution); - }; - /** @internal */ - Contact.prototype.recycle = function () { - this.m_nodeA.recycle(); - this.m_nodeB.recycle(); - this.m_fixtureA = null; - this.m_fixtureB = null; - this.m_indexA = -1; - this.m_indexB = -1; - this.m_evaluateFcn = null; - this.m_manifold.recycle(); - this.m_prev = null; - this.m_next = null; - this.m_toi = 1; - this.m_toiCount = 0; - this.m_toiFlag = false; - this.m_friction = 0; - this.m_restitution = 0; - this.m_tangentSpeed = 0; - this.m_enabledFlag = true; - this.m_islandFlag = false; - this.m_touchingFlag = false; - this.m_filterFlag = false; - this.m_bulletHitFlag = false; - this.m_impulse.recycle(); - // VelocityConstraint - for (var _i = 0, _a = this.v_points; _i < _a.length; _i++) { - var point_1 = _a[_i]; - point_1.recycle(); - } - zeroVec2(this.v_normal); - this.v_normalMass.setZero(); - this.v_K.setZero(); - this.v_pointCount = 0; - this.v_tangentSpeed = 0; - this.v_friction = 0; - this.v_restitution = 0; - this.v_invMassA = 0; - this.v_invMassB = 0; - this.v_invIA = 0; - this.v_invIB = 0; - // PositionConstraint - for (var _b = 0, _c = this.p_localPoints; _b < _c.length; _b++) { - var point_2 = _c[_b]; - zeroVec2(point_2); - } - zeroVec2(this.p_localNormal); - zeroVec2(this.p_localPoint); - zeroVec2(this.p_localCenterA); - zeroVec2(this.p_localCenterB); - this.p_type = ManifoldType.e_unset; - this.p_radiusA = 0; - this.p_radiusB = 0; - this.p_pointCount = 0; - this.p_invMassA = 0; - this.p_invMassB = 0; - this.p_invIA = 0; - this.p_invIB = 0; - }; - Contact.prototype.initConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var shapeA = fixtureA.m_shape; - var shapeB = fixtureB.m_shape; - if (shapeA === null || shapeB === null) - return; - var manifold = this.m_manifold; - var pointCount = manifold.pointCount; - this.v_invMassA = bodyA.m_invMass; - this.v_invMassB = bodyB.m_invMass; - this.v_invIA = bodyA.m_invI; - this.v_invIB = bodyB.m_invI; - this.v_friction = this.m_friction; - this.v_restitution = this.m_restitution; - this.v_tangentSpeed = this.m_tangentSpeed; - this.v_pointCount = pointCount; - this.v_K.setZero(); - this.v_normalMass.setZero(); - this.p_invMassA = bodyA.m_invMass; - this.p_invMassB = bodyB.m_invMass; - this.p_invIA = bodyA.m_invI; - this.p_invIB = bodyB.m_invI; - copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter); - copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter); - this.p_radiusA = shapeA.m_radius; - this.p_radiusB = shapeB.m_radius; - this.p_type = manifold.type; - copyVec2(this.p_localNormal, manifold.localNormal); - copyVec2(this.p_localPoint, manifold.localPoint); - this.p_pointCount = pointCount; - for (var j = 0; j < SettingsInternal.maxManifoldPoints; ++j) { - this.v_points[j].recycle(); - zeroVec2(this.p_localPoints[j]); - } - for (var j = 0; j < pointCount; ++j) { - var cp = manifold.points[j]; - var vcp = this.v_points[j]; - if (step.warmStarting) { - vcp.normalImpulse = step.dtRatio * cp.normalImpulse; - vcp.tangentImpulse = step.dtRatio * cp.tangentImpulse; - } - copyVec2(this.p_localPoints[j], cp.localPoint); - } - }; - /** - * Get the contact manifold. Do not modify the manifold unless you understand - * the internals of the library. - */ - Contact.prototype.getManifold = function () { - return this.m_manifold; - }; - /** - * Get the world manifold. - */ - Contact.prototype.getWorldManifold = function (worldManifold) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var shapeA = fixtureA.m_shape; - var shapeB = fixtureB.m_shape; - if (shapeA === null || shapeB === null) - return; - return this.m_manifold.getWorldManifold(worldManifold, bodyA.getTransform(), shapeA.m_radius, bodyB.getTransform(), shapeB.m_radius); - }; - /** - * Enable/disable this contact. This can be used inside the pre-solve contact - * listener. The contact is only disabled for the current time step (or sub-step - * in continuous collisions). - */ - Contact.prototype.setEnabled = function (flag) { - this.m_enabledFlag = !!flag; - }; - /** - * Has this contact been disabled? - */ - Contact.prototype.isEnabled = function () { - return this.m_enabledFlag; - }; - /** - * Is this contact touching? - */ - Contact.prototype.isTouching = function () { - return this.m_touchingFlag; - }; - /** - * Get the next contact in the world's contact list. - */ - Contact.prototype.getNext = function () { - return this.m_next; - }; - /** - * Get fixture A in this contact. - */ - Contact.prototype.getFixtureA = function () { - return this.m_fixtureA; - }; - /** - * Get fixture B in this contact. - */ - Contact.prototype.getFixtureB = function () { - return this.m_fixtureB; - }; - /** - * Get the child primitive index for fixture A. - */ - Contact.prototype.getChildIndexA = function () { - return this.m_indexA; - }; - /** - * Get the child primitive index for fixture B. - */ - Contact.prototype.getChildIndexB = function () { - return this.m_indexB; - }; - /** - * Flag this contact for filtering. Filtering will occur the next time step. - */ - Contact.prototype.flagForFiltering = function () { - this.m_filterFlag = true; - }; - /** - * Override the default friction mixture. You can call this in - * "pre-solve" callback. This value persists until set or reset. - */ - Contact.prototype.setFriction = function (friction) { - this.m_friction = friction; - }; - /** - * Get the friction. - */ - Contact.prototype.getFriction = function () { - return this.m_friction; - }; - /** - * Reset the friction mixture to the default value. - */ - Contact.prototype.resetFriction = function () { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction); - }; - /** - * Override the default restitution mixture. You can call this in - * "pre-solve" callback. The value persists until you set or reset. - */ - Contact.prototype.setRestitution = function (restitution) { - this.m_restitution = restitution; - }; - /** - * Get the restitution. - */ - Contact.prototype.getRestitution = function () { - return this.m_restitution; - }; - /** - * Reset the restitution to the default value. - */ - Contact.prototype.resetRestitution = function () { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution); - }; - /** - * Set the desired tangent speed for a conveyor belt behavior. In meters per - * second. - */ - Contact.prototype.setTangentSpeed = function (speed) { - this.m_tangentSpeed = speed; - }; - /** - * Get the desired tangent speed. In meters per second. - */ - Contact.prototype.getTangentSpeed = function () { - return this.m_tangentSpeed; - }; - /** - * Called by Update method, and implemented by subclasses. - */ - Contact.prototype.evaluate = function (manifold, xfA, xfB) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - this.m_evaluateFcn(manifold, xfA, fixtureA, this.m_indexA, xfB, fixtureB, this.m_indexB); - }; - /** - * Updates the contact manifold and touching status. - * - * Note: do not assume the fixture AABBs are overlapping or are valid. - * - * @param listener.beginContact - * @param listener.endContact - * @param listener.preSolve - */ - Contact.prototype.update = function (listener) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var shapeA = fixtureA.m_shape; - var shapeB = fixtureB.m_shape; - if (shapeA === null || shapeB === null) - return; - // Re-enable this contact. - this.m_enabledFlag = true; - var touching = false; - var wasTouching = this.m_touchingFlag; - var sensorA = fixtureA.m_isSensor; - var sensorB = fixtureB.m_isSensor; - var sensor = sensorA || sensorB; - var xfA = bodyA.m_xf; - var xfB = bodyB.m_xf; - // Is this contact a sensor? - if (sensor) { - touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB); - // Sensors don't generate manifolds. - this.m_manifold.pointCount = 0; - } - else { - oldManifold.recycle(); - oldManifold.set(this.m_manifold); - this.m_manifold.recycle(); - this.evaluate(this.m_manifold, xfA, xfB); - touching = this.m_manifold.pointCount > 0; - // Match old contact ids to new contact ids and copy the - // stored impulses to warm start the solver. - for (var i = 0; i < this.m_manifold.pointCount; ++i) { - var nmp = this.m_manifold.points[i]; - nmp.normalImpulse = 0.0; - nmp.tangentImpulse = 0.0; - for (var j = 0; j < oldManifold.pointCount; ++j) { - var omp = oldManifold.points[j]; - if (omp.id.key === nmp.id.key) { - nmp.normalImpulse = omp.normalImpulse; - nmp.tangentImpulse = omp.tangentImpulse; - break; - } - } - } - if (touching !== wasTouching) { - bodyA.setAwake(true); - bodyB.setAwake(true); - } - } - this.m_touchingFlag = touching; - var hasListener = typeof listener === "object" && listener !== null; - if (!wasTouching && touching && hasListener) { - listener.beginContact(this); - } - if (wasTouching && !touching && hasListener) { - listener.endContact(this); - } - if (!sensor && touching && hasListener && oldManifold) { - listener.preSolve(this, oldManifold); +var s_registers = []; +var VelocityConstraintPoint = ( + /** @class */ + function() { + function VelocityConstraintPoint2() { + this.rA = vec2(0, 0); + this.rB = vec2(0, 0); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.normalMass = 0; + this.tangentMass = 0; + this.velocityBias = 0; + } + VelocityConstraintPoint2.prototype.recycle = function() { + zeroVec2(this.rA); + zeroVec2(this.rB); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.normalMass = 0; + this.tangentMass = 0; + this.velocityBias = 0; + }; + return VelocityConstraintPoint2; + }() +); +var cA = vec2(0, 0); +var vA = vec2(0, 0); +var cB = vec2(0, 0); +var vB = vec2(0, 0); +var tangent$1 = vec2(0, 0); +var xfA = transform(0, 0, 0); +var xfB = transform(0, 0, 0); +var pointA = vec2(0, 0); +var pointB = vec2(0, 0); +var clipPoint = vec2(0, 0); +var planePoint$1 = vec2(0, 0); +var rA = vec2(0, 0); +var rB = vec2(0, 0); +var P$1 = vec2(0, 0); +var normal$2 = vec2(0, 0); +var point = vec2(0, 0); +var dv = vec2(0, 0); +var dv1 = vec2(0, 0); +var dv2 = vec2(0, 0); +var b = vec2(0, 0); +var a = vec2(0, 0); +var x = vec2(0, 0); +var d = vec2(0, 0); +var P1 = vec2(0, 0); +var P2 = vec2(0, 0); +var temp$2 = vec2(0, 0); +var Contact = ( + /** @class */ + function() { + function Contact2() { + this.m_nodeA = new ContactEdge(this); + this.m_nodeB = new ContactEdge(this); + this.m_fixtureA = null; + this.m_fixtureB = null; + this.m_indexA = -1; + this.m_indexB = -1; + this.m_evaluateFcn = null; + this.m_manifold = new Manifold(); + this.m_prev = null; + this.m_next = null; + this.m_toi = 1; + this.m_toiCount = 0; + this.m_toiFlag = false; + this.m_friction = 0; + this.m_restitution = 0; + this.m_tangentSpeed = 0; + this.m_enabledFlag = true; + this.m_islandFlag = false; + this.m_touchingFlag = false; + this.m_filterFlag = false; + this.m_bulletHitFlag = false; + this.m_impulse = new ContactImpulse(this); + this.v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; + this.v_normal = vec2(0, 0); + this.v_normalMass = new Mat22(); + this.v_K = new Mat22(); + this.v_pointCount = 0; + this.v_tangentSpeed = 0; + this.v_friction = 0; + this.v_restitution = 0; + this.v_invMassA = 0; + this.v_invMassB = 0; + this.v_invIA = 0; + this.v_invIB = 0; + this.p_localPoints = [vec2(0, 0), vec2(0, 0)]; + this.p_localNormal = vec2(0, 0); + this.p_localPoint = vec2(0, 0); + this.p_localCenterA = vec2(0, 0); + this.p_localCenterB = vec2(0, 0); + this.p_type = ManifoldType.e_unset; + this.p_radiusA = 0; + this.p_radiusB = 0; + this.p_pointCount = 0; + this.p_invMassA = 0; + this.p_invMassB = 0; + this.p_invIA = 0; + this.p_invIB = 0; + } + Contact2.prototype.initialize = function(fA, indexA, fB, indexB, evaluateFcn) { + this.m_fixtureA = fA; + this.m_fixtureB = fB; + this.m_indexA = indexA; + this.m_indexB = indexB; + this.m_evaluateFcn = evaluateFcn; + this.m_friction = mixFriction(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction); + this.m_restitution = mixRestitution(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution); + }; + Contact2.prototype.recycle = function() { + this.m_nodeA.recycle(); + this.m_nodeB.recycle(); + this.m_fixtureA = null; + this.m_fixtureB = null; + this.m_indexA = -1; + this.m_indexB = -1; + this.m_evaluateFcn = null; + this.m_manifold.recycle(); + this.m_prev = null; + this.m_next = null; + this.m_toi = 1; + this.m_toiCount = 0; + this.m_toiFlag = false; + this.m_friction = 0; + this.m_restitution = 0; + this.m_tangentSpeed = 0; + this.m_enabledFlag = true; + this.m_islandFlag = false; + this.m_touchingFlag = false; + this.m_filterFlag = false; + this.m_bulletHitFlag = false; + this.m_impulse.recycle(); + for (var _i = 0, _a2 = this.v_points; _i < _a2.length; _i++) { + var point_1 = _a2[_i]; + point_1.recycle(); + } + zeroVec2(this.v_normal); + this.v_normalMass.setZero(); + this.v_K.setZero(); + this.v_pointCount = 0; + this.v_tangentSpeed = 0; + this.v_friction = 0; + this.v_restitution = 0; + this.v_invMassA = 0; + this.v_invMassB = 0; + this.v_invIA = 0; + this.v_invIB = 0; + for (var _b = 0, _c = this.p_localPoints; _b < _c.length; _b++) { + var point_2 = _c[_b]; + zeroVec2(point_2); + } + zeroVec2(this.p_localNormal); + zeroVec2(this.p_localPoint); + zeroVec2(this.p_localCenterA); + zeroVec2(this.p_localCenterB); + this.p_type = ManifoldType.e_unset; + this.p_radiusA = 0; + this.p_radiusB = 0; + this.p_pointCount = 0; + this.p_invMassA = 0; + this.p_invMassB = 0; + this.p_invIA = 0; + this.p_invIB = 0; + }; + Contact2.prototype.initConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var shapeA = fixtureA.m_shape; + var shapeB = fixtureB.m_shape; + if (shapeA === null || shapeB === null) + return; + var manifold = this.m_manifold; + var pointCount = manifold.pointCount; + this.v_invMassA = bodyA.m_invMass; + this.v_invMassB = bodyB.m_invMass; + this.v_invIA = bodyA.m_invI; + this.v_invIB = bodyB.m_invI; + this.v_friction = this.m_friction; + this.v_restitution = this.m_restitution; + this.v_tangentSpeed = this.m_tangentSpeed; + this.v_pointCount = pointCount; + this.v_K.setZero(); + this.v_normalMass.setZero(); + this.p_invMassA = bodyA.m_invMass; + this.p_invMassB = bodyB.m_invMass; + this.p_invIA = bodyA.m_invI; + this.p_invIB = bodyB.m_invI; + copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter); + copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter); + this.p_radiusA = shapeA.m_radius; + this.p_radiusB = shapeB.m_radius; + this.p_type = manifold.type; + copyVec2(this.p_localNormal, manifold.localNormal); + copyVec2(this.p_localPoint, manifold.localPoint); + this.p_pointCount = pointCount; + for (var j = 0; j < SettingsInternal.maxManifoldPoints; ++j) { + this.v_points[j].recycle(); + zeroVec2(this.p_localPoints[j]); + } + for (var j = 0; j < pointCount; ++j) { + var cp = manifold.points[j]; + var vcp = this.v_points[j]; + if (step.warmStarting) { + vcp.normalImpulse = step.dtRatio * cp.normalImpulse; + vcp.tangentImpulse = step.dtRatio * cp.tangentImpulse; } + copyVec2(this.p_localPoints[j], cp.localPoint); + } }; - Contact.prototype.solvePositionConstraint = function (step) { - return this._solvePositionConstraint(step, null, null); + Contact2.prototype.getManifold = function() { + return this.m_manifold; }; - Contact.prototype.solvePositionConstraintTOI = function (step, toiA, toiB) { - return this._solvePositionConstraint(step, toiA, toiB); + Contact2.prototype.getWorldManifold = function(worldManifold2) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var shapeA = fixtureA.m_shape; + var shapeB = fixtureB.m_shape; + if (shapeA === null || shapeB === null) + return; + return this.m_manifold.getWorldManifold(worldManifold2, bodyA.getTransform(), shapeA.m_radius, bodyB.getTransform(), shapeB.m_radius); }; - Contact.prototype._solvePositionConstraint = function (step, toiA, toiB) { - var toi = toiA !== null && toiB !== null ? true : false; - var minSeparation = 0.0; - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return minSeparation; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return minSeparation; - bodyA.c_velocity; - bodyB.c_velocity; - var positionA = bodyA.c_position; - var positionB = bodyB.c_position; - var localCenterA = this.p_localCenterA; - var localCenterB = this.p_localCenterB; - var mA = 0.0; - var iA = 0.0; - if (!toi || (bodyA === toiA || bodyA === toiB)) { - mA = this.p_invMassA; - iA = this.p_invIA; - } - var mB = 0.0; - var iB = 0.0; - if (!toi || (bodyB === toiA || bodyB === toiB)) { - mB = this.p_invMassB; - iB = this.p_invIB; - } - copyVec2(cA, positionA.c); - var aA = positionA.a; - copyVec2(cB, positionB.c); - var aB = positionB.a; - // Solve normal constraints - for (var j = 0; j < this.p_pointCount; ++j) { - getTransform(xfA, localCenterA, cA, aA); - getTransform(xfB, localCenterB, cB, aB); - // PositionSolverManifold - var separation = void 0; - switch (this.p_type) { - case ManifoldType.e_circles: { - transformVec2(pointA, xfA, this.p_localPoint); - transformVec2(pointB, xfB, this.p_localPoints[0]); - subVec2(normal$2, pointB, pointA); - normalizeVec2(normal$2); - combine2Vec2(point, 0.5, pointA, 0.5, pointB); - separation = dotVec2(pointB, normal$2) - dotVec2(pointA, normal$2) - this.p_radiusA - this.p_radiusB; - break; - } - case ManifoldType.e_faceA: { - rotVec2(normal$2, xfA.q, this.p_localNormal); - transformVec2(planePoint$1, xfA, this.p_localPoint); - transformVec2(clipPoint, xfB, this.p_localPoints[j]); - separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; - copyVec2(point, clipPoint); - break; - } - case ManifoldType.e_faceB: { - rotVec2(normal$2, xfB.q, this.p_localNormal); - transformVec2(planePoint$1, xfB, this.p_localPoint); - transformVec2(clipPoint, xfA, this.p_localPoints[j]); - separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; - copyVec2(point, clipPoint); - // Ensure normal points from A to B - negVec2(normal$2); - break; - } - // todo: what should we do here? - default: { - return minSeparation; - } - } - subVec2(rA, point, cA); - subVec2(rB, point, cB); - // Track max constraint error. - minSeparation = math_min$5(minSeparation, separation); - var baumgarte = toi ? SettingsInternal.toiBaugarte : SettingsInternal.baumgarte; - var linearSlop = SettingsInternal.linearSlop; - var maxLinearCorrection = SettingsInternal.maxLinearCorrection; - // Prevent large corrections and allow slop. - var C = clamp$1(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0.0); - // Compute the effective mass. - var rnA = crossVec2Vec2(rA, normal$2); - var rnB = crossVec2Vec2(rB, normal$2); - var K = mA + mB + iA * rnA * rnA + iB * rnB * rnB; - // Compute normal impulse - var impulse = K > 0.0 ? -C / K : 0.0; - scaleVec2(P$1, impulse, normal$2); - minusScaleVec2(cA, mA, P$1); - aA -= iA * crossVec2Vec2(rA, P$1); - plusScaleVec2(cB, mB, P$1); - aB += iB * crossVec2Vec2(rB, P$1); - } - copyVec2(positionA.c, cA); - positionA.a = aA; - copyVec2(positionB.c, cB); - positionB.a = aB; - return minSeparation; + Contact2.prototype.setEnabled = function(flag) { + this.m_enabledFlag = !!flag; }; - Contact.prototype.initVelocityConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var velocityA = bodyA.c_velocity; - var velocityB = bodyB.c_velocity; - var positionA = bodyA.c_position; - var positionB = bodyB.c_position; - var radiusA = this.p_radiusA; - var radiusB = this.p_radiusB; - var manifold = this.m_manifold; - var mA = this.v_invMassA; - var mB = this.v_invMassB; - var iA = this.v_invIA; - var iB = this.v_invIB; - var localCenterA = this.p_localCenterA; - var localCenterB = this.p_localCenterB; - copyVec2(cA, positionA.c); - var aA = positionA.a; - copyVec2(vA, velocityA.v); - var wA = velocityA.w; - copyVec2(cB, positionB.c); - var aB = positionB.a; - copyVec2(vB, velocityB.v); - var wB = velocityB.w; - getTransform(xfA, localCenterA, cA, aA); - getTransform(xfB, localCenterB, cB, aB); - worldManifold.recycle(); - manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB); - copyVec2(this.v_normal, worldManifold.normal); - for (var j = 0; j < this.v_pointCount; ++j) { - var vcp = this.v_points[j]; // VelocityConstraintPoint - var wmp = worldManifold.points[j]; - subVec2(vcp.rA, wmp, cA); - subVec2(vcp.rB, wmp, cB); - var rnA = crossVec2Vec2(vcp.rA, this.v_normal); - var rnB = crossVec2Vec2(vcp.rB, this.v_normal); - var kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB; - vcp.normalMass = kNormal > 0.0 ? 1.0 / kNormal : 0.0; - crossVec2Num(tangent$1, this.v_normal, 1.0); - var rtA = crossVec2Vec2(vcp.rA, tangent$1); - var rtB = crossVec2Vec2(vcp.rB, tangent$1); - var kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB; - vcp.tangentMass = kTangent > 0.0 ? 1.0 / kTangent : 0.0; - // Setup a velocity bias for restitution. - vcp.velocityBias = 0.0; - var vRel = 0; - vRel += dotVec2(this.v_normal, vB); - vRel += dotVec2(this.v_normal, crossNumVec2(temp$2, wB, vcp.rB)); - vRel -= dotVec2(this.v_normal, vA); - vRel -= dotVec2(this.v_normal, crossNumVec2(temp$2, wA, vcp.rA)); - if (vRel < -SettingsInternal.velocityThreshold) { - vcp.velocityBias = -this.v_restitution * vRel; - } - } - // If we have two points, then prepare the block solver. - if (this.v_pointCount == 2 && step.blockSolve) { - var vcp1 = this.v_points[0]; // VelocityConstraintPoint - var vcp2 = this.v_points[1]; // VelocityConstraintPoint - var rn1A = crossVec2Vec2(vcp1.rA, this.v_normal); - var rn1B = crossVec2Vec2(vcp1.rB, this.v_normal); - var rn2A = crossVec2Vec2(vcp2.rA, this.v_normal); - var rn2B = crossVec2Vec2(vcp2.rB, this.v_normal); - var k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B; - var k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B; - var k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B; - // Ensure a reasonable condition number. - var k_maxConditionNumber = 1000.0; - if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) { - // K is safe to invert. - this.v_K.ex.setNum(k11, k12); - this.v_K.ey.setNum(k12, k22); - // this.v_normalMass.set(this.v_K.getInverse()); - var a_1 = this.v_K.ex.x; - var b_1 = this.v_K.ey.x; - var c = this.v_K.ex.y; - var d_1 = this.v_K.ey.y; - var det = a_1 * d_1 - b_1 * c; - if (det !== 0.0) { - det = 1.0 / det; - } - this.v_normalMass.ex.x = det * d_1; - this.v_normalMass.ey.x = -det * b_1; - this.v_normalMass.ex.y = -det * c; - this.v_normalMass.ey.y = det * a_1; - } - else { - // The constraints are redundant, just use one. - // TODO_ERIN use deepest? - this.v_pointCount = 1; - } - } - copyVec2(positionA.c, cA); - positionA.a = aA; - copyVec2(velocityA.v, vA); - velocityA.w = wA; - copyVec2(positionB.c, cB); - positionB.a = aB; - copyVec2(velocityB.v, vB); - velocityB.w = wB; - }; - Contact.prototype.warmStartConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var velocityA = bodyA.c_velocity; - var velocityB = bodyB.c_velocity; - bodyA.c_position; - bodyB.c_position; - var mA = this.v_invMassA; - var iA = this.v_invIA; - var mB = this.v_invMassB; - var iB = this.v_invIB; - copyVec2(vA, velocityA.v); - var wA = velocityA.w; - copyVec2(vB, velocityB.v); - var wB = velocityB.w; - copyVec2(normal$2, this.v_normal); - crossVec2Num(tangent$1, normal$2, 1.0); - for (var j = 0; j < this.v_pointCount; ++j) { - var vcp = this.v_points[j]; // VelocityConstraintPoint - combine2Vec2(P$1, vcp.normalImpulse, normal$2, vcp.tangentImpulse, tangent$1); - wA -= iA * crossVec2Vec2(vcp.rA, P$1); - minusScaleVec2(vA, mA, P$1); - wB += iB * crossVec2Vec2(vcp.rB, P$1); - plusScaleVec2(vB, mB, P$1); - } - copyVec2(velocityA.v, vA); - velocityA.w = wA; - copyVec2(velocityB.v, vB); - velocityB.w = wB; - }; - Contact.prototype.storeConstraintImpulses = function (step) { - var manifold = this.m_manifold; - for (var j = 0; j < this.v_pointCount; ++j) { - manifold.points[j].normalImpulse = this.v_points[j].normalImpulse; - manifold.points[j].tangentImpulse = this.v_points[j].tangentImpulse; - } - }; - Contact.prototype.solveVelocityConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var velocityA = bodyA.c_velocity; - bodyA.c_position; - var velocityB = bodyB.c_velocity; - bodyB.c_position; - var mA = this.v_invMassA; - var iA = this.v_invIA; - var mB = this.v_invMassB; - var iB = this.v_invIB; - copyVec2(vA, velocityA.v); - var wA = velocityA.w; - copyVec2(vB, velocityB.v); - var wB = velocityB.w; - copyVec2(normal$2, this.v_normal); - crossVec2Num(tangent$1, normal$2, 1.0); - var friction = this.v_friction; - // Solve tangent constraints first because non-penetration is more important - // than friction. - for (var j = 0; j < this.v_pointCount; ++j) { - var vcp = this.v_points[j]; // VelocityConstraintPoint - // Relative velocity at contact - zeroVec2(dv); - plusVec2(dv, vB); - plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); - minusVec2(dv, vA); - minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); - // Compute tangent force - var vt = dotVec2(dv, tangent$1) - this.v_tangentSpeed; - var lambda = vcp.tangentMass * (-vt); - // Clamp the accumulated force - var maxFriction = friction * vcp.normalImpulse; - var newImpulse = clamp$1(vcp.tangentImpulse + lambda, -maxFriction, maxFriction); - lambda = newImpulse - vcp.tangentImpulse; - vcp.tangentImpulse = newImpulse; - // Apply contact impulse - scaleVec2(P$1, lambda, tangent$1); - minusScaleVec2(vA, mA, P$1); - wA -= iA * crossVec2Vec2(vcp.rA, P$1); - plusScaleVec2(vB, mB, P$1); - wB += iB * crossVec2Vec2(vcp.rB, P$1); - } - // Solve normal constraints - if (this.v_pointCount == 1 || step.blockSolve == false) { - for (var i = 0; i < this.v_pointCount; ++i) { - var vcp = this.v_points[i]; // VelocityConstraintPoint - // Relative velocity at contact - zeroVec2(dv); - plusVec2(dv, vB); - plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); - minusVec2(dv, vA); - minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); - // Compute normal impulse - var vn = dotVec2(dv, normal$2); - var lambda = -vcp.normalMass * (vn - vcp.velocityBias); - // Clamp the accumulated impulse - var newImpulse = math_max$3(vcp.normalImpulse + lambda, 0.0); - lambda = newImpulse - vcp.normalImpulse; - vcp.normalImpulse = newImpulse; - // Apply contact impulse - scaleVec2(P$1, lambda, normal$2); - minusScaleVec2(vA, mA, P$1); - wA -= iA * crossVec2Vec2(vcp.rA, P$1); - plusScaleVec2(vB, mB, P$1); - wB += iB * crossVec2Vec2(vcp.rB, P$1); - } - } - else { - // Block solver developed in collaboration with Dirk Gregorius (back in - // 01/07 on Box2D_Lite). - // Build the mini LCP for this contact patch - // - // vn = A * x + b, vn >= 0, x >= 0 and vn_i * x_i = 0 with i = 1..2 - // - // A = J * W * JT and J = ( -n, -r1 x n, n, r2 x n ) - // b = vn0 - velocityBias - // - // The system is solved using the "Total enumeration method" (s. Murty). - // The complementary constraint vn_i * x_i - // implies that we must have in any solution either vn_i = 0 or x_i = 0. - // So for the 2D contact problem the cases - // vn1 = 0 and vn2 = 0, x1 = 0 and x2 = 0, x1 = 0 and vn2 = 0, x2 = 0 and - // vn1 = 0 need to be tested. The first valid - // solution that satisfies the problem is chosen. - // - // In order to account of the accumulated impulse 'a' (because of the - // iterative nature of the solver which only requires - // that the accumulated impulse is clamped and not the incremental - // impulse) we change the impulse variable (x_i). - // - // Substitute: - // - // x = a + d - // - // a := old total impulse - // x := new total impulse - // d := incremental impulse - // - // For the current iteration we extend the formula for the incremental - // impulse - // to compute the new total impulse: - // - // vn = A * d + b - // = A * (x - a) + b - // = A * x + b - A * a - // = A * x + b' - // b' = b - A * a; - var vcp1 = this.v_points[0]; // VelocityConstraintPoint - var vcp2 = this.v_points[1]; // VelocityConstraintPoint - setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse); - // Relative velocity at contact - // let dv1 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp1.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp1.rA)); - zeroVec2(dv1); - plusVec2(dv1, vB); - plusVec2(dv1, crossNumVec2(temp$2, wB, vcp1.rB)); - minusVec2(dv1, vA); - minusVec2(dv1, crossNumVec2(temp$2, wA, vcp1.rA)); - // let dv2 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp2.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp2.rA)); - zeroVec2(dv2); - plusVec2(dv2, vB); - plusVec2(dv2, crossNumVec2(temp$2, wB, vcp2.rB)); - minusVec2(dv2, vA); - minusVec2(dv2, crossNumVec2(temp$2, wA, vcp2.rA)); - // Compute normal velocity - var vn1 = dotVec2(dv1, normal$2); - var vn2 = dotVec2(dv2, normal$2); - setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias); - // Compute b' - // b.sub(Mat22.mulVec2(this.v_K, a)); - b.x -= this.v_K.ex.x * a.x + this.v_K.ey.x * a.y; - b.y -= this.v_K.ex.y * a.x + this.v_K.ey.y * a.y; - // NOT_USED(k_errorTol); - while (true) { - // - // Case 1: vn = 0 - // - // 0 = A * x + b' - // - // Solve for x: - // - // x = - inv(A) * b' - // - // const x = Mat22.mulVec2(this.v_normalMass, b).neg(); - zeroVec2(x); - x.x = -(this.v_normalMass.ex.x * b.x + this.v_normalMass.ey.x * b.y); - x.y = -(this.v_normalMass.ex.y * b.x + this.v_normalMass.ey.y * b.y); - if (x.x >= 0.0 && x.y >= 0.0) { - // Get the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // - // Case 2: vn1 = 0 and x2 = 0 - // - // 0 = a11 * x1 + a12 * 0 + b1' - // vn2 = a21 * x1 + a22 * 0 + b2' - // - x.x = -vcp1.normalMass * b.x; - x.y = 0.0; - vn1 = 0.0; - vn2 = this.v_K.ex.y * x.x + b.y; - if (x.x >= 0.0 && vn2 >= 0.0) { - // Get the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // - // Case 3: vn2 = 0 and x1 = 0 - // - // vn1 = a11 * 0 + a12 * x2 + b1' - // 0 = a21 * 0 + a22 * x2 + b2' - // - x.x = 0.0; - x.y = -vcp2.normalMass * b.y; - vn1 = this.v_K.ey.x * x.y + b.x; - vn2 = 0.0; - if (x.y >= 0.0 && vn1 >= 0.0) { - // Resubstitute for the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // - // Case 4: x1 = 0 and x2 = 0 - // - // vn1 = b1 - // vn2 = b2; - // - x.x = 0.0; - x.y = 0.0; - vn1 = b.x; - vn2 = b.y; - if (vn1 >= 0.0 && vn2 >= 0.0) { - // Resubstitute for the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // No solution, give up. This is hit sometimes, but it doesn't seem to - // matter. - break; - } - } - copyVec2(velocityA.v, vA); - velocityA.w = wA; - copyVec2(velocityB.v, vB); - velocityB.w = wB; - }; - /** @internal */ - Contact.addType = function (type1, type2, callback) { - s_registers[type1] = s_registers[type1] || {}; - s_registers[type1][type2] = callback; - }; - /** @internal */ - Contact.create = function (fixtureA, indexA, fixtureB, indexB) { - var typeA = fixtureA.m_shape.m_type; - var typeB = fixtureB.m_shape.m_type; - var contact = contactPool.allocate(); - var evaluateFcn; - if (evaluateFcn = s_registers[typeA] && s_registers[typeA][typeB]) { - contact.initialize(fixtureA, indexA, fixtureB, indexB, evaluateFcn); - } - else if (evaluateFcn = s_registers[typeB] && s_registers[typeB][typeA]) { - contact.initialize(fixtureB, indexB, fixtureA, indexA, evaluateFcn); - } - else { - return null; - } - // Contact creation may swap fixtures. - fixtureA = contact.m_fixtureA; - fixtureB = contact.m_fixtureB; - indexA = contact.getChildIndexA(); - indexB = contact.getChildIndexB(); - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - // Connect to body A - contact.m_nodeA.contact = contact; - contact.m_nodeA.other = bodyB; - contact.m_nodeA.prev = null; - contact.m_nodeA.next = bodyA.m_contactList; - if (bodyA.m_contactList != null) { - bodyA.m_contactList.prev = contact.m_nodeA; - } - bodyA.m_contactList = contact.m_nodeA; - // Connect to body B - contact.m_nodeB.contact = contact; - contact.m_nodeB.other = bodyA; - contact.m_nodeB.prev = null; - contact.m_nodeB.next = bodyB.m_contactList; - if (bodyB.m_contactList != null) { - bodyB.m_contactList.prev = contact.m_nodeB; - } - bodyB.m_contactList = contact.m_nodeB; - // Wake up the bodies - if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) { - bodyA.setAwake(true); - bodyB.setAwake(true); - } - return contact; - }; - /** @internal */ - Contact.destroy = function (contact, listener) { - var fixtureA = contact.m_fixtureA; - var fixtureB = contact.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - if (contact.isTouching()) { - listener.endContact(contact); - } - // Remove from body 1 - if (contact.m_nodeA.prev) { - contact.m_nodeA.prev.next = contact.m_nodeA.next; - } - if (contact.m_nodeA.next) { - contact.m_nodeA.next.prev = contact.m_nodeA.prev; - } - if (contact.m_nodeA == bodyA.m_contactList) { - bodyA.m_contactList = contact.m_nodeA.next; - } - // Remove from body 2 - if (contact.m_nodeB.prev) { - contact.m_nodeB.prev.next = contact.m_nodeB.next; - } - if (contact.m_nodeB.next) { - contact.m_nodeB.next.prev = contact.m_nodeB.prev; - } - if (contact.m_nodeB == bodyB.m_contactList) { - bodyB.m_contactList = contact.m_nodeB.next; - } - if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) { - bodyA.setAwake(true); - bodyB.setAwake(true); - } - // const typeA = fixtureA.getType(); - // const typeB = fixtureB.getType(); - // const destroyFcn = s_registers[typeA][typeB].destroyFcn; - // if (typeof destroyFcn === 'function') { - // destroyFcn(contact); - // } - contactPool.release(contact); + Contact2.prototype.isEnabled = function() { + return this.m_enabledFlag; }; - return Contact; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var DEFAULTS$b = { - gravity: Vec2.zero(), - allowSleep: true, - warmStarting: true, - continuousPhysics: true, - subStepping: false, - blockSolve: true, - velocityIterations: 8, - positionIterations: 3 -}; -var World = /** @class */ (function () { - /** - * @param def World definition or gravity vector. - */ - function World(def) { - if (!(this instanceof World)) { - return new World(def); - } - this.s_step = new TimeStep(); - if (!def) { - def = {}; - } - else if (Vec2.isValid(def)) { - def = { gravity: def }; - } - def = options(def, DEFAULTS$b); - this.m_solver = new Solver(this); - this.m_broadPhase = new BroadPhase(); - this.m_contactList = null; - this.m_contactCount = 0; - this.m_bodyList = null; - this.m_bodyCount = 0; - this.m_jointList = null; - this.m_jointCount = 0; - this.m_stepComplete = true; - this.m_allowSleep = def.allowSleep; - this.m_gravity = Vec2.clone(def.gravity); - this.m_clearForces = true; - this.m_newFixture = false; - this.m_locked = false; - // These are for debugging the solver. - this.m_warmStarting = def.warmStarting; - this.m_continuousPhysics = def.continuousPhysics; - this.m_subStepping = def.subStepping; - this.m_blockSolve = def.blockSolve; - this.m_velocityIterations = def.velocityIterations; - this.m_positionIterations = def.positionIterations; - this.m_t = 0; - } - /** @internal */ - World.prototype._serialize = function () { - var bodies = []; - var joints = []; - for (var b = this.getBodyList(); b; b = b.getNext()) { - bodies.push(b); - } - for (var j = this.getJointList(); j; j = j.getNext()) { - // @ts-ignore - if (typeof j._serialize === "function") { - joints.push(j); - } - } - return { - gravity: this.m_gravity, - bodies: bodies, - joints: joints, - }; + Contact2.prototype.isTouching = function() { + return this.m_touchingFlag; }; - /** @internal */ - World._deserialize = function (data, context, restore) { - if (!data) { - return new World(); - } - var world = new World(data.gravity); - if (data.bodies) { - for (var i = data.bodies.length - 1; i >= 0; i -= 1) { - world._addBody(restore(Body, data.bodies[i], world)); - } - } - if (data.joints) { - for (var i = data.joints.length - 1; i >= 0; i--) { - world.createJoint(restore(Joint, data.joints[i], world)); - } - } - return world; - }; - /** - * Get the world body list. With the returned body, use Body.getNext to get the - * next body in the world list. A null body indicates the end of the list. - * - * @return the head of the world body list. - */ - World.prototype.getBodyList = function () { - return this.m_bodyList; - }; - /** - * Get the world joint list. With the returned joint, use Joint.getNext to get - * the next joint in the world list. A null joint indicates the end of the list. - * - * @return the head of the world joint list. - */ - World.prototype.getJointList = function () { - return this.m_jointList; - }; - /** - * Get the world contact list. With the returned contact, use Contact.getNext to - * get the next contact in the world list. A null contact indicates the end of - * the list. - * - * Warning: contacts are created and destroyed in the middle of a time step. - * Use ContactListener to avoid missing contacts. - * - * @return the head of the world contact list. - */ - World.prototype.getContactList = function () { - return this.m_contactList; - }; - World.prototype.getBodyCount = function () { - return this.m_bodyCount; - }; - World.prototype.getJointCount = function () { - return this.m_jointCount; - }; - /** - * Get the number of contacts (each may have 0 or more contact points). - */ - World.prototype.getContactCount = function () { - return this.m_contactCount; - }; - /** - * Change the global gravity vector. - */ - World.prototype.setGravity = function (gravity) { - this.m_gravity.set(gravity); - }; - /** - * Get the global gravity vector. - */ - World.prototype.getGravity = function () { - return this.m_gravity; - }; - /** - * Is the world locked (in the middle of a time step). - */ - World.prototype.isLocked = function () { - return this.m_locked; - }; - /** - * Enable/disable sleep. - */ - World.prototype.setAllowSleeping = function (flag) { - if (flag == this.m_allowSleep) { - return; - } - this.m_allowSleep = flag; - if (this.m_allowSleep == false) { - for (var b = this.m_bodyList; b; b = b.m_next) { - b.setAwake(true); - } - } + Contact2.prototype.getNext = function() { + return this.m_next; }; - World.prototype.getAllowSleeping = function () { - return this.m_allowSleep; - }; - /** - * Enable/disable warm starting. For testing. - */ - World.prototype.setWarmStarting = function (flag) { - this.m_warmStarting = flag; - }; - World.prototype.getWarmStarting = function () { - return this.m_warmStarting; - }; - /** - * Enable/disable continuous physics. For testing. - */ - World.prototype.setContinuousPhysics = function (flag) { - this.m_continuousPhysics = flag; - }; - World.prototype.getContinuousPhysics = function () { - return this.m_continuousPhysics; - }; - /** - * Enable/disable single stepped continuous physics. For testing. - */ - World.prototype.setSubStepping = function (flag) { - this.m_subStepping = flag; - }; - World.prototype.getSubStepping = function () { - return this.m_subStepping; - }; - /** - * Set flag to control automatic clearing of forces after each time step. - */ - World.prototype.setAutoClearForces = function (flag) { - this.m_clearForces = flag; - }; - /** - * Get the flag that controls automatic clearing of forces after each time step. - */ - World.prototype.getAutoClearForces = function () { - return this.m_clearForces; - }; - /** - * Manually clear the force buffer on all bodies. By default, forces are cleared - * automatically after each call to step. The default behavior is modified by - * calling setAutoClearForces. The purpose of this function is to support - * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step - * under a variable frame-rate. When you perform sub-stepping you will disable - * auto clearing of forces and instead call clearForces after all sub-steps are - * complete in one pass of your game loop. - * - * See {@link World.setAutoClearForces} - */ - World.prototype.clearForces = function () { - for (var body = this.m_bodyList; body; body = body.getNext()) { - body.m_force.setZero(); - body.m_torque = 0.0; - } - }; - /** - * Query the world for all fixtures that potentially overlap the provided AABB. - * - * @param aabb The query box. - * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query. - */ - World.prototype.queryAABB = function (aabb, callback) { - var broadPhase = this.m_broadPhase; - this.m_broadPhase.query(aabb, function (proxyId) { - var proxy = broadPhase.getUserData(proxyId); - return callback(proxy.fixture); - }); + Contact2.prototype.getFixtureA = function() { + return this.m_fixtureA; }; - /** - * Ray-cast the world for all fixtures in the path of the ray. Your callback - * controls whether you get the closest point, any point, or n-points. The - * ray-cast ignores shapes that contain the starting point. - * - * @param point1 The ray starting point - * @param point2 The ray ending point - * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value. - */ - World.prototype.rayCast = function (point1, point2, callback) { - var broadPhase = this.m_broadPhase; - this.m_broadPhase.rayCast({ - maxFraction: 1.0, - p1: point1, - p2: point2 - }, function (input, proxyId) { - var proxy = broadPhase.getUserData(proxyId); - var fixture = proxy.fixture; - var index = proxy.childIndex; - // @ts-ignore - var output = {}; // TODO GC - var hit = fixture.rayCast(output, input, index); - if (hit) { - var fraction = output.fraction; - var point = Vec2.add(Vec2.mulNumVec2((1.0 - fraction), input.p1), Vec2.mulNumVec2(fraction, input.p2)); - return callback(fixture, point, output.normal, fraction); - } - return input.maxFraction; - }); + Contact2.prototype.getFixtureB = function() { + return this.m_fixtureB; }; - /** - * Get the number of broad-phase proxies. - */ - World.prototype.getProxyCount = function () { - return this.m_broadPhase.getProxyCount(); - }; - /** - * Get the height of broad-phase dynamic tree. - */ - World.prototype.getTreeHeight = function () { - return this.m_broadPhase.getTreeHeight(); - }; - /** - * Get the balance of broad-phase dynamic tree. - */ - World.prototype.getTreeBalance = function () { - return this.m_broadPhase.getTreeBalance(); - }; - /** - * Get the quality metric of broad-phase dynamic tree. The smaller the better. - * The minimum is 1. - */ - World.prototype.getTreeQuality = function () { - return this.m_broadPhase.getTreeQuality(); - }; - /** - * Shift the world origin. Useful for large worlds. The body shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - World.prototype.shiftOrigin = function (newOrigin) { - if (this.m_locked) { - return; - } - for (var b = this.m_bodyList; b; b = b.m_next) { - b.m_xf.p.sub(newOrigin); - b.m_sweep.c0.sub(newOrigin); - b.m_sweep.c.sub(newOrigin); - } - for (var j = this.m_jointList; j; j = j.m_next) { - j.shiftOrigin(newOrigin); - } - this.m_broadPhase.shiftOrigin(newOrigin); + Contact2.prototype.getChildIndexA = function() { + return this.m_indexA; }; - /** @internal Used for deserialize. */ - World.prototype._addBody = function (body) { - if (this.isLocked()) { - return; - } - // Add to world doubly linked list. - body.m_prev = null; - body.m_next = this.m_bodyList; - if (this.m_bodyList) { - this.m_bodyList.m_prev = body; - } - this.m_bodyList = body; - ++this.m_bodyCount; - }; - // tslint:disable-next-line:typedef - World.prototype.createBody = function (arg1, arg2) { - if (this.isLocked()) { - return null; - } - var def = {}; - if (!arg1) ; - else if (Vec2.isValid(arg1)) { - def = { position: arg1, angle: arg2 }; - } - else if (typeof arg1 === "object") { - def = arg1; - } - var body = new Body(this, def); - this._addBody(body); - return body; - }; - // tslint:disable-next-line:typedef - World.prototype.createDynamicBody = function (arg1, arg2) { - var def = {}; - if (!arg1) ; - else if (Vec2.isValid(arg1)) { - def = { position: arg1, angle: arg2 }; - } - else if (typeof arg1 === "object") { - def = arg1; - } - def.type = "dynamic"; - return this.createBody(def); - }; - // tslint:disable-next-line:typedef - World.prototype.createKinematicBody = function (arg1, arg2) { - var def = {}; - if (!arg1) ; - else if (Vec2.isValid(arg1)) { - def = { position: arg1, angle: arg2 }; - } - else if (typeof arg1 === "object") { - def = arg1; - } - def.type = "kinematic"; - return this.createBody(def); - }; - /** - * Destroy a rigid body given a definition. No reference to the definition is - * retained. - * - * Warning: This automatically deletes all associated shapes and joints. - * - * Warning: This function is locked during callbacks. - */ - World.prototype.destroyBody = function (b) { - if (this.isLocked()) { - return; - } - if (b.m_destroyed) { - return false; - } - // Delete the attached joints. - var je = b.m_jointList; - while (je) { - var je0 = je; - je = je.next; - this.publish("remove-joint", je0.joint); - this.destroyJoint(je0.joint); - b.m_jointList = je; - } - b.m_jointList = null; - // Delete the attached contacts. - var ce = b.m_contactList; - while (ce) { - var ce0 = ce; - ce = ce.next; - this.destroyContact(ce0.contact); - b.m_contactList = ce; - } - b.m_contactList = null; - // Delete the attached fixtures. This destroys broad-phase proxies. - var f = b.m_fixtureList; - while (f) { - var f0 = f; - f = f.m_next; - this.publish("remove-fixture", f0); - f0.destroyProxies(this.m_broadPhase); - b.m_fixtureList = f; - } - b.m_fixtureList = null; - // Remove world body list. - if (b.m_prev) { - b.m_prev.m_next = b.m_next; - } - if (b.m_next) { - b.m_next.m_prev = b.m_prev; - } - if (b == this.m_bodyList) { - this.m_bodyList = b.m_next; - } - b.m_destroyed = true; - --this.m_bodyCount; - this.publish("remove-body", b); - return true; + Contact2.prototype.getChildIndexB = function() { + return this.m_indexB; }; - /** - * Create a joint to constrain bodies together. No reference to the definition - * is retained. This may cause the connected bodies to cease colliding. - * - * Warning: This function is locked during callbacks. - */ - World.prototype.createJoint = function (joint) { - if (this.isLocked()) { - return null; - } - // Connect to the world list. - joint.m_prev = null; - joint.m_next = this.m_jointList; - if (this.m_jointList) { - this.m_jointList.m_prev = joint; - } - this.m_jointList = joint; - ++this.m_jointCount; - // Connect to the bodies' doubly linked lists. - joint.m_edgeA.joint = joint; - joint.m_edgeA.other = joint.m_bodyB; - joint.m_edgeA.prev = null; - joint.m_edgeA.next = joint.m_bodyA.m_jointList; - if (joint.m_bodyA.m_jointList) - joint.m_bodyA.m_jointList.prev = joint.m_edgeA; - joint.m_bodyA.m_jointList = joint.m_edgeA; - joint.m_edgeB.joint = joint; - joint.m_edgeB.other = joint.m_bodyA; - joint.m_edgeB.prev = null; - joint.m_edgeB.next = joint.m_bodyB.m_jointList; - if (joint.m_bodyB.m_jointList) - joint.m_bodyB.m_jointList.prev = joint.m_edgeB; - joint.m_bodyB.m_jointList = joint.m_edgeB; - // If the joint prevents collisions, then flag any contacts for filtering. - if (joint.m_collideConnected == false) { - for (var edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) { - if (edge.other == joint.m_bodyA) { - // Flag the contact for filtering at the next time step (where either - // body is awake). - edge.contact.flagForFiltering(); - } - } - } - // Note: creating a joint doesn't wake the bodies. - return joint; + Contact2.prototype.flagForFiltering = function() { + this.m_filterFlag = true; }; - /** - * Destroy a joint. This may cause the connected bodies to begin colliding. - * Warning: This function is locked during callbacks. - */ - World.prototype.destroyJoint = function (joint) { - if (this.isLocked()) { - return; - } - // Remove from the doubly linked list. - if (joint.m_prev) { - joint.m_prev.m_next = joint.m_next; - } - if (joint.m_next) { - joint.m_next.m_prev = joint.m_prev; - } - if (joint == this.m_jointList) { - this.m_jointList = joint.m_next; - } - // Disconnect from bodies. - var bodyA = joint.m_bodyA; - var bodyB = joint.m_bodyB; - // Wake up connected bodies. - bodyA.setAwake(true); - bodyB.setAwake(true); - // Remove from body 1. - if (joint.m_edgeA.prev) { - joint.m_edgeA.prev.next = joint.m_edgeA.next; - } - if (joint.m_edgeA.next) { - joint.m_edgeA.next.prev = joint.m_edgeA.prev; - } - if (joint.m_edgeA == bodyA.m_jointList) { - bodyA.m_jointList = joint.m_edgeA.next; - } - joint.m_edgeA.prev = null; - joint.m_edgeA.next = null; - // Remove from body 2 - if (joint.m_edgeB.prev) { - joint.m_edgeB.prev.next = joint.m_edgeB.next; - } - if (joint.m_edgeB.next) { - joint.m_edgeB.next.prev = joint.m_edgeB.prev; - } - if (joint.m_edgeB == bodyB.m_jointList) { - bodyB.m_jointList = joint.m_edgeB.next; - } - joint.m_edgeB.prev = null; - joint.m_edgeB.next = null; - --this.m_jointCount; - // If the joint prevents collisions, then flag any contacts for filtering. - if (joint.m_collideConnected == false) { - var edge = bodyB.getContactList(); - while (edge) { - if (edge.other == bodyA) { - // Flag the contact for filtering at the next time step (where either - // body is awake). - edge.contact.flagForFiltering(); - } - edge = edge.next; - } - } - this.publish("remove-joint", joint); - }; - /** - * Take a time step. This performs collision detection, integration, and - * constraint solution. - * - * Broad-phase, narrow-phase, solve and solve time of impacts. - * - * @param timeStep Time step, this should not vary. - */ - World.prototype.step = function (timeStep, velocityIterations, positionIterations) { - this.publish("pre-step", timeStep); - if ((velocityIterations | 0) !== velocityIterations) { - // TODO: remove this in future - velocityIterations = 0; - } - velocityIterations = velocityIterations || this.m_velocityIterations; - positionIterations = positionIterations || this.m_positionIterations; - // If new fixtures were added, we need to find the new contacts. - if (this.m_newFixture) { - this.findNewContacts(); - this.m_newFixture = false; - } - this.m_locked = true; - this.s_step.reset(timeStep); - this.s_step.velocityIterations = velocityIterations; - this.s_step.positionIterations = positionIterations; - this.s_step.warmStarting = this.m_warmStarting; - this.s_step.blockSolve = this.m_blockSolve; - // Update contacts. This is where some contacts are destroyed. - this.updateContacts(); - // Integrate velocities, solve velocity constraints, and integrate positions. - if (this.m_stepComplete && timeStep > 0.0) { - this.m_solver.solveWorld(this.s_step); - // Synchronize fixtures, check for out of range bodies. - for (var b = this.m_bodyList; b; b = b.getNext()) { - // If a body was not in an island then it did not move. - if (b.m_islandFlag == false) { - continue; - } - if (b.isStatic()) { - continue; - } - // Update fixtures (for broad-phase). - b.synchronizeFixtures(); - } - // Look for new contacts. - this.findNewContacts(); - } - // Handle TOI events. - if (this.m_continuousPhysics && timeStep > 0.0) { - this.m_solver.solveWorldTOI(this.s_step); - } - if (this.m_clearForces) { - this.clearForces(); - } - this.m_locked = false; - this.publish("post-step", timeStep); - }; - /** - * @internal - * Call this method to find new contacts. - */ - World.prototype.findNewContacts = function () { - var _this = this; - this.m_broadPhase.updatePairs(function (proxyA, proxyB) { return _this.createContact(proxyA, proxyB); }); - }; - /** - * @internal - * Callback for broad-phase. - */ - World.prototype.createContact = function (proxyA, proxyB) { - var fixtureA = proxyA.fixture; - var fixtureB = proxyB.fixture; - var indexA = proxyA.childIndex; - var indexB = proxyB.childIndex; - var bodyA = fixtureA.getBody(); - var bodyB = fixtureB.getBody(); - // Are the fixtures on the same body? - if (bodyA == bodyB) { - return; - } - // TODO_ERIN use a hash table to remove a potential bottleneck when both - // bodies have a lot of contacts. - // Does a contact already exist? - var edge = bodyB.getContactList(); // ContactEdge - while (edge) { - if (edge.other == bodyA) { - var fA = edge.contact.getFixtureA(); - var fB = edge.contact.getFixtureB(); - var iA = edge.contact.getChildIndexA(); - var iB = edge.contact.getChildIndexB(); - if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) { - // A contact already exists. - return; - } - if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) { - // A contact already exists. - return; - } - } - edge = edge.next; - } - if (bodyB.shouldCollide(bodyA) == false) { - return; - } - if (fixtureB.shouldCollide(fixtureA) == false) { - return; - } - // Call the factory. - var contact = Contact.create(fixtureA, indexA, fixtureB, indexB); - if (contact == null) { - return; - } - // Insert into the world. - contact.m_prev = null; - if (this.m_contactList != null) { - contact.m_next = this.m_contactList; - this.m_contactList.m_prev = contact; - } - this.m_contactList = contact; - ++this.m_contactCount; - }; - /** - * @internal - * Removes old non-overlapping contacts, applies filters and updates contacts. - */ - World.prototype.updateContacts = function () { - // Update awake contacts. - var c; - var next_c = this.m_contactList; - while (c = next_c) { - next_c = c.getNext(); - var fixtureA = c.getFixtureA(); - var fixtureB = c.getFixtureB(); - var indexA = c.getChildIndexA(); - var indexB = c.getChildIndexB(); - var bodyA = fixtureA.getBody(); - var bodyB = fixtureB.getBody(); - // Is this contact flagged for filtering? - if (c.m_filterFlag) { - if (bodyB.shouldCollide(bodyA) == false) { - this.destroyContact(c); - continue; - } - if (fixtureB.shouldCollide(fixtureA) == false) { - this.destroyContact(c); - continue; - } - // Clear the filtering flag. - c.m_filterFlag = false; - } - var activeA = bodyA.isAwake() && !bodyA.isStatic(); - var activeB = bodyB.isAwake() && !bodyB.isStatic(); - // At least one body must be awake and it must be dynamic or kinematic. - if (activeA == false && activeB == false) { - continue; - } - var proxyIdA = fixtureA.m_proxies[indexA].proxyId; - var proxyIdB = fixtureB.m_proxies[indexB].proxyId; - var overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB); - // Here we destroy contacts that cease to overlap in the broad-phase. - if (overlap == false) { - this.destroyContact(c); - continue; - } - // The contact persists. - c.update(this); - } + Contact2.prototype.setFriction = function(friction) { + this.m_friction = friction; }; - /** @internal */ - World.prototype.destroyContact = function (contact) { - // Remove from the world. - if (contact.m_prev) { - contact.m_prev.m_next = contact.m_next; - } - if (contact.m_next) { - contact.m_next.m_prev = contact.m_prev; - } - if (contact == this.m_contactList) { - this.m_contactList = contact.m_next; - } - Contact.destroy(contact, this); - --this.m_contactCount; + Contact2.prototype.getFriction = function() { + return this.m_friction; }; - /** - * Register an event listener. - */ - // tslint:disable-next-line:typedef - World.prototype.on = function (name, listener) { - if (typeof name !== "string" || typeof listener !== "function") { - return this; - } - if (!this._listeners) { - this._listeners = {}; - } - if (!this._listeners[name]) { - this._listeners[name] = []; - } - this._listeners[name].push(listener); - return this; + Contact2.prototype.resetFriction = function() { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction); }; - /** - * Remove an event listener. - */ - // tslint:disable-next-line:typedef - World.prototype.off = function (name, listener) { - if (typeof name !== "string" || typeof listener !== "function") { - return this; - } - var listeners = this._listeners && this._listeners[name]; - if (!listeners || !listeners.length) { - return this; - } - var index = listeners.indexOf(listener); - if (index >= 0) { - listeners.splice(index, 1); - } - return this; + Contact2.prototype.setRestitution = function(restitution) { + this.m_restitution = restitution; }; - World.prototype.publish = function (name, arg1, arg2, arg3) { - var listeners = this._listeners && this._listeners[name]; - if (!listeners || !listeners.length) { - return 0; - } - for (var l = 0; l < listeners.length; l++) { - listeners[l].call(this, arg1, arg2, arg3); - } - return listeners.length; + Contact2.prototype.getRestitution = function() { + return this.m_restitution; }; - /** @internal */ - World.prototype.beginContact = function (contact) { - this.publish("begin-contact", contact); + Contact2.prototype.resetRestitution = function() { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution); }; - /** @internal */ - World.prototype.endContact = function (contact) { - this.publish("end-contact", contact); + Contact2.prototype.setTangentSpeed = function(speed) { + this.m_tangentSpeed = speed; }; - /** @internal */ - World.prototype.preSolve = function (contact, oldManifold) { - this.publish("pre-solve", contact, oldManifold); + Contact2.prototype.getTangentSpeed = function() { + return this.m_tangentSpeed; }; - /** @internal */ - World.prototype.postSolve = function (contact, impulse) { - this.publish("post-solve", contact, impulse); + Contact2.prototype.evaluate = function(manifold, xfA2, xfB2) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + this.m_evaluateFcn(manifold, xfA2, fixtureA, this.m_indexA, xfB2, fixtureB, this.m_indexB); }; - return World; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -var Vec3 = /** @class */ (function () { - function Vec3(x, y, z) { - if (!(this instanceof Vec3)) { - return new Vec3(x, y, z); - } - if (typeof x === "undefined") { - this.x = 0; - this.y = 0; - this.z = 0; - } - else if (typeof x === "object") { - this.x = x.x; - this.y = x.y; - this.z = x.z; - } - else { - this.x = x; - this.y = y; - this.z = z; + Contact2.prototype.update = function(listener) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var shapeA = fixtureA.m_shape; + var shapeB = fixtureB.m_shape; + if (shapeA === null || shapeB === null) + return; + this.m_enabledFlag = true; + var touching = false; + var wasTouching = this.m_touchingFlag; + var sensorA = fixtureA.m_isSensor; + var sensorB = fixtureB.m_isSensor; + var sensor = sensorA || sensorB; + var xfA2 = bodyA.m_xf; + var xfB2 = bodyB.m_xf; + if (sensor) { + touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA2, xfB2); + this.m_manifold.pointCount = 0; + } else { + oldManifold.recycle(); + oldManifold.set(this.m_manifold); + this.m_manifold.recycle(); + this.evaluate(this.m_manifold, xfA2, xfB2); + touching = this.m_manifold.pointCount > 0; + for (var i = 0; i < this.m_manifold.pointCount; ++i) { + var nmp = this.m_manifold.points[i]; + nmp.normalImpulse = 0; + nmp.tangentImpulse = 0; + for (var j = 0; j < oldManifold.pointCount; ++j) { + var omp = oldManifold.points[j]; + if (omp.id.key === nmp.id.key) { + nmp.normalImpulse = omp.normalImpulse; + nmp.tangentImpulse = omp.tangentImpulse; + break; + } + } } - } - /** @internal */ - Vec3.prototype._serialize = function () { - return { - x: this.x, - y: this.y, - z: this.z - }; - }; - /** @internal */ - Vec3._deserialize = function (data) { - var obj = Object.create(Vec3.prototype); - obj.x = data.x; - obj.y = data.y; - obj.z = data.z; - return obj; - }; - /** @hidden */ - Vec3.neo = function (x, y, z) { - var obj = Object.create(Vec3.prototype); - obj.x = x; - obj.y = y; - obj.z = z; - return obj; - }; - Vec3.zero = function () { - var obj = Object.create(Vec3.prototype); - obj.x = 0; - obj.y = 0; - obj.z = 0; - return obj; - }; - Vec3.clone = function (v) { - return Vec3.neo(v.x, v.y, v.z); - }; - /** @hidden */ - Vec3.prototype.toString = function () { - return JSON.stringify(this); - }; - /** Does this vector contain finite coordinates? */ - Vec3.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; + if (touching !== wasTouching) { + bodyA.setAwake(true); + bodyB.setAwake(true); } - return Number.isFinite(obj.x) && Number.isFinite(obj.y) && Number.isFinite(obj.z); - }; - Vec3.assert = function (o) { - }; - Vec3.prototype.setZero = function () { - this.x = 0.0; - this.y = 0.0; - this.z = 0.0; - return this; + } + this.m_touchingFlag = touching; + var hasListener = typeof listener === "object" && listener !== null; + if (!wasTouching && touching && hasListener) { + listener.beginContact(this); + } + if (wasTouching && !touching && hasListener) { + listener.endContact(this); + } + if (!sensor && touching && hasListener && oldManifold) { + listener.preSolve(this, oldManifold); + } }; - Vec3.prototype.set = function (x, y, z) { - this.x = x; - this.y = y; - this.z = z; - return this; + Contact2.prototype.solvePositionConstraint = function(step) { + return this._solvePositionConstraint(step, null, null); }; - Vec3.prototype.add = function (w) { - this.x += w.x; - this.y += w.y; - this.z += w.z; - return this; + Contact2.prototype.solvePositionConstraintTOI = function(step, toiA, toiB) { + return this._solvePositionConstraint(step, toiA, toiB); }; - Vec3.prototype.sub = function (w) { - this.x -= w.x; - this.y -= w.y; - this.z -= w.z; - return this; + Contact2.prototype._solvePositionConstraint = function(step, toiA, toiB) { + var toi = toiA !== null && toiB !== null ? true : false; + var minSeparation = 0; + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return minSeparation; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return minSeparation; + bodyA.c_velocity; + bodyB.c_velocity; + var positionA = bodyA.c_position; + var positionB = bodyB.c_position; + var localCenterA = this.p_localCenterA; + var localCenterB = this.p_localCenterB; + var mA = 0; + var iA = 0; + if (!toi || (bodyA === toiA || bodyA === toiB)) { + mA = this.p_invMassA; + iA = this.p_invIA; + } + var mB = 0; + var iB = 0; + if (!toi || (bodyB === toiA || bodyB === toiB)) { + mB = this.p_invMassB; + iB = this.p_invIB; + } + copyVec2(cA, positionA.c); + var aA = positionA.a; + copyVec2(cB, positionB.c); + var aB = positionB.a; + for (var j = 0; j < this.p_pointCount; ++j) { + getTransform(xfA, localCenterA, cA, aA); + getTransform(xfB, localCenterB, cB, aB); + var separation = void 0; + switch (this.p_type) { + case ManifoldType.e_circles: { + transformVec2(pointA, xfA, this.p_localPoint); + transformVec2(pointB, xfB, this.p_localPoints[0]); + subVec2(normal$2, pointB, pointA); + normalizeVec2(normal$2); + combine2Vec2(point, 0.5, pointA, 0.5, pointB); + separation = dotVec2(pointB, normal$2) - dotVec2(pointA, normal$2) - this.p_radiusA - this.p_radiusB; + break; + } + case ManifoldType.e_faceA: { + rotVec2(normal$2, xfA.q, this.p_localNormal); + transformVec2(planePoint$1, xfA, this.p_localPoint); + transformVec2(clipPoint, xfB, this.p_localPoints[j]); + separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; + copyVec2(point, clipPoint); + break; + } + case ManifoldType.e_faceB: { + rotVec2(normal$2, xfB.q, this.p_localNormal); + transformVec2(planePoint$1, xfB, this.p_localPoint); + transformVec2(clipPoint, xfA, this.p_localPoints[j]); + separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; + copyVec2(point, clipPoint); + negVec2(normal$2); + break; + } + default: { + return minSeparation; + } + } + subVec2(rA, point, cA); + subVec2(rB, point, cB); + minSeparation = math_min$5(minSeparation, separation); + var baumgarte = toi ? SettingsInternal.toiBaugarte : SettingsInternal.baumgarte; + var linearSlop = SettingsInternal.linearSlop; + var maxLinearCorrection = SettingsInternal.maxLinearCorrection; + var C = clamp$1(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0); + var rnA = crossVec2Vec2(rA, normal$2); + var rnB = crossVec2Vec2(rB, normal$2); + var K = mA + mB + iA * rnA * rnA + iB * rnB * rnB; + var impulse = K > 0 ? -C / K : 0; + scaleVec2(P$1, impulse, normal$2); + minusScaleVec2(cA, mA, P$1); + aA -= iA * crossVec2Vec2(rA, P$1); + plusScaleVec2(cB, mB, P$1); + aB += iB * crossVec2Vec2(rB, P$1); + } + copyVec2(positionA.c, cA); + positionA.a = aA; + copyVec2(positionB.c, cB); + positionB.a = aB; + return minSeparation; + }; + Contact2.prototype.initVelocityConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var velocityA = bodyA.c_velocity; + var velocityB = bodyB.c_velocity; + var positionA = bodyA.c_position; + var positionB = bodyB.c_position; + var radiusA = this.p_radiusA; + var radiusB = this.p_radiusB; + var manifold = this.m_manifold; + var mA = this.v_invMassA; + var mB = this.v_invMassB; + var iA = this.v_invIA; + var iB = this.v_invIB; + var localCenterA = this.p_localCenterA; + var localCenterB = this.p_localCenterB; + copyVec2(cA, positionA.c); + var aA = positionA.a; + copyVec2(vA, velocityA.v); + var wA = velocityA.w; + copyVec2(cB, positionB.c); + var aB = positionB.a; + copyVec2(vB, velocityB.v); + var wB = velocityB.w; + getTransform(xfA, localCenterA, cA, aA); + getTransform(xfB, localCenterB, cB, aB); + worldManifold.recycle(); + manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB); + copyVec2(this.v_normal, worldManifold.normal); + for (var j = 0; j < this.v_pointCount; ++j) { + var vcp = this.v_points[j]; + var wmp = worldManifold.points[j]; + subVec2(vcp.rA, wmp, cA); + subVec2(vcp.rB, wmp, cB); + var rnA = crossVec2Vec2(vcp.rA, this.v_normal); + var rnB = crossVec2Vec2(vcp.rB, this.v_normal); + var kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB; + vcp.normalMass = kNormal > 0 ? 1 / kNormal : 0; + crossVec2Num(tangent$1, this.v_normal, 1); + var rtA = crossVec2Vec2(vcp.rA, tangent$1); + var rtB = crossVec2Vec2(vcp.rB, tangent$1); + var kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB; + vcp.tangentMass = kTangent > 0 ? 1 / kTangent : 0; + vcp.velocityBias = 0; + var vRel = 0; + vRel += dotVec2(this.v_normal, vB); + vRel += dotVec2(this.v_normal, crossNumVec2(temp$2, wB, vcp.rB)); + vRel -= dotVec2(this.v_normal, vA); + vRel -= dotVec2(this.v_normal, crossNumVec2(temp$2, wA, vcp.rA)); + if (vRel < -SettingsInternal.velocityThreshold) { + vcp.velocityBias = -this.v_restitution * vRel; + } + } + if (this.v_pointCount == 2 && step.blockSolve) { + var vcp1 = this.v_points[0]; + var vcp2 = this.v_points[1]; + var rn1A = crossVec2Vec2(vcp1.rA, this.v_normal); + var rn1B = crossVec2Vec2(vcp1.rB, this.v_normal); + var rn2A = crossVec2Vec2(vcp2.rA, this.v_normal); + var rn2B = crossVec2Vec2(vcp2.rB, this.v_normal); + var k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B; + var k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B; + var k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B; + var k_maxConditionNumber = 1e3; + if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) { + this.v_K.ex.setNum(k11, k12); + this.v_K.ey.setNum(k12, k22); + var a_1 = this.v_K.ex.x; + var b_1 = this.v_K.ey.x; + var c2 = this.v_K.ex.y; + var d_1 = this.v_K.ey.y; + var det = a_1 * d_1 - b_1 * c2; + if (det !== 0) { + det = 1 / det; + } + this.v_normalMass.ex.x = det * d_1; + this.v_normalMass.ey.x = -det * b_1; + this.v_normalMass.ex.y = -det * c2; + this.v_normalMass.ey.y = det * a_1; + } else { + this.v_pointCount = 1; + } + } + copyVec2(positionA.c, cA); + positionA.a = aA; + copyVec2(velocityA.v, vA); + velocityA.w = wA; + copyVec2(positionB.c, cB); + positionB.a = aB; + copyVec2(velocityB.v, vB); + velocityB.w = wB; + }; + Contact2.prototype.warmStartConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var velocityA = bodyA.c_velocity; + var velocityB = bodyB.c_velocity; + bodyA.c_position; + bodyB.c_position; + var mA = this.v_invMassA; + var iA = this.v_invIA; + var mB = this.v_invMassB; + var iB = this.v_invIB; + copyVec2(vA, velocityA.v); + var wA = velocityA.w; + copyVec2(vB, velocityB.v); + var wB = velocityB.w; + copyVec2(normal$2, this.v_normal); + crossVec2Num(tangent$1, normal$2, 1); + for (var j = 0; j < this.v_pointCount; ++j) { + var vcp = this.v_points[j]; + combine2Vec2(P$1, vcp.normalImpulse, normal$2, vcp.tangentImpulse, tangent$1); + wA -= iA * crossVec2Vec2(vcp.rA, P$1); + minusScaleVec2(vA, mA, P$1); + wB += iB * crossVec2Vec2(vcp.rB, P$1); + plusScaleVec2(vB, mB, P$1); + } + copyVec2(velocityA.v, vA); + velocityA.w = wA; + copyVec2(velocityB.v, vB); + velocityB.w = wB; + }; + Contact2.prototype.storeConstraintImpulses = function(step) { + var manifold = this.m_manifold; + for (var j = 0; j < this.v_pointCount; ++j) { + manifold.points[j].normalImpulse = this.v_points[j].normalImpulse; + manifold.points[j].tangentImpulse = this.v_points[j].tangentImpulse; + } + }; + Contact2.prototype.solveVelocityConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var velocityA = bodyA.c_velocity; + bodyA.c_position; + var velocityB = bodyB.c_velocity; + bodyB.c_position; + var mA = this.v_invMassA; + var iA = this.v_invIA; + var mB = this.v_invMassB; + var iB = this.v_invIB; + copyVec2(vA, velocityA.v); + var wA = velocityA.w; + copyVec2(vB, velocityB.v); + var wB = velocityB.w; + copyVec2(normal$2, this.v_normal); + crossVec2Num(tangent$1, normal$2, 1); + var friction = this.v_friction; + for (var j = 0; j < this.v_pointCount; ++j) { + var vcp = this.v_points[j]; + zeroVec2(dv); + plusVec2(dv, vB); + plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); + minusVec2(dv, vA); + minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); + var vt = dotVec2(dv, tangent$1) - this.v_tangentSpeed; + var lambda = vcp.tangentMass * -vt; + var maxFriction = friction * vcp.normalImpulse; + var newImpulse = clamp$1(vcp.tangentImpulse + lambda, -maxFriction, maxFriction); + lambda = newImpulse - vcp.tangentImpulse; + vcp.tangentImpulse = newImpulse; + scaleVec2(P$1, lambda, tangent$1); + minusScaleVec2(vA, mA, P$1); + wA -= iA * crossVec2Vec2(vcp.rA, P$1); + plusScaleVec2(vB, mB, P$1); + wB += iB * crossVec2Vec2(vcp.rB, P$1); + } + if (this.v_pointCount == 1 || step.blockSolve == false) { + for (var i = 0; i < this.v_pointCount; ++i) { + var vcp = this.v_points[i]; + zeroVec2(dv); + plusVec2(dv, vB); + plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); + minusVec2(dv, vA); + minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); + var vn = dotVec2(dv, normal$2); + var lambda = -vcp.normalMass * (vn - vcp.velocityBias); + var newImpulse = math_max$3(vcp.normalImpulse + lambda, 0); + lambda = newImpulse - vcp.normalImpulse; + vcp.normalImpulse = newImpulse; + scaleVec2(P$1, lambda, normal$2); + minusScaleVec2(vA, mA, P$1); + wA -= iA * crossVec2Vec2(vcp.rA, P$1); + plusScaleVec2(vB, mB, P$1); + wB += iB * crossVec2Vec2(vcp.rB, P$1); + } + } else { + var vcp1 = this.v_points[0]; + var vcp2 = this.v_points[1]; + setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse); + zeroVec2(dv1); + plusVec2(dv1, vB); + plusVec2(dv1, crossNumVec2(temp$2, wB, vcp1.rB)); + minusVec2(dv1, vA); + minusVec2(dv1, crossNumVec2(temp$2, wA, vcp1.rA)); + zeroVec2(dv2); + plusVec2(dv2, vB); + plusVec2(dv2, crossNumVec2(temp$2, wB, vcp2.rB)); + minusVec2(dv2, vA); + minusVec2(dv2, crossNumVec2(temp$2, wA, vcp2.rA)); + var vn1 = dotVec2(dv1, normal$2); + var vn2 = dotVec2(dv2, normal$2); + setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias); + b.x -= this.v_K.ex.x * a.x + this.v_K.ey.x * a.y; + b.y -= this.v_K.ex.y * a.x + this.v_K.ey.y * a.y; + while (true) { + zeroVec2(x); + x.x = -(this.v_normalMass.ex.x * b.x + this.v_normalMass.ey.x * b.y); + x.y = -(this.v_normalMass.ex.y * b.x + this.v_normalMass.ey.y * b.y); + if (x.x >= 0 && x.y >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + x.x = -vcp1.normalMass * b.x; + x.y = 0; + vn1 = 0; + vn2 = this.v_K.ex.y * x.x + b.y; + if (x.x >= 0 && vn2 >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + x.x = 0; + x.y = -vcp2.normalMass * b.y; + vn1 = this.v_K.ey.x * x.y + b.x; + vn2 = 0; + if (x.y >= 0 && vn1 >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + x.x = 0; + x.y = 0; + vn1 = b.x; + vn2 = b.y; + if (vn1 >= 0 && vn2 >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + break; + } + } + copyVec2(velocityA.v, vA); + velocityA.w = wA; + copyVec2(velocityB.v, vB); + velocityB.w = wB; + }; + Contact2.addType = function(type1, type2, callback) { + s_registers[type1] = s_registers[type1] || {}; + s_registers[type1][type2] = callback; + }; + Contact2.create = function(fixtureA, indexA, fixtureB, indexB) { + var typeA = fixtureA.m_shape.m_type; + var typeB = fixtureB.m_shape.m_type; + var contact = contactPool.allocate(); + var evaluateFcn; + if (evaluateFcn = s_registers[typeA] && s_registers[typeA][typeB]) { + contact.initialize(fixtureA, indexA, fixtureB, indexB, evaluateFcn); + } else if (evaluateFcn = s_registers[typeB] && s_registers[typeB][typeA]) { + contact.initialize(fixtureB, indexB, fixtureA, indexA, evaluateFcn); + } else { + return null; + } + fixtureA = contact.m_fixtureA; + fixtureB = contact.m_fixtureB; + indexA = contact.getChildIndexA(); + indexB = contact.getChildIndexB(); + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + contact.m_nodeA.contact = contact; + contact.m_nodeA.other = bodyB; + contact.m_nodeA.prev = null; + contact.m_nodeA.next = bodyA.m_contactList; + if (bodyA.m_contactList != null) { + bodyA.m_contactList.prev = contact.m_nodeA; + } + bodyA.m_contactList = contact.m_nodeA; + contact.m_nodeB.contact = contact; + contact.m_nodeB.other = bodyA; + contact.m_nodeB.prev = null; + contact.m_nodeB.next = bodyB.m_contactList; + if (bodyB.m_contactList != null) { + bodyB.m_contactList.prev = contact.m_nodeB; + } + bodyB.m_contactList = contact.m_nodeB; + if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) { + bodyA.setAwake(true); + bodyB.setAwake(true); + } + return contact; }; - Vec3.prototype.mul = function (m) { - this.x *= m; - this.y *= m; - this.z *= m; - return this; + Contact2.destroy = function(contact, listener) { + var fixtureA = contact.m_fixtureA; + var fixtureB = contact.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + if (contact.isTouching()) { + listener.endContact(contact); + } + if (contact.m_nodeA.prev) { + contact.m_nodeA.prev.next = contact.m_nodeA.next; + } + if (contact.m_nodeA.next) { + contact.m_nodeA.next.prev = contact.m_nodeA.prev; + } + if (contact.m_nodeA == bodyA.m_contactList) { + bodyA.m_contactList = contact.m_nodeA.next; + } + if (contact.m_nodeB.prev) { + contact.m_nodeB.prev.next = contact.m_nodeB.next; + } + if (contact.m_nodeB.next) { + contact.m_nodeB.next.prev = contact.m_nodeB.prev; + } + if (contact.m_nodeB == bodyB.m_contactList) { + bodyB.m_contactList = contact.m_nodeB.next; + } + if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) { + bodyA.setAwake(true); + bodyB.setAwake(true); + } + contactPool.release(contact); + }; + return Contact2; + }() +); +var DEFAULTS$b = { + gravity: Vec2.zero(), + allowSleep: true, + warmStarting: true, + continuousPhysics: true, + subStepping: false, + blockSolve: true, + velocityIterations: 8, + positionIterations: 3 +}; +var World = ( + /** @class */ + function() { + function World2(def) { + if (!(this instanceof World2)) { + return new World2(def); + } + this.s_step = new TimeStep(); + if (!def) { + def = {}; + } else if (Vec2.isValid(def)) { + def = { gravity: def }; + } + def = options(def, DEFAULTS$b); + this.m_solver = new Solver(this); + this.m_broadPhase = new BroadPhase(); + this.m_contactList = null; + this.m_contactCount = 0; + this.m_bodyList = null; + this.m_bodyCount = 0; + this.m_jointList = null; + this.m_jointCount = 0; + this.m_stepComplete = true; + this.m_allowSleep = def.allowSleep; + this.m_gravity = Vec2.clone(def.gravity); + this.m_clearForces = true; + this.m_newFixture = false; + this.m_locked = false; + this.m_warmStarting = def.warmStarting; + this.m_continuousPhysics = def.continuousPhysics; + this.m_subStepping = def.subStepping; + this.m_blockSolve = def.blockSolve; + this.m_velocityIterations = def.velocityIterations; + this.m_positionIterations = def.positionIterations; + this.m_t = 0; + } + World2.prototype._serialize = function() { + var bodies = []; + var joints = []; + for (var b2 = this.getBodyList(); b2; b2 = b2.getNext()) { + bodies.push(b2); + } + for (var j = this.getJointList(); j; j = j.getNext()) { + if (typeof j._serialize === "function") { + joints.push(j); + } + } + return { + gravity: this.m_gravity, + bodies, + joints + }; + }; + World2._deserialize = function(data, context, restore) { + if (!data) { + return new World2(); + } + var world = new World2(data.gravity); + if (data.bodies) { + for (var i = data.bodies.length - 1; i >= 0; i -= 1) { + world._addBody(restore(Body, data.bodies[i], world)); + } + } + if (data.joints) { + for (var i = data.joints.length - 1; i >= 0; i--) { + world.createJoint(restore(Joint, data.joints[i], world)); + } + } + return world; }; - Vec3.areEqual = function (v, w) { - return v === w || - typeof v === "object" && v !== null && - typeof w === "object" && w !== null && - v.x === w.x && v.y === w.y && v.z === w.z; + World2.prototype.getBodyList = function() { + return this.m_bodyList; }; - /** Dot product on two vectors */ - Vec3.dot = function (v, w) { - return v.x * w.x + v.y * w.y + v.z * w.z; + World2.prototype.getJointList = function() { + return this.m_jointList; }; - /** Cross product on two vectors */ - Vec3.cross = function (v, w) { - return new Vec3(v.y * w.z - v.z * w.y, v.z * w.x - v.x * w.z, v.x * w.y - v.y * w.x); + World2.prototype.getContactList = function() { + return this.m_contactList; }; - Vec3.add = function (v, w) { - return new Vec3(v.x + w.x, v.y + w.y, v.z + w.z); + World2.prototype.getBodyCount = function() { + return this.m_bodyCount; }; - Vec3.sub = function (v, w) { - return new Vec3(v.x - w.x, v.y - w.y, v.z - w.z); + World2.prototype.getJointCount = function() { + return this.m_jointCount; }; - Vec3.mul = function (v, m) { - return new Vec3(m * v.x, m * v.y, m * v.z); + World2.prototype.getContactCount = function() { + return this.m_contactCount; }; - Vec3.prototype.neg = function () { - this.x = -this.x; - this.y = -this.y; - this.z = -this.z; - return this; + World2.prototype.setGravity = function(gravity) { + this.m_gravity.set(gravity); }; - Vec3.neg = function (v) { - return new Vec3(-v.x, -v.y, -v.z); + World2.prototype.getGravity = function() { + return this.m_gravity; }; - return Vec3; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var v1$2 = vec2(0, 0); -/** @internal */ var v2$1 = vec2(0, 0); -/** - * A line segment (edge) shape. These can be connected in chains or loops to - * other edge shapes. The connectivity information is used to ensure correct - * contact normals. - */ -var EdgeShape = /** @class */ (function (_super) { - __extends$a(EdgeShape, _super); - function EdgeShape(v1, v2) { - var _this = this; - // @ts-ignore - if (!(_this instanceof EdgeShape)) { - return new EdgeShape(v1, v2); - } - _this = _super.call(this) || this; - _this.m_type = EdgeShape.TYPE; - _this.m_radius = SettingsInternal.polygonRadius; - _this.m_vertex1 = v1 ? Vec2.clone(v1) : Vec2.zero(); - _this.m_vertex2 = v2 ? Vec2.clone(v2) : Vec2.zero(); - _this.m_vertex0 = Vec2.zero(); - _this.m_vertex3 = Vec2.zero(); - _this.m_hasVertex0 = false; - _this.m_hasVertex3 = false; - return _this; - } - /** @internal */ - EdgeShape.prototype._serialize = function () { - return { - type: this.m_type, - vertex1: this.m_vertex1, - vertex2: this.m_vertex2, - vertex0: this.m_vertex0, - vertex3: this.m_vertex3, - hasVertex0: this.m_hasVertex0, - hasVertex3: this.m_hasVertex3, - }; + World2.prototype.isLocked = function() { + return this.m_locked; }; - /** @internal */ - EdgeShape._deserialize = function (data) { - var shape = new EdgeShape(data.vertex1, data.vertex2); - if (shape.m_hasVertex0) { - shape.setPrevVertex(data.vertex0); - } - if (shape.m_hasVertex3) { - shape.setNextVertex(data.vertex3); + World2.prototype.setAllowSleeping = function(flag) { + if (flag == this.m_allowSleep) { + return; + } + this.m_allowSleep = flag; + if (this.m_allowSleep == false) { + for (var b2 = this.m_bodyList; b2; b2 = b2.m_next) { + b2.setAwake(true); } - return shape; + } }; - /** @hidden */ - EdgeShape.prototype._reset = function () { - // noop + World2.prototype.getAllowSleeping = function() { + return this.m_allowSleep; }; - EdgeShape.prototype.getRadius = function () { - return this.m_radius; + World2.prototype.setWarmStarting = function(flag) { + this.m_warmStarting = flag; }; - EdgeShape.prototype.getType = function () { - return this.m_type; + World2.prototype.getWarmStarting = function() { + return this.m_warmStarting; }; - /** @internal @deprecated */ - EdgeShape.prototype.setNext = function (v) { - return this.setNextVertex(v); + World2.prototype.setContinuousPhysics = function(flag) { + this.m_continuousPhysics = flag; }; - /** - * Optional next vertex, used for smooth collision. - */ - EdgeShape.prototype.setNextVertex = function (v) { - if (v) { - this.m_vertex3.setVec2(v); - this.m_hasVertex3 = true; - } - else { - this.m_vertex3.setZero(); - this.m_hasVertex3 = false; - } - return this; + World2.prototype.getContinuousPhysics = function() { + return this.m_continuousPhysics; }; - /** - * Optional next vertex, used for smooth collision. - */ - EdgeShape.prototype.getNextVertex = function () { - return this.m_vertex3; + World2.prototype.setSubStepping = function(flag) { + this.m_subStepping = flag; }; - /** @internal @deprecated */ - EdgeShape.prototype.setPrev = function (v) { - return this.setPrevVertex(v); + World2.prototype.getSubStepping = function() { + return this.m_subStepping; }; - /** - * Optional prev vertex, used for smooth collision. - */ - EdgeShape.prototype.setPrevVertex = function (v) { - if (v) { - this.m_vertex0.setVec2(v); - this.m_hasVertex0 = true; - } - else { - this.m_vertex0.setZero(); - this.m_hasVertex0 = false; - } - return this; + World2.prototype.setAutoClearForces = function(flag) { + this.m_clearForces = flag; }; - /** - * Optional prev vertex, used for smooth collision. - */ - EdgeShape.prototype.getPrevVertex = function () { - return this.m_vertex0; - }; - /** - * Set this as an isolated edge. - */ - EdgeShape.prototype._set = function (v1, v2) { - this.m_vertex1.setVec2(v1); - this.m_vertex2.setVec2(v2); - this.m_hasVertex0 = false; - this.m_hasVertex3 = false; - return this; + World2.prototype.getAutoClearForces = function() { + return this.m_clearForces; }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - EdgeShape.prototype._clone = function () { - var clone = new EdgeShape(); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_vertex1.setVec2(this.m_vertex1); - clone.m_vertex2.setVec2(this.m_vertex2); - clone.m_vertex0.setVec2(this.m_vertex0); - clone.m_vertex3.setVec2(this.m_vertex3); - clone.m_hasVertex0 = this.m_hasVertex0; - clone.m_hasVertex3 = this.m_hasVertex3; - return clone; - }; - /** - * Get the number of child primitives. - */ - EdgeShape.prototype.getChildCount = function () { - return 1; - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - EdgeShape.prototype.testPoint = function (xf, p) { - return false; + World2.prototype.clearForces = function() { + for (var body = this.m_bodyList; body; body = body.getNext()) { + body.m_force.setZero(); + body.m_torque = 0; + } }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - EdgeShape.prototype.rayCast = function (output, input, xf, childIndex) { - // p = p1 + t * d - // v = v1 + s * e - // p1 + t * d = v1 + s * e - // s * e - t * d = p1 - v1 - // NOT_USED(childIndex); - // Put the ray into the edge's frame of reference. - var p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p)); - var p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p)); - var d = Vec2.sub(p2, p1); - var v1 = this.m_vertex1; - var v2 = this.m_vertex2; - var e = Vec2.sub(v2, v1); - var normal = Vec2.neo(e.y, -e.x); - normal.normalize(); - // q = p1 + t * d - // dot(normal, q - v1) = 0 - // dot(normal, p1 - v1) + t * dot(normal, d) = 0 - var numerator = Vec2.dot(normal, Vec2.sub(v1, p1)); - var denominator = Vec2.dot(normal, d); - if (denominator == 0.0) { - return false; - } - var t = numerator / denominator; - if (t < 0.0 || input.maxFraction < t) { - return false; - } - var q = Vec2.add(p1, Vec2.mulNumVec2(t, d)); - // q = v1 + s * r - // s = dot(q - v1, r) / dot(r, r) - var r = Vec2.sub(v2, v1); - var rr = Vec2.dot(r, r); - if (rr == 0.0) { - return false; - } - var s = Vec2.dot(Vec2.sub(q, v1), r) / rr; - if (s < 0.0 || 1.0 < s) { - return false; - } - output.fraction = t; - if (numerator > 0.0) { - output.normal = Rot.mulVec2(xf.q, normal).neg(); - } - else { - output.normal = Rot.mulVec2(xf.q, normal); - } - return true; + World2.prototype.queryAABB = function(aabb, callback) { + var broadPhase = this.m_broadPhase; + this.m_broadPhase.query(aabb, function(proxyId) { + var proxy = broadPhase.getUserData(proxyId); + return callback(proxy.fixture); + }); }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - EdgeShape.prototype.computeAABB = function (aabb, xf, childIndex) { - transformVec2(v1$2, xf, this.m_vertex1); - transformVec2(v2$1, xf, this.m_vertex2); - AABB.combinePoints(aabb, v1$2, v2$1); - AABB.extend(aabb, this.m_radius); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - EdgeShape.prototype.computeMass = function (massData, density) { - massData.mass = 0.0; - combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2); - massData.I = 0.0; - }; - EdgeShape.prototype.computeDistanceProxy = function (proxy) { - proxy.m_vertices[0] = this.m_vertex1; - proxy.m_vertices[1] = this.m_vertex2; - proxy.m_vertices.length = 2; - proxy.m_count = 2; - proxy.m_radius = this.m_radius; - }; - EdgeShape.TYPE = "edge"; - return EdgeShape; -}(Shape)); -var Edge = EdgeShape; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var v1$1 = vec2(0, 0); -/** @internal */ var v2 = vec2(0, 0); -/** - * A chain shape is a free form sequence of line segments. The chain has - * two-sided collision, so you can use inside and outside collision. Therefore, - * you may use any winding order. Connectivity information is used to create - * smooth collisions. - * - * WARNING: The chain will not collide properly if there are self-intersections. - */ -var ChainShape = /** @class */ (function (_super) { - __extends$a(ChainShape, _super); - function ChainShape(vertices, loop) { - var _this = this; - // @ts-ignore - if (!(_this instanceof ChainShape)) { - return new ChainShape(vertices, loop); - } - _this = _super.call(this) || this; - _this.m_type = ChainShape.TYPE; - _this.m_radius = SettingsInternal.polygonRadius; - _this.m_vertices = []; - _this.m_count = 0; - _this.m_prevVertex = null; - _this.m_nextVertex = null; - _this.m_hasPrevVertex = false; - _this.m_hasNextVertex = false; - _this.m_isLoop = !!loop; - if (vertices && vertices.length) { - if (loop) { - _this._createLoop(vertices); - } - else { - _this._createChain(vertices); - } - } - return _this; - } - /** @internal */ - ChainShape.prototype._serialize = function () { - var data = { - type: this.m_type, - vertices: this.m_vertices, - isLoop: this.m_isLoop, - hasPrevVertex: this.m_hasPrevVertex, - hasNextVertex: this.m_hasNextVertex, - prevVertex: null, - nextVertex: null, - }; - if (this.m_prevVertex) { - data.prevVertex = this.m_prevVertex; + World2.prototype.rayCast = function(point1, point2, callback) { + var broadPhase = this.m_broadPhase; + this.m_broadPhase.rayCast({ + maxFraction: 1, + p1: point1, + p2: point2 + }, function(input2, proxyId) { + var proxy = broadPhase.getUserData(proxyId); + var fixture = proxy.fixture; + var index = proxy.childIndex; + var output2 = {}; + var hit = fixture.rayCast(output2, input2, index); + if (hit) { + var fraction = output2.fraction; + var point3 = Vec2.add(Vec2.mulNumVec2(1 - fraction, input2.p1), Vec2.mulNumVec2(fraction, input2.p2)); + return callback(fixture, point3, output2.normal, fraction); + } + return input2.maxFraction; + }); + }; + World2.prototype.getProxyCount = function() { + return this.m_broadPhase.getProxyCount(); + }; + World2.prototype.getTreeHeight = function() { + return this.m_broadPhase.getTreeHeight(); + }; + World2.prototype.getTreeBalance = function() { + return this.m_broadPhase.getTreeBalance(); + }; + World2.prototype.getTreeQuality = function() { + return this.m_broadPhase.getTreeQuality(); + }; + World2.prototype.shiftOrigin = function(newOrigin) { + if (this.m_locked) { + return; + } + for (var b2 = this.m_bodyList; b2; b2 = b2.m_next) { + b2.m_xf.p.sub(newOrigin); + b2.m_sweep.c0.sub(newOrigin); + b2.m_sweep.c.sub(newOrigin); + } + for (var j = this.m_jointList; j; j = j.m_next) { + j.shiftOrigin(newOrigin); + } + this.m_broadPhase.shiftOrigin(newOrigin); + }; + World2.prototype._addBody = function(body) { + if (this.isLocked()) { + return; + } + body.m_prev = null; + body.m_next = this.m_bodyList; + if (this.m_bodyList) { + this.m_bodyList.m_prev = body; + } + this.m_bodyList = body; + ++this.m_bodyCount; + }; + World2.prototype.createBody = function(arg1, arg2) { + if (this.isLocked()) { + return null; + } + var def = {}; + if (!arg1) ; + else if (Vec2.isValid(arg1)) { + def = { position: arg1, angle: arg2 }; + } else if (typeof arg1 === "object") { + def = arg1; + } + var body = new Body(this, def); + this._addBody(body); + return body; + }; + World2.prototype.createDynamicBody = function(arg1, arg2) { + var def = {}; + if (!arg1) ; + else if (Vec2.isValid(arg1)) { + def = { position: arg1, angle: arg2 }; + } else if (typeof arg1 === "object") { + def = arg1; + } + def.type = "dynamic"; + return this.createBody(def); + }; + World2.prototype.createKinematicBody = function(arg1, arg2) { + var def = {}; + if (!arg1) ; + else if (Vec2.isValid(arg1)) { + def = { position: arg1, angle: arg2 }; + } else if (typeof arg1 === "object") { + def = arg1; + } + def.type = "kinematic"; + return this.createBody(def); + }; + World2.prototype.destroyBody = function(b2) { + if (this.isLocked()) { + return; + } + if (b2.m_destroyed) { + return false; + } + var je = b2.m_jointList; + while (je) { + var je0 = je; + je = je.next; + this.publish("remove-joint", je0.joint); + this.destroyJoint(je0.joint); + b2.m_jointList = je; + } + b2.m_jointList = null; + var ce = b2.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.destroyContact(ce0.contact); + b2.m_contactList = ce; + } + b2.m_contactList = null; + var f = b2.m_fixtureList; + while (f) { + var f0 = f; + f = f.m_next; + this.publish("remove-fixture", f0); + f0.destroyProxies(this.m_broadPhase); + b2.m_fixtureList = f; + } + b2.m_fixtureList = null; + if (b2.m_prev) { + b2.m_prev.m_next = b2.m_next; + } + if (b2.m_next) { + b2.m_next.m_prev = b2.m_prev; + } + if (b2 == this.m_bodyList) { + this.m_bodyList = b2.m_next; + } + b2.m_destroyed = true; + --this.m_bodyCount; + this.publish("remove-body", b2); + return true; + }; + World2.prototype.createJoint = function(joint) { + if (this.isLocked()) { + return null; + } + joint.m_prev = null; + joint.m_next = this.m_jointList; + if (this.m_jointList) { + this.m_jointList.m_prev = joint; + } + this.m_jointList = joint; + ++this.m_jointCount; + joint.m_edgeA.joint = joint; + joint.m_edgeA.other = joint.m_bodyB; + joint.m_edgeA.prev = null; + joint.m_edgeA.next = joint.m_bodyA.m_jointList; + if (joint.m_bodyA.m_jointList) + joint.m_bodyA.m_jointList.prev = joint.m_edgeA; + joint.m_bodyA.m_jointList = joint.m_edgeA; + joint.m_edgeB.joint = joint; + joint.m_edgeB.other = joint.m_bodyA; + joint.m_edgeB.prev = null; + joint.m_edgeB.next = joint.m_bodyB.m_jointList; + if (joint.m_bodyB.m_jointList) + joint.m_bodyB.m_jointList.prev = joint.m_edgeB; + joint.m_bodyB.m_jointList = joint.m_edgeB; + if (joint.m_collideConnected == false) { + for (var edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) { + if (edge.other == joint.m_bodyA) { + edge.contact.flagForFiltering(); + } } - if (this.m_nextVertex) { - data.nextVertex = this.m_nextVertex; + } + return joint; + }; + World2.prototype.destroyJoint = function(joint) { + if (this.isLocked()) { + return; + } + if (joint.m_prev) { + joint.m_prev.m_next = joint.m_next; + } + if (joint.m_next) { + joint.m_next.m_prev = joint.m_prev; + } + if (joint == this.m_jointList) { + this.m_jointList = joint.m_next; + } + var bodyA = joint.m_bodyA; + var bodyB = joint.m_bodyB; + bodyA.setAwake(true); + bodyB.setAwake(true); + if (joint.m_edgeA.prev) { + joint.m_edgeA.prev.next = joint.m_edgeA.next; + } + if (joint.m_edgeA.next) { + joint.m_edgeA.next.prev = joint.m_edgeA.prev; + } + if (joint.m_edgeA == bodyA.m_jointList) { + bodyA.m_jointList = joint.m_edgeA.next; + } + joint.m_edgeA.prev = null; + joint.m_edgeA.next = null; + if (joint.m_edgeB.prev) { + joint.m_edgeB.prev.next = joint.m_edgeB.next; + } + if (joint.m_edgeB.next) { + joint.m_edgeB.next.prev = joint.m_edgeB.prev; + } + if (joint.m_edgeB == bodyB.m_jointList) { + bodyB.m_jointList = joint.m_edgeB.next; + } + joint.m_edgeB.prev = null; + joint.m_edgeB.next = null; + --this.m_jointCount; + if (joint.m_collideConnected == false) { + var edge = bodyB.getContactList(); + while (edge) { + if (edge.other == bodyA) { + edge.contact.flagForFiltering(); + } + edge = edge.next; } - return data; + } + this.publish("remove-joint", joint); }; - /** @internal */ - ChainShape._deserialize = function (data, fixture, restore) { - var vertices = []; - if (data.vertices) { - for (var i = 0; i < data.vertices.length; i++) { - vertices.push(restore(Vec2, data.vertices[i])); - } + World2.prototype.step = function(timeStep, velocityIterations, positionIterations) { + this.publish("pre-step", timeStep); + if ((velocityIterations | 0) !== velocityIterations) { + velocityIterations = 0; + } + velocityIterations = velocityIterations || this.m_velocityIterations; + positionIterations = positionIterations || this.m_positionIterations; + if (this.m_newFixture) { + this.findNewContacts(); + this.m_newFixture = false; + } + this.m_locked = true; + this.s_step.reset(timeStep); + this.s_step.velocityIterations = velocityIterations; + this.s_step.positionIterations = positionIterations; + this.s_step.warmStarting = this.m_warmStarting; + this.s_step.blockSolve = this.m_blockSolve; + this.updateContacts(); + if (this.m_stepComplete && timeStep > 0) { + this.m_solver.solveWorld(this.s_step); + for (var b2 = this.m_bodyList; b2; b2 = b2.getNext()) { + if (b2.m_islandFlag == false) { + continue; + } + if (b2.isStatic()) { + continue; + } + b2.synchronizeFixtures(); } - var shape = new ChainShape(vertices, data.isLoop); - if (data.prevVertex) { - shape.setPrevVertex(data.prevVertex); - } - if (data.nextVertex) { - shape.setNextVertex(data.nextVertex); - } - return shape; - }; - // clear() { - // this.m_vertices.length = 0; - // this.m_count = 0; - // } - ChainShape.prototype.getType = function () { - return this.m_type; - }; - ChainShape.prototype.getRadius = function () { - return this.m_radius; - }; - /** - * @internal - * Create a loop. This automatically adjusts connectivity. - * - * @param vertices an array of vertices, these are copied - * @param count the vertex count - */ - ChainShape.prototype._createLoop = function (vertices) { - if (vertices.length < 3) { + this.findNewContacts(); + } + if (this.m_continuousPhysics && timeStep > 0) { + this.m_solver.solveWorldTOI(this.s_step); + } + if (this.m_clearForces) { + this.clearForces(); + } + this.m_locked = false; + this.publish("post-step", timeStep); + }; + World2.prototype.findNewContacts = function() { + var _this = this; + this.m_broadPhase.updatePairs(function(proxyA, proxyB) { + return _this.createContact(proxyA, proxyB); + }); + }; + World2.prototype.createContact = function(proxyA, proxyB) { + var fixtureA = proxyA.fixture; + var fixtureB = proxyB.fixture; + var indexA = proxyA.childIndex; + var indexB = proxyB.childIndex; + var bodyA = fixtureA.getBody(); + var bodyB = fixtureB.getBody(); + if (bodyA == bodyB) { + return; + } + var edge = bodyB.getContactList(); + while (edge) { + if (edge.other == bodyA) { + var fA = edge.contact.getFixtureA(); + var fB = edge.contact.getFixtureB(); + var iA = edge.contact.getChildIndexA(); + var iB = edge.contact.getChildIndexB(); + if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) { + return; + } + if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) { return; + } + } + edge = edge.next; + } + if (bodyB.shouldCollide(bodyA) == false) { + return; + } + if (fixtureB.shouldCollide(fixtureA) == false) { + return; + } + var contact = Contact.create(fixtureA, indexA, fixtureB, indexB); + if (contact == null) { + return; + } + contact.m_prev = null; + if (this.m_contactList != null) { + contact.m_next = this.m_contactList; + this.m_contactList.m_prev = contact; + } + this.m_contactList = contact; + ++this.m_contactCount; + }; + World2.prototype.updateContacts = function() { + var c2; + var next_c = this.m_contactList; + while (c2 = next_c) { + next_c = c2.getNext(); + var fixtureA = c2.getFixtureA(); + var fixtureB = c2.getFixtureB(); + var indexA = c2.getChildIndexA(); + var indexB = c2.getChildIndexB(); + var bodyA = fixtureA.getBody(); + var bodyB = fixtureB.getBody(); + if (c2.m_filterFlag) { + if (bodyB.shouldCollide(bodyA) == false) { + this.destroyContact(c2); + continue; + } + if (fixtureB.shouldCollide(fixtureA) == false) { + this.destroyContact(c2); + continue; + } + c2.m_filterFlag = false; } - for (var i = 1; i < vertices.length; ++i) { - vertices[i - 1]; - vertices[i]; + var activeA = bodyA.isAwake() && !bodyA.isStatic(); + var activeB = bodyB.isAwake() && !bodyB.isStatic(); + if (activeA == false && activeB == false) { + continue; } - this.m_vertices = []; - this.m_count = vertices.length + 1; - for (var i = 0; i < vertices.length; ++i) { - this.m_vertices[i] = Vec2.clone(vertices[i]); + var proxyIdA = fixtureA.m_proxies[indexA].proxyId; + var proxyIdB = fixtureB.m_proxies[indexB].proxyId; + var overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB); + if (overlap == false) { + this.destroyContact(c2); + continue; } - this.m_vertices[vertices.length] = Vec2.clone(vertices[0]); - this.m_prevVertex = this.m_vertices[this.m_count - 2]; - this.m_nextVertex = this.m_vertices[1]; - this.m_hasPrevVertex = true; - this.m_hasNextVertex = true; + c2.update(this); + } + }; + World2.prototype.destroyContact = function(contact) { + if (contact.m_prev) { + contact.m_prev.m_next = contact.m_next; + } + if (contact.m_next) { + contact.m_next.m_prev = contact.m_prev; + } + if (contact == this.m_contactList) { + this.m_contactList = contact.m_next; + } + Contact.destroy(contact, this); + --this.m_contactCount; + }; + World2.prototype.on = function(name, listener) { + if (typeof name !== "string" || typeof listener !== "function") { return this; + } + if (!this._listeners) { + this._listeners = {}; + } + if (!this._listeners[name]) { + this._listeners[name] = []; + } + this._listeners[name].push(listener); + return this; }; - /** - * @internal - * Create a chain with isolated end vertices. - * - * @param vertices an array of vertices, these are copied - */ - ChainShape.prototype._createChain = function (vertices) { - for (var i = 1; i < vertices.length; ++i) { - // If the code crashes here, it means your vertices are too close together. - vertices[i - 1]; - vertices[i]; - } - this.m_count = vertices.length; - for (var i = 0; i < vertices.length; ++i) { - this.m_vertices[i] = Vec2.clone(vertices[i]); - } - this.m_hasPrevVertex = false; - this.m_hasNextVertex = false; - this.m_prevVertex = null; - this.m_nextVertex = null; + World2.prototype.off = function(name, listener) { + if (typeof name !== "string" || typeof listener !== "function") { + return this; + } + var listeners = this._listeners && this._listeners[name]; + if (!listeners || !listeners.length) { return this; + } + var index = listeners.indexOf(listener); + if (index >= 0) { + listeners.splice(index, 1); + } + return this; }; - /** @hidden */ - ChainShape.prototype._reset = function () { - if (this.m_isLoop) { - this._createLoop(this.m_vertices); - } - else { - this._createChain(this.m_vertices); - } - }; - /** - * Establish connectivity to a vertex that precedes the first vertex. Don't call - * this for loops. - */ - ChainShape.prototype.setPrevVertex = function (prevVertex) { - // todo: copy or reference - this.m_prevVertex = prevVertex; - this.m_hasPrevVertex = true; - }; - ChainShape.prototype.getPrevVertex = function () { - return this.m_prevVertex; - }; - /** - * Establish connectivity to a vertex that follows the last vertex. Don't call - * this for loops. - */ - ChainShape.prototype.setNextVertex = function (nextVertex) { - // todo: copy or reference - this.m_nextVertex = nextVertex; - this.m_hasNextVertex = true; - }; - ChainShape.prototype.getNextVertex = function () { - return this.m_nextVertex; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - ChainShape.prototype._clone = function () { - var clone = new ChainShape(); - clone._createChain(this.m_vertices); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_prevVertex = this.m_prevVertex; - clone.m_nextVertex = this.m_nextVertex; - clone.m_hasPrevVertex = this.m_hasPrevVertex; - clone.m_hasNextVertex = this.m_hasNextVertex; - return clone; - }; - /** - * Get the number of child primitives. - */ - ChainShape.prototype.getChildCount = function () { - // edge count = vertex count - 1 - return this.m_count - 1; - }; - // Get a child edge. - ChainShape.prototype.getChildEdge = function (edge, childIndex) { - edge.m_type = EdgeShape.TYPE; - edge.m_radius = this.m_radius; - edge.m_vertex1 = this.m_vertices[childIndex]; - edge.m_vertex2 = this.m_vertices[childIndex + 1]; - if (childIndex > 0) { - edge.m_vertex0 = this.m_vertices[childIndex - 1]; - edge.m_hasVertex0 = true; - } - else { - edge.m_vertex0 = this.m_prevVertex; - edge.m_hasVertex0 = this.m_hasPrevVertex; - } - if (childIndex < this.m_count - 2) { - edge.m_vertex3 = this.m_vertices[childIndex + 2]; - edge.m_hasVertex3 = true; - } - else { - edge.m_vertex3 = this.m_nextVertex; - edge.m_hasVertex3 = this.m_hasNextVertex; - } - }; - ChainShape.prototype.getVertex = function (index) { - if (index < this.m_count) { - return this.m_vertices[index]; - } - else { - return this.m_vertices[0]; - } - }; - ChainShape.prototype.isLoop = function () { - return this.m_isLoop; - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * This always return false. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - ChainShape.prototype.testPoint = function (xf, p) { - return false; + World2.prototype.publish = function(name, arg1, arg2, arg3) { + var listeners = this._listeners && this._listeners[name]; + if (!listeners || !listeners.length) { + return 0; + } + for (var l = 0; l < listeners.length; l++) { + listeners[l].call(this, arg1, arg2, arg3); + } + return listeners.length; }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - ChainShape.prototype.rayCast = function (output, input, xf, childIndex) { - var edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1)); - return edgeShape.rayCast(output, input, xf, 0); - }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - ChainShape.prototype.computeAABB = function (aabb, xf, childIndex) { - transformVec2(v1$1, xf, this.getVertex(childIndex)); - transformVec2(v2, xf, this.getVertex(childIndex + 1)); - AABB.combinePoints(aabb, v1$1, v2); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * Chains have zero mass. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - ChainShape.prototype.computeMass = function (massData, density) { - massData.mass = 0.0; - zeroVec2(massData.center); - massData.I = 0.0; - }; - ChainShape.prototype.computeDistanceProxy = function (proxy, childIndex) { - proxy.m_vertices[0] = this.getVertex(childIndex); - proxy.m_vertices[1] = this.getVertex(childIndex + 1); - proxy.m_count = 2; - proxy.m_radius = this.m_radius; - }; - ChainShape.TYPE = "chain"; - return ChainShape; -}(Shape)); -var Chain = ChainShape; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_max$2 = Math.max; -/** @internal */ var math_min$4 = Math.min; -/** @internal */ var temp$1 = vec2(0, 0); -/** @internal */ var e$1 = vec2(0, 0); -/** @internal */ var e1$1 = vec2(0, 0); -/** @internal */ var e2$1 = vec2(0, 0); -/** @internal */ var center = vec2(0, 0); -/** @internal */ var s = vec2(0, 0); -/** - * A convex polygon. It is assumed that the interior of the polygon is to the - * left of each edge. Polygons have a maximum number of vertices equal to - * Settings.maxPolygonVertices. In most cases you should not need many vertices - * for a convex polygon. extends Shape - */ -var PolygonShape = /** @class */ (function (_super) { - __extends$a(PolygonShape, _super); - function PolygonShape(vertices) { - var _this = this; - // @ts-ignore - if (!(_this instanceof PolygonShape)) { - return new PolygonShape(vertices); - } - _this = _super.call(this) || this; - _this.m_type = PolygonShape.TYPE; - _this.m_radius = SettingsInternal.polygonRadius; - _this.m_centroid = Vec2.zero(); - _this.m_vertices = []; - _this.m_normals = []; - _this.m_count = 0; - if (vertices && vertices.length) { - _this._set(vertices); - } - return _this; + World2.prototype.beginContact = function(contact) { + this.publish("begin-contact", contact); + }; + World2.prototype.endContact = function(contact) { + this.publish("end-contact", contact); + }; + World2.prototype.preSolve = function(contact, oldManifold2) { + this.publish("pre-solve", contact, oldManifold2); + }; + World2.prototype.postSolve = function(contact, impulse) { + this.publish("post-solve", contact, impulse); + }; + return World2; + }() +); +var Vec3 = ( + /** @class */ + function() { + function Vec32(x2, y, z) { + if (!(this instanceof Vec32)) { + return new Vec32(x2, y, z); + } + if (typeof x2 === "undefined") { + this.x = 0; + this.y = 0; + this.z = 0; + } else if (typeof x2 === "object") { + this.x = x2.x; + this.y = x2.y; + this.z = x2.z; + } else { + this.x = x2; + this.y = y; + this.z = z; + } } - /** @internal */ - PolygonShape.prototype._serialize = function () { - return { - type: this.m_type, - vertices: this.m_vertices, - }; + Vec32.prototype._serialize = function() { + return { + x: this.x, + y: this.y, + z: this.z + }; }; - /** @internal */ - PolygonShape._deserialize = function (data, fixture, restore) { - var vertices = []; - if (data.vertices) { - for (var i = 0; i < data.vertices.length; i++) { - vertices.push(restore(Vec2, data.vertices[i])); - } - } - var shape = new PolygonShape(vertices); - return shape; - }; - PolygonShape.prototype.getType = function () { - return this.m_type; - }; - PolygonShape.prototype.getRadius = function () { - return this.m_radius; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - PolygonShape.prototype._clone = function () { - var clone = new PolygonShape(); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_count = this.m_count; - clone.m_centroid.setVec2(this.m_centroid); - for (var i = 0; i < this.m_count; i++) { - clone.m_vertices.push(this.m_vertices[i].clone()); - } - for (var i = 0; i < this.m_normals.length; i++) { - clone.m_normals.push(this.m_normals[i].clone()); - } - return clone; - }; - /** - * Get the number of child primitives. - */ - PolygonShape.prototype.getChildCount = function () { - return 1; - }; - /** @hidden */ - PolygonShape.prototype._reset = function () { - this._set(this.m_vertices); - }; - /** - * @internal - * - * Create a convex hull from the given array of local points. The count must be - * in the range [3, Settings.maxPolygonVertices]. - * - * Warning: the points may be re-ordered, even if they form a convex polygon - * Warning: collinear points are handled but not removed. Collinear points may - * lead to poor stacking behavior. - */ - PolygonShape.prototype._set = function (vertices) { - if (vertices.length < 3) { - this._setAsBox(1.0, 1.0); - return; + Vec32._deserialize = function(data) { + var obj = Object.create(Vec32.prototype); + obj.x = data.x; + obj.y = data.y; + obj.z = data.z; + return obj; + }; + Vec32.neo = function(x2, y, z) { + var obj = Object.create(Vec32.prototype); + obj.x = x2; + obj.y = y; + obj.z = z; + return obj; + }; + Vec32.zero = function() { + var obj = Object.create(Vec32.prototype); + obj.x = 0; + obj.y = 0; + obj.z = 0; + return obj; + }; + Vec32.clone = function(v3) { + return Vec32.neo(v3.x, v3.y, v3.z); + }; + Vec32.prototype.toString = function() { + return JSON.stringify(this); + }; + Vec32.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Number.isFinite(obj.x) && Number.isFinite(obj.y) && Number.isFinite(obj.z); + }; + Vec32.assert = function(o) { + }; + Vec32.prototype.setZero = function() { + this.x = 0; + this.y = 0; + this.z = 0; + return this; + }; + Vec32.prototype.set = function(x2, y, z) { + this.x = x2; + this.y = y; + this.z = z; + return this; + }; + Vec32.prototype.add = function(w) { + this.x += w.x; + this.y += w.y; + this.z += w.z; + return this; + }; + Vec32.prototype.sub = function(w) { + this.x -= w.x; + this.y -= w.y; + this.z -= w.z; + return this; + }; + Vec32.prototype.mul = function(m) { + this.x *= m; + this.y *= m; + this.z *= m; + return this; + }; + Vec32.areEqual = function(v3, w) { + 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; + }; + Vec32.dot = function(v3, w) { + return v3.x * w.x + v3.y * w.y + v3.z * w.z; + }; + Vec32.cross = function(v3, w) { + 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); + }; + Vec32.add = function(v3, w) { + return new Vec32(v3.x + w.x, v3.y + w.y, v3.z + w.z); + }; + Vec32.sub = function(v3, w) { + return new Vec32(v3.x - w.x, v3.y - w.y, v3.z - w.z); + }; + Vec32.mul = function(v3, m) { + return new Vec32(m * v3.x, m * v3.y, m * v3.z); + }; + Vec32.prototype.neg = function() { + this.x = -this.x; + this.y = -this.y; + this.z = -this.z; + return this; + }; + Vec32.neg = function(v3) { + return new Vec32(-v3.x, -v3.y, -v3.z); + }; + return Vec32; + }() +); +var v1$2 = vec2(0, 0); +var v2$1 = vec2(0, 0); +var EdgeShape = ( + /** @class */ + function(_super) { + __extends$a(EdgeShape2, _super); + function EdgeShape2(v122, v22) { + var _this = this; + if (!(_this instanceof EdgeShape2)) { + return new EdgeShape2(v122, v22); + } + _this = _super.call(this) || this; + _this.m_type = EdgeShape2.TYPE; + _this.m_radius = SettingsInternal.polygonRadius; + _this.m_vertex1 = v122 ? Vec2.clone(v122) : Vec2.zero(); + _this.m_vertex2 = v22 ? Vec2.clone(v22) : Vec2.zero(); + _this.m_vertex0 = Vec2.zero(); + _this.m_vertex3 = Vec2.zero(); + _this.m_hasVertex0 = false; + _this.m_hasVertex3 = false; + return _this; + } + EdgeShape2.prototype._serialize = function() { + return { + type: this.m_type, + vertex1: this.m_vertex1, + vertex2: this.m_vertex2, + vertex0: this.m_vertex0, + vertex3: this.m_vertex3, + hasVertex0: this.m_hasVertex0, + hasVertex3: this.m_hasVertex3 + }; + }; + EdgeShape2._deserialize = function(data) { + var shape = new EdgeShape2(data.vertex1, data.vertex2); + if (shape.m_hasVertex0) { + shape.setPrevVertex(data.vertex0); + } + if (shape.m_hasVertex3) { + shape.setNextVertex(data.vertex3); + } + return shape; + }; + EdgeShape2.prototype._reset = function() { + }; + EdgeShape2.prototype.getRadius = function() { + return this.m_radius; + }; + EdgeShape2.prototype.getType = function() { + return this.m_type; + }; + EdgeShape2.prototype.setNext = function(v3) { + return this.setNextVertex(v3); + }; + EdgeShape2.prototype.setNextVertex = function(v3) { + if (v3) { + this.m_vertex3.setVec2(v3); + this.m_hasVertex3 = true; + } else { + this.m_vertex3.setZero(); + this.m_hasVertex3 = false; + } + return this; + }; + EdgeShape2.prototype.getNextVertex = function() { + return this.m_vertex3; + }; + EdgeShape2.prototype.setPrev = function(v3) { + return this.setPrevVertex(v3); + }; + EdgeShape2.prototype.setPrevVertex = function(v3) { + if (v3) { + this.m_vertex0.setVec2(v3); + this.m_hasVertex0 = true; + } else { + this.m_vertex0.setZero(); + this.m_hasVertex0 = false; + } + return this; + }; + EdgeShape2.prototype.getPrevVertex = function() { + return this.m_vertex0; + }; + EdgeShape2.prototype._set = function(v122, v22) { + this.m_vertex1.setVec2(v122); + this.m_vertex2.setVec2(v22); + this.m_hasVertex0 = false; + this.m_hasVertex3 = false; + return this; + }; + EdgeShape2.prototype._clone = function() { + var clone = new EdgeShape2(); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_vertex1.setVec2(this.m_vertex1); + clone.m_vertex2.setVec2(this.m_vertex2); + clone.m_vertex0.setVec2(this.m_vertex0); + clone.m_vertex3.setVec2(this.m_vertex3); + clone.m_hasVertex0 = this.m_hasVertex0; + clone.m_hasVertex3 = this.m_hasVertex3; + return clone; + }; + EdgeShape2.prototype.getChildCount = function() { + return 1; + }; + EdgeShape2.prototype.testPoint = function(xf2, p) { + return false; + }; + EdgeShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var p1 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p1, xf2.p)); + var p2 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p2, xf2.p)); + var d2 = Vec2.sub(p2, p1); + var v122 = this.m_vertex1; + var v22 = this.m_vertex2; + var e3 = Vec2.sub(v22, v122); + var normal3 = Vec2.neo(e3.y, -e3.x); + normal3.normalize(); + var numerator = Vec2.dot(normal3, Vec2.sub(v122, p1)); + var denominator = Vec2.dot(normal3, d2); + if (denominator == 0) { + return false; + } + var t = numerator / denominator; + if (t < 0 || input2.maxFraction < t) { + return false; + } + var q = Vec2.add(p1, Vec2.mulNumVec2(t, d2)); + var r = Vec2.sub(v22, v122); + var rr = Vec2.dot(r, r); + if (rr == 0) { + return false; + } + var s2 = Vec2.dot(Vec2.sub(q, v122), r) / rr; + if (s2 < 0 || 1 < s2) { + return false; + } + output2.fraction = t; + if (numerator > 0) { + output2.normal = Rot.mulVec2(xf2.q, normal3).neg(); + } else { + output2.normal = Rot.mulVec2(xf2.q, normal3); + } + return true; + }; + EdgeShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + transformVec2(v1$2, xf2, this.m_vertex1); + transformVec2(v2$1, xf2, this.m_vertex2); + AABB.combinePoints(aabb, v1$2, v2$1); + AABB.extend(aabb, this.m_radius); + }; + EdgeShape2.prototype.computeMass = function(massData, density) { + massData.mass = 0; + combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2); + massData.I = 0; + }; + EdgeShape2.prototype.computeDistanceProxy = function(proxy) { + proxy.m_vertices[0] = this.m_vertex1; + proxy.m_vertices[1] = this.m_vertex2; + proxy.m_vertices.length = 2; + proxy.m_count = 2; + proxy.m_radius = this.m_radius; + }; + EdgeShape2.TYPE = "edge"; + return EdgeShape2; + }(Shape) +); +var Edge = EdgeShape; +var v1$1 = vec2(0, 0); +var v2 = vec2(0, 0); +var ChainShape = ( + /** @class */ + function(_super) { + __extends$a(ChainShape2, _super); + function ChainShape2(vertices, loop) { + var _this = this; + if (!(_this instanceof ChainShape2)) { + return new ChainShape2(vertices, loop); + } + _this = _super.call(this) || this; + _this.m_type = ChainShape2.TYPE; + _this.m_radius = SettingsInternal.polygonRadius; + _this.m_vertices = []; + _this.m_count = 0; + _this.m_prevVertex = null; + _this.m_nextVertex = null; + _this.m_hasPrevVertex = false; + _this.m_hasNextVertex = false; + _this.m_isLoop = !!loop; + if (vertices && vertices.length) { + if (loop) { + _this._createLoop(vertices); + } else { + _this._createChain(vertices); } - var n = math_min$4(vertices.length, SettingsInternal.maxPolygonVertices); - // Perform welding and copy vertices into local buffer. - var ps = []; // [Settings.maxPolygonVertices]; - for (var i = 0; i < n; ++i) { - var v = vertices[i]; - var unique = true; - for (var j = 0; j < ps.length; ++j) { - if (Vec2.distanceSquared(v, ps[j]) < 0.25 * SettingsInternal.linearSlopSquared) { - unique = false; - break; - } - } - if (unique) { - ps.push(Vec2.clone(v)); - } + } + return _this; + } + ChainShape2.prototype._serialize = function() { + var data = { + type: this.m_type, + vertices: this.m_vertices, + isLoop: this.m_isLoop, + hasPrevVertex: this.m_hasPrevVertex, + hasNextVertex: this.m_hasNextVertex, + prevVertex: null, + nextVertex: null + }; + if (this.m_prevVertex) { + data.prevVertex = this.m_prevVertex; + } + if (this.m_nextVertex) { + data.nextVertex = this.m_nextVertex; + } + return data; + }; + ChainShape2._deserialize = function(data, fixture, restore) { + var vertices = []; + if (data.vertices) { + for (var i = 0; i < data.vertices.length; i++) { + vertices.push(restore(Vec2, data.vertices[i])); } - n = ps.length; - if (n < 3) { - this._setAsBox(1.0, 1.0); - return; + } + var shape = new ChainShape2(vertices, data.isLoop); + if (data.prevVertex) { + shape.setPrevVertex(data.prevVertex); + } + if (data.nextVertex) { + shape.setNextVertex(data.nextVertex); + } + return shape; + }; + ChainShape2.prototype.getType = function() { + return this.m_type; + }; + ChainShape2.prototype.getRadius = function() { + return this.m_radius; + }; + ChainShape2.prototype._createLoop = function(vertices) { + if (vertices.length < 3) { + return; + } + for (var i = 1; i < vertices.length; ++i) { + vertices[i - 1]; + vertices[i]; + } + this.m_vertices = []; + this.m_count = vertices.length + 1; + for (var i = 0; i < vertices.length; ++i) { + this.m_vertices[i] = Vec2.clone(vertices[i]); + } + this.m_vertices[vertices.length] = Vec2.clone(vertices[0]); + this.m_prevVertex = this.m_vertices[this.m_count - 2]; + this.m_nextVertex = this.m_vertices[1]; + this.m_hasPrevVertex = true; + this.m_hasNextVertex = true; + return this; + }; + ChainShape2.prototype._createChain = function(vertices) { + for (var i = 1; i < vertices.length; ++i) { + vertices[i - 1]; + vertices[i]; + } + this.m_count = vertices.length; + for (var i = 0; i < vertices.length; ++i) { + this.m_vertices[i] = Vec2.clone(vertices[i]); + } + this.m_hasPrevVertex = false; + this.m_hasNextVertex = false; + this.m_prevVertex = null; + this.m_nextVertex = null; + return this; + }; + ChainShape2.prototype._reset = function() { + if (this.m_isLoop) { + this._createLoop(this.m_vertices); + } else { + this._createChain(this.m_vertices); + } + }; + ChainShape2.prototype.setPrevVertex = function(prevVertex) { + this.m_prevVertex = prevVertex; + this.m_hasPrevVertex = true; + }; + ChainShape2.prototype.getPrevVertex = function() { + return this.m_prevVertex; + }; + ChainShape2.prototype.setNextVertex = function(nextVertex) { + this.m_nextVertex = nextVertex; + this.m_hasNextVertex = true; + }; + ChainShape2.prototype.getNextVertex = function() { + return this.m_nextVertex; + }; + ChainShape2.prototype._clone = function() { + var clone = new ChainShape2(); + clone._createChain(this.m_vertices); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_prevVertex = this.m_prevVertex; + clone.m_nextVertex = this.m_nextVertex; + clone.m_hasPrevVertex = this.m_hasPrevVertex; + clone.m_hasNextVertex = this.m_hasNextVertex; + return clone; + }; + ChainShape2.prototype.getChildCount = function() { + return this.m_count - 1; + }; + ChainShape2.prototype.getChildEdge = function(edge, childIndex) { + edge.m_type = EdgeShape.TYPE; + edge.m_radius = this.m_radius; + edge.m_vertex1 = this.m_vertices[childIndex]; + edge.m_vertex2 = this.m_vertices[childIndex + 1]; + if (childIndex > 0) { + edge.m_vertex0 = this.m_vertices[childIndex - 1]; + edge.m_hasVertex0 = true; + } else { + edge.m_vertex0 = this.m_prevVertex; + edge.m_hasVertex0 = this.m_hasPrevVertex; + } + if (childIndex < this.m_count - 2) { + edge.m_vertex3 = this.m_vertices[childIndex + 2]; + edge.m_hasVertex3 = true; + } else { + edge.m_vertex3 = this.m_nextVertex; + edge.m_hasVertex3 = this.m_hasNextVertex; + } + }; + ChainShape2.prototype.getVertex = function(index) { + if (index < this.m_count) { + return this.m_vertices[index]; + } else { + return this.m_vertices[0]; + } + }; + ChainShape2.prototype.isLoop = function() { + return this.m_isLoop; + }; + ChainShape2.prototype.testPoint = function(xf2, p) { + return false; + }; + ChainShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1)); + return edgeShape.rayCast(output2, input2, xf2, 0); + }; + ChainShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + transformVec2(v1$1, xf2, this.getVertex(childIndex)); + transformVec2(v2, xf2, this.getVertex(childIndex + 1)); + AABB.combinePoints(aabb, v1$1, v2); + }; + ChainShape2.prototype.computeMass = function(massData, density) { + massData.mass = 0; + zeroVec2(massData.center); + massData.I = 0; + }; + ChainShape2.prototype.computeDistanceProxy = function(proxy, childIndex) { + proxy.m_vertices[0] = this.getVertex(childIndex); + proxy.m_vertices[1] = this.getVertex(childIndex + 1); + proxy.m_count = 2; + proxy.m_radius = this.m_radius; + }; + ChainShape2.TYPE = "chain"; + return ChainShape2; + }(Shape) +); +var Chain = ChainShape; +var math_max$2 = Math.max; +var math_min$4 = Math.min; +var temp$1 = vec2(0, 0); +var e$1 = vec2(0, 0); +var e1$1 = vec2(0, 0); +var e2$1 = vec2(0, 0); +var center = vec2(0, 0); +var s = vec2(0, 0); +var PolygonShape = ( + /** @class */ + function(_super) { + __extends$a(PolygonShape2, _super); + function PolygonShape2(vertices) { + var _this = this; + if (!(_this instanceof PolygonShape2)) { + return new PolygonShape2(vertices); + } + _this = _super.call(this) || this; + _this.m_type = PolygonShape2.TYPE; + _this.m_radius = SettingsInternal.polygonRadius; + _this.m_centroid = Vec2.zero(); + _this.m_vertices = []; + _this.m_normals = []; + _this.m_count = 0; + if (vertices && vertices.length) { + _this._set(vertices); + } + return _this; + } + PolygonShape2.prototype._serialize = function() { + return { + type: this.m_type, + vertices: this.m_vertices + }; + }; + PolygonShape2._deserialize = function(data, fixture, restore) { + var vertices = []; + if (data.vertices) { + for (var i = 0; i < data.vertices.length; i++) { + vertices.push(restore(Vec2, data.vertices[i])); } - // Create the convex hull using the Gift wrapping algorithm - // http://en.wikipedia.org/wiki/Gift_wrapping_algorithm - // Find the right most point on the hull (in case of multiple points bottom most is used) - var i0 = 0; - var x0 = ps[0].x; - for (var i = 1; i < n; ++i) { - var x = ps[i].x; - if (x > x0 || (x === x0 && ps[i].y < ps[i0].y)) { - i0 = i; - x0 = x; - } + } + var shape = new PolygonShape2(vertices); + return shape; + }; + PolygonShape2.prototype.getType = function() { + return this.m_type; + }; + PolygonShape2.prototype.getRadius = function() { + return this.m_radius; + }; + PolygonShape2.prototype._clone = function() { + var clone = new PolygonShape2(); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_count = this.m_count; + clone.m_centroid.setVec2(this.m_centroid); + for (var i = 0; i < this.m_count; i++) { + clone.m_vertices.push(this.m_vertices[i].clone()); + } + for (var i = 0; i < this.m_normals.length; i++) { + clone.m_normals.push(this.m_normals[i].clone()); + } + return clone; + }; + PolygonShape2.prototype.getChildCount = function() { + return 1; + }; + PolygonShape2.prototype._reset = function() { + this._set(this.m_vertices); + }; + PolygonShape2.prototype._set = function(vertices) { + if (vertices.length < 3) { + this._setAsBox(1, 1); + return; + } + var n2 = math_min$4(vertices.length, SettingsInternal.maxPolygonVertices); + var ps = []; + for (var i = 0; i < n2; ++i) { + var v3 = vertices[i]; + var unique = true; + for (var j = 0; j < ps.length; ++j) { + if (Vec2.distanceSquared(v3, ps[j]) < 0.25 * SettingsInternal.linearSlopSquared) { + unique = false; + break; + } } - var hull = []; // [Settings.maxPolygonVertices]; - var m = 0; - var ih = i0; - while (true) { - hull[m] = ih; - var ie = 0; - for (var j = 1; j < n; ++j) { - if (ie === ih) { - ie = j; - continue; - } - var r = Vec2.sub(ps[ie], ps[hull[m]]); - var v = Vec2.sub(ps[j], ps[hull[m]]); - var c = Vec2.crossVec2Vec2(r, v); - // c < 0 means counter-clockwise wrapping, c > 0 means clockwise wrapping - if (c < 0.0) { - ie = j; - } - // Collinearity check - if (c === 0.0 && v.lengthSquared() > r.lengthSquared()) { - ie = j; - } - } - ++m; - ih = ie; - if (ie === i0) { - break; - } + if (unique) { + ps.push(Vec2.clone(v3)); } - if (m < 3) { - this._setAsBox(1.0, 1.0); - return; + } + n2 = ps.length; + if (n2 < 3) { + this._setAsBox(1, 1); + return; + } + var i0 = 0; + var x0 = ps[0].x; + for (var i = 1; i < n2; ++i) { + var x2 = ps[i].x; + if (x2 > x0 || x2 === x0 && ps[i].y < ps[i0].y) { + i0 = i; + x0 = x2; + } + } + var hull = []; + var m = 0; + var ih = i0; + while (true) { + hull[m] = ih; + var ie2 = 0; + for (var j = 1; j < n2; ++j) { + if (ie2 === ih) { + ie2 = j; + continue; + } + var r = Vec2.sub(ps[ie2], ps[hull[m]]); + var v3 = Vec2.sub(ps[j], ps[hull[m]]); + var c2 = Vec2.crossVec2Vec2(r, v3); + if (c2 < 0) { + ie2 = j; + } + if (c2 === 0 && v3.lengthSquared() > r.lengthSquared()) { + ie2 = j; + } } - this.m_count = m; - // Copy vertices. - this.m_vertices = []; - for (var i = 0; i < m; ++i) { - this.m_vertices[i] = ps[hull[i]]; - } - // Compute normals. Ensure the edges have non-zero length. - for (var i = 0; i < m; ++i) { - var i1 = i; - var i2 = i + 1 < m ? i + 1 : 0; - var edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]); - this.m_normals[i] = Vec2.crossVec2Num(edge, 1.0); - this.m_normals[i].normalize(); - } - // Compute the polygon centroid. - this.m_centroid = computeCentroid(this.m_vertices, m); - }; - /** @internal */ PolygonShape.prototype._setAsBox = function (hx, hy, center, angle) { - // start with right-bottom, counter-clockwise, as in Gift wrapping algorithm in PolygonShape._set() - this.m_vertices[0] = Vec2.neo(hx, -hy); - this.m_vertices[1] = Vec2.neo(hx, hy); - this.m_vertices[2] = Vec2.neo(-hx, hy); - this.m_vertices[3] = Vec2.neo(-hx, -hy); - this.m_normals[0] = Vec2.neo(1.0, 0.0); - this.m_normals[1] = Vec2.neo(0.0, 1.0); - this.m_normals[2] = Vec2.neo(-1.0, 0.0); - this.m_normals[3] = Vec2.neo(0.0, -1.0); - this.m_count = 4; - if (center && Vec2.isValid(center)) { - angle = angle || 0; - copyVec2(this.m_centroid, center); - var xf = Transform.identity(); - xf.p.setVec2(center); - xf.q.setAngle(angle); - // Transform vertices and normals. - for (var i = 0; i < this.m_count; ++i) { - this.m_vertices[i] = Transform.mulVec2(xf, this.m_vertices[i]); - this.m_normals[i] = Rot.mulVec2(xf.q, this.m_normals[i]); - } + ++m; + ih = ie2; + if (ie2 === i0) { + break; } - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - PolygonShape.prototype.testPoint = function (xf, p) { - var pLocal = detransformVec2(temp$1, xf, p); + } + if (m < 3) { + this._setAsBox(1, 1); + return; + } + this.m_count = m; + this.m_vertices = []; + for (var i = 0; i < m; ++i) { + this.m_vertices[i] = ps[hull[i]]; + } + for (var i = 0; i < m; ++i) { + var i1 = i; + var i2 = i + 1 < m ? i + 1 : 0; + var edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]); + this.m_normals[i] = Vec2.crossVec2Num(edge, 1); + this.m_normals[i].normalize(); + } + this.m_centroid = computeCentroid(this.m_vertices, m); + }; + PolygonShape2.prototype._setAsBox = function(hx, hy, center2, angle) { + this.m_vertices[0] = Vec2.neo(hx, -hy); + this.m_vertices[1] = Vec2.neo(hx, hy); + this.m_vertices[2] = Vec2.neo(-hx, hy); + this.m_vertices[3] = Vec2.neo(-hx, -hy); + this.m_normals[0] = Vec2.neo(1, 0); + this.m_normals[1] = Vec2.neo(0, 1); + this.m_normals[2] = Vec2.neo(-1, 0); + this.m_normals[3] = Vec2.neo(0, -1); + this.m_count = 4; + if (center2 && Vec2.isValid(center2)) { + angle = angle || 0; + copyVec2(this.m_centroid, center2); + var xf2 = Transform.identity(); + xf2.p.setVec2(center2); + xf2.q.setAngle(angle); for (var i = 0; i < this.m_count; ++i) { - var dot = dotVec2(this.m_normals[i], pLocal) - dotVec2(this.m_normals[i], this.m_vertices[i]); - if (dot > 0.0) { - return false; - } + this.m_vertices[i] = Transform.mulVec2(xf2, this.m_vertices[i]); + this.m_normals[i] = Rot.mulVec2(xf2.q, this.m_normals[i]); } - return true; + } }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - PolygonShape.prototype.rayCast = function (output, input, xf, childIndex) { - // Put the ray into the polygon's frame of reference. - var p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p)); - var p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p)); - var d = Vec2.sub(p2, p1); - var lower = 0.0; - var upper = input.maxFraction; - var index = -1; - for (var i = 0; i < this.m_count; ++i) { - // p = p1 + a * d - // dot(normal, p - v) = 0 - // dot(normal, p1 - v) + a * dot(normal, d) = 0 - var numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1)); - var denominator = Vec2.dot(this.m_normals[i], d); - if (denominator == 0.0) { - if (numerator < 0.0) { - return false; - } - } - else { - // Note: we want this predicate without division: - // lower < numerator / denominator, where denominator < 0 - // Since denominator < 0, we have to flip the inequality: - // lower < numerator / denominator <==> denominator * lower > numerator. - if (denominator < 0.0 && numerator < lower * denominator) { - // Increase lower. - // The segment enters this half-space. - lower = numerator / denominator; - index = i; - } - else if (denominator > 0.0 && numerator < upper * denominator) { - // Decrease upper. - // The segment exits this half-space. - upper = numerator / denominator; - } - } - // The use of epsilon here causes the assert on lower to trip - // in some cases. Apparently the use of epsilon was to make edge - // shapes work, but now those are handled separately. - // if (upper < lower - matrix.EPSILON) - if (upper < lower) { - return false; - } - } - if (index >= 0) { - output.fraction = lower; - output.normal = Rot.mulVec2(xf.q, this.m_normals[index]); - return true; + PolygonShape2.prototype.testPoint = function(xf2, p) { + var pLocal = detransformVec2(temp$1, xf2, p); + for (var i = 0; i < this.m_count; ++i) { + var dot = dotVec2(this.m_normals[i], pLocal) - dotVec2(this.m_normals[i], this.m_vertices[i]); + if (dot > 0) { + return false; } - return false; - }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - PolygonShape.prototype.computeAABB = function (aabb, xf, childIndex) { - var minX = Infinity; - var minY = Infinity; - var maxX = -Infinity; - var maxY = -Infinity; - for (var i = 0; i < this.m_count; ++i) { - var v = transformVec2(temp$1, xf, this.m_vertices[i]); - minX = math_min$4(minX, v.x); - maxX = math_max$2(maxX, v.x); - minY = math_min$4(minY, v.y); - maxY = math_max$2(maxY, v.y); - } - setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius); - setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - PolygonShape.prototype.computeMass = function (massData, density) { - zeroVec2(center); - var area = 0.0; - var I = 0.0; - // s is the reference point for forming triangles. - // It's location doesn't change the result (except for rounding error). - zeroVec2(s); - // This code would put the reference point inside the polygon. - for (var i = 0; i < this.m_count; ++i) { - plusVec2(s, this.m_vertices[i]); + } + return true; + }; + PolygonShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var p1 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p1, xf2.p)); + var p2 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p2, xf2.p)); + var d2 = Vec2.sub(p2, p1); + var lower = 0; + var upper = input2.maxFraction; + var index = -1; + for (var i = 0; i < this.m_count; ++i) { + var numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1)); + var denominator = Vec2.dot(this.m_normals[i], d2); + if (denominator == 0) { + if (numerator < 0) { + return false; + } + } else { + if (denominator < 0 && numerator < lower * denominator) { + lower = numerator / denominator; + index = i; + } else if (denominator > 0 && numerator < upper * denominator) { + upper = numerator / denominator; + } } - scaleVec2(s, 1.0 / this.m_count, s); - var k_inv3 = 1.0 / 3.0; - for (var i = 0; i < this.m_count; ++i) { - // Triangle vertices. - subVec2(e1$1, this.m_vertices[i], s); - if (i + 1 < this.m_count) { - subVec2(e2$1, this.m_vertices[i + 1], s); - } - else { - subVec2(e2$1, this.m_vertices[0], s); - } - var D = crossVec2Vec2(e1$1, e2$1); - var triangleArea = 0.5 * D; - area += triangleArea; - // Area weighted centroid - combine2Vec2(temp$1, triangleArea * k_inv3, e1$1, triangleArea * k_inv3, e2$1); - plusVec2(center, temp$1); - var ex1 = e1$1.x; - var ey1 = e1$1.y; - var ex2 = e2$1.x; - var ey2 = e2$1.y; - var intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2; - var inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2; - I += (0.25 * k_inv3 * D) * (intx2 + inty2); - } - // Total mass - massData.mass = density * area; - scaleVec2(center, 1.0 / area, center); - addVec2(massData.center, center, s); - // Inertia tensor relative to the local origin (point s). - massData.I = density * I; - // Shift to center of mass then to original body origin. - massData.I += massData.mass * (dotVec2(massData.center, massData.center) - dotVec2(center, center)); - }; - /** - * Validate convexity. This is a very time consuming operation. - * @returns true if valid - */ - PolygonShape.prototype.validate = function () { - for (var i = 0; i < this.m_count; ++i) { - var i1 = i; - var i2 = i < this.m_count - 1 ? i1 + 1 : 0; - var p = this.m_vertices[i1]; - subVec2(e$1, this.m_vertices[i2], p); - for (var j = 0; j < this.m_count; ++j) { - if (j == i1 || j == i2) { - continue; - } - var c = crossVec2Vec2(e$1, subVec2(temp$1, this.m_vertices[j], p)); - if (c < 0.0) { - return false; - } - } + if (upper < lower) { + return false; } + } + if (index >= 0) { + output2.fraction = lower; + output2.normal = Rot.mulVec2(xf2.q, this.m_normals[index]); return true; + } + return false; }; - PolygonShape.prototype.computeDistanceProxy = function (proxy) { - for (var i = 0; i < this.m_count; ++i) { - proxy.m_vertices[i] = this.m_vertices[i]; - } - proxy.m_vertices.length = this.m_count; - proxy.m_count = this.m_count; - proxy.m_radius = this.m_radius; - }; - PolygonShape.TYPE = "polygon"; - return PolygonShape; -}(Shape)); -/** @internal */ function computeCentroid(vs, count) { - var c = Vec2.zero(); - var area = 0.0; - // pRef is the reference point for forming triangles. - // It's location doesn't change the result (except for rounding error). - var pRef = Vec2.zero(); - var i; - var inv3 = 1.0 / 3.0; - for (var i = 0; i < count; ++i) { - // Triangle vertices. - var p1 = pRef; - var p2 = vs[i]; - var p3 = i + 1 < count ? vs[i + 1] : vs[0]; - var e1_1 = Vec2.sub(p2, p1); - var e2_1 = Vec2.sub(p3, p1); - var D = Vec2.crossVec2Vec2(e1_1, e2_1); + PolygonShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + var minX = Infinity; + var minY = Infinity; + var maxX = -Infinity; + var maxY = -Infinity; + for (var i = 0; i < this.m_count; ++i) { + var v3 = transformVec2(temp$1, xf2, this.m_vertices[i]); + minX = math_min$4(minX, v3.x); + maxX = math_max$2(maxX, v3.x); + minY = math_min$4(minY, v3.y); + maxY = math_max$2(maxY, v3.y); + } + setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius); + setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius); + }; + PolygonShape2.prototype.computeMass = function(massData, density) { + zeroVec2(center); + var area = 0; + var I = 0; + zeroVec2(s); + for (var i = 0; i < this.m_count; ++i) { + plusVec2(s, this.m_vertices[i]); + } + scaleVec2(s, 1 / this.m_count, s); + var k_inv3 = 1 / 3; + for (var i = 0; i < this.m_count; ++i) { + subVec2(e1$1, this.m_vertices[i], s); + if (i + 1 < this.m_count) { + subVec2(e2$1, this.m_vertices[i + 1], s); + } else { + subVec2(e2$1, this.m_vertices[0], s); + } + var D = crossVec2Vec2(e1$1, e2$1); var triangleArea = 0.5 * D; area += triangleArea; - // Area weighted centroid - combine3Vec2(temp$1, 1, p1, 1, p2, 1, p3); - plusScaleVec2(c, triangleArea * inv3, temp$1); - } - c.mul(1.0 / area); - return c; + combine2Vec2(temp$1, triangleArea * k_inv3, e1$1, triangleArea * k_inv3, e2$1); + plusVec2(center, temp$1); + var ex1 = e1$1.x; + var ey1 = e1$1.y; + var ex2 = e2$1.x; + var ey2 = e2$1.y; + var intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2; + var inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2; + I += 0.25 * k_inv3 * D * (intx2 + inty2); + } + massData.mass = density * area; + scaleVec2(center, 1 / area, center); + addVec2(massData.center, center, s); + massData.I = density * I; + massData.I += massData.mass * (dotVec2(massData.center, massData.center) - dotVec2(center, center)); + }; + PolygonShape2.prototype.validate = function() { + for (var i = 0; i < this.m_count; ++i) { + var i1 = i; + var i2 = i < this.m_count - 1 ? i1 + 1 : 0; + var p = this.m_vertices[i1]; + subVec2(e$1, this.m_vertices[i2], p); + for (var j = 0; j < this.m_count; ++j) { + if (j == i1 || j == i2) { + continue; + } + var c2 = crossVec2Vec2(e$1, subVec2(temp$1, this.m_vertices[j], p)); + if (c2 < 0) { + return false; + } + } + } + return true; + }; + PolygonShape2.prototype.computeDistanceProxy = function(proxy) { + for (var i = 0; i < this.m_count; ++i) { + proxy.m_vertices[i] = this.m_vertices[i]; + } + proxy.m_vertices.length = this.m_count; + proxy.m_count = this.m_count; + proxy.m_radius = this.m_radius; + }; + PolygonShape2.TYPE = "polygon"; + return PolygonShape2; + }(Shape) +); +function computeCentroid(vs, count) { + var c2 = Vec2.zero(); + var area = 0; + var pRef = Vec2.zero(); + var i; + var inv3 = 1 / 3; + for (var i = 0; i < count; ++i) { + var p1 = pRef; + var p2 = vs[i]; + var p3 = i + 1 < count ? vs[i + 1] : vs[0]; + var e1_1 = Vec2.sub(p2, p1); + var e2_1 = Vec2.sub(p3, p1); + var D = Vec2.crossVec2Vec2(e1_1, e2_1); + var triangleArea = 0.5 * D; + area += triangleArea; + combine3Vec2(temp$1, 1, p1, 1, p2, 1, p3); + plusScaleVec2(c2, triangleArea * inv3, temp$1); + } + c2.mul(1 / area); + return c2; } var Polygon = PolygonShape; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_sqrt$2 = Math.sqrt; -/** @internal */ var math_PI$5 = Math.PI; -/** @internal */ var temp = vec2(0, 0); -var CircleShape = /** @class */ (function (_super) { - __extends$a(CircleShape, _super); - function CircleShape(a, b) { - var _this = this; - // @ts-ignore - if (!(_this instanceof CircleShape)) { - return new CircleShape(a, b); - } - _this = _super.call(this) || this; - _this.m_type = CircleShape.TYPE; - _this.m_p = Vec2.zero(); - _this.m_radius = 1; - if (typeof a === "object" && Vec2.isValid(a)) { - _this.m_p.setVec2(a); - if (typeof b === "number") { - _this.m_radius = b; - } - } - else if (typeof a === "number") { - _this.m_radius = a; +var math_sqrt$2 = Math.sqrt; +var math_PI$5 = Math.PI; +var temp = vec2(0, 0); +var CircleShape = ( + /** @class */ + function(_super) { + __extends$a(CircleShape2, _super); + function CircleShape2(a2, b2) { + var _this = this; + if (!(_this instanceof CircleShape2)) { + return new CircleShape2(a2, b2); + } + _this = _super.call(this) || this; + _this.m_type = CircleShape2.TYPE; + _this.m_p = Vec2.zero(); + _this.m_radius = 1; + if (typeof a2 === "object" && Vec2.isValid(a2)) { + _this.m_p.setVec2(a2); + if (typeof b2 === "number") { + _this.m_radius = b2; } - return _this; + } else if (typeof a2 === "number") { + _this.m_radius = a2; + } + return _this; } - /** @internal */ - CircleShape.prototype._serialize = function () { - return { - type: this.m_type, - p: this.m_p, - radius: this.m_radius, - }; + CircleShape2.prototype._serialize = function() { + return { + type: this.m_type, + p: this.m_p, + radius: this.m_radius + }; }; - /** @internal */ - CircleShape._deserialize = function (data) { - return new CircleShape(data.p, data.radius); - }; - /** @hidden */ - CircleShape.prototype._reset = function () { - // noop - }; - CircleShape.prototype.getType = function () { - return this.m_type; - }; - CircleShape.prototype.getRadius = function () { - return this.m_radius; - }; - CircleShape.prototype.getCenter = function () { - return this.m_p; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - CircleShape.prototype._clone = function () { - var clone = new CircleShape(); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_p = this.m_p.clone(); - return clone; - }; - /** - * Get the number of child primitives. - */ - CircleShape.prototype.getChildCount = function () { - return 1; - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - CircleShape.prototype.testPoint = function (xf, p) { - var center = transformVec2(temp, xf, this.m_p); - return distSqrVec2(p, center) <= this.m_radius * this.m_radius; - }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - CircleShape.prototype.rayCast = function (output, input, xf, childIndex) { - // Collision Detection in Interactive 3D Environments by Gino van den Bergen - // From Section 3.1.2 - // x = s + a * r - // norm(x) = radius - var position = Vec2.add(xf.p, Rot.mulVec2(xf.q, this.m_p)); - var s = Vec2.sub(input.p1, position); - var b = Vec2.dot(s, s) - this.m_radius * this.m_radius; - // Solve quadratic equation. - var r = Vec2.sub(input.p2, input.p1); - var c = Vec2.dot(s, r); - var rr = Vec2.dot(r, r); - var sigma = c * c - rr * b; - // Check for negative discriminant and short segment. - if (sigma < 0.0 || rr < EPSILON) { - return false; - } - // Find the point of intersection of the line with the circle. - var a = -(c + math_sqrt$2(sigma)); - // Is the intersection point on the segment? - if (0.0 <= a && a <= input.maxFraction * rr) { - a /= rr; - output.fraction = a; - output.normal = Vec2.add(s, Vec2.mulNumVec2(a, r)); - output.normal.normalize(); - return true; - } + CircleShape2._deserialize = function(data) { + return new CircleShape2(data.p, data.radius); + }; + CircleShape2.prototype._reset = function() { + }; + CircleShape2.prototype.getType = function() { + return this.m_type; + }; + CircleShape2.prototype.getRadius = function() { + return this.m_radius; + }; + CircleShape2.prototype.getCenter = function() { + return this.m_p; + }; + CircleShape2.prototype._clone = function() { + var clone = new CircleShape2(); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_p = this.m_p.clone(); + return clone; + }; + CircleShape2.prototype.getChildCount = function() { + return 1; + }; + CircleShape2.prototype.testPoint = function(xf2, p) { + var center2 = transformVec2(temp, xf2, this.m_p); + return distSqrVec2(p, center2) <= this.m_radius * this.m_radius; + }; + CircleShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var position = Vec2.add(xf2.p, Rot.mulVec2(xf2.q, this.m_p)); + var s2 = Vec2.sub(input2.p1, position); + var b2 = Vec2.dot(s2, s2) - this.m_radius * this.m_radius; + var r = Vec2.sub(input2.p2, input2.p1); + var c2 = Vec2.dot(s2, r); + var rr = Vec2.dot(r, r); + var sigma = c2 * c2 - rr * b2; + if (sigma < 0 || rr < EPSILON) { return false; + } + var a2 = -(c2 + math_sqrt$2(sigma)); + if (0 <= a2 && a2 <= input2.maxFraction * rr) { + a2 /= rr; + output2.fraction = a2; + output2.normal = Vec2.add(s2, Vec2.mulNumVec2(a2, r)); + output2.normal.normalize(); + return true; + } + return false; }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - CircleShape.prototype.computeAABB = function (aabb, xf, childIndex) { - var p = transformVec2(temp, xf, this.m_p); - setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius); - setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - CircleShape.prototype.computeMass = function (massData, density) { - massData.mass = density * math_PI$5 * this.m_radius * this.m_radius; - copyVec2(massData.center, this.m_p); - // inertia about the local origin - massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + lengthSqrVec2(this.m_p)); - }; - CircleShape.prototype.computeDistanceProxy = function (proxy) { - proxy.m_vertices[0] = this.m_p; - proxy.m_vertices.length = 1; - proxy.m_count = 1; - proxy.m_radius = this.m_radius; - }; - CircleShape.TYPE = "circle"; - return CircleShape; -}(Shape)); + CircleShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + var p = transformVec2(temp, xf2, this.m_p); + setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius); + setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius); + }; + CircleShape2.prototype.computeMass = function(massData, density) { + massData.mass = density * math_PI$5 * this.m_radius * this.m_radius; + copyVec2(massData.center, this.m_p); + massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + lengthSqrVec2(this.m_p)); + }; + CircleShape2.prototype.computeDistanceProxy = function(proxy) { + proxy.m_vertices[0] = this.m_p; + proxy.m_vertices.length = 1; + proxy.m_count = 1; + proxy.m_radius = this.m_radius; + }; + CircleShape2.TYPE = "circle"; + return CircleShape2; + }(Shape) +); var Circle = CircleShape; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$6 = Math.abs; -/** @internal */ var math_PI$4 = Math.PI; -/** @internal */ var DEFAULTS$a = { - frequencyHz: 0.0, - dampingRatio: 0.0 -}; -/** - * A distance joint constrains two points on two bodies to remain at a fixed - * distance from each other. You can view this as a massless, rigid rod. - */ -var DistanceJoint = /** @class */ (function (_super) { - __extends$a(DistanceJoint, _super); - function DistanceJoint(def, bodyA, bodyB, anchorA, anchorB) { - var _this = this; - // @ts-ignore - if (!(_this instanceof DistanceJoint)) { - return new DistanceJoint(def, bodyA, bodyB, anchorA, anchorB); - } - // order of constructor arguments is changed in v0.2 - if (bodyB && anchorA && ("m_type" in anchorA) && ("x" in bodyB) && ("y" in bodyB)) { - var temp = bodyB; - bodyB = anchorA; - anchorA = temp; - } - def = options(def, DEFAULTS$a); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = DistanceJoint.TYPE; - // Solver shared - _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.zero()); - _this.m_length = Number.isFinite(def.length) ? def.length : - Vec2.distance(bodyA.getWorldPoint(_this.m_localAnchorA), bodyB.getWorldPoint(_this.m_localAnchorB)); - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_impulse = 0.0; - _this.m_gamma = 0.0; - _this.m_bias = 0.0; - return _this; - // 1-D constrained system - // m (v2 - v1) = lambda - // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass. - // x2 = x1 + h * v2 - // 1-D mass-damper-spring system - // m (v2 - v1) + h * d * v2 + h * k * - // C = norm(p2 - p1) - L - // u = (p2 - p1) / norm(p2 - p1) - // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1)) - // J = [-u -cross(r1, u) u cross(r2, u)] - // K = J * invM * JT - // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2 - } - /** @internal */ - DistanceJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - length: this.m_length, - impulse: this.m_impulse, - gamma: this.m_gamma, - bias: this.m_bias, - }; - }; - /** @internal */ - DistanceJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new DistanceJoint(data); - return joint; - }; - /** @hidden */ - DistanceJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (def.length > 0) { - this.m_length = +def.length; - } - else if (def.length < 0) ; - else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) { - this.m_length = Vec2.distance(this.m_bodyA.getWorldPoint(this.m_localAnchorA), this.m_bodyB.getWorldPoint(this.m_localAnchorB)); - } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; - } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - DistanceJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - DistanceJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Set the natural length. Manipulating the length can lead to non-physical - * behavior when the frequency is zero. - */ - DistanceJoint.prototype.setLength = function (length) { - this.m_length = length; - }; - /** - * Get the natural length. - */ - DistanceJoint.prototype.getLength = function () { - return this.m_length; - }; - DistanceJoint.prototype.setFrequency = function (hz) { - this.m_frequencyHz = hz; - }; - DistanceJoint.prototype.getFrequency = function () { - return this.m_frequencyHz; - }; - DistanceJoint.prototype.setDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - DistanceJoint.prototype.getDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - DistanceJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - DistanceJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - DistanceJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - DistanceJoint.prototype.getReactionTorque = function (inv_dt) { - return 0.0; - }; - DistanceJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - this.m_u = Vec2.sub(Vec2.add(cB, this.m_rB), Vec2.add(cA, this.m_rA)); - // Handle singularity. - var length = this.m_u.length(); - if (length > SettingsInternal.linearSlop) { - this.m_u.mul(1.0 / length); - } - else { - this.m_u.setNum(0.0, 0.0); - } - var crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u); - var crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u); - var invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu; - // Compute the effective mass matrix. - this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0; - if (this.m_frequencyHz > 0.0) { - var C = length - this.m_length; - // Frequency - var omega = 2.0 * math_PI$4 * this.m_frequencyHz; - // Damping coefficient - var d = 2.0 * this.m_mass * this.m_dampingRatio * omega; - // Spring stiffness - var k = this.m_mass * omega * omega; - // magic formulas - var h = step.dt; - this.m_gamma = h * (d + h * k); - this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0; - this.m_bias = C * h * k * this.m_gamma; - invMass += this.m_gamma; - this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0; - } - else { - this.m_gamma = 0.0; - this.m_bias = 0.0; - } - if (step.warmStarting) { - // Scale the impulse to support a variable time step. - this.m_impulse *= step.dtRatio; - var P = Vec2.mulNumVec2(this.m_impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - DistanceJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - // Cdot = dot(u, v + cross(w, r)) - var vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA)); - var vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)); - var Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA); - var impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse); - this.m_impulse += impulse; - var P = Vec2.mulNumVec2(impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - DistanceJoint.prototype.solvePositionConstraints = function (step) { - if (this.m_frequencyHz > 0.0) { - // There is no position correction for soft distance constraints. - return true; - } - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); - var u = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA)); - var length = u.normalize(); - var C = clamp$1(length - this.m_length, -SettingsInternal.maxLinearCorrection, SettingsInternal.maxLinearCorrection); - var impulse = -this.m_mass * C; - var P = Vec2.mulNumVec2(impulse, u); - cA.subMul(this.m_invMassA, P); - aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P); - cB.addMul(this.m_invMassB, P); - aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P); - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return math_abs$6(C) < SettingsInternal.linearSlop; - }; - DistanceJoint.TYPE = "distance-joint"; - return DistanceJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var DEFAULTS$9 = { - maxForce: 0.0, - maxTorque: 0.0, +var math_abs$6 = Math.abs; +var math_PI$4 = Math.PI; +var DEFAULTS$a = { + frequencyHz: 0, + dampingRatio: 0 }; -/** - * Friction joint. This is used for top-down friction. It provides 2D - * translational friction and angular friction. - */ -var FrictionJoint = /** @class */ (function (_super) { - __extends$a(FrictionJoint, _super); - function FrictionJoint(def, bodyA, bodyB, anchor) { - var _this = this; - // @ts-ignore - if (!(_this instanceof FrictionJoint)) { - return new FrictionJoint(def, bodyA, bodyB, anchor); - } - def = options(def, DEFAULTS$9); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = FrictionJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - // Solver shared - _this.m_linearImpulse = Vec2.zero(); - _this.m_angularImpulse = 0.0; - _this.m_maxForce = def.maxForce; - _this.m_maxTorque = def.maxTorque; - return _this; - // Point-to-point constraint - // Cdot = v2 - v1 - // = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // Angle constraint - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 +var DistanceJoint = ( + /** @class */ + function(_super) { + __extends$a(DistanceJoint2, _super); + function DistanceJoint2(def, bodyA, bodyB, anchorA, anchorB) { + var _this = this; + if (!(_this instanceof DistanceJoint2)) { + return new DistanceJoint2(def, bodyA, bodyB, anchorA, anchorB); + } + if (bodyB && anchorA && "m_type" in anchorA && "x" in bodyB && "y" in bodyB) { + var temp3 = bodyB; + bodyB = anchorA; + anchorA = temp3; + } + def = options(def, DEFAULTS$a); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = DistanceJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.zero()); + _this.m_length = Number.isFinite(def.length) ? def.length : Vec2.distance(bodyA.getWorldPoint(_this.m_localAnchorA), bodyB.getWorldPoint(_this.m_localAnchorB)); + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_impulse = 0; + _this.m_gamma = 0; + _this.m_bias = 0; + return _this; } - /** @internal */ - FrictionJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - maxForce: this.m_maxForce, - maxTorque: this.m_maxTorque, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - }; + DistanceJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + length: this.m_length, + impulse: this.m_impulse, + gamma: this.m_gamma, + bias: this.m_bias + }; }; - /** @internal */ - FrictionJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new FrictionJoint(data); - return joint; - }; - /** @hidden */ - FrictionJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (Number.isFinite(def.maxForce)) { - this.m_maxForce = def.maxForce; - } - if (Number.isFinite(def.maxTorque)) { - this.m_maxTorque = def.maxTorque; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - FrictionJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - FrictionJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Set the maximum friction force in N. - */ - FrictionJoint.prototype.setMaxForce = function (force) { - this.m_maxForce = force; - }; - /** - * Get the maximum friction force in N. - */ - FrictionJoint.prototype.getMaxForce = function () { - return this.m_maxForce; - }; - /** - * Set the maximum friction torque in N*m. - */ - FrictionJoint.prototype.setMaxTorque = function (torque) { - this.m_maxTorque = torque; - }; - /** - * Get the maximum friction torque in N*m. - */ - FrictionJoint.prototype.getMaxTorque = function () { - return this.m_maxTorque; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - FrictionJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - FrictionJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - FrictionJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - FrictionJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_angularImpulse; - }; - FrictionJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective mass matrix. - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // [ 0 -1 0 1] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var K = new Mat22(); - K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y - * this.m_rB.y; - K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; - K.ey.x = K.ex.y; - K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x - * this.m_rB.x; - this.m_linearMass = K.getInverse(); - this.m_angularMass = iA + iB; - if (this.m_angularMass > 0.0) { - this.m_angularMass = 1.0 / this.m_angularMass; - } - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_linearImpulse.mul(step.dtRatio); - this.m_angularImpulse *= step.dtRatio; - var P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse); - } - else { - this.m_linearImpulse.setZero(); - this.m_angularImpulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - FrictionJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; + DistanceJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new DistanceJoint2(data); + return joint; + }; + DistanceJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (def.length > 0) { + this.m_length = +def.length; + } else if (def.length < 0) ; + else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) { + this.m_length = Vec2.distance(this.m_bodyA.getWorldPoint(this.m_localAnchorA), this.m_bodyB.getWorldPoint(this.m_localAnchorB)); + } + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; + } + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; + } + }; + DistanceJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + DistanceJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + DistanceJoint2.prototype.setLength = function(length2) { + this.m_length = length2; + }; + DistanceJoint2.prototype.getLength = function() { + return this.m_length; + }; + DistanceJoint2.prototype.setFrequency = function(hz) { + this.m_frequencyHz = hz; + }; + DistanceJoint2.prototype.getFrequency = function() { + return this.m_frequencyHz; + }; + DistanceJoint2.prototype.setDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + DistanceJoint2.prototype.getDampingRatio = function() { + return this.m_dampingRatio; + }; + DistanceJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + DistanceJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + DistanceJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); + }; + DistanceJoint2.prototype.getReactionTorque = function(inv_dt) { + return 0; + }; + DistanceJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + this.m_u = Vec2.sub(Vec2.add(cB2, this.m_rB), Vec2.add(cA2, this.m_rA)); + var length2 = this.m_u.length(); + if (length2 > SettingsInternal.linearSlop) { + this.m_u.mul(1 / length2); + } else { + this.m_u.setNum(0, 0); + } + var crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u); + var crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u); + var invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu; + this.m_mass = invMass != 0 ? 1 / invMass : 0; + if (this.m_frequencyHz > 0) { + var C = length2 - this.m_length; + var omega = 2 * math_PI$4 * this.m_frequencyHz; + var d2 = 2 * this.m_mass * this.m_dampingRatio * omega; + var k = this.m_mass * omega * omega; var h = step.dt; - // Solve angular friction - { - var Cdot = wB - wA; - var impulse = -this.m_angularMass * Cdot; - var oldImpulse = this.m_angularImpulse; - var maxImpulse = h * this.m_maxTorque; - this.m_angularImpulse = clamp$1(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_angularImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve linear friction - { - var Cdot = Vec2.sub(Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)), Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA))); - var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); - var oldImpulse = this.m_linearImpulse; - this.m_linearImpulse.add(impulse); - var maxImpulse = h * this.m_maxForce; - if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) { - this.m_linearImpulse.normalize(); - this.m_linearImpulse.mul(maxImpulse); - } - impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); - vA.subMul(mA, impulse); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); - vB.addMul(mB, impulse); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - FrictionJoint.prototype.solvePositionConstraints = function (step) { + this.m_gamma = h * (d2 + h * k); + this.m_gamma = this.m_gamma != 0 ? 1 / this.m_gamma : 0; + this.m_bias = C * h * k * this.m_gamma; + invMass += this.m_gamma; + this.m_mass = invMass != 0 ? 1 / invMass : 0; + } else { + this.m_gamma = 0; + this.m_bias = 0; + } + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + var P3 = Vec2.mulNumVec2(this.m_impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + DistanceJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vpA = Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA)); + var vpB = Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB)); + var Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA); + var impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse); + this.m_impulse += impulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + DistanceJoint2.prototype.solvePositionConstraints = function(step) { + if (this.m_frequencyHz > 0) { return true; + } + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); + var u = Vec2.sub(Vec2.add(cB2, rB2), Vec2.add(cA2, rA2)); + var length2 = u.normalize(); + var C = clamp$1(length2 - this.m_length, -SettingsInternal.maxLinearCorrection, SettingsInternal.maxLinearCorrection); + var impulse = -this.m_mass * C; + var P3 = Vec2.mulNumVec2(impulse, u); + cA2.subMul(this.m_invMassA, P3); + aA -= this.m_invIA * Vec2.crossVec2Vec2(rA2, P3); + cB2.addMul(this.m_invMassB, P3); + aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, P3); + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return math_abs$6(C) < SettingsInternal.linearSlop; + }; + DistanceJoint2.TYPE = "distance-joint"; + return DistanceJoint2; + }(Joint) +); +var DEFAULTS$9 = { + maxForce: 0, + maxTorque: 0 +}; +var FrictionJoint = ( + /** @class */ + function(_super) { + __extends$a(FrictionJoint2, _super); + function FrictionJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + if (!(_this instanceof FrictionJoint2)) { + return new FrictionJoint2(def, bodyA, bodyB, anchor); + } + def = options(def, DEFAULTS$9); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = FrictionJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + _this.m_linearImpulse = Vec2.zero(); + _this.m_angularImpulse = 0; + _this.m_maxForce = def.maxForce; + _this.m_maxTorque = def.maxTorque; + return _this; + } + FrictionJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + maxForce: this.m_maxForce, + maxTorque: this.m_maxTorque, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB + }; }; - FrictionJoint.TYPE = "friction-joint"; - return FrictionJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** - * A 3-by-3 matrix. Stored in column-major order. - */ -var Mat33 = /** @class */ (function () { - function Mat33(a, b, c) { - if (typeof a === "object" && a !== null) { - this.ex = Vec3.clone(a); - this.ey = Vec3.clone(b); - this.ez = Vec3.clone(c); - } - else { - this.ex = Vec3.zero(); - this.ey = Vec3.zero(); - this.ez = Vec3.zero(); - } + FrictionJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new FrictionJoint2(data); + return joint; + }; + FrictionJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (Number.isFinite(def.maxForce)) { + this.m_maxForce = def.maxForce; + } + if (Number.isFinite(def.maxTorque)) { + this.m_maxTorque = def.maxTorque; + } + }; + FrictionJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + FrictionJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + FrictionJoint2.prototype.setMaxForce = function(force) { + this.m_maxForce = force; + }; + FrictionJoint2.prototype.getMaxForce = function() { + return this.m_maxForce; + }; + FrictionJoint2.prototype.setMaxTorque = function(torque) { + this.m_maxTorque = torque; + }; + FrictionJoint2.prototype.getMaxTorque = function() { + return this.m_maxTorque; + }; + FrictionJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + FrictionJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + FrictionJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); + }; + FrictionJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_angularImpulse; + }; + FrictionJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var K = new Mat22(); + K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y; + K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x; + this.m_linearMass = K.getInverse(); + this.m_angularMass = iA + iB; + if (this.m_angularMass > 0) { + this.m_angularMass = 1 / this.m_angularMass; + } + if (step.warmStarting) { + this.m_linearImpulse.mul(step.dtRatio); + this.m_angularImpulse *= step.dtRatio; + var P3 = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_angularImpulse); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_angularImpulse); + } else { + this.m_linearImpulse.setZero(); + this.m_angularImpulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + FrictionJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var h = step.dt; + { + var Cdot = wB - wA; + var impulse = -this.m_angularMass * Cdot; + var oldImpulse = this.m_angularImpulse; + var maxImpulse = h * this.m_maxTorque; + this.m_angularImpulse = clamp$1(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_angularImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + { + var Cdot = Vec2.sub(Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB)), Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA))); + var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); + var oldImpulse = this.m_linearImpulse; + this.m_linearImpulse.add(impulse); + var maxImpulse = h * this.m_maxForce; + if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) { + this.m_linearImpulse.normalize(); + this.m_linearImpulse.mul(maxImpulse); + } + impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); + vA2.subMul(mA, impulse); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); + vB2.addMul(mB, impulse); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + FrictionJoint2.prototype.solvePositionConstraints = function(step) { + return true; + }; + FrictionJoint2.TYPE = "friction-joint"; + return FrictionJoint2; + }(Joint) +); +var Mat33 = ( + /** @class */ + function() { + function Mat332(a2, b2, c2) { + if (typeof a2 === "object" && a2 !== null) { + this.ex = Vec3.clone(a2); + this.ey = Vec3.clone(b2); + this.ez = Vec3.clone(c2); + } else { + this.ex = Vec3.zero(); + this.ey = Vec3.zero(); + this.ez = Vec3.zero(); + } } - /** @hidden */ - Mat33.prototype.toString = function () { - return JSON.stringify(this); + Mat332.prototype.toString = function() { + return JSON.stringify(this); }; - Mat33.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec3.isValid(obj.ex) && Vec3.isValid(obj.ey) && Vec3.isValid(obj.ez); + Mat332.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec3.isValid(obj.ex) && Vec3.isValid(obj.ey) && Vec3.isValid(obj.ez); }; - Mat33.assert = function (o) { + Mat332.assert = function(o) { }; - /** - * Set this matrix to all zeros. - */ - Mat33.prototype.setZero = function () { - this.ex.setZero(); - this.ey.setZero(); - this.ez.setZero(); - return this; + Mat332.prototype.setZero = function() { + this.ex.setZero(); + this.ey.setZero(); + this.ez.setZero(); + return this; }; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - Mat33.prototype.solve33 = function (v) { - // let det = matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, this.ez)); - var cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; - var cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; - var cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; - var det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z; - if (det !== 0.0) { - det = 1.0 / det; - } - var r = new Vec3(); - // r.x = det * matrix.dotVec3(v, matrix.newCrossVec3(this.ey, this.ez)); - cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; - cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; - cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; - r.x = det * (v.x * cross_x + v.y * cross_y + v.z * cross_z); - // r.y = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(v, this.ez)); - cross_x = v.y * this.ez.z - v.z * this.ez.y; - cross_y = v.z * this.ez.x - v.x * this.ez.z; - cross_z = v.x * this.ez.y - v.y * this.ez.x; - r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); - // r.z = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, v)); - cross_x = this.ey.y * v.z - this.ey.z * v.y; - cross_y = this.ey.z * v.x - this.ey.x * v.z; - cross_z = this.ey.x * v.y - this.ey.y * v.x; - r.z = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); - return r; - }; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix - * equation. - */ - Mat33.prototype.solve22 = function (v) { - var a11 = this.ex.x; - var a12 = this.ey.x; - var a21 = this.ex.y; - var a22 = this.ey.y; - var det = a11 * a22 - a12 * a21; - if (det !== 0.0) { - det = 1.0 / det; - } - var r = Vec2.zero(); - r.x = det * (a22 * v.x - a12 * v.y); - r.y = det * (a11 * v.y - a21 * v.x); - return r; - }; - /** - * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if - * singular. - */ - Mat33.prototype.getInverse22 = function (M) { - var a = this.ex.x; - var b = this.ey.x; - var c = this.ex.y; - var d = this.ey.y; - var det = a * d - b * c; - if (det !== 0.0) { - det = 1.0 / det; - } - M.ex.x = det * d; - M.ey.x = -det * b; - M.ex.z = 0.0; - M.ex.y = -det * c; - M.ey.y = det * a; - M.ey.z = 0.0; - M.ez.x = 0.0; - M.ez.y = 0.0; - M.ez.z = 0.0; - }; - /** - * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix - * if singular. - */ - Mat33.prototype.getSymInverse33 = function (M) { - var det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez)); - if (det !== 0.0) { - det = 1.0 / det; - } - var a11 = this.ex.x; - var a12 = this.ey.x; - var a13 = this.ez.x; - var a22 = this.ey.y; - var a23 = this.ez.y; - var a33 = this.ez.z; - M.ex.x = det * (a22 * a33 - a23 * a23); - M.ex.y = det * (a13 * a23 - a12 * a33); - M.ex.z = det * (a12 * a23 - a13 * a22); - M.ey.x = M.ex.y; - M.ey.y = det * (a11 * a33 - a13 * a13); - M.ey.z = det * (a13 * a12 - a11 * a23); - M.ez.x = M.ex.z; - M.ez.y = M.ey.z; - M.ez.z = det * (a11 * a22 - a12 * a12); - }; - Mat33.mul = function (a, b) { - if (b && "z" in b && "y" in b && "x" in b) { - var x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z; - var y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z; - var z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z; - return new Vec3(x, y, z); - } - else if (b && "y" in b && "x" in b) { - var x = a.ex.x * b.x + a.ey.x * b.y; - var y = a.ex.y * b.x + a.ey.y * b.y; - return Vec2.neo(x, y); - } - }; - Mat33.mulVec3 = function (a, b) { - var x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z; - var y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z; - var z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z; - return new Vec3(x, y, z); - }; - Mat33.mulVec2 = function (a, b) { - var x = a.ex.x * b.x + a.ey.x * b.y; - var y = a.ex.y * b.x + a.ey.y * b.y; - return Vec2.neo(x, y); - }; - Mat33.add = function (a, b) { - return new Mat33(Vec3.add(a.ex, b.ex), Vec3.add(a.ey, b.ey), Vec3.add(a.ez, b.ez)); - }; - return Mat33; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$5 = Math.abs; -// todo: use string? -/** @internal */ var LimitState$2; -(function (LimitState) { - LimitState[LimitState["inactiveLimit"] = 0] = "inactiveLimit"; - LimitState[LimitState["atLowerLimit"] = 1] = "atLowerLimit"; - LimitState[LimitState["atUpperLimit"] = 2] = "atUpperLimit"; - LimitState[LimitState["equalLimits"] = 3] = "equalLimits"; + Mat332.prototype.solve33 = function(v3) { + var cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; + var cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; + var cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; + var det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z; + if (det !== 0) { + det = 1 / det; + } + var r = new Vec3(); + cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; + cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; + cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; + r.x = det * (v3.x * cross_x + v3.y * cross_y + v3.z * cross_z); + cross_x = v3.y * this.ez.z - v3.z * this.ez.y; + cross_y = v3.z * this.ez.x - v3.x * this.ez.z; + cross_z = v3.x * this.ez.y - v3.y * this.ez.x; + r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); + cross_x = this.ey.y * v3.z - this.ey.z * v3.y; + cross_y = this.ey.z * v3.x - this.ey.x * v3.z; + cross_z = this.ey.x * v3.y - this.ey.y * v3.x; + r.z = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); + return r; + }; + Mat332.prototype.solve22 = function(v3) { + var a11 = this.ex.x; + var a12 = this.ey.x; + var a21 = this.ex.y; + var a22 = this.ey.y; + var det = a11 * a22 - a12 * a21; + if (det !== 0) { + det = 1 / det; + } + var r = Vec2.zero(); + r.x = det * (a22 * v3.x - a12 * v3.y); + r.y = det * (a11 * v3.y - a21 * v3.x); + return r; + }; + Mat332.prototype.getInverse22 = function(M) { + var a2 = this.ex.x; + var b2 = this.ey.x; + var c2 = this.ex.y; + var d2 = this.ey.y; + var det = a2 * d2 - b2 * c2; + if (det !== 0) { + det = 1 / det; + } + M.ex.x = det * d2; + M.ey.x = -det * b2; + M.ex.z = 0; + M.ex.y = -det * c2; + M.ey.y = det * a2; + M.ey.z = 0; + M.ez.x = 0; + M.ez.y = 0; + M.ez.z = 0; + }; + Mat332.prototype.getSymInverse33 = function(M) { + var det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez)); + if (det !== 0) { + det = 1 / det; + } + var a11 = this.ex.x; + var a12 = this.ey.x; + var a13 = this.ez.x; + var a22 = this.ey.y; + var a23 = this.ez.y; + var a33 = this.ez.z; + M.ex.x = det * (a22 * a33 - a23 * a23); + M.ex.y = det * (a13 * a23 - a12 * a33); + M.ex.z = det * (a12 * a23 - a13 * a22); + M.ey.x = M.ex.y; + M.ey.y = det * (a11 * a33 - a13 * a13); + M.ey.z = det * (a13 * a12 - a11 * a23); + M.ez.x = M.ex.z; + M.ez.y = M.ey.z; + M.ez.z = det * (a11 * a22 - a12 * a12); + }; + Mat332.mul = function(a2, b2) { + if (b2 && "z" in b2 && "y" in b2 && "x" in b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y + a2.ez.x * b2.z; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y + a2.ez.y * b2.z; + var z = a2.ex.z * b2.x + a2.ey.z * b2.y + a2.ez.z * b2.z; + return new Vec3(x2, y, z); + } else if (b2 && "y" in b2 && "x" in b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y; + return Vec2.neo(x2, y); + } + }; + Mat332.mulVec3 = function(a2, b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y + a2.ez.x * b2.z; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y + a2.ez.y * b2.z; + var z = a2.ex.z * b2.x + a2.ey.z * b2.y + a2.ez.z * b2.z; + return new Vec3(x2, y, z); + }; + Mat332.mulVec2 = function(a2, b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y; + return Vec2.neo(x2, y); + }; + Mat332.add = function(a2, b2) { + return new Mat332(Vec3.add(a2.ex, b2.ex), Vec3.add(a2.ey, b2.ey), Vec3.add(a2.ez, b2.ez)); + }; + return Mat332; + }() +); +var math_abs$5 = Math.abs; +var LimitState$2; +(function(LimitState2) { + LimitState2[LimitState2["inactiveLimit"] = 0] = "inactiveLimit"; + LimitState2[LimitState2["atLowerLimit"] = 1] = "atLowerLimit"; + LimitState2[LimitState2["atUpperLimit"] = 2] = "atUpperLimit"; + LimitState2[LimitState2["equalLimits"] = 3] = "equalLimits"; })(LimitState$2 || (LimitState$2 = {})); -/** @internal */ var DEFAULTS$8 = { - lowerAngle: 0.0, - upperAngle: 0.0, - maxMotorTorque: 0.0, - motorSpeed: 0.0, - enableLimit: false, - enableMotor: false +var DEFAULTS$8 = { + lowerAngle: 0, + upperAngle: 0, + maxMotorTorque: 0, + motorSpeed: 0, + enableLimit: false, + enableMotor: false }; -/** - * A revolute joint constrains two bodies to share a common point while they are - * free to rotate about the point. The relative rotation about the shared point - * is the joint angle. You can limit the relative rotation with a joint limit - * that specifies a lower and upper angle. You can use a motor to drive the - * relative rotation about the shared point. A maximum motor torque is provided - * so that infinite forces are not generated. - */ -var RevoluteJoint = /** @class */ (function (_super) { - __extends$a(RevoluteJoint, _super); - function RevoluteJoint(def, bodyA, bodyB, anchor) { - var _a, _b, _c, _d, _e, _f; - var _this = this; - // @ts-ignore - if (!(_this instanceof RevoluteJoint)) { - return new RevoluteJoint(def, bodyA, bodyB, anchor); - } - def = def !== null && def !== void 0 ? def : {}; - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_mass = new Mat33(); - _this.m_limitState = LimitState$2.inactiveLimit; - _this.m_type = RevoluteJoint.TYPE; - if (Vec2.isValid(anchor)) { - _this.m_localAnchorA = bodyA.getLocalPoint(anchor); - } - else if (Vec2.isValid(def.localAnchorA)) { - _this.m_localAnchorA = Vec2.clone(def.localAnchorA); - } - else { - _this.m_localAnchorA = Vec2.zero(); - } - if (Vec2.isValid(anchor)) { - _this.m_localAnchorB = bodyB.getLocalPoint(anchor); - } - else if (Vec2.isValid(def.localAnchorB)) { - _this.m_localAnchorB = Vec2.clone(def.localAnchorB); - } - else { - _this.m_localAnchorB = Vec2.zero(); - } - if (Number.isFinite(def.referenceAngle)) { - _this.m_referenceAngle = def.referenceAngle; - } - else { - _this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle(); - } - _this.m_impulse = new Vec3(); - _this.m_motorImpulse = 0.0; - _this.m_lowerAngle = (_a = def.lowerAngle) !== null && _a !== void 0 ? _a : DEFAULTS$8.lowerAngle; - _this.m_upperAngle = (_b = def.upperAngle) !== null && _b !== void 0 ? _b : DEFAULTS$8.upperAngle; - _this.m_maxMotorTorque = (_c = def.maxMotorTorque) !== null && _c !== void 0 ? _c : DEFAULTS$8.maxMotorTorque; - _this.m_motorSpeed = (_d = def.motorSpeed) !== null && _d !== void 0 ? _d : DEFAULTS$8.motorSpeed; - _this.m_enableLimit = (_e = def.enableLimit) !== null && _e !== void 0 ? _e : DEFAULTS$8.enableLimit; - _this.m_enableMotor = (_f = def.enableMotor) !== null && _f !== void 0 ? _f : DEFAULTS$8.enableMotor; - return _this; - // Point-to-point constraint - // C = p2 - p1 - // Cdot = v2 - v1 - // = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // Motor constraint - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 +var RevoluteJoint = ( + /** @class */ + function(_super) { + __extends$a(RevoluteJoint2, _super); + function RevoluteJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + var _a2, _b, _c, _d, _e, _f; + if (!(_this instanceof RevoluteJoint2)) { + return new RevoluteJoint2(def, bodyA, bodyB, anchor); + } + def = def !== null && def !== void 0 ? def : {}; + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_mass = new Mat33(); + _this.m_limitState = LimitState$2.inactiveLimit; + _this.m_type = RevoluteJoint2.TYPE; + if (Vec2.isValid(anchor)) { + _this.m_localAnchorA = bodyA.getLocalPoint(anchor); + } else if (Vec2.isValid(def.localAnchorA)) { + _this.m_localAnchorA = Vec2.clone(def.localAnchorA); + } else { + _this.m_localAnchorA = Vec2.zero(); + } + if (Vec2.isValid(anchor)) { + _this.m_localAnchorB = bodyB.getLocalPoint(anchor); + } else if (Vec2.isValid(def.localAnchorB)) { + _this.m_localAnchorB = Vec2.clone(def.localAnchorB); + } else { + _this.m_localAnchorB = Vec2.zero(); + } + if (Number.isFinite(def.referenceAngle)) { + _this.m_referenceAngle = def.referenceAngle; + } else { + _this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle(); + } + _this.m_impulse = new Vec3(); + _this.m_motorImpulse = 0; + _this.m_lowerAngle = (_a2 = def.lowerAngle) !== null && _a2 !== void 0 ? _a2 : DEFAULTS$8.lowerAngle; + _this.m_upperAngle = (_b = def.upperAngle) !== null && _b !== void 0 ? _b : DEFAULTS$8.upperAngle; + _this.m_maxMotorTorque = (_c = def.maxMotorTorque) !== null && _c !== void 0 ? _c : DEFAULTS$8.maxMotorTorque; + _this.m_motorSpeed = (_d = def.motorSpeed) !== null && _d !== void 0 ? _d : DEFAULTS$8.motorSpeed; + _this.m_enableLimit = (_e = def.enableLimit) !== null && _e !== void 0 ? _e : DEFAULTS$8.enableLimit; + _this.m_enableMotor = (_f = def.enableMotor) !== null && _f !== void 0 ? _f : DEFAULTS$8.enableMotor; + return _this; } - /** @internal */ - RevoluteJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - lowerAngle: this.m_lowerAngle, - upperAngle: this.m_upperAngle, - maxMotorTorque: this.m_maxMotorTorque, - motorSpeed: this.m_motorSpeed, - enableLimit: this.m_enableLimit, - enableMotor: this.m_enableMotor, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - referenceAngle: this.m_referenceAngle, - }; + RevoluteJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + lowerAngle: this.m_lowerAngle, + upperAngle: this.m_upperAngle, + maxMotorTorque: this.m_maxMotorTorque, + motorSpeed: this.m_motorSpeed, + enableLimit: this.m_enableLimit, + enableMotor: this.m_enableMotor, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + referenceAngle: this.m_referenceAngle + }; }; - /** @internal */ - RevoluteJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new RevoluteJoint(data); - return joint; - }; - /** @hidden */ - RevoluteJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (Number.isFinite(def.referenceAngle)) { - this.m_referenceAngle = def.referenceAngle; - } - if (def.enableLimit !== undefined) { - this.m_enableLimit = def.enableLimit; - } - if (Number.isFinite(def.lowerAngle)) { - this.m_lowerAngle = def.lowerAngle; - } - if (Number.isFinite(def.upperAngle)) { - this.m_upperAngle = def.upperAngle; - } - if (Number.isFinite(def.maxMotorTorque)) { - this.m_maxMotorTorque = def.maxMotorTorque; - } - if (Number.isFinite(def.motorSpeed)) { - this.m_motorSpeed = def.motorSpeed; - } - if (def.enableMotor !== undefined) { - this.m_enableMotor = def.enableMotor; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - RevoluteJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - RevoluteJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Get the reference angle. - */ - RevoluteJoint.prototype.getReferenceAngle = function () { - return this.m_referenceAngle; - }; - /** - * Get the current joint angle in radians. - */ - RevoluteJoint.prototype.getJointAngle = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle; - }; - /** - * Get the current joint angle speed in radians per second. - */ - RevoluteJoint.prototype.getJointSpeed = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - return bB.m_angularVelocity - bA.m_angularVelocity; - }; - /** - * Is the joint motor enabled? - */ - RevoluteJoint.prototype.isMotorEnabled = function () { - return this.m_enableMotor; - }; - /** - * Enable/disable the joint motor. - */ - RevoluteJoint.prototype.enableMotor = function (flag) { - if (flag == this.m_enableMotor) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableMotor = flag; - }; - /** - * Get the current motor torque given the inverse time step. Unit is N*m. - */ - RevoluteJoint.prototype.getMotorTorque = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - /** - * Set the motor speed in radians per second. - */ - RevoluteJoint.prototype.setMotorSpeed = function (speed) { - if (speed == this.m_motorSpeed) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_motorSpeed = speed; - }; - /** - * Get the motor speed in radians per second. - */ - RevoluteJoint.prototype.getMotorSpeed = function () { - return this.m_motorSpeed; - }; - /** - * Set the maximum motor torque, usually in N-m. - */ - RevoluteJoint.prototype.setMaxMotorTorque = function (torque) { - if (torque == this.m_maxMotorTorque) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_maxMotorTorque = torque; - }; - RevoluteJoint.prototype.getMaxMotorTorque = function () { - return this.m_maxMotorTorque; - }; - /** - * Is the joint limit enabled? - */ - RevoluteJoint.prototype.isLimitEnabled = function () { - return this.m_enableLimit; - }; - /** - * Enable/disable the joint limit. - */ - RevoluteJoint.prototype.enableLimit = function (flag) { - if (flag != this.m_enableLimit) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableLimit = flag; - this.m_impulse.z = 0.0; - } - }; - /** - * Get the lower joint limit in radians. - */ - RevoluteJoint.prototype.getLowerLimit = function () { - return this.m_lowerAngle; - }; - /** - * Get the upper joint limit in radians. - */ - RevoluteJoint.prototype.getUpperLimit = function () { - return this.m_upperAngle; - }; - /** - * Set the joint limits in radians. - */ - RevoluteJoint.prototype.setLimits = function (lower, upper) { - if (lower != this.m_lowerAngle || upper != this.m_upperAngle) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_impulse.z = 0.0; - this.m_lowerAngle = lower; - this.m_upperAngle = upper; - } - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - RevoluteJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - RevoluteJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force given the inverse time step. Unit is N. - */ - RevoluteJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); - }; - /** - * Get the reaction torque due to the joint limit given the inverse time step. - * Unit is N*m. - */ - RevoluteJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_impulse.z; - }; - RevoluteJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // [ 0 -1 0 1] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var fixedRotation = (iA + iB === 0.0); - 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; - this.m_mass.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; - this.m_mass.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; - this.m_mass.ex.y = this.m_mass.ey.x; - 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; - this.m_mass.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; - this.m_mass.ex.z = this.m_mass.ez.x; - this.m_mass.ey.z = this.m_mass.ez.y; - this.m_mass.ez.z = iA + iB; - this.m_motorMass = iA + iB; - if (this.m_motorMass > 0.0) { - this.m_motorMass = 1.0 / this.m_motorMass; - } - if (this.m_enableMotor == false || fixedRotation) { - this.m_motorImpulse = 0.0; - } - if (this.m_enableLimit && fixedRotation == false) { - var jointAngle = aB - aA - this.m_referenceAngle; - if (math_abs$5(this.m_upperAngle - this.m_lowerAngle) < 2.0 * SettingsInternal.angularSlop) { - this.m_limitState = LimitState$2.equalLimits; - } - else if (jointAngle <= this.m_lowerAngle) { - if (this.m_limitState != LimitState$2.atLowerLimit) { - this.m_impulse.z = 0.0; - } - this.m_limitState = LimitState$2.atLowerLimit; - } - else if (jointAngle >= this.m_upperAngle) { - if (this.m_limitState != LimitState$2.atUpperLimit) { - this.m_impulse.z = 0.0; - } - this.m_limitState = LimitState$2.atUpperLimit; - } - else { - this.m_limitState = LimitState$2.inactiveLimit; - this.m_impulse.z = 0.0; - } - } - else { - this.m_limitState = LimitState$2.inactiveLimit; - } - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_impulse.mul(step.dtRatio); - this.m_motorImpulse *= step.dtRatio; - var P = Vec2.neo(this.m_impulse.x, this.m_impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z); - } - else { - this.m_impulse.setZero(); - this.m_motorImpulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - RevoluteJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var fixedRotation = (iA + iB === 0.0); - // Solve motor constraint. - if (this.m_enableMotor && this.m_limitState != LimitState$2.equalLimits && fixedRotation == false) { - var Cdot = wB - wA - this.m_motorSpeed; - var impulse = -this.m_motorMass * Cdot; - var oldImpulse = this.m_motorImpulse; - var maxImpulse = step.dt * this.m_maxMotorTorque; - this.m_motorImpulse = clamp$1(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_motorImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve limit constraint. - if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { - var Cdot1 = Vec2.zero(); - Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var Cdot2 = wB - wA; - var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); - var impulse = Vec3.neg(this.m_mass.solve33(Cdot)); - if (this.m_limitState == LimitState$2.equalLimits) { - this.m_impulse.add(impulse); - } - else if (this.m_limitState == LimitState$2.atLowerLimit) { - var newImpulse = this.m_impulse.z + impulse.z; - if (newImpulse < 0.0) { - var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); - var reduced = this.m_mass.solve22(rhs); - impulse.x = reduced.x; - impulse.y = reduced.y; - impulse.z = -this.m_impulse.z; - this.m_impulse.x += reduced.x; - this.m_impulse.y += reduced.y; - this.m_impulse.z = 0.0; - } - else { - this.m_impulse.add(impulse); - } - } - else if (this.m_limitState == LimitState$2.atUpperLimit) { - var newImpulse = this.m_impulse.z + impulse.z; - if (newImpulse > 0.0) { - var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); - var reduced = this.m_mass.solve22(rhs); - impulse.x = reduced.x; - impulse.y = reduced.y; - impulse.z = -this.m_impulse.z; - this.m_impulse.x += reduced.x; - this.m_impulse.y += reduced.y; - this.m_impulse.z = 0.0; - } - else { - this.m_impulse.add(impulse); - } - } - var P = Vec2.neo(impulse.x, impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z); - } - else { - // Solve point-to-point constraint - var Cdot = Vec2.zero(); - Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var impulse = this.m_mass.solve22(Vec2.neg(Cdot)); - this.m_impulse.x += impulse.x; - this.m_impulse.y += impulse.y; - vA.subMul(mA, impulse); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); - vB.addMul(mB, impulse); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - RevoluteJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var angularError = 0.0; - var positionError = 0.0; - var fixedRotation = (this.m_invIA + this.m_invIB == 0.0); - // Solve angular limit constraint. - if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { - var angle = aB - aA - this.m_referenceAngle; - var limitImpulse = 0.0; - if (this.m_limitState == LimitState$2.equalLimits) { - // Prevent large angular corrections - var C = clamp$1(angle - this.m_lowerAngle, -SettingsInternal.maxAngularCorrection, SettingsInternal.maxAngularCorrection); - limitImpulse = -this.m_motorMass * C; - angularError = math_abs$5(C); - } - else if (this.m_limitState == LimitState$2.atLowerLimit) { - var C = angle - this.m_lowerAngle; - angularError = -C; - // Prevent large angular corrections and allow some slop. - C = clamp$1(C + SettingsInternal.angularSlop, -SettingsInternal.maxAngularCorrection, 0.0); - limitImpulse = -this.m_motorMass * C; - } - else if (this.m_limitState == LimitState$2.atUpperLimit) { - var C = angle - this.m_upperAngle; - angularError = C; - // Prevent large angular corrections and allow some slop. - C = clamp$1(C - SettingsInternal.angularSlop, 0.0, SettingsInternal.maxAngularCorrection); - limitImpulse = -this.m_motorMass * C; - } - aA -= this.m_invIA * limitImpulse; - aB += this.m_invIB * limitImpulse; - } - // Solve point-to-point constraint. - { - qA.setAngle(aA); - qB.setAngle(aB); - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var C = Vec2.zero(); - C.addCombine(1, cB, 1, rB); - C.subCombine(1, cA, 1, rA); - positionError = C.length(); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var K = new Mat22(); - K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y; - K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y; - K.ey.x = K.ex.y; - K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x; - var impulse = Vec2.neg(K.solve(C)); - cA.subMul(mA, impulse); - aA -= iA * Vec2.crossVec2Vec2(rA, impulse); - cB.addMul(mB, impulse); - aB += iB * Vec2.crossVec2Vec2(rB, impulse); - } - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; - }; - RevoluteJoint.TYPE = "revolute-joint"; - return RevoluteJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$4 = Math.abs; -/** @internal */ var math_max$1 = Math.max; -/** @internal */ var math_min$3 = Math.min; -/** @internal */ var LimitState$1; -(function (LimitState) { - LimitState[LimitState["inactiveLimit"] = 0] = "inactiveLimit"; - LimitState[LimitState["atLowerLimit"] = 1] = "atLowerLimit"; - LimitState[LimitState["atUpperLimit"] = 2] = "atUpperLimit"; - LimitState[LimitState["equalLimits"] = 3] = "equalLimits"; -})(LimitState$1 || (LimitState$1 = {})); -/** @internal */ var DEFAULTS$7 = { - enableLimit: false, - lowerTranslation: 0.0, - upperTranslation: 0.0, - enableMotor: false, - maxMotorForce: 0.0, - motorSpeed: 0.0 -}; -/** - * A prismatic joint. This joint provides one degree of freedom: translation - * along an axis fixed in bodyA. Relative rotation is prevented. You can use a - * joint limit to restrict the range of motion and a joint motor to drive the - * motion or to model joint friction. - */ -var PrismaticJoint = /** @class */ (function (_super) { - __extends$a(PrismaticJoint, _super); - function PrismaticJoint(def, bodyA, bodyB, anchor, axis) { - var _this = this; - // @ts-ignore - if (!(_this instanceof PrismaticJoint)) { - return new PrismaticJoint(def, bodyA, bodyB, anchor, axis); - } - def = options(def, DEFAULTS$7); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = PrismaticJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - _this.m_localXAxisA = Vec2.clone(axis ? bodyA.getLocalVector(axis) : def.localAxisA || Vec2.neo(1.0, 0.0)); - _this.m_localXAxisA.normalize(); - _this.m_localYAxisA = Vec2.crossNumVec2(1.0, _this.m_localXAxisA); - _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); - _this.m_impulse = new Vec3(); - _this.m_motorMass = 0.0; - _this.m_motorImpulse = 0.0; - _this.m_lowerTranslation = def.lowerTranslation; - _this.m_upperTranslation = def.upperTranslation; - _this.m_maxMotorForce = def.maxMotorForce; - _this.m_motorSpeed = def.motorSpeed; - _this.m_enableLimit = def.enableLimit; - _this.m_enableMotor = def.enableMotor; - _this.m_limitState = LimitState$1.inactiveLimit; - _this.m_axis = Vec2.zero(); - _this.m_perp = Vec2.zero(); - _this.m_K = new Mat33(); - return _this; - // Linear constraint (point-to-line) - // d = p2 - p1 = x2 + r2 - x1 - r1 - // C = dot(perp, d) - // Cdot = dot(d, cross(w1, perp)) + dot(perp, v2 + cross(w2, r2) - v1 - - // cross(w1, r1)) - // = -dot(perp, v1) - dot(cross(d + r1, perp), w1) + dot(perp, v2) + - // dot(cross(r2, perp), v2) - // J = [-perp, -cross(d + r1, perp), perp, cross(r2,perp)] - // - // Angular constraint - // C = a2 - a1 + a_initial - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // - // K = J * invM * JT - // - // J = [-a -s1 a s2] - // [0 -1 0 1] - // a = perp - // s1 = cross(d + r1, a) = cross(p2 - x1, a) - // s2 = cross(r2, a) = cross(p2 - x2, a) - // Motor/Limit linear constraint - // C = dot(ax1, d) - // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) + - // dot(cross(r2, ax1), v2) - // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)] - // Block Solver - // We develop a block solver that includes the joint limit. This makes the - // limit stiff (inelastic) even - // when the mass has poor distribution (leading to large torques about the - // joint anchor points). - // - // The Jacobian has 3 rows: - // J = [-uT -s1 uT s2] // linear - // [0 -1 0 1] // angular - // [-vT -a1 vT a2] // limit - // - // u = perp - // v = axis - // s1 = cross(d + r1, u), s2 = cross(r2, u) - // a1 = cross(d + r1, v), a2 = cross(r2, v) - // M * (v2 - v1) = JT * df - // J * v2 = bias - // - // v2 = v1 + invM * JT * df - // J * (v1 + invM * JT * df) = bias - // K * df = bias - J * v1 = -Cdot - // K = J * invM * JT - // Cdot = J * v1 - bias - // - // Now solve for f2. - // df = f2 - f1 - // K * (f2 - f1) = -Cdot - // f2 = invK * (-Cdot) + f1 - // - // Clamp accumulated limit impulse. - // lower: f2(3) = max(f2(3), 0) - // upper: f2(3) = min(f2(3), 0) - // - // Solve for correct f2(1:2) - // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:3) * f1 - // = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:2) * f1(1:2) + K(1:2,3) * f1(3) - // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3)) + - // K(1:2,1:2) * f1(1:2) - // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) + - // f1(1:2) - // - // Now compute impulse to be applied: - // df = f2 - f1 - } - /** @internal */ - PrismaticJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - lowerTranslation: this.m_lowerTranslation, - upperTranslation: this.m_upperTranslation, - maxMotorForce: this.m_maxMotorForce, - motorSpeed: this.m_motorSpeed, - enableLimit: this.m_enableLimit, - enableMotor: this.m_enableMotor, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - localAxisA: this.m_localXAxisA, - referenceAngle: this.m_referenceAngle, - }; + RevoluteJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new RevoluteJoint2(data); + return joint; }; - /** @internal */ - PrismaticJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - data.localAxisA = Vec2.clone(data.localAxisA); - var joint = new PrismaticJoint(data); - return joint; - }; - /** @hidden */ - PrismaticJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (def.localAxisA) { - this.m_localXAxisA.setVec2(def.localAxisA); - this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1.0, def.localAxisA)); - } - if (Number.isFinite(def.referenceAngle)) { - this.m_referenceAngle = def.referenceAngle; - } - if (typeof def.enableLimit !== "undefined") { - this.m_enableLimit = !!def.enableLimit; - } - if (Number.isFinite(def.lowerTranslation)) { - this.m_lowerTranslation = def.lowerTranslation; - } - if (Number.isFinite(def.upperTranslation)) { - this.m_upperTranslation = def.upperTranslation; - } - if (typeof def.enableMotor !== "undefined") { - this.m_enableMotor = !!def.enableMotor; - } - if (Number.isFinite(def.maxMotorForce)) { - this.m_maxMotorForce = def.maxMotorForce; - } - if (Number.isFinite(def.motorSpeed)) { - this.m_motorSpeed = def.motorSpeed; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - PrismaticJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - PrismaticJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * The local joint axis relative to bodyA. - */ - PrismaticJoint.prototype.getLocalAxisA = function () { - return this.m_localXAxisA; - }; - /** - * Get the reference angle. - */ - PrismaticJoint.prototype.getReferenceAngle = function () { - return this.m_referenceAngle; - }; - /** - * Get the current joint translation, usually in meters. - */ - PrismaticJoint.prototype.getJointTranslation = function () { - var pA = this.m_bodyA.getWorldPoint(this.m_localAnchorA); - var pB = this.m_bodyB.getWorldPoint(this.m_localAnchorB); - var d = Vec2.sub(pB, pA); - var axis = this.m_bodyA.getWorldVector(this.m_localXAxisA); - var translation = Vec2.dot(d, axis); - return translation; - }; - /** - * Get the current joint translation speed, usually in meters per second. - */ - PrismaticJoint.prototype.getJointSpeed = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - var rA = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter)); - var rB = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter)); - var p1 = Vec2.add(bA.m_sweep.c, rA); - var p2 = Vec2.add(bB.m_sweep.c, rB); - var d = Vec2.sub(p2, p1); - var axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA); - var vA = bA.m_linearVelocity; - var vB = bB.m_linearVelocity; - var wA = bA.m_angularVelocity; - var wB = bB.m_angularVelocity; - var speed = Vec2.dot(d, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB, wB, rB), Vec2.addCrossNumVec2(vA, wA, rA))); - return speed; - }; - /** - * Is the joint limit enabled? - */ - PrismaticJoint.prototype.isLimitEnabled = function () { - return this.m_enableLimit; - }; - /** - * Enable/disable the joint limit. - */ - PrismaticJoint.prototype.enableLimit = function (flag) { - if (flag != this.m_enableLimit) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableLimit = flag; - this.m_impulse.z = 0.0; - } - }; - /** - * Get the lower joint limit, usually in meters. - */ - PrismaticJoint.prototype.getLowerLimit = function () { - return this.m_lowerTranslation; - }; - /** - * Get the upper joint limit, usually in meters. - */ - PrismaticJoint.prototype.getUpperLimit = function () { - return this.m_upperTranslation; - }; - /** - * Set the joint limits, usually in meters. - */ - PrismaticJoint.prototype.setLimits = function (lower, upper) { - if (lower != this.m_lowerTranslation || upper != this.m_upperTranslation) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_lowerTranslation = lower; - this.m_upperTranslation = upper; - this.m_impulse.z = 0.0; - } - }; - /** - * Is the joint motor enabled? - */ - PrismaticJoint.prototype.isMotorEnabled = function () { - return this.m_enableMotor; - }; - /** - * Enable/disable the joint motor. - */ - PrismaticJoint.prototype.enableMotor = function (flag) { - if (flag == this.m_enableMotor) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableMotor = flag; + RevoluteJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (Number.isFinite(def.referenceAngle)) { + this.m_referenceAngle = def.referenceAngle; + } + if (def.enableLimit !== void 0) { + this.m_enableLimit = def.enableLimit; + } + if (Number.isFinite(def.lowerAngle)) { + this.m_lowerAngle = def.lowerAngle; + } + if (Number.isFinite(def.upperAngle)) { + this.m_upperAngle = def.upperAngle; + } + if (Number.isFinite(def.maxMotorTorque)) { + this.m_maxMotorTorque = def.maxMotorTorque; + } + if (Number.isFinite(def.motorSpeed)) { + this.m_motorSpeed = def.motorSpeed; + } + if (def.enableMotor !== void 0) { + this.m_enableMotor = def.enableMotor; + } }; - /** - * Set the motor speed, usually in meters per second. - */ - PrismaticJoint.prototype.setMotorSpeed = function (speed) { - if (speed == this.m_motorSpeed) - return; + RevoluteJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + RevoluteJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + RevoluteJoint2.prototype.getReferenceAngle = function() { + return this.m_referenceAngle; + }; + RevoluteJoint2.prototype.getJointAngle = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle; + }; + RevoluteJoint2.prototype.getJointSpeed = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + return bB.m_angularVelocity - bA.m_angularVelocity; + }; + RevoluteJoint2.prototype.isMotorEnabled = function() { + return this.m_enableMotor; + }; + RevoluteJoint2.prototype.enableMotor = function(flag) { + if (flag == this.m_enableMotor) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableMotor = flag; + }; + RevoluteJoint2.prototype.getMotorTorque = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + RevoluteJoint2.prototype.setMotorSpeed = function(speed) { + if (speed == this.m_motorSpeed) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_motorSpeed = speed; + }; + RevoluteJoint2.prototype.getMotorSpeed = function() { + return this.m_motorSpeed; + }; + RevoluteJoint2.prototype.setMaxMotorTorque = function(torque) { + if (torque == this.m_maxMotorTorque) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_maxMotorTorque = torque; + }; + RevoluteJoint2.prototype.getMaxMotorTorque = function() { + return this.m_maxMotorTorque; + }; + RevoluteJoint2.prototype.isLimitEnabled = function() { + return this.m_enableLimit; + }; + RevoluteJoint2.prototype.enableLimit = function(flag) { + if (flag != this.m_enableLimit) { this.m_bodyA.setAwake(true); this.m_bodyB.setAwake(true); - this.m_motorSpeed = speed; + this.m_enableLimit = flag; + this.m_impulse.z = 0; + } }; - /** - * Set the maximum motor force, usually in N. - */ - PrismaticJoint.prototype.setMaxMotorForce = function (force) { - if (force == this.m_maxMotorForce) - return; + RevoluteJoint2.prototype.getLowerLimit = function() { + return this.m_lowerAngle; + }; + RevoluteJoint2.prototype.getUpperLimit = function() { + return this.m_upperAngle; + }; + RevoluteJoint2.prototype.setLimits = function(lower, upper) { + if (lower != this.m_lowerAngle || upper != this.m_upperAngle) { this.m_bodyA.setAwake(true); this.m_bodyB.setAwake(true); - this.m_maxMotorForce = force; - }; - PrismaticJoint.prototype.getMaxMotorForce = function () { - return this.m_maxMotorForce; - }; - /** - * Get the motor speed, usually in meters per second. - */ - PrismaticJoint.prototype.getMotorSpeed = function () { - return this.m_motorSpeed; - }; - /** - * Get the current motor force given the inverse time step, usually in N. - */ - PrismaticJoint.prototype.getMotorForce = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - PrismaticJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - PrismaticJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - PrismaticJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - PrismaticJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_impulse.y; - }; - PrismaticJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective masses. - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.zero(); - d.addCombine(1, cB, 1, rB); - d.subCombine(1, cA, 1, rA); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Compute motor Jacobian and effective mass. - { - this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA); - this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_axis); - this.m_a2 = Vec2.crossVec2Vec2(rB, this.m_axis); - this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 - * this.m_a2; - if (this.m_motorMass > 0.0) { - this.m_motorMass = 1.0 / this.m_motorMass; - } - } - // Prismatic constraint. - { - this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA); - this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_perp); - this.m_s2 = Vec2.crossVec2Vec2(rB, this.m_perp); - Vec2.crossVec2Vec2(rA, this.m_perp); - var k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2; - var k12 = iA * this.m_s1 + iB * this.m_s2; - var k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2; - var k22 = iA + iB; - if (k22 == 0.0) { - // For bodies with fixed rotation. - k22 = 1.0; - } - var k23 = iA * this.m_a1 + iB * this.m_a2; - var k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2; - this.m_K.ex.set(k11, k12, k13); - this.m_K.ey.set(k12, k22, k23); - this.m_K.ez.set(k13, k23, k33); - } - // Compute motor and limit terms. - if (this.m_enableLimit) { - var jointTranslation = Vec2.dot(this.m_axis, d); - if (math_abs$4(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * SettingsInternal.linearSlop) { - this.m_limitState = LimitState$1.equalLimits; - } - else if (jointTranslation <= this.m_lowerTranslation) { - if (this.m_limitState != LimitState$1.atLowerLimit) { - this.m_limitState = LimitState$1.atLowerLimit; - this.m_impulse.z = 0.0; - } - } - else if (jointTranslation >= this.m_upperTranslation) { - if (this.m_limitState != LimitState$1.atUpperLimit) { - this.m_limitState = LimitState$1.atUpperLimit; - this.m_impulse.z = 0.0; - } - } - else { - this.m_limitState = LimitState$1.inactiveLimit; - this.m_impulse.z = 0.0; - } - } - else { - this.m_limitState = LimitState$1.inactiveLimit; - this.m_impulse.z = 0.0; - } - if (this.m_enableMotor == false) { - this.m_motorImpulse = 0.0; - } - if (step.warmStarting) { - // Account for variable time step. - this.m_impulse.mul(step.dtRatio); - this.m_motorImpulse *= step.dtRatio; - var P = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse - + this.m_impulse.z, this.m_axis); - var LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y - + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1; - var LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y - + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - else { - this.m_impulse.setZero(); - this.m_motorImpulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - PrismaticJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Solve linear motor constraint. - if (this.m_enableMotor && this.m_limitState != LimitState$1.equalLimits) { - var Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB, vA)) + this.m_a2 * wB - - this.m_a1 * wA; - var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot); - var oldImpulse = this.m_motorImpulse; - var maxImpulse = step.dt * this.m_maxMotorForce; - this.m_motorImpulse = clamp$1(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_motorImpulse - oldImpulse; - var P = Vec2.mulNumVec2(impulse, this.m_axis); - var LA = impulse * this.m_a1; - var LB = impulse * this.m_a2; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; + this.m_impulse.z = 0; + this.m_lowerAngle = lower; + this.m_upperAngle = upper; + } + }; + RevoluteJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + RevoluteJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + RevoluteJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); + }; + RevoluteJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_impulse.z; + }; + RevoluteJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var fixedRotation = iA + iB === 0; + 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; + this.m_mass.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; + this.m_mass.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; + this.m_mass.ex.y = this.m_mass.ey.x; + 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; + this.m_mass.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; + this.m_mass.ex.z = this.m_mass.ez.x; + this.m_mass.ey.z = this.m_mass.ez.y; + this.m_mass.ez.z = iA + iB; + this.m_motorMass = iA + iB; + if (this.m_motorMass > 0) { + this.m_motorMass = 1 / this.m_motorMass; + } + if (this.m_enableMotor == false || fixedRotation) { + this.m_motorImpulse = 0; + } + if (this.m_enableLimit && fixedRotation == false) { + var jointAngle = aB - aA - this.m_referenceAngle; + if (math_abs$5(this.m_upperAngle - this.m_lowerAngle) < 2 * SettingsInternal.angularSlop) { + this.m_limitState = LimitState$2.equalLimits; + } else if (jointAngle <= this.m_lowerAngle) { + if (this.m_limitState != LimitState$2.atLowerLimit) { + this.m_impulse.z = 0; + } + this.m_limitState = LimitState$2.atLowerLimit; + } else if (jointAngle >= this.m_upperAngle) { + if (this.m_limitState != LimitState$2.atUpperLimit) { + this.m_impulse.z = 0; + } + this.m_limitState = LimitState$2.atUpperLimit; + } else { + this.m_limitState = LimitState$2.inactiveLimit; + this.m_impulse.z = 0; } + } else { + this.m_limitState = LimitState$2.inactiveLimit; + } + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + this.m_motorImpulse *= step.dtRatio; + var P3 = Vec2.neo(this.m_impulse.x, this.m_impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_motorImpulse + this.m_impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_motorImpulse + this.m_impulse.z); + } else { + this.m_impulse.setZero(); + this.m_motorImpulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + RevoluteJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var fixedRotation = iA + iB === 0; + if (this.m_enableMotor && this.m_limitState != LimitState$2.equalLimits && fixedRotation == false) { + var Cdot = wB - wA - this.m_motorSpeed; + var impulse = -this.m_motorMass * Cdot; + var oldImpulse = this.m_motorImpulse; + var maxImpulse = step.dt * this.m_maxMotorTorque; + this.m_motorImpulse = clamp$1(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { var Cdot1 = Vec2.zero(); - Cdot1.x += Vec2.dot(this.m_perp, vB) + this.m_s2 * wB; - Cdot1.x -= Vec2.dot(this.m_perp, vA) + this.m_s1 * wA; - Cdot1.y = wB - wA; - if (this.m_enableLimit && this.m_limitState != LimitState$1.inactiveLimit) { - // Solve prismatic and limit constraint in block form. - var Cdot2 = 0; - Cdot2 += Vec2.dot(this.m_axis, vB) + this.m_a2 * wB; - Cdot2 -= Vec2.dot(this.m_axis, vA) + this.m_a1 * wA; - var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); - var f1 = Vec3.clone(this.m_impulse); - var df = this.m_K.solve33(Vec3.neg(Cdot)); - this.m_impulse.add(df); - if (this.m_limitState == LimitState$1.atLowerLimit) { - this.m_impulse.z = math_max$1(this.m_impulse.z, 0.0); - } - else if (this.m_limitState == LimitState$1.atUpperLimit) { - this.m_impulse.z = math_min$3(this.m_impulse.z, 0.0); - } - // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) + - // f1(1:2) - var b = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y)); - var f2r = Vec2.add(this.m_K.solve22(b), Vec2.neo(f1.x, f1.y)); - this.m_impulse.x = f2r.x; - this.m_impulse.y = f2r.y; - df = Vec3.sub(this.m_impulse, f1); - var P = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis); - var LA = df.x * this.m_s1 + df.y + df.z * this.m_a1; - var LB = df.x * this.m_s2 + df.y + df.z * this.m_a2; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - else { - // Limit is inactive, just solve the prismatic constraint in block form. - var df = this.m_K.solve22(Vec2.neg(Cdot1)); - this.m_impulse.x += df.x; - this.m_impulse.y += df.y; - var P = Vec2.mulNumVec2(df.x, this.m_perp); - var LA = df.x * this.m_s1 + df.y; - var LB = df.x * this.m_s2 + df.y; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - PrismaticJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Compute fresh Jacobians - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA)); - var axis = Rot.mulVec2(qA, this.m_localXAxisA); - var a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), axis); - var a2 = Vec2.crossVec2Vec2(rB, axis); - var perp = Rot.mulVec2(qA, this.m_localYAxisA); - var s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), perp); - var s2 = Vec2.crossVec2Vec2(rB, perp); - var impulse = new Vec3(); - var C1 = Vec2.zero(); - C1.x = Vec2.dot(perp, d); - C1.y = aB - aA - this.m_referenceAngle; - var linearError = math_abs$4(C1.x); - var angularError = math_abs$4(C1.y); - var linearSlop = SettingsInternal.linearSlop; - var maxLinearCorrection = SettingsInternal.maxLinearCorrection; - var active = false; // bool - var C2 = 0.0; - if (this.m_enableLimit) { - var translation = Vec2.dot(axis, d); - if (math_abs$4(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * linearSlop) { - // Prevent large angular corrections - C2 = clamp$1(translation, -maxLinearCorrection, maxLinearCorrection); - linearError = math_max$1(linearError, math_abs$4(translation)); - active = true; - } - else if (translation <= this.m_lowerTranslation) { - // Prevent large linear corrections and allow some slop. - C2 = clamp$1(translation - this.m_lowerTranslation + linearSlop, -maxLinearCorrection, 0.0); - linearError = Math - .max(linearError, this.m_lowerTranslation - translation); - active = true; - } - else if (translation >= this.m_upperTranslation) { - // Prevent large linear corrections and allow some slop. - C2 = clamp$1(translation - this.m_upperTranslation - linearSlop, 0.0, maxLinearCorrection); - linearError = Math - .max(linearError, translation - this.m_upperTranslation); - active = true; - } + Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var Cdot2 = wB - wA; + var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); + var impulse = Vec3.neg(this.m_mass.solve33(Cdot)); + if (this.m_limitState == LimitState$2.equalLimits) { + this.m_impulse.add(impulse); + } else if (this.m_limitState == LimitState$2.atLowerLimit) { + var newImpulse = this.m_impulse.z + impulse.z; + if (newImpulse < 0) { + var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); + var reduced = this.m_mass.solve22(rhs); + impulse.x = reduced.x; + impulse.y = reduced.y; + impulse.z = -this.m_impulse.z; + this.m_impulse.x += reduced.x; + this.m_impulse.y += reduced.y; + this.m_impulse.z = 0; + } else { + this.m_impulse.add(impulse); + } + } else if (this.m_limitState == LimitState$2.atUpperLimit) { + var newImpulse = this.m_impulse.z + impulse.z; + if (newImpulse > 0) { + var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); + var reduced = this.m_mass.solve22(rhs); + impulse.x = reduced.x; + impulse.y = reduced.y; + impulse.z = -this.m_impulse.z; + this.m_impulse.x += reduced.x; + this.m_impulse.y += reduced.y; + this.m_impulse.z = 0; + } else { + this.m_impulse.add(impulse); + } } - if (active) { - var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; - var k12 = iA * s1 + iB * s2; - var k13 = iA * s1 * a1 + iB * s2 * a2; - var k22 = iA + iB; - if (k22 == 0.0) { - // For fixed rotation - k22 = 1.0; - } - var k23 = iA * a1 + iB * a2; - var k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2; - var K = new Mat33(); - K.ex.set(k11, k12, k13); - K.ey.set(k12, k22, k23); - K.ez.set(k13, k23, k33); - var C = new Vec3(); - C.x = C1.x; - C.y = C1.y; - C.z = C2; - impulse = K.solve33(Vec3.neg(C)); - } - else { - var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; - var k12 = iA * s1 + iB * s2; - var k22 = iA + iB; - if (k22 == 0.0) { - k22 = 1.0; - } - var K = new Mat22(); - K.ex.setNum(k11, k12); - K.ey.setNum(k12, k22); - var impulse1 = K.solve(Vec2.neg(C1)); - impulse.x = impulse1.x; - impulse.y = impulse1.y; - impulse.z = 0.0; - } - var P = Vec2.combine(impulse.x, perp, impulse.z, axis); - var LA = impulse.x * s1 + impulse.y + impulse.z * a1; - var LB = impulse.x * s2 + impulse.y + impulse.z * a2; - cA.subMul(mA, P); - aA -= iA * LA; - cB.addMul(mB, P); - aB += iB * LB; - this.m_bodyA.c_position.c = cA; - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c = cB; - this.m_bodyB.c_position.a = aB; - return linearError <= SettingsInternal.linearSlop - && angularError <= SettingsInternal.angularSlop; - }; - PrismaticJoint.TYPE = "prismatic-joint"; - return PrismaticJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var DEFAULTS$6 = { - ratio: 1.0 -}; -/** - * A gear joint is used to connect two joints together. Either joint can be a - * revolute or prismatic joint. You specify a gear ratio to bind the motions - * together: coordinate1 + ratio * coordinate2 = constant - * - * The ratio can be negative or positive. If one joint is a revolute joint and - * the other joint is a prismatic joint, then the ratio will have units of - * length or units of 1/length. Warning: You have to manually destroy the gear - * joint if joint1 or joint2 is destroyed. - * - * This definition requires two existing revolute or prismatic joints (any - * combination will work). - */ -var GearJoint = /** @class */ (function (_super) { - __extends$a(GearJoint, _super); - function GearJoint(def, bodyA, bodyB, joint1, joint2, ratio) { - var _this = this; - // @ts-ignore - if (!(_this instanceof GearJoint)) { - return new GearJoint(def, bodyA, bodyB, joint1, joint2, ratio); - } - def = options(def, DEFAULTS$6); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = GearJoint.TYPE; - _this.m_joint1 = joint1 ? joint1 : def.joint1; - _this.m_joint2 = joint2 ? joint2 : def.joint2; - _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; - _this.m_type1 = _this.m_joint1.getType(); - _this.m_type2 = _this.m_joint2.getType(); - // joint1 connects body A to body C - // joint2 connects body B to body D - var coordinateA; - var coordinateB; - // TODO_ERIN there might be some problem with the joint edges in Joint. - _this.m_bodyC = _this.m_joint1.getBodyA(); - _this.m_bodyA = _this.m_joint1.getBodyB(); - // Get geometry of joint1 - var xfA = _this.m_bodyA.m_xf; - var aA = _this.m_bodyA.m_sweep.a; - var xfC = _this.m_bodyC.m_xf; - var aC = _this.m_bodyC.m_sweep.a; - if (_this.m_type1 === RevoluteJoint.TYPE) { - var revolute = _this.m_joint1; - _this.m_localAnchorC = revolute.m_localAnchorA; - _this.m_localAnchorA = revolute.m_localAnchorB; - _this.m_referenceAngleA = revolute.m_referenceAngle; - _this.m_localAxisC = Vec2.zero(); - coordinateA = aA - aC - _this.m_referenceAngleA; - } - else { - var prismatic = _this.m_joint1; - _this.m_localAnchorC = prismatic.m_localAnchorA; - _this.m_localAnchorA = prismatic.m_localAnchorB; - _this.m_referenceAngleA = prismatic.m_referenceAngle; - _this.m_localAxisC = prismatic.m_localXAxisA; - var pC = _this.m_localAnchorC; - var pA = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA.q, _this.m_localAnchorA), Vec2.sub(xfA.p, xfC.p))); - coordinateA = Vec2.dot(pA, _this.m_localAxisC) - Vec2.dot(pC, _this.m_localAxisC); - } - _this.m_bodyD = _this.m_joint2.getBodyA(); - _this.m_bodyB = _this.m_joint2.getBodyB(); - // Get geometry of joint2 - var xfB = _this.m_bodyB.m_xf; - var aB = _this.m_bodyB.m_sweep.a; - var xfD = _this.m_bodyD.m_xf; - var aD = _this.m_bodyD.m_sweep.a; - if (_this.m_type2 === RevoluteJoint.TYPE) { - var revolute = _this.m_joint2; - _this.m_localAnchorD = revolute.m_localAnchorA; - _this.m_localAnchorB = revolute.m_localAnchorB; - _this.m_referenceAngleB = revolute.m_referenceAngle; - _this.m_localAxisD = Vec2.zero(); - coordinateB = aB - aD - _this.m_referenceAngleB; - } - else { - var prismatic = _this.m_joint2; - _this.m_localAnchorD = prismatic.m_localAnchorA; - _this.m_localAnchorB = prismatic.m_localAnchorB; - _this.m_referenceAngleB = prismatic.m_referenceAngle; - _this.m_localAxisD = prismatic.m_localXAxisA; - var pD = _this.m_localAnchorD; - var pB = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB.q, _this.m_localAnchorB), Vec2.sub(xfB.p, xfD.p))); - coordinateB = Vec2.dot(pB, _this.m_localAxisD) - Vec2.dot(pD, _this.m_localAxisD); - } - _this.m_constant = coordinateA + _this.m_ratio * coordinateB; - _this.m_impulse = 0.0; - return _this; - // Gear Joint: - // C0 = (coordinate1 + ratio * coordinate2)_initial - // C = (coordinate1 + ratio * coordinate2) - C0 = 0 - // J = [J1 ratio * J2] - // K = J * invM * JT - // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T - // - // Revolute: - // coordinate = rotation - // Cdot = angularVelocity - // J = [0 0 1] - // K = J * invM * JT = invI - // - // Prismatic: - // coordinate = dot(p - pg, ug) - // Cdot = dot(v + cross(w, r), ug) - // J = [ug cross(r, ug)] - // K = J * invM * JT = invMass + invI * cross(r, ug)^2 - } - /** @internal */ - GearJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - joint1: this.m_joint1, - joint2: this.m_joint2, - ratio: this.m_ratio, - // _constant: this.m_constant, - }; - }; - /** @internal */ - GearJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - data.joint1 = restore(Joint, data.joint1, world); - data.joint2 = restore(Joint, data.joint2, world); - var joint = new GearJoint(data); - // if (data._constant) joint.m_constant = data._constant; - return joint; - }; - /** @hidden */ - GearJoint.prototype._reset = function (def) { - // todo: implement other fields - if (Number.isFinite(def.ratio)) { - this.m_ratio = def.ratio; - } - }; - /** - * Get the first joint. - */ - GearJoint.prototype.getJoint1 = function () { - return this.m_joint1; - }; - /** - * Get the second joint. - */ - GearJoint.prototype.getJoint2 = function () { - return this.m_joint2; - }; - /** - * Set the gear ratio. - */ - GearJoint.prototype.setRatio = function (ratio) { - this.m_ratio = ratio; - }; - /** - * Get the gear ratio. - */ - GearJoint.prototype.getRatio = function () { - return this.m_ratio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - GearJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - GearJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - GearJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - GearJoint.prototype.getReactionTorque = function (inv_dt) { - var L = this.m_impulse * this.m_JwA; - return inv_dt * L; - }; - GearJoint.prototype.initVelocityConstraints = function (step) { - this.m_lcA = this.m_bodyA.m_sweep.localCenter; - this.m_lcB = this.m_bodyB.m_sweep.localCenter; - this.m_lcC = this.m_bodyC.m_sweep.localCenter; - this.m_lcD = this.m_bodyD.m_sweep.localCenter; - this.m_mA = this.m_bodyA.m_invMass; - this.m_mB = this.m_bodyB.m_invMass; - this.m_mC = this.m_bodyC.m_invMass; - this.m_mD = this.m_bodyD.m_invMass; - this.m_iA = this.m_bodyA.m_invI; - this.m_iB = this.m_bodyB.m_invI; - this.m_iC = this.m_bodyC.m_invI; - this.m_iD = this.m_bodyD.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var aC = this.m_bodyC.c_position.a; - var vC = this.m_bodyC.c_velocity.v; - var wC = this.m_bodyC.c_velocity.w; - var aD = this.m_bodyD.c_position.a; - var vD = this.m_bodyD.c_velocity.v; - var wD = this.m_bodyD.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var qC = Rot.neo(aC); - var qD = Rot.neo(aD); - this.m_mass = 0.0; - if (this.m_type1 == RevoluteJoint.TYPE) { - this.m_JvAC = Vec2.zero(); - this.m_JwA = 1.0; - this.m_JwC = 1.0; - this.m_mass += this.m_iA + this.m_iC; - } - else { - var u = Rot.mulVec2(qC, this.m_localAxisC); - var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); - this.m_JvAC = u; - this.m_JwC = Vec2.crossVec2Vec2(rC, u); - this.m_JwA = Vec2.crossVec2Vec2(rA, u); - 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; - } - if (this.m_type2 == RevoluteJoint.TYPE) { - this.m_JvBD = Vec2.zero(); - this.m_JwB = this.m_ratio; - this.m_JwD = this.m_ratio; - this.m_mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); - } - else { - var u = Rot.mulVec2(qD, this.m_localAxisD); - var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); - this.m_JvBD = Vec2.mulNumVec2(this.m_ratio, u); - this.m_JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); - this.m_JwB = this.m_ratio * Vec2.crossVec2Vec2(rB, u); - 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; - } - // Compute effective mass. - this.m_mass = this.m_mass > 0.0 ? 1.0 / this.m_mass : 0.0; - if (step.warmStarting) { - vA.addMul(this.m_mA * this.m_impulse, this.m_JvAC); - wA += this.m_iA * this.m_impulse * this.m_JwA; - vB.addMul(this.m_mB * this.m_impulse, this.m_JvBD); - wB += this.m_iB * this.m_impulse * this.m_JwB; - vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC); - wC -= this.m_iC * this.m_impulse * this.m_JwC; - vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD); - wD -= this.m_iD * this.m_impulse * this.m_JwD; - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - this.m_bodyC.c_velocity.v.setVec2(vC); - this.m_bodyC.c_velocity.w = wC; - this.m_bodyD.c_velocity.v.setVec2(vD); - this.m_bodyD.c_velocity.w = wD; - }; - GearJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var vC = this.m_bodyC.c_velocity.v; - var wC = this.m_bodyC.c_velocity.w; - var vD = this.m_bodyD.c_velocity.v; - var wD = this.m_bodyD.c_velocity.w; - var Cdot = Vec2.dot(this.m_JvAC, vA) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB) - Vec2.dot(this.m_JvBD, vD); - Cdot += (this.m_JwA * wA - this.m_JwC * wC) + (this.m_JwB * wB - this.m_JwD * wD); - var impulse = -this.m_mass * Cdot; - this.m_impulse += impulse; - vA.addMul(this.m_mA * impulse, this.m_JvAC); - wA += this.m_iA * impulse * this.m_JwA; - vB.addMul(this.m_mB * impulse, this.m_JvBD); - wB += this.m_iB * impulse * this.m_JwB; - vC.subMul(this.m_mC * impulse, this.m_JvAC); - wC -= this.m_iC * impulse * this.m_JwC; - vD.subMul(this.m_mD * impulse, this.m_JvBD); - wD -= this.m_iD * impulse * this.m_JwD; - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - this.m_bodyC.c_velocity.v.setVec2(vC); - this.m_bodyC.c_velocity.w = wC; - this.m_bodyD.c_velocity.v.setVec2(vD); - this.m_bodyD.c_velocity.w = wD; - }; - /** - * This returns true if the position errors are within tolerance. - */ - GearJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var cC = this.m_bodyC.c_position.c; - var aC = this.m_bodyC.c_position.a; - var cD = this.m_bodyD.c_position.c; - var aD = this.m_bodyD.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var qC = Rot.neo(aC); - var qD = Rot.neo(aD); - var linearError = 0.0; - var coordinateA; - var coordinateB; - var JvAC; - var JvBD; - var JwA; - var JwB; - var JwC; - var JwD; - var mass = 0.0; - if (this.m_type1 == RevoluteJoint.TYPE) { - JvAC = Vec2.zero(); - JwA = 1.0; - JwC = 1.0; - mass += this.m_iA + this.m_iC; - coordinateA = aA - aC - this.m_referenceAngleA; - } - else { - var u = Rot.mulVec2(qC, this.m_localAxisC); - var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); - JvAC = u; - JwC = Vec2.crossVec2Vec2(rC, u); - JwA = Vec2.crossVec2Vec2(rA, u); - mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA; - var pC = Vec2.sub(this.m_localAnchorC, this.m_lcC); - var pA = Rot.mulTVec2(qC, Vec2.add(rA, Vec2.sub(cA, cC))); - coordinateA = Vec2.dot(Vec2.sub(pA, pC), this.m_localAxisC); - } - if (this.m_type2 == RevoluteJoint.TYPE) { - JvBD = Vec2.zero(); - JwB = this.m_ratio; - JwD = this.m_ratio; - mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); - coordinateB = aB - aD - this.m_referenceAngleB; - } - else { - var u = Rot.mulVec2(qD, this.m_localAxisD); - var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); - JvBD = Vec2.mulNumVec2(this.m_ratio, u); - JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); - JwB = this.m_ratio * Vec2.crossVec2Vec2(rB, u); - mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * JwD * JwD + this.m_iB * JwB * JwB; - var pD = Vec2.sub(this.m_localAnchorD, this.m_lcD); - var pB = Rot.mulTVec2(qD, Vec2.add(rB, Vec2.sub(cB, cD))); - coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD); - } - var C = (coordinateA + this.m_ratio * coordinateB) - this.m_constant; - var impulse = 0.0; - if (mass > 0.0) { - impulse = -C / mass; - } - cA.addMul(this.m_mA * impulse, JvAC); - aA += this.m_iA * impulse * JwA; - cB.addMul(this.m_mB * impulse, JvBD); - aB += this.m_iB * impulse * JwB; - cC.subMul(this.m_mC * impulse, JvAC); - aC -= this.m_iC * impulse * JwC; - cD.subMul(this.m_mD * impulse, JvBD); - aD -= this.m_iD * impulse * JwD; - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - this.m_bodyC.c_position.c.setVec2(cC); - this.m_bodyC.c_position.a = aC; - this.m_bodyD.c_position.c.setVec2(cD); - this.m_bodyD.c_position.a = aD; - // TODO_ERIN not implemented - return linearError < SettingsInternal.linearSlop; - }; - GearJoint.TYPE = "gear-joint"; - return GearJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var DEFAULTS$5 = { - maxForce: 1.0, - maxTorque: 1.0, - correctionFactor: 0.3 -}; -/** - * A motor joint is used to control the relative motion between two bodies. A - * typical usage is to control the movement of a dynamic body with respect to - * the ground. - */ -var MotorJoint = /** @class */ (function (_super) { - __extends$a(MotorJoint, _super); - function MotorJoint(def, bodyA, bodyB) { - var _this = this; - // @ts-ignore - if (!(_this instanceof MotorJoint)) { - return new MotorJoint(def, bodyA, bodyB); - } - def = options(def, DEFAULTS$5); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = MotorJoint.TYPE; - _this.m_linearOffset = Vec2.isValid(def.linearOffset) ? Vec2.clone(def.linearOffset) : bodyA.getLocalPoint(bodyB.getPosition()); - _this.m_angularOffset = Number.isFinite(def.angularOffset) ? def.angularOffset : bodyB.getAngle() - bodyA.getAngle(); - _this.m_linearImpulse = Vec2.zero(); - _this.m_angularImpulse = 0.0; - _this.m_maxForce = def.maxForce; - _this.m_maxTorque = def.maxTorque; - _this.m_correctionFactor = def.correctionFactor; - return _this; - // Point-to-point constraint - // Cdot = v2 - v1 - // = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // - // r1 = offset - c1 - // r2 = -c2 - // Angle constraint - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 - } - /** @internal */ - MotorJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - maxForce: this.m_maxForce, - maxTorque: this.m_maxTorque, - correctionFactor: this.m_correctionFactor, - linearOffset: this.m_linearOffset, - angularOffset: this.m_angularOffset, - }; - }; - /** @internal */ - MotorJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new MotorJoint(data); - return joint; - }; - /** @hidden */ - MotorJoint.prototype._reset = function (def) { - if (Number.isFinite(def.angularOffset)) { - this.m_angularOffset = def.angularOffset; - } - if (Number.isFinite(def.maxForce)) { - this.m_maxForce = def.maxForce; - } - if (Number.isFinite(def.maxTorque)) { - this.m_maxTorque = def.maxTorque; - } - if (Number.isFinite(def.correctionFactor)) { - this.m_correctionFactor = def.correctionFactor; - } - if (Vec2.isValid(def.linearOffset)) { - this.m_linearOffset.set(def.linearOffset); - } - }; - /** - * Set the maximum friction force in N. - */ - MotorJoint.prototype.setMaxForce = function (force) { - this.m_maxForce = force; - }; - /** - * Get the maximum friction force in N. - */ - MotorJoint.prototype.getMaxForce = function () { - return this.m_maxForce; - }; - /** - * Set the maximum friction torque in N*m. - */ - MotorJoint.prototype.setMaxTorque = function (torque) { - this.m_maxTorque = torque; - }; - /** - * Get the maximum friction torque in N*m. - */ - MotorJoint.prototype.getMaxTorque = function () { - return this.m_maxTorque; - }; - /** - * Set the position correction factor in the range [0,1]. - */ - MotorJoint.prototype.setCorrectionFactor = function (factor) { - this.m_correctionFactor = factor; - }; - /** - * Get the position correction factor in the range [0,1]. - */ - MotorJoint.prototype.getCorrectionFactor = function () { - return this.m_correctionFactor; - }; - /** - * Set/get the target linear offset, in frame A, in meters. - */ - MotorJoint.prototype.setLinearOffset = function (linearOffset) { - if (linearOffset.x != this.m_linearOffset.x || linearOffset.y != this.m_linearOffset.y) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_linearOffset.set(linearOffset); - } - }; - MotorJoint.prototype.getLinearOffset = function () { - return this.m_linearOffset; - }; - /** - * Set/get the target angular offset, in radians. - */ - MotorJoint.prototype.setAngularOffset = function (angularOffset) { - if (angularOffset != this.m_angularOffset) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_angularOffset = angularOffset; - } - }; - MotorJoint.prototype.getAngularOffset = function () { - return this.m_angularOffset; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - MotorJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getPosition(); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - MotorJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getPosition(); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - MotorJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - MotorJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_angularImpulse; - }; - MotorJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective mass matrix. - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_linearOffset, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.neg(this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Upper 2 by 2 of K for point to point - var K = new Mat22(); - K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y; - K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; - K.ey.x = K.ex.y; - K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x; - this.m_linearMass = K.getInverse(); - this.m_angularMass = iA + iB; - if (this.m_angularMass > 0.0) { - this.m_angularMass = 1.0 / this.m_angularMass; - } - this.m_linearError = Vec2.zero(); - this.m_linearError.addCombine(1, cB, 1, this.m_rB); - this.m_linearError.subCombine(1, cA, 1, this.m_rA); - this.m_angularError = aB - aA - this.m_angularOffset; - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_linearImpulse.mul(step.dtRatio); - this.m_angularImpulse *= step.dtRatio; - var P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse); - } - else { - this.m_linearImpulse.setZero(); - this.m_angularImpulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - MotorJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; + var P3 = Vec2.neo(impulse.x, impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + impulse.z); + } else { + var Cdot = Vec2.zero(); + Cdot.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var impulse = this.m_mass.solve22(Vec2.neg(Cdot)); + this.m_impulse.x += impulse.x; + this.m_impulse.y += impulse.y; + vA2.subMul(mA, impulse); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); + vB2.addMul(mB, impulse); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + RevoluteJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var angularError = 0; + var positionError = 0; + var fixedRotation = this.m_invIA + this.m_invIB == 0; + if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { + var angle = aB - aA - this.m_referenceAngle; + var limitImpulse = 0; + if (this.m_limitState == LimitState$2.equalLimits) { + var C = clamp$1(angle - this.m_lowerAngle, -SettingsInternal.maxAngularCorrection, SettingsInternal.maxAngularCorrection); + limitImpulse = -this.m_motorMass * C; + angularError = math_abs$5(C); + } else if (this.m_limitState == LimitState$2.atLowerLimit) { + var C = angle - this.m_lowerAngle; + angularError = -C; + C = clamp$1(C + SettingsInternal.angularSlop, -SettingsInternal.maxAngularCorrection, 0); + limitImpulse = -this.m_motorMass * C; + } else if (this.m_limitState == LimitState$2.atUpperLimit) { + var C = angle - this.m_upperAngle; + angularError = C; + C = clamp$1(C - SettingsInternal.angularSlop, 0, SettingsInternal.maxAngularCorrection); + limitImpulse = -this.m_motorMass * C; + } + aA -= this.m_invIA * limitImpulse; + aB += this.m_invIB * limitImpulse; + } + { + qA.setAngle(aA); + qB.setAngle(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var C = Vec2.zero(); + C.addCombine(1, cB2, 1, rB2); + C.subCombine(1, cA2, 1, rA2); + positionError = C.length(); var mA = this.m_invMassA; var mB = this.m_invMassB; var iA = this.m_invIA; var iB = this.m_invIB; - var h = step.dt; - var inv_h = step.inv_dt; - // Solve angular friction - { - var Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError; - var impulse = -this.m_angularMass * Cdot; - var oldImpulse = this.m_angularImpulse; - var maxImpulse = h * this.m_maxTorque; - this.m_angularImpulse = clamp$1(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_angularImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve linear friction - { - var Cdot = Vec2.zero(); - Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError); - var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); - var oldImpulse = Vec2.clone(this.m_linearImpulse); - this.m_linearImpulse.add(impulse); - var maxImpulse = h * this.m_maxForce; - this.m_linearImpulse.clamp(maxImpulse); - impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); - vA.subMul(mA, impulse); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); - vB.addMul(mB, impulse); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - MotorJoint.prototype.solvePositionConstraints = function (step) { - return true; - }; - MotorJoint.TYPE = "motor-joint"; - return MotorJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_PI$3 = Math.PI; -/** @internal */ var DEFAULTS$4 = { - maxForce: 0.0, - frequencyHz: 5.0, - dampingRatio: 0.7 + var K = new Mat22(); + K.ex.x = mA + mB + iA * rA2.y * rA2.y + iB * rB2.y * rB2.y; + K.ex.y = -iA * rA2.x * rA2.y - iB * rB2.x * rB2.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * rA2.x * rA2.x + iB * rB2.x * rB2.x; + var impulse = Vec2.neg(K.solve(C)); + cA2.subMul(mA, impulse); + aA -= iA * Vec2.crossVec2Vec2(rA2, impulse); + cB2.addMul(mB, impulse); + aB += iB * Vec2.crossVec2Vec2(rB2, impulse); + } + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; + }; + RevoluteJoint2.TYPE = "revolute-joint"; + return RevoluteJoint2; + }(Joint) +); +var math_abs$4 = Math.abs; +var math_max$1 = Math.max; +var math_min$3 = Math.min; +var LimitState$1; +(function(LimitState2) { + LimitState2[LimitState2["inactiveLimit"] = 0] = "inactiveLimit"; + LimitState2[LimitState2["atLowerLimit"] = 1] = "atLowerLimit"; + LimitState2[LimitState2["atUpperLimit"] = 2] = "atUpperLimit"; + LimitState2[LimitState2["equalLimits"] = 3] = "equalLimits"; +})(LimitState$1 || (LimitState$1 = {})); +var DEFAULTS$7 = { + enableLimit: false, + lowerTranslation: 0, + upperTranslation: 0, + enableMotor: false, + maxMotorForce: 0, + motorSpeed: 0 }; -/** - * A mouse joint is used to make a point on a body track a specified world - * point. This a soft constraint with a maximum force. This allows the - * constraint to stretch and without applying huge forces. - * - * You need to call setTarget(target) every time that mouse is - * moved, to track the new location of the mouse. - * - * NOTE: this joint is not documented in the manual because it was developed to - * be used in the testbed. If you want to learn how to use the mouse joint, look - * at the testbed. - */ -var MouseJoint = /** @class */ (function (_super) { - __extends$a(MouseJoint, _super); - function MouseJoint(def, bodyA, bodyB, target) { - var _this = this; - // @ts-ignore - if (!(_this instanceof MouseJoint)) { - return new MouseJoint(def, bodyA, bodyB, target); - } - def = options(def, DEFAULTS$4); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = MouseJoint.TYPE; - if (Vec2.isValid(target)) { - _this.m_targetA = Vec2.clone(target); - } - else if (Vec2.isValid(def.target)) { - _this.m_targetA = Vec2.clone(def.target); - } - else { - _this.m_targetA = Vec2.zero(); - } - _this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), _this.m_targetA); - _this.m_maxForce = def.maxForce; - _this.m_impulse = Vec2.zero(); - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_beta = 0.0; - _this.m_gamma = 0.0; - // Solver temp - _this.m_rB = Vec2.zero(); - _this.m_localCenterB = Vec2.zero(); - _this.m_invMassB = 0.0; - _this.m_invIB = 0.0; - _this.m_mass = new Mat22(); - _this.m_C = Vec2.zero(); - return _this; - // p = attached point, m = mouse point - // C = p - m - // Cdot = v - // = v + cross(w, r) - // J = [I r_skew] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) +var PrismaticJoint = ( + /** @class */ + function(_super) { + __extends$a(PrismaticJoint2, _super); + function PrismaticJoint2(def, bodyA, bodyB, anchor, axis) { + var _this = this; + if (!(_this instanceof PrismaticJoint2)) { + return new PrismaticJoint2(def, bodyA, bodyB, anchor, axis); + } + def = options(def, DEFAULTS$7); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = PrismaticJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + _this.m_localXAxisA = Vec2.clone(axis ? bodyA.getLocalVector(axis) : def.localAxisA || Vec2.neo(1, 0)); + _this.m_localXAxisA.normalize(); + _this.m_localYAxisA = Vec2.crossNumVec2(1, _this.m_localXAxisA); + _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); + _this.m_impulse = new Vec3(); + _this.m_motorMass = 0; + _this.m_motorImpulse = 0; + _this.m_lowerTranslation = def.lowerTranslation; + _this.m_upperTranslation = def.upperTranslation; + _this.m_maxMotorForce = def.maxMotorForce; + _this.m_motorSpeed = def.motorSpeed; + _this.m_enableLimit = def.enableLimit; + _this.m_enableMotor = def.enableMotor; + _this.m_limitState = LimitState$1.inactiveLimit; + _this.m_axis = Vec2.zero(); + _this.m_perp = Vec2.zero(); + _this.m_K = new Mat33(); + return _this; } - /** @internal */ - MouseJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - target: this.m_targetA, - maxForce: this.m_maxForce, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - _localAnchorB: this.m_localAnchorB, - }; + PrismaticJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + lowerTranslation: this.m_lowerTranslation, + upperTranslation: this.m_upperTranslation, + maxMotorForce: this.m_maxMotorForce, + motorSpeed: this.m_motorSpeed, + enableLimit: this.m_enableLimit, + enableMotor: this.m_enableMotor, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + localAxisA: this.m_localXAxisA, + referenceAngle: this.m_referenceAngle + }; }; - /** @internal */ - MouseJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - data.target = Vec2.clone(data.target); - var joint = new MouseJoint(data); - if (data._localAnchorB) { - joint.m_localAnchorB = data._localAnchorB; - } - return joint; + PrismaticJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + data.localAxisA = Vec2.clone(data.localAxisA); + var joint = new PrismaticJoint2(data); + return joint; + }; + PrismaticJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (def.localAxisA) { + this.m_localXAxisA.setVec2(def.localAxisA); + this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1, def.localAxisA)); + } + if (Number.isFinite(def.referenceAngle)) { + this.m_referenceAngle = def.referenceAngle; + } + if (typeof def.enableLimit !== "undefined") { + this.m_enableLimit = !!def.enableLimit; + } + if (Number.isFinite(def.lowerTranslation)) { + this.m_lowerTranslation = def.lowerTranslation; + } + if (Number.isFinite(def.upperTranslation)) { + this.m_upperTranslation = def.upperTranslation; + } + if (typeof def.enableMotor !== "undefined") { + this.m_enableMotor = !!def.enableMotor; + } + if (Number.isFinite(def.maxMotorForce)) { + this.m_maxMotorForce = def.maxMotorForce; + } + if (Number.isFinite(def.motorSpeed)) { + this.m_motorSpeed = def.motorSpeed; + } + }; + PrismaticJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + PrismaticJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + PrismaticJoint2.prototype.getLocalAxisA = function() { + return this.m_localXAxisA; + }; + PrismaticJoint2.prototype.getReferenceAngle = function() { + return this.m_referenceAngle; + }; + PrismaticJoint2.prototype.getJointTranslation = function() { + var pA2 = this.m_bodyA.getWorldPoint(this.m_localAnchorA); + var pB2 = this.m_bodyB.getWorldPoint(this.m_localAnchorB); + var d2 = Vec2.sub(pB2, pA2); + var axis = this.m_bodyA.getWorldVector(this.m_localXAxisA); + var translation2 = Vec2.dot(d2, axis); + return translation2; + }; + PrismaticJoint2.prototype.getJointSpeed = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + var rA2 = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter)); + var rB2 = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter)); + var p1 = Vec2.add(bA.m_sweep.c, rA2); + var p2 = Vec2.add(bB.m_sweep.c, rB2); + var d2 = Vec2.sub(p2, p1); + var axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA); + var vA2 = bA.m_linearVelocity; + var vB2 = bB.m_linearVelocity; + var wA = bA.m_angularVelocity; + var wB = bB.m_angularVelocity; + var speed = Vec2.dot(d2, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB2, wB, rB2), Vec2.addCrossNumVec2(vA2, wA, rA2))); + return speed; + }; + PrismaticJoint2.prototype.isLimitEnabled = function() { + return this.m_enableLimit; + }; + PrismaticJoint2.prototype.enableLimit = function(flag) { + if (flag != this.m_enableLimit) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableLimit = flag; + this.m_impulse.z = 0; + } }; - /** @hidden */ - MouseJoint.prototype._reset = function (def) { - if (Number.isFinite(def.maxForce)) { - this.m_maxForce = def.maxForce; - } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; + PrismaticJoint2.prototype.getLowerLimit = function() { + return this.m_lowerTranslation; + }; + PrismaticJoint2.prototype.getUpperLimit = function() { + return this.m_upperTranslation; + }; + PrismaticJoint2.prototype.setLimits = function(lower, upper) { + if (lower != this.m_lowerTranslation || upper != this.m_upperTranslation) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_lowerTranslation = lower; + this.m_upperTranslation = upper; + this.m_impulse.z = 0; + } + }; + PrismaticJoint2.prototype.isMotorEnabled = function() { + return this.m_enableMotor; + }; + PrismaticJoint2.prototype.enableMotor = function(flag) { + if (flag == this.m_enableMotor) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableMotor = flag; + }; + PrismaticJoint2.prototype.setMotorSpeed = function(speed) { + if (speed == this.m_motorSpeed) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_motorSpeed = speed; + }; + PrismaticJoint2.prototype.setMaxMotorForce = function(force) { + if (force == this.m_maxMotorForce) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_maxMotorForce = force; + }; + PrismaticJoint2.prototype.getMaxMotorForce = function() { + return this.m_maxMotorForce; + }; + PrismaticJoint2.prototype.getMotorSpeed = function() { + return this.m_motorSpeed; + }; + PrismaticJoint2.prototype.getMotorForce = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + PrismaticJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + PrismaticJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + PrismaticJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis).mul(inv_dt); + }; + PrismaticJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_impulse.y; + }; + PrismaticJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.zero(); + d2.addCombine(1, cB2, 1, rB2); + d2.subCombine(1, cA2, 1, rA2); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + { + this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA); + this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_axis); + this.m_a2 = Vec2.crossVec2Vec2(rB2, this.m_axis); + this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2; + if (this.m_motorMass > 0) { + this.m_motorMass = 1 / this.m_motorMass; + } + } + { + this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA); + this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_perp); + this.m_s2 = Vec2.crossVec2Vec2(rB2, this.m_perp); + Vec2.crossVec2Vec2(rA2, this.m_perp); + var k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2; + var k12 = iA * this.m_s1 + iB * this.m_s2; + var k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2; + var k22 = iA + iB; + if (k22 == 0) { + k22 = 1; + } + var k23 = iA * this.m_a1 + iB * this.m_a2; + var k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2; + this.m_K.ex.set(k11, k12, k13); + this.m_K.ey.set(k12, k22, k23); + this.m_K.ez.set(k13, k23, k33); + } + if (this.m_enableLimit) { + var jointTranslation = Vec2.dot(this.m_axis, d2); + if (math_abs$4(this.m_upperTranslation - this.m_lowerTranslation) < 2 * SettingsInternal.linearSlop) { + this.m_limitState = LimitState$1.equalLimits; + } else if (jointTranslation <= this.m_lowerTranslation) { + if (this.m_limitState != LimitState$1.atLowerLimit) { + this.m_limitState = LimitState$1.atLowerLimit; + this.m_impulse.z = 0; + } + } else if (jointTranslation >= this.m_upperTranslation) { + if (this.m_limitState != LimitState$1.atUpperLimit) { + this.m_limitState = LimitState$1.atUpperLimit; + this.m_impulse.z = 0; + } + } else { + this.m_limitState = LimitState$1.inactiveLimit; + this.m_impulse.z = 0; } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; + } else { + this.m_limitState = LimitState$1.inactiveLimit; + this.m_impulse.z = 0; + } + if (this.m_enableMotor == false) { + this.m_motorImpulse = 0; + } + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + this.m_motorImpulse *= step.dtRatio; + var P3 = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis); + var LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1; + var LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } else { + this.m_impulse.setZero(); + this.m_motorImpulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + PrismaticJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + if (this.m_enableMotor && this.m_limitState != LimitState$1.equalLimits) { + var Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB2, vA2)) + this.m_a2 * wB - this.m_a1 * wA; + var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot); + var oldImpulse = this.m_motorImpulse; + var maxImpulse = step.dt * this.m_maxMotorForce; + this.m_motorImpulse = clamp$1(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_axis); + var LA = impulse * this.m_a1; + var LB = impulse * this.m_a2; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + var Cdot1 = Vec2.zero(); + Cdot1.x += Vec2.dot(this.m_perp, vB2) + this.m_s2 * wB; + Cdot1.x -= Vec2.dot(this.m_perp, vA2) + this.m_s1 * wA; + Cdot1.y = wB - wA; + if (this.m_enableLimit && this.m_limitState != LimitState$1.inactiveLimit) { + var Cdot2 = 0; + Cdot2 += Vec2.dot(this.m_axis, vB2) + this.m_a2 * wB; + Cdot2 -= Vec2.dot(this.m_axis, vA2) + this.m_a1 * wA; + var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); + var f1 = Vec3.clone(this.m_impulse); + var df = this.m_K.solve33(Vec3.neg(Cdot)); + this.m_impulse.add(df); + if (this.m_limitState == LimitState$1.atLowerLimit) { + this.m_impulse.z = math_max$1(this.m_impulse.z, 0); + } else if (this.m_limitState == LimitState$1.atUpperLimit) { + this.m_impulse.z = math_min$3(this.m_impulse.z, 0); + } + var b2 = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y)); + var f2r = Vec2.add(this.m_K.solve22(b2), Vec2.neo(f1.x, f1.y)); + this.m_impulse.x = f2r.x; + this.m_impulse.y = f2r.y; + df = Vec3.sub(this.m_impulse, f1); + var P3 = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis); + var LA = df.x * this.m_s1 + df.y + df.z * this.m_a1; + var LB = df.x * this.m_s2 + df.y + df.z * this.m_a2; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } else { + var df = this.m_K.solve22(Vec2.neg(Cdot1)); + this.m_impulse.x += df.x; + this.m_impulse.y += df.y; + var P3 = Vec2.mulNumVec2(df.x, this.m_perp); + var LA = df.x * this.m_s1 + df.y; + var LB = df.x * this.m_s2 + df.y; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + PrismaticJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.sub(Vec2.add(cB2, rB2), Vec2.add(cA2, rA2)); + var axis = Rot.mulVec2(qA, this.m_localXAxisA); + var a1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), axis); + var a2 = Vec2.crossVec2Vec2(rB2, axis); + var perp2 = Rot.mulVec2(qA, this.m_localYAxisA); + var s1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), perp2); + var s2 = Vec2.crossVec2Vec2(rB2, perp2); + var impulse = new Vec3(); + var C1 = Vec2.zero(); + C1.x = Vec2.dot(perp2, d2); + C1.y = aB - aA - this.m_referenceAngle; + var linearError = math_abs$4(C1.x); + var angularError = math_abs$4(C1.y); + var linearSlop = SettingsInternal.linearSlop; + var maxLinearCorrection = SettingsInternal.maxLinearCorrection; + var active = false; + var C2 = 0; + if (this.m_enableLimit) { + var translation2 = Vec2.dot(axis, d2); + if (math_abs$4(this.m_upperTranslation - this.m_lowerTranslation) < 2 * linearSlop) { + C2 = clamp$1(translation2, -maxLinearCorrection, maxLinearCorrection); + linearError = math_max$1(linearError, math_abs$4(translation2)); + active = true; + } else if (translation2 <= this.m_lowerTranslation) { + C2 = clamp$1(translation2 - this.m_lowerTranslation + linearSlop, -maxLinearCorrection, 0); + linearError = Math.max(linearError, this.m_lowerTranslation - translation2); + active = true; + } else if (translation2 >= this.m_upperTranslation) { + C2 = clamp$1(translation2 - this.m_upperTranslation - linearSlop, 0, maxLinearCorrection); + linearError = Math.max(linearError, translation2 - this.m_upperTranslation); + active = true; + } + } + if (active) { + var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; + var k12 = iA * s1 + iB * s2; + var k13 = iA * s1 * a1 + iB * s2 * a2; + var k22 = iA + iB; + if (k22 == 0) { + k22 = 1; + } + var k23 = iA * a1 + iB * a2; + var k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2; + var K = new Mat33(); + K.ex.set(k11, k12, k13); + K.ey.set(k12, k22, k23); + K.ez.set(k13, k23, k33); + var C = new Vec3(); + C.x = C1.x; + C.y = C1.y; + C.z = C2; + impulse = K.solve33(Vec3.neg(C)); + } else { + var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; + var k12 = iA * s1 + iB * s2; + var k22 = iA + iB; + if (k22 == 0) { + k22 = 1; } + var K = new Mat22(); + K.ex.setNum(k11, k12); + K.ey.setNum(k12, k22); + var impulse1 = K.solve(Vec2.neg(C1)); + impulse.x = impulse1.x; + impulse.y = impulse1.y; + impulse.z = 0; + } + var P3 = Vec2.combine(impulse.x, perp2, impulse.z, axis); + var LA = impulse.x * s1 + impulse.y + impulse.z * a1; + var LB = impulse.x * s2 + impulse.y + impulse.z * a2; + cA2.subMul(mA, P3); + aA -= iA * LA; + cB2.addMul(mB, P3); + aB += iB * LB; + this.m_bodyA.c_position.c = cA2; + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c = cB2; + this.m_bodyB.c_position.a = aB; + return linearError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; + }; + PrismaticJoint2.TYPE = "prismatic-joint"; + return PrismaticJoint2; + }(Joint) +); +var DEFAULTS$6 = { + ratio: 1 +}; +var GearJoint = ( + /** @class */ + function(_super) { + __extends$a(GearJoint2, _super); + function GearJoint2(def, bodyA, bodyB, joint1, joint2, ratio) { + var _this = this; + if (!(_this instanceof GearJoint2)) { + return new GearJoint2(def, bodyA, bodyB, joint1, joint2, ratio); + } + def = options(def, DEFAULTS$6); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = GearJoint2.TYPE; + _this.m_joint1 = joint1 ? joint1 : def.joint1; + _this.m_joint2 = joint2 ? joint2 : def.joint2; + _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; + _this.m_type1 = _this.m_joint1.getType(); + _this.m_type2 = _this.m_joint2.getType(); + var coordinateA; + var coordinateB; + _this.m_bodyC = _this.m_joint1.getBodyA(); + _this.m_bodyA = _this.m_joint1.getBodyB(); + var xfA2 = _this.m_bodyA.m_xf; + var aA = _this.m_bodyA.m_sweep.a; + var xfC = _this.m_bodyC.m_xf; + var aC = _this.m_bodyC.m_sweep.a; + if (_this.m_type1 === RevoluteJoint.TYPE) { + var revolute = _this.m_joint1; + _this.m_localAnchorC = revolute.m_localAnchorA; + _this.m_localAnchorA = revolute.m_localAnchorB; + _this.m_referenceAngleA = revolute.m_referenceAngle; + _this.m_localAxisC = Vec2.zero(); + coordinateA = aA - aC - _this.m_referenceAngleA; + } else { + var prismatic = _this.m_joint1; + _this.m_localAnchorC = prismatic.m_localAnchorA; + _this.m_localAnchorA = prismatic.m_localAnchorB; + _this.m_referenceAngleA = prismatic.m_referenceAngle; + _this.m_localAxisC = prismatic.m_localXAxisA; + var pC = _this.m_localAnchorC; + var pA2 = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA2.q, _this.m_localAnchorA), Vec2.sub(xfA2.p, xfC.p))); + coordinateA = Vec2.dot(pA2, _this.m_localAxisC) - Vec2.dot(pC, _this.m_localAxisC); + } + _this.m_bodyD = _this.m_joint2.getBodyA(); + _this.m_bodyB = _this.m_joint2.getBodyB(); + var xfB2 = _this.m_bodyB.m_xf; + var aB = _this.m_bodyB.m_sweep.a; + var xfD = _this.m_bodyD.m_xf; + var aD = _this.m_bodyD.m_sweep.a; + if (_this.m_type2 === RevoluteJoint.TYPE) { + var revolute = _this.m_joint2; + _this.m_localAnchorD = revolute.m_localAnchorA; + _this.m_localAnchorB = revolute.m_localAnchorB; + _this.m_referenceAngleB = revolute.m_referenceAngle; + _this.m_localAxisD = Vec2.zero(); + coordinateB = aB - aD - _this.m_referenceAngleB; + } else { + var prismatic = _this.m_joint2; + _this.m_localAnchorD = prismatic.m_localAnchorA; + _this.m_localAnchorB = prismatic.m_localAnchorB; + _this.m_referenceAngleB = prismatic.m_referenceAngle; + _this.m_localAxisD = prismatic.m_localXAxisA; + var pD = _this.m_localAnchorD; + var pB2 = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB2.q, _this.m_localAnchorB), Vec2.sub(xfB2.p, xfD.p))); + coordinateB = Vec2.dot(pB2, _this.m_localAxisD) - Vec2.dot(pD, _this.m_localAxisD); + } + _this.m_constant = coordinateA + _this.m_ratio * coordinateB; + _this.m_impulse = 0; + return _this; + } + GearJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + joint1: this.m_joint1, + joint2: this.m_joint2, + ratio: this.m_ratio + // _constant: this.m_constant, + }; }; - /** - * Use this to update the target point. - */ - MouseJoint.prototype.setTarget = function (target) { - if (Vec2.areEqual(target, this.m_targetA)) - return; + GearJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + data.joint1 = restore(Joint, data.joint1, world); + data.joint2 = restore(Joint, data.joint2, world); + var joint = new GearJoint2(data); + return joint; + }; + GearJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.ratio)) { + this.m_ratio = def.ratio; + } + }; + GearJoint2.prototype.getJoint1 = function() { + return this.m_joint1; + }; + GearJoint2.prototype.getJoint2 = function() { + return this.m_joint2; + }; + GearJoint2.prototype.setRatio = function(ratio) { + this.m_ratio = ratio; + }; + GearJoint2.prototype.getRatio = function() { + return this.m_ratio; + }; + GearJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + GearJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + GearJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt); + }; + GearJoint2.prototype.getReactionTorque = function(inv_dt) { + var L = this.m_impulse * this.m_JwA; + return inv_dt * L; + }; + GearJoint2.prototype.initVelocityConstraints = function(step) { + this.m_lcA = this.m_bodyA.m_sweep.localCenter; + this.m_lcB = this.m_bodyB.m_sweep.localCenter; + this.m_lcC = this.m_bodyC.m_sweep.localCenter; + this.m_lcD = this.m_bodyD.m_sweep.localCenter; + this.m_mA = this.m_bodyA.m_invMass; + this.m_mB = this.m_bodyB.m_invMass; + this.m_mC = this.m_bodyC.m_invMass; + this.m_mD = this.m_bodyD.m_invMass; + this.m_iA = this.m_bodyA.m_invI; + this.m_iB = this.m_bodyB.m_invI; + this.m_iC = this.m_bodyC.m_invI; + this.m_iD = this.m_bodyD.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var aC = this.m_bodyC.c_position.a; + var vC = this.m_bodyC.c_velocity.v; + var wC = this.m_bodyC.c_velocity.w; + var aD = this.m_bodyD.c_position.a; + var vD = this.m_bodyD.c_velocity.v; + var wD = this.m_bodyD.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var qC = Rot.neo(aC); + var qD = Rot.neo(aD); + this.m_mass = 0; + if (this.m_type1 == RevoluteJoint.TYPE) { + this.m_JvAC = Vec2.zero(); + this.m_JwA = 1; + this.m_JwC = 1; + this.m_mass += this.m_iA + this.m_iC; + } else { + var u = Rot.mulVec2(qC, this.m_localAxisC); + var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); + this.m_JvAC = u; + this.m_JwC = Vec2.crossVec2Vec2(rC, u); + this.m_JwA = Vec2.crossVec2Vec2(rA2, u); + 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; + } + if (this.m_type2 == RevoluteJoint.TYPE) { + this.m_JvBD = Vec2.zero(); + this.m_JwB = this.m_ratio; + this.m_JwD = this.m_ratio; + this.m_mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); + } else { + var u = Rot.mulVec2(qD, this.m_localAxisD); + var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); + this.m_JvBD = Vec2.mulNumVec2(this.m_ratio, u); + this.m_JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); + this.m_JwB = this.m_ratio * Vec2.crossVec2Vec2(rB2, u); + 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; + } + this.m_mass = this.m_mass > 0 ? 1 / this.m_mass : 0; + if (step.warmStarting) { + vA2.addMul(this.m_mA * this.m_impulse, this.m_JvAC); + wA += this.m_iA * this.m_impulse * this.m_JwA; + vB2.addMul(this.m_mB * this.m_impulse, this.m_JvBD); + wB += this.m_iB * this.m_impulse * this.m_JwB; + vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC); + wC -= this.m_iC * this.m_impulse * this.m_JwC; + vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD); + wD -= this.m_iD * this.m_impulse * this.m_JwD; + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + this.m_bodyC.c_velocity.v.setVec2(vC); + this.m_bodyC.c_velocity.w = wC; + this.m_bodyD.c_velocity.v.setVec2(vD); + this.m_bodyD.c_velocity.w = wD; + }; + GearJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vC = this.m_bodyC.c_velocity.v; + var wC = this.m_bodyC.c_velocity.w; + var vD = this.m_bodyD.c_velocity.v; + var wD = this.m_bodyD.c_velocity.w; + 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); + Cdot += this.m_JwA * wA - this.m_JwC * wC + (this.m_JwB * wB - this.m_JwD * wD); + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + vA2.addMul(this.m_mA * impulse, this.m_JvAC); + wA += this.m_iA * impulse * this.m_JwA; + vB2.addMul(this.m_mB * impulse, this.m_JvBD); + wB += this.m_iB * impulse * this.m_JwB; + vC.subMul(this.m_mC * impulse, this.m_JvAC); + wC -= this.m_iC * impulse * this.m_JwC; + vD.subMul(this.m_mD * impulse, this.m_JvBD); + wD -= this.m_iD * impulse * this.m_JwD; + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + this.m_bodyC.c_velocity.v.setVec2(vC); + this.m_bodyC.c_velocity.w = wC; + this.m_bodyD.c_velocity.v.setVec2(vD); + this.m_bodyD.c_velocity.w = wD; + }; + GearJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var cC = this.m_bodyC.c_position.c; + var aC = this.m_bodyC.c_position.a; + var cD = this.m_bodyD.c_position.c; + var aD = this.m_bodyD.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var qC = Rot.neo(aC); + var qD = Rot.neo(aD); + var linearError = 0; + var coordinateA; + var coordinateB; + var JvAC; + var JvBD; + var JwA; + var JwB; + var JwC; + var JwD; + var mass = 0; + if (this.m_type1 == RevoluteJoint.TYPE) { + JvAC = Vec2.zero(); + JwA = 1; + JwC = 1; + mass += this.m_iA + this.m_iC; + coordinateA = aA - aC - this.m_referenceAngleA; + } else { + var u = Rot.mulVec2(qC, this.m_localAxisC); + var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); + JvAC = u; + JwC = Vec2.crossVec2Vec2(rC, u); + JwA = Vec2.crossVec2Vec2(rA2, u); + mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA; + var pC = Vec2.sub(this.m_localAnchorC, this.m_lcC); + var pA2 = Rot.mulTVec2(qC, Vec2.add(rA2, Vec2.sub(cA2, cC))); + coordinateA = Vec2.dot(Vec2.sub(pA2, pC), this.m_localAxisC); + } + if (this.m_type2 == RevoluteJoint.TYPE) { + JvBD = Vec2.zero(); + JwB = this.m_ratio; + JwD = this.m_ratio; + mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); + coordinateB = aB - aD - this.m_referenceAngleB; + } else { + var u = Rot.mulVec2(qD, this.m_localAxisD); + var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); + JvBD = Vec2.mulNumVec2(this.m_ratio, u); + JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); + JwB = this.m_ratio * Vec2.crossVec2Vec2(rB2, u); + mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * JwD * JwD + this.m_iB * JwB * JwB; + var pD = Vec2.sub(this.m_localAnchorD, this.m_lcD); + var pB2 = Rot.mulTVec2(qD, Vec2.add(rB2, Vec2.sub(cB2, cD))); + coordinateB = Vec2.dot(pB2, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD); + } + var C = coordinateA + this.m_ratio * coordinateB - this.m_constant; + var impulse = 0; + if (mass > 0) { + impulse = -C / mass; + } + cA2.addMul(this.m_mA * impulse, JvAC); + aA += this.m_iA * impulse * JwA; + cB2.addMul(this.m_mB * impulse, JvBD); + aB += this.m_iB * impulse * JwB; + cC.subMul(this.m_mC * impulse, JvAC); + aC -= this.m_iC * impulse * JwC; + cD.subMul(this.m_mD * impulse, JvBD); + aD -= this.m_iD * impulse * JwD; + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + this.m_bodyC.c_position.c.setVec2(cC); + this.m_bodyC.c_position.a = aC; + this.m_bodyD.c_position.c.setVec2(cD); + this.m_bodyD.c_position.a = aD; + return linearError < SettingsInternal.linearSlop; + }; + GearJoint2.TYPE = "gear-joint"; + return GearJoint2; + }(Joint) +); +var DEFAULTS$5 = { + maxForce: 1, + maxTorque: 1, + correctionFactor: 0.3 +}; +var MotorJoint = ( + /** @class */ + function(_super) { + __extends$a(MotorJoint2, _super); + function MotorJoint2(def, bodyA, bodyB) { + var _this = this; + if (!(_this instanceof MotorJoint2)) { + return new MotorJoint2(def, bodyA, bodyB); + } + def = options(def, DEFAULTS$5); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = MotorJoint2.TYPE; + _this.m_linearOffset = Vec2.isValid(def.linearOffset) ? Vec2.clone(def.linearOffset) : bodyA.getLocalPoint(bodyB.getPosition()); + _this.m_angularOffset = Number.isFinite(def.angularOffset) ? def.angularOffset : bodyB.getAngle() - bodyA.getAngle(); + _this.m_linearImpulse = Vec2.zero(); + _this.m_angularImpulse = 0; + _this.m_maxForce = def.maxForce; + _this.m_maxTorque = def.maxTorque; + _this.m_correctionFactor = def.correctionFactor; + return _this; + } + MotorJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + maxForce: this.m_maxForce, + maxTorque: this.m_maxTorque, + correctionFactor: this.m_correctionFactor, + linearOffset: this.m_linearOffset, + angularOffset: this.m_angularOffset + }; + }; + MotorJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new MotorJoint2(data); + return joint; + }; + MotorJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.angularOffset)) { + this.m_angularOffset = def.angularOffset; + } + if (Number.isFinite(def.maxForce)) { + this.m_maxForce = def.maxForce; + } + if (Number.isFinite(def.maxTorque)) { + this.m_maxTorque = def.maxTorque; + } + if (Number.isFinite(def.correctionFactor)) { + this.m_correctionFactor = def.correctionFactor; + } + if (Vec2.isValid(def.linearOffset)) { + this.m_linearOffset.set(def.linearOffset); + } + }; + MotorJoint2.prototype.setMaxForce = function(force) { + this.m_maxForce = force; + }; + MotorJoint2.prototype.getMaxForce = function() { + return this.m_maxForce; + }; + MotorJoint2.prototype.setMaxTorque = function(torque) { + this.m_maxTorque = torque; + }; + MotorJoint2.prototype.getMaxTorque = function() { + return this.m_maxTorque; + }; + MotorJoint2.prototype.setCorrectionFactor = function(factor) { + this.m_correctionFactor = factor; + }; + MotorJoint2.prototype.getCorrectionFactor = function() { + return this.m_correctionFactor; + }; + MotorJoint2.prototype.setLinearOffset = function(linearOffset) { + if (linearOffset.x != this.m_linearOffset.x || linearOffset.y != this.m_linearOffset.y) { + this.m_bodyA.setAwake(true); this.m_bodyB.setAwake(true); - this.m_targetA.set(target); - }; - MouseJoint.prototype.getTarget = function () { - return this.m_targetA; - }; - /** - * Set the maximum force in Newtons. - */ - MouseJoint.prototype.setMaxForce = function (force) { - this.m_maxForce = force; - }; - /** - * Get the maximum force in Newtons. - */ - MouseJoint.prototype.getMaxForce = function () { - return this.m_maxForce; - }; - /** - * Set the frequency in Hertz. - */ - MouseJoint.prototype.setFrequency = function (hz) { - this.m_frequencyHz = hz; - }; - /** - * Get the frequency in Hertz. - */ - MouseJoint.prototype.getFrequency = function () { - return this.m_frequencyHz; - }; - /** - * Set the damping ratio (dimensionless). - */ - MouseJoint.prototype.setDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - /** - * Get the damping ratio (dimensionless). - */ - MouseJoint.prototype.getDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - MouseJoint.prototype.getAnchorA = function () { - return Vec2.clone(this.m_targetA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - MouseJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - MouseJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(inv_dt, this.m_impulse); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - MouseJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * 0.0; - }; - /** - * Shift the origin for any points stored in world coordinates. - */ - MouseJoint.prototype.shiftOrigin = function (newOrigin) { - this.m_targetA.sub(newOrigin); - }; - MouseJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIB = this.m_bodyB.m_invI; - var position = this.m_bodyB.c_position; - var velocity = this.m_bodyB.c_velocity; - var cB = position.c; - var aB = position.a; - var vB = velocity.v; - var wB = velocity.w; - var qB = Rot.neo(aB); - var mass = this.m_bodyB.getMass(); - // Frequency - var omega = 2.0 * math_PI$3 * this.m_frequencyHz; - // Damping coefficient - var d = 2.0 * mass * this.m_dampingRatio * omega; - // Spring stiffness - var k = mass * (omega * omega); - // magic formulas - // gamma has units of inverse mass. - // beta has units of inverse time. - var h = step.dt; - this.m_gamma = h * (d + h * k); - if (this.m_gamma != 0.0) { - this.m_gamma = 1.0 / this.m_gamma; - } - this.m_beta = h * k * this.m_gamma; - // Compute the effective mass matrix. - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) * - // invI2 * skew(r2)] - // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y - // -r1.x*r1.y] - // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x] - var K = new Mat22(); - K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y - + this.m_gamma; - K.ex.y = -this.m_invIB * this.m_rB.x * this.m_rB.y; - K.ey.x = K.ex.y; - K.ey.y = this.m_invMassB + this.m_invIB * this.m_rB.x * this.m_rB.x - + this.m_gamma; - this.m_mass = K.getInverse(); - this.m_C.setVec2(cB); - this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA); - this.m_C.mul(this.m_beta); - // Cheat with some damping - wB *= 0.98; - if (step.warmStarting) { - this.m_impulse.mul(step.dtRatio); - vB.addMul(this.m_invMassB, this.m_impulse); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse); - } - else { - this.m_impulse.setZero(); - } - velocity.v.setVec2(vB); - velocity.w = wB; - }; - MouseJoint.prototype.solveVelocityConstraints = function (step) { - var velocity = this.m_bodyB.c_velocity; - var vB = Vec2.clone(velocity.v); - var wB = velocity.w; - // Cdot = v + cross(w, r) - var Cdot = Vec2.crossNumVec2(wB, this.m_rB); - Cdot.add(vB); - Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse); - Cdot.neg(); - var impulse = Mat22.mulVec2(this.m_mass, Cdot); - var oldImpulse = Vec2.clone(this.m_impulse); - this.m_impulse.add(impulse); - var maxImpulse = step.dt * this.m_maxForce; - this.m_impulse.clamp(maxImpulse); - impulse = Vec2.sub(this.m_impulse, oldImpulse); - vB.addMul(this.m_invMassB, impulse); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse); - velocity.v.setVec2(vB); - velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - MouseJoint.prototype.solvePositionConstraints = function (step) { - return true; + this.m_linearOffset.set(linearOffset); + } }; - MouseJoint.TYPE = "mouse-joint"; - return MouseJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$3 = Math.abs; -/** @internal */ var DEFAULTS$3 = { - collideConnected: true + MotorJoint2.prototype.getLinearOffset = function() { + return this.m_linearOffset; + }; + MotorJoint2.prototype.setAngularOffset = function(angularOffset) { + if (angularOffset != this.m_angularOffset) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_angularOffset = angularOffset; + } + }; + MotorJoint2.prototype.getAngularOffset = function() { + return this.m_angularOffset; + }; + MotorJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getPosition(); + }; + MotorJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getPosition(); + }; + MotorJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); + }; + MotorJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_angularImpulse; + }; + MotorJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_linearOffset, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.neg(this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var K = new Mat22(); + K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y; + K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x; + this.m_linearMass = K.getInverse(); + this.m_angularMass = iA + iB; + if (this.m_angularMass > 0) { + this.m_angularMass = 1 / this.m_angularMass; + } + this.m_linearError = Vec2.zero(); + this.m_linearError.addCombine(1, cB2, 1, this.m_rB); + this.m_linearError.subCombine(1, cA2, 1, this.m_rA); + this.m_angularError = aB - aA - this.m_angularOffset; + if (step.warmStarting) { + this.m_linearImpulse.mul(step.dtRatio); + this.m_angularImpulse *= step.dtRatio; + var P3 = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_angularImpulse); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_angularImpulse); + } else { + this.m_linearImpulse.setZero(); + this.m_angularImpulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + MotorJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var h = step.dt; + var inv_h = step.inv_dt; + { + var Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError; + var impulse = -this.m_angularMass * Cdot; + var oldImpulse = this.m_angularImpulse; + var maxImpulse = h * this.m_maxTorque; + this.m_angularImpulse = clamp$1(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_angularImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + { + var Cdot = Vec2.zero(); + Cdot.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError); + var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); + var oldImpulse = Vec2.clone(this.m_linearImpulse); + this.m_linearImpulse.add(impulse); + var maxImpulse = h * this.m_maxForce; + this.m_linearImpulse.clamp(maxImpulse); + impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); + vA2.subMul(mA, impulse); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); + vB2.addMul(mB, impulse); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + MotorJoint2.prototype.solvePositionConstraints = function(step) { + return true; + }; + MotorJoint2.TYPE = "motor-joint"; + return MotorJoint2; + }(Joint) +); +var math_PI$3 = Math.PI; +var DEFAULTS$4 = { + maxForce: 0, + frequencyHz: 5, + dampingRatio: 0.7 }; -/** - * The pulley joint is connected to two bodies and two fixed ground points. The - * pulley supports a ratio such that: length1 + ratio * length2 <= constant - * - * Yes, the force transmitted is scaled by the ratio. - * - * Warning: the pulley joint can get a bit squirrelly by itself. They often work - * better when combined with prismatic joints. You should also cover the the - * anchor points with static shapes to prevent one side from going to zero - * length. - */ -var PulleyJoint = /** @class */ (function (_super) { - __extends$a(PulleyJoint, _super); - function PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio) { - var _this = this; - // @ts-ignore - if (!(_this instanceof PulleyJoint)) { - return new PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio); - } - def = options(def, DEFAULTS$3); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = PulleyJoint.TYPE; - _this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1.0, 1.0)); - _this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1.0, 1.0)); - _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1.0, 0.0)); - _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1.0, 0.0)); - _this.m_lengthA = Number.isFinite(def.lengthA) ? def.lengthA : Vec2.distance(anchorA, groundA); - _this.m_lengthB = Number.isFinite(def.lengthB) ? def.lengthB : Vec2.distance(anchorB, groundB); - _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; - _this.m_constant = _this.m_lengthA + _this.m_ratio * _this.m_lengthB; - _this.m_impulse = 0.0; - return _this; - // Pulley: - // length1 = norm(p1 - s1) - // length2 = norm(p2 - s2) - // C0 = (length1 + ratio * length2)_initial - // C = C0 - (length1 + ratio * length2) - // u1 = (p1 - s1) / norm(p1 - s1) - // u2 = (p2 - s2) / norm(p2 - s2) - // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2)) - // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)] - // K = J * invM * JT - // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 * - // cross(r2, u2)^2) +var MouseJoint = ( + /** @class */ + function(_super) { + __extends$a(MouseJoint2, _super); + function MouseJoint2(def, bodyA, bodyB, target) { + var _this = this; + if (!(_this instanceof MouseJoint2)) { + return new MouseJoint2(def, bodyA, bodyB, target); + } + def = options(def, DEFAULTS$4); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = MouseJoint2.TYPE; + if (Vec2.isValid(target)) { + _this.m_targetA = Vec2.clone(target); + } else if (Vec2.isValid(def.target)) { + _this.m_targetA = Vec2.clone(def.target); + } else { + _this.m_targetA = Vec2.zero(); + } + _this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), _this.m_targetA); + _this.m_maxForce = def.maxForce; + _this.m_impulse = Vec2.zero(); + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_beta = 0; + _this.m_gamma = 0; + _this.m_rB = Vec2.zero(); + _this.m_localCenterB = Vec2.zero(); + _this.m_invMassB = 0; + _this.m_invIB = 0; + _this.m_mass = new Mat22(); + _this.m_C = Vec2.zero(); + return _this; } - /** @internal */ - PulleyJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - groundAnchorA: this.m_groundAnchorA, - groundAnchorB: this.m_groundAnchorB, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - lengthA: this.m_lengthA, - lengthB: this.m_lengthB, - ratio: this.m_ratio, - }; + MouseJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + target: this.m_targetA, + maxForce: this.m_maxForce, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + _localAnchorB: this.m_localAnchorB + }; }; - /** @internal */ - PulleyJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new PulleyJoint(data); - return joint; - }; - /** @hidden */ - PulleyJoint.prototype._reset = function (def) { - if (Vec2.isValid(def.groundAnchorA)) { - this.m_groundAnchorA.set(def.groundAnchorA); - } - if (Vec2.isValid(def.groundAnchorB)) { - this.m_groundAnchorB.set(def.groundAnchorB); - } - if (Vec2.isValid(def.localAnchorA)) { - this.m_localAnchorA.set(def.localAnchorA); - } - else if (Vec2.isValid(def.anchorA)) { - this.m_localAnchorA.set(this.m_bodyA.getLocalPoint(def.anchorA)); - } - if (Vec2.isValid(def.localAnchorB)) { - this.m_localAnchorB.set(def.localAnchorB); - } - else if (Vec2.isValid(def.anchorB)) { - this.m_localAnchorB.set(this.m_bodyB.getLocalPoint(def.anchorB)); - } - if (Number.isFinite(def.lengthA)) { - this.m_lengthA = def.lengthA; - } - if (Number.isFinite(def.lengthB)) { - this.m_lengthB = def.lengthB; - } - if (Number.isFinite(def.ratio)) { - this.m_ratio = def.ratio; - } - }; - /** - * Get the first ground anchor. - */ - PulleyJoint.prototype.getGroundAnchorA = function () { - return this.m_groundAnchorA; - }; - /** - * Get the second ground anchor. - */ - PulleyJoint.prototype.getGroundAnchorB = function () { - return this.m_groundAnchorB; - }; - /** - * Get the current length of the segment attached to bodyA. - */ - PulleyJoint.prototype.getLengthA = function () { - return this.m_lengthA; - }; - /** - * Get the current length of the segment attached to bodyB. - */ - PulleyJoint.prototype.getLengthB = function () { - return this.m_lengthB; - }; - /** - * Get the pulley ratio. - */ - PulleyJoint.prototype.getRatio = function () { - return this.m_ratio; - }; - /** - * Get the current length of the segment attached to bodyA. - */ - PulleyJoint.prototype.getCurrentLengthA = function () { - var p = this.m_bodyA.getWorldPoint(this.m_localAnchorA); - var s = this.m_groundAnchorA; - return Vec2.distance(p, s); - }; - /** - * Get the current length of the segment attached to bodyB. - */ - PulleyJoint.prototype.getCurrentLengthB = function () { - var p = this.m_bodyB.getWorldPoint(this.m_localAnchorB); - var s = this.m_groundAnchorB; - return Vec2.distance(p, s); - }; - /** - * Shift the origin for any points stored in world coordinates. - * - * @param newOrigin - */ - PulleyJoint.prototype.shiftOrigin = function (newOrigin) { - this.m_groundAnchorA.sub(newOrigin); - this.m_groundAnchorB.sub(newOrigin); - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - PulleyJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - PulleyJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - PulleyJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - PulleyJoint.prototype.getReactionTorque = function (inv_dt) { - return 0.0; - }; - PulleyJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // Get the pulley axes. - this.m_uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA); - this.m_uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB); - var lengthA = this.m_uA.length(); - var lengthB = this.m_uB.length(); - if (lengthA > 10.0 * SettingsInternal.linearSlop) { - this.m_uA.mul(1.0 / lengthA); - } - else { - this.m_uA.setZero(); - } - if (lengthB > 10.0 * SettingsInternal.linearSlop) { - this.m_uB.mul(1.0 / lengthB); - } - else { - this.m_uB.setZero(); - } - // Compute effective mass. - var ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA); - var ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB); - var mA = this.m_invMassA + this.m_invIA * ruA * ruA; - var mB = this.m_invMassB + this.m_invIB * ruB * ruB; - this.m_mass = mA + this.m_ratio * this.m_ratio * mB; - if (this.m_mass > 0.0) { - this.m_mass = 1.0 / this.m_mass; - } - if (step.warmStarting) { - // Scale impulses to support variable time steps. - this.m_impulse *= step.dtRatio; - // Warm starting. - var PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA); - var PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB); - vA.addMul(this.m_invMassA, PA); - wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); - vB.addMul(this.m_invMassB, PB); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - PulleyJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA)); - var vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)); - var Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB); - var impulse = -this.m_mass * Cdot; - this.m_impulse += impulse; - var PA = Vec2.mulNumVec2(-impulse, this.m_uA); - var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB); - vA.addMul(this.m_invMassA, PA); + MouseJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + data.target = Vec2.clone(data.target); + var joint = new MouseJoint2(data); + if (data._localAnchorB) { + joint.m_localAnchorB = data._localAnchorB; + } + return joint; + }; + MouseJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.maxForce)) { + this.m_maxForce = def.maxForce; + } + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; + } + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; + } + }; + MouseJoint2.prototype.setTarget = function(target) { + if (Vec2.areEqual(target, this.m_targetA)) + return; + this.m_bodyB.setAwake(true); + this.m_targetA.set(target); + }; + MouseJoint2.prototype.getTarget = function() { + return this.m_targetA; + }; + MouseJoint2.prototype.setMaxForce = function(force) { + this.m_maxForce = force; + }; + MouseJoint2.prototype.getMaxForce = function() { + return this.m_maxForce; + }; + MouseJoint2.prototype.setFrequency = function(hz) { + this.m_frequencyHz = hz; + }; + MouseJoint2.prototype.getFrequency = function() { + return this.m_frequencyHz; + }; + MouseJoint2.prototype.setDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + MouseJoint2.prototype.getDampingRatio = function() { + return this.m_dampingRatio; + }; + MouseJoint2.prototype.getAnchorA = function() { + return Vec2.clone(this.m_targetA); + }; + MouseJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + MouseJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(inv_dt, this.m_impulse); + }; + MouseJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * 0; + }; + MouseJoint2.prototype.shiftOrigin = function(newOrigin) { + this.m_targetA.sub(newOrigin); + }; + MouseJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIB = this.m_bodyB.m_invI; + var position = this.m_bodyB.c_position; + var velocity = this.m_bodyB.c_velocity; + var cB2 = position.c; + var aB = position.a; + var vB2 = velocity.v; + var wB = velocity.w; + var qB = Rot.neo(aB); + var mass = this.m_bodyB.getMass(); + var omega = 2 * math_PI$3 * this.m_frequencyHz; + var d2 = 2 * mass * this.m_dampingRatio * omega; + var k = mass * (omega * omega); + var h = step.dt; + this.m_gamma = h * (d2 + h * k); + if (this.m_gamma != 0) { + this.m_gamma = 1 / this.m_gamma; + } + this.m_beta = h * k * this.m_gamma; + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var K = new Mat22(); + K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y + this.m_gamma; + K.ex.y = -this.m_invIB * this.m_rB.x * this.m_rB.y; + K.ey.x = K.ex.y; + K.ey.y = this.m_invMassB + this.m_invIB * this.m_rB.x * this.m_rB.x + this.m_gamma; + this.m_mass = K.getInverse(); + this.m_C.setVec2(cB2); + this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA); + this.m_C.mul(this.m_beta); + wB *= 0.98; + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + vB2.addMul(this.m_invMassB, this.m_impulse); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse); + } else { + this.m_impulse.setZero(); + } + velocity.v.setVec2(vB2); + velocity.w = wB; + }; + MouseJoint2.prototype.solveVelocityConstraints = function(step) { + var velocity = this.m_bodyB.c_velocity; + var vB2 = Vec2.clone(velocity.v); + var wB = velocity.w; + var Cdot = Vec2.crossNumVec2(wB, this.m_rB); + Cdot.add(vB2); + Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse); + Cdot.neg(); + var impulse = Mat22.mulVec2(this.m_mass, Cdot); + var oldImpulse = Vec2.clone(this.m_impulse); + this.m_impulse.add(impulse); + var maxImpulse = step.dt * this.m_maxForce; + this.m_impulse.clamp(maxImpulse); + impulse = Vec2.sub(this.m_impulse, oldImpulse); + vB2.addMul(this.m_invMassB, impulse); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse); + velocity.v.setVec2(vB2); + velocity.w = wB; + }; + MouseJoint2.prototype.solvePositionConstraints = function(step) { + return true; + }; + MouseJoint2.TYPE = "mouse-joint"; + return MouseJoint2; + }(Joint) +); +var math_abs$3 = Math.abs; +var DEFAULTS$3 = { + collideConnected: true +}; +var PulleyJoint = ( + /** @class */ + function(_super) { + __extends$a(PulleyJoint2, _super); + function PulleyJoint2(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio) { + var _this = this; + if (!(_this instanceof PulleyJoint2)) { + return new PulleyJoint2(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio); + } + def = options(def, DEFAULTS$3); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = PulleyJoint2.TYPE; + _this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1, 1)); + _this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1, 1)); + _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1, 0)); + _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1, 0)); + _this.m_lengthA = Number.isFinite(def.lengthA) ? def.lengthA : Vec2.distance(anchorA, groundA); + _this.m_lengthB = Number.isFinite(def.lengthB) ? def.lengthB : Vec2.distance(anchorB, groundB); + _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; + _this.m_constant = _this.m_lengthA + _this.m_ratio * _this.m_lengthB; + _this.m_impulse = 0; + return _this; + } + PulleyJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + groundAnchorA: this.m_groundAnchorA, + groundAnchorB: this.m_groundAnchorB, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + lengthA: this.m_lengthA, + lengthB: this.m_lengthB, + ratio: this.m_ratio + }; + }; + PulleyJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new PulleyJoint2(data); + return joint; + }; + PulleyJoint2.prototype._reset = function(def) { + if (Vec2.isValid(def.groundAnchorA)) { + this.m_groundAnchorA.set(def.groundAnchorA); + } + if (Vec2.isValid(def.groundAnchorB)) { + this.m_groundAnchorB.set(def.groundAnchorB); + } + if (Vec2.isValid(def.localAnchorA)) { + this.m_localAnchorA.set(def.localAnchorA); + } else if (Vec2.isValid(def.anchorA)) { + this.m_localAnchorA.set(this.m_bodyA.getLocalPoint(def.anchorA)); + } + if (Vec2.isValid(def.localAnchorB)) { + this.m_localAnchorB.set(def.localAnchorB); + } else if (Vec2.isValid(def.anchorB)) { + this.m_localAnchorB.set(this.m_bodyB.getLocalPoint(def.anchorB)); + } + if (Number.isFinite(def.lengthA)) { + this.m_lengthA = def.lengthA; + } + if (Number.isFinite(def.lengthB)) { + this.m_lengthB = def.lengthB; + } + if (Number.isFinite(def.ratio)) { + this.m_ratio = def.ratio; + } + }; + PulleyJoint2.prototype.getGroundAnchorA = function() { + return this.m_groundAnchorA; + }; + PulleyJoint2.prototype.getGroundAnchorB = function() { + return this.m_groundAnchorB; + }; + PulleyJoint2.prototype.getLengthA = function() { + return this.m_lengthA; + }; + PulleyJoint2.prototype.getLengthB = function() { + return this.m_lengthB; + }; + PulleyJoint2.prototype.getRatio = function() { + return this.m_ratio; + }; + PulleyJoint2.prototype.getCurrentLengthA = function() { + var p = this.m_bodyA.getWorldPoint(this.m_localAnchorA); + var s2 = this.m_groundAnchorA; + return Vec2.distance(p, s2); + }; + PulleyJoint2.prototype.getCurrentLengthB = function() { + var p = this.m_bodyB.getWorldPoint(this.m_localAnchorB); + var s2 = this.m_groundAnchorB; + return Vec2.distance(p, s2); + }; + PulleyJoint2.prototype.shiftOrigin = function(newOrigin) { + this.m_groundAnchorA.sub(newOrigin); + this.m_groundAnchorB.sub(newOrigin); + }; + PulleyJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + PulleyJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + PulleyJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt); + }; + PulleyJoint2.prototype.getReactionTorque = function(inv_dt) { + return 0; + }; + PulleyJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + this.m_uA = Vec2.sub(Vec2.add(cA2, this.m_rA), this.m_groundAnchorA); + this.m_uB = Vec2.sub(Vec2.add(cB2, this.m_rB), this.m_groundAnchorB); + var lengthA = this.m_uA.length(); + var lengthB = this.m_uB.length(); + if (lengthA > 10 * SettingsInternal.linearSlop) { + this.m_uA.mul(1 / lengthA); + } else { + this.m_uA.setZero(); + } + if (lengthB > 10 * SettingsInternal.linearSlop) { + this.m_uB.mul(1 / lengthB); + } else { + this.m_uB.setZero(); + } + var ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA); + var ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB); + var mA = this.m_invMassA + this.m_invIA * ruA * ruA; + var mB = this.m_invMassB + this.m_invIB * ruB * ruB; + this.m_mass = mA + this.m_ratio * this.m_ratio * mB; + if (this.m_mass > 0) { + this.m_mass = 1 / this.m_mass; + } + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + var PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA); + var PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB); + vA2.addMul(this.m_invMassA, PA); wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); - vB.addMul(this.m_invMassB, PB); + vB2.addMul(this.m_invMassB, PB); wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - PulleyJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // Get the pulley axes. - var uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA); - var uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB); - var lengthA = uA.length(); - var lengthB = uB.length(); - if (lengthA > 10.0 * SettingsInternal.linearSlop) { - uA.mul(1.0 / lengthA); - } - else { - uA.setZero(); - } - if (lengthB > 10.0 * SettingsInternal.linearSlop) { - uB.mul(1.0 / lengthB); - } - else { - uB.setZero(); - } - // Compute effective mass. - var ruA = Vec2.crossVec2Vec2(rA, uA); - var ruB = Vec2.crossVec2Vec2(rB, uB); - var mA = this.m_invMassA + this.m_invIA * ruA * ruA; - var mB = this.m_invMassB + this.m_invIB * ruB * ruB; - var mass = mA + this.m_ratio * this.m_ratio * mB; - if (mass > 0.0) { - mass = 1.0 / mass; - } - var C = this.m_constant - lengthA - this.m_ratio * lengthB; - var linearError = math_abs$3(C); - var impulse = -mass * C; - var PA = Vec2.mulNumVec2(-impulse, uA); - var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB); - cA.addMul(this.m_invMassA, PA); - aA += this.m_invIA * Vec2.crossVec2Vec2(rA, PA); - cB.addMul(this.m_invMassB, PB); - aB += this.m_invIB * Vec2.crossVec2Vec2(rB, PB); - this.m_bodyA.c_position.c = cA; - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c = cB; - this.m_bodyB.c_position.a = aB; - return linearError < SettingsInternal.linearSlop; - }; - PulleyJoint.TYPE = "pulley-joint"; - return PulleyJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_min$2 = Math.min; -/** @internal */ var LimitState; -(function (LimitState) { - LimitState[LimitState["inactiveLimit"] = 0] = "inactiveLimit"; - LimitState[LimitState["atLowerLimit"] = 1] = "atLowerLimit"; - LimitState[LimitState["atUpperLimit"] = 2] = "atUpperLimit"; - LimitState[LimitState["equalLimits"] = 3] = "equalLimits"; + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + PulleyJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vpA = Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA)); + var vpB = Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB)); + var Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB); + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + var PA = Vec2.mulNumVec2(-impulse, this.m_uA); + var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB); + vA2.addMul(this.m_invMassA, PA); + wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); + vB2.addMul(this.m_invMassB, PB); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + PulleyJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var uA = Vec2.sub(Vec2.add(cA2, this.m_rA), this.m_groundAnchorA); + var uB = Vec2.sub(Vec2.add(cB2, this.m_rB), this.m_groundAnchorB); + var lengthA = uA.length(); + var lengthB = uB.length(); + if (lengthA > 10 * SettingsInternal.linearSlop) { + uA.mul(1 / lengthA); + } else { + uA.setZero(); + } + if (lengthB > 10 * SettingsInternal.linearSlop) { + uB.mul(1 / lengthB); + } else { + uB.setZero(); + } + var ruA = Vec2.crossVec2Vec2(rA2, uA); + var ruB = Vec2.crossVec2Vec2(rB2, uB); + var mA = this.m_invMassA + this.m_invIA * ruA * ruA; + var mB = this.m_invMassB + this.m_invIB * ruB * ruB; + var mass = mA + this.m_ratio * this.m_ratio * mB; + if (mass > 0) { + mass = 1 / mass; + } + var C = this.m_constant - lengthA - this.m_ratio * lengthB; + var linearError = math_abs$3(C); + var impulse = -mass * C; + var PA = Vec2.mulNumVec2(-impulse, uA); + var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB); + cA2.addMul(this.m_invMassA, PA); + aA += this.m_invIA * Vec2.crossVec2Vec2(rA2, PA); + cB2.addMul(this.m_invMassB, PB); + aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, PB); + this.m_bodyA.c_position.c = cA2; + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c = cB2; + this.m_bodyB.c_position.a = aB; + return linearError < SettingsInternal.linearSlop; + }; + PulleyJoint2.TYPE = "pulley-joint"; + return PulleyJoint2; + }(Joint) +); +var math_min$2 = Math.min; +var LimitState; +(function(LimitState2) { + LimitState2[LimitState2["inactiveLimit"] = 0] = "inactiveLimit"; + LimitState2[LimitState2["atLowerLimit"] = 1] = "atLowerLimit"; + LimitState2[LimitState2["atUpperLimit"] = 2] = "atUpperLimit"; + LimitState2[LimitState2["equalLimits"] = 3] = "equalLimits"; })(LimitState || (LimitState = {})); -/** @internal */ var DEFAULTS$2 = { - maxLength: 0.0, +var DEFAULTS$2 = { + maxLength: 0 }; -/** - * A rope joint enforces a maximum distance between two points on two bodies. It - * has no other effect. - * - * Warning: if you attempt to change the maximum length during the simulation - * you will get some non-physical behavior. - * - * A model that would allow you to dynamically modify the length would have some - * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you - * want to dynamically control length. - */ -var RopeJoint = /** @class */ (function (_super) { - __extends$a(RopeJoint, _super); - function RopeJoint(def, bodyA, bodyB, anchor) { - var _this = this; - // @ts-ignore - if (!(_this instanceof RopeJoint)) { - return new RopeJoint(def, bodyA, bodyB, anchor); - } - def = options(def, DEFAULTS$2); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = RopeJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1.0, 0.0)); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1.0, 0.0)); - _this.m_maxLength = def.maxLength; - _this.m_mass = 0.0; - _this.m_impulse = 0.0; - _this.m_length = 0.0; - _this.m_state = LimitState.inactiveLimit; - return _this; - // Limit: - // C = norm(pB - pA) - L - // u = (pB - pA) / norm(pB - pA) - // Cdot = dot(u, vB + cross(wB, rB) - vA - cross(wA, rA)) - // J = [-u -cross(rA, u) u cross(rB, u)] - // K = J * invM * JT - // = invMassA + invIA * cross(rA, u)^2 + invMassB + invIB * cross(rB, u)^2 +var RopeJoint = ( + /** @class */ + function(_super) { + __extends$a(RopeJoint2, _super); + function RopeJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + if (!(_this instanceof RopeJoint2)) { + return new RopeJoint2(def, bodyA, bodyB, anchor); + } + def = options(def, DEFAULTS$2); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = RopeJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1, 0)); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1, 0)); + _this.m_maxLength = def.maxLength; + _this.m_mass = 0; + _this.m_impulse = 0; + _this.m_length = 0; + _this.m_state = LimitState.inactiveLimit; + return _this; } - /** @internal */ - RopeJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - maxLength: this.m_maxLength, - }; + RopeJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + maxLength: this.m_maxLength + }; }; - /** @internal */ - RopeJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new RopeJoint(data); - return joint; - }; - /** @hidden */ - RopeJoint.prototype._reset = function (def) { - if (Number.isFinite(def.maxLength)) { - this.m_maxLength = def.maxLength; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - RopeJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - RopeJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Set the maximum length of the rope. - */ - RopeJoint.prototype.setMaxLength = function (length) { - this.m_maxLength = length; - }; - /** - * Get the maximum length of the rope. - */ - RopeJoint.prototype.getMaxLength = function () { - return this.m_maxLength; - }; - RopeJoint.prototype.getLimitState = function () { - // TODO LimitState - return this.m_state; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - RopeJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - RopeJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - RopeJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - RopeJoint.prototype.getReactionTorque = function (inv_dt) { - return 0.0; - }; - RopeJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); - this.m_rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); - this.m_u = Vec2.zero(); - this.m_u.addCombine(1, cB, 1, this.m_rB); - this.m_u.subCombine(1, cA, 1, this.m_rA); - this.m_length = this.m_u.length(); - var C = this.m_length - this.m_maxLength; - if (C > 0.0) { - this.m_state = LimitState.atUpperLimit; - } - else { - this.m_state = LimitState.inactiveLimit; - } - if (this.m_length > SettingsInternal.linearSlop) { - this.m_u.mul(1.0 / this.m_length); - } - else { - this.m_u.setZero(); - this.m_mass = 0.0; - this.m_impulse = 0.0; - return; - } - // Compute effective mass. - var crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u); - var crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u); - var invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB; - this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0; - if (step.warmStarting) { - // Scale the impulse to support a variable time step. - this.m_impulse *= step.dtRatio; - var P = Vec2.mulNumVec2(this.m_impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - RopeJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - // Cdot = dot(u, v + cross(w, r)) - var vpA = Vec2.addCrossNumVec2(vA, wA, this.m_rA); - var vpB = Vec2.addCrossNumVec2(vB, wB, this.m_rB); - var C = this.m_length - this.m_maxLength; - var Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA)); - // Predictive constraint. - if (C < 0.0) { - Cdot += step.inv_dt * C; - } - var impulse = -this.m_mass * Cdot; - var oldImpulse = this.m_impulse; - this.m_impulse = math_min$2(0.0, this.m_impulse + impulse); - impulse = this.m_impulse - oldImpulse; - var P = Vec2.mulNumVec2(impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - RopeJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); - var u = Vec2.zero(); - u.addCombine(1, cB, 1, rB); - u.subCombine(1, cA, 1, rA); - var length = u.normalize(); - var C = length - this.m_maxLength; - C = clamp$1(C, 0.0, SettingsInternal.maxLinearCorrection); - var impulse = -this.m_mass * C; - var P = Vec2.mulNumVec2(impulse, u); - cA.subMul(this.m_invMassA, P); - aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P); - cB.addMul(this.m_invMassB, P); - aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P); - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return length - this.m_maxLength < SettingsInternal.linearSlop; - }; - RopeJoint.TYPE = "rope-joint"; - return RopeJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$2 = Math.abs; -/** @internal */ var math_PI$2 = Math.PI; -/** @internal */ var DEFAULTS$1 = { - frequencyHz: 0.0, - dampingRatio: 0.0, + RopeJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new RopeJoint2(data); + return joint; + }; + RopeJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.maxLength)) { + this.m_maxLength = def.maxLength; + } + }; + RopeJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + RopeJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + RopeJoint2.prototype.setMaxLength = function(length2) { + this.m_maxLength = length2; + }; + RopeJoint2.prototype.getMaxLength = function() { + return this.m_maxLength; + }; + RopeJoint2.prototype.getLimitState = function() { + return this.m_state; + }; + RopeJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + RopeJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + RopeJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); + }; + RopeJoint2.prototype.getReactionTorque = function(inv_dt) { + return 0; + }; + RopeJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); + this.m_rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); + this.m_u = Vec2.zero(); + this.m_u.addCombine(1, cB2, 1, this.m_rB); + this.m_u.subCombine(1, cA2, 1, this.m_rA); + this.m_length = this.m_u.length(); + var C = this.m_length - this.m_maxLength; + if (C > 0) { + this.m_state = LimitState.atUpperLimit; + } else { + this.m_state = LimitState.inactiveLimit; + } + if (this.m_length > SettingsInternal.linearSlop) { + this.m_u.mul(1 / this.m_length); + } else { + this.m_u.setZero(); + this.m_mass = 0; + this.m_impulse = 0; + return; + } + var crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u); + var crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u); + var invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB; + this.m_mass = invMass != 0 ? 1 / invMass : 0; + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + var P3 = Vec2.mulNumVec2(this.m_impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + RopeJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vpA = Vec2.addCrossNumVec2(vA2, wA, this.m_rA); + var vpB = Vec2.addCrossNumVec2(vB2, wB, this.m_rB); + var C = this.m_length - this.m_maxLength; + var Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA)); + if (C < 0) { + Cdot += step.inv_dt * C; + } + var impulse = -this.m_mass * Cdot; + var oldImpulse = this.m_impulse; + this.m_impulse = math_min$2(0, this.m_impulse + impulse); + impulse = this.m_impulse - oldImpulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + RopeJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); + var u = Vec2.zero(); + u.addCombine(1, cB2, 1, rB2); + u.subCombine(1, cA2, 1, rA2); + var length2 = u.normalize(); + var C = length2 - this.m_maxLength; + C = clamp$1(C, 0, SettingsInternal.maxLinearCorrection); + var impulse = -this.m_mass * C; + var P3 = Vec2.mulNumVec2(impulse, u); + cA2.subMul(this.m_invMassA, P3); + aA -= this.m_invIA * Vec2.crossVec2Vec2(rA2, P3); + cB2.addMul(this.m_invMassB, P3); + aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, P3); + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return length2 - this.m_maxLength < SettingsInternal.linearSlop; + }; + RopeJoint2.TYPE = "rope-joint"; + return RopeJoint2; + }(Joint) +); +var math_abs$2 = Math.abs; +var math_PI$2 = Math.PI; +var DEFAULTS$1 = { + frequencyHz: 0, + dampingRatio: 0 +}; +var WeldJoint = ( + /** @class */ + function(_super) { + __extends$a(WeldJoint2, _super); + function WeldJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + if (!(_this instanceof WeldJoint2)) { + return new WeldJoint2(def, bodyA, bodyB, anchor); + } + def = options(def, DEFAULTS$1); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = WeldJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_impulse = new Vec3(); + _this.m_bias = 0; + _this.m_gamma = 0; + _this.m_rA; + _this.m_rB; + _this.m_localCenterA; + _this.m_localCenterB; + _this.m_invMassA; + _this.m_invMassB; + _this.m_invIA; + _this.m_invIB; + _this.m_mass = new Mat33(); + return _this; + } + WeldJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + referenceAngle: this.m_referenceAngle + }; + }; + WeldJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new WeldJoint2(data); + return joint; + }; + WeldJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; + } + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; + } + }; + WeldJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + WeldJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + WeldJoint2.prototype.getReferenceAngle = function() { + return this.m_referenceAngle; + }; + WeldJoint2.prototype.setFrequency = function(hz) { + this.m_frequencyHz = hz; + }; + WeldJoint2.prototype.getFrequency = function() { + return this.m_frequencyHz; + }; + WeldJoint2.prototype.setDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + WeldJoint2.prototype.getDampingRatio = function() { + return this.m_dampingRatio; + }; + WeldJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + WeldJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + WeldJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); + }; + WeldJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_impulse.z; + }; + WeldJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var K = new Mat33(); + K.ex.x = mA + mB + this.m_rA.y * this.m_rA.y * iA + this.m_rB.y * this.m_rB.y * iB; + K.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; + K.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; + K.ex.y = K.ey.x; + K.ey.y = mA + mB + this.m_rA.x * this.m_rA.x * iA + this.m_rB.x * this.m_rB.x * iB; + K.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; + K.ex.z = K.ez.x; + K.ey.z = K.ez.y; + K.ez.z = iA + iB; + if (this.m_frequencyHz > 0) { + K.getInverse22(this.m_mass); + var invM = iA + iB; + var m = invM > 0 ? 1 / invM : 0; + var C = aB - aA - this.m_referenceAngle; + var omega = 2 * math_PI$2 * this.m_frequencyHz; + var d2 = 2 * m * this.m_dampingRatio * omega; + var k = m * omega * omega; + var h = step.dt; + this.m_gamma = h * (d2 + h * k); + this.m_gamma = this.m_gamma != 0 ? 1 / this.m_gamma : 0; + this.m_bias = C * h * k * this.m_gamma; + invM += this.m_gamma; + this.m_mass.ez.z = invM != 0 ? 1 / invM : 0; + } else if (K.ez.z == 0) { + K.getInverse22(this.m_mass); + this.m_gamma = 0; + this.m_bias = 0; + } else { + K.getSymInverse33(this.m_mass); + this.m_gamma = 0; + this.m_bias = 0; + } + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + var P3 = Vec2.neo(this.m_impulse.x, this.m_impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_impulse.z); + } else { + this.m_impulse.setZero(); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + WeldJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + if (this.m_frequencyHz > 0) { + var Cdot2 = wB - wA; + var impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z); + this.m_impulse.z += impulse2; + wA -= iA * impulse2; + wB += iB * impulse2; + var Cdot1 = Vec2.zero(); + Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1)); + this.m_impulse.x += impulse1.x; + this.m_impulse.y += impulse1.y; + var P3 = Vec2.clone(impulse1); + vA2.subMul(mA, P3); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(mB, P3); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, P3); + } else { + var Cdot1 = Vec2.zero(); + Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var Cdot2 = wB - wA; + var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); + var impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot)); + this.m_impulse.add(impulse); + var P3 = Vec2.neo(impulse.x, impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + impulse.z); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + WeldJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var positionError; + var angularError; + var K = new Mat33(); + K.ex.x = mA + mB + rA2.y * rA2.y * iA + rB2.y * rB2.y * iB; + K.ey.x = -rA2.y * rA2.x * iA - rB2.y * rB2.x * iB; + K.ez.x = -rA2.y * iA - rB2.y * iB; + K.ex.y = K.ey.x; + K.ey.y = mA + mB + rA2.x * rA2.x * iA + rB2.x * rB2.x * iB; + K.ez.y = rA2.x * iA + rB2.x * iB; + K.ex.z = K.ez.x; + K.ey.z = K.ez.y; + K.ez.z = iA + iB; + if (this.m_frequencyHz > 0) { + var C1 = Vec2.zero(); + C1.addCombine(1, cB2, 1, rB2); + C1.subCombine(1, cA2, 1, rA2); + positionError = C1.length(); + angularError = 0; + var P3 = Vec2.neg(K.solve22(C1)); + cA2.subMul(mA, P3); + aA -= iA * Vec2.crossVec2Vec2(rA2, P3); + cB2.addMul(mB, P3); + aB += iB * Vec2.crossVec2Vec2(rB2, P3); + } else { + var C1 = Vec2.zero(); + C1.addCombine(1, cB2, 1, rB2); + C1.subCombine(1, cA2, 1, rA2); + var C2 = aB - aA - this.m_referenceAngle; + positionError = C1.length(); + angularError = math_abs$2(C2); + var C = new Vec3(C1.x, C1.y, C2); + var impulse = new Vec3(); + if (K.ez.z > 0) { + impulse = Vec3.neg(K.solve33(C)); + } else { + var impulse2 = Vec2.neg(K.solve22(C1)); + impulse.set(impulse2.x, impulse2.y, 0); + } + var P3 = Vec2.neo(impulse.x, impulse.y); + cA2.subMul(mA, P3); + aA -= iA * (Vec2.crossVec2Vec2(rA2, P3) + impulse.z); + cB2.addMul(mB, P3); + aB += iB * (Vec2.crossVec2Vec2(rB2, P3) + impulse.z); + } + this.m_bodyA.c_position.c = cA2; + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c = cB2; + this.m_bodyB.c_position.a = aB; + return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; + }; + WeldJoint2.TYPE = "weld-joint"; + return WeldJoint2; + }(Joint) +); +var math_abs$1 = Math.abs; +var math_PI$1 = Math.PI; +var DEFAULTS = { + enableMotor: false, + maxMotorTorque: 0, + motorSpeed: 0, + frequencyHz: 2, + dampingRatio: 0.7 }; -/** - * A weld joint essentially glues two bodies together. A weld joint may distort - * somewhat because the island constraint solver is approximate. - */ -var WeldJoint = /** @class */ (function (_super) { - __extends$a(WeldJoint, _super); - function WeldJoint(def, bodyA, bodyB, anchor) { - var _this = this; - // @ts-ignore - if (!(_this instanceof WeldJoint)) { - return new WeldJoint(def, bodyA, bodyB, anchor); - } - def = options(def, DEFAULTS$1); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = WeldJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_impulse = new Vec3(); - _this.m_bias = 0.0; - _this.m_gamma = 0.0; - // Solver temp - _this.m_rA; - _this.m_rB; - _this.m_localCenterA; - _this.m_localCenterB; - _this.m_invMassA; - _this.m_invMassB; - _this.m_invIA; - _this.m_invIB; - _this.m_mass = new Mat33(); - return _this; - // Point-to-point constraint - // C = p2 - p1 - // Cdot = v2 - v1 - // / = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // Angle constraint - // C = angle2 - angle1 - referenceAngle - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 +var WheelJoint = ( + /** @class */ + function(_super) { + __extends$a(WheelJoint2, _super); + function WheelJoint2(def, bodyA, bodyB, anchor, axis) { + var _this = this; + if (!(_this instanceof WheelJoint2)) { + return new WheelJoint2(def, bodyA, bodyB, anchor, axis); + } + def = options(def, DEFAULTS); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_ax = Vec2.zero(); + _this.m_ay = Vec2.zero(); + _this.m_type = WheelJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + if (Vec2.isValid(axis)) { + _this.m_localXAxisA = bodyA.getLocalVector(axis); + } else if (Vec2.isValid(def.localAxisA)) { + _this.m_localXAxisA = Vec2.clone(def.localAxisA); + } else if (Vec2.isValid(def.localAxis)) { + _this.m_localXAxisA = Vec2.clone(def.localAxis); + } else { + _this.m_localXAxisA = Vec2.neo(1, 0); + } + _this.m_localYAxisA = Vec2.crossNumVec2(1, _this.m_localXAxisA); + _this.m_mass = 0; + _this.m_impulse = 0; + _this.m_motorMass = 0; + _this.m_motorImpulse = 0; + _this.m_springMass = 0; + _this.m_springImpulse = 0; + _this.m_maxMotorTorque = def.maxMotorTorque; + _this.m_motorSpeed = def.motorSpeed; + _this.m_enableMotor = def.enableMotor; + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_bias = 0; + _this.m_gamma = 0; + return _this; } - /** @internal */ - WeldJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - referenceAngle: this.m_referenceAngle, - }; + WheelJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + enableMotor: this.m_enableMotor, + maxMotorTorque: this.m_maxMotorTorque, + motorSpeed: this.m_motorSpeed, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + localAxisA: this.m_localXAxisA + }; }; - /** @internal */ - WeldJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new WeldJoint(data); - return joint; - }; - /** @hidden */ - WeldJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; - } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - WeldJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - WeldJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Get the reference angle. - */ - WeldJoint.prototype.getReferenceAngle = function () { - return this.m_referenceAngle; - }; - /** - * Set frequency in Hz. - */ - WeldJoint.prototype.setFrequency = function (hz) { - this.m_frequencyHz = hz; - }; - /** - * Get frequency in Hz. - */ - WeldJoint.prototype.getFrequency = function () { - return this.m_frequencyHz; - }; - /** - * Set damping ratio. - */ - WeldJoint.prototype.setDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - /** - * Get damping ratio. - */ - WeldJoint.prototype.getDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - WeldJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - WeldJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - WeldJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - WeldJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_impulse.z; - }; - WeldJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // [ 0 -1 0 1] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var K = new Mat33(); - K.ex.x = mA + mB + this.m_rA.y * this.m_rA.y * iA + this.m_rB.y * this.m_rB.y - * iB; - K.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; - K.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; - K.ex.y = K.ey.x; - K.ey.y = mA + mB + this.m_rA.x * this.m_rA.x * iA + this.m_rB.x * this.m_rB.x - * iB; - K.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; - K.ex.z = K.ez.x; - K.ey.z = K.ez.y; - K.ez.z = iA + iB; - if (this.m_frequencyHz > 0.0) { - K.getInverse22(this.m_mass); - var invM = iA + iB; - var m = invM > 0.0 ? 1.0 / invM : 0.0; - var C = aB - aA - this.m_referenceAngle; - // Frequency - var omega = 2.0 * math_PI$2 * this.m_frequencyHz; - // Damping coefficient - var d = 2.0 * m * this.m_dampingRatio * omega; - // Spring stiffness - var k = m * omega * omega; - // magic formulas - var h = step.dt; - this.m_gamma = h * (d + h * k); - this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0; - this.m_bias = C * h * k * this.m_gamma; - invM += this.m_gamma; - this.m_mass.ez.z = invM != 0.0 ? 1.0 / invM : 0.0; - } - else if (K.ez.z == 0.0) { - K.getInverse22(this.m_mass); - this.m_gamma = 0.0; - this.m_bias = 0.0; - } - else { - K.getSymInverse33(this.m_mass); - this.m_gamma = 0.0; - this.m_bias = 0.0; - } - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_impulse.mul(step.dtRatio); - var P = Vec2.neo(this.m_impulse.x, this.m_impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_impulse.z); - } - else { - this.m_impulse.setZero(); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - WeldJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - if (this.m_frequencyHz > 0.0) { - var Cdot2 = wB - wA; - var impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z); - this.m_impulse.z += impulse2; - wA -= iA * impulse2; - wB += iB * impulse2; - var Cdot1 = Vec2.zero(); - Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1)); - this.m_impulse.x += impulse1.x; - this.m_impulse.y += impulse1.y; - var P = Vec2.clone(impulse1); - vA.subMul(mA, P); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(mB, P); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, P); - } - else { - var Cdot1 = Vec2.zero(); - Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var Cdot2 = wB - wA; - var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); - var impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot)); - this.m_impulse.add(impulse); - var P = Vec2.neo(impulse.x, impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - WeldJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var positionError; - var angularError; - var K = new Mat33(); - K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB; - K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB; - K.ez.x = -rA.y * iA - rB.y * iB; - K.ex.y = K.ey.x; - K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB; - K.ez.y = rA.x * iA + rB.x * iB; - K.ex.z = K.ez.x; - K.ey.z = K.ez.y; - K.ez.z = iA + iB; - if (this.m_frequencyHz > 0.0) { - var C1 = Vec2.zero(); - C1.addCombine(1, cB, 1, rB); - C1.subCombine(1, cA, 1, rA); - positionError = C1.length(); - angularError = 0.0; - var P = Vec2.neg(K.solve22(C1)); - cA.subMul(mA, P); - aA -= iA * Vec2.crossVec2Vec2(rA, P); - cB.addMul(mB, P); - aB += iB * Vec2.crossVec2Vec2(rB, P); - } - else { - var C1 = Vec2.zero(); - C1.addCombine(1, cB, 1, rB); - C1.subCombine(1, cA, 1, rA); - var C2 = aB - aA - this.m_referenceAngle; - positionError = C1.length(); - angularError = math_abs$2(C2); - var C = new Vec3(C1.x, C1.y, C2); - var impulse = new Vec3(); - if (K.ez.z > 0.0) { - impulse = Vec3.neg(K.solve33(C)); - } - else { - var impulse2 = Vec2.neg(K.solve22(C1)); - impulse.set(impulse2.x, impulse2.y, 0.0); - } - var P = Vec2.neo(impulse.x, impulse.y); - cA.subMul(mA, P); - aA -= iA * (Vec2.crossVec2Vec2(rA, P) + impulse.z); - cB.addMul(mB, P); - aB += iB * (Vec2.crossVec2Vec2(rB, P) + impulse.z); - } - this.m_bodyA.c_position.c = cA; - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c = cB; - this.m_bodyB.c_position.a = aB; - return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; - }; - WeldJoint.TYPE = "weld-joint"; - return WeldJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$1 = Math.abs; -/** @internal */ var math_PI$1 = Math.PI; -/** @internal */ var DEFAULTS = { - enableMotor: false, - maxMotorTorque: 0.0, - motorSpeed: 0.0, - frequencyHz: 2.0, - dampingRatio: 0.7, -}; -/** - * A wheel joint. This joint provides two degrees of freedom: translation along - * an axis fixed in bodyA and rotation in the plane. In other words, it is a - * point to line constraint with a rotational motor and a linear spring/damper. - * This joint is designed for vehicle suspensions. - */ -var WheelJoint = /** @class */ (function (_super) { - __extends$a(WheelJoint, _super); - function WheelJoint(def, bodyA, bodyB, anchor, axis) { - var _this = this; - // @ts-ignore - if (!(_this instanceof WheelJoint)) { - return new WheelJoint(def, bodyA, bodyB, anchor, axis); - } - def = options(def, DEFAULTS); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_ax = Vec2.zero(); - _this.m_ay = Vec2.zero(); - _this.m_type = WheelJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - if (Vec2.isValid(axis)) { - _this.m_localXAxisA = bodyA.getLocalVector(axis); - } - else if (Vec2.isValid(def.localAxisA)) { - _this.m_localXAxisA = Vec2.clone(def.localAxisA); - } - else if (Vec2.isValid(def.localAxis)) { - // localAxis is renamed to localAxisA, this is for backward compatibility - _this.m_localXAxisA = Vec2.clone(def.localAxis); - } - else { - _this.m_localXAxisA = Vec2.neo(1.0, 0.0); - } - _this.m_localYAxisA = Vec2.crossNumVec2(1.0, _this.m_localXAxisA); - _this.m_mass = 0.0; - _this.m_impulse = 0.0; - _this.m_motorMass = 0.0; - _this.m_motorImpulse = 0.0; - _this.m_springMass = 0.0; - _this.m_springImpulse = 0.0; - _this.m_maxMotorTorque = def.maxMotorTorque; - _this.m_motorSpeed = def.motorSpeed; - _this.m_enableMotor = def.enableMotor; - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_bias = 0.0; - _this.m_gamma = 0.0; - return _this; - // Linear constraint (point-to-line) - // d = pB - pA = xB + rB - xA - rA - // C = dot(ay, d) - // Cdot = dot(d, cross(wA, ay)) + dot(ay, vB + cross(wB, rB) - vA - cross(wA, - // rA)) - // = -dot(ay, vA) - dot(cross(d + rA, ay), wA) + dot(ay, vB) + dot(cross(rB, - // ay), vB) - // J = [-ay, -cross(d + rA, ay), ay, cross(rB, ay)] - // Spring linear constraint - // C = dot(ax, d) - // Cdot = = -dot(ax, vA) - dot(cross(d + rA, ax), wA) + dot(ax, vB) + - // dot(cross(rB, ax), vB) - // J = [-ax -cross(d+rA, ax) ax cross(rB, ax)] - // Motor rotational constraint - // Cdot = wB - wA - // J = [0 0 -1 0 0 1] - } - /** @internal */ - WheelJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - enableMotor: this.m_enableMotor, - maxMotorTorque: this.m_maxMotorTorque, - motorSpeed: this.m_motorSpeed, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - localAxisA: this.m_localXAxisA, - }; + WheelJoint2._deserialize = function(data, world, restore) { + data = __assign$1({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new WheelJoint2(data); + return joint; }; - /** @internal */ - WheelJoint._deserialize = function (data, world, restore) { - data = __assign$1({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new WheelJoint(data); - return joint; - }; - /** @hidden */ - WheelJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (def.localAxisA) { - this.m_localXAxisA.setVec2(def.localAxisA); - this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1.0, def.localAxisA)); - } - if (def.enableMotor !== undefined) { - this.m_enableMotor = def.enableMotor; - } - if (Number.isFinite(def.maxMotorTorque)) { - this.m_maxMotorTorque = def.maxMotorTorque; - } - if (Number.isFinite(def.motorSpeed)) { - this.m_motorSpeed = def.motorSpeed; - } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; - } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - WheelJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - WheelJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * The local joint axis relative to bodyA. - */ - WheelJoint.prototype.getLocalAxisA = function () { - return this.m_localXAxisA; - }; - /** - * Get the current joint translation, usually in meters. - */ - WheelJoint.prototype.getJointTranslation = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - var pA = bA.getWorldPoint(this.m_localAnchorA); - var pB = bB.getWorldPoint(this.m_localAnchorB); - var d = Vec2.sub(pB, pA); - var axis = bA.getWorldVector(this.m_localXAxisA); - var translation = Vec2.dot(d, axis); - return translation; - }; - /** - * Get the current joint translation speed, usually in meters per second. - */ - WheelJoint.prototype.getJointSpeed = function () { - var wA = this.m_bodyA.m_angularVelocity; - var wB = this.m_bodyB.m_angularVelocity; - return wB - wA; - }; - /** - * Is the joint motor enabled? - */ - WheelJoint.prototype.isMotorEnabled = function () { - return this.m_enableMotor; - }; - /** - * Enable/disable the joint motor. - */ - WheelJoint.prototype.enableMotor = function (flag) { - if (flag == this.m_enableMotor) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableMotor = flag; + WheelJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (def.localAxisA) { + this.m_localXAxisA.setVec2(def.localAxisA); + this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1, def.localAxisA)); + } + if (def.enableMotor !== void 0) { + this.m_enableMotor = def.enableMotor; + } + if (Number.isFinite(def.maxMotorTorque)) { + this.m_maxMotorTorque = def.maxMotorTorque; + } + if (Number.isFinite(def.motorSpeed)) { + this.m_motorSpeed = def.motorSpeed; + } + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; + } + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; + } }; - /** - * Set the motor speed, usually in radians per second. - */ - WheelJoint.prototype.setMotorSpeed = function (speed) { - if (speed == this.m_motorSpeed) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_motorSpeed = speed; - }; - /** - * Get the motor speed, usually in radians per second. - */ - WheelJoint.prototype.getMotorSpeed = function () { - return this.m_motorSpeed; - }; - /** - * Set/Get the maximum motor force, usually in N-m. - */ - WheelJoint.prototype.setMaxMotorTorque = function (torque) { - if (torque == this.m_maxMotorTorque) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_maxMotorTorque = torque; - }; - WheelJoint.prototype.getMaxMotorTorque = function () { - return this.m_maxMotorTorque; - }; - /** - * Get the current motor torque given the inverse time step, usually in N-m. - */ - WheelJoint.prototype.getMotorTorque = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - /** - * Set/Get the spring frequency in hertz. Setting the frequency to zero disables - * the spring. - */ - WheelJoint.prototype.setSpringFrequencyHz = function (hz) { - this.m_frequencyHz = hz; - }; - WheelJoint.prototype.getSpringFrequencyHz = function () { - return this.m_frequencyHz; - }; - /** - * Set/Get the spring damping ratio - */ - WheelJoint.prototype.setSpringDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - WheelJoint.prototype.getSpringDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - WheelJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - WheelJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - WheelJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - WheelJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - WheelJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective masses. - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.zero(); - d.addCombine(1, cB, 1, rB); - d.subCombine(1, cA, 1, rA); - // Point to line constraint - { - this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA); - this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ay); - this.m_sBy = Vec2.crossVec2Vec2(rB, this.m_ay); - this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy - * this.m_sBy; - if (this.m_mass > 0.0) { - this.m_mass = 1.0 / this.m_mass; - } - } - // Spring constraint - this.m_springMass = 0.0; - this.m_bias = 0.0; - this.m_gamma = 0.0; - if (this.m_frequencyHz > 0.0) { - this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA); - this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ax); - this.m_sBx = Vec2.crossVec2Vec2(rB, this.m_ax); - var invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx - * this.m_sBx; - if (invMass > 0.0) { - this.m_springMass = 1.0 / invMass; - var C = Vec2.dot(d, this.m_ax); - // Frequency - var omega = 2.0 * math_PI$1 * this.m_frequencyHz; - // Damping coefficient - var damp = 2.0 * this.m_springMass * this.m_dampingRatio * omega; - // Spring stiffness - var k = this.m_springMass * omega * omega; - // magic formulas - var h = step.dt; - this.m_gamma = h * (damp + h * k); - if (this.m_gamma > 0.0) { - this.m_gamma = 1.0 / this.m_gamma; - } - this.m_bias = C * h * k * this.m_gamma; - this.m_springMass = invMass + this.m_gamma; - if (this.m_springMass > 0.0) { - this.m_springMass = 1.0 / this.m_springMass; - } - } - } - else { - this.m_springImpulse = 0.0; - } - // Rotational motor - if (this.m_enableMotor) { - this.m_motorMass = iA + iB; - if (this.m_motorMass > 0.0) { - this.m_motorMass = 1.0 / this.m_motorMass; - } + WheelJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + WheelJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + WheelJoint2.prototype.getLocalAxisA = function() { + return this.m_localXAxisA; + }; + WheelJoint2.prototype.getJointTranslation = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + var pA2 = bA.getWorldPoint(this.m_localAnchorA); + var pB2 = bB.getWorldPoint(this.m_localAnchorB); + var d2 = Vec2.sub(pB2, pA2); + var axis = bA.getWorldVector(this.m_localXAxisA); + var translation2 = Vec2.dot(d2, axis); + return translation2; + }; + WheelJoint2.prototype.getJointSpeed = function() { + var wA = this.m_bodyA.m_angularVelocity; + var wB = this.m_bodyB.m_angularVelocity; + return wB - wA; + }; + WheelJoint2.prototype.isMotorEnabled = function() { + return this.m_enableMotor; + }; + WheelJoint2.prototype.enableMotor = function(flag) { + if (flag == this.m_enableMotor) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableMotor = flag; + }; + WheelJoint2.prototype.setMotorSpeed = function(speed) { + if (speed == this.m_motorSpeed) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_motorSpeed = speed; + }; + WheelJoint2.prototype.getMotorSpeed = function() { + return this.m_motorSpeed; + }; + WheelJoint2.prototype.setMaxMotorTorque = function(torque) { + if (torque == this.m_maxMotorTorque) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_maxMotorTorque = torque; + }; + WheelJoint2.prototype.getMaxMotorTorque = function() { + return this.m_maxMotorTorque; + }; + WheelJoint2.prototype.getMotorTorque = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + WheelJoint2.prototype.setSpringFrequencyHz = function(hz) { + this.m_frequencyHz = hz; + }; + WheelJoint2.prototype.getSpringFrequencyHz = function() { + return this.m_frequencyHz; + }; + WheelJoint2.prototype.setSpringDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + WheelJoint2.prototype.getSpringDampingRatio = function() { + return this.m_dampingRatio; + }; + WheelJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + WheelJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + WheelJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt); + }; + WheelJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + WheelJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.zero(); + d2.addCombine(1, cB2, 1, rB2); + d2.subCombine(1, cA2, 1, rA2); + { + this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA); + this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_ay); + this.m_sBy = Vec2.crossVec2Vec2(rB2, this.m_ay); + this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy * this.m_sBy; + if (this.m_mass > 0) { + this.m_mass = 1 / this.m_mass; + } + } + this.m_springMass = 0; + this.m_bias = 0; + this.m_gamma = 0; + if (this.m_frequencyHz > 0) { + this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA); + this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_ax); + this.m_sBx = Vec2.crossVec2Vec2(rB2, this.m_ax); + var invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx * this.m_sBx; + if (invMass > 0) { + this.m_springMass = 1 / invMass; + var C = Vec2.dot(d2, this.m_ax); + var omega = 2 * math_PI$1 * this.m_frequencyHz; + var damp = 2 * this.m_springMass * this.m_dampingRatio * omega; + var k = this.m_springMass * omega * omega; + var h = step.dt; + this.m_gamma = h * (damp + h * k); + if (this.m_gamma > 0) { + this.m_gamma = 1 / this.m_gamma; + } + this.m_bias = C * h * k * this.m_gamma; + this.m_springMass = invMass + this.m_gamma; + if (this.m_springMass > 0) { + this.m_springMass = 1 / this.m_springMass; + } } - else { - this.m_motorMass = 0.0; - this.m_motorImpulse = 0.0; + } else { + this.m_springImpulse = 0; + } + if (this.m_enableMotor) { + this.m_motorMass = iA + iB; + if (this.m_motorMass > 0) { + this.m_motorMass = 1 / this.m_motorMass; } - if (step.warmStarting) { - // Account for variable time step. - this.m_impulse *= step.dtRatio; - this.m_springImpulse *= step.dtRatio; - this.m_motorImpulse *= step.dtRatio; - var P = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax); - var LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse; - var LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse; - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * LA; - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * LB; - } - else { - this.m_impulse = 0.0; - this.m_springImpulse = 0.0; - this.m_motorImpulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - WheelJoint.prototype.solveVelocityConstraints = function (step) { - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - // Solve spring constraint - { - var Cdot = Vec2.dot(this.m_ax, vB) - Vec2.dot(this.m_ax, vA) + this.m_sBx * wB - this.m_sAx * wA; - var impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse); - this.m_springImpulse += impulse; - var P = Vec2.mulNumVec2(impulse, this.m_ax); - var LA = impulse * this.m_sAx; - var LB = impulse * this.m_sBx; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - // Solve rotational motor constraint - { - var Cdot = wB - wA - this.m_motorSpeed; - var impulse = -this.m_motorMass * Cdot; - var oldImpulse = this.m_motorImpulse; - var maxImpulse = step.dt * this.m_maxMotorTorque; - this.m_motorImpulse = clamp$1(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_motorImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve point to line constraint - { - var Cdot = Vec2.dot(this.m_ay, vB) - Vec2.dot(this.m_ay, vA) + this.m_sBy * wB - this.m_sAy * wA; - var impulse = -this.m_mass * Cdot; - this.m_impulse += impulse; - var P = Vec2.mulNumVec2(impulse, this.m_ay); - var LA = impulse * this.m_sAy; - var LB = impulse * this.m_sBy; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - WheelJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.zero(); - d.addCombine(1, cB, 1, rB); - d.subCombine(1, cA, 1, rA); - var ay = Rot.mulVec2(qA, this.m_localYAxisA); - var sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), ay); - var sBy = Vec2.crossVec2Vec2(rB, ay); - var C = Vec2.dot(d, ay); - 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; - var impulse = k != 0.0 ? -C / k : 0.0; - var P = Vec2.mulNumVec2(impulse, ay); - var LA = impulse * sAy; - var LB = impulse * sBy; - cA.subMul(this.m_invMassA, P); - aA -= this.m_invIA * LA; - cB.addMul(this.m_invMassB, P); - aB += this.m_invIB * LB; - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return math_abs$1(C) <= SettingsInternal.linearSlop; - }; - WheelJoint.TYPE = "wheel-joint"; - return WheelJoint; -}(Joint)); - + } else { + this.m_motorMass = 0; + this.m_motorImpulse = 0; + } + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + this.m_springImpulse *= step.dtRatio; + this.m_motorImpulse *= step.dtRatio; + var P3 = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax); + var LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse; + var LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse; + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * LA; + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * LB; + } else { + this.m_impulse = 0; + this.m_springImpulse = 0; + this.m_motorImpulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + WheelJoint2.prototype.solveVelocityConstraints = function(step) { + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + { + var Cdot = Vec2.dot(this.m_ax, vB2) - Vec2.dot(this.m_ax, vA2) + this.m_sBx * wB - this.m_sAx * wA; + var impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse); + this.m_springImpulse += impulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_ax); + var LA = impulse * this.m_sAx; + var LB = impulse * this.m_sBx; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + { + var Cdot = wB - wA - this.m_motorSpeed; + var impulse = -this.m_motorMass * Cdot; + var oldImpulse = this.m_motorImpulse; + var maxImpulse = step.dt * this.m_maxMotorTorque; + this.m_motorImpulse = clamp$1(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + { + var Cdot = Vec2.dot(this.m_ay, vB2) - Vec2.dot(this.m_ay, vA2) + this.m_sBy * wB - this.m_sAy * wA; + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_ay); + var LA = impulse * this.m_sAy; + var LB = impulse * this.m_sBy; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + WheelJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.zero(); + d2.addCombine(1, cB2, 1, rB2); + d2.subCombine(1, cA2, 1, rA2); + var ay = Rot.mulVec2(qA, this.m_localYAxisA); + var sAy = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), ay); + var sBy = Vec2.crossVec2Vec2(rB2, ay); + var C = Vec2.dot(d2, ay); + 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; + var impulse = k != 0 ? -C / k : 0; + var P3 = Vec2.mulNumVec2(impulse, ay); + var LA = impulse * sAy; + var LB = impulse * sBy; + cA2.subMul(this.m_invMassA, P3); + aA -= this.m_invIA * LA; + cB2.addMul(this.m_invMassB, P3); + aB += this.m_invIB * LB; + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return math_abs$1(C) <= SettingsInternal.linearSlop; + }; + WheelJoint2.TYPE = "wheel-joint"; + return WheelJoint2; + }(Joint) +); var _a; var SID = 0; -// Classes to be serialized as reference objects var SERIALIZE_REF_TYPES = { - "World": World, - "Body": Body, - "Joint": Joint, - "Fixture": Fixture, - "Shape": Shape, + "World": World, + "Body": Body, + "Joint": Joint, + "Fixture": Fixture, + "Shape": Shape }; -// For deserializing reference objects by reference type var DESERIALIZE_BY_REF_TYPE = { - "Vec2": Vec2, - "Vec3": Vec3, - "World": World, - "Body": Body, - "Joint": Joint, - "Fixture": Fixture, - "Shape": Shape, + "Vec2": Vec2, + "Vec3": Vec3, + "World": World, + "Body": Body, + "Joint": Joint, + "Fixture": Fixture, + "Shape": Shape }; -// For deserializing data objects by type field -var DESERIALIZE_BY_TYPE_FIELD = (_a = {}, - _a[Body.STATIC] = Body, - _a[Body.DYNAMIC] = Body, - _a[Body.KINEMATIC] = Body, - _a[ChainShape.TYPE] = ChainShape, - // [BoxShape.TYPE]: BoxShape, - _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); +var DESERIALIZE_BY_TYPE_FIELD = (_a = {}, _a[Body.STATIC] = Body, _a[Body.DYNAMIC] = Body, _a[Body.KINEMATIC] = Body, _a[ChainShape.TYPE] = ChainShape, // [BoxShape.TYPE]: BoxShape, +_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); var DEFAULT_OPTIONS = { - rootClass: World, - preSerialize: function (obj) { return obj; }, - postSerialize: function (data, obj) { return data; }, - preDeserialize: function (data) { return data; }, - postDeserialize: function (obj, data) { return obj; }, + rootClass: World, + preSerialize: function(obj) { + return obj; + }, + postSerialize: function(data, obj) { + return data; + }, + preDeserialize: function(data) { + return data; + }, + postDeserialize: function(obj, data) { + return obj; + } }; -var Serializer = /** @class */ (function () { - function Serializer(options) { - var _this = this; - this.toJson = function (root) { - var preSerialize = _this.options.preSerialize; - var postSerialize = _this.options.postSerialize; - var json = []; - // Breadth-first ref serialization queue - var refQueue = [root]; - var refMemoById = {}; - function addToRefQueue(value, typeName) { - value.__sid = value.__sid || ++SID; - if (!refMemoById[value.__sid]) { - refQueue.push(value); - var index = json.length + refQueue.length; - var ref = { - refIndex: index, - refType: typeName - }; - refMemoById[value.__sid] = ref; - } - return refMemoById[value.__sid]; - } - function serializeWithHooks(obj) { - obj = preSerialize(obj); - var data = obj._serialize(); - data = postSerialize(data, obj); - return data; - } - // traverse the object graph - // ref objects are pushed into the queue - // other objects are serialize in-place - function traverse(value, noRefType) { - if (noRefType === void 0) { noRefType = false; } - if (typeof value !== "object" || value === null) { - return value; - } - // object with _serialize function - if (typeof value._serialize === "function") { - if (!noRefType) { - for (var typeName in SERIALIZE_REF_TYPES) { - if (value instanceof SERIALIZE_REF_TYPES[typeName]) { - return addToRefQueue(value, typeName); - } - } - } - // object with _serialize function - value = serializeWithHooks(value); - } - // recursive for arrays any objects - if (Array.isArray(value)) { - var newValue = []; - for (var key = 0; key < value.length; key++) { - newValue[key] = traverse(value[key]); - } - value = newValue; - } - else { - var newValue = {}; - for (var key in value) { - if (value.hasOwnProperty(key)) { - newValue[key] = traverse(value[key]); - } - } - value = newValue; +var Serializer = ( + /** @class */ + /* @__PURE__ */ function() { + function Serializer2(options2) { + var _this = this; + this.toJson = function(root) { + var preSerialize = _this.options.preSerialize; + var postSerialize = _this.options.postSerialize; + var json = []; + var refQueue = [root]; + var refMemoById = {}; + function addToRefQueue(value, typeName) { + value.__sid = value.__sid || ++SID; + if (!refMemoById[value.__sid]) { + refQueue.push(value); + var index = json.length + refQueue.length; + var ref = { + refIndex: index, + refType: typeName + }; + refMemoById[value.__sid] = ref; + } + return refMemoById[value.__sid]; + } + function serializeWithHooks(obj2) { + obj2 = preSerialize(obj2); + var data = obj2._serialize(); + data = postSerialize(data, obj2); + return data; + } + function traverse(value, noRefType) { + if (noRefType === void 0) { + noRefType = false; + } + if (typeof value !== "object" || value === null) { + return value; + } + if (typeof value._serialize === "function") { + if (!noRefType) { + for (var typeName in SERIALIZE_REF_TYPES) { + if (value instanceof SERIALIZE_REF_TYPES[typeName]) { + return addToRefQueue(value, typeName); } - return value; - } - while (refQueue.length) { - var obj = refQueue.shift(); - var str = traverse(obj, true); - json.push(str); + } } - return json; - }; - this.fromJson = function (json) { - var preDeserialize = _this.options.preDeserialize; - var postDeserialize = _this.options.postDeserialize; - var rootClass = _this.options.rootClass; - var deserializedRefMemoByIndex = {}; - function deserializeWithHooks(classHint, data, context) { - if (!classHint || !classHint._deserialize) { - classHint = DESERIALIZE_BY_TYPE_FIELD[data.type]; - } - var deserializer = classHint && classHint._deserialize; - if (!deserializer) { - return; - } - data = preDeserialize(data); - var classDeserializeFn = classHint._deserialize; - var obj = classDeserializeFn(data, context, deserializeChild); - obj = postDeserialize(obj, data); - return obj; + value = serializeWithHooks(value); + } + if (Array.isArray(value)) { + var newValue = []; + for (var key = 0; key < value.length; key++) { + newValue[key] = traverse(value[key]); } - /** - * Recursive callback function to deserialize a child data object or reference object. - * - * @param classHint suggested class to deserialize obj to - * @param dataOrRef data or reference object - * @param context for example world when deserializing bodies and joints - */ - function deserializeChild(classHint, dataOrRef, context) { - var isRefObject = dataOrRef.refIndex && dataOrRef.refType; - if (!isRefObject) { - return deserializeWithHooks(classHint, dataOrRef, context); - } - var ref = dataOrRef; - if (DESERIALIZE_BY_REF_TYPE[ref.refType]) { - classHint = DESERIALIZE_BY_REF_TYPE[ref.refType]; - } - var refIndex = ref.refIndex; - if (!deserializedRefMemoByIndex[refIndex]) { - var data = json[refIndex]; - var obj = deserializeWithHooks(classHint, data, context); - deserializedRefMemoByIndex[refIndex] = obj; - } - return deserializedRefMemoByIndex[refIndex]; + value = newValue; + } else { + var newValue = {}; + for (var key in value) { + if (value.hasOwnProperty(key)) { + newValue[key] = traverse(value[key]); + } } - var root = deserializeWithHooks(rootClass, json[0], null); - return root; - }; - this.options = __assign$1(__assign$1({}, DEFAULT_OPTIONS), options); + value = newValue; + } + return value; + } + while (refQueue.length) { + var obj = refQueue.shift(); + var str = traverse(obj, true); + json.push(str); + } + return json; + }; + this.fromJson = function(json) { + var preDeserialize = _this.options.preDeserialize; + var postDeserialize = _this.options.postDeserialize; + var rootClass = _this.options.rootClass; + var deserializedRefMemoByIndex = {}; + function deserializeWithHooks(classHint, data, context) { + if (!classHint || !classHint._deserialize) { + classHint = DESERIALIZE_BY_TYPE_FIELD[data.type]; + } + var deserializer = classHint && classHint._deserialize; + if (!deserializer) { + return; + } + data = preDeserialize(data); + var classDeserializeFn = classHint._deserialize; + var obj = classDeserializeFn(data, context, deserializeChild); + obj = postDeserialize(obj, data); + return obj; + } + function deserializeChild(classHint, dataOrRef, context) { + var isRefObject = dataOrRef.refIndex && dataOrRef.refType; + if (!isRefObject) { + return deserializeWithHooks(classHint, dataOrRef, context); + } + var ref = dataOrRef; + if (DESERIALIZE_BY_REF_TYPE[ref.refType]) { + classHint = DESERIALIZE_BY_REF_TYPE[ref.refType]; + } + var refIndex = ref.refIndex; + if (!deserializedRefMemoByIndex[refIndex]) { + var data = json[refIndex]; + var obj = deserializeWithHooks(classHint, data, context); + deserializedRefMemoByIndex[refIndex] = obj; + } + return deserializedRefMemoByIndex[refIndex]; + } + var root = deserializeWithHooks(rootClass, json[0], null); + return root; + }; + this.options = __assign$1(__assign$1({}, DEFAULT_OPTIONS), options2); } - return Serializer; -}()); + return Serializer2; + }() +); var worldSerializer = new Serializer({ - rootClass: World, + rootClass: World }); Serializer.fromJson = worldSerializer.fromJson; Serializer.toJson = worldSerializer.toJson; - -var Testbed = /** @class */ (function () { - function Testbed() { - /** World viewbox width. */ - this.width = 80; - /** World viewbox height. */ - this.height = 60; - /** World viewbox center vertical offset. */ - this.x = 0; - /** World viewbox center horizontal offset. */ - this.y = -10; - /** @hidden */ - this.scaleY = -1; - /** World simulation step frequency */ - this.hz = 60; - /** World simulation speed, default is 1 */ - this.speed = 1; - this.background = "#222222"; - this.activeKeys = {}; - /** callback, to be implemented by user */ - this.step = function (dt, t) { - return; - }; - /** callback, to be implemented by user */ - this.keydown = function (keyCode, label) { - return; - }; - /** callback, to be implemented by user */ - this.keyup = function (keyCode, label) { - return; - }; - } - /** - * Mounts testbed. Call start with a world to start simulation and rendering. - */ - Testbed.mount = function (options) { - throw new Error("Not implemented"); - }; - /** - * Mounts testbed if needed, then starts simulation and rendering. - * - * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`. - */ - Testbed.start = function (world) { - var testbed = Testbed.mount(); - testbed.start(world); - return testbed; - }; - Testbed.prototype.color = function (r, g, b) { - r = r * 256 | 0; - g = g * 256 | 0; - b = b * 256 | 0; - return "rgb(" + r + ", " + g + ", " + b + ")"; - }; - return Testbed; -}()); -/** @internal */ -function testbed(a, b) { - var callback; - var options; - if (typeof a === "function") { - callback = a; - options = b; - } - else if (typeof b === "function") { - callback = b; - options = a; - } - else { - options = a !== null && a !== void 0 ? a : b; - } - var testbed = Testbed.mount(options); - if (callback) { - // this is for backwards compatibility - var world = callback(testbed) || testbed.world; - testbed.start(world); - } - else { - return testbed; - } -} - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** - * A rectangle polygon which extend PolygonShape. - */ -var BoxShape = /** @class */ (function (_super) { - __extends$a(BoxShape, _super); - /** - * - * @param halfWidth - * @param halfHeight - * @param center coordinate of the center of the box relative to the body - * @param angle angle of the box relative to the body - */ - function BoxShape(halfWidth, halfHeight, center, angle) { - var _this = this; - // @ts-ignore - if (!(_this instanceof BoxShape)) { - return new BoxShape(halfWidth, halfHeight, center, angle); - } - _this = _super.call(this) || this; - _this._setAsBox(halfWidth, halfHeight, center, angle); - return _this; - } - // note that box is serialized/deserialized as polygon - BoxShape.TYPE = "polygon"; - return BoxShape; -}(PolygonShape)); -var Box = BoxShape; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -Contact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact); -/** @internal */ function CircleCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - CollideCircles(manifold, fixtureA.getShape(), xfA, fixtureB.getShape(), xfB); -} -/** @internal */ var pA = vec2(0, 0); -/** @internal */ var pB = vec2(0, 0); -var CollideCircles = function (manifold, circleA, xfA, circleB, xfB) { - manifold.pointCount = 0; - transformVec2(pA, xfA, circleA.m_p); - transformVec2(pB, xfB, circleB.m_p); - var distSqr = distSqrVec2(pB, pA); - var rA = circleA.m_radius; - var rB = circleB.m_radius; - var radius = rA + rB; - if (distSqr > radius * radius) { +var Testbed = ( + /** @class */ + function() { + function Testbed2() { + this.width = 80; + this.height = 60; + this.x = 0; + this.y = -10; + this.scaleY = -1; + this.hz = 60; + this.speed = 1; + this.background = "#222222"; + this.activeKeys = {}; + this.step = function(dt, t) { + return; + }; + this.keydown = function(keyCode, label) { + return; + }; + this.keyup = function(keyCode, label) { return; + }; } - manifold.type = ManifoldType.e_circles; - copyVec2(manifold.localPoint, circleA.m_p); - zeroVec2(manifold.localNormal); - manifold.pointCount = 1; - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); -}; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ + Testbed2.mount = function(options2) { + throw new Error("Not implemented"); + }; + Testbed2.start = function(world) { + var testbed2 = Testbed2.mount(); + testbed2.start(world); + return testbed2; + }; + Testbed2.prototype.color = function(r, g, b2) { + r = r * 256 | 0; + g = g * 256 | 0; + b2 = b2 * 256 | 0; + return "rgb(" + r + ", " + g + ", " + b2 + ")"; + }; + return Testbed2; + }() +); +function testbed(a2, b2) { + var callback; + var options2; + if (typeof a2 === "function") { + callback = a2; + options2 = b2; + } else if (typeof b2 === "function") { + callback = b2; + options2 = a2; + } else { + options2 = a2 !== null && a2 !== void 0 ? a2 : b2; + } + var testbed2 = Testbed.mount(options2); + if (callback) { + var world = callback(testbed2) || testbed2.world; + testbed2.start(world); + } else { + return testbed2; + } +} +var BoxShape = ( + /** @class */ + function(_super) { + __extends$a(BoxShape2, _super); + function BoxShape2(halfWidth, halfHeight, center2, angle) { + var _this = this; + if (!(_this instanceof BoxShape2)) { + return new BoxShape2(halfWidth, halfHeight, center2, angle); + } + _this = _super.call(this) || this; + _this._setAsBox(halfWidth, halfHeight, center2, angle); + return _this; + } + BoxShape2.TYPE = "polygon"; + return BoxShape2; + }(PolygonShape) +); +var Box = BoxShape; +Contact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact); +function CircleCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + CollideCircles(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2); +} +var pA = vec2(0, 0); +var pB = vec2(0, 0); +var CollideCircles = function(manifold, circleA, xfA2, circleB, xfB2) { + manifold.pointCount = 0; + transformVec2(pA, xfA2, circleA.m_p); + transformVec2(pB, xfB2, circleB.m_p); + var distSqr = distSqrVec2(pB, pA); + var rA2 = circleA.m_radius; + var rB2 = circleB.m_radius; + var radius = rA2 + rB2; + if (distSqr > radius * radius) { + return; + } + manifold.type = ManifoldType.e_circles; + copyVec2(manifold.localPoint, circleA.m_p); + zeroVec2(manifold.localNormal); + manifold.pointCount = 1; + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); +}; Contact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact); Contact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact); -/** @internal */ function EdgeCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - var shapeA = fixtureA.getShape(); - var shapeB = fixtureB.getShape(); - CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB); +function EdgeCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + var shapeA = fixtureA.getShape(); + var shapeB = fixtureB.getShape(); + CollideEdgeCircle(manifold, shapeA, xfA2, shapeB, xfB2); } -function ChainCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - var chain = fixtureA.getShape(); - var edge = new EdgeShape(); - chain.getChildEdge(edge, indexA); - var shapeA = edge; - var shapeB = fixtureB.getShape(); - CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB); +function ChainCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + var chain = fixtureA.getShape(); + var edge = new EdgeShape(); + chain.getChildEdge(edge, indexA); + var shapeA = edge; + var shapeB = fixtureB.getShape(); + CollideEdgeCircle(manifold, shapeA, xfA2, shapeB, xfB2); } -/** @internal */ var e = vec2(0, 0); -/** @internal */ var e1 = vec2(0, 0); -/** @internal */ var e2 = vec2(0, 0); -/** @internal */ var Q = vec2(0, 0); -/** @internal */ var P = vec2(0, 0); -/** @internal */ var n$2 = vec2(0, 0); -// Compute contact points for edge versus circle. -// This accounts for edge connectivity. -var CollideEdgeCircle = function (manifold, edgeA, xfA, circleB, xfB) { - manifold.pointCount = 0; - // Compute circle in frame of edge - retransformVec2(Q, xfB, xfA, circleB.m_p); - var A = edgeA.m_vertex1; - var B = edgeA.m_vertex2; - subVec2(e, B, A); - // Barycentric coordinates - var u = dotVec2(e, B) - dotVec2(e, Q); - var v = dotVec2(e, Q) - dotVec2(e, A); - var radius = edgeA.m_radius + circleB.m_radius; - // Region A - if (v <= 0.0) { - copyVec2(P, A); - var dd_1 = distSqrVec2(Q, A); - if (dd_1 > radius * radius) { - return; - } - // Is there an edge connected to A? - if (edgeA.m_hasVertex0) { - var A1 = edgeA.m_vertex0; - var B1 = A; - subVec2(e1, B1, A1); - var u1 = dotVec2(e1, B1) - dotVec2(e1, Q); - // Is the circle in Region AB of the previous edge? - if (u1 > 0.0) { - return; - } - } - manifold.type = ManifoldType.e_circles; - zeroVec2(manifold.localNormal); - copyVec2(manifold.localPoint, P); - manifold.pointCount = 1; - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); - return; - } - // Region B - if (u <= 0.0) { - copyVec2(P, B); - var dd_2 = distSqrVec2(Q, P); - if (dd_2 > radius * radius) { - return; - } - // Is there an edge connected to B? - if (edgeA.m_hasVertex3) { - var B2 = edgeA.m_vertex3; - var A2 = B; - subVec2(e2, B2, A2); - var v2 = dotVec2(e2, Q) - dotVec2(e2, A2); - // Is the circle in Region AB of the next edge? - if (v2 > 0.0) { - return; - } - } - manifold.type = ManifoldType.e_circles; - zeroVec2(manifold.localNormal); - copyVec2(manifold.localPoint, P); - manifold.pointCount = 1; - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); +var e = vec2(0, 0); +var e1 = vec2(0, 0); +var e2 = vec2(0, 0); +var Q = vec2(0, 0); +var P = vec2(0, 0); +var n$2 = vec2(0, 0); +var CollideEdgeCircle = function(manifold, edgeA, xfA2, circleB, xfB2) { + manifold.pointCount = 0; + retransformVec2(Q, xfB2, xfA2, circleB.m_p); + var A = edgeA.m_vertex1; + var B = edgeA.m_vertex2; + subVec2(e, B, A); + var u = dotVec2(e, B) - dotVec2(e, Q); + var v3 = dotVec2(e, Q) - dotVec2(e, A); + var radius = edgeA.m_radius + circleB.m_radius; + if (v3 <= 0) { + copyVec2(P, A); + var dd_1 = distSqrVec2(Q, A); + if (dd_1 > radius * radius) { + return; + } + if (edgeA.m_hasVertex0) { + var A1 = edgeA.m_vertex0; + var B1 = A; + subVec2(e1, B1, A1); + var u1 = dotVec2(e1, B1) - dotVec2(e1, Q); + if (u1 > 0) { return; + } } - // Region AB - var den = lengthSqrVec2(e); - combine2Vec2(P, u / den, A, v / den, B); - var dd = distSqrVec2(Q, P); - if (dd > radius * radius) { + manifold.type = ManifoldType.e_circles; + zeroVec2(manifold.localNormal); + copyVec2(manifold.localPoint, P); + manifold.pointCount = 1; + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + return; + } + if (u <= 0) { + copyVec2(P, B); + var dd_2 = distSqrVec2(Q, P); + if (dd_2 > radius * radius) { + return; + } + if (edgeA.m_hasVertex3) { + var B2 = edgeA.m_vertex3; + var A2 = B; + subVec2(e2, B2, A2); + var v22 = dotVec2(e2, Q) - dotVec2(e2, A2); + if (v22 > 0) { return; + } } - crossNumVec2(n$2, 1, e); - if (dotVec2(n$2, Q) - dotVec2(n$2, A) < 0.0) { - negVec2(n$2); - } - normalizeVec2(n$2); - manifold.type = ManifoldType.e_faceA; - copyVec2(manifold.localNormal, n$2); - copyVec2(manifold.localPoint, A); + manifold.type = ManifoldType.e_circles; + zeroVec2(manifold.localNormal); + copyVec2(manifold.localPoint, P); manifold.pointCount = 1; copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex); + manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + return; + } + var den = lengthSqrVec2(e); + combine2Vec2(P, u / den, A, v3 / den, B); + var dd = distSqrVec2(Q, P); + if (dd > radius * radius) { + return; + } + crossNumVec2(n$2, 1, e); + if (dotVec2(n$2, Q) - dotVec2(n$2, A) < 0) { + negVec2(n$2); + } + normalizeVec2(n$2); + manifold.type = ManifoldType.e_faceA; + copyVec2(manifold.localNormal, n$2); + copyVec2(manifold.localPoint, A); + manifold.pointCount = 1; + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex); }; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var incidentEdge = [new ClipVertex(), new ClipVertex()]; -/** @internal */ var clipPoints1$1 = [new ClipVertex(), new ClipVertex()]; -/** @internal */ var clipPoints2$1 = [new ClipVertex(), new ClipVertex()]; -/** @internal */ var clipSegmentToLineNormal = vec2(0, 0); -/** @internal */ var v1 = vec2(0, 0); -/** @internal */ var n$1 = vec2(0, 0); -/** @internal */ var xf$1 = transform(0, 0, 0); -/** @internal */ var v11 = vec2(0, 0); -/** @internal */ var v12 = vec2(0, 0); -/** @internal */ var localTangent = vec2(0, 0); -/** @internal */ var localNormal = vec2(0, 0); -/** @internal */ var planePoint = vec2(0, 0); -/** @internal */ var tangent = vec2(0, 0); -/** @internal */ var normal$1 = vec2(0, 0); -/** @internal */ var normal1$1 = vec2(0, 0); +var incidentEdge = [new ClipVertex(), new ClipVertex()]; +var clipPoints1$1 = [new ClipVertex(), new ClipVertex()]; +var clipPoints2$1 = [new ClipVertex(), new ClipVertex()]; +var clipSegmentToLineNormal = vec2(0, 0); +var v1 = vec2(0, 0); +var n$1 = vec2(0, 0); +var xf$1 = transform(0, 0, 0); +var v11 = vec2(0, 0); +var v12 = vec2(0, 0); +var localTangent = vec2(0, 0); +var localNormal = vec2(0, 0); +var planePoint = vec2(0, 0); +var tangent = vec2(0, 0); +var normal$1 = vec2(0, 0); +var normal1$1 = vec2(0, 0); Contact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact); -/** @internal */ function PolygonContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - CollidePolygons(manifold, fixtureA.getShape(), xfA, fixtureB.getShape(), xfB); +function PolygonContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + CollidePolygons(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2); } -/** - * Find the max separation between poly1 and poly2 using edge normals from - * poly1. - */ -/** @internal */ function findMaxSeparation(poly1, xf1, poly2, xf2, output) { - var count1 = poly1.m_count; - var count2 = poly2.m_count; - var n1s = poly1.m_normals; - var v1s = poly1.m_vertices; - var v2s = poly2.m_vertices; - detransformTransform(xf$1, xf2, xf1); - var bestIndex = 0; - var maxSeparation = -Infinity; - for (var i = 0; i < count1; ++i) { - // Get poly1 normal in frame2. - rotVec2(n$1, xf$1.q, n1s[i]); - transformVec2(v1, xf$1, v1s[i]); - // Find deepest point for normal i. - var si = Infinity; - for (var j = 0; j < count2; ++j) { - var sij = dotVec2(n$1, v2s[j]) - dotVec2(n$1, v1); - if (sij < si) { - si = sij; - } - } - if (si > maxSeparation) { - maxSeparation = si; - bestIndex = i; - } +function findMaxSeparation(poly1, xf1, poly2, xf2, output2) { + var count1 = poly1.m_count; + var count2 = poly2.m_count; + var n1s = poly1.m_normals; + var v1s = poly1.m_vertices; + var v2s = poly2.m_vertices; + detransformTransform(xf$1, xf2, xf1); + var bestIndex = 0; + var maxSeparation2 = -Infinity; + for (var i = 0; i < count1; ++i) { + rotVec2(n$1, xf$1.q, n1s[i]); + transformVec2(v1, xf$1, v1s[i]); + var si = Infinity; + for (var j = 0; j < count2; ++j) { + var sij = dotVec2(n$1, v2s[j]) - dotVec2(n$1, v1); + if (sij < si) { + si = sij; + } + } + if (si > maxSeparation2) { + maxSeparation2 = si; + bestIndex = i; } - // used to keep last FindMaxSeparation call values - output.maxSeparation = maxSeparation; - output.bestIndex = bestIndex; + } + output2.maxSeparation = maxSeparation2; + output2.bestIndex = bestIndex; } -/** @internal */ function findIncidentEdge(clipVertex, poly1, xf1, edge1, poly2, xf2) { - var normals1 = poly1.m_normals; - var count2 = poly2.m_count; - var vertices2 = poly2.m_vertices; - var normals2 = poly2.m_normals; - // Get the normal of the reference edge in poly2's frame. - rerotVec2(normal1$1, xf2.q, xf1.q, normals1[edge1]); - // Find the incident edge on poly2. - var index = 0; - var minDot = Infinity; - for (var i = 0; i < count2; ++i) { - var dot = dotVec2(normal1$1, normals2[i]); - if (dot < minDot) { - minDot = dot; - index = i; - } +function findIncidentEdge(clipVertex, poly1, xf1, edge12, poly2, xf2) { + var normals1 = poly1.m_normals; + var count2 = poly2.m_count; + var vertices2 = poly2.m_vertices; + var normals2 = poly2.m_normals; + rerotVec2(normal1$1, xf2.q, xf1.q, normals1[edge12]); + var index = 0; + var minDot = Infinity; + for (var i = 0; i < count2; ++i) { + var dot = dotVec2(normal1$1, normals2[i]); + if (dot < minDot) { + minDot = dot; + index = i; } - // Build the clip vertices for the incident edge. - var i1 = index; - var i2 = i1 + 1 < count2 ? i1 + 1 : 0; - transformVec2(clipVertex[0].v, xf2, vertices2[i1]); - clipVertex[0].id.setFeatures(edge1, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex); - transformVec2(clipVertex[1].v, xf2, vertices2[i2]); - clipVertex[1].id.setFeatures(edge1, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex); + } + var i1 = index; + var i2 = i1 + 1 < count2 ? i1 + 1 : 0; + transformVec2(clipVertex[0].v, xf2, vertices2[i1]); + clipVertex[0].id.setFeatures(edge12, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex); + transformVec2(clipVertex[1].v, xf2, vertices2[i2]); + clipVertex[1].id.setFeatures(edge12, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex); } -/** @internal */ var maxSeparation = { - maxSeparation: 0, - bestIndex: 0, +var maxSeparation = { + maxSeparation: 0, + bestIndex: 0 }; -/** - * - * Find edge normal of max separation on A - return if separating axis is found
- * Find edge normal of max separation on B - return if separation axis is found
- * Choose reference edge as min(minA, minB)
- * Find incident edge
- * Clip - * - * The normal points from 1 to 2 - */ -var CollidePolygons = function (manifold, polyA, xfA, polyB, xfB) { - manifold.pointCount = 0; - var totalRadius = polyA.m_radius + polyB.m_radius; - findMaxSeparation(polyA, xfA, polyB, xfB, maxSeparation); - var edgeA = maxSeparation.bestIndex; - var separationA = maxSeparation.maxSeparation; - if (separationA > totalRadius) - return; - findMaxSeparation(polyB, xfB, polyA, xfA, maxSeparation); - var edgeB = maxSeparation.bestIndex; - var separationB = maxSeparation.maxSeparation; - if (separationB > totalRadius) - return; - var poly1; // reference polygon - var poly2; // incident polygon - var xf1; - var xf2; - var edge1; // reference edge - var flip; - var k_tol = 0.1 * SettingsInternal.linearSlop; - if (separationB > separationA + k_tol) { - poly1 = polyB; - poly2 = polyA; - xf1 = xfB; - xf2 = xfA; - edge1 = edgeB; - manifold.type = ManifoldType.e_faceB; - flip = true; - } - else { - poly1 = polyA; - poly2 = polyB; - xf1 = xfA; - xf2 = xfB; - edge1 = edgeA; - manifold.type = ManifoldType.e_faceA; - flip = false; - } - incidentEdge[0].recycle(), incidentEdge[1].recycle(); - findIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2); - var count1 = poly1.m_count; - var vertices1 = poly1.m_vertices; - var iv1 = edge1; - var iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0; - copyVec2(v11, vertices1[iv1]); - copyVec2(v12, vertices1[iv2]); - subVec2(localTangent, v12, v11); - normalizeVec2(localTangent); - crossVec2Num(localNormal, localTangent, 1.0); - combine2Vec2(planePoint, 0.5, v11, 0.5, v12); - rotVec2(tangent, xf1.q, localTangent); - crossVec2Num(normal$1, tangent, 1.0); - transformVec2(v11, xf1, v11); - transformVec2(v12, xf1, v12); - // Face offset. - var frontOffset = dotVec2(normal$1, v11); - // Side offsets, extended by polytope skin thickness. - var sideOffset1 = -dotVec2(tangent, v11) + totalRadius; - var sideOffset2 = dotVec2(tangent, v12) + totalRadius; - // Clip incident edge against extruded edge1 side edges. - clipPoints1$1[0].recycle(), clipPoints1$1[1].recycle(); - clipPoints2$1[0].recycle(), clipPoints2$1[1].recycle(); - // Clip to box side 1 - setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y); - var np1 = clipSegmentToLine(clipPoints1$1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1); - if (np1 < 2) { - return; - } - // Clip to negative box side 1 - setVec2(clipSegmentToLineNormal, tangent.x, tangent.y); - var np2 = clipSegmentToLine(clipPoints2$1, clipPoints1$1, clipSegmentToLineNormal, sideOffset2, iv2); - if (np2 < 2) { - return; - } - // Now clipPoints2 contains the clipped points. - copyVec2(manifold.localNormal, localNormal); - copyVec2(manifold.localPoint, planePoint); - var pointCount = 0; - for (var i = 0; i < clipPoints2$1.length /* maxManifoldPoints */; ++i) { - var separation = dotVec2(normal$1, clipPoints2$1[i].v) - frontOffset; - if (separation <= totalRadius) { - var cp = manifold.points[pointCount]; - detransformVec2(cp.localPoint, xf2, clipPoints2$1[i].v); - cp.id.set(clipPoints2$1[i].id); - if (flip) { - // Swap features - cp.id.swapFeatures(); - } - ++pointCount; - } +var CollidePolygons = function(manifold, polyA, xfA2, polyB, xfB2) { + manifold.pointCount = 0; + var totalRadius = polyA.m_radius + polyB.m_radius; + findMaxSeparation(polyA, xfA2, polyB, xfB2, maxSeparation); + var edgeA = maxSeparation.bestIndex; + var separationA = maxSeparation.maxSeparation; + if (separationA > totalRadius) + return; + findMaxSeparation(polyB, xfB2, polyA, xfA2, maxSeparation); + var edgeB = maxSeparation.bestIndex; + var separationB = maxSeparation.maxSeparation; + if (separationB > totalRadius) + return; + var poly1; + var poly2; + var xf1; + var xf2; + var edge12; + var flip; + var k_tol = 0.1 * SettingsInternal.linearSlop; + if (separationB > separationA + k_tol) { + poly1 = polyB; + poly2 = polyA; + xf1 = xfB2; + xf2 = xfA2; + edge12 = edgeB; + manifold.type = ManifoldType.e_faceB; + flip = true; + } else { + poly1 = polyA; + poly2 = polyB; + xf1 = xfA2; + xf2 = xfB2; + edge12 = edgeA; + manifold.type = ManifoldType.e_faceA; + flip = false; + } + incidentEdge[0].recycle(), incidentEdge[1].recycle(); + findIncidentEdge(incidentEdge, poly1, xf1, edge12, poly2, xf2); + var count1 = poly1.m_count; + var vertices1 = poly1.m_vertices; + var iv1 = edge12; + var iv2 = edge12 + 1 < count1 ? edge12 + 1 : 0; + copyVec2(v11, vertices1[iv1]); + copyVec2(v12, vertices1[iv2]); + subVec2(localTangent, v12, v11); + normalizeVec2(localTangent); + crossVec2Num(localNormal, localTangent, 1); + combine2Vec2(planePoint, 0.5, v11, 0.5, v12); + rotVec2(tangent, xf1.q, localTangent); + crossVec2Num(normal$1, tangent, 1); + transformVec2(v11, xf1, v11); + transformVec2(v12, xf1, v12); + var frontOffset = dotVec2(normal$1, v11); + var sideOffset1 = -dotVec2(tangent, v11) + totalRadius; + var sideOffset2 = dotVec2(tangent, v12) + totalRadius; + clipPoints1$1[0].recycle(), clipPoints1$1[1].recycle(); + clipPoints2$1[0].recycle(), clipPoints2$1[1].recycle(); + setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y); + var np1 = clipSegmentToLine(clipPoints1$1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1); + if (np1 < 2) { + return; + } + setVec2(clipSegmentToLineNormal, tangent.x, tangent.y); + var np2 = clipSegmentToLine(clipPoints2$1, clipPoints1$1, clipSegmentToLineNormal, sideOffset2, iv2); + if (np2 < 2) { + return; + } + copyVec2(manifold.localNormal, localNormal); + copyVec2(manifold.localPoint, planePoint); + var pointCount = 0; + for (var i = 0; i < clipPoints2$1.length; ++i) { + var separation = dotVec2(normal$1, clipPoints2$1[i].v) - frontOffset; + if (separation <= totalRadius) { + var cp = manifold.points[pointCount]; + detransformVec2(cp.localPoint, xf2, clipPoints2$1[i].v); + cp.id.set(clipPoints2$1[i].id); + if (flip) { + cp.id.swapFeatures(); + } + ++pointCount; } - manifold.pointCount = pointCount; + } + manifold.pointCount = pointCount; }; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ Contact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact); -/** @internal */ function PolygonCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - CollidePolygonCircle(manifold, fixtureA.getShape(), xfA, fixtureB.getShape(), xfB); +function PolygonCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + CollidePolygonCircle(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2); } -/** @internal */ var cLocal = vec2(0, 0); -/** @internal */ var faceCenter = vec2(0, 0); -var CollidePolygonCircle = function (manifold, polygonA, xfA, circleB, xfB) { - manifold.pointCount = 0; - // Compute circle position in the frame of the polygon. - retransformVec2(cLocal, xfB, xfA, circleB.m_p); - // Find the min separating edge. - var normalIndex = 0; - var separation = -Infinity; - var radius = polygonA.m_radius + circleB.m_radius; - var vertexCount = polygonA.m_count; - var vertices = polygonA.m_vertices; - var normals = polygonA.m_normals; - for (var i = 0; i < vertexCount; ++i) { - var s = dotVec2(normals[i], cLocal) - dotVec2(normals[i], vertices[i]); - if (s > radius) { - // Early out. - return; - } - if (s > separation) { - separation = s; - normalIndex = i; - } +var cLocal = vec2(0, 0); +var faceCenter = vec2(0, 0); +var CollidePolygonCircle = function(manifold, polygonA, xfA2, circleB, xfB2) { + manifold.pointCount = 0; + retransformVec2(cLocal, xfB2, xfA2, circleB.m_p); + var normalIndex = 0; + var separation = -Infinity; + var radius = polygonA.m_radius + circleB.m_radius; + var vertexCount = polygonA.m_count; + var vertices = polygonA.m_vertices; + var normals = polygonA.m_normals; + for (var i = 0; i < vertexCount; ++i) { + var s2 = dotVec2(normals[i], cLocal) - dotVec2(normals[i], vertices[i]); + if (s2 > radius) { + return; + } + if (s2 > separation) { + separation = s2; + normalIndex = i; } - // Vertices that subtend the incident face. - var vertIndex1 = normalIndex; - var vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0; - var v1 = vertices[vertIndex1]; - var v2 = vertices[vertIndex2]; - // If the center is inside the polygon ... - if (separation < EPSILON) { - manifold.pointCount = 1; - manifold.type = ManifoldType.e_faceA; - copyVec2(manifold.localNormal, normals[normalIndex]); - combine2Vec2(manifold.localPoint, 0.5, v1, 0.5, v2); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); - return; - } - // Compute barycentric coordinates - // u1 = (cLocal - v1) dot (v2 - v1)) - var u1 = dotVec2(cLocal, v2) - dotVec2(cLocal, v1) - dotVec2(v1, v2) + dotVec2(v1, v1); - // u2 = (cLocal - v2) dot (v1 - v2) - var u2 = dotVec2(cLocal, v1) - dotVec2(cLocal, v2) - dotVec2(v2, v1) + dotVec2(v2, v2); - if (u1 <= 0.0) { - if (distSqrVec2(cLocal, v1) > radius * radius) { - return; - } - manifold.pointCount = 1; - manifold.type = ManifoldType.e_faceA; - subVec2(manifold.localNormal, cLocal, v1); - normalizeVec2(manifold.localNormal); - copyVec2(manifold.localPoint, v1); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + } + var vertIndex1 = normalIndex; + var vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0; + var v13 = vertices[vertIndex1]; + var v22 = vertices[vertIndex2]; + if (separation < EPSILON) { + manifold.pointCount = 1; + manifold.type = ManifoldType.e_faceA; + copyVec2(manifold.localNormal, normals[normalIndex]); + combine2Vec2(manifold.localPoint, 0.5, v13, 0.5, v22); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + return; + } + var u1 = dotVec2(cLocal, v22) - dotVec2(cLocal, v13) - dotVec2(v13, v22) + dotVec2(v13, v13); + var u2 = dotVec2(cLocal, v13) - dotVec2(cLocal, v22) - dotVec2(v22, v13) + dotVec2(v22, v22); + if (u1 <= 0) { + if (distSqrVec2(cLocal, v13) > radius * radius) { + return; } - else if (u2 <= 0.0) { - if (distSqrVec2(cLocal, v2) > radius * radius) { - return; - } - manifold.pointCount = 1; - manifold.type = ManifoldType.e_faceA; - subVec2(manifold.localNormal, cLocal, v2); - normalizeVec2(manifold.localNormal); - copyVec2(manifold.localPoint, v2); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + manifold.pointCount = 1; + manifold.type = ManifoldType.e_faceA; + subVec2(manifold.localNormal, cLocal, v13); + normalizeVec2(manifold.localNormal); + copyVec2(manifold.localPoint, v13); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + } else if (u2 <= 0) { + if (distSqrVec2(cLocal, v22) > radius * radius) { + return; } - else { - combine2Vec2(faceCenter, 0.5, v1, 0.5, v2); - var separation_1 = dotVec2(cLocal, normals[vertIndex1]) - dotVec2(faceCenter, normals[vertIndex1]); - if (separation_1 > radius) { - return; - } - manifold.pointCount = 1; - manifold.type = ManifoldType.e_faceA; - copyVec2(manifold.localNormal, normals[vertIndex1]); - copyVec2(manifold.localPoint, faceCenter); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + manifold.pointCount = 1; + manifold.type = ManifoldType.e_faceA; + subVec2(manifold.localNormal, cLocal, v22); + normalizeVec2(manifold.localNormal); + copyVec2(manifold.localPoint, v22); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + } else { + combine2Vec2(faceCenter, 0.5, v13, 0.5, v22); + var separation_1 = dotVec2(cLocal, normals[vertIndex1]) - dotVec2(faceCenter, normals[vertIndex1]); + if (separation_1 > radius) { + return; } + manifold.pointCount = 1; + manifold.type = ManifoldType.e_faceA; + copyVec2(manifold.localNormal, normals[vertIndex1]); + copyVec2(manifold.localPoint, faceCenter); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + } }; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_min$1 = Math.min; +var math_min$1 = Math.min; Contact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact); Contact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact); -/** @internal */ function EdgePolygonContact(manifold, xfA, fA, indexA, xfB, fB, indexB) { - CollideEdgePolygon(manifold, fA.getShape(), xfA, fB.getShape(), xfB); +function EdgePolygonContact(manifold, xfA2, fA, indexA, xfB2, fB, indexB) { + CollideEdgePolygon(manifold, fA.getShape(), xfA2, fB.getShape(), xfB2); } -// reused -/** @internal */ var edge_reuse = new EdgeShape(); -/** @internal */ function ChainPolygonContact(manifold, xfA, fA, indexA, xfB, fB, indexB) { - var chain = fA.getShape(); - chain.getChildEdge(edge_reuse, indexA); - CollideEdgePolygon(manifold, edge_reuse, xfA, fB.getShape(), xfB); +var edge_reuse = new EdgeShape(); +function ChainPolygonContact(manifold, xfA2, fA, indexA, xfB2, fB, indexB) { + var chain = fA.getShape(); + chain.getChildEdge(edge_reuse, indexA); + CollideEdgePolygon(manifold, edge_reuse, xfA2, fB.getShape(), xfB2); } -/** @internal */ var EPAxisType; -(function (EPAxisType) { - EPAxisType[EPAxisType["e_unknown"] = -1] = "e_unknown"; - EPAxisType[EPAxisType["e_edgeA"] = 1] = "e_edgeA"; - EPAxisType[EPAxisType["e_edgeB"] = 2] = "e_edgeB"; +var EPAxisType; +(function(EPAxisType2) { + EPAxisType2[EPAxisType2["e_unknown"] = -1] = "e_unknown"; + EPAxisType2[EPAxisType2["e_edgeA"] = 1] = "e_edgeA"; + EPAxisType2[EPAxisType2["e_edgeB"] = 2] = "e_edgeB"; })(EPAxisType || (EPAxisType = {})); -// unused? -/** @internal */ var VertexType; -(function (VertexType) { - VertexType[VertexType["e_isolated"] = 0] = "e_isolated"; - VertexType[VertexType["e_concave"] = 1] = "e_concave"; - VertexType[VertexType["e_convex"] = 2] = "e_convex"; +var VertexType; +(function(VertexType2) { + VertexType2[VertexType2["e_isolated"] = 0] = "e_isolated"; + VertexType2[VertexType2["e_concave"] = 1] = "e_concave"; + VertexType2[VertexType2["e_convex"] = 2] = "e_convex"; })(VertexType || (VertexType = {})); -/** - * This structure is used to keep track of the best separating axis. - */ -/** @internal */ var EPAxis = /** @class */ (function () { - function EPAxis() { - } - return EPAxis; -}()); -/** - * This holds polygon B expressed in frame A. - */ -/** @internal */ var TempPolygon = /** @class */ (function () { - function TempPolygon() { - this.vertices = []; // [Settings.maxPolygonVertices] - this.normals = []; // [Settings.maxPolygonVertices]; - this.count = 0; - for (var i = 0; i < SettingsInternal.maxPolygonVertices; i++) { - this.vertices.push(vec2(0, 0)); - this.normals.push(vec2(0, 0)); - } - } - return TempPolygon; -}()); -/** - * Reference face used for clipping - */ -/** @internal */ var ReferenceFace = /** @class */ (function () { - function ReferenceFace() { - this.v1 = vec2(0, 0); - this.v2 = vec2(0, 0); - this.normal = vec2(0, 0); - this.sideNormal1 = vec2(0, 0); - this.sideNormal2 = vec2(0, 0); - } - ReferenceFace.prototype.recycle = function () { - zeroVec2(this.v1); - zeroVec2(this.v2); - zeroVec2(this.normal); - zeroVec2(this.sideNormal1); - zeroVec2(this.sideNormal2); - }; - return ReferenceFace; -}()); -// reused -/** @internal */ var clipPoints1 = [new ClipVertex(), new ClipVertex()]; -/** @internal */ var clipPoints2 = [new ClipVertex(), new ClipVertex()]; -/** @internal */ var ie = [new ClipVertex(), new ClipVertex()]; -/** @internal */ var edgeAxis = new EPAxis(); -/** @internal */ var polygonAxis = new EPAxis(); -/** @internal */ var polygonBA = new TempPolygon(); -/** @internal */ var rf = new ReferenceFace(); -/** @internal */ var centroidB = vec2(0, 0); -/** @internal */ var edge0 = vec2(0, 0); -/** @internal */ var edge1 = vec2(0, 0); -/** @internal */ var edge2 = vec2(0, 0); -/** @internal */ var xf = transform(0, 0, 0); -/** @internal */ var normal = vec2(0, 0); -/** @internal */ var normal0 = vec2(0, 0); -/** @internal */ var normal1 = vec2(0, 0); -/** @internal */ var normal2 = vec2(0, 0); -/** @internal */ var lowerLimit = vec2(0, 0); -/** @internal */ var upperLimit = vec2(0, 0); -/** @internal */ var perp = vec2(0, 0); -/** @internal */ var n = vec2(0, 0); -/** - * This function collides and edge and a polygon, taking into account edge - * adjacency. - */ -var CollideEdgePolygon = function (manifold, edgeA, xfA, polygonB, xfB) { - // Algorithm: - // 1. Classify v1 and v2 - // 2. Classify polygon centroid as front or back - // 3. Flip normal if necessary - // 4. Initialize normal range to [-pi, pi] about face normal - // 5. Adjust normal range according to adjacent edges - // 6. Visit each separating axes, only accept axes within the range - // 7. Return if _any_ axis indicates separation - // 8. Clip - // let m_type1: VertexType; - // let m_type2: VertexType; - detransformTransform(xf, xfA, xfB); - transformVec2(centroidB, xf, polygonB.m_centroid); - var v0 = edgeA.m_vertex0; - var v1 = edgeA.m_vertex1; - var v2 = edgeA.m_vertex2; - var v3 = edgeA.m_vertex3; - var hasVertex0 = edgeA.m_hasVertex0; - var hasVertex3 = edgeA.m_hasVertex3; - subVec2(edge1, v2, v1); - normalizeVec2(edge1); - setVec2(normal1, edge1.y, -edge1.x); - var offset1 = dotVec2(normal1, centroidB) - dotVec2(normal1, v1); - var offset0 = 0.0; - var offset2 = 0.0; - var convex1 = false; - var convex2 = false; - zeroVec2(normal0); - zeroVec2(normal2); - // Is there a preceding edge? - if (hasVertex0) { - subVec2(edge0, v1, v0); - normalizeVec2(edge0); - setVec2(normal0, edge0.y, -edge0.x); - convex1 = crossVec2Vec2(edge0, edge1) >= 0.0; - offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0); - } - // Is there a following edge? - if (hasVertex3) { - subVec2(edge2, v3, v2); - normalizeVec2(edge2); - setVec2(normal2, edge2.y, -edge2.x); - convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0.0; - offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v2); - } - var front; - zeroVec2(normal); - zeroVec2(lowerLimit); - zeroVec2(upperLimit); - // Determine front or back collision. Determine collision normal limits. - if (hasVertex0 && hasVertex3) { - if (convex1 && convex2) { - front = offset0 >= 0.0 || offset1 >= 0.0 || offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal0); - copyVec2(upperLimit, normal2); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal1); - scaleVec2(upperLimit, -1, normal1); - } - } - else if (convex1) { - front = offset0 >= 0.0 || (offset1 >= 0.0 && offset2 >= 0.0); - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal0); - copyVec2(upperLimit, normal1); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal2); - scaleVec2(upperLimit, -1, normal1); - } - } - else if (convex2) { - front = offset2 >= 0.0 || (offset0 >= 0.0 && offset1 >= 0.0); - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal1); - copyVec2(upperLimit, normal2); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal1); - scaleVec2(upperLimit, -1, normal0); - } - } - else { - front = offset0 >= 0.0 && offset1 >= 0.0 && offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal1); - copyVec2(upperLimit, normal1); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal2); - scaleVec2(upperLimit, -1, normal0); - } - } - } - else if (hasVertex0) { - if (convex1) { - front = offset0 >= 0.0 || offset1 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal0); - scaleVec2(upperLimit, -1, normal1); - } - else { - scaleVec2(normal, -1, normal1); - copyVec2(lowerLimit, normal1); - scaleVec2(upperLimit, -1, normal1); - } - } - else { - front = offset0 >= 0.0 && offset1 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal1); - scaleVec2(upperLimit, -1, normal1); - } - else { - scaleVec2(normal, -1, normal1); - copyVec2(lowerLimit, normal1); - scaleVec2(upperLimit, -1, normal0); - } - } - } - else if (hasVertex3) { - if (convex2) { - front = offset1 >= 0.0 || offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - scaleVec2(lowerLimit, -1, normal1); - copyVec2(upperLimit, normal2); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal1); - copyVec2(upperLimit, normal1); - } - } - else { - front = offset1 >= 0.0 && offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - scaleVec2(lowerLimit, -1, normal1); - copyVec2(upperLimit, normal1); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal2); - copyVec2(upperLimit, normal1); - } - } - } - else { - front = offset1 >= 0.0; - if (front) { - copyVec2(normal, normal1); - scaleVec2(lowerLimit, -1, normal1); - scaleVec2(upperLimit, -1, normal1); - } - else { - scaleVec2(normal, -1, normal1); - copyVec2(lowerLimit, normal1); - copyVec2(upperLimit, normal1); - } - } - // Get polygonB in frameA - polygonBA.count = polygonB.m_count; - for (var i = 0; i < polygonB.m_count; ++i) { - transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]); - rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]); - } - var radius = polygonB.m_radius + edgeA.m_radius; - manifold.pointCount = 0; - { // ComputeEdgeSeparation - edgeAxis.type = EPAxisType.e_edgeA; - edgeAxis.index = front ? 0 : 1; - edgeAxis.separation = Infinity; - for (var i = 0; i < polygonBA.count; ++i) { - var v = polygonBA.vertices[i]; - var s = dotVec2(normal, v) - dotVec2(normal, v1); - if (s < edgeAxis.separation) { - edgeAxis.separation = s; - } - } - } - // If no valid normal can be found than this edge should not collide. - // @ts-ignore todo: why we need this if here? - if (edgeAxis.type == EPAxisType.e_unknown) { - return; - } - if (edgeAxis.separation > radius) { - return; - } - { // ComputePolygonSeparation - polygonAxis.type = EPAxisType.e_unknown; - polygonAxis.index = -1; - polygonAxis.separation = -Infinity; - setVec2(perp, -normal.y, normal.x); - for (var i = 0; i < polygonBA.count; ++i) { - scaleVec2(n, -1, polygonBA.normals[i]); - var s1 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v1); - var s2 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v2); - var s = math_min$1(s1, s2); - if (s > radius) { - // No collision - polygonAxis.type = EPAxisType.e_edgeB; - polygonAxis.index = i; - polygonAxis.separation = s; - break; - } - // Adjacency - if (dotVec2(n, perp) >= 0.0) { - if (dotVec2(n, normal) - dotVec2(upperLimit, normal) < -SettingsInternal.angularSlop) { - continue; - } - } - else { - if (dotVec2(n, normal) - dotVec2(lowerLimit, normal) < -SettingsInternal.angularSlop) { - continue; - } - } - if (s > polygonAxis.separation) { - polygonAxis.type = EPAxisType.e_edgeB; - polygonAxis.index = i; - polygonAxis.separation = s; - } - } - } - if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) { - return; - } - // Use hysteresis for jitter reduction. - var k_relativeTol = 0.98; - var k_absoluteTol = 0.001; - var primaryAxis; - if (polygonAxis.type == EPAxisType.e_unknown) { - primaryAxis = edgeAxis; - } - else if (polygonAxis.separation > k_relativeTol * edgeAxis.separation + k_absoluteTol) { - primaryAxis = polygonAxis; - } - else { - primaryAxis = edgeAxis; - } - ie[0].recycle(), ie[1].recycle(); - if (primaryAxis.type == EPAxisType.e_edgeA) { - manifold.type = ManifoldType.e_faceA; - // Search for the polygon normal that is most anti-parallel to the edge - // normal. - var bestIndex = 0; - var bestValue = dotVec2(normal, polygonBA.normals[0]); - for (var i = 1; i < polygonBA.count; ++i) { - var value = dotVec2(normal, polygonBA.normals[i]); - if (value < bestValue) { - bestValue = value; - bestIndex = i; - } - } - var i1 = bestIndex; - var i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0; - copyVec2(ie[0].v, polygonBA.vertices[i1]); - ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex); - copyVec2(ie[1].v, polygonBA.vertices[i2]); - ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex); - if (front) { - rf.i1 = 0; - rf.i2 = 1; - copyVec2(rf.v1, v1); - copyVec2(rf.v2, v2); - copyVec2(rf.normal, normal1); - } - else { - rf.i1 = 1; - rf.i2 = 0; - copyVec2(rf.v1, v2); - copyVec2(rf.v2, v1); - scaleVec2(rf.normal, -1, normal1); - } - } - else { - manifold.type = ManifoldType.e_faceB; - copyVec2(ie[0].v, v1); - ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face); - copyVec2(ie[1].v, v2); - ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face); - rf.i1 = primaryAxis.index; - rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0; - copyVec2(rf.v1, polygonBA.vertices[rf.i1]); - copyVec2(rf.v2, polygonBA.vertices[rf.i2]); - copyVec2(rf.normal, polygonBA.normals[rf.i1]); +var EPAxis = ( + /** @class */ + /* @__PURE__ */ function() { + function EPAxis2() { } - setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x); - setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y); - rf.sideOffset1 = dotVec2(rf.sideNormal1, rf.v1); - rf.sideOffset2 = dotVec2(rf.sideNormal2, rf.v2); - // Clip incident edge against extruded edge1 side edges. - clipPoints1[0].recycle(), clipPoints1[1].recycle(); - clipPoints2[0].recycle(), clipPoints2[1].recycle(); - // Clip to box side 1 - var np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1); - if (np1 < SettingsInternal.maxManifoldPoints) { - return; + return EPAxis2; + }() +); +var TempPolygon = ( + /** @class */ + /* @__PURE__ */ function() { + function TempPolygon2() { + this.vertices = []; + this.normals = []; + this.count = 0; + for (var i = 0; i < SettingsInternal.maxPolygonVertices; i++) { + this.vertices.push(vec2(0, 0)); + this.normals.push(vec2(0, 0)); + } } - // Clip to negative box side 1 - var np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2); - if (np2 < SettingsInternal.maxManifoldPoints) { - return; + return TempPolygon2; + }() +); +var ReferenceFace = ( + /** @class */ + function() { + function ReferenceFace2() { + this.v1 = vec2(0, 0); + this.v2 = vec2(0, 0); + this.normal = vec2(0, 0); + this.sideNormal1 = vec2(0, 0); + this.sideNormal2 = vec2(0, 0); + } + ReferenceFace2.prototype.recycle = function() { + zeroVec2(this.v1); + zeroVec2(this.v2); + zeroVec2(this.normal); + zeroVec2(this.sideNormal1); + zeroVec2(this.sideNormal2); + }; + return ReferenceFace2; + }() +); +var clipPoints1 = [new ClipVertex(), new ClipVertex()]; +var clipPoints2 = [new ClipVertex(), new ClipVertex()]; +var ie = [new ClipVertex(), new ClipVertex()]; +var edgeAxis = new EPAxis(); +var polygonAxis = new EPAxis(); +var polygonBA = new TempPolygon(); +var rf = new ReferenceFace(); +var centroidB = vec2(0, 0); +var edge0 = vec2(0, 0); +var edge1 = vec2(0, 0); +var edge2 = vec2(0, 0); +var xf = transform(0, 0, 0); +var normal = vec2(0, 0); +var normal0 = vec2(0, 0); +var normal1 = vec2(0, 0); +var normal2 = vec2(0, 0); +var lowerLimit = vec2(0, 0); +var upperLimit = vec2(0, 0); +var perp = vec2(0, 0); +var n = vec2(0, 0); +var CollideEdgePolygon = function(manifold, edgeA, xfA2, polygonB, xfB2) { + detransformTransform(xf, xfA2, xfB2); + transformVec2(centroidB, xf, polygonB.m_centroid); + var v0 = edgeA.m_vertex0; + var v13 = edgeA.m_vertex1; + var v22 = edgeA.m_vertex2; + var v3 = edgeA.m_vertex3; + var hasVertex0 = edgeA.m_hasVertex0; + var hasVertex3 = edgeA.m_hasVertex3; + subVec2(edge1, v22, v13); + normalizeVec2(edge1); + setVec2(normal1, edge1.y, -edge1.x); + var offset1 = dotVec2(normal1, centroidB) - dotVec2(normal1, v13); + var offset0 = 0; + var offset2 = 0; + var convex1 = false; + var convex2 = false; + zeroVec2(normal0); + zeroVec2(normal2); + if (hasVertex0) { + subVec2(edge0, v13, v0); + normalizeVec2(edge0); + setVec2(normal0, edge0.y, -edge0.x); + convex1 = crossVec2Vec2(edge0, edge1) >= 0; + offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0); + } + if (hasVertex3) { + subVec2(edge2, v3, v22); + normalizeVec2(edge2); + setVec2(normal2, edge2.y, -edge2.x); + convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0; + offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v22); + } + var front; + zeroVec2(normal); + zeroVec2(lowerLimit); + zeroVec2(upperLimit); + if (hasVertex0 && hasVertex3) { + if (convex1 && convex2) { + front = offset0 >= 0 || offset1 >= 0 || offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal0); + copyVec2(upperLimit, normal2); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal1); + scaleVec2(upperLimit, -1, normal1); + } + } else if (convex1) { + front = offset0 >= 0 || offset1 >= 0 && offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal0); + copyVec2(upperLimit, normal1); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal2); + scaleVec2(upperLimit, -1, normal1); + } + } else if (convex2) { + front = offset2 >= 0 || offset0 >= 0 && offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal1); + copyVec2(upperLimit, normal2); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal1); + scaleVec2(upperLimit, -1, normal0); + } + } else { + front = offset0 >= 0 && offset1 >= 0 && offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal1); + copyVec2(upperLimit, normal1); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal2); + scaleVec2(upperLimit, -1, normal0); + } + } + } else if (hasVertex0) { + if (convex1) { + front = offset0 >= 0 || offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal0); + scaleVec2(upperLimit, -1, normal1); + } else { + scaleVec2(normal, -1, normal1); + copyVec2(lowerLimit, normal1); + scaleVec2(upperLimit, -1, normal1); + } + } else { + front = offset0 >= 0 && offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal1); + scaleVec2(upperLimit, -1, normal1); + } else { + scaleVec2(normal, -1, normal1); + copyVec2(lowerLimit, normal1); + scaleVec2(upperLimit, -1, normal0); + } + } + } else if (hasVertex3) { + if (convex2) { + front = offset1 >= 0 || offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + scaleVec2(lowerLimit, -1, normal1); + copyVec2(upperLimit, normal2); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal1); + copyVec2(upperLimit, normal1); + } + } else { + front = offset1 >= 0 && offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + scaleVec2(lowerLimit, -1, normal1); + copyVec2(upperLimit, normal1); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal2); + copyVec2(upperLimit, normal1); + } } - // Now clipPoints2 contains the clipped points. - if (primaryAxis.type == EPAxisType.e_edgeA) { - copyVec2(manifold.localNormal, rf.normal); - copyVec2(manifold.localPoint, rf.v1); + } else { + front = offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + scaleVec2(lowerLimit, -1, normal1); + scaleVec2(upperLimit, -1, normal1); + } else { + scaleVec2(normal, -1, normal1); + copyVec2(lowerLimit, normal1); + copyVec2(upperLimit, normal1); } - else { - copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]); - copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]); + } + polygonBA.count = polygonB.m_count; + for (var i = 0; i < polygonB.m_count; ++i) { + transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]); + rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]); + } + var radius = polygonB.m_radius + edgeA.m_radius; + manifold.pointCount = 0; + { + edgeAxis.type = EPAxisType.e_edgeA; + edgeAxis.index = front ? 0 : 1; + edgeAxis.separation = Infinity; + for (var i = 0; i < polygonBA.count; ++i) { + var v4 = polygonBA.vertices[i]; + var s2 = dotVec2(normal, v4) - dotVec2(normal, v13); + if (s2 < edgeAxis.separation) { + edgeAxis.separation = s2; + } } - var pointCount = 0; - for (var i = 0; i < SettingsInternal.maxManifoldPoints; ++i) { - var separation = dotVec2(rf.normal, clipPoints2[i].v) - dotVec2(rf.normal, rf.v1); - if (separation <= radius) { - var cp = manifold.points[pointCount]; // ManifoldPoint - if (primaryAxis.type == EPAxisType.e_edgeA) { - detransformVec2(cp.localPoint, xf, clipPoints2[i].v); - cp.id.set(clipPoints2[i].id); - } - else { - copyVec2(cp.localPoint, clipPoints2[i].v); - cp.id.set(clipPoints2[i].id); - cp.id.swapFeatures(); - } - ++pointCount; + } + if (edgeAxis.type == EPAxisType.e_unknown) { + return; + } + if (edgeAxis.separation > radius) { + return; + } + { + polygonAxis.type = EPAxisType.e_unknown; + polygonAxis.index = -1; + polygonAxis.separation = -Infinity; + setVec2(perp, -normal.y, normal.x); + for (var i = 0; i < polygonBA.count; ++i) { + scaleVec2(n, -1, polygonBA.normals[i]); + var s1 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v13); + var s22 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v22); + var s2 = math_min$1(s1, s22); + if (s2 > radius) { + polygonAxis.type = EPAxisType.e_edgeB; + polygonAxis.index = i; + polygonAxis.separation = s2; + break; + } + if (dotVec2(n, perp) >= 0) { + if (dotVec2(n, normal) - dotVec2(upperLimit, normal) < -SettingsInternal.angularSlop) { + continue; + } + } else { + if (dotVec2(n, normal) - dotVec2(lowerLimit, normal) < -SettingsInternal.angularSlop) { + continue; } + } + if (s2 > polygonAxis.separation) { + polygonAxis.type = EPAxisType.e_edgeB; + polygonAxis.index = i; + polygonAxis.separation = s2; + } + } + } + if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) { + return; + } + var k_relativeTol = 0.98; + var k_absoluteTol = 1e-3; + var primaryAxis; + if (polygonAxis.type == EPAxisType.e_unknown) { + primaryAxis = edgeAxis; + } else if (polygonAxis.separation > k_relativeTol * edgeAxis.separation + k_absoluteTol) { + primaryAxis = polygonAxis; + } else { + primaryAxis = edgeAxis; + } + ie[0].recycle(), ie[1].recycle(); + if (primaryAxis.type == EPAxisType.e_edgeA) { + manifold.type = ManifoldType.e_faceA; + var bestIndex = 0; + var bestValue = dotVec2(normal, polygonBA.normals[0]); + for (var i = 1; i < polygonBA.count; ++i) { + var value = dotVec2(normal, polygonBA.normals[i]); + if (value < bestValue) { + bestValue = value; + bestIndex = i; + } + } + var i1 = bestIndex; + var i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0; + copyVec2(ie[0].v, polygonBA.vertices[i1]); + ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex); + copyVec2(ie[1].v, polygonBA.vertices[i2]); + ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex); + if (front) { + rf.i1 = 0; + rf.i2 = 1; + copyVec2(rf.v1, v13); + copyVec2(rf.v2, v22); + copyVec2(rf.normal, normal1); + } else { + rf.i1 = 1; + rf.i2 = 0; + copyVec2(rf.v1, v22); + copyVec2(rf.v2, v13); + scaleVec2(rf.normal, -1, normal1); + } + } else { + manifold.type = ManifoldType.e_faceB; + copyVec2(ie[0].v, v13); + ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face); + copyVec2(ie[1].v, v22); + ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face); + rf.i1 = primaryAxis.index; + rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0; + copyVec2(rf.v1, polygonBA.vertices[rf.i1]); + copyVec2(rf.v2, polygonBA.vertices[rf.i2]); + copyVec2(rf.normal, polygonBA.normals[rf.i1]); + } + setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x); + setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y); + rf.sideOffset1 = dotVec2(rf.sideNormal1, rf.v1); + rf.sideOffset2 = dotVec2(rf.sideNormal2, rf.v2); + clipPoints1[0].recycle(), clipPoints1[1].recycle(); + clipPoints2[0].recycle(), clipPoints2[1].recycle(); + var np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1); + if (np1 < SettingsInternal.maxManifoldPoints) { + return; + } + var np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2); + if (np2 < SettingsInternal.maxManifoldPoints) { + return; + } + if (primaryAxis.type == EPAxisType.e_edgeA) { + copyVec2(manifold.localNormal, rf.normal); + copyVec2(manifold.localPoint, rf.v1); + } else { + copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]); + copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]); + } + var pointCount = 0; + for (var i = 0; i < SettingsInternal.maxManifoldPoints; ++i) { + var separation = dotVec2(rf.normal, clipPoints2[i].v) - dotVec2(rf.normal, rf.v1); + if (separation <= radius) { + var cp = manifold.points[pointCount]; + if (primaryAxis.type == EPAxisType.e_edgeA) { + detransformVec2(cp.localPoint, xf, clipPoints2[i].v); + cp.id.set(clipPoints2[i].id); + } else { + copyVec2(cp.localPoint, clipPoints2[i].v); + cp.id.set(clipPoints2[i].id); + cp.id.swapFeatures(); + } + ++pointCount; } - manifold.pointCount = pointCount; + } + manifold.pointCount = pointCount; }; - -/** @hidden @deprecated Merged with main namespace */ var internal = { - CollidePolygons: CollidePolygons, - Settings: Settings, - Sweep: Sweep, - Manifold: Manifold, - Distance: Distance, - TimeOfImpact: TimeOfImpact, - DynamicTree: DynamicTree, - stats: stats$1 + CollidePolygons, + Settings, + Sweep, + Manifold, + Distance, + TimeOfImpact, + DynamicTree, + stats: stats$1 }; - /** * Stage.js 1.0.0-alpha.5 * @@ -16138,8 +11697,8 @@ function clamp(num, min, max) { return num; } } -function length(x, y) { - return math_sqrt$1(x * x + y * y); +function length(x2, y) { + return math_sqrt$1(x2 * x2 + y * y); } var math = Object.create(Math); math.random = random; @@ -16151,17 +11710,17 @@ math.limit = clamp; var Matrix = ( /** @class */ function() { - function Matrix2(a, b, c, d, e, f) { + function Matrix2(a2, b2, c2, d2, e3, f) { this.a = 1; this.b = 0; this.c = 0; this.d = 1; this.e = 0; this.f = 0; - if (typeof a === "object") { - this.reset(a); + if (typeof a2 === "object") { + this.reset(a2); } else { - this.reset(a, b, c, d, e, f); + this.reset(a2, b2, c2, d2, e3, f); } } Matrix2.prototype.toString = function() { @@ -16170,21 +11729,21 @@ var Matrix = ( Matrix2.prototype.clone = function() { return new Matrix2(this.a, this.b, this.c, this.d, this.e, this.f); }; - Matrix2.prototype.reset = function(a, b, c, d, e, f) { + Matrix2.prototype.reset = function(a2, b2, c2, d2, e3, f) { this._dirty = true; - if (typeof a === "object") { - this.a = a.a; - this.d = a.d; - this.b = a.b; - this.c = a.c; - this.e = a.e; - this.f = a.f; + if (typeof a2 === "object") { + this.a = a2.a; + this.d = a2.d; + this.b = a2.b; + this.c = a2.c; + this.e = a2.e; + this.f = a2.f; } else { - this.a = typeof a === "number" ? a : 1; - this.b = typeof b === "number" ? b : 0; - this.c = typeof c === "number" ? c : 0; - this.d = typeof d === "number" ? d : 1; - this.e = typeof e === "number" ? e : 0; + this.a = typeof a2 === "number" ? a2 : 1; + this.b = typeof b2 === "number" ? b2 : 0; + this.c = typeof c2 === "number" ? c2 : 0; + this.d = typeof d2 === "number" ? d2 : 1; + this.e = typeof e3 === "number" ? e3 : 0; this.f = typeof f === "number" ? f : 0; } return this; @@ -16205,75 +11764,75 @@ var Matrix = ( } this._dirty = true; var u = angle ? Math.cos(angle) : 1; - var v = angle ? Math.sin(angle) : 0; - var a = u * this.a - v * this.b; - var b = u * this.b + v * this.a; - var c = u * this.c - v * this.d; - var d = u * this.d + v * this.c; - var e = u * this.e - v * this.f; - var f = u * this.f + v * this.e; - this.a = a; - this.b = b; - this.c = c; - this.d = d; - this.e = e; + var v3 = angle ? Math.sin(angle) : 0; + var a2 = u * this.a - v3 * this.b; + var b2 = u * this.b + v3 * this.a; + var c2 = u * this.c - v3 * this.d; + var d2 = u * this.d + v3 * this.c; + var e3 = u * this.e - v3 * this.f; + var f = u * this.f + v3 * this.e; + this.a = a2; + this.b = b2; + this.c = c2; + this.d = d2; + this.e = e3; this.f = f; return this; }; - Matrix2.prototype.translate = function(x, y) { - if (!x && !y) { + Matrix2.prototype.translate = function(x2, y) { + if (!x2 && !y) { return this; } this._dirty = true; - this.e += x; + this.e += x2; this.f += y; return this; }; - Matrix2.prototype.scale = function(x, y) { - if (!(x - 1) && !(y - 1)) { + Matrix2.prototype.scale = function(x2, y) { + if (!(x2 - 1) && !(y - 1)) { return this; } this._dirty = true; - this.a *= x; + this.a *= x2; this.b *= y; - this.c *= x; + this.c *= x2; this.d *= y; - this.e *= x; + this.e *= x2; this.f *= y; return this; }; - Matrix2.prototype.skew = function(x, y) { - if (!x && !y) { + Matrix2.prototype.skew = function(x2, y) { + if (!x2 && !y) { return this; } this._dirty = true; - var a = this.a + this.b * x; - var b = this.b + this.a * y; - var c = this.c + this.d * x; - var d = this.d + this.c * y; - var e = this.e + this.f * x; + var a2 = this.a + this.b * x2; + var b2 = this.b + this.a * y; + var c2 = this.c + this.d * x2; + var d2 = this.d + this.c * y; + var e3 = this.e + this.f * x2; var f = this.f + this.e * y; - this.a = a; - this.b = b; - this.c = c; - this.d = d; - this.e = e; + this.a = a2; + this.b = b2; + this.c = c2; + this.d = d2; + this.e = e3; this.f = f; return this; }; Matrix2.prototype.concat = function(m) { this._dirty = true; - var a = this.a * m.a + this.b * m.c; - var b = this.b * m.d + this.a * m.b; - var c = this.c * m.a + this.d * m.c; - var d = this.d * m.d + this.c * m.b; - var e = this.e * m.a + m.e + this.f * m.c; + var a2 = this.a * m.a + this.b * m.c; + var b2 = this.b * m.d + this.a * m.b; + var c2 = this.c * m.a + this.d * m.c; + var d2 = this.d * m.d + this.c * m.b; + var e3 = this.e * m.a + m.e + this.f * m.c; var f = this.f * m.d + m.f + this.e * m.b; - this.a = a; - this.b = b; - this.c = c; - this.d = d; - this.e = e; + this.a = a2; + this.b = b2; + this.c = c2; + this.d = d2; + this.e = e3; this.f = f; return this; }; @@ -16299,19 +11858,19 @@ var Matrix = ( q.y = this.b * p.x + this.d * p.y + this.f; return q; }; - Matrix2.prototype.mapX = function(x, y) { - if (typeof x === "object") { - y = x.y; - x = x.x; + Matrix2.prototype.mapX = function(x2, y) { + if (typeof x2 === "object") { + y = x2.y; + x2 = x2.x; } - return this.a * x + this.c * y + this.e; + return this.a * x2 + this.c * y + this.e; }; - Matrix2.prototype.mapY = function(x, y) { - if (typeof x === "object") { - y = x.y; - x = x.x; + Matrix2.prototype.mapY = function(x2, y) { + if (typeof x2 === "object") { + y = x2.y; + x2 = x2.x; } - return this.b * x + this.d * y + this.f; + return this.b * x2 + this.d * y + this.f; }; return Matrix2; }() @@ -16344,16 +11903,16 @@ var Texture = ( this.dx = 0; this.dy = 0; } - Texture2.prototype.setSourceCoordinate = function(x, y) { - this.sx = x; + Texture2.prototype.setSourceCoordinate = function(x2, y) { + this.sx = x2; this.sy = y; }; Texture2.prototype.setSourceDimension = function(w, h) { this.sw = w; this.sh = h; }; - Texture2.prototype.setDestinationCoordinate = function(x, y) { - this.dx = x; + Texture2.prototype.setDestinationCoordinate = function(x2, y) { + this.dx = x2; this.dy = y; }; Texture2.prototype.setDestinationDimension = function(w, h) { @@ -16391,25 +11950,25 @@ var Texture = ( return Texture2; }() ); -var __extends$9 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); +var __extends$9 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); function __() { - this.constructor = d; + this.constructor = d2; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); }; }(); var ImageTexture = ( @@ -16467,25 +12026,25 @@ var ImageTexture = ( return ImageTexture2; }(Texture) ); -var __extends$8 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); +var __extends$8 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); function __() { - this.constructor = d; + this.constructor = d2; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); }; }(); var PipeTexture = ( @@ -16501,12 +12060,12 @@ var PipeTexture = ( this._source = texture2; }; PipeTexture2.prototype.getWidth = function() { - var _a, _b; - return (_b = (_a = this.dw) !== null && _a !== void 0 ? _a : this.sw) !== null && _b !== void 0 ? _b : this._source.getWidth(); + var _a2, _b; + return (_b = (_a2 = this.dw) !== null && _a2 !== void 0 ? _a2 : this.sw) !== null && _b !== void 0 ? _b : this._source.getWidth(); }; PipeTexture2.prototype.getHeight = function() { - var _a, _b; - return (_b = (_a = this.dh) !== null && _a !== void 0 ? _a : this.sh) !== null && _b !== void 0 ? _b : this._source.getHeight(); + var _a2, _b; + return (_b = (_a2 = this.dh) !== null && _a2 !== void 0 ? _a2 : this.sh) !== null && _b !== void 0 ? _b : this._source.getHeight(); }; PipeTexture2.prototype.prerender = function(context) { return this._source.prerender(context); @@ -16521,52 +12080,52 @@ var PipeTexture = ( return PipeTexture2; }(Texture) ); -var __extends$7 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); +var __extends$7 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); function __() { - this.constructor = d; + this.constructor = d2; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); }; }(); -var __awaiter$1 = function(thisArg, _arguments, P, generator) { +var __awaiter$1 = function(thisArg, _arguments, P3, generator) { function adopt(value) { - return value instanceof P ? value : new P(function(resolve) { + return value instanceof P3 ? value : new P3(function(resolve) { resolve(value); }); } - return new (P || (P = Promise))(function(resolve, reject) { + return new (P3 || (P3 = Promise))(function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); - } catch (e) { - reject(e); + } catch (e3) { + reject(e3); } } function rejected(value) { try { step(generator["throw"](value)); - } catch (e) { - reject(e); + } catch (e3) { + reject(e3); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); + step((generator = generator.apply(thisArg, [])).next()); }); }; var __generator$1 = function(thisArg, body) { @@ -16578,9 +12137,9 @@ var __generator$1 = function(thisArg, body) { return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { - return function(v) { - return step([n, v]); + function verb(n2) { + return function(v3) { + return step([n2, v3]); }; } function step(op) { @@ -16634,8 +12193,8 @@ var __generator$1 = function(thisArg, body) { continue; } op = body.call(thisArg, _); - } catch (e) { - op = [6, e]; + } catch (e3) { + op = [6, e3]; y = 0; } finally { f = t = 0; @@ -16645,122 +12204,120 @@ var __generator$1 = function(thisArg, body) { return { value: op[0] ? op[1] : void 0, done: true }; } }; -var Atlas = ( - /** @class */ - function(_super) { - __extends$7(Atlas2, _super); - function Atlas2(def) { - if (def === void 0) { - def = {}; - } - var _this = _super.call(this) || this; - _this.pipeSpriteTexture = function(def2) { - var map = _this._map; - var ppu = _this._ppu; - var trim = _this._trim; - if (!def2) { - return void 0; - } - def2 = Object.assign({}, def2); - if (isFn(map)) { - def2 = map(def2); - } - if (ppu != 1) { - def2.x *= ppu; - def2.y *= ppu; - def2.width *= ppu; - def2.height *= ppu; - def2.top *= ppu; - def2.bottom *= ppu; - def2.left *= ppu; - def2.right *= ppu; - } - if (trim != 0) { - def2.x += trim; - def2.y += trim; - def2.width -= 2 * trim; - def2.height -= 2 * trim; - def2.top -= trim; - def2.bottom -= trim; - def2.left -= trim; - def2.right -= trim; - } - var texture2 = new PipeTexture(_this); - texture2.top = def2.top; - texture2.bottom = def2.bottom; - texture2.left = def2.left; - texture2.right = def2.right; - texture2.setSourceCoordinate(def2.x, def2.y); - texture2.setSourceDimension(def2.width, def2.height); - return texture2; - }; - _this.findSpriteDefinition = function(query) { - var textures = _this._textures; - if (textures) { - if (isFn(textures)) { - return textures(query); - } else if (isHash(textures)) { - return textures[query]; - } - } - }; - _this.select = function(query) { - if (!query) { - return new TextureSelection(new PipeTexture(_this)); - } - var textureDefinition = _this.findSpriteDefinition(query); - if (textureDefinition) { - return new TextureSelection(textureDefinition, _this); - } - }; - _this.name = def.name; - _this._ppu = def.ppu || def.ratio || 1; - _this._trim = def.trim || 0; - _this._map = def.map || def.filter; - _this._textures = def.textures; - if (typeof def.image === "object" && isHash(def.image)) { - _this._imageSrc = def.image.src || def.image.url; - if (typeof def.image.ratio === "number") { - _this._pixelRatio = def.image.ratio; - } - } else { - if (typeof def.imagePath === "string") { - _this._imageSrc = def.imagePath; - } else if (typeof def.image === "string") { - _this._imageSrc = def.image; - } - if (typeof def.imageRatio === "number") { - _this._pixelRatio = def.imageRatio; - } - } - deprecatedWarning(def); - return _this; +/** @class */ +(function(_super) { + __extends$7(Atlas2, _super); + function Atlas2(def) { + if (def === void 0) { + def = {}; } - Atlas2.prototype.load = function() { - return __awaiter$1(this, void 0, void 0, function() { - var image2; - return __generator$1(this, function(_a) { - switch (_a.label) { - case 0: - if (!this._imageSrc) - return [3, 2]; - return [4, asyncLoadImage(this._imageSrc)]; - case 1: - image2 = _a.sent(); - this.setSourceImage(image2, this._pixelRatio); - _a.label = 2; - case 2: - return [ - 2 - /*return*/ - ]; - } - }); + var _this = _super.call(this) || this; + _this.pipeSpriteTexture = function(def2) { + var map = _this._map; + var ppu = _this._ppu; + var trim = _this._trim; + if (!def2) { + return void 0; + } + def2 = Object.assign({}, def2); + if (isFn(map)) { + def2 = map(def2); + } + if (ppu != 1) { + def2.x *= ppu; + def2.y *= ppu; + def2.width *= ppu; + def2.height *= ppu; + def2.top *= ppu; + def2.bottom *= ppu; + def2.left *= ppu; + def2.right *= ppu; + } + if (trim != 0) { + def2.x += trim; + def2.y += trim; + def2.width -= 2 * trim; + def2.height -= 2 * trim; + def2.top -= trim; + def2.bottom -= trim; + def2.left -= trim; + def2.right -= trim; + } + var texture2 = new PipeTexture(_this); + texture2.top = def2.top; + texture2.bottom = def2.bottom; + texture2.left = def2.left; + texture2.right = def2.right; + texture2.setSourceCoordinate(def2.x, def2.y); + texture2.setSourceDimension(def2.width, def2.height); + return texture2; + }; + _this.findSpriteDefinition = function(query) { + var textures = _this._textures; + if (textures) { + if (isFn(textures)) { + return textures(query); + } else if (isHash(textures)) { + return textures[query]; + } + } + }; + _this.select = function(query) { + if (!query) { + return new TextureSelection(new PipeTexture(_this)); + } + var textureDefinition = _this.findSpriteDefinition(query); + if (textureDefinition) { + return new TextureSelection(textureDefinition, _this); + } + }; + _this.name = def.name; + _this._ppu = def.ppu || def.ratio || 1; + _this._trim = def.trim || 0; + _this._map = def.map || def.filter; + _this._textures = def.textures; + if (typeof def.image === "object" && isHash(def.image)) { + _this._imageSrc = def.image.src || def.image.url; + if (typeof def.image.ratio === "number") { + _this._pixelRatio = def.image.ratio; + } + } else { + if (typeof def.imagePath === "string") { + _this._imageSrc = def.imagePath; + } else if (typeof def.image === "string") { + _this._imageSrc = def.image; + } + if (typeof def.imageRatio === "number") { + _this._pixelRatio = def.imageRatio; + } + } + deprecatedWarning(def); + return _this; + } + Atlas2.prototype.load = function() { + return __awaiter$1(this, void 0, void 0, function() { + var image2; + return __generator$1(this, function(_a2) { + switch (_a2.label) { + case 0: + if (!this._imageSrc) + return [3, 2]; + return [4, asyncLoadImage(this._imageSrc)]; + case 1: + image2 = _a2.sent(); + this.setSourceImage(image2, this._pixelRatio); + _a2.label = 2; + case 2: + return [ + 2 + /*return*/ + ]; + } }); - }; - return Atlas2; - }(ImageTexture) -); + }); + }; + return Atlas2; +})(ImageTexture); function asyncLoadImage(src) { return new Promise(function(resolve, reject) { var img = new Image(); @@ -16792,130 +12349,27 @@ function deprecatedWarning(def) { if (typeof def.image === "object" && "url" in def.image) console.warn("'image.url' field of atlas definition is deprecated"); } -var __extends$6 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); +var __extends$6 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); function __() { - this.constructor = d; + this.constructor = d2; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); }; }(); -var __awaiter = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve) { - resolve(value); - }); - } - return new (P || (P = Promise))(function(resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = function(thisArg, body) { - var _ = { label: 0, sent: function() { - if (t[0] & 1) - throw t[1]; - return t[1]; - }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { - return this; - }), g; - function verb(n) { - return function(v) { - return step([n, v]); - }; - } - function step(op) { - if (f) - throw new TypeError("Generator is already executing."); - while (_) - try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) - return t; - if (y = 0, t) - op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: - case 1: - t = op; - break; - case 4: - _.label++; - return { value: op[1], done: false }; - case 5: - _.label++; - y = op[1]; - op = [0]; - continue; - case 7: - op = _.ops.pop(); - _.trys.pop(); - continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { - _ = 0; - continue; - } - if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { - _.label = op[1]; - break; - } - if (op[0] === 6 && _.label < t[1]) { - _.label = t[1]; - t = op; - break; - } - if (t && _.label < t[2]) { - _.label = t[2]; - _.ops.push(op); - break; - } - if (t[2]) - _.ops.pop(); - _.trys.pop(); - continue; - } - op = body.call(thisArg, _); - } catch (e) { - op = [6, e]; - y = 0; - } finally { - f = t = 0; - } - if (op[0] & 5) - throw op[1]; - return { value: op[0] ? op[1] : void 0, done: true }; - } -}; function isAtlasSpriteDefinition(selection) { return typeof selection === "object" && isHash(selection) && "number" === typeof selection.width && "number" === typeof selection.height; } @@ -16985,11 +12439,11 @@ var NO_TEXTURE = new /** @class */ }; class_1.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) { }; - class_1.prototype.setSourceCoordinate = function(x, y) { + class_1.prototype.setSourceCoordinate = function(x2, y) { }; class_1.prototype.setSourceDimension = function(w, h) { }; - class_1.prototype.setDestinationCoordinate = function(x, y) { + class_1.prototype.setDestinationCoordinate = function(x2, y) { }; class_1.prototype.setDestinationDimension = function(w, h) { }; @@ -17000,29 +12454,6 @@ var NO_TEXTURE = new /** @class */ var NO_SELECTION = new TextureSelection(NO_TEXTURE); var ATLAS_MEMO_BY_NAME = {}; var ATLAS_ARRAY = []; -function atlas(def) { - return __awaiter(this, void 0, Promise, function() { - var atlas2; - return __generator(this, function(_a) { - switch (_a.label) { - case 0: - if (def instanceof Atlas) { - atlas2 = def; - } else { - atlas2 = new Atlas(def); - } - if (atlas2.name) { - ATLAS_MEMO_BY_NAME[atlas2.name] = atlas2; - } - ATLAS_ARRAY.push(atlas2); - return [4, atlas2.load()]; - case 1: - _a.sent(); - return [2, atlas2]; - } - }); - }); -} function texture(query) { if ("string" !== typeof query) { return new TextureSelection(query); @@ -17051,25 +12482,25 @@ function texture(query) { } return result; } -var __extends$5 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); +var __extends$5 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); function __() { - this.constructor = d; + this.constructor = d2; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); }; }(); var ResizableTexture = ( @@ -17083,12 +12514,12 @@ var ResizableTexture = ( return _this; } ResizableTexture2.prototype.getWidth = function() { - var _a; - return (_a = this.dw) !== null && _a !== void 0 ? _a : this._source.getWidth(); + var _a2; + return (_a2 = this.dw) !== null && _a2 !== void 0 ? _a2 : this._source.getWidth(); }; ResizableTexture2.prototype.getHeight = function() { - var _a; - return (_a = this.dh) !== null && _a !== void 0 ? _a : this._source.getHeight(); + var _a2; + return (_a2 = this.dh) !== null && _a2 !== void 0 ? _a2 : this._source.getHeight(); }; ResizableTexture2.prototype.prerender = function(context) { return false; @@ -17144,11 +12575,11 @@ var ResizableTexture = ( w = Math.min(width, r); r -= width; var t = top; - var b = outHeight; + var b2 = outHeight; var h = void 0; - while (b > 0) { - h = Math.min(height, b); - b -= height; + while (b2 > 0) { + h = Math.min(height, b2); + b2 -= height; texture2.draw(context, left, top, w, h, l, t, w, h); if (r <= 0) { if (left) { @@ -17320,15 +12751,15 @@ var Pin = ( return getters[key](this); } }; - Pin2.prototype.set = function(a, b) { - if (typeof a === "string") { - if (typeof setters[a] === "function" && typeof b !== "undefined") { - setters[a](this, b); + Pin2.prototype.set = function(a2, b2) { + if (typeof a2 === "string") { + if (typeof setters[a2] === "function" && typeof b2 !== "undefined") { + setters[a2](this, b2); } - } else if (typeof a === "object") { - for (b in a) { - if (typeof setters[b] === "function" && typeof a[b] !== "undefined") { - setters[b](this, a[b], a); + } else if (typeof a2 === "object") { + for (b2 in a2) { + if (typeof setters[b2] === "function" && typeof a2[b2] !== "undefined") { + setters[b2](this, a2[b2], a2); } } } @@ -17593,8 +13024,8 @@ var setters = { this.rotation(pin, 0); } }; -function IDENTITY(x) { - return x; +function IDENTITY(x2) { + return x2; } var LOOKUP_CACHE = {}; var MODE_BY_NAME = {}; @@ -17730,48 +13161,48 @@ addEaseFn({ }); addEaseFn({ name: "poly", - fc: function(e) { + fc: function(e3) { return function(t) { - return Math.pow(t, e); + return Math.pow(t, e3); }; } }); addEaseFn({ name: "elastic", - fc: function(a, p) { + fc: function(a2, p) { p = p || 0.45; - a = a || 1; - var s = p / (2 * Math.PI) * Math.asin(1 / a); + a2 = a2 || 1; + var s2 = p / (2 * Math.PI) * Math.asin(1 / a2); return function(t) { - return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p); + return 1 + a2 * Math.pow(2, -10 * t) * Math.sin((t - s2) * (2 * Math.PI) / p); }; } }); addEaseFn({ name: "back", - fc: function(s) { - s = typeof s !== "undefined" ? s : 1.70158; + fc: function(s2) { + s2 = typeof s2 !== "undefined" ? s2 : 1.70158; return function(t) { - return t * t * ((s + 1) * t - s); + return t * t * ((s2 + 1) * t - s2); }; } }); var Transition = ( /** @class */ function() { - function Transition2(owner, options) { - if (options === void 0) { - options = {}; + function Transition2(owner, options2) { + if (options2 === void 0) { + options2 = {}; } this.uid = "transition:" + uid(); this._ending = []; this._end = {}; - this._duration = options.duration || 400; - this._delay = options.delay || 0; + this._duration = options2.duration || 400; + this._delay = options2.delay || 0; this._owner = owner; this._time = 0; } - Transition2.prototype.tick = function(node, elapsed, now, last) { + Transition2.prototype.tick = function(node, elapsed, now2, last) { this._time += elapsed; if (this._time < this._delay) { return; @@ -17799,26 +13230,26 @@ var Transition = ( this._ending.forEach(function(callback) { try { callback.call(_this._owner); - } catch (e) { - console.error(e); + } catch (e3) { + console.error(e3); } }); return this._next; }; - Transition2.prototype.tween = function(a, b) { - var options; - if (typeof a === "object" && a !== null) { - options = a; + Transition2.prototype.tween = function(a2, b2) { + var options2; + if (typeof a2 === "object" && a2 !== null) { + options2 = a2; } else { - options = {}; - if (typeof a === "number") { - options.duration = a; - if (typeof b === "number") { - options.delay = b; + options2 = {}; + if (typeof a2 === "number") { + options2.duration = a2; + if (typeof b2 === "number") { + options2.delay = b2; } } } - return this._next = new Transition2(this._owner, options); + return this._next = new Transition2(this._owner, options2); }; Transition2.prototype.duration = function(duration) { this._duration = duration; @@ -17850,13 +13281,13 @@ var Transition = ( this._remove = true; return this; }; - Transition2.prototype.pin = function(a, b) { - if (typeof a === "object") { - for (var attr in a) { - pinning(this._owner, this._end, attr, a[attr]); + Transition2.prototype.pin = function(a2, b2) { + if (typeof a2 === "object") { + for (var attr in a2) { + pinning(this._owner, this._end, attr, a2[attr]); } - } else if (typeof b !== "undefined") { - pinning(this._owner, this._end, a, b); + } else if (typeof b2 !== "undefined") { + pinning(this._owner, this._end, a2, b2); } return this; }; @@ -17886,43 +13317,43 @@ var Transition = ( this.pin("height", h); return this; }; - Transition2.prototype.offset = function(a, b) { - if (typeof a === "object") { - b = a.y; - a = a.x; + Transition2.prototype.offset = function(a2, b2) { + if (typeof a2 === "object") { + b2 = a2.y; + a2 = a2.x; } - this.pin("offsetX", a); - this.pin("offsetY", b); + this.pin("offsetX", a2); + this.pin("offsetY", b2); return this; }; - Transition2.prototype.rotate = function(a) { - this.pin("rotation", a); + Transition2.prototype.rotate = function(a2) { + this.pin("rotation", a2); return this; }; - Transition2.prototype.skew = function(a, b) { - if (typeof a === "object") { - b = a.y; - a = a.x; - } else if (typeof b === "undefined") { - b = a; + Transition2.prototype.skew = function(a2, b2) { + if (typeof a2 === "object") { + b2 = a2.y; + a2 = a2.x; + } else if (typeof b2 === "undefined") { + b2 = a2; } - this.pin("skewX", a); - this.pin("skewY", b); + this.pin("skewX", a2); + this.pin("skewY", b2); return this; }; - Transition2.prototype.scale = function(a, b) { - if (typeof a === "object") { - b = a.y; - a = a.x; - } else if (typeof b === "undefined") { - b = a; + Transition2.prototype.scale = function(a2, b2) { + if (typeof a2 === "object") { + b2 = a2.y; + a2 = a2.x; + } else if (typeof b2 === "undefined") { + b2 = a2; } - this.pin("scaleX", a); - this.pin("scaleY", b); + this.pin("scaleX", a2); + this.pin("scaleY", b2); return this; }; - Transition2.prototype.alpha = function(a, ta) { - this.pin("alpha", a); + Transition2.prototype.alpha = function(a2, ta) { + this.pin("alpha", a2); if (typeof ta !== "undefined") { this.pin("textureAlpha", ta); } @@ -17947,30 +13378,9 @@ function assertType(obj) { } throw "Invalid node: " + obj; } -function create() { - return layout(); -} -function layer() { - return maximize(); -} -function box() { - return minimize(); -} function layout() { return new Node(); } -function row(align) { - return layout().row(align).label("Row"); -} -function column(align) { - return layout().column(align).label("Column"); -} -function minimize() { - return layout().minimize().label("Minimize"); -} -function maximize() { - return layout().maximize().label("Maximize"); -} var Node = ( /** @class */ function() { @@ -17997,17 +13407,17 @@ var Node = ( this.MAX_ELAPSE = Infinity; this._transitionTickInitied = false; this._transitionTickLastTime = 0; - this._transitionTick = function(elapsed, now, last) { + this._transitionTick = function(elapsed, now2, last) { if (!_this._transitions.length) { return false; } var ignore = _this._transitionTickLastTime !== last; - _this._transitionTickLastTime = now; + _this._transitionTickLastTime = now2; if (ignore) { return true; } var head = _this._transitions[0]; - var ended = head.tick(_this, elapsed, now, last); + var ended = head.tick(_this, elapsed, now2, last); if (ended) { if (head === _this._transitions[0]) { _this._transitions.shift(); @@ -18031,37 +13441,37 @@ var Node = ( return this._pin.absoluteMatrix(); }; Node2.prototype.getPixelRatio = function() { - var _a; - var m = (_a = this._parent) === null || _a === void 0 ? void 0 : _a.matrix(); + var _a2; + var m = (_a2 = this._parent) === null || _a2 === void 0 ? void 0 : _a2.matrix(); var pixelRatio = !m ? 1 : Math.max(Math.abs(m.a), Math.abs(m.b)) / getPixelRatio(); return pixelRatio; }; - Node2.prototype.pin = function(a, b) { - if (typeof a === "object") { - this._pin.set(a); + Node2.prototype.pin = function(a2, b2) { + if (typeof a2 === "object") { + this._pin.set(a2); return this; - } else if (typeof a === "string") { - if (typeof b === "undefined") { - return this._pin.get(a); + } else if (typeof a2 === "string") { + if (typeof b2 === "undefined") { + return this._pin.get(a2); } else { - this._pin.set(a, b); + this._pin.set(a2, b2); return this; } - } else if (typeof a === "undefined") { + } else if (typeof a2 === "undefined") { return this._pin; } }; - Node2.prototype.fit = function(a, b, c) { - if (typeof a === "object") { - c = b; - b = a.y; - a = a.x; + Node2.prototype.fit = function(a2, b2, c2) { + if (typeof a2 === "object") { + c2 = b2; + b2 = a2.y; + a2 = a2.x; } - this._pin.fit(a, b, c); + this._pin.fit(a2, b2, c2); return this; }; - Node2.prototype.scaleTo = function(a, b, c) { - return this.fit(a, b, c); + Node2.prototype.scaleTo = function(a2, b2, c2) { + return this.fit(a2, b2, c2); }; Node2.prototype.toString = function() { return "[" + this._label + "]"; @@ -18402,7 +13812,7 @@ var Node = ( context.globalAlpha = alpha; } if (this._textures) { - for (var i = 0, n = this._textures.length; i < n; i++) { + for (var i = 0, n2 = this._textures.length; i < n2; i++) { this._textures[i].draw(context); } } @@ -18416,7 +13826,7 @@ var Node = ( child.render(context); } }; - Node2.prototype._tick = function(elapsed, now, last) { + Node2.prototype._tick = function(elapsed, now2, last) { if (!this._visible) { return; } @@ -18428,7 +13838,7 @@ var Node = ( for (var i = 0; i < this._tickBefore.length; i++) { stats.tick++; var tickFn = this._tickBefore[i]; - ticked = tickFn.call(this, elapsed, now, last) === true || ticked; + ticked = tickFn.call(this, elapsed, now2, last) === true || ticked; } } var child; @@ -18436,20 +13846,20 @@ var Node = ( while (child = next) { next = child._next; if (child._flag("_tick")) { - ticked = child._tick(elapsed, now, last) === true ? true : ticked; + ticked = child._tick(elapsed, now2, last) === true ? true : ticked; } } if (this._tickAfter !== null) { for (var i = 0; i < this._tickAfter.length; i++) { stats.tick++; var tickFn = this._tickAfter[i]; - ticked = tickFn.call(this, elapsed, now, last) === true || ticked; + ticked = tickFn.call(this, elapsed, now2, last) === true || ticked; } } return ticked; }; Node2.prototype.tick = function(callback, before) { - var _a, _b; + var _a2, _b; if (before === void 0) { before = false; } @@ -18467,7 +13877,7 @@ var Node = ( } this._tickAfter.push(callback); } - var hasTickListener = ((_a = this._tickAfter) === null || _a === void 0 ? void 0 : _a.length) > 0 || ((_b = this._tickBefore) === null || _b === void 0 ? void 0 : _b.length) > 0; + var hasTickListener = ((_a2 = this._tickAfter) === null || _a2 === void 0 ? void 0 : _a2.length) > 0 || ((_b = this._tickBefore) === null || _b === void 0 ? void 0 : _b.length) > 0; this._flag("_tick", hasTickListener); }; Node2.prototype.untick = function(callback) { @@ -18596,64 +14006,64 @@ var Node = ( this.pin("height", h); return this; }; - Node2.prototype.offset = function(a, b) { - if (typeof a === "object") { - b = a.y; - a = a.x; + Node2.prototype.offset = function(a2, b2) { + if (typeof a2 === "object") { + b2 = a2.y; + a2 = a2.x; } - this.pin("offsetX", a); - this.pin("offsetY", b); + this.pin("offsetX", a2); + this.pin("offsetY", b2); return this; }; - Node2.prototype.rotate = function(a) { - this.pin("rotation", a); + Node2.prototype.rotate = function(a2) { + this.pin("rotation", a2); return this; }; - Node2.prototype.skew = function(a, b) { - if (typeof a === "object") { - b = a.y; - a = a.x; - } else if (typeof b === "undefined") - b = a; - this.pin("skewX", a); - this.pin("skewY", b); + Node2.prototype.skew = function(a2, b2) { + if (typeof a2 === "object") { + b2 = a2.y; + a2 = a2.x; + } else if (typeof b2 === "undefined") + b2 = a2; + this.pin("skewX", a2); + this.pin("skewY", b2); return this; }; - Node2.prototype.scale = function(a, b) { - if (typeof a === "object") { - b = a.y; - a = a.x; - } else if (typeof b === "undefined") - b = a; - this.pin("scaleX", a); - this.pin("scaleY", b); + Node2.prototype.scale = function(a2, b2) { + if (typeof a2 === "object") { + b2 = a2.y; + a2 = a2.x; + } else if (typeof b2 === "undefined") + b2 = a2; + this.pin("scaleX", a2); + this.pin("scaleY", b2); return this; }; - Node2.prototype.alpha = function(a, ta) { - this.pin("alpha", a); + Node2.prototype.alpha = function(a2, ta) { + this.pin("alpha", a2); if (typeof ta !== "undefined") { this.pin("textureAlpha", ta); } return this; }; - Node2.prototype.tween = function(a, b, c) { - var options; - if (typeof a === "object" && a !== null) { - options = a; + Node2.prototype.tween = function(a2, b2, c2) { + var options2; + if (typeof a2 === "object" && a2 !== null) { + options2 = a2; } else { - options = {}; - if (typeof a === "number") { - options.duration = a; - if (typeof b === "number") { - options.delay = b; - if (typeof c === "boolean") { - options.append = c; - } - } else if (typeof b === "boolean") { - options.append = b; + options2 = {}; + if (typeof a2 === "number") { + options2.duration = a2; + if (typeof b2 === "number") { + options2.delay = b2; + if (typeof c2 === "boolean") { + options2.append = c2; + } + } else if (typeof b2 === "boolean") { + options2.append = b2; } - } else if (typeof a === "boolean") { - options.append = a; + } else if (typeof a2 === "boolean") { + options2.append = a2; } } if (!this._transitionTickInitied) { @@ -18661,10 +14071,10 @@ var Node = ( this._transitionTickInitied = true; } this.touch(); - if (!options.append) { + if (!options2.append) { this._transitions.length = 0; } - var transition = new Transition(this, options); + var transition = new Transition(this, options2); this._transitions.push(transition); return transition; }; @@ -18783,25 +14193,25 @@ var Node = ( return Node2; }() ); -var __extends$4 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); +var __extends$4 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); function __() { - this.constructor = d; + this.constructor = d2; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); }; }(); function sprite(frame) { @@ -18885,27 +14295,25 @@ var Sprite = ( return Sprite2; }(Node) ); -var image = sprite; -var Image$1 = Sprite; -var __extends$3 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); +var __extends$3 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); function __() { - this.constructor = d; + this.constructor = d2; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); }; }(); var CanvasTexture = ( @@ -19008,22 +14416,6 @@ function canvas(type, attributes, legacyTextureDrawer) { return texture2; } } -function memoizeDraw(legacySpriteDrawer, legacySpriteMemoizer) { - if (legacySpriteMemoizer === void 0) { - legacySpriteMemoizer = function() { - return null; - }; - } - var sprite2 = new Sprite(); - var texture2 = new CanvasTexture(); - sprite2.texture(texture2); - texture2.setDrawer(function() { - legacySpriteDrawer(2.5 * texture2._lastPixelRatio, texture2, sprite2); - }); - texture2.setMemoizer(legacySpriteMemoizer); - return sprite2; -} -var POINTER_CLICK = "click"; var POINTER_START = "touchstart mousedown"; var POINTER_MOVE = "touchmove mousemove"; var POINTER_END = "touchend mouseup"; @@ -19165,8 +14557,8 @@ var Pointer = ( this.elem = elem; this.ratio = stage.viewport().ratio || 1; stage.on("viewport", function(viewport) { - var _a; - _this.ratio = (_a = viewport.ratio) !== null && _a !== void 0 ? _a : _this.ratio; + var _a2; + _this.ratio = (_a2 = viewport.ratio) !== null && _a2 !== void 0 ? _a2 : _this.ratio; }); elem.addEventListener("touchstart", this.handleStart); elem.addEventListener("touchend", this.handleEnd); @@ -19193,23 +14585,23 @@ var Pointer = ( return this; }; Pointer2.prototype.localPoint = function(event) { - var _a; + var _a2; var elem = this.elem; - var x; + var x2; var y; - if ((_a = event.touches) === null || _a === void 0 ? void 0 : _a.length) { - x = event.touches[0].clientX; + if ((_a2 = event.touches) === null || _a2 === void 0 ? void 0 : _a2.length) { + x2 = event.touches[0].clientX; y = event.touches[0].clientY; } else { - x = event.clientX; + x2 = event.clientX; y = event.clientY; } var rect = elem.getBoundingClientRect(); - x -= rect.left; + x2 -= rect.left; y -= rect.top; - x -= elem.clientLeft | 0; + x2 -= elem.clientLeft | 0; y -= elem.clientTop | 0; - PAYLOAD.x = x * this.ratio; + PAYLOAD.x = x2 * this.ratio; PAYLOAD.y = y * this.ratio; }; Pointer2.prototype.findTargets = function(type, result) { @@ -19253,57 +14645,39 @@ var Pointer = ( return Pointer2; }() ); -var Mouse = { - CLICK: "click", - START: "touchstart mousedown", - MOVE: "touchmove mousemove", - END: "touchend mouseup", - CANCEL: "touchcancel mousecancel" -}; -var __extends$2 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); +var __extends$2 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); function __() { - this.constructor = d; + this.constructor = d2; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); }; }(); var __assign = function() { __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) - if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; + for (var s2, i = 1, n2 = arguments.length; i < n2; i++) { + s2 = arguments[i]; + for (var p in s2) + if (Object.prototype.hasOwnProperty.call(s2, p)) + t[p] = s2[p]; } return t; }; return __assign.apply(this, arguments); }; -var ROOTS = []; -function pause() { - for (var i = ROOTS.length - 1; i >= 0; i--) { - ROOTS[i].pause(); - } -} -function resume() { - for (var i = ROOTS.length - 1; i >= 0; i--) { - ROOTS[i].resume(); - } -} function mount(configs) { if (configs === void 0) { configs = {}; @@ -19377,7 +14751,6 @@ var Root = ( _this.backingStoreRatio = backingStorePixelRatio; _this.pixelRatio = _this.devicePixelRatio / _this.backingStoreRatio; _this.mounted = true; - ROOTS.push(_this); _this.requestFrame(); }; _this.frameRequested = false; @@ -19389,7 +14762,7 @@ var Root = ( }; _this._lastFrameTime = 0; _this._mo_touch = null; - _this.onFrame = function(now) { + _this.onFrame = function(now2) { _this.frameRequested = false; if (!_this.mounted || !_this.canvas || !_this.context) { return; @@ -19412,14 +14785,14 @@ var Root = ( }); } } - var last = _this._lastFrameTime || now; - var elapsed = now - last; + var last = _this._lastFrameTime || now2; + var elapsed = now2 - last; if (!_this.mounted || _this.paused || _this.sleep) { return; } - _this._lastFrameTime = now; + _this._lastFrameTime = now2; _this.prerender(); - var tickRequest = _this._tick(elapsed, now, last); + var tickRequest = _this._tick(elapsed, now2, last); if (_this._mo_touch != _this._ts_touch) { _this._mo_touch = _this._ts_touch; _this.sleep = false; @@ -19462,13 +14835,9 @@ var Root = ( return _super.prototype.touch.call(this); }; Root2.prototype.unmount = function() { - var _a; + var _a2; this.mounted = false; - var index = ROOTS.indexOf(this); - if (index >= 0) { - ROOTS.splice(index, 1); - } - (_a = this.pointer) === null || _a === void 0 ? void 0 : _a.unmount(); + (_a2 = this.pointer) === null || _a2 === void 0 ? void 0 : _a2.unmount(); return this; }; Root2.prototype.background = function(color) { @@ -19482,10 +14851,10 @@ var Root = ( return Object.assign({}, this._viewport); } if (typeof width === "object") { - var options = width; - width = options.width; - height = options.height; - ratio = options.ratio; + var options2 = width; + width = options2.width; + height = options2.height; + ratio = options2.ratio; } if (typeof width === "number" && typeof height === "number") { this._viewport = { @@ -19561,282 +14930,212 @@ var Root = ( return Root2; }(Node) ); -var __extends$1 = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); +var __extends$1 = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); function __() { - this.constructor = d; + this.constructor = d2; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); }; }(); -function anim(frames, fps) { - var anim2 = new Anim(); - anim2.frames(frames).gotoFrame(0); - fps && anim2.fps(fps); - return anim2; -} var FPS = 15; -var Anim = ( - /** @class */ - function(_super) { - __extends$1(Anim2, _super); - function Anim2() { - var _this = _super.call(this) || this; - _this.label("Anim"); - _this._textures = []; - _this._fps = FPS; - _this._ft = 1e3 / _this._fps; - _this._time = -1; - _this._repeat = 0; - _this._index = 0; - _this._frames = []; - var lastTime = 0; - _this.tick(function(t, now, last) { - if (this._time < 0 || this._frames.length <= 1) { - return; - } - var ignore = lastTime != last; - lastTime = now; - if (ignore) { - return true; - } - this._time += t; - if (this._time < this._ft) { - return true; - } - var n = this._time / this._ft | 0; - this._time -= n * this._ft; - this.moveFrame(n); - if (this._repeat > 0 && (this._repeat -= n) <= 0) { - this.stop(); - this._callback && this._callback(); - return false; - } - return true; - }, false); - return _this; - } - Anim2.prototype.fps = function(fps) { - if (typeof fps === "undefined") { - return this._fps; - } - this._fps = fps > 0 ? fps : FPS; - this._ft = 1e3 / this._fps; - return this; - }; - Anim2.prototype.setFrames = function(frames) { - return this.frames(frames); - }; - Anim2.prototype.frames = function(frames) { - this._index = 0; - this._frames = texture(frames).array(); - this.touch(); - return this; - }; - Anim2.prototype.length = function() { - return this._frames ? this._frames.length : 0; - }; - Anim2.prototype.gotoFrame = function(frame, resize) { - if (resize === void 0) { - resize = false; +/** @class */ +(function(_super) { + __extends$1(Anim2, _super); + function Anim2() { + var _this = _super.call(this) || this; + _this.label("Anim"); + _this._textures = []; + _this._fps = FPS; + _this._ft = 1e3 / _this._fps; + _this._time = -1; + _this._repeat = 0; + _this._index = 0; + _this._frames = []; + var lastTime = 0; + _this.tick(function(t, now2, last) { + if (this._time < 0 || this._frames.length <= 1) { + return; } - this._index = math.wrap(frame, this._frames.length) | 0; - resize = resize || !this._textures[0]; - this._textures[0] = this._frames[this._index]; - if (resize) { - this.pin("width", this._textures[0].getWidth()); - this.pin("height", this._textures[0].getHeight()); + var ignore = lastTime != last; + lastTime = now2; + if (ignore) { + return true; } - this.touch(); - return this; - }; - Anim2.prototype.moveFrame = function(move) { - return this.gotoFrame(this._index + move); - }; - Anim2.prototype.repeat = function(repeat, callback) { - this._repeat = repeat * this._frames.length - 1; - this._callback = callback; - this.play(); - return this; - }; - Anim2.prototype.play = function(frame) { - if (typeof frame !== "undefined") { - this.gotoFrame(frame); - this._time = 0; - } else if (this._time < 0) { - this._time = 0; + this._time += t; + if (this._time < this._ft) { + return true; } - this.touch(); - return this; - }; - Anim2.prototype.stop = function(frame) { - this._time = -1; - if (typeof frame !== "undefined") { - this.gotoFrame(frame); + var n2 = this._time / this._ft | 0; + this._time -= n2 * this._ft; + this.moveFrame(n2); + if (this._repeat > 0 && (this._repeat -= n2) <= 0) { + this.stop(); + this._callback && this._callback(); + return false; } - return this; - }; - return Anim2; - }(Node) -); -var __extends = function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); + return true; + }, false); + return _this; + } + Anim2.prototype.fps = function(fps) { + if (typeof fps === "undefined") { + return this._fps; + } + this._fps = fps > 0 ? fps : FPS; + this._ft = 1e3 / this._fps; + return this; + }; + Anim2.prototype.setFrames = function(frames) { + return this.frames(frames); + }; + Anim2.prototype.frames = function(frames) { + this._index = 0; + this._frames = texture(frames).array(); + this.touch(); + return this; + }; + Anim2.prototype.length = function() { + return this._frames ? this._frames.length : 0; + }; + Anim2.prototype.gotoFrame = function(frame, resize) { + if (resize === void 0) { + resize = false; + } + this._index = math.wrap(frame, this._frames.length) | 0; + resize = resize || !this._textures[0]; + this._textures[0] = this._frames[this._index]; + if (resize) { + this.pin("width", this._textures[0].getWidth()); + this.pin("height", this._textures[0].getHeight()); + } + this.touch(); + return this; + }; + Anim2.prototype.moveFrame = function(move) { + return this.gotoFrame(this._index + move); + }; + Anim2.prototype.repeat = function(repeat, callback) { + this._repeat = repeat * this._frames.length - 1; + this._callback = callback; + this.play(); + return this; + }; + Anim2.prototype.play = function(frame) { + if (typeof frame !== "undefined") { + this.gotoFrame(frame); + this._time = 0; + } else if (this._time < 0) { + this._time = 0; + } + this.touch(); + return this; + }; + Anim2.prototype.stop = function(frame) { + this._time = -1; + if (typeof frame !== "undefined") { + this.gotoFrame(frame); + } + return this; + }; + return Anim2; +})(Node); +var __extends = /* @__PURE__ */ function() { + var extendStatics2 = function(d2, b2) { + extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d22, b22) { + d22.__proto__ = b22; + } || function(d22, b22) { + for (var p in b22) + if (Object.prototype.hasOwnProperty.call(b22, p)) + d22[p] = b22[p]; + }; + return extendStatics2(d2, b2); + }; + return function(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics2(d2, b2); + function __() { + this.constructor = d2; + } + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); + }; +}(); +/** @class */ +(function(_super) { + __extends(Monotype2, _super); + function Monotype2() { + var _this = _super.call(this) || this; + _this.label("String"); + _this._textures = []; + return _this; + } + Monotype2.prototype.setFont = function(frames) { + return this.frames(frames); }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { - this.constructor = d; + Monotype2.prototype.frames = function(frames) { + this._textures = []; + if (typeof frames == "string") { + var selection_1 = texture(frames); + this._font = function(value) { + return selection_1.one(value); + }; + } else if (typeof frames === "object") { + this._font = function(value) { + return frames[value]; + }; + } else if (typeof frames === "function") { + this._font = frames; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + return this; }; -}(); -function monotype(chars) { - return new Monotype().frames(chars); -} -var Monotype = ( - /** @class */ - function(_super) { - __extends(Monotype2, _super); - function Monotype2() { - var _this = _super.call(this) || this; - _this.label("String"); - _this._textures = []; - return _this; + Monotype2.prototype.setValue = function(value) { + return this.value(value); + }; + Monotype2.prototype.value = function(value) { + if (typeof value === "undefined") { + return this._value; } - Monotype2.prototype.setFont = function(frames) { - return this.frames(frames); - }; - Monotype2.prototype.frames = function(frames) { - this._textures = []; - if (typeof frames == "string") { - var selection_1 = texture(frames); - this._font = function(value) { - return selection_1.one(value); - }; - } else if (typeof frames === "object") { - this._font = function(value) { - return frames[value]; - }; - } else if (typeof frames === "function") { - this._font = frames; - } - return this; - }; - Monotype2.prototype.setValue = function(value) { - return this.value(value); - }; - Monotype2.prototype.value = function(value) { - if (typeof value === "undefined") { - return this._value; - } - if (this._value === value) { - return this; - } - this._value = value; - if (value === null) { - value = ""; - } else if (typeof value !== "string" && !Array.isArray(value)) { - value = value.toString(); - } - this._spacing = this._spacing || 0; - var width = 0; - var height = 0; - for (var i = 0; i < value.length; i++) { - var v = value[i]; - var texture_1 = this._textures[i] = this._font(typeof v === "string" ? v : v + ""); - width += i > 0 ? this._spacing : 0; - texture_1.setDestinationCoordinate(width, 0); - width = width + texture_1.getWidth(); - height = Math.max(height, texture_1.getHeight()); - } - this.pin("width", width); - this.pin("height", height); - this._textures.length = value.length; + if (this._value === value) { return this; - }; - return Monotype2; - }(Node) -); -var string = monotype; -var Str = Monotype; -const Stage = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ - __proto__: null, - Anim, - Atlas, - CanvasTexture, - Image: Image$1, - ImageTexture, - Math: math, - Matrix, - Monotype, - Mouse, - Node, - POINTER_CANCEL, - POINTER_CLICK, - POINTER_END, - POINTER_MOVE, - POINTER_START, - Pin, - PipeTexture, - Pointer, - ResizableTexture, - Root, - Sprite, - Str, - Texture, - TextureSelection, - Transition, - anim, - atlas, - box, - canvas, - clamp, - column, - create, - image, - isValidFitMode, - layer, - layout, - length, - math, - maximize, - memoizeDraw, - minimize, - monotype, - mount, - pause, - random, - resume, - row, - sprite, - string, - texture, - wrap -}, Symbol.toStringTag, { value: "Module" })); - + } + this._value = value; + if (value === null) { + value = ""; + } else if (typeof value !== "string" && !Array.isArray(value)) { + value = value.toString(); + } + this._spacing = this._spacing || 0; + var width = 0; + var height = 0; + for (var i = 0; i < value.length; i++) { + var v3 = value[i]; + var texture_1 = this._textures[i] = this._font(typeof v3 === "string" ? v3 : v3 + ""); + width += i > 0 ? this._spacing : 0; + texture_1.setDestinationCoordinate(width, 0); + width = width + texture_1.getWidth(); + height = Math.max(height, texture_1.getHeight()); + } + this.pin("width", width); + this.pin("height", height); + this._textures.length = value.length; + return this; + }; + return Monotype2; +})(Node); var math_atan2 = Math.atan2; var math_abs = Math.abs; var math_sqrt = Math.sqrt; @@ -19844,837 +15143,904 @@ var math_PI = Math.PI; var math_max = Math.max; var math_min = Math.min; var mounted = null; -/** @internal */ function memo() { - var memory = []; - function recall() { - var rest = []; - for (var _i = 0; _i < arguments.length; _i++) { - rest[_i] = arguments[_i]; - } - var equal = memory.length === rest.length; - for (var i = 0; equal && i < rest.length; i++) { - equal = equal && memory[i] === rest[i]; - memory[i] = rest[i]; - } - memory.length = rest.length; - return equal; - } - function reset() { - memory.length = 0; - // void 0; - } - return { - recall: recall, - reset: reset, - }; + var memory = []; + function recall() { + var rest = []; + for (var _i = 0; _i < arguments.length; _i++) { + rest[_i] = arguments[_i]; + } + var equal = memory.length === rest.length; + for (var i = 0; equal && i < rest.length; i++) { + equal = equal && memory[i] === rest[i]; + memory[i] = rest[i]; + } + memory.length = rest.length; + return equal; + } + function reset() { + memory.length = 0; + } + return { + recall, + reset + }; } -Testbed.mount = function () { - if (mounted) { - return mounted; - } - mounted = new StageTestbed(); - // todo: merge rest of this into StageTestbed - // todo: should we create these elements if not exists? - var playButton = document.getElementById('testbed-play'); - var statusElement = document.getElementById('testbed-status'); - var infoElement = document.getElementById('testbed-info'); - if (playButton) { - playButton.addEventListener('click', function () { - mounted.isPaused() ? mounted.resume() : mounted.pause(); - }); - mounted._pause = function () { - playButton.classList.add('pause'); - playButton.classList.remove('play'); - }; - mounted._resume = function () { - playButton.classList.add('play'); - playButton.classList.remove('pause'); - }; - } - else { - console.log("Please create a button with id='testbed-play'"); +Testbed.mount = function() { + if (mounted) { + return mounted; + } + mounted = new StageTestbed(); + var playButton = document.getElementById("testbed-play"); + var statusElement = document.getElementById("testbed-status"); + var infoElement = document.getElementById("testbed-info"); + if (playButton) { + playButton.addEventListener("click", function() { + mounted.isPaused() ? mounted.resume() : mounted.pause(); + }); + mounted._pause = function() { + playButton.classList.add("pause"); + playButton.classList.remove("play"); + }; + mounted._resume = function() { + playButton.classList.add("play"); + playButton.classList.remove("pause"); + }; + } else { + console.log("Please create a button with id='testbed-play'"); + } + var lastStatus = ""; + if (statusElement) { + statusElement.innerText = lastStatus; + } + mounted._status = function(text) { + if (lastStatus === text) { + return; } - var lastStatus = ''; + lastStatus = text; if (statusElement) { - statusElement.innerText = lastStatus; + statusElement.innerText = text; } - mounted._status = function (text) { - if (lastStatus === text) { - return; - } - lastStatus = text; - if (statusElement) { - statusElement.innerText = text; - } - }; - var lastInfo = ''; + }; + var lastInfo = ""; + if (infoElement) { + infoElement.innerText = lastInfo; + } + mounted._info = function(text) { + if (lastInfo === text) { + return; + } + lastInfo = text; if (infoElement) { - infoElement.innerText = lastInfo; + infoElement.innerText = text; } - mounted._info = function (text) { - if (lastInfo === text) { - return; - } - lastInfo = text; - if (infoElement) { - infoElement.innerText = text; - } - }; - return mounted; + }; + return mounted; }; -var getStyle = function (obj) { - var _a, _b; - return (_b = (_a = obj['render']) !== null && _a !== void 0 ? _a : obj['style']) !== null && _b !== void 0 ? _b : {}; +var getStyle = function(obj) { + var _a2, _b; + return (_b = (_a2 = obj["render"]) !== null && _a2 !== void 0 ? _a2 : obj["style"]) !== null && _b !== void 0 ? _b : {}; }; -function findBody(world, point) { - var body = null; - var aabb = { - lowerBound: point, - upperBound: point, - }; - world.queryAABB(aabb, function (fixture) { - if (!fixture.getBody().isDynamic() || !fixture.testPoint(point)) { - return true; - } - body = fixture.getBody(); - return false; - }); - return body; +function findBody(world, point2) { + var body = null; + var aabb = { + lowerBound: point2, + upperBound: point2 + }; + world.queryAABB(aabb, function(fixture) { + if (!fixture.getBody().isDynamic() || !fixture.testPoint(point2)) { + return true; + } + body = fixture.getBody(); + return false; + }); + return body; } -/** @internal */ -var StageTestbed = /** @class */ (function (_super) { - __extends$a(StageTestbed, _super); - function StageTestbed() { - var _this = _super !== null && _super.apply(this, arguments) || this; +var StageTestbed = ( + /** @class */ + function(_super) { + __extends$a(StageTestbed2, _super); + function StageTestbed2() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.paused = false; + _this.lastDrawHash = ""; + _this.newDrawHash = ""; + _this.buffer = []; + _this.statusText = ""; + _this.statusMap = {}; + _this.drawSegment = _this.drawEdge; + return _this; + } + StageTestbed2.prototype.start = function(world) { + var _this = this; + var stage = this.stage = mount(); + var canvas2 = this.canvas = stage.dom; + var testbed2 = this; + this.canvas = canvas2; + stage.on(POINTER_START, function() { + var _a2; + window.focus(); + (_a2 = document.activeElement) === null || _a2 === void 0 ? void 0 : _a2.blur(); + canvas2.focus(); + }); + stage.MAX_ELAPSE = 1e3 / 30; + stage.on("resume", function() { _this.paused = false; - _this.lastDrawHash = ""; + _this._resume(); + }); + stage.on("pause", function() { + _this.paused = true; + _this._pause(); + }); + var drawingTexture = new CanvasTexture(); + drawingTexture.draw = function(ctx) { + var pixelRatio = 2 * drawingTexture.getOptimalPixelRatio(); + ctx.save(); + ctx.transform(1, 0, 0, _this.scaleY, -_this.x, -_this.y); + ctx.lineWidth = 3 / pixelRatio; + ctx.lineCap = "round"; + for (var drawing = _this.buffer.shift(); drawing; drawing = _this.buffer.shift()) { + drawing(ctx, pixelRatio); + } + ctx.restore(); + }; + var drawingElement = sprite(drawingTexture); + stage.append(drawingElement); + stage.tick(function() { + _this.buffer.length = 0; + }, true); + stage.background(this.background); + stage.viewbox(this.width, this.height); + stage.pin("alignX", -0.5); + stage.pin("alignY", -0.5); + var worldNode = new WorldStageNode(world, this); + stage.prepend(worldNode); + var lastX = 0; + var lastY = 0; + stage.tick(function(dt, t) { + if (lastX !== _this.x || lastY !== _this.y) { + worldNode.offset(-_this.x, -_this.y); + lastX = _this.x; + lastY = _this.y; + } + }); + worldNode.tick(function(dt, t) { + _this.step(dt, t); + if (targetBody) { + _this.drawSegment(targetBody.getPosition(), mouseMove, "rgba(255,255,255,0.2)"); + } + if (_this.lastDrawHash !== _this.newDrawHash) { + _this.lastDrawHash = _this.newDrawHash; + stage.touch(); + } _this.newDrawHash = ""; - _this.buffer = []; - _this.statusText = ''; - _this.statusMap = {}; - _this.drawSegment = _this.drawEdge; - return _this; - } - StageTestbed.prototype.start = function (world) { - var _this = this; - var stage = this.stage = Stage.mount(); - var canvas = this.canvas = stage.dom; - // eslint-disable-next-line @typescript-eslint/no-this-alias - var testbed = this; - this.canvas = canvas; - stage.on(Stage.POINTER_START, function () { - var _a; - window.focus(); - // @ts-ignore - (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.blur(); - canvas.focus(); - }); - stage.MAX_ELAPSE = 1000 / 30; - stage.on('resume', function () { - _this.paused = false; - _this._resume(); - }); - stage.on('pause', function () { - _this.paused = true; - _this._pause(); - }); - var drawingTexture = new Stage.CanvasTexture(); - drawingTexture.draw = function (ctx) { - var pixelRatio = 2 * drawingTexture.getOptimalPixelRatio(); - ctx.save(); - ctx.transform(1, 0, 0, _this.scaleY, -_this.x, -_this.y); - ctx.lineWidth = 3 / pixelRatio; - ctx.lineCap = 'round'; - for (var drawing = _this.buffer.shift(); drawing; drawing = _this.buffer.shift()) { - drawing(ctx, pixelRatio); - } - ctx.restore(); - }; - var drawingElement = Stage.sprite(drawingTexture); - stage.append(drawingElement); - stage.tick(function () { - _this.buffer.length = 0; - }, true); - stage.background(this.background); - stage.viewbox(this.width, this.height); - stage.pin('alignX', -0.5); - stage.pin('alignY', -0.5); - var worldNode = new WorldStageNode(world, this); - // stage.empty(); - stage.prepend(worldNode); - var lastX = 0; - var lastY = 0; - stage.tick(function (dt, t) { - // update camera position - if (lastX !== _this.x || lastY !== _this.y) { - worldNode.offset(-_this.x, -_this.y); - lastX = _this.x; - lastY = _this.y; - } - }); - worldNode.tick(function (dt, t) { - _this.step(dt, t); - if (targetBody) { - _this.drawSegment(targetBody.getPosition(), mouseMove, 'rgba(255,255,255,0.2)'); - } - if (_this.lastDrawHash !== _this.newDrawHash) { - _this.lastDrawHash = _this.newDrawHash; - stage.touch(); - } - _this.newDrawHash = ""; - return true; - }); - var mouseGround = world.createBody(); - var mouseJoint = null; - var targetBody = null; - var mouseMove = { x: 0, y: 0 }; - worldNode.attr('spy', true); - worldNode.on(Stage.POINTER_START, function (point) { - point = { x: point.x, y: testbed.scaleY * point.y }; - if (targetBody) { - return; - } - var body = findBody(world, point); - if (!body) { - return; - } - if (_this.mouseForce) { - targetBody = body; - } - else { - mouseJoint = new MouseJoint({ maxForce: 1000 }, mouseGround, body, { x: point.x, y: point.y }); - world.createJoint(mouseJoint); - } - }); - worldNode.on(Stage.POINTER_MOVE, function (point) { - point = { x: point.x, y: testbed.scaleY * point.y }; - if (mouseJoint) { - mouseJoint.setTarget(point); - } - mouseMove.x = point.x; - mouseMove.y = point.y; - }); - worldNode.on(Stage.POINTER_END, function (point) { - point = { x: point.x, y: testbed.scaleY * point.y }; - if (mouseJoint) { - world.destroyJoint(mouseJoint); - mouseJoint = null; - } - if (targetBody && _this.mouseForce) { - var target = targetBody.getPosition(); - var force = { - x: (point.x - target.x) * _this.mouseForce, - y: (point.y - target.y) * _this.mouseForce, - }; - targetBody.applyForceToCenter(force, true); - targetBody = null; - } - }); - worldNode.on(Stage.POINTER_CANCEL, function (point) { - point = { x: point.x, y: testbed.scaleY * point.y }; - if (mouseJoint) { - world.destroyJoint(mouseJoint); - mouseJoint = null; - } - if (targetBody) { - targetBody = null; - } - }); - var activeKeys = testbed.activeKeys; - var downKeys = {}; - function updateActiveKeys(keyCode, down) { - var char = String.fromCharCode(keyCode); - if (/\w/.test(char)) { - activeKeys[char] = down; - } - activeKeys.right = downKeys[39] || activeKeys['D']; - activeKeys.left = downKeys[37] || activeKeys['A']; - activeKeys.up = downKeys[38] || activeKeys['W']; - activeKeys.down = downKeys[40] || activeKeys['S']; - activeKeys.fire = downKeys[32] || downKeys[13]; - } - window.addEventListener("keydown", function (e) { - var keyCode = e.keyCode; - downKeys[keyCode] = true; - updateActiveKeys(keyCode, true); - testbed.keydown && testbed.keydown(keyCode, String.fromCharCode(keyCode)); - }); - window.addEventListener("keyup", function (e) { - var keyCode = e.keyCode; - downKeys[keyCode] = false; - updateActiveKeys(keyCode, false); - testbed.keyup && testbed.keyup(keyCode, String.fromCharCode(keyCode)); - }); - this.resume(); - }; - /** @private @internal */ - StageTestbed.prototype.focus = function () { - // @ts-ignore - document.activeElement && document.activeElement.blur(); - this.canvas.focus(); - }; - /** @internal */ - StageTestbed.prototype._pause = function () { - }; - /** @internal */ - StageTestbed.prototype._resume = function () { - }; - StageTestbed.prototype.status = function (a, b) { - if (typeof b !== 'undefined') { - var key_1 = a; - var value_1 = b; - if (typeof value_1 !== 'function' && typeof value_1 !== 'object') { - this.statusMap[key_1] = value_1; - } + return true; + }); + var mouseGround = world.createBody(); + var mouseJoint = null; + var targetBody = null; + var mouseMove = { x: 0, y: 0 }; + worldNode.attr("spy", true); + worldNode.on(POINTER_START, function(point2) { + point2 = { x: point2.x, y: testbed2.scaleY * point2.y }; + if (targetBody) { + return; } - else if (a && typeof a === 'object') { - // tslint:disable-next-line:no-for-in - for (var key_2 in a) { - var value_2 = a[key_2]; - if (typeof value_2 !== 'function' && typeof value_2 !== 'object') { - this.statusMap[key_2] = value_2; - } - } + var body = findBody(world, point2); + if (!body) { + return; } - else if (typeof a === 'string') { - this.statusText = a; + if (_this.mouseForce) { + targetBody = body; + } else { + mouseJoint = new MouseJoint({ maxForce: 1e3 }, mouseGround, body, { x: point2.x, y: point2.y }); + world.createJoint(mouseJoint); } - var newline = '\n'; - var text = this.statusText || ''; - for (var key in this.statusMap) { - var value = this.statusMap[key]; - if (typeof value === 'function') - continue; - text += (text && newline) + key + ': ' + value; + }); + worldNode.on(POINTER_MOVE, function(point2) { + point2 = { x: point2.x, y: testbed2.scaleY * point2.y }; + if (mouseJoint) { + mouseJoint.setTarget(point2); + } + mouseMove.x = point2.x; + mouseMove.y = point2.y; + }); + worldNode.on(POINTER_END, function(point2) { + point2 = { x: point2.x, y: testbed2.scaleY * point2.y }; + if (mouseJoint) { + world.destroyJoint(mouseJoint); + mouseJoint = null; + } + if (targetBody && _this.mouseForce) { + var target = targetBody.getPosition(); + var force = { + x: (point2.x - target.x) * _this.mouseForce, + y: (point2.y - target.y) * _this.mouseForce + }; + targetBody.applyForceToCenter(force, true); + targetBody = null; + } + }); + worldNode.on(POINTER_CANCEL, function(point2) { + point2 = { x: point2.x, y: testbed2.scaleY * point2.y }; + if (mouseJoint) { + world.destroyJoint(mouseJoint); + mouseJoint = null; + } + if (targetBody) { + targetBody = null; } - this._status(text); + }); + var activeKeys = testbed2.activeKeys; + var downKeys = {}; + function updateActiveKeys(keyCode, down) { + var char = String.fromCharCode(keyCode); + if (/\w/.test(char)) { + activeKeys[char] = down; + } + activeKeys.right = downKeys[39] || activeKeys["D"]; + activeKeys.left = downKeys[37] || activeKeys["A"]; + activeKeys.up = downKeys[38] || activeKeys["W"]; + activeKeys.down = downKeys[40] || activeKeys["S"]; + activeKeys.fire = downKeys[32] || downKeys[13]; + } + window.addEventListener("keydown", function(e3) { + var keyCode = e3.keyCode; + downKeys[keyCode] = true; + updateActiveKeys(keyCode, true); + testbed2.keydown && testbed2.keydown(keyCode, String.fromCharCode(keyCode)); + }); + window.addEventListener("keyup", function(e3) { + var keyCode = e3.keyCode; + downKeys[keyCode] = false; + updateActiveKeys(keyCode, false); + testbed2.keyup && testbed2.keyup(keyCode, String.fromCharCode(keyCode)); + }); + this.resume(); }; - StageTestbed.prototype.info = function (text) { - this._info(text); + StageTestbed2.prototype.focus = function() { + document.activeElement && document.activeElement.blur(); + this.canvas.focus(); }; - /** @internal */ - StageTestbed.prototype._status = function (string) { + StageTestbed2.prototype._pause = function() { }; - /** @internal */ - StageTestbed.prototype._info = function (text) { + StageTestbed2.prototype._resume = function() { }; - /** @internal */ - StageTestbed.prototype.isPaused = function () { - return this.paused; + StageTestbed2.prototype.status = function(a2, b2) { + if (typeof b2 !== "undefined") { + var key_1 = a2; + var value_1 = b2; + if (typeof value_1 !== "function" && typeof value_1 !== "object") { + this.statusMap[key_1] = value_1; + } + } else if (a2 && typeof a2 === "object") { + for (var key_2 in a2) { + var value_2 = a2[key_2]; + if (typeof value_2 !== "function" && typeof value_2 !== "object") { + this.statusMap[key_2] = value_2; + } + } + } else if (typeof a2 === "string") { + this.statusText = a2; + } + var newline = "\n"; + var text = this.statusText || ""; + for (var key in this.statusMap) { + var value = this.statusMap[key]; + if (typeof value === "function") + continue; + text += (text && newline) + key + ": " + value; + } + this._status(text); }; - /** @internal */ - StageTestbed.prototype.togglePause = function () { - this.paused ? this.resume() : this.pause(); + StageTestbed2.prototype.info = function(text) { + this._info(text); }; - /** @internal */ - StageTestbed.prototype.pause = function () { - this.stage.pause(); + StageTestbed2.prototype._status = function(string) { }; - /** @internal */ - StageTestbed.prototype.resume = function () { - this.stage.resume(); - this.focus(); + StageTestbed2.prototype._info = function(text) { }; - StageTestbed.prototype.drawPoint = function (p, r, color) { - this.buffer.push(function (ctx, ratio) { - ctx.beginPath(); - ctx.arc(p.x, p.y, 5 / ratio, 0, 2 * math_PI); - ctx.strokeStyle = color; - ctx.stroke(); - }); - this.newDrawHash += "point" + p.x + ',' + p.y + ',' + r + ',' + color; - }; - StageTestbed.prototype.drawCircle = function (p, r, color) { - this.buffer.push(function (ctx) { - ctx.beginPath(); - ctx.arc(p.x, p.y, r, 0, 2 * math_PI); - ctx.strokeStyle = color; - ctx.stroke(); - }); - this.newDrawHash += "circle" + p.x + ',' + p.y + ',' + r + ',' + color; - }; - StageTestbed.prototype.drawEdge = function (a, b, color) { - this.buffer.push(function (ctx) { - ctx.beginPath(); - ctx.moveTo(a.x, a.y); - ctx.lineTo(b.x, b.y); - ctx.strokeStyle = color; - ctx.stroke(); - }); - this.newDrawHash += "segment" + a.x + ',' + a.y + ',' + b.x + ',' + b.y + ',' + color; + StageTestbed2.prototype.isPaused = function() { + return this.paused; }; - StageTestbed.prototype.drawPolygon = function (points, color) { - if (!points || !points.length) { - return; + StageTestbed2.prototype.togglePause = function() { + this.paused ? this.resume() : this.pause(); + }; + StageTestbed2.prototype.pause = function() { + this.stage.pause(); + }; + StageTestbed2.prototype.resume = function() { + this.stage.resume(); + this.focus(); + }; + StageTestbed2.prototype.drawPoint = function(p, r, color) { + this.buffer.push(function(ctx, ratio) { + ctx.beginPath(); + ctx.arc(p.x, p.y, 5 / ratio, 0, 2 * math_PI); + ctx.strokeStyle = color; + ctx.stroke(); + }); + this.newDrawHash += "point" + p.x + "," + p.y + "," + r + "," + color; + }; + StageTestbed2.prototype.drawCircle = function(p, r, color) { + this.buffer.push(function(ctx) { + ctx.beginPath(); + ctx.arc(p.x, p.y, r, 0, 2 * math_PI); + ctx.strokeStyle = color; + ctx.stroke(); + }); + this.newDrawHash += "circle" + p.x + "," + p.y + "," + r + "," + color; + }; + StageTestbed2.prototype.drawEdge = function(a2, b2, color) { + this.buffer.push(function(ctx) { + ctx.beginPath(); + ctx.moveTo(a2.x, a2.y); + ctx.lineTo(b2.x, b2.y); + ctx.strokeStyle = color; + ctx.stroke(); + }); + this.newDrawHash += "segment" + a2.x + "," + a2.y + "," + b2.x + "," + b2.y + "," + color; + }; + StageTestbed2.prototype.drawPolygon = function(points, color) { + if (!points || !points.length) { + return; + } + this.buffer.push(function(ctx) { + ctx.beginPath(); + ctx.moveTo(points[0].x, points[0].y); + for (var i2 = 1; i2 < points.length; i2++) { + ctx.lineTo(points[i2].x, points[i2].y); } - this.buffer.push(function (ctx) { - ctx.beginPath(); - ctx.moveTo(points[0].x, points[0].y); - for (var i = 1; i < points.length; i++) { - ctx.lineTo(points[i].x, points[i].y); - } - ctx.strokeStyle = color; - ctx.closePath(); - ctx.stroke(); - }); - this.newDrawHash += "segment"; - for (var i = 1; i < points.length; i++) { - this.newDrawHash += points[i].x + ',' + points[i].y + ','; - } - this.newDrawHash += color; - }; - StageTestbed.prototype.drawAABB = function (aabb, color) { - this.buffer.push(function (ctx) { - ctx.beginPath(); - ctx.moveTo(aabb.lowerBound.x, aabb.lowerBound.y); - ctx.lineTo(aabb.upperBound.x, aabb.lowerBound.y); - ctx.lineTo(aabb.upperBound.x, aabb.upperBound.y); - ctx.lineTo(aabb.lowerBound.x, aabb.upperBound.y); - ctx.strokeStyle = color; - ctx.closePath(); - ctx.stroke(); - }); - this.newDrawHash += "aabb"; - this.newDrawHash += aabb.lowerBound.x + ',' + aabb.lowerBound.y + ','; - this.newDrawHash += aabb.upperBound.x + ',' + aabb.upperBound.y + ','; - this.newDrawHash += color; - }; - StageTestbed.prototype.findOne = function (query) { - throw new Error("Not implemented"); - }; - StageTestbed.prototype.findAll = function (query) { - throw new Error("Not implemented"); - }; - return StageTestbed; -}(Testbed)); -var WorldStageNode = /** @class */ (function (_super) { - __extends$a(WorldStageNode, _super); - function WorldStageNode(world, opts) { - if (opts === void 0) { opts = {}; } - var _this = _super.call(this) || this; - _this.nodes = new WeakMap(); - _this.options = { - speed: 1, - hz: 60, - scaleY: -1, - lineWidth: 3, - stroke: undefined, - fill: undefined - }; - _this.label('Planck'); - _this.options = __assign$1(__assign$1({}, _this.options), opts); - if (math_abs(_this.options.hz) < 1) { - _this.options.hz = 1 / _this.options.hz; - } - _this.world = world; - _this.testbed = opts; - var timeStep = 1 / _this.options.hz; - var elapsedTime = 0; - var errored = false; - _this.tick(function (dt) { - if (errored) { - return false; - } - try { - dt = dt * 0.001 * _this.options.speed; - elapsedTime += dt; - while (elapsedTime > timeStep) { - world.step(timeStep); - elapsedTime -= timeStep; - } - _this.renderWorld(); - return true; - } - catch (error) { - errored = true; - console.error(error); - return false; - } - }, true); - world.on('remove-fixture', function (obj) { - var _a; - (_a = _this.nodes.get(obj)) === null || _a === void 0 ? void 0 : _a.remove(); - }); - world.on('remove-joint', function (obj) { - var _a; - (_a = _this.nodes.get(obj)) === null || _a === void 0 ? void 0 : _a.remove(); - }); - return _this; - } - WorldStageNode.prototype.renderWorld = function () { - var world = this.world; - var options = this.options; - // eslint-disable-next-line @typescript-eslint/no-this-alias - var viewer = this; - for (var b = world.getBodyList(); b; b = b.getNext()) { - for (var f = b.getFixtureList(); f; f = f.getNext()) { - var node = this.nodes.get(f); - var fstyle = getStyle(f); - var bstyle = getStyle(b); - if (!node) { - if (fstyle && fstyle.stroke) { - options.stroke = fstyle.stroke; - } - else if (bstyle && bstyle.stroke) { - options.stroke = bstyle.stroke; - } - else if (b.isDynamic()) { - options.stroke = 'rgba(255,255,255,0.9)'; - } - else if (b.isKinematic()) { - options.stroke = 'rgba(255,255,255,0.7)'; - } - else if (b.isStatic()) { - options.stroke = 'rgba(255,255,255,0.5)'; - } - if (fstyle && fstyle.fill) { - options.fill = fstyle.fill; - } - else if (bstyle && bstyle.fill) { - options.fill = bstyle.fill; - } - else { - options.fill = ''; - } - var type = f.getType(); - var shape = f.getShape(); - if (type == 'circle') { - node = viewer.drawCircle(shape, options); - } - if (type == 'edge') { - node = viewer.drawEdge(shape, options); - } - if (type == 'polygon') { - node = viewer.drawPolygon(shape, options); - } - if (type == 'chain') { - node = viewer.drawChain(shape, options); - } - if (node) { - node.appendTo(viewer); - this.nodes.set(f, node); - } - } - if (node) { - var p = b.getPosition(); - var r = b.getAngle(); - // @ts-ignore - var isChanged = node.__lastX !== p.x || node.__lastY !== p.y || node.__lastR !== r; - if (isChanged) { - // @ts-ignore - node.__lastX = p.x; - // @ts-ignore - node.__lastY = p.y; - // @ts-ignore - node.__lastR = r; - node.offset(p.x, options.scaleY * p.y); - node.rotate(options.scaleY * r); - } - } - } + ctx.strokeStyle = color; + ctx.closePath(); + ctx.stroke(); + }); + this.newDrawHash += "segment"; + for (var i = 1; i < points.length; i++) { + this.newDrawHash += points[i].x + "," + points[i].y + ","; + } + this.newDrawHash += color; + }; + StageTestbed2.prototype.drawAABB = function(aabb, color) { + this.buffer.push(function(ctx) { + ctx.beginPath(); + ctx.moveTo(aabb.lowerBound.x, aabb.lowerBound.y); + ctx.lineTo(aabb.upperBound.x, aabb.lowerBound.y); + ctx.lineTo(aabb.upperBound.x, aabb.upperBound.y); + ctx.lineTo(aabb.lowerBound.x, aabb.upperBound.y); + ctx.strokeStyle = color; + ctx.closePath(); + ctx.stroke(); + }); + this.newDrawHash += "aabb"; + this.newDrawHash += aabb.lowerBound.x + "," + aabb.lowerBound.y + ","; + this.newDrawHash += aabb.upperBound.x + "," + aabb.upperBound.y + ","; + this.newDrawHash += color; + }; + StageTestbed2.prototype.findOne = function(query) { + throw new Error("Not implemented"); + }; + StageTestbed2.prototype.findAll = function(query) { + throw new Error("Not implemented"); + }; + return StageTestbed2; + }(Testbed) +); +var WorldStageNode = ( + /** @class */ + function(_super) { + __extends$a(WorldStageNode2, _super); + function WorldStageNode2(world, opts) { + if (opts === void 0) { + opts = {}; + } + var _this = _super.call(this) || this; + _this.nodes = /* @__PURE__ */ new WeakMap(); + _this.options = { + speed: 1, + hz: 60, + scaleY: -1, + lineWidth: 3, + stroke: void 0, + fill: void 0 + }; + _this.label("Planck"); + _this.options = __assign$1(__assign$1({}, _this.options), opts); + if (math_abs(_this.options.hz) < 1) { + _this.options.hz = 1 / _this.options.hz; + } + _this.world = world; + _this.testbed = opts; + var timeStep = 1 / _this.options.hz; + var elapsedTime = 0; + var errored = false; + _this.tick(function(dt) { + if (errored) { + return false; } - for (var j = world.getJointList(); j; j = j.getNext()) { - var type = j.getType(); - if (type == 'pulley-joint') { - this.testbed.drawSegment(j.getAnchorA(), j.getGroundAnchorA(), 'rgba(255,255,255,0.5)'); - this.testbed.drawSegment(j.getAnchorB(), j.getGroundAnchorB(), 'rgba(255,255,255,0.5)'); - this.testbed.drawSegment(j.getGroundAnchorB(), j.getGroundAnchorA(), 'rgba(255,255,255,0.5)'); - } - else { - this.testbed.drawSegment(j.getAnchorA(), j.getAnchorB(), 'rgba(255,255,255,0.5)'); - } + try { + dt = dt * 1e-3 * _this.options.speed; + elapsedTime += dt; + while (elapsedTime > timeStep) { + world.step(timeStep); + elapsedTime -= timeStep; + } + _this.renderWorld(); + return true; + } catch (error) { + errored = true; + console.error(error); + return false; } - }; - WorldStageNode.prototype.drawCircle = function (shape, options) { - var offsetX = 0; - var offsetY = 0; - var offsetMemo = memo(); - var texture = Stage.canvas(); - texture.setDrawer(function () { - var _a; - var ctx = this.getContext(); - var ratio = 2 * this.getOptimalPixelRatio(); - var lw = options.lineWidth / ratio; - var r = shape.m_radius; - var cx = r + lw; - var cy = r + lw; - var w = r * 2 + lw * 2; - var h = r * 2 + lw * 2; - offsetX = shape.m_p.x - cx; - offsetY = options.scaleY * shape.m_p.y - cy; - this.setSize(w, h, ratio); - ctx.scale(ratio, ratio); - ctx.arc(cx, cy, r, 0, 2 * math_PI); - if (options.fill) { - ctx.fillStyle = options.fill; - ctx.fill(); - } - ctx.lineTo(cx, cy); - ctx.lineWidth = options.lineWidth / ratio; - ctx.strokeStyle = (_a = options.stroke) !== null && _a !== void 0 ? _a : ''; - ctx.stroke(); - }); - var sprite = Stage.sprite(texture); - sprite.tick(function () { - if (!offsetMemo.recall(offsetX, offsetY)) { - sprite.offset(offsetX, offsetY); - } - }); - var node = Stage.layout().append(sprite); - return node; - }; - WorldStageNode.prototype.drawEdge = function (edge, options) { - var offsetX = 0; - var offsetY = 0; - var offsetA = 0; - var offsetMemo = memo(); - var texture = Stage.canvas(); - texture.setDrawer(function () { - var _a; - var ctx = this.getContext(); - var ratio = 2 * this.getOptimalPixelRatio(); - var lw = options.lineWidth / ratio; - var v1 = edge.m_vertex1; - var v2 = edge.m_vertex2; - var dx = v2.x - v1.x; - var dy = v2.y - v1.y; - var length = math_sqrt(dx * dx + dy * dy); - this.setSize(length + 2 * lw, 2 * lw, ratio); - var minX = math_min(v1.x, v2.x); - var minY = math_min(options.scaleY * v1.y, options.scaleY * v2.y); - offsetX = minX - lw; - offsetY = minY - lw; - offsetA = options.scaleY * math_atan2(dy, dx); - ctx.scale(ratio, ratio); - ctx.beginPath(); - ctx.moveTo(lw, lw); - ctx.lineTo(lw + length, lw); - ctx.lineCap = 'round'; - ctx.lineWidth = options.lineWidth / ratio; - ctx.strokeStyle = (_a = options.stroke) !== null && _a !== void 0 ? _a : ''; - ctx.stroke(); - }); - var sprite = Stage.sprite(texture); - sprite.tick(function () { - if (!offsetMemo.recall(offsetX, offsetY, offsetA)) { - sprite.offset(offsetX, offsetY); - sprite.rotate(offsetA); - } - }); - var node = Stage.layout().append(sprite); - return node; - }; - WorldStageNode.prototype.drawPolygon = function (shape, options) { - var offsetX = 0; - var offsetY = 0; - var offsetMemo = memo(); - var texture = Stage.canvas(); - texture.setDrawer(function () { - var _a; - var ctx = this.getContext(); - var ratio = 2 * this.getOptimalPixelRatio(); - var lw = options.lineWidth / ratio; - var vertices = shape.m_vertices; - if (!vertices.length) { - return; - } - var minX = Infinity; - var minY = Infinity; - var maxX = -Infinity; - var maxY = -Infinity; - for (var i = 0; i < vertices.length; ++i) { - var v = vertices[i]; - minX = math_min(minX, v.x); - maxX = math_max(maxX, v.x); - minY = math_min(minY, options.scaleY * v.y); - maxY = math_max(maxY, options.scaleY * v.y); - } - var width = maxX - minX; - var height = maxY - minY; - offsetX = minX; - offsetY = minY; - this.setSize(width + 2 * lw, height + 2 * lw, ratio); - ctx.scale(ratio, ratio); - ctx.beginPath(); - for (var i = 0; i < vertices.length; ++i) { - var v = vertices[i]; - var x = v.x - minX + lw; - var y = options.scaleY * v.y - minY + lw; - if (i == 0) - ctx.moveTo(x, y); - else - ctx.lineTo(x, y); - } - if (vertices.length > 2) { - ctx.closePath(); - } - if (options.fill) { - ctx.fillStyle = options.fill; - ctx.fill(); - ctx.closePath(); - } - ctx.lineCap = 'round'; - ctx.lineWidth = options.lineWidth / ratio; - ctx.strokeStyle = (_a = options.stroke) !== null && _a !== void 0 ? _a : ''; - ctx.stroke(); - }); - var sprite = Stage.sprite(texture); - sprite.tick(function () { - if (!offsetMemo.recall(offsetX, offsetY)) { - sprite.offset(offsetX, offsetY); - } - }); - var node = Stage.layout().append(sprite); - return node; - }; - WorldStageNode.prototype.drawChain = function (shape, options) { - var offsetX = 0; - var offsetY = 0; - var offsetMemo = memo(); - var texture = Stage.canvas(); - texture.setDrawer(function () { - var _a; - var ctx = this.getContext(); - var ratio = 2 * this.getOptimalPixelRatio(); - var lw = options.lineWidth / ratio; - var vertices = shape.m_vertices; - if (!vertices.length) { - return; - } - var minX = Infinity; - var minY = Infinity; - var maxX = -Infinity; - var maxY = -Infinity; - for (var i = 0; i < vertices.length; ++i) { - var v = vertices[i]; - minX = math_min(minX, v.x); - maxX = math_max(maxX, v.x); - minY = math_min(minY, options.scaleY * v.y); - maxY = math_max(maxY, options.scaleY * v.y); - } - var width = maxX - minX; - var height = maxY - minY; - offsetX = minX; - offsetY = minY; - this.setSize(width + 2 * lw, height + 2 * lw, ratio); - ctx.scale(ratio, ratio); - ctx.beginPath(); - for (var i = 0; i < vertices.length; ++i) { - var v = vertices[i]; - var x = v.x - minX + lw; - var y = options.scaleY * v.y - minY + lw; - if (i == 0) - ctx.moveTo(x, y); - else - ctx.lineTo(x, y); - } - // TODO: if loop - if (vertices.length > 2) ; - if (options.fill) { - ctx.fillStyle = options.fill; - ctx.fill(); - ctx.closePath(); + }, true); + world.on("remove-fixture", function(obj) { + var _a2; + (_a2 = _this.nodes.get(obj)) === null || _a2 === void 0 ? void 0 : _a2.remove(); + }); + world.on("remove-joint", function(obj) { + var _a2; + (_a2 = _this.nodes.get(obj)) === null || _a2 === void 0 ? void 0 : _a2.remove(); + }); + return _this; + } + WorldStageNode2.prototype.renderWorld = function() { + var world = this.world; + var options2 = this.options; + var viewer = this; + for (var b2 = world.getBodyList(); b2; b2 = b2.getNext()) { + for (var f = b2.getFixtureList(); f; f = f.getNext()) { + var node = this.nodes.get(f); + var fstyle = getStyle(f); + var bstyle = getStyle(b2); + if (!node) { + if (fstyle && fstyle.stroke) { + options2.stroke = fstyle.stroke; + } else if (bstyle && bstyle.stroke) { + options2.stroke = bstyle.stroke; + } else if (b2.isDynamic()) { + options2.stroke = "rgba(255,255,255,0.9)"; + } else if (b2.isKinematic()) { + options2.stroke = "rgba(255,255,255,0.7)"; + } else if (b2.isStatic()) { + options2.stroke = "rgba(255,255,255,0.5)"; + } + if (fstyle && fstyle.fill) { + options2.fill = fstyle.fill; + } else if (bstyle && bstyle.fill) { + options2.fill = bstyle.fill; + } else { + options2.fill = ""; + } + var type = f.getType(); + var shape = f.getShape(); + if (type == "circle") { + node = viewer.drawCircle(shape, options2); + } + if (type == "edge") { + node = viewer.drawEdge(shape, options2); + } + if (type == "polygon") { + node = viewer.drawPolygon(shape, options2); + } + if (type == "chain") { + node = viewer.drawChain(shape, options2); + } + if (node) { + node.appendTo(viewer); + this.nodes.set(f, node); } - ctx.lineCap = 'round'; - ctx.lineWidth = options.lineWidth / ratio; - ctx.strokeStyle = (_a = options.stroke) !== null && _a !== void 0 ? _a : ''; - ctx.stroke(); - }); - var sprite = Stage.sprite(texture); - sprite.tick(function () { - if (!offsetMemo.recall(offsetX, offsetY)) { - sprite.offset(offsetX, offsetY); + } + if (node) { + var p = b2.getPosition(); + var r = b2.getAngle(); + var isChanged = node.__lastX !== p.x || node.__lastY !== p.y || node.__lastR !== r; + if (isChanged) { + node.__lastX = p.x; + node.__lastY = p.y; + node.__lastR = r; + node.offset(p.x, options2.scaleY * p.y); + node.rotate(options2.scaleY * r); } - }); - var node = Stage.layout().append(sprite); - return node; + } + } + } + for (var j = world.getJointList(); j; j = j.getNext()) { + var type = j.getType(); + if (type == "pulley-joint") { + this.testbed.drawSegment(j.getAnchorA(), j.getGroundAnchorA(), "rgba(255,255,255,0.5)"); + this.testbed.drawSegment(j.getAnchorB(), j.getGroundAnchorB(), "rgba(255,255,255,0.5)"); + this.testbed.drawSegment(j.getGroundAnchorB(), j.getGroundAnchorA(), "rgba(255,255,255,0.5)"); + } else { + this.testbed.drawSegment(j.getAnchorA(), j.getAnchorB(), "rgba(255,255,255,0.5)"); + } + } + }; + WorldStageNode2.prototype.drawCircle = function(shape, options2) { + var offsetX = 0; + var offsetY = 0; + var offsetMemo = memo(); + var texture2 = canvas(); + texture2.setDrawer(function() { + var _a2; + var ctx = this.getContext(); + var ratio = 2 * this.getOptimalPixelRatio(); + var lw = options2.lineWidth / ratio; + var r = shape.m_radius; + var cx = r + lw; + var cy = r + lw; + var w = r * 2 + lw * 2; + var h = r * 2 + lw * 2; + offsetX = shape.m_p.x - cx; + offsetY = options2.scaleY * shape.m_p.y - cy; + this.setSize(w, h, ratio); + ctx.scale(ratio, ratio); + ctx.arc(cx, cy, r, 0, 2 * math_PI); + if (options2.fill) { + ctx.fillStyle = options2.fill; + ctx.fill(); + } + ctx.lineTo(cx, cy); + ctx.lineWidth = options2.lineWidth / ratio; + ctx.strokeStyle = (_a2 = options2.stroke) !== null && _a2 !== void 0 ? _a2 : ""; + ctx.stroke(); + }); + var sprite$1 = sprite(texture2); + sprite$1.tick(function() { + if (!offsetMemo.recall(offsetX, offsetY)) { + sprite$1.offset(offsetX, offsetY); + } + }); + var node = layout().append(sprite$1); + return node; + }; + WorldStageNode2.prototype.drawEdge = function(edge, options2) { + var offsetX = 0; + var offsetY = 0; + var offsetA = 0; + var offsetMemo = memo(); + var texture2 = canvas(); + texture2.setDrawer(function() { + var _a2; + var ctx = this.getContext(); + var ratio = 2 * this.getOptimalPixelRatio(); + var lw = options2.lineWidth / ratio; + var v13 = edge.m_vertex1; + var v22 = edge.m_vertex2; + var dx = v22.x - v13.x; + var dy = v22.y - v13.y; + var length2 = math_sqrt(dx * dx + dy * dy); + this.setSize(length2 + 2 * lw, 2 * lw, ratio); + var minX = math_min(v13.x, v22.x); + var minY = math_min(options2.scaleY * v13.y, options2.scaleY * v22.y); + offsetX = minX - lw; + offsetY = minY - lw; + offsetA = options2.scaleY * math_atan2(dy, dx); + ctx.scale(ratio, ratio); + ctx.beginPath(); + ctx.moveTo(lw, lw); + ctx.lineTo(lw + length2, lw); + ctx.lineCap = "round"; + ctx.lineWidth = options2.lineWidth / ratio; + ctx.strokeStyle = (_a2 = options2.stroke) !== null && _a2 !== void 0 ? _a2 : ""; + ctx.stroke(); + }); + var sprite$1 = sprite(texture2); + sprite$1.tick(function() { + if (!offsetMemo.recall(offsetX, offsetY, offsetA)) { + sprite$1.offset(offsetX, offsetY); + sprite$1.rotate(offsetA); + } + }); + var node = layout().append(sprite$1); + return node; + }; + WorldStageNode2.prototype.drawPolygon = function(shape, options2) { + var offsetX = 0; + var offsetY = 0; + var offsetMemo = memo(); + var texture2 = canvas(); + texture2.setDrawer(function() { + var _a2; + var ctx = this.getContext(); + var ratio = 2 * this.getOptimalPixelRatio(); + var lw = options2.lineWidth / ratio; + var vertices = shape.m_vertices; + if (!vertices.length) { + return; + } + var minX = Infinity; + var minY = Infinity; + var maxX = -Infinity; + var maxY = -Infinity; + for (var i = 0; i < vertices.length; ++i) { + var v3 = vertices[i]; + minX = math_min(minX, v3.x); + maxX = math_max(maxX, v3.x); + minY = math_min(minY, options2.scaleY * v3.y); + maxY = math_max(maxY, options2.scaleY * v3.y); + } + var width = maxX - minX; + var height = maxY - minY; + offsetX = minX; + offsetY = minY; + this.setSize(width + 2 * lw, height + 2 * lw, ratio); + ctx.scale(ratio, ratio); + ctx.beginPath(); + for (var i = 0; i < vertices.length; ++i) { + var v3 = vertices[i]; + var x2 = v3.x - minX + lw; + var y = options2.scaleY * v3.y - minY + lw; + if (i == 0) + ctx.moveTo(x2, y); + else + ctx.lineTo(x2, y); + } + if (vertices.length > 2) { + ctx.closePath(); + } + if (options2.fill) { + ctx.fillStyle = options2.fill; + ctx.fill(); + ctx.closePath(); + } + ctx.lineCap = "round"; + ctx.lineWidth = options2.lineWidth / ratio; + ctx.strokeStyle = (_a2 = options2.stroke) !== null && _a2 !== void 0 ? _a2 : ""; + ctx.stroke(); + }); + var sprite$1 = sprite(texture2); + sprite$1.tick(function() { + if (!offsetMemo.recall(offsetX, offsetY)) { + sprite$1.offset(offsetX, offsetY); + } + }); + var node = layout().append(sprite$1); + return node; + }; + WorldStageNode2.prototype.drawChain = function(shape, options2) { + var offsetX = 0; + var offsetY = 0; + var offsetMemo = memo(); + var texture2 = canvas(); + texture2.setDrawer(function() { + var _a2; + var ctx = this.getContext(); + var ratio = 2 * this.getOptimalPixelRatio(); + var lw = options2.lineWidth / ratio; + var vertices = shape.m_vertices; + if (!vertices.length) { + return; + } + var minX = Infinity; + var minY = Infinity; + var maxX = -Infinity; + var maxY = -Infinity; + for (var i = 0; i < vertices.length; ++i) { + var v3 = vertices[i]; + minX = math_min(minX, v3.x); + maxX = math_max(maxX, v3.x); + minY = math_min(minY, options2.scaleY * v3.y); + maxY = math_max(maxY, options2.scaleY * v3.y); + } + var width = maxX - minX; + var height = maxY - minY; + offsetX = minX; + offsetY = minY; + this.setSize(width + 2 * lw, height + 2 * lw, ratio); + ctx.scale(ratio, ratio); + ctx.beginPath(); + for (var i = 0; i < vertices.length; ++i) { + var v3 = vertices[i]; + var x2 = v3.x - minX + lw; + var y = options2.scaleY * v3.y - minY + lw; + if (i == 0) + ctx.moveTo(x2, y); + else + ctx.lineTo(x2, y); + } + if (vertices.length > 2) ; + if (options2.fill) { + ctx.fillStyle = options2.fill; + ctx.fill(); + ctx.closePath(); + } + ctx.lineCap = "round"; + ctx.lineWidth = options2.lineWidth / ratio; + ctx.strokeStyle = (_a2 = options2.stroke) !== null && _a2 !== void 0 ? _a2 : ""; + ctx.stroke(); + }); + var sprite$1 = sprite(texture2); + sprite$1.tick(function() { + if (!offsetMemo.recall(offsetX, offsetY)) { + sprite$1.offset(offsetX, offsetY); + } + }); + var node = layout().append(sprite$1); + return node; }; - return WorldStageNode; -}(Stage.Node)); - -var planck = /*#__PURE__*/Object.freeze({ - __proto__: null, - Math: math$1, - Serializer: Serializer, - Testbed: Testbed, - testbed: testbed, - Vec2: Vec2, - Vec3: Vec3, - Mat22: Mat22, - Mat33: Mat33, - Transform: Transform, - Rot: Rot, - AABB: AABB, - Shape: Shape, - FixtureProxy: FixtureProxy, - Fixture: Fixture, - Body: Body, - ContactEdge: ContactEdge, - mixFriction: mixFriction, - mixRestitution: mixRestitution, - VelocityConstraintPoint: VelocityConstraintPoint, - Contact: Contact, - JointEdge: JointEdge, - Joint: Joint, - World: World, - CircleShape: CircleShape, - Circle: Circle, - EdgeShape: EdgeShape, - Edge: Edge, - PolygonShape: PolygonShape, - Polygon: Polygon, - ChainShape: ChainShape, - Chain: Chain, - BoxShape: BoxShape, - Box: Box, - CollideCircles: CollideCircles, - CollideEdgeCircle: CollideEdgeCircle, - CollidePolygons: CollidePolygons, - CollidePolygonCircle: CollidePolygonCircle, - CollideEdgePolygon: CollideEdgePolygon, - DistanceJoint: DistanceJoint, - FrictionJoint: FrictionJoint, - GearJoint: GearJoint, - MotorJoint: MotorJoint, - MouseJoint: MouseJoint, - PrismaticJoint: PrismaticJoint, - PulleyJoint: PulleyJoint, - RevoluteJoint: RevoluteJoint, - RopeJoint: RopeJoint, - WeldJoint: WeldJoint, - WheelJoint: WheelJoint, - Settings: Settings, - SettingsInternal: SettingsInternal, - Sweep: Sweep, - get ManifoldType () { return ManifoldType; }, - get ContactFeatureType () { return ContactFeatureType; }, - get PointState () { return PointState; }, - ClipVertex: ClipVertex, - Manifold: Manifold, - ManifoldPoint: ManifoldPoint, - ContactID: ContactID, - WorldManifold: WorldManifold, - getPointStates: getPointStates, - clipSegmentToLine: clipSegmentToLine, - DistanceInput: DistanceInput, - DistanceOutput: DistanceOutput, - SimplexCache: SimplexCache, - Distance: Distance, - DistanceProxy: DistanceProxy, - testOverlap: testOverlap, - ShapeCastInput: ShapeCastInput, - ShapeCastOutput: ShapeCastOutput, - ShapeCast: ShapeCast, - TOIInput: TOIInput, - get TOIOutputState () { return TOIOutputState; }, - TOIOutput: TOIOutput, - TimeOfImpact: TimeOfImpact, - TreeNode: TreeNode, - DynamicTree: DynamicTree, - stats: stats$1, - internal: internal -}); - -export { AABB, Body, Box, BoxShape, Chain, ChainShape, Circle, CircleShape, ClipVertex, CollideCircles, CollideEdgeCircle, CollideEdgePolygon, CollidePolygonCircle, CollidePolygons, Contact, ContactEdge, ContactFeatureType, ContactID, Distance, DistanceInput, DistanceJoint, DistanceOutput, DistanceProxy, DynamicTree, Edge, EdgeShape, Fixture, FixtureProxy, FrictionJoint, GearJoint, Joint, JointEdge, Manifold, ManifoldPoint, ManifoldType, Mat22, Mat33, math$1 as Math, MotorJoint, MouseJoint, PointState, Polygon, PolygonShape, PrismaticJoint, PulleyJoint, RevoluteJoint, RopeJoint, Rot, Serializer, Settings, SettingsInternal, Shape, ShapeCast, ShapeCastInput, ShapeCastOutput, SimplexCache, Sweep, TOIInput, TOIOutput, TOIOutputState, Testbed, TimeOfImpact, Transform, TreeNode, Vec2, Vec3, VelocityConstraintPoint, WeldJoint, WheelJoint, World, WorldManifold, clipSegmentToLine, planck as default, getPointStates, internal, mixFriction, mixRestitution, stats$1 as stats, testOverlap, testbed }; + return WorldStageNode2; + }(Node) +); +const planck = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + AABB, + Body, + Box, + BoxShape, + BroadPhase, + Chain, + ChainShape, + Circle, + CircleShape, + ClipVertex, + CollideCircles, + CollideEdgeCircle, + CollideEdgePolygon, + CollidePolygonCircle, + CollidePolygons, + Contact, + ContactEdge, + get ContactFeatureType() { + return ContactFeatureType; + }, + ContactID, + ContactImpulse, + Distance, + DistanceInput, + DistanceJoint, + DistanceOutput, + DistanceProxy, + DynamicTree, + Edge, + EdgeShape, + Fixture, + FixtureProxy, + FrictionJoint, + GearJoint, + Joint, + JointEdge, + Manifold, + ManifoldPoint, + get ManifoldType() { + return ManifoldType; + }, + Mat22, + Mat33, + Math: math$1, + MotorJoint, + MouseJoint, + get PointState() { + return PointState; + }, + Polygon, + PolygonShape, + PrismaticJoint, + PulleyJoint, + RevoluteJoint, + RopeJoint, + Rot, + Serializer, + Settings, + SettingsInternal, + Shape, + ShapeCast, + ShapeCastInput, + ShapeCastOutput, + SimplexCache, + Solver, + StageTestbed, + Sweep, + TOIInput, + TOIOutput, + get TOIOutputState() { + return TOIOutputState; + }, + Testbed, + TimeOfImpact, + TimeStep, + Transform, + TreeNode, + Vec2, + Vec3, + VelocityConstraintPoint, + WeldJoint, + WheelJoint, + World, + WorldManifold, + clipSegmentToLine, + getPointStates, + internal, + mixFriction, + mixRestitution, + stats: stats$1, + testOverlap, + testbed +}, Symbol.toStringTag, { value: "Module" })); +export { + AABB, + Body, + Box, + BoxShape, + BroadPhase, + Chain, + ChainShape, + Circle, + CircleShape, + ClipVertex, + CollideCircles, + CollideEdgeCircle, + CollideEdgePolygon, + CollidePolygonCircle, + CollidePolygons, + Contact, + ContactEdge, + ContactFeatureType, + ContactID, + ContactImpulse, + Distance, + DistanceInput, + DistanceJoint, + DistanceOutput, + DistanceProxy, + DynamicTree, + Edge, + EdgeShape, + Fixture, + FixtureProxy, + FrictionJoint, + GearJoint, + Joint, + JointEdge, + Manifold, + ManifoldPoint, + ManifoldType, + Mat22, + Mat33, + math$1 as Math, + MotorJoint, + MouseJoint, + PointState, + Polygon, + PolygonShape, + PrismaticJoint, + PulleyJoint, + RevoluteJoint, + RopeJoint, + Rot, + Serializer, + Settings, + SettingsInternal, + Shape, + ShapeCast, + ShapeCastInput, + ShapeCastOutput, + SimplexCache, + Solver, + StageTestbed, + Sweep, + TOIInput, + TOIOutput, + TOIOutputState, + Testbed, + TimeOfImpact, + TimeStep, + Transform, + TreeNode, + Vec2, + Vec3, + VelocityConstraintPoint, + WeldJoint, + WheelJoint, + World, + WorldManifold, + clipSegmentToLine, + planck as default, + getPointStates, + internal, + mixFriction, + mixRestitution, + stats$1 as stats, + testOverlap, + testbed +}; //# sourceMappingURL=planck-with-testbed.mjs.map diff --git a/dist/planck-with-testbed.mjs.map b/dist/planck-with-testbed.mjs.map index 25dd9d03..50ee7eca 100644 --- a/dist/planck-with-testbed.mjs.map +++ b/dist/planck-with-testbed.mjs.map @@ -1 +1 @@ -{"version":3,"file":"planck-with-testbed.mjs","sources":["../node_modules/tslib/tslib.es6.js","../src/util/options.ts","../src/common/Math.ts","../src/common/Vec2.ts","../src/collision/AABB.ts","../src/Settings.ts","../src/util/Pool.ts","../src/collision/DynamicTree.ts","../src/collision/BroadPhase.ts","../src/common/Matrix.ts","../src/common/Rot.ts","../src/common/Sweep.ts","../src/common/Transform.ts","../src/dynamics/Velocity.ts","../src/dynamics/Position.ts","../src/collision/Shape.ts","../src/dynamics/Fixture.ts","../src/dynamics/Body.ts","../src/dynamics/Joint.ts","../src/util/stats.ts","../src/util/Timer.ts","../src/collision/Distance.ts","../src/collision/TimeOfImpact.ts","../src/dynamics/Solver.ts","../src/common/Mat22.ts","../src/collision/Manifold.ts","../src/dynamics/Contact.ts","../src/dynamics/World.ts","../src/common/Vec3.ts","../src/collision/shape/EdgeShape.ts","../src/collision/shape/ChainShape.ts","../src/collision/shape/PolygonShape.ts","../src/collision/shape/CircleShape.ts","../src/dynamics/joint/DistanceJoint.ts","../src/dynamics/joint/FrictionJoint.ts","../src/common/Mat33.ts","../src/dynamics/joint/RevoluteJoint.ts","../src/dynamics/joint/PrismaticJoint.ts","../src/dynamics/joint/GearJoint.ts","../src/dynamics/joint/MotorJoint.ts","../src/dynamics/joint/MouseJoint.ts","../src/dynamics/joint/PulleyJoint.ts","../src/dynamics/joint/RopeJoint.ts","../src/dynamics/joint/WeldJoint.ts","../src/dynamics/joint/WheelJoint.ts","../src/serializer/index.ts","../src/util/Testbed.ts","../src/collision/shape/BoxShape.ts","../src/collision/shape/CollideCircle.ts","../src/collision/shape/CollideEdgeCircle.ts","../src/collision/shape/CollidePolygon.ts","../src/collision/shape/CollideCirclePolygon.ts","../src/collision/shape/CollideEdgePolygon.ts","../src/internal.ts","../node_modules/stage-js/dist/stage.js","../testbed/StageTestbed.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/** @internal */\nexport const options = function(input: T, defaults: object): T {\n if (input === null || typeof input === \"undefined\") {\n // tslint:disable-next-line:no-object-literal-type-assertion\n input = {} as T;\n }\n\n const output = {...input};\n\n // tslint:disable-next-line:no-for-in\n for (const key in defaults) {\n if (defaults.hasOwnProperty(key) && typeof input[key] === \"undefined\") {\n output[key] = defaults[key];\n }\n }\n\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n const symbols = Object.getOwnPropertySymbols(defaults);\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n if (defaults.propertyIsEnumerable(symbol) && typeof input[symbol] === \"undefined\") {\n output[symbol] = defaults[symbol];\n }\n }\n }\n\n return output;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_random = Math.random;\n\n\nexport const EPSILON = 1e-9;\n\n/** @internal @deprecated */\nexport const isFinite = Number.isFinite;\n\n/**\n * @deprecated\n * Next Largest Power of 2 Given a binary integer value x, the next largest\n * power of 2 can be computed by a SWAR algorithm that recursively \"folds\" the\n * upper bits into the lower bits. This process yields a bit vector with the\n * same most significant 1 as x, but all 1's below it. Adding 1 to that value\n * yields the next largest power of 2. For a 32-bit value:\n */\nexport function nextPowerOfTwo(x: number): number {\n x |= (x >> 1);\n x |= (x >> 2);\n x |= (x >> 4);\n x |= (x >> 8);\n x |= (x >> 16);\n return x + 1;\n}\n\n/** @deprecated */\nexport function isPowerOfTwo(x: number): boolean {\n return x > 0 && (x & (x - 1)) === 0;\n}\n\n/** @deprecated */\nexport function mod(num: number, min?: number, max?: number): number {\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}\n\n/**\n * @deprecated\n * Returns a min if num is less than min, and max if more than max, otherwise returns num.\n */\nexport function clamp(num: number, min: number, max: number): number {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n } else {\n return num;\n }\n}\n\n/**\n * @deprecated\n * Returns a random number between min and max when two arguments are provided.\n * If one arg is provided between 0 to max.\n * If one arg is passed between 0 to 1.\n */\nexport function random(min?: number, max?: number): number {\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}\n\n/** @ignore */\nexport const 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;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"./Math\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\nexport interface Vec2Value {\n x: number;\n y: number;\n}\n\nexport class Vec2 {\n x: number;\n y: number;\n\n constructor(x: number, y: number);\n constructor(obj: { x: number, y: number });\n constructor();\n // tslint:disable-next-line:typedef\n constructor(x?, y?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec2)) {\n return new Vec2(x, y);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n } else {\n this.x = x;\n this.y = y;\n }\n _ASSERT && Vec2.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = data.x;\n obj.y = data.y;\n return obj;\n }\n\n static zero(): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = 0;\n obj.y = 0;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = x;\n obj.y = y;\n return obj;\n }\n\n static clone(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(v.x, v.y);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /**\n * Does this vector contain finite coordinates?\n */\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.x) && Number.isFinite(obj.y);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec2.isValid(o), \"Invalid Vec2!\", o);\n }\n\n clone(): Vec2 {\n return Vec2.clone(this);\n }\n\n /**\n * Set this vector to all zeros.\n *\n * @returns this\n */\n setZero(): Vec2 {\n this.x = 0.0;\n this.y = 0.0;\n return this;\n }\n\n set(x: number, y: number): Vec2;\n set(value: Vec2Value): Vec2;\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n // tslint:disable-next-line:typedef\n set(x, y?) {\n if (typeof x === \"object\") {\n _ASSERT && Vec2.assert(x);\n this.x = x.x;\n this.y = x.y;\n } else {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n }\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setNum(x: number, y: number) {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setVec2(value: Vec2Value) {\n _ASSERT && Vec2.assert(value);\n this.x = value.x;\n this.y = value.y;\n\n return this;\n }\n\n /** @internal @deprecated Use setCombine or setMul */\n wSet(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.setCombine(a, v, b, w);\n } else {\n return this.setMul(a, v);\n }\n }\n\n /**\n * Set linear combination of v and w: `a * v + b * w`\n */\n setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x = x;\n this.y = y;\n return this;\n }\n\n setMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * Add a vector to this vector.\n *\n * @returns this\n */\n add(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x += w.x;\n this.y += w.y;\n return this;\n }\n\n /** @internal @deprecated Use addCombine or addMul */\n wAdd(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.addCombine(a, v, b, w);\n } else {\n return this.addMul(a, v);\n }\n }\n\n /**\n * Add linear combination of v and w: `a * v + b * w`\n */\n addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x += x;\n this.y += y;\n return this;\n }\n\n addMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x += x;\n this.y += y;\n return this;\n }\n\n /**\n * @deprecated Use subCombine or subMul\n */\n wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.subCombine(a, v, b, w);\n } else {\n return this.subMul(a, v);\n }}\n\n /**\n * Subtract linear combination of v and w: `a * v + b * w`\n */\n subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n subMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n /**\n * Subtract a vector from this vector\n *\n * @returns this\n */\n sub(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x -= w.x;\n this.y -= w.y;\n return this;\n }\n\n /**\n * Multiply this vector by a scalar.\n *\n * @returns this\n */\n mul(m: number): Vec2 {\n _ASSERT && console.assert(Number.isFinite(m));\n this.x *= m;\n this.y *= m;\n return this;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n length(): number {\n return Vec2.lengthOf(this);\n }\n\n /**\n * Get the length squared.\n */\n lengthSquared(): number {\n return Vec2.lengthSquared(this);\n }\n\n /**\n * Convert this vector into a unit vector.\n *\n * @returns old length\n */\n normalize(): number {\n const length = this.length();\n if (length < EPSILON) {\n return 0.0;\n }\n const invLength = 1.0 / length;\n this.x *= invLength;\n this.y *= invLength;\n return length;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n static lengthOf(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return math_sqrt(v.x * v.x + v.y * v.y);\n }\n\n /**\n * Get the length squared.\n */\n static lengthSquared(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return v.x * v.x + v.y * v.y;\n }\n\n static distance(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return math_sqrt(dx * dx + dy * dy);\n }\n\n static distanceSquared(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return dx * dx + dy * dy;\n }\n\n static areEqual(v: Vec2Value, w: Vec2Value): boolean {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v === w || typeof w === \"object\" && w !== null && v.x === w.x && v.y === w.y;\n }\n\n /**\n * Get the skew vector such that dot(skew_vec, other) == cross(vec, other)\n */\n static skew(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.y, v.x);\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.x + v.y * w.y;\n }\n\n /** Cross product between two vectors */\n static cross(v: Vec2Value, w: Vec2Value): number;\n /** Cross product between a vector and a scalar */\n static cross(v: Vec2Value, w: number): Vec2;\n /** Cross product between a scalar and a vector */\n static cross(v: number, w: Vec2Value): Vec2;\n static cross(v: any, w: any): any {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n\n } else {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n }\n\n /** Cross product on two vectors */\n static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n\n /** Cross product on a vector and a scalar */\n static crossVec2Num(v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n }\n\n /** Cross product on a vector and a scalar */\n static crossNumVec2(v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n }\n\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2;\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2;\n static addCross(a: Vec2Value, v: any, w: any): Vec2 {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n static add(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x + w.x, v.y + w.y);\n }\n\n /** @hidden @deprecated */\n static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return Vec2.combine(a, v, b, w);\n } else {\n return Vec2.mulNumVec2(a, v);\n }\n }\n\n static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n return Vec2.zero().setCombine(a, v, b, w);\n }\n\n static sub(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x - w.x, v.y - w.y);\n }\n\n static mul(a: Vec2Value, b: number): Vec2;\n static mul(a: number, b: Vec2Value): Vec2;\n static mul(a: any, b: any): Vec2 {\n if (typeof a === \"object\") {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n\n } else if (typeof b === \"object\") {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n }\n\n static mulVec2Num(a: Vec2Value, b: number): Vec2 {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n }\n\n static mulNumVec2(a: number, b: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n\n neg(): Vec2 {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n\n static neg(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.x, -v.y);\n }\n\n static abs(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(math_abs(v.x), math_abs(v.y));\n }\n\n static mid(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo((v.x + w.x) * 0.5, (v.y + w.y) * 0.5);\n }\n\n static upper(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_max(v.x, w.x), math_max(v.y, w.y));\n }\n\n static lower(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_min(v.x, w.x), math_min(v.y, w.y));\n }\n\n clamp(max: number): Vec2 {\n const lengthSqr = this.x * this.x + this.y * this.y;\n if (lengthSqr > max * max) {\n const scale = max / math_sqrt(lengthSqr);\n this.x *= scale;\n this.y *= scale;\n }\n return this;\n }\n\n static clamp(v: Vec2Value, max: number): Vec2 {\n const r = Vec2.neo(v.x, v.y);\n r.clamp(max);\n return r;\n }\n\n /** @hidden @deprecated */\n static scaleFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x * x, v.y * y);\n };\n }\n\n /** @hidden @deprecated */\n static translateFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x + x, v.y + y);\n };\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/**\n * Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n */\nexport interface RayCastInput {\n p1: Vec2Value;\n p2: Vec2Value;\n maxFraction: number;\n}\n\nexport type RayCastCallback = (subInput: RayCastInput, id: number) => number;\n\n/**\n * Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`,\n * where `p1` and `p2` come from RayCastInput.\n */\nexport interface RayCastOutput {\n normal: Vec2;\n fraction: number;\n}\n\nexport interface AABBValue {\n lowerBound: Vec2Value;\n upperBound: Vec2Value;\n}\n\nexport class AABB {\n lowerBound: Vec2;\n upperBound: Vec2;\n\n constructor(lower?: Vec2Value, upper?: Vec2Value) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof AABB)) {\n return new AABB(lower, upper);\n }\n\n this.lowerBound = Vec2.zero();\n this.upperBound = Vec2.zero();\n\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\n /**\n * Verify that the bounds are sorted.\n */\n isValid(): boolean {\n return AABB.isValid(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!AABB.isValid(o), \"Invalid AABB!\", o);\n }\n\n /**\n * Get the center of the AABB.\n */\n getCenter(): Vec2 {\n return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5);\n }\n\n /**\n * Get the extents of the AABB (half-widths).\n */\n getExtents(): Vec2 {\n return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5);\n }\n\n /**\n * Get the perimeter length.\n */\n getPerimeter(): number {\n return 2.0 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y);\n }\n\n /**\n * Combine one or two AABB into this one.\n */\n combine(a: AABBValue, b?: AABBValue): void {\n b = b || this;\n\n const lowerA = a.lowerBound;\n const upperA = a.upperBound;\n const lowerB = b.lowerBound;\n const upperB = b.upperBound;\n\n const lowerX = math_min(lowerA.x, lowerB.x);\n const lowerY = math_min(lowerA.y, lowerB.y);\n const upperX = math_max(upperB.x, upperA.x);\n const upperY = math_max(upperB.y, upperA.y);\n\n this.lowerBound.setNum(lowerX, lowerY);\n this.upperBound.setNum(upperX, upperY);\n }\n\n combinePoints(a: Vec2Value, b: Vec2Value): void {\n this.lowerBound.setNum(math_min(a.x, b.x), math_min(a.y, b.y));\n this.upperBound.setNum(math_max(a.x, b.x), math_max(a.y, b.y));\n }\n\n set(aabb: AABBValue): void {\n this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y);\n this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y);\n }\n\n contains(aabb: AABBValue): boolean {\n let 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\n extend(value: number): AABB {\n AABB.extend(this, value);\n return this;\n }\n\n static extend(out: AABBValue, value: number): AABBValue {\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\n static testOverlap(a: AABBValue, b: AABBValue): boolean {\n const d1x = b.lowerBound.x - a.upperBound.x;\n const d2x = a.lowerBound.x - b.upperBound.x;\n\n const d1y = b.lowerBound.y - a.upperBound.y;\n const d2y = a.lowerBound.y - b.upperBound.y;\n\n if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) {\n return false;\n }\n return true;\n }\n\n static areEqual(a: AABBValue, b: AABBValue): boolean {\n return Vec2.areEqual(a.lowerBound, b.lowerBound) && Vec2.areEqual(a.upperBound, b.upperBound);\n }\n\n static diff(a: AABBValue, b: AABBValue): number {\n const wD = math_max(0, math_min(a.upperBound.x, b.upperBound.x) - math_max(b.lowerBound.x, a.lowerBound.x));\n const hD = math_max(0, math_min(a.upperBound.y, b.upperBound.y) - math_max(b.lowerBound.y, a.lowerBound.y));\n\n const wA = a.upperBound.x - a.lowerBound.x;\n const hA = a.upperBound.y - a.lowerBound.y;\n\n const wB = b.upperBound.x - b.lowerBound.x;\n const hB = b.upperBound.y - b.lowerBound.y;\n\n return wA * hA + wB * hB - wD * hD;\n }\n\n rayCast(output: RayCastOutput, input: RayCastInput): boolean {\n // From Real-time Collision Detection, p179.\n\n let tmin = -Infinity;\n let tmax = Infinity;\n\n const p = input.p1;\n const d = Vec2.sub(input.p2, input.p1);\n const absD = Vec2.abs(d);\n\n const normal = Vec2.zero();\n\n for (let f: \"x\" | \"y\" = \"x\"; f !== null; f = (f === \"x\" ? \"y\" : null)) {\n if (absD.x < EPSILON) {\n // Parallel.\n if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) {\n return false;\n }\n } else {\n const inv_d = 1.0 / d[f];\n let t1 = (this.lowerBound[f] - p[f]) * inv_d;\n let t2 = (this.upperBound[f] - p[f]) * inv_d;\n\n // Sign of the normal vector.\n let s = -1.0;\n\n if (t1 > t2) {\n const temp = t1;\n t1 = t2;\n t2 = temp;\n s = 1.0;\n }\n\n // Push the min up\n if (t1 > tmin) {\n normal.setZero();\n normal[f] = s;\n tmin = t1;\n }\n\n // Pull the max down\n tmax = math_min(tmax, t2);\n\n if (tmin > tmax) {\n return false;\n }\n }\n }\n\n // Does the ray start inside the box?\n // Does the ray intersect beyond the max fraction?\n if (tmin < 0.0 || input.maxFraction < tmin) {\n return false;\n }\n\n // Intersection.\n output.fraction = tmin;\n output.normal = normal;\n return true;\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue {\n out.lowerBound.x = math_min(a.x, b.x);\n out.lowerBound.y = math_min(a.y, b.y);\n out.upperBound.x = math_max(a.x, b.x);\n out.upperBound.y = math_max(a.y, b.y);\n return out;\n }\n\n static combinedPerimeter(a: AABBValue, b: AABBValue) {\n const lx = math_min(a.lowerBound.x, b.lowerBound.x);\n const ly = math_min(a.lowerBound.y, b.lowerBound.y);\n const ux = math_max(a.upperBound.x, b.upperBound.x);\n const uy = math_max(a.upperBound.y, b.upperBound.y);\n return 2.0 * (ux - lx + uy - ly); \n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Tuning constants based on meters-kilograms-seconds (MKS) units.\n * \n * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units.\n */\nexport class Settings {\n /**\n * You can use this to change the length scale used by your game.\n * \n * For example for inches you could use 39.4.\n */\n static lengthUnitsPerMeter = 1.0;\n \n // Collision\n /**\n * The maximum number of contact points between two convex shapes. Do not change\n * this value.\n */\n static maxManifoldPoints: number = 2;\n\n /**\n * The maximum number of vertices on a convex polygon. You cannot increase this\n * too much because BlockAllocator has a maximum object size.\n */\n static maxPolygonVertices: number = 12;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This allows proxies to move\n * by a small amount without triggering a tree adjustment. This is in meters.\n */\n static aabbExtension: number = 0.1;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This is used to predict the\n * future position based on the current displacement. This is a dimensionless\n * multiplier.\n */\n static aabbMultiplier: number = 2.0;\n\n /**\n * A small length used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static linearSlop: number = 0.005;\n\n /**\n * A small angle used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static angularSlop: number = (2.0 / 180.0 * math_PI);\n\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 static get polygonRadius(): number { return 2.0 * Settings.linearSlop; }\n\n /**\n * Maximum number of sub-steps per contact in continuous physics simulation.\n */\n static maxSubSteps: number = 8;\n\n // Dynamics\n\n /**\n * Maximum number of contacts to be handled to solve a TOI impact.\n */\n static maxTOIContacts: number = 32;\n\n /**\n * Maximum iterations to solve a TOI.\n */\n static maxTOIIterations: number = 20;\n\n /**\n * Maximum iterations to find Distance.\n */\n static maxDistanceIterations: number = 20;\n\n /**\n * A velocity threshold for elastic collisions. Any collision with a relative\n * linear velocity below this threshold will be treated as inelastic.\n */\n static velocityThreshold: number = 1.0;\n\n /**\n * The maximum linear position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxLinearCorrection: number = 0.2;\n\n /**\n * The maximum angular position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxAngularCorrection: number = (8.0 / 180.0 * math_PI);\n\n /**\n * The maximum linear velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxTranslation: number = 2.0;\n\n /**\n * The maximum angular velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxRotation: number = (0.5 * math_PI);\n\n /**\n * This scale factor controls how fast overlap is resolved. Ideally this would\n * be 1 so that overlap is removed in one time step. However using values close\n * to 1 often lead to overshoot.\n */\n static baumgarte: number = 0.2;\n static toiBaugarte: number = 0.75;\n\n // Sleep\n\n /**\n * The time that a body must be still before it will go to sleep.\n */\n static timeToSleep: number = 0.5;\n\n /**\n * A body cannot sleep if its linear velocity is above this tolerance.\n */\n static linearSleepTolerance: number = 0.01;\n\n /**\n * A body cannot sleep if its angular velocity is above this tolerance.\n */\n static angularSleepTolerance: number = (2.0 / 180.0 * math_PI);\n}\n\n/** @internal */\nexport class SettingsInternal {\n static get maxManifoldPoints() {\n return Settings.maxManifoldPoints;\n }\n static get maxPolygonVertices() {\n return Settings.maxPolygonVertices;\n }\n static get aabbExtension() {\n return Settings.aabbExtension * Settings.lengthUnitsPerMeter;\n }\n static get aabbMultiplier() {\n return Settings.aabbMultiplier;\n }\n static get linearSlop() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get linearSlopSquared() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get angularSlop() {\n return Settings.angularSlop;\n }\n static get polygonRadius() {\n return 2.0 * Settings.linearSlop;\n }\n static get maxSubSteps() {\n return Settings.maxSubSteps;\n }\n static get maxTOIContacts() {\n return Settings.maxTOIContacts;\n }\n static get maxTOIIterations() {\n return Settings.maxTOIIterations;\n }\n static get maxDistanceIterations() {\n return Settings.maxDistanceIterations;\n }\n static get velocityThreshold() {\n return Settings.velocityThreshold * Settings.lengthUnitsPerMeter;\n }\n static get maxLinearCorrection() {\n return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter;\n }\n static get maxAngularCorrection() {\n return Settings.maxAngularCorrection;\n }\n static get maxTranslation() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxTranslationSquared() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxRotation() {\n return Settings.maxRotation;\n }\n static get maxRotationSquared() {\n return Settings.maxRotation * Settings.maxRotation;\n }\n static get baumgarte() {\n return Settings.baumgarte;\n }\n static get toiBaugarte() {\n return Settings.toiBaugarte;\n }\n static get timeToSleep() {\n return Settings.timeToSleep;\n }\n static get linearSleepTolerance() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get linearSleepToleranceSqr() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get angularSleepTolerance() {\n return Settings.angularSleepTolerance;\n }\n static get angularSleepToleranceSqr() {\n return Settings.angularSleepTolerance * Settings.angularSleepTolerance;\n }\n}\n","/*\n * Copyright (c) 2016-2018 Ali Shakiba http://shakiba.me/planck.js\n *\n * This software is provided 'as-is', without any express or implied\n * warranty. In no event will the authors be held liable for any damages\n * arising from the use of this software.\n * Permission is granted to anyone to use this software for any purpose,\n * including commercial applications, and to alter it and redistribute it\n * freely, subject to the following restrictions:\n * 1. The origin of this software must not be misrepresented; you must not\n * claim that you wrote the original software. If you use this software\n * in a product, an acknowledgment in the product documentation would be\n * appreciated but is not required.\n * 2. Altered source versions must be plainly marked as such, and must not be\n * misrepresented as being the original software.\n * 3. This notice may not be removed or altered from any source distribution.\n */\n\n/** @internal */\nexport interface PoolOptions {\n max?: number,\n create?: () => T,\n /** Called when an object is being re-allocated. */\n allocate?: (item: T) => void,\n /** Called when an object is returned to pool. */\n release?: (item: T) => void,\n /** Called when an object is returned to the pool but will be disposed from pool. */\n dispose?: (item: T) => T,\n}\n\n/** @internal */\nexport class Pool {\n _list: T[] = [];\n _max: number = Infinity;\n\n _createFn: () => T;\n _hasCreateFn: boolean = false;\n _createCount: number = 0;\n\n _allocateFn: (item: T) => void;\n _hasAllocateFn: boolean = false;\n _allocateCount: number = 0;\n\n _releaseFn: (item: T) => void;\n _hasReleaseFn: boolean = false;\n _releaseCount: number = 0;\n\n _disposeFn: (item: T) => T;\n _hasDisposeFn: boolean = false;\n _disposeCount: number = 0;\n\n constructor(opts: PoolOptions) {\n this._list = [];\n this._max = opts.max || this._max;\n\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\n max(n?: number): number | Pool {\n if (typeof n === \"number\") {\n this._max = n;\n return this;\n }\n return this._max;\n }\n\n size(): number {\n return this._list.length;\n }\n\n allocate(): T {\n let item: T;\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 // tslint:disable-next-line:no-object-literal-type-assertion\n item = {} as T;\n }\n }\n this._allocateCount++;\n if (this._hasAllocateFn) {\n this._allocateFn(item);\n }\n return item;\n }\n\n release(item: T): void {\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\n toString(): string {\n return \" +\" + this._createCount + \" >\" + this._allocateCount + \" <\" + this._releaseCount + \" -\"\n + this._disposeCount + \" =\" + this._list.length + \"/\" + this._max;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Pool } from \"../util/Pool\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\nexport type DynamicTreeQueryCallback = (nodeId: number) => boolean;\n\n/**\n * A node in the dynamic tree. The client does not interact with this directly.\n */\nexport class TreeNode {\n id: number;\n /** Enlarged AABB */\n aabb: AABB = new AABB();\n userData: T = null;\n parent: TreeNode = null;\n child1: TreeNode = null;\n child2: TreeNode = null;\n /** 0: leaf, -1: free node */\n height: number = -1;\n\n constructor(id?: number) {\n this.id = id;\n }\n\n /** @internal */\n toString(): string {\n return this.id + \": \" + this.userData;\n }\n\n isLeaf(): boolean {\n return this.child1 == null;\n }\n}\n\n/** @internal */ const poolTreeNode = new Pool>({\n create(): TreeNode {\n return new TreeNode();\n },\n release(node: TreeNode) {\n node.userData = null;\n node.parent = null;\n node.child1 = null;\n node.child2 = null;\n node.height = -1;\n node.id = undefined;\n }\n});\n\n/**\n * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A\n * dynamic tree arranges data in a binary tree to accelerate queries such as\n * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we\n * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger\n * than the client object. This allows the client object to move by small\n * amounts without triggering a tree update.\n *\n * Nodes are pooled and relocatable, so we use node indices rather than\n * pointers.\n */\nexport class DynamicTree {\n m_root: TreeNode;\n m_lastProxyId: number;\n m_nodes: {\n [id: number]: TreeNode\n };\n\n constructor() {\n this.m_root = null;\n this.m_nodes = {};\n this.m_lastProxyId = 0;\n }\n\n /**\n * Get proxy user data.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getUserData(id: number): T {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.userData;\n }\n\n /**\n * Get the fat AABB for a node id.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getFatAABB(id: number): AABB {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.aabb;\n }\n\n allocateNode(): TreeNode {\n const node = poolTreeNode.allocate();\n node.id = ++this.m_lastProxyId;\n this.m_nodes[node.id] = node;\n return node;\n }\n\n freeNode(node: TreeNode): void {\n // tslint:disable-next-line:no-dynamic-delete\n delete this.m_nodes[node.id];\n poolTreeNode.release(node);\n }\n\n /**\n * Create a proxy in the tree as a leaf node. We return the index of the node\n * instead of a pointer so that we can grow the node pool.\n *\n * Create a proxy. Provide a tight fitting AABB and a userData pointer.\n */\n createProxy(aabb: AABBValue, userData: T): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n\n const node = this.allocateNode();\n\n node.aabb.set(aabb);\n\n // Fatten the aabb.\n AABB.extend(node.aabb, Settings.aabbExtension);\n\n node.userData = userData;\n node.height = 0;\n\n this.insertLeaf(node);\n\n return node.id;\n }\n\n /**\n * Destroy a proxy. This asserts if the id is invalid.\n */\n destroyProxy(id: number): void {\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n this.removeLeaf(node);\n this.freeNode(node);\n }\n\n /**\n * Move a proxy with a swepted AABB. If the proxy has moved outside of its\n * fattened AABB, then the proxy is removed from the tree and re-inserted.\n * Otherwise the function returns immediately.\n *\n * @param d Displacement\n *\n * @return true if the proxy was re-inserted.\n */\n moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean {\n _ASSERT && console.assert(AABB.isValid(aabb));\n _ASSERT && console.assert(!d || Vec2.isValid(d));\n\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n if (node.aabb.contains(aabb)) {\n return false;\n }\n\n this.removeLeaf(node);\n\n node.aabb.set(aabb);\n\n // Extend AABB.\n aabb = node.aabb;\n AABB.extend(aabb, Settings.aabbExtension);\n\n // Predict AABB displacement.\n // const d = Vec2.mul(Settings.aabbMultiplier, displacement);\n\n if (d.x < 0.0) {\n aabb.lowerBound.x += d.x * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.x += d.x * Settings.aabbMultiplier;\n }\n\n if (d.y < 0.0) {\n aabb.lowerBound.y += d.y * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.y += d.y * Settings.aabbMultiplier;\n }\n\n this.insertLeaf(node);\n\n return true;\n }\n\n insertLeaf(leaf: TreeNode): void {\n _ASSERT && console.assert(AABB.isValid(leaf.aabb));\n\n if (this.m_root == null) {\n this.m_root = leaf;\n this.m_root.parent = null;\n return;\n }\n\n // Find the best sibling for this node\n const leafAABB = leaf.aabb;\n let index = this.m_root;\n while (!index.isLeaf()) {\n const child1 = index.child1;\n const child2 = index.child2;\n\n const area = index.aabb.getPerimeter();\n\n const combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB);\n\n // Cost of creating a new parent for this node and the new leaf\n const cost = 2.0 * combinedArea;\n\n // Minimum cost of pushing the leaf further down the tree\n const inheritanceCost = 2.0 * (combinedArea - area);\n\n // Cost of descending into child1\n const newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb);\n let cost1 = newArea1 + inheritanceCost;\n if (!child1.isLeaf()) {\n const oldArea = child1.aabb.getPerimeter();\n cost1 -= oldArea;\n }\n\n // Cost of descending into child2\n const newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb);\n let cost2 = newArea2 + inheritanceCost;\n if (!child2.isLeaf()) {\n const oldArea = child2.aabb.getPerimeter();\n cost2 -= oldArea;\n }\n\n // Descend according to the minimum cost.\n if (cost < cost1 && cost < cost2) {\n break;\n }\n\n // Descend\n if (cost1 < cost2) {\n index = child1;\n } else {\n index = child2;\n }\n }\n\n const sibling = index;\n\n // Create a new parent.\n const oldParent = sibling.parent;\n const 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\n if (oldParent != null) {\n // The sibling was not the root.\n if (oldParent.child1 === sibling) {\n oldParent.child1 = newParent;\n } else {\n oldParent.child2 = newParent;\n }\n\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n } else {\n // The sibling was the root.\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n this.m_root = newParent;\n }\n\n // Walk back up the tree fixing heights and AABBs\n index = leaf.parent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n _ASSERT && console.assert(child1 != null);\n _ASSERT && console.assert(child2 != null);\n\n index.height = 1 + math_max(child1.height, child2.height);\n index.aabb.combine(child1.aabb, child2.aabb);\n\n index = index.parent;\n }\n\n // validate();\n }\n\n removeLeaf(leaf: TreeNode): void {\n if (leaf === this.m_root) {\n this.m_root = null;\n return;\n }\n\n const parent = leaf.parent;\n const grandParent = parent.parent;\n let sibling;\n if (parent.child1 === leaf) {\n sibling = parent.child2;\n } else {\n sibling = parent.child1;\n }\n\n if (grandParent != null) {\n // Destroy parent and connect sibling to grandParent.\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\n // Adjust ancestor bounds.\n let index = grandParent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n index.aabb.combine(child1.aabb, child2.aabb);\n index.height = 1 + math_max(child1.height, child2.height);\n\n index = index.parent;\n }\n } else {\n this.m_root = sibling;\n sibling.parent = null;\n this.freeNode(parent);\n }\n\n // validate();\n }\n\n /**\n * Perform a left or right rotation if node A is imbalanced. Returns the new\n * root index.\n */\n balance(iA: TreeNode): TreeNode {\n _ASSERT && console.assert(iA != null);\n\n const A = iA;\n if (A.isLeaf() || A.height < 2) {\n return iA;\n }\n\n const B = A.child1;\n const C = A.child2;\n\n const balance = C.height - B.height;\n\n // Rotate C up\n if (balance > 1) {\n const F = C.child1;\n const G = C.child2;\n\n // Swap A and C\n C.child1 = A;\n C.parent = A.parent;\n A.parent = C;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(B.height, G.height);\n C.height = 1 + math_max(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\n A.height = 1 + math_max(B.height, F.height);\n C.height = 1 + math_max(A.height, G.height);\n }\n\n return C;\n }\n\n // Rotate B up\n if (balance < -1) {\n const D = B.child1;\n const E = B.child2;\n\n // Swap A and B\n B.child1 = A;\n B.parent = A.parent;\n A.parent = B;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(C.height, E.height);\n B.height = 1 + math_max(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\n A.height = 1 + math_max(C.height, D.height);\n B.height = 1 + math_max(A.height, E.height);\n }\n\n return B;\n }\n\n return A;\n }\n\n /**\n * Compute the height of the binary tree in O(N) time. Should not be called\n * often.\n */\n getHeight(): number {\n if (this.m_root == null) {\n return 0;\n }\n\n return this.m_root.height;\n }\n\n /**\n * Get the ratio of the sum of the node areas to the root area.\n */\n getAreaRatio(): number {\n if (this.m_root == null) {\n return 0.0;\n }\n\n const root = this.m_root;\n const rootArea = root.aabb.getPerimeter();\n\n let totalArea = 0.0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // Free node in pool\n continue;\n }\n\n totalArea += node.aabb.getPerimeter();\n }\n\n this.iteratorPool.release(it);\n\n return totalArea / rootArea;\n }\n\n /**\n * Compute the height of a sub-tree.\n */\n computeHeight(id?: number): number {\n let node;\n if (typeof id !== \"undefined\") {\n node = this.m_nodes[id];\n } else {\n node = this.m_root;\n }\n\n // _ASSERT && console.assert(0 <= id && id < this.m_nodeCapacity);\n\n if (node.isLeaf()) {\n return 0;\n }\n\n const height1 = this.computeHeight(node.child1.id);\n const height2 = this.computeHeight(node.child2.id);\n return 1 + math_max(height1, height2);\n }\n\n validateStructure(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n if (node === this.m_root) {\n _ASSERT && console.assert(node.parent == null);\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n _ASSERT && console.assert(child1.parent === node);\n _ASSERT && console.assert(child2.parent === node);\n\n this.validateStructure(child1);\n this.validateStructure(child2);\n }\n\n validateMetrics(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n const height1 = child1.height;\n const height2 = child2.height;\n const height = 1 + math_max(height1, height2);\n _ASSERT && console.assert(node.height === height);\n\n const aabb = new AABB();\n aabb.combine(child1.aabb, child2.aabb);\n\n _ASSERT && console.assert(AABB.areEqual(aabb, node.aabb));\n\n this.validateMetrics(child1);\n this.validateMetrics(child2);\n }\n\n /**\n * Validate this tree. For testing.\n */\n validate(): void {\n if (!_ASSERT) return;\n this.validateStructure(this.m_root);\n this.validateMetrics(this.m_root);\n\n console.assert(this.getHeight() === this.computeHeight());\n }\n\n /**\n * Get the maximum balance of an node in the tree. The balance is the difference\n * in height of the two children of a node.\n */\n getMaxBalance(): number {\n let maxBalance = 0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height <= 1) {\n continue;\n }\n\n _ASSERT && console.assert(!node.isLeaf());\n\n const balance = math_abs(node.child2.height - node.child1.height);\n maxBalance = math_max(maxBalance, balance);\n }\n this.iteratorPool.release(it);\n\n return maxBalance;\n }\n\n /**\n * Build an optimal tree. Very expensive. For testing.\n */\n rebuildBottomUp(): void {\n const nodes = [];\n let count = 0;\n\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // free node in pool\n continue;\n }\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\n while (count > 1) {\n let minCost = Infinity;\n let iMin = -1;\n let jMin = -1;\n for (let i = 0; i < count; ++i) {\n const aabbi = nodes[i].aabb;\n for (let j = i + 1; j < count; ++j) {\n const aabbj = nodes[j].aabb;\n const cost = AABB.combinedPerimeter(aabbi, aabbj);\n if (cost < minCost) {\n iMin = i;\n jMin = j;\n minCost = cost;\n }\n }\n }\n\n const child1 = nodes[iMin];\n const child2 = nodes[jMin];\n\n const parent = this.allocateNode();\n parent.child1 = child1;\n parent.child2 = child2;\n parent.height = 1 + math_max(child1.height, child2.height);\n parent.aabb.combine(child1.aabb, child2.aabb);\n parent.parent = null;\n\n child1.parent = parent;\n child2.parent = parent;\n\n nodes[jMin] = nodes[count - 1];\n nodes[iMin] = parent;\n --count;\n }\n\n this.m_root = nodes[0];\n\n _ASSERT && this.validate();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n const 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\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void {\n _ASSERT && console.assert(typeof queryCallback === \"function\");\n const stack = this.stackPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, aabb)) {\n if (node.isLeaf()) {\n const 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\n this.stackPool.release(stack);\n }\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n // TODO: GC\n _ASSERT && console.assert(typeof rayCastCallback === \"function\");\n const p1 = input.p1;\n const p2 = input.p2;\n const r = Vec2.sub(p2, p1);\n _ASSERT && console.assert(r.lengthSquared() > 0.0);\n r.normalize();\n\n // v is perpendicular to the segment.\n const v = Vec2.crossNumVec2(1.0, r);\n const abs_v = Vec2.abs(v);\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n\n let maxFraction = input.maxFraction;\n\n // Build a bounding box for the segment.\n const segmentAABB = new AABB();\n let t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2);\n segmentAABB.combinePoints(p1, t);\n\n const stack = this.stackPool.allocate();\n const subInput = this.inputPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, segmentAABB) === false) {\n continue;\n }\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n const c = node.aabb.getCenter();\n const h = node.aabb.getExtents();\n const separation = math_abs(Vec2.dot(v, Vec2.sub(p1, c))) - Vec2.dot(abs_v, h);\n if (separation > 0.0) {\n continue;\n }\n\n if (node.isLeaf()) {\n subInput.p1 = Vec2.clone(input.p1);\n subInput.p2 = Vec2.clone(input.p2);\n subInput.maxFraction = maxFraction;\n\n const value = rayCastCallback(subInput, node.id);\n\n if (value === 0.0) {\n // The client has terminated the ray cast.\n break;\n } else if (value > 0.0) {\n // update segment bounding box.\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\n private inputPool: Pool = new Pool({\n create(): RayCastInput {\n // tslint:disable-next-line:no-object-literal-type-assertion\n return {} as RayCastInput;\n },\n release(stack: RayCastInput): void {\n }\n });\n\n private stackPool: Pool>> = new Pool>>({\n create(): Array> {\n return [];\n },\n release(stack: Array>): void {\n stack.length = 0;\n }\n });\n\n private iteratorPool: Pool> = new Pool>({\n create(): Iterator {\n return new Iterator();\n },\n release(iterator: Iterator): void {\n iterator.close();\n }\n });\n\n}\n\n/** @internal */\nclass Iterator {\n parents: Array> = [];\n states: number[] = [];\n preorder(root: TreeNode): Iterator {\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 next(): TreeNode {\n while (this.parents.length > 0) {\n const i = this.parents.length - 1;\n const 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 close(): void {\n this.parents.length = 0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\nimport { DynamicTree, DynamicTreeQueryCallback } from \"./DynamicTree\";\nimport { FixtureProxy } from \"../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/**\n * The broad-phase wraps and extends a dynamic-tree to keep track of moved\n * objects and query them on update.\n */\nexport class BroadPhase {\n m_tree: DynamicTree = new DynamicTree();\n m_moveBuffer: number[] = [];\n\n m_callback: (userDataA: any, userDataB: any) => void;\n m_queryProxyId: number;\n\n /**\n * Get user data from a proxy. Returns null if the id is invalid.\n */\n getUserData(proxyId: number): FixtureProxy {\n return this.m_tree.getUserData(proxyId);\n }\n\n /**\n * Test overlap of fat AABBs.\n */\n testOverlap(proxyIdA: number, proxyIdB: number): boolean {\n const aabbA = this.m_tree.getFatAABB(proxyIdA);\n const aabbB = this.m_tree.getFatAABB(proxyIdB);\n return AABB.testOverlap(aabbA, aabbB);\n }\n\n /**\n * Get the fat AABB for a proxy.\n */\n getFatAABB(proxyId: number): AABB {\n return this.m_tree.getFatAABB(proxyId);\n }\n\n /**\n * Get the number of proxies.\n */\n getProxyCount(): number {\n return this.m_moveBuffer.length;\n }\n\n /**\n * Get the height of the embedded tree.\n */\n getTreeHeight(): number {\n return this.m_tree.getHeight();\n }\n\n /**\n * Get the balance (integer) of the embedded tree.\n */\n getTreeBalance(): number {\n return this.m_tree.getMaxBalance();\n }\n\n /**\n * Get the quality metric of the embedded tree.\n */\n getTreeQuality(): number {\n return this.m_tree.getAreaRatio();\n }\n\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query = (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void => {\n this.m_tree.query(aabb, queryCallback);\n };\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n this.m_tree.rayCast(input, rayCastCallback);\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_tree.shiftOrigin(newOrigin);\n }\n\n /**\n * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs\n * is called.\n */\n createProxy(aabb: AABBValue, userData: FixtureProxy): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const proxyId = this.m_tree.createProxy(aabb, userData);\n this.bufferMove(proxyId);\n return proxyId;\n }\n\n /**\n * Destroy a proxy. It is up to the client to remove any pairs.\n */\n destroyProxy(proxyId: number): void {\n this.unbufferMove(proxyId);\n this.m_tree.destroyProxy(proxyId);\n }\n\n /**\n * Call moveProxy as many times as you like, then when you are done call\n * UpdatePairs to finalized the proxy pairs (for your time step).\n */\n moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const changed = this.m_tree.moveProxy(proxyId, aabb, displacement);\n if (changed) {\n this.bufferMove(proxyId);\n }\n }\n\n /**\n * Call to trigger a re-processing of it's pairs on the next call to\n * UpdatePairs.\n */\n touchProxy(proxyId: number): void {\n this.bufferMove(proxyId);\n }\n\n bufferMove(proxyId: number): void {\n this.m_moveBuffer.push(proxyId);\n }\n\n unbufferMove(proxyId: number): void {\n for (let 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\n /**\n * Update the pairs. This results in pair callbacks. This can only add pairs.\n */\n updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void {\n _ASSERT && console.assert(typeof addPairCallback === \"function\");\n this.m_callback = addPairCallback;\n\n // Perform tree queries for all moving proxies.\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\n // We have to query the tree with the fat AABB so that\n // we don't fail to create a pair that may touch later.\n const fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId);\n\n // Query tree, create pairs and add them pair buffer.\n this.m_tree.query(fatAABB, this.queryCallback);\n }\n\n // Try to keep the tree balanced.\n // this.m_tree.rebalance(4);\n }\n\n queryCallback = (proxyId: number): boolean => {\n // A proxy cannot form a pair with itself.\n if (proxyId === this.m_queryProxyId) {\n return true;\n }\n\n const proxyIdA = math_min(proxyId, this.m_queryProxyId);\n const proxyIdB = math_max(proxyId, this.m_queryProxyId);\n\n // TODO: Skip any duplicate pairs.\n\n const userDataA = this.m_tree.getUserData(proxyIdA);\n const userDataB = this.m_tree.getUserData(proxyIdB);\n\n // Send the pairs back to the client.\n this.m_callback(userDataA, userDataB);\n\n return true;\n };\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2023 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\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_sqrt = Math.sqrt;\n\n\nimport { RotValue } from \"./Rot\";\nimport { TransformValue } from \"./Transform\";\nimport { Vec2Value } from \"./Vec2\";\nimport { Vec3Value } from \"./Vec3\";\n\nexport function vec2(x: number, y: number): Vec2Value {\n return { x, y };\n}\n\nexport function vec3(x: number, y: number, z: number): Vec3Value {\n return { x, y, z };\n}\n\nexport function rotation(angle: number): RotValue {\n return { s: math_sin(angle), c: math_cos(angle) };\n}\n\nexport function setVec2(out: Vec2Value, x: number, y: number): Vec2Value {\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function copyVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = w.x;\n out.y = w.y;\n return out;\n}\n\nexport function zeroVec2(out: Vec2Value): Vec2Value {\n out.x = 0;\n out.y = 0;\n return out;\n}\n\nexport function negVec2(out: Vec2Value): Vec2Value {\n out.x = -out.x;\n out.y = -out.y;\n return out;\n}\n\nexport function plusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x += w.x;\n out.y += w.y;\n return out;\n}\n\nexport function addVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x + w.x;\n out.y = v.x + w.y;\n return out;\n}\n\nexport function minusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x -= w.x;\n out.y -= w.y;\n return out;\n}\n\nexport function subVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x - w.x;\n out.y = v.y - w.y;\n return out;\n}\n\nexport function mulVec2(out: Vec2Value, m: number): Vec2Value {\n out.x *= m;\n out.y *= m;\n return out;\n}\n\nexport function scaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x = m * w.x;\n out.y = m * w.y;\n return out;\n}\n\nexport function plusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x += m * w.x;\n out.y += m * w.y;\n return out;\n}\n\nexport function minusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x -= m * w.x;\n out.y -= m * w.y;\n return out;\n}\n\nexport function combine2Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x;\n out.y = am * a.y + bm * b.y;\n return out;\n}\n\nexport function combine3Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value, cm: number, c: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x + cm * c.x;\n out.y = am * a.y + bm * b.y + cm * c.y;\n return out;\n}\n\nexport function normalizeVec2Length(out: Vec2Value): number {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length !== 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return length;\n}\n\nexport function normalizeVec2(out: Vec2Value): Vec2Value {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length > 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return out;\n}\n\nexport function crossVec2Num(out: Vec2Value, v: Vec2Value, w: number): Vec2Value {\n const x = w * v.y;\n const y = -w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossNumVec2(out: Vec2Value, w: number, v: Vec2Value): Vec2Value {\n const x = -w * v.y;\n const y = w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossVec2Vec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.y - a.y * b.x;\n}\n\nexport function dotVec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.x + a.y * b.y;\n}\n\nexport function lengthVec2(a: Vec2Value): number {\n return math_sqrt(a.x * a.x + a.y * a.y);\n}\n\nexport function lengthSqrVec2(a: Vec2Value): number {\n return a.x * a.x + a.y * a.y;\n}\n\nexport function distVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return math_sqrt(dx * dx + dy * dy);\n}\n\nexport function distSqrVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return dx * dx + dy * dy;\n}\n\nexport function dotVec3(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n}\n\nexport function setRotAngle(out: RotValue, a: number): RotValue {\n out.c = math_cos(a);\n out.s = math_sin(a);\n return out;\n}\n\nexport function rotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n out.x = q.c * v.x - q.s * v.y;\n out.y = q.s * v.x + q.c * v.y;\n return out;\n}\n\nexport function derotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n const x = q.c * v.x + q.s * v.y;\n const y = -q.s * v.x + q.c * v.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function rerotVec2(out: Vec2Value, before: RotValue, after: RotValue, v: Vec2Value): Vec2Value {\n const x0 = before.c * v.x + before.s * v.y;\n const y0 = -before.s * v.x + before.c * v.y;\n const x = after.c * x0 - after.s * y0;\n const y = after.s * x0 + after.c * y0;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function transform(x: number, y: number, a: number): TransformValue {\n return { p: vec2(x, y), q: rotation(a) };\n}\n\nexport function copyTransform(out: TransformValue, transform: TransformValue): TransformValue {\n out.p.x = transform.p.x;\n out.p.y = transform.p.y;\n out.q.s = transform.q.s;\n out.q.c = transform.q.c;\n return out;\n}\n\nexport function transformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const x = xf.q.c * v.x - xf.q.s * v.y + xf.p.x;\n const y = xf.q.s * v.x + xf.q.c * v.y + xf.p.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const px = v.x - xf.p.x;\n const py = v.y - xf.p.y;\n const x = (xf.q.c * px + xf.q.s * py);\n const y = (-xf.q.s * px + xf.q.c * py);\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function retransformVec2(out: Vec2Value, from: TransformValue, to: TransformValue, v: Vec2Value): Vec2Value {\n const x0 = from.q.c * v.x - from.q.s * v.y + from.p.x;\n const y0 = from.q.s * v.x + from.q.c * v.y + from.p.y;\n const px = x0 - to.p.x;\n const py = y0 - to.p.y;\n const x = to.q.c * px + to.q.s * py;\n const y = -to.q.s * px + to.q.c * py;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformTransform(out: TransformValue, a: TransformValue, b: TransformValue): TransformValue {\n const c = a.q.c * b.q.c + a.q.s * b.q.s;\n const s = a.q.c * b.q.s - a.q.s * b.q.c;\n const x = a.q.c * (b.p.x - a.p.x) + a.q.s * (b.p.y - a.p.y);\n const y = -a.q.s * (b.p.x - a.p.x) + a.q.c * (b.p.y - a.p.y);\n out.q.c = c;\n out.q.s = s;\n out.p.x = x;\n out.p.y = y;\n return out;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_atan2 = Math.atan2;\n\nexport interface RotValue {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n}\n\nexport class Rot {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n\n /** Initialize from an angle in radians. */\n constructor(angle?: number | RotValue) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Rot)) {\n return new Rot(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\n /** @hidden */\n static neo(angle: number): Rot {\n const obj = Object.create(Rot.prototype);\n obj.setAngle(angle);\n return obj;\n }\n\n static clone(rot: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n const obj = Object.create(Rot.prototype);\n obj.s = rot.s;\n obj.c = rot.c;\n return obj;\n }\n\n static identity(): Rot {\n const obj = Object.create(Rot.prototype);\n obj.s = 0.0;\n obj.c = 1.0;\n return obj;\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.s) && Number.isFinite(obj.c);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Rot.isValid(o), \"Invalid Rot!\", o);\n }\n\n /** Set to the identity rotation. */\n setIdentity(): void {\n this.s = 0.0;\n this.c = 1.0;\n }\n\n set(angle: number | RotValue): void {\n if (typeof angle === \"object\") {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n\n } else {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n }\n\n setRot(angle: RotValue): void {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n }\n\n /** Set using an angle in radians. */\n setAngle(angle: number): void {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n\n /** Get the angle in radians. */\n getAngle(): number {\n return math_atan2(this.s, this.c);\n }\n\n /** Get the x-axis. */\n getXAxis(): Vec2 {\n return Vec2.neo(this.c, this.s);\n }\n\n /** Get the y-axis. */\n getYAxis(): Vec2 {\n return Vec2.neo(-this.s, this.c);\n }\n\n /** Multiply two rotations: q * r */\n static mul(rot: RotValue, m: RotValue): Rot;\n /** Rotate a vector */\n static mul(rot: RotValue, m: Vec2Value): Vec2;\n static mul(rot, m) {\n _ASSERT && Rot.assert(rot);\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Multiply two rotations: q * r */\n static mulRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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\n /** Rotate a vector */\n static mulVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n\n static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2 {\n const x = rot.c * (v.x - w.x) - rot.s * (v.y - w.y);\n const y = rot.s * (v.x - w.x) + rot.c * (v.y - w.y);\n return Vec2.neo(x, y);\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulT(rot: RotValue, m: RotValue): Rot;\n /** Inverse rotate a vector */\n static mulT(rot: RotValue, m: Vec2Value): Vec2;\n static mulT(rot, m) {\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulTRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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\n /** Inverse rotate a vector */\n static mulTVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"./Matrix\";\nimport { mod } from \"./Math\";\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { TransformValue } from \"./Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_atan2 = Math.atan2;\n/** @internal */ const math_PI = Math.PI;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * This describes the motion of a body/shape for TOI computation. Shapes are\n * defined with respect to the body origin, which may not coincide with the\n * center of mass. However, to support dynamics we must interpolate the center\n * of mass position.\n */\nexport class Sweep {\n /** Local center of mass position */\n localCenter = Vec2.zero();\n\n /** World center position */\n c = Vec2.zero();\n\n /** World angle */\n a = 0;\n\n /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */\n alpha0 = 0;\n\n c0 = Vec2.zero();\n a0 = 0;\n\n /** @internal */\n recycle() {\n matrix.zeroVec2(this.localCenter);\n matrix.zeroVec2(this.c);\n this.a = 0;\n this.alpha0 = 0;\n matrix.zeroVec2(this.c0);\n this.a0 = 0;\n }\n\n setTransform(xf: TransformValue): void {\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n\n this.a = this.a0 = math_atan2(xf.q.s, xf.q.c);\n }\n\n setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void {\n matrix.copyVec2(this.localCenter, localCenter);\n\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n }\n\n /**\n * Get the interpolated transform at a specific time.\n *\n * @param xf\n * @param beta A factor in [0,1], where 0 indicates alpha0\n */\n getTransform(xf: TransformValue, beta: number = 0): void {\n matrix.setRotAngle(xf.q, (1.0 - beta) * this.a0 + beta * this.a);\n matrix.combine2Vec2(xf.p, (1.0 - beta), this.c0, beta, this.c);\n\n // shift to origin\n matrix.minusVec2(xf.p, matrix.rotVec2(temp, xf.q, this.localCenter));\n }\n\n /**\n * Advance the sweep forward, yielding a new initial state.\n *\n * @param alpha The new initial time\n */\n advance(alpha: number): void {\n _ASSERT && console.assert(this.alpha0 < 1.0);\n const beta = (alpha - this.alpha0) / (1.0 - this.alpha0);\n matrix.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\n forward(): void {\n this.a0 = this.a;\n matrix.copyVec2(this.c0, this.c);\n }\n\n /**\n * normalize the angles in radians to be between -pi and pi.\n */\n normalize(): void {\n const a0 = mod(this.a0, -math_PI, +math_PI);\n this.a -= this.a0 - a0;\n this.a0 = a0;\n }\n\n set(that: Sweep): void {\n matrix.copyVec2(this.localCenter, that.localCenter);\n matrix.copyVec2(this.c, that.c);\n this.a = that.a;\n this.alpha0 = that.alpha0;\n matrix.copyVec2(this.c0, that.c0);\n this.a0 = that.a0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Rot, RotValue } from \"./Rot\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport type TransformValue = {\n p: Vec2Value;\n q: RotValue;\n};\n\n/**\n * A transform contains translation and rotation. It is used to represent the\n * position and orientation of rigid frames. Initialize using a position vector\n * and a rotation.\n */\nexport class Transform {\n /** position */\n p: Vec2;\n\n /** rotation */\n q: Rot;\n\n constructor(position?: Vec2Value, rotation?: number) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Transform)) {\n return new Transform(position, rotation);\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 rotation !== \"undefined\") {\n this.q.setAngle(rotation);\n }\n }\n\n static clone(xf: Transform): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(xf.p);\n obj.q = Rot.clone(xf.q);\n return obj;\n }\n\n /** @hidden */\n static neo(position: Vec2Value, rotation: Rot): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(position);\n obj.q = Rot.clone(rotation);\n return obj;\n }\n\n static identity(): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.zero();\n obj.q = Rot.identity();\n return obj;\n }\n\n /** Set this to the identity transform */\n setIdentity(): void {\n this.p.setZero();\n this.q.setIdentity();\n }\n\n /** Set position and angle */\n set(position: Vec2Value, rotation: number): void;\n /** Copy from another transform */\n set(xf: TransformValue): void;\n set(a: any, b?: any) {\n if (typeof b === \"undefined\") {\n this.p.set(a.p);\n this.q.set(a.q);\n } else {\n this.p.set(a);\n this.q.set(b);\n }\n }\n\n /** Set position and angle */\n setNum(position: Vec2Value, rotation: number) {\n this.p.setVec2(position);\n this.q.setAngle(rotation);\n }\n\n setTransform(xf: TransformValue): void {\n this.p.setVec2(xf.p);\n this.q.setRot(xf.q);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.p) && Rot.isValid(obj.q);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Transform.isValid(o), \"Invalid Transform!\", o);\n }\n\n static mul(a: TransformValue, b: Vec2Value): Vec2;\n static mul(a: TransformValue, b: TransformValue): Transform;\n // static mul(a: Transform, b: Vec2Value[]): Vec2[];\n // static mul(a: Transform, b: Transform[]): Transform[];\n static mul(a, b) {\n if (Array.isArray(b)) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n\n } else if (\"x\" in b && \"y\" in b) {\n return Transform.mulVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulXf(a, b);\n }\n }\n\n static mulAll(a: Transform, b: Vec2Value[]): Vec2[];\n static mulAll(a: Transform, b: Transform[]): Transform[];\n static mulAll(a: TransformValue, b) {\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n }\n\n /** @hidden @deprecated */\n static mulFn(a: TransformValue) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n return function(b: Vec2Value): Vec2 {\n return Transform.mul(a, b);\n };\n }\n\n static mulVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = (a.q.c * b.x - a.q.s * b.y) + a.p.x;\n const y = (a.q.s * b.x + a.q.c * b.y) + a.p.y;\n return Vec2.neo(x, y);\n }\n\n static mulXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p\n // = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p\n const xf = Transform.identity();\n xf.q = Rot.mulRot(a.q, b.q);\n xf.p = Vec2.add(Rot.mulVec2(a.q, b.p), a.p);\n return xf;\n }\n\n static mulT(a: TransformValue, b: Vec2Value): Vec2;\n static mulT(a: TransformValue, b: TransformValue): Transform;\n static mulT(a, b) {\n if (\"x\" in b && \"y\" in b) {\n return Transform.mulTVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulTXf(a, b);\n }\n }\n\n static mulTVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const px = b.x - a.p.x;\n const py = b.y - a.p.y;\n const x = (a.q.c * px + a.q.s * py);\n const y = (-a.q.s * px + a.q.c * py);\n return Vec2.neo(x, y);\n }\n\n static mulTXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q' * (B.q * v1 + B.p - A.p)\n // = A.q' * B.q * v1 + A.q' * (B.p - A.p)\n const xf = Transform.identity();\n xf.q.setRot(Rot.mulTRot(a.q, b.q));\n xf.p.setVec2(Rot.mulTVec2(a.q, Vec2.sub(b.p, a.p)));\n return xf;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2 } from \"../common/Vec2\";\n\nexport class Velocity {\n /** linear */\n v = Vec2.zero();\n\n /** angular */\n w = 0;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n\n\nexport class Position {\n /** location */\n c = Vec2.zero();\n\n /** angle */\n a = 0;\n\n // todo: cache sin/cos\n getTransform(xf: TransformValue, p: Vec2Value): TransformValue {\n // xf.q = rotation(this.a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(this.a);\n xf.q.s = math_sin(this.a);\n xf.p.x = this.c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = this.c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n }\n}\n\nexport function getTransform(xf: TransformValue, p: Vec2Value, c: Vec2Value, a: number): TransformValue {\n // xf.q = rotation(a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(a);\n xf.q.s = math_sin(a);\n xf.p.x = c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { MassData } from \"../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"./AABB\";\nimport { DistanceProxy } from \"./Distance\";\nimport type { Transform, TransformValue } from \"../common/Transform\";\nimport type { Vec2Value } from \"../common/Vec2\";\nimport { Style } from \"../util/Testbed\";\n\n// todo make shape an interface\n\n/**\n * A shape is used for collision detection. You can create a shape however you\n * like. Shapes used for simulation in World are created automatically when a\n * Fixture is created. Shapes may encapsulate one or more child shapes.\n */\nexport abstract class Shape {\n /** @hidden */ m_type: ShapeType;\n\n /**\n * @hidden\n * Radius of a shape. For polygonal shapes this must be b2_polygonRadius.\n * There is no support for making rounded polygons.\n */\n m_radius: number;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @hidden */\n abstract _reset(): void;\n\n static isValid(obj: any): boolean {\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\n abstract getRadius(): number;\n\n /**\n * Get the type of this shape. You can use this to down cast to the concrete\n * shape.\n *\n * @return the shape type.\n */\n abstract getType(): ShapeType;\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n abstract _clone(): Shape;\n\n /**\n * Get the number of child primitives.\n */\n abstract getChildCount(): number;\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n abstract testPoint(xf: TransformValue, p: Vec2Value): boolean;\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean;\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void;\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n abstract computeMass(massData: MassData, density?: number): void;\n\n abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void;\n\n}\n\nexport type ShapeType = \"circle\" | \"edge\" | \"polygon\" | \"chain\";\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Shape, ShapeType } from \"../collision/Shape\";\nimport { Body, MassData } from \"./Body\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const synchronize_aabb1 = new AABB();\n/** @internal */ const synchronize_aabb2 = new AABB();\n/** @internal */ const displacement = matrix.vec2(0, 0);\n\n/**\n * A fixture definition is used to create a fixture. This class defines an\n * abstract fixture definition. You can reuse fixture definitions safely.\n */\nexport interface FixtureOpt {\n userData?: unknown;\n /**\n * The friction coefficient, usually in the range [0,1]\n */\n friction?: number;\n /**\n * The restitution (elasticity) usually in the range [0,1]\n */\n restitution?: number;\n /**\n * The density, usually in kg/m^2\n */\n density?: number;\n /**\n * A sensor shape collects contact information but never generates a collision response.\n */\n isSensor?: boolean;\n /**\n * Zero, positive or negative collision group.\n * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide.\n */\n filterGroupIndex?: number;\n /**\n * Collision category bit or bits that this fixture belongs to.\n * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa.\n */\n filterCategoryBits?: number;\n /**\n * Collision category bit or bits that this fixture accept for collision.\n */\n filterMaskBits?: number;\n}\n\nexport interface FixtureDef extends FixtureOpt {\n shape: Shape;\n}\n\n/** @internal */ const FixtureDefDefault: FixtureOpt = {\n userData : null,\n friction : 0.2,\n restitution : 0.0,\n density : 0.0,\n isSensor : false,\n\n filterGroupIndex : 0,\n filterCategoryBits : 0x0001,\n filterMaskBits : 0xFFFF\n};\n\n/**\n * This proxy is used internally to connect shape children to the broad-phase.\n */\nexport class FixtureProxy {\n aabb: AABB;\n fixture: Fixture;\n childIndex: number;\n proxyId: number;\n constructor(fixture: Fixture, childIndex: number) {\n this.aabb = new AABB();\n this.fixture = fixture;\n this.childIndex = childIndex;\n this.proxyId;\n }\n}\n\n/**\n * A fixture is used to attach a shape to a body for collision detection. A\n * fixture inherits its transform from its parent. Fixtures hold additional\n * non-geometric data such as friction, collision filters, etc.\n *\n * To create a new Fixture use {@link Body.createFixture}.\n */\nexport class Fixture {\n /** @internal */ m_body: Body;\n /** @internal */ m_friction: number;\n /** @internal */ m_restitution: number;\n /** @internal */ m_density: number;\n /** @internal */ m_isSensor: boolean;\n /** @internal */ m_filterGroupIndex: number;\n /** @internal */ m_filterCategoryBits: number;\n /** @internal */ m_filterMaskBits: number;\n /** @internal */ m_shape: Shape;\n /** @internal */ m_next: Fixture | null;\n /** @internal */ m_proxies: FixtureProxy[];\n // 0 indicates inactive state, this is not the same as m_proxies.length\n /** @internal */ m_proxyCount: number;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(body: Body, def: FixtureDef);\n constructor(body: Body, shape: Shape, def?: FixtureOpt);\n constructor(body: Body, shape: Shape, density?: number);\n /** @internal */\n constructor(body: Body, shape?, def?) {\n if (shape.shape) {\n def = shape;\n shape = shape.shape;\n\n } else if (typeof def === \"number\") {\n def = {density : def};\n }\n\n def = options(def, FixtureDefDefault);\n\n this.m_body = body;\n\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\n this.m_filterGroupIndex = def.filterGroupIndex;\n this.m_filterCategoryBits = def.filterCategoryBits;\n this.m_filterMaskBits = def.filterMaskBits;\n\n // TODO validate shape\n this.m_shape = shape; // .clone();\n\n this.m_next = null;\n\n this.m_proxies = [];\n this.m_proxyCount = 0;\n\n // fixture proxies are created here,\n // but they are activate in when a fixture is added to body\n const childCount = this.m_shape.getChildCount();\n for (let i = 0; i < childCount; ++i) {\n this.m_proxies[i] = new FixtureProxy(this, i);\n }\n\n this.m_userData = def.userData;\n }\n\n /** @hidden Re-setup fixture. */\n _reset(): void {\n const body = this.getBody();\n const broadPhase = body.m_world.m_broadPhase;\n this.destroyProxies(broadPhase);\n if (this.m_shape._reset) {\n this.m_shape._reset();\n }\n const childCount = this.m_shape.getChildCount();\n for (let 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\n /** @internal */\n _serialize(): object {\n return {\n friction: this.m_friction,\n restitution: this.m_restitution,\n density: this.m_density,\n isSensor: this.m_isSensor,\n\n filterGroupIndex: this.m_filterGroupIndex,\n filterCategoryBits: this.m_filterCategoryBits,\n filterMaskBits: this.m_filterMaskBits,\n\n shape: this.m_shape,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, body: any, restore: any): Fixture {\n const shape = restore(Shape, data.shape);\n const fixture = shape && new Fixture(body, shape, data);\n return fixture;\n }\n\n /**\n * Get the type of the child shape. You can use this to down cast to the\n * concrete shape.\n */\n getType(): ShapeType {\n return this.m_shape.m_type;\n }\n\n /**\n * Get the child shape. You can modify the child shape, however you should not\n * change the number of vertices because this will crash some collision caching\n * mechanisms. Manipulating the shape may lead to non-physical behavior.\n */\n getShape(): Shape {\n return this.m_shape;\n }\n\n /**\n * A sensor shape collects contact information but never generates a collision\n * response.\n */\n isSensor(): boolean {\n return this.m_isSensor;\n }\n\n /**\n * Set if this fixture is a sensor.\n */\n setSensor(sensor: boolean): void {\n if (sensor != this.m_isSensor) {\n this.m_body.setAwake(true);\n this.m_isSensor = sensor;\n }\n }\n\n // /**\n // * Get the contact filtering data.\n // */\n // getFilterData() {\n // return this.m_filter;\n // }\n\n /**\n * Get the user data that was assigned in the fixture definition. Use this to\n * store your application specific data.\n */\n getUserData(): unknown {\n return this.m_userData;\n }\n\n /**\n * Set the user data. Use this to store your application specific data.\n */\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get the parent body of this fixture. This is null if the fixture is not\n * attached.\n */\n getBody(): Body {\n return this.m_body;\n }\n\n /**\n * Get the next fixture in the parent body's fixture list.\n */\n getNext(): Fixture | null {\n return this.m_next;\n }\n\n /**\n * Get the density of this fixture.\n */\n getDensity(): number {\n return this.m_density;\n }\n\n /**\n * Set the density of this fixture. This will _not_ automatically adjust the\n * mass of the body. You must call Body.resetMassData to update the body's mass.\n */\n setDensity(density: number): void {\n _ASSERT && console.assert(Number.isFinite(density) && density >= 0.0);\n this.m_density = density;\n }\n\n /**\n * Get the coefficient of friction, usually in the range [0,1].\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Set the coefficient of friction. This will not change the friction of\n * existing contacts.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the coefficient of restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Set the coefficient of restitution. This will not change the restitution of\n * existing contacts.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Test a point in world coordinates for containment in this fixture.\n */\n testPoint(p: Vec2Value): boolean {\n return this.m_shape.testPoint(this.m_body.getTransform(), p);\n }\n\n /**\n * Cast a ray against this shape.\n */\n rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean {\n return this.m_shape.rayCast(output, input, this.m_body.getTransform(), childIndex);\n }\n\n /**\n * Get the mass data for this fixture. The mass data is based on the density and\n * the shape. The rotational inertia is about the shape's origin. This operation\n * may be expensive.\n */\n getMassData(massData: MassData): void {\n this.m_shape.computeMass(massData, this.m_density);\n }\n\n /**\n * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a\n * more accurate AABB, compute it using the shape and the body transform.\n */\n getAABB(childIndex: number): AABB {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_proxies.length);\n return this.m_proxies[childIndex].aabb;\n }\n\n /**\n * These support body activation/deactivation.\n */\n createProxies(broadPhase: BroadPhase, xf: TransformValue): void {\n _ASSERT && console.assert(this.m_proxyCount == 0);\n\n // Create proxies in the broad-phase.\n this.m_proxyCount = this.m_shape.getChildCount();\n\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n this.m_shape.computeAABB(proxy.aabb, xf, i);\n proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy);\n }\n }\n\n destroyProxies(broadPhase: BroadPhase): void {\n // Destroy proxies in the broad-phase.\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n broadPhase.destroyProxy(proxy.proxyId);\n proxy.proxyId = null;\n }\n\n this.m_proxyCount = 0;\n }\n\n /**\n * Updates this fixture proxy in broad-phase (with combined AABB of current and\n * next transformation).\n */\n synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void {\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n // Compute an AABB that covers the swept shape (may miss some rotation\n // effect).\n this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex);\n this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex);\n\n proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2);\n\n matrix.subVec2(displacement, xf2.p, xf1.p);\n\n broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement);\n }\n }\n\n /**\n * Set the contact filtering data. This will not update contacts until the next\n * time step when either parent body is active and awake. This automatically\n * calls refilter.\n */\n setFilterData(filter: { groupIndex: number, categoryBits: number, maskBits: number }): void {\n this.m_filterGroupIndex = filter.groupIndex;\n this.m_filterCategoryBits = filter.categoryBits;\n this.m_filterMaskBits = filter.maskBits;\n this.refilter();\n }\n\n getFilterGroupIndex(): number {\n return this.m_filterGroupIndex;\n }\n\n setFilterGroupIndex(groupIndex: number): void {\n this.m_filterGroupIndex = groupIndex;\n this.refilter();\n }\n\n getFilterCategoryBits(): number {\n return this.m_filterCategoryBits;\n }\n\n setFilterCategoryBits(categoryBits: number): void {\n this.m_filterCategoryBits = categoryBits;\n this.refilter();\n }\n\n getFilterMaskBits(): number {\n return this.m_filterMaskBits;\n }\n\n setFilterMaskBits(maskBits: number): void {\n this.m_filterMaskBits = maskBits;\n this.refilter();\n }\n\n /**\n * Call this if you want to establish collision that was previously disabled by\n * ContactFilter.\n */\n refilter(): void {\n if (this.m_body == null) {\n return;\n }\n\n // Flag associated contacts for filtering.\n let edge = this.m_body.getContactList();\n while (edge) {\n const contact = edge.contact;\n const fixtureA = contact.getFixtureA();\n const fixtureB = contact.getFixtureB();\n if (fixtureA == this || fixtureB == this) {\n contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n\n const world = this.m_body.getWorld();\n\n if (world == null) {\n return;\n }\n\n // Touch each proxy so that new pairs may be created\n const broadPhase = world.m_broadPhase;\n for (let i = 0; i < this.m_proxyCount; ++i) {\n broadPhase.touchProxy(this.m_proxies[i].proxyId);\n }\n }\n\n /**\n * Implement this method to provide collision filtering, if you want finer\n * control over contact creation.\n *\n * Return true if contact calculations should be performed between these two\n * fixtures.\n *\n * Warning: for performance reasons this is only called when the AABBs begin to\n * overlap.\n */\n shouldCollide(that: Fixture): boolean {\n\n if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) {\n return that.m_filterGroupIndex > 0;\n }\n\n const collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0;\n const collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0;\n const collide = collideA && collideB;\n return collide;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Velocity } from \"./Velocity\";\nimport { Position } from \"./Position\";\nimport { Fixture, FixtureDef, FixtureOpt } from \"./Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { JointEdge } from \"./Joint\";\nimport { World } from \"./World\";\nimport { ContactEdge } from \"./Contact\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nexport type BodyType = \"static\" | \"kinematic\" | \"dynamic\";\n\n/** @internal */ const STATIC = \"static\";\n/** @internal */ const KINEMATIC = \"kinematic\";\n/** @internal */ const DYNAMIC = \"dynamic\";\n\n/** @internal */ const oldCenter = matrix.vec2(0, 0);\n/** @internal */ const localCenter = matrix.vec2(0, 0);\n/** @internal */ const shift = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n\nexport interface BodyDef {\n /**\n * Body types are static, kinematic, or dynamic. Note: if a dynamic\n * body would have zero mass, the mass is set to one.\n */\n type?: BodyType;\n /**\n * The world position of the body. Avoid creating bodies at the\n * origin since this can lead to many overlapping shapes.\n */\n position?: Vec2Value;\n /**\n * The world angle of the body in radians.\n */\n angle?: number;\n /**\n * The linear velocity of the body's origin in world co-ordinates.\n */\n linearVelocity?: Vec2Value;\n angularVelocity?: number;\n /**\n * Linear damping is use to reduce the linear velocity. The\n * damping parameter can be larger than 1.0 but the damping effect becomes\n * sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n linearDamping?: number;\n /**\n * Angular damping is use to reduce the angular velocity.\n * The damping parameter can be larger than 1.0 but the damping effect\n * becomes sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n angularDamping?: number;\n /**\n * Should this body be prevented from rotating? Useful for characters.\n */\n fixedRotation?: boolean;\n /**\n * Is this a fast moving body that should be prevented from\n * tunneling through other moving bodies? Note that all bodies are\n * prevented from tunneling through kinematic and static bodies. This\n * setting is only considered on dynamic bodies. Warning: You should use\n * this flag sparingly since it increases processing time.\n */\n bullet?: boolean;\n gravityScale?: number;\n /**\n * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage.\n */\n allowSleep?: boolean;\n /**\n * Is this body initially awake or sleeping?\n */\n awake?: boolean;\n /**\n * Does this body start out active?\n */\n active?: boolean;\n userData?: any;\n}\n\n/** @internal */ const BodyDefDefault: BodyDef = {\n type : STATIC,\n position : Vec2.zero(),\n angle : 0.0,\n\n linearVelocity : Vec2.zero(),\n angularVelocity : 0.0,\n\n linearDamping : 0.0,\n angularDamping : 0.0,\n\n fixedRotation : false,\n bullet : false,\n gravityScale : 1.0,\n\n allowSleep : true,\n awake : true,\n active : true,\n\n userData : null\n};\n\n/**\n * MassData This holds the mass data computed for a shape.\n */\nexport interface MassData {\n /** The mass of the shape, usually in kilograms. */\n mass: number;\n /** The position of the shape's centroid relative to the shape's origin. */\n center: Vec2Value;\n /** The rotational inertia of the shape about the local origin. */\n I: number;\n}\n\n/**\n * A rigid body composed of one or more fixtures.\n *\n * To create a new Body use {@link World.createBody}.\n */\nexport class Body {\n /**\n * A static body does not move under simulation and behaves as if it has infinite mass.\n * Internally, zero is stored for the mass and the inverse mass.\n * Static bodies can be moved manually by the user.\n * A static body has zero velocity.\n * Static bodies do not collide with other static or kinematic bodies.\n */\n static readonly STATIC: BodyType = \"static\";\n /**\n * A kinematic body moves under simulation according to its velocity.\n * Kinematic bodies do not respond to forces.\n * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity.\n * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass.\n * Kinematic bodies do not collide with other kinematic or static bodies.\n */\n static readonly KINEMATIC: BodyType = \"kinematic\";\n\n /**\n * A dynamic body is fully simulated.\n * They can be moved manually by the user, but normally they move according to forces.\n * A dynamic body can collide with all body types.\n * A dynamic body always has finite, non-zero mass.\n * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate.\n */\n static readonly DYNAMIC: BodyType = \"dynamic\";\n\n /** @internal */ m_world: World;\n /** @internal */ m_awakeFlag: boolean;\n /** @internal */ m_autoSleepFlag: boolean;\n /** @internal */ m_bulletFlag: boolean;\n /** @internal */ m_fixedRotationFlag: boolean;\n /** @internal */ m_activeFlag: boolean;\n /** @internal */ m_islandFlag: boolean;\n /** @internal */ m_toiFlag: boolean;\n /** @internal */ m_userData: unknown;\n /** @internal */ m_type: BodyType;\n /** @internal */ m_mass: number;\n /** @internal */ m_invMass: number;\n /** @internal Rotational inertia about the center of mass. */\n m_I: number;\n /** @internal */ m_invI: number;\n /** @internal the body origin transform */\n m_xf: Transform;\n /** @internal the swept motion for CCD */\n m_sweep: Sweep;\n // position and velocity correction\n /** @internal */ c_velocity: Velocity;\n /** @internal */ c_position: Position;\n /** @internal */ m_force: Vec2;\n /** @internal */ m_torque: number;\n /** @internal */ m_linearVelocity: Vec2;\n /** @internal */ m_angularVelocity: number;\n /** @internal */ m_linearDamping: number;\n /** @internal */ m_angularDamping: number;\n /** @internal */ m_gravityScale: number;\n /** @internal */ m_sleepTime: number;\n /** @internal */ m_jointList: JointEdge | null;\n /** @internal */ m_contactList: ContactEdge | null;\n /** @internal */ m_fixtureList: Fixture | null;\n /** @internal */ m_prev: Body | null;\n /** @internal */ m_next: Body | null;\n /** @internal */ m_destroyed: boolean;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @internal */\n constructor(world: World, def: BodyDef) {\n def = options(def, BodyDefDefault);\n\n _ASSERT && console.assert(Vec2.isValid(def.position));\n _ASSERT && console.assert(Vec2.isValid(def.linearVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angle));\n _ASSERT && console.assert(Number.isFinite(def.angularVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angularDamping) && def.angularDamping >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.linearDamping) && def.linearDamping >= 0.0);\n\n this.m_world = world;\n\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\n this.m_islandFlag = false;\n this.m_toiFlag = false;\n\n this.m_userData = def.userData;\n this.m_type = def.type;\n\n if (this.m_type == DYNAMIC) {\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n } else {\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n }\n\n // Rotational inertia about the center of mass.\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n // the body origin transform\n this.m_xf = Transform.identity();\n this.m_xf.p.setVec2(def.position);\n this.m_xf.q.setAngle(def.angle);\n\n // the swept motion for CCD\n this.m_sweep = new Sweep();\n this.m_sweep.setTransform(this.m_xf);\n\n // position and velocity correction\n this.c_velocity = new Velocity();\n this.c_position = new Position();\n\n this.m_force = Vec2.zero();\n this.m_torque = 0.0;\n\n this.m_linearVelocity = Vec2.clone(def.linearVelocity);\n this.m_angularVelocity = def.angularVelocity;\n\n this.m_linearDamping = def.linearDamping;\n this.m_angularDamping = def.angularDamping;\n this.m_gravityScale = def.gravityScale;\n\n this.m_sleepTime = 0.0;\n\n this.m_jointList = null;\n this.m_contactList = null;\n this.m_fixtureList = null;\n\n this.m_prev = null;\n this.m_next = null;\n\n this.m_destroyed = false;\n }\n\n /** @internal */\n _serialize(): object {\n const fixtures = [];\n for (let 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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): Body {\n const body = new Body(world, data);\n\n if (data.fixtures) {\n for (let i = data.fixtures.length - 1; i >= 0; i--) {\n const fixture = restore(Fixture, data.fixtures[i], body);\n body._addFixture(fixture);\n }\n }\n return body;\n }\n\n isWorldLocked(): boolean {\n return this.m_world && this.m_world.isLocked() ? true : false;\n }\n\n getWorld(): World {\n return this.m_world;\n }\n\n getNext(): Body | null {\n return this.m_next;\n }\n\n setUserData(data: any): void {\n this.m_userData = data;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n getFixtureList(): Fixture | null {\n return this.m_fixtureList;\n }\n\n getJointList(): JointEdge | null {\n return this.m_jointList;\n }\n\n /**\n * Warning: this list changes during the time step and you may miss some\n * collisions if you don't use ContactListener.\n */\n getContactList(): ContactEdge | null {\n return this.m_contactList;\n }\n\n isStatic(): boolean {\n return this.m_type == STATIC;\n }\n\n isDynamic(): boolean {\n return this.m_type == DYNAMIC;\n }\n\n isKinematic(): boolean {\n return this.m_type == KINEMATIC;\n }\n\n /**\n * This will alter the mass and velocity.\n */\n setStatic(): Body {\n this.setType(STATIC);\n return this;\n }\n\n setDynamic(): Body {\n this.setType(DYNAMIC);\n return this;\n }\n\n setKinematic(): Body {\n this.setType(KINEMATIC);\n return this;\n }\n\n /**\n * Get the type of the body.\n */\n getType(): BodyType {\n return this.m_type;\n }\n\n /**\n * Set the type of the body to \"static\", \"kinematic\" or \"dynamic\".\n * @param type The type of the body.\n */\n setType(type: BodyType): void {\n _ASSERT && console.assert(type === STATIC || type === KINEMATIC || type === DYNAMIC);\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type == type) {\n return;\n }\n\n this.m_type = type;\n\n this.resetMassData();\n\n if (this.m_type == STATIC) {\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_sweep.forward();\n this.synchronizeFixtures();\n }\n\n this.setAwake(true);\n\n this.m_force.setZero();\n this.m_torque = 0.0;\n\n // Delete the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n\n // Touch the proxies so that new contacts will be created (when appropriate)\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n for (let i = 0; i < f.m_proxyCount; ++i) {\n broadPhase.touchProxy(f.m_proxies[i].proxyId);\n }\n }\n }\n\n isBullet(): boolean {\n return this.m_bulletFlag;\n }\n\n /**\n * Should this body be treated like a bullet for continuous collision detection?\n */\n setBullet(flag: boolean): void {\n this.m_bulletFlag = !!flag;\n }\n\n isSleepingAllowed(): boolean {\n return this.m_autoSleepFlag;\n }\n\n setSleepingAllowed(flag: boolean): void {\n this.m_autoSleepFlag = !!flag;\n if (this.m_autoSleepFlag == false) {\n this.setAwake(true);\n }\n }\n\n isAwake(): boolean {\n return this.m_awakeFlag;\n }\n\n /**\n * Set the sleep state of the body. A sleeping body has very low CPU cost.\n *\n * @param flag Set to true to wake the body, false to put it to sleep.\n */\n setAwake(flag: boolean): void {\n if (flag) {\n this.m_awakeFlag = true;\n this.m_sleepTime = 0.0;\n } else {\n this.m_awakeFlag = false;\n this.m_sleepTime = 0.0;\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_force.setZero();\n this.m_torque = 0.0;\n }\n }\n\n isActive(): boolean {\n return this.m_activeFlag;\n }\n\n /**\n * Set the active state of the body. An inactive body is not simulated and\n * cannot be collided with or woken up. If you pass a flag of true, all fixtures\n * will be added to the broad-phase. If you pass a flag of false, all fixtures\n * will be removed from the broad-phase and all contacts will be destroyed.\n * Fixtures and joints are otherwise unaffected.\n *\n * You may continue to create/destroy fixtures and joints on inactive bodies.\n * Fixtures on an inactive body are implicitly inactive and will not participate\n * in collisions, ray-casts, or queries. Joints connected to an inactive body\n * are implicitly inactive. An inactive body is still owned by a World object\n * and remains\n */\n setActive(flag: boolean): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (flag == this.m_activeFlag) {\n return;\n }\n\n this.m_activeFlag = !!flag;\n\n if (this.m_activeFlag) {\n // Create all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.createProxies(broadPhase, this.m_xf);\n }\n\t\t // Contacts are created at the beginning of the next\n\t\t this.m_world.m_newFixture = true;\n } else {\n // Destroy all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.destroyProxies(broadPhase);\n }\n\n // Destroy the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n }\n }\n\n isFixedRotation(): boolean {\n return this.m_fixedRotationFlag;\n }\n\n /**\n * Set this body to have fixed rotation. This causes the mass to be reset.\n */\n setFixedRotation(flag: boolean): void {\n if (this.m_fixedRotationFlag == flag) {\n return;\n }\n\n this.m_fixedRotationFlag = !!flag;\n\n this.m_angularVelocity = 0.0;\n\n this.resetMassData();\n }\n\n /**\n * Get the world transform for the body's origin.\n */\n getTransform(): Transform {\n return this.m_xf;\n }\n\n /**\n * Set the position of the body's origin and rotation. Manipulating a body's\n * transform may cause non-physical behavior. Note: contacts are updated on the\n * next call to World.step.\n *\n * @param position The world position of the body's local origin.\n * @param angle The world rotation in radians.\n */\n setTransform(position: Vec2Value, angle: number): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n this.m_xf.setNum(position, angle);\n this.m_sweep.setTransform(this.m_xf);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let 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\n synchronizeTransform(): void {\n this.m_sweep.getTransform(this.m_xf, 1);\n }\n\n /**\n * Update fixtures in broad-phase.\n */\n synchronizeFixtures(): void {\n this.m_sweep.getTransform(xf, 0);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.synchronize(broadPhase, xf, this.m_xf);\n }\n }\n\n /**\n * Used in TOI.\n */\n advance(alpha: number): void {\n // Advance to the new safe time. This doesn't sync the broad-phase.\n this.m_sweep.advance(alpha);\n matrix.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\n /**\n * Get the world position for the body's origin.\n */\n getPosition(): Vec2 {\n return this.m_xf.p;\n }\n\n setPosition(p: Vec2Value): void {\n this.setTransform(p, this.m_sweep.a);\n }\n\n /**\n * Get the current world rotation angle in radians.\n */\n getAngle(): number {\n return this.m_sweep.a;\n }\n\n setAngle(angle: number): void {\n this.setTransform(this.m_xf.p, angle);\n }\n\n /**\n * Get the world position of the center of mass.\n */\n getWorldCenter(): Vec2 {\n return this.m_sweep.c;\n }\n\n /**\n * Get the local position of the center of mass.\n */\n getLocalCenter(): Vec2 {\n return this.m_sweep.localCenter;\n }\n\n /**\n * Get the linear velocity of the center of mass.\n *\n * @return the linear velocity of the center of mass.\n */\n getLinearVelocity(): Vec2 {\n return this.m_linearVelocity;\n }\n\n /**\n * Get the world linear velocity of a world point attached to this body.\n *\n * @param worldPoint A point in world coordinates.\n */\n getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2 {\n const localCenter = Vec2.sub(worldPoint, this.m_sweep.c);\n return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity,\n localCenter));\n }\n\n /**\n * Get the world velocity of a local point.\n *\n * @param localPoint A point in local coordinates.\n */\n getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2 {\n return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint));\n }\n\n /**\n * Set the linear velocity of the center of mass.\n *\n * @param v The new linear velocity of the center of mass.\n */\n setLinearVelocity(v: Vec2Value): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (Vec2.dot(v, v) > 0.0) {\n this.setAwake(true);\n }\n this.m_linearVelocity.setVec2(v);\n }\n\n /**\n * Get the angular velocity.\n *\n * @returns the angular velocity in radians/second.\n */\n getAngularVelocity(): number {\n return this.m_angularVelocity;\n }\n\n /**\n * Set the angular velocity.\n *\n * @param omega The new angular velocity in radians/second.\n */\n setAngularVelocity(w: number): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (w * w > 0.0) {\n this.setAwake(true);\n }\n this.m_angularVelocity = w;\n }\n\n getLinearDamping(): number {\n return this.m_linearDamping;\n }\n\n setLinearDamping(linearDamping: number): void {\n this.m_linearDamping = linearDamping;\n }\n\n getAngularDamping(): number {\n return this.m_angularDamping;\n }\n\n setAngularDamping(angularDamping: number): void {\n this.m_angularDamping = angularDamping;\n }\n\n getGravityScale(): number {\n return this.m_gravityScale;\n }\n\n /**\n * Scale the gravity applied to this body.\n */\n setGravityScale(scale: number): void {\n this.m_gravityScale = scale;\n }\n\n /**\n * Get the total mass of the body.\n *\n * @returns The mass, usually in kilograms (kg).\n */\n getMass(): number {\n return this.m_mass;\n }\n\n /**\n * Get the rotational inertia of the body about the local origin.\n *\n * @return the rotational inertia, usually in kg-m^2.\n */\n getInertia(): number {\n return this.m_I + this.m_mass\n * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter);\n }\n\n /**\n * Copy the mass data of the body to data.\n */\n getMassData(data: MassData): void {\n data.mass = this.m_mass;\n data.I = this.getInertia();\n matrix.copyVec2(data.center, this.m_sweep.localCenter);\n }\n\n /**\n * This resets the mass properties to the sum of the mass properties of the\n * fixtures. This normally does not need to be called unless you called\n * SetMassData to override the mass and you later want to reset the mass.\n */\n resetMassData(): void {\n // Compute mass data from shapes. Each shape has its own density.\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n matrix.zeroVec2(this.m_sweep.localCenter);\n\n // Static and kinematic bodies have zero mass.\n if (this.isStatic() || this.isKinematic()) {\n matrix.copyVec2(this.m_sweep.c0, this.m_xf.p);\n matrix.copyVec2(this.m_sweep.c, this.m_xf.p);\n this.m_sweep.a0 = this.m_sweep.a;\n return;\n }\n\n _ASSERT && console.assert(this.isDynamic());\n\n // Accumulate mass over all fixtures.\n matrix.zeroVec2(localCenter);\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n if (f.m_density == 0.0) {\n continue;\n }\n\n const massData: MassData = {\n mass: 0,\n center: matrix.vec2(0, 0),\n I: 0\n };\n f.getMassData(massData);\n this.m_mass += massData.mass;\n matrix.plusScaleVec2(localCenter, massData.mass, massData.center);\n this.m_I += massData.I;\n }\n\n // Compute center of mass.\n if (this.m_mass > 0.0) {\n this.m_invMass = 1.0 / this.m_mass;\n matrix.scaleVec2(localCenter, this.m_invMass, localCenter);\n\n } else {\n // Force all dynamic bodies to have a positive mass.\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n }\n\n if (this.m_I > 0.0 && this.m_fixedRotationFlag == false) {\n // Center the inertia about the center of mass.\n this.m_I -= this.m_mass * matrix.dotVec2(localCenter, localCenter);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n\n } else {\n this.m_I = 0.0;\n this.m_invI = 0.0;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(localCenter, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Set the mass properties to override the mass properties of the fixtures. Note\n * that this changes the center of mass position. Note that creating or\n * destroying fixtures can also alter the mass. This function has no effect if\n * the body isn't dynamic.\n *\n * @param massData The mass properties.\n */\n setMassData(massData: MassData): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n this.m_mass = massData.mass;\n if (this.m_mass <= 0.0) {\n this.m_mass = 1.0;\n }\n\n this.m_invMass = 1.0 / this.m_mass;\n\n if (massData.I > 0.0 && this.m_fixedRotationFlag == false) {\n this.m_I = massData.I - this.m_mass * matrix.dotVec2(massData.center, massData.center);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(massData.center, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Apply a force at a world point. If the force is not applied at the center of\n * mass, it will generate a torque and affect the angular velocity. This wakes\n * up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyForce(force: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping.\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), force);\n }\n }\n\n /**\n * Apply a force to the center of mass. This wakes up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param wake Also wake up the body\n */\n applyForceToCenter(force: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n }\n }\n\n /**\n * Apply a torque. This affects the angular velocity without affecting the\n * linear velocity of the center of mass. This wakes up the body.\n *\n * @param torque About the z-axis (out of the screen), usually in N-m.\n * @param wake Also wake up the body\n */\n applyTorque(torque: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_torque += torque;\n }\n }\n\n /**\n * Apply an impulse at a point. This immediately modifies the velocity. It also\n * modifies the angular velocity if the point of application is not at the\n * center of mass. This wakes up the body.\n *\n * @param impulse The world impulse vector, usually in N-seconds or kg-m/s.\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n\n // Don't accumulate velocity if the body is sleeping\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(point, this.m_sweep.c), impulse);\n }\n }\n\n /**\n * Apply an angular impulse.\n *\n * @param impulse The angular impulse in units of kg*m*m/s\n * @param wake Also wake up the body\n */\n applyAngularImpulse(impulse: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate velocity if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_angularVelocity += this.m_invI * impulse;\n }\n }\n\n /**\n * This is used to test if two bodies should collide.\n * \n * Bodies do not collide when:\n * - Neither of them is dynamic\n * - They are connected by a joint with collideConnected == false\n */\n shouldCollide(that: Body): boolean {\n // At least one body should be dynamic.\n if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) {\n return false;\n }\n // Does a joint prevent collision?\n for (let 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\n /** @internal Used for deserialize. */\n _addFixture(fixture: Fixture): Fixture {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.createProxies(broadPhase, this.m_xf);\n }\n\n fixture.m_next = this.m_fixtureList;\n this.m_fixtureList = fixture;\n\n // Adjust mass properties if needed.\n if (fixture.m_density > 0.0) {\n this.resetMassData();\n }\n\n // Let the world know we have a new fixture. This will cause new contacts\n // to be created at the beginning of the next time step.\n this.m_world.m_newFixture = true;\n\n return fixture;\n }\n\n /**\n * Creates a fixture and attach it to this body.\n *\n * If the density is non-zero, this function automatically updates the mass of\n * the body.\n *\n * Contacts are not created until the next time step.\n *\n * Warning: This function is locked during callbacks.\n */\n createFixture(def: FixtureDef): Fixture;\n createFixture(shape: Shape, opt?: FixtureOpt): Fixture;\n createFixture(shape: Shape, density?: number): Fixture;\n // tslint:disable-next-line:typedef\n createFixture(shape, fixdef?) {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n const fixture = new Fixture(this, shape, fixdef);\n this._addFixture(fixture);\n return fixture;\n }\n\n /**\n * Destroy a fixture. This removes the fixture from the broad-phase and destroys\n * all contacts associated with this fixture. This will automatically adjust the\n * mass of the body if the body is dynamic and the fixture has positive density.\n * All fixtures attached to a body are implicitly destroyed when the body is\n * destroyed.\n *\n * Warning: This function is locked during callbacks.\n *\n * @param fixture The fixture to be removed.\n */\n destroyFixture(fixture: Fixture): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n _ASSERT && console.assert(fixture.m_body == this);\n\n // Remove the fixture from this body's singly linked list.\n let found = false;\n if (this.m_fixtureList === fixture) {\n this.m_fixtureList = fixture.m_next;\n found = true;\n\n } else {\n let node = this.m_fixtureList;\n while (node != null) {\n if (node.m_next === fixture) {\n node.m_next = fixture.m_next;\n found = true;\n break;\n }\n node = node.m_next;\n }\n }\n\n // You tried to remove a shape that is not attached to this body.\n _ASSERT && console.assert(found);\n\n // Destroy any contacts associated with the fixture.\n let edge = this.m_contactList;\n while (edge) {\n const c = edge.contact;\n edge = edge.next;\n\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n\n if (fixture == fixtureA || fixture == fixtureB) {\n // This destroys the contact and removes it from\n // this body's contact list.\n this.m_world.destroyContact(c);\n }\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.destroyProxies(broadPhase);\n }\n\n fixture.m_body = null;\n fixture.m_next = null;\n\n this.m_world.publish(\"remove-fixture\", fixture);\n\n // Reset the mass data.\n this.resetMassData();\n }\n\n /**\n * Get the corresponding world point of a local point.\n */\n getWorldPoint(localPoint: Vec2Value): Vec2 {\n return Transform.mulVec2(this.m_xf, localPoint);\n }\n\n /**\n * Get the corresponding world vector of a local vector.\n */\n getWorldVector(localVector: Vec2Value): Vec2 {\n return Rot.mulVec2(this.m_xf.q, localVector);\n }\n\n /**\n * Gets the corresponding local point of a world point.\n */\n getLocalPoint(worldPoint: Vec2Value): Vec2 {\n return Transform.mulTVec2(this.m_xf, worldPoint);\n }\n\n /**\n * Gets the corresponding local vector of a world vector.\n */\n getLocalVector(worldVector: Vec2Value): Vec2 {\n return Rot.mulTVec2(this.m_xf.q, worldVector);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2, Vec2Value } from \"../common/Vec2\";\nimport type { Body } from \"./Body\";\nimport { TimeStep } from \"./Solver\";\nimport { Style } from \"../util/Testbed\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/**\n * A joint edge is used to connect bodies and joints together in a joint graph\n * where each body is a node and each joint is an edge. A joint edge belongs to\n * a doubly linked list maintained in each attached body. Each joint has two\n * joint nodes, one for each attached body.\n */\nexport class JointEdge {\n /**\n * provides quick access to the other body attached.\n */\n other: Body | null = null;\n /**\n * the joint\n */\n joint: Joint | null = null;\n /**\n * prev the previous joint edge in the body's joint list\n */\n prev: JointEdge | null = null;\n /**\n * the next joint edge in the body's joint list\n */\n next: JointEdge | null = null;\n}\n\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointOpt {\n /**\n * Use this to attach application specific data to your joints.\n */\n userData?: any;\n /**\n * Set this flag to true if the attached bodies\n * should collide.\n */\n collideConnected?: boolean;\n}\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointDef extends JointOpt {\n /**\n * The first attached body.\n */\n bodyA: Body;\n /**\n * The second attached body.\n */\n bodyB: Body;\n}\n\n/** @internal */ const DEFAULTS = {\n userData : null,\n collideConnected : false\n};\n\n/**\n * The base joint class. Joints are used to constraint two bodies together in\n * various fashions. Some joints also feature limits and motors.\n */\nexport abstract class Joint {\n\n /** @internal */ m_type: string = \"unknown-joint\";\n\n /** @internal */ m_bodyA: Body;\n /** @internal */ m_bodyB: Body;\n\n /** @internal */ m_collideConnected: boolean;\n\n /** @internal */ m_prev: Joint | null = null;\n /** @internal */ m_next: Joint | null = null;\n\n /** @internal */ m_edgeA: JointEdge = new JointEdge();\n /** @internal */ m_edgeB: JointEdge = new JointEdge();\n\n /** @internal */ m_islandFlag: boolean = false;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(def: JointDef);\n constructor(def: JointOpt, bodyA: Body, bodyB: Body);\n constructor(def: JointDef | JointOpt, bodyA?: Body, bodyB?: Body) {\n bodyA = \"bodyA\" in def ? def.bodyA : bodyA;\n bodyB = \"bodyB\" in def ? def.bodyB : bodyB;\n\n _ASSERT && console.assert(!!bodyA);\n _ASSERT && console.assert(!!bodyB);\n _ASSERT && console.assert(bodyA != bodyB);\n\n this.m_bodyA = bodyA!;\n this.m_bodyB = bodyB!;\n\n this.m_collideConnected = !!def.collideConnected;\n this.m_userData = def.userData;\n }\n\n /**\n * Short-cut function to determine if either body is inactive.\n */\n isActive(): boolean {\n return this.m_bodyA.isActive() && this.m_bodyB.isActive();\n }\n\n /**\n * Get the type of the concrete joint.\n */\n getType(): string {\n return this.m_type;\n }\n\n /**\n * Get the first body attached to this joint.\n */\n getBodyA(): Body {\n return this.m_bodyA;\n }\n\n /**\n * Get the second body attached to this joint.\n */\n getBodyB(): Body {\n return this.m_bodyB;\n }\n\n /**\n * Get the next joint the world joint list.\n */\n getNext(): Joint {\n return this.m_next;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get collide connected. Note: modifying the collide connect flag won't work\n * correctly because the flag is only checked when fixture AABBs begin to\n * overlap.\n */\n getCollideConnected(): boolean {\n return this.m_collideConnected;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n abstract getAnchorA(): Vec2;\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n abstract getAnchorB(): Vec2;\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n abstract getReactionForce(inv_dt: number): Vec2;\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n abstract getReactionTorque(inv_dt: number): number;\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {}\n\n abstract initVelocityConstraints(step: TimeStep): void;\n\n abstract solveVelocityConstraints(step: TimeStep): void;\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n abstract solvePositionConstraints(step: TimeStep): boolean;\n\n /**\n * @hidden @experimental\n * Update joint with new props.\n */\n abstract _reset(def: Partial): void;\n\n /**\n * @internal @deprecated\n * Temporary for backward compatibility, will be removed.\n */\n _resetAnchors(def: any): void {\n return this._reset(def);\n }\n}\n","/** @hidden */\nexport const stats = {\n gjkCalls: 0,\n gjkIters: 0,\n gjkMaxIters: 0,\n\n toiTime: 0,\n toiMaxTime: 0,\n toiCalls: 0,\n toiIters: 0,\n toiMaxIters: 0,\n toiRootIters: 0,\n toiMaxRootIters: 0,\n\n toString(newline?: string): string {\n newline = typeof newline === \"string\" ? newline : \"\\n\";\n let string = \"\";\n // tslint:disable-next-line:no-for-in\n for (const name in this) {\n if (typeof this[name] !== \"function\" && typeof this[name] !== \"object\") {\n string += name + \": \" + this[name] + newline;\n }\n }\n return string;\n }\n};\n","/** @internal */\nexport const now = function(): number {\n return Date.now();\n};\n\n/** @internal */\nexport const diff = function(time: number): number {\n return Date.now() - time;\n};\n\n/** @internal */\nexport default {\n now,\n diff,\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport { Shape } from \"./Shape\";\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Transform, TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const e12 = matrix.vec2(0, 0);\n/** @internal */ const e13 = matrix.vec2(0, 0);\n/** @internal */ const e23 = matrix.vec2(0, 0);\n/** @internal */ const temp1 = matrix.vec2(0, 0);\n/** @internal */ const temp2 = matrix.vec2(0, 0);\n\n/**\n * GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates.\n */\n\nstats.gjkCalls = 0;\nstats.gjkIters = 0;\nstats.gjkMaxIters = 0;\n\n/**\n * Input for Distance. You have to option to use the shape radii in the\n * computation. Even\n */\nexport class DistanceInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n useRadii = false;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n this.useRadii = false;\n }\n}\n\n/**\n * Output for Distance.\n */\nexport class DistanceOutput {\n /** closest point on shapeA */\n pointA = matrix.vec2(0, 0);\n /** closest point on shapeB */\n pointB = matrix.vec2(0, 0);\n distance = 0;\n /** iterations number of GJK iterations used */\n iterations = 0;\n recycle() {\n matrix.zeroVec2(this.pointA);\n matrix.zeroVec2(this.pointB);\n this.distance = 0;\n this.iterations = 0;\n }\n}\n\n/**\n * Used to warm start Distance. Set count to zero on first call.\n */\nexport class SimplexCache {\n /** length or area */\n metric: number = 0;\n /** vertices on shape A */\n indexA: number[] = [];\n /** vertices on shape B */\n indexB: number[] = [];\n count: number = 0;\n recycle() {\n this.metric = 0;\n this.indexA.length = 0;\n this.indexB.length = 0;\n this.count = 0;\n }\n}\n\n/**\n * Compute the closest points between two shapes. Supports any combination of:\n * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On\n * the first call set SimplexCache.count to zero.\n */\nexport const Distance = function (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void {\n ++stats.gjkCalls;\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n // Initialize the simplex.\n // const simplex = new Simplex();\n simplex.recycle();\n simplex.readCache(cache, proxyA, xfA, proxyB, xfB);\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n const k_maxIters = Settings.maxDistanceIterations;\n\n // These store the vertices of the last simplex so that we\n // can check for duplicates and prevent cycling.\n const saveA = [];\n const saveB = []; // int[3]\n let saveCount = 0;\n\n // Main iteration loop.\n let iter = 0;\n while (iter < k_maxIters) {\n // Copy simplex so we can identify duplicates.\n saveCount = simplex.m_count;\n for (let i = 0; i < saveCount; ++i) {\n saveA[i] = vertices[i].indexA;\n saveB[i] = vertices[i].indexB;\n }\n\n simplex.solve();\n\n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count === 3) {\n break;\n }\n\n // Get search direction.\n const d = simplex.getSearchDirection();\n\n // Ensure the search direction is numerically fit.\n if (matrix.lengthSqrVec2(d) < EPSILON * EPSILON) {\n // The origin is probably contained by a line segment\n // or triangle. Thus the shapes are overlapped.\n\n // We can't return zero here even though there may be overlap.\n // In case the simplex is a point, segment, or triangle it is difficult\n // to determine if the origin is contained in the CSO or very close to it.\n break;\n }\n\n // Compute a tentative new simplex vertex using support points.\n const vertex = vertices[simplex.m_count]; // SimplexVertex\n\n vertex.indexA = proxyA.getSupport(matrix.derotVec2(temp, xfA.q, matrix.scaleVec2(temp, -1, d)));\n matrix.transformVec2(vertex.wA, xfA, proxyA.getVertex(vertex.indexA));\n\n vertex.indexB = proxyB.getSupport(matrix.derotVec2(temp, xfB.q, d));\n matrix.transformVec2(vertex.wB, xfB, proxyB.getVertex(vertex.indexB));\n\n matrix.subVec2(vertex.w, vertex.wB, vertex.wA);\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n ++stats.gjkIters;\n\n // Check for duplicate support points. This is the main termination\n // criteria.\n let duplicate = false;\n for (let i = 0; i < saveCount; ++i) {\n if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) {\n duplicate = true;\n break;\n }\n }\n\n // If we found a duplicate support point we must exit to avoid cycling.\n if (duplicate) {\n break;\n }\n\n // New vertex is ok and needed.\n ++simplex.m_count;\n }\n\n stats.gjkMaxIters = math_max(stats.gjkMaxIters, iter);\n\n // Prepare output.\n simplex.getWitnessPoints(output.pointA, output.pointB);\n output.distance = matrix.distVec2(output.pointA, output.pointB);\n output.iterations = iter;\n\n // Cache the simplex.\n simplex.writeCache(cache);\n\n // Apply radii if requested.\n if (input.useRadii) {\n const rA = proxyA.m_radius;\n const rB = proxyB.m_radius;\n\n if (output.distance > rA + rB && output.distance > EPSILON) {\n // Shapes are still no overlapped.\n // Move the witness points to the outer surface.\n output.distance -= rA + rB;\n matrix.subVec2(normal, output.pointB, output.pointA);\n matrix.normalizeVec2(normal);\n matrix.plusScaleVec2(output.pointA, rA, normal);\n matrix.minusScaleVec2(output.pointB, rB, normal);\n } else {\n // Shapes are overlapped when radii are considered.\n // Move the witness points to the middle.\n const p = matrix.subVec2(temp, output.pointA, output.pointB);\n matrix.copyVec2(output.pointA, p);\n matrix.copyVec2(output.pointB, p);\n output.distance = 0.0;\n }\n }\n};\n\n/**\n * A distance proxy is used by the GJK algorithm. It encapsulates any shape.\n */\nexport class DistanceProxy {\n /** @internal */ m_vertices: Vec2Value[] = [];\n // todo: remove this?\n /** @internal */ m_count = 0;\n /** @internal */ m_radius = 0;\n\n recycle() {\n this.m_vertices.length = 0;\n this.m_count = 0;\n this.m_radius = 0;\n }\n\n /**\n * Get the vertex count.\n */\n getVertexCount(): number {\n return this.m_count;\n }\n\n /**\n * Get a vertex by index. Used by Distance.\n */\n getVertex(index: number): Vec2Value {\n _ASSERT && console.assert(0 <= index && index < this.m_count);\n return this.m_vertices[index];\n }\n\n /**\n * Get the supporting vertex index in the given direction.\n */\n getSupport(d: Vec2Value): number {\n let bestIndex = -1;\n let bestValue = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const value = matrix.dotVec2(this.m_vertices[i], d);\n if (value > bestValue) {\n bestIndex = i;\n bestValue = value;\n }\n }\n return bestIndex;\n }\n\n /**\n * Get the supporting vertex in the given direction.\n */\n getSupportVertex(d: Vec2Value): Vec2Value {\n return this.m_vertices[this.getSupport(d)];\n }\n\n /**\n * Initialize the proxy using the given shape. The shape must remain in scope\n * while the proxy is in use.\n */\n set(shape: Shape, index: number): void {\n // TODO remove, use shape instead\n _ASSERT && console.assert(typeof shape.computeDistanceProxy === \"function\");\n shape.computeDistanceProxy(this, index);\n }\n\n /**\n * Initialize the proxy using a vertex cloud and radius. The vertices\n * must remain in scope while the proxy is in use.\n */\n setVertices(vertices: Vec2Value[], count: number, radius: number) {\n this.m_vertices = vertices;\n this.m_count = count;\n this.m_radius = radius;\n }\n}\n\nclass SimplexVertex {\n /** support point in proxyA */\n wA = matrix.vec2(0, 0);\n /** wA index */\n indexA = 0;\n\n /** support point in proxyB */\n wB = matrix.vec2(0, 0);\n /** wB index */\n indexB = 0;\n\n /** wB - wA; */\n w = matrix.vec2(0, 0);\n /** barycentric coordinate for closest point */\n a = 0;\n\n recycle() {\n this.indexA = 0;\n this.indexB = 0;\n matrix.zeroVec2(this.wA);\n matrix.zeroVec2(this.wB);\n matrix.zeroVec2(this.w);\n this.a = 0;\n }\n set(v: SimplexVertex): void {\n this.indexA = v.indexA;\n this.indexB = v.indexB;\n matrix.copyVec2(this.wA, v.wA);\n matrix.copyVec2(this.wB, v.wB);\n matrix.copyVec2(this.w, v.w);\n this.a = v.a;\n }\n}\n\n/** @internal */ const searchDirection_reuse = matrix.vec2(0, 0);\n/** @internal */ const closestPoint_reuse = matrix.vec2(0, 0); \n\nclass Simplex {\n m_v1 = new SimplexVertex();\n m_v2 = new SimplexVertex();\n m_v3 = new SimplexVertex();\n m_v = [this.m_v1, this.m_v2, this.m_v3];\n m_count: number;\n recycle() {\n this.m_v1.recycle();\n this.m_v2.recycle();\n this.m_v3.recycle();\n this.m_count = 0;\n }\n\n /** @internal */ toString(): string {\n if (this.m_count === 3) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y,\n this.m_v3.a, this.m_v3.wA.x, this.m_v3.wA.y, this.m_v3.wB.x, this.m_v3.wB.y\n ].toString();\n\n } else if (this.m_count === 2) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y\n ].toString();\n\n } else if (this.m_count === 1) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y\n ].toString();\n\n } else {\n return \"+\" + this.m_count;\n }\n }\n\n readCache(cache: SimplexCache, proxyA: DistanceProxy, transformA: TransformValue, proxyB: DistanceProxy, transformB: TransformValue): void {\n _ASSERT && console.assert(cache.count <= 3);\n\n // Copy data from cache.\n this.m_count = cache.count;\n for (let i = 0; i < this.m_count; ++i) {\n const v = this.m_v[i];\n v.indexA = cache.indexA[i];\n v.indexB = cache.indexB[i];\n const wALocal = proxyA.getVertex(v.indexA);\n const wBLocal = proxyB.getVertex(v.indexB);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 0.0;\n }\n\n // Compute the new simplex metric, if it is substantially different than\n // old metric then flush the simplex.\n if (this.m_count > 1) {\n const metric1 = cache.metric;\n const metric2 = this.getMetric();\n if (metric2 < 0.5 * metric1 || 2.0 * metric1 < metric2 || metric2 < EPSILON) {\n // Reset the simplex.\n this.m_count = 0;\n }\n }\n\n // If the cache is empty or invalid...\n if (this.m_count === 0) {\n const v = this.m_v[0];\n v.indexA = 0;\n v.indexB = 0;\n const wALocal = proxyA.getVertex(0);\n const wBLocal = proxyB.getVertex(0);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 1.0;\n this.m_count = 1;\n }\n }\n\n writeCache(cache: SimplexCache): void {\n cache.metric = this.getMetric();\n cache.count = this.m_count;\n for (let i = 0; i < this.m_count; ++i) {\n cache.indexA[i] = this.m_v[i].indexA;\n cache.indexB[i] = this.m_v[i].indexB;\n }\n }\n\n getSearchDirection(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 1:\n return matrix.setVec2(searchDirection_reuse, -v1.w.x, -v1.w.y);\n\n case 2: {\n matrix.subVec2(e12, v2.w, v1.w);\n const sgn = -matrix.crossVec2Vec2(e12, v1.w);\n if (sgn > 0.0) {\n // Origin is left of e12.\n return matrix.setVec2(searchDirection_reuse, -e12.y, e12.x);\n } else {\n // Origin is right of e12.\n return matrix.setVec2(searchDirection_reuse, e12.y, -e12.x);\n }\n }\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(searchDirection_reuse);\n }\n }\n\n getClosestPoint(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n\n case 1:\n return matrix.copyVec2(closestPoint_reuse, v1.w);\n\n case 2:\n return matrix.combine2Vec2(closestPoint_reuse, v1.a, v1.w, v2.a, v2.w);\n\n case 3:\n return matrix.zeroVec2(closestPoint_reuse);\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n }\n }\n\n getWitnessPoints(pA: Vec2Value, pB: Vec2Value): void {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n break;\n\n case 1:\n matrix.copyVec2(pA, v1.wA);\n matrix.copyVec2(pB, v1.wB);\n break;\n\n case 2:\n matrix.combine2Vec2(pA, v1.a, v1.wA, v2.a, v2.wA);\n matrix.combine2Vec2(pB, v1.a, v1.wB, v2.a, v2.wB);\n break;\n\n case 3:\n matrix.combine3Vec2(pA, v1.a, v1.wA, v2.a, v2.wA, v3.a, v3.wA);\n matrix.copyVec2(pB, pA);\n break;\n\n default:\n _ASSERT && console.assert(false);\n break;\n }\n }\n\n getMetric(): number {\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return 0.0;\n\n case 1:\n return 0.0;\n\n case 2:\n return matrix.distVec2(this.m_v1.w, this.m_v2.w);\n\n case 3:\n return matrix.crossVec2Vec2(\n matrix.subVec2(temp1, this.m_v2.w, this.m_v1.w),\n matrix.subVec2(temp2, this.m_v3.w, this.m_v1.w),\n );\n\n default:\n _ASSERT && console.assert(false);\n return 0.0;\n }\n }\n\n solve(): void {\n switch (this.m_count) {\n case 1:\n break;\n\n case 2:\n this.solve2();\n break;\n\n case 3:\n this.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n }\n\n// Solve a line segment using barycentric coordinates.\n//\n// p = a1 * w1 + a2 * w2\n// a1 + a2 = 1\n//\n// The vector from the origin to the closest point on the line is\n// perpendicular to the line.\n// e12 = w2 - w1\n// dot(p, e) = 0\n// a1 * dot(w1, e) + a2 * dot(w2, e) = 0\n//\n// 2-by-2 linear system\n// [1 1 ][a1] = [1]\n// [w1.e12 w2.e12][a2] = [0]\n//\n// Define\n// d12_1 = dot(w2, e12)\n// d12_2 = -dot(w1, e12)\n// d12 = d12_1 + d12_2\n//\n// Solution\n// a1 = d12_1 / d12\n// a2 = d12_2 / d12\n solve2(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n matrix.subVec2(e12, w2, w1);\n\n // w1 region\n const d12_2 = -matrix.dotVec2(w1, e12);\n if (d12_2 <= 0.0) {\n // a2 <= 0, so we clamp it to 0\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // w2 region\n const d12_1 = matrix.dotVec2(w2, e12);\n if (d12_1 <= 0.0) {\n // a1 <= 0, so we clamp it to 0\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // Must be in e12 region.\n const inv_d12 = 1.0 / (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\n// Possible regions:\n// - points[2]\n// - edge points[0]-points[2]\n// - edge points[1]-points[2]\n// - inside the triangle\n solve3(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n const w3 = this.m_v3.w;\n\n // Edge12\n // [1 1 ][a1] = [1]\n // [w1.e12 w2.e12][a2] = [0]\n // a3 = 0\n matrix.subVec2(e12, w2, w1);\n const w1e12 = matrix.dotVec2(w1, e12);\n const w2e12 = matrix.dotVec2(w2, e12);\n const d12_1 = w2e12;\n const d12_2 = -w1e12;\n\n // Edge13\n // [1 1 ][a1] = [1]\n // [w1.e13 w3.e13][a3] = [0]\n // a2 = 0\n matrix.subVec2(e13, w3, w1);\n const w1e13 = matrix.dotVec2(w1, e13);\n const w3e13 = matrix.dotVec2(w3, e13);\n const d13_1 = w3e13;\n const d13_2 = -w1e13;\n\n // Edge23\n // [1 1 ][a2] = [1]\n // [w2.e23 w3.e23][a3] = [0]\n // a1 = 0\n matrix.subVec2(e23, w3, w2);\n const w2e23 = matrix.dotVec2(w2, e23);\n const w3e23 = matrix.dotVec2(w3, e23);\n const d23_1 = w3e23;\n const d23_2 = -w2e23;\n\n // Triangle123\n const n123 = matrix.crossVec2Vec2(e12, e13);\n\n const d123_1 = n123 * matrix.crossVec2Vec2(w2, w3);\n const d123_2 = n123 * matrix.crossVec2Vec2(w3, w1);\n const d123_3 = n123 * matrix.crossVec2Vec2(w1, w2);\n\n // w1 region\n if (d12_2 <= 0.0 && d13_2 <= 0.0) {\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // e12\n if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) {\n const inv_d12 = 1.0 / (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\n // e13\n if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) {\n const inv_d13 = 1.0 / (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\n // w2 region\n if (d12_1 <= 0.0 && d23_2 <= 0.0) {\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // w3 region\n if (d13_1 <= 0.0 && d23_1 <= 0.0) {\n this.m_v3.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v3);\n return;\n }\n\n // e23\n if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) {\n const inv_d23 = 1.0 / (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\n // Must be in triangle123\n const inv_d123 = 1.0 / (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}\n\n/** @internal */ const simplex = new Simplex();\n\n/** @internal */ const input = new DistanceInput();\n/** @internal */ const cache = new SimplexCache();\n/** @internal */ const output = new DistanceOutput();\n\n/**\n * Determine if two generic shapes overlap.\n */\nexport const testOverlap = function (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue): boolean {\n input.recycle();\n input.proxyA.set(shapeA, indexA);\n input.proxyB.set(shapeB, indexB);\n matrix.copyTransform(input.transformA, xfA);\n matrix.copyTransform(input.transformB, xfB);\n input.useRadii = true;\n\n output.recycle();\n cache.recycle();\n\n Distance(output, cache, input);\n\n return output.distance < 10.0 * EPSILON;\n};\n\n// legacy exports\nDistance.testOverlap = testOverlap;\nDistance.Input = DistanceInput;\nDistance.Output = DistanceOutput;\nDistance.Proxy = DistanceProxy;\nDistance.Cache = SimplexCache;\n\n/**\n * Input parameters for ShapeCast\n */\nexport class ShapeCastInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n readonly translationB = Vec2.zero();\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n matrix.zeroVec2(this.translationB);\n }\n}\n\n/**\n * Output results for b2ShapeCast\n */\nexport class ShapeCastOutput {\n point: Vec2 = Vec2.zero();\n normal: Vec2 = Vec2.zero();\n lambda = 1.0;\n iterations = 0;\n}\n\n/**\n * Perform a linear shape cast of shape B moving and shape A fixed. Determines\n * the hit point, normal, and translation fraction.\n * \n * @returns true if hit, false if there is no hit or an initial overlap\n */\n//\n// GJK-raycast\n// Algorithm by Gino van den Bergen.\n// \"Smooth Mesh Contacts with GJK\" in Game Physics Pearls. 2010\nexport const ShapeCast = function(output: ShapeCastOutput, input: ShapeCastInput): boolean {\n output.iterations = 0;\n output.lambda = 1.0;\n output.normal.setZero();\n output.point.setZero();\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n\n const radiusA = math_max(proxyA.m_radius, Settings.polygonRadius);\n const radiusB = math_max(proxyB.m_radius, Settings.polygonRadius);\n const radius = radiusA + radiusB;\n\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n const r = input.translationB;\n const n = Vec2.zero();\n let lambda = 0.0;\n\n // Initial simplex\n const simplex = new Simplex();\n simplex.m_count = 0;\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n\n // Get support point in -r direction\n let indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(r)));\n let wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n let indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, r));\n let wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const v = Vec2.sub(wA, wB);\n\n // Sigma is the target distance between polygons\n const sigma = math_max(Settings.polygonRadius, radius - Settings.polygonRadius);\n const tolerance = 0.5 * Settings.linearSlop;\n\n // Main iteration loop.\n const k_maxIters = 20;\n let iter = 0;\n while (iter < k_maxIters && v.length() - sigma > tolerance) {\n _ASSERT && console.assert(simplex.m_count < 3);\n\n output.iterations += 1;\n\n // Support in direction -v (A - B)\n indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(v)));\n wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, v));\n wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const p = Vec2.sub(wA, wB);\n\n // -v is a normal at p\n v.normalize();\n\n // Intersect ray with plane\n const vp = Vec2.dot(v, p);\n const vr = Vec2.dot(v, r);\n if (vp - sigma > lambda * vr) {\n if (vr <= 0.0) {\n return false;\n }\n\n lambda = (vp - sigma) / vr;\n if (lambda > 1.0) {\n return false;\n }\n\n n.setMul(-1, v);\n simplex.m_count = 0;\n }\n\n // Reverse simplex since it works with B - A.\n // Shift by lambda * r because we want the closest point to the current clip point.\n // Note that the support point p is not shifted because we want the plane equation\n // to be formed in unshifted space.\n const vertex = vertices[simplex.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.0;\n simplex.m_count += 1;\n\n switch (simplex.m_count) {\n case 1:\n break;\n\n case 2:\n simplex.solve2();\n break;\n\n case 3:\n simplex.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n \n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count == 3) {\n // Overlap\n return false;\n }\n\n // Get search direction.\n v.setVec2(simplex.getClosestPoint());\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n }\n\n if (iter == 0) {\n // Initial overlap\n return false;\n\t}\n\n // Prepare output.\n const pointA = Vec2.zero();\n const pointB = Vec2.zero();\n simplex.getWitnessPoints(pointB, pointA);\n\n if (v.lengthSquared() > 0.0) {\n n.setMul(-1, v);\n n.normalize();\n }\n\n output.point = Vec2.combine(1, pointA, radiusA, n);\n output.normal = n;\n output.lambda = lambda;\n output.iterations = iter;\n return true;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport Timer from \"../util/Timer\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Distance, DistanceInput, DistanceOutput, DistanceProxy, SimplexCache } from \"./Distance\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\n/**\n * Input parameters for TimeOfImpact.\n */\nexport class TOIInput {\n proxyA = new DistanceProxy();\n proxyB = new DistanceProxy();\n sweepA = new Sweep();\n sweepB = new Sweep();\n /** defines sweep interval [0, tMax] */\n tMax: number;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.sweepA.recycle();\n this.sweepB.recycle();\n this.tMax = -1;\n }\n}\n\nexport enum TOIOutputState {\n e_unset = -1,\n e_unknown = 0,\n e_failed = 1,\n e_overlapped = 2,\n e_touching = 3,\n e_separated = 4,\n}\n\n/**\n * Output parameters for TimeOfImpact.\n */\nexport class TOIOutput {\n state = TOIOutputState.e_unset;\n t = -1;\n recycle() {\n this.state = TOIOutputState.e_unset;\n this.t = -1;\n }\n}\n\nstats.toiTime = 0;\nstats.toiMaxTime = 0;\nstats.toiCalls = 0;\nstats.toiIters = 0;\nstats.toiMaxIters = 0;\nstats.toiRootIters = 0;\nstats.toiMaxRootIters = 0;\n\n/** @internal */ const distanceInput = new DistanceInput();\n/** @internal */ const distanceOutput = new DistanceOutput();\n// this is passed to Distance and SeparationFunction\n/** @internal */ const cache = new SimplexCache();\n\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const axisA = matrix.vec2(0, 0);\n/** @internal */ const axisB = matrix.vec2(0, 0);\n/** @internal */ const localPointA = matrix.vec2(0, 0);\n/** @internal */ const localPointB = matrix.vec2(0, 0);\n\n\n/**\n * Compute the upper bound on time before two shapes penetrate. Time is\n * represented as a fraction between [0,tMax]. This uses a swept separating axis\n * and may miss some intermediate, non-tunneling collisions. If you change the\n * time interval, you should call this function again.\n *\n * Note: use Distance to compute the contact point and normal at the time of\n * impact.\n *\n * CCD via the local separating axis method. This seeks progression by computing\n * the largest time at which separation is maintained.\n */\nexport const TimeOfImpact = function (output: TOIOutput, input: TOIInput): void {\n const timer = Timer.now();\n\n ++stats.toiCalls;\n\n output.state = TOIOutputState.e_unknown;\n output.t = input.tMax;\n\n const proxyA = input.proxyA; // DistanceProxy\n const proxyB = input.proxyB; // DistanceProxy\n\n const sweepA = input.sweepA; // Sweep\n const sweepB = input.sweepB; // Sweep\n\n // Large rotations can make the root finder fail, so we normalize the\n // sweep angles.\n sweepA.normalize();\n sweepB.normalize();\n\n const tMax = input.tMax;\n\n const totalRadius = proxyA.m_radius + proxyB.m_radius;\n const target = math_max(Settings.linearSlop, totalRadius - 3.0 * Settings.linearSlop);\n const tolerance = 0.25 * Settings.linearSlop;\n _ASSERT && console.assert(target > tolerance);\n\n let t1 = 0.0;\n const k_maxIterations = Settings.maxTOIIterations;\n let iter = 0;\n\n // Prepare input for distance query.\n // const cache = new SimplexCache();\n cache.recycle();\n\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\n // The outer loop progressively attempts to compute new separating axes.\n // This loop terminates when an axis is repeated (no progress is made).\n while (true) {\n sweepA.getTransform(xfA, t1);\n sweepB.getTransform(xfB, t1);\n\n // Get the distance between shapes. We can also use the results\n // to get a separating axis.\n matrix.copyTransform(distanceInput.transformA, xfA);\n matrix.copyTransform(distanceInput.transformB, xfB);\n Distance(distanceOutput, cache, distanceInput);\n\n // If the shapes are overlapped, we give up on continuous collision.\n if (distanceOutput.distance <= 0.0) {\n // Failure!\n output.state = TOIOutputState.e_overlapped;\n output.t = 0.0;\n break;\n }\n\n if (distanceOutput.distance < target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n break;\n }\n\n // Initialize the separating axis.\n separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1);\n\n // if (false) {\n // // Dump the curve seen by the root finder\n // const N = 100;\n // const dx = 1.0 / N;\n // const xs = []; // [ N + 1 ];\n // const fs = []; // [ N + 1 ];\n // const x = 0.0;\n // for (const i = 0; i <= N; ++i) {\n // sweepA.getTransform(xfA, x);\n // sweepB.getTransform(xfB, x);\n // const f = fcn.evaluate(xfA, xfB) - target;\n // printf(\"%g %g\\n\", x, f);\n // xs[i] = x;\n // fs[i] = f;\n // x += dx;\n // }\n // }\n\n // Compute the TOI on the separating axis. We do this by successively\n // resolving the deepest point. This loop is bounded by the number of\n // vertices.\n let done = false;\n let t2 = tMax;\n let pushBackIter = 0;\n while (true) {\n // Find the deepest point at t2. Store the witness point indices.\n let s2 = separationFunction.findMinSeparation(t2);\n\n // Is the final configuration separated?\n if (s2 > target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_separated;\n output.t = tMax;\n done = true;\n break;\n }\n\n // Has the separation reached tolerance?\n if (s2 > target - tolerance) {\n // Advance the sweeps\n t1 = t2;\n break;\n }\n\n // Compute the initial separation of the witness points.\n let s1 = separationFunction.evaluate(t1);\n\n // Check for initial overlap. This might happen if the root finder\n // runs out of iterations.\n if (s1 < target - tolerance) {\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n done = true;\n break;\n }\n\n // Check for touching\n if (s1 <= target + tolerance) {\n // Victory! t1 should hold the TOI (could be 0.0).\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n done = true;\n break;\n }\n\n // Compute 1D root of: f(x) - target = 0\n let rootIterCount = 0;\n let a1 = t1;\n let a2 = t2;\n while (true) {\n // Use a mix of the secant rule and bisection.\n let t;\n if (rootIterCount & 1) {\n // Secant rule to improve convergence.\n t = a1 + (target - s1) * (a2 - a1) / (s2 - s1);\n } else {\n // Bisection to guarantee progress.\n t = 0.5 * (a1 + a2);\n }\n\n ++rootIterCount;\n ++stats.toiRootIters;\n\n const s = separationFunction.evaluate(t);\n\n if (math_abs(s - target) < tolerance) {\n // t2 holds a tentative value for t1\n t2 = t;\n break;\n }\n\n // Ensure we continue to bracket the root.\n if (s > target) {\n a1 = t;\n s1 = s;\n } else {\n a2 = t;\n s2 = s;\n }\n\n if (rootIterCount === 50) {\n break;\n }\n }\n\n stats.toiMaxRootIters = math_max(stats.toiMaxRootIters, rootIterCount);\n\n ++pushBackIter;\n\n if (pushBackIter === Settings.maxPolygonVertices) {\n break;\n }\n }\n\n ++iter;\n ++stats.toiIters;\n\n if (done) {\n break;\n }\n\n if (iter === k_maxIterations) {\n // Root finder got stuck. Semi-victory.\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n break;\n }\n }\n\n stats.toiMaxIters = math_max(stats.toiMaxIters, iter);\n\n const time = Timer.diff(timer);\n stats.toiMaxTime = math_max(stats.toiMaxTime, time);\n stats.toiTime += time;\n\n separationFunction.recycle();\n};\n\nenum SeparationFunctionType {\n e_unset = -1,\n e_points = 1,\n e_faceA = 2,\n e_faceB = 3,\n}\n\nclass SeparationFunction {\n // input cache\n // todo: maybe assign by copy instead of reference?\n m_proxyA: DistanceProxy = null;\n m_proxyB: DistanceProxy = null;\n m_sweepA: Sweep = null;\n m_sweepB: Sweep = null;\n\n // initialize cache\n m_type = SeparationFunctionType.e_unset;\n m_localPoint = matrix.vec2(0, 0);\n m_axis = matrix.vec2(0, 0);\n\n // compute output\n indexA = -1;\n indexB = -1;\n\n recycle() {\n this.m_proxyA = null;\n this.m_proxyB = null;\n this.m_sweepA = null;\n this.m_sweepB = null;\n\n this.m_type = SeparationFunctionType.e_unset;\n matrix.zeroVec2(this.m_localPoint);\n matrix.zeroVec2(this.m_axis);\n\n this.indexA = -1;\n this.indexB = -1;\n }\n\n // TODO_ERIN might not need to return the separation\n\n initialize(cache: SimplexCache, proxyA: DistanceProxy, sweepA: Sweep, proxyB: DistanceProxy, sweepB: Sweep, t1: number): number {\n const count = cache.count;\n _ASSERT && console.assert(0 < count && count < 3);\n\n this.m_proxyA = proxyA;\n this.m_proxyB = proxyB;\n this.m_sweepA = sweepA;\n this.m_sweepB = sweepB;\n\n this.m_sweepA.getTransform(xfA, t1);\n this.m_sweepB.getTransform(xfB, t1);\n\n if (count === 1) {\n this.m_type = SeparationFunctionType.e_points;\n const localPointA = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n matrix.subVec2(this.m_axis, pointB, pointA);\n const s = matrix.normalizeVec2Length(this.m_axis);\n return s;\n\n } else if (cache.indexA[0] === cache.indexA[1]) {\n // Two points on B and one on A.\n this.m_type = SeparationFunctionType.e_faceB;\n const localPointB1 = proxyB.getVertex(cache.indexB[0]);\n const localPointB2 = proxyB.getVertex(cache.indexB[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointB2, localPointB1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n const localPointA = proxyA.getVertex(cache.indexA[0]);\n const pointA = Transform.mulVec2(xfA, localPointA);\n\n let s = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n\n } else {\n // Two points on A and one or two points on B.\n this.m_type = SeparationFunctionType.e_faceA;\n const localPointA1 = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointA2 = this.m_proxyA.getVertex(cache.indexA[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointA2, localPointA1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n let s = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n }\n }\n\n compute(find: boolean, t: number): number {\n // It was findMinSeparation and evaluate\n this.m_sweepA.getTransform(xfA, t);\n this.m_sweepB.getTransform(xfB, t);\n\n switch (this.m_type) {\n case SeparationFunctionType.e_points: {\n if (find) {\n matrix.derotVec2(axisA, xfA.q, this.m_axis);\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, this.m_axis));\n\n this.indexA = this.m_proxyA.getSupport(axisA);\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, this.m_axis) - matrix.dotVec2(pointA, this.m_axis);\n return sep;\n }\n\n case SeparationFunctionType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexA = -1;\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n return sep;\n }\n\n case SeparationFunctionType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisA, xfA.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexB = -1;\n this.indexA = this.m_proxyA.getSupport(axisA);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.transformVec2(pointA, xfA, localPointA);\n\n const sep = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n return sep;\n }\n\n default:\n _ASSERT && console.assert(false);\n if (find) {\n this.indexA = -1;\n this.indexB = -1;\n }\n return 0.0;\n }\n }\n\n findMinSeparation(t: number): number {\n return this.compute(true, t);\n }\n\n evaluate(t: number): number {\n return this.compute(false, t);\n }\n}\n\n/** @internal */ const separationFunction = new SeparationFunction();\n\n// legacy exports\nTimeOfImpact.Input = TOIInput;\nTimeOfImpact.Output = TOIOutput;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { EPSILON } from \"../common/Math\";\nimport { Body } from \"./Body\";\nimport type { Contact } from \"./Contact\";\nimport { Joint } from \"./Joint\";\nimport { TimeOfImpact, TOIInput, TOIOutput, TOIOutputState } from \"../collision/TimeOfImpact\";\nimport { Distance, DistanceInput, DistanceOutput, SimplexCache } from \"../collision/Distance\";\nimport { World } from \"./World\";\nimport { Sweep } from \"../common/Sweep\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_min = Math.min;\n\n\nexport class TimeStep {\n /** time step */\n dt: number = 0;\n /** inverse time step (0 if dt == 0) */\n inv_dt: number = 0;\n velocityIterations: number = 0;\n positionIterations: number = 0;\n warmStarting: boolean = false;\n blockSolve: boolean = true;\n\n /** timestep ratio for variable timestep */\n inv_dt0: number = 0.0;\n /** dt * inv_dt0 */\n dtRatio: number = 1;\n\n reset(dt: number): void {\n if (this.dt > 0.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}\n\n// reuse\n/** @internal */ const s_subStep = new TimeStep();\n/** @internal */ const c = matrix.vec2(0, 0);\n/** @internal */ const v = matrix.vec2(0, 0);\n/** @internal */ const translation = matrix.vec2(0, 0);\n/** @internal */ const input = new TOIInput();\n/** @internal */ const output = new TOIOutput();\n/** @internal */ const backup = new Sweep();\n/** @internal */ const backup1 = new Sweep();\n/** @internal */ const backup2 = new Sweep();\n\n/**\n * Contact impulses for reporting. Impulses are used instead of forces because\n * sub-step forces may approach infinity for rigid body collisions. These match\n * up one-to-one with the contact points in Manifold.\n */\nexport class ContactImpulse {\n // TODO: merge with Contact class?\n\n private readonly contact: Contact;\n private readonly normals: number[];\n private readonly tangents: number[];\n\n constructor(contact: Contact) {\n this.contact = contact;\n this.normals = [];\n this.tangents = [];\n }\n\n recycle() {\n this.normals.length = 0;\n this.tangents.length = 0;\n }\n\n get normalImpulses(): number[] {\n const contact = this.contact;\n const normals = this.normals;\n normals.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n normals.push(contact.v_points[p].normalImpulse);\n }\n return normals;\n }\n\n get tangentImpulses(): number[] {\n const contact = this.contact;\n const tangents = this.tangents;\n tangents.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n tangents.push(contact.v_points[p].tangentImpulse);\n }\n return tangents;\n }\n}\n\n/**\n * Finds and solves islands. An island is a connected subset of the world.\n */\nexport class Solver {\n m_world: World;\n m_stack: Body[];\n m_bodies: Body[];\n m_contacts: Contact[];\n m_joints: Joint[];\n\n constructor(world: World) {\n this.m_world = world;\n this.m_stack = [];\n this.m_bodies = [];\n this.m_contacts = [];\n this.m_joints = [];\n }\n\n clear(): void {\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\n addBody(body: Body): void {\n _ASSERT && console.assert(body instanceof Body, \"Not a Body!\", body);\n this.m_bodies.push(body);\n // why?\n // body.c_position.c.setZero();\n // body.c_position.a = 0;\n // body.c_velocity.v.setZero();\n // body.c_velocity.w = 0;\n }\n\n addContact(contact: Contact): void {\n // _ASSERT && console.assert(contact instanceof Contact, 'Not a Contact!', contact);\n this.m_contacts.push(contact);\n }\n\n addJoint(joint: Joint): void {\n _ASSERT && console.assert(joint instanceof Joint, \"Not a Joint!\", joint);\n this.m_joints.push(joint);\n }\n\n solveWorld(step: TimeStep): void {\n const world = this.m_world;\n\n // Clear all the island flags.\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n }\n for (let c = world.m_contactList; c; c = c.m_next) {\n c.m_islandFlag = false;\n }\n for (let j = world.m_jointList; j; j = j.m_next) {\n j.m_islandFlag = false;\n }\n\n // Build and simulate all awake islands.\n const stack = this.m_stack;\n let loop = -1;\n for (let seed = world.m_bodyList; seed; seed = seed.m_next) {\n loop++;\n if (seed.m_islandFlag) {\n continue;\n }\n\n if (seed.isAwake() == false || seed.isActive() == false) {\n continue;\n }\n\n // The seed can be dynamic or kinematic.\n if (seed.isStatic()) {\n continue;\n }\n\n // Reset island and stack.\n this.clear();\n\n stack.push(seed);\n\n seed.m_islandFlag = true;\n\n // Perform a depth first search (DFS) on the constraint graph.\n while (stack.length > 0) {\n // Grab the next body off the stack and add it to the island.\n const b = stack.pop();\n _ASSERT && console.assert(b.isActive() == true);\n this.addBody(b);\n\n // Make sure the body is awake (without resetting sleep timer).\n b.m_awakeFlag = true;\n\n // To keep islands as small as possible, we don't\n // propagate islands across static bodies.\n if (b.isStatic()) {\n continue;\n }\n\n // Search all contacts connected to this body.\n for (let ce = b.m_contactList; ce; ce = ce.next) {\n const contact = ce.contact;\n\n // Has this contact already been added to an island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Is this contact solid and touching?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n this.addContact(contact);\n contact.m_islandFlag = true;\n\n const other = ce.other;\n\n // Was the other body already added to this island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n\n // Search all joints connect to this body.\n for (let je = b.m_jointList; je; je = je.next) {\n if (je.joint.m_islandFlag == true) {\n continue;\n }\n\n const other = je.other;\n\n // Don't simulate joints connected to inactive bodies.\n if (other.isActive() == false) {\n continue;\n }\n\n this.addJoint(je.joint);\n je.joint.m_islandFlag = true;\n\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n }\n\n this.solveIsland(step);\n\n // Post solve cleanup.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n // Allow static bodies to participate in other islands.\n // TODO: are they added at all?\n const b = this.m_bodies[i];\n if (b.isStatic()) {\n b.m_islandFlag = false;\n }\n }\n }\n }\n\n solveIsland(step: TimeStep): void {\n // B2: Island Solve\n const world = this.m_world;\n const gravity = world.m_gravity;\n const allowSleep = world.m_allowSleep;\n\n const h = step.dt;\n\n // Integrate velocities and apply damping. Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.m_sweep.c);\n const a = body.m_sweep.a;\n matrix.copyVec2(v, body.m_linearVelocity);\n let w = body.m_angularVelocity;\n\n // Store positions for continuous collision.\n matrix.copyVec2(body.m_sweep.c0, body.m_sweep.c);\n body.m_sweep.a0 = body.m_sweep.a;\n\n if (body.isDynamic()) {\n // Integrate velocities.\n matrix.plusScaleVec2(v, h * body.m_gravityScale, gravity);\n matrix.plusScaleVec2(v, h * body.m_invMass, body.m_force);\n w += h * body.m_invI * body.m_torque;\n /**\n *
\n         * Apply damping.\n         * ODE: dv/dt + c * v = 0\n         * Solution: v(t) = v0 * exp(-c * t)\n         * Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)\n         * v2 = exp(-c * dt) * v1\n         * Pade approximation:\n         * v2 = v1 * 1 / (1 + c * dt)\n         * 
\n */\n matrix.scaleVec2(v, 1.0 / (1.0 + h * body.m_linearDamping), v);\n w *= 1.0 / (1.0 + h * body.m_angularDamping);\n }\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(step);\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(step);\n }\n\n if (step.warmStarting) {\n // Warm start.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.warmStartConstraint(step);\n }\n }\n\n for (let i = 0; i < this.m_joints.length; ++i) {\n const joint = this.m_joints[i];\n joint.initVelocityConstraints(step);\n }\n\n // Solve velocity constraints\n for (let i = 0; i < step.velocityIterations; ++i) {\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n joint.solveVelocityConstraints(step);\n }\n\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(step);\n }\n }\n\n // Store impulses for warm starting\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.storeConstraintImpulses(step);\n }\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n // Solve position constraints\n let positionSolved = false;\n for (let i = 0; i < step.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraint(step);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -3.0 * Settings.linearSlop;\n\n let jointsOkay = true;\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n const jointOkay = joint.solvePositionConstraints(step);\n jointsOkay = jointsOkay && jointOkay;\n }\n\n if (contactsOkay && jointsOkay) {\n // Exit early if the position errors are small.\n positionSolved = true;\n break;\n }\n }\n\n // Copy state buffers back to the bodies\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(body.m_sweep.c, body.c_position.c);\n body.m_sweep.a = body.c_position.a;\n matrix.copyVec2(body.m_linearVelocity, body.c_velocity.v);\n body.m_angularVelocity = body.c_velocity.w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n\n if (allowSleep) {\n let minSleepTime = Infinity;\n\n const linTolSqr = Settings.linearSleepToleranceSqr;\n const angTolSqr = Settings.angularSleepToleranceSqr;\n\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n if (body.isStatic()) {\n continue;\n }\n\n if ((body.m_autoSleepFlag == false)\n || (body.m_angularVelocity * body.m_angularVelocity > angTolSqr)\n || (matrix.lengthSqrVec2(body.m_linearVelocity) > linTolSqr)) {\n body.m_sleepTime = 0.0;\n minSleepTime = 0.0;\n } else {\n body.m_sleepTime += h;\n minSleepTime = math_min(minSleepTime, body.m_sleepTime);\n }\n }\n\n if (minSleepTime >= Settings.timeToSleep && positionSolved) {\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.setAwake(false);\n }\n }\n }\n }\n\n /**\n * Find TOI contacts and solve them.\n */\n solveWorldTOI(step: TimeStep): void {\n const world = this.m_world;\n\n if (world.m_stepComplete) {\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n b.m_sweep.alpha0 = 0.0;\n }\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Invalidate TOI\n c.m_toiFlag = false;\n c.m_islandFlag = false;\n c.m_toiCount = 0;\n c.m_toi = 1.0;\n }\n }\n\n // Find TOI events and solve them.\n while (true) {\n // Find the first TOI.\n let minContact: Contact | null = null;\n let minAlpha = 1.0;\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Is this contact disabled?\n if (c.isEnabled() == false) {\n continue;\n }\n\n // Prevent excessive sub-stepping.\n if (c.m_toiCount > Settings.maxSubSteps) {\n continue;\n }\n\n let alpha = 1.0;\n if (c.m_toiFlag) {\n // This contact has a valid cached TOI.\n alpha = c.m_toi;\n } else {\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n // Is there a sensor?\n if (fA.isSensor() || fB.isSensor()) {\n continue;\n }\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n _ASSERT && console.assert(bA.isDynamic() || bB.isDynamic());\n\n const activeA = bA.isAwake() && !bA.isStatic();\n const activeB = bB.isAwake() && !bB.isStatic();\n\n // Is at least one body active (awake and dynamic or kinematic)?\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const collideA = bA.isBullet() || !bA.isDynamic();\n const collideB = bB.isBullet() || !bB.isDynamic();\n\n // Are these two non-bullet dynamic bodies?\n if (collideA == false && collideB == false) {\n continue;\n }\n\n // Compute the TOI for this contact.\n // Put the sweeps onto the same time interval.\n let alpha0 = bA.m_sweep.alpha0;\n\n if (bA.m_sweep.alpha0 < bB.m_sweep.alpha0) {\n alpha0 = bB.m_sweep.alpha0;\n bA.m_sweep.advance(alpha0);\n } else if (bB.m_sweep.alpha0 < bA.m_sweep.alpha0) {\n alpha0 = bA.m_sweep.alpha0;\n bB.m_sweep.advance(alpha0);\n }\n\n _ASSERT && console.assert(alpha0 < 1.0);\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const sweepA = bA.m_sweep;\n const sweepB = bB.m_sweep;\n\n // Compute the time of impact in interval [0, minTOI]\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.sweepA.set(bA.m_sweep);\n input.sweepB.set(bB.m_sweep);\n input.tMax = 1.0;\n\n TimeOfImpact(output, input);\n\n // Beta is the fraction of the remaining portion of the [time?].\n const beta = output.t;\n if (output.state == TOIOutputState.e_touching) {\n alpha = math_min(alpha0 + (1.0 - alpha0) * beta, 1.0);\n } else {\n alpha = 1.0;\n }\n\n c.m_toi = alpha;\n c.m_toiFlag = true;\n }\n\n if (alpha < minAlpha) {\n // This is the minimum TOI found so far.\n minContact = c;\n minAlpha = alpha;\n }\n }\n\n if (minContact == null || 1.0 - 10.0 * EPSILON < minAlpha) {\n // No more TOI events. Done!\n world.m_stepComplete = true;\n break;\n }\n\n // Advance the bodies to the TOI.\n const fA = minContact.getFixtureA();\n const fB = minContact.getFixtureB();\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n backup1.set(bA.m_sweep);\n backup2.set(bB.m_sweep);\n\n bA.advance(minAlpha);\n bB.advance(minAlpha);\n\n // The TOI contact likely has some new contact points.\n minContact.update(world);\n minContact.m_toiFlag = false;\n ++minContact.m_toiCount;\n\n // Is the contact solid?\n if (minContact.isEnabled() == false || minContact.isTouching() == false) {\n // Restore the sweeps.\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\n bA.setAwake(true);\n bB.setAwake(true);\n\n // Build the island\n this.clear();\n this.addBody(bA);\n this.addBody(bB);\n this.addContact(minContact);\n\n bA.m_islandFlag = true;\n bB.m_islandFlag = true;\n minContact.m_islandFlag = true;\n\n // Get contacts on bodyA and bodyB.\n const bodies = [ bA, bB ];\n for (let i = 0; i < bodies.length; ++i) {\n const body = bodies[i];\n if (body.isDynamic()) {\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n // if (this.m_bodyCount == this.m_bodyCapacity) { break; }\n // if (this.m_contactCount == this.m_contactCapacity) { break; }\n\n const contact = ce.contact;\n\n // Has this contact already been added to the island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Only add if either is static, kinematic or bullet.\n const other = ce.other;\n if (other.isDynamic() && !body.isBullet() && !other.isBullet()) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n // Tentatively advance the body to the TOI.\n backup.set(other.m_sweep);\n if (other.m_islandFlag == false) {\n other.advance(minAlpha);\n }\n\n // Update the contact points\n contact.update(world);\n\n // Was the contact disabled by the user?\n // Are there contact points?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n other.m_sweep.set(backup);\n other.synchronizeTransform();\n continue;\n }\n\n // Add the contact to the island\n contact.m_islandFlag = true;\n this.addContact(contact);\n\n // Has the other body already been added to the island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // Add the other body to the island.\n other.m_islandFlag = true;\n\n if (!other.isStatic()) {\n other.setAwake(true);\n }\n\n this.addBody(other);\n }\n }\n }\n\n s_subStep.reset((1.0 - minAlpha) * step.dt);\n s_subStep.dtRatio = 1.0;\n s_subStep.positionIterations = 20;\n s_subStep.velocityIterations = step.velocityIterations;\n s_subStep.warmStarting = false;\n\n this.solveIslandTOI(s_subStep, bA, bB);\n\n // Reset island flags and synchronize broad-phase proxies.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.m_islandFlag = false;\n\n if (!body.isDynamic()) {\n continue;\n }\n\n body.synchronizeFixtures();\n\n // Invalidate all contact TOIs on this displaced body.\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n ce.contact.m_toiFlag = false;\n ce.contact.m_islandFlag = false;\n }\n }\n\n // Commit fixture proxy movements to the broad-phase so that new contacts\n // are created.\n // Also, some contacts can be destroyed.\n world.findNewContacts();\n\n if (world.m_subStepping) {\n world.m_stepComplete = false;\n break;\n }\n }\n }\n\n solveIslandTOI(subStep: TimeStep, toiA: Body, toiB: Body): void {\n\n // Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n matrix.copyVec2(body.c_position.c, body.m_sweep.c);\n body.c_position.a = body.m_sweep.a;\n matrix.copyVec2(body.c_velocity.v, body.m_linearVelocity);\n body.c_velocity.w = body.m_angularVelocity;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(subStep);\n }\n\n // Solve position constraints.\n for (let i = 0; i < subStep.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -1.5 * Settings.linearSlop;\n if (contactsOkay) {\n break;\n }\n }\n\n if (false) {\n // Is the new position really safe?\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const c = this.m_contacts[i];\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const input = new DistanceInput();\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.transformA.set(bA.getTransform());\n input.transformB.set(bB.getTransform());\n input.useRadii = false;\n\n const output = new DistanceOutput();\n const cache = new SimplexCache();\n Distance(output, cache, input);\n\n if (output.distance == 0 || cache.count == 3) {\n cache.count += 0;\n }\n }\n }\n\n // Leap of faith to new safe state.\n matrix.copyVec2(toiA.m_sweep.c0, toiA.c_position.c);\n toiA.m_sweep.a0 = toiA.c_position.a;\n matrix.copyVec2(toiB.m_sweep.c0, toiB.c_position.c);\n toiB.m_sweep.a0 = toiB.c_position.a;\n\n // No warm starting is needed for TOI events because warm\n // starting impulses were applied in the discrete solver.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(subStep);\n }\n\n // Solve velocity constraints.\n for (let i = 0; i < subStep.velocityIterations; ++i) {\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(subStep);\n }\n }\n\n // Don't store the TOI contact forces for warm starting\n // because they can be quite large.\n\n const h = subStep.dt;\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n\n // Sync bodies\n matrix.copyVec2(body.m_sweep.c, c);\n body.m_sweep.a = a;\n matrix.copyVec2(body.m_linearVelocity, v);\n body.m_angularVelocity = w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n }\n\n /** @internal */\n postSolveIsland(): void {\n for (let c = 0; c < this.m_contacts.length; ++c) {\n const contact = this.m_contacts[c];\n this.m_world.postSolve(contact, contact.m_impulse);\n }\n }\n}\n\n// @ts-ignore\nSolver.TimeStep = TimeStep;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 2-by-2 matrix. Stored in column-major order.\n */\nexport class Mat22 {\n ex: Vec2;\n ey: Vec2;\n\n constructor(a: number, b: number, c: number, d: number);\n constructor(a: { x: number; y: number }, b: { x: number; y: number });\n constructor();\n constructor(a?, b?, c?, d?) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec2.clone(a);\n this.ey = Vec2.clone(b);\n } else if (typeof a === \"number\") {\n this.ex = Vec2.neo(a, c);\n this.ey = Vec2.neo(b, d);\n } else {\n this.ex = Vec2.zero();\n this.ey = Vec2.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat22.isValid(o), \"Invalid Mat22!\", o);\n }\n\n set(a: Mat22): void;\n set(a: Vec2Value, b: Vec2Value): void;\n set(a: number, b: number, c: number, d: number): void;\n set(a, b?, c?, d?): void {\n if (typeof a === \"number\" && typeof b === \"number\" && typeof c === \"number\"\n && typeof d === \"number\") {\n this.ex.setNum(a, c);\n this.ey.setNum(b, d);\n\n } else if (typeof a === \"object\" && typeof b === \"object\") {\n this.ex.setVec2(a);\n this.ey.setVec2(b);\n\n } else if (typeof a === \"object\") {\n _ASSERT && Mat22.assert(a);\n this.ex.setVec2(a.ex);\n this.ey.setVec2(a.ey);\n\n } else {\n _ASSERT && console.assert(false);\n }\n }\n\n setIdentity(): void {\n this.ex.x = 1.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 1.0;\n }\n\n setZero(): void {\n this.ex.x = 0.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 0.0;\n }\n\n getInverse(): Mat22 {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const imx = new Mat22();\n imx.ex.x = det * d;\n imx.ey.x = -det * b;\n imx.ex.y = -det * c;\n imx.ey.y = det * a;\n return imx;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const w = Vec2.zero();\n w.x = det * (d * v.x - b * v.y);\n w.y = det * (a * v.y - c * v.x);\n return w;\n }\n\n /**\n * Multiply a matrix times a vector. If a rotation matrix is provided, then this\n * transforms the vector from one frame to another.\n */\n static mul(mx: Mat22, my: Mat22): Mat22;\n static mul(mx: Mat22, v: Vec2Value): Vec2;\n static mul(mx, v) {\n if (v && \"x\" in v && \"y\" in v) {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n }\n\n static mulMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n /**\n * Multiply a matrix transpose times a vector. If a rotation matrix is provided,\n * then this transforms the vector from one frame to another (inverse\n * transform).\n */\n static mulT(mx: Mat22, my: Mat22): Mat22;\n static mulT(mx: Mat22, v: Vec2Value): Vec2;\n static mulT(mx, v) {\n if (v && \"x\" in v && \"y\" in v) { // Vec2\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulTVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n }\n\n static mulTMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n static abs(mx: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n return new Mat22(Vec2.abs(mx.ex), Vec2.abs(mx.ey));\n }\n\n static add(mx1: Mat22, mx2: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx1);\n _ASSERT && Mat22.assert(mx2);\n return new Mat22(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey));\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\nimport { EPSILON } from \"../common/Math\";\n\n\n/** @internal */ const math_sqrt = Math.sqrt;\n\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const dist = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n\nexport enum ManifoldType {\n e_unset = -1,\n e_circles = 0,\n e_faceA = 1,\n e_faceB = 2\n}\n\nexport enum ContactFeatureType {\n e_unset = -1,\n e_vertex = 0,\n e_face = 1\n}\n\n/**\n * This is used for determining the state of contact points.\n */\n export enum PointState {\n /** Point does not exist */\n nullState = 0,\n /** Point was added in the update */\n addState = 1,\n /** Point persisted across the update */\n persistState = 2,\n /** Point was removed in the update */\n removeState = 3\n}\n\n/**\n * Used for computing contact manifolds.\n */\n export class ClipVertex {\n v = matrix.vec2(0, 0);\n id: ContactID = new ContactID();\n\n set(o: ClipVertex): void {\n matrix.copyVec2(this.v, o.v);\n this.id.set(o.id);\n }\n recycle() {\n matrix.zeroVec2(this.v);\n this.id.recycle();\n }\n}\n\n/**\n * A manifold for two touching convex shapes. Manifolds are created in `evaluate`\n * method of Contact subclasses.\n *\n * Supported manifold types are e_faceA or e_faceB for clip point versus plane\n * with radius and e_circles point versus point with radius.\n *\n * We store contacts in this way so that position correction can account for\n * movement, which is critical for continuous physics. All contact scenarios\n * must be expressed in one of these types. This structure is stored across time\n * steps, so we keep it small.\n */\nexport class Manifold {\n type: ManifoldType;\n\n /**\n * Usage depends on manifold type:\n * - circles: not used\n * - faceA: the normal on polygonA\n * - faceB: the normal on polygonB\n */\n localNormal = matrix.vec2(0, 0);\n\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleA\n * - faceA: the center of faceA\n * - faceB: the center of faceB\n */\n localPoint = matrix.vec2(0, 0);\n\n /** The points of contact */\n points: ManifoldPoint[] = [ new ManifoldPoint(), new ManifoldPoint() ];\n\n /** The number of manifold points */\n pointCount: number = 0;\n\n set(that: Manifold): void {\n this.type = that.type;\n matrix.copyVec2(this.localNormal, that.localNormal);\n matrix.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\n recycle(): void {\n this.type = ManifoldType.e_unset;\n matrix.zeroVec2(this.localNormal);\n matrix.zeroVec2(this.localPoint);\n this.pointCount = 0;\n this.points[0].recycle();\n this.points[1].recycle();\n }\n\n /**\n * Evaluate the manifold with supplied transforms. This assumes modest motion\n * from the original state. This does not change the point count, impulses, etc.\n * The radii must come from the shapes that generated the manifold.\n */\n getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold {\n if (this.pointCount == 0) {\n return wm;\n }\n\n wm = wm || new WorldManifold();\n\n wm.pointCount = this.pointCount;\n\n const normal = wm.normal;\n const points = wm.points;\n const separations = wm.separations;\n\n switch (this.type) {\n case ManifoldType.e_circles: {\n matrix.setVec2(normal, 1.0, 0.0);\n const manifoldPoint = this.points[0];\n matrix.transformVec2(pointA, xfA, this.localPoint);\n matrix.transformVec2(pointB, xfB, manifoldPoint.localPoint);\n matrix.subVec2(dist, pointB, pointA);\n const lengthSqr = matrix.lengthSqrVec2(dist);\n if (lengthSqr > EPSILON * EPSILON) {\n const length = math_sqrt(lengthSqr);\n matrix.scaleVec2(normal, 1 / length, dist);\n }\n matrix.combine2Vec2(cA, 1, pointA, radiusA, normal);\n matrix.combine2Vec2(cB, 1, pointB, -radiusB, normal);\n matrix.combine2Vec2(points[0], 0.5, cA, 0.5, cB);\n separations[0] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.localNormal);\n matrix.transformVec2(planePoint, xfA, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfB, manifoldPoint.localPoint);\n matrix.combine2Vec2(cA, 1, clipPoint, radiusA - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cB, 1, clipPoint, -radiusB, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n }\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.localNormal);\n matrix.transformVec2(planePoint, xfB, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfA, manifoldPoint.localPoint);\n matrix.combine2Vec2(cB, 1, clipPoint, radiusB - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cA, 1, clipPoint, -radiusA, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cA, cB), normal);\n }\n // Ensure normal points from A to B.\n matrix.negVec2(normal);\n break;\n }\n }\n\n return wm;\n }\n\n static clipSegmentToLine = clipSegmentToLine;\n static ClipVertex = ClipVertex;\n static getPointStates = getPointStates;\n static PointState = PointState;\n}\n\n/**\n * A manifold point is a contact point belonging to a contact manifold. It holds\n * details related to the geometry and dynamics of the contact points.\n *\n * This structure is stored across time steps, so we keep it small.\n *\n * Note: impulses are used for internal caching and may not provide reliable\n * contact forces, especially for high speed collisions.\n */\nexport class ManifoldPoint {\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleB\n * - faceA: the local center of circleB or the clip point of polygonB\n * - faceB: the clip point of polygonA\n */\n localPoint = matrix.vec2(0, 0);\n /**\n * The non-penetration impulse\n */\n normalImpulse = 0;\n /**\n * The friction impulse\n */\n tangentImpulse = 0;\n /**\n * Uniquely identifies a contact point between two shapes to facilitate warm starting\n */\n readonly id = new ContactID();\n\n set(that: ManifoldPoint): void {\n matrix.copyVec2(this.localPoint, that.localPoint);\n this.normalImpulse = that.normalImpulse;\n this.tangentImpulse = that.tangentImpulse;\n this.id.set(that.id);\n }\n\n recycle(): void {\n matrix.zeroVec2(this.localPoint);\n this.normalImpulse = 0;\n this.tangentImpulse = 0;\n this.id.recycle();\n }\n}\n\n/**\n * Contact ids to facilitate warm starting.\n * \n * ContactFeature: The features that intersect to form the contact point.\n */\nexport class ContactID {\n\n /**\n * Used to quickly compare contact ids.\n */\n key = -1;\n\n /** ContactFeature index on shapeA */\n indexA = -1;\n\n /** ContactFeature index on shapeB */\n indexB = -1;\n\n /** ContactFeature type on shapeA */\n typeA = ContactFeatureType.e_unset;\n\n /** ContactFeature type on shapeB */\n typeB = ContactFeatureType.e_unset;\n\n setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void {\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\n set(that: ContactID): void {\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\n swapFeatures(): void {\n const indexA = this.indexA;\n const indexB = this.indexB;\n const typeA = this.typeA;\n const 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\n recycle(): void {\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}\n\n/**\n * This is used to compute the current state of a contact manifold.\n */\nexport class WorldManifold {\n /** World vector pointing from A to B */\n normal = matrix.vec2(0, 0);\n\n /** World contact point (point of intersection) */\n points = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints]\n\n /** A negative value indicates overlap, in meters */\n separations = [0, 0]; // [maxManifoldPoints]\n\n /** The number of manifold points */\n pointCount = 0;\n\n recycle() {\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.points[0]);\n matrix.zeroVec2(this.points[1]);\n this.separations[0] = 0;\n this.separations[1] = 0;\n this.pointCount = 0;\n }\n}\n\n/**\n * Compute the point states given two manifolds. The states pertain to the\n * transition from manifold1 to manifold2. So state1 is either persist or remove\n * while state2 is either add or persist.\n */\nexport function getPointStates(\n state1: PointState[],\n state2: PointState[],\n manifold1: Manifold,\n manifold2: Manifold\n): void {\n // state1, state2: PointState[Settings.maxManifoldPoints]\n\n // for (var i = 0; i < Settings.maxManifoldPoints; ++i) {\n // state1[i] = PointState.nullState;\n // state2[i] = PointState.nullState;\n // }\n\n // Detect persists and removes.\n for (let i = 0; i < manifold1.pointCount; ++i) {\n const id = manifold1.points[i].id;\n\n state1[i] = PointState.removeState;\n\n for (let 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\n // Detect persists and adds.\n for (let i = 0; i < manifold2.pointCount; ++i) {\n const id = manifold2.points[i].id;\n\n state2[i] = PointState.addState;\n\n for (let 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}\n\n/**\n * Clipping for contact manifolds. Sutherland-Hodgman clipping.\n */\nexport function clipSegmentToLine(\n vOut: ClipVertex[],\n vIn: ClipVertex[],\n normal: Vec2Value,\n offset: number,\n vertexIndexA: number\n): number {\n // Start with no output points\n let numOut = 0;\n\n // Calculate the distance of end points to the line\n const distance0 = matrix.dotVec2(normal, vIn[0].v) - offset;\n const distance1 = matrix.dotVec2(normal, vIn[1].v) - offset;\n\n // If the points are behind the plane\n if (distance0 <= 0.0)\n vOut[numOut++].set(vIn[0]);\n if (distance1 <= 0.0)\n vOut[numOut++].set(vIn[1]);\n\n // If the points are on different sides of the plane\n if (distance0 * distance1 < 0.0) {\n // Find intersection point of edge and plane\n const interp = distance0 / (distance0 - distance1);\n matrix.combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v);\n\n // VertexA is hitting edgeB.\n vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face);\n ++numOut;\n }\n\n return numOut;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { ShapeType } from \"../collision/Shape\";\nimport { clamp } from \"../common/Math\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Mat22 } from \"../common/Mat22\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Manifold, ManifoldType, WorldManifold } from \"../collision/Manifold\";\nimport { testOverlap } from \"../collision/Distance\";\nimport { Fixture } from \"./Fixture\";\nimport { Body } from \"./Body\";\nimport { ContactImpulse, TimeStep } from \"./Solver\";\nimport { Pool } from \"../util/Pool\";\nimport { getTransform } from \"./Position\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n// Solver debugging is normally disabled because the block solver sometimes has to deal with a poorly conditioned effective mass matrix.\n/** @internal */ const DEBUG_SOLVER = false;\n\n/** @internal */ const contactPool = new Pool({\n create() {\n return new Contact();\n },\n release(contact: Contact) {\n contact.recycle();\n }\n});\n\n/** @internal */ const oldManifold = new Manifold();\n\n/** @internal */ const worldManifold = new WorldManifold();\n\n/**\n * A contact edge is used to connect bodies and contacts together in a contact\n * graph where each body is a node and each contact is an edge. A contact edge\n * belongs to a doubly linked list maintained in each attached body. Each\n * contact has two contact nodes, one for each attached body.\n */\nexport class ContactEdge {\n contact: Contact;\n prev: ContactEdge | null = null;\n next: ContactEdge | null = null;\n other: Body | null = null;\n constructor(contact: Contact) {\n this.contact = contact;\n }\n\n /** @internal */\n recycle() {\n this.prev = null;\n this.next = null;\n this.other = null;\n }\n}\n\nexport type EvaluateFunction = (\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number\n) => void;\n\n/**\n * Friction mixing law. The idea is to allow either fixture to drive the\n * friction to zero. For example, anything slides on ice.\n */\nexport function mixFriction(friction1: number, friction2: number): number {\n return math_sqrt(friction1 * friction2);\n}\n\n/**\n * Restitution mixing law. The idea is allow for anything to bounce off an\n * inelastic surface. For example, a superball bounces on anything.\n */\nexport function mixRestitution(restitution1: number, restitution2: number): number {\n return restitution1 > restitution2 ? restitution1 : restitution2;\n}\n\n// TODO: move this to Settings?\n/** @internal */ const s_registers = [];\n\n// TODO: merge with ManifoldPoint?\nexport class VelocityConstraintPoint {\n rA = matrix.vec2(0, 0);\n rB = matrix.vec2(0, 0);\n normalImpulse = 0;\n tangentImpulse = 0;\n normalMass = 0;\n tangentMass = 0;\n velocityBias = 0;\n\n recycle() {\n matrix.zeroVec2(this.rA);\n matrix.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}\n\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const vA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const vB = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const rA = matrix.vec2(0, 0);\n/** @internal */ const rB = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const point = matrix.vec2(0, 0);\n/** @internal */ const dv = matrix.vec2(0, 0);\n/** @internal */ const dv1 = matrix.vec2(0, 0);\n/** @internal */ const dv2 = matrix.vec2(0, 0);\n/** @internal */ const b = matrix.vec2(0, 0);\n/** @internal */ const a = matrix.vec2(0, 0);\n/** @internal */ const x = matrix.vec2(0, 0);\n/** @internal */ const d = matrix.vec2(0, 0);\n/** @internal */ const P1 = matrix.vec2(0, 0);\n/** @internal */ const P2 = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * The class manages contact between two shapes. A contact exists for each\n * overlapping AABB in the broad-phase (except if filtered). Therefore a contact\n * object may exist that has no contact points.\n */\nexport class Contact {\n // Nodes for connecting bodies.\n /** @internal */ m_nodeA = new ContactEdge(this);\n /** @internal */ m_nodeB = new ContactEdge(this);\n /** @internal */ m_fixtureA: Fixture | null = null;\n /** @internal */ m_fixtureB: Fixture | null = null;\n /** @internal */ m_indexA = -1;\n /** @internal */ m_indexB = -1;\n /** @internal */ m_evaluateFcn: EvaluateFunction | null = null;\n /** @internal */ m_manifold: Manifold = new Manifold();\n /** @internal */ m_prev: Contact | null = null;\n /** @internal */ m_next: Contact | null = null;\n /** @internal */ m_toi = 1.0;\n /** @internal */ m_toiCount = 0;\n // This contact has a valid TOI in m_toi\n /** @internal */ m_toiFlag = false;\n /** @internal */ m_friction = 0.0;\n /** @internal */ m_restitution = 0.0;\n /** @internal */ m_tangentSpeed = 0.0;\n /** @internal This contact can be disabled (by user) */\n m_enabledFlag = true;\n /** @internal Used when crawling contact graph when forming islands. */\n m_islandFlag = false;\n /** @internal Set when the shapes are touching. */\n m_touchingFlag = false;\n /** @internal This contact needs filtering because a fixture filter was changed. */\n m_filterFlag = false;\n /** @internal This bullet contact had a TOI event */\n m_bulletHitFlag = false;\n\n /** @internal Contact reporting impulse object cache */\n m_impulse: ContactImpulse = new ContactImpulse(this);\n\n // VelocityConstraint\n /** @internal */ v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; // [maxManifoldPoints];\n /** @internal */ v_normal = matrix.vec2(0, 0);\n /** @internal */ v_normalMass: Mat22 = new Mat22();\n /** @internal */ v_K: Mat22 = new Mat22();\n /** @internal */ v_pointCount = 0;\n /** @internal */ v_tangentSpeed = 0;\n /** @internal */ v_friction = 0;\n /** @internal */ v_restitution = 0;\n /** @internal */ v_invMassA = 0;\n /** @internal */ v_invMassB = 0;\n /** @internal */ v_invIA = 0;\n /** @internal */ v_invIB = 0;\n\n // PositionConstraint\n /** @internal */ p_localPoints = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints];\n /** @internal */ p_localNormal = matrix.vec2(0, 0);\n /** @internal */ p_localPoint = matrix.vec2(0, 0);\n /** @internal */ p_localCenterA = matrix.vec2(0, 0);\n /** @internal */ p_localCenterB = matrix.vec2(0, 0);\n /** @internal */ p_type = ManifoldType.e_unset;\n /** @internal */ p_radiusA = 0;\n /** @internal */ p_radiusB = 0;\n /** @internal */ p_pointCount = 0;\n /** @internal */ p_invMassA = 0;\n /** @internal */ p_invMassB = 0;\n /** @internal */ p_invIA = 0;\n /** @internal */ p_invIB = 0;\n\n /** @internal */ \n initialize(fA: Fixture, indexA: number, fB: Fixture, indexB: number, evaluateFcn: EvaluateFunction) {\n this.m_fixtureA = fA;\n this.m_fixtureB = fB;\n\n this.m_indexA = indexA;\n this.m_indexB = indexB;\n\n this.m_evaluateFcn = evaluateFcn;\n\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\n /** @internal */ \n recycle() {\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\n this.m_impulse.recycle();\n\n // VelocityConstraint\n for(const point of this.v_points) {\n point.recycle();\n }\n matrix.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\n // PositionConstraint\n for(const point of this.p_localPoints) {\n matrix.zeroVec2(point);\n }\n matrix.zeroVec2(this.p_localNormal);\n matrix.zeroVec2(this.p_localPoint);\n matrix.zeroVec2(this.p_localCenterA);\n matrix.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\n initConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n const manifold = this.m_manifold;\n\n const pointCount = manifold.pointCount;\n _ASSERT && console.assert(pointCount > 0);\n\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\n this.v_friction = this.m_friction;\n this.v_restitution = this.m_restitution;\n this.v_tangentSpeed = this.m_tangentSpeed;\n\n this.v_pointCount = pointCount;\n\n this.v_K.setZero();\n this.v_normalMass.setZero();\n\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 matrix.copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter);\n matrix.copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter);\n\n this.p_radiusA = shapeA.m_radius;\n this.p_radiusB = shapeB.m_radius;\n\n this.p_type = manifold.type;\n matrix.copyVec2(this.p_localNormal, manifold.localNormal);\n matrix.copyVec2(this.p_localPoint, manifold.localPoint);\n this.p_pointCount = pointCount;\n\n for (let j = 0; j < Settings.maxManifoldPoints; ++j) {\n this.v_points[j].recycle();\n matrix.zeroVec2(this.p_localPoints[j]);\n }\n\n for (let j = 0; j < pointCount; ++j) {\n const cp = manifold.points[j];\n const 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 matrix.copyVec2(this.p_localPoints[j], cp.localPoint);\n }\n }\n\n /**\n * Get the contact manifold. Do not modify the manifold unless you understand\n * the internals of the library.\n */\n getManifold(): Manifold {\n return this.m_manifold;\n }\n\n /**\n * Get the world manifold.\n */\n getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n return this.m_manifold.getWorldManifold(\n worldManifold,\n bodyA.getTransform(), shapeA.m_radius,\n bodyB.getTransform(), shapeB.m_radius\n );\n }\n\n /**\n * Enable/disable this contact. This can be used inside the pre-solve contact\n * listener. The contact is only disabled for the current time step (or sub-step\n * in continuous collisions).\n */\n setEnabled(flag: boolean): void {\n this.m_enabledFlag = !!flag;\n }\n\n /**\n * Has this contact been disabled?\n */\n isEnabled(): boolean {\n return this.m_enabledFlag;\n }\n\n /**\n * Is this contact touching?\n */\n isTouching(): boolean {\n return this.m_touchingFlag;\n }\n\n /**\n * Get the next contact in the world's contact list.\n */\n getNext(): Contact | null {\n return this.m_next;\n }\n\n /**\n * Get fixture A in this contact.\n */\n getFixtureA(): Fixture {\n return this.m_fixtureA;\n }\n\n /**\n * Get fixture B in this contact.\n */\n getFixtureB(): Fixture {\n return this.m_fixtureB;\n }\n\n /**\n * Get the child primitive index for fixture A.\n */\n getChildIndexA(): number {\n return this.m_indexA;\n }\n\n /**\n * Get the child primitive index for fixture B.\n */\n getChildIndexB(): number {\n return this.m_indexB;\n }\n\n /**\n * Flag this contact for filtering. Filtering will occur the next time step.\n */\n flagForFiltering(): void {\n this.m_filterFlag = true;\n }\n\n /**\n * Override the default friction mixture. You can call this in\n * \"pre-solve\" callback. This value persists until set or reset.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the friction.\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Reset the friction mixture to the default value.\n */\n resetFriction(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction);\n }\n\n /**\n * Override the default restitution mixture. You can call this in\n * \"pre-solve\" callback. The value persists until you set or reset.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Get the restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Reset the restitution to the default value.\n */\n resetRestitution(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution);\n }\n\n /**\n * Set the desired tangent speed for a conveyor belt behavior. In meters per\n * second.\n */\n setTangentSpeed(speed: number): void {\n this.m_tangentSpeed = speed;\n }\n\n /**\n * Get the desired tangent speed. In meters per second.\n */\n getTangentSpeed(): number {\n return this.m_tangentSpeed;\n }\n\n /**\n * Called by Update method, and implemented by subclasses.\n */\n evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_evaluateFcn(manifold, xfA, fixtureA, this.m_indexA, xfB, fixtureB, this.m_indexB);\n }\n\n /**\n * Updates the contact manifold and touching status.\n *\n * Note: do not assume the fixture AABBs are overlapping or are valid.\n *\n * @param listener.beginContact\n * @param listener.endContact\n * @param listener.preSolve\n */\n update(listener?: {\n beginContact(contact: Contact): void,\n endContact(contact: Contact): void,\n preSolve(contact: Contact, oldManifold: Manifold): void\n }): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n // Re-enable this contact.\n this.m_enabledFlag = true;\n\n let touching = false;\n const wasTouching = this.m_touchingFlag;\n\n const sensorA = fixtureA.m_isSensor;\n const sensorB = fixtureB.m_isSensor;\n const sensor = sensorA || sensorB;\n\n const xfA = bodyA.m_xf;\n const xfB = bodyB.m_xf;\n\n // Is this contact a sensor?\n if (sensor) {\n touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB);\n\n // Sensors don't generate manifolds.\n this.m_manifold.pointCount = 0;\n } else {\n\n oldManifold.recycle();\n oldManifold.set(this.m_manifold);\n this.m_manifold.recycle();\n\n this.evaluate(this.m_manifold, xfA, xfB);\n touching = this.m_manifold.pointCount > 0;\n\n // Match old contact ids to new contact ids and copy the\n // stored impulses to warm start the solver.\n for (let i = 0; i < this.m_manifold.pointCount; ++i) {\n const nmp = this.m_manifold.points[i];\n nmp.normalImpulse = 0.0;\n nmp.tangentImpulse = 0.0;\n\n for (let j = 0; j < oldManifold.pointCount; ++j) {\n const 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\n if (touching !== wasTouching) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n }\n\n this.m_touchingFlag = touching;\n\n const hasListener = typeof listener === \"object\" && listener !== null;\n\n if (!wasTouching && touching && hasListener) {\n listener.beginContact(this);\n }\n\n if (wasTouching && !touching && hasListener) {\n listener.endContact(this);\n }\n\n if (!sensor && touching && hasListener && oldManifold) {\n listener.preSolve(this, oldManifold);\n }\n }\n\n solvePositionConstraint(step: TimeStep): number {\n return this._solvePositionConstraint(step, null, null);\n }\n\n solvePositionConstraintTOI(step: TimeStep, toiA: Body, toiB: Body): number {\n return this._solvePositionConstraint(step, toiA, toiB);\n }\n\n private _solvePositionConstraint(step: TimeStep, toiA: Body | null, toiB: Body | null): number {\n const toi = toiA !== null && toiB !== null ? true : false;\n let minSeparation = 0.0;\n\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return minSeparation;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return minSeparation;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n let mA = 0.0;\n let iA = 0.0;\n if (!toi || (bodyA === toiA || bodyA === toiB)) {\n mA = this.p_invMassA;\n iA = this.p_invIA;\n }\n\n let mB = 0.0;\n let iB = 0.0;\n if (!toi || (bodyB === toiA || bodyB === toiB)) {\n mB = this.p_invMassB;\n iB = this.p_invIB;\n }\n\n matrix.copyVec2(cA, positionA.c);\n let aA = positionA.a;\n\n matrix.copyVec2(cB, positionB.c);\n let aB = positionB.a;\n\n // Solve normal constraints\n for (let j = 0; j < this.p_pointCount; ++j) {\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n // PositionSolverManifold\n let separation: number;\n switch (this.p_type) {\n case ManifoldType.e_circles: {\n matrix.transformVec2(pointA, xfA, this.p_localPoint);\n matrix.transformVec2(pointB, xfB, this.p_localPoints[0]);\n matrix.subVec2(normal, pointB, pointA);\n matrix.normalizeVec2(normal);\n\n matrix.combine2Vec2(point, 0.5, pointA, 0.5, pointB);\n separation = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal) - this.p_radiusA - this.p_radiusB;\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfA, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfB, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfB, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfA, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n\n // Ensure normal points from A to B\n matrix.negVec2(normal);\n break;\n }\n // todo: what should we do here?\n default: {\n return minSeparation;\n }\n }\n\n matrix.subVec2(rA, point, cA);\n matrix.subVec2(rB, point, cB);\n\n // Track max constraint error.\n minSeparation = math_min(minSeparation, separation);\n\n const baumgarte = toi ? Settings.toiBaugarte : Settings.baumgarte;\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n // Prevent large corrections and allow slop.\n const C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0.0);\n\n // Compute the effective mass.\n const rnA = matrix.crossVec2Vec2(rA, normal);\n const rnB = matrix.crossVec2Vec2(rB, normal);\n const K = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n // Compute normal impulse\n const impulse = K > 0.0 ? -C / K : 0.0;\n\n matrix.scaleVec2(P, impulse, normal);\n\n matrix.minusScaleVec2(cA, mA, P);\n aA -= iA * matrix.crossVec2Vec2(rA, P);\n\n matrix.plusScaleVec2(cB, mB, P);\n aB += iB * matrix.crossVec2Vec2(rB, P);\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n\n return minSeparation;\n }\n\n initVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const radiusA = this.p_radiusA;\n const radiusB = this.p_radiusB;\n const manifold = this.m_manifold;\n\n const mA = this.v_invMassA;\n const mB = this.v_invMassB;\n const iA = this.v_invIA;\n const iB = this.v_invIB;\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n matrix.copyVec2(cA, positionA.c);\n const aA = positionA.a;\n matrix.copyVec2(vA, velocityA.v);\n const wA = velocityA.w;\n\n matrix.copyVec2(cB, positionB.c);\n const aB = positionB.a;\n matrix.copyVec2(vB, velocityB.v);\n const wB = velocityB.w;\n\n _ASSERT && console.assert(manifold.pointCount > 0);\n\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n worldManifold.recycle();\n manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB);\n\n matrix.copyVec2(this.v_normal, worldManifold.normal);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n const wmp = worldManifold.points[j];\n\n matrix.subVec2(vcp.rA, wmp, cA);\n matrix.subVec2(vcp.rB, wmp, cB);\n\n const rnA = matrix.crossVec2Vec2(vcp.rA, this.v_normal);\n const rnB = matrix.crossVec2Vec2(vcp.rB, this.v_normal);\n\n const kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n vcp.normalMass = kNormal > 0.0 ? 1.0 / kNormal : 0.0;\n\n matrix.crossVec2Num(tangent, this.v_normal, 1.0);\n\n const rtA = matrix.crossVec2Vec2(vcp.rA, tangent);\n const rtB = matrix.crossVec2Vec2(vcp.rB, tangent);\n\n const kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB;\n\n vcp.tangentMass = kTangent > 0.0 ? 1.0 / kTangent : 0.0;\n\n // Setup a velocity bias for restitution.\n vcp.velocityBias = 0.0;\n let vRel = 0;\n vRel += matrix.dotVec2(this.v_normal, vB);\n vRel += matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wB, vcp.rB));\n vRel -= matrix.dotVec2(this.v_normal, vA);\n vRel -= matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wA, vcp.rA));\n if (vRel < -Settings.velocityThreshold) {\n vcp.velocityBias = -this.v_restitution * vRel;\n }\n }\n\n // If we have two points, then prepare the block solver.\n if (this.v_pointCount == 2 && step.blockSolve) {\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n const rn1A = matrix.crossVec2Vec2(vcp1.rA, this.v_normal);\n const rn1B = matrix.crossVec2Vec2(vcp1.rB, this.v_normal);\n const rn2A = matrix.crossVec2Vec2(vcp2.rA, this.v_normal);\n const rn2B = matrix.crossVec2Vec2(vcp2.rB, this.v_normal);\n\n const k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B;\n const k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B;\n const k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B;\n\n // Ensure a reasonable condition number.\n const k_maxConditionNumber = 1000.0;\n if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) {\n // K is safe to invert.\n this.v_K.ex.setNum(k11, k12);\n this.v_K.ey.setNum(k12, k22);\n // this.v_normalMass.set(this.v_K.getInverse());\n const a = this.v_K.ex.x;\n const b = this.v_K.ey.x;\n const c = this.v_K.ex.y;\n const d = this.v_K.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n this.v_normalMass.ex.x = det * d;\n this.v_normalMass.ey.x = -det * b;\n this.v_normalMass.ex.y = -det * c;\n this.v_normalMass.ey.y = det * a;\n\n } else {\n // The constraints are redundant, just use one.\n // TODO_ERIN use deepest?\n this.v_pointCount = 1;\n }\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n warmStartConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n matrix.combine2Vec2(P, vcp.normalImpulse, normal, vcp.tangentImpulse, tangent);\n\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n matrix.minusScaleVec2(vA, mA, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n matrix.plusScaleVec2(vB, mB, P);\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n storeConstraintImpulses(step: TimeStep): void {\n const manifold = this.m_manifold;\n for (let 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\n solveVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const positionA = bodyA.c_position;\n\n const velocityB = bodyB.c_velocity;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n const friction = this.v_friction;\n\n _ASSERT && console.assert(this.v_pointCount == 1 || this.v_pointCount == 2);\n\n // Solve tangent constraints first because non-penetration is more important\n // than friction.\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute tangent force\n const vt = matrix.dotVec2(dv, tangent) - this.v_tangentSpeed;\n let lambda = vcp.tangentMass * (-vt);\n\n // Clamp the accumulated force\n const maxFriction = friction * vcp.normalImpulse;\n const newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction);\n lambda = newImpulse - vcp.tangentImpulse;\n vcp.tangentImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, tangent);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n\n // Solve normal constraints\n if (this.v_pointCount == 1 || step.blockSolve == false) {\n for (let i = 0; i < this.v_pointCount; ++i) {\n const vcp = this.v_points[i]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute normal impulse\n const vn = matrix.dotVec2(dv, normal);\n let lambda = -vcp.normalMass * (vn - vcp.velocityBias);\n\n // Clamp the accumulated impulse\n const newImpulse = math_max(vcp.normalImpulse + lambda, 0.0);\n lambda = newImpulse - vcp.normalImpulse;\n vcp.normalImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, normal);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n } else {\n // Block solver developed in collaboration with Dirk Gregorius (back in\n // 01/07 on Box2D_Lite).\n // Build the mini LCP for this contact patch\n //\n // vn = A * x + b, vn >= 0, x >= 0 and vn_i * x_i = 0 with i = 1..2\n //\n // A = J * W * JT and J = ( -n, -r1 x n, n, r2 x n )\n // b = vn0 - velocityBias\n //\n // The system is solved using the \"Total enumeration method\" (s. Murty).\n // The complementary constraint vn_i * x_i\n // implies that we must have in any solution either vn_i = 0 or x_i = 0.\n // So for the 2D contact problem the cases\n // vn1 = 0 and vn2 = 0, x1 = 0 and x2 = 0, x1 = 0 and vn2 = 0, x2 = 0 and\n // vn1 = 0 need to be tested. The first valid\n // solution that satisfies the problem is chosen.\n //\n // In order to account of the accumulated impulse 'a' (because of the\n // iterative nature of the solver which only requires\n // that the accumulated impulse is clamped and not the incremental\n // impulse) we change the impulse variable (x_i).\n //\n // Substitute:\n //\n // x = a + d\n //\n // a := old total impulse\n // x := new total impulse\n // d := incremental impulse\n //\n // For the current iteration we extend the formula for the incremental\n // impulse\n // to compute the new total impulse:\n //\n // vn = A * d + b\n // = A * (x - a) + b\n // = A * x + b - A * a\n // = A * x + b'\n // b' = b - A * a;\n\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n matrix.setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse);\n _ASSERT && console.assert(a.x >= 0.0 && a.y >= 0.0);\n\n // Relative velocity at contact\n // let dv1 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp1.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp1.rA));\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // let dv2 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp2.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp2.rA));\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n let vn1 = matrix.dotVec2(dv1, normal);\n let vn2 = matrix.dotVec2(dv2, normal);\n\n matrix.setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias);\n\n // Compute b'\n // b.sub(Mat22.mulVec2(this.v_K, a));\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\n const k_errorTol = 1e-3;\n // NOT_USED(k_errorTol);\n\n while (true) {\n //\n // Case 1: vn = 0\n //\n // 0 = A * x + b'\n //\n // Solve for x:\n //\n // x = - inv(A) * b'\n //\n // const x = Mat22.mulVec2(this.v_normalMass, b).neg();\n matrix.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\n if (x.x >= 0.0 && x.y >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 2: vn1 = 0 and x2 = 0\n //\n // 0 = a11 * x1 + a12 * 0 + b1'\n // vn2 = a21 * x1 + a22 * 0 + b2'\n //\n x.x = -vcp1.normalMass * b.x;\n x.y = 0.0;\n vn1 = 0.0;\n vn2 = this.v_K.ex.y * x.x + b.y;\n\n if (x.x >= 0.0 && vn2 >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 3: vn2 = 0 and x1 = 0\n //\n // vn1 = a11 * 0 + a12 * x2 + b1'\n // 0 = a21 * 0 + a22 * x2 + b2'\n //\n x.x = 0.0;\n x.y = -vcp2.normalMass * b.y;\n vn1 = this.v_K.ey.x * x.y + b.x;\n vn2 = 0.0;\n\n if (x.y >= 0.0 && vn1 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 4: x1 = 0 and x2 = 0\n //\n // vn1 = b1\n // vn2 = b2;\n //\n x.x = 0.0;\n x.y = 0.0;\n vn1 = b.x;\n vn2 = b.y;\n\n if (vn1 >= 0.0 && vn2 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n break;\n }\n\n // No solution, give up. This is hit sometimes, but it doesn't seem to\n // matter.\n break;\n }\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n /** @internal */\n static addType(type1: ShapeType, type2: ShapeType, callback: EvaluateFunction): void {\n s_registers[type1] = s_registers[type1] || {};\n s_registers[type1][type2] = callback;\n }\n\n /** @internal */\n static create(fixtureA: Fixture, indexA: number, fixtureB: Fixture, indexB: number): Contact | null {\n const typeA = fixtureA.m_shape.m_type;\n const typeB = fixtureB.m_shape.m_type;\n\n const contact = contactPool.allocate();\n let 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\n // Contact creation may swap fixtures.\n fixtureA = contact.m_fixtureA;\n fixtureB = contact.m_fixtureB;\n indexA = contact.getChildIndexA();\n indexB = contact.getChildIndexB();\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n\n // Connect to body A\n contact.m_nodeA.contact = contact;\n contact.m_nodeA.other = bodyB;\n\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\n // Connect to body B\n contact.m_nodeB.contact = contact;\n contact.m_nodeB.other = bodyA;\n\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\n // Wake up the bodies\n if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n return contact;\n }\n\n /** @internal */\n static destroy(contact: Contact, listener: { endContact: (contact: Contact) => void }): void {\n const fixtureA = contact.m_fixtureA;\n const fixtureB = contact.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n if (contact.isTouching()) {\n listener.endContact(contact);\n }\n\n // Remove from body 1\n if (contact.m_nodeA.prev) {\n contact.m_nodeA.prev.next = contact.m_nodeA.next;\n }\n\n if (contact.m_nodeA.next) {\n contact.m_nodeA.next.prev = contact.m_nodeA.prev;\n }\n\n if (contact.m_nodeA == bodyA.m_contactList) {\n bodyA.m_contactList = contact.m_nodeA.next;\n }\n\n // Remove from body 2\n if (contact.m_nodeB.prev) {\n contact.m_nodeB.prev.next = contact.m_nodeB.next;\n }\n\n if (contact.m_nodeB.next) {\n contact.m_nodeB.next.prev = contact.m_nodeB.prev;\n }\n\n if (contact.m_nodeB == bodyB.m_contactList) {\n bodyB.m_contactList = contact.m_nodeB.next;\n }\n\n if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n // const typeA = fixtureA.getType();\n // const typeB = fixtureB.getType();\n\n // const destroyFcn = s_registers[typeA][typeB].destroyFcn;\n // if (typeof destroyFcn === 'function') {\n // destroyFcn(contact);\n // }\n\n contactPool.release(contact);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { Solver, ContactImpulse, TimeStep } from \"./Solver\";\nimport { Body, BodyDef } from \"./Body\";\nimport { Joint } from \"./Joint\";\nimport { Contact } from \"./Contact\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Fixture, FixtureProxy } from \"./Fixture\";\nimport { Manifold } from \"../collision/Manifold\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface WorldDef {\n /** [default: { x : 0, y : 0}] */\n gravity?: Vec2Value;\n\n /** [default: true] */\n allowSleep?: boolean;\n\n /** [default: true] */\n warmStarting?: boolean;\n\n /** [default: true] */\n continuousPhysics?: boolean;\n\n /** [default: false] */\n subStepping?: boolean;\n\n /** [default: true] */\n blockSolve?: boolean;\n\n /** @internal [8] For the velocity constraint solver. */\n velocityIterations?: number;\n\n /** @internal [3] For the position constraint solver. */\n positionIterations?: number;\n}\n\n/** @internal */ const DEFAULTS: WorldDef = {\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};\n\n/**\n * Callback function for ray casts, see {@link World.rayCast}.\n *\n * Called for each fixture found in the query.\n * The returned value replaces the ray-cast input maxFraction.\n * You control how the ray cast proceeds by returning a numeric/float value.\n * \n * - `0` to terminate the ray cast\n * - `fraction` to clip the ray cast at current point\n * - `1` don't clip the ray and continue\n * - `-1` (or anything else) to continue\n *\n * @param fixture The fixture hit by the ray\n * @param point The point of initial intersection\n * @param normal The normal vector at the point of intersection\n * @param fraction The fraction along the ray at the point of intersection\n *\n * @returns A number to update the maxFraction\n */\nexport type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number;\n\n/**\n * Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\nexport type WorldAABBQueryCallback = (fixture: Fixture) => boolean;\n\nexport class World {\n /** @internal */ m_solver: Solver;\n /** @internal */ m_broadPhase: BroadPhase;\n /** @internal */ m_contactList: Contact | null;\n /** @internal */ m_contactCount: number;\n /** @internal */ m_bodyList: Body | null;\n /** @internal */ m_bodyCount: number;\n /** @internal */ m_jointList: Joint | null;\n /** @internal */ m_jointCount: number;\n /** @internal */ m_stepComplete: boolean;\n /** @internal */ m_allowSleep: boolean;\n /** @internal */ m_gravity: Vec2;\n /** @internal */ m_clearForces: boolean;\n /** @internal */ m_newFixture: boolean;\n /** @internal */ m_locked: boolean;\n /** @internal */ m_warmStarting: boolean;\n /** @internal */ m_continuousPhysics: boolean;\n /** @internal */ m_subStepping: boolean;\n /** @internal */ m_blockSolve: boolean;\n /** @internal */ m_velocityIterations: number;\n /** @internal */ m_positionIterations: number;\n /** @internal */ m_t: number;\n\n // TODO\n /** @internal */ _listeners: {\n [key: string]: any[]\n };\n\n /**\n * @param def World definition or gravity vector.\n */\n constructor(def?: WorldDef | Vec2 | null) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof World)) {\n return new World(def);\n }\n\n this.s_step = new TimeStep();\n\n\n if (!def) {\n def = {};\n } else if (Vec2.isValid(def)) {\n def = { gravity: def as Vec2 };\n }\n\n def = options(def, DEFAULTS) as WorldDef;\n\n this.m_solver = new Solver(this);\n\n this.m_broadPhase = new BroadPhase();\n\n this.m_contactList = null;\n this.m_contactCount = 0;\n\n this.m_bodyList = null;\n this.m_bodyCount = 0;\n\n this.m_jointList = null;\n this.m_jointCount = 0;\n\n this.m_stepComplete = true;\n\n this.m_allowSleep = def.allowSleep;\n this.m_gravity = Vec2.clone(def.gravity);\n\n this.m_clearForces = true;\n this.m_newFixture = false;\n this.m_locked = false;\n\n // These are for debugging the solver.\n this.m_warmStarting = def.warmStarting;\n this.m_continuousPhysics = def.continuousPhysics;\n this.m_subStepping = def.subStepping;\n\n this.m_blockSolve = def.blockSolve;\n this.m_velocityIterations = def.velocityIterations;\n this.m_positionIterations = def.positionIterations;\n\n this.m_t = 0;\n }\n\n /** @internal */\n _serialize(): object {\n const bodies = [];\n const joints = [];\n\n for (let b = this.getBodyList(); b; b = b.getNext()) {\n bodies.push(b);\n }\n\n for (let j = this.getJointList(); j; j = j.getNext()) {\n // @ts-ignore\n if (typeof j._serialize === \"function\") {\n joints.push(j);\n }\n }\n\n return {\n gravity: this.m_gravity,\n bodies,\n joints,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, context: any, restore: any): World {\n if (!data) {\n return new World();\n }\n\n const world = new World(data.gravity);\n\n if (data.bodies) {\n for (let i = data.bodies.length - 1; i >= 0; i -= 1) {\n world._addBody(restore(Body, data.bodies[i], world));\n }\n }\n\n if (data.joints) {\n for (let i = data.joints.length - 1; i >= 0; i--) {\n world.createJoint(restore(Joint, data.joints[i], world));\n }\n }\n\n return world;\n }\n\n /**\n * Get the world body list. With the returned body, use Body.getNext to get the\n * next body in the world list. A null body indicates the end of the list.\n *\n * @return the head of the world body list.\n */\n getBodyList(): Body | null {\n return this.m_bodyList;\n }\n\n /**\n * Get the world joint list. With the returned joint, use Joint.getNext to get\n * the next joint in the world list. A null joint indicates the end of the list.\n *\n * @return the head of the world joint list.\n */\n getJointList(): Joint | null {\n return this.m_jointList;\n }\n\n /**\n * Get the world contact list. With the returned contact, use Contact.getNext to\n * get the next contact in the world list. A null contact indicates the end of\n * the list.\n *\n * Warning: contacts are created and destroyed in the middle of a time step.\n * Use ContactListener to avoid missing contacts.\n *\n * @return the head of the world contact list.\n */\n getContactList(): Contact | null {\n return this.m_contactList;\n }\n\n getBodyCount(): number {\n return this.m_bodyCount;\n }\n\n getJointCount(): number {\n return this.m_jointCount;\n }\n\n /**\n * Get the number of contacts (each may have 0 or more contact points).\n */\n getContactCount(): number {\n return this.m_contactCount;\n }\n\n /**\n * Change the global gravity vector.\n */\n setGravity(gravity: Vec2Value): void {\n this.m_gravity.set(gravity);\n }\n\n /**\n * Get the global gravity vector.\n */\n getGravity(): Vec2 {\n return this.m_gravity;\n }\n\n /**\n * Is the world locked (in the middle of a time step).\n */\n isLocked(): boolean {\n return this.m_locked;\n }\n\n /**\n * Enable/disable sleep.\n */\n setAllowSleeping(flag: boolean): void {\n if (flag == this.m_allowSleep) {\n return;\n }\n\n this.m_allowSleep = flag;\n if (this.m_allowSleep == false) {\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.setAwake(true);\n }\n }\n }\n\n getAllowSleeping(): boolean {\n return this.m_allowSleep;\n }\n\n /**\n * Enable/disable warm starting. For testing.\n */\n setWarmStarting(flag: boolean): void {\n this.m_warmStarting = flag;\n }\n\n getWarmStarting(): boolean {\n return this.m_warmStarting;\n }\n\n /**\n * Enable/disable continuous physics. For testing.\n */\n setContinuousPhysics(flag: boolean): void {\n this.m_continuousPhysics = flag;\n }\n\n getContinuousPhysics(): boolean {\n return this.m_continuousPhysics;\n }\n\n /**\n * Enable/disable single stepped continuous physics. For testing.\n */\n setSubStepping(flag: boolean): void {\n this.m_subStepping = flag;\n }\n\n getSubStepping(): boolean {\n return this.m_subStepping;\n }\n\n /**\n * Set flag to control automatic clearing of forces after each time step.\n */\n setAutoClearForces(flag: boolean): void {\n this.m_clearForces = flag;\n }\n\n /**\n * Get the flag that controls automatic clearing of forces after each time step.\n */\n getAutoClearForces(): boolean {\n return this.m_clearForces;\n }\n\n /**\n * Manually clear the force buffer on all bodies. By default, forces are cleared\n * automatically after each call to step. The default behavior is modified by\n * calling setAutoClearForces. The purpose of this function is to support\n * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step\n * under a variable frame-rate. When you perform sub-stepping you will disable\n * auto clearing of forces and instead call clearForces after all sub-steps are\n * complete in one pass of your game loop.\n *\n * See {@link World.setAutoClearForces}\n */\n clearForces(): void {\n for (let body = this.m_bodyList; body; body = body.getNext()) {\n body.m_force.setZero();\n body.m_torque = 0.0;\n }\n }\n\n /**\n * Query the world for all fixtures that potentially overlap the provided AABB.\n *\n * @param aabb The query box.\n * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\n queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n this.m_broadPhase.query(aabb, function(proxyId: number): boolean { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n return callback(proxy.fixture);\n });\n }\n\n /**\n * Ray-cast the world for all fixtures in the path of the ray. Your callback\n * controls whether you get the closest point, any point, or n-points. The\n * ray-cast ignores shapes that contain the starting point.\n *\n * @param point1 The ray starting point\n * @param point2 The ray ending point\n * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value.\n */\n rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n\n this.m_broadPhase.rayCast({\n maxFraction : 1.0,\n p1 : point1,\n p2 : point2\n }, function(input: RayCastInput, proxyId: number): number { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n const fixture = proxy.fixture;\n const index = proxy.childIndex;\n // @ts-ignore\n const output: RayCastOutput = {}; // TODO GC\n const hit = fixture.rayCast(output, input, index);\n if (hit) {\n const fraction = output.fraction;\n const point = Vec2.add(Vec2.mulNumVec2((1.0 - fraction), input.p1), Vec2.mulNumVec2(fraction, input.p2));\n return callback(fixture, point, output.normal, fraction);\n }\n return input.maxFraction;\n });\n }\n\n /**\n * Get the number of broad-phase proxies.\n */\n getProxyCount(): number {\n return this.m_broadPhase.getProxyCount();\n }\n\n /**\n * Get the height of broad-phase dynamic tree.\n */\n getTreeHeight(): number {\n return this.m_broadPhase.getTreeHeight();\n }\n\n /**\n * Get the balance of broad-phase dynamic tree.\n */\n getTreeBalance(): number {\n return this.m_broadPhase.getTreeBalance();\n }\n\n /**\n * Get the quality metric of broad-phase dynamic tree. The smaller the better.\n * The minimum is 1.\n */\n getTreeQuality(): number {\n return this.m_broadPhase.getTreeQuality();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The body shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n _ASSERT && console.assert(this.m_locked == false);\n if (this.m_locked) {\n return;\n }\n\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.m_xf.p.sub(newOrigin);\n b.m_sweep.c0.sub(newOrigin);\n b.m_sweep.c.sub(newOrigin);\n }\n\n for (let j = this.m_jointList; j; j = j.m_next) {\n j.shiftOrigin(newOrigin);\n }\n\n this.m_broadPhase.shiftOrigin(newOrigin);\n }\n\n /** @internal Used for deserialize. */\n _addBody(body: Body): void {\n _ASSERT && console.assert(this.isLocked() === false);\n if (this.isLocked()) {\n return;\n }\n\n // Add to world doubly linked list.\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\n /**\n * Create a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This function is locked during callbacks.\n */\n createBody(def?: BodyDef): Body;\n createBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createBody(arg1?, arg2?) {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n let def: BodyDef = {};\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\n const body = new Body(this, def);\n this._addBody(body);\n return body;\n }\n\n createDynamicBody(def?: BodyDef): Body;\n createDynamicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createDynamicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n createKinematicBody(def?: BodyDef): Body;\n createKinematicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createKinematicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n /**\n * Destroy a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This automatically deletes all associated shapes and joints.\n *\n * Warning: This function is locked during callbacks.\n */\n destroyBody(b: Body): boolean {\n _ASSERT && console.assert(this.m_bodyCount > 0);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n if (b.m_destroyed) {\n return false;\n }\n\n // Delete the attached joints.\n let je = b.m_jointList;\n while (je) {\n const je0 = je;\n je = je.next;\n\n this.publish(\"remove-joint\", je0.joint);\n this.destroyJoint(je0.joint);\n\n b.m_jointList = je;\n }\n b.m_jointList = null;\n\n // Delete the attached contacts.\n let ce = b.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n\n this.destroyContact(ce0.contact);\n\n b.m_contactList = ce;\n }\n b.m_contactList = null;\n\n // Delete the attached fixtures. This destroys broad-phase proxies.\n let f = b.m_fixtureList;\n while (f) {\n const f0 = f;\n f = f.m_next;\n\n this.publish(\"remove-fixture\", f0);\n f0.destroyProxies(this.m_broadPhase);\n\n b.m_fixtureList = f;\n }\n b.m_fixtureList = null;\n\n // Remove world body list.\n if (b.m_prev) {\n b.m_prev.m_next = b.m_next;\n }\n\n if (b.m_next) {\n b.m_next.m_prev = b.m_prev;\n }\n\n if (b == this.m_bodyList) {\n this.m_bodyList = b.m_next;\n }\n\n b.m_destroyed = true;\n\n --this.m_bodyCount;\n\n this.publish(\"remove-body\", b);\n\n return true;\n }\n\n /**\n * Create a joint to constrain bodies together. No reference to the definition\n * is retained. This may cause the connected bodies to cease colliding.\n *\n * Warning: This function is locked during callbacks.\n */\n createJoint(joint: T): T | null {\n _ASSERT && console.assert(!!joint.m_bodyA);\n _ASSERT && console.assert(!!joint.m_bodyB);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n // Connect to the world list.\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\n // Connect to the bodies' doubly linked lists.\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\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\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n for (let edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) {\n if (edge.other == joint.m_bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n }\n }\n\n // Note: creating a joint doesn't wake the bodies.\n\n return joint;\n }\n\n /**\n * Destroy a joint. This may cause the connected bodies to begin colliding.\n * Warning: This function is locked during callbacks.\n */\n destroyJoint(joint: Joint): void {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n // Remove from the doubly linked list.\n if (joint.m_prev) {\n joint.m_prev.m_next = joint.m_next;\n }\n\n if (joint.m_next) {\n joint.m_next.m_prev = joint.m_prev;\n }\n\n if (joint == this.m_jointList) {\n this.m_jointList = joint.m_next;\n }\n\n // Disconnect from bodies.\n const bodyA = joint.m_bodyA;\n const bodyB = joint.m_bodyB;\n\n // Wake up connected bodies.\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n\n // Remove from body 1.\n if (joint.m_edgeA.prev) {\n joint.m_edgeA.prev.next = joint.m_edgeA.next;\n }\n\n if (joint.m_edgeA.next) {\n joint.m_edgeA.next.prev = joint.m_edgeA.prev;\n }\n\n if (joint.m_edgeA == bodyA.m_jointList) {\n bodyA.m_jointList = joint.m_edgeA.next;\n }\n\n joint.m_edgeA.prev = null;\n joint.m_edgeA.next = null;\n\n // Remove from body 2\n if (joint.m_edgeB.prev) {\n joint.m_edgeB.prev.next = joint.m_edgeB.next;\n }\n\n if (joint.m_edgeB.next) {\n joint.m_edgeB.next.prev = joint.m_edgeB.prev;\n }\n\n if (joint.m_edgeB == bodyB.m_jointList) {\n bodyB.m_jointList = joint.m_edgeB.next;\n }\n\n joint.m_edgeB.prev = null;\n joint.m_edgeB.next = null;\n\n _ASSERT && console.assert(this.m_jointCount > 0);\n --this.m_jointCount;\n\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n let edge = bodyB.getContactList();\n while (edge) {\n if (edge.other == bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n }\n\n this.publish(\"remove-joint\", joint);\n }\n\n /** @internal */\n s_step: TimeStep; // reuse\n\n /**\n * Take a time step. This performs collision detection, integration, and\n * constraint solution.\n *\n * Broad-phase, narrow-phase, solve and solve time of impacts.\n *\n * @param timeStep Time step, this should not vary.\n */\n step(timeStep: number, velocityIterations?: number, positionIterations?: number): void {\n this.publish(\"pre-step\", timeStep);\n\n if ((velocityIterations | 0) !== velocityIterations) {\n // TODO: remove this in future\n velocityIterations = 0;\n }\n\n velocityIterations = velocityIterations || this.m_velocityIterations;\n positionIterations = positionIterations || this.m_positionIterations;\n\n // If new fixtures were added, we need to find the new contacts.\n if (this.m_newFixture) {\n this.findNewContacts();\n this.m_newFixture = false;\n }\n\n this.m_locked = true;\n\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\n // Update contacts. This is where some contacts are destroyed.\n this.updateContacts();\n\n // Integrate velocities, solve velocity constraints, and integrate positions.\n if (this.m_stepComplete && timeStep > 0.0) {\n this.m_solver.solveWorld(this.s_step);\n\n // Synchronize fixtures, check for out of range bodies.\n for (let b = this.m_bodyList; b; b = b.getNext()) {\n // If a body was not in an island then it did not move.\n if (b.m_islandFlag == false) {\n continue;\n }\n\n if (b.isStatic()) {\n continue;\n }\n\n // Update fixtures (for broad-phase).\n b.synchronizeFixtures();\n }\n // Look for new contacts.\n this.findNewContacts();\n }\n\n // Handle TOI events.\n if (this.m_continuousPhysics && timeStep > 0.0) {\n this.m_solver.solveWorldTOI(this.s_step);\n }\n\n if (this.m_clearForces) {\n this.clearForces();\n }\n\n this.m_locked = false;\n\n this.publish(\"post-step\", timeStep);\n }\n\n /**\n * @internal\n * Call this method to find new contacts.\n */\n findNewContacts(): void {\n this.m_broadPhase.updatePairs(\n (proxyA: FixtureProxy, proxyB: FixtureProxy) => this.createContact(proxyA, proxyB)\n );\n }\n\n /**\n * @internal\n * Callback for broad-phase.\n */\n createContact(proxyA: FixtureProxy, proxyB: FixtureProxy): void {\n const fixtureA = proxyA.fixture;\n const fixtureB = proxyB.fixture;\n\n const indexA = proxyA.childIndex;\n const indexB = proxyB.childIndex;\n\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Are the fixtures on the same body?\n if (bodyA == bodyB) {\n return;\n }\n\n // TODO_ERIN use a hash table to remove a potential bottleneck when both\n // bodies have a lot of contacts.\n // Does a contact already exist?\n let edge = bodyB.getContactList(); // ContactEdge\n while (edge) {\n if (edge.other == bodyA) {\n const fA = edge.contact.getFixtureA();\n const fB = edge.contact.getFixtureB();\n const iA = edge.contact.getChildIndexA();\n const iB = edge.contact.getChildIndexB();\n\n if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) {\n // A contact already exists.\n return;\n }\n\n if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) {\n // A contact already exists.\n return;\n }\n }\n\n edge = edge.next;\n }\n\n if (bodyB.shouldCollide(bodyA) == false) {\n return;\n }\n if (fixtureB.shouldCollide(fixtureA) == false) {\n return;\n }\n\n // Call the factory.\n const contact = Contact.create(fixtureA, indexA, fixtureB, indexB);\n if (contact == null) {\n return;\n }\n\n // Insert into the world.\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\n ++this.m_contactCount;\n }\n\n /**\n * @internal\n * Removes old non-overlapping contacts, applies filters and updates contacts.\n */\n updateContacts(): void {\n // Update awake contacts.\n let c: Contact;\n let next_c = this.m_contactList;\n while (c = next_c) {\n next_c = c.getNext();\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Is this contact flagged for filtering?\n if (c.m_filterFlag) {\n if (bodyB.shouldCollide(bodyA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n if (fixtureB.shouldCollide(fixtureA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n // Clear the filtering flag.\n c.m_filterFlag = false;\n }\n\n const activeA = bodyA.isAwake() && !bodyA.isStatic();\n const activeB = bodyB.isAwake() && !bodyB.isStatic();\n\n // At least one body must be awake and it must be dynamic or kinematic.\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const proxyIdA = fixtureA.m_proxies[indexA].proxyId;\n const proxyIdB = fixtureB.m_proxies[indexB].proxyId;\n const overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB);\n\n // Here we destroy contacts that cease to overlap in the broad-phase.\n if (overlap == false) {\n this.destroyContact(c);\n continue;\n }\n\n // The contact persists.\n c.update(this);\n }\n }\n\n /** @internal */\n destroyContact(contact: Contact): void {\n // Remove from the world.\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\n Contact.destroy(contact, this);\n\n --this.m_contactCount;\n }\n\n\n /**\n * Called when two fixtures begin to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n /**\n * Called when two fixtures cease to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"end-contact\", listener: (contact: Contact) => void): World;\n /**\n * This is called after a contact is updated. This allows you to inspect a\n * contact before it goes to the solver. If you are careful, you can modify the\n * contact manifold (e.g. disable contact). A copy of the old manifold is\n * provided so that you can detect changes. Note: this is called only for awake\n * bodies. Note: this is called even when the number of contact points is zero.\n * Note: this is not called for sensors. Note: if you set the number of contact\n * points to zero, you will not get an end-contact callback. However, you may get\n * a begin-contact callback the next step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n /**\n * This lets you inspect a contact after the solver is finished. This is useful\n * for inspecting impulses. Note: the contact manifold does not include time of\n * impact impulses, which can be arbitrarily large if the sub-step is small.\n * Hence the impulse is provided explicitly in a separate data structure. Note:\n * this is only called for contacts that are touching, solid, and awake.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n /** Listener is called whenever a body is removed. */\n on(name: \"remove-body\", listener: (body: Body) => void): World;\n /** Listener is called whenever a joint is removed implicitly or explicitly. */\n on(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n /** Listener is called whenever a fixture is removed implicitly or explicitly. */\n on(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Register an event listener.\n */\n // tslint:disable-next-line:typedef\n on(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\n off(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n off(name: \"end-contact\", listener: (contact: Contact) => void): World;\n off(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n off(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n off(name: \"remove-body\", listener: (body: Body) => void): World;\n off(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n off(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Remove an event listener.\n */\n // tslint:disable-next-line:typedef\n off(name, listener) {\n if (typeof name !== \"string\" || typeof listener !== \"function\") {\n return this;\n }\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return this;\n }\n const index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n return this;\n }\n\n publish(name: string, arg1?: any, arg2?: any, arg3?: any): number {\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return 0;\n }\n for (let l = 0; l < listeners.length; l++) {\n listeners[l].call(this, arg1, arg2, arg3);\n }\n return listeners.length;\n }\n\n /** @internal */\n beginContact(contact: Contact): void {\n this.publish(\"begin-contact\", contact);\n }\n\n /** @internal */\n endContact(contact: Contact): void {\n this.publish(\"end-contact\", contact);\n }\n\n /** @internal */\n preSolve(contact: Contact, oldManifold: Manifold): void {\n this.publish(\"pre-solve\", contact, oldManifold);\n }\n\n /** @internal */\n postSolve(contact: Contact, impulse: ContactImpulse): void {\n this.publish(\"post-solve\", contact, impulse);\n }\n\n /**\n * Joints and fixtures are destroyed when their associated body is destroyed.\n * Register a destruction listener so that you may nullify references to these\n * joints and shapes.\n *\n * `function(object)` is called when any joint or fixture is about to\n * be destroyed due to the destruction of one of its attached or parent bodies.\n */\n\n /**\n * Register a contact filter to provide specific control over collision.\n * Otherwise the default filter is used (defaultFilter). The listener is owned\n * by you and must remain in scope.\n *\n * Moved to Fixture.\n */\n}","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface Vec3Value {\n x: number;\n y: number;\n z: number;\n}\n\nexport class Vec3 {\n x: number;\n y: number;\n z: number;\n\n constructor(x: number, y: number, z: number);\n constructor(obj: { x: number, y: number, z: number });\n constructor();\n constructor(x?, y?, z?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec3)) {\n return new Vec3(x, y, z);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n } else {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n _ASSERT && Vec3.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y,\n z: this.z\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = data.x;\n obj.y = data.y;\n obj.z = data.z;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number, z: number): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = x;\n obj.y = y;\n obj.z = z;\n return obj;\n }\n\n static zero(): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = 0;\n obj.y = 0;\n obj.z = 0;\n return obj;\n }\n\n static clone(v: Vec3Value): Vec3 {\n _ASSERT && Vec3.assert(v);\n return Vec3.neo(v.x, v.y, v.z);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /** Does this vector contain finite coordinates? */\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec3.isValid(o), \"Invalid Vec3!\", o);\n }\n\n setZero(): Vec3 {\n this.x = 0.0;\n this.y = 0.0;\n this.z = 0.0;\n return this;\n }\n\n set(x: number, y: number, z: number): Vec3 {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n\n add(w: Vec3Value): Vec3 {\n this.x += w.x;\n this.y += w.y;\n this.z += w.z;\n return this;\n }\n\n sub(w: Vec3Value): Vec3 {\n this.x -= w.x;\n this.y -= w.y;\n this.z -= w.z;\n return this;\n }\n\n mul(m: number): Vec3 {\n this.x *= m;\n this.y *= m;\n this.z *= m;\n return this;\n }\n\n static areEqual(v: Vec3Value, w: Vec3Value): boolean {\n _ASSERT && Vec3.assert(v);\n _ASSERT && Vec3.assert(w);\n return v === w ||\n typeof v === \"object\" && v !== null &&\n typeof w === \"object\" && w !== null &&\n v.x === w.x && v.y === w.y && v.z === w.z;\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n }\n\n /** Cross product on two vectors */\n static cross(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(\n v.y * w.z - v.z * w.y,\n v.z * w.x - v.x * w.z,\n v.x * w.y - v.y * w.x\n );\n }\n\n static add(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x + w.x, v.y + w.y, v.z + w.z);\n }\n\n static sub(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x - w.x, v.y - w.y, v.z - w.z);\n }\n\n static mul(v: Vec3Value, m: number): Vec3 {\n return new Vec3(m * v.x, m * v.y, m * v.z);\n }\n\n neg(): Vec3 {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n\n static neg(v: Vec3Value): Vec3 {\n return new Vec3(-v.x, -v.y, -v.z);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Shape } from \"../Shape\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { AABB, AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\n/**\n * A line segment (edge) shape. These can be connected in chains or loops to\n * other edge shapes. The connectivity information is used to ensure correct\n * contact normals.\n */\nexport class EdgeShape extends Shape {\n static TYPE = \"edge\" as const;\n /** @hidden */ m_type: \"edge\";\n\n /** @hidden */ m_radius: number;\n\n // These are the edge vertices\n /** @hidden */ m_vertex1: Vec2;\n /** @hidden */ m_vertex2: Vec2;\n\n // Optional adjacent vertices. These are used for smooth collision.\n // Used by chain shape.\n /** @hidden */ m_vertex0: Vec2;\n /** @hidden */ m_vertex3: Vec2;\n /** @hidden */ m_hasVertex0: boolean;\n /** @hidden */ m_hasVertex3: boolean;\n\n constructor(v1?: Vec2Value, v2?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof EdgeShape)) {\n return new EdgeShape(v1, v2);\n }\n\n super();\n\n this.m_type = EdgeShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n\n this.m_vertex1 = v1 ? Vec2.clone(v1) : Vec2.zero();\n this.m_vertex2 = v2 ? Vec2.clone(v2) : Vec2.zero();\n\n this.m_vertex0 = Vec2.zero();\n this.m_vertex3 = Vec2.zero();\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertex1: this.m_vertex1,\n vertex2: this.m_vertex2,\n\n vertex0: this.m_vertex0,\n vertex3: this.m_vertex3,\n hasVertex0: this.m_hasVertex0,\n hasVertex3: this.m_hasVertex3,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): EdgeShape {\n const shape = new EdgeShape(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\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getType(): \"edge\" {\n return this.m_type;\n }\n\n /** @internal @deprecated */\n setNext(v?: Vec2Value): EdgeShape {\n return this.setNextVertex(v);\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n setNextVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex3.setVec2(v);\n this.m_hasVertex3 = true;\n } else {\n this.m_vertex3.setZero();\n this.m_hasVertex3 = false;\n }\n return this;\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n getNextVertex(): Vec2 {\n return this.m_vertex3;\n }\n\n /** @internal @deprecated */\n setPrev(v?: Vec2Value): EdgeShape {\n return this.setPrevVertex(v);\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n setPrevVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex0.setVec2(v);\n this.m_hasVertex0 = true;\n } else {\n this.m_vertex0.setZero();\n this.m_hasVertex0 = false;\n }\n return this;\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n getPrevVertex(): Vec2 {\n return this.m_vertex0;\n }\n\n /**\n * Set this as an isolated edge.\n */\n _set(v1: Vec2Value, v2: Vec2Value): EdgeShape {\n this.m_vertex1.setVec2(v1);\n this.m_vertex2.setVec2(v2);\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n return this;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): EdgeShape {\n const clone = new EdgeShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // p = p1 + t * d\n // v = v1 + s * e\n // p1 + t * d = v1 + s * e\n // s * e - t * d = p1 - v1\n\n // NOT_USED(childIndex);\n\n // Put the ray into the edge's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n const v1 = this.m_vertex1;\n const v2 = this.m_vertex2;\n const e = Vec2.sub(v2, v1);\n const normal = Vec2.neo(e.y, -e.x);\n normal.normalize();\n\n // q = p1 + t * d\n // dot(normal, q - v1) = 0\n // dot(normal, p1 - v1) + t * dot(normal, d) = 0\n const numerator = Vec2.dot(normal, Vec2.sub(v1, p1));\n const denominator = Vec2.dot(normal, d);\n\n if (denominator == 0.0) {\n return false;\n }\n\n const t = numerator / denominator;\n if (t < 0.0 || input.maxFraction < t) {\n return false;\n }\n\n const q = Vec2.add(p1, Vec2.mulNumVec2(t, d));\n\n // q = v1 + s * r\n // s = dot(q - v1, r) / dot(r, r)\n const r = Vec2.sub(v2, v1);\n const rr = Vec2.dot(r, r);\n if (rr == 0.0) {\n return false;\n }\n\n const s = Vec2.dot(Vec2.sub(q, v1), r) / rr;\n if (s < 0.0 || 1.0 < s) {\n return false;\n }\n\n output.fraction = t;\n if (numerator > 0.0) {\n output.normal = Rot.mulVec2(xf.q, normal).neg();\n } else {\n output.normal = Rot.mulVec2(xf.q, normal);\n }\n return true;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n matrix.transformVec2(v1, xf, this.m_vertex1);\n matrix.transformVec2(v2, xf, this.m_vertex2);\n\n AABB.combinePoints(aabb, v1, v2);\n AABB.extend(aabb, this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Edge = EdgeShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { AABBValue, RayCastOutput, RayCastInput, AABB } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\nimport { EdgeShape } from \"./EdgeShape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\n\n/**\n * A chain shape is a free form sequence of line segments. The chain has\n * two-sided collision, so you can use inside and outside collision. Therefore,\n * you may use any winding order. Connectivity information is used to create\n * smooth collisions.\n *\n * WARNING: The chain will not collide properly if there are self-intersections.\n */\nexport class ChainShape extends Shape {\n static TYPE = \"chain\" as const;\n /** @hidden */ m_type: \"chain\";\n\n /** @hidden */ m_radius: number;\n\n /** @hidden */ m_vertices: Vec2[];\n /** @hidden */ m_count: number;\n /** @hidden */ m_prevVertex: Vec2 | null;\n /** @hidden */ m_nextVertex: Vec2 | null;\n /** @hidden */ m_hasPrevVertex: boolean;\n /** @hidden */ m_hasNextVertex: boolean;\n\n /** @hidden */ m_isLoop: boolean;\n\n constructor(vertices?: Vec2Value[], loop?: boolean) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof ChainShape)) {\n return new ChainShape(vertices, loop);\n }\n\n super();\n\n this.m_type = ChainShape.TYPE;\n this.m_radius = Settings.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\n this.m_isLoop = !!loop;\n\n if (vertices && vertices.length) {\n if (loop) {\n this._createLoop(vertices);\n } else {\n this._createChain(vertices);\n }\n }\n }\n\n /** @internal */\n _serialize(): object {\n const data = {\n type: this.m_type,\n vertices: this.m_vertices,\n isLoop: this.m_isLoop,\n hasPrevVertex: this.m_hasPrevVertex,\n hasNextVertex: this.m_hasNextVertex,\n prevVertex: null as Vec2 | null,\n nextVertex: null as Vec2 | 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\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): ChainShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n const shape = new ChainShape(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\n // clear() {\n // this.m_vertices.length = 0;\n // this.m_count = 0;\n // }\n\n getType(): \"chain\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal\n * Create a loop. This automatically adjusts connectivity.\n *\n * @param vertices an array of vertices, these are copied\n * @param count the vertex count\n */\n _createLoop(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 3);\n if (vertices.length < 3) {\n return;\n }\n\n for (let i = 1; i < vertices.length; ++i) {\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n // If the code crashes here, it means your vertices are too close together.\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_vertices = [];\n this.m_count = vertices.length + 1;\n for (let 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\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\n /**\n * @internal\n * Create a chain with isolated end vertices.\n *\n * @param vertices an array of vertices, these are copied\n */\n _createChain(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 2);\n for (let i = 1; i < vertices.length; ++i) {\n // If the code crashes here, it means your vertices are too close together.\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_count = vertices.length;\n for (let i = 0; i < vertices.length; ++i) {\n this.m_vertices[i] = Vec2.clone(vertices[i]);\n }\n\n this.m_hasPrevVertex = false;\n this.m_hasNextVertex = false;\n this.m_prevVertex = null;\n this.m_nextVertex = null;\n return this;\n }\n\n /** @hidden */\n _reset(): void {\n if (this.m_isLoop) {\n this._createLoop(this.m_vertices);\n } else {\n this._createChain(this.m_vertices);\n }\n }\n\n /**\n * Establish connectivity to a vertex that precedes the first vertex. Don't call\n * this for loops.\n */\n setPrevVertex(prevVertex: Vec2): void {\n // todo: copy or reference\n this.m_prevVertex = prevVertex;\n this.m_hasPrevVertex = true;\n }\n\n getPrevVertex(): Vec2 {\n return this.m_prevVertex;\n }\n\n /**\n * Establish connectivity to a vertex that follows the last vertex. Don't call\n * this for loops.\n */\n setNextVertex(nextVertex: Vec2): void {\n // todo: copy or reference\n this.m_nextVertex = nextVertex;\n this.m_hasNextVertex = true;\n }\n\n getNextVertex(): Vec2 {\n return this.m_nextVertex;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): ChainShape {\n const clone = new ChainShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): number {\n // edge count = vertex count - 1\n return this.m_count - 1;\n }\n\n // Get a child edge.\n getChildEdge(edge: EdgeShape, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count - 1);\n edge.m_type = EdgeShape.TYPE;\n edge.m_radius = this.m_radius;\n\n edge.m_vertex1 = this.m_vertices[childIndex];\n edge.m_vertex2 = this.m_vertices[childIndex + 1];\n\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\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\n getVertex(index: number): Vec2 {\n _ASSERT && console.assert(0 <= index && index <= this.m_count);\n if (index < this.m_count) {\n return this.m_vertices[index];\n } else {\n return this.m_vertices[0];\n }\n }\n\n isLoop(): boolean {\n return this.m_isLoop;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * This always return false.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n const edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1));\n return edgeShape.rayCast(output, input, xf, 0);\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n matrix.transformVec2(v1, xf, this.getVertex(childIndex));\n matrix.transformVec2(v2, xf, this.getVertex(childIndex + 1));\n\n AABB.combinePoints(aabb, v1, v2);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * Chains have zero mass.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.zeroVec2(massData.center);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\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}\n\nexport const Chain = ChainShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const center = matrix.vec2(0, 0);\n/** @internal */ const s = matrix.vec2(0, 0);\n\n/**\n * A convex polygon. It is assumed that the interior of the polygon is to the\n * left of each edge. Polygons have a maximum number of vertices equal to\n * Settings.maxPolygonVertices. In most cases you should not need many vertices\n * for a convex polygon. extends Shape\n */\nexport class PolygonShape extends Shape {\n static TYPE = \"polygon\" as const;\n /** @hidden */ m_type: \"polygon\";\n\n /** @hidden */ m_centroid: Vec2;\n /** @hidden */ m_vertices: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_normals: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_count: number;\n /** @hidden */ m_radius: number;\n\n constructor(vertices?: Vec2Value[]) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PolygonShape)) {\n return new PolygonShape(vertices);\n }\n\n super();\n\n this.m_type = PolygonShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n this.m_centroid = Vec2.zero();\n this.m_vertices = [];\n this.m_normals = [];\n this.m_count = 0;\n\n if (vertices && vertices.length) {\n this._set(vertices);\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertices: this.m_vertices,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): PolygonShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n\n const shape = new PolygonShape(vertices);\n return shape;\n }\n\n getType(): \"polygon\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): PolygonShape {\n const clone = new PolygonShape();\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 (let i = 0; i < this.m_count; i++) {\n clone.m_vertices.push(this.m_vertices[i].clone());\n }\n for (let i = 0; i < this.m_normals.length; i++) {\n clone.m_normals.push(this.m_normals[i].clone());\n }\n return clone;\n }\n\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /** @hidden */\n _reset(): void {\n this._set(this.m_vertices);\n }\n\n /**\n * @internal\n *\n * Create a convex hull from the given array of local points. The count must be\n * in the range [3, Settings.maxPolygonVertices].\n *\n * Warning: the points may be re-ordered, even if they form a convex polygon\n * Warning: collinear points are handled but not removed. Collinear points may\n * lead to poor stacking behavior.\n */\n _set(vertices: Vec2Value[]): void {\n _ASSERT && console.assert(3 <= vertices.length && vertices.length <= Settings.maxPolygonVertices);\n if (vertices.length < 3) {\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n let n = math_min(vertices.length, Settings.maxPolygonVertices);\n\n // Perform welding and copy vertices into local buffer.\n const ps: Vec2[] = []; // [Settings.maxPolygonVertices];\n for (let i = 0; i < n; ++i) {\n const v = vertices[i];\n\n let unique = true;\n for (let j = 0; j < ps.length; ++j) {\n if (Vec2.distanceSquared(v, ps[j]) < 0.25 * Settings.linearSlopSquared) {\n unique = false;\n break;\n }\n }\n\n if (unique) {\n ps.push(Vec2.clone(v));\n }\n }\n\n n = ps.length;\n if (n < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n // Create the convex hull using the Gift wrapping algorithm\n // http://en.wikipedia.org/wiki/Gift_wrapping_algorithm\n\n // Find the right most point on the hull (in case of multiple points bottom most is used)\n let i0 = 0;\n let x0 = ps[0].x;\n for (let i = 1; i < n; ++i) {\n const x = ps[i].x;\n if (x > x0 || (x === x0 && ps[i].y < ps[i0].y)) {\n i0 = i;\n x0 = x;\n }\n }\n\n const hull = [] as number[]; // [Settings.maxPolygonVertices];\n let m = 0;\n let ih = i0;\n\n while (true) {\n _ASSERT && console.assert(m < Settings.maxPolygonVertices);\n hull[m] = ih;\n\n let ie = 0;\n for (let j = 1; j < n; ++j) {\n if (ie === ih) {\n ie = j;\n continue;\n }\n\n const r = Vec2.sub(ps[ie], ps[hull[m]]);\n const v = Vec2.sub(ps[j], ps[hull[m]]);\n const c = Vec2.crossVec2Vec2(r, v);\n // c < 0 means counter-clockwise wrapping, c > 0 means clockwise wrapping\n if (c < 0.0) {\n ie = j;\n }\n\n // Collinearity check\n if (c === 0.0 && v.lengthSquared() > r.lengthSquared()) {\n ie = j;\n }\n }\n\n ++m;\n ih = ie;\n\n if (ie === i0) {\n break;\n }\n }\n\n if (m < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n this.m_count = m;\n\n // Copy vertices.\n this.m_vertices = [];\n for (let i = 0; i < m; ++i) {\n this.m_vertices[i] = ps[hull[i]];\n }\n\n // Compute normals. Ensure the edges have non-zero length.\n for (let i = 0; i < m; ++i) {\n const i1 = i;\n const i2 = i + 1 < m ? i + 1 : 0;\n const edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]);\n _ASSERT && console.assert(edge.lengthSquared() > EPSILON * EPSILON);\n this.m_normals[i] = Vec2.crossVec2Num(edge, 1.0);\n this.m_normals[i].normalize();\n }\n\n // Compute the polygon centroid.\n this.m_centroid = computeCentroid(this.m_vertices, m);\n }\n\n /** @internal */ _setAsBox(hx: number, hy: number, center?: Vec2Value, angle?: number): void {\n // start with right-bottom, counter-clockwise, as in Gift wrapping algorithm in PolygonShape._set()\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\n this.m_normals[0] = Vec2.neo(1.0, 0.0);\n this.m_normals[1] = Vec2.neo(0.0, 1.0);\n this.m_normals[2] = Vec2.neo(-1.0, 0.0);\n this.m_normals[3] = Vec2.neo(0.0, -1.0);\n\n this.m_count = 4;\n\n if (center && Vec2.isValid(center)) {\n angle = angle || 0;\n\n matrix.copyVec2(this.m_centroid, center);\n\n const xf = Transform.identity();\n xf.p.setVec2(center);\n xf.q.setAngle(angle);\n\n // Transform vertices and normals.\n for (let i = 0; i < this.m_count; ++i) {\n this.m_vertices[i] = Transform.mulVec2(xf, this.m_vertices[i]);\n this.m_normals[i] = Rot.mulVec2(xf.q, this.m_normals[i]);\n }\n }\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const pLocal = matrix.detransformVec2(temp, xf, p);\n\n for (let i = 0; i < this.m_count; ++i) {\n const dot = matrix.dotVec2(this.m_normals[i], pLocal) - matrix.dotVec2(this.m_normals[i], this.m_vertices[i]);\n if (dot > 0.0) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n\n // Put the ray into the polygon's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n let lower = 0.0;\n let upper = input.maxFraction;\n\n let index = -1;\n\n for (let i = 0; i < this.m_count; ++i) {\n // p = p1 + a * d\n // dot(normal, p - v) = 0\n // dot(normal, p1 - v) + a * dot(normal, d) = 0\n const numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1));\n const denominator = Vec2.dot(this.m_normals[i], d);\n\n if (denominator == 0.0) {\n if (numerator < 0.0) {\n return false;\n }\n } else {\n // Note: we want this predicate without division:\n // lower < numerator / denominator, where denominator < 0\n // Since denominator < 0, we have to flip the inequality:\n // lower < numerator / denominator <==> denominator * lower > numerator.\n if (denominator < 0.0 && numerator < lower * denominator) {\n // Increase lower.\n // The segment enters this half-space.\n lower = numerator / denominator;\n index = i;\n } else if (denominator > 0.0 && numerator < upper * denominator) {\n // Decrease upper.\n // The segment exits this half-space.\n upper = numerator / denominator;\n }\n }\n\n // The use of epsilon here causes the assert on lower to trip\n // in some cases. Apparently the use of epsilon was to make edge\n // shapes work, but now those are handled separately.\n // if (upper < lower - matrix.EPSILON)\n if (upper < lower) {\n return false;\n }\n }\n\n _ASSERT && console.assert(0.0 <= lower && lower <= input.maxFraction);\n\n if (index >= 0) {\n output.fraction = lower;\n output.normal = Rot.mulVec2(xf.q, this.m_normals[index]);\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const v = matrix.transformVec2(temp, xf, this.m_vertices[i]);\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, v.y);\n maxY = math_max(maxY, v.y);\n }\n\n matrix.setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius);\n matrix.setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n // Polygon mass, centroid, and inertia.\n // Let rho be the polygon density in mass per unit area.\n // Then:\n // mass = rho * int(dA)\n // centroid.x = (1/mass) * rho * int(x * dA)\n // centroid.y = (1/mass) * rho * int(y * dA)\n // I = rho * int((x*x + y*y) * dA)\n //\n // We can compute these integrals by summing all the integrals\n // for each triangle of the polygon. To evaluate the integral\n // for a single triangle, we make a change of variables to\n // the (u,v) coordinates of the triangle:\n // x = x0 + e1x * u + e2x * v\n // y = y0 + e1y * u + e2y * v\n // where 0 <= u && 0 <= v && u + v <= 1.\n //\n // We integrate u from [0,1-v] and then v from [0,1].\n // We also need to use the Jacobian of the transformation:\n // D = cross(e1, e2)\n //\n // Simplification: triangle centroid = (1/3) * (p1 + p2 + p3)\n //\n // The rest of the derivation is handled by computer algebra.\n\n _ASSERT && console.assert(this.m_count >= 3);\n\n matrix.zeroVec2(center);\n let area = 0.0;\n let I = 0.0;\n\n // s is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n matrix.zeroVec2(s);\n\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < this.m_count; ++i) {\n matrix.plusVec2(s, this.m_vertices[i]);\n }\n matrix.scaleVec2(s, 1.0 / this.m_count, s);\n\n const k_inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < this.m_count; ++i) {\n // Triangle vertices.\n matrix.subVec2(e1, this.m_vertices[i], s);\n if ( i + 1 < this.m_count) {\n matrix.subVec2(e2, this.m_vertices[i + 1], s);\n } else {\n matrix.subVec2(e2, this.m_vertices[0], s);\n }\n\n const D = matrix.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine2Vec2(temp, triangleArea * k_inv3, e1, triangleArea * k_inv3, e2);\n matrix.plusVec2(center, temp);\n\n const ex1 = e1.x;\n const ey1 = e1.y;\n const ex2 = e2.x;\n const ey2 = e2.y;\n\n const intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2;\n const inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2;\n\n I += (0.25 * k_inv3 * D) * (intx2 + inty2);\n }\n\n // Total mass\n massData.mass = density * area;\n\n // Center of mass\n _ASSERT && console.assert(area > EPSILON);\n matrix.scaleVec2(center, 1.0 / area, center);\n matrix.addVec2(massData.center, center, s);\n\n // Inertia tensor relative to the local origin (point s).\n massData.I = density * I;\n\n // Shift to center of mass then to original body origin.\n massData.I += massData.mass * (matrix.dotVec2(massData.center, massData.center) - matrix.dotVec2(center, center));\n }\n\n /**\n * Validate convexity. This is a very time consuming operation.\n * @returns true if valid\n */\n validate(): boolean {\n for (let i = 0; i < this.m_count; ++i) {\n const i1 = i;\n const i2 = i < this.m_count - 1 ? i1 + 1 : 0;\n const p = this.m_vertices[i1];\n matrix.subVec2(e, this.m_vertices[i2], p);\n\n for (let j = 0; j < this.m_count; ++j) {\n if (j == i1 || j == i2) {\n continue;\n }\n\n const c = matrix.crossVec2Vec2(e, matrix.subVec2(temp, this.m_vertices[j], p));\n if (c < 0.0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\n for (let 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}\n\n/** @internal */ function computeCentroid(vs: Vec2[], count: number): Vec2 {\n _ASSERT && console.assert(count >= 3);\n\n const c = Vec2.zero();\n let area = 0.0;\n\n // pRef is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n const pRef = Vec2.zero();\n if (false) {\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < count; ++i) {\n pRef.add(vs[i]);\n }\n pRef.mul(1.0 / count);\n }\n\n const inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < count; ++i) {\n // Triangle vertices.\n const p1 = pRef;\n const p2 = vs[i];\n const p3 = i + 1 < count ? vs[i + 1] : vs[0];\n\n const e1 = Vec2.sub(p2, p1);\n const e2 = Vec2.sub(p3, p1);\n\n const D = Vec2.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine3Vec2(temp, 1, p1, 1, p2, 1, p3);\n matrix.plusScaleVec2(c, triangleArea * inv3, temp);\n }\n\n // Centroid\n _ASSERT && console.assert(area > EPSILON);\n c.mul(1.0 / area);\n return c;\n}\n\nexport const Polygon = PolygonShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Shape } from \"../Shape\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_PI = Math.PI;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\nexport class CircleShape extends Shape {\n static TYPE = \"circle\" as const;\n /** @hidden */ m_type: \"circle\";\n\n /** @hidden */ m_p: Vec2;\n /** @hidden */ m_radius: number;\n\n constructor(position: Vec2Value, radius?: number);\n constructor(radius?: number);\n constructor(a: any, b?: any) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof CircleShape)) {\n return new CircleShape(a, b);\n }\n\n super();\n\n this.m_type = CircleShape.TYPE;\n this.m_p = Vec2.zero();\n this.m_radius = 1;\n\n if (typeof a === \"object\" && Vec2.isValid(a)) {\n this.m_p.setVec2(a);\n\n if (typeof b === \"number\") {\n this.m_radius = b;\n }\n\n } else if (typeof a === \"number\") {\n this.m_radius = a;\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n p: this.m_p,\n radius: this.m_radius,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): CircleShape {\n return new CircleShape(data.p, data.radius);\n }\n\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getType(): \"circle\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getCenter(): Vec2 {\n return this.m_p;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): CircleShape {\n const clone = new CircleShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const center = matrix.transformVec2(temp, xf, this.m_p);\n return matrix.distSqrVec2(p, center) <= this.m_radius * this.m_radius;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // Collision Detection in Interactive 3D Environments by Gino van den Bergen\n // From Section 3.1.2\n // x = s + a * r\n // norm(x) = radius\n\n const position = Vec2.add(xf.p, Rot.mulVec2(xf.q, this.m_p));\n const s = Vec2.sub(input.p1, position);\n const b = Vec2.dot(s, s) - this.m_radius * this.m_radius;\n\n // Solve quadratic equation.\n const r = Vec2.sub(input.p2, input.p1);\n const c = Vec2.dot(s, r);\n const rr = Vec2.dot(r, r);\n const sigma = c * c - rr * b;\n\n // Check for negative discriminant and short segment.\n if (sigma < 0.0 || rr < EPSILON) {\n return false;\n }\n\n // Find the point of intersection of the line with the circle.\n let a = -(c + math_sqrt(sigma));\n\n // Is the intersection point on the segment?\n if (0.0 <= a && a <= input.maxFraction * rr) {\n a /= rr;\n output.fraction = a;\n output.normal = Vec2.add(s, Vec2.mulNumVec2(a, r));\n output.normal.normalize();\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n const p = matrix.transformVec2(temp, xf, this.m_p);\n\n matrix.setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius);\n matrix.setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n massData.mass = density * math_PI * this.m_radius * this.m_radius;\n matrix.copyVec2(massData.center, this.m_p);\n // inertia about the local origin\n massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + matrix.lengthSqrVec2(this.m_p));\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Circle = CircleShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. A value of 0 disables softness.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * Distance length.\n */\n length?: number;\n}\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointDef extends JointDef, DistanceJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0\n};\n\n/**\n * A distance joint constrains two points on two bodies to remain at a fixed\n * distance from each other. You can view this as a massless, rigid rod.\n */\nexport class DistanceJoint extends Joint {\n static TYPE = \"distance-joint\" as const;\n\n // Solver shared\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_length: number;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_gamma: number;\n /** @internal */ m_bias: number;\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n /**\n * @param def DistanceJoint definition.\n */\n constructor(def: DistanceJointDef);\n /**\n * @param anchorA Anchor A in global coordination.\n * @param anchorB Anchor B in global coordination.\n */\n constructor(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value);\n constructor(def: DistanceJointDef, bodyA?: Body, bodyB?: Body, anchorA?: Vec2Value, anchorB?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof DistanceJoint)) {\n return new DistanceJoint(def, bodyA, bodyB, anchorA, anchorB);\n }\n\n // order of constructor arguments is changed in v0.2\n if (bodyB && anchorA && (\"m_type\" in anchorA) && (\"x\" in bodyB) && (\"y\" in bodyB)) {\n const temp = bodyB;\n bodyB = anchorA as any as Body;\n anchorA = temp as any as Vec2;\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = DistanceJoint.TYPE;\n\n // Solver shared\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 :\n 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.0;\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n\n // 1-D constrained system\n // m (v2 - v1) = lambda\n // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass.\n // x2 = x1 + h * v2\n\n // 1-D mass-damper-spring system\n // m (v2 - v1) + h * d * v2 + h * k *\n\n // C = norm(p2 - p1) - L\n // u = (p2 - p1) / norm(p2 - p1)\n // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1))\n // J = [-u -cross(r1, u) u cross(r2, u)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n length: this.m_length,\n\n impulse: this.m_impulse,\n gamma: this.m_gamma,\n bias: this.m_bias,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): DistanceJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new DistanceJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\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\n if (def.length > 0) {\n this.m_length = +def.length;\n } else if (def.length < 0) { // don't change length\n } else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) {\n this.m_length = Vec2.distance(\n this.m_bodyA.getWorldPoint(this.m_localAnchorA),\n this.m_bodyB.getWorldPoint(this.m_localAnchorB)\n );\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the natural length. Manipulating the length can lead to non-physical\n * behavior when the frequency is zero.\n */\n setLength(length: number): void {\n this.m_length = length;\n }\n\n /**\n * Get the natural length.\n */\n getLength(): number {\n return this.m_length;\n }\n\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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(cB, this.m_rB), Vec2.add(cA, this.m_rA));\n\n // Handle singularity.\n const length = this.m_u.length();\n if (length > Settings.linearSlop) {\n this.m_u.mul(1.0 / length);\n } else {\n this.m_u.setNum(0.0, 0.0);\n }\n\n const crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n let invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu;\n\n // Compute the effective mass matrix.\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (this.m_frequencyHz > 0.0) {\n const C = length - this.m_length;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * this.m_mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_mass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invMass += this.m_gamma;\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n } else {\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n const Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA);\n\n const impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse);\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n if (this.m_frequencyHz > 0.0) {\n // There is no position correction for soft distance constraints.\n return true;\n }\n\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const length = u.normalize();\n const C = clamp(length - this.m_length, -Settings.maxLinearCorrection, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointOpt extends JointOpt {\n /**\n * The maximum friction force in N.\n */\n maxForce?: number;\n /**\n * The maximum friction torque in N-m.\n */\n maxTorque?: number;\n}\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointDef extends JointDef, FrictionJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n maxTorque : 0.0,\n};\n\n/**\n * Friction joint. This is used for top-down friction. It provides 2D\n * translational friction and angular friction.\n */\nexport class FrictionJoint extends Joint {\n static TYPE = \"friction-joint\" as const;\n\n /** @internal */ m_type: \"friction-joint\";\n\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n // Solver shared\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: FrictionJointDef);\n /**\n * @param anchor Anchor in global coordination.\n */\n constructor(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: FrictionJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof FrictionJoint)) {\n return new FrictionJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = FrictionJoint.TYPE;\n\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\n // Solver shared\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): FrictionJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new FrictionJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y\n * 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\n * this.m_rB.x;\n\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.sub(\n Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)),\n Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA))\n );\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = this.m_linearImpulse;\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) {\n this.m_linearImpulse.normalize();\n this.m_linearImpulse.mul(maxImpulse);\n }\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Vec3, Vec3Value } from \"./Vec3\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 3-by-3 matrix. Stored in column-major order.\n */\nexport class Mat33 {\n ex: Vec3;\n ey: Vec3;\n ez: Vec3;\n\n constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value);\n constructor();\n constructor(a?: Vec3Value, b?: Vec3Value, c?: Vec3Value) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec3.clone(a);\n this.ey = Vec3.clone(b);\n this.ez = Vec3.clone(c);\n } else {\n this.ex = Vec3.zero();\n this.ey = Vec3.zero();\n this.ez = Vec3.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat33.isValid(o), \"Invalid Mat33!\", o);\n }\n\n /**\n * Set this matrix to all zeros.\n */\n setZero(): Mat33 {\n this.ex.setZero();\n this.ey.setZero();\n this.ez.setZero();\n return this;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve33(v: Vec3Value): Vec3 {\n // let det = matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, this.ez));\n let cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y;\n let cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z;\n let cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x;\n let det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = new Vec3();\n // r.x = det * matrix.dotVec3(v, matrix.newCrossVec3(this.ey, this.ez));\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 * (v.x * cross_x + v.y * cross_y + v.z * cross_z);\n\n // r.y = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(v, this.ez));\n cross_x = v.y * this.ez.z - v.z * this.ez.y;\n cross_y = v.z * this.ez.x - v.x * this.ez.z;\n cross_z = v.x * this.ez.y - v.y * this.ez.x;\n r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z);\n\n // r.z = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, v));\n cross_x = this.ey.y * v.z - this.ey.z * v.y;\n cross_y = this.ey.z * v.x - this.ey.x * v.z;\n cross_z = this.ey.x * v.y - this.ey.y * v.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\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix\n * equation.\n */\n solve22(v: Vec2Value): Vec2 {\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a21 = this.ex.y;\n const a22 = this.ey.y;\n let det = a11 * a22 - a12 * a21;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = Vec2.zero();\n r.x = det * (a22 * v.x - a12 * v.y);\n r.y = det * (a11 * v.y - a21 * v.x);\n return r;\n }\n\n /**\n * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if\n * singular.\n */\n getInverse22(M: Mat33): void {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n M.ex.x = det * d;\n M.ey.x = -det * b;\n M.ex.z = 0.0;\n M.ex.y = -det * c;\n M.ey.y = det * a;\n M.ey.z = 0.0;\n M.ez.x = 0.0;\n M.ez.y = 0.0;\n M.ez.z = 0.0;\n }\n\n /**\n * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix\n * if singular.\n */\n getSymInverse33(M: Mat33): void {\n let det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez));\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a13 = this.ez.x;\n const a22 = this.ey.y;\n const a23 = this.ez.y;\n const a33 = this.ez.z;\n\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\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\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\n /**\n * Multiply a matrix times a vector.\n */\n static mul(a: Mat33, b: Vec2Value): Vec2;\n static mul(a: Mat33, b: Vec3Value): Vec3;\n static mul(a, b) {\n _ASSERT && Mat33.assert(a);\n if (b && \"z\" in b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n\n } else if (b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec3(a: Mat33, b: Vec3Value): Vec3 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n }\n\n static mulVec2(a: Mat33, b: Vec2Value): Vec2 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n static add(a: Mat33, b: Mat33): Mat33 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Mat33.assert(b);\n return new Mat33(\n Vec3.add(a.ex, b.ex),\n Vec3.add(a.ey, b.ey),\n Vec3.add(a.ez, b.ez)\n );\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n// todo: use string?\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n} \n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointOpt extends JointOpt {\n /**\n * The lower angle for the joint limit (radians).\n */\n lowerAngle?: number;\n /**\n * The upper angle for the joint limit (radians).\n */\n upperAngle?: number;\n /**\n * The maximum motor torque used to achieve the desired motor speed. Usually\n * in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed. Usually in radians per second.\n */\n motorSpeed?: number;\n /**\n * A flag to enable joint limits.\n */\n enableLimit?: boolean;\n /**\n * A flag to enable the joint motor.\n */\n enableMotor?: boolean;\n}\n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointDef extends JointDef, RevoluteJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n lowerAngle : 0.0,\n upperAngle : 0.0,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n enableLimit : false,\n enableMotor : false\n};\n\n/**\n * A revolute joint constrains two bodies to share a common point while they are\n * free to rotate about the point. The relative rotation about the shared point\n * is the joint angle. You can limit the relative rotation with a joint limit\n * that specifies a lower and upper angle. You can use a motor to drive the\n * relative rotation about the shared point. A maximum motor torque is provided\n * so that infinite forces are not generated.\n */\nexport class RevoluteJoint extends Joint {\n static TYPE = \"revolute-joint\" as const;\n\n /** @internal */ m_type: \"revolute-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerAngle: number;\n /** @internal */ m_upperAngle: number;\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n // effective mass for point-to-point constraint.\n /** @internal */ m_mass: Mat33;\n // effective mass for motor/limit angular constraint.\n /** @internal */ m_motorMass: number;\n /** @internal */ m_limitState: number;\n\n constructor(def: RevoluteJointDef);\n constructor(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RevoluteJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RevoluteJoint)) {\n return new RevoluteJoint(def, bodyA, bodyB, anchor);\n }\n\n def = def ?? {} as RevoluteJointDef;\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_mass = new Mat33();\n this.m_limitState = LimitState.inactiveLimit;\n\n this.m_type = RevoluteJoint.TYPE;\n\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\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\n if (Number.isFinite(def.referenceAngle)) {\n this.m_referenceAngle = def.referenceAngle;\n } else {\n this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle();\n }\n\n this.m_impulse = new Vec3();\n this.m_motorImpulse = 0.0;\n\n this.m_lowerAngle = def.lowerAngle ?? DEFAULTS.lowerAngle;\n this.m_upperAngle = def.upperAngle ?? DEFAULTS.upperAngle;\n this.m_maxMotorTorque = def.maxMotorTorque ?? DEFAULTS.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed ?? DEFAULTS.motorSpeed;\n this.m_enableLimit = def.enableLimit ?? DEFAULTS.enableLimit;\n this.m_enableMotor = def.enableMotor ?? DEFAULTS.enableMotor;\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Motor constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any):RevoluteJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RevoluteJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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 !== undefined) {\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 !== undefined) {\n this.m_enableMotor = def.enableMotor;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle in radians.\n */\n getJointAngle(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle speed in radians per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_angularVelocity - bA.m_angularVelocity;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Get the current motor torque given the inverse time step. Unit is N*m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set the motor speed in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set the maximum motor torque, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit in radians.\n */\n getLowerLimit(): number {\n return this.m_lowerAngle;\n }\n\n /**\n * Get the upper joint limit in radians.\n */\n getUpperLimit(): number {\n return this.m_upperAngle;\n }\n\n /**\n * Set the joint limits in radians.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(lower <= upper);\n\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.0;\n this.m_lowerAngle = lower;\n this.m_upperAngle = upper;\n }\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force given the inverse time step. Unit is N.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque due to the joint limit given the inverse time step.\n * Unit is N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\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\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n\n if (this.m_enableMotor == false || fixedRotation) {\n this.m_motorImpulse = 0.0;\n }\n\n if (this.m_enableLimit && fixedRotation == false) {\n const jointAngle = aB - aA - this.m_referenceAngle;\n\n if (math_abs(this.m_upperAngle - this.m_lowerAngle) < 2.0 * Settings.angularSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointAngle <= this.m_lowerAngle) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atLowerLimit;\n\n } else if (jointAngle >= this.m_upperAngle) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atUpperLimit;\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\n // Solve motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits && fixedRotation == false) {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(this.m_mass.solve33(Cdot));\n\n if (this.m_limitState == LimitState.equalLimits) {\n this.m_impulse.add(impulse);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse < 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse > 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n\n } else {\n // Solve point-to-point constraint\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const impulse = this.m_mass.solve22(Vec2.neg(Cdot));\n\n this.m_impulse.x += impulse.x;\n this.m_impulse.y += impulse.y;\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n let angularError = 0.0;\n let positionError = 0.0;\n\n const fixedRotation = (this.m_invIA + this.m_invIB == 0.0);\n\n // Solve angular limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const angle = aB - aA - this.m_referenceAngle;\n let limitImpulse = 0.0;\n\n if (this.m_limitState == LimitState.equalLimits) {\n // Prevent large angular corrections\n const C = clamp(angle - this.m_lowerAngle, -Settings.maxAngularCorrection, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n angularError = math_abs(C);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n let C = angle - this.m_lowerAngle;\n angularError = -C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C + Settings.angularSlop, -Settings.maxAngularCorrection, 0.0);\n limitImpulse = -this.m_motorMass * C;\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n let C = angle - this.m_upperAngle;\n angularError = C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C - Settings.angularSlop, 0.0, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n }\n\n aA -= this.m_invIA * limitImpulse;\n aB += this.m_invIB * limitImpulse;\n }\n\n // Solve point-to-point constraint.\n {\n qA.setAngle(aA);\n qB.setAngle(aB);\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n const C = Vec2.zero();\n C.addCombine(1, cB, 1, rB);\n C.subCombine(1, cA, 1, rA);\n positionError = C.length();\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y;\n K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y;\n K.ey.x = K.ex.y;\n K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x;\n\n const impulse = Vec2.neg(K.solve(C));\n\n cA.subMul(mA, impulse);\n aA -= iA * Vec2.crossVec2Vec2(rA, impulse);\n\n cB.addMul(mB, impulse);\n aB += iB * Vec2.crossVec2Vec2(rB, impulse);\n }\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3, \n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointOpt extends JointOpt {\n /**\n * Enable/disable the joint limit.\n */\n enableLimit?: boolean;\n /**\n * The lower translation limit, usually in meters.\n */\n lowerTranslation?: number;\n /**\n * The upper translation limit, usually in meters.\n */\n upperTranslation?: number;\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorForce?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointDef extends JointDef, PrismaticJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation unit axis in bodyA.\n */\n localAxisA: Vec2Value;\n /**\n * referenceAngle The constrained angle between the bodies:\n * bodyB_angle - bodyA_angle.\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableLimit : false,\n lowerTranslation : 0.0,\n upperTranslation : 0.0,\n enableMotor : false,\n maxMotorForce : 0.0,\n motorSpeed : 0.0\n};\n\n/**\n * A prismatic joint. This joint provides one degree of freedom: translation\n * along an axis fixed in bodyA. Relative rotation is prevented. You can use a\n * joint limit to restrict the range of motion and a joint motor to drive the\n * motion or to model joint friction.\n */\nexport class PrismaticJoint extends Joint {\n static TYPE = \"prismatic-joint\" as const;\n\n /** @internal */ m_type: \"prismatic-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerTranslation: number;\n /** @internal */ m_upperTranslation: number;\n /** @internal */ m_maxMotorForce: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n /** @internal */ m_limitState: number; // TODO enum\n /** @internal */ m_axis: Vec2;\n /** @internal */ m_perp: Vec2;\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_s1: number;\n /** @internal */ m_s2: number;\n /** @internal */ m_a1: number;\n /** @internal */ m_a2: number;\n /** @internal */ m_K: Mat33;\n\n constructor(def: PrismaticJointDef);\n constructor(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: PrismaticJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PrismaticJoint)) {\n return new PrismaticJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PrismaticJoint.TYPE;\n\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, 0.0));\n this.m_localXAxisA.normalize();\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle();\n\n this.m_impulse = new Vec3();\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n\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.inactiveLimit;\n\n this.m_axis = Vec2.zero();\n this.m_perp = Vec2.zero();\n\n this.m_K = new Mat33();\n\n // Linear constraint (point-to-line)\n // d = p2 - p1 = x2 + r2 - x1 - r1\n // C = dot(perp, d)\n // Cdot = dot(d, cross(w1, perp)) + dot(perp, v2 + cross(w2, r2) - v1 -\n // cross(w1, r1))\n // = -dot(perp, v1) - dot(cross(d + r1, perp), w1) + dot(perp, v2) +\n // dot(cross(r2, perp), v2)\n // J = [-perp, -cross(d + r1, perp), perp, cross(r2,perp)]\n //\n // Angular constraint\n // C = a2 - a1 + a_initial\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n //\n // K = J * invM * JT\n //\n // J = [-a -s1 a s2]\n // [0 -1 0 1]\n // a = perp\n // s1 = cross(d + r1, a) = cross(p2 - x1, a)\n // s2 = cross(r2, a) = cross(p2 - x2, a)\n\n // Motor/Limit linear constraint\n // C = dot(ax1, d)\n // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) +\n // dot(cross(r2, ax1), v2)\n // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)]\n\n // Block Solver\n // We develop a block solver that includes the joint limit. This makes the\n // limit stiff (inelastic) even\n // when the mass has poor distribution (leading to large torques about the\n // joint anchor points).\n //\n // The Jacobian has 3 rows:\n // J = [-uT -s1 uT s2] // linear\n // [0 -1 0 1] // angular\n // [-vT -a1 vT a2] // limit\n //\n // u = perp\n // v = axis\n // s1 = cross(d + r1, u), s2 = cross(r2, u)\n // a1 = cross(d + r1, v), a2 = cross(r2, v)\n\n // M * (v2 - v1) = JT * df\n // J * v2 = bias\n //\n // v2 = v1 + invM * JT * df\n // J * (v1 + invM * JT * df) = bias\n // K * df = bias - J * v1 = -Cdot\n // K = J * invM * JT\n // Cdot = J * v1 - bias\n //\n // Now solve for f2.\n // df = f2 - f1\n // K * (f2 - f1) = -Cdot\n // f2 = invK * (-Cdot) + f1\n //\n // Clamp accumulated limit impulse.\n // lower: f2(3) = max(f2(3), 0)\n // upper: f2(3) = min(f2(3), 0)\n //\n // Solve for correct f2(1:2)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:3) * f1\n // = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:2) * f1(1:2) + K(1:2,3) * f1(3)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3)) +\n // K(1:2,1:2) * f1(1:2)\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n //\n // Now compute impulse to be applied:\n // df = f2 - f1\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PrismaticJoint {\n data = {...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 const joint = new PrismaticJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, 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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const pA = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const pB = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = this.m_bodyA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const rA = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter));\n const rB = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter));\n const p1 = Vec2.add(bA.m_sweep.c, rA);\n const p2 = Vec2.add(bB.m_sweep.c, rB);\n const d = Vec2.sub(p2, p1);\n const axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA);\n\n const vA = bA.m_linearVelocity;\n const vB = bB.m_linearVelocity;\n const wA = bA.m_angularVelocity;\n const wB = bB.m_angularVelocity;\n\n const speed = Vec2.dot(d, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB, wB, rB), Vec2.addCrossNumVec2(vA, wA, rA)));\n return speed;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit, usually in meters.\n */\n getLowerLimit(): number {\n return this.m_lowerTranslation;\n }\n\n /**\n * Get the upper joint limit, usually in meters.\n */\n getUpperLimit(): number {\n return this.m_upperTranslation;\n }\n\n /**\n * Set the joint limits, usually in meters.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(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.0;\n }\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in meters per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Set the maximum motor force, usually in N.\n */\n setMaxMotorForce(force: number): void {\n if (force == this.m_maxMotorForce) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorForce = force;\n }\n\n getMaxMotorForce(): number {\n return this.m_maxMotorForce;\n }\n\n /**\n * Get the motor speed, usually in meters per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Get the current motor force given the inverse time step, usually in N.\n */\n getMotorForce(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\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\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.y;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute motor Jacobian and effective mass.\n {\n this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_axis);\n this.m_a2 = Vec2.crossVec2Vec2(rB, this.m_axis);\n\n this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2\n * this.m_a2;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n }\n\n // Prismatic constraint.\n {\n this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_perp);\n this.m_s2 = Vec2.crossVec2Vec2(rB, this.m_perp);\n\n const s1test = Vec2.crossVec2Vec2(rA, this.m_perp);\n\n const k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2;\n const k12 = iA * this.m_s1 + iB * this.m_s2;\n const k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For bodies with fixed rotation.\n k22 = 1.0;\n }\n const k23 = iA * this.m_a1 + iB * this.m_a2;\n const k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2;\n\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\n // Compute motor and limit terms.\n if (this.m_enableLimit) {\n\n const jointTranslation = Vec2.dot(this.m_axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Settings.linearSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointTranslation <= this.m_lowerTranslation) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_limitState = LimitState.atLowerLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else if (jointTranslation >= this.m_upperTranslation) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_limitState = LimitState.atUpperLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n if (this.m_enableMotor == false) {\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse\n + this.m_impulse.z, this.m_axis);\n const LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1;\n const LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Solve linear motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits) {\n const Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB, vA)) + this.m_a2 * wB\n - this.m_a1 * wA;\n let impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorForce;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse,\n -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_axis);\n const LA = impulse * this.m_a1;\n const LB = impulse * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n const Cdot1 = Vec2.zero();\n Cdot1.x += Vec2.dot(this.m_perp, vB) + this.m_s2 * wB;\n Cdot1.x -= Vec2.dot(this.m_perp, vA) + this.m_s1 * wA;\n Cdot1.y = wB - wA;\n\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit) {\n // Solve prismatic and limit constraint in block form.\n let Cdot2 = 0;\n Cdot2 += Vec2.dot(this.m_axis, vB) + this.m_a2 * wB;\n Cdot2 -= Vec2.dot(this.m_axis, vA) + this.m_a1 * wA;\n\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const f1 = Vec3.clone(this.m_impulse);\n let df = this.m_K.solve33(Vec3.neg(Cdot));\n this.m_impulse.add(df);\n\n if (this.m_limitState == LimitState.atLowerLimit) {\n this.m_impulse.z = math_max(this.m_impulse.z, 0.0);\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n this.m_impulse.z = math_min(this.m_impulse.z, 0.0);\n }\n\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n const b = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y));\n const f2r = Vec2.add(this.m_K.solve22(b), Vec2.neo(f1.x, f1.y));\n this.m_impulse.x = f2r.x;\n this.m_impulse.y = f2r.y;\n\n df = Vec3.sub(this.m_impulse, f1);\n\n const P = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis);\n const LA = df.x * this.m_s1 + df.y + df.z * this.m_a1;\n const LB = df.x * this.m_s2 + df.y + df.z * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n // Limit is inactive, just solve the prismatic constraint in block form.\n const df = this.m_K.solve22(Vec2.neg(Cdot1));\n this.m_impulse.x += df.x;\n this.m_impulse.y += df.y;\n\n const P = Vec2.mulNumVec2(df.x, this.m_perp);\n const LA = df.x * this.m_s1 + df.y;\n const LB = df.x * this.m_s2 + df.y;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute fresh Jacobians\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const axis = Rot.mulVec2(qA, this.m_localXAxisA);\n const a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), axis);\n const a2 = Vec2.crossVec2Vec2(rB, axis);\n const perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), perp);\n const s2 = Vec2.crossVec2Vec2(rB, perp);\n\n let impulse = new Vec3();\n const C1 = Vec2.zero();\n C1.x = Vec2.dot(perp, d);\n C1.y = aB - aA - this.m_referenceAngle;\n\n let linearError = math_abs(C1.x);\n const angularError = math_abs(C1.y);\n\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n let active = false; // bool\n let C2 = 0.0;\n if (this.m_enableLimit) {\n\n const translation = Vec2.dot(axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * linearSlop) {\n // Prevent large angular corrections\n C2 = clamp(translation, -maxLinearCorrection, maxLinearCorrection);\n linearError = math_max(linearError, math_abs(translation));\n active = true;\n\n } else if (translation <= this.m_lowerTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_lowerTranslation + linearSlop,\n -maxLinearCorrection, 0.0);\n linearError = Math\n .max(linearError, this.m_lowerTranslation - translation);\n active = true;\n\n } else if (translation >= this.m_upperTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_upperTranslation - linearSlop, 0.0,\n maxLinearCorrection);\n linearError = Math\n .max(linearError, translation - this.m_upperTranslation);\n active = true;\n }\n }\n\n if (active) {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n const k13 = iA * s1 * a1 + iB * s2 * a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For fixed rotation\n k22 = 1.0;\n }\n const k23 = iA * a1 + iB * a2;\n const k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2;\n\n const 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\n const C = new Vec3();\n C.x = C1.x;\n C.y = C1.y;\n C.z = C2;\n\n impulse = K.solve33(Vec3.neg(C));\n } else {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n k22 = 1.0;\n }\n\n const K = new Mat22();\n K.ex.setNum(k11, k12);\n K.ey.setNum(k12, k22);\n\n const impulse1 = K.solve(Vec2.neg(C1));\n impulse.x = impulse1.x;\n impulse.y = impulse1.y;\n impulse.z = 0.0;\n }\n\n const P = Vec2.combine(impulse.x, perp, impulse.z, axis);\n const LA = impulse.x * s1 + impulse.y + impulse.z * a1;\n const LB = impulse.x * s2 + impulse.y + impulse.z * a2;\n\n cA.subMul(mA, P);\n aA -= iA * LA;\n cB.addMul(mB, P);\n aB += iB * LB;\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError <= Settings.linearSlop\n && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { } from \"../../common/Math\";\nimport { Vec2 } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { RevoluteJoint } from \"./RevoluteJoint\";\nimport { PrismaticJoint } from \"./PrismaticJoint\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointOpt extends JointOpt {\n /**\n * The gear ratio. See {@link GearJoint} for explanation.\n */\n ratio?: number;\n}\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointDef extends JointDef, GearJointOpt {\n /**\n * The first revolute/prismatic joint attached to the gear joint.\n */\n joint1: RevoluteJoint | PrismaticJoint;\n /**\n * The second prismatic/revolute joint attached to the gear joint.\n */\n joint2: RevoluteJoint | PrismaticJoint;\n}\n\n/** @internal */ const DEFAULTS = {\n ratio : 1.0\n};\n\n/**\n * A gear joint is used to connect two joints together. Either joint can be a\n * revolute or prismatic joint. You specify a gear ratio to bind the motions\n * together: coordinate1 + ratio * coordinate2 = constant\n *\n * The ratio can be negative or positive. If one joint is a revolute joint and\n * the other joint is a prismatic joint, then the ratio will have units of\n * length or units of 1/length. Warning: You have to manually destroy the gear\n * joint if joint1 or joint2 is destroyed.\n *\n * This definition requires two existing revolute or prismatic joints (any\n * combination will work).\n */\nexport class GearJoint extends Joint {\n static TYPE = \"gear-joint\" as const;\n\n /** @internal */ m_type: \"gear-joint\";\n /** @internal */ m_joint1: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_joint2: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_type1: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_type2: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_bodyC: Body;\n /** @internal */ m_localAnchorC: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_referenceAngleA: number;\n /** @internal */ m_localAxisC: Vec2;\n /** @internal */ m_bodyD: Body;\n /** @internal */ m_localAnchorD: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngleB: number;\n /** @internal */ m_localAxisD: Vec2;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_lcA: Vec2;\n /** @internal */ m_lcB: Vec2;\n /** @internal */ m_lcC: Vec2;\n /** @internal */ m_lcD: Vec2;\n /** @internal */ m_mA: number;\n /** @internal */ m_mB: number;\n /** @internal */ m_mC: number;\n /** @internal */ m_mD: number;\n /** @internal */ m_iA: number;\n /** @internal */ m_iB: number;\n /** @internal */ m_iC: number;\n /** @internal */ m_iD: number;\n /** @internal */ m_JvAC: Vec2;\n /** @internal */ m_JvBD: Vec2;\n /** @internal */ m_JwA: number;\n /** @internal */ m_JwB: number;\n /** @internal */ m_JwC: number;\n /** @internal */ m_JwD: number;\n /** @internal */ m_mass: number;\n\n constructor(def: GearJointDef);\n constructor(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number);\n constructor(def: GearJointDef, bodyA?: Body, bodyB?: Body, joint1?: RevoluteJoint | PrismaticJoint, joint2?: RevoluteJoint | PrismaticJoint, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof GearJoint)) {\n return new GearJoint(def, bodyA, bodyB, joint1, joint2, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = GearJoint.TYPE;\n\n _ASSERT && console.assert(joint1.m_type === RevoluteJoint.TYPE || joint1.m_type === PrismaticJoint.TYPE);\n _ASSERT && console.assert(joint2.m_type === RevoluteJoint.TYPE || joint2.m_type === PrismaticJoint.TYPE);\n\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\n this.m_type1 = this.m_joint1.getType() as \"revolute-joint\" | \"prismatic-joint\";\n this.m_type2 = this.m_joint2.getType() as \"revolute-joint\" | \"prismatic-joint\";\n\n // joint1 connects body A to body C\n // joint2 connects body B to body D\n\n let coordinateA: number;\n let coordinateB: number;\n\n // TODO_ERIN there might be some problem with the joint edges in Joint.\n\n this.m_bodyC = this.m_joint1.getBodyA();\n this.m_bodyA = this.m_joint1.getBodyB();\n\n // Get geometry of joint1\n const xfA = this.m_bodyA.m_xf;\n const aA = this.m_bodyA.m_sweep.a;\n const xfC = this.m_bodyC.m_xf;\n const aC = this.m_bodyC.m_sweep.a;\n\n if (this.m_type1 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint1 as RevoluteJoint;\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\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const prismatic = this.m_joint1 as PrismaticJoint;\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\n const pC = this.m_localAnchorC;\n const pA = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA.q, this.m_localAnchorA), Vec2.sub(xfA.p, xfC.p)));\n coordinateA = Vec2.dot(pA, this.m_localAxisC) - Vec2.dot(pC, this.m_localAxisC);\n }\n\n this.m_bodyD = this.m_joint2.getBodyA();\n this.m_bodyB = this.m_joint2.getBodyB();\n\n // Get geometry of joint2\n const xfB = this.m_bodyB.m_xf;\n const aB = this.m_bodyB.m_sweep.a;\n const xfD = this.m_bodyD.m_xf;\n const aD = this.m_bodyD.m_sweep.a;\n\n if (this.m_type2 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint2 as RevoluteJoint;\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const prismatic = this.m_joint2 as PrismaticJoint;\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\n const pD = this.m_localAnchorD;\n const pB = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB.q, this.m_localAnchorB), Vec2.sub(xfB.p, xfD.p)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n this.m_constant = coordinateA + this.m_ratio * coordinateB;\n\n this.m_impulse = 0.0;\n\n // Gear Joint:\n // C0 = (coordinate1 + ratio * coordinate2)_initial\n // C = (coordinate1 + ratio * coordinate2) - C0 = 0\n // J = [J1 ratio * J2]\n // K = J * invM * JT\n // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T\n //\n // Revolute:\n // coordinate = rotation\n // Cdot = angularVelocity\n // J = [0 0 1]\n // K = J * invM * JT = invI\n //\n // Prismatic:\n // coordinate = dot(p - pg, ug)\n // Cdot = dot(v + cross(w, r), ug)\n // J = [ug cross(r, ug)]\n // K = J * invM * JT = invMass + invI * cross(r, ug)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n joint1: this.m_joint1,\n joint2: this.m_joint2,\n ratio: this.m_ratio,\n\n // _constant: this.m_constant,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): GearJoint {\n data = {...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 const joint = new GearJoint(data);\n // if (data._constant) joint.m_constant = data._constant;\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n // todo: implement other fields\n if (Number.isFinite(def.ratio)) {\n this.m_ratio = def.ratio;\n }\n }\n\n /**\n * Get the first joint.\n */\n getJoint1(): Joint {\n return this.m_joint1;\n }\n\n /**\n * Get the second joint.\n */\n getJoint2(): Joint {\n return this.m_joint2;\n }\n\n /**\n * Set the gear ratio.\n */\n setRatio(ratio: number): void {\n _ASSERT && console.assert(Number.isFinite(ratio));\n this.m_ratio = ratio;\n }\n\n /**\n * Get the gear ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n const L = this.m_impulse * this.m_JwA;\n return inv_dt * L;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const aC = this.m_bodyC.c_position.a;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n\n const aD = this.m_bodyD.c_position.a;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n this.m_mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n this.m_JvAC = Vec2.zero();\n this.m_JwA = 1.0;\n this.m_JwC = 1.0;\n this.m_mass += this.m_iA + this.m_iC;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = 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(rA, 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\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 const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n // Compute effective mass.\n this.m_mass = this.m_mass > 0.0 ? 1.0 / this.m_mass : 0.0;\n\n if (step.warmStarting) {\n vA.addMul(this.m_mA * this.m_impulse, this.m_JvAC);\n wA += this.m_iA * this.m_impulse * this.m_JwA;\n\n vB.addMul(this.m_mB * this.m_impulse, this.m_JvBD);\n wB += this.m_iB * this.m_impulse * this.m_JwB;\n\n vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC);\n wC -= this.m_iC * this.m_impulse * this.m_JwC;\n\n vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD);\n wD -= this.m_iD * this.m_impulse * this.m_JwD;\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n let Cdot = Vec2.dot(this.m_JvAC, vA) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB) - 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\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n vA.addMul(this.m_mA * impulse, this.m_JvAC);\n wA += this.m_iA * impulse * this.m_JwA;\n vB.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\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n const cC = this.m_bodyC.c_position.c;\n let aC = this.m_bodyC.c_position.a;\n const cD = this.m_bodyD.c_position.c;\n let aD = this.m_bodyD.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n const linearError = 0.0;\n\n let coordinateA: number;\n let coordinateB: number;\n\n let JvAC: Vec2;\n let JvBD: Vec2;\n let JwA: number;\n let JwB: number;\n let JwC: number;\n let JwD: number;\n let mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n JvAC = Vec2.zero();\n JwA = 1.0;\n JwC = 1.0;\n mass += this.m_iA + this.m_iC;\n\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA);\n JvAC = u;\n JwC = Vec2.crossVec2Vec2(rC, u);\n JwA = Vec2.crossVec2Vec2(rA, u);\n mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA;\n\n const pC = Vec2.sub(this.m_localAnchorC, this.m_lcC);\n const pA = Rot.mulTVec2(qC, Vec2.add(rA, Vec2.sub(cA, cC)));\n coordinateA = Vec2.dot(Vec2.sub(pA, pC), this.m_localAxisC);\n }\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n const pD = Vec2.sub(this.m_localAnchorD, this.m_lcD);\n const pB = Rot.mulTVec2(qD, Vec2.add(rB, Vec2.sub(cB, cD)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n const C = (coordinateA + this.m_ratio * coordinateB) - this.m_constant;\n\n let impulse = 0.0;\n if (mass > 0.0) {\n impulse = -C / mass;\n }\n\n cA.addMul(this.m_mA * impulse, JvAC);\n aA += this.m_iA * impulse * JwA;\n cB.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\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\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\n // TODO_ERIN not implemented\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointOpt extends JointOpt {\n /**\n * The bodyB angle minus bodyA angle in radians.\n */\n angularOffset?: number;\n /**\n * The maximum motor force in N.\n */\n maxForce?: number;\n /**\n * The maximum motor torque in N-m.\n */\n maxTorque?: number;\n /**\n * Position correction factor in the range [0,1].\n */\n correctionFactor?: number;\n /**\n * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters.\n */\n linearOffset?: Vec2Value;\n}\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointDef extends JointDef, MotorJointOpt {\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 1.0,\n maxTorque : 1.0,\n correctionFactor : 0.3\n};\n\n/**\n * A motor joint is used to control the relative motion between two bodies. A\n * typical usage is to control the movement of a dynamic body with respect to\n * the ground.\n */\nexport class MotorJoint extends Joint {\n static TYPE = \"motor-joint\" as const;\n\n /** @internal */ m_type: \"motor-joint\";\n /** @internal */ m_linearOffset: Vec2;\n /** @internal */ m_angularOffset: number;\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n /** @internal */ m_correctionFactor: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_linearError: Vec2;\n /** @internal */ m_angularError: number;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: MotorJointDef);\n constructor(def: MotorJointOpt, bodyA: Body, bodyB: Body);\n constructor(def: MotorJointDef | MotorJointOpt, bodyA?: Body, bodyB?: Body) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MotorJoint)) {\n return new MotorJoint(def, bodyA, bodyB);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MotorJoint.TYPE;\n\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\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n this.m_correctionFactor = def.correctionFactor;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n //\n // r1 = offset - c1\n // r2 = -c2\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n correctionFactor: this.m_correctionFactor,\n\n linearOffset: this.m_linearOffset,\n angularOffset: this.m_angularOffset,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MotorJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new MotorJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Set the position correction factor in the range [0,1].\n */\n setCorrectionFactor(factor: number): void {\n _ASSERT && console.assert(Number.isFinite(factor) && 0.0 <= factor && factor <= 1.0);\n this.m_correctionFactor = factor;\n }\n\n /**\n * Get the position correction factor in the range [0,1].\n */\n getCorrectionFactor(): number {\n return this.m_correctionFactor;\n }\n\n /**\n * Set/get the target linear offset, in frame A, in meters.\n */\n setLinearOffset(linearOffset: Vec2Value): void {\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\n getLinearOffset(): Vec2 {\n return this.m_linearOffset;\n }\n\n /**\n * Set/get the target angular offset, in radians.\n */\n setAngularOffset(angularOffset: number): void {\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\n getAngularOffset(): number {\n return this.m_angularOffset;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getPosition();\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getPosition();\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Upper 2 by 2 of K for point to point\n const 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\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n this.m_linearError = Vec2.zero();\n this.m_linearError.addCombine(1, cB, 1, this.m_rB);\n this.m_linearError.subCombine(1, cA, 1, this.m_rA);\n\n this.m_angularError = aB - aA - this.m_angularOffset;\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n const inv_h = step.inv_dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError);\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = Vec2.clone(this.m_linearImpulse);\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n this.m_linearImpulse.clamp(maxImpulse);\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Transform } from \"../../common/Transform\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointOpt extends JointOpt {\n /**\n * [maxForce = 0.0] The maximum constraint force that can be exerted to move\n * the candidate body. Usually you will express as some multiple of the\n * weight (multiplier * mass * gravity).\n */\n maxForce?: number;\n /**\n * [frequencyHz = 5.0] The response speed.\n */\n frequencyHz?: number;\n /**\n * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical\n * damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointDef extends JointDef, MouseJointOpt {\n /**\n * The initial world target point. This is assumed to coincide with the body\n * anchor initially.\n */\n target: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n frequencyHz : 5.0,\n dampingRatio : 0.7\n};\n\n/**\n * A mouse joint is used to make a point on a body track a specified world\n * point. This a soft constraint with a maximum force. This allows the\n * constraint to stretch and without applying huge forces.\n *\n * You need to call setTarget(target) every time that mouse is \n * moved, to track the new location of the mouse.\n *\n * NOTE: this joint is not documented in the manual because it was developed to\n * be used in the testbed. If you want to learn how to use the mouse joint, look\n * at the testbed.\n */\nexport class MouseJoint extends Joint {\n static TYPE = \"mouse-joint\" as const;\n\n /** @internal */ m_type: \"mouse-joint\";\n /** @internal */ m_targetA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_impulse: Vec2;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_beta: number;\n /** @internal */ m_gamma: number;\n // Solver temp\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat22;\n /** @internal */ m_C: Vec2;\n\n constructor(def: MouseJointDef);\n constructor(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value);\n constructor(def: MouseJointDef, bodyA?: Body, bodyB?: Body, target?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MouseJoint)) {\n return new MouseJoint(def, bodyA, bodyB, target);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MouseJoint.TYPE;\n\n _ASSERT && console.assert(Number.isFinite(def.maxForce) && def.maxForce >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.frequencyHz) && def.frequencyHz >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.dampingRatio) && def.dampingRatio >= 0.0);\n\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\n this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), this.m_targetA);\n\n this.m_maxForce = def.maxForce;\n this.m_impulse = Vec2.zero();\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_beta = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rB = Vec2.zero();\n this.m_localCenterB = Vec2.zero();\n this.m_invMassB = 0.0;\n this.m_invIB = 0.0;\n this.m_mass = new Mat22();\n this.m_C = Vec2.zero();\n\n // p = attached point, m = mouse point\n // C = p - m\n // Cdot = v\n // = v + cross(w, r)\n // J = [I r_skew]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n target: this.m_targetA,\n maxForce: this.m_maxForce,\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n _localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MouseJoint {\n data = {...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 const joint = new MouseJoint(data);\n if (data._localAnchorB) {\n joint.m_localAnchorB = data._localAnchorB;\n }\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Use this to update the target point.\n */\n setTarget(target: Vec2Value): void {\n if (Vec2.areEqual(target, this.m_targetA)) return;\n this.m_bodyB.setAwake(true);\n this.m_targetA.set(target);\n }\n\n getTarget(): Vec2 {\n return this.m_targetA;\n }\n\n /**\n * Set the maximum force in Newtons.\n */\n setMaxForce(force: number): void {\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum force in Newtons.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the frequency in Hertz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get the frequency in Hertz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set the damping ratio (dimensionless).\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get the damping ratio (dimensionless).\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return Vec2.clone(this.m_targetA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_impulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * 0.0;\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_targetA.sub(newOrigin);\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const position = this.m_bodyB.c_position;\n const velocity = this.m_bodyB.c_velocity;\n\n const cB = position.c;\n const aB = position.a;\n const vB = velocity.v;\n let wB = velocity.w;\n\n const qB = Rot.neo(aB);\n\n const mass = this.m_bodyB.getMass();\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = mass * (omega * omega);\n\n // magic formulas\n // gamma has units of inverse mass.\n // beta has units of inverse time.\n const h = step.dt;\n _ASSERT && console.assert(d + h * k > EPSILON);\n this.m_gamma = h * (d + h * k);\n if (this.m_gamma != 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n this.m_beta = h * k * this.m_gamma;\n\n // Compute the effective mass matrix.\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) *\n // invI2 * skew(r2)]\n // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y\n // -r1.x*r1.y]\n // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x]\n const K = new Mat22();\n K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y\n + 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\n + this.m_gamma;\n\n this.m_mass = K.getInverse();\n\n this.m_C.setVec2(cB);\n this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA);\n this.m_C.mul(this.m_beta);\n\n // Cheat with some damping\n wB *= 0.98;\n\n if (step.warmStarting) {\n this.m_impulse.mul(step.dtRatio);\n vB.addMul(this.m_invMassB, this.m_impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse);\n\n } else {\n this.m_impulse.setZero();\n }\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const velocity = this.m_bodyB.c_velocity;\n const vB = Vec2.clone(velocity.v);\n let wB = velocity.w;\n\n // Cdot = v + cross(w, r)\n\n const Cdot = Vec2.crossNumVec2(wB, this.m_rB);\n Cdot.add(vB);\n\n Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse);\n Cdot.neg();\n\n let impulse = Mat22.mulVec2(this.m_mass, Cdot);\n\n const oldImpulse = Vec2.clone(this.m_impulse);\n this.m_impulse.add(impulse);\n const maxImpulse = step.dt * this.m_maxForce;\n this.m_impulse.clamp(maxImpulse);\n impulse = Vec2.sub(this.m_impulse, oldImpulse);\n\n vB.addMul(this.m_invMassB, impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\n// tslint:disable-next-line:no-empty-interface\nexport interface PulleyJointOpt extends JointOpt {\n}\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\nexport interface PulleyJointDef extends JointDef, PulleyJointOpt {\n /**\n * The first ground anchor in world coordinates. This point never moves.\n */\n groundAnchorA: Vec2Value;\n /**\n * The second ground anchor in world coordinates. This point never moves.\n */\n groundAnchorB: Vec2Value;\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The reference length for the segment attached to bodyA.\n */\n lengthA: number;\n /**\n * The reference length for the segment attached to bodyB.\n */\n lengthB: number;\n /**\n * The pulley ratio, used to simulate a block-and-tackle.\n */\n ratio: number;\n\n /** @hidden */ anchorA?: Vec2Value;\n /** @hidden */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n collideConnected : true\n};\n\n/**\n * The pulley joint is connected to two bodies and two fixed ground points. The\n * pulley supports a ratio such that: length1 + ratio * length2 <= constant\n *\n * Yes, the force transmitted is scaled by the ratio.\n *\n * Warning: the pulley joint can get a bit squirrelly by itself. They often work\n * better when combined with prismatic joints. You should also cover the the\n * anchor points with static shapes to prevent one side from going to zero\n * length.\n */\nexport class PulleyJoint extends Joint {\n static TYPE = \"pulley-joint\" as const;\n // static MIN_PULLEY_LENGTH: number = 2.0; // TODO where this is used?\n\n /** @internal */ m_type: \"pulley-joint\";\n /** @internal */ m_groundAnchorA: Vec2;\n /** @internal */ m_groundAnchorB: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_lengthA: number;\n /** @internal */ m_lengthB: number;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_uA: Vec2;\n /** @internal */ m_uB: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n constructor(def: PulleyJointDef);\n constructor(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number);\n constructor(def: PulleyJointDef, bodyA?: Body, bodyB?: Body, groundA?: Vec2Value, groundB?: Vec2Value, anchorA?: Vec2Value, anchorB?: Vec2Value, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PulleyJoint)) {\n return new PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PulleyJoint.TYPE;\n this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1.0, 1.0));\n this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1.0, 1.0));\n this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1.0, 0.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\n _ASSERT && console.assert(ratio > EPSILON);\n\n this.m_constant = this.m_lengthA + this.m_ratio * this.m_lengthB;\n\n this.m_impulse = 0.0;\n\n // Pulley:\n // length1 = norm(p1 - s1)\n // length2 = norm(p2 - s2)\n // C0 = (length1 + ratio * length2)_initial\n // C = C0 - (length1 + ratio * length2)\n // u1 = (p1 - s1) / norm(p1 - s1)\n // u2 = (p2 - s2) / norm(p2 - s2)\n // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2))\n // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 *\n // cross(r2, u2)^2)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PulleyJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new PulleyJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Get the first ground anchor.\n */\n getGroundAnchorA(): Vec2 {\n return this.m_groundAnchorA;\n }\n\n /**\n * Get the second ground anchor.\n */\n getGroundAnchorB(): Vec2 {\n return this.m_groundAnchorB;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getLengthA(): number {\n return this.m_lengthA;\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getLengthB(): number {\n return this.m_lengthB;\n }\n\n /**\n * Get the pulley ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getCurrentLengthA(): number {\n const p = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const s = this.m_groundAnchorA;\n return Vec2.distance(p, s);\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getCurrentLengthB(): number {\n const p = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const s = this.m_groundAnchorB;\n return Vec2.distance(p, s);\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n *\n * @param newOrigin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_groundAnchorA.sub(newOrigin);\n this.m_groundAnchorB.sub(newOrigin);\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // Get the pulley axes.\n this.m_uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n this.m_uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = this.m_uA.length();\n const lengthB = this.m_uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n this.m_uA.mul(1.0 / lengthA);\n } else {\n this.m_uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n this.m_uB.mul(1.0 / lengthB);\n } else {\n this.m_uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA);\n const ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n this.m_mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support variable time steps.\n this.m_impulse *= step.dtRatio;\n\n // Warm starting.\n const PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB);\n\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n\n const Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB);\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const PA = Vec2.mulNumVec2(-impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB);\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // Get the pulley axes.\n const uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n const uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = uA.length();\n const lengthB = uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n uA.mul(1.0 / lengthA);\n } else {\n uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n uB.mul(1.0 / lengthB);\n } else {\n uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(rA, uA);\n const ruB = Vec2.crossVec2Vec2(rB, uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n let mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (mass > 0.0) {\n mass = 1.0 / mass;\n }\n\n const C = this.m_constant - lengthA - this.m_ratio * lengthB;\n const linearError = math_abs(C);\n\n const impulse = -mass * C;\n\n const PA = Vec2.mulNumVec2(-impulse, uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB);\n\n cA.addMul(this.m_invMassA, PA);\n aA += this.m_invIA * Vec2.crossVec2Vec2(rA, PA);\n cB.addMul(this.m_invMassB, PB);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, PB);\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointOpt extends JointOpt {\n /**\n * The maximum length of the rope.\n * Warning: this must be larger than linearSlop or the joint will have no effect.\n */\n maxLength?: number;\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointDef extends JointDef, RopeJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxLength : 0.0,\n};\n\n/**\n * A rope joint enforces a maximum distance between two points on two bodies. It\n * has no other effect.\n *\n * Warning: if you attempt to change the maximum length during the simulation\n * you will get some non-physical behavior.\n *\n * A model that would allow you to dynamically modify the length would have some\n * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you\n * want to dynamically control length.\n */\nexport class RopeJoint extends Joint {\n static TYPE = \"rope-joint\" as const;\n\n /** @internal */ m_type: \"rope-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n /** @internal */ m_maxLength: number;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_length: number;\n /** @internal */ m_state: number; // TODO enum\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n constructor(def: RopeJointDef);\n constructor(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RopeJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RopeJoint)) {\n return new RopeJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = RopeJoint.TYPE;\n this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1.0, 0.0));\n\n this.m_maxLength = def.maxLength;\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_length = 0.0;\n this.m_state = LimitState.inactiveLimit;\n\n // Limit:\n // C = norm(pB - pA) - L\n // u = (pB - pA) / norm(pB - pA)\n // Cdot = dot(u, vB + cross(wB, rB) - vA - cross(wA, rA))\n // J = [-u -cross(rA, u) u cross(rB, u)]\n // K = J * invM * JT\n // = invMassA + invIA * cross(rA, u)^2 + invMassB + invIB * cross(rB, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n maxLength: this.m_maxLength,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): RopeJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RopeJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n if (Number.isFinite(def.maxLength)) {\n this.m_maxLength = def.maxLength;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum length of the rope.\n */\n setMaxLength(length: number): void {\n this.m_maxLength = length;\n }\n\n /**\n * Get the maximum length of the rope.\n */\n getMaxLength(): number {\n return this.m_maxLength;\n }\n\n getLimitState(): number {\n // TODO LimitState\n return this.m_state;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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, cB, 1, this.m_rB);\n this.m_u.subCombine(1, cA, 1, this.m_rA);\n\n this.m_length = this.m_u.length();\n\n const C = this.m_length - this.m_maxLength;\n if (C > 0.0) {\n this.m_state = LimitState.atUpperLimit;\n } else {\n this.m_state = LimitState.inactiveLimit;\n }\n\n if (this.m_length > Settings.linearSlop) {\n this.m_u.mul(1.0 / this.m_length);\n } else {\n this.m_u.setZero();\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n return;\n }\n\n // Compute effective mass.\n const crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n const invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB;\n\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.addCrossNumVec2(vA, wA, this.m_rA);\n const vpB = Vec2.addCrossNumVec2(vB, wB, this.m_rB);\n const C = this.m_length - this.m_maxLength;\n let Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA));\n\n // Predictive constraint.\n if (C < 0.0) {\n Cdot += step.inv_dt * C;\n }\n\n let impulse = -this.m_mass * Cdot;\n const oldImpulse = this.m_impulse;\n this.m_impulse = math_min(0.0, this.m_impulse + impulse);\n impulse = this.m_impulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.zero();\n u.addCombine(1, cB, 1, rB);\n u.subCombine(1, cA, 1, rA);\n\n const length = u.normalize();\n let C = length - this.m_maxLength;\n\n C = clamp(C, 0.0, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return length - this.m_maxLength < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness\n * with a value of 0.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle?: number;\n}\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointDef extends JointDef, WeldJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0,\n};\n\n/**\n * A weld joint essentially glues two bodies together. A weld joint may distort\n * somewhat because the island constraint solver is approximate.\n */\nexport class WeldJoint extends Joint {\n static TYPE = \"weld-joint\" as const;\n\n /** @internal */ m_type: \"weld-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_impulse: Vec3;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat33;\n\n constructor(def: WeldJointDef);\n constructor(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: WeldJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WeldJoint)) {\n return new WeldJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = WeldJoint.TYPE;\n\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\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_impulse = new Vec3();\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rA;\n this.m_rB;\n this.m_localCenterA;\n this.m_localCenterB;\n this.m_invMassA;\n this.m_invMassB;\n this.m_invIA;\n this.m_invIB;\n this.m_mass = new Mat33();\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // / = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // C = angle2 - angle1 - referenceAngle\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WeldJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WeldJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Set frequency in Hz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get frequency in Hz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set damping ratio.\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get damping ratio.\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const 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\n * 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\n * 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\n if (this.m_frequencyHz > 0.0) {\n K.getInverse22(this.m_mass);\n\n let invM = iA + iB;\n const m = invM > 0.0 ? 1.0 / invM : 0.0;\n\n const C = aB - aA - this.m_referenceAngle;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * m * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = m * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invM += this.m_gamma;\n this.m_mass.ez.z = invM != 0.0 ? 1.0 / invM : 0.0;\n } else if (K.ez.z == 0.0) {\n K.getInverse22(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n } else {\n K.getSymInverse33(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n if (this.m_frequencyHz > 0.0) {\n const Cdot2 = wB - wA;\n\n const impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z);\n this.m_impulse.z += impulse2;\n\n wA -= iA * impulse2;\n wB += iB * impulse2;\n\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n\n const impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1));\n this.m_impulse.x += impulse1.x;\n this.m_impulse.y += impulse1.y;\n\n const P = Vec2.clone(impulse1);\n\n vA.subMul(mA, P);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(mB, P);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, P);\n } else {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot));\n this.m_impulse.add(impulse);\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n let positionError: number;\n let angularError: number;\n\n const K = new Mat33();\n K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB;\n K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB;\n K.ez.x = -rA.y * iA - rB.y * iB;\n K.ex.y = K.ey.x;\n K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB;\n K.ez.y = rA.x * iA + rB.x * iB;\n K.ex.z = K.ez.x;\n K.ey.z = K.ez.y;\n K.ez.z = iA + iB;\n\n if (this.m_frequencyHz > 0.0) {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n positionError = C1.length();\n angularError = 0.0;\n\n const P = Vec2.neg(K.solve22(C1));\n\n cA.subMul(mA, P);\n aA -= iA * Vec2.crossVec2Vec2(rA, P);\n\n cB.addMul(mB, P);\n aB += iB * Vec2.crossVec2Vec2(rB, P);\n } else {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n const C2 = aB - aA - this.m_referenceAngle;\n\n positionError = C1.length();\n angularError = math_abs(C2);\n\n const C = new Vec3(C1.x, C1.y, C2);\n\n let impulse = new Vec3();\n if (K.ez.z > 0.0) {\n impulse = Vec3.neg(K.solve33(C));\n } else {\n const impulse2 = Vec2.neg(K.solve22(C1));\n impulse.set(impulse2.x, impulse2.y, 0.0);\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n cA.subMul(mA, P);\n aA -= iA * (Vec2.crossVec2Vec2(rA, P) + impulse.z);\n\n cB.addMul(mB, P);\n aB += iB * (Vec2.crossVec2Vec2(rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointOpt extends JointOpt {\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n /**\n * Suspension frequency, zero indicates no suspension.\n */\n frequencyHz?: number;\n /**\n * Suspension damping ratio, one indicates critical damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointDef extends JointDef, WheelJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation axis in bodyA.\n */\n localAxisA: Vec2Value;\n\n /** @internal renamed to localAxisA */\n localAxis?: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableMotor : false,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n frequencyHz : 2.0,\n dampingRatio : 0.7,\n};\n\n/**\n * A wheel joint. This joint provides two degrees of freedom: translation along\n * an axis fixed in bodyA and rotation in the plane. In other words, it is a\n * point to line constraint with a rotational motor and a linear spring/damper.\n * This joint is designed for vehicle suspensions.\n */\nexport class WheelJoint extends Joint {\n static TYPE = \"wheel-joint\" as const;\n\n /** @internal */ m_type: \"wheel-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_springMass: number;\n /** @internal */ m_springImpulse: number;\n\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableMotor: boolean;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n /** @internal */ m_ax: Vec2;\n /** @internal */ m_ay: Vec2;\n /** @internal */ m_sAx: number;\n /** @internal */ m_sBx: number;\n /** @internal */ m_sAy: number;\n /** @internal */ m_sBy: number;\n\n constructor(def: WheelJointDef);\n constructor(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: WheelJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WheelJoint)) {\n return new WheelJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_ax = Vec2.zero();\n this.m_ay = Vec2.zero();\n\n this.m_type = WheelJoint.TYPE;\n\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\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 // localAxis is renamed to localAxisA, this is for backward compatibility\n this.m_localXAxisA = Vec2.clone(def.localAxis);\n } else {\n this.m_localXAxisA = Vec2.neo(1.0, 0.0);\n }\n\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n this.m_springMass = 0.0;\n this.m_springImpulse = 0.0;\n\n this.m_maxMotorTorque = def.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed;\n this.m_enableMotor = def.enableMotor;\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Linear constraint (point-to-line)\n // d = pB - pA = xB + rB - xA - rA\n // C = dot(ay, d)\n // Cdot = dot(d, cross(wA, ay)) + dot(ay, vB + cross(wB, rB) - vA - cross(wA,\n // rA))\n // = -dot(ay, vA) - dot(cross(d + rA, ay), wA) + dot(ay, vB) + dot(cross(rB,\n // ay), vB)\n // J = [-ay, -cross(d + rA, ay), ay, cross(rB, ay)]\n\n // Spring linear constraint\n // C = dot(ax, d)\n // Cdot = = -dot(ax, vA) - dot(cross(d + rA, ax), wA) + dot(ax, vB) +\n // dot(cross(rB, ax), vB)\n // J = [-ax -cross(d+rA, ax) ax cross(rB, ax)]\n\n // Motor rotational constraint\n // Cdot = wB - wA\n // J = [0 0 -1 0 0 1]\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WheelJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WheelJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, def.localAxisA));\n }\n if (def.enableMotor !== undefined) {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const pA = bA.getWorldPoint(this.m_localAnchorA);\n const pB = bB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = bA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const wA = this.m_bodyA.m_angularVelocity;\n const wB = this.m_bodyB.m_angularVelocity;\n return wB - wA;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed, usually in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set/Get the maximum motor force, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Get the current motor torque given the inverse time step, usually in N-m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set/Get the spring frequency in hertz. Setting the frequency to zero disables\n * the spring.\n */\n setSpringFrequencyHz(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getSpringFrequencyHz(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set/Get the spring damping ratio\n */\n setSpringDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getSpringDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n // Point to line constraint\n {\n this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA);\n this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ay);\n this.m_sBy = Vec2.crossVec2Vec2(rB, this.m_ay);\n\n this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy\n * this.m_sBy;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n }\n\n // Spring constraint\n this.m_springMass = 0.0;\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n if (this.m_frequencyHz > 0.0) {\n this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ax);\n this.m_sBx = Vec2.crossVec2Vec2(rB, this.m_ax);\n\n const invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx\n * this.m_sBx;\n\n if (invMass > 0.0) {\n this.m_springMass = 1.0 / invMass;\n\n const C = Vec2.dot(d, this.m_ax);\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const damp = 2.0 * this.m_springMass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_springMass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (damp + h * k);\n if (this.m_gamma > 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n\n this.m_bias = C * h * k * this.m_gamma;\n\n this.m_springMass = invMass + this.m_gamma;\n if (this.m_springMass > 0.0) {\n this.m_springMass = 1.0 / this.m_springMass;\n }\n }\n } else {\n this.m_springImpulse = 0.0;\n }\n\n // Rotational motor\n if (this.m_enableMotor) {\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n } else {\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse *= step.dtRatio;\n this.m_springImpulse *= step.dtRatio;\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax);\n const LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse;\n const LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse;\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * LA;\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * LB;\n\n } else {\n this.m_impulse = 0.0;\n this.m_springImpulse = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Solve spring constraint\n {\n const Cdot = Vec2.dot(this.m_ax, vB) - Vec2.dot(this.m_ax, vA) + this.m_sBx * wB - this.m_sAx * wA;\n const impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse);\n this.m_springImpulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ax);\n const LA = impulse * this.m_sAx;\n const LB = impulse * this.m_sBx;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n // Solve rotational motor constraint\n {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve point to line constraint\n {\n const Cdot = Vec2.dot(this.m_ay, vB) - Vec2.dot(this.m_ay, vA) + this.m_sBy * wB - this.m_sAy * wA;\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ay);\n const LA = impulse * this.m_sAy;\n const LB = impulse * this.m_sBy;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const ay = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), ay);\n const sBy = Vec2.crossVec2Vec2(rB, ay);\n\n const C = Vec2.dot(d, ay);\n\n const 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\n const impulse = k != 0.0 ? -C / k : 0.0;\n\n const P = Vec2.mulNumVec2(impulse, ay);\n const LA = impulse * sAy;\n const LB = impulse * sBy;\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * LA;\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * LB;\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) <= Settings.linearSlop;\n }\n\n}\n","import { World } from \"../dynamics/World\";\nimport { Body } from \"../dynamics/Body\";\nimport { Joint } from \"../dynamics/Joint\";\nimport { Fixture } from \"../dynamics/Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { Vec2 } from \"../common/Vec2\";\nimport { Vec3 } from \"../common/Vec3\";\nimport { ChainShape } from \"../collision/shape/ChainShape\";\n// import { BoxShape } from \"../collision/shape/BoxShape\";\nimport { EdgeShape } from \"../collision/shape/EdgeShape\";\nimport { PolygonShape } from \"../collision/shape/PolygonShape\";\nimport { CircleShape } from \"../collision/shape/CircleShape\";\nimport { DistanceJoint } from \"../dynamics/joint/DistanceJoint\";\nimport { FrictionJoint } from \"../dynamics/joint/FrictionJoint\";\nimport { GearJoint } from \"../dynamics/joint/GearJoint\";\nimport { MotorJoint } from \"../dynamics/joint/MotorJoint\";\nimport { MouseJoint } from \"../dynamics/joint/MouseJoint\";\nimport { PrismaticJoint } from \"../dynamics/joint/PrismaticJoint\";\nimport { PulleyJoint } from \"../dynamics/joint/PulleyJoint\";\nimport { RevoluteJoint } from \"../dynamics/joint/RevoluteJoint\";\nimport { RopeJoint } from \"../dynamics/joint/RopeJoint\";\nimport { WeldJoint } from \"../dynamics/joint/WeldJoint\";\nimport { WheelJoint } from \"../dynamics/joint/WheelJoint\";\n\nlet SID = 0;\n\n// Classes to be serialized as reference objects\nconst SERIALIZE_REF_TYPES = {\n \"World\": World,\n \"Body\": Body,\n \"Joint\": Joint,\n \"Fixture\": Fixture,\n \"Shape\": Shape,\n};\n\n// For deserializing reference objects by reference type\nconst 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};\n\n// For deserializing data objects by type field\nconst DESERIALIZE_BY_TYPE_FIELD = {\n [Body.STATIC]: Body,\n [Body.DYNAMIC]: Body,\n [Body.KINEMATIC]: Body,\n [ChainShape.TYPE]: ChainShape,\n // [BoxShape.TYPE]: BoxShape,\n [PolygonShape.TYPE]: PolygonShape,\n [EdgeShape.TYPE]: EdgeShape,\n [CircleShape.TYPE]: CircleShape,\n [DistanceJoint.TYPE]: DistanceJoint,\n [FrictionJoint.TYPE]: FrictionJoint,\n [GearJoint.TYPE]: GearJoint,\n [MotorJoint.TYPE]: MotorJoint,\n [MouseJoint.TYPE]: MouseJoint,\n [PrismaticJoint.TYPE]: PrismaticJoint,\n [PulleyJoint.TYPE]: PulleyJoint,\n [RevoluteJoint.TYPE]: RevoluteJoint,\n [RopeJoint.TYPE]: RopeJoint,\n [WeldJoint.TYPE]: WeldJoint,\n [WheelJoint.TYPE]: WheelJoint,\n};\n\n// dummy types\ntype DataType = any;\ntype ObjectType = any;\ntype ClassName = any;\n\ntype SerializedType = object[];\n\ntype RefType = {\n refIndex: number,\n refType: string,\n};\n\ntype SerializerOptions = {\n rootClass: ClassName,\n preSerialize?: (obj: ObjectType) => DataType,\n postSerialize?: (data: DataType, obj: any) => DataType,\n preDeserialize?: (data: DataType) => DataType,\n postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType,\n};\n\nconst DEFAULT_OPTIONS: SerializerOptions = {\n rootClass: World,\n preSerialize: function(obj) { return obj; },\n postSerialize: function(data, obj) { return data; },\n preDeserialize: function(data: DataType) { return data; },\n postDeserialize: function(obj, data) { return obj; },\n};\n\ntype DeserializeChildCallback = (classHint: any, obj: any, context: any) => any;\ntype ClassDeserializerMethod = (data: any, context: any, deserialize: DeserializeChildCallback) => any;\n\nexport class Serializer {\n private options: SerializerOptions;\n constructor(options: SerializerOptions) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n toJson = (root: T): SerializedType => {\n const preSerialize = this.options.preSerialize;\n const postSerialize = this.options.postSerialize;\n const json = [];\n\n // Breadth-first ref serialization queue\n const refQueue = [root];\n\n const refMemoById: Record = {};\n\n function addToRefQueue(value: any, typeName: string) {\n value.__sid = value.__sid || ++SID;\n if (!refMemoById[value.__sid]) {\n refQueue.push(value);\n const index = json.length + refQueue.length;\n const ref = {\n refIndex: index,\n refType: typeName\n };\n refMemoById[value.__sid] = ref;\n }\n return refMemoById[value.__sid];\n }\n\n function serializeWithHooks(obj: ObjectType) {\n obj = preSerialize(obj);\n let data = obj._serialize();\n data = postSerialize(data, obj);\n return data;\n }\n\n // traverse the object graph\n // ref objects are pushed into the queue\n // other objects are serialize in-place \n function traverse(value: any, noRefType = false) {\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n // object with _serialize function\n if (typeof value._serialize === \"function\") {\n if (!noRefType) {\n for (const typeName in SERIALIZE_REF_TYPES) {\n if (value instanceof SERIALIZE_REF_TYPES[typeName]) {\n return addToRefQueue(value, typeName);\n }\n }\n }\n // object with _serialize function\n value = serializeWithHooks(value);\n }\n // recursive for arrays any objects\n if (Array.isArray(value)) {\n const newValue = [];\n for (let key = 0; key < value.length; key++) {\n newValue[key] = traverse(value[key]);\n }\n value = newValue;\n\n } else {\n const newValue = {};\n for (const 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\n while (refQueue.length) {\n const obj = refQueue.shift();\n const str = traverse(obj, true);\n json.push(str);\n }\n\n return json;\n };\n\n fromJson = (json: SerializedType): T => {\n const preDeserialize = this.options.preDeserialize;\n const postDeserialize = this.options.postDeserialize;\n const rootClass = this.options.rootClass;\n\n const deserializedRefMemoByIndex: Record = {};\n\n function deserializeWithHooks(classHint: ClassName, data: DataType, context: any): ObjectType {\n if (!classHint || !classHint._deserialize) {\n classHint = DESERIALIZE_BY_TYPE_FIELD[data.type];\n }\n const deserializer = classHint && classHint._deserialize;\n if (!deserializer) {\n return;\n }\n data = preDeserialize(data);\n const classDeserializeFn = classHint._deserialize as ClassDeserializerMethod;\n let obj = classDeserializeFn(data, context, deserializeChild);\n obj = postDeserialize(obj, data);\n return obj;\n }\n\n /**\n * Recursive callback function to deserialize a child data object or reference object.\n * \n * @param classHint suggested class to deserialize obj to\n * @param dataOrRef data or reference object\n * @param context for example world when deserializing bodies and joints\n */\n function deserializeChild(classHint: ClassName, dataOrRef: DataType | RefType, context: any) {\n const isRefObject = dataOrRef.refIndex && dataOrRef.refType;\n if (!isRefObject) {\n return deserializeWithHooks(classHint, dataOrRef, context); \n }\n const ref = dataOrRef as RefType;\n if (DESERIALIZE_BY_REF_TYPE[ref.refType]) {\n classHint = DESERIALIZE_BY_REF_TYPE[ref.refType];\n }\n const refIndex = ref.refIndex;\n if (!deserializedRefMemoByIndex[refIndex]) {\n const data = json[refIndex];\n const obj = deserializeWithHooks(classHint, data, context);\n deserializedRefMemoByIndex[refIndex] = obj;\n }\n return deserializedRefMemoByIndex[refIndex];\n }\n\n const root = deserializeWithHooks(rootClass, json[0], null);\n\n return root;\n };\n\n static toJson: (root: World) => SerializedType;\n static fromJson: (json: SerializedType) => World;\n}\n\nconst worldSerializer = new Serializer({\n rootClass: World,\n});\n\nSerializer.fromJson = worldSerializer.fromJson;\nSerializer.toJson = worldSerializer.toJson;\n","import type { AABBValue } from \"../collision/AABB\";\nimport type { World } from \"../dynamics/World\";\nimport type { Joint } from \"../dynamics/Joint\";\nimport type { Fixture } from \"../dynamics/Fixture\";\nimport type { Body } from \"../dynamics/Body\";\n\nexport interface Style {\n stroke?: string;\n fill?: string;\n lineWidth?: number;\n}\n\ntype KEY = \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" |\n \"8\" | \"9\" | \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\" |\n \"H\" | \"I\" | \"J\" | \"K\" | \"L\" | \"M\" | \"N\" | \"O\" | \"P\" |\n \"Q\" | \"R\" | \"S\" | \"T\" | \"U\" | \"V\" | \"W\" | \"X\" | \"Y\" |\n \"Z\" | \"right\" | \"left\" | \"up\" | \"down\" | \"fire\";\n\nexport type ActiveKeys = { [key in KEY]?: boolean };\n\ntype TestbedMountOptions = {};\n\nexport abstract class Testbed {\n /**\n * Mounts testbed. Call start with a world to start simulation and rendering.\n */\n static mount(options?: TestbedMountOptions): Testbed {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Mounts testbed if needed, then starts simulation and rendering.\n * \n * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`.\n */\n static start(world: World): Testbed {\n const testbed = Testbed.mount();\n testbed.start(world);\n return testbed;\n }\n\n /** World viewbox width. */\n width: number = 80;\n\n /** World viewbox height. */\n height: number = 60;\n\n /** World viewbox center vertical offset. */\n x: number = 0;\n\n /** World viewbox center horizontal offset. */\n y: number = -10;\n\n /** @hidden */\n scaleY: number = -1;\n\n /** World simulation step frequency */\n hz: number = 60;\n\n /** World simulation speed, default is 1 */\n speed: number = 1;\n\n background: string = \"#222222\";\n\n mouseForce?: number;\n activeKeys: ActiveKeys = {};\n\n /** callback, to be implemented by user */\n step = (dt: number, t: number): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keydown = (keyCode: number, label: string): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keyup = (keyCode: number, label: string): void => {\n return;\n };\n\n abstract status(name: string, value: any): void;\n abstract status(value: object | string): void;\n\n abstract info(text: string): void;\n\n color(r: number, g: number, b: number): string {\n r = r * 256 | 0;\n g = g * 256 | 0;\n b = b * 256 | 0;\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n }\n\n abstract drawPoint(p: {x: number, y: number}, r: any, color: string): void;\n abstract drawCircle(p: {x: number, y: number}, r: number, color: string): void;\n abstract drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawSegment(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawPolygon(points: Array<{x: number, y: number}>, color: string): void;\n abstract drawAABB(aabb: AABBValue, color: string): void;\n\n abstract start(world: World): void;\n\n abstract findOne(query: string): (Body | Joint | Fixture | null);\n abstract findAll(query: string): (Body | Joint | Fixture)[];\n}\n\ntype TestbedFactoryOptions = string | {};\n\n/** @deprecated */\ntype TestbedCallback = (testbed: Testbed) => (World | undefined);\n\n/** @deprecated */\nexport function testbed(callback: TestbedCallback): void;\n/** @deprecated */\nexport function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void;\n/** @internal */\nexport function testbed(a?: any, b?: any) {\n let callback: TestbedCallback | undefined;\n let options;\n if (typeof a === \"function\") {\n callback = a;\n options = b;\n } else if (typeof b === \"function\") {\n callback = b;\n options = a;\n } else {\n options = a ?? b;\n }\n const testbed = Testbed.mount(options);\n if (callback) {\n // this is for backwards compatibility\n const world = callback(testbed) || (testbed as any).world;\n testbed.start(world);\n } else {\n return testbed;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2Value } from \"../../common/Vec2\";\nimport { PolygonShape } from \"./PolygonShape\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * A rectangle polygon which extend PolygonShape.\n */\nexport class BoxShape extends PolygonShape {\n // note that box is serialized/deserialized as polygon\n static TYPE = \"polygon\" as const;\n\n /**\n * \n * @param halfWidth \n * @param halfHeight \n * @param center coordinate of the center of the box relative to the body\n * @param angle angle of the box relative to the body\n */\n constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof BoxShape)) {\n return new BoxShape(halfWidth, halfHeight, center, angle);\n }\n\n super();\n\n this._setAsBox(halfWidth, halfHeight, center, angle);\n }\n}\n\nexport const Box = BoxShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\nimport * as matrix from \"../../common/Matrix\";\nimport { Transform } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact);\n\n/** @internal */ function CircleCircleContact(manifold: Manifold, xfA: Transform, fixtureA: Fixture, indexA: number, xfB: Transform, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == CircleShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollideCircles(manifold, fixtureA.getShape() as CircleShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const pA = matrix.vec2(0, 0);\n/** @internal */ const pB = matrix.vec2(0, 0);\n\nexport const CollideCircles = function (manifold: Manifold, circleA: CircleShape, xfA: Transform, circleB: CircleShape, xfB: Transform): void {\n manifold.pointCount = 0;\n\n matrix.transformVec2(pA, xfA, circleA.m_p);\n matrix.transformVec2(pB, xfB, circleB.m_p);\n\n const distSqr = matrix.distSqrVec2(pB, pA);\n const rA = circleA.m_radius;\n const rB = circleB.m_radius;\n const radius = rA + rB;\n if (distSqr > radius * radius) {\n return;\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.copyVec2(manifold.localPoint, circleA.m_p);\n matrix.zeroVec2(manifold.localNormal);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact);\nContact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact);\n\n/** @internal */ function EdgeCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const shapeA = fixtureA.getShape() as EdgeShape;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\nfunction ChainCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const chain = fixtureA.getShape() as ChainShape;\n const edge = new EdgeShape();\n chain.getChildEdge(edge, indexA);\n\n const shapeA = edge;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const Q = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n// Compute contact points for edge versus circle.\n// This accounts for edge connectivity.\nexport const CollideEdgeCircle = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle in frame of edge\n matrix.retransformVec2(Q, xfB, xfA, circleB.m_p);\n\n const A = edgeA.m_vertex1;\n const B = edgeA.m_vertex2;\n matrix.subVec2(e, B, A);\n\n // Barycentric coordinates\n const u = matrix.dotVec2(e, B) - matrix.dotVec2(e, Q);\n const v = matrix.dotVec2(e, Q) - matrix.dotVec2(e, A);\n\n const radius = edgeA.m_radius + circleB.m_radius;\n\n // Region A\n if (v <= 0.0) {\n matrix.copyVec2(P, A);\n const dd = matrix.distSqrVec2(Q, A);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to A?\n if (edgeA.m_hasVertex0) {\n const A1 = edgeA.m_vertex0;\n const B1 = A;\n matrix.subVec2(e1, B1, A1);\n const u1 = matrix.dotVec2(e1, B1) - matrix.dotVec2(e1, Q);\n\n // Is the circle in Region AB of the previous edge?\n if (u1 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Region B\n if (u <= 0.0) {\n matrix.copyVec2(P, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to B?\n if (edgeA.m_hasVertex3) {\n const B2 = edgeA.m_vertex3;\n const A2 = B;\n matrix.subVec2(e2, B2, A2);\n const v2 = matrix.dotVec2(e2, Q) - matrix.dotVec2(e2, A2);\n\n // Is the circle in Region AB of the next edge?\n if (v2 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n\n return;\n }\n\n // Region AB\n const den = matrix.lengthSqrVec2(e);\n _ASSERT && console.assert(den > 0.0);\n matrix.combine2Vec2(P, u / den, A, v / den, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n matrix.crossNumVec2(n, 1, e);\n if (matrix.dotVec2(n, Q) - matrix.dotVec2(n, A) < 0.0) {\n matrix.negVec2(n);\n }\n matrix.normalizeVec2(n);\n\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, n);\n matrix.copyVec2(manifold.localPoint, A);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const incidentEdge = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipSegmentToLineNormal = matrix.vec2(0, 0);\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const v11 = matrix.vec2(0, 0);\n/** @internal */ const v12 = matrix.vec2(0, 0);\n/** @internal */ const localTangent = matrix.vec2(0, 0);\n/** @internal */ const localNormal = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n\n\nContact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact);\n\n/** @internal */ function PolygonContact(\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number,\n): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == PolygonShape.TYPE);\n CollidePolygons(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ interface MaxSeparation {\n maxSeparation: number;\n bestIndex: number;\n}\n\n/**\n * Find the max separation between poly1 and poly2 using edge normals from\n * poly1.\n */\n/** @internal */ function findMaxSeparation(\n poly1: PolygonShape,\n xf1: TransformValue,\n poly2: PolygonShape,\n xf2: TransformValue,\n output: MaxSeparation,\n): void {\n const count1 = poly1.m_count;\n const count2 = poly2.m_count;\n const n1s = poly1.m_normals;\n const v1s = poly1.m_vertices;\n const v2s = poly2.m_vertices;\n\n matrix.detransformTransform(xf, xf2, xf1);\n\n let bestIndex = 0;\n let maxSeparation = -Infinity;\n for (let i = 0; i < count1; ++i) {\n // Get poly1 normal in frame2.\n matrix.rotVec2(n, xf.q, n1s[i]);\n matrix.transformVec2(v1, xf, v1s[i]);\n\n // Find deepest point for normal i.\n let si = Infinity;\n for (let j = 0; j < count2; ++j) {\n const sij = matrix.dotVec2(n, v2s[j]) - matrix.dotVec2(n, v1);\n if (sij < si) {\n si = sij;\n }\n }\n\n if (si > maxSeparation) {\n maxSeparation = si;\n bestIndex = i;\n }\n }\n\n // used to keep last FindMaxSeparation call values\n output.maxSeparation = maxSeparation;\n output.bestIndex = bestIndex;\n}\n\n/** @internal */ function findIncidentEdge(\n clipVertex: ClipVertex[],\n poly1: PolygonShape,\n xf1: TransformValue,\n edge1: number,\n poly2: PolygonShape,\n xf2: TransformValue,\n): void {\n const normals1 = poly1.m_normals;\n\n const count2 = poly2.m_count;\n const vertices2 = poly2.m_vertices;\n const normals2 = poly2.m_normals;\n\n _ASSERT && console.assert(0 <= edge1 && edge1 < poly1.m_count);\n\n // Get the normal of the reference edge in poly2's frame.\n matrix.rerotVec2(normal1, xf2.q, xf1.q, normals1[edge1]);\n\n // Find the incident edge on poly2.\n let index = 0;\n let minDot = Infinity;\n for (let i = 0; i < count2; ++i) {\n const dot = matrix.dotVec2(normal1, normals2[i]);\n if (dot < minDot) {\n minDot = dot;\n index = i;\n }\n }\n\n // Build the clip vertices for the incident edge.\n const i1 = index;\n const i2 = i1 + 1 < count2 ? i1 + 1 : 0;\n\n matrix.transformVec2(clipVertex[0].v, xf2, vertices2[i1]);\n clipVertex[0].id.setFeatures(edge1, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.transformVec2(clipVertex[1].v, xf2, vertices2[i2]);\n clipVertex[1].id.setFeatures(edge1, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n}\n\n/** @internal */ const maxSeparation = {\n maxSeparation: 0,\n bestIndex: 0,\n};\n\n/**\n *\n * Find edge normal of max separation on A - return if separating axis is found
\n * Find edge normal of max separation on B - return if separation axis is found
\n * Choose reference edge as min(minA, minB)
\n * Find incident edge
\n * Clip\n *\n * The normal points from 1 to 2\n */\nexport const CollidePolygons = function (\n manifold: Manifold,\n polyA: PolygonShape,\n xfA: TransformValue,\n polyB: PolygonShape,\n xfB: TransformValue,\n): void {\n manifold.pointCount = 0;\n const totalRadius = polyA.m_radius + polyB.m_radius;\n\n findMaxSeparation(polyA, xfA, polyB, xfB, maxSeparation);\n const edgeA = maxSeparation.bestIndex;\n const separationA = maxSeparation.maxSeparation;\n if (separationA > totalRadius)\n return;\n\n findMaxSeparation(polyB, xfB, polyA, xfA, maxSeparation);\n const edgeB = maxSeparation.bestIndex;\n const separationB = maxSeparation.maxSeparation;\n if (separationB > totalRadius)\n return;\n\n let poly1: PolygonShape; // reference polygon\n let poly2: PolygonShape; // incident polygon\n let xf1: TransformValue;\n let xf2: TransformValue;\n let edge1: number; // reference edge\n let flip: boolean;\n const k_tol = 0.1 * Settings.linearSlop;\n\n if (separationB > separationA + k_tol) {\n poly1 = polyB;\n poly2 = polyA;\n xf1 = xfB;\n xf2 = xfA;\n edge1 = edgeB;\n manifold.type = ManifoldType.e_faceB;\n flip = true;\n } else {\n poly1 = polyA;\n poly2 = polyB;\n xf1 = xfA;\n xf2 = xfB;\n edge1 = edgeA;\n manifold.type = ManifoldType.e_faceA;\n flip = false;\n }\n\n incidentEdge[0].recycle(), incidentEdge[1].recycle();\n findIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2);\n\n const count1 = poly1.m_count;\n const vertices1 = poly1.m_vertices;\n\n const iv1 = edge1;\n const iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0;\n\n matrix.copyVec2(v11, vertices1[iv1]);\n matrix.copyVec2(v12, vertices1[iv2]);\n\n matrix.subVec2(localTangent, v12, v11);\n matrix.normalizeVec2(localTangent);\n\n matrix.crossVec2Num(localNormal, localTangent, 1.0);\n matrix.combine2Vec2(planePoint, 0.5, v11, 0.5, v12);\n\n matrix.rotVec2(tangent, xf1.q, localTangent);\n matrix.crossVec2Num(normal, tangent, 1.0);\n\n matrix.transformVec2(v11, xf1, v11);\n matrix.transformVec2(v12, xf1, v12);\n\n // Face offset.\n const frontOffset = matrix.dotVec2(normal, v11);\n\n // Side offsets, extended by polytope skin thickness.\n const sideOffset1 = -matrix.dotVec2(tangent, v11) + totalRadius;\n const sideOffset2 = matrix.dotVec2(tangent, v12) + totalRadius;\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n matrix.setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y);\n const np1 = clipSegmentToLine(clipPoints1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1);\n\n if (np1 < 2) {\n return;\n }\n\n // Clip to negative box side 1\n matrix.setVec2(clipSegmentToLineNormal, tangent.x, tangent.y);\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, clipSegmentToLineNormal, sideOffset2, iv2);\n\n if (np2 < 2) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n matrix.copyVec2(manifold.localNormal, localNormal);\n matrix.copyVec2(manifold.localPoint, planePoint);\n\n let pointCount = 0;\n for (let i = 0; i < clipPoints2.length/* maxManifoldPoints */; ++i) {\n const separation = matrix.dotVec2(normal, clipPoints2[i].v) - frontOffset;\n\n if (separation <= totalRadius) {\n const cp = manifold.points[pointCount];\n matrix.detransformVec2(cp.localPoint, xf2, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n if (flip) {\n // Swap features\n cp.id.swapFeatures();\n }\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact);\n\n/** @internal */ function PolygonCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollidePolygonCircle(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const cLocal = matrix.vec2(0, 0);\n/** @internal */ const faceCenter = matrix.vec2(0, 0);\n\nexport const CollidePolygonCircle = function (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle position in the frame of the polygon.\n matrix.retransformVec2(cLocal, xfB, xfA, circleB.m_p);\n\n // Find the min separating edge.\n let normalIndex = 0;\n let separation = -Infinity;\n const radius = polygonA.m_radius + circleB.m_radius;\n const vertexCount = polygonA.m_count;\n const vertices = polygonA.m_vertices;\n const normals = polygonA.m_normals;\n\n for (let i = 0; i < vertexCount; ++i) {\n const s = matrix.dotVec2(normals[i], cLocal) - matrix.dotVec2(normals[i], vertices[i]);\n\n if (s > radius) {\n // Early out.\n return;\n }\n\n if (s > separation) {\n separation = s;\n normalIndex = i;\n }\n }\n\n // Vertices that subtend the incident face.\n const vertIndex1 = normalIndex;\n const vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0;\n const v1 = vertices[vertIndex1];\n const v2 = vertices[vertIndex2];\n\n // If the center is inside the polygon ...\n if (separation < EPSILON) {\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[normalIndex]);\n matrix.combine2Vec2(manifold.localPoint, 0.5, v1, 0.5, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Compute barycentric coordinates\n // u1 = (cLocal - v1) dot (v2 - v1))\n const u1 = matrix.dotVec2(cLocal, v2) - matrix.dotVec2(cLocal, v1) - matrix.dotVec2(v1, v2) + matrix.dotVec2(v1, v1);\n // u2 = (cLocal - v2) dot (v1 - v2)\n const u2 = matrix.dotVec2(cLocal, v1) - matrix.dotVec2(cLocal, v2) - matrix.dotVec2(v2, v1) + matrix.dotVec2(v2, v2);\n if (u1 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v1) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v1);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v1);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else if (u2 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v2) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v2);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else {\n matrix.combine2Vec2(faceCenter, 0.5, v1, 0.5, v2);\n const separation = matrix.dotVec2(cLocal, normals[vertIndex1]) - matrix.dotVec2(faceCenter, normals[vertIndex1]);\n if (separation > radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[vertIndex1]);\n matrix.copyVec2(manifold.localPoint, faceCenter);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n }\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_min = Math.min;\n\nContact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact);\nContact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact);\n\n/** @internal */ function EdgePolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n CollideEdgePolygon(manifold, fA.getShape() as EdgeShape, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n// reused\n/** @internal */ const edge_reuse = new EdgeShape();\n\n/** @internal */ function ChainPolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n const chain = fA.getShape() as ChainShape;\n chain.getChildEdge(edge_reuse, indexA);\n\n CollideEdgePolygon(manifold, edge_reuse, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ enum EPAxisType {\n e_unknown = -1,\n e_edgeA = 1,\n e_edgeB = 2,\n}\n\n// unused?\n/** @internal */ enum VertexType {\n e_isolated = 0,\n e_concave = 1,\n e_convex = 2,\n}\n\n/**\n * This structure is used to keep track of the best separating axis.\n */\n/** @internal */ class EPAxis {\n type: EPAxisType;\n index: number;\n separation: number;\n}\n\n/**\n * This holds polygon B expressed in frame A.\n */\n/** @internal */ class TempPolygon {\n vertices: Vec2Value[] = []; // [Settings.maxPolygonVertices]\n normals: Vec2Value[] = []; // [Settings.maxPolygonVertices];\n count: number = 0;\n constructor() {\n for (let i = 0; i < Settings.maxPolygonVertices; i++) {\n this.vertices.push(matrix.vec2(0, 0));\n this.normals.push(matrix.vec2(0, 0));\n }\n }\n}\n\n/**\n * Reference face used for clipping\n */\n/** @internal */ class ReferenceFace {\n i1: number;\n i2: number;\n readonly v1 = matrix.vec2(0 ,0);\n readonly v2 = matrix.vec2(0 ,0);\n readonly normal = matrix.vec2(0 ,0);\n readonly sideNormal1 = matrix.vec2(0 ,0);\n sideOffset1: number;\n readonly sideNormal2 = matrix.vec2(0 ,0);\n sideOffset2: number;\n recycle() {\n matrix.zeroVec2(this.v1);\n matrix.zeroVec2(this.v2);\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.sideNormal1);\n matrix.zeroVec2(this.sideNormal2);\n }\n}\n\n// reused\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const ie = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const edgeAxis = new EPAxis();\n/** @internal */ const polygonAxis = new EPAxis();\n/** @internal */ const polygonBA = new TempPolygon();\n/** @internal */ const rf = new ReferenceFace();\n/** @internal */ const centroidB = matrix.vec2(0, 0);\n/** @internal */ const edge0 = matrix.vec2(0, 0);\n/** @internal */ const edge1 = matrix.vec2(0, 0);\n/** @internal */ const edge2 = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal0 = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n/** @internal */ const normal2 = matrix.vec2(0, 0);\n/** @internal */ const lowerLimit = matrix.vec2(0, 0);\n/** @internal */ const upperLimit = matrix.vec2(0, 0);\n/** @internal */ const perp = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n/**\n * This function collides and edge and a polygon, taking into account edge\n * adjacency.\n */\nexport const CollideEdgePolygon = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue): void {\n // Algorithm:\n // 1. Classify v1 and v2\n // 2. Classify polygon centroid as front or back\n // 3. Flip normal if necessary\n // 4. Initialize normal range to [-pi, pi] about face normal\n // 5. Adjust normal range according to adjacent edges\n // 6. Visit each separating axes, only accept axes within the range\n // 7. Return if _any_ axis indicates separation\n // 8. Clip\n\n // let m_type1: VertexType;\n // let m_type2: VertexType;\n\n matrix.detransformTransform(xf, xfA, xfB);\n matrix.transformVec2(centroidB, xf, polygonB.m_centroid);\n\n const v0 = edgeA.m_vertex0;\n const v1 = edgeA.m_vertex1;\n const v2 = edgeA.m_vertex2;\n const v3 = edgeA.m_vertex3;\n\n const hasVertex0 = edgeA.m_hasVertex0;\n const hasVertex3 = edgeA.m_hasVertex3;\n\n matrix.subVec2(edge1, v2, v1);\n matrix.normalizeVec2(edge1);\n matrix.setVec2(normal1, edge1.y, -edge1.x);\n const offset1 = matrix.dotVec2(normal1, centroidB) - matrix.dotVec2(normal1, v1);\n let offset0 = 0.0;\n let offset2 = 0.0;\n let convex1 = false;\n let convex2 = false;\n\n matrix.zeroVec2(normal0);\n matrix.zeroVec2(normal2);\n\n // Is there a preceding edge?\n if (hasVertex0) {\n matrix.subVec2(edge0, v1, v0);\n matrix.normalizeVec2(edge0);\n matrix.setVec2(normal0, edge0.y, -edge0.x);\n convex1 = matrix.crossVec2Vec2(edge0, edge1) >= 0.0;\n offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0);\n }\n\n // Is there a following edge?\n if (hasVertex3) {\n matrix.subVec2(edge2, v3, v2);\n matrix.normalizeVec2(edge2);\n matrix.setVec2(normal2, edge2.y, -edge2.x);\n convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0.0;\n offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v2);\n }\n\n let front: boolean;\n matrix.zeroVec2(normal);\n matrix.zeroVec2(lowerLimit);\n matrix.zeroVec2(upperLimit);\n\n // Determine front or back collision. Determine collision normal limits.\n if (hasVertex0 && hasVertex3) {\n if (convex1 && convex2) {\n front = offset0 >= 0.0 || offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex1) {\n front = offset0 >= 0.0 || (offset1 >= 0.0 && offset2 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex2) {\n front = offset2 >= 0.0 || (offset0 >= 0.0 && offset1 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex0) {\n if (convex1) {\n front = offset0 >= 0.0 || offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex3) {\n if (convex2) {\n front = offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n } else {\n front = offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n } else {\n front = offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n\n // Get polygonB in frameA\n polygonBA.count = polygonB.m_count;\n for (let i = 0; i < polygonB.m_count; ++i) {\n matrix.transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]);\n matrix.rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]);\n }\n\n const radius = polygonB.m_radius + edgeA.m_radius;\n\n manifold.pointCount = 0;\n\n { // ComputeEdgeSeparation\n edgeAxis.type = EPAxisType.e_edgeA;\n edgeAxis.index = front ? 0 : 1;\n edgeAxis.separation = Infinity;\n\n for (let i = 0; i < polygonBA.count; ++i) {\n const v = polygonBA.vertices[i];\n const s = matrix.dotVec2(normal, v) - matrix.dotVec2(normal, v1);\n if (s < edgeAxis.separation) {\n edgeAxis.separation = s;\n }\n }\n }\n\n // If no valid normal can be found than this edge should not collide.\n // @ts-ignore todo: why we need this if here?\n if (edgeAxis.type == EPAxisType.e_unknown) {\n return;\n }\n\n if (edgeAxis.separation > radius) {\n return;\n }\n\n { // ComputePolygonSeparation\n polygonAxis.type = EPAxisType.e_unknown;\n polygonAxis.index = -1;\n polygonAxis.separation = -Infinity;\n\n matrix.setVec2(perp, -normal.y, normal.x);\n\n for (let i = 0; i < polygonBA.count; ++i) {\n matrix.scaleVec2(n, -1, polygonBA.normals[i]);\n\n const s1 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v1);\n const s2 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v2);\n const s = math_min(s1, s2);\n\n if (s > radius) {\n // No collision\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n break;\n }\n\n // Adjacency\n if (matrix.dotVec2(n, perp) >= 0.0) {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(upperLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n } else {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(lowerLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n }\n\n if (s > polygonAxis.separation) {\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n }\n }\n }\n\n if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) {\n return;\n }\n\n // Use hysteresis for jitter reduction.\n const k_relativeTol = 0.98;\n const k_absoluteTol = 0.001;\n\n let primaryAxis: EPAxis;\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\n ie[0].recycle(), ie[1].recycle();\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n manifold.type = ManifoldType.e_faceA;\n\n // Search for the polygon normal that is most anti-parallel to the edge\n // normal.\n let bestIndex = 0;\n let bestValue = matrix.dotVec2(normal, polygonBA.normals[0]);\n for (let i = 1; i < polygonBA.count; ++i) {\n const value = matrix.dotVec2(normal, polygonBA.normals[i]);\n if (value < bestValue) {\n bestValue = value;\n bestIndex = i;\n }\n }\n\n const i1 = bestIndex;\n const i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0;\n\n matrix.copyVec2(ie[0].v, polygonBA.vertices[i1]);\n ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.copyVec2(ie[1].v, polygonBA.vertices[i2]);\n ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n\n if (front) {\n rf.i1 = 0;\n rf.i2 = 1;\n matrix.copyVec2(rf.v1, v1);\n matrix.copyVec2(rf.v2, v2);\n matrix.copyVec2(rf.normal, normal1);\n } else {\n rf.i1 = 1;\n rf.i2 = 0;\n matrix.copyVec2(rf.v1, v2);\n matrix.copyVec2(rf.v2, v1);\n matrix.scaleVec2(rf.normal, -1, normal1);\n }\n } else {\n manifold.type = ManifoldType.e_faceB;\n\n matrix.copyVec2(ie[0].v, v1);\n ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n matrix.copyVec2(ie[1].v, v2);\n ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n rf.i1 = primaryAxis.index;\n rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0;\n matrix.copyVec2(rf.v1, polygonBA.vertices[rf.i1]);\n matrix.copyVec2(rf.v2, polygonBA.vertices[rf.i2]);\n matrix.copyVec2(rf.normal, polygonBA.normals[rf.i1]);\n }\n\n matrix.setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x);\n matrix.setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y);\n rf.sideOffset1 = matrix.dotVec2(rf.sideNormal1, rf.v1);\n rf.sideOffset2 = matrix.dotVec2(rf.sideNormal2, rf.v2);\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n const np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1);\n\n if (np1 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Clip to negative box side 1\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2);\n\n if (np2 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.copyVec2(manifold.localNormal, rf.normal);\n matrix.copyVec2(manifold.localPoint, rf.v1);\n } else {\n matrix.copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]);\n matrix.copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]);\n }\n\n let pointCount = 0;\n for (let i = 0; i < Settings.maxManifoldPoints; ++i) {\n const separation = matrix.dotVec2(rf.normal, clipPoints2[i].v) - matrix.dotVec2(rf.normal, rf.v1);\n\n if (separation <= radius) {\n const cp = manifold.points[pointCount]; // ManifoldPoint\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.detransformVec2(cp.localPoint, xf, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n } else {\n matrix.copyVec2(cp.localPoint, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n cp.id.swapFeatures();\n }\n\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","import { CollidePolygons } from \"./collision/shape/CollidePolygon\";\nimport { Settings } from \"./Settings\";\nimport { Sweep } from \"./common/Sweep\";\nimport { DynamicTree } from \"./collision/DynamicTree\";\nimport { Manifold } from \"./collision/Manifold\";\nimport { Distance } from \"./collision/Distance\";\nimport { TimeOfImpact } from \"./collision/TimeOfImpact\";\nimport { stats } from \"./util/stats\";\n\n/** @hidden @deprecated Merged with main namespace */\nexport const internal = {\n CollidePolygons,\n Settings,\n Sweep,\n Manifold,\n Distance,\n TimeOfImpact,\n DynamicTree,\n stats\n};\n","/**\n * Stage.js 1.0.0-alpha.5\n *\n * @copyright Copyright (c) 2024 Ali Shakiba\n * @license The MIT License (MIT)\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 */\nvar math_random = Math.random;\nvar math_sqrt = Math.sqrt;\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}\nfunction wrap(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 length(x, y) {\n return math_sqrt(x * x + y * y);\n}\nvar math = Object.create(Math);\nmath.random = random;\nmath.wrap = wrap;\nmath.clamp = clamp;\nmath.length = length;\nmath.rotate = wrap;\nmath.limit = clamp;\nvar Matrix = (\n /** @class */\n function() {\n function Matrix2(a, b, c, d, e, f) {\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.e = 0;\n this.f = 0;\n if (typeof a === \"object\") {\n this.reset(a);\n } else {\n this.reset(a, b, c, d, e, f);\n }\n }\n Matrix2.prototype.toString = function() {\n return \"[\" + this.a + \", \" + this.b + \", \" + this.c + \", \" + this.d + \", \" + this.e + \", \" + this.f + \"]\";\n };\n Matrix2.prototype.clone = function() {\n return new Matrix2(this.a, this.b, this.c, this.d, this.e, this.f);\n };\n Matrix2.prototype.reset = function(a, b, c, d, e, f) {\n this._dirty = true;\n if (typeof a === \"object\") {\n this.a = a.a;\n this.d = a.d;\n this.b = a.b;\n this.c = a.c;\n this.e = a.e;\n this.f = a.f;\n } else {\n this.a = typeof a === \"number\" ? a : 1;\n this.b = typeof b === \"number\" ? b : 0;\n this.c = typeof c === \"number\" ? c : 0;\n this.d = typeof d === \"number\" ? d : 1;\n this.e = typeof e === \"number\" ? e : 0;\n this.f = typeof f === \"number\" ? f : 0;\n }\n return this;\n };\n Matrix2.prototype.identity = function() {\n this._dirty = true;\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.e = 0;\n this.f = 0;\n return this;\n };\n Matrix2.prototype.rotate = function(angle) {\n if (!angle) {\n return this;\n }\n this._dirty = true;\n var u = angle ? Math.cos(angle) : 1;\n var v = angle ? Math.sin(angle) : 0;\n var a = u * this.a - v * this.b;\n var b = u * this.b + v * this.a;\n var c = u * this.c - v * this.d;\n var d = u * this.d + v * this.c;\n var e = u * this.e - v * this.f;\n var f = u * this.f + v * this.e;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.translate = function(x, y) {\n if (!x && !y) {\n return this;\n }\n this._dirty = true;\n this.e += x;\n this.f += y;\n return this;\n };\n Matrix2.prototype.scale = function(x, y) {\n if (!(x - 1) && !(y - 1)) {\n return this;\n }\n this._dirty = true;\n this.a *= x;\n this.b *= y;\n this.c *= x;\n this.d *= y;\n this.e *= x;\n this.f *= y;\n return this;\n };\n Matrix2.prototype.skew = function(x, y) {\n if (!x && !y) {\n return this;\n }\n this._dirty = true;\n var a = this.a + this.b * x;\n var b = this.b + this.a * y;\n var c = this.c + this.d * x;\n var d = this.d + this.c * y;\n var e = this.e + this.f * x;\n var f = this.f + this.e * y;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.concat = function(m) {\n this._dirty = true;\n var a = this.a * m.a + this.b * m.c;\n var b = this.b * m.d + this.a * m.b;\n var c = this.c * m.a + this.d * m.c;\n var d = this.d * m.d + this.c * m.b;\n var e = this.e * m.a + m.e + this.f * m.c;\n var f = this.f * m.d + m.f + this.e * m.b;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.inverse = function() {\n if (this._dirty) {\n this._dirty = false;\n if (!this.inverted) {\n this.inverted = new Matrix2();\n }\n var z = this.a * this.d - this.b * this.c;\n this.inverted.a = this.d / z;\n this.inverted.b = -this.b / z;\n this.inverted.c = -this.c / z;\n this.inverted.d = this.a / z;\n this.inverted.e = (this.c * this.f - this.e * this.d) / z;\n this.inverted.f = (this.e * this.b - this.a * this.f) / z;\n }\n return this.inverted;\n };\n Matrix2.prototype.map = function(p, q) {\n q = q || { x: 0, y: 0 };\n q.x = this.a * p.x + this.c * p.y + this.e;\n q.y = this.b * p.x + this.d * p.y + this.f;\n return q;\n };\n Matrix2.prototype.mapX = function(x, y) {\n if (typeof x === \"object\") {\n y = x.y;\n x = x.x;\n }\n return this.a * x + this.c * y + this.e;\n };\n Matrix2.prototype.mapY = function(x, y) {\n if (typeof x === \"object\") {\n y = x.y;\n x = x.x;\n }\n return this.b * x + this.d * y + this.f;\n };\n return Matrix2;\n }()\n);\nvar objectToString = Object.prototype.toString;\nfunction isFn(value) {\n var str = objectToString.call(value);\n return str === \"[object Function]\" || str === \"[object GeneratorFunction]\" || str === \"[object AsyncFunction]\";\n}\nfunction isHash(value) {\n return objectToString.call(value) === \"[object Object]\" && value.constructor === Object;\n}\nconst stats = {\n create: 0,\n tick: 0,\n node: 0,\n draw: 0,\n fps: 0\n};\nvar uid = function() {\n return Date.now().toString(36) + Math.random().toString(36).slice(2);\n};\nvar Texture = (\n /** @class */\n function() {\n function Texture2() {\n this.uid = \"texture:\" + uid();\n this.sx = 0;\n this.sy = 0;\n this.dx = 0;\n this.dy = 0;\n }\n Texture2.prototype.setSourceCoordinate = function(x, y) {\n this.sx = x;\n this.sy = y;\n };\n Texture2.prototype.setSourceDimension = function(w, h) {\n this.sw = w;\n this.sh = h;\n };\n Texture2.prototype.setDestinationCoordinate = function(x, y) {\n this.dx = x;\n this.dy = y;\n };\n Texture2.prototype.setDestinationDimension = function(w, h) {\n this.dw = w;\n this.dh = h;\n };\n Texture2.prototype.draw = function(context, x1, y1, w1, h1, x2, y2, w2, h2) {\n var sx = this.sx;\n var sy = this.sy;\n var sw = this.sw;\n var sh = this.sh;\n var dx = this.dx;\n var dy = this.dy;\n var dw = this.dw;\n var dh = this.dh;\n if (typeof x1 === \"number\" || typeof y1 === \"number\" || typeof w1 === \"number\" || typeof h1 === \"number\" || typeof x2 === \"number\" || typeof y2 === \"number\" || typeof w2 === \"number\" || typeof h2 === \"number\") {\n if (typeof x2 === \"number\" || typeof y2 === \"number\" || typeof w2 === \"number\" || typeof h2 === \"number\") {\n sx += x1;\n sy += y1;\n sw = w1 !== null && w1 !== void 0 ? w1 : sw;\n sh = h1 !== null && h1 !== void 0 ? h1 : sh;\n dx += x2;\n dy += y2;\n dw = w2 !== null && w2 !== void 0 ? w2 : dw;\n dh = h2 !== null && h2 !== void 0 ? h2 : dh;\n } else {\n dx += x1;\n dy += y1;\n dw = w1;\n dh = h1;\n }\n }\n this.drawWithNormalizedArgs(context, sx, sy, sw, sh, dx, dy, dw, dh);\n };\n return Texture2;\n }()\n);\nvar __extends$9 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar ImageTexture = (\n /** @class */\n function(_super) {\n __extends$9(ImageTexture2, _super);\n function ImageTexture2(source, pixelRatio) {\n var _this = _super.call(this) || this;\n _this._pixelRatio = 1;\n if (typeof source === \"object\") {\n _this.setSourceImage(source, pixelRatio);\n }\n return _this;\n }\n ImageTexture2.prototype.setSourceImage = function(image2, pixelRatio) {\n if (pixelRatio === void 0) {\n pixelRatio = 1;\n }\n this._source = image2;\n this._pixelRatio = pixelRatio;\n };\n ImageTexture2.prototype.getWidth = function() {\n return this._source.width / this._pixelRatio;\n };\n ImageTexture2.prototype.getHeight = function() {\n return this._source.height / this._pixelRatio;\n };\n ImageTexture2.prototype.prerender = function(context) {\n return false;\n };\n ImageTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var image2 = this._source;\n if (image2 === null || typeof image2 !== \"object\") {\n return;\n }\n sw = sw !== null && sw !== void 0 ? sw : this.getWidth();\n sh = sh !== null && sh !== void 0 ? sh : this.getHeight();\n dw = dw !== null && dw !== void 0 ? dw : sw;\n dh = dh !== null && dh !== void 0 ? dh : sh;\n sx *= this._pixelRatio;\n sy *= this._pixelRatio;\n sw *= this._pixelRatio;\n sh *= this._pixelRatio;\n try {\n stats.draw++;\n context.drawImage(image2, sx, sy, sw, sh, dx, dy, dw, dh);\n } catch (ex) {\n if (!this._draw_failed) {\n console.log(\"Unable to draw: \", image2);\n console.log(ex);\n this._draw_failed = true;\n }\n }\n };\n return ImageTexture2;\n }(Texture)\n);\nvar __extends$8 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar PipeTexture = (\n /** @class */\n function(_super) {\n __extends$8(PipeTexture2, _super);\n function PipeTexture2(source) {\n var _this = _super.call(this) || this;\n _this._source = source;\n return _this;\n }\n PipeTexture2.prototype.setSourceTexture = function(texture2) {\n this._source = texture2;\n };\n PipeTexture2.prototype.getWidth = function() {\n var _a, _b;\n return (_b = (_a = this.dw) !== null && _a !== void 0 ? _a : this.sw) !== null && _b !== void 0 ? _b : this._source.getWidth();\n };\n PipeTexture2.prototype.getHeight = function() {\n var _a, _b;\n return (_b = (_a = this.dh) !== null && _a !== void 0 ? _a : this.sh) !== null && _b !== void 0 ? _b : this._source.getHeight();\n };\n PipeTexture2.prototype.prerender = function(context) {\n return this._source.prerender(context);\n };\n PipeTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var texture2 = this._source;\n if (texture2 === null || typeof texture2 !== \"object\") {\n return;\n }\n texture2.draw(context, sx, sy, sw, sh, dx, dy, dw, dh);\n };\n return PipeTexture2;\n }(Texture)\n);\nvar __extends$7 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __awaiter$1 = function(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator$1 = function(thisArg, body) {\n var _ = { label: 0, sent: function() {\n if (t[0] & 1)\n throw t[1];\n return t[1];\n }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f)\n throw new TypeError(\"Generator is already executing.\");\n while (_)\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n return t;\n if (y = 0, t)\n op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return { value: op[1], done: false };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2])\n _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5)\n throw op[1];\n return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar Atlas = (\n /** @class */\n function(_super) {\n __extends$7(Atlas2, _super);\n function Atlas2(def) {\n if (def === void 0) {\n def = {};\n }\n var _this = _super.call(this) || this;\n _this.pipeSpriteTexture = function(def2) {\n var map = _this._map;\n var ppu = _this._ppu;\n var trim = _this._trim;\n if (!def2) {\n return void 0;\n }\n def2 = Object.assign({}, def2);\n if (isFn(map)) {\n def2 = map(def2);\n }\n if (ppu != 1) {\n def2.x *= ppu;\n def2.y *= ppu;\n def2.width *= ppu;\n def2.height *= ppu;\n def2.top *= ppu;\n def2.bottom *= ppu;\n def2.left *= ppu;\n def2.right *= ppu;\n }\n if (trim != 0) {\n def2.x += trim;\n def2.y += trim;\n def2.width -= 2 * trim;\n def2.height -= 2 * trim;\n def2.top -= trim;\n def2.bottom -= trim;\n def2.left -= trim;\n def2.right -= trim;\n }\n var texture2 = new PipeTexture(_this);\n texture2.top = def2.top;\n texture2.bottom = def2.bottom;\n texture2.left = def2.left;\n texture2.right = def2.right;\n texture2.setSourceCoordinate(def2.x, def2.y);\n texture2.setSourceDimension(def2.width, def2.height);\n return texture2;\n };\n _this.findSpriteDefinition = function(query) {\n var textures = _this._textures;\n if (textures) {\n if (isFn(textures)) {\n return textures(query);\n } else if (isHash(textures)) {\n return textures[query];\n }\n }\n };\n _this.select = function(query) {\n if (!query) {\n return new TextureSelection(new PipeTexture(_this));\n }\n var textureDefinition = _this.findSpriteDefinition(query);\n if (textureDefinition) {\n return new TextureSelection(textureDefinition, _this);\n }\n };\n _this.name = def.name;\n _this._ppu = def.ppu || def.ratio || 1;\n _this._trim = def.trim || 0;\n _this._map = def.map || def.filter;\n _this._textures = def.textures;\n if (typeof def.image === \"object\" && isHash(def.image)) {\n _this._imageSrc = def.image.src || def.image.url;\n if (typeof def.image.ratio === \"number\") {\n _this._pixelRatio = def.image.ratio;\n }\n } else {\n if (typeof def.imagePath === \"string\") {\n _this._imageSrc = def.imagePath;\n } else if (typeof def.image === \"string\") {\n _this._imageSrc = def.image;\n }\n if (typeof def.imageRatio === \"number\") {\n _this._pixelRatio = def.imageRatio;\n }\n }\n deprecatedWarning(def);\n return _this;\n }\n Atlas2.prototype.load = function() {\n return __awaiter$1(this, void 0, void 0, function() {\n var image2;\n return __generator$1(this, function(_a) {\n switch (_a.label) {\n case 0:\n if (!this._imageSrc)\n return [3, 2];\n return [4, asyncLoadImage(this._imageSrc)];\n case 1:\n image2 = _a.sent();\n this.setSourceImage(image2, this._pixelRatio);\n _a.label = 2;\n case 2:\n return [\n 2\n /*return*/\n ];\n }\n });\n });\n };\n return Atlas2;\n }(ImageTexture)\n);\nfunction asyncLoadImage(src) {\n return new Promise(function(resolve, reject) {\n var img = new Image();\n img.onload = function() {\n resolve(img);\n };\n img.onerror = function(error) {\n console.error(\"Loading failed: \" + src);\n reject(error);\n };\n img.src = src;\n });\n}\nfunction deprecatedWarning(def) {\n if (\"filter\" in def)\n console.warn(\"'filter' field of atlas definition is deprecated\");\n if (\"cutouts\" in def)\n console.warn(\"'cutouts' field of atlas definition is deprecated\");\n if (\"sprites\" in def)\n console.warn(\"'sprites' field of atlas definition is deprecated\");\n if (\"factory\" in def)\n console.warn(\"'factory' field of atlas definition is deprecated\");\n if (\"ratio\" in def)\n console.warn(\"'ratio' field of atlas definition is deprecated\");\n if (\"imagePath\" in def)\n console.warn(\"'imagePath' field of atlas definition is deprecated\");\n if (\"imageRatio\" in def)\n console.warn(\"'imageRatio' field of atlas definition is deprecated\");\n if (typeof def.image === \"object\" && \"url\" in def.image)\n console.warn(\"'image.url' field of atlas definition is deprecated\");\n}\nvar __extends$6 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __awaiter = function(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = function(thisArg, body) {\n var _ = { label: 0, sent: function() {\n if (t[0] & 1)\n throw t[1];\n return t[1];\n }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f)\n throw new TypeError(\"Generator is already executing.\");\n while (_)\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n return t;\n if (y = 0, t)\n op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return { value: op[1], done: false };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2])\n _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5)\n throw op[1];\n return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nfunction isAtlasSpriteDefinition(selection) {\n return typeof selection === \"object\" && isHash(selection) && \"number\" === typeof selection.width && \"number\" === typeof selection.height;\n}\nvar TextureSelection = (\n /** @class */\n function() {\n function TextureSelection2(selection, atlas2) {\n this.selection = selection;\n this.atlas = atlas2;\n }\n TextureSelection2.prototype.resolve = function(selection, subquery) {\n if (!selection) {\n return NO_TEXTURE;\n } else if (Array.isArray(selection)) {\n return this.resolve(selection[0]);\n } else if (selection instanceof Texture) {\n return selection;\n } else if (isAtlasSpriteDefinition(selection)) {\n if (!this.atlas) {\n return NO_TEXTURE;\n }\n return this.atlas.pipeSpriteTexture(selection);\n } else if (typeof selection === \"object\" && isHash(selection) && typeof subquery !== \"undefined\") {\n return this.resolve(selection[subquery]);\n } else if (typeof selection === \"function\" && isFn(selection)) {\n return this.resolve(selection(subquery));\n } else if (typeof selection === \"string\") {\n if (!this.atlas) {\n return NO_TEXTURE;\n }\n return this.resolve(this.atlas.findSpriteDefinition(selection));\n }\n };\n TextureSelection2.prototype.one = function(subquery) {\n return this.resolve(this.selection, subquery);\n };\n TextureSelection2.prototype.array = function(arr) {\n var array = Array.isArray(arr) ? arr : [];\n if (Array.isArray(this.selection)) {\n for (var i = 0; i < this.selection.length; i++) {\n array[i] = this.resolve(this.selection[i]);\n }\n } else {\n array[0] = this.resolve(this.selection);\n }\n return array;\n };\n return TextureSelection2;\n }()\n);\nvar NO_TEXTURE = new /** @class */\n(function(_super) {\n __extends$6(class_1, _super);\n function class_1() {\n var _this = _super.call(this) || this;\n _this.setSourceDimension(0, 0);\n return _this;\n }\n class_1.prototype.getWidth = function() {\n return 0;\n };\n class_1.prototype.getHeight = function() {\n return 0;\n };\n class_1.prototype.prerender = function(context) {\n return false;\n };\n class_1.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n };\n class_1.prototype.setSourceCoordinate = function(x, y) {\n };\n class_1.prototype.setSourceDimension = function(w, h) {\n };\n class_1.prototype.setDestinationCoordinate = function(x, y) {\n };\n class_1.prototype.setDestinationDimension = function(w, h) {\n };\n class_1.prototype.draw = function() {\n };\n return class_1;\n}(Texture))();\nvar NO_SELECTION = new TextureSelection(NO_TEXTURE);\nvar ATLAS_MEMO_BY_NAME = {};\nvar ATLAS_ARRAY = [];\nfunction atlas(def) {\n return __awaiter(this, void 0, Promise, function() {\n var atlas2;\n return __generator(this, function(_a) {\n switch (_a.label) {\n case 0:\n if (def instanceof Atlas) {\n atlas2 = def;\n } else {\n atlas2 = new Atlas(def);\n }\n if (atlas2.name) {\n ATLAS_MEMO_BY_NAME[atlas2.name] = atlas2;\n }\n ATLAS_ARRAY.push(atlas2);\n return [4, atlas2.load()];\n case 1:\n _a.sent();\n return [2, atlas2];\n }\n });\n });\n}\nfunction texture(query) {\n if (\"string\" !== typeof query) {\n return new TextureSelection(query);\n }\n var result = null;\n var colonIndex = query.indexOf(\":\");\n if (colonIndex > 0 && query.length > colonIndex + 1) {\n var atlas_1 = ATLAS_MEMO_BY_NAME[query.slice(0, colonIndex)];\n result = atlas_1 && atlas_1.select(query.slice(colonIndex + 1));\n }\n if (!result) {\n var atlas_2 = ATLAS_MEMO_BY_NAME[query];\n result = atlas_2 && atlas_2.select();\n }\n if (!result) {\n for (var i = 0; i < ATLAS_ARRAY.length; i++) {\n result = ATLAS_ARRAY[i].select(query);\n if (result) {\n break;\n }\n }\n }\n if (!result) {\n console.error(\"Texture not found: \" + query);\n result = NO_SELECTION;\n }\n return result;\n}\nvar __extends$5 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar ResizableTexture = (\n /** @class */\n function(_super) {\n __extends$5(ResizableTexture2, _super);\n function ResizableTexture2(source, mode) {\n var _this = _super.call(this) || this;\n _this._source = source;\n _this._resizeMode = mode;\n return _this;\n }\n ResizableTexture2.prototype.getWidth = function() {\n var _a;\n return (_a = this.dw) !== null && _a !== void 0 ? _a : this._source.getWidth();\n };\n ResizableTexture2.prototype.getHeight = function() {\n var _a;\n return (_a = this.dh) !== null && _a !== void 0 ? _a : this._source.getHeight();\n };\n ResizableTexture2.prototype.prerender = function(context) {\n return false;\n };\n ResizableTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var texture2 = this._source;\n if (texture2 === null || typeof texture2 !== \"object\") {\n return;\n }\n var outWidth = dw;\n var outHeight = dh;\n var left = Number.isFinite(texture2.left) ? texture2.left : 0;\n var right = Number.isFinite(texture2.right) ? texture2.right : 0;\n var top = Number.isFinite(texture2.top) ? texture2.top : 0;\n var bottom = Number.isFinite(texture2.bottom) ? texture2.bottom : 0;\n var width = texture2.getWidth() - left - right;\n var height = texture2.getHeight() - top - bottom;\n if (!this._innerSize) {\n outWidth = Math.max(outWidth - left - right, 0);\n outHeight = Math.max(outHeight - top - bottom, 0);\n }\n if (top > 0 && left > 0) {\n texture2.draw(context, 0, 0, left, top, 0, 0, left, top);\n }\n if (bottom > 0 && left > 0) {\n texture2.draw(context, 0, height + top, left, bottom, 0, outHeight + top, left, bottom);\n }\n if (top > 0 && right > 0) {\n texture2.draw(context, width + left, 0, right, top, outWidth + left, 0, right, top);\n }\n if (bottom > 0 && right > 0) {\n texture2.draw(context, width + left, height + top, right, bottom, outWidth + left, outHeight + top, right, bottom);\n }\n if (this._resizeMode === \"stretch\") {\n if (top > 0) {\n texture2.draw(context, left, 0, width, top, left, 0, outWidth, top);\n }\n if (bottom > 0) {\n texture2.draw(context, left, height + top, width, bottom, left, outHeight + top, outWidth, bottom);\n }\n if (left > 0) {\n texture2.draw(context, 0, top, left, height, 0, top, left, outHeight);\n }\n if (right > 0) {\n texture2.draw(context, width + left, top, right, height, outWidth + left, top, right, outHeight);\n }\n texture2.draw(context, left, top, width, height, left, top, outWidth, outHeight);\n } else if (this._resizeMode === \"tile\") {\n var l = left;\n var r = outWidth;\n var w = void 0;\n while (r > 0) {\n w = Math.min(width, r);\n r -= width;\n var t = top;\n var b = outHeight;\n var h = void 0;\n while (b > 0) {\n h = Math.min(height, b);\n b -= height;\n texture2.draw(context, left, top, w, h, l, t, w, h);\n if (r <= 0) {\n if (left) {\n texture2.draw(context, 0, top, left, h, 0, t, left, h);\n }\n if (right) {\n texture2.draw(context, width + left, top, right, h, l + w, t, right, h);\n }\n }\n t += h;\n }\n if (top) {\n texture2.draw(context, left, 0, w, top, l, 0, w, top);\n }\n if (bottom) {\n texture2.draw(context, left, height + top, w, bottom, l, t, w, bottom);\n }\n l += w;\n }\n }\n };\n return ResizableTexture2;\n }(Texture)\n);\nfunction getPixelRatio() {\n return typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1;\n}\nfunction isValidFitMode(value) {\n return value && (value === \"cover\" || value === \"contain\" || value === \"fill\" || value === \"in\" || value === \"in-pad\" || value === \"out\" || value === \"out-crop\");\n}\nvar iid$1 = 0;\nvar Pin = (\n /** @class */\n function() {\n function Pin2(owner) {\n this.uid = \"pin:\" + uid();\n this._owner = owner;\n this._parent = null;\n this._relativeMatrix = new Matrix();\n this._absoluteMatrix = new Matrix();\n this.reset();\n }\n Pin2.prototype.reset = function() {\n this._textureAlpha = 1;\n this._alpha = 1;\n this._width = 0;\n this._height = 0;\n this._scaleX = 1;\n this._scaleY = 1;\n this._skewX = 0;\n this._skewY = 0;\n this._rotation = 0;\n this._pivoted = false;\n this._pivotX = 0;\n this._pivotY = 0;\n this._handled = false;\n this._handleX = 0;\n this._handleY = 0;\n this._aligned = false;\n this._alignX = 0;\n this._alignY = 0;\n this._offsetX = 0;\n this._offsetY = 0;\n this._boxX = 0;\n this._boxY = 0;\n this._boxWidth = this._width;\n this._boxHeight = this._height;\n this._ts_translate = ++iid$1;\n this._ts_transform = ++iid$1;\n this._ts_matrix = ++iid$1;\n };\n Pin2.prototype._update = function() {\n this._parent = this._owner._parent && this._owner._parent._pin;\n if (this._handled && this._mo_handle != this._ts_transform) {\n this._mo_handle = this._ts_transform;\n this._ts_translate = ++iid$1;\n }\n if (this._aligned && this._parent && this._mo_align != this._parent._ts_transform) {\n this._mo_align = this._parent._ts_transform;\n this._ts_translate = ++iid$1;\n }\n return this;\n };\n Pin2.prototype.toString = function() {\n return this._owner + \" (\" + (this._parent ? this._parent._owner : null) + \")\";\n };\n Pin2.prototype.absoluteMatrix = function() {\n this._update();\n var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_matrix : 0);\n if (this._mo_abs == ts) {\n return this._absoluteMatrix;\n }\n this._mo_abs = ts;\n var abs = this._absoluteMatrix;\n abs.reset(this.relativeMatrix());\n this._parent && abs.concat(this._parent._absoluteMatrix);\n this._ts_matrix = ++iid$1;\n return abs;\n };\n Pin2.prototype.relativeMatrix = function() {\n this._update();\n var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_transform : 0);\n if (this._mo_rel == ts) {\n return this._relativeMatrix;\n }\n this._mo_rel = ts;\n var rel = this._relativeMatrix;\n rel.identity();\n if (this._pivoted) {\n rel.translate(-this._pivotX * this._width, -this._pivotY * this._height);\n }\n rel.scale(this._scaleX, this._scaleY);\n rel.skew(this._skewX, this._skewY);\n rel.rotate(this._rotation);\n if (this._pivoted) {\n rel.translate(this._pivotX * this._width, this._pivotY * this._height);\n }\n if (this._pivoted) {\n this._boxX = 0;\n this._boxY = 0;\n this._boxWidth = this._width;\n this._boxHeight = this._height;\n } else {\n var p = void 0;\n var q = void 0;\n if (rel.a > 0 && rel.c > 0 || rel.a < 0 && rel.c < 0) {\n p = 0;\n q = rel.a * this._width + rel.c * this._height;\n } else {\n p = rel.a * this._width;\n q = rel.c * this._height;\n }\n if (p > q) {\n this._boxX = q;\n this._boxWidth = p - q;\n } else {\n this._boxX = p;\n this._boxWidth = q - p;\n }\n if (rel.b > 0 && rel.d > 0 || rel.b < 0 && rel.d < 0) {\n p = 0;\n q = rel.b * this._width + rel.d * this._height;\n } else {\n p = rel.b * this._width;\n q = rel.d * this._height;\n }\n if (p > q) {\n this._boxY = q;\n this._boxHeight = p - q;\n } else {\n this._boxY = p;\n this._boxHeight = q - p;\n }\n }\n this._x = this._offsetX;\n this._y = this._offsetY;\n this._x -= this._boxX + this._handleX * this._boxWidth;\n this._y -= this._boxY + this._handleY * this._boxHeight;\n if (this._aligned && this._parent) {\n this._parent.relativeMatrix();\n this._x += this._alignX * this._parent._width;\n this._y += this._alignY * this._parent._height;\n }\n rel.translate(this._x, this._y);\n return this._relativeMatrix;\n };\n Pin2.prototype.get = function(key) {\n if (typeof getters[key] === \"function\") {\n return getters[key](this);\n }\n };\n Pin2.prototype.set = function(a, b) {\n if (typeof a === \"string\") {\n if (typeof setters[a] === \"function\" && typeof b !== \"undefined\") {\n setters[a](this, b);\n }\n } else if (typeof a === \"object\") {\n for (b in a) {\n if (typeof setters[b] === \"function\" && typeof a[b] !== \"undefined\") {\n setters[b](this, a[b], a);\n }\n }\n }\n if (this._owner) {\n this._owner._ts_pin = ++iid$1;\n this._owner.touch();\n }\n return this;\n };\n Pin2.prototype.fit = function(width, height, mode) {\n this._ts_transform = ++iid$1;\n if (mode === \"contain\") {\n mode = \"in-pad\";\n }\n if (mode === \"cover\") {\n mode = \"out-crop\";\n }\n if (typeof width === \"number\") {\n this._scaleX = width / this._unscaled_width;\n this._width = this._unscaled_width;\n }\n if (typeof height === \"number\") {\n this._scaleY = height / this._unscaled_height;\n this._height = this._unscaled_height;\n }\n if (typeof width === \"number\" && typeof height === \"number\" && typeof mode === \"string\") {\n if (mode === \"fill\")\n ;\n else if (mode === \"out\" || mode === \"out-crop\") {\n this._scaleX = this._scaleY = Math.max(this._scaleX, this._scaleY);\n } else if (mode === \"in\" || mode === \"in-pad\") {\n this._scaleX = this._scaleY = Math.min(this._scaleX, this._scaleY);\n }\n if (mode === \"out-crop\" || mode === \"in-pad\") {\n this._width = width / this._scaleX;\n this._height = height / this._scaleY;\n }\n }\n };\n return Pin2;\n }()\n);\nvar getters = {\n alpha: function(pin) {\n return pin._alpha;\n },\n textureAlpha: function(pin) {\n return pin._textureAlpha;\n },\n width: function(pin) {\n return pin._width;\n },\n height: function(pin) {\n return pin._height;\n },\n boxWidth: function(pin) {\n return pin._boxWidth;\n },\n boxHeight: function(pin) {\n return pin._boxHeight;\n },\n // scale : function(pin: Pin) {\n // },\n scaleX: function(pin) {\n return pin._scaleX;\n },\n scaleY: function(pin) {\n return pin._scaleY;\n },\n // skew : function(pin: Pin) {\n // },\n skewX: function(pin) {\n return pin._skewX;\n },\n skewY: function(pin) {\n return pin._skewY;\n },\n rotation: function(pin) {\n return pin._rotation;\n },\n // pivot : function(pin: Pin) {\n // },\n pivotX: function(pin) {\n return pin._pivotX;\n },\n pivotY: function(pin) {\n return pin._pivotY;\n },\n // offset : function(pin: Pin) {\n // },\n offsetX: function(pin) {\n return pin._offsetX;\n },\n offsetY: function(pin) {\n return pin._offsetY;\n },\n // align : function(pin: Pin) {\n // },\n alignX: function(pin) {\n return pin._alignX;\n },\n alignY: function(pin) {\n return pin._alignY;\n },\n // handle : function(pin: Pin) {\n // },\n handleX: function(pin) {\n return pin._handleX;\n },\n handleY: function(pin) {\n return pin._handleY;\n }\n};\nvar setters = {\n alpha: function(pin, value) {\n pin._alpha = value;\n },\n textureAlpha: function(pin, value) {\n pin._textureAlpha = value;\n },\n width: function(pin, value) {\n pin._unscaled_width = value;\n pin._width = value;\n pin._ts_transform = ++iid$1;\n },\n height: function(pin, value) {\n pin._unscaled_height = value;\n pin._height = value;\n pin._ts_transform = ++iid$1;\n },\n scale: function(pin, value) {\n pin._scaleX = value;\n pin._scaleY = value;\n pin._ts_transform = ++iid$1;\n },\n scaleX: function(pin, value) {\n pin._scaleX = value;\n pin._ts_transform = ++iid$1;\n },\n scaleY: function(pin, value) {\n pin._scaleY = value;\n pin._ts_transform = ++iid$1;\n },\n skew: function(pin, value) {\n pin._skewX = value;\n pin._skewY = value;\n pin._ts_transform = ++iid$1;\n },\n skewX: function(pin, value) {\n pin._skewX = value;\n pin._ts_transform = ++iid$1;\n },\n skewY: function(pin, value) {\n pin._skewY = value;\n pin._ts_transform = ++iid$1;\n },\n rotation: function(pin, value) {\n pin._rotation = value;\n pin._ts_transform = ++iid$1;\n },\n pivot: function(pin, value) {\n pin._pivotX = value;\n pin._pivotY = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n pivotX: function(pin, value) {\n pin._pivotX = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n pivotY: function(pin, value) {\n pin._pivotY = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n offset: function(pin, value) {\n pin._offsetX = value;\n pin._offsetY = value;\n pin._ts_translate = ++iid$1;\n },\n offsetX: function(pin, value) {\n pin._offsetX = value;\n pin._ts_translate = ++iid$1;\n },\n offsetY: function(pin, value) {\n pin._offsetY = value;\n pin._ts_translate = ++iid$1;\n },\n align: function(pin, value) {\n this.alignX(pin, value);\n this.alignY(pin, value);\n },\n alignX: function(pin, value) {\n pin._alignX = value;\n pin._aligned = true;\n pin._ts_translate = ++iid$1;\n this.handleX(pin, value);\n },\n alignY: function(pin, value) {\n pin._alignY = value;\n pin._aligned = true;\n pin._ts_translate = ++iid$1;\n this.handleY(pin, value);\n },\n handle: function(pin, value) {\n this.handleX(pin, value);\n this.handleY(pin, value);\n },\n handleX: function(pin, value) {\n pin._handleX = value;\n pin._handled = true;\n pin._ts_translate = ++iid$1;\n },\n handleY: function(pin, value) {\n pin._handleY = value;\n pin._handled = true;\n pin._ts_translate = ++iid$1;\n },\n resizeMode: function(pin, value, all) {\n if (all) {\n if (value == \"in\") {\n value = \"in-pad\";\n } else if (value == \"out\") {\n value = \"out-crop\";\n }\n pin.fit(all.resizeWidth, all.resizeHeight, value);\n }\n },\n resizeWidth: function(pin, value, all) {\n if (!all || !all.resizeMode) {\n pin.fit(value, null);\n }\n },\n resizeHeight: function(pin, value, all) {\n if (!all || !all.resizeMode) {\n pin.fit(null, value);\n }\n },\n scaleMode: function(pin, value, all) {\n if (all) {\n pin.fit(all.scaleWidth, all.scaleHeight, value);\n }\n },\n scaleWidth: function(pin, value, all) {\n if (!all || !all.scaleMode) {\n pin.fit(value, null);\n }\n },\n scaleHeight: function(pin, value, all) {\n if (!all || !all.scaleMode) {\n pin.fit(null, value);\n }\n },\n matrix: function(pin, value) {\n this.scaleX(pin, value.a);\n this.skewX(pin, value.c / value.d);\n this.skewY(pin, value.b / value.a);\n this.scaleY(pin, value.d);\n this.offsetX(pin, value.e);\n this.offsetY(pin, value.f);\n this.rotation(pin, 0);\n }\n};\nfunction IDENTITY(x) {\n return x;\n}\nvar LOOKUP_CACHE = {};\nvar MODE_BY_NAME = {};\nvar EASE_BY_NAME = {};\nvar Easing = (\n /** @class */\n function() {\n function Easing2() {\n }\n Easing2.get = function(token, fallback) {\n fallback = fallback || IDENTITY;\n if (typeof token === \"function\") {\n return token;\n }\n if (typeof token !== \"string\") {\n return fallback;\n }\n var easeFn = LOOKUP_CACHE[token];\n if (easeFn) {\n return easeFn;\n }\n var tokens = /^(\\w+)(-(in|out|in-out|out-in))?(\\((.*)\\))?$/i.exec(token);\n if (!tokens || !tokens.length) {\n return fallback;\n }\n var easeName = tokens[1];\n var easing = EASE_BY_NAME[easeName];\n var modeName = tokens[3];\n var modeFn = MODE_BY_NAME[modeName];\n var params = tokens[5];\n if (!easing) {\n easeFn = fallback;\n } else if (\"fn\" in easing && typeof easing.fn === \"function\") {\n easeFn = easing.fn;\n } else if (\"fc\" in easing && typeof easing.fc === \"function\") {\n var args = params ? params.replace(/\\s+/, \"\").split(\",\") : void 0;\n easeFn = easing.fc.apply(easing.fc, args);\n } else {\n easeFn = fallback;\n }\n if (modeFn) {\n easeFn = modeFn(easeFn);\n }\n LOOKUP_CACHE[token] = easeFn;\n return easeFn;\n };\n return Easing2;\n }()\n);\nfunction addMode(name, fn) {\n MODE_BY_NAME[name] = fn;\n}\nfunction addEaseFn(data) {\n var names = data.name.split(/\\s+/);\n for (var i = 0; i < names.length; i++) {\n var key = names[i];\n if (key) {\n EASE_BY_NAME[key] = data;\n }\n }\n}\naddMode(\"in\", function(f) {\n return f;\n});\naddMode(\"out\", function(f) {\n return function(t) {\n return 1 - f(1 - t);\n };\n});\naddMode(\"in-out\", function(f) {\n return function(t) {\n return t < 0.5 ? f(2 * t) / 2 : 1 - f(2 * (1 - t)) / 2;\n };\n});\naddMode(\"out-in\", function(f) {\n return function(t) {\n return t < 0.5 ? 1 - f(2 * (1 - t)) / 2 : f(2 * t) / 2;\n };\n});\naddEaseFn({\n name: \"linear\",\n fn: function(t) {\n return t;\n }\n});\naddEaseFn({\n name: \"quad\",\n fn: function(t) {\n return t * t;\n }\n});\naddEaseFn({\n name: \"cubic\",\n fn: function(t) {\n return t * t * t;\n }\n});\naddEaseFn({\n name: \"quart\",\n fn: function(t) {\n return t * t * t * t;\n }\n});\naddEaseFn({\n name: \"quint\",\n fn: function(t) {\n return t * t * t * t * t;\n }\n});\naddEaseFn({\n name: \"sin sine\",\n fn: function(t) {\n return 1 - Math.cos(t * Math.PI / 2);\n }\n});\naddEaseFn({\n name: \"exp expo\",\n fn: function(t) {\n return t == 0 ? 0 : Math.pow(2, 10 * (t - 1));\n }\n});\naddEaseFn({\n name: \"circle circ\",\n fn: function(t) {\n return 1 - Math.sqrt(1 - t * t);\n }\n});\naddEaseFn({\n name: \"bounce\",\n fn: function(t) {\n return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 : 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n }\n});\naddEaseFn({\n name: \"poly\",\n fc: function(e) {\n return function(t) {\n return Math.pow(t, e);\n };\n }\n});\naddEaseFn({\n name: \"elastic\",\n fc: function(a, p) {\n p = p || 0.45;\n a = a || 1;\n var s = p / (2 * Math.PI) * Math.asin(1 / a);\n return function(t) {\n return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p);\n };\n }\n});\naddEaseFn({\n name: \"back\",\n fc: function(s) {\n s = typeof s !== \"undefined\" ? s : 1.70158;\n return function(t) {\n return t * t * ((s + 1) * t - s);\n };\n }\n});\nvar Transition = (\n /** @class */\n function() {\n function Transition2(owner, options) {\n if (options === void 0) {\n options = {};\n }\n this.uid = \"transition:\" + uid();\n this._ending = [];\n this._end = {};\n this._duration = options.duration || 400;\n this._delay = options.delay || 0;\n this._owner = owner;\n this._time = 0;\n }\n Transition2.prototype.tick = function(node, elapsed, now, last) {\n this._time += elapsed;\n if (this._time < this._delay) {\n return;\n }\n var time = this._time - this._delay;\n if (!this._start) {\n this._start = {};\n for (var key in this._end) {\n this._start[key] = this._owner.pin(key);\n }\n }\n var p = Math.min(time / this._duration, 1);\n var ended = p >= 1;\n if (typeof this._easing == \"function\") {\n p = this._easing(p);\n }\n var q = 1 - p;\n for (var key in this._end) {\n this._owner.pin(key, this._start[key] * q + this._end[key] * p);\n }\n return ended;\n };\n Transition2.prototype.finish = function() {\n var _this = this;\n this._ending.forEach(function(callback) {\n try {\n callback.call(_this._owner);\n } catch (e) {\n console.error(e);\n }\n });\n return this._next;\n };\n Transition2.prototype.tween = function(a, b) {\n var options;\n if (typeof a === \"object\" && a !== null) {\n options = a;\n } else {\n options = {};\n if (typeof a === \"number\") {\n options.duration = a;\n if (typeof b === \"number\") {\n options.delay = b;\n }\n }\n }\n return this._next = new Transition2(this._owner, options);\n };\n Transition2.prototype.duration = function(duration) {\n this._duration = duration;\n return this;\n };\n Transition2.prototype.delay = function(delay) {\n this._delay = delay;\n return this;\n };\n Transition2.prototype.ease = function(easing) {\n this._easing = Easing.get(easing);\n return this;\n };\n Transition2.prototype.done = function(fn) {\n this._ending.push(fn);\n return this;\n };\n Transition2.prototype.hide = function() {\n this._ending.push(function() {\n this.hide();\n });\n this._hide = true;\n return this;\n };\n Transition2.prototype.remove = function() {\n this._ending.push(function() {\n this.remove();\n });\n this._remove = true;\n return this;\n };\n Transition2.prototype.pin = function(a, b) {\n if (typeof a === \"object\") {\n for (var attr in a) {\n pinning(this._owner, this._end, attr, a[attr]);\n }\n } else if (typeof b !== \"undefined\") {\n pinning(this._owner, this._end, a, b);\n }\n return this;\n };\n Transition2.prototype.then = function(fn) {\n this.done(fn);\n return this;\n };\n Transition2.prototype.clear = function(forward) {\n return this;\n };\n Transition2.prototype.size = function(w, h) {\n this.pin(\"width\", w);\n this.pin(\"height\", h);\n return this;\n };\n Transition2.prototype.width = function(w) {\n if (typeof w === \"undefined\") {\n return this.pin(\"width\");\n }\n this.pin(\"width\", w);\n return this;\n };\n Transition2.prototype.height = function(h) {\n if (typeof h === \"undefined\") {\n return this.pin(\"height\");\n }\n this.pin(\"height\", h);\n return this;\n };\n Transition2.prototype.offset = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n }\n this.pin(\"offsetX\", a);\n this.pin(\"offsetY\", b);\n return this;\n };\n Transition2.prototype.rotate = function(a) {\n this.pin(\"rotation\", a);\n return this;\n };\n Transition2.prototype.skew = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\") {\n b = a;\n }\n this.pin(\"skewX\", a);\n this.pin(\"skewY\", b);\n return this;\n };\n Transition2.prototype.scale = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\") {\n b = a;\n }\n this.pin(\"scaleX\", a);\n this.pin(\"scaleY\", b);\n return this;\n };\n Transition2.prototype.alpha = function(a, ta) {\n this.pin(\"alpha\", a);\n if (typeof ta !== \"undefined\") {\n this.pin(\"textureAlpha\", ta);\n }\n return this;\n };\n return Transition2;\n }()\n);\nfunction pinning(node, map, key, value) {\n if (typeof node.pin(key) === \"number\") {\n map[key] = value;\n } else if (typeof node.pin(key + \"X\") === \"number\" && typeof node.pin(key + \"Y\") === \"number\") {\n map[key + \"X\"] = value;\n map[key + \"Y\"] = value;\n }\n}\nvar iid = 0;\nstats.create = 0;\nfunction assertType(obj) {\n if (obj && obj instanceof Node) {\n return obj;\n }\n throw \"Invalid node: \" + obj;\n}\nfunction create() {\n return layout();\n}\nfunction layer() {\n return maximize();\n}\nfunction box() {\n return minimize();\n}\nfunction layout() {\n return new Node();\n}\nfunction row(align) {\n return layout().row(align).label(\"Row\");\n}\nfunction column(align) {\n return layout().column(align).label(\"Column\");\n}\nfunction minimize() {\n return layout().minimize().label(\"Minimize\");\n}\nfunction maximize() {\n return layout().maximize().label(\"Maximize\");\n}\nvar Node = (\n /** @class */\n function() {\n function Node2() {\n var _this = this;\n this.uid = \"node:\" + uid();\n this._label = \"\";\n this._parent = null;\n this._next = null;\n this._prev = null;\n this._first = null;\n this._last = null;\n this._visible = true;\n this._alpha = 1;\n this._padding = 0;\n this._spacing = 0;\n this._pin = new Pin(this);\n this._listeners = {};\n this._attrs = {};\n this._flags = {};\n this._transitions = [];\n this._tickBefore = [];\n this._tickAfter = [];\n this.MAX_ELAPSE = Infinity;\n this._transitionTickInitied = false;\n this._transitionTickLastTime = 0;\n this._transitionTick = function(elapsed, now, last) {\n if (!_this._transitions.length) {\n return false;\n }\n var ignore = _this._transitionTickLastTime !== last;\n _this._transitionTickLastTime = now;\n if (ignore) {\n return true;\n }\n var head = _this._transitions[0];\n var ended = head.tick(_this, elapsed, now, last);\n if (ended) {\n if (head === _this._transitions[0]) {\n _this._transitions.shift();\n }\n var next = head.finish();\n if (next) {\n _this._transitions.unshift(next);\n }\n }\n return true;\n };\n stats.create++;\n }\n Node2.prototype.matrix = function(relative) {\n if (relative === void 0) {\n relative = false;\n }\n if (relative === true) {\n return this._pin.relativeMatrix();\n }\n return this._pin.absoluteMatrix();\n };\n Node2.prototype.getPixelRatio = function() {\n var _a;\n var m = (_a = this._parent) === null || _a === void 0 ? void 0 : _a.matrix();\n var pixelRatio = !m ? 1 : Math.max(Math.abs(m.a), Math.abs(m.b)) / getPixelRatio();\n return pixelRatio;\n };\n Node2.prototype.pin = function(a, b) {\n if (typeof a === \"object\") {\n this._pin.set(a);\n return this;\n } else if (typeof a === \"string\") {\n if (typeof b === \"undefined\") {\n return this._pin.get(a);\n } else {\n this._pin.set(a, b);\n return this;\n }\n } else if (typeof a === \"undefined\") {\n return this._pin;\n }\n };\n Node2.prototype.fit = function(a, b, c) {\n if (typeof a === \"object\") {\n c = b;\n b = a.y;\n a = a.x;\n }\n this._pin.fit(a, b, c);\n return this;\n };\n Node2.prototype.scaleTo = function(a, b, c) {\n return this.fit(a, b, c);\n };\n Node2.prototype.toString = function() {\n return \"[\" + this._label + \"]\";\n };\n Node2.prototype.id = function(id) {\n return this.label(id);\n };\n Node2.prototype.label = function(label) {\n if (typeof label === \"undefined\") {\n return this._label;\n }\n this._label = label;\n return this;\n };\n Node2.prototype.attr = function(name, value) {\n if (typeof value === \"undefined\") {\n return this._attrs !== null ? this._attrs[name] : void 0;\n }\n (this._attrs !== null ? this._attrs : this._attrs = {})[name] = value;\n return this;\n };\n Node2.prototype.visible = function(visible) {\n if (typeof visible === \"undefined\") {\n return this._visible;\n }\n this._visible = visible;\n this._parent && (this._parent._ts_children = ++iid);\n this._ts_pin = ++iid;\n this.touch();\n return this;\n };\n Node2.prototype.hide = function() {\n this.visible(false);\n return this;\n };\n Node2.prototype.show = function() {\n this.visible(true);\n return this;\n };\n Node2.prototype.parent = function() {\n return this._parent;\n };\n Node2.prototype.next = function(visible) {\n var next = this._next;\n while (next && visible && !next._visible) {\n next = next._next;\n }\n return next;\n };\n Node2.prototype.prev = function(visible) {\n var prev = this._prev;\n while (prev && visible && !prev._visible) {\n prev = prev._prev;\n }\n return prev;\n };\n Node2.prototype.first = function(visible) {\n var next = this._first;\n while (next && visible && !next._visible) {\n next = next._next;\n }\n return next;\n };\n Node2.prototype.last = function(visible) {\n var prev = this._last;\n while (prev && visible && !prev._visible) {\n prev = prev._prev;\n }\n return prev;\n };\n Node2.prototype.visit = function(visitor, payload) {\n var reverse = visitor.reverse;\n var visible = visitor.visible;\n if (visitor.start && visitor.start(this, payload)) {\n return;\n }\n var child;\n var next = reverse ? this.last(visible) : this.first(visible);\n while (child = next) {\n next = reverse ? child.prev(visible) : child.next(visible);\n if (child.visit(visitor, payload)) {\n return true;\n }\n }\n return visitor.end && visitor.end(this, payload);\n };\n Node2.prototype.append = function(child, more) {\n if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) {\n Node2.append(this, child[i]);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n Node2.append(this, arguments[i]);\n }\n } else if (typeof child !== \"undefined\")\n Node2.append(this, child);\n return this;\n };\n Node2.prototype.prepend = function(child, more) {\n if (Array.isArray(child)) {\n for (var i = child.length - 1; i >= 0; i--) {\n Node2.prepend(this, child[i]);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = arguments.length - 1; i >= 0; i--) {\n Node2.prepend(this, arguments[i]);\n }\n } else if (typeof child !== \"undefined\")\n Node2.prepend(this, child);\n return this;\n };\n Node2.prototype.appendTo = function(parent) {\n Node2.append(parent, this);\n return this;\n };\n Node2.prototype.prependTo = function(parent) {\n Node2.prepend(parent, this);\n return this;\n };\n Node2.prototype.insertNext = function(sibling, more) {\n if (Array.isArray(sibling)) {\n for (var i = 0; i < sibling.length; i++) {\n Node2.insertAfter(sibling[i], this);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n Node2.insertAfter(arguments[i], this);\n }\n } else if (typeof sibling !== \"undefined\") {\n Node2.insertAfter(sibling, this);\n }\n return this;\n };\n Node2.prototype.insertPrev = function(sibling, more) {\n if (Array.isArray(sibling)) {\n for (var i = sibling.length - 1; i >= 0; i--) {\n Node2.insertBefore(sibling[i], this);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = arguments.length - 1; i >= 0; i--) {\n Node2.insertBefore(arguments[i], this);\n }\n } else if (typeof sibling !== \"undefined\") {\n Node2.insertBefore(sibling, this);\n }\n return this;\n };\n Node2.prototype.insertAfter = function(prev) {\n Node2.insertAfter(this, prev);\n return this;\n };\n Node2.prototype.insertBefore = function(next) {\n Node2.insertBefore(this, next);\n return this;\n };\n Node2.append = function(parent, child) {\n assertType(child);\n assertType(parent);\n child.remove();\n if (parent._last) {\n parent._last._next = child;\n child._prev = parent._last;\n }\n child._parent = parent;\n parent._last = child;\n if (!parent._first) {\n parent._first = child;\n }\n child._parent._flag(child, true);\n child._ts_parent = ++iid;\n parent._ts_children = ++iid;\n parent.touch();\n };\n Node2.prepend = function(parent, child) {\n assertType(child);\n assertType(parent);\n child.remove();\n if (parent._first) {\n parent._first._prev = child;\n child._next = parent._first;\n }\n child._parent = parent;\n parent._first = child;\n if (!parent._last) {\n parent._last = child;\n }\n child._parent._flag(child, true);\n child._ts_parent = ++iid;\n parent._ts_children = ++iid;\n parent.touch();\n };\n Node2.insertBefore = function(self, next) {\n assertType(self);\n assertType(next);\n self.remove();\n var parent = next._parent;\n var prev = next._prev;\n if (!parent) {\n return;\n }\n next._prev = self;\n prev && (prev._next = self) || parent && (parent._first = self);\n self._parent = parent;\n self._prev = prev;\n self._next = next;\n self._parent._flag(self, true);\n self._ts_parent = ++iid;\n self.touch();\n };\n Node2.insertAfter = function(self, prev) {\n assertType(self);\n assertType(prev);\n self.remove();\n var parent = prev._parent;\n var next = prev._next;\n if (!parent) {\n return;\n }\n prev._next = self;\n next && (next._prev = self) || parent && (parent._last = self);\n self._parent = parent;\n self._prev = prev;\n self._next = next;\n self._parent._flag(self, true);\n self._ts_parent = ++iid;\n self.touch();\n };\n Node2.prototype.remove = function(child, more) {\n if (typeof child !== \"undefined\") {\n if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) {\n assertType(child[i]).remove();\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n assertType(arguments[i]).remove();\n }\n } else {\n assertType(child).remove();\n }\n return this;\n }\n if (this._prev) {\n this._prev._next = this._next;\n }\n if (this._next) {\n this._next._prev = this._prev;\n }\n if (this._parent) {\n if (this._parent._first === this) {\n this._parent._first = this._next;\n }\n if (this._parent._last === this) {\n this._parent._last = this._prev;\n }\n this._parent._flag(this, false);\n this._parent._ts_children = ++iid;\n this._parent.touch();\n }\n this._prev = this._next = this._parent = null;\n this._ts_parent = ++iid;\n return this;\n };\n Node2.prototype.empty = function() {\n var child = null;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child._prev = child._next = child._parent = null;\n this._flag(child, false);\n }\n this._first = this._last = null;\n this._ts_children = ++iid;\n this.touch();\n return this;\n };\n Node2.prototype.touch = function() {\n this._ts_touch = ++iid;\n this._parent && this._parent.touch();\n return this;\n };\n Node2.prototype._flag = function(key, value) {\n if (typeof value === \"undefined\") {\n return this._flags !== null && this._flags[key] || 0;\n }\n if (typeof key === \"string\") {\n if (value) {\n this._flags = this._flags || {};\n if (!this._flags[key] && this._parent) {\n this._parent._flag(key, true);\n }\n this._flags[key] = (this._flags[key] || 0) + 1;\n } else if (this._flags && this._flags[key] > 0) {\n if (this._flags[key] == 1 && this._parent) {\n this._parent._flag(key, false);\n }\n this._flags[key] = this._flags[key] - 1;\n }\n }\n if (typeof key === \"object\") {\n if (key._flags) {\n for (var type in key._flags) {\n if (key._flags[type] > 0) {\n this._flag(type, value);\n }\n }\n }\n }\n return this;\n };\n Node2.prototype.hitTest = function(hit) {\n var width = this._pin._width;\n var height = this._pin._height;\n return hit.x >= 0 && hit.x <= width && hit.y >= 0 && hit.y <= height;\n };\n Node2.prototype.prerender = function() {\n if (!this._visible) {\n return;\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child.prerender();\n }\n };\n Node2.prototype.render = function(context) {\n if (!this._visible) {\n return;\n }\n stats.node++;\n var m = this.matrix();\n context.setTransform(m.a, m.b, m.c, m.d, m.e, m.f);\n this._alpha = this._pin._alpha * (this._parent ? this._parent._alpha : 1);\n var alpha = this._pin._textureAlpha * this._alpha;\n if (context.globalAlpha != alpha) {\n context.globalAlpha = alpha;\n }\n if (this._textures) {\n for (var i = 0, n = this._textures.length; i < n; i++) {\n this._textures[i].draw(context);\n }\n }\n if (context.globalAlpha != this._alpha) {\n context.globalAlpha = this._alpha;\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child.render(context);\n }\n };\n Node2.prototype._tick = function(elapsed, now, last) {\n if (!this._visible) {\n return;\n }\n if (elapsed > this.MAX_ELAPSE) {\n elapsed = this.MAX_ELAPSE;\n }\n var ticked = false;\n if (this._tickBefore !== null) {\n for (var i = 0; i < this._tickBefore.length; i++) {\n stats.tick++;\n var tickFn = this._tickBefore[i];\n ticked = tickFn.call(this, elapsed, now, last) === true || ticked;\n }\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n if (child._flag(\"_tick\")) {\n ticked = child._tick(elapsed, now, last) === true ? true : ticked;\n }\n }\n if (this._tickAfter !== null) {\n for (var i = 0; i < this._tickAfter.length; i++) {\n stats.tick++;\n var tickFn = this._tickAfter[i];\n ticked = tickFn.call(this, elapsed, now, last) === true || ticked;\n }\n }\n return ticked;\n };\n Node2.prototype.tick = function(callback, before) {\n var _a, _b;\n if (before === void 0) {\n before = false;\n }\n if (typeof callback !== \"function\") {\n return;\n }\n if (before) {\n if (this._tickBefore === null) {\n this._tickBefore = [];\n }\n this._tickBefore.push(callback);\n } else {\n if (this._tickAfter === null) {\n this._tickAfter = [];\n }\n this._tickAfter.push(callback);\n }\n var hasTickListener = ((_a = this._tickAfter) === null || _a === void 0 ? void 0 : _a.length) > 0 || ((_b = this._tickBefore) === null || _b === void 0 ? void 0 : _b.length) > 0;\n this._flag(\"_tick\", hasTickListener);\n };\n Node2.prototype.untick = function(callback) {\n if (typeof callback !== \"function\") {\n return;\n }\n var i;\n if (this._tickBefore !== null && (i = this._tickBefore.indexOf(callback)) >= 0) {\n this._tickBefore.splice(i, 1);\n }\n if (this._tickAfter !== null && (i = this._tickAfter.indexOf(callback)) >= 0) {\n this._tickAfter.splice(i, 1);\n }\n };\n Node2.prototype.timeout = function(callback, time) {\n this.setTimeout(callback, time);\n };\n Node2.prototype.setTimeout = function(callback, time) {\n function timer(t) {\n if ((time -= t) < 0) {\n this.untick(timer);\n callback.call(this);\n } else {\n return true;\n }\n }\n this.tick(timer);\n return timer;\n };\n Node2.prototype.clearTimeout = function(timer) {\n this.untick(timer);\n };\n Node2.prototype.on = function(type, listener) {\n if (!type || !type.length || typeof listener !== \"function\") {\n return this;\n }\n if (typeof type !== \"string\" && typeof type.join === \"function\") {\n for (var i = 0; i < type.length; i++) {\n this.on(type[i], listener);\n }\n } else if (typeof type === \"string\" && type.indexOf(\" \") > -1) {\n type = type.match(/\\S+/g);\n for (var i = 0; i < type.length; i++) {\n this._on(type[i], listener);\n }\n } else if (typeof type === \"string\") {\n this._on(type, listener);\n } else\n ;\n return this;\n };\n Node2.prototype._on = function(type, listener) {\n if (typeof type !== \"string\" && typeof listener !== \"function\") {\n return;\n }\n this._listeners[type] = this._listeners[type] || [];\n this._listeners[type].push(listener);\n this._flag(type, true);\n };\n Node2.prototype.off = function(type, listener) {\n if (!type || !type.length || typeof listener !== \"function\") {\n return this;\n }\n if (typeof type !== \"string\" && typeof type.join === \"function\") {\n for (var i = 0; i < type.length; i++) {\n this.off(type[i], listener);\n }\n } else if (typeof type === \"string\" && type.indexOf(\" \") > -1) {\n type = type.match(/\\S+/g);\n for (var i = 0; i < type.length; i++) {\n this._off(type[i], listener);\n }\n } else if (typeof type === \"string\") {\n this._off(type, listener);\n } else\n ;\n return this;\n };\n Node2.prototype._off = function(type, listener) {\n if (typeof type !== \"string\" && typeof listener !== \"function\") {\n return;\n }\n var listeners = this._listeners[type];\n if (!listeners || !listeners.length) {\n return;\n }\n var index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n this._flag(type, false);\n }\n };\n Node2.prototype.listeners = function(type) {\n return this._listeners[type];\n };\n Node2.prototype.publish = function(name, args) {\n var 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].apply(this, args);\n }\n return listeners.length;\n };\n Node2.prototype.trigger = function(name, args) {\n this.publish(name, args);\n return this;\n };\n Node2.prototype.size = function(w, h) {\n this.pin(\"width\", w);\n this.pin(\"height\", h);\n return this;\n };\n Node2.prototype.width = function(w) {\n if (typeof w === \"undefined\") {\n return this.pin(\"width\");\n }\n this.pin(\"width\", w);\n return this;\n };\n Node2.prototype.height = function(h) {\n if (typeof h === \"undefined\") {\n return this.pin(\"height\");\n }\n this.pin(\"height\", h);\n return this;\n };\n Node2.prototype.offset = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n }\n this.pin(\"offsetX\", a);\n this.pin(\"offsetY\", b);\n return this;\n };\n Node2.prototype.rotate = function(a) {\n this.pin(\"rotation\", a);\n return this;\n };\n Node2.prototype.skew = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\")\n b = a;\n this.pin(\"skewX\", a);\n this.pin(\"skewY\", b);\n return this;\n };\n Node2.prototype.scale = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\")\n b = a;\n this.pin(\"scaleX\", a);\n this.pin(\"scaleY\", b);\n return this;\n };\n Node2.prototype.alpha = function(a, ta) {\n this.pin(\"alpha\", a);\n if (typeof ta !== \"undefined\") {\n this.pin(\"textureAlpha\", ta);\n }\n return this;\n };\n Node2.prototype.tween = function(a, b, c) {\n var options;\n if (typeof a === \"object\" && a !== null) {\n options = a;\n } else {\n options = {};\n if (typeof a === \"number\") {\n options.duration = a;\n if (typeof b === \"number\") {\n options.delay = b;\n if (typeof c === \"boolean\") {\n options.append = c;\n }\n } else if (typeof b === \"boolean\") {\n options.append = b;\n }\n } else if (typeof a === \"boolean\") {\n options.append = a;\n }\n }\n if (!this._transitionTickInitied) {\n this.tick(this._transitionTick, true);\n this._transitionTickInitied = true;\n }\n this.touch();\n if (!options.append) {\n this._transitions.length = 0;\n }\n var transition = new Transition(this, options);\n this._transitions.push(transition);\n return transition;\n };\n Node2.prototype.row = function(align) {\n this.align(\"row\", align);\n return this;\n };\n Node2.prototype.column = function(align) {\n this.align(\"column\", align);\n return this;\n };\n Node2.prototype.align = function(type, align) {\n var _this = this;\n this._padding = this._padding;\n this._spacing = this._spacing;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n if (_this._mo_seq == _this._ts_touch) {\n return;\n }\n _this._mo_seq = _this._ts_touch;\n var alignChildren = _this._mo_seqAlign != _this._ts_children;\n _this._mo_seqAlign = _this._ts_children;\n var width = 0;\n var height = 0;\n var child;\n var next = _this.first(true);\n var first = true;\n while (child = next) {\n next = child.next(true);\n child.matrix(true);\n var w = child.pin(\"boxWidth\");\n var h = child.pin(\"boxHeight\");\n if (type == \"column\") {\n !first && (height += _this._spacing);\n child.pin(\"offsetY\") != height && child.pin(\"offsetY\", height);\n width = Math.max(width, w);\n height = height + h;\n alignChildren && child.pin(\"alignX\", align);\n } else if (type == \"row\") {\n !first && (width += _this._spacing);\n child.pin(\"offsetX\") != width && child.pin(\"offsetX\", width);\n width = width + w;\n height = Math.max(height, h);\n alignChildren && child.pin(\"alignY\", align);\n }\n first = false;\n }\n width += 2 * _this._padding;\n height += 2 * _this._padding;\n _this.pin(\"width\") != width && _this.pin(\"width\", width);\n _this.pin(\"height\") != height && _this.pin(\"height\", height);\n });\n return this;\n };\n Node2.prototype.box = function() {\n return this.minimize();\n };\n Node2.prototype.layer = function() {\n return this.maximize();\n };\n Node2.prototype.minimize = function() {\n var _this = this;\n this._padding = this._padding;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n if (_this._mo_box == _this._ts_touch) {\n return;\n }\n _this._mo_box = _this._ts_touch;\n var width = 0;\n var height = 0;\n var child;\n var next = _this.first(true);\n while (child = next) {\n next = child.next(true);\n child.matrix(true);\n var w = child.pin(\"boxWidth\");\n var h = child.pin(\"boxHeight\");\n width = Math.max(width, w);\n height = Math.max(height, h);\n }\n width += 2 * _this._padding;\n height += 2 * _this._padding;\n _this.pin(\"width\") != width && _this.pin(\"width\", width);\n _this.pin(\"height\") != height && _this.pin(\"height\", height);\n });\n return this;\n };\n Node2.prototype.maximize = function() {\n var _this = this;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n var parent = _this.parent();\n if (parent) {\n var width = parent.pin(\"width\");\n if (_this.pin(\"width\") != width) {\n _this.pin(\"width\", width);\n }\n var height = parent.pin(\"height\");\n if (_this.pin(\"height\") != height) {\n _this.pin(\"height\", height);\n }\n }\n }, true);\n return this;\n };\n Node2.prototype.padding = function(pad) {\n this._padding = pad;\n return this;\n };\n Node2.prototype.spacing = function(space) {\n this._spacing = space;\n return this;\n };\n return Node2;\n }()\n);\nvar __extends$4 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction sprite(frame) {\n var sprite2 = new Sprite();\n frame && sprite2.texture(frame);\n return sprite2;\n}\nvar Sprite = (\n /** @class */\n function(_super) {\n __extends$4(Sprite2, _super);\n function Sprite2() {\n var _this = _super.call(this) || this;\n _this._tiled = false;\n _this._stretched = false;\n _this.prerenderContext = {};\n _this.label(\"Sprite\");\n _this._textures = [];\n _this._image = null;\n return _this;\n }\n Sprite2.prototype.texture = function(frame) {\n this._image = texture(frame).one();\n if (this._image) {\n this.pin(\"width\", this._image.getWidth());\n this.pin(\"height\", this._image.getHeight());\n if (this._tiled) {\n this._textures[0] = new ResizableTexture(this._image, \"tile\");\n } else if (this._stretched) {\n this._textures[0] = new ResizableTexture(this._image, \"stretch\");\n } else {\n this._textures[0] = new PipeTexture(this._image);\n }\n this._textures.length = 1;\n } else {\n this.pin(\"width\", 0);\n this.pin(\"height\", 0);\n this._textures.length = 0;\n }\n return this;\n };\n Sprite2.prototype.image = function(frame) {\n return this.texture(frame);\n };\n Sprite2.prototype.tile = function(inner) {\n this._tiled = true;\n var texture2 = new ResizableTexture(this._image, \"tile\");\n this._textures[0] = texture2;\n return this;\n };\n Sprite2.prototype.stretch = function(inner) {\n this._stretched = true;\n var texture2 = new ResizableTexture(this._image, \"stretch\");\n this._textures[0] = texture2;\n return this;\n };\n Sprite2.prototype.prerender = function() {\n if (!this._visible) {\n return;\n }\n if (this._image) {\n var pixelRatio = this.getPixelRatio();\n this.prerenderContext.pixelRatio = pixelRatio;\n var updated = this._image.prerender(this.prerenderContext);\n if (updated === true) {\n var w = this._image.getWidth();\n var h = this._image.getHeight();\n this.size(w, h);\n }\n }\n _super.prototype.prerender.call(this);\n };\n Sprite2.prototype.render = function(context) {\n var texture2 = this._textures[0];\n if (texture2 === null || texture2 === void 0 ? void 0 : texture2[\"_resizeMode\"]) {\n texture2.dw = this.pin(\"width\");\n texture2.dh = this.pin(\"height\");\n }\n _super.prototype.render.call(this, context);\n };\n return Sprite2;\n }(Node)\n);\nvar image = sprite;\nvar Image$1 = Sprite;\nvar __extends$3 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar CanvasTexture = (\n /** @class */\n function(_super) {\n __extends$3(CanvasTexture2, _super);\n function CanvasTexture2() {\n var _this = _super.call(this, document.createElement(\"canvas\")) || this;\n _this._lastPixelRatio = 0;\n return _this;\n }\n CanvasTexture2.prototype.setSize = function(textureWidth, textureHeight, pixelRatio) {\n if (pixelRatio === void 0) {\n pixelRatio = 1;\n }\n this._source.width = textureWidth * pixelRatio;\n this._source.height = textureHeight * pixelRatio;\n this._pixelRatio = pixelRatio;\n };\n CanvasTexture2.prototype.getContext = function(type, attributes) {\n if (type === void 0) {\n type = \"2d\";\n }\n return this._source.getContext(type, attributes);\n };\n CanvasTexture2.prototype.getOptimalPixelRatio = function() {\n return Math.ceil(this._lastPixelRatio);\n };\n CanvasTexture2.prototype.setMemoizer = function(memoizer) {\n this._memoizer = memoizer;\n };\n CanvasTexture2.prototype.setDrawer = function(drawer) {\n this._drawer = drawer;\n };\n CanvasTexture2.prototype.prerender = function(context) {\n var newPixelRatio = context.pixelRatio;\n var lastPixelRatio = this._lastPixelRatio;\n var pixelRationChange = lastPixelRatio / newPixelRatio;\n var pixelRatioChanged = lastPixelRatio === 0 || pixelRationChange > 1.25 || pixelRationChange < 0.8;\n if (pixelRatioChanged) {\n this._lastPixelRatio = newPixelRatio;\n }\n var newMemoKey = this._memoizer ? this._memoizer.call(this) : null;\n var memoKeyChanged = this._lastMemoKey !== newMemoKey;\n if (pixelRatioChanged || memoKeyChanged) {\n this._lastMemoKey = newMemoKey;\n this._lastPixelRatio = newPixelRatio;\n if (typeof this._drawer === \"function\") {\n this._drawer.call(this);\n }\n return true;\n }\n };\n CanvasTexture2.prototype.size = function(width, height, pixelRatio) {\n this.setSize(width, height, pixelRatio);\n return this;\n };\n CanvasTexture2.prototype.context = function(type, attributes) {\n if (type === void 0) {\n type = \"2d\";\n }\n return this.getContext(type, attributes);\n };\n CanvasTexture2.prototype.canvas = function(legacyTextureDrawer) {\n if (typeof legacyTextureDrawer === \"function\") {\n legacyTextureDrawer.call(this, this.getContext());\n } else if (typeof legacyTextureDrawer === \"undefined\") {\n if (typeof this._drawer === \"function\") {\n this._drawer.call(this);\n }\n }\n return this;\n };\n return CanvasTexture2;\n }(ImageTexture)\n);\nfunction canvas(type, attributes, legacyTextureDrawer) {\n if (typeof type === \"function\") {\n var texture_1 = new CanvasTexture();\n legacyTextureDrawer = type;\n texture_1.setDrawer(function() {\n legacyTextureDrawer.call(texture_1, texture_1.getContext());\n });\n return texture_1;\n } else if (typeof attributes === \"function\") {\n var texture_2 = new CanvasTexture();\n legacyTextureDrawer = attributes;\n texture_2.setDrawer(function() {\n legacyTextureDrawer.call(texture_2, texture_2.getContext(type));\n });\n return texture_2;\n } else if (typeof legacyTextureDrawer === \"function\") {\n var texture_3 = new CanvasTexture();\n texture_3.setDrawer(function() {\n legacyTextureDrawer.call(texture_3, texture_3.getContext(type, attributes));\n });\n return texture_3;\n } else {\n var texture2 = new CanvasTexture();\n return texture2;\n }\n}\nfunction memoizeDraw(legacySpriteDrawer, legacySpriteMemoizer) {\n if (legacySpriteMemoizer === void 0) {\n legacySpriteMemoizer = function() {\n return null;\n };\n }\n var sprite2 = new Sprite();\n var texture2 = new CanvasTexture();\n sprite2.texture(texture2);\n texture2.setDrawer(function() {\n legacySpriteDrawer(2.5 * texture2._lastPixelRatio, texture2, sprite2);\n });\n texture2.setMemoizer(legacySpriteMemoizer);\n return sprite2;\n}\nvar POINTER_CLICK = \"click\";\nvar POINTER_START = \"touchstart mousedown\";\nvar POINTER_MOVE = \"touchmove mousemove\";\nvar POINTER_END = \"touchend mouseup\";\nvar POINTER_CANCEL = \"touchcancel mousecancel\";\nvar EventPoint = (\n /** @class */\n function() {\n function EventPoint2() {\n }\n EventPoint2.prototype.clone = function(obj) {\n if (obj) {\n obj.x = this.x;\n obj.y = this.y;\n } else {\n obj = {\n x: this.x,\n y: this.y\n };\n }\n return obj;\n };\n EventPoint2.prototype.toString = function() {\n return (this.x | 0) + \"x\" + (this.y | 0);\n };\n return EventPoint2;\n }()\n);\nvar PointerSyntheticEvent = (\n /** @class */\n function() {\n function PointerSyntheticEvent2() {\n this.abs = new EventPoint();\n }\n PointerSyntheticEvent2.prototype.clone = function(obj) {\n if (obj) {\n obj.x = this.x;\n obj.y = this.y;\n } else {\n obj = {\n x: this.x,\n y: this.y\n };\n }\n return obj;\n };\n PointerSyntheticEvent2.prototype.toString = function() {\n return this.type + \": \" + (this.x | 0) + \"x\" + (this.y | 0);\n };\n return PointerSyntheticEvent2;\n }()\n);\nvar VisitPayload = (\n /** @class */\n function() {\n function VisitPayload2() {\n this.type = \"\";\n this.x = 0;\n this.y = 0;\n this.timeStamp = -1;\n this.event = null;\n this.root = null;\n this.collected = null;\n }\n VisitPayload2.prototype.toString = function() {\n return this.type + \": \" + (this.x | 0) + \"x\" + (this.y | 0);\n };\n return VisitPayload2;\n }()\n);\nvar syntheticEvent = new PointerSyntheticEvent();\nvar PAYLOAD = new VisitPayload();\nvar Pointer = (\n /** @class */\n function() {\n function Pointer2() {\n var _this = this;\n this.ratio = 1;\n this.clickList = [];\n this.cancelList = [];\n this.handleStart = function(event) {\n event.preventDefault();\n _this.localPoint(event);\n _this.dispatchEvent(event.type, event);\n _this.findTargets(\"click\", _this.clickList);\n _this.findTargets(\"mousecancel\", _this.cancelList);\n };\n this.handleMove = function(event) {\n event.preventDefault();\n _this.localPoint(event);\n _this.dispatchEvent(event.type, event);\n };\n this.handleEnd = function(event) {\n event.preventDefault();\n _this.dispatchEvent(event.type, event);\n if (_this.clickList.length) {\n _this.dispatchEvent(\"click\", event, _this.clickList);\n }\n _this.cancelList.length = 0;\n };\n this.handleCancel = function(event) {\n if (_this.cancelList.length) {\n _this.dispatchEvent(\"mousecancel\", event, _this.cancelList);\n }\n _this.clickList.length = 0;\n };\n this.visitStart = function(node, payload) {\n return !node._flag(payload.type);\n };\n this.visitEnd = function(node, payload) {\n syntheticEvent.raw = payload.event;\n syntheticEvent.type = payload.type;\n syntheticEvent.timeStamp = payload.timeStamp;\n syntheticEvent.abs.x = payload.x;\n syntheticEvent.abs.y = payload.y;\n var listeners = node.listeners(payload.type);\n if (!listeners) {\n return;\n }\n node.matrix().inverse().map(payload, syntheticEvent);\n var isEventTarget = node === payload.root || node.attr(\"spy\") || node.hitTest(syntheticEvent);\n if (!isEventTarget) {\n return;\n }\n if (payload.collected) {\n payload.collected.push(node);\n }\n if (payload.event) {\n var cancel = false;\n for (var l = 0; l < listeners.length; l++) {\n cancel = listeners[l].call(node, syntheticEvent) ? true : cancel;\n }\n return cancel;\n }\n };\n }\n Pointer2.prototype.mount = function(stage, elem) {\n var _this = this;\n this.stage = stage;\n this.elem = elem;\n this.ratio = stage.viewport().ratio || 1;\n stage.on(\"viewport\", function(viewport) {\n var _a;\n _this.ratio = (_a = viewport.ratio) !== null && _a !== void 0 ? _a : _this.ratio;\n });\n elem.addEventListener(\"touchstart\", this.handleStart);\n elem.addEventListener(\"touchend\", this.handleEnd);\n elem.addEventListener(\"touchmove\", this.handleMove);\n elem.addEventListener(\"touchcancel\", this.handleCancel);\n elem.addEventListener(\"mousedown\", this.handleStart);\n elem.addEventListener(\"mouseup\", this.handleEnd);\n elem.addEventListener(\"mousemove\", this.handleMove);\n document.addEventListener(\"mouseup\", this.handleCancel);\n window.addEventListener(\"blur\", this.handleCancel);\n return this;\n };\n Pointer2.prototype.unmount = function() {\n var elem = this.elem;\n elem.removeEventListener(\"touchstart\", this.handleStart);\n elem.removeEventListener(\"touchend\", this.handleEnd);\n elem.removeEventListener(\"touchmove\", this.handleMove);\n elem.removeEventListener(\"touchcancel\", this.handleCancel);\n elem.removeEventListener(\"mousedown\", this.handleStart);\n elem.removeEventListener(\"mouseup\", this.handleEnd);\n elem.removeEventListener(\"mousemove\", this.handleMove);\n document.removeEventListener(\"mouseup\", this.handleCancel);\n window.removeEventListener(\"blur\", this.handleCancel);\n return this;\n };\n Pointer2.prototype.localPoint = function(event) {\n var _a;\n var elem = this.elem;\n var x;\n var y;\n if ((_a = event.touches) === null || _a === void 0 ? void 0 : _a.length) {\n x = event.touches[0].clientX;\n y = event.touches[0].clientY;\n } else {\n x = event.clientX;\n y = event.clientY;\n }\n var rect = elem.getBoundingClientRect();\n x -= rect.left;\n y -= rect.top;\n x -= elem.clientLeft | 0;\n y -= elem.clientTop | 0;\n PAYLOAD.x = x * this.ratio;\n PAYLOAD.y = y * this.ratio;\n };\n Pointer2.prototype.findTargets = function(type, result) {\n var payload = PAYLOAD;\n payload.type = type;\n payload.root = this.stage;\n payload.event = null;\n payload.collected = result;\n payload.collected.length = 0;\n this.stage.visit({\n reverse: true,\n visible: true,\n start: this.visitStart,\n end: this.visitEnd\n }, payload);\n };\n Pointer2.prototype.dispatchEvent = function(type, event, targets) {\n var payload = PAYLOAD;\n payload.type = type;\n payload.root = this.stage;\n payload.event = event;\n payload.timeStamp = Date.now();\n payload.collected = null;\n if (targets) {\n while (targets.length) {\n var node = targets.shift();\n if (this.visitEnd(node, payload)) {\n break;\n }\n }\n targets.length = 0;\n } else {\n this.stage.visit({\n reverse: true,\n visible: true,\n start: this.visitStart,\n end: this.visitEnd\n }, payload);\n }\n };\n return Pointer2;\n }()\n);\nvar Mouse = {\n CLICK: \"click\",\n START: \"touchstart mousedown\",\n MOVE: \"touchmove mousemove\",\n END: \"touchend mouseup\",\n CANCEL: \"touchcancel mousecancel\"\n};\nvar __extends$2 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __assign = function() {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar ROOTS = [];\nfunction pause() {\n for (var i = ROOTS.length - 1; i >= 0; i--) {\n ROOTS[i].pause();\n }\n}\nfunction resume() {\n for (var i = ROOTS.length - 1; i >= 0; i--) {\n ROOTS[i].resume();\n }\n}\nfunction mount(configs) {\n if (configs === void 0) {\n configs = {};\n }\n var root = new Root();\n root.mount(configs);\n root.pointer = new Pointer().mount(root, root.dom);\n return root;\n}\nvar Root = (\n /** @class */\n function(_super) {\n __extends$2(Root2, _super);\n function Root2() {\n var _this = _super.call(this) || this;\n _this.canvas = null;\n _this.dom = null;\n _this.context = null;\n _this.pixelWidth = -1;\n _this.pixelHeight = -1;\n _this.pixelRatio = 1;\n _this.drawingWidth = 0;\n _this.drawingHeight = 0;\n _this.mounted = false;\n _this.paused = false;\n _this.sleep = false;\n _this.mount = function(configs) {\n if (configs === void 0) {\n configs = {};\n }\n if (typeof configs.canvas === \"string\") {\n _this.canvas = document.getElementById(configs.canvas);\n if (!_this.canvas) {\n console.error(\"Canvas element not found: \", configs.canvas);\n }\n } else if (configs.canvas instanceof HTMLCanvasElement) {\n _this.canvas = configs.canvas;\n } else if (configs.canvas) {\n console.error(\"Unknown value for canvas:\", configs.canvas);\n }\n if (!_this.canvas) {\n _this.canvas = document.getElementById(\"cutjs\") || document.getElementById(\"stage\");\n }\n if (!_this.canvas) {\n _this.canvas = document.createElement(\"canvas\");\n Object.assign(_this.canvas.style, {\n position: \"absolute\",\n display: \"block\",\n top: \"0\",\n left: \"0\",\n bottom: \"0\",\n right: \"0\",\n width: \"100%\",\n height: \"100%\"\n });\n var body = document.body;\n body.insertBefore(_this.canvas, body.firstChild);\n }\n _this.dom = _this.canvas;\n _this.context = _this.canvas.getContext(\"2d\");\n var devicePixelRatio = window.devicePixelRatio || 1;\n var backingStorePixelRatio = (\n // @ts-ignore\n _this.context.webkitBackingStorePixelRatio || // @ts-ignore\n _this.context.mozBackingStorePixelRatio || // @ts-ignore\n _this.context.msBackingStorePixelRatio || // @ts-ignore\n _this.context.oBackingStorePixelRatio || // @ts-ignore\n _this.context.backingStorePixelRatio || 1\n );\n _this.devicePixelRatio = devicePixelRatio;\n _this.backingStoreRatio = backingStorePixelRatio;\n _this.pixelRatio = _this.devicePixelRatio / _this.backingStoreRatio;\n _this.mounted = true;\n ROOTS.push(_this);\n _this.requestFrame();\n };\n _this.frameRequested = false;\n _this.requestFrame = function() {\n if (!_this.frameRequested) {\n _this.frameRequested = true;\n requestAnimationFrame(_this.onFrame);\n }\n };\n _this._lastFrameTime = 0;\n _this._mo_touch = null;\n _this.onFrame = function(now) {\n _this.frameRequested = false;\n if (!_this.mounted || !_this.canvas || !_this.context) {\n return;\n }\n _this.requestFrame();\n var newPixelWidth = _this.canvas.clientWidth;\n var newPixelHeight = _this.canvas.clientHeight;\n if (_this.pixelWidth !== newPixelWidth || _this.pixelHeight !== newPixelHeight) {\n _this.pixelWidth = newPixelWidth;\n _this.pixelHeight = newPixelHeight;\n _this.drawingWidth = newPixelWidth * _this.pixelRatio;\n _this.drawingHeight = newPixelHeight * _this.pixelRatio;\n if (_this.canvas.width !== _this.drawingWidth || _this.canvas.height !== _this.drawingHeight) {\n _this.canvas.width = _this.drawingWidth;\n _this.canvas.height = _this.drawingHeight;\n _this.viewport({\n width: _this.drawingWidth,\n height: _this.drawingHeight,\n ratio: _this.pixelRatio\n });\n }\n }\n var last = _this._lastFrameTime || now;\n var elapsed = now - last;\n if (!_this.mounted || _this.paused || _this.sleep) {\n return;\n }\n _this._lastFrameTime = now;\n _this.prerender();\n var tickRequest = _this._tick(elapsed, now, last);\n if (_this._mo_touch != _this._ts_touch) {\n _this._mo_touch = _this._ts_touch;\n _this.sleep = false;\n if (_this.drawingWidth > 0 && _this.drawingHeight > 0) {\n _this.context.setTransform(1, 0, 0, 1, 0, 0);\n _this.context.clearRect(0, 0, _this.drawingWidth, _this.drawingHeight);\n _this.render(_this.context);\n }\n } else if (tickRequest) {\n _this.sleep = false;\n } else {\n _this.sleep = true;\n }\n stats.fps = elapsed ? 1e3 / elapsed : 0;\n };\n _this.label(\"Root\");\n return _this;\n }\n Root2.prototype.resume = function() {\n if (this.sleep || this.paused) {\n this.requestFrame();\n }\n this.paused = false;\n this.sleep = false;\n this.publish(\"resume\");\n return this;\n };\n Root2.prototype.pause = function() {\n if (!this.paused) {\n this.publish(\"pause\");\n }\n this.paused = true;\n return this;\n };\n Root2.prototype.touch = function() {\n if (this.sleep || this.paused) {\n this.requestFrame();\n }\n this.sleep = false;\n return _super.prototype.touch.call(this);\n };\n Root2.prototype.unmount = function() {\n var _a;\n this.mounted = false;\n var index = ROOTS.indexOf(this);\n if (index >= 0) {\n ROOTS.splice(index, 1);\n }\n (_a = this.pointer) === null || _a === void 0 ? void 0 : _a.unmount();\n return this;\n };\n Root2.prototype.background = function(color) {\n if (this.dom) {\n this.dom.style.backgroundColor = color;\n }\n return this;\n };\n Root2.prototype.viewport = function(width, height, ratio) {\n if (typeof width === \"undefined\") {\n return Object.assign({}, this._viewport);\n }\n if (typeof width === \"object\") {\n var options = width;\n width = options.width;\n height = options.height;\n ratio = options.ratio;\n }\n if (typeof width === \"number\" && typeof height === \"number\") {\n this._viewport = {\n width,\n height,\n ratio: typeof ratio === \"number\" ? ratio : 1\n };\n this.viewbox();\n var data_1 = Object.assign({}, this._viewport);\n this.visit({\n start: function(node) {\n if (!node._flag(\"viewport\")) {\n return true;\n }\n node.publish(\"viewport\", [data_1]);\n }\n });\n }\n return this;\n };\n Root2.prototype.viewbox = function(width, height, mode) {\n if (typeof width === \"number\" && typeof height === \"number\") {\n this._viewbox = {\n width,\n height,\n mode\n };\n } else if (typeof width === \"object\" && width !== null) {\n this._viewbox = __assign({}, width);\n }\n this.rescale();\n return this;\n };\n Root2.prototype.camera = function(matrix) {\n this._camera = matrix;\n this.rescale();\n return this;\n };\n Root2.prototype.rescale = function() {\n var viewbox = this._viewbox;\n var viewport = this._viewport;\n var camera = this._camera;\n if (viewport && viewbox) {\n var viewportWidth = viewport.width;\n var viewportHeight = viewport.height;\n var viewboxMode = isValidFitMode(viewbox.mode) ? viewbox.mode : \"in-pad\";\n var viewboxWidth = viewbox.width;\n var viewboxHeight = viewbox.height;\n this.pin({\n width: viewboxWidth,\n height: viewboxHeight\n });\n this.scaleTo(viewportWidth, viewportHeight, viewboxMode);\n var viewboxX = viewbox.x || 0;\n var viewboxY = viewbox.y || 0;\n var cameraZoom = (camera === null || camera === void 0 ? void 0 : camera.a) || 1;\n var cameraX = (camera === null || camera === void 0 ? void 0 : camera.e) || 0;\n var cameraY = (camera === null || camera === void 0 ? void 0 : camera.f) || 0;\n var scaleX = this.pin(\"scaleX\");\n var scaleY = this.pin(\"scaleY\");\n this.pin(\"scaleX\", scaleX * cameraZoom);\n this.pin(\"scaleY\", scaleY * cameraZoom);\n this.pin(\"offsetX\", cameraX - viewboxX * scaleX * cameraZoom);\n this.pin(\"offsetY\", cameraY - viewboxY * scaleY * cameraZoom);\n } else if (viewport) {\n this.pin({\n width: viewport.width,\n height: viewport.height\n });\n }\n return this;\n };\n return Root2;\n }(Node)\n);\nvar __extends$1 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction anim(frames, fps) {\n var anim2 = new Anim();\n anim2.frames(frames).gotoFrame(0);\n fps && anim2.fps(fps);\n return anim2;\n}\nvar FPS = 15;\nvar Anim = (\n /** @class */\n function(_super) {\n __extends$1(Anim2, _super);\n function Anim2() {\n var _this = _super.call(this) || this;\n _this.label(\"Anim\");\n _this._textures = [];\n _this._fps = FPS;\n _this._ft = 1e3 / _this._fps;\n _this._time = -1;\n _this._repeat = 0;\n _this._index = 0;\n _this._frames = [];\n var lastTime = 0;\n _this.tick(function(t, now, last) {\n if (this._time < 0 || this._frames.length <= 1) {\n return;\n }\n var ignore = lastTime != last;\n lastTime = now;\n if (ignore) {\n return true;\n }\n this._time += t;\n if (this._time < this._ft) {\n return true;\n }\n var n = this._time / this._ft | 0;\n this._time -= n * this._ft;\n this.moveFrame(n);\n if (this._repeat > 0 && (this._repeat -= n) <= 0) {\n this.stop();\n this._callback && this._callback();\n return false;\n }\n return true;\n }, false);\n return _this;\n }\n Anim2.prototype.fps = function(fps) {\n if (typeof fps === \"undefined\") {\n return this._fps;\n }\n this._fps = fps > 0 ? fps : FPS;\n this._ft = 1e3 / this._fps;\n return this;\n };\n Anim2.prototype.setFrames = function(frames) {\n return this.frames(frames);\n };\n Anim2.prototype.frames = function(frames) {\n this._index = 0;\n this._frames = texture(frames).array();\n this.touch();\n return this;\n };\n Anim2.prototype.length = function() {\n return this._frames ? this._frames.length : 0;\n };\n Anim2.prototype.gotoFrame = function(frame, resize) {\n if (resize === void 0) {\n resize = false;\n }\n this._index = math.wrap(frame, this._frames.length) | 0;\n resize = resize || !this._textures[0];\n this._textures[0] = this._frames[this._index];\n if (resize) {\n this.pin(\"width\", this._textures[0].getWidth());\n this.pin(\"height\", this._textures[0].getHeight());\n }\n this.touch();\n return this;\n };\n Anim2.prototype.moveFrame = function(move) {\n return this.gotoFrame(this._index + move);\n };\n Anim2.prototype.repeat = function(repeat, callback) {\n this._repeat = repeat * this._frames.length - 1;\n this._callback = callback;\n this.play();\n return this;\n };\n Anim2.prototype.play = function(frame) {\n if (typeof frame !== \"undefined\") {\n this.gotoFrame(frame);\n this._time = 0;\n } else if (this._time < 0) {\n this._time = 0;\n }\n this.touch();\n return this;\n };\n Anim2.prototype.stop = function(frame) {\n this._time = -1;\n if (typeof frame !== \"undefined\") {\n this.gotoFrame(frame);\n }\n return this;\n };\n return Anim2;\n }(Node)\n);\nvar __extends = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction monotype(chars) {\n return new Monotype().frames(chars);\n}\nvar Monotype = (\n /** @class */\n function(_super) {\n __extends(Monotype2, _super);\n function Monotype2() {\n var _this = _super.call(this) || this;\n _this.label(\"String\");\n _this._textures = [];\n return _this;\n }\n Monotype2.prototype.setFont = function(frames) {\n return this.frames(frames);\n };\n Monotype2.prototype.frames = function(frames) {\n this._textures = [];\n if (typeof frames == \"string\") {\n var selection_1 = texture(frames);\n this._font = function(value) {\n return selection_1.one(value);\n };\n } else if (typeof frames === \"object\") {\n this._font = function(value) {\n return frames[value];\n };\n } else if (typeof frames === \"function\") {\n this._font = frames;\n }\n return this;\n };\n Monotype2.prototype.setValue = function(value) {\n return this.value(value);\n };\n Monotype2.prototype.value = function(value) {\n if (typeof value === \"undefined\") {\n return this._value;\n }\n if (this._value === value) {\n return this;\n }\n this._value = value;\n if (value === null) {\n value = \"\";\n } else if (typeof value !== \"string\" && !Array.isArray(value)) {\n value = value.toString();\n }\n this._spacing = this._spacing || 0;\n var width = 0;\n var height = 0;\n for (var i = 0; i < value.length; i++) {\n var v = value[i];\n var texture_1 = this._textures[i] = this._font(typeof v === \"string\" ? v : v + \"\");\n width += i > 0 ? this._spacing : 0;\n texture_1.setDestinationCoordinate(width, 0);\n width = width + texture_1.getWidth();\n height = Math.max(height, texture_1.getHeight());\n }\n this.pin(\"width\", width);\n this.pin(\"height\", height);\n this._textures.length = value.length;\n return this;\n };\n return Monotype2;\n }(Node)\n);\nvar string = monotype;\nvar Str = Monotype;\nconst Stage = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n Anim,\n Atlas,\n CanvasTexture,\n Image: Image$1,\n ImageTexture,\n Math: math,\n Matrix,\n Monotype,\n Mouse,\n Node,\n POINTER_CANCEL,\n POINTER_CLICK,\n POINTER_END,\n POINTER_MOVE,\n POINTER_START,\n Pin,\n PipeTexture,\n Pointer,\n ResizableTexture,\n Root,\n Sprite,\n Str,\n Texture,\n TextureSelection,\n Transition,\n anim,\n atlas,\n box,\n canvas,\n clamp,\n column,\n create,\n image,\n isValidFitMode,\n layer,\n layout,\n length,\n math,\n maximize,\n memoizeDraw,\n minimize,\n monotype,\n mount,\n pause,\n random,\n resume,\n row,\n sprite,\n string,\n texture,\n wrap\n}, Symbol.toStringTag, { value: \"Module\" }));\nexport {\n Anim,\n Atlas,\n CanvasTexture,\n Image$1 as Image,\n ImageTexture,\n math as Math,\n Matrix,\n Monotype,\n Mouse,\n Node,\n POINTER_CANCEL,\n POINTER_CLICK,\n POINTER_END,\n POINTER_MOVE,\n POINTER_START,\n Pin,\n PipeTexture,\n Pointer,\n ResizableTexture,\n Root,\n Sprite,\n Str,\n Texture,\n TextureSelection,\n Transition,\n anim,\n atlas,\n box,\n canvas,\n clamp,\n column,\n create,\n Stage as default,\n image,\n isValidFitMode,\n layer,\n layout,\n length,\n math,\n maximize,\n memoizeDraw,\n minimize,\n monotype,\n mount,\n pause,\n random,\n resume,\n row,\n sprite,\n string,\n texture,\n wrap\n};\n","import Stage from 'stage-js';\n\nimport type { Vec2Value } from '../src/common/Vec2';\nimport type { World } from \"../src/dynamics/World\";\nimport type { Joint } from \"../src/dynamics/Joint\";\nimport type { Fixture } from \"../src/dynamics/Fixture\";\nimport type { Body } from \"../src/dynamics/Body\";\nimport type { AABBValue } from \"../src/collision/AABB\";\nimport type { Style } from '../src/util/Testbed';\nimport { Testbed } from '../src/util/Testbed';\nimport type { EdgeShape } from \"../src/collision/shape/EdgeShape\";\nimport type { PolygonShape } from \"../src/collision/shape/PolygonShape\";\nimport type { ChainShape } from \"../src/collision/shape/ChainShape\";\nimport type { CircleShape } from \"../src/collision/shape/CircleShape\";\nimport type { PulleyJoint } from \"../src/dynamics/joint/PulleyJoint\";\nimport { MouseJoint } from \"../src/dynamics/joint/MouseJoint\";\n\nconst math_atan2 = Math.atan2;\nconst math_abs = Math.abs;\nconst math_sqrt = Math.sqrt;\nconst math_PI = Math.PI;\nconst math_max = Math.max;\nconst math_min = Math.min;\n\n\nlet mounted: StageTestbed | null = null;\n\n/** @internal */\nfunction memo() {\n const memory: any = [];\n function recall(...rest: any[]) {\n let equal = memory.length === rest.length;\n for (let i = 0; equal && i < rest.length; i++) {\n equal = equal && memory[i] === rest[i];\n memory[i] = rest[i];\n }\n memory.length = rest.length;\n return equal;\n }\n function reset() {\n memory.length = 0;\n // void 0;\n }\n return {\n recall,\n reset,\n };\n}\n\nTestbed.mount = () => {\n if (mounted) {\n return mounted;\n }\n\n mounted = new StageTestbed();\n\n // todo: merge rest of this into StageTestbed\n\n // todo: should we create these elements if not exists?\n const playButton = document.getElementById('testbed-play');\n const statusElement = document.getElementById('testbed-status');\n const infoElement = document.getElementById('testbed-info');\n\n if (playButton) {\n playButton.addEventListener('click', () => {\n mounted.isPaused() ? mounted.resume() : mounted.pause();\n });\n\n mounted._pause = () => {\n playButton.classList.add('pause');\n playButton.classList.remove('play');\n };\n\n mounted._resume = () => {\n playButton.classList.add('play');\n playButton.classList.remove('pause');\n };\n } else {\n console.log(\"Please create a button with id='testbed-play'\");\n }\n\n let lastStatus = '';\n if (statusElement) {\n statusElement.innerText = lastStatus;\n }\n mounted._status = (text: string) => {\n if (lastStatus === text) {\n return;\n }\n lastStatus = text;\n if (statusElement) {\n statusElement.innerText = text;\n }\n };\n\n let lastInfo = '';\n if (infoElement) {\n infoElement.innerText = lastInfo;\n }\n mounted._info = (text: string) => {\n if (lastInfo === text) {\n return;\n }\n lastInfo = text;\n if (infoElement) {\n infoElement.innerText = text;\n }\n };\n\n return mounted;\n};\n\nconst getStyle = function(obj: Body | Fixture | Joint): Style {\n return obj['render'] ?? obj['style'] ?? {};\n};\n\nfunction findBody(world: World, point: Vec2Value) {\n let body: Body | null = null;\n const aabb = {\n lowerBound: point,\n upperBound: point,\n };\n world.queryAABB(aabb, (fixture: Fixture) => {\n if (!fixture.getBody().isDynamic() || !fixture.testPoint(point)) {\n return true;\n }\n body = fixture.getBody();\n return false;\n });\n return body;\n}\n\n/** @internal */\nclass StageTestbed extends Testbed {\n private canvas: HTMLCanvasElement;\n private stage: Stage.Root;\n private paused: boolean = false;\n private lastDrawHash = \"\";\n private newDrawHash = \"\";\n private buffer: ((context: CanvasRenderingContext2D, ratio: number)=> void)[] = [];\n\n start(world: World) {\n const stage = this.stage = Stage.mount();\n const canvas = this.canvas = stage.dom as HTMLCanvasElement;\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const testbed = this;\n this.canvas = canvas;\n\n stage.on(Stage.POINTER_START, () => {\n window.focus();\n // @ts-ignore\n document.activeElement?.blur();\n canvas.focus();\n });\n\n stage.MAX_ELAPSE = 1000 / 30;\n\n stage.on('resume', () => {\n this.paused = false;\n this._resume();\n });\n stage.on('pause', () => {\n this.paused = true;\n this._pause();\n });\n\n const drawingTexture = new Stage.CanvasTexture();\n drawingTexture.draw = (ctx: CanvasRenderingContext2D) => {\n const pixelRatio = 2 * drawingTexture.getOptimalPixelRatio();\n ctx.save();\n ctx.transform(1, 0, 0, this.scaleY, -this.x, -this.y);\n ctx.lineWidth = 3 / pixelRatio;\n ctx.lineCap = 'round';\n for (let drawing = this.buffer.shift(); drawing; drawing = this.buffer.shift()) {\n drawing(ctx, pixelRatio);\n }\n ctx.restore();\n };\n\n const drawingElement = Stage.sprite(drawingTexture);\n stage.append(drawingElement);\n stage.tick(() => {\n this.buffer.length = 0;\n }, true);\n\n\n stage.background(this.background);\n stage.viewbox(this.width, this.height);\n stage.pin('alignX', -0.5);\n stage.pin('alignY', -0.5);\n\n const worldNode = new WorldStageNode(world, this);\n\n // stage.empty();\n stage.prepend(worldNode);\n\n let lastX = 0;\n let lastY = 0;\n stage.tick((dt: number, t: number) => {\n // update camera position\n if (lastX !== this.x || lastY !== this.y) {\n worldNode.offset(-this.x, -this.y);\n lastX = this.x;\n lastY = this.y;\n }\n });\n\n worldNode.tick((dt: number, t: number) => {\n this.step(dt, t);\n\n if (targetBody) {\n this.drawSegment(targetBody.getPosition(), mouseMove, 'rgba(255,255,255,0.2)');\n }\n\n if (this.lastDrawHash !== this.newDrawHash) {\n this.lastDrawHash = this.newDrawHash;\n stage.touch();\n }\n this.newDrawHash = \"\";\n\n return true;\n });\n\n const mouseGround = world.createBody();\n let mouseJoint: MouseJoint | null = null;\n let targetBody: Body | null = null;\n const mouseMove = {x: 0, y: 0};\n\n worldNode.attr('spy', true);\n\n worldNode.on(Stage.POINTER_START, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (targetBody) {\n return;\n }\n\n const body = findBody(world, point);\n if (!body) {\n return;\n }\n\n if (this.mouseForce) {\n targetBody = body;\n\n } else {\n mouseJoint = new MouseJoint({maxForce: 1000}, mouseGround, body, { x: point.x, y: point.y });\n world.createJoint(mouseJoint);\n }\n });\n\n worldNode.on(Stage.POINTER_MOVE, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n mouseJoint.setTarget(point);\n }\n\n mouseMove.x = point.x;\n mouseMove.y = point.y;\n });\n\n worldNode.on(Stage.POINTER_END, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n world.destroyJoint(mouseJoint);\n mouseJoint = null;\n }\n if (targetBody && this.mouseForce) {\n const target = targetBody.getPosition();\n const force = {\n x: (point.x - target.x) * this.mouseForce,\n y: (point.y - target.y) * this.mouseForce,\n };\n targetBody.applyForceToCenter(force, true);\n targetBody = null;\n }\n });\n\n worldNode.on(Stage.POINTER_CANCEL, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n world.destroyJoint(mouseJoint);\n mouseJoint = null;\n }\n if (targetBody) {\n targetBody = null;\n }\n });\n\n const activeKeys = testbed.activeKeys;\n const downKeys: Record = {};\n function updateActiveKeys(keyCode: number, down: boolean) {\n const char = String.fromCharCode(keyCode);\n if (/\\w/.test(char)) {\n activeKeys[char] = down;\n }\n activeKeys.right = downKeys[39] || activeKeys['D'];\n activeKeys.left = downKeys[37] || activeKeys['A'];\n activeKeys.up = downKeys[38] || activeKeys['W'];\n activeKeys.down = downKeys[40] || activeKeys['S'];\n activeKeys.fire = downKeys[32] || downKeys[13] ;\n }\n\n window.addEventListener(\"keydown\", function(e) {\n const keyCode = e.keyCode;\n downKeys[keyCode] = true;\n updateActiveKeys(keyCode, true);\n testbed.keydown && testbed.keydown(keyCode, String.fromCharCode(keyCode));\n });\n window.addEventListener(\"keyup\", function(e) {\n const keyCode = e.keyCode;\n downKeys[keyCode] = false;\n updateActiveKeys(keyCode, false);\n testbed.keyup && testbed.keyup(keyCode, String.fromCharCode(keyCode));\n });\n\n this.resume();\n }\n\n /** @private @internal */\n focus() {\n // @ts-ignore\n document.activeElement && document.activeElement.blur();\n this.canvas.focus();\n }\n\n /** @internal */\n _pause() {\n }\n\n /** @internal */\n _resume() {\n }\n\n private statusText = '';\n private statusMap: Record = {};\n\n status(name: string, value: any): void;\n status(value: object | string): void;\n status(a: any, b?: any) {\n if (typeof b !== 'undefined') {\n const key = a;\n const value = b;\n if (typeof value !== 'function' && typeof value !== 'object') {\n this.statusMap[key] = value;\n }\n } else if (a && typeof a === 'object') {\n // tslint:disable-next-line:no-for-in\n for (const key in a) {\n const value = a[key];\n if (typeof value !== 'function' && typeof value !== 'object') {\n this.statusMap[key] = value;\n }\n }\n } else if (typeof a === 'string') {\n this.statusText = a;\n }\n\n var newline = '\\n';\n var text = this.statusText || '';\n for (var key in this.statusMap) {\n var value = this.statusMap[key];\n if (typeof value === 'function') continue;\n text += (text && newline) + key + ': ' + value;\n }\n\n this._status(text);\n }\n\n info(text: string): void {\n this._info(text);\n }\n\n /** @internal */\n _status(string: string) {\n }\n\n /** @internal */ \n _info(text: string) {\n }\n\n /** @internal */\n isPaused() {\n return this.paused;\n }\n\n /** @internal */\n togglePause() {\n this.paused ? this.resume() : this.pause();\n }\n\n /** @internal */\n pause() {\n this.stage.pause();\n }\n\n /** @internal */\n resume() {\n this.stage.resume();\n this.focus();\n }\n\n drawPoint(p: {x: number, y: number}, r: number, color: string): void {\n this.buffer.push(function(ctx, ratio) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, 5 / ratio, 0, 2 * math_PI);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"point\" + p.x + ',' + p.y + ',' + r + ',' + color;\n }\n\n drawCircle(p: {x: number, y: number}, r: number, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, r, 0, 2 * math_PI);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"circle\" + p.x + ',' + p.y + ',' + r + ',' + color;\n }\n\n drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(a.x, a.y);\n ctx.lineTo(b.x, b.y);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"segment\" + a.x + ',' + a.y + ',' + b.x + ',' + b.y + ',' + color;\n }\n\n drawSegment = this.drawEdge;\n\n drawPolygon(points: Array<{x: number, y: number}>, color: string): void {\n if (!points || !points.length) {\n return;\n }\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(points[0].x, points[0].y);\n for (let i = 1; i < points.length; i++) {\n ctx.lineTo(points[i].x, points[i].y);\n }\n ctx.strokeStyle = color;\n ctx.closePath();\n ctx.stroke();\n });\n this.newDrawHash += \"segment\";\n for (let i = 1; i < points.length; i++) {\n this.newDrawHash += points[i].x + ',' + points[i].y + ',';\n }\n this.newDrawHash += color;\n }\n\n drawAABB(aabb: AABBValue, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(aabb.lowerBound.x, aabb.lowerBound.y);\n ctx.lineTo(aabb.upperBound.x, aabb.lowerBound.y);\n ctx.lineTo(aabb.upperBound.x, aabb.upperBound.y);\n ctx.lineTo(aabb.lowerBound.x, aabb.upperBound.y);\n ctx.strokeStyle = color;\n ctx.closePath();\n ctx.stroke();\n });\n this.newDrawHash += \"aabb\";\n this.newDrawHash += aabb.lowerBound.x + ',' + aabb.lowerBound.y + ',';\n this.newDrawHash += aabb.upperBound.x + ',' + aabb.upperBound.y + ',';\n this.newDrawHash += color;\n }\n\n findOne(query: string): (Body | Joint | Fixture | null) {\n throw new Error(\"Not implemented\");\n }\n\n findAll(query: string): (Body | Joint | Fixture)[] {\n throw new Error(\"Not implemented\");\n }\n}\n\ninterface WorldStageOptions {\n speed: number;\n hz: number;\n scaleY: number;\n lineWidth: number;\n stroke: string | undefined;\n fill: string | undefined;\n}\n\nclass WorldStageNode extends Stage.Node {\n private nodes = new WeakMap();\n\n private options: WorldStageOptions = {\n speed: 1,\n hz: 60,\n scaleY: -1,\n lineWidth: 3,\n stroke: undefined,\n fill: undefined\n };\n\n private world: World;\n private testbed: Testbed;\n\n constructor(world: World, opts: Partial = {}) {\n super();\n this.label('Planck');\n\n this.options = { ...this.options, ...opts };\n\n if (math_abs(this.options.hz) < 1) {\n this.options.hz = 1 / this.options.hz;\n }\n\n this.world = world;\n this.testbed = opts as Testbed;\n\n const timeStep = 1 / this.options.hz;\n let elapsedTime = 0;\n let errored = false;\n this.tick((dt: number) => {\n if (errored) {\n return false;\n }\n try {\n dt = dt * 0.001 * this.options.speed;\n elapsedTime += dt;\n while (elapsedTime > timeStep) {\n world.step(timeStep);\n elapsedTime -= timeStep;\n }\n this.renderWorld();\n return true; \n } catch (error) {\n errored = true;\n console.error(error);\n return false;\n }\n }, true);\n\n world.on('remove-fixture', (obj: Fixture) => {\n this.nodes.get(obj)?.remove();\n });\n\n world.on('remove-joint', (obj: Joint) => {\n this.nodes.get(obj)?.remove();\n });\n }\n\n renderWorld() {\n const world = this.world;\n const options = this.options;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const viewer = this;\n\n for (let b = world.getBodyList(); b; b = b.getNext()) {\n for (let f = b.getFixtureList(); f; f = f.getNext()) {\n\n let node = this.nodes.get(f);\n const fstyle = getStyle(f);\n const bstyle = getStyle(b);\n if (!node) {\n if (fstyle && fstyle.stroke) {\n options.stroke = fstyle.stroke;\n } else if (bstyle && bstyle.stroke) {\n options.stroke = bstyle.stroke;\n } else if (b.isDynamic()) {\n options.stroke = 'rgba(255,255,255,0.9)';\n } else if (b.isKinematic()) {\n options.stroke = 'rgba(255,255,255,0.7)';\n } else if (b.isStatic()) {\n options.stroke = 'rgba(255,255,255,0.5)';\n }\n\n if (fstyle && fstyle.fill) {\n options.fill = fstyle.fill;\n } else if (bstyle && bstyle.fill) {\n options.fill = bstyle.fill;\n } else {\n options.fill = '';\n }\n\n const type = f.getType();\n const shape = f.getShape();\n if (type == 'circle') {\n node = viewer.drawCircle(shape as CircleShape, options);\n }\n if (type == 'edge') {\n node = viewer.drawEdge(shape as EdgeShape, options);\n }\n if (type == 'polygon') {\n node = viewer.drawPolygon(shape as PolygonShape, options);\n }\n if (type == 'chain') {\n node = viewer.drawChain(shape as ChainShape, options);\n }\n\n if (node) {\n node.appendTo(viewer);\n this.nodes.set(f, node);\n }\n }\n\n if (node) {\n const p = b.getPosition();\n const r = b.getAngle();\n // @ts-ignore\n const isChanged = node.__lastX !== p.x || node.__lastY !== p.y || node.__lastR !== r;\n if (isChanged) {\n // @ts-ignore\n node.__lastX = p.x;\n // @ts-ignore\n node.__lastY = p.y;\n // @ts-ignore\n node.__lastR = r;\n node.offset(p.x, options.scaleY * p.y);\n node.rotate(options.scaleY * r);\n }\n }\n\n }\n }\n\n for (let j = world.getJointList(); j; j = j.getNext()) {\n const type = j.getType();\n if (type == 'pulley-joint') {\n this.testbed.drawSegment(j.getAnchorA(), (j as PulleyJoint).getGroundAnchorA(), 'rgba(255,255,255,0.5)');\n this.testbed.drawSegment(j.getAnchorB(), (j as PulleyJoint).getGroundAnchorB(), 'rgba(255,255,255,0.5)');\n this.testbed.drawSegment((j as PulleyJoint).getGroundAnchorB(), (j as PulleyJoint).getGroundAnchorA(), 'rgba(255,255,255,0.5)');\n } else {\n this.testbed.drawSegment(j.getAnchorA(), j.getAnchorB(), 'rgba(255,255,255,0.5)');\n }\n }\n }\n\n drawCircle(shape: CircleShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const r = shape.m_radius;\n const cx = r + lw;\n const cy = r + lw;\n const w = r * 2 + lw * 2;\n const h = r * 2 + lw * 2;\n\n offsetX = shape.m_p.x - cx;\n offsetY = options.scaleY * shape.m_p.y - cy\n\n this.setSize(w, h, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.arc(cx, cy, r, 0, 2 * math_PI);\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n }\n ctx.lineTo(cx, cy);\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? '';\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if (!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawEdge(edge: EdgeShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n let offsetA = 0\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const v1 = edge.m_vertex1;\n const v2 = edge.m_vertex2;\n\n const dx = v2.x - v1.x;\n const dy = v2.y - v1.y;\n\n const length = math_sqrt(dx * dx + dy * dy);\n\n this.setSize(length + 2 * lw, 2 * lw, ratio);\n\n const minX = math_min(v1.x, v2.x);\n const minY = math_min(options.scaleY * v1.y, options.scaleY * v2.y);\n \n offsetX = minX - lw;\n offsetY = minY - lw;\n offsetA = options.scaleY * math_atan2(dy, dx);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n ctx.moveTo(lw, lw);\n ctx.lineTo(lw + length, lw);\n\n ctx.lineCap = 'round';\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? '';\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY, offsetA)) {\n sprite.offset(offsetX, offsetY);\n sprite.rotate(offsetA);\n }\n });\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawPolygon(shape: PolygonShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const vertices = shape.m_vertices;\n\n if (!vertices.length) {\n return;\n }\n \n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, options.scaleY * v.y);\n maxY = math_max(maxY, options.scaleY * v.y);\n }\n \n const width = maxX - minX;\n const height = maxY - minY;\n\n offsetX = minX;\n offsetY = minY;\n\n this.setSize(width + 2 * lw, height + 2 * lw, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n const x = v.x - minX + lw;\n const y = options.scaleY * v.y - minY + lw;\n if (i == 0)\n ctx.moveTo(x, y);\n\n else\n ctx.lineTo(x, y);\n }\n\n if (vertices.length > 2) {\n ctx.closePath();\n }\n\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n ctx.closePath();\n }\n\n ctx.lineCap = 'round';\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? '';\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawChain(shape: ChainShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const vertices = shape.m_vertices;\n\n if (!vertices.length) {\n return;\n }\n \n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, options.scaleY * v.y);\n maxY = math_max(maxY, options.scaleY * v.y);\n }\n \n const width = maxX - minX;\n const height = maxY - minY;\n\n offsetX = minX;\n offsetY = minY;\n\n this.setSize(width + 2 * lw, height + 2 * lw, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n const x = v.x - minX + lw;\n const y = options.scaleY * v.y - minY + lw;\n if (i == 0)\n ctx.moveTo(x, y);\n\n else\n ctx.lineTo(x, y);\n }\n\n // TODO: if loop\n if (vertices.length > 2) {\n // ctx.closePath();\n }\n\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n ctx.closePath();\n }\n\n ctx.lineCap = 'round';\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? '';\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n}\n"],"names":["__extends","__assign","math_random","clamp","random","math","math_abs","math_sqrt","math_max","math_min","math_PI","Settings","math_sin","math_cos","math_atan2","temp","matrix.vec2","matrix.zeroVec2","matrix.transformVec2","matrix.copyVec2","matrix.setRotAngle","matrix.combine2Vec2","matrix.minusVec2","matrix.rotVec2","matrix.subVec2","xf","matrix.transform","matrix.plusScaleVec2","matrix.scaleVec2","matrix.dotVec2","matrix.crossNumVec2","matrix.plusVec2","stats","normal","matrix.lengthSqrVec2","matrix.derotVec2","matrix.distVec2","matrix.normalizeVec2","matrix.minusScaleVec2","matrix.setVec2","matrix.crossVec2Vec2","matrix.combine3Vec2","input","cache","output","matrix.copyTransform","xfA","xfB","pointA","pointB","matrix.normalizeVec2Length","matrix.crossVec2Num","matrix.negVec2","matrix.mulVec2","cA","cB","planePoint","clipPoint","tangent","P","DEFAULTS","v1","v2","e","e1","e2","matrix.detransformVec2","matrix.addVec2","matrix.distSqrVec2","LimitState","n","matrix.retransformVec2","clipPoints1","clipPoints2","normal1","matrix.detransformTransform","matrix.rerotVec2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,C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CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA;AAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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A,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAJD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,kBAAkB,CAAA,CAAA,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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AAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAC;CACxD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAC;CACxD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAC;CACxD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,IAAI,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAA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,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA;AAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA;AAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA;AACjB,CA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AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA;AAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA;AAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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AAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,C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,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,GAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,GAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,GAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,GAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAA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"} \ No newline at end of file +{"version":3,"file":"planck-with-testbed.mjs","sources":["../node_modules/tslib/tslib.es6.js","../src/util/options.ts","../src/common/Math.ts","../src/common/Vec2.ts","../src/collision/AABB.ts","../src/Settings.ts","../src/util/Pool.ts","../src/collision/DynamicTree.ts","../src/collision/BroadPhase.ts","../src/common/Matrix.ts","../src/common/Rot.ts","../src/common/Sweep.ts","../src/common/Transform.ts","../src/dynamics/Velocity.ts","../src/dynamics/Position.ts","../src/collision/Shape.ts","../src/dynamics/Fixture.ts","../src/dynamics/Body.ts","../src/dynamics/Joint.ts","../src/util/stats.ts","../src/util/Timer.ts","../src/collision/Distance.ts","../src/collision/TimeOfImpact.ts","../src/dynamics/Solver.ts","../src/common/Mat22.ts","../src/collision/Manifold.ts","../src/dynamics/Contact.ts","../src/dynamics/World.ts","../src/common/Vec3.ts","../src/collision/shape/EdgeShape.ts","../src/collision/shape/ChainShape.ts","../src/collision/shape/PolygonShape.ts","../src/collision/shape/CircleShape.ts","../src/dynamics/joint/DistanceJoint.ts","../src/dynamics/joint/FrictionJoint.ts","../src/common/Mat33.ts","../src/dynamics/joint/RevoluteJoint.ts","../src/dynamics/joint/PrismaticJoint.ts","../src/dynamics/joint/GearJoint.ts","../src/dynamics/joint/MotorJoint.ts","../src/dynamics/joint/MouseJoint.ts","../src/dynamics/joint/PulleyJoint.ts","../src/dynamics/joint/RopeJoint.ts","../src/dynamics/joint/WeldJoint.ts","../src/dynamics/joint/WheelJoint.ts","../src/serializer/index.ts","../src/util/Testbed.ts","../src/collision/shape/BoxShape.ts","../src/collision/shape/CollideCircle.ts","../src/collision/shape/CollideEdgeCircle.ts","../src/collision/shape/CollidePolygon.ts","../src/collision/shape/CollideCirclePolygon.ts","../src/collision/shape/CollideEdgePolygon.ts","../src/internal.ts","../node_modules/stage-js/dist/stage.js","../testbed/StageTestbed.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/** @internal */\nexport const options = function(input: T, defaults: object): T {\n if (input === null || typeof input === \"undefined\") {\n // tslint:disable-next-line:no-object-literal-type-assertion\n input = {} as T;\n }\n\n const output = {...input};\n\n // tslint:disable-next-line:no-for-in\n for (const key in defaults) {\n if (defaults.hasOwnProperty(key) && typeof input[key] === \"undefined\") {\n output[key] = defaults[key];\n }\n }\n\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n const symbols = Object.getOwnPropertySymbols(defaults);\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n if (defaults.propertyIsEnumerable(symbol) && typeof input[symbol] === \"undefined\") {\n output[symbol] = defaults[symbol];\n }\n }\n }\n\n return output;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_random = Math.random;\n\n\nexport const EPSILON = 1e-9;\n\n/** @internal @deprecated */\nexport const isFinite = Number.isFinite;\n\n/**\n * @deprecated\n * Next Largest Power of 2 Given a binary integer value x, the next largest\n * power of 2 can be computed by a SWAR algorithm that recursively \"folds\" the\n * upper bits into the lower bits. This process yields a bit vector with the\n * same most significant 1 as x, but all 1's below it. Adding 1 to that value\n * yields the next largest power of 2. For a 32-bit value:\n */\nexport function nextPowerOfTwo(x: number): number {\n x |= (x >> 1);\n x |= (x >> 2);\n x |= (x >> 4);\n x |= (x >> 8);\n x |= (x >> 16);\n return x + 1;\n}\n\n/** @deprecated */\nexport function isPowerOfTwo(x: number): boolean {\n return x > 0 && (x & (x - 1)) === 0;\n}\n\n/** @deprecated */\nexport function mod(num: number, min?: number, max?: number): number {\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}\n\n/**\n * @deprecated\n * Returns a min if num is less than min, and max if more than max, otherwise returns num.\n */\nexport function clamp(num: number, min: number, max: number): number {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n } else {\n return num;\n }\n}\n\n/**\n * @deprecated\n * Returns a random number between min and max when two arguments are provided.\n * If one arg is provided between 0 to max.\n * If one arg is passed between 0 to 1.\n */\nexport function random(min?: number, max?: number): number {\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}\n\n/** @ignore */\nexport const 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;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"./Math\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/** 2D vector */\nexport interface Vec2Value {\n x: number;\n y: number;\n}\n\ndeclare module \"./Vec2\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec2(x: number, y: number): Vec2;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec2(obj: Vec2Value): Vec2;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec2(): Vec2;\n}\n\n/** 2D vector */\n// @ts-expect-error\nexport class Vec2 {\n x: number;\n y: number;\n\n constructor(x: number, y: number);\n constructor(obj: Vec2Value);\n constructor();\n // tslint:disable-next-line:typedef\n constructor(x?, y?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec2)) {\n return new Vec2(x, y);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n } else {\n this.x = x;\n this.y = y;\n }\n _ASSERT && Vec2.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = data.x;\n obj.y = data.y;\n return obj;\n }\n\n static zero(): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = 0;\n obj.y = 0;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = x;\n obj.y = y;\n return obj;\n }\n\n static clone(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(v.x, v.y);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /**\n * Does this vector contain finite coordinates?\n */\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.x) && Number.isFinite(obj.y);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec2.isValid(o), \"Invalid Vec2!\", o);\n }\n\n clone(): Vec2 {\n return Vec2.clone(this);\n }\n\n /**\n * Set this vector to all zeros.\n *\n * @returns this\n */\n setZero(): Vec2 {\n this.x = 0.0;\n this.y = 0.0;\n return this;\n }\n\n set(x: number, y: number): Vec2;\n set(value: Vec2Value): Vec2;\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n // tslint:disable-next-line:typedef\n set(x, y?) {\n if (typeof x === \"object\") {\n _ASSERT && Vec2.assert(x);\n this.x = x.x;\n this.y = x.y;\n } else {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n }\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setNum(x: number, y: number) {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setVec2(value: Vec2Value) {\n _ASSERT && Vec2.assert(value);\n this.x = value.x;\n this.y = value.y;\n\n return this;\n }\n\n /** @internal @deprecated Use setCombine or setMul */\n wSet(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.setCombine(a, v, b, w);\n } else {\n return this.setMul(a, v);\n }\n }\n\n /**\n * Set linear combination of v and w: `a * v + b * w`\n */\n setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x = x;\n this.y = y;\n return this;\n }\n\n setMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * Add a vector to this vector.\n *\n * @returns this\n */\n add(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x += w.x;\n this.y += w.y;\n return this;\n }\n\n /** @internal @deprecated Use addCombine or addMul */\n wAdd(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.addCombine(a, v, b, w);\n } else {\n return this.addMul(a, v);\n }\n }\n\n /**\n * Add linear combination of v and w: `a * v + b * w`\n */\n addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x += x;\n this.y += y;\n return this;\n }\n\n addMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x += x;\n this.y += y;\n return this;\n }\n\n /**\n * @deprecated Use subCombine or subMul\n */\n wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.subCombine(a, v, b, w);\n } else {\n return this.subMul(a, v);\n }}\n\n /**\n * Subtract linear combination of v and w: `a * v + b * w`\n */\n subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n subMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n /**\n * Subtract a vector from this vector\n *\n * @returns this\n */\n sub(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x -= w.x;\n this.y -= w.y;\n return this;\n }\n\n /**\n * Multiply this vector by a scalar.\n *\n * @returns this\n */\n mul(m: number): Vec2 {\n _ASSERT && console.assert(Number.isFinite(m));\n this.x *= m;\n this.y *= m;\n return this;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n length(): number {\n return Vec2.lengthOf(this);\n }\n\n /**\n * Get the length squared.\n */\n lengthSquared(): number {\n return Vec2.lengthSquared(this);\n }\n\n /**\n * Convert this vector into a unit vector.\n *\n * @returns old length\n */\n normalize(): number {\n const length = this.length();\n if (length < EPSILON) {\n return 0.0;\n }\n const invLength = 1.0 / length;\n this.x *= invLength;\n this.y *= invLength;\n return length;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n static lengthOf(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return math_sqrt(v.x * v.x + v.y * v.y);\n }\n\n /**\n * Get the length squared.\n */\n static lengthSquared(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return v.x * v.x + v.y * v.y;\n }\n\n static distance(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return math_sqrt(dx * dx + dy * dy);\n }\n\n static distanceSquared(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return dx * dx + dy * dy;\n }\n\n static areEqual(v: Vec2Value, w: Vec2Value): boolean {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v === w || typeof w === \"object\" && w !== null && v.x === w.x && v.y === w.y;\n }\n\n /**\n * Get the skew vector such that dot(skew_vec, other) == cross(vec, other)\n */\n static skew(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.y, v.x);\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.x + v.y * w.y;\n }\n\n /** Cross product between two vectors */\n static cross(v: Vec2Value, w: Vec2Value): number;\n /** Cross product between a vector and a scalar */\n static cross(v: Vec2Value, w: number): Vec2;\n /** Cross product between a scalar and a vector */\n static cross(v: number, w: Vec2Value): Vec2;\n static cross(v: any, w: any): any {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n\n } else {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n }\n\n /** Cross product on two vectors */\n static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n\n /** Cross product on a vector and a scalar */\n static crossVec2Num(v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n }\n\n /** Cross product on a vector and a scalar */\n static crossNumVec2(v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n }\n\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2;\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2;\n static addCross(a: Vec2Value, v: any, w: any): Vec2 {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n static add(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x + w.x, v.y + w.y);\n }\n\n /** @hidden @deprecated */\n static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return Vec2.combine(a, v, b, w);\n } else {\n return Vec2.mulNumVec2(a, v);\n }\n }\n\n static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n return Vec2.zero().setCombine(a, v, b, w);\n }\n\n static sub(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x - w.x, v.y - w.y);\n }\n\n static mul(a: Vec2Value, b: number): Vec2;\n static mul(a: number, b: Vec2Value): Vec2;\n static mul(a: any, b: any): Vec2 {\n if (typeof a === \"object\") {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n\n } else if (typeof b === \"object\") {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n }\n\n static mulVec2Num(a: Vec2Value, b: number): Vec2 {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n }\n\n static mulNumVec2(a: number, b: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n\n neg(): Vec2 {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n\n static neg(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.x, -v.y);\n }\n\n static abs(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(math_abs(v.x), math_abs(v.y));\n }\n\n static mid(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo((v.x + w.x) * 0.5, (v.y + w.y) * 0.5);\n }\n\n static upper(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_max(v.x, w.x), math_max(v.y, w.y));\n }\n\n static lower(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_min(v.x, w.x), math_min(v.y, w.y));\n }\n\n clamp(max: number): Vec2 {\n const lengthSqr = this.x * this.x + this.y * this.y;\n if (lengthSqr > max * max) {\n const scale = max / math_sqrt(lengthSqr);\n this.x *= scale;\n this.y *= scale;\n }\n return this;\n }\n\n static clamp(v: Vec2Value, max: number): Vec2 {\n const r = Vec2.neo(v.x, v.y);\n r.clamp(max);\n return r;\n }\n\n /** @hidden @deprecated */\n static scaleFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x * x, v.y * y);\n };\n }\n\n /** @hidden @deprecated */\n static translateFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x + x, v.y + y);\n };\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/**\n * Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n */\nexport interface RayCastInput {\n p1: Vec2Value;\n p2: Vec2Value;\n maxFraction: number;\n}\n\nexport type RayCastCallback = (subInput: RayCastInput, id: number) => number;\n\n/**\n * Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`,\n * where `p1` and `p2` come from RayCastInput.\n */\nexport interface RayCastOutput {\n normal: Vec2;\n fraction: number;\n}\n\n/** Axis-aligned bounding box */\nexport interface AABBValue {\n lowerBound: Vec2Value;\n upperBound: Vec2Value;\n}\n\ndeclare module \"./AABB\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function AABB(lower?: Vec2Value, upper?: Vec2Value): AABB;\n}\n\n/** Axis-aligned bounding box */\n// @ts-expect-error\nexport class AABB {\n lowerBound: Vec2;\n upperBound: Vec2;\n\n constructor(lower?: Vec2Value, upper?: Vec2Value) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof AABB)) {\n return new AABB(lower, upper);\n }\n\n this.lowerBound = Vec2.zero();\n this.upperBound = Vec2.zero();\n\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\n /**\n * Verify that the bounds are sorted.\n */\n isValid(): boolean {\n return AABB.isValid(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!AABB.isValid(o), \"Invalid AABB!\", o);\n }\n\n /**\n * Get the center of the AABB.\n */\n getCenter(): Vec2 {\n return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5);\n }\n\n /**\n * Get the extents of the AABB (half-widths).\n */\n getExtents(): Vec2 {\n return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5);\n }\n\n /**\n * Get the perimeter length.\n */\n getPerimeter(): number {\n return 2.0 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y);\n }\n\n /**\n * Combine one or two AABB into this one.\n */\n combine(a: AABBValue, b?: AABBValue): void {\n b = b || this;\n\n const lowerA = a.lowerBound;\n const upperA = a.upperBound;\n const lowerB = b.lowerBound;\n const upperB = b.upperBound;\n\n const lowerX = math_min(lowerA.x, lowerB.x);\n const lowerY = math_min(lowerA.y, lowerB.y);\n const upperX = math_max(upperB.x, upperA.x);\n const upperY = math_max(upperB.y, upperA.y);\n\n this.lowerBound.setNum(lowerX, lowerY);\n this.upperBound.setNum(upperX, upperY);\n }\n\n combinePoints(a: Vec2Value, b: Vec2Value): void {\n this.lowerBound.setNum(math_min(a.x, b.x), math_min(a.y, b.y));\n this.upperBound.setNum(math_max(a.x, b.x), math_max(a.y, b.y));\n }\n\n set(aabb: AABBValue): void {\n this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y);\n this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y);\n }\n\n contains(aabb: AABBValue): boolean {\n let 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\n extend(value: number): AABB {\n AABB.extend(this, value);\n return this;\n }\n\n static extend(out: AABBValue, value: number): AABBValue {\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\n static testOverlap(a: AABBValue, b: AABBValue): boolean {\n const d1x = b.lowerBound.x - a.upperBound.x;\n const d2x = a.lowerBound.x - b.upperBound.x;\n\n const d1y = b.lowerBound.y - a.upperBound.y;\n const d2y = a.lowerBound.y - b.upperBound.y;\n\n if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) {\n return false;\n }\n return true;\n }\n\n static areEqual(a: AABBValue, b: AABBValue): boolean {\n return Vec2.areEqual(a.lowerBound, b.lowerBound) && Vec2.areEqual(a.upperBound, b.upperBound);\n }\n\n static diff(a: AABBValue, b: AABBValue): number {\n const wD = math_max(0, math_min(a.upperBound.x, b.upperBound.x) - math_max(b.lowerBound.x, a.lowerBound.x));\n const hD = math_max(0, math_min(a.upperBound.y, b.upperBound.y) - math_max(b.lowerBound.y, a.lowerBound.y));\n\n const wA = a.upperBound.x - a.lowerBound.x;\n const hA = a.upperBound.y - a.lowerBound.y;\n\n const wB = b.upperBound.x - b.lowerBound.x;\n const hB = b.upperBound.y - b.lowerBound.y;\n\n return wA * hA + wB * hB - wD * hD;\n }\n\n rayCast(output: RayCastOutput, input: RayCastInput): boolean {\n // From Real-time Collision Detection, p179.\n\n let tmin = -Infinity;\n let tmax = Infinity;\n\n const p = input.p1;\n const d = Vec2.sub(input.p2, input.p1);\n const absD = Vec2.abs(d);\n\n const normal = Vec2.zero();\n\n for (let f: \"x\" | \"y\" = \"x\"; f !== null; f = (f === \"x\" ? \"y\" : null)) {\n if (absD.x < EPSILON) {\n // Parallel.\n if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) {\n return false;\n }\n } else {\n const inv_d = 1.0 / d[f];\n let t1 = (this.lowerBound[f] - p[f]) * inv_d;\n let t2 = (this.upperBound[f] - p[f]) * inv_d;\n\n // Sign of the normal vector.\n let s = -1.0;\n\n if (t1 > t2) {\n const temp = t1;\n t1 = t2;\n t2 = temp;\n s = 1.0;\n }\n\n // Push the min up\n if (t1 > tmin) {\n normal.setZero();\n normal[f] = s;\n tmin = t1;\n }\n\n // Pull the max down\n tmax = math_min(tmax, t2);\n\n if (tmin > tmax) {\n return false;\n }\n }\n }\n\n // Does the ray start inside the box?\n // Does the ray intersect beyond the max fraction?\n if (tmin < 0.0 || input.maxFraction < tmin) {\n return false;\n }\n\n // Intersection.\n output.fraction = tmin;\n output.normal = normal;\n return true;\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue {\n out.lowerBound.x = math_min(a.x, b.x);\n out.lowerBound.y = math_min(a.y, b.y);\n out.upperBound.x = math_max(a.x, b.x);\n out.upperBound.y = math_max(a.y, b.y);\n return out;\n }\n\n static combinedPerimeter(a: AABBValue, b: AABBValue) {\n const lx = math_min(a.lowerBound.x, b.lowerBound.x);\n const ly = math_min(a.lowerBound.y, b.lowerBound.y);\n const ux = math_max(a.upperBound.x, b.upperBound.x);\n const uy = math_max(a.upperBound.y, b.upperBound.y);\n return 2.0 * (ux - lx + uy - ly); \n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Tuning constants based on meters-kilograms-seconds (MKS) units.\n * \n * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units.\n */\nexport class Settings {\n /**\n * You can use this to change the length scale used by your game.\n * \n * For example for inches you could use 39.4.\n */\n static lengthUnitsPerMeter = 1.0;\n \n // Collision\n /**\n * The maximum number of contact points between two convex shapes. Do not change\n * this value.\n */\n static maxManifoldPoints: number = 2;\n\n /**\n * The maximum number of vertices on a convex polygon. You cannot increase this\n * too much because BlockAllocator has a maximum object size.\n */\n static maxPolygonVertices: number = 12;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This allows proxies to move\n * by a small amount without triggering a tree adjustment. This is in meters.\n */\n static aabbExtension: number = 0.1;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This is used to predict the\n * future position based on the current displacement. This is a dimensionless\n * multiplier.\n */\n static aabbMultiplier: number = 2.0;\n\n /**\n * A small length used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static linearSlop: number = 0.005;\n\n /**\n * A small angle used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static angularSlop: number = (2.0 / 180.0 * math_PI);\n\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 static get polygonRadius(): number { return 2.0 * Settings.linearSlop; }\n\n /**\n * Maximum number of sub-steps per contact in continuous physics simulation.\n */\n static maxSubSteps: number = 8;\n\n // Dynamics\n\n /**\n * Maximum number of contacts to be handled to solve a TOI impact.\n */\n static maxTOIContacts: number = 32;\n\n /**\n * Maximum iterations to solve a TOI.\n */\n static maxTOIIterations: number = 20;\n\n /**\n * Maximum iterations to find Distance.\n */\n static maxDistanceIterations: number = 20;\n\n /**\n * A velocity threshold for elastic collisions. Any collision with a relative\n * linear velocity below this threshold will be treated as inelastic.\n */\n static velocityThreshold: number = 1.0;\n\n /**\n * The maximum linear position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxLinearCorrection: number = 0.2;\n\n /**\n * The maximum angular position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxAngularCorrection: number = (8.0 / 180.0 * math_PI);\n\n /**\n * The maximum linear velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxTranslation: number = 2.0;\n\n /**\n * The maximum angular velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxRotation: number = (0.5 * math_PI);\n\n /**\n * This scale factor controls how fast overlap is resolved. Ideally this would\n * be 1 so that overlap is removed in one time step. However using values close\n * to 1 often lead to overshoot.\n */\n static baumgarte: number = 0.2;\n static toiBaugarte: number = 0.75;\n\n // Sleep\n\n /**\n * The time that a body must be still before it will go to sleep.\n */\n static timeToSleep: number = 0.5;\n\n /**\n * A body cannot sleep if its linear velocity is above this tolerance.\n */\n static linearSleepTolerance: number = 0.01;\n\n /**\n * A body cannot sleep if its angular velocity is above this tolerance.\n */\n static angularSleepTolerance: number = (2.0 / 180.0 * math_PI);\n}\n\n/** @internal */\nexport class SettingsInternal {\n static get maxManifoldPoints() {\n return Settings.maxManifoldPoints;\n }\n static get maxPolygonVertices() {\n return Settings.maxPolygonVertices;\n }\n static get aabbExtension() {\n return Settings.aabbExtension * Settings.lengthUnitsPerMeter;\n }\n static get aabbMultiplier() {\n return Settings.aabbMultiplier;\n }\n static get linearSlop() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get linearSlopSquared() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get angularSlop() {\n return Settings.angularSlop;\n }\n static get polygonRadius() {\n return 2.0 * Settings.linearSlop;\n }\n static get maxSubSteps() {\n return Settings.maxSubSteps;\n }\n static get maxTOIContacts() {\n return Settings.maxTOIContacts;\n }\n static get maxTOIIterations() {\n return Settings.maxTOIIterations;\n }\n static get maxDistanceIterations() {\n return Settings.maxDistanceIterations;\n }\n static get velocityThreshold() {\n return Settings.velocityThreshold * Settings.lengthUnitsPerMeter;\n }\n static get maxLinearCorrection() {\n return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter;\n }\n static get maxAngularCorrection() {\n return Settings.maxAngularCorrection;\n }\n static get maxTranslation() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxTranslationSquared() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxRotation() {\n return Settings.maxRotation;\n }\n static get maxRotationSquared() {\n return Settings.maxRotation * Settings.maxRotation;\n }\n static get baumgarte() {\n return Settings.baumgarte;\n }\n static get toiBaugarte() {\n return Settings.toiBaugarte;\n }\n static get timeToSleep() {\n return Settings.timeToSleep;\n }\n static get linearSleepTolerance() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get linearSleepToleranceSqr() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get angularSleepTolerance() {\n return Settings.angularSleepTolerance;\n }\n static get angularSleepToleranceSqr() {\n return Settings.angularSleepTolerance * Settings.angularSleepTolerance;\n }\n}\n","/*\n * Copyright (c) 2016-2018 Ali Shakiba http://shakiba.me/planck.js\n *\n * This software is provided 'as-is', without any express or implied\n * warranty. In no event will the authors be held liable for any damages\n * arising from the use of this software.\n * Permission is granted to anyone to use this software for any purpose,\n * including commercial applications, and to alter it and redistribute it\n * freely, subject to the following restrictions:\n * 1. The origin of this software must not be misrepresented; you must not\n * claim that you wrote the original software. If you use this software\n * in a product, an acknowledgment in the product documentation would be\n * appreciated but is not required.\n * 2. Altered source versions must be plainly marked as such, and must not be\n * misrepresented as being the original software.\n * 3. This notice may not be removed or altered from any source distribution.\n */\n\n/** @internal */\nexport interface PoolOptions {\n max?: number,\n create?: () => T,\n /** Called when an object is being re-allocated. */\n allocate?: (item: T) => void,\n /** Called when an object is returned to pool. */\n release?: (item: T) => void,\n /** Called when an object is returned to the pool but will be disposed from pool. */\n dispose?: (item: T) => T,\n}\n\n/** @internal */\nexport class Pool {\n _list: T[] = [];\n _max: number = Infinity;\n\n _createFn: () => T;\n _hasCreateFn: boolean = false;\n _createCount: number = 0;\n\n _allocateFn: (item: T) => void;\n _hasAllocateFn: boolean = false;\n _allocateCount: number = 0;\n\n _releaseFn: (item: T) => void;\n _hasReleaseFn: boolean = false;\n _releaseCount: number = 0;\n\n _disposeFn: (item: T) => T;\n _hasDisposeFn: boolean = false;\n _disposeCount: number = 0;\n\n constructor(opts: PoolOptions) {\n this._list = [];\n this._max = opts.max || this._max;\n\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\n max(n?: number): number | Pool {\n if (typeof n === \"number\") {\n this._max = n;\n return this;\n }\n return this._max;\n }\n\n size(): number {\n return this._list.length;\n }\n\n allocate(): T {\n let item: T;\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 // tslint:disable-next-line:no-object-literal-type-assertion\n item = {} as T;\n }\n }\n this._allocateCount++;\n if (this._hasAllocateFn) {\n this._allocateFn(item);\n }\n return item;\n }\n\n release(item: T): void {\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\n toString(): string {\n return \" +\" + this._createCount + \" >\" + this._allocateCount + \" <\" + this._releaseCount + \" -\"\n + this._disposeCount + \" =\" + this._list.length + \"/\" + this._max;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Pool } from \"../util/Pool\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\nexport type DynamicTreeQueryCallback = (nodeId: number) => boolean;\n\n/**\n * A node in the dynamic tree. The client does not interact with this directly.\n */\nexport class TreeNode {\n id: number;\n /** Enlarged AABB */\n aabb: AABB = new AABB();\n userData: T = null;\n parent: TreeNode = null;\n child1: TreeNode = null;\n child2: TreeNode = null;\n /** 0: leaf, -1: free node */\n height: number = -1;\n\n constructor(id?: number) {\n this.id = id;\n }\n\n /** @internal */\n toString(): string {\n return this.id + \": \" + this.userData;\n }\n\n isLeaf(): boolean {\n return this.child1 == null;\n }\n}\n\n/** @internal */ const poolTreeNode = new Pool>({\n create(): TreeNode {\n return new TreeNode();\n },\n release(node: TreeNode) {\n node.userData = null;\n node.parent = null;\n node.child1 = null;\n node.child2 = null;\n node.height = -1;\n node.id = undefined;\n }\n});\n\n/**\n * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A\n * dynamic tree arranges data in a binary tree to accelerate queries such as\n * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we\n * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger\n * than the client object. This allows the client object to move by small\n * amounts without triggering a tree update.\n *\n * Nodes are pooled and relocatable, so we use node indices rather than\n * pointers.\n */\nexport class DynamicTree {\n m_root: TreeNode;\n m_lastProxyId: number;\n m_nodes: {\n [id: number]: TreeNode\n };\n\n constructor() {\n this.m_root = null;\n this.m_nodes = {};\n this.m_lastProxyId = 0;\n }\n\n /**\n * Get proxy user data.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getUserData(id: number): T {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.userData;\n }\n\n /**\n * Get the fat AABB for a node id.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getFatAABB(id: number): AABB {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.aabb;\n }\n\n allocateNode(): TreeNode {\n const node = poolTreeNode.allocate();\n node.id = ++this.m_lastProxyId;\n this.m_nodes[node.id] = node;\n return node;\n }\n\n freeNode(node: TreeNode): void {\n // tslint:disable-next-line:no-dynamic-delete\n delete this.m_nodes[node.id];\n poolTreeNode.release(node);\n }\n\n /**\n * Create a proxy in the tree as a leaf node. We return the index of the node\n * instead of a pointer so that we can grow the node pool.\n *\n * Create a proxy. Provide a tight fitting AABB and a userData pointer.\n */\n createProxy(aabb: AABBValue, userData: T): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n\n const node = this.allocateNode();\n\n node.aabb.set(aabb);\n\n // Fatten the aabb.\n AABB.extend(node.aabb, Settings.aabbExtension);\n\n node.userData = userData;\n node.height = 0;\n\n this.insertLeaf(node);\n\n return node.id;\n }\n\n /**\n * Destroy a proxy. This asserts if the id is invalid.\n */\n destroyProxy(id: number): void {\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n this.removeLeaf(node);\n this.freeNode(node);\n }\n\n /**\n * Move a proxy with a swepted AABB. If the proxy has moved outside of its\n * fattened AABB, then the proxy is removed from the tree and re-inserted.\n * Otherwise the function returns immediately.\n *\n * @param d Displacement\n *\n * @return true if the proxy was re-inserted.\n */\n moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean {\n _ASSERT && console.assert(AABB.isValid(aabb));\n _ASSERT && console.assert(!d || Vec2.isValid(d));\n\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n if (node.aabb.contains(aabb)) {\n return false;\n }\n\n this.removeLeaf(node);\n\n node.aabb.set(aabb);\n\n // Extend AABB.\n aabb = node.aabb;\n AABB.extend(aabb, Settings.aabbExtension);\n\n // Predict AABB displacement.\n // const d = Vec2.mul(Settings.aabbMultiplier, displacement);\n\n if (d.x < 0.0) {\n aabb.lowerBound.x += d.x * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.x += d.x * Settings.aabbMultiplier;\n }\n\n if (d.y < 0.0) {\n aabb.lowerBound.y += d.y * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.y += d.y * Settings.aabbMultiplier;\n }\n\n this.insertLeaf(node);\n\n return true;\n }\n\n insertLeaf(leaf: TreeNode): void {\n _ASSERT && console.assert(AABB.isValid(leaf.aabb));\n\n if (this.m_root == null) {\n this.m_root = leaf;\n this.m_root.parent = null;\n return;\n }\n\n // Find the best sibling for this node\n const leafAABB = leaf.aabb;\n let index = this.m_root;\n while (!index.isLeaf()) {\n const child1 = index.child1;\n const child2 = index.child2;\n\n const area = index.aabb.getPerimeter();\n\n const combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB);\n\n // Cost of creating a new parent for this node and the new leaf\n const cost = 2.0 * combinedArea;\n\n // Minimum cost of pushing the leaf further down the tree\n const inheritanceCost = 2.0 * (combinedArea - area);\n\n // Cost of descending into child1\n const newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb);\n let cost1 = newArea1 + inheritanceCost;\n if (!child1.isLeaf()) {\n const oldArea = child1.aabb.getPerimeter();\n cost1 -= oldArea;\n }\n\n // Cost of descending into child2\n const newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb);\n let cost2 = newArea2 + inheritanceCost;\n if (!child2.isLeaf()) {\n const oldArea = child2.aabb.getPerimeter();\n cost2 -= oldArea;\n }\n\n // Descend according to the minimum cost.\n if (cost < cost1 && cost < cost2) {\n break;\n }\n\n // Descend\n if (cost1 < cost2) {\n index = child1;\n } else {\n index = child2;\n }\n }\n\n const sibling = index;\n\n // Create a new parent.\n const oldParent = sibling.parent;\n const 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\n if (oldParent != null) {\n // The sibling was not the root.\n if (oldParent.child1 === sibling) {\n oldParent.child1 = newParent;\n } else {\n oldParent.child2 = newParent;\n }\n\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n } else {\n // The sibling was the root.\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n this.m_root = newParent;\n }\n\n // Walk back up the tree fixing heights and AABBs\n index = leaf.parent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n _ASSERT && console.assert(child1 != null);\n _ASSERT && console.assert(child2 != null);\n\n index.height = 1 + math_max(child1.height, child2.height);\n index.aabb.combine(child1.aabb, child2.aabb);\n\n index = index.parent;\n }\n\n // validate();\n }\n\n removeLeaf(leaf: TreeNode): void {\n if (leaf === this.m_root) {\n this.m_root = null;\n return;\n }\n\n const parent = leaf.parent;\n const grandParent = parent.parent;\n let sibling;\n if (parent.child1 === leaf) {\n sibling = parent.child2;\n } else {\n sibling = parent.child1;\n }\n\n if (grandParent != null) {\n // Destroy parent and connect sibling to grandParent.\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\n // Adjust ancestor bounds.\n let index = grandParent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n index.aabb.combine(child1.aabb, child2.aabb);\n index.height = 1 + math_max(child1.height, child2.height);\n\n index = index.parent;\n }\n } else {\n this.m_root = sibling;\n sibling.parent = null;\n this.freeNode(parent);\n }\n\n // validate();\n }\n\n /**\n * Perform a left or right rotation if node A is imbalanced. Returns the new\n * root index.\n */\n balance(iA: TreeNode): TreeNode {\n _ASSERT && console.assert(iA != null);\n\n const A = iA;\n if (A.isLeaf() || A.height < 2) {\n return iA;\n }\n\n const B = A.child1;\n const C = A.child2;\n\n const balance = C.height - B.height;\n\n // Rotate C up\n if (balance > 1) {\n const F = C.child1;\n const G = C.child2;\n\n // Swap A and C\n C.child1 = A;\n C.parent = A.parent;\n A.parent = C;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(B.height, G.height);\n C.height = 1 + math_max(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\n A.height = 1 + math_max(B.height, F.height);\n C.height = 1 + math_max(A.height, G.height);\n }\n\n return C;\n }\n\n // Rotate B up\n if (balance < -1) {\n const D = B.child1;\n const E = B.child2;\n\n // Swap A and B\n B.child1 = A;\n B.parent = A.parent;\n A.parent = B;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(C.height, E.height);\n B.height = 1 + math_max(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\n A.height = 1 + math_max(C.height, D.height);\n B.height = 1 + math_max(A.height, E.height);\n }\n\n return B;\n }\n\n return A;\n }\n\n /**\n * Compute the height of the binary tree in O(N) time. Should not be called\n * often.\n */\n getHeight(): number {\n if (this.m_root == null) {\n return 0;\n }\n\n return this.m_root.height;\n }\n\n /**\n * Get the ratio of the sum of the node areas to the root area.\n */\n getAreaRatio(): number {\n if (this.m_root == null) {\n return 0.0;\n }\n\n const root = this.m_root;\n const rootArea = root.aabb.getPerimeter();\n\n let totalArea = 0.0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // Free node in pool\n continue;\n }\n\n totalArea += node.aabb.getPerimeter();\n }\n\n this.iteratorPool.release(it);\n\n return totalArea / rootArea;\n }\n\n /**\n * Compute the height of a sub-tree.\n */\n computeHeight(id?: number): number {\n let node;\n if (typeof id !== \"undefined\") {\n node = this.m_nodes[id];\n } else {\n node = this.m_root;\n }\n\n // _ASSERT && console.assert(0 <= id && id < this.m_nodeCapacity);\n\n if (node.isLeaf()) {\n return 0;\n }\n\n const height1 = this.computeHeight(node.child1.id);\n const height2 = this.computeHeight(node.child2.id);\n return 1 + math_max(height1, height2);\n }\n\n validateStructure(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n if (node === this.m_root) {\n _ASSERT && console.assert(node.parent == null);\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n _ASSERT && console.assert(child1.parent === node);\n _ASSERT && console.assert(child2.parent === node);\n\n this.validateStructure(child1);\n this.validateStructure(child2);\n }\n\n validateMetrics(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n const height1 = child1.height;\n const height2 = child2.height;\n const height = 1 + math_max(height1, height2);\n _ASSERT && console.assert(node.height === height);\n\n const aabb = new AABB();\n aabb.combine(child1.aabb, child2.aabb);\n\n _ASSERT && console.assert(AABB.areEqual(aabb, node.aabb));\n\n this.validateMetrics(child1);\n this.validateMetrics(child2);\n }\n\n /**\n * Validate this tree. For testing.\n */\n validate(): void {\n if (!_ASSERT) return;\n this.validateStructure(this.m_root);\n this.validateMetrics(this.m_root);\n\n console.assert(this.getHeight() === this.computeHeight());\n }\n\n /**\n * Get the maximum balance of an node in the tree. The balance is the difference\n * in height of the two children of a node.\n */\n getMaxBalance(): number {\n let maxBalance = 0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height <= 1) {\n continue;\n }\n\n _ASSERT && console.assert(!node.isLeaf());\n\n const balance = math_abs(node.child2.height - node.child1.height);\n maxBalance = math_max(maxBalance, balance);\n }\n this.iteratorPool.release(it);\n\n return maxBalance;\n }\n\n /**\n * Build an optimal tree. Very expensive. For testing.\n */\n rebuildBottomUp(): void {\n const nodes = [];\n let count = 0;\n\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // free node in pool\n continue;\n }\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\n while (count > 1) {\n let minCost = Infinity;\n let iMin = -1;\n let jMin = -1;\n for (let i = 0; i < count; ++i) {\n const aabbi = nodes[i].aabb;\n for (let j = i + 1; j < count; ++j) {\n const aabbj = nodes[j].aabb;\n const cost = AABB.combinedPerimeter(aabbi, aabbj);\n if (cost < minCost) {\n iMin = i;\n jMin = j;\n minCost = cost;\n }\n }\n }\n\n const child1 = nodes[iMin];\n const child2 = nodes[jMin];\n\n const parent = this.allocateNode();\n parent.child1 = child1;\n parent.child2 = child2;\n parent.height = 1 + math_max(child1.height, child2.height);\n parent.aabb.combine(child1.aabb, child2.aabb);\n parent.parent = null;\n\n child1.parent = parent;\n child2.parent = parent;\n\n nodes[jMin] = nodes[count - 1];\n nodes[iMin] = parent;\n --count;\n }\n\n this.m_root = nodes[0];\n\n _ASSERT && this.validate();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n const 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\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void {\n _ASSERT && console.assert(typeof queryCallback === \"function\");\n const stack = this.stackPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, aabb)) {\n if (node.isLeaf()) {\n const 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\n this.stackPool.release(stack);\n }\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n // TODO: GC\n _ASSERT && console.assert(typeof rayCastCallback === \"function\");\n const p1 = input.p1;\n const p2 = input.p2;\n const r = Vec2.sub(p2, p1);\n _ASSERT && console.assert(r.lengthSquared() > 0.0);\n r.normalize();\n\n // v is perpendicular to the segment.\n const v = Vec2.crossNumVec2(1.0, r);\n const abs_v = Vec2.abs(v);\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n\n let maxFraction = input.maxFraction;\n\n // Build a bounding box for the segment.\n const segmentAABB = new AABB();\n let t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2);\n segmentAABB.combinePoints(p1, t);\n\n const stack = this.stackPool.allocate();\n const subInput = this.inputPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, segmentAABB) === false) {\n continue;\n }\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n const c = node.aabb.getCenter();\n const h = node.aabb.getExtents();\n const separation = math_abs(Vec2.dot(v, Vec2.sub(p1, c))) - Vec2.dot(abs_v, h);\n if (separation > 0.0) {\n continue;\n }\n\n if (node.isLeaf()) {\n subInput.p1 = Vec2.clone(input.p1);\n subInput.p2 = Vec2.clone(input.p2);\n subInput.maxFraction = maxFraction;\n\n const value = rayCastCallback(subInput, node.id);\n\n if (value === 0.0) {\n // The client has terminated the ray cast.\n break;\n } else if (value > 0.0) {\n // update segment bounding box.\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\n private inputPool: Pool = new Pool({\n create(): RayCastInput {\n // tslint:disable-next-line:no-object-literal-type-assertion\n return {} as RayCastInput;\n },\n release(stack: RayCastInput): void {\n }\n });\n\n private stackPool: Pool>> = new Pool>>({\n create(): Array> {\n return [];\n },\n release(stack: Array>): void {\n stack.length = 0;\n }\n });\n\n private iteratorPool: Pool> = new Pool>({\n create(): Iterator {\n return new Iterator();\n },\n release(iterator: Iterator): void {\n iterator.close();\n }\n });\n\n}\n\n/** @internal */\nclass Iterator {\n parents: Array> = [];\n states: number[] = [];\n preorder(root: TreeNode): Iterator {\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 next(): TreeNode {\n while (this.parents.length > 0) {\n const i = this.parents.length - 1;\n const 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 close(): void {\n this.parents.length = 0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\nimport { DynamicTree, DynamicTreeQueryCallback } from \"./DynamicTree\";\nimport { FixtureProxy } from \"../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/**\n * The broad-phase wraps and extends a dynamic-tree to keep track of moved\n * objects and query them on update.\n */\nexport class BroadPhase {\n m_tree: DynamicTree = new DynamicTree();\n m_moveBuffer: number[] = [];\n\n m_callback: (userDataA: any, userDataB: any) => void;\n m_queryProxyId: number;\n\n /**\n * Get user data from a proxy. Returns null if the id is invalid.\n */\n getUserData(proxyId: number): FixtureProxy {\n return this.m_tree.getUserData(proxyId);\n }\n\n /**\n * Test overlap of fat AABBs.\n */\n testOverlap(proxyIdA: number, proxyIdB: number): boolean {\n const aabbA = this.m_tree.getFatAABB(proxyIdA);\n const aabbB = this.m_tree.getFatAABB(proxyIdB);\n return AABB.testOverlap(aabbA, aabbB);\n }\n\n /**\n * Get the fat AABB for a proxy.\n */\n getFatAABB(proxyId: number): AABB {\n return this.m_tree.getFatAABB(proxyId);\n }\n\n /**\n * Get the number of proxies.\n */\n getProxyCount(): number {\n return this.m_moveBuffer.length;\n }\n\n /**\n * Get the height of the embedded tree.\n */\n getTreeHeight(): number {\n return this.m_tree.getHeight();\n }\n\n /**\n * Get the balance (integer) of the embedded tree.\n */\n getTreeBalance(): number {\n return this.m_tree.getMaxBalance();\n }\n\n /**\n * Get the quality metric of the embedded tree.\n */\n getTreeQuality(): number {\n return this.m_tree.getAreaRatio();\n }\n\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query = (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void => {\n this.m_tree.query(aabb, queryCallback);\n };\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n this.m_tree.rayCast(input, rayCastCallback);\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_tree.shiftOrigin(newOrigin);\n }\n\n /**\n * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs\n * is called.\n */\n createProxy(aabb: AABBValue, userData: FixtureProxy): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const proxyId = this.m_tree.createProxy(aabb, userData);\n this.bufferMove(proxyId);\n return proxyId;\n }\n\n /**\n * Destroy a proxy. It is up to the client to remove any pairs.\n */\n destroyProxy(proxyId: number): void {\n this.unbufferMove(proxyId);\n this.m_tree.destroyProxy(proxyId);\n }\n\n /**\n * Call moveProxy as many times as you like, then when you are done call\n * UpdatePairs to finalized the proxy pairs (for your time step).\n */\n moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const changed = this.m_tree.moveProxy(proxyId, aabb, displacement);\n if (changed) {\n this.bufferMove(proxyId);\n }\n }\n\n /**\n * Call to trigger a re-processing of it's pairs on the next call to\n * UpdatePairs.\n */\n touchProxy(proxyId: number): void {\n this.bufferMove(proxyId);\n }\n\n bufferMove(proxyId: number): void {\n this.m_moveBuffer.push(proxyId);\n }\n\n unbufferMove(proxyId: number): void {\n for (let 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\n /**\n * Update the pairs. This results in pair callbacks. This can only add pairs.\n */\n updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void {\n _ASSERT && console.assert(typeof addPairCallback === \"function\");\n this.m_callback = addPairCallback;\n\n // Perform tree queries for all moving proxies.\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\n // We have to query the tree with the fat AABB so that\n // we don't fail to create a pair that may touch later.\n const fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId);\n\n // Query tree, create pairs and add them pair buffer.\n this.m_tree.query(fatAABB, this.queryCallback);\n }\n\n // Try to keep the tree balanced.\n // this.m_tree.rebalance(4);\n }\n\n queryCallback = (proxyId: number): boolean => {\n // A proxy cannot form a pair with itself.\n if (proxyId === this.m_queryProxyId) {\n return true;\n }\n\n const proxyIdA = math_min(proxyId, this.m_queryProxyId);\n const proxyIdB = math_max(proxyId, this.m_queryProxyId);\n\n // TODO: Skip any duplicate pairs.\n\n const userDataA = this.m_tree.getUserData(proxyIdA);\n const userDataB = this.m_tree.getUserData(proxyIdB);\n\n // Send the pairs back to the client.\n this.m_callback(userDataA, userDataB);\n\n return true;\n };\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2023 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\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_sqrt = Math.sqrt;\n\n\nimport { RotValue } from \"./Rot\";\nimport { TransformValue } from \"./Transform\";\nimport { Vec2Value } from \"./Vec2\";\nimport { Vec3Value } from \"./Vec3\";\n\nexport function vec2(x: number, y: number): Vec2Value {\n return { x, y };\n}\n\nexport function vec3(x: number, y: number, z: number): Vec3Value {\n return { x, y, z };\n}\n\nexport function rotation(angle: number): RotValue {\n return { s: math_sin(angle), c: math_cos(angle) };\n}\n\nexport function setVec2(out: Vec2Value, x: number, y: number): Vec2Value {\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function copyVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = w.x;\n out.y = w.y;\n return out;\n}\n\nexport function zeroVec2(out: Vec2Value): Vec2Value {\n out.x = 0;\n out.y = 0;\n return out;\n}\n\nexport function negVec2(out: Vec2Value): Vec2Value {\n out.x = -out.x;\n out.y = -out.y;\n return out;\n}\n\nexport function plusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x += w.x;\n out.y += w.y;\n return out;\n}\n\nexport function addVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x + w.x;\n out.y = v.x + w.y;\n return out;\n}\n\nexport function minusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x -= w.x;\n out.y -= w.y;\n return out;\n}\n\nexport function subVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x - w.x;\n out.y = v.y - w.y;\n return out;\n}\n\nexport function mulVec2(out: Vec2Value, m: number): Vec2Value {\n out.x *= m;\n out.y *= m;\n return out;\n}\n\nexport function scaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x = m * w.x;\n out.y = m * w.y;\n return out;\n}\n\nexport function plusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x += m * w.x;\n out.y += m * w.y;\n return out;\n}\n\nexport function minusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x -= m * w.x;\n out.y -= m * w.y;\n return out;\n}\n\nexport function combine2Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x;\n out.y = am * a.y + bm * b.y;\n return out;\n}\n\nexport function combine3Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value, cm: number, c: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x + cm * c.x;\n out.y = am * a.y + bm * b.y + cm * c.y;\n return out;\n}\n\nexport function normalizeVec2Length(out: Vec2Value): number {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length !== 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return length;\n}\n\nexport function normalizeVec2(out: Vec2Value): Vec2Value {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length > 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return out;\n}\n\nexport function crossVec2Num(out: Vec2Value, v: Vec2Value, w: number): Vec2Value {\n const x = w * v.y;\n const y = -w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossNumVec2(out: Vec2Value, w: number, v: Vec2Value): Vec2Value {\n const x = -w * v.y;\n const y = w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossVec2Vec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.y - a.y * b.x;\n}\n\nexport function dotVec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.x + a.y * b.y;\n}\n\nexport function lengthVec2(a: Vec2Value): number {\n return math_sqrt(a.x * a.x + a.y * a.y);\n}\n\nexport function lengthSqrVec2(a: Vec2Value): number {\n return a.x * a.x + a.y * a.y;\n}\n\nexport function distVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return math_sqrt(dx * dx + dy * dy);\n}\n\nexport function distSqrVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return dx * dx + dy * dy;\n}\n\nexport function dotVec3(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n}\n\nexport function setRotAngle(out: RotValue, a: number): RotValue {\n out.c = math_cos(a);\n out.s = math_sin(a);\n return out;\n}\n\nexport function rotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n out.x = q.c * v.x - q.s * v.y;\n out.y = q.s * v.x + q.c * v.y;\n return out;\n}\n\nexport function derotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n const x = q.c * v.x + q.s * v.y;\n const y = -q.s * v.x + q.c * v.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function rerotVec2(out: Vec2Value, before: RotValue, after: RotValue, v: Vec2Value): Vec2Value {\n const x0 = before.c * v.x + before.s * v.y;\n const y0 = -before.s * v.x + before.c * v.y;\n const x = after.c * x0 - after.s * y0;\n const y = after.s * x0 + after.c * y0;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function transform(x: number, y: number, a: number): TransformValue {\n return { p: vec2(x, y), q: rotation(a) };\n}\n\nexport function copyTransform(out: TransformValue, transform: TransformValue): TransformValue {\n out.p.x = transform.p.x;\n out.p.y = transform.p.y;\n out.q.s = transform.q.s;\n out.q.c = transform.q.c;\n return out;\n}\n\nexport function transformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const x = xf.q.c * v.x - xf.q.s * v.y + xf.p.x;\n const y = xf.q.s * v.x + xf.q.c * v.y + xf.p.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const px = v.x - xf.p.x;\n const py = v.y - xf.p.y;\n const x = (xf.q.c * px + xf.q.s * py);\n const y = (-xf.q.s * px + xf.q.c * py);\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function retransformVec2(out: Vec2Value, from: TransformValue, to: TransformValue, v: Vec2Value): Vec2Value {\n const x0 = from.q.c * v.x - from.q.s * v.y + from.p.x;\n const y0 = from.q.s * v.x + from.q.c * v.y + from.p.y;\n const px = x0 - to.p.x;\n const py = y0 - to.p.y;\n const x = to.q.c * px + to.q.s * py;\n const y = -to.q.s * px + to.q.c * py;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformTransform(out: TransformValue, a: TransformValue, b: TransformValue): TransformValue {\n const c = a.q.c * b.q.c + a.q.s * b.q.s;\n const s = a.q.c * b.q.s - a.q.s * b.q.c;\n const x = a.q.c * (b.p.x - a.p.x) + a.q.s * (b.p.y - a.p.y);\n const y = -a.q.s * (b.p.x - a.p.x) + a.q.c * (b.p.y - a.p.y);\n out.q.c = c;\n out.q.s = s;\n out.p.x = x;\n out.p.y = y;\n return out;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_atan2 = Math.atan2;\n\nexport interface RotValue {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n}\n\ndeclare module \"./Rot\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Rot(angle: number): Rot;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Rot(obj: RotValue): Rot;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Rot(): Rot;\n}\n\n/** Rotation */\n// @ts-expect-error\nexport class Rot {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n\n /** Initialize from an angle in radians. */\n constructor(angle?: number | RotValue) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Rot)) {\n return new Rot(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\n /** @hidden */\n static neo(angle: number): Rot {\n const obj = Object.create(Rot.prototype);\n obj.setAngle(angle);\n return obj;\n }\n\n static clone(rot: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n const obj = Object.create(Rot.prototype);\n obj.s = rot.s;\n obj.c = rot.c;\n return obj;\n }\n\n static identity(): Rot {\n const obj = Object.create(Rot.prototype);\n obj.s = 0.0;\n obj.c = 1.0;\n return obj;\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.s) && Number.isFinite(obj.c);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Rot.isValid(o), \"Invalid Rot!\", o);\n }\n\n /** Set to the identity rotation. */\n setIdentity(): void {\n this.s = 0.0;\n this.c = 1.0;\n }\n\n set(angle: number | RotValue): void {\n if (typeof angle === \"object\") {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n\n } else {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n }\n\n setRot(angle: RotValue): void {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n }\n\n /** Set using an angle in radians. */\n setAngle(angle: number): void {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n\n /** Get the angle in radians. */\n getAngle(): number {\n return math_atan2(this.s, this.c);\n }\n\n /** Get the x-axis. */\n getXAxis(): Vec2 {\n return Vec2.neo(this.c, this.s);\n }\n\n /** Get the y-axis. */\n getYAxis(): Vec2 {\n return Vec2.neo(-this.s, this.c);\n }\n\n /** Multiply two rotations: q * r */\n static mul(rot: RotValue, m: RotValue): Rot;\n /** Rotate a vector */\n static mul(rot: RotValue, m: Vec2Value): Vec2;\n static mul(rot, m) {\n _ASSERT && Rot.assert(rot);\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Multiply two rotations: q * r */\n static mulRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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\n /** Rotate a vector */\n static mulVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n\n static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2 {\n const x = rot.c * (v.x - w.x) - rot.s * (v.y - w.y);\n const y = rot.s * (v.x - w.x) + rot.c * (v.y - w.y);\n return Vec2.neo(x, y);\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulT(rot: RotValue, m: RotValue): Rot;\n /** Inverse rotate a vector */\n static mulT(rot: RotValue, m: Vec2Value): Vec2;\n static mulT(rot, m) {\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulTRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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\n /** Inverse rotate a vector */\n static mulTVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"./Matrix\";\nimport { mod } from \"./Math\";\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { TransformValue } from \"./Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_atan2 = Math.atan2;\n/** @internal */ const math_PI = Math.PI;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * This describes the motion of a body/shape for TOI computation. Shapes are\n * defined with respect to the body origin, which may not coincide with the\n * center of mass. However, to support dynamics we must interpolate the center\n * of mass position.\n */\nexport class Sweep {\n /** Local center of mass position */\n localCenter = Vec2.zero();\n\n /** World center position */\n c = Vec2.zero();\n\n /** World angle */\n a = 0;\n\n /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */\n alpha0 = 0;\n\n c0 = Vec2.zero();\n a0 = 0;\n\n /** @internal */\n recycle() {\n matrix.zeroVec2(this.localCenter);\n matrix.zeroVec2(this.c);\n this.a = 0;\n this.alpha0 = 0;\n matrix.zeroVec2(this.c0);\n this.a0 = 0;\n }\n\n setTransform(xf: TransformValue): void {\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n\n this.a = this.a0 = math_atan2(xf.q.s, xf.q.c);\n }\n\n setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void {\n matrix.copyVec2(this.localCenter, localCenter);\n\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n }\n\n /**\n * Get the interpolated transform at a specific time.\n *\n * @param xf\n * @param beta A factor in [0,1], where 0 indicates alpha0\n */\n getTransform(xf: TransformValue, beta: number = 0): void {\n matrix.setRotAngle(xf.q, (1.0 - beta) * this.a0 + beta * this.a);\n matrix.combine2Vec2(xf.p, (1.0 - beta), this.c0, beta, this.c);\n\n // shift to origin\n matrix.minusVec2(xf.p, matrix.rotVec2(temp, xf.q, this.localCenter));\n }\n\n /**\n * Advance the sweep forward, yielding a new initial state.\n *\n * @param alpha The new initial time\n */\n advance(alpha: number): void {\n _ASSERT && console.assert(this.alpha0 < 1.0);\n const beta = (alpha - this.alpha0) / (1.0 - this.alpha0);\n matrix.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\n forward(): void {\n this.a0 = this.a;\n matrix.copyVec2(this.c0, this.c);\n }\n\n /**\n * normalize the angles in radians to be between -pi and pi.\n */\n normalize(): void {\n const a0 = mod(this.a0, -math_PI, +math_PI);\n this.a -= this.a0 - a0;\n this.a0 = a0;\n }\n\n set(that: Sweep): void {\n matrix.copyVec2(this.localCenter, that.localCenter);\n matrix.copyVec2(this.c, that.c);\n this.a = that.a;\n this.alpha0 = that.alpha0;\n matrix.copyVec2(this.c0, that.c0);\n this.a0 = that.a0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Rot, RotValue } from \"./Rot\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport type TransformValue = {\n p: Vec2Value;\n q: RotValue;\n};\n\ndeclare module \"./Transform\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Transform(position?: Vec2Value, rotation?: number): Transform;\n}\n\n/**\n * A transform contains translation and rotation. It is used to represent the\n * position and orientation of rigid frames. Initialize using a position vector\n * and a rotation.\n */\n// @ts-expect-error\nexport class Transform {\n /** position */\n p: Vec2;\n\n /** rotation */\n q: Rot;\n\n constructor(position?: Vec2Value, rotation?: number) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Transform)) {\n return new Transform(position, rotation);\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 rotation !== \"undefined\") {\n this.q.setAngle(rotation);\n }\n }\n\n static clone(xf: Transform): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(xf.p);\n obj.q = Rot.clone(xf.q);\n return obj;\n }\n\n /** @hidden */\n static neo(position: Vec2Value, rotation: Rot): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(position);\n obj.q = Rot.clone(rotation);\n return obj;\n }\n\n static identity(): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.zero();\n obj.q = Rot.identity();\n return obj;\n }\n\n /** Set this to the identity transform */\n setIdentity(): void {\n this.p.setZero();\n this.q.setIdentity();\n }\n\n /** Set position and angle */\n set(position: Vec2Value, rotation: number): void;\n /** Copy from another transform */\n set(xf: TransformValue): void;\n set(a: any, b?: any) {\n if (typeof b === \"undefined\") {\n this.p.set(a.p);\n this.q.set(a.q);\n } else {\n this.p.set(a);\n this.q.set(b);\n }\n }\n\n /** Set position and angle */\n setNum(position: Vec2Value, rotation: number) {\n this.p.setVec2(position);\n this.q.setAngle(rotation);\n }\n\n setTransform(xf: TransformValue): void {\n this.p.setVec2(xf.p);\n this.q.setRot(xf.q);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.p) && Rot.isValid(obj.q);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Transform.isValid(o), \"Invalid Transform!\", o);\n }\n\n static mul(a: TransformValue, b: Vec2Value): Vec2;\n static mul(a: TransformValue, b: TransformValue): Transform;\n // static mul(a: Transform, b: Vec2Value[]): Vec2[];\n // static mul(a: Transform, b: Transform[]): Transform[];\n static mul(a, b) {\n if (Array.isArray(b)) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n\n } else if (\"x\" in b && \"y\" in b) {\n return Transform.mulVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulXf(a, b);\n }\n }\n\n static mulAll(a: Transform, b: Vec2Value[]): Vec2[];\n static mulAll(a: Transform, b: Transform[]): Transform[];\n static mulAll(a: TransformValue, b) {\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n }\n\n /** @hidden @deprecated */\n static mulFn(a: TransformValue) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n return function(b: Vec2Value): Vec2 {\n return Transform.mul(a, b);\n };\n }\n\n static mulVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = (a.q.c * b.x - a.q.s * b.y) + a.p.x;\n const y = (a.q.s * b.x + a.q.c * b.y) + a.p.y;\n return Vec2.neo(x, y);\n }\n\n static mulXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p\n // = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p\n const xf = Transform.identity();\n xf.q = Rot.mulRot(a.q, b.q);\n xf.p = Vec2.add(Rot.mulVec2(a.q, b.p), a.p);\n return xf;\n }\n\n static mulT(a: TransformValue, b: Vec2Value): Vec2;\n static mulT(a: TransformValue, b: TransformValue): Transform;\n static mulT(a, b) {\n if (\"x\" in b && \"y\" in b) {\n return Transform.mulTVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulTXf(a, b);\n }\n }\n\n static mulTVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const px = b.x - a.p.x;\n const py = b.y - a.p.y;\n const x = (a.q.c * px + a.q.s * py);\n const y = (-a.q.s * px + a.q.c * py);\n return Vec2.neo(x, y);\n }\n\n static mulTXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q' * (B.q * v1 + B.p - A.p)\n // = A.q' * B.q * v1 + A.q' * (B.p - A.p)\n const xf = Transform.identity();\n xf.q.setRot(Rot.mulTRot(a.q, b.q));\n xf.p.setVec2(Rot.mulTVec2(a.q, Vec2.sub(b.p, a.p)));\n return xf;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2 } from \"../common/Vec2\";\n\nexport class Velocity {\n /** linear */\n v = Vec2.zero();\n\n /** angular */\n w = 0;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n\n\nexport class Position {\n /** location */\n c = Vec2.zero();\n\n /** angle */\n a = 0;\n\n // todo: cache sin/cos\n getTransform(xf: TransformValue, p: Vec2Value): TransformValue {\n // xf.q = rotation(this.a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(this.a);\n xf.q.s = math_sin(this.a);\n xf.p.x = this.c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = this.c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n }\n}\n\nexport function getTransform(xf: TransformValue, p: Vec2Value, c: Vec2Value, a: number): TransformValue {\n // xf.q = rotation(a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(a);\n xf.q.s = math_sin(a);\n xf.p.x = c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { MassData } from \"../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"./AABB\";\nimport { DistanceProxy } from \"./Distance\";\nimport type { Transform, TransformValue } from \"../common/Transform\";\nimport type { Vec2Value } from \"../common/Vec2\";\nimport { Style } from \"../util/Testbed\";\n\n// todo make shape an interface\n\n/**\n * A shape is used for collision detection. You can create a shape however you\n * like. Shapes used for simulation in World are created automatically when a\n * Fixture is created. Shapes may encapsulate one or more child shapes.\n */\nexport abstract class Shape {\n /** @hidden */ m_type: ShapeType;\n\n /**\n * @hidden\n * Radius of a shape. For polygonal shapes this must be b2_polygonRadius.\n * There is no support for making rounded polygons.\n */\n m_radius: number;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @hidden */\n abstract _reset(): void;\n\n static isValid(obj: any): boolean {\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\n abstract getRadius(): number;\n\n /**\n * Get the type of this shape. You can use this to down cast to the concrete\n * shape.\n *\n * @return the shape type.\n */\n abstract getType(): ShapeType;\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n abstract _clone(): Shape;\n\n /**\n * Get the number of child primitives.\n */\n abstract getChildCount(): number;\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n abstract testPoint(xf: TransformValue, p: Vec2Value): boolean;\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean;\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void;\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n abstract computeMass(massData: MassData, density?: number): void;\n\n abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void;\n\n}\n\nexport type ShapeType = \"circle\" | \"edge\" | \"polygon\" | \"chain\";\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Shape, ShapeType } from \"../collision/Shape\";\nimport { Body, MassData } from \"./Body\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const synchronize_aabb1 = new AABB();\n/** @internal */ const synchronize_aabb2 = new AABB();\n/** @internal */ const displacement = matrix.vec2(0, 0);\n\n/**\n * A fixture definition is used to create a fixture. This class defines an\n * abstract fixture definition. You can reuse fixture definitions safely.\n */\nexport interface FixtureOpt {\n userData?: unknown;\n /**\n * The friction coefficient, usually in the range [0,1]\n */\n friction?: number;\n /**\n * The restitution (elasticity) usually in the range [0,1]\n */\n restitution?: number;\n /**\n * The density, usually in kg/m^2\n */\n density?: number;\n /**\n * A sensor shape collects contact information but never generates a collision response.\n */\n isSensor?: boolean;\n /**\n * Zero, positive or negative collision group.\n * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide.\n */\n filterGroupIndex?: number;\n /**\n * Collision category bit or bits that this fixture belongs to.\n * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa.\n */\n filterCategoryBits?: number;\n /**\n * Collision category bit or bits that this fixture accept for collision.\n */\n filterMaskBits?: number;\n}\n\nexport interface FixtureDef extends FixtureOpt {\n shape: Shape;\n}\n\n/** @internal */ const FixtureDefDefault: FixtureOpt = {\n userData : null,\n friction : 0.2,\n restitution : 0.0,\n density : 0.0,\n isSensor : false,\n\n filterGroupIndex : 0,\n filterCategoryBits : 0x0001,\n filterMaskBits : 0xFFFF\n};\n\n/**\n * This proxy is used internally to connect shape children to the broad-phase.\n */\nexport class FixtureProxy {\n aabb: AABB;\n fixture: Fixture;\n childIndex: number;\n proxyId: number;\n constructor(fixture: Fixture, childIndex: number) {\n this.aabb = new AABB();\n this.fixture = fixture;\n this.childIndex = childIndex;\n this.proxyId;\n }\n}\n\n/**\n * A fixture is used to attach a shape to a body for collision detection. A\n * fixture inherits its transform from its parent. Fixtures hold additional\n * non-geometric data such as friction, collision filters, etc.\n *\n * To create a new Fixture use {@link Body.createFixture}.\n */\nexport class Fixture {\n /** @internal */ m_body: Body;\n /** @internal */ m_friction: number;\n /** @internal */ m_restitution: number;\n /** @internal */ m_density: number;\n /** @internal */ m_isSensor: boolean;\n /** @internal */ m_filterGroupIndex: number;\n /** @internal */ m_filterCategoryBits: number;\n /** @internal */ m_filterMaskBits: number;\n /** @internal */ m_shape: Shape;\n /** @internal */ m_next: Fixture | null;\n /** @internal */ m_proxies: FixtureProxy[];\n // 0 indicates inactive state, this is not the same as m_proxies.length\n /** @internal */ m_proxyCount: number;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(body: Body, def: FixtureDef);\n constructor(body: Body, shape: Shape, def?: FixtureOpt);\n constructor(body: Body, shape: Shape, density?: number);\n /** @internal */\n constructor(body: Body, shape?, def?) {\n if (shape.shape) {\n def = shape;\n shape = shape.shape;\n\n } else if (typeof def === \"number\") {\n def = {density : def};\n }\n\n def = options(def, FixtureDefDefault);\n\n this.m_body = body;\n\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\n this.m_filterGroupIndex = def.filterGroupIndex;\n this.m_filterCategoryBits = def.filterCategoryBits;\n this.m_filterMaskBits = def.filterMaskBits;\n\n // TODO validate shape\n this.m_shape = shape; // .clone();\n\n this.m_next = null;\n\n this.m_proxies = [];\n this.m_proxyCount = 0;\n\n // fixture proxies are created here,\n // but they are activate in when a fixture is added to body\n const childCount = this.m_shape.getChildCount();\n for (let i = 0; i < childCount; ++i) {\n this.m_proxies[i] = new FixtureProxy(this, i);\n }\n\n this.m_userData = def.userData;\n }\n\n /** @hidden Re-setup fixture. */\n _reset(): void {\n const body = this.getBody();\n const broadPhase = body.m_world.m_broadPhase;\n this.destroyProxies(broadPhase);\n if (this.m_shape._reset) {\n this.m_shape._reset();\n }\n const childCount = this.m_shape.getChildCount();\n for (let 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\n /** @internal */\n _serialize(): object {\n return {\n friction: this.m_friction,\n restitution: this.m_restitution,\n density: this.m_density,\n isSensor: this.m_isSensor,\n\n filterGroupIndex: this.m_filterGroupIndex,\n filterCategoryBits: this.m_filterCategoryBits,\n filterMaskBits: this.m_filterMaskBits,\n\n shape: this.m_shape,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, body: any, restore: any): Fixture {\n const shape = restore(Shape, data.shape);\n const fixture = shape && new Fixture(body, shape, data);\n return fixture;\n }\n\n /**\n * Get the type of the child shape. You can use this to down cast to the\n * concrete shape.\n */\n getType(): ShapeType {\n return this.m_shape.m_type;\n }\n\n /**\n * Get the child shape. You can modify the child shape, however you should not\n * change the number of vertices because this will crash some collision caching\n * mechanisms. Manipulating the shape may lead to non-physical behavior.\n */\n getShape(): Shape {\n return this.m_shape;\n }\n\n /**\n * A sensor shape collects contact information but never generates a collision\n * response.\n */\n isSensor(): boolean {\n return this.m_isSensor;\n }\n\n /**\n * Set if this fixture is a sensor.\n */\n setSensor(sensor: boolean): void {\n if (sensor != this.m_isSensor) {\n this.m_body.setAwake(true);\n this.m_isSensor = sensor;\n }\n }\n\n // /**\n // * Get the contact filtering data.\n // */\n // getFilterData() {\n // return this.m_filter;\n // }\n\n /**\n * Get the user data that was assigned in the fixture definition. Use this to\n * store your application specific data.\n */\n getUserData(): unknown {\n return this.m_userData;\n }\n\n /**\n * Set the user data. Use this to store your application specific data.\n */\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get the parent body of this fixture. This is null if the fixture is not\n * attached.\n */\n getBody(): Body {\n return this.m_body;\n }\n\n /**\n * Get the next fixture in the parent body's fixture list.\n */\n getNext(): Fixture | null {\n return this.m_next;\n }\n\n /**\n * Get the density of this fixture.\n */\n getDensity(): number {\n return this.m_density;\n }\n\n /**\n * Set the density of this fixture. This will _not_ automatically adjust the\n * mass of the body. You must call Body.resetMassData to update the body's mass.\n */\n setDensity(density: number): void {\n _ASSERT && console.assert(Number.isFinite(density) && density >= 0.0);\n this.m_density = density;\n }\n\n /**\n * Get the coefficient of friction, usually in the range [0,1].\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Set the coefficient of friction. This will not change the friction of\n * existing contacts.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the coefficient of restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Set the coefficient of restitution. This will not change the restitution of\n * existing contacts.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Test a point in world coordinates for containment in this fixture.\n */\n testPoint(p: Vec2Value): boolean {\n return this.m_shape.testPoint(this.m_body.getTransform(), p);\n }\n\n /**\n * Cast a ray against this shape.\n */\n rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean {\n return this.m_shape.rayCast(output, input, this.m_body.getTransform(), childIndex);\n }\n\n /**\n * Get the mass data for this fixture. The mass data is based on the density and\n * the shape. The rotational inertia is about the shape's origin. This operation\n * may be expensive.\n */\n getMassData(massData: MassData): void {\n this.m_shape.computeMass(massData, this.m_density);\n }\n\n /**\n * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a\n * more accurate AABB, compute it using the shape and the body transform.\n */\n getAABB(childIndex: number): AABB {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_proxies.length);\n return this.m_proxies[childIndex].aabb;\n }\n\n /**\n * These support body activation/deactivation.\n */\n createProxies(broadPhase: BroadPhase, xf: TransformValue): void {\n _ASSERT && console.assert(this.m_proxyCount == 0);\n\n // Create proxies in the broad-phase.\n this.m_proxyCount = this.m_shape.getChildCount();\n\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n this.m_shape.computeAABB(proxy.aabb, xf, i);\n proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy);\n }\n }\n\n destroyProxies(broadPhase: BroadPhase): void {\n // Destroy proxies in the broad-phase.\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n broadPhase.destroyProxy(proxy.proxyId);\n proxy.proxyId = null;\n }\n\n this.m_proxyCount = 0;\n }\n\n /**\n * Updates this fixture proxy in broad-phase (with combined AABB of current and\n * next transformation).\n */\n synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void {\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n // Compute an AABB that covers the swept shape (may miss some rotation\n // effect).\n this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex);\n this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex);\n\n proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2);\n\n matrix.subVec2(displacement, xf2.p, xf1.p);\n\n broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement);\n }\n }\n\n /**\n * Set the contact filtering data. This will not update contacts until the next\n * time step when either parent body is active and awake. This automatically\n * calls refilter.\n */\n setFilterData(filter: { groupIndex: number, categoryBits: number, maskBits: number }): void {\n this.m_filterGroupIndex = filter.groupIndex;\n this.m_filterCategoryBits = filter.categoryBits;\n this.m_filterMaskBits = filter.maskBits;\n this.refilter();\n }\n\n getFilterGroupIndex(): number {\n return this.m_filterGroupIndex;\n }\n\n setFilterGroupIndex(groupIndex: number): void {\n this.m_filterGroupIndex = groupIndex;\n this.refilter();\n }\n\n getFilterCategoryBits(): number {\n return this.m_filterCategoryBits;\n }\n\n setFilterCategoryBits(categoryBits: number): void {\n this.m_filterCategoryBits = categoryBits;\n this.refilter();\n }\n\n getFilterMaskBits(): number {\n return this.m_filterMaskBits;\n }\n\n setFilterMaskBits(maskBits: number): void {\n this.m_filterMaskBits = maskBits;\n this.refilter();\n }\n\n /**\n * Call this if you want to establish collision that was previously disabled by\n * ContactFilter.\n */\n refilter(): void {\n if (this.m_body == null) {\n return;\n }\n\n // Flag associated contacts for filtering.\n let edge = this.m_body.getContactList();\n while (edge) {\n const contact = edge.contact;\n const fixtureA = contact.getFixtureA();\n const fixtureB = contact.getFixtureB();\n if (fixtureA == this || fixtureB == this) {\n contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n\n const world = this.m_body.getWorld();\n\n if (world == null) {\n return;\n }\n\n // Touch each proxy so that new pairs may be created\n const broadPhase = world.m_broadPhase;\n for (let i = 0; i < this.m_proxyCount; ++i) {\n broadPhase.touchProxy(this.m_proxies[i].proxyId);\n }\n }\n\n /**\n * Implement this method to provide collision filtering, if you want finer\n * control over contact creation.\n *\n * Return true if contact calculations should be performed between these two\n * fixtures.\n *\n * Warning: for performance reasons this is only called when the AABBs begin to\n * overlap.\n */\n shouldCollide(that: Fixture): boolean {\n\n if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) {\n return that.m_filterGroupIndex > 0;\n }\n\n const collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0;\n const collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0;\n const collide = collideA && collideB;\n return collide;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Velocity } from \"./Velocity\";\nimport { Position } from \"./Position\";\nimport { Fixture, FixtureDef, FixtureOpt } from \"./Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { JointEdge } from \"./Joint\";\nimport { World } from \"./World\";\nimport { ContactEdge } from \"./Contact\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A static body does not move under simulation and behaves as if it has infinite mass.\n * Internally, zero is stored for the mass and the inverse mass.\n * Static bodies can be moved manually by the user.\n * A static body has zero velocity.\n * Static bodies do not collide with other static or kinematic bodies.\n * \n * A kinematic body moves under simulation according to its velocity.\n * Kinematic bodies do not respond to forces.\n * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity.\n * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass.\n * Kinematic bodies do not collide with other kinematic or static bodies.\n * \n * A dynamic body is fully simulated.\n * They can be moved manually by the user, but normally they move according to forces.\n * A dynamic body can collide with all body types.\n * A dynamic body always has finite, non-zero mass.\n * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate.\n */\nexport type BodyType = \"static\" | \"kinematic\" | \"dynamic\";\n\n/** @internal */ const STATIC = \"static\";\n/** @internal */ const KINEMATIC = \"kinematic\";\n/** @internal */ const DYNAMIC = \"dynamic\";\n\n/** @internal */ const oldCenter = matrix.vec2(0, 0);\n/** @internal */ const localCenter = matrix.vec2(0, 0);\n/** @internal */ const shift = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n\nexport interface BodyDef {\n /**\n * Body types are static, kinematic, or dynamic. Note: if a dynamic\n * body would have zero mass, the mass is set to one.\n */\n type?: BodyType;\n /**\n * The world position of the body. Avoid creating bodies at the\n * origin since this can lead to many overlapping shapes.\n */\n position?: Vec2Value;\n /**\n * The world angle of the body in radians.\n */\n angle?: number;\n /**\n * The linear velocity of the body's origin in world co-ordinates.\n */\n linearVelocity?: Vec2Value;\n angularVelocity?: number;\n /**\n * Linear damping is use to reduce the linear velocity. The\n * damping parameter can be larger than 1.0 but the damping effect becomes\n * sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n linearDamping?: number;\n /**\n * Angular damping is use to reduce the angular velocity.\n * The damping parameter can be larger than 1.0 but the damping effect\n * becomes sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n angularDamping?: number;\n /**\n * Should this body be prevented from rotating? Useful for characters.\n */\n fixedRotation?: boolean;\n /**\n * Is this a fast moving body that should be prevented from\n * tunneling through other moving bodies? Note that all bodies are\n * prevented from tunneling through kinematic and static bodies. This\n * setting is only considered on dynamic bodies. Warning: You should use\n * this flag sparingly since it increases processing time.\n */\n bullet?: boolean;\n gravityScale?: number;\n /**\n * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage.\n */\n allowSleep?: boolean;\n /**\n * Is this body initially awake or sleeping?\n */\n awake?: boolean;\n /**\n * Does this body start out active?\n */\n active?: boolean;\n userData?: any;\n}\n\n/** @internal */ const BodyDefDefault: BodyDef = {\n type : STATIC,\n position : Vec2.zero(),\n angle : 0.0,\n\n linearVelocity : Vec2.zero(),\n angularVelocity : 0.0,\n\n linearDamping : 0.0,\n angularDamping : 0.0,\n\n fixedRotation : false,\n bullet : false,\n gravityScale : 1.0,\n\n allowSleep : true,\n awake : true,\n active : true,\n\n userData : null\n};\n\n/**\n * MassData This holds the mass data computed for a shape.\n */\nexport interface MassData {\n /** The mass of the shape, usually in kilograms. */\n mass: number;\n /** The position of the shape's centroid relative to the shape's origin. */\n center: Vec2Value;\n /** The rotational inertia of the shape about the local origin. */\n I: number;\n}\n\n/**\n * A rigid body composed of one or more fixtures.\n *\n * To create a new Body use {@link World.createBody}.\n */\nexport class Body {\n /** @hidden */\n static readonly STATIC: BodyType = \"static\";\n /** @hidden */\n static readonly KINEMATIC: BodyType = \"kinematic\";\n /** @hidden */\n static readonly DYNAMIC: BodyType = \"dynamic\";\n\n /** @internal */ m_world: World;\n /** @internal */ m_awakeFlag: boolean;\n /** @internal */ m_autoSleepFlag: boolean;\n /** @internal */ m_bulletFlag: boolean;\n /** @internal */ m_fixedRotationFlag: boolean;\n /** @internal */ m_activeFlag: boolean;\n /** @internal */ m_islandFlag: boolean;\n /** @internal */ m_toiFlag: boolean;\n /** @internal */ m_userData: unknown;\n /** @internal */ m_type: BodyType;\n /** @internal */ m_mass: number;\n /** @internal */ m_invMass: number;\n /** @internal Rotational inertia about the center of mass. */\n m_I: number;\n /** @internal */ m_invI: number;\n /** @internal the body origin transform */\n m_xf: Transform;\n /** @internal the swept motion for CCD */\n m_sweep: Sweep;\n // position and velocity correction\n /** @internal */ c_velocity: Velocity;\n /** @internal */ c_position: Position;\n /** @internal */ m_force: Vec2;\n /** @internal */ m_torque: number;\n /** @internal */ m_linearVelocity: Vec2;\n /** @internal */ m_angularVelocity: number;\n /** @internal */ m_linearDamping: number;\n /** @internal */ m_angularDamping: number;\n /** @internal */ m_gravityScale: number;\n /** @internal */ m_sleepTime: number;\n /** @internal */ m_jointList: JointEdge | null;\n /** @internal */ m_contactList: ContactEdge | null;\n /** @internal */ m_fixtureList: Fixture | null;\n /** @internal */ m_prev: Body | null;\n /** @internal */ m_next: Body | null;\n /** @internal */ m_destroyed: boolean;\n\n /** @hidden Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @internal */\n constructor(world: World, def: BodyDef) {\n def = options(def, BodyDefDefault);\n\n _ASSERT && console.assert(Vec2.isValid(def.position));\n _ASSERT && console.assert(Vec2.isValid(def.linearVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angle));\n _ASSERT && console.assert(Number.isFinite(def.angularVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angularDamping) && def.angularDamping >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.linearDamping) && def.linearDamping >= 0.0);\n\n this.m_world = world;\n\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\n this.m_islandFlag = false;\n this.m_toiFlag = false;\n\n this.m_userData = def.userData;\n this.m_type = def.type;\n\n if (this.m_type == DYNAMIC) {\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n } else {\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n }\n\n // Rotational inertia about the center of mass.\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n // the body origin transform\n this.m_xf = Transform.identity();\n this.m_xf.p.setVec2(def.position);\n this.m_xf.q.setAngle(def.angle);\n\n // the swept motion for CCD\n this.m_sweep = new Sweep();\n this.m_sweep.setTransform(this.m_xf);\n\n // position and velocity correction\n this.c_velocity = new Velocity();\n this.c_position = new Position();\n\n this.m_force = Vec2.zero();\n this.m_torque = 0.0;\n\n this.m_linearVelocity = Vec2.clone(def.linearVelocity);\n this.m_angularVelocity = def.angularVelocity;\n\n this.m_linearDamping = def.linearDamping;\n this.m_angularDamping = def.angularDamping;\n this.m_gravityScale = def.gravityScale;\n\n this.m_sleepTime = 0.0;\n\n this.m_jointList = null;\n this.m_contactList = null;\n this.m_fixtureList = null;\n\n this.m_prev = null;\n this.m_next = null;\n\n this.m_destroyed = false;\n }\n\n /** @internal */\n _serialize(): object {\n const fixtures = [];\n for (let 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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): Body {\n const body = new Body(world, data);\n\n if (data.fixtures) {\n for (let i = data.fixtures.length - 1; i >= 0; i--) {\n const fixture = restore(Fixture, data.fixtures[i], body);\n body._addFixture(fixture);\n }\n }\n return body;\n }\n\n isWorldLocked(): boolean {\n return this.m_world && this.m_world.isLocked() ? true : false;\n }\n\n getWorld(): World {\n return this.m_world;\n }\n\n getNext(): Body | null {\n return this.m_next;\n }\n\n setUserData(data: any): void {\n this.m_userData = data;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n getFixtureList(): Fixture | null {\n return this.m_fixtureList;\n }\n\n getJointList(): JointEdge | null {\n return this.m_jointList;\n }\n\n /**\n * Warning: this list changes during the time step and you may miss some\n * collisions if you don't use ContactListener.\n */\n getContactList(): ContactEdge | null {\n return this.m_contactList;\n }\n\n isStatic(): boolean {\n return this.m_type == STATIC;\n }\n\n isDynamic(): boolean {\n return this.m_type == DYNAMIC;\n }\n\n isKinematic(): boolean {\n return this.m_type == KINEMATIC;\n }\n\n /**\n * This will alter the mass and velocity.\n */\n setStatic(): Body {\n this.setType(STATIC);\n return this;\n }\n\n setDynamic(): Body {\n this.setType(DYNAMIC);\n return this;\n }\n\n setKinematic(): Body {\n this.setType(KINEMATIC);\n return this;\n }\n\n /**\n * Get the type of the body.\n */\n getType(): BodyType {\n return this.m_type;\n }\n\n /**\n * Set the type of the body to \"static\", \"kinematic\" or \"dynamic\".\n * @param type The type of the body.\n */\n setType(type: BodyType): void {\n _ASSERT && console.assert(type === STATIC || type === KINEMATIC || type === DYNAMIC);\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type == type) {\n return;\n }\n\n this.m_type = type;\n\n this.resetMassData();\n\n if (this.m_type == STATIC) {\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_sweep.forward();\n this.synchronizeFixtures();\n }\n\n this.setAwake(true);\n\n this.m_force.setZero();\n this.m_torque = 0.0;\n\n // Delete the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n\n // Touch the proxies so that new contacts will be created (when appropriate)\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n for (let i = 0; i < f.m_proxyCount; ++i) {\n broadPhase.touchProxy(f.m_proxies[i].proxyId);\n }\n }\n }\n\n isBullet(): boolean {\n return this.m_bulletFlag;\n }\n\n /**\n * Should this body be treated like a bullet for continuous collision detection?\n */\n setBullet(flag: boolean): void {\n this.m_bulletFlag = !!flag;\n }\n\n isSleepingAllowed(): boolean {\n return this.m_autoSleepFlag;\n }\n\n setSleepingAllowed(flag: boolean): void {\n this.m_autoSleepFlag = !!flag;\n if (this.m_autoSleepFlag == false) {\n this.setAwake(true);\n }\n }\n\n isAwake(): boolean {\n return this.m_awakeFlag;\n }\n\n /**\n * Set the sleep state of the body. A sleeping body has very low CPU cost.\n *\n * @param flag Set to true to wake the body, false to put it to sleep.\n */\n setAwake(flag: boolean): void {\n if (flag) {\n this.m_awakeFlag = true;\n this.m_sleepTime = 0.0;\n } else {\n this.m_awakeFlag = false;\n this.m_sleepTime = 0.0;\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_force.setZero();\n this.m_torque = 0.0;\n }\n }\n\n isActive(): boolean {\n return this.m_activeFlag;\n }\n\n /**\n * Set the active state of the body. An inactive body is not simulated and\n * cannot be collided with or woken up. If you pass a flag of true, all fixtures\n * will be added to the broad-phase. If you pass a flag of false, all fixtures\n * will be removed from the broad-phase and all contacts will be destroyed.\n * Fixtures and joints are otherwise unaffected.\n *\n * You may continue to create/destroy fixtures and joints on inactive bodies.\n * Fixtures on an inactive body are implicitly inactive and will not participate\n * in collisions, ray-casts, or queries. Joints connected to an inactive body\n * are implicitly inactive. An inactive body is still owned by a World object\n * and remains\n */\n setActive(flag: boolean): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (flag == this.m_activeFlag) {\n return;\n }\n\n this.m_activeFlag = !!flag;\n\n if (this.m_activeFlag) {\n // Create all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.createProxies(broadPhase, this.m_xf);\n }\n\t\t // Contacts are created at the beginning of the next\n\t\t this.m_world.m_newFixture = true;\n } else {\n // Destroy all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.destroyProxies(broadPhase);\n }\n\n // Destroy the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n }\n }\n\n isFixedRotation(): boolean {\n return this.m_fixedRotationFlag;\n }\n\n /**\n * Set this body to have fixed rotation. This causes the mass to be reset.\n */\n setFixedRotation(flag: boolean): void {\n if (this.m_fixedRotationFlag == flag) {\n return;\n }\n\n this.m_fixedRotationFlag = !!flag;\n\n this.m_angularVelocity = 0.0;\n\n this.resetMassData();\n }\n\n /**\n * Get the world transform for the body's origin.\n */\n getTransform(): Transform {\n return this.m_xf;\n }\n\n /**\n * Set the position of the body's origin and rotation. Manipulating a body's\n * transform may cause non-physical behavior. Note: contacts are updated on the\n * next call to World.step.\n *\n * @param position The world position of the body's local origin.\n * @param angle The world rotation in radians.\n */\n setTransform(position: Vec2Value, angle: number): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n this.m_xf.setNum(position, angle);\n this.m_sweep.setTransform(this.m_xf);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let 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\n synchronizeTransform(): void {\n this.m_sweep.getTransform(this.m_xf, 1);\n }\n\n /**\n * Update fixtures in broad-phase.\n */\n synchronizeFixtures(): void {\n this.m_sweep.getTransform(xf, 0);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.synchronize(broadPhase, xf, this.m_xf);\n }\n }\n\n /**\n * Used in TOI.\n */\n advance(alpha: number): void {\n // Advance to the new safe time. This doesn't sync the broad-phase.\n this.m_sweep.advance(alpha);\n matrix.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\n /**\n * Get the world position for the body's origin.\n */\n getPosition(): Vec2 {\n return this.m_xf.p;\n }\n\n setPosition(p: Vec2Value): void {\n this.setTransform(p, this.m_sweep.a);\n }\n\n /**\n * Get the current world rotation angle in radians.\n */\n getAngle(): number {\n return this.m_sweep.a;\n }\n\n setAngle(angle: number): void {\n this.setTransform(this.m_xf.p, angle);\n }\n\n /**\n * Get the world position of the center of mass.\n */\n getWorldCenter(): Vec2 {\n return this.m_sweep.c;\n }\n\n /**\n * Get the local position of the center of mass.\n */\n getLocalCenter(): Vec2 {\n return this.m_sweep.localCenter;\n }\n\n /**\n * Get the linear velocity of the center of mass.\n *\n * @return the linear velocity of the center of mass.\n */\n getLinearVelocity(): Vec2 {\n return this.m_linearVelocity;\n }\n\n /**\n * Get the world linear velocity of a world point attached to this body.\n *\n * @param worldPoint A point in world coordinates.\n */\n getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2 {\n const localCenter = Vec2.sub(worldPoint, this.m_sweep.c);\n return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity,\n localCenter));\n }\n\n /**\n * Get the world velocity of a local point.\n *\n * @param localPoint A point in local coordinates.\n */\n getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2 {\n return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint));\n }\n\n /**\n * Set the linear velocity of the center of mass.\n *\n * @param v The new linear velocity of the center of mass.\n */\n setLinearVelocity(v: Vec2Value): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (Vec2.dot(v, v) > 0.0) {\n this.setAwake(true);\n }\n this.m_linearVelocity.setVec2(v);\n }\n\n /**\n * Get the angular velocity.\n *\n * @returns the angular velocity in radians/second.\n */\n getAngularVelocity(): number {\n return this.m_angularVelocity;\n }\n\n /**\n * Set the angular velocity.\n *\n * @param w The new angular velocity in radians/second.\n */\n setAngularVelocity(w: number): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (w * w > 0.0) {\n this.setAwake(true);\n }\n this.m_angularVelocity = w;\n }\n\n getLinearDamping(): number {\n return this.m_linearDamping;\n }\n\n setLinearDamping(linearDamping: number): void {\n this.m_linearDamping = linearDamping;\n }\n\n getAngularDamping(): number {\n return this.m_angularDamping;\n }\n\n setAngularDamping(angularDamping: number): void {\n this.m_angularDamping = angularDamping;\n }\n\n getGravityScale(): number {\n return this.m_gravityScale;\n }\n\n /**\n * Scale the gravity applied to this body.\n */\n setGravityScale(scale: number): void {\n this.m_gravityScale = scale;\n }\n\n /**\n * Get the total mass of the body.\n *\n * @returns The mass, usually in kilograms (kg).\n */\n getMass(): number {\n return this.m_mass;\n }\n\n /**\n * Get the rotational inertia of the body about the local origin.\n *\n * @return the rotational inertia, usually in kg-m^2.\n */\n getInertia(): number {\n return this.m_I + this.m_mass\n * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter);\n }\n\n /**\n * Copy the mass data of the body to data.\n */\n getMassData(data: MassData): void {\n data.mass = this.m_mass;\n data.I = this.getInertia();\n matrix.copyVec2(data.center, this.m_sweep.localCenter);\n }\n\n /**\n * This resets the mass properties to the sum of the mass properties of the\n * fixtures. This normally does not need to be called unless you called\n * SetMassData to override the mass and you later want to reset the mass.\n */\n resetMassData(): void {\n // Compute mass data from shapes. Each shape has its own density.\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n matrix.zeroVec2(this.m_sweep.localCenter);\n\n // Static and kinematic bodies have zero mass.\n if (this.isStatic() || this.isKinematic()) {\n matrix.copyVec2(this.m_sweep.c0, this.m_xf.p);\n matrix.copyVec2(this.m_sweep.c, this.m_xf.p);\n this.m_sweep.a0 = this.m_sweep.a;\n return;\n }\n\n _ASSERT && console.assert(this.isDynamic());\n\n // Accumulate mass over all fixtures.\n matrix.zeroVec2(localCenter);\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n if (f.m_density == 0.0) {\n continue;\n }\n\n const massData: MassData = {\n mass: 0,\n center: matrix.vec2(0, 0),\n I: 0\n };\n f.getMassData(massData);\n this.m_mass += massData.mass;\n matrix.plusScaleVec2(localCenter, massData.mass, massData.center);\n this.m_I += massData.I;\n }\n\n // Compute center of mass.\n if (this.m_mass > 0.0) {\n this.m_invMass = 1.0 / this.m_mass;\n matrix.scaleVec2(localCenter, this.m_invMass, localCenter);\n\n } else {\n // Force all dynamic bodies to have a positive mass.\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n }\n\n if (this.m_I > 0.0 && this.m_fixedRotationFlag == false) {\n // Center the inertia about the center of mass.\n this.m_I -= this.m_mass * matrix.dotVec2(localCenter, localCenter);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n\n } else {\n this.m_I = 0.0;\n this.m_invI = 0.0;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(localCenter, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Set the mass properties to override the mass properties of the fixtures. Note\n * that this changes the center of mass position. Note that creating or\n * destroying fixtures can also alter the mass. This function has no effect if\n * the body isn't dynamic.\n *\n * @param massData The mass properties.\n */\n setMassData(massData: MassData): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n this.m_mass = massData.mass;\n if (this.m_mass <= 0.0) {\n this.m_mass = 1.0;\n }\n\n this.m_invMass = 1.0 / this.m_mass;\n\n if (massData.I > 0.0 && this.m_fixedRotationFlag == false) {\n this.m_I = massData.I - this.m_mass * matrix.dotVec2(massData.center, massData.center);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(massData.center, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Apply a force at a world point. If the force is not applied at the center of\n * mass, it will generate a torque and affect the angular velocity. This wakes\n * up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyForce(force: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping.\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), force);\n }\n }\n\n /**\n * Apply a force to the center of mass. This wakes up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param wake Also wake up the body\n */\n applyForceToCenter(force: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n }\n }\n\n /**\n * Apply a torque. This affects the angular velocity without affecting the\n * linear velocity of the center of mass. This wakes up the body.\n *\n * @param torque About the z-axis (out of the screen), usually in N-m.\n * @param wake Also wake up the body\n */\n applyTorque(torque: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_torque += torque;\n }\n }\n\n /**\n * Apply an impulse at a point. This immediately modifies the velocity. It also\n * modifies the angular velocity if the point of application is not at the\n * center of mass. This wakes up the body.\n *\n * @param impulse The world impulse vector, usually in N-seconds or kg-m/s.\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n\n // Don't accumulate velocity if the body is sleeping\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(point, this.m_sweep.c), impulse);\n }\n }\n\n /**\n * Apply an angular impulse.\n *\n * @param impulse The angular impulse in units of kg*m*m/s\n * @param wake Also wake up the body\n */\n applyAngularImpulse(impulse: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate velocity if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_angularVelocity += this.m_invI * impulse;\n }\n }\n\n /**\n * This is used to test if two bodies should collide.\n * \n * Bodies do not collide when:\n * - Neither of them is dynamic\n * - They are connected by a joint with collideConnected == false\n */\n shouldCollide(that: Body): boolean {\n // At least one body should be dynamic.\n if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) {\n return false;\n }\n // Does a joint prevent collision?\n for (let 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\n /** @internal Used for deserialize. */\n _addFixture(fixture: Fixture): Fixture {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.createProxies(broadPhase, this.m_xf);\n }\n\n fixture.m_next = this.m_fixtureList;\n this.m_fixtureList = fixture;\n\n // Adjust mass properties if needed.\n if (fixture.m_density > 0.0) {\n this.resetMassData();\n }\n\n // Let the world know we have a new fixture. This will cause new contacts\n // to be created at the beginning of the next time step.\n this.m_world.m_newFixture = true;\n\n return fixture;\n }\n\n /**\n * Creates a fixture and attach it to this body.\n *\n * If the density is non-zero, this function automatically updates the mass of\n * the body.\n *\n * Contacts are not created until the next time step.\n *\n * Warning: This function is locked during callbacks.\n */\n createFixture(def: FixtureDef): Fixture;\n createFixture(shape: Shape, opt?: FixtureOpt): Fixture;\n createFixture(shape: Shape, density?: number): Fixture;\n // tslint:disable-next-line:typedef\n createFixture(shape, fixdef?) {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n const fixture = new Fixture(this, shape, fixdef);\n this._addFixture(fixture);\n return fixture;\n }\n\n /**\n * Destroy a fixture. This removes the fixture from the broad-phase and destroys\n * all contacts associated with this fixture. This will automatically adjust the\n * mass of the body if the body is dynamic and the fixture has positive density.\n * All fixtures attached to a body are implicitly destroyed when the body is\n * destroyed.\n *\n * Warning: This function is locked during callbacks.\n *\n * @param fixture The fixture to be removed.\n */\n destroyFixture(fixture: Fixture): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n _ASSERT && console.assert(fixture.m_body == this);\n\n // Remove the fixture from this body's singly linked list.\n let found = false;\n if (this.m_fixtureList === fixture) {\n this.m_fixtureList = fixture.m_next;\n found = true;\n\n } else {\n let node = this.m_fixtureList;\n while (node != null) {\n if (node.m_next === fixture) {\n node.m_next = fixture.m_next;\n found = true;\n break;\n }\n node = node.m_next;\n }\n }\n\n // You tried to remove a shape that is not attached to this body.\n _ASSERT && console.assert(found);\n\n // Destroy any contacts associated with the fixture.\n let edge = this.m_contactList;\n while (edge) {\n const c = edge.contact;\n edge = edge.next;\n\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n\n if (fixture == fixtureA || fixture == fixtureB) {\n // This destroys the contact and removes it from\n // this body's contact list.\n this.m_world.destroyContact(c);\n }\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.destroyProxies(broadPhase);\n }\n\n fixture.m_body = null;\n fixture.m_next = null;\n\n this.m_world.publish(\"remove-fixture\", fixture);\n\n // Reset the mass data.\n this.resetMassData();\n }\n\n /**\n * Get the corresponding world point of a local point.\n */\n getWorldPoint(localPoint: Vec2Value): Vec2 {\n return Transform.mulVec2(this.m_xf, localPoint);\n }\n\n /**\n * Get the corresponding world vector of a local vector.\n */\n getWorldVector(localVector: Vec2Value): Vec2 {\n return Rot.mulVec2(this.m_xf.q, localVector);\n }\n\n /**\n * Gets the corresponding local point of a world point.\n */\n getLocalPoint(worldPoint: Vec2Value): Vec2 {\n return Transform.mulTVec2(this.m_xf, worldPoint);\n }\n\n /**\n * Gets the corresponding local vector of a world vector.\n */\n getLocalVector(worldVector: Vec2Value): Vec2 {\n return Rot.mulTVec2(this.m_xf.q, worldVector);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2, Vec2Value } from \"../common/Vec2\";\nimport type { Body } from \"./Body\";\nimport { TimeStep } from \"./Solver\";\nimport { Style } from \"../util/Testbed\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/**\n * A joint edge is used to connect bodies and joints together in a joint graph\n * where each body is a node and each joint is an edge. A joint edge belongs to\n * a doubly linked list maintained in each attached body. Each joint has two\n * joint nodes, one for each attached body.\n */\nexport class JointEdge {\n /**\n * provides quick access to the other body attached.\n */\n other: Body | null = null;\n /**\n * the joint\n */\n joint: Joint | null = null;\n /**\n * prev the previous joint edge in the body's joint list\n */\n prev: JointEdge | null = null;\n /**\n * the next joint edge in the body's joint list\n */\n next: JointEdge | null = null;\n}\n\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointOpt {\n /**\n * Use this to attach application specific data to your joints.\n */\n userData?: any;\n /**\n * Set this flag to true if the attached bodies\n * should collide.\n */\n collideConnected?: boolean;\n}\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointDef extends JointOpt {\n /**\n * The first attached body.\n */\n bodyA: Body;\n /**\n * The second attached body.\n */\n bodyB: Body;\n}\n\n/** @internal */ const DEFAULTS = {\n userData : null,\n collideConnected : false\n};\n\n/**\n * The base joint class. Joints are used to constraint two bodies together in\n * various fashions. Some joints also feature limits and motors.\n */\nexport abstract class Joint {\n\n /** @internal */ m_type: string = \"unknown-joint\";\n\n /** @internal */ m_bodyA: Body;\n /** @internal */ m_bodyB: Body;\n\n /** @internal */ m_collideConnected: boolean;\n\n /** @internal */ m_prev: Joint | null = null;\n /** @internal */ m_next: Joint | null = null;\n\n /** @internal */ m_edgeA: JointEdge = new JointEdge();\n /** @internal */ m_edgeB: JointEdge = new JointEdge();\n\n /** @internal */ m_islandFlag: boolean = false;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(def: JointDef);\n constructor(def: JointOpt, bodyA: Body, bodyB: Body);\n constructor(def: JointDef | JointOpt, bodyA?: Body, bodyB?: Body) {\n bodyA = \"bodyA\" in def ? def.bodyA : bodyA;\n bodyB = \"bodyB\" in def ? def.bodyB : bodyB;\n\n _ASSERT && console.assert(!!bodyA);\n _ASSERT && console.assert(!!bodyB);\n _ASSERT && console.assert(bodyA != bodyB);\n\n this.m_bodyA = bodyA!;\n this.m_bodyB = bodyB!;\n\n this.m_collideConnected = !!def.collideConnected;\n this.m_userData = def.userData;\n }\n\n /**\n * Short-cut function to determine if either body is inactive.\n */\n isActive(): boolean {\n return this.m_bodyA.isActive() && this.m_bodyB.isActive();\n }\n\n /**\n * Get the type of the concrete joint.\n */\n getType(): string {\n return this.m_type;\n }\n\n /**\n * Get the first body attached to this joint.\n */\n getBodyA(): Body {\n return this.m_bodyA;\n }\n\n /**\n * Get the second body attached to this joint.\n */\n getBodyB(): Body {\n return this.m_bodyB;\n }\n\n /**\n * Get the next joint the world joint list.\n */\n getNext(): Joint {\n return this.m_next;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get collide connected. Note: modifying the collide connect flag won't work\n * correctly because the flag is only checked when fixture AABBs begin to\n * overlap.\n */\n getCollideConnected(): boolean {\n return this.m_collideConnected;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n abstract getAnchorA(): Vec2;\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n abstract getAnchorB(): Vec2;\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n abstract getReactionForce(inv_dt: number): Vec2;\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n abstract getReactionTorque(inv_dt: number): number;\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {}\n\n abstract initVelocityConstraints(step: TimeStep): void;\n\n abstract solveVelocityConstraints(step: TimeStep): void;\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n abstract solvePositionConstraints(step: TimeStep): boolean;\n\n /**\n * @hidden @experimental\n * Update joint with new props.\n */\n abstract _reset(def: Partial): void;\n\n /**\n * @internal @deprecated\n * Temporary for backward compatibility, will be removed.\n */\n _resetAnchors(def: any): void {\n return this._reset(def);\n }\n}\n","/** @hidden */\nexport const stats = {\n gjkCalls: 0,\n gjkIters: 0,\n gjkMaxIters: 0,\n\n toiTime: 0,\n toiMaxTime: 0,\n toiCalls: 0,\n toiIters: 0,\n toiMaxIters: 0,\n toiRootIters: 0,\n toiMaxRootIters: 0,\n\n toString(newline?: string): string {\n newline = typeof newline === \"string\" ? newline : \"\\n\";\n let string = \"\";\n // tslint:disable-next-line:no-for-in\n for (const name in this) {\n if (typeof this[name] !== \"function\" && typeof this[name] !== \"object\") {\n string += name + \": \" + this[name] + newline;\n }\n }\n return string;\n }\n};\n","/** @internal */\nexport const now = function(): number {\n return Date.now();\n};\n\n/** @internal */\nexport const diff = function(time: number): number {\n return Date.now() - time;\n};\n\n/** @internal */\nexport default {\n now,\n diff,\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport { Shape } from \"./Shape\";\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Transform, TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const e12 = matrix.vec2(0, 0);\n/** @internal */ const e13 = matrix.vec2(0, 0);\n/** @internal */ const e23 = matrix.vec2(0, 0);\n/** @internal */ const temp1 = matrix.vec2(0, 0);\n/** @internal */ const temp2 = matrix.vec2(0, 0);\n\n/**\n * GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates.\n */\n\nstats.gjkCalls = 0;\nstats.gjkIters = 0;\nstats.gjkMaxIters = 0;\n\n/**\n * Input for Distance. You have to option to use the shape radii in the\n * computation. Even\n */\nexport class DistanceInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n useRadii = false;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n this.useRadii = false;\n }\n}\n\n/**\n * Output for Distance.\n */\nexport class DistanceOutput {\n /** closest point on shapeA */\n pointA = matrix.vec2(0, 0);\n /** closest point on shapeB */\n pointB = matrix.vec2(0, 0);\n distance = 0;\n /** iterations number of GJK iterations used */\n iterations = 0;\n recycle() {\n matrix.zeroVec2(this.pointA);\n matrix.zeroVec2(this.pointB);\n this.distance = 0;\n this.iterations = 0;\n }\n}\n\n/**\n * Used to warm start Distance. Set count to zero on first call.\n */\nexport class SimplexCache {\n /** length or area */\n metric: number = 0;\n /** vertices on shape A */\n indexA: number[] = [];\n /** vertices on shape B */\n indexB: number[] = [];\n count: number = 0;\n recycle() {\n this.metric = 0;\n this.indexA.length = 0;\n this.indexB.length = 0;\n this.count = 0;\n }\n}\n\n/**\n * Compute the closest points between two shapes. Supports any combination of:\n * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On\n * the first call set SimplexCache.count to zero.\n */\nexport const Distance = function (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void {\n ++stats.gjkCalls;\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n // Initialize the simplex.\n // const simplex = new Simplex();\n simplex.recycle();\n simplex.readCache(cache, proxyA, xfA, proxyB, xfB);\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n const k_maxIters = Settings.maxDistanceIterations;\n\n // These store the vertices of the last simplex so that we\n // can check for duplicates and prevent cycling.\n const saveA = [];\n const saveB = []; // int[3]\n let saveCount = 0;\n\n // Main iteration loop.\n let iter = 0;\n while (iter < k_maxIters) {\n // Copy simplex so we can identify duplicates.\n saveCount = simplex.m_count;\n for (let i = 0; i < saveCount; ++i) {\n saveA[i] = vertices[i].indexA;\n saveB[i] = vertices[i].indexB;\n }\n\n simplex.solve();\n\n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count === 3) {\n break;\n }\n\n // Get search direction.\n const d = simplex.getSearchDirection();\n\n // Ensure the search direction is numerically fit.\n if (matrix.lengthSqrVec2(d) < EPSILON * EPSILON) {\n // The origin is probably contained by a line segment\n // or triangle. Thus the shapes are overlapped.\n\n // We can't return zero here even though there may be overlap.\n // In case the simplex is a point, segment, or triangle it is difficult\n // to determine if the origin is contained in the CSO or very close to it.\n break;\n }\n\n // Compute a tentative new simplex vertex using support points.\n const vertex = vertices[simplex.m_count]; // SimplexVertex\n\n vertex.indexA = proxyA.getSupport(matrix.derotVec2(temp, xfA.q, matrix.scaleVec2(temp, -1, d)));\n matrix.transformVec2(vertex.wA, xfA, proxyA.getVertex(vertex.indexA));\n\n vertex.indexB = proxyB.getSupport(matrix.derotVec2(temp, xfB.q, d));\n matrix.transformVec2(vertex.wB, xfB, proxyB.getVertex(vertex.indexB));\n\n matrix.subVec2(vertex.w, vertex.wB, vertex.wA);\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n ++stats.gjkIters;\n\n // Check for duplicate support points. This is the main termination\n // criteria.\n let duplicate = false;\n for (let i = 0; i < saveCount; ++i) {\n if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) {\n duplicate = true;\n break;\n }\n }\n\n // If we found a duplicate support point we must exit to avoid cycling.\n if (duplicate) {\n break;\n }\n\n // New vertex is ok and needed.\n ++simplex.m_count;\n }\n\n stats.gjkMaxIters = math_max(stats.gjkMaxIters, iter);\n\n // Prepare output.\n simplex.getWitnessPoints(output.pointA, output.pointB);\n output.distance = matrix.distVec2(output.pointA, output.pointB);\n output.iterations = iter;\n\n // Cache the simplex.\n simplex.writeCache(cache);\n\n // Apply radii if requested.\n if (input.useRadii) {\n const rA = proxyA.m_radius;\n const rB = proxyB.m_radius;\n\n if (output.distance > rA + rB && output.distance > EPSILON) {\n // Shapes are still no overlapped.\n // Move the witness points to the outer surface.\n output.distance -= rA + rB;\n matrix.subVec2(normal, output.pointB, output.pointA);\n matrix.normalizeVec2(normal);\n matrix.plusScaleVec2(output.pointA, rA, normal);\n matrix.minusScaleVec2(output.pointB, rB, normal);\n } else {\n // Shapes are overlapped when radii are considered.\n // Move the witness points to the middle.\n const p = matrix.subVec2(temp, output.pointA, output.pointB);\n matrix.copyVec2(output.pointA, p);\n matrix.copyVec2(output.pointB, p);\n output.distance = 0.0;\n }\n }\n};\n\n/**\n * A distance proxy is used by the GJK algorithm. It encapsulates any shape.\n */\nexport class DistanceProxy {\n /** @internal */ m_vertices: Vec2Value[] = [];\n // todo: remove this?\n /** @internal */ m_count = 0;\n /** @internal */ m_radius = 0;\n\n recycle() {\n this.m_vertices.length = 0;\n this.m_count = 0;\n this.m_radius = 0;\n }\n\n /**\n * Get the vertex count.\n */\n getVertexCount(): number {\n return this.m_count;\n }\n\n /**\n * Get a vertex by index. Used by Distance.\n */\n getVertex(index: number): Vec2Value {\n _ASSERT && console.assert(0 <= index && index < this.m_count);\n return this.m_vertices[index];\n }\n\n /**\n * Get the supporting vertex index in the given direction.\n */\n getSupport(d: Vec2Value): number {\n let bestIndex = -1;\n let bestValue = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const value = matrix.dotVec2(this.m_vertices[i], d);\n if (value > bestValue) {\n bestIndex = i;\n bestValue = value;\n }\n }\n return bestIndex;\n }\n\n /**\n * Get the supporting vertex in the given direction.\n */\n getSupportVertex(d: Vec2Value): Vec2Value {\n return this.m_vertices[this.getSupport(d)];\n }\n\n /**\n * Initialize the proxy using the given shape. The shape must remain in scope\n * while the proxy is in use.\n */\n set(shape: Shape, index: number): void {\n // TODO remove, use shape instead\n _ASSERT && console.assert(typeof shape.computeDistanceProxy === \"function\");\n shape.computeDistanceProxy(this, index);\n }\n\n /**\n * Initialize the proxy using a vertex cloud and radius. The vertices\n * must remain in scope while the proxy is in use.\n */\n setVertices(vertices: Vec2Value[], count: number, radius: number) {\n this.m_vertices = vertices;\n this.m_count = count;\n this.m_radius = radius;\n }\n}\n\nclass SimplexVertex {\n /** support point in proxyA */\n wA = matrix.vec2(0, 0);\n /** wA index */\n indexA = 0;\n\n /** support point in proxyB */\n wB = matrix.vec2(0, 0);\n /** wB index */\n indexB = 0;\n\n /** wB - wA; */\n w = matrix.vec2(0, 0);\n /** barycentric coordinate for closest point */\n a = 0;\n\n recycle() {\n this.indexA = 0;\n this.indexB = 0;\n matrix.zeroVec2(this.wA);\n matrix.zeroVec2(this.wB);\n matrix.zeroVec2(this.w);\n this.a = 0;\n }\n set(v: SimplexVertex): void {\n this.indexA = v.indexA;\n this.indexB = v.indexB;\n matrix.copyVec2(this.wA, v.wA);\n matrix.copyVec2(this.wB, v.wB);\n matrix.copyVec2(this.w, v.w);\n this.a = v.a;\n }\n}\n\n/** @internal */ const searchDirection_reuse = matrix.vec2(0, 0);\n/** @internal */ const closestPoint_reuse = matrix.vec2(0, 0); \n\nclass Simplex {\n m_v1 = new SimplexVertex();\n m_v2 = new SimplexVertex();\n m_v3 = new SimplexVertex();\n m_v = [this.m_v1, this.m_v2, this.m_v3];\n m_count: number;\n recycle() {\n this.m_v1.recycle();\n this.m_v2.recycle();\n this.m_v3.recycle();\n this.m_count = 0;\n }\n\n /** @internal */ toString(): string {\n if (this.m_count === 3) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y,\n this.m_v3.a, this.m_v3.wA.x, this.m_v3.wA.y, this.m_v3.wB.x, this.m_v3.wB.y\n ].toString();\n\n } else if (this.m_count === 2) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y\n ].toString();\n\n } else if (this.m_count === 1) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y\n ].toString();\n\n } else {\n return \"+\" + this.m_count;\n }\n }\n\n readCache(cache: SimplexCache, proxyA: DistanceProxy, transformA: TransformValue, proxyB: DistanceProxy, transformB: TransformValue): void {\n _ASSERT && console.assert(cache.count <= 3);\n\n // Copy data from cache.\n this.m_count = cache.count;\n for (let i = 0; i < this.m_count; ++i) {\n const v = this.m_v[i];\n v.indexA = cache.indexA[i];\n v.indexB = cache.indexB[i];\n const wALocal = proxyA.getVertex(v.indexA);\n const wBLocal = proxyB.getVertex(v.indexB);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 0.0;\n }\n\n // Compute the new simplex metric, if it is substantially different than\n // old metric then flush the simplex.\n if (this.m_count > 1) {\n const metric1 = cache.metric;\n const metric2 = this.getMetric();\n if (metric2 < 0.5 * metric1 || 2.0 * metric1 < metric2 || metric2 < EPSILON) {\n // Reset the simplex.\n this.m_count = 0;\n }\n }\n\n // If the cache is empty or invalid...\n if (this.m_count === 0) {\n const v = this.m_v[0];\n v.indexA = 0;\n v.indexB = 0;\n const wALocal = proxyA.getVertex(0);\n const wBLocal = proxyB.getVertex(0);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 1.0;\n this.m_count = 1;\n }\n }\n\n writeCache(cache: SimplexCache): void {\n cache.metric = this.getMetric();\n cache.count = this.m_count;\n for (let i = 0; i < this.m_count; ++i) {\n cache.indexA[i] = this.m_v[i].indexA;\n cache.indexB[i] = this.m_v[i].indexB;\n }\n }\n\n getSearchDirection(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 1:\n return matrix.setVec2(searchDirection_reuse, -v1.w.x, -v1.w.y);\n\n case 2: {\n matrix.subVec2(e12, v2.w, v1.w);\n const sgn = -matrix.crossVec2Vec2(e12, v1.w);\n if (sgn > 0.0) {\n // Origin is left of e12.\n return matrix.setVec2(searchDirection_reuse, -e12.y, e12.x);\n } else {\n // Origin is right of e12.\n return matrix.setVec2(searchDirection_reuse, e12.y, -e12.x);\n }\n }\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(searchDirection_reuse);\n }\n }\n\n getClosestPoint(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n\n case 1:\n return matrix.copyVec2(closestPoint_reuse, v1.w);\n\n case 2:\n return matrix.combine2Vec2(closestPoint_reuse, v1.a, v1.w, v2.a, v2.w);\n\n case 3:\n return matrix.zeroVec2(closestPoint_reuse);\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n }\n }\n\n getWitnessPoints(pA: Vec2Value, pB: Vec2Value): void {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n break;\n\n case 1:\n matrix.copyVec2(pA, v1.wA);\n matrix.copyVec2(pB, v1.wB);\n break;\n\n case 2:\n matrix.combine2Vec2(pA, v1.a, v1.wA, v2.a, v2.wA);\n matrix.combine2Vec2(pB, v1.a, v1.wB, v2.a, v2.wB);\n break;\n\n case 3:\n matrix.combine3Vec2(pA, v1.a, v1.wA, v2.a, v2.wA, v3.a, v3.wA);\n matrix.copyVec2(pB, pA);\n break;\n\n default:\n _ASSERT && console.assert(false);\n break;\n }\n }\n\n getMetric(): number {\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return 0.0;\n\n case 1:\n return 0.0;\n\n case 2:\n return matrix.distVec2(this.m_v1.w, this.m_v2.w);\n\n case 3:\n return matrix.crossVec2Vec2(\n matrix.subVec2(temp1, this.m_v2.w, this.m_v1.w),\n matrix.subVec2(temp2, this.m_v3.w, this.m_v1.w),\n );\n\n default:\n _ASSERT && console.assert(false);\n return 0.0;\n }\n }\n\n solve(): void {\n switch (this.m_count) {\n case 1:\n break;\n\n case 2:\n this.solve2();\n break;\n\n case 3:\n this.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n }\n\n// Solve a line segment using barycentric coordinates.\n//\n// p = a1 * w1 + a2 * w2\n// a1 + a2 = 1\n//\n// The vector from the origin to the closest point on the line is\n// perpendicular to the line.\n// e12 = w2 - w1\n// dot(p, e) = 0\n// a1 * dot(w1, e) + a2 * dot(w2, e) = 0\n//\n// 2-by-2 linear system\n// [1 1 ][a1] = [1]\n// [w1.e12 w2.e12][a2] = [0]\n//\n// Define\n// d12_1 = dot(w2, e12)\n// d12_2 = -dot(w1, e12)\n// d12 = d12_1 + d12_2\n//\n// Solution\n// a1 = d12_1 / d12\n// a2 = d12_2 / d12\n solve2(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n matrix.subVec2(e12, w2, w1);\n\n // w1 region\n const d12_2 = -matrix.dotVec2(w1, e12);\n if (d12_2 <= 0.0) {\n // a2 <= 0, so we clamp it to 0\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // w2 region\n const d12_1 = matrix.dotVec2(w2, e12);\n if (d12_1 <= 0.0) {\n // a1 <= 0, so we clamp it to 0\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // Must be in e12 region.\n const inv_d12 = 1.0 / (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\n// Possible regions:\n// - points[2]\n// - edge points[0]-points[2]\n// - edge points[1]-points[2]\n// - inside the triangle\n solve3(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n const w3 = this.m_v3.w;\n\n // Edge12\n // [1 1 ][a1] = [1]\n // [w1.e12 w2.e12][a2] = [0]\n // a3 = 0\n matrix.subVec2(e12, w2, w1);\n const w1e12 = matrix.dotVec2(w1, e12);\n const w2e12 = matrix.dotVec2(w2, e12);\n const d12_1 = w2e12;\n const d12_2 = -w1e12;\n\n // Edge13\n // [1 1 ][a1] = [1]\n // [w1.e13 w3.e13][a3] = [0]\n // a2 = 0\n matrix.subVec2(e13, w3, w1);\n const w1e13 = matrix.dotVec2(w1, e13);\n const w3e13 = matrix.dotVec2(w3, e13);\n const d13_1 = w3e13;\n const d13_2 = -w1e13;\n\n // Edge23\n // [1 1 ][a2] = [1]\n // [w2.e23 w3.e23][a3] = [0]\n // a1 = 0\n matrix.subVec2(e23, w3, w2);\n const w2e23 = matrix.dotVec2(w2, e23);\n const w3e23 = matrix.dotVec2(w3, e23);\n const d23_1 = w3e23;\n const d23_2 = -w2e23;\n\n // Triangle123\n const n123 = matrix.crossVec2Vec2(e12, e13);\n\n const d123_1 = n123 * matrix.crossVec2Vec2(w2, w3);\n const d123_2 = n123 * matrix.crossVec2Vec2(w3, w1);\n const d123_3 = n123 * matrix.crossVec2Vec2(w1, w2);\n\n // w1 region\n if (d12_2 <= 0.0 && d13_2 <= 0.0) {\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // e12\n if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) {\n const inv_d12 = 1.0 / (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\n // e13\n if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) {\n const inv_d13 = 1.0 / (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\n // w2 region\n if (d12_1 <= 0.0 && d23_2 <= 0.0) {\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // w3 region\n if (d13_1 <= 0.0 && d23_1 <= 0.0) {\n this.m_v3.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v3);\n return;\n }\n\n // e23\n if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) {\n const inv_d23 = 1.0 / (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\n // Must be in triangle123\n const inv_d123 = 1.0 / (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}\n\n/** @internal */ const simplex = new Simplex();\n\n/** @internal */ const input = new DistanceInput();\n/** @internal */ const cache = new SimplexCache();\n/** @internal */ const output = new DistanceOutput();\n\n/**\n * Determine if two generic shapes overlap.\n */\nexport const testOverlap = function (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue): boolean {\n input.recycle();\n input.proxyA.set(shapeA, indexA);\n input.proxyB.set(shapeB, indexB);\n matrix.copyTransform(input.transformA, xfA);\n matrix.copyTransform(input.transformB, xfB);\n input.useRadii = true;\n\n output.recycle();\n cache.recycle();\n\n Distance(output, cache, input);\n\n return output.distance < 10.0 * EPSILON;\n};\n\n// legacy exports\nDistance.testOverlap = testOverlap;\nDistance.Input = DistanceInput;\nDistance.Output = DistanceOutput;\nDistance.Proxy = DistanceProxy;\nDistance.Cache = SimplexCache;\n\n/**\n * Input parameters for ShapeCast\n */\nexport class ShapeCastInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n readonly translationB = Vec2.zero();\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n matrix.zeroVec2(this.translationB);\n }\n}\n\n/**\n * Output results for b2ShapeCast\n */\nexport class ShapeCastOutput {\n point: Vec2 = Vec2.zero();\n normal: Vec2 = Vec2.zero();\n lambda = 1.0;\n iterations = 0;\n}\n\n/**\n * Perform a linear shape cast of shape B moving and shape A fixed. Determines\n * the hit point, normal, and translation fraction.\n * \n * @returns true if hit, false if there is no hit or an initial overlap\n */\n//\n// GJK-raycast\n// Algorithm by Gino van den Bergen.\n// \"Smooth Mesh Contacts with GJK\" in Game Physics Pearls. 2010\nexport const ShapeCast = function(output: ShapeCastOutput, input: ShapeCastInput): boolean {\n output.iterations = 0;\n output.lambda = 1.0;\n output.normal.setZero();\n output.point.setZero();\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n\n const radiusA = math_max(proxyA.m_radius, Settings.polygonRadius);\n const radiusB = math_max(proxyB.m_radius, Settings.polygonRadius);\n const radius = radiusA + radiusB;\n\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n const r = input.translationB;\n const n = Vec2.zero();\n let lambda = 0.0;\n\n // Initial simplex\n const simplex = new Simplex();\n simplex.m_count = 0;\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n\n // Get support point in -r direction\n let indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(r)));\n let wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n let indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, r));\n let wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const v = Vec2.sub(wA, wB);\n\n // Sigma is the target distance between polygons\n const sigma = math_max(Settings.polygonRadius, radius - Settings.polygonRadius);\n const tolerance = 0.5 * Settings.linearSlop;\n\n // Main iteration loop.\n const k_maxIters = 20;\n let iter = 0;\n while (iter < k_maxIters && v.length() - sigma > tolerance) {\n _ASSERT && console.assert(simplex.m_count < 3);\n\n output.iterations += 1;\n\n // Support in direction -v (A - B)\n indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(v)));\n wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, v));\n wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const p = Vec2.sub(wA, wB);\n\n // -v is a normal at p\n v.normalize();\n\n // Intersect ray with plane\n const vp = Vec2.dot(v, p);\n const vr = Vec2.dot(v, r);\n if (vp - sigma > lambda * vr) {\n if (vr <= 0.0) {\n return false;\n }\n\n lambda = (vp - sigma) / vr;\n if (lambda > 1.0) {\n return false;\n }\n\n n.setMul(-1, v);\n simplex.m_count = 0;\n }\n\n // Reverse simplex since it works with B - A.\n // Shift by lambda * r because we want the closest point to the current clip point.\n // Note that the support point p is not shifted because we want the plane equation\n // to be formed in unshifted space.\n const vertex = vertices[simplex.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.0;\n simplex.m_count += 1;\n\n switch (simplex.m_count) {\n case 1:\n break;\n\n case 2:\n simplex.solve2();\n break;\n\n case 3:\n simplex.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n \n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count == 3) {\n // Overlap\n return false;\n }\n\n // Get search direction.\n v.setVec2(simplex.getClosestPoint());\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n }\n\n if (iter == 0) {\n // Initial overlap\n return false;\n\t}\n\n // Prepare output.\n const pointA = Vec2.zero();\n const pointB = Vec2.zero();\n simplex.getWitnessPoints(pointB, pointA);\n\n if (v.lengthSquared() > 0.0) {\n n.setMul(-1, v);\n n.normalize();\n }\n\n output.point = Vec2.combine(1, pointA, radiusA, n);\n output.normal = n;\n output.lambda = lambda;\n output.iterations = iter;\n return true;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport Timer from \"../util/Timer\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Distance, DistanceInput, DistanceOutput, DistanceProxy, SimplexCache } from \"./Distance\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\n/**\n * Input parameters for TimeOfImpact.\n */\nexport class TOIInput {\n proxyA = new DistanceProxy();\n proxyB = new DistanceProxy();\n sweepA = new Sweep();\n sweepB = new Sweep();\n /** defines sweep interval [0, tMax] */\n tMax: number;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.sweepA.recycle();\n this.sweepB.recycle();\n this.tMax = -1;\n }\n}\n\nexport enum TOIOutputState {\n e_unset = -1,\n e_unknown = 0,\n e_failed = 1,\n e_overlapped = 2,\n e_touching = 3,\n e_separated = 4,\n}\n\n/**\n * Output parameters for TimeOfImpact.\n */\nexport class TOIOutput {\n state = TOIOutputState.e_unset;\n t = -1;\n recycle() {\n this.state = TOIOutputState.e_unset;\n this.t = -1;\n }\n}\n\nstats.toiTime = 0;\nstats.toiMaxTime = 0;\nstats.toiCalls = 0;\nstats.toiIters = 0;\nstats.toiMaxIters = 0;\nstats.toiRootIters = 0;\nstats.toiMaxRootIters = 0;\n\n/** @internal */ const distanceInput = new DistanceInput();\n/** @internal */ const distanceOutput = new DistanceOutput();\n// this is passed to Distance and SeparationFunction\n/** @internal */ const cache = new SimplexCache();\n\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const axisA = matrix.vec2(0, 0);\n/** @internal */ const axisB = matrix.vec2(0, 0);\n/** @internal */ const localPointA = matrix.vec2(0, 0);\n/** @internal */ const localPointB = matrix.vec2(0, 0);\n\n\n/**\n * Compute the upper bound on time before two shapes penetrate. Time is\n * represented as a fraction between [0,tMax]. This uses a swept separating axis\n * and may miss some intermediate, non-tunneling collisions. If you change the\n * time interval, you should call this function again.\n *\n * Note: use Distance to compute the contact point and normal at the time of\n * impact.\n *\n * CCD via the local separating axis method. This seeks progression by computing\n * the largest time at which separation is maintained.\n */\nexport const TimeOfImpact = function (output: TOIOutput, input: TOIInput): void {\n const timer = Timer.now();\n\n ++stats.toiCalls;\n\n output.state = TOIOutputState.e_unknown;\n output.t = input.tMax;\n\n const proxyA = input.proxyA; // DistanceProxy\n const proxyB = input.proxyB; // DistanceProxy\n\n const sweepA = input.sweepA; // Sweep\n const sweepB = input.sweepB; // Sweep\n\n // Large rotations can make the root finder fail, so we normalize the\n // sweep angles.\n sweepA.normalize();\n sweepB.normalize();\n\n const tMax = input.tMax;\n\n const totalRadius = proxyA.m_radius + proxyB.m_radius;\n const target = math_max(Settings.linearSlop, totalRadius - 3.0 * Settings.linearSlop);\n const tolerance = 0.25 * Settings.linearSlop;\n _ASSERT && console.assert(target > tolerance);\n\n let t1 = 0.0;\n const k_maxIterations = Settings.maxTOIIterations;\n let iter = 0;\n\n // Prepare input for distance query.\n // const cache = new SimplexCache();\n cache.recycle();\n\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\n // The outer loop progressively attempts to compute new separating axes.\n // This loop terminates when an axis is repeated (no progress is made).\n while (true) {\n sweepA.getTransform(xfA, t1);\n sweepB.getTransform(xfB, t1);\n\n // Get the distance between shapes. We can also use the results\n // to get a separating axis.\n matrix.copyTransform(distanceInput.transformA, xfA);\n matrix.copyTransform(distanceInput.transformB, xfB);\n Distance(distanceOutput, cache, distanceInput);\n\n // If the shapes are overlapped, we give up on continuous collision.\n if (distanceOutput.distance <= 0.0) {\n // Failure!\n output.state = TOIOutputState.e_overlapped;\n output.t = 0.0;\n break;\n }\n\n if (distanceOutput.distance < target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n break;\n }\n\n // Initialize the separating axis.\n separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1);\n\n // if (false) {\n // // Dump the curve seen by the root finder\n // const N = 100;\n // const dx = 1.0 / N;\n // const xs = []; // [ N + 1 ];\n // const fs = []; // [ N + 1 ];\n // const x = 0.0;\n // for (const i = 0; i <= N; ++i) {\n // sweepA.getTransform(xfA, x);\n // sweepB.getTransform(xfB, x);\n // const f = fcn.evaluate(xfA, xfB) - target;\n // printf(\"%g %g\\n\", x, f);\n // xs[i] = x;\n // fs[i] = f;\n // x += dx;\n // }\n // }\n\n // Compute the TOI on the separating axis. We do this by successively\n // resolving the deepest point. This loop is bounded by the number of\n // vertices.\n let done = false;\n let t2 = tMax;\n let pushBackIter = 0;\n while (true) {\n // Find the deepest point at t2. Store the witness point indices.\n let s2 = separationFunction.findMinSeparation(t2);\n\n // Is the final configuration separated?\n if (s2 > target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_separated;\n output.t = tMax;\n done = true;\n break;\n }\n\n // Has the separation reached tolerance?\n if (s2 > target - tolerance) {\n // Advance the sweeps\n t1 = t2;\n break;\n }\n\n // Compute the initial separation of the witness points.\n let s1 = separationFunction.evaluate(t1);\n\n // Check for initial overlap. This might happen if the root finder\n // runs out of iterations.\n if (s1 < target - tolerance) {\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n done = true;\n break;\n }\n\n // Check for touching\n if (s1 <= target + tolerance) {\n // Victory! t1 should hold the TOI (could be 0.0).\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n done = true;\n break;\n }\n\n // Compute 1D root of: f(x) - target = 0\n let rootIterCount = 0;\n let a1 = t1;\n let a2 = t2;\n while (true) {\n // Use a mix of the secant rule and bisection.\n let t;\n if (rootIterCount & 1) {\n // Secant rule to improve convergence.\n t = a1 + (target - s1) * (a2 - a1) / (s2 - s1);\n } else {\n // Bisection to guarantee progress.\n t = 0.5 * (a1 + a2);\n }\n\n ++rootIterCount;\n ++stats.toiRootIters;\n\n const s = separationFunction.evaluate(t);\n\n if (math_abs(s - target) < tolerance) {\n // t2 holds a tentative value for t1\n t2 = t;\n break;\n }\n\n // Ensure we continue to bracket the root.\n if (s > target) {\n a1 = t;\n s1 = s;\n } else {\n a2 = t;\n s2 = s;\n }\n\n if (rootIterCount === 50) {\n break;\n }\n }\n\n stats.toiMaxRootIters = math_max(stats.toiMaxRootIters, rootIterCount);\n\n ++pushBackIter;\n\n if (pushBackIter === Settings.maxPolygonVertices) {\n break;\n }\n }\n\n ++iter;\n ++stats.toiIters;\n\n if (done) {\n break;\n }\n\n if (iter === k_maxIterations) {\n // Root finder got stuck. Semi-victory.\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n break;\n }\n }\n\n stats.toiMaxIters = math_max(stats.toiMaxIters, iter);\n\n const time = Timer.diff(timer);\n stats.toiMaxTime = math_max(stats.toiMaxTime, time);\n stats.toiTime += time;\n\n separationFunction.recycle();\n};\n\nenum SeparationFunctionType {\n e_unset = -1,\n e_points = 1,\n e_faceA = 2,\n e_faceB = 3,\n}\n\nclass SeparationFunction {\n // input cache\n // todo: maybe assign by copy instead of reference?\n m_proxyA: DistanceProxy = null;\n m_proxyB: DistanceProxy = null;\n m_sweepA: Sweep = null;\n m_sweepB: Sweep = null;\n\n // initialize cache\n m_type = SeparationFunctionType.e_unset;\n m_localPoint = matrix.vec2(0, 0);\n m_axis = matrix.vec2(0, 0);\n\n // compute output\n indexA = -1;\n indexB = -1;\n\n recycle() {\n this.m_proxyA = null;\n this.m_proxyB = null;\n this.m_sweepA = null;\n this.m_sweepB = null;\n\n this.m_type = SeparationFunctionType.e_unset;\n matrix.zeroVec2(this.m_localPoint);\n matrix.zeroVec2(this.m_axis);\n\n this.indexA = -1;\n this.indexB = -1;\n }\n\n // TODO_ERIN might not need to return the separation\n\n initialize(cache: SimplexCache, proxyA: DistanceProxy, sweepA: Sweep, proxyB: DistanceProxy, sweepB: Sweep, t1: number): number {\n const count = cache.count;\n _ASSERT && console.assert(0 < count && count < 3);\n\n this.m_proxyA = proxyA;\n this.m_proxyB = proxyB;\n this.m_sweepA = sweepA;\n this.m_sweepB = sweepB;\n\n this.m_sweepA.getTransform(xfA, t1);\n this.m_sweepB.getTransform(xfB, t1);\n\n if (count === 1) {\n this.m_type = SeparationFunctionType.e_points;\n const localPointA = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n matrix.subVec2(this.m_axis, pointB, pointA);\n const s = matrix.normalizeVec2Length(this.m_axis);\n return s;\n\n } else if (cache.indexA[0] === cache.indexA[1]) {\n // Two points on B and one on A.\n this.m_type = SeparationFunctionType.e_faceB;\n const localPointB1 = proxyB.getVertex(cache.indexB[0]);\n const localPointB2 = proxyB.getVertex(cache.indexB[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointB2, localPointB1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n const localPointA = proxyA.getVertex(cache.indexA[0]);\n const pointA = Transform.mulVec2(xfA, localPointA);\n\n let s = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n\n } else {\n // Two points on A and one or two points on B.\n this.m_type = SeparationFunctionType.e_faceA;\n const localPointA1 = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointA2 = this.m_proxyA.getVertex(cache.indexA[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointA2, localPointA1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n let s = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n }\n }\n\n compute(find: boolean, t: number): number {\n // It was findMinSeparation and evaluate\n this.m_sweepA.getTransform(xfA, t);\n this.m_sweepB.getTransform(xfB, t);\n\n switch (this.m_type) {\n case SeparationFunctionType.e_points: {\n if (find) {\n matrix.derotVec2(axisA, xfA.q, this.m_axis);\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, this.m_axis));\n\n this.indexA = this.m_proxyA.getSupport(axisA);\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, this.m_axis) - matrix.dotVec2(pointA, this.m_axis);\n return sep;\n }\n\n case SeparationFunctionType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexA = -1;\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n return sep;\n }\n\n case SeparationFunctionType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisA, xfA.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexB = -1;\n this.indexA = this.m_proxyA.getSupport(axisA);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.transformVec2(pointA, xfA, localPointA);\n\n const sep = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n return sep;\n }\n\n default:\n _ASSERT && console.assert(false);\n if (find) {\n this.indexA = -1;\n this.indexB = -1;\n }\n return 0.0;\n }\n }\n\n findMinSeparation(t: number): number {\n return this.compute(true, t);\n }\n\n evaluate(t: number): number {\n return this.compute(false, t);\n }\n}\n\n/** @internal */ const separationFunction = new SeparationFunction();\n\n// legacy exports\nTimeOfImpact.Input = TOIInput;\nTimeOfImpact.Output = TOIOutput;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { EPSILON } from \"../common/Math\";\nimport { Body } from \"./Body\";\nimport type { Contact } from \"./Contact\";\nimport { Joint } from \"./Joint\";\nimport { TimeOfImpact, TOIInput, TOIOutput, TOIOutputState } from \"../collision/TimeOfImpact\";\nimport { Distance, DistanceInput, DistanceOutput, SimplexCache } from \"../collision/Distance\";\nimport { World } from \"./World\";\nimport { Sweep } from \"../common/Sweep\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_min = Math.min;\n\n\nexport class TimeStep {\n /** time step */\n dt: number = 0;\n /** inverse time step (0 if dt == 0) */\n inv_dt: number = 0;\n velocityIterations: number = 0;\n positionIterations: number = 0;\n warmStarting: boolean = false;\n blockSolve: boolean = true;\n\n /** timestep ratio for variable timestep */\n inv_dt0: number = 0.0;\n /** dt * inv_dt0 */\n dtRatio: number = 1;\n\n reset(dt: number): void {\n if (this.dt > 0.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}\n\n// reuse\n/** @internal */ const s_subStep = new TimeStep();\n/** @internal */ const c = matrix.vec2(0, 0);\n/** @internal */ const v = matrix.vec2(0, 0);\n/** @internal */ const translation = matrix.vec2(0, 0);\n/** @internal */ const input = new TOIInput();\n/** @internal */ const output = new TOIOutput();\n/** @internal */ const backup = new Sweep();\n/** @internal */ const backup1 = new Sweep();\n/** @internal */ const backup2 = new Sweep();\n\n/**\n * Contact impulses for reporting. Impulses are used instead of forces because\n * sub-step forces may approach infinity for rigid body collisions. These match\n * up one-to-one with the contact points in Manifold.\n */\nexport class ContactImpulse {\n // TODO: merge with Contact class?\n\n private readonly contact: Contact;\n private readonly normals: number[];\n private readonly tangents: number[];\n\n constructor(contact: Contact) {\n this.contact = contact;\n this.normals = [];\n this.tangents = [];\n }\n\n recycle() {\n this.normals.length = 0;\n this.tangents.length = 0;\n }\n\n get normalImpulses(): number[] {\n const contact = this.contact;\n const normals = this.normals;\n normals.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n normals.push(contact.v_points[p].normalImpulse);\n }\n return normals;\n }\n\n get tangentImpulses(): number[] {\n const contact = this.contact;\n const tangents = this.tangents;\n tangents.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n tangents.push(contact.v_points[p].tangentImpulse);\n }\n return tangents;\n }\n}\n\n/**\n * Finds and solves islands. An island is a connected subset of the world.\n */\nexport class Solver {\n m_world: World;\n m_stack: Body[];\n m_bodies: Body[];\n m_contacts: Contact[];\n m_joints: Joint[];\n\n constructor(world: World) {\n this.m_world = world;\n this.m_stack = [];\n this.m_bodies = [];\n this.m_contacts = [];\n this.m_joints = [];\n }\n\n clear(): void {\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\n addBody(body: Body): void {\n _ASSERT && console.assert(body instanceof Body, \"Not a Body!\", body);\n this.m_bodies.push(body);\n // why?\n // body.c_position.c.setZero();\n // body.c_position.a = 0;\n // body.c_velocity.v.setZero();\n // body.c_velocity.w = 0;\n }\n\n addContact(contact: Contact): void {\n // _ASSERT && console.assert(contact instanceof Contact, 'Not a Contact!', contact);\n this.m_contacts.push(contact);\n }\n\n addJoint(joint: Joint): void {\n _ASSERT && console.assert(joint instanceof Joint, \"Not a Joint!\", joint);\n this.m_joints.push(joint);\n }\n\n solveWorld(step: TimeStep): void {\n const world = this.m_world;\n\n // Clear all the island flags.\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n }\n for (let c = world.m_contactList; c; c = c.m_next) {\n c.m_islandFlag = false;\n }\n for (let j = world.m_jointList; j; j = j.m_next) {\n j.m_islandFlag = false;\n }\n\n // Build and simulate all awake islands.\n const stack = this.m_stack;\n let loop = -1;\n for (let seed = world.m_bodyList; seed; seed = seed.m_next) {\n loop++;\n if (seed.m_islandFlag) {\n continue;\n }\n\n if (seed.isAwake() == false || seed.isActive() == false) {\n continue;\n }\n\n // The seed can be dynamic or kinematic.\n if (seed.isStatic()) {\n continue;\n }\n\n // Reset island and stack.\n this.clear();\n\n stack.push(seed);\n\n seed.m_islandFlag = true;\n\n // Perform a depth first search (DFS) on the constraint graph.\n while (stack.length > 0) {\n // Grab the next body off the stack and add it to the island.\n const b = stack.pop();\n _ASSERT && console.assert(b.isActive() == true);\n this.addBody(b);\n\n // Make sure the body is awake (without resetting sleep timer).\n b.m_awakeFlag = true;\n\n // To keep islands as small as possible, we don't\n // propagate islands across static bodies.\n if (b.isStatic()) {\n continue;\n }\n\n // Search all contacts connected to this body.\n for (let ce = b.m_contactList; ce; ce = ce.next) {\n const contact = ce.contact;\n\n // Has this contact already been added to an island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Is this contact solid and touching?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n this.addContact(contact);\n contact.m_islandFlag = true;\n\n const other = ce.other;\n\n // Was the other body already added to this island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n\n // Search all joints connect to this body.\n for (let je = b.m_jointList; je; je = je.next) {\n if (je.joint.m_islandFlag == true) {\n continue;\n }\n\n const other = je.other;\n\n // Don't simulate joints connected to inactive bodies.\n if (other.isActive() == false) {\n continue;\n }\n\n this.addJoint(je.joint);\n je.joint.m_islandFlag = true;\n\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n }\n\n this.solveIsland(step);\n\n // Post solve cleanup.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n // Allow static bodies to participate in other islands.\n // TODO: are they added at all?\n const b = this.m_bodies[i];\n if (b.isStatic()) {\n b.m_islandFlag = false;\n }\n }\n }\n }\n\n solveIsland(step: TimeStep): void {\n // B2: Island Solve\n const world = this.m_world;\n const gravity = world.m_gravity;\n const allowSleep = world.m_allowSleep;\n\n const h = step.dt;\n\n // Integrate velocities and apply damping. Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.m_sweep.c);\n const a = body.m_sweep.a;\n matrix.copyVec2(v, body.m_linearVelocity);\n let w = body.m_angularVelocity;\n\n // Store positions for continuous collision.\n matrix.copyVec2(body.m_sweep.c0, body.m_sweep.c);\n body.m_sweep.a0 = body.m_sweep.a;\n\n if (body.isDynamic()) {\n // Integrate velocities.\n matrix.plusScaleVec2(v, h * body.m_gravityScale, gravity);\n matrix.plusScaleVec2(v, h * body.m_invMass, body.m_force);\n w += h * body.m_invI * body.m_torque;\n /**\n *
\n         * Apply damping.\n         * ODE: dv/dt + c * v = 0\n         * Solution: v(t) = v0 * exp(-c * t)\n         * Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)\n         * v2 = exp(-c * dt) * v1\n         * Pade approximation:\n         * v2 = v1 * 1 / (1 + c * dt)\n         * 
\n */\n matrix.scaleVec2(v, 1.0 / (1.0 + h * body.m_linearDamping), v);\n w *= 1.0 / (1.0 + h * body.m_angularDamping);\n }\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(step);\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(step);\n }\n\n if (step.warmStarting) {\n // Warm start.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.warmStartConstraint(step);\n }\n }\n\n for (let i = 0; i < this.m_joints.length; ++i) {\n const joint = this.m_joints[i];\n joint.initVelocityConstraints(step);\n }\n\n // Solve velocity constraints\n for (let i = 0; i < step.velocityIterations; ++i) {\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n joint.solveVelocityConstraints(step);\n }\n\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(step);\n }\n }\n\n // Store impulses for warm starting\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.storeConstraintImpulses(step);\n }\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n // Solve position constraints\n let positionSolved = false;\n for (let i = 0; i < step.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraint(step);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -3.0 * Settings.linearSlop;\n\n let jointsOkay = true;\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n const jointOkay = joint.solvePositionConstraints(step);\n jointsOkay = jointsOkay && jointOkay;\n }\n\n if (contactsOkay && jointsOkay) {\n // Exit early if the position errors are small.\n positionSolved = true;\n break;\n }\n }\n\n // Copy state buffers back to the bodies\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(body.m_sweep.c, body.c_position.c);\n body.m_sweep.a = body.c_position.a;\n matrix.copyVec2(body.m_linearVelocity, body.c_velocity.v);\n body.m_angularVelocity = body.c_velocity.w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n\n if (allowSleep) {\n let minSleepTime = Infinity;\n\n const linTolSqr = Settings.linearSleepToleranceSqr;\n const angTolSqr = Settings.angularSleepToleranceSqr;\n\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n if (body.isStatic()) {\n continue;\n }\n\n if ((body.m_autoSleepFlag == false)\n || (body.m_angularVelocity * body.m_angularVelocity > angTolSqr)\n || (matrix.lengthSqrVec2(body.m_linearVelocity) > linTolSqr)) {\n body.m_sleepTime = 0.0;\n minSleepTime = 0.0;\n } else {\n body.m_sleepTime += h;\n minSleepTime = math_min(minSleepTime, body.m_sleepTime);\n }\n }\n\n if (minSleepTime >= Settings.timeToSleep && positionSolved) {\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.setAwake(false);\n }\n }\n }\n }\n\n /**\n * Find TOI contacts and solve them.\n */\n solveWorldTOI(step: TimeStep): void {\n const world = this.m_world;\n\n if (world.m_stepComplete) {\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n b.m_sweep.alpha0 = 0.0;\n }\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Invalidate TOI\n c.m_toiFlag = false;\n c.m_islandFlag = false;\n c.m_toiCount = 0;\n c.m_toi = 1.0;\n }\n }\n\n // Find TOI events and solve them.\n while (true) {\n // Find the first TOI.\n let minContact: Contact | null = null;\n let minAlpha = 1.0;\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Is this contact disabled?\n if (c.isEnabled() == false) {\n continue;\n }\n\n // Prevent excessive sub-stepping.\n if (c.m_toiCount > Settings.maxSubSteps) {\n continue;\n }\n\n let alpha = 1.0;\n if (c.m_toiFlag) {\n // This contact has a valid cached TOI.\n alpha = c.m_toi;\n } else {\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n // Is there a sensor?\n if (fA.isSensor() || fB.isSensor()) {\n continue;\n }\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n _ASSERT && console.assert(bA.isDynamic() || bB.isDynamic());\n\n const activeA = bA.isAwake() && !bA.isStatic();\n const activeB = bB.isAwake() && !bB.isStatic();\n\n // Is at least one body active (awake and dynamic or kinematic)?\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const collideA = bA.isBullet() || !bA.isDynamic();\n const collideB = bB.isBullet() || !bB.isDynamic();\n\n // Are these two non-bullet dynamic bodies?\n if (collideA == false && collideB == false) {\n continue;\n }\n\n // Compute the TOI for this contact.\n // Put the sweeps onto the same time interval.\n let alpha0 = bA.m_sweep.alpha0;\n\n if (bA.m_sweep.alpha0 < bB.m_sweep.alpha0) {\n alpha0 = bB.m_sweep.alpha0;\n bA.m_sweep.advance(alpha0);\n } else if (bB.m_sweep.alpha0 < bA.m_sweep.alpha0) {\n alpha0 = bA.m_sweep.alpha0;\n bB.m_sweep.advance(alpha0);\n }\n\n _ASSERT && console.assert(alpha0 < 1.0);\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const sweepA = bA.m_sweep;\n const sweepB = bB.m_sweep;\n\n // Compute the time of impact in interval [0, minTOI]\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.sweepA.set(bA.m_sweep);\n input.sweepB.set(bB.m_sweep);\n input.tMax = 1.0;\n\n TimeOfImpact(output, input);\n\n // Beta is the fraction of the remaining portion of the [time?].\n const beta = output.t;\n if (output.state == TOIOutputState.e_touching) {\n alpha = math_min(alpha0 + (1.0 - alpha0) * beta, 1.0);\n } else {\n alpha = 1.0;\n }\n\n c.m_toi = alpha;\n c.m_toiFlag = true;\n }\n\n if (alpha < minAlpha) {\n // This is the minimum TOI found so far.\n minContact = c;\n minAlpha = alpha;\n }\n }\n\n if (minContact == null || 1.0 - 10.0 * EPSILON < minAlpha) {\n // No more TOI events. Done!\n world.m_stepComplete = true;\n break;\n }\n\n // Advance the bodies to the TOI.\n const fA = minContact.getFixtureA();\n const fB = minContact.getFixtureB();\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n backup1.set(bA.m_sweep);\n backup2.set(bB.m_sweep);\n\n bA.advance(minAlpha);\n bB.advance(minAlpha);\n\n // The TOI contact likely has some new contact points.\n minContact.update(world);\n minContact.m_toiFlag = false;\n ++minContact.m_toiCount;\n\n // Is the contact solid?\n if (minContact.isEnabled() == false || minContact.isTouching() == false) {\n // Restore the sweeps.\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\n bA.setAwake(true);\n bB.setAwake(true);\n\n // Build the island\n this.clear();\n this.addBody(bA);\n this.addBody(bB);\n this.addContact(minContact);\n\n bA.m_islandFlag = true;\n bB.m_islandFlag = true;\n minContact.m_islandFlag = true;\n\n // Get contacts on bodyA and bodyB.\n const bodies = [ bA, bB ];\n for (let i = 0; i < bodies.length; ++i) {\n const body = bodies[i];\n if (body.isDynamic()) {\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n // if (this.m_bodyCount == this.m_bodyCapacity) { break; }\n // if (this.m_contactCount == this.m_contactCapacity) { break; }\n\n const contact = ce.contact;\n\n // Has this contact already been added to the island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Only add if either is static, kinematic or bullet.\n const other = ce.other;\n if (other.isDynamic() && !body.isBullet() && !other.isBullet()) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n // Tentatively advance the body to the TOI.\n backup.set(other.m_sweep);\n if (other.m_islandFlag == false) {\n other.advance(minAlpha);\n }\n\n // Update the contact points\n contact.update(world);\n\n // Was the contact disabled by the user?\n // Are there contact points?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n other.m_sweep.set(backup);\n other.synchronizeTransform();\n continue;\n }\n\n // Add the contact to the island\n contact.m_islandFlag = true;\n this.addContact(contact);\n\n // Has the other body already been added to the island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // Add the other body to the island.\n other.m_islandFlag = true;\n\n if (!other.isStatic()) {\n other.setAwake(true);\n }\n\n this.addBody(other);\n }\n }\n }\n\n s_subStep.reset((1.0 - minAlpha) * step.dt);\n s_subStep.dtRatio = 1.0;\n s_subStep.positionIterations = 20;\n s_subStep.velocityIterations = step.velocityIterations;\n s_subStep.warmStarting = false;\n\n this.solveIslandTOI(s_subStep, bA, bB);\n\n // Reset island flags and synchronize broad-phase proxies.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.m_islandFlag = false;\n\n if (!body.isDynamic()) {\n continue;\n }\n\n body.synchronizeFixtures();\n\n // Invalidate all contact TOIs on this displaced body.\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n ce.contact.m_toiFlag = false;\n ce.contact.m_islandFlag = false;\n }\n }\n\n // Commit fixture proxy movements to the broad-phase so that new contacts\n // are created.\n // Also, some contacts can be destroyed.\n world.findNewContacts();\n\n if (world.m_subStepping) {\n world.m_stepComplete = false;\n break;\n }\n }\n }\n\n solveIslandTOI(subStep: TimeStep, toiA: Body, toiB: Body): void {\n\n // Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n matrix.copyVec2(body.c_position.c, body.m_sweep.c);\n body.c_position.a = body.m_sweep.a;\n matrix.copyVec2(body.c_velocity.v, body.m_linearVelocity);\n body.c_velocity.w = body.m_angularVelocity;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(subStep);\n }\n\n // Solve position constraints.\n for (let i = 0; i < subStep.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -1.5 * Settings.linearSlop;\n if (contactsOkay) {\n break;\n }\n }\n\n if (false) {\n // Is the new position really safe?\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const c = this.m_contacts[i];\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const input = new DistanceInput();\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.transformA.set(bA.getTransform());\n input.transformB.set(bB.getTransform());\n input.useRadii = false;\n\n const output = new DistanceOutput();\n const cache = new SimplexCache();\n Distance(output, cache, input);\n\n if (output.distance == 0 || cache.count == 3) {\n cache.count += 0;\n }\n }\n }\n\n // Leap of faith to new safe state.\n matrix.copyVec2(toiA.m_sweep.c0, toiA.c_position.c);\n toiA.m_sweep.a0 = toiA.c_position.a;\n matrix.copyVec2(toiB.m_sweep.c0, toiB.c_position.c);\n toiB.m_sweep.a0 = toiB.c_position.a;\n\n // No warm starting is needed for TOI events because warm\n // starting impulses were applied in the discrete solver.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(subStep);\n }\n\n // Solve velocity constraints.\n for (let i = 0; i < subStep.velocityIterations; ++i) {\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(subStep);\n }\n }\n\n // Don't store the TOI contact forces for warm starting\n // because they can be quite large.\n\n const h = subStep.dt;\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n\n // Sync bodies\n matrix.copyVec2(body.m_sweep.c, c);\n body.m_sweep.a = a;\n matrix.copyVec2(body.m_linearVelocity, v);\n body.m_angularVelocity = w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n }\n\n /** @internal */\n postSolveIsland(): void {\n for (let c = 0; c < this.m_contacts.length; ++c) {\n const contact = this.m_contacts[c];\n this.m_world.postSolve(contact, contact.m_impulse);\n }\n }\n}\n\n// @ts-ignore\nSolver.TimeStep = TimeStep;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 2-by-2 matrix. Stored in column-major order.\n */\nexport class Mat22 {\n ex: Vec2;\n ey: Vec2;\n\n constructor(a: number, b: number, c: number, d: number);\n constructor(a: { x: number; y: number }, b: { x: number; y: number });\n constructor();\n constructor(a?, b?, c?, d?) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec2.clone(a);\n this.ey = Vec2.clone(b);\n } else if (typeof a === \"number\") {\n this.ex = Vec2.neo(a, c);\n this.ey = Vec2.neo(b, d);\n } else {\n this.ex = Vec2.zero();\n this.ey = Vec2.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat22.isValid(o), \"Invalid Mat22!\", o);\n }\n\n set(a: Mat22): void;\n set(a: Vec2Value, b: Vec2Value): void;\n set(a: number, b: number, c: number, d: number): void;\n set(a, b?, c?, d?): void {\n if (typeof a === \"number\" && typeof b === \"number\" && typeof c === \"number\"\n && typeof d === \"number\") {\n this.ex.setNum(a, c);\n this.ey.setNum(b, d);\n\n } else if (typeof a === \"object\" && typeof b === \"object\") {\n this.ex.setVec2(a);\n this.ey.setVec2(b);\n\n } else if (typeof a === \"object\") {\n _ASSERT && Mat22.assert(a);\n this.ex.setVec2(a.ex);\n this.ey.setVec2(a.ey);\n\n } else {\n _ASSERT && console.assert(false);\n }\n }\n\n setIdentity(): void {\n this.ex.x = 1.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 1.0;\n }\n\n setZero(): void {\n this.ex.x = 0.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 0.0;\n }\n\n getInverse(): Mat22 {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const imx = new Mat22();\n imx.ex.x = det * d;\n imx.ey.x = -det * b;\n imx.ex.y = -det * c;\n imx.ey.y = det * a;\n return imx;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const w = Vec2.zero();\n w.x = det * (d * v.x - b * v.y);\n w.y = det * (a * v.y - c * v.x);\n return w;\n }\n\n /**\n * Multiply a matrix times a vector. If a rotation matrix is provided, then this\n * transforms the vector from one frame to another.\n */\n static mul(mx: Mat22, my: Mat22): Mat22;\n static mul(mx: Mat22, v: Vec2Value): Vec2;\n static mul(mx, v) {\n if (v && \"x\" in v && \"y\" in v) {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n }\n\n static mulMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n /**\n * Multiply a matrix transpose times a vector. If a rotation matrix is provided,\n * then this transforms the vector from one frame to another (inverse\n * transform).\n */\n static mulT(mx: Mat22, my: Mat22): Mat22;\n static mulT(mx: Mat22, v: Vec2Value): Vec2;\n static mulT(mx, v) {\n if (v && \"x\" in v && \"y\" in v) { // Vec2\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulTVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n }\n\n static mulTMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n static abs(mx: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n return new Mat22(Vec2.abs(mx.ex), Vec2.abs(mx.ey));\n }\n\n static add(mx1: Mat22, mx2: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx1);\n _ASSERT && Mat22.assert(mx2);\n return new Mat22(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey));\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\nimport { EPSILON } from \"../common/Math\";\n\n\n/** @internal */ const math_sqrt = Math.sqrt;\n\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const dist = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n\nexport enum ManifoldType {\n e_unset = -1,\n e_circles = 0,\n e_faceA = 1,\n e_faceB = 2\n}\n\nexport enum ContactFeatureType {\n e_unset = -1,\n e_vertex = 0,\n e_face = 1\n}\n\n/**\n * This is used for determining the state of contact points.\n */\n export enum PointState {\n /** Point does not exist */\n nullState = 0,\n /** Point was added in the update */\n addState = 1,\n /** Point persisted across the update */\n persistState = 2,\n /** Point was removed in the update */\n removeState = 3\n}\n\n/**\n * Used for computing contact manifolds.\n */\n export class ClipVertex {\n v = matrix.vec2(0, 0);\n id: ContactID = new ContactID();\n\n set(o: ClipVertex): void {\n matrix.copyVec2(this.v, o.v);\n this.id.set(o.id);\n }\n recycle() {\n matrix.zeroVec2(this.v);\n this.id.recycle();\n }\n}\n\n/**\n * A manifold for two touching convex shapes. Manifolds are created in `evaluate`\n * method of Contact subclasses.\n *\n * Supported manifold types are e_faceA or e_faceB for clip point versus plane\n * with radius and e_circles point versus point with radius.\n *\n * We store contacts in this way so that position correction can account for\n * movement, which is critical for continuous physics. All contact scenarios\n * must be expressed in one of these types. This structure is stored across time\n * steps, so we keep it small.\n */\nexport class Manifold {\n type: ManifoldType;\n\n /**\n * Usage depends on manifold type:\n * - circles: not used\n * - faceA: the normal on polygonA\n * - faceB: the normal on polygonB\n */\n localNormal = matrix.vec2(0, 0);\n\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleA\n * - faceA: the center of faceA\n * - faceB: the center of faceB\n */\n localPoint = matrix.vec2(0, 0);\n\n /** The points of contact */\n points: ManifoldPoint[] = [ new ManifoldPoint(), new ManifoldPoint() ];\n\n /** The number of manifold points */\n pointCount: number = 0;\n\n set(that: Manifold): void {\n this.type = that.type;\n matrix.copyVec2(this.localNormal, that.localNormal);\n matrix.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\n recycle(): void {\n this.type = ManifoldType.e_unset;\n matrix.zeroVec2(this.localNormal);\n matrix.zeroVec2(this.localPoint);\n this.pointCount = 0;\n this.points[0].recycle();\n this.points[1].recycle();\n }\n\n /**\n * Evaluate the manifold with supplied transforms. This assumes modest motion\n * from the original state. This does not change the point count, impulses, etc.\n * The radii must come from the shapes that generated the manifold.\n */\n getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold {\n if (this.pointCount == 0) {\n return wm;\n }\n\n wm = wm || new WorldManifold();\n\n wm.pointCount = this.pointCount;\n\n const normal = wm.normal;\n const points = wm.points;\n const separations = wm.separations;\n\n switch (this.type) {\n case ManifoldType.e_circles: {\n matrix.setVec2(normal, 1.0, 0.0);\n const manifoldPoint = this.points[0];\n matrix.transformVec2(pointA, xfA, this.localPoint);\n matrix.transformVec2(pointB, xfB, manifoldPoint.localPoint);\n matrix.subVec2(dist, pointB, pointA);\n const lengthSqr = matrix.lengthSqrVec2(dist);\n if (lengthSqr > EPSILON * EPSILON) {\n const length = math_sqrt(lengthSqr);\n matrix.scaleVec2(normal, 1 / length, dist);\n }\n matrix.combine2Vec2(cA, 1, pointA, radiusA, normal);\n matrix.combine2Vec2(cB, 1, pointB, -radiusB, normal);\n matrix.combine2Vec2(points[0], 0.5, cA, 0.5, cB);\n separations[0] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.localNormal);\n matrix.transformVec2(planePoint, xfA, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfB, manifoldPoint.localPoint);\n matrix.combine2Vec2(cA, 1, clipPoint, radiusA - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cB, 1, clipPoint, -radiusB, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n }\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.localNormal);\n matrix.transformVec2(planePoint, xfB, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfA, manifoldPoint.localPoint);\n matrix.combine2Vec2(cB, 1, clipPoint, radiusB - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cA, 1, clipPoint, -radiusA, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cA, cB), normal);\n }\n // Ensure normal points from A to B.\n matrix.negVec2(normal);\n break;\n }\n }\n\n return wm;\n }\n\n static clipSegmentToLine = clipSegmentToLine;\n static ClipVertex = ClipVertex;\n static getPointStates = getPointStates;\n static PointState = PointState;\n}\n\n/**\n * A manifold point is a contact point belonging to a contact manifold. It holds\n * details related to the geometry and dynamics of the contact points.\n *\n * This structure is stored across time steps, so we keep it small.\n *\n * Note: impulses are used for internal caching and may not provide reliable\n * contact forces, especially for high speed collisions.\n */\nexport class ManifoldPoint {\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleB\n * - faceA: the local center of circleB or the clip point of polygonB\n * - faceB: the clip point of polygonA\n */\n localPoint = matrix.vec2(0, 0);\n /**\n * The non-penetration impulse\n */\n normalImpulse = 0;\n /**\n * The friction impulse\n */\n tangentImpulse = 0;\n /**\n * Uniquely identifies a contact point between two shapes to facilitate warm starting\n */\n readonly id = new ContactID();\n\n set(that: ManifoldPoint): void {\n matrix.copyVec2(this.localPoint, that.localPoint);\n this.normalImpulse = that.normalImpulse;\n this.tangentImpulse = that.tangentImpulse;\n this.id.set(that.id);\n }\n\n recycle(): void {\n matrix.zeroVec2(this.localPoint);\n this.normalImpulse = 0;\n this.tangentImpulse = 0;\n this.id.recycle();\n }\n}\n\n/**\n * Contact ids to facilitate warm starting.\n * \n * ContactFeature: The features that intersect to form the contact point.\n */\nexport class ContactID {\n\n /**\n * Used to quickly compare contact ids.\n */\n key = -1;\n\n /** ContactFeature index on shapeA */\n indexA = -1;\n\n /** ContactFeature index on shapeB */\n indexB = -1;\n\n /** ContactFeature type on shapeA */\n typeA = ContactFeatureType.e_unset;\n\n /** ContactFeature type on shapeB */\n typeB = ContactFeatureType.e_unset;\n\n setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void {\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\n set(that: ContactID): void {\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\n swapFeatures(): void {\n const indexA = this.indexA;\n const indexB = this.indexB;\n const typeA = this.typeA;\n const 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\n recycle(): void {\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}\n\n/**\n * This is used to compute the current state of a contact manifold.\n */\nexport class WorldManifold {\n /** World vector pointing from A to B */\n normal = matrix.vec2(0, 0);\n\n /** World contact point (point of intersection) */\n points = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints]\n\n /** A negative value indicates overlap, in meters */\n separations = [0, 0]; // [maxManifoldPoints]\n\n /** The number of manifold points */\n pointCount = 0;\n\n recycle() {\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.points[0]);\n matrix.zeroVec2(this.points[1]);\n this.separations[0] = 0;\n this.separations[1] = 0;\n this.pointCount = 0;\n }\n}\n\n/**\n * Compute the point states given two manifolds. The states pertain to the\n * transition from manifold1 to manifold2. So state1 is either persist or remove\n * while state2 is either add or persist.\n */\nexport function getPointStates(\n state1: PointState[],\n state2: PointState[],\n manifold1: Manifold,\n manifold2: Manifold\n): void {\n // state1, state2: PointState[Settings.maxManifoldPoints]\n\n // for (var i = 0; i < Settings.maxManifoldPoints; ++i) {\n // state1[i] = PointState.nullState;\n // state2[i] = PointState.nullState;\n // }\n\n // Detect persists and removes.\n for (let i = 0; i < manifold1.pointCount; ++i) {\n const id = manifold1.points[i].id;\n\n state1[i] = PointState.removeState;\n\n for (let 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\n // Detect persists and adds.\n for (let i = 0; i < manifold2.pointCount; ++i) {\n const id = manifold2.points[i].id;\n\n state2[i] = PointState.addState;\n\n for (let 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}\n\n/**\n * Clipping for contact manifolds. Sutherland-Hodgman clipping.\n */\nexport function clipSegmentToLine(\n vOut: ClipVertex[],\n vIn: ClipVertex[],\n normal: Vec2Value,\n offset: number,\n vertexIndexA: number\n): number {\n // Start with no output points\n let numOut = 0;\n\n // Calculate the distance of end points to the line\n const distance0 = matrix.dotVec2(normal, vIn[0].v) - offset;\n const distance1 = matrix.dotVec2(normal, vIn[1].v) - offset;\n\n // If the points are behind the plane\n if (distance0 <= 0.0)\n vOut[numOut++].set(vIn[0]);\n if (distance1 <= 0.0)\n vOut[numOut++].set(vIn[1]);\n\n // If the points are on different sides of the plane\n if (distance0 * distance1 < 0.0) {\n // Find intersection point of edge and plane\n const interp = distance0 / (distance0 - distance1);\n matrix.combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v);\n\n // VertexA is hitting edgeB.\n vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face);\n ++numOut;\n }\n\n return numOut;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { ShapeType } from \"../collision/Shape\";\nimport { clamp } from \"../common/Math\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Mat22 } from \"../common/Mat22\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Manifold, ManifoldType, WorldManifold } from \"../collision/Manifold\";\nimport { testOverlap } from \"../collision/Distance\";\nimport { Fixture } from \"./Fixture\";\nimport { Body } from \"./Body\";\nimport { ContactImpulse, TimeStep } from \"./Solver\";\nimport { Pool } from \"../util/Pool\";\nimport { getTransform } from \"./Position\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n// Solver debugging is normally disabled because the block solver sometimes has to deal with a poorly conditioned effective mass matrix.\n/** @internal */ const DEBUG_SOLVER = false;\n\n/** @internal */ const contactPool = new Pool({\n create() {\n return new Contact();\n },\n release(contact: Contact) {\n contact.recycle();\n }\n});\n\n/** @internal */ const oldManifold = new Manifold();\n\n/** @internal */ const worldManifold = new WorldManifold();\n\n/**\n * A contact edge is used to connect bodies and contacts together in a contact\n * graph where each body is a node and each contact is an edge. A contact edge\n * belongs to a doubly linked list maintained in each attached body. Each\n * contact has two contact nodes, one for each attached body.\n */\nexport class ContactEdge {\n contact: Contact;\n prev: ContactEdge | null = null;\n next: ContactEdge | null = null;\n other: Body | null = null;\n constructor(contact: Contact) {\n this.contact = contact;\n }\n\n /** @internal */\n recycle() {\n this.prev = null;\n this.next = null;\n this.other = null;\n }\n}\n\nexport type EvaluateFunction = (\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number\n) => void;\n\n/**\n * Friction mixing law. The idea is to allow either fixture to drive the\n * friction to zero. For example, anything slides on ice.\n */\nexport function mixFriction(friction1: number, friction2: number): number {\n return math_sqrt(friction1 * friction2);\n}\n\n/**\n * Restitution mixing law. The idea is allow for anything to bounce off an\n * inelastic surface. For example, a superball bounces on anything.\n */\nexport function mixRestitution(restitution1: number, restitution2: number): number {\n return restitution1 > restitution2 ? restitution1 : restitution2;\n}\n\n// TODO: move this to Settings?\n/** @internal */ const s_registers = [];\n\n// TODO: merge with ManifoldPoint?\nexport class VelocityConstraintPoint {\n rA = matrix.vec2(0, 0);\n rB = matrix.vec2(0, 0);\n normalImpulse = 0;\n tangentImpulse = 0;\n normalMass = 0;\n tangentMass = 0;\n velocityBias = 0;\n\n recycle() {\n matrix.zeroVec2(this.rA);\n matrix.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}\n\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const vA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const vB = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const rA = matrix.vec2(0, 0);\n/** @internal */ const rB = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const point = matrix.vec2(0, 0);\n/** @internal */ const dv = matrix.vec2(0, 0);\n/** @internal */ const dv1 = matrix.vec2(0, 0);\n/** @internal */ const dv2 = matrix.vec2(0, 0);\n/** @internal */ const b = matrix.vec2(0, 0);\n/** @internal */ const a = matrix.vec2(0, 0);\n/** @internal */ const x = matrix.vec2(0, 0);\n/** @internal */ const d = matrix.vec2(0, 0);\n/** @internal */ const P1 = matrix.vec2(0, 0);\n/** @internal */ const P2 = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * The class manages contact between two shapes. A contact exists for each\n * overlapping AABB in the broad-phase (except if filtered). Therefore a contact\n * object may exist that has no contact points.\n */\nexport class Contact {\n // Nodes for connecting bodies.\n /** @internal */ m_nodeA = new ContactEdge(this);\n /** @internal */ m_nodeB = new ContactEdge(this);\n /** @internal */ m_fixtureA: Fixture | null = null;\n /** @internal */ m_fixtureB: Fixture | null = null;\n /** @internal */ m_indexA = -1;\n /** @internal */ m_indexB = -1;\n /** @internal */ m_evaluateFcn: EvaluateFunction | null = null;\n /** @internal */ m_manifold: Manifold = new Manifold();\n /** @internal */ m_prev: Contact | null = null;\n /** @internal */ m_next: Contact | null = null;\n /** @internal */ m_toi = 1.0;\n /** @internal */ m_toiCount = 0;\n // This contact has a valid TOI in m_toi\n /** @internal */ m_toiFlag = false;\n /** @internal */ m_friction = 0.0;\n /** @internal */ m_restitution = 0.0;\n /** @internal */ m_tangentSpeed = 0.0;\n /** @internal This contact can be disabled (by user) */\n m_enabledFlag = true;\n /** @internal Used when crawling contact graph when forming islands. */\n m_islandFlag = false;\n /** @internal Set when the shapes are touching. */\n m_touchingFlag = false;\n /** @internal This contact needs filtering because a fixture filter was changed. */\n m_filterFlag = false;\n /** @internal This bullet contact had a TOI event */\n m_bulletHitFlag = false;\n\n /** @internal Contact reporting impulse object cache */\n m_impulse: ContactImpulse = new ContactImpulse(this);\n\n // VelocityConstraint\n /** @internal */ v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; // [maxManifoldPoints];\n /** @internal */ v_normal = matrix.vec2(0, 0);\n /** @internal */ v_normalMass: Mat22 = new Mat22();\n /** @internal */ v_K: Mat22 = new Mat22();\n /** @internal */ v_pointCount = 0;\n /** @internal */ v_tangentSpeed = 0;\n /** @internal */ v_friction = 0;\n /** @internal */ v_restitution = 0;\n /** @internal */ v_invMassA = 0;\n /** @internal */ v_invMassB = 0;\n /** @internal */ v_invIA = 0;\n /** @internal */ v_invIB = 0;\n\n // PositionConstraint\n /** @internal */ p_localPoints = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints];\n /** @internal */ p_localNormal = matrix.vec2(0, 0);\n /** @internal */ p_localPoint = matrix.vec2(0, 0);\n /** @internal */ p_localCenterA = matrix.vec2(0, 0);\n /** @internal */ p_localCenterB = matrix.vec2(0, 0);\n /** @internal */ p_type = ManifoldType.e_unset;\n /** @internal */ p_radiusA = 0;\n /** @internal */ p_radiusB = 0;\n /** @internal */ p_pointCount = 0;\n /** @internal */ p_invMassA = 0;\n /** @internal */ p_invMassB = 0;\n /** @internal */ p_invIA = 0;\n /** @internal */ p_invIB = 0;\n\n /** @internal */ \n initialize(fA: Fixture, indexA: number, fB: Fixture, indexB: number, evaluateFcn: EvaluateFunction) {\n this.m_fixtureA = fA;\n this.m_fixtureB = fB;\n\n this.m_indexA = indexA;\n this.m_indexB = indexB;\n\n this.m_evaluateFcn = evaluateFcn;\n\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\n /** @internal */ \n recycle() {\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\n this.m_impulse.recycle();\n\n // VelocityConstraint\n for(const point of this.v_points) {\n point.recycle();\n }\n matrix.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\n // PositionConstraint\n for(const point of this.p_localPoints) {\n matrix.zeroVec2(point);\n }\n matrix.zeroVec2(this.p_localNormal);\n matrix.zeroVec2(this.p_localPoint);\n matrix.zeroVec2(this.p_localCenterA);\n matrix.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\n initConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n const manifold = this.m_manifold;\n\n const pointCount = manifold.pointCount;\n _ASSERT && console.assert(pointCount > 0);\n\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\n this.v_friction = this.m_friction;\n this.v_restitution = this.m_restitution;\n this.v_tangentSpeed = this.m_tangentSpeed;\n\n this.v_pointCount = pointCount;\n\n this.v_K.setZero();\n this.v_normalMass.setZero();\n\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 matrix.copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter);\n matrix.copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter);\n\n this.p_radiusA = shapeA.m_radius;\n this.p_radiusB = shapeB.m_radius;\n\n this.p_type = manifold.type;\n matrix.copyVec2(this.p_localNormal, manifold.localNormal);\n matrix.copyVec2(this.p_localPoint, manifold.localPoint);\n this.p_pointCount = pointCount;\n\n for (let j = 0; j < Settings.maxManifoldPoints; ++j) {\n this.v_points[j].recycle();\n matrix.zeroVec2(this.p_localPoints[j]);\n }\n\n for (let j = 0; j < pointCount; ++j) {\n const cp = manifold.points[j];\n const 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 matrix.copyVec2(this.p_localPoints[j], cp.localPoint);\n }\n }\n\n /**\n * Get the contact manifold. Do not modify the manifold unless you understand\n * the internals of the library.\n */\n getManifold(): Manifold {\n return this.m_manifold;\n }\n\n /**\n * Get the world manifold.\n */\n getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n return this.m_manifold.getWorldManifold(\n worldManifold,\n bodyA.getTransform(), shapeA.m_radius,\n bodyB.getTransform(), shapeB.m_radius\n );\n }\n\n /**\n * Enable/disable this contact. This can be used inside the pre-solve contact\n * listener. The contact is only disabled for the current time step (or sub-step\n * in continuous collisions).\n */\n setEnabled(flag: boolean): void {\n this.m_enabledFlag = !!flag;\n }\n\n /**\n * Has this contact been disabled?\n */\n isEnabled(): boolean {\n return this.m_enabledFlag;\n }\n\n /**\n * Is this contact touching?\n */\n isTouching(): boolean {\n return this.m_touchingFlag;\n }\n\n /**\n * Get the next contact in the world's contact list.\n */\n getNext(): Contact | null {\n return this.m_next;\n }\n\n /**\n * Get fixture A in this contact.\n */\n getFixtureA(): Fixture {\n return this.m_fixtureA;\n }\n\n /**\n * Get fixture B in this contact.\n */\n getFixtureB(): Fixture {\n return this.m_fixtureB;\n }\n\n /**\n * Get the child primitive index for fixture A.\n */\n getChildIndexA(): number {\n return this.m_indexA;\n }\n\n /**\n * Get the child primitive index for fixture B.\n */\n getChildIndexB(): number {\n return this.m_indexB;\n }\n\n /**\n * Flag this contact for filtering. Filtering will occur the next time step.\n */\n flagForFiltering(): void {\n this.m_filterFlag = true;\n }\n\n /**\n * Override the default friction mixture. You can call this in\n * \"pre-solve\" callback. This value persists until set or reset.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the friction.\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Reset the friction mixture to the default value.\n */\n resetFriction(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction);\n }\n\n /**\n * Override the default restitution mixture. You can call this in\n * \"pre-solve\" callback. The value persists until you set or reset.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Get the restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Reset the restitution to the default value.\n */\n resetRestitution(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution);\n }\n\n /**\n * Set the desired tangent speed for a conveyor belt behavior. In meters per\n * second.\n */\n setTangentSpeed(speed: number): void {\n this.m_tangentSpeed = speed;\n }\n\n /**\n * Get the desired tangent speed. In meters per second.\n */\n getTangentSpeed(): number {\n return this.m_tangentSpeed;\n }\n\n /**\n * Called by Update method, and implemented by subclasses.\n */\n evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_evaluateFcn(manifold, xfA, fixtureA, this.m_indexA, xfB, fixtureB, this.m_indexB);\n }\n\n /**\n * Updates the contact manifold and touching status.\n *\n * Note: do not assume the fixture AABBs are overlapping or are valid.\n *\n * @param listener.beginContact\n * @param listener.endContact\n * @param listener.preSolve\n */\n update(listener?: {\n beginContact(contact: Contact): void,\n endContact(contact: Contact): void,\n preSolve(contact: Contact, oldManifold: Manifold): void\n }): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n // Re-enable this contact.\n this.m_enabledFlag = true;\n\n let touching = false;\n const wasTouching = this.m_touchingFlag;\n\n const sensorA = fixtureA.m_isSensor;\n const sensorB = fixtureB.m_isSensor;\n const sensor = sensorA || sensorB;\n\n const xfA = bodyA.m_xf;\n const xfB = bodyB.m_xf;\n\n // Is this contact a sensor?\n if (sensor) {\n touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB);\n\n // Sensors don't generate manifolds.\n this.m_manifold.pointCount = 0;\n } else {\n\n oldManifold.recycle();\n oldManifold.set(this.m_manifold);\n this.m_manifold.recycle();\n\n this.evaluate(this.m_manifold, xfA, xfB);\n touching = this.m_manifold.pointCount > 0;\n\n // Match old contact ids to new contact ids and copy the\n // stored impulses to warm start the solver.\n for (let i = 0; i < this.m_manifold.pointCount; ++i) {\n const nmp = this.m_manifold.points[i];\n nmp.normalImpulse = 0.0;\n nmp.tangentImpulse = 0.0;\n\n for (let j = 0; j < oldManifold.pointCount; ++j) {\n const 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\n if (touching !== wasTouching) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n }\n\n this.m_touchingFlag = touching;\n\n const hasListener = typeof listener === \"object\" && listener !== null;\n\n if (!wasTouching && touching && hasListener) {\n listener.beginContact(this);\n }\n\n if (wasTouching && !touching && hasListener) {\n listener.endContact(this);\n }\n\n if (!sensor && touching && hasListener && oldManifold) {\n listener.preSolve(this, oldManifold);\n }\n }\n\n solvePositionConstraint(step: TimeStep): number {\n return this._solvePositionConstraint(step, null, null);\n }\n\n solvePositionConstraintTOI(step: TimeStep, toiA: Body, toiB: Body): number {\n return this._solvePositionConstraint(step, toiA, toiB);\n }\n\n private _solvePositionConstraint(step: TimeStep, toiA: Body | null, toiB: Body | null): number {\n const toi = toiA !== null && toiB !== null ? true : false;\n let minSeparation = 0.0;\n\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return minSeparation;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return minSeparation;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n let mA = 0.0;\n let iA = 0.0;\n if (!toi || (bodyA === toiA || bodyA === toiB)) {\n mA = this.p_invMassA;\n iA = this.p_invIA;\n }\n\n let mB = 0.0;\n let iB = 0.0;\n if (!toi || (bodyB === toiA || bodyB === toiB)) {\n mB = this.p_invMassB;\n iB = this.p_invIB;\n }\n\n matrix.copyVec2(cA, positionA.c);\n let aA = positionA.a;\n\n matrix.copyVec2(cB, positionB.c);\n let aB = positionB.a;\n\n // Solve normal constraints\n for (let j = 0; j < this.p_pointCount; ++j) {\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n // PositionSolverManifold\n let separation: number;\n switch (this.p_type) {\n case ManifoldType.e_circles: {\n matrix.transformVec2(pointA, xfA, this.p_localPoint);\n matrix.transformVec2(pointB, xfB, this.p_localPoints[0]);\n matrix.subVec2(normal, pointB, pointA);\n matrix.normalizeVec2(normal);\n\n matrix.combine2Vec2(point, 0.5, pointA, 0.5, pointB);\n separation = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal) - this.p_radiusA - this.p_radiusB;\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfA, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfB, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfB, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfA, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n\n // Ensure normal points from A to B\n matrix.negVec2(normal);\n break;\n }\n // todo: what should we do here?\n default: {\n return minSeparation;\n }\n }\n\n matrix.subVec2(rA, point, cA);\n matrix.subVec2(rB, point, cB);\n\n // Track max constraint error.\n minSeparation = math_min(minSeparation, separation);\n\n const baumgarte = toi ? Settings.toiBaugarte : Settings.baumgarte;\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n // Prevent large corrections and allow slop.\n const C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0.0);\n\n // Compute the effective mass.\n const rnA = matrix.crossVec2Vec2(rA, normal);\n const rnB = matrix.crossVec2Vec2(rB, normal);\n const K = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n // Compute normal impulse\n const impulse = K > 0.0 ? -C / K : 0.0;\n\n matrix.scaleVec2(P, impulse, normal);\n\n matrix.minusScaleVec2(cA, mA, P);\n aA -= iA * matrix.crossVec2Vec2(rA, P);\n\n matrix.plusScaleVec2(cB, mB, P);\n aB += iB * matrix.crossVec2Vec2(rB, P);\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n\n return minSeparation;\n }\n\n initVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const radiusA = this.p_radiusA;\n const radiusB = this.p_radiusB;\n const manifold = this.m_manifold;\n\n const mA = this.v_invMassA;\n const mB = this.v_invMassB;\n const iA = this.v_invIA;\n const iB = this.v_invIB;\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n matrix.copyVec2(cA, positionA.c);\n const aA = positionA.a;\n matrix.copyVec2(vA, velocityA.v);\n const wA = velocityA.w;\n\n matrix.copyVec2(cB, positionB.c);\n const aB = positionB.a;\n matrix.copyVec2(vB, velocityB.v);\n const wB = velocityB.w;\n\n _ASSERT && console.assert(manifold.pointCount > 0);\n\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n worldManifold.recycle();\n manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB);\n\n matrix.copyVec2(this.v_normal, worldManifold.normal);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n const wmp = worldManifold.points[j];\n\n matrix.subVec2(vcp.rA, wmp, cA);\n matrix.subVec2(vcp.rB, wmp, cB);\n\n const rnA = matrix.crossVec2Vec2(vcp.rA, this.v_normal);\n const rnB = matrix.crossVec2Vec2(vcp.rB, this.v_normal);\n\n const kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n vcp.normalMass = kNormal > 0.0 ? 1.0 / kNormal : 0.0;\n\n matrix.crossVec2Num(tangent, this.v_normal, 1.0);\n\n const rtA = matrix.crossVec2Vec2(vcp.rA, tangent);\n const rtB = matrix.crossVec2Vec2(vcp.rB, tangent);\n\n const kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB;\n\n vcp.tangentMass = kTangent > 0.0 ? 1.0 / kTangent : 0.0;\n\n // Setup a velocity bias for restitution.\n vcp.velocityBias = 0.0;\n let vRel = 0;\n vRel += matrix.dotVec2(this.v_normal, vB);\n vRel += matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wB, vcp.rB));\n vRel -= matrix.dotVec2(this.v_normal, vA);\n vRel -= matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wA, vcp.rA));\n if (vRel < -Settings.velocityThreshold) {\n vcp.velocityBias = -this.v_restitution * vRel;\n }\n }\n\n // If we have two points, then prepare the block solver.\n if (this.v_pointCount == 2 && step.blockSolve) {\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n const rn1A = matrix.crossVec2Vec2(vcp1.rA, this.v_normal);\n const rn1B = matrix.crossVec2Vec2(vcp1.rB, this.v_normal);\n const rn2A = matrix.crossVec2Vec2(vcp2.rA, this.v_normal);\n const rn2B = matrix.crossVec2Vec2(vcp2.rB, this.v_normal);\n\n const k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B;\n const k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B;\n const k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B;\n\n // Ensure a reasonable condition number.\n const k_maxConditionNumber = 1000.0;\n if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) {\n // K is safe to invert.\n this.v_K.ex.setNum(k11, k12);\n this.v_K.ey.setNum(k12, k22);\n // this.v_normalMass.set(this.v_K.getInverse());\n const a = this.v_K.ex.x;\n const b = this.v_K.ey.x;\n const c = this.v_K.ex.y;\n const d = this.v_K.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n this.v_normalMass.ex.x = det * d;\n this.v_normalMass.ey.x = -det * b;\n this.v_normalMass.ex.y = -det * c;\n this.v_normalMass.ey.y = det * a;\n\n } else {\n // The constraints are redundant, just use one.\n // TODO_ERIN use deepest?\n this.v_pointCount = 1;\n }\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n warmStartConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n matrix.combine2Vec2(P, vcp.normalImpulse, normal, vcp.tangentImpulse, tangent);\n\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n matrix.minusScaleVec2(vA, mA, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n matrix.plusScaleVec2(vB, mB, P);\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n storeConstraintImpulses(step: TimeStep): void {\n const manifold = this.m_manifold;\n for (let 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\n solveVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const positionA = bodyA.c_position;\n\n const velocityB = bodyB.c_velocity;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n const friction = this.v_friction;\n\n _ASSERT && console.assert(this.v_pointCount == 1 || this.v_pointCount == 2);\n\n // Solve tangent constraints first because non-penetration is more important\n // than friction.\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute tangent force\n const vt = matrix.dotVec2(dv, tangent) - this.v_tangentSpeed;\n let lambda = vcp.tangentMass * (-vt);\n\n // Clamp the accumulated force\n const maxFriction = friction * vcp.normalImpulse;\n const newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction);\n lambda = newImpulse - vcp.tangentImpulse;\n vcp.tangentImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, tangent);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n\n // Solve normal constraints\n if (this.v_pointCount == 1 || step.blockSolve == false) {\n for (let i = 0; i < this.v_pointCount; ++i) {\n const vcp = this.v_points[i]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute normal impulse\n const vn = matrix.dotVec2(dv, normal);\n let lambda = -vcp.normalMass * (vn - vcp.velocityBias);\n\n // Clamp the accumulated impulse\n const newImpulse = math_max(vcp.normalImpulse + lambda, 0.0);\n lambda = newImpulse - vcp.normalImpulse;\n vcp.normalImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, normal);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n } else {\n // Block solver developed in collaboration with Dirk Gregorius (back in\n // 01/07 on Box2D_Lite).\n // Build the mini LCP for this contact patch\n //\n // vn = A * x + b, vn >= 0, x >= 0 and vn_i * x_i = 0 with i = 1..2\n //\n // A = J * W * JT and J = ( -n, -r1 x n, n, r2 x n )\n // b = vn0 - velocityBias\n //\n // The system is solved using the \"Total enumeration method\" (s. Murty).\n // The complementary constraint vn_i * x_i\n // implies that we must have in any solution either vn_i = 0 or x_i = 0.\n // So for the 2D contact problem the cases\n // vn1 = 0 and vn2 = 0, x1 = 0 and x2 = 0, x1 = 0 and vn2 = 0, x2 = 0 and\n // vn1 = 0 need to be tested. The first valid\n // solution that satisfies the problem is chosen.\n //\n // In order to account of the accumulated impulse 'a' (because of the\n // iterative nature of the solver which only requires\n // that the accumulated impulse is clamped and not the incremental\n // impulse) we change the impulse variable (x_i).\n //\n // Substitute:\n //\n // x = a + d\n //\n // a := old total impulse\n // x := new total impulse\n // d := incremental impulse\n //\n // For the current iteration we extend the formula for the incremental\n // impulse\n // to compute the new total impulse:\n //\n // vn = A * d + b\n // = A * (x - a) + b\n // = A * x + b - A * a\n // = A * x + b'\n // b' = b - A * a;\n\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n matrix.setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse);\n _ASSERT && console.assert(a.x >= 0.0 && a.y >= 0.0);\n\n // Relative velocity at contact\n // let dv1 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp1.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp1.rA));\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // let dv2 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp2.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp2.rA));\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n let vn1 = matrix.dotVec2(dv1, normal);\n let vn2 = matrix.dotVec2(dv2, normal);\n\n matrix.setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias);\n\n // Compute b'\n // b.sub(Mat22.mulVec2(this.v_K, a));\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\n const k_errorTol = 1e-3;\n // NOT_USED(k_errorTol);\n\n while (true) {\n //\n // Case 1: vn = 0\n //\n // 0 = A * x + b'\n //\n // Solve for x:\n //\n // x = - inv(A) * b'\n //\n // const x = Mat22.mulVec2(this.v_normalMass, b).neg();\n matrix.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\n if (x.x >= 0.0 && x.y >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 2: vn1 = 0 and x2 = 0\n //\n // 0 = a11 * x1 + a12 * 0 + b1'\n // vn2 = a21 * x1 + a22 * 0 + b2'\n //\n x.x = -vcp1.normalMass * b.x;\n x.y = 0.0;\n vn1 = 0.0;\n vn2 = this.v_K.ex.y * x.x + b.y;\n\n if (x.x >= 0.0 && vn2 >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 3: vn2 = 0 and x1 = 0\n //\n // vn1 = a11 * 0 + a12 * x2 + b1'\n // 0 = a21 * 0 + a22 * x2 + b2'\n //\n x.x = 0.0;\n x.y = -vcp2.normalMass * b.y;\n vn1 = this.v_K.ey.x * x.y + b.x;\n vn2 = 0.0;\n\n if (x.y >= 0.0 && vn1 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 4: x1 = 0 and x2 = 0\n //\n // vn1 = b1\n // vn2 = b2;\n //\n x.x = 0.0;\n x.y = 0.0;\n vn1 = b.x;\n vn2 = b.y;\n\n if (vn1 >= 0.0 && vn2 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n break;\n }\n\n // No solution, give up. This is hit sometimes, but it doesn't seem to\n // matter.\n break;\n }\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n /** @internal */\n static addType(type1: ShapeType, type2: ShapeType, callback: EvaluateFunction): void {\n s_registers[type1] = s_registers[type1] || {};\n s_registers[type1][type2] = callback;\n }\n\n /** @internal */\n static create(fixtureA: Fixture, indexA: number, fixtureB: Fixture, indexB: number): Contact | null {\n const typeA = fixtureA.m_shape.m_type;\n const typeB = fixtureB.m_shape.m_type;\n\n const contact = contactPool.allocate();\n let 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\n // Contact creation may swap fixtures.\n fixtureA = contact.m_fixtureA;\n fixtureB = contact.m_fixtureB;\n indexA = contact.getChildIndexA();\n indexB = contact.getChildIndexB();\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n\n // Connect to body A\n contact.m_nodeA.contact = contact;\n contact.m_nodeA.other = bodyB;\n\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\n // Connect to body B\n contact.m_nodeB.contact = contact;\n contact.m_nodeB.other = bodyA;\n\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\n // Wake up the bodies\n if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n return contact;\n }\n\n /** @internal */\n static destroy(contact: Contact, listener: { endContact: (contact: Contact) => void }): void {\n const fixtureA = contact.m_fixtureA;\n const fixtureB = contact.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n if (contact.isTouching()) {\n listener.endContact(contact);\n }\n\n // Remove from body 1\n if (contact.m_nodeA.prev) {\n contact.m_nodeA.prev.next = contact.m_nodeA.next;\n }\n\n if (contact.m_nodeA.next) {\n contact.m_nodeA.next.prev = contact.m_nodeA.prev;\n }\n\n if (contact.m_nodeA == bodyA.m_contactList) {\n bodyA.m_contactList = contact.m_nodeA.next;\n }\n\n // Remove from body 2\n if (contact.m_nodeB.prev) {\n contact.m_nodeB.prev.next = contact.m_nodeB.next;\n }\n\n if (contact.m_nodeB.next) {\n contact.m_nodeB.next.prev = contact.m_nodeB.prev;\n }\n\n if (contact.m_nodeB == bodyB.m_contactList) {\n bodyB.m_contactList = contact.m_nodeB.next;\n }\n\n if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n // const typeA = fixtureA.getType();\n // const typeB = fixtureB.getType();\n\n // const destroyFcn = s_registers[typeA][typeB].destroyFcn;\n // if (typeof destroyFcn === 'function') {\n // destroyFcn(contact);\n // }\n\n contactPool.release(contact);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { Solver, ContactImpulse, TimeStep } from \"./Solver\";\nimport { Body, BodyDef } from \"./Body\";\nimport { Joint } from \"./Joint\";\nimport { Contact } from \"./Contact\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Fixture, FixtureProxy } from \"./Fixture\";\nimport { Manifold } from \"../collision/Manifold\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface WorldDef {\n /** [default: { x : 0, y : 0}] */\n gravity?: Vec2Value;\n\n /** [default: true] */\n allowSleep?: boolean;\n\n /** [default: true] */\n warmStarting?: boolean;\n\n /** [default: true] */\n continuousPhysics?: boolean;\n\n /** [default: false] */\n subStepping?: boolean;\n\n /** [default: true] */\n blockSolve?: boolean;\n\n /** @internal [8] For the velocity constraint solver. */\n velocityIterations?: number;\n\n /** @internal [3] For the position constraint solver. */\n positionIterations?: number;\n}\n\n/** @internal */ const DEFAULTS: WorldDef = {\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};\n\n/**\n * Callback function for ray casts, see {@link World.rayCast}.\n *\n * Called for each fixture found in the query.\n * The returned value replaces the ray-cast input maxFraction.\n * You control how the ray cast proceeds by returning a numeric/float value.\n * \n * - `0` to terminate the ray cast\n * - `fraction` to clip the ray cast at current point\n * - `1` don't clip the ray and continue\n * - `-1` (or anything else) to continue\n *\n * @param fixture The fixture hit by the ray\n * @param point The point of initial intersection\n * @param normal The normal vector at the point of intersection\n * @param fraction The fraction along the ray at the point of intersection\n *\n * @returns A number to update the maxFraction\n */\nexport type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number;\n\n/**\n * Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\nexport type WorldAABBQueryCallback = (fixture: Fixture) => boolean;\n\ndeclare module \"./World\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function World(deg: WorldDef): World;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function World(gravity: Vec2): World;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function World(): World;\n}\n\n/**\n * The `World` class contains the bodies and joints. It manages all aspects\n * of the simulation and allows for asynchronous queries (like AABB queries\n * and ray-casts). Much of your interactions with Planck.js will be with a\n * World object.\n */\n// @ts-expect-error\nexport class World {\n /** @internal */ m_solver: Solver;\n /** @internal */ m_broadPhase: BroadPhase;\n /** @internal */ m_contactList: Contact | null;\n /** @internal */ m_contactCount: number;\n /** @internal */ m_bodyList: Body | null;\n /** @internal */ m_bodyCount: number;\n /** @internal */ m_jointList: Joint | null;\n /** @internal */ m_jointCount: number;\n /** @internal */ m_stepComplete: boolean;\n /** @internal */ m_allowSleep: boolean;\n /** @internal */ m_gravity: Vec2;\n /** @internal */ m_clearForces: boolean;\n /** @internal */ m_newFixture: boolean;\n /** @internal */ m_locked: boolean;\n /** @internal */ m_warmStarting: boolean;\n /** @internal */ m_continuousPhysics: boolean;\n /** @internal */ m_subStepping: boolean;\n /** @internal */ m_blockSolve: boolean;\n /** @internal */ m_velocityIterations: number;\n /** @internal */ m_positionIterations: number;\n /** @internal */ m_t: number;\n\n // TODO\n /** @internal */ _listeners: {\n [key: string]: any[]\n };\n\n /**\n * @param def World definition or gravity vector.\n */\n constructor(def?: WorldDef | Vec2Value) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof World)) {\n return new World(def);\n }\n\n this.s_step = new TimeStep();\n\n\n if (!def) {\n def = {};\n } else if (Vec2.isValid(def)) {\n def = { gravity: def as Vec2 };\n }\n\n def = options(def, DEFAULTS) as WorldDef;\n\n this.m_solver = new Solver(this);\n\n this.m_broadPhase = new BroadPhase();\n\n this.m_contactList = null;\n this.m_contactCount = 0;\n\n this.m_bodyList = null;\n this.m_bodyCount = 0;\n\n this.m_jointList = null;\n this.m_jointCount = 0;\n\n this.m_stepComplete = true;\n\n this.m_allowSleep = def.allowSleep;\n this.m_gravity = Vec2.clone(def.gravity);\n\n this.m_clearForces = true;\n this.m_newFixture = false;\n this.m_locked = false;\n\n // These are for debugging the solver.\n this.m_warmStarting = def.warmStarting;\n this.m_continuousPhysics = def.continuousPhysics;\n this.m_subStepping = def.subStepping;\n\n this.m_blockSolve = def.blockSolve;\n this.m_velocityIterations = def.velocityIterations;\n this.m_positionIterations = def.positionIterations;\n\n this.m_t = 0;\n }\n\n /** @internal */\n _serialize(): object {\n const bodies = [];\n const joints = [];\n\n for (let b = this.getBodyList(); b; b = b.getNext()) {\n bodies.push(b);\n }\n\n for (let j = this.getJointList(); j; j = j.getNext()) {\n // @ts-ignore\n if (typeof j._serialize === \"function\") {\n joints.push(j);\n }\n }\n\n return {\n gravity: this.m_gravity,\n bodies,\n joints,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, context: any, restore: any): World {\n if (!data) {\n return new World();\n }\n\n const world = new World(data.gravity);\n\n if (data.bodies) {\n for (let i = data.bodies.length - 1; i >= 0; i -= 1) {\n world._addBody(restore(Body, data.bodies[i], world));\n }\n }\n\n if (data.joints) {\n for (let i = data.joints.length - 1; i >= 0; i--) {\n world.createJoint(restore(Joint, data.joints[i], world));\n }\n }\n\n return world;\n }\n\n /**\n * Get the world body list. With the returned body, use Body.getNext to get the\n * next body in the world list. A null body indicates the end of the list.\n *\n * @return the head of the world body list.\n */\n getBodyList(): Body | null {\n return this.m_bodyList;\n }\n\n /**\n * Get the world joint list. With the returned joint, use Joint.getNext to get\n * the next joint in the world list. A null joint indicates the end of the list.\n *\n * @return the head of the world joint list.\n */\n getJointList(): Joint | null {\n return this.m_jointList;\n }\n\n /**\n * Get the world contact list. With the returned contact, use Contact.getNext to\n * get the next contact in the world list. A null contact indicates the end of\n * the list.\n *\n * Warning: contacts are created and destroyed in the middle of a time step.\n * Use ContactListener to avoid missing contacts.\n *\n * @return the head of the world contact list.\n */\n getContactList(): Contact | null {\n return this.m_contactList;\n }\n\n getBodyCount(): number {\n return this.m_bodyCount;\n }\n\n getJointCount(): number {\n return this.m_jointCount;\n }\n\n /**\n * Get the number of contacts (each may have 0 or more contact points).\n */\n getContactCount(): number {\n return this.m_contactCount;\n }\n\n /**\n * Change the global gravity vector.\n */\n setGravity(gravity: Vec2Value): void {\n this.m_gravity.set(gravity);\n }\n\n /**\n * Get the global gravity vector.\n */\n getGravity(): Vec2 {\n return this.m_gravity;\n }\n\n /**\n * Is the world locked (in the middle of a time step).\n */\n isLocked(): boolean {\n return this.m_locked;\n }\n\n /**\n * Enable/disable sleep.\n */\n setAllowSleeping(flag: boolean): void {\n if (flag == this.m_allowSleep) {\n return;\n }\n\n this.m_allowSleep = flag;\n if (this.m_allowSleep == false) {\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.setAwake(true);\n }\n }\n }\n\n getAllowSleeping(): boolean {\n return this.m_allowSleep;\n }\n\n /**\n * Enable/disable warm starting. For testing.\n */\n setWarmStarting(flag: boolean): void {\n this.m_warmStarting = flag;\n }\n\n getWarmStarting(): boolean {\n return this.m_warmStarting;\n }\n\n /**\n * Enable/disable continuous physics. For testing.\n */\n setContinuousPhysics(flag: boolean): void {\n this.m_continuousPhysics = flag;\n }\n\n getContinuousPhysics(): boolean {\n return this.m_continuousPhysics;\n }\n\n /**\n * Enable/disable single stepped continuous physics. For testing.\n */\n setSubStepping(flag: boolean): void {\n this.m_subStepping = flag;\n }\n\n getSubStepping(): boolean {\n return this.m_subStepping;\n }\n\n /**\n * Set flag to control automatic clearing of forces after each time step.\n */\n setAutoClearForces(flag: boolean): void {\n this.m_clearForces = flag;\n }\n\n /**\n * Get the flag that controls automatic clearing of forces after each time step.\n */\n getAutoClearForces(): boolean {\n return this.m_clearForces;\n }\n\n /**\n * Manually clear the force buffer on all bodies. By default, forces are cleared\n * automatically after each call to step. The default behavior is modified by\n * calling setAutoClearForces. The purpose of this function is to support\n * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step\n * under a variable frame-rate. When you perform sub-stepping you will disable\n * auto clearing of forces and instead call clearForces after all sub-steps are\n * complete in one pass of your game loop.\n *\n * See {@link World.setAutoClearForces}\n */\n clearForces(): void {\n for (let body = this.m_bodyList; body; body = body.getNext()) {\n body.m_force.setZero();\n body.m_torque = 0.0;\n }\n }\n\n /**\n * Query the world for all fixtures that potentially overlap the provided AABB.\n *\n * @param aabb The query box.\n * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\n queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n this.m_broadPhase.query(aabb, function(proxyId: number): boolean { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n return callback(proxy.fixture);\n });\n }\n\n /**\n * Ray-cast the world for all fixtures in the path of the ray. Your callback\n * controls whether you get the closest point, any point, or n-points. The\n * ray-cast ignores shapes that contain the starting point.\n *\n * @param point1 The ray starting point\n * @param point2 The ray ending point\n * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value.\n */\n rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n\n this.m_broadPhase.rayCast({\n maxFraction : 1.0,\n p1 : point1,\n p2 : point2\n }, function(input: RayCastInput, proxyId: number): number { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n const fixture = proxy.fixture;\n const index = proxy.childIndex;\n // @ts-ignore\n const output: RayCastOutput = {}; // TODO GC\n const hit = fixture.rayCast(output, input, index);\n if (hit) {\n const fraction = output.fraction;\n const point = Vec2.add(Vec2.mulNumVec2((1.0 - fraction), input.p1), Vec2.mulNumVec2(fraction, input.p2));\n return callback(fixture, point, output.normal, fraction);\n }\n return input.maxFraction;\n });\n }\n\n /**\n * Get the number of broad-phase proxies.\n */\n getProxyCount(): number {\n return this.m_broadPhase.getProxyCount();\n }\n\n /**\n * Get the height of broad-phase dynamic tree.\n */\n getTreeHeight(): number {\n return this.m_broadPhase.getTreeHeight();\n }\n\n /**\n * Get the balance of broad-phase dynamic tree.\n */\n getTreeBalance(): number {\n return this.m_broadPhase.getTreeBalance();\n }\n\n /**\n * Get the quality metric of broad-phase dynamic tree. The smaller the better.\n * The minimum is 1.\n */\n getTreeQuality(): number {\n return this.m_broadPhase.getTreeQuality();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The body shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n _ASSERT && console.assert(this.m_locked == false);\n if (this.m_locked) {\n return;\n }\n\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.m_xf.p.sub(newOrigin);\n b.m_sweep.c0.sub(newOrigin);\n b.m_sweep.c.sub(newOrigin);\n }\n\n for (let j = this.m_jointList; j; j = j.m_next) {\n j.shiftOrigin(newOrigin);\n }\n\n this.m_broadPhase.shiftOrigin(newOrigin);\n }\n\n /** @internal Used for deserialize. */\n _addBody(body: Body): void {\n _ASSERT && console.assert(this.isLocked() === false);\n if (this.isLocked()) {\n return;\n }\n\n // Add to world doubly linked list.\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\n /**\n * Create a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This function is locked during callbacks.\n */\n createBody(def?: BodyDef): Body;\n createBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createBody(arg1?, arg2?) {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n let def: BodyDef = {};\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\n const body = new Body(this, def);\n this._addBody(body);\n return body;\n }\n\n createDynamicBody(def?: BodyDef): Body;\n createDynamicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createDynamicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n createKinematicBody(def?: BodyDef): Body;\n createKinematicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createKinematicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n /**\n * Destroy a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This automatically deletes all associated shapes and joints.\n *\n * Warning: This function is locked during callbacks.\n */\n destroyBody(b: Body): boolean {\n _ASSERT && console.assert(this.m_bodyCount > 0);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n if (b.m_destroyed) {\n return false;\n }\n\n // Delete the attached joints.\n let je = b.m_jointList;\n while (je) {\n const je0 = je;\n je = je.next;\n\n this.publish(\"remove-joint\", je0.joint);\n this.destroyJoint(je0.joint);\n\n b.m_jointList = je;\n }\n b.m_jointList = null;\n\n // Delete the attached contacts.\n let ce = b.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n\n this.destroyContact(ce0.contact);\n\n b.m_contactList = ce;\n }\n b.m_contactList = null;\n\n // Delete the attached fixtures. This destroys broad-phase proxies.\n let f = b.m_fixtureList;\n while (f) {\n const f0 = f;\n f = f.m_next;\n\n this.publish(\"remove-fixture\", f0);\n f0.destroyProxies(this.m_broadPhase);\n\n b.m_fixtureList = f;\n }\n b.m_fixtureList = null;\n\n // Remove world body list.\n if (b.m_prev) {\n b.m_prev.m_next = b.m_next;\n }\n\n if (b.m_next) {\n b.m_next.m_prev = b.m_prev;\n }\n\n if (b == this.m_bodyList) {\n this.m_bodyList = b.m_next;\n }\n\n b.m_destroyed = true;\n\n --this.m_bodyCount;\n\n this.publish(\"remove-body\", b);\n\n return true;\n }\n\n /**\n * Create a joint to constrain bodies together. No reference to the definition\n * is retained. This may cause the connected bodies to cease colliding.\n *\n * Warning: This function is locked during callbacks.\n */\n createJoint(joint: T): T | null {\n _ASSERT && console.assert(!!joint.m_bodyA);\n _ASSERT && console.assert(!!joint.m_bodyB);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n // Connect to the world list.\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\n // Connect to the bodies' doubly linked lists.\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\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\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n for (let edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) {\n if (edge.other == joint.m_bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n }\n }\n\n // Note: creating a joint doesn't wake the bodies.\n\n return joint;\n }\n\n /**\n * Destroy a joint. This may cause the connected bodies to begin colliding.\n * Warning: This function is locked during callbacks.\n */\n destroyJoint(joint: Joint): void {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n // Remove from the doubly linked list.\n if (joint.m_prev) {\n joint.m_prev.m_next = joint.m_next;\n }\n\n if (joint.m_next) {\n joint.m_next.m_prev = joint.m_prev;\n }\n\n if (joint == this.m_jointList) {\n this.m_jointList = joint.m_next;\n }\n\n // Disconnect from bodies.\n const bodyA = joint.m_bodyA;\n const bodyB = joint.m_bodyB;\n\n // Wake up connected bodies.\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n\n // Remove from body 1.\n if (joint.m_edgeA.prev) {\n joint.m_edgeA.prev.next = joint.m_edgeA.next;\n }\n\n if (joint.m_edgeA.next) {\n joint.m_edgeA.next.prev = joint.m_edgeA.prev;\n }\n\n if (joint.m_edgeA == bodyA.m_jointList) {\n bodyA.m_jointList = joint.m_edgeA.next;\n }\n\n joint.m_edgeA.prev = null;\n joint.m_edgeA.next = null;\n\n // Remove from body 2\n if (joint.m_edgeB.prev) {\n joint.m_edgeB.prev.next = joint.m_edgeB.next;\n }\n\n if (joint.m_edgeB.next) {\n joint.m_edgeB.next.prev = joint.m_edgeB.prev;\n }\n\n if (joint.m_edgeB == bodyB.m_jointList) {\n bodyB.m_jointList = joint.m_edgeB.next;\n }\n\n joint.m_edgeB.prev = null;\n joint.m_edgeB.next = null;\n\n _ASSERT && console.assert(this.m_jointCount > 0);\n --this.m_jointCount;\n\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n let edge = bodyB.getContactList();\n while (edge) {\n if (edge.other == bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n }\n\n this.publish(\"remove-joint\", joint);\n }\n\n /** @internal */\n s_step: TimeStep; // reuse\n\n /**\n * Take a time step. This performs collision detection, integration, and\n * constraint solution.\n *\n * Broad-phase, narrow-phase, solve and solve time of impacts.\n *\n * @param timeStep Time step, this should not vary.\n */\n step(timeStep: number, velocityIterations?: number, positionIterations?: number): void {\n this.publish(\"pre-step\", timeStep);\n\n if ((velocityIterations | 0) !== velocityIterations) {\n // TODO: remove this in future\n velocityIterations = 0;\n }\n\n velocityIterations = velocityIterations || this.m_velocityIterations;\n positionIterations = positionIterations || this.m_positionIterations;\n\n // If new fixtures were added, we need to find the new contacts.\n if (this.m_newFixture) {\n this.findNewContacts();\n this.m_newFixture = false;\n }\n\n this.m_locked = true;\n\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\n // Update contacts. This is where some contacts are destroyed.\n this.updateContacts();\n\n // Integrate velocities, solve velocity constraints, and integrate positions.\n if (this.m_stepComplete && timeStep > 0.0) {\n this.m_solver.solveWorld(this.s_step);\n\n // Synchronize fixtures, check for out of range bodies.\n for (let b = this.m_bodyList; b; b = b.getNext()) {\n // If a body was not in an island then it did not move.\n if (b.m_islandFlag == false) {\n continue;\n }\n\n if (b.isStatic()) {\n continue;\n }\n\n // Update fixtures (for broad-phase).\n b.synchronizeFixtures();\n }\n // Look for new contacts.\n this.findNewContacts();\n }\n\n // Handle TOI events.\n if (this.m_continuousPhysics && timeStep > 0.0) {\n this.m_solver.solveWorldTOI(this.s_step);\n }\n\n if (this.m_clearForces) {\n this.clearForces();\n }\n\n this.m_locked = false;\n\n this.publish(\"post-step\", timeStep);\n }\n\n /**\n * @internal\n * Call this method to find new contacts.\n */\n findNewContacts(): void {\n this.m_broadPhase.updatePairs(\n (proxyA: FixtureProxy, proxyB: FixtureProxy) => this.createContact(proxyA, proxyB)\n );\n }\n\n /**\n * @internal\n * Callback for broad-phase.\n */\n createContact(proxyA: FixtureProxy, proxyB: FixtureProxy): void {\n const fixtureA = proxyA.fixture;\n const fixtureB = proxyB.fixture;\n\n const indexA = proxyA.childIndex;\n const indexB = proxyB.childIndex;\n\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Are the fixtures on the same body?\n if (bodyA == bodyB) {\n return;\n }\n\n // TODO_ERIN use a hash table to remove a potential bottleneck when both\n // bodies have a lot of contacts.\n // Does a contact already exist?\n let edge = bodyB.getContactList(); // ContactEdge\n while (edge) {\n if (edge.other == bodyA) {\n const fA = edge.contact.getFixtureA();\n const fB = edge.contact.getFixtureB();\n const iA = edge.contact.getChildIndexA();\n const iB = edge.contact.getChildIndexB();\n\n if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) {\n // A contact already exists.\n return;\n }\n\n if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) {\n // A contact already exists.\n return;\n }\n }\n\n edge = edge.next;\n }\n\n if (bodyB.shouldCollide(bodyA) == false) {\n return;\n }\n if (fixtureB.shouldCollide(fixtureA) == false) {\n return;\n }\n\n // Call the factory.\n const contact = Contact.create(fixtureA, indexA, fixtureB, indexB);\n if (contact == null) {\n return;\n }\n\n // Insert into the world.\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\n ++this.m_contactCount;\n }\n\n /**\n * @internal\n * Removes old non-overlapping contacts, applies filters and updates contacts.\n */\n updateContacts(): void {\n // Update awake contacts.\n let c: Contact;\n let next_c = this.m_contactList;\n while (c = next_c) {\n next_c = c.getNext();\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Is this contact flagged for filtering?\n if (c.m_filterFlag) {\n if (bodyB.shouldCollide(bodyA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n if (fixtureB.shouldCollide(fixtureA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n // Clear the filtering flag.\n c.m_filterFlag = false;\n }\n\n const activeA = bodyA.isAwake() && !bodyA.isStatic();\n const activeB = bodyB.isAwake() && !bodyB.isStatic();\n\n // At least one body must be awake and it must be dynamic or kinematic.\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const proxyIdA = fixtureA.m_proxies[indexA].proxyId;\n const proxyIdB = fixtureB.m_proxies[indexB].proxyId;\n const overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB);\n\n // Here we destroy contacts that cease to overlap in the broad-phase.\n if (overlap == false) {\n this.destroyContact(c);\n continue;\n }\n\n // The contact persists.\n c.update(this);\n }\n }\n\n /** @internal */\n destroyContact(contact: Contact): void {\n // Remove from the world.\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\n Contact.destroy(contact, this);\n\n --this.m_contactCount;\n }\n\n\n /**\n * Called when two fixtures begin to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n /**\n * Called when two fixtures cease to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"end-contact\", listener: (contact: Contact) => void): World;\n /**\n * This is called after a contact is updated. This allows you to inspect a\n * contact before it goes to the solver. If you are careful, you can modify the\n * contact manifold (e.g. disable contact). A copy of the old manifold is\n * provided so that you can detect changes. Note: this is called only for awake\n * bodies. Note: this is called even when the number of contact points is zero.\n * Note: this is not called for sensors. Note: if you set the number of contact\n * points to zero, you will not get an end-contact callback. However, you may get\n * a begin-contact callback the next step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n /**\n * This lets you inspect a contact after the solver is finished. This is useful\n * for inspecting impulses. Note: the contact manifold does not include time of\n * impact impulses, which can be arbitrarily large if the sub-step is small.\n * Hence the impulse is provided explicitly in a separate data structure. Note:\n * this is only called for contacts that are touching, solid, and awake.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n /** Listener is called whenever a body is removed. */\n on(name: \"remove-body\", listener: (body: Body) => void): World;\n /** Listener is called whenever a joint is removed implicitly or explicitly. */\n on(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n /** Listener is called whenever a fixture is removed implicitly or explicitly. */\n on(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Register an event listener.\n */\n // tslint:disable-next-line:typedef\n on(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\n off(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n off(name: \"end-contact\", listener: (contact: Contact) => void): World;\n off(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n off(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n off(name: \"remove-body\", listener: (body: Body) => void): World;\n off(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n off(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Remove an event listener.\n */\n // tslint:disable-next-line:typedef\n off(name, listener) {\n if (typeof name !== \"string\" || typeof listener !== \"function\") {\n return this;\n }\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return this;\n }\n const index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n return this;\n }\n\n publish(name: string, arg1?: any, arg2?: any, arg3?: any): number {\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return 0;\n }\n for (let l = 0; l < listeners.length; l++) {\n listeners[l].call(this, arg1, arg2, arg3);\n }\n return listeners.length;\n }\n\n /** @internal */\n beginContact(contact: Contact): void {\n this.publish(\"begin-contact\", contact);\n }\n\n /** @internal */\n endContact(contact: Contact): void {\n this.publish(\"end-contact\", contact);\n }\n\n /** @internal */\n preSolve(contact: Contact, oldManifold: Manifold): void {\n this.publish(\"pre-solve\", contact, oldManifold);\n }\n\n /** @internal */\n postSolve(contact: Contact, impulse: ContactImpulse): void {\n this.publish(\"post-solve\", contact, impulse);\n }\n\n /**\n * Joints and fixtures are destroyed when their associated body is destroyed.\n * Register a destruction listener so that you may nullify references to these\n * joints and shapes.\n *\n * `function(object)` is called when any joint or fixture is about to\n * be destroyed due to the destruction of one of its attached or parent bodies.\n */\n\n /**\n * Register a contact filter to provide specific control over collision.\n * Otherwise the default filter is used (defaultFilter). The listener is owned\n * by you and must remain in scope.\n *\n * Moved to Fixture.\n */\n}","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/** 3D vector */\nexport interface Vec3Value {\n x: number;\n y: number;\n z: number;\n}\n\ndeclare module \"./Vec3\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec3(x: number, y: number, z: number): Vec3;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec3(obj: Vec3Value): Vec3;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec3(): Vec3;\n}\n\n/** 3D vector */\n// @ts-expect-error\nexport class Vec3 {\n x: number;\n y: number;\n z: number;\n\n constructor(x: number, y: number, z: number);\n constructor(obj: Vec3Value);\n constructor();\n constructor(x?, y?, z?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec3)) {\n return new Vec3(x, y, z);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n } else {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n _ASSERT && Vec3.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y,\n z: this.z\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = data.x;\n obj.y = data.y;\n obj.z = data.z;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number, z: number): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = x;\n obj.y = y;\n obj.z = z;\n return obj;\n }\n\n static zero(): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = 0;\n obj.y = 0;\n obj.z = 0;\n return obj;\n }\n\n static clone(v: Vec3Value): Vec3 {\n _ASSERT && Vec3.assert(v);\n return Vec3.neo(v.x, v.y, v.z);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /** Does this vector contain finite coordinates? */\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec3.isValid(o), \"Invalid Vec3!\", o);\n }\n\n setZero(): Vec3 {\n this.x = 0.0;\n this.y = 0.0;\n this.z = 0.0;\n return this;\n }\n\n set(x: number, y: number, z: number): Vec3 {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n\n add(w: Vec3Value): Vec3 {\n this.x += w.x;\n this.y += w.y;\n this.z += w.z;\n return this;\n }\n\n sub(w: Vec3Value): Vec3 {\n this.x -= w.x;\n this.y -= w.y;\n this.z -= w.z;\n return this;\n }\n\n mul(m: number): Vec3 {\n this.x *= m;\n this.y *= m;\n this.z *= m;\n return this;\n }\n\n static areEqual(v: Vec3Value, w: Vec3Value): boolean {\n _ASSERT && Vec3.assert(v);\n _ASSERT && Vec3.assert(w);\n return v === w ||\n typeof v === \"object\" && v !== null &&\n typeof w === \"object\" && w !== null &&\n v.x === w.x && v.y === w.y && v.z === w.z;\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n }\n\n /** Cross product on two vectors */\n static cross(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(\n v.y * w.z - v.z * w.y,\n v.z * w.x - v.x * w.z,\n v.x * w.y - v.y * w.x\n );\n }\n\n static add(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x + w.x, v.y + w.y, v.z + w.z);\n }\n\n static sub(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x - w.x, v.y - w.y, v.z - w.z);\n }\n\n static mul(v: Vec3Value, m: number): Vec3 {\n return new Vec3(m * v.x, m * v.y, m * v.z);\n }\n\n neg(): Vec3 {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n\n static neg(v: Vec3Value): Vec3 {\n return new Vec3(-v.x, -v.y, -v.z);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Shape } from \"../Shape\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { AABB, AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\ndeclare module \"./EdgeShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function EdgeShape(v1?: Vec2Value, v2?: Vec2Value): EdgeShape;\n}\n\n/**\n * A line segment (edge) shape. These can be connected in chains or loops to\n * other edge shapes. The connectivity information is used to ensure correct\n * contact normals.\n */\n// @ts-expect-error\nexport class EdgeShape extends Shape {\n static TYPE = \"edge\" as const;\n /** @hidden */ m_type: \"edge\";\n\n /** @hidden */ m_radius: number;\n\n // These are the edge vertices\n /** @hidden */ m_vertex1: Vec2;\n /** @hidden */ m_vertex2: Vec2;\n\n // Optional adjacent vertices. These are used for smooth collision.\n // Used by chain shape.\n /** @hidden */ m_vertex0: Vec2;\n /** @hidden */ m_vertex3: Vec2;\n /** @hidden */ m_hasVertex0: boolean;\n /** @hidden */ m_hasVertex3: boolean;\n\n constructor(v1?: Vec2Value, v2?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof EdgeShape)) {\n return new EdgeShape(v1, v2);\n }\n\n super();\n\n this.m_type = EdgeShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n\n this.m_vertex1 = v1 ? Vec2.clone(v1) : Vec2.zero();\n this.m_vertex2 = v2 ? Vec2.clone(v2) : Vec2.zero();\n\n this.m_vertex0 = Vec2.zero();\n this.m_vertex3 = Vec2.zero();\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertex1: this.m_vertex1,\n vertex2: this.m_vertex2,\n\n vertex0: this.m_vertex0,\n vertex3: this.m_vertex3,\n hasVertex0: this.m_hasVertex0,\n hasVertex3: this.m_hasVertex3,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): EdgeShape {\n const shape = new EdgeShape(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\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getType(): \"edge\" {\n return this.m_type;\n }\n\n /** @internal @deprecated */\n setNext(v?: Vec2Value): EdgeShape {\n return this.setNextVertex(v);\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n setNextVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex3.setVec2(v);\n this.m_hasVertex3 = true;\n } else {\n this.m_vertex3.setZero();\n this.m_hasVertex3 = false;\n }\n return this;\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n getNextVertex(): Vec2 {\n return this.m_vertex3;\n }\n\n /** @internal @deprecated */\n setPrev(v?: Vec2Value): EdgeShape {\n return this.setPrevVertex(v);\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n setPrevVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex0.setVec2(v);\n this.m_hasVertex0 = true;\n } else {\n this.m_vertex0.setZero();\n this.m_hasVertex0 = false;\n }\n return this;\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n getPrevVertex(): Vec2 {\n return this.m_vertex0;\n }\n\n /**\n * Set this as an isolated edge.\n */\n _set(v1: Vec2Value, v2: Vec2Value): EdgeShape {\n this.m_vertex1.setVec2(v1);\n this.m_vertex2.setVec2(v2);\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n return this;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): EdgeShape {\n const clone = new EdgeShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // p = p1 + t * d\n // v = v1 + s * e\n // p1 + t * d = v1 + s * e\n // s * e - t * d = p1 - v1\n\n // NOT_USED(childIndex);\n\n // Put the ray into the edge's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n const v1 = this.m_vertex1;\n const v2 = this.m_vertex2;\n const e = Vec2.sub(v2, v1);\n const normal = Vec2.neo(e.y, -e.x);\n normal.normalize();\n\n // q = p1 + t * d\n // dot(normal, q - v1) = 0\n // dot(normal, p1 - v1) + t * dot(normal, d) = 0\n const numerator = Vec2.dot(normal, Vec2.sub(v1, p1));\n const denominator = Vec2.dot(normal, d);\n\n if (denominator == 0.0) {\n return false;\n }\n\n const t = numerator / denominator;\n if (t < 0.0 || input.maxFraction < t) {\n return false;\n }\n\n const q = Vec2.add(p1, Vec2.mulNumVec2(t, d));\n\n // q = v1 + s * r\n // s = dot(q - v1, r) / dot(r, r)\n const r = Vec2.sub(v2, v1);\n const rr = Vec2.dot(r, r);\n if (rr == 0.0) {\n return false;\n }\n\n const s = Vec2.dot(Vec2.sub(q, v1), r) / rr;\n if (s < 0.0 || 1.0 < s) {\n return false;\n }\n\n output.fraction = t;\n if (numerator > 0.0) {\n output.normal = Rot.mulVec2(xf.q, normal).neg();\n } else {\n output.normal = Rot.mulVec2(xf.q, normal);\n }\n return true;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n matrix.transformVec2(v1, xf, this.m_vertex1);\n matrix.transformVec2(v2, xf, this.m_vertex2);\n\n AABB.combinePoints(aabb, v1, v2);\n AABB.extend(aabb, this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Edge = EdgeShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { AABBValue, RayCastOutput, RayCastInput, AABB } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\nimport { EdgeShape } from \"./EdgeShape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\ndeclare module \"./ChainShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function ChainShape(vertices?: Vec2Value[], loop?: boolean): ChainShape;\n}\n\n/**\n * A chain shape is a free form sequence of line segments. The chain has\n * two-sided collision, so you can use inside and outside collision. Therefore,\n * you may use any winding order. Connectivity information is used to create\n * smooth collisions.\n *\n * WARNING: The chain will not collide properly if there are self-intersections.\n */\n// @ts-expect-error\nexport class ChainShape extends Shape {\n static TYPE = \"chain\" as const;\n /** @hidden */ m_type: \"chain\";\n\n /** @hidden */ m_radius: number;\n\n /** @hidden */ m_vertices: Vec2[];\n /** @hidden */ m_count: number;\n /** @hidden */ m_prevVertex: Vec2 | null;\n /** @hidden */ m_nextVertex: Vec2 | null;\n /** @hidden */ m_hasPrevVertex: boolean;\n /** @hidden */ m_hasNextVertex: boolean;\n\n /** @hidden */ m_isLoop: boolean;\n\n constructor(vertices?: Vec2Value[], loop?: boolean) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof ChainShape)) {\n return new ChainShape(vertices, loop);\n }\n\n super();\n\n this.m_type = ChainShape.TYPE;\n this.m_radius = Settings.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\n this.m_isLoop = !!loop;\n\n if (vertices && vertices.length) {\n if (loop) {\n this._createLoop(vertices);\n } else {\n this._createChain(vertices);\n }\n }\n }\n\n /** @internal */\n _serialize(): object {\n const data = {\n type: this.m_type,\n vertices: this.m_vertices,\n isLoop: this.m_isLoop,\n hasPrevVertex: this.m_hasPrevVertex,\n hasNextVertex: this.m_hasNextVertex,\n prevVertex: null as Vec2 | null,\n nextVertex: null as Vec2 | 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\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): ChainShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n const shape = new ChainShape(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\n // clear() {\n // this.m_vertices.length = 0;\n // this.m_count = 0;\n // }\n\n getType(): \"chain\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal\n * Create a loop. This automatically adjusts connectivity.\n *\n * @param vertices an array of vertices, these are copied\n * @param count the vertex count\n */\n _createLoop(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 3);\n if (vertices.length < 3) {\n return;\n }\n\n for (let i = 1; i < vertices.length; ++i) {\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n // If the code crashes here, it means your vertices are too close together.\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_vertices = [];\n this.m_count = vertices.length + 1;\n for (let 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\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\n /**\n * @internal\n * Create a chain with isolated end vertices.\n *\n * @param vertices an array of vertices, these are copied\n */\n _createChain(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 2);\n for (let i = 1; i < vertices.length; ++i) {\n // If the code crashes here, it means your vertices are too close together.\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_count = vertices.length;\n for (let i = 0; i < vertices.length; ++i) {\n this.m_vertices[i] = Vec2.clone(vertices[i]);\n }\n\n this.m_hasPrevVertex = false;\n this.m_hasNextVertex = false;\n this.m_prevVertex = null;\n this.m_nextVertex = null;\n return this;\n }\n\n /** @hidden */\n _reset(): void {\n if (this.m_isLoop) {\n this._createLoop(this.m_vertices);\n } else {\n this._createChain(this.m_vertices);\n }\n }\n\n /**\n * Establish connectivity to a vertex that precedes the first vertex. Don't call\n * this for loops.\n */\n setPrevVertex(prevVertex: Vec2): void {\n // todo: copy or reference\n this.m_prevVertex = prevVertex;\n this.m_hasPrevVertex = true;\n }\n\n getPrevVertex(): Vec2 {\n return this.m_prevVertex;\n }\n\n /**\n * Establish connectivity to a vertex that follows the last vertex. Don't call\n * this for loops.\n */\n setNextVertex(nextVertex: Vec2): void {\n // todo: copy or reference\n this.m_nextVertex = nextVertex;\n this.m_hasNextVertex = true;\n }\n\n getNextVertex(): Vec2 {\n return this.m_nextVertex;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): ChainShape {\n const clone = new ChainShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): number {\n // edge count = vertex count - 1\n return this.m_count - 1;\n }\n\n // Get a child edge.\n getChildEdge(edge: EdgeShape, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count - 1);\n edge.m_type = EdgeShape.TYPE;\n edge.m_radius = this.m_radius;\n\n edge.m_vertex1 = this.m_vertices[childIndex];\n edge.m_vertex2 = this.m_vertices[childIndex + 1];\n\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\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\n getVertex(index: number): Vec2 {\n _ASSERT && console.assert(0 <= index && index <= this.m_count);\n if (index < this.m_count) {\n return this.m_vertices[index];\n } else {\n return this.m_vertices[0];\n }\n }\n\n isLoop(): boolean {\n return this.m_isLoop;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * This always return false.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n const edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1));\n return edgeShape.rayCast(output, input, xf, 0);\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n matrix.transformVec2(v1, xf, this.getVertex(childIndex));\n matrix.transformVec2(v2, xf, this.getVertex(childIndex + 1));\n\n AABB.combinePoints(aabb, v1, v2);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * Chains have zero mass.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.zeroVec2(massData.center);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\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}\n\nexport const Chain = ChainShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const center = matrix.vec2(0, 0);\n/** @internal */ const s = matrix.vec2(0, 0);\n\ndeclare module \"./PolygonShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PolygonShape(vertices?: Vec2Value[]): PolygonShape;\n}\n\n/**\n * A convex polygon. It is assumed that the interior of the polygon is to the\n * left of each edge. Polygons have a maximum number of vertices equal to\n * Settings.maxPolygonVertices. In most cases you should not need many vertices\n * for a convex polygon. extends Shape\n */\n// @ts-expect-error\nexport class PolygonShape extends Shape {\n static TYPE = \"polygon\" as const;\n /** @hidden */ m_type: \"polygon\";\n\n /** @hidden */ m_centroid: Vec2;\n /** @hidden */ m_vertices: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_normals: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_count: number;\n /** @hidden */ m_radius: number;\n\n constructor(vertices?: Vec2Value[]) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PolygonShape)) {\n return new PolygonShape(vertices);\n }\n\n super();\n\n this.m_type = PolygonShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n this.m_centroid = Vec2.zero();\n this.m_vertices = [];\n this.m_normals = [];\n this.m_count = 0;\n\n if (vertices && vertices.length) {\n this._set(vertices);\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertices: this.m_vertices,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): PolygonShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n\n const shape = new PolygonShape(vertices);\n return shape;\n }\n\n getType(): \"polygon\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): PolygonShape {\n const clone = new PolygonShape();\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 (let i = 0; i < this.m_count; i++) {\n clone.m_vertices.push(this.m_vertices[i].clone());\n }\n for (let i = 0; i < this.m_normals.length; i++) {\n clone.m_normals.push(this.m_normals[i].clone());\n }\n return clone;\n }\n\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /** @hidden */\n _reset(): void {\n this._set(this.m_vertices);\n }\n\n /**\n * @internal\n *\n * Create a convex hull from the given array of local points. The count must be\n * in the range [3, Settings.maxPolygonVertices].\n *\n * Warning: the points may be re-ordered, even if they form a convex polygon\n * Warning: collinear points are handled but not removed. Collinear points may\n * lead to poor stacking behavior.\n */\n _set(vertices: Vec2Value[]): void {\n _ASSERT && console.assert(3 <= vertices.length && vertices.length <= Settings.maxPolygonVertices);\n if (vertices.length < 3) {\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n let n = math_min(vertices.length, Settings.maxPolygonVertices);\n\n // Perform welding and copy vertices into local buffer.\n const ps: Vec2[] = []; // [Settings.maxPolygonVertices];\n for (let i = 0; i < n; ++i) {\n const v = vertices[i];\n\n let unique = true;\n for (let j = 0; j < ps.length; ++j) {\n if (Vec2.distanceSquared(v, ps[j]) < 0.25 * Settings.linearSlopSquared) {\n unique = false;\n break;\n }\n }\n\n if (unique) {\n ps.push(Vec2.clone(v));\n }\n }\n\n n = ps.length;\n if (n < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n // Create the convex hull using the Gift wrapping algorithm\n // http://en.wikipedia.org/wiki/Gift_wrapping_algorithm\n\n // Find the right most point on the hull (in case of multiple points bottom most is used)\n let i0 = 0;\n let x0 = ps[0].x;\n for (let i = 1; i < n; ++i) {\n const x = ps[i].x;\n if (x > x0 || (x === x0 && ps[i].y < ps[i0].y)) {\n i0 = i;\n x0 = x;\n }\n }\n\n const hull = [] as number[]; // [Settings.maxPolygonVertices];\n let m = 0;\n let ih = i0;\n\n while (true) {\n _ASSERT && console.assert(m < Settings.maxPolygonVertices);\n hull[m] = ih;\n\n let ie = 0;\n for (let j = 1; j < n; ++j) {\n if (ie === ih) {\n ie = j;\n continue;\n }\n\n const r = Vec2.sub(ps[ie], ps[hull[m]]);\n const v = Vec2.sub(ps[j], ps[hull[m]]);\n const c = Vec2.crossVec2Vec2(r, v);\n // c < 0 means counter-clockwise wrapping, c > 0 means clockwise wrapping\n if (c < 0.0) {\n ie = j;\n }\n\n // Collinearity check\n if (c === 0.0 && v.lengthSquared() > r.lengthSquared()) {\n ie = j;\n }\n }\n\n ++m;\n ih = ie;\n\n if (ie === i0) {\n break;\n }\n }\n\n if (m < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n this.m_count = m;\n\n // Copy vertices.\n this.m_vertices = [];\n for (let i = 0; i < m; ++i) {\n this.m_vertices[i] = ps[hull[i]];\n }\n\n // Compute normals. Ensure the edges have non-zero length.\n for (let i = 0; i < m; ++i) {\n const i1 = i;\n const i2 = i + 1 < m ? i + 1 : 0;\n const edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]);\n _ASSERT && console.assert(edge.lengthSquared() > EPSILON * EPSILON);\n this.m_normals[i] = Vec2.crossVec2Num(edge, 1.0);\n this.m_normals[i].normalize();\n }\n\n // Compute the polygon centroid.\n this.m_centroid = computeCentroid(this.m_vertices, m);\n }\n\n /** @internal */ _setAsBox(hx: number, hy: number, center?: Vec2Value, angle?: number): void {\n // start with right-bottom, counter-clockwise, as in Gift wrapping algorithm in PolygonShape._set()\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\n this.m_normals[0] = Vec2.neo(1.0, 0.0);\n this.m_normals[1] = Vec2.neo(0.0, 1.0);\n this.m_normals[2] = Vec2.neo(-1.0, 0.0);\n this.m_normals[3] = Vec2.neo(0.0, -1.0);\n\n this.m_count = 4;\n\n if (center && Vec2.isValid(center)) {\n angle = angle || 0;\n\n matrix.copyVec2(this.m_centroid, center);\n\n const xf = Transform.identity();\n xf.p.setVec2(center);\n xf.q.setAngle(angle);\n\n // Transform vertices and normals.\n for (let i = 0; i < this.m_count; ++i) {\n this.m_vertices[i] = Transform.mulVec2(xf, this.m_vertices[i]);\n this.m_normals[i] = Rot.mulVec2(xf.q, this.m_normals[i]);\n }\n }\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const pLocal = matrix.detransformVec2(temp, xf, p);\n\n for (let i = 0; i < this.m_count; ++i) {\n const dot = matrix.dotVec2(this.m_normals[i], pLocal) - matrix.dotVec2(this.m_normals[i], this.m_vertices[i]);\n if (dot > 0.0) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n\n // Put the ray into the polygon's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n let lower = 0.0;\n let upper = input.maxFraction;\n\n let index = -1;\n\n for (let i = 0; i < this.m_count; ++i) {\n // p = p1 + a * d\n // dot(normal, p - v) = 0\n // dot(normal, p1 - v) + a * dot(normal, d) = 0\n const numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1));\n const denominator = Vec2.dot(this.m_normals[i], d);\n\n if (denominator == 0.0) {\n if (numerator < 0.0) {\n return false;\n }\n } else {\n // Note: we want this predicate without division:\n // lower < numerator / denominator, where denominator < 0\n // Since denominator < 0, we have to flip the inequality:\n // lower < numerator / denominator <==> denominator * lower > numerator.\n if (denominator < 0.0 && numerator < lower * denominator) {\n // Increase lower.\n // The segment enters this half-space.\n lower = numerator / denominator;\n index = i;\n } else if (denominator > 0.0 && numerator < upper * denominator) {\n // Decrease upper.\n // The segment exits this half-space.\n upper = numerator / denominator;\n }\n }\n\n // The use of epsilon here causes the assert on lower to trip\n // in some cases. Apparently the use of epsilon was to make edge\n // shapes work, but now those are handled separately.\n // if (upper < lower - matrix.EPSILON)\n if (upper < lower) {\n return false;\n }\n }\n\n _ASSERT && console.assert(0.0 <= lower && lower <= input.maxFraction);\n\n if (index >= 0) {\n output.fraction = lower;\n output.normal = Rot.mulVec2(xf.q, this.m_normals[index]);\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const v = matrix.transformVec2(temp, xf, this.m_vertices[i]);\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, v.y);\n maxY = math_max(maxY, v.y);\n }\n\n matrix.setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius);\n matrix.setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n // Polygon mass, centroid, and inertia.\n // Let rho be the polygon density in mass per unit area.\n // Then:\n // mass = rho * int(dA)\n // centroid.x = (1/mass) * rho * int(x * dA)\n // centroid.y = (1/mass) * rho * int(y * dA)\n // I = rho * int((x*x + y*y) * dA)\n //\n // We can compute these integrals by summing all the integrals\n // for each triangle of the polygon. To evaluate the integral\n // for a single triangle, we make a change of variables to\n // the (u,v) coordinates of the triangle:\n // x = x0 + e1x * u + e2x * v\n // y = y0 + e1y * u + e2y * v\n // where 0 <= u && 0 <= v && u + v <= 1.\n //\n // We integrate u from [0,1-v] and then v from [0,1].\n // We also need to use the Jacobian of the transformation:\n // D = cross(e1, e2)\n //\n // Simplification: triangle centroid = (1/3) * (p1 + p2 + p3)\n //\n // The rest of the derivation is handled by computer algebra.\n\n _ASSERT && console.assert(this.m_count >= 3);\n\n matrix.zeroVec2(center);\n let area = 0.0;\n let I = 0.0;\n\n // s is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n matrix.zeroVec2(s);\n\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < this.m_count; ++i) {\n matrix.plusVec2(s, this.m_vertices[i]);\n }\n matrix.scaleVec2(s, 1.0 / this.m_count, s);\n\n const k_inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < this.m_count; ++i) {\n // Triangle vertices.\n matrix.subVec2(e1, this.m_vertices[i], s);\n if ( i + 1 < this.m_count) {\n matrix.subVec2(e2, this.m_vertices[i + 1], s);\n } else {\n matrix.subVec2(e2, this.m_vertices[0], s);\n }\n\n const D = matrix.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine2Vec2(temp, triangleArea * k_inv3, e1, triangleArea * k_inv3, e2);\n matrix.plusVec2(center, temp);\n\n const ex1 = e1.x;\n const ey1 = e1.y;\n const ex2 = e2.x;\n const ey2 = e2.y;\n\n const intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2;\n const inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2;\n\n I += (0.25 * k_inv3 * D) * (intx2 + inty2);\n }\n\n // Total mass\n massData.mass = density * area;\n\n // Center of mass\n _ASSERT && console.assert(area > EPSILON);\n matrix.scaleVec2(center, 1.0 / area, center);\n matrix.addVec2(massData.center, center, s);\n\n // Inertia tensor relative to the local origin (point s).\n massData.I = density * I;\n\n // Shift to center of mass then to original body origin.\n massData.I += massData.mass * (matrix.dotVec2(massData.center, massData.center) - matrix.dotVec2(center, center));\n }\n\n /**\n * Validate convexity. This is a very time consuming operation.\n * @returns true if valid\n */\n validate(): boolean {\n for (let i = 0; i < this.m_count; ++i) {\n const i1 = i;\n const i2 = i < this.m_count - 1 ? i1 + 1 : 0;\n const p = this.m_vertices[i1];\n matrix.subVec2(e, this.m_vertices[i2], p);\n\n for (let j = 0; j < this.m_count; ++j) {\n if (j == i1 || j == i2) {\n continue;\n }\n\n const c = matrix.crossVec2Vec2(e, matrix.subVec2(temp, this.m_vertices[j], p));\n if (c < 0.0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\n for (let 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}\n\n/** @internal */ function computeCentroid(vs: Vec2[], count: number): Vec2 {\n _ASSERT && console.assert(count >= 3);\n\n const c = Vec2.zero();\n let area = 0.0;\n\n // pRef is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n const pRef = Vec2.zero();\n if (false) {\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < count; ++i) {\n pRef.add(vs[i]);\n }\n pRef.mul(1.0 / count);\n }\n\n const inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < count; ++i) {\n // Triangle vertices.\n const p1 = pRef;\n const p2 = vs[i];\n const p3 = i + 1 < count ? vs[i + 1] : vs[0];\n\n const e1 = Vec2.sub(p2, p1);\n const e2 = Vec2.sub(p3, p1);\n\n const D = Vec2.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine3Vec2(temp, 1, p1, 1, p2, 1, p3);\n matrix.plusScaleVec2(c, triangleArea * inv3, temp);\n }\n\n // Centroid\n _ASSERT && console.assert(area > EPSILON);\n c.mul(1.0 / area);\n return c;\n}\n\nexport const Polygon = PolygonShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Shape } from \"../Shape\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_PI = Math.PI;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\ndeclare module \"./CircleShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function CircleShape(position: Vec2Value, radius?: number): CircleShape;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function CircleShape(radius?: number): CircleShape;\n}\n\n/** Circle shape. */\n// @ts-expect-error\nexport class CircleShape extends Shape {\n static TYPE = \"circle\" as const;\n /** @hidden */ m_type: \"circle\";\n\n /** @hidden */ m_p: Vec2;\n /** @hidden */ m_radius: number;\n\n constructor(position: Vec2Value, radius?: number);\n constructor(radius?: number);\n constructor(a: any, b?: any) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof CircleShape)) {\n return new CircleShape(a, b);\n }\n\n super();\n\n this.m_type = CircleShape.TYPE;\n this.m_p = Vec2.zero();\n this.m_radius = 1;\n\n if (typeof a === \"object\" && Vec2.isValid(a)) {\n this.m_p.setVec2(a);\n\n if (typeof b === \"number\") {\n this.m_radius = b;\n }\n\n } else if (typeof a === \"number\") {\n this.m_radius = a;\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n p: this.m_p,\n radius: this.m_radius,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): CircleShape {\n return new CircleShape(data.p, data.radius);\n }\n\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getType(): \"circle\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getCenter(): Vec2 {\n return this.m_p;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): CircleShape {\n const clone = new CircleShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const center = matrix.transformVec2(temp, xf, this.m_p);\n return matrix.distSqrVec2(p, center) <= this.m_radius * this.m_radius;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // Collision Detection in Interactive 3D Environments by Gino van den Bergen\n // From Section 3.1.2\n // x = s + a * r\n // norm(x) = radius\n\n const position = Vec2.add(xf.p, Rot.mulVec2(xf.q, this.m_p));\n const s = Vec2.sub(input.p1, position);\n const b = Vec2.dot(s, s) - this.m_radius * this.m_radius;\n\n // Solve quadratic equation.\n const r = Vec2.sub(input.p2, input.p1);\n const c = Vec2.dot(s, r);\n const rr = Vec2.dot(r, r);\n const sigma = c * c - rr * b;\n\n // Check for negative discriminant and short segment.\n if (sigma < 0.0 || rr < EPSILON) {\n return false;\n }\n\n // Find the point of intersection of the line with the circle.\n let a = -(c + math_sqrt(sigma));\n\n // Is the intersection point on the segment?\n if (0.0 <= a && a <= input.maxFraction * rr) {\n a /= rr;\n output.fraction = a;\n output.normal = Vec2.add(s, Vec2.mulNumVec2(a, r));\n output.normal.normalize();\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n const p = matrix.transformVec2(temp, xf, this.m_p);\n\n matrix.setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius);\n matrix.setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n massData.mass = density * math_PI * this.m_radius * this.m_radius;\n matrix.copyVec2(massData.center, this.m_p);\n // inertia about the local origin\n massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + matrix.lengthSqrVec2(this.m_p));\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Circle = CircleShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. A value of 0 disables softness.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * Distance length.\n */\n length?: number;\n}\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointDef extends JointDef, DistanceJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0\n};\n\ndeclare module \"./DistanceJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function DistanceJoint(def: DistanceJointDef): DistanceJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function DistanceJoint(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value): DistanceJoint;\n}\n\n/**\n * A distance joint constrains two points on two bodies to remain at a fixed\n * distance from each other. You can view this as a massless, rigid rod.\n */\n// @ts-expect-error\nexport class DistanceJoint extends Joint {\n static TYPE = \"distance-joint\" as const;\n\n // Solver shared\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_length: number;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_gamma: number;\n /** @internal */ m_bias: number;\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n /**\n * @param def DistanceJoint definition.\n */\n constructor(def: DistanceJointDef);\n /**\n * @param anchorA Anchor A in global coordination.\n * @param anchorB Anchor B in global coordination.\n */\n constructor(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value);\n constructor(def: DistanceJointDef, bodyA?: Body, bodyB?: Body, anchorA?: Vec2Value, anchorB?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof DistanceJoint)) {\n return new DistanceJoint(def, bodyA, bodyB, anchorA, anchorB);\n }\n\n // order of constructor arguments is changed in v0.2\n if (bodyB && anchorA && (\"m_type\" in anchorA) && (\"x\" in bodyB) && (\"y\" in bodyB)) {\n const temp = bodyB;\n bodyB = anchorA as any as Body;\n anchorA = temp as any as Vec2;\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = DistanceJoint.TYPE;\n\n // Solver shared\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 :\n 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.0;\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n\n // 1-D constrained system\n // m (v2 - v1) = lambda\n // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass.\n // x2 = x1 + h * v2\n\n // 1-D mass-damper-spring system\n // m (v2 - v1) + h * d * v2 + h * k *\n\n // C = norm(p2 - p1) - L\n // u = (p2 - p1) / norm(p2 - p1)\n // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1))\n // J = [-u -cross(r1, u) u cross(r2, u)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n length: this.m_length,\n\n impulse: this.m_impulse,\n gamma: this.m_gamma,\n bias: this.m_bias,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): DistanceJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new DistanceJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\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\n if (def.length > 0) {\n this.m_length = +def.length;\n } else if (def.length < 0) { // don't change length\n } else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) {\n this.m_length = Vec2.distance(\n this.m_bodyA.getWorldPoint(this.m_localAnchorA),\n this.m_bodyB.getWorldPoint(this.m_localAnchorB)\n );\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the natural length. Manipulating the length can lead to non-physical\n * behavior when the frequency is zero.\n */\n setLength(length: number): void {\n this.m_length = length;\n }\n\n /**\n * Get the natural length.\n */\n getLength(): number {\n return this.m_length;\n }\n\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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(cB, this.m_rB), Vec2.add(cA, this.m_rA));\n\n // Handle singularity.\n const length = this.m_u.length();\n if (length > Settings.linearSlop) {\n this.m_u.mul(1.0 / length);\n } else {\n this.m_u.setNum(0.0, 0.0);\n }\n\n const crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n let invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu;\n\n // Compute the effective mass matrix.\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (this.m_frequencyHz > 0.0) {\n const C = length - this.m_length;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * this.m_mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_mass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invMass += this.m_gamma;\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n } else {\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n const Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA);\n\n const impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse);\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n if (this.m_frequencyHz > 0.0) {\n // There is no position correction for soft distance constraints.\n return true;\n }\n\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const length = u.normalize();\n const C = clamp(length - this.m_length, -Settings.maxLinearCorrection, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointOpt extends JointOpt {\n /**\n * The maximum friction force in N.\n */\n maxForce?: number;\n /**\n * The maximum friction torque in N-m.\n */\n maxTorque?: number;\n}\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointDef extends JointDef, FrictionJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n maxTorque : 0.0,\n};\n\ndeclare module \"./FrictionJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function FrictionJoint(def: FrictionJointDef): FrictionJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function FrictionJoint(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): FrictionJoint;\n}\n\n/**\n * Friction joint. This is used for top-down friction. It provides 2D\n * translational friction and angular friction.\n */\n// @ts-expect-error\nexport class FrictionJoint extends Joint {\n static TYPE = \"friction-joint\" as const;\n\n /** @internal */ m_type: \"friction-joint\";\n\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n // Solver shared\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: FrictionJointDef);\n /**\n * @param anchor Anchor in global coordination.\n */\n constructor(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: FrictionJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof FrictionJoint)) {\n return new FrictionJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = FrictionJoint.TYPE;\n\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\n // Solver shared\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): FrictionJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new FrictionJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y\n * 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\n * this.m_rB.x;\n\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.sub(\n Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)),\n Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA))\n );\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = this.m_linearImpulse;\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) {\n this.m_linearImpulse.normalize();\n this.m_linearImpulse.mul(maxImpulse);\n }\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Vec3, Vec3Value } from \"./Vec3\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 3-by-3 matrix. Stored in column-major order.\n */\nexport class Mat33 {\n ex: Vec3;\n ey: Vec3;\n ez: Vec3;\n\n constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value);\n constructor();\n constructor(a?: Vec3Value, b?: Vec3Value, c?: Vec3Value) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec3.clone(a);\n this.ey = Vec3.clone(b);\n this.ez = Vec3.clone(c);\n } else {\n this.ex = Vec3.zero();\n this.ey = Vec3.zero();\n this.ez = Vec3.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat33.isValid(o), \"Invalid Mat33!\", o);\n }\n\n /**\n * Set this matrix to all zeros.\n */\n setZero(): Mat33 {\n this.ex.setZero();\n this.ey.setZero();\n this.ez.setZero();\n return this;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve33(v: Vec3Value): Vec3 {\n // let det = matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, this.ez));\n let cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y;\n let cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z;\n let cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x;\n let det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = new Vec3();\n // r.x = det * matrix.dotVec3(v, matrix.newCrossVec3(this.ey, this.ez));\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 * (v.x * cross_x + v.y * cross_y + v.z * cross_z);\n\n // r.y = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(v, this.ez));\n cross_x = v.y * this.ez.z - v.z * this.ez.y;\n cross_y = v.z * this.ez.x - v.x * this.ez.z;\n cross_z = v.x * this.ez.y - v.y * this.ez.x;\n r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z);\n\n // r.z = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, v));\n cross_x = this.ey.y * v.z - this.ey.z * v.y;\n cross_y = this.ey.z * v.x - this.ey.x * v.z;\n cross_z = this.ey.x * v.y - this.ey.y * v.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\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix\n * equation.\n */\n solve22(v: Vec2Value): Vec2 {\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a21 = this.ex.y;\n const a22 = this.ey.y;\n let det = a11 * a22 - a12 * a21;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = Vec2.zero();\n r.x = det * (a22 * v.x - a12 * v.y);\n r.y = det * (a11 * v.y - a21 * v.x);\n return r;\n }\n\n /**\n * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if\n * singular.\n */\n getInverse22(M: Mat33): void {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n M.ex.x = det * d;\n M.ey.x = -det * b;\n M.ex.z = 0.0;\n M.ex.y = -det * c;\n M.ey.y = det * a;\n M.ey.z = 0.0;\n M.ez.x = 0.0;\n M.ez.y = 0.0;\n M.ez.z = 0.0;\n }\n\n /**\n * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix\n * if singular.\n */\n getSymInverse33(M: Mat33): void {\n let det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez));\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a13 = this.ez.x;\n const a22 = this.ey.y;\n const a23 = this.ez.y;\n const a33 = this.ez.z;\n\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\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\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\n /**\n * Multiply a matrix times a vector.\n */\n static mul(a: Mat33, b: Vec2Value): Vec2;\n static mul(a: Mat33, b: Vec3Value): Vec3;\n static mul(a, b) {\n _ASSERT && Mat33.assert(a);\n if (b && \"z\" in b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n\n } else if (b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec3(a: Mat33, b: Vec3Value): Vec3 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n }\n\n static mulVec2(a: Mat33, b: Vec2Value): Vec2 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n static add(a: Mat33, b: Mat33): Mat33 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Mat33.assert(b);\n return new Mat33(\n Vec3.add(a.ex, b.ex),\n Vec3.add(a.ey, b.ey),\n Vec3.add(a.ez, b.ez)\n );\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n// todo: use string?\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n} \n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointOpt extends JointOpt {\n /**\n * The lower angle for the joint limit (radians).\n */\n lowerAngle?: number;\n /**\n * The upper angle for the joint limit (radians).\n */\n upperAngle?: number;\n /**\n * The maximum motor torque used to achieve the desired motor speed. Usually\n * in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed. Usually in radians per second.\n */\n motorSpeed?: number;\n /**\n * A flag to enable joint limits.\n */\n enableLimit?: boolean;\n /**\n * A flag to enable the joint motor.\n */\n enableMotor?: boolean;\n}\n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointDef extends JointDef, RevoluteJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n lowerAngle : 0.0,\n upperAngle : 0.0,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n enableLimit : false,\n enableMotor : false\n};\n\ndeclare module \"./RevoluteJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RevoluteJoint(def: RevoluteJointDef): RevoluteJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RevoluteJoint(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): RevoluteJoint;\n}\n\n/**\n * A revolute joint constrains two bodies to share a common point while they are\n * free to rotate about the point. The relative rotation about the shared point\n * is the joint angle. You can limit the relative rotation with a joint limit\n * that specifies a lower and upper angle. You can use a motor to drive the\n * relative rotation about the shared point. A maximum motor torque is provided\n * so that infinite forces are not generated.\n */\n// @ts-expect-error\nexport class RevoluteJoint extends Joint {\n static TYPE = \"revolute-joint\" as const;\n\n /** @internal */ m_type: \"revolute-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerAngle: number;\n /** @internal */ m_upperAngle: number;\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n // effective mass for point-to-point constraint.\n /** @internal */ m_mass: Mat33;\n // effective mass for motor/limit angular constraint.\n /** @internal */ m_motorMass: number;\n /** @internal */ m_limitState: number;\n\n constructor(def: RevoluteJointDef);\n constructor(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RevoluteJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RevoluteJoint)) {\n return new RevoluteJoint(def, bodyA, bodyB, anchor);\n }\n\n def = def ?? {} as RevoluteJointDef;\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_mass = new Mat33();\n this.m_limitState = LimitState.inactiveLimit;\n\n this.m_type = RevoluteJoint.TYPE;\n\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\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\n if (Number.isFinite(def.referenceAngle)) {\n this.m_referenceAngle = def.referenceAngle;\n } else {\n this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle();\n }\n\n this.m_impulse = new Vec3();\n this.m_motorImpulse = 0.0;\n\n this.m_lowerAngle = def.lowerAngle ?? DEFAULTS.lowerAngle;\n this.m_upperAngle = def.upperAngle ?? DEFAULTS.upperAngle;\n this.m_maxMotorTorque = def.maxMotorTorque ?? DEFAULTS.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed ?? DEFAULTS.motorSpeed;\n this.m_enableLimit = def.enableLimit ?? DEFAULTS.enableLimit;\n this.m_enableMotor = def.enableMotor ?? DEFAULTS.enableMotor;\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Motor constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any):RevoluteJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RevoluteJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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 !== undefined) {\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 !== undefined) {\n this.m_enableMotor = def.enableMotor;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle in radians.\n */\n getJointAngle(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle speed in radians per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_angularVelocity - bA.m_angularVelocity;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Get the current motor torque given the inverse time step. Unit is N*m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set the motor speed in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set the maximum motor torque, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit in radians.\n */\n getLowerLimit(): number {\n return this.m_lowerAngle;\n }\n\n /**\n * Get the upper joint limit in radians.\n */\n getUpperLimit(): number {\n return this.m_upperAngle;\n }\n\n /**\n * Set the joint limits in radians.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(lower <= upper);\n\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.0;\n this.m_lowerAngle = lower;\n this.m_upperAngle = upper;\n }\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force given the inverse time step. Unit is N.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque due to the joint limit given the inverse time step.\n * Unit is N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\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\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n\n if (this.m_enableMotor == false || fixedRotation) {\n this.m_motorImpulse = 0.0;\n }\n\n if (this.m_enableLimit && fixedRotation == false) {\n const jointAngle = aB - aA - this.m_referenceAngle;\n\n if (math_abs(this.m_upperAngle - this.m_lowerAngle) < 2.0 * Settings.angularSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointAngle <= this.m_lowerAngle) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atLowerLimit;\n\n } else if (jointAngle >= this.m_upperAngle) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atUpperLimit;\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\n // Solve motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits && fixedRotation == false) {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(this.m_mass.solve33(Cdot));\n\n if (this.m_limitState == LimitState.equalLimits) {\n this.m_impulse.add(impulse);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse < 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse > 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n\n } else {\n // Solve point-to-point constraint\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const impulse = this.m_mass.solve22(Vec2.neg(Cdot));\n\n this.m_impulse.x += impulse.x;\n this.m_impulse.y += impulse.y;\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n let angularError = 0.0;\n let positionError = 0.0;\n\n const fixedRotation = (this.m_invIA + this.m_invIB == 0.0);\n\n // Solve angular limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const angle = aB - aA - this.m_referenceAngle;\n let limitImpulse = 0.0;\n\n if (this.m_limitState == LimitState.equalLimits) {\n // Prevent large angular corrections\n const C = clamp(angle - this.m_lowerAngle, -Settings.maxAngularCorrection, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n angularError = math_abs(C);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n let C = angle - this.m_lowerAngle;\n angularError = -C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C + Settings.angularSlop, -Settings.maxAngularCorrection, 0.0);\n limitImpulse = -this.m_motorMass * C;\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n let C = angle - this.m_upperAngle;\n angularError = C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C - Settings.angularSlop, 0.0, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n }\n\n aA -= this.m_invIA * limitImpulse;\n aB += this.m_invIB * limitImpulse;\n }\n\n // Solve point-to-point constraint.\n {\n qA.setAngle(aA);\n qB.setAngle(aB);\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n const C = Vec2.zero();\n C.addCombine(1, cB, 1, rB);\n C.subCombine(1, cA, 1, rA);\n positionError = C.length();\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y;\n K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y;\n K.ey.x = K.ex.y;\n K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x;\n\n const impulse = Vec2.neg(K.solve(C));\n\n cA.subMul(mA, impulse);\n aA -= iA * Vec2.crossVec2Vec2(rA, impulse);\n\n cB.addMul(mB, impulse);\n aB += iB * Vec2.crossVec2Vec2(rB, impulse);\n }\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3, \n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointOpt extends JointOpt {\n /**\n * Enable/disable the joint limit.\n */\n enableLimit?: boolean;\n /**\n * The lower translation limit, usually in meters.\n */\n lowerTranslation?: number;\n /**\n * The upper translation limit, usually in meters.\n */\n upperTranslation?: number;\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorForce?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointDef extends JointDef, PrismaticJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation unit axis in bodyA.\n */\n localAxisA: Vec2Value;\n /**\n * referenceAngle The constrained angle between the bodies:\n * bodyB_angle - bodyA_angle.\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableLimit : false,\n lowerTranslation : 0.0,\n upperTranslation : 0.0,\n enableMotor : false,\n maxMotorForce : 0.0,\n motorSpeed : 0.0\n};\n\ndeclare module \"./PrismaticJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PrismaticJoint(def: PrismaticJointDef): PrismaticJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PrismaticJoint(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value): PrismaticJoint;\n}\n\n/**\n * A prismatic joint. This joint provides one degree of freedom: translation\n * along an axis fixed in bodyA. Relative rotation is prevented. You can use a\n * joint limit to restrict the range of motion and a joint motor to drive the\n * motion or to model joint friction.\n */\n// @ts-expect-error\nexport class PrismaticJoint extends Joint {\n static TYPE = \"prismatic-joint\" as const;\n\n /** @internal */ m_type: \"prismatic-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerTranslation: number;\n /** @internal */ m_upperTranslation: number;\n /** @internal */ m_maxMotorForce: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n /** @internal */ m_limitState: number; // TODO enum\n /** @internal */ m_axis: Vec2;\n /** @internal */ m_perp: Vec2;\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_s1: number;\n /** @internal */ m_s2: number;\n /** @internal */ m_a1: number;\n /** @internal */ m_a2: number;\n /** @internal */ m_K: Mat33;\n\n constructor(def: PrismaticJointDef);\n constructor(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: PrismaticJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PrismaticJoint)) {\n return new PrismaticJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PrismaticJoint.TYPE;\n\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, 0.0));\n this.m_localXAxisA.normalize();\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle();\n\n this.m_impulse = new Vec3();\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n\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.inactiveLimit;\n\n this.m_axis = Vec2.zero();\n this.m_perp = Vec2.zero();\n\n this.m_K = new Mat33();\n\n // Linear constraint (point-to-line)\n // d = p2 - p1 = x2 + r2 - x1 - r1\n // C = dot(perp, d)\n // Cdot = dot(d, cross(w1, perp)) + dot(perp, v2 + cross(w2, r2) - v1 -\n // cross(w1, r1))\n // = -dot(perp, v1) - dot(cross(d + r1, perp), w1) + dot(perp, v2) +\n // dot(cross(r2, perp), v2)\n // J = [-perp, -cross(d + r1, perp), perp, cross(r2,perp)]\n //\n // Angular constraint\n // C = a2 - a1 + a_initial\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n //\n // K = J * invM * JT\n //\n // J = [-a -s1 a s2]\n // [0 -1 0 1]\n // a = perp\n // s1 = cross(d + r1, a) = cross(p2 - x1, a)\n // s2 = cross(r2, a) = cross(p2 - x2, a)\n\n // Motor/Limit linear constraint\n // C = dot(ax1, d)\n // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) +\n // dot(cross(r2, ax1), v2)\n // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)]\n\n // Block Solver\n // We develop a block solver that includes the joint limit. This makes the\n // limit stiff (inelastic) even\n // when the mass has poor distribution (leading to large torques about the\n // joint anchor points).\n //\n // The Jacobian has 3 rows:\n // J = [-uT -s1 uT s2] // linear\n // [0 -1 0 1] // angular\n // [-vT -a1 vT a2] // limit\n //\n // u = perp\n // v = axis\n // s1 = cross(d + r1, u), s2 = cross(r2, u)\n // a1 = cross(d + r1, v), a2 = cross(r2, v)\n\n // M * (v2 - v1) = JT * df\n // J * v2 = bias\n //\n // v2 = v1 + invM * JT * df\n // J * (v1 + invM * JT * df) = bias\n // K * df = bias - J * v1 = -Cdot\n // K = J * invM * JT\n // Cdot = J * v1 - bias\n //\n // Now solve for f2.\n // df = f2 - f1\n // K * (f2 - f1) = -Cdot\n // f2 = invK * (-Cdot) + f1\n //\n // Clamp accumulated limit impulse.\n // lower: f2(3) = max(f2(3), 0)\n // upper: f2(3) = min(f2(3), 0)\n //\n // Solve for correct f2(1:2)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:3) * f1\n // = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:2) * f1(1:2) + K(1:2,3) * f1(3)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3)) +\n // K(1:2,1:2) * f1(1:2)\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n //\n // Now compute impulse to be applied:\n // df = f2 - f1\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PrismaticJoint {\n data = {...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 const joint = new PrismaticJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, 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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const pA = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const pB = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = this.m_bodyA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const rA = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter));\n const rB = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter));\n const p1 = Vec2.add(bA.m_sweep.c, rA);\n const p2 = Vec2.add(bB.m_sweep.c, rB);\n const d = Vec2.sub(p2, p1);\n const axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA);\n\n const vA = bA.m_linearVelocity;\n const vB = bB.m_linearVelocity;\n const wA = bA.m_angularVelocity;\n const wB = bB.m_angularVelocity;\n\n const speed = Vec2.dot(d, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB, wB, rB), Vec2.addCrossNumVec2(vA, wA, rA)));\n return speed;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit, usually in meters.\n */\n getLowerLimit(): number {\n return this.m_lowerTranslation;\n }\n\n /**\n * Get the upper joint limit, usually in meters.\n */\n getUpperLimit(): number {\n return this.m_upperTranslation;\n }\n\n /**\n * Set the joint limits, usually in meters.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(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.0;\n }\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in meters per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Set the maximum motor force, usually in N.\n */\n setMaxMotorForce(force: number): void {\n if (force == this.m_maxMotorForce) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorForce = force;\n }\n\n getMaxMotorForce(): number {\n return this.m_maxMotorForce;\n }\n\n /**\n * Get the motor speed, usually in meters per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Get the current motor force given the inverse time step, usually in N.\n */\n getMotorForce(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\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\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.y;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute motor Jacobian and effective mass.\n {\n this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_axis);\n this.m_a2 = Vec2.crossVec2Vec2(rB, this.m_axis);\n\n this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2\n * this.m_a2;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n }\n\n // Prismatic constraint.\n {\n this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_perp);\n this.m_s2 = Vec2.crossVec2Vec2(rB, this.m_perp);\n\n const s1test = Vec2.crossVec2Vec2(rA, this.m_perp);\n\n const k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2;\n const k12 = iA * this.m_s1 + iB * this.m_s2;\n const k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For bodies with fixed rotation.\n k22 = 1.0;\n }\n const k23 = iA * this.m_a1 + iB * this.m_a2;\n const k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2;\n\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\n // Compute motor and limit terms.\n if (this.m_enableLimit) {\n\n const jointTranslation = Vec2.dot(this.m_axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Settings.linearSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointTranslation <= this.m_lowerTranslation) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_limitState = LimitState.atLowerLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else if (jointTranslation >= this.m_upperTranslation) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_limitState = LimitState.atUpperLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n if (this.m_enableMotor == false) {\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse\n + this.m_impulse.z, this.m_axis);\n const LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1;\n const LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Solve linear motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits) {\n const Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB, vA)) + this.m_a2 * wB\n - this.m_a1 * wA;\n let impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorForce;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse,\n -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_axis);\n const LA = impulse * this.m_a1;\n const LB = impulse * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n const Cdot1 = Vec2.zero();\n Cdot1.x += Vec2.dot(this.m_perp, vB) + this.m_s2 * wB;\n Cdot1.x -= Vec2.dot(this.m_perp, vA) + this.m_s1 * wA;\n Cdot1.y = wB - wA;\n\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit) {\n // Solve prismatic and limit constraint in block form.\n let Cdot2 = 0;\n Cdot2 += Vec2.dot(this.m_axis, vB) + this.m_a2 * wB;\n Cdot2 -= Vec2.dot(this.m_axis, vA) + this.m_a1 * wA;\n\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const f1 = Vec3.clone(this.m_impulse);\n let df = this.m_K.solve33(Vec3.neg(Cdot));\n this.m_impulse.add(df);\n\n if (this.m_limitState == LimitState.atLowerLimit) {\n this.m_impulse.z = math_max(this.m_impulse.z, 0.0);\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n this.m_impulse.z = math_min(this.m_impulse.z, 0.0);\n }\n\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n const b = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y));\n const f2r = Vec2.add(this.m_K.solve22(b), Vec2.neo(f1.x, f1.y));\n this.m_impulse.x = f2r.x;\n this.m_impulse.y = f2r.y;\n\n df = Vec3.sub(this.m_impulse, f1);\n\n const P = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis);\n const LA = df.x * this.m_s1 + df.y + df.z * this.m_a1;\n const LB = df.x * this.m_s2 + df.y + df.z * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n // Limit is inactive, just solve the prismatic constraint in block form.\n const df = this.m_K.solve22(Vec2.neg(Cdot1));\n this.m_impulse.x += df.x;\n this.m_impulse.y += df.y;\n\n const P = Vec2.mulNumVec2(df.x, this.m_perp);\n const LA = df.x * this.m_s1 + df.y;\n const LB = df.x * this.m_s2 + df.y;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute fresh Jacobians\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const axis = Rot.mulVec2(qA, this.m_localXAxisA);\n const a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), axis);\n const a2 = Vec2.crossVec2Vec2(rB, axis);\n const perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), perp);\n const s2 = Vec2.crossVec2Vec2(rB, perp);\n\n let impulse = new Vec3();\n const C1 = Vec2.zero();\n C1.x = Vec2.dot(perp, d);\n C1.y = aB - aA - this.m_referenceAngle;\n\n let linearError = math_abs(C1.x);\n const angularError = math_abs(C1.y);\n\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n let active = false; // bool\n let C2 = 0.0;\n if (this.m_enableLimit) {\n\n const translation = Vec2.dot(axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * linearSlop) {\n // Prevent large angular corrections\n C2 = clamp(translation, -maxLinearCorrection, maxLinearCorrection);\n linearError = math_max(linearError, math_abs(translation));\n active = true;\n\n } else if (translation <= this.m_lowerTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_lowerTranslation + linearSlop,\n -maxLinearCorrection, 0.0);\n linearError = Math\n .max(linearError, this.m_lowerTranslation - translation);\n active = true;\n\n } else if (translation >= this.m_upperTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_upperTranslation - linearSlop, 0.0,\n maxLinearCorrection);\n linearError = Math\n .max(linearError, translation - this.m_upperTranslation);\n active = true;\n }\n }\n\n if (active) {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n const k13 = iA * s1 * a1 + iB * s2 * a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For fixed rotation\n k22 = 1.0;\n }\n const k23 = iA * a1 + iB * a2;\n const k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2;\n\n const 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\n const C = new Vec3();\n C.x = C1.x;\n C.y = C1.y;\n C.z = C2;\n\n impulse = K.solve33(Vec3.neg(C));\n } else {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n k22 = 1.0;\n }\n\n const K = new Mat22();\n K.ex.setNum(k11, k12);\n K.ey.setNum(k12, k22);\n\n const impulse1 = K.solve(Vec2.neg(C1));\n impulse.x = impulse1.x;\n impulse.y = impulse1.y;\n impulse.z = 0.0;\n }\n\n const P = Vec2.combine(impulse.x, perp, impulse.z, axis);\n const LA = impulse.x * s1 + impulse.y + impulse.z * a1;\n const LB = impulse.x * s2 + impulse.y + impulse.z * a2;\n\n cA.subMul(mA, P);\n aA -= iA * LA;\n cB.addMul(mB, P);\n aB += iB * LB;\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError <= Settings.linearSlop\n && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { } from \"../../common/Math\";\nimport { Vec2 } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { RevoluteJoint } from \"./RevoluteJoint\";\nimport { PrismaticJoint } from \"./PrismaticJoint\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointOpt extends JointOpt {\n /**\n * The gear ratio. See {@link GearJoint} for explanation.\n */\n ratio?: number;\n}\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointDef extends JointDef, GearJointOpt {\n /**\n * The first revolute/prismatic joint attached to the gear joint.\n */\n joint1: RevoluteJoint | PrismaticJoint;\n /**\n * The second prismatic/revolute joint attached to the gear joint.\n */\n joint2: RevoluteJoint | PrismaticJoint;\n}\n\n/** @internal */ const DEFAULTS = {\n ratio : 1.0\n};\n\ndeclare module \"./GearJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function GearJoint(def: GearJointDef): GearJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function GearJoint(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number): GearJoint;\n}\n\n/**\n * A gear joint is used to connect two joints together. Either joint can be a\n * revolute or prismatic joint. You specify a gear ratio to bind the motions\n * together: coordinate1 + ratio * coordinate2 = constant\n *\n * The ratio can be negative or positive. If one joint is a revolute joint and\n * the other joint is a prismatic joint, then the ratio will have units of\n * length or units of 1/length. Warning: You have to manually destroy the gear\n * joint if joint1 or joint2 is destroyed.\n *\n * This definition requires two existing revolute or prismatic joints (any\n * combination will work).\n */\n// @ts-expect-error\nexport class GearJoint extends Joint {\n static TYPE = \"gear-joint\" as const;\n\n /** @internal */ m_type: \"gear-joint\";\n /** @internal */ m_joint1: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_joint2: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_type1: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_type2: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_bodyC: Body;\n /** @internal */ m_localAnchorC: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_referenceAngleA: number;\n /** @internal */ m_localAxisC: Vec2;\n /** @internal */ m_bodyD: Body;\n /** @internal */ m_localAnchorD: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngleB: number;\n /** @internal */ m_localAxisD: Vec2;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_lcA: Vec2;\n /** @internal */ m_lcB: Vec2;\n /** @internal */ m_lcC: Vec2;\n /** @internal */ m_lcD: Vec2;\n /** @internal */ m_mA: number;\n /** @internal */ m_mB: number;\n /** @internal */ m_mC: number;\n /** @internal */ m_mD: number;\n /** @internal */ m_iA: number;\n /** @internal */ m_iB: number;\n /** @internal */ m_iC: number;\n /** @internal */ m_iD: number;\n /** @internal */ m_JvAC: Vec2;\n /** @internal */ m_JvBD: Vec2;\n /** @internal */ m_JwA: number;\n /** @internal */ m_JwB: number;\n /** @internal */ m_JwC: number;\n /** @internal */ m_JwD: number;\n /** @internal */ m_mass: number;\n\n constructor(def: GearJointDef);\n constructor(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number);\n constructor(def: GearJointDef, bodyA?: Body, bodyB?: Body, joint1?: RevoluteJoint | PrismaticJoint, joint2?: RevoluteJoint | PrismaticJoint, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof GearJoint)) {\n return new GearJoint(def, bodyA, bodyB, joint1, joint2, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = GearJoint.TYPE;\n\n _ASSERT && console.assert(joint1.m_type === RevoluteJoint.TYPE || joint1.m_type === PrismaticJoint.TYPE);\n _ASSERT && console.assert(joint2.m_type === RevoluteJoint.TYPE || joint2.m_type === PrismaticJoint.TYPE);\n\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\n this.m_type1 = this.m_joint1.getType() as \"revolute-joint\" | \"prismatic-joint\";\n this.m_type2 = this.m_joint2.getType() as \"revolute-joint\" | \"prismatic-joint\";\n\n // joint1 connects body A to body C\n // joint2 connects body B to body D\n\n let coordinateA: number;\n let coordinateB: number;\n\n // TODO_ERIN there might be some problem with the joint edges in Joint.\n\n this.m_bodyC = this.m_joint1.getBodyA();\n this.m_bodyA = this.m_joint1.getBodyB();\n\n // Get geometry of joint1\n const xfA = this.m_bodyA.m_xf;\n const aA = this.m_bodyA.m_sweep.a;\n const xfC = this.m_bodyC.m_xf;\n const aC = this.m_bodyC.m_sweep.a;\n\n if (this.m_type1 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint1 as RevoluteJoint;\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\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const prismatic = this.m_joint1 as PrismaticJoint;\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\n const pC = this.m_localAnchorC;\n const pA = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA.q, this.m_localAnchorA), Vec2.sub(xfA.p, xfC.p)));\n coordinateA = Vec2.dot(pA, this.m_localAxisC) - Vec2.dot(pC, this.m_localAxisC);\n }\n\n this.m_bodyD = this.m_joint2.getBodyA();\n this.m_bodyB = this.m_joint2.getBodyB();\n\n // Get geometry of joint2\n const xfB = this.m_bodyB.m_xf;\n const aB = this.m_bodyB.m_sweep.a;\n const xfD = this.m_bodyD.m_xf;\n const aD = this.m_bodyD.m_sweep.a;\n\n if (this.m_type2 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint2 as RevoluteJoint;\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const prismatic = this.m_joint2 as PrismaticJoint;\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\n const pD = this.m_localAnchorD;\n const pB = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB.q, this.m_localAnchorB), Vec2.sub(xfB.p, xfD.p)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n this.m_constant = coordinateA + this.m_ratio * coordinateB;\n\n this.m_impulse = 0.0;\n\n // Gear Joint:\n // C0 = (coordinate1 + ratio * coordinate2)_initial\n // C = (coordinate1 + ratio * coordinate2) - C0 = 0\n // J = [J1 ratio * J2]\n // K = J * invM * JT\n // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T\n //\n // Revolute:\n // coordinate = rotation\n // Cdot = angularVelocity\n // J = [0 0 1]\n // K = J * invM * JT = invI\n //\n // Prismatic:\n // coordinate = dot(p - pg, ug)\n // Cdot = dot(v + cross(w, r), ug)\n // J = [ug cross(r, ug)]\n // K = J * invM * JT = invMass + invI * cross(r, ug)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n joint1: this.m_joint1,\n joint2: this.m_joint2,\n ratio: this.m_ratio,\n\n // _constant: this.m_constant,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): GearJoint {\n data = {...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 const joint = new GearJoint(data);\n // if (data._constant) joint.m_constant = data._constant;\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n // todo: implement other fields\n if (Number.isFinite(def.ratio)) {\n this.m_ratio = def.ratio;\n }\n }\n\n /**\n * Get the first joint.\n */\n getJoint1(): Joint {\n return this.m_joint1;\n }\n\n /**\n * Get the second joint.\n */\n getJoint2(): Joint {\n return this.m_joint2;\n }\n\n /**\n * Set the gear ratio.\n */\n setRatio(ratio: number): void {\n _ASSERT && console.assert(Number.isFinite(ratio));\n this.m_ratio = ratio;\n }\n\n /**\n * Get the gear ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n const L = this.m_impulse * this.m_JwA;\n return inv_dt * L;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const aC = this.m_bodyC.c_position.a;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n\n const aD = this.m_bodyD.c_position.a;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n this.m_mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n this.m_JvAC = Vec2.zero();\n this.m_JwA = 1.0;\n this.m_JwC = 1.0;\n this.m_mass += this.m_iA + this.m_iC;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = 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(rA, 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\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 const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n // Compute effective mass.\n this.m_mass = this.m_mass > 0.0 ? 1.0 / this.m_mass : 0.0;\n\n if (step.warmStarting) {\n vA.addMul(this.m_mA * this.m_impulse, this.m_JvAC);\n wA += this.m_iA * this.m_impulse * this.m_JwA;\n\n vB.addMul(this.m_mB * this.m_impulse, this.m_JvBD);\n wB += this.m_iB * this.m_impulse * this.m_JwB;\n\n vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC);\n wC -= this.m_iC * this.m_impulse * this.m_JwC;\n\n vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD);\n wD -= this.m_iD * this.m_impulse * this.m_JwD;\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n let Cdot = Vec2.dot(this.m_JvAC, vA) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB) - 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\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n vA.addMul(this.m_mA * impulse, this.m_JvAC);\n wA += this.m_iA * impulse * this.m_JwA;\n vB.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\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n const cC = this.m_bodyC.c_position.c;\n let aC = this.m_bodyC.c_position.a;\n const cD = this.m_bodyD.c_position.c;\n let aD = this.m_bodyD.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n const linearError = 0.0;\n\n let coordinateA: number;\n let coordinateB: number;\n\n let JvAC: Vec2;\n let JvBD: Vec2;\n let JwA: number;\n let JwB: number;\n let JwC: number;\n let JwD: number;\n let mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n JvAC = Vec2.zero();\n JwA = 1.0;\n JwC = 1.0;\n mass += this.m_iA + this.m_iC;\n\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA);\n JvAC = u;\n JwC = Vec2.crossVec2Vec2(rC, u);\n JwA = Vec2.crossVec2Vec2(rA, u);\n mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA;\n\n const pC = Vec2.sub(this.m_localAnchorC, this.m_lcC);\n const pA = Rot.mulTVec2(qC, Vec2.add(rA, Vec2.sub(cA, cC)));\n coordinateA = Vec2.dot(Vec2.sub(pA, pC), this.m_localAxisC);\n }\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n const pD = Vec2.sub(this.m_localAnchorD, this.m_lcD);\n const pB = Rot.mulTVec2(qD, Vec2.add(rB, Vec2.sub(cB, cD)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n const C = (coordinateA + this.m_ratio * coordinateB) - this.m_constant;\n\n let impulse = 0.0;\n if (mass > 0.0) {\n impulse = -C / mass;\n }\n\n cA.addMul(this.m_mA * impulse, JvAC);\n aA += this.m_iA * impulse * JwA;\n cB.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\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\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\n // TODO_ERIN not implemented\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointOpt extends JointOpt {\n /**\n * The bodyB angle minus bodyA angle in radians.\n */\n angularOffset?: number;\n /**\n * The maximum motor force in N.\n */\n maxForce?: number;\n /**\n * The maximum motor torque in N-m.\n */\n maxTorque?: number;\n /**\n * Position correction factor in the range [0,1].\n */\n correctionFactor?: number;\n /**\n * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters.\n */\n linearOffset?: Vec2Value;\n}\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointDef extends JointDef, MotorJointOpt {\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 1.0,\n maxTorque : 1.0,\n correctionFactor : 0.3\n};\n\ndeclare module \"./MotorJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MotorJoint(def: MotorJointDef): MotorJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MotorJoint(def: MotorJointOpt, bodyA: Body, bodyB: Body): MotorJoint;\n}\n\n/**\n * A motor joint is used to control the relative motion between two bodies. A\n * typical usage is to control the movement of a dynamic body with respect to\n * the ground.\n */\n// @ts-expect-error\nexport class MotorJoint extends Joint {\n static TYPE = \"motor-joint\" as const;\n\n /** @internal */ m_type: \"motor-joint\";\n /** @internal */ m_linearOffset: Vec2;\n /** @internal */ m_angularOffset: number;\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n /** @internal */ m_correctionFactor: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_linearError: Vec2;\n /** @internal */ m_angularError: number;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: MotorJointDef);\n constructor(def: MotorJointOpt, bodyA: Body, bodyB: Body);\n constructor(def: MotorJointDef | MotorJointOpt, bodyA?: Body, bodyB?: Body) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MotorJoint)) {\n return new MotorJoint(def, bodyA, bodyB);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MotorJoint.TYPE;\n\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\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n this.m_correctionFactor = def.correctionFactor;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n //\n // r1 = offset - c1\n // r2 = -c2\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n correctionFactor: this.m_correctionFactor,\n\n linearOffset: this.m_linearOffset,\n angularOffset: this.m_angularOffset,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MotorJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new MotorJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Set the position correction factor in the range [0,1].\n */\n setCorrectionFactor(factor: number): void {\n _ASSERT && console.assert(Number.isFinite(factor) && 0.0 <= factor && factor <= 1.0);\n this.m_correctionFactor = factor;\n }\n\n /**\n * Get the position correction factor in the range [0,1].\n */\n getCorrectionFactor(): number {\n return this.m_correctionFactor;\n }\n\n /**\n * Set/get the target linear offset, in frame A, in meters.\n */\n setLinearOffset(linearOffset: Vec2Value): void {\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\n getLinearOffset(): Vec2 {\n return this.m_linearOffset;\n }\n\n /**\n * Set/get the target angular offset, in radians.\n */\n setAngularOffset(angularOffset: number): void {\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\n getAngularOffset(): number {\n return this.m_angularOffset;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getPosition();\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getPosition();\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Upper 2 by 2 of K for point to point\n const 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\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n this.m_linearError = Vec2.zero();\n this.m_linearError.addCombine(1, cB, 1, this.m_rB);\n this.m_linearError.subCombine(1, cA, 1, this.m_rA);\n\n this.m_angularError = aB - aA - this.m_angularOffset;\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n const inv_h = step.inv_dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError);\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = Vec2.clone(this.m_linearImpulse);\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n this.m_linearImpulse.clamp(maxImpulse);\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Transform } from \"../../common/Transform\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointOpt extends JointOpt {\n /**\n * [maxForce = 0.0] The maximum constraint force that can be exerted to move\n * the candidate body. Usually you will express as some multiple of the\n * weight (multiplier * mass * gravity).\n */\n maxForce?: number;\n /**\n * [frequencyHz = 5.0] The response speed.\n */\n frequencyHz?: number;\n /**\n * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical\n * damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointDef extends JointDef, MouseJointOpt {\n /**\n * The initial world target point. This is assumed to coincide with the body\n * anchor initially.\n */\n target: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n frequencyHz : 5.0,\n dampingRatio : 0.7\n};\n\ndeclare module \"./MouseJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MouseJoint(def: MouseJointDef): MouseJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MouseJoint(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value): MouseJoint;\n}\n\n/**\n * A mouse joint is used to make a point on a body track a specified world\n * point. This a soft constraint with a maximum force. This allows the\n * constraint to stretch and without applying huge forces.\n *\n * You need to call setTarget(target) every time that mouse is \n * moved, to track the new location of the mouse.\n *\n * NOTE: this joint is not documented in the manual because it was developed to\n * be used in the testbed. If you want to learn how to use the mouse joint, look\n * at the testbed.\n */\n// @ts-expect-error\nexport class MouseJoint extends Joint {\n static TYPE = \"mouse-joint\" as const;\n\n /** @internal */ m_type: \"mouse-joint\";\n /** @internal */ m_targetA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_impulse: Vec2;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_beta: number;\n /** @internal */ m_gamma: number;\n // Solver temp\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat22;\n /** @internal */ m_C: Vec2;\n\n constructor(def: MouseJointDef);\n constructor(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value);\n constructor(def: MouseJointDef, bodyA?: Body, bodyB?: Body, target?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MouseJoint)) {\n return new MouseJoint(def, bodyA, bodyB, target);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MouseJoint.TYPE;\n\n _ASSERT && console.assert(Number.isFinite(def.maxForce) && def.maxForce >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.frequencyHz) && def.frequencyHz >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.dampingRatio) && def.dampingRatio >= 0.0);\n\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\n this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), this.m_targetA);\n\n this.m_maxForce = def.maxForce;\n this.m_impulse = Vec2.zero();\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_beta = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rB = Vec2.zero();\n this.m_localCenterB = Vec2.zero();\n this.m_invMassB = 0.0;\n this.m_invIB = 0.0;\n this.m_mass = new Mat22();\n this.m_C = Vec2.zero();\n\n // p = attached point, m = mouse point\n // C = p - m\n // Cdot = v\n // = v + cross(w, r)\n // J = [I r_skew]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n target: this.m_targetA,\n maxForce: this.m_maxForce,\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n _localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MouseJoint {\n data = {...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 const joint = new MouseJoint(data);\n if (data._localAnchorB) {\n joint.m_localAnchorB = data._localAnchorB;\n }\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Use this to update the target point.\n */\n setTarget(target: Vec2Value): void {\n if (Vec2.areEqual(target, this.m_targetA)) return;\n this.m_bodyB.setAwake(true);\n this.m_targetA.set(target);\n }\n\n getTarget(): Vec2 {\n return this.m_targetA;\n }\n\n /**\n * Set the maximum force in Newtons.\n */\n setMaxForce(force: number): void {\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum force in Newtons.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the frequency in Hertz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get the frequency in Hertz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set the damping ratio (dimensionless).\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get the damping ratio (dimensionless).\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return Vec2.clone(this.m_targetA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_impulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * 0.0;\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_targetA.sub(newOrigin);\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const position = this.m_bodyB.c_position;\n const velocity = this.m_bodyB.c_velocity;\n\n const cB = position.c;\n const aB = position.a;\n const vB = velocity.v;\n let wB = velocity.w;\n\n const qB = Rot.neo(aB);\n\n const mass = this.m_bodyB.getMass();\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = mass * (omega * omega);\n\n // magic formulas\n // gamma has units of inverse mass.\n // beta has units of inverse time.\n const h = step.dt;\n _ASSERT && console.assert(d + h * k > EPSILON);\n this.m_gamma = h * (d + h * k);\n if (this.m_gamma != 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n this.m_beta = h * k * this.m_gamma;\n\n // Compute the effective mass matrix.\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) *\n // invI2 * skew(r2)]\n // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y\n // -r1.x*r1.y]\n // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x]\n const K = new Mat22();\n K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y\n + 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\n + this.m_gamma;\n\n this.m_mass = K.getInverse();\n\n this.m_C.setVec2(cB);\n this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA);\n this.m_C.mul(this.m_beta);\n\n // Cheat with some damping\n wB *= 0.98;\n\n if (step.warmStarting) {\n this.m_impulse.mul(step.dtRatio);\n vB.addMul(this.m_invMassB, this.m_impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse);\n\n } else {\n this.m_impulse.setZero();\n }\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const velocity = this.m_bodyB.c_velocity;\n const vB = Vec2.clone(velocity.v);\n let wB = velocity.w;\n\n // Cdot = v + cross(w, r)\n\n const Cdot = Vec2.crossNumVec2(wB, this.m_rB);\n Cdot.add(vB);\n\n Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse);\n Cdot.neg();\n\n let impulse = Mat22.mulVec2(this.m_mass, Cdot);\n\n const oldImpulse = Vec2.clone(this.m_impulse);\n this.m_impulse.add(impulse);\n const maxImpulse = step.dt * this.m_maxForce;\n this.m_impulse.clamp(maxImpulse);\n impulse = Vec2.sub(this.m_impulse, oldImpulse);\n\n vB.addMul(this.m_invMassB, impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\n// tslint:disable-next-line:no-empty-interface\nexport interface PulleyJointOpt extends JointOpt {\n}\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\nexport interface PulleyJointDef extends JointDef, PulleyJointOpt {\n /**\n * The first ground anchor in world coordinates. This point never moves.\n */\n groundAnchorA: Vec2Value;\n /**\n * The second ground anchor in world coordinates. This point never moves.\n */\n groundAnchorB: Vec2Value;\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The reference length for the segment attached to bodyA.\n */\n lengthA: number;\n /**\n * The reference length for the segment attached to bodyB.\n */\n lengthB: number;\n /**\n * The pulley ratio, used to simulate a block-and-tackle.\n */\n ratio: number;\n\n /** @hidden */ anchorA?: Vec2Value;\n /** @hidden */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n collideConnected : true\n};\n\ndeclare module \"./PulleyJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PulleyJoint(def: PulleyJointDef): PulleyJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PulleyJoint(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number): PulleyJoint;\n}\n\n/**\n * The pulley joint is connected to two bodies and two fixed ground points. The\n * pulley supports a ratio such that: length1 + ratio * length2 <= constant\n *\n * Yes, the force transmitted is scaled by the ratio.\n *\n * Warning: the pulley joint can get a bit squirrelly by itself. They often work\n * better when combined with prismatic joints. You should also cover the the\n * anchor points with static shapes to prevent one side from going to zero\n * length.\n */\n// @ts-expect-error\nexport class PulleyJoint extends Joint {\n static TYPE = \"pulley-joint\" as const;\n // static MIN_PULLEY_LENGTH: number = 2.0; // TODO where this is used?\n\n /** @internal */ m_type: \"pulley-joint\";\n /** @internal */ m_groundAnchorA: Vec2;\n /** @internal */ m_groundAnchorB: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_lengthA: number;\n /** @internal */ m_lengthB: number;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_uA: Vec2;\n /** @internal */ m_uB: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n constructor(def: PulleyJointDef);\n constructor(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number);\n constructor(def: PulleyJointDef, bodyA?: Body, bodyB?: Body, groundA?: Vec2Value, groundB?: Vec2Value, anchorA?: Vec2Value, anchorB?: Vec2Value, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PulleyJoint)) {\n return new PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PulleyJoint.TYPE;\n this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1.0, 1.0));\n this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1.0, 1.0));\n this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1.0, 0.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\n _ASSERT && console.assert(ratio > EPSILON);\n\n this.m_constant = this.m_lengthA + this.m_ratio * this.m_lengthB;\n\n this.m_impulse = 0.0;\n\n // Pulley:\n // length1 = norm(p1 - s1)\n // length2 = norm(p2 - s2)\n // C0 = (length1 + ratio * length2)_initial\n // C = C0 - (length1 + ratio * length2)\n // u1 = (p1 - s1) / norm(p1 - s1)\n // u2 = (p2 - s2) / norm(p2 - s2)\n // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2))\n // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 *\n // cross(r2, u2)^2)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PulleyJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new PulleyJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Get the first ground anchor.\n */\n getGroundAnchorA(): Vec2 {\n return this.m_groundAnchorA;\n }\n\n /**\n * Get the second ground anchor.\n */\n getGroundAnchorB(): Vec2 {\n return this.m_groundAnchorB;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getLengthA(): number {\n return this.m_lengthA;\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getLengthB(): number {\n return this.m_lengthB;\n }\n\n /**\n * Get the pulley ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getCurrentLengthA(): number {\n const p = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const s = this.m_groundAnchorA;\n return Vec2.distance(p, s);\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getCurrentLengthB(): number {\n const p = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const s = this.m_groundAnchorB;\n return Vec2.distance(p, s);\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n *\n * @param newOrigin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_groundAnchorA.sub(newOrigin);\n this.m_groundAnchorB.sub(newOrigin);\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // Get the pulley axes.\n this.m_uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n this.m_uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = this.m_uA.length();\n const lengthB = this.m_uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n this.m_uA.mul(1.0 / lengthA);\n } else {\n this.m_uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n this.m_uB.mul(1.0 / lengthB);\n } else {\n this.m_uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA);\n const ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n this.m_mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support variable time steps.\n this.m_impulse *= step.dtRatio;\n\n // Warm starting.\n const PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB);\n\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n\n const Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB);\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const PA = Vec2.mulNumVec2(-impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB);\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // Get the pulley axes.\n const uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n const uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = uA.length();\n const lengthB = uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n uA.mul(1.0 / lengthA);\n } else {\n uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n uB.mul(1.0 / lengthB);\n } else {\n uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(rA, uA);\n const ruB = Vec2.crossVec2Vec2(rB, uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n let mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (mass > 0.0) {\n mass = 1.0 / mass;\n }\n\n const C = this.m_constant - lengthA - this.m_ratio * lengthB;\n const linearError = math_abs(C);\n\n const impulse = -mass * C;\n\n const PA = Vec2.mulNumVec2(-impulse, uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB);\n\n cA.addMul(this.m_invMassA, PA);\n aA += this.m_invIA * Vec2.crossVec2Vec2(rA, PA);\n cB.addMul(this.m_invMassB, PB);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, PB);\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointOpt extends JointOpt {\n /**\n * The maximum length of the rope.\n * Warning: this must be larger than linearSlop or the joint will have no effect.\n */\n maxLength?: number;\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointDef extends JointDef, RopeJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxLength : 0.0,\n};\n\ndeclare module \"./RopeJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RopeJoint(def: RopeJointDef): RopeJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RopeJoint(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): RopeJoint;\n}\n\n/**\n * A rope joint enforces a maximum distance between two points on two bodies. It\n * has no other effect.\n *\n * Warning: if you attempt to change the maximum length during the simulation\n * you will get some non-physical behavior.\n *\n * A model that would allow you to dynamically modify the length would have some\n * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you\n * want to dynamically control length.\n */\n// @ts-expect-error\nexport class RopeJoint extends Joint {\n static TYPE = \"rope-joint\" as const;\n\n /** @internal */ m_type: \"rope-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n /** @internal */ m_maxLength: number;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_length: number;\n /** @internal */ m_state: number; // TODO enum\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n constructor(def: RopeJointDef);\n constructor(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RopeJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RopeJoint)) {\n return new RopeJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = RopeJoint.TYPE;\n this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1.0, 0.0));\n\n this.m_maxLength = def.maxLength;\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_length = 0.0;\n this.m_state = LimitState.inactiveLimit;\n\n // Limit:\n // C = norm(pB - pA) - L\n // u = (pB - pA) / norm(pB - pA)\n // Cdot = dot(u, vB + cross(wB, rB) - vA - cross(wA, rA))\n // J = [-u -cross(rA, u) u cross(rB, u)]\n // K = J * invM * JT\n // = invMassA + invIA * cross(rA, u)^2 + invMassB + invIB * cross(rB, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n maxLength: this.m_maxLength,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): RopeJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RopeJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n if (Number.isFinite(def.maxLength)) {\n this.m_maxLength = def.maxLength;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum length of the rope.\n */\n setMaxLength(length: number): void {\n this.m_maxLength = length;\n }\n\n /**\n * Get the maximum length of the rope.\n */\n getMaxLength(): number {\n return this.m_maxLength;\n }\n\n getLimitState(): number {\n // TODO LimitState\n return this.m_state;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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, cB, 1, this.m_rB);\n this.m_u.subCombine(1, cA, 1, this.m_rA);\n\n this.m_length = this.m_u.length();\n\n const C = this.m_length - this.m_maxLength;\n if (C > 0.0) {\n this.m_state = LimitState.atUpperLimit;\n } else {\n this.m_state = LimitState.inactiveLimit;\n }\n\n if (this.m_length > Settings.linearSlop) {\n this.m_u.mul(1.0 / this.m_length);\n } else {\n this.m_u.setZero();\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n return;\n }\n\n // Compute effective mass.\n const crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n const invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB;\n\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.addCrossNumVec2(vA, wA, this.m_rA);\n const vpB = Vec2.addCrossNumVec2(vB, wB, this.m_rB);\n const C = this.m_length - this.m_maxLength;\n let Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA));\n\n // Predictive constraint.\n if (C < 0.0) {\n Cdot += step.inv_dt * C;\n }\n\n let impulse = -this.m_mass * Cdot;\n const oldImpulse = this.m_impulse;\n this.m_impulse = math_min(0.0, this.m_impulse + impulse);\n impulse = this.m_impulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.zero();\n u.addCombine(1, cB, 1, rB);\n u.subCombine(1, cA, 1, rA);\n\n const length = u.normalize();\n let C = length - this.m_maxLength;\n\n C = clamp(C, 0.0, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return length - this.m_maxLength < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness\n * with a value of 0.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle?: number;\n}\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointDef extends JointDef, WeldJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0,\n};\n\ndeclare module \"./WeldJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WeldJoint(def: WeldJointDef): WeldJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WeldJoint(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): WeldJoint;\n}\n\n/**\n * A weld joint essentially glues two bodies together. A weld joint may distort\n * somewhat because the island constraint solver is approximate.\n */\n// @ts-expect-error\nexport class WeldJoint extends Joint {\n static TYPE = \"weld-joint\" as const;\n\n /** @internal */ m_type: \"weld-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_impulse: Vec3;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat33;\n\n constructor(def: WeldJointDef);\n constructor(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: WeldJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WeldJoint)) {\n return new WeldJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = WeldJoint.TYPE;\n\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\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_impulse = new Vec3();\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rA;\n this.m_rB;\n this.m_localCenterA;\n this.m_localCenterB;\n this.m_invMassA;\n this.m_invMassB;\n this.m_invIA;\n this.m_invIB;\n this.m_mass = new Mat33();\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // / = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // C = angle2 - angle1 - referenceAngle\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WeldJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WeldJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Set frequency in Hz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get frequency in Hz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set damping ratio.\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get damping ratio.\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const 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\n * 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\n * 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\n if (this.m_frequencyHz > 0.0) {\n K.getInverse22(this.m_mass);\n\n let invM = iA + iB;\n const m = invM > 0.0 ? 1.0 / invM : 0.0;\n\n const C = aB - aA - this.m_referenceAngle;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * m * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = m * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invM += this.m_gamma;\n this.m_mass.ez.z = invM != 0.0 ? 1.0 / invM : 0.0;\n } else if (K.ez.z == 0.0) {\n K.getInverse22(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n } else {\n K.getSymInverse33(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n if (this.m_frequencyHz > 0.0) {\n const Cdot2 = wB - wA;\n\n const impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z);\n this.m_impulse.z += impulse2;\n\n wA -= iA * impulse2;\n wB += iB * impulse2;\n\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n\n const impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1));\n this.m_impulse.x += impulse1.x;\n this.m_impulse.y += impulse1.y;\n\n const P = Vec2.clone(impulse1);\n\n vA.subMul(mA, P);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(mB, P);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, P);\n } else {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot));\n this.m_impulse.add(impulse);\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n let positionError: number;\n let angularError: number;\n\n const K = new Mat33();\n K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB;\n K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB;\n K.ez.x = -rA.y * iA - rB.y * iB;\n K.ex.y = K.ey.x;\n K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB;\n K.ez.y = rA.x * iA + rB.x * iB;\n K.ex.z = K.ez.x;\n K.ey.z = K.ez.y;\n K.ez.z = iA + iB;\n\n if (this.m_frequencyHz > 0.0) {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n positionError = C1.length();\n angularError = 0.0;\n\n const P = Vec2.neg(K.solve22(C1));\n\n cA.subMul(mA, P);\n aA -= iA * Vec2.crossVec2Vec2(rA, P);\n\n cB.addMul(mB, P);\n aB += iB * Vec2.crossVec2Vec2(rB, P);\n } else {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n const C2 = aB - aA - this.m_referenceAngle;\n\n positionError = C1.length();\n angularError = math_abs(C2);\n\n const C = new Vec3(C1.x, C1.y, C2);\n\n let impulse = new Vec3();\n if (K.ez.z > 0.0) {\n impulse = Vec3.neg(K.solve33(C));\n } else {\n const impulse2 = Vec2.neg(K.solve22(C1));\n impulse.set(impulse2.x, impulse2.y, 0.0);\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n cA.subMul(mA, P);\n aA -= iA * (Vec2.crossVec2Vec2(rA, P) + impulse.z);\n\n cB.addMul(mB, P);\n aB += iB * (Vec2.crossVec2Vec2(rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointOpt extends JointOpt {\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n /**\n * Suspension frequency, zero indicates no suspension.\n */\n frequencyHz?: number;\n /**\n * Suspension damping ratio, one indicates critical damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointDef extends JointDef, WheelJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation axis in bodyA.\n */\n localAxisA: Vec2Value;\n\n /** @internal renamed to localAxisA */\n localAxis?: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableMotor : false,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n frequencyHz : 2.0,\n dampingRatio : 0.7,\n};\n\ndeclare module \"./WheelJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WheelJoint(def: WheelJointDef): WheelJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WheelJoint(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value): WheelJoint;\n}\n\n/**\n * A wheel joint. This joint provides two degrees of freedom: translation along\n * an axis fixed in bodyA and rotation in the plane. In other words, it is a\n * point to line constraint with a rotational motor and a linear spring/damper.\n * This joint is designed for vehicle suspensions.\n */\n// @ts-expect-error\nexport class WheelJoint extends Joint {\n static TYPE = \"wheel-joint\" as const;\n\n /** @internal */ m_type: \"wheel-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_springMass: number;\n /** @internal */ m_springImpulse: number;\n\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableMotor: boolean;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n /** @internal */ m_ax: Vec2;\n /** @internal */ m_ay: Vec2;\n /** @internal */ m_sAx: number;\n /** @internal */ m_sBx: number;\n /** @internal */ m_sAy: number;\n /** @internal */ m_sBy: number;\n\n constructor(def: WheelJointDef);\n constructor(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: WheelJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WheelJoint)) {\n return new WheelJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_ax = Vec2.zero();\n this.m_ay = Vec2.zero();\n\n this.m_type = WheelJoint.TYPE;\n\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\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 // localAxis is renamed to localAxisA, this is for backward compatibility\n this.m_localXAxisA = Vec2.clone(def.localAxis);\n } else {\n this.m_localXAxisA = Vec2.neo(1.0, 0.0);\n }\n\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n this.m_springMass = 0.0;\n this.m_springImpulse = 0.0;\n\n this.m_maxMotorTorque = def.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed;\n this.m_enableMotor = def.enableMotor;\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Linear constraint (point-to-line)\n // d = pB - pA = xB + rB - xA - rA\n // C = dot(ay, d)\n // Cdot = dot(d, cross(wA, ay)) + dot(ay, vB + cross(wB, rB) - vA - cross(wA,\n // rA))\n // = -dot(ay, vA) - dot(cross(d + rA, ay), wA) + dot(ay, vB) + dot(cross(rB,\n // ay), vB)\n // J = [-ay, -cross(d + rA, ay), ay, cross(rB, ay)]\n\n // Spring linear constraint\n // C = dot(ax, d)\n // Cdot = = -dot(ax, vA) - dot(cross(d + rA, ax), wA) + dot(ax, vB) +\n // dot(cross(rB, ax), vB)\n // J = [-ax -cross(d+rA, ax) ax cross(rB, ax)]\n\n // Motor rotational constraint\n // Cdot = wB - wA\n // J = [0 0 -1 0 0 1]\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WheelJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WheelJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, def.localAxisA));\n }\n if (def.enableMotor !== undefined) {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const pA = bA.getWorldPoint(this.m_localAnchorA);\n const pB = bB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = bA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const wA = this.m_bodyA.m_angularVelocity;\n const wB = this.m_bodyB.m_angularVelocity;\n return wB - wA;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed, usually in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set/Get the maximum motor force, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Get the current motor torque given the inverse time step, usually in N-m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set/Get the spring frequency in hertz. Setting the frequency to zero disables\n * the spring.\n */\n setSpringFrequencyHz(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getSpringFrequencyHz(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set/Get the spring damping ratio\n */\n setSpringDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getSpringDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n // Point to line constraint\n {\n this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA);\n this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ay);\n this.m_sBy = Vec2.crossVec2Vec2(rB, this.m_ay);\n\n this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy\n * this.m_sBy;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n }\n\n // Spring constraint\n this.m_springMass = 0.0;\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n if (this.m_frequencyHz > 0.0) {\n this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ax);\n this.m_sBx = Vec2.crossVec2Vec2(rB, this.m_ax);\n\n const invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx\n * this.m_sBx;\n\n if (invMass > 0.0) {\n this.m_springMass = 1.0 / invMass;\n\n const C = Vec2.dot(d, this.m_ax);\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const damp = 2.0 * this.m_springMass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_springMass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (damp + h * k);\n if (this.m_gamma > 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n\n this.m_bias = C * h * k * this.m_gamma;\n\n this.m_springMass = invMass + this.m_gamma;\n if (this.m_springMass > 0.0) {\n this.m_springMass = 1.0 / this.m_springMass;\n }\n }\n } else {\n this.m_springImpulse = 0.0;\n }\n\n // Rotational motor\n if (this.m_enableMotor) {\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n } else {\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse *= step.dtRatio;\n this.m_springImpulse *= step.dtRatio;\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax);\n const LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse;\n const LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse;\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * LA;\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * LB;\n\n } else {\n this.m_impulse = 0.0;\n this.m_springImpulse = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Solve spring constraint\n {\n const Cdot = Vec2.dot(this.m_ax, vB) - Vec2.dot(this.m_ax, vA) + this.m_sBx * wB - this.m_sAx * wA;\n const impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse);\n this.m_springImpulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ax);\n const LA = impulse * this.m_sAx;\n const LB = impulse * this.m_sBx;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n // Solve rotational motor constraint\n {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve point to line constraint\n {\n const Cdot = Vec2.dot(this.m_ay, vB) - Vec2.dot(this.m_ay, vA) + this.m_sBy * wB - this.m_sAy * wA;\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ay);\n const LA = impulse * this.m_sAy;\n const LB = impulse * this.m_sBy;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const ay = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), ay);\n const sBy = Vec2.crossVec2Vec2(rB, ay);\n\n const C = Vec2.dot(d, ay);\n\n const 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\n const impulse = k != 0.0 ? -C / k : 0.0;\n\n const P = Vec2.mulNumVec2(impulse, ay);\n const LA = impulse * sAy;\n const LB = impulse * sBy;\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * LA;\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * LB;\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) <= Settings.linearSlop;\n }\n\n}\n","import { World } from \"../dynamics/World\";\nimport { Body } from \"../dynamics/Body\";\nimport { Joint } from \"../dynamics/Joint\";\nimport { Fixture } from \"../dynamics/Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { Vec2 } from \"../common/Vec2\";\nimport { Vec3 } from \"../common/Vec3\";\nimport { ChainShape } from \"../collision/shape/ChainShape\";\n// import { BoxShape } from \"../collision/shape/BoxShape\";\nimport { EdgeShape } from \"../collision/shape/EdgeShape\";\nimport { PolygonShape } from \"../collision/shape/PolygonShape\";\nimport { CircleShape } from \"../collision/shape/CircleShape\";\nimport { DistanceJoint } from \"../dynamics/joint/DistanceJoint\";\nimport { FrictionJoint } from \"../dynamics/joint/FrictionJoint\";\nimport { GearJoint } from \"../dynamics/joint/GearJoint\";\nimport { MotorJoint } from \"../dynamics/joint/MotorJoint\";\nimport { MouseJoint } from \"../dynamics/joint/MouseJoint\";\nimport { PrismaticJoint } from \"../dynamics/joint/PrismaticJoint\";\nimport { PulleyJoint } from \"../dynamics/joint/PulleyJoint\";\nimport { RevoluteJoint } from \"../dynamics/joint/RevoluteJoint\";\nimport { RopeJoint } from \"../dynamics/joint/RopeJoint\";\nimport { WeldJoint } from \"../dynamics/joint/WeldJoint\";\nimport { WheelJoint } from \"../dynamics/joint/WheelJoint\";\n\nlet SID = 0;\n\n// Classes to be serialized as reference objects\nconst SERIALIZE_REF_TYPES = {\n \"World\": World,\n \"Body\": Body,\n \"Joint\": Joint,\n \"Fixture\": Fixture,\n \"Shape\": Shape,\n};\n\n// For deserializing reference objects by reference type\nconst 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};\n\n// For deserializing data objects by type field\nconst DESERIALIZE_BY_TYPE_FIELD = {\n [Body.STATIC]: Body,\n [Body.DYNAMIC]: Body,\n [Body.KINEMATIC]: Body,\n [ChainShape.TYPE]: ChainShape,\n // [BoxShape.TYPE]: BoxShape,\n [PolygonShape.TYPE]: PolygonShape,\n [EdgeShape.TYPE]: EdgeShape,\n [CircleShape.TYPE]: CircleShape,\n [DistanceJoint.TYPE]: DistanceJoint,\n [FrictionJoint.TYPE]: FrictionJoint,\n [GearJoint.TYPE]: GearJoint,\n [MotorJoint.TYPE]: MotorJoint,\n [MouseJoint.TYPE]: MouseJoint,\n [PrismaticJoint.TYPE]: PrismaticJoint,\n [PulleyJoint.TYPE]: PulleyJoint,\n [RevoluteJoint.TYPE]: RevoluteJoint,\n [RopeJoint.TYPE]: RopeJoint,\n [WeldJoint.TYPE]: WeldJoint,\n [WheelJoint.TYPE]: WheelJoint,\n};\n\n// dummy types\ntype DataType = any;\ntype ObjectType = any;\ntype ClassName = any;\n\ntype SerializedType = object[];\n\ntype RefType = {\n refIndex: number,\n refType: string,\n};\n\ntype SerializerOptions = {\n rootClass: ClassName,\n preSerialize?: (obj: ObjectType) => DataType,\n postSerialize?: (data: DataType, obj: any) => DataType,\n preDeserialize?: (data: DataType) => DataType,\n postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType,\n};\n\nconst DEFAULT_OPTIONS: SerializerOptions = {\n rootClass: World,\n preSerialize: function(obj) { return obj; },\n postSerialize: function(data, obj) { return data; },\n preDeserialize: function(data: DataType) { return data; },\n postDeserialize: function(obj, data) { return obj; },\n};\n\ntype DeserializeChildCallback = (classHint: any, obj: any, context: any) => any;\ntype ClassDeserializerMethod = (data: any, context: any, deserialize: DeserializeChildCallback) => any;\n\nexport class Serializer {\n private options: SerializerOptions;\n constructor(options: SerializerOptions) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n toJson = (root: T): SerializedType => {\n const preSerialize = this.options.preSerialize;\n const postSerialize = this.options.postSerialize;\n const json = [];\n\n // Breadth-first ref serialization queue\n const refQueue = [root];\n\n const refMemoById: Record = {};\n\n function addToRefQueue(value: any, typeName: string) {\n value.__sid = value.__sid || ++SID;\n if (!refMemoById[value.__sid]) {\n refQueue.push(value);\n const index = json.length + refQueue.length;\n const ref = {\n refIndex: index,\n refType: typeName\n };\n refMemoById[value.__sid] = ref;\n }\n return refMemoById[value.__sid];\n }\n\n function serializeWithHooks(obj: ObjectType) {\n obj = preSerialize(obj);\n let data = obj._serialize();\n data = postSerialize(data, obj);\n return data;\n }\n\n // traverse the object graph\n // ref objects are pushed into the queue\n // other objects are serialize in-place \n function traverse(value: any, noRefType = false) {\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n // object with _serialize function\n if (typeof value._serialize === \"function\") {\n if (!noRefType) {\n for (const typeName in SERIALIZE_REF_TYPES) {\n if (value instanceof SERIALIZE_REF_TYPES[typeName]) {\n return addToRefQueue(value, typeName);\n }\n }\n }\n // object with _serialize function\n value = serializeWithHooks(value);\n }\n // recursive for arrays any objects\n if (Array.isArray(value)) {\n const newValue = [];\n for (let key = 0; key < value.length; key++) {\n newValue[key] = traverse(value[key]);\n }\n value = newValue;\n\n } else {\n const newValue = {};\n for (const 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\n while (refQueue.length) {\n const obj = refQueue.shift();\n const str = traverse(obj, true);\n json.push(str);\n }\n\n return json;\n };\n\n fromJson = (json: SerializedType): T => {\n const preDeserialize = this.options.preDeserialize;\n const postDeserialize = this.options.postDeserialize;\n const rootClass = this.options.rootClass;\n\n const deserializedRefMemoByIndex: Record = {};\n\n function deserializeWithHooks(classHint: ClassName, data: DataType, context: any): ObjectType {\n if (!classHint || !classHint._deserialize) {\n classHint = DESERIALIZE_BY_TYPE_FIELD[data.type];\n }\n const deserializer = classHint && classHint._deserialize;\n if (!deserializer) {\n return;\n }\n data = preDeserialize(data);\n const classDeserializeFn = classHint._deserialize as ClassDeserializerMethod;\n let obj = classDeserializeFn(data, context, deserializeChild);\n obj = postDeserialize(obj, data);\n return obj;\n }\n\n /**\n * Recursive callback function to deserialize a child data object or reference object.\n * \n * @param classHint suggested class to deserialize obj to\n * @param dataOrRef data or reference object\n * @param context for example world when deserializing bodies and joints\n */\n function deserializeChild(classHint: ClassName, dataOrRef: DataType | RefType, context: any) {\n const isRefObject = dataOrRef.refIndex && dataOrRef.refType;\n if (!isRefObject) {\n return deserializeWithHooks(classHint, dataOrRef, context); \n }\n const ref = dataOrRef as RefType;\n if (DESERIALIZE_BY_REF_TYPE[ref.refType]) {\n classHint = DESERIALIZE_BY_REF_TYPE[ref.refType];\n }\n const refIndex = ref.refIndex;\n if (!deserializedRefMemoByIndex[refIndex]) {\n const data = json[refIndex];\n const obj = deserializeWithHooks(classHint, data, context);\n deserializedRefMemoByIndex[refIndex] = obj;\n }\n return deserializedRefMemoByIndex[refIndex];\n }\n\n const root = deserializeWithHooks(rootClass, json[0], null);\n\n return root;\n };\n\n static toJson: (root: World) => SerializedType;\n static fromJson: (json: SerializedType) => World;\n}\n\nconst worldSerializer = new Serializer({\n rootClass: World,\n});\n\nSerializer.fromJson = worldSerializer.fromJson;\nSerializer.toJson = worldSerializer.toJson;\n","import type { AABBValue } from \"../collision/AABB\";\nimport type { World } from \"../dynamics/World\";\nimport type { Joint } from \"../dynamics/Joint\";\nimport type { Fixture } from \"../dynamics/Fixture\";\nimport type { Body } from \"../dynamics/Body\";\n\nexport interface Style {\n stroke?: string;\n fill?: string;\n lineWidth?: number;\n}\n\ntype KEY = \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" |\n \"8\" | \"9\" | \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\" |\n \"H\" | \"I\" | \"J\" | \"K\" | \"L\" | \"M\" | \"N\" | \"O\" | \"P\" |\n \"Q\" | \"R\" | \"S\" | \"T\" | \"U\" | \"V\" | \"W\" | \"X\" | \"Y\" |\n \"Z\" | \"right\" | \"left\" | \"up\" | \"down\" | \"fire\";\n\nexport type ActiveKeys = { [key in KEY]?: boolean };\n\ntype TestbedMountOptions = {};\n\nexport abstract class Testbed {\n /**\n * Mounts testbed. Call start with a world to start simulation and rendering.\n */\n static mount(options?: TestbedMountOptions): Testbed {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Mounts testbed if needed, then starts simulation and rendering.\n * \n * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`.\n */\n static start(world: World): Testbed {\n const testbed = Testbed.mount();\n testbed.start(world);\n return testbed;\n }\n\n /** World viewbox width. */\n width: number = 80;\n\n /** World viewbox height. */\n height: number = 60;\n\n /** World viewbox center vertical offset. */\n x: number = 0;\n\n /** World viewbox center horizontal offset. */\n y: number = -10;\n\n /** @hidden */\n scaleY: number = -1;\n\n /** World simulation step frequency */\n hz: number = 60;\n\n /** World simulation speed, default is 1 */\n speed: number = 1;\n\n background: string = \"#222222\";\n\n mouseForce?: number;\n activeKeys: ActiveKeys = {};\n\n /** callback, to be implemented by user */\n step = (dt: number, t: number): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keydown = (keyCode: number, label: string): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keyup = (keyCode: number, label: string): void => {\n return;\n };\n\n abstract status(name: string, value: any): void;\n abstract status(value: object | string): void;\n\n abstract info(text: string): void;\n\n color(r: number, g: number, b: number): string {\n r = r * 256 | 0;\n g = g * 256 | 0;\n b = b * 256 | 0;\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n }\n\n abstract drawPoint(p: {x: number, y: number}, r: any, color: string): void;\n abstract drawCircle(p: {x: number, y: number}, r: number, color: string): void;\n abstract drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawSegment(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawPolygon(points: Array<{x: number, y: number}>, color: string): void;\n abstract drawAABB(aabb: AABBValue, color: string): void;\n\n abstract start(world: World): void;\n\n abstract findOne(query: string): (Body | Joint | Fixture | null);\n abstract findAll(query: string): (Body | Joint | Fixture)[];\n}\n\ntype TestbedFactoryOptions = string | {};\n\n/** @deprecated */\ntype TestbedCallback = (testbed: Testbed) => (World | undefined);\n\n/** @deprecated */\nexport function testbed(callback: TestbedCallback): void;\n/** @deprecated */\nexport function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void;\n/** @internal */\nexport function testbed(a?: any, b?: any) {\n let callback: TestbedCallback | undefined;\n let options;\n if (typeof a === \"function\") {\n callback = a;\n options = b;\n } else if (typeof b === \"function\") {\n callback = b;\n options = a;\n } else {\n options = a ?? b;\n }\n const testbed = Testbed.mount(options);\n if (callback) {\n // this is for backwards compatibility\n const world = callback(testbed) || (testbed as any).world;\n testbed.start(world);\n } else {\n return testbed;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2Value } from \"../../common/Vec2\";\nimport { PolygonShape } from \"./PolygonShape\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\ndeclare module \"./BoxShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function BoxShape(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number): BoxShape;\n}\n\n/**\n * A rectangle polygon which extend PolygonShape.\n */\n// @ts-expect-error\nexport class BoxShape extends PolygonShape {\n // note that box is serialized/deserialized as polygon\n static TYPE = \"polygon\" as const;\n\n /**\n * \n * @param halfWidth \n * @param halfHeight \n * @param center coordinate of the center of the box relative to the body\n * @param angle angle of the box relative to the body\n */\n constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof BoxShape)) {\n return new BoxShape(halfWidth, halfHeight, center, angle);\n }\n\n super();\n\n this._setAsBox(halfWidth, halfHeight, center, angle);\n }\n}\n\nexport const Box = BoxShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\nimport * as matrix from \"../../common/Matrix\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact);\n\n/** @internal */ function CircleCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == CircleShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollideCircles(manifold, fixtureA.getShape() as CircleShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const pA = matrix.vec2(0, 0);\n/** @internal */ const pB = matrix.vec2(0, 0);\n\nexport const CollideCircles = function (manifold: Manifold, circleA: CircleShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n matrix.transformVec2(pA, xfA, circleA.m_p);\n matrix.transformVec2(pB, xfB, circleB.m_p);\n\n const distSqr = matrix.distSqrVec2(pB, pA);\n const rA = circleA.m_radius;\n const rB = circleB.m_radius;\n const radius = rA + rB;\n if (distSqr > radius * radius) {\n return;\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.copyVec2(manifold.localPoint, circleA.m_p);\n matrix.zeroVec2(manifold.localNormal);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact);\nContact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact);\n\n/** @internal */ function EdgeCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const shapeA = fixtureA.getShape() as EdgeShape;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\nfunction ChainCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const chain = fixtureA.getShape() as ChainShape;\n const edge = new EdgeShape();\n chain.getChildEdge(edge, indexA);\n\n const shapeA = edge;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const Q = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n// Compute contact points for edge versus circle.\n// This accounts for edge connectivity.\nexport const CollideEdgeCircle = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle in frame of edge\n matrix.retransformVec2(Q, xfB, xfA, circleB.m_p);\n\n const A = edgeA.m_vertex1;\n const B = edgeA.m_vertex2;\n matrix.subVec2(e, B, A);\n\n // Barycentric coordinates\n const u = matrix.dotVec2(e, B) - matrix.dotVec2(e, Q);\n const v = matrix.dotVec2(e, Q) - matrix.dotVec2(e, A);\n\n const radius = edgeA.m_radius + circleB.m_radius;\n\n // Region A\n if (v <= 0.0) {\n matrix.copyVec2(P, A);\n const dd = matrix.distSqrVec2(Q, A);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to A?\n if (edgeA.m_hasVertex0) {\n const A1 = edgeA.m_vertex0;\n const B1 = A;\n matrix.subVec2(e1, B1, A1);\n const u1 = matrix.dotVec2(e1, B1) - matrix.dotVec2(e1, Q);\n\n // Is the circle in Region AB of the previous edge?\n if (u1 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Region B\n if (u <= 0.0) {\n matrix.copyVec2(P, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to B?\n if (edgeA.m_hasVertex3) {\n const B2 = edgeA.m_vertex3;\n const A2 = B;\n matrix.subVec2(e2, B2, A2);\n const v2 = matrix.dotVec2(e2, Q) - matrix.dotVec2(e2, A2);\n\n // Is the circle in Region AB of the next edge?\n if (v2 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n\n return;\n }\n\n // Region AB\n const den = matrix.lengthSqrVec2(e);\n _ASSERT && console.assert(den > 0.0);\n matrix.combine2Vec2(P, u / den, A, v / den, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n matrix.crossNumVec2(n, 1, e);\n if (matrix.dotVec2(n, Q) - matrix.dotVec2(n, A) < 0.0) {\n matrix.negVec2(n);\n }\n matrix.normalizeVec2(n);\n\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, n);\n matrix.copyVec2(manifold.localPoint, A);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const incidentEdge = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipSegmentToLineNormal = matrix.vec2(0, 0);\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const v11 = matrix.vec2(0, 0);\n/** @internal */ const v12 = matrix.vec2(0, 0);\n/** @internal */ const localTangent = matrix.vec2(0, 0);\n/** @internal */ const localNormal = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n\n\nContact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact);\n\n/** @internal */ function PolygonContact(\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number,\n): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == PolygonShape.TYPE);\n CollidePolygons(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ interface MaxSeparation {\n maxSeparation: number;\n bestIndex: number;\n}\n\n/**\n * Find the max separation between poly1 and poly2 using edge normals from\n * poly1.\n */\n/** @internal */ function findMaxSeparation(\n poly1: PolygonShape,\n xf1: TransformValue,\n poly2: PolygonShape,\n xf2: TransformValue,\n output: MaxSeparation,\n): void {\n const count1 = poly1.m_count;\n const count2 = poly2.m_count;\n const n1s = poly1.m_normals;\n const v1s = poly1.m_vertices;\n const v2s = poly2.m_vertices;\n\n matrix.detransformTransform(xf, xf2, xf1);\n\n let bestIndex = 0;\n let maxSeparation = -Infinity;\n for (let i = 0; i < count1; ++i) {\n // Get poly1 normal in frame2.\n matrix.rotVec2(n, xf.q, n1s[i]);\n matrix.transformVec2(v1, xf, v1s[i]);\n\n // Find deepest point for normal i.\n let si = Infinity;\n for (let j = 0; j < count2; ++j) {\n const sij = matrix.dotVec2(n, v2s[j]) - matrix.dotVec2(n, v1);\n if (sij < si) {\n si = sij;\n }\n }\n\n if (si > maxSeparation) {\n maxSeparation = si;\n bestIndex = i;\n }\n }\n\n // used to keep last FindMaxSeparation call values\n output.maxSeparation = maxSeparation;\n output.bestIndex = bestIndex;\n}\n\n/** @internal */ function findIncidentEdge(\n clipVertex: ClipVertex[],\n poly1: PolygonShape,\n xf1: TransformValue,\n edge1: number,\n poly2: PolygonShape,\n xf2: TransformValue,\n): void {\n const normals1 = poly1.m_normals;\n\n const count2 = poly2.m_count;\n const vertices2 = poly2.m_vertices;\n const normals2 = poly2.m_normals;\n\n _ASSERT && console.assert(0 <= edge1 && edge1 < poly1.m_count);\n\n // Get the normal of the reference edge in poly2's frame.\n matrix.rerotVec2(normal1, xf2.q, xf1.q, normals1[edge1]);\n\n // Find the incident edge on poly2.\n let index = 0;\n let minDot = Infinity;\n for (let i = 0; i < count2; ++i) {\n const dot = matrix.dotVec2(normal1, normals2[i]);\n if (dot < minDot) {\n minDot = dot;\n index = i;\n }\n }\n\n // Build the clip vertices for the incident edge.\n const i1 = index;\n const i2 = i1 + 1 < count2 ? i1 + 1 : 0;\n\n matrix.transformVec2(clipVertex[0].v, xf2, vertices2[i1]);\n clipVertex[0].id.setFeatures(edge1, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.transformVec2(clipVertex[1].v, xf2, vertices2[i2]);\n clipVertex[1].id.setFeatures(edge1, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n}\n\n/** @internal */ const maxSeparation = {\n maxSeparation: 0,\n bestIndex: 0,\n};\n\n/**\n *\n * Find edge normal of max separation on A - return if separating axis is found
\n * Find edge normal of max separation on B - return if separation axis is found
\n * Choose reference edge as min(minA, minB)
\n * Find incident edge
\n * Clip\n *\n * The normal points from 1 to 2\n */\nexport const CollidePolygons = function (\n manifold: Manifold,\n polyA: PolygonShape,\n xfA: TransformValue,\n polyB: PolygonShape,\n xfB: TransformValue,\n): void {\n manifold.pointCount = 0;\n const totalRadius = polyA.m_radius + polyB.m_radius;\n\n findMaxSeparation(polyA, xfA, polyB, xfB, maxSeparation);\n const edgeA = maxSeparation.bestIndex;\n const separationA = maxSeparation.maxSeparation;\n if (separationA > totalRadius)\n return;\n\n findMaxSeparation(polyB, xfB, polyA, xfA, maxSeparation);\n const edgeB = maxSeparation.bestIndex;\n const separationB = maxSeparation.maxSeparation;\n if (separationB > totalRadius)\n return;\n\n let poly1: PolygonShape; // reference polygon\n let poly2: PolygonShape; // incident polygon\n let xf1: TransformValue;\n let xf2: TransformValue;\n let edge1: number; // reference edge\n let flip: boolean;\n const k_tol = 0.1 * Settings.linearSlop;\n\n if (separationB > separationA + k_tol) {\n poly1 = polyB;\n poly2 = polyA;\n xf1 = xfB;\n xf2 = xfA;\n edge1 = edgeB;\n manifold.type = ManifoldType.e_faceB;\n flip = true;\n } else {\n poly1 = polyA;\n poly2 = polyB;\n xf1 = xfA;\n xf2 = xfB;\n edge1 = edgeA;\n manifold.type = ManifoldType.e_faceA;\n flip = false;\n }\n\n incidentEdge[0].recycle(), incidentEdge[1].recycle();\n findIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2);\n\n const count1 = poly1.m_count;\n const vertices1 = poly1.m_vertices;\n\n const iv1 = edge1;\n const iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0;\n\n matrix.copyVec2(v11, vertices1[iv1]);\n matrix.copyVec2(v12, vertices1[iv2]);\n\n matrix.subVec2(localTangent, v12, v11);\n matrix.normalizeVec2(localTangent);\n\n matrix.crossVec2Num(localNormal, localTangent, 1.0);\n matrix.combine2Vec2(planePoint, 0.5, v11, 0.5, v12);\n\n matrix.rotVec2(tangent, xf1.q, localTangent);\n matrix.crossVec2Num(normal, tangent, 1.0);\n\n matrix.transformVec2(v11, xf1, v11);\n matrix.transformVec2(v12, xf1, v12);\n\n // Face offset.\n const frontOffset = matrix.dotVec2(normal, v11);\n\n // Side offsets, extended by polytope skin thickness.\n const sideOffset1 = -matrix.dotVec2(tangent, v11) + totalRadius;\n const sideOffset2 = matrix.dotVec2(tangent, v12) + totalRadius;\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n matrix.setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y);\n const np1 = clipSegmentToLine(clipPoints1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1);\n\n if (np1 < 2) {\n return;\n }\n\n // Clip to negative box side 1\n matrix.setVec2(clipSegmentToLineNormal, tangent.x, tangent.y);\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, clipSegmentToLineNormal, sideOffset2, iv2);\n\n if (np2 < 2) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n matrix.copyVec2(manifold.localNormal, localNormal);\n matrix.copyVec2(manifold.localPoint, planePoint);\n\n let pointCount = 0;\n for (let i = 0; i < clipPoints2.length/* maxManifoldPoints */; ++i) {\n const separation = matrix.dotVec2(normal, clipPoints2[i].v) - frontOffset;\n\n if (separation <= totalRadius) {\n const cp = manifold.points[pointCount];\n matrix.detransformVec2(cp.localPoint, xf2, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n if (flip) {\n // Swap features\n cp.id.swapFeatures();\n }\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact);\n\n/** @internal */ function PolygonCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollidePolygonCircle(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const cLocal = matrix.vec2(0, 0);\n/** @internal */ const faceCenter = matrix.vec2(0, 0);\n\nexport const CollidePolygonCircle = function (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle position in the frame of the polygon.\n matrix.retransformVec2(cLocal, xfB, xfA, circleB.m_p);\n\n // Find the min separating edge.\n let normalIndex = 0;\n let separation = -Infinity;\n const radius = polygonA.m_radius + circleB.m_radius;\n const vertexCount = polygonA.m_count;\n const vertices = polygonA.m_vertices;\n const normals = polygonA.m_normals;\n\n for (let i = 0; i < vertexCount; ++i) {\n const s = matrix.dotVec2(normals[i], cLocal) - matrix.dotVec2(normals[i], vertices[i]);\n\n if (s > radius) {\n // Early out.\n return;\n }\n\n if (s > separation) {\n separation = s;\n normalIndex = i;\n }\n }\n\n // Vertices that subtend the incident face.\n const vertIndex1 = normalIndex;\n const vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0;\n const v1 = vertices[vertIndex1];\n const v2 = vertices[vertIndex2];\n\n // If the center is inside the polygon ...\n if (separation < EPSILON) {\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[normalIndex]);\n matrix.combine2Vec2(manifold.localPoint, 0.5, v1, 0.5, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Compute barycentric coordinates\n // u1 = (cLocal - v1) dot (v2 - v1))\n const u1 = matrix.dotVec2(cLocal, v2) - matrix.dotVec2(cLocal, v1) - matrix.dotVec2(v1, v2) + matrix.dotVec2(v1, v1);\n // u2 = (cLocal - v2) dot (v1 - v2)\n const u2 = matrix.dotVec2(cLocal, v1) - matrix.dotVec2(cLocal, v2) - matrix.dotVec2(v2, v1) + matrix.dotVec2(v2, v2);\n if (u1 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v1) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v1);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v1);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else if (u2 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v2) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v2);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else {\n matrix.combine2Vec2(faceCenter, 0.5, v1, 0.5, v2);\n const separation = matrix.dotVec2(cLocal, normals[vertIndex1]) - matrix.dotVec2(faceCenter, normals[vertIndex1]);\n if (separation > radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[vertIndex1]);\n matrix.copyVec2(manifold.localPoint, faceCenter);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n }\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_min = Math.min;\n\nContact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact);\nContact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact);\n\n/** @internal */ function EdgePolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n CollideEdgePolygon(manifold, fA.getShape() as EdgeShape, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n// reused\n/** @internal */ const edge_reuse = new EdgeShape();\n\n/** @internal */ function ChainPolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n const chain = fA.getShape() as ChainShape;\n chain.getChildEdge(edge_reuse, indexA);\n\n CollideEdgePolygon(manifold, edge_reuse, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ enum EPAxisType {\n e_unknown = -1,\n e_edgeA = 1,\n e_edgeB = 2,\n}\n\n// unused?\n/** @internal */ enum VertexType {\n e_isolated = 0,\n e_concave = 1,\n e_convex = 2,\n}\n\n/**\n * This structure is used to keep track of the best separating axis.\n */\n/** @internal */ class EPAxis {\n type: EPAxisType;\n index: number;\n separation: number;\n}\n\n/**\n * This holds polygon B expressed in frame A.\n */\n/** @internal */ class TempPolygon {\n vertices: Vec2Value[] = []; // [Settings.maxPolygonVertices]\n normals: Vec2Value[] = []; // [Settings.maxPolygonVertices];\n count: number = 0;\n constructor() {\n for (let i = 0; i < Settings.maxPolygonVertices; i++) {\n this.vertices.push(matrix.vec2(0, 0));\n this.normals.push(matrix.vec2(0, 0));\n }\n }\n}\n\n/**\n * Reference face used for clipping\n */\n/** @internal */ class ReferenceFace {\n i1: number;\n i2: number;\n readonly v1 = matrix.vec2(0 ,0);\n readonly v2 = matrix.vec2(0 ,0);\n readonly normal = matrix.vec2(0 ,0);\n readonly sideNormal1 = matrix.vec2(0 ,0);\n sideOffset1: number;\n readonly sideNormal2 = matrix.vec2(0 ,0);\n sideOffset2: number;\n recycle() {\n matrix.zeroVec2(this.v1);\n matrix.zeroVec2(this.v2);\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.sideNormal1);\n matrix.zeroVec2(this.sideNormal2);\n }\n}\n\n// reused\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const ie = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const edgeAxis = new EPAxis();\n/** @internal */ const polygonAxis = new EPAxis();\n/** @internal */ const polygonBA = new TempPolygon();\n/** @internal */ const rf = new ReferenceFace();\n/** @internal */ const centroidB = matrix.vec2(0, 0);\n/** @internal */ const edge0 = matrix.vec2(0, 0);\n/** @internal */ const edge1 = matrix.vec2(0, 0);\n/** @internal */ const edge2 = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal0 = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n/** @internal */ const normal2 = matrix.vec2(0, 0);\n/** @internal */ const lowerLimit = matrix.vec2(0, 0);\n/** @internal */ const upperLimit = matrix.vec2(0, 0);\n/** @internal */ const perp = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n/**\n * This function collides and edge and a polygon, taking into account edge\n * adjacency.\n */\nexport const CollideEdgePolygon = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue): void {\n // Algorithm:\n // 1. Classify v1 and v2\n // 2. Classify polygon centroid as front or back\n // 3. Flip normal if necessary\n // 4. Initialize normal range to [-pi, pi] about face normal\n // 5. Adjust normal range according to adjacent edges\n // 6. Visit each separating axes, only accept axes within the range\n // 7. Return if _any_ axis indicates separation\n // 8. Clip\n\n // let m_type1: VertexType;\n // let m_type2: VertexType;\n\n matrix.detransformTransform(xf, xfA, xfB);\n matrix.transformVec2(centroidB, xf, polygonB.m_centroid);\n\n const v0 = edgeA.m_vertex0;\n const v1 = edgeA.m_vertex1;\n const v2 = edgeA.m_vertex2;\n const v3 = edgeA.m_vertex3;\n\n const hasVertex0 = edgeA.m_hasVertex0;\n const hasVertex3 = edgeA.m_hasVertex3;\n\n matrix.subVec2(edge1, v2, v1);\n matrix.normalizeVec2(edge1);\n matrix.setVec2(normal1, edge1.y, -edge1.x);\n const offset1 = matrix.dotVec2(normal1, centroidB) - matrix.dotVec2(normal1, v1);\n let offset0 = 0.0;\n let offset2 = 0.0;\n let convex1 = false;\n let convex2 = false;\n\n matrix.zeroVec2(normal0);\n matrix.zeroVec2(normal2);\n\n // Is there a preceding edge?\n if (hasVertex0) {\n matrix.subVec2(edge0, v1, v0);\n matrix.normalizeVec2(edge0);\n matrix.setVec2(normal0, edge0.y, -edge0.x);\n convex1 = matrix.crossVec2Vec2(edge0, edge1) >= 0.0;\n offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0);\n }\n\n // Is there a following edge?\n if (hasVertex3) {\n matrix.subVec2(edge2, v3, v2);\n matrix.normalizeVec2(edge2);\n matrix.setVec2(normal2, edge2.y, -edge2.x);\n convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0.0;\n offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v2);\n }\n\n let front: boolean;\n matrix.zeroVec2(normal);\n matrix.zeroVec2(lowerLimit);\n matrix.zeroVec2(upperLimit);\n\n // Determine front or back collision. Determine collision normal limits.\n if (hasVertex0 && hasVertex3) {\n if (convex1 && convex2) {\n front = offset0 >= 0.0 || offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex1) {\n front = offset0 >= 0.0 || (offset1 >= 0.0 && offset2 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex2) {\n front = offset2 >= 0.0 || (offset0 >= 0.0 && offset1 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex0) {\n if (convex1) {\n front = offset0 >= 0.0 || offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex3) {\n if (convex2) {\n front = offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n } else {\n front = offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n } else {\n front = offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n\n // Get polygonB in frameA\n polygonBA.count = polygonB.m_count;\n for (let i = 0; i < polygonB.m_count; ++i) {\n matrix.transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]);\n matrix.rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]);\n }\n\n const radius = polygonB.m_radius + edgeA.m_radius;\n\n manifold.pointCount = 0;\n\n { // ComputeEdgeSeparation\n edgeAxis.type = EPAxisType.e_edgeA;\n edgeAxis.index = front ? 0 : 1;\n edgeAxis.separation = Infinity;\n\n for (let i = 0; i < polygonBA.count; ++i) {\n const v = polygonBA.vertices[i];\n const s = matrix.dotVec2(normal, v) - matrix.dotVec2(normal, v1);\n if (s < edgeAxis.separation) {\n edgeAxis.separation = s;\n }\n }\n }\n\n // If no valid normal can be found than this edge should not collide.\n // @ts-ignore todo: why we need this if here?\n if (edgeAxis.type == EPAxisType.e_unknown) {\n return;\n }\n\n if (edgeAxis.separation > radius) {\n return;\n }\n\n { // ComputePolygonSeparation\n polygonAxis.type = EPAxisType.e_unknown;\n polygonAxis.index = -1;\n polygonAxis.separation = -Infinity;\n\n matrix.setVec2(perp, -normal.y, normal.x);\n\n for (let i = 0; i < polygonBA.count; ++i) {\n matrix.scaleVec2(n, -1, polygonBA.normals[i]);\n\n const s1 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v1);\n const s2 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v2);\n const s = math_min(s1, s2);\n\n if (s > radius) {\n // No collision\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n break;\n }\n\n // Adjacency\n if (matrix.dotVec2(n, perp) >= 0.0) {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(upperLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n } else {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(lowerLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n }\n\n if (s > polygonAxis.separation) {\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n }\n }\n }\n\n if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) {\n return;\n }\n\n // Use hysteresis for jitter reduction.\n const k_relativeTol = 0.98;\n const k_absoluteTol = 0.001;\n\n let primaryAxis: EPAxis;\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\n ie[0].recycle(), ie[1].recycle();\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n manifold.type = ManifoldType.e_faceA;\n\n // Search for the polygon normal that is most anti-parallel to the edge\n // normal.\n let bestIndex = 0;\n let bestValue = matrix.dotVec2(normal, polygonBA.normals[0]);\n for (let i = 1; i < polygonBA.count; ++i) {\n const value = matrix.dotVec2(normal, polygonBA.normals[i]);\n if (value < bestValue) {\n bestValue = value;\n bestIndex = i;\n }\n }\n\n const i1 = bestIndex;\n const i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0;\n\n matrix.copyVec2(ie[0].v, polygonBA.vertices[i1]);\n ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.copyVec2(ie[1].v, polygonBA.vertices[i2]);\n ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n\n if (front) {\n rf.i1 = 0;\n rf.i2 = 1;\n matrix.copyVec2(rf.v1, v1);\n matrix.copyVec2(rf.v2, v2);\n matrix.copyVec2(rf.normal, normal1);\n } else {\n rf.i1 = 1;\n rf.i2 = 0;\n matrix.copyVec2(rf.v1, v2);\n matrix.copyVec2(rf.v2, v1);\n matrix.scaleVec2(rf.normal, -1, normal1);\n }\n } else {\n manifold.type = ManifoldType.e_faceB;\n\n matrix.copyVec2(ie[0].v, v1);\n ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n matrix.copyVec2(ie[1].v, v2);\n ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n rf.i1 = primaryAxis.index;\n rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0;\n matrix.copyVec2(rf.v1, polygonBA.vertices[rf.i1]);\n matrix.copyVec2(rf.v2, polygonBA.vertices[rf.i2]);\n matrix.copyVec2(rf.normal, polygonBA.normals[rf.i1]);\n }\n\n matrix.setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x);\n matrix.setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y);\n rf.sideOffset1 = matrix.dotVec2(rf.sideNormal1, rf.v1);\n rf.sideOffset2 = matrix.dotVec2(rf.sideNormal2, rf.v2);\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n const np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1);\n\n if (np1 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Clip to negative box side 1\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2);\n\n if (np2 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.copyVec2(manifold.localNormal, rf.normal);\n matrix.copyVec2(manifold.localPoint, rf.v1);\n } else {\n matrix.copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]);\n matrix.copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]);\n }\n\n let pointCount = 0;\n for (let i = 0; i < Settings.maxManifoldPoints; ++i) {\n const separation = matrix.dotVec2(rf.normal, clipPoints2[i].v) - matrix.dotVec2(rf.normal, rf.v1);\n\n if (separation <= radius) {\n const cp = manifold.points[pointCount]; // ManifoldPoint\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.detransformVec2(cp.localPoint, xf, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n } else {\n matrix.copyVec2(cp.localPoint, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n cp.id.swapFeatures();\n }\n\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","import { CollidePolygons } from \"./collision/shape/CollidePolygon\";\nimport { Settings } from \"./Settings\";\nimport { Sweep } from \"./common/Sweep\";\nimport { DynamicTree } from \"./collision/DynamicTree\";\nimport { Manifold } from \"./collision/Manifold\";\nimport { Distance } from \"./collision/Distance\";\nimport { TimeOfImpact } from \"./collision/TimeOfImpact\";\nimport { stats } from \"./util/stats\";\n\n/** @hidden @deprecated Merged with main namespace */\nexport const internal = {\n CollidePolygons,\n Settings,\n Sweep,\n Manifold,\n Distance,\n TimeOfImpact,\n DynamicTree,\n stats\n};\n","/**\n * Stage.js 1.0.0-alpha.5\n *\n * @copyright Copyright (c) 2024 Ali Shakiba\n * @license The MIT License (MIT)\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 */\nvar math_random = Math.random;\nvar math_sqrt = Math.sqrt;\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}\nfunction wrap(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 length(x, y) {\n return math_sqrt(x * x + y * y);\n}\nvar math = Object.create(Math);\nmath.random = random;\nmath.wrap = wrap;\nmath.clamp = clamp;\nmath.length = length;\nmath.rotate = wrap;\nmath.limit = clamp;\nvar Matrix = (\n /** @class */\n function() {\n function Matrix2(a, b, c, d, e, f) {\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.e = 0;\n this.f = 0;\n if (typeof a === \"object\") {\n this.reset(a);\n } else {\n this.reset(a, b, c, d, e, f);\n }\n }\n Matrix2.prototype.toString = function() {\n return \"[\" + this.a + \", \" + this.b + \", \" + this.c + \", \" + this.d + \", \" + this.e + \", \" + this.f + \"]\";\n };\n Matrix2.prototype.clone = function() {\n return new Matrix2(this.a, this.b, this.c, this.d, this.e, this.f);\n };\n Matrix2.prototype.reset = function(a, b, c, d, e, f) {\n this._dirty = true;\n if (typeof a === \"object\") {\n this.a = a.a;\n this.d = a.d;\n this.b = a.b;\n this.c = a.c;\n this.e = a.e;\n this.f = a.f;\n } else {\n this.a = typeof a === \"number\" ? a : 1;\n this.b = typeof b === \"number\" ? b : 0;\n this.c = typeof c === \"number\" ? c : 0;\n this.d = typeof d === \"number\" ? d : 1;\n this.e = typeof e === \"number\" ? e : 0;\n this.f = typeof f === \"number\" ? f : 0;\n }\n return this;\n };\n Matrix2.prototype.identity = function() {\n this._dirty = true;\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.e = 0;\n this.f = 0;\n return this;\n };\n Matrix2.prototype.rotate = function(angle) {\n if (!angle) {\n return this;\n }\n this._dirty = true;\n var u = angle ? Math.cos(angle) : 1;\n var v = angle ? Math.sin(angle) : 0;\n var a = u * this.a - v * this.b;\n var b = u * this.b + v * this.a;\n var c = u * this.c - v * this.d;\n var d = u * this.d + v * this.c;\n var e = u * this.e - v * this.f;\n var f = u * this.f + v * this.e;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.translate = function(x, y) {\n if (!x && !y) {\n return this;\n }\n this._dirty = true;\n this.e += x;\n this.f += y;\n return this;\n };\n Matrix2.prototype.scale = function(x, y) {\n if (!(x - 1) && !(y - 1)) {\n return this;\n }\n this._dirty = true;\n this.a *= x;\n this.b *= y;\n this.c *= x;\n this.d *= y;\n this.e *= x;\n this.f *= y;\n return this;\n };\n Matrix2.prototype.skew = function(x, y) {\n if (!x && !y) {\n return this;\n }\n this._dirty = true;\n var a = this.a + this.b * x;\n var b = this.b + this.a * y;\n var c = this.c + this.d * x;\n var d = this.d + this.c * y;\n var e = this.e + this.f * x;\n var f = this.f + this.e * y;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.concat = function(m) {\n this._dirty = true;\n var a = this.a * m.a + this.b * m.c;\n var b = this.b * m.d + this.a * m.b;\n var c = this.c * m.a + this.d * m.c;\n var d = this.d * m.d + this.c * m.b;\n var e = this.e * m.a + m.e + this.f * m.c;\n var f = this.f * m.d + m.f + this.e * m.b;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n return this;\n };\n Matrix2.prototype.inverse = function() {\n if (this._dirty) {\n this._dirty = false;\n if (!this.inverted) {\n this.inverted = new Matrix2();\n }\n var z = this.a * this.d - this.b * this.c;\n this.inverted.a = this.d / z;\n this.inverted.b = -this.b / z;\n this.inverted.c = -this.c / z;\n this.inverted.d = this.a / z;\n this.inverted.e = (this.c * this.f - this.e * this.d) / z;\n this.inverted.f = (this.e * this.b - this.a * this.f) / z;\n }\n return this.inverted;\n };\n Matrix2.prototype.map = function(p, q) {\n q = q || { x: 0, y: 0 };\n q.x = this.a * p.x + this.c * p.y + this.e;\n q.y = this.b * p.x + this.d * p.y + this.f;\n return q;\n };\n Matrix2.prototype.mapX = function(x, y) {\n if (typeof x === \"object\") {\n y = x.y;\n x = x.x;\n }\n return this.a * x + this.c * y + this.e;\n };\n Matrix2.prototype.mapY = function(x, y) {\n if (typeof x === \"object\") {\n y = x.y;\n x = x.x;\n }\n return this.b * x + this.d * y + this.f;\n };\n return Matrix2;\n }()\n);\nvar objectToString = Object.prototype.toString;\nfunction isFn(value) {\n var str = objectToString.call(value);\n return str === \"[object Function]\" || str === \"[object GeneratorFunction]\" || str === \"[object AsyncFunction]\";\n}\nfunction isHash(value) {\n return objectToString.call(value) === \"[object Object]\" && value.constructor === Object;\n}\nconst stats = {\n create: 0,\n tick: 0,\n node: 0,\n draw: 0,\n fps: 0\n};\nvar uid = function() {\n return Date.now().toString(36) + Math.random().toString(36).slice(2);\n};\nvar Texture = (\n /** @class */\n function() {\n function Texture2() {\n this.uid = \"texture:\" + uid();\n this.sx = 0;\n this.sy = 0;\n this.dx = 0;\n this.dy = 0;\n }\n Texture2.prototype.setSourceCoordinate = function(x, y) {\n this.sx = x;\n this.sy = y;\n };\n Texture2.prototype.setSourceDimension = function(w, h) {\n this.sw = w;\n this.sh = h;\n };\n Texture2.prototype.setDestinationCoordinate = function(x, y) {\n this.dx = x;\n this.dy = y;\n };\n Texture2.prototype.setDestinationDimension = function(w, h) {\n this.dw = w;\n this.dh = h;\n };\n Texture2.prototype.draw = function(context, x1, y1, w1, h1, x2, y2, w2, h2) {\n var sx = this.sx;\n var sy = this.sy;\n var sw = this.sw;\n var sh = this.sh;\n var dx = this.dx;\n var dy = this.dy;\n var dw = this.dw;\n var dh = this.dh;\n if (typeof x1 === \"number\" || typeof y1 === \"number\" || typeof w1 === \"number\" || typeof h1 === \"number\" || typeof x2 === \"number\" || typeof y2 === \"number\" || typeof w2 === \"number\" || typeof h2 === \"number\") {\n if (typeof x2 === \"number\" || typeof y2 === \"number\" || typeof w2 === \"number\" || typeof h2 === \"number\") {\n sx += x1;\n sy += y1;\n sw = w1 !== null && w1 !== void 0 ? w1 : sw;\n sh = h1 !== null && h1 !== void 0 ? h1 : sh;\n dx += x2;\n dy += y2;\n dw = w2 !== null && w2 !== void 0 ? w2 : dw;\n dh = h2 !== null && h2 !== void 0 ? h2 : dh;\n } else {\n dx += x1;\n dy += y1;\n dw = w1;\n dh = h1;\n }\n }\n this.drawWithNormalizedArgs(context, sx, sy, sw, sh, dx, dy, dw, dh);\n };\n return Texture2;\n }()\n);\nvar __extends$9 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar ImageTexture = (\n /** @class */\n function(_super) {\n __extends$9(ImageTexture2, _super);\n function ImageTexture2(source, pixelRatio) {\n var _this = _super.call(this) || this;\n _this._pixelRatio = 1;\n if (typeof source === \"object\") {\n _this.setSourceImage(source, pixelRatio);\n }\n return _this;\n }\n ImageTexture2.prototype.setSourceImage = function(image2, pixelRatio) {\n if (pixelRatio === void 0) {\n pixelRatio = 1;\n }\n this._source = image2;\n this._pixelRatio = pixelRatio;\n };\n ImageTexture2.prototype.getWidth = function() {\n return this._source.width / this._pixelRatio;\n };\n ImageTexture2.prototype.getHeight = function() {\n return this._source.height / this._pixelRatio;\n };\n ImageTexture2.prototype.prerender = function(context) {\n return false;\n };\n ImageTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var image2 = this._source;\n if (image2 === null || typeof image2 !== \"object\") {\n return;\n }\n sw = sw !== null && sw !== void 0 ? sw : this.getWidth();\n sh = sh !== null && sh !== void 0 ? sh : this.getHeight();\n dw = dw !== null && dw !== void 0 ? dw : sw;\n dh = dh !== null && dh !== void 0 ? dh : sh;\n sx *= this._pixelRatio;\n sy *= this._pixelRatio;\n sw *= this._pixelRatio;\n sh *= this._pixelRatio;\n try {\n stats.draw++;\n context.drawImage(image2, sx, sy, sw, sh, dx, dy, dw, dh);\n } catch (ex) {\n if (!this._draw_failed) {\n console.log(\"Unable to draw: \", image2);\n console.log(ex);\n this._draw_failed = true;\n }\n }\n };\n return ImageTexture2;\n }(Texture)\n);\nvar __extends$8 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar PipeTexture = (\n /** @class */\n function(_super) {\n __extends$8(PipeTexture2, _super);\n function PipeTexture2(source) {\n var _this = _super.call(this) || this;\n _this._source = source;\n return _this;\n }\n PipeTexture2.prototype.setSourceTexture = function(texture2) {\n this._source = texture2;\n };\n PipeTexture2.prototype.getWidth = function() {\n var _a, _b;\n return (_b = (_a = this.dw) !== null && _a !== void 0 ? _a : this.sw) !== null && _b !== void 0 ? _b : this._source.getWidth();\n };\n PipeTexture2.prototype.getHeight = function() {\n var _a, _b;\n return (_b = (_a = this.dh) !== null && _a !== void 0 ? _a : this.sh) !== null && _b !== void 0 ? _b : this._source.getHeight();\n };\n PipeTexture2.prototype.prerender = function(context) {\n return this._source.prerender(context);\n };\n PipeTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var texture2 = this._source;\n if (texture2 === null || typeof texture2 !== \"object\") {\n return;\n }\n texture2.draw(context, sx, sy, sw, sh, dx, dy, dw, dh);\n };\n return PipeTexture2;\n }(Texture)\n);\nvar __extends$7 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __awaiter$1 = function(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator$1 = function(thisArg, body) {\n var _ = { label: 0, sent: function() {\n if (t[0] & 1)\n throw t[1];\n return t[1];\n }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f)\n throw new TypeError(\"Generator is already executing.\");\n while (_)\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n return t;\n if (y = 0, t)\n op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return { value: op[1], done: false };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2])\n _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5)\n throw op[1];\n return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar Atlas = (\n /** @class */\n function(_super) {\n __extends$7(Atlas2, _super);\n function Atlas2(def) {\n if (def === void 0) {\n def = {};\n }\n var _this = _super.call(this) || this;\n _this.pipeSpriteTexture = function(def2) {\n var map = _this._map;\n var ppu = _this._ppu;\n var trim = _this._trim;\n if (!def2) {\n return void 0;\n }\n def2 = Object.assign({}, def2);\n if (isFn(map)) {\n def2 = map(def2);\n }\n if (ppu != 1) {\n def2.x *= ppu;\n def2.y *= ppu;\n def2.width *= ppu;\n def2.height *= ppu;\n def2.top *= ppu;\n def2.bottom *= ppu;\n def2.left *= ppu;\n def2.right *= ppu;\n }\n if (trim != 0) {\n def2.x += trim;\n def2.y += trim;\n def2.width -= 2 * trim;\n def2.height -= 2 * trim;\n def2.top -= trim;\n def2.bottom -= trim;\n def2.left -= trim;\n def2.right -= trim;\n }\n var texture2 = new PipeTexture(_this);\n texture2.top = def2.top;\n texture2.bottom = def2.bottom;\n texture2.left = def2.left;\n texture2.right = def2.right;\n texture2.setSourceCoordinate(def2.x, def2.y);\n texture2.setSourceDimension(def2.width, def2.height);\n return texture2;\n };\n _this.findSpriteDefinition = function(query) {\n var textures = _this._textures;\n if (textures) {\n if (isFn(textures)) {\n return textures(query);\n } else if (isHash(textures)) {\n return textures[query];\n }\n }\n };\n _this.select = function(query) {\n if (!query) {\n return new TextureSelection(new PipeTexture(_this));\n }\n var textureDefinition = _this.findSpriteDefinition(query);\n if (textureDefinition) {\n return new TextureSelection(textureDefinition, _this);\n }\n };\n _this.name = def.name;\n _this._ppu = def.ppu || def.ratio || 1;\n _this._trim = def.trim || 0;\n _this._map = def.map || def.filter;\n _this._textures = def.textures;\n if (typeof def.image === \"object\" && isHash(def.image)) {\n _this._imageSrc = def.image.src || def.image.url;\n if (typeof def.image.ratio === \"number\") {\n _this._pixelRatio = def.image.ratio;\n }\n } else {\n if (typeof def.imagePath === \"string\") {\n _this._imageSrc = def.imagePath;\n } else if (typeof def.image === \"string\") {\n _this._imageSrc = def.image;\n }\n if (typeof def.imageRatio === \"number\") {\n _this._pixelRatio = def.imageRatio;\n }\n }\n deprecatedWarning(def);\n return _this;\n }\n Atlas2.prototype.load = function() {\n return __awaiter$1(this, void 0, void 0, function() {\n var image2;\n return __generator$1(this, function(_a) {\n switch (_a.label) {\n case 0:\n if (!this._imageSrc)\n return [3, 2];\n return [4, asyncLoadImage(this._imageSrc)];\n case 1:\n image2 = _a.sent();\n this.setSourceImage(image2, this._pixelRatio);\n _a.label = 2;\n case 2:\n return [\n 2\n /*return*/\n ];\n }\n });\n });\n };\n return Atlas2;\n }(ImageTexture)\n);\nfunction asyncLoadImage(src) {\n return new Promise(function(resolve, reject) {\n var img = new Image();\n img.onload = function() {\n resolve(img);\n };\n img.onerror = function(error) {\n console.error(\"Loading failed: \" + src);\n reject(error);\n };\n img.src = src;\n });\n}\nfunction deprecatedWarning(def) {\n if (\"filter\" in def)\n console.warn(\"'filter' field of atlas definition is deprecated\");\n if (\"cutouts\" in def)\n console.warn(\"'cutouts' field of atlas definition is deprecated\");\n if (\"sprites\" in def)\n console.warn(\"'sprites' field of atlas definition is deprecated\");\n if (\"factory\" in def)\n console.warn(\"'factory' field of atlas definition is deprecated\");\n if (\"ratio\" in def)\n console.warn(\"'ratio' field of atlas definition is deprecated\");\n if (\"imagePath\" in def)\n console.warn(\"'imagePath' field of atlas definition is deprecated\");\n if (\"imageRatio\" in def)\n console.warn(\"'imageRatio' field of atlas definition is deprecated\");\n if (typeof def.image === \"object\" && \"url\" in def.image)\n console.warn(\"'image.url' field of atlas definition is deprecated\");\n}\nvar __extends$6 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __awaiter = function(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = function(thisArg, body) {\n var _ = { label: 0, sent: function() {\n if (t[0] & 1)\n throw t[1];\n return t[1];\n }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f)\n throw new TypeError(\"Generator is already executing.\");\n while (_)\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n return t;\n if (y = 0, t)\n op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return { value: op[1], done: false };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2])\n _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n if (op[0] & 5)\n throw op[1];\n return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nfunction isAtlasSpriteDefinition(selection) {\n return typeof selection === \"object\" && isHash(selection) && \"number\" === typeof selection.width && \"number\" === typeof selection.height;\n}\nvar TextureSelection = (\n /** @class */\n function() {\n function TextureSelection2(selection, atlas2) {\n this.selection = selection;\n this.atlas = atlas2;\n }\n TextureSelection2.prototype.resolve = function(selection, subquery) {\n if (!selection) {\n return NO_TEXTURE;\n } else if (Array.isArray(selection)) {\n return this.resolve(selection[0]);\n } else if (selection instanceof Texture) {\n return selection;\n } else if (isAtlasSpriteDefinition(selection)) {\n if (!this.atlas) {\n return NO_TEXTURE;\n }\n return this.atlas.pipeSpriteTexture(selection);\n } else if (typeof selection === \"object\" && isHash(selection) && typeof subquery !== \"undefined\") {\n return this.resolve(selection[subquery]);\n } else if (typeof selection === \"function\" && isFn(selection)) {\n return this.resolve(selection(subquery));\n } else if (typeof selection === \"string\") {\n if (!this.atlas) {\n return NO_TEXTURE;\n }\n return this.resolve(this.atlas.findSpriteDefinition(selection));\n }\n };\n TextureSelection2.prototype.one = function(subquery) {\n return this.resolve(this.selection, subquery);\n };\n TextureSelection2.prototype.array = function(arr) {\n var array = Array.isArray(arr) ? arr : [];\n if (Array.isArray(this.selection)) {\n for (var i = 0; i < this.selection.length; i++) {\n array[i] = this.resolve(this.selection[i]);\n }\n } else {\n array[0] = this.resolve(this.selection);\n }\n return array;\n };\n return TextureSelection2;\n }()\n);\nvar NO_TEXTURE = new /** @class */\n(function(_super) {\n __extends$6(class_1, _super);\n function class_1() {\n var _this = _super.call(this) || this;\n _this.setSourceDimension(0, 0);\n return _this;\n }\n class_1.prototype.getWidth = function() {\n return 0;\n };\n class_1.prototype.getHeight = function() {\n return 0;\n };\n class_1.prototype.prerender = function(context) {\n return false;\n };\n class_1.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n };\n class_1.prototype.setSourceCoordinate = function(x, y) {\n };\n class_1.prototype.setSourceDimension = function(w, h) {\n };\n class_1.prototype.setDestinationCoordinate = function(x, y) {\n };\n class_1.prototype.setDestinationDimension = function(w, h) {\n };\n class_1.prototype.draw = function() {\n };\n return class_1;\n}(Texture))();\nvar NO_SELECTION = new TextureSelection(NO_TEXTURE);\nvar ATLAS_MEMO_BY_NAME = {};\nvar ATLAS_ARRAY = [];\nfunction atlas(def) {\n return __awaiter(this, void 0, Promise, function() {\n var atlas2;\n return __generator(this, function(_a) {\n switch (_a.label) {\n case 0:\n if (def instanceof Atlas) {\n atlas2 = def;\n } else {\n atlas2 = new Atlas(def);\n }\n if (atlas2.name) {\n ATLAS_MEMO_BY_NAME[atlas2.name] = atlas2;\n }\n ATLAS_ARRAY.push(atlas2);\n return [4, atlas2.load()];\n case 1:\n _a.sent();\n return [2, atlas2];\n }\n });\n });\n}\nfunction texture(query) {\n if (\"string\" !== typeof query) {\n return new TextureSelection(query);\n }\n var result = null;\n var colonIndex = query.indexOf(\":\");\n if (colonIndex > 0 && query.length > colonIndex + 1) {\n var atlas_1 = ATLAS_MEMO_BY_NAME[query.slice(0, colonIndex)];\n result = atlas_1 && atlas_1.select(query.slice(colonIndex + 1));\n }\n if (!result) {\n var atlas_2 = ATLAS_MEMO_BY_NAME[query];\n result = atlas_2 && atlas_2.select();\n }\n if (!result) {\n for (var i = 0; i < ATLAS_ARRAY.length; i++) {\n result = ATLAS_ARRAY[i].select(query);\n if (result) {\n break;\n }\n }\n }\n if (!result) {\n console.error(\"Texture not found: \" + query);\n result = NO_SELECTION;\n }\n return result;\n}\nvar __extends$5 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar ResizableTexture = (\n /** @class */\n function(_super) {\n __extends$5(ResizableTexture2, _super);\n function ResizableTexture2(source, mode) {\n var _this = _super.call(this) || this;\n _this._source = source;\n _this._resizeMode = mode;\n return _this;\n }\n ResizableTexture2.prototype.getWidth = function() {\n var _a;\n return (_a = this.dw) !== null && _a !== void 0 ? _a : this._source.getWidth();\n };\n ResizableTexture2.prototype.getHeight = function() {\n var _a;\n return (_a = this.dh) !== null && _a !== void 0 ? _a : this._source.getHeight();\n };\n ResizableTexture2.prototype.prerender = function(context) {\n return false;\n };\n ResizableTexture2.prototype.drawWithNormalizedArgs = function(context, sx, sy, sw, sh, dx, dy, dw, dh) {\n var texture2 = this._source;\n if (texture2 === null || typeof texture2 !== \"object\") {\n return;\n }\n var outWidth = dw;\n var outHeight = dh;\n var left = Number.isFinite(texture2.left) ? texture2.left : 0;\n var right = Number.isFinite(texture2.right) ? texture2.right : 0;\n var top = Number.isFinite(texture2.top) ? texture2.top : 0;\n var bottom = Number.isFinite(texture2.bottom) ? texture2.bottom : 0;\n var width = texture2.getWidth() - left - right;\n var height = texture2.getHeight() - top - bottom;\n if (!this._innerSize) {\n outWidth = Math.max(outWidth - left - right, 0);\n outHeight = Math.max(outHeight - top - bottom, 0);\n }\n if (top > 0 && left > 0) {\n texture2.draw(context, 0, 0, left, top, 0, 0, left, top);\n }\n if (bottom > 0 && left > 0) {\n texture2.draw(context, 0, height + top, left, bottom, 0, outHeight + top, left, bottom);\n }\n if (top > 0 && right > 0) {\n texture2.draw(context, width + left, 0, right, top, outWidth + left, 0, right, top);\n }\n if (bottom > 0 && right > 0) {\n texture2.draw(context, width + left, height + top, right, bottom, outWidth + left, outHeight + top, right, bottom);\n }\n if (this._resizeMode === \"stretch\") {\n if (top > 0) {\n texture2.draw(context, left, 0, width, top, left, 0, outWidth, top);\n }\n if (bottom > 0) {\n texture2.draw(context, left, height + top, width, bottom, left, outHeight + top, outWidth, bottom);\n }\n if (left > 0) {\n texture2.draw(context, 0, top, left, height, 0, top, left, outHeight);\n }\n if (right > 0) {\n texture2.draw(context, width + left, top, right, height, outWidth + left, top, right, outHeight);\n }\n texture2.draw(context, left, top, width, height, left, top, outWidth, outHeight);\n } else if (this._resizeMode === \"tile\") {\n var l = left;\n var r = outWidth;\n var w = void 0;\n while (r > 0) {\n w = Math.min(width, r);\n r -= width;\n var t = top;\n var b = outHeight;\n var h = void 0;\n while (b > 0) {\n h = Math.min(height, b);\n b -= height;\n texture2.draw(context, left, top, w, h, l, t, w, h);\n if (r <= 0) {\n if (left) {\n texture2.draw(context, 0, top, left, h, 0, t, left, h);\n }\n if (right) {\n texture2.draw(context, width + left, top, right, h, l + w, t, right, h);\n }\n }\n t += h;\n }\n if (top) {\n texture2.draw(context, left, 0, w, top, l, 0, w, top);\n }\n if (bottom) {\n texture2.draw(context, left, height + top, w, bottom, l, t, w, bottom);\n }\n l += w;\n }\n }\n };\n return ResizableTexture2;\n }(Texture)\n);\nfunction getPixelRatio() {\n return typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1;\n}\nfunction isValidFitMode(value) {\n return value && (value === \"cover\" || value === \"contain\" || value === \"fill\" || value === \"in\" || value === \"in-pad\" || value === \"out\" || value === \"out-crop\");\n}\nvar iid$1 = 0;\nvar Pin = (\n /** @class */\n function() {\n function Pin2(owner) {\n this.uid = \"pin:\" + uid();\n this._owner = owner;\n this._parent = null;\n this._relativeMatrix = new Matrix();\n this._absoluteMatrix = new Matrix();\n this.reset();\n }\n Pin2.prototype.reset = function() {\n this._textureAlpha = 1;\n this._alpha = 1;\n this._width = 0;\n this._height = 0;\n this._scaleX = 1;\n this._scaleY = 1;\n this._skewX = 0;\n this._skewY = 0;\n this._rotation = 0;\n this._pivoted = false;\n this._pivotX = 0;\n this._pivotY = 0;\n this._handled = false;\n this._handleX = 0;\n this._handleY = 0;\n this._aligned = false;\n this._alignX = 0;\n this._alignY = 0;\n this._offsetX = 0;\n this._offsetY = 0;\n this._boxX = 0;\n this._boxY = 0;\n this._boxWidth = this._width;\n this._boxHeight = this._height;\n this._ts_translate = ++iid$1;\n this._ts_transform = ++iid$1;\n this._ts_matrix = ++iid$1;\n };\n Pin2.prototype._update = function() {\n this._parent = this._owner._parent && this._owner._parent._pin;\n if (this._handled && this._mo_handle != this._ts_transform) {\n this._mo_handle = this._ts_transform;\n this._ts_translate = ++iid$1;\n }\n if (this._aligned && this._parent && this._mo_align != this._parent._ts_transform) {\n this._mo_align = this._parent._ts_transform;\n this._ts_translate = ++iid$1;\n }\n return this;\n };\n Pin2.prototype.toString = function() {\n return this._owner + \" (\" + (this._parent ? this._parent._owner : null) + \")\";\n };\n Pin2.prototype.absoluteMatrix = function() {\n this._update();\n var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_matrix : 0);\n if (this._mo_abs == ts) {\n return this._absoluteMatrix;\n }\n this._mo_abs = ts;\n var abs = this._absoluteMatrix;\n abs.reset(this.relativeMatrix());\n this._parent && abs.concat(this._parent._absoluteMatrix);\n this._ts_matrix = ++iid$1;\n return abs;\n };\n Pin2.prototype.relativeMatrix = function() {\n this._update();\n var ts = Math.max(this._ts_transform, this._ts_translate, this._parent ? this._parent._ts_transform : 0);\n if (this._mo_rel == ts) {\n return this._relativeMatrix;\n }\n this._mo_rel = ts;\n var rel = this._relativeMatrix;\n rel.identity();\n if (this._pivoted) {\n rel.translate(-this._pivotX * this._width, -this._pivotY * this._height);\n }\n rel.scale(this._scaleX, this._scaleY);\n rel.skew(this._skewX, this._skewY);\n rel.rotate(this._rotation);\n if (this._pivoted) {\n rel.translate(this._pivotX * this._width, this._pivotY * this._height);\n }\n if (this._pivoted) {\n this._boxX = 0;\n this._boxY = 0;\n this._boxWidth = this._width;\n this._boxHeight = this._height;\n } else {\n var p = void 0;\n var q = void 0;\n if (rel.a > 0 && rel.c > 0 || rel.a < 0 && rel.c < 0) {\n p = 0;\n q = rel.a * this._width + rel.c * this._height;\n } else {\n p = rel.a * this._width;\n q = rel.c * this._height;\n }\n if (p > q) {\n this._boxX = q;\n this._boxWidth = p - q;\n } else {\n this._boxX = p;\n this._boxWidth = q - p;\n }\n if (rel.b > 0 && rel.d > 0 || rel.b < 0 && rel.d < 0) {\n p = 0;\n q = rel.b * this._width + rel.d * this._height;\n } else {\n p = rel.b * this._width;\n q = rel.d * this._height;\n }\n if (p > q) {\n this._boxY = q;\n this._boxHeight = p - q;\n } else {\n this._boxY = p;\n this._boxHeight = q - p;\n }\n }\n this._x = this._offsetX;\n this._y = this._offsetY;\n this._x -= this._boxX + this._handleX * this._boxWidth;\n this._y -= this._boxY + this._handleY * this._boxHeight;\n if (this._aligned && this._parent) {\n this._parent.relativeMatrix();\n this._x += this._alignX * this._parent._width;\n this._y += this._alignY * this._parent._height;\n }\n rel.translate(this._x, this._y);\n return this._relativeMatrix;\n };\n Pin2.prototype.get = function(key) {\n if (typeof getters[key] === \"function\") {\n return getters[key](this);\n }\n };\n Pin2.prototype.set = function(a, b) {\n if (typeof a === \"string\") {\n if (typeof setters[a] === \"function\" && typeof b !== \"undefined\") {\n setters[a](this, b);\n }\n } else if (typeof a === \"object\") {\n for (b in a) {\n if (typeof setters[b] === \"function\" && typeof a[b] !== \"undefined\") {\n setters[b](this, a[b], a);\n }\n }\n }\n if (this._owner) {\n this._owner._ts_pin = ++iid$1;\n this._owner.touch();\n }\n return this;\n };\n Pin2.prototype.fit = function(width, height, mode) {\n this._ts_transform = ++iid$1;\n if (mode === \"contain\") {\n mode = \"in-pad\";\n }\n if (mode === \"cover\") {\n mode = \"out-crop\";\n }\n if (typeof width === \"number\") {\n this._scaleX = width / this._unscaled_width;\n this._width = this._unscaled_width;\n }\n if (typeof height === \"number\") {\n this._scaleY = height / this._unscaled_height;\n this._height = this._unscaled_height;\n }\n if (typeof width === \"number\" && typeof height === \"number\" && typeof mode === \"string\") {\n if (mode === \"fill\")\n ;\n else if (mode === \"out\" || mode === \"out-crop\") {\n this._scaleX = this._scaleY = Math.max(this._scaleX, this._scaleY);\n } else if (mode === \"in\" || mode === \"in-pad\") {\n this._scaleX = this._scaleY = Math.min(this._scaleX, this._scaleY);\n }\n if (mode === \"out-crop\" || mode === \"in-pad\") {\n this._width = width / this._scaleX;\n this._height = height / this._scaleY;\n }\n }\n };\n return Pin2;\n }()\n);\nvar getters = {\n alpha: function(pin) {\n return pin._alpha;\n },\n textureAlpha: function(pin) {\n return pin._textureAlpha;\n },\n width: function(pin) {\n return pin._width;\n },\n height: function(pin) {\n return pin._height;\n },\n boxWidth: function(pin) {\n return pin._boxWidth;\n },\n boxHeight: function(pin) {\n return pin._boxHeight;\n },\n // scale : function(pin: Pin) {\n // },\n scaleX: function(pin) {\n return pin._scaleX;\n },\n scaleY: function(pin) {\n return pin._scaleY;\n },\n // skew : function(pin: Pin) {\n // },\n skewX: function(pin) {\n return pin._skewX;\n },\n skewY: function(pin) {\n return pin._skewY;\n },\n rotation: function(pin) {\n return pin._rotation;\n },\n // pivot : function(pin: Pin) {\n // },\n pivotX: function(pin) {\n return pin._pivotX;\n },\n pivotY: function(pin) {\n return pin._pivotY;\n },\n // offset : function(pin: Pin) {\n // },\n offsetX: function(pin) {\n return pin._offsetX;\n },\n offsetY: function(pin) {\n return pin._offsetY;\n },\n // align : function(pin: Pin) {\n // },\n alignX: function(pin) {\n return pin._alignX;\n },\n alignY: function(pin) {\n return pin._alignY;\n },\n // handle : function(pin: Pin) {\n // },\n handleX: function(pin) {\n return pin._handleX;\n },\n handleY: function(pin) {\n return pin._handleY;\n }\n};\nvar setters = {\n alpha: function(pin, value) {\n pin._alpha = value;\n },\n textureAlpha: function(pin, value) {\n pin._textureAlpha = value;\n },\n width: function(pin, value) {\n pin._unscaled_width = value;\n pin._width = value;\n pin._ts_transform = ++iid$1;\n },\n height: function(pin, value) {\n pin._unscaled_height = value;\n pin._height = value;\n pin._ts_transform = ++iid$1;\n },\n scale: function(pin, value) {\n pin._scaleX = value;\n pin._scaleY = value;\n pin._ts_transform = ++iid$1;\n },\n scaleX: function(pin, value) {\n pin._scaleX = value;\n pin._ts_transform = ++iid$1;\n },\n scaleY: function(pin, value) {\n pin._scaleY = value;\n pin._ts_transform = ++iid$1;\n },\n skew: function(pin, value) {\n pin._skewX = value;\n pin._skewY = value;\n pin._ts_transform = ++iid$1;\n },\n skewX: function(pin, value) {\n pin._skewX = value;\n pin._ts_transform = ++iid$1;\n },\n skewY: function(pin, value) {\n pin._skewY = value;\n pin._ts_transform = ++iid$1;\n },\n rotation: function(pin, value) {\n pin._rotation = value;\n pin._ts_transform = ++iid$1;\n },\n pivot: function(pin, value) {\n pin._pivotX = value;\n pin._pivotY = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n pivotX: function(pin, value) {\n pin._pivotX = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n pivotY: function(pin, value) {\n pin._pivotY = value;\n pin._pivoted = true;\n pin._ts_transform = ++iid$1;\n },\n offset: function(pin, value) {\n pin._offsetX = value;\n pin._offsetY = value;\n pin._ts_translate = ++iid$1;\n },\n offsetX: function(pin, value) {\n pin._offsetX = value;\n pin._ts_translate = ++iid$1;\n },\n offsetY: function(pin, value) {\n pin._offsetY = value;\n pin._ts_translate = ++iid$1;\n },\n align: function(pin, value) {\n this.alignX(pin, value);\n this.alignY(pin, value);\n },\n alignX: function(pin, value) {\n pin._alignX = value;\n pin._aligned = true;\n pin._ts_translate = ++iid$1;\n this.handleX(pin, value);\n },\n alignY: function(pin, value) {\n pin._alignY = value;\n pin._aligned = true;\n pin._ts_translate = ++iid$1;\n this.handleY(pin, value);\n },\n handle: function(pin, value) {\n this.handleX(pin, value);\n this.handleY(pin, value);\n },\n handleX: function(pin, value) {\n pin._handleX = value;\n pin._handled = true;\n pin._ts_translate = ++iid$1;\n },\n handleY: function(pin, value) {\n pin._handleY = value;\n pin._handled = true;\n pin._ts_translate = ++iid$1;\n },\n resizeMode: function(pin, value, all) {\n if (all) {\n if (value == \"in\") {\n value = \"in-pad\";\n } else if (value == \"out\") {\n value = \"out-crop\";\n }\n pin.fit(all.resizeWidth, all.resizeHeight, value);\n }\n },\n resizeWidth: function(pin, value, all) {\n if (!all || !all.resizeMode) {\n pin.fit(value, null);\n }\n },\n resizeHeight: function(pin, value, all) {\n if (!all || !all.resizeMode) {\n pin.fit(null, value);\n }\n },\n scaleMode: function(pin, value, all) {\n if (all) {\n pin.fit(all.scaleWidth, all.scaleHeight, value);\n }\n },\n scaleWidth: function(pin, value, all) {\n if (!all || !all.scaleMode) {\n pin.fit(value, null);\n }\n },\n scaleHeight: function(pin, value, all) {\n if (!all || !all.scaleMode) {\n pin.fit(null, value);\n }\n },\n matrix: function(pin, value) {\n this.scaleX(pin, value.a);\n this.skewX(pin, value.c / value.d);\n this.skewY(pin, value.b / value.a);\n this.scaleY(pin, value.d);\n this.offsetX(pin, value.e);\n this.offsetY(pin, value.f);\n this.rotation(pin, 0);\n }\n};\nfunction IDENTITY(x) {\n return x;\n}\nvar LOOKUP_CACHE = {};\nvar MODE_BY_NAME = {};\nvar EASE_BY_NAME = {};\nvar Easing = (\n /** @class */\n function() {\n function Easing2() {\n }\n Easing2.get = function(token, fallback) {\n fallback = fallback || IDENTITY;\n if (typeof token === \"function\") {\n return token;\n }\n if (typeof token !== \"string\") {\n return fallback;\n }\n var easeFn = LOOKUP_CACHE[token];\n if (easeFn) {\n return easeFn;\n }\n var tokens = /^(\\w+)(-(in|out|in-out|out-in))?(\\((.*)\\))?$/i.exec(token);\n if (!tokens || !tokens.length) {\n return fallback;\n }\n var easeName = tokens[1];\n var easing = EASE_BY_NAME[easeName];\n var modeName = tokens[3];\n var modeFn = MODE_BY_NAME[modeName];\n var params = tokens[5];\n if (!easing) {\n easeFn = fallback;\n } else if (\"fn\" in easing && typeof easing.fn === \"function\") {\n easeFn = easing.fn;\n } else if (\"fc\" in easing && typeof easing.fc === \"function\") {\n var args = params ? params.replace(/\\s+/, \"\").split(\",\") : void 0;\n easeFn = easing.fc.apply(easing.fc, args);\n } else {\n easeFn = fallback;\n }\n if (modeFn) {\n easeFn = modeFn(easeFn);\n }\n LOOKUP_CACHE[token] = easeFn;\n return easeFn;\n };\n return Easing2;\n }()\n);\nfunction addMode(name, fn) {\n MODE_BY_NAME[name] = fn;\n}\nfunction addEaseFn(data) {\n var names = data.name.split(/\\s+/);\n for (var i = 0; i < names.length; i++) {\n var key = names[i];\n if (key) {\n EASE_BY_NAME[key] = data;\n }\n }\n}\naddMode(\"in\", function(f) {\n return f;\n});\naddMode(\"out\", function(f) {\n return function(t) {\n return 1 - f(1 - t);\n };\n});\naddMode(\"in-out\", function(f) {\n return function(t) {\n return t < 0.5 ? f(2 * t) / 2 : 1 - f(2 * (1 - t)) / 2;\n };\n});\naddMode(\"out-in\", function(f) {\n return function(t) {\n return t < 0.5 ? 1 - f(2 * (1 - t)) / 2 : f(2 * t) / 2;\n };\n});\naddEaseFn({\n name: \"linear\",\n fn: function(t) {\n return t;\n }\n});\naddEaseFn({\n name: \"quad\",\n fn: function(t) {\n return t * t;\n }\n});\naddEaseFn({\n name: \"cubic\",\n fn: function(t) {\n return t * t * t;\n }\n});\naddEaseFn({\n name: \"quart\",\n fn: function(t) {\n return t * t * t * t;\n }\n});\naddEaseFn({\n name: \"quint\",\n fn: function(t) {\n return t * t * t * t * t;\n }\n});\naddEaseFn({\n name: \"sin sine\",\n fn: function(t) {\n return 1 - Math.cos(t * Math.PI / 2);\n }\n});\naddEaseFn({\n name: \"exp expo\",\n fn: function(t) {\n return t == 0 ? 0 : Math.pow(2, 10 * (t - 1));\n }\n});\naddEaseFn({\n name: \"circle circ\",\n fn: function(t) {\n return 1 - Math.sqrt(1 - t * t);\n }\n});\naddEaseFn({\n name: \"bounce\",\n fn: function(t) {\n return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 : 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n }\n});\naddEaseFn({\n name: \"poly\",\n fc: function(e) {\n return function(t) {\n return Math.pow(t, e);\n };\n }\n});\naddEaseFn({\n name: \"elastic\",\n fc: function(a, p) {\n p = p || 0.45;\n a = a || 1;\n var s = p / (2 * Math.PI) * Math.asin(1 / a);\n return function(t) {\n return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p);\n };\n }\n});\naddEaseFn({\n name: \"back\",\n fc: function(s) {\n s = typeof s !== \"undefined\" ? s : 1.70158;\n return function(t) {\n return t * t * ((s + 1) * t - s);\n };\n }\n});\nvar Transition = (\n /** @class */\n function() {\n function Transition2(owner, options) {\n if (options === void 0) {\n options = {};\n }\n this.uid = \"transition:\" + uid();\n this._ending = [];\n this._end = {};\n this._duration = options.duration || 400;\n this._delay = options.delay || 0;\n this._owner = owner;\n this._time = 0;\n }\n Transition2.prototype.tick = function(node, elapsed, now, last) {\n this._time += elapsed;\n if (this._time < this._delay) {\n return;\n }\n var time = this._time - this._delay;\n if (!this._start) {\n this._start = {};\n for (var key in this._end) {\n this._start[key] = this._owner.pin(key);\n }\n }\n var p = Math.min(time / this._duration, 1);\n var ended = p >= 1;\n if (typeof this._easing == \"function\") {\n p = this._easing(p);\n }\n var q = 1 - p;\n for (var key in this._end) {\n this._owner.pin(key, this._start[key] * q + this._end[key] * p);\n }\n return ended;\n };\n Transition2.prototype.finish = function() {\n var _this = this;\n this._ending.forEach(function(callback) {\n try {\n callback.call(_this._owner);\n } catch (e) {\n console.error(e);\n }\n });\n return this._next;\n };\n Transition2.prototype.tween = function(a, b) {\n var options;\n if (typeof a === \"object\" && a !== null) {\n options = a;\n } else {\n options = {};\n if (typeof a === \"number\") {\n options.duration = a;\n if (typeof b === \"number\") {\n options.delay = b;\n }\n }\n }\n return this._next = new Transition2(this._owner, options);\n };\n Transition2.prototype.duration = function(duration) {\n this._duration = duration;\n return this;\n };\n Transition2.prototype.delay = function(delay) {\n this._delay = delay;\n return this;\n };\n Transition2.prototype.ease = function(easing) {\n this._easing = Easing.get(easing);\n return this;\n };\n Transition2.prototype.done = function(fn) {\n this._ending.push(fn);\n return this;\n };\n Transition2.prototype.hide = function() {\n this._ending.push(function() {\n this.hide();\n });\n this._hide = true;\n return this;\n };\n Transition2.prototype.remove = function() {\n this._ending.push(function() {\n this.remove();\n });\n this._remove = true;\n return this;\n };\n Transition2.prototype.pin = function(a, b) {\n if (typeof a === \"object\") {\n for (var attr in a) {\n pinning(this._owner, this._end, attr, a[attr]);\n }\n } else if (typeof b !== \"undefined\") {\n pinning(this._owner, this._end, a, b);\n }\n return this;\n };\n Transition2.prototype.then = function(fn) {\n this.done(fn);\n return this;\n };\n Transition2.prototype.clear = function(forward) {\n return this;\n };\n Transition2.prototype.size = function(w, h) {\n this.pin(\"width\", w);\n this.pin(\"height\", h);\n return this;\n };\n Transition2.prototype.width = function(w) {\n if (typeof w === \"undefined\") {\n return this.pin(\"width\");\n }\n this.pin(\"width\", w);\n return this;\n };\n Transition2.prototype.height = function(h) {\n if (typeof h === \"undefined\") {\n return this.pin(\"height\");\n }\n this.pin(\"height\", h);\n return this;\n };\n Transition2.prototype.offset = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n }\n this.pin(\"offsetX\", a);\n this.pin(\"offsetY\", b);\n return this;\n };\n Transition2.prototype.rotate = function(a) {\n this.pin(\"rotation\", a);\n return this;\n };\n Transition2.prototype.skew = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\") {\n b = a;\n }\n this.pin(\"skewX\", a);\n this.pin(\"skewY\", b);\n return this;\n };\n Transition2.prototype.scale = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\") {\n b = a;\n }\n this.pin(\"scaleX\", a);\n this.pin(\"scaleY\", b);\n return this;\n };\n Transition2.prototype.alpha = function(a, ta) {\n this.pin(\"alpha\", a);\n if (typeof ta !== \"undefined\") {\n this.pin(\"textureAlpha\", ta);\n }\n return this;\n };\n return Transition2;\n }()\n);\nfunction pinning(node, map, key, value) {\n if (typeof node.pin(key) === \"number\") {\n map[key] = value;\n } else if (typeof node.pin(key + \"X\") === \"number\" && typeof node.pin(key + \"Y\") === \"number\") {\n map[key + \"X\"] = value;\n map[key + \"Y\"] = value;\n }\n}\nvar iid = 0;\nstats.create = 0;\nfunction assertType(obj) {\n if (obj && obj instanceof Node) {\n return obj;\n }\n throw \"Invalid node: \" + obj;\n}\nfunction create() {\n return layout();\n}\nfunction layer() {\n return maximize();\n}\nfunction box() {\n return minimize();\n}\nfunction layout() {\n return new Node();\n}\nfunction row(align) {\n return layout().row(align).label(\"Row\");\n}\nfunction column(align) {\n return layout().column(align).label(\"Column\");\n}\nfunction minimize() {\n return layout().minimize().label(\"Minimize\");\n}\nfunction maximize() {\n return layout().maximize().label(\"Maximize\");\n}\nvar Node = (\n /** @class */\n function() {\n function Node2() {\n var _this = this;\n this.uid = \"node:\" + uid();\n this._label = \"\";\n this._parent = null;\n this._next = null;\n this._prev = null;\n this._first = null;\n this._last = null;\n this._visible = true;\n this._alpha = 1;\n this._padding = 0;\n this._spacing = 0;\n this._pin = new Pin(this);\n this._listeners = {};\n this._attrs = {};\n this._flags = {};\n this._transitions = [];\n this._tickBefore = [];\n this._tickAfter = [];\n this.MAX_ELAPSE = Infinity;\n this._transitionTickInitied = false;\n this._transitionTickLastTime = 0;\n this._transitionTick = function(elapsed, now, last) {\n if (!_this._transitions.length) {\n return false;\n }\n var ignore = _this._transitionTickLastTime !== last;\n _this._transitionTickLastTime = now;\n if (ignore) {\n return true;\n }\n var head = _this._transitions[0];\n var ended = head.tick(_this, elapsed, now, last);\n if (ended) {\n if (head === _this._transitions[0]) {\n _this._transitions.shift();\n }\n var next = head.finish();\n if (next) {\n _this._transitions.unshift(next);\n }\n }\n return true;\n };\n stats.create++;\n }\n Node2.prototype.matrix = function(relative) {\n if (relative === void 0) {\n relative = false;\n }\n if (relative === true) {\n return this._pin.relativeMatrix();\n }\n return this._pin.absoluteMatrix();\n };\n Node2.prototype.getPixelRatio = function() {\n var _a;\n var m = (_a = this._parent) === null || _a === void 0 ? void 0 : _a.matrix();\n var pixelRatio = !m ? 1 : Math.max(Math.abs(m.a), Math.abs(m.b)) / getPixelRatio();\n return pixelRatio;\n };\n Node2.prototype.pin = function(a, b) {\n if (typeof a === \"object\") {\n this._pin.set(a);\n return this;\n } else if (typeof a === \"string\") {\n if (typeof b === \"undefined\") {\n return this._pin.get(a);\n } else {\n this._pin.set(a, b);\n return this;\n }\n } else if (typeof a === \"undefined\") {\n return this._pin;\n }\n };\n Node2.prototype.fit = function(a, b, c) {\n if (typeof a === \"object\") {\n c = b;\n b = a.y;\n a = a.x;\n }\n this._pin.fit(a, b, c);\n return this;\n };\n Node2.prototype.scaleTo = function(a, b, c) {\n return this.fit(a, b, c);\n };\n Node2.prototype.toString = function() {\n return \"[\" + this._label + \"]\";\n };\n Node2.prototype.id = function(id) {\n return this.label(id);\n };\n Node2.prototype.label = function(label) {\n if (typeof label === \"undefined\") {\n return this._label;\n }\n this._label = label;\n return this;\n };\n Node2.prototype.attr = function(name, value) {\n if (typeof value === \"undefined\") {\n return this._attrs !== null ? this._attrs[name] : void 0;\n }\n (this._attrs !== null ? this._attrs : this._attrs = {})[name] = value;\n return this;\n };\n Node2.prototype.visible = function(visible) {\n if (typeof visible === \"undefined\") {\n return this._visible;\n }\n this._visible = visible;\n this._parent && (this._parent._ts_children = ++iid);\n this._ts_pin = ++iid;\n this.touch();\n return this;\n };\n Node2.prototype.hide = function() {\n this.visible(false);\n return this;\n };\n Node2.prototype.show = function() {\n this.visible(true);\n return this;\n };\n Node2.prototype.parent = function() {\n return this._parent;\n };\n Node2.prototype.next = function(visible) {\n var next = this._next;\n while (next && visible && !next._visible) {\n next = next._next;\n }\n return next;\n };\n Node2.prototype.prev = function(visible) {\n var prev = this._prev;\n while (prev && visible && !prev._visible) {\n prev = prev._prev;\n }\n return prev;\n };\n Node2.prototype.first = function(visible) {\n var next = this._first;\n while (next && visible && !next._visible) {\n next = next._next;\n }\n return next;\n };\n Node2.prototype.last = function(visible) {\n var prev = this._last;\n while (prev && visible && !prev._visible) {\n prev = prev._prev;\n }\n return prev;\n };\n Node2.prototype.visit = function(visitor, payload) {\n var reverse = visitor.reverse;\n var visible = visitor.visible;\n if (visitor.start && visitor.start(this, payload)) {\n return;\n }\n var child;\n var next = reverse ? this.last(visible) : this.first(visible);\n while (child = next) {\n next = reverse ? child.prev(visible) : child.next(visible);\n if (child.visit(visitor, payload)) {\n return true;\n }\n }\n return visitor.end && visitor.end(this, payload);\n };\n Node2.prototype.append = function(child, more) {\n if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) {\n Node2.append(this, child[i]);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n Node2.append(this, arguments[i]);\n }\n } else if (typeof child !== \"undefined\")\n Node2.append(this, child);\n return this;\n };\n Node2.prototype.prepend = function(child, more) {\n if (Array.isArray(child)) {\n for (var i = child.length - 1; i >= 0; i--) {\n Node2.prepend(this, child[i]);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = arguments.length - 1; i >= 0; i--) {\n Node2.prepend(this, arguments[i]);\n }\n } else if (typeof child !== \"undefined\")\n Node2.prepend(this, child);\n return this;\n };\n Node2.prototype.appendTo = function(parent) {\n Node2.append(parent, this);\n return this;\n };\n Node2.prototype.prependTo = function(parent) {\n Node2.prepend(parent, this);\n return this;\n };\n Node2.prototype.insertNext = function(sibling, more) {\n if (Array.isArray(sibling)) {\n for (var i = 0; i < sibling.length; i++) {\n Node2.insertAfter(sibling[i], this);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n Node2.insertAfter(arguments[i], this);\n }\n } else if (typeof sibling !== \"undefined\") {\n Node2.insertAfter(sibling, this);\n }\n return this;\n };\n Node2.prototype.insertPrev = function(sibling, more) {\n if (Array.isArray(sibling)) {\n for (var i = sibling.length - 1; i >= 0; i--) {\n Node2.insertBefore(sibling[i], this);\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = arguments.length - 1; i >= 0; i--) {\n Node2.insertBefore(arguments[i], this);\n }\n } else if (typeof sibling !== \"undefined\") {\n Node2.insertBefore(sibling, this);\n }\n return this;\n };\n Node2.prototype.insertAfter = function(prev) {\n Node2.insertAfter(this, prev);\n return this;\n };\n Node2.prototype.insertBefore = function(next) {\n Node2.insertBefore(this, next);\n return this;\n };\n Node2.append = function(parent, child) {\n assertType(child);\n assertType(parent);\n child.remove();\n if (parent._last) {\n parent._last._next = child;\n child._prev = parent._last;\n }\n child._parent = parent;\n parent._last = child;\n if (!parent._first) {\n parent._first = child;\n }\n child._parent._flag(child, true);\n child._ts_parent = ++iid;\n parent._ts_children = ++iid;\n parent.touch();\n };\n Node2.prepend = function(parent, child) {\n assertType(child);\n assertType(parent);\n child.remove();\n if (parent._first) {\n parent._first._prev = child;\n child._next = parent._first;\n }\n child._parent = parent;\n parent._first = child;\n if (!parent._last) {\n parent._last = child;\n }\n child._parent._flag(child, true);\n child._ts_parent = ++iid;\n parent._ts_children = ++iid;\n parent.touch();\n };\n Node2.insertBefore = function(self, next) {\n assertType(self);\n assertType(next);\n self.remove();\n var parent = next._parent;\n var prev = next._prev;\n if (!parent) {\n return;\n }\n next._prev = self;\n prev && (prev._next = self) || parent && (parent._first = self);\n self._parent = parent;\n self._prev = prev;\n self._next = next;\n self._parent._flag(self, true);\n self._ts_parent = ++iid;\n self.touch();\n };\n Node2.insertAfter = function(self, prev) {\n assertType(self);\n assertType(prev);\n self.remove();\n var parent = prev._parent;\n var next = prev._next;\n if (!parent) {\n return;\n }\n prev._next = self;\n next && (next._prev = self) || parent && (parent._last = self);\n self._parent = parent;\n self._prev = prev;\n self._next = next;\n self._parent._flag(self, true);\n self._ts_parent = ++iid;\n self.touch();\n };\n Node2.prototype.remove = function(child, more) {\n if (typeof child !== \"undefined\") {\n if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) {\n assertType(child[i]).remove();\n }\n } else if (typeof more !== \"undefined\") {\n for (var i = 0; i < arguments.length; i++) {\n assertType(arguments[i]).remove();\n }\n } else {\n assertType(child).remove();\n }\n return this;\n }\n if (this._prev) {\n this._prev._next = this._next;\n }\n if (this._next) {\n this._next._prev = this._prev;\n }\n if (this._parent) {\n if (this._parent._first === this) {\n this._parent._first = this._next;\n }\n if (this._parent._last === this) {\n this._parent._last = this._prev;\n }\n this._parent._flag(this, false);\n this._parent._ts_children = ++iid;\n this._parent.touch();\n }\n this._prev = this._next = this._parent = null;\n this._ts_parent = ++iid;\n return this;\n };\n Node2.prototype.empty = function() {\n var child = null;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child._prev = child._next = child._parent = null;\n this._flag(child, false);\n }\n this._first = this._last = null;\n this._ts_children = ++iid;\n this.touch();\n return this;\n };\n Node2.prototype.touch = function() {\n this._ts_touch = ++iid;\n this._parent && this._parent.touch();\n return this;\n };\n Node2.prototype._flag = function(key, value) {\n if (typeof value === \"undefined\") {\n return this._flags !== null && this._flags[key] || 0;\n }\n if (typeof key === \"string\") {\n if (value) {\n this._flags = this._flags || {};\n if (!this._flags[key] && this._parent) {\n this._parent._flag(key, true);\n }\n this._flags[key] = (this._flags[key] || 0) + 1;\n } else if (this._flags && this._flags[key] > 0) {\n if (this._flags[key] == 1 && this._parent) {\n this._parent._flag(key, false);\n }\n this._flags[key] = this._flags[key] - 1;\n }\n }\n if (typeof key === \"object\") {\n if (key._flags) {\n for (var type in key._flags) {\n if (key._flags[type] > 0) {\n this._flag(type, value);\n }\n }\n }\n }\n return this;\n };\n Node2.prototype.hitTest = function(hit) {\n var width = this._pin._width;\n var height = this._pin._height;\n return hit.x >= 0 && hit.x <= width && hit.y >= 0 && hit.y <= height;\n };\n Node2.prototype.prerender = function() {\n if (!this._visible) {\n return;\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child.prerender();\n }\n };\n Node2.prototype.render = function(context) {\n if (!this._visible) {\n return;\n }\n stats.node++;\n var m = this.matrix();\n context.setTransform(m.a, m.b, m.c, m.d, m.e, m.f);\n this._alpha = this._pin._alpha * (this._parent ? this._parent._alpha : 1);\n var alpha = this._pin._textureAlpha * this._alpha;\n if (context.globalAlpha != alpha) {\n context.globalAlpha = alpha;\n }\n if (this._textures) {\n for (var i = 0, n = this._textures.length; i < n; i++) {\n this._textures[i].draw(context);\n }\n }\n if (context.globalAlpha != this._alpha) {\n context.globalAlpha = this._alpha;\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n child.render(context);\n }\n };\n Node2.prototype._tick = function(elapsed, now, last) {\n if (!this._visible) {\n return;\n }\n if (elapsed > this.MAX_ELAPSE) {\n elapsed = this.MAX_ELAPSE;\n }\n var ticked = false;\n if (this._tickBefore !== null) {\n for (var i = 0; i < this._tickBefore.length; i++) {\n stats.tick++;\n var tickFn = this._tickBefore[i];\n ticked = tickFn.call(this, elapsed, now, last) === true || ticked;\n }\n }\n var child;\n var next = this._first;\n while (child = next) {\n next = child._next;\n if (child._flag(\"_tick\")) {\n ticked = child._tick(elapsed, now, last) === true ? true : ticked;\n }\n }\n if (this._tickAfter !== null) {\n for (var i = 0; i < this._tickAfter.length; i++) {\n stats.tick++;\n var tickFn = this._tickAfter[i];\n ticked = tickFn.call(this, elapsed, now, last) === true || ticked;\n }\n }\n return ticked;\n };\n Node2.prototype.tick = function(callback, before) {\n var _a, _b;\n if (before === void 0) {\n before = false;\n }\n if (typeof callback !== \"function\") {\n return;\n }\n if (before) {\n if (this._tickBefore === null) {\n this._tickBefore = [];\n }\n this._tickBefore.push(callback);\n } else {\n if (this._tickAfter === null) {\n this._tickAfter = [];\n }\n this._tickAfter.push(callback);\n }\n var hasTickListener = ((_a = this._tickAfter) === null || _a === void 0 ? void 0 : _a.length) > 0 || ((_b = this._tickBefore) === null || _b === void 0 ? void 0 : _b.length) > 0;\n this._flag(\"_tick\", hasTickListener);\n };\n Node2.prototype.untick = function(callback) {\n if (typeof callback !== \"function\") {\n return;\n }\n var i;\n if (this._tickBefore !== null && (i = this._tickBefore.indexOf(callback)) >= 0) {\n this._tickBefore.splice(i, 1);\n }\n if (this._tickAfter !== null && (i = this._tickAfter.indexOf(callback)) >= 0) {\n this._tickAfter.splice(i, 1);\n }\n };\n Node2.prototype.timeout = function(callback, time) {\n this.setTimeout(callback, time);\n };\n Node2.prototype.setTimeout = function(callback, time) {\n function timer(t) {\n if ((time -= t) < 0) {\n this.untick(timer);\n callback.call(this);\n } else {\n return true;\n }\n }\n this.tick(timer);\n return timer;\n };\n Node2.prototype.clearTimeout = function(timer) {\n this.untick(timer);\n };\n Node2.prototype.on = function(type, listener) {\n if (!type || !type.length || typeof listener !== \"function\") {\n return this;\n }\n if (typeof type !== \"string\" && typeof type.join === \"function\") {\n for (var i = 0; i < type.length; i++) {\n this.on(type[i], listener);\n }\n } else if (typeof type === \"string\" && type.indexOf(\" \") > -1) {\n type = type.match(/\\S+/g);\n for (var i = 0; i < type.length; i++) {\n this._on(type[i], listener);\n }\n } else if (typeof type === \"string\") {\n this._on(type, listener);\n } else\n ;\n return this;\n };\n Node2.prototype._on = function(type, listener) {\n if (typeof type !== \"string\" && typeof listener !== \"function\") {\n return;\n }\n this._listeners[type] = this._listeners[type] || [];\n this._listeners[type].push(listener);\n this._flag(type, true);\n };\n Node2.prototype.off = function(type, listener) {\n if (!type || !type.length || typeof listener !== \"function\") {\n return this;\n }\n if (typeof type !== \"string\" && typeof type.join === \"function\") {\n for (var i = 0; i < type.length; i++) {\n this.off(type[i], listener);\n }\n } else if (typeof type === \"string\" && type.indexOf(\" \") > -1) {\n type = type.match(/\\S+/g);\n for (var i = 0; i < type.length; i++) {\n this._off(type[i], listener);\n }\n } else if (typeof type === \"string\") {\n this._off(type, listener);\n } else\n ;\n return this;\n };\n Node2.prototype._off = function(type, listener) {\n if (typeof type !== \"string\" && typeof listener !== \"function\") {\n return;\n }\n var listeners = this._listeners[type];\n if (!listeners || !listeners.length) {\n return;\n }\n var index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n this._flag(type, false);\n }\n };\n Node2.prototype.listeners = function(type) {\n return this._listeners[type];\n };\n Node2.prototype.publish = function(name, args) {\n var 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].apply(this, args);\n }\n return listeners.length;\n };\n Node2.prototype.trigger = function(name, args) {\n this.publish(name, args);\n return this;\n };\n Node2.prototype.size = function(w, h) {\n this.pin(\"width\", w);\n this.pin(\"height\", h);\n return this;\n };\n Node2.prototype.width = function(w) {\n if (typeof w === \"undefined\") {\n return this.pin(\"width\");\n }\n this.pin(\"width\", w);\n return this;\n };\n Node2.prototype.height = function(h) {\n if (typeof h === \"undefined\") {\n return this.pin(\"height\");\n }\n this.pin(\"height\", h);\n return this;\n };\n Node2.prototype.offset = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n }\n this.pin(\"offsetX\", a);\n this.pin(\"offsetY\", b);\n return this;\n };\n Node2.prototype.rotate = function(a) {\n this.pin(\"rotation\", a);\n return this;\n };\n Node2.prototype.skew = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\")\n b = a;\n this.pin(\"skewX\", a);\n this.pin(\"skewY\", b);\n return this;\n };\n Node2.prototype.scale = function(a, b) {\n if (typeof a === \"object\") {\n b = a.y;\n a = a.x;\n } else if (typeof b === \"undefined\")\n b = a;\n this.pin(\"scaleX\", a);\n this.pin(\"scaleY\", b);\n return this;\n };\n Node2.prototype.alpha = function(a, ta) {\n this.pin(\"alpha\", a);\n if (typeof ta !== \"undefined\") {\n this.pin(\"textureAlpha\", ta);\n }\n return this;\n };\n Node2.prototype.tween = function(a, b, c) {\n var options;\n if (typeof a === \"object\" && a !== null) {\n options = a;\n } else {\n options = {};\n if (typeof a === \"number\") {\n options.duration = a;\n if (typeof b === \"number\") {\n options.delay = b;\n if (typeof c === \"boolean\") {\n options.append = c;\n }\n } else if (typeof b === \"boolean\") {\n options.append = b;\n }\n } else if (typeof a === \"boolean\") {\n options.append = a;\n }\n }\n if (!this._transitionTickInitied) {\n this.tick(this._transitionTick, true);\n this._transitionTickInitied = true;\n }\n this.touch();\n if (!options.append) {\n this._transitions.length = 0;\n }\n var transition = new Transition(this, options);\n this._transitions.push(transition);\n return transition;\n };\n Node2.prototype.row = function(align) {\n this.align(\"row\", align);\n return this;\n };\n Node2.prototype.column = function(align) {\n this.align(\"column\", align);\n return this;\n };\n Node2.prototype.align = function(type, align) {\n var _this = this;\n this._padding = this._padding;\n this._spacing = this._spacing;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n if (_this._mo_seq == _this._ts_touch) {\n return;\n }\n _this._mo_seq = _this._ts_touch;\n var alignChildren = _this._mo_seqAlign != _this._ts_children;\n _this._mo_seqAlign = _this._ts_children;\n var width = 0;\n var height = 0;\n var child;\n var next = _this.first(true);\n var first = true;\n while (child = next) {\n next = child.next(true);\n child.matrix(true);\n var w = child.pin(\"boxWidth\");\n var h = child.pin(\"boxHeight\");\n if (type == \"column\") {\n !first && (height += _this._spacing);\n child.pin(\"offsetY\") != height && child.pin(\"offsetY\", height);\n width = Math.max(width, w);\n height = height + h;\n alignChildren && child.pin(\"alignX\", align);\n } else if (type == \"row\") {\n !first && (width += _this._spacing);\n child.pin(\"offsetX\") != width && child.pin(\"offsetX\", width);\n width = width + w;\n height = Math.max(height, h);\n alignChildren && child.pin(\"alignY\", align);\n }\n first = false;\n }\n width += 2 * _this._padding;\n height += 2 * _this._padding;\n _this.pin(\"width\") != width && _this.pin(\"width\", width);\n _this.pin(\"height\") != height && _this.pin(\"height\", height);\n });\n return this;\n };\n Node2.prototype.box = function() {\n return this.minimize();\n };\n Node2.prototype.layer = function() {\n return this.maximize();\n };\n Node2.prototype.minimize = function() {\n var _this = this;\n this._padding = this._padding;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n if (_this._mo_box == _this._ts_touch) {\n return;\n }\n _this._mo_box = _this._ts_touch;\n var width = 0;\n var height = 0;\n var child;\n var next = _this.first(true);\n while (child = next) {\n next = child.next(true);\n child.matrix(true);\n var w = child.pin(\"boxWidth\");\n var h = child.pin(\"boxHeight\");\n width = Math.max(width, w);\n height = Math.max(height, h);\n }\n width += 2 * _this._padding;\n height += 2 * _this._padding;\n _this.pin(\"width\") != width && _this.pin(\"width\", width);\n _this.pin(\"height\") != height && _this.pin(\"height\", height);\n });\n return this;\n };\n Node2.prototype.maximize = function() {\n var _this = this;\n this._layoutTicker && this.untick(this._layoutTicker);\n this.tick(this._layoutTicker = function() {\n var parent = _this.parent();\n if (parent) {\n var width = parent.pin(\"width\");\n if (_this.pin(\"width\") != width) {\n _this.pin(\"width\", width);\n }\n var height = parent.pin(\"height\");\n if (_this.pin(\"height\") != height) {\n _this.pin(\"height\", height);\n }\n }\n }, true);\n return this;\n };\n Node2.prototype.padding = function(pad) {\n this._padding = pad;\n return this;\n };\n Node2.prototype.spacing = function(space) {\n this._spacing = space;\n return this;\n };\n return Node2;\n }()\n);\nvar __extends$4 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction sprite(frame) {\n var sprite2 = new Sprite();\n frame && sprite2.texture(frame);\n return sprite2;\n}\nvar Sprite = (\n /** @class */\n function(_super) {\n __extends$4(Sprite2, _super);\n function Sprite2() {\n var _this = _super.call(this) || this;\n _this._tiled = false;\n _this._stretched = false;\n _this.prerenderContext = {};\n _this.label(\"Sprite\");\n _this._textures = [];\n _this._image = null;\n return _this;\n }\n Sprite2.prototype.texture = function(frame) {\n this._image = texture(frame).one();\n if (this._image) {\n this.pin(\"width\", this._image.getWidth());\n this.pin(\"height\", this._image.getHeight());\n if (this._tiled) {\n this._textures[0] = new ResizableTexture(this._image, \"tile\");\n } else if (this._stretched) {\n this._textures[0] = new ResizableTexture(this._image, \"stretch\");\n } else {\n this._textures[0] = new PipeTexture(this._image);\n }\n this._textures.length = 1;\n } else {\n this.pin(\"width\", 0);\n this.pin(\"height\", 0);\n this._textures.length = 0;\n }\n return this;\n };\n Sprite2.prototype.image = function(frame) {\n return this.texture(frame);\n };\n Sprite2.prototype.tile = function(inner) {\n this._tiled = true;\n var texture2 = new ResizableTexture(this._image, \"tile\");\n this._textures[0] = texture2;\n return this;\n };\n Sprite2.prototype.stretch = function(inner) {\n this._stretched = true;\n var texture2 = new ResizableTexture(this._image, \"stretch\");\n this._textures[0] = texture2;\n return this;\n };\n Sprite2.prototype.prerender = function() {\n if (!this._visible) {\n return;\n }\n if (this._image) {\n var pixelRatio = this.getPixelRatio();\n this.prerenderContext.pixelRatio = pixelRatio;\n var updated = this._image.prerender(this.prerenderContext);\n if (updated === true) {\n var w = this._image.getWidth();\n var h = this._image.getHeight();\n this.size(w, h);\n }\n }\n _super.prototype.prerender.call(this);\n };\n Sprite2.prototype.render = function(context) {\n var texture2 = this._textures[0];\n if (texture2 === null || texture2 === void 0 ? void 0 : texture2[\"_resizeMode\"]) {\n texture2.dw = this.pin(\"width\");\n texture2.dh = this.pin(\"height\");\n }\n _super.prototype.render.call(this, context);\n };\n return Sprite2;\n }(Node)\n);\nvar image = sprite;\nvar Image$1 = Sprite;\nvar __extends$3 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar CanvasTexture = (\n /** @class */\n function(_super) {\n __extends$3(CanvasTexture2, _super);\n function CanvasTexture2() {\n var _this = _super.call(this, document.createElement(\"canvas\")) || this;\n _this._lastPixelRatio = 0;\n return _this;\n }\n CanvasTexture2.prototype.setSize = function(textureWidth, textureHeight, pixelRatio) {\n if (pixelRatio === void 0) {\n pixelRatio = 1;\n }\n this._source.width = textureWidth * pixelRatio;\n this._source.height = textureHeight * pixelRatio;\n this._pixelRatio = pixelRatio;\n };\n CanvasTexture2.prototype.getContext = function(type, attributes) {\n if (type === void 0) {\n type = \"2d\";\n }\n return this._source.getContext(type, attributes);\n };\n CanvasTexture2.prototype.getOptimalPixelRatio = function() {\n return Math.ceil(this._lastPixelRatio);\n };\n CanvasTexture2.prototype.setMemoizer = function(memoizer) {\n this._memoizer = memoizer;\n };\n CanvasTexture2.prototype.setDrawer = function(drawer) {\n this._drawer = drawer;\n };\n CanvasTexture2.prototype.prerender = function(context) {\n var newPixelRatio = context.pixelRatio;\n var lastPixelRatio = this._lastPixelRatio;\n var pixelRationChange = lastPixelRatio / newPixelRatio;\n var pixelRatioChanged = lastPixelRatio === 0 || pixelRationChange > 1.25 || pixelRationChange < 0.8;\n if (pixelRatioChanged) {\n this._lastPixelRatio = newPixelRatio;\n }\n var newMemoKey = this._memoizer ? this._memoizer.call(this) : null;\n var memoKeyChanged = this._lastMemoKey !== newMemoKey;\n if (pixelRatioChanged || memoKeyChanged) {\n this._lastMemoKey = newMemoKey;\n this._lastPixelRatio = newPixelRatio;\n if (typeof this._drawer === \"function\") {\n this._drawer.call(this);\n }\n return true;\n }\n };\n CanvasTexture2.prototype.size = function(width, height, pixelRatio) {\n this.setSize(width, height, pixelRatio);\n return this;\n };\n CanvasTexture2.prototype.context = function(type, attributes) {\n if (type === void 0) {\n type = \"2d\";\n }\n return this.getContext(type, attributes);\n };\n CanvasTexture2.prototype.canvas = function(legacyTextureDrawer) {\n if (typeof legacyTextureDrawer === \"function\") {\n legacyTextureDrawer.call(this, this.getContext());\n } else if (typeof legacyTextureDrawer === \"undefined\") {\n if (typeof this._drawer === \"function\") {\n this._drawer.call(this);\n }\n }\n return this;\n };\n return CanvasTexture2;\n }(ImageTexture)\n);\nfunction canvas(type, attributes, legacyTextureDrawer) {\n if (typeof type === \"function\") {\n var texture_1 = new CanvasTexture();\n legacyTextureDrawer = type;\n texture_1.setDrawer(function() {\n legacyTextureDrawer.call(texture_1, texture_1.getContext());\n });\n return texture_1;\n } else if (typeof attributes === \"function\") {\n var texture_2 = new CanvasTexture();\n legacyTextureDrawer = attributes;\n texture_2.setDrawer(function() {\n legacyTextureDrawer.call(texture_2, texture_2.getContext(type));\n });\n return texture_2;\n } else if (typeof legacyTextureDrawer === \"function\") {\n var texture_3 = new CanvasTexture();\n texture_3.setDrawer(function() {\n legacyTextureDrawer.call(texture_3, texture_3.getContext(type, attributes));\n });\n return texture_3;\n } else {\n var texture2 = new CanvasTexture();\n return texture2;\n }\n}\nfunction memoizeDraw(legacySpriteDrawer, legacySpriteMemoizer) {\n if (legacySpriteMemoizer === void 0) {\n legacySpriteMemoizer = function() {\n return null;\n };\n }\n var sprite2 = new Sprite();\n var texture2 = new CanvasTexture();\n sprite2.texture(texture2);\n texture2.setDrawer(function() {\n legacySpriteDrawer(2.5 * texture2._lastPixelRatio, texture2, sprite2);\n });\n texture2.setMemoizer(legacySpriteMemoizer);\n return sprite2;\n}\nvar POINTER_CLICK = \"click\";\nvar POINTER_START = \"touchstart mousedown\";\nvar POINTER_MOVE = \"touchmove mousemove\";\nvar POINTER_END = \"touchend mouseup\";\nvar POINTER_CANCEL = \"touchcancel mousecancel\";\nvar EventPoint = (\n /** @class */\n function() {\n function EventPoint2() {\n }\n EventPoint2.prototype.clone = function(obj) {\n if (obj) {\n obj.x = this.x;\n obj.y = this.y;\n } else {\n obj = {\n x: this.x,\n y: this.y\n };\n }\n return obj;\n };\n EventPoint2.prototype.toString = function() {\n return (this.x | 0) + \"x\" + (this.y | 0);\n };\n return EventPoint2;\n }()\n);\nvar PointerSyntheticEvent = (\n /** @class */\n function() {\n function PointerSyntheticEvent2() {\n this.abs = new EventPoint();\n }\n PointerSyntheticEvent2.prototype.clone = function(obj) {\n if (obj) {\n obj.x = this.x;\n obj.y = this.y;\n } else {\n obj = {\n x: this.x,\n y: this.y\n };\n }\n return obj;\n };\n PointerSyntheticEvent2.prototype.toString = function() {\n return this.type + \": \" + (this.x | 0) + \"x\" + (this.y | 0);\n };\n return PointerSyntheticEvent2;\n }()\n);\nvar VisitPayload = (\n /** @class */\n function() {\n function VisitPayload2() {\n this.type = \"\";\n this.x = 0;\n this.y = 0;\n this.timeStamp = -1;\n this.event = null;\n this.root = null;\n this.collected = null;\n }\n VisitPayload2.prototype.toString = function() {\n return this.type + \": \" + (this.x | 0) + \"x\" + (this.y | 0);\n };\n return VisitPayload2;\n }()\n);\nvar syntheticEvent = new PointerSyntheticEvent();\nvar PAYLOAD = new VisitPayload();\nvar Pointer = (\n /** @class */\n function() {\n function Pointer2() {\n var _this = this;\n this.ratio = 1;\n this.clickList = [];\n this.cancelList = [];\n this.handleStart = function(event) {\n event.preventDefault();\n _this.localPoint(event);\n _this.dispatchEvent(event.type, event);\n _this.findTargets(\"click\", _this.clickList);\n _this.findTargets(\"mousecancel\", _this.cancelList);\n };\n this.handleMove = function(event) {\n event.preventDefault();\n _this.localPoint(event);\n _this.dispatchEvent(event.type, event);\n };\n this.handleEnd = function(event) {\n event.preventDefault();\n _this.dispatchEvent(event.type, event);\n if (_this.clickList.length) {\n _this.dispatchEvent(\"click\", event, _this.clickList);\n }\n _this.cancelList.length = 0;\n };\n this.handleCancel = function(event) {\n if (_this.cancelList.length) {\n _this.dispatchEvent(\"mousecancel\", event, _this.cancelList);\n }\n _this.clickList.length = 0;\n };\n this.visitStart = function(node, payload) {\n return !node._flag(payload.type);\n };\n this.visitEnd = function(node, payload) {\n syntheticEvent.raw = payload.event;\n syntheticEvent.type = payload.type;\n syntheticEvent.timeStamp = payload.timeStamp;\n syntheticEvent.abs.x = payload.x;\n syntheticEvent.abs.y = payload.y;\n var listeners = node.listeners(payload.type);\n if (!listeners) {\n return;\n }\n node.matrix().inverse().map(payload, syntheticEvent);\n var isEventTarget = node === payload.root || node.attr(\"spy\") || node.hitTest(syntheticEvent);\n if (!isEventTarget) {\n return;\n }\n if (payload.collected) {\n payload.collected.push(node);\n }\n if (payload.event) {\n var cancel = false;\n for (var l = 0; l < listeners.length; l++) {\n cancel = listeners[l].call(node, syntheticEvent) ? true : cancel;\n }\n return cancel;\n }\n };\n }\n Pointer2.prototype.mount = function(stage, elem) {\n var _this = this;\n this.stage = stage;\n this.elem = elem;\n this.ratio = stage.viewport().ratio || 1;\n stage.on(\"viewport\", function(viewport) {\n var _a;\n _this.ratio = (_a = viewport.ratio) !== null && _a !== void 0 ? _a : _this.ratio;\n });\n elem.addEventListener(\"touchstart\", this.handleStart);\n elem.addEventListener(\"touchend\", this.handleEnd);\n elem.addEventListener(\"touchmove\", this.handleMove);\n elem.addEventListener(\"touchcancel\", this.handleCancel);\n elem.addEventListener(\"mousedown\", this.handleStart);\n elem.addEventListener(\"mouseup\", this.handleEnd);\n elem.addEventListener(\"mousemove\", this.handleMove);\n document.addEventListener(\"mouseup\", this.handleCancel);\n window.addEventListener(\"blur\", this.handleCancel);\n return this;\n };\n Pointer2.prototype.unmount = function() {\n var elem = this.elem;\n elem.removeEventListener(\"touchstart\", this.handleStart);\n elem.removeEventListener(\"touchend\", this.handleEnd);\n elem.removeEventListener(\"touchmove\", this.handleMove);\n elem.removeEventListener(\"touchcancel\", this.handleCancel);\n elem.removeEventListener(\"mousedown\", this.handleStart);\n elem.removeEventListener(\"mouseup\", this.handleEnd);\n elem.removeEventListener(\"mousemove\", this.handleMove);\n document.removeEventListener(\"mouseup\", this.handleCancel);\n window.removeEventListener(\"blur\", this.handleCancel);\n return this;\n };\n Pointer2.prototype.localPoint = function(event) {\n var _a;\n var elem = this.elem;\n var x;\n var y;\n if ((_a = event.touches) === null || _a === void 0 ? void 0 : _a.length) {\n x = event.touches[0].clientX;\n y = event.touches[0].clientY;\n } else {\n x = event.clientX;\n y = event.clientY;\n }\n var rect = elem.getBoundingClientRect();\n x -= rect.left;\n y -= rect.top;\n x -= elem.clientLeft | 0;\n y -= elem.clientTop | 0;\n PAYLOAD.x = x * this.ratio;\n PAYLOAD.y = y * this.ratio;\n };\n Pointer2.prototype.findTargets = function(type, result) {\n var payload = PAYLOAD;\n payload.type = type;\n payload.root = this.stage;\n payload.event = null;\n payload.collected = result;\n payload.collected.length = 0;\n this.stage.visit({\n reverse: true,\n visible: true,\n start: this.visitStart,\n end: this.visitEnd\n }, payload);\n };\n Pointer2.prototype.dispatchEvent = function(type, event, targets) {\n var payload = PAYLOAD;\n payload.type = type;\n payload.root = this.stage;\n payload.event = event;\n payload.timeStamp = Date.now();\n payload.collected = null;\n if (targets) {\n while (targets.length) {\n var node = targets.shift();\n if (this.visitEnd(node, payload)) {\n break;\n }\n }\n targets.length = 0;\n } else {\n this.stage.visit({\n reverse: true,\n visible: true,\n start: this.visitStart,\n end: this.visitEnd\n }, payload);\n }\n };\n return Pointer2;\n }()\n);\nvar Mouse = {\n CLICK: \"click\",\n START: \"touchstart mousedown\",\n MOVE: \"touchmove mousemove\",\n END: \"touchend mouseup\",\n CANCEL: \"touchcancel mousecancel\"\n};\nvar __extends$2 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nvar __assign = function() {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar ROOTS = [];\nfunction pause() {\n for (var i = ROOTS.length - 1; i >= 0; i--) {\n ROOTS[i].pause();\n }\n}\nfunction resume() {\n for (var i = ROOTS.length - 1; i >= 0; i--) {\n ROOTS[i].resume();\n }\n}\nfunction mount(configs) {\n if (configs === void 0) {\n configs = {};\n }\n var root = new Root();\n root.mount(configs);\n root.pointer = new Pointer().mount(root, root.dom);\n return root;\n}\nvar Root = (\n /** @class */\n function(_super) {\n __extends$2(Root2, _super);\n function Root2() {\n var _this = _super.call(this) || this;\n _this.canvas = null;\n _this.dom = null;\n _this.context = null;\n _this.pixelWidth = -1;\n _this.pixelHeight = -1;\n _this.pixelRatio = 1;\n _this.drawingWidth = 0;\n _this.drawingHeight = 0;\n _this.mounted = false;\n _this.paused = false;\n _this.sleep = false;\n _this.mount = function(configs) {\n if (configs === void 0) {\n configs = {};\n }\n if (typeof configs.canvas === \"string\") {\n _this.canvas = document.getElementById(configs.canvas);\n if (!_this.canvas) {\n console.error(\"Canvas element not found: \", configs.canvas);\n }\n } else if (configs.canvas instanceof HTMLCanvasElement) {\n _this.canvas = configs.canvas;\n } else if (configs.canvas) {\n console.error(\"Unknown value for canvas:\", configs.canvas);\n }\n if (!_this.canvas) {\n _this.canvas = document.getElementById(\"cutjs\") || document.getElementById(\"stage\");\n }\n if (!_this.canvas) {\n _this.canvas = document.createElement(\"canvas\");\n Object.assign(_this.canvas.style, {\n position: \"absolute\",\n display: \"block\",\n top: \"0\",\n left: \"0\",\n bottom: \"0\",\n right: \"0\",\n width: \"100%\",\n height: \"100%\"\n });\n var body = document.body;\n body.insertBefore(_this.canvas, body.firstChild);\n }\n _this.dom = _this.canvas;\n _this.context = _this.canvas.getContext(\"2d\");\n var devicePixelRatio = window.devicePixelRatio || 1;\n var backingStorePixelRatio = (\n // @ts-ignore\n _this.context.webkitBackingStorePixelRatio || // @ts-ignore\n _this.context.mozBackingStorePixelRatio || // @ts-ignore\n _this.context.msBackingStorePixelRatio || // @ts-ignore\n _this.context.oBackingStorePixelRatio || // @ts-ignore\n _this.context.backingStorePixelRatio || 1\n );\n _this.devicePixelRatio = devicePixelRatio;\n _this.backingStoreRatio = backingStorePixelRatio;\n _this.pixelRatio = _this.devicePixelRatio / _this.backingStoreRatio;\n _this.mounted = true;\n ROOTS.push(_this);\n _this.requestFrame();\n };\n _this.frameRequested = false;\n _this.requestFrame = function() {\n if (!_this.frameRequested) {\n _this.frameRequested = true;\n requestAnimationFrame(_this.onFrame);\n }\n };\n _this._lastFrameTime = 0;\n _this._mo_touch = null;\n _this.onFrame = function(now) {\n _this.frameRequested = false;\n if (!_this.mounted || !_this.canvas || !_this.context) {\n return;\n }\n _this.requestFrame();\n var newPixelWidth = _this.canvas.clientWidth;\n var newPixelHeight = _this.canvas.clientHeight;\n if (_this.pixelWidth !== newPixelWidth || _this.pixelHeight !== newPixelHeight) {\n _this.pixelWidth = newPixelWidth;\n _this.pixelHeight = newPixelHeight;\n _this.drawingWidth = newPixelWidth * _this.pixelRatio;\n _this.drawingHeight = newPixelHeight * _this.pixelRatio;\n if (_this.canvas.width !== _this.drawingWidth || _this.canvas.height !== _this.drawingHeight) {\n _this.canvas.width = _this.drawingWidth;\n _this.canvas.height = _this.drawingHeight;\n _this.viewport({\n width: _this.drawingWidth,\n height: _this.drawingHeight,\n ratio: _this.pixelRatio\n });\n }\n }\n var last = _this._lastFrameTime || now;\n var elapsed = now - last;\n if (!_this.mounted || _this.paused || _this.sleep) {\n return;\n }\n _this._lastFrameTime = now;\n _this.prerender();\n var tickRequest = _this._tick(elapsed, now, last);\n if (_this._mo_touch != _this._ts_touch) {\n _this._mo_touch = _this._ts_touch;\n _this.sleep = false;\n if (_this.drawingWidth > 0 && _this.drawingHeight > 0) {\n _this.context.setTransform(1, 0, 0, 1, 0, 0);\n _this.context.clearRect(0, 0, _this.drawingWidth, _this.drawingHeight);\n _this.render(_this.context);\n }\n } else if (tickRequest) {\n _this.sleep = false;\n } else {\n _this.sleep = true;\n }\n stats.fps = elapsed ? 1e3 / elapsed : 0;\n };\n _this.label(\"Root\");\n return _this;\n }\n Root2.prototype.resume = function() {\n if (this.sleep || this.paused) {\n this.requestFrame();\n }\n this.paused = false;\n this.sleep = false;\n this.publish(\"resume\");\n return this;\n };\n Root2.prototype.pause = function() {\n if (!this.paused) {\n this.publish(\"pause\");\n }\n this.paused = true;\n return this;\n };\n Root2.prototype.touch = function() {\n if (this.sleep || this.paused) {\n this.requestFrame();\n }\n this.sleep = false;\n return _super.prototype.touch.call(this);\n };\n Root2.prototype.unmount = function() {\n var _a;\n this.mounted = false;\n var index = ROOTS.indexOf(this);\n if (index >= 0) {\n ROOTS.splice(index, 1);\n }\n (_a = this.pointer) === null || _a === void 0 ? void 0 : _a.unmount();\n return this;\n };\n Root2.prototype.background = function(color) {\n if (this.dom) {\n this.dom.style.backgroundColor = color;\n }\n return this;\n };\n Root2.prototype.viewport = function(width, height, ratio) {\n if (typeof width === \"undefined\") {\n return Object.assign({}, this._viewport);\n }\n if (typeof width === \"object\") {\n var options = width;\n width = options.width;\n height = options.height;\n ratio = options.ratio;\n }\n if (typeof width === \"number\" && typeof height === \"number\") {\n this._viewport = {\n width,\n height,\n ratio: typeof ratio === \"number\" ? ratio : 1\n };\n this.viewbox();\n var data_1 = Object.assign({}, this._viewport);\n this.visit({\n start: function(node) {\n if (!node._flag(\"viewport\")) {\n return true;\n }\n node.publish(\"viewport\", [data_1]);\n }\n });\n }\n return this;\n };\n Root2.prototype.viewbox = function(width, height, mode) {\n if (typeof width === \"number\" && typeof height === \"number\") {\n this._viewbox = {\n width,\n height,\n mode\n };\n } else if (typeof width === \"object\" && width !== null) {\n this._viewbox = __assign({}, width);\n }\n this.rescale();\n return this;\n };\n Root2.prototype.camera = function(matrix) {\n this._camera = matrix;\n this.rescale();\n return this;\n };\n Root2.prototype.rescale = function() {\n var viewbox = this._viewbox;\n var viewport = this._viewport;\n var camera = this._camera;\n if (viewport && viewbox) {\n var viewportWidth = viewport.width;\n var viewportHeight = viewport.height;\n var viewboxMode = isValidFitMode(viewbox.mode) ? viewbox.mode : \"in-pad\";\n var viewboxWidth = viewbox.width;\n var viewboxHeight = viewbox.height;\n this.pin({\n width: viewboxWidth,\n height: viewboxHeight\n });\n this.scaleTo(viewportWidth, viewportHeight, viewboxMode);\n var viewboxX = viewbox.x || 0;\n var viewboxY = viewbox.y || 0;\n var cameraZoom = (camera === null || camera === void 0 ? void 0 : camera.a) || 1;\n var cameraX = (camera === null || camera === void 0 ? void 0 : camera.e) || 0;\n var cameraY = (camera === null || camera === void 0 ? void 0 : camera.f) || 0;\n var scaleX = this.pin(\"scaleX\");\n var scaleY = this.pin(\"scaleY\");\n this.pin(\"scaleX\", scaleX * cameraZoom);\n this.pin(\"scaleY\", scaleY * cameraZoom);\n this.pin(\"offsetX\", cameraX - viewboxX * scaleX * cameraZoom);\n this.pin(\"offsetY\", cameraY - viewboxY * scaleY * cameraZoom);\n } else if (viewport) {\n this.pin({\n width: viewport.width,\n height: viewport.height\n });\n }\n return this;\n };\n return Root2;\n }(Node)\n);\nvar __extends$1 = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction anim(frames, fps) {\n var anim2 = new Anim();\n anim2.frames(frames).gotoFrame(0);\n fps && anim2.fps(fps);\n return anim2;\n}\nvar FPS = 15;\nvar Anim = (\n /** @class */\n function(_super) {\n __extends$1(Anim2, _super);\n function Anim2() {\n var _this = _super.call(this) || this;\n _this.label(\"Anim\");\n _this._textures = [];\n _this._fps = FPS;\n _this._ft = 1e3 / _this._fps;\n _this._time = -1;\n _this._repeat = 0;\n _this._index = 0;\n _this._frames = [];\n var lastTime = 0;\n _this.tick(function(t, now, last) {\n if (this._time < 0 || this._frames.length <= 1) {\n return;\n }\n var ignore = lastTime != last;\n lastTime = now;\n if (ignore) {\n return true;\n }\n this._time += t;\n if (this._time < this._ft) {\n return true;\n }\n var n = this._time / this._ft | 0;\n this._time -= n * this._ft;\n this.moveFrame(n);\n if (this._repeat > 0 && (this._repeat -= n) <= 0) {\n this.stop();\n this._callback && this._callback();\n return false;\n }\n return true;\n }, false);\n return _this;\n }\n Anim2.prototype.fps = function(fps) {\n if (typeof fps === \"undefined\") {\n return this._fps;\n }\n this._fps = fps > 0 ? fps : FPS;\n this._ft = 1e3 / this._fps;\n return this;\n };\n Anim2.prototype.setFrames = function(frames) {\n return this.frames(frames);\n };\n Anim2.prototype.frames = function(frames) {\n this._index = 0;\n this._frames = texture(frames).array();\n this.touch();\n return this;\n };\n Anim2.prototype.length = function() {\n return this._frames ? this._frames.length : 0;\n };\n Anim2.prototype.gotoFrame = function(frame, resize) {\n if (resize === void 0) {\n resize = false;\n }\n this._index = math.wrap(frame, this._frames.length) | 0;\n resize = resize || !this._textures[0];\n this._textures[0] = this._frames[this._index];\n if (resize) {\n this.pin(\"width\", this._textures[0].getWidth());\n this.pin(\"height\", this._textures[0].getHeight());\n }\n this.touch();\n return this;\n };\n Anim2.prototype.moveFrame = function(move) {\n return this.gotoFrame(this._index + move);\n };\n Anim2.prototype.repeat = function(repeat, callback) {\n this._repeat = repeat * this._frames.length - 1;\n this._callback = callback;\n this.play();\n return this;\n };\n Anim2.prototype.play = function(frame) {\n if (typeof frame !== \"undefined\") {\n this.gotoFrame(frame);\n this._time = 0;\n } else if (this._time < 0) {\n this._time = 0;\n }\n this.touch();\n return this;\n };\n Anim2.prototype.stop = function(frame) {\n this._time = -1;\n if (typeof frame !== \"undefined\") {\n this.gotoFrame(frame);\n }\n return this;\n };\n return Anim2;\n }(Node)\n);\nvar __extends = function() {\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n d2.__proto__ = b2;\n } || function(d2, b2) {\n for (var p in b2)\n if (Object.prototype.hasOwnProperty.call(b2, p))\n d2[p] = b2[p];\n };\n return extendStatics(d, b);\n };\n return function(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\nfunction monotype(chars) {\n return new Monotype().frames(chars);\n}\nvar Monotype = (\n /** @class */\n function(_super) {\n __extends(Monotype2, _super);\n function Monotype2() {\n var _this = _super.call(this) || this;\n _this.label(\"String\");\n _this._textures = [];\n return _this;\n }\n Monotype2.prototype.setFont = function(frames) {\n return this.frames(frames);\n };\n Monotype2.prototype.frames = function(frames) {\n this._textures = [];\n if (typeof frames == \"string\") {\n var selection_1 = texture(frames);\n this._font = function(value) {\n return selection_1.one(value);\n };\n } else if (typeof frames === \"object\") {\n this._font = function(value) {\n return frames[value];\n };\n } else if (typeof frames === \"function\") {\n this._font = frames;\n }\n return this;\n };\n Monotype2.prototype.setValue = function(value) {\n return this.value(value);\n };\n Monotype2.prototype.value = function(value) {\n if (typeof value === \"undefined\") {\n return this._value;\n }\n if (this._value === value) {\n return this;\n }\n this._value = value;\n if (value === null) {\n value = \"\";\n } else if (typeof value !== \"string\" && !Array.isArray(value)) {\n value = value.toString();\n }\n this._spacing = this._spacing || 0;\n var width = 0;\n var height = 0;\n for (var i = 0; i < value.length; i++) {\n var v = value[i];\n var texture_1 = this._textures[i] = this._font(typeof v === \"string\" ? v : v + \"\");\n width += i > 0 ? this._spacing : 0;\n texture_1.setDestinationCoordinate(width, 0);\n width = width + texture_1.getWidth();\n height = Math.max(height, texture_1.getHeight());\n }\n this.pin(\"width\", width);\n this.pin(\"height\", height);\n this._textures.length = value.length;\n return this;\n };\n return Monotype2;\n }(Node)\n);\nvar string = monotype;\nvar Str = Monotype;\nconst Stage = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n Anim,\n Atlas,\n CanvasTexture,\n Image: Image$1,\n ImageTexture,\n Math: math,\n Matrix,\n Monotype,\n Mouse,\n Node,\n POINTER_CANCEL,\n POINTER_CLICK,\n POINTER_END,\n POINTER_MOVE,\n POINTER_START,\n Pin,\n PipeTexture,\n Pointer,\n ResizableTexture,\n Root,\n Sprite,\n Str,\n Texture,\n TextureSelection,\n Transition,\n anim,\n atlas,\n box,\n canvas,\n clamp,\n column,\n create,\n image,\n isValidFitMode,\n layer,\n layout,\n length,\n math,\n maximize,\n memoizeDraw,\n minimize,\n monotype,\n mount,\n pause,\n random,\n resume,\n row,\n sprite,\n string,\n texture,\n wrap\n}, Symbol.toStringTag, { value: \"Module\" }));\nexport {\n Anim,\n Atlas,\n CanvasTexture,\n Image$1 as Image,\n ImageTexture,\n math as Math,\n Matrix,\n Monotype,\n Mouse,\n Node,\n POINTER_CANCEL,\n POINTER_CLICK,\n POINTER_END,\n POINTER_MOVE,\n POINTER_START,\n Pin,\n PipeTexture,\n Pointer,\n ResizableTexture,\n Root,\n Sprite,\n Str,\n Texture,\n TextureSelection,\n Transition,\n anim,\n atlas,\n box,\n canvas,\n clamp,\n column,\n create,\n Stage as default,\n image,\n isValidFitMode,\n layer,\n layout,\n length,\n math,\n maximize,\n memoizeDraw,\n minimize,\n monotype,\n mount,\n pause,\n random,\n resume,\n row,\n sprite,\n string,\n texture,\n wrap\n};\n","import * as Stage from \"stage-js\";\n\nimport type { Vec2Value } from \"../src/common/Vec2\";\nimport type { World } from \"../src/dynamics/World\";\nimport type { Joint } from \"../src/dynamics/Joint\";\nimport type { Fixture } from \"../src/dynamics/Fixture\";\nimport type { Body } from \"../src/dynamics/Body\";\nimport type { AABBValue } from \"../src/collision/AABB\";\nimport type { Style } from \"../src/util/Testbed\";\nimport { Testbed } from \"../src/util/Testbed\";\nimport type { EdgeShape } from \"../src/collision/shape/EdgeShape\";\nimport type { PolygonShape } from \"../src/collision/shape/PolygonShape\";\nimport type { ChainShape } from \"../src/collision/shape/ChainShape\";\nimport type { CircleShape } from \"../src/collision/shape/CircleShape\";\nimport type { PulleyJoint } from \"../src/dynamics/joint/PulleyJoint\";\nimport { MouseJoint } from \"../src/dynamics/joint/MouseJoint\";\n\nconst math_atan2 = Math.atan2;\nconst math_abs = Math.abs;\nconst math_sqrt = Math.sqrt;\nconst math_PI = Math.PI;\nconst math_max = Math.max;\nconst math_min = Math.min;\n\n\nlet mounted: StageTestbed | null = null;\n\n/** @internal */\nfunction memo() {\n const memory: any = [];\n function recall(...rest: any[]) {\n let equal = memory.length === rest.length;\n for (let i = 0; equal && i < rest.length; i++) {\n equal = equal && memory[i] === rest[i];\n memory[i] = rest[i];\n }\n memory.length = rest.length;\n return equal;\n }\n function reset() {\n memory.length = 0;\n // void 0;\n }\n return {\n recall,\n reset,\n };\n}\n\nTestbed.mount = () => {\n if (mounted) {\n return mounted;\n }\n\n mounted = new StageTestbed();\n\n // todo: merge rest of this into StageTestbed\n\n // todo: should we create these elements if not exists?\n const playButton = document.getElementById(\"testbed-play\");\n const statusElement = document.getElementById(\"testbed-status\");\n const infoElement = document.getElementById(\"testbed-info\");\n\n if (playButton) {\n playButton.addEventListener(\"click\", () => {\n mounted.isPaused() ? mounted.resume() : mounted.pause();\n });\n\n mounted._pause = () => {\n playButton.classList.add(\"pause\");\n playButton.classList.remove(\"play\");\n };\n\n mounted._resume = () => {\n playButton.classList.add(\"play\");\n playButton.classList.remove(\"pause\");\n };\n } else {\n console.log(\"Please create a button with id='testbed-play'\");\n }\n\n let lastStatus = \"\";\n if (statusElement) {\n statusElement.innerText = lastStatus;\n }\n mounted._status = (text: string) => {\n if (lastStatus === text) {\n return;\n }\n lastStatus = text;\n if (statusElement) {\n statusElement.innerText = text;\n }\n };\n\n let lastInfo = \"\";\n if (infoElement) {\n infoElement.innerText = lastInfo;\n }\n mounted._info = (text: string) => {\n if (lastInfo === text) {\n return;\n }\n lastInfo = text;\n if (infoElement) {\n infoElement.innerText = text;\n }\n };\n\n return mounted;\n};\n\nconst getStyle = function(obj: Body | Fixture | Joint): Style {\n return obj[\"render\"] ?? obj[\"style\"] ?? {};\n};\n\nfunction findBody(world: World, point: Vec2Value) {\n let body: Body | null = null;\n const aabb = {\n lowerBound: point,\n upperBound: point,\n };\n world.queryAABB(aabb, (fixture: Fixture) => {\n if (!fixture.getBody().isDynamic() || !fixture.testPoint(point)) {\n return true;\n }\n body = fixture.getBody();\n return false;\n });\n return body;\n}\n\n/** @internal */\nexport class StageTestbed extends Testbed {\n private canvas: HTMLCanvasElement;\n private stage: Stage.Root;\n private paused: boolean = false;\n private lastDrawHash = \"\";\n private newDrawHash = \"\";\n private buffer: ((context: CanvasRenderingContext2D, ratio: number)=> void)[] = [];\n\n start(world: World) {\n const stage = this.stage = Stage.mount();\n const canvas = this.canvas = stage.dom as HTMLCanvasElement;\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const testbed = this;\n this.canvas = canvas;\n\n stage.on(Stage.POINTER_START, () => {\n window.focus();\n // @ts-ignore\n document.activeElement?.blur();\n canvas.focus();\n });\n\n stage.MAX_ELAPSE = 1000 / 30;\n\n stage.on(\"resume\", () => {\n this.paused = false;\n this._resume();\n });\n stage.on(\"pause\", () => {\n this.paused = true;\n this._pause();\n });\n\n const drawingTexture = new Stage.CanvasTexture();\n drawingTexture.draw = (ctx: CanvasRenderingContext2D) => {\n const pixelRatio = 2 * drawingTexture.getOptimalPixelRatio();\n ctx.save();\n ctx.transform(1, 0, 0, this.scaleY, -this.x, -this.y);\n ctx.lineWidth = 3 / pixelRatio;\n ctx.lineCap = \"round\";\n for (let drawing = this.buffer.shift(); drawing; drawing = this.buffer.shift()) {\n drawing(ctx, pixelRatio);\n }\n ctx.restore();\n };\n\n const drawingElement = Stage.sprite(drawingTexture);\n stage.append(drawingElement);\n stage.tick(() => {\n this.buffer.length = 0;\n }, true);\n\n\n stage.background(this.background);\n stage.viewbox(this.width, this.height);\n stage.pin(\"alignX\", -0.5);\n stage.pin(\"alignY\", -0.5);\n\n const worldNode = new WorldStageNode(world, this);\n\n // stage.empty();\n stage.prepend(worldNode);\n\n let lastX = 0;\n let lastY = 0;\n stage.tick((dt: number, t: number) => {\n // update camera position\n if (lastX !== this.x || lastY !== this.y) {\n worldNode.offset(-this.x, -this.y);\n lastX = this.x;\n lastY = this.y;\n }\n });\n\n worldNode.tick((dt: number, t: number) => {\n this.step(dt, t);\n\n if (targetBody) {\n this.drawSegment(targetBody.getPosition(), mouseMove, \"rgba(255,255,255,0.2)\");\n }\n\n if (this.lastDrawHash !== this.newDrawHash) {\n this.lastDrawHash = this.newDrawHash;\n stage.touch();\n }\n this.newDrawHash = \"\";\n\n return true;\n });\n\n const mouseGround = world.createBody();\n let mouseJoint: MouseJoint | null = null;\n let targetBody: Body | null = null;\n const mouseMove = {x: 0, y: 0};\n\n worldNode.attr(\"spy\", true);\n\n worldNode.on(Stage.POINTER_START, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (targetBody) {\n return;\n }\n\n const body = findBody(world, point);\n if (!body) {\n return;\n }\n\n if (this.mouseForce) {\n targetBody = body;\n\n } else {\n mouseJoint = new MouseJoint({maxForce: 1000}, mouseGround, body, { x: point.x, y: point.y });\n world.createJoint(mouseJoint);\n }\n });\n\n worldNode.on(Stage.POINTER_MOVE, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n mouseJoint.setTarget(point);\n }\n\n mouseMove.x = point.x;\n mouseMove.y = point.y;\n });\n\n worldNode.on(Stage.POINTER_END, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n world.destroyJoint(mouseJoint);\n mouseJoint = null;\n }\n if (targetBody && this.mouseForce) {\n const target = targetBody.getPosition();\n const force = {\n x: (point.x - target.x) * this.mouseForce,\n y: (point.y - target.y) * this.mouseForce,\n };\n targetBody.applyForceToCenter(force, true);\n targetBody = null;\n }\n });\n\n worldNode.on(Stage.POINTER_CANCEL, (point: Vec2Value) => {\n point = { x: point.x, y: testbed.scaleY * point.y };\n if (mouseJoint) {\n world.destroyJoint(mouseJoint);\n mouseJoint = null;\n }\n if (targetBody) {\n targetBody = null;\n }\n });\n\n const activeKeys = testbed.activeKeys;\n const downKeys: Record = {};\n function updateActiveKeys(keyCode: number, down: boolean) {\n const char = String.fromCharCode(keyCode);\n if (/\\w/.test(char)) {\n activeKeys[char] = down;\n }\n activeKeys.right = downKeys[39] || activeKeys[\"D\"];\n activeKeys.left = downKeys[37] || activeKeys[\"A\"];\n activeKeys.up = downKeys[38] || activeKeys[\"W\"];\n activeKeys.down = downKeys[40] || activeKeys[\"S\"];\n activeKeys.fire = downKeys[32] || downKeys[13] ;\n }\n\n window.addEventListener(\"keydown\", function(e) {\n const keyCode = e.keyCode;\n downKeys[keyCode] = true;\n updateActiveKeys(keyCode, true);\n testbed.keydown && testbed.keydown(keyCode, String.fromCharCode(keyCode));\n });\n window.addEventListener(\"keyup\", function(e) {\n const keyCode = e.keyCode;\n downKeys[keyCode] = false;\n updateActiveKeys(keyCode, false);\n testbed.keyup && testbed.keyup(keyCode, String.fromCharCode(keyCode));\n });\n\n this.resume();\n }\n\n /** @private @internal */\n focus() {\n // @ts-ignore\n document.activeElement && document.activeElement.blur();\n this.canvas.focus();\n }\n\n /** @internal */\n _pause() {\n }\n\n /** @internal */\n _resume() {\n }\n\n private statusText = \"\";\n private statusMap: Record = {};\n\n status(name: string, value: any): void;\n status(value: object | string): void;\n status(a: any, b?: any) {\n if (typeof b !== \"undefined\") {\n const key = a;\n const value = b;\n if (typeof value !== \"function\" && typeof value !== \"object\") {\n this.statusMap[key] = value;\n }\n } else if (a && typeof a === \"object\") {\n // tslint:disable-next-line:no-for-in\n for (const key in a) {\n const value = a[key];\n if (typeof value !== \"function\" && typeof value !== \"object\") {\n this.statusMap[key] = value;\n }\n }\n } else if (typeof a === \"string\") {\n this.statusText = a;\n }\n\n var newline = \"\\n\";\n var text = this.statusText || \"\";\n for (var key in this.statusMap) {\n var value = this.statusMap[key];\n if (typeof value === \"function\") continue;\n text += (text && newline) + key + \": \" + value;\n }\n\n this._status(text);\n }\n\n info(text: string): void {\n this._info(text);\n }\n\n /** @internal */\n _status(string: string) {\n }\n\n /** @internal */ \n _info(text: string) {\n }\n\n /** @internal */\n isPaused() {\n return this.paused;\n }\n\n /** @internal */\n togglePause() {\n this.paused ? this.resume() : this.pause();\n }\n\n /** @internal */\n pause() {\n this.stage.pause();\n }\n\n /** @internal */\n resume() {\n this.stage.resume();\n this.focus();\n }\n\n drawPoint(p: {x: number, y: number}, r: number, color: string): void {\n this.buffer.push(function(ctx, ratio) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, 5 / ratio, 0, 2 * math_PI);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"point\" + p.x + \",\" + p.y + \",\" + r + \",\" + color;\n }\n\n drawCircle(p: {x: number, y: number}, r: number, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, r, 0, 2 * math_PI);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"circle\" + p.x + \",\" + p.y + \",\" + r + \",\" + color;\n }\n\n drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(a.x, a.y);\n ctx.lineTo(b.x, b.y);\n ctx.strokeStyle = color;\n ctx.stroke();\n });\n this.newDrawHash += \"segment\" + a.x + \",\" + a.y + \",\" + b.x + \",\" + b.y + \",\" + color;\n }\n\n drawSegment = this.drawEdge;\n\n drawPolygon(points: Array<{x: number, y: number}>, color: string): void {\n if (!points || !points.length) {\n return;\n }\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(points[0].x, points[0].y);\n for (let i = 1; i < points.length; i++) {\n ctx.lineTo(points[i].x, points[i].y);\n }\n ctx.strokeStyle = color;\n ctx.closePath();\n ctx.stroke();\n });\n this.newDrawHash += \"segment\";\n for (let i = 1; i < points.length; i++) {\n this.newDrawHash += points[i].x + \",\" + points[i].y + \",\";\n }\n this.newDrawHash += color;\n }\n\n drawAABB(aabb: AABBValue, color: string): void {\n this.buffer.push(function(ctx) {\n ctx.beginPath();\n ctx.moveTo(aabb.lowerBound.x, aabb.lowerBound.y);\n ctx.lineTo(aabb.upperBound.x, aabb.lowerBound.y);\n ctx.lineTo(aabb.upperBound.x, aabb.upperBound.y);\n ctx.lineTo(aabb.lowerBound.x, aabb.upperBound.y);\n ctx.strokeStyle = color;\n ctx.closePath();\n ctx.stroke();\n });\n this.newDrawHash += \"aabb\";\n this.newDrawHash += aabb.lowerBound.x + \",\" + aabb.lowerBound.y + \",\";\n this.newDrawHash += aabb.upperBound.x + \",\" + aabb.upperBound.y + \",\";\n this.newDrawHash += color;\n }\n\n findOne(query: string): (Body | Joint | Fixture | null) {\n throw new Error(\"Not implemented\");\n }\n\n findAll(query: string): (Body | Joint | Fixture)[] {\n throw new Error(\"Not implemented\");\n }\n}\n\ninterface WorldStageOptions {\n speed: number;\n hz: number;\n scaleY: number;\n lineWidth: number;\n stroke: string | undefined;\n fill: string | undefined;\n}\n\nclass WorldStageNode extends Stage.Node {\n private nodes = new WeakMap();\n\n private options: WorldStageOptions = {\n speed: 1,\n hz: 60,\n scaleY: -1,\n lineWidth: 3,\n stroke: undefined,\n fill: undefined\n };\n\n private world: World;\n private testbed: Testbed;\n\n constructor(world: World, opts: Partial = {}) {\n super();\n this.label(\"Planck\");\n\n this.options = { ...this.options, ...opts };\n\n if (math_abs(this.options.hz) < 1) {\n this.options.hz = 1 / this.options.hz;\n }\n\n this.world = world;\n this.testbed = opts as Testbed;\n\n const timeStep = 1 / this.options.hz;\n let elapsedTime = 0;\n let errored = false;\n this.tick((dt: number) => {\n if (errored) {\n return false;\n }\n try {\n dt = dt * 0.001 * this.options.speed;\n elapsedTime += dt;\n while (elapsedTime > timeStep) {\n world.step(timeStep);\n elapsedTime -= timeStep;\n }\n this.renderWorld();\n return true; \n } catch (error) {\n errored = true;\n console.error(error);\n return false;\n }\n }, true);\n\n world.on(\"remove-fixture\", (obj: Fixture) => {\n this.nodes.get(obj)?.remove();\n });\n\n world.on(\"remove-joint\", (obj: Joint) => {\n this.nodes.get(obj)?.remove();\n });\n }\n\n renderWorld() {\n const world = this.world;\n const options = this.options;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const viewer = this;\n\n for (let b = world.getBodyList(); b; b = b.getNext()) {\n for (let f = b.getFixtureList(); f; f = f.getNext()) {\n\n let node = this.nodes.get(f);\n const fstyle = getStyle(f);\n const bstyle = getStyle(b);\n if (!node) {\n if (fstyle && fstyle.stroke) {\n options.stroke = fstyle.stroke;\n } else if (bstyle && bstyle.stroke) {\n options.stroke = bstyle.stroke;\n } else if (b.isDynamic()) {\n options.stroke = \"rgba(255,255,255,0.9)\";\n } else if (b.isKinematic()) {\n options.stroke = \"rgba(255,255,255,0.7)\";\n } else if (b.isStatic()) {\n options.stroke = \"rgba(255,255,255,0.5)\";\n }\n\n if (fstyle && fstyle.fill) {\n options.fill = fstyle.fill;\n } else if (bstyle && bstyle.fill) {\n options.fill = bstyle.fill;\n } else {\n options.fill = \"\";\n }\n\n const type = f.getType();\n const shape = f.getShape();\n if (type == \"circle\") {\n node = viewer.drawCircle(shape as CircleShape, options);\n }\n if (type == \"edge\") {\n node = viewer.drawEdge(shape as EdgeShape, options);\n }\n if (type == \"polygon\") {\n node = viewer.drawPolygon(shape as PolygonShape, options);\n }\n if (type == \"chain\") {\n node = viewer.drawChain(shape as ChainShape, options);\n }\n\n if (node) {\n node.appendTo(viewer);\n this.nodes.set(f, node);\n }\n }\n\n if (node) {\n const p = b.getPosition();\n const r = b.getAngle();\n // @ts-ignore\n const isChanged = node.__lastX !== p.x || node.__lastY !== p.y || node.__lastR !== r;\n if (isChanged) {\n // @ts-ignore\n node.__lastX = p.x;\n // @ts-ignore\n node.__lastY = p.y;\n // @ts-ignore\n node.__lastR = r;\n node.offset(p.x, options.scaleY * p.y);\n node.rotate(options.scaleY * r);\n }\n }\n\n }\n }\n\n for (let j = world.getJointList(); j; j = j.getNext()) {\n const type = j.getType();\n if (type == \"pulley-joint\") {\n this.testbed.drawSegment(j.getAnchorA(), (j as PulleyJoint).getGroundAnchorA(), \"rgba(255,255,255,0.5)\");\n this.testbed.drawSegment(j.getAnchorB(), (j as PulleyJoint).getGroundAnchorB(), \"rgba(255,255,255,0.5)\");\n this.testbed.drawSegment((j as PulleyJoint).getGroundAnchorB(), (j as PulleyJoint).getGroundAnchorA(), \"rgba(255,255,255,0.5)\");\n } else {\n this.testbed.drawSegment(j.getAnchorA(), j.getAnchorB(), \"rgba(255,255,255,0.5)\");\n }\n }\n }\n\n drawCircle(shape: CircleShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const r = shape.m_radius;\n const cx = r + lw;\n const cy = r + lw;\n const w = r * 2 + lw * 2;\n const h = r * 2 + lw * 2;\n\n offsetX = shape.m_p.x - cx;\n offsetY = options.scaleY * shape.m_p.y - cy;\n\n this.setSize(w, h, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.arc(cx, cy, r, 0, 2 * math_PI);\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n }\n ctx.lineTo(cx, cy);\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? \"\";\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if (!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawEdge(edge: EdgeShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n let offsetA = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const v1 = edge.m_vertex1;\n const v2 = edge.m_vertex2;\n\n const dx = v2.x - v1.x;\n const dy = v2.y - v1.y;\n\n const length = math_sqrt(dx * dx + dy * dy);\n\n this.setSize(length + 2 * lw, 2 * lw, ratio);\n\n const minX = math_min(v1.x, v2.x);\n const minY = math_min(options.scaleY * v1.y, options.scaleY * v2.y);\n \n offsetX = minX - lw;\n offsetY = minY - lw;\n offsetA = options.scaleY * math_atan2(dy, dx);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n ctx.moveTo(lw, lw);\n ctx.lineTo(lw + length, lw);\n\n ctx.lineCap = \"round\";\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? \"\";\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY, offsetA)) {\n sprite.offset(offsetX, offsetY);\n sprite.rotate(offsetA);\n }\n });\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawPolygon(shape: PolygonShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const vertices = shape.m_vertices;\n\n if (!vertices.length) {\n return;\n }\n \n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, options.scaleY * v.y);\n maxY = math_max(maxY, options.scaleY * v.y);\n }\n \n const width = maxX - minX;\n const height = maxY - minY;\n\n offsetX = minX;\n offsetY = minY;\n\n this.setSize(width + 2 * lw, height + 2 * lw, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n const x = v.x - minX + lw;\n const y = options.scaleY * v.y - minY + lw;\n if (i == 0)\n ctx.moveTo(x, y);\n\n else\n ctx.lineTo(x, y);\n }\n\n if (vertices.length > 2) {\n ctx.closePath();\n }\n\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n ctx.closePath();\n }\n\n ctx.lineCap = \"round\";\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? \"\";\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n\n drawChain(shape: ChainShape, options: WorldStageOptions) {\n let offsetX = 0;\n let offsetY = 0;\n const offsetMemo = memo();\n\n const texture = Stage.canvas();\n texture.setDrawer(function () {\n const ctx = this.getContext();\n const ratio = 2 * this.getOptimalPixelRatio();\n const lw = options.lineWidth / ratio;\n\n const vertices = shape.m_vertices;\n\n if (!vertices.length) {\n return;\n }\n \n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, options.scaleY * v.y);\n maxY = math_max(maxY, options.scaleY * v.y);\n }\n \n const width = maxX - minX;\n const height = maxY - minY;\n\n offsetX = minX;\n offsetY = minY;\n\n this.setSize(width + 2 * lw, height + 2 * lw, ratio);\n\n ctx.scale(ratio, ratio);\n ctx.beginPath();\n for (let i = 0; i < vertices.length; ++i) {\n const v = vertices[i];\n const x = v.x - minX + lw;\n const y = options.scaleY * v.y - minY + lw;\n if (i == 0)\n ctx.moveTo(x, y);\n\n else\n ctx.lineTo(x, y);\n }\n\n // TODO: if loop\n if (vertices.length > 2) {\n // ctx.closePath();\n }\n\n if (options.fill) {\n ctx.fillStyle = options.fill;\n ctx.fill();\n ctx.closePath();\n }\n\n ctx.lineCap = \"round\";\n ctx.lineWidth = options.lineWidth / ratio;\n ctx.strokeStyle = options.stroke ?? \"\";\n ctx.stroke();\n });\n\n const sprite = Stage.sprite(texture);\n sprite.tick(() => {\n if(!offsetMemo.recall(offsetX, offsetY)) {\n sprite.offset(offsetX, offsetY);\n }\n });\n\n const node = Stage.layout().append(sprite);\n return node;\n }\n}\n"],"names":["d","b","__extends","__assign","s","n","input","output","math_random","x","clamp","random","math","math_abs","math_sqrt","math_max","math_min","Vec2","v","a","length","AABB","normal","temp","math_PI","Settings","SettingsInternal","Pool","TreeNode","DynamicTree","c","Iterator","BroadPhase","displacement","math_sin","math_cos","transform","xf","math_atan2","Rot","matrix.vec2","Sweep","matrix.zeroVec2","matrix.transformVec2","matrix.copyVec2","localCenter","matrix.setRotAngle","matrix.combine2Vec2","matrix.minusVec2","matrix.rotVec2","Transform","rotation","Velocity","Position","Shape","FixtureProxy","Fixture","matrix.subVec2","matrix.transform","Body","matrix.plusScaleVec2","matrix.scaleVec2","matrix.dotVec2","matrix.crossNumVec2","matrix.plusVec2","point","JointEdge","Joint","stats","DistanceInput","DistanceOutput","SimplexCache","cache","xfA","xfB","matrix.lengthSqrVec2","matrix.derotVec2","matrix.distVec2","rA","rB","matrix.normalizeVec2","matrix.minusScaleVec2","DistanceProxy","SimplexVertex","Simplex","v1","v2","matrix.setVec2","matrix.crossVec2Vec2","pA","pB","matrix.combine3Vec2","matrix.copyTransform","ShapeCastInput","ShapeCastOutput","simplex","pointA","pointB","TOIInput","TOIOutputState","TOIOutput","SeparationFunctionType","SeparationFunction","matrix.normalizeVec2Length","matrix.crossVec2Num","matrix.negVec2","TimeStep","ContactImpulse","Solver","matrix.mulVec2","Mat22","cA","cB","planePoint","clipPoint","ManifoldType","ContactFeatureType","PointState","ClipVertex","Manifold","ManifoldPoint","ContactID","WorldManifold","ContactEdge","VelocityConstraintPoint","tangent","P","Contact","_a","worldManifold","DEFAULTS","World","oldManifold","Vec3","EdgeShape","e","ChainShape","e1","e2","PolygonShape","ie","center","matrix.detransformVec2","matrix.addVec2","CircleShape","matrix.distSqrVec2","DistanceJoint","vA","vB","FrictionJoint","Mat33","LimitState","RevoluteJoint","PrismaticJoint","translation","perp","GearJoint","MotorJoint","MouseJoint","PulleyJoint","RopeJoint","WeldJoint","WheelJoint","Serializer","options","obj","Testbed","testbed","BoxShape","matrix.retransformVec2","clipPoints1","clipPoints2","normal1","matrix.detransformTransform","maxSeparation","edge1","matrix.rerotVec2","EPAxisType","VertexType","EPAxis","TempPolygon","ReferenceFace","s2","extendStatics","d2","b2","now","StageTestbed","Stage.mount","canvas","Stage.POINTER_START","Stage.CanvasTexture","Stage.sprite","Stage.POINTER_MOVE","Stage.POINTER_END","Stage.POINTER_CANCEL","i","WorldStageNode","texture","Stage.canvas","sprite","Stage.layout","Stage.Node"],"mappings":"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","x_google_ignoreList":[0,54]} \ No newline at end of file diff --git a/dist/planck.d.ts b/dist/planck.d.ts index 90dcfd67..a7ab3974 100644 --- a/dist/planck.d.ts +++ b/dist/planck.d.ts @@ -1,439 +1,445 @@ -interface Vec2Value { - x: number; - y: number; +// Generated by dts-bundle-generator v9.5.1 + +/** 2D vector */ +export interface Vec2Value { + x: number; + y: number; } -declare function Vec2(x: number, y: number): Vec2; -declare function Vec2(obj: { - x: number; - y: number; -}): Vec2; -declare function Vec2(): Vec2; -declare class Vec2 { - x: number; - y: number; - constructor(x: number, y: number); - constructor(obj: { - x: number; - y: number; - }); - constructor(); - static zero(): Vec2; - /** @hidden */ - static neo(x: number, y: number): Vec2; - static clone(v: Vec2Value): Vec2; - /** @hidden */ - toString(): string; - /** - * Does this vector contain finite coordinates? - */ - static isValid(obj: any): boolean; - static assert(o: any): void; - clone(): Vec2; - /** - * Set this vector to all zeros. - * - * @returns this - */ - setZero(): Vec2; - set(x: number, y: number): Vec2; - set(value: Vec2Value): Vec2; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - setNum(x: number, y: number): this; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - setVec2(value: Vec2Value): this; - /** - * Set linear combination of v and w: `a * v + b * w` - */ - setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - setMul(a: number, v: Vec2Value): Vec2; - /** - * Add a vector to this vector. - * - * @returns this - */ - add(w: Vec2Value): Vec2; - /** - * Add linear combination of v and w: `a * v + b * w` - */ - addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - addMul(a: number, v: Vec2Value): Vec2; - /** - * @deprecated Use subCombine or subMul - */ - wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2; - /** - * Subtract linear combination of v and w: `a * v + b * w` - */ - subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - subMul(a: number, v: Vec2Value): Vec2; - /** - * Subtract a vector from this vector - * - * @returns this - */ - sub(w: Vec2Value): Vec2; - /** - * Multiply this vector by a scalar. - * - * @returns this - */ - mul(m: number): Vec2; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - length(): number; - /** - * Get the length squared. - */ - lengthSquared(): number; - /** - * Convert this vector into a unit vector. - * - * @returns old length - */ - normalize(): number; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - static lengthOf(v: Vec2Value): number; - /** - * Get the length squared. - */ - static lengthSquared(v: Vec2Value): number; - static distance(v: Vec2Value, w: Vec2Value): number; - static distanceSquared(v: Vec2Value, w: Vec2Value): number; - static areEqual(v: Vec2Value, w: Vec2Value): boolean; - /** - * Get the skew vector such that dot(skew_vec, other) == cross(vec, other) - */ - static skew(v: Vec2Value): Vec2; - /** Dot product on two vectors */ - static dot(v: Vec2Value, w: Vec2Value): number; - /** Cross product between two vectors */ - static cross(v: Vec2Value, w: Vec2Value): number; - /** Cross product between a vector and a scalar */ - static cross(v: Vec2Value, w: number): Vec2; - /** Cross product between a scalar and a vector */ - static cross(v: number, w: Vec2Value): Vec2; - /** Cross product on two vectors */ - static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number; - /** Cross product on a vector and a scalar */ - static crossVec2Num(v: Vec2Value, w: number): Vec2; - /** Cross product on a vector and a scalar */ - static crossNumVec2(v: number, w: Vec2Value): Vec2; - /** Returns `a + (v x w)` */ - static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2; - /** Returns `a + (v x w)` */ - static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2; - /** - * Returns `a + (v x w)` - */ - static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2; - /** - * Returns `a + (v x w)` - */ - static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2; - static add(v: Vec2Value, w: Vec2Value): Vec2; - /** @hidden @deprecated */ - static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - static sub(v: Vec2Value, w: Vec2Value): Vec2; - static mul(a: Vec2Value, b: number): Vec2; - static mul(a: number, b: Vec2Value): Vec2; - static mulVec2Num(a: Vec2Value, b: number): Vec2; - static mulNumVec2(a: number, b: Vec2Value): Vec2; - neg(): Vec2; - static neg(v: Vec2Value): Vec2; - static abs(v: Vec2Value): Vec2; - static mid(v: Vec2Value, w: Vec2Value): Vec2; - static upper(v: Vec2Value, w: Vec2Value): Vec2; - static lower(v: Vec2Value, w: Vec2Value): Vec2; - clamp(max: number): Vec2; - static clamp(v: Vec2Value, max: number): Vec2; - /** @hidden @deprecated */ - static scaleFn(x: number, y: number): (v: Vec2Value) => Vec2; - /** @hidden @deprecated */ - static translateFn(x: number, y: number): (v: Vec2Value) => Vec2; +/** @hidden @deprecated Use new keyword. */ +export function Vec2(x: number, y: number): Vec2; +/** @hidden @deprecated Use new keyword. */ +export function Vec2(obj: Vec2Value): Vec2; +/** @hidden @deprecated Use new keyword. */ +export function Vec2(): Vec2; +/** 2D vector */ +export declare class Vec2 { + x: number; + y: number; + constructor(x: number, y: number); + constructor(obj: Vec2Value); + constructor(); + static zero(): Vec2; + /** @hidden */ + static neo(x: number, y: number): Vec2; + static clone(v: Vec2Value): Vec2; + /** @hidden */ + toString(): string; + /** + * Does this vector contain finite coordinates? + */ + static isValid(obj: any): boolean; + static assert(o: any): void; + clone(): Vec2; + /** + * Set this vector to all zeros. + * + * @returns this + */ + setZero(): Vec2; + set(x: number, y: number): Vec2; + set(value: Vec2Value): Vec2; + /** + * Set this vector to some specified coordinates. + * + * @returns this + */ + setNum(x: number, y: number): this; + /** + * Set this vector to some specified coordinates. + * + * @returns this + */ + setVec2(value: Vec2Value): this; + /** + * Set linear combination of v and w: `a * v + b * w` + */ + setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; + setMul(a: number, v: Vec2Value): Vec2; + /** + * Add a vector to this vector. + * + * @returns this + */ + add(w: Vec2Value): Vec2; + /** + * Add linear combination of v and w: `a * v + b * w` + */ + addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; + addMul(a: number, v: Vec2Value): Vec2; + /** + * @deprecated Use subCombine or subMul + */ + wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2; + /** + * Subtract linear combination of v and w: `a * v + b * w` + */ + subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; + subMul(a: number, v: Vec2Value): Vec2; + /** + * Subtract a vector from this vector + * + * @returns this + */ + sub(w: Vec2Value): Vec2; + /** + * Multiply this vector by a scalar. + * + * @returns this + */ + mul(m: number): Vec2; + /** + * Get the length of this vector (the norm). + * + * For performance, use this instead of lengthSquared (if possible). + */ + length(): number; + /** + * Get the length squared. + */ + lengthSquared(): number; + /** + * Convert this vector into a unit vector. + * + * @returns old length + */ + normalize(): number; + /** + * Get the length of this vector (the norm). + * + * For performance, use this instead of lengthSquared (if possible). + */ + static lengthOf(v: Vec2Value): number; + /** + * Get the length squared. + */ + static lengthSquared(v: Vec2Value): number; + static distance(v: Vec2Value, w: Vec2Value): number; + static distanceSquared(v: Vec2Value, w: Vec2Value): number; + static areEqual(v: Vec2Value, w: Vec2Value): boolean; + /** + * Get the skew vector such that dot(skew_vec, other) == cross(vec, other) + */ + static skew(v: Vec2Value): Vec2; + /** Dot product on two vectors */ + static dot(v: Vec2Value, w: Vec2Value): number; + /** Cross product between two vectors */ + static cross(v: Vec2Value, w: Vec2Value): number; + /** Cross product between a vector and a scalar */ + static cross(v: Vec2Value, w: number): Vec2; + /** Cross product between a scalar and a vector */ + static cross(v: number, w: Vec2Value): Vec2; + /** Cross product on two vectors */ + static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number; + /** Cross product on a vector and a scalar */ + static crossVec2Num(v: Vec2Value, w: number): Vec2; + /** Cross product on a vector and a scalar */ + static crossNumVec2(v: number, w: Vec2Value): Vec2; + /** Returns `a + (v x w)` */ + static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2; + /** Returns `a + (v x w)` */ + static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2; + /** + * Returns `a + (v x w)` + */ + static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2; + /** + * Returns `a + (v x w)` + */ + static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2; + static add(v: Vec2Value, w: Vec2Value): Vec2; + /** @hidden @deprecated */ + static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; + static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; + static sub(v: Vec2Value, w: Vec2Value): Vec2; + static mul(a: Vec2Value, b: number): Vec2; + static mul(a: number, b: Vec2Value): Vec2; + static mulVec2Num(a: Vec2Value, b: number): Vec2; + static mulNumVec2(a: number, b: Vec2Value): Vec2; + neg(): Vec2; + static neg(v: Vec2Value): Vec2; + static abs(v: Vec2Value): Vec2; + static mid(v: Vec2Value, w: Vec2Value): Vec2; + static upper(v: Vec2Value, w: Vec2Value): Vec2; + static lower(v: Vec2Value, w: Vec2Value): Vec2; + clamp(max: number): Vec2; + static clamp(v: Vec2Value, max: number): Vec2; + /** @hidden @deprecated */ + static scaleFn(x: number, y: number): (v: Vec2Value) => Vec2; + /** @hidden @deprecated */ + static translateFn(x: number, y: number): (v: Vec2Value) => Vec2; } -interface RotValue { - /** sin(angle) */ - s: number; - /** cos(angle) */ - c: number; +export interface RotValue { + /** sin(angle) */ + s: number; + /** cos(angle) */ + c: number; } -declare function Rot(angle?: number | RotValue): Rot; -declare class Rot { - /** sin(angle) */ - s: number; - /** cos(angle) */ - c: number; - /** Initialize from an angle in radians. */ - constructor(angle?: number | RotValue); - /** @hidden */ - static neo(angle: number): Rot; - static clone(rot: RotValue): Rot; - static identity(): Rot; - static isValid(obj: any): boolean; - static assert(o: any): void; - /** Set to the identity rotation. */ - setIdentity(): void; - set(angle: number | RotValue): void; - setRot(angle: RotValue): void; - /** Set using an angle in radians. */ - setAngle(angle: number): void; - /** Get the angle in radians. */ - getAngle(): number; - /** Get the x-axis. */ - getXAxis(): Vec2; - /** Get the y-axis. */ - getYAxis(): Vec2; - /** Multiply two rotations: q * r */ - static mul(rot: RotValue, m: RotValue): Rot; - /** Rotate a vector */ - static mul(rot: RotValue, m: Vec2Value): Vec2; - /** Multiply two rotations: q * r */ - static mulRot(rot: RotValue, m: RotValue): Rot; - /** Rotate a vector */ - static mulVec2(rot: RotValue, m: Vec2Value): Vec2; - static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2; - /** Transpose multiply two rotations: qT * r */ - static mulT(rot: RotValue, m: RotValue): Rot; - /** Inverse rotate a vector */ - static mulT(rot: RotValue, m: Vec2Value): Vec2; - /** Transpose multiply two rotations: qT * r */ - static mulTRot(rot: RotValue, m: RotValue): Rot; - /** Inverse rotate a vector */ - static mulTVec2(rot: RotValue, m: Vec2Value): Vec2; +/** @hidden @deprecated Use new keyword. */ +export function Rot(angle: number): Rot; +/** @hidden @deprecated Use new keyword. */ +export function Rot(obj: RotValue): Rot; +/** @hidden @deprecated Use new keyword. */ +export function Rot(): Rot; +/** Rotation */ +export declare class Rot { + /** sin(angle) */ + s: number; + /** cos(angle) */ + c: number; + /** Initialize from an angle in radians. */ + constructor(angle?: number | RotValue); + /** @hidden */ + static neo(angle: number): Rot; + static clone(rot: RotValue): Rot; + static identity(): Rot; + static isValid(obj: any): boolean; + static assert(o: any): void; + /** Set to the identity rotation. */ + setIdentity(): void; + set(angle: number | RotValue): void; + setRot(angle: RotValue): void; + /** Set using an angle in radians. */ + setAngle(angle: number): void; + /** Get the angle in radians. */ + getAngle(): number; + /** Get the x-axis. */ + getXAxis(): Vec2; + /** Get the y-axis. */ + getYAxis(): Vec2; + /** Multiply two rotations: q * r */ + static mul(rot: RotValue, m: RotValue): Rot; + /** Rotate a vector */ + static mul(rot: RotValue, m: Vec2Value): Vec2; + /** Multiply two rotations: q * r */ + static mulRot(rot: RotValue, m: RotValue): Rot; + /** Rotate a vector */ + static mulVec2(rot: RotValue, m: Vec2Value): Vec2; + static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2; + /** Transpose multiply two rotations: qT * r */ + static mulT(rot: RotValue, m: RotValue): Rot; + /** Inverse rotate a vector */ + static mulT(rot: RotValue, m: Vec2Value): Vec2; + /** Transpose multiply two rotations: qT * r */ + static mulTRot(rot: RotValue, m: RotValue): Rot; + /** Inverse rotate a vector */ + static mulTVec2(rot: RotValue, m: Vec2Value): Vec2; } -type TransformValue = { - p: Vec2Value; - q: RotValue; +export type TransformValue = { + p: Vec2Value; + q: RotValue; }; +/** @hidden @deprecated Use new keyword. */ +export function Transform(position?: Vec2Value, rotation?: number): Transform; /** * A transform contains translation and rotation. It is used to represent the * position and orientation of rigid frames. Initialize using a position vector * and a rotation. */ -declare function Transform(position?: Vec2Value, rotation?: number): Transform; -/** - * A transform contains translation and rotation. It is used to represent the - * position and orientation of rigid frames. Initialize using a position vector - * and a rotation. - */ -declare class Transform { - /** position */ - p: Vec2; - /** rotation */ - q: Rot; - constructor(position?: Vec2Value, rotation?: number); - static clone(xf: Transform): Transform; - /** @hidden */ - static neo(position: Vec2Value, rotation: Rot): Transform; - static identity(): Transform; - /** Set this to the identity transform */ - setIdentity(): void; - /** Set position and angle */ - set(position: Vec2Value, rotation: number): void; - /** Copy from another transform */ - set(xf: TransformValue): void; - /** Set position and angle */ - setNum(position: Vec2Value, rotation: number): void; - setTransform(xf: TransformValue): void; - static isValid(obj: any): boolean; - static assert(o: any): void; - static mul(a: TransformValue, b: Vec2Value): Vec2; - static mul(a: TransformValue, b: TransformValue): Transform; - static mulAll(a: Transform, b: Vec2Value[]): Vec2[]; - static mulAll(a: Transform, b: Transform[]): Transform[]; - /** @hidden @deprecated */ - static mulFn(a: TransformValue): (b: Vec2Value) => Vec2; - static mulVec2(a: TransformValue, b: Vec2Value): Vec2; - static mulXf(a: TransformValue, b: TransformValue): Transform; - static mulT(a: TransformValue, b: Vec2Value): Vec2; - static mulT(a: TransformValue, b: TransformValue): Transform; - static mulTVec2(a: TransformValue, b: Vec2Value): Vec2; - static mulTXf(a: TransformValue, b: TransformValue): Transform; +export declare class Transform { + /** position */ + p: Vec2; + /** rotation */ + q: Rot; + constructor(position?: Vec2Value, rotation?: number); + static clone(xf: Transform): Transform; + /** @hidden */ + static neo(position: Vec2Value, rotation: Rot): Transform; + static identity(): Transform; + /** Set this to the identity transform */ + setIdentity(): void; + /** Set position and angle */ + set(position: Vec2Value, rotation: number): void; + /** Copy from another transform */ + set(xf: TransformValue): void; + /** Set position and angle */ + setNum(position: Vec2Value, rotation: number): void; + setTransform(xf: TransformValue): void; + static isValid(obj: any): boolean; + static assert(o: any): void; + static mul(a: TransformValue, b: Vec2Value): Vec2; + static mul(a: TransformValue, b: TransformValue): Transform; + static mulAll(a: Transform, b: Vec2Value[]): Vec2[]; + static mulAll(a: Transform, b: Transform[]): Transform[]; + /** @hidden @deprecated */ + static mulFn(a: TransformValue): (b: Vec2Value) => Vec2; + static mulVec2(a: TransformValue, b: Vec2Value): Vec2; + static mulXf(a: TransformValue, b: TransformValue): Transform; + static mulT(a: TransformValue, b: Vec2Value): Vec2; + static mulT(a: TransformValue, b: TransformValue): Transform; + static mulTVec2(a: TransformValue, b: Vec2Value): Vec2; + static mulTXf(a: TransformValue, b: TransformValue): Transform; } /** * Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. */ -interface RayCastInput { - p1: Vec2Value; - p2: Vec2Value; - maxFraction: number; +export interface RayCastInput { + p1: Vec2Value; + p2: Vec2Value; + maxFraction: number; } -type RayCastCallback = (subInput: RayCastInput, id: number) => number; +export type RayCastCallback = (subInput: RayCastInput, id: number) => number; /** * Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`, * where `p1` and `p2` come from RayCastInput. */ -interface RayCastOutput { - normal: Vec2; - fraction: number; +export interface RayCastOutput { + normal: Vec2; + fraction: number; } -interface AABBValue { - lowerBound: Vec2Value; - upperBound: Vec2Value; +/** Axis-aligned bounding box */ +export interface AABBValue { + lowerBound: Vec2Value; + upperBound: Vec2Value; } -declare function AABB(lower?: Vec2Value, upper?: Vec2Value): AABB; -declare class AABB { - lowerBound: Vec2; - upperBound: Vec2; - constructor(lower?: Vec2Value, upper?: Vec2Value); - /** - * Verify that the bounds are sorted. - */ - isValid(): boolean; - static isValid(obj: any): boolean; - static assert(o: any): void; - /** - * Get the center of the AABB. - */ - getCenter(): Vec2; - /** - * Get the extents of the AABB (half-widths). - */ - getExtents(): Vec2; - /** - * Get the perimeter length. - */ - getPerimeter(): number; - /** - * Combine one or two AABB into this one. - */ - combine(a: AABBValue, b?: AABBValue): void; - combinePoints(a: Vec2Value, b: Vec2Value): void; - set(aabb: AABBValue): void; - contains(aabb: AABBValue): boolean; - extend(value: number): AABB; - static extend(out: AABBValue, value: number): AABBValue; - static testOverlap(a: AABBValue, b: AABBValue): boolean; - static areEqual(a: AABBValue, b: AABBValue): boolean; - static diff(a: AABBValue, b: AABBValue): number; - rayCast(output: RayCastOutput, input: RayCastInput): boolean; - /** @hidden */ - toString(): string; - static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue; - static combinedPerimeter(a: AABBValue, b: AABBValue): number; +/** @hidden @deprecated Use new keyword. */ +export function AABB(lower?: Vec2Value, upper?: Vec2Value): AABB; +/** Axis-aligned bounding box */ +export declare class AABB { + lowerBound: Vec2; + upperBound: Vec2; + constructor(lower?: Vec2Value, upper?: Vec2Value); + /** + * Verify that the bounds are sorted. + */ + isValid(): boolean; + static isValid(obj: any): boolean; + static assert(o: any): void; + /** + * Get the center of the AABB. + */ + getCenter(): Vec2; + /** + * Get the extents of the AABB (half-widths). + */ + getExtents(): Vec2; + /** + * Get the perimeter length. + */ + getPerimeter(): number; + /** + * Combine one or two AABB into this one. + */ + combine(a: AABBValue, b?: AABBValue): void; + combinePoints(a: Vec2Value, b: Vec2Value): void; + set(aabb: AABBValue): void; + contains(aabb: AABBValue): boolean; + extend(value: number): AABB; + static extend(out: AABBValue, value: number): AABBValue; + static testOverlap(a: AABBValue, b: AABBValue): boolean; + static areEqual(a: AABBValue, b: AABBValue): boolean; + static diff(a: AABBValue, b: AABBValue): number; + rayCast(output: RayCastOutput, input: RayCastInput): boolean; + /** @hidden */ + toString(): string; + static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue; + static combinedPerimeter(a: AABBValue, b: AABBValue): number; } /** * Input for Distance. You have to option to use the shape radii in the * computation. Even */ -declare class DistanceInput { - readonly proxyA: DistanceProxy; - readonly proxyB: DistanceProxy; - readonly transformA: Transform; - readonly transformB: Transform; - useRadii: boolean; - recycle(): void; +export declare class DistanceInput { + readonly proxyA: DistanceProxy; + readonly proxyB: DistanceProxy; + readonly transformA: Transform; + readonly transformB: Transform; + useRadii: boolean; + recycle(): void; } /** * Output for Distance. */ -declare class DistanceOutput { - /** closest point on shapeA */ - pointA: Vec2Value; - /** closest point on shapeB */ - pointB: Vec2Value; - distance: number; - /** iterations number of GJK iterations used */ - iterations: number; - recycle(): void; +export declare class DistanceOutput { + /** closest point on shapeA */ + pointA: Vec2Value; + /** closest point on shapeB */ + pointB: Vec2Value; + distance: number; + /** iterations number of GJK iterations used */ + iterations: number; + recycle(): void; } /** * Used to warm start Distance. Set count to zero on first call. */ -declare class SimplexCache { - /** length or area */ - metric: number; - /** vertices on shape A */ - indexA: number[]; - /** vertices on shape B */ - indexB: number[]; - count: number; - recycle(): void; +export declare class SimplexCache { + /** length or area */ + metric: number; + /** vertices on shape A */ + indexA: number[]; + /** vertices on shape B */ + indexB: number[]; + count: number; + recycle(): void; } /** * Compute the closest points between two shapes. Supports any combination of: * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On * the first call set SimplexCache.count to zero. */ -declare const Distance: { - (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void; - testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; - Input: typeof DistanceInput; - Output: typeof DistanceOutput; - Proxy: typeof DistanceProxy; - Cache: typeof SimplexCache; +export declare const Distance: { + (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void; + testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; + Input: typeof DistanceInput; + Output: typeof DistanceOutput; + Proxy: typeof DistanceProxy; + Cache: typeof SimplexCache; }; /** * A distance proxy is used by the GJK algorithm. It encapsulates any shape. */ -declare class DistanceProxy { - recycle(): void; - /** - * Get the vertex count. - */ - getVertexCount(): number; - /** - * Get a vertex by index. Used by Distance. - */ - getVertex(index: number): Vec2Value; - /** - * Get the supporting vertex index in the given direction. - */ - getSupport(d: Vec2Value): number; - /** - * Get the supporting vertex in the given direction. - */ - getSupportVertex(d: Vec2Value): Vec2Value; - /** - * Initialize the proxy using the given shape. The shape must remain in scope - * while the proxy is in use. - */ - set(shape: Shape, index: number): void; - /** - * Initialize the proxy using a vertex cloud and radius. The vertices - * must remain in scope while the proxy is in use. - */ - setVertices(vertices: Vec2Value[], count: number, radius: number): void; +export declare class DistanceProxy { + recycle(): void; + /** + * Get the vertex count. + */ + getVertexCount(): number; + /** + * Get a vertex by index. Used by Distance. + */ + getVertex(index: number): Vec2Value; + /** + * Get the supporting vertex index in the given direction. + */ + getSupport(d: Vec2Value): number; + /** + * Get the supporting vertex in the given direction. + */ + getSupportVertex(d: Vec2Value): Vec2Value; + /** + * Initialize the proxy using the given shape. The shape must remain in scope + * while the proxy is in use. + */ + set(shape: Shape, index: number): void; + /** + * Initialize the proxy using a vertex cloud and radius. The vertices + * must remain in scope while the proxy is in use. + */ + setVertices(vertices: Vec2Value[], count: number, radius: number): void; } /** * Determine if two generic shapes overlap. */ -declare const testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; +export declare const testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; /** * Input parameters for ShapeCast */ -declare class ShapeCastInput { - readonly proxyA: DistanceProxy; - readonly proxyB: DistanceProxy; - readonly transformA: Transform; - readonly transformB: Transform; - readonly translationB: Vec2; - recycle(): void; +export declare class ShapeCastInput { + readonly proxyA: DistanceProxy; + readonly proxyB: DistanceProxy; + readonly transformA: Transform; + readonly transformB: Transform; + readonly translationB: Vec2; + recycle(): void; } /** * Output results for b2ShapeCast */ -declare class ShapeCastOutput { - point: Vec2; - normal: Vec2; - lambda: number; - iterations: number; +export declare class ShapeCastOutput { + point: Vec2; + normal: Vec2; + lambda: number; + iterations: number; } /** * Perform a linear shape cast of shape B moving and shape A fixed. Determines @@ -441,305 +447,300 @@ declare class ShapeCastOutput { * * @returns true if hit, false if there is no hit or an initial overlap */ -// -// GJK-raycast -// Algorithm by Gino van den Bergen. -// "Smooth Mesh Contacts with GJK" in Game Physics Pearls. 2010 -declare const ShapeCast: (output: ShapeCastOutput, input: ShapeCastInput) => boolean; +export declare const ShapeCast: (output: ShapeCastOutput, input: ShapeCastInput) => boolean; /** * A joint edge is used to connect bodies and joints together in a joint graph * where each body is a node and each joint is an edge. A joint edge belongs to * a doubly linked list maintained in each attached body. Each joint has two * joint nodes, one for each attached body. */ -declare class JointEdge { - /** - * provides quick access to the other body attached. - */ - other: Body | null; - /** - * the joint - */ - joint: Joint | null; - /** - * prev the previous joint edge in the body's joint list - */ - prev: JointEdge | null; - /** - * the next joint edge in the body's joint list - */ - next: JointEdge | null; +export declare class JointEdge { + /** + * provides quick access to the other body attached. + */ + other: Body$1 | null; + /** + * the joint + */ + joint: Joint | null; + /** + * prev the previous joint edge in the body's joint list + */ + prev: JointEdge | null; + /** + * the next joint edge in the body's joint list + */ + next: JointEdge | null; } /** * Joint definitions are used to construct joints. */ -interface JointOpt { - /** - * Use this to attach application specific data to your joints. - */ - userData?: any; - /** - * Set this flag to true if the attached bodies - * should collide. - */ - collideConnected?: boolean; +export interface JointOpt { + /** + * Use this to attach application specific data to your joints. + */ + userData?: any; + /** + * Set this flag to true if the attached bodies + * should collide. + */ + collideConnected?: boolean; } /** * Joint definitions are used to construct joints. */ -interface JointDef extends JointOpt { - /** - * The first attached body. - */ - bodyA: Body; - /** - * The second attached body. - */ - bodyB: Body; +export interface JointDef extends JointOpt { + /** + * The first attached body. + */ + bodyA: Body$1; + /** + * The second attached body. + */ + bodyB: Body$1; } /** * The base joint class. Joints are used to constraint two bodies together in * various fashions. Some joints also feature limits and motors. */ -declare abstract class Joint { - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - constructor(def: JointDef); - constructor(def: JointOpt, bodyA: Body, bodyB: Body); - /** - * Short-cut function to determine if either body is inactive. - */ - isActive(): boolean; - /** - * Get the type of the concrete joint. - */ - getType(): string; - /** - * Get the first body attached to this joint. - */ - getBodyA(): Body; - /** - * Get the second body attached to this joint. - */ - getBodyB(): Body; - /** - * Get the next joint the world joint list. - */ - getNext(): Joint; - getUserData(): unknown; - setUserData(data: unknown): void; - /** - * Get collide connected. Note: modifying the collide connect flag won't work - * correctly because the flag is only checked when fixture AABBs begin to - * overlap. - */ - getCollideConnected(): boolean; - /** - * Get the anchor point on bodyA in world coordinates. - */ - abstract getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - abstract getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - abstract getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - abstract getReactionTorque(inv_dt: number): number; - /** - * Shift the origin for any points stored in world coordinates. - */ - shiftOrigin(newOrigin: Vec2Value): void; - abstract initVelocityConstraints(step: TimeStep): void; - abstract solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - abstract solvePositionConstraints(step: TimeStep): boolean; - /** - * @hidden @experimental - * Update joint with new props. - */ - abstract _reset(def: Partial): void; +export declare abstract class Joint { + /** Styling for dev-tools. */ + style: Style; + /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ + appData: Record; + constructor(def: JointDef); + constructor(def: JointOpt, bodyA: Body$1, bodyB: Body$1); + /** + * Short-cut function to determine if either body is inactive. + */ + isActive(): boolean; + /** + * Get the type of the concrete joint. + */ + getType(): string; + /** + * Get the first body attached to this joint. + */ + getBodyA(): Body$1; + /** + * Get the second body attached to this joint. + */ + getBodyB(): Body$1; + /** + * Get the next joint the world joint list. + */ + getNext(): Joint; + getUserData(): unknown; + setUserData(data: unknown): void; + /** + * Get collide connected. Note: modifying the collide connect flag won't work + * correctly because the flag is only checked when fixture AABBs begin to + * overlap. + */ + getCollideConnected(): boolean; + /** + * Get the anchor point on bodyA in world coordinates. + */ + abstract getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + abstract getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + abstract getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + abstract getReactionTorque(inv_dt: number): number; + /** + * Shift the origin for any points stored in world coordinates. + */ + shiftOrigin(newOrigin: Vec2Value): void; + abstract initVelocityConstraints(step: TimeStep): void; + abstract solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + abstract solvePositionConstraints(step: TimeStep): boolean; + /** + * @hidden @experimental + * Update joint with new props. + */ + abstract _reset(def: Partial): void; } -interface Style { - stroke?: string; - fill?: string; - lineWidth?: number; +export interface Style { + stroke?: string; + fill?: string; + lineWidth?: number; } -type KEY = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "right" | "left" | "up" | "down" | "fire"; -type ActiveKeys = { - [key in KEY]?: boolean; +export type KEY = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "right" | "left" | "up" | "down" | "fire"; +export type ActiveKeys = { + [key in KEY]?: boolean; }; -type TestbedMountOptions = {}; -declare abstract class Testbed { - /** - * Mounts testbed. Call start with a world to start simulation and rendering. - */ - static mount(options?: TestbedMountOptions): Testbed; - /** - * Mounts testbed if needed, then starts simulation and rendering. - * - * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`. - */ - static start(world: World): Testbed; - /** World viewbox width. */ - width: number; - /** World viewbox height. */ - height: number; - /** World viewbox center vertical offset. */ - x: number; - /** World viewbox center horizontal offset. */ - y: number; - /** @hidden */ - scaleY: number; - /** World simulation step frequency */ - hz: number; - /** World simulation speed, default is 1 */ - speed: number; - background: string; - mouseForce?: number; - activeKeys: ActiveKeys; - /** callback, to be implemented by user */ - step: (dt: number, t: number) => void; - /** callback, to be implemented by user */ - keydown: (keyCode: number, label: string) => void; - /** callback, to be implemented by user */ - keyup: (keyCode: number, label: string) => void; - abstract status(name: string, value: any): void; - abstract status(value: object | string): void; - abstract info(text: string): void; - color(r: number, g: number, b: number): string; - abstract drawPoint(p: { - x: number; - y: number; - }, r: any, color: string): void; - abstract drawCircle(p: { - x: number; - y: number; - }, r: number, color: string): void; - abstract drawEdge(a: { - x: number; - y: number; - }, b: { - x: number; - y: number; - }, color: string): void; - abstract drawSegment(a: { - x: number; - y: number; - }, b: { - x: number; - y: number; - }, color: string): void; - abstract drawPolygon(points: Array<{ - x: number; - y: number; - }>, color: string): void; - abstract drawAABB(aabb: AABBValue, color: string): void; - abstract start(world: World): void; - abstract findOne(query: string): (Body | Joint | Fixture | null); - abstract findAll(query: string): (Body | Joint | Fixture)[]; +export type TestbedMountOptions = {}; +export declare abstract class Testbed { + /** + * Mounts testbed. Call start with a world to start simulation and rendering. + */ + static mount(options?: TestbedMountOptions): Testbed; + /** + * Mounts testbed if needed, then starts simulation and rendering. + * + * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`. + */ + static start(world: World): Testbed; + /** World viewbox width. */ + width: number; + /** World viewbox height. */ + height: number; + /** World viewbox center vertical offset. */ + x: number; + /** World viewbox center horizontal offset. */ + y: number; + /** @hidden */ + scaleY: number; + /** World simulation step frequency */ + hz: number; + /** World simulation speed, default is 1 */ + speed: number; + background: string; + mouseForce?: number; + activeKeys: ActiveKeys; + /** callback, to be implemented by user */ + step: (dt: number, t: number) => void; + /** callback, to be implemented by user */ + keydown: (keyCode: number, label: string) => void; + /** callback, to be implemented by user */ + keyup: (keyCode: number, label: string) => void; + abstract status(name: string, value: any): void; + abstract status(value: object | string): void; + abstract info(text: string): void; + color(r: number, g: number, b: number): string; + abstract drawPoint(p: { + x: number; + y: number; + }, r: any, color: string): void; + abstract drawCircle(p: { + x: number; + y: number; + }, r: number, color: string): void; + abstract drawEdge(a: { + x: number; + y: number; + }, b: { + x: number; + y: number; + }, color: string): void; + abstract drawSegment(a: { + x: number; + y: number; + }, b: { + x: number; + y: number; + }, color: string): void; + abstract drawPolygon(points: Array<{ + x: number; + y: number; + }>, color: string): void; + abstract drawAABB(aabb: AABBValue, color: string): void; + abstract start(world: World): void; + abstract findOne(query: string): (Body$1 | Joint | Fixture | null); + abstract findAll(query: string): (Body$1 | Joint | Fixture)[]; } -type TestbedFactoryOptions = string | {}; +export type TestbedFactoryOptions = string | {}; /** @deprecated */ -type TestbedCallback = (testbed: Testbed) => (World | undefined); +export type TestbedCallback = (testbed: Testbed) => (World | undefined); /** @deprecated */ -declare function testbed(callback: TestbedCallback): void; +export declare function testbed(callback: TestbedCallback): void; /** @deprecated */ -declare function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void; -// todo make shape an interface +export declare function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void; /** * A shape is used for collision detection. You can create a shape however you * like. Shapes used for simulation in World are created automatically when a * Fixture is created. Shapes may encapsulate one or more child shapes. */ -declare abstract class Shape { - /** @hidden */ m_type: ShapeType; - /** - * @hidden - * Radius of a shape. For polygonal shapes this must be b2_polygonRadius. - * There is no support for making rounded polygons. - */ - m_radius: number; - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - /** @hidden */ - abstract _reset(): void; - static isValid(obj: any): boolean; - abstract getRadius(): number; - /** - * Get the type of this shape. You can use this to down cast to the concrete - * shape. - * - * @return the shape type. - */ - abstract getType(): ShapeType; - /** - * Get the number of child primitives. - */ - abstract getChildCount(): number; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - abstract testPoint(xf: TransformValue, p: Vec2Value): boolean; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - abstract computeMass(massData: MassData, density?: number): void; - abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void; +export declare abstract class Shape { + /** @hidden */ m_type: ShapeType; + /** + * @hidden + * Radius of a shape. For polygonal shapes this must be b2_polygonRadius. + * There is no support for making rounded polygons. + */ + m_radius: number; + /** Styling for dev-tools. */ + style: Style; + /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ + appData: Record; + /** @hidden */ + abstract _reset(): void; + static isValid(obj: any): boolean; + abstract getRadius(): number; + /** + * Get the type of this shape. You can use this to down cast to the concrete + * shape. + * + * @return the shape type. + */ + abstract getType(): ShapeType; + /** + * Get the number of child primitives. + */ + abstract getChildCount(): number; + /** + * Test a point for containment in this shape. This only works for convex + * shapes. + * + * @param xf The shape world transform. + * @param p A point in world coordinates. + */ + abstract testPoint(xf: TransformValue, p: Vec2Value): boolean; + /** + * Cast a ray against a child shape. + * + * @param output The ray-cast results. + * @param input The ray-cast input parameters. + * @param xf The transform to be applied to the shape. + * @param childIndex The child shape index + */ + abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; + /** + * Given a transform, compute the associated axis aligned bounding box for a + * child shape. + * + * @param aabb Returns the axis aligned box. + * @param xf The world transform of the shape. + * @param childIndex The child shape + */ + abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; + /** + * Compute the mass properties of this shape using its dimensions and density. + * The inertia tensor is computed about the local origin. + * + * @param massData Returns the mass data for this shape. + * @param density The density in kilograms per meter squared. + */ + abstract computeMass(massData: MassData, density?: number): void; + abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void; } -type ShapeType = "circle" | "edge" | "polygon" | "chain"; -type DynamicTreeQueryCallback = (nodeId: number) => boolean; +export type ShapeType = "circle" | "edge" | "polygon" | "chain"; +export type DynamicTreeQueryCallback = (nodeId: number) => boolean; /** * A node in the dynamic tree. The client does not interact with this directly. */ -declare class TreeNode { - id: number; - /** Enlarged AABB */ - aabb: AABB; - userData: T; - parent: TreeNode; - child1: TreeNode; - child2: TreeNode; - /** 0: leaf, -1: free node */ - height: number; - constructor(id?: number); - isLeaf(): boolean; +export declare class TreeNode { + id: number; + /** Enlarged AABB */ + aabb: AABB; + userData: T; + parent: TreeNode; + child1: TreeNode; + child2: TreeNode; + /** 0: leaf, -1: free node */ + height: number; + constructor(id?: number); + isLeaf(): boolean; } /** * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A @@ -752,246 +753,246 @@ declare class TreeNode { * Nodes are pooled and relocatable, so we use node indices rather than * pointers. */ -declare class DynamicTree { - m_root: TreeNode; - m_lastProxyId: number; - m_nodes: { - [id: number]: TreeNode; - }; - constructor(); - /** - * Get proxy user data. - * - * @return the proxy user data or 0 if the id is invalid. - */ - getUserData(id: number): T; - /** - * Get the fat AABB for a node id. - * - * @return the proxy user data or 0 if the id is invalid. - */ - getFatAABB(id: number): AABB; - allocateNode(): TreeNode; - freeNode(node: TreeNode): void; - /** - * Create a proxy in the tree as a leaf node. We return the index of the node - * instead of a pointer so that we can grow the node pool. - * - * Create a proxy. Provide a tight fitting AABB and a userData pointer. - */ - createProxy(aabb: AABBValue, userData: T): number; - /** - * Destroy a proxy. This asserts if the id is invalid. - */ - destroyProxy(id: number): void; - /** - * Move a proxy with a swepted AABB. If the proxy has moved outside of its - * fattened AABB, then the proxy is removed from the tree and re-inserted. - * Otherwise the function returns immediately. - * - * @param d Displacement - * - * @return true if the proxy was re-inserted. - */ - moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean; - insertLeaf(leaf: TreeNode): void; - removeLeaf(leaf: TreeNode): void; - /** - * Perform a left or right rotation if node A is imbalanced. Returns the new - * root index. - */ - balance(iA: TreeNode): TreeNode; - /** - * Compute the height of the binary tree in O(N) time. Should not be called - * often. - */ - getHeight(): number; - /** - * Get the ratio of the sum of the node areas to the root area. - */ - getAreaRatio(): number; - /** - * Compute the height of a sub-tree. - */ - computeHeight(id?: number): number; - validateStructure(node: TreeNode): void; - validateMetrics(node: TreeNode): void; - /** - * Validate this tree. For testing. - */ - validate(): void; - /** - * Get the maximum balance of an node in the tree. The balance is the difference - * in height of the two children of a node. - */ - getMaxBalance(): number; - /** - * Build an optimal tree. Very expensive. For testing. - */ - rebuildBottomUp(): void; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void; - private inputPool; - private stackPool; - private iteratorPool; +export declare class DynamicTree { + m_root: TreeNode; + m_lastProxyId: number; + m_nodes: { + [id: number]: TreeNode; + }; + constructor(); + /** + * Get proxy user data. + * + * @return the proxy user data or 0 if the id is invalid. + */ + getUserData(id: number): T; + /** + * Get the fat AABB for a node id. + * + * @return the proxy user data or 0 if the id is invalid. + */ + getFatAABB(id: number): AABB; + allocateNode(): TreeNode; + freeNode(node: TreeNode): void; + /** + * Create a proxy in the tree as a leaf node. We return the index of the node + * instead of a pointer so that we can grow the node pool. + * + * Create a proxy. Provide a tight fitting AABB and a userData pointer. + */ + createProxy(aabb: AABBValue, userData: T): number; + /** + * Destroy a proxy. This asserts if the id is invalid. + */ + destroyProxy(id: number): void; + /** + * Move a proxy with a swepted AABB. If the proxy has moved outside of its + * fattened AABB, then the proxy is removed from the tree and re-inserted. + * Otherwise the function returns immediately. + * + * @param d Displacement + * + * @return true if the proxy was re-inserted. + */ + moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean; + insertLeaf(leaf: TreeNode): void; + removeLeaf(leaf: TreeNode): void; + /** + * Perform a left or right rotation if node A is imbalanced. Returns the new + * root index. + */ + balance(iA: TreeNode): TreeNode; + /** + * Compute the height of the binary tree in O(N) time. Should not be called + * often. + */ + getHeight(): number; + /** + * Get the ratio of the sum of the node areas to the root area. + */ + getAreaRatio(): number; + /** + * Compute the height of a sub-tree. + */ + computeHeight(id?: number): number; + validateStructure(node: TreeNode): void; + validateMetrics(node: TreeNode): void; + /** + * Validate this tree. For testing. + */ + validate(): void; + /** + * Get the maximum balance of an node in the tree. The balance is the difference + * in height of the two children of a node. + */ + getMaxBalance(): number; + /** + * Build an optimal tree. Very expensive. For testing. + */ + rebuildBottomUp(): void; + /** + * Shift the world origin. Useful for large worlds. The shift formula is: + * position -= newOrigin + * + * @param newOrigin The new origin with respect to the old origin + */ + shiftOrigin(newOrigin: Vec2Value): void; + /** + * Query an AABB for overlapping proxies. The callback class is called for each + * proxy that overlaps the supplied AABB. + */ + query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void; + /** + * Ray-cast against the proxies in the tree. This relies on the callback to + * perform a exact ray-cast in the case were the proxy contains a shape. The + * callback also performs the any collision filtering. This has performance + * roughly equal to k * log(n), where k is the number of collisions and n is the + * number of proxies in the tree. + * + * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. + * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. + */ + rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void; + private inputPool; + private stackPool; + private iteratorPool; } /** * The broad-phase wraps and extends a dynamic-tree to keep track of moved * objects and query them on update. */ -declare class BroadPhase { - m_tree: DynamicTree; - m_moveBuffer: number[]; - m_callback: (userDataA: any, userDataB: any) => void; - m_queryProxyId: number; - /** - * Get user data from a proxy. Returns null if the id is invalid. - */ - getUserData(proxyId: number): FixtureProxy; - /** - * Test overlap of fat AABBs. - */ - testOverlap(proxyIdA: number, proxyIdB: number): boolean; - /** - * Get the fat AABB for a proxy. - */ - getFatAABB(proxyId: number): AABB; - /** - * Get the number of proxies. - */ - getProxyCount(): number; - /** - * Get the height of the embedded tree. - */ - getTreeHeight(): number; - /** - * Get the balance (integer) of the embedded tree. - */ - getTreeBalance(): number; - /** - * Get the quality metric of the embedded tree. - */ - getTreeQuality(): number; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - query: (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback) => void; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs - * is called. - */ - createProxy(aabb: AABBValue, userData: FixtureProxy): number; - /** - * Destroy a proxy. It is up to the client to remove any pairs. - */ - destroyProxy(proxyId: number): void; - /** - * Call moveProxy as many times as you like, then when you are done call - * UpdatePairs to finalized the proxy pairs (for your time step). - */ - moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void; - /** - * Call to trigger a re-processing of it's pairs on the next call to - * UpdatePairs. - */ - touchProxy(proxyId: number): void; - bufferMove(proxyId: number): void; - unbufferMove(proxyId: number): void; - /** - * Update the pairs. This results in pair callbacks. This can only add pairs. - */ - updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void; - queryCallback: (proxyId: number) => boolean; +export declare class BroadPhase { + m_tree: DynamicTree; + m_moveBuffer: number[]; + m_callback: (userDataA: any, userDataB: any) => void; + m_queryProxyId: number; + /** + * Get user data from a proxy. Returns null if the id is invalid. + */ + getUserData(proxyId: number): FixtureProxy; + /** + * Test overlap of fat AABBs. + */ + testOverlap(proxyIdA: number, proxyIdB: number): boolean; + /** + * Get the fat AABB for a proxy. + */ + getFatAABB(proxyId: number): AABB; + /** + * Get the number of proxies. + */ + getProxyCount(): number; + /** + * Get the height of the embedded tree. + */ + getTreeHeight(): number; + /** + * Get the balance (integer) of the embedded tree. + */ + getTreeBalance(): number; + /** + * Get the quality metric of the embedded tree. + */ + getTreeQuality(): number; + /** + * Query an AABB for overlapping proxies. The callback class is called for each + * proxy that overlaps the supplied AABB. + */ + query: (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback) => void; + /** + * Ray-cast against the proxies in the tree. This relies on the callback to + * perform a exact ray-cast in the case were the proxy contains a shape. The + * callback also performs the any collision filtering. This has performance + * roughly equal to k * log(n), where k is the number of collisions and n is the + * number of proxies in the tree. + * + * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. + * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. + */ + rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void; + /** + * Shift the world origin. Useful for large worlds. The shift formula is: + * position -= newOrigin + * + * @param newOrigin The new origin with respect to the old origin + */ + shiftOrigin(newOrigin: Vec2Value): void; + /** + * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs + * is called. + */ + createProxy(aabb: AABBValue, userData: FixtureProxy): number; + /** + * Destroy a proxy. It is up to the client to remove any pairs. + */ + destroyProxy(proxyId: number): void; + /** + * Call moveProxy as many times as you like, then when you are done call + * UpdatePairs to finalized the proxy pairs (for your time step). + */ + moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void; + /** + * Call to trigger a re-processing of it's pairs on the next call to + * UpdatePairs. + */ + touchProxy(proxyId: number): void; + bufferMove(proxyId: number): void; + unbufferMove(proxyId: number): void; + /** + * Update the pairs. This results in pair callbacks. This can only add pairs. + */ + updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void; + queryCallback: (proxyId: number) => boolean; } /** * A fixture definition is used to create a fixture. This class defines an * abstract fixture definition. You can reuse fixture definitions safely. */ -interface FixtureOpt { - userData?: unknown; - /** - * The friction coefficient, usually in the range [0,1] - */ - friction?: number; - /** - * The restitution (elasticity) usually in the range [0,1] - */ - restitution?: number; - /** - * The density, usually in kg/m^2 - */ - density?: number; - /** - * A sensor shape collects contact information but never generates a collision response. - */ - isSensor?: boolean; - /** - * Zero, positive or negative collision group. - * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide. - */ - filterGroupIndex?: number; - /** - * Collision category bit or bits that this fixture belongs to. - * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa. - */ - filterCategoryBits?: number; - /** - * Collision category bit or bits that this fixture accept for collision. - */ - filterMaskBits?: number; +export interface FixtureOpt { + userData?: unknown; + /** + * The friction coefficient, usually in the range [0,1] + */ + friction?: number; + /** + * The restitution (elasticity) usually in the range [0,1] + */ + restitution?: number; + /** + * The density, usually in kg/m^2 + */ + density?: number; + /** + * A sensor shape collects contact information but never generates a collision response. + */ + isSensor?: boolean; + /** + * Zero, positive or negative collision group. + * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide. + */ + filterGroupIndex?: number; + /** + * Collision category bit or bits that this fixture belongs to. + * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa. + */ + filterCategoryBits?: number; + /** + * Collision category bit or bits that this fixture accept for collision. + */ + filterMaskBits?: number; } -interface FixtureDef extends FixtureOpt { - shape: Shape; +export interface FixtureDef extends FixtureOpt { + shape: Shape; } /** * This proxy is used internally to connect shape children to the broad-phase. */ -declare class FixtureProxy { - aabb: AABB; - fixture: Fixture; - childIndex: number; - proxyId: number; - constructor(fixture: Fixture, childIndex: number); +export declare class FixtureProxy { + aabb: AABB; + fixture: Fixture; + childIndex: number; + proxyId: number; + constructor(fixture: Fixture, childIndex: number); } /** * A fixture is used to attach a shape to a body for collision detection. A @@ -1000,181 +1001,175 @@ declare class FixtureProxy { * * To create a new Fixture use {@link Body.createFixture}. */ -declare class Fixture { - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - constructor(body: Body, def: FixtureDef); - constructor(body: Body, shape: Shape, def?: FixtureOpt); - constructor(body: Body, shape: Shape, density?: number); - /** @hidden Re-setup fixture. */ - _reset(): void; - /** - * Get the type of the child shape. You can use this to down cast to the - * concrete shape. - */ - getType(): ShapeType; - /** - * Get the child shape. You can modify the child shape, however you should not - * change the number of vertices because this will crash some collision caching - * mechanisms. Manipulating the shape may lead to non-physical behavior. - */ - getShape(): Shape; - /** - * A sensor shape collects contact information but never generates a collision - * response. - */ - isSensor(): boolean; - /** - * Set if this fixture is a sensor. - */ - setSensor(sensor: boolean): void; - // /** - // * Get the contact filtering data. - // */ - // getFilterData() { - // return this.m_filter; - // } - /** - * Get the user data that was assigned in the fixture definition. Use this to - * store your application specific data. - */ - getUserData(): unknown; - /** - * Set the user data. Use this to store your application specific data. - */ - setUserData(data: unknown): void; - /** - * Get the parent body of this fixture. This is null if the fixture is not - * attached. - */ - getBody(): Body; - /** - * Get the next fixture in the parent body's fixture list. - */ - getNext(): Fixture | null; - /** - * Get the density of this fixture. - */ - getDensity(): number; - /** - * Set the density of this fixture. This will _not_ automatically adjust the - * mass of the body. You must call Body.resetMassData to update the body's mass. - */ - setDensity(density: number): void; - /** - * Get the coefficient of friction, usually in the range [0,1]. - */ - getFriction(): number; - /** - * Set the coefficient of friction. This will not change the friction of - * existing contacts. - */ - setFriction(friction: number): void; - /** - * Get the coefficient of restitution. - */ - getRestitution(): number; - /** - * Set the coefficient of restitution. This will not change the restitution of - * existing contacts. - */ - setRestitution(restitution: number): void; - /** - * Test a point in world coordinates for containment in this fixture. - */ - testPoint(p: Vec2Value): boolean; - /** - * Cast a ray against this shape. - */ - rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean; - /** - * Get the mass data for this fixture. The mass data is based on the density and - * the shape. The rotational inertia is about the shape's origin. This operation - * may be expensive. - */ - getMassData(massData: MassData): void; - /** - * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a - * more accurate AABB, compute it using the shape and the body transform. - */ - getAABB(childIndex: number): AABB; - /** - * These support body activation/deactivation. - */ - createProxies(broadPhase: BroadPhase, xf: TransformValue): void; - destroyProxies(broadPhase: BroadPhase): void; - /** - * Updates this fixture proxy in broad-phase (with combined AABB of current and - * next transformation). - */ - synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void; - /** - * Set the contact filtering data. This will not update contacts until the next - * time step when either parent body is active and awake. This automatically - * calls refilter. - */ - setFilterData(filter: { - groupIndex: number; - categoryBits: number; - maskBits: number; - }): void; - getFilterGroupIndex(): number; - setFilterGroupIndex(groupIndex: number): void; - getFilterCategoryBits(): number; - setFilterCategoryBits(categoryBits: number): void; - getFilterMaskBits(): number; - setFilterMaskBits(maskBits: number): void; - /** - * Call this if you want to establish collision that was previously disabled by - * ContactFilter. - */ - refilter(): void; - /** - * Implement this method to provide collision filtering, if you want finer - * control over contact creation. - * - * Return true if contact calculations should be performed between these two - * fixtures. - * - * Warning: for performance reasons this is only called when the AABBs begin to - * overlap. - */ - shouldCollide(that: Fixture): boolean; +export declare class Fixture { + /** Styling for dev-tools. */ + style: Style; + /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ + appData: Record; + constructor(body: Body$1, def: FixtureDef); + constructor(body: Body$1, shape: Shape, def?: FixtureOpt); + constructor(body: Body$1, shape: Shape, density?: number); + /** @hidden Re-setup fixture. */ + _reset(): void; + /** + * Get the type of the child shape. You can use this to down cast to the + * concrete shape. + */ + getType(): ShapeType; + /** + * Get the child shape. You can modify the child shape, however you should not + * change the number of vertices because this will crash some collision caching + * mechanisms. Manipulating the shape may lead to non-physical behavior. + */ + getShape(): Shape; + /** + * A sensor shape collects contact information but never generates a collision + * response. + */ + isSensor(): boolean; + /** + * Set if this fixture is a sensor. + */ + setSensor(sensor: boolean): void; + /** + * Get the user data that was assigned in the fixture definition. Use this to + * store your application specific data. + */ + getUserData(): unknown; + /** + * Set the user data. Use this to store your application specific data. + */ + setUserData(data: unknown): void; + /** + * Get the parent body of this fixture. This is null if the fixture is not + * attached. + */ + getBody(): Body$1; + /** + * Get the next fixture in the parent body's fixture list. + */ + getNext(): Fixture | null; + /** + * Get the density of this fixture. + */ + getDensity(): number; + /** + * Set the density of this fixture. This will _not_ automatically adjust the + * mass of the body. You must call Body.resetMassData to update the body's mass. + */ + setDensity(density: number): void; + /** + * Get the coefficient of friction, usually in the range [0,1]. + */ + getFriction(): number; + /** + * Set the coefficient of friction. This will not change the friction of + * existing contacts. + */ + setFriction(friction: number): void; + /** + * Get the coefficient of restitution. + */ + getRestitution(): number; + /** + * Set the coefficient of restitution. This will not change the restitution of + * existing contacts. + */ + setRestitution(restitution: number): void; + /** + * Test a point in world coordinates for containment in this fixture. + */ + testPoint(p: Vec2Value): boolean; + /** + * Cast a ray against this shape. + */ + rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean; + /** + * Get the mass data for this fixture. The mass data is based on the density and + * the shape. The rotational inertia is about the shape's origin. This operation + * may be expensive. + */ + getMassData(massData: MassData): void; + /** + * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a + * more accurate AABB, compute it using the shape and the body transform. + */ + getAABB(childIndex: number): AABB; + /** + * These support body activation/deactivation. + */ + createProxies(broadPhase: BroadPhase, xf: TransformValue): void; + destroyProxies(broadPhase: BroadPhase): void; + /** + * Updates this fixture proxy in broad-phase (with combined AABB of current and + * next transformation). + */ + synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void; + /** + * Set the contact filtering data. This will not update contacts until the next + * time step when either parent body is active and awake. This automatically + * calls refilter. + */ + setFilterData(filter: { + groupIndex: number; + categoryBits: number; + maskBits: number; + }): void; + getFilterGroupIndex(): number; + setFilterGroupIndex(groupIndex: number): void; + getFilterCategoryBits(): number; + setFilterCategoryBits(categoryBits: number): void; + getFilterMaskBits(): number; + setFilterMaskBits(maskBits: number): void; + /** + * Call this if you want to establish collision that was previously disabled by + * ContactFilter. + */ + refilter(): void; + /** + * Implement this method to provide collision filtering, if you want finer + * control over contact creation. + * + * Return true if contact calculations should be performed between these two + * fixtures. + * + * Warning: for performance reasons this is only called when the AABBs begin to + * overlap. + */ + shouldCollide(that: Fixture): boolean; } -declare enum ManifoldType { - e_unset = -1, - e_circles = 0, - e_faceA = 1, - e_faceB = 2 +export declare enum ManifoldType { + e_unset = -1, + e_circles = 0, + e_faceA = 1, + e_faceB = 2 } -declare enum ContactFeatureType { - e_unset = -1, - e_vertex = 0, - e_face = 1 +export declare enum ContactFeatureType { + e_unset = -1, + e_vertex = 0, + e_face = 1 } /** * This is used for determining the state of contact points. */ -declare enum PointState { - /** Point does not exist */ - nullState = 0, - /** Point was added in the update */ - addState = 1, - /** Point persisted across the update */ - persistState = 2, - /** Point was removed in the update */ - removeState = 3 +export declare enum PointState { + /** Point does not exist */ + nullState = 0, + /** Point was added in the update */ + addState = 1, + /** Point persisted across the update */ + persistState = 2, + /** Point was removed in the update */ + removeState = 3 } /** * Used for computing contact manifolds. */ -declare class ClipVertex { - v: Vec2Value; - id: ContactID; - set(o: ClipVertex): void; - recycle(): void; +export declare class ClipVertex { + v: Vec2Value; + id: ContactID; + set(o: ClipVertex): void; + recycle(): void; } /** * A manifold for two touching convex shapes. Manifolds are created in `evaluate` @@ -1188,38 +1183,38 @@ declare class ClipVertex { * must be expressed in one of these types. This structure is stored across time * steps, so we keep it small. */ -declare class Manifold { - type: ManifoldType; - /** - * Usage depends on manifold type: - * - circles: not used - * - faceA: the normal on polygonA - * - faceB: the normal on polygonB - */ - localNormal: Vec2Value; - /** - * Usage depends on manifold type: - * - circles: the local center of circleA - * - faceA: the center of faceA - * - faceB: the center of faceB - */ - localPoint: Vec2Value; - /** The points of contact */ - points: ManifoldPoint[]; - /** The number of manifold points */ - pointCount: number; - set(that: Manifold): void; - recycle(): void; - /** - * Evaluate the manifold with supplied transforms. This assumes modest motion - * from the original state. This does not change the point count, impulses, etc. - * The radii must come from the shapes that generated the manifold. - */ - getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold; - static clipSegmentToLine: typeof clipSegmentToLine; - static ClipVertex: typeof ClipVertex; - static getPointStates: typeof getPointStates; - static PointState: typeof PointState; +export declare class Manifold { + type: ManifoldType; + /** + * Usage depends on manifold type: + * - circles: not used + * - faceA: the normal on polygonA + * - faceB: the normal on polygonB + */ + localNormal: Vec2Value; + /** + * Usage depends on manifold type: + * - circles: the local center of circleA + * - faceA: the center of faceA + * - faceB: the center of faceB + */ + localPoint: Vec2Value; + /** The points of contact */ + points: ManifoldPoint[]; + /** The number of manifold points */ + pointCount: number; + set(that: Manifold): void; + recycle(): void; + /** + * Evaluate the manifold with supplied transforms. This assumes modest motion + * from the original state. This does not change the point count, impulses, etc. + * The radii must come from the shapes that generated the manifold. + */ + getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold; + static clipSegmentToLine: typeof clipSegmentToLine; + static ClipVertex: typeof ClipVertex; + static getPointStates: typeof getPointStates; + static PointState: typeof PointState; } /** * A manifold point is a contact point belonging to a contact manifold. It holds @@ -1230,648 +1225,669 @@ declare class Manifold { * Note: impulses are used for internal caching and may not provide reliable * contact forces, especially for high speed collisions. */ -declare class ManifoldPoint { - /** - * Usage depends on manifold type: - * - circles: the local center of circleB - * - faceA: the local center of circleB or the clip point of polygonB - * - faceB: the clip point of polygonA - */ - localPoint: Vec2Value; - /** - * The non-penetration impulse - */ - normalImpulse: number; - /** - * The friction impulse - */ - tangentImpulse: number; - /** - * Uniquely identifies a contact point between two shapes to facilitate warm starting - */ - readonly id: ContactID; - set(that: ManifoldPoint): void; - recycle(): void; +export declare class ManifoldPoint { + /** + * Usage depends on manifold type: + * - circles: the local center of circleB + * - faceA: the local center of circleB or the clip point of polygonB + * - faceB: the clip point of polygonA + */ + localPoint: Vec2Value; + /** + * The non-penetration impulse + */ + normalImpulse: number; + /** + * The friction impulse + */ + tangentImpulse: number; + /** + * Uniquely identifies a contact point between two shapes to facilitate warm starting + */ + readonly id: ContactID; + set(that: ManifoldPoint): void; + recycle(): void; } /** * Contact ids to facilitate warm starting. * * ContactFeature: The features that intersect to form the contact point. */ -declare class ContactID { - /** - * Used to quickly compare contact ids. - */ - key: number; - /** ContactFeature index on shapeA */ - indexA: number; - /** ContactFeature index on shapeB */ - indexB: number; - /** ContactFeature type on shapeA */ - typeA: ContactFeatureType; - /** ContactFeature type on shapeB */ - typeB: ContactFeatureType; - setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void; - set(that: ContactID): void; - swapFeatures(): void; - recycle(): void; +export declare class ContactID { + /** + * Used to quickly compare contact ids. + */ + key: number; + /** ContactFeature index on shapeA */ + indexA: number; + /** ContactFeature index on shapeB */ + indexB: number; + /** ContactFeature type on shapeA */ + typeA: ContactFeatureType; + /** ContactFeature type on shapeB */ + typeB: ContactFeatureType; + setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void; + set(that: ContactID): void; + swapFeatures(): void; + recycle(): void; } /** * This is used to compute the current state of a contact manifold. */ -declare class WorldManifold { - /** World vector pointing from A to B */ - normal: Vec2Value; - /** World contact point (point of intersection) */ - points: Vec2Value[]; // [maxManifoldPoints] - /** A negative value indicates overlap, in meters */ - separations: number[]; // [maxManifoldPoints] - /** The number of manifold points */ - pointCount: number; - recycle(): void; +export declare class WorldManifold { + /** World vector pointing from A to B */ + normal: Vec2Value; + /** World contact point (point of intersection) */ + points: Vec2Value[]; + /** A negative value indicates overlap, in meters */ + separations: number[]; + /** The number of manifold points */ + pointCount: number; + recycle(): void; } /** * Compute the point states given two manifolds. The states pertain to the * transition from manifold1 to manifold2. So state1 is either persist or remove * while state2 is either add or persist. */ -declare function getPointStates(state1: PointState[], state2: PointState[], manifold1: Manifold, manifold2: Manifold): void; +export declare function getPointStates(state1: PointState[], state2: PointState[], manifold1: Manifold, manifold2: Manifold): void; /** * Clipping for contact manifolds. Sutherland-Hodgman clipping. */ -declare function clipSegmentToLine(vOut: ClipVertex[], vIn: ClipVertex[], normal: Vec2Value, offset: number, vertexIndexA: number): number; +export declare function clipSegmentToLine(vOut: ClipVertex[], vIn: ClipVertex[], normal: Vec2Value, offset: number, vertexIndexA: number): number; /** * A contact edge is used to connect bodies and contacts together in a contact * graph where each body is a node and each contact is an edge. A contact edge * belongs to a doubly linked list maintained in each attached body. Each * contact has two contact nodes, one for each attached body. */ -declare class ContactEdge { - contact: Contact; - prev: ContactEdge | null; - next: ContactEdge | null; - other: Body | null; - constructor(contact: Contact); +export declare class ContactEdge { + contact: Contact; + prev: ContactEdge | null; + next: ContactEdge | null; + other: Body$1 | null; + constructor(contact: Contact); } -type EvaluateFunction = (manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number) => void; +export type EvaluateFunction = (manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number) => void; /** * Friction mixing law. The idea is to allow either fixture to drive the * friction to zero. For example, anything slides on ice. */ -declare function mixFriction(friction1: number, friction2: number): number; +export declare function mixFriction(friction1: number, friction2: number): number; /** * Restitution mixing law. The idea is allow for anything to bounce off an * inelastic surface. For example, a superball bounces on anything. */ -declare function mixRestitution(restitution1: number, restitution2: number): number; -// TODO: merge with ManifoldPoint? -declare class VelocityConstraintPoint { - rA: Vec2Value; - rB: Vec2Value; - normalImpulse: number; - tangentImpulse: number; - normalMass: number; - tangentMass: number; - velocityBias: number; - recycle(): void; +export declare function mixRestitution(restitution1: number, restitution2: number): number; +export declare class VelocityConstraintPoint { + rA: Vec2Value; + rB: Vec2Value; + normalImpulse: number; + tangentImpulse: number; + normalMass: number; + tangentMass: number; + velocityBias: number; + recycle(): void; } /** * The class manages contact between two shapes. A contact exists for each * overlapping AABB in the broad-phase (except if filtered). Therefore a contact * object may exist that has no contact points. */ -declare class Contact { - initConstraint(step: TimeStep): void; - /** - * Get the contact manifold. Do not modify the manifold unless you understand - * the internals of the library. - */ - getManifold(): Manifold; - /** - * Get the world manifold. - */ - getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined; - /** - * Enable/disable this contact. This can be used inside the pre-solve contact - * listener. The contact is only disabled for the current time step (or sub-step - * in continuous collisions). - */ - setEnabled(flag: boolean): void; - /** - * Has this contact been disabled? - */ - isEnabled(): boolean; - /** - * Is this contact touching? - */ - isTouching(): boolean; - /** - * Get the next contact in the world's contact list. - */ - getNext(): Contact | null; - /** - * Get fixture A in this contact. - */ - getFixtureA(): Fixture; - /** - * Get fixture B in this contact. - */ - getFixtureB(): Fixture; - /** - * Get the child primitive index for fixture A. - */ - getChildIndexA(): number; - /** - * Get the child primitive index for fixture B. - */ - getChildIndexB(): number; - /** - * Flag this contact for filtering. Filtering will occur the next time step. - */ - flagForFiltering(): void; - /** - * Override the default friction mixture. You can call this in - * "pre-solve" callback. This value persists until set or reset. - */ - setFriction(friction: number): void; - /** - * Get the friction. - */ - getFriction(): number; - /** - * Reset the friction mixture to the default value. - */ - resetFriction(): void; - /** - * Override the default restitution mixture. You can call this in - * "pre-solve" callback. The value persists until you set or reset. - */ - setRestitution(restitution: number): void; - /** - * Get the restitution. - */ - getRestitution(): number; - /** - * Reset the restitution to the default value. - */ - resetRestitution(): void; - /** - * Set the desired tangent speed for a conveyor belt behavior. In meters per - * second. - */ - setTangentSpeed(speed: number): void; - /** - * Get the desired tangent speed. In meters per second. - */ - getTangentSpeed(): number; - /** - * Called by Update method, and implemented by subclasses. - */ - evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void; - /** - * Updates the contact manifold and touching status. - * - * Note: do not assume the fixture AABBs are overlapping or are valid. - * - * @param listener.beginContact - * @param listener.endContact - * @param listener.preSolve - */ - update(listener?: { - beginContact(contact: Contact): void; - endContact(contact: Contact): void; - preSolve(contact: Contact, oldManifold: Manifold): void; - }): void; - solvePositionConstraint(step: TimeStep): number; - solvePositionConstraintTOI(step: TimeStep, toiA: Body, toiB: Body): number; - private _solvePositionConstraint; - initVelocityConstraint(step: TimeStep): void; - warmStartConstraint(step: TimeStep): void; - storeConstraintImpulses(step: TimeStep): void; - solveVelocityConstraint(step: TimeStep): void; +export declare class Contact { + initConstraint(step: TimeStep): void; + /** + * Get the contact manifold. Do not modify the manifold unless you understand + * the internals of the library. + */ + getManifold(): Manifold; + /** + * Get the world manifold. + */ + getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined; + /** + * Enable/disable this contact. This can be used inside the pre-solve contact + * listener. The contact is only disabled for the current time step (or sub-step + * in continuous collisions). + */ + setEnabled(flag: boolean): void; + /** + * Has this contact been disabled? + */ + isEnabled(): boolean; + /** + * Is this contact touching? + */ + isTouching(): boolean; + /** + * Get the next contact in the world's contact list. + */ + getNext(): Contact | null; + /** + * Get fixture A in this contact. + */ + getFixtureA(): Fixture; + /** + * Get fixture B in this contact. + */ + getFixtureB(): Fixture; + /** + * Get the child primitive index for fixture A. + */ + getChildIndexA(): number; + /** + * Get the child primitive index for fixture B. + */ + getChildIndexB(): number; + /** + * Flag this contact for filtering. Filtering will occur the next time step. + */ + flagForFiltering(): void; + /** + * Override the default friction mixture. You can call this in + * "pre-solve" callback. This value persists until set or reset. + */ + setFriction(friction: number): void; + /** + * Get the friction. + */ + getFriction(): number; + /** + * Reset the friction mixture to the default value. + */ + resetFriction(): void; + /** + * Override the default restitution mixture. You can call this in + * "pre-solve" callback. The value persists until you set or reset. + */ + setRestitution(restitution: number): void; + /** + * Get the restitution. + */ + getRestitution(): number; + /** + * Reset the restitution to the default value. + */ + resetRestitution(): void; + /** + * Set the desired tangent speed for a conveyor belt behavior. In meters per + * second. + */ + setTangentSpeed(speed: number): void; + /** + * Get the desired tangent speed. In meters per second. + */ + getTangentSpeed(): number; + /** + * Called by Update method, and implemented by subclasses. + */ + evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void; + /** + * Updates the contact manifold and touching status. + * + * Note: do not assume the fixture AABBs are overlapping or are valid. + * + * @param listener.beginContact + * @param listener.endContact + * @param listener.preSolve + */ + update(listener?: { + beginContact(contact: Contact): void; + endContact(contact: Contact): void; + preSolve(contact: Contact, oldManifold: Manifold): void; + }): void; + solvePositionConstraint(step: TimeStep): number; + solvePositionConstraintTOI(step: TimeStep, toiA: Body$1, toiB: Body$1): number; + private _solvePositionConstraint; + initVelocityConstraint(step: TimeStep): void; + warmStartConstraint(step: TimeStep): void; + storeConstraintImpulses(step: TimeStep): void; + solveVelocityConstraint(step: TimeStep): void; } -type BodyType = "static" | "kinematic" | "dynamic"; -interface BodyDef { - /** - * Body types are static, kinematic, or dynamic. Note: if a dynamic - * body would have zero mass, the mass is set to one. - */ - type?: BodyType; - /** - * The world position of the body. Avoid creating bodies at the - * origin since this can lead to many overlapping shapes. - */ - position?: Vec2Value; - /** - * The world angle of the body in radians. - */ - angle?: number; - /** - * The linear velocity of the body's origin in world co-ordinates. - */ - linearVelocity?: Vec2Value; - angularVelocity?: number; - /** - * Linear damping is use to reduce the linear velocity. The - * damping parameter can be larger than 1.0 but the damping effect becomes - * sensitive to the time step when the damping parameter is large. - * Units are 1/time - */ - linearDamping?: number; - /** - * Angular damping is use to reduce the angular velocity. - * The damping parameter can be larger than 1.0 but the damping effect - * becomes sensitive to the time step when the damping parameter is large. - * Units are 1/time - */ - angularDamping?: number; - /** - * Should this body be prevented from rotating? Useful for characters. - */ - fixedRotation?: boolean; - /** - * Is this a fast moving body that should be prevented from - * tunneling through other moving bodies? Note that all bodies are - * prevented from tunneling through kinematic and static bodies. This - * setting is only considered on dynamic bodies. Warning: You should use - * this flag sparingly since it increases processing time. - */ - bullet?: boolean; - gravityScale?: number; - /** - * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage. - */ - allowSleep?: boolean; - /** - * Is this body initially awake or sleeping? - */ - awake?: boolean; - /** - * Does this body start out active? - */ - active?: boolean; - userData?: any; +/** + * A static body does not move under simulation and behaves as if it has infinite mass. + * Internally, zero is stored for the mass and the inverse mass. + * Static bodies can be moved manually by the user. + * A static body has zero velocity. + * Static bodies do not collide with other static or kinematic bodies. + * + * A kinematic body moves under simulation according to its velocity. + * Kinematic bodies do not respond to forces. + * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity. + * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass. + * Kinematic bodies do not collide with other kinematic or static bodies. + * + * A dynamic body is fully simulated. + * They can be moved manually by the user, but normally they move according to forces. + * A dynamic body can collide with all body types. + * A dynamic body always has finite, non-zero mass. + * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate. + */ +export type BodyType = "static" | "kinematic" | "dynamic"; +export interface BodyDef { + /** + * Body types are static, kinematic, or dynamic. Note: if a dynamic + * body would have zero mass, the mass is set to one. + */ + type?: BodyType; + /** + * The world position of the body. Avoid creating bodies at the + * origin since this can lead to many overlapping shapes. + */ + position?: Vec2Value; + /** + * The world angle of the body in radians. + */ + angle?: number; + /** + * The linear velocity of the body's origin in world co-ordinates. + */ + linearVelocity?: Vec2Value; + angularVelocity?: number; + /** + * Linear damping is use to reduce the linear velocity. The + * damping parameter can be larger than 1.0 but the damping effect becomes + * sensitive to the time step when the damping parameter is large. + * Units are 1/time + */ + linearDamping?: number; + /** + * Angular damping is use to reduce the angular velocity. + * The damping parameter can be larger than 1.0 but the damping effect + * becomes sensitive to the time step when the damping parameter is large. + * Units are 1/time + */ + angularDamping?: number; + /** + * Should this body be prevented from rotating? Useful for characters. + */ + fixedRotation?: boolean; + /** + * Is this a fast moving body that should be prevented from + * tunneling through other moving bodies? Note that all bodies are + * prevented from tunneling through kinematic and static bodies. This + * setting is only considered on dynamic bodies. Warning: You should use + * this flag sparingly since it increases processing time. + */ + bullet?: boolean; + gravityScale?: number; + /** + * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage. + */ + allowSleep?: boolean; + /** + * Is this body initially awake or sleeping? + */ + awake?: boolean; + /** + * Does this body start out active? + */ + active?: boolean; + userData?: any; } /** * MassData This holds the mass data computed for a shape. */ -interface MassData { - /** The mass of the shape, usually in kilograms. */ - mass: number; - /** The position of the shape's centroid relative to the shape's origin. */ - center: Vec2Value; - /** The rotational inertia of the shape about the local origin. */ - I: number; +export interface MassData { + /** The mass of the shape, usually in kilograms. */ + mass: number; + /** The position of the shape's centroid relative to the shape's origin. */ + center: Vec2Value; + /** The rotational inertia of the shape about the local origin. */ + I: number; } /** * A rigid body composed of one or more fixtures. * * To create a new Body use {@link World.createBody}. */ -declare class Body { - /** - * A static body does not move under simulation and behaves as if it has infinite mass. - * Internally, zero is stored for the mass and the inverse mass. - * Static bodies can be moved manually by the user. - * A static body has zero velocity. - * Static bodies do not collide with other static or kinematic bodies. - */ - static readonly STATIC: BodyType; - /** - * A kinematic body moves under simulation according to its velocity. - * Kinematic bodies do not respond to forces. - * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity. - * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass. - * Kinematic bodies do not collide with other kinematic or static bodies. - */ - static readonly KINEMATIC: BodyType; - /** - * A dynamic body is fully simulated. - * They can be moved manually by the user, but normally they move according to forces. - * A dynamic body can collide with all body types. - * A dynamic body always has finite, non-zero mass. - * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate. - */ - static readonly DYNAMIC: BodyType; - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - isWorldLocked(): boolean; - getWorld(): World; - getNext(): Body | null; - setUserData(data: any): void; - getUserData(): unknown; - getFixtureList(): Fixture | null; - getJointList(): JointEdge | null; - /** - * Warning: this list changes during the time step and you may miss some - * collisions if you don't use ContactListener. - */ - getContactList(): ContactEdge | null; - isStatic(): boolean; - isDynamic(): boolean; - isKinematic(): boolean; - /** - * This will alter the mass and velocity. - */ - setStatic(): Body; - setDynamic(): Body; - setKinematic(): Body; - /** - * Get the type of the body. - */ - getType(): BodyType; - /** - * Set the type of the body to "static", "kinematic" or "dynamic". - * @param type The type of the body. - */ - setType(type: BodyType): void; - isBullet(): boolean; - /** - * Should this body be treated like a bullet for continuous collision detection? - */ - setBullet(flag: boolean): void; - isSleepingAllowed(): boolean; - setSleepingAllowed(flag: boolean): void; - isAwake(): boolean; - /** - * Set the sleep state of the body. A sleeping body has very low CPU cost. - * - * @param flag Set to true to wake the body, false to put it to sleep. - */ - setAwake(flag: boolean): void; - isActive(): boolean; - /** - * Set the active state of the body. An inactive body is not simulated and - * cannot be collided with or woken up. If you pass a flag of true, all fixtures - * will be added to the broad-phase. If you pass a flag of false, all fixtures - * will be removed from the broad-phase and all contacts will be destroyed. - * Fixtures and joints are otherwise unaffected. - * - * You may continue to create/destroy fixtures and joints on inactive bodies. - * Fixtures on an inactive body are implicitly inactive and will not participate - * in collisions, ray-casts, or queries. Joints connected to an inactive body - * are implicitly inactive. An inactive body is still owned by a World object - * and remains - */ - setActive(flag: boolean): void; - isFixedRotation(): boolean; - /** - * Set this body to have fixed rotation. This causes the mass to be reset. - */ - setFixedRotation(flag: boolean): void; - /** - * Get the world transform for the body's origin. - */ - getTransform(): Transform; - /** - * Set the position of the body's origin and rotation. Manipulating a body's - * transform may cause non-physical behavior. Note: contacts are updated on the - * next call to World.step. - * - * @param position The world position of the body's local origin. - * @param angle The world rotation in radians. - */ - setTransform(position: Vec2Value, angle: number): void; - synchronizeTransform(): void; - /** - * Update fixtures in broad-phase. - */ - synchronizeFixtures(): void; - /** - * Used in TOI. - */ - advance(alpha: number): void; - /** - * Get the world position for the body's origin. - */ - getPosition(): Vec2; - setPosition(p: Vec2Value): void; - /** - * Get the current world rotation angle in radians. - */ - getAngle(): number; - setAngle(angle: number): void; - /** - * Get the world position of the center of mass. - */ - getWorldCenter(): Vec2; - /** - * Get the local position of the center of mass. - */ - getLocalCenter(): Vec2; - /** - * Get the linear velocity of the center of mass. - * - * @return the linear velocity of the center of mass. - */ - getLinearVelocity(): Vec2; - /** - * Get the world linear velocity of a world point attached to this body. - * - * @param worldPoint A point in world coordinates. - */ - getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2; - /** - * Get the world velocity of a local point. - * - * @param localPoint A point in local coordinates. - */ - getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2; - /** - * Set the linear velocity of the center of mass. - * - * @param v The new linear velocity of the center of mass. - */ - setLinearVelocity(v: Vec2Value): void; - /** - * Get the angular velocity. - * - * @returns the angular velocity in radians/second. - */ - getAngularVelocity(): number; - /** - * Set the angular velocity. - * - * @param omega The new angular velocity in radians/second. - */ - setAngularVelocity(w: number): void; - getLinearDamping(): number; - setLinearDamping(linearDamping: number): void; - getAngularDamping(): number; - setAngularDamping(angularDamping: number): void; - getGravityScale(): number; - /** - * Scale the gravity applied to this body. - */ - setGravityScale(scale: number): void; - /** - * Get the total mass of the body. - * - * @returns The mass, usually in kilograms (kg). - */ - getMass(): number; - /** - * Get the rotational inertia of the body about the local origin. - * - * @return the rotational inertia, usually in kg-m^2. - */ - getInertia(): number; - /** - * Copy the mass data of the body to data. - */ - getMassData(data: MassData): void; - /** - * This resets the mass properties to the sum of the mass properties of the - * fixtures. This normally does not need to be called unless you called - * SetMassData to override the mass and you later want to reset the mass. - */ - resetMassData(): void; - /** - * Set the mass properties to override the mass properties of the fixtures. Note - * that this changes the center of mass position. Note that creating or - * destroying fixtures can also alter the mass. This function has no effect if - * the body isn't dynamic. - * - * @param massData The mass properties. - */ - setMassData(massData: MassData): void; - /** - * Apply a force at a world point. If the force is not applied at the center of - * mass, it will generate a torque and affect the angular velocity. This wakes - * up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - applyForce(force: Vec2Value, point: Vec2Value, wake?: boolean): void; - /** - * Apply a force to the center of mass. This wakes up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param wake Also wake up the body - */ - applyForceToCenter(force: Vec2Value, wake?: boolean): void; - /** - * Apply a torque. This affects the angular velocity without affecting the - * linear velocity of the center of mass. This wakes up the body. - * - * @param torque About the z-axis (out of the screen), usually in N-m. - * @param wake Also wake up the body - */ - applyTorque(torque: number, wake?: boolean): void; - /** - * Apply an impulse at a point. This immediately modifies the velocity. It also - * modifies the angular velocity if the point of application is not at the - * center of mass. This wakes up the body. - * - * @param impulse The world impulse vector, usually in N-seconds or kg-m/s. - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake?: boolean): void; - /** - * Apply an angular impulse. - * - * @param impulse The angular impulse in units of kg*m*m/s - * @param wake Also wake up the body - */ - applyAngularImpulse(impulse: number, wake?: boolean): void; - /** - * This is used to test if two bodies should collide. - * - * Bodies do not collide when: - * - Neither of them is dynamic - * - They are connected by a joint with collideConnected == false - */ - shouldCollide(that: Body): boolean; - /** - * Creates a fixture and attach it to this body. - * - * If the density is non-zero, this function automatically updates the mass of - * the body. - * - * Contacts are not created until the next time step. - * - * Warning: This function is locked during callbacks. - */ - createFixture(def: FixtureDef): Fixture; - createFixture(shape: Shape, opt?: FixtureOpt): Fixture; - createFixture(shape: Shape, density?: number): Fixture; - /** - * Destroy a fixture. This removes the fixture from the broad-phase and destroys - * all contacts associated with this fixture. This will automatically adjust the - * mass of the body if the body is dynamic and the fixture has positive density. - * All fixtures attached to a body are implicitly destroyed when the body is - * destroyed. - * - * Warning: This function is locked during callbacks. - * - * @param fixture The fixture to be removed. - */ - destroyFixture(fixture: Fixture): void; - /** - * Get the corresponding world point of a local point. - */ - getWorldPoint(localPoint: Vec2Value): Vec2; - /** - * Get the corresponding world vector of a local vector. - */ - getWorldVector(localVector: Vec2Value): Vec2; - /** - * Gets the corresponding local point of a world point. - */ - getLocalPoint(worldPoint: Vec2Value): Vec2; - /** - * Gets the corresponding local vector of a world vector. - */ - getLocalVector(worldVector: Vec2Value): Vec2; +declare class Body$1 { + /** @hidden */ + static readonly STATIC: BodyType; + /** @hidden */ + static readonly KINEMATIC: BodyType; + /** @hidden */ + static readonly DYNAMIC: BodyType; + /** @hidden Styling for dev-tools. */ + style: Style; + /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ + appData: Record; + isWorldLocked(): boolean; + getWorld(): World; + getNext(): Body$1 | null; + setUserData(data: any): void; + getUserData(): unknown; + getFixtureList(): Fixture | null; + getJointList(): JointEdge | null; + /** + * Warning: this list changes during the time step and you may miss some + * collisions if you don't use ContactListener. + */ + getContactList(): ContactEdge | null; + isStatic(): boolean; + isDynamic(): boolean; + isKinematic(): boolean; + /** + * This will alter the mass and velocity. + */ + setStatic(): Body$1; + setDynamic(): Body$1; + setKinematic(): Body$1; + /** + * Get the type of the body. + */ + getType(): BodyType; + /** + * Set the type of the body to "static", "kinematic" or "dynamic". + * @param type The type of the body. + */ + setType(type: BodyType): void; + isBullet(): boolean; + /** + * Should this body be treated like a bullet for continuous collision detection? + */ + setBullet(flag: boolean): void; + isSleepingAllowed(): boolean; + setSleepingAllowed(flag: boolean): void; + isAwake(): boolean; + /** + * Set the sleep state of the body. A sleeping body has very low CPU cost. + * + * @param flag Set to true to wake the body, false to put it to sleep. + */ + setAwake(flag: boolean): void; + isActive(): boolean; + /** + * Set the active state of the body. An inactive body is not simulated and + * cannot be collided with or woken up. If you pass a flag of true, all fixtures + * will be added to the broad-phase. If you pass a flag of false, all fixtures + * will be removed from the broad-phase and all contacts will be destroyed. + * Fixtures and joints are otherwise unaffected. + * + * You may continue to create/destroy fixtures and joints on inactive bodies. + * Fixtures on an inactive body are implicitly inactive and will not participate + * in collisions, ray-casts, or queries. Joints connected to an inactive body + * are implicitly inactive. An inactive body is still owned by a World object + * and remains + */ + setActive(flag: boolean): void; + isFixedRotation(): boolean; + /** + * Set this body to have fixed rotation. This causes the mass to be reset. + */ + setFixedRotation(flag: boolean): void; + /** + * Get the world transform for the body's origin. + */ + getTransform(): Transform; + /** + * Set the position of the body's origin and rotation. Manipulating a body's + * transform may cause non-physical behavior. Note: contacts are updated on the + * next call to World.step. + * + * @param position The world position of the body's local origin. + * @param angle The world rotation in radians. + */ + setTransform(position: Vec2Value, angle: number): void; + synchronizeTransform(): void; + /** + * Update fixtures in broad-phase. + */ + synchronizeFixtures(): void; + /** + * Used in TOI. + */ + advance(alpha: number): void; + /** + * Get the world position for the body's origin. + */ + getPosition(): Vec2; + setPosition(p: Vec2Value): void; + /** + * Get the current world rotation angle in radians. + */ + getAngle(): number; + setAngle(angle: number): void; + /** + * Get the world position of the center of mass. + */ + getWorldCenter(): Vec2; + /** + * Get the local position of the center of mass. + */ + getLocalCenter(): Vec2; + /** + * Get the linear velocity of the center of mass. + * + * @return the linear velocity of the center of mass. + */ + getLinearVelocity(): Vec2; + /** + * Get the world linear velocity of a world point attached to this body. + * + * @param worldPoint A point in world coordinates. + */ + getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2; + /** + * Get the world velocity of a local point. + * + * @param localPoint A point in local coordinates. + */ + getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2; + /** + * Set the linear velocity of the center of mass. + * + * @param v The new linear velocity of the center of mass. + */ + setLinearVelocity(v: Vec2Value): void; + /** + * Get the angular velocity. + * + * @returns the angular velocity in radians/second. + */ + getAngularVelocity(): number; + /** + * Set the angular velocity. + * + * @param w The new angular velocity in radians/second. + */ + setAngularVelocity(w: number): void; + getLinearDamping(): number; + setLinearDamping(linearDamping: number): void; + getAngularDamping(): number; + setAngularDamping(angularDamping: number): void; + getGravityScale(): number; + /** + * Scale the gravity applied to this body. + */ + setGravityScale(scale: number): void; + /** + * Get the total mass of the body. + * + * @returns The mass, usually in kilograms (kg). + */ + getMass(): number; + /** + * Get the rotational inertia of the body about the local origin. + * + * @return the rotational inertia, usually in kg-m^2. + */ + getInertia(): number; + /** + * Copy the mass data of the body to data. + */ + getMassData(data: MassData): void; + /** + * This resets the mass properties to the sum of the mass properties of the + * fixtures. This normally does not need to be called unless you called + * SetMassData to override the mass and you later want to reset the mass. + */ + resetMassData(): void; + /** + * Set the mass properties to override the mass properties of the fixtures. Note + * that this changes the center of mass position. Note that creating or + * destroying fixtures can also alter the mass. This function has no effect if + * the body isn't dynamic. + * + * @param massData The mass properties. + */ + setMassData(massData: MassData): void; + /** + * Apply a force at a world point. If the force is not applied at the center of + * mass, it will generate a torque and affect the angular velocity. This wakes + * up the body. + * + * @param force The world force vector, usually in Newtons (N). + * @param point The world position of the point of application. + * @param wake Also wake up the body + */ + applyForce(force: Vec2Value, point: Vec2Value, wake?: boolean): void; + /** + * Apply a force to the center of mass. This wakes up the body. + * + * @param force The world force vector, usually in Newtons (N). + * @param wake Also wake up the body + */ + applyForceToCenter(force: Vec2Value, wake?: boolean): void; + /** + * Apply a torque. This affects the angular velocity without affecting the + * linear velocity of the center of mass. This wakes up the body. + * + * @param torque About the z-axis (out of the screen), usually in N-m. + * @param wake Also wake up the body + */ + applyTorque(torque: number, wake?: boolean): void; + /** + * Apply an impulse at a point. This immediately modifies the velocity. It also + * modifies the angular velocity if the point of application is not at the + * center of mass. This wakes up the body. + * + * @param impulse The world impulse vector, usually in N-seconds or kg-m/s. + * @param point The world position of the point of application. + * @param wake Also wake up the body + */ + applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake?: boolean): void; + /** + * Apply an angular impulse. + * + * @param impulse The angular impulse in units of kg*m*m/s + * @param wake Also wake up the body + */ + applyAngularImpulse(impulse: number, wake?: boolean): void; + /** + * This is used to test if two bodies should collide. + * + * Bodies do not collide when: + * - Neither of them is dynamic + * - They are connected by a joint with collideConnected == false + */ + shouldCollide(that: Body$1): boolean; + /** + * Creates a fixture and attach it to this body. + * + * If the density is non-zero, this function automatically updates the mass of + * the body. + * + * Contacts are not created until the next time step. + * + * Warning: This function is locked during callbacks. + */ + createFixture(def: FixtureDef): Fixture; + createFixture(shape: Shape, opt?: FixtureOpt): Fixture; + createFixture(shape: Shape, density?: number): Fixture; + /** + * Destroy a fixture. This removes the fixture from the broad-phase and destroys + * all contacts associated with this fixture. This will automatically adjust the + * mass of the body if the body is dynamic and the fixture has positive density. + * All fixtures attached to a body are implicitly destroyed when the body is + * destroyed. + * + * Warning: This function is locked during callbacks. + * + * @param fixture The fixture to be removed. + */ + destroyFixture(fixture: Fixture): void; + /** + * Get the corresponding world point of a local point. + */ + getWorldPoint(localPoint: Vec2Value): Vec2; + /** + * Get the corresponding world vector of a local vector. + */ + getWorldVector(localVector: Vec2Value): Vec2; + /** + * Gets the corresponding local point of a world point. + */ + getLocalPoint(worldPoint: Vec2Value): Vec2; + /** + * Gets the corresponding local vector of a world vector. + */ + getLocalVector(worldVector: Vec2Value): Vec2; } -declare class TimeStep { - /** time step */ - dt: number; - /** inverse time step (0 if dt == 0) */ - inv_dt: number; - velocityIterations: number; - positionIterations: number; - warmStarting: boolean; - blockSolve: boolean; - /** timestep ratio for variable timestep */ - inv_dt0: number; - /** dt * inv_dt0 */ - dtRatio: number; - reset(dt: number): void; +export declare class TimeStep { + /** time step */ + dt: number; + /** inverse time step (0 if dt == 0) */ + inv_dt: number; + velocityIterations: number; + positionIterations: number; + warmStarting: boolean; + blockSolve: boolean; + /** timestep ratio for variable timestep */ + inv_dt0: number; + /** dt * inv_dt0 */ + dtRatio: number; + reset(dt: number): void; } /** * Contact impulses for reporting. Impulses are used instead of forces because * sub-step forces may approach infinity for rigid body collisions. These match * up one-to-one with the contact points in Manifold. */ -declare class ContactImpulse { - // TODO: merge with Contact class? - private readonly contact; - private readonly normals; - private readonly tangents; - constructor(contact: Contact); - recycle(): void; - get normalImpulses(): number[]; - get tangentImpulses(): number[]; +export declare class ContactImpulse { + private readonly contact; + private readonly normals; + private readonly tangents; + constructor(contact: Contact); + recycle(): void; + get normalImpulses(): number[]; + get tangentImpulses(): number[]; +} +/** + * Finds and solves islands. An island is a connected subset of the world. + */ +export declare class Solver { + m_world: World; + m_stack: Body$1[]; + m_bodies: Body$1[]; + m_contacts: Contact[]; + m_joints: Joint[]; + constructor(world: World); + clear(): void; + addBody(body: Body$1): void; + addContact(contact: Contact): void; + addJoint(joint: Joint): void; + solveWorld(step: TimeStep): void; + solveIsland(step: TimeStep): void; + /** + * Find TOI contacts and solve them. + */ + solveWorldTOI(step: TimeStep): void; + solveIslandTOI(subStep: TimeStep, toiA: Body$1, toiB: Body$1): void; } -interface WorldDef { - /** [default: { x : 0, y : 0}] */ - gravity?: Vec2Value; - /** [default: true] */ - allowSleep?: boolean; - /** [default: true] */ - warmStarting?: boolean; - /** [default: true] */ - continuousPhysics?: boolean; - /** [default: false] */ - subStepping?: boolean; - /** [default: true] */ - blockSolve?: boolean; +export interface WorldDef { + /** [default: { x : 0, y : 0}] */ + gravity?: Vec2Value; + /** [default: true] */ + allowSleep?: boolean; + /** [default: true] */ + warmStarting?: boolean; + /** [default: true] */ + continuousPhysics?: boolean; + /** [default: false] */ + subStepping?: boolean; + /** [default: true] */ + blockSolve?: boolean; } /** * Callback function for ray casts, see {@link World.rayCast}. @@ -1892,642 +1908,633 @@ interface WorldDef { * * @returns A number to update the maxFraction */ -type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number; +export type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number; /** * Called for each fixture found in the query AABB. It may return `false` to terminate the query. */ -type WorldAABBQueryCallback = (fixture: Fixture) => boolean; -declare function World(def?: WorldDef | Vec2 | null): World; -declare class World { - /** - * @param def World definition or gravity vector. - */ - constructor(def?: WorldDef | Vec2 | null); - /** - * Get the world body list. With the returned body, use Body.getNext to get the - * next body in the world list. A null body indicates the end of the list. - * - * @return the head of the world body list. - */ - getBodyList(): Body | null; - /** - * Get the world joint list. With the returned joint, use Joint.getNext to get - * the next joint in the world list. A null joint indicates the end of the list. - * - * @return the head of the world joint list. - */ - getJointList(): Joint | null; - /** - * Get the world contact list. With the returned contact, use Contact.getNext to - * get the next contact in the world list. A null contact indicates the end of - * the list. - * - * Warning: contacts are created and destroyed in the middle of a time step. - * Use ContactListener to avoid missing contacts. - * - * @return the head of the world contact list. - */ - getContactList(): Contact | null; - getBodyCount(): number; - getJointCount(): number; - /** - * Get the number of contacts (each may have 0 or more contact points). - */ - getContactCount(): number; - /** - * Change the global gravity vector. - */ - setGravity(gravity: Vec2Value): void; - /** - * Get the global gravity vector. - */ - getGravity(): Vec2; - /** - * Is the world locked (in the middle of a time step). - */ - isLocked(): boolean; - /** - * Enable/disable sleep. - */ - setAllowSleeping(flag: boolean): void; - getAllowSleeping(): boolean; - /** - * Enable/disable warm starting. For testing. - */ - setWarmStarting(flag: boolean): void; - getWarmStarting(): boolean; - /** - * Enable/disable continuous physics. For testing. - */ - setContinuousPhysics(flag: boolean): void; - getContinuousPhysics(): boolean; - /** - * Enable/disable single stepped continuous physics. For testing. - */ - setSubStepping(flag: boolean): void; - getSubStepping(): boolean; - /** - * Set flag to control automatic clearing of forces after each time step. - */ - setAutoClearForces(flag: boolean): void; - /** - * Get the flag that controls automatic clearing of forces after each time step. - */ - getAutoClearForces(): boolean; - /** - * Manually clear the force buffer on all bodies. By default, forces are cleared - * automatically after each call to step. The default behavior is modified by - * calling setAutoClearForces. The purpose of this function is to support - * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step - * under a variable frame-rate. When you perform sub-stepping you will disable - * auto clearing of forces and instead call clearForces after all sub-steps are - * complete in one pass of your game loop. - * - * See {@link World.setAutoClearForces} - */ - clearForces(): void; - /** - * Query the world for all fixtures that potentially overlap the provided AABB. - * - * @param aabb The query box. - * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query. - */ - queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void; - /** - * Ray-cast the world for all fixtures in the path of the ray. Your callback - * controls whether you get the closest point, any point, or n-points. The - * ray-cast ignores shapes that contain the starting point. - * - * @param point1 The ray starting point - * @param point2 The ray ending point - * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value. - */ - rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void; - /** - * Get the number of broad-phase proxies. - */ - getProxyCount(): number; - /** - * Get the height of broad-phase dynamic tree. - */ - getTreeHeight(): number; - /** - * Get the balance of broad-phase dynamic tree. - */ - getTreeBalance(): number; - /** - * Get the quality metric of broad-phase dynamic tree. The smaller the better. - * The minimum is 1. - */ - getTreeQuality(): number; - /** - * Shift the world origin. Useful for large worlds. The body shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Create a rigid body given a definition. No reference to the definition is - * retained. - * - * Warning: This function is locked during callbacks. - */ - createBody(def?: BodyDef): Body; - createBody(position: Vec2Value, angle?: number): Body; - createDynamicBody(def?: BodyDef): Body; - createDynamicBody(position: Vec2Value, angle?: number): Body; - createKinematicBody(def?: BodyDef): Body; - createKinematicBody(position: Vec2Value, angle?: number): Body; - /** - * Destroy a rigid body given a definition. No reference to the definition is - * retained. - * - * Warning: This automatically deletes all associated shapes and joints. - * - * Warning: This function is locked during callbacks. - */ - destroyBody(b: Body): boolean; - /** - * Create a joint to constrain bodies together. No reference to the definition - * is retained. This may cause the connected bodies to cease colliding. - * - * Warning: This function is locked during callbacks. - */ - createJoint(joint: T): T | null; - /** - * Destroy a joint. This may cause the connected bodies to begin colliding. - * Warning: This function is locked during callbacks. - */ - destroyJoint(joint: Joint): void; - /** - * Take a time step. This performs collision detection, integration, and - * constraint solution. - * - * Broad-phase, narrow-phase, solve and solve time of impacts. - * - * @param timeStep Time step, this should not vary. - */ - step(timeStep: number, velocityIterations?: number, positionIterations?: number): void; - /** - * Called when two fixtures begin to touch. - * - * Implement contact callbacks to get contact information. You can use these - * results for things like sounds and game logic. You can also get contact - * results by traversing the contact lists after the time step. However, you - * might miss some contacts because continuous physics leads to sub-stepping. - * Additionally you may receive multiple callbacks for the same contact in a - * single time step. You should strive to make your callbacks efficient because - * there may be many callbacks per time step. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "begin-contact", listener: (contact: Contact) => void): World; - /** - * Called when two fixtures cease to touch. - * - * Implement contact callbacks to get contact information. You can use these - * results for things like sounds and game logic. You can also get contact - * results by traversing the contact lists after the time step. However, you - * might miss some contacts because continuous physics leads to sub-stepping. - * Additionally you may receive multiple callbacks for the same contact in a - * single time step. You should strive to make your callbacks efficient because - * there may be many callbacks per time step. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "end-contact", listener: (contact: Contact) => void): World; - /** - * This is called after a contact is updated. This allows you to inspect a - * contact before it goes to the solver. If you are careful, you can modify the - * contact manifold (e.g. disable contact). A copy of the old manifold is - * provided so that you can detect changes. Note: this is called only for awake - * bodies. Note: this is called even when the number of contact points is zero. - * Note: this is not called for sensors. Note: if you set the number of contact - * points to zero, you will not get an end-contact callback. However, you may get - * a begin-contact callback the next step. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "pre-solve", listener: (contact: Contact, oldManifold: Manifold) => void): World; - /** - * This lets you inspect a contact after the solver is finished. This is useful - * for inspecting impulses. Note: the contact manifold does not include time of - * impact impulses, which can be arbitrarily large if the sub-step is small. - * Hence the impulse is provided explicitly in a separate data structure. Note: - * this is only called for contacts that are touching, solid, and awake. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "post-solve", listener: (contact: Contact, impulse: ContactImpulse) => void): World; - /** Listener is called whenever a body is removed. */ - on(name: "remove-body", listener: (body: Body) => void): World; - /** Listener is called whenever a joint is removed implicitly or explicitly. */ - on(name: "remove-joint", listener: (joint: Joint) => void): World; - /** Listener is called whenever a fixture is removed implicitly or explicitly. */ - on(name: "remove-fixture", listener: (fixture: Fixture) => void): World; - off(name: "begin-contact", listener: (contact: Contact) => void): World; - off(name: "end-contact", listener: (contact: Contact) => void): World; - off(name: "pre-solve", listener: (contact: Contact, oldManifold: Manifold) => void): World; - off(name: "post-solve", listener: (contact: Contact, impulse: ContactImpulse) => void): World; - off(name: "remove-body", listener: (body: Body) => void): World; - off(name: "remove-joint", listener: (joint: Joint) => void): World; - off(name: "remove-fixture", listener: (fixture: Fixture) => void): World; - publish(name: string, arg1?: any, arg2?: any, arg3?: any): number; +export type WorldAABBQueryCallback = (fixture: Fixture) => boolean; +/** @hidden @deprecated Use new keyword. */ +export function World(deg: WorldDef): World; +/** @hidden @deprecated Use new keyword. */ +export function World(gravity: Vec2): World; +/** @hidden @deprecated Use new keyword. */ +export function World(): World; +/** + * The `World` class contains the bodies and joints. It manages all aspects + * of the simulation and allows for asynchronous queries (like AABB queries + * and ray-casts). Much of your interactions with Planck.js will be with a + * World object. + */ +export declare class World { + /** + * @param def World definition or gravity vector. + */ + constructor(def?: WorldDef | Vec2Value); + /** + * Get the world body list. With the returned body, use Body.getNext to get the + * next body in the world list. A null body indicates the end of the list. + * + * @return the head of the world body list. + */ + getBodyList(): Body$1 | null; + /** + * Get the world joint list. With the returned joint, use Joint.getNext to get + * the next joint in the world list. A null joint indicates the end of the list. + * + * @return the head of the world joint list. + */ + getJointList(): Joint | null; + /** + * Get the world contact list. With the returned contact, use Contact.getNext to + * get the next contact in the world list. A null contact indicates the end of + * the list. + * + * Warning: contacts are created and destroyed in the middle of a time step. + * Use ContactListener to avoid missing contacts. + * + * @return the head of the world contact list. + */ + getContactList(): Contact | null; + getBodyCount(): number; + getJointCount(): number; + /** + * Get the number of contacts (each may have 0 or more contact points). + */ + getContactCount(): number; + /** + * Change the global gravity vector. + */ + setGravity(gravity: Vec2Value): void; + /** + * Get the global gravity vector. + */ + getGravity(): Vec2; + /** + * Is the world locked (in the middle of a time step). + */ + isLocked(): boolean; + /** + * Enable/disable sleep. + */ + setAllowSleeping(flag: boolean): void; + getAllowSleeping(): boolean; + /** + * Enable/disable warm starting. For testing. + */ + setWarmStarting(flag: boolean): void; + getWarmStarting(): boolean; + /** + * Enable/disable continuous physics. For testing. + */ + setContinuousPhysics(flag: boolean): void; + getContinuousPhysics(): boolean; + /** + * Enable/disable single stepped continuous physics. For testing. + */ + setSubStepping(flag: boolean): void; + getSubStepping(): boolean; + /** + * Set flag to control automatic clearing of forces after each time step. + */ + setAutoClearForces(flag: boolean): void; + /** + * Get the flag that controls automatic clearing of forces after each time step. + */ + getAutoClearForces(): boolean; + /** + * Manually clear the force buffer on all bodies. By default, forces are cleared + * automatically after each call to step. The default behavior is modified by + * calling setAutoClearForces. The purpose of this function is to support + * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step + * under a variable frame-rate. When you perform sub-stepping you will disable + * auto clearing of forces and instead call clearForces after all sub-steps are + * complete in one pass of your game loop. + * + * See {@link World.setAutoClearForces} + */ + clearForces(): void; + /** + * Query the world for all fixtures that potentially overlap the provided AABB. + * + * @param aabb The query box. + * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query. + */ + queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void; + /** + * Ray-cast the world for all fixtures in the path of the ray. Your callback + * controls whether you get the closest point, any point, or n-points. The + * ray-cast ignores shapes that contain the starting point. + * + * @param point1 The ray starting point + * @param point2 The ray ending point + * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value. + */ + rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void; + /** + * Get the number of broad-phase proxies. + */ + getProxyCount(): number; + /** + * Get the height of broad-phase dynamic tree. + */ + getTreeHeight(): number; + /** + * Get the balance of broad-phase dynamic tree. + */ + getTreeBalance(): number; + /** + * Get the quality metric of broad-phase dynamic tree. The smaller the better. + * The minimum is 1. + */ + getTreeQuality(): number; + /** + * Shift the world origin. Useful for large worlds. The body shift formula is: + * position -= newOrigin + * + * @param newOrigin The new origin with respect to the old origin + */ + shiftOrigin(newOrigin: Vec2Value): void; + /** + * Create a rigid body given a definition. No reference to the definition is + * retained. + * + * Warning: This function is locked during callbacks. + */ + createBody(def?: BodyDef): Body$1; + createBody(position: Vec2Value, angle?: number): Body$1; + createDynamicBody(def?: BodyDef): Body$1; + createDynamicBody(position: Vec2Value, angle?: number): Body$1; + createKinematicBody(def?: BodyDef): Body$1; + createKinematicBody(position: Vec2Value, angle?: number): Body$1; + /** + * Destroy a rigid body given a definition. No reference to the definition is + * retained. + * + * Warning: This automatically deletes all associated shapes and joints. + * + * Warning: This function is locked during callbacks. + */ + destroyBody(b: Body$1): boolean; + /** + * Create a joint to constrain bodies together. No reference to the definition + * is retained. This may cause the connected bodies to cease colliding. + * + * Warning: This function is locked during callbacks. + */ + createJoint(joint: T): T | null; + /** + * Destroy a joint. This may cause the connected bodies to begin colliding. + * Warning: This function is locked during callbacks. + */ + destroyJoint(joint: Joint): void; + /** + * Take a time step. This performs collision detection, integration, and + * constraint solution. + * + * Broad-phase, narrow-phase, solve and solve time of impacts. + * + * @param timeStep Time step, this should not vary. + */ + step(timeStep: number, velocityIterations?: number, positionIterations?: number): void; + /** + * Called when two fixtures begin to touch. + * + * Implement contact callbacks to get contact information. You can use these + * results for things like sounds and game logic. You can also get contact + * results by traversing the contact lists after the time step. However, you + * might miss some contacts because continuous physics leads to sub-stepping. + * Additionally you may receive multiple callbacks for the same contact in a + * single time step. You should strive to make your callbacks efficient because + * there may be many callbacks per time step. + * + * Warning: You cannot create/destroy world entities inside these callbacks. + */ + on(name: "begin-contact", listener: (contact: Contact) => void): World; + /** + * Called when two fixtures cease to touch. + * + * Implement contact callbacks to get contact information. You can use these + * results for things like sounds and game logic. You can also get contact + * results by traversing the contact lists after the time step. However, you + * might miss some contacts because continuous physics leads to sub-stepping. + * Additionally you may receive multiple callbacks for the same contact in a + * single time step. You should strive to make your callbacks efficient because + * there may be many callbacks per time step. + * + * Warning: You cannot create/destroy world entities inside these callbacks. + */ + on(name: "end-contact", listener: (contact: Contact) => void): World; + /** + * This is called after a contact is updated. This allows you to inspect a + * contact before it goes to the solver. If you are careful, you can modify the + * contact manifold (e.g. disable contact). A copy of the old manifold is + * provided so that you can detect changes. Note: this is called only for awake + * bodies. Note: this is called even when the number of contact points is zero. + * Note: this is not called for sensors. Note: if you set the number of contact + * points to zero, you will not get an end-contact callback. However, you may get + * a begin-contact callback the next step. + * + * Warning: You cannot create/destroy world entities inside these callbacks. + */ + on(name: "pre-solve", listener: (contact: Contact, oldManifold: Manifold) => void): World; + /** + * This lets you inspect a contact after the solver is finished. This is useful + * for inspecting impulses. Note: the contact manifold does not include time of + * impact impulses, which can be arbitrarily large if the sub-step is small. + * Hence the impulse is provided explicitly in a separate data structure. Note: + * this is only called for contacts that are touching, solid, and awake. + * + * Warning: You cannot create/destroy world entities inside these callbacks. + */ + on(name: "post-solve", listener: (contact: Contact, impulse: ContactImpulse) => void): World; + /** Listener is called whenever a body is removed. */ + on(name: "remove-body", listener: (body: Body$1) => void): World; + /** Listener is called whenever a joint is removed implicitly or explicitly. */ + on(name: "remove-joint", listener: (joint: Joint) => void): World; + /** Listener is called whenever a fixture is removed implicitly or explicitly. */ + on(name: "remove-fixture", listener: (fixture: Fixture) => void): World; + off(name: "begin-contact", listener: (contact: Contact) => void): World; + off(name: "end-contact", listener: (contact: Contact) => void): World; + off(name: "pre-solve", listener: (contact: Contact, oldManifold: Manifold) => void): World; + off(name: "post-solve", listener: (contact: Contact, impulse: ContactImpulse) => void): World; + off(name: "remove-body", listener: (body: Body$1) => void): World; + off(name: "remove-joint", listener: (joint: Joint) => void): World; + off(name: "remove-fixture", listener: (fixture: Fixture) => void): World; + publish(name: string, arg1?: any, arg2?: any, arg3?: any): number; } -// dummy types -type DataType = any; -type ObjectType = any; -type ClassName = any; -type SerializedType = object[]; -type SerializerOptions = { - rootClass: ClassName; - preSerialize?: (obj: ObjectType) => DataType; - postSerialize?: (data: DataType, obj: any) => DataType; - preDeserialize?: (data: DataType) => DataType; - postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType; +export type DataType = any; +export type ObjectType = any; +export type ClassName = any; +export type SerializedType = object[]; +export type SerializerOptions = { + rootClass: ClassName; + preSerialize?: (obj: ObjectType) => DataType; + postSerialize?: (data: DataType, obj: any) => DataType; + preDeserialize?: (data: DataType) => DataType; + postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType; }; -declare class Serializer { - private options; - constructor(options: SerializerOptions); - toJson: (root: T) => SerializedType; - fromJson: (json: SerializedType) => T; - static toJson: (root: World) => SerializedType; - static fromJson: (json: SerializedType) => World; +export declare class Serializer { + private options; + constructor(options: SerializerOptions); + toJson: (root: T) => SerializedType; + fromJson: (json: SerializedType) => T; + static toJson: (root: World) => SerializedType; + static fromJson: (json: SerializedType) => World; } /** @ignore */ declare const math: any; -interface Vec3Value { - x: number; - y: number; - z: number; +/** 3D vector */ +export interface Vec3Value { + x: number; + y: number; + z: number; } -declare function Vec3(x: number, y: number, z: number): Vec3; -declare function Vec3(obj: { - x: number; - y: number; - z: number; -}): Vec3; -declare function Vec3(): Vec3; -declare class Vec3 { - x: number; - y: number; - z: number; - constructor(x: number, y: number, z: number); - constructor(obj: { - x: number; - y: number; - z: number; - }); - constructor(); - /** @hidden */ - static neo(x: number, y: number, z: number): Vec3; - static zero(): Vec3; - static clone(v: Vec3Value): Vec3; - /** @hidden */ - toString(): string; - /** Does this vector contain finite coordinates? */ - static isValid(obj: any): boolean; - static assert(o: any): void; - setZero(): Vec3; - set(x: number, y: number, z: number): Vec3; - add(w: Vec3Value): Vec3; - sub(w: Vec3Value): Vec3; - mul(m: number): Vec3; - static areEqual(v: Vec3Value, w: Vec3Value): boolean; - /** Dot product on two vectors */ - static dot(v: Vec3Value, w: Vec3Value): number; - /** Cross product on two vectors */ - static cross(v: Vec3Value, w: Vec3Value): Vec3; - static add(v: Vec3Value, w: Vec3Value): Vec3; - static sub(v: Vec3Value, w: Vec3Value): Vec3; - static mul(v: Vec3Value, m: number): Vec3; - neg(): Vec3; - static neg(v: Vec3Value): Vec3; +/** @hidden @deprecated Use new keyword. */ +export function Vec3(x: number, y: number, z: number): Vec3; +/** @hidden @deprecated Use new keyword. */ +export function Vec3(obj: Vec3Value): Vec3; +/** @hidden @deprecated Use new keyword. */ +export function Vec3(): Vec3; +/** 3D vector */ +export declare class Vec3 { + x: number; + y: number; + z: number; + constructor(x: number, y: number, z: number); + constructor(obj: Vec3Value); + constructor(); + /** @hidden */ + static neo(x: number, y: number, z: number): Vec3; + static zero(): Vec3; + static clone(v: Vec3Value): Vec3; + /** @hidden */ + toString(): string; + /** Does this vector contain finite coordinates? */ + static isValid(obj: any): boolean; + static assert(o: any): void; + setZero(): Vec3; + set(x: number, y: number, z: number): Vec3; + add(w: Vec3Value): Vec3; + sub(w: Vec3Value): Vec3; + mul(m: number): Vec3; + static areEqual(v: Vec3Value, w: Vec3Value): boolean; + /** Dot product on two vectors */ + static dot(v: Vec3Value, w: Vec3Value): number; + /** Cross product on two vectors */ + static cross(v: Vec3Value, w: Vec3Value): Vec3; + static add(v: Vec3Value, w: Vec3Value): Vec3; + static sub(v: Vec3Value, w: Vec3Value): Vec3; + static mul(v: Vec3Value, m: number): Vec3; + neg(): Vec3; + static neg(v: Vec3Value): Vec3; } /** * A 2-by-2 matrix. Stored in column-major order. */ -declare class Mat22 { - ex: Vec2; - ey: Vec2; - constructor(a: number, b: number, c: number, d: number); - constructor(a: { - x: number; - y: number; - }, b: { - x: number; - y: number; - }); - constructor(); - /** @hidden */ - toString(): string; - static isValid(obj: any): boolean; - static assert(o: any): void; - set(a: Mat22): void; - set(a: Vec2Value, b: Vec2Value): void; - set(a: number, b: number, c: number, d: number): void; - setIdentity(): void; - setZero(): void; - getInverse(): Mat22; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - solve(v: Vec2Value): Vec2; - /** - * Multiply a matrix times a vector. If a rotation matrix is provided, then this - * transforms the vector from one frame to another. - */ - static mul(mx: Mat22, my: Mat22): Mat22; - static mul(mx: Mat22, v: Vec2Value): Vec2; - static mulVec2(mx: Mat22, v: Vec2Value): Vec2; - static mulMat22(mx: Mat22, v: Mat22): Mat22; - /** - * Multiply a matrix transpose times a vector. If a rotation matrix is provided, - * then this transforms the vector from one frame to another (inverse - * transform). - */ - static mulT(mx: Mat22, my: Mat22): Mat22; - static mulT(mx: Mat22, v: Vec2Value): Vec2; - static mulTVec2(mx: Mat22, v: Vec2Value): Vec2; - static mulTMat22(mx: Mat22, v: Mat22): Mat22; - static abs(mx: Mat22): Mat22; - static add(mx1: Mat22, mx2: Mat22): Mat22; +export declare class Mat22 { + ex: Vec2; + ey: Vec2; + constructor(a: number, b: number, c: number, d: number); + constructor(a: { + x: number; + y: number; + }, b: { + x: number; + y: number; + }); + constructor(); + /** @hidden */ + toString(): string; + static isValid(obj: any): boolean; + static assert(o: any): void; + set(a: Mat22): void; + set(a: Vec2Value, b: Vec2Value): void; + set(a: number, b: number, c: number, d: number): void; + setIdentity(): void; + setZero(): void; + getInverse(): Mat22; + /** + * Solve A * x = b, where b is a column vector. This is more efficient than + * computing the inverse in one-shot cases. + */ + solve(v: Vec2Value): Vec2; + /** + * Multiply a matrix times a vector. If a rotation matrix is provided, then this + * transforms the vector from one frame to another. + */ + static mul(mx: Mat22, my: Mat22): Mat22; + static mul(mx: Mat22, v: Vec2Value): Vec2; + static mulVec2(mx: Mat22, v: Vec2Value): Vec2; + static mulMat22(mx: Mat22, v: Mat22): Mat22; + /** + * Multiply a matrix transpose times a vector. If a rotation matrix is provided, + * then this transforms the vector from one frame to another (inverse + * transform). + */ + static mulT(mx: Mat22, my: Mat22): Mat22; + static mulT(mx: Mat22, v: Vec2Value): Vec2; + static mulTVec2(mx: Mat22, v: Vec2Value): Vec2; + static mulTMat22(mx: Mat22, v: Mat22): Mat22; + static abs(mx: Mat22): Mat22; + static add(mx1: Mat22, mx2: Mat22): Mat22; } /** * A 3-by-3 matrix. Stored in column-major order. */ -declare class Mat33 { - ex: Vec3; - ey: Vec3; - ez: Vec3; - constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value); - constructor(); - /** @hidden */ - toString(): string; - static isValid(obj: any): boolean; - static assert(o: any): void; - /** - * Set this matrix to all zeros. - */ - setZero(): Mat33; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - solve33(v: Vec3Value): Vec3; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix - * equation. - */ - solve22(v: Vec2Value): Vec2; - /** - * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if - * singular. - */ - getInverse22(M: Mat33): void; - /** - * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix - * if singular. - */ - getSymInverse33(M: Mat33): void; - /** - * Multiply a matrix times a vector. - */ - static mul(a: Mat33, b: Vec2Value): Vec2; - static mul(a: Mat33, b: Vec3Value): Vec3; - static mulVec3(a: Mat33, b: Vec3Value): Vec3; - static mulVec2(a: Mat33, b: Vec2Value): Vec2; - static add(a: Mat33, b: Mat33): Mat33; +export declare class Mat33 { + ex: Vec3; + ey: Vec3; + ez: Vec3; + constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value); + constructor(); + /** @hidden */ + toString(): string; + static isValid(obj: any): boolean; + static assert(o: any): void; + /** + * Set this matrix to all zeros. + */ + setZero(): Mat33; + /** + * Solve A * x = b, where b is a column vector. This is more efficient than + * computing the inverse in one-shot cases. + */ + solve33(v: Vec3Value): Vec3; + /** + * Solve A * x = b, where b is a column vector. This is more efficient than + * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix + * equation. + */ + solve22(v: Vec2Value): Vec2; + /** + * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if + * singular. + */ + getInverse22(M: Mat33): void; + /** + * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix + * if singular. + */ + getSymInverse33(M: Mat33): void; + /** + * Multiply a matrix times a vector. + */ + static mul(a: Mat33, b: Vec2Value): Vec2; + static mul(a: Mat33, b: Vec3Value): Vec3; + static mulVec3(a: Mat33, b: Vec3Value): Vec3; + static mulVec2(a: Mat33, b: Vec2Value): Vec2; + static add(a: Mat33, b: Mat33): Mat33; } -declare function CircleShape(position: Vec2Value, radius?: number): CircleShape; -declare function CircleShape(radius?: number): CircleShape; -declare class CircleShape extends Shape { - static TYPE: "circle"; - /** @hidden */ m_type: "circle"; - /** @hidden */ m_p: Vec2; - /** @hidden */ m_radius: number; - constructor(position: Vec2Value, radius?: number); - constructor(radius?: number); - /** @hidden */ - _reset(): void; - getType(): "circle"; - getRadius(): number; - getCenter(): Vec2; - /** - * Get the number of child primitives. - */ - getChildCount(): 1; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): boolean; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density: number): void; - computeDistanceProxy(proxy: DistanceProxy): void; +/** @hidden @deprecated Use new keyword. */ +export function CircleShape(position: Vec2Value, radius?: number): CircleShape; +/** @hidden @deprecated Use new keyword. */ +export function CircleShape(radius?: number): CircleShape; +/** Circle shape. */ +export declare class CircleShape extends Shape { + static TYPE: "circle"; + /** @hidden */ m_type: "circle"; + /** @hidden */ m_p: Vec2; + /** @hidden */ m_radius: number; + constructor(position: Vec2Value, radius?: number); + constructor(radius?: number); + /** @hidden */ + _reset(): void; + getType(): "circle"; + getRadius(): number; + getCenter(): Vec2; + /** + * Get the number of child primitives. + */ + getChildCount(): 1; + /** + * Test a point for containment in this shape. This only works for convex + * shapes. + * + * @param xf The shape world transform. + * @param p A point in world coordinates. + */ + testPoint(xf: TransformValue, p: Vec2Value): boolean; + /** + * Cast a ray against a child shape. + * + * @param output The ray-cast results. + * @param input The ray-cast input parameters. + * @param xf The transform to be applied to the shape. + * @param childIndex The child shape index + */ + rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; + /** + * Given a transform, compute the associated axis aligned bounding box for a + * child shape. + * + * @param aabb Returns the axis aligned box. + * @param xf The world transform of the shape. + * @param childIndex The child shape + */ + computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; + /** + * Compute the mass properties of this shape using its dimensions and density. + * The inertia tensor is computed about the local origin. + * + * @param massData Returns the mass data for this shape. + * @param density The density in kilograms per meter squared. + */ + computeMass(massData: MassData, density: number): void; + computeDistanceProxy(proxy: DistanceProxy): void; } -declare const Circle: typeof CircleShape; +export declare const Circle: typeof CircleShape; +/** @hidden @deprecated Use new keyword. */ +export function EdgeShape(v1?: Vec2Value, v2?: Vec2Value): EdgeShape; /** * A line segment (edge) shape. These can be connected in chains or loops to * other edge shapes. The connectivity information is used to ensure correct * contact normals. */ -declare function EdgeShape(v1?: Vec2Value, v2?: Vec2Value): EdgeShape; -/** - * A line segment (edge) shape. These can be connected in chains or loops to - * other edge shapes. The connectivity information is used to ensure correct - * contact normals. - */ -declare class EdgeShape extends Shape { - static TYPE: "edge"; - /** @hidden */ m_type: "edge"; - /** @hidden */ m_radius: number; - // These are the edge vertices - /** @hidden */ m_vertex1: Vec2; - /** @hidden */ m_vertex2: Vec2; - // Optional adjacent vertices. These are used for smooth collision. - // Used by chain shape. - /** @hidden */ m_vertex0: Vec2; - /** @hidden */ m_vertex3: Vec2; - /** @hidden */ m_hasVertex0: boolean; - /** @hidden */ m_hasVertex3: boolean; - constructor(v1?: Vec2Value, v2?: Vec2Value); - /** @hidden */ - _reset(): void; - getRadius(): number; - getType(): "edge"; - /** - * Optional next vertex, used for smooth collision. - */ - setNextVertex(v?: Vec2Value): EdgeShape; - /** - * Optional next vertex, used for smooth collision. - */ - getNextVertex(): Vec2; - /** - * Optional prev vertex, used for smooth collision. - */ - setPrevVertex(v?: Vec2Value): EdgeShape; - /** - * Optional prev vertex, used for smooth collision. - */ - getPrevVertex(): Vec2; - /** - * Set this as an isolated edge. - */ - _set(v1: Vec2Value, v2: Vec2Value): EdgeShape; - /** - * Get the number of child primitives. - */ - getChildCount(): 1; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): false; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density?: number): void; - computeDistanceProxy(proxy: DistanceProxy): void; +export declare class EdgeShape extends Shape { + static TYPE: "edge"; + /** @hidden */ m_type: "edge"; + /** @hidden */ m_radius: number; + /** @hidden */ m_vertex1: Vec2; + /** @hidden */ m_vertex2: Vec2; + /** @hidden */ m_vertex0: Vec2; + /** @hidden */ m_vertex3: Vec2; + /** @hidden */ m_hasVertex0: boolean; + /** @hidden */ m_hasVertex3: boolean; + constructor(v1?: Vec2Value, v2?: Vec2Value); + /** @hidden */ + _reset(): void; + getRadius(): number; + getType(): "edge"; + /** + * Optional next vertex, used for smooth collision. + */ + setNextVertex(v?: Vec2Value): EdgeShape; + /** + * Optional next vertex, used for smooth collision. + */ + getNextVertex(): Vec2; + /** + * Optional prev vertex, used for smooth collision. + */ + setPrevVertex(v?: Vec2Value): EdgeShape; + /** + * Optional prev vertex, used for smooth collision. + */ + getPrevVertex(): Vec2; + /** + * Set this as an isolated edge. + */ + _set(v1: Vec2Value, v2: Vec2Value): EdgeShape; + /** + * Get the number of child primitives. + */ + getChildCount(): 1; + /** + * Test a point for containment in this shape. This only works for convex + * shapes. + * + * @param xf The shape world transform. + * @param p A point in world coordinates. + */ + testPoint(xf: TransformValue, p: Vec2Value): false; + /** + * Cast a ray against a child shape. + * + * @param output The ray-cast results. + * @param input The ray-cast input parameters. + * @param xf The transform to be applied to the shape. + * @param childIndex The child shape index + */ + rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; + /** + * Given a transform, compute the associated axis aligned bounding box for a + * child shape. + * + * @param aabb Returns the axis aligned box. + * @param xf The world transform of the shape. + * @param childIndex The child shape + */ + computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; + /** + * Compute the mass properties of this shape using its dimensions and density. + * The inertia tensor is computed about the local origin. + * + * @param massData Returns the mass data for this shape. + * @param density The density in kilograms per meter squared. + */ + computeMass(massData: MassData, density?: number): void; + computeDistanceProxy(proxy: DistanceProxy): void; } -declare const Edge: typeof EdgeShape; +export declare const Edge: typeof EdgeShape; +/** @hidden @deprecated Use new keyword. */ +export function PolygonShape(vertices?: Vec2Value[]): PolygonShape; /** * A convex polygon. It is assumed that the interior of the polygon is to the * left of each edge. Polygons have a maximum number of vertices equal to * Settings.maxPolygonVertices. In most cases you should not need many vertices * for a convex polygon. extends Shape */ -declare function PolygonShape(vertices?: Vec2Value[]): PolygonShape; -/** - * A convex polygon. It is assumed that the interior of the polygon is to the - * left of each edge. Polygons have a maximum number of vertices equal to - * Settings.maxPolygonVertices. In most cases you should not need many vertices - * for a convex polygon. extends Shape - */ -declare class PolygonShape extends Shape { - static TYPE: "polygon"; - /** @hidden */ m_type: "polygon"; - /** @hidden */ m_centroid: Vec2; - /** @hidden */ m_vertices: Vec2[]; // [Settings.maxPolygonVertices] - /** @hidden */ m_normals: Vec2[]; // [Settings.maxPolygonVertices] - /** @hidden */ m_count: number; - /** @hidden */ m_radius: number; - constructor(vertices?: Vec2Value[]); - getType(): "polygon"; - getRadius(): number; - /** - * Get the number of child primitives. - */ - getChildCount(): 1; - /** @hidden */ - _reset(): void; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): boolean; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density: number): void; - /** - * Validate convexity. This is a very time consuming operation. - * @returns true if valid - */ - validate(): boolean; - computeDistanceProxy(proxy: DistanceProxy): void; +export declare class PolygonShape extends Shape { + static TYPE: "polygon"; + /** @hidden */ m_type: "polygon"; + /** @hidden */ m_centroid: Vec2; + /** @hidden */ m_vertices: Vec2[]; + /** @hidden */ m_normals: Vec2[]; + /** @hidden */ m_count: number; + /** @hidden */ m_radius: number; + constructor(vertices?: Vec2Value[]); + getType(): "polygon"; + getRadius(): number; + /** + * Get the number of child primitives. + */ + getChildCount(): 1; + /** @hidden */ + _reset(): void; + /** + * Test a point for containment in this shape. This only works for convex + * shapes. + * + * @param xf The shape world transform. + * @param p A point in world coordinates. + */ + testPoint(xf: TransformValue, p: Vec2Value): boolean; + /** + * Cast a ray against a child shape. + * + * @param output The ray-cast results. + * @param input The ray-cast input parameters. + * @param xf The transform to be applied to the shape. + * @param childIndex The child shape index + */ + rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; + /** + * Given a transform, compute the associated axis aligned bounding box for a + * child shape. + * + * @param aabb Returns the axis aligned box. + * @param xf The world transform of the shape. + * @param childIndex The child shape + */ + computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; + /** + * Compute the mass properties of this shape using its dimensions and density. + * The inertia tensor is computed about the local origin. + * + * @param massData Returns the mass data for this shape. + * @param density The density in kilograms per meter squared. + */ + computeMass(massData: MassData, density: number): void; + /** + * Validate convexity. This is a very time consuming operation. + * @returns true if valid + */ + validate(): boolean; + computeDistanceProxy(proxy: DistanceProxy): void; } -declare const Polygon: typeof PolygonShape; -/** - * A chain shape is a free form sequence of line segments. The chain has - * two-sided collision, so you can use inside and outside collision. Therefore, - * you may use any winding order. Connectivity information is used to create - * smooth collisions. - * - * WARNING: The chain will not collide properly if there are self-intersections. - */ -declare function ChainShape(vertices?: Vec2Value[], loop?: boolean): ChainShape; +export declare const Polygon: typeof PolygonShape; +/** @hidden @deprecated Use new keyword. */ +export function ChainShape(vertices?: Vec2Value[], loop?: boolean): ChainShape; /** * A chain shape is a free form sequence of line segments. The chain has * two-sided collision, so you can use inside and outside collision. Therefore, @@ -2536,111 +2543,101 @@ declare function ChainShape(vertices?: Vec2Value[], loop?: boolean): ChainShape; * * WARNING: The chain will not collide properly if there are self-intersections. */ -declare class ChainShape extends Shape { - static TYPE: "chain"; - /** @hidden */ m_type: "chain"; - /** @hidden */ m_radius: number; - /** @hidden */ m_vertices: Vec2[]; - /** @hidden */ m_count: number; - /** @hidden */ m_prevVertex: Vec2 | null; - /** @hidden */ m_nextVertex: Vec2 | null; - /** @hidden */ m_hasPrevVertex: boolean; - /** @hidden */ m_hasNextVertex: boolean; - /** @hidden */ m_isLoop: boolean; - constructor(vertices?: Vec2Value[], loop?: boolean); - // clear() { - // this.m_vertices.length = 0; - // this.m_count = 0; - // } - getType(): "chain"; - getRadius(): number; - /** @hidden */ - _reset(): void; - /** - * Establish connectivity to a vertex that precedes the first vertex. Don't call - * this for loops. - */ - setPrevVertex(prevVertex: Vec2): void; - getPrevVertex(): Vec2; - /** - * Establish connectivity to a vertex that follows the last vertex. Don't call - * this for loops. - */ - setNextVertex(nextVertex: Vec2): void; - getNextVertex(): Vec2; - /** - * Get the number of child primitives. - */ - getChildCount(): number; - // Get a child edge. - getChildEdge(edge: EdgeShape, childIndex: number): void; - getVertex(index: number): Vec2; - isLoop(): boolean; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * This always return false. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): false; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * Chains have zero mass. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density?: number): void; - computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void; +export declare class ChainShape extends Shape { + static TYPE: "chain"; + /** @hidden */ m_type: "chain"; + /** @hidden */ m_radius: number; + /** @hidden */ m_vertices: Vec2[]; + /** @hidden */ m_count: number; + /** @hidden */ m_prevVertex: Vec2 | null; + /** @hidden */ m_nextVertex: Vec2 | null; + /** @hidden */ m_hasPrevVertex: boolean; + /** @hidden */ m_hasNextVertex: boolean; + /** @hidden */ m_isLoop: boolean; + constructor(vertices?: Vec2Value[], loop?: boolean); + getType(): "chain"; + getRadius(): number; + /** @hidden */ + _reset(): void; + /** + * Establish connectivity to a vertex that precedes the first vertex. Don't call + * this for loops. + */ + setPrevVertex(prevVertex: Vec2): void; + getPrevVertex(): Vec2; + /** + * Establish connectivity to a vertex that follows the last vertex. Don't call + * this for loops. + */ + setNextVertex(nextVertex: Vec2): void; + getNextVertex(): Vec2; + /** + * Get the number of child primitives. + */ + getChildCount(): number; + getChildEdge(edge: EdgeShape, childIndex: number): void; + getVertex(index: number): Vec2; + isLoop(): boolean; + /** + * Test a point for containment in this shape. This only works for convex + * shapes. + * + * This always return false. + * + * @param xf The shape world transform. + * @param p A point in world coordinates. + */ + testPoint(xf: TransformValue, p: Vec2Value): false; + /** + * Cast a ray against a child shape. + * + * @param output The ray-cast results. + * @param input The ray-cast input parameters. + * @param xf The transform to be applied to the shape. + * @param childIndex The child shape index + */ + rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; + /** + * Given a transform, compute the associated axis aligned bounding box for a + * child shape. + * + * @param aabb Returns the axis aligned box. + * @param xf The world transform of the shape. + * @param childIndex The child shape + */ + computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; + /** + * Compute the mass properties of this shape using its dimensions and density. + * The inertia tensor is computed about the local origin. + * + * Chains have zero mass. + * + * @param massData Returns the mass data for this shape. + * @param density The density in kilograms per meter squared. + */ + computeMass(massData: MassData, density?: number): void; + computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void; } -declare const Chain: typeof ChainShape; +export declare const Chain: typeof ChainShape; +/** @hidden @deprecated Use new keyword. */ +export function BoxShape(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number): BoxShape; /** * A rectangle polygon which extend PolygonShape. */ -declare function BoxShape(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number): BoxShape; -/** - * A rectangle polygon which extend PolygonShape. - */ -declare class BoxShape extends PolygonShape { - // note that box is serialized/deserialized as polygon - static TYPE: "polygon"; - /** - * - * @param halfWidth - * @param halfHeight - * @param center coordinate of the center of the box relative to the body - * @param angle angle of the box relative to the body - */ - constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number); +export declare class BoxShape extends PolygonShape { + static TYPE: "polygon"; + /** + * + * @param halfWidth + * @param halfHeight + * @param center coordinate of the center of the box relative to the body + * @param angle angle of the box relative to the body + */ + constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number); } -declare const Box: typeof BoxShape; -declare const CollideCircles: (manifold: Manifold, circleA: CircleShape, xfA: Transform, circleB: CircleShape, xfB: Transform) => void; -// Compute contact points for edge versus circle. -// This accounts for edge connectivity. -declare const CollideEdgeCircle: (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue) => void; +export declare const Box: typeof BoxShape; +export declare const CollideCircles: (manifold: Manifold, circleA: CircleShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue) => void; +export declare const CollideEdgeCircle: (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue) => void; /** * * Find edge normal of max separation on A - return if separating axis is found
@@ -2651,13 +2648,13 @@ declare const CollideEdgeCircle: (manifold: Manifold, edgeA: EdgeShape, xfA: Tra * * The normal points from 1 to 2 */ -declare const CollidePolygons: (manifold: Manifold, polyA: PolygonShape, xfA: TransformValue, polyB: PolygonShape, xfB: TransformValue) => void; -declare const CollidePolygonCircle: (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue) => void; +export declare const CollidePolygons: (manifold: Manifold, polyA: PolygonShape, xfA: TransformValue, polyB: PolygonShape, xfB: TransformValue) => void; +export declare const CollidePolygonCircle: (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue) => void; /** * This function collides and edge and a polygon, taking into account edge * adjacency. */ -declare const CollideEdgePolygon: (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue) => void; +export declare const CollideEdgePolygon: (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue) => void; /** * Distance joint definition. This requires defining an anchor point on both * bodies and the non-zero length of the distance joint. The definition uses @@ -2665,19 +2662,19 @@ declare const CollideEdgePolygon: (manifold: Manifold, edgeA: EdgeShape, xfA: Tr * constraint slightly. This helps when saving and loading a game. Warning: Do * not use a zero or short length. */ -interface DistanceJointOpt extends JointOpt { - /** - * The mass-spring-damper frequency in Hertz. A value of 0 disables softness. - */ - frequencyHz?: number; - /** - * The damping ratio. 0 = no damping, 1 = critical damping. - */ - dampingRatio?: number; - /** - * Distance length. - */ - length?: number; +export interface DistanceJointOpt extends JointOpt { + /** + * The mass-spring-damper frequency in Hertz. A value of 0 disables softness. + */ + frequencyHz?: number; + /** + * The damping ratio. 0 = no damping, 1 = critical damping. + */ + dampingRatio?: number; + /** + * Distance length. + */ + length?: number; } /** * Distance joint definition. This requires defining an anchor point on both @@ -2686,182 +2683,170 @@ interface DistanceJointOpt extends JointOpt { * constraint slightly. This helps when saving and loading a game. Warning: Do * not use a zero or short length. */ -interface DistanceJointDef extends JointDef, DistanceJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; +export interface DistanceJointDef extends JointDef, DistanceJointOpt { + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; } +/** @hidden @deprecated Use new keyword. */ +export function DistanceJoint(def: DistanceJointDef): DistanceJoint; +/** @hidden @deprecated Use new keyword. */ +export function DistanceJoint(def: DistanceJointOpt, bodyA: Body$1, bodyB: Body$1, anchorA: Vec2Value, anchorB: Vec2Value): DistanceJoint; /** * A distance joint constrains two points on two bodies to remain at a fixed * distance from each other. You can view this as a massless, rigid rod. */ -declare function DistanceJoint(def: DistanceJointDef): DistanceJoint; -/** - * A distance joint constrains two points on two bodies to remain at a fixed - * distance from each other. You can view this as a massless, rigid rod. - */ -declare function DistanceJoint(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value): DistanceJoint; -/** - * A distance joint constrains two points on two bodies to remain at a fixed - * distance from each other. You can view this as a massless, rigid rod. - */ -declare class DistanceJoint extends Joint { - static TYPE: "distance-joint"; - /** - * @param def DistanceJoint definition. - */ - constructor(def: DistanceJointDef); - /** - * @param anchorA Anchor A in global coordination. - * @param anchorB Anchor B in global coordination. - */ - constructor(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Set the natural length. Manipulating the length can lead to non-physical - * behavior when the frequency is zero. - */ - setLength(length: number): void; - /** - * Get the natural length. - */ - getLength(): number; - setFrequency(hz: number): void; - getFrequency(): number; - setDampingRatio(ratio: number): void; - getDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class DistanceJoint extends Joint { + static TYPE: "distance-joint"; + /** + * @param def DistanceJoint definition. + */ + constructor(def: DistanceJointDef); + /** + * @param anchorA Anchor A in global coordination. + * @param anchorB Anchor B in global coordination. + */ + constructor(def: DistanceJointOpt, bodyA: Body$1, bodyB: Body$1, anchorA: Vec2Value, anchorB: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * The local anchor point relative to bodyA's origin. + */ + getLocalAnchorA(): Vec2; + /** + * The local anchor point relative to bodyB's origin. + */ + getLocalAnchorB(): Vec2; + /** + * Set the natural length. Manipulating the length can lead to non-physical + * behavior when the frequency is zero. + */ + setLength(length: number): void; + /** + * Get the natural length. + */ + getLength(): number; + setFrequency(hz: number): void; + getFrequency(): number; + setDampingRatio(ratio: number): void; + getDampingRatio(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Friction joint definition. */ -interface FrictionJointOpt extends JointOpt { - /** - * The maximum friction force in N. - */ - maxForce?: number; - /** - * The maximum friction torque in N-m. - */ - maxTorque?: number; +export interface FrictionJointOpt extends JointOpt { + /** + * The maximum friction force in N. + */ + maxForce?: number; + /** + * The maximum friction torque in N-m. + */ + maxTorque?: number; } /** * Friction joint definition. */ -interface FrictionJointDef extends JointDef, FrictionJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; +export interface FrictionJointDef extends JointDef, FrictionJointOpt { + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; } +/** @hidden @deprecated Use new keyword. */ +export function FrictionJoint(def: FrictionJointDef): FrictionJoint; +/** @hidden @deprecated Use new keyword. */ +export function FrictionJoint(def: FrictionJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value): FrictionJoint; /** * Friction joint. This is used for top-down friction. It provides 2D * translational friction and angular friction. */ -declare function FrictionJoint(def: FrictionJointDef): FrictionJoint; -/** - * Friction joint. This is used for top-down friction. It provides 2D - * translational friction and angular friction. - */ -declare function FrictionJoint(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): FrictionJoint; -/** - * Friction joint. This is used for top-down friction. It provides 2D - * translational friction and angular friction. - */ -declare class FrictionJoint extends Joint { - static TYPE: "friction-joint"; - constructor(def: FrictionJointDef); - /** - * @param anchor Anchor in global coordination. - */ - constructor(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Set the maximum friction force in N. - */ - setMaxForce(force: number): void; - /** - * Get the maximum friction force in N. - */ - getMaxForce(): number; - /** - * Set the maximum friction torque in N*m. - */ - setMaxTorque(torque: number): void; - /** - * Get the maximum friction torque in N*m. - */ - getMaxTorque(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class FrictionJoint extends Joint { + static TYPE: "friction-joint"; + constructor(def: FrictionJointDef); + /** + * @param anchor Anchor in global coordination. + */ + constructor(def: FrictionJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * The local anchor point relative to bodyA's origin. + */ + getLocalAnchorA(): Vec2; + /** + * The local anchor point relative to bodyB's origin. + */ + getLocalAnchorB(): Vec2; + /** + * Set the maximum friction force in N. + */ + setMaxForce(force: number): void; + /** + * Get the maximum friction force in N. + */ + getMaxForce(): number; + /** + * Set the maximum friction torque in N*m. + */ + setMaxTorque(torque: number): void; + /** + * Get the maximum friction torque in N*m. + */ + getMaxTorque(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Revolute joint definition. This requires defining an anchor point where the @@ -2875,32 +2860,32 @@ declare class FrictionJoint extends Joint { * be. 2. if you add/remove shapes from a body and recompute the mass, the * joints will be broken. */ -interface RevoluteJointOpt extends JointOpt { - /** - * The lower angle for the joint limit (radians). - */ - lowerAngle?: number; - /** - * The upper angle for the joint limit (radians). - */ - upperAngle?: number; - /** - * The maximum motor torque used to achieve the desired motor speed. Usually - * in N-m. - */ - maxMotorTorque?: number; - /** - * The desired motor speed. Usually in radians per second. - */ - motorSpeed?: number; - /** - * A flag to enable joint limits. - */ - enableLimit?: boolean; - /** - * A flag to enable the joint motor. - */ - enableMotor?: boolean; +export interface RevoluteJointOpt extends JointOpt { + /** + * The lower angle for the joint limit (radians). + */ + lowerAngle?: number; + /** + * The upper angle for the joint limit (radians). + */ + upperAngle?: number; + /** + * The maximum motor torque used to achieve the desired motor speed. Usually + * in N-m. + */ + maxMotorTorque?: number; + /** + * The desired motor speed. Usually in radians per second. + */ + motorSpeed?: number; + /** + * A flag to enable joint limits. + */ + enableLimit?: boolean; + /** + * A flag to enable the joint motor. + */ + enableMotor?: boolean; } /** * Revolute joint definition. This requires defining an anchor point where the @@ -2914,20 +2899,24 @@ interface RevoluteJointOpt extends JointOpt { * be. 2. if you add/remove shapes from a body and recompute the mass, the * joints will be broken. */ -interface RevoluteJointDef extends JointDef, RevoluteJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The bodyB angle minus bodyA angle in the reference state (radians). - */ - referenceAngle: number; +export interface RevoluteJointDef extends JointDef, RevoluteJointOpt { + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; + /** + * The bodyB angle minus bodyA angle in the reference state (radians). + */ + referenceAngle: number; } +/** @hidden @deprecated Use new keyword. */ +export function RevoluteJoint(def: RevoluteJointDef): RevoluteJoint; +/** @hidden @deprecated Use new keyword. */ +export function RevoluteJoint(def: RevoluteJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value): RevoluteJoint; /** * A revolute joint constrains two bodies to share a common point while they are * free to rotate about the point. The relative rotation about the shared point @@ -2936,118 +2925,100 @@ interface RevoluteJointDef extends JointDef, RevoluteJointOpt { * relative rotation about the shared point. A maximum motor torque is provided * so that infinite forces are not generated. */ -declare function RevoluteJoint(def: RevoluteJointDef): RevoluteJoint; -/** - * A revolute joint constrains two bodies to share a common point while they are - * free to rotate about the point. The relative rotation about the shared point - * is the joint angle. You can limit the relative rotation with a joint limit - * that specifies a lower and upper angle. You can use a motor to drive the - * relative rotation about the shared point. A maximum motor torque is provided - * so that infinite forces are not generated. - */ -declare function RevoluteJoint(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): RevoluteJoint; -/** - * A revolute joint constrains two bodies to share a common point while they are - * free to rotate about the point. The relative rotation about the shared point - * is the joint angle. You can limit the relative rotation with a joint limit - * that specifies a lower and upper angle. You can use a motor to drive the - * relative rotation about the shared point. A maximum motor torque is provided - * so that infinite forces are not generated. - */ -declare class RevoluteJoint extends Joint { - static TYPE: "revolute-joint"; - constructor(def: RevoluteJointDef); - constructor(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Get the reference angle. - */ - getReferenceAngle(): number; - /** - * Get the current joint angle in radians. - */ - getJointAngle(): number; - /** - * Get the current joint angle speed in radians per second. - */ - getJointSpeed(): number; - /** - * Is the joint motor enabled? - */ - isMotorEnabled(): boolean; - /** - * Enable/disable the joint motor. - */ - enableMotor(flag: boolean): void; - /** - * Get the current motor torque given the inverse time step. Unit is N*m. - */ - getMotorTorque(inv_dt: number): number; - /** - * Set the motor speed in radians per second. - */ - setMotorSpeed(speed: number): void; - /** - * Get the motor speed in radians per second. - */ - getMotorSpeed(): number; - /** - * Set the maximum motor torque, usually in N-m. - */ - setMaxMotorTorque(torque: number): void; - getMaxMotorTorque(): number; - /** - * Is the joint limit enabled? - */ - isLimitEnabled(): boolean; - /** - * Enable/disable the joint limit. - */ - enableLimit(flag: boolean): void; - /** - * Get the lower joint limit in radians. - */ - getLowerLimit(): number; - /** - * Get the upper joint limit in radians. - */ - getUpperLimit(): number; - /** - * Set the joint limits in radians. - */ - setLimits(lower: number, upper: number): void; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force given the inverse time step. Unit is N. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque due to the joint limit given the inverse time step. - * Unit is N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class RevoluteJoint extends Joint { + static TYPE: "revolute-joint"; + constructor(def: RevoluteJointDef); + constructor(def: RevoluteJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * The local anchor point relative to bodyA's origin. + */ + getLocalAnchorA(): Vec2; + /** + * The local anchor point relative to bodyB's origin. + */ + getLocalAnchorB(): Vec2; + /** + * Get the reference angle. + */ + getReferenceAngle(): number; + /** + * Get the current joint angle in radians. + */ + getJointAngle(): number; + /** + * Get the current joint angle speed in radians per second. + */ + getJointSpeed(): number; + /** + * Is the joint motor enabled? + */ + isMotorEnabled(): boolean; + /** + * Enable/disable the joint motor. + */ + enableMotor(flag: boolean): void; + /** + * Get the current motor torque given the inverse time step. Unit is N*m. + */ + getMotorTorque(inv_dt: number): number; + /** + * Set the motor speed in radians per second. + */ + setMotorSpeed(speed: number): void; + /** + * Get the motor speed in radians per second. + */ + getMotorSpeed(): number; + /** + * Set the maximum motor torque, usually in N-m. + */ + setMaxMotorTorque(torque: number): void; + getMaxMotorTorque(): number; + /** + * Is the joint limit enabled? + */ + isLimitEnabled(): boolean; + /** + * Enable/disable the joint limit. + */ + enableLimit(flag: boolean): void; + /** + * Get the lower joint limit in radians. + */ + getLowerLimit(): number; + /** + * Get the upper joint limit in radians. + */ + getUpperLimit(): number; + /** + * Set the joint limits in radians. + */ + setLimits(lower: number, upper: number): void; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force given the inverse time step. Unit is N. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque due to the joint limit given the inverse time step. + * Unit is N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Prismatic joint definition. This requires defining a line of motion using an @@ -3057,31 +3028,31 @@ declare class RevoluteJoint extends Joint { * space. Using local anchors and a local axis helps when saving and loading a * game. */ -interface PrismaticJointOpt extends JointOpt { - /** - * Enable/disable the joint limit. - */ - enableLimit?: boolean; - /** - * The lower translation limit, usually in meters. - */ - lowerTranslation?: number; - /** - * The upper translation limit, usually in meters. - */ - upperTranslation?: number; - /** - * Enable/disable the joint motor. - */ - enableMotor?: boolean; - /** - * The maximum motor torque, usually in N-m. - */ - maxMotorForce?: number; - /** - * The desired motor speed in radians per second. - */ - motorSpeed?: number; +export interface PrismaticJointOpt extends JointOpt { + /** + * Enable/disable the joint limit. + */ + enableLimit?: boolean; + /** + * The lower translation limit, usually in meters. + */ + lowerTranslation?: number; + /** + * The upper translation limit, usually in meters. + */ + upperTranslation?: number; + /** + * Enable/disable the joint motor. + */ + enableMotor?: boolean; + /** + * The maximum motor torque, usually in N-m. + */ + maxMotorForce?: number; + /** + * The desired motor speed in radians per second. + */ + motorSpeed?: number; } /** * Prismatic joint definition. This requires defining a line of motion using an @@ -3091,165 +3062,159 @@ interface PrismaticJointOpt extends JointOpt { * space. Using local anchors and a local axis helps when saving and loading a * game. */ -interface PrismaticJointDef extends JointDef, PrismaticJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The local translation unit axis in bodyA. - */ - localAxisA: Vec2Value; - /** - * referenceAngle The constrained angle between the bodies: - * bodyB_angle - bodyA_angle. - */ - referenceAngle: number; +export interface PrismaticJointDef extends JointDef, PrismaticJointOpt { + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; + /** + * The local translation unit axis in bodyA. + */ + localAxisA: Vec2Value; + /** + * referenceAngle The constrained angle between the bodies: + * bodyB_angle - bodyA_angle. + */ + referenceAngle: number; } +/** @hidden @deprecated Use new keyword. */ +export function PrismaticJoint(def: PrismaticJointDef): PrismaticJoint; +/** @hidden @deprecated Use new keyword. */ +export function PrismaticJoint(def: PrismaticJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value, axis: Vec2Value): PrismaticJoint; /** * A prismatic joint. This joint provides one degree of freedom: translation * along an axis fixed in bodyA. Relative rotation is prevented. You can use a * joint limit to restrict the range of motion and a joint motor to drive the * motion or to model joint friction. */ -declare function PrismaticJoint(def: PrismaticJointDef): PrismaticJoint; -/** - * A prismatic joint. This joint provides one degree of freedom: translation - * along an axis fixed in bodyA. Relative rotation is prevented. You can use a - * joint limit to restrict the range of motion and a joint motor to drive the - * motion or to model joint friction. - */ -declare function PrismaticJoint(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value): PrismaticJoint; -/** - * A prismatic joint. This joint provides one degree of freedom: translation - * along an axis fixed in bodyA. Relative rotation is prevented. You can use a - * joint limit to restrict the range of motion and a joint motor to drive the - * motion or to model joint friction. - */ -declare class PrismaticJoint extends Joint { - static TYPE: "prismatic-joint"; - constructor(def: PrismaticJointDef); - constructor(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * The local joint axis relative to bodyA. - */ - getLocalAxisA(): Vec2; - /** - * Get the reference angle. - */ - getReferenceAngle(): number; - /** - * Get the current joint translation, usually in meters. - */ - getJointTranslation(): number; - /** - * Get the current joint translation speed, usually in meters per second. - */ - getJointSpeed(): number; - /** - * Is the joint limit enabled? - */ - isLimitEnabled(): boolean; - /** - * Enable/disable the joint limit. - */ - enableLimit(flag: boolean): void; - /** - * Get the lower joint limit, usually in meters. - */ - getLowerLimit(): number; - /** - * Get the upper joint limit, usually in meters. - */ - getUpperLimit(): number; - /** - * Set the joint limits, usually in meters. - */ - setLimits(lower: number, upper: number): void; - /** - * Is the joint motor enabled? - */ - isMotorEnabled(): boolean; - /** - * Enable/disable the joint motor. - */ - enableMotor(flag: boolean): void; - /** - * Set the motor speed, usually in meters per second. - */ - setMotorSpeed(speed: number): void; - /** - * Set the maximum motor force, usually in N. - */ - setMaxMotorForce(force: number): void; - getMaxMotorForce(): number; - /** - * Get the motor speed, usually in meters per second. - */ - getMotorSpeed(): number; - /** - * Get the current motor force given the inverse time step, usually in N. - */ - getMotorForce(inv_dt: number): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class PrismaticJoint extends Joint { + static TYPE: "prismatic-joint"; + constructor(def: PrismaticJointDef); + constructor(def: PrismaticJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value, axis: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * The local anchor point relative to bodyA's origin. + */ + getLocalAnchorA(): Vec2; + /** + * The local anchor point relative to bodyB's origin. + */ + getLocalAnchorB(): Vec2; + /** + * The local joint axis relative to bodyA. + */ + getLocalAxisA(): Vec2; + /** + * Get the reference angle. + */ + getReferenceAngle(): number; + /** + * Get the current joint translation, usually in meters. + */ + getJointTranslation(): number; + /** + * Get the current joint translation speed, usually in meters per second. + */ + getJointSpeed(): number; + /** + * Is the joint limit enabled? + */ + isLimitEnabled(): boolean; + /** + * Enable/disable the joint limit. + */ + enableLimit(flag: boolean): void; + /** + * Get the lower joint limit, usually in meters. + */ + getLowerLimit(): number; + /** + * Get the upper joint limit, usually in meters. + */ + getUpperLimit(): number; + /** + * Set the joint limits, usually in meters. + */ + setLimits(lower: number, upper: number): void; + /** + * Is the joint motor enabled? + */ + isMotorEnabled(): boolean; + /** + * Enable/disable the joint motor. + */ + enableMotor(flag: boolean): void; + /** + * Set the motor speed, usually in meters per second. + */ + setMotorSpeed(speed: number): void; + /** + * Set the maximum motor force, usually in N. + */ + setMaxMotorForce(force: number): void; + getMaxMotorForce(): number; + /** + * Get the motor speed, usually in meters per second. + */ + getMotorSpeed(): number; + /** + * Get the current motor force given the inverse time step, usually in N. + */ + getMotorForce(inv_dt: number): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Gear joint definition. */ -interface GearJointOpt extends JointOpt { - /** - * The gear ratio. See {@link GearJoint} for explanation. - */ - ratio?: number; +export interface GearJointOpt extends JointOpt { + /** + * The gear ratio. See {@link GearJoint} for explanation. + */ + ratio?: number; } /** * Gear joint definition. */ -interface GearJointDef extends JointDef, GearJointOpt { - /** - * The first revolute/prismatic joint attached to the gear joint. - */ - joint1: RevoluteJoint | PrismaticJoint; - /** - * The second prismatic/revolute joint attached to the gear joint. - */ - joint2: RevoluteJoint | PrismaticJoint; +export interface GearJointDef extends JointDef, GearJointOpt { + /** + * The first revolute/prismatic joint attached to the gear joint. + */ + joint1: RevoluteJoint | PrismaticJoint; + /** + * The second prismatic/revolute joint attached to the gear joint. + */ + joint2: RevoluteJoint | PrismaticJoint; } +/** @hidden @deprecated Use new keyword. */ +export function GearJoint(def: GearJointDef): GearJoint; +/** @hidden @deprecated Use new keyword. */ +export function GearJoint(def: GearJointOpt, bodyA: Body$1, bodyB: Body$1, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number): GearJoint; /** * A gear joint is used to connect two joints together. Either joint can be a * revolute or prismatic joint. You specify a gear ratio to bind the motions @@ -3263,221 +3228,189 @@ interface GearJointDef extends JointDef, GearJointOpt { * This definition requires two existing revolute or prismatic joints (any * combination will work). */ -declare function GearJoint(def: GearJointDef): GearJoint; -/** - * A gear joint is used to connect two joints together. Either joint can be a - * revolute or prismatic joint. You specify a gear ratio to bind the motions - * together: coordinate1 + ratio * coordinate2 = constant - * - * The ratio can be negative or positive. If one joint is a revolute joint and - * the other joint is a prismatic joint, then the ratio will have units of - * length or units of 1/length. Warning: You have to manually destroy the gear - * joint if joint1 or joint2 is destroyed. - * - * This definition requires two existing revolute or prismatic joints (any - * combination will work). - */ -declare function GearJoint(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number): GearJoint; -/** - * A gear joint is used to connect two joints together. Either joint can be a - * revolute or prismatic joint. You specify a gear ratio to bind the motions - * together: coordinate1 + ratio * coordinate2 = constant - * - * The ratio can be negative or positive. If one joint is a revolute joint and - * the other joint is a prismatic joint, then the ratio will have units of - * length or units of 1/length. Warning: You have to manually destroy the gear - * joint if joint1 or joint2 is destroyed. - * - * This definition requires two existing revolute or prismatic joints (any - * combination will work). - */ -declare class GearJoint extends Joint { - static TYPE: "gear-joint"; - constructor(def: GearJointDef); - constructor(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number); - /** @hidden */ - _reset(def: Partial): void; - /** - * Get the first joint. - */ - getJoint1(): Joint; - /** - * Get the second joint. - */ - getJoint2(): Joint; - /** - * Set the gear ratio. - */ - setRatio(ratio: number): void; - /** - * Get the gear ratio. - */ - getRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class GearJoint extends Joint { + static TYPE: "gear-joint"; + constructor(def: GearJointDef); + constructor(def: GearJointOpt, bodyA: Body$1, bodyB: Body$1, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number); + /** @hidden */ + _reset(def: Partial): void; + /** + * Get the first joint. + */ + getJoint1(): Joint; + /** + * Get the second joint. + */ + getJoint2(): Joint; + /** + * Set the gear ratio. + */ + setRatio(ratio: number): void; + /** + * Get the gear ratio. + */ + getRatio(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Motor joint definition. */ -interface MotorJointOpt extends JointOpt { - /** - * The bodyB angle minus bodyA angle in radians. - */ - angularOffset?: number; - /** - * The maximum motor force in N. - */ - maxForce?: number; - /** - * The maximum motor torque in N-m. - */ - maxTorque?: number; - /** - * Position correction factor in the range [0,1]. - */ - correctionFactor?: number; - /** - * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters. - */ - linearOffset?: Vec2Value; +export interface MotorJointOpt extends JointOpt { + /** + * The bodyB angle minus bodyA angle in radians. + */ + angularOffset?: number; + /** + * The maximum motor force in N. + */ + maxForce?: number; + /** + * The maximum motor torque in N-m. + */ + maxTorque?: number; + /** + * Position correction factor in the range [0,1]. + */ + correctionFactor?: number; + /** + * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters. + */ + linearOffset?: Vec2Value; } /** * Motor joint definition. */ -interface MotorJointDef extends JointDef, MotorJointOpt { +export interface MotorJointDef extends JointDef, MotorJointOpt { } +/** @hidden @deprecated Use new keyword. */ +export function MotorJoint(def: MotorJointDef): MotorJoint; +/** @hidden @deprecated Use new keyword. */ +export function MotorJoint(def: MotorJointOpt, bodyA: Body$1, bodyB: Body$1): MotorJoint; /** * A motor joint is used to control the relative motion between two bodies. A * typical usage is to control the movement of a dynamic body with respect to * the ground. */ -declare function MotorJoint(def: MotorJointDef): MotorJoint; -/** - * A motor joint is used to control the relative motion between two bodies. A - * typical usage is to control the movement of a dynamic body with respect to - * the ground. - */ -declare function MotorJoint(def: MotorJointOpt, bodyA: Body, bodyB: Body): MotorJoint; -/** - * A motor joint is used to control the relative motion between two bodies. A - * typical usage is to control the movement of a dynamic body with respect to - * the ground. - */ -declare class MotorJoint extends Joint { - static TYPE: "motor-joint"; - constructor(def: MotorJointDef); - constructor(def: MotorJointOpt, bodyA: Body, bodyB: Body); - /** @hidden */ - _reset(def: Partial): void; - /** - * Set the maximum friction force in N. - */ - setMaxForce(force: number): void; - /** - * Get the maximum friction force in N. - */ - getMaxForce(): number; - /** - * Set the maximum friction torque in N*m. - */ - setMaxTorque(torque: number): void; - /** - * Get the maximum friction torque in N*m. - */ - getMaxTorque(): number; - /** - * Set the position correction factor in the range [0,1]. - */ - setCorrectionFactor(factor: number): void; - /** - * Get the position correction factor in the range [0,1]. - */ - getCorrectionFactor(): number; - /** - * Set/get the target linear offset, in frame A, in meters. - */ - setLinearOffset(linearOffset: Vec2Value): void; - getLinearOffset(): Vec2; - /** - * Set/get the target angular offset, in radians. - */ - setAngularOffset(angularOffset: number): void; - getAngularOffset(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class MotorJoint extends Joint { + static TYPE: "motor-joint"; + constructor(def: MotorJointDef); + constructor(def: MotorJointOpt, bodyA: Body$1, bodyB: Body$1); + /** @hidden */ + _reset(def: Partial): void; + /** + * Set the maximum friction force in N. + */ + setMaxForce(force: number): void; + /** + * Get the maximum friction force in N. + */ + getMaxForce(): number; + /** + * Set the maximum friction torque in N*m. + */ + setMaxTorque(torque: number): void; + /** + * Get the maximum friction torque in N*m. + */ + getMaxTorque(): number; + /** + * Set the position correction factor in the range [0,1]. + */ + setCorrectionFactor(factor: number): void; + /** + * Get the position correction factor in the range [0,1]. + */ + getCorrectionFactor(): number; + /** + * Set/get the target linear offset, in frame A, in meters. + */ + setLinearOffset(linearOffset: Vec2Value): void; + getLinearOffset(): Vec2; + /** + * Set/get the target angular offset, in radians. + */ + setAngularOffset(angularOffset: number): void; + getAngularOffset(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Mouse joint definition. This requires a world target point, tuning * parameters, and the time step. */ -interface MouseJointOpt extends JointOpt { - /** - * [maxForce = 0.0] The maximum constraint force that can be exerted to move - * the candidate body. Usually you will express as some multiple of the - * weight (multiplier * mass * gravity). - */ - maxForce?: number; - /** - * [frequencyHz = 5.0] The response speed. - */ - frequencyHz?: number; - /** - * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical - * damping. - */ - dampingRatio?: number; +export interface MouseJointOpt extends JointOpt { + /** + * [maxForce = 0.0] The maximum constraint force that can be exerted to move + * the candidate body. Usually you will express as some multiple of the + * weight (multiplier * mass * gravity). + */ + maxForce?: number; + /** + * [frequencyHz = 5.0] The response speed. + */ + frequencyHz?: number; + /** + * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical + * damping. + */ + dampingRatio?: number; } /** * Mouse joint definition. This requires a world target point, tuning * parameters, and the time step. */ -interface MouseJointDef extends JointDef, MouseJointOpt { - /** - * The initial world target point. This is assumed to coincide with the body - * anchor initially. - */ - target: Vec2Value; +export interface MouseJointDef extends JointDef, MouseJointOpt { + /** + * The initial world target point. This is assumed to coincide with the body + * anchor initially. + */ + target: Vec2Value; } +/** @hidden @deprecated Use new keyword. */ +export function MouseJoint(def: MouseJointDef): MouseJoint; +/** @hidden @deprecated Use new keyword. */ +export function MouseJoint(def: MouseJointOpt, bodyA: Body$1, bodyB: Body$1, target: Vec2Value): MouseJoint; /** * A mouse joint is used to make a point on a body track a specified world * point. This a soft constraint with a maximum force. This allows the @@ -3490,137 +3423,114 @@ interface MouseJointDef extends JointDef, MouseJointOpt { * be used in the testbed. If you want to learn how to use the mouse joint, look * at the testbed. */ -declare function MouseJoint(def: MouseJointDef): MouseJoint; -/** - * A mouse joint is used to make a point on a body track a specified world - * point. This a soft constraint with a maximum force. This allows the - * constraint to stretch and without applying huge forces. - * - * You need to call setTarget(target) every time that mouse is - * moved, to track the new location of the mouse. - * - * NOTE: this joint is not documented in the manual because it was developed to - * be used in the testbed. If you want to learn how to use the mouse joint, look - * at the testbed. - */ -declare function MouseJoint(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value): MouseJoint; -/** - * A mouse joint is used to make a point on a body track a specified world - * point. This a soft constraint with a maximum force. This allows the - * constraint to stretch and without applying huge forces. - * - * You need to call setTarget(target) every time that mouse is - * moved, to track the new location of the mouse. - * - * NOTE: this joint is not documented in the manual because it was developed to - * be used in the testbed. If you want to learn how to use the mouse joint, look - * at the testbed. - */ -declare class MouseJoint extends Joint { - static TYPE: "mouse-joint"; - constructor(def: MouseJointDef); - constructor(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * Use this to update the target point. - */ - setTarget(target: Vec2Value): void; - getTarget(): Vec2; - /** - * Set the maximum force in Newtons. - */ - setMaxForce(force: number): void; - /** - * Get the maximum force in Newtons. - */ - getMaxForce(): number; - /** - * Set the frequency in Hertz. - */ - setFrequency(hz: number): void; - /** - * Get the frequency in Hertz. - */ - getFrequency(): number; - /** - * Set the damping ratio (dimensionless). - */ - setDampingRatio(ratio: number): void; - /** - * Get the damping ratio (dimensionless). - */ - getDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - /** - * Shift the origin for any points stored in world coordinates. - */ - shiftOrigin(newOrigin: Vec2Value): void; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class MouseJoint extends Joint { + static TYPE: "mouse-joint"; + constructor(def: MouseJointDef); + constructor(def: MouseJointOpt, bodyA: Body$1, bodyB: Body$1, target: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * Use this to update the target point. + */ + setTarget(target: Vec2Value): void; + getTarget(): Vec2; + /** + * Set the maximum force in Newtons. + */ + setMaxForce(force: number): void; + /** + * Get the maximum force in Newtons. + */ + getMaxForce(): number; + /** + * Set the frequency in Hertz. + */ + setFrequency(hz: number): void; + /** + * Get the frequency in Hertz. + */ + getFrequency(): number; + /** + * Set the damping ratio (dimensionless). + */ + setDampingRatio(ratio: number): void; + /** + * Get the damping ratio (dimensionless). + */ + getDampingRatio(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + /** + * Shift the origin for any points stored in world coordinates. + */ + shiftOrigin(newOrigin: Vec2Value): void; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Pulley joint definition. This requires two ground anchors, two dynamic body * anchor points, and a pulley ratio. */ -// tslint:disable-next-line:no-empty-interface -interface PulleyJointOpt extends JointOpt { +export interface PulleyJointOpt extends JointOpt { } /** * Pulley joint definition. This requires two ground anchors, two dynamic body * anchor points, and a pulley ratio. */ -interface PulleyJointDef extends JointDef, PulleyJointOpt { - /** - * The first ground anchor in world coordinates. This point never moves. - */ - groundAnchorA: Vec2Value; - /** - * The second ground anchor in world coordinates. This point never moves. - */ - groundAnchorB: Vec2Value; - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The reference length for the segment attached to bodyA. - */ - lengthA: number; - /** - * The reference length for the segment attached to bodyB. - */ - lengthB: number; - /** - * The pulley ratio, used to simulate a block-and-tackle. - */ - ratio: number; - /** @hidden */ anchorA?: Vec2Value; - /** @hidden */ anchorB?: Vec2Value; +export interface PulleyJointDef extends JointDef, PulleyJointOpt { + /** + * The first ground anchor in world coordinates. This point never moves. + */ + groundAnchorA: Vec2Value; + /** + * The second ground anchor in world coordinates. This point never moves. + */ + groundAnchorB: Vec2Value; + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; + /** + * The reference length for the segment attached to bodyA. + */ + lengthA: number; + /** + * The reference length for the segment attached to bodyB. + */ + lengthB: number; + /** + * The pulley ratio, used to simulate a block-and-tackle. + */ + ratio: number; + /** @hidden */ anchorA?: Vec2Value; + /** @hidden */ anchorB?: Vec2Value; } +/** @hidden @deprecated Use new keyword. */ +export function PulleyJoint(def: PulleyJointDef): PulleyJoint; +/** @hidden @deprecated Use new keyword. */ +export function PulleyJoint(def: PulleyJointOpt, bodyA: Body$1, bodyB: Body$1, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number): PulleyJoint; /** * The pulley joint is connected to two bodies and two fixed ground points. The * pulley supports a ratio such that: length1 + ratio * length2 <= constant @@ -3632,120 +3542,100 @@ interface PulleyJointDef extends JointDef, PulleyJointOpt { * anchor points with static shapes to prevent one side from going to zero * length. */ -declare function PulleyJoint(def: PulleyJointDef): PulleyJoint; -/** - * The pulley joint is connected to two bodies and two fixed ground points. The - * pulley supports a ratio such that: length1 + ratio * length2 <= constant - * - * Yes, the force transmitted is scaled by the ratio. - * - * Warning: the pulley joint can get a bit squirrelly by itself. They often work - * better when combined with prismatic joints. You should also cover the the - * anchor points with static shapes to prevent one side from going to zero - * length. - */ -declare function PulleyJoint(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number): PulleyJoint; -/** - * The pulley joint is connected to two bodies and two fixed ground points. The - * pulley supports a ratio such that: length1 + ratio * length2 <= constant - * - * Yes, the force transmitted is scaled by the ratio. - * - * Warning: the pulley joint can get a bit squirrelly by itself. They often work - * better when combined with prismatic joints. You should also cover the the - * anchor points with static shapes to prevent one side from going to zero - * length. - */ -declare class PulleyJoint extends Joint { - static TYPE: "pulley-joint"; - constructor(def: PulleyJointDef); - constructor(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number); - /** @hidden */ - _reset(def: Partial): void; - /** - * Get the first ground anchor. - */ - getGroundAnchorA(): Vec2; - /** - * Get the second ground anchor. - */ - getGroundAnchorB(): Vec2; - /** - * Get the current length of the segment attached to bodyA. - */ - getLengthA(): number; - /** - * Get the current length of the segment attached to bodyB. - */ - getLengthB(): number; - /** - * Get the pulley ratio. - */ - getRatio(): number; - /** - * Get the current length of the segment attached to bodyA. - */ - getCurrentLengthA(): number; - /** - * Get the current length of the segment attached to bodyB. - */ - getCurrentLengthB(): number; - /** - * Shift the origin for any points stored in world coordinates. - * - * @param newOrigin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class PulleyJoint extends Joint { + static TYPE: "pulley-joint"; + constructor(def: PulleyJointDef); + constructor(def: PulleyJointOpt, bodyA: Body$1, bodyB: Body$1, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number); + /** @hidden */ + _reset(def: Partial): void; + /** + * Get the first ground anchor. + */ + getGroundAnchorA(): Vec2; + /** + * Get the second ground anchor. + */ + getGroundAnchorB(): Vec2; + /** + * Get the current length of the segment attached to bodyA. + */ + getLengthA(): number; + /** + * Get the current length of the segment attached to bodyB. + */ + getLengthB(): number; + /** + * Get the pulley ratio. + */ + getRatio(): number; + /** + * Get the current length of the segment attached to bodyA. + */ + getCurrentLengthA(): number; + /** + * Get the current length of the segment attached to bodyB. + */ + getCurrentLengthB(): number; + /** + * Shift the origin for any points stored in world coordinates. + * + * @param newOrigin + */ + shiftOrigin(newOrigin: Vec2Value): void; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Rope joint definition. This requires two body anchor points and a maximum * lengths. Note: by default the connected objects will not collide. see * collideConnected in JointDef. */ -interface RopeJointOpt extends JointOpt { - /** - * The maximum length of the rope. - * Warning: this must be larger than linearSlop or the joint will have no effect. - */ - maxLength?: number; +export interface RopeJointOpt extends JointOpt { + /** + * The maximum length of the rope. + * Warning: this must be larger than linearSlop or the joint will have no effect. + */ + maxLength?: number; } /** * Rope joint definition. This requires two body anchor points and a maximum * lengths. Note: by default the connected objects will not collide. see * collideConnected in JointDef. */ -interface RopeJointDef extends JointDef, RopeJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; +export interface RopeJointDef extends JointDef, RopeJointOpt { + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; } +/** @hidden @deprecated Use new keyword. */ +export function RopeJoint(def: RopeJointDef): RopeJoint; +/** @hidden @deprecated Use new keyword. */ +export function RopeJoint(def: RopeJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value): RopeJoint; /** * A rope joint enforces a maximum distance between two points on two bodies. It * has no other effect. @@ -3757,181 +3647,151 @@ interface RopeJointDef extends JointDef, RopeJointOpt { * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you * want to dynamically control length. */ -declare function RopeJoint(def: RopeJointDef): RopeJoint; -/** - * A rope joint enforces a maximum distance between two points on two bodies. It - * has no other effect. - * - * Warning: if you attempt to change the maximum length during the simulation - * you will get some non-physical behavior. - * - * A model that would allow you to dynamically modify the length would have some - * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you - * want to dynamically control length. - */ -declare function RopeJoint(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): RopeJoint; -/** - * A rope joint enforces a maximum distance between two points on two bodies. It - * has no other effect. - * - * Warning: if you attempt to change the maximum length during the simulation - * you will get some non-physical behavior. - * - * A model that would allow you to dynamically modify the length would have some - * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you - * want to dynamically control length. - */ -declare class RopeJoint extends Joint { - static TYPE: "rope-joint"; - constructor(def: RopeJointDef); - constructor(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Set the maximum length of the rope. - */ - setMaxLength(length: number): void; - /** - * Get the maximum length of the rope. - */ - getMaxLength(): number; - getLimitState(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class RopeJoint extends Joint { + static TYPE: "rope-joint"; + constructor(def: RopeJointDef); + constructor(def: RopeJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * The local anchor point relative to bodyA's origin. + */ + getLocalAnchorA(): Vec2; + /** + * The local anchor point relative to bodyB's origin. + */ + getLocalAnchorB(): Vec2; + /** + * Set the maximum length of the rope. + */ + setMaxLength(length: number): void; + /** + * Get the maximum length of the rope. + */ + getMaxLength(): number; + getLimitState(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Weld joint definition. You need to specify local anchor points where they are * attached and the relative body angle. The position of the anchor points is * important for computing the reaction torque. */ -interface WeldJointOpt extends JointOpt { - /** - * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness - * with a value of 0. - */ - frequencyHz?: number; - /** - * The damping ratio. 0 = no damping, 1 = critical damping. - */ - dampingRatio?: number; - /** - * The bodyB angle minus bodyA angle in the reference state (radians). - */ - referenceAngle?: number; +export interface WeldJointOpt extends JointOpt { + /** + * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness + * with a value of 0. + */ + frequencyHz?: number; + /** + * The damping ratio. 0 = no damping, 1 = critical damping. + */ + dampingRatio?: number; + /** + * The bodyB angle minus bodyA angle in the reference state (radians). + */ + referenceAngle?: number; } /** * Weld joint definition. You need to specify local anchor points where they are * attached and the relative body angle. The position of the anchor points is * important for computing the reaction torque. */ -interface WeldJointDef extends JointDef, WeldJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; +export interface WeldJointDef extends JointDef, WeldJointOpt { + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; } +/** @hidden @deprecated Use new keyword. */ +export function WeldJoint(def: WeldJointDef): WeldJoint; +/** @hidden @deprecated Use new keyword. */ +export function WeldJoint(def: WeldJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value): WeldJoint; /** * A weld joint essentially glues two bodies together. A weld joint may distort * somewhat because the island constraint solver is approximate. */ -declare function WeldJoint(def: WeldJointDef): WeldJoint; -/** - * A weld joint essentially glues two bodies together. A weld joint may distort - * somewhat because the island constraint solver is approximate. - */ -declare function WeldJoint(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): WeldJoint; -/** - * A weld joint essentially glues two bodies together. A weld joint may distort - * somewhat because the island constraint solver is approximate. - */ -declare class WeldJoint extends Joint { - static TYPE: "weld-joint"; - constructor(def: WeldJointDef); - constructor(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Get the reference angle. - */ - getReferenceAngle(): number; - /** - * Set frequency in Hz. - */ - setFrequency(hz: number): void; - /** - * Get frequency in Hz. - */ - getFrequency(): number; - /** - * Set damping ratio. - */ - setDampingRatio(ratio: number): void; - /** - * Get damping ratio. - */ - getDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class WeldJoint extends Joint { + static TYPE: "weld-joint"; + constructor(def: WeldJointDef); + constructor(def: WeldJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * The local anchor point relative to bodyA's origin. + */ + getLocalAnchorA(): Vec2; + /** + * The local anchor point relative to bodyB's origin. + */ + getLocalAnchorB(): Vec2; + /** + * Get the reference angle. + */ + getReferenceAngle(): number; + /** + * Set frequency in Hz. + */ + setFrequency(hz: number): void; + /** + * Get frequency in Hz. + */ + getFrequency(): number; + /** + * Set damping ratio. + */ + setDampingRatio(ratio: number): void; + /** + * Get damping ratio. + */ + getDampingRatio(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Wheel joint definition. This requires defining a line of motion using an axis @@ -3941,27 +3801,27 @@ declare class WeldJoint extends Joint { * space. Using local anchors and a local axis helps when saving and loading a * game. */ -interface WheelJointOpt extends JointOpt { - /** - * Enable/disable the joint motor. - */ - enableMotor?: boolean; - /** - * The maximum motor torque, usually in N-m. - */ - maxMotorTorque?: number; - /** - * The desired motor speed in radians per second. - */ - motorSpeed?: number; - /** - * Suspension frequency, zero indicates no suspension. - */ - frequencyHz?: number; - /** - * Suspension damping ratio, one indicates critical damping. - */ - dampingRatio?: number; +export interface WheelJointOpt extends JointOpt { + /** + * Enable/disable the joint motor. + */ + enableMotor?: boolean; + /** + * The maximum motor torque, usually in N-m. + */ + maxMotorTorque?: number; + /** + * The desired motor speed in radians per second. + */ + motorSpeed?: number; + /** + * Suspension frequency, zero indicates no suspension. + */ + frequencyHz?: number; + /** + * Suspension damping ratio, one indicates critical damping. + */ + dampingRatio?: number; } /** * Wheel joint definition. This requires defining a line of motion using an axis @@ -3971,238 +3831,225 @@ interface WheelJointOpt extends JointOpt { * space. Using local anchors and a local axis helps when saving and loading a * game. */ -interface WheelJointDef extends JointDef, WheelJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The local translation axis in bodyA. - */ - localAxisA: Vec2Value; +export interface WheelJointDef extends JointDef, WheelJointOpt { + /** + * The local anchor point relative to bodyA's origin. + */ + localAnchorA: Vec2Value; + /** + * The local anchor point relative to bodyB's origin. + */ + localAnchorB: Vec2Value; + /** + * The local translation axis in bodyA. + */ + localAxisA: Vec2Value; } +/** @hidden @deprecated Use new keyword. */ +export function WheelJoint(def: WheelJointDef): WheelJoint; +/** @hidden @deprecated Use new keyword. */ +export function WheelJoint(def: WheelJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value, axis: Vec2Value): WheelJoint; /** * A wheel joint. This joint provides two degrees of freedom: translation along * an axis fixed in bodyA and rotation in the plane. In other words, it is a * point to line constraint with a rotational motor and a linear spring/damper. * This joint is designed for vehicle suspensions. */ -declare function WheelJoint(def: WheelJointDef): WheelJoint; -/** - * A wheel joint. This joint provides two degrees of freedom: translation along - * an axis fixed in bodyA and rotation in the plane. In other words, it is a - * point to line constraint with a rotational motor and a linear spring/damper. - * This joint is designed for vehicle suspensions. - */ -declare function WheelJoint(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value): WheelJoint; -/** - * A wheel joint. This joint provides two degrees of freedom: translation along - * an axis fixed in bodyA and rotation in the plane. In other words, it is a - * point to line constraint with a rotational motor and a linear spring/damper. - * This joint is designed for vehicle suspensions. - */ -declare class WheelJoint extends Joint { - static TYPE: "wheel-joint"; - constructor(def: WheelJointDef); - constructor(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * The local joint axis relative to bodyA. - */ - getLocalAxisA(): Vec2; - /** - * Get the current joint translation, usually in meters. - */ - getJointTranslation(): number; - /** - * Get the current joint translation speed, usually in meters per second. - */ - getJointSpeed(): number; - /** - * Is the joint motor enabled? - */ - isMotorEnabled(): boolean; - /** - * Enable/disable the joint motor. - */ - enableMotor(flag: boolean): void; - /** - * Set the motor speed, usually in radians per second. - */ - setMotorSpeed(speed: number): void; - /** - * Get the motor speed, usually in radians per second. - */ - getMotorSpeed(): number; - /** - * Set/Get the maximum motor force, usually in N-m. - */ - setMaxMotorTorque(torque: number): void; - getMaxMotorTorque(): number; - /** - * Get the current motor torque given the inverse time step, usually in N-m. - */ - getMotorTorque(inv_dt: number): number; - /** - * Set/Get the spring frequency in hertz. Setting the frequency to zero disables - * the spring. - */ - setSpringFrequencyHz(hz: number): void; - getSpringFrequencyHz(): number; - /** - * Set/Get the spring damping ratio - */ - setSpringDampingRatio(ratio: number): void; - getSpringDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; +export declare class WheelJoint extends Joint { + static TYPE: "wheel-joint"; + constructor(def: WheelJointDef); + constructor(def: WheelJointOpt, bodyA: Body$1, bodyB: Body$1, anchor: Vec2Value, axis: Vec2Value); + /** @hidden */ + _reset(def: Partial): void; + /** + * The local anchor point relative to bodyA's origin. + */ + getLocalAnchorA(): Vec2; + /** + * The local anchor point relative to bodyB's origin. + */ + getLocalAnchorB(): Vec2; + /** + * The local joint axis relative to bodyA. + */ + getLocalAxisA(): Vec2; + /** + * Get the current joint translation, usually in meters. + */ + getJointTranslation(): number; + /** + * Get the current joint translation speed, usually in meters per second. + */ + getJointSpeed(): number; + /** + * Is the joint motor enabled? + */ + isMotorEnabled(): boolean; + /** + * Enable/disable the joint motor. + */ + enableMotor(flag: boolean): void; + /** + * Set the motor speed, usually in radians per second. + */ + setMotorSpeed(speed: number): void; + /** + * Get the motor speed, usually in radians per second. + */ + getMotorSpeed(): number; + /** + * Set/Get the maximum motor force, usually in N-m. + */ + setMaxMotorTorque(torque: number): void; + getMaxMotorTorque(): number; + /** + * Get the current motor torque given the inverse time step, usually in N-m. + */ + getMotorTorque(inv_dt: number): number; + /** + * Set/Get the spring frequency in hertz. Setting the frequency to zero disables + * the spring. + */ + setSpringFrequencyHz(hz: number): void; + getSpringFrequencyHz(): number; + /** + * Set/Get the spring damping ratio + */ + setSpringDampingRatio(ratio: number): void; + getSpringDampingRatio(): number; + /** + * Get the anchor point on bodyA in world coordinates. + */ + getAnchorA(): Vec2; + /** + * Get the anchor point on bodyB in world coordinates. + */ + getAnchorB(): Vec2; + /** + * Get the reaction force on bodyB at the joint anchor in Newtons. + */ + getReactionForce(inv_dt: number): Vec2; + /** + * Get the reaction torque on bodyB in N*m. + */ + getReactionTorque(inv_dt: number): number; + initVelocityConstraints(step: TimeStep): void; + solveVelocityConstraints(step: TimeStep): void; + /** + * This returns true if the position errors are within tolerance. + */ + solvePositionConstraints(step: TimeStep): boolean; } /** * Tuning constants based on meters-kilograms-seconds (MKS) units. * * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units. */ -declare class Settings { - /** - * You can use this to change the length scale used by your game. - * - * For example for inches you could use 39.4. - */ - static lengthUnitsPerMeter: number; - // Collision - /** - * The maximum number of contact points between two convex shapes. Do not change - * this value. - */ - static maxManifoldPoints: number; - /** - * The maximum number of vertices on a convex polygon. You cannot increase this - * too much because BlockAllocator has a maximum object size. - */ - static maxPolygonVertices: number; - /** - * This is used to fatten AABBs in the dynamic tree. This allows proxies to move - * by a small amount without triggering a tree adjustment. This is in meters. - */ - static aabbExtension: number; - /** - * This is used to fatten AABBs in the dynamic tree. This is used to predict the - * future position based on the current displacement. This is a dimensionless - * multiplier. - */ - static aabbMultiplier: number; - /** - * A small length used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - static linearSlop: number; - /** - * A small angle used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - static angularSlop: number; - /** - * The radius of the polygon/edge shape skin. This should not be modified. - * Making this smaller means polygons will have an insufficient buffer for - * continuous collision. Making it larger may create artifacts for vertex - * collision. - */ - static get polygonRadius(): number; - /** - * Maximum number of sub-steps per contact in continuous physics simulation. - */ - static maxSubSteps: number; - // Dynamics - /** - * Maximum number of contacts to be handled to solve a TOI impact. - */ - static maxTOIContacts: number; - /** - * Maximum iterations to solve a TOI. - */ - static maxTOIIterations: number; - /** - * Maximum iterations to find Distance. - */ - static maxDistanceIterations: number; - /** - * A velocity threshold for elastic collisions. Any collision with a relative - * linear velocity below this threshold will be treated as inelastic. - */ - static velocityThreshold: number; - /** - * The maximum linear position correction used when solving constraints. This - * helps to prevent overshoot. - */ - static maxLinearCorrection: number; - /** - * The maximum angular position correction used when solving constraints. This - * helps to prevent overshoot. - */ - static maxAngularCorrection: number; - /** - * The maximum linear velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - static maxTranslation: number; - /** - * The maximum angular velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - static maxRotation: number; - /** - * This scale factor controls how fast overlap is resolved. Ideally this would - * be 1 so that overlap is removed in one time step. However using values close - * to 1 often lead to overshoot. - */ - static baumgarte: number; - static toiBaugarte: number; - // Sleep - /** - * The time that a body must be still before it will go to sleep. - */ - static timeToSleep: number; - /** - * A body cannot sleep if its linear velocity is above this tolerance. - */ - static linearSleepTolerance: number; - /** - * A body cannot sleep if its angular velocity is above this tolerance. - */ - static angularSleepTolerance: number; +export declare class Settings { + /** + * You can use this to change the length scale used by your game. + * + * For example for inches you could use 39.4. + */ + static lengthUnitsPerMeter: number; + /** + * The maximum number of contact points between two convex shapes. Do not change + * this value. + */ + static maxManifoldPoints: number; + /** + * The maximum number of vertices on a convex polygon. You cannot increase this + * too much because BlockAllocator has a maximum object size. + */ + static maxPolygonVertices: number; + /** + * This is used to fatten AABBs in the dynamic tree. This allows proxies to move + * by a small amount without triggering a tree adjustment. This is in meters. + */ + static aabbExtension: number; + /** + * This is used to fatten AABBs in the dynamic tree. This is used to predict the + * future position based on the current displacement. This is a dimensionless + * multiplier. + */ + static aabbMultiplier: number; + /** + * A small length used as a collision and constraint tolerance. Usually it is + * chosen to be numerically significant, but visually insignificant. + */ + static linearSlop: number; + /** + * A small angle used as a collision and constraint tolerance. Usually it is + * chosen to be numerically significant, but visually insignificant. + */ + static angularSlop: number; + /** + * The radius of the polygon/edge shape skin. This should not be modified. + * Making this smaller means polygons will have an insufficient buffer for + * continuous collision. Making it larger may create artifacts for vertex + * collision. + */ + static get polygonRadius(): number; + /** + * Maximum number of sub-steps per contact in continuous physics simulation. + */ + static maxSubSteps: number; + /** + * Maximum number of contacts to be handled to solve a TOI impact. + */ + static maxTOIContacts: number; + /** + * Maximum iterations to solve a TOI. + */ + static maxTOIIterations: number; + /** + * Maximum iterations to find Distance. + */ + static maxDistanceIterations: number; + /** + * A velocity threshold for elastic collisions. Any collision with a relative + * linear velocity below this threshold will be treated as inelastic. + */ + static velocityThreshold: number; + /** + * The maximum linear position correction used when solving constraints. This + * helps to prevent overshoot. + */ + static maxLinearCorrection: number; + /** + * The maximum angular position correction used when solving constraints. This + * helps to prevent overshoot. + */ + static maxAngularCorrection: number; + /** + * The maximum linear velocity of a body. This limit is very large and is used + * to prevent numerical problems. You shouldn't need to adjust Settings. + */ + static maxTranslation: number; + /** + * The maximum angular velocity of a body. This limit is very large and is used + * to prevent numerical problems. You shouldn't need to adjust Settings. + */ + static maxRotation: number; + /** + * This scale factor controls how fast overlap is resolved. Ideally this would + * be 1 so that overlap is removed in one time step. However using values close + * to 1 often lead to overshoot. + */ + static baumgarte: number; + static toiBaugarte: number; + /** + * The time that a body must be still before it will go to sleep. + */ + static timeToSleep: number; + /** + * A body cannot sleep if its linear velocity is above this tolerance. + */ + static linearSleepTolerance: number; + /** + * A body cannot sleep if its angular velocity is above this tolerance. + */ + static angularSleepTolerance: number; } /** * This describes the motion of a body/shape for TOI computation. Shapes are @@ -4210,66 +4057,66 @@ declare class Settings { * center of mass. However, to support dynamics we must interpolate the center * of mass position. */ -declare class Sweep { - /** Local center of mass position */ - localCenter: Vec2; - /** World center position */ - c: Vec2; - /** World angle */ - a: number; - /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */ - alpha0: number; - c0: Vec2; - a0: number; - setTransform(xf: TransformValue): void; - setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void; - /** - * Get the interpolated transform at a specific time. - * - * @param xf - * @param beta A factor in [0,1], where 0 indicates alpha0 - */ - getTransform(xf: TransformValue, beta?: number): void; - /** - * Advance the sweep forward, yielding a new initial state. - * - * @param alpha The new initial time - */ - advance(alpha: number): void; - forward(): void; - /** - * normalize the angles in radians to be between -pi and pi. - */ - normalize(): void; - set(that: Sweep): void; +export declare class Sweep { + /** Local center of mass position */ + localCenter: Vec2; + /** World center position */ + c: Vec2; + /** World angle */ + a: number; + /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */ + alpha0: number; + c0: Vec2; + a0: number; + setTransform(xf: TransformValue): void; + setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void; + /** + * Get the interpolated transform at a specific time. + * + * @param xf + * @param beta A factor in [0,1], where 0 indicates alpha0 + */ + getTransform(xf: TransformValue, beta?: number): void; + /** + * Advance the sweep forward, yielding a new initial state. + * + * @param alpha The new initial time + */ + advance(alpha: number): void; + forward(): void; + /** + * normalize the angles in radians to be between -pi and pi. + */ + normalize(): void; + set(that: Sweep): void; } /** * Input parameters for TimeOfImpact. */ -declare class TOIInput { - proxyA: DistanceProxy; - proxyB: DistanceProxy; - sweepA: Sweep; - sweepB: Sweep; - /** defines sweep interval [0, tMax] */ - tMax: number; - recycle(): void; +export declare class TOIInput { + proxyA: DistanceProxy; + proxyB: DistanceProxy; + sweepA: Sweep; + sweepB: Sweep; + /** defines sweep interval [0, tMax] */ + tMax: number; + recycle(): void; } -declare enum TOIOutputState { - e_unset = -1, - e_unknown = 0, - e_failed = 1, - e_overlapped = 2, - e_touching = 3, - e_separated = 4 +export declare enum TOIOutputState { + e_unset = -1, + e_unknown = 0, + e_failed = 1, + e_overlapped = 2, + e_touching = 3, + e_separated = 4 } /** * Output parameters for TimeOfImpact. */ -declare class TOIOutput { - state: TOIOutputState; - t: number; - recycle(): void; +export declare class TOIOutput { + state: TOIOutputState; + t: number; + recycle(): void; } /** * Compute the upper bound on time before two shapes penetrate. Time is @@ -4283,4208 +4130,63 @@ declare class TOIOutput { * CCD via the local separating axis method. This seeks progression by computing * the largest time at which separation is maintained. */ -declare const TimeOfImpact: { - (output: TOIOutput, input: TOIInput): void; - Input: typeof TOIInput; - Output: typeof TOIOutput; +export declare const TimeOfImpact: { + (output: TOIOutput, input: TOIInput): void; + Input: typeof TOIInput; + Output: typeof TOIOutput; }; /** @hidden */ -declare const stats: { - gjkCalls: number; - gjkIters: number; - gjkMaxIters: number; - toiTime: number; - toiMaxTime: number; - toiCalls: number; - toiIters: number; - toiMaxIters: number; - toiRootIters: number; - toiMaxRootIters: number; - toString(newline?: string): string; +export declare const stats: { + gjkCalls: number; + gjkIters: number; + gjkMaxIters: number; + toiTime: number; + toiMaxTime: number; + toiCalls: number; + toiIters: number; + toiMaxIters: number; + toiRootIters: number; + toiMaxRootIters: number; + toString(newline?: string): string; }; /** @hidden @deprecated Merged with main namespace */ -declare const internal: { - CollidePolygons: (manifold: Manifold, polyA: PolygonShape, xfA: TransformValue, polyB: PolygonShape, xfB: TransformValue) => void; - Settings: typeof Settings; - Sweep: typeof Sweep; - Manifold: typeof Manifold; - Distance: { - (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void; - testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; - Input: typeof DistanceInput; - Output: typeof DistanceOutput; - Proxy: typeof DistanceProxy; - Cache: typeof SimplexCache; - }; - TimeOfImpact: { - (output: TOIOutput, input: TOIInput): void; - Input: typeof TOIInput; - Output: typeof TOIOutput; - }; - DynamicTree: typeof DynamicTree; - stats: { - gjkCalls: number; - gjkIters: number; - gjkMaxIters: number; - toiTime: number; - toiMaxTime: number; - toiCalls: number; - toiIters: number; - toiMaxIters: number; - toiRootIters: number; - toiMaxRootIters: number; - toString(newline?: string): string; - }; +export declare const internal: { + CollidePolygons: (manifold: Manifold, polyA: PolygonShape, xfA: TransformValue, polyB: PolygonShape, xfB: TransformValue) => void; + Settings: typeof Settings; + Sweep: typeof Sweep; + Manifold: typeof Manifold; + Distance: { + (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void; + testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; + Input: typeof DistanceInput; + Output: typeof DistanceOutput; + Proxy: typeof DistanceProxy; + Cache: typeof SimplexCache; + }; + TimeOfImpact: { + (output: TOIOutput, input: TOIInput): void; + Input: typeof TOIInput; + Output: typeof TOIOutput; + }; + DynamicTree: typeof DynamicTree; + stats: { + gjkCalls: number; + gjkIters: number; + gjkMaxIters: number; + toiTime: number; + toiMaxTime: number; + toiCalls: number; + toiIters: number; + toiMaxIters: number; + toiRootIters: number; + toiMaxRootIters: number; + toString(newline?: string): string; + }; }; -declare namespace planck { - interface Vec2Value { - x: number; - y: number; - } - class Vec2 { - x: number; - y: number; - constructor(x: number, y: number); - constructor(obj: { - x: number; - y: number; - }); - constructor(); - static zero(): Vec2; - /** @hidden */ - static neo(x: number, y: number): Vec2; - static clone(v: Vec2Value): Vec2; - /** @hidden */ - toString(): string; - /** - * Does this vector contain finite coordinates? - */ - static isValid(obj: any): boolean; - static assert(o: any): void; - clone(): Vec2; - /** - * Set this vector to all zeros. - * - * @returns this - */ - setZero(): Vec2; - set(x: number, y: number): Vec2; - set(value: Vec2Value): Vec2; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - setNum(x: number, y: number): this; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - setVec2(value: Vec2Value): this; - /** - * Set linear combination of v and w: `a * v + b * w` - */ - setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - setMul(a: number, v: Vec2Value): Vec2; - /** - * Add a vector to this vector. - * - * @returns this - */ - add(w: Vec2Value): Vec2; - /** - * Add linear combination of v and w: `a * v + b * w` - */ - addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - addMul(a: number, v: Vec2Value): Vec2; - /** - * @deprecated Use subCombine or subMul - */ - wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2; - /** - * Subtract linear combination of v and w: `a * v + b * w` - */ - subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - subMul(a: number, v: Vec2Value): Vec2; - /** - * Subtract a vector from this vector - * - * @returns this - */ - sub(w: Vec2Value): Vec2; - /** - * Multiply this vector by a scalar. - * - * @returns this - */ - mul(m: number): Vec2; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - length(): number; - /** - * Get the length squared. - */ - lengthSquared(): number; - /** - * Convert this vector into a unit vector. - * - * @returns old length - */ - normalize(): number; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - static lengthOf(v: Vec2Value): number; - /** - * Get the length squared. - */ - static lengthSquared(v: Vec2Value): number; - static distance(v: Vec2Value, w: Vec2Value): number; - static distanceSquared(v: Vec2Value, w: Vec2Value): number; - static areEqual(v: Vec2Value, w: Vec2Value): boolean; - /** - * Get the skew vector such that dot(skew_vec, other) == cross(vec, other) - */ - static skew(v: Vec2Value): Vec2; - /** Dot product on two vectors */ - static dot(v: Vec2Value, w: Vec2Value): number; - /** Cross product between two vectors */ - static cross(v: Vec2Value, w: Vec2Value): number; - /** Cross product between a vector and a scalar */ - static cross(v: Vec2Value, w: number): Vec2; - /** Cross product between a scalar and a vector */ - static cross(v: number, w: Vec2Value): Vec2; - /** Cross product on two vectors */ - static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number; - /** Cross product on a vector and a scalar */ - static crossVec2Num(v: Vec2Value, w: number): Vec2; - /** Cross product on a vector and a scalar */ - static crossNumVec2(v: number, w: Vec2Value): Vec2; - /** Returns `a + (v x w)` */ - static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2; - /** Returns `a + (v x w)` */ - static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2; - /** - * Returns `a + (v x w)` - */ - static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2; - /** - * Returns `a + (v x w)` - */ - static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2; - static add(v: Vec2Value, w: Vec2Value): Vec2; - /** @hidden @deprecated */ - static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2; - static sub(v: Vec2Value, w: Vec2Value): Vec2; - static mul(a: Vec2Value, b: number): Vec2; - static mul(a: number, b: Vec2Value): Vec2; - static mulVec2Num(a: Vec2Value, b: number): Vec2; - static mulNumVec2(a: number, b: Vec2Value): Vec2; - neg(): Vec2; - static neg(v: Vec2Value): Vec2; - static abs(v: Vec2Value): Vec2; - static mid(v: Vec2Value, w: Vec2Value): Vec2; - static upper(v: Vec2Value, w: Vec2Value): Vec2; - static lower(v: Vec2Value, w: Vec2Value): Vec2; - clamp(max: number): Vec2; - static clamp(v: Vec2Value, max: number): Vec2; - /** @hidden @deprecated */ - static scaleFn(x: number, y: number): (v: Vec2Value) => Vec2; - /** @hidden @deprecated */ - static translateFn(x: number, y: number): (v: Vec2Value) => Vec2; - } - interface RotValue { - /** sin(angle) */ - s: number; - /** cos(angle) */ - c: number; - } - class Rot { - /** sin(angle) */ - s: number; - /** cos(angle) */ - c: number; - /** Initialize from an angle in radians. */ - constructor(angle?: number | RotValue); - /** @hidden */ - static neo(angle: number): Rot; - static clone(rot: RotValue): Rot; - static identity(): Rot; - static isValid(obj: any): boolean; - static assert(o: any): void; - /** Set to the identity rotation. */ - setIdentity(): void; - set(angle: number | RotValue): void; - setRot(angle: RotValue): void; - /** Set using an angle in radians. */ - setAngle(angle: number): void; - /** Get the angle in radians. */ - getAngle(): number; - /** Get the x-axis. */ - getXAxis(): Vec2; - /** Get the y-axis. */ - getYAxis(): Vec2; - /** Multiply two rotations: q * r */ - static mul(rot: RotValue, m: RotValue): Rot; - /** Rotate a vector */ - static mul(rot: RotValue, m: Vec2Value): Vec2; - /** Multiply two rotations: q * r */ - static mulRot(rot: RotValue, m: RotValue): Rot; - /** Rotate a vector */ - static mulVec2(rot: RotValue, m: Vec2Value): Vec2; - static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2; - /** Transpose multiply two rotations: qT * r */ - static mulT(rot: RotValue, m: RotValue): Rot; - /** Inverse rotate a vector */ - static mulT(rot: RotValue, m: Vec2Value): Vec2; - /** Transpose multiply two rotations: qT * r */ - static mulTRot(rot: RotValue, m: RotValue): Rot; - /** Inverse rotate a vector */ - static mulTVec2(rot: RotValue, m: Vec2Value): Vec2; - } - type TransformValue = { - p: Vec2Value; - q: RotValue; - }; - /** - * A transform contains translation and rotation. It is used to represent the - * position and orientation of rigid frames. Initialize using a position vector - * and a rotation. - */ - class Transform { - /** position */ - p: Vec2; - /** rotation */ - q: Rot; - constructor(position?: Vec2Value, rotation?: number); - static clone(xf: Transform): Transform; - /** @hidden */ - static neo(position: Vec2Value, rotation: Rot): Transform; - static identity(): Transform; - /** Set this to the identity transform */ - setIdentity(): void; - /** Set position and angle */ - set(position: Vec2Value, rotation: number): void; - /** Copy from another transform */ - set(xf: TransformValue): void; - /** Set position and angle */ - setNum(position: Vec2Value, rotation: number): void; - setTransform(xf: TransformValue): void; - static isValid(obj: any): boolean; - static assert(o: any): void; - static mul(a: TransformValue, b: Vec2Value): Vec2; - static mul(a: TransformValue, b: TransformValue): Transform; - static mulAll(a: Transform, b: Vec2Value[]): Vec2[]; - static mulAll(a: Transform, b: Transform[]): Transform[]; - /** @hidden @deprecated */ - static mulFn(a: TransformValue): (b: Vec2Value) => Vec2; - static mulVec2(a: TransformValue, b: Vec2Value): Vec2; - static mulXf(a: TransformValue, b: TransformValue): Transform; - static mulT(a: TransformValue, b: Vec2Value): Vec2; - static mulT(a: TransformValue, b: TransformValue): Transform; - static mulTVec2(a: TransformValue, b: Vec2Value): Vec2; - static mulTXf(a: TransformValue, b: TransformValue): Transform; - } - /** - * Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - */ - interface RayCastInput { - p1: Vec2Value; - p2: Vec2Value; - maxFraction: number; - } - type RayCastCallback = (subInput: RayCastInput, id: number) => number; - /** - * Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`, - * where `p1` and `p2` come from RayCastInput. - */ - interface RayCastOutput { - normal: Vec2; - fraction: number; - } - interface AABBValue { - lowerBound: Vec2Value; - upperBound: Vec2Value; - } - class AABB { - lowerBound: Vec2; - upperBound: Vec2; - constructor(lower?: Vec2Value, upper?: Vec2Value); - /** - * Verify that the bounds are sorted. - */ - isValid(): boolean; - static isValid(obj: any): boolean; - static assert(o: any): void; - /** - * Get the center of the AABB. - */ - getCenter(): Vec2; - /** - * Get the extents of the AABB (half-widths). - */ - getExtents(): Vec2; - /** - * Get the perimeter length. - */ - getPerimeter(): number; - /** - * Combine one or two AABB into this one. - */ - combine(a: AABBValue, b?: AABBValue): void; - combinePoints(a: Vec2Value, b: Vec2Value): void; - set(aabb: AABBValue): void; - contains(aabb: AABBValue): boolean; - extend(value: number): AABB; - static extend(out: AABBValue, value: number): AABBValue; - static testOverlap(a: AABBValue, b: AABBValue): boolean; - static areEqual(a: AABBValue, b: AABBValue): boolean; - static diff(a: AABBValue, b: AABBValue): number; - rayCast(output: RayCastOutput, input: RayCastInput): boolean; - /** @hidden */ - toString(): string; - static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue; - static combinedPerimeter(a: AABBValue, b: AABBValue): number; - } - /** - * Input for Distance. You have to option to use the shape radii in the - * computation. Even - */ - class DistanceInput { - readonly proxyA: DistanceProxy; - readonly proxyB: DistanceProxy; - readonly transformA: Transform; - readonly transformB: Transform; - useRadii: boolean; - recycle(): void; - } - /** - * Output for Distance. - */ - class DistanceOutput { - /** closest point on shapeA */ - pointA: Vec2Value; - /** closest point on shapeB */ - pointB: Vec2Value; - distance: number; - /** iterations number of GJK iterations used */ - iterations: number; - recycle(): void; - } - /** - * Used to warm start Distance. Set count to zero on first call. - */ - class SimplexCache { - /** length or area */ - metric: number; - /** vertices on shape A */ - indexA: number[]; - /** vertices on shape B */ - indexB: number[]; - count: number; - recycle(): void; - } - /** - * Compute the closest points between two shapes. Supports any combination of: - * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On - * the first call set SimplexCache.count to zero. - */ - const Distance: { - (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void; - testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; - Input: typeof DistanceInput; - Output: typeof DistanceOutput; - Proxy: typeof DistanceProxy; - Cache: typeof SimplexCache; - }; - /** - * A distance proxy is used by the GJK algorithm. It encapsulates any shape. - */ - class DistanceProxy { - recycle(): void; - /** - * Get the vertex count. - */ - getVertexCount(): number; - /** - * Get a vertex by index. Used by Distance. - */ - getVertex(index: number): Vec2Value; - /** - * Get the supporting vertex index in the given direction. - */ - getSupport(d: Vec2Value): number; - /** - * Get the supporting vertex in the given direction. - */ - getSupportVertex(d: Vec2Value): Vec2Value; - /** - * Initialize the proxy using the given shape. The shape must remain in scope - * while the proxy is in use. - */ - set(shape: Shape, index: number): void; - /** - * Initialize the proxy using a vertex cloud and radius. The vertices - * must remain in scope while the proxy is in use. - */ - setVertices(vertices: Vec2Value[], count: number, radius: number): void; - } - /** - * Determine if two generic shapes overlap. - */ - const testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; - /** - * Input parameters for ShapeCast - */ - class ShapeCastInput { - readonly proxyA: DistanceProxy; - readonly proxyB: DistanceProxy; - readonly transformA: Transform; - readonly transformB: Transform; - readonly translationB: Vec2; - recycle(): void; - } - /** - * Output results for b2ShapeCast - */ - class ShapeCastOutput { - point: Vec2; - normal: Vec2; - lambda: number; - iterations: number; - } - /** - * Perform a linear shape cast of shape B moving and shape A fixed. Determines - * the hit point, normal, and translation fraction. - * - * @returns true if hit, false if there is no hit or an initial overlap - */ - // - // GJK-raycast - // Algorithm by Gino van den Bergen. - // "Smooth Mesh Contacts with GJK" in Game Physics Pearls. 2010 - const ShapeCast: (output: ShapeCastOutput, input: ShapeCastInput) => boolean; - /** - * A joint edge is used to connect bodies and joints together in a joint graph - * where each body is a node and each joint is an edge. A joint edge belongs to - * a doubly linked list maintained in each attached body. Each joint has two - * joint nodes, one for each attached body. - */ - class JointEdge { - /** - * provides quick access to the other body attached. - */ - other: Body | null; - /** - * the joint - */ - joint: Joint | null; - /** - * prev the previous joint edge in the body's joint list - */ - prev: JointEdge | null; - /** - * the next joint edge in the body's joint list - */ - next: JointEdge | null; - } - /** - * Joint definitions are used to construct joints. - */ - interface JointOpt { - /** - * Use this to attach application specific data to your joints. - */ - userData?: any; - /** - * Set this flag to true if the attached bodies - * should collide. - */ - collideConnected?: boolean; - } - /** - * Joint definitions are used to construct joints. - */ - interface JointDef extends JointOpt { - /** - * The first attached body. - */ - bodyA: Body; - /** - * The second attached body. - */ - bodyB: Body; - } - /** - * The base joint class. Joints are used to constraint two bodies together in - * various fashions. Some joints also feature limits and motors. - */ - abstract class Joint { - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - constructor(def: JointDef); - constructor(def: JointOpt, bodyA: Body, bodyB: Body); - /** - * Short-cut function to determine if either body is inactive. - */ - isActive(): boolean; - /** - * Get the type of the concrete joint. - */ - getType(): string; - /** - * Get the first body attached to this joint. - */ - getBodyA(): Body; - /** - * Get the second body attached to this joint. - */ - getBodyB(): Body; - /** - * Get the next joint the world joint list. - */ - getNext(): Joint; - getUserData(): unknown; - setUserData(data: unknown): void; - /** - * Get collide connected. Note: modifying the collide connect flag won't work - * correctly because the flag is only checked when fixture AABBs begin to - * overlap. - */ - getCollideConnected(): boolean; - /** - * Get the anchor point on bodyA in world coordinates. - */ - abstract getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - abstract getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - abstract getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - abstract getReactionTorque(inv_dt: number): number; - /** - * Shift the origin for any points stored in world coordinates. - */ - shiftOrigin(newOrigin: Vec2Value): void; - abstract initVelocityConstraints(step: TimeStep): void; - abstract solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - abstract solvePositionConstraints(step: TimeStep): boolean; - /** - * @hidden @experimental - * Update joint with new props. - */ - abstract _reset(def: Partial): void; - } - interface Style { - stroke?: string; - fill?: string; - lineWidth?: number; - } - type KEY = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "right" | "left" | "up" | "down" | "fire"; - type ActiveKeys = { - [key in KEY]?: boolean; - }; - type TestbedMountOptions = {}; - abstract class Testbed { - /** - * Mounts testbed. Call start with a world to start simulation and rendering. - */ - static mount(options?: TestbedMountOptions): Testbed; - /** - * Mounts testbed if needed, then starts simulation and rendering. - * - * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`. - */ - static start(world: World): Testbed; - /** World viewbox width. */ - width: number; - /** World viewbox height. */ - height: number; - /** World viewbox center vertical offset. */ - x: number; - /** World viewbox center horizontal offset. */ - y: number; - /** @hidden */ - scaleY: number; - /** World simulation step frequency */ - hz: number; - /** World simulation speed, default is 1 */ - speed: number; - background: string; - mouseForce?: number; - activeKeys: ActiveKeys; - /** callback, to be implemented by user */ - step: (dt: number, t: number) => void; - /** callback, to be implemented by user */ - keydown: (keyCode: number, label: string) => void; - /** callback, to be implemented by user */ - keyup: (keyCode: number, label: string) => void; - abstract status(name: string, value: any): void; - abstract status(value: object | string): void; - abstract info(text: string): void; - color(r: number, g: number, b: number): string; - abstract drawPoint(p: { - x: number; - y: number; - }, r: any, color: string): void; - abstract drawCircle(p: { - x: number; - y: number; - }, r: number, color: string): void; - abstract drawEdge(a: { - x: number; - y: number; - }, b: { - x: number; - y: number; - }, color: string): void; - abstract drawSegment(a: { - x: number; - y: number; - }, b: { - x: number; - y: number; - }, color: string): void; - abstract drawPolygon(points: Array<{ - x: number; - y: number; - }>, color: string): void; - abstract drawAABB(aabb: AABBValue, color: string): void; - abstract start(world: World): void; - abstract findOne(query: string): (Body | Joint | Fixture | null); - abstract findAll(query: string): (Body | Joint | Fixture)[]; - } - type TestbedFactoryOptions = string | {}; - /** @deprecated */ - type TestbedCallback = (testbed: Testbed) => (World | undefined); - /** @deprecated */ - function testbed(callback: TestbedCallback): void; - /** @deprecated */ - function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void; - // todo make shape an interface - /** - * A shape is used for collision detection. You can create a shape however you - * like. Shapes used for simulation in World are created automatically when a - * Fixture is created. Shapes may encapsulate one or more child shapes. - */ - abstract class Shape { - /** @hidden */ m_type: ShapeType; - /** - * @hidden - * Radius of a shape. For polygonal shapes this must be b2_polygonRadius. - * There is no support for making rounded polygons. - */ - m_radius: number; - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - /** @hidden */ - abstract _reset(): void; - static isValid(obj: any): boolean; - abstract getRadius(): number; - /** - * Get the type of this shape. You can use this to down cast to the concrete - * shape. - * - * @return the shape type. - */ - abstract getType(): ShapeType; - /** - * Get the number of child primitives. - */ - abstract getChildCount(): number; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - abstract testPoint(xf: TransformValue, p: Vec2Value): boolean; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - abstract computeMass(massData: MassData, density?: number): void; - abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void; - } - type ShapeType = "circle" | "edge" | "polygon" | "chain"; - type DynamicTreeQueryCallback = (nodeId: number) => boolean; - /** - * A node in the dynamic tree. The client does not interact with this directly. - */ - class TreeNode { - id: number; - /** Enlarged AABB */ - aabb: AABB; - userData: T; - parent: TreeNode; - child1: TreeNode; - child2: TreeNode; - /** 0: leaf, -1: free node */ - height: number; - constructor(id?: number); - isLeaf(): boolean; - } - /** - * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A - * dynamic tree arranges data in a binary tree to accelerate queries such as - * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we - * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger - * than the client object. This allows the client object to move by small - * amounts without triggering a tree update. - * - * Nodes are pooled and relocatable, so we use node indices rather than - * pointers. - */ - class DynamicTree { - m_root: TreeNode; - m_lastProxyId: number; - m_nodes: { - [id: number]: TreeNode; - }; - constructor(); - /** - * Get proxy user data. - * - * @return the proxy user data or 0 if the id is invalid. - */ - getUserData(id: number): T; - /** - * Get the fat AABB for a node id. - * - * @return the proxy user data or 0 if the id is invalid. - */ - getFatAABB(id: number): AABB; - allocateNode(): TreeNode; - freeNode(node: TreeNode): void; - /** - * Create a proxy in the tree as a leaf node. We return the index of the node - * instead of a pointer so that we can grow the node pool. - * - * Create a proxy. Provide a tight fitting AABB and a userData pointer. - */ - createProxy(aabb: AABBValue, userData: T): number; - /** - * Destroy a proxy. This asserts if the id is invalid. - */ - destroyProxy(id: number): void; - /** - * Move a proxy with a swepted AABB. If the proxy has moved outside of its - * fattened AABB, then the proxy is removed from the tree and re-inserted. - * Otherwise the function returns immediately. - * - * @param d Displacement - * - * @return true if the proxy was re-inserted. - */ - moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean; - insertLeaf(leaf: TreeNode): void; - removeLeaf(leaf: TreeNode): void; - /** - * Perform a left or right rotation if node A is imbalanced. Returns the new - * root index. - */ - balance(iA: TreeNode): TreeNode; - /** - * Compute the height of the binary tree in O(N) time. Should not be called - * often. - */ - getHeight(): number; - /** - * Get the ratio of the sum of the node areas to the root area. - */ - getAreaRatio(): number; - /** - * Compute the height of a sub-tree. - */ - computeHeight(id?: number): number; - validateStructure(node: TreeNode): void; - validateMetrics(node: TreeNode): void; - /** - * Validate this tree. For testing. - */ - validate(): void; - /** - * Get the maximum balance of an node in the tree. The balance is the difference - * in height of the two children of a node. - */ - getMaxBalance(): number; - /** - * Build an optimal tree. Very expensive. For testing. - */ - rebuildBottomUp(): void; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void; - private inputPool; - private stackPool; - private iteratorPool; - } - /** - * The broad-phase wraps and extends a dynamic-tree to keep track of moved - * objects and query them on update. - */ - class BroadPhase { - m_tree: DynamicTree; - m_moveBuffer: number[]; - m_callback: (userDataA: any, userDataB: any) => void; - m_queryProxyId: number; - /** - * Get user data from a proxy. Returns null if the id is invalid. - */ - getUserData(proxyId: number): FixtureProxy; - /** - * Test overlap of fat AABBs. - */ - testOverlap(proxyIdA: number, proxyIdB: number): boolean; - /** - * Get the fat AABB for a proxy. - */ - getFatAABB(proxyId: number): AABB; - /** - * Get the number of proxies. - */ - getProxyCount(): number; - /** - * Get the height of the embedded tree. - */ - getTreeHeight(): number; - /** - * Get the balance (integer) of the embedded tree. - */ - getTreeBalance(): number; - /** - * Get the quality metric of the embedded tree. - */ - getTreeQuality(): number; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - query: (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback) => void; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs - * is called. - */ - createProxy(aabb: AABBValue, userData: FixtureProxy): number; - /** - * Destroy a proxy. It is up to the client to remove any pairs. - */ - destroyProxy(proxyId: number): void; - /** - * Call moveProxy as many times as you like, then when you are done call - * UpdatePairs to finalized the proxy pairs (for your time step). - */ - moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void; - /** - * Call to trigger a re-processing of it's pairs on the next call to - * UpdatePairs. - */ - touchProxy(proxyId: number): void; - bufferMove(proxyId: number): void; - unbufferMove(proxyId: number): void; - /** - * Update the pairs. This results in pair callbacks. This can only add pairs. - */ - updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void; - queryCallback: (proxyId: number) => boolean; - } - /** - * A fixture definition is used to create a fixture. This class defines an - * abstract fixture definition. You can reuse fixture definitions safely. - */ - interface FixtureOpt { - userData?: unknown; - /** - * The friction coefficient, usually in the range [0,1] - */ - friction?: number; - /** - * The restitution (elasticity) usually in the range [0,1] - */ - restitution?: number; - /** - * The density, usually in kg/m^2 - */ - density?: number; - /** - * A sensor shape collects contact information but never generates a collision response. - */ - isSensor?: boolean; - /** - * Zero, positive or negative collision group. - * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide. - */ - filterGroupIndex?: number; - /** - * Collision category bit or bits that this fixture belongs to. - * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa. - */ - filterCategoryBits?: number; - /** - * Collision category bit or bits that this fixture accept for collision. - */ - filterMaskBits?: number; - } - interface FixtureDef extends FixtureOpt { - shape: Shape; - } - /** - * This proxy is used internally to connect shape children to the broad-phase. - */ - class FixtureProxy { - aabb: AABB; - fixture: Fixture; - childIndex: number; - proxyId: number; - constructor(fixture: Fixture, childIndex: number); - } - /** - * A fixture is used to attach a shape to a body for collision detection. A - * fixture inherits its transform from its parent. Fixtures hold additional - * non-geometric data such as friction, collision filters, etc. - * - * To create a new Fixture use {@link Body.createFixture}. - */ - class Fixture { - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - constructor(body: Body, def: FixtureDef); - constructor(body: Body, shape: Shape, def?: FixtureOpt); - constructor(body: Body, shape: Shape, density?: number); - /** @hidden Re-setup fixture. */ - _reset(): void; - /** - * Get the type of the child shape. You can use this to down cast to the - * concrete shape. - */ - getType(): ShapeType; - /** - * Get the child shape. You can modify the child shape, however you should not - * change the number of vertices because this will crash some collision caching - * mechanisms. Manipulating the shape may lead to non-physical behavior. - */ - getShape(): Shape; - /** - * A sensor shape collects contact information but never generates a collision - * response. - */ - isSensor(): boolean; - /** - * Set if this fixture is a sensor. - */ - setSensor(sensor: boolean): void; - // /** - // * Get the contact filtering data. - // */ - // getFilterData() { - // return this.m_filter; - // } - /** - * Get the user data that was assigned in the fixture definition. Use this to - * store your application specific data. - */ - getUserData(): unknown; - /** - * Set the user data. Use this to store your application specific data. - */ - setUserData(data: unknown): void; - /** - * Get the parent body of this fixture. This is null if the fixture is not - * attached. - */ - getBody(): Body; - /** - * Get the next fixture in the parent body's fixture list. - */ - getNext(): Fixture | null; - /** - * Get the density of this fixture. - */ - getDensity(): number; - /** - * Set the density of this fixture. This will _not_ automatically adjust the - * mass of the body. You must call Body.resetMassData to update the body's mass. - */ - setDensity(density: number): void; - /** - * Get the coefficient of friction, usually in the range [0,1]. - */ - getFriction(): number; - /** - * Set the coefficient of friction. This will not change the friction of - * existing contacts. - */ - setFriction(friction: number): void; - /** - * Get the coefficient of restitution. - */ - getRestitution(): number; - /** - * Set the coefficient of restitution. This will not change the restitution of - * existing contacts. - */ - setRestitution(restitution: number): void; - /** - * Test a point in world coordinates for containment in this fixture. - */ - testPoint(p: Vec2Value): boolean; - /** - * Cast a ray against this shape. - */ - rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean; - /** - * Get the mass data for this fixture. The mass data is based on the density and - * the shape. The rotational inertia is about the shape's origin. This operation - * may be expensive. - */ - getMassData(massData: MassData): void; - /** - * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a - * more accurate AABB, compute it using the shape and the body transform. - */ - getAABB(childIndex: number): AABB; - /** - * These support body activation/deactivation. - */ - createProxies(broadPhase: BroadPhase, xf: TransformValue): void; - destroyProxies(broadPhase: BroadPhase): void; - /** - * Updates this fixture proxy in broad-phase (with combined AABB of current and - * next transformation). - */ - synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void; - /** - * Set the contact filtering data. This will not update contacts until the next - * time step when either parent body is active and awake. This automatically - * calls refilter. - */ - setFilterData(filter: { - groupIndex: number; - categoryBits: number; - maskBits: number; - }): void; - getFilterGroupIndex(): number; - setFilterGroupIndex(groupIndex: number): void; - getFilterCategoryBits(): number; - setFilterCategoryBits(categoryBits: number): void; - getFilterMaskBits(): number; - setFilterMaskBits(maskBits: number): void; - /** - * Call this if you want to establish collision that was previously disabled by - * ContactFilter. - */ - refilter(): void; - /** - * Implement this method to provide collision filtering, if you want finer - * control over contact creation. - * - * Return true if contact calculations should be performed between these two - * fixtures. - * - * Warning: for performance reasons this is only called when the AABBs begin to - * overlap. - */ - shouldCollide(that: Fixture): boolean; - } - enum ManifoldType { - e_unset = -1, - e_circles = 0, - e_faceA = 1, - e_faceB = 2 - } - enum ContactFeatureType { - e_unset = -1, - e_vertex = 0, - e_face = 1 - } - /** - * This is used for determining the state of contact points. - */ - enum PointState { - /** Point does not exist */ - nullState = 0, - /** Point was added in the update */ - addState = 1, - /** Point persisted across the update */ - persistState = 2, - /** Point was removed in the update */ - removeState = 3 - } - /** - * Used for computing contact manifolds. - */ - class ClipVertex { - v: Vec2Value; - id: ContactID; - set(o: ClipVertex): void; - recycle(): void; - } - /** - * A manifold for two touching convex shapes. Manifolds are created in `evaluate` - * method of Contact subclasses. - * - * Supported manifold types are e_faceA or e_faceB for clip point versus plane - * with radius and e_circles point versus point with radius. - * - * We store contacts in this way so that position correction can account for - * movement, which is critical for continuous physics. All contact scenarios - * must be expressed in one of these types. This structure is stored across time - * steps, so we keep it small. - */ - class Manifold { - type: ManifoldType; - /** - * Usage depends on manifold type: - * - circles: not used - * - faceA: the normal on polygonA - * - faceB: the normal on polygonB - */ - localNormal: Vec2Value; - /** - * Usage depends on manifold type: - * - circles: the local center of circleA - * - faceA: the center of faceA - * - faceB: the center of faceB - */ - localPoint: Vec2Value; - /** The points of contact */ - points: ManifoldPoint[]; - /** The number of manifold points */ - pointCount: number; - set(that: Manifold): void; - recycle(): void; - /** - * Evaluate the manifold with supplied transforms. This assumes modest motion - * from the original state. This does not change the point count, impulses, etc. - * The radii must come from the shapes that generated the manifold. - */ - getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold; - static clipSegmentToLine: typeof clipSegmentToLine; - static ClipVertex: typeof ClipVertex; - static getPointStates: typeof getPointStates; - static PointState: typeof PointState; - } - /** - * A manifold point is a contact point belonging to a contact manifold. It holds - * details related to the geometry and dynamics of the contact points. - * - * This structure is stored across time steps, so we keep it small. - * - * Note: impulses are used for internal caching and may not provide reliable - * contact forces, especially for high speed collisions. - */ - class ManifoldPoint { - /** - * Usage depends on manifold type: - * - circles: the local center of circleB - * - faceA: the local center of circleB or the clip point of polygonB - * - faceB: the clip point of polygonA - */ - localPoint: Vec2Value; - /** - * The non-penetration impulse - */ - normalImpulse: number; - /** - * The friction impulse - */ - tangentImpulse: number; - /** - * Uniquely identifies a contact point between two shapes to facilitate warm starting - */ - readonly id: ContactID; - set(that: ManifoldPoint): void; - recycle(): void; - } - /** - * Contact ids to facilitate warm starting. - * - * ContactFeature: The features that intersect to form the contact point. - */ - class ContactID { - /** - * Used to quickly compare contact ids. - */ - key: number; - /** ContactFeature index on shapeA */ - indexA: number; - /** ContactFeature index on shapeB */ - indexB: number; - /** ContactFeature type on shapeA */ - typeA: ContactFeatureType; - /** ContactFeature type on shapeB */ - typeB: ContactFeatureType; - setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void; - set(that: ContactID): void; - swapFeatures(): void; - recycle(): void; - } - /** - * This is used to compute the current state of a contact manifold. - */ - class WorldManifold { - /** World vector pointing from A to B */ - normal: Vec2Value; - /** World contact point (point of intersection) */ - points: Vec2Value[]; // [maxManifoldPoints] - /** A negative value indicates overlap, in meters */ - separations: number[]; // [maxManifoldPoints] - /** The number of manifold points */ - pointCount: number; - recycle(): void; - } - /** - * Compute the point states given two manifolds. The states pertain to the - * transition from manifold1 to manifold2. So state1 is either persist or remove - * while state2 is either add or persist. - */ - function getPointStates(state1: PointState[], state2: PointState[], manifold1: Manifold, manifold2: Manifold): void; - /** - * Clipping for contact manifolds. Sutherland-Hodgman clipping. - */ - function clipSegmentToLine(vOut: ClipVertex[], vIn: ClipVertex[], normal: Vec2Value, offset: number, vertexIndexA: number): number; - /** - * A contact edge is used to connect bodies and contacts together in a contact - * graph where each body is a node and each contact is an edge. A contact edge - * belongs to a doubly linked list maintained in each attached body. Each - * contact has two contact nodes, one for each attached body. - */ - class ContactEdge { - contact: Contact; - prev: ContactEdge | null; - next: ContactEdge | null; - other: Body | null; - constructor(contact: Contact); - } - type EvaluateFunction = (manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number) => void; - /** - * Friction mixing law. The idea is to allow either fixture to drive the - * friction to zero. For example, anything slides on ice. - */ - function mixFriction(friction1: number, friction2: number): number; - /** - * Restitution mixing law. The idea is allow for anything to bounce off an - * inelastic surface. For example, a superball bounces on anything. - */ - function mixRestitution(restitution1: number, restitution2: number): number; - const EPSILON = 1e-9; - /** - * @deprecated - * Next Largest Power of 2 Given a binary integer value x, the next largest - * power of 2 can be computed by a SWAR algorithm that recursively "folds" the - * upper bits into the lower bits. This process yields a bit vector with the - * same most significant 1 as x, but all 1's below it. Adding 1 to that value - * yields the next largest power of 2. For a 32-bit value: - */ - function nextPowerOfTwo(x: number): number; - /** @deprecated */ - function isPowerOfTwo(x: number): boolean; - /** @deprecated */ - function mod(num: number, min?: number, max?: number): number; - /** - * @deprecated - * Returns a min if num is less than min, and max if more than max, otherwise returns num. - */ - function clamp(num: number, min: number, max: number): number; - /** - * @deprecated - * Returns a random number between min and max when two arguments are provided. - * If one arg is provided between 0 to max. - * If one arg is passed between 0 to 1. - */ - function random(min?: number, max?: number): number; - /** @ignore */ - const math: any; - interface Vec3Value { - x: number; - y: number; - z: number; - } - class Vec3 { - x: number; - y: number; - z: number; - constructor(x: number, y: number, z: number); - constructor(obj: { - x: number; - y: number; - z: number; - }); - constructor(); - /** @hidden */ - static neo(x: number, y: number, z: number): Vec3; - static zero(): Vec3; - static clone(v: Vec3Value): Vec3; - /** @hidden */ - toString(): string; - /** Does this vector contain finite coordinates? */ - static isValid(obj: any): boolean; - static assert(o: any): void; - setZero(): Vec3; - set(x: number, y: number, z: number): Vec3; - add(w: Vec3Value): Vec3; - sub(w: Vec3Value): Vec3; - mul(m: number): Vec3; - static areEqual(v: Vec3Value, w: Vec3Value): boolean; - /** Dot product on two vectors */ - static dot(v: Vec3Value, w: Vec3Value): number; - /** Cross product on two vectors */ - static cross(v: Vec3Value, w: Vec3Value): Vec3; - static add(v: Vec3Value, w: Vec3Value): Vec3; - static sub(v: Vec3Value, w: Vec3Value): Vec3; - static mul(v: Vec3Value, m: number): Vec3; - neg(): Vec3; - static neg(v: Vec3Value): Vec3; - } - /** - * A 2-by-2 matrix. Stored in column-major order. - */ - class Mat22 { - ex: Vec2; - ey: Vec2; - constructor(a: number, b: number, c: number, d: number); - constructor(a: { - x: number; - y: number; - }, b: { - x: number; - y: number; - }); - constructor(); - /** @hidden */ - toString(): string; - static isValid(obj: any): boolean; - static assert(o: any): void; - set(a: Mat22): void; - set(a: Vec2Value, b: Vec2Value): void; - set(a: number, b: number, c: number, d: number): void; - setIdentity(): void; - setZero(): void; - getInverse(): Mat22; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - solve(v: Vec2Value): Vec2; - /** - * Multiply a matrix times a vector. If a rotation matrix is provided, then this - * transforms the vector from one frame to another. - */ - static mul(mx: Mat22, my: Mat22): Mat22; - static mul(mx: Mat22, v: Vec2Value): Vec2; - static mulVec2(mx: Mat22, v: Vec2Value): Vec2; - static mulMat22(mx: Mat22, v: Mat22): Mat22; - /** - * Multiply a matrix transpose times a vector. If a rotation matrix is provided, - * then this transforms the vector from one frame to another (inverse - * transform). - */ - static mulT(mx: Mat22, my: Mat22): Mat22; - static mulT(mx: Mat22, v: Vec2Value): Vec2; - static mulTVec2(mx: Mat22, v: Vec2Value): Vec2; - static mulTMat22(mx: Mat22, v: Mat22): Mat22; - static abs(mx: Mat22): Mat22; - static add(mx1: Mat22, mx2: Mat22): Mat22; - } - /** - * A 3-by-3 matrix. Stored in column-major order. - */ - class Mat33 { - ex: Vec3; - ey: Vec3; - ez: Vec3; - constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value); - constructor(); - /** @hidden */ - toString(): string; - static isValid(obj: any): boolean; - static assert(o: any): void; - /** - * Set this matrix to all zeros. - */ - setZero(): Mat33; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - solve33(v: Vec3Value): Vec3; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix - * equation. - */ - solve22(v: Vec2Value): Vec2; - /** - * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if - * singular. - */ - getInverse22(M: Mat33): void; - /** - * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix - * if singular. - */ - getSymInverse33(M: Mat33): void; - /** - * Multiply a matrix times a vector. - */ - static mul(a: Mat33, b: Vec2Value): Vec2; - static mul(a: Mat33, b: Vec3Value): Vec3; - static mulVec3(a: Mat33, b: Vec3Value): Vec3; - static mulVec2(a: Mat33, b: Vec2Value): Vec2; - static add(a: Mat33, b: Mat33): Mat33; - } - class CircleShape extends Shape { - static TYPE: "circle"; - /** @hidden */ m_type: "circle"; - /** @hidden */ m_p: Vec2; - /** @hidden */ m_radius: number; - constructor(position: Vec2Value, radius?: number); - constructor(radius?: number); - /** @hidden */ - _reset(): void; - getType(): "circle"; - getRadius(): number; - getCenter(): Vec2; - /** - * Get the number of child primitives. - */ - getChildCount(): 1; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): boolean; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density: number): void; - computeDistanceProxy(proxy: DistanceProxy): void; - } - const Circle: typeof CircleShape; - /** - * A line segment (edge) shape. These can be connected in chains or loops to - * other edge shapes. The connectivity information is used to ensure correct - * contact normals. - */ - class EdgeShape extends Shape { - static TYPE: "edge"; - /** @hidden */ m_type: "edge"; - /** @hidden */ m_radius: number; - // These are the edge vertices - /** @hidden */ m_vertex1: Vec2; - /** @hidden */ m_vertex2: Vec2; - // Optional adjacent vertices. These are used for smooth collision. - // Used by chain shape. - /** @hidden */ m_vertex0: Vec2; - /** @hidden */ m_vertex3: Vec2; - /** @hidden */ m_hasVertex0: boolean; - /** @hidden */ m_hasVertex3: boolean; - constructor(v1?: Vec2Value, v2?: Vec2Value); - /** @hidden */ - _reset(): void; - getRadius(): number; - getType(): "edge"; - /** - * Optional next vertex, used for smooth collision. - */ - setNextVertex(v?: Vec2Value): EdgeShape; - /** - * Optional next vertex, used for smooth collision. - */ - getNextVertex(): Vec2; - /** - * Optional prev vertex, used for smooth collision. - */ - setPrevVertex(v?: Vec2Value): EdgeShape; - /** - * Optional prev vertex, used for smooth collision. - */ - getPrevVertex(): Vec2; - /** - * Set this as an isolated edge. - */ - _set(v1: Vec2Value, v2: Vec2Value): EdgeShape; - /** - * Get the number of child primitives. - */ - getChildCount(): 1; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): false; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density?: number): void; - computeDistanceProxy(proxy: DistanceProxy): void; - } - const Edge: typeof EdgeShape; - /** - * A convex polygon. It is assumed that the interior of the polygon is to the - * left of each edge. Polygons have a maximum number of vertices equal to - * Settings.maxPolygonVertices. In most cases you should not need many vertices - * for a convex polygon. extends Shape - */ - class PolygonShape extends Shape { - static TYPE: "polygon"; - /** @hidden */ m_type: "polygon"; - /** @hidden */ m_centroid: Vec2; - /** @hidden */ m_vertices: Vec2[]; // [Settings.maxPolygonVertices] - /** @hidden */ m_normals: Vec2[]; // [Settings.maxPolygonVertices] - /** @hidden */ m_count: number; - /** @hidden */ m_radius: number; - constructor(vertices?: Vec2Value[]); - getType(): "polygon"; - getRadius(): number; - /** - * Get the number of child primitives. - */ - getChildCount(): 1; - /** @hidden */ - _reset(): void; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): boolean; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density: number): void; - /** - * Validate convexity. This is a very time consuming operation. - * @returns true if valid - */ - validate(): boolean; - computeDistanceProxy(proxy: DistanceProxy): void; - } - const Polygon: typeof PolygonShape; - /** - * A chain shape is a free form sequence of line segments. The chain has - * two-sided collision, so you can use inside and outside collision. Therefore, - * you may use any winding order. Connectivity information is used to create - * smooth collisions. - * - * WARNING: The chain will not collide properly if there are self-intersections. - */ - class ChainShape extends Shape { - static TYPE: "chain"; - /** @hidden */ m_type: "chain"; - /** @hidden */ m_radius: number; - /** @hidden */ m_vertices: Vec2[]; - /** @hidden */ m_count: number; - /** @hidden */ m_prevVertex: Vec2 | null; - /** @hidden */ m_nextVertex: Vec2 | null; - /** @hidden */ m_hasPrevVertex: boolean; - /** @hidden */ m_hasNextVertex: boolean; - /** @hidden */ m_isLoop: boolean; - constructor(vertices?: Vec2Value[], loop?: boolean); - // clear() { - // this.m_vertices.length = 0; - // this.m_count = 0; - // } - getType(): "chain"; - getRadius(): number; - /** @hidden */ - _reset(): void; - /** - * Establish connectivity to a vertex that precedes the first vertex. Don't call - * this for loops. - */ - setPrevVertex(prevVertex: Vec2): void; - getPrevVertex(): Vec2; - /** - * Establish connectivity to a vertex that follows the last vertex. Don't call - * this for loops. - */ - setNextVertex(nextVertex: Vec2): void; - getNextVertex(): Vec2; - /** - * Get the number of child primitives. - */ - getChildCount(): number; - // Get a child edge. - getChildEdge(edge: EdgeShape, childIndex: number): void; - getVertex(index: number): Vec2; - isLoop(): boolean; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * This always return false. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - testPoint(xf: TransformValue, p: Vec2Value): false; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * Chains have zero mass. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - computeMass(massData: MassData, density?: number): void; - computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void; - } - const Chain: typeof ChainShape; - /** - * A rectangle polygon which extend PolygonShape. - */ - class BoxShape extends PolygonShape { - // note that box is serialized/deserialized as polygon - static TYPE: "polygon"; - /** - * - * @param halfWidth - * @param halfHeight - * @param center coordinate of the center of the box relative to the body - * @param angle angle of the box relative to the body - */ - constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number); - } - const Box: typeof BoxShape; - const CollideCircles: (manifold: Manifold, circleA: CircleShape, xfA: Transform, circleB: CircleShape, xfB: Transform) => void; - // Compute contact points for edge versus circle. - // This accounts for edge connectivity. - const CollideEdgeCircle: (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue) => void; - /** - * - * Find edge normal of max separation on A - return if separating axis is found
- * Find edge normal of max separation on B - return if separation axis is found
- * Choose reference edge as min(minA, minB)
- * Find incident edge
- * Clip - * - * The normal points from 1 to 2 - */ - const CollidePolygons: (manifold: Manifold, polyA: PolygonShape, xfA: TransformValue, polyB: PolygonShape, xfB: TransformValue) => void; - const CollidePolygonCircle: (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue) => void; - /** - * This function collides and edge and a polygon, taking into account edge - * adjacency. - */ - const CollideEdgePolygon: (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue) => void; - /** - * Distance joint definition. This requires defining an anchor point on both - * bodies and the non-zero length of the distance joint. The definition uses - * local anchor points so that the initial configuration can violate the - * constraint slightly. This helps when saving and loading a game. Warning: Do - * not use a zero or short length. - */ - interface DistanceJointOpt extends JointOpt { - /** - * The mass-spring-damper frequency in Hertz. A value of 0 disables softness. - */ - frequencyHz?: number; - /** - * The damping ratio. 0 = no damping, 1 = critical damping. - */ - dampingRatio?: number; - /** - * Distance length. - */ - length?: number; - } - /** - * Distance joint definition. This requires defining an anchor point on both - * bodies and the non-zero length of the distance joint. The definition uses - * local anchor points so that the initial configuration can violate the - * constraint slightly. This helps when saving and loading a game. Warning: Do - * not use a zero or short length. - */ - interface DistanceJointDef extends JointDef, DistanceJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - } - /** - * A distance joint constrains two points on two bodies to remain at a fixed - * distance from each other. You can view this as a massless, rigid rod. - */ - class DistanceJoint extends Joint { - static TYPE: "distance-joint"; - /** - * @param def DistanceJoint definition. - */ - constructor(def: DistanceJointDef); - /** - * @param anchorA Anchor A in global coordination. - * @param anchorB Anchor B in global coordination. - */ - constructor(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Set the natural length. Manipulating the length can lead to non-physical - * behavior when the frequency is zero. - */ - setLength(length: number): void; - /** - * Get the natural length. - */ - getLength(): number; - setFrequency(hz: number): void; - getFrequency(): number; - setDampingRatio(ratio: number): void; - getDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Friction joint definition. - */ - interface FrictionJointOpt extends JointOpt { - /** - * The maximum friction force in N. - */ - maxForce?: number; - /** - * The maximum friction torque in N-m. - */ - maxTorque?: number; - } - /** - * Friction joint definition. - */ - interface FrictionJointDef extends JointDef, FrictionJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - } - /** - * Friction joint. This is used for top-down friction. It provides 2D - * translational friction and angular friction. - */ - class FrictionJoint extends Joint { - static TYPE: "friction-joint"; - constructor(def: FrictionJointDef); - /** - * @param anchor Anchor in global coordination. - */ - constructor(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Set the maximum friction force in N. - */ - setMaxForce(force: number): void; - /** - * Get the maximum friction force in N. - */ - getMaxForce(): number; - /** - * Set the maximum friction torque in N*m. - */ - setMaxTorque(torque: number): void; - /** - * Get the maximum friction torque in N*m. - */ - getMaxTorque(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Revolute joint definition. This requires defining an anchor point where the - * bodies are joined. The definition uses local anchor points so that the - * initial configuration can violate the constraint slightly. You also need to - * specify the initial relative angle for joint limits. This helps when saving - * and loading a game. - * - * The local anchor points are measured from the body's origin rather than the - * center of mass because: 1. you might not know where the center of mass will - * be. 2. if you add/remove shapes from a body and recompute the mass, the - * joints will be broken. - */ - interface RevoluteJointOpt extends JointOpt { - /** - * The lower angle for the joint limit (radians). - */ - lowerAngle?: number; - /** - * The upper angle for the joint limit (radians). - */ - upperAngle?: number; - /** - * The maximum motor torque used to achieve the desired motor speed. Usually - * in N-m. - */ - maxMotorTorque?: number; - /** - * The desired motor speed. Usually in radians per second. - */ - motorSpeed?: number; - /** - * A flag to enable joint limits. - */ - enableLimit?: boolean; - /** - * A flag to enable the joint motor. - */ - enableMotor?: boolean; - } - /** - * Revolute joint definition. This requires defining an anchor point where the - * bodies are joined. The definition uses local anchor points so that the - * initial configuration can violate the constraint slightly. You also need to - * specify the initial relative angle for joint limits. This helps when saving - * and loading a game. - * - * The local anchor points are measured from the body's origin rather than the - * center of mass because: 1. you might not know where the center of mass will - * be. 2. if you add/remove shapes from a body and recompute the mass, the - * joints will be broken. - */ - interface RevoluteJointDef extends JointDef, RevoluteJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The bodyB angle minus bodyA angle in the reference state (radians). - */ - referenceAngle: number; - } - /** - * A revolute joint constrains two bodies to share a common point while they are - * free to rotate about the point. The relative rotation about the shared point - * is the joint angle. You can limit the relative rotation with a joint limit - * that specifies a lower and upper angle. You can use a motor to drive the - * relative rotation about the shared point. A maximum motor torque is provided - * so that infinite forces are not generated. - */ - class RevoluteJoint extends Joint { - static TYPE: "revolute-joint"; - constructor(def: RevoluteJointDef); - constructor(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Get the reference angle. - */ - getReferenceAngle(): number; - /** - * Get the current joint angle in radians. - */ - getJointAngle(): number; - /** - * Get the current joint angle speed in radians per second. - */ - getJointSpeed(): number; - /** - * Is the joint motor enabled? - */ - isMotorEnabled(): boolean; - /** - * Enable/disable the joint motor. - */ - enableMotor(flag: boolean): void; - /** - * Get the current motor torque given the inverse time step. Unit is N*m. - */ - getMotorTorque(inv_dt: number): number; - /** - * Set the motor speed in radians per second. - */ - setMotorSpeed(speed: number): void; - /** - * Get the motor speed in radians per second. - */ - getMotorSpeed(): number; - /** - * Set the maximum motor torque, usually in N-m. - */ - setMaxMotorTorque(torque: number): void; - getMaxMotorTorque(): number; - /** - * Is the joint limit enabled? - */ - isLimitEnabled(): boolean; - /** - * Enable/disable the joint limit. - */ - enableLimit(flag: boolean): void; - /** - * Get the lower joint limit in radians. - */ - getLowerLimit(): number; - /** - * Get the upper joint limit in radians. - */ - getUpperLimit(): number; - /** - * Set the joint limits in radians. - */ - setLimits(lower: number, upper: number): void; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force given the inverse time step. Unit is N. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque due to the joint limit given the inverse time step. - * Unit is N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Prismatic joint definition. This requires defining a line of motion using an - * axis and an anchor point. The definition uses local anchor points and a local - * axis so that the initial configuration can violate the constraint slightly. - * The joint translation is zero when the local anchor points coincide in world - * space. Using local anchors and a local axis helps when saving and loading a - * game. - */ - interface PrismaticJointOpt extends JointOpt { - /** - * Enable/disable the joint limit. - */ - enableLimit?: boolean; - /** - * The lower translation limit, usually in meters. - */ - lowerTranslation?: number; - /** - * The upper translation limit, usually in meters. - */ - upperTranslation?: number; - /** - * Enable/disable the joint motor. - */ - enableMotor?: boolean; - /** - * The maximum motor torque, usually in N-m. - */ - maxMotorForce?: number; - /** - * The desired motor speed in radians per second. - */ - motorSpeed?: number; - } - /** - * Prismatic joint definition. This requires defining a line of motion using an - * axis and an anchor point. The definition uses local anchor points and a local - * axis so that the initial configuration can violate the constraint slightly. - * The joint translation is zero when the local anchor points coincide in world - * space. Using local anchors and a local axis helps when saving and loading a - * game. - */ - interface PrismaticJointDef extends JointDef, PrismaticJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The local translation unit axis in bodyA. - */ - localAxisA: Vec2Value; - /** - * referenceAngle The constrained angle between the bodies: - * bodyB_angle - bodyA_angle. - */ - referenceAngle: number; - } - /** - * A prismatic joint. This joint provides one degree of freedom: translation - * along an axis fixed in bodyA. Relative rotation is prevented. You can use a - * joint limit to restrict the range of motion and a joint motor to drive the - * motion or to model joint friction. - */ - class PrismaticJoint extends Joint { - static TYPE: "prismatic-joint"; - constructor(def: PrismaticJointDef); - constructor(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * The local joint axis relative to bodyA. - */ - getLocalAxisA(): Vec2; - /** - * Get the reference angle. - */ - getReferenceAngle(): number; - /** - * Get the current joint translation, usually in meters. - */ - getJointTranslation(): number; - /** - * Get the current joint translation speed, usually in meters per second. - */ - getJointSpeed(): number; - /** - * Is the joint limit enabled? - */ - isLimitEnabled(): boolean; - /** - * Enable/disable the joint limit. - */ - enableLimit(flag: boolean): void; - /** - * Get the lower joint limit, usually in meters. - */ - getLowerLimit(): number; - /** - * Get the upper joint limit, usually in meters. - */ - getUpperLimit(): number; - /** - * Set the joint limits, usually in meters. - */ - setLimits(lower: number, upper: number): void; - /** - * Is the joint motor enabled? - */ - isMotorEnabled(): boolean; - /** - * Enable/disable the joint motor. - */ - enableMotor(flag: boolean): void; - /** - * Set the motor speed, usually in meters per second. - */ - setMotorSpeed(speed: number): void; - /** - * Set the maximum motor force, usually in N. - */ - setMaxMotorForce(force: number): void; - getMaxMotorForce(): number; - /** - * Get the motor speed, usually in meters per second. - */ - getMotorSpeed(): number; - /** - * Get the current motor force given the inverse time step, usually in N. - */ - getMotorForce(inv_dt: number): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Gear joint definition. - */ - interface GearJointOpt extends JointOpt { - /** - * The gear ratio. See {@link GearJoint} for explanation. - */ - ratio?: number; - } - /** - * Gear joint definition. - */ - interface GearJointDef extends JointDef, GearJointOpt { - /** - * The first revolute/prismatic joint attached to the gear joint. - */ - joint1: RevoluteJoint | PrismaticJoint; - /** - * The second prismatic/revolute joint attached to the gear joint. - */ - joint2: RevoluteJoint | PrismaticJoint; - } - /** - * A gear joint is used to connect two joints together. Either joint can be a - * revolute or prismatic joint. You specify a gear ratio to bind the motions - * together: coordinate1 + ratio * coordinate2 = constant - * - * The ratio can be negative or positive. If one joint is a revolute joint and - * the other joint is a prismatic joint, then the ratio will have units of - * length or units of 1/length. Warning: You have to manually destroy the gear - * joint if joint1 or joint2 is destroyed. - * - * This definition requires two existing revolute or prismatic joints (any - * combination will work). - */ - class GearJoint extends Joint { - static TYPE: "gear-joint"; - constructor(def: GearJointDef); - constructor(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number); - /** @hidden */ - _reset(def: Partial): void; - /** - * Get the first joint. - */ - getJoint1(): Joint; - /** - * Get the second joint. - */ - getJoint2(): Joint; - /** - * Set the gear ratio. - */ - setRatio(ratio: number): void; - /** - * Get the gear ratio. - */ - getRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Motor joint definition. - */ - interface MotorJointOpt extends JointOpt { - /** - * The bodyB angle minus bodyA angle in radians. - */ - angularOffset?: number; - /** - * The maximum motor force in N. - */ - maxForce?: number; - /** - * The maximum motor torque in N-m. - */ - maxTorque?: number; - /** - * Position correction factor in the range [0,1]. - */ - correctionFactor?: number; - /** - * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters. - */ - linearOffset?: Vec2Value; - } - /** - * Motor joint definition. - */ - interface MotorJointDef extends JointDef, MotorJointOpt { - } - /** - * A motor joint is used to control the relative motion between two bodies. A - * typical usage is to control the movement of a dynamic body with respect to - * the ground. - */ - class MotorJoint extends Joint { - static TYPE: "motor-joint"; - constructor(def: MotorJointDef); - constructor(def: MotorJointOpt, bodyA: Body, bodyB: Body); - /** @hidden */ - _reset(def: Partial): void; - /** - * Set the maximum friction force in N. - */ - setMaxForce(force: number): void; - /** - * Get the maximum friction force in N. - */ - getMaxForce(): number; - /** - * Set the maximum friction torque in N*m. - */ - setMaxTorque(torque: number): void; - /** - * Get the maximum friction torque in N*m. - */ - getMaxTorque(): number; - /** - * Set the position correction factor in the range [0,1]. - */ - setCorrectionFactor(factor: number): void; - /** - * Get the position correction factor in the range [0,1]. - */ - getCorrectionFactor(): number; - /** - * Set/get the target linear offset, in frame A, in meters. - */ - setLinearOffset(linearOffset: Vec2Value): void; - getLinearOffset(): Vec2; - /** - * Set/get the target angular offset, in radians. - */ - setAngularOffset(angularOffset: number): void; - getAngularOffset(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Mouse joint definition. This requires a world target point, tuning - * parameters, and the time step. - */ - interface MouseJointOpt extends JointOpt { - /** - * [maxForce = 0.0] The maximum constraint force that can be exerted to move - * the candidate body. Usually you will express as some multiple of the - * weight (multiplier * mass * gravity). - */ - maxForce?: number; - /** - * [frequencyHz = 5.0] The response speed. - */ - frequencyHz?: number; - /** - * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical - * damping. - */ - dampingRatio?: number; - } - /** - * Mouse joint definition. This requires a world target point, tuning - * parameters, and the time step. - */ - interface MouseJointDef extends JointDef, MouseJointOpt { - /** - * The initial world target point. This is assumed to coincide with the body - * anchor initially. - */ - target: Vec2Value; - } - /** - * A mouse joint is used to make a point on a body track a specified world - * point. This a soft constraint with a maximum force. This allows the - * constraint to stretch and without applying huge forces. - * - * You need to call setTarget(target) every time that mouse is - * moved, to track the new location of the mouse. - * - * NOTE: this joint is not documented in the manual because it was developed to - * be used in the testbed. If you want to learn how to use the mouse joint, look - * at the testbed. - */ - class MouseJoint extends Joint { - static TYPE: "mouse-joint"; - constructor(def: MouseJointDef); - constructor(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * Use this to update the target point. - */ - setTarget(target: Vec2Value): void; - getTarget(): Vec2; - /** - * Set the maximum force in Newtons. - */ - setMaxForce(force: number): void; - /** - * Get the maximum force in Newtons. - */ - getMaxForce(): number; - /** - * Set the frequency in Hertz. - */ - setFrequency(hz: number): void; - /** - * Get the frequency in Hertz. - */ - getFrequency(): number; - /** - * Set the damping ratio (dimensionless). - */ - setDampingRatio(ratio: number): void; - /** - * Get the damping ratio (dimensionless). - */ - getDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - /** - * Shift the origin for any points stored in world coordinates. - */ - shiftOrigin(newOrigin: Vec2Value): void; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Pulley joint definition. This requires two ground anchors, two dynamic body - * anchor points, and a pulley ratio. - */ - // tslint:disable-next-line:no-empty-interface - interface PulleyJointOpt extends JointOpt { - } - /** - * Pulley joint definition. This requires two ground anchors, two dynamic body - * anchor points, and a pulley ratio. - */ - interface PulleyJointDef extends JointDef, PulleyJointOpt { - /** - * The first ground anchor in world coordinates. This point never moves. - */ - groundAnchorA: Vec2Value; - /** - * The second ground anchor in world coordinates. This point never moves. - */ - groundAnchorB: Vec2Value; - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The reference length for the segment attached to bodyA. - */ - lengthA: number; - /** - * The reference length for the segment attached to bodyB. - */ - lengthB: number; - /** - * The pulley ratio, used to simulate a block-and-tackle. - */ - ratio: number; - /** @hidden */ anchorA?: Vec2Value; - /** @hidden */ anchorB?: Vec2Value; - } - /** - * The pulley joint is connected to two bodies and two fixed ground points. The - * pulley supports a ratio such that: length1 + ratio * length2 <= constant - * - * Yes, the force transmitted is scaled by the ratio. - * - * Warning: the pulley joint can get a bit squirrelly by itself. They often work - * better when combined with prismatic joints. You should also cover the the - * anchor points with static shapes to prevent one side from going to zero - * length. - */ - class PulleyJoint extends Joint { - static TYPE: "pulley-joint"; - constructor(def: PulleyJointDef); - constructor(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number); - /** @hidden */ - _reset(def: Partial): void; - /** - * Get the first ground anchor. - */ - getGroundAnchorA(): Vec2; - /** - * Get the second ground anchor. - */ - getGroundAnchorB(): Vec2; - /** - * Get the current length of the segment attached to bodyA. - */ - getLengthA(): number; - /** - * Get the current length of the segment attached to bodyB. - */ - getLengthB(): number; - /** - * Get the pulley ratio. - */ - getRatio(): number; - /** - * Get the current length of the segment attached to bodyA. - */ - getCurrentLengthA(): number; - /** - * Get the current length of the segment attached to bodyB. - */ - getCurrentLengthB(): number; - /** - * Shift the origin for any points stored in world coordinates. - * - * @param newOrigin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Rope joint definition. This requires two body anchor points and a maximum - * lengths. Note: by default the connected objects will not collide. see - * collideConnected in JointDef. - */ - interface RopeJointOpt extends JointOpt { - /** - * The maximum length of the rope. - * Warning: this must be larger than linearSlop or the joint will have no effect. - */ - maxLength?: number; - } - /** - * Rope joint definition. This requires two body anchor points and a maximum - * lengths. Note: by default the connected objects will not collide. see - * collideConnected in JointDef. - */ - interface RopeJointDef extends JointDef, RopeJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - } - /** - * A rope joint enforces a maximum distance between two points on two bodies. It - * has no other effect. - * - * Warning: if you attempt to change the maximum length during the simulation - * you will get some non-physical behavior. - * - * A model that would allow you to dynamically modify the length would have some - * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you - * want to dynamically control length. - */ - class RopeJoint extends Joint { - static TYPE: "rope-joint"; - constructor(def: RopeJointDef); - constructor(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Set the maximum length of the rope. - */ - setMaxLength(length: number): void; - /** - * Get the maximum length of the rope. - */ - getMaxLength(): number; - getLimitState(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Weld joint definition. You need to specify local anchor points where they are - * attached and the relative body angle. The position of the anchor points is - * important for computing the reaction torque. - */ - interface WeldJointOpt extends JointOpt { - /** - * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness - * with a value of 0. - */ - frequencyHz?: number; - /** - * The damping ratio. 0 = no damping, 1 = critical damping. - */ - dampingRatio?: number; - /** - * The bodyB angle minus bodyA angle in the reference state (radians). - */ - referenceAngle?: number; - } - /** - * Weld joint definition. You need to specify local anchor points where they are - * attached and the relative body angle. The position of the anchor points is - * important for computing the reaction torque. - */ - interface WeldJointDef extends JointDef, WeldJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - } - /** - * A weld joint essentially glues two bodies together. A weld joint may distort - * somewhat because the island constraint solver is approximate. - */ - class WeldJoint extends Joint { - static TYPE: "weld-joint"; - constructor(def: WeldJointDef); - constructor(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * Get the reference angle. - */ - getReferenceAngle(): number; - /** - * Set frequency in Hz. - */ - setFrequency(hz: number): void; - /** - * Get frequency in Hz. - */ - getFrequency(): number; - /** - * Set damping ratio. - */ - setDampingRatio(ratio: number): void; - /** - * Get damping ratio. - */ - getDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Wheel joint definition. This requires defining a line of motion using an axis - * and an anchor point. The definition uses local anchor points and a local axis - * so that the initial configuration can violate the constraint slightly. The - * joint translation is zero when the local anchor points coincide in world - * space. Using local anchors and a local axis helps when saving and loading a - * game. - */ - interface WheelJointOpt extends JointOpt { - /** - * Enable/disable the joint motor. - */ - enableMotor?: boolean; - /** - * The maximum motor torque, usually in N-m. - */ - maxMotorTorque?: number; - /** - * The desired motor speed in radians per second. - */ - motorSpeed?: number; - /** - * Suspension frequency, zero indicates no suspension. - */ - frequencyHz?: number; - /** - * Suspension damping ratio, one indicates critical damping. - */ - dampingRatio?: number; - } - /** - * Wheel joint definition. This requires defining a line of motion using an axis - * and an anchor point. The definition uses local anchor points and a local axis - * so that the initial configuration can violate the constraint slightly. The - * joint translation is zero when the local anchor points coincide in world - * space. Using local anchors and a local axis helps when saving and loading a - * game. - */ - interface WheelJointDef extends JointDef, WheelJointOpt { - /** - * The local anchor point relative to bodyA's origin. - */ - localAnchorA: Vec2Value; - /** - * The local anchor point relative to bodyB's origin. - */ - localAnchorB: Vec2Value; - /** - * The local translation axis in bodyA. - */ - localAxisA: Vec2Value; - } - /** - * A wheel joint. This joint provides two degrees of freedom: translation along - * an axis fixed in bodyA and rotation in the plane. In other words, it is a - * point to line constraint with a rotational motor and a linear spring/damper. - * This joint is designed for vehicle suspensions. - */ - class WheelJoint extends Joint { - static TYPE: "wheel-joint"; - constructor(def: WheelJointDef); - constructor(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value); - /** @hidden */ - _reset(def: Partial): void; - /** - * The local anchor point relative to bodyA's origin. - */ - getLocalAnchorA(): Vec2; - /** - * The local anchor point relative to bodyB's origin. - */ - getLocalAnchorB(): Vec2; - /** - * The local joint axis relative to bodyA. - */ - getLocalAxisA(): Vec2; - /** - * Get the current joint translation, usually in meters. - */ - getJointTranslation(): number; - /** - * Get the current joint translation speed, usually in meters per second. - */ - getJointSpeed(): number; - /** - * Is the joint motor enabled? - */ - isMotorEnabled(): boolean; - /** - * Enable/disable the joint motor. - */ - enableMotor(flag: boolean): void; - /** - * Set the motor speed, usually in radians per second. - */ - setMotorSpeed(speed: number): void; - /** - * Get the motor speed, usually in radians per second. - */ - getMotorSpeed(): number; - /** - * Set/Get the maximum motor force, usually in N-m. - */ - setMaxMotorTorque(torque: number): void; - getMaxMotorTorque(): number; - /** - * Get the current motor torque given the inverse time step, usually in N-m. - */ - getMotorTorque(inv_dt: number): number; - /** - * Set/Get the spring frequency in hertz. Setting the frequency to zero disables - * the spring. - */ - setSpringFrequencyHz(hz: number): void; - getSpringFrequencyHz(): number; - /** - * Set/Get the spring damping ratio - */ - setSpringDampingRatio(ratio: number): void; - getSpringDampingRatio(): number; - /** - * Get the anchor point on bodyA in world coordinates. - */ - getAnchorA(): Vec2; - /** - * Get the anchor point on bodyB in world coordinates. - */ - getAnchorB(): Vec2; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - getReactionForce(inv_dt: number): Vec2; - /** - * Get the reaction torque on bodyB in N*m. - */ - getReactionTorque(inv_dt: number): number; - initVelocityConstraints(step: TimeStep): void; - solveVelocityConstraints(step: TimeStep): void; - /** - * This returns true if the position errors are within tolerance. - */ - solvePositionConstraints(step: TimeStep): boolean; - } - /** - * Tuning constants based on meters-kilograms-seconds (MKS) units. - * - * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units. - */ - class Settings { - /** - * You can use this to change the length scale used by your game. - * - * For example for inches you could use 39.4. - */ - static lengthUnitsPerMeter: number; - // Collision - /** - * The maximum number of contact points between two convex shapes. Do not change - * this value. - */ - static maxManifoldPoints: number; - /** - * The maximum number of vertices on a convex polygon. You cannot increase this - * too much because BlockAllocator has a maximum object size. - */ - static maxPolygonVertices: number; - /** - * This is used to fatten AABBs in the dynamic tree. This allows proxies to move - * by a small amount without triggering a tree adjustment. This is in meters. - */ - static aabbExtension: number; - /** - * This is used to fatten AABBs in the dynamic tree. This is used to predict the - * future position based on the current displacement. This is a dimensionless - * multiplier. - */ - static aabbMultiplier: number; - /** - * A small length used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - static linearSlop: number; - /** - * A small angle used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - static angularSlop: number; - /** - * The radius of the polygon/edge shape skin. This should not be modified. - * Making this smaller means polygons will have an insufficient buffer for - * continuous collision. Making it larger may create artifacts for vertex - * collision. - */ - static get polygonRadius(): number; - /** - * Maximum number of sub-steps per contact in continuous physics simulation. - */ - static maxSubSteps: number; - // Dynamics - /** - * Maximum number of contacts to be handled to solve a TOI impact. - */ - static maxTOIContacts: number; - /** - * Maximum iterations to solve a TOI. - */ - static maxTOIIterations: number; - /** - * Maximum iterations to find Distance. - */ - static maxDistanceIterations: number; - /** - * A velocity threshold for elastic collisions. Any collision with a relative - * linear velocity below this threshold will be treated as inelastic. - */ - static velocityThreshold: number; - /** - * The maximum linear position correction used when solving constraints. This - * helps to prevent overshoot. - */ - static maxLinearCorrection: number; - /** - * The maximum angular position correction used when solving constraints. This - * helps to prevent overshoot. - */ - static maxAngularCorrection: number; - /** - * The maximum linear velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - static maxTranslation: number; - /** - * The maximum angular velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - static maxRotation: number; - /** - * This scale factor controls how fast overlap is resolved. Ideally this would - * be 1 so that overlap is removed in one time step. However using values close - * to 1 often lead to overshoot. - */ - static baumgarte: number; - static toiBaugarte: number; - // Sleep - /** - * The time that a body must be still before it will go to sleep. - */ - static timeToSleep: number; - /** - * A body cannot sleep if its linear velocity is above this tolerance. - */ - static linearSleepTolerance: number; - /** - * A body cannot sleep if its angular velocity is above this tolerance. - */ - static angularSleepTolerance: number; - } - /** - * This describes the motion of a body/shape for TOI computation. Shapes are - * defined with respect to the body origin, which may not coincide with the - * center of mass. However, to support dynamics we must interpolate the center - * of mass position. - */ - class Sweep { - /** Local center of mass position */ - localCenter: Vec2; - /** World center position */ - c: Vec2; - /** World angle */ - a: number; - /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */ - alpha0: number; - c0: Vec2; - a0: number; - setTransform(xf: TransformValue): void; - setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void; - /** - * Get the interpolated transform at a specific time. - * - * @param xf - * @param beta A factor in [0,1], where 0 indicates alpha0 - */ - getTransform(xf: TransformValue, beta?: number): void; - /** - * Advance the sweep forward, yielding a new initial state. - * - * @param alpha The new initial time - */ - advance(alpha: number): void; - forward(): void; - /** - * normalize the angles in radians to be between -pi and pi. - */ - normalize(): void; - set(that: Sweep): void; - } - /** - * Input parameters for TimeOfImpact. - */ - class TOIInput { - proxyA: DistanceProxy; - proxyB: DistanceProxy; - sweepA: Sweep; - sweepB: Sweep; - /** defines sweep interval [0, tMax] */ - tMax: number; - recycle(): void; - } - enum TOIOutputState { - e_unset = -1, - e_unknown = 0, - e_failed = 1, - e_overlapped = 2, - e_touching = 3, - e_separated = 4 - } - /** - * Output parameters for TimeOfImpact. - */ - class TOIOutput { - state: TOIOutputState; - t: number; - recycle(): void; - } - /** - * Compute the upper bound on time before two shapes penetrate. Time is - * represented as a fraction between [0,tMax]. This uses a swept separating axis - * and may miss some intermediate, non-tunneling collisions. If you change the - * time interval, you should call this function again. - * - * Note: use Distance to compute the contact point and normal at the time of - * impact. - * - * CCD via the local separating axis method. This seeks progression by computing - * the largest time at which separation is maintained. - */ - const TimeOfImpact: { - (output: TOIOutput, input: TOIInput): void; - Input: typeof TOIInput; - Output: typeof TOIOutput; - }; - /** @hidden */ - const stats: { - gjkCalls: number; - gjkIters: number; - gjkMaxIters: number; - toiTime: number; - toiMaxTime: number; - toiCalls: number; - toiIters: number; - toiMaxIters: number; - toiRootIters: number; - toiMaxRootIters: number; - toString(newline?: string): string; - }; - /** @hidden @deprecated Merged with main namespace */ - const internal: { - CollidePolygons: (manifold: Manifold, polyA: PolygonShape, xfA: TransformValue, polyB: PolygonShape, xfB: TransformValue) => void; - Settings: typeof Settings; - Sweep: typeof Sweep; - Manifold: typeof Manifold; - Distance: { - (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void; - testOverlap: (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue) => boolean; - Input: typeof DistanceInput; - Output: typeof DistanceOutput; - Proxy: typeof DistanceProxy; - Cache: typeof SimplexCache; - }; - TimeOfImpact: { - (output: TOIOutput, input: TOIInput): void; - Input: typeof TOIInput; - Output: typeof TOIOutput; - }; - DynamicTree: typeof DynamicTree; - stats: { - gjkCalls: number; - gjkIters: number; - gjkMaxIters: number; - toiTime: number; - toiMaxTime: number; - toiCalls: number; - toiIters: number; - toiMaxIters: number; - toiRootIters: number; - toiMaxRootIters: number; - toString(newline?: string): string; - }; - }; - // TODO: merge with ManifoldPoint? - class VelocityConstraintPoint { - rA: Vec2Value; - rB: Vec2Value; - normalImpulse: number; - tangentImpulse: number; - normalMass: number; - tangentMass: number; - velocityBias: number; - recycle(): void; - } - /** - * The class manages contact between two shapes. A contact exists for each - * overlapping AABB in the broad-phase (except if filtered). Therefore a contact - * object may exist that has no contact points. - */ - class Contact { - initConstraint(step: TimeStep): void; - /** - * Get the contact manifold. Do not modify the manifold unless you understand - * the internals of the library. - */ - getManifold(): Manifold; - /** - * Get the world manifold. - */ - getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined; - /** - * Enable/disable this contact. This can be used inside the pre-solve contact - * listener. The contact is only disabled for the current time step (or sub-step - * in continuous collisions). - */ - setEnabled(flag: boolean): void; - /** - * Has this contact been disabled? - */ - isEnabled(): boolean; - /** - * Is this contact touching? - */ - isTouching(): boolean; - /** - * Get the next contact in the world's contact list. - */ - getNext(): Contact | null; - /** - * Get fixture A in this contact. - */ - getFixtureA(): Fixture; - /** - * Get fixture B in this contact. - */ - getFixtureB(): Fixture; - /** - * Get the child primitive index for fixture A. - */ - getChildIndexA(): number; - /** - * Get the child primitive index for fixture B. - */ - getChildIndexB(): number; - /** - * Flag this contact for filtering. Filtering will occur the next time step. - */ - flagForFiltering(): void; - /** - * Override the default friction mixture. You can call this in - * "pre-solve" callback. This value persists until set or reset. - */ - setFriction(friction: number): void; - /** - * Get the friction. - */ - getFriction(): number; - /** - * Reset the friction mixture to the default value. - */ - resetFriction(): void; - /** - * Override the default restitution mixture. You can call this in - * "pre-solve" callback. The value persists until you set or reset. - */ - setRestitution(restitution: number): void; - /** - * Get the restitution. - */ - getRestitution(): number; - /** - * Reset the restitution to the default value. - */ - resetRestitution(): void; - /** - * Set the desired tangent speed for a conveyor belt behavior. In meters per - * second. - */ - setTangentSpeed(speed: number): void; - /** - * Get the desired tangent speed. In meters per second. - */ - getTangentSpeed(): number; - /** - * Called by Update method, and implemented by subclasses. - */ - evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void; - /** - * Updates the contact manifold and touching status. - * - * Note: do not assume the fixture AABBs are overlapping or are valid. - * - * @param listener.beginContact - * @param listener.endContact - * @param listener.preSolve - */ - update(listener?: { - beginContact(contact: Contact): void; - endContact(contact: Contact): void; - preSolve(contact: Contact, oldManifold: Manifold): void; - }): void; - solvePositionConstraint(step: TimeStep): number; - solvePositionConstraintTOI(step: TimeStep, toiA: Body, toiB: Body): number; - private _solvePositionConstraint; - initVelocityConstraint(step: TimeStep): void; - warmStartConstraint(step: TimeStep): void; - storeConstraintImpulses(step: TimeStep): void; - solveVelocityConstraint(step: TimeStep): void; - } - type BodyType = "static" | "kinematic" | "dynamic"; - interface BodyDef { - /** - * Body types are static, kinematic, or dynamic. Note: if a dynamic - * body would have zero mass, the mass is set to one. - */ - type?: BodyType; - /** - * The world position of the body. Avoid creating bodies at the - * origin since this can lead to many overlapping shapes. - */ - position?: Vec2Value; - /** - * The world angle of the body in radians. - */ - angle?: number; - /** - * The linear velocity of the body's origin in world co-ordinates. - */ - linearVelocity?: Vec2Value; - angularVelocity?: number; - /** - * Linear damping is use to reduce the linear velocity. The - * damping parameter can be larger than 1.0 but the damping effect becomes - * sensitive to the time step when the damping parameter is large. - * Units are 1/time - */ - linearDamping?: number; - /** - * Angular damping is use to reduce the angular velocity. - * The damping parameter can be larger than 1.0 but the damping effect - * becomes sensitive to the time step when the damping parameter is large. - * Units are 1/time - */ - angularDamping?: number; - /** - * Should this body be prevented from rotating? Useful for characters. - */ - fixedRotation?: boolean; - /** - * Is this a fast moving body that should be prevented from - * tunneling through other moving bodies? Note that all bodies are - * prevented from tunneling through kinematic and static bodies. This - * setting is only considered on dynamic bodies. Warning: You should use - * this flag sparingly since it increases processing time. - */ - bullet?: boolean; - gravityScale?: number; - /** - * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage. - */ - allowSleep?: boolean; - /** - * Is this body initially awake or sleeping? - */ - awake?: boolean; - /** - * Does this body start out active? - */ - active?: boolean; - userData?: any; - } - /** - * MassData This holds the mass data computed for a shape. - */ - interface MassData { - /** The mass of the shape, usually in kilograms. */ - mass: number; - /** The position of the shape's centroid relative to the shape's origin. */ - center: Vec2Value; - /** The rotational inertia of the shape about the local origin. */ - I: number; - } - /** - * A rigid body composed of one or more fixtures. - * - * To create a new Body use {@link World.createBody}. - */ - class Body { - /** - * A static body does not move under simulation and behaves as if it has infinite mass. - * Internally, zero is stored for the mass and the inverse mass. - * Static bodies can be moved manually by the user. - * A static body has zero velocity. - * Static bodies do not collide with other static or kinematic bodies. - */ - static readonly STATIC: BodyType; - /** - * A kinematic body moves under simulation according to its velocity. - * Kinematic bodies do not respond to forces. - * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity. - * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass. - * Kinematic bodies do not collide with other kinematic or static bodies. - */ - static readonly KINEMATIC: BodyType; - /** - * A dynamic body is fully simulated. - * They can be moved manually by the user, but normally they move according to forces. - * A dynamic body can collide with all body types. - * A dynamic body always has finite, non-zero mass. - * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate. - */ - static readonly DYNAMIC: BodyType; - /** Styling for dev-tools. */ - style: Style; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - appData: Record; - isWorldLocked(): boolean; - getWorld(): World; - getNext(): Body | null; - setUserData(data: any): void; - getUserData(): unknown; - getFixtureList(): Fixture | null; - getJointList(): JointEdge | null; - /** - * Warning: this list changes during the time step and you may miss some - * collisions if you don't use ContactListener. - */ - getContactList(): ContactEdge | null; - isStatic(): boolean; - isDynamic(): boolean; - isKinematic(): boolean; - /** - * This will alter the mass and velocity. - */ - setStatic(): Body; - setDynamic(): Body; - setKinematic(): Body; - /** - * Get the type of the body. - */ - getType(): BodyType; - /** - * Set the type of the body to "static", "kinematic" or "dynamic". - * @param type The type of the body. - */ - setType(type: BodyType): void; - isBullet(): boolean; - /** - * Should this body be treated like a bullet for continuous collision detection? - */ - setBullet(flag: boolean): void; - isSleepingAllowed(): boolean; - setSleepingAllowed(flag: boolean): void; - isAwake(): boolean; - /** - * Set the sleep state of the body. A sleeping body has very low CPU cost. - * - * @param flag Set to true to wake the body, false to put it to sleep. - */ - setAwake(flag: boolean): void; - isActive(): boolean; - /** - * Set the active state of the body. An inactive body is not simulated and - * cannot be collided with or woken up. If you pass a flag of true, all fixtures - * will be added to the broad-phase. If you pass a flag of false, all fixtures - * will be removed from the broad-phase and all contacts will be destroyed. - * Fixtures and joints are otherwise unaffected. - * - * You may continue to create/destroy fixtures and joints on inactive bodies. - * Fixtures on an inactive body are implicitly inactive and will not participate - * in collisions, ray-casts, or queries. Joints connected to an inactive body - * are implicitly inactive. An inactive body is still owned by a World object - * and remains - */ - setActive(flag: boolean): void; - isFixedRotation(): boolean; - /** - * Set this body to have fixed rotation. This causes the mass to be reset. - */ - setFixedRotation(flag: boolean): void; - /** - * Get the world transform for the body's origin. - */ - getTransform(): Transform; - /** - * Set the position of the body's origin and rotation. Manipulating a body's - * transform may cause non-physical behavior. Note: contacts are updated on the - * next call to World.step. - * - * @param position The world position of the body's local origin. - * @param angle The world rotation in radians. - */ - setTransform(position: Vec2Value, angle: number): void; - synchronizeTransform(): void; - /** - * Update fixtures in broad-phase. - */ - synchronizeFixtures(): void; - /** - * Used in TOI. - */ - advance(alpha: number): void; - /** - * Get the world position for the body's origin. - */ - getPosition(): Vec2; - setPosition(p: Vec2Value): void; - /** - * Get the current world rotation angle in radians. - */ - getAngle(): number; - setAngle(angle: number): void; - /** - * Get the world position of the center of mass. - */ - getWorldCenter(): Vec2; - /** - * Get the local position of the center of mass. - */ - getLocalCenter(): Vec2; - /** - * Get the linear velocity of the center of mass. - * - * @return the linear velocity of the center of mass. - */ - getLinearVelocity(): Vec2; - /** - * Get the world linear velocity of a world point attached to this body. - * - * @param worldPoint A point in world coordinates. - */ - getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2; - /** - * Get the world velocity of a local point. - * - * @param localPoint A point in local coordinates. - */ - getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2; - /** - * Set the linear velocity of the center of mass. - * - * @param v The new linear velocity of the center of mass. - */ - setLinearVelocity(v: Vec2Value): void; - /** - * Get the angular velocity. - * - * @returns the angular velocity in radians/second. - */ - getAngularVelocity(): number; - /** - * Set the angular velocity. - * - * @param omega The new angular velocity in radians/second. - */ - setAngularVelocity(w: number): void; - getLinearDamping(): number; - setLinearDamping(linearDamping: number): void; - getAngularDamping(): number; - setAngularDamping(angularDamping: number): void; - getGravityScale(): number; - /** - * Scale the gravity applied to this body. - */ - setGravityScale(scale: number): void; - /** - * Get the total mass of the body. - * - * @returns The mass, usually in kilograms (kg). - */ - getMass(): number; - /** - * Get the rotational inertia of the body about the local origin. - * - * @return the rotational inertia, usually in kg-m^2. - */ - getInertia(): number; - /** - * Copy the mass data of the body to data. - */ - getMassData(data: MassData): void; - /** - * This resets the mass properties to the sum of the mass properties of the - * fixtures. This normally does not need to be called unless you called - * SetMassData to override the mass and you later want to reset the mass. - */ - resetMassData(): void; - /** - * Set the mass properties to override the mass properties of the fixtures. Note - * that this changes the center of mass position. Note that creating or - * destroying fixtures can also alter the mass. This function has no effect if - * the body isn't dynamic. - * - * @param massData The mass properties. - */ - setMassData(massData: MassData): void; - /** - * Apply a force at a world point. If the force is not applied at the center of - * mass, it will generate a torque and affect the angular velocity. This wakes - * up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - applyForce(force: Vec2Value, point: Vec2Value, wake?: boolean): void; - /** - * Apply a force to the center of mass. This wakes up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param wake Also wake up the body - */ - applyForceToCenter(force: Vec2Value, wake?: boolean): void; - /** - * Apply a torque. This affects the angular velocity without affecting the - * linear velocity of the center of mass. This wakes up the body. - * - * @param torque About the z-axis (out of the screen), usually in N-m. - * @param wake Also wake up the body - */ - applyTorque(torque: number, wake?: boolean): void; - /** - * Apply an impulse at a point. This immediately modifies the velocity. It also - * modifies the angular velocity if the point of application is not at the - * center of mass. This wakes up the body. - * - * @param impulse The world impulse vector, usually in N-seconds or kg-m/s. - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake?: boolean): void; - /** - * Apply an angular impulse. - * - * @param impulse The angular impulse in units of kg*m*m/s - * @param wake Also wake up the body - */ - applyAngularImpulse(impulse: number, wake?: boolean): void; - /** - * This is used to test if two bodies should collide. - * - * Bodies do not collide when: - * - Neither of them is dynamic - * - They are connected by a joint with collideConnected == false - */ - shouldCollide(that: Body): boolean; - /** - * Creates a fixture and attach it to this body. - * - * If the density is non-zero, this function automatically updates the mass of - * the body. - * - * Contacts are not created until the next time step. - * - * Warning: This function is locked during callbacks. - */ - createFixture(def: FixtureDef): Fixture; - createFixture(shape: Shape, opt?: FixtureOpt): Fixture; - createFixture(shape: Shape, density?: number): Fixture; - /** - * Destroy a fixture. This removes the fixture from the broad-phase and destroys - * all contacts associated with this fixture. This will automatically adjust the - * mass of the body if the body is dynamic and the fixture has positive density. - * All fixtures attached to a body are implicitly destroyed when the body is - * destroyed. - * - * Warning: This function is locked during callbacks. - * - * @param fixture The fixture to be removed. - */ - destroyFixture(fixture: Fixture): void; - /** - * Get the corresponding world point of a local point. - */ - getWorldPoint(localPoint: Vec2Value): Vec2; - /** - * Get the corresponding world vector of a local vector. - */ - getWorldVector(localVector: Vec2Value): Vec2; - /** - * Gets the corresponding local point of a world point. - */ - getLocalPoint(worldPoint: Vec2Value): Vec2; - /** - * Gets the corresponding local vector of a world vector. - */ - getLocalVector(worldVector: Vec2Value): Vec2; - } - class TimeStep { - /** time step */ - dt: number; - /** inverse time step (0 if dt == 0) */ - inv_dt: number; - velocityIterations: number; - positionIterations: number; - warmStarting: boolean; - blockSolve: boolean; - /** timestep ratio for variable timestep */ - inv_dt0: number; - /** dt * inv_dt0 */ - dtRatio: number; - reset(dt: number): void; - } - /** - * Contact impulses for reporting. Impulses are used instead of forces because - * sub-step forces may approach infinity for rigid body collisions. These match - * up one-to-one with the contact points in Manifold. - */ - class ContactImpulse { - // TODO: merge with Contact class? - private readonly contact; - private readonly normals; - private readonly tangents; - constructor(contact: Contact); - recycle(): void; - get normalImpulses(): number[]; - get tangentImpulses(): number[]; - } - /** - * Finds and solves islands. An island is a connected subset of the world. - */ - class Solver { - m_world: World; - m_stack: Body[]; - m_bodies: Body[]; - m_contacts: Contact[]; - m_joints: Joint[]; - constructor(world: World); - clear(): void; - addBody(body: Body): void; - addContact(contact: Contact): void; - addJoint(joint: Joint): void; - solveWorld(step: TimeStep): void; - solveIsland(step: TimeStep): void; - /** - * Find TOI contacts and solve them. - */ - solveWorldTOI(step: TimeStep): void; - solveIslandTOI(subStep: TimeStep, toiA: Body, toiB: Body): void; - } - interface WorldDef { - /** [default: { x : 0, y : 0}] */ - gravity?: Vec2Value; - /** [default: true] */ - allowSleep?: boolean; - /** [default: true] */ - warmStarting?: boolean; - /** [default: true] */ - continuousPhysics?: boolean; - /** [default: false] */ - subStepping?: boolean; - /** [default: true] */ - blockSolve?: boolean; - } - /** - * Callback function for ray casts, see {@link World.rayCast}. - * - * Called for each fixture found in the query. - * The returned value replaces the ray-cast input maxFraction. - * You control how the ray cast proceeds by returning a numeric/float value. - * - * - `0` to terminate the ray cast - * - `fraction` to clip the ray cast at current point - * - `1` don't clip the ray and continue - * - `-1` (or anything else) to continue - * - * @param fixture The fixture hit by the ray - * @param point The point of initial intersection - * @param normal The normal vector at the point of intersection - * @param fraction The fraction along the ray at the point of intersection - * - * @returns A number to update the maxFraction - */ - type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number; - /** - * Called for each fixture found in the query AABB. It may return `false` to terminate the query. - */ - type WorldAABBQueryCallback = (fixture: Fixture) => boolean; - class World { - /** - * @param def World definition or gravity vector. - */ - constructor(def?: WorldDef | Vec2 | null); - /** - * Get the world body list. With the returned body, use Body.getNext to get the - * next body in the world list. A null body indicates the end of the list. - * - * @return the head of the world body list. - */ - getBodyList(): Body | null; - /** - * Get the world joint list. With the returned joint, use Joint.getNext to get - * the next joint in the world list. A null joint indicates the end of the list. - * - * @return the head of the world joint list. - */ - getJointList(): Joint | null; - /** - * Get the world contact list. With the returned contact, use Contact.getNext to - * get the next contact in the world list. A null contact indicates the end of - * the list. - * - * Warning: contacts are created and destroyed in the middle of a time step. - * Use ContactListener to avoid missing contacts. - * - * @return the head of the world contact list. - */ - getContactList(): Contact | null; - getBodyCount(): number; - getJointCount(): number; - /** - * Get the number of contacts (each may have 0 or more contact points). - */ - getContactCount(): number; - /** - * Change the global gravity vector. - */ - setGravity(gravity: Vec2Value): void; - /** - * Get the global gravity vector. - */ - getGravity(): Vec2; - /** - * Is the world locked (in the middle of a time step). - */ - isLocked(): boolean; - /** - * Enable/disable sleep. - */ - setAllowSleeping(flag: boolean): void; - getAllowSleeping(): boolean; - /** - * Enable/disable warm starting. For testing. - */ - setWarmStarting(flag: boolean): void; - getWarmStarting(): boolean; - /** - * Enable/disable continuous physics. For testing. - */ - setContinuousPhysics(flag: boolean): void; - getContinuousPhysics(): boolean; - /** - * Enable/disable single stepped continuous physics. For testing. - */ - setSubStepping(flag: boolean): void; - getSubStepping(): boolean; - /** - * Set flag to control automatic clearing of forces after each time step. - */ - setAutoClearForces(flag: boolean): void; - /** - * Get the flag that controls automatic clearing of forces after each time step. - */ - getAutoClearForces(): boolean; - /** - * Manually clear the force buffer on all bodies. By default, forces are cleared - * automatically after each call to step. The default behavior is modified by - * calling setAutoClearForces. The purpose of this function is to support - * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step - * under a variable frame-rate. When you perform sub-stepping you will disable - * auto clearing of forces and instead call clearForces after all sub-steps are - * complete in one pass of your game loop. - * - * See {@link World.setAutoClearForces} - */ - clearForces(): void; - /** - * Query the world for all fixtures that potentially overlap the provided AABB. - * - * @param aabb The query box. - * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query. - */ - queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void; - /** - * Ray-cast the world for all fixtures in the path of the ray. Your callback - * controls whether you get the closest point, any point, or n-points. The - * ray-cast ignores shapes that contain the starting point. - * - * @param point1 The ray starting point - * @param point2 The ray ending point - * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value. - */ - rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void; - /** - * Get the number of broad-phase proxies. - */ - getProxyCount(): number; - /** - * Get the height of broad-phase dynamic tree. - */ - getTreeHeight(): number; - /** - * Get the balance of broad-phase dynamic tree. - */ - getTreeBalance(): number; - /** - * Get the quality metric of broad-phase dynamic tree. The smaller the better. - * The minimum is 1. - */ - getTreeQuality(): number; - /** - * Shift the world origin. Useful for large worlds. The body shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - shiftOrigin(newOrigin: Vec2Value): void; - /** - * Create a rigid body given a definition. No reference to the definition is - * retained. - * - * Warning: This function is locked during callbacks. - */ - createBody(def?: BodyDef): Body; - createBody(position: Vec2Value, angle?: number): Body; - createDynamicBody(def?: BodyDef): Body; - createDynamicBody(position: Vec2Value, angle?: number): Body; - createKinematicBody(def?: BodyDef): Body; - createKinematicBody(position: Vec2Value, angle?: number): Body; - /** - * Destroy a rigid body given a definition. No reference to the definition is - * retained. - * - * Warning: This automatically deletes all associated shapes and joints. - * - * Warning: This function is locked during callbacks. - */ - destroyBody(b: Body): boolean; - /** - * Create a joint to constrain bodies together. No reference to the definition - * is retained. This may cause the connected bodies to cease colliding. - * - * Warning: This function is locked during callbacks. - */ - createJoint(joint: T): T | null; - /** - * Destroy a joint. This may cause the connected bodies to begin colliding. - * Warning: This function is locked during callbacks. - */ - destroyJoint(joint: Joint): void; - /** - * Take a time step. This performs collision detection, integration, and - * constraint solution. - * - * Broad-phase, narrow-phase, solve and solve time of impacts. - * - * @param timeStep Time step, this should not vary. - */ - step(timeStep: number, velocityIterations?: number, positionIterations?: number): void; - /** - * Called when two fixtures begin to touch. - * - * Implement contact callbacks to get contact information. You can use these - * results for things like sounds and game logic. You can also get contact - * results by traversing the contact lists after the time step. However, you - * might miss some contacts because continuous physics leads to sub-stepping. - * Additionally you may receive multiple callbacks for the same contact in a - * single time step. You should strive to make your callbacks efficient because - * there may be many callbacks per time step. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "begin-contact", listener: (contact: Contact) => void): World; - /** - * Called when two fixtures cease to touch. - * - * Implement contact callbacks to get contact information. You can use these - * results for things like sounds and game logic. You can also get contact - * results by traversing the contact lists after the time step. However, you - * might miss some contacts because continuous physics leads to sub-stepping. - * Additionally you may receive multiple callbacks for the same contact in a - * single time step. You should strive to make your callbacks efficient because - * there may be many callbacks per time step. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "end-contact", listener: (contact: Contact) => void): World; - /** - * This is called after a contact is updated. This allows you to inspect a - * contact before it goes to the solver. If you are careful, you can modify the - * contact manifold (e.g. disable contact). A copy of the old manifold is - * provided so that you can detect changes. Note: this is called only for awake - * bodies. Note: this is called even when the number of contact points is zero. - * Note: this is not called for sensors. Note: if you set the number of contact - * points to zero, you will not get an end-contact callback. However, you may get - * a begin-contact callback the next step. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "pre-solve", listener: (contact: Contact, oldManifold: Manifold) => void): World; - /** - * This lets you inspect a contact after the solver is finished. This is useful - * for inspecting impulses. Note: the contact manifold does not include time of - * impact impulses, which can be arbitrarily large if the sub-step is small. - * Hence the impulse is provided explicitly in a separate data structure. Note: - * this is only called for contacts that are touching, solid, and awake. - * - * Warning: You cannot create/destroy world entities inside these callbacks. - */ - on(name: "post-solve", listener: (contact: Contact, impulse: ContactImpulse) => void): World; - /** Listener is called whenever a body is removed. */ - on(name: "remove-body", listener: (body: Body) => void): World; - /** Listener is called whenever a joint is removed implicitly or explicitly. */ - on(name: "remove-joint", listener: (joint: Joint) => void): World; - /** Listener is called whenever a fixture is removed implicitly or explicitly. */ - on(name: "remove-fixture", listener: (fixture: Fixture) => void): World; - off(name: "begin-contact", listener: (contact: Contact) => void): World; - off(name: "end-contact", listener: (contact: Contact) => void): World; - off(name: "pre-solve", listener: (contact: Contact, oldManifold: Manifold) => void): World; - off(name: "post-solve", listener: (contact: Contact, impulse: ContactImpulse) => void): World; - off(name: "remove-body", listener: (body: Body) => void): World; - off(name: "remove-joint", listener: (joint: Joint) => void): World; - off(name: "remove-fixture", listener: (fixture: Fixture) => void): World; - publish(name: string, arg1?: any, arg2?: any, arg3?: any): number; - } - // dummy types - type DataType = any; - type ObjectType = any; - type ClassName = any; - type SerializedType = object[]; - type SerializerOptions = { - rootClass: ClassName; - preSerialize?: (obj: ObjectType) => DataType; - postSerialize?: (data: DataType, obj: any) => DataType; - preDeserialize?: (data: DataType) => DataType; - postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType; - }; - class Serializer { - private options; - constructor(options: SerializerOptions); - toJson: (root: T) => SerializedType; - fromJson: (json: SerializedType) => T; - static toJson: (root: World) => SerializedType; - static fromJson: (json: SerializedType) => World; - } - /** @hidden @deprecated */ - export { math as Math }; -} -export { planck as default, Serializer, Style, ActiveKeys, Testbed, testbed, math as Math, Vec2Value, Vec2, Vec3Value, Vec3, Mat22, Mat33, TransformValue, Transform, RotValue, Rot, RayCastInput, RayCastCallback, RayCastOutput, AABBValue, AABB, Shape, ShapeType, FixtureOpt, FixtureDef, FixtureProxy, Fixture, BodyType, BodyDef, MassData, Body, ContactEdge, EvaluateFunction, mixFriction, mixRestitution, VelocityConstraintPoint, Contact, JointEdge, JointOpt, JointDef, Joint, WorldDef, WorldRayCastCallback, WorldAABBQueryCallback, World, CircleShape, Circle, EdgeShape, Edge, PolygonShape, Polygon, ChainShape, Chain, BoxShape, Box, CollideCircles, CollideEdgeCircle, CollidePolygons, CollidePolygonCircle, CollideEdgePolygon, DistanceJointOpt, DistanceJointDef, DistanceJoint, FrictionJointOpt, FrictionJointDef, FrictionJoint, GearJointOpt, GearJointDef, GearJoint, MotorJointOpt, MotorJointDef, MotorJoint, MouseJointOpt, MouseJointDef, MouseJoint, PrismaticJointOpt, PrismaticJointDef, PrismaticJoint, PulleyJointOpt, PulleyJointDef, PulleyJoint, RevoluteJointOpt, RevoluteJointDef, RevoluteJoint, RopeJointOpt, RopeJointDef, RopeJoint, WeldJointOpt, WeldJointDef, WeldJoint, WheelJointOpt, WheelJointDef, WheelJoint, Settings, Sweep, ManifoldType, ContactFeatureType, PointState, ClipVertex, Manifold, ManifoldPoint, ContactID, WorldManifold, getPointStates, clipSegmentToLine, DistanceInput, DistanceOutput, SimplexCache, Distance, DistanceProxy, testOverlap, ShapeCastInput, ShapeCastOutput, ShapeCast, TOIInput, TOIOutputState, TOIOutput, TimeOfImpact, DynamicTreeQueryCallback, TreeNode, DynamicTree, stats, internal }; -//# sourceMappingURL=planck.d.ts.map \ No newline at end of file + +export { + Body$1 as Body, + math as Math, +}; + +export {}; diff --git a/dist/planck.d.ts.map b/dist/planck.d.ts.map deleted file mode 100644 index f6b8bf65..00000000 --- a/dist/planck.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"planck.d.ts","sourceRoot":"","sources":["../src/main.ts","../src/util/options.ts","../src/common/Math.ts","../src/common/Vec2.ts","../src/collision/AABB.ts","../src/Settings.ts","../src/util/Pool.ts","../src/collision/DynamicTree.ts","../src/common/Rot.ts","../src/common/Transform.ts","../src/common/Vec3.ts","../src/common/Matrix.ts","../src/common/Sweep.ts","../src/dynamics/Velocity.ts","../src/dynamics/Position.ts","../src/common/Mat22.ts","../src/collision/Manifold.ts","../src/util/stats.ts","../src/collision/Distance.ts","../src/dynamics/Contact.ts","../src/util/Timer.ts","../src/collision/TimeOfImpact.ts","../src/dynamics/Solver.ts","../src/util/Testbed.ts","../src/dynamics/Joint.ts","../src/dynamics/Body.ts","../src/collision/Shape.ts","../src/dynamics/Fixture.ts","../src/collision/BroadPhase.ts","../src/dynamics/World.ts","../src/collision/shape/EdgeShape.ts","../src/collision/shape/ChainShape.ts","../src/collision/shape/PolygonShape.ts","../src/collision/shape/CircleShape.ts","../src/dynamics/joint/DistanceJoint.ts","../src/dynamics/joint/FrictionJoint.ts","../src/common/Mat33.ts","../src/dynamics/joint/RevoluteJoint.ts","../src/dynamics/joint/PrismaticJoint.ts","../src/dynamics/joint/GearJoint.ts","../src/dynamics/joint/MotorJoint.ts","../src/dynamics/joint/MouseJoint.ts","../src/dynamics/joint/PulleyJoint.ts","../src/dynamics/joint/RopeJoint.ts","../src/dynamics/joint/WeldJoint.ts","../src/dynamics/joint/WheelJoint.ts","../src/serializer/index.ts","../src/collision/shape/BoxShape.ts","../src/collision/shape/CollideCircle.ts","../src/collision/shape/CollideEdgeCircle.ts","../src/collision/shape/CollidePolygon.ts","../src/collision/shape/CollideCirclePolygon.ts","../src/collision/shape/CollideEdgePolygon.ts","../src/internal.ts","../src/index.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAA6X,SAAU;;;;;;;;;;;+BAAvN,IAAK;8BAAgE,IAAK;;;2BAAmI,SAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAAjM,SAAU;;;;;;;;;;;;;+BAAjS,IAAK;;;;;;;2BAAkR,SAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAA8yB,MAAO;+BAAuQ,MAAO;;;;;;;iBAA4X,IAAK;kBAAe,IAAK;oBAAiB,OAAQ;kBAAe,KAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAA7tD,MAAO"} \ No newline at end of file diff --git a/dist/planck.js b/dist/planck.js index e04bdfb2..2d5e0533 100644 --- a/dist/planck.js +++ b/dist/planck.js @@ -1,7 +1,10 @@ -/** - * Planck.js v1.0.9 +(function(global, factory) { + typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.planck = {})); +})(this, function(exports2) { + "use strict";/** + * Planck.js v1.1.0-alpha * @license The MIT license - * @copyright Copyright (c) 2023 Erin Catto, Ali Shakiba + * @copyright Copyright (c) 2024 Erin Catto, Ali Shakiba * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,16228 +25,11795 @@ * SOFTWARE. */ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.planck = {})); -})(this, (function (exports) { 'use strict'; - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - /* global Reflect, Promise */ - - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - - function __extends(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - } - - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - /** @internal */ - var options = function (input, defaults) { - if (input === null || typeof input === "undefined") { - // tslint:disable-next-line:no-object-literal-type-assertion - input = {}; - } - var output = __assign({}, input); - // tslint:disable-next-line:no-for-in - for (var key in defaults) { - if (defaults.hasOwnProperty(key) && typeof input[key] === "undefined") { - output[key] = defaults[key]; - } - } - if (typeof Object.getOwnPropertySymbols === "function") { - var symbols = Object.getOwnPropertySymbols(defaults); - for (var i = 0; i < symbols.length; i++) { - var symbol = symbols[i]; - if (defaults.propertyIsEnumerable(symbol) && typeof input[symbol] === "undefined") { - output[symbol] = defaults[symbol]; - } - } - } - return output; - }; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_random = Math.random; - var EPSILON = 1e-9; - /** @internal @deprecated */ - var isFinite = Number.isFinite; - /** - * @deprecated - * Next Largest Power of 2 Given a binary integer value x, the next largest - * power of 2 can be computed by a SWAR algorithm that recursively "folds" the - * upper bits into the lower bits. This process yields a bit vector with the - * same most significant 1 as x, but all 1's below it. Adding 1 to that value - * yields the next largest power of 2. For a 32-bit value: - */ - function nextPowerOfTwo(x) { - x |= (x >> 1); - x |= (x >> 2); - x |= (x >> 4); - x |= (x >> 8); - x |= (x >> 16); - return x + 1; - } - /** @deprecated */ - function isPowerOfTwo(x) { - return x > 0 && (x & (x - 1)) === 0; - } - /** @deprecated */ - function mod(num, min, max) { - if (typeof min === "undefined") { - max = 1; - min = 0; - } - else if (typeof max === "undefined") { - max = min; - min = 0; - } - if (max > min) { - num = (num - min) % (max - min); - return num + (num < 0 ? max : min); - } - else { - num = (num - max) % (min - max); - return num + (num <= 0 ? min : max); - } - } - /** - * @deprecated - * Returns a min if num is less than min, and max if more than max, otherwise returns num. - */ - function clamp(num, min, max) { - if (num < min) { - return min; - } - else if (num > max) { - return max; - } - else { - return num; - } - } - /** - * @deprecated - * Returns a random number between min and max when two arguments are provided. - * If one arg is provided between 0 to max. - * If one arg is passed between 0 to 1. - */ - function random(min, max) { - if (typeof min === "undefined") { - max = 1; - min = 0; - } - else if (typeof max === "undefined") { - max = min; - min = 0; - } - return min === max ? min : math_random() * (max - min) + min; - } - /** @ignore */ - var math = Object.create(Math); - math.EPSILON = EPSILON; - math.isFinite = isFinite; - math.nextPowerOfTwo = nextPowerOfTwo; - math.isPowerOfTwo = isPowerOfTwo; - math.mod = mod; - math.clamp = clamp; - math.random = random; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$9 = Math.abs; - /** @internal */ var math_sqrt$5 = Math.sqrt; - /** @internal */ var math_max$8 = Math.max; - /** @internal */ var math_min$8 = Math.min; - var Vec2 = /** @class */ (function () { - // tslint:disable-next-line:typedef - function Vec2(x, y) { - if (!(this instanceof Vec2)) { - return new Vec2(x, y); - } - if (typeof x === "undefined") { - this.x = 0; - this.y = 0; - } - else if (typeof x === "object") { - this.x = x.x; - this.y = x.y; - } - else { - this.x = x; - this.y = y; - } - } - /** @internal */ - Vec2.prototype._serialize = function () { - return { - x: this.x, - y: this.y - }; - }; - /** @internal */ - Vec2._deserialize = function (data) { - var obj = Object.create(Vec2.prototype); - obj.x = data.x; - obj.y = data.y; - return obj; - }; - Vec2.zero = function () { - var obj = Object.create(Vec2.prototype); - obj.x = 0; - obj.y = 0; - return obj; - }; - /** @hidden */ - Vec2.neo = function (x, y) { - var obj = Object.create(Vec2.prototype); - obj.x = x; - obj.y = y; - return obj; - }; - Vec2.clone = function (v) { - return Vec2.neo(v.x, v.y); - }; - /** @hidden */ - Vec2.prototype.toString = function () { - return JSON.stringify(this); - }; - /** - * Does this vector contain finite coordinates? - */ - Vec2.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Number.isFinite(obj.x) && Number.isFinite(obj.y); - }; - Vec2.assert = function (o) { - }; - Vec2.prototype.clone = function () { - return Vec2.clone(this); - }; - /** - * Set this vector to all zeros. - * - * @returns this - */ - Vec2.prototype.setZero = function () { - this.x = 0.0; - this.y = 0.0; - return this; - }; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - // tslint:disable-next-line:typedef - Vec2.prototype.set = function (x, y) { - if (typeof x === "object") { - this.x = x.x; - this.y = x.y; - } - else { - this.x = x; - this.y = y; - } - return this; - }; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - Vec2.prototype.setNum = function (x, y) { - this.x = x; - this.y = y; - return this; - }; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - Vec2.prototype.setVec2 = function (value) { - this.x = value.x; - this.y = value.y; - return this; - }; - /** @internal @deprecated Use setCombine or setMul */ - Vec2.prototype.wSet = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return this.setCombine(a, v, b, w); - } - else { - return this.setMul(a, v); - } - }; - /** - * Set linear combination of v and w: `a * v + b * w` - */ - Vec2.prototype.setCombine = function (a, v, b, w) { - var x = a * v.x + b * w.x; - var y = a * v.y + b * w.y; - // `this` may be `w` - this.x = x; - this.y = y; - return this; - }; - Vec2.prototype.setMul = function (a, v) { - var x = a * v.x; - var y = a * v.y; - this.x = x; - this.y = y; - return this; - }; - /** - * Add a vector to this vector. - * - * @returns this - */ - Vec2.prototype.add = function (w) { - this.x += w.x; - this.y += w.y; - return this; - }; - /** @internal @deprecated Use addCombine or addMul */ - Vec2.prototype.wAdd = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return this.addCombine(a, v, b, w); - } - else { - return this.addMul(a, v); - } - }; - /** - * Add linear combination of v and w: `a * v + b * w` - */ - Vec2.prototype.addCombine = function (a, v, b, w) { - var x = a * v.x + b * w.x; - var y = a * v.y + b * w.y; - // `this` may be `w` - this.x += x; - this.y += y; - return this; - }; - Vec2.prototype.addMul = function (a, v) { - var x = a * v.x; - var y = a * v.y; - this.x += x; - this.y += y; - return this; - }; - /** - * @deprecated Use subCombine or subMul - */ - Vec2.prototype.wSub = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return this.subCombine(a, v, b, w); - } - else { - return this.subMul(a, v); - } - }; - /** - * Subtract linear combination of v and w: `a * v + b * w` - */ - Vec2.prototype.subCombine = function (a, v, b, w) { - var x = a * v.x + b * w.x; - var y = a * v.y + b * w.y; - // `this` may be `w` - this.x -= x; - this.y -= y; - return this; - }; - Vec2.prototype.subMul = function (a, v) { - var x = a * v.x; - var y = a * v.y; - this.x -= x; - this.y -= y; - return this; - }; - /** - * Subtract a vector from this vector - * - * @returns this - */ - Vec2.prototype.sub = function (w) { - this.x -= w.x; - this.y -= w.y; - return this; - }; - /** - * Multiply this vector by a scalar. - * - * @returns this - */ - Vec2.prototype.mul = function (m) { - this.x *= m; - this.y *= m; - return this; - }; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - Vec2.prototype.length = function () { - return Vec2.lengthOf(this); - }; - /** - * Get the length squared. - */ - Vec2.prototype.lengthSquared = function () { - return Vec2.lengthSquared(this); - }; - /** - * Convert this vector into a unit vector. - * - * @returns old length - */ - Vec2.prototype.normalize = function () { - var length = this.length(); - if (length < EPSILON) { - return 0.0; - } - var invLength = 1.0 / length; - this.x *= invLength; - this.y *= invLength; - return length; - }; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - Vec2.lengthOf = function (v) { - return math_sqrt$5(v.x * v.x + v.y * v.y); - }; - /** - * Get the length squared. - */ - Vec2.lengthSquared = function (v) { - return v.x * v.x + v.y * v.y; - }; - Vec2.distance = function (v, w) { - var dx = v.x - w.x; - var dy = v.y - w.y; - return math_sqrt$5(dx * dx + dy * dy); - }; - Vec2.distanceSquared = function (v, w) { - var dx = v.x - w.x; - var dy = v.y - w.y; - return dx * dx + dy * dy; - }; - Vec2.areEqual = function (v, w) { - return v === w || typeof w === "object" && w !== null && v.x === w.x && v.y === w.y; - }; - /** - * Get the skew vector such that dot(skew_vec, other) == cross(vec, other) - */ - Vec2.skew = function (v) { - return Vec2.neo(-v.y, v.x); - }; - /** Dot product on two vectors */ - Vec2.dot = function (v, w) { - return v.x * w.x + v.y * w.y; - }; - Vec2.cross = function (v, w) { - if (typeof w === "number") { - return Vec2.neo(w * v.y, -w * v.x); - } - else if (typeof v === "number") { - return Vec2.neo(-v * w.y, v * w.x); - } - else { - return v.x * w.y - v.y * w.x; - } - }; - /** Cross product on two vectors */ - Vec2.crossVec2Vec2 = function (v, w) { - return v.x * w.y - v.y * w.x; - }; - /** Cross product on a vector and a scalar */ - Vec2.crossVec2Num = function (v, w) { - return Vec2.neo(w * v.y, -w * v.x); - }; - /** Cross product on a vector and a scalar */ - Vec2.crossNumVec2 = function (v, w) { - return Vec2.neo(-v * w.y, v * w.x); - }; - Vec2.addCross = function (a, v, w) { - if (typeof w === "number") { - return Vec2.neo(w * v.y + a.x, -w * v.x + a.y); - } - else if (typeof v === "number") { - return Vec2.neo(-v * w.y + a.x, v * w.x + a.y); - } - }; - /** - * Returns `a + (v x w)` - */ - Vec2.addCrossVec2Num = function (a, v, w) { - return Vec2.neo(w * v.y + a.x, -w * v.x + a.y); - }; - /** - * Returns `a + (v x w)` - */ - Vec2.addCrossNumVec2 = function (a, v, w) { - return Vec2.neo(-v * w.y + a.x, v * w.x + a.y); - }; - Vec2.add = function (v, w) { - return Vec2.neo(v.x + w.x, v.y + w.y); - }; - /** @hidden @deprecated */ - Vec2.wAdd = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return Vec2.combine(a, v, b, w); - } - else { - return Vec2.mulNumVec2(a, v); - } - }; - Vec2.combine = function (a, v, b, w) { - return Vec2.zero().setCombine(a, v, b, w); - }; - Vec2.sub = function (v, w) { - return Vec2.neo(v.x - w.x, v.y - w.y); - }; - Vec2.mul = function (a, b) { - if (typeof a === "object") { - return Vec2.neo(a.x * b, a.y * b); - } - else if (typeof b === "object") { - return Vec2.neo(a * b.x, a * b.y); - } - }; - Vec2.mulVec2Num = function (a, b) { - return Vec2.neo(a.x * b, a.y * b); - }; - Vec2.mulNumVec2 = function (a, b) { - return Vec2.neo(a * b.x, a * b.y); - }; - Vec2.prototype.neg = function () { - this.x = -this.x; - this.y = -this.y; - return this; - }; - Vec2.neg = function (v) { - return Vec2.neo(-v.x, -v.y); - }; - Vec2.abs = function (v) { - return Vec2.neo(math_abs$9(v.x), math_abs$9(v.y)); - }; - Vec2.mid = function (v, w) { - return Vec2.neo((v.x + w.x) * 0.5, (v.y + w.y) * 0.5); - }; - Vec2.upper = function (v, w) { - return Vec2.neo(math_max$8(v.x, w.x), math_max$8(v.y, w.y)); - }; - Vec2.lower = function (v, w) { - return Vec2.neo(math_min$8(v.x, w.x), math_min$8(v.y, w.y)); - }; - Vec2.prototype.clamp = function (max) { - var lengthSqr = this.x * this.x + this.y * this.y; - if (lengthSqr > max * max) { - var scale = max / math_sqrt$5(lengthSqr); - this.x *= scale; - this.y *= scale; - } - return this; - }; - Vec2.clamp = function (v, max) { - var r = Vec2.neo(v.x, v.y); - r.clamp(max); - return r; - }; - /** @hidden @deprecated */ - Vec2.scaleFn = function (x, y) { - // todo: this was used in examples, remove in the future - return function (v) { - return Vec2.neo(v.x * x, v.y * y); - }; - }; - /** @hidden @deprecated */ - Vec2.translateFn = function (x, y) { - // todo: this was used in examples, remove in the future - return function (v) { - return Vec2.neo(v.x + x, v.y + y); - }; - }; - return Vec2; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_max$7 = Math.max; - /** @internal */ var math_min$7 = Math.min; - var AABB = /** @class */ (function () { - function AABB(lower, upper) { - if (!(this instanceof AABB)) { - return new AABB(lower, upper); - } - this.lowerBound = Vec2.zero(); - this.upperBound = Vec2.zero(); - if (typeof lower === "object") { - this.lowerBound.setVec2(lower); - } - if (typeof upper === "object") { - this.upperBound.setVec2(upper); - } - else if (typeof lower === "object") { - this.upperBound.setVec2(lower); - } - } - /** - * Verify that the bounds are sorted. - */ - AABB.prototype.isValid = function () { - return AABB.isValid(this); - }; - AABB.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec2.isValid(obj.lowerBound) && Vec2.isValid(obj.upperBound) && Vec2.sub(obj.upperBound, obj.lowerBound).lengthSquared() >= 0; - }; - AABB.assert = function (o) { - }; - /** - * Get the center of the AABB. - */ - AABB.prototype.getCenter = function () { - return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5); - }; - /** - * Get the extents of the AABB (half-widths). - */ - AABB.prototype.getExtents = function () { - return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5); - }; - /** - * Get the perimeter length. - */ - AABB.prototype.getPerimeter = function () { - return 2.0 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y); - }; - /** - * Combine one or two AABB into this one. - */ - AABB.prototype.combine = function (a, b) { - b = b || this; - var lowerA = a.lowerBound; - var upperA = a.upperBound; - var lowerB = b.lowerBound; - var upperB = b.upperBound; - var lowerX = math_min$7(lowerA.x, lowerB.x); - var lowerY = math_min$7(lowerA.y, lowerB.y); - var upperX = math_max$7(upperB.x, upperA.x); - var upperY = math_max$7(upperB.y, upperA.y); - this.lowerBound.setNum(lowerX, lowerY); - this.upperBound.setNum(upperX, upperY); - }; - AABB.prototype.combinePoints = function (a, b) { - this.lowerBound.setNum(math_min$7(a.x, b.x), math_min$7(a.y, b.y)); - this.upperBound.setNum(math_max$7(a.x, b.x), math_max$7(a.y, b.y)); - }; - AABB.prototype.set = function (aabb) { - this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y); - this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y); - }; - AABB.prototype.contains = function (aabb) { - var result = true; - result = result && this.lowerBound.x <= aabb.lowerBound.x; - result = result && this.lowerBound.y <= aabb.lowerBound.y; - result = result && aabb.upperBound.x <= this.upperBound.x; - result = result && aabb.upperBound.y <= this.upperBound.y; - return result; - }; - AABB.prototype.extend = function (value) { - AABB.extend(this, value); - return this; - }; - AABB.extend = function (out, value) { - out.lowerBound.x -= value; - out.lowerBound.y -= value; - out.upperBound.x += value; - out.upperBound.y += value; - return out; - }; - AABB.testOverlap = function (a, b) { - var d1x = b.lowerBound.x - a.upperBound.x; - var d2x = a.lowerBound.x - b.upperBound.x; - var d1y = b.lowerBound.y - a.upperBound.y; - var d2y = a.lowerBound.y - b.upperBound.y; - if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) { - return false; - } - return true; - }; - AABB.areEqual = function (a, b) { - return Vec2.areEqual(a.lowerBound, b.lowerBound) && Vec2.areEqual(a.upperBound, b.upperBound); - }; - AABB.diff = function (a, b) { - var wD = math_max$7(0, math_min$7(a.upperBound.x, b.upperBound.x) - math_max$7(b.lowerBound.x, a.lowerBound.x)); - var hD = math_max$7(0, math_min$7(a.upperBound.y, b.upperBound.y) - math_max$7(b.lowerBound.y, a.lowerBound.y)); - var wA = a.upperBound.x - a.lowerBound.x; - var hA = a.upperBound.y - a.lowerBound.y; - var wB = b.upperBound.x - b.lowerBound.x; - var hB = b.upperBound.y - b.lowerBound.y; - return wA * hA + wB * hB - wD * hD; - }; - AABB.prototype.rayCast = function (output, input) { - // From Real-time Collision Detection, p179. - var tmin = -Infinity; - var tmax = Infinity; - var p = input.p1; - var d = Vec2.sub(input.p2, input.p1); - var absD = Vec2.abs(d); - var normal = Vec2.zero(); - for (var f = "x"; f !== null; f = (f === "x" ? "y" : null)) { - if (absD.x < EPSILON) { - // Parallel. - if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) { - return false; - } - } - else { - var inv_d = 1.0 / d[f]; - var t1 = (this.lowerBound[f] - p[f]) * inv_d; - var t2 = (this.upperBound[f] - p[f]) * inv_d; - // Sign of the normal vector. - var s = -1.0; - if (t1 > t2) { - var temp = t1; - t1 = t2; - t2 = temp; - s = 1.0; - } - // Push the min up - if (t1 > tmin) { - normal.setZero(); - normal[f] = s; - tmin = t1; - } - // Pull the max down - tmax = math_min$7(tmax, t2); - if (tmin > tmax) { - return false; - } - } - } - // Does the ray start inside the box? - // Does the ray intersect beyond the max fraction? - if (tmin < 0.0 || input.maxFraction < tmin) { - return false; - } - // Intersection. - output.fraction = tmin; - output.normal = normal; - return true; - }; - /** @hidden */ - AABB.prototype.toString = function () { - return JSON.stringify(this); - }; - AABB.combinePoints = function (out, a, b) { - out.lowerBound.x = math_min$7(a.x, b.x); - out.lowerBound.y = math_min$7(a.y, b.y); - out.upperBound.x = math_max$7(a.x, b.x); - out.upperBound.y = math_max$7(a.y, b.y); - return out; - }; - AABB.combinedPerimeter = function (a, b) { - var lx = math_min$7(a.lowerBound.x, b.lowerBound.x); - var ly = math_min$7(a.lowerBound.y, b.lowerBound.y); - var ux = math_max$7(a.upperBound.x, b.upperBound.x); - var uy = math_max$7(a.upperBound.y, b.upperBound.y); - return 2.0 * (ux - lx + uy - ly); - }; - return AABB; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_PI$6 = Math.PI; - /** - * Tuning constants based on meters-kilograms-seconds (MKS) units. - * - * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units. - */ - var Settings = /** @class */ (function () { - function Settings() { - } - Object.defineProperty(Settings, "polygonRadius", { - /** - * The radius of the polygon/edge shape skin. This should not be modified. - * Making this smaller means polygons will have an insufficient buffer for - * continuous collision. Making it larger may create artifacts for vertex - * collision. - */ - get: function () { return 2.0 * Settings.linearSlop; }, - enumerable: false, - configurable: true - }); - /** - * You can use this to change the length scale used by your game. - * - * For example for inches you could use 39.4. - */ - Settings.lengthUnitsPerMeter = 1.0; - // Collision - /** - * The maximum number of contact points between two convex shapes. Do not change - * this value. - */ - Settings.maxManifoldPoints = 2; - /** - * The maximum number of vertices on a convex polygon. You cannot increase this - * too much because BlockAllocator has a maximum object size. - */ - Settings.maxPolygonVertices = 12; - /** - * This is used to fatten AABBs in the dynamic tree. This allows proxies to move - * by a small amount without triggering a tree adjustment. This is in meters. - */ - Settings.aabbExtension = 0.1; - /** - * This is used to fatten AABBs in the dynamic tree. This is used to predict the - * future position based on the current displacement. This is a dimensionless - * multiplier. - */ - Settings.aabbMultiplier = 2.0; - /** - * A small length used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - Settings.linearSlop = 0.005; - /** - * A small angle used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - Settings.angularSlop = (2.0 / 180.0 * math_PI$6); - /** - * Maximum number of sub-steps per contact in continuous physics simulation. - */ - Settings.maxSubSteps = 8; - // Dynamics - /** - * Maximum number of contacts to be handled to solve a TOI impact. - */ - Settings.maxTOIContacts = 32; - /** - * Maximum iterations to solve a TOI. - */ - Settings.maxTOIIterations = 20; - /** - * Maximum iterations to find Distance. - */ - Settings.maxDistanceIterations = 20; - /** - * A velocity threshold for elastic collisions. Any collision with a relative - * linear velocity below this threshold will be treated as inelastic. - */ - Settings.velocityThreshold = 1.0; - /** - * The maximum linear position correction used when solving constraints. This - * helps to prevent overshoot. - */ - Settings.maxLinearCorrection = 0.2; - /** - * The maximum angular position correction used when solving constraints. This - * helps to prevent overshoot. - */ - Settings.maxAngularCorrection = (8.0 / 180.0 * math_PI$6); - /** - * The maximum linear velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - Settings.maxTranslation = 2.0; - /** - * The maximum angular velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - Settings.maxRotation = (0.5 * math_PI$6); - /** - * This scale factor controls how fast overlap is resolved. Ideally this would - * be 1 so that overlap is removed in one time step. However using values close - * to 1 often lead to overshoot. - */ - Settings.baumgarte = 0.2; - Settings.toiBaugarte = 0.75; - // Sleep - /** - * The time that a body must be still before it will go to sleep. - */ - Settings.timeToSleep = 0.5; - /** - * A body cannot sleep if its linear velocity is above this tolerance. - */ - Settings.linearSleepTolerance = 0.01; - /** - * A body cannot sleep if its angular velocity is above this tolerance. - */ - Settings.angularSleepTolerance = (2.0 / 180.0 * math_PI$6); - return Settings; - }()); - /** @internal */ - var SettingsInternal = /** @class */ (function () { - function SettingsInternal() { - } - Object.defineProperty(SettingsInternal, "maxManifoldPoints", { - get: function () { - return Settings.maxManifoldPoints; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxPolygonVertices", { - get: function () { - return Settings.maxPolygonVertices; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "aabbExtension", { - get: function () { - return Settings.aabbExtension * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "aabbMultiplier", { - get: function () { - return Settings.aabbMultiplier; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "linearSlop", { - get: function () { - return Settings.linearSlop * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "linearSlopSquared", { - get: function () { - return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "angularSlop", { - get: function () { - return Settings.angularSlop; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "polygonRadius", { - get: function () { - return 2.0 * Settings.linearSlop; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxSubSteps", { - get: function () { - return Settings.maxSubSteps; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxTOIContacts", { - get: function () { - return Settings.maxTOIContacts; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxTOIIterations", { - get: function () { - return Settings.maxTOIIterations; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxDistanceIterations", { - get: function () { - return Settings.maxDistanceIterations; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "velocityThreshold", { - get: function () { - return Settings.velocityThreshold * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxLinearCorrection", { - get: function () { - return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxAngularCorrection", { - get: function () { - return Settings.maxAngularCorrection; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxTranslation", { - get: function () { - return Settings.maxTranslation * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxTranslationSquared", { - get: function () { - return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxRotation", { - get: function () { - return Settings.maxRotation; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "maxRotationSquared", { - get: function () { - return Settings.maxRotation * Settings.maxRotation; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "baumgarte", { - get: function () { - return Settings.baumgarte; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "toiBaugarte", { - get: function () { - return Settings.toiBaugarte; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "timeToSleep", { - get: function () { - return Settings.timeToSleep; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "linearSleepTolerance", { - get: function () { - return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "linearSleepToleranceSqr", { - get: function () { - return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "angularSleepTolerance", { - get: function () { - return Settings.angularSleepTolerance; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(SettingsInternal, "angularSleepToleranceSqr", { - get: function () { - return Settings.angularSleepTolerance * Settings.angularSleepTolerance; - }, - enumerable: false, - configurable: true - }); - return SettingsInternal; - }()); - - /* - * Copyright (c) 2016-2018 Ali Shakiba http://shakiba.me/planck.js - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - */ - /** @internal */ - var Pool = /** @class */ (function () { - function Pool(opts) { - this._list = []; - this._max = Infinity; - this._hasCreateFn = false; - this._createCount = 0; - this._hasAllocateFn = false; - this._allocateCount = 0; - this._hasReleaseFn = false; - this._releaseCount = 0; - this._hasDisposeFn = false; - this._disposeCount = 0; - this._list = []; - this._max = opts.max || this._max; - this._createFn = opts.create; - this._hasCreateFn = typeof this._createFn === "function"; - this._allocateFn = opts.allocate; - this._hasAllocateFn = typeof this._allocateFn === "function"; - this._releaseFn = opts.release; - this._hasReleaseFn = typeof this._releaseFn === "function"; - this._disposeFn = opts.dispose; - this._hasDisposeFn = typeof this._disposeFn === "function"; - } - Pool.prototype.max = function (n) { - if (typeof n === "number") { - this._max = n; - return this; - } - return this._max; - }; - Pool.prototype.size = function () { - return this._list.length; - }; - Pool.prototype.allocate = function () { - var item; - if (this._list.length > 0) { - item = this._list.shift(); - } - else { - this._createCount++; - if (this._hasCreateFn) { - item = this._createFn(); - } - else { - // tslint:disable-next-line:no-object-literal-type-assertion - item = {}; - } - } - this._allocateCount++; - if (this._hasAllocateFn) { - this._allocateFn(item); - } - return item; - }; - Pool.prototype.release = function (item) { - if (this._list.length < this._max) { - this._releaseCount++; - if (this._hasReleaseFn) { - this._releaseFn(item); - } - this._list.push(item); - } - else { - this._disposeCount++; - if (this._hasDisposeFn) { - item = this._disposeFn(item); - } - } - }; - Pool.prototype.toString = function () { - return " +" + this._createCount + " >" + this._allocateCount + " <" + this._releaseCount + " -" - + this._disposeCount + " =" + this._list.length + "/" + this._max; - }; - return Pool; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$8 = Math.abs; - /** @internal */ var math_max$6 = Math.max; - /** - * A node in the dynamic tree. The client does not interact with this directly. - */ - var TreeNode = /** @class */ (function () { - function TreeNode(id) { - /** Enlarged AABB */ - this.aabb = new AABB(); - this.userData = null; - this.parent = null; - this.child1 = null; - this.child2 = null; - /** 0: leaf, -1: free node */ - this.height = -1; - this.id = id; - } - /** @internal */ - TreeNode.prototype.toString = function () { - return this.id + ": " + this.userData; - }; - TreeNode.prototype.isLeaf = function () { - return this.child1 == null; - }; - return TreeNode; - }()); - /** @internal */ var poolTreeNode = new Pool({ - create: function () { - return new TreeNode(); - }, - release: function (node) { - node.userData = null; - node.parent = null; - node.child1 = null; - node.child2 = null; - node.height = -1; - node.id = undefined; - } - }); - /** - * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A - * dynamic tree arranges data in a binary tree to accelerate queries such as - * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we - * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger - * than the client object. This allows the client object to move by small - * amounts without triggering a tree update. - * - * Nodes are pooled and relocatable, so we use node indices rather than - * pointers. - */ - var DynamicTree = /** @class */ (function () { - function DynamicTree() { - this.inputPool = new Pool({ - create: function () { - // tslint:disable-next-line:no-object-literal-type-assertion - return {}; - }, - release: function (stack) { - } - }); - this.stackPool = new Pool({ - create: function () { - return []; - }, - release: function (stack) { - stack.length = 0; - } - }); - this.iteratorPool = new Pool({ - create: function () { - return new Iterator(); - }, - release: function (iterator) { - iterator.close(); - } - }); - this.m_root = null; - this.m_nodes = {}; - this.m_lastProxyId = 0; - } - /** - * Get proxy user data. - * - * @return the proxy user data or 0 if the id is invalid. - */ - DynamicTree.prototype.getUserData = function (id) { - var node = this.m_nodes[id]; - return node.userData; - }; - /** - * Get the fat AABB for a node id. - * - * @return the proxy user data or 0 if the id is invalid. - */ - DynamicTree.prototype.getFatAABB = function (id) { - var node = this.m_nodes[id]; - return node.aabb; - }; - DynamicTree.prototype.allocateNode = function () { - var node = poolTreeNode.allocate(); - node.id = ++this.m_lastProxyId; - this.m_nodes[node.id] = node; - return node; - }; - DynamicTree.prototype.freeNode = function (node) { - // tslint:disable-next-line:no-dynamic-delete - delete this.m_nodes[node.id]; - poolTreeNode.release(node); - }; - /** - * Create a proxy in the tree as a leaf node. We return the index of the node - * instead of a pointer so that we can grow the node pool. - * - * Create a proxy. Provide a tight fitting AABB and a userData pointer. - */ - DynamicTree.prototype.createProxy = function (aabb, userData) { - var node = this.allocateNode(); - node.aabb.set(aabb); - // Fatten the aabb. - AABB.extend(node.aabb, SettingsInternal.aabbExtension); - node.userData = userData; - node.height = 0; - this.insertLeaf(node); - return node.id; - }; - /** - * Destroy a proxy. This asserts if the id is invalid. - */ - DynamicTree.prototype.destroyProxy = function (id) { - var node = this.m_nodes[id]; - this.removeLeaf(node); - this.freeNode(node); - }; - /** - * Move a proxy with a swepted AABB. If the proxy has moved outside of its - * fattened AABB, then the proxy is removed from the tree and re-inserted. - * Otherwise the function returns immediately. - * - * @param d Displacement - * - * @return true if the proxy was re-inserted. - */ - DynamicTree.prototype.moveProxy = function (id, aabb, d) { - var node = this.m_nodes[id]; - if (node.aabb.contains(aabb)) { - return false; - } - this.removeLeaf(node); - node.aabb.set(aabb); - // Extend AABB. - aabb = node.aabb; - AABB.extend(aabb, SettingsInternal.aabbExtension); - // Predict AABB displacement. - // const d = Vec2.mul(Settings.aabbMultiplier, displacement); - if (d.x < 0.0) { - aabb.lowerBound.x += d.x * SettingsInternal.aabbMultiplier; - } - else { - aabb.upperBound.x += d.x * SettingsInternal.aabbMultiplier; - } - if (d.y < 0.0) { - aabb.lowerBound.y += d.y * SettingsInternal.aabbMultiplier; - } - else { - aabb.upperBound.y += d.y * SettingsInternal.aabbMultiplier; - } - this.insertLeaf(node); - return true; - }; - DynamicTree.prototype.insertLeaf = function (leaf) { - if (this.m_root == null) { - this.m_root = leaf; - this.m_root.parent = null; - return; - } - // Find the best sibling for this node - var leafAABB = leaf.aabb; - var index = this.m_root; - while (!index.isLeaf()) { - var child1 = index.child1; - var child2 = index.child2; - var area = index.aabb.getPerimeter(); - var combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB); - // Cost of creating a new parent for this node and the new leaf - var cost = 2.0 * combinedArea; - // Minimum cost of pushing the leaf further down the tree - var inheritanceCost = 2.0 * (combinedArea - area); - // Cost of descending into child1 - var newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb); - var cost1 = newArea1 + inheritanceCost; - if (!child1.isLeaf()) { - var oldArea = child1.aabb.getPerimeter(); - cost1 -= oldArea; - } - // Cost of descending into child2 - var newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb); - var cost2 = newArea2 + inheritanceCost; - if (!child2.isLeaf()) { - var oldArea = child2.aabb.getPerimeter(); - cost2 -= oldArea; - } - // Descend according to the minimum cost. - if (cost < cost1 && cost < cost2) { - break; - } - // Descend - if (cost1 < cost2) { - index = child1; - } - else { - index = child2; - } - } - var sibling = index; - // Create a new parent. - var oldParent = sibling.parent; - var newParent = this.allocateNode(); - newParent.parent = oldParent; - newParent.userData = null; - newParent.aabb.combine(leafAABB, sibling.aabb); - newParent.height = sibling.height + 1; - if (oldParent != null) { - // The sibling was not the root. - if (oldParent.child1 === sibling) { - oldParent.child1 = newParent; - } - else { - oldParent.child2 = newParent; - } - newParent.child1 = sibling; - newParent.child2 = leaf; - sibling.parent = newParent; - leaf.parent = newParent; - } - else { - // The sibling was the root. - newParent.child1 = sibling; - newParent.child2 = leaf; - sibling.parent = newParent; - leaf.parent = newParent; - this.m_root = newParent; - } - // Walk back up the tree fixing heights and AABBs - index = leaf.parent; - while (index != null) { - index = this.balance(index); - var child1 = index.child1; - var child2 = index.child2; - index.height = 1 + math_max$6(child1.height, child2.height); - index.aabb.combine(child1.aabb, child2.aabb); - index = index.parent; - } - // validate(); - }; - DynamicTree.prototype.removeLeaf = function (leaf) { - if (leaf === this.m_root) { - this.m_root = null; - return; - } - var parent = leaf.parent; - var grandParent = parent.parent; - var sibling; - if (parent.child1 === leaf) { - sibling = parent.child2; - } - else { - sibling = parent.child1; - } - if (grandParent != null) { - // Destroy parent and connect sibling to grandParent. - if (grandParent.child1 === parent) { - grandParent.child1 = sibling; - } - else { - grandParent.child2 = sibling; - } - sibling.parent = grandParent; - this.freeNode(parent); - // Adjust ancestor bounds. - var index = grandParent; - while (index != null) { - index = this.balance(index); - var child1 = index.child1; - var child2 = index.child2; - index.aabb.combine(child1.aabb, child2.aabb); - index.height = 1 + math_max$6(child1.height, child2.height); - index = index.parent; - } - } - else { - this.m_root = sibling; - sibling.parent = null; - this.freeNode(parent); - } - // validate(); - }; - /** - * Perform a left or right rotation if node A is imbalanced. Returns the new - * root index. - */ - DynamicTree.prototype.balance = function (iA) { - var A = iA; - if (A.isLeaf() || A.height < 2) { - return iA; - } - var B = A.child1; - var C = A.child2; - var balance = C.height - B.height; - // Rotate C up - if (balance > 1) { - var F = C.child1; - var G = C.child2; - // Swap A and C - C.child1 = A; - C.parent = A.parent; - A.parent = C; - // A's old parent should point to C - if (C.parent != null) { - if (C.parent.child1 === iA) { - C.parent.child1 = C; - } - else { - C.parent.child2 = C; - } - } - else { - this.m_root = C; - } - // Rotate - if (F.height > G.height) { - C.child2 = F; - A.child2 = G; - G.parent = A; - A.aabb.combine(B.aabb, G.aabb); - C.aabb.combine(A.aabb, F.aabb); - A.height = 1 + math_max$6(B.height, G.height); - C.height = 1 + math_max$6(A.height, F.height); - } - else { - C.child2 = G; - A.child2 = F; - F.parent = A; - A.aabb.combine(B.aabb, F.aabb); - C.aabb.combine(A.aabb, G.aabb); - A.height = 1 + math_max$6(B.height, F.height); - C.height = 1 + math_max$6(A.height, G.height); - } - return C; - } - // Rotate B up - if (balance < -1) { - var D = B.child1; - var E = B.child2; - // Swap A and B - B.child1 = A; - B.parent = A.parent; - A.parent = B; - // A's old parent should point to B - if (B.parent != null) { - if (B.parent.child1 === A) { - B.parent.child1 = B; - } - else { - B.parent.child2 = B; - } - } - else { - this.m_root = B; - } - // Rotate - if (D.height > E.height) { - B.child2 = D; - A.child1 = E; - E.parent = A; - A.aabb.combine(C.aabb, E.aabb); - B.aabb.combine(A.aabb, D.aabb); - A.height = 1 + math_max$6(C.height, E.height); - B.height = 1 + math_max$6(A.height, D.height); - } - else { - B.child2 = E; - A.child1 = D; - D.parent = A; - A.aabb.combine(C.aabb, D.aabb); - B.aabb.combine(A.aabb, E.aabb); - A.height = 1 + math_max$6(C.height, D.height); - B.height = 1 + math_max$6(A.height, E.height); - } - return B; - } - return A; - }; - /** - * Compute the height of the binary tree in O(N) time. Should not be called - * often. - */ - DynamicTree.prototype.getHeight = function () { - if (this.m_root == null) { - return 0; - } - return this.m_root.height; - }; - /** - * Get the ratio of the sum of the node areas to the root area. - */ - DynamicTree.prototype.getAreaRatio = function () { - if (this.m_root == null) { - return 0.0; - } - var root = this.m_root; - var rootArea = root.aabb.getPerimeter(); - var totalArea = 0.0; - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - if (node.height < 0) { - // Free node in pool - continue; - } - totalArea += node.aabb.getPerimeter(); - } - this.iteratorPool.release(it); - return totalArea / rootArea; - }; - /** - * Compute the height of a sub-tree. - */ - DynamicTree.prototype.computeHeight = function (id) { - var node; - if (typeof id !== "undefined") { - node = this.m_nodes[id]; - } - else { - node = this.m_root; - } - // false && console.assert(0 <= id && id < this.m_nodeCapacity); - if (node.isLeaf()) { - return 0; - } - var height1 = this.computeHeight(node.child1.id); - var height2 = this.computeHeight(node.child2.id); - return 1 + math_max$6(height1, height2); - }; - DynamicTree.prototype.validateStructure = function (node) { - if (node == null) { - return; - } - if (node === this.m_root) ; - var child1 = node.child1; - var child2 = node.child2; - if (node.isLeaf()) { - return; - } - this.validateStructure(child1); - this.validateStructure(child2); - }; - DynamicTree.prototype.validateMetrics = function (node) { - if (node == null) { - return; - } - var child1 = node.child1; - var child2 = node.child2; - if (node.isLeaf()) { - return; - } - // false && console.assert(0 <= child1 && child1 < this.m_nodeCapacity); - // false && console.assert(0 <= child2 && child2 < this.m_nodeCapacity); - child1.height; - child2.height; - var aabb = new AABB(); - aabb.combine(child1.aabb, child2.aabb); - this.validateMetrics(child1); - this.validateMetrics(child2); - }; - /** - * Validate this tree. For testing. - */ - DynamicTree.prototype.validate = function () { - return; - }; - /** - * Get the maximum balance of an node in the tree. The balance is the difference - * in height of the two children of a node. - */ - DynamicTree.prototype.getMaxBalance = function () { - var maxBalance = 0; - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - if (node.height <= 1) { - continue; - } - var balance = math_abs$8(node.child2.height - node.child1.height); - maxBalance = math_max$6(maxBalance, balance); - } - this.iteratorPool.release(it); - return maxBalance; - }; - /** - * Build an optimal tree. Very expensive. For testing. - */ - DynamicTree.prototype.rebuildBottomUp = function () { - var nodes = []; - var count = 0; - // Build array of leaves. Free the rest. - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - if (node.height < 0) { - // free node in pool - continue; - } - if (node.isLeaf()) { - node.parent = null; - nodes[count] = node; - ++count; - } - else { - this.freeNode(node); - } - } - this.iteratorPool.release(it); - while (count > 1) { - var minCost = Infinity; - var iMin = -1; - var jMin = -1; - for (var i = 0; i < count; ++i) { - var aabbi = nodes[i].aabb; - for (var j = i + 1; j < count; ++j) { - var aabbj = nodes[j].aabb; - var cost = AABB.combinedPerimeter(aabbi, aabbj); - if (cost < minCost) { - iMin = i; - jMin = j; - minCost = cost; - } - } - } - var child1 = nodes[iMin]; - var child2 = nodes[jMin]; - var parent_1 = this.allocateNode(); - parent_1.child1 = child1; - parent_1.child2 = child2; - parent_1.height = 1 + math_max$6(child1.height, child2.height); - parent_1.aabb.combine(child1.aabb, child2.aabb); - parent_1.parent = null; - child1.parent = parent_1; - child2.parent = parent_1; - nodes[jMin] = nodes[count - 1]; - nodes[iMin] = parent_1; - --count; - } - this.m_root = nodes[0]; - }; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - DynamicTree.prototype.shiftOrigin = function (newOrigin) { - // Build array of leaves. Free the rest. - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - var aabb = node.aabb; - aabb.lowerBound.x -= newOrigin.x; - aabb.lowerBound.y -= newOrigin.y; - aabb.upperBound.x -= newOrigin.x; - aabb.upperBound.y -= newOrigin.y; - } - this.iteratorPool.release(it); - }; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - DynamicTree.prototype.query = function (aabb, queryCallback) { - var stack = this.stackPool.allocate(); - stack.push(this.m_root); - while (stack.length > 0) { - var node = stack.pop(); - if (node == null) { - continue; - } - if (AABB.testOverlap(node.aabb, aabb)) { - if (node.isLeaf()) { - var proceed = queryCallback(node.id); - if (proceed === false) { - return; - } - } - else { - stack.push(node.child1); - stack.push(node.child2); - } - } - } - this.stackPool.release(stack); - }; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - DynamicTree.prototype.rayCast = function (input, rayCastCallback) { - var p1 = input.p1; - var p2 = input.p2; - var r = Vec2.sub(p2, p1); - r.normalize(); - // v is perpendicular to the segment. - var v = Vec2.crossNumVec2(1.0, r); - var abs_v = Vec2.abs(v); - // Separating axis for segment (Gino, p80). - // |dot(v, p1 - c)| > dot(|v|, h) - var maxFraction = input.maxFraction; - // Build a bounding box for the segment. - var segmentAABB = new AABB(); - var t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2); - segmentAABB.combinePoints(p1, t); - var stack = this.stackPool.allocate(); - var subInput = this.inputPool.allocate(); - stack.push(this.m_root); - while (stack.length > 0) { - var node = stack.pop(); - if (node == null) { - continue; - } - if (AABB.testOverlap(node.aabb, segmentAABB) === false) { - continue; - } - // Separating axis for segment (Gino, p80). - // |dot(v, p1 - c)| > dot(|v|, h) - var c = node.aabb.getCenter(); - var h = node.aabb.getExtents(); - var separation = math_abs$8(Vec2.dot(v, Vec2.sub(p1, c))) - Vec2.dot(abs_v, h); - if (separation > 0.0) { - continue; - } - if (node.isLeaf()) { - subInput.p1 = Vec2.clone(input.p1); - subInput.p2 = Vec2.clone(input.p2); - subInput.maxFraction = maxFraction; - var value = rayCastCallback(subInput, node.id); - if (value === 0.0) { - // The client has terminated the ray cast. - break; - } - else if (value > 0.0) { - // update segment bounding box. - maxFraction = value; - t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2); - segmentAABB.combinePoints(p1, t); - } - } - else { - stack.push(node.child1); - stack.push(node.child2); - } - } - this.stackPool.release(stack); - this.inputPool.release(subInput); - }; - return DynamicTree; - }()); - /** @internal */ - var Iterator = /** @class */ (function () { - function Iterator() { - this.parents = []; - this.states = []; - } - Iterator.prototype.preorder = function (root) { - this.parents.length = 0; - this.parents.push(root); - this.states.length = 0; - this.states.push(0); - return this; - }; - Iterator.prototype.next = function () { - while (this.parents.length > 0) { - var i = this.parents.length - 1; - var node = this.parents[i]; - if (this.states[i] === 0) { - this.states[i] = 1; - return node; - } - if (this.states[i] === 1) { - this.states[i] = 2; - if (node.child1) { - this.parents.push(node.child1); - this.states.push(1); - return node.child1; - } - } - if (this.states[i] === 2) { - this.states[i] = 3; - if (node.child2) { - this.parents.push(node.child2); - this.states.push(1); - return node.child2; - } - } - this.parents.pop(); - this.states.pop(); - } - }; - Iterator.prototype.close = function () { - this.parents.length = 0; - }; - return Iterator; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_max$5 = Math.max; - /** @internal */ var math_min$6 = Math.min; - /** - * The broad-phase wraps and extends a dynamic-tree to keep track of moved - * objects and query them on update. - */ - var BroadPhase = /** @class */ (function () { - function BroadPhase() { - var _this = this; - this.m_tree = new DynamicTree(); - this.m_moveBuffer = []; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - this.query = function (aabb, queryCallback) { - _this.m_tree.query(aabb, queryCallback); - }; - this.queryCallback = function (proxyId) { - // A proxy cannot form a pair with itself. - if (proxyId === _this.m_queryProxyId) { - return true; - } - var proxyIdA = math_min$6(proxyId, _this.m_queryProxyId); - var proxyIdB = math_max$5(proxyId, _this.m_queryProxyId); - // TODO: Skip any duplicate pairs. - var userDataA = _this.m_tree.getUserData(proxyIdA); - var userDataB = _this.m_tree.getUserData(proxyIdB); - // Send the pairs back to the client. - _this.m_callback(userDataA, userDataB); - return true; - }; - } - /** - * Get user data from a proxy. Returns null if the id is invalid. - */ - BroadPhase.prototype.getUserData = function (proxyId) { - return this.m_tree.getUserData(proxyId); - }; - /** - * Test overlap of fat AABBs. - */ - BroadPhase.prototype.testOverlap = function (proxyIdA, proxyIdB) { - var aabbA = this.m_tree.getFatAABB(proxyIdA); - var aabbB = this.m_tree.getFatAABB(proxyIdB); - return AABB.testOverlap(aabbA, aabbB); - }; - /** - * Get the fat AABB for a proxy. - */ - BroadPhase.prototype.getFatAABB = function (proxyId) { - return this.m_tree.getFatAABB(proxyId); - }; - /** - * Get the number of proxies. - */ - BroadPhase.prototype.getProxyCount = function () { - return this.m_moveBuffer.length; - }; - /** - * Get the height of the embedded tree. - */ - BroadPhase.prototype.getTreeHeight = function () { - return this.m_tree.getHeight(); - }; - /** - * Get the balance (integer) of the embedded tree. - */ - BroadPhase.prototype.getTreeBalance = function () { - return this.m_tree.getMaxBalance(); - }; - /** - * Get the quality metric of the embedded tree. - */ - BroadPhase.prototype.getTreeQuality = function () { - return this.m_tree.getAreaRatio(); - }; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - BroadPhase.prototype.rayCast = function (input, rayCastCallback) { - this.m_tree.rayCast(input, rayCastCallback); - }; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - BroadPhase.prototype.shiftOrigin = function (newOrigin) { - this.m_tree.shiftOrigin(newOrigin); - }; - /** - * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs - * is called. - */ - BroadPhase.prototype.createProxy = function (aabb, userData) { - var proxyId = this.m_tree.createProxy(aabb, userData); - this.bufferMove(proxyId); - return proxyId; - }; - /** - * Destroy a proxy. It is up to the client to remove any pairs. - */ - BroadPhase.prototype.destroyProxy = function (proxyId) { - this.unbufferMove(proxyId); - this.m_tree.destroyProxy(proxyId); - }; - /** - * Call moveProxy as many times as you like, then when you are done call - * UpdatePairs to finalized the proxy pairs (for your time step). - */ - BroadPhase.prototype.moveProxy = function (proxyId, aabb, displacement) { - var changed = this.m_tree.moveProxy(proxyId, aabb, displacement); - if (changed) { - this.bufferMove(proxyId); - } - }; - /** - * Call to trigger a re-processing of it's pairs on the next call to - * UpdatePairs. - */ - BroadPhase.prototype.touchProxy = function (proxyId) { - this.bufferMove(proxyId); - }; - BroadPhase.prototype.bufferMove = function (proxyId) { - this.m_moveBuffer.push(proxyId); - }; - BroadPhase.prototype.unbufferMove = function (proxyId) { - for (var i = 0; i < this.m_moveBuffer.length; ++i) { - if (this.m_moveBuffer[i] === proxyId) { - this.m_moveBuffer[i] = null; - } - } - }; - /** - * Update the pairs. This results in pair callbacks. This can only add pairs. - */ - BroadPhase.prototype.updatePairs = function (addPairCallback) { - this.m_callback = addPairCallback; - // Perform tree queries for all moving proxies. - while (this.m_moveBuffer.length > 0) { - this.m_queryProxyId = this.m_moveBuffer.pop(); - if (this.m_queryProxyId === null) { - continue; - } - // We have to query the tree with the fat AABB so that - // we don't fail to create a pair that may touch later. - var fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId); - // Query tree, create pairs and add them pair buffer. - this.m_tree.query(fatAABB, this.queryCallback); - } - // Try to keep the tree balanced. - // this.m_tree.rebalance(4); - }; - return BroadPhase; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2023 Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_sin$2 = Math.sin; - /** @internal */ var math_cos$2 = Math.cos; - /** @internal */ var math_sqrt$4 = Math.sqrt; - function vec2(x, y) { - return { x: x, y: y }; - } - function rotation(angle) { - return { s: math_sin$2(angle), c: math_cos$2(angle) }; - } - function setVec2(out, x, y) { - out.x = x; - out.y = y; - return out; - } - function copyVec2(out, w) { - out.x = w.x; - out.y = w.y; - return out; - } - function zeroVec2(out) { - out.x = 0; - out.y = 0; - return out; - } - function negVec2(out) { - out.x = -out.x; - out.y = -out.y; - return out; - } - function plusVec2(out, w) { - out.x += w.x; - out.y += w.y; - return out; - } - function addVec2(out, v, w) { - out.x = v.x + w.x; - out.y = v.x + w.y; - return out; - } - function minusVec2(out, w) { - out.x -= w.x; - out.y -= w.y; - return out; - } - function subVec2(out, v, w) { - out.x = v.x - w.x; - out.y = v.y - w.y; - return out; - } - function mulVec2(out, m) { - out.x *= m; - out.y *= m; - return out; - } - function scaleVec2(out, m, w) { - out.x = m * w.x; - out.y = m * w.y; - return out; - } - function plusScaleVec2(out, m, w) { - out.x += m * w.x; - out.y += m * w.y; - return out; - } - function minusScaleVec2(out, m, w) { - out.x -= m * w.x; - out.y -= m * w.y; - return out; - } - function combine2Vec2(out, am, a, bm, b) { - out.x = am * a.x + bm * b.x; - out.y = am * a.y + bm * b.y; - return out; - } - function combine3Vec2(out, am, a, bm, b, cm, c) { - out.x = am * a.x + bm * b.x + cm * c.x; - out.y = am * a.y + bm * b.y + cm * c.y; - return out; - } - function normalizeVec2Length(out) { - var length = math_sqrt$4(out.x * out.x + out.y * out.y); - if (length !== 0) { - var invLength = 1 / length; - out.x *= invLength; - out.y *= invLength; - } - return length; - } - function normalizeVec2(out) { - var length = math_sqrt$4(out.x * out.x + out.y * out.y); - if (length > 0) { - var invLength = 1 / length; - out.x *= invLength; - out.y *= invLength; - } - return out; - } - function crossVec2Num(out, v, w) { - var x = w * v.y; - var y = -w * v.x; - out.x = x; - out.y = y; - return out; - } - function crossNumVec2(out, w, v) { - var x = -w * v.y; - var y = w * v.x; - out.x = x; - out.y = y; - return out; - } - function crossVec2Vec2(a, b) { - return a.x * b.y - a.y * b.x; - } - function dotVec2(a, b) { - return a.x * b.x + a.y * b.y; - } - function lengthSqrVec2(a) { - return a.x * a.x + a.y * a.y; - } - function distVec2(a, b) { - var dx = a.x - b.x; - var dy = a.y - b.y; - return math_sqrt$4(dx * dx + dy * dy); - } - function distSqrVec2(a, b) { - var dx = a.x - b.x; - var dy = a.y - b.y; - return dx * dx + dy * dy; - } - function setRotAngle(out, a) { - out.c = math_cos$2(a); - out.s = math_sin$2(a); - return out; - } - function rotVec2(out, q, v) { - out.x = q.c * v.x - q.s * v.y; - out.y = q.s * v.x + q.c * v.y; - return out; - } - function derotVec2(out, q, v) { - var x = q.c * v.x + q.s * v.y; - var y = -q.s * v.x + q.c * v.y; - out.x = x; - out.y = y; - return out; - } - function rerotVec2(out, before, after, v) { - var x0 = before.c * v.x + before.s * v.y; - var y0 = -before.s * v.x + before.c * v.y; - var x = after.c * x0 - after.s * y0; - var y = after.s * x0 + after.c * y0; - out.x = x; - out.y = y; - return out; - } - function transform(x, y, a) { - return { p: vec2(x, y), q: rotation(a) }; - } - function copyTransform(out, transform) { - out.p.x = transform.p.x; - out.p.y = transform.p.y; - out.q.s = transform.q.s; - out.q.c = transform.q.c; - return out; - } - function transformVec2(out, xf, v) { - var x = xf.q.c * v.x - xf.q.s * v.y + xf.p.x; - var y = xf.q.s * v.x + xf.q.c * v.y + xf.p.y; - out.x = x; - out.y = y; - return out; - } - function detransformVec2(out, xf, v) { - var px = v.x - xf.p.x; - var py = v.y - xf.p.y; - var x = (xf.q.c * px + xf.q.s * py); - var y = (-xf.q.s * px + xf.q.c * py); - out.x = x; - out.y = y; - return out; - } - function retransformVec2(out, from, to, v) { - var x0 = from.q.c * v.x - from.q.s * v.y + from.p.x; - var y0 = from.q.s * v.x + from.q.c * v.y + from.p.y; - var px = x0 - to.p.x; - var py = y0 - to.p.y; - var x = to.q.c * px + to.q.s * py; - var y = -to.q.s * px + to.q.c * py; - out.x = x; - out.y = y; - return out; - } - function detransformTransform(out, a, b) { - var c = a.q.c * b.q.c + a.q.s * b.q.s; - var s = a.q.c * b.q.s - a.q.s * b.q.c; - var x = a.q.c * (b.p.x - a.p.x) + a.q.s * (b.p.y - a.p.y); - var y = -a.q.s * (b.p.x - a.p.x) + a.q.c * (b.p.y - a.p.y); - out.q.c = c; - out.q.s = s; - out.p.x = x; - out.p.y = y; - return out; - } - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_sin$1 = Math.sin; - /** @internal */ var math_cos$1 = Math.cos; - /** @internal */ var math_atan2$1 = Math.atan2; - var Rot = /** @class */ (function () { - /** Initialize from an angle in radians. */ - function Rot(angle) { - if (!(this instanceof Rot)) { - return new Rot(angle); - } - if (typeof angle === "number") { - this.setAngle(angle); - } - else if (typeof angle === "object") { - this.setRot(angle); - } - else { - this.setIdentity(); - } - } - /** @hidden */ - Rot.neo = function (angle) { - var obj = Object.create(Rot.prototype); - obj.setAngle(angle); - return obj; - }; - Rot.clone = function (rot) { - var obj = Object.create(Rot.prototype); - obj.s = rot.s; - obj.c = rot.c; - return obj; - }; - Rot.identity = function () { - var obj = Object.create(Rot.prototype); - obj.s = 0.0; - obj.c = 1.0; - return obj; - }; - Rot.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Number.isFinite(obj.s) && Number.isFinite(obj.c); - }; - Rot.assert = function (o) { - }; - /** Set to the identity rotation. */ - Rot.prototype.setIdentity = function () { - this.s = 0.0; - this.c = 1.0; - }; - Rot.prototype.set = function (angle) { - if (typeof angle === "object") { - this.s = angle.s; - this.c = angle.c; - } - else { - // TODO_ERIN optimize - this.s = math_sin$1(angle); - this.c = math_cos$1(angle); - } - }; - Rot.prototype.setRot = function (angle) { - this.s = angle.s; - this.c = angle.c; - }; - /** Set using an angle in radians. */ - Rot.prototype.setAngle = function (angle) { - // TODO_ERIN optimize - this.s = math_sin$1(angle); - this.c = math_cos$1(angle); - }; - /** Get the angle in radians. */ - Rot.prototype.getAngle = function () { - return math_atan2$1(this.s, this.c); - }; - /** Get the x-axis. */ - Rot.prototype.getXAxis = function () { - return Vec2.neo(this.c, this.s); - }; - /** Get the y-axis. */ - Rot.prototype.getYAxis = function () { - return Vec2.neo(-this.s, this.c); - }; - Rot.mul = function (rot, m) { - if ("c" in m && "s" in m) { - // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc] - // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc] - // s = qs * rc + qc * rs - // c = qc * rc - qs * rs - var qr = Rot.identity(); - qr.s = rot.s * m.c + rot.c * m.s; - qr.c = rot.c * m.c - rot.s * m.s; - return qr; - } - else if ("x" in m && "y" in m) { - return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y); - } - }; - /** Multiply two rotations: q * r */ - Rot.mulRot = function (rot, m) { - // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc] - // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc] - // s = qs * rc + qc * rs - // c = qc * rc - qs * rs - var qr = Rot.identity(); - qr.s = rot.s * m.c + rot.c * m.s; - qr.c = rot.c * m.c - rot.s * m.s; - return qr; - }; - /** Rotate a vector */ - Rot.mulVec2 = function (rot, m) { - return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y); - }; - Rot.mulSub = function (rot, v, w) { - var x = rot.c * (v.x - w.x) - rot.s * (v.y - w.y); - var y = rot.s * (v.x - w.x) + rot.c * (v.y - w.y); - return Vec2.neo(x, y); - }; - Rot.mulT = function (rot, m) { - if ("c" in m && "s" in m) { - // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc] - // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc] - // s = qc * rs - qs * rc - // c = qc * rc + qs * rs - var qr = Rot.identity(); - qr.s = rot.c * m.s - rot.s * m.c; - qr.c = rot.c * m.c + rot.s * m.s; - return qr; - } - else if ("x" in m && "y" in m) { - return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y); - } - }; - /** Transpose multiply two rotations: qT * r */ - Rot.mulTRot = function (rot, m) { - // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc] - // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc] - // s = qc * rs - qs * rc - // c = qc * rc + qs * rs - var qr = Rot.identity(); - qr.s = rot.c * m.s - rot.s * m.c; - qr.c = rot.c * m.c + rot.s * m.s; - return qr; - }; - /** Inverse rotate a vector */ - Rot.mulTVec2 = function (rot, m) { - return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y); - }; - return Rot; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_atan2 = Math.atan2; - /** @internal */ var math_PI$5 = Math.PI; - /** @internal */ var temp$7 = vec2(0, 0); - /** - * This describes the motion of a body/shape for TOI computation. Shapes are - * defined with respect to the body origin, which may not coincide with the - * center of mass. However, to support dynamics we must interpolate the center - * of mass position. - */ - var Sweep = /** @class */ (function () { - function Sweep() { - /** Local center of mass position */ - this.localCenter = Vec2.zero(); - /** World center position */ - this.c = Vec2.zero(); - /** World angle */ - this.a = 0; - /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */ - this.alpha0 = 0; - this.c0 = Vec2.zero(); - this.a0 = 0; - } - /** @internal */ - Sweep.prototype.recycle = function () { - zeroVec2(this.localCenter); - zeroVec2(this.c); - this.a = 0; - this.alpha0 = 0; - zeroVec2(this.c0); - this.a0 = 0; - }; - Sweep.prototype.setTransform = function (xf) { - transformVec2(temp$7, xf, this.localCenter); - copyVec2(this.c, temp$7); - copyVec2(this.c0, temp$7); - this.a = this.a0 = math_atan2(xf.q.s, xf.q.c); - }; - Sweep.prototype.setLocalCenter = function (localCenter, xf) { - copyVec2(this.localCenter, localCenter); - transformVec2(temp$7, xf, this.localCenter); - copyVec2(this.c, temp$7); - copyVec2(this.c0, temp$7); - }; - /** - * Get the interpolated transform at a specific time. - * - * @param xf - * @param beta A factor in [0,1], where 0 indicates alpha0 - */ - Sweep.prototype.getTransform = function (xf, beta) { - if (beta === void 0) { beta = 0; } - setRotAngle(xf.q, (1.0 - beta) * this.a0 + beta * this.a); - combine2Vec2(xf.p, (1.0 - beta), this.c0, beta, this.c); - // shift to origin - minusVec2(xf.p, rotVec2(temp$7, xf.q, this.localCenter)); - }; - /** - * Advance the sweep forward, yielding a new initial state. - * - * @param alpha The new initial time - */ - Sweep.prototype.advance = function (alpha) { - var beta = (alpha - this.alpha0) / (1.0 - this.alpha0); - combine2Vec2(this.c0, beta, this.c, 1 - beta, this.c0); - this.a0 = beta * this.a + (1 - beta) * this.a0; - this.alpha0 = alpha; - }; - Sweep.prototype.forward = function () { - this.a0 = this.a; - copyVec2(this.c0, this.c); - }; - /** - * normalize the angles in radians to be between -pi and pi. - */ - Sweep.prototype.normalize = function () { - var a0 = mod(this.a0, -math_PI$5, +math_PI$5); - this.a -= this.a0 - a0; - this.a0 = a0; - }; - Sweep.prototype.set = function (that) { - copyVec2(this.localCenter, that.localCenter); - copyVec2(this.c, that.c); - this.a = that.a; - this.alpha0 = that.alpha0; - copyVec2(this.c0, that.c0); - this.a0 = that.a0; - }; - return Sweep; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** - * A transform contains translation and rotation. It is used to represent the - * position and orientation of rigid frames. Initialize using a position vector - * and a rotation. - */ - var Transform = /** @class */ (function () { - function Transform(position, rotation) { - if (!(this instanceof Transform)) { - return new Transform(position, rotation); - } - this.p = Vec2.zero(); - this.q = Rot.identity(); - if (typeof position !== "undefined") { - this.p.setVec2(position); - } - if (typeof rotation !== "undefined") { - this.q.setAngle(rotation); - } - } - Transform.clone = function (xf) { - var obj = Object.create(Transform.prototype); - obj.p = Vec2.clone(xf.p); - obj.q = Rot.clone(xf.q); - return obj; - }; - /** @hidden */ - Transform.neo = function (position, rotation) { - var obj = Object.create(Transform.prototype); - obj.p = Vec2.clone(position); - obj.q = Rot.clone(rotation); - return obj; - }; - Transform.identity = function () { - var obj = Object.create(Transform.prototype); - obj.p = Vec2.zero(); - obj.q = Rot.identity(); - return obj; - }; - /** Set this to the identity transform */ - Transform.prototype.setIdentity = function () { - this.p.setZero(); - this.q.setIdentity(); - }; - Transform.prototype.set = function (a, b) { - if (typeof b === "undefined") { - this.p.set(a.p); - this.q.set(a.q); - } - else { - this.p.set(a); - this.q.set(b); - } - }; - /** Set position and angle */ - Transform.prototype.setNum = function (position, rotation) { - this.p.setVec2(position); - this.q.setAngle(rotation); - }; - Transform.prototype.setTransform = function (xf) { - this.p.setVec2(xf.p); - this.q.setRot(xf.q); - }; - Transform.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec2.isValid(obj.p) && Rot.isValid(obj.q); - }; - Transform.assert = function (o) { - }; - // static mul(a: Transform, b: Vec2Value[]): Vec2[]; - // static mul(a: Transform, b: Transform[]): Transform[]; - Transform.mul = function (a, b) { - if (Array.isArray(b)) { - var arr = []; - for (var i = 0; i < b.length; i++) { - arr[i] = Transform.mul(a, b[i]); - } - return arr; - } - else if ("x" in b && "y" in b) { - return Transform.mulVec2(a, b); - } - else if ("p" in b && "q" in b) { - return Transform.mulXf(a, b); - } - }; - Transform.mulAll = function (a, b) { - var arr = []; - for (var i = 0; i < b.length; i++) { - arr[i] = Transform.mul(a, b[i]); - } - return arr; - }; - /** @hidden @deprecated */ - Transform.mulFn = function (a) { - return function (b) { - return Transform.mul(a, b); - }; - }; - Transform.mulVec2 = function (a, b) { - var x = (a.q.c * b.x - a.q.s * b.y) + a.p.x; - var y = (a.q.s * b.x + a.q.c * b.y) + a.p.y; - return Vec2.neo(x, y); - }; - Transform.mulXf = function (a, b) { - // v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p - // = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p - var xf = Transform.identity(); - xf.q = Rot.mulRot(a.q, b.q); - xf.p = Vec2.add(Rot.mulVec2(a.q, b.p), a.p); - return xf; - }; - Transform.mulT = function (a, b) { - if ("x" in b && "y" in b) { - return Transform.mulTVec2(a, b); - } - else if ("p" in b && "q" in b) { - return Transform.mulTXf(a, b); - } - }; - Transform.mulTVec2 = function (a, b) { - var px = b.x - a.p.x; - var py = b.y - a.p.y; - var x = (a.q.c * px + a.q.s * py); - var y = (-a.q.s * px + a.q.c * py); - return Vec2.neo(x, y); - }; - Transform.mulTXf = function (a, b) { - // v2 = A.q' * (B.q * v1 + B.p - A.p) - // = A.q' * B.q * v1 + A.q' * (B.p - A.p) - var xf = Transform.identity(); - xf.q.setRot(Rot.mulTRot(a.q, b.q)); - xf.p.setVec2(Rot.mulTVec2(a.q, Vec2.sub(b.p, a.p))); - return xf; - }; - return Transform; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - var Velocity = /** @class */ (function () { - function Velocity() { - /** linear */ - this.v = Vec2.zero(); - /** angular */ - this.w = 0; - } - return Velocity; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_sin = Math.sin; - /** @internal */ var math_cos = Math.cos; - var Position = /** @class */ (function () { - function Position() { - /** location */ - this.c = Vec2.zero(); - /** angle */ - this.a = 0; - } - // todo: cache sin/cos - Position.prototype.getTransform = function (xf, p) { - // xf.q = rotation(this.a); - // xf.p = this.c - xf.q * p - xf.q.c = math_cos(this.a); - xf.q.s = math_sin(this.a); - xf.p.x = this.c.x - (xf.q.c * p.x - xf.q.s * p.y); - xf.p.y = this.c.y - (xf.q.s * p.x + xf.q.c * p.y); - return xf; - }; - return Position; - }()); - function getTransform(xf, p, c, a) { - // xf.q = rotation(a); - // xf.p = this.c - xf.q * p - xf.q.c = math_cos(a); - xf.q.s = math_sin(a); - xf.p.x = c.x - (xf.q.c * p.x - xf.q.s * p.y); - xf.p.y = c.y - (xf.q.s * p.x + xf.q.c * p.y); - return xf; - } - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - // todo make shape an interface - /** - * A shape is used for collision detection. You can create a shape however you - * like. Shapes used for simulation in World are created automatically when a - * Fixture is created. Shapes may encapsulate one or more child shapes. - */ - var Shape = /** @class */ (function () { - function Shape() { - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - } - Shape.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return typeof obj.m_type === "string" && typeof obj.m_radius === "number"; - }; - return Shape; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var synchronize_aabb1 = new AABB(); - /** @internal */ var synchronize_aabb2 = new AABB(); - /** @internal */ var displacement = vec2(0, 0); - /** @internal */ var FixtureDefDefault = { - userData: null, - friction: 0.2, - restitution: 0.0, - density: 0.0, - isSensor: false, - filterGroupIndex: 0, - filterCategoryBits: 0x0001, - filterMaskBits: 0xFFFF - }; - /** - * This proxy is used internally to connect shape children to the broad-phase. - */ - var FixtureProxy = /** @class */ (function () { - function FixtureProxy(fixture, childIndex) { - this.aabb = new AABB(); - this.fixture = fixture; - this.childIndex = childIndex; - this.proxyId; - } - return FixtureProxy; - }()); - /** - * A fixture is used to attach a shape to a body for collision detection. A - * fixture inherits its transform from its parent. Fixtures hold additional - * non-geometric data such as friction, collision filters, etc. - * - * To create a new Fixture use {@link Body.createFixture}. - */ - var Fixture = /** @class */ (function () { - /** @internal */ - function Fixture(body, shape, def) { - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - if (shape.shape) { - def = shape; - shape = shape.shape; - } - else if (typeof def === "number") { - def = { density: def }; - } - def = options(def, FixtureDefDefault); - this.m_body = body; - this.m_friction = def.friction; - this.m_restitution = def.restitution; - this.m_density = def.density; - this.m_isSensor = def.isSensor; - this.m_filterGroupIndex = def.filterGroupIndex; - this.m_filterCategoryBits = def.filterCategoryBits; - this.m_filterMaskBits = def.filterMaskBits; - // TODO validate shape - this.m_shape = shape; // .clone(); - this.m_next = null; - this.m_proxies = []; - this.m_proxyCount = 0; - // fixture proxies are created here, - // but they are activate in when a fixture is added to body - var childCount = this.m_shape.getChildCount(); - for (var i = 0; i < childCount; ++i) { - this.m_proxies[i] = new FixtureProxy(this, i); - } - this.m_userData = def.userData; - } - /** @hidden Re-setup fixture. */ - Fixture.prototype._reset = function () { - var body = this.getBody(); - var broadPhase = body.m_world.m_broadPhase; - this.destroyProxies(broadPhase); - if (this.m_shape._reset) { - this.m_shape._reset(); - } - var childCount = this.m_shape.getChildCount(); - for (var i = 0; i < childCount; ++i) { - this.m_proxies[i] = new FixtureProxy(this, i); - } - this.createProxies(broadPhase, body.m_xf); - body.resetMassData(); - }; - /** @internal */ - Fixture.prototype._serialize = function () { - return { - friction: this.m_friction, - restitution: this.m_restitution, - density: this.m_density, - isSensor: this.m_isSensor, - filterGroupIndex: this.m_filterGroupIndex, - filterCategoryBits: this.m_filterCategoryBits, - filterMaskBits: this.m_filterMaskBits, - shape: this.m_shape, - }; - }; - /** @internal */ - Fixture._deserialize = function (data, body, restore) { - var shape = restore(Shape, data.shape); - var fixture = shape && new Fixture(body, shape, data); - return fixture; - }; - /** - * Get the type of the child shape. You can use this to down cast to the - * concrete shape. - */ - Fixture.prototype.getType = function () { - return this.m_shape.m_type; - }; - /** - * Get the child shape. You can modify the child shape, however you should not - * change the number of vertices because this will crash some collision caching - * mechanisms. Manipulating the shape may lead to non-physical behavior. - */ - Fixture.prototype.getShape = function () { - return this.m_shape; - }; - /** - * A sensor shape collects contact information but never generates a collision - * response. - */ - Fixture.prototype.isSensor = function () { - return this.m_isSensor; - }; - /** - * Set if this fixture is a sensor. - */ - Fixture.prototype.setSensor = function (sensor) { - if (sensor != this.m_isSensor) { - this.m_body.setAwake(true); - this.m_isSensor = sensor; - } - }; - // /** - // * Get the contact filtering data. - // */ - // getFilterData() { - // return this.m_filter; - // } - /** - * Get the user data that was assigned in the fixture definition. Use this to - * store your application specific data. - */ - Fixture.prototype.getUserData = function () { - return this.m_userData; - }; - /** - * Set the user data. Use this to store your application specific data. - */ - Fixture.prototype.setUserData = function (data) { - this.m_userData = data; - }; - /** - * Get the parent body of this fixture. This is null if the fixture is not - * attached. - */ - Fixture.prototype.getBody = function () { - return this.m_body; - }; - /** - * Get the next fixture in the parent body's fixture list. - */ - Fixture.prototype.getNext = function () { - return this.m_next; - }; - /** - * Get the density of this fixture. - */ - Fixture.prototype.getDensity = function () { - return this.m_density; - }; - /** - * Set the density of this fixture. This will _not_ automatically adjust the - * mass of the body. You must call Body.resetMassData to update the body's mass. - */ - Fixture.prototype.setDensity = function (density) { - this.m_density = density; - }; - /** - * Get the coefficient of friction, usually in the range [0,1]. - */ - Fixture.prototype.getFriction = function () { - return this.m_friction; - }; - /** - * Set the coefficient of friction. This will not change the friction of - * existing contacts. - */ - Fixture.prototype.setFriction = function (friction) { - this.m_friction = friction; - }; - /** - * Get the coefficient of restitution. - */ - Fixture.prototype.getRestitution = function () { - return this.m_restitution; - }; - /** - * Set the coefficient of restitution. This will not change the restitution of - * existing contacts. - */ - Fixture.prototype.setRestitution = function (restitution) { - this.m_restitution = restitution; - }; - /** - * Test a point in world coordinates for containment in this fixture. - */ - Fixture.prototype.testPoint = function (p) { - return this.m_shape.testPoint(this.m_body.getTransform(), p); - }; - /** - * Cast a ray against this shape. - */ - Fixture.prototype.rayCast = function (output, input, childIndex) { - return this.m_shape.rayCast(output, input, this.m_body.getTransform(), childIndex); - }; - /** - * Get the mass data for this fixture. The mass data is based on the density and - * the shape. The rotational inertia is about the shape's origin. This operation - * may be expensive. - */ - Fixture.prototype.getMassData = function (massData) { - this.m_shape.computeMass(massData, this.m_density); - }; - /** - * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a - * more accurate AABB, compute it using the shape and the body transform. - */ - Fixture.prototype.getAABB = function (childIndex) { - return this.m_proxies[childIndex].aabb; - }; - /** - * These support body activation/deactivation. - */ - Fixture.prototype.createProxies = function (broadPhase, xf) { - // Create proxies in the broad-phase. - this.m_proxyCount = this.m_shape.getChildCount(); - for (var i = 0; i < this.m_proxyCount; ++i) { - var proxy = this.m_proxies[i]; - this.m_shape.computeAABB(proxy.aabb, xf, i); - proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy); - } - }; - Fixture.prototype.destroyProxies = function (broadPhase) { - // Destroy proxies in the broad-phase. - for (var i = 0; i < this.m_proxyCount; ++i) { - var proxy = this.m_proxies[i]; - broadPhase.destroyProxy(proxy.proxyId); - proxy.proxyId = null; - } - this.m_proxyCount = 0; - }; - /** - * Updates this fixture proxy in broad-phase (with combined AABB of current and - * next transformation). - */ - Fixture.prototype.synchronize = function (broadPhase, xf1, xf2) { - for (var i = 0; i < this.m_proxyCount; ++i) { - var proxy = this.m_proxies[i]; - // Compute an AABB that covers the swept shape (may miss some rotation - // effect). - this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex); - this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex); - proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2); - subVec2(displacement, xf2.p, xf1.p); - broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement); - } - }; - /** - * Set the contact filtering data. This will not update contacts until the next - * time step when either parent body is active and awake. This automatically - * calls refilter. - */ - Fixture.prototype.setFilterData = function (filter) { - this.m_filterGroupIndex = filter.groupIndex; - this.m_filterCategoryBits = filter.categoryBits; - this.m_filterMaskBits = filter.maskBits; - this.refilter(); - }; - Fixture.prototype.getFilterGroupIndex = function () { - return this.m_filterGroupIndex; - }; - Fixture.prototype.setFilterGroupIndex = function (groupIndex) { - this.m_filterGroupIndex = groupIndex; - this.refilter(); - }; - Fixture.prototype.getFilterCategoryBits = function () { - return this.m_filterCategoryBits; - }; - Fixture.prototype.setFilterCategoryBits = function (categoryBits) { - this.m_filterCategoryBits = categoryBits; - this.refilter(); - }; - Fixture.prototype.getFilterMaskBits = function () { - return this.m_filterMaskBits; - }; - Fixture.prototype.setFilterMaskBits = function (maskBits) { - this.m_filterMaskBits = maskBits; - this.refilter(); - }; - /** - * Call this if you want to establish collision that was previously disabled by - * ContactFilter. - */ - Fixture.prototype.refilter = function () { - if (this.m_body == null) { - return; - } - // Flag associated contacts for filtering. - var edge = this.m_body.getContactList(); - while (edge) { - var contact = edge.contact; - var fixtureA = contact.getFixtureA(); - var fixtureB = contact.getFixtureB(); - if (fixtureA == this || fixtureB == this) { - contact.flagForFiltering(); - } - edge = edge.next; - } - var world = this.m_body.getWorld(); - if (world == null) { - return; - } - // Touch each proxy so that new pairs may be created - var broadPhase = world.m_broadPhase; - for (var i = 0; i < this.m_proxyCount; ++i) { - broadPhase.touchProxy(this.m_proxies[i].proxyId); - } - }; - /** - * Implement this method to provide collision filtering, if you want finer - * control over contact creation. - * - * Return true if contact calculations should be performed between these two - * fixtures. - * - * Warning: for performance reasons this is only called when the AABBs begin to - * overlap. - */ - Fixture.prototype.shouldCollide = function (that) { - if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) { - return that.m_filterGroupIndex > 0; - } - var collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0; - var collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0; - var collide = collideA && collideB; - return collide; - }; - return Fixture; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var STATIC = "static"; - /** @internal */ var KINEMATIC = "kinematic"; - /** @internal */ var DYNAMIC = "dynamic"; - /** @internal */ var oldCenter = vec2(0, 0); - /** @internal */ var localCenter = vec2(0, 0); - /** @internal */ var shift = vec2(0, 0); - /** @internal */ var temp$6 = vec2(0, 0); - /** @internal */ var xf$2 = transform(0, 0, 0); - /** @internal */ var BodyDefDefault = { - type: STATIC, - position: Vec2.zero(), - angle: 0.0, - linearVelocity: Vec2.zero(), - angularVelocity: 0.0, - linearDamping: 0.0, - angularDamping: 0.0, - fixedRotation: false, - bullet: false, - gravityScale: 1.0, - allowSleep: true, - awake: true, - active: true, - userData: null - }; - /** - * A rigid body composed of one or more fixtures. - * - * To create a new Body use {@link World.createBody}. - */ - var Body = /** @class */ (function () { - /** @internal */ - function Body(world, def) { - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - def = options(def, BodyDefDefault); - this.m_world = world; - this.m_awakeFlag = def.awake; - this.m_autoSleepFlag = def.allowSleep; - this.m_bulletFlag = def.bullet; - this.m_fixedRotationFlag = def.fixedRotation; - this.m_activeFlag = def.active; - this.m_islandFlag = false; - this.m_toiFlag = false; - this.m_userData = def.userData; - this.m_type = def.type; - if (this.m_type == DYNAMIC) { - this.m_mass = 1.0; - this.m_invMass = 1.0; - } - else { - this.m_mass = 0.0; - this.m_invMass = 0.0; - } - // Rotational inertia about the center of mass. - this.m_I = 0.0; - this.m_invI = 0.0; - // the body origin transform - this.m_xf = Transform.identity(); - this.m_xf.p.setVec2(def.position); - this.m_xf.q.setAngle(def.angle); - // the swept motion for CCD - this.m_sweep = new Sweep(); - this.m_sweep.setTransform(this.m_xf); - // position and velocity correction - this.c_velocity = new Velocity(); - this.c_position = new Position(); - this.m_force = Vec2.zero(); - this.m_torque = 0.0; - this.m_linearVelocity = Vec2.clone(def.linearVelocity); - this.m_angularVelocity = def.angularVelocity; - this.m_linearDamping = def.linearDamping; - this.m_angularDamping = def.angularDamping; - this.m_gravityScale = def.gravityScale; - this.m_sleepTime = 0.0; - this.m_jointList = null; - this.m_contactList = null; - this.m_fixtureList = null; - this.m_prev = null; - this.m_next = null; - this.m_destroyed = false; - } - /** @internal */ - Body.prototype._serialize = function () { - var fixtures = []; - for (var f = this.m_fixtureList; f; f = f.m_next) { - fixtures.push(f); - } - return { - type: this.m_type, - bullet: this.m_bulletFlag, - position: this.m_xf.p, - angle: this.m_xf.q.getAngle(), - linearVelocity: this.m_linearVelocity, - angularVelocity: this.m_angularVelocity, - fixtures: fixtures, - }; - }; - /** @internal */ - Body._deserialize = function (data, world, restore) { - var body = new Body(world, data); - if (data.fixtures) { - for (var i = data.fixtures.length - 1; i >= 0; i--) { - var fixture = restore(Fixture, data.fixtures[i], body); - body._addFixture(fixture); - } - } - return body; - }; - Body.prototype.isWorldLocked = function () { - return this.m_world && this.m_world.isLocked() ? true : false; - }; - Body.prototype.getWorld = function () { - return this.m_world; - }; - Body.prototype.getNext = function () { - return this.m_next; - }; - Body.prototype.setUserData = function (data) { - this.m_userData = data; - }; - Body.prototype.getUserData = function () { - return this.m_userData; - }; - Body.prototype.getFixtureList = function () { - return this.m_fixtureList; - }; - Body.prototype.getJointList = function () { - return this.m_jointList; - }; - /** - * Warning: this list changes during the time step and you may miss some - * collisions if you don't use ContactListener. - */ - Body.prototype.getContactList = function () { - return this.m_contactList; - }; - Body.prototype.isStatic = function () { - return this.m_type == STATIC; - }; - Body.prototype.isDynamic = function () { - return this.m_type == DYNAMIC; - }; - Body.prototype.isKinematic = function () { - return this.m_type == KINEMATIC; - }; - /** - * This will alter the mass and velocity. - */ - Body.prototype.setStatic = function () { - this.setType(STATIC); - return this; - }; - Body.prototype.setDynamic = function () { - this.setType(DYNAMIC); - return this; - }; - Body.prototype.setKinematic = function () { - this.setType(KINEMATIC); - return this; - }; - /** - * Get the type of the body. - */ - Body.prototype.getType = function () { - return this.m_type; - }; - /** - * Set the type of the body to "static", "kinematic" or "dynamic". - * @param type The type of the body. - */ - Body.prototype.setType = function (type) { - if (this.isWorldLocked() == true) { - return; - } - if (this.m_type == type) { - return; - } - this.m_type = type; - this.resetMassData(); - if (this.m_type == STATIC) { - this.m_linearVelocity.setZero(); - this.m_angularVelocity = 0.0; - this.m_sweep.forward(); - this.synchronizeFixtures(); - } - this.setAwake(true); - this.m_force.setZero(); - this.m_torque = 0.0; - // Delete the attached contacts. - var ce = this.m_contactList; - while (ce) { - var ce0 = ce; - ce = ce.next; - this.m_world.destroyContact(ce0.contact); - } - this.m_contactList = null; - // Touch the proxies so that new contacts will be created (when appropriate) - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - for (var i = 0; i < f.m_proxyCount; ++i) { - broadPhase.touchProxy(f.m_proxies[i].proxyId); - } - } - }; - Body.prototype.isBullet = function () { - return this.m_bulletFlag; - }; - /** - * Should this body be treated like a bullet for continuous collision detection? - */ - Body.prototype.setBullet = function (flag) { - this.m_bulletFlag = !!flag; - }; - Body.prototype.isSleepingAllowed = function () { - return this.m_autoSleepFlag; - }; - Body.prototype.setSleepingAllowed = function (flag) { - this.m_autoSleepFlag = !!flag; - if (this.m_autoSleepFlag == false) { - this.setAwake(true); - } - }; - Body.prototype.isAwake = function () { - return this.m_awakeFlag; - }; - /** - * Set the sleep state of the body. A sleeping body has very low CPU cost. - * - * @param flag Set to true to wake the body, false to put it to sleep. - */ - Body.prototype.setAwake = function (flag) { - if (flag) { - this.m_awakeFlag = true; - this.m_sleepTime = 0.0; - } - else { - this.m_awakeFlag = false; - this.m_sleepTime = 0.0; - this.m_linearVelocity.setZero(); - this.m_angularVelocity = 0.0; - this.m_force.setZero(); - this.m_torque = 0.0; - } - }; - Body.prototype.isActive = function () { - return this.m_activeFlag; - }; - /** - * Set the active state of the body. An inactive body is not simulated and - * cannot be collided with or woken up. If you pass a flag of true, all fixtures - * will be added to the broad-phase. If you pass a flag of false, all fixtures - * will be removed from the broad-phase and all contacts will be destroyed. - * Fixtures and joints are otherwise unaffected. - * - * You may continue to create/destroy fixtures and joints on inactive bodies. - * Fixtures on an inactive body are implicitly inactive and will not participate - * in collisions, ray-casts, or queries. Joints connected to an inactive body - * are implicitly inactive. An inactive body is still owned by a World object - * and remains - */ - Body.prototype.setActive = function (flag) { - if (flag == this.m_activeFlag) { - return; - } - this.m_activeFlag = !!flag; - if (this.m_activeFlag) { - // Create all proxies. - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.createProxies(broadPhase, this.m_xf); - } - // Contacts are created at the beginning of the next - this.m_world.m_newFixture = true; - } - else { - // Destroy all proxies. - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.destroyProxies(broadPhase); - } - // Destroy the attached contacts. - var ce = this.m_contactList; - while (ce) { - var ce0 = ce; - ce = ce.next; - this.m_world.destroyContact(ce0.contact); - } - this.m_contactList = null; - } - }; - Body.prototype.isFixedRotation = function () { - return this.m_fixedRotationFlag; - }; - /** - * Set this body to have fixed rotation. This causes the mass to be reset. - */ - Body.prototype.setFixedRotation = function (flag) { - if (this.m_fixedRotationFlag == flag) { - return; - } - this.m_fixedRotationFlag = !!flag; - this.m_angularVelocity = 0.0; - this.resetMassData(); - }; - /** - * Get the world transform for the body's origin. - */ - Body.prototype.getTransform = function () { - return this.m_xf; - }; - /** - * Set the position of the body's origin and rotation. Manipulating a body's - * transform may cause non-physical behavior. Note: contacts are updated on the - * next call to World.step. - * - * @param position The world position of the body's local origin. - * @param angle The world rotation in radians. - */ - Body.prototype.setTransform = function (position, angle) { - if (this.isWorldLocked() == true) { - return; - } - this.m_xf.setNum(position, angle); - this.m_sweep.setTransform(this.m_xf); - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.synchronize(broadPhase, this.m_xf, this.m_xf); - } - this.setAwake(true); - }; - Body.prototype.synchronizeTransform = function () { - this.m_sweep.getTransform(this.m_xf, 1); - }; - /** - * Update fixtures in broad-phase. - */ - Body.prototype.synchronizeFixtures = function () { - this.m_sweep.getTransform(xf$2, 0); - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.synchronize(broadPhase, xf$2, this.m_xf); - } - }; - /** - * Used in TOI. - */ - Body.prototype.advance = function (alpha) { - // Advance to the new safe time. This doesn't sync the broad-phase. - this.m_sweep.advance(alpha); - copyVec2(this.m_sweep.c, this.m_sweep.c0); - this.m_sweep.a = this.m_sweep.a0; - this.m_sweep.getTransform(this.m_xf, 1); - }; - /** - * Get the world position for the body's origin. - */ - Body.prototype.getPosition = function () { - return this.m_xf.p; - }; - Body.prototype.setPosition = function (p) { - this.setTransform(p, this.m_sweep.a); - }; - /** - * Get the current world rotation angle in radians. - */ - Body.prototype.getAngle = function () { - return this.m_sweep.a; - }; - Body.prototype.setAngle = function (angle) { - this.setTransform(this.m_xf.p, angle); - }; - /** - * Get the world position of the center of mass. - */ - Body.prototype.getWorldCenter = function () { - return this.m_sweep.c; - }; - /** - * Get the local position of the center of mass. - */ - Body.prototype.getLocalCenter = function () { - return this.m_sweep.localCenter; - }; - /** - * Get the linear velocity of the center of mass. - * - * @return the linear velocity of the center of mass. - */ - Body.prototype.getLinearVelocity = function () { - return this.m_linearVelocity; - }; - /** - * Get the world linear velocity of a world point attached to this body. - * - * @param worldPoint A point in world coordinates. - */ - Body.prototype.getLinearVelocityFromWorldPoint = function (worldPoint) { - var localCenter = Vec2.sub(worldPoint, this.m_sweep.c); - return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity, localCenter)); - }; - /** - * Get the world velocity of a local point. - * - * @param localPoint A point in local coordinates. - */ - Body.prototype.getLinearVelocityFromLocalPoint = function (localPoint) { - return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint)); - }; - /** - * Set the linear velocity of the center of mass. - * - * @param v The new linear velocity of the center of mass. - */ - Body.prototype.setLinearVelocity = function (v) { - if (this.m_type == STATIC) { - return; - } - if (Vec2.dot(v, v) > 0.0) { - this.setAwake(true); - } - this.m_linearVelocity.setVec2(v); - }; - /** - * Get the angular velocity. - * - * @returns the angular velocity in radians/second. - */ - Body.prototype.getAngularVelocity = function () { - return this.m_angularVelocity; - }; - /** - * Set the angular velocity. - * - * @param omega The new angular velocity in radians/second. - */ - Body.prototype.setAngularVelocity = function (w) { - if (this.m_type == STATIC) { - return; - } - if (w * w > 0.0) { - this.setAwake(true); - } - this.m_angularVelocity = w; - }; - Body.prototype.getLinearDamping = function () { - return this.m_linearDamping; - }; - Body.prototype.setLinearDamping = function (linearDamping) { - this.m_linearDamping = linearDamping; - }; - Body.prototype.getAngularDamping = function () { - return this.m_angularDamping; - }; - Body.prototype.setAngularDamping = function (angularDamping) { - this.m_angularDamping = angularDamping; - }; - Body.prototype.getGravityScale = function () { - return this.m_gravityScale; - }; - /** - * Scale the gravity applied to this body. - */ - Body.prototype.setGravityScale = function (scale) { - this.m_gravityScale = scale; - }; - /** - * Get the total mass of the body. - * - * @returns The mass, usually in kilograms (kg). - */ - Body.prototype.getMass = function () { - return this.m_mass; - }; - /** - * Get the rotational inertia of the body about the local origin. - * - * @return the rotational inertia, usually in kg-m^2. - */ - Body.prototype.getInertia = function () { - return this.m_I + this.m_mass - * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter); - }; - /** - * Copy the mass data of the body to data. - */ - Body.prototype.getMassData = function (data) { - data.mass = this.m_mass; - data.I = this.getInertia(); - copyVec2(data.center, this.m_sweep.localCenter); - }; - /** - * This resets the mass properties to the sum of the mass properties of the - * fixtures. This normally does not need to be called unless you called - * SetMassData to override the mass and you later want to reset the mass. - */ - Body.prototype.resetMassData = function () { - // Compute mass data from shapes. Each shape has its own density. - this.m_mass = 0.0; - this.m_invMass = 0.0; - this.m_I = 0.0; - this.m_invI = 0.0; - zeroVec2(this.m_sweep.localCenter); - // Static and kinematic bodies have zero mass. - if (this.isStatic() || this.isKinematic()) { - copyVec2(this.m_sweep.c0, this.m_xf.p); - copyVec2(this.m_sweep.c, this.m_xf.p); - this.m_sweep.a0 = this.m_sweep.a; - return; - } - // Accumulate mass over all fixtures. - zeroVec2(localCenter); - for (var f = this.m_fixtureList; f; f = f.m_next) { - if (f.m_density == 0.0) { - continue; - } - var massData = { - mass: 0, - center: vec2(0, 0), - I: 0 - }; - f.getMassData(massData); - this.m_mass += massData.mass; - plusScaleVec2(localCenter, massData.mass, massData.center); - this.m_I += massData.I; - } - // Compute center of mass. - if (this.m_mass > 0.0) { - this.m_invMass = 1.0 / this.m_mass; - scaleVec2(localCenter, this.m_invMass, localCenter); - } - else { - // Force all dynamic bodies to have a positive mass. - this.m_mass = 1.0; - this.m_invMass = 1.0; - } - if (this.m_I > 0.0 && this.m_fixedRotationFlag == false) { - // Center the inertia about the center of mass. - this.m_I -= this.m_mass * dotVec2(localCenter, localCenter); - this.m_invI = 1.0 / this.m_I; - } - else { - this.m_I = 0.0; - this.m_invI = 0.0; - } - // Move center of mass. - copyVec2(oldCenter, this.m_sweep.c); - this.m_sweep.setLocalCenter(localCenter, this.m_xf); - // Update center of mass velocity. - subVec2(shift, this.m_sweep.c, oldCenter); - crossNumVec2(temp$6, this.m_angularVelocity, shift); - plusVec2(this.m_linearVelocity, temp$6); - }; - /** - * Set the mass properties to override the mass properties of the fixtures. Note - * that this changes the center of mass position. Note that creating or - * destroying fixtures can also alter the mass. This function has no effect if - * the body isn't dynamic. - * - * @param massData The mass properties. - */ - Body.prototype.setMassData = function (massData) { - if (this.isWorldLocked() == true) { - return; - } - if (this.m_type != DYNAMIC) { - return; - } - this.m_invMass = 0.0; - this.m_I = 0.0; - this.m_invI = 0.0; - this.m_mass = massData.mass; - if (this.m_mass <= 0.0) { - this.m_mass = 1.0; - } - this.m_invMass = 1.0 / this.m_mass; - if (massData.I > 0.0 && this.m_fixedRotationFlag == false) { - this.m_I = massData.I - this.m_mass * dotVec2(massData.center, massData.center); - this.m_invI = 1.0 / this.m_I; - } - // Move center of mass. - copyVec2(oldCenter, this.m_sweep.c); - this.m_sweep.setLocalCenter(massData.center, this.m_xf); - // Update center of mass velocity. - subVec2(shift, this.m_sweep.c, oldCenter); - crossNumVec2(temp$6, this.m_angularVelocity, shift); - plusVec2(this.m_linearVelocity, temp$6); - }; - /** - * Apply a force at a world point. If the force is not applied at the center of - * mass, it will generate a torque and affect the angular velocity. This wakes - * up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - Body.prototype.applyForce = function (force, point, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate a force if the body is sleeping. - if (this.m_awakeFlag) { - this.m_force.add(force); - this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), force); - } - }; - /** - * Apply a force to the center of mass. This wakes up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param wake Also wake up the body - */ - Body.prototype.applyForceToCenter = function (force, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate a force if the body is sleeping - if (this.m_awakeFlag) { - this.m_force.add(force); - } - }; - /** - * Apply a torque. This affects the angular velocity without affecting the - * linear velocity of the center of mass. This wakes up the body. - * - * @param torque About the z-axis (out of the screen), usually in N-m. - * @param wake Also wake up the body - */ - Body.prototype.applyTorque = function (torque, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate a force if the body is sleeping - if (this.m_awakeFlag) { - this.m_torque += torque; - } - }; - /** - * Apply an impulse at a point. This immediately modifies the velocity. It also - * modifies the angular velocity if the point of application is not at the - * center of mass. This wakes up the body. - * - * @param impulse The world impulse vector, usually in N-seconds or kg-m/s. - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - Body.prototype.applyLinearImpulse = function (impulse, point, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate velocity if the body is sleeping - if (this.m_awakeFlag) { - this.m_linearVelocity.addMul(this.m_invMass, impulse); - this.m_angularVelocity += this.m_invI * Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), impulse); - } - }; - /** - * Apply an angular impulse. - * - * @param impulse The angular impulse in units of kg*m*m/s - * @param wake Also wake up the body - */ - Body.prototype.applyAngularImpulse = function (impulse, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate velocity if the body is sleeping - if (this.m_awakeFlag) { - this.m_angularVelocity += this.m_invI * impulse; - } - }; - /** - * This is used to test if two bodies should collide. - * - * Bodies do not collide when: - * - Neither of them is dynamic - * - They are connected by a joint with collideConnected == false - */ - Body.prototype.shouldCollide = function (that) { - // At least one body should be dynamic. - if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) { - return false; - } - // Does a joint prevent collision? - for (var jn = this.m_jointList; jn; jn = jn.next) { - if (jn.other == that) { - if (jn.joint.m_collideConnected == false) { - return false; - } - } - } - return true; - }; - /** @internal Used for deserialize. */ - Body.prototype._addFixture = function (fixture) { - if (this.isWorldLocked() == true) { - return null; - } - if (this.m_activeFlag) { - var broadPhase = this.m_world.m_broadPhase; - fixture.createProxies(broadPhase, this.m_xf); - } - fixture.m_next = this.m_fixtureList; - this.m_fixtureList = fixture; - // Adjust mass properties if needed. - if (fixture.m_density > 0.0) { - this.resetMassData(); - } - // Let the world know we have a new fixture. This will cause new contacts - // to be created at the beginning of the next time step. - this.m_world.m_newFixture = true; - return fixture; - }; - // tslint:disable-next-line:typedef - Body.prototype.createFixture = function (shape, fixdef) { - if (this.isWorldLocked() == true) { - return null; - } - var fixture = new Fixture(this, shape, fixdef); - this._addFixture(fixture); - return fixture; - }; - /** - * Destroy a fixture. This removes the fixture from the broad-phase and destroys - * all contacts associated with this fixture. This will automatically adjust the - * mass of the body if the body is dynamic and the fixture has positive density. - * All fixtures attached to a body are implicitly destroyed when the body is - * destroyed. - * - * Warning: This function is locked during callbacks. - * - * @param fixture The fixture to be removed. - */ - Body.prototype.destroyFixture = function (fixture) { - if (this.isWorldLocked() == true) { - return; - } - if (this.m_fixtureList === fixture) { - this.m_fixtureList = fixture.m_next; - } - else { - var node = this.m_fixtureList; - while (node != null) { - if (node.m_next === fixture) { - node.m_next = fixture.m_next; - break; - } - node = node.m_next; - } - } - // Destroy any contacts associated with the fixture. - var edge = this.m_contactList; - while (edge) { - var c = edge.contact; - edge = edge.next; - var fixtureA = c.getFixtureA(); - var fixtureB = c.getFixtureB(); - if (fixture == fixtureA || fixture == fixtureB) { - // This destroys the contact and removes it from - // this body's contact list. - this.m_world.destroyContact(c); - } - } - if (this.m_activeFlag) { - var broadPhase = this.m_world.m_broadPhase; - fixture.destroyProxies(broadPhase); - } - fixture.m_body = null; - fixture.m_next = null; - this.m_world.publish("remove-fixture", fixture); - // Reset the mass data. - this.resetMassData(); - }; - /** - * Get the corresponding world point of a local point. - */ - Body.prototype.getWorldPoint = function (localPoint) { - return Transform.mulVec2(this.m_xf, localPoint); - }; - /** - * Get the corresponding world vector of a local vector. - */ - Body.prototype.getWorldVector = function (localVector) { - return Rot.mulVec2(this.m_xf.q, localVector); - }; - /** - * Gets the corresponding local point of a world point. - */ - Body.prototype.getLocalPoint = function (worldPoint) { - return Transform.mulTVec2(this.m_xf, worldPoint); - }; - /** - * Gets the corresponding local vector of a world vector. - */ - Body.prototype.getLocalVector = function (worldVector) { - return Rot.mulTVec2(this.m_xf.q, worldVector); - }; - /** - * A static body does not move under simulation and behaves as if it has infinite mass. - * Internally, zero is stored for the mass and the inverse mass. - * Static bodies can be moved manually by the user. - * A static body has zero velocity. - * Static bodies do not collide with other static or kinematic bodies. - */ - Body.STATIC = "static"; - /** - * A kinematic body moves under simulation according to its velocity. - * Kinematic bodies do not respond to forces. - * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity. - * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass. - * Kinematic bodies do not collide with other kinematic or static bodies. - */ - Body.KINEMATIC = "kinematic"; - /** - * A dynamic body is fully simulated. - * They can be moved manually by the user, but normally they move according to forces. - * A dynamic body can collide with all body types. - * A dynamic body always has finite, non-zero mass. - * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate. - */ - Body.DYNAMIC = "dynamic"; - return Body; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** - * A joint edge is used to connect bodies and joints together in a joint graph - * where each body is a node and each joint is an edge. A joint edge belongs to - * a doubly linked list maintained in each attached body. Each joint has two - * joint nodes, one for each attached body. - */ - var JointEdge = /** @class */ (function () { - function JointEdge() { - /** - * provides quick access to the other body attached. - */ - this.other = null; - /** - * the joint - */ - this.joint = null; - /** - * prev the previous joint edge in the body's joint list - */ - this.prev = null; - /** - * the next joint edge in the body's joint list - */ - this.next = null; - } - return JointEdge; - }()); - /** - * The base joint class. Joints are used to constraint two bodies together in - * various fashions. Some joints also feature limits and motors. - */ - var Joint = /** @class */ (function () { - function Joint(def, bodyA, bodyB) { - /** @internal */ this.m_type = "unknown-joint"; - /** @internal */ this.m_prev = null; - /** @internal */ this.m_next = null; - /** @internal */ this.m_edgeA = new JointEdge(); - /** @internal */ this.m_edgeB = new JointEdge(); - /** @internal */ this.m_islandFlag = false; - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - bodyA = "bodyA" in def ? def.bodyA : bodyA; - bodyB = "bodyB" in def ? def.bodyB : bodyB; - this.m_bodyA = bodyA; - this.m_bodyB = bodyB; - this.m_collideConnected = !!def.collideConnected; - this.m_userData = def.userData; - } - /** - * Short-cut function to determine if either body is inactive. - */ - Joint.prototype.isActive = function () { - return this.m_bodyA.isActive() && this.m_bodyB.isActive(); - }; - /** - * Get the type of the concrete joint. - */ - Joint.prototype.getType = function () { - return this.m_type; - }; - /** - * Get the first body attached to this joint. - */ - Joint.prototype.getBodyA = function () { - return this.m_bodyA; - }; - /** - * Get the second body attached to this joint. - */ - Joint.prototype.getBodyB = function () { - return this.m_bodyB; - }; - /** - * Get the next joint the world joint list. - */ - Joint.prototype.getNext = function () { - return this.m_next; - }; - Joint.prototype.getUserData = function () { - return this.m_userData; - }; - Joint.prototype.setUserData = function (data) { - this.m_userData = data; - }; - /** - * Get collide connected. Note: modifying the collide connect flag won't work - * correctly because the flag is only checked when fixture AABBs begin to - * overlap. - */ - Joint.prototype.getCollideConnected = function () { - return this.m_collideConnected; - }; - /** - * Shift the origin for any points stored in world coordinates. - */ - Joint.prototype.shiftOrigin = function (newOrigin) { }; - /** - * @internal @deprecated - * Temporary for backward compatibility, will be removed. - */ - Joint.prototype._resetAnchors = function (def) { - return this._reset(def); - }; - return Joint; - }()); - - /** @hidden */ - var stats = { - gjkCalls: 0, - gjkIters: 0, - gjkMaxIters: 0, - toiTime: 0, - toiMaxTime: 0, - toiCalls: 0, - toiIters: 0, - toiMaxIters: 0, - toiRootIters: 0, - toiMaxRootIters: 0, - toString: function (newline) { - newline = typeof newline === "string" ? newline : "\n"; - var string = ""; - // tslint:disable-next-line:no-for-in - for (var name_1 in this) { - if (typeof this[name_1] !== "function" && typeof this[name_1] !== "object") { - string += name_1 + ": " + this[name_1] + newline; - } - } - return string; - } - }; - - /** @internal */ - var now = function () { - return Date.now(); - }; - /** @internal */ - var diff = function (time) { - return Date.now() - time; - }; - /** @internal */ - var Timer = { - now: now, - diff: diff, - }; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_max$4 = Math.max; - /** @internal */ var temp$5 = vec2(0, 0); - /** @internal */ var normal$4 = vec2(0, 0); - /** @internal */ var e12 = vec2(0, 0); - /** @internal */ var e13 = vec2(0, 0); - /** @internal */ var e23 = vec2(0, 0); - /** @internal */ var temp1 = vec2(0, 0); - /** @internal */ var temp2 = vec2(0, 0); - /** - * GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates. - */ - stats.gjkCalls = 0; - stats.gjkIters = 0; - stats.gjkMaxIters = 0; - /** - * Input for Distance. You have to option to use the shape radii in the - * computation. Even - */ - var DistanceInput = /** @class */ (function () { - function DistanceInput() { - this.proxyA = new DistanceProxy(); - this.proxyB = new DistanceProxy(); - this.transformA = Transform.identity(); - this.transformB = Transform.identity(); - this.useRadii = false; - } - DistanceInput.prototype.recycle = function () { - this.proxyA.recycle(); - this.proxyB.recycle(); - this.transformA.setIdentity(); - this.transformB.setIdentity(); - this.useRadii = false; - }; - return DistanceInput; - }()); - /** - * Output for Distance. - */ - var DistanceOutput = /** @class */ (function () { - function DistanceOutput() { - /** closest point on shapeA */ - this.pointA = vec2(0, 0); - /** closest point on shapeB */ - this.pointB = vec2(0, 0); - this.distance = 0; - /** iterations number of GJK iterations used */ - this.iterations = 0; - } - DistanceOutput.prototype.recycle = function () { - zeroVec2(this.pointA); - zeroVec2(this.pointB); - this.distance = 0; - this.iterations = 0; - }; - return DistanceOutput; - }()); - /** - * Used to warm start Distance. Set count to zero on first call. - */ - var SimplexCache = /** @class */ (function () { - function SimplexCache() { - /** length or area */ - this.metric = 0; - /** vertices on shape A */ - this.indexA = []; - /** vertices on shape B */ - this.indexB = []; - this.count = 0; - } - SimplexCache.prototype.recycle = function () { - this.metric = 0; - this.indexA.length = 0; - this.indexB.length = 0; - this.count = 0; - }; - return SimplexCache; - }()); - /** - * Compute the closest points between two shapes. Supports any combination of: - * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On - * the first call set SimplexCache.count to zero. - */ - var Distance = function (output, cache, input) { - ++stats.gjkCalls; - var proxyA = input.proxyA; - var proxyB = input.proxyB; - var xfA = input.transformA; - var xfB = input.transformB; - // Initialize the simplex. - // const simplex = new Simplex(); - simplex.recycle(); - simplex.readCache(cache, proxyA, xfA, proxyB, xfB); - // Get simplex vertices as an array. - var vertices = simplex.m_v; - var k_maxIters = SettingsInternal.maxDistanceIterations; - // These store the vertices of the last simplex so that we - // can check for duplicates and prevent cycling. - var saveA = []; - var saveB = []; // int[3] - var saveCount = 0; - // Main iteration loop. - var iter = 0; - while (iter < k_maxIters) { - // Copy simplex so we can identify duplicates. - saveCount = simplex.m_count; - for (var i = 0; i < saveCount; ++i) { - saveA[i] = vertices[i].indexA; - saveB[i] = vertices[i].indexB; - } - simplex.solve(); - // If we have 3 points, then the origin is in the corresponding triangle. - if (simplex.m_count === 3) { - break; - } - // Get search direction. - var d = simplex.getSearchDirection(); - // Ensure the search direction is numerically fit. - if (lengthSqrVec2(d) < EPSILON * EPSILON) { - // The origin is probably contained by a line segment - // or triangle. Thus the shapes are overlapped. - // We can't return zero here even though there may be overlap. - // In case the simplex is a point, segment, or triangle it is difficult - // to determine if the origin is contained in the CSO or very close to it. - break; - } - // Compute a tentative new simplex vertex using support points. - var vertex = vertices[simplex.m_count]; // SimplexVertex - vertex.indexA = proxyA.getSupport(derotVec2(temp$5, xfA.q, scaleVec2(temp$5, -1, d))); - transformVec2(vertex.wA, xfA, proxyA.getVertex(vertex.indexA)); - vertex.indexB = proxyB.getSupport(derotVec2(temp$5, xfB.q, d)); - transformVec2(vertex.wB, xfB, proxyB.getVertex(vertex.indexB)); - subVec2(vertex.w, vertex.wB, vertex.wA); - // Iteration count is equated to the number of support point calls. - ++iter; - ++stats.gjkIters; - // Check for duplicate support points. This is the main termination - // criteria. - var duplicate = false; - for (var i = 0; i < saveCount; ++i) { - if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) { - duplicate = true; - break; - } - } - // If we found a duplicate support point we must exit to avoid cycling. - if (duplicate) { - break; - } - // New vertex is ok and needed. - ++simplex.m_count; - } - stats.gjkMaxIters = math_max$4(stats.gjkMaxIters, iter); - // Prepare output. - simplex.getWitnessPoints(output.pointA, output.pointB); - output.distance = distVec2(output.pointA, output.pointB); - output.iterations = iter; - // Cache the simplex. - simplex.writeCache(cache); - // Apply radii if requested. - if (input.useRadii) { - var rA = proxyA.m_radius; - var rB = proxyB.m_radius; - if (output.distance > rA + rB && output.distance > EPSILON) { - // Shapes are still no overlapped. - // Move the witness points to the outer surface. - output.distance -= rA + rB; - subVec2(normal$4, output.pointB, output.pointA); - normalizeVec2(normal$4); - plusScaleVec2(output.pointA, rA, normal$4); - minusScaleVec2(output.pointB, rB, normal$4); - } - else { - // Shapes are overlapped when radii are considered. - // Move the witness points to the middle. - var p = subVec2(temp$5, output.pointA, output.pointB); - copyVec2(output.pointA, p); - copyVec2(output.pointB, p); - output.distance = 0.0; - } - } - }; - /** - * A distance proxy is used by the GJK algorithm. It encapsulates any shape. - */ - var DistanceProxy = /** @class */ (function () { - function DistanceProxy() { - /** @internal */ this.m_vertices = []; - // todo: remove this? - /** @internal */ this.m_count = 0; - /** @internal */ this.m_radius = 0; - } - DistanceProxy.prototype.recycle = function () { - this.m_vertices.length = 0; - this.m_count = 0; - this.m_radius = 0; - }; - /** - * Get the vertex count. - */ - DistanceProxy.prototype.getVertexCount = function () { - return this.m_count; - }; - /** - * Get a vertex by index. Used by Distance. - */ - DistanceProxy.prototype.getVertex = function (index) { - return this.m_vertices[index]; - }; - /** - * Get the supporting vertex index in the given direction. - */ - DistanceProxy.prototype.getSupport = function (d) { - var bestIndex = -1; - var bestValue = -Infinity; - for (var i = 0; i < this.m_count; ++i) { - var value = dotVec2(this.m_vertices[i], d); - if (value > bestValue) { - bestIndex = i; - bestValue = value; - } - } - return bestIndex; - }; - /** - * Get the supporting vertex in the given direction. - */ - DistanceProxy.prototype.getSupportVertex = function (d) { - return this.m_vertices[this.getSupport(d)]; - }; - /** - * Initialize the proxy using the given shape. The shape must remain in scope - * while the proxy is in use. - */ - DistanceProxy.prototype.set = function (shape, index) { - shape.computeDistanceProxy(this, index); - }; - /** - * Initialize the proxy using a vertex cloud and radius. The vertices - * must remain in scope while the proxy is in use. - */ - DistanceProxy.prototype.setVertices = function (vertices, count, radius) { - this.m_vertices = vertices; - this.m_count = count; - this.m_radius = radius; - }; - return DistanceProxy; - }()); - var SimplexVertex = /** @class */ (function () { - function SimplexVertex() { - /** support point in proxyA */ - this.wA = vec2(0, 0); - /** wA index */ - this.indexA = 0; - /** support point in proxyB */ - this.wB = vec2(0, 0); - /** wB index */ - this.indexB = 0; - /** wB - wA; */ - this.w = vec2(0, 0); - /** barycentric coordinate for closest point */ - this.a = 0; - } - SimplexVertex.prototype.recycle = function () { - this.indexA = 0; - this.indexB = 0; - zeroVec2(this.wA); - zeroVec2(this.wB); - zeroVec2(this.w); - this.a = 0; - }; - SimplexVertex.prototype.set = function (v) { - this.indexA = v.indexA; - this.indexB = v.indexB; - copyVec2(this.wA, v.wA); - copyVec2(this.wB, v.wB); - copyVec2(this.w, v.w); - this.a = v.a; - }; - return SimplexVertex; - }()); - /** @internal */ var searchDirection_reuse = vec2(0, 0); - /** @internal */ var closestPoint_reuse = vec2(0, 0); - var Simplex = /** @class */ (function () { - function Simplex() { - this.m_v1 = new SimplexVertex(); - this.m_v2 = new SimplexVertex(); - this.m_v3 = new SimplexVertex(); - this.m_v = [this.m_v1, this.m_v2, this.m_v3]; - } - Simplex.prototype.recycle = function () { - this.m_v1.recycle(); - this.m_v2.recycle(); - this.m_v3.recycle(); - this.m_count = 0; - }; - /** @internal */ Simplex.prototype.toString = function () { - if (this.m_count === 3) { - return ["+" + this.m_count, - this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y, - this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y, - this.m_v3.a, this.m_v3.wA.x, this.m_v3.wA.y, this.m_v3.wB.x, this.m_v3.wB.y - ].toString(); - } - else if (this.m_count === 2) { - return ["+" + this.m_count, - this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y, - this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y - ].toString(); - } - else if (this.m_count === 1) { - return ["+" + this.m_count, - this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y - ].toString(); - } - else { - return "+" + this.m_count; - } - }; - Simplex.prototype.readCache = function (cache, proxyA, transformA, proxyB, transformB) { - // Copy data from cache. - this.m_count = cache.count; - for (var i = 0; i < this.m_count; ++i) { - var v = this.m_v[i]; - v.indexA = cache.indexA[i]; - v.indexB = cache.indexB[i]; - var wALocal = proxyA.getVertex(v.indexA); - var wBLocal = proxyB.getVertex(v.indexB); - transformVec2(v.wA, transformA, wALocal); - transformVec2(v.wB, transformB, wBLocal); - subVec2(v.w, v.wB, v.wA); - v.a = 0.0; - } - // Compute the new simplex metric, if it is substantially different than - // old metric then flush the simplex. - if (this.m_count > 1) { - var metric1 = cache.metric; - var metric2 = this.getMetric(); - if (metric2 < 0.5 * metric1 || 2.0 * metric1 < metric2 || metric2 < EPSILON) { - // Reset the simplex. - this.m_count = 0; - } - } - // If the cache is empty or invalid... - if (this.m_count === 0) { - var v = this.m_v[0]; - v.indexA = 0; - v.indexB = 0; - var wALocal = proxyA.getVertex(0); - var wBLocal = proxyB.getVertex(0); - transformVec2(v.wA, transformA, wALocal); - transformVec2(v.wB, transformB, wBLocal); - subVec2(v.w, v.wB, v.wA); - v.a = 1.0; - this.m_count = 1; - } - }; - Simplex.prototype.writeCache = function (cache) { - cache.metric = this.getMetric(); - cache.count = this.m_count; - for (var i = 0; i < this.m_count; ++i) { - cache.indexA[i] = this.m_v[i].indexA; - cache.indexB[i] = this.m_v[i].indexB; - } - }; - Simplex.prototype.getSearchDirection = function () { - var v1 = this.m_v1; - var v2 = this.m_v2; - this.m_v3; - switch (this.m_count) { - case 1: - return setVec2(searchDirection_reuse, -v1.w.x, -v1.w.y); - case 2: { - subVec2(e12, v2.w, v1.w); - var sgn = -crossVec2Vec2(e12, v1.w); - if (sgn > 0.0) { - // Origin is left of e12. - return setVec2(searchDirection_reuse, -e12.y, e12.x); - } - else { - // Origin is right of e12. - return setVec2(searchDirection_reuse, e12.y, -e12.x); - } - } - default: - return zeroVec2(searchDirection_reuse); - } - }; - Simplex.prototype.getClosestPoint = function () { - var v1 = this.m_v1; - var v2 = this.m_v2; - this.m_v3; - switch (this.m_count) { - case 0: - return zeroVec2(closestPoint_reuse); - case 1: - return copyVec2(closestPoint_reuse, v1.w); - case 2: - return combine2Vec2(closestPoint_reuse, v1.a, v1.w, v2.a, v2.w); - case 3: - return zeroVec2(closestPoint_reuse); - default: - return zeroVec2(closestPoint_reuse); - } - }; - Simplex.prototype.getWitnessPoints = function (pA, pB) { - var v1 = this.m_v1; - var v2 = this.m_v2; - var v3 = this.m_v3; - switch (this.m_count) { - case 0: - break; - case 1: - copyVec2(pA, v1.wA); - copyVec2(pB, v1.wB); - break; - case 2: - combine2Vec2(pA, v1.a, v1.wA, v2.a, v2.wA); - combine2Vec2(pB, v1.a, v1.wB, v2.a, v2.wB); - break; - case 3: - combine3Vec2(pA, v1.a, v1.wA, v2.a, v2.wA, v3.a, v3.wA); - copyVec2(pB, pA); - break; - } - }; - Simplex.prototype.getMetric = function () { - switch (this.m_count) { - case 0: - return 0.0; - case 1: - return 0.0; - case 2: - return distVec2(this.m_v1.w, this.m_v2.w); - case 3: - return crossVec2Vec2(subVec2(temp1, this.m_v2.w, this.m_v1.w), subVec2(temp2, this.m_v3.w, this.m_v1.w)); - default: - return 0.0; - } - }; - Simplex.prototype.solve = function () { - switch (this.m_count) { - case 1: - break; - case 2: - this.solve2(); - break; - case 3: - this.solve3(); - break; - } - }; - // Solve a line segment using barycentric coordinates. - // - // p = a1 * w1 + a2 * w2 - // a1 + a2 = 1 - // - // The vector from the origin to the closest point on the line is - // perpendicular to the line. - // e12 = w2 - w1 - // dot(p, e) = 0 - // a1 * dot(w1, e) + a2 * dot(w2, e) = 0 - // - // 2-by-2 linear system - // [1 1 ][a1] = [1] - // [w1.e12 w2.e12][a2] = [0] - // - // Define - // d12_1 = dot(w2, e12) - // d12_2 = -dot(w1, e12) - // d12 = d12_1 + d12_2 - // - // Solution - // a1 = d12_1 / d12 - // a2 = d12_2 / d12 - Simplex.prototype.solve2 = function () { - var w1 = this.m_v1.w; - var w2 = this.m_v2.w; - subVec2(e12, w2, w1); - // w1 region - var d12_2 = -dotVec2(w1, e12); - if (d12_2 <= 0.0) { - // a2 <= 0, so we clamp it to 0 - this.m_v1.a = 1.0; - this.m_count = 1; - return; - } - // w2 region - var d12_1 = dotVec2(w2, e12); - if (d12_1 <= 0.0) { - // a1 <= 0, so we clamp it to 0 - this.m_v2.a = 1.0; - this.m_count = 1; - this.m_v1.set(this.m_v2); - return; - } - // Must be in e12 region. - var inv_d12 = 1.0 / (d12_1 + d12_2); - this.m_v1.a = d12_1 * inv_d12; - this.m_v2.a = d12_2 * inv_d12; - this.m_count = 2; - }; - // Possible regions: - // - points[2] - // - edge points[0]-points[2] - // - edge points[1]-points[2] - // - inside the triangle - Simplex.prototype.solve3 = function () { - var w1 = this.m_v1.w; - var w2 = this.m_v2.w; - var w3 = this.m_v3.w; - // Edge12 - // [1 1 ][a1] = [1] - // [w1.e12 w2.e12][a2] = [0] - // a3 = 0 - subVec2(e12, w2, w1); - var w1e12 = dotVec2(w1, e12); - var w2e12 = dotVec2(w2, e12); - var d12_1 = w2e12; - var d12_2 = -w1e12; - // Edge13 - // [1 1 ][a1] = [1] - // [w1.e13 w3.e13][a3] = [0] - // a2 = 0 - subVec2(e13, w3, w1); - var w1e13 = dotVec2(w1, e13); - var w3e13 = dotVec2(w3, e13); - var d13_1 = w3e13; - var d13_2 = -w1e13; - // Edge23 - // [1 1 ][a2] = [1] - // [w2.e23 w3.e23][a3] = [0] - // a1 = 0 - subVec2(e23, w3, w2); - var w2e23 = dotVec2(w2, e23); - var w3e23 = dotVec2(w3, e23); - var d23_1 = w3e23; - var d23_2 = -w2e23; - // Triangle123 - var n123 = crossVec2Vec2(e12, e13); - var d123_1 = n123 * crossVec2Vec2(w2, w3); - var d123_2 = n123 * crossVec2Vec2(w3, w1); - var d123_3 = n123 * crossVec2Vec2(w1, w2); - // w1 region - if (d12_2 <= 0.0 && d13_2 <= 0.0) { - this.m_v1.a = 1.0; - this.m_count = 1; - return; - } - // e12 - if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) { - var inv_d12 = 1.0 / (d12_1 + d12_2); - this.m_v1.a = d12_1 * inv_d12; - this.m_v2.a = d12_2 * inv_d12; - this.m_count = 2; - return; - } - // e13 - if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) { - var inv_d13 = 1.0 / (d13_1 + d13_2); - this.m_v1.a = d13_1 * inv_d13; - this.m_v3.a = d13_2 * inv_d13; - this.m_count = 2; - this.m_v2.set(this.m_v3); - return; - } - // w2 region - if (d12_1 <= 0.0 && d23_2 <= 0.0) { - this.m_v2.a = 1.0; - this.m_count = 1; - this.m_v1.set(this.m_v2); - return; - } - // w3 region - if (d13_1 <= 0.0 && d23_1 <= 0.0) { - this.m_v3.a = 1.0; - this.m_count = 1; - this.m_v1.set(this.m_v3); - return; - } - // e23 - if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) { - var inv_d23 = 1.0 / (d23_1 + d23_2); - this.m_v2.a = d23_1 * inv_d23; - this.m_v3.a = d23_2 * inv_d23; - this.m_count = 2; - this.m_v1.set(this.m_v3); - return; - } - // Must be in triangle123 - var inv_d123 = 1.0 / (d123_1 + d123_2 + d123_3); - this.m_v1.a = d123_1 * inv_d123; - this.m_v2.a = d123_2 * inv_d123; - this.m_v3.a = d123_3 * inv_d123; - this.m_count = 3; - }; - return Simplex; - }()); - /** @internal */ var simplex = new Simplex(); - /** @internal */ var input$1 = new DistanceInput(); - /** @internal */ var cache$1 = new SimplexCache(); - /** @internal */ var output$1 = new DistanceOutput(); - /** - * Determine if two generic shapes overlap. - */ - var testOverlap = function (shapeA, indexA, shapeB, indexB, xfA, xfB) { - input$1.recycle(); - input$1.proxyA.set(shapeA, indexA); - input$1.proxyB.set(shapeB, indexB); - copyTransform(input$1.transformA, xfA); - copyTransform(input$1.transformB, xfB); - input$1.useRadii = true; - output$1.recycle(); - cache$1.recycle(); - Distance(output$1, cache$1, input$1); - return output$1.distance < 10.0 * EPSILON; - }; - // legacy exports - Distance.testOverlap = testOverlap; - Distance.Input = DistanceInput; - Distance.Output = DistanceOutput; - Distance.Proxy = DistanceProxy; - Distance.Cache = SimplexCache; - /** - * Input parameters for ShapeCast - */ - var ShapeCastInput = /** @class */ (function () { - function ShapeCastInput() { - this.proxyA = new DistanceProxy(); - this.proxyB = new DistanceProxy(); - this.transformA = Transform.identity(); - this.transformB = Transform.identity(); - this.translationB = Vec2.zero(); - } - ShapeCastInput.prototype.recycle = function () { - this.proxyA.recycle(); - this.proxyB.recycle(); - this.transformA.setIdentity(); - this.transformB.setIdentity(); - zeroVec2(this.translationB); - }; - return ShapeCastInput; - }()); - /** - * Output results for b2ShapeCast - */ - var ShapeCastOutput = /** @class */ (function () { - function ShapeCastOutput() { - this.point = Vec2.zero(); - this.normal = Vec2.zero(); - this.lambda = 1.0; - this.iterations = 0; - } - return ShapeCastOutput; - }()); - /** - * Perform a linear shape cast of shape B moving and shape A fixed. Determines - * the hit point, normal, and translation fraction. - * - * @returns true if hit, false if there is no hit or an initial overlap - */ - // - // GJK-raycast - // Algorithm by Gino van den Bergen. - // "Smooth Mesh Contacts with GJK" in Game Physics Pearls. 2010 - var ShapeCast = function (output, input) { - output.iterations = 0; - output.lambda = 1.0; - output.normal.setZero(); - output.point.setZero(); - var proxyA = input.proxyA; - var proxyB = input.proxyB; - var radiusA = math_max$4(proxyA.m_radius, SettingsInternal.polygonRadius); - var radiusB = math_max$4(proxyB.m_radius, SettingsInternal.polygonRadius); - var radius = radiusA + radiusB; - var xfA = input.transformA; - var xfB = input.transformB; - var r = input.translationB; - var n = Vec2.zero(); - var lambda = 0.0; - // Initial simplex - var simplex = new Simplex(); - simplex.m_count = 0; - // Get simplex vertices as an array. - var vertices = simplex.m_v; - // Get support point in -r direction - var indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(r))); - var wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA)); - var indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, r)); - var wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB)); - var v = Vec2.sub(wA, wB); - // Sigma is the target distance between polygons - var sigma = math_max$4(SettingsInternal.polygonRadius, radius - SettingsInternal.polygonRadius); - var tolerance = 0.5 * SettingsInternal.linearSlop; - // Main iteration loop. - var k_maxIters = 20; - var iter = 0; - while (iter < k_maxIters && v.length() - sigma > tolerance) { - output.iterations += 1; - // Support in direction -v (A - B) - indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(v))); - wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA)); - indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, v)); - wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB)); - var p = Vec2.sub(wA, wB); - // -v is a normal at p - v.normalize(); - // Intersect ray with plane - var vp = Vec2.dot(v, p); - var vr = Vec2.dot(v, r); - if (vp - sigma > lambda * vr) { - if (vr <= 0.0) { - return false; - } - lambda = (vp - sigma) / vr; - if (lambda > 1.0) { - return false; - } - n.setMul(-1, v); - simplex.m_count = 0; - } - // Reverse simplex since it works with B - A. - // Shift by lambda * r because we want the closest point to the current clip point. - // Note that the support point p is not shifted because we want the plane equation - // to be formed in unshifted space. - var vertex = vertices[simplex.m_count]; - vertex.indexA = indexB; - vertex.wA = Vec2.combine(1, wB, lambda, r); - vertex.indexB = indexA; - vertex.wB = wA; - vertex.w = Vec2.sub(vertex.wB, vertex.wA); - vertex.a = 1.0; - simplex.m_count += 1; - switch (simplex.m_count) { - case 1: - break; - case 2: - simplex.solve2(); - break; - case 3: - simplex.solve3(); - break; - } - // If we have 3 points, then the origin is in the corresponding triangle. - if (simplex.m_count == 3) { - // Overlap - return false; - } - // Get search direction. - v.setVec2(simplex.getClosestPoint()); - // Iteration count is equated to the number of support point calls. - ++iter; - } - if (iter == 0) { - // Initial overlap - return false; - } - // Prepare output. - var pointA = Vec2.zero(); - var pointB = Vec2.zero(); - simplex.getWitnessPoints(pointB, pointA); - if (v.lengthSquared() > 0.0) { - n.setMul(-1, v); - n.normalize(); - } - output.point = Vec2.combine(1, pointA, radiusA, n); - output.normal = n; - output.lambda = lambda; - output.iterations = iter; - return true; - }; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$7 = Math.abs; - /** @internal */ var math_max$3 = Math.max; - /** - * Input parameters for TimeOfImpact. - */ - var TOIInput = /** @class */ (function () { - function TOIInput() { - this.proxyA = new DistanceProxy(); - this.proxyB = new DistanceProxy(); - this.sweepA = new Sweep(); - this.sweepB = new Sweep(); - } - TOIInput.prototype.recycle = function () { - this.proxyA.recycle(); - this.proxyB.recycle(); - this.sweepA.recycle(); - this.sweepB.recycle(); - this.tMax = -1; - }; - return TOIInput; - }()); - exports.TOIOutputState = void 0; - (function (TOIOutputState) { - TOIOutputState[TOIOutputState["e_unset"] = -1] = "e_unset"; - TOIOutputState[TOIOutputState["e_unknown"] = 0] = "e_unknown"; - TOIOutputState[TOIOutputState["e_failed"] = 1] = "e_failed"; - TOIOutputState[TOIOutputState["e_overlapped"] = 2] = "e_overlapped"; - TOIOutputState[TOIOutputState["e_touching"] = 3] = "e_touching"; - TOIOutputState[TOIOutputState["e_separated"] = 4] = "e_separated"; - })(exports.TOIOutputState || (exports.TOIOutputState = {})); - /** - * Output parameters for TimeOfImpact. - */ - var TOIOutput = /** @class */ (function () { - function TOIOutput() { - this.state = exports.TOIOutputState.e_unset; - this.t = -1; - } - TOIOutput.prototype.recycle = function () { - this.state = exports.TOIOutputState.e_unset; - this.t = -1; - }; - return TOIOutput; - }()); - stats.toiTime = 0; - stats.toiMaxTime = 0; - stats.toiCalls = 0; - stats.toiIters = 0; - stats.toiMaxIters = 0; - stats.toiRootIters = 0; - stats.toiMaxRootIters = 0; - /** @internal */ var distanceInput = new DistanceInput(); - /** @internal */ var distanceOutput = new DistanceOutput(); - // this is passed to Distance and SeparationFunction - /** @internal */ var cache = new SimplexCache(); - /** @internal */ var xfA$1 = transform(0, 0, 0); - /** @internal */ var xfB$1 = transform(0, 0, 0); - /** @internal */ var temp$4 = vec2(0, 0); - /** @internal */ var pointA$2 = vec2(0, 0); - /** @internal */ var pointB$2 = vec2(0, 0); - /** @internal */ var normal$3 = vec2(0, 0); - /** @internal */ var axisA = vec2(0, 0); - /** @internal */ var axisB = vec2(0, 0); - /** @internal */ var localPointA = vec2(0, 0); - /** @internal */ var localPointB = vec2(0, 0); - /** - * Compute the upper bound on time before two shapes penetrate. Time is - * represented as a fraction between [0,tMax]. This uses a swept separating axis - * and may miss some intermediate, non-tunneling collisions. If you change the - * time interval, you should call this function again. - * - * Note: use Distance to compute the contact point and normal at the time of - * impact. - * - * CCD via the local separating axis method. This seeks progression by computing - * the largest time at which separation is maintained. - */ - var TimeOfImpact = function (output, input) { - var timer = Timer.now(); - ++stats.toiCalls; - output.state = exports.TOIOutputState.e_unknown; - output.t = input.tMax; - var proxyA = input.proxyA; // DistanceProxy - var proxyB = input.proxyB; // DistanceProxy - var sweepA = input.sweepA; // Sweep - var sweepB = input.sweepB; // Sweep - // Large rotations can make the root finder fail, so we normalize the - // sweep angles. - sweepA.normalize(); - sweepB.normalize(); - var tMax = input.tMax; - var totalRadius = proxyA.m_radius + proxyB.m_radius; - var target = math_max$3(SettingsInternal.linearSlop, totalRadius - 3.0 * SettingsInternal.linearSlop); - var tolerance = 0.25 * SettingsInternal.linearSlop; - var t1 = 0.0; - var k_maxIterations = SettingsInternal.maxTOIIterations; - var iter = 0; - // Prepare input for distance query. - // const cache = new SimplexCache(); - cache.recycle(); - distanceInput.proxyA.setVertices(proxyA.m_vertices, proxyA.m_count, proxyA.m_radius); - distanceInput.proxyB.setVertices(proxyB.m_vertices, proxyB.m_count, proxyB.m_radius); - distanceInput.useRadii = false; - // The outer loop progressively attempts to compute new separating axes. - // This loop terminates when an axis is repeated (no progress is made). - while (true) { - sweepA.getTransform(xfA$1, t1); - sweepB.getTransform(xfB$1, t1); - // Get the distance between shapes. We can also use the results - // to get a separating axis. - copyTransform(distanceInput.transformA, xfA$1); - copyTransform(distanceInput.transformB, xfB$1); - Distance(distanceOutput, cache, distanceInput); - // If the shapes are overlapped, we give up on continuous collision. - if (distanceOutput.distance <= 0.0) { - // Failure! - output.state = exports.TOIOutputState.e_overlapped; - output.t = 0.0; - break; - } - if (distanceOutput.distance < target + tolerance) { - // Victory! - output.state = exports.TOIOutputState.e_touching; - output.t = t1; - break; - } - // Initialize the separating axis. - separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1); - // if (false) { - // // Dump the curve seen by the root finder - // const N = 100; - // const dx = 1.0 / N; - // const xs = []; // [ N + 1 ]; - // const fs = []; // [ N + 1 ]; - // const x = 0.0; - // for (const i = 0; i <= N; ++i) { - // sweepA.getTransform(xfA, x); - // sweepB.getTransform(xfB, x); - // const f = fcn.evaluate(xfA, xfB) - target; - // printf("%g %g\n", x, f); - // xs[i] = x; - // fs[i] = f; - // x += dx; - // } - // } - // Compute the TOI on the separating axis. We do this by successively - // resolving the deepest point. This loop is bounded by the number of - // vertices. - var done = false; - var t2 = tMax; - var pushBackIter = 0; - while (true) { - // Find the deepest point at t2. Store the witness point indices. - var s2 = separationFunction.findMinSeparation(t2); - // Is the final configuration separated? - if (s2 > target + tolerance) { - // Victory! - output.state = exports.TOIOutputState.e_separated; - output.t = tMax; - done = true; - break; - } - // Has the separation reached tolerance? - if (s2 > target - tolerance) { - // Advance the sweeps - t1 = t2; - break; - } - // Compute the initial separation of the witness points. - var s1 = separationFunction.evaluate(t1); - // Check for initial overlap. This might happen if the root finder - // runs out of iterations. - if (s1 < target - tolerance) { - output.state = exports.TOIOutputState.e_failed; - output.t = t1; - done = true; - break; - } - // Check for touching - if (s1 <= target + tolerance) { - // Victory! t1 should hold the TOI (could be 0.0). - output.state = exports.TOIOutputState.e_touching; - output.t = t1; - done = true; - break; - } - // Compute 1D root of: f(x) - target = 0 - var rootIterCount = 0; - var a1 = t1; - var a2 = t2; - while (true) { - // Use a mix of the secant rule and bisection. - var t = void 0; - if (rootIterCount & 1) { - // Secant rule to improve convergence. - t = a1 + (target - s1) * (a2 - a1) / (s2 - s1); - } - else { - // Bisection to guarantee progress. - t = 0.5 * (a1 + a2); - } - ++rootIterCount; - ++stats.toiRootIters; - var s = separationFunction.evaluate(t); - if (math_abs$7(s - target) < tolerance) { - // t2 holds a tentative value for t1 - t2 = t; - break; - } - // Ensure we continue to bracket the root. - if (s > target) { - a1 = t; - s1 = s; - } - else { - a2 = t; - s2 = s; - } - if (rootIterCount === 50) { - break; - } - } - stats.toiMaxRootIters = math_max$3(stats.toiMaxRootIters, rootIterCount); - ++pushBackIter; - if (pushBackIter === SettingsInternal.maxPolygonVertices) { - break; - } - } - ++iter; - ++stats.toiIters; - if (done) { - break; - } - if (iter === k_maxIterations) { - // Root finder got stuck. Semi-victory. - output.state = exports.TOIOutputState.e_failed; - output.t = t1; - break; - } - } - stats.toiMaxIters = math_max$3(stats.toiMaxIters, iter); - var time = Timer.diff(timer); - stats.toiMaxTime = math_max$3(stats.toiMaxTime, time); - stats.toiTime += time; - separationFunction.recycle(); - }; - var SeparationFunctionType; - (function (SeparationFunctionType) { - SeparationFunctionType[SeparationFunctionType["e_unset"] = -1] = "e_unset"; - SeparationFunctionType[SeparationFunctionType["e_points"] = 1] = "e_points"; - SeparationFunctionType[SeparationFunctionType["e_faceA"] = 2] = "e_faceA"; - SeparationFunctionType[SeparationFunctionType["e_faceB"] = 3] = "e_faceB"; - })(SeparationFunctionType || (SeparationFunctionType = {})); - var SeparationFunction = /** @class */ (function () { - function SeparationFunction() { - // input cache - // todo: maybe assign by copy instead of reference? - this.m_proxyA = null; - this.m_proxyB = null; - this.m_sweepA = null; - this.m_sweepB = null; - // initialize cache - this.m_type = SeparationFunctionType.e_unset; - this.m_localPoint = vec2(0, 0); - this.m_axis = vec2(0, 0); - // compute output - this.indexA = -1; - this.indexB = -1; - } - SeparationFunction.prototype.recycle = function () { - this.m_proxyA = null; - this.m_proxyB = null; - this.m_sweepA = null; - this.m_sweepB = null; - this.m_type = SeparationFunctionType.e_unset; - zeroVec2(this.m_localPoint); - zeroVec2(this.m_axis); - this.indexA = -1; - this.indexB = -1; - }; - // TODO_ERIN might not need to return the separation - SeparationFunction.prototype.initialize = function (cache, proxyA, sweepA, proxyB, sweepB, t1) { - var count = cache.count; - this.m_proxyA = proxyA; - this.m_proxyB = proxyB; - this.m_sweepA = sweepA; - this.m_sweepB = sweepB; - this.m_sweepA.getTransform(xfA$1, t1); - this.m_sweepB.getTransform(xfB$1, t1); - if (count === 1) { - this.m_type = SeparationFunctionType.e_points; - var localPointA_1 = this.m_proxyA.getVertex(cache.indexA[0]); - var localPointB_1 = this.m_proxyB.getVertex(cache.indexB[0]); - transformVec2(pointA$2, xfA$1, localPointA_1); - transformVec2(pointB$2, xfB$1, localPointB_1); - subVec2(this.m_axis, pointB$2, pointA$2); - var s = normalizeVec2Length(this.m_axis); - return s; - } - else if (cache.indexA[0] === cache.indexA[1]) { - // Two points on B and one on A. - this.m_type = SeparationFunctionType.e_faceB; - var localPointB1 = proxyB.getVertex(cache.indexB[0]); - var localPointB2 = proxyB.getVertex(cache.indexB[1]); - crossVec2Num(this.m_axis, subVec2(temp$4, localPointB2, localPointB1), 1.0); - normalizeVec2(this.m_axis); - rotVec2(normal$3, xfB$1.q, this.m_axis); - combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2); - transformVec2(pointB$2, xfB$1, this.m_localPoint); - var localPointA_2 = proxyA.getVertex(cache.indexA[0]); - var pointA_1 = Transform.mulVec2(xfA$1, localPointA_2); - var s = dotVec2(pointA_1, normal$3) - dotVec2(pointB$2, normal$3); - if (s < 0.0) { - negVec2(this.m_axis); - s = -s; - } - return s; - } - else { - // Two points on A and one or two points on B. - this.m_type = SeparationFunctionType.e_faceA; - var localPointA1 = this.m_proxyA.getVertex(cache.indexA[0]); - var localPointA2 = this.m_proxyA.getVertex(cache.indexA[1]); - crossVec2Num(this.m_axis, subVec2(temp$4, localPointA2, localPointA1), 1.0); - normalizeVec2(this.m_axis); - rotVec2(normal$3, xfA$1.q, this.m_axis); - combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2); - transformVec2(pointA$2, xfA$1, this.m_localPoint); - var localPointB_2 = this.m_proxyB.getVertex(cache.indexB[0]); - transformVec2(pointB$2, xfB$1, localPointB_2); - var s = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); - if (s < 0.0) { - negVec2(this.m_axis); - s = -s; - } - return s; - } - }; - SeparationFunction.prototype.compute = function (find, t) { - // It was findMinSeparation and evaluate - this.m_sweepA.getTransform(xfA$1, t); - this.m_sweepB.getTransform(xfB$1, t); - switch (this.m_type) { - case SeparationFunctionType.e_points: { - if (find) { - derotVec2(axisA, xfA$1.q, this.m_axis); - derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, this.m_axis)); - this.indexA = this.m_proxyA.getSupport(axisA); - this.indexB = this.m_proxyB.getSupport(axisB); - } - copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); - copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); - transformVec2(pointA$2, xfA$1, localPointA); - transformVec2(pointB$2, xfB$1, localPointB); - var sep = dotVec2(pointB$2, this.m_axis) - dotVec2(pointA$2, this.m_axis); - return sep; - } - case SeparationFunctionType.e_faceA: { - rotVec2(normal$3, xfA$1.q, this.m_axis); - transformVec2(pointA$2, xfA$1, this.m_localPoint); - if (find) { - derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, normal$3)); - this.indexA = -1; - this.indexB = this.m_proxyB.getSupport(axisB); - } - copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); - transformVec2(pointB$2, xfB$1, localPointB); - var sep = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); - return sep; - } - case SeparationFunctionType.e_faceB: { - rotVec2(normal$3, xfB$1.q, this.m_axis); - transformVec2(pointB$2, xfB$1, this.m_localPoint); - if (find) { - derotVec2(axisA, xfA$1.q, scaleVec2(temp$4, -1, normal$3)); - this.indexB = -1; - this.indexA = this.m_proxyA.getSupport(axisA); - } - copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); - transformVec2(pointA$2, xfA$1, localPointA); - var sep = dotVec2(pointA$2, normal$3) - dotVec2(pointB$2, normal$3); - return sep; - } - default: - if (find) { - this.indexA = -1; - this.indexB = -1; - } - return 0.0; - } - }; - SeparationFunction.prototype.findMinSeparation = function (t) { - return this.compute(true, t); - }; - SeparationFunction.prototype.evaluate = function (t) { - return this.compute(false, t); - }; - return SeparationFunction; - }()); - /** @internal */ var separationFunction = new SeparationFunction(); - // legacy exports - TimeOfImpact.Input = TOIInput; - TimeOfImpact.Output = TOIOutput; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$6 = Math.abs; - /** @internal */ var math_sqrt$3 = Math.sqrt; - /** @internal */ var math_min$5 = Math.min; - var TimeStep = /** @class */ (function () { - function TimeStep() { - /** time step */ - this.dt = 0; - /** inverse time step (0 if dt == 0) */ - this.inv_dt = 0; - this.velocityIterations = 0; - this.positionIterations = 0; - this.warmStarting = false; - this.blockSolve = true; - /** timestep ratio for variable timestep */ - this.inv_dt0 = 0.0; - /** dt * inv_dt0 */ - this.dtRatio = 1; - } - TimeStep.prototype.reset = function (dt) { - if (this.dt > 0.0) { - this.inv_dt0 = this.inv_dt; - } - this.dt = dt; - this.inv_dt = dt == 0 ? 0 : 1 / dt; - this.dtRatio = dt * this.inv_dt0; - }; - return TimeStep; - }()); - // reuse - /** @internal */ var s_subStep = new TimeStep(); - /** @internal */ var c = vec2(0, 0); - /** @internal */ var v = vec2(0, 0); - /** @internal */ var translation = vec2(0, 0); - /** @internal */ var input = new TOIInput(); - /** @internal */ var output = new TOIOutput(); - /** @internal */ var backup = new Sweep(); - /** @internal */ var backup1 = new Sweep(); - /** @internal */ var backup2 = new Sweep(); - /** - * Contact impulses for reporting. Impulses are used instead of forces because - * sub-step forces may approach infinity for rigid body collisions. These match - * up one-to-one with the contact points in Manifold. - */ - var ContactImpulse = /** @class */ (function () { - function ContactImpulse(contact) { - this.contact = contact; - this.normals = []; - this.tangents = []; - } - ContactImpulse.prototype.recycle = function () { - this.normals.length = 0; - this.tangents.length = 0; - }; - Object.defineProperty(ContactImpulse.prototype, "normalImpulses", { - get: function () { - var contact = this.contact; - var normals = this.normals; - normals.length = 0; - for (var p = 0; p < contact.v_points.length; ++p) { - normals.push(contact.v_points[p].normalImpulse); - } - return normals; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(ContactImpulse.prototype, "tangentImpulses", { - get: function () { - var contact = this.contact; - var tangents = this.tangents; - tangents.length = 0; - for (var p = 0; p < contact.v_points.length; ++p) { - tangents.push(contact.v_points[p].tangentImpulse); - } - return tangents; - }, - enumerable: false, - configurable: true - }); - return ContactImpulse; - }()); - /** - * Finds and solves islands. An island is a connected subset of the world. - */ - var Solver = /** @class */ (function () { - function Solver(world) { - this.m_world = world; - this.m_stack = []; - this.m_bodies = []; - this.m_contacts = []; - this.m_joints = []; - } - Solver.prototype.clear = function () { - this.m_stack.length = 0; - this.m_bodies.length = 0; - this.m_contacts.length = 0; - this.m_joints.length = 0; - }; - Solver.prototype.addBody = function (body) { - this.m_bodies.push(body); - // why? - // body.c_position.c.setZero(); - // body.c_position.a = 0; - // body.c_velocity.v.setZero(); - // body.c_velocity.w = 0; - }; - Solver.prototype.addContact = function (contact) { - // false && console.assert(contact instanceof Contact, 'Not a Contact!', contact); - this.m_contacts.push(contact); - }; - Solver.prototype.addJoint = function (joint) { - this.m_joints.push(joint); - }; - Solver.prototype.solveWorld = function (step) { - var world = this.m_world; - // Clear all the island flags. - for (var b = world.m_bodyList; b; b = b.m_next) { - b.m_islandFlag = false; - } - for (var c_1 = world.m_contactList; c_1; c_1 = c_1.m_next) { - c_1.m_islandFlag = false; - } - for (var j = world.m_jointList; j; j = j.m_next) { - j.m_islandFlag = false; - } - // Build and simulate all awake islands. - var stack = this.m_stack; - for (var seed = world.m_bodyList; seed; seed = seed.m_next) { - if (seed.m_islandFlag) { - continue; - } - if (seed.isAwake() == false || seed.isActive() == false) { - continue; - } - // The seed can be dynamic or kinematic. - if (seed.isStatic()) { - continue; - } - // Reset island and stack. - this.clear(); - stack.push(seed); - seed.m_islandFlag = true; - // Perform a depth first search (DFS) on the constraint graph. - while (stack.length > 0) { - // Grab the next body off the stack and add it to the island. - var b = stack.pop(); - this.addBody(b); - // Make sure the body is awake (without resetting sleep timer). - b.m_awakeFlag = true; - // To keep islands as small as possible, we don't - // propagate islands across static bodies. - if (b.isStatic()) { - continue; - } - // Search all contacts connected to this body. - for (var ce = b.m_contactList; ce; ce = ce.next) { - var contact = ce.contact; - // Has this contact already been added to an island? - if (contact.m_islandFlag) { - continue; - } - // Is this contact solid and touching? - if (contact.isEnabled() == false || contact.isTouching() == false) { - continue; - } - // Skip sensors. - var sensorA = contact.m_fixtureA.m_isSensor; - var sensorB = contact.m_fixtureB.m_isSensor; - if (sensorA || sensorB) { - continue; - } - this.addContact(contact); - contact.m_islandFlag = true; - var other = ce.other; - // Was the other body already added to this island? - if (other.m_islandFlag) { - continue; - } - // false && console.assert(stack.length < world.m_bodyCount); - stack.push(other); - other.m_islandFlag = true; - } - // Search all joints connect to this body. - for (var je = b.m_jointList; je; je = je.next) { - if (je.joint.m_islandFlag == true) { - continue; - } - var other = je.other; - // Don't simulate joints connected to inactive bodies. - if (other.isActive() == false) { - continue; - } - this.addJoint(je.joint); - je.joint.m_islandFlag = true; - if (other.m_islandFlag) { - continue; - } - // false && console.assert(stack.length < world.m_bodyCount); - stack.push(other); - other.m_islandFlag = true; - } - } - this.solveIsland(step); - // Post solve cleanup. - for (var i = 0; i < this.m_bodies.length; ++i) { - // Allow static bodies to participate in other islands. - // TODO: are they added at all? - var b = this.m_bodies[i]; - if (b.isStatic()) { - b.m_islandFlag = false; - } - } - } - }; - Solver.prototype.solveIsland = function (step) { - // B2: Island Solve - var world = this.m_world; - var gravity = world.m_gravity; - var allowSleep = world.m_allowSleep; - var h = step.dt; - // Integrate velocities and apply damping. Initialize the body state. - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(c, body.m_sweep.c); - var a = body.m_sweep.a; - copyVec2(v, body.m_linearVelocity); - var w = body.m_angularVelocity; - // Store positions for continuous collision. - copyVec2(body.m_sweep.c0, body.m_sweep.c); - body.m_sweep.a0 = body.m_sweep.a; - if (body.isDynamic()) { - // Integrate velocities. - plusScaleVec2(v, h * body.m_gravityScale, gravity); - plusScaleVec2(v, h * body.m_invMass, body.m_force); - w += h * body.m_invI * body.m_torque; - /** - *
-                     * Apply damping.
-                     * ODE: dv/dt + c * v = 0
-                     * Solution: v(t) = v0 * exp(-c * t)
-                     * Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)
-                     * v2 = exp(-c * dt) * v1
-                     * Pade approximation:
-                     * v2 = v1 * 1 / (1 + c * dt)
-                     * 
- */ - scaleVec2(v, 1.0 / (1.0 + h * body.m_linearDamping), v); - w *= 1.0 / (1.0 + h * body.m_angularDamping); - } - copyVec2(body.c_position.c, c); - body.c_position.a = a; - copyVec2(body.c_velocity.v, v); - body.c_velocity.w = w; - } - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initConstraint(step); - } - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initVelocityConstraint(step); - } - if (step.warmStarting) { - // Warm start. - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.warmStartConstraint(step); - } - } - for (var i = 0; i < this.m_joints.length; ++i) { - var joint = this.m_joints[i]; - joint.initVelocityConstraints(step); - } - // Solve velocity constraints - for (var i = 0; i < step.velocityIterations; ++i) { - for (var j = 0; j < this.m_joints.length; ++j) { - var joint = this.m_joints[j]; - joint.solveVelocityConstraints(step); - } - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - contact.solveVelocityConstraint(step); - } - } - // Store impulses for warm starting - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.storeConstraintImpulses(step); - } - // Integrate positions - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(c, body.c_position.c); - var a = body.c_position.a; - copyVec2(v, body.c_velocity.v); - var w = body.c_velocity.w; - // Check for large velocities - scaleVec2(translation, h, v); - var translationLengthSqr = lengthSqrVec2(translation); - if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { - var ratio = SettingsInternal.maxTranslation / math_sqrt$3(translationLengthSqr); - mulVec2(v, ratio); - } - var rotation = h * w; - if (rotation * rotation > SettingsInternal.maxRotationSquared) { - var ratio = SettingsInternal.maxRotation / math_abs$6(rotation); - w *= ratio; - } - // Integrate - plusScaleVec2(c, h, v); - a += h * w; - copyVec2(body.c_position.c, c); - body.c_position.a = a; - copyVec2(body.c_velocity.v, v); - body.c_velocity.w = w; - } - // Solve position constraints - var positionSolved = false; - for (var i = 0; i < step.positionIterations; ++i) { - var minSeparation = 0.0; - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - var separation = contact.solvePositionConstraint(step); - minSeparation = math_min$5(minSeparation, separation); - } - // We can't expect minSpeparation >= -Settings.linearSlop because we don't - // push the separation above -Settings.linearSlop. - var contactsOkay = minSeparation >= -3.0 * SettingsInternal.linearSlop; - var jointsOkay = true; - for (var j = 0; j < this.m_joints.length; ++j) { - var joint = this.m_joints[j]; - var jointOkay = joint.solvePositionConstraints(step); - jointsOkay = jointsOkay && jointOkay; - } - if (contactsOkay && jointsOkay) { - // Exit early if the position errors are small. - positionSolved = true; - break; - } - } - // Copy state buffers back to the bodies - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(body.m_sweep.c, body.c_position.c); - body.m_sweep.a = body.c_position.a; - copyVec2(body.m_linearVelocity, body.c_velocity.v); - body.m_angularVelocity = body.c_velocity.w; - body.synchronizeTransform(); - } - this.postSolveIsland(); - if (allowSleep) { - var minSleepTime = Infinity; - var linTolSqr = SettingsInternal.linearSleepToleranceSqr; - var angTolSqr = SettingsInternal.angularSleepToleranceSqr; - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - if (body.isStatic()) { - continue; - } - if ((body.m_autoSleepFlag == false) - || (body.m_angularVelocity * body.m_angularVelocity > angTolSqr) - || (lengthSqrVec2(body.m_linearVelocity) > linTolSqr)) { - body.m_sleepTime = 0.0; - minSleepTime = 0.0; - } - else { - body.m_sleepTime += h; - minSleepTime = math_min$5(minSleepTime, body.m_sleepTime); - } - } - if (minSleepTime >= SettingsInternal.timeToSleep && positionSolved) { - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - body.setAwake(false); - } - } - } - }; - /** - * Find TOI contacts and solve them. - */ - Solver.prototype.solveWorldTOI = function (step) { - var world = this.m_world; - if (world.m_stepComplete) { - for (var b = world.m_bodyList; b; b = b.m_next) { - b.m_islandFlag = false; - b.m_sweep.alpha0 = 0.0; - } - for (var c_2 = world.m_contactList; c_2; c_2 = c_2.m_next) { - // Invalidate TOI - c_2.m_toiFlag = false; - c_2.m_islandFlag = false; - c_2.m_toiCount = 0; - c_2.m_toi = 1.0; - } - } - // Find TOI events and solve them. - while (true) { - // Find the first TOI. - var minContact = null; - var minAlpha = 1.0; - for (var c_3 = world.m_contactList; c_3; c_3 = c_3.m_next) { - // Is this contact disabled? - if (c_3.isEnabled() == false) { - continue; - } - // Prevent excessive sub-stepping. - if (c_3.m_toiCount > SettingsInternal.maxSubSteps) { - continue; - } - var alpha = 1.0; - if (c_3.m_toiFlag) { - // This contact has a valid cached TOI. - alpha = c_3.m_toi; - } - else { - var fA_1 = c_3.getFixtureA(); - var fB_1 = c_3.getFixtureB(); - // Is there a sensor? - if (fA_1.isSensor() || fB_1.isSensor()) { - continue; - } - var bA_1 = fA_1.getBody(); - var bB_1 = fB_1.getBody(); - var activeA = bA_1.isAwake() && !bA_1.isStatic(); - var activeB = bB_1.isAwake() && !bB_1.isStatic(); - // Is at least one body active (awake and dynamic or kinematic)? - if (activeA == false && activeB == false) { - continue; - } - var collideA = bA_1.isBullet() || !bA_1.isDynamic(); - var collideB = bB_1.isBullet() || !bB_1.isDynamic(); - // Are these two non-bullet dynamic bodies? - if (collideA == false && collideB == false) { - continue; - } - // Compute the TOI for this contact. - // Put the sweeps onto the same time interval. - var alpha0 = bA_1.m_sweep.alpha0; - if (bA_1.m_sweep.alpha0 < bB_1.m_sweep.alpha0) { - alpha0 = bB_1.m_sweep.alpha0; - bA_1.m_sweep.advance(alpha0); - } - else if (bB_1.m_sweep.alpha0 < bA_1.m_sweep.alpha0) { - alpha0 = bA_1.m_sweep.alpha0; - bB_1.m_sweep.advance(alpha0); - } - var indexA = c_3.getChildIndexA(); - var indexB = c_3.getChildIndexB(); - bA_1.m_sweep; - bB_1.m_sweep; - // Compute the time of impact in interval [0, minTOI] - input.proxyA.set(fA_1.getShape(), indexA); - input.proxyB.set(fB_1.getShape(), indexB); - input.sweepA.set(bA_1.m_sweep); - input.sweepB.set(bB_1.m_sweep); - input.tMax = 1.0; - TimeOfImpact(output, input); - // Beta is the fraction of the remaining portion of the [time?]. - var beta = output.t; - if (output.state == exports.TOIOutputState.e_touching) { - alpha = math_min$5(alpha0 + (1.0 - alpha0) * beta, 1.0); - } - else { - alpha = 1.0; - } - c_3.m_toi = alpha; - c_3.m_toiFlag = true; - } - if (alpha < minAlpha) { - // This is the minimum TOI found so far. - minContact = c_3; - minAlpha = alpha; - } - } - if (minContact == null || 1.0 - 10.0 * EPSILON < minAlpha) { - // No more TOI events. Done! - world.m_stepComplete = true; - break; - } - // Advance the bodies to the TOI. - var fA = minContact.getFixtureA(); - var fB = minContact.getFixtureB(); - var bA = fA.getBody(); - var bB = fB.getBody(); - backup1.set(bA.m_sweep); - backup2.set(bB.m_sweep); - bA.advance(minAlpha); - bB.advance(minAlpha); - // The TOI contact likely has some new contact points. - minContact.update(world); - minContact.m_toiFlag = false; - ++minContact.m_toiCount; - // Is the contact solid? - if (minContact.isEnabled() == false || minContact.isTouching() == false) { - // Restore the sweeps. - minContact.setEnabled(false); - bA.m_sweep.set(backup1); - bB.m_sweep.set(backup2); - bA.synchronizeTransform(); - bB.synchronizeTransform(); - continue; - } - bA.setAwake(true); - bB.setAwake(true); - // Build the island - this.clear(); - this.addBody(bA); - this.addBody(bB); - this.addContact(minContact); - bA.m_islandFlag = true; - bB.m_islandFlag = true; - minContact.m_islandFlag = true; - // Get contacts on bodyA and bodyB. - var bodies = [bA, bB]; - for (var i = 0; i < bodies.length; ++i) { - var body = bodies[i]; - if (body.isDynamic()) { - for (var ce = body.m_contactList; ce; ce = ce.next) { - // if (this.m_bodyCount == this.m_bodyCapacity) { break; } - // if (this.m_contactCount == this.m_contactCapacity) { break; } - var contact = ce.contact; - // Has this contact already been added to the island? - if (contact.m_islandFlag) { - continue; - } - // Only add if either is static, kinematic or bullet. - var other = ce.other; - if (other.isDynamic() && !body.isBullet() && !other.isBullet()) { - continue; - } - // Skip sensors. - var sensorA = contact.m_fixtureA.m_isSensor; - var sensorB = contact.m_fixtureB.m_isSensor; - if (sensorA || sensorB) { - continue; - } - // Tentatively advance the body to the TOI. - backup.set(other.m_sweep); - if (other.m_islandFlag == false) { - other.advance(minAlpha); - } - // Update the contact points - contact.update(world); - // Was the contact disabled by the user? - // Are there contact points? - if (contact.isEnabled() == false || contact.isTouching() == false) { - other.m_sweep.set(backup); - other.synchronizeTransform(); - continue; - } - // Add the contact to the island - contact.m_islandFlag = true; - this.addContact(contact); - // Has the other body already been added to the island? - if (other.m_islandFlag) { - continue; - } - // Add the other body to the island. - other.m_islandFlag = true; - if (!other.isStatic()) { - other.setAwake(true); - } - this.addBody(other); - } - } - } - s_subStep.reset((1.0 - minAlpha) * step.dt); - s_subStep.dtRatio = 1.0; - s_subStep.positionIterations = 20; - s_subStep.velocityIterations = step.velocityIterations; - s_subStep.warmStarting = false; - this.solveIslandTOI(s_subStep, bA, bB); - // Reset island flags and synchronize broad-phase proxies. - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - body.m_islandFlag = false; - if (!body.isDynamic()) { - continue; - } - body.synchronizeFixtures(); - // Invalidate all contact TOIs on this displaced body. - for (var ce = body.m_contactList; ce; ce = ce.next) { - ce.contact.m_toiFlag = false; - ce.contact.m_islandFlag = false; - } - } - // Commit fixture proxy movements to the broad-phase so that new contacts - // are created. - // Also, some contacts can be destroyed. - world.findNewContacts(); - if (world.m_subStepping) { - world.m_stepComplete = false; - break; - } - } - }; - Solver.prototype.solveIslandTOI = function (subStep, toiA, toiB) { - // Initialize the body state. - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(body.c_position.c, body.m_sweep.c); - body.c_position.a = body.m_sweep.a; - copyVec2(body.c_velocity.v, body.m_linearVelocity); - body.c_velocity.w = body.m_angularVelocity; - } - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initConstraint(subStep); - } - // Solve position constraints. - for (var i = 0; i < subStep.positionIterations; ++i) { - var minSeparation = 0.0; - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - var separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB); - minSeparation = math_min$5(minSeparation, separation); - } - // We can't expect minSpeparation >= -Settings.linearSlop because we don't - // push the separation above -Settings.linearSlop. - var contactsOkay = minSeparation >= -1.5 * SettingsInternal.linearSlop; - if (contactsOkay) { - break; - } - } - var i; - // Leap of faith to new safe state. - copyVec2(toiA.m_sweep.c0, toiA.c_position.c); - toiA.m_sweep.a0 = toiA.c_position.a; - copyVec2(toiB.m_sweep.c0, toiB.c_position.c); - toiB.m_sweep.a0 = toiB.c_position.a; - // No warm starting is needed for TOI events because warm - // starting impulses were applied in the discrete solver. - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initVelocityConstraint(subStep); - } - // Solve velocity constraints. - for (var i = 0; i < subStep.velocityIterations; ++i) { - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - contact.solveVelocityConstraint(subStep); - } - } - // Don't store the TOI contact forces for warm starting - // because they can be quite large. - var h = subStep.dt; - // Integrate positions - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(c, body.c_position.c); - var a = body.c_position.a; - copyVec2(v, body.c_velocity.v); - var w = body.c_velocity.w; - // Check for large velocities - scaleVec2(translation, h, v); - var translationLengthSqr = lengthSqrVec2(translation); - if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { - var ratio = SettingsInternal.maxTranslation / math_sqrt$3(translationLengthSqr); - mulVec2(v, ratio); - } - var rotation = h * w; - if (rotation * rotation > SettingsInternal.maxRotationSquared) { - var ratio = SettingsInternal.maxRotation / math_abs$6(rotation); - w *= ratio; - } - // Integrate - plusScaleVec2(c, h, v); - a += h * w; - copyVec2(body.c_position.c, c); - body.c_position.a = a; - copyVec2(body.c_velocity.v, v); - body.c_velocity.w = w; - // Sync bodies - copyVec2(body.m_sweep.c, c); - body.m_sweep.a = a; - copyVec2(body.m_linearVelocity, v); - body.m_angularVelocity = w; - body.synchronizeTransform(); - } - this.postSolveIsland(); - }; - /** @internal */ - Solver.prototype.postSolveIsland = function () { - for (var c_5 = 0; c_5 < this.m_contacts.length; ++c_5) { - var contact = this.m_contacts[c_5]; - this.m_world.postSolve(contact, contact.m_impulse); - } - }; - return Solver; - }()); - // @ts-ignore - Solver.TimeStep = TimeStep; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** - * A 2-by-2 matrix. Stored in column-major order. - */ - var Mat22 = /** @class */ (function () { - function Mat22(a, b, c, d) { - if (typeof a === "object" && a !== null) { - this.ex = Vec2.clone(a); - this.ey = Vec2.clone(b); - } - else if (typeof a === "number") { - this.ex = Vec2.neo(a, c); - this.ey = Vec2.neo(b, d); - } - else { - this.ex = Vec2.zero(); - this.ey = Vec2.zero(); - } - } - /** @hidden */ - Mat22.prototype.toString = function () { - return JSON.stringify(this); - }; - Mat22.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey); - }; - Mat22.assert = function (o) { - }; - Mat22.prototype.set = function (a, b, c, d) { - if (typeof a === "number" && typeof b === "number" && typeof c === "number" - && typeof d === "number") { - this.ex.setNum(a, c); - this.ey.setNum(b, d); - } - else if (typeof a === "object" && typeof b === "object") { - this.ex.setVec2(a); - this.ey.setVec2(b); - } - else if (typeof a === "object") { - this.ex.setVec2(a.ex); - this.ey.setVec2(a.ey); - } - else ; - }; - Mat22.prototype.setIdentity = function () { - this.ex.x = 1.0; - this.ey.x = 0.0; - this.ex.y = 0.0; - this.ey.y = 1.0; - }; - Mat22.prototype.setZero = function () { - this.ex.x = 0.0; - this.ey.x = 0.0; - this.ex.y = 0.0; - this.ey.y = 0.0; - }; - Mat22.prototype.getInverse = function () { - var a = this.ex.x; - var b = this.ey.x; - var c = this.ex.y; - var d = this.ey.y; - var det = a * d - b * c; - if (det !== 0.0) { - det = 1.0 / det; - } - var imx = new Mat22(); - imx.ex.x = det * d; - imx.ey.x = -det * b; - imx.ex.y = -det * c; - imx.ey.y = det * a; - return imx; - }; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - Mat22.prototype.solve = function (v) { - var a = this.ex.x; - var b = this.ey.x; - var c = this.ex.y; - var d = this.ey.y; - var det = a * d - b * c; - if (det !== 0.0) { - det = 1.0 / det; - } - var w = Vec2.zero(); - w.x = det * (d * v.x - b * v.y); - w.y = det * (a * v.y - c * v.x); - return w; - }; - Mat22.mul = function (mx, v) { - if (v && "x" in v && "y" in v) { - var x = mx.ex.x * v.x + mx.ey.x * v.y; - var y = mx.ex.y * v.x + mx.ey.y * v.y; - return Vec2.neo(x, y); - } - else if (v && "ex" in v && "ey" in v) { // Mat22 - // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey)); - var a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y; - var b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y; - var c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y; - var d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y; - return new Mat22(a, b, c, d); - } - }; - Mat22.mulVec2 = function (mx, v) { - var x = mx.ex.x * v.x + mx.ey.x * v.y; - var y = mx.ex.y * v.x + mx.ey.y * v.y; - return Vec2.neo(x, y); - }; - Mat22.mulMat22 = function (mx, v) { - // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey)); - var a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y; - var b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y; - var c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y; - var d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y; - return new Mat22(a, b, c, d); - }; - Mat22.mulT = function (mx, v) { - if (v && "x" in v && "y" in v) { // Vec2 - return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey)); - } - else if (v && "ex" in v && "ey" in v) { // Mat22 - var c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex)); - var c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey)); - return new Mat22(c1, c2); - } - }; - Mat22.mulTVec2 = function (mx, v) { - return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey)); - }; - Mat22.mulTMat22 = function (mx, v) { - var c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex)); - var c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey)); - return new Mat22(c1, c2); - }; - Mat22.abs = function (mx) { - return new Mat22(Vec2.abs(mx.ex), Vec2.abs(mx.ey)); - }; - Mat22.add = function (mx1, mx2) { - return new Mat22(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey)); - }; - return Mat22; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_sqrt$2 = Math.sqrt; - /** @internal */ var pointA$1 = vec2(0, 0); - /** @internal */ var pointB$1 = vec2(0, 0); - /** @internal */ var temp$3 = vec2(0, 0); - /** @internal */ var cA$1 = vec2(0, 0); - /** @internal */ var cB$1 = vec2(0, 0); - /** @internal */ var dist = vec2(0, 0); - /** @internal */ var planePoint$2 = vec2(0, 0); - /** @internal */ var clipPoint$1 = vec2(0, 0); - exports.ManifoldType = void 0; - (function (ManifoldType) { - ManifoldType[ManifoldType["e_unset"] = -1] = "e_unset"; - ManifoldType[ManifoldType["e_circles"] = 0] = "e_circles"; - ManifoldType[ManifoldType["e_faceA"] = 1] = "e_faceA"; - ManifoldType[ManifoldType["e_faceB"] = 2] = "e_faceB"; - })(exports.ManifoldType || (exports.ManifoldType = {})); - exports.ContactFeatureType = void 0; - (function (ContactFeatureType) { - ContactFeatureType[ContactFeatureType["e_unset"] = -1] = "e_unset"; - ContactFeatureType[ContactFeatureType["e_vertex"] = 0] = "e_vertex"; - ContactFeatureType[ContactFeatureType["e_face"] = 1] = "e_face"; - })(exports.ContactFeatureType || (exports.ContactFeatureType = {})); - /** - * This is used for determining the state of contact points. - */ - exports.PointState = void 0; - (function (PointState) { - /** Point does not exist */ - PointState[PointState["nullState"] = 0] = "nullState"; - /** Point was added in the update */ - PointState[PointState["addState"] = 1] = "addState"; - /** Point persisted across the update */ - PointState[PointState["persistState"] = 2] = "persistState"; - /** Point was removed in the update */ - PointState[PointState["removeState"] = 3] = "removeState"; - })(exports.PointState || (exports.PointState = {})); - /** - * Used for computing contact manifolds. - */ - var ClipVertex = /** @class */ (function () { - function ClipVertex() { - this.v = vec2(0, 0); - this.id = new ContactID(); - } - ClipVertex.prototype.set = function (o) { - copyVec2(this.v, o.v); - this.id.set(o.id); - }; - ClipVertex.prototype.recycle = function () { - zeroVec2(this.v); - this.id.recycle(); - }; - return ClipVertex; - }()); - /** - * A manifold for two touching convex shapes. Manifolds are created in `evaluate` - * method of Contact subclasses. - * - * Supported manifold types are e_faceA or e_faceB for clip point versus plane - * with radius and e_circles point versus point with radius. - * - * We store contacts in this way so that position correction can account for - * movement, which is critical for continuous physics. All contact scenarios - * must be expressed in one of these types. This structure is stored across time - * steps, so we keep it small. - */ - var Manifold = /** @class */ (function () { - function Manifold() { - /** - * Usage depends on manifold type: - * - circles: not used - * - faceA: the normal on polygonA - * - faceB: the normal on polygonB - */ - this.localNormal = vec2(0, 0); - /** - * Usage depends on manifold type: - * - circles: the local center of circleA - * - faceA: the center of faceA - * - faceB: the center of faceB - */ - this.localPoint = vec2(0, 0); - /** The points of contact */ - this.points = [new ManifoldPoint(), new ManifoldPoint()]; - /** The number of manifold points */ - this.pointCount = 0; - } - Manifold.prototype.set = function (that) { - this.type = that.type; - copyVec2(this.localNormal, that.localNormal); - copyVec2(this.localPoint, that.localPoint); - this.pointCount = that.pointCount; - this.points[0].set(that.points[0]); - this.points[1].set(that.points[1]); - }; - Manifold.prototype.recycle = function () { - this.type = exports.ManifoldType.e_unset; - zeroVec2(this.localNormal); - zeroVec2(this.localPoint); - this.pointCount = 0; - this.points[0].recycle(); - this.points[1].recycle(); - }; - /** - * Evaluate the manifold with supplied transforms. This assumes modest motion - * from the original state. This does not change the point count, impulses, etc. - * The radii must come from the shapes that generated the manifold. - */ - Manifold.prototype.getWorldManifold = function (wm, xfA, radiusA, xfB, radiusB) { - if (this.pointCount == 0) { - return wm; - } - wm = wm || new WorldManifold(); - wm.pointCount = this.pointCount; - var normal = wm.normal; - var points = wm.points; - var separations = wm.separations; - switch (this.type) { - case exports.ManifoldType.e_circles: { - setVec2(normal, 1.0, 0.0); - var manifoldPoint = this.points[0]; - transformVec2(pointA$1, xfA, this.localPoint); - transformVec2(pointB$1, xfB, manifoldPoint.localPoint); - subVec2(dist, pointB$1, pointA$1); - var lengthSqr = lengthSqrVec2(dist); - if (lengthSqr > EPSILON * EPSILON) { - var length_1 = math_sqrt$2(lengthSqr); - scaleVec2(normal, 1 / length_1, dist); - } - combine2Vec2(cA$1, 1, pointA$1, radiusA, normal); - combine2Vec2(cB$1, 1, pointB$1, -radiusB, normal); - combine2Vec2(points[0], 0.5, cA$1, 0.5, cB$1); - separations[0] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal); - break; - } - case exports.ManifoldType.e_faceA: { - rotVec2(normal, xfA.q, this.localNormal); - transformVec2(planePoint$2, xfA, this.localPoint); - for (var i = 0; i < this.pointCount; ++i) { - var manifoldPoint = this.points[i]; - transformVec2(clipPoint$1, xfB, manifoldPoint.localPoint); - combine2Vec2(cA$1, 1, clipPoint$1, radiusA - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal), normal); - combine2Vec2(cB$1, 1, clipPoint$1, -radiusB, normal); - combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); - separations[i] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal); - } - break; - } - case exports.ManifoldType.e_faceB: { - rotVec2(normal, xfB.q, this.localNormal); - transformVec2(planePoint$2, xfB, this.localPoint); - for (var i = 0; i < this.pointCount; ++i) { - var manifoldPoint = this.points[i]; - transformVec2(clipPoint$1, xfA, manifoldPoint.localPoint); - combine2Vec2(cB$1, 1, clipPoint$1, radiusB - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal), normal); - combine2Vec2(cA$1, 1, clipPoint$1, -radiusA, normal); - combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); - separations[i] = dotVec2(subVec2(temp$3, cA$1, cB$1), normal); - } - // Ensure normal points from A to B. - negVec2(normal); - break; - } - } - return wm; - }; - Manifold.clipSegmentToLine = clipSegmentToLine; - Manifold.ClipVertex = ClipVertex; - Manifold.getPointStates = getPointStates; - Manifold.PointState = exports.PointState; - return Manifold; - }()); - /** - * A manifold point is a contact point belonging to a contact manifold. It holds - * details related to the geometry and dynamics of the contact points. - * - * This structure is stored across time steps, so we keep it small. - * - * Note: impulses are used for internal caching and may not provide reliable - * contact forces, especially for high speed collisions. - */ - var ManifoldPoint = /** @class */ (function () { - function ManifoldPoint() { - /** - * Usage depends on manifold type: - * - circles: the local center of circleB - * - faceA: the local center of circleB or the clip point of polygonB - * - faceB: the clip point of polygonA - */ - this.localPoint = vec2(0, 0); - /** - * The non-penetration impulse - */ - this.normalImpulse = 0; - /** - * The friction impulse - */ - this.tangentImpulse = 0; - /** - * Uniquely identifies a contact point between two shapes to facilitate warm starting - */ - this.id = new ContactID(); - } - ManifoldPoint.prototype.set = function (that) { - copyVec2(this.localPoint, that.localPoint); - this.normalImpulse = that.normalImpulse; - this.tangentImpulse = that.tangentImpulse; - this.id.set(that.id); - }; - ManifoldPoint.prototype.recycle = function () { - zeroVec2(this.localPoint); - this.normalImpulse = 0; - this.tangentImpulse = 0; - this.id.recycle(); - }; - return ManifoldPoint; - }()); - /** - * Contact ids to facilitate warm starting. - * - * ContactFeature: The features that intersect to form the contact point. - */ - var ContactID = /** @class */ (function () { - function ContactID() { - /** - * Used to quickly compare contact ids. - */ - this.key = -1; - /** ContactFeature index on shapeA */ - this.indexA = -1; - /** ContactFeature index on shapeB */ - this.indexB = -1; - /** ContactFeature type on shapeA */ - this.typeA = exports.ContactFeatureType.e_unset; - /** ContactFeature type on shapeB */ - this.typeB = exports.ContactFeatureType.e_unset; - } - ContactID.prototype.setFeatures = function (indexA, typeA, indexB, typeB) { - this.indexA = indexA; - this.indexB = indexB; - this.typeA = typeA; - this.typeB = typeB; - this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; - }; - ContactID.prototype.set = function (that) { - this.indexA = that.indexA; - this.indexB = that.indexB; - this.typeA = that.typeA; - this.typeB = that.typeB; - this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; - }; - ContactID.prototype.swapFeatures = function () { - var indexA = this.indexA; - var indexB = this.indexB; - var typeA = this.typeA; - var typeB = this.typeB; - this.indexA = indexB; - this.indexB = indexA; - this.typeA = typeB; - this.typeB = typeA; - this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; - }; - ContactID.prototype.recycle = function () { - this.indexA = 0; - this.indexB = 0; - this.typeA = exports.ContactFeatureType.e_unset; - this.typeB = exports.ContactFeatureType.e_unset; - this.key = -1; - }; - return ContactID; - }()); - /** - * This is used to compute the current state of a contact manifold. - */ - var WorldManifold = /** @class */ (function () { - function WorldManifold() { - /** World vector pointing from A to B */ - this.normal = vec2(0, 0); - /** World contact point (point of intersection) */ - this.points = [vec2(0, 0), vec2(0, 0)]; // [maxManifoldPoints] - /** A negative value indicates overlap, in meters */ - this.separations = [0, 0]; // [maxManifoldPoints] - /** The number of manifold points */ - this.pointCount = 0; - } - WorldManifold.prototype.recycle = function () { - zeroVec2(this.normal); - zeroVec2(this.points[0]); - zeroVec2(this.points[1]); - this.separations[0] = 0; - this.separations[1] = 0; - this.pointCount = 0; - }; - return WorldManifold; - }()); - /** - * Compute the point states given two manifolds. The states pertain to the - * transition from manifold1 to manifold2. So state1 is either persist or remove - * while state2 is either add or persist. - */ - function getPointStates(state1, state2, manifold1, manifold2) { - // state1, state2: PointState[Settings.maxManifoldPoints] - // for (var i = 0; i < Settings.maxManifoldPoints; ++i) { - // state1[i] = PointState.nullState; - // state2[i] = PointState.nullState; - // } - // Detect persists and removes. - for (var i = 0; i < manifold1.pointCount; ++i) { - var id = manifold1.points[i].id; - state1[i] = exports.PointState.removeState; - for (var j = 0; j < manifold2.pointCount; ++j) { - if (manifold2.points[j].id.key === id.key) { - state1[i] = exports.PointState.persistState; - break; - } - } - } - // Detect persists and adds. - for (var i = 0; i < manifold2.pointCount; ++i) { - var id = manifold2.points[i].id; - state2[i] = exports.PointState.addState; - for (var j = 0; j < manifold1.pointCount; ++j) { - if (manifold1.points[j].id.key === id.key) { - state2[i] = exports.PointState.persistState; - break; - } - } - } - } - /** - * Clipping for contact manifolds. Sutherland-Hodgman clipping. - */ - function clipSegmentToLine(vOut, vIn, normal, offset, vertexIndexA) { - // Start with no output points - var numOut = 0; - // Calculate the distance of end points to the line - var distance0 = dotVec2(normal, vIn[0].v) - offset; - var distance1 = dotVec2(normal, vIn[1].v) - offset; - // If the points are behind the plane - if (distance0 <= 0.0) - vOut[numOut++].set(vIn[0]); - if (distance1 <= 0.0) - vOut[numOut++].set(vIn[1]); - // If the points are on different sides of the plane - if (distance0 * distance1 < 0.0) { - // Find intersection point of edge and plane - var interp = distance0 / (distance0 - distance1); - combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v); - // VertexA is hitting edgeB. - vOut[numOut].id.setFeatures(vertexIndexA, exports.ContactFeatureType.e_vertex, vIn[0].id.indexB, exports.ContactFeatureType.e_face); - ++numOut; - } - return numOut; - } - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_sqrt$1 = Math.sqrt; - /** @internal */ var math_max$2 = Math.max; - /** @internal */ var math_min$4 = Math.min; - /** @internal */ var contactPool = new Pool({ - create: function () { - return new Contact(); - }, - release: function (contact) { - contact.recycle(); - } - }); - /** @internal */ var oldManifold = new Manifold(); - /** @internal */ var worldManifold = new WorldManifold(); - /** - * A contact edge is used to connect bodies and contacts together in a contact - * graph where each body is a node and each contact is an edge. A contact edge - * belongs to a doubly linked list maintained in each attached body. Each - * contact has two contact nodes, one for each attached body. - */ - var ContactEdge = /** @class */ (function () { - function ContactEdge(contact) { - this.prev = null; - this.next = null; - this.other = null; - this.contact = contact; - } - /** @internal */ - ContactEdge.prototype.recycle = function () { - this.prev = null; - this.next = null; - this.other = null; - }; - return ContactEdge; - }()); - /** - * Friction mixing law. The idea is to allow either fixture to drive the - * friction to zero. For example, anything slides on ice. - */ - function mixFriction(friction1, friction2) { - return math_sqrt$1(friction1 * friction2); - } - /** - * Restitution mixing law. The idea is allow for anything to bounce off an - * inelastic surface. For example, a superball bounces on anything. - */ - function mixRestitution(restitution1, restitution2) { - return restitution1 > restitution2 ? restitution1 : restitution2; - } - // TODO: move this to Settings? - /** @internal */ var s_registers = []; - // TODO: merge with ManifoldPoint? - var VelocityConstraintPoint = /** @class */ (function () { - function VelocityConstraintPoint() { - this.rA = vec2(0, 0); - this.rB = vec2(0, 0); - this.normalImpulse = 0; - this.tangentImpulse = 0; - this.normalMass = 0; - this.tangentMass = 0; - this.velocityBias = 0; - } - VelocityConstraintPoint.prototype.recycle = function () { - zeroVec2(this.rA); - zeroVec2(this.rB); - this.normalImpulse = 0; - this.tangentImpulse = 0; - this.normalMass = 0; - this.tangentMass = 0; - this.velocityBias = 0; - }; - return VelocityConstraintPoint; - }()); - /** @internal */ var cA = vec2(0, 0); - /** @internal */ var vA = vec2(0, 0); - /** @internal */ var cB = vec2(0, 0); - /** @internal */ var vB = vec2(0, 0); - /** @internal */ var tangent$1 = vec2(0, 0); - /** @internal */ var xfA = transform(0, 0, 0); - /** @internal */ var xfB = transform(0, 0, 0); - /** @internal */ var pointA = vec2(0, 0); - /** @internal */ var pointB = vec2(0, 0); - /** @internal */ var clipPoint = vec2(0, 0); - /** @internal */ var planePoint$1 = vec2(0, 0); - /** @internal */ var rA = vec2(0, 0); - /** @internal */ var rB = vec2(0, 0); - /** @internal */ var P$1 = vec2(0, 0); - /** @internal */ var normal$2 = vec2(0, 0); - /** @internal */ var point = vec2(0, 0); - /** @internal */ var dv = vec2(0, 0); - /** @internal */ var dv1 = vec2(0, 0); - /** @internal */ var dv2 = vec2(0, 0); - /** @internal */ var b = vec2(0, 0); - /** @internal */ var a = vec2(0, 0); - /** @internal */ var x = vec2(0, 0); - /** @internal */ var d = vec2(0, 0); - /** @internal */ var P1 = vec2(0, 0); - /** @internal */ var P2 = vec2(0, 0); - /** @internal */ var temp$2 = vec2(0, 0); - /** - * The class manages contact between two shapes. A contact exists for each - * overlapping AABB in the broad-phase (except if filtered). Therefore a contact - * object may exist that has no contact points. - */ - var Contact = /** @class */ (function () { - function Contact() { - // Nodes for connecting bodies. - /** @internal */ this.m_nodeA = new ContactEdge(this); - /** @internal */ this.m_nodeB = new ContactEdge(this); - /** @internal */ this.m_fixtureA = null; - /** @internal */ this.m_fixtureB = null; - /** @internal */ this.m_indexA = -1; - /** @internal */ this.m_indexB = -1; - /** @internal */ this.m_evaluateFcn = null; - /** @internal */ this.m_manifold = new Manifold(); - /** @internal */ this.m_prev = null; - /** @internal */ this.m_next = null; - /** @internal */ this.m_toi = 1.0; - /** @internal */ this.m_toiCount = 0; - // This contact has a valid TOI in m_toi - /** @internal */ this.m_toiFlag = false; - /** @internal */ this.m_friction = 0.0; - /** @internal */ this.m_restitution = 0.0; - /** @internal */ this.m_tangentSpeed = 0.0; - /** @internal This contact can be disabled (by user) */ - this.m_enabledFlag = true; - /** @internal Used when crawling contact graph when forming islands. */ - this.m_islandFlag = false; - /** @internal Set when the shapes are touching. */ - this.m_touchingFlag = false; - /** @internal This contact needs filtering because a fixture filter was changed. */ - this.m_filterFlag = false; - /** @internal This bullet contact had a TOI event */ - this.m_bulletHitFlag = false; - /** @internal Contact reporting impulse object cache */ - this.m_impulse = new ContactImpulse(this); - // VelocityConstraint - /** @internal */ this.v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; // [maxManifoldPoints]; - /** @internal */ this.v_normal = vec2(0, 0); - /** @internal */ this.v_normalMass = new Mat22(); - /** @internal */ this.v_K = new Mat22(); - /** @internal */ this.v_pointCount = 0; - /** @internal */ this.v_tangentSpeed = 0; - /** @internal */ this.v_friction = 0; - /** @internal */ this.v_restitution = 0; - /** @internal */ this.v_invMassA = 0; - /** @internal */ this.v_invMassB = 0; - /** @internal */ this.v_invIA = 0; - /** @internal */ this.v_invIB = 0; - // PositionConstraint - /** @internal */ this.p_localPoints = [vec2(0, 0), vec2(0, 0)]; // [maxManifoldPoints]; - /** @internal */ this.p_localNormal = vec2(0, 0); - /** @internal */ this.p_localPoint = vec2(0, 0); - /** @internal */ this.p_localCenterA = vec2(0, 0); - /** @internal */ this.p_localCenterB = vec2(0, 0); - /** @internal */ this.p_type = exports.ManifoldType.e_unset; - /** @internal */ this.p_radiusA = 0; - /** @internal */ this.p_radiusB = 0; - /** @internal */ this.p_pointCount = 0; - /** @internal */ this.p_invMassA = 0; - /** @internal */ this.p_invMassB = 0; - /** @internal */ this.p_invIA = 0; - /** @internal */ this.p_invIB = 0; - } - /** @internal */ - Contact.prototype.initialize = function (fA, indexA, fB, indexB, evaluateFcn) { - this.m_fixtureA = fA; - this.m_fixtureB = fB; - this.m_indexA = indexA; - this.m_indexB = indexB; - this.m_evaluateFcn = evaluateFcn; - this.m_friction = mixFriction(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction); - this.m_restitution = mixRestitution(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution); - }; - /** @internal */ - Contact.prototype.recycle = function () { - this.m_nodeA.recycle(); - this.m_nodeB.recycle(); - this.m_fixtureA = null; - this.m_fixtureB = null; - this.m_indexA = -1; - this.m_indexB = -1; - this.m_evaluateFcn = null; - this.m_manifold.recycle(); - this.m_prev = null; - this.m_next = null; - this.m_toi = 1; - this.m_toiCount = 0; - this.m_toiFlag = false; - this.m_friction = 0; - this.m_restitution = 0; - this.m_tangentSpeed = 0; - this.m_enabledFlag = true; - this.m_islandFlag = false; - this.m_touchingFlag = false; - this.m_filterFlag = false; - this.m_bulletHitFlag = false; - this.m_impulse.recycle(); - // VelocityConstraint - for (var _i = 0, _a = this.v_points; _i < _a.length; _i++) { - var point_1 = _a[_i]; - point_1.recycle(); - } - zeroVec2(this.v_normal); - this.v_normalMass.setZero(); - this.v_K.setZero(); - this.v_pointCount = 0; - this.v_tangentSpeed = 0; - this.v_friction = 0; - this.v_restitution = 0; - this.v_invMassA = 0; - this.v_invMassB = 0; - this.v_invIA = 0; - this.v_invIB = 0; - // PositionConstraint - for (var _b = 0, _c = this.p_localPoints; _b < _c.length; _b++) { - var point_2 = _c[_b]; - zeroVec2(point_2); - } - zeroVec2(this.p_localNormal); - zeroVec2(this.p_localPoint); - zeroVec2(this.p_localCenterA); - zeroVec2(this.p_localCenterB); - this.p_type = exports.ManifoldType.e_unset; - this.p_radiusA = 0; - this.p_radiusB = 0; - this.p_pointCount = 0; - this.p_invMassA = 0; - this.p_invMassB = 0; - this.p_invIA = 0; - this.p_invIB = 0; - }; - Contact.prototype.initConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var shapeA = fixtureA.m_shape; - var shapeB = fixtureB.m_shape; - if (shapeA === null || shapeB === null) - return; - var manifold = this.m_manifold; - var pointCount = manifold.pointCount; - this.v_invMassA = bodyA.m_invMass; - this.v_invMassB = bodyB.m_invMass; - this.v_invIA = bodyA.m_invI; - this.v_invIB = bodyB.m_invI; - this.v_friction = this.m_friction; - this.v_restitution = this.m_restitution; - this.v_tangentSpeed = this.m_tangentSpeed; - this.v_pointCount = pointCount; - this.v_K.setZero(); - this.v_normalMass.setZero(); - this.p_invMassA = bodyA.m_invMass; - this.p_invMassB = bodyB.m_invMass; - this.p_invIA = bodyA.m_invI; - this.p_invIB = bodyB.m_invI; - copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter); - copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter); - this.p_radiusA = shapeA.m_radius; - this.p_radiusB = shapeB.m_radius; - this.p_type = manifold.type; - copyVec2(this.p_localNormal, manifold.localNormal); - copyVec2(this.p_localPoint, manifold.localPoint); - this.p_pointCount = pointCount; - for (var j = 0; j < SettingsInternal.maxManifoldPoints; ++j) { - this.v_points[j].recycle(); - zeroVec2(this.p_localPoints[j]); - } - for (var j = 0; j < pointCount; ++j) { - var cp = manifold.points[j]; - var vcp = this.v_points[j]; - if (step.warmStarting) { - vcp.normalImpulse = step.dtRatio * cp.normalImpulse; - vcp.tangentImpulse = step.dtRatio * cp.tangentImpulse; - } - copyVec2(this.p_localPoints[j], cp.localPoint); - } - }; - /** - * Get the contact manifold. Do not modify the manifold unless you understand - * the internals of the library. - */ - Contact.prototype.getManifold = function () { - return this.m_manifold; - }; - /** - * Get the world manifold. - */ - Contact.prototype.getWorldManifold = function (worldManifold) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var shapeA = fixtureA.m_shape; - var shapeB = fixtureB.m_shape; - if (shapeA === null || shapeB === null) - return; - return this.m_manifold.getWorldManifold(worldManifold, bodyA.getTransform(), shapeA.m_radius, bodyB.getTransform(), shapeB.m_radius); - }; - /** - * Enable/disable this contact. This can be used inside the pre-solve contact - * listener. The contact is only disabled for the current time step (or sub-step - * in continuous collisions). - */ - Contact.prototype.setEnabled = function (flag) { - this.m_enabledFlag = !!flag; - }; - /** - * Has this contact been disabled? - */ - Contact.prototype.isEnabled = function () { - return this.m_enabledFlag; - }; - /** - * Is this contact touching? - */ - Contact.prototype.isTouching = function () { - return this.m_touchingFlag; - }; - /** - * Get the next contact in the world's contact list. - */ - Contact.prototype.getNext = function () { - return this.m_next; - }; - /** - * Get fixture A in this contact. - */ - Contact.prototype.getFixtureA = function () { - return this.m_fixtureA; - }; - /** - * Get fixture B in this contact. - */ - Contact.prototype.getFixtureB = function () { - return this.m_fixtureB; - }; - /** - * Get the child primitive index for fixture A. - */ - Contact.prototype.getChildIndexA = function () { - return this.m_indexA; - }; - /** - * Get the child primitive index for fixture B. - */ - Contact.prototype.getChildIndexB = function () { - return this.m_indexB; - }; - /** - * Flag this contact for filtering. Filtering will occur the next time step. - */ - Contact.prototype.flagForFiltering = function () { - this.m_filterFlag = true; - }; - /** - * Override the default friction mixture. You can call this in - * "pre-solve" callback. This value persists until set or reset. - */ - Contact.prototype.setFriction = function (friction) { - this.m_friction = friction; - }; - /** - * Get the friction. - */ - Contact.prototype.getFriction = function () { - return this.m_friction; - }; - /** - * Reset the friction mixture to the default value. - */ - Contact.prototype.resetFriction = function () { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction); - }; - /** - * Override the default restitution mixture. You can call this in - * "pre-solve" callback. The value persists until you set or reset. - */ - Contact.prototype.setRestitution = function (restitution) { - this.m_restitution = restitution; - }; - /** - * Get the restitution. - */ - Contact.prototype.getRestitution = function () { - return this.m_restitution; - }; - /** - * Reset the restitution to the default value. - */ - Contact.prototype.resetRestitution = function () { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution); - }; - /** - * Set the desired tangent speed for a conveyor belt behavior. In meters per - * second. - */ - Contact.prototype.setTangentSpeed = function (speed) { - this.m_tangentSpeed = speed; - }; - /** - * Get the desired tangent speed. In meters per second. - */ - Contact.prototype.getTangentSpeed = function () { - return this.m_tangentSpeed; - }; - /** - * Called by Update method, and implemented by subclasses. - */ - Contact.prototype.evaluate = function (manifold, xfA, xfB) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - this.m_evaluateFcn(manifold, xfA, fixtureA, this.m_indexA, xfB, fixtureB, this.m_indexB); - }; - /** - * Updates the contact manifold and touching status. - * - * Note: do not assume the fixture AABBs are overlapping or are valid. - * - * @param listener.beginContact - * @param listener.endContact - * @param listener.preSolve - */ - Contact.prototype.update = function (listener) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var shapeA = fixtureA.m_shape; - var shapeB = fixtureB.m_shape; - if (shapeA === null || shapeB === null) - return; - // Re-enable this contact. - this.m_enabledFlag = true; - var touching = false; - var wasTouching = this.m_touchingFlag; - var sensorA = fixtureA.m_isSensor; - var sensorB = fixtureB.m_isSensor; - var sensor = sensorA || sensorB; - var xfA = bodyA.m_xf; - var xfB = bodyB.m_xf; - // Is this contact a sensor? - if (sensor) { - touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB); - // Sensors don't generate manifolds. - this.m_manifold.pointCount = 0; - } - else { - oldManifold.recycle(); - oldManifold.set(this.m_manifold); - this.m_manifold.recycle(); - this.evaluate(this.m_manifold, xfA, xfB); - touching = this.m_manifold.pointCount > 0; - // Match old contact ids to new contact ids and copy the - // stored impulses to warm start the solver. - for (var i = 0; i < this.m_manifold.pointCount; ++i) { - var nmp = this.m_manifold.points[i]; - nmp.normalImpulse = 0.0; - nmp.tangentImpulse = 0.0; - for (var j = 0; j < oldManifold.pointCount; ++j) { - var omp = oldManifold.points[j]; - if (omp.id.key === nmp.id.key) { - nmp.normalImpulse = omp.normalImpulse; - nmp.tangentImpulse = omp.tangentImpulse; - break; - } - } - } - if (touching !== wasTouching) { - bodyA.setAwake(true); - bodyB.setAwake(true); - } - } - this.m_touchingFlag = touching; - var hasListener = typeof listener === "object" && listener !== null; - if (!wasTouching && touching && hasListener) { - listener.beginContact(this); - } - if (wasTouching && !touching && hasListener) { - listener.endContact(this); - } - if (!sensor && touching && hasListener && oldManifold) { - listener.preSolve(this, oldManifold); - } - }; - Contact.prototype.solvePositionConstraint = function (step) { - return this._solvePositionConstraint(step, null, null); - }; - Contact.prototype.solvePositionConstraintTOI = function (step, toiA, toiB) { - return this._solvePositionConstraint(step, toiA, toiB); - }; - Contact.prototype._solvePositionConstraint = function (step, toiA, toiB) { - var toi = toiA !== null && toiB !== null ? true : false; - var minSeparation = 0.0; - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return minSeparation; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return minSeparation; - bodyA.c_velocity; - bodyB.c_velocity; - var positionA = bodyA.c_position; - var positionB = bodyB.c_position; - var localCenterA = this.p_localCenterA; - var localCenterB = this.p_localCenterB; - var mA = 0.0; - var iA = 0.0; - if (!toi || (bodyA === toiA || bodyA === toiB)) { - mA = this.p_invMassA; - iA = this.p_invIA; - } - var mB = 0.0; - var iB = 0.0; - if (!toi || (bodyB === toiA || bodyB === toiB)) { - mB = this.p_invMassB; - iB = this.p_invIB; - } - copyVec2(cA, positionA.c); - var aA = positionA.a; - copyVec2(cB, positionB.c); - var aB = positionB.a; - // Solve normal constraints - for (var j = 0; j < this.p_pointCount; ++j) { - getTransform(xfA, localCenterA, cA, aA); - getTransform(xfB, localCenterB, cB, aB); - // PositionSolverManifold - var separation = void 0; - switch (this.p_type) { - case exports.ManifoldType.e_circles: { - transformVec2(pointA, xfA, this.p_localPoint); - transformVec2(pointB, xfB, this.p_localPoints[0]); - subVec2(normal$2, pointB, pointA); - normalizeVec2(normal$2); - combine2Vec2(point, 0.5, pointA, 0.5, pointB); - separation = dotVec2(pointB, normal$2) - dotVec2(pointA, normal$2) - this.p_radiusA - this.p_radiusB; - break; - } - case exports.ManifoldType.e_faceA: { - rotVec2(normal$2, xfA.q, this.p_localNormal); - transformVec2(planePoint$1, xfA, this.p_localPoint); - transformVec2(clipPoint, xfB, this.p_localPoints[j]); - separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; - copyVec2(point, clipPoint); - break; - } - case exports.ManifoldType.e_faceB: { - rotVec2(normal$2, xfB.q, this.p_localNormal); - transformVec2(planePoint$1, xfB, this.p_localPoint); - transformVec2(clipPoint, xfA, this.p_localPoints[j]); - separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; - copyVec2(point, clipPoint); - // Ensure normal points from A to B - negVec2(normal$2); - break; - } - // todo: what should we do here? - default: { - return minSeparation; - } - } - subVec2(rA, point, cA); - subVec2(rB, point, cB); - // Track max constraint error. - minSeparation = math_min$4(minSeparation, separation); - var baumgarte = toi ? SettingsInternal.toiBaugarte : SettingsInternal.baumgarte; - var linearSlop = SettingsInternal.linearSlop; - var maxLinearCorrection = SettingsInternal.maxLinearCorrection; - // Prevent large corrections and allow slop. - var C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0.0); - // Compute the effective mass. - var rnA = crossVec2Vec2(rA, normal$2); - var rnB = crossVec2Vec2(rB, normal$2); - var K = mA + mB + iA * rnA * rnA + iB * rnB * rnB; - // Compute normal impulse - var impulse = K > 0.0 ? -C / K : 0.0; - scaleVec2(P$1, impulse, normal$2); - minusScaleVec2(cA, mA, P$1); - aA -= iA * crossVec2Vec2(rA, P$1); - plusScaleVec2(cB, mB, P$1); - aB += iB * crossVec2Vec2(rB, P$1); - } - copyVec2(positionA.c, cA); - positionA.a = aA; - copyVec2(positionB.c, cB); - positionB.a = aB; - return minSeparation; - }; - Contact.prototype.initVelocityConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var velocityA = bodyA.c_velocity; - var velocityB = bodyB.c_velocity; - var positionA = bodyA.c_position; - var positionB = bodyB.c_position; - var radiusA = this.p_radiusA; - var radiusB = this.p_radiusB; - var manifold = this.m_manifold; - var mA = this.v_invMassA; - var mB = this.v_invMassB; - var iA = this.v_invIA; - var iB = this.v_invIB; - var localCenterA = this.p_localCenterA; - var localCenterB = this.p_localCenterB; - copyVec2(cA, positionA.c); - var aA = positionA.a; - copyVec2(vA, velocityA.v); - var wA = velocityA.w; - copyVec2(cB, positionB.c); - var aB = positionB.a; - copyVec2(vB, velocityB.v); - var wB = velocityB.w; - getTransform(xfA, localCenterA, cA, aA); - getTransform(xfB, localCenterB, cB, aB); - worldManifold.recycle(); - manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB); - copyVec2(this.v_normal, worldManifold.normal); - for (var j = 0; j < this.v_pointCount; ++j) { - var vcp = this.v_points[j]; // VelocityConstraintPoint - var wmp = worldManifold.points[j]; - subVec2(vcp.rA, wmp, cA); - subVec2(vcp.rB, wmp, cB); - var rnA = crossVec2Vec2(vcp.rA, this.v_normal); - var rnB = crossVec2Vec2(vcp.rB, this.v_normal); - var kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB; - vcp.normalMass = kNormal > 0.0 ? 1.0 / kNormal : 0.0; - crossVec2Num(tangent$1, this.v_normal, 1.0); - var rtA = crossVec2Vec2(vcp.rA, tangent$1); - var rtB = crossVec2Vec2(vcp.rB, tangent$1); - var kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB; - vcp.tangentMass = kTangent > 0.0 ? 1.0 / kTangent : 0.0; - // Setup a velocity bias for restitution. - vcp.velocityBias = 0.0; - var vRel = 0; - vRel += dotVec2(this.v_normal, vB); - vRel += dotVec2(this.v_normal, crossNumVec2(temp$2, wB, vcp.rB)); - vRel -= dotVec2(this.v_normal, vA); - vRel -= dotVec2(this.v_normal, crossNumVec2(temp$2, wA, vcp.rA)); - if (vRel < -SettingsInternal.velocityThreshold) { - vcp.velocityBias = -this.v_restitution * vRel; - } - } - // If we have two points, then prepare the block solver. - if (this.v_pointCount == 2 && step.blockSolve) { - var vcp1 = this.v_points[0]; // VelocityConstraintPoint - var vcp2 = this.v_points[1]; // VelocityConstraintPoint - var rn1A = crossVec2Vec2(vcp1.rA, this.v_normal); - var rn1B = crossVec2Vec2(vcp1.rB, this.v_normal); - var rn2A = crossVec2Vec2(vcp2.rA, this.v_normal); - var rn2B = crossVec2Vec2(vcp2.rB, this.v_normal); - var k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B; - var k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B; - var k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B; - // Ensure a reasonable condition number. - var k_maxConditionNumber = 1000.0; - if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) { - // K is safe to invert. - this.v_K.ex.setNum(k11, k12); - this.v_K.ey.setNum(k12, k22); - // this.v_normalMass.set(this.v_K.getInverse()); - var a_1 = this.v_K.ex.x; - var b_1 = this.v_K.ey.x; - var c = this.v_K.ex.y; - var d_1 = this.v_K.ey.y; - var det = a_1 * d_1 - b_1 * c; - if (det !== 0.0) { - det = 1.0 / det; - } - this.v_normalMass.ex.x = det * d_1; - this.v_normalMass.ey.x = -det * b_1; - this.v_normalMass.ex.y = -det * c; - this.v_normalMass.ey.y = det * a_1; - } - else { - // The constraints are redundant, just use one. - // TODO_ERIN use deepest? - this.v_pointCount = 1; - } - } - copyVec2(positionA.c, cA); - positionA.a = aA; - copyVec2(velocityA.v, vA); - velocityA.w = wA; - copyVec2(positionB.c, cB); - positionB.a = aB; - copyVec2(velocityB.v, vB); - velocityB.w = wB; - }; - Contact.prototype.warmStartConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var velocityA = bodyA.c_velocity; - var velocityB = bodyB.c_velocity; - bodyA.c_position; - bodyB.c_position; - var mA = this.v_invMassA; - var iA = this.v_invIA; - var mB = this.v_invMassB; - var iB = this.v_invIB; - copyVec2(vA, velocityA.v); - var wA = velocityA.w; - copyVec2(vB, velocityB.v); - var wB = velocityB.w; - copyVec2(normal$2, this.v_normal); - crossVec2Num(tangent$1, normal$2, 1.0); - for (var j = 0; j < this.v_pointCount; ++j) { - var vcp = this.v_points[j]; // VelocityConstraintPoint - combine2Vec2(P$1, vcp.normalImpulse, normal$2, vcp.tangentImpulse, tangent$1); - wA -= iA * crossVec2Vec2(vcp.rA, P$1); - minusScaleVec2(vA, mA, P$1); - wB += iB * crossVec2Vec2(vcp.rB, P$1); - plusScaleVec2(vB, mB, P$1); - } - copyVec2(velocityA.v, vA); - velocityA.w = wA; - copyVec2(velocityB.v, vB); - velocityB.w = wB; - }; - Contact.prototype.storeConstraintImpulses = function (step) { - var manifold = this.m_manifold; - for (var j = 0; j < this.v_pointCount; ++j) { - manifold.points[j].normalImpulse = this.v_points[j].normalImpulse; - manifold.points[j].tangentImpulse = this.v_points[j].tangentImpulse; - } - }; - Contact.prototype.solveVelocityConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var velocityA = bodyA.c_velocity; - bodyA.c_position; - var velocityB = bodyB.c_velocity; - bodyB.c_position; - var mA = this.v_invMassA; - var iA = this.v_invIA; - var mB = this.v_invMassB; - var iB = this.v_invIB; - copyVec2(vA, velocityA.v); - var wA = velocityA.w; - copyVec2(vB, velocityB.v); - var wB = velocityB.w; - copyVec2(normal$2, this.v_normal); - crossVec2Num(tangent$1, normal$2, 1.0); - var friction = this.v_friction; - // Solve tangent constraints first because non-penetration is more important - // than friction. - for (var j = 0; j < this.v_pointCount; ++j) { - var vcp = this.v_points[j]; // VelocityConstraintPoint - // Relative velocity at contact - zeroVec2(dv); - plusVec2(dv, vB); - plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); - minusVec2(dv, vA); - minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); - // Compute tangent force - var vt = dotVec2(dv, tangent$1) - this.v_tangentSpeed; - var lambda = vcp.tangentMass * (-vt); - // Clamp the accumulated force - var maxFriction = friction * vcp.normalImpulse; - var newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction); - lambda = newImpulse - vcp.tangentImpulse; - vcp.tangentImpulse = newImpulse; - // Apply contact impulse - scaleVec2(P$1, lambda, tangent$1); - minusScaleVec2(vA, mA, P$1); - wA -= iA * crossVec2Vec2(vcp.rA, P$1); - plusScaleVec2(vB, mB, P$1); - wB += iB * crossVec2Vec2(vcp.rB, P$1); - } - // Solve normal constraints - if (this.v_pointCount == 1 || step.blockSolve == false) { - for (var i = 0; i < this.v_pointCount; ++i) { - var vcp = this.v_points[i]; // VelocityConstraintPoint - // Relative velocity at contact - zeroVec2(dv); - plusVec2(dv, vB); - plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); - minusVec2(dv, vA); - minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); - // Compute normal impulse - var vn = dotVec2(dv, normal$2); - var lambda = -vcp.normalMass * (vn - vcp.velocityBias); - // Clamp the accumulated impulse - var newImpulse = math_max$2(vcp.normalImpulse + lambda, 0.0); - lambda = newImpulse - vcp.normalImpulse; - vcp.normalImpulse = newImpulse; - // Apply contact impulse - scaleVec2(P$1, lambda, normal$2); - minusScaleVec2(vA, mA, P$1); - wA -= iA * crossVec2Vec2(vcp.rA, P$1); - plusScaleVec2(vB, mB, P$1); - wB += iB * crossVec2Vec2(vcp.rB, P$1); - } - } - else { - // Block solver developed in collaboration with Dirk Gregorius (back in - // 01/07 on Box2D_Lite). - // Build the mini LCP for this contact patch - // - // vn = A * x + b, vn >= 0, x >= 0 and vn_i * x_i = 0 with i = 1..2 - // - // A = J * W * JT and J = ( -n, -r1 x n, n, r2 x n ) - // b = vn0 - velocityBias - // - // The system is solved using the "Total enumeration method" (s. Murty). - // The complementary constraint vn_i * x_i - // implies that we must have in any solution either vn_i = 0 or x_i = 0. - // So for the 2D contact problem the cases - // vn1 = 0 and vn2 = 0, x1 = 0 and x2 = 0, x1 = 0 and vn2 = 0, x2 = 0 and - // vn1 = 0 need to be tested. The first valid - // solution that satisfies the problem is chosen. - // - // In order to account of the accumulated impulse 'a' (because of the - // iterative nature of the solver which only requires - // that the accumulated impulse is clamped and not the incremental - // impulse) we change the impulse variable (x_i). - // - // Substitute: - // - // x = a + d - // - // a := old total impulse - // x := new total impulse - // d := incremental impulse - // - // For the current iteration we extend the formula for the incremental - // impulse - // to compute the new total impulse: - // - // vn = A * d + b - // = A * (x - a) + b - // = A * x + b - A * a - // = A * x + b' - // b' = b - A * a; - var vcp1 = this.v_points[0]; // VelocityConstraintPoint - var vcp2 = this.v_points[1]; // VelocityConstraintPoint - setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse); - // Relative velocity at contact - // let dv1 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp1.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp1.rA)); - zeroVec2(dv1); - plusVec2(dv1, vB); - plusVec2(dv1, crossNumVec2(temp$2, wB, vcp1.rB)); - minusVec2(dv1, vA); - minusVec2(dv1, crossNumVec2(temp$2, wA, vcp1.rA)); - // let dv2 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp2.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp2.rA)); - zeroVec2(dv2); - plusVec2(dv2, vB); - plusVec2(dv2, crossNumVec2(temp$2, wB, vcp2.rB)); - minusVec2(dv2, vA); - minusVec2(dv2, crossNumVec2(temp$2, wA, vcp2.rA)); - // Compute normal velocity - var vn1 = dotVec2(dv1, normal$2); - var vn2 = dotVec2(dv2, normal$2); - setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias); - // Compute b' - // b.sub(Mat22.mulVec2(this.v_K, a)); - b.x -= this.v_K.ex.x * a.x + this.v_K.ey.x * a.y; - b.y -= this.v_K.ex.y * a.x + this.v_K.ey.y * a.y; - // NOT_USED(k_errorTol); - while (true) { - // - // Case 1: vn = 0 - // - // 0 = A * x + b' - // - // Solve for x: - // - // x = - inv(A) * b' - // - // const x = Mat22.mulVec2(this.v_normalMass, b).neg(); - zeroVec2(x); - x.x = -(this.v_normalMass.ex.x * b.x + this.v_normalMass.ey.x * b.y); - x.y = -(this.v_normalMass.ex.y * b.x + this.v_normalMass.ey.y * b.y); - if (x.x >= 0.0 && x.y >= 0.0) { - // Get the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // - // Case 2: vn1 = 0 and x2 = 0 - // - // 0 = a11 * x1 + a12 * 0 + b1' - // vn2 = a21 * x1 + a22 * 0 + b2' - // - x.x = -vcp1.normalMass * b.x; - x.y = 0.0; - vn1 = 0.0; - vn2 = this.v_K.ex.y * x.x + b.y; - if (x.x >= 0.0 && vn2 >= 0.0) { - // Get the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // - // Case 3: vn2 = 0 and x1 = 0 - // - // vn1 = a11 * 0 + a12 * x2 + b1' - // 0 = a21 * 0 + a22 * x2 + b2' - // - x.x = 0.0; - x.y = -vcp2.normalMass * b.y; - vn1 = this.v_K.ey.x * x.y + b.x; - vn2 = 0.0; - if (x.y >= 0.0 && vn1 >= 0.0) { - // Resubstitute for the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // - // Case 4: x1 = 0 and x2 = 0 - // - // vn1 = b1 - // vn2 = b2; - // - x.x = 0.0; - x.y = 0.0; - vn1 = b.x; - vn2 = b.y; - if (vn1 >= 0.0 && vn2 >= 0.0) { - // Resubstitute for the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // No solution, give up. This is hit sometimes, but it doesn't seem to - // matter. - break; - } - } - copyVec2(velocityA.v, vA); - velocityA.w = wA; - copyVec2(velocityB.v, vB); - velocityB.w = wB; - }; - /** @internal */ - Contact.addType = function (type1, type2, callback) { - s_registers[type1] = s_registers[type1] || {}; - s_registers[type1][type2] = callback; - }; - /** @internal */ - Contact.create = function (fixtureA, indexA, fixtureB, indexB) { - var typeA = fixtureA.m_shape.m_type; - var typeB = fixtureB.m_shape.m_type; - var contact = contactPool.allocate(); - var evaluateFcn; - if (evaluateFcn = s_registers[typeA] && s_registers[typeA][typeB]) { - contact.initialize(fixtureA, indexA, fixtureB, indexB, evaluateFcn); - } - else if (evaluateFcn = s_registers[typeB] && s_registers[typeB][typeA]) { - contact.initialize(fixtureB, indexB, fixtureA, indexA, evaluateFcn); - } - else { - return null; - } - // Contact creation may swap fixtures. - fixtureA = contact.m_fixtureA; - fixtureB = contact.m_fixtureB; - indexA = contact.getChildIndexA(); - indexB = contact.getChildIndexB(); - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - // Connect to body A - contact.m_nodeA.contact = contact; - contact.m_nodeA.other = bodyB; - contact.m_nodeA.prev = null; - contact.m_nodeA.next = bodyA.m_contactList; - if (bodyA.m_contactList != null) { - bodyA.m_contactList.prev = contact.m_nodeA; - } - bodyA.m_contactList = contact.m_nodeA; - // Connect to body B - contact.m_nodeB.contact = contact; - contact.m_nodeB.other = bodyA; - contact.m_nodeB.prev = null; - contact.m_nodeB.next = bodyB.m_contactList; - if (bodyB.m_contactList != null) { - bodyB.m_contactList.prev = contact.m_nodeB; - } - bodyB.m_contactList = contact.m_nodeB; - // Wake up the bodies - if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) { - bodyA.setAwake(true); - bodyB.setAwake(true); - } - return contact; - }; - /** @internal */ - Contact.destroy = function (contact, listener) { - var fixtureA = contact.m_fixtureA; - var fixtureB = contact.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - if (contact.isTouching()) { - listener.endContact(contact); - } - // Remove from body 1 - if (contact.m_nodeA.prev) { - contact.m_nodeA.prev.next = contact.m_nodeA.next; - } - if (contact.m_nodeA.next) { - contact.m_nodeA.next.prev = contact.m_nodeA.prev; - } - if (contact.m_nodeA == bodyA.m_contactList) { - bodyA.m_contactList = contact.m_nodeA.next; - } - // Remove from body 2 - if (contact.m_nodeB.prev) { - contact.m_nodeB.prev.next = contact.m_nodeB.next; - } - if (contact.m_nodeB.next) { - contact.m_nodeB.next.prev = contact.m_nodeB.prev; - } - if (contact.m_nodeB == bodyB.m_contactList) { - bodyB.m_contactList = contact.m_nodeB.next; - } - if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) { - bodyA.setAwake(true); - bodyB.setAwake(true); - } - // const typeA = fixtureA.getType(); - // const typeB = fixtureB.getType(); - // const destroyFcn = s_registers[typeA][typeB].destroyFcn; - // if (typeof destroyFcn === 'function') { - // destroyFcn(contact); - // } - contactPool.release(contact); - }; - return Contact; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var DEFAULTS$b = { - gravity: Vec2.zero(), - allowSleep: true, - warmStarting: true, - continuousPhysics: true, - subStepping: false, - blockSolve: true, - velocityIterations: 8, - positionIterations: 3 - }; - var World = /** @class */ (function () { - /** - * @param def World definition or gravity vector. - */ - function World(def) { - if (!(this instanceof World)) { - return new World(def); - } - this.s_step = new TimeStep(); - if (!def) { - def = {}; - } - else if (Vec2.isValid(def)) { - def = { gravity: def }; - } - def = options(def, DEFAULTS$b); - this.m_solver = new Solver(this); - this.m_broadPhase = new BroadPhase(); - this.m_contactList = null; - this.m_contactCount = 0; - this.m_bodyList = null; - this.m_bodyCount = 0; - this.m_jointList = null; - this.m_jointCount = 0; - this.m_stepComplete = true; - this.m_allowSleep = def.allowSleep; - this.m_gravity = Vec2.clone(def.gravity); - this.m_clearForces = true; - this.m_newFixture = false; - this.m_locked = false; - // These are for debugging the solver. - this.m_warmStarting = def.warmStarting; - this.m_continuousPhysics = def.continuousPhysics; - this.m_subStepping = def.subStepping; - this.m_blockSolve = def.blockSolve; - this.m_velocityIterations = def.velocityIterations; - this.m_positionIterations = def.positionIterations; - this.m_t = 0; - } - /** @internal */ - World.prototype._serialize = function () { - var bodies = []; - var joints = []; - for (var b = this.getBodyList(); b; b = b.getNext()) { - bodies.push(b); - } - for (var j = this.getJointList(); j; j = j.getNext()) { - // @ts-ignore - if (typeof j._serialize === "function") { - joints.push(j); - } - } - return { - gravity: this.m_gravity, - bodies: bodies, - joints: joints, - }; - }; - /** @internal */ - World._deserialize = function (data, context, restore) { - if (!data) { - return new World(); - } - var world = new World(data.gravity); - if (data.bodies) { - for (var i = data.bodies.length - 1; i >= 0; i -= 1) { - world._addBody(restore(Body, data.bodies[i], world)); - } - } - if (data.joints) { - for (var i = data.joints.length - 1; i >= 0; i--) { - world.createJoint(restore(Joint, data.joints[i], world)); - } - } - return world; - }; - /** - * Get the world body list. With the returned body, use Body.getNext to get the - * next body in the world list. A null body indicates the end of the list. - * - * @return the head of the world body list. - */ - World.prototype.getBodyList = function () { - return this.m_bodyList; - }; - /** - * Get the world joint list. With the returned joint, use Joint.getNext to get - * the next joint in the world list. A null joint indicates the end of the list. - * - * @return the head of the world joint list. - */ - World.prototype.getJointList = function () { - return this.m_jointList; - }; - /** - * Get the world contact list. With the returned contact, use Contact.getNext to - * get the next contact in the world list. A null contact indicates the end of - * the list. - * - * Warning: contacts are created and destroyed in the middle of a time step. - * Use ContactListener to avoid missing contacts. - * - * @return the head of the world contact list. - */ - World.prototype.getContactList = function () { - return this.m_contactList; - }; - World.prototype.getBodyCount = function () { - return this.m_bodyCount; - }; - World.prototype.getJointCount = function () { - return this.m_jointCount; - }; - /** - * Get the number of contacts (each may have 0 or more contact points). - */ - World.prototype.getContactCount = function () { - return this.m_contactCount; - }; - /** - * Change the global gravity vector. - */ - World.prototype.setGravity = function (gravity) { - this.m_gravity.set(gravity); - }; - /** - * Get the global gravity vector. - */ - World.prototype.getGravity = function () { - return this.m_gravity; - }; - /** - * Is the world locked (in the middle of a time step). - */ - World.prototype.isLocked = function () { - return this.m_locked; - }; - /** - * Enable/disable sleep. - */ - World.prototype.setAllowSleeping = function (flag) { - if (flag == this.m_allowSleep) { - return; - } - this.m_allowSleep = flag; - if (this.m_allowSleep == false) { - for (var b = this.m_bodyList; b; b = b.m_next) { - b.setAwake(true); - } - } - }; - World.prototype.getAllowSleeping = function () { - return this.m_allowSleep; - }; - /** - * Enable/disable warm starting. For testing. - */ - World.prototype.setWarmStarting = function (flag) { - this.m_warmStarting = flag; - }; - World.prototype.getWarmStarting = function () { - return this.m_warmStarting; - }; - /** - * Enable/disable continuous physics. For testing. - */ - World.prototype.setContinuousPhysics = function (flag) { - this.m_continuousPhysics = flag; - }; - World.prototype.getContinuousPhysics = function () { - return this.m_continuousPhysics; - }; - /** - * Enable/disable single stepped continuous physics. For testing. - */ - World.prototype.setSubStepping = function (flag) { - this.m_subStepping = flag; - }; - World.prototype.getSubStepping = function () { - return this.m_subStepping; - }; - /** - * Set flag to control automatic clearing of forces after each time step. - */ - World.prototype.setAutoClearForces = function (flag) { - this.m_clearForces = flag; - }; - /** - * Get the flag that controls automatic clearing of forces after each time step. - */ - World.prototype.getAutoClearForces = function () { - return this.m_clearForces; - }; - /** - * Manually clear the force buffer on all bodies. By default, forces are cleared - * automatically after each call to step. The default behavior is modified by - * calling setAutoClearForces. The purpose of this function is to support - * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step - * under a variable frame-rate. When you perform sub-stepping you will disable - * auto clearing of forces and instead call clearForces after all sub-steps are - * complete in one pass of your game loop. - * - * See {@link World.setAutoClearForces} - */ - World.prototype.clearForces = function () { - for (var body = this.m_bodyList; body; body = body.getNext()) { - body.m_force.setZero(); - body.m_torque = 0.0; - } - }; - /** - * Query the world for all fixtures that potentially overlap the provided AABB. - * - * @param aabb The query box. - * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query. - */ - World.prototype.queryAABB = function (aabb, callback) { - var broadPhase = this.m_broadPhase; - this.m_broadPhase.query(aabb, function (proxyId) { - var proxy = broadPhase.getUserData(proxyId); - return callback(proxy.fixture); - }); - }; - /** - * Ray-cast the world for all fixtures in the path of the ray. Your callback - * controls whether you get the closest point, any point, or n-points. The - * ray-cast ignores shapes that contain the starting point. - * - * @param point1 The ray starting point - * @param point2 The ray ending point - * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value. - */ - World.prototype.rayCast = function (point1, point2, callback) { - var broadPhase = this.m_broadPhase; - this.m_broadPhase.rayCast({ - maxFraction: 1.0, - p1: point1, - p2: point2 - }, function (input, proxyId) { - var proxy = broadPhase.getUserData(proxyId); - var fixture = proxy.fixture; - var index = proxy.childIndex; - // @ts-ignore - var output = {}; // TODO GC - var hit = fixture.rayCast(output, input, index); - if (hit) { - var fraction = output.fraction; - var point = Vec2.add(Vec2.mulNumVec2((1.0 - fraction), input.p1), Vec2.mulNumVec2(fraction, input.p2)); - return callback(fixture, point, output.normal, fraction); - } - return input.maxFraction; - }); - }; - /** - * Get the number of broad-phase proxies. - */ - World.prototype.getProxyCount = function () { - return this.m_broadPhase.getProxyCount(); - }; - /** - * Get the height of broad-phase dynamic tree. - */ - World.prototype.getTreeHeight = function () { - return this.m_broadPhase.getTreeHeight(); - }; - /** - * Get the balance of broad-phase dynamic tree. - */ - World.prototype.getTreeBalance = function () { - return this.m_broadPhase.getTreeBalance(); - }; - /** - * Get the quality metric of broad-phase dynamic tree. The smaller the better. - * The minimum is 1. - */ - World.prototype.getTreeQuality = function () { - return this.m_broadPhase.getTreeQuality(); - }; - /** - * Shift the world origin. Useful for large worlds. The body shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - World.prototype.shiftOrigin = function (newOrigin) { - if (this.m_locked) { - return; - } - for (var b = this.m_bodyList; b; b = b.m_next) { - b.m_xf.p.sub(newOrigin); - b.m_sweep.c0.sub(newOrigin); - b.m_sweep.c.sub(newOrigin); - } - for (var j = this.m_jointList; j; j = j.m_next) { - j.shiftOrigin(newOrigin); - } - this.m_broadPhase.shiftOrigin(newOrigin); - }; - /** @internal Used for deserialize. */ - World.prototype._addBody = function (body) { - if (this.isLocked()) { - return; - } - // Add to world doubly linked list. - body.m_prev = null; - body.m_next = this.m_bodyList; - if (this.m_bodyList) { - this.m_bodyList.m_prev = body; - } - this.m_bodyList = body; - ++this.m_bodyCount; - }; - // tslint:disable-next-line:typedef - World.prototype.createBody = function (arg1, arg2) { - if (this.isLocked()) { - return null; - } - var def = {}; - if (!arg1) ; - else if (Vec2.isValid(arg1)) { - def = { position: arg1, angle: arg2 }; - } - else if (typeof arg1 === "object") { - def = arg1; - } - var body = new Body(this, def); - this._addBody(body); - return body; - }; - // tslint:disable-next-line:typedef - World.prototype.createDynamicBody = function (arg1, arg2) { - var def = {}; - if (!arg1) ; - else if (Vec2.isValid(arg1)) { - def = { position: arg1, angle: arg2 }; - } - else if (typeof arg1 === "object") { - def = arg1; - } - def.type = "dynamic"; - return this.createBody(def); - }; - // tslint:disable-next-line:typedef - World.prototype.createKinematicBody = function (arg1, arg2) { - var def = {}; - if (!arg1) ; - else if (Vec2.isValid(arg1)) { - def = { position: arg1, angle: arg2 }; - } - else if (typeof arg1 === "object") { - def = arg1; - } - def.type = "kinematic"; - return this.createBody(def); - }; - /** - * Destroy a rigid body given a definition. No reference to the definition is - * retained. - * - * Warning: This automatically deletes all associated shapes and joints. - * - * Warning: This function is locked during callbacks. - */ - World.prototype.destroyBody = function (b) { - if (this.isLocked()) { - return; - } - if (b.m_destroyed) { - return false; - } - // Delete the attached joints. - var je = b.m_jointList; - while (je) { - var je0 = je; - je = je.next; - this.publish("remove-joint", je0.joint); - this.destroyJoint(je0.joint); - b.m_jointList = je; - } - b.m_jointList = null; - // Delete the attached contacts. - var ce = b.m_contactList; - while (ce) { - var ce0 = ce; - ce = ce.next; - this.destroyContact(ce0.contact); - b.m_contactList = ce; - } - b.m_contactList = null; - // Delete the attached fixtures. This destroys broad-phase proxies. - var f = b.m_fixtureList; - while (f) { - var f0 = f; - f = f.m_next; - this.publish("remove-fixture", f0); - f0.destroyProxies(this.m_broadPhase); - b.m_fixtureList = f; - } - b.m_fixtureList = null; - // Remove world body list. - if (b.m_prev) { - b.m_prev.m_next = b.m_next; - } - if (b.m_next) { - b.m_next.m_prev = b.m_prev; - } - if (b == this.m_bodyList) { - this.m_bodyList = b.m_next; - } - b.m_destroyed = true; - --this.m_bodyCount; - this.publish("remove-body", b); - return true; - }; - /** - * Create a joint to constrain bodies together. No reference to the definition - * is retained. This may cause the connected bodies to cease colliding. - * - * Warning: This function is locked during callbacks. - */ - World.prototype.createJoint = function (joint) { - if (this.isLocked()) { - return null; - } - // Connect to the world list. - joint.m_prev = null; - joint.m_next = this.m_jointList; - if (this.m_jointList) { - this.m_jointList.m_prev = joint; - } - this.m_jointList = joint; - ++this.m_jointCount; - // Connect to the bodies' doubly linked lists. - joint.m_edgeA.joint = joint; - joint.m_edgeA.other = joint.m_bodyB; - joint.m_edgeA.prev = null; - joint.m_edgeA.next = joint.m_bodyA.m_jointList; - if (joint.m_bodyA.m_jointList) - joint.m_bodyA.m_jointList.prev = joint.m_edgeA; - joint.m_bodyA.m_jointList = joint.m_edgeA; - joint.m_edgeB.joint = joint; - joint.m_edgeB.other = joint.m_bodyA; - joint.m_edgeB.prev = null; - joint.m_edgeB.next = joint.m_bodyB.m_jointList; - if (joint.m_bodyB.m_jointList) - joint.m_bodyB.m_jointList.prev = joint.m_edgeB; - joint.m_bodyB.m_jointList = joint.m_edgeB; - // If the joint prevents collisions, then flag any contacts for filtering. - if (joint.m_collideConnected == false) { - for (var edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) { - if (edge.other == joint.m_bodyA) { - // Flag the contact for filtering at the next time step (where either - // body is awake). - edge.contact.flagForFiltering(); - } - } - } - // Note: creating a joint doesn't wake the bodies. - return joint; - }; - /** - * Destroy a joint. This may cause the connected bodies to begin colliding. - * Warning: This function is locked during callbacks. - */ - World.prototype.destroyJoint = function (joint) { - if (this.isLocked()) { - return; - } - // Remove from the doubly linked list. - if (joint.m_prev) { - joint.m_prev.m_next = joint.m_next; - } - if (joint.m_next) { - joint.m_next.m_prev = joint.m_prev; - } - if (joint == this.m_jointList) { - this.m_jointList = joint.m_next; - } - // Disconnect from bodies. - var bodyA = joint.m_bodyA; - var bodyB = joint.m_bodyB; - // Wake up connected bodies. - bodyA.setAwake(true); - bodyB.setAwake(true); - // Remove from body 1. - if (joint.m_edgeA.prev) { - joint.m_edgeA.prev.next = joint.m_edgeA.next; - } - if (joint.m_edgeA.next) { - joint.m_edgeA.next.prev = joint.m_edgeA.prev; - } - if (joint.m_edgeA == bodyA.m_jointList) { - bodyA.m_jointList = joint.m_edgeA.next; - } - joint.m_edgeA.prev = null; - joint.m_edgeA.next = null; - // Remove from body 2 - if (joint.m_edgeB.prev) { - joint.m_edgeB.prev.next = joint.m_edgeB.next; - } - if (joint.m_edgeB.next) { - joint.m_edgeB.next.prev = joint.m_edgeB.prev; - } - if (joint.m_edgeB == bodyB.m_jointList) { - bodyB.m_jointList = joint.m_edgeB.next; - } - joint.m_edgeB.prev = null; - joint.m_edgeB.next = null; - --this.m_jointCount; - // If the joint prevents collisions, then flag any contacts for filtering. - if (joint.m_collideConnected == false) { - var edge = bodyB.getContactList(); - while (edge) { - if (edge.other == bodyA) { - // Flag the contact for filtering at the next time step (where either - // body is awake). - edge.contact.flagForFiltering(); - } - edge = edge.next; - } - } - this.publish("remove-joint", joint); - }; - /** - * Take a time step. This performs collision detection, integration, and - * constraint solution. - * - * Broad-phase, narrow-phase, solve and solve time of impacts. - * - * @param timeStep Time step, this should not vary. - */ - World.prototype.step = function (timeStep, velocityIterations, positionIterations) { - this.publish("pre-step", timeStep); - if ((velocityIterations | 0) !== velocityIterations) { - // TODO: remove this in future - velocityIterations = 0; - } - velocityIterations = velocityIterations || this.m_velocityIterations; - positionIterations = positionIterations || this.m_positionIterations; - // If new fixtures were added, we need to find the new contacts. - if (this.m_newFixture) { - this.findNewContacts(); - this.m_newFixture = false; - } - this.m_locked = true; - this.s_step.reset(timeStep); - this.s_step.velocityIterations = velocityIterations; - this.s_step.positionIterations = positionIterations; - this.s_step.warmStarting = this.m_warmStarting; - this.s_step.blockSolve = this.m_blockSolve; - // Update contacts. This is where some contacts are destroyed. - this.updateContacts(); - // Integrate velocities, solve velocity constraints, and integrate positions. - if (this.m_stepComplete && timeStep > 0.0) { - this.m_solver.solveWorld(this.s_step); - // Synchronize fixtures, check for out of range bodies. - for (var b = this.m_bodyList; b; b = b.getNext()) { - // If a body was not in an island then it did not move. - if (b.m_islandFlag == false) { - continue; - } - if (b.isStatic()) { - continue; - } - // Update fixtures (for broad-phase). - b.synchronizeFixtures(); - } - // Look for new contacts. - this.findNewContacts(); - } - // Handle TOI events. - if (this.m_continuousPhysics && timeStep > 0.0) { - this.m_solver.solveWorldTOI(this.s_step); - } - if (this.m_clearForces) { - this.clearForces(); - } - this.m_locked = false; - this.publish("post-step", timeStep); - }; - /** - * @internal - * Call this method to find new contacts. - */ - World.prototype.findNewContacts = function () { - var _this = this; - this.m_broadPhase.updatePairs(function (proxyA, proxyB) { return _this.createContact(proxyA, proxyB); }); - }; - /** - * @internal - * Callback for broad-phase. - */ - World.prototype.createContact = function (proxyA, proxyB) { - var fixtureA = proxyA.fixture; - var fixtureB = proxyB.fixture; - var indexA = proxyA.childIndex; - var indexB = proxyB.childIndex; - var bodyA = fixtureA.getBody(); - var bodyB = fixtureB.getBody(); - // Are the fixtures on the same body? - if (bodyA == bodyB) { - return; - } - // TODO_ERIN use a hash table to remove a potential bottleneck when both - // bodies have a lot of contacts. - // Does a contact already exist? - var edge = bodyB.getContactList(); // ContactEdge - while (edge) { - if (edge.other == bodyA) { - var fA = edge.contact.getFixtureA(); - var fB = edge.contact.getFixtureB(); - var iA = edge.contact.getChildIndexA(); - var iB = edge.contact.getChildIndexB(); - if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) { - // A contact already exists. - return; - } - if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) { - // A contact already exists. - return; - } - } - edge = edge.next; - } - if (bodyB.shouldCollide(bodyA) == false) { - return; - } - if (fixtureB.shouldCollide(fixtureA) == false) { - return; - } - // Call the factory. - var contact = Contact.create(fixtureA, indexA, fixtureB, indexB); - if (contact == null) { - return; - } - // Insert into the world. - contact.m_prev = null; - if (this.m_contactList != null) { - contact.m_next = this.m_contactList; - this.m_contactList.m_prev = contact; - } - this.m_contactList = contact; - ++this.m_contactCount; - }; - /** - * @internal - * Removes old non-overlapping contacts, applies filters and updates contacts. - */ - World.prototype.updateContacts = function () { - // Update awake contacts. - var c; - var next_c = this.m_contactList; - while (c = next_c) { - next_c = c.getNext(); - var fixtureA = c.getFixtureA(); - var fixtureB = c.getFixtureB(); - var indexA = c.getChildIndexA(); - var indexB = c.getChildIndexB(); - var bodyA = fixtureA.getBody(); - var bodyB = fixtureB.getBody(); - // Is this contact flagged for filtering? - if (c.m_filterFlag) { - if (bodyB.shouldCollide(bodyA) == false) { - this.destroyContact(c); - continue; - } - if (fixtureB.shouldCollide(fixtureA) == false) { - this.destroyContact(c); - continue; - } - // Clear the filtering flag. - c.m_filterFlag = false; - } - var activeA = bodyA.isAwake() && !bodyA.isStatic(); - var activeB = bodyB.isAwake() && !bodyB.isStatic(); - // At least one body must be awake and it must be dynamic or kinematic. - if (activeA == false && activeB == false) { - continue; - } - var proxyIdA = fixtureA.m_proxies[indexA].proxyId; - var proxyIdB = fixtureB.m_proxies[indexB].proxyId; - var overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB); - // Here we destroy contacts that cease to overlap in the broad-phase. - if (overlap == false) { - this.destroyContact(c); - continue; - } - // The contact persists. - c.update(this); - } - }; - /** @internal */ - World.prototype.destroyContact = function (contact) { - // Remove from the world. - if (contact.m_prev) { - contact.m_prev.m_next = contact.m_next; - } - if (contact.m_next) { - contact.m_next.m_prev = contact.m_prev; - } - if (contact == this.m_contactList) { - this.m_contactList = contact.m_next; - } - Contact.destroy(contact, this); - --this.m_contactCount; - }; - /** - * Register an event listener. - */ - // tslint:disable-next-line:typedef - World.prototype.on = function (name, listener) { - if (typeof name !== "string" || typeof listener !== "function") { - return this; - } - if (!this._listeners) { - this._listeners = {}; - } - if (!this._listeners[name]) { - this._listeners[name] = []; - } - this._listeners[name].push(listener); - return this; - }; - /** - * Remove an event listener. - */ - // tslint:disable-next-line:typedef - World.prototype.off = function (name, listener) { - if (typeof name !== "string" || typeof listener !== "function") { - return this; - } - var listeners = this._listeners && this._listeners[name]; - if (!listeners || !listeners.length) { - return this; - } - var index = listeners.indexOf(listener); - if (index >= 0) { - listeners.splice(index, 1); - } - return this; - }; - World.prototype.publish = function (name, arg1, arg2, arg3) { - var listeners = this._listeners && this._listeners[name]; - if (!listeners || !listeners.length) { - return 0; - } - for (var l = 0; l < listeners.length; l++) { - listeners[l].call(this, arg1, arg2, arg3); - } - return listeners.length; - }; - /** @internal */ - World.prototype.beginContact = function (contact) { - this.publish("begin-contact", contact); - }; - /** @internal */ - World.prototype.endContact = function (contact) { - this.publish("end-contact", contact); - }; - /** @internal */ - World.prototype.preSolve = function (contact, oldManifold) { - this.publish("pre-solve", contact, oldManifold); - }; - /** @internal */ - World.prototype.postSolve = function (contact, impulse) { - this.publish("post-solve", contact, impulse); - }; - return World; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - var Vec3 = /** @class */ (function () { - function Vec3(x, y, z) { - if (!(this instanceof Vec3)) { - return new Vec3(x, y, z); - } - if (typeof x === "undefined") { - this.x = 0; - this.y = 0; - this.z = 0; - } - else if (typeof x === "object") { - this.x = x.x; - this.y = x.y; - this.z = x.z; - } - else { - this.x = x; - this.y = y; - this.z = z; - } - } - /** @internal */ - Vec3.prototype._serialize = function () { - return { - x: this.x, - y: this.y, - z: this.z - }; - }; - /** @internal */ - Vec3._deserialize = function (data) { - var obj = Object.create(Vec3.prototype); - obj.x = data.x; - obj.y = data.y; - obj.z = data.z; - return obj; - }; - /** @hidden */ - Vec3.neo = function (x, y, z) { - var obj = Object.create(Vec3.prototype); - obj.x = x; - obj.y = y; - obj.z = z; - return obj; - }; - Vec3.zero = function () { - var obj = Object.create(Vec3.prototype); - obj.x = 0; - obj.y = 0; - obj.z = 0; - return obj; - }; - Vec3.clone = function (v) { - return Vec3.neo(v.x, v.y, v.z); - }; - /** @hidden */ - Vec3.prototype.toString = function () { - return JSON.stringify(this); - }; - /** Does this vector contain finite coordinates? */ - Vec3.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Number.isFinite(obj.x) && Number.isFinite(obj.y) && Number.isFinite(obj.z); - }; - Vec3.assert = function (o) { - }; - Vec3.prototype.setZero = function () { - this.x = 0.0; - this.y = 0.0; - this.z = 0.0; - return this; - }; - Vec3.prototype.set = function (x, y, z) { - this.x = x; - this.y = y; - this.z = z; - return this; - }; - Vec3.prototype.add = function (w) { - this.x += w.x; - this.y += w.y; - this.z += w.z; - return this; - }; - Vec3.prototype.sub = function (w) { - this.x -= w.x; - this.y -= w.y; - this.z -= w.z; - return this; - }; - Vec3.prototype.mul = function (m) { - this.x *= m; - this.y *= m; - this.z *= m; - return this; - }; - Vec3.areEqual = function (v, w) { - return v === w || - typeof v === "object" && v !== null && - typeof w === "object" && w !== null && - v.x === w.x && v.y === w.y && v.z === w.z; - }; - /** Dot product on two vectors */ - Vec3.dot = function (v, w) { - return v.x * w.x + v.y * w.y + v.z * w.z; - }; - /** Cross product on two vectors */ - Vec3.cross = function (v, w) { - return new Vec3(v.y * w.z - v.z * w.y, v.z * w.x - v.x * w.z, v.x * w.y - v.y * w.x); - }; - Vec3.add = function (v, w) { - return new Vec3(v.x + w.x, v.y + w.y, v.z + w.z); - }; - Vec3.sub = function (v, w) { - return new Vec3(v.x - w.x, v.y - w.y, v.z - w.z); - }; - Vec3.mul = function (v, m) { - return new Vec3(m * v.x, m * v.y, m * v.z); - }; - Vec3.prototype.neg = function () { - this.x = -this.x; - this.y = -this.y; - this.z = -this.z; - return this; - }; - Vec3.neg = function (v) { - return new Vec3(-v.x, -v.y, -v.z); - }; - return Vec3; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var v1$2 = vec2(0, 0); - /** @internal */ var v2$1 = vec2(0, 0); - /** - * A line segment (edge) shape. These can be connected in chains or loops to - * other edge shapes. The connectivity information is used to ensure correct - * contact normals. - */ - var EdgeShape = /** @class */ (function (_super) { - __extends(EdgeShape, _super); - function EdgeShape(v1, v2) { - var _this = this; - // @ts-ignore - if (!(_this instanceof EdgeShape)) { - return new EdgeShape(v1, v2); - } - _this = _super.call(this) || this; - _this.m_type = EdgeShape.TYPE; - _this.m_radius = SettingsInternal.polygonRadius; - _this.m_vertex1 = v1 ? Vec2.clone(v1) : Vec2.zero(); - _this.m_vertex2 = v2 ? Vec2.clone(v2) : Vec2.zero(); - _this.m_vertex0 = Vec2.zero(); - _this.m_vertex3 = Vec2.zero(); - _this.m_hasVertex0 = false; - _this.m_hasVertex3 = false; - return _this; - } - /** @internal */ - EdgeShape.prototype._serialize = function () { - return { - type: this.m_type, - vertex1: this.m_vertex1, - vertex2: this.m_vertex2, - vertex0: this.m_vertex0, - vertex3: this.m_vertex3, - hasVertex0: this.m_hasVertex0, - hasVertex3: this.m_hasVertex3, - }; - }; - /** @internal */ - EdgeShape._deserialize = function (data) { - var shape = new EdgeShape(data.vertex1, data.vertex2); - if (shape.m_hasVertex0) { - shape.setPrevVertex(data.vertex0); - } - if (shape.m_hasVertex3) { - shape.setNextVertex(data.vertex3); - } - return shape; - }; - /** @hidden */ - EdgeShape.prototype._reset = function () { - // noop - }; - EdgeShape.prototype.getRadius = function () { - return this.m_radius; - }; - EdgeShape.prototype.getType = function () { - return this.m_type; - }; - /** @internal @deprecated */ - EdgeShape.prototype.setNext = function (v) { - return this.setNextVertex(v); - }; - /** - * Optional next vertex, used for smooth collision. - */ - EdgeShape.prototype.setNextVertex = function (v) { - if (v) { - this.m_vertex3.setVec2(v); - this.m_hasVertex3 = true; - } - else { - this.m_vertex3.setZero(); - this.m_hasVertex3 = false; - } - return this; - }; - /** - * Optional next vertex, used for smooth collision. - */ - EdgeShape.prototype.getNextVertex = function () { - return this.m_vertex3; - }; - /** @internal @deprecated */ - EdgeShape.prototype.setPrev = function (v) { - return this.setPrevVertex(v); - }; - /** - * Optional prev vertex, used for smooth collision. - */ - EdgeShape.prototype.setPrevVertex = function (v) { - if (v) { - this.m_vertex0.setVec2(v); - this.m_hasVertex0 = true; - } - else { - this.m_vertex0.setZero(); - this.m_hasVertex0 = false; - } - return this; - }; - /** - * Optional prev vertex, used for smooth collision. - */ - EdgeShape.prototype.getPrevVertex = function () { - return this.m_vertex0; - }; - /** - * Set this as an isolated edge. - */ - EdgeShape.prototype._set = function (v1, v2) { - this.m_vertex1.setVec2(v1); - this.m_vertex2.setVec2(v2); - this.m_hasVertex0 = false; - this.m_hasVertex3 = false; - return this; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - EdgeShape.prototype._clone = function () { - var clone = new EdgeShape(); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_vertex1.setVec2(this.m_vertex1); - clone.m_vertex2.setVec2(this.m_vertex2); - clone.m_vertex0.setVec2(this.m_vertex0); - clone.m_vertex3.setVec2(this.m_vertex3); - clone.m_hasVertex0 = this.m_hasVertex0; - clone.m_hasVertex3 = this.m_hasVertex3; - return clone; - }; - /** - * Get the number of child primitives. - */ - EdgeShape.prototype.getChildCount = function () { - return 1; - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - EdgeShape.prototype.testPoint = function (xf, p) { - return false; - }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - EdgeShape.prototype.rayCast = function (output, input, xf, childIndex) { - // p = p1 + t * d - // v = v1 + s * e - // p1 + t * d = v1 + s * e - // s * e - t * d = p1 - v1 - // NOT_USED(childIndex); - // Put the ray into the edge's frame of reference. - var p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p)); - var p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p)); - var d = Vec2.sub(p2, p1); - var v1 = this.m_vertex1; - var v2 = this.m_vertex2; - var e = Vec2.sub(v2, v1); - var normal = Vec2.neo(e.y, -e.x); - normal.normalize(); - // q = p1 + t * d - // dot(normal, q - v1) = 0 - // dot(normal, p1 - v1) + t * dot(normal, d) = 0 - var numerator = Vec2.dot(normal, Vec2.sub(v1, p1)); - var denominator = Vec2.dot(normal, d); - if (denominator == 0.0) { - return false; - } - var t = numerator / denominator; - if (t < 0.0 || input.maxFraction < t) { - return false; - } - var q = Vec2.add(p1, Vec2.mulNumVec2(t, d)); - // q = v1 + s * r - // s = dot(q - v1, r) / dot(r, r) - var r = Vec2.sub(v2, v1); - var rr = Vec2.dot(r, r); - if (rr == 0.0) { - return false; - } - var s = Vec2.dot(Vec2.sub(q, v1), r) / rr; - if (s < 0.0 || 1.0 < s) { - return false; - } - output.fraction = t; - if (numerator > 0.0) { - output.normal = Rot.mulVec2(xf.q, normal).neg(); - } - else { - output.normal = Rot.mulVec2(xf.q, normal); - } - return true; - }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - EdgeShape.prototype.computeAABB = function (aabb, xf, childIndex) { - transformVec2(v1$2, xf, this.m_vertex1); - transformVec2(v2$1, xf, this.m_vertex2); - AABB.combinePoints(aabb, v1$2, v2$1); - AABB.extend(aabb, this.m_radius); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - EdgeShape.prototype.computeMass = function (massData, density) { - massData.mass = 0.0; - combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2); - massData.I = 0.0; - }; - EdgeShape.prototype.computeDistanceProxy = function (proxy) { - proxy.m_vertices[0] = this.m_vertex1; - proxy.m_vertices[1] = this.m_vertex2; - proxy.m_vertices.length = 2; - proxy.m_count = 2; - proxy.m_radius = this.m_radius; - }; - EdgeShape.TYPE = "edge"; - return EdgeShape; - }(Shape)); - var Edge = EdgeShape; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var v1$1 = vec2(0, 0); - /** @internal */ var v2 = vec2(0, 0); - /** - * A chain shape is a free form sequence of line segments. The chain has - * two-sided collision, so you can use inside and outside collision. Therefore, - * you may use any winding order. Connectivity information is used to create - * smooth collisions. - * - * WARNING: The chain will not collide properly if there are self-intersections. - */ - var ChainShape = /** @class */ (function (_super) { - __extends(ChainShape, _super); - function ChainShape(vertices, loop) { - var _this = this; - // @ts-ignore - if (!(_this instanceof ChainShape)) { - return new ChainShape(vertices, loop); - } - _this = _super.call(this) || this; - _this.m_type = ChainShape.TYPE; - _this.m_radius = SettingsInternal.polygonRadius; - _this.m_vertices = []; - _this.m_count = 0; - _this.m_prevVertex = null; - _this.m_nextVertex = null; - _this.m_hasPrevVertex = false; - _this.m_hasNextVertex = false; - _this.m_isLoop = !!loop; - if (vertices && vertices.length) { - if (loop) { - _this._createLoop(vertices); - } - else { - _this._createChain(vertices); - } - } - return _this; - } - /** @internal */ - ChainShape.prototype._serialize = function () { - var data = { - type: this.m_type, - vertices: this.m_vertices, - isLoop: this.m_isLoop, - hasPrevVertex: this.m_hasPrevVertex, - hasNextVertex: this.m_hasNextVertex, - prevVertex: null, - nextVertex: null, - }; - if (this.m_prevVertex) { - data.prevVertex = this.m_prevVertex; - } - if (this.m_nextVertex) { - data.nextVertex = this.m_nextVertex; - } - return data; - }; - /** @internal */ - ChainShape._deserialize = function (data, fixture, restore) { - var vertices = []; - if (data.vertices) { - for (var i = 0; i < data.vertices.length; i++) { - vertices.push(restore(Vec2, data.vertices[i])); - } - } - var shape = new ChainShape(vertices, data.isLoop); - if (data.prevVertex) { - shape.setPrevVertex(data.prevVertex); - } - if (data.nextVertex) { - shape.setNextVertex(data.nextVertex); - } - return shape; - }; - // clear() { - // this.m_vertices.length = 0; - // this.m_count = 0; - // } - ChainShape.prototype.getType = function () { - return this.m_type; - }; - ChainShape.prototype.getRadius = function () { - return this.m_radius; - }; - /** - * @internal - * Create a loop. This automatically adjusts connectivity. - * - * @param vertices an array of vertices, these are copied - * @param count the vertex count - */ - ChainShape.prototype._createLoop = function (vertices) { - if (vertices.length < 3) { - return; - } - for (var i = 1; i < vertices.length; ++i) { - vertices[i - 1]; - vertices[i]; - } - this.m_vertices = []; - this.m_count = vertices.length + 1; - for (var i = 0; i < vertices.length; ++i) { - this.m_vertices[i] = Vec2.clone(vertices[i]); - } - this.m_vertices[vertices.length] = Vec2.clone(vertices[0]); - this.m_prevVertex = this.m_vertices[this.m_count - 2]; - this.m_nextVertex = this.m_vertices[1]; - this.m_hasPrevVertex = true; - this.m_hasNextVertex = true; - return this; - }; - /** - * @internal - * Create a chain with isolated end vertices. - * - * @param vertices an array of vertices, these are copied - */ - ChainShape.prototype._createChain = function (vertices) { - for (var i = 1; i < vertices.length; ++i) { - // If the code crashes here, it means your vertices are too close together. - vertices[i - 1]; - vertices[i]; - } - this.m_count = vertices.length; - for (var i = 0; i < vertices.length; ++i) { - this.m_vertices[i] = Vec2.clone(vertices[i]); - } - this.m_hasPrevVertex = false; - this.m_hasNextVertex = false; - this.m_prevVertex = null; - this.m_nextVertex = null; - return this; - }; - /** @hidden */ - ChainShape.prototype._reset = function () { - if (this.m_isLoop) { - this._createLoop(this.m_vertices); - } - else { - this._createChain(this.m_vertices); - } - }; - /** - * Establish connectivity to a vertex that precedes the first vertex. Don't call - * this for loops. - */ - ChainShape.prototype.setPrevVertex = function (prevVertex) { - // todo: copy or reference - this.m_prevVertex = prevVertex; - this.m_hasPrevVertex = true; - }; - ChainShape.prototype.getPrevVertex = function () { - return this.m_prevVertex; - }; - /** - * Establish connectivity to a vertex that follows the last vertex. Don't call - * this for loops. - */ - ChainShape.prototype.setNextVertex = function (nextVertex) { - // todo: copy or reference - this.m_nextVertex = nextVertex; - this.m_hasNextVertex = true; - }; - ChainShape.prototype.getNextVertex = function () { - return this.m_nextVertex; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - ChainShape.prototype._clone = function () { - var clone = new ChainShape(); - clone._createChain(this.m_vertices); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_prevVertex = this.m_prevVertex; - clone.m_nextVertex = this.m_nextVertex; - clone.m_hasPrevVertex = this.m_hasPrevVertex; - clone.m_hasNextVertex = this.m_hasNextVertex; - return clone; - }; - /** - * Get the number of child primitives. - */ - ChainShape.prototype.getChildCount = function () { - // edge count = vertex count - 1 - return this.m_count - 1; - }; - // Get a child edge. - ChainShape.prototype.getChildEdge = function (edge, childIndex) { - edge.m_type = EdgeShape.TYPE; - edge.m_radius = this.m_radius; - edge.m_vertex1 = this.m_vertices[childIndex]; - edge.m_vertex2 = this.m_vertices[childIndex + 1]; - if (childIndex > 0) { - edge.m_vertex0 = this.m_vertices[childIndex - 1]; - edge.m_hasVertex0 = true; - } - else { - edge.m_vertex0 = this.m_prevVertex; - edge.m_hasVertex0 = this.m_hasPrevVertex; - } - if (childIndex < this.m_count - 2) { - edge.m_vertex3 = this.m_vertices[childIndex + 2]; - edge.m_hasVertex3 = true; - } - else { - edge.m_vertex3 = this.m_nextVertex; - edge.m_hasVertex3 = this.m_hasNextVertex; - } - }; - ChainShape.prototype.getVertex = function (index) { - if (index < this.m_count) { - return this.m_vertices[index]; - } - else { - return this.m_vertices[0]; - } - }; - ChainShape.prototype.isLoop = function () { - return this.m_isLoop; - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * This always return false. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - ChainShape.prototype.testPoint = function (xf, p) { - return false; - }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - ChainShape.prototype.rayCast = function (output, input, xf, childIndex) { - var edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1)); - return edgeShape.rayCast(output, input, xf, 0); - }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - ChainShape.prototype.computeAABB = function (aabb, xf, childIndex) { - transformVec2(v1$1, xf, this.getVertex(childIndex)); - transformVec2(v2, xf, this.getVertex(childIndex + 1)); - AABB.combinePoints(aabb, v1$1, v2); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * Chains have zero mass. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - ChainShape.prototype.computeMass = function (massData, density) { - massData.mass = 0.0; - zeroVec2(massData.center); - massData.I = 0.0; - }; - ChainShape.prototype.computeDistanceProxy = function (proxy, childIndex) { - proxy.m_vertices[0] = this.getVertex(childIndex); - proxy.m_vertices[1] = this.getVertex(childIndex + 1); - proxy.m_count = 2; - proxy.m_radius = this.m_radius; - }; - ChainShape.TYPE = "chain"; - return ChainShape; - }(Shape)); - var Chain = ChainShape; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_max$1 = Math.max; - /** @internal */ var math_min$3 = Math.min; - /** @internal */ var temp$1 = vec2(0, 0); - /** @internal */ var e$1 = vec2(0, 0); - /** @internal */ var e1$1 = vec2(0, 0); - /** @internal */ var e2$1 = vec2(0, 0); - /** @internal */ var center = vec2(0, 0); - /** @internal */ var s = vec2(0, 0); - /** - * A convex polygon. It is assumed that the interior of the polygon is to the - * left of each edge. Polygons have a maximum number of vertices equal to - * Settings.maxPolygonVertices. In most cases you should not need many vertices - * for a convex polygon. extends Shape - */ - var PolygonShape = /** @class */ (function (_super) { - __extends(PolygonShape, _super); - function PolygonShape(vertices) { - var _this = this; - // @ts-ignore - if (!(_this instanceof PolygonShape)) { - return new PolygonShape(vertices); - } - _this = _super.call(this) || this; - _this.m_type = PolygonShape.TYPE; - _this.m_radius = SettingsInternal.polygonRadius; - _this.m_centroid = Vec2.zero(); - _this.m_vertices = []; - _this.m_normals = []; - _this.m_count = 0; - if (vertices && vertices.length) { - _this._set(vertices); - } - return _this; - } - /** @internal */ - PolygonShape.prototype._serialize = function () { - return { - type: this.m_type, - vertices: this.m_vertices, - }; - }; - /** @internal */ - PolygonShape._deserialize = function (data, fixture, restore) { - var vertices = []; - if (data.vertices) { - for (var i = 0; i < data.vertices.length; i++) { - vertices.push(restore(Vec2, data.vertices[i])); - } - } - var shape = new PolygonShape(vertices); - return shape; - }; - PolygonShape.prototype.getType = function () { - return this.m_type; - }; - PolygonShape.prototype.getRadius = function () { - return this.m_radius; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - PolygonShape.prototype._clone = function () { - var clone = new PolygonShape(); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_count = this.m_count; - clone.m_centroid.setVec2(this.m_centroid); - for (var i = 0; i < this.m_count; i++) { - clone.m_vertices.push(this.m_vertices[i].clone()); - } - for (var i = 0; i < this.m_normals.length; i++) { - clone.m_normals.push(this.m_normals[i].clone()); - } - return clone; - }; - /** - * Get the number of child primitives. - */ - PolygonShape.prototype.getChildCount = function () { - return 1; - }; - /** @hidden */ - PolygonShape.prototype._reset = function () { - this._set(this.m_vertices); - }; - /** - * @internal - * - * Create a convex hull from the given array of local points. The count must be - * in the range [3, Settings.maxPolygonVertices]. - * - * Warning: the points may be re-ordered, even if they form a convex polygon - * Warning: collinear points are handled but not removed. Collinear points may - * lead to poor stacking behavior. - */ - PolygonShape.prototype._set = function (vertices) { - if (vertices.length < 3) { - this._setAsBox(1.0, 1.0); - return; - } - var n = math_min$3(vertices.length, SettingsInternal.maxPolygonVertices); - // Perform welding and copy vertices into local buffer. - var ps = []; // [Settings.maxPolygonVertices]; - for (var i = 0; i < n; ++i) { - var v = vertices[i]; - var unique = true; - for (var j = 0; j < ps.length; ++j) { - if (Vec2.distanceSquared(v, ps[j]) < 0.25 * SettingsInternal.linearSlopSquared) { - unique = false; - break; - } - } - if (unique) { - ps.push(Vec2.clone(v)); - } - } - n = ps.length; - if (n < 3) { - this._setAsBox(1.0, 1.0); - return; - } - // Create the convex hull using the Gift wrapping algorithm - // http://en.wikipedia.org/wiki/Gift_wrapping_algorithm - // Find the right most point on the hull (in case of multiple points bottom most is used) - var i0 = 0; - var x0 = ps[0].x; - for (var i = 1; i < n; ++i) { - var x = ps[i].x; - if (x > x0 || (x === x0 && ps[i].y < ps[i0].y)) { - i0 = i; - x0 = x; - } - } - var hull = []; // [Settings.maxPolygonVertices]; - var m = 0; - var ih = i0; - while (true) { - hull[m] = ih; - var ie = 0; - for (var j = 1; j < n; ++j) { - if (ie === ih) { - ie = j; - continue; - } - var r = Vec2.sub(ps[ie], ps[hull[m]]); - var v = Vec2.sub(ps[j], ps[hull[m]]); - var c = Vec2.crossVec2Vec2(r, v); - // c < 0 means counter-clockwise wrapping, c > 0 means clockwise wrapping - if (c < 0.0) { - ie = j; - } - // Collinearity check - if (c === 0.0 && v.lengthSquared() > r.lengthSquared()) { - ie = j; - } - } - ++m; - ih = ie; - if (ie === i0) { - break; - } - } - if (m < 3) { - this._setAsBox(1.0, 1.0); - return; - } - this.m_count = m; - // Copy vertices. - this.m_vertices = []; - for (var i = 0; i < m; ++i) { - this.m_vertices[i] = ps[hull[i]]; - } - // Compute normals. Ensure the edges have non-zero length. - for (var i = 0; i < m; ++i) { - var i1 = i; - var i2 = i + 1 < m ? i + 1 : 0; - var edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]); - this.m_normals[i] = Vec2.crossVec2Num(edge, 1.0); - this.m_normals[i].normalize(); - } - // Compute the polygon centroid. - this.m_centroid = computeCentroid(this.m_vertices, m); - }; - /** @internal */ PolygonShape.prototype._setAsBox = function (hx, hy, center, angle) { - // start with right-bottom, counter-clockwise, as in Gift wrapping algorithm in PolygonShape._set() - this.m_vertices[0] = Vec2.neo(hx, -hy); - this.m_vertices[1] = Vec2.neo(hx, hy); - this.m_vertices[2] = Vec2.neo(-hx, hy); - this.m_vertices[3] = Vec2.neo(-hx, -hy); - this.m_normals[0] = Vec2.neo(1.0, 0.0); - this.m_normals[1] = Vec2.neo(0.0, 1.0); - this.m_normals[2] = Vec2.neo(-1.0, 0.0); - this.m_normals[3] = Vec2.neo(0.0, -1.0); - this.m_count = 4; - if (center && Vec2.isValid(center)) { - angle = angle || 0; - copyVec2(this.m_centroid, center); - var xf = Transform.identity(); - xf.p.setVec2(center); - xf.q.setAngle(angle); - // Transform vertices and normals. - for (var i = 0; i < this.m_count; ++i) { - this.m_vertices[i] = Transform.mulVec2(xf, this.m_vertices[i]); - this.m_normals[i] = Rot.mulVec2(xf.q, this.m_normals[i]); - } - } - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - PolygonShape.prototype.testPoint = function (xf, p) { - var pLocal = detransformVec2(temp$1, xf, p); - for (var i = 0; i < this.m_count; ++i) { - var dot = dotVec2(this.m_normals[i], pLocal) - dotVec2(this.m_normals[i], this.m_vertices[i]); - if (dot > 0.0) { - return false; - } - } - return true; - }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - PolygonShape.prototype.rayCast = function (output, input, xf, childIndex) { - // Put the ray into the polygon's frame of reference. - var p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p)); - var p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p)); - var d = Vec2.sub(p2, p1); - var lower = 0.0; - var upper = input.maxFraction; - var index = -1; - for (var i = 0; i < this.m_count; ++i) { - // p = p1 + a * d - // dot(normal, p - v) = 0 - // dot(normal, p1 - v) + a * dot(normal, d) = 0 - var numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1)); - var denominator = Vec2.dot(this.m_normals[i], d); - if (denominator == 0.0) { - if (numerator < 0.0) { - return false; - } - } - else { - // Note: we want this predicate without division: - // lower < numerator / denominator, where denominator < 0 - // Since denominator < 0, we have to flip the inequality: - // lower < numerator / denominator <==> denominator * lower > numerator. - if (denominator < 0.0 && numerator < lower * denominator) { - // Increase lower. - // The segment enters this half-space. - lower = numerator / denominator; - index = i; - } - else if (denominator > 0.0 && numerator < upper * denominator) { - // Decrease upper. - // The segment exits this half-space. - upper = numerator / denominator; - } - } - // The use of epsilon here causes the assert on lower to trip - // in some cases. Apparently the use of epsilon was to make edge - // shapes work, but now those are handled separately. - // if (upper < lower - matrix.EPSILON) - if (upper < lower) { - return false; - } - } - if (index >= 0) { - output.fraction = lower; - output.normal = Rot.mulVec2(xf.q, this.m_normals[index]); - return true; - } - return false; - }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - PolygonShape.prototype.computeAABB = function (aabb, xf, childIndex) { - var minX = Infinity; - var minY = Infinity; - var maxX = -Infinity; - var maxY = -Infinity; - for (var i = 0; i < this.m_count; ++i) { - var v = transformVec2(temp$1, xf, this.m_vertices[i]); - minX = math_min$3(minX, v.x); - maxX = math_max$1(maxX, v.x); - minY = math_min$3(minY, v.y); - maxY = math_max$1(maxY, v.y); - } - setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius); - setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - PolygonShape.prototype.computeMass = function (massData, density) { - zeroVec2(center); - var area = 0.0; - var I = 0.0; - // s is the reference point for forming triangles. - // It's location doesn't change the result (except for rounding error). - zeroVec2(s); - // This code would put the reference point inside the polygon. - for (var i = 0; i < this.m_count; ++i) { - plusVec2(s, this.m_vertices[i]); - } - scaleVec2(s, 1.0 / this.m_count, s); - var k_inv3 = 1.0 / 3.0; - for (var i = 0; i < this.m_count; ++i) { - // Triangle vertices. - subVec2(e1$1, this.m_vertices[i], s); - if (i + 1 < this.m_count) { - subVec2(e2$1, this.m_vertices[i + 1], s); - } - else { - subVec2(e2$1, this.m_vertices[0], s); - } - var D = crossVec2Vec2(e1$1, e2$1); - var triangleArea = 0.5 * D; - area += triangleArea; - // Area weighted centroid - combine2Vec2(temp$1, triangleArea * k_inv3, e1$1, triangleArea * k_inv3, e2$1); - plusVec2(center, temp$1); - var ex1 = e1$1.x; - var ey1 = e1$1.y; - var ex2 = e2$1.x; - var ey2 = e2$1.y; - var intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2; - var inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2; - I += (0.25 * k_inv3 * D) * (intx2 + inty2); - } - // Total mass - massData.mass = density * area; - scaleVec2(center, 1.0 / area, center); - addVec2(massData.center, center, s); - // Inertia tensor relative to the local origin (point s). - massData.I = density * I; - // Shift to center of mass then to original body origin. - massData.I += massData.mass * (dotVec2(massData.center, massData.center) - dotVec2(center, center)); - }; - /** - * Validate convexity. This is a very time consuming operation. - * @returns true if valid - */ - PolygonShape.prototype.validate = function () { - for (var i = 0; i < this.m_count; ++i) { - var i1 = i; - var i2 = i < this.m_count - 1 ? i1 + 1 : 0; - var p = this.m_vertices[i1]; - subVec2(e$1, this.m_vertices[i2], p); - for (var j = 0; j < this.m_count; ++j) { - if (j == i1 || j == i2) { - continue; - } - var c = crossVec2Vec2(e$1, subVec2(temp$1, this.m_vertices[j], p)); - if (c < 0.0) { - return false; - } - } - } - return true; - }; - PolygonShape.prototype.computeDistanceProxy = function (proxy) { - for (var i = 0; i < this.m_count; ++i) { - proxy.m_vertices[i] = this.m_vertices[i]; - } - proxy.m_vertices.length = this.m_count; - proxy.m_count = this.m_count; - proxy.m_radius = this.m_radius; - }; - PolygonShape.TYPE = "polygon"; - return PolygonShape; - }(Shape)); - /** @internal */ function computeCentroid(vs, count) { - var c = Vec2.zero(); - var area = 0.0; - // pRef is the reference point for forming triangles. - // It's location doesn't change the result (except for rounding error). - var pRef = Vec2.zero(); - var i; - var inv3 = 1.0 / 3.0; - for (var i = 0; i < count; ++i) { - // Triangle vertices. - var p1 = pRef; - var p2 = vs[i]; - var p3 = i + 1 < count ? vs[i + 1] : vs[0]; - var e1_1 = Vec2.sub(p2, p1); - var e2_1 = Vec2.sub(p3, p1); - var D = Vec2.crossVec2Vec2(e1_1, e2_1); - var triangleArea = 0.5 * D; - area += triangleArea; - // Area weighted centroid - combine3Vec2(temp$1, 1, p1, 1, p2, 1, p3); - plusScaleVec2(c, triangleArea * inv3, temp$1); - } - c.mul(1.0 / area); - return c; - } - var Polygon = PolygonShape; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_sqrt = Math.sqrt; - /** @internal */ var math_PI$4 = Math.PI; - /** @internal */ var temp = vec2(0, 0); - var CircleShape = /** @class */ (function (_super) { - __extends(CircleShape, _super); - function CircleShape(a, b) { - var _this = this; - // @ts-ignore - if (!(_this instanceof CircleShape)) { - return new CircleShape(a, b); - } - _this = _super.call(this) || this; - _this.m_type = CircleShape.TYPE; - _this.m_p = Vec2.zero(); - _this.m_radius = 1; - if (typeof a === "object" && Vec2.isValid(a)) { - _this.m_p.setVec2(a); - if (typeof b === "number") { - _this.m_radius = b; - } - } - else if (typeof a === "number") { - _this.m_radius = a; - } - return _this; - } - /** @internal */ - CircleShape.prototype._serialize = function () { - return { - type: this.m_type, - p: this.m_p, - radius: this.m_radius, - }; - }; - /** @internal */ - CircleShape._deserialize = function (data) { - return new CircleShape(data.p, data.radius); - }; - /** @hidden */ - CircleShape.prototype._reset = function () { - // noop - }; - CircleShape.prototype.getType = function () { - return this.m_type; - }; - CircleShape.prototype.getRadius = function () { - return this.m_radius; - }; - CircleShape.prototype.getCenter = function () { - return this.m_p; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - CircleShape.prototype._clone = function () { - var clone = new CircleShape(); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_p = this.m_p.clone(); - return clone; - }; - /** - * Get the number of child primitives. - */ - CircleShape.prototype.getChildCount = function () { - return 1; - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - CircleShape.prototype.testPoint = function (xf, p) { - var center = transformVec2(temp, xf, this.m_p); - return distSqrVec2(p, center) <= this.m_radius * this.m_radius; - }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - CircleShape.prototype.rayCast = function (output, input, xf, childIndex) { - // Collision Detection in Interactive 3D Environments by Gino van den Bergen - // From Section 3.1.2 - // x = s + a * r - // norm(x) = radius - var position = Vec2.add(xf.p, Rot.mulVec2(xf.q, this.m_p)); - var s = Vec2.sub(input.p1, position); - var b = Vec2.dot(s, s) - this.m_radius * this.m_radius; - // Solve quadratic equation. - var r = Vec2.sub(input.p2, input.p1); - var c = Vec2.dot(s, r); - var rr = Vec2.dot(r, r); - var sigma = c * c - rr * b; - // Check for negative discriminant and short segment. - if (sigma < 0.0 || rr < EPSILON) { - return false; - } - // Find the point of intersection of the line with the circle. - var a = -(c + math_sqrt(sigma)); - // Is the intersection point on the segment? - if (0.0 <= a && a <= input.maxFraction * rr) { - a /= rr; - output.fraction = a; - output.normal = Vec2.add(s, Vec2.mulNumVec2(a, r)); - output.normal.normalize(); - return true; - } - return false; - }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - CircleShape.prototype.computeAABB = function (aabb, xf, childIndex) { - var p = transformVec2(temp, xf, this.m_p); - setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius); - setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - CircleShape.prototype.computeMass = function (massData, density) { - massData.mass = density * math_PI$4 * this.m_radius * this.m_radius; - copyVec2(massData.center, this.m_p); - // inertia about the local origin - massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + lengthSqrVec2(this.m_p)); - }; - CircleShape.prototype.computeDistanceProxy = function (proxy) { - proxy.m_vertices[0] = this.m_p; - proxy.m_vertices.length = 1; - proxy.m_count = 1; - proxy.m_radius = this.m_radius; - }; - CircleShape.TYPE = "circle"; - return CircleShape; - }(Shape)); - var Circle = CircleShape; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$5 = Math.abs; - /** @internal */ var math_PI$3 = Math.PI; - /** @internal */ var DEFAULTS$a = { - frequencyHz: 0.0, - dampingRatio: 0.0 - }; - /** - * A distance joint constrains two points on two bodies to remain at a fixed - * distance from each other. You can view this as a massless, rigid rod. - */ - var DistanceJoint = /** @class */ (function (_super) { - __extends(DistanceJoint, _super); - function DistanceJoint(def, bodyA, bodyB, anchorA, anchorB) { - var _this = this; - // @ts-ignore - if (!(_this instanceof DistanceJoint)) { - return new DistanceJoint(def, bodyA, bodyB, anchorA, anchorB); - } - // order of constructor arguments is changed in v0.2 - if (bodyB && anchorA && ("m_type" in anchorA) && ("x" in bodyB) && ("y" in bodyB)) { - var temp = bodyB; - bodyB = anchorA; - anchorA = temp; - } - def = options(def, DEFAULTS$a); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = DistanceJoint.TYPE; - // Solver shared - _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.zero()); - _this.m_length = Number.isFinite(def.length) ? def.length : - Vec2.distance(bodyA.getWorldPoint(_this.m_localAnchorA), bodyB.getWorldPoint(_this.m_localAnchorB)); - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_impulse = 0.0; - _this.m_gamma = 0.0; - _this.m_bias = 0.0; - return _this; - // 1-D constrained system - // m (v2 - v1) = lambda - // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass. - // x2 = x1 + h * v2 - // 1-D mass-damper-spring system - // m (v2 - v1) + h * d * v2 + h * k * - // C = norm(p2 - p1) - L - // u = (p2 - p1) / norm(p2 - p1) - // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1)) - // J = [-u -cross(r1, u) u cross(r2, u)] - // K = J * invM * JT - // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2 - } - /** @internal */ - DistanceJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - length: this.m_length, - impulse: this.m_impulse, - gamma: this.m_gamma, - bias: this.m_bias, - }; - }; - /** @internal */ - DistanceJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new DistanceJoint(data); - return joint; - }; - /** @hidden */ - DistanceJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (def.length > 0) { - this.m_length = +def.length; - } - else if (def.length < 0) ; - else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) { - this.m_length = Vec2.distance(this.m_bodyA.getWorldPoint(this.m_localAnchorA), this.m_bodyB.getWorldPoint(this.m_localAnchorB)); - } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; - } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - DistanceJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - DistanceJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Set the natural length. Manipulating the length can lead to non-physical - * behavior when the frequency is zero. - */ - DistanceJoint.prototype.setLength = function (length) { - this.m_length = length; - }; - /** - * Get the natural length. - */ - DistanceJoint.prototype.getLength = function () { - return this.m_length; - }; - DistanceJoint.prototype.setFrequency = function (hz) { - this.m_frequencyHz = hz; - }; - DistanceJoint.prototype.getFrequency = function () { - return this.m_frequencyHz; - }; - DistanceJoint.prototype.setDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - DistanceJoint.prototype.getDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - DistanceJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - DistanceJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - DistanceJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - DistanceJoint.prototype.getReactionTorque = function (inv_dt) { - return 0.0; - }; - DistanceJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - this.m_u = Vec2.sub(Vec2.add(cB, this.m_rB), Vec2.add(cA, this.m_rA)); - // Handle singularity. - var length = this.m_u.length(); - if (length > SettingsInternal.linearSlop) { - this.m_u.mul(1.0 / length); - } - else { - this.m_u.setNum(0.0, 0.0); - } - var crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u); - var crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u); - var invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu; - // Compute the effective mass matrix. - this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0; - if (this.m_frequencyHz > 0.0) { - var C = length - this.m_length; - // Frequency - var omega = 2.0 * math_PI$3 * this.m_frequencyHz; - // Damping coefficient - var d = 2.0 * this.m_mass * this.m_dampingRatio * omega; - // Spring stiffness - var k = this.m_mass * omega * omega; - // magic formulas - var h = step.dt; - this.m_gamma = h * (d + h * k); - this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0; - this.m_bias = C * h * k * this.m_gamma; - invMass += this.m_gamma; - this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0; - } - else { - this.m_gamma = 0.0; - this.m_bias = 0.0; - } - if (step.warmStarting) { - // Scale the impulse to support a variable time step. - this.m_impulse *= step.dtRatio; - var P = Vec2.mulNumVec2(this.m_impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - DistanceJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - // Cdot = dot(u, v + cross(w, r)) - var vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA)); - var vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)); - var Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA); - var impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse); - this.m_impulse += impulse; - var P = Vec2.mulNumVec2(impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - DistanceJoint.prototype.solvePositionConstraints = function (step) { - if (this.m_frequencyHz > 0.0) { - // There is no position correction for soft distance constraints. - return true; - } - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); - var u = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA)); - var length = u.normalize(); - var C = clamp(length - this.m_length, -SettingsInternal.maxLinearCorrection, SettingsInternal.maxLinearCorrection); - var impulse = -this.m_mass * C; - var P = Vec2.mulNumVec2(impulse, u); - cA.subMul(this.m_invMassA, P); - aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P); - cB.addMul(this.m_invMassB, P); - aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P); - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return math_abs$5(C) < SettingsInternal.linearSlop; - }; - DistanceJoint.TYPE = "distance-joint"; - return DistanceJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var DEFAULTS$9 = { - maxForce: 0.0, - maxTorque: 0.0, - }; - /** - * Friction joint. This is used for top-down friction. It provides 2D - * translational friction and angular friction. - */ - var FrictionJoint = /** @class */ (function (_super) { - __extends(FrictionJoint, _super); - function FrictionJoint(def, bodyA, bodyB, anchor) { - var _this = this; - // @ts-ignore - if (!(_this instanceof FrictionJoint)) { - return new FrictionJoint(def, bodyA, bodyB, anchor); - } - def = options(def, DEFAULTS$9); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = FrictionJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - // Solver shared - _this.m_linearImpulse = Vec2.zero(); - _this.m_angularImpulse = 0.0; - _this.m_maxForce = def.maxForce; - _this.m_maxTorque = def.maxTorque; - return _this; - // Point-to-point constraint - // Cdot = v2 - v1 - // = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // Angle constraint - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 - } - /** @internal */ - FrictionJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - maxForce: this.m_maxForce, - maxTorque: this.m_maxTorque, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - }; - }; - /** @internal */ - FrictionJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new FrictionJoint(data); - return joint; - }; - /** @hidden */ - FrictionJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (Number.isFinite(def.maxForce)) { - this.m_maxForce = def.maxForce; - } - if (Number.isFinite(def.maxTorque)) { - this.m_maxTorque = def.maxTorque; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - FrictionJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - FrictionJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Set the maximum friction force in N. - */ - FrictionJoint.prototype.setMaxForce = function (force) { - this.m_maxForce = force; - }; - /** - * Get the maximum friction force in N. - */ - FrictionJoint.prototype.getMaxForce = function () { - return this.m_maxForce; - }; - /** - * Set the maximum friction torque in N*m. - */ - FrictionJoint.prototype.setMaxTorque = function (torque) { - this.m_maxTorque = torque; - }; - /** - * Get the maximum friction torque in N*m. - */ - FrictionJoint.prototype.getMaxTorque = function () { - return this.m_maxTorque; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - FrictionJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - FrictionJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - FrictionJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - FrictionJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_angularImpulse; - }; - FrictionJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective mass matrix. - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // [ 0 -1 0 1] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var K = new Mat22(); - K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y - * this.m_rB.y; - K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; - K.ey.x = K.ex.y; - K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x - * this.m_rB.x; - this.m_linearMass = K.getInverse(); - this.m_angularMass = iA + iB; - if (this.m_angularMass > 0.0) { - this.m_angularMass = 1.0 / this.m_angularMass; - } - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_linearImpulse.mul(step.dtRatio); - this.m_angularImpulse *= step.dtRatio; - var P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse); - } - else { - this.m_linearImpulse.setZero(); - this.m_angularImpulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - FrictionJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var h = step.dt; - // Solve angular friction - { - var Cdot = wB - wA; - var impulse = -this.m_angularMass * Cdot; - var oldImpulse = this.m_angularImpulse; - var maxImpulse = h * this.m_maxTorque; - this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_angularImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve linear friction - { - var Cdot = Vec2.sub(Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)), Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA))); - var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); - var oldImpulse = this.m_linearImpulse; - this.m_linearImpulse.add(impulse); - var maxImpulse = h * this.m_maxForce; - if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) { - this.m_linearImpulse.normalize(); - this.m_linearImpulse.mul(maxImpulse); - } - impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); - vA.subMul(mA, impulse); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); - vB.addMul(mB, impulse); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - FrictionJoint.prototype.solvePositionConstraints = function (step) { - return true; - }; - FrictionJoint.TYPE = "friction-joint"; - return FrictionJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** - * A 3-by-3 matrix. Stored in column-major order. - */ - var Mat33 = /** @class */ (function () { - function Mat33(a, b, c) { - if (typeof a === "object" && a !== null) { - this.ex = Vec3.clone(a); - this.ey = Vec3.clone(b); - this.ez = Vec3.clone(c); - } - else { - this.ex = Vec3.zero(); - this.ey = Vec3.zero(); - this.ez = Vec3.zero(); - } - } - /** @hidden */ - Mat33.prototype.toString = function () { - return JSON.stringify(this); - }; - Mat33.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec3.isValid(obj.ex) && Vec3.isValid(obj.ey) && Vec3.isValid(obj.ez); - }; - Mat33.assert = function (o) { - }; - /** - * Set this matrix to all zeros. - */ - Mat33.prototype.setZero = function () { - this.ex.setZero(); - this.ey.setZero(); - this.ez.setZero(); - return this; - }; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - Mat33.prototype.solve33 = function (v) { - // let det = matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, this.ez)); - var cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; - var cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; - var cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; - var det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z; - if (det !== 0.0) { - det = 1.0 / det; - } - var r = new Vec3(); - // r.x = det * matrix.dotVec3(v, matrix.newCrossVec3(this.ey, this.ez)); - cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; - cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; - cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; - r.x = det * (v.x * cross_x + v.y * cross_y + v.z * cross_z); - // r.y = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(v, this.ez)); - cross_x = v.y * this.ez.z - v.z * this.ez.y; - cross_y = v.z * this.ez.x - v.x * this.ez.z; - cross_z = v.x * this.ez.y - v.y * this.ez.x; - r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); - // r.z = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, v)); - cross_x = this.ey.y * v.z - this.ey.z * v.y; - cross_y = this.ey.z * v.x - this.ey.x * v.z; - cross_z = this.ey.x * v.y - this.ey.y * v.x; - r.z = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); - return r; - }; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix - * equation. - */ - Mat33.prototype.solve22 = function (v) { - var a11 = this.ex.x; - var a12 = this.ey.x; - var a21 = this.ex.y; - var a22 = this.ey.y; - var det = a11 * a22 - a12 * a21; - if (det !== 0.0) { - det = 1.0 / det; - } - var r = Vec2.zero(); - r.x = det * (a22 * v.x - a12 * v.y); - r.y = det * (a11 * v.y - a21 * v.x); - return r; - }; - /** - * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if - * singular. - */ - Mat33.prototype.getInverse22 = function (M) { - var a = this.ex.x; - var b = this.ey.x; - var c = this.ex.y; - var d = this.ey.y; - var det = a * d - b * c; - if (det !== 0.0) { - det = 1.0 / det; - } - M.ex.x = det * d; - M.ey.x = -det * b; - M.ex.z = 0.0; - M.ex.y = -det * c; - M.ey.y = det * a; - M.ey.z = 0.0; - M.ez.x = 0.0; - M.ez.y = 0.0; - M.ez.z = 0.0; - }; - /** - * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix - * if singular. - */ - Mat33.prototype.getSymInverse33 = function (M) { - var det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez)); - if (det !== 0.0) { - det = 1.0 / det; - } - var a11 = this.ex.x; - var a12 = this.ey.x; - var a13 = this.ez.x; - var a22 = this.ey.y; - var a23 = this.ez.y; - var a33 = this.ez.z; - M.ex.x = det * (a22 * a33 - a23 * a23); - M.ex.y = det * (a13 * a23 - a12 * a33); - M.ex.z = det * (a12 * a23 - a13 * a22); - M.ey.x = M.ex.y; - M.ey.y = det * (a11 * a33 - a13 * a13); - M.ey.z = det * (a13 * a12 - a11 * a23); - M.ez.x = M.ex.z; - M.ez.y = M.ey.z; - M.ez.z = det * (a11 * a22 - a12 * a12); - }; - Mat33.mul = function (a, b) { - if (b && "z" in b && "y" in b && "x" in b) { - var x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z; - var y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z; - var z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z; - return new Vec3(x, y, z); - } - else if (b && "y" in b && "x" in b) { - var x = a.ex.x * b.x + a.ey.x * b.y; - var y = a.ex.y * b.x + a.ey.y * b.y; - return Vec2.neo(x, y); - } - }; - Mat33.mulVec3 = function (a, b) { - var x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z; - var y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z; - var z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z; - return new Vec3(x, y, z); - }; - Mat33.mulVec2 = function (a, b) { - var x = a.ex.x * b.x + a.ey.x * b.y; - var y = a.ex.y * b.x + a.ey.y * b.y; - return Vec2.neo(x, y); - }; - Mat33.add = function (a, b) { - return new Mat33(Vec3.add(a.ex, b.ex), Vec3.add(a.ey, b.ey), Vec3.add(a.ez, b.ez)); - }; - return Mat33; - }()); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$4 = Math.abs; - // todo: use string? - /** @internal */ var LimitState$2; - (function (LimitState) { - LimitState[LimitState["inactiveLimit"] = 0] = "inactiveLimit"; - LimitState[LimitState["atLowerLimit"] = 1] = "atLowerLimit"; - LimitState[LimitState["atUpperLimit"] = 2] = "atUpperLimit"; - LimitState[LimitState["equalLimits"] = 3] = "equalLimits"; - })(LimitState$2 || (LimitState$2 = {})); - /** @internal */ var DEFAULTS$8 = { - lowerAngle: 0.0, - upperAngle: 0.0, - maxMotorTorque: 0.0, - motorSpeed: 0.0, - enableLimit: false, - enableMotor: false - }; - /** - * A revolute joint constrains two bodies to share a common point while they are - * free to rotate about the point. The relative rotation about the shared point - * is the joint angle. You can limit the relative rotation with a joint limit - * that specifies a lower and upper angle. You can use a motor to drive the - * relative rotation about the shared point. A maximum motor torque is provided - * so that infinite forces are not generated. - */ - var RevoluteJoint = /** @class */ (function (_super) { - __extends(RevoluteJoint, _super); - function RevoluteJoint(def, bodyA, bodyB, anchor) { - var _a, _b, _c, _d, _e, _f; - var _this = this; - // @ts-ignore - if (!(_this instanceof RevoluteJoint)) { - return new RevoluteJoint(def, bodyA, bodyB, anchor); - } - def = def !== null && def !== void 0 ? def : {}; - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_mass = new Mat33(); - _this.m_limitState = LimitState$2.inactiveLimit; - _this.m_type = RevoluteJoint.TYPE; - if (Vec2.isValid(anchor)) { - _this.m_localAnchorA = bodyA.getLocalPoint(anchor); - } - else if (Vec2.isValid(def.localAnchorA)) { - _this.m_localAnchorA = Vec2.clone(def.localAnchorA); - } - else { - _this.m_localAnchorA = Vec2.zero(); - } - if (Vec2.isValid(anchor)) { - _this.m_localAnchorB = bodyB.getLocalPoint(anchor); - } - else if (Vec2.isValid(def.localAnchorB)) { - _this.m_localAnchorB = Vec2.clone(def.localAnchorB); - } - else { - _this.m_localAnchorB = Vec2.zero(); - } - if (Number.isFinite(def.referenceAngle)) { - _this.m_referenceAngle = def.referenceAngle; - } - else { - _this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle(); - } - _this.m_impulse = new Vec3(); - _this.m_motorImpulse = 0.0; - _this.m_lowerAngle = (_a = def.lowerAngle) !== null && _a !== void 0 ? _a : DEFAULTS$8.lowerAngle; - _this.m_upperAngle = (_b = def.upperAngle) !== null && _b !== void 0 ? _b : DEFAULTS$8.upperAngle; - _this.m_maxMotorTorque = (_c = def.maxMotorTorque) !== null && _c !== void 0 ? _c : DEFAULTS$8.maxMotorTorque; - _this.m_motorSpeed = (_d = def.motorSpeed) !== null && _d !== void 0 ? _d : DEFAULTS$8.motorSpeed; - _this.m_enableLimit = (_e = def.enableLimit) !== null && _e !== void 0 ? _e : DEFAULTS$8.enableLimit; - _this.m_enableMotor = (_f = def.enableMotor) !== null && _f !== void 0 ? _f : DEFAULTS$8.enableMotor; - return _this; - // Point-to-point constraint - // C = p2 - p1 - // Cdot = v2 - v1 - // = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // Motor constraint - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 - } - /** @internal */ - RevoluteJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - lowerAngle: this.m_lowerAngle, - upperAngle: this.m_upperAngle, - maxMotorTorque: this.m_maxMotorTorque, - motorSpeed: this.m_motorSpeed, - enableLimit: this.m_enableLimit, - enableMotor: this.m_enableMotor, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - referenceAngle: this.m_referenceAngle, - }; - }; - /** @internal */ - RevoluteJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new RevoluteJoint(data); - return joint; - }; - /** @hidden */ - RevoluteJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (Number.isFinite(def.referenceAngle)) { - this.m_referenceAngle = def.referenceAngle; - } - if (def.enableLimit !== undefined) { - this.m_enableLimit = def.enableLimit; - } - if (Number.isFinite(def.lowerAngle)) { - this.m_lowerAngle = def.lowerAngle; - } - if (Number.isFinite(def.upperAngle)) { - this.m_upperAngle = def.upperAngle; - } - if (Number.isFinite(def.maxMotorTorque)) { - this.m_maxMotorTorque = def.maxMotorTorque; - } - if (Number.isFinite(def.motorSpeed)) { - this.m_motorSpeed = def.motorSpeed; - } - if (def.enableMotor !== undefined) { - this.m_enableMotor = def.enableMotor; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - RevoluteJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - RevoluteJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Get the reference angle. - */ - RevoluteJoint.prototype.getReferenceAngle = function () { - return this.m_referenceAngle; - }; - /** - * Get the current joint angle in radians. - */ - RevoluteJoint.prototype.getJointAngle = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle; - }; - /** - * Get the current joint angle speed in radians per second. - */ - RevoluteJoint.prototype.getJointSpeed = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - return bB.m_angularVelocity - bA.m_angularVelocity; - }; - /** - * Is the joint motor enabled? - */ - RevoluteJoint.prototype.isMotorEnabled = function () { - return this.m_enableMotor; - }; - /** - * Enable/disable the joint motor. - */ - RevoluteJoint.prototype.enableMotor = function (flag) { - if (flag == this.m_enableMotor) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableMotor = flag; - }; - /** - * Get the current motor torque given the inverse time step. Unit is N*m. - */ - RevoluteJoint.prototype.getMotorTorque = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - /** - * Set the motor speed in radians per second. - */ - RevoluteJoint.prototype.setMotorSpeed = function (speed) { - if (speed == this.m_motorSpeed) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_motorSpeed = speed; - }; - /** - * Get the motor speed in radians per second. - */ - RevoluteJoint.prototype.getMotorSpeed = function () { - return this.m_motorSpeed; - }; - /** - * Set the maximum motor torque, usually in N-m. - */ - RevoluteJoint.prototype.setMaxMotorTorque = function (torque) { - if (torque == this.m_maxMotorTorque) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_maxMotorTorque = torque; - }; - RevoluteJoint.prototype.getMaxMotorTorque = function () { - return this.m_maxMotorTorque; - }; - /** - * Is the joint limit enabled? - */ - RevoluteJoint.prototype.isLimitEnabled = function () { - return this.m_enableLimit; - }; - /** - * Enable/disable the joint limit. - */ - RevoluteJoint.prototype.enableLimit = function (flag) { - if (flag != this.m_enableLimit) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableLimit = flag; - this.m_impulse.z = 0.0; - } - }; - /** - * Get the lower joint limit in radians. - */ - RevoluteJoint.prototype.getLowerLimit = function () { - return this.m_lowerAngle; - }; - /** - * Get the upper joint limit in radians. - */ - RevoluteJoint.prototype.getUpperLimit = function () { - return this.m_upperAngle; - }; - /** - * Set the joint limits in radians. - */ - RevoluteJoint.prototype.setLimits = function (lower, upper) { - if (lower != this.m_lowerAngle || upper != this.m_upperAngle) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_impulse.z = 0.0; - this.m_lowerAngle = lower; - this.m_upperAngle = upper; - } - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - RevoluteJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - RevoluteJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force given the inverse time step. Unit is N. - */ - RevoluteJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); - }; - /** - * Get the reaction torque due to the joint limit given the inverse time step. - * Unit is N*m. - */ - RevoluteJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_impulse.z; - }; - RevoluteJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // [ 0 -1 0 1] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var fixedRotation = (iA + iB === 0.0); - 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; - this.m_mass.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; - this.m_mass.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; - this.m_mass.ex.y = this.m_mass.ey.x; - 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; - this.m_mass.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; - this.m_mass.ex.z = this.m_mass.ez.x; - this.m_mass.ey.z = this.m_mass.ez.y; - this.m_mass.ez.z = iA + iB; - this.m_motorMass = iA + iB; - if (this.m_motorMass > 0.0) { - this.m_motorMass = 1.0 / this.m_motorMass; - } - if (this.m_enableMotor == false || fixedRotation) { - this.m_motorImpulse = 0.0; - } - if (this.m_enableLimit && fixedRotation == false) { - var jointAngle = aB - aA - this.m_referenceAngle; - if (math_abs$4(this.m_upperAngle - this.m_lowerAngle) < 2.0 * SettingsInternal.angularSlop) { - this.m_limitState = LimitState$2.equalLimits; - } - else if (jointAngle <= this.m_lowerAngle) { - if (this.m_limitState != LimitState$2.atLowerLimit) { - this.m_impulse.z = 0.0; - } - this.m_limitState = LimitState$2.atLowerLimit; - } - else if (jointAngle >= this.m_upperAngle) { - if (this.m_limitState != LimitState$2.atUpperLimit) { - this.m_impulse.z = 0.0; - } - this.m_limitState = LimitState$2.atUpperLimit; - } - else { - this.m_limitState = LimitState$2.inactiveLimit; - this.m_impulse.z = 0.0; - } - } - else { - this.m_limitState = LimitState$2.inactiveLimit; - } - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_impulse.mul(step.dtRatio); - this.m_motorImpulse *= step.dtRatio; - var P = Vec2.neo(this.m_impulse.x, this.m_impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z); - } - else { - this.m_impulse.setZero(); - this.m_motorImpulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - RevoluteJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var fixedRotation = (iA + iB === 0.0); - // Solve motor constraint. - if (this.m_enableMotor && this.m_limitState != LimitState$2.equalLimits && fixedRotation == false) { - var Cdot = wB - wA - this.m_motorSpeed; - var impulse = -this.m_motorMass * Cdot; - var oldImpulse = this.m_motorImpulse; - var maxImpulse = step.dt * this.m_maxMotorTorque; - this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_motorImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve limit constraint. - if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { - var Cdot1 = Vec2.zero(); - Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var Cdot2 = wB - wA; - var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); - var impulse = Vec3.neg(this.m_mass.solve33(Cdot)); - if (this.m_limitState == LimitState$2.equalLimits) { - this.m_impulse.add(impulse); - } - else if (this.m_limitState == LimitState$2.atLowerLimit) { - var newImpulse = this.m_impulse.z + impulse.z; - if (newImpulse < 0.0) { - var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); - var reduced = this.m_mass.solve22(rhs); - impulse.x = reduced.x; - impulse.y = reduced.y; - impulse.z = -this.m_impulse.z; - this.m_impulse.x += reduced.x; - this.m_impulse.y += reduced.y; - this.m_impulse.z = 0.0; - } - else { - this.m_impulse.add(impulse); - } - } - else if (this.m_limitState == LimitState$2.atUpperLimit) { - var newImpulse = this.m_impulse.z + impulse.z; - if (newImpulse > 0.0) { - var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); - var reduced = this.m_mass.solve22(rhs); - impulse.x = reduced.x; - impulse.y = reduced.y; - impulse.z = -this.m_impulse.z; - this.m_impulse.x += reduced.x; - this.m_impulse.y += reduced.y; - this.m_impulse.z = 0.0; - } - else { - this.m_impulse.add(impulse); - } - } - var P = Vec2.neo(impulse.x, impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z); - } - else { - // Solve point-to-point constraint - var Cdot = Vec2.zero(); - Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var impulse = this.m_mass.solve22(Vec2.neg(Cdot)); - this.m_impulse.x += impulse.x; - this.m_impulse.y += impulse.y; - vA.subMul(mA, impulse); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); - vB.addMul(mB, impulse); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - RevoluteJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var angularError = 0.0; - var positionError = 0.0; - var fixedRotation = (this.m_invIA + this.m_invIB == 0.0); - // Solve angular limit constraint. - if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { - var angle = aB - aA - this.m_referenceAngle; - var limitImpulse = 0.0; - if (this.m_limitState == LimitState$2.equalLimits) { - // Prevent large angular corrections - var C = clamp(angle - this.m_lowerAngle, -SettingsInternal.maxAngularCorrection, SettingsInternal.maxAngularCorrection); - limitImpulse = -this.m_motorMass * C; - angularError = math_abs$4(C); - } - else if (this.m_limitState == LimitState$2.atLowerLimit) { - var C = angle - this.m_lowerAngle; - angularError = -C; - // Prevent large angular corrections and allow some slop. - C = clamp(C + SettingsInternal.angularSlop, -SettingsInternal.maxAngularCorrection, 0.0); - limitImpulse = -this.m_motorMass * C; - } - else if (this.m_limitState == LimitState$2.atUpperLimit) { - var C = angle - this.m_upperAngle; - angularError = C; - // Prevent large angular corrections and allow some slop. - C = clamp(C - SettingsInternal.angularSlop, 0.0, SettingsInternal.maxAngularCorrection); - limitImpulse = -this.m_motorMass * C; - } - aA -= this.m_invIA * limitImpulse; - aB += this.m_invIB * limitImpulse; - } - // Solve point-to-point constraint. - { - qA.setAngle(aA); - qB.setAngle(aB); - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var C = Vec2.zero(); - C.addCombine(1, cB, 1, rB); - C.subCombine(1, cA, 1, rA); - positionError = C.length(); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var K = new Mat22(); - K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y; - K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y; - K.ey.x = K.ex.y; - K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x; - var impulse = Vec2.neg(K.solve(C)); - cA.subMul(mA, impulse); - aA -= iA * Vec2.crossVec2Vec2(rA, impulse); - cB.addMul(mB, impulse); - aB += iB * Vec2.crossVec2Vec2(rB, impulse); - } - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; - }; - RevoluteJoint.TYPE = "revolute-joint"; - return RevoluteJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$3 = Math.abs; - /** @internal */ var math_max = Math.max; - /** @internal */ var math_min$2 = Math.min; - /** @internal */ var LimitState$1; - (function (LimitState) { - LimitState[LimitState["inactiveLimit"] = 0] = "inactiveLimit"; - LimitState[LimitState["atLowerLimit"] = 1] = "atLowerLimit"; - LimitState[LimitState["atUpperLimit"] = 2] = "atUpperLimit"; - LimitState[LimitState["equalLimits"] = 3] = "equalLimits"; - })(LimitState$1 || (LimitState$1 = {})); - /** @internal */ var DEFAULTS$7 = { - enableLimit: false, - lowerTranslation: 0.0, - upperTranslation: 0.0, - enableMotor: false, - maxMotorForce: 0.0, - motorSpeed: 0.0 - }; - /** - * A prismatic joint. This joint provides one degree of freedom: translation - * along an axis fixed in bodyA. Relative rotation is prevented. You can use a - * joint limit to restrict the range of motion and a joint motor to drive the - * motion or to model joint friction. - */ - var PrismaticJoint = /** @class */ (function (_super) { - __extends(PrismaticJoint, _super); - function PrismaticJoint(def, bodyA, bodyB, anchor, axis) { - var _this = this; - // @ts-ignore - if (!(_this instanceof PrismaticJoint)) { - return new PrismaticJoint(def, bodyA, bodyB, anchor, axis); - } - def = options(def, DEFAULTS$7); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = PrismaticJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - _this.m_localXAxisA = Vec2.clone(axis ? bodyA.getLocalVector(axis) : def.localAxisA || Vec2.neo(1.0, 0.0)); - _this.m_localXAxisA.normalize(); - _this.m_localYAxisA = Vec2.crossNumVec2(1.0, _this.m_localXAxisA); - _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); - _this.m_impulse = new Vec3(); - _this.m_motorMass = 0.0; - _this.m_motorImpulse = 0.0; - _this.m_lowerTranslation = def.lowerTranslation; - _this.m_upperTranslation = def.upperTranslation; - _this.m_maxMotorForce = def.maxMotorForce; - _this.m_motorSpeed = def.motorSpeed; - _this.m_enableLimit = def.enableLimit; - _this.m_enableMotor = def.enableMotor; - _this.m_limitState = LimitState$1.inactiveLimit; - _this.m_axis = Vec2.zero(); - _this.m_perp = Vec2.zero(); - _this.m_K = new Mat33(); - return _this; - // Linear constraint (point-to-line) - // d = p2 - p1 = x2 + r2 - x1 - r1 - // C = dot(perp, d) - // Cdot = dot(d, cross(w1, perp)) + dot(perp, v2 + cross(w2, r2) - v1 - - // cross(w1, r1)) - // = -dot(perp, v1) - dot(cross(d + r1, perp), w1) + dot(perp, v2) + - // dot(cross(r2, perp), v2) - // J = [-perp, -cross(d + r1, perp), perp, cross(r2,perp)] - // - // Angular constraint - // C = a2 - a1 + a_initial - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // - // K = J * invM * JT - // - // J = [-a -s1 a s2] - // [0 -1 0 1] - // a = perp - // s1 = cross(d + r1, a) = cross(p2 - x1, a) - // s2 = cross(r2, a) = cross(p2 - x2, a) - // Motor/Limit linear constraint - // C = dot(ax1, d) - // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) + - // dot(cross(r2, ax1), v2) - // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)] - // Block Solver - // We develop a block solver that includes the joint limit. This makes the - // limit stiff (inelastic) even - // when the mass has poor distribution (leading to large torques about the - // joint anchor points). - // - // The Jacobian has 3 rows: - // J = [-uT -s1 uT s2] // linear - // [0 -1 0 1] // angular - // [-vT -a1 vT a2] // limit - // - // u = perp - // v = axis - // s1 = cross(d + r1, u), s2 = cross(r2, u) - // a1 = cross(d + r1, v), a2 = cross(r2, v) - // M * (v2 - v1) = JT * df - // J * v2 = bias - // - // v2 = v1 + invM * JT * df - // J * (v1 + invM * JT * df) = bias - // K * df = bias - J * v1 = -Cdot - // K = J * invM * JT - // Cdot = J * v1 - bias - // - // Now solve for f2. - // df = f2 - f1 - // K * (f2 - f1) = -Cdot - // f2 = invK * (-Cdot) + f1 - // - // Clamp accumulated limit impulse. - // lower: f2(3) = max(f2(3), 0) - // upper: f2(3) = min(f2(3), 0) - // - // Solve for correct f2(1:2) - // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:3) * f1 - // = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:2) * f1(1:2) + K(1:2,3) * f1(3) - // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3)) + - // K(1:2,1:2) * f1(1:2) - // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) + - // f1(1:2) - // - // Now compute impulse to be applied: - // df = f2 - f1 - } - /** @internal */ - PrismaticJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - lowerTranslation: this.m_lowerTranslation, - upperTranslation: this.m_upperTranslation, - maxMotorForce: this.m_maxMotorForce, - motorSpeed: this.m_motorSpeed, - enableLimit: this.m_enableLimit, - enableMotor: this.m_enableMotor, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - localAxisA: this.m_localXAxisA, - referenceAngle: this.m_referenceAngle, - }; - }; - /** @internal */ - PrismaticJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - data.localAxisA = Vec2.clone(data.localAxisA); - var joint = new PrismaticJoint(data); - return joint; - }; - /** @hidden */ - PrismaticJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (def.localAxisA) { - this.m_localXAxisA.setVec2(def.localAxisA); - this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1.0, def.localAxisA)); - } - if (Number.isFinite(def.referenceAngle)) { - this.m_referenceAngle = def.referenceAngle; - } - if (typeof def.enableLimit !== "undefined") { - this.m_enableLimit = !!def.enableLimit; - } - if (Number.isFinite(def.lowerTranslation)) { - this.m_lowerTranslation = def.lowerTranslation; - } - if (Number.isFinite(def.upperTranslation)) { - this.m_upperTranslation = def.upperTranslation; - } - if (typeof def.enableMotor !== "undefined") { - this.m_enableMotor = !!def.enableMotor; - } - if (Number.isFinite(def.maxMotorForce)) { - this.m_maxMotorForce = def.maxMotorForce; - } - if (Number.isFinite(def.motorSpeed)) { - this.m_motorSpeed = def.motorSpeed; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - PrismaticJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - PrismaticJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * The local joint axis relative to bodyA. - */ - PrismaticJoint.prototype.getLocalAxisA = function () { - return this.m_localXAxisA; - }; - /** - * Get the reference angle. - */ - PrismaticJoint.prototype.getReferenceAngle = function () { - return this.m_referenceAngle; - }; - /** - * Get the current joint translation, usually in meters. - */ - PrismaticJoint.prototype.getJointTranslation = function () { - var pA = this.m_bodyA.getWorldPoint(this.m_localAnchorA); - var pB = this.m_bodyB.getWorldPoint(this.m_localAnchorB); - var d = Vec2.sub(pB, pA); - var axis = this.m_bodyA.getWorldVector(this.m_localXAxisA); - var translation = Vec2.dot(d, axis); - return translation; - }; - /** - * Get the current joint translation speed, usually in meters per second. - */ - PrismaticJoint.prototype.getJointSpeed = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - var rA = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter)); - var rB = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter)); - var p1 = Vec2.add(bA.m_sweep.c, rA); - var p2 = Vec2.add(bB.m_sweep.c, rB); - var d = Vec2.sub(p2, p1); - var axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA); - var vA = bA.m_linearVelocity; - var vB = bB.m_linearVelocity; - var wA = bA.m_angularVelocity; - var wB = bB.m_angularVelocity; - var speed = Vec2.dot(d, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB, wB, rB), Vec2.addCrossNumVec2(vA, wA, rA))); - return speed; - }; - /** - * Is the joint limit enabled? - */ - PrismaticJoint.prototype.isLimitEnabled = function () { - return this.m_enableLimit; - }; - /** - * Enable/disable the joint limit. - */ - PrismaticJoint.prototype.enableLimit = function (flag) { - if (flag != this.m_enableLimit) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableLimit = flag; - this.m_impulse.z = 0.0; - } - }; - /** - * Get the lower joint limit, usually in meters. - */ - PrismaticJoint.prototype.getLowerLimit = function () { - return this.m_lowerTranslation; - }; - /** - * Get the upper joint limit, usually in meters. - */ - PrismaticJoint.prototype.getUpperLimit = function () { - return this.m_upperTranslation; - }; - /** - * Set the joint limits, usually in meters. - */ - PrismaticJoint.prototype.setLimits = function (lower, upper) { - if (lower != this.m_lowerTranslation || upper != this.m_upperTranslation) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_lowerTranslation = lower; - this.m_upperTranslation = upper; - this.m_impulse.z = 0.0; - } - }; - /** - * Is the joint motor enabled? - */ - PrismaticJoint.prototype.isMotorEnabled = function () { - return this.m_enableMotor; - }; - /** - * Enable/disable the joint motor. - */ - PrismaticJoint.prototype.enableMotor = function (flag) { - if (flag == this.m_enableMotor) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableMotor = flag; - }; - /** - * Set the motor speed, usually in meters per second. - */ - PrismaticJoint.prototype.setMotorSpeed = function (speed) { - if (speed == this.m_motorSpeed) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_motorSpeed = speed; - }; - /** - * Set the maximum motor force, usually in N. - */ - PrismaticJoint.prototype.setMaxMotorForce = function (force) { - if (force == this.m_maxMotorForce) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_maxMotorForce = force; - }; - PrismaticJoint.prototype.getMaxMotorForce = function () { - return this.m_maxMotorForce; - }; - /** - * Get the motor speed, usually in meters per second. - */ - PrismaticJoint.prototype.getMotorSpeed = function () { - return this.m_motorSpeed; - }; - /** - * Get the current motor force given the inverse time step, usually in N. - */ - PrismaticJoint.prototype.getMotorForce = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - PrismaticJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - PrismaticJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - PrismaticJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - PrismaticJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_impulse.y; - }; - PrismaticJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective masses. - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.zero(); - d.addCombine(1, cB, 1, rB); - d.subCombine(1, cA, 1, rA); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Compute motor Jacobian and effective mass. - { - this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA); - this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_axis); - this.m_a2 = Vec2.crossVec2Vec2(rB, this.m_axis); - this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 - * this.m_a2; - if (this.m_motorMass > 0.0) { - this.m_motorMass = 1.0 / this.m_motorMass; - } - } - // Prismatic constraint. - { - this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA); - this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_perp); - this.m_s2 = Vec2.crossVec2Vec2(rB, this.m_perp); - Vec2.crossVec2Vec2(rA, this.m_perp); - var k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2; - var k12 = iA * this.m_s1 + iB * this.m_s2; - var k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2; - var k22 = iA + iB; - if (k22 == 0.0) { - // For bodies with fixed rotation. - k22 = 1.0; - } - var k23 = iA * this.m_a1 + iB * this.m_a2; - var k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2; - this.m_K.ex.set(k11, k12, k13); - this.m_K.ey.set(k12, k22, k23); - this.m_K.ez.set(k13, k23, k33); - } - // Compute motor and limit terms. - if (this.m_enableLimit) { - var jointTranslation = Vec2.dot(this.m_axis, d); - if (math_abs$3(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * SettingsInternal.linearSlop) { - this.m_limitState = LimitState$1.equalLimits; - } - else if (jointTranslation <= this.m_lowerTranslation) { - if (this.m_limitState != LimitState$1.atLowerLimit) { - this.m_limitState = LimitState$1.atLowerLimit; - this.m_impulse.z = 0.0; - } - } - else if (jointTranslation >= this.m_upperTranslation) { - if (this.m_limitState != LimitState$1.atUpperLimit) { - this.m_limitState = LimitState$1.atUpperLimit; - this.m_impulse.z = 0.0; - } - } - else { - this.m_limitState = LimitState$1.inactiveLimit; - this.m_impulse.z = 0.0; - } - } - else { - this.m_limitState = LimitState$1.inactiveLimit; - this.m_impulse.z = 0.0; - } - if (this.m_enableMotor == false) { - this.m_motorImpulse = 0.0; - } - if (step.warmStarting) { - // Account for variable time step. - this.m_impulse.mul(step.dtRatio); - this.m_motorImpulse *= step.dtRatio; - var P = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse - + this.m_impulse.z, this.m_axis); - var LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y - + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1; - var LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y - + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - else { - this.m_impulse.setZero(); - this.m_motorImpulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - PrismaticJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Solve linear motor constraint. - if (this.m_enableMotor && this.m_limitState != LimitState$1.equalLimits) { - var Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB, vA)) + this.m_a2 * wB - - this.m_a1 * wA; - var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot); - var oldImpulse = this.m_motorImpulse; - var maxImpulse = step.dt * this.m_maxMotorForce; - this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_motorImpulse - oldImpulse; - var P = Vec2.mulNumVec2(impulse, this.m_axis); - var LA = impulse * this.m_a1; - var LB = impulse * this.m_a2; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - var Cdot1 = Vec2.zero(); - Cdot1.x += Vec2.dot(this.m_perp, vB) + this.m_s2 * wB; - Cdot1.x -= Vec2.dot(this.m_perp, vA) + this.m_s1 * wA; - Cdot1.y = wB - wA; - if (this.m_enableLimit && this.m_limitState != LimitState$1.inactiveLimit) { - // Solve prismatic and limit constraint in block form. - var Cdot2 = 0; - Cdot2 += Vec2.dot(this.m_axis, vB) + this.m_a2 * wB; - Cdot2 -= Vec2.dot(this.m_axis, vA) + this.m_a1 * wA; - var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); - var f1 = Vec3.clone(this.m_impulse); - var df = this.m_K.solve33(Vec3.neg(Cdot)); - this.m_impulse.add(df); - if (this.m_limitState == LimitState$1.atLowerLimit) { - this.m_impulse.z = math_max(this.m_impulse.z, 0.0); - } - else if (this.m_limitState == LimitState$1.atUpperLimit) { - this.m_impulse.z = math_min$2(this.m_impulse.z, 0.0); - } - // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) + - // f1(1:2) - var b = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y)); - var f2r = Vec2.add(this.m_K.solve22(b), Vec2.neo(f1.x, f1.y)); - this.m_impulse.x = f2r.x; - this.m_impulse.y = f2r.y; - df = Vec3.sub(this.m_impulse, f1); - var P = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis); - var LA = df.x * this.m_s1 + df.y + df.z * this.m_a1; - var LB = df.x * this.m_s2 + df.y + df.z * this.m_a2; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - else { - // Limit is inactive, just solve the prismatic constraint in block form. - var df = this.m_K.solve22(Vec2.neg(Cdot1)); - this.m_impulse.x += df.x; - this.m_impulse.y += df.y; - var P = Vec2.mulNumVec2(df.x, this.m_perp); - var LA = df.x * this.m_s1 + df.y; - var LB = df.x * this.m_s2 + df.y; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - PrismaticJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Compute fresh Jacobians - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA)); - var axis = Rot.mulVec2(qA, this.m_localXAxisA); - var a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), axis); - var a2 = Vec2.crossVec2Vec2(rB, axis); - var perp = Rot.mulVec2(qA, this.m_localYAxisA); - var s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), perp); - var s2 = Vec2.crossVec2Vec2(rB, perp); - var impulse = new Vec3(); - var C1 = Vec2.zero(); - C1.x = Vec2.dot(perp, d); - C1.y = aB - aA - this.m_referenceAngle; - var linearError = math_abs$3(C1.x); - var angularError = math_abs$3(C1.y); - var linearSlop = SettingsInternal.linearSlop; - var maxLinearCorrection = SettingsInternal.maxLinearCorrection; - var active = false; // bool - var C2 = 0.0; - if (this.m_enableLimit) { - var translation = Vec2.dot(axis, d); - if (math_abs$3(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * linearSlop) { - // Prevent large angular corrections - C2 = clamp(translation, -maxLinearCorrection, maxLinearCorrection); - linearError = math_max(linearError, math_abs$3(translation)); - active = true; - } - else if (translation <= this.m_lowerTranslation) { - // Prevent large linear corrections and allow some slop. - C2 = clamp(translation - this.m_lowerTranslation + linearSlop, -maxLinearCorrection, 0.0); - linearError = Math - .max(linearError, this.m_lowerTranslation - translation); - active = true; - } - else if (translation >= this.m_upperTranslation) { - // Prevent large linear corrections and allow some slop. - C2 = clamp(translation - this.m_upperTranslation - linearSlop, 0.0, maxLinearCorrection); - linearError = Math - .max(linearError, translation - this.m_upperTranslation); - active = true; - } - } - if (active) { - var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; - var k12 = iA * s1 + iB * s2; - var k13 = iA * s1 * a1 + iB * s2 * a2; - var k22 = iA + iB; - if (k22 == 0.0) { - // For fixed rotation - k22 = 1.0; - } - var k23 = iA * a1 + iB * a2; - var k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2; - var K = new Mat33(); - K.ex.set(k11, k12, k13); - K.ey.set(k12, k22, k23); - K.ez.set(k13, k23, k33); - var C = new Vec3(); - C.x = C1.x; - C.y = C1.y; - C.z = C2; - impulse = K.solve33(Vec3.neg(C)); - } - else { - var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; - var k12 = iA * s1 + iB * s2; - var k22 = iA + iB; - if (k22 == 0.0) { - k22 = 1.0; - } - var K = new Mat22(); - K.ex.setNum(k11, k12); - K.ey.setNum(k12, k22); - var impulse1 = K.solve(Vec2.neg(C1)); - impulse.x = impulse1.x; - impulse.y = impulse1.y; - impulse.z = 0.0; - } - var P = Vec2.combine(impulse.x, perp, impulse.z, axis); - var LA = impulse.x * s1 + impulse.y + impulse.z * a1; - var LB = impulse.x * s2 + impulse.y + impulse.z * a2; - cA.subMul(mA, P); - aA -= iA * LA; - cB.addMul(mB, P); - aB += iB * LB; - this.m_bodyA.c_position.c = cA; - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c = cB; - this.m_bodyB.c_position.a = aB; - return linearError <= SettingsInternal.linearSlop - && angularError <= SettingsInternal.angularSlop; - }; - PrismaticJoint.TYPE = "prismatic-joint"; - return PrismaticJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var DEFAULTS$6 = { - ratio: 1.0 - }; - /** - * A gear joint is used to connect two joints together. Either joint can be a - * revolute or prismatic joint. You specify a gear ratio to bind the motions - * together: coordinate1 + ratio * coordinate2 = constant - * - * The ratio can be negative or positive. If one joint is a revolute joint and - * the other joint is a prismatic joint, then the ratio will have units of - * length or units of 1/length. Warning: You have to manually destroy the gear - * joint if joint1 or joint2 is destroyed. - * - * This definition requires two existing revolute or prismatic joints (any - * combination will work). - */ - var GearJoint = /** @class */ (function (_super) { - __extends(GearJoint, _super); - function GearJoint(def, bodyA, bodyB, joint1, joint2, ratio) { - var _this = this; - // @ts-ignore - if (!(_this instanceof GearJoint)) { - return new GearJoint(def, bodyA, bodyB, joint1, joint2, ratio); - } - def = options(def, DEFAULTS$6); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = GearJoint.TYPE; - _this.m_joint1 = joint1 ? joint1 : def.joint1; - _this.m_joint2 = joint2 ? joint2 : def.joint2; - _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; - _this.m_type1 = _this.m_joint1.getType(); - _this.m_type2 = _this.m_joint2.getType(); - // joint1 connects body A to body C - // joint2 connects body B to body D - var coordinateA; - var coordinateB; - // TODO_ERIN there might be some problem with the joint edges in Joint. - _this.m_bodyC = _this.m_joint1.getBodyA(); - _this.m_bodyA = _this.m_joint1.getBodyB(); - // Get geometry of joint1 - var xfA = _this.m_bodyA.m_xf; - var aA = _this.m_bodyA.m_sweep.a; - var xfC = _this.m_bodyC.m_xf; - var aC = _this.m_bodyC.m_sweep.a; - if (_this.m_type1 === RevoluteJoint.TYPE) { - var revolute = _this.m_joint1; - _this.m_localAnchorC = revolute.m_localAnchorA; - _this.m_localAnchorA = revolute.m_localAnchorB; - _this.m_referenceAngleA = revolute.m_referenceAngle; - _this.m_localAxisC = Vec2.zero(); - coordinateA = aA - aC - _this.m_referenceAngleA; - } - else { - var prismatic = _this.m_joint1; - _this.m_localAnchorC = prismatic.m_localAnchorA; - _this.m_localAnchorA = prismatic.m_localAnchorB; - _this.m_referenceAngleA = prismatic.m_referenceAngle; - _this.m_localAxisC = prismatic.m_localXAxisA; - var pC = _this.m_localAnchorC; - var pA = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA.q, _this.m_localAnchorA), Vec2.sub(xfA.p, xfC.p))); - coordinateA = Vec2.dot(pA, _this.m_localAxisC) - Vec2.dot(pC, _this.m_localAxisC); - } - _this.m_bodyD = _this.m_joint2.getBodyA(); - _this.m_bodyB = _this.m_joint2.getBodyB(); - // Get geometry of joint2 - var xfB = _this.m_bodyB.m_xf; - var aB = _this.m_bodyB.m_sweep.a; - var xfD = _this.m_bodyD.m_xf; - var aD = _this.m_bodyD.m_sweep.a; - if (_this.m_type2 === RevoluteJoint.TYPE) { - var revolute = _this.m_joint2; - _this.m_localAnchorD = revolute.m_localAnchorA; - _this.m_localAnchorB = revolute.m_localAnchorB; - _this.m_referenceAngleB = revolute.m_referenceAngle; - _this.m_localAxisD = Vec2.zero(); - coordinateB = aB - aD - _this.m_referenceAngleB; - } - else { - var prismatic = _this.m_joint2; - _this.m_localAnchorD = prismatic.m_localAnchorA; - _this.m_localAnchorB = prismatic.m_localAnchorB; - _this.m_referenceAngleB = prismatic.m_referenceAngle; - _this.m_localAxisD = prismatic.m_localXAxisA; - var pD = _this.m_localAnchorD; - var pB = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB.q, _this.m_localAnchorB), Vec2.sub(xfB.p, xfD.p))); - coordinateB = Vec2.dot(pB, _this.m_localAxisD) - Vec2.dot(pD, _this.m_localAxisD); - } - _this.m_constant = coordinateA + _this.m_ratio * coordinateB; - _this.m_impulse = 0.0; - return _this; - // Gear Joint: - // C0 = (coordinate1 + ratio * coordinate2)_initial - // C = (coordinate1 + ratio * coordinate2) - C0 = 0 - // J = [J1 ratio * J2] - // K = J * invM * JT - // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T - // - // Revolute: - // coordinate = rotation - // Cdot = angularVelocity - // J = [0 0 1] - // K = J * invM * JT = invI - // - // Prismatic: - // coordinate = dot(p - pg, ug) - // Cdot = dot(v + cross(w, r), ug) - // J = [ug cross(r, ug)] - // K = J * invM * JT = invMass + invI * cross(r, ug)^2 - } - /** @internal */ - GearJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - joint1: this.m_joint1, - joint2: this.m_joint2, - ratio: this.m_ratio, - // _constant: this.m_constant, - }; - }; - /** @internal */ - GearJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - data.joint1 = restore(Joint, data.joint1, world); - data.joint2 = restore(Joint, data.joint2, world); - var joint = new GearJoint(data); - // if (data._constant) joint.m_constant = data._constant; - return joint; - }; - /** @hidden */ - GearJoint.prototype._reset = function (def) { - // todo: implement other fields - if (Number.isFinite(def.ratio)) { - this.m_ratio = def.ratio; - } - }; - /** - * Get the first joint. - */ - GearJoint.prototype.getJoint1 = function () { - return this.m_joint1; - }; - /** - * Get the second joint. - */ - GearJoint.prototype.getJoint2 = function () { - return this.m_joint2; - }; - /** - * Set the gear ratio. - */ - GearJoint.prototype.setRatio = function (ratio) { - this.m_ratio = ratio; - }; - /** - * Get the gear ratio. - */ - GearJoint.prototype.getRatio = function () { - return this.m_ratio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - GearJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - GearJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - GearJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - GearJoint.prototype.getReactionTorque = function (inv_dt) { - var L = this.m_impulse * this.m_JwA; - return inv_dt * L; - }; - GearJoint.prototype.initVelocityConstraints = function (step) { - this.m_lcA = this.m_bodyA.m_sweep.localCenter; - this.m_lcB = this.m_bodyB.m_sweep.localCenter; - this.m_lcC = this.m_bodyC.m_sweep.localCenter; - this.m_lcD = this.m_bodyD.m_sweep.localCenter; - this.m_mA = this.m_bodyA.m_invMass; - this.m_mB = this.m_bodyB.m_invMass; - this.m_mC = this.m_bodyC.m_invMass; - this.m_mD = this.m_bodyD.m_invMass; - this.m_iA = this.m_bodyA.m_invI; - this.m_iB = this.m_bodyB.m_invI; - this.m_iC = this.m_bodyC.m_invI; - this.m_iD = this.m_bodyD.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var aC = this.m_bodyC.c_position.a; - var vC = this.m_bodyC.c_velocity.v; - var wC = this.m_bodyC.c_velocity.w; - var aD = this.m_bodyD.c_position.a; - var vD = this.m_bodyD.c_velocity.v; - var wD = this.m_bodyD.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var qC = Rot.neo(aC); - var qD = Rot.neo(aD); - this.m_mass = 0.0; - if (this.m_type1 == RevoluteJoint.TYPE) { - this.m_JvAC = Vec2.zero(); - this.m_JwA = 1.0; - this.m_JwC = 1.0; - this.m_mass += this.m_iA + this.m_iC; - } - else { - var u = Rot.mulVec2(qC, this.m_localAxisC); - var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); - this.m_JvAC = u; - this.m_JwC = Vec2.crossVec2Vec2(rC, u); - this.m_JwA = Vec2.crossVec2Vec2(rA, u); - 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; - } - if (this.m_type2 == RevoluteJoint.TYPE) { - this.m_JvBD = Vec2.zero(); - this.m_JwB = this.m_ratio; - this.m_JwD = this.m_ratio; - this.m_mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); - } - else { - var u = Rot.mulVec2(qD, this.m_localAxisD); - var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); - this.m_JvBD = Vec2.mulNumVec2(this.m_ratio, u); - this.m_JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); - this.m_JwB = this.m_ratio * Vec2.crossVec2Vec2(rB, u); - 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; - } - // Compute effective mass. - this.m_mass = this.m_mass > 0.0 ? 1.0 / this.m_mass : 0.0; - if (step.warmStarting) { - vA.addMul(this.m_mA * this.m_impulse, this.m_JvAC); - wA += this.m_iA * this.m_impulse * this.m_JwA; - vB.addMul(this.m_mB * this.m_impulse, this.m_JvBD); - wB += this.m_iB * this.m_impulse * this.m_JwB; - vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC); - wC -= this.m_iC * this.m_impulse * this.m_JwC; - vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD); - wD -= this.m_iD * this.m_impulse * this.m_JwD; - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - this.m_bodyC.c_velocity.v.setVec2(vC); - this.m_bodyC.c_velocity.w = wC; - this.m_bodyD.c_velocity.v.setVec2(vD); - this.m_bodyD.c_velocity.w = wD; - }; - GearJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var vC = this.m_bodyC.c_velocity.v; - var wC = this.m_bodyC.c_velocity.w; - var vD = this.m_bodyD.c_velocity.v; - var wD = this.m_bodyD.c_velocity.w; - var Cdot = Vec2.dot(this.m_JvAC, vA) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB) - Vec2.dot(this.m_JvBD, vD); - Cdot += (this.m_JwA * wA - this.m_JwC * wC) + (this.m_JwB * wB - this.m_JwD * wD); - var impulse = -this.m_mass * Cdot; - this.m_impulse += impulse; - vA.addMul(this.m_mA * impulse, this.m_JvAC); - wA += this.m_iA * impulse * this.m_JwA; - vB.addMul(this.m_mB * impulse, this.m_JvBD); - wB += this.m_iB * impulse * this.m_JwB; - vC.subMul(this.m_mC * impulse, this.m_JvAC); - wC -= this.m_iC * impulse * this.m_JwC; - vD.subMul(this.m_mD * impulse, this.m_JvBD); - wD -= this.m_iD * impulse * this.m_JwD; - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - this.m_bodyC.c_velocity.v.setVec2(vC); - this.m_bodyC.c_velocity.w = wC; - this.m_bodyD.c_velocity.v.setVec2(vD); - this.m_bodyD.c_velocity.w = wD; - }; - /** - * This returns true if the position errors are within tolerance. - */ - GearJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var cC = this.m_bodyC.c_position.c; - var aC = this.m_bodyC.c_position.a; - var cD = this.m_bodyD.c_position.c; - var aD = this.m_bodyD.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var qC = Rot.neo(aC); - var qD = Rot.neo(aD); - var linearError = 0.0; - var coordinateA; - var coordinateB; - var JvAC; - var JvBD; - var JwA; - var JwB; - var JwC; - var JwD; - var mass = 0.0; - if (this.m_type1 == RevoluteJoint.TYPE) { - JvAC = Vec2.zero(); - JwA = 1.0; - JwC = 1.0; - mass += this.m_iA + this.m_iC; - coordinateA = aA - aC - this.m_referenceAngleA; - } - else { - var u = Rot.mulVec2(qC, this.m_localAxisC); - var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); - JvAC = u; - JwC = Vec2.crossVec2Vec2(rC, u); - JwA = Vec2.crossVec2Vec2(rA, u); - mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA; - var pC = Vec2.sub(this.m_localAnchorC, this.m_lcC); - var pA = Rot.mulTVec2(qC, Vec2.add(rA, Vec2.sub(cA, cC))); - coordinateA = Vec2.dot(Vec2.sub(pA, pC), this.m_localAxisC); - } - if (this.m_type2 == RevoluteJoint.TYPE) { - JvBD = Vec2.zero(); - JwB = this.m_ratio; - JwD = this.m_ratio; - mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); - coordinateB = aB - aD - this.m_referenceAngleB; - } - else { - var u = Rot.mulVec2(qD, this.m_localAxisD); - var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); - JvBD = Vec2.mulNumVec2(this.m_ratio, u); - JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); - JwB = this.m_ratio * Vec2.crossVec2Vec2(rB, u); - mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * JwD * JwD + this.m_iB * JwB * JwB; - var pD = Vec2.sub(this.m_localAnchorD, this.m_lcD); - var pB = Rot.mulTVec2(qD, Vec2.add(rB, Vec2.sub(cB, cD))); - coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD); - } - var C = (coordinateA + this.m_ratio * coordinateB) - this.m_constant; - var impulse = 0.0; - if (mass > 0.0) { - impulse = -C / mass; - } - cA.addMul(this.m_mA * impulse, JvAC); - aA += this.m_iA * impulse * JwA; - cB.addMul(this.m_mB * impulse, JvBD); - aB += this.m_iB * impulse * JwB; - cC.subMul(this.m_mC * impulse, JvAC); - aC -= this.m_iC * impulse * JwC; - cD.subMul(this.m_mD * impulse, JvBD); - aD -= this.m_iD * impulse * JwD; - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - this.m_bodyC.c_position.c.setVec2(cC); - this.m_bodyC.c_position.a = aC; - this.m_bodyD.c_position.c.setVec2(cD); - this.m_bodyD.c_position.a = aD; - // TODO_ERIN not implemented - return linearError < SettingsInternal.linearSlop; - }; - GearJoint.TYPE = "gear-joint"; - return GearJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var DEFAULTS$5 = { - maxForce: 1.0, - maxTorque: 1.0, - correctionFactor: 0.3 - }; - /** - * A motor joint is used to control the relative motion between two bodies. A - * typical usage is to control the movement of a dynamic body with respect to - * the ground. - */ - var MotorJoint = /** @class */ (function (_super) { - __extends(MotorJoint, _super); - function MotorJoint(def, bodyA, bodyB) { - var _this = this; - // @ts-ignore - if (!(_this instanceof MotorJoint)) { - return new MotorJoint(def, bodyA, bodyB); - } - def = options(def, DEFAULTS$5); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = MotorJoint.TYPE; - _this.m_linearOffset = Vec2.isValid(def.linearOffset) ? Vec2.clone(def.linearOffset) : bodyA.getLocalPoint(bodyB.getPosition()); - _this.m_angularOffset = Number.isFinite(def.angularOffset) ? def.angularOffset : bodyB.getAngle() - bodyA.getAngle(); - _this.m_linearImpulse = Vec2.zero(); - _this.m_angularImpulse = 0.0; - _this.m_maxForce = def.maxForce; - _this.m_maxTorque = def.maxTorque; - _this.m_correctionFactor = def.correctionFactor; - return _this; - // Point-to-point constraint - // Cdot = v2 - v1 - // = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // - // r1 = offset - c1 - // r2 = -c2 - // Angle constraint - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 - } - /** @internal */ - MotorJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - maxForce: this.m_maxForce, - maxTorque: this.m_maxTorque, - correctionFactor: this.m_correctionFactor, - linearOffset: this.m_linearOffset, - angularOffset: this.m_angularOffset, - }; - }; - /** @internal */ - MotorJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new MotorJoint(data); - return joint; - }; - /** @hidden */ - MotorJoint.prototype._reset = function (def) { - if (Number.isFinite(def.angularOffset)) { - this.m_angularOffset = def.angularOffset; - } - if (Number.isFinite(def.maxForce)) { - this.m_maxForce = def.maxForce; - } - if (Number.isFinite(def.maxTorque)) { - this.m_maxTorque = def.maxTorque; - } - if (Number.isFinite(def.correctionFactor)) { - this.m_correctionFactor = def.correctionFactor; - } - if (Vec2.isValid(def.linearOffset)) { - this.m_linearOffset.set(def.linearOffset); - } - }; - /** - * Set the maximum friction force in N. - */ - MotorJoint.prototype.setMaxForce = function (force) { - this.m_maxForce = force; - }; - /** - * Get the maximum friction force in N. - */ - MotorJoint.prototype.getMaxForce = function () { - return this.m_maxForce; - }; - /** - * Set the maximum friction torque in N*m. - */ - MotorJoint.prototype.setMaxTorque = function (torque) { - this.m_maxTorque = torque; - }; - /** - * Get the maximum friction torque in N*m. - */ - MotorJoint.prototype.getMaxTorque = function () { - return this.m_maxTorque; - }; - /** - * Set the position correction factor in the range [0,1]. - */ - MotorJoint.prototype.setCorrectionFactor = function (factor) { - this.m_correctionFactor = factor; - }; - /** - * Get the position correction factor in the range [0,1]. - */ - MotorJoint.prototype.getCorrectionFactor = function () { - return this.m_correctionFactor; - }; - /** - * Set/get the target linear offset, in frame A, in meters. - */ - MotorJoint.prototype.setLinearOffset = function (linearOffset) { - if (linearOffset.x != this.m_linearOffset.x || linearOffset.y != this.m_linearOffset.y) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_linearOffset.set(linearOffset); - } - }; - MotorJoint.prototype.getLinearOffset = function () { - return this.m_linearOffset; - }; - /** - * Set/get the target angular offset, in radians. - */ - MotorJoint.prototype.setAngularOffset = function (angularOffset) { - if (angularOffset != this.m_angularOffset) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_angularOffset = angularOffset; - } - }; - MotorJoint.prototype.getAngularOffset = function () { - return this.m_angularOffset; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - MotorJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getPosition(); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - MotorJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getPosition(); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - MotorJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - MotorJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_angularImpulse; - }; - MotorJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective mass matrix. - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_linearOffset, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.neg(this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Upper 2 by 2 of K for point to point - var K = new Mat22(); - K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y; - K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; - K.ey.x = K.ex.y; - K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x; - this.m_linearMass = K.getInverse(); - this.m_angularMass = iA + iB; - if (this.m_angularMass > 0.0) { - this.m_angularMass = 1.0 / this.m_angularMass; - } - this.m_linearError = Vec2.zero(); - this.m_linearError.addCombine(1, cB, 1, this.m_rB); - this.m_linearError.subCombine(1, cA, 1, this.m_rA); - this.m_angularError = aB - aA - this.m_angularOffset; - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_linearImpulse.mul(step.dtRatio); - this.m_angularImpulse *= step.dtRatio; - var P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse); - } - else { - this.m_linearImpulse.setZero(); - this.m_angularImpulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - MotorJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var h = step.dt; - var inv_h = step.inv_dt; - // Solve angular friction - { - var Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError; - var impulse = -this.m_angularMass * Cdot; - var oldImpulse = this.m_angularImpulse; - var maxImpulse = h * this.m_maxTorque; - this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_angularImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve linear friction - { - var Cdot = Vec2.zero(); - Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError); - var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); - var oldImpulse = Vec2.clone(this.m_linearImpulse); - this.m_linearImpulse.add(impulse); - var maxImpulse = h * this.m_maxForce; - this.m_linearImpulse.clamp(maxImpulse); - impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); - vA.subMul(mA, impulse); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); - vB.addMul(mB, impulse); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - MotorJoint.prototype.solvePositionConstraints = function (step) { - return true; - }; - MotorJoint.TYPE = "motor-joint"; - return MotorJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_PI$2 = Math.PI; - /** @internal */ var DEFAULTS$4 = { - maxForce: 0.0, - frequencyHz: 5.0, - dampingRatio: 0.7 - }; - /** - * A mouse joint is used to make a point on a body track a specified world - * point. This a soft constraint with a maximum force. This allows the - * constraint to stretch and without applying huge forces. - * - * You need to call setTarget(target) every time that mouse is - * moved, to track the new location of the mouse. - * - * NOTE: this joint is not documented in the manual because it was developed to - * be used in the testbed. If you want to learn how to use the mouse joint, look - * at the testbed. - */ - var MouseJoint = /** @class */ (function (_super) { - __extends(MouseJoint, _super); - function MouseJoint(def, bodyA, bodyB, target) { - var _this = this; - // @ts-ignore - if (!(_this instanceof MouseJoint)) { - return new MouseJoint(def, bodyA, bodyB, target); - } - def = options(def, DEFAULTS$4); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = MouseJoint.TYPE; - if (Vec2.isValid(target)) { - _this.m_targetA = Vec2.clone(target); - } - else if (Vec2.isValid(def.target)) { - _this.m_targetA = Vec2.clone(def.target); - } - else { - _this.m_targetA = Vec2.zero(); - } - _this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), _this.m_targetA); - _this.m_maxForce = def.maxForce; - _this.m_impulse = Vec2.zero(); - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_beta = 0.0; - _this.m_gamma = 0.0; - // Solver temp - _this.m_rB = Vec2.zero(); - _this.m_localCenterB = Vec2.zero(); - _this.m_invMassB = 0.0; - _this.m_invIB = 0.0; - _this.m_mass = new Mat22(); - _this.m_C = Vec2.zero(); - return _this; - // p = attached point, m = mouse point - // C = p - m - // Cdot = v - // = v + cross(w, r) - // J = [I r_skew] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - } - /** @internal */ - MouseJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - target: this.m_targetA, - maxForce: this.m_maxForce, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - _localAnchorB: this.m_localAnchorB, - }; - }; - /** @internal */ - MouseJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - data.target = Vec2.clone(data.target); - var joint = new MouseJoint(data); - if (data._localAnchorB) { - joint.m_localAnchorB = data._localAnchorB; - } - return joint; - }; - /** @hidden */ - MouseJoint.prototype._reset = function (def) { - if (Number.isFinite(def.maxForce)) { - this.m_maxForce = def.maxForce; - } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; - } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; - } - }; - /** - * Use this to update the target point. - */ - MouseJoint.prototype.setTarget = function (target) { - if (Vec2.areEqual(target, this.m_targetA)) - return; - this.m_bodyB.setAwake(true); - this.m_targetA.set(target); - }; - MouseJoint.prototype.getTarget = function () { - return this.m_targetA; - }; - /** - * Set the maximum force in Newtons. - */ - MouseJoint.prototype.setMaxForce = function (force) { - this.m_maxForce = force; - }; - /** - * Get the maximum force in Newtons. - */ - MouseJoint.prototype.getMaxForce = function () { - return this.m_maxForce; - }; - /** - * Set the frequency in Hertz. - */ - MouseJoint.prototype.setFrequency = function (hz) { - this.m_frequencyHz = hz; - }; - /** - * Get the frequency in Hertz. - */ - MouseJoint.prototype.getFrequency = function () { - return this.m_frequencyHz; - }; - /** - * Set the damping ratio (dimensionless). - */ - MouseJoint.prototype.setDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - /** - * Get the damping ratio (dimensionless). - */ - MouseJoint.prototype.getDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - MouseJoint.prototype.getAnchorA = function () { - return Vec2.clone(this.m_targetA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - MouseJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - MouseJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(inv_dt, this.m_impulse); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - MouseJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * 0.0; - }; - /** - * Shift the origin for any points stored in world coordinates. - */ - MouseJoint.prototype.shiftOrigin = function (newOrigin) { - this.m_targetA.sub(newOrigin); - }; - MouseJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIB = this.m_bodyB.m_invI; - var position = this.m_bodyB.c_position; - var velocity = this.m_bodyB.c_velocity; - var cB = position.c; - var aB = position.a; - var vB = velocity.v; - var wB = velocity.w; - var qB = Rot.neo(aB); - var mass = this.m_bodyB.getMass(); - // Frequency - var omega = 2.0 * math_PI$2 * this.m_frequencyHz; - // Damping coefficient - var d = 2.0 * mass * this.m_dampingRatio * omega; - // Spring stiffness - var k = mass * (omega * omega); - // magic formulas - // gamma has units of inverse mass. - // beta has units of inverse time. - var h = step.dt; - this.m_gamma = h * (d + h * k); - if (this.m_gamma != 0.0) { - this.m_gamma = 1.0 / this.m_gamma; - } - this.m_beta = h * k * this.m_gamma; - // Compute the effective mass matrix. - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) * - // invI2 * skew(r2)] - // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y - // -r1.x*r1.y] - // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x] - var K = new Mat22(); - K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y - + this.m_gamma; - K.ex.y = -this.m_invIB * this.m_rB.x * this.m_rB.y; - K.ey.x = K.ex.y; - K.ey.y = this.m_invMassB + this.m_invIB * this.m_rB.x * this.m_rB.x - + this.m_gamma; - this.m_mass = K.getInverse(); - this.m_C.setVec2(cB); - this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA); - this.m_C.mul(this.m_beta); - // Cheat with some damping - wB *= 0.98; - if (step.warmStarting) { - this.m_impulse.mul(step.dtRatio); - vB.addMul(this.m_invMassB, this.m_impulse); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse); - } - else { - this.m_impulse.setZero(); - } - velocity.v.setVec2(vB); - velocity.w = wB; - }; - MouseJoint.prototype.solveVelocityConstraints = function (step) { - var velocity = this.m_bodyB.c_velocity; - var vB = Vec2.clone(velocity.v); - var wB = velocity.w; - // Cdot = v + cross(w, r) - var Cdot = Vec2.crossNumVec2(wB, this.m_rB); - Cdot.add(vB); - Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse); - Cdot.neg(); - var impulse = Mat22.mulVec2(this.m_mass, Cdot); - var oldImpulse = Vec2.clone(this.m_impulse); - this.m_impulse.add(impulse); - var maxImpulse = step.dt * this.m_maxForce; - this.m_impulse.clamp(maxImpulse); - impulse = Vec2.sub(this.m_impulse, oldImpulse); - vB.addMul(this.m_invMassB, impulse); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse); - velocity.v.setVec2(vB); - velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - MouseJoint.prototype.solvePositionConstraints = function (step) { - return true; - }; - MouseJoint.TYPE = "mouse-joint"; - return MouseJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$2 = Math.abs; - /** @internal */ var DEFAULTS$3 = { - collideConnected: true - }; - /** - * The pulley joint is connected to two bodies and two fixed ground points. The - * pulley supports a ratio such that: length1 + ratio * length2 <= constant - * - * Yes, the force transmitted is scaled by the ratio. - * - * Warning: the pulley joint can get a bit squirrelly by itself. They often work - * better when combined with prismatic joints. You should also cover the the - * anchor points with static shapes to prevent one side from going to zero - * length. - */ - var PulleyJoint = /** @class */ (function (_super) { - __extends(PulleyJoint, _super); - function PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio) { - var _this = this; - // @ts-ignore - if (!(_this instanceof PulleyJoint)) { - return new PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio); - } - def = options(def, DEFAULTS$3); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = PulleyJoint.TYPE; - _this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1.0, 1.0)); - _this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1.0, 1.0)); - _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1.0, 0.0)); - _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1.0, 0.0)); - _this.m_lengthA = Number.isFinite(def.lengthA) ? def.lengthA : Vec2.distance(anchorA, groundA); - _this.m_lengthB = Number.isFinite(def.lengthB) ? def.lengthB : Vec2.distance(anchorB, groundB); - _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; - _this.m_constant = _this.m_lengthA + _this.m_ratio * _this.m_lengthB; - _this.m_impulse = 0.0; - return _this; - // Pulley: - // length1 = norm(p1 - s1) - // length2 = norm(p2 - s2) - // C0 = (length1 + ratio * length2)_initial - // C = C0 - (length1 + ratio * length2) - // u1 = (p1 - s1) / norm(p1 - s1) - // u2 = (p2 - s2) / norm(p2 - s2) - // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2)) - // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)] - // K = J * invM * JT - // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 * - // cross(r2, u2)^2) - } - /** @internal */ - PulleyJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - groundAnchorA: this.m_groundAnchorA, - groundAnchorB: this.m_groundAnchorB, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - lengthA: this.m_lengthA, - lengthB: this.m_lengthB, - ratio: this.m_ratio, - }; - }; - /** @internal */ - PulleyJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new PulleyJoint(data); - return joint; - }; - /** @hidden */ - PulleyJoint.prototype._reset = function (def) { - if (Vec2.isValid(def.groundAnchorA)) { - this.m_groundAnchorA.set(def.groundAnchorA); - } - if (Vec2.isValid(def.groundAnchorB)) { - this.m_groundAnchorB.set(def.groundAnchorB); - } - if (Vec2.isValid(def.localAnchorA)) { - this.m_localAnchorA.set(def.localAnchorA); - } - else if (Vec2.isValid(def.anchorA)) { - this.m_localAnchorA.set(this.m_bodyA.getLocalPoint(def.anchorA)); - } - if (Vec2.isValid(def.localAnchorB)) { - this.m_localAnchorB.set(def.localAnchorB); - } - else if (Vec2.isValid(def.anchorB)) { - this.m_localAnchorB.set(this.m_bodyB.getLocalPoint(def.anchorB)); - } - if (Number.isFinite(def.lengthA)) { - this.m_lengthA = def.lengthA; - } - if (Number.isFinite(def.lengthB)) { - this.m_lengthB = def.lengthB; - } - if (Number.isFinite(def.ratio)) { - this.m_ratio = def.ratio; - } - }; - /** - * Get the first ground anchor. - */ - PulleyJoint.prototype.getGroundAnchorA = function () { - return this.m_groundAnchorA; - }; - /** - * Get the second ground anchor. - */ - PulleyJoint.prototype.getGroundAnchorB = function () { - return this.m_groundAnchorB; - }; - /** - * Get the current length of the segment attached to bodyA. - */ - PulleyJoint.prototype.getLengthA = function () { - return this.m_lengthA; - }; - /** - * Get the current length of the segment attached to bodyB. - */ - PulleyJoint.prototype.getLengthB = function () { - return this.m_lengthB; - }; - /** - * Get the pulley ratio. - */ - PulleyJoint.prototype.getRatio = function () { - return this.m_ratio; - }; - /** - * Get the current length of the segment attached to bodyA. - */ - PulleyJoint.prototype.getCurrentLengthA = function () { - var p = this.m_bodyA.getWorldPoint(this.m_localAnchorA); - var s = this.m_groundAnchorA; - return Vec2.distance(p, s); - }; - /** - * Get the current length of the segment attached to bodyB. - */ - PulleyJoint.prototype.getCurrentLengthB = function () { - var p = this.m_bodyB.getWorldPoint(this.m_localAnchorB); - var s = this.m_groundAnchorB; - return Vec2.distance(p, s); - }; - /** - * Shift the origin for any points stored in world coordinates. - * - * @param newOrigin - */ - PulleyJoint.prototype.shiftOrigin = function (newOrigin) { - this.m_groundAnchorA.sub(newOrigin); - this.m_groundAnchorB.sub(newOrigin); - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - PulleyJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - PulleyJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - PulleyJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - PulleyJoint.prototype.getReactionTorque = function (inv_dt) { - return 0.0; - }; - PulleyJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // Get the pulley axes. - this.m_uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA); - this.m_uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB); - var lengthA = this.m_uA.length(); - var lengthB = this.m_uB.length(); - if (lengthA > 10.0 * SettingsInternal.linearSlop) { - this.m_uA.mul(1.0 / lengthA); - } - else { - this.m_uA.setZero(); - } - if (lengthB > 10.0 * SettingsInternal.linearSlop) { - this.m_uB.mul(1.0 / lengthB); - } - else { - this.m_uB.setZero(); - } - // Compute effective mass. - var ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA); - var ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB); - var mA = this.m_invMassA + this.m_invIA * ruA * ruA; - var mB = this.m_invMassB + this.m_invIB * ruB * ruB; - this.m_mass = mA + this.m_ratio * this.m_ratio * mB; - if (this.m_mass > 0.0) { - this.m_mass = 1.0 / this.m_mass; - } - if (step.warmStarting) { - // Scale impulses to support variable time steps. - this.m_impulse *= step.dtRatio; - // Warm starting. - var PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA); - var PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB); - vA.addMul(this.m_invMassA, PA); - wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); - vB.addMul(this.m_invMassB, PB); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - PulleyJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA)); - var vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)); - var Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB); - var impulse = -this.m_mass * Cdot; - this.m_impulse += impulse; - var PA = Vec2.mulNumVec2(-impulse, this.m_uA); - var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB); - vA.addMul(this.m_invMassA, PA); - wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); - vB.addMul(this.m_invMassB, PB); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - PulleyJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // Get the pulley axes. - var uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA); - var uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB); - var lengthA = uA.length(); - var lengthB = uB.length(); - if (lengthA > 10.0 * SettingsInternal.linearSlop) { - uA.mul(1.0 / lengthA); - } - else { - uA.setZero(); - } - if (lengthB > 10.0 * SettingsInternal.linearSlop) { - uB.mul(1.0 / lengthB); - } - else { - uB.setZero(); - } - // Compute effective mass. - var ruA = Vec2.crossVec2Vec2(rA, uA); - var ruB = Vec2.crossVec2Vec2(rB, uB); - var mA = this.m_invMassA + this.m_invIA * ruA * ruA; - var mB = this.m_invMassB + this.m_invIB * ruB * ruB; - var mass = mA + this.m_ratio * this.m_ratio * mB; - if (mass > 0.0) { - mass = 1.0 / mass; - } - var C = this.m_constant - lengthA - this.m_ratio * lengthB; - var linearError = math_abs$2(C); - var impulse = -mass * C; - var PA = Vec2.mulNumVec2(-impulse, uA); - var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB); - cA.addMul(this.m_invMassA, PA); - aA += this.m_invIA * Vec2.crossVec2Vec2(rA, PA); - cB.addMul(this.m_invMassB, PB); - aB += this.m_invIB * Vec2.crossVec2Vec2(rB, PB); - this.m_bodyA.c_position.c = cA; - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c = cB; - this.m_bodyB.c_position.a = aB; - return linearError < SettingsInternal.linearSlop; - }; - PulleyJoint.TYPE = "pulley-joint"; - return PulleyJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_min$1 = Math.min; - /** @internal */ var LimitState; - (function (LimitState) { - LimitState[LimitState["inactiveLimit"] = 0] = "inactiveLimit"; - LimitState[LimitState["atLowerLimit"] = 1] = "atLowerLimit"; - LimitState[LimitState["atUpperLimit"] = 2] = "atUpperLimit"; - LimitState[LimitState["equalLimits"] = 3] = "equalLimits"; - })(LimitState || (LimitState = {})); - /** @internal */ var DEFAULTS$2 = { - maxLength: 0.0, - }; - /** - * A rope joint enforces a maximum distance between two points on two bodies. It - * has no other effect. - * - * Warning: if you attempt to change the maximum length during the simulation - * you will get some non-physical behavior. - * - * A model that would allow you to dynamically modify the length would have some - * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you - * want to dynamically control length. - */ - var RopeJoint = /** @class */ (function (_super) { - __extends(RopeJoint, _super); - function RopeJoint(def, bodyA, bodyB, anchor) { - var _this = this; - // @ts-ignore - if (!(_this instanceof RopeJoint)) { - return new RopeJoint(def, bodyA, bodyB, anchor); - } - def = options(def, DEFAULTS$2); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = RopeJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1.0, 0.0)); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1.0, 0.0)); - _this.m_maxLength = def.maxLength; - _this.m_mass = 0.0; - _this.m_impulse = 0.0; - _this.m_length = 0.0; - _this.m_state = LimitState.inactiveLimit; - return _this; - // Limit: - // C = norm(pB - pA) - L - // u = (pB - pA) / norm(pB - pA) - // Cdot = dot(u, vB + cross(wB, rB) - vA - cross(wA, rA)) - // J = [-u -cross(rA, u) u cross(rB, u)] - // K = J * invM * JT - // = invMassA + invIA * cross(rA, u)^2 + invMassB + invIB * cross(rB, u)^2 - } - /** @internal */ - RopeJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - maxLength: this.m_maxLength, - }; - }; - /** @internal */ - RopeJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new RopeJoint(data); - return joint; - }; - /** @hidden */ - RopeJoint.prototype._reset = function (def) { - if (Number.isFinite(def.maxLength)) { - this.m_maxLength = def.maxLength; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - RopeJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - RopeJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Set the maximum length of the rope. - */ - RopeJoint.prototype.setMaxLength = function (length) { - this.m_maxLength = length; - }; - /** - * Get the maximum length of the rope. - */ - RopeJoint.prototype.getMaxLength = function () { - return this.m_maxLength; - }; - RopeJoint.prototype.getLimitState = function () { - // TODO LimitState - return this.m_state; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - RopeJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - RopeJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - RopeJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - RopeJoint.prototype.getReactionTorque = function (inv_dt) { - return 0.0; - }; - RopeJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); - this.m_rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); - this.m_u = Vec2.zero(); - this.m_u.addCombine(1, cB, 1, this.m_rB); - this.m_u.subCombine(1, cA, 1, this.m_rA); - this.m_length = this.m_u.length(); - var C = this.m_length - this.m_maxLength; - if (C > 0.0) { - this.m_state = LimitState.atUpperLimit; - } - else { - this.m_state = LimitState.inactiveLimit; - } - if (this.m_length > SettingsInternal.linearSlop) { - this.m_u.mul(1.0 / this.m_length); - } - else { - this.m_u.setZero(); - this.m_mass = 0.0; - this.m_impulse = 0.0; - return; - } - // Compute effective mass. - var crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u); - var crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u); - var invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB; - this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0; - if (step.warmStarting) { - // Scale the impulse to support a variable time step. - this.m_impulse *= step.dtRatio; - var P = Vec2.mulNumVec2(this.m_impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - RopeJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - // Cdot = dot(u, v + cross(w, r)) - var vpA = Vec2.addCrossNumVec2(vA, wA, this.m_rA); - var vpB = Vec2.addCrossNumVec2(vB, wB, this.m_rB); - var C = this.m_length - this.m_maxLength; - var Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA)); - // Predictive constraint. - if (C < 0.0) { - Cdot += step.inv_dt * C; - } - var impulse = -this.m_mass * Cdot; - var oldImpulse = this.m_impulse; - this.m_impulse = math_min$1(0.0, this.m_impulse + impulse); - impulse = this.m_impulse - oldImpulse; - var P = Vec2.mulNumVec2(impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - RopeJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); - var u = Vec2.zero(); - u.addCombine(1, cB, 1, rB); - u.subCombine(1, cA, 1, rA); - var length = u.normalize(); - var C = length - this.m_maxLength; - C = clamp(C, 0.0, SettingsInternal.maxLinearCorrection); - var impulse = -this.m_mass * C; - var P = Vec2.mulNumVec2(impulse, u); - cA.subMul(this.m_invMassA, P); - aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P); - cB.addMul(this.m_invMassB, P); - aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P); - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return length - this.m_maxLength < SettingsInternal.linearSlop; - }; - RopeJoint.TYPE = "rope-joint"; - return RopeJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs$1 = Math.abs; - /** @internal */ var math_PI$1 = Math.PI; - /** @internal */ var DEFAULTS$1 = { - frequencyHz: 0.0, - dampingRatio: 0.0, - }; - /** - * A weld joint essentially glues two bodies together. A weld joint may distort - * somewhat because the island constraint solver is approximate. - */ - var WeldJoint = /** @class */ (function (_super) { - __extends(WeldJoint, _super); - function WeldJoint(def, bodyA, bodyB, anchor) { - var _this = this; - // @ts-ignore - if (!(_this instanceof WeldJoint)) { - return new WeldJoint(def, bodyA, bodyB, anchor); - } - def = options(def, DEFAULTS$1); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = WeldJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_impulse = new Vec3(); - _this.m_bias = 0.0; - _this.m_gamma = 0.0; - // Solver temp - _this.m_rA; - _this.m_rB; - _this.m_localCenterA; - _this.m_localCenterB; - _this.m_invMassA; - _this.m_invMassB; - _this.m_invIA; - _this.m_invIB; - _this.m_mass = new Mat33(); - return _this; - // Point-to-point constraint - // C = p2 - p1 - // Cdot = v2 - v1 - // / = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // Angle constraint - // C = angle2 - angle1 - referenceAngle - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 - } - /** @internal */ - WeldJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - referenceAngle: this.m_referenceAngle, - }; - }; - /** @internal */ - WeldJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new WeldJoint(data); - return joint; - }; - /** @hidden */ - WeldJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; - } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - WeldJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - WeldJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Get the reference angle. - */ - WeldJoint.prototype.getReferenceAngle = function () { - return this.m_referenceAngle; - }; - /** - * Set frequency in Hz. - */ - WeldJoint.prototype.setFrequency = function (hz) { - this.m_frequencyHz = hz; - }; - /** - * Get frequency in Hz. - */ - WeldJoint.prototype.getFrequency = function () { - return this.m_frequencyHz; - }; - /** - * Set damping ratio. - */ - WeldJoint.prototype.setDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - /** - * Get damping ratio. - */ - WeldJoint.prototype.getDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - WeldJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - WeldJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - WeldJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - WeldJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_impulse.z; - }; - WeldJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // [ 0 -1 0 1] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var K = new Mat33(); - K.ex.x = mA + mB + this.m_rA.y * this.m_rA.y * iA + this.m_rB.y * this.m_rB.y - * iB; - K.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; - K.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; - K.ex.y = K.ey.x; - K.ey.y = mA + mB + this.m_rA.x * this.m_rA.x * iA + this.m_rB.x * this.m_rB.x - * iB; - K.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; - K.ex.z = K.ez.x; - K.ey.z = K.ez.y; - K.ez.z = iA + iB; - if (this.m_frequencyHz > 0.0) { - K.getInverse22(this.m_mass); - var invM = iA + iB; - var m = invM > 0.0 ? 1.0 / invM : 0.0; - var C = aB - aA - this.m_referenceAngle; - // Frequency - var omega = 2.0 * math_PI$1 * this.m_frequencyHz; - // Damping coefficient - var d = 2.0 * m * this.m_dampingRatio * omega; - // Spring stiffness - var k = m * omega * omega; - // magic formulas - var h = step.dt; - this.m_gamma = h * (d + h * k); - this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0; - this.m_bias = C * h * k * this.m_gamma; - invM += this.m_gamma; - this.m_mass.ez.z = invM != 0.0 ? 1.0 / invM : 0.0; - } - else if (K.ez.z == 0.0) { - K.getInverse22(this.m_mass); - this.m_gamma = 0.0; - this.m_bias = 0.0; - } - else { - K.getSymInverse33(this.m_mass); - this.m_gamma = 0.0; - this.m_bias = 0.0; - } - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_impulse.mul(step.dtRatio); - var P = Vec2.neo(this.m_impulse.x, this.m_impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_impulse.z); - } - else { - this.m_impulse.setZero(); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - WeldJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - if (this.m_frequencyHz > 0.0) { - var Cdot2 = wB - wA; - var impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z); - this.m_impulse.z += impulse2; - wA -= iA * impulse2; - wB += iB * impulse2; - var Cdot1 = Vec2.zero(); - Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1)); - this.m_impulse.x += impulse1.x; - this.m_impulse.y += impulse1.y; - var P = Vec2.clone(impulse1); - vA.subMul(mA, P); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(mB, P); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, P); - } - else { - var Cdot1 = Vec2.zero(); - Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var Cdot2 = wB - wA; - var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); - var impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot)); - this.m_impulse.add(impulse); - var P = Vec2.neo(impulse.x, impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - WeldJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var positionError; - var angularError; - var K = new Mat33(); - K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB; - K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB; - K.ez.x = -rA.y * iA - rB.y * iB; - K.ex.y = K.ey.x; - K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB; - K.ez.y = rA.x * iA + rB.x * iB; - K.ex.z = K.ez.x; - K.ey.z = K.ez.y; - K.ez.z = iA + iB; - if (this.m_frequencyHz > 0.0) { - var C1 = Vec2.zero(); - C1.addCombine(1, cB, 1, rB); - C1.subCombine(1, cA, 1, rA); - positionError = C1.length(); - angularError = 0.0; - var P = Vec2.neg(K.solve22(C1)); - cA.subMul(mA, P); - aA -= iA * Vec2.crossVec2Vec2(rA, P); - cB.addMul(mB, P); - aB += iB * Vec2.crossVec2Vec2(rB, P); - } - else { - var C1 = Vec2.zero(); - C1.addCombine(1, cB, 1, rB); - C1.subCombine(1, cA, 1, rA); - var C2 = aB - aA - this.m_referenceAngle; - positionError = C1.length(); - angularError = math_abs$1(C2); - var C = new Vec3(C1.x, C1.y, C2); - var impulse = new Vec3(); - if (K.ez.z > 0.0) { - impulse = Vec3.neg(K.solve33(C)); - } - else { - var impulse2 = Vec2.neg(K.solve22(C1)); - impulse.set(impulse2.x, impulse2.y, 0.0); - } - var P = Vec2.neo(impulse.x, impulse.y); - cA.subMul(mA, P); - aA -= iA * (Vec2.crossVec2Vec2(rA, P) + impulse.z); - cB.addMul(mB, P); - aB += iB * (Vec2.crossVec2Vec2(rB, P) + impulse.z); - } - this.m_bodyA.c_position.c = cA; - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c = cB; - this.m_bodyB.c_position.a = aB; - return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; - }; - WeldJoint.TYPE = "weld-joint"; - return WeldJoint; - }(Joint)); - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_abs = Math.abs; - /** @internal */ var math_PI = Math.PI; - /** @internal */ var DEFAULTS = { - enableMotor: false, - maxMotorTorque: 0.0, - motorSpeed: 0.0, - frequencyHz: 2.0, - dampingRatio: 0.7, - }; - /** - * A wheel joint. This joint provides two degrees of freedom: translation along - * an axis fixed in bodyA and rotation in the plane. In other words, it is a - * point to line constraint with a rotational motor and a linear spring/damper. - * This joint is designed for vehicle suspensions. - */ - var WheelJoint = /** @class */ (function (_super) { - __extends(WheelJoint, _super); - function WheelJoint(def, bodyA, bodyB, anchor, axis) { - var _this = this; - // @ts-ignore - if (!(_this instanceof WheelJoint)) { - return new WheelJoint(def, bodyA, bodyB, anchor, axis); - } - def = options(def, DEFAULTS); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_ax = Vec2.zero(); - _this.m_ay = Vec2.zero(); - _this.m_type = WheelJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - if (Vec2.isValid(axis)) { - _this.m_localXAxisA = bodyA.getLocalVector(axis); - } - else if (Vec2.isValid(def.localAxisA)) { - _this.m_localXAxisA = Vec2.clone(def.localAxisA); - } - else if (Vec2.isValid(def.localAxis)) { - // localAxis is renamed to localAxisA, this is for backward compatibility - _this.m_localXAxisA = Vec2.clone(def.localAxis); - } - else { - _this.m_localXAxisA = Vec2.neo(1.0, 0.0); - } - _this.m_localYAxisA = Vec2.crossNumVec2(1.0, _this.m_localXAxisA); - _this.m_mass = 0.0; - _this.m_impulse = 0.0; - _this.m_motorMass = 0.0; - _this.m_motorImpulse = 0.0; - _this.m_springMass = 0.0; - _this.m_springImpulse = 0.0; - _this.m_maxMotorTorque = def.maxMotorTorque; - _this.m_motorSpeed = def.motorSpeed; - _this.m_enableMotor = def.enableMotor; - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_bias = 0.0; - _this.m_gamma = 0.0; - return _this; - // Linear constraint (point-to-line) - // d = pB - pA = xB + rB - xA - rA - // C = dot(ay, d) - // Cdot = dot(d, cross(wA, ay)) + dot(ay, vB + cross(wB, rB) - vA - cross(wA, - // rA)) - // = -dot(ay, vA) - dot(cross(d + rA, ay), wA) + dot(ay, vB) + dot(cross(rB, - // ay), vB) - // J = [-ay, -cross(d + rA, ay), ay, cross(rB, ay)] - // Spring linear constraint - // C = dot(ax, d) - // Cdot = = -dot(ax, vA) - dot(cross(d + rA, ax), wA) + dot(ax, vB) + - // dot(cross(rB, ax), vB) - // J = [-ax -cross(d+rA, ax) ax cross(rB, ax)] - // Motor rotational constraint - // Cdot = wB - wA - // J = [0 0 -1 0 0 1] - } - /** @internal */ - WheelJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - enableMotor: this.m_enableMotor, - maxMotorTorque: this.m_maxMotorTorque, - motorSpeed: this.m_motorSpeed, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - localAxisA: this.m_localXAxisA, - }; - }; - /** @internal */ - WheelJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new WheelJoint(data); - return joint; - }; - /** @hidden */ - WheelJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (def.localAxisA) { - this.m_localXAxisA.setVec2(def.localAxisA); - this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1.0, def.localAxisA)); - } - if (def.enableMotor !== undefined) { - this.m_enableMotor = def.enableMotor; - } - if (Number.isFinite(def.maxMotorTorque)) { - this.m_maxMotorTorque = def.maxMotorTorque; - } - if (Number.isFinite(def.motorSpeed)) { - this.m_motorSpeed = def.motorSpeed; - } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; - } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - WheelJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - WheelJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * The local joint axis relative to bodyA. - */ - WheelJoint.prototype.getLocalAxisA = function () { - return this.m_localXAxisA; - }; - /** - * Get the current joint translation, usually in meters. - */ - WheelJoint.prototype.getJointTranslation = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - var pA = bA.getWorldPoint(this.m_localAnchorA); - var pB = bB.getWorldPoint(this.m_localAnchorB); - var d = Vec2.sub(pB, pA); - var axis = bA.getWorldVector(this.m_localXAxisA); - var translation = Vec2.dot(d, axis); - return translation; - }; - /** - * Get the current joint translation speed, usually in meters per second. - */ - WheelJoint.prototype.getJointSpeed = function () { - var wA = this.m_bodyA.m_angularVelocity; - var wB = this.m_bodyB.m_angularVelocity; - return wB - wA; - }; - /** - * Is the joint motor enabled? - */ - WheelJoint.prototype.isMotorEnabled = function () { - return this.m_enableMotor; - }; - /** - * Enable/disable the joint motor. - */ - WheelJoint.prototype.enableMotor = function (flag) { - if (flag == this.m_enableMotor) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableMotor = flag; - }; - /** - * Set the motor speed, usually in radians per second. - */ - WheelJoint.prototype.setMotorSpeed = function (speed) { - if (speed == this.m_motorSpeed) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_motorSpeed = speed; - }; - /** - * Get the motor speed, usually in radians per second. - */ - WheelJoint.prototype.getMotorSpeed = function () { - return this.m_motorSpeed; - }; - /** - * Set/Get the maximum motor force, usually in N-m. - */ - WheelJoint.prototype.setMaxMotorTorque = function (torque) { - if (torque == this.m_maxMotorTorque) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_maxMotorTorque = torque; - }; - WheelJoint.prototype.getMaxMotorTorque = function () { - return this.m_maxMotorTorque; - }; - /** - * Get the current motor torque given the inverse time step, usually in N-m. - */ - WheelJoint.prototype.getMotorTorque = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - /** - * Set/Get the spring frequency in hertz. Setting the frequency to zero disables - * the spring. - */ - WheelJoint.prototype.setSpringFrequencyHz = function (hz) { - this.m_frequencyHz = hz; - }; - WheelJoint.prototype.getSpringFrequencyHz = function () { - return this.m_frequencyHz; - }; - /** - * Set/Get the spring damping ratio - */ - WheelJoint.prototype.setSpringDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - WheelJoint.prototype.getSpringDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - WheelJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - WheelJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - WheelJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - WheelJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - WheelJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective masses. - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.zero(); - d.addCombine(1, cB, 1, rB); - d.subCombine(1, cA, 1, rA); - // Point to line constraint - { - this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA); - this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ay); - this.m_sBy = Vec2.crossVec2Vec2(rB, this.m_ay); - this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy - * this.m_sBy; - if (this.m_mass > 0.0) { - this.m_mass = 1.0 / this.m_mass; - } - } - // Spring constraint - this.m_springMass = 0.0; - this.m_bias = 0.0; - this.m_gamma = 0.0; - if (this.m_frequencyHz > 0.0) { - this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA); - this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ax); - this.m_sBx = Vec2.crossVec2Vec2(rB, this.m_ax); - var invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx - * this.m_sBx; - if (invMass > 0.0) { - this.m_springMass = 1.0 / invMass; - var C = Vec2.dot(d, this.m_ax); - // Frequency - var omega = 2.0 * math_PI * this.m_frequencyHz; - // Damping coefficient - var damp = 2.0 * this.m_springMass * this.m_dampingRatio * omega; - // Spring stiffness - var k = this.m_springMass * omega * omega; - // magic formulas - var h = step.dt; - this.m_gamma = h * (damp + h * k); - if (this.m_gamma > 0.0) { - this.m_gamma = 1.0 / this.m_gamma; - } - this.m_bias = C * h * k * this.m_gamma; - this.m_springMass = invMass + this.m_gamma; - if (this.m_springMass > 0.0) { - this.m_springMass = 1.0 / this.m_springMass; - } - } - } - else { - this.m_springImpulse = 0.0; - } - // Rotational motor - if (this.m_enableMotor) { - this.m_motorMass = iA + iB; - if (this.m_motorMass > 0.0) { - this.m_motorMass = 1.0 / this.m_motorMass; - } - } - else { - this.m_motorMass = 0.0; - this.m_motorImpulse = 0.0; - } - if (step.warmStarting) { - // Account for variable time step. - this.m_impulse *= step.dtRatio; - this.m_springImpulse *= step.dtRatio; - this.m_motorImpulse *= step.dtRatio; - var P = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax); - var LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse; - var LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse; - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * LA; - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * LB; - } - else { - this.m_impulse = 0.0; - this.m_springImpulse = 0.0; - this.m_motorImpulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - WheelJoint.prototype.solveVelocityConstraints = function (step) { - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - // Solve spring constraint - { - var Cdot = Vec2.dot(this.m_ax, vB) - Vec2.dot(this.m_ax, vA) + this.m_sBx * wB - this.m_sAx * wA; - var impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse); - this.m_springImpulse += impulse; - var P = Vec2.mulNumVec2(impulse, this.m_ax); - var LA = impulse * this.m_sAx; - var LB = impulse * this.m_sBx; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - // Solve rotational motor constraint - { - var Cdot = wB - wA - this.m_motorSpeed; - var impulse = -this.m_motorMass * Cdot; - var oldImpulse = this.m_motorImpulse; - var maxImpulse = step.dt * this.m_maxMotorTorque; - this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_motorImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve point to line constraint - { - var Cdot = Vec2.dot(this.m_ay, vB) - Vec2.dot(this.m_ay, vA) + this.m_sBy * wB - this.m_sAy * wA; - var impulse = -this.m_mass * Cdot; - this.m_impulse += impulse; - var P = Vec2.mulNumVec2(impulse, this.m_ay); - var LA = impulse * this.m_sAy; - var LB = impulse * this.m_sBy; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - WheelJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.zero(); - d.addCombine(1, cB, 1, rB); - d.subCombine(1, cA, 1, rA); - var ay = Rot.mulVec2(qA, this.m_localYAxisA); - var sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), ay); - var sBy = Vec2.crossVec2Vec2(rB, ay); - var C = Vec2.dot(d, ay); - 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; - var impulse = k != 0.0 ? -C / k : 0.0; - var P = Vec2.mulNumVec2(impulse, ay); - var LA = impulse * sAy; - var LB = impulse * sBy; - cA.subMul(this.m_invMassA, P); - aA -= this.m_invIA * LA; - cB.addMul(this.m_invMassB, P); - aB += this.m_invIB * LB; - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return math_abs(C) <= SettingsInternal.linearSlop; - }; - WheelJoint.TYPE = "wheel-joint"; - return WheelJoint; - }(Joint)); - - var _a; - var SID = 0; - // Classes to be serialized as reference objects - var SERIALIZE_REF_TYPES = { - "World": World, - "Body": Body, - "Joint": Joint, - "Fixture": Fixture, - "Shape": Shape, + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + var extendStatics = function(d2, b2) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b3) { + d3.__proto__ = b3; + } || function(d3, b3) { + for (var p in b3) if (Object.prototype.hasOwnProperty.call(b3, p)) d3[p] = b3[p]; }; - // For deserializing reference objects by reference type - var DESERIALIZE_BY_REF_TYPE = { - "Vec2": Vec2, - "Vec3": Vec3, - "World": World, - "Body": Body, - "Joint": Joint, - "Fixture": Fixture, - "Shape": Shape, - }; - // For deserializing data objects by type field - var DESERIALIZE_BY_TYPE_FIELD = (_a = {}, - _a[Body.STATIC] = Body, - _a[Body.DYNAMIC] = Body, - _a[Body.KINEMATIC] = Body, - _a[ChainShape.TYPE] = ChainShape, - // [BoxShape.TYPE]: BoxShape, - _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); - var DEFAULT_OPTIONS = { - rootClass: World, - preSerialize: function (obj) { return obj; }, - postSerialize: function (data, obj) { return data; }, - preDeserialize: function (data) { return data; }, - postDeserialize: function (obj, data) { return obj; }, + return extendStatics(d2, b2); + }; + function __extends(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics(d2, b2); + function __() { + this.constructor = d2; + } + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); + } + var __assign = function() { + __assign = Object.assign || function __assign2(t) { + for (var s2, i = 1, n2 = arguments.length; i < n2; i++) { + s2 = arguments[i]; + for (var p in s2) if (Object.prototype.hasOwnProperty.call(s2, p)) t[p] = s2[p]; + } + return t; }; - var Serializer = /** @class */ (function () { - function Serializer(options) { - var _this = this; - this.toJson = function (root) { - var preSerialize = _this.options.preSerialize; - var postSerialize = _this.options.postSerialize; - var json = []; - // Breadth-first ref serialization queue - var refQueue = [root]; - var refMemoById = {}; - function addToRefQueue(value, typeName) { - value.__sid = value.__sid || ++SID; - if (!refMemoById[value.__sid]) { - refQueue.push(value); - var index = json.length + refQueue.length; - var ref = { - refIndex: index, - refType: typeName - }; - refMemoById[value.__sid] = ref; - } - return refMemoById[value.__sid]; - } - function serializeWithHooks(obj) { - obj = preSerialize(obj); - var data = obj._serialize(); - data = postSerialize(data, obj); - return data; - } - // traverse the object graph - // ref objects are pushed into the queue - // other objects are serialize in-place - function traverse(value, noRefType) { - if (noRefType === void 0) { noRefType = false; } - if (typeof value !== "object" || value === null) { - return value; - } - // object with _serialize function - if (typeof value._serialize === "function") { - if (!noRefType) { - for (var typeName in SERIALIZE_REF_TYPES) { - if (value instanceof SERIALIZE_REF_TYPES[typeName]) { - return addToRefQueue(value, typeName); - } - } - } - // object with _serialize function - value = serializeWithHooks(value); - } - // recursive for arrays any objects - if (Array.isArray(value)) { - var newValue = []; - for (var key = 0; key < value.length; key++) { - newValue[key] = traverse(value[key]); - } - value = newValue; - } - else { - var newValue = {}; - for (var key in value) { - if (value.hasOwnProperty(key)) { - newValue[key] = traverse(value[key]); - } - } - value = newValue; - } - return value; - } - while (refQueue.length) { - var obj = refQueue.shift(); - var str = traverse(obj, true); - json.push(str); - } - return json; - }; - this.fromJson = function (json) { - var preDeserialize = _this.options.preDeserialize; - var postDeserialize = _this.options.postDeserialize; - var rootClass = _this.options.rootClass; - var deserializedRefMemoByIndex = {}; - function deserializeWithHooks(classHint, data, context) { - if (!classHint || !classHint._deserialize) { - classHint = DESERIALIZE_BY_TYPE_FIELD[data.type]; - } - var deserializer = classHint && classHint._deserialize; - if (!deserializer) { - return; - } - data = preDeserialize(data); - var classDeserializeFn = classHint._deserialize; - var obj = classDeserializeFn(data, context, deserializeChild); - obj = postDeserialize(obj, data); - return obj; - } - /** - * Recursive callback function to deserialize a child data object or reference object. - * - * @param classHint suggested class to deserialize obj to - * @param dataOrRef data or reference object - * @param context for example world when deserializing bodies and joints - */ - function deserializeChild(classHint, dataOrRef, context) { - var isRefObject = dataOrRef.refIndex && dataOrRef.refType; - if (!isRefObject) { - return deserializeWithHooks(classHint, dataOrRef, context); - } - var ref = dataOrRef; - if (DESERIALIZE_BY_REF_TYPE[ref.refType]) { - classHint = DESERIALIZE_BY_REF_TYPE[ref.refType]; - } - var refIndex = ref.refIndex; - if (!deserializedRefMemoByIndex[refIndex]) { - var data = json[refIndex]; - var obj = deserializeWithHooks(classHint, data, context); - deserializedRefMemoByIndex[refIndex] = obj; - } - return deserializedRefMemoByIndex[refIndex]; - } - var root = deserializeWithHooks(rootClass, json[0], null); - return root; - }; - this.options = __assign(__assign({}, DEFAULT_OPTIONS), options); - } - return Serializer; - }()); - var worldSerializer = new Serializer({ - rootClass: World, - }); - Serializer.fromJson = worldSerializer.fromJson; - Serializer.toJson = worldSerializer.toJson; - - var Testbed = /** @class */ (function () { - function Testbed() { - /** World viewbox width. */ - this.width = 80; - /** World viewbox height. */ - this.height = 60; - /** World viewbox center vertical offset. */ - this.x = 0; - /** World viewbox center horizontal offset. */ - this.y = -10; - /** @hidden */ - this.scaleY = -1; - /** World simulation step frequency */ - this.hz = 60; - /** World simulation speed, default is 1 */ - this.speed = 1; - this.background = "#222222"; - this.activeKeys = {}; - /** callback, to be implemented by user */ - this.step = function (dt, t) { - return; - }; - /** callback, to be implemented by user */ - this.keydown = function (keyCode, label) { - return; - }; - /** callback, to be implemented by user */ - this.keyup = function (keyCode, label) { - return; - }; - } - /** - * Mounts testbed. Call start with a world to start simulation and rendering. - */ - Testbed.mount = function (options) { - throw new Error("Not implemented"); - }; - /** - * Mounts testbed if needed, then starts simulation and rendering. - * - * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`. - */ - Testbed.start = function (world) { - var testbed = Testbed.mount(); - testbed.start(world); - return testbed; - }; - Testbed.prototype.color = function (r, g, b) { - r = r * 256 | 0; - g = g * 256 | 0; - b = b * 256 | 0; - return "rgb(" + r + ", " + g + ", " + b + ")"; - }; - return Testbed; - }()); - /** @internal */ - function testbed(a, b) { - var callback; - var options; - if (typeof a === "function") { - callback = a; - options = b; - } - else if (typeof b === "function") { - callback = b; - options = a; - } - else { - options = a !== null && a !== void 0 ? a : b; - } - var testbed = Testbed.mount(options); - if (callback) { - // this is for backwards compatibility - var world = callback(testbed) || testbed.world; - testbed.start(world); - } - else { - return testbed; - } + return __assign.apply(this, arguments); + }; + var options = function(input2, defaults) { + if (input2 === null || typeof input2 === "undefined") { + input2 = {}; } - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** - * A rectangle polygon which extend PolygonShape. - */ - var BoxShape = /** @class */ (function (_super) { - __extends(BoxShape, _super); - /** - * - * @param halfWidth - * @param halfHeight - * @param center coordinate of the center of the box relative to the body - * @param angle angle of the box relative to the body - */ - function BoxShape(halfWidth, halfHeight, center, angle) { - var _this = this; - // @ts-ignore - if (!(_this instanceof BoxShape)) { - return new BoxShape(halfWidth, halfHeight, center, angle); - } - _this = _super.call(this) || this; - _this._setAsBox(halfWidth, halfHeight, center, angle); - return _this; - } - // note that box is serialized/deserialized as polygon - BoxShape.TYPE = "polygon"; - return BoxShape; - }(PolygonShape)); - var Box = BoxShape; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - Contact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact); - /** @internal */ function CircleCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - CollideCircles(manifold, fixtureA.getShape(), xfA, fixtureB.getShape(), xfB); + var output2 = __assign({}, input2); + for (var key in defaults) { + if (defaults.hasOwnProperty(key) && typeof input2[key] === "undefined") { + output2[key] = defaults[key]; + } } - /** @internal */ var pA = vec2(0, 0); - /** @internal */ var pB = vec2(0, 0); - var CollideCircles = function (manifold, circleA, xfA, circleB, xfB) { - manifold.pointCount = 0; - transformVec2(pA, xfA, circleA.m_p); - transformVec2(pB, xfB, circleB.m_p); - var distSqr = distSqrVec2(pB, pA); - var rA = circleA.m_radius; - var rB = circleB.m_radius; - var radius = rA + rB; - if (distSqr > radius * radius) { - return; - } - manifold.type = exports.ManifoldType.e_circles; - copyVec2(manifold.localPoint, circleA.m_p); - zeroVec2(manifold.localNormal); - manifold.pointCount = 1; - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, exports.ContactFeatureType.e_vertex, 0, exports.ContactFeatureType.e_vertex); - }; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - Contact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact); - Contact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact); - /** @internal */ function EdgeCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - var shapeA = fixtureA.getShape(); - var shapeB = fixtureB.getShape(); - CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB); + if (typeof Object.getOwnPropertySymbols === "function") { + var symbols = Object.getOwnPropertySymbols(defaults); + for (var i = 0; i < symbols.length; i++) { + var symbol = symbols[i]; + if (defaults.propertyIsEnumerable(symbol) && typeof input2[symbol] === "undefined") { + output2[symbol] = defaults[symbol]; + } + } } - function ChainCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - var chain = fixtureA.getShape(); - var edge = new EdgeShape(); - chain.getChildEdge(edge, indexA); - var shapeA = edge; - var shapeB = fixtureB.getShape(); - CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB); + return output2; + }; + var math_random = Math.random; + var EPSILON = 1e-9; + var isFinite = Number.isFinite; + function nextPowerOfTwo(x2) { + x2 |= x2 >> 1; + x2 |= x2 >> 2; + x2 |= x2 >> 4; + x2 |= x2 >> 8; + x2 |= x2 >> 16; + return x2 + 1; + } + function isPowerOfTwo(x2) { + return x2 > 0 && (x2 & x2 - 1) === 0; + } + function mod(num, min, max) { + if (typeof min === "undefined") { + max = 1; + min = 0; + } else if (typeof max === "undefined") { + max = min; + min = 0; } - /** @internal */ var e = vec2(0, 0); - /** @internal */ var e1 = vec2(0, 0); - /** @internal */ var e2 = vec2(0, 0); - /** @internal */ var Q = vec2(0, 0); - /** @internal */ var P = vec2(0, 0); - /** @internal */ var n$2 = vec2(0, 0); - // Compute contact points for edge versus circle. - // This accounts for edge connectivity. - var CollideEdgeCircle = function (manifold, edgeA, xfA, circleB, xfB) { - manifold.pointCount = 0; - // Compute circle in frame of edge - retransformVec2(Q, xfB, xfA, circleB.m_p); - var A = edgeA.m_vertex1; - var B = edgeA.m_vertex2; - subVec2(e, B, A); - // Barycentric coordinates - var u = dotVec2(e, B) - dotVec2(e, Q); - var v = dotVec2(e, Q) - dotVec2(e, A); - var radius = edgeA.m_radius + circleB.m_radius; - // Region A - if (v <= 0.0) { - copyVec2(P, A); - var dd_1 = distSqrVec2(Q, A); - if (dd_1 > radius * radius) { - return; - } - // Is there an edge connected to A? - if (edgeA.m_hasVertex0) { - var A1 = edgeA.m_vertex0; - var B1 = A; - subVec2(e1, B1, A1); - var u1 = dotVec2(e1, B1) - dotVec2(e1, Q); - // Is the circle in Region AB of the previous edge? - if (u1 > 0.0) { - return; - } - } - manifold.type = exports.ManifoldType.e_circles; - zeroVec2(manifold.localNormal); - copyVec2(manifold.localPoint, P); - manifold.pointCount = 1; - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, exports.ContactFeatureType.e_vertex, 0, exports.ContactFeatureType.e_vertex); - return; - } - // Region B - if (u <= 0.0) { - copyVec2(P, B); - var dd_2 = distSqrVec2(Q, P); - if (dd_2 > radius * radius) { - return; - } - // Is there an edge connected to B? - if (edgeA.m_hasVertex3) { - var B2 = edgeA.m_vertex3; - var A2 = B; - subVec2(e2, B2, A2); - var v2 = dotVec2(e2, Q) - dotVec2(e2, A2); - // Is the circle in Region AB of the next edge? - if (v2 > 0.0) { - return; - } - } - manifold.type = exports.ManifoldType.e_circles; - zeroVec2(manifold.localNormal); - copyVec2(manifold.localPoint, P); - manifold.pointCount = 1; - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(1, exports.ContactFeatureType.e_vertex, 0, exports.ContactFeatureType.e_vertex); - return; - } - // Region AB - var den = lengthSqrVec2(e); - combine2Vec2(P, u / den, A, v / den, B); - var dd = distSqrVec2(Q, P); - if (dd > radius * radius) { - return; - } - crossNumVec2(n$2, 1, e); - if (dotVec2(n$2, Q) - dotVec2(n$2, A) < 0.0) { - negVec2(n$2); - } - normalizeVec2(n$2); - manifold.type = exports.ManifoldType.e_faceA; - copyVec2(manifold.localNormal, n$2); - copyVec2(manifold.localPoint, A); - manifold.pointCount = 1; - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, exports.ContactFeatureType.e_face, 0, exports.ContactFeatureType.e_vertex); - }; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var incidentEdge = [new ClipVertex(), new ClipVertex()]; - /** @internal */ var clipPoints1$1 = [new ClipVertex(), new ClipVertex()]; - /** @internal */ var clipPoints2$1 = [new ClipVertex(), new ClipVertex()]; - /** @internal */ var clipSegmentToLineNormal = vec2(0, 0); - /** @internal */ var v1 = vec2(0, 0); - /** @internal */ var n$1 = vec2(0, 0); - /** @internal */ var xf$1 = transform(0, 0, 0); - /** @internal */ var v11 = vec2(0, 0); - /** @internal */ var v12 = vec2(0, 0); - /** @internal */ var localTangent = vec2(0, 0); - /** @internal */ var localNormal = vec2(0, 0); - /** @internal */ var planePoint = vec2(0, 0); - /** @internal */ var tangent = vec2(0, 0); - /** @internal */ var normal$1 = vec2(0, 0); - /** @internal */ var normal1$1 = vec2(0, 0); - Contact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact); - /** @internal */ function PolygonContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - CollidePolygons(manifold, fixtureA.getShape(), xfA, fixtureB.getShape(), xfB); + if (max > min) { + num = (num - min) % (max - min); + return num + (num < 0 ? max : min); + } else { + num = (num - max) % (min - max); + return num + (num <= 0 ? min : max); } - /** - * Find the max separation between poly1 and poly2 using edge normals from - * poly1. - */ - /** @internal */ function findMaxSeparation(poly1, xf1, poly2, xf2, output) { - var count1 = poly1.m_count; - var count2 = poly2.m_count; - var n1s = poly1.m_normals; - var v1s = poly1.m_vertices; - var v2s = poly2.m_vertices; - detransformTransform(xf$1, xf2, xf1); - var bestIndex = 0; - var maxSeparation = -Infinity; - for (var i = 0; i < count1; ++i) { - // Get poly1 normal in frame2. - rotVec2(n$1, xf$1.q, n1s[i]); - transformVec2(v1, xf$1, v1s[i]); - // Find deepest point for normal i. - var si = Infinity; - for (var j = 0; j < count2; ++j) { - var sij = dotVec2(n$1, v2s[j]) - dotVec2(n$1, v1); - if (sij < si) { - si = sij; - } - } - if (si > maxSeparation) { - maxSeparation = si; - bestIndex = i; - } - } - // used to keep last FindMaxSeparation call values - output.maxSeparation = maxSeparation; - output.bestIndex = bestIndex; + } + function clamp(num, min, max) { + if (num < min) { + return min; + } else if (num > max) { + return max; + } else { + return num; } - /** @internal */ function findIncidentEdge(clipVertex, poly1, xf1, edge1, poly2, xf2) { - var normals1 = poly1.m_normals; - var count2 = poly2.m_count; - var vertices2 = poly2.m_vertices; - var normals2 = poly2.m_normals; - // Get the normal of the reference edge in poly2's frame. - rerotVec2(normal1$1, xf2.q, xf1.q, normals1[edge1]); - // Find the incident edge on poly2. - var index = 0; - var minDot = Infinity; - for (var i = 0; i < count2; ++i) { - var dot = dotVec2(normal1$1, normals2[i]); - if (dot < minDot) { - minDot = dot; - index = i; - } - } - // Build the clip vertices for the incident edge. - var i1 = index; - var i2 = i1 + 1 < count2 ? i1 + 1 : 0; - transformVec2(clipVertex[0].v, xf2, vertices2[i1]); - clipVertex[0].id.setFeatures(edge1, exports.ContactFeatureType.e_face, i1, exports.ContactFeatureType.e_vertex); - transformVec2(clipVertex[1].v, xf2, vertices2[i2]); - clipVertex[1].id.setFeatures(edge1, exports.ContactFeatureType.e_face, i2, exports.ContactFeatureType.e_vertex); + } + function random(min, max) { + if (typeof min === "undefined") { + max = 1; + min = 0; + } else if (typeof max === "undefined") { + max = min; + min = 0; } - /** @internal */ var maxSeparation = { - maxSeparation: 0, - bestIndex: 0, - }; - /** - * - * Find edge normal of max separation on A - return if separating axis is found
- * Find edge normal of max separation on B - return if separation axis is found
- * Choose reference edge as min(minA, minB)
- * Find incident edge
- * Clip - * - * The normal points from 1 to 2 - */ - var CollidePolygons = function (manifold, polyA, xfA, polyB, xfB) { - manifold.pointCount = 0; - var totalRadius = polyA.m_radius + polyB.m_radius; - findMaxSeparation(polyA, xfA, polyB, xfB, maxSeparation); - var edgeA = maxSeparation.bestIndex; - var separationA = maxSeparation.maxSeparation; - if (separationA > totalRadius) - return; - findMaxSeparation(polyB, xfB, polyA, xfA, maxSeparation); - var edgeB = maxSeparation.bestIndex; - var separationB = maxSeparation.maxSeparation; - if (separationB > totalRadius) - return; - var poly1; // reference polygon - var poly2; // incident polygon - var xf1; - var xf2; - var edge1; // reference edge - var flip; - var k_tol = 0.1 * SettingsInternal.linearSlop; - if (separationB > separationA + k_tol) { - poly1 = polyB; - poly2 = polyA; - xf1 = xfB; - xf2 = xfA; - edge1 = edgeB; - manifold.type = exports.ManifoldType.e_faceB; - flip = true; - } - else { - poly1 = polyA; - poly2 = polyB; - xf1 = xfA; - xf2 = xfB; - edge1 = edgeA; - manifold.type = exports.ManifoldType.e_faceA; - flip = false; - } - incidentEdge[0].recycle(), incidentEdge[1].recycle(); - findIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2); - var count1 = poly1.m_count; - var vertices1 = poly1.m_vertices; - var iv1 = edge1; - var iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0; - copyVec2(v11, vertices1[iv1]); - copyVec2(v12, vertices1[iv2]); - subVec2(localTangent, v12, v11); - normalizeVec2(localTangent); - crossVec2Num(localNormal, localTangent, 1.0); - combine2Vec2(planePoint, 0.5, v11, 0.5, v12); - rotVec2(tangent, xf1.q, localTangent); - crossVec2Num(normal$1, tangent, 1.0); - transformVec2(v11, xf1, v11); - transformVec2(v12, xf1, v12); - // Face offset. - var frontOffset = dotVec2(normal$1, v11); - // Side offsets, extended by polytope skin thickness. - var sideOffset1 = -dotVec2(tangent, v11) + totalRadius; - var sideOffset2 = dotVec2(tangent, v12) + totalRadius; - // Clip incident edge against extruded edge1 side edges. - clipPoints1$1[0].recycle(), clipPoints1$1[1].recycle(); - clipPoints2$1[0].recycle(), clipPoints2$1[1].recycle(); - // Clip to box side 1 - setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y); - var np1 = clipSegmentToLine(clipPoints1$1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1); - if (np1 < 2) { - return; - } - // Clip to negative box side 1 - setVec2(clipSegmentToLineNormal, tangent.x, tangent.y); - var np2 = clipSegmentToLine(clipPoints2$1, clipPoints1$1, clipSegmentToLineNormal, sideOffset2, iv2); - if (np2 < 2) { - return; - } - // Now clipPoints2 contains the clipped points. - copyVec2(manifold.localNormal, localNormal); - copyVec2(manifold.localPoint, planePoint); - var pointCount = 0; - for (var i = 0; i < clipPoints2$1.length /* maxManifoldPoints */; ++i) { - var separation = dotVec2(normal$1, clipPoints2$1[i].v) - frontOffset; - if (separation <= totalRadius) { - var cp = manifold.points[pointCount]; - detransformVec2(cp.localPoint, xf2, clipPoints2$1[i].v); - cp.id.set(clipPoints2$1[i].id); - if (flip) { - // Swap features - cp.id.swapFeatures(); - } - ++pointCount; - } + return min === max ? min : math_random() * (max - min) + min; + } + var math = Object.create(Math); + math.EPSILON = EPSILON; + math.isFinite = isFinite; + math.nextPowerOfTwo = nextPowerOfTwo; + math.isPowerOfTwo = isPowerOfTwo; + math.mod = mod; + math.clamp = clamp; + math.random = random; + var math_abs$9 = Math.abs; + var math_sqrt$5 = Math.sqrt; + var math_max$8 = Math.max; + var math_min$8 = Math.min; + var Vec2 = ( + /** @class */ + function() { + function Vec22(x2, y) { + if (!(this instanceof Vec22)) { + return new Vec22(x2, y); + } + if (typeof x2 === "undefined") { + this.x = 0; + this.y = 0; + } else if (typeof x2 === "object") { + this.x = x2.x; + this.y = x2.y; + } else { + this.x = x2; + this.y = y; + } + } + Vec22.prototype._serialize = function() { + return { + x: this.x, + y: this.y + }; + }; + Vec22._deserialize = function(data) { + var obj = Object.create(Vec22.prototype); + obj.x = data.x; + obj.y = data.y; + return obj; + }; + Vec22.zero = function() { + var obj = Object.create(Vec22.prototype); + obj.x = 0; + obj.y = 0; + return obj; + }; + Vec22.neo = function(x2, y) { + var obj = Object.create(Vec22.prototype); + obj.x = x2; + obj.y = y; + return obj; + }; + Vec22.clone = function(v3) { + return Vec22.neo(v3.x, v3.y); + }; + Vec22.prototype.toString = function() { + return JSON.stringify(this); + }; + Vec22.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Number.isFinite(obj.x) && Number.isFinite(obj.y); + }; + Vec22.assert = function(o) { + }; + Vec22.prototype.clone = function() { + return Vec22.clone(this); + }; + Vec22.prototype.setZero = function() { + this.x = 0; + this.y = 0; + return this; + }; + Vec22.prototype.set = function(x2, y) { + if (typeof x2 === "object") { + this.x = x2.x; + this.y = x2.y; + } else { + this.x = x2; + this.y = y; + } + return this; + }; + Vec22.prototype.setNum = function(x2, y) { + this.x = x2; + this.y = y; + return this; + }; + Vec22.prototype.setVec2 = function(value) { + this.x = value.x; + this.y = value.y; + return this; + }; + Vec22.prototype.wSet = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return this.setCombine(a2, v3, b2, w); + } else { + return this.setMul(a2, v3); + } + }; + Vec22.prototype.setCombine = function(a2, v3, b2, w) { + var x2 = a2 * v3.x + b2 * w.x; + var y = a2 * v3.y + b2 * w.y; + this.x = x2; + this.y = y; + return this; + }; + Vec22.prototype.setMul = function(a2, v3) { + var x2 = a2 * v3.x; + var y = a2 * v3.y; + this.x = x2; + this.y = y; + return this; + }; + Vec22.prototype.add = function(w) { + this.x += w.x; + this.y += w.y; + return this; + }; + Vec22.prototype.wAdd = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return this.addCombine(a2, v3, b2, w); + } else { + return this.addMul(a2, v3); + } + }; + Vec22.prototype.addCombine = function(a2, v3, b2, w) { + var x2 = a2 * v3.x + b2 * w.x; + var y = a2 * v3.y + b2 * w.y; + this.x += x2; + this.y += y; + return this; + }; + Vec22.prototype.addMul = function(a2, v3) { + var x2 = a2 * v3.x; + var y = a2 * v3.y; + this.x += x2; + this.y += y; + return this; + }; + Vec22.prototype.wSub = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return this.subCombine(a2, v3, b2, w); + } else { + return this.subMul(a2, v3); + } + }; + Vec22.prototype.subCombine = function(a2, v3, b2, w) { + var x2 = a2 * v3.x + b2 * w.x; + var y = a2 * v3.y + b2 * w.y; + this.x -= x2; + this.y -= y; + return this; + }; + Vec22.prototype.subMul = function(a2, v3) { + var x2 = a2 * v3.x; + var y = a2 * v3.y; + this.x -= x2; + this.y -= y; + return this; + }; + Vec22.prototype.sub = function(w) { + this.x -= w.x; + this.y -= w.y; + return this; + }; + Vec22.prototype.mul = function(m) { + this.x *= m; + this.y *= m; + return this; + }; + Vec22.prototype.length = function() { + return Vec22.lengthOf(this); + }; + Vec22.prototype.lengthSquared = function() { + return Vec22.lengthSquared(this); + }; + Vec22.prototype.normalize = function() { + var length = this.length(); + if (length < EPSILON) { + return 0; + } + var invLength = 1 / length; + this.x *= invLength; + this.y *= invLength; + return length; + }; + Vec22.lengthOf = function(v3) { + return math_sqrt$5(v3.x * v3.x + v3.y * v3.y); + }; + Vec22.lengthSquared = function(v3) { + return v3.x * v3.x + v3.y * v3.y; + }; + Vec22.distance = function(v3, w) { + var dx = v3.x - w.x; + var dy = v3.y - w.y; + return math_sqrt$5(dx * dx + dy * dy); + }; + Vec22.distanceSquared = function(v3, w) { + var dx = v3.x - w.x; + var dy = v3.y - w.y; + return dx * dx + dy * dy; + }; + Vec22.areEqual = function(v3, w) { + return v3 === w || typeof w === "object" && w !== null && v3.x === w.x && v3.y === w.y; + }; + Vec22.skew = function(v3) { + return Vec22.neo(-v3.y, v3.x); + }; + Vec22.dot = function(v3, w) { + return v3.x * w.x + v3.y * w.y; + }; + Vec22.cross = function(v3, w) { + if (typeof w === "number") { + return Vec22.neo(w * v3.y, -w * v3.x); + } else if (typeof v3 === "number") { + return Vec22.neo(-v3 * w.y, v3 * w.x); + } else { + return v3.x * w.y - v3.y * w.x; + } + }; + Vec22.crossVec2Vec2 = function(v3, w) { + return v3.x * w.y - v3.y * w.x; + }; + Vec22.crossVec2Num = function(v3, w) { + return Vec22.neo(w * v3.y, -w * v3.x); + }; + Vec22.crossNumVec2 = function(v3, w) { + return Vec22.neo(-v3 * w.y, v3 * w.x); + }; + Vec22.addCross = function(a2, v3, w) { + if (typeof w === "number") { + return Vec22.neo(w * v3.y + a2.x, -w * v3.x + a2.y); + } else if (typeof v3 === "number") { + return Vec22.neo(-v3 * w.y + a2.x, v3 * w.x + a2.y); + } + }; + Vec22.addCrossVec2Num = function(a2, v3, w) { + return Vec22.neo(w * v3.y + a2.x, -w * v3.x + a2.y); + }; + Vec22.addCrossNumVec2 = function(a2, v3, w) { + return Vec22.neo(-v3 * w.y + a2.x, v3 * w.x + a2.y); + }; + Vec22.add = function(v3, w) { + return Vec22.neo(v3.x + w.x, v3.y + w.y); + }; + Vec22.wAdd = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return Vec22.combine(a2, v3, b2, w); + } else { + return Vec22.mulNumVec2(a2, v3); + } + }; + Vec22.combine = function(a2, v3, b2, w) { + return Vec22.zero().setCombine(a2, v3, b2, w); + }; + Vec22.sub = function(v3, w) { + return Vec22.neo(v3.x - w.x, v3.y - w.y); + }; + Vec22.mul = function(a2, b2) { + if (typeof a2 === "object") { + return Vec22.neo(a2.x * b2, a2.y * b2); + } else if (typeof b2 === "object") { + return Vec22.neo(a2 * b2.x, a2 * b2.y); + } + }; + Vec22.mulVec2Num = function(a2, b2) { + return Vec22.neo(a2.x * b2, a2.y * b2); + }; + Vec22.mulNumVec2 = function(a2, b2) { + return Vec22.neo(a2 * b2.x, a2 * b2.y); + }; + Vec22.prototype.neg = function() { + this.x = -this.x; + this.y = -this.y; + return this; + }; + Vec22.neg = function(v3) { + return Vec22.neo(-v3.x, -v3.y); + }; + Vec22.abs = function(v3) { + return Vec22.neo(math_abs$9(v3.x), math_abs$9(v3.y)); + }; + Vec22.mid = function(v3, w) { + return Vec22.neo((v3.x + w.x) * 0.5, (v3.y + w.y) * 0.5); + }; + Vec22.upper = function(v3, w) { + return Vec22.neo(math_max$8(v3.x, w.x), math_max$8(v3.y, w.y)); + }; + Vec22.lower = function(v3, w) { + return Vec22.neo(math_min$8(v3.x, w.x), math_min$8(v3.y, w.y)); + }; + Vec22.prototype.clamp = function(max) { + var lengthSqr = this.x * this.x + this.y * this.y; + if (lengthSqr > max * max) { + var scale = max / math_sqrt$5(lengthSqr); + this.x *= scale; + this.y *= scale; + } + return this; + }; + Vec22.clamp = function(v3, max) { + var r = Vec22.neo(v3.x, v3.y); + r.clamp(max); + return r; + }; + Vec22.scaleFn = function(x2, y) { + return function(v3) { + return Vec22.neo(v3.x * x2, v3.y * y); + }; + }; + Vec22.translateFn = function(x2, y) { + return function(v3) { + return Vec22.neo(v3.x + x2, v3.y + y); + }; + }; + return Vec22; + }() + ); + var math_max$7 = Math.max; + var math_min$7 = Math.min; + var AABB = ( + /** @class */ + function() { + function AABB2(lower, upper) { + if (!(this instanceof AABB2)) { + return new AABB2(lower, upper); + } + this.lowerBound = Vec2.zero(); + this.upperBound = Vec2.zero(); + if (typeof lower === "object") { + this.lowerBound.setVec2(lower); + } + if (typeof upper === "object") { + this.upperBound.setVec2(upper); + } else if (typeof lower === "object") { + this.upperBound.setVec2(lower); + } + } + AABB2.prototype.isValid = function() { + return AABB2.isValid(this); + }; + AABB2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec2.isValid(obj.lowerBound) && Vec2.isValid(obj.upperBound) && Vec2.sub(obj.upperBound, obj.lowerBound).lengthSquared() >= 0; + }; + AABB2.assert = function(o) { + }; + AABB2.prototype.getCenter = function() { + return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5); + }; + AABB2.prototype.getExtents = function() { + return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5); + }; + AABB2.prototype.getPerimeter = function() { + return 2 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y); + }; + AABB2.prototype.combine = function(a2, b2) { + b2 = b2 || this; + var lowerA = a2.lowerBound; + var upperA = a2.upperBound; + var lowerB = b2.lowerBound; + var upperB = b2.upperBound; + var lowerX = math_min$7(lowerA.x, lowerB.x); + var lowerY = math_min$7(lowerA.y, lowerB.y); + var upperX = math_max$7(upperB.x, upperA.x); + var upperY = math_max$7(upperB.y, upperA.y); + this.lowerBound.setNum(lowerX, lowerY); + this.upperBound.setNum(upperX, upperY); + }; + AABB2.prototype.combinePoints = function(a2, b2) { + this.lowerBound.setNum(math_min$7(a2.x, b2.x), math_min$7(a2.y, b2.y)); + this.upperBound.setNum(math_max$7(a2.x, b2.x), math_max$7(a2.y, b2.y)); + }; + AABB2.prototype.set = function(aabb) { + this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y); + this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y); + }; + AABB2.prototype.contains = function(aabb) { + var result = true; + result = result && this.lowerBound.x <= aabb.lowerBound.x; + result = result && this.lowerBound.y <= aabb.lowerBound.y; + result = result && aabb.upperBound.x <= this.upperBound.x; + result = result && aabb.upperBound.y <= this.upperBound.y; + return result; + }; + AABB2.prototype.extend = function(value) { + AABB2.extend(this, value); + return this; + }; + AABB2.extend = function(out, value) { + out.lowerBound.x -= value; + out.lowerBound.y -= value; + out.upperBound.x += value; + out.upperBound.y += value; + return out; + }; + AABB2.testOverlap = function(a2, b2) { + var d1x = b2.lowerBound.x - a2.upperBound.x; + var d2x = a2.lowerBound.x - b2.upperBound.x; + var d1y = b2.lowerBound.y - a2.upperBound.y; + var d2y = a2.lowerBound.y - b2.upperBound.y; + if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) { + return false; } - manifold.pointCount = pointCount; - }; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - Contact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact); - /** @internal */ function PolygonCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - CollidePolygonCircle(manifold, fixtureA.getShape(), xfA, fixtureB.getShape(), xfB); + return true; + }; + AABB2.areEqual = function(a2, b2) { + return Vec2.areEqual(a2.lowerBound, b2.lowerBound) && Vec2.areEqual(a2.upperBound, b2.upperBound); + }; + AABB2.diff = function(a2, b2) { + var wD = math_max$7(0, math_min$7(a2.upperBound.x, b2.upperBound.x) - math_max$7(b2.lowerBound.x, a2.lowerBound.x)); + var hD = math_max$7(0, math_min$7(a2.upperBound.y, b2.upperBound.y) - math_max$7(b2.lowerBound.y, a2.lowerBound.y)); + var wA = a2.upperBound.x - a2.lowerBound.x; + var hA = a2.upperBound.y - a2.lowerBound.y; + var wB = b2.upperBound.x - b2.lowerBound.x; + var hB = b2.upperBound.y - b2.lowerBound.y; + return wA * hA + wB * hB - wD * hD; + }; + AABB2.prototype.rayCast = function(output2, input2) { + var tmin = -Infinity; + var tmax = Infinity; + var p = input2.p1; + var d2 = Vec2.sub(input2.p2, input2.p1); + var absD = Vec2.abs(d2); + var normal3 = Vec2.zero(); + for (var f = "x"; f !== null; f = f === "x" ? "y" : null) { + if (absD.x < EPSILON) { + if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) { + return false; + } + } else { + var inv_d = 1 / d2[f]; + var t1 = (this.lowerBound[f] - p[f]) * inv_d; + var t2 = (this.upperBound[f] - p[f]) * inv_d; + var s2 = -1; + if (t1 > t2) { + var temp3 = t1; + t1 = t2; + t2 = temp3; + s2 = 1; + } + if (t1 > tmin) { + normal3.setZero(); + normal3[f] = s2; + tmin = t1; + } + tmax = math_min$7(tmax, t2); + if (tmin > tmax) { + return false; + } + } + } + if (tmin < 0 || input2.maxFraction < tmin) { + return false; + } + output2.fraction = tmin; + output2.normal = normal3; + return true; + }; + AABB2.prototype.toString = function() { + return JSON.stringify(this); + }; + AABB2.combinePoints = function(out, a2, b2) { + out.lowerBound.x = math_min$7(a2.x, b2.x); + out.lowerBound.y = math_min$7(a2.y, b2.y); + out.upperBound.x = math_max$7(a2.x, b2.x); + out.upperBound.y = math_max$7(a2.y, b2.y); + return out; + }; + AABB2.combinedPerimeter = function(a2, b2) { + var lx = math_min$7(a2.lowerBound.x, b2.lowerBound.x); + var ly = math_min$7(a2.lowerBound.y, b2.lowerBound.y); + var ux = math_max$7(a2.upperBound.x, b2.upperBound.x); + var uy = math_max$7(a2.upperBound.y, b2.upperBound.y); + return 2 * (ux - lx + uy - ly); + }; + return AABB2; + }() + ); + var math_PI$6 = Math.PI; + var Settings = ( + /** @class */ + function() { + function Settings2() { + } + Object.defineProperty(Settings2, "polygonRadius", { + /** + * The radius of the polygon/edge shape skin. This should not be modified. + * Making this smaller means polygons will have an insufficient buffer for + * continuous collision. Making it larger may create artifacts for vertex + * collision. + */ + get: function() { + return 2 * Settings2.linearSlop; + }, + enumerable: false, + configurable: true + }); + Settings2.lengthUnitsPerMeter = 1; + Settings2.maxManifoldPoints = 2; + Settings2.maxPolygonVertices = 12; + Settings2.aabbExtension = 0.1; + Settings2.aabbMultiplier = 2; + Settings2.linearSlop = 5e-3; + Settings2.angularSlop = 2 / 180 * math_PI$6; + Settings2.maxSubSteps = 8; + Settings2.maxTOIContacts = 32; + Settings2.maxTOIIterations = 20; + Settings2.maxDistanceIterations = 20; + Settings2.velocityThreshold = 1; + Settings2.maxLinearCorrection = 0.2; + Settings2.maxAngularCorrection = 8 / 180 * math_PI$6; + Settings2.maxTranslation = 2; + Settings2.maxRotation = 0.5 * math_PI$6; + Settings2.baumgarte = 0.2; + Settings2.toiBaugarte = 0.75; + Settings2.timeToSleep = 0.5; + Settings2.linearSleepTolerance = 0.01; + Settings2.angularSleepTolerance = 2 / 180 * math_PI$6; + return Settings2; + }() + ); + var SettingsInternal = ( + /** @class */ + function() { + function SettingsInternal2() { + } + Object.defineProperty(SettingsInternal2, "maxManifoldPoints", { + get: function() { + return Settings.maxManifoldPoints; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxPolygonVertices", { + get: function() { + return Settings.maxPolygonVertices; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "aabbExtension", { + get: function() { + return Settings.aabbExtension * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "aabbMultiplier", { + get: function() { + return Settings.aabbMultiplier; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "linearSlop", { + get: function() { + return Settings.linearSlop * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "linearSlopSquared", { + get: function() { + return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "angularSlop", { + get: function() { + return Settings.angularSlop; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "polygonRadius", { + get: function() { + return 2 * Settings.linearSlop; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxSubSteps", { + get: function() { + return Settings.maxSubSteps; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxTOIContacts", { + get: function() { + return Settings.maxTOIContacts; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxTOIIterations", { + get: function() { + return Settings.maxTOIIterations; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxDistanceIterations", { + get: function() { + return Settings.maxDistanceIterations; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "velocityThreshold", { + get: function() { + return Settings.velocityThreshold * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxLinearCorrection", { + get: function() { + return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxAngularCorrection", { + get: function() { + return Settings.maxAngularCorrection; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxTranslation", { + get: function() { + return Settings.maxTranslation * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxTranslationSquared", { + get: function() { + return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxRotation", { + get: function() { + return Settings.maxRotation; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "maxRotationSquared", { + get: function() { + return Settings.maxRotation * Settings.maxRotation; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "baumgarte", { + get: function() { + return Settings.baumgarte; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "toiBaugarte", { + get: function() { + return Settings.toiBaugarte; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "timeToSleep", { + get: function() { + return Settings.timeToSleep; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "linearSleepTolerance", { + get: function() { + return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "linearSleepToleranceSqr", { + get: function() { + return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "angularSleepTolerance", { + get: function() { + return Settings.angularSleepTolerance; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(SettingsInternal2, "angularSleepToleranceSqr", { + get: function() { + return Settings.angularSleepTolerance * Settings.angularSleepTolerance; + }, + enumerable: false, + configurable: true + }); + return SettingsInternal2; + }() + ); + var Pool = ( + /** @class */ + function() { + function Pool2(opts) { + this._list = []; + this._max = Infinity; + this._hasCreateFn = false; + this._createCount = 0; + this._hasAllocateFn = false; + this._allocateCount = 0; + this._hasReleaseFn = false; + this._releaseCount = 0; + this._hasDisposeFn = false; + this._disposeCount = 0; + this._list = []; + this._max = opts.max || this._max; + this._createFn = opts.create; + this._hasCreateFn = typeof this._createFn === "function"; + this._allocateFn = opts.allocate; + this._hasAllocateFn = typeof this._allocateFn === "function"; + this._releaseFn = opts.release; + this._hasReleaseFn = typeof this._releaseFn === "function"; + this._disposeFn = opts.dispose; + this._hasDisposeFn = typeof this._disposeFn === "function"; + } + Pool2.prototype.max = function(n2) { + if (typeof n2 === "number") { + this._max = n2; + return this; + } + return this._max; + }; + Pool2.prototype.size = function() { + return this._list.length; + }; + Pool2.prototype.allocate = function() { + var item; + if (this._list.length > 0) { + item = this._list.shift(); + } else { + this._createCount++; + if (this._hasCreateFn) { + item = this._createFn(); + } else { + item = {}; + } + } + this._allocateCount++; + if (this._hasAllocateFn) { + this._allocateFn(item); + } + return item; + }; + Pool2.prototype.release = function(item) { + if (this._list.length < this._max) { + this._releaseCount++; + if (this._hasReleaseFn) { + this._releaseFn(item); + } + this._list.push(item); + } else { + this._disposeCount++; + if (this._hasDisposeFn) { + item = this._disposeFn(item); + } + } + }; + Pool2.prototype.toString = function() { + return " +" + this._createCount + " >" + this._allocateCount + " <" + this._releaseCount + " -" + this._disposeCount + " =" + this._list.length + "/" + this._max; + }; + return Pool2; + }() + ); + var math_abs$8 = Math.abs; + var math_max$6 = Math.max; + var TreeNode = ( + /** @class */ + function() { + function TreeNode2(id) { + this.aabb = new AABB(); + this.userData = null; + this.parent = null; + this.child1 = null; + this.child2 = null; + this.height = -1; + this.id = id; + } + TreeNode2.prototype.toString = function() { + return this.id + ": " + this.userData; + }; + TreeNode2.prototype.isLeaf = function() { + return this.child1 == null; + }; + return TreeNode2; + }() + ); + var poolTreeNode = new Pool({ + create: function() { + return new TreeNode(); + }, + release: function(node) { + node.userData = null; + node.parent = null; + node.child1 = null; + node.child2 = null; + node.height = -1; + node.id = void 0; } - /** @internal */ var cLocal = vec2(0, 0); - /** @internal */ var faceCenter = vec2(0, 0); - var CollidePolygonCircle = function (manifold, polygonA, xfA, circleB, xfB) { - manifold.pointCount = 0; - // Compute circle position in the frame of the polygon. - retransformVec2(cLocal, xfB, xfA, circleB.m_p); - // Find the min separating edge. - var normalIndex = 0; - var separation = -Infinity; - var radius = polygonA.m_radius + circleB.m_radius; - var vertexCount = polygonA.m_count; - var vertices = polygonA.m_vertices; - var normals = polygonA.m_normals; - for (var i = 0; i < vertexCount; ++i) { - var s = dotVec2(normals[i], cLocal) - dotVec2(normals[i], vertices[i]); - if (s > radius) { - // Early out. - return; - } - if (s > separation) { - separation = s; - normalIndex = i; - } - } - // Vertices that subtend the incident face. - var vertIndex1 = normalIndex; - var vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0; - var v1 = vertices[vertIndex1]; - var v2 = vertices[vertIndex2]; - // If the center is inside the polygon ... - if (separation < EPSILON) { - manifold.pointCount = 1; - manifold.type = exports.ManifoldType.e_faceA; - copyVec2(manifold.localNormal, normals[normalIndex]); - combine2Vec2(manifold.localPoint, 0.5, v1, 0.5, v2); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, exports.ContactFeatureType.e_vertex, 0, exports.ContactFeatureType.e_vertex); - return; - } - // Compute barycentric coordinates - // u1 = (cLocal - v1) dot (v2 - v1)) - var u1 = dotVec2(cLocal, v2) - dotVec2(cLocal, v1) - dotVec2(v1, v2) + dotVec2(v1, v1); - // u2 = (cLocal - v2) dot (v1 - v2) - var u2 = dotVec2(cLocal, v1) - dotVec2(cLocal, v2) - dotVec2(v2, v1) + dotVec2(v2, v2); - if (u1 <= 0.0) { - if (distSqrVec2(cLocal, v1) > radius * radius) { - return; - } - manifold.pointCount = 1; - manifold.type = exports.ManifoldType.e_faceA; - subVec2(manifold.localNormal, cLocal, v1); - normalizeVec2(manifold.localNormal); - copyVec2(manifold.localPoint, v1); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, exports.ContactFeatureType.e_vertex, 0, exports.ContactFeatureType.e_vertex); - } - else if (u2 <= 0.0) { - if (distSqrVec2(cLocal, v2) > radius * radius) { - return; - } - manifold.pointCount = 1; - manifold.type = exports.ManifoldType.e_faceA; - subVec2(manifold.localNormal, cLocal, v2); - normalizeVec2(manifold.localNormal); - copyVec2(manifold.localPoint, v2); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, exports.ContactFeatureType.e_vertex, 0, exports.ContactFeatureType.e_vertex); - } - else { - combine2Vec2(faceCenter, 0.5, v1, 0.5, v2); - var separation_1 = dotVec2(cLocal, normals[vertIndex1]) - dotVec2(faceCenter, normals[vertIndex1]); - if (separation_1 > radius) { + }); + var DynamicTree = ( + /** @class */ + function() { + function DynamicTree2() { + this.inputPool = new Pool({ + create: function() { + return {}; + }, + release: function(stack) { + } + }); + this.stackPool = new Pool({ + create: function() { + return []; + }, + release: function(stack) { + stack.length = 0; + } + }); + this.iteratorPool = new Pool({ + create: function() { + return new Iterator(); + }, + release: function(iterator) { + iterator.close(); + } + }); + this.m_root = null; + this.m_nodes = {}; + this.m_lastProxyId = 0; + } + DynamicTree2.prototype.getUserData = function(id) { + var node = this.m_nodes[id]; + return node.userData; + }; + DynamicTree2.prototype.getFatAABB = function(id) { + var node = this.m_nodes[id]; + return node.aabb; + }; + DynamicTree2.prototype.allocateNode = function() { + var node = poolTreeNode.allocate(); + node.id = ++this.m_lastProxyId; + this.m_nodes[node.id] = node; + return node; + }; + DynamicTree2.prototype.freeNode = function(node) { + delete this.m_nodes[node.id]; + poolTreeNode.release(node); + }; + DynamicTree2.prototype.createProxy = function(aabb, userData) { + var node = this.allocateNode(); + node.aabb.set(aabb); + AABB.extend(node.aabb, SettingsInternal.aabbExtension); + node.userData = userData; + node.height = 0; + this.insertLeaf(node); + return node.id; + }; + DynamicTree2.prototype.destroyProxy = function(id) { + var node = this.m_nodes[id]; + this.removeLeaf(node); + this.freeNode(node); + }; + DynamicTree2.prototype.moveProxy = function(id, aabb, d2) { + var node = this.m_nodes[id]; + if (node.aabb.contains(aabb)) { + return false; + } + this.removeLeaf(node); + node.aabb.set(aabb); + aabb = node.aabb; + AABB.extend(aabb, SettingsInternal.aabbExtension); + if (d2.x < 0) { + aabb.lowerBound.x += d2.x * SettingsInternal.aabbMultiplier; + } else { + aabb.upperBound.x += d2.x * SettingsInternal.aabbMultiplier; + } + if (d2.y < 0) { + aabb.lowerBound.y += d2.y * SettingsInternal.aabbMultiplier; + } else { + aabb.upperBound.y += d2.y * SettingsInternal.aabbMultiplier; + } + this.insertLeaf(node); + return true; + }; + DynamicTree2.prototype.insertLeaf = function(leaf) { + if (this.m_root == null) { + this.m_root = leaf; + this.m_root.parent = null; + return; + } + var leafAABB = leaf.aabb; + var index = this.m_root; + while (!index.isLeaf()) { + var child1 = index.child1; + var child2 = index.child2; + var area = index.aabb.getPerimeter(); + var combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB); + var cost = 2 * combinedArea; + var inheritanceCost = 2 * (combinedArea - area); + var newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb); + var cost1 = newArea1 + inheritanceCost; + if (!child1.isLeaf()) { + var oldArea = child1.aabb.getPerimeter(); + cost1 -= oldArea; + } + var newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb); + var cost2 = newArea2 + inheritanceCost; + if (!child2.isLeaf()) { + var oldArea = child2.aabb.getPerimeter(); + cost2 -= oldArea; + } + if (cost < cost1 && cost < cost2) { + break; + } + if (cost1 < cost2) { + index = child1; + } else { + index = child2; + } + } + var sibling = index; + var oldParent = sibling.parent; + var newParent = this.allocateNode(); + newParent.parent = oldParent; + newParent.userData = null; + newParent.aabb.combine(leafAABB, sibling.aabb); + newParent.height = sibling.height + 1; + if (oldParent != null) { + if (oldParent.child1 === sibling) { + oldParent.child1 = newParent; + } else { + oldParent.child2 = newParent; + } + newParent.child1 = sibling; + newParent.child2 = leaf; + sibling.parent = newParent; + leaf.parent = newParent; + } else { + newParent.child1 = sibling; + newParent.child2 = leaf; + sibling.parent = newParent; + leaf.parent = newParent; + this.m_root = newParent; + } + index = leaf.parent; + while (index != null) { + index = this.balance(index); + var child1 = index.child1; + var child2 = index.child2; + index.height = 1 + math_max$6(child1.height, child2.height); + index.aabb.combine(child1.aabb, child2.aabb); + index = index.parent; + } + }; + DynamicTree2.prototype.removeLeaf = function(leaf) { + if (leaf === this.m_root) { + this.m_root = null; + return; + } + var parent = leaf.parent; + var grandParent = parent.parent; + var sibling; + if (parent.child1 === leaf) { + sibling = parent.child2; + } else { + sibling = parent.child1; + } + if (grandParent != null) { + if (grandParent.child1 === parent) { + grandParent.child1 = sibling; + } else { + grandParent.child2 = sibling; + } + sibling.parent = grandParent; + this.freeNode(parent); + var index = grandParent; + while (index != null) { + index = this.balance(index); + var child1 = index.child1; + var child2 = index.child2; + index.aabb.combine(child1.aabb, child2.aabb); + index.height = 1 + math_max$6(child1.height, child2.height); + index = index.parent; + } + } else { + this.m_root = sibling; + sibling.parent = null; + this.freeNode(parent); + } + }; + DynamicTree2.prototype.balance = function(iA) { + var A = iA; + if (A.isLeaf() || A.height < 2) { + return iA; + } + var B = A.child1; + var C = A.child2; + var balance = C.height - B.height; + if (balance > 1) { + var F = C.child1; + var G = C.child2; + C.child1 = A; + C.parent = A.parent; + A.parent = C; + if (C.parent != null) { + if (C.parent.child1 === iA) { + C.parent.child1 = C; + } else { + C.parent.child2 = C; + } + } else { + this.m_root = C; + } + if (F.height > G.height) { + C.child2 = F; + A.child2 = G; + G.parent = A; + A.aabb.combine(B.aabb, G.aabb); + C.aabb.combine(A.aabb, F.aabb); + A.height = 1 + math_max$6(B.height, G.height); + C.height = 1 + math_max$6(A.height, F.height); + } else { + C.child2 = G; + A.child2 = F; + F.parent = A; + A.aabb.combine(B.aabb, F.aabb); + C.aabb.combine(A.aabb, G.aabb); + A.height = 1 + math_max$6(B.height, F.height); + C.height = 1 + math_max$6(A.height, G.height); + } + return C; + } + if (balance < -1) { + var D = B.child1; + var E = B.child2; + B.child1 = A; + B.parent = A.parent; + A.parent = B; + if (B.parent != null) { + if (B.parent.child1 === A) { + B.parent.child1 = B; + } else { + B.parent.child2 = B; + } + } else { + this.m_root = B; + } + if (D.height > E.height) { + B.child2 = D; + A.child1 = E; + E.parent = A; + A.aabb.combine(C.aabb, E.aabb); + B.aabb.combine(A.aabb, D.aabb); + A.height = 1 + math_max$6(C.height, E.height); + B.height = 1 + math_max$6(A.height, D.height); + } else { + B.child2 = E; + A.child1 = D; + D.parent = A; + A.aabb.combine(C.aabb, D.aabb); + B.aabb.combine(A.aabb, E.aabb); + A.height = 1 + math_max$6(C.height, D.height); + B.height = 1 + math_max$6(A.height, E.height); + } + return B; + } + return A; + }; + DynamicTree2.prototype.getHeight = function() { + if (this.m_root == null) { + return 0; + } + return this.m_root.height; + }; + DynamicTree2.prototype.getAreaRatio = function() { + if (this.m_root == null) { + return 0; + } + var root = this.m_root; + var rootArea = root.aabb.getPerimeter(); + var totalArea = 0; + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + if (node.height < 0) { + continue; + } + totalArea += node.aabb.getPerimeter(); + } + this.iteratorPool.release(it); + return totalArea / rootArea; + }; + DynamicTree2.prototype.computeHeight = function(id) { + var node; + if (typeof id !== "undefined") { + node = this.m_nodes[id]; + } else { + node = this.m_root; + } + if (node.isLeaf()) { + return 0; + } + var height1 = this.computeHeight(node.child1.id); + var height2 = this.computeHeight(node.child2.id); + return 1 + math_max$6(height1, height2); + }; + DynamicTree2.prototype.validateStructure = function(node) { + if (node == null) { + return; + } + if (node === this.m_root) ; + var child1 = node.child1; + var child2 = node.child2; + if (node.isLeaf()) { + return; + } + this.validateStructure(child1); + this.validateStructure(child2); + }; + DynamicTree2.prototype.validateMetrics = function(node) { + if (node == null) { + return; + } + var child1 = node.child1; + var child2 = node.child2; + if (node.isLeaf()) { + return; + } + child1.height; + child2.height; + var aabb = new AABB(); + aabb.combine(child1.aabb, child2.aabb); + this.validateMetrics(child1); + this.validateMetrics(child2); + }; + DynamicTree2.prototype.validate = function() { + return; + }; + DynamicTree2.prototype.getMaxBalance = function() { + var maxBalance = 0; + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + if (node.height <= 1) { + continue; + } + var balance = math_abs$8(node.child2.height - node.child1.height); + maxBalance = math_max$6(maxBalance, balance); + } + this.iteratorPool.release(it); + return maxBalance; + }; + DynamicTree2.prototype.rebuildBottomUp = function() { + var nodes = []; + var count = 0; + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + if (node.height < 0) { + continue; + } + if (node.isLeaf()) { + node.parent = null; + nodes[count] = node; + ++count; + } else { + this.freeNode(node); + } + } + this.iteratorPool.release(it); + while (count > 1) { + var minCost = Infinity; + var iMin = -1; + var jMin = -1; + for (var i = 0; i < count; ++i) { + var aabbi = nodes[i].aabb; + for (var j = i + 1; j < count; ++j) { + var aabbj = nodes[j].aabb; + var cost = AABB.combinedPerimeter(aabbi, aabbj); + if (cost < minCost) { + iMin = i; + jMin = j; + minCost = cost; + } + } + } + var child1 = nodes[iMin]; + var child2 = nodes[jMin]; + var parent_1 = this.allocateNode(); + parent_1.child1 = child1; + parent_1.child2 = child2; + parent_1.height = 1 + math_max$6(child1.height, child2.height); + parent_1.aabb.combine(child1.aabb, child2.aabb); + parent_1.parent = null; + child1.parent = parent_1; + child2.parent = parent_1; + nodes[jMin] = nodes[count - 1]; + nodes[iMin] = parent_1; + --count; + } + this.m_root = nodes[0]; + }; + DynamicTree2.prototype.shiftOrigin = function(newOrigin) { + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + var aabb = node.aabb; + aabb.lowerBound.x -= newOrigin.x; + aabb.lowerBound.y -= newOrigin.y; + aabb.upperBound.x -= newOrigin.x; + aabb.upperBound.y -= newOrigin.y; + } + this.iteratorPool.release(it); + }; + DynamicTree2.prototype.query = function(aabb, queryCallback) { + var stack = this.stackPool.allocate(); + stack.push(this.m_root); + while (stack.length > 0) { + var node = stack.pop(); + if (node == null) { + continue; + } + if (AABB.testOverlap(node.aabb, aabb)) { + if (node.isLeaf()) { + var proceed = queryCallback(node.id); + if (proceed === false) { return; - } - manifold.pointCount = 1; - manifold.type = exports.ManifoldType.e_faceA; - copyVec2(manifold.localNormal, normals[vertIndex1]); - copyVec2(manifold.localPoint, faceCenter); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, exports.ContactFeatureType.e_vertex, 0, exports.ContactFeatureType.e_vertex); - } - }; - - /* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /** @internal */ var math_min = Math.min; - Contact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact); - Contact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact); - /** @internal */ function EdgePolygonContact(manifold, xfA, fA, indexA, xfB, fB, indexB) { - CollideEdgePolygon(manifold, fA.getShape(), xfA, fB.getShape(), xfB); + } + } else { + stack.push(node.child1); + stack.push(node.child2); + } + } + } + this.stackPool.release(stack); + }; + DynamicTree2.prototype.rayCast = function(input2, rayCastCallback) { + var p1 = input2.p1; + var p2 = input2.p2; + var r = Vec2.sub(p2, p1); + r.normalize(); + var v3 = Vec2.crossNumVec2(1, r); + var abs_v = Vec2.abs(v3); + var maxFraction = input2.maxFraction; + var segmentAABB = new AABB(); + var t = Vec2.combine(1 - maxFraction, p1, maxFraction, p2); + segmentAABB.combinePoints(p1, t); + var stack = this.stackPool.allocate(); + var subInput = this.inputPool.allocate(); + stack.push(this.m_root); + while (stack.length > 0) { + var node = stack.pop(); + if (node == null) { + continue; + } + if (AABB.testOverlap(node.aabb, segmentAABB) === false) { + continue; + } + var c2 = node.aabb.getCenter(); + var h = node.aabb.getExtents(); + var separation = math_abs$8(Vec2.dot(v3, Vec2.sub(p1, c2))) - Vec2.dot(abs_v, h); + if (separation > 0) { + continue; + } + if (node.isLeaf()) { + subInput.p1 = Vec2.clone(input2.p1); + subInput.p2 = Vec2.clone(input2.p2); + subInput.maxFraction = maxFraction; + var value = rayCastCallback(subInput, node.id); + if (value === 0) { + break; + } else if (value > 0) { + maxFraction = value; + t = Vec2.combine(1 - maxFraction, p1, maxFraction, p2); + segmentAABB.combinePoints(p1, t); + } + } else { + stack.push(node.child1); + stack.push(node.child2); + } + } + this.stackPool.release(stack); + this.inputPool.release(subInput); + }; + return DynamicTree2; + }() + ); + var Iterator = ( + /** @class */ + function() { + function Iterator2() { + this.parents = []; + this.states = []; + } + Iterator2.prototype.preorder = function(root) { + this.parents.length = 0; + this.parents.push(root); + this.states.length = 0; + this.states.push(0); + return this; + }; + Iterator2.prototype.next = function() { + while (this.parents.length > 0) { + var i = this.parents.length - 1; + var node = this.parents[i]; + if (this.states[i] === 0) { + this.states[i] = 1; + return node; + } + if (this.states[i] === 1) { + this.states[i] = 2; + if (node.child1) { + this.parents.push(node.child1); + this.states.push(1); + return node.child1; + } + } + if (this.states[i] === 2) { + this.states[i] = 3; + if (node.child2) { + this.parents.push(node.child2); + this.states.push(1); + return node.child2; + } + } + this.parents.pop(); + this.states.pop(); + } + }; + Iterator2.prototype.close = function() { + this.parents.length = 0; + }; + return Iterator2; + }() + ); + var math_max$5 = Math.max; + var math_min$6 = Math.min; + var BroadPhase = ( + /** @class */ + function() { + function BroadPhase2() { + var _this = this; + this.m_tree = new DynamicTree(); + this.m_moveBuffer = []; + this.query = function(aabb, queryCallback) { + _this.m_tree.query(aabb, queryCallback); + }; + this.queryCallback = function(proxyId) { + if (proxyId === _this.m_queryProxyId) { + return true; + } + var proxyIdA = math_min$6(proxyId, _this.m_queryProxyId); + var proxyIdB = math_max$5(proxyId, _this.m_queryProxyId); + var userDataA = _this.m_tree.getUserData(proxyIdA); + var userDataB = _this.m_tree.getUserData(proxyIdB); + _this.m_callback(userDataA, userDataB); + return true; + }; + } + BroadPhase2.prototype.getUserData = function(proxyId) { + return this.m_tree.getUserData(proxyId); + }; + BroadPhase2.prototype.testOverlap = function(proxyIdA, proxyIdB) { + var aabbA = this.m_tree.getFatAABB(proxyIdA); + var aabbB = this.m_tree.getFatAABB(proxyIdB); + return AABB.testOverlap(aabbA, aabbB); + }; + BroadPhase2.prototype.getFatAABB = function(proxyId) { + return this.m_tree.getFatAABB(proxyId); + }; + BroadPhase2.prototype.getProxyCount = function() { + return this.m_moveBuffer.length; + }; + BroadPhase2.prototype.getTreeHeight = function() { + return this.m_tree.getHeight(); + }; + BroadPhase2.prototype.getTreeBalance = function() { + return this.m_tree.getMaxBalance(); + }; + BroadPhase2.prototype.getTreeQuality = function() { + return this.m_tree.getAreaRatio(); + }; + BroadPhase2.prototype.rayCast = function(input2, rayCastCallback) { + this.m_tree.rayCast(input2, rayCastCallback); + }; + BroadPhase2.prototype.shiftOrigin = function(newOrigin) { + this.m_tree.shiftOrigin(newOrigin); + }; + BroadPhase2.prototype.createProxy = function(aabb, userData) { + var proxyId = this.m_tree.createProxy(aabb, userData); + this.bufferMove(proxyId); + return proxyId; + }; + BroadPhase2.prototype.destroyProxy = function(proxyId) { + this.unbufferMove(proxyId); + this.m_tree.destroyProxy(proxyId); + }; + BroadPhase2.prototype.moveProxy = function(proxyId, aabb, displacement2) { + var changed = this.m_tree.moveProxy(proxyId, aabb, displacement2); + if (changed) { + this.bufferMove(proxyId); + } + }; + BroadPhase2.prototype.touchProxy = function(proxyId) { + this.bufferMove(proxyId); + }; + BroadPhase2.prototype.bufferMove = function(proxyId) { + this.m_moveBuffer.push(proxyId); + }; + BroadPhase2.prototype.unbufferMove = function(proxyId) { + for (var i = 0; i < this.m_moveBuffer.length; ++i) { + if (this.m_moveBuffer[i] === proxyId) { + this.m_moveBuffer[i] = null; + } + } + }; + BroadPhase2.prototype.updatePairs = function(addPairCallback) { + this.m_callback = addPairCallback; + while (this.m_moveBuffer.length > 0) { + this.m_queryProxyId = this.m_moveBuffer.pop(); + if (this.m_queryProxyId === null) { + continue; + } + var fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId); + this.m_tree.query(fatAABB, this.queryCallback); + } + }; + return BroadPhase2; + }() + ); + var math_sin$2 = Math.sin; + var math_cos$2 = Math.cos; + var math_sqrt$4 = Math.sqrt; + function vec2(x2, y) { + return { x: x2, y }; + } + function rotation(angle) { + return { s: math_sin$2(angle), c: math_cos$2(angle) }; + } + function setVec2(out, x2, y) { + out.x = x2; + out.y = y; + return out; + } + function copyVec2(out, w) { + out.x = w.x; + out.y = w.y; + return out; + } + function zeroVec2(out) { + out.x = 0; + out.y = 0; + return out; + } + function negVec2(out) { + out.x = -out.x; + out.y = -out.y; + return out; + } + function plusVec2(out, w) { + out.x += w.x; + out.y += w.y; + return out; + } + function addVec2(out, v3, w) { + out.x = v3.x + w.x; + out.y = v3.x + w.y; + return out; + } + function minusVec2(out, w) { + out.x -= w.x; + out.y -= w.y; + return out; + } + function subVec2(out, v3, w) { + out.x = v3.x - w.x; + out.y = v3.y - w.y; + return out; + } + function mulVec2(out, m) { + out.x *= m; + out.y *= m; + return out; + } + function scaleVec2(out, m, w) { + out.x = m * w.x; + out.y = m * w.y; + return out; + } + function plusScaleVec2(out, m, w) { + out.x += m * w.x; + out.y += m * w.y; + return out; + } + function minusScaleVec2(out, m, w) { + out.x -= m * w.x; + out.y -= m * w.y; + return out; + } + function combine2Vec2(out, am, a2, bm, b2) { + out.x = am * a2.x + bm * b2.x; + out.y = am * a2.y + bm * b2.y; + return out; + } + function combine3Vec2(out, am, a2, bm, b2, cm, c2) { + out.x = am * a2.x + bm * b2.x + cm * c2.x; + out.y = am * a2.y + bm * b2.y + cm * c2.y; + return out; + } + function normalizeVec2Length(out) { + var length = math_sqrt$4(out.x * out.x + out.y * out.y); + if (length !== 0) { + var invLength = 1 / length; + out.x *= invLength; + out.y *= invLength; } - // reused - /** @internal */ var edge_reuse = new EdgeShape(); - /** @internal */ function ChainPolygonContact(manifold, xfA, fA, indexA, xfB, fB, indexB) { - var chain = fA.getShape(); - chain.getChildEdge(edge_reuse, indexA); - CollideEdgePolygon(manifold, edge_reuse, xfA, fB.getShape(), xfB); + return length; + } + function normalizeVec2(out) { + var length = math_sqrt$4(out.x * out.x + out.y * out.y); + if (length > 0) { + var invLength = 1 / length; + out.x *= invLength; + out.y *= invLength; } - /** @internal */ var EPAxisType; - (function (EPAxisType) { - EPAxisType[EPAxisType["e_unknown"] = -1] = "e_unknown"; - EPAxisType[EPAxisType["e_edgeA"] = 1] = "e_edgeA"; - EPAxisType[EPAxisType["e_edgeB"] = 2] = "e_edgeB"; - })(EPAxisType || (EPAxisType = {})); - // unused? - /** @internal */ var VertexType; - (function (VertexType) { - VertexType[VertexType["e_isolated"] = 0] = "e_isolated"; - VertexType[VertexType["e_concave"] = 1] = "e_concave"; - VertexType[VertexType["e_convex"] = 2] = "e_convex"; - })(VertexType || (VertexType = {})); - /** - * This structure is used to keep track of the best separating axis. - */ - /** @internal */ var EPAxis = /** @class */ (function () { - function EPAxis() { - } - return EPAxis; - }()); - /** - * This holds polygon B expressed in frame A. - */ - /** @internal */ var TempPolygon = /** @class */ (function () { - function TempPolygon() { - this.vertices = []; // [Settings.maxPolygonVertices] - this.normals = []; // [Settings.maxPolygonVertices]; - this.count = 0; - for (var i = 0; i < SettingsInternal.maxPolygonVertices; i++) { - this.vertices.push(vec2(0, 0)); - this.normals.push(vec2(0, 0)); - } - } - return TempPolygon; - }()); - /** - * Reference face used for clipping - */ - /** @internal */ var ReferenceFace = /** @class */ (function () { - function ReferenceFace() { - this.v1 = vec2(0, 0); - this.v2 = vec2(0, 0); - this.normal = vec2(0, 0); - this.sideNormal1 = vec2(0, 0); - this.sideNormal2 = vec2(0, 0); - } - ReferenceFace.prototype.recycle = function () { - zeroVec2(this.v1); - zeroVec2(this.v2); - zeroVec2(this.normal); - zeroVec2(this.sideNormal1); - zeroVec2(this.sideNormal2); - }; - return ReferenceFace; - }()); - // reused - /** @internal */ var clipPoints1 = [new ClipVertex(), new ClipVertex()]; - /** @internal */ var clipPoints2 = [new ClipVertex(), new ClipVertex()]; - /** @internal */ var ie = [new ClipVertex(), new ClipVertex()]; - /** @internal */ var edgeAxis = new EPAxis(); - /** @internal */ var polygonAxis = new EPAxis(); - /** @internal */ var polygonBA = new TempPolygon(); - /** @internal */ var rf = new ReferenceFace(); - /** @internal */ var centroidB = vec2(0, 0); - /** @internal */ var edge0 = vec2(0, 0); - /** @internal */ var edge1 = vec2(0, 0); - /** @internal */ var edge2 = vec2(0, 0); - /** @internal */ var xf = transform(0, 0, 0); - /** @internal */ var normal = vec2(0, 0); - /** @internal */ var normal0 = vec2(0, 0); - /** @internal */ var normal1 = vec2(0, 0); - /** @internal */ var normal2 = vec2(0, 0); - /** @internal */ var lowerLimit = vec2(0, 0); - /** @internal */ var upperLimit = vec2(0, 0); - /** @internal */ var perp = vec2(0, 0); - /** @internal */ var n = vec2(0, 0); - /** - * This function collides and edge and a polygon, taking into account edge - * adjacency. - */ - var CollideEdgePolygon = function (manifold, edgeA, xfA, polygonB, xfB) { - // Algorithm: - // 1. Classify v1 and v2 - // 2. Classify polygon centroid as front or back - // 3. Flip normal if necessary - // 4. Initialize normal range to [-pi, pi] about face normal - // 5. Adjust normal range according to adjacent edges - // 6. Visit each separating axes, only accept axes within the range - // 7. Return if _any_ axis indicates separation - // 8. Clip - // let m_type1: VertexType; - // let m_type2: VertexType; - detransformTransform(xf, xfA, xfB); - transformVec2(centroidB, xf, polygonB.m_centroid); - var v0 = edgeA.m_vertex0; - var v1 = edgeA.m_vertex1; - var v2 = edgeA.m_vertex2; - var v3 = edgeA.m_vertex3; - var hasVertex0 = edgeA.m_hasVertex0; - var hasVertex3 = edgeA.m_hasVertex3; - subVec2(edge1, v2, v1); - normalizeVec2(edge1); - setVec2(normal1, edge1.y, -edge1.x); - var offset1 = dotVec2(normal1, centroidB) - dotVec2(normal1, v1); - var offset0 = 0.0; - var offset2 = 0.0; - var convex1 = false; - var convex2 = false; - zeroVec2(normal0); - zeroVec2(normal2); - // Is there a preceding edge? - if (hasVertex0) { - subVec2(edge0, v1, v0); - normalizeVec2(edge0); - setVec2(normal0, edge0.y, -edge0.x); - convex1 = crossVec2Vec2(edge0, edge1) >= 0.0; - offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0); - } - // Is there a following edge? - if (hasVertex3) { - subVec2(edge2, v3, v2); - normalizeVec2(edge2); - setVec2(normal2, edge2.y, -edge2.x); - convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0.0; - offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v2); - } - var front; - zeroVec2(normal); - zeroVec2(lowerLimit); - zeroVec2(upperLimit); - // Determine front or back collision. Determine collision normal limits. - if (hasVertex0 && hasVertex3) { - if (convex1 && convex2) { - front = offset0 >= 0.0 || offset1 >= 0.0 || offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal0); - copyVec2(upperLimit, normal2); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal1); - scaleVec2(upperLimit, -1, normal1); - } - } - else if (convex1) { - front = offset0 >= 0.0 || (offset1 >= 0.0 && offset2 >= 0.0); - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal0); - copyVec2(upperLimit, normal1); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal2); - scaleVec2(upperLimit, -1, normal1); - } - } - else if (convex2) { - front = offset2 >= 0.0 || (offset0 >= 0.0 && offset1 >= 0.0); - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal1); - copyVec2(upperLimit, normal2); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal1); - scaleVec2(upperLimit, -1, normal0); - } - } - else { - front = offset0 >= 0.0 && offset1 >= 0.0 && offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal1); - copyVec2(upperLimit, normal1); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal2); - scaleVec2(upperLimit, -1, normal0); - } - } + return out; + } + function crossVec2Num(out, v3, w) { + var x2 = w * v3.y; + var y = -w * v3.x; + out.x = x2; + out.y = y; + return out; + } + function crossNumVec2(out, w, v3) { + var x2 = -w * v3.y; + var y = w * v3.x; + out.x = x2; + out.y = y; + return out; + } + function crossVec2Vec2(a2, b2) { + return a2.x * b2.y - a2.y * b2.x; + } + function dotVec2(a2, b2) { + return a2.x * b2.x + a2.y * b2.y; + } + function lengthSqrVec2(a2) { + return a2.x * a2.x + a2.y * a2.y; + } + function distVec2(a2, b2) { + var dx = a2.x - b2.x; + var dy = a2.y - b2.y; + return math_sqrt$4(dx * dx + dy * dy); + } + function distSqrVec2(a2, b2) { + var dx = a2.x - b2.x; + var dy = a2.y - b2.y; + return dx * dx + dy * dy; + } + function setRotAngle(out, a2) { + out.c = math_cos$2(a2); + out.s = math_sin$2(a2); + return out; + } + function rotVec2(out, q, v3) { + out.x = q.c * v3.x - q.s * v3.y; + out.y = q.s * v3.x + q.c * v3.y; + return out; + } + function derotVec2(out, q, v3) { + var x2 = q.c * v3.x + q.s * v3.y; + var y = -q.s * v3.x + q.c * v3.y; + out.x = x2; + out.y = y; + return out; + } + function rerotVec2(out, before, after, v3) { + var x0 = before.c * v3.x + before.s * v3.y; + var y0 = -before.s * v3.x + before.c * v3.y; + var x2 = after.c * x0 - after.s * y0; + var y = after.s * x0 + after.c * y0; + out.x = x2; + out.y = y; + return out; + } + function transform(x2, y, a2) { + return { p: vec2(x2, y), q: rotation(a2) }; + } + function copyTransform(out, transform2) { + out.p.x = transform2.p.x; + out.p.y = transform2.p.y; + out.q.s = transform2.q.s; + out.q.c = transform2.q.c; + return out; + } + function transformVec2(out, xf2, v3) { + var x2 = xf2.q.c * v3.x - xf2.q.s * v3.y + xf2.p.x; + var y = xf2.q.s * v3.x + xf2.q.c * v3.y + xf2.p.y; + out.x = x2; + out.y = y; + return out; + } + function detransformVec2(out, xf2, v3) { + var px = v3.x - xf2.p.x; + var py = v3.y - xf2.p.y; + var x2 = xf2.q.c * px + xf2.q.s * py; + var y = -xf2.q.s * px + xf2.q.c * py; + out.x = x2; + out.y = y; + return out; + } + function retransformVec2(out, from, to, v3) { + var x0 = from.q.c * v3.x - from.q.s * v3.y + from.p.x; + var y0 = from.q.s * v3.x + from.q.c * v3.y + from.p.y; + var px = x0 - to.p.x; + var py = y0 - to.p.y; + var x2 = to.q.c * px + to.q.s * py; + var y = -to.q.s * px + to.q.c * py; + out.x = x2; + out.y = y; + return out; + } + function detransformTransform(out, a2, b2) { + var c2 = a2.q.c * b2.q.c + a2.q.s * b2.q.s; + var s2 = a2.q.c * b2.q.s - a2.q.s * b2.q.c; + var x2 = a2.q.c * (b2.p.x - a2.p.x) + a2.q.s * (b2.p.y - a2.p.y); + var y = -a2.q.s * (b2.p.x - a2.p.x) + a2.q.c * (b2.p.y - a2.p.y); + out.q.c = c2; + out.q.s = s2; + out.p.x = x2; + out.p.y = y; + return out; + } + var math_sin$1 = Math.sin; + var math_cos$1 = Math.cos; + var math_atan2$1 = Math.atan2; + var Rot = ( + /** @class */ + function() { + function Rot2(angle) { + if (!(this instanceof Rot2)) { + return new Rot2(angle); + } + if (typeof angle === "number") { + this.setAngle(angle); + } else if (typeof angle === "object") { + this.setRot(angle); + } else { + this.setIdentity(); + } + } + Rot2.neo = function(angle) { + var obj = Object.create(Rot2.prototype); + obj.setAngle(angle); + return obj; + }; + Rot2.clone = function(rot) { + var obj = Object.create(Rot2.prototype); + obj.s = rot.s; + obj.c = rot.c; + return obj; + }; + Rot2.identity = function() { + var obj = Object.create(Rot2.prototype); + obj.s = 0; + obj.c = 1; + return obj; + }; + Rot2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Number.isFinite(obj.s) && Number.isFinite(obj.c); + }; + Rot2.assert = function(o) { + }; + Rot2.prototype.setIdentity = function() { + this.s = 0; + this.c = 1; + }; + Rot2.prototype.set = function(angle) { + if (typeof angle === "object") { + this.s = angle.s; + this.c = angle.c; + } else { + this.s = math_sin$1(angle); + this.c = math_cos$1(angle); + } + }; + Rot2.prototype.setRot = function(angle) { + this.s = angle.s; + this.c = angle.c; + }; + Rot2.prototype.setAngle = function(angle) { + this.s = math_sin$1(angle); + this.c = math_cos$1(angle); + }; + Rot2.prototype.getAngle = function() { + return math_atan2$1(this.s, this.c); + }; + Rot2.prototype.getXAxis = function() { + return Vec2.neo(this.c, this.s); + }; + Rot2.prototype.getYAxis = function() { + return Vec2.neo(-this.s, this.c); + }; + Rot2.mul = function(rot, m) { + if ("c" in m && "s" in m) { + var qr = Rot2.identity(); + qr.s = rot.s * m.c + rot.c * m.s; + qr.c = rot.c * m.c - rot.s * m.s; + return qr; + } else if ("x" in m && "y" in m) { + return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y); + } + }; + Rot2.mulRot = function(rot, m) { + var qr = Rot2.identity(); + qr.s = rot.s * m.c + rot.c * m.s; + qr.c = rot.c * m.c - rot.s * m.s; + return qr; + }; + Rot2.mulVec2 = function(rot, m) { + return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y); + }; + Rot2.mulSub = function(rot, v3, w) { + var x2 = rot.c * (v3.x - w.x) - rot.s * (v3.y - w.y); + var y = rot.s * (v3.x - w.x) + rot.c * (v3.y - w.y); + return Vec2.neo(x2, y); + }; + Rot2.mulT = function(rot, m) { + if ("c" in m && "s" in m) { + var qr = Rot2.identity(); + qr.s = rot.c * m.s - rot.s * m.c; + qr.c = rot.c * m.c + rot.s * m.s; + return qr; + } else if ("x" in m && "y" in m) { + return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y); + } + }; + Rot2.mulTRot = function(rot, m) { + var qr = Rot2.identity(); + qr.s = rot.c * m.s - rot.s * m.c; + qr.c = rot.c * m.c + rot.s * m.s; + return qr; + }; + Rot2.mulTVec2 = function(rot, m) { + return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y); + }; + return Rot2; + }() + ); + var math_atan2 = Math.atan2; + var math_PI$5 = Math.PI; + var temp$7 = vec2(0, 0); + var Sweep = ( + /** @class */ + function() { + function Sweep2() { + this.localCenter = Vec2.zero(); + this.c = Vec2.zero(); + this.a = 0; + this.alpha0 = 0; + this.c0 = Vec2.zero(); + this.a0 = 0; + } + Sweep2.prototype.recycle = function() { + zeroVec2(this.localCenter); + zeroVec2(this.c); + this.a = 0; + this.alpha0 = 0; + zeroVec2(this.c0); + this.a0 = 0; + }; + Sweep2.prototype.setTransform = function(xf2) { + transformVec2(temp$7, xf2, this.localCenter); + copyVec2(this.c, temp$7); + copyVec2(this.c0, temp$7); + this.a = this.a0 = math_atan2(xf2.q.s, xf2.q.c); + }; + Sweep2.prototype.setLocalCenter = function(localCenter2, xf2) { + copyVec2(this.localCenter, localCenter2); + transformVec2(temp$7, xf2, this.localCenter); + copyVec2(this.c, temp$7); + copyVec2(this.c0, temp$7); + }; + Sweep2.prototype.getTransform = function(xf2, beta) { + if (beta === void 0) { + beta = 0; + } + setRotAngle(xf2.q, (1 - beta) * this.a0 + beta * this.a); + combine2Vec2(xf2.p, 1 - beta, this.c0, beta, this.c); + minusVec2(xf2.p, rotVec2(temp$7, xf2.q, this.localCenter)); + }; + Sweep2.prototype.advance = function(alpha) { + var beta = (alpha - this.alpha0) / (1 - this.alpha0); + combine2Vec2(this.c0, beta, this.c, 1 - beta, this.c0); + this.a0 = beta * this.a + (1 - beta) * this.a0; + this.alpha0 = alpha; + }; + Sweep2.prototype.forward = function() { + this.a0 = this.a; + copyVec2(this.c0, this.c); + }; + Sweep2.prototype.normalize = function() { + var a0 = mod(this.a0, -math_PI$5, +math_PI$5); + this.a -= this.a0 - a0; + this.a0 = a0; + }; + Sweep2.prototype.set = function(that) { + copyVec2(this.localCenter, that.localCenter); + copyVec2(this.c, that.c); + this.a = that.a; + this.alpha0 = that.alpha0; + copyVec2(this.c0, that.c0); + this.a0 = that.a0; + }; + return Sweep2; + }() + ); + var Transform = ( + /** @class */ + function() { + function Transform2(position, rotation2) { + if (!(this instanceof Transform2)) { + return new Transform2(position, rotation2); + } + this.p = Vec2.zero(); + this.q = Rot.identity(); + if (typeof position !== "undefined") { + this.p.setVec2(position); + } + if (typeof rotation2 !== "undefined") { + this.q.setAngle(rotation2); + } + } + Transform2.clone = function(xf2) { + var obj = Object.create(Transform2.prototype); + obj.p = Vec2.clone(xf2.p); + obj.q = Rot.clone(xf2.q); + return obj; + }; + Transform2.neo = function(position, rotation2) { + var obj = Object.create(Transform2.prototype); + obj.p = Vec2.clone(position); + obj.q = Rot.clone(rotation2); + return obj; + }; + Transform2.identity = function() { + var obj = Object.create(Transform2.prototype); + obj.p = Vec2.zero(); + obj.q = Rot.identity(); + return obj; + }; + Transform2.prototype.setIdentity = function() { + this.p.setZero(); + this.q.setIdentity(); + }; + Transform2.prototype.set = function(a2, b2) { + if (typeof b2 === "undefined") { + this.p.set(a2.p); + this.q.set(a2.q); + } else { + this.p.set(a2); + this.q.set(b2); + } + }; + Transform2.prototype.setNum = function(position, rotation2) { + this.p.setVec2(position); + this.q.setAngle(rotation2); + }; + Transform2.prototype.setTransform = function(xf2) { + this.p.setVec2(xf2.p); + this.q.setRot(xf2.q); + }; + Transform2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec2.isValid(obj.p) && Rot.isValid(obj.q); + }; + Transform2.assert = function(o) { + }; + Transform2.mul = function(a2, b2) { + if (Array.isArray(b2)) { + var arr = []; + for (var i = 0; i < b2.length; i++) { + arr[i] = Transform2.mul(a2, b2[i]); + } + return arr; + } else if ("x" in b2 && "y" in b2) { + return Transform2.mulVec2(a2, b2); + } else if ("p" in b2 && "q" in b2) { + return Transform2.mulXf(a2, b2); + } + }; + Transform2.mulAll = function(a2, b2) { + var arr = []; + for (var i = 0; i < b2.length; i++) { + arr[i] = Transform2.mul(a2, b2[i]); + } + return arr; + }; + Transform2.mulFn = function(a2) { + return function(b2) { + return Transform2.mul(a2, b2); + }; + }; + Transform2.mulVec2 = function(a2, b2) { + var x2 = a2.q.c * b2.x - a2.q.s * b2.y + a2.p.x; + var y = a2.q.s * b2.x + a2.q.c * b2.y + a2.p.y; + return Vec2.neo(x2, y); + }; + Transform2.mulXf = function(a2, b2) { + var xf2 = Transform2.identity(); + xf2.q = Rot.mulRot(a2.q, b2.q); + xf2.p = Vec2.add(Rot.mulVec2(a2.q, b2.p), a2.p); + return xf2; + }; + Transform2.mulT = function(a2, b2) { + if ("x" in b2 && "y" in b2) { + return Transform2.mulTVec2(a2, b2); + } else if ("p" in b2 && "q" in b2) { + return Transform2.mulTXf(a2, b2); + } + }; + Transform2.mulTVec2 = function(a2, b2) { + var px = b2.x - a2.p.x; + var py = b2.y - a2.p.y; + var x2 = a2.q.c * px + a2.q.s * py; + var y = -a2.q.s * px + a2.q.c * py; + return Vec2.neo(x2, y); + }; + Transform2.mulTXf = function(a2, b2) { + var xf2 = Transform2.identity(); + xf2.q.setRot(Rot.mulTRot(a2.q, b2.q)); + xf2.p.setVec2(Rot.mulTVec2(a2.q, Vec2.sub(b2.p, a2.p))); + return xf2; + }; + return Transform2; + }() + ); + var Velocity = ( + /** @class */ + /* @__PURE__ */ function() { + function Velocity2() { + this.v = Vec2.zero(); + this.w = 0; + } + return Velocity2; + }() + ); + var math_sin = Math.sin; + var math_cos = Math.cos; + var Position = ( + /** @class */ + function() { + function Position2() { + this.c = Vec2.zero(); + this.a = 0; + } + Position2.prototype.getTransform = function(xf2, p) { + xf2.q.c = math_cos(this.a); + xf2.q.s = math_sin(this.a); + xf2.p.x = this.c.x - (xf2.q.c * p.x - xf2.q.s * p.y); + xf2.p.y = this.c.y - (xf2.q.s * p.x + xf2.q.c * p.y); + return xf2; + }; + return Position2; + }() + ); + function getTransform(xf2, p, c2, a2) { + xf2.q.c = math_cos(a2); + xf2.q.s = math_sin(a2); + xf2.p.x = c2.x - (xf2.q.c * p.x - xf2.q.s * p.y); + xf2.p.y = c2.y - (xf2.q.s * p.x + xf2.q.c * p.y); + return xf2; + } + var Shape = ( + /** @class */ + function() { + function Shape2() { + this.style = {}; + this.appData = {}; + } + Shape2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return typeof obj.m_type === "string" && typeof obj.m_radius === "number"; + }; + return Shape2; + }() + ); + var synchronize_aabb1 = new AABB(); + var synchronize_aabb2 = new AABB(); + var displacement = vec2(0, 0); + var FixtureDefDefault = { + userData: null, + friction: 0.2, + restitution: 0, + density: 0, + isSensor: false, + filterGroupIndex: 0, + filterCategoryBits: 1, + filterMaskBits: 65535 + }; + var FixtureProxy = ( + /** @class */ + /* @__PURE__ */ function() { + function FixtureProxy2(fixture, childIndex) { + this.aabb = new AABB(); + this.fixture = fixture; + this.childIndex = childIndex; + this.proxyId; + } + return FixtureProxy2; + }() + ); + var Fixture = ( + /** @class */ + function() { + function Fixture2(body, shape, def) { + this.style = {}; + this.appData = {}; + if (shape.shape) { + def = shape; + shape = shape.shape; + } else if (typeof def === "number") { + def = { density: def }; + } + def = options(def, FixtureDefDefault); + this.m_body = body; + this.m_friction = def.friction; + this.m_restitution = def.restitution; + this.m_density = def.density; + this.m_isSensor = def.isSensor; + this.m_filterGroupIndex = def.filterGroupIndex; + this.m_filterCategoryBits = def.filterCategoryBits; + this.m_filterMaskBits = def.filterMaskBits; + this.m_shape = shape; + this.m_next = null; + this.m_proxies = []; + this.m_proxyCount = 0; + var childCount = this.m_shape.getChildCount(); + for (var i = 0; i < childCount; ++i) { + this.m_proxies[i] = new FixtureProxy(this, i); + } + this.m_userData = def.userData; + } + Fixture2.prototype._reset = function() { + var body = this.getBody(); + var broadPhase = body.m_world.m_broadPhase; + this.destroyProxies(broadPhase); + if (this.m_shape._reset) { + this.m_shape._reset(); + } + var childCount = this.m_shape.getChildCount(); + for (var i = 0; i < childCount; ++i) { + this.m_proxies[i] = new FixtureProxy(this, i); + } + this.createProxies(broadPhase, body.m_xf); + body.resetMassData(); + }; + Fixture2.prototype._serialize = function() { + return { + friction: this.m_friction, + restitution: this.m_restitution, + density: this.m_density, + isSensor: this.m_isSensor, + filterGroupIndex: this.m_filterGroupIndex, + filterCategoryBits: this.m_filterCategoryBits, + filterMaskBits: this.m_filterMaskBits, + shape: this.m_shape + }; + }; + Fixture2._deserialize = function(data, body, restore) { + var shape = restore(Shape, data.shape); + var fixture = shape && new Fixture2(body, shape, data); + return fixture; + }; + Fixture2.prototype.getType = function() { + return this.m_shape.m_type; + }; + Fixture2.prototype.getShape = function() { + return this.m_shape; + }; + Fixture2.prototype.isSensor = function() { + return this.m_isSensor; + }; + Fixture2.prototype.setSensor = function(sensor) { + if (sensor != this.m_isSensor) { + this.m_body.setAwake(true); + this.m_isSensor = sensor; + } + }; + Fixture2.prototype.getUserData = function() { + return this.m_userData; + }; + Fixture2.prototype.setUserData = function(data) { + this.m_userData = data; + }; + Fixture2.prototype.getBody = function() { + return this.m_body; + }; + Fixture2.prototype.getNext = function() { + return this.m_next; + }; + Fixture2.prototype.getDensity = function() { + return this.m_density; + }; + Fixture2.prototype.setDensity = function(density) { + this.m_density = density; + }; + Fixture2.prototype.getFriction = function() { + return this.m_friction; + }; + Fixture2.prototype.setFriction = function(friction) { + this.m_friction = friction; + }; + Fixture2.prototype.getRestitution = function() { + return this.m_restitution; + }; + Fixture2.prototype.setRestitution = function(restitution) { + this.m_restitution = restitution; + }; + Fixture2.prototype.testPoint = function(p) { + return this.m_shape.testPoint(this.m_body.getTransform(), p); + }; + Fixture2.prototype.rayCast = function(output2, input2, childIndex) { + return this.m_shape.rayCast(output2, input2, this.m_body.getTransform(), childIndex); + }; + Fixture2.prototype.getMassData = function(massData) { + this.m_shape.computeMass(massData, this.m_density); + }; + Fixture2.prototype.getAABB = function(childIndex) { + return this.m_proxies[childIndex].aabb; + }; + Fixture2.prototype.createProxies = function(broadPhase, xf2) { + this.m_proxyCount = this.m_shape.getChildCount(); + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i]; + this.m_shape.computeAABB(proxy.aabb, xf2, i); + proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy); + } + }; + Fixture2.prototype.destroyProxies = function(broadPhase) { + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i]; + broadPhase.destroyProxy(proxy.proxyId); + proxy.proxyId = null; + } + this.m_proxyCount = 0; + }; + Fixture2.prototype.synchronize = function(broadPhase, xf1, xf2) { + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i]; + this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex); + this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex); + proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2); + subVec2(displacement, xf2.p, xf1.p); + broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement); + } + }; + Fixture2.prototype.setFilterData = function(filter) { + this.m_filterGroupIndex = filter.groupIndex; + this.m_filterCategoryBits = filter.categoryBits; + this.m_filterMaskBits = filter.maskBits; + this.refilter(); + }; + Fixture2.prototype.getFilterGroupIndex = function() { + return this.m_filterGroupIndex; + }; + Fixture2.prototype.setFilterGroupIndex = function(groupIndex) { + this.m_filterGroupIndex = groupIndex; + this.refilter(); + }; + Fixture2.prototype.getFilterCategoryBits = function() { + return this.m_filterCategoryBits; + }; + Fixture2.prototype.setFilterCategoryBits = function(categoryBits) { + this.m_filterCategoryBits = categoryBits; + this.refilter(); + }; + Fixture2.prototype.getFilterMaskBits = function() { + return this.m_filterMaskBits; + }; + Fixture2.prototype.setFilterMaskBits = function(maskBits) { + this.m_filterMaskBits = maskBits; + this.refilter(); + }; + Fixture2.prototype.refilter = function() { + if (this.m_body == null) { + return; + } + var edge = this.m_body.getContactList(); + while (edge) { + var contact = edge.contact; + var fixtureA = contact.getFixtureA(); + var fixtureB = contact.getFixtureB(); + if (fixtureA == this || fixtureB == this) { + contact.flagForFiltering(); + } + edge = edge.next; + } + var world = this.m_body.getWorld(); + if (world == null) { + return; + } + var broadPhase = world.m_broadPhase; + for (var i = 0; i < this.m_proxyCount; ++i) { + broadPhase.touchProxy(this.m_proxies[i].proxyId); + } + }; + Fixture2.prototype.shouldCollide = function(that) { + if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) { + return that.m_filterGroupIndex > 0; + } + var collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0; + var collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0; + var collide = collideA && collideB; + return collide; + }; + return Fixture2; + }() + ); + var STATIC = "static"; + var KINEMATIC = "kinematic"; + var DYNAMIC = "dynamic"; + var oldCenter = vec2(0, 0); + var localCenter = vec2(0, 0); + var shift = vec2(0, 0); + var temp$6 = vec2(0, 0); + var xf$2 = transform(0, 0, 0); + var BodyDefDefault = { + type: STATIC, + position: Vec2.zero(), + angle: 0, + linearVelocity: Vec2.zero(), + angularVelocity: 0, + linearDamping: 0, + angularDamping: 0, + fixedRotation: false, + bullet: false, + gravityScale: 1, + allowSleep: true, + awake: true, + active: true, + userData: null + }; + var Body = ( + /** @class */ + function() { + function Body2(world, def) { + this.style = {}; + this.appData = {}; + def = options(def, BodyDefDefault); + this.m_world = world; + this.m_awakeFlag = def.awake; + this.m_autoSleepFlag = def.allowSleep; + this.m_bulletFlag = def.bullet; + this.m_fixedRotationFlag = def.fixedRotation; + this.m_activeFlag = def.active; + this.m_islandFlag = false; + this.m_toiFlag = false; + this.m_userData = def.userData; + this.m_type = def.type; + if (this.m_type == DYNAMIC) { + this.m_mass = 1; + this.m_invMass = 1; + } else { + this.m_mass = 0; + this.m_invMass = 0; + } + this.m_I = 0; + this.m_invI = 0; + this.m_xf = Transform.identity(); + this.m_xf.p.setVec2(def.position); + this.m_xf.q.setAngle(def.angle); + this.m_sweep = new Sweep(); + this.m_sweep.setTransform(this.m_xf); + this.c_velocity = new Velocity(); + this.c_position = new Position(); + this.m_force = Vec2.zero(); + this.m_torque = 0; + this.m_linearVelocity = Vec2.clone(def.linearVelocity); + this.m_angularVelocity = def.angularVelocity; + this.m_linearDamping = def.linearDamping; + this.m_angularDamping = def.angularDamping; + this.m_gravityScale = def.gravityScale; + this.m_sleepTime = 0; + this.m_jointList = null; + this.m_contactList = null; + this.m_fixtureList = null; + this.m_prev = null; + this.m_next = null; + this.m_destroyed = false; + } + Body2.prototype._serialize = function() { + var fixtures = []; + for (var f = this.m_fixtureList; f; f = f.m_next) { + fixtures.push(f); + } + return { + type: this.m_type, + bullet: this.m_bulletFlag, + position: this.m_xf.p, + angle: this.m_xf.q.getAngle(), + linearVelocity: this.m_linearVelocity, + angularVelocity: this.m_angularVelocity, + fixtures + }; + }; + Body2._deserialize = function(data, world, restore) { + var body = new Body2(world, data); + if (data.fixtures) { + for (var i = data.fixtures.length - 1; i >= 0; i--) { + var fixture = restore(Fixture, data.fixtures[i], body); + body._addFixture(fixture); + } + } + return body; + }; + Body2.prototype.isWorldLocked = function() { + return this.m_world && this.m_world.isLocked() ? true : false; + }; + Body2.prototype.getWorld = function() { + return this.m_world; + }; + Body2.prototype.getNext = function() { + return this.m_next; + }; + Body2.prototype.setUserData = function(data) { + this.m_userData = data; + }; + Body2.prototype.getUserData = function() { + return this.m_userData; + }; + Body2.prototype.getFixtureList = function() { + return this.m_fixtureList; + }; + Body2.prototype.getJointList = function() { + return this.m_jointList; + }; + Body2.prototype.getContactList = function() { + return this.m_contactList; + }; + Body2.prototype.isStatic = function() { + return this.m_type == STATIC; + }; + Body2.prototype.isDynamic = function() { + return this.m_type == DYNAMIC; + }; + Body2.prototype.isKinematic = function() { + return this.m_type == KINEMATIC; + }; + Body2.prototype.setStatic = function() { + this.setType(STATIC); + return this; + }; + Body2.prototype.setDynamic = function() { + this.setType(DYNAMIC); + return this; + }; + Body2.prototype.setKinematic = function() { + this.setType(KINEMATIC); + return this; + }; + Body2.prototype.getType = function() { + return this.m_type; + }; + Body2.prototype.setType = function(type) { + if (this.isWorldLocked() == true) { + return; + } + if (this.m_type == type) { + return; + } + this.m_type = type; + this.resetMassData(); + if (this.m_type == STATIC) { + this.m_linearVelocity.setZero(); + this.m_angularVelocity = 0; + this.m_sweep.forward(); + this.synchronizeFixtures(); + } + this.setAwake(true); + this.m_force.setZero(); + this.m_torque = 0; + var ce = this.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.m_world.destroyContact(ce0.contact); + } + this.m_contactList = null; + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + for (var i = 0; i < f.m_proxyCount; ++i) { + broadPhase.touchProxy(f.m_proxies[i].proxyId); + } + } + }; + Body2.prototype.isBullet = function() { + return this.m_bulletFlag; + }; + Body2.prototype.setBullet = function(flag) { + this.m_bulletFlag = !!flag; + }; + Body2.prototype.isSleepingAllowed = function() { + return this.m_autoSleepFlag; + }; + Body2.prototype.setSleepingAllowed = function(flag) { + this.m_autoSleepFlag = !!flag; + if (this.m_autoSleepFlag == false) { + this.setAwake(true); + } + }; + Body2.prototype.isAwake = function() { + return this.m_awakeFlag; + }; + Body2.prototype.setAwake = function(flag) { + if (flag) { + this.m_awakeFlag = true; + this.m_sleepTime = 0; + } else { + this.m_awakeFlag = false; + this.m_sleepTime = 0; + this.m_linearVelocity.setZero(); + this.m_angularVelocity = 0; + this.m_force.setZero(); + this.m_torque = 0; + } + }; + Body2.prototype.isActive = function() { + return this.m_activeFlag; + }; + Body2.prototype.setActive = function(flag) { + if (flag == this.m_activeFlag) { + return; + } + this.m_activeFlag = !!flag; + if (this.m_activeFlag) { + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.createProxies(broadPhase, this.m_xf); + } + this.m_world.m_newFixture = true; + } else { + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.destroyProxies(broadPhase); + } + var ce = this.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.m_world.destroyContact(ce0.contact); + } + this.m_contactList = null; + } + }; + Body2.prototype.isFixedRotation = function() { + return this.m_fixedRotationFlag; + }; + Body2.prototype.setFixedRotation = function(flag) { + if (this.m_fixedRotationFlag == flag) { + return; + } + this.m_fixedRotationFlag = !!flag; + this.m_angularVelocity = 0; + this.resetMassData(); + }; + Body2.prototype.getTransform = function() { + return this.m_xf; + }; + Body2.prototype.setTransform = function(position, angle) { + if (this.isWorldLocked() == true) { + return; + } + this.m_xf.setNum(position, angle); + this.m_sweep.setTransform(this.m_xf); + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.synchronize(broadPhase, this.m_xf, this.m_xf); + } + this.setAwake(true); + }; + Body2.prototype.synchronizeTransform = function() { + this.m_sweep.getTransform(this.m_xf, 1); + }; + Body2.prototype.synchronizeFixtures = function() { + this.m_sweep.getTransform(xf$2, 0); + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.synchronize(broadPhase, xf$2, this.m_xf); + } + }; + Body2.prototype.advance = function(alpha) { + this.m_sweep.advance(alpha); + copyVec2(this.m_sweep.c, this.m_sweep.c0); + this.m_sweep.a = this.m_sweep.a0; + this.m_sweep.getTransform(this.m_xf, 1); + }; + Body2.prototype.getPosition = function() { + return this.m_xf.p; + }; + Body2.prototype.setPosition = function(p) { + this.setTransform(p, this.m_sweep.a); + }; + Body2.prototype.getAngle = function() { + return this.m_sweep.a; + }; + Body2.prototype.setAngle = function(angle) { + this.setTransform(this.m_xf.p, angle); + }; + Body2.prototype.getWorldCenter = function() { + return this.m_sweep.c; + }; + Body2.prototype.getLocalCenter = function() { + return this.m_sweep.localCenter; + }; + Body2.prototype.getLinearVelocity = function() { + return this.m_linearVelocity; + }; + Body2.prototype.getLinearVelocityFromWorldPoint = function(worldPoint) { + var localCenter2 = Vec2.sub(worldPoint, this.m_sweep.c); + return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity, localCenter2)); + }; + Body2.prototype.getLinearVelocityFromLocalPoint = function(localPoint) { + return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint)); + }; + Body2.prototype.setLinearVelocity = function(v3) { + if (this.m_type == STATIC) { + return; + } + if (Vec2.dot(v3, v3) > 0) { + this.setAwake(true); + } + this.m_linearVelocity.setVec2(v3); + }; + Body2.prototype.getAngularVelocity = function() { + return this.m_angularVelocity; + }; + Body2.prototype.setAngularVelocity = function(w) { + if (this.m_type == STATIC) { + return; + } + if (w * w > 0) { + this.setAwake(true); + } + this.m_angularVelocity = w; + }; + Body2.prototype.getLinearDamping = function() { + return this.m_linearDamping; + }; + Body2.prototype.setLinearDamping = function(linearDamping) { + this.m_linearDamping = linearDamping; + }; + Body2.prototype.getAngularDamping = function() { + return this.m_angularDamping; + }; + Body2.prototype.setAngularDamping = function(angularDamping) { + this.m_angularDamping = angularDamping; + }; + Body2.prototype.getGravityScale = function() { + return this.m_gravityScale; + }; + Body2.prototype.setGravityScale = function(scale) { + this.m_gravityScale = scale; + }; + Body2.prototype.getMass = function() { + return this.m_mass; + }; + Body2.prototype.getInertia = function() { + return this.m_I + this.m_mass * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter); + }; + Body2.prototype.getMassData = function(data) { + data.mass = this.m_mass; + data.I = this.getInertia(); + copyVec2(data.center, this.m_sweep.localCenter); + }; + Body2.prototype.resetMassData = function() { + this.m_mass = 0; + this.m_invMass = 0; + this.m_I = 0; + this.m_invI = 0; + zeroVec2(this.m_sweep.localCenter); + if (this.isStatic() || this.isKinematic()) { + copyVec2(this.m_sweep.c0, this.m_xf.p); + copyVec2(this.m_sweep.c, this.m_xf.p); + this.m_sweep.a0 = this.m_sweep.a; + return; + } + zeroVec2(localCenter); + for (var f = this.m_fixtureList; f; f = f.m_next) { + if (f.m_density == 0) { + continue; + } + var massData = { + mass: 0, + center: vec2(0, 0), + I: 0 + }; + f.getMassData(massData); + this.m_mass += massData.mass; + plusScaleVec2(localCenter, massData.mass, massData.center); + this.m_I += massData.I; + } + if (this.m_mass > 0) { + this.m_invMass = 1 / this.m_mass; + scaleVec2(localCenter, this.m_invMass, localCenter); + } else { + this.m_mass = 1; + this.m_invMass = 1; + } + if (this.m_I > 0 && this.m_fixedRotationFlag == false) { + this.m_I -= this.m_mass * dotVec2(localCenter, localCenter); + this.m_invI = 1 / this.m_I; + } else { + this.m_I = 0; + this.m_invI = 0; + } + copyVec2(oldCenter, this.m_sweep.c); + this.m_sweep.setLocalCenter(localCenter, this.m_xf); + subVec2(shift, this.m_sweep.c, oldCenter); + crossNumVec2(temp$6, this.m_angularVelocity, shift); + plusVec2(this.m_linearVelocity, temp$6); + }; + Body2.prototype.setMassData = function(massData) { + if (this.isWorldLocked() == true) { + return; + } + if (this.m_type != DYNAMIC) { + return; + } + this.m_invMass = 0; + this.m_I = 0; + this.m_invI = 0; + this.m_mass = massData.mass; + if (this.m_mass <= 0) { + this.m_mass = 1; + } + this.m_invMass = 1 / this.m_mass; + if (massData.I > 0 && this.m_fixedRotationFlag == false) { + this.m_I = massData.I - this.m_mass * dotVec2(massData.center, massData.center); + this.m_invI = 1 / this.m_I; + } + copyVec2(oldCenter, this.m_sweep.c); + this.m_sweep.setLocalCenter(massData.center, this.m_xf); + subVec2(shift, this.m_sweep.c, oldCenter); + crossNumVec2(temp$6, this.m_angularVelocity, shift); + plusVec2(this.m_linearVelocity, temp$6); + }; + Body2.prototype.applyForce = function(force, point2, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_force.add(force); + this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point2, this.m_sweep.c), force); + } + }; + Body2.prototype.applyForceToCenter = function(force, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_force.add(force); + } + }; + Body2.prototype.applyTorque = function(torque, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_torque += torque; + } + }; + Body2.prototype.applyLinearImpulse = function(impulse, point2, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_linearVelocity.addMul(this.m_invMass, impulse); + this.m_angularVelocity += this.m_invI * Vec2.crossVec2Vec2(Vec2.sub(point2, this.m_sweep.c), impulse); + } + }; + Body2.prototype.applyAngularImpulse = function(impulse, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_angularVelocity += this.m_invI * impulse; + } + }; + Body2.prototype.shouldCollide = function(that) { + if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) { + return false; } - else if (hasVertex0) { - if (convex1) { - front = offset0 >= 0.0 || offset1 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal0); - scaleVec2(upperLimit, -1, normal1); - } - else { - scaleVec2(normal, -1, normal1); - copyVec2(lowerLimit, normal1); - scaleVec2(upperLimit, -1, normal1); - } - } - else { - front = offset0 >= 0.0 && offset1 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal1); - scaleVec2(upperLimit, -1, normal1); - } - else { - scaleVec2(normal, -1, normal1); - copyVec2(lowerLimit, normal1); - scaleVec2(upperLimit, -1, normal0); - } - } - } - else if (hasVertex3) { - if (convex2) { - front = offset1 >= 0.0 || offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - scaleVec2(lowerLimit, -1, normal1); - copyVec2(upperLimit, normal2); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal1); - copyVec2(upperLimit, normal1); - } - } - else { - front = offset1 >= 0.0 && offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - scaleVec2(lowerLimit, -1, normal1); - copyVec2(upperLimit, normal1); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal2); - copyVec2(upperLimit, normal1); - } + for (var jn = this.m_jointList; jn; jn = jn.next) { + if (jn.other == that) { + if (jn.joint.m_collideConnected == false) { + return false; } + } } - else { - front = offset1 >= 0.0; - if (front) { - copyVec2(normal, normal1); - scaleVec2(lowerLimit, -1, normal1); - scaleVec2(upperLimit, -1, normal1); - } - else { - scaleVec2(normal, -1, normal1); - copyVec2(lowerLimit, normal1); - copyVec2(upperLimit, normal1); - } + return true; + }; + Body2.prototype._addFixture = function(fixture) { + if (this.isWorldLocked() == true) { + return null; + } + if (this.m_activeFlag) { + var broadPhase = this.m_world.m_broadPhase; + fixture.createProxies(broadPhase, this.m_xf); + } + fixture.m_next = this.m_fixtureList; + this.m_fixtureList = fixture; + if (fixture.m_density > 0) { + this.resetMassData(); + } + this.m_world.m_newFixture = true; + return fixture; + }; + Body2.prototype.createFixture = function(shape, fixdef) { + if (this.isWorldLocked() == true) { + return null; + } + var fixture = new Fixture(this, shape, fixdef); + this._addFixture(fixture); + return fixture; + }; + Body2.prototype.destroyFixture = function(fixture) { + if (this.isWorldLocked() == true) { + return; + } + if (this.m_fixtureList === fixture) { + this.m_fixtureList = fixture.m_next; + } else { + var node = this.m_fixtureList; + while (node != null) { + if (node.m_next === fixture) { + node.m_next = fixture.m_next; + break; + } + node = node.m_next; + } + } + var edge = this.m_contactList; + while (edge) { + var c2 = edge.contact; + edge = edge.next; + var fixtureA = c2.getFixtureA(); + var fixtureB = c2.getFixtureB(); + if (fixture == fixtureA || fixture == fixtureB) { + this.m_world.destroyContact(c2); + } + } + if (this.m_activeFlag) { + var broadPhase = this.m_world.m_broadPhase; + fixture.destroyProxies(broadPhase); + } + fixture.m_body = null; + fixture.m_next = null; + this.m_world.publish("remove-fixture", fixture); + this.resetMassData(); + }; + Body2.prototype.getWorldPoint = function(localPoint) { + return Transform.mulVec2(this.m_xf, localPoint); + }; + Body2.prototype.getWorldVector = function(localVector) { + return Rot.mulVec2(this.m_xf.q, localVector); + }; + Body2.prototype.getLocalPoint = function(worldPoint) { + return Transform.mulTVec2(this.m_xf, worldPoint); + }; + Body2.prototype.getLocalVector = function(worldVector) { + return Rot.mulTVec2(this.m_xf.q, worldVector); + }; + Body2.STATIC = "static"; + Body2.KINEMATIC = "kinematic"; + Body2.DYNAMIC = "dynamic"; + return Body2; + }() + ); + var JointEdge = ( + /** @class */ + /* @__PURE__ */ function() { + function JointEdge2() { + this.other = null; + this.joint = null; + this.prev = null; + this.next = null; + } + return JointEdge2; + }() + ); + var Joint = ( + /** @class */ + function() { + function Joint2(def, bodyA, bodyB) { + this.m_type = "unknown-joint"; + this.m_prev = null; + this.m_next = null; + this.m_edgeA = new JointEdge(); + this.m_edgeB = new JointEdge(); + this.m_islandFlag = false; + this.style = {}; + this.appData = {}; + bodyA = "bodyA" in def ? def.bodyA : bodyA; + bodyB = "bodyB" in def ? def.bodyB : bodyB; + this.m_bodyA = bodyA; + this.m_bodyB = bodyB; + this.m_collideConnected = !!def.collideConnected; + this.m_userData = def.userData; + } + Joint2.prototype.isActive = function() { + return this.m_bodyA.isActive() && this.m_bodyB.isActive(); + }; + Joint2.prototype.getType = function() { + return this.m_type; + }; + Joint2.prototype.getBodyA = function() { + return this.m_bodyA; + }; + Joint2.prototype.getBodyB = function() { + return this.m_bodyB; + }; + Joint2.prototype.getNext = function() { + return this.m_next; + }; + Joint2.prototype.getUserData = function() { + return this.m_userData; + }; + Joint2.prototype.setUserData = function(data) { + this.m_userData = data; + }; + Joint2.prototype.getCollideConnected = function() { + return this.m_collideConnected; + }; + Joint2.prototype.shiftOrigin = function(newOrigin) { + }; + Joint2.prototype._resetAnchors = function(def) { + return this._reset(def); + }; + return Joint2; + }() + ); + var stats = { + gjkCalls: 0, + gjkIters: 0, + gjkMaxIters: 0, + toiTime: 0, + toiMaxTime: 0, + toiCalls: 0, + toiIters: 0, + toiMaxIters: 0, + toiRootIters: 0, + toiMaxRootIters: 0, + toString: function(newline) { + newline = typeof newline === "string" ? newline : "\n"; + var string = ""; + for (var name_1 in this) { + if (typeof this[name_1] !== "function" && typeof this[name_1] !== "object") { + string += name_1 + ": " + this[name_1] + newline; + } + } + return string; + } + }; + var now = function() { + return Date.now(); + }; + var diff = function(time) { + return Date.now() - time; + }; + const Timer = { + now, + diff + }; + var math_max$4 = Math.max; + var temp$5 = vec2(0, 0); + var normal$4 = vec2(0, 0); + var e12 = vec2(0, 0); + var e13 = vec2(0, 0); + var e23 = vec2(0, 0); + var temp1 = vec2(0, 0); + var temp2 = vec2(0, 0); + stats.gjkCalls = 0; + stats.gjkIters = 0; + stats.gjkMaxIters = 0; + var DistanceInput = ( + /** @class */ + function() { + function DistanceInput2() { + this.proxyA = new DistanceProxy(); + this.proxyB = new DistanceProxy(); + this.transformA = Transform.identity(); + this.transformB = Transform.identity(); + this.useRadii = false; + } + DistanceInput2.prototype.recycle = function() { + this.proxyA.recycle(); + this.proxyB.recycle(); + this.transformA.setIdentity(); + this.transformB.setIdentity(); + this.useRadii = false; + }; + return DistanceInput2; + }() + ); + var DistanceOutput = ( + /** @class */ + function() { + function DistanceOutput2() { + this.pointA = vec2(0, 0); + this.pointB = vec2(0, 0); + this.distance = 0; + this.iterations = 0; + } + DistanceOutput2.prototype.recycle = function() { + zeroVec2(this.pointA); + zeroVec2(this.pointB); + this.distance = 0; + this.iterations = 0; + }; + return DistanceOutput2; + }() + ); + var SimplexCache = ( + /** @class */ + function() { + function SimplexCache2() { + this.metric = 0; + this.indexA = []; + this.indexB = []; + this.count = 0; + } + SimplexCache2.prototype.recycle = function() { + this.metric = 0; + this.indexA.length = 0; + this.indexB.length = 0; + this.count = 0; + }; + return SimplexCache2; + }() + ); + var Distance = function(output2, cache2, input2) { + ++stats.gjkCalls; + var proxyA = input2.proxyA; + var proxyB = input2.proxyB; + var xfA2 = input2.transformA; + var xfB2 = input2.transformB; + simplex.recycle(); + simplex.readCache(cache2, proxyA, xfA2, proxyB, xfB2); + var vertices = simplex.m_v; + var k_maxIters = SettingsInternal.maxDistanceIterations; + var saveA = []; + var saveB = []; + var saveCount = 0; + var iter = 0; + while (iter < k_maxIters) { + saveCount = simplex.m_count; + for (var i = 0; i < saveCount; ++i) { + saveA[i] = vertices[i].indexA; + saveB[i] = vertices[i].indexB; + } + simplex.solve(); + if (simplex.m_count === 3) { + break; + } + var d2 = simplex.getSearchDirection(); + if (lengthSqrVec2(d2) < EPSILON * EPSILON) { + break; + } + var vertex = vertices[simplex.m_count]; + vertex.indexA = proxyA.getSupport(derotVec2(temp$5, xfA2.q, scaleVec2(temp$5, -1, d2))); + transformVec2(vertex.wA, xfA2, proxyA.getVertex(vertex.indexA)); + vertex.indexB = proxyB.getSupport(derotVec2(temp$5, xfB2.q, d2)); + transformVec2(vertex.wB, xfB2, proxyB.getVertex(vertex.indexB)); + subVec2(vertex.w, vertex.wB, vertex.wA); + ++iter; + ++stats.gjkIters; + var duplicate = false; + for (var i = 0; i < saveCount; ++i) { + if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) { + duplicate = true; + break; + } + } + if (duplicate) { + break; + } + ++simplex.m_count; + } + stats.gjkMaxIters = math_max$4(stats.gjkMaxIters, iter); + simplex.getWitnessPoints(output2.pointA, output2.pointB); + output2.distance = distVec2(output2.pointA, output2.pointB); + output2.iterations = iter; + simplex.writeCache(cache2); + if (input2.useRadii) { + var rA2 = proxyA.m_radius; + var rB2 = proxyB.m_radius; + if (output2.distance > rA2 + rB2 && output2.distance > EPSILON) { + output2.distance -= rA2 + rB2; + subVec2(normal$4, output2.pointB, output2.pointA); + normalizeVec2(normal$4); + plusScaleVec2(output2.pointA, rA2, normal$4); + minusScaleVec2(output2.pointB, rB2, normal$4); + } else { + var p = subVec2(temp$5, output2.pointA, output2.pointB); + copyVec2(output2.pointA, p); + copyVec2(output2.pointB, p); + output2.distance = 0; + } + } + }; + var DistanceProxy = ( + /** @class */ + function() { + function DistanceProxy2() { + this.m_vertices = []; + this.m_count = 0; + this.m_radius = 0; + } + DistanceProxy2.prototype.recycle = function() { + this.m_vertices.length = 0; + this.m_count = 0; + this.m_radius = 0; + }; + DistanceProxy2.prototype.getVertexCount = function() { + return this.m_count; + }; + DistanceProxy2.prototype.getVertex = function(index) { + return this.m_vertices[index]; + }; + DistanceProxy2.prototype.getSupport = function(d2) { + var bestIndex = -1; + var bestValue = -Infinity; + for (var i = 0; i < this.m_count; ++i) { + var value = dotVec2(this.m_vertices[i], d2); + if (value > bestValue) { + bestIndex = i; + bestValue = value; + } + } + return bestIndex; + }; + DistanceProxy2.prototype.getSupportVertex = function(d2) { + return this.m_vertices[this.getSupport(d2)]; + }; + DistanceProxy2.prototype.set = function(shape, index) { + shape.computeDistanceProxy(this, index); + }; + DistanceProxy2.prototype.setVertices = function(vertices, count, radius) { + this.m_vertices = vertices; + this.m_count = count; + this.m_radius = radius; + }; + return DistanceProxy2; + }() + ); + var SimplexVertex = ( + /** @class */ + function() { + function SimplexVertex2() { + this.wA = vec2(0, 0); + this.indexA = 0; + this.wB = vec2(0, 0); + this.indexB = 0; + this.w = vec2(0, 0); + this.a = 0; + } + SimplexVertex2.prototype.recycle = function() { + this.indexA = 0; + this.indexB = 0; + zeroVec2(this.wA); + zeroVec2(this.wB); + zeroVec2(this.w); + this.a = 0; + }; + SimplexVertex2.prototype.set = function(v3) { + this.indexA = v3.indexA; + this.indexB = v3.indexB; + copyVec2(this.wA, v3.wA); + copyVec2(this.wB, v3.wB); + copyVec2(this.w, v3.w); + this.a = v3.a; + }; + return SimplexVertex2; + }() + ); + var searchDirection_reuse = vec2(0, 0); + var closestPoint_reuse = vec2(0, 0); + var Simplex = ( + /** @class */ + function() { + function Simplex2() { + this.m_v1 = new SimplexVertex(); + this.m_v2 = new SimplexVertex(); + this.m_v3 = new SimplexVertex(); + this.m_v = [this.m_v1, this.m_v2, this.m_v3]; + } + Simplex2.prototype.recycle = function() { + this.m_v1.recycle(); + this.m_v2.recycle(); + this.m_v3.recycle(); + this.m_count = 0; + }; + Simplex2.prototype.toString = function() { + if (this.m_count === 3) { + return [ + "+" + this.m_count, + this.m_v1.a, + this.m_v1.wA.x, + this.m_v1.wA.y, + this.m_v1.wB.x, + this.m_v1.wB.y, + this.m_v2.a, + this.m_v2.wA.x, + this.m_v2.wA.y, + this.m_v2.wB.x, + this.m_v2.wB.y, + this.m_v3.a, + this.m_v3.wA.x, + this.m_v3.wA.y, + this.m_v3.wB.x, + this.m_v3.wB.y + ].toString(); + } else if (this.m_count === 2) { + return [ + "+" + this.m_count, + this.m_v1.a, + this.m_v1.wA.x, + this.m_v1.wA.y, + this.m_v1.wB.x, + this.m_v1.wB.y, + this.m_v2.a, + this.m_v2.wA.x, + this.m_v2.wA.y, + this.m_v2.wB.x, + this.m_v2.wB.y + ].toString(); + } else if (this.m_count === 1) { + return [ + "+" + this.m_count, + this.m_v1.a, + this.m_v1.wA.x, + this.m_v1.wA.y, + this.m_v1.wB.x, + this.m_v1.wB.y + ].toString(); + } else { + return "+" + this.m_count; + } + }; + Simplex2.prototype.readCache = function(cache2, proxyA, transformA, proxyB, transformB) { + this.m_count = cache2.count; + for (var i = 0; i < this.m_count; ++i) { + var v3 = this.m_v[i]; + v3.indexA = cache2.indexA[i]; + v3.indexB = cache2.indexB[i]; + var wALocal = proxyA.getVertex(v3.indexA); + var wBLocal = proxyB.getVertex(v3.indexB); + transformVec2(v3.wA, transformA, wALocal); + transformVec2(v3.wB, transformB, wBLocal); + subVec2(v3.w, v3.wB, v3.wA); + v3.a = 0; + } + if (this.m_count > 1) { + var metric1 = cache2.metric; + var metric2 = this.getMetric(); + if (metric2 < 0.5 * metric1 || 2 * metric1 < metric2 || metric2 < EPSILON) { + this.m_count = 0; + } + } + if (this.m_count === 0) { + var v3 = this.m_v[0]; + v3.indexA = 0; + v3.indexB = 0; + var wALocal = proxyA.getVertex(0); + var wBLocal = proxyB.getVertex(0); + transformVec2(v3.wA, transformA, wALocal); + transformVec2(v3.wB, transformB, wBLocal); + subVec2(v3.w, v3.wB, v3.wA); + v3.a = 1; + this.m_count = 1; + } + }; + Simplex2.prototype.writeCache = function(cache2) { + cache2.metric = this.getMetric(); + cache2.count = this.m_count; + for (var i = 0; i < this.m_count; ++i) { + cache2.indexA[i] = this.m_v[i].indexA; + cache2.indexB[i] = this.m_v[i].indexB; + } + }; + Simplex2.prototype.getSearchDirection = function() { + var v13 = this.m_v1; + var v22 = this.m_v2; + this.m_v3; + switch (this.m_count) { + case 1: + return setVec2(searchDirection_reuse, -v13.w.x, -v13.w.y); + case 2: { + subVec2(e12, v22.w, v13.w); + var sgn = -crossVec2Vec2(e12, v13.w); + if (sgn > 0) { + return setVec2(searchDirection_reuse, -e12.y, e12.x); + } else { + return setVec2(searchDirection_reuse, e12.y, -e12.x); + } + } + default: + return zeroVec2(searchDirection_reuse); + } + }; + Simplex2.prototype.getClosestPoint = function() { + var v13 = this.m_v1; + var v22 = this.m_v2; + this.m_v3; + switch (this.m_count) { + case 0: + return zeroVec2(closestPoint_reuse); + case 1: + return copyVec2(closestPoint_reuse, v13.w); + case 2: + return combine2Vec2(closestPoint_reuse, v13.a, v13.w, v22.a, v22.w); + case 3: + return zeroVec2(closestPoint_reuse); + default: + return zeroVec2(closestPoint_reuse); + } + }; + Simplex2.prototype.getWitnessPoints = function(pA2, pB2) { + var v13 = this.m_v1; + var v22 = this.m_v2; + var v3 = this.m_v3; + switch (this.m_count) { + case 0: + break; + case 1: + copyVec2(pA2, v13.wA); + copyVec2(pB2, v13.wB); + break; + case 2: + combine2Vec2(pA2, v13.a, v13.wA, v22.a, v22.wA); + combine2Vec2(pB2, v13.a, v13.wB, v22.a, v22.wB); + break; + case 3: + combine3Vec2(pA2, v13.a, v13.wA, v22.a, v22.wA, v3.a, v3.wA); + copyVec2(pB2, pA2); + break; + } + }; + Simplex2.prototype.getMetric = function() { + switch (this.m_count) { + case 0: + return 0; + case 1: + return 0; + case 2: + return distVec2(this.m_v1.w, this.m_v2.w); + case 3: + return crossVec2Vec2(subVec2(temp1, this.m_v2.w, this.m_v1.w), subVec2(temp2, this.m_v3.w, this.m_v1.w)); + default: + return 0; + } + }; + Simplex2.prototype.solve = function() { + switch (this.m_count) { + case 1: + break; + case 2: + this.solve2(); + break; + case 3: + this.solve3(); + break; + } + }; + Simplex2.prototype.solve2 = function() { + var w1 = this.m_v1.w; + var w2 = this.m_v2.w; + subVec2(e12, w2, w1); + var d12_2 = -dotVec2(w1, e12); + if (d12_2 <= 0) { + this.m_v1.a = 1; + this.m_count = 1; + return; + } + var d12_1 = dotVec2(w2, e12); + if (d12_1 <= 0) { + this.m_v2.a = 1; + this.m_count = 1; + this.m_v1.set(this.m_v2); + return; + } + var inv_d12 = 1 / (d12_1 + d12_2); + this.m_v1.a = d12_1 * inv_d12; + this.m_v2.a = d12_2 * inv_d12; + this.m_count = 2; + }; + Simplex2.prototype.solve3 = function() { + var w1 = this.m_v1.w; + var w2 = this.m_v2.w; + var w3 = this.m_v3.w; + subVec2(e12, w2, w1); + var w1e12 = dotVec2(w1, e12); + var w2e12 = dotVec2(w2, e12); + var d12_1 = w2e12; + var d12_2 = -w1e12; + subVec2(e13, w3, w1); + var w1e13 = dotVec2(w1, e13); + var w3e13 = dotVec2(w3, e13); + var d13_1 = w3e13; + var d13_2 = -w1e13; + subVec2(e23, w3, w2); + var w2e23 = dotVec2(w2, e23); + var w3e23 = dotVec2(w3, e23); + var d23_1 = w3e23; + var d23_2 = -w2e23; + var n123 = crossVec2Vec2(e12, e13); + var d123_1 = n123 * crossVec2Vec2(w2, w3); + var d123_2 = n123 * crossVec2Vec2(w3, w1); + var d123_3 = n123 * crossVec2Vec2(w1, w2); + if (d12_2 <= 0 && d13_2 <= 0) { + this.m_v1.a = 1; + this.m_count = 1; + return; + } + if (d12_1 > 0 && d12_2 > 0 && d123_3 <= 0) { + var inv_d12 = 1 / (d12_1 + d12_2); + this.m_v1.a = d12_1 * inv_d12; + this.m_v2.a = d12_2 * inv_d12; + this.m_count = 2; + return; + } + if (d13_1 > 0 && d13_2 > 0 && d123_2 <= 0) { + var inv_d13 = 1 / (d13_1 + d13_2); + this.m_v1.a = d13_1 * inv_d13; + this.m_v3.a = d13_2 * inv_d13; + this.m_count = 2; + this.m_v2.set(this.m_v3); + return; + } + if (d12_1 <= 0 && d23_2 <= 0) { + this.m_v2.a = 1; + this.m_count = 1; + this.m_v1.set(this.m_v2); + return; + } + if (d13_1 <= 0 && d23_1 <= 0) { + this.m_v3.a = 1; + this.m_count = 1; + this.m_v1.set(this.m_v3); + return; + } + if (d23_1 > 0 && d23_2 > 0 && d123_1 <= 0) { + var inv_d23 = 1 / (d23_1 + d23_2); + this.m_v2.a = d23_1 * inv_d23; + this.m_v3.a = d23_2 * inv_d23; + this.m_count = 2; + this.m_v1.set(this.m_v3); + return; + } + var inv_d123 = 1 / (d123_1 + d123_2 + d123_3); + this.m_v1.a = d123_1 * inv_d123; + this.m_v2.a = d123_2 * inv_d123; + this.m_v3.a = d123_3 * inv_d123; + this.m_count = 3; + }; + return Simplex2; + }() + ); + var simplex = new Simplex(); + var input$1 = new DistanceInput(); + var cache$1 = new SimplexCache(); + var output$1 = new DistanceOutput(); + var testOverlap = function(shapeA, indexA, shapeB, indexB, xfA2, xfB2) { + input$1.recycle(); + input$1.proxyA.set(shapeA, indexA); + input$1.proxyB.set(shapeB, indexB); + copyTransform(input$1.transformA, xfA2); + copyTransform(input$1.transformB, xfB2); + input$1.useRadii = true; + output$1.recycle(); + cache$1.recycle(); + Distance(output$1, cache$1, input$1); + return output$1.distance < 10 * EPSILON; + }; + Distance.testOverlap = testOverlap; + Distance.Input = DistanceInput; + Distance.Output = DistanceOutput; + Distance.Proxy = DistanceProxy; + Distance.Cache = SimplexCache; + var ShapeCastInput = ( + /** @class */ + function() { + function ShapeCastInput2() { + this.proxyA = new DistanceProxy(); + this.proxyB = new DistanceProxy(); + this.transformA = Transform.identity(); + this.transformB = Transform.identity(); + this.translationB = Vec2.zero(); + } + ShapeCastInput2.prototype.recycle = function() { + this.proxyA.recycle(); + this.proxyB.recycle(); + this.transformA.setIdentity(); + this.transformB.setIdentity(); + zeroVec2(this.translationB); + }; + return ShapeCastInput2; + }() + ); + var ShapeCastOutput = ( + /** @class */ + /* @__PURE__ */ function() { + function ShapeCastOutput2() { + this.point = Vec2.zero(); + this.normal = Vec2.zero(); + this.lambda = 1; + this.iterations = 0; + } + return ShapeCastOutput2; + }() + ); + var ShapeCast = function(output2, input2) { + output2.iterations = 0; + output2.lambda = 1; + output2.normal.setZero(); + output2.point.setZero(); + var proxyA = input2.proxyA; + var proxyB = input2.proxyB; + var radiusA = math_max$4(proxyA.m_radius, SettingsInternal.polygonRadius); + var radiusB = math_max$4(proxyB.m_radius, SettingsInternal.polygonRadius); + var radius = radiusA + radiusB; + var xfA2 = input2.transformA; + var xfB2 = input2.transformB; + var r = input2.translationB; + var n2 = Vec2.zero(); + var lambda = 0; + var simplex2 = new Simplex(); + simplex2.m_count = 0; + var vertices = simplex2.m_v; + var indexA = proxyA.getSupport(Rot.mulTVec2(xfA2.q, Vec2.neg(r))); + var wA = Transform.mulVec2(xfA2, proxyA.getVertex(indexA)); + var indexB = proxyB.getSupport(Rot.mulTVec2(xfB2.q, r)); + var wB = Transform.mulVec2(xfB2, proxyB.getVertex(indexB)); + var v3 = Vec2.sub(wA, wB); + var sigma = math_max$4(SettingsInternal.polygonRadius, radius - SettingsInternal.polygonRadius); + var tolerance = 0.5 * SettingsInternal.linearSlop; + var k_maxIters = 20; + var iter = 0; + while (iter < k_maxIters && v3.length() - sigma > tolerance) { + output2.iterations += 1; + indexA = proxyA.getSupport(Rot.mulTVec2(xfA2.q, Vec2.neg(v3))); + wA = Transform.mulVec2(xfA2, proxyA.getVertex(indexA)); + indexB = proxyB.getSupport(Rot.mulTVec2(xfB2.q, v3)); + wB = Transform.mulVec2(xfB2, proxyB.getVertex(indexB)); + var p = Vec2.sub(wA, wB); + v3.normalize(); + var vp = Vec2.dot(v3, p); + var vr = Vec2.dot(v3, r); + if (vp - sigma > lambda * vr) { + if (vr <= 0) { + return false; + } + lambda = (vp - sigma) / vr; + if (lambda > 1) { + return false; + } + n2.setMul(-1, v3); + simplex2.m_count = 0; + } + var vertex = vertices[simplex2.m_count]; + vertex.indexA = indexB; + vertex.wA = Vec2.combine(1, wB, lambda, r); + vertex.indexB = indexA; + vertex.wB = wA; + vertex.w = Vec2.sub(vertex.wB, vertex.wA); + vertex.a = 1; + simplex2.m_count += 1; + switch (simplex2.m_count) { + case 1: + break; + case 2: + simplex2.solve2(); + break; + case 3: + simplex2.solve3(); + break; + } + if (simplex2.m_count == 3) { + return false; + } + v3.setVec2(simplex2.getClosestPoint()); + ++iter; + } + if (iter == 0) { + return false; + } + var pointA2 = Vec2.zero(); + var pointB2 = Vec2.zero(); + simplex2.getWitnessPoints(pointB2, pointA2); + if (v3.lengthSquared() > 0) { + n2.setMul(-1, v3); + n2.normalize(); + } + output2.point = Vec2.combine(1, pointA2, radiusA, n2); + output2.normal = n2; + output2.lambda = lambda; + output2.iterations = iter; + return true; + }; + var math_abs$7 = Math.abs; + var math_max$3 = Math.max; + var TOIInput = ( + /** @class */ + function() { + function TOIInput2() { + this.proxyA = new DistanceProxy(); + this.proxyB = new DistanceProxy(); + this.sweepA = new Sweep(); + this.sweepB = new Sweep(); + } + TOIInput2.prototype.recycle = function() { + this.proxyA.recycle(); + this.proxyB.recycle(); + this.sweepA.recycle(); + this.sweepB.recycle(); + this.tMax = -1; + }; + return TOIInput2; + }() + ); + exports2.TOIOutputState = void 0; + (function(TOIOutputState2) { + TOIOutputState2[TOIOutputState2["e_unset"] = -1] = "e_unset"; + TOIOutputState2[TOIOutputState2["e_unknown"] = 0] = "e_unknown"; + TOIOutputState2[TOIOutputState2["e_failed"] = 1] = "e_failed"; + TOIOutputState2[TOIOutputState2["e_overlapped"] = 2] = "e_overlapped"; + TOIOutputState2[TOIOutputState2["e_touching"] = 3] = "e_touching"; + TOIOutputState2[TOIOutputState2["e_separated"] = 4] = "e_separated"; + })(exports2.TOIOutputState || (exports2.TOIOutputState = {})); + var TOIOutput = ( + /** @class */ + function() { + function TOIOutput2() { + this.state = exports2.TOIOutputState.e_unset; + this.t = -1; + } + TOIOutput2.prototype.recycle = function() { + this.state = exports2.TOIOutputState.e_unset; + this.t = -1; + }; + return TOIOutput2; + }() + ); + stats.toiTime = 0; + stats.toiMaxTime = 0; + stats.toiCalls = 0; + stats.toiIters = 0; + stats.toiMaxIters = 0; + stats.toiRootIters = 0; + stats.toiMaxRootIters = 0; + var distanceInput = new DistanceInput(); + var distanceOutput = new DistanceOutput(); + var cache = new SimplexCache(); + var xfA$1 = transform(0, 0, 0); + var xfB$1 = transform(0, 0, 0); + var temp$4 = vec2(0, 0); + var pointA$2 = vec2(0, 0); + var pointB$2 = vec2(0, 0); + var normal$3 = vec2(0, 0); + var axisA = vec2(0, 0); + var axisB = vec2(0, 0); + var localPointA = vec2(0, 0); + var localPointB = vec2(0, 0); + var TimeOfImpact = function(output2, input2) { + var timer = Timer.now(); + ++stats.toiCalls; + output2.state = exports2.TOIOutputState.e_unknown; + output2.t = input2.tMax; + var proxyA = input2.proxyA; + var proxyB = input2.proxyB; + var sweepA = input2.sweepA; + var sweepB = input2.sweepB; + sweepA.normalize(); + sweepB.normalize(); + var tMax = input2.tMax; + var totalRadius = proxyA.m_radius + proxyB.m_radius; + var target = math_max$3(SettingsInternal.linearSlop, totalRadius - 3 * SettingsInternal.linearSlop); + var tolerance = 0.25 * SettingsInternal.linearSlop; + var t1 = 0; + var k_maxIterations = SettingsInternal.maxTOIIterations; + var iter = 0; + cache.recycle(); + distanceInput.proxyA.setVertices(proxyA.m_vertices, proxyA.m_count, proxyA.m_radius); + distanceInput.proxyB.setVertices(proxyB.m_vertices, proxyB.m_count, proxyB.m_radius); + distanceInput.useRadii = false; + while (true) { + sweepA.getTransform(xfA$1, t1); + sweepB.getTransform(xfB$1, t1); + copyTransform(distanceInput.transformA, xfA$1); + copyTransform(distanceInput.transformB, xfB$1); + Distance(distanceOutput, cache, distanceInput); + if (distanceOutput.distance <= 0) { + output2.state = exports2.TOIOutputState.e_overlapped; + output2.t = 0; + break; + } + if (distanceOutput.distance < target + tolerance) { + output2.state = exports2.TOIOutputState.e_touching; + output2.t = t1; + break; + } + separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1); + var done = false; + var t2 = tMax; + var pushBackIter = 0; + while (true) { + var s2 = separationFunction.findMinSeparation(t2); + if (s2 > target + tolerance) { + output2.state = exports2.TOIOutputState.e_separated; + output2.t = tMax; + done = true; + break; + } + if (s2 > target - tolerance) { + t1 = t2; + break; + } + var s1 = separationFunction.evaluate(t1); + if (s1 < target - tolerance) { + output2.state = exports2.TOIOutputState.e_failed; + output2.t = t1; + done = true; + break; + } + if (s1 <= target + tolerance) { + output2.state = exports2.TOIOutputState.e_touching; + output2.t = t1; + done = true; + break; + } + var rootIterCount = 0; + var a1 = t1; + var a2 = t2; + while (true) { + var t = void 0; + if (rootIterCount & 1) { + t = a1 + (target - s1) * (a2 - a1) / (s2 - s1); + } else { + t = 0.5 * (a1 + a2); + } + ++rootIterCount; + ++stats.toiRootIters; + var s3 = separationFunction.evaluate(t); + if (math_abs$7(s3 - target) < tolerance) { + t2 = t; + break; + } + if (s3 > target) { + a1 = t; + s1 = s3; + } else { + a2 = t; + s2 = s3; + } + if (rootIterCount === 50) { + break; + } + } + stats.toiMaxRootIters = math_max$3(stats.toiMaxRootIters, rootIterCount); + ++pushBackIter; + if (pushBackIter === SettingsInternal.maxPolygonVertices) { + break; + } + } + ++iter; + ++stats.toiIters; + if (done) { + break; + } + if (iter === k_maxIterations) { + output2.state = exports2.TOIOutputState.e_failed; + output2.t = t1; + break; + } + } + stats.toiMaxIters = math_max$3(stats.toiMaxIters, iter); + var time = Timer.diff(timer); + stats.toiMaxTime = math_max$3(stats.toiMaxTime, time); + stats.toiTime += time; + separationFunction.recycle(); + }; + var SeparationFunctionType; + (function(SeparationFunctionType2) { + SeparationFunctionType2[SeparationFunctionType2["e_unset"] = -1] = "e_unset"; + SeparationFunctionType2[SeparationFunctionType2["e_points"] = 1] = "e_points"; + SeparationFunctionType2[SeparationFunctionType2["e_faceA"] = 2] = "e_faceA"; + SeparationFunctionType2[SeparationFunctionType2["e_faceB"] = 3] = "e_faceB"; + })(SeparationFunctionType || (SeparationFunctionType = {})); + var SeparationFunction = ( + /** @class */ + function() { + function SeparationFunction2() { + this.m_proxyA = null; + this.m_proxyB = null; + this.m_sweepA = null; + this.m_sweepB = null; + this.m_type = SeparationFunctionType.e_unset; + this.m_localPoint = vec2(0, 0); + this.m_axis = vec2(0, 0); + this.indexA = -1; + this.indexB = -1; + } + SeparationFunction2.prototype.recycle = function() { + this.m_proxyA = null; + this.m_proxyB = null; + this.m_sweepA = null; + this.m_sweepB = null; + this.m_type = SeparationFunctionType.e_unset; + zeroVec2(this.m_localPoint); + zeroVec2(this.m_axis); + this.indexA = -1; + this.indexB = -1; + }; + SeparationFunction2.prototype.initialize = function(cache2, proxyA, sweepA, proxyB, sweepB, t1) { + var count = cache2.count; + this.m_proxyA = proxyA; + this.m_proxyB = proxyB; + this.m_sweepA = sweepA; + this.m_sweepB = sweepB; + this.m_sweepA.getTransform(xfA$1, t1); + this.m_sweepB.getTransform(xfB$1, t1); + if (count === 1) { + this.m_type = SeparationFunctionType.e_points; + var localPointA_1 = this.m_proxyA.getVertex(cache2.indexA[0]); + var localPointB_1 = this.m_proxyB.getVertex(cache2.indexB[0]); + transformVec2(pointA$2, xfA$1, localPointA_1); + transformVec2(pointB$2, xfB$1, localPointB_1); + subVec2(this.m_axis, pointB$2, pointA$2); + var s2 = normalizeVec2Length(this.m_axis); + return s2; + } else if (cache2.indexA[0] === cache2.indexA[1]) { + this.m_type = SeparationFunctionType.e_faceB; + var localPointB1 = proxyB.getVertex(cache2.indexB[0]); + var localPointB2 = proxyB.getVertex(cache2.indexB[1]); + crossVec2Num(this.m_axis, subVec2(temp$4, localPointB2, localPointB1), 1); + normalizeVec2(this.m_axis); + rotVec2(normal$3, xfB$1.q, this.m_axis); + combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2); + transformVec2(pointB$2, xfB$1, this.m_localPoint); + var localPointA_2 = proxyA.getVertex(cache2.indexA[0]); + var pointA_1 = Transform.mulVec2(xfA$1, localPointA_2); + var s2 = dotVec2(pointA_1, normal$3) - dotVec2(pointB$2, normal$3); + if (s2 < 0) { + negVec2(this.m_axis); + s2 = -s2; + } + return s2; + } else { + this.m_type = SeparationFunctionType.e_faceA; + var localPointA1 = this.m_proxyA.getVertex(cache2.indexA[0]); + var localPointA2 = this.m_proxyA.getVertex(cache2.indexA[1]); + crossVec2Num(this.m_axis, subVec2(temp$4, localPointA2, localPointA1), 1); + normalizeVec2(this.m_axis); + rotVec2(normal$3, xfA$1.q, this.m_axis); + combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2); + transformVec2(pointA$2, xfA$1, this.m_localPoint); + var localPointB_2 = this.m_proxyB.getVertex(cache2.indexB[0]); + transformVec2(pointB$2, xfB$1, localPointB_2); + var s2 = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); + if (s2 < 0) { + negVec2(this.m_axis); + s2 = -s2; + } + return s2; + } + }; + SeparationFunction2.prototype.compute = function(find, t) { + this.m_sweepA.getTransform(xfA$1, t); + this.m_sweepB.getTransform(xfB$1, t); + switch (this.m_type) { + case SeparationFunctionType.e_points: { + if (find) { + derotVec2(axisA, xfA$1.q, this.m_axis); + derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, this.m_axis)); + this.indexA = this.m_proxyA.getSupport(axisA); + this.indexB = this.m_proxyB.getSupport(axisB); + } + copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); + copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); + transformVec2(pointA$2, xfA$1, localPointA); + transformVec2(pointB$2, xfB$1, localPointB); + var sep = dotVec2(pointB$2, this.m_axis) - dotVec2(pointA$2, this.m_axis); + return sep; + } + case SeparationFunctionType.e_faceA: { + rotVec2(normal$3, xfA$1.q, this.m_axis); + transformVec2(pointA$2, xfA$1, this.m_localPoint); + if (find) { + derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, normal$3)); + this.indexA = -1; + this.indexB = this.m_proxyB.getSupport(axisB); + } + copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); + transformVec2(pointB$2, xfB$1, localPointB); + var sep = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); + return sep; + } + case SeparationFunctionType.e_faceB: { + rotVec2(normal$3, xfB$1.q, this.m_axis); + transformVec2(pointB$2, xfB$1, this.m_localPoint); + if (find) { + derotVec2(axisA, xfA$1.q, scaleVec2(temp$4, -1, normal$3)); + this.indexB = -1; + this.indexA = this.m_proxyA.getSupport(axisA); + } + copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); + transformVec2(pointA$2, xfA$1, localPointA); + var sep = dotVec2(pointA$2, normal$3) - dotVec2(pointB$2, normal$3); + return sep; + } + default: + if (find) { + this.indexA = -1; + this.indexB = -1; + } + return 0; + } + }; + SeparationFunction2.prototype.findMinSeparation = function(t) { + return this.compute(true, t); + }; + SeparationFunction2.prototype.evaluate = function(t) { + return this.compute(false, t); + }; + return SeparationFunction2; + }() + ); + var separationFunction = new SeparationFunction(); + TimeOfImpact.Input = TOIInput; + TimeOfImpact.Output = TOIOutput; + var math_abs$6 = Math.abs; + var math_sqrt$3 = Math.sqrt; + var math_min$5 = Math.min; + var TimeStep = ( + /** @class */ + function() { + function TimeStep2() { + this.dt = 0; + this.inv_dt = 0; + this.velocityIterations = 0; + this.positionIterations = 0; + this.warmStarting = false; + this.blockSolve = true; + this.inv_dt0 = 0; + this.dtRatio = 1; + } + TimeStep2.prototype.reset = function(dt) { + if (this.dt > 0) { + this.inv_dt0 = this.inv_dt; + } + this.dt = dt; + this.inv_dt = dt == 0 ? 0 : 1 / dt; + this.dtRatio = dt * this.inv_dt0; + }; + return TimeStep2; + }() + ); + var s_subStep = new TimeStep(); + var c = vec2(0, 0); + var v = vec2(0, 0); + var translation = vec2(0, 0); + var input = new TOIInput(); + var output = new TOIOutput(); + var backup = new Sweep(); + var backup1 = new Sweep(); + var backup2 = new Sweep(); + var ContactImpulse = ( + /** @class */ + function() { + function ContactImpulse2(contact) { + this.contact = contact; + this.normals = []; + this.tangents = []; + } + ContactImpulse2.prototype.recycle = function() { + this.normals.length = 0; + this.tangents.length = 0; + }; + Object.defineProperty(ContactImpulse2.prototype, "normalImpulses", { + get: function() { + var contact = this.contact; + var normals = this.normals; + normals.length = 0; + for (var p = 0; p < contact.v_points.length; ++p) { + normals.push(contact.v_points[p].normalImpulse); + } + return normals; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ContactImpulse2.prototype, "tangentImpulses", { + get: function() { + var contact = this.contact; + var tangents = this.tangents; + tangents.length = 0; + for (var p = 0; p < contact.v_points.length; ++p) { + tangents.push(contact.v_points[p].tangentImpulse); + } + return tangents; + }, + enumerable: false, + configurable: true + }); + return ContactImpulse2; + }() + ); + var Solver = ( + /** @class */ + function() { + function Solver2(world) { + this.m_world = world; + this.m_stack = []; + this.m_bodies = []; + this.m_contacts = []; + this.m_joints = []; + } + Solver2.prototype.clear = function() { + this.m_stack.length = 0; + this.m_bodies.length = 0; + this.m_contacts.length = 0; + this.m_joints.length = 0; + }; + Solver2.prototype.addBody = function(body) { + this.m_bodies.push(body); + }; + Solver2.prototype.addContact = function(contact) { + this.m_contacts.push(contact); + }; + Solver2.prototype.addJoint = function(joint) { + this.m_joints.push(joint); + }; + Solver2.prototype.solveWorld = function(step) { + var world = this.m_world; + for (var b2 = world.m_bodyList; b2; b2 = b2.m_next) { + b2.m_islandFlag = false; + } + for (var c_1 = world.m_contactList; c_1; c_1 = c_1.m_next) { + c_1.m_islandFlag = false; + } + for (var j = world.m_jointList; j; j = j.m_next) { + j.m_islandFlag = false; + } + var stack = this.m_stack; + for (var seed = world.m_bodyList; seed; seed = seed.m_next) { + if (seed.m_islandFlag) { + continue; + } + if (seed.isAwake() == false || seed.isActive() == false) { + continue; + } + if (seed.isStatic()) { + continue; + } + this.clear(); + stack.push(seed); + seed.m_islandFlag = true; + while (stack.length > 0) { + var b2 = stack.pop(); + this.addBody(b2); + b2.m_awakeFlag = true; + if (b2.isStatic()) { + continue; + } + for (var ce = b2.m_contactList; ce; ce = ce.next) { + var contact = ce.contact; + if (contact.m_islandFlag) { + continue; + } + if (contact.isEnabled() == false || contact.isTouching() == false) { + continue; + } + var sensorA = contact.m_fixtureA.m_isSensor; + var sensorB = contact.m_fixtureB.m_isSensor; + if (sensorA || sensorB) { + continue; + } + this.addContact(contact); + contact.m_islandFlag = true; + var other = ce.other; + if (other.m_islandFlag) { + continue; + } + stack.push(other); + other.m_islandFlag = true; + } + for (var je = b2.m_jointList; je; je = je.next) { + if (je.joint.m_islandFlag == true) { + continue; + } + var other = je.other; + if (other.isActive() == false) { + continue; + } + this.addJoint(je.joint); + je.joint.m_islandFlag = true; + if (other.m_islandFlag) { + continue; + } + stack.push(other); + other.m_islandFlag = true; + } + } + this.solveIsland(step); + for (var i = 0; i < this.m_bodies.length; ++i) { + var b2 = this.m_bodies[i]; + if (b2.isStatic()) { + b2.m_islandFlag = false; + } + } + } + }; + Solver2.prototype.solveIsland = function(step) { + var world = this.m_world; + var gravity = world.m_gravity; + var allowSleep = world.m_allowSleep; + var h = step.dt; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(c, body.m_sweep.c); + var a2 = body.m_sweep.a; + copyVec2(v, body.m_linearVelocity); + var w = body.m_angularVelocity; + copyVec2(body.m_sweep.c0, body.m_sweep.c); + body.m_sweep.a0 = body.m_sweep.a; + if (body.isDynamic()) { + plusScaleVec2(v, h * body.m_gravityScale, gravity); + plusScaleVec2(v, h * body.m_invMass, body.m_force); + w += h * body.m_invI * body.m_torque; + scaleVec2(v, 1 / (1 + h * body.m_linearDamping), v); + w *= 1 / (1 + h * body.m_angularDamping); + } + copyVec2(body.c_position.c, c); + body.c_position.a = a2; + copyVec2(body.c_velocity.v, v); + body.c_velocity.w = w; + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initConstraint(step); + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initVelocityConstraint(step); + } + if (step.warmStarting) { + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.warmStartConstraint(step); + } + } + for (var i = 0; i < this.m_joints.length; ++i) { + var joint = this.m_joints[i]; + joint.initVelocityConstraints(step); + } + for (var i = 0; i < step.velocityIterations; ++i) { + for (var j = 0; j < this.m_joints.length; ++j) { + var joint = this.m_joints[j]; + joint.solveVelocityConstraints(step); + } + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + contact.solveVelocityConstraint(step); + } + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.storeConstraintImpulses(step); + } + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(c, body.c_position.c); + var a2 = body.c_position.a; + copyVec2(v, body.c_velocity.v); + var w = body.c_velocity.w; + scaleVec2(translation, h, v); + var translationLengthSqr = lengthSqrVec2(translation); + if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { + var ratio = SettingsInternal.maxTranslation / math_sqrt$3(translationLengthSqr); + mulVec2(v, ratio); + } + var rotation2 = h * w; + if (rotation2 * rotation2 > SettingsInternal.maxRotationSquared) { + var ratio = SettingsInternal.maxRotation / math_abs$6(rotation2); + w *= ratio; + } + plusScaleVec2(c, h, v); + a2 += h * w; + copyVec2(body.c_position.c, c); + body.c_position.a = a2; + copyVec2(body.c_velocity.v, v); + body.c_velocity.w = w; + } + var positionSolved = false; + for (var i = 0; i < step.positionIterations; ++i) { + var minSeparation = 0; + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + var separation = contact.solvePositionConstraint(step); + minSeparation = math_min$5(minSeparation, separation); + } + var contactsOkay = minSeparation >= -3 * SettingsInternal.linearSlop; + var jointsOkay = true; + for (var j = 0; j < this.m_joints.length; ++j) { + var joint = this.m_joints[j]; + var jointOkay = joint.solvePositionConstraints(step); + jointsOkay = jointsOkay && jointOkay; + } + if (contactsOkay && jointsOkay) { + positionSolved = true; + break; + } + } + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(body.m_sweep.c, body.c_position.c); + body.m_sweep.a = body.c_position.a; + copyVec2(body.m_linearVelocity, body.c_velocity.v); + body.m_angularVelocity = body.c_velocity.w; + body.synchronizeTransform(); + } + this.postSolveIsland(); + if (allowSleep) { + var minSleepTime = Infinity; + var linTolSqr = SettingsInternal.linearSleepToleranceSqr; + var angTolSqr = SettingsInternal.angularSleepToleranceSqr; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + if (body.isStatic()) { + continue; + } + if (body.m_autoSleepFlag == false || body.m_angularVelocity * body.m_angularVelocity > angTolSqr || lengthSqrVec2(body.m_linearVelocity) > linTolSqr) { + body.m_sleepTime = 0; + minSleepTime = 0; + } else { + body.m_sleepTime += h; + minSleepTime = math_min$5(minSleepTime, body.m_sleepTime); + } + } + if (minSleepTime >= SettingsInternal.timeToSleep && positionSolved) { + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + body.setAwake(false); + } + } + } + }; + Solver2.prototype.solveWorldTOI = function(step) { + var world = this.m_world; + if (world.m_stepComplete) { + for (var b2 = world.m_bodyList; b2; b2 = b2.m_next) { + b2.m_islandFlag = false; + b2.m_sweep.alpha0 = 0; + } + for (var c_2 = world.m_contactList; c_2; c_2 = c_2.m_next) { + c_2.m_toiFlag = false; + c_2.m_islandFlag = false; + c_2.m_toiCount = 0; + c_2.m_toi = 1; + } } - // Get polygonB in frameA - polygonBA.count = polygonB.m_count; - for (var i = 0; i < polygonB.m_count; ++i) { - transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]); - rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]); - } - var radius = polygonB.m_radius + edgeA.m_radius; - manifold.pointCount = 0; - { // ComputeEdgeSeparation - edgeAxis.type = EPAxisType.e_edgeA; - edgeAxis.index = front ? 0 : 1; - edgeAxis.separation = Infinity; - for (var i = 0; i < polygonBA.count; ++i) { - var v = polygonBA.vertices[i]; - var s = dotVec2(normal, v) - dotVec2(normal, v1); - if (s < edgeAxis.separation) { - edgeAxis.separation = s; - } + while (true) { + var minContact = null; + var minAlpha = 1; + for (var c_3 = world.m_contactList; c_3; c_3 = c_3.m_next) { + if (c_3.isEnabled() == false) { + continue; + } + if (c_3.m_toiCount > SettingsInternal.maxSubSteps) { + continue; + } + var alpha = 1; + if (c_3.m_toiFlag) { + alpha = c_3.m_toi; + } else { + var fA_1 = c_3.getFixtureA(); + var fB_1 = c_3.getFixtureB(); + if (fA_1.isSensor() || fB_1.isSensor()) { + continue; + } + var bA_1 = fA_1.getBody(); + var bB_1 = fB_1.getBody(); + var activeA = bA_1.isAwake() && !bA_1.isStatic(); + var activeB = bB_1.isAwake() && !bB_1.isStatic(); + if (activeA == false && activeB == false) { + continue; + } + var collideA = bA_1.isBullet() || !bA_1.isDynamic(); + var collideB = bB_1.isBullet() || !bB_1.isDynamic(); + if (collideA == false && collideB == false) { + continue; + } + var alpha0 = bA_1.m_sweep.alpha0; + if (bA_1.m_sweep.alpha0 < bB_1.m_sweep.alpha0) { + alpha0 = bB_1.m_sweep.alpha0; + bA_1.m_sweep.advance(alpha0); + } else if (bB_1.m_sweep.alpha0 < bA_1.m_sweep.alpha0) { + alpha0 = bA_1.m_sweep.alpha0; + bB_1.m_sweep.advance(alpha0); + } + var indexA = c_3.getChildIndexA(); + var indexB = c_3.getChildIndexB(); + bA_1.m_sweep; + bB_1.m_sweep; + input.proxyA.set(fA_1.getShape(), indexA); + input.proxyB.set(fB_1.getShape(), indexB); + input.sweepA.set(bA_1.m_sweep); + input.sweepB.set(bB_1.m_sweep); + input.tMax = 1; + TimeOfImpact(output, input); + var beta = output.t; + if (output.state == exports2.TOIOutputState.e_touching) { + alpha = math_min$5(alpha0 + (1 - alpha0) * beta, 1); + } else { + alpha = 1; + } + c_3.m_toi = alpha; + c_3.m_toiFlag = true; + } + if (alpha < minAlpha) { + minContact = c_3; + minAlpha = alpha; + } + } + if (minContact == null || 1 - 10 * EPSILON < minAlpha) { + world.m_stepComplete = true; + break; + } + var fA = minContact.getFixtureA(); + var fB = minContact.getFixtureB(); + var bA = fA.getBody(); + var bB = fB.getBody(); + backup1.set(bA.m_sweep); + backup2.set(bB.m_sweep); + bA.advance(minAlpha); + bB.advance(minAlpha); + minContact.update(world); + minContact.m_toiFlag = false; + ++minContact.m_toiCount; + if (minContact.isEnabled() == false || minContact.isTouching() == false) { + minContact.setEnabled(false); + bA.m_sweep.set(backup1); + bB.m_sweep.set(backup2); + bA.synchronizeTransform(); + bB.synchronizeTransform(); + continue; + } + bA.setAwake(true); + bB.setAwake(true); + this.clear(); + this.addBody(bA); + this.addBody(bB); + this.addContact(minContact); + bA.m_islandFlag = true; + bB.m_islandFlag = true; + minContact.m_islandFlag = true; + var bodies = [bA, bB]; + for (var i = 0; i < bodies.length; ++i) { + var body = bodies[i]; + if (body.isDynamic()) { + for (var ce = body.m_contactList; ce; ce = ce.next) { + var contact = ce.contact; + if (contact.m_islandFlag) { + continue; + } + var other = ce.other; + if (other.isDynamic() && !body.isBullet() && !other.isBullet()) { + continue; + } + var sensorA = contact.m_fixtureA.m_isSensor; + var sensorB = contact.m_fixtureB.m_isSensor; + if (sensorA || sensorB) { + continue; + } + backup.set(other.m_sweep); + if (other.m_islandFlag == false) { + other.advance(minAlpha); + } + contact.update(world); + if (contact.isEnabled() == false || contact.isTouching() == false) { + other.m_sweep.set(backup); + other.synchronizeTransform(); + continue; + } + contact.m_islandFlag = true; + this.addContact(contact); + if (other.m_islandFlag) { + continue; + } + other.m_islandFlag = true; + if (!other.isStatic()) { + other.setAwake(true); + } + this.addBody(other); + } + } + } + s_subStep.reset((1 - minAlpha) * step.dt); + s_subStep.dtRatio = 1; + s_subStep.positionIterations = 20; + s_subStep.velocityIterations = step.velocityIterations; + s_subStep.warmStarting = false; + this.solveIslandTOI(s_subStep, bA, bB); + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + body.m_islandFlag = false; + if (!body.isDynamic()) { + continue; + } + body.synchronizeFixtures(); + for (var ce = body.m_contactList; ce; ce = ce.next) { + ce.contact.m_toiFlag = false; + ce.contact.m_islandFlag = false; + } + } + world.findNewContacts(); + if (world.m_subStepping) { + world.m_stepComplete = false; + break; + } + } + }; + Solver2.prototype.solveIslandTOI = function(subStep, toiA, toiB) { + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(body.c_position.c, body.m_sweep.c); + body.c_position.a = body.m_sweep.a; + copyVec2(body.c_velocity.v, body.m_linearVelocity); + body.c_velocity.w = body.m_angularVelocity; + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initConstraint(subStep); + } + for (var i = 0; i < subStep.positionIterations; ++i) { + var minSeparation = 0; + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + var separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB); + minSeparation = math_min$5(minSeparation, separation); + } + var contactsOkay = minSeparation >= -1.5 * SettingsInternal.linearSlop; + if (contactsOkay) { + break; + } + } + var i; + copyVec2(toiA.m_sweep.c0, toiA.c_position.c); + toiA.m_sweep.a0 = toiA.c_position.a; + copyVec2(toiB.m_sweep.c0, toiB.c_position.c); + toiB.m_sweep.a0 = toiB.c_position.a; + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initVelocityConstraint(subStep); + } + for (var i = 0; i < subStep.velocityIterations; ++i) { + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + contact.solveVelocityConstraint(subStep); + } + } + var h = subStep.dt; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(c, body.c_position.c); + var a2 = body.c_position.a; + copyVec2(v, body.c_velocity.v); + var w = body.c_velocity.w; + scaleVec2(translation, h, v); + var translationLengthSqr = lengthSqrVec2(translation); + if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { + var ratio = SettingsInternal.maxTranslation / math_sqrt$3(translationLengthSqr); + mulVec2(v, ratio); + } + var rotation2 = h * w; + if (rotation2 * rotation2 > SettingsInternal.maxRotationSquared) { + var ratio = SettingsInternal.maxRotation / math_abs$6(rotation2); + w *= ratio; + } + plusScaleVec2(c, h, v); + a2 += h * w; + copyVec2(body.c_position.c, c); + body.c_position.a = a2; + copyVec2(body.c_velocity.v, v); + body.c_velocity.w = w; + copyVec2(body.m_sweep.c, c); + body.m_sweep.a = a2; + copyVec2(body.m_linearVelocity, v); + body.m_angularVelocity = w; + body.synchronizeTransform(); + } + this.postSolveIsland(); + }; + Solver2.prototype.postSolveIsland = function() { + for (var c_5 = 0; c_5 < this.m_contacts.length; ++c_5) { + var contact = this.m_contacts[c_5]; + this.m_world.postSolve(contact, contact.m_impulse); + } + }; + return Solver2; + }() + ); + Solver.TimeStep = TimeStep; + var Mat22 = ( + /** @class */ + function() { + function Mat222(a2, b2, c2, d2) { + if (typeof a2 === "object" && a2 !== null) { + this.ex = Vec2.clone(a2); + this.ey = Vec2.clone(b2); + } else if (typeof a2 === "number") { + this.ex = Vec2.neo(a2, c2); + this.ey = Vec2.neo(b2, d2); + } else { + this.ex = Vec2.zero(); + this.ey = Vec2.zero(); + } + } + Mat222.prototype.toString = function() { + return JSON.stringify(this); + }; + Mat222.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey); + }; + Mat222.assert = function(o) { + }; + Mat222.prototype.set = function(a2, b2, c2, d2) { + if (typeof a2 === "number" && typeof b2 === "number" && typeof c2 === "number" && typeof d2 === "number") { + this.ex.setNum(a2, c2); + this.ey.setNum(b2, d2); + } else if (typeof a2 === "object" && typeof b2 === "object") { + this.ex.setVec2(a2); + this.ey.setVec2(b2); + } else if (typeof a2 === "object") { + this.ex.setVec2(a2.ex); + this.ey.setVec2(a2.ey); + } else ; + }; + Mat222.prototype.setIdentity = function() { + this.ex.x = 1; + this.ey.x = 0; + this.ex.y = 0; + this.ey.y = 1; + }; + Mat222.prototype.setZero = function() { + this.ex.x = 0; + this.ey.x = 0; + this.ex.y = 0; + this.ey.y = 0; + }; + Mat222.prototype.getInverse = function() { + var a2 = this.ex.x; + var b2 = this.ey.x; + var c2 = this.ex.y; + var d2 = this.ey.y; + var det = a2 * d2 - b2 * c2; + if (det !== 0) { + det = 1 / det; + } + var imx = new Mat222(); + imx.ex.x = det * d2; + imx.ey.x = -det * b2; + imx.ex.y = -det * c2; + imx.ey.y = det * a2; + return imx; + }; + Mat222.prototype.solve = function(v3) { + var a2 = this.ex.x; + var b2 = this.ey.x; + var c2 = this.ex.y; + var d2 = this.ey.y; + var det = a2 * d2 - b2 * c2; + if (det !== 0) { + det = 1 / det; + } + var w = Vec2.zero(); + w.x = det * (d2 * v3.x - b2 * v3.y); + w.y = det * (a2 * v3.y - c2 * v3.x); + return w; + }; + Mat222.mul = function(mx, v3) { + if (v3 && "x" in v3 && "y" in v3) { + var x2 = mx.ex.x * v3.x + mx.ey.x * v3.y; + var y = mx.ex.y * v3.x + mx.ey.y * v3.y; + return Vec2.neo(x2, y); + } else if (v3 && "ex" in v3 && "ey" in v3) { + var a2 = mx.ex.x * v3.ex.x + mx.ey.x * v3.ex.y; + var b2 = mx.ex.x * v3.ey.x + mx.ey.x * v3.ey.y; + var c2 = mx.ex.y * v3.ex.x + mx.ey.y * v3.ex.y; + var d2 = mx.ex.y * v3.ey.x + mx.ey.y * v3.ey.y; + return new Mat222(a2, b2, c2, d2); + } + }; + Mat222.mulVec2 = function(mx, v3) { + var x2 = mx.ex.x * v3.x + mx.ey.x * v3.y; + var y = mx.ex.y * v3.x + mx.ey.y * v3.y; + return Vec2.neo(x2, y); + }; + Mat222.mulMat22 = function(mx, v3) { + var a2 = mx.ex.x * v3.ex.x + mx.ey.x * v3.ex.y; + var b2 = mx.ex.x * v3.ey.x + mx.ey.x * v3.ey.y; + var c2 = mx.ex.y * v3.ex.x + mx.ey.y * v3.ex.y; + var d2 = mx.ex.y * v3.ey.x + mx.ey.y * v3.ey.y; + return new Mat222(a2, b2, c2, d2); + }; + Mat222.mulT = function(mx, v3) { + if (v3 && "x" in v3 && "y" in v3) { + return Vec2.neo(Vec2.dot(v3, mx.ex), Vec2.dot(v3, mx.ey)); + } else if (v3 && "ex" in v3 && "ey" in v3) { + var c1 = Vec2.neo(Vec2.dot(mx.ex, v3.ex), Vec2.dot(mx.ey, v3.ex)); + var c2 = Vec2.neo(Vec2.dot(mx.ex, v3.ey), Vec2.dot(mx.ey, v3.ey)); + return new Mat222(c1, c2); + } + }; + Mat222.mulTVec2 = function(mx, v3) { + return Vec2.neo(Vec2.dot(v3, mx.ex), Vec2.dot(v3, mx.ey)); + }; + Mat222.mulTMat22 = function(mx, v3) { + var c1 = Vec2.neo(Vec2.dot(mx.ex, v3.ex), Vec2.dot(mx.ey, v3.ex)); + var c2 = Vec2.neo(Vec2.dot(mx.ex, v3.ey), Vec2.dot(mx.ey, v3.ey)); + return new Mat222(c1, c2); + }; + Mat222.abs = function(mx) { + return new Mat222(Vec2.abs(mx.ex), Vec2.abs(mx.ey)); + }; + Mat222.add = function(mx1, mx2) { + return new Mat222(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey)); + }; + return Mat222; + }() + ); + var math_sqrt$2 = Math.sqrt; + var pointA$1 = vec2(0, 0); + var pointB$1 = vec2(0, 0); + var temp$3 = vec2(0, 0); + var cA$1 = vec2(0, 0); + var cB$1 = vec2(0, 0); + var dist = vec2(0, 0); + var planePoint$2 = vec2(0, 0); + var clipPoint$1 = vec2(0, 0); + exports2.ManifoldType = void 0; + (function(ManifoldType2) { + ManifoldType2[ManifoldType2["e_unset"] = -1] = "e_unset"; + ManifoldType2[ManifoldType2["e_circles"] = 0] = "e_circles"; + ManifoldType2[ManifoldType2["e_faceA"] = 1] = "e_faceA"; + ManifoldType2[ManifoldType2["e_faceB"] = 2] = "e_faceB"; + })(exports2.ManifoldType || (exports2.ManifoldType = {})); + exports2.ContactFeatureType = void 0; + (function(ContactFeatureType2) { + ContactFeatureType2[ContactFeatureType2["e_unset"] = -1] = "e_unset"; + ContactFeatureType2[ContactFeatureType2["e_vertex"] = 0] = "e_vertex"; + ContactFeatureType2[ContactFeatureType2["e_face"] = 1] = "e_face"; + })(exports2.ContactFeatureType || (exports2.ContactFeatureType = {})); + exports2.PointState = void 0; + (function(PointState2) { + PointState2[PointState2["nullState"] = 0] = "nullState"; + PointState2[PointState2["addState"] = 1] = "addState"; + PointState2[PointState2["persistState"] = 2] = "persistState"; + PointState2[PointState2["removeState"] = 3] = "removeState"; + })(exports2.PointState || (exports2.PointState = {})); + var ClipVertex = ( + /** @class */ + function() { + function ClipVertex2() { + this.v = vec2(0, 0); + this.id = new ContactID(); + } + ClipVertex2.prototype.set = function(o) { + copyVec2(this.v, o.v); + this.id.set(o.id); + }; + ClipVertex2.prototype.recycle = function() { + zeroVec2(this.v); + this.id.recycle(); + }; + return ClipVertex2; + }() + ); + var Manifold = ( + /** @class */ + function() { + function Manifold2() { + this.localNormal = vec2(0, 0); + this.localPoint = vec2(0, 0); + this.points = [new ManifoldPoint(), new ManifoldPoint()]; + this.pointCount = 0; + } + Manifold2.prototype.set = function(that) { + this.type = that.type; + copyVec2(this.localNormal, that.localNormal); + copyVec2(this.localPoint, that.localPoint); + this.pointCount = that.pointCount; + this.points[0].set(that.points[0]); + this.points[1].set(that.points[1]); + }; + Manifold2.prototype.recycle = function() { + this.type = exports2.ManifoldType.e_unset; + zeroVec2(this.localNormal); + zeroVec2(this.localPoint); + this.pointCount = 0; + this.points[0].recycle(); + this.points[1].recycle(); + }; + Manifold2.prototype.getWorldManifold = function(wm, xfA2, radiusA, xfB2, radiusB) { + if (this.pointCount == 0) { + return wm; + } + wm = wm || new WorldManifold(); + wm.pointCount = this.pointCount; + var normal3 = wm.normal; + var points = wm.points; + var separations = wm.separations; + switch (this.type) { + case exports2.ManifoldType.e_circles: { + setVec2(normal3, 1, 0); + var manifoldPoint = this.points[0]; + transformVec2(pointA$1, xfA2, this.localPoint); + transformVec2(pointB$1, xfB2, manifoldPoint.localPoint); + subVec2(dist, pointB$1, pointA$1); + var lengthSqr = lengthSqrVec2(dist); + if (lengthSqr > EPSILON * EPSILON) { + var length_1 = math_sqrt$2(lengthSqr); + scaleVec2(normal3, 1 / length_1, dist); + } + combine2Vec2(cA$1, 1, pointA$1, radiusA, normal3); + combine2Vec2(cB$1, 1, pointB$1, -radiusB, normal3); + combine2Vec2(points[0], 0.5, cA$1, 0.5, cB$1); + separations[0] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal3); + break; + } + case exports2.ManifoldType.e_faceA: { + rotVec2(normal3, xfA2.q, this.localNormal); + transformVec2(planePoint$2, xfA2, this.localPoint); + for (var i = 0; i < this.pointCount; ++i) { + var manifoldPoint = this.points[i]; + transformVec2(clipPoint$1, xfB2, manifoldPoint.localPoint); + combine2Vec2(cA$1, 1, clipPoint$1, radiusA - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal3), normal3); + combine2Vec2(cB$1, 1, clipPoint$1, -radiusB, normal3); + combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); + separations[i] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal3); + } + break; + } + case exports2.ManifoldType.e_faceB: { + rotVec2(normal3, xfB2.q, this.localNormal); + transformVec2(planePoint$2, xfB2, this.localPoint); + for (var i = 0; i < this.pointCount; ++i) { + var manifoldPoint = this.points[i]; + transformVec2(clipPoint$1, xfA2, manifoldPoint.localPoint); + combine2Vec2(cB$1, 1, clipPoint$1, radiusB - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal3), normal3); + combine2Vec2(cA$1, 1, clipPoint$1, -radiusA, normal3); + combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); + separations[i] = dotVec2(subVec2(temp$3, cA$1, cB$1), normal3); + } + negVec2(normal3); + break; + } + } + return wm; + }; + Manifold2.clipSegmentToLine = clipSegmentToLine; + Manifold2.ClipVertex = ClipVertex; + Manifold2.getPointStates = getPointStates; + Manifold2.PointState = exports2.PointState; + return Manifold2; + }() + ); + var ManifoldPoint = ( + /** @class */ + function() { + function ManifoldPoint2() { + this.localPoint = vec2(0, 0); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.id = new ContactID(); + } + ManifoldPoint2.prototype.set = function(that) { + copyVec2(this.localPoint, that.localPoint); + this.normalImpulse = that.normalImpulse; + this.tangentImpulse = that.tangentImpulse; + this.id.set(that.id); + }; + ManifoldPoint2.prototype.recycle = function() { + zeroVec2(this.localPoint); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.id.recycle(); + }; + return ManifoldPoint2; + }() + ); + var ContactID = ( + /** @class */ + function() { + function ContactID2() { + this.key = -1; + this.indexA = -1; + this.indexB = -1; + this.typeA = exports2.ContactFeatureType.e_unset; + this.typeB = exports2.ContactFeatureType.e_unset; + } + ContactID2.prototype.setFeatures = function(indexA, typeA, indexB, typeB) { + this.indexA = indexA; + this.indexB = indexB; + this.typeA = typeA; + this.typeB = typeB; + this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; + }; + ContactID2.prototype.set = function(that) { + this.indexA = that.indexA; + this.indexB = that.indexB; + this.typeA = that.typeA; + this.typeB = that.typeB; + this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; + }; + ContactID2.prototype.swapFeatures = function() { + var indexA = this.indexA; + var indexB = this.indexB; + var typeA = this.typeA; + var typeB = this.typeB; + this.indexA = indexB; + this.indexB = indexA; + this.typeA = typeB; + this.typeB = typeA; + this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; + }; + ContactID2.prototype.recycle = function() { + this.indexA = 0; + this.indexB = 0; + this.typeA = exports2.ContactFeatureType.e_unset; + this.typeB = exports2.ContactFeatureType.e_unset; + this.key = -1; + }; + return ContactID2; + }() + ); + var WorldManifold = ( + /** @class */ + function() { + function WorldManifold2() { + this.normal = vec2(0, 0); + this.points = [vec2(0, 0), vec2(0, 0)]; + this.separations = [0, 0]; + this.pointCount = 0; + } + WorldManifold2.prototype.recycle = function() { + zeroVec2(this.normal); + zeroVec2(this.points[0]); + zeroVec2(this.points[1]); + this.separations[0] = 0; + this.separations[1] = 0; + this.pointCount = 0; + }; + return WorldManifold2; + }() + ); + function getPointStates(state1, state2, manifold1, manifold2) { + for (var i = 0; i < manifold1.pointCount; ++i) { + var id = manifold1.points[i].id; + state1[i] = exports2.PointState.removeState; + for (var j = 0; j < manifold2.pointCount; ++j) { + if (manifold2.points[j].id.key === id.key) { + state1[i] = exports2.PointState.persistState; + break; + } + } + } + for (var i = 0; i < manifold2.pointCount; ++i) { + var id = manifold2.points[i].id; + state2[i] = exports2.PointState.addState; + for (var j = 0; j < manifold1.pointCount; ++j) { + if (manifold1.points[j].id.key === id.key) { + state2[i] = exports2.PointState.persistState; + break; + } + } + } + } + function clipSegmentToLine(vOut, vIn, normal3, offset, vertexIndexA) { + var numOut = 0; + var distance0 = dotVec2(normal3, vIn[0].v) - offset; + var distance1 = dotVec2(normal3, vIn[1].v) - offset; + if (distance0 <= 0) + vOut[numOut++].set(vIn[0]); + if (distance1 <= 0) + vOut[numOut++].set(vIn[1]); + if (distance0 * distance1 < 0) { + var interp = distance0 / (distance0 - distance1); + combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v); + vOut[numOut].id.setFeatures(vertexIndexA, exports2.ContactFeatureType.e_vertex, vIn[0].id.indexB, exports2.ContactFeatureType.e_face); + ++numOut; + } + return numOut; + } + var math_sqrt$1 = Math.sqrt; + var math_max$2 = Math.max; + var math_min$4 = Math.min; + var contactPool = new Pool({ + create: function() { + return new Contact(); + }, + release: function(contact) { + contact.recycle(); + } + }); + var oldManifold = new Manifold(); + var worldManifold = new WorldManifold(); + var ContactEdge = ( + /** @class */ + function() { + function ContactEdge2(contact) { + this.prev = null; + this.next = null; + this.other = null; + this.contact = contact; + } + ContactEdge2.prototype.recycle = function() { + this.prev = null; + this.next = null; + this.other = null; + }; + return ContactEdge2; + }() + ); + function mixFriction(friction1, friction2) { + return math_sqrt$1(friction1 * friction2); + } + function mixRestitution(restitution1, restitution2) { + return restitution1 > restitution2 ? restitution1 : restitution2; + } + var s_registers = []; + var VelocityConstraintPoint = ( + /** @class */ + function() { + function VelocityConstraintPoint2() { + this.rA = vec2(0, 0); + this.rB = vec2(0, 0); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.normalMass = 0; + this.tangentMass = 0; + this.velocityBias = 0; + } + VelocityConstraintPoint2.prototype.recycle = function() { + zeroVec2(this.rA); + zeroVec2(this.rB); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.normalMass = 0; + this.tangentMass = 0; + this.velocityBias = 0; + }; + return VelocityConstraintPoint2; + }() + ); + var cA = vec2(0, 0); + var vA = vec2(0, 0); + var cB = vec2(0, 0); + var vB = vec2(0, 0); + var tangent$1 = vec2(0, 0); + var xfA = transform(0, 0, 0); + var xfB = transform(0, 0, 0); + var pointA = vec2(0, 0); + var pointB = vec2(0, 0); + var clipPoint = vec2(0, 0); + var planePoint$1 = vec2(0, 0); + var rA = vec2(0, 0); + var rB = vec2(0, 0); + var P$1 = vec2(0, 0); + var normal$2 = vec2(0, 0); + var point = vec2(0, 0); + var dv = vec2(0, 0); + var dv1 = vec2(0, 0); + var dv2 = vec2(0, 0); + var b = vec2(0, 0); + var a = vec2(0, 0); + var x = vec2(0, 0); + var d = vec2(0, 0); + var P1 = vec2(0, 0); + var P2 = vec2(0, 0); + var temp$2 = vec2(0, 0); + var Contact = ( + /** @class */ + function() { + function Contact2() { + this.m_nodeA = new ContactEdge(this); + this.m_nodeB = new ContactEdge(this); + this.m_fixtureA = null; + this.m_fixtureB = null; + this.m_indexA = -1; + this.m_indexB = -1; + this.m_evaluateFcn = null; + this.m_manifold = new Manifold(); + this.m_prev = null; + this.m_next = null; + this.m_toi = 1; + this.m_toiCount = 0; + this.m_toiFlag = false; + this.m_friction = 0; + this.m_restitution = 0; + this.m_tangentSpeed = 0; + this.m_enabledFlag = true; + this.m_islandFlag = false; + this.m_touchingFlag = false; + this.m_filterFlag = false; + this.m_bulletHitFlag = false; + this.m_impulse = new ContactImpulse(this); + this.v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; + this.v_normal = vec2(0, 0); + this.v_normalMass = new Mat22(); + this.v_K = new Mat22(); + this.v_pointCount = 0; + this.v_tangentSpeed = 0; + this.v_friction = 0; + this.v_restitution = 0; + this.v_invMassA = 0; + this.v_invMassB = 0; + this.v_invIA = 0; + this.v_invIB = 0; + this.p_localPoints = [vec2(0, 0), vec2(0, 0)]; + this.p_localNormal = vec2(0, 0); + this.p_localPoint = vec2(0, 0); + this.p_localCenterA = vec2(0, 0); + this.p_localCenterB = vec2(0, 0); + this.p_type = exports2.ManifoldType.e_unset; + this.p_radiusA = 0; + this.p_radiusB = 0; + this.p_pointCount = 0; + this.p_invMassA = 0; + this.p_invMassB = 0; + this.p_invIA = 0; + this.p_invIB = 0; + } + Contact2.prototype.initialize = function(fA, indexA, fB, indexB, evaluateFcn) { + this.m_fixtureA = fA; + this.m_fixtureB = fB; + this.m_indexA = indexA; + this.m_indexB = indexB; + this.m_evaluateFcn = evaluateFcn; + this.m_friction = mixFriction(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction); + this.m_restitution = mixRestitution(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution); + }; + Contact2.prototype.recycle = function() { + this.m_nodeA.recycle(); + this.m_nodeB.recycle(); + this.m_fixtureA = null; + this.m_fixtureB = null; + this.m_indexA = -1; + this.m_indexB = -1; + this.m_evaluateFcn = null; + this.m_manifold.recycle(); + this.m_prev = null; + this.m_next = null; + this.m_toi = 1; + this.m_toiCount = 0; + this.m_toiFlag = false; + this.m_friction = 0; + this.m_restitution = 0; + this.m_tangentSpeed = 0; + this.m_enabledFlag = true; + this.m_islandFlag = false; + this.m_touchingFlag = false; + this.m_filterFlag = false; + this.m_bulletHitFlag = false; + this.m_impulse.recycle(); + for (var _i = 0, _a2 = this.v_points; _i < _a2.length; _i++) { + var point_1 = _a2[_i]; + point_1.recycle(); + } + zeroVec2(this.v_normal); + this.v_normalMass.setZero(); + this.v_K.setZero(); + this.v_pointCount = 0; + this.v_tangentSpeed = 0; + this.v_friction = 0; + this.v_restitution = 0; + this.v_invMassA = 0; + this.v_invMassB = 0; + this.v_invIA = 0; + this.v_invIB = 0; + for (var _b = 0, _c = this.p_localPoints; _b < _c.length; _b++) { + var point_2 = _c[_b]; + zeroVec2(point_2); + } + zeroVec2(this.p_localNormal); + zeroVec2(this.p_localPoint); + zeroVec2(this.p_localCenterA); + zeroVec2(this.p_localCenterB); + this.p_type = exports2.ManifoldType.e_unset; + this.p_radiusA = 0; + this.p_radiusB = 0; + this.p_pointCount = 0; + this.p_invMassA = 0; + this.p_invMassB = 0; + this.p_invIA = 0; + this.p_invIB = 0; + }; + Contact2.prototype.initConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var shapeA = fixtureA.m_shape; + var shapeB = fixtureB.m_shape; + if (shapeA === null || shapeB === null) + return; + var manifold = this.m_manifold; + var pointCount = manifold.pointCount; + this.v_invMassA = bodyA.m_invMass; + this.v_invMassB = bodyB.m_invMass; + this.v_invIA = bodyA.m_invI; + this.v_invIB = bodyB.m_invI; + this.v_friction = this.m_friction; + this.v_restitution = this.m_restitution; + this.v_tangentSpeed = this.m_tangentSpeed; + this.v_pointCount = pointCount; + this.v_K.setZero(); + this.v_normalMass.setZero(); + this.p_invMassA = bodyA.m_invMass; + this.p_invMassB = bodyB.m_invMass; + this.p_invIA = bodyA.m_invI; + this.p_invIB = bodyB.m_invI; + copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter); + copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter); + this.p_radiusA = shapeA.m_radius; + this.p_radiusB = shapeB.m_radius; + this.p_type = manifold.type; + copyVec2(this.p_localNormal, manifold.localNormal); + copyVec2(this.p_localPoint, manifold.localPoint); + this.p_pointCount = pointCount; + for (var j = 0; j < SettingsInternal.maxManifoldPoints; ++j) { + this.v_points[j].recycle(); + zeroVec2(this.p_localPoints[j]); + } + for (var j = 0; j < pointCount; ++j) { + var cp = manifold.points[j]; + var vcp = this.v_points[j]; + if (step.warmStarting) { + vcp.normalImpulse = step.dtRatio * cp.normalImpulse; + vcp.tangentImpulse = step.dtRatio * cp.tangentImpulse; + } + copyVec2(this.p_localPoints[j], cp.localPoint); + } + }; + Contact2.prototype.getManifold = function() { + return this.m_manifold; + }; + Contact2.prototype.getWorldManifold = function(worldManifold2) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var shapeA = fixtureA.m_shape; + var shapeB = fixtureB.m_shape; + if (shapeA === null || shapeB === null) + return; + return this.m_manifold.getWorldManifold(worldManifold2, bodyA.getTransform(), shapeA.m_radius, bodyB.getTransform(), shapeB.m_radius); + }; + Contact2.prototype.setEnabled = function(flag) { + this.m_enabledFlag = !!flag; + }; + Contact2.prototype.isEnabled = function() { + return this.m_enabledFlag; + }; + Contact2.prototype.isTouching = function() { + return this.m_touchingFlag; + }; + Contact2.prototype.getNext = function() { + return this.m_next; + }; + Contact2.prototype.getFixtureA = function() { + return this.m_fixtureA; + }; + Contact2.prototype.getFixtureB = function() { + return this.m_fixtureB; + }; + Contact2.prototype.getChildIndexA = function() { + return this.m_indexA; + }; + Contact2.prototype.getChildIndexB = function() { + return this.m_indexB; + }; + Contact2.prototype.flagForFiltering = function() { + this.m_filterFlag = true; + }; + Contact2.prototype.setFriction = function(friction) { + this.m_friction = friction; + }; + Contact2.prototype.getFriction = function() { + return this.m_friction; + }; + Contact2.prototype.resetFriction = function() { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction); + }; + Contact2.prototype.setRestitution = function(restitution) { + this.m_restitution = restitution; + }; + Contact2.prototype.getRestitution = function() { + return this.m_restitution; + }; + Contact2.prototype.resetRestitution = function() { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution); + }; + Contact2.prototype.setTangentSpeed = function(speed) { + this.m_tangentSpeed = speed; + }; + Contact2.prototype.getTangentSpeed = function() { + return this.m_tangentSpeed; + }; + Contact2.prototype.evaluate = function(manifold, xfA2, xfB2) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + this.m_evaluateFcn(manifold, xfA2, fixtureA, this.m_indexA, xfB2, fixtureB, this.m_indexB); + }; + Contact2.prototype.update = function(listener) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var shapeA = fixtureA.m_shape; + var shapeB = fixtureB.m_shape; + if (shapeA === null || shapeB === null) + return; + this.m_enabledFlag = true; + var touching = false; + var wasTouching = this.m_touchingFlag; + var sensorA = fixtureA.m_isSensor; + var sensorB = fixtureB.m_isSensor; + var sensor = sensorA || sensorB; + var xfA2 = bodyA.m_xf; + var xfB2 = bodyB.m_xf; + if (sensor) { + touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA2, xfB2); + this.m_manifold.pointCount = 0; + } else { + oldManifold.recycle(); + oldManifold.set(this.m_manifold); + this.m_manifold.recycle(); + this.evaluate(this.m_manifold, xfA2, xfB2); + touching = this.m_manifold.pointCount > 0; + for (var i = 0; i < this.m_manifold.pointCount; ++i) { + var nmp = this.m_manifold.points[i]; + nmp.normalImpulse = 0; + nmp.tangentImpulse = 0; + for (var j = 0; j < oldManifold.pointCount; ++j) { + var omp = oldManifold.points[j]; + if (omp.id.key === nmp.id.key) { + nmp.normalImpulse = omp.normalImpulse; + nmp.tangentImpulse = omp.tangentImpulse; + break; + } } - } - // If no valid normal can be found than this edge should not collide. - // @ts-ignore todo: why we need this if here? - if (edgeAxis.type == EPAxisType.e_unknown) { - return; - } - if (edgeAxis.separation > radius) { - return; - } - { // ComputePolygonSeparation - polygonAxis.type = EPAxisType.e_unknown; - polygonAxis.index = -1; - polygonAxis.separation = -Infinity; - setVec2(perp, -normal.y, normal.x); - for (var i = 0; i < polygonBA.count; ++i) { - scaleVec2(n, -1, polygonBA.normals[i]); - var s1 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v1); - var s2 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v2); - var s = math_min(s1, s2); - if (s > radius) { - // No collision - polygonAxis.type = EPAxisType.e_edgeB; - polygonAxis.index = i; - polygonAxis.separation = s; - break; - } - // Adjacency - if (dotVec2(n, perp) >= 0.0) { - if (dotVec2(n, normal) - dotVec2(upperLimit, normal) < -SettingsInternal.angularSlop) { - continue; - } - } - else { - if (dotVec2(n, normal) - dotVec2(lowerLimit, normal) < -SettingsInternal.angularSlop) { - continue; - } - } - if (s > polygonAxis.separation) { - polygonAxis.type = EPAxisType.e_edgeB; - polygonAxis.index = i; - polygonAxis.separation = s; - } + } + if (touching !== wasTouching) { + bodyA.setAwake(true); + bodyB.setAwake(true); + } + } + this.m_touchingFlag = touching; + var hasListener = typeof listener === "object" && listener !== null; + if (!wasTouching && touching && hasListener) { + listener.beginContact(this); + } + if (wasTouching && !touching && hasListener) { + listener.endContact(this); + } + if (!sensor && touching && hasListener && oldManifold) { + listener.preSolve(this, oldManifold); + } + }; + Contact2.prototype.solvePositionConstraint = function(step) { + return this._solvePositionConstraint(step, null, null); + }; + Contact2.prototype.solvePositionConstraintTOI = function(step, toiA, toiB) { + return this._solvePositionConstraint(step, toiA, toiB); + }; + Contact2.prototype._solvePositionConstraint = function(step, toiA, toiB) { + var toi = toiA !== null && toiB !== null ? true : false; + var minSeparation = 0; + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return minSeparation; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return minSeparation; + bodyA.c_velocity; + bodyB.c_velocity; + var positionA = bodyA.c_position; + var positionB = bodyB.c_position; + var localCenterA = this.p_localCenterA; + var localCenterB = this.p_localCenterB; + var mA = 0; + var iA = 0; + if (!toi || (bodyA === toiA || bodyA === toiB)) { + mA = this.p_invMassA; + iA = this.p_invIA; + } + var mB = 0; + var iB = 0; + if (!toi || (bodyB === toiA || bodyB === toiB)) { + mB = this.p_invMassB; + iB = this.p_invIB; + } + copyVec2(cA, positionA.c); + var aA = positionA.a; + copyVec2(cB, positionB.c); + var aB = positionB.a; + for (var j = 0; j < this.p_pointCount; ++j) { + getTransform(xfA, localCenterA, cA, aA); + getTransform(xfB, localCenterB, cB, aB); + var separation = void 0; + switch (this.p_type) { + case exports2.ManifoldType.e_circles: { + transformVec2(pointA, xfA, this.p_localPoint); + transformVec2(pointB, xfB, this.p_localPoints[0]); + subVec2(normal$2, pointB, pointA); + normalizeVec2(normal$2); + combine2Vec2(point, 0.5, pointA, 0.5, pointB); + separation = dotVec2(pointB, normal$2) - dotVec2(pointA, normal$2) - this.p_radiusA - this.p_radiusB; + break; + } + case exports2.ManifoldType.e_faceA: { + rotVec2(normal$2, xfA.q, this.p_localNormal); + transformVec2(planePoint$1, xfA, this.p_localPoint); + transformVec2(clipPoint, xfB, this.p_localPoints[j]); + separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; + copyVec2(point, clipPoint); + break; + } + case exports2.ManifoldType.e_faceB: { + rotVec2(normal$2, xfB.q, this.p_localNormal); + transformVec2(planePoint$1, xfB, this.p_localPoint); + transformVec2(clipPoint, xfA, this.p_localPoints[j]); + separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; + copyVec2(point, clipPoint); + negVec2(normal$2); + break; + } + default: { + return minSeparation; + } + } + subVec2(rA, point, cA); + subVec2(rB, point, cB); + minSeparation = math_min$4(minSeparation, separation); + var baumgarte = toi ? SettingsInternal.toiBaugarte : SettingsInternal.baumgarte; + var linearSlop = SettingsInternal.linearSlop; + var maxLinearCorrection = SettingsInternal.maxLinearCorrection; + var C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0); + var rnA = crossVec2Vec2(rA, normal$2); + var rnB = crossVec2Vec2(rB, normal$2); + var K = mA + mB + iA * rnA * rnA + iB * rnB * rnB; + var impulse = K > 0 ? -C / K : 0; + scaleVec2(P$1, impulse, normal$2); + minusScaleVec2(cA, mA, P$1); + aA -= iA * crossVec2Vec2(rA, P$1); + plusScaleVec2(cB, mB, P$1); + aB += iB * crossVec2Vec2(rB, P$1); + } + copyVec2(positionA.c, cA); + positionA.a = aA; + copyVec2(positionB.c, cB); + positionB.a = aB; + return minSeparation; + }; + Contact2.prototype.initVelocityConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var velocityA = bodyA.c_velocity; + var velocityB = bodyB.c_velocity; + var positionA = bodyA.c_position; + var positionB = bodyB.c_position; + var radiusA = this.p_radiusA; + var radiusB = this.p_radiusB; + var manifold = this.m_manifold; + var mA = this.v_invMassA; + var mB = this.v_invMassB; + var iA = this.v_invIA; + var iB = this.v_invIB; + var localCenterA = this.p_localCenterA; + var localCenterB = this.p_localCenterB; + copyVec2(cA, positionA.c); + var aA = positionA.a; + copyVec2(vA, velocityA.v); + var wA = velocityA.w; + copyVec2(cB, positionB.c); + var aB = positionB.a; + copyVec2(vB, velocityB.v); + var wB = velocityB.w; + getTransform(xfA, localCenterA, cA, aA); + getTransform(xfB, localCenterB, cB, aB); + worldManifold.recycle(); + manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB); + copyVec2(this.v_normal, worldManifold.normal); + for (var j = 0; j < this.v_pointCount; ++j) { + var vcp = this.v_points[j]; + var wmp = worldManifold.points[j]; + subVec2(vcp.rA, wmp, cA); + subVec2(vcp.rB, wmp, cB); + var rnA = crossVec2Vec2(vcp.rA, this.v_normal); + var rnB = crossVec2Vec2(vcp.rB, this.v_normal); + var kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB; + vcp.normalMass = kNormal > 0 ? 1 / kNormal : 0; + crossVec2Num(tangent$1, this.v_normal, 1); + var rtA = crossVec2Vec2(vcp.rA, tangent$1); + var rtB = crossVec2Vec2(vcp.rB, tangent$1); + var kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB; + vcp.tangentMass = kTangent > 0 ? 1 / kTangent : 0; + vcp.velocityBias = 0; + var vRel = 0; + vRel += dotVec2(this.v_normal, vB); + vRel += dotVec2(this.v_normal, crossNumVec2(temp$2, wB, vcp.rB)); + vRel -= dotVec2(this.v_normal, vA); + vRel -= dotVec2(this.v_normal, crossNumVec2(temp$2, wA, vcp.rA)); + if (vRel < -SettingsInternal.velocityThreshold) { + vcp.velocityBias = -this.v_restitution * vRel; + } + } + if (this.v_pointCount == 2 && step.blockSolve) { + var vcp1 = this.v_points[0]; + var vcp2 = this.v_points[1]; + var rn1A = crossVec2Vec2(vcp1.rA, this.v_normal); + var rn1B = crossVec2Vec2(vcp1.rB, this.v_normal); + var rn2A = crossVec2Vec2(vcp2.rA, this.v_normal); + var rn2B = crossVec2Vec2(vcp2.rB, this.v_normal); + var k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B; + var k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B; + var k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B; + var k_maxConditionNumber = 1e3; + if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) { + this.v_K.ex.setNum(k11, k12); + this.v_K.ey.setNum(k12, k22); + var a_1 = this.v_K.ex.x; + var b_1 = this.v_K.ey.x; + var c2 = this.v_K.ex.y; + var d_1 = this.v_K.ey.y; + var det = a_1 * d_1 - b_1 * c2; + if (det !== 0) { + det = 1 / det; + } + this.v_normalMass.ex.x = det * d_1; + this.v_normalMass.ey.x = -det * b_1; + this.v_normalMass.ex.y = -det * c2; + this.v_normalMass.ey.y = det * a_1; + } else { + this.v_pointCount = 1; + } + } + copyVec2(positionA.c, cA); + positionA.a = aA; + copyVec2(velocityA.v, vA); + velocityA.w = wA; + copyVec2(positionB.c, cB); + positionB.a = aB; + copyVec2(velocityB.v, vB); + velocityB.w = wB; + }; + Contact2.prototype.warmStartConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var velocityA = bodyA.c_velocity; + var velocityB = bodyB.c_velocity; + bodyA.c_position; + bodyB.c_position; + var mA = this.v_invMassA; + var iA = this.v_invIA; + var mB = this.v_invMassB; + var iB = this.v_invIB; + copyVec2(vA, velocityA.v); + var wA = velocityA.w; + copyVec2(vB, velocityB.v); + var wB = velocityB.w; + copyVec2(normal$2, this.v_normal); + crossVec2Num(tangent$1, normal$2, 1); + for (var j = 0; j < this.v_pointCount; ++j) { + var vcp = this.v_points[j]; + combine2Vec2(P$1, vcp.normalImpulse, normal$2, vcp.tangentImpulse, tangent$1); + wA -= iA * crossVec2Vec2(vcp.rA, P$1); + minusScaleVec2(vA, mA, P$1); + wB += iB * crossVec2Vec2(vcp.rB, P$1); + plusScaleVec2(vB, mB, P$1); + } + copyVec2(velocityA.v, vA); + velocityA.w = wA; + copyVec2(velocityB.v, vB); + velocityB.w = wB; + }; + Contact2.prototype.storeConstraintImpulses = function(step) { + var manifold = this.m_manifold; + for (var j = 0; j < this.v_pointCount; ++j) { + manifold.points[j].normalImpulse = this.v_points[j].normalImpulse; + manifold.points[j].tangentImpulse = this.v_points[j].tangentImpulse; + } + }; + Contact2.prototype.solveVelocityConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var velocityA = bodyA.c_velocity; + bodyA.c_position; + var velocityB = bodyB.c_velocity; + bodyB.c_position; + var mA = this.v_invMassA; + var iA = this.v_invIA; + var mB = this.v_invMassB; + var iB = this.v_invIB; + copyVec2(vA, velocityA.v); + var wA = velocityA.w; + copyVec2(vB, velocityB.v); + var wB = velocityB.w; + copyVec2(normal$2, this.v_normal); + crossVec2Num(tangent$1, normal$2, 1); + var friction = this.v_friction; + for (var j = 0; j < this.v_pointCount; ++j) { + var vcp = this.v_points[j]; + zeroVec2(dv); + plusVec2(dv, vB); + plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); + minusVec2(dv, vA); + minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); + var vt = dotVec2(dv, tangent$1) - this.v_tangentSpeed; + var lambda = vcp.tangentMass * -vt; + var maxFriction = friction * vcp.normalImpulse; + var newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction); + lambda = newImpulse - vcp.tangentImpulse; + vcp.tangentImpulse = newImpulse; + scaleVec2(P$1, lambda, tangent$1); + minusScaleVec2(vA, mA, P$1); + wA -= iA * crossVec2Vec2(vcp.rA, P$1); + plusScaleVec2(vB, mB, P$1); + wB += iB * crossVec2Vec2(vcp.rB, P$1); + } + if (this.v_pointCount == 1 || step.blockSolve == false) { + for (var i = 0; i < this.v_pointCount; ++i) { + var vcp = this.v_points[i]; + zeroVec2(dv); + plusVec2(dv, vB); + plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); + minusVec2(dv, vA); + minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); + var vn = dotVec2(dv, normal$2); + var lambda = -vcp.normalMass * (vn - vcp.velocityBias); + var newImpulse = math_max$2(vcp.normalImpulse + lambda, 0); + lambda = newImpulse - vcp.normalImpulse; + vcp.normalImpulse = newImpulse; + scaleVec2(P$1, lambda, normal$2); + minusScaleVec2(vA, mA, P$1); + wA -= iA * crossVec2Vec2(vcp.rA, P$1); + plusScaleVec2(vB, mB, P$1); + wB += iB * crossVec2Vec2(vcp.rB, P$1); + } + } else { + var vcp1 = this.v_points[0]; + var vcp2 = this.v_points[1]; + setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse); + zeroVec2(dv1); + plusVec2(dv1, vB); + plusVec2(dv1, crossNumVec2(temp$2, wB, vcp1.rB)); + minusVec2(dv1, vA); + minusVec2(dv1, crossNumVec2(temp$2, wA, vcp1.rA)); + zeroVec2(dv2); + plusVec2(dv2, vB); + plusVec2(dv2, crossNumVec2(temp$2, wB, vcp2.rB)); + minusVec2(dv2, vA); + minusVec2(dv2, crossNumVec2(temp$2, wA, vcp2.rA)); + var vn1 = dotVec2(dv1, normal$2); + var vn2 = dotVec2(dv2, normal$2); + setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias); + b.x -= this.v_K.ex.x * a.x + this.v_K.ey.x * a.y; + b.y -= this.v_K.ex.y * a.x + this.v_K.ey.y * a.y; + while (true) { + zeroVec2(x); + x.x = -(this.v_normalMass.ex.x * b.x + this.v_normalMass.ey.x * b.y); + x.y = -(this.v_normalMass.ex.y * b.x + this.v_normalMass.ey.y * b.y); + if (x.x >= 0 && x.y >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + x.x = -vcp1.normalMass * b.x; + x.y = 0; + vn1 = 0; + vn2 = this.v_K.ex.y * x.x + b.y; + if (x.x >= 0 && vn2 >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + x.x = 0; + x.y = -vcp2.normalMass * b.y; + vn1 = this.v_K.ey.x * x.y + b.x; + vn2 = 0; + if (x.y >= 0 && vn1 >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + x.x = 0; + x.y = 0; + vn1 = b.x; + vn2 = b.y; + if (vn1 >= 0 && vn2 >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + break; + } + } + copyVec2(velocityA.v, vA); + velocityA.w = wA; + copyVec2(velocityB.v, vB); + velocityB.w = wB; + }; + Contact2.addType = function(type1, type2, callback) { + s_registers[type1] = s_registers[type1] || {}; + s_registers[type1][type2] = callback; + }; + Contact2.create = function(fixtureA, indexA, fixtureB, indexB) { + var typeA = fixtureA.m_shape.m_type; + var typeB = fixtureB.m_shape.m_type; + var contact = contactPool.allocate(); + var evaluateFcn; + if (evaluateFcn = s_registers[typeA] && s_registers[typeA][typeB]) { + contact.initialize(fixtureA, indexA, fixtureB, indexB, evaluateFcn); + } else if (evaluateFcn = s_registers[typeB] && s_registers[typeB][typeA]) { + contact.initialize(fixtureB, indexB, fixtureA, indexA, evaluateFcn); + } else { + return null; + } + fixtureA = contact.m_fixtureA; + fixtureB = contact.m_fixtureB; + indexA = contact.getChildIndexA(); + indexB = contact.getChildIndexB(); + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + contact.m_nodeA.contact = contact; + contact.m_nodeA.other = bodyB; + contact.m_nodeA.prev = null; + contact.m_nodeA.next = bodyA.m_contactList; + if (bodyA.m_contactList != null) { + bodyA.m_contactList.prev = contact.m_nodeA; + } + bodyA.m_contactList = contact.m_nodeA; + contact.m_nodeB.contact = contact; + contact.m_nodeB.other = bodyA; + contact.m_nodeB.prev = null; + contact.m_nodeB.next = bodyB.m_contactList; + if (bodyB.m_contactList != null) { + bodyB.m_contactList.prev = contact.m_nodeB; + } + bodyB.m_contactList = contact.m_nodeB; + if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) { + bodyA.setAwake(true); + bodyB.setAwake(true); + } + return contact; + }; + Contact2.destroy = function(contact, listener) { + var fixtureA = contact.m_fixtureA; + var fixtureB = contact.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + if (contact.isTouching()) { + listener.endContact(contact); + } + if (contact.m_nodeA.prev) { + contact.m_nodeA.prev.next = contact.m_nodeA.next; + } + if (contact.m_nodeA.next) { + contact.m_nodeA.next.prev = contact.m_nodeA.prev; + } + if (contact.m_nodeA == bodyA.m_contactList) { + bodyA.m_contactList = contact.m_nodeA.next; + } + if (contact.m_nodeB.prev) { + contact.m_nodeB.prev.next = contact.m_nodeB.next; + } + if (contact.m_nodeB.next) { + contact.m_nodeB.next.prev = contact.m_nodeB.prev; + } + if (contact.m_nodeB == bodyB.m_contactList) { + bodyB.m_contactList = contact.m_nodeB.next; + } + if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) { + bodyA.setAwake(true); + bodyB.setAwake(true); + } + contactPool.release(contact); + }; + return Contact2; + }() + ); + var DEFAULTS$b = { + gravity: Vec2.zero(), + allowSleep: true, + warmStarting: true, + continuousPhysics: true, + subStepping: false, + blockSolve: true, + velocityIterations: 8, + positionIterations: 3 + }; + var World = ( + /** @class */ + function() { + function World2(def) { + if (!(this instanceof World2)) { + return new World2(def); + } + this.s_step = new TimeStep(); + if (!def) { + def = {}; + } else if (Vec2.isValid(def)) { + def = { gravity: def }; + } + def = options(def, DEFAULTS$b); + this.m_solver = new Solver(this); + this.m_broadPhase = new BroadPhase(); + this.m_contactList = null; + this.m_contactCount = 0; + this.m_bodyList = null; + this.m_bodyCount = 0; + this.m_jointList = null; + this.m_jointCount = 0; + this.m_stepComplete = true; + this.m_allowSleep = def.allowSleep; + this.m_gravity = Vec2.clone(def.gravity); + this.m_clearForces = true; + this.m_newFixture = false; + this.m_locked = false; + this.m_warmStarting = def.warmStarting; + this.m_continuousPhysics = def.continuousPhysics; + this.m_subStepping = def.subStepping; + this.m_blockSolve = def.blockSolve; + this.m_velocityIterations = def.velocityIterations; + this.m_positionIterations = def.positionIterations; + this.m_t = 0; + } + World2.prototype._serialize = function() { + var bodies = []; + var joints = []; + for (var b2 = this.getBodyList(); b2; b2 = b2.getNext()) { + bodies.push(b2); + } + for (var j = this.getJointList(); j; j = j.getNext()) { + if (typeof j._serialize === "function") { + joints.push(j); + } + } + return { + gravity: this.m_gravity, + bodies, + joints + }; + }; + World2._deserialize = function(data, context, restore) { + if (!data) { + return new World2(); + } + var world = new World2(data.gravity); + if (data.bodies) { + for (var i = data.bodies.length - 1; i >= 0; i -= 1) { + world._addBody(restore(Body, data.bodies[i], world)); + } + } + if (data.joints) { + for (var i = data.joints.length - 1; i >= 0; i--) { + world.createJoint(restore(Joint, data.joints[i], world)); + } + } + return world; + }; + World2.prototype.getBodyList = function() { + return this.m_bodyList; + }; + World2.prototype.getJointList = function() { + return this.m_jointList; + }; + World2.prototype.getContactList = function() { + return this.m_contactList; + }; + World2.prototype.getBodyCount = function() { + return this.m_bodyCount; + }; + World2.prototype.getJointCount = function() { + return this.m_jointCount; + }; + World2.prototype.getContactCount = function() { + return this.m_contactCount; + }; + World2.prototype.setGravity = function(gravity) { + this.m_gravity.set(gravity); + }; + World2.prototype.getGravity = function() { + return this.m_gravity; + }; + World2.prototype.isLocked = function() { + return this.m_locked; + }; + World2.prototype.setAllowSleeping = function(flag) { + if (flag == this.m_allowSleep) { + return; + } + this.m_allowSleep = flag; + if (this.m_allowSleep == false) { + for (var b2 = this.m_bodyList; b2; b2 = b2.m_next) { + b2.setAwake(true); + } + } + }; + World2.prototype.getAllowSleeping = function() { + return this.m_allowSleep; + }; + World2.prototype.setWarmStarting = function(flag) { + this.m_warmStarting = flag; + }; + World2.prototype.getWarmStarting = function() { + return this.m_warmStarting; + }; + World2.prototype.setContinuousPhysics = function(flag) { + this.m_continuousPhysics = flag; + }; + World2.prototype.getContinuousPhysics = function() { + return this.m_continuousPhysics; + }; + World2.prototype.setSubStepping = function(flag) { + this.m_subStepping = flag; + }; + World2.prototype.getSubStepping = function() { + return this.m_subStepping; + }; + World2.prototype.setAutoClearForces = function(flag) { + this.m_clearForces = flag; + }; + World2.prototype.getAutoClearForces = function() { + return this.m_clearForces; + }; + World2.prototype.clearForces = function() { + for (var body = this.m_bodyList; body; body = body.getNext()) { + body.m_force.setZero(); + body.m_torque = 0; + } + }; + World2.prototype.queryAABB = function(aabb, callback) { + var broadPhase = this.m_broadPhase; + this.m_broadPhase.query(aabb, function(proxyId) { + var proxy = broadPhase.getUserData(proxyId); + return callback(proxy.fixture); + }); + }; + World2.prototype.rayCast = function(point1, point2, callback) { + var broadPhase = this.m_broadPhase; + this.m_broadPhase.rayCast({ + maxFraction: 1, + p1: point1, + p2: point2 + }, function(input2, proxyId) { + var proxy = broadPhase.getUserData(proxyId); + var fixture = proxy.fixture; + var index = proxy.childIndex; + var output2 = {}; + var hit = fixture.rayCast(output2, input2, index); + if (hit) { + var fraction = output2.fraction; + var point3 = Vec2.add(Vec2.mulNumVec2(1 - fraction, input2.p1), Vec2.mulNumVec2(fraction, input2.p2)); + return callback(fixture, point3, output2.normal, fraction); + } + return input2.maxFraction; + }); + }; + World2.prototype.getProxyCount = function() { + return this.m_broadPhase.getProxyCount(); + }; + World2.prototype.getTreeHeight = function() { + return this.m_broadPhase.getTreeHeight(); + }; + World2.prototype.getTreeBalance = function() { + return this.m_broadPhase.getTreeBalance(); + }; + World2.prototype.getTreeQuality = function() { + return this.m_broadPhase.getTreeQuality(); + }; + World2.prototype.shiftOrigin = function(newOrigin) { + if (this.m_locked) { + return; + } + for (var b2 = this.m_bodyList; b2; b2 = b2.m_next) { + b2.m_xf.p.sub(newOrigin); + b2.m_sweep.c0.sub(newOrigin); + b2.m_sweep.c.sub(newOrigin); + } + for (var j = this.m_jointList; j; j = j.m_next) { + j.shiftOrigin(newOrigin); + } + this.m_broadPhase.shiftOrigin(newOrigin); + }; + World2.prototype._addBody = function(body) { + if (this.isLocked()) { + return; + } + body.m_prev = null; + body.m_next = this.m_bodyList; + if (this.m_bodyList) { + this.m_bodyList.m_prev = body; + } + this.m_bodyList = body; + ++this.m_bodyCount; + }; + World2.prototype.createBody = function(arg1, arg2) { + if (this.isLocked()) { + return null; + } + var def = {}; + if (!arg1) ; + else if (Vec2.isValid(arg1)) { + def = { position: arg1, angle: arg2 }; + } else if (typeof arg1 === "object") { + def = arg1; + } + var body = new Body(this, def); + this._addBody(body); + return body; + }; + World2.prototype.createDynamicBody = function(arg1, arg2) { + var def = {}; + if (!arg1) ; + else if (Vec2.isValid(arg1)) { + def = { position: arg1, angle: arg2 }; + } else if (typeof arg1 === "object") { + def = arg1; + } + def.type = "dynamic"; + return this.createBody(def); + }; + World2.prototype.createKinematicBody = function(arg1, arg2) { + var def = {}; + if (!arg1) ; + else if (Vec2.isValid(arg1)) { + def = { position: arg1, angle: arg2 }; + } else if (typeof arg1 === "object") { + def = arg1; + } + def.type = "kinematic"; + return this.createBody(def); + }; + World2.prototype.destroyBody = function(b2) { + if (this.isLocked()) { + return; + } + if (b2.m_destroyed) { + return false; + } + var je = b2.m_jointList; + while (je) { + var je0 = je; + je = je.next; + this.publish("remove-joint", je0.joint); + this.destroyJoint(je0.joint); + b2.m_jointList = je; + } + b2.m_jointList = null; + var ce = b2.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.destroyContact(ce0.contact); + b2.m_contactList = ce; + } + b2.m_contactList = null; + var f = b2.m_fixtureList; + while (f) { + var f0 = f; + f = f.m_next; + this.publish("remove-fixture", f0); + f0.destroyProxies(this.m_broadPhase); + b2.m_fixtureList = f; + } + b2.m_fixtureList = null; + if (b2.m_prev) { + b2.m_prev.m_next = b2.m_next; + } + if (b2.m_next) { + b2.m_next.m_prev = b2.m_prev; + } + if (b2 == this.m_bodyList) { + this.m_bodyList = b2.m_next; + } + b2.m_destroyed = true; + --this.m_bodyCount; + this.publish("remove-body", b2); + return true; + }; + World2.prototype.createJoint = function(joint) { + if (this.isLocked()) { + return null; + } + joint.m_prev = null; + joint.m_next = this.m_jointList; + if (this.m_jointList) { + this.m_jointList.m_prev = joint; + } + this.m_jointList = joint; + ++this.m_jointCount; + joint.m_edgeA.joint = joint; + joint.m_edgeA.other = joint.m_bodyB; + joint.m_edgeA.prev = null; + joint.m_edgeA.next = joint.m_bodyA.m_jointList; + if (joint.m_bodyA.m_jointList) + joint.m_bodyA.m_jointList.prev = joint.m_edgeA; + joint.m_bodyA.m_jointList = joint.m_edgeA; + joint.m_edgeB.joint = joint; + joint.m_edgeB.other = joint.m_bodyA; + joint.m_edgeB.prev = null; + joint.m_edgeB.next = joint.m_bodyB.m_jointList; + if (joint.m_bodyB.m_jointList) + joint.m_bodyB.m_jointList.prev = joint.m_edgeB; + joint.m_bodyB.m_jointList = joint.m_edgeB; + if (joint.m_collideConnected == false) { + for (var edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) { + if (edge.other == joint.m_bodyA) { + edge.contact.flagForFiltering(); + } + } + } + return joint; + }; + World2.prototype.destroyJoint = function(joint) { + if (this.isLocked()) { + return; + } + if (joint.m_prev) { + joint.m_prev.m_next = joint.m_next; + } + if (joint.m_next) { + joint.m_next.m_prev = joint.m_prev; + } + if (joint == this.m_jointList) { + this.m_jointList = joint.m_next; + } + var bodyA = joint.m_bodyA; + var bodyB = joint.m_bodyB; + bodyA.setAwake(true); + bodyB.setAwake(true); + if (joint.m_edgeA.prev) { + joint.m_edgeA.prev.next = joint.m_edgeA.next; + } + if (joint.m_edgeA.next) { + joint.m_edgeA.next.prev = joint.m_edgeA.prev; + } + if (joint.m_edgeA == bodyA.m_jointList) { + bodyA.m_jointList = joint.m_edgeA.next; + } + joint.m_edgeA.prev = null; + joint.m_edgeA.next = null; + if (joint.m_edgeB.prev) { + joint.m_edgeB.prev.next = joint.m_edgeB.next; + } + if (joint.m_edgeB.next) { + joint.m_edgeB.next.prev = joint.m_edgeB.prev; + } + if (joint.m_edgeB == bodyB.m_jointList) { + bodyB.m_jointList = joint.m_edgeB.next; + } + joint.m_edgeB.prev = null; + joint.m_edgeB.next = null; + --this.m_jointCount; + if (joint.m_collideConnected == false) { + var edge = bodyB.getContactList(); + while (edge) { + if (edge.other == bodyA) { + edge.contact.flagForFiltering(); + } + edge = edge.next; + } + } + this.publish("remove-joint", joint); + }; + World2.prototype.step = function(timeStep, velocityIterations, positionIterations) { + this.publish("pre-step", timeStep); + if ((velocityIterations | 0) !== velocityIterations) { + velocityIterations = 0; + } + velocityIterations = velocityIterations || this.m_velocityIterations; + positionIterations = positionIterations || this.m_positionIterations; + if (this.m_newFixture) { + this.findNewContacts(); + this.m_newFixture = false; + } + this.m_locked = true; + this.s_step.reset(timeStep); + this.s_step.velocityIterations = velocityIterations; + this.s_step.positionIterations = positionIterations; + this.s_step.warmStarting = this.m_warmStarting; + this.s_step.blockSolve = this.m_blockSolve; + this.updateContacts(); + if (this.m_stepComplete && timeStep > 0) { + this.m_solver.solveWorld(this.s_step); + for (var b2 = this.m_bodyList; b2; b2 = b2.getNext()) { + if (b2.m_islandFlag == false) { + continue; + } + if (b2.isStatic()) { + continue; + } + b2.synchronizeFixtures(); + } + this.findNewContacts(); + } + if (this.m_continuousPhysics && timeStep > 0) { + this.m_solver.solveWorldTOI(this.s_step); + } + if (this.m_clearForces) { + this.clearForces(); + } + this.m_locked = false; + this.publish("post-step", timeStep); + }; + World2.prototype.findNewContacts = function() { + var _this = this; + this.m_broadPhase.updatePairs(function(proxyA, proxyB) { + return _this.createContact(proxyA, proxyB); + }); + }; + World2.prototype.createContact = function(proxyA, proxyB) { + var fixtureA = proxyA.fixture; + var fixtureB = proxyB.fixture; + var indexA = proxyA.childIndex; + var indexB = proxyB.childIndex; + var bodyA = fixtureA.getBody(); + var bodyB = fixtureB.getBody(); + if (bodyA == bodyB) { + return; + } + var edge = bodyB.getContactList(); + while (edge) { + if (edge.other == bodyA) { + var fA = edge.contact.getFixtureA(); + var fB = edge.contact.getFixtureB(); + var iA = edge.contact.getChildIndexA(); + var iB = edge.contact.getChildIndexB(); + if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) { + return; + } + if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) { + return; + } + } + edge = edge.next; + } + if (bodyB.shouldCollide(bodyA) == false) { + return; + } + if (fixtureB.shouldCollide(fixtureA) == false) { + return; + } + var contact = Contact.create(fixtureA, indexA, fixtureB, indexB); + if (contact == null) { + return; + } + contact.m_prev = null; + if (this.m_contactList != null) { + contact.m_next = this.m_contactList; + this.m_contactList.m_prev = contact; + } + this.m_contactList = contact; + ++this.m_contactCount; + }; + World2.prototype.updateContacts = function() { + var c2; + var next_c = this.m_contactList; + while (c2 = next_c) { + next_c = c2.getNext(); + var fixtureA = c2.getFixtureA(); + var fixtureB = c2.getFixtureB(); + var indexA = c2.getChildIndexA(); + var indexB = c2.getChildIndexB(); + var bodyA = fixtureA.getBody(); + var bodyB = fixtureB.getBody(); + if (c2.m_filterFlag) { + if (bodyB.shouldCollide(bodyA) == false) { + this.destroyContact(c2); + continue; } + if (fixtureB.shouldCollide(fixtureA) == false) { + this.destroyContact(c2); + continue; + } + c2.m_filterFlag = false; + } + var activeA = bodyA.isAwake() && !bodyA.isStatic(); + var activeB = bodyB.isAwake() && !bodyB.isStatic(); + if (activeA == false && activeB == false) { + continue; + } + var proxyIdA = fixtureA.m_proxies[indexA].proxyId; + var proxyIdB = fixtureB.m_proxies[indexB].proxyId; + var overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB); + if (overlap == false) { + this.destroyContact(c2); + continue; + } + c2.update(this); + } + }; + World2.prototype.destroyContact = function(contact) { + if (contact.m_prev) { + contact.m_prev.m_next = contact.m_next; + } + if (contact.m_next) { + contact.m_next.m_prev = contact.m_prev; + } + if (contact == this.m_contactList) { + this.m_contactList = contact.m_next; + } + Contact.destroy(contact, this); + --this.m_contactCount; + }; + World2.prototype.on = function(name, listener) { + if (typeof name !== "string" || typeof listener !== "function") { + return this; + } + if (!this._listeners) { + this._listeners = {}; + } + if (!this._listeners[name]) { + this._listeners[name] = []; + } + this._listeners[name].push(listener); + return this; + }; + World2.prototype.off = function(name, listener) { + if (typeof name !== "string" || typeof listener !== "function") { + return this; + } + var listeners = this._listeners && this._listeners[name]; + if (!listeners || !listeners.length) { + return this; + } + var index = listeners.indexOf(listener); + if (index >= 0) { + listeners.splice(index, 1); + } + return this; + }; + World2.prototype.publish = function(name, arg1, arg2, arg3) { + var listeners = this._listeners && this._listeners[name]; + if (!listeners || !listeners.length) { + return 0; + } + for (var l = 0; l < listeners.length; l++) { + listeners[l].call(this, arg1, arg2, arg3); + } + return listeners.length; + }; + World2.prototype.beginContact = function(contact) { + this.publish("begin-contact", contact); + }; + World2.prototype.endContact = function(contact) { + this.publish("end-contact", contact); + }; + World2.prototype.preSolve = function(contact, oldManifold2) { + this.publish("pre-solve", contact, oldManifold2); + }; + World2.prototype.postSolve = function(contact, impulse) { + this.publish("post-solve", contact, impulse); + }; + return World2; + }() + ); + var Vec3 = ( + /** @class */ + function() { + function Vec32(x2, y, z) { + if (!(this instanceof Vec32)) { + return new Vec32(x2, y, z); + } + if (typeof x2 === "undefined") { + this.x = 0; + this.y = 0; + this.z = 0; + } else if (typeof x2 === "object") { + this.x = x2.x; + this.y = x2.y; + this.z = x2.z; + } else { + this.x = x2; + this.y = y; + this.z = z; + } + } + Vec32.prototype._serialize = function() { + return { + x: this.x, + y: this.y, + z: this.z + }; + }; + Vec32._deserialize = function(data) { + var obj = Object.create(Vec32.prototype); + obj.x = data.x; + obj.y = data.y; + obj.z = data.z; + return obj; + }; + Vec32.neo = function(x2, y, z) { + var obj = Object.create(Vec32.prototype); + obj.x = x2; + obj.y = y; + obj.z = z; + return obj; + }; + Vec32.zero = function() { + var obj = Object.create(Vec32.prototype); + obj.x = 0; + obj.y = 0; + obj.z = 0; + return obj; + }; + Vec32.clone = function(v3) { + return Vec32.neo(v3.x, v3.y, v3.z); + }; + Vec32.prototype.toString = function() { + return JSON.stringify(this); + }; + Vec32.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Number.isFinite(obj.x) && Number.isFinite(obj.y) && Number.isFinite(obj.z); + }; + Vec32.assert = function(o) { + }; + Vec32.prototype.setZero = function() { + this.x = 0; + this.y = 0; + this.z = 0; + return this; + }; + Vec32.prototype.set = function(x2, y, z) { + this.x = x2; + this.y = y; + this.z = z; + return this; + }; + Vec32.prototype.add = function(w) { + this.x += w.x; + this.y += w.y; + this.z += w.z; + return this; + }; + Vec32.prototype.sub = function(w) { + this.x -= w.x; + this.y -= w.y; + this.z -= w.z; + return this; + }; + Vec32.prototype.mul = function(m) { + this.x *= m; + this.y *= m; + this.z *= m; + return this; + }; + Vec32.areEqual = function(v3, w) { + 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; + }; + Vec32.dot = function(v3, w) { + return v3.x * w.x + v3.y * w.y + v3.z * w.z; + }; + Vec32.cross = function(v3, w) { + 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); + }; + Vec32.add = function(v3, w) { + return new Vec32(v3.x + w.x, v3.y + w.y, v3.z + w.z); + }; + Vec32.sub = function(v3, w) { + return new Vec32(v3.x - w.x, v3.y - w.y, v3.z - w.z); + }; + Vec32.mul = function(v3, m) { + return new Vec32(m * v3.x, m * v3.y, m * v3.z); + }; + Vec32.prototype.neg = function() { + this.x = -this.x; + this.y = -this.y; + this.z = -this.z; + return this; + }; + Vec32.neg = function(v3) { + return new Vec32(-v3.x, -v3.y, -v3.z); + }; + return Vec32; + }() + ); + var v1$2 = vec2(0, 0); + var v2$1 = vec2(0, 0); + var EdgeShape = ( + /** @class */ + function(_super) { + __extends(EdgeShape2, _super); + function EdgeShape2(v122, v22) { + var _this = this; + if (!(_this instanceof EdgeShape2)) { + return new EdgeShape2(v122, v22); + } + _this = _super.call(this) || this; + _this.m_type = EdgeShape2.TYPE; + _this.m_radius = SettingsInternal.polygonRadius; + _this.m_vertex1 = v122 ? Vec2.clone(v122) : Vec2.zero(); + _this.m_vertex2 = v22 ? Vec2.clone(v22) : Vec2.zero(); + _this.m_vertex0 = Vec2.zero(); + _this.m_vertex3 = Vec2.zero(); + _this.m_hasVertex0 = false; + _this.m_hasVertex3 = false; + return _this; + } + EdgeShape2.prototype._serialize = function() { + return { + type: this.m_type, + vertex1: this.m_vertex1, + vertex2: this.m_vertex2, + vertex0: this.m_vertex0, + vertex3: this.m_vertex3, + hasVertex0: this.m_hasVertex0, + hasVertex3: this.m_hasVertex3 + }; + }; + EdgeShape2._deserialize = function(data) { + var shape = new EdgeShape2(data.vertex1, data.vertex2); + if (shape.m_hasVertex0) { + shape.setPrevVertex(data.vertex0); + } + if (shape.m_hasVertex3) { + shape.setNextVertex(data.vertex3); + } + return shape; + }; + EdgeShape2.prototype._reset = function() { + }; + EdgeShape2.prototype.getRadius = function() { + return this.m_radius; + }; + EdgeShape2.prototype.getType = function() { + return this.m_type; + }; + EdgeShape2.prototype.setNext = function(v3) { + return this.setNextVertex(v3); + }; + EdgeShape2.prototype.setNextVertex = function(v3) { + if (v3) { + this.m_vertex3.setVec2(v3); + this.m_hasVertex3 = true; + } else { + this.m_vertex3.setZero(); + this.m_hasVertex3 = false; + } + return this; + }; + EdgeShape2.prototype.getNextVertex = function() { + return this.m_vertex3; + }; + EdgeShape2.prototype.setPrev = function(v3) { + return this.setPrevVertex(v3); + }; + EdgeShape2.prototype.setPrevVertex = function(v3) { + if (v3) { + this.m_vertex0.setVec2(v3); + this.m_hasVertex0 = true; + } else { + this.m_vertex0.setZero(); + this.m_hasVertex0 = false; + } + return this; + }; + EdgeShape2.prototype.getPrevVertex = function() { + return this.m_vertex0; + }; + EdgeShape2.prototype._set = function(v122, v22) { + this.m_vertex1.setVec2(v122); + this.m_vertex2.setVec2(v22); + this.m_hasVertex0 = false; + this.m_hasVertex3 = false; + return this; + }; + EdgeShape2.prototype._clone = function() { + var clone = new EdgeShape2(); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_vertex1.setVec2(this.m_vertex1); + clone.m_vertex2.setVec2(this.m_vertex2); + clone.m_vertex0.setVec2(this.m_vertex0); + clone.m_vertex3.setVec2(this.m_vertex3); + clone.m_hasVertex0 = this.m_hasVertex0; + clone.m_hasVertex3 = this.m_hasVertex3; + return clone; + }; + EdgeShape2.prototype.getChildCount = function() { + return 1; + }; + EdgeShape2.prototype.testPoint = function(xf2, p) { + return false; + }; + EdgeShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var p1 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p1, xf2.p)); + var p2 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p2, xf2.p)); + var d2 = Vec2.sub(p2, p1); + var v122 = this.m_vertex1; + var v22 = this.m_vertex2; + var e3 = Vec2.sub(v22, v122); + var normal3 = Vec2.neo(e3.y, -e3.x); + normal3.normalize(); + var numerator = Vec2.dot(normal3, Vec2.sub(v122, p1)); + var denominator = Vec2.dot(normal3, d2); + if (denominator == 0) { + return false; + } + var t = numerator / denominator; + if (t < 0 || input2.maxFraction < t) { + return false; + } + var q = Vec2.add(p1, Vec2.mulNumVec2(t, d2)); + var r = Vec2.sub(v22, v122); + var rr = Vec2.dot(r, r); + if (rr == 0) { + return false; + } + var s2 = Vec2.dot(Vec2.sub(q, v122), r) / rr; + if (s2 < 0 || 1 < s2) { + return false; + } + output2.fraction = t; + if (numerator > 0) { + output2.normal = Rot.mulVec2(xf2.q, normal3).neg(); + } else { + output2.normal = Rot.mulVec2(xf2.q, normal3); } - if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) { - return; - } - // Use hysteresis for jitter reduction. - var k_relativeTol = 0.98; - var k_absoluteTol = 0.001; - var primaryAxis; - if (polygonAxis.type == EPAxisType.e_unknown) { - primaryAxis = edgeAxis; - } - else if (polygonAxis.separation > k_relativeTol * edgeAxis.separation + k_absoluteTol) { - primaryAxis = polygonAxis; - } - else { - primaryAxis = edgeAxis; + return true; + }; + EdgeShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + transformVec2(v1$2, xf2, this.m_vertex1); + transformVec2(v2$1, xf2, this.m_vertex2); + AABB.combinePoints(aabb, v1$2, v2$1); + AABB.extend(aabb, this.m_radius); + }; + EdgeShape2.prototype.computeMass = function(massData, density) { + massData.mass = 0; + combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2); + massData.I = 0; + }; + EdgeShape2.prototype.computeDistanceProxy = function(proxy) { + proxy.m_vertices[0] = this.m_vertex1; + proxy.m_vertices[1] = this.m_vertex2; + proxy.m_vertices.length = 2; + proxy.m_count = 2; + proxy.m_radius = this.m_radius; + }; + EdgeShape2.TYPE = "edge"; + return EdgeShape2; + }(Shape) + ); + var Edge = EdgeShape; + var v1$1 = vec2(0, 0); + var v2 = vec2(0, 0); + var ChainShape = ( + /** @class */ + function(_super) { + __extends(ChainShape2, _super); + function ChainShape2(vertices, loop) { + var _this = this; + if (!(_this instanceof ChainShape2)) { + return new ChainShape2(vertices, loop); + } + _this = _super.call(this) || this; + _this.m_type = ChainShape2.TYPE; + _this.m_radius = SettingsInternal.polygonRadius; + _this.m_vertices = []; + _this.m_count = 0; + _this.m_prevVertex = null; + _this.m_nextVertex = null; + _this.m_hasPrevVertex = false; + _this.m_hasNextVertex = false; + _this.m_isLoop = !!loop; + if (vertices && vertices.length) { + if (loop) { + _this._createLoop(vertices); + } else { + _this._createChain(vertices); + } + } + return _this; + } + ChainShape2.prototype._serialize = function() { + var data = { + type: this.m_type, + vertices: this.m_vertices, + isLoop: this.m_isLoop, + hasPrevVertex: this.m_hasPrevVertex, + hasNextVertex: this.m_hasNextVertex, + prevVertex: null, + nextVertex: null + }; + if (this.m_prevVertex) { + data.prevVertex = this.m_prevVertex; + } + if (this.m_nextVertex) { + data.nextVertex = this.m_nextVertex; + } + return data; + }; + ChainShape2._deserialize = function(data, fixture, restore) { + var vertices = []; + if (data.vertices) { + for (var i = 0; i < data.vertices.length; i++) { + vertices.push(restore(Vec2, data.vertices[i])); + } + } + var shape = new ChainShape2(vertices, data.isLoop); + if (data.prevVertex) { + shape.setPrevVertex(data.prevVertex); + } + if (data.nextVertex) { + shape.setNextVertex(data.nextVertex); + } + return shape; + }; + ChainShape2.prototype.getType = function() { + return this.m_type; + }; + ChainShape2.prototype.getRadius = function() { + return this.m_radius; + }; + ChainShape2.prototype._createLoop = function(vertices) { + if (vertices.length < 3) { + return; + } + for (var i = 1; i < vertices.length; ++i) { + vertices[i - 1]; + vertices[i]; + } + this.m_vertices = []; + this.m_count = vertices.length + 1; + for (var i = 0; i < vertices.length; ++i) { + this.m_vertices[i] = Vec2.clone(vertices[i]); + } + this.m_vertices[vertices.length] = Vec2.clone(vertices[0]); + this.m_prevVertex = this.m_vertices[this.m_count - 2]; + this.m_nextVertex = this.m_vertices[1]; + this.m_hasPrevVertex = true; + this.m_hasNextVertex = true; + return this; + }; + ChainShape2.prototype._createChain = function(vertices) { + for (var i = 1; i < vertices.length; ++i) { + vertices[i - 1]; + vertices[i]; + } + this.m_count = vertices.length; + for (var i = 0; i < vertices.length; ++i) { + this.m_vertices[i] = Vec2.clone(vertices[i]); + } + this.m_hasPrevVertex = false; + this.m_hasNextVertex = false; + this.m_prevVertex = null; + this.m_nextVertex = null; + return this; + }; + ChainShape2.prototype._reset = function() { + if (this.m_isLoop) { + this._createLoop(this.m_vertices); + } else { + this._createChain(this.m_vertices); + } + }; + ChainShape2.prototype.setPrevVertex = function(prevVertex) { + this.m_prevVertex = prevVertex; + this.m_hasPrevVertex = true; + }; + ChainShape2.prototype.getPrevVertex = function() { + return this.m_prevVertex; + }; + ChainShape2.prototype.setNextVertex = function(nextVertex) { + this.m_nextVertex = nextVertex; + this.m_hasNextVertex = true; + }; + ChainShape2.prototype.getNextVertex = function() { + return this.m_nextVertex; + }; + ChainShape2.prototype._clone = function() { + var clone = new ChainShape2(); + clone._createChain(this.m_vertices); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_prevVertex = this.m_prevVertex; + clone.m_nextVertex = this.m_nextVertex; + clone.m_hasPrevVertex = this.m_hasPrevVertex; + clone.m_hasNextVertex = this.m_hasNextVertex; + return clone; + }; + ChainShape2.prototype.getChildCount = function() { + return this.m_count - 1; + }; + ChainShape2.prototype.getChildEdge = function(edge, childIndex) { + edge.m_type = EdgeShape.TYPE; + edge.m_radius = this.m_radius; + edge.m_vertex1 = this.m_vertices[childIndex]; + edge.m_vertex2 = this.m_vertices[childIndex + 1]; + if (childIndex > 0) { + edge.m_vertex0 = this.m_vertices[childIndex - 1]; + edge.m_hasVertex0 = true; + } else { + edge.m_vertex0 = this.m_prevVertex; + edge.m_hasVertex0 = this.m_hasPrevVertex; + } + if (childIndex < this.m_count - 2) { + edge.m_vertex3 = this.m_vertices[childIndex + 2]; + edge.m_hasVertex3 = true; + } else { + edge.m_vertex3 = this.m_nextVertex; + edge.m_hasVertex3 = this.m_hasNextVertex; + } + }; + ChainShape2.prototype.getVertex = function(index) { + if (index < this.m_count) { + return this.m_vertices[index]; + } else { + return this.m_vertices[0]; + } + }; + ChainShape2.prototype.isLoop = function() { + return this.m_isLoop; + }; + ChainShape2.prototype.testPoint = function(xf2, p) { + return false; + }; + ChainShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1)); + return edgeShape.rayCast(output2, input2, xf2, 0); + }; + ChainShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + transformVec2(v1$1, xf2, this.getVertex(childIndex)); + transformVec2(v2, xf2, this.getVertex(childIndex + 1)); + AABB.combinePoints(aabb, v1$1, v2); + }; + ChainShape2.prototype.computeMass = function(massData, density) { + massData.mass = 0; + zeroVec2(massData.center); + massData.I = 0; + }; + ChainShape2.prototype.computeDistanceProxy = function(proxy, childIndex) { + proxy.m_vertices[0] = this.getVertex(childIndex); + proxy.m_vertices[1] = this.getVertex(childIndex + 1); + proxy.m_count = 2; + proxy.m_radius = this.m_radius; + }; + ChainShape2.TYPE = "chain"; + return ChainShape2; + }(Shape) + ); + var Chain = ChainShape; + var math_max$1 = Math.max; + var math_min$3 = Math.min; + var temp$1 = vec2(0, 0); + var e$1 = vec2(0, 0); + var e1$1 = vec2(0, 0); + var e2$1 = vec2(0, 0); + var center = vec2(0, 0); + var s = vec2(0, 0); + var PolygonShape = ( + /** @class */ + function(_super) { + __extends(PolygonShape2, _super); + function PolygonShape2(vertices) { + var _this = this; + if (!(_this instanceof PolygonShape2)) { + return new PolygonShape2(vertices); + } + _this = _super.call(this) || this; + _this.m_type = PolygonShape2.TYPE; + _this.m_radius = SettingsInternal.polygonRadius; + _this.m_centroid = Vec2.zero(); + _this.m_vertices = []; + _this.m_normals = []; + _this.m_count = 0; + if (vertices && vertices.length) { + _this._set(vertices); + } + return _this; + } + PolygonShape2.prototype._serialize = function() { + return { + type: this.m_type, + vertices: this.m_vertices + }; + }; + PolygonShape2._deserialize = function(data, fixture, restore) { + var vertices = []; + if (data.vertices) { + for (var i = 0; i < data.vertices.length; i++) { + vertices.push(restore(Vec2, data.vertices[i])); + } + } + var shape = new PolygonShape2(vertices); + return shape; + }; + PolygonShape2.prototype.getType = function() { + return this.m_type; + }; + PolygonShape2.prototype.getRadius = function() { + return this.m_radius; + }; + PolygonShape2.prototype._clone = function() { + var clone = new PolygonShape2(); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_count = this.m_count; + clone.m_centroid.setVec2(this.m_centroid); + for (var i = 0; i < this.m_count; i++) { + clone.m_vertices.push(this.m_vertices[i].clone()); + } + for (var i = 0; i < this.m_normals.length; i++) { + clone.m_normals.push(this.m_normals[i].clone()); + } + return clone; + }; + PolygonShape2.prototype.getChildCount = function() { + return 1; + }; + PolygonShape2.prototype._reset = function() { + this._set(this.m_vertices); + }; + PolygonShape2.prototype._set = function(vertices) { + if (vertices.length < 3) { + this._setAsBox(1, 1); + return; + } + var n2 = math_min$3(vertices.length, SettingsInternal.maxPolygonVertices); + var ps = []; + for (var i = 0; i < n2; ++i) { + var v3 = vertices[i]; + var unique = true; + for (var j = 0; j < ps.length; ++j) { + if (Vec2.distanceSquared(v3, ps[j]) < 0.25 * SettingsInternal.linearSlopSquared) { + unique = false; + break; + } + } + if (unique) { + ps.push(Vec2.clone(v3)); + } + } + n2 = ps.length; + if (n2 < 3) { + this._setAsBox(1, 1); + return; + } + var i0 = 0; + var x0 = ps[0].x; + for (var i = 1; i < n2; ++i) { + var x2 = ps[i].x; + if (x2 > x0 || x2 === x0 && ps[i].y < ps[i0].y) { + i0 = i; + x0 = x2; + } + } + var hull = []; + var m = 0; + var ih = i0; + while (true) { + hull[m] = ih; + var ie2 = 0; + for (var j = 1; j < n2; ++j) { + if (ie2 === ih) { + ie2 = j; + continue; + } + var r = Vec2.sub(ps[ie2], ps[hull[m]]); + var v3 = Vec2.sub(ps[j], ps[hull[m]]); + var c2 = Vec2.crossVec2Vec2(r, v3); + if (c2 < 0) { + ie2 = j; + } + if (c2 === 0 && v3.lengthSquared() > r.lengthSquared()) { + ie2 = j; + } + } + ++m; + ih = ie2; + if (ie2 === i0) { + break; + } + } + if (m < 3) { + this._setAsBox(1, 1); + return; + } + this.m_count = m; + this.m_vertices = []; + for (var i = 0; i < m; ++i) { + this.m_vertices[i] = ps[hull[i]]; + } + for (var i = 0; i < m; ++i) { + var i1 = i; + var i2 = i + 1 < m ? i + 1 : 0; + var edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]); + this.m_normals[i] = Vec2.crossVec2Num(edge, 1); + this.m_normals[i].normalize(); + } + this.m_centroid = computeCentroid(this.m_vertices, m); + }; + PolygonShape2.prototype._setAsBox = function(hx, hy, center2, angle) { + this.m_vertices[0] = Vec2.neo(hx, -hy); + this.m_vertices[1] = Vec2.neo(hx, hy); + this.m_vertices[2] = Vec2.neo(-hx, hy); + this.m_vertices[3] = Vec2.neo(-hx, -hy); + this.m_normals[0] = Vec2.neo(1, 0); + this.m_normals[1] = Vec2.neo(0, 1); + this.m_normals[2] = Vec2.neo(-1, 0); + this.m_normals[3] = Vec2.neo(0, -1); + this.m_count = 4; + if (center2 && Vec2.isValid(center2)) { + angle = angle || 0; + copyVec2(this.m_centroid, center2); + var xf2 = Transform.identity(); + xf2.p.setVec2(center2); + xf2.q.setAngle(angle); + for (var i = 0; i < this.m_count; ++i) { + this.m_vertices[i] = Transform.mulVec2(xf2, this.m_vertices[i]); + this.m_normals[i] = Rot.mulVec2(xf2.q, this.m_normals[i]); + } + } + }; + PolygonShape2.prototype.testPoint = function(xf2, p) { + var pLocal = detransformVec2(temp$1, xf2, p); + for (var i = 0; i < this.m_count; ++i) { + var dot = dotVec2(this.m_normals[i], pLocal) - dotVec2(this.m_normals[i], this.m_vertices[i]); + if (dot > 0) { + return false; + } } - ie[0].recycle(), ie[1].recycle(); - if (primaryAxis.type == EPAxisType.e_edgeA) { - manifold.type = exports.ManifoldType.e_faceA; - // Search for the polygon normal that is most anti-parallel to the edge - // normal. - var bestIndex = 0; - var bestValue = dotVec2(normal, polygonBA.normals[0]); - for (var i = 1; i < polygonBA.count; ++i) { - var value = dotVec2(normal, polygonBA.normals[i]); - if (value < bestValue) { - bestValue = value; - bestIndex = i; - } - } - var i1 = bestIndex; - var i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0; - copyVec2(ie[0].v, polygonBA.vertices[i1]); - ie[0].id.setFeatures(0, exports.ContactFeatureType.e_face, i1, exports.ContactFeatureType.e_vertex); - copyVec2(ie[1].v, polygonBA.vertices[i2]); - ie[1].id.setFeatures(0, exports.ContactFeatureType.e_face, i2, exports.ContactFeatureType.e_vertex); - if (front) { - rf.i1 = 0; - rf.i2 = 1; - copyVec2(rf.v1, v1); - copyVec2(rf.v2, v2); - copyVec2(rf.normal, normal1); - } - else { - rf.i1 = 1; - rf.i2 = 0; - copyVec2(rf.v1, v2); - copyVec2(rf.v2, v1); - scaleVec2(rf.normal, -1, normal1); - } + return true; + }; + PolygonShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var p1 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p1, xf2.p)); + var p2 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p2, xf2.p)); + var d2 = Vec2.sub(p2, p1); + var lower = 0; + var upper = input2.maxFraction; + var index = -1; + for (var i = 0; i < this.m_count; ++i) { + var numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1)); + var denominator = Vec2.dot(this.m_normals[i], d2); + if (denominator == 0) { + if (numerator < 0) { + return false; + } + } else { + if (denominator < 0 && numerator < lower * denominator) { + lower = numerator / denominator; + index = i; + } else if (denominator > 0 && numerator < upper * denominator) { + upper = numerator / denominator; + } + } + if (upper < lower) { + return false; + } + } + if (index >= 0) { + output2.fraction = lower; + output2.normal = Rot.mulVec2(xf2.q, this.m_normals[index]); + return true; + } + return false; + }; + PolygonShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + var minX = Infinity; + var minY = Infinity; + var maxX = -Infinity; + var maxY = -Infinity; + for (var i = 0; i < this.m_count; ++i) { + var v3 = transformVec2(temp$1, xf2, this.m_vertices[i]); + minX = math_min$3(minX, v3.x); + maxX = math_max$1(maxX, v3.x); + minY = math_min$3(minY, v3.y); + maxY = math_max$1(maxY, v3.y); + } + setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius); + setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius); + }; + PolygonShape2.prototype.computeMass = function(massData, density) { + zeroVec2(center); + var area = 0; + var I = 0; + zeroVec2(s); + for (var i = 0; i < this.m_count; ++i) { + plusVec2(s, this.m_vertices[i]); + } + scaleVec2(s, 1 / this.m_count, s); + var k_inv3 = 1 / 3; + for (var i = 0; i < this.m_count; ++i) { + subVec2(e1$1, this.m_vertices[i], s); + if (i + 1 < this.m_count) { + subVec2(e2$1, this.m_vertices[i + 1], s); + } else { + subVec2(e2$1, this.m_vertices[0], s); + } + var D = crossVec2Vec2(e1$1, e2$1); + var triangleArea = 0.5 * D; + area += triangleArea; + combine2Vec2(temp$1, triangleArea * k_inv3, e1$1, triangleArea * k_inv3, e2$1); + plusVec2(center, temp$1); + var ex1 = e1$1.x; + var ey1 = e1$1.y; + var ex2 = e2$1.x; + var ey2 = e2$1.y; + var intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2; + var inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2; + I += 0.25 * k_inv3 * D * (intx2 + inty2); + } + massData.mass = density * area; + scaleVec2(center, 1 / area, center); + addVec2(massData.center, center, s); + massData.I = density * I; + massData.I += massData.mass * (dotVec2(massData.center, massData.center) - dotVec2(center, center)); + }; + PolygonShape2.prototype.validate = function() { + for (var i = 0; i < this.m_count; ++i) { + var i1 = i; + var i2 = i < this.m_count - 1 ? i1 + 1 : 0; + var p = this.m_vertices[i1]; + subVec2(e$1, this.m_vertices[i2], p); + for (var j = 0; j < this.m_count; ++j) { + if (j == i1 || j == i2) { + continue; + } + var c2 = crossVec2Vec2(e$1, subVec2(temp$1, this.m_vertices[j], p)); + if (c2 < 0) { + return false; + } + } } - else { - manifold.type = exports.ManifoldType.e_faceB; - copyVec2(ie[0].v, v1); - ie[0].id.setFeatures(0, exports.ContactFeatureType.e_vertex, primaryAxis.index, exports.ContactFeatureType.e_face); - copyVec2(ie[1].v, v2); - ie[1].id.setFeatures(0, exports.ContactFeatureType.e_vertex, primaryAxis.index, exports.ContactFeatureType.e_face); - rf.i1 = primaryAxis.index; - rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0; - copyVec2(rf.v1, polygonBA.vertices[rf.i1]); - copyVec2(rf.v2, polygonBA.vertices[rf.i2]); - copyVec2(rf.normal, polygonBA.normals[rf.i1]); - } - setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x); - setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y); - rf.sideOffset1 = dotVec2(rf.sideNormal1, rf.v1); - rf.sideOffset2 = dotVec2(rf.sideNormal2, rf.v2); - // Clip incident edge against extruded edge1 side edges. - clipPoints1[0].recycle(), clipPoints1[1].recycle(); - clipPoints2[0].recycle(), clipPoints2[1].recycle(); - // Clip to box side 1 - var np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1); - if (np1 < SettingsInternal.maxManifoldPoints) { - return; - } - // Clip to negative box side 1 - var np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2); - if (np2 < SettingsInternal.maxManifoldPoints) { - return; - } - // Now clipPoints2 contains the clipped points. + return true; + }; + PolygonShape2.prototype.computeDistanceProxy = function(proxy) { + for (var i = 0; i < this.m_count; ++i) { + proxy.m_vertices[i] = this.m_vertices[i]; + } + proxy.m_vertices.length = this.m_count; + proxy.m_count = this.m_count; + proxy.m_radius = this.m_radius; + }; + PolygonShape2.TYPE = "polygon"; + return PolygonShape2; + }(Shape) + ); + function computeCentroid(vs, count) { + var c2 = Vec2.zero(); + var area = 0; + var pRef = Vec2.zero(); + var i; + var inv3 = 1 / 3; + for (var i = 0; i < count; ++i) { + var p1 = pRef; + var p2 = vs[i]; + var p3 = i + 1 < count ? vs[i + 1] : vs[0]; + var e1_1 = Vec2.sub(p2, p1); + var e2_1 = Vec2.sub(p3, p1); + var D = Vec2.crossVec2Vec2(e1_1, e2_1); + var triangleArea = 0.5 * D; + area += triangleArea; + combine3Vec2(temp$1, 1, p1, 1, p2, 1, p3); + plusScaleVec2(c2, triangleArea * inv3, temp$1); + } + c2.mul(1 / area); + return c2; + } + var Polygon = PolygonShape; + var math_sqrt = Math.sqrt; + var math_PI$4 = Math.PI; + var temp = vec2(0, 0); + var CircleShape = ( + /** @class */ + function(_super) { + __extends(CircleShape2, _super); + function CircleShape2(a2, b2) { + var _this = this; + if (!(_this instanceof CircleShape2)) { + return new CircleShape2(a2, b2); + } + _this = _super.call(this) || this; + _this.m_type = CircleShape2.TYPE; + _this.m_p = Vec2.zero(); + _this.m_radius = 1; + if (typeof a2 === "object" && Vec2.isValid(a2)) { + _this.m_p.setVec2(a2); + if (typeof b2 === "number") { + _this.m_radius = b2; + } + } else if (typeof a2 === "number") { + _this.m_radius = a2; + } + return _this; + } + CircleShape2.prototype._serialize = function() { + return { + type: this.m_type, + p: this.m_p, + radius: this.m_radius + }; + }; + CircleShape2._deserialize = function(data) { + return new CircleShape2(data.p, data.radius); + }; + CircleShape2.prototype._reset = function() { + }; + CircleShape2.prototype.getType = function() { + return this.m_type; + }; + CircleShape2.prototype.getRadius = function() { + return this.m_radius; + }; + CircleShape2.prototype.getCenter = function() { + return this.m_p; + }; + CircleShape2.prototype._clone = function() { + var clone = new CircleShape2(); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_p = this.m_p.clone(); + return clone; + }; + CircleShape2.prototype.getChildCount = function() { + return 1; + }; + CircleShape2.prototype.testPoint = function(xf2, p) { + var center2 = transformVec2(temp, xf2, this.m_p); + return distSqrVec2(p, center2) <= this.m_radius * this.m_radius; + }; + CircleShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var position = Vec2.add(xf2.p, Rot.mulVec2(xf2.q, this.m_p)); + var s2 = Vec2.sub(input2.p1, position); + var b2 = Vec2.dot(s2, s2) - this.m_radius * this.m_radius; + var r = Vec2.sub(input2.p2, input2.p1); + var c2 = Vec2.dot(s2, r); + var rr = Vec2.dot(r, r); + var sigma = c2 * c2 - rr * b2; + if (sigma < 0 || rr < EPSILON) { + return false; + } + var a2 = -(c2 + math_sqrt(sigma)); + if (0 <= a2 && a2 <= input2.maxFraction * rr) { + a2 /= rr; + output2.fraction = a2; + output2.normal = Vec2.add(s2, Vec2.mulNumVec2(a2, r)); + output2.normal.normalize(); + return true; + } + return false; + }; + CircleShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + var p = transformVec2(temp, xf2, this.m_p); + setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius); + setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius); + }; + CircleShape2.prototype.computeMass = function(massData, density) { + massData.mass = density * math_PI$4 * this.m_radius * this.m_radius; + copyVec2(massData.center, this.m_p); + massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + lengthSqrVec2(this.m_p)); + }; + CircleShape2.prototype.computeDistanceProxy = function(proxy) { + proxy.m_vertices[0] = this.m_p; + proxy.m_vertices.length = 1; + proxy.m_count = 1; + proxy.m_radius = this.m_radius; + }; + CircleShape2.TYPE = "circle"; + return CircleShape2; + }(Shape) + ); + var Circle = CircleShape; + var math_abs$5 = Math.abs; + var math_PI$3 = Math.PI; + var DEFAULTS$a = { + frequencyHz: 0, + dampingRatio: 0 + }; + var DistanceJoint = ( + /** @class */ + function(_super) { + __extends(DistanceJoint2, _super); + function DistanceJoint2(def, bodyA, bodyB, anchorA, anchorB) { + var _this = this; + if (!(_this instanceof DistanceJoint2)) { + return new DistanceJoint2(def, bodyA, bodyB, anchorA, anchorB); + } + if (bodyB && anchorA && "m_type" in anchorA && "x" in bodyB && "y" in bodyB) { + var temp3 = bodyB; + bodyB = anchorA; + anchorA = temp3; + } + def = options(def, DEFAULTS$a); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = DistanceJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.zero()); + _this.m_length = Number.isFinite(def.length) ? def.length : Vec2.distance(bodyA.getWorldPoint(_this.m_localAnchorA), bodyB.getWorldPoint(_this.m_localAnchorB)); + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_impulse = 0; + _this.m_gamma = 0; + _this.m_bias = 0; + return _this; + } + DistanceJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + length: this.m_length, + impulse: this.m_impulse, + gamma: this.m_gamma, + bias: this.m_bias + }; + }; + DistanceJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new DistanceJoint2(data); + return joint; + }; + DistanceJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (def.length > 0) { + this.m_length = +def.length; + } else if (def.length < 0) ; + else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) { + this.m_length = Vec2.distance(this.m_bodyA.getWorldPoint(this.m_localAnchorA), this.m_bodyB.getWorldPoint(this.m_localAnchorB)); + } + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; + } + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; + } + }; + DistanceJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + DistanceJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + DistanceJoint2.prototype.setLength = function(length) { + this.m_length = length; + }; + DistanceJoint2.prototype.getLength = function() { + return this.m_length; + }; + DistanceJoint2.prototype.setFrequency = function(hz) { + this.m_frequencyHz = hz; + }; + DistanceJoint2.prototype.getFrequency = function() { + return this.m_frequencyHz; + }; + DistanceJoint2.prototype.setDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + DistanceJoint2.prototype.getDampingRatio = function() { + return this.m_dampingRatio; + }; + DistanceJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + DistanceJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + DistanceJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); + }; + DistanceJoint2.prototype.getReactionTorque = function(inv_dt) { + return 0; + }; + DistanceJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + this.m_u = Vec2.sub(Vec2.add(cB2, this.m_rB), Vec2.add(cA2, this.m_rA)); + var length = this.m_u.length(); + if (length > SettingsInternal.linearSlop) { + this.m_u.mul(1 / length); + } else { + this.m_u.setNum(0, 0); + } + var crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u); + var crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u); + var invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu; + this.m_mass = invMass != 0 ? 1 / invMass : 0; + if (this.m_frequencyHz > 0) { + var C = length - this.m_length; + var omega = 2 * math_PI$3 * this.m_frequencyHz; + var d2 = 2 * this.m_mass * this.m_dampingRatio * omega; + var k = this.m_mass * omega * omega; + var h = step.dt; + this.m_gamma = h * (d2 + h * k); + this.m_gamma = this.m_gamma != 0 ? 1 / this.m_gamma : 0; + this.m_bias = C * h * k * this.m_gamma; + invMass += this.m_gamma; + this.m_mass = invMass != 0 ? 1 / invMass : 0; + } else { + this.m_gamma = 0; + this.m_bias = 0; + } + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + var P3 = Vec2.mulNumVec2(this.m_impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + DistanceJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vpA = Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA)); + var vpB = Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB)); + var Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA); + var impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse); + this.m_impulse += impulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + DistanceJoint2.prototype.solvePositionConstraints = function(step) { + if (this.m_frequencyHz > 0) { + return true; + } + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); + var u = Vec2.sub(Vec2.add(cB2, rB2), Vec2.add(cA2, rA2)); + var length = u.normalize(); + var C = clamp(length - this.m_length, -SettingsInternal.maxLinearCorrection, SettingsInternal.maxLinearCorrection); + var impulse = -this.m_mass * C; + var P3 = Vec2.mulNumVec2(impulse, u); + cA2.subMul(this.m_invMassA, P3); + aA -= this.m_invIA * Vec2.crossVec2Vec2(rA2, P3); + cB2.addMul(this.m_invMassB, P3); + aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, P3); + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return math_abs$5(C) < SettingsInternal.linearSlop; + }; + DistanceJoint2.TYPE = "distance-joint"; + return DistanceJoint2; + }(Joint) + ); + var DEFAULTS$9 = { + maxForce: 0, + maxTorque: 0 + }; + var FrictionJoint = ( + /** @class */ + function(_super) { + __extends(FrictionJoint2, _super); + function FrictionJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + if (!(_this instanceof FrictionJoint2)) { + return new FrictionJoint2(def, bodyA, bodyB, anchor); + } + def = options(def, DEFAULTS$9); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = FrictionJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + _this.m_linearImpulse = Vec2.zero(); + _this.m_angularImpulse = 0; + _this.m_maxForce = def.maxForce; + _this.m_maxTorque = def.maxTorque; + return _this; + } + FrictionJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + maxForce: this.m_maxForce, + maxTorque: this.m_maxTorque, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB + }; + }; + FrictionJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new FrictionJoint2(data); + return joint; + }; + FrictionJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (Number.isFinite(def.maxForce)) { + this.m_maxForce = def.maxForce; + } + if (Number.isFinite(def.maxTorque)) { + this.m_maxTorque = def.maxTorque; + } + }; + FrictionJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + FrictionJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + FrictionJoint2.prototype.setMaxForce = function(force) { + this.m_maxForce = force; + }; + FrictionJoint2.prototype.getMaxForce = function() { + return this.m_maxForce; + }; + FrictionJoint2.prototype.setMaxTorque = function(torque) { + this.m_maxTorque = torque; + }; + FrictionJoint2.prototype.getMaxTorque = function() { + return this.m_maxTorque; + }; + FrictionJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + FrictionJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + FrictionJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); + }; + FrictionJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_angularImpulse; + }; + FrictionJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var K = new Mat22(); + K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y; + K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x; + this.m_linearMass = K.getInverse(); + this.m_angularMass = iA + iB; + if (this.m_angularMass > 0) { + this.m_angularMass = 1 / this.m_angularMass; + } + if (step.warmStarting) { + this.m_linearImpulse.mul(step.dtRatio); + this.m_angularImpulse *= step.dtRatio; + var P3 = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_angularImpulse); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_angularImpulse); + } else { + this.m_linearImpulse.setZero(); + this.m_angularImpulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + FrictionJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var h = step.dt; + { + var Cdot = wB - wA; + var impulse = -this.m_angularMass * Cdot; + var oldImpulse = this.m_angularImpulse; + var maxImpulse = h * this.m_maxTorque; + this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_angularImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + { + var Cdot = Vec2.sub(Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB)), Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA))); + var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); + var oldImpulse = this.m_linearImpulse; + this.m_linearImpulse.add(impulse); + var maxImpulse = h * this.m_maxForce; + if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) { + this.m_linearImpulse.normalize(); + this.m_linearImpulse.mul(maxImpulse); + } + impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); + vA2.subMul(mA, impulse); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); + vB2.addMul(mB, impulse); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + FrictionJoint2.prototype.solvePositionConstraints = function(step) { + return true; + }; + FrictionJoint2.TYPE = "friction-joint"; + return FrictionJoint2; + }(Joint) + ); + var Mat33 = ( + /** @class */ + function() { + function Mat332(a2, b2, c2) { + if (typeof a2 === "object" && a2 !== null) { + this.ex = Vec3.clone(a2); + this.ey = Vec3.clone(b2); + this.ez = Vec3.clone(c2); + } else { + this.ex = Vec3.zero(); + this.ey = Vec3.zero(); + this.ez = Vec3.zero(); + } + } + Mat332.prototype.toString = function() { + return JSON.stringify(this); + }; + Mat332.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec3.isValid(obj.ex) && Vec3.isValid(obj.ey) && Vec3.isValid(obj.ez); + }; + Mat332.assert = function(o) { + }; + Mat332.prototype.setZero = function() { + this.ex.setZero(); + this.ey.setZero(); + this.ez.setZero(); + return this; + }; + Mat332.prototype.solve33 = function(v3) { + var cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; + var cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; + var cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; + var det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z; + if (det !== 0) { + det = 1 / det; + } + var r = new Vec3(); + cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; + cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; + cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; + r.x = det * (v3.x * cross_x + v3.y * cross_y + v3.z * cross_z); + cross_x = v3.y * this.ez.z - v3.z * this.ez.y; + cross_y = v3.z * this.ez.x - v3.x * this.ez.z; + cross_z = v3.x * this.ez.y - v3.y * this.ez.x; + r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); + cross_x = this.ey.y * v3.z - this.ey.z * v3.y; + cross_y = this.ey.z * v3.x - this.ey.x * v3.z; + cross_z = this.ey.x * v3.y - this.ey.y * v3.x; + r.z = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); + return r; + }; + Mat332.prototype.solve22 = function(v3) { + var a11 = this.ex.x; + var a12 = this.ey.x; + var a21 = this.ex.y; + var a22 = this.ey.y; + var det = a11 * a22 - a12 * a21; + if (det !== 0) { + det = 1 / det; + } + var r = Vec2.zero(); + r.x = det * (a22 * v3.x - a12 * v3.y); + r.y = det * (a11 * v3.y - a21 * v3.x); + return r; + }; + Mat332.prototype.getInverse22 = function(M) { + var a2 = this.ex.x; + var b2 = this.ey.x; + var c2 = this.ex.y; + var d2 = this.ey.y; + var det = a2 * d2 - b2 * c2; + if (det !== 0) { + det = 1 / det; + } + M.ex.x = det * d2; + M.ey.x = -det * b2; + M.ex.z = 0; + M.ex.y = -det * c2; + M.ey.y = det * a2; + M.ey.z = 0; + M.ez.x = 0; + M.ez.y = 0; + M.ez.z = 0; + }; + Mat332.prototype.getSymInverse33 = function(M) { + var det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez)); + if (det !== 0) { + det = 1 / det; + } + var a11 = this.ex.x; + var a12 = this.ey.x; + var a13 = this.ez.x; + var a22 = this.ey.y; + var a23 = this.ez.y; + var a33 = this.ez.z; + M.ex.x = det * (a22 * a33 - a23 * a23); + M.ex.y = det * (a13 * a23 - a12 * a33); + M.ex.z = det * (a12 * a23 - a13 * a22); + M.ey.x = M.ex.y; + M.ey.y = det * (a11 * a33 - a13 * a13); + M.ey.z = det * (a13 * a12 - a11 * a23); + M.ez.x = M.ex.z; + M.ez.y = M.ey.z; + M.ez.z = det * (a11 * a22 - a12 * a12); + }; + Mat332.mul = function(a2, b2) { + if (b2 && "z" in b2 && "y" in b2 && "x" in b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y + a2.ez.x * b2.z; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y + a2.ez.y * b2.z; + var z = a2.ex.z * b2.x + a2.ey.z * b2.y + a2.ez.z * b2.z; + return new Vec3(x2, y, z); + } else if (b2 && "y" in b2 && "x" in b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y; + return Vec2.neo(x2, y); + } + }; + Mat332.mulVec3 = function(a2, b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y + a2.ez.x * b2.z; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y + a2.ez.y * b2.z; + var z = a2.ex.z * b2.x + a2.ey.z * b2.y + a2.ez.z * b2.z; + return new Vec3(x2, y, z); + }; + Mat332.mulVec2 = function(a2, b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y; + return Vec2.neo(x2, y); + }; + Mat332.add = function(a2, b2) { + return new Mat332(Vec3.add(a2.ex, b2.ex), Vec3.add(a2.ey, b2.ey), Vec3.add(a2.ez, b2.ez)); + }; + return Mat332; + }() + ); + var math_abs$4 = Math.abs; + var LimitState$2; + (function(LimitState2) { + LimitState2[LimitState2["inactiveLimit"] = 0] = "inactiveLimit"; + LimitState2[LimitState2["atLowerLimit"] = 1] = "atLowerLimit"; + LimitState2[LimitState2["atUpperLimit"] = 2] = "atUpperLimit"; + LimitState2[LimitState2["equalLimits"] = 3] = "equalLimits"; + })(LimitState$2 || (LimitState$2 = {})); + var DEFAULTS$8 = { + lowerAngle: 0, + upperAngle: 0, + maxMotorTorque: 0, + motorSpeed: 0, + enableLimit: false, + enableMotor: false + }; + var RevoluteJoint = ( + /** @class */ + function(_super) { + __extends(RevoluteJoint2, _super); + function RevoluteJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + var _a2, _b, _c, _d, _e, _f; + if (!(_this instanceof RevoluteJoint2)) { + return new RevoluteJoint2(def, bodyA, bodyB, anchor); + } + def = def !== null && def !== void 0 ? def : {}; + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_mass = new Mat33(); + _this.m_limitState = LimitState$2.inactiveLimit; + _this.m_type = RevoluteJoint2.TYPE; + if (Vec2.isValid(anchor)) { + _this.m_localAnchorA = bodyA.getLocalPoint(anchor); + } else if (Vec2.isValid(def.localAnchorA)) { + _this.m_localAnchorA = Vec2.clone(def.localAnchorA); + } else { + _this.m_localAnchorA = Vec2.zero(); + } + if (Vec2.isValid(anchor)) { + _this.m_localAnchorB = bodyB.getLocalPoint(anchor); + } else if (Vec2.isValid(def.localAnchorB)) { + _this.m_localAnchorB = Vec2.clone(def.localAnchorB); + } else { + _this.m_localAnchorB = Vec2.zero(); + } + if (Number.isFinite(def.referenceAngle)) { + _this.m_referenceAngle = def.referenceAngle; + } else { + _this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle(); + } + _this.m_impulse = new Vec3(); + _this.m_motorImpulse = 0; + _this.m_lowerAngle = (_a2 = def.lowerAngle) !== null && _a2 !== void 0 ? _a2 : DEFAULTS$8.lowerAngle; + _this.m_upperAngle = (_b = def.upperAngle) !== null && _b !== void 0 ? _b : DEFAULTS$8.upperAngle; + _this.m_maxMotorTorque = (_c = def.maxMotorTorque) !== null && _c !== void 0 ? _c : DEFAULTS$8.maxMotorTorque; + _this.m_motorSpeed = (_d = def.motorSpeed) !== null && _d !== void 0 ? _d : DEFAULTS$8.motorSpeed; + _this.m_enableLimit = (_e = def.enableLimit) !== null && _e !== void 0 ? _e : DEFAULTS$8.enableLimit; + _this.m_enableMotor = (_f = def.enableMotor) !== null && _f !== void 0 ? _f : DEFAULTS$8.enableMotor; + return _this; + } + RevoluteJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + lowerAngle: this.m_lowerAngle, + upperAngle: this.m_upperAngle, + maxMotorTorque: this.m_maxMotorTorque, + motorSpeed: this.m_motorSpeed, + enableLimit: this.m_enableLimit, + enableMotor: this.m_enableMotor, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + referenceAngle: this.m_referenceAngle + }; + }; + RevoluteJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new RevoluteJoint2(data); + return joint; + }; + RevoluteJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (Number.isFinite(def.referenceAngle)) { + this.m_referenceAngle = def.referenceAngle; + } + if (def.enableLimit !== void 0) { + this.m_enableLimit = def.enableLimit; + } + if (Number.isFinite(def.lowerAngle)) { + this.m_lowerAngle = def.lowerAngle; + } + if (Number.isFinite(def.upperAngle)) { + this.m_upperAngle = def.upperAngle; + } + if (Number.isFinite(def.maxMotorTorque)) { + this.m_maxMotorTorque = def.maxMotorTorque; + } + if (Number.isFinite(def.motorSpeed)) { + this.m_motorSpeed = def.motorSpeed; + } + if (def.enableMotor !== void 0) { + this.m_enableMotor = def.enableMotor; + } + }; + RevoluteJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + RevoluteJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + RevoluteJoint2.prototype.getReferenceAngle = function() { + return this.m_referenceAngle; + }; + RevoluteJoint2.prototype.getJointAngle = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle; + }; + RevoluteJoint2.prototype.getJointSpeed = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + return bB.m_angularVelocity - bA.m_angularVelocity; + }; + RevoluteJoint2.prototype.isMotorEnabled = function() { + return this.m_enableMotor; + }; + RevoluteJoint2.prototype.enableMotor = function(flag) { + if (flag == this.m_enableMotor) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableMotor = flag; + }; + RevoluteJoint2.prototype.getMotorTorque = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + RevoluteJoint2.prototype.setMotorSpeed = function(speed) { + if (speed == this.m_motorSpeed) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_motorSpeed = speed; + }; + RevoluteJoint2.prototype.getMotorSpeed = function() { + return this.m_motorSpeed; + }; + RevoluteJoint2.prototype.setMaxMotorTorque = function(torque) { + if (torque == this.m_maxMotorTorque) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_maxMotorTorque = torque; + }; + RevoluteJoint2.prototype.getMaxMotorTorque = function() { + return this.m_maxMotorTorque; + }; + RevoluteJoint2.prototype.isLimitEnabled = function() { + return this.m_enableLimit; + }; + RevoluteJoint2.prototype.enableLimit = function(flag) { + if (flag != this.m_enableLimit) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableLimit = flag; + this.m_impulse.z = 0; + } + }; + RevoluteJoint2.prototype.getLowerLimit = function() { + return this.m_lowerAngle; + }; + RevoluteJoint2.prototype.getUpperLimit = function() { + return this.m_upperAngle; + }; + RevoluteJoint2.prototype.setLimits = function(lower, upper) { + if (lower != this.m_lowerAngle || upper != this.m_upperAngle) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_impulse.z = 0; + this.m_lowerAngle = lower; + this.m_upperAngle = upper; + } + }; + RevoluteJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + RevoluteJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + RevoluteJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); + }; + RevoluteJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_impulse.z; + }; + RevoluteJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var fixedRotation = iA + iB === 0; + 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; + this.m_mass.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; + this.m_mass.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; + this.m_mass.ex.y = this.m_mass.ey.x; + 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; + this.m_mass.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; + this.m_mass.ex.z = this.m_mass.ez.x; + this.m_mass.ey.z = this.m_mass.ez.y; + this.m_mass.ez.z = iA + iB; + this.m_motorMass = iA + iB; + if (this.m_motorMass > 0) { + this.m_motorMass = 1 / this.m_motorMass; + } + if (this.m_enableMotor == false || fixedRotation) { + this.m_motorImpulse = 0; + } + if (this.m_enableLimit && fixedRotation == false) { + var jointAngle = aB - aA - this.m_referenceAngle; + if (math_abs$4(this.m_upperAngle - this.m_lowerAngle) < 2 * SettingsInternal.angularSlop) { + this.m_limitState = LimitState$2.equalLimits; + } else if (jointAngle <= this.m_lowerAngle) { + if (this.m_limitState != LimitState$2.atLowerLimit) { + this.m_impulse.z = 0; + } + this.m_limitState = LimitState$2.atLowerLimit; + } else if (jointAngle >= this.m_upperAngle) { + if (this.m_limitState != LimitState$2.atUpperLimit) { + this.m_impulse.z = 0; + } + this.m_limitState = LimitState$2.atUpperLimit; + } else { + this.m_limitState = LimitState$2.inactiveLimit; + this.m_impulse.z = 0; + } + } else { + this.m_limitState = LimitState$2.inactiveLimit; + } + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + this.m_motorImpulse *= step.dtRatio; + var P3 = Vec2.neo(this.m_impulse.x, this.m_impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_motorImpulse + this.m_impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_motorImpulse + this.m_impulse.z); + } else { + this.m_impulse.setZero(); + this.m_motorImpulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + RevoluteJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var fixedRotation = iA + iB === 0; + if (this.m_enableMotor && this.m_limitState != LimitState$2.equalLimits && fixedRotation == false) { + var Cdot = wB - wA - this.m_motorSpeed; + var impulse = -this.m_motorMass * Cdot; + var oldImpulse = this.m_motorImpulse; + var maxImpulse = step.dt * this.m_maxMotorTorque; + this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { + var Cdot1 = Vec2.zero(); + Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var Cdot2 = wB - wA; + var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); + var impulse = Vec3.neg(this.m_mass.solve33(Cdot)); + if (this.m_limitState == LimitState$2.equalLimits) { + this.m_impulse.add(impulse); + } else if (this.m_limitState == LimitState$2.atLowerLimit) { + var newImpulse = this.m_impulse.z + impulse.z; + if (newImpulse < 0) { + var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); + var reduced = this.m_mass.solve22(rhs); + impulse.x = reduced.x; + impulse.y = reduced.y; + impulse.z = -this.m_impulse.z; + this.m_impulse.x += reduced.x; + this.m_impulse.y += reduced.y; + this.m_impulse.z = 0; + } else { + this.m_impulse.add(impulse); + } + } else if (this.m_limitState == LimitState$2.atUpperLimit) { + var newImpulse = this.m_impulse.z + impulse.z; + if (newImpulse > 0) { + var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); + var reduced = this.m_mass.solve22(rhs); + impulse.x = reduced.x; + impulse.y = reduced.y; + impulse.z = -this.m_impulse.z; + this.m_impulse.x += reduced.x; + this.m_impulse.y += reduced.y; + this.m_impulse.z = 0; + } else { + this.m_impulse.add(impulse); + } + } + var P3 = Vec2.neo(impulse.x, impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + impulse.z); + } else { + var Cdot = Vec2.zero(); + Cdot.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var impulse = this.m_mass.solve22(Vec2.neg(Cdot)); + this.m_impulse.x += impulse.x; + this.m_impulse.y += impulse.y; + vA2.subMul(mA, impulse); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); + vB2.addMul(mB, impulse); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + RevoluteJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var angularError = 0; + var positionError = 0; + var fixedRotation = this.m_invIA + this.m_invIB == 0; + if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { + var angle = aB - aA - this.m_referenceAngle; + var limitImpulse = 0; + if (this.m_limitState == LimitState$2.equalLimits) { + var C = clamp(angle - this.m_lowerAngle, -SettingsInternal.maxAngularCorrection, SettingsInternal.maxAngularCorrection); + limitImpulse = -this.m_motorMass * C; + angularError = math_abs$4(C); + } else if (this.m_limitState == LimitState$2.atLowerLimit) { + var C = angle - this.m_lowerAngle; + angularError = -C; + C = clamp(C + SettingsInternal.angularSlop, -SettingsInternal.maxAngularCorrection, 0); + limitImpulse = -this.m_motorMass * C; + } else if (this.m_limitState == LimitState$2.atUpperLimit) { + var C = angle - this.m_upperAngle; + angularError = C; + C = clamp(C - SettingsInternal.angularSlop, 0, SettingsInternal.maxAngularCorrection); + limitImpulse = -this.m_motorMass * C; + } + aA -= this.m_invIA * limitImpulse; + aB += this.m_invIB * limitImpulse; + } + { + qA.setAngle(aA); + qB.setAngle(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var C = Vec2.zero(); + C.addCombine(1, cB2, 1, rB2); + C.subCombine(1, cA2, 1, rA2); + positionError = C.length(); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var K = new Mat22(); + K.ex.x = mA + mB + iA * rA2.y * rA2.y + iB * rB2.y * rB2.y; + K.ex.y = -iA * rA2.x * rA2.y - iB * rB2.x * rB2.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * rA2.x * rA2.x + iB * rB2.x * rB2.x; + var impulse = Vec2.neg(K.solve(C)); + cA2.subMul(mA, impulse); + aA -= iA * Vec2.crossVec2Vec2(rA2, impulse); + cB2.addMul(mB, impulse); + aB += iB * Vec2.crossVec2Vec2(rB2, impulse); + } + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; + }; + RevoluteJoint2.TYPE = "revolute-joint"; + return RevoluteJoint2; + }(Joint) + ); + var math_abs$3 = Math.abs; + var math_max = Math.max; + var math_min$2 = Math.min; + var LimitState$1; + (function(LimitState2) { + LimitState2[LimitState2["inactiveLimit"] = 0] = "inactiveLimit"; + LimitState2[LimitState2["atLowerLimit"] = 1] = "atLowerLimit"; + LimitState2[LimitState2["atUpperLimit"] = 2] = "atUpperLimit"; + LimitState2[LimitState2["equalLimits"] = 3] = "equalLimits"; + })(LimitState$1 || (LimitState$1 = {})); + var DEFAULTS$7 = { + enableLimit: false, + lowerTranslation: 0, + upperTranslation: 0, + enableMotor: false, + maxMotorForce: 0, + motorSpeed: 0 + }; + var PrismaticJoint = ( + /** @class */ + function(_super) { + __extends(PrismaticJoint2, _super); + function PrismaticJoint2(def, bodyA, bodyB, anchor, axis) { + var _this = this; + if (!(_this instanceof PrismaticJoint2)) { + return new PrismaticJoint2(def, bodyA, bodyB, anchor, axis); + } + def = options(def, DEFAULTS$7); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = PrismaticJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + _this.m_localXAxisA = Vec2.clone(axis ? bodyA.getLocalVector(axis) : def.localAxisA || Vec2.neo(1, 0)); + _this.m_localXAxisA.normalize(); + _this.m_localYAxisA = Vec2.crossNumVec2(1, _this.m_localXAxisA); + _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); + _this.m_impulse = new Vec3(); + _this.m_motorMass = 0; + _this.m_motorImpulse = 0; + _this.m_lowerTranslation = def.lowerTranslation; + _this.m_upperTranslation = def.upperTranslation; + _this.m_maxMotorForce = def.maxMotorForce; + _this.m_motorSpeed = def.motorSpeed; + _this.m_enableLimit = def.enableLimit; + _this.m_enableMotor = def.enableMotor; + _this.m_limitState = LimitState$1.inactiveLimit; + _this.m_axis = Vec2.zero(); + _this.m_perp = Vec2.zero(); + _this.m_K = new Mat33(); + return _this; + } + PrismaticJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + lowerTranslation: this.m_lowerTranslation, + upperTranslation: this.m_upperTranslation, + maxMotorForce: this.m_maxMotorForce, + motorSpeed: this.m_motorSpeed, + enableLimit: this.m_enableLimit, + enableMotor: this.m_enableMotor, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + localAxisA: this.m_localXAxisA, + referenceAngle: this.m_referenceAngle + }; + }; + PrismaticJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + data.localAxisA = Vec2.clone(data.localAxisA); + var joint = new PrismaticJoint2(data); + return joint; + }; + PrismaticJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (def.localAxisA) { + this.m_localXAxisA.setVec2(def.localAxisA); + this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1, def.localAxisA)); + } + if (Number.isFinite(def.referenceAngle)) { + this.m_referenceAngle = def.referenceAngle; + } + if (typeof def.enableLimit !== "undefined") { + this.m_enableLimit = !!def.enableLimit; + } + if (Number.isFinite(def.lowerTranslation)) { + this.m_lowerTranslation = def.lowerTranslation; + } + if (Number.isFinite(def.upperTranslation)) { + this.m_upperTranslation = def.upperTranslation; + } + if (typeof def.enableMotor !== "undefined") { + this.m_enableMotor = !!def.enableMotor; + } + if (Number.isFinite(def.maxMotorForce)) { + this.m_maxMotorForce = def.maxMotorForce; + } + if (Number.isFinite(def.motorSpeed)) { + this.m_motorSpeed = def.motorSpeed; + } + }; + PrismaticJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + PrismaticJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + PrismaticJoint2.prototype.getLocalAxisA = function() { + return this.m_localXAxisA; + }; + PrismaticJoint2.prototype.getReferenceAngle = function() { + return this.m_referenceAngle; + }; + PrismaticJoint2.prototype.getJointTranslation = function() { + var pA2 = this.m_bodyA.getWorldPoint(this.m_localAnchorA); + var pB2 = this.m_bodyB.getWorldPoint(this.m_localAnchorB); + var d2 = Vec2.sub(pB2, pA2); + var axis = this.m_bodyA.getWorldVector(this.m_localXAxisA); + var translation2 = Vec2.dot(d2, axis); + return translation2; + }; + PrismaticJoint2.prototype.getJointSpeed = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + var rA2 = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter)); + var rB2 = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter)); + var p1 = Vec2.add(bA.m_sweep.c, rA2); + var p2 = Vec2.add(bB.m_sweep.c, rB2); + var d2 = Vec2.sub(p2, p1); + var axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA); + var vA2 = bA.m_linearVelocity; + var vB2 = bB.m_linearVelocity; + var wA = bA.m_angularVelocity; + var wB = bB.m_angularVelocity; + var speed = Vec2.dot(d2, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB2, wB, rB2), Vec2.addCrossNumVec2(vA2, wA, rA2))); + return speed; + }; + PrismaticJoint2.prototype.isLimitEnabled = function() { + return this.m_enableLimit; + }; + PrismaticJoint2.prototype.enableLimit = function(flag) { + if (flag != this.m_enableLimit) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableLimit = flag; + this.m_impulse.z = 0; + } + }; + PrismaticJoint2.prototype.getLowerLimit = function() { + return this.m_lowerTranslation; + }; + PrismaticJoint2.prototype.getUpperLimit = function() { + return this.m_upperTranslation; + }; + PrismaticJoint2.prototype.setLimits = function(lower, upper) { + if (lower != this.m_lowerTranslation || upper != this.m_upperTranslation) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_lowerTranslation = lower; + this.m_upperTranslation = upper; + this.m_impulse.z = 0; + } + }; + PrismaticJoint2.prototype.isMotorEnabled = function() { + return this.m_enableMotor; + }; + PrismaticJoint2.prototype.enableMotor = function(flag) { + if (flag == this.m_enableMotor) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableMotor = flag; + }; + PrismaticJoint2.prototype.setMotorSpeed = function(speed) { + if (speed == this.m_motorSpeed) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_motorSpeed = speed; + }; + PrismaticJoint2.prototype.setMaxMotorForce = function(force) { + if (force == this.m_maxMotorForce) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_maxMotorForce = force; + }; + PrismaticJoint2.prototype.getMaxMotorForce = function() { + return this.m_maxMotorForce; + }; + PrismaticJoint2.prototype.getMotorSpeed = function() { + return this.m_motorSpeed; + }; + PrismaticJoint2.prototype.getMotorForce = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + PrismaticJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + PrismaticJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + PrismaticJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis).mul(inv_dt); + }; + PrismaticJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_impulse.y; + }; + PrismaticJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.zero(); + d2.addCombine(1, cB2, 1, rB2); + d2.subCombine(1, cA2, 1, rA2); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + { + this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA); + this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_axis); + this.m_a2 = Vec2.crossVec2Vec2(rB2, this.m_axis); + this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2; + if (this.m_motorMass > 0) { + this.m_motorMass = 1 / this.m_motorMass; + } + } + { + this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA); + this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_perp); + this.m_s2 = Vec2.crossVec2Vec2(rB2, this.m_perp); + Vec2.crossVec2Vec2(rA2, this.m_perp); + var k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2; + var k12 = iA * this.m_s1 + iB * this.m_s2; + var k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2; + var k22 = iA + iB; + if (k22 == 0) { + k22 = 1; + } + var k23 = iA * this.m_a1 + iB * this.m_a2; + var k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2; + this.m_K.ex.set(k11, k12, k13); + this.m_K.ey.set(k12, k22, k23); + this.m_K.ez.set(k13, k23, k33); + } + if (this.m_enableLimit) { + var jointTranslation = Vec2.dot(this.m_axis, d2); + if (math_abs$3(this.m_upperTranslation - this.m_lowerTranslation) < 2 * SettingsInternal.linearSlop) { + this.m_limitState = LimitState$1.equalLimits; + } else if (jointTranslation <= this.m_lowerTranslation) { + if (this.m_limitState != LimitState$1.atLowerLimit) { + this.m_limitState = LimitState$1.atLowerLimit; + this.m_impulse.z = 0; + } + } else if (jointTranslation >= this.m_upperTranslation) { + if (this.m_limitState != LimitState$1.atUpperLimit) { + this.m_limitState = LimitState$1.atUpperLimit; + this.m_impulse.z = 0; + } + } else { + this.m_limitState = LimitState$1.inactiveLimit; + this.m_impulse.z = 0; + } + } else { + this.m_limitState = LimitState$1.inactiveLimit; + this.m_impulse.z = 0; + } + if (this.m_enableMotor == false) { + this.m_motorImpulse = 0; + } + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + this.m_motorImpulse *= step.dtRatio; + var P3 = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis); + var LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1; + var LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } else { + this.m_impulse.setZero(); + this.m_motorImpulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + PrismaticJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + if (this.m_enableMotor && this.m_limitState != LimitState$1.equalLimits) { + var Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB2, vA2)) + this.m_a2 * wB - this.m_a1 * wA; + var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot); + var oldImpulse = this.m_motorImpulse; + var maxImpulse = step.dt * this.m_maxMotorForce; + this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_axis); + var LA = impulse * this.m_a1; + var LB = impulse * this.m_a2; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + var Cdot1 = Vec2.zero(); + Cdot1.x += Vec2.dot(this.m_perp, vB2) + this.m_s2 * wB; + Cdot1.x -= Vec2.dot(this.m_perp, vA2) + this.m_s1 * wA; + Cdot1.y = wB - wA; + if (this.m_enableLimit && this.m_limitState != LimitState$1.inactiveLimit) { + var Cdot2 = 0; + Cdot2 += Vec2.dot(this.m_axis, vB2) + this.m_a2 * wB; + Cdot2 -= Vec2.dot(this.m_axis, vA2) + this.m_a1 * wA; + var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); + var f1 = Vec3.clone(this.m_impulse); + var df = this.m_K.solve33(Vec3.neg(Cdot)); + this.m_impulse.add(df); + if (this.m_limitState == LimitState$1.atLowerLimit) { + this.m_impulse.z = math_max(this.m_impulse.z, 0); + } else if (this.m_limitState == LimitState$1.atUpperLimit) { + this.m_impulse.z = math_min$2(this.m_impulse.z, 0); + } + var b2 = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y)); + var f2r = Vec2.add(this.m_K.solve22(b2), Vec2.neo(f1.x, f1.y)); + this.m_impulse.x = f2r.x; + this.m_impulse.y = f2r.y; + df = Vec3.sub(this.m_impulse, f1); + var P3 = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis); + var LA = df.x * this.m_s1 + df.y + df.z * this.m_a1; + var LB = df.x * this.m_s2 + df.y + df.z * this.m_a2; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } else { + var df = this.m_K.solve22(Vec2.neg(Cdot1)); + this.m_impulse.x += df.x; + this.m_impulse.y += df.y; + var P3 = Vec2.mulNumVec2(df.x, this.m_perp); + var LA = df.x * this.m_s1 + df.y; + var LB = df.x * this.m_s2 + df.y; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + PrismaticJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.sub(Vec2.add(cB2, rB2), Vec2.add(cA2, rA2)); + var axis = Rot.mulVec2(qA, this.m_localXAxisA); + var a1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), axis); + var a2 = Vec2.crossVec2Vec2(rB2, axis); + var perp2 = Rot.mulVec2(qA, this.m_localYAxisA); + var s1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), perp2); + var s2 = Vec2.crossVec2Vec2(rB2, perp2); + var impulse = new Vec3(); + var C1 = Vec2.zero(); + C1.x = Vec2.dot(perp2, d2); + C1.y = aB - aA - this.m_referenceAngle; + var linearError = math_abs$3(C1.x); + var angularError = math_abs$3(C1.y); + var linearSlop = SettingsInternal.linearSlop; + var maxLinearCorrection = SettingsInternal.maxLinearCorrection; + var active = false; + var C2 = 0; + if (this.m_enableLimit) { + var translation2 = Vec2.dot(axis, d2); + if (math_abs$3(this.m_upperTranslation - this.m_lowerTranslation) < 2 * linearSlop) { + C2 = clamp(translation2, -maxLinearCorrection, maxLinearCorrection); + linearError = math_max(linearError, math_abs$3(translation2)); + active = true; + } else if (translation2 <= this.m_lowerTranslation) { + C2 = clamp(translation2 - this.m_lowerTranslation + linearSlop, -maxLinearCorrection, 0); + linearError = Math.max(linearError, this.m_lowerTranslation - translation2); + active = true; + } else if (translation2 >= this.m_upperTranslation) { + C2 = clamp(translation2 - this.m_upperTranslation - linearSlop, 0, maxLinearCorrection); + linearError = Math.max(linearError, translation2 - this.m_upperTranslation); + active = true; + } + } + if (active) { + var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; + var k12 = iA * s1 + iB * s2; + var k13 = iA * s1 * a1 + iB * s2 * a2; + var k22 = iA + iB; + if (k22 == 0) { + k22 = 1; + } + var k23 = iA * a1 + iB * a2; + var k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2; + var K = new Mat33(); + K.ex.set(k11, k12, k13); + K.ey.set(k12, k22, k23); + K.ez.set(k13, k23, k33); + var C = new Vec3(); + C.x = C1.x; + C.y = C1.y; + C.z = C2; + impulse = K.solve33(Vec3.neg(C)); + } else { + var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; + var k12 = iA * s1 + iB * s2; + var k22 = iA + iB; + if (k22 == 0) { + k22 = 1; + } + var K = new Mat22(); + K.ex.setNum(k11, k12); + K.ey.setNum(k12, k22); + var impulse1 = K.solve(Vec2.neg(C1)); + impulse.x = impulse1.x; + impulse.y = impulse1.y; + impulse.z = 0; + } + var P3 = Vec2.combine(impulse.x, perp2, impulse.z, axis); + var LA = impulse.x * s1 + impulse.y + impulse.z * a1; + var LB = impulse.x * s2 + impulse.y + impulse.z * a2; + cA2.subMul(mA, P3); + aA -= iA * LA; + cB2.addMul(mB, P3); + aB += iB * LB; + this.m_bodyA.c_position.c = cA2; + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c = cB2; + this.m_bodyB.c_position.a = aB; + return linearError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; + }; + PrismaticJoint2.TYPE = "prismatic-joint"; + return PrismaticJoint2; + }(Joint) + ); + var DEFAULTS$6 = { + ratio: 1 + }; + var GearJoint = ( + /** @class */ + function(_super) { + __extends(GearJoint2, _super); + function GearJoint2(def, bodyA, bodyB, joint1, joint2, ratio) { + var _this = this; + if (!(_this instanceof GearJoint2)) { + return new GearJoint2(def, bodyA, bodyB, joint1, joint2, ratio); + } + def = options(def, DEFAULTS$6); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = GearJoint2.TYPE; + _this.m_joint1 = joint1 ? joint1 : def.joint1; + _this.m_joint2 = joint2 ? joint2 : def.joint2; + _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; + _this.m_type1 = _this.m_joint1.getType(); + _this.m_type2 = _this.m_joint2.getType(); + var coordinateA; + var coordinateB; + _this.m_bodyC = _this.m_joint1.getBodyA(); + _this.m_bodyA = _this.m_joint1.getBodyB(); + var xfA2 = _this.m_bodyA.m_xf; + var aA = _this.m_bodyA.m_sweep.a; + var xfC = _this.m_bodyC.m_xf; + var aC = _this.m_bodyC.m_sweep.a; + if (_this.m_type1 === RevoluteJoint.TYPE) { + var revolute = _this.m_joint1; + _this.m_localAnchorC = revolute.m_localAnchorA; + _this.m_localAnchorA = revolute.m_localAnchorB; + _this.m_referenceAngleA = revolute.m_referenceAngle; + _this.m_localAxisC = Vec2.zero(); + coordinateA = aA - aC - _this.m_referenceAngleA; + } else { + var prismatic = _this.m_joint1; + _this.m_localAnchorC = prismatic.m_localAnchorA; + _this.m_localAnchorA = prismatic.m_localAnchorB; + _this.m_referenceAngleA = prismatic.m_referenceAngle; + _this.m_localAxisC = prismatic.m_localXAxisA; + var pC = _this.m_localAnchorC; + var pA2 = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA2.q, _this.m_localAnchorA), Vec2.sub(xfA2.p, xfC.p))); + coordinateA = Vec2.dot(pA2, _this.m_localAxisC) - Vec2.dot(pC, _this.m_localAxisC); + } + _this.m_bodyD = _this.m_joint2.getBodyA(); + _this.m_bodyB = _this.m_joint2.getBodyB(); + var xfB2 = _this.m_bodyB.m_xf; + var aB = _this.m_bodyB.m_sweep.a; + var xfD = _this.m_bodyD.m_xf; + var aD = _this.m_bodyD.m_sweep.a; + if (_this.m_type2 === RevoluteJoint.TYPE) { + var revolute = _this.m_joint2; + _this.m_localAnchorD = revolute.m_localAnchorA; + _this.m_localAnchorB = revolute.m_localAnchorB; + _this.m_referenceAngleB = revolute.m_referenceAngle; + _this.m_localAxisD = Vec2.zero(); + coordinateB = aB - aD - _this.m_referenceAngleB; + } else { + var prismatic = _this.m_joint2; + _this.m_localAnchorD = prismatic.m_localAnchorA; + _this.m_localAnchorB = prismatic.m_localAnchorB; + _this.m_referenceAngleB = prismatic.m_referenceAngle; + _this.m_localAxisD = prismatic.m_localXAxisA; + var pD = _this.m_localAnchorD; + var pB2 = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB2.q, _this.m_localAnchorB), Vec2.sub(xfB2.p, xfD.p))); + coordinateB = Vec2.dot(pB2, _this.m_localAxisD) - Vec2.dot(pD, _this.m_localAxisD); + } + _this.m_constant = coordinateA + _this.m_ratio * coordinateB; + _this.m_impulse = 0; + return _this; + } + GearJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + joint1: this.m_joint1, + joint2: this.m_joint2, + ratio: this.m_ratio + // _constant: this.m_constant, + }; + }; + GearJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + data.joint1 = restore(Joint, data.joint1, world); + data.joint2 = restore(Joint, data.joint2, world); + var joint = new GearJoint2(data); + return joint; + }; + GearJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.ratio)) { + this.m_ratio = def.ratio; + } + }; + GearJoint2.prototype.getJoint1 = function() { + return this.m_joint1; + }; + GearJoint2.prototype.getJoint2 = function() { + return this.m_joint2; + }; + GearJoint2.prototype.setRatio = function(ratio) { + this.m_ratio = ratio; + }; + GearJoint2.prototype.getRatio = function() { + return this.m_ratio; + }; + GearJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + GearJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + GearJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt); + }; + GearJoint2.prototype.getReactionTorque = function(inv_dt) { + var L = this.m_impulse * this.m_JwA; + return inv_dt * L; + }; + GearJoint2.prototype.initVelocityConstraints = function(step) { + this.m_lcA = this.m_bodyA.m_sweep.localCenter; + this.m_lcB = this.m_bodyB.m_sweep.localCenter; + this.m_lcC = this.m_bodyC.m_sweep.localCenter; + this.m_lcD = this.m_bodyD.m_sweep.localCenter; + this.m_mA = this.m_bodyA.m_invMass; + this.m_mB = this.m_bodyB.m_invMass; + this.m_mC = this.m_bodyC.m_invMass; + this.m_mD = this.m_bodyD.m_invMass; + this.m_iA = this.m_bodyA.m_invI; + this.m_iB = this.m_bodyB.m_invI; + this.m_iC = this.m_bodyC.m_invI; + this.m_iD = this.m_bodyD.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var aC = this.m_bodyC.c_position.a; + var vC = this.m_bodyC.c_velocity.v; + var wC = this.m_bodyC.c_velocity.w; + var aD = this.m_bodyD.c_position.a; + var vD = this.m_bodyD.c_velocity.v; + var wD = this.m_bodyD.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var qC = Rot.neo(aC); + var qD = Rot.neo(aD); + this.m_mass = 0; + if (this.m_type1 == RevoluteJoint.TYPE) { + this.m_JvAC = Vec2.zero(); + this.m_JwA = 1; + this.m_JwC = 1; + this.m_mass += this.m_iA + this.m_iC; + } else { + var u = Rot.mulVec2(qC, this.m_localAxisC); + var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); + this.m_JvAC = u; + this.m_JwC = Vec2.crossVec2Vec2(rC, u); + this.m_JwA = Vec2.crossVec2Vec2(rA2, u); + 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; + } + if (this.m_type2 == RevoluteJoint.TYPE) { + this.m_JvBD = Vec2.zero(); + this.m_JwB = this.m_ratio; + this.m_JwD = this.m_ratio; + this.m_mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); + } else { + var u = Rot.mulVec2(qD, this.m_localAxisD); + var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); + this.m_JvBD = Vec2.mulNumVec2(this.m_ratio, u); + this.m_JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); + this.m_JwB = this.m_ratio * Vec2.crossVec2Vec2(rB2, u); + 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; + } + this.m_mass = this.m_mass > 0 ? 1 / this.m_mass : 0; + if (step.warmStarting) { + vA2.addMul(this.m_mA * this.m_impulse, this.m_JvAC); + wA += this.m_iA * this.m_impulse * this.m_JwA; + vB2.addMul(this.m_mB * this.m_impulse, this.m_JvBD); + wB += this.m_iB * this.m_impulse * this.m_JwB; + vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC); + wC -= this.m_iC * this.m_impulse * this.m_JwC; + vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD); + wD -= this.m_iD * this.m_impulse * this.m_JwD; + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + this.m_bodyC.c_velocity.v.setVec2(vC); + this.m_bodyC.c_velocity.w = wC; + this.m_bodyD.c_velocity.v.setVec2(vD); + this.m_bodyD.c_velocity.w = wD; + }; + GearJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vC = this.m_bodyC.c_velocity.v; + var wC = this.m_bodyC.c_velocity.w; + var vD = this.m_bodyD.c_velocity.v; + var wD = this.m_bodyD.c_velocity.w; + 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); + Cdot += this.m_JwA * wA - this.m_JwC * wC + (this.m_JwB * wB - this.m_JwD * wD); + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + vA2.addMul(this.m_mA * impulse, this.m_JvAC); + wA += this.m_iA * impulse * this.m_JwA; + vB2.addMul(this.m_mB * impulse, this.m_JvBD); + wB += this.m_iB * impulse * this.m_JwB; + vC.subMul(this.m_mC * impulse, this.m_JvAC); + wC -= this.m_iC * impulse * this.m_JwC; + vD.subMul(this.m_mD * impulse, this.m_JvBD); + wD -= this.m_iD * impulse * this.m_JwD; + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + this.m_bodyC.c_velocity.v.setVec2(vC); + this.m_bodyC.c_velocity.w = wC; + this.m_bodyD.c_velocity.v.setVec2(vD); + this.m_bodyD.c_velocity.w = wD; + }; + GearJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var cC = this.m_bodyC.c_position.c; + var aC = this.m_bodyC.c_position.a; + var cD = this.m_bodyD.c_position.c; + var aD = this.m_bodyD.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var qC = Rot.neo(aC); + var qD = Rot.neo(aD); + var linearError = 0; + var coordinateA; + var coordinateB; + var JvAC; + var JvBD; + var JwA; + var JwB; + var JwC; + var JwD; + var mass = 0; + if (this.m_type1 == RevoluteJoint.TYPE) { + JvAC = Vec2.zero(); + JwA = 1; + JwC = 1; + mass += this.m_iA + this.m_iC; + coordinateA = aA - aC - this.m_referenceAngleA; + } else { + var u = Rot.mulVec2(qC, this.m_localAxisC); + var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); + JvAC = u; + JwC = Vec2.crossVec2Vec2(rC, u); + JwA = Vec2.crossVec2Vec2(rA2, u); + mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA; + var pC = Vec2.sub(this.m_localAnchorC, this.m_lcC); + var pA2 = Rot.mulTVec2(qC, Vec2.add(rA2, Vec2.sub(cA2, cC))); + coordinateA = Vec2.dot(Vec2.sub(pA2, pC), this.m_localAxisC); + } + if (this.m_type2 == RevoluteJoint.TYPE) { + JvBD = Vec2.zero(); + JwB = this.m_ratio; + JwD = this.m_ratio; + mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); + coordinateB = aB - aD - this.m_referenceAngleB; + } else { + var u = Rot.mulVec2(qD, this.m_localAxisD); + var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); + JvBD = Vec2.mulNumVec2(this.m_ratio, u); + JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); + JwB = this.m_ratio * Vec2.crossVec2Vec2(rB2, u); + mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * JwD * JwD + this.m_iB * JwB * JwB; + var pD = Vec2.sub(this.m_localAnchorD, this.m_lcD); + var pB2 = Rot.mulTVec2(qD, Vec2.add(rB2, Vec2.sub(cB2, cD))); + coordinateB = Vec2.dot(pB2, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD); + } + var C = coordinateA + this.m_ratio * coordinateB - this.m_constant; + var impulse = 0; + if (mass > 0) { + impulse = -C / mass; + } + cA2.addMul(this.m_mA * impulse, JvAC); + aA += this.m_iA * impulse * JwA; + cB2.addMul(this.m_mB * impulse, JvBD); + aB += this.m_iB * impulse * JwB; + cC.subMul(this.m_mC * impulse, JvAC); + aC -= this.m_iC * impulse * JwC; + cD.subMul(this.m_mD * impulse, JvBD); + aD -= this.m_iD * impulse * JwD; + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + this.m_bodyC.c_position.c.setVec2(cC); + this.m_bodyC.c_position.a = aC; + this.m_bodyD.c_position.c.setVec2(cD); + this.m_bodyD.c_position.a = aD; + return linearError < SettingsInternal.linearSlop; + }; + GearJoint2.TYPE = "gear-joint"; + return GearJoint2; + }(Joint) + ); + var DEFAULTS$5 = { + maxForce: 1, + maxTorque: 1, + correctionFactor: 0.3 + }; + var MotorJoint = ( + /** @class */ + function(_super) { + __extends(MotorJoint2, _super); + function MotorJoint2(def, bodyA, bodyB) { + var _this = this; + if (!(_this instanceof MotorJoint2)) { + return new MotorJoint2(def, bodyA, bodyB); + } + def = options(def, DEFAULTS$5); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = MotorJoint2.TYPE; + _this.m_linearOffset = Vec2.isValid(def.linearOffset) ? Vec2.clone(def.linearOffset) : bodyA.getLocalPoint(bodyB.getPosition()); + _this.m_angularOffset = Number.isFinite(def.angularOffset) ? def.angularOffset : bodyB.getAngle() - bodyA.getAngle(); + _this.m_linearImpulse = Vec2.zero(); + _this.m_angularImpulse = 0; + _this.m_maxForce = def.maxForce; + _this.m_maxTorque = def.maxTorque; + _this.m_correctionFactor = def.correctionFactor; + return _this; + } + MotorJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + maxForce: this.m_maxForce, + maxTorque: this.m_maxTorque, + correctionFactor: this.m_correctionFactor, + linearOffset: this.m_linearOffset, + angularOffset: this.m_angularOffset + }; + }; + MotorJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new MotorJoint2(data); + return joint; + }; + MotorJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.angularOffset)) { + this.m_angularOffset = def.angularOffset; + } + if (Number.isFinite(def.maxForce)) { + this.m_maxForce = def.maxForce; + } + if (Number.isFinite(def.maxTorque)) { + this.m_maxTorque = def.maxTorque; + } + if (Number.isFinite(def.correctionFactor)) { + this.m_correctionFactor = def.correctionFactor; + } + if (Vec2.isValid(def.linearOffset)) { + this.m_linearOffset.set(def.linearOffset); + } + }; + MotorJoint2.prototype.setMaxForce = function(force) { + this.m_maxForce = force; + }; + MotorJoint2.prototype.getMaxForce = function() { + return this.m_maxForce; + }; + MotorJoint2.prototype.setMaxTorque = function(torque) { + this.m_maxTorque = torque; + }; + MotorJoint2.prototype.getMaxTorque = function() { + return this.m_maxTorque; + }; + MotorJoint2.prototype.setCorrectionFactor = function(factor) { + this.m_correctionFactor = factor; + }; + MotorJoint2.prototype.getCorrectionFactor = function() { + return this.m_correctionFactor; + }; + MotorJoint2.prototype.setLinearOffset = function(linearOffset) { + if (linearOffset.x != this.m_linearOffset.x || linearOffset.y != this.m_linearOffset.y) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_linearOffset.set(linearOffset); + } + }; + MotorJoint2.prototype.getLinearOffset = function() { + return this.m_linearOffset; + }; + MotorJoint2.prototype.setAngularOffset = function(angularOffset) { + if (angularOffset != this.m_angularOffset) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_angularOffset = angularOffset; + } + }; + MotorJoint2.prototype.getAngularOffset = function() { + return this.m_angularOffset; + }; + MotorJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getPosition(); + }; + MotorJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getPosition(); + }; + MotorJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); + }; + MotorJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_angularImpulse; + }; + MotorJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_linearOffset, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.neg(this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var K = new Mat22(); + K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y; + K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x; + this.m_linearMass = K.getInverse(); + this.m_angularMass = iA + iB; + if (this.m_angularMass > 0) { + this.m_angularMass = 1 / this.m_angularMass; + } + this.m_linearError = Vec2.zero(); + this.m_linearError.addCombine(1, cB2, 1, this.m_rB); + this.m_linearError.subCombine(1, cA2, 1, this.m_rA); + this.m_angularError = aB - aA - this.m_angularOffset; + if (step.warmStarting) { + this.m_linearImpulse.mul(step.dtRatio); + this.m_angularImpulse *= step.dtRatio; + var P3 = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_angularImpulse); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_angularImpulse); + } else { + this.m_linearImpulse.setZero(); + this.m_angularImpulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + MotorJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var h = step.dt; + var inv_h = step.inv_dt; + { + var Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError; + var impulse = -this.m_angularMass * Cdot; + var oldImpulse = this.m_angularImpulse; + var maxImpulse = h * this.m_maxTorque; + this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_angularImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + { + var Cdot = Vec2.zero(); + Cdot.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError); + var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); + var oldImpulse = Vec2.clone(this.m_linearImpulse); + this.m_linearImpulse.add(impulse); + var maxImpulse = h * this.m_maxForce; + this.m_linearImpulse.clamp(maxImpulse); + impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); + vA2.subMul(mA, impulse); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); + vB2.addMul(mB, impulse); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + MotorJoint2.prototype.solvePositionConstraints = function(step) { + return true; + }; + MotorJoint2.TYPE = "motor-joint"; + return MotorJoint2; + }(Joint) + ); + var math_PI$2 = Math.PI; + var DEFAULTS$4 = { + maxForce: 0, + frequencyHz: 5, + dampingRatio: 0.7 + }; + var MouseJoint = ( + /** @class */ + function(_super) { + __extends(MouseJoint2, _super); + function MouseJoint2(def, bodyA, bodyB, target) { + var _this = this; + if (!(_this instanceof MouseJoint2)) { + return new MouseJoint2(def, bodyA, bodyB, target); + } + def = options(def, DEFAULTS$4); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = MouseJoint2.TYPE; + if (Vec2.isValid(target)) { + _this.m_targetA = Vec2.clone(target); + } else if (Vec2.isValid(def.target)) { + _this.m_targetA = Vec2.clone(def.target); + } else { + _this.m_targetA = Vec2.zero(); + } + _this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), _this.m_targetA); + _this.m_maxForce = def.maxForce; + _this.m_impulse = Vec2.zero(); + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_beta = 0; + _this.m_gamma = 0; + _this.m_rB = Vec2.zero(); + _this.m_localCenterB = Vec2.zero(); + _this.m_invMassB = 0; + _this.m_invIB = 0; + _this.m_mass = new Mat22(); + _this.m_C = Vec2.zero(); + return _this; + } + MouseJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + target: this.m_targetA, + maxForce: this.m_maxForce, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + _localAnchorB: this.m_localAnchorB + }; + }; + MouseJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + data.target = Vec2.clone(data.target); + var joint = new MouseJoint2(data); + if (data._localAnchorB) { + joint.m_localAnchorB = data._localAnchorB; + } + return joint; + }; + MouseJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.maxForce)) { + this.m_maxForce = def.maxForce; + } + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; + } + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; + } + }; + MouseJoint2.prototype.setTarget = function(target) { + if (Vec2.areEqual(target, this.m_targetA)) + return; + this.m_bodyB.setAwake(true); + this.m_targetA.set(target); + }; + MouseJoint2.prototype.getTarget = function() { + return this.m_targetA; + }; + MouseJoint2.prototype.setMaxForce = function(force) { + this.m_maxForce = force; + }; + MouseJoint2.prototype.getMaxForce = function() { + return this.m_maxForce; + }; + MouseJoint2.prototype.setFrequency = function(hz) { + this.m_frequencyHz = hz; + }; + MouseJoint2.prototype.getFrequency = function() { + return this.m_frequencyHz; + }; + MouseJoint2.prototype.setDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + MouseJoint2.prototype.getDampingRatio = function() { + return this.m_dampingRatio; + }; + MouseJoint2.prototype.getAnchorA = function() { + return Vec2.clone(this.m_targetA); + }; + MouseJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + MouseJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(inv_dt, this.m_impulse); + }; + MouseJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * 0; + }; + MouseJoint2.prototype.shiftOrigin = function(newOrigin) { + this.m_targetA.sub(newOrigin); + }; + MouseJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIB = this.m_bodyB.m_invI; + var position = this.m_bodyB.c_position; + var velocity = this.m_bodyB.c_velocity; + var cB2 = position.c; + var aB = position.a; + var vB2 = velocity.v; + var wB = velocity.w; + var qB = Rot.neo(aB); + var mass = this.m_bodyB.getMass(); + var omega = 2 * math_PI$2 * this.m_frequencyHz; + var d2 = 2 * mass * this.m_dampingRatio * omega; + var k = mass * (omega * omega); + var h = step.dt; + this.m_gamma = h * (d2 + h * k); + if (this.m_gamma != 0) { + this.m_gamma = 1 / this.m_gamma; + } + this.m_beta = h * k * this.m_gamma; + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var K = new Mat22(); + K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y + this.m_gamma; + K.ex.y = -this.m_invIB * this.m_rB.x * this.m_rB.y; + K.ey.x = K.ex.y; + K.ey.y = this.m_invMassB + this.m_invIB * this.m_rB.x * this.m_rB.x + this.m_gamma; + this.m_mass = K.getInverse(); + this.m_C.setVec2(cB2); + this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA); + this.m_C.mul(this.m_beta); + wB *= 0.98; + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + vB2.addMul(this.m_invMassB, this.m_impulse); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse); + } else { + this.m_impulse.setZero(); + } + velocity.v.setVec2(vB2); + velocity.w = wB; + }; + MouseJoint2.prototype.solveVelocityConstraints = function(step) { + var velocity = this.m_bodyB.c_velocity; + var vB2 = Vec2.clone(velocity.v); + var wB = velocity.w; + var Cdot = Vec2.crossNumVec2(wB, this.m_rB); + Cdot.add(vB2); + Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse); + Cdot.neg(); + var impulse = Mat22.mulVec2(this.m_mass, Cdot); + var oldImpulse = Vec2.clone(this.m_impulse); + this.m_impulse.add(impulse); + var maxImpulse = step.dt * this.m_maxForce; + this.m_impulse.clamp(maxImpulse); + impulse = Vec2.sub(this.m_impulse, oldImpulse); + vB2.addMul(this.m_invMassB, impulse); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse); + velocity.v.setVec2(vB2); + velocity.w = wB; + }; + MouseJoint2.prototype.solvePositionConstraints = function(step) { + return true; + }; + MouseJoint2.TYPE = "mouse-joint"; + return MouseJoint2; + }(Joint) + ); + var math_abs$2 = Math.abs; + var DEFAULTS$3 = { + collideConnected: true + }; + var PulleyJoint = ( + /** @class */ + function(_super) { + __extends(PulleyJoint2, _super); + function PulleyJoint2(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio) { + var _this = this; + if (!(_this instanceof PulleyJoint2)) { + return new PulleyJoint2(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio); + } + def = options(def, DEFAULTS$3); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = PulleyJoint2.TYPE; + _this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1, 1)); + _this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1, 1)); + _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1, 0)); + _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1, 0)); + _this.m_lengthA = Number.isFinite(def.lengthA) ? def.lengthA : Vec2.distance(anchorA, groundA); + _this.m_lengthB = Number.isFinite(def.lengthB) ? def.lengthB : Vec2.distance(anchorB, groundB); + _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; + _this.m_constant = _this.m_lengthA + _this.m_ratio * _this.m_lengthB; + _this.m_impulse = 0; + return _this; + } + PulleyJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + groundAnchorA: this.m_groundAnchorA, + groundAnchorB: this.m_groundAnchorB, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + lengthA: this.m_lengthA, + lengthB: this.m_lengthB, + ratio: this.m_ratio + }; + }; + PulleyJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new PulleyJoint2(data); + return joint; + }; + PulleyJoint2.prototype._reset = function(def) { + if (Vec2.isValid(def.groundAnchorA)) { + this.m_groundAnchorA.set(def.groundAnchorA); + } + if (Vec2.isValid(def.groundAnchorB)) { + this.m_groundAnchorB.set(def.groundAnchorB); + } + if (Vec2.isValid(def.localAnchorA)) { + this.m_localAnchorA.set(def.localAnchorA); + } else if (Vec2.isValid(def.anchorA)) { + this.m_localAnchorA.set(this.m_bodyA.getLocalPoint(def.anchorA)); + } + if (Vec2.isValid(def.localAnchorB)) { + this.m_localAnchorB.set(def.localAnchorB); + } else if (Vec2.isValid(def.anchorB)) { + this.m_localAnchorB.set(this.m_bodyB.getLocalPoint(def.anchorB)); + } + if (Number.isFinite(def.lengthA)) { + this.m_lengthA = def.lengthA; + } + if (Number.isFinite(def.lengthB)) { + this.m_lengthB = def.lengthB; + } + if (Number.isFinite(def.ratio)) { + this.m_ratio = def.ratio; + } + }; + PulleyJoint2.prototype.getGroundAnchorA = function() { + return this.m_groundAnchorA; + }; + PulleyJoint2.prototype.getGroundAnchorB = function() { + return this.m_groundAnchorB; + }; + PulleyJoint2.prototype.getLengthA = function() { + return this.m_lengthA; + }; + PulleyJoint2.prototype.getLengthB = function() { + return this.m_lengthB; + }; + PulleyJoint2.prototype.getRatio = function() { + return this.m_ratio; + }; + PulleyJoint2.prototype.getCurrentLengthA = function() { + var p = this.m_bodyA.getWorldPoint(this.m_localAnchorA); + var s2 = this.m_groundAnchorA; + return Vec2.distance(p, s2); + }; + PulleyJoint2.prototype.getCurrentLengthB = function() { + var p = this.m_bodyB.getWorldPoint(this.m_localAnchorB); + var s2 = this.m_groundAnchorB; + return Vec2.distance(p, s2); + }; + PulleyJoint2.prototype.shiftOrigin = function(newOrigin) { + this.m_groundAnchorA.sub(newOrigin); + this.m_groundAnchorB.sub(newOrigin); + }; + PulleyJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + PulleyJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + PulleyJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt); + }; + PulleyJoint2.prototype.getReactionTorque = function(inv_dt) { + return 0; + }; + PulleyJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + this.m_uA = Vec2.sub(Vec2.add(cA2, this.m_rA), this.m_groundAnchorA); + this.m_uB = Vec2.sub(Vec2.add(cB2, this.m_rB), this.m_groundAnchorB); + var lengthA = this.m_uA.length(); + var lengthB = this.m_uB.length(); + if (lengthA > 10 * SettingsInternal.linearSlop) { + this.m_uA.mul(1 / lengthA); + } else { + this.m_uA.setZero(); + } + if (lengthB > 10 * SettingsInternal.linearSlop) { + this.m_uB.mul(1 / lengthB); + } else { + this.m_uB.setZero(); + } + var ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA); + var ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB); + var mA = this.m_invMassA + this.m_invIA * ruA * ruA; + var mB = this.m_invMassB + this.m_invIB * ruB * ruB; + this.m_mass = mA + this.m_ratio * this.m_ratio * mB; + if (this.m_mass > 0) { + this.m_mass = 1 / this.m_mass; + } + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + var PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA); + var PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB); + vA2.addMul(this.m_invMassA, PA); + wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); + vB2.addMul(this.m_invMassB, PB); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + PulleyJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vpA = Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA)); + var vpB = Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB)); + var Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB); + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + var PA = Vec2.mulNumVec2(-impulse, this.m_uA); + var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB); + vA2.addMul(this.m_invMassA, PA); + wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); + vB2.addMul(this.m_invMassB, PB); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + PulleyJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var uA = Vec2.sub(Vec2.add(cA2, this.m_rA), this.m_groundAnchorA); + var uB = Vec2.sub(Vec2.add(cB2, this.m_rB), this.m_groundAnchorB); + var lengthA = uA.length(); + var lengthB = uB.length(); + if (lengthA > 10 * SettingsInternal.linearSlop) { + uA.mul(1 / lengthA); + } else { + uA.setZero(); + } + if (lengthB > 10 * SettingsInternal.linearSlop) { + uB.mul(1 / lengthB); + } else { + uB.setZero(); + } + var ruA = Vec2.crossVec2Vec2(rA2, uA); + var ruB = Vec2.crossVec2Vec2(rB2, uB); + var mA = this.m_invMassA + this.m_invIA * ruA * ruA; + var mB = this.m_invMassB + this.m_invIB * ruB * ruB; + var mass = mA + this.m_ratio * this.m_ratio * mB; + if (mass > 0) { + mass = 1 / mass; + } + var C = this.m_constant - lengthA - this.m_ratio * lengthB; + var linearError = math_abs$2(C); + var impulse = -mass * C; + var PA = Vec2.mulNumVec2(-impulse, uA); + var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB); + cA2.addMul(this.m_invMassA, PA); + aA += this.m_invIA * Vec2.crossVec2Vec2(rA2, PA); + cB2.addMul(this.m_invMassB, PB); + aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, PB); + this.m_bodyA.c_position.c = cA2; + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c = cB2; + this.m_bodyB.c_position.a = aB; + return linearError < SettingsInternal.linearSlop; + }; + PulleyJoint2.TYPE = "pulley-joint"; + return PulleyJoint2; + }(Joint) + ); + var math_min$1 = Math.min; + var LimitState; + (function(LimitState2) { + LimitState2[LimitState2["inactiveLimit"] = 0] = "inactiveLimit"; + LimitState2[LimitState2["atLowerLimit"] = 1] = "atLowerLimit"; + LimitState2[LimitState2["atUpperLimit"] = 2] = "atUpperLimit"; + LimitState2[LimitState2["equalLimits"] = 3] = "equalLimits"; + })(LimitState || (LimitState = {})); + var DEFAULTS$2 = { + maxLength: 0 + }; + var RopeJoint = ( + /** @class */ + function(_super) { + __extends(RopeJoint2, _super); + function RopeJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + if (!(_this instanceof RopeJoint2)) { + return new RopeJoint2(def, bodyA, bodyB, anchor); + } + def = options(def, DEFAULTS$2); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = RopeJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1, 0)); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1, 0)); + _this.m_maxLength = def.maxLength; + _this.m_mass = 0; + _this.m_impulse = 0; + _this.m_length = 0; + _this.m_state = LimitState.inactiveLimit; + return _this; + } + RopeJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + maxLength: this.m_maxLength + }; + }; + RopeJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new RopeJoint2(data); + return joint; + }; + RopeJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.maxLength)) { + this.m_maxLength = def.maxLength; + } + }; + RopeJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + RopeJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + RopeJoint2.prototype.setMaxLength = function(length) { + this.m_maxLength = length; + }; + RopeJoint2.prototype.getMaxLength = function() { + return this.m_maxLength; + }; + RopeJoint2.prototype.getLimitState = function() { + return this.m_state; + }; + RopeJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + RopeJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + RopeJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); + }; + RopeJoint2.prototype.getReactionTorque = function(inv_dt) { + return 0; + }; + RopeJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); + this.m_rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); + this.m_u = Vec2.zero(); + this.m_u.addCombine(1, cB2, 1, this.m_rB); + this.m_u.subCombine(1, cA2, 1, this.m_rA); + this.m_length = this.m_u.length(); + var C = this.m_length - this.m_maxLength; + if (C > 0) { + this.m_state = LimitState.atUpperLimit; + } else { + this.m_state = LimitState.inactiveLimit; + } + if (this.m_length > SettingsInternal.linearSlop) { + this.m_u.mul(1 / this.m_length); + } else { + this.m_u.setZero(); + this.m_mass = 0; + this.m_impulse = 0; + return; + } + var crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u); + var crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u); + var invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB; + this.m_mass = invMass != 0 ? 1 / invMass : 0; + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + var P3 = Vec2.mulNumVec2(this.m_impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + RopeJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vpA = Vec2.addCrossNumVec2(vA2, wA, this.m_rA); + var vpB = Vec2.addCrossNumVec2(vB2, wB, this.m_rB); + var C = this.m_length - this.m_maxLength; + var Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA)); + if (C < 0) { + Cdot += step.inv_dt * C; + } + var impulse = -this.m_mass * Cdot; + var oldImpulse = this.m_impulse; + this.m_impulse = math_min$1(0, this.m_impulse + impulse); + impulse = this.m_impulse - oldImpulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + RopeJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); + var u = Vec2.zero(); + u.addCombine(1, cB2, 1, rB2); + u.subCombine(1, cA2, 1, rA2); + var length = u.normalize(); + var C = length - this.m_maxLength; + C = clamp(C, 0, SettingsInternal.maxLinearCorrection); + var impulse = -this.m_mass * C; + var P3 = Vec2.mulNumVec2(impulse, u); + cA2.subMul(this.m_invMassA, P3); + aA -= this.m_invIA * Vec2.crossVec2Vec2(rA2, P3); + cB2.addMul(this.m_invMassB, P3); + aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, P3); + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return length - this.m_maxLength < SettingsInternal.linearSlop; + }; + RopeJoint2.TYPE = "rope-joint"; + return RopeJoint2; + }(Joint) + ); + var math_abs$1 = Math.abs; + var math_PI$1 = Math.PI; + var DEFAULTS$1 = { + frequencyHz: 0, + dampingRatio: 0 + }; + var WeldJoint = ( + /** @class */ + function(_super) { + __extends(WeldJoint2, _super); + function WeldJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + if (!(_this instanceof WeldJoint2)) { + return new WeldJoint2(def, bodyA, bodyB, anchor); + } + def = options(def, DEFAULTS$1); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = WeldJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_impulse = new Vec3(); + _this.m_bias = 0; + _this.m_gamma = 0; + _this.m_rA; + _this.m_rB; + _this.m_localCenterA; + _this.m_localCenterB; + _this.m_invMassA; + _this.m_invMassB; + _this.m_invIA; + _this.m_invIB; + _this.m_mass = new Mat33(); + return _this; + } + WeldJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + referenceAngle: this.m_referenceAngle + }; + }; + WeldJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new WeldJoint2(data); + return joint; + }; + WeldJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; + } + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; + } + }; + WeldJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + WeldJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + WeldJoint2.prototype.getReferenceAngle = function() { + return this.m_referenceAngle; + }; + WeldJoint2.prototype.setFrequency = function(hz) { + this.m_frequencyHz = hz; + }; + WeldJoint2.prototype.getFrequency = function() { + return this.m_frequencyHz; + }; + WeldJoint2.prototype.setDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + WeldJoint2.prototype.getDampingRatio = function() { + return this.m_dampingRatio; + }; + WeldJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + WeldJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + WeldJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); + }; + WeldJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_impulse.z; + }; + WeldJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var K = new Mat33(); + K.ex.x = mA + mB + this.m_rA.y * this.m_rA.y * iA + this.m_rB.y * this.m_rB.y * iB; + K.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; + K.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; + K.ex.y = K.ey.x; + K.ey.y = mA + mB + this.m_rA.x * this.m_rA.x * iA + this.m_rB.x * this.m_rB.x * iB; + K.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; + K.ex.z = K.ez.x; + K.ey.z = K.ez.y; + K.ez.z = iA + iB; + if (this.m_frequencyHz > 0) { + K.getInverse22(this.m_mass); + var invM = iA + iB; + var m = invM > 0 ? 1 / invM : 0; + var C = aB - aA - this.m_referenceAngle; + var omega = 2 * math_PI$1 * this.m_frequencyHz; + var d2 = 2 * m * this.m_dampingRatio * omega; + var k = m * omega * omega; + var h = step.dt; + this.m_gamma = h * (d2 + h * k); + this.m_gamma = this.m_gamma != 0 ? 1 / this.m_gamma : 0; + this.m_bias = C * h * k * this.m_gamma; + invM += this.m_gamma; + this.m_mass.ez.z = invM != 0 ? 1 / invM : 0; + } else if (K.ez.z == 0) { + K.getInverse22(this.m_mass); + this.m_gamma = 0; + this.m_bias = 0; + } else { + K.getSymInverse33(this.m_mass); + this.m_gamma = 0; + this.m_bias = 0; + } + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + var P3 = Vec2.neo(this.m_impulse.x, this.m_impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_impulse.z); + } else { + this.m_impulse.setZero(); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + WeldJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + if (this.m_frequencyHz > 0) { + var Cdot2 = wB - wA; + var impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z); + this.m_impulse.z += impulse2; + wA -= iA * impulse2; + wB += iB * impulse2; + var Cdot1 = Vec2.zero(); + Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1)); + this.m_impulse.x += impulse1.x; + this.m_impulse.y += impulse1.y; + var P3 = Vec2.clone(impulse1); + vA2.subMul(mA, P3); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(mB, P3); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, P3); + } else { + var Cdot1 = Vec2.zero(); + Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var Cdot2 = wB - wA; + var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); + var impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot)); + this.m_impulse.add(impulse); + var P3 = Vec2.neo(impulse.x, impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + impulse.z); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + WeldJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var positionError; + var angularError; + var K = new Mat33(); + K.ex.x = mA + mB + rA2.y * rA2.y * iA + rB2.y * rB2.y * iB; + K.ey.x = -rA2.y * rA2.x * iA - rB2.y * rB2.x * iB; + K.ez.x = -rA2.y * iA - rB2.y * iB; + K.ex.y = K.ey.x; + K.ey.y = mA + mB + rA2.x * rA2.x * iA + rB2.x * rB2.x * iB; + K.ez.y = rA2.x * iA + rB2.x * iB; + K.ex.z = K.ez.x; + K.ey.z = K.ez.y; + K.ez.z = iA + iB; + if (this.m_frequencyHz > 0) { + var C1 = Vec2.zero(); + C1.addCombine(1, cB2, 1, rB2); + C1.subCombine(1, cA2, 1, rA2); + positionError = C1.length(); + angularError = 0; + var P3 = Vec2.neg(K.solve22(C1)); + cA2.subMul(mA, P3); + aA -= iA * Vec2.crossVec2Vec2(rA2, P3); + cB2.addMul(mB, P3); + aB += iB * Vec2.crossVec2Vec2(rB2, P3); + } else { + var C1 = Vec2.zero(); + C1.addCombine(1, cB2, 1, rB2); + C1.subCombine(1, cA2, 1, rA2); + var C2 = aB - aA - this.m_referenceAngle; + positionError = C1.length(); + angularError = math_abs$1(C2); + var C = new Vec3(C1.x, C1.y, C2); + var impulse = new Vec3(); + if (K.ez.z > 0) { + impulse = Vec3.neg(K.solve33(C)); + } else { + var impulse2 = Vec2.neg(K.solve22(C1)); + impulse.set(impulse2.x, impulse2.y, 0); + } + var P3 = Vec2.neo(impulse.x, impulse.y); + cA2.subMul(mA, P3); + aA -= iA * (Vec2.crossVec2Vec2(rA2, P3) + impulse.z); + cB2.addMul(mB, P3); + aB += iB * (Vec2.crossVec2Vec2(rB2, P3) + impulse.z); + } + this.m_bodyA.c_position.c = cA2; + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c = cB2; + this.m_bodyB.c_position.a = aB; + return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; + }; + WeldJoint2.TYPE = "weld-joint"; + return WeldJoint2; + }(Joint) + ); + var math_abs = Math.abs; + var math_PI = Math.PI; + var DEFAULTS = { + enableMotor: false, + maxMotorTorque: 0, + motorSpeed: 0, + frequencyHz: 2, + dampingRatio: 0.7 + }; + var WheelJoint = ( + /** @class */ + function(_super) { + __extends(WheelJoint2, _super); + function WheelJoint2(def, bodyA, bodyB, anchor, axis) { + var _this = this; + if (!(_this instanceof WheelJoint2)) { + return new WheelJoint2(def, bodyA, bodyB, anchor, axis); + } + def = options(def, DEFAULTS); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_ax = Vec2.zero(); + _this.m_ay = Vec2.zero(); + _this.m_type = WheelJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + if (Vec2.isValid(axis)) { + _this.m_localXAxisA = bodyA.getLocalVector(axis); + } else if (Vec2.isValid(def.localAxisA)) { + _this.m_localXAxisA = Vec2.clone(def.localAxisA); + } else if (Vec2.isValid(def.localAxis)) { + _this.m_localXAxisA = Vec2.clone(def.localAxis); + } else { + _this.m_localXAxisA = Vec2.neo(1, 0); + } + _this.m_localYAxisA = Vec2.crossNumVec2(1, _this.m_localXAxisA); + _this.m_mass = 0; + _this.m_impulse = 0; + _this.m_motorMass = 0; + _this.m_motorImpulse = 0; + _this.m_springMass = 0; + _this.m_springImpulse = 0; + _this.m_maxMotorTorque = def.maxMotorTorque; + _this.m_motorSpeed = def.motorSpeed; + _this.m_enableMotor = def.enableMotor; + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_bias = 0; + _this.m_gamma = 0; + return _this; + } + WheelJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + enableMotor: this.m_enableMotor, + maxMotorTorque: this.m_maxMotorTorque, + motorSpeed: this.m_motorSpeed, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + localAxisA: this.m_localXAxisA + }; + }; + WheelJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new WheelJoint2(data); + return joint; + }; + WheelJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (def.localAxisA) { + this.m_localXAxisA.setVec2(def.localAxisA); + this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1, def.localAxisA)); + } + if (def.enableMotor !== void 0) { + this.m_enableMotor = def.enableMotor; + } + if (Number.isFinite(def.maxMotorTorque)) { + this.m_maxMotorTorque = def.maxMotorTorque; + } + if (Number.isFinite(def.motorSpeed)) { + this.m_motorSpeed = def.motorSpeed; + } + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; + } + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; + } + }; + WheelJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + WheelJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + WheelJoint2.prototype.getLocalAxisA = function() { + return this.m_localXAxisA; + }; + WheelJoint2.prototype.getJointTranslation = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + var pA2 = bA.getWorldPoint(this.m_localAnchorA); + var pB2 = bB.getWorldPoint(this.m_localAnchorB); + var d2 = Vec2.sub(pB2, pA2); + var axis = bA.getWorldVector(this.m_localXAxisA); + var translation2 = Vec2.dot(d2, axis); + return translation2; + }; + WheelJoint2.prototype.getJointSpeed = function() { + var wA = this.m_bodyA.m_angularVelocity; + var wB = this.m_bodyB.m_angularVelocity; + return wB - wA; + }; + WheelJoint2.prototype.isMotorEnabled = function() { + return this.m_enableMotor; + }; + WheelJoint2.prototype.enableMotor = function(flag) { + if (flag == this.m_enableMotor) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableMotor = flag; + }; + WheelJoint2.prototype.setMotorSpeed = function(speed) { + if (speed == this.m_motorSpeed) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_motorSpeed = speed; + }; + WheelJoint2.prototype.getMotorSpeed = function() { + return this.m_motorSpeed; + }; + WheelJoint2.prototype.setMaxMotorTorque = function(torque) { + if (torque == this.m_maxMotorTorque) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_maxMotorTorque = torque; + }; + WheelJoint2.prototype.getMaxMotorTorque = function() { + return this.m_maxMotorTorque; + }; + WheelJoint2.prototype.getMotorTorque = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + WheelJoint2.prototype.setSpringFrequencyHz = function(hz) { + this.m_frequencyHz = hz; + }; + WheelJoint2.prototype.getSpringFrequencyHz = function() { + return this.m_frequencyHz; + }; + WheelJoint2.prototype.setSpringDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + WheelJoint2.prototype.getSpringDampingRatio = function() { + return this.m_dampingRatio; + }; + WheelJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + WheelJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + WheelJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt); + }; + WheelJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + WheelJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.zero(); + d2.addCombine(1, cB2, 1, rB2); + d2.subCombine(1, cA2, 1, rA2); + { + this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA); + this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_ay); + this.m_sBy = Vec2.crossVec2Vec2(rB2, this.m_ay); + this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy * this.m_sBy; + if (this.m_mass > 0) { + this.m_mass = 1 / this.m_mass; + } + } + this.m_springMass = 0; + this.m_bias = 0; + this.m_gamma = 0; + if (this.m_frequencyHz > 0) { + this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA); + this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_ax); + this.m_sBx = Vec2.crossVec2Vec2(rB2, this.m_ax); + var invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx * this.m_sBx; + if (invMass > 0) { + this.m_springMass = 1 / invMass; + var C = Vec2.dot(d2, this.m_ax); + var omega = 2 * math_PI * this.m_frequencyHz; + var damp = 2 * this.m_springMass * this.m_dampingRatio * omega; + var k = this.m_springMass * omega * omega; + var h = step.dt; + this.m_gamma = h * (damp + h * k); + if (this.m_gamma > 0) { + this.m_gamma = 1 / this.m_gamma; + } + this.m_bias = C * h * k * this.m_gamma; + this.m_springMass = invMass + this.m_gamma; + if (this.m_springMass > 0) { + this.m_springMass = 1 / this.m_springMass; + } + } + } else { + this.m_springImpulse = 0; + } + if (this.m_enableMotor) { + this.m_motorMass = iA + iB; + if (this.m_motorMass > 0) { + this.m_motorMass = 1 / this.m_motorMass; + } + } else { + this.m_motorMass = 0; + this.m_motorImpulse = 0; + } + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + this.m_springImpulse *= step.dtRatio; + this.m_motorImpulse *= step.dtRatio; + var P3 = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax); + var LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse; + var LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse; + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * LA; + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * LB; + } else { + this.m_impulse = 0; + this.m_springImpulse = 0; + this.m_motorImpulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + WheelJoint2.prototype.solveVelocityConstraints = function(step) { + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + { + var Cdot = Vec2.dot(this.m_ax, vB2) - Vec2.dot(this.m_ax, vA2) + this.m_sBx * wB - this.m_sAx * wA; + var impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse); + this.m_springImpulse += impulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_ax); + var LA = impulse * this.m_sAx; + var LB = impulse * this.m_sBx; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + { + var Cdot = wB - wA - this.m_motorSpeed; + var impulse = -this.m_motorMass * Cdot; + var oldImpulse = this.m_motorImpulse; + var maxImpulse = step.dt * this.m_maxMotorTorque; + this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + { + var Cdot = Vec2.dot(this.m_ay, vB2) - Vec2.dot(this.m_ay, vA2) + this.m_sBy * wB - this.m_sAy * wA; + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_ay); + var LA = impulse * this.m_sAy; + var LB = impulse * this.m_sBy; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + WheelJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.zero(); + d2.addCombine(1, cB2, 1, rB2); + d2.subCombine(1, cA2, 1, rA2); + var ay = Rot.mulVec2(qA, this.m_localYAxisA); + var sAy = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), ay); + var sBy = Vec2.crossVec2Vec2(rB2, ay); + var C = Vec2.dot(d2, ay); + 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; + var impulse = k != 0 ? -C / k : 0; + var P3 = Vec2.mulNumVec2(impulse, ay); + var LA = impulse * sAy; + var LB = impulse * sBy; + cA2.subMul(this.m_invMassA, P3); + aA -= this.m_invIA * LA; + cB2.addMul(this.m_invMassB, P3); + aB += this.m_invIB * LB; + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return math_abs(C) <= SettingsInternal.linearSlop; + }; + WheelJoint2.TYPE = "wheel-joint"; + return WheelJoint2; + }(Joint) + ); + var _a; + var SID = 0; + var SERIALIZE_REF_TYPES = { + "World": World, + "Body": Body, + "Joint": Joint, + "Fixture": Fixture, + "Shape": Shape + }; + var DESERIALIZE_BY_REF_TYPE = { + "Vec2": Vec2, + "Vec3": Vec3, + "World": World, + "Body": Body, + "Joint": Joint, + "Fixture": Fixture, + "Shape": Shape + }; + var DESERIALIZE_BY_TYPE_FIELD = (_a = {}, _a[Body.STATIC] = Body, _a[Body.DYNAMIC] = Body, _a[Body.KINEMATIC] = Body, _a[ChainShape.TYPE] = ChainShape, // [BoxShape.TYPE]: BoxShape, + _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); + var DEFAULT_OPTIONS = { + rootClass: World, + preSerialize: function(obj) { + return obj; + }, + postSerialize: function(data, obj) { + return data; + }, + preDeserialize: function(data) { + return data; + }, + postDeserialize: function(obj, data) { + return obj; + } + }; + var Serializer = ( + /** @class */ + /* @__PURE__ */ function() { + function Serializer2(options2) { + var _this = this; + this.toJson = function(root) { + var preSerialize = _this.options.preSerialize; + var postSerialize = _this.options.postSerialize; + var json = []; + var refQueue = [root]; + var refMemoById = {}; + function addToRefQueue(value, typeName) { + value.__sid = value.__sid || ++SID; + if (!refMemoById[value.__sid]) { + refQueue.push(value); + var index = json.length + refQueue.length; + var ref = { + refIndex: index, + refType: typeName + }; + refMemoById[value.__sid] = ref; + } + return refMemoById[value.__sid]; + } + function serializeWithHooks(obj2) { + obj2 = preSerialize(obj2); + var data = obj2._serialize(); + data = postSerialize(data, obj2); + return data; + } + function traverse(value, noRefType) { + if (noRefType === void 0) { + noRefType = false; + } + if (typeof value !== "object" || value === null) { + return value; + } + if (typeof value._serialize === "function") { + if (!noRefType) { + for (var typeName in SERIALIZE_REF_TYPES) { + if (value instanceof SERIALIZE_REF_TYPES[typeName]) { + return addToRefQueue(value, typeName); + } + } + } + value = serializeWithHooks(value); + } + if (Array.isArray(value)) { + var newValue = []; + for (var key = 0; key < value.length; key++) { + newValue[key] = traverse(value[key]); + } + value = newValue; + } else { + var newValue = {}; + for (var key in value) { + if (value.hasOwnProperty(key)) { + newValue[key] = traverse(value[key]); + } + } + value = newValue; + } + return value; + } + while (refQueue.length) { + var obj = refQueue.shift(); + var str = traverse(obj, true); + json.push(str); + } + return json; + }; + this.fromJson = function(json) { + var preDeserialize = _this.options.preDeserialize; + var postDeserialize = _this.options.postDeserialize; + var rootClass = _this.options.rootClass; + var deserializedRefMemoByIndex = {}; + function deserializeWithHooks(classHint, data, context) { + if (!classHint || !classHint._deserialize) { + classHint = DESERIALIZE_BY_TYPE_FIELD[data.type]; + } + var deserializer = classHint && classHint._deserialize; + if (!deserializer) { + return; + } + data = preDeserialize(data); + var classDeserializeFn = classHint._deserialize; + var obj = classDeserializeFn(data, context, deserializeChild); + obj = postDeserialize(obj, data); + return obj; + } + function deserializeChild(classHint, dataOrRef, context) { + var isRefObject = dataOrRef.refIndex && dataOrRef.refType; + if (!isRefObject) { + return deserializeWithHooks(classHint, dataOrRef, context); + } + var ref = dataOrRef; + if (DESERIALIZE_BY_REF_TYPE[ref.refType]) { + classHint = DESERIALIZE_BY_REF_TYPE[ref.refType]; + } + var refIndex = ref.refIndex; + if (!deserializedRefMemoByIndex[refIndex]) { + var data = json[refIndex]; + var obj = deserializeWithHooks(classHint, data, context); + deserializedRefMemoByIndex[refIndex] = obj; + } + return deserializedRefMemoByIndex[refIndex]; + } + var root = deserializeWithHooks(rootClass, json[0], null); + return root; + }; + this.options = __assign(__assign({}, DEFAULT_OPTIONS), options2); + } + return Serializer2; + }() + ); + var worldSerializer = new Serializer({ + rootClass: World + }); + Serializer.fromJson = worldSerializer.fromJson; + Serializer.toJson = worldSerializer.toJson; + var Testbed = ( + /** @class */ + function() { + function Testbed2() { + this.width = 80; + this.height = 60; + this.x = 0; + this.y = -10; + this.scaleY = -1; + this.hz = 60; + this.speed = 1; + this.background = "#222222"; + this.activeKeys = {}; + this.step = function(dt, t) { + return; + }; + this.keydown = function(keyCode, label) { + return; + }; + this.keyup = function(keyCode, label) { + return; + }; + } + Testbed2.mount = function(options2) { + throw new Error("Not implemented"); + }; + Testbed2.start = function(world) { + var testbed2 = Testbed2.mount(); + testbed2.start(world); + return testbed2; + }; + Testbed2.prototype.color = function(r, g, b2) { + r = r * 256 | 0; + g = g * 256 | 0; + b2 = b2 * 256 | 0; + return "rgb(" + r + ", " + g + ", " + b2 + ")"; + }; + return Testbed2; + }() + ); + function testbed(a2, b2) { + var callback; + var options2; + if (typeof a2 === "function") { + callback = a2; + options2 = b2; + } else if (typeof b2 === "function") { + callback = b2; + options2 = a2; + } else { + options2 = a2 !== null && a2 !== void 0 ? a2 : b2; + } + var testbed2 = Testbed.mount(options2); + if (callback) { + var world = callback(testbed2) || testbed2.world; + testbed2.start(world); + } else { + return testbed2; + } + } + var BoxShape = ( + /** @class */ + function(_super) { + __extends(BoxShape2, _super); + function BoxShape2(halfWidth, halfHeight, center2, angle) { + var _this = this; + if (!(_this instanceof BoxShape2)) { + return new BoxShape2(halfWidth, halfHeight, center2, angle); + } + _this = _super.call(this) || this; + _this._setAsBox(halfWidth, halfHeight, center2, angle); + return _this; + } + BoxShape2.TYPE = "polygon"; + return BoxShape2; + }(PolygonShape) + ); + var Box = BoxShape; + Contact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact); + function CircleCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + CollideCircles(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2); + } + var pA = vec2(0, 0); + var pB = vec2(0, 0); + var CollideCircles = function(manifold, circleA, xfA2, circleB, xfB2) { + manifold.pointCount = 0; + transformVec2(pA, xfA2, circleA.m_p); + transformVec2(pB, xfB2, circleB.m_p); + var distSqr = distSqrVec2(pB, pA); + var rA2 = circleA.m_radius; + var rB2 = circleB.m_radius; + var radius = rA2 + rB2; + if (distSqr > radius * radius) { + return; + } + manifold.type = exports2.ManifoldType.e_circles; + copyVec2(manifold.localPoint, circleA.m_p); + zeroVec2(manifold.localNormal); + manifold.pointCount = 1; + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, 0, exports2.ContactFeatureType.e_vertex); + }; + Contact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact); + Contact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact); + function EdgeCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + var shapeA = fixtureA.getShape(); + var shapeB = fixtureB.getShape(); + CollideEdgeCircle(manifold, shapeA, xfA2, shapeB, xfB2); + } + function ChainCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + var chain = fixtureA.getShape(); + var edge = new EdgeShape(); + chain.getChildEdge(edge, indexA); + var shapeA = edge; + var shapeB = fixtureB.getShape(); + CollideEdgeCircle(manifold, shapeA, xfA2, shapeB, xfB2); + } + var e = vec2(0, 0); + var e1 = vec2(0, 0); + var e2 = vec2(0, 0); + var Q = vec2(0, 0); + var P = vec2(0, 0); + var n$2 = vec2(0, 0); + var CollideEdgeCircle = function(manifold, edgeA, xfA2, circleB, xfB2) { + manifold.pointCount = 0; + retransformVec2(Q, xfB2, xfA2, circleB.m_p); + var A = edgeA.m_vertex1; + var B = edgeA.m_vertex2; + subVec2(e, B, A); + var u = dotVec2(e, B) - dotVec2(e, Q); + var v3 = dotVec2(e, Q) - dotVec2(e, A); + var radius = edgeA.m_radius + circleB.m_radius; + if (v3 <= 0) { + copyVec2(P, A); + var dd_1 = distSqrVec2(Q, A); + if (dd_1 > radius * radius) { + return; + } + if (edgeA.m_hasVertex0) { + var A1 = edgeA.m_vertex0; + var B1 = A; + subVec2(e1, B1, A1); + var u1 = dotVec2(e1, B1) - dotVec2(e1, Q); + if (u1 > 0) { + return; + } + } + manifold.type = exports2.ManifoldType.e_circles; + zeroVec2(manifold.localNormal); + copyVec2(manifold.localPoint, P); + manifold.pointCount = 1; + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, 0, exports2.ContactFeatureType.e_vertex); + return; + } + if (u <= 0) { + copyVec2(P, B); + var dd_2 = distSqrVec2(Q, P); + if (dd_2 > radius * radius) { + return; + } + if (edgeA.m_hasVertex3) { + var B2 = edgeA.m_vertex3; + var A2 = B; + subVec2(e2, B2, A2); + var v22 = dotVec2(e2, Q) - dotVec2(e2, A2); + if (v22 > 0) { + return; + } + } + manifold.type = exports2.ManifoldType.e_circles; + zeroVec2(manifold.localNormal); + copyVec2(manifold.localPoint, P); + manifold.pointCount = 1; + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(1, exports2.ContactFeatureType.e_vertex, 0, exports2.ContactFeatureType.e_vertex); + return; + } + var den = lengthSqrVec2(e); + combine2Vec2(P, u / den, A, v3 / den, B); + var dd = distSqrVec2(Q, P); + if (dd > radius * radius) { + return; + } + crossNumVec2(n$2, 1, e); + if (dotVec2(n$2, Q) - dotVec2(n$2, A) < 0) { + negVec2(n$2); + } + normalizeVec2(n$2); + manifold.type = exports2.ManifoldType.e_faceA; + copyVec2(manifold.localNormal, n$2); + copyVec2(manifold.localPoint, A); + manifold.pointCount = 1; + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, exports2.ContactFeatureType.e_face, 0, exports2.ContactFeatureType.e_vertex); + }; + var incidentEdge = [new ClipVertex(), new ClipVertex()]; + var clipPoints1$1 = [new ClipVertex(), new ClipVertex()]; + var clipPoints2$1 = [new ClipVertex(), new ClipVertex()]; + var clipSegmentToLineNormal = vec2(0, 0); + var v1 = vec2(0, 0); + var n$1 = vec2(0, 0); + var xf$1 = transform(0, 0, 0); + var v11 = vec2(0, 0); + var v12 = vec2(0, 0); + var localTangent = vec2(0, 0); + var localNormal = vec2(0, 0); + var planePoint = vec2(0, 0); + var tangent = vec2(0, 0); + var normal$1 = vec2(0, 0); + var normal1$1 = vec2(0, 0); + Contact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact); + function PolygonContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + CollidePolygons(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2); + } + function findMaxSeparation(poly1, xf1, poly2, xf2, output2) { + var count1 = poly1.m_count; + var count2 = poly2.m_count; + var n1s = poly1.m_normals; + var v1s = poly1.m_vertices; + var v2s = poly2.m_vertices; + detransformTransform(xf$1, xf2, xf1); + var bestIndex = 0; + var maxSeparation2 = -Infinity; + for (var i = 0; i < count1; ++i) { + rotVec2(n$1, xf$1.q, n1s[i]); + transformVec2(v1, xf$1, v1s[i]); + var si = Infinity; + for (var j = 0; j < count2; ++j) { + var sij = dotVec2(n$1, v2s[j]) - dotVec2(n$1, v1); + if (sij < si) { + si = sij; + } + } + if (si > maxSeparation2) { + maxSeparation2 = si; + bestIndex = i; + } + } + output2.maxSeparation = maxSeparation2; + output2.bestIndex = bestIndex; + } + function findIncidentEdge(clipVertex, poly1, xf1, edge12, poly2, xf2) { + var normals1 = poly1.m_normals; + var count2 = poly2.m_count; + var vertices2 = poly2.m_vertices; + var normals2 = poly2.m_normals; + rerotVec2(normal1$1, xf2.q, xf1.q, normals1[edge12]); + var index = 0; + var minDot = Infinity; + for (var i = 0; i < count2; ++i) { + var dot = dotVec2(normal1$1, normals2[i]); + if (dot < minDot) { + minDot = dot; + index = i; + } + } + var i1 = index; + var i2 = i1 + 1 < count2 ? i1 + 1 : 0; + transformVec2(clipVertex[0].v, xf2, vertices2[i1]); + clipVertex[0].id.setFeatures(edge12, exports2.ContactFeatureType.e_face, i1, exports2.ContactFeatureType.e_vertex); + transformVec2(clipVertex[1].v, xf2, vertices2[i2]); + clipVertex[1].id.setFeatures(edge12, exports2.ContactFeatureType.e_face, i2, exports2.ContactFeatureType.e_vertex); + } + var maxSeparation = { + maxSeparation: 0, + bestIndex: 0 + }; + var CollidePolygons = function(manifold, polyA, xfA2, polyB, xfB2) { + manifold.pointCount = 0; + var totalRadius = polyA.m_radius + polyB.m_radius; + findMaxSeparation(polyA, xfA2, polyB, xfB2, maxSeparation); + var edgeA = maxSeparation.bestIndex; + var separationA = maxSeparation.maxSeparation; + if (separationA > totalRadius) + return; + findMaxSeparation(polyB, xfB2, polyA, xfA2, maxSeparation); + var edgeB = maxSeparation.bestIndex; + var separationB = maxSeparation.maxSeparation; + if (separationB > totalRadius) + return; + var poly1; + var poly2; + var xf1; + var xf2; + var edge12; + var flip; + var k_tol = 0.1 * SettingsInternal.linearSlop; + if (separationB > separationA + k_tol) { + poly1 = polyB; + poly2 = polyA; + xf1 = xfB2; + xf2 = xfA2; + edge12 = edgeB; + manifold.type = exports2.ManifoldType.e_faceB; + flip = true; + } else { + poly1 = polyA; + poly2 = polyB; + xf1 = xfA2; + xf2 = xfB2; + edge12 = edgeA; + manifold.type = exports2.ManifoldType.e_faceA; + flip = false; + } + incidentEdge[0].recycle(), incidentEdge[1].recycle(); + findIncidentEdge(incidentEdge, poly1, xf1, edge12, poly2, xf2); + var count1 = poly1.m_count; + var vertices1 = poly1.m_vertices; + var iv1 = edge12; + var iv2 = edge12 + 1 < count1 ? edge12 + 1 : 0; + copyVec2(v11, vertices1[iv1]); + copyVec2(v12, vertices1[iv2]); + subVec2(localTangent, v12, v11); + normalizeVec2(localTangent); + crossVec2Num(localNormal, localTangent, 1); + combine2Vec2(planePoint, 0.5, v11, 0.5, v12); + rotVec2(tangent, xf1.q, localTangent); + crossVec2Num(normal$1, tangent, 1); + transformVec2(v11, xf1, v11); + transformVec2(v12, xf1, v12); + var frontOffset = dotVec2(normal$1, v11); + var sideOffset1 = -dotVec2(tangent, v11) + totalRadius; + var sideOffset2 = dotVec2(tangent, v12) + totalRadius; + clipPoints1$1[0].recycle(), clipPoints1$1[1].recycle(); + clipPoints2$1[0].recycle(), clipPoints2$1[1].recycle(); + setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y); + var np1 = clipSegmentToLine(clipPoints1$1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1); + if (np1 < 2) { + return; + } + setVec2(clipSegmentToLineNormal, tangent.x, tangent.y); + var np2 = clipSegmentToLine(clipPoints2$1, clipPoints1$1, clipSegmentToLineNormal, sideOffset2, iv2); + if (np2 < 2) { + return; + } + copyVec2(manifold.localNormal, localNormal); + copyVec2(manifold.localPoint, planePoint); + var pointCount = 0; + for (var i = 0; i < clipPoints2$1.length; ++i) { + var separation = dotVec2(normal$1, clipPoints2$1[i].v) - frontOffset; + if (separation <= totalRadius) { + var cp = manifold.points[pointCount]; + detransformVec2(cp.localPoint, xf2, clipPoints2$1[i].v); + cp.id.set(clipPoints2$1[i].id); + if (flip) { + cp.id.swapFeatures(); + } + ++pointCount; + } + } + manifold.pointCount = pointCount; + }; + Contact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact); + function PolygonCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + CollidePolygonCircle(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2); + } + var cLocal = vec2(0, 0); + var faceCenter = vec2(0, 0); + var CollidePolygonCircle = function(manifold, polygonA, xfA2, circleB, xfB2) { + manifold.pointCount = 0; + retransformVec2(cLocal, xfB2, xfA2, circleB.m_p); + var normalIndex = 0; + var separation = -Infinity; + var radius = polygonA.m_radius + circleB.m_radius; + var vertexCount = polygonA.m_count; + var vertices = polygonA.m_vertices; + var normals = polygonA.m_normals; + for (var i = 0; i < vertexCount; ++i) { + var s2 = dotVec2(normals[i], cLocal) - dotVec2(normals[i], vertices[i]); + if (s2 > radius) { + return; + } + if (s2 > separation) { + separation = s2; + normalIndex = i; + } + } + var vertIndex1 = normalIndex; + var vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0; + var v13 = vertices[vertIndex1]; + var v22 = vertices[vertIndex2]; + if (separation < EPSILON) { + manifold.pointCount = 1; + manifold.type = exports2.ManifoldType.e_faceA; + copyVec2(manifold.localNormal, normals[normalIndex]); + combine2Vec2(manifold.localPoint, 0.5, v13, 0.5, v22); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, 0, exports2.ContactFeatureType.e_vertex); + return; + } + var u1 = dotVec2(cLocal, v22) - dotVec2(cLocal, v13) - dotVec2(v13, v22) + dotVec2(v13, v13); + var u2 = dotVec2(cLocal, v13) - dotVec2(cLocal, v22) - dotVec2(v22, v13) + dotVec2(v22, v22); + if (u1 <= 0) { + if (distSqrVec2(cLocal, v13) > radius * radius) { + return; + } + manifold.pointCount = 1; + manifold.type = exports2.ManifoldType.e_faceA; + subVec2(manifold.localNormal, cLocal, v13); + normalizeVec2(manifold.localNormal); + copyVec2(manifold.localPoint, v13); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, 0, exports2.ContactFeatureType.e_vertex); + } else if (u2 <= 0) { + if (distSqrVec2(cLocal, v22) > radius * radius) { + return; + } + manifold.pointCount = 1; + manifold.type = exports2.ManifoldType.e_faceA; + subVec2(manifold.localNormal, cLocal, v22); + normalizeVec2(manifold.localNormal); + copyVec2(manifold.localPoint, v22); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, 0, exports2.ContactFeatureType.e_vertex); + } else { + combine2Vec2(faceCenter, 0.5, v13, 0.5, v22); + var separation_1 = dotVec2(cLocal, normals[vertIndex1]) - dotVec2(faceCenter, normals[vertIndex1]); + if (separation_1 > radius) { + return; + } + manifold.pointCount = 1; + manifold.type = exports2.ManifoldType.e_faceA; + copyVec2(manifold.localNormal, normals[vertIndex1]); + copyVec2(manifold.localPoint, faceCenter); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, 0, exports2.ContactFeatureType.e_vertex); + } + }; + var math_min = Math.min; + Contact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact); + Contact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact); + function EdgePolygonContact(manifold, xfA2, fA, indexA, xfB2, fB, indexB) { + CollideEdgePolygon(manifold, fA.getShape(), xfA2, fB.getShape(), xfB2); + } + var edge_reuse = new EdgeShape(); + function ChainPolygonContact(manifold, xfA2, fA, indexA, xfB2, fB, indexB) { + var chain = fA.getShape(); + chain.getChildEdge(edge_reuse, indexA); + CollideEdgePolygon(manifold, edge_reuse, xfA2, fB.getShape(), xfB2); + } + var EPAxisType; + (function(EPAxisType2) { + EPAxisType2[EPAxisType2["e_unknown"] = -1] = "e_unknown"; + EPAxisType2[EPAxisType2["e_edgeA"] = 1] = "e_edgeA"; + EPAxisType2[EPAxisType2["e_edgeB"] = 2] = "e_edgeB"; + })(EPAxisType || (EPAxisType = {})); + var VertexType; + (function(VertexType2) { + VertexType2[VertexType2["e_isolated"] = 0] = "e_isolated"; + VertexType2[VertexType2["e_concave"] = 1] = "e_concave"; + VertexType2[VertexType2["e_convex"] = 2] = "e_convex"; + })(VertexType || (VertexType = {})); + var EPAxis = ( + /** @class */ + /* @__PURE__ */ function() { + function EPAxis2() { + } + return EPAxis2; + }() + ); + var TempPolygon = ( + /** @class */ + /* @__PURE__ */ function() { + function TempPolygon2() { + this.vertices = []; + this.normals = []; + this.count = 0; + for (var i = 0; i < SettingsInternal.maxPolygonVertices; i++) { + this.vertices.push(vec2(0, 0)); + this.normals.push(vec2(0, 0)); + } + } + return TempPolygon2; + }() + ); + var ReferenceFace = ( + /** @class */ + function() { + function ReferenceFace2() { + this.v1 = vec2(0, 0); + this.v2 = vec2(0, 0); + this.normal = vec2(0, 0); + this.sideNormal1 = vec2(0, 0); + this.sideNormal2 = vec2(0, 0); + } + ReferenceFace2.prototype.recycle = function() { + zeroVec2(this.v1); + zeroVec2(this.v2); + zeroVec2(this.normal); + zeroVec2(this.sideNormal1); + zeroVec2(this.sideNormal2); + }; + return ReferenceFace2; + }() + ); + var clipPoints1 = [new ClipVertex(), new ClipVertex()]; + var clipPoints2 = [new ClipVertex(), new ClipVertex()]; + var ie = [new ClipVertex(), new ClipVertex()]; + var edgeAxis = new EPAxis(); + var polygonAxis = new EPAxis(); + var polygonBA = new TempPolygon(); + var rf = new ReferenceFace(); + var centroidB = vec2(0, 0); + var edge0 = vec2(0, 0); + var edge1 = vec2(0, 0); + var edge2 = vec2(0, 0); + var xf = transform(0, 0, 0); + var normal = vec2(0, 0); + var normal0 = vec2(0, 0); + var normal1 = vec2(0, 0); + var normal2 = vec2(0, 0); + var lowerLimit = vec2(0, 0); + var upperLimit = vec2(0, 0); + var perp = vec2(0, 0); + var n = vec2(0, 0); + var CollideEdgePolygon = function(manifold, edgeA, xfA2, polygonB, xfB2) { + detransformTransform(xf, xfA2, xfB2); + transformVec2(centroidB, xf, polygonB.m_centroid); + var v0 = edgeA.m_vertex0; + var v13 = edgeA.m_vertex1; + var v22 = edgeA.m_vertex2; + var v3 = edgeA.m_vertex3; + var hasVertex0 = edgeA.m_hasVertex0; + var hasVertex3 = edgeA.m_hasVertex3; + subVec2(edge1, v22, v13); + normalizeVec2(edge1); + setVec2(normal1, edge1.y, -edge1.x); + var offset1 = dotVec2(normal1, centroidB) - dotVec2(normal1, v13); + var offset0 = 0; + var offset2 = 0; + var convex1 = false; + var convex2 = false; + zeroVec2(normal0); + zeroVec2(normal2); + if (hasVertex0) { + subVec2(edge0, v13, v0); + normalizeVec2(edge0); + setVec2(normal0, edge0.y, -edge0.x); + convex1 = crossVec2Vec2(edge0, edge1) >= 0; + offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0); + } + if (hasVertex3) { + subVec2(edge2, v3, v22); + normalizeVec2(edge2); + setVec2(normal2, edge2.y, -edge2.x); + convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0; + offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v22); + } + var front; + zeroVec2(normal); + zeroVec2(lowerLimit); + zeroVec2(upperLimit); + if (hasVertex0 && hasVertex3) { + if (convex1 && convex2) { + front = offset0 >= 0 || offset1 >= 0 || offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal0); + copyVec2(upperLimit, normal2); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal1); + scaleVec2(upperLimit, -1, normal1); + } + } else if (convex1) { + front = offset0 >= 0 || offset1 >= 0 && offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal0); + copyVec2(upperLimit, normal1); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal2); + scaleVec2(upperLimit, -1, normal1); + } + } else if (convex2) { + front = offset2 >= 0 || offset0 >= 0 && offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal1); + copyVec2(upperLimit, normal2); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal1); + scaleVec2(upperLimit, -1, normal0); + } + } else { + front = offset0 >= 0 && offset1 >= 0 && offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal1); + copyVec2(upperLimit, normal1); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal2); + scaleVec2(upperLimit, -1, normal0); + } + } + } else if (hasVertex0) { + if (convex1) { + front = offset0 >= 0 || offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal0); + scaleVec2(upperLimit, -1, normal1); + } else { + scaleVec2(normal, -1, normal1); + copyVec2(lowerLimit, normal1); + scaleVec2(upperLimit, -1, normal1); + } + } else { + front = offset0 >= 0 && offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal1); + scaleVec2(upperLimit, -1, normal1); + } else { + scaleVec2(normal, -1, normal1); + copyVec2(lowerLimit, normal1); + scaleVec2(upperLimit, -1, normal0); + } + } + } else if (hasVertex3) { + if (convex2) { + front = offset1 >= 0 || offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + scaleVec2(lowerLimit, -1, normal1); + copyVec2(upperLimit, normal2); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal1); + copyVec2(upperLimit, normal1); + } + } else { + front = offset1 >= 0 && offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + scaleVec2(lowerLimit, -1, normal1); + copyVec2(upperLimit, normal1); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal2); + copyVec2(upperLimit, normal1); + } + } + } else { + front = offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + scaleVec2(lowerLimit, -1, normal1); + scaleVec2(upperLimit, -1, normal1); + } else { + scaleVec2(normal, -1, normal1); + copyVec2(lowerLimit, normal1); + copyVec2(upperLimit, normal1); + } + } + polygonBA.count = polygonB.m_count; + for (var i = 0; i < polygonB.m_count; ++i) { + transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]); + rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]); + } + var radius = polygonB.m_radius + edgeA.m_radius; + manifold.pointCount = 0; + { + edgeAxis.type = EPAxisType.e_edgeA; + edgeAxis.index = front ? 0 : 1; + edgeAxis.separation = Infinity; + for (var i = 0; i < polygonBA.count; ++i) { + var v4 = polygonBA.vertices[i]; + var s2 = dotVec2(normal, v4) - dotVec2(normal, v13); + if (s2 < edgeAxis.separation) { + edgeAxis.separation = s2; + } + } + } + if (edgeAxis.type == EPAxisType.e_unknown) { + return; + } + if (edgeAxis.separation > radius) { + return; + } + { + polygonAxis.type = EPAxisType.e_unknown; + polygonAxis.index = -1; + polygonAxis.separation = -Infinity; + setVec2(perp, -normal.y, normal.x); + for (var i = 0; i < polygonBA.count; ++i) { + scaleVec2(n, -1, polygonBA.normals[i]); + var s1 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v13); + var s22 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v22); + var s2 = math_min(s1, s22); + if (s2 > radius) { + polygonAxis.type = EPAxisType.e_edgeB; + polygonAxis.index = i; + polygonAxis.separation = s2; + break; + } + if (dotVec2(n, perp) >= 0) { + if (dotVec2(n, normal) - dotVec2(upperLimit, normal) < -SettingsInternal.angularSlop) { + continue; + } + } else { + if (dotVec2(n, normal) - dotVec2(lowerLimit, normal) < -SettingsInternal.angularSlop) { + continue; + } + } + if (s2 > polygonAxis.separation) { + polygonAxis.type = EPAxisType.e_edgeB; + polygonAxis.index = i; + polygonAxis.separation = s2; + } + } + } + if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) { + return; + } + var k_relativeTol = 0.98; + var k_absoluteTol = 1e-3; + var primaryAxis; + if (polygonAxis.type == EPAxisType.e_unknown) { + primaryAxis = edgeAxis; + } else if (polygonAxis.separation > k_relativeTol * edgeAxis.separation + k_absoluteTol) { + primaryAxis = polygonAxis; + } else { + primaryAxis = edgeAxis; + } + ie[0].recycle(), ie[1].recycle(); + if (primaryAxis.type == EPAxisType.e_edgeA) { + manifold.type = exports2.ManifoldType.e_faceA; + var bestIndex = 0; + var bestValue = dotVec2(normal, polygonBA.normals[0]); + for (var i = 1; i < polygonBA.count; ++i) { + var value = dotVec2(normal, polygonBA.normals[i]); + if (value < bestValue) { + bestValue = value; + bestIndex = i; + } + } + var i1 = bestIndex; + var i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0; + copyVec2(ie[0].v, polygonBA.vertices[i1]); + ie[0].id.setFeatures(0, exports2.ContactFeatureType.e_face, i1, exports2.ContactFeatureType.e_vertex); + copyVec2(ie[1].v, polygonBA.vertices[i2]); + ie[1].id.setFeatures(0, exports2.ContactFeatureType.e_face, i2, exports2.ContactFeatureType.e_vertex); + if (front) { + rf.i1 = 0; + rf.i2 = 1; + copyVec2(rf.v1, v13); + copyVec2(rf.v2, v22); + copyVec2(rf.normal, normal1); + } else { + rf.i1 = 1; + rf.i2 = 0; + copyVec2(rf.v1, v22); + copyVec2(rf.v2, v13); + scaleVec2(rf.normal, -1, normal1); + } + } else { + manifold.type = exports2.ManifoldType.e_faceB; + copyVec2(ie[0].v, v13); + ie[0].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, primaryAxis.index, exports2.ContactFeatureType.e_face); + copyVec2(ie[1].v, v22); + ie[1].id.setFeatures(0, exports2.ContactFeatureType.e_vertex, primaryAxis.index, exports2.ContactFeatureType.e_face); + rf.i1 = primaryAxis.index; + rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0; + copyVec2(rf.v1, polygonBA.vertices[rf.i1]); + copyVec2(rf.v2, polygonBA.vertices[rf.i2]); + copyVec2(rf.normal, polygonBA.normals[rf.i1]); + } + setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x); + setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y); + rf.sideOffset1 = dotVec2(rf.sideNormal1, rf.v1); + rf.sideOffset2 = dotVec2(rf.sideNormal2, rf.v2); + clipPoints1[0].recycle(), clipPoints1[1].recycle(); + clipPoints2[0].recycle(), clipPoints2[1].recycle(); + var np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1); + if (np1 < SettingsInternal.maxManifoldPoints) { + return; + } + var np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2); + if (np2 < SettingsInternal.maxManifoldPoints) { + return; + } + if (primaryAxis.type == EPAxisType.e_edgeA) { + copyVec2(manifold.localNormal, rf.normal); + copyVec2(manifold.localPoint, rf.v1); + } else { + copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]); + copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]); + } + var pointCount = 0; + for (var i = 0; i < SettingsInternal.maxManifoldPoints; ++i) { + var separation = dotVec2(rf.normal, clipPoints2[i].v) - dotVec2(rf.normal, rf.v1); + if (separation <= radius) { + var cp = manifold.points[pointCount]; if (primaryAxis.type == EPAxisType.e_edgeA) { - copyVec2(manifold.localNormal, rf.normal); - copyVec2(manifold.localPoint, rf.v1); - } - else { - copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]); - copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]); - } - var pointCount = 0; - for (var i = 0; i < SettingsInternal.maxManifoldPoints; ++i) { - var separation = dotVec2(rf.normal, clipPoints2[i].v) - dotVec2(rf.normal, rf.v1); - if (separation <= radius) { - var cp = manifold.points[pointCount]; // ManifoldPoint - if (primaryAxis.type == EPAxisType.e_edgeA) { - detransformVec2(cp.localPoint, xf, clipPoints2[i].v); - cp.id.set(clipPoints2[i].id); - } - else { - copyVec2(cp.localPoint, clipPoints2[i].v); - cp.id.set(clipPoints2[i].id); - cp.id.swapFeatures(); - } - ++pointCount; - } - } - manifold.pointCount = pointCount; - }; - - /** @hidden @deprecated Merged with main namespace */ - var internal = { - CollidePolygons: CollidePolygons, - Settings: Settings, - Sweep: Sweep, - Manifold: Manifold, - Distance: Distance, - TimeOfImpact: TimeOfImpact, - DynamicTree: DynamicTree, - stats: stats - }; - - var planck = /*#__PURE__*/Object.freeze({ - __proto__: null, - Math: math, - Serializer: Serializer, - Testbed: Testbed, - testbed: testbed, - Vec2: Vec2, - Vec3: Vec3, - Mat22: Mat22, - Mat33: Mat33, - Transform: Transform, - Rot: Rot, - AABB: AABB, - Shape: Shape, - FixtureProxy: FixtureProxy, - Fixture: Fixture, - Body: Body, - ContactEdge: ContactEdge, - mixFriction: mixFriction, - mixRestitution: mixRestitution, - VelocityConstraintPoint: VelocityConstraintPoint, - Contact: Contact, - JointEdge: JointEdge, - Joint: Joint, - World: World, - CircleShape: CircleShape, - Circle: Circle, - EdgeShape: EdgeShape, - Edge: Edge, - PolygonShape: PolygonShape, - Polygon: Polygon, - ChainShape: ChainShape, - Chain: Chain, - BoxShape: BoxShape, - Box: Box, - CollideCircles: CollideCircles, - CollideEdgeCircle: CollideEdgeCircle, - CollidePolygons: CollidePolygons, - CollidePolygonCircle: CollidePolygonCircle, - CollideEdgePolygon: CollideEdgePolygon, - DistanceJoint: DistanceJoint, - FrictionJoint: FrictionJoint, - GearJoint: GearJoint, - MotorJoint: MotorJoint, - MouseJoint: MouseJoint, - PrismaticJoint: PrismaticJoint, - PulleyJoint: PulleyJoint, - RevoluteJoint: RevoluteJoint, - RopeJoint: RopeJoint, - WeldJoint: WeldJoint, - WheelJoint: WheelJoint, - Settings: Settings, - SettingsInternal: SettingsInternal, - Sweep: Sweep, - get ManifoldType () { return exports.ManifoldType; }, - get ContactFeatureType () { return exports.ContactFeatureType; }, - get PointState () { return exports.PointState; }, - ClipVertex: ClipVertex, - Manifold: Manifold, - ManifoldPoint: ManifoldPoint, - ContactID: ContactID, - WorldManifold: WorldManifold, - getPointStates: getPointStates, - clipSegmentToLine: clipSegmentToLine, - DistanceInput: DistanceInput, - DistanceOutput: DistanceOutput, - SimplexCache: SimplexCache, - Distance: Distance, - DistanceProxy: DistanceProxy, - testOverlap: testOverlap, - ShapeCastInput: ShapeCastInput, - ShapeCastOutput: ShapeCastOutput, - ShapeCast: ShapeCast, - TOIInput: TOIInput, - get TOIOutputState () { return exports.TOIOutputState; }, - TOIOutput: TOIOutput, - TimeOfImpact: TimeOfImpact, - TreeNode: TreeNode, - DynamicTree: DynamicTree, - stats: stats, - internal: internal - }); - - exports.AABB = AABB; - exports.Body = Body; - exports.Box = Box; - exports.BoxShape = BoxShape; - exports.Chain = Chain; - exports.ChainShape = ChainShape; - exports.Circle = Circle; - exports.CircleShape = CircleShape; - exports.ClipVertex = ClipVertex; - exports.CollideCircles = CollideCircles; - exports.CollideEdgeCircle = CollideEdgeCircle; - exports.CollideEdgePolygon = CollideEdgePolygon; - exports.CollidePolygonCircle = CollidePolygonCircle; - exports.CollidePolygons = CollidePolygons; - exports.Contact = Contact; - exports.ContactEdge = ContactEdge; - exports.ContactID = ContactID; - exports.Distance = Distance; - exports.DistanceInput = DistanceInput; - exports.DistanceJoint = DistanceJoint; - exports.DistanceOutput = DistanceOutput; - exports.DistanceProxy = DistanceProxy; - exports.DynamicTree = DynamicTree; - exports.Edge = Edge; - exports.EdgeShape = EdgeShape; - exports.Fixture = Fixture; - exports.FixtureProxy = FixtureProxy; - exports.FrictionJoint = FrictionJoint; - exports.GearJoint = GearJoint; - exports.Joint = Joint; - exports.JointEdge = JointEdge; - exports.Manifold = Manifold; - exports.ManifoldPoint = ManifoldPoint; - exports.Mat22 = Mat22; - exports.Mat33 = Mat33; - exports.Math = math; - exports.MotorJoint = MotorJoint; - exports.MouseJoint = MouseJoint; - exports.Polygon = Polygon; - exports.PolygonShape = PolygonShape; - exports.PrismaticJoint = PrismaticJoint; - exports.PulleyJoint = PulleyJoint; - exports.RevoluteJoint = RevoluteJoint; - exports.RopeJoint = RopeJoint; - exports.Rot = Rot; - exports.Serializer = Serializer; - exports.Settings = Settings; - exports.SettingsInternal = SettingsInternal; - exports.Shape = Shape; - exports.ShapeCast = ShapeCast; - exports.ShapeCastInput = ShapeCastInput; - exports.ShapeCastOutput = ShapeCastOutput; - exports.SimplexCache = SimplexCache; - exports.Sweep = Sweep; - exports.TOIInput = TOIInput; - exports.TOIOutput = TOIOutput; - exports.Testbed = Testbed; - exports.TimeOfImpact = TimeOfImpact; - exports.Transform = Transform; - exports.TreeNode = TreeNode; - exports.Vec2 = Vec2; - exports.Vec3 = Vec3; - exports.VelocityConstraintPoint = VelocityConstraintPoint; - exports.WeldJoint = WeldJoint; - exports.WheelJoint = WheelJoint; - exports.World = World; - exports.WorldManifold = WorldManifold; - exports.clipSegmentToLine = clipSegmentToLine; - exports["default"] = planck; - exports.getPointStates = getPointStates; - exports.internal = internal; - exports.mixFriction = mixFriction; - exports.mixRestitution = mixRestitution; - exports.stats = stats; - exports.testOverlap = testOverlap; - exports.testbed = testbed; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); + detransformVec2(cp.localPoint, xf, clipPoints2[i].v); + cp.id.set(clipPoints2[i].id); + } else { + copyVec2(cp.localPoint, clipPoints2[i].v); + cp.id.set(clipPoints2[i].id); + cp.id.swapFeatures(); + } + ++pointCount; + } + } + manifold.pointCount = pointCount; + }; + var internal = { + CollidePolygons, + Settings, + Sweep, + Manifold, + Distance, + TimeOfImpact, + DynamicTree, + stats + }; + const planck = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + AABB, + Body, + Box, + BoxShape, + BroadPhase, + Chain, + ChainShape, + Circle, + CircleShape, + ClipVertex, + CollideCircles, + CollideEdgeCircle, + CollideEdgePolygon, + CollidePolygonCircle, + CollidePolygons, + Contact, + ContactEdge, + get ContactFeatureType() { + return exports2.ContactFeatureType; + }, + ContactID, + ContactImpulse, + Distance, + DistanceInput, + DistanceJoint, + DistanceOutput, + DistanceProxy, + DynamicTree, + Edge, + EdgeShape, + Fixture, + FixtureProxy, + FrictionJoint, + GearJoint, + Joint, + JointEdge, + Manifold, + ManifoldPoint, + get ManifoldType() { + return exports2.ManifoldType; + }, + Mat22, + Mat33, + Math: math, + MotorJoint, + MouseJoint, + get PointState() { + return exports2.PointState; + }, + Polygon, + PolygonShape, + PrismaticJoint, + PulleyJoint, + RevoluteJoint, + RopeJoint, + Rot, + Serializer, + Settings, + SettingsInternal, + Shape, + ShapeCast, + ShapeCastInput, + ShapeCastOutput, + SimplexCache, + Solver, + Sweep, + TOIInput, + TOIOutput, + get TOIOutputState() { + return exports2.TOIOutputState; + }, + Testbed, + TimeOfImpact, + TimeStep, + Transform, + TreeNode, + Vec2, + Vec3, + VelocityConstraintPoint, + WeldJoint, + WheelJoint, + World, + WorldManifold, + clipSegmentToLine, + getPointStates, + internal, + mixFriction, + mixRestitution, + stats, + testOverlap, + testbed + }, Symbol.toStringTag, { value: "Module" })); + exports2.AABB = AABB; + exports2.Body = Body; + exports2.Box = Box; + exports2.BoxShape = BoxShape; + exports2.BroadPhase = BroadPhase; + exports2.Chain = Chain; + exports2.ChainShape = ChainShape; + exports2.Circle = Circle; + exports2.CircleShape = CircleShape; + exports2.ClipVertex = ClipVertex; + exports2.CollideCircles = CollideCircles; + exports2.CollideEdgeCircle = CollideEdgeCircle; + exports2.CollideEdgePolygon = CollideEdgePolygon; + exports2.CollidePolygonCircle = CollidePolygonCircle; + exports2.CollidePolygons = CollidePolygons; + exports2.Contact = Contact; + exports2.ContactEdge = ContactEdge; + exports2.ContactID = ContactID; + exports2.ContactImpulse = ContactImpulse; + exports2.Distance = Distance; + exports2.DistanceInput = DistanceInput; + exports2.DistanceJoint = DistanceJoint; + exports2.DistanceOutput = DistanceOutput; + exports2.DistanceProxy = DistanceProxy; + exports2.DynamicTree = DynamicTree; + exports2.Edge = Edge; + exports2.EdgeShape = EdgeShape; + exports2.Fixture = Fixture; + exports2.FixtureProxy = FixtureProxy; + exports2.FrictionJoint = FrictionJoint; + exports2.GearJoint = GearJoint; + exports2.Joint = Joint; + exports2.JointEdge = JointEdge; + exports2.Manifold = Manifold; + exports2.ManifoldPoint = ManifoldPoint; + exports2.Mat22 = Mat22; + exports2.Mat33 = Mat33; + exports2.Math = math; + exports2.MotorJoint = MotorJoint; + exports2.MouseJoint = MouseJoint; + exports2.Polygon = Polygon; + exports2.PolygonShape = PolygonShape; + exports2.PrismaticJoint = PrismaticJoint; + exports2.PulleyJoint = PulleyJoint; + exports2.RevoluteJoint = RevoluteJoint; + exports2.RopeJoint = RopeJoint; + exports2.Rot = Rot; + exports2.Serializer = Serializer; + exports2.Settings = Settings; + exports2.SettingsInternal = SettingsInternal; + exports2.Shape = Shape; + exports2.ShapeCast = ShapeCast; + exports2.ShapeCastInput = ShapeCastInput; + exports2.ShapeCastOutput = ShapeCastOutput; + exports2.SimplexCache = SimplexCache; + exports2.Solver = Solver; + exports2.Sweep = Sweep; + exports2.TOIInput = TOIInput; + exports2.TOIOutput = TOIOutput; + exports2.Testbed = Testbed; + exports2.TimeOfImpact = TimeOfImpact; + exports2.TimeStep = TimeStep; + exports2.Transform = Transform; + exports2.TreeNode = TreeNode; + exports2.Vec2 = Vec2; + exports2.Vec3 = Vec3; + exports2.VelocityConstraintPoint = VelocityConstraintPoint; + exports2.WeldJoint = WeldJoint; + exports2.WheelJoint = WheelJoint; + exports2.World = World; + exports2.WorldManifold = WorldManifold; + exports2.clipSegmentToLine = clipSegmentToLine; + exports2.default = planck; + exports2.getPointStates = getPointStates; + exports2.internal = internal; + exports2.mixFriction = mixFriction; + exports2.mixRestitution = mixRestitution; + exports2.stats = stats; + exports2.testOverlap = testOverlap; + exports2.testbed = testbed; + Object.defineProperties(exports2, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); +}); //# sourceMappingURL=planck.js.map diff --git a/dist/planck.js.map b/dist/planck.js.map index 9d4574d5..5525d950 100644 --- a/dist/planck.js.map +++ b/dist/planck.js.map @@ -1 +1 @@ -{"version":3,"file":"planck.js","sources":["../node_modules/tslib/tslib.es6.js","../src/util/options.ts","../src/common/Math.ts","../src/common/Vec2.ts","../src/collision/AABB.ts","../src/Settings.ts","../src/util/Pool.ts","../src/collision/DynamicTree.ts","../src/collision/BroadPhase.ts","../src/common/Matrix.ts","../src/common/Rot.ts","../src/common/Sweep.ts","../src/common/Transform.ts","../src/dynamics/Velocity.ts","../src/dynamics/Position.ts","../src/collision/Shape.ts","../src/dynamics/Fixture.ts","../src/dynamics/Body.ts","../src/dynamics/Joint.ts","../src/util/stats.ts","../src/util/Timer.ts","../src/collision/Distance.ts","../src/collision/TimeOfImpact.ts","../src/dynamics/Solver.ts","../src/common/Mat22.ts","../src/collision/Manifold.ts","../src/dynamics/Contact.ts","../src/dynamics/World.ts","../src/common/Vec3.ts","../src/collision/shape/EdgeShape.ts","../src/collision/shape/ChainShape.ts","../src/collision/shape/PolygonShape.ts","../src/collision/shape/CircleShape.ts","../src/dynamics/joint/DistanceJoint.ts","../src/dynamics/joint/FrictionJoint.ts","../src/common/Mat33.ts","../src/dynamics/joint/RevoluteJoint.ts","../src/dynamics/joint/PrismaticJoint.ts","../src/dynamics/joint/GearJoint.ts","../src/dynamics/joint/MotorJoint.ts","../src/dynamics/joint/MouseJoint.ts","../src/dynamics/joint/PulleyJoint.ts","../src/dynamics/joint/RopeJoint.ts","../src/dynamics/joint/WeldJoint.ts","../src/dynamics/joint/WheelJoint.ts","../src/serializer/index.ts","../src/util/Testbed.ts","../src/collision/shape/BoxShape.ts","../src/collision/shape/CollideCircle.ts","../src/collision/shape/CollideEdgeCircle.ts","../src/collision/shape/CollidePolygon.ts","../src/collision/shape/CollideCirclePolygon.ts","../src/collision/shape/CollideEdgePolygon.ts","../src/internal.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/** @internal */\nexport const options = function(input: T, defaults: object): T {\n if (input === null || typeof input === \"undefined\") {\n // tslint:disable-next-line:no-object-literal-type-assertion\n input = {} as T;\n }\n\n const output = {...input};\n\n // tslint:disable-next-line:no-for-in\n for (const key in defaults) {\n if (defaults.hasOwnProperty(key) && typeof input[key] === \"undefined\") {\n output[key] = defaults[key];\n }\n }\n\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n const symbols = Object.getOwnPropertySymbols(defaults);\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n if (defaults.propertyIsEnumerable(symbol) && typeof input[symbol] === \"undefined\") {\n output[symbol] = defaults[symbol];\n }\n }\n }\n\n return output;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_random = Math.random;\n\n\nexport const EPSILON = 1e-9;\n\n/** @internal @deprecated */\nexport const isFinite = Number.isFinite;\n\n/**\n * @deprecated\n * Next Largest Power of 2 Given a binary integer value x, the next largest\n * power of 2 can be computed by a SWAR algorithm that recursively \"folds\" the\n * upper bits into the lower bits. This process yields a bit vector with the\n * same most significant 1 as x, but all 1's below it. Adding 1 to that value\n * yields the next largest power of 2. For a 32-bit value:\n */\nexport function nextPowerOfTwo(x: number): number {\n x |= (x >> 1);\n x |= (x >> 2);\n x |= (x >> 4);\n x |= (x >> 8);\n x |= (x >> 16);\n return x + 1;\n}\n\n/** @deprecated */\nexport function isPowerOfTwo(x: number): boolean {\n return x > 0 && (x & (x - 1)) === 0;\n}\n\n/** @deprecated */\nexport function mod(num: number, min?: number, max?: number): number {\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}\n\n/**\n * @deprecated\n * Returns a min if num is less than min, and max if more than max, otherwise returns num.\n */\nexport function clamp(num: number, min: number, max: number): number {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n } else {\n return num;\n }\n}\n\n/**\n * @deprecated\n * Returns a random number between min and max when two arguments are provided.\n * If one arg is provided between 0 to max.\n * If one arg is passed between 0 to 1.\n */\nexport function random(min?: number, max?: number): number {\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}\n\n/** @ignore */\nexport const 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;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"./Math\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\nexport interface Vec2Value {\n x: number;\n y: number;\n}\n\nexport class Vec2 {\n x: number;\n y: number;\n\n constructor(x: number, y: number);\n constructor(obj: { x: number, y: number });\n constructor();\n // tslint:disable-next-line:typedef\n constructor(x?, y?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec2)) {\n return new Vec2(x, y);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n } else {\n this.x = x;\n this.y = y;\n }\n _ASSERT && Vec2.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = data.x;\n obj.y = data.y;\n return obj;\n }\n\n static zero(): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = 0;\n obj.y = 0;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = x;\n obj.y = y;\n return obj;\n }\n\n static clone(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(v.x, v.y);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /**\n * Does this vector contain finite coordinates?\n */\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.x) && Number.isFinite(obj.y);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec2.isValid(o), \"Invalid Vec2!\", o);\n }\n\n clone(): Vec2 {\n return Vec2.clone(this);\n }\n\n /**\n * Set this vector to all zeros.\n *\n * @returns this\n */\n setZero(): Vec2 {\n this.x = 0.0;\n this.y = 0.0;\n return this;\n }\n\n set(x: number, y: number): Vec2;\n set(value: Vec2Value): Vec2;\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n // tslint:disable-next-line:typedef\n set(x, y?) {\n if (typeof x === \"object\") {\n _ASSERT && Vec2.assert(x);\n this.x = x.x;\n this.y = x.y;\n } else {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n }\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setNum(x: number, y: number) {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setVec2(value: Vec2Value) {\n _ASSERT && Vec2.assert(value);\n this.x = value.x;\n this.y = value.y;\n\n return this;\n }\n\n /** @internal @deprecated Use setCombine or setMul */\n wSet(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.setCombine(a, v, b, w);\n } else {\n return this.setMul(a, v);\n }\n }\n\n /**\n * Set linear combination of v and w: `a * v + b * w`\n */\n setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x = x;\n this.y = y;\n return this;\n }\n\n setMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * Add a vector to this vector.\n *\n * @returns this\n */\n add(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x += w.x;\n this.y += w.y;\n return this;\n }\n\n /** @internal @deprecated Use addCombine or addMul */\n wAdd(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.addCombine(a, v, b, w);\n } else {\n return this.addMul(a, v);\n }\n }\n\n /**\n * Add linear combination of v and w: `a * v + b * w`\n */\n addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x += x;\n this.y += y;\n return this;\n }\n\n addMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x += x;\n this.y += y;\n return this;\n }\n\n /**\n * @deprecated Use subCombine or subMul\n */\n wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.subCombine(a, v, b, w);\n } else {\n return this.subMul(a, v);\n }}\n\n /**\n * Subtract linear combination of v and w: `a * v + b * w`\n */\n subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n subMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n /**\n * Subtract a vector from this vector\n *\n * @returns this\n */\n sub(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x -= w.x;\n this.y -= w.y;\n return this;\n }\n\n /**\n * Multiply this vector by a scalar.\n *\n * @returns this\n */\n mul(m: number): Vec2 {\n _ASSERT && console.assert(Number.isFinite(m));\n this.x *= m;\n this.y *= m;\n return this;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n length(): number {\n return Vec2.lengthOf(this);\n }\n\n /**\n * Get the length squared.\n */\n lengthSquared(): number {\n return Vec2.lengthSquared(this);\n }\n\n /**\n * Convert this vector into a unit vector.\n *\n * @returns old length\n */\n normalize(): number {\n const length = this.length();\n if (length < EPSILON) {\n return 0.0;\n }\n const invLength = 1.0 / length;\n this.x *= invLength;\n this.y *= invLength;\n return length;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n static lengthOf(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return math_sqrt(v.x * v.x + v.y * v.y);\n }\n\n /**\n * Get the length squared.\n */\n static lengthSquared(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return v.x * v.x + v.y * v.y;\n }\n\n static distance(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return math_sqrt(dx * dx + dy * dy);\n }\n\n static distanceSquared(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return dx * dx + dy * dy;\n }\n\n static areEqual(v: Vec2Value, w: Vec2Value): boolean {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v === w || typeof w === \"object\" && w !== null && v.x === w.x && v.y === w.y;\n }\n\n /**\n * Get the skew vector such that dot(skew_vec, other) == cross(vec, other)\n */\n static skew(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.y, v.x);\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.x + v.y * w.y;\n }\n\n /** Cross product between two vectors */\n static cross(v: Vec2Value, w: Vec2Value): number;\n /** Cross product between a vector and a scalar */\n static cross(v: Vec2Value, w: number): Vec2;\n /** Cross product between a scalar and a vector */\n static cross(v: number, w: Vec2Value): Vec2;\n static cross(v: any, w: any): any {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n\n } else {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n }\n\n /** Cross product on two vectors */\n static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n\n /** Cross product on a vector and a scalar */\n static crossVec2Num(v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n }\n\n /** Cross product on a vector and a scalar */\n static crossNumVec2(v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n }\n\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2;\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2;\n static addCross(a: Vec2Value, v: any, w: any): Vec2 {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n static add(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x + w.x, v.y + w.y);\n }\n\n /** @hidden @deprecated */\n static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return Vec2.combine(a, v, b, w);\n } else {\n return Vec2.mulNumVec2(a, v);\n }\n }\n\n static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n return Vec2.zero().setCombine(a, v, b, w);\n }\n\n static sub(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x - w.x, v.y - w.y);\n }\n\n static mul(a: Vec2Value, b: number): Vec2;\n static mul(a: number, b: Vec2Value): Vec2;\n static mul(a: any, b: any): Vec2 {\n if (typeof a === \"object\") {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n\n } else if (typeof b === \"object\") {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n }\n\n static mulVec2Num(a: Vec2Value, b: number): Vec2 {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n }\n\n static mulNumVec2(a: number, b: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n\n neg(): Vec2 {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n\n static neg(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.x, -v.y);\n }\n\n static abs(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(math_abs(v.x), math_abs(v.y));\n }\n\n static mid(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo((v.x + w.x) * 0.5, (v.y + w.y) * 0.5);\n }\n\n static upper(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_max(v.x, w.x), math_max(v.y, w.y));\n }\n\n static lower(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_min(v.x, w.x), math_min(v.y, w.y));\n }\n\n clamp(max: number): Vec2 {\n const lengthSqr = this.x * this.x + this.y * this.y;\n if (lengthSqr > max * max) {\n const scale = max / math_sqrt(lengthSqr);\n this.x *= scale;\n this.y *= scale;\n }\n return this;\n }\n\n static clamp(v: Vec2Value, max: number): Vec2 {\n const r = Vec2.neo(v.x, v.y);\n r.clamp(max);\n return r;\n }\n\n /** @hidden @deprecated */\n static scaleFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x * x, v.y * y);\n };\n }\n\n /** @hidden @deprecated */\n static translateFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x + x, v.y + y);\n };\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/**\n * Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n */\nexport interface RayCastInput {\n p1: Vec2Value;\n p2: Vec2Value;\n maxFraction: number;\n}\n\nexport type RayCastCallback = (subInput: RayCastInput, id: number) => number;\n\n/**\n * Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`,\n * where `p1` and `p2` come from RayCastInput.\n */\nexport interface RayCastOutput {\n normal: Vec2;\n fraction: number;\n}\n\nexport interface AABBValue {\n lowerBound: Vec2Value;\n upperBound: Vec2Value;\n}\n\nexport class AABB {\n lowerBound: Vec2;\n upperBound: Vec2;\n\n constructor(lower?: Vec2Value, upper?: Vec2Value) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof AABB)) {\n return new AABB(lower, upper);\n }\n\n this.lowerBound = Vec2.zero();\n this.upperBound = Vec2.zero();\n\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\n /**\n * Verify that the bounds are sorted.\n */\n isValid(): boolean {\n return AABB.isValid(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!AABB.isValid(o), \"Invalid AABB!\", o);\n }\n\n /**\n * Get the center of the AABB.\n */\n getCenter(): Vec2 {\n return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5);\n }\n\n /**\n * Get the extents of the AABB (half-widths).\n */\n getExtents(): Vec2 {\n return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5);\n }\n\n /**\n * Get the perimeter length.\n */\n getPerimeter(): number {\n return 2.0 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y);\n }\n\n /**\n * Combine one or two AABB into this one.\n */\n combine(a: AABBValue, b?: AABBValue): void {\n b = b || this;\n\n const lowerA = a.lowerBound;\n const upperA = a.upperBound;\n const lowerB = b.lowerBound;\n const upperB = b.upperBound;\n\n const lowerX = math_min(lowerA.x, lowerB.x);\n const lowerY = math_min(lowerA.y, lowerB.y);\n const upperX = math_max(upperB.x, upperA.x);\n const upperY = math_max(upperB.y, upperA.y);\n\n this.lowerBound.setNum(lowerX, lowerY);\n this.upperBound.setNum(upperX, upperY);\n }\n\n combinePoints(a: Vec2Value, b: Vec2Value): void {\n this.lowerBound.setNum(math_min(a.x, b.x), math_min(a.y, b.y));\n this.upperBound.setNum(math_max(a.x, b.x), math_max(a.y, b.y));\n }\n\n set(aabb: AABBValue): void {\n this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y);\n this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y);\n }\n\n contains(aabb: AABBValue): boolean {\n let 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\n extend(value: number): AABB {\n AABB.extend(this, value);\n return this;\n }\n\n static extend(out: AABBValue, value: number): AABBValue {\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\n static testOverlap(a: AABBValue, b: AABBValue): boolean {\n const d1x = b.lowerBound.x - a.upperBound.x;\n const d2x = a.lowerBound.x - b.upperBound.x;\n\n const d1y = b.lowerBound.y - a.upperBound.y;\n const d2y = a.lowerBound.y - b.upperBound.y;\n\n if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) {\n return false;\n }\n return true;\n }\n\n static areEqual(a: AABBValue, b: AABBValue): boolean {\n return Vec2.areEqual(a.lowerBound, b.lowerBound) && Vec2.areEqual(a.upperBound, b.upperBound);\n }\n\n static diff(a: AABBValue, b: AABBValue): number {\n const wD = math_max(0, math_min(a.upperBound.x, b.upperBound.x) - math_max(b.lowerBound.x, a.lowerBound.x));\n const hD = math_max(0, math_min(a.upperBound.y, b.upperBound.y) - math_max(b.lowerBound.y, a.lowerBound.y));\n\n const wA = a.upperBound.x - a.lowerBound.x;\n const hA = a.upperBound.y - a.lowerBound.y;\n\n const wB = b.upperBound.x - b.lowerBound.x;\n const hB = b.upperBound.y - b.lowerBound.y;\n\n return wA * hA + wB * hB - wD * hD;\n }\n\n rayCast(output: RayCastOutput, input: RayCastInput): boolean {\n // From Real-time Collision Detection, p179.\n\n let tmin = -Infinity;\n let tmax = Infinity;\n\n const p = input.p1;\n const d = Vec2.sub(input.p2, input.p1);\n const absD = Vec2.abs(d);\n\n const normal = Vec2.zero();\n\n for (let f: \"x\" | \"y\" = \"x\"; f !== null; f = (f === \"x\" ? \"y\" : null)) {\n if (absD.x < EPSILON) {\n // Parallel.\n if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) {\n return false;\n }\n } else {\n const inv_d = 1.0 / d[f];\n let t1 = (this.lowerBound[f] - p[f]) * inv_d;\n let t2 = (this.upperBound[f] - p[f]) * inv_d;\n\n // Sign of the normal vector.\n let s = -1.0;\n\n if (t1 > t2) {\n const temp = t1;\n t1 = t2;\n t2 = temp;\n s = 1.0;\n }\n\n // Push the min up\n if (t1 > tmin) {\n normal.setZero();\n normal[f] = s;\n tmin = t1;\n }\n\n // Pull the max down\n tmax = math_min(tmax, t2);\n\n if (tmin > tmax) {\n return false;\n }\n }\n }\n\n // Does the ray start inside the box?\n // Does the ray intersect beyond the max fraction?\n if (tmin < 0.0 || input.maxFraction < tmin) {\n return false;\n }\n\n // Intersection.\n output.fraction = tmin;\n output.normal = normal;\n return true;\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue {\n out.lowerBound.x = math_min(a.x, b.x);\n out.lowerBound.y = math_min(a.y, b.y);\n out.upperBound.x = math_max(a.x, b.x);\n out.upperBound.y = math_max(a.y, b.y);\n return out;\n }\n\n static combinedPerimeter(a: AABBValue, b: AABBValue) {\n const lx = math_min(a.lowerBound.x, b.lowerBound.x);\n const ly = math_min(a.lowerBound.y, b.lowerBound.y);\n const ux = math_max(a.upperBound.x, b.upperBound.x);\n const uy = math_max(a.upperBound.y, b.upperBound.y);\n return 2.0 * (ux - lx + uy - ly); \n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Tuning constants based on meters-kilograms-seconds (MKS) units.\n * \n * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units.\n */\nexport class Settings {\n /**\n * You can use this to change the length scale used by your game.\n * \n * For example for inches you could use 39.4.\n */\n static lengthUnitsPerMeter = 1.0;\n \n // Collision\n /**\n * The maximum number of contact points between two convex shapes. Do not change\n * this value.\n */\n static maxManifoldPoints: number = 2;\n\n /**\n * The maximum number of vertices on a convex polygon. You cannot increase this\n * too much because BlockAllocator has a maximum object size.\n */\n static maxPolygonVertices: number = 12;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This allows proxies to move\n * by a small amount without triggering a tree adjustment. This is in meters.\n */\n static aabbExtension: number = 0.1;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This is used to predict the\n * future position based on the current displacement. This is a dimensionless\n * multiplier.\n */\n static aabbMultiplier: number = 2.0;\n\n /**\n * A small length used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static linearSlop: number = 0.005;\n\n /**\n * A small angle used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static angularSlop: number = (2.0 / 180.0 * math_PI);\n\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 static get polygonRadius(): number { return 2.0 * Settings.linearSlop; }\n\n /**\n * Maximum number of sub-steps per contact in continuous physics simulation.\n */\n static maxSubSteps: number = 8;\n\n // Dynamics\n\n /**\n * Maximum number of contacts to be handled to solve a TOI impact.\n */\n static maxTOIContacts: number = 32;\n\n /**\n * Maximum iterations to solve a TOI.\n */\n static maxTOIIterations: number = 20;\n\n /**\n * Maximum iterations to find Distance.\n */\n static maxDistanceIterations: number = 20;\n\n /**\n * A velocity threshold for elastic collisions. Any collision with a relative\n * linear velocity below this threshold will be treated as inelastic.\n */\n static velocityThreshold: number = 1.0;\n\n /**\n * The maximum linear position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxLinearCorrection: number = 0.2;\n\n /**\n * The maximum angular position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxAngularCorrection: number = (8.0 / 180.0 * math_PI);\n\n /**\n * The maximum linear velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxTranslation: number = 2.0;\n\n /**\n * The maximum angular velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxRotation: number = (0.5 * math_PI);\n\n /**\n * This scale factor controls how fast overlap is resolved. Ideally this would\n * be 1 so that overlap is removed in one time step. However using values close\n * to 1 often lead to overshoot.\n */\n static baumgarte: number = 0.2;\n static toiBaugarte: number = 0.75;\n\n // Sleep\n\n /**\n * The time that a body must be still before it will go to sleep.\n */\n static timeToSleep: number = 0.5;\n\n /**\n * A body cannot sleep if its linear velocity is above this tolerance.\n */\n static linearSleepTolerance: number = 0.01;\n\n /**\n * A body cannot sleep if its angular velocity is above this tolerance.\n */\n static angularSleepTolerance: number = (2.0 / 180.0 * math_PI);\n}\n\n/** @internal */\nexport class SettingsInternal {\n static get maxManifoldPoints() {\n return Settings.maxManifoldPoints;\n }\n static get maxPolygonVertices() {\n return Settings.maxPolygonVertices;\n }\n static get aabbExtension() {\n return Settings.aabbExtension * Settings.lengthUnitsPerMeter;\n }\n static get aabbMultiplier() {\n return Settings.aabbMultiplier;\n }\n static get linearSlop() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get linearSlopSquared() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get angularSlop() {\n return Settings.angularSlop;\n }\n static get polygonRadius() {\n return 2.0 * Settings.linearSlop;\n }\n static get maxSubSteps() {\n return Settings.maxSubSteps;\n }\n static get maxTOIContacts() {\n return Settings.maxTOIContacts;\n }\n static get maxTOIIterations() {\n return Settings.maxTOIIterations;\n }\n static get maxDistanceIterations() {\n return Settings.maxDistanceIterations;\n }\n static get velocityThreshold() {\n return Settings.velocityThreshold * Settings.lengthUnitsPerMeter;\n }\n static get maxLinearCorrection() {\n return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter;\n }\n static get maxAngularCorrection() {\n return Settings.maxAngularCorrection;\n }\n static get maxTranslation() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxTranslationSquared() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxRotation() {\n return Settings.maxRotation;\n }\n static get maxRotationSquared() {\n return Settings.maxRotation * Settings.maxRotation;\n }\n static get baumgarte() {\n return Settings.baumgarte;\n }\n static get toiBaugarte() {\n return Settings.toiBaugarte;\n }\n static get timeToSleep() {\n return Settings.timeToSleep;\n }\n static get linearSleepTolerance() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get linearSleepToleranceSqr() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get angularSleepTolerance() {\n return Settings.angularSleepTolerance;\n }\n static get angularSleepToleranceSqr() {\n return Settings.angularSleepTolerance * Settings.angularSleepTolerance;\n }\n}\n","/*\n * Copyright (c) 2016-2018 Ali Shakiba http://shakiba.me/planck.js\n *\n * This software is provided 'as-is', without any express or implied\n * warranty. In no event will the authors be held liable for any damages\n * arising from the use of this software.\n * Permission is granted to anyone to use this software for any purpose,\n * including commercial applications, and to alter it and redistribute it\n * freely, subject to the following restrictions:\n * 1. The origin of this software must not be misrepresented; you must not\n * claim that you wrote the original software. If you use this software\n * in a product, an acknowledgment in the product documentation would be\n * appreciated but is not required.\n * 2. Altered source versions must be plainly marked as such, and must not be\n * misrepresented as being the original software.\n * 3. This notice may not be removed or altered from any source distribution.\n */\n\n/** @internal */\nexport interface PoolOptions {\n max?: number,\n create?: () => T,\n /** Called when an object is being re-allocated. */\n allocate?: (item: T) => void,\n /** Called when an object is returned to pool. */\n release?: (item: T) => void,\n /** Called when an object is returned to the pool but will be disposed from pool. */\n dispose?: (item: T) => T,\n}\n\n/** @internal */\nexport class Pool {\n _list: T[] = [];\n _max: number = Infinity;\n\n _createFn: () => T;\n _hasCreateFn: boolean = false;\n _createCount: number = 0;\n\n _allocateFn: (item: T) => void;\n _hasAllocateFn: boolean = false;\n _allocateCount: number = 0;\n\n _releaseFn: (item: T) => void;\n _hasReleaseFn: boolean = false;\n _releaseCount: number = 0;\n\n _disposeFn: (item: T) => T;\n _hasDisposeFn: boolean = false;\n _disposeCount: number = 0;\n\n constructor(opts: PoolOptions) {\n this._list = [];\n this._max = opts.max || this._max;\n\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\n max(n?: number): number | Pool {\n if (typeof n === \"number\") {\n this._max = n;\n return this;\n }\n return this._max;\n }\n\n size(): number {\n return this._list.length;\n }\n\n allocate(): T {\n let item: T;\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 // tslint:disable-next-line:no-object-literal-type-assertion\n item = {} as T;\n }\n }\n this._allocateCount++;\n if (this._hasAllocateFn) {\n this._allocateFn(item);\n }\n return item;\n }\n\n release(item: T): void {\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\n toString(): string {\n return \" +\" + this._createCount + \" >\" + this._allocateCount + \" <\" + this._releaseCount + \" -\"\n + this._disposeCount + \" =\" + this._list.length + \"/\" + this._max;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Pool } from \"../util/Pool\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\nexport type DynamicTreeQueryCallback = (nodeId: number) => boolean;\n\n/**\n * A node in the dynamic tree. The client does not interact with this directly.\n */\nexport class TreeNode {\n id: number;\n /** Enlarged AABB */\n aabb: AABB = new AABB();\n userData: T = null;\n parent: TreeNode = null;\n child1: TreeNode = null;\n child2: TreeNode = null;\n /** 0: leaf, -1: free node */\n height: number = -1;\n\n constructor(id?: number) {\n this.id = id;\n }\n\n /** @internal */\n toString(): string {\n return this.id + \": \" + this.userData;\n }\n\n isLeaf(): boolean {\n return this.child1 == null;\n }\n}\n\n/** @internal */ const poolTreeNode = new Pool>({\n create(): TreeNode {\n return new TreeNode();\n },\n release(node: TreeNode) {\n node.userData = null;\n node.parent = null;\n node.child1 = null;\n node.child2 = null;\n node.height = -1;\n node.id = undefined;\n }\n});\n\n/**\n * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A\n * dynamic tree arranges data in a binary tree to accelerate queries such as\n * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we\n * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger\n * than the client object. This allows the client object to move by small\n * amounts without triggering a tree update.\n *\n * Nodes are pooled and relocatable, so we use node indices rather than\n * pointers.\n */\nexport class DynamicTree {\n m_root: TreeNode;\n m_lastProxyId: number;\n m_nodes: {\n [id: number]: TreeNode\n };\n\n constructor() {\n this.m_root = null;\n this.m_nodes = {};\n this.m_lastProxyId = 0;\n }\n\n /**\n * Get proxy user data.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getUserData(id: number): T {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.userData;\n }\n\n /**\n * Get the fat AABB for a node id.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getFatAABB(id: number): AABB {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.aabb;\n }\n\n allocateNode(): TreeNode {\n const node = poolTreeNode.allocate();\n node.id = ++this.m_lastProxyId;\n this.m_nodes[node.id] = node;\n return node;\n }\n\n freeNode(node: TreeNode): void {\n // tslint:disable-next-line:no-dynamic-delete\n delete this.m_nodes[node.id];\n poolTreeNode.release(node);\n }\n\n /**\n * Create a proxy in the tree as a leaf node. We return the index of the node\n * instead of a pointer so that we can grow the node pool.\n *\n * Create a proxy. Provide a tight fitting AABB and a userData pointer.\n */\n createProxy(aabb: AABBValue, userData: T): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n\n const node = this.allocateNode();\n\n node.aabb.set(aabb);\n\n // Fatten the aabb.\n AABB.extend(node.aabb, Settings.aabbExtension);\n\n node.userData = userData;\n node.height = 0;\n\n this.insertLeaf(node);\n\n return node.id;\n }\n\n /**\n * Destroy a proxy. This asserts if the id is invalid.\n */\n destroyProxy(id: number): void {\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n this.removeLeaf(node);\n this.freeNode(node);\n }\n\n /**\n * Move a proxy with a swepted AABB. If the proxy has moved outside of its\n * fattened AABB, then the proxy is removed from the tree and re-inserted.\n * Otherwise the function returns immediately.\n *\n * @param d Displacement\n *\n * @return true if the proxy was re-inserted.\n */\n moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean {\n _ASSERT && console.assert(AABB.isValid(aabb));\n _ASSERT && console.assert(!d || Vec2.isValid(d));\n\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n if (node.aabb.contains(aabb)) {\n return false;\n }\n\n this.removeLeaf(node);\n\n node.aabb.set(aabb);\n\n // Extend AABB.\n aabb = node.aabb;\n AABB.extend(aabb, Settings.aabbExtension);\n\n // Predict AABB displacement.\n // const d = Vec2.mul(Settings.aabbMultiplier, displacement);\n\n if (d.x < 0.0) {\n aabb.lowerBound.x += d.x * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.x += d.x * Settings.aabbMultiplier;\n }\n\n if (d.y < 0.0) {\n aabb.lowerBound.y += d.y * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.y += d.y * Settings.aabbMultiplier;\n }\n\n this.insertLeaf(node);\n\n return true;\n }\n\n insertLeaf(leaf: TreeNode): void {\n _ASSERT && console.assert(AABB.isValid(leaf.aabb));\n\n if (this.m_root == null) {\n this.m_root = leaf;\n this.m_root.parent = null;\n return;\n }\n\n // Find the best sibling for this node\n const leafAABB = leaf.aabb;\n let index = this.m_root;\n while (!index.isLeaf()) {\n const child1 = index.child1;\n const child2 = index.child2;\n\n const area = index.aabb.getPerimeter();\n\n const combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB);\n\n // Cost of creating a new parent for this node and the new leaf\n const cost = 2.0 * combinedArea;\n\n // Minimum cost of pushing the leaf further down the tree\n const inheritanceCost = 2.0 * (combinedArea - area);\n\n // Cost of descending into child1\n const newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb);\n let cost1 = newArea1 + inheritanceCost;\n if (!child1.isLeaf()) {\n const oldArea = child1.aabb.getPerimeter();\n cost1 -= oldArea;\n }\n\n // Cost of descending into child2\n const newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb);\n let cost2 = newArea2 + inheritanceCost;\n if (!child2.isLeaf()) {\n const oldArea = child2.aabb.getPerimeter();\n cost2 -= oldArea;\n }\n\n // Descend according to the minimum cost.\n if (cost < cost1 && cost < cost2) {\n break;\n }\n\n // Descend\n if (cost1 < cost2) {\n index = child1;\n } else {\n index = child2;\n }\n }\n\n const sibling = index;\n\n // Create a new parent.\n const oldParent = sibling.parent;\n const 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\n if (oldParent != null) {\n // The sibling was not the root.\n if (oldParent.child1 === sibling) {\n oldParent.child1 = newParent;\n } else {\n oldParent.child2 = newParent;\n }\n\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n } else {\n // The sibling was the root.\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n this.m_root = newParent;\n }\n\n // Walk back up the tree fixing heights and AABBs\n index = leaf.parent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n _ASSERT && console.assert(child1 != null);\n _ASSERT && console.assert(child2 != null);\n\n index.height = 1 + math_max(child1.height, child2.height);\n index.aabb.combine(child1.aabb, child2.aabb);\n\n index = index.parent;\n }\n\n // validate();\n }\n\n removeLeaf(leaf: TreeNode): void {\n if (leaf === this.m_root) {\n this.m_root = null;\n return;\n }\n\n const parent = leaf.parent;\n const grandParent = parent.parent;\n let sibling;\n if (parent.child1 === leaf) {\n sibling = parent.child2;\n } else {\n sibling = parent.child1;\n }\n\n if (grandParent != null) {\n // Destroy parent and connect sibling to grandParent.\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\n // Adjust ancestor bounds.\n let index = grandParent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n index.aabb.combine(child1.aabb, child2.aabb);\n index.height = 1 + math_max(child1.height, child2.height);\n\n index = index.parent;\n }\n } else {\n this.m_root = sibling;\n sibling.parent = null;\n this.freeNode(parent);\n }\n\n // validate();\n }\n\n /**\n * Perform a left or right rotation if node A is imbalanced. Returns the new\n * root index.\n */\n balance(iA: TreeNode): TreeNode {\n _ASSERT && console.assert(iA != null);\n\n const A = iA;\n if (A.isLeaf() || A.height < 2) {\n return iA;\n }\n\n const B = A.child1;\n const C = A.child2;\n\n const balance = C.height - B.height;\n\n // Rotate C up\n if (balance > 1) {\n const F = C.child1;\n const G = C.child2;\n\n // Swap A and C\n C.child1 = A;\n C.parent = A.parent;\n A.parent = C;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(B.height, G.height);\n C.height = 1 + math_max(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\n A.height = 1 + math_max(B.height, F.height);\n C.height = 1 + math_max(A.height, G.height);\n }\n\n return C;\n }\n\n // Rotate B up\n if (balance < -1) {\n const D = B.child1;\n const E = B.child2;\n\n // Swap A and B\n B.child1 = A;\n B.parent = A.parent;\n A.parent = B;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(C.height, E.height);\n B.height = 1 + math_max(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\n A.height = 1 + math_max(C.height, D.height);\n B.height = 1 + math_max(A.height, E.height);\n }\n\n return B;\n }\n\n return A;\n }\n\n /**\n * Compute the height of the binary tree in O(N) time. Should not be called\n * often.\n */\n getHeight(): number {\n if (this.m_root == null) {\n return 0;\n }\n\n return this.m_root.height;\n }\n\n /**\n * Get the ratio of the sum of the node areas to the root area.\n */\n getAreaRatio(): number {\n if (this.m_root == null) {\n return 0.0;\n }\n\n const root = this.m_root;\n const rootArea = root.aabb.getPerimeter();\n\n let totalArea = 0.0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // Free node in pool\n continue;\n }\n\n totalArea += node.aabb.getPerimeter();\n }\n\n this.iteratorPool.release(it);\n\n return totalArea / rootArea;\n }\n\n /**\n * Compute the height of a sub-tree.\n */\n computeHeight(id?: number): number {\n let node;\n if (typeof id !== \"undefined\") {\n node = this.m_nodes[id];\n } else {\n node = this.m_root;\n }\n\n // _ASSERT && console.assert(0 <= id && id < this.m_nodeCapacity);\n\n if (node.isLeaf()) {\n return 0;\n }\n\n const height1 = this.computeHeight(node.child1.id);\n const height2 = this.computeHeight(node.child2.id);\n return 1 + math_max(height1, height2);\n }\n\n validateStructure(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n if (node === this.m_root) {\n _ASSERT && console.assert(node.parent == null);\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n _ASSERT && console.assert(child1.parent === node);\n _ASSERT && console.assert(child2.parent === node);\n\n this.validateStructure(child1);\n this.validateStructure(child2);\n }\n\n validateMetrics(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n const height1 = child1.height;\n const height2 = child2.height;\n const height = 1 + math_max(height1, height2);\n _ASSERT && console.assert(node.height === height);\n\n const aabb = new AABB();\n aabb.combine(child1.aabb, child2.aabb);\n\n _ASSERT && console.assert(AABB.areEqual(aabb, node.aabb));\n\n this.validateMetrics(child1);\n this.validateMetrics(child2);\n }\n\n /**\n * Validate this tree. For testing.\n */\n validate(): void {\n if (!_ASSERT) return;\n this.validateStructure(this.m_root);\n this.validateMetrics(this.m_root);\n\n console.assert(this.getHeight() === this.computeHeight());\n }\n\n /**\n * Get the maximum balance of an node in the tree. The balance is the difference\n * in height of the two children of a node.\n */\n getMaxBalance(): number {\n let maxBalance = 0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height <= 1) {\n continue;\n }\n\n _ASSERT && console.assert(!node.isLeaf());\n\n const balance = math_abs(node.child2.height - node.child1.height);\n maxBalance = math_max(maxBalance, balance);\n }\n this.iteratorPool.release(it);\n\n return maxBalance;\n }\n\n /**\n * Build an optimal tree. Very expensive. For testing.\n */\n rebuildBottomUp(): void {\n const nodes = [];\n let count = 0;\n\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // free node in pool\n continue;\n }\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\n while (count > 1) {\n let minCost = Infinity;\n let iMin = -1;\n let jMin = -1;\n for (let i = 0; i < count; ++i) {\n const aabbi = nodes[i].aabb;\n for (let j = i + 1; j < count; ++j) {\n const aabbj = nodes[j].aabb;\n const cost = AABB.combinedPerimeter(aabbi, aabbj);\n if (cost < minCost) {\n iMin = i;\n jMin = j;\n minCost = cost;\n }\n }\n }\n\n const child1 = nodes[iMin];\n const child2 = nodes[jMin];\n\n const parent = this.allocateNode();\n parent.child1 = child1;\n parent.child2 = child2;\n parent.height = 1 + math_max(child1.height, child2.height);\n parent.aabb.combine(child1.aabb, child2.aabb);\n parent.parent = null;\n\n child1.parent = parent;\n child2.parent = parent;\n\n nodes[jMin] = nodes[count - 1];\n nodes[iMin] = parent;\n --count;\n }\n\n this.m_root = nodes[0];\n\n _ASSERT && this.validate();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n const 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\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void {\n _ASSERT && console.assert(typeof queryCallback === \"function\");\n const stack = this.stackPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, aabb)) {\n if (node.isLeaf()) {\n const 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\n this.stackPool.release(stack);\n }\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n // TODO: GC\n _ASSERT && console.assert(typeof rayCastCallback === \"function\");\n const p1 = input.p1;\n const p2 = input.p2;\n const r = Vec2.sub(p2, p1);\n _ASSERT && console.assert(r.lengthSquared() > 0.0);\n r.normalize();\n\n // v is perpendicular to the segment.\n const v = Vec2.crossNumVec2(1.0, r);\n const abs_v = Vec2.abs(v);\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n\n let maxFraction = input.maxFraction;\n\n // Build a bounding box for the segment.\n const segmentAABB = new AABB();\n let t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2);\n segmentAABB.combinePoints(p1, t);\n\n const stack = this.stackPool.allocate();\n const subInput = this.inputPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, segmentAABB) === false) {\n continue;\n }\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n const c = node.aabb.getCenter();\n const h = node.aabb.getExtents();\n const separation = math_abs(Vec2.dot(v, Vec2.sub(p1, c))) - Vec2.dot(abs_v, h);\n if (separation > 0.0) {\n continue;\n }\n\n if (node.isLeaf()) {\n subInput.p1 = Vec2.clone(input.p1);\n subInput.p2 = Vec2.clone(input.p2);\n subInput.maxFraction = maxFraction;\n\n const value = rayCastCallback(subInput, node.id);\n\n if (value === 0.0) {\n // The client has terminated the ray cast.\n break;\n } else if (value > 0.0) {\n // update segment bounding box.\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\n private inputPool: Pool = new Pool({\n create(): RayCastInput {\n // tslint:disable-next-line:no-object-literal-type-assertion\n return {} as RayCastInput;\n },\n release(stack: RayCastInput): void {\n }\n });\n\n private stackPool: Pool>> = new Pool>>({\n create(): Array> {\n return [];\n },\n release(stack: Array>): void {\n stack.length = 0;\n }\n });\n\n private iteratorPool: Pool> = new Pool>({\n create(): Iterator {\n return new Iterator();\n },\n release(iterator: Iterator): void {\n iterator.close();\n }\n });\n\n}\n\n/** @internal */\nclass Iterator {\n parents: Array> = [];\n states: number[] = [];\n preorder(root: TreeNode): Iterator {\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 next(): TreeNode {\n while (this.parents.length > 0) {\n const i = this.parents.length - 1;\n const 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 close(): void {\n this.parents.length = 0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\nimport { DynamicTree, DynamicTreeQueryCallback } from \"./DynamicTree\";\nimport { FixtureProxy } from \"../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/**\n * The broad-phase wraps and extends a dynamic-tree to keep track of moved\n * objects and query them on update.\n */\nexport class BroadPhase {\n m_tree: DynamicTree = new DynamicTree();\n m_moveBuffer: number[] = [];\n\n m_callback: (userDataA: any, userDataB: any) => void;\n m_queryProxyId: number;\n\n /**\n * Get user data from a proxy. Returns null if the id is invalid.\n */\n getUserData(proxyId: number): FixtureProxy {\n return this.m_tree.getUserData(proxyId);\n }\n\n /**\n * Test overlap of fat AABBs.\n */\n testOverlap(proxyIdA: number, proxyIdB: number): boolean {\n const aabbA = this.m_tree.getFatAABB(proxyIdA);\n const aabbB = this.m_tree.getFatAABB(proxyIdB);\n return AABB.testOverlap(aabbA, aabbB);\n }\n\n /**\n * Get the fat AABB for a proxy.\n */\n getFatAABB(proxyId: number): AABB {\n return this.m_tree.getFatAABB(proxyId);\n }\n\n /**\n * Get the number of proxies.\n */\n getProxyCount(): number {\n return this.m_moveBuffer.length;\n }\n\n /**\n * Get the height of the embedded tree.\n */\n getTreeHeight(): number {\n return this.m_tree.getHeight();\n }\n\n /**\n * Get the balance (integer) of the embedded tree.\n */\n getTreeBalance(): number {\n return this.m_tree.getMaxBalance();\n }\n\n /**\n * Get the quality metric of the embedded tree.\n */\n getTreeQuality(): number {\n return this.m_tree.getAreaRatio();\n }\n\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query = (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void => {\n this.m_tree.query(aabb, queryCallback);\n };\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n this.m_tree.rayCast(input, rayCastCallback);\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_tree.shiftOrigin(newOrigin);\n }\n\n /**\n * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs\n * is called.\n */\n createProxy(aabb: AABBValue, userData: FixtureProxy): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const proxyId = this.m_tree.createProxy(aabb, userData);\n this.bufferMove(proxyId);\n return proxyId;\n }\n\n /**\n * Destroy a proxy. It is up to the client to remove any pairs.\n */\n destroyProxy(proxyId: number): void {\n this.unbufferMove(proxyId);\n this.m_tree.destroyProxy(proxyId);\n }\n\n /**\n * Call moveProxy as many times as you like, then when you are done call\n * UpdatePairs to finalized the proxy pairs (for your time step).\n */\n moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const changed = this.m_tree.moveProxy(proxyId, aabb, displacement);\n if (changed) {\n this.bufferMove(proxyId);\n }\n }\n\n /**\n * Call to trigger a re-processing of it's pairs on the next call to\n * UpdatePairs.\n */\n touchProxy(proxyId: number): void {\n this.bufferMove(proxyId);\n }\n\n bufferMove(proxyId: number): void {\n this.m_moveBuffer.push(proxyId);\n }\n\n unbufferMove(proxyId: number): void {\n for (let 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\n /**\n * Update the pairs. This results in pair callbacks. This can only add pairs.\n */\n updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void {\n _ASSERT && console.assert(typeof addPairCallback === \"function\");\n this.m_callback = addPairCallback;\n\n // Perform tree queries for all moving proxies.\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\n // We have to query the tree with the fat AABB so that\n // we don't fail to create a pair that may touch later.\n const fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId);\n\n // Query tree, create pairs and add them pair buffer.\n this.m_tree.query(fatAABB, this.queryCallback);\n }\n\n // Try to keep the tree balanced.\n // this.m_tree.rebalance(4);\n }\n\n queryCallback = (proxyId: number): boolean => {\n // A proxy cannot form a pair with itself.\n if (proxyId === this.m_queryProxyId) {\n return true;\n }\n\n const proxyIdA = math_min(proxyId, this.m_queryProxyId);\n const proxyIdB = math_max(proxyId, this.m_queryProxyId);\n\n // TODO: Skip any duplicate pairs.\n\n const userDataA = this.m_tree.getUserData(proxyIdA);\n const userDataB = this.m_tree.getUserData(proxyIdB);\n\n // Send the pairs back to the client.\n this.m_callback(userDataA, userDataB);\n\n return true;\n };\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2023 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\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_sqrt = Math.sqrt;\n\n\nimport { RotValue } from \"./Rot\";\nimport { TransformValue } from \"./Transform\";\nimport { Vec2Value } from \"./Vec2\";\nimport { Vec3Value } from \"./Vec3\";\n\nexport function vec2(x: number, y: number): Vec2Value {\n return { x, y };\n}\n\nexport function vec3(x: number, y: number, z: number): Vec3Value {\n return { x, y, z };\n}\n\nexport function rotation(angle: number): RotValue {\n return { s: math_sin(angle), c: math_cos(angle) };\n}\n\nexport function setVec2(out: Vec2Value, x: number, y: number): Vec2Value {\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function copyVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = w.x;\n out.y = w.y;\n return out;\n}\n\nexport function zeroVec2(out: Vec2Value): Vec2Value {\n out.x = 0;\n out.y = 0;\n return out;\n}\n\nexport function negVec2(out: Vec2Value): Vec2Value {\n out.x = -out.x;\n out.y = -out.y;\n return out;\n}\n\nexport function plusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x += w.x;\n out.y += w.y;\n return out;\n}\n\nexport function addVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x + w.x;\n out.y = v.x + w.y;\n return out;\n}\n\nexport function minusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x -= w.x;\n out.y -= w.y;\n return out;\n}\n\nexport function subVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x - w.x;\n out.y = v.y - w.y;\n return out;\n}\n\nexport function mulVec2(out: Vec2Value, m: number): Vec2Value {\n out.x *= m;\n out.y *= m;\n return out;\n}\n\nexport function scaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x = m * w.x;\n out.y = m * w.y;\n return out;\n}\n\nexport function plusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x += m * w.x;\n out.y += m * w.y;\n return out;\n}\n\nexport function minusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x -= m * w.x;\n out.y -= m * w.y;\n return out;\n}\n\nexport function combine2Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x;\n out.y = am * a.y + bm * b.y;\n return out;\n}\n\nexport function combine3Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value, cm: number, c: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x + cm * c.x;\n out.y = am * a.y + bm * b.y + cm * c.y;\n return out;\n}\n\nexport function normalizeVec2Length(out: Vec2Value): number {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length !== 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return length;\n}\n\nexport function normalizeVec2(out: Vec2Value): Vec2Value {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length > 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return out;\n}\n\nexport function crossVec2Num(out: Vec2Value, v: Vec2Value, w: number): Vec2Value {\n const x = w * v.y;\n const y = -w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossNumVec2(out: Vec2Value, w: number, v: Vec2Value): Vec2Value {\n const x = -w * v.y;\n const y = w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossVec2Vec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.y - a.y * b.x;\n}\n\nexport function dotVec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.x + a.y * b.y;\n}\n\nexport function lengthVec2(a: Vec2Value): number {\n return math_sqrt(a.x * a.x + a.y * a.y);\n}\n\nexport function lengthSqrVec2(a: Vec2Value): number {\n return a.x * a.x + a.y * a.y;\n}\n\nexport function distVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return math_sqrt(dx * dx + dy * dy);\n}\n\nexport function distSqrVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return dx * dx + dy * dy;\n}\n\nexport function dotVec3(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n}\n\nexport function setRotAngle(out: RotValue, a: number): RotValue {\n out.c = math_cos(a);\n out.s = math_sin(a);\n return out;\n}\n\nexport function rotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n out.x = q.c * v.x - q.s * v.y;\n out.y = q.s * v.x + q.c * v.y;\n return out;\n}\n\nexport function derotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n const x = q.c * v.x + q.s * v.y;\n const y = -q.s * v.x + q.c * v.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function rerotVec2(out: Vec2Value, before: RotValue, after: RotValue, v: Vec2Value): Vec2Value {\n const x0 = before.c * v.x + before.s * v.y;\n const y0 = -before.s * v.x + before.c * v.y;\n const x = after.c * x0 - after.s * y0;\n const y = after.s * x0 + after.c * y0;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function transform(x: number, y: number, a: number): TransformValue {\n return { p: vec2(x, y), q: rotation(a) };\n}\n\nexport function copyTransform(out: TransformValue, transform: TransformValue): TransformValue {\n out.p.x = transform.p.x;\n out.p.y = transform.p.y;\n out.q.s = transform.q.s;\n out.q.c = transform.q.c;\n return out;\n}\n\nexport function transformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const x = xf.q.c * v.x - xf.q.s * v.y + xf.p.x;\n const y = xf.q.s * v.x + xf.q.c * v.y + xf.p.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const px = v.x - xf.p.x;\n const py = v.y - xf.p.y;\n const x = (xf.q.c * px + xf.q.s * py);\n const y = (-xf.q.s * px + xf.q.c * py);\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function retransformVec2(out: Vec2Value, from: TransformValue, to: TransformValue, v: Vec2Value): Vec2Value {\n const x0 = from.q.c * v.x - from.q.s * v.y + from.p.x;\n const y0 = from.q.s * v.x + from.q.c * v.y + from.p.y;\n const px = x0 - to.p.x;\n const py = y0 - to.p.y;\n const x = to.q.c * px + to.q.s * py;\n const y = -to.q.s * px + to.q.c * py;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformTransform(out: TransformValue, a: TransformValue, b: TransformValue): TransformValue {\n const c = a.q.c * b.q.c + a.q.s * b.q.s;\n const s = a.q.c * b.q.s - a.q.s * b.q.c;\n const x = a.q.c * (b.p.x - a.p.x) + a.q.s * (b.p.y - a.p.y);\n const y = -a.q.s * (b.p.x - a.p.x) + a.q.c * (b.p.y - a.p.y);\n out.q.c = c;\n out.q.s = s;\n out.p.x = x;\n out.p.y = y;\n return out;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_atan2 = Math.atan2;\n\nexport interface RotValue {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n}\n\nexport class Rot {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n\n /** Initialize from an angle in radians. */\n constructor(angle?: number | RotValue) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Rot)) {\n return new Rot(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\n /** @hidden */\n static neo(angle: number): Rot {\n const obj = Object.create(Rot.prototype);\n obj.setAngle(angle);\n return obj;\n }\n\n static clone(rot: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n const obj = Object.create(Rot.prototype);\n obj.s = rot.s;\n obj.c = rot.c;\n return obj;\n }\n\n static identity(): Rot {\n const obj = Object.create(Rot.prototype);\n obj.s = 0.0;\n obj.c = 1.0;\n return obj;\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.s) && Number.isFinite(obj.c);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Rot.isValid(o), \"Invalid Rot!\", o);\n }\n\n /** Set to the identity rotation. */\n setIdentity(): void {\n this.s = 0.0;\n this.c = 1.0;\n }\n\n set(angle: number | RotValue): void {\n if (typeof angle === \"object\") {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n\n } else {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n }\n\n setRot(angle: RotValue): void {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n }\n\n /** Set using an angle in radians. */\n setAngle(angle: number): void {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n\n /** Get the angle in radians. */\n getAngle(): number {\n return math_atan2(this.s, this.c);\n }\n\n /** Get the x-axis. */\n getXAxis(): Vec2 {\n return Vec2.neo(this.c, this.s);\n }\n\n /** Get the y-axis. */\n getYAxis(): Vec2 {\n return Vec2.neo(-this.s, this.c);\n }\n\n /** Multiply two rotations: q * r */\n static mul(rot: RotValue, m: RotValue): Rot;\n /** Rotate a vector */\n static mul(rot: RotValue, m: Vec2Value): Vec2;\n static mul(rot, m) {\n _ASSERT && Rot.assert(rot);\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Multiply two rotations: q * r */\n static mulRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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\n /** Rotate a vector */\n static mulVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n\n static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2 {\n const x = rot.c * (v.x - w.x) - rot.s * (v.y - w.y);\n const y = rot.s * (v.x - w.x) + rot.c * (v.y - w.y);\n return Vec2.neo(x, y);\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulT(rot: RotValue, m: RotValue): Rot;\n /** Inverse rotate a vector */\n static mulT(rot: RotValue, m: Vec2Value): Vec2;\n static mulT(rot, m) {\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulTRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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\n /** Inverse rotate a vector */\n static mulTVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"./Matrix\";\nimport { mod } from \"./Math\";\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { TransformValue } from \"./Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_atan2 = Math.atan2;\n/** @internal */ const math_PI = Math.PI;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * This describes the motion of a body/shape for TOI computation. Shapes are\n * defined with respect to the body origin, which may not coincide with the\n * center of mass. However, to support dynamics we must interpolate the center\n * of mass position.\n */\nexport class Sweep {\n /** Local center of mass position */\n localCenter = Vec2.zero();\n\n /** World center position */\n c = Vec2.zero();\n\n /** World angle */\n a = 0;\n\n /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */\n alpha0 = 0;\n\n c0 = Vec2.zero();\n a0 = 0;\n\n /** @internal */\n recycle() {\n matrix.zeroVec2(this.localCenter);\n matrix.zeroVec2(this.c);\n this.a = 0;\n this.alpha0 = 0;\n matrix.zeroVec2(this.c0);\n this.a0 = 0;\n }\n\n setTransform(xf: TransformValue): void {\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n\n this.a = this.a0 = math_atan2(xf.q.s, xf.q.c);\n }\n\n setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void {\n matrix.copyVec2(this.localCenter, localCenter);\n\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n }\n\n /**\n * Get the interpolated transform at a specific time.\n *\n * @param xf\n * @param beta A factor in [0,1], where 0 indicates alpha0\n */\n getTransform(xf: TransformValue, beta: number = 0): void {\n matrix.setRotAngle(xf.q, (1.0 - beta) * this.a0 + beta * this.a);\n matrix.combine2Vec2(xf.p, (1.0 - beta), this.c0, beta, this.c);\n\n // shift to origin\n matrix.minusVec2(xf.p, matrix.rotVec2(temp, xf.q, this.localCenter));\n }\n\n /**\n * Advance the sweep forward, yielding a new initial state.\n *\n * @param alpha The new initial time\n */\n advance(alpha: number): void {\n _ASSERT && console.assert(this.alpha0 < 1.0);\n const beta = (alpha - this.alpha0) / (1.0 - this.alpha0);\n matrix.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\n forward(): void {\n this.a0 = this.a;\n matrix.copyVec2(this.c0, this.c);\n }\n\n /**\n * normalize the angles in radians to be between -pi and pi.\n */\n normalize(): void {\n const a0 = mod(this.a0, -math_PI, +math_PI);\n this.a -= this.a0 - a0;\n this.a0 = a0;\n }\n\n set(that: Sweep): void {\n matrix.copyVec2(this.localCenter, that.localCenter);\n matrix.copyVec2(this.c, that.c);\n this.a = that.a;\n this.alpha0 = that.alpha0;\n matrix.copyVec2(this.c0, that.c0);\n this.a0 = that.a0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Rot, RotValue } from \"./Rot\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport type TransformValue = {\n p: Vec2Value;\n q: RotValue;\n};\n\n/**\n * A transform contains translation and rotation. It is used to represent the\n * position and orientation of rigid frames. Initialize using a position vector\n * and a rotation.\n */\nexport class Transform {\n /** position */\n p: Vec2;\n\n /** rotation */\n q: Rot;\n\n constructor(position?: Vec2Value, rotation?: number) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Transform)) {\n return new Transform(position, rotation);\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 rotation !== \"undefined\") {\n this.q.setAngle(rotation);\n }\n }\n\n static clone(xf: Transform): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(xf.p);\n obj.q = Rot.clone(xf.q);\n return obj;\n }\n\n /** @hidden */\n static neo(position: Vec2Value, rotation: Rot): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(position);\n obj.q = Rot.clone(rotation);\n return obj;\n }\n\n static identity(): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.zero();\n obj.q = Rot.identity();\n return obj;\n }\n\n /** Set this to the identity transform */\n setIdentity(): void {\n this.p.setZero();\n this.q.setIdentity();\n }\n\n /** Set position and angle */\n set(position: Vec2Value, rotation: number): void;\n /** Copy from another transform */\n set(xf: TransformValue): void;\n set(a: any, b?: any) {\n if (typeof b === \"undefined\") {\n this.p.set(a.p);\n this.q.set(a.q);\n } else {\n this.p.set(a);\n this.q.set(b);\n }\n }\n\n /** Set position and angle */\n setNum(position: Vec2Value, rotation: number) {\n this.p.setVec2(position);\n this.q.setAngle(rotation);\n }\n\n setTransform(xf: TransformValue): void {\n this.p.setVec2(xf.p);\n this.q.setRot(xf.q);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.p) && Rot.isValid(obj.q);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Transform.isValid(o), \"Invalid Transform!\", o);\n }\n\n static mul(a: TransformValue, b: Vec2Value): Vec2;\n static mul(a: TransformValue, b: TransformValue): Transform;\n // static mul(a: Transform, b: Vec2Value[]): Vec2[];\n // static mul(a: Transform, b: Transform[]): Transform[];\n static mul(a, b) {\n if (Array.isArray(b)) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n\n } else if (\"x\" in b && \"y\" in b) {\n return Transform.mulVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulXf(a, b);\n }\n }\n\n static mulAll(a: Transform, b: Vec2Value[]): Vec2[];\n static mulAll(a: Transform, b: Transform[]): Transform[];\n static mulAll(a: TransformValue, b) {\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n }\n\n /** @hidden @deprecated */\n static mulFn(a: TransformValue) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n return function(b: Vec2Value): Vec2 {\n return Transform.mul(a, b);\n };\n }\n\n static mulVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = (a.q.c * b.x - a.q.s * b.y) + a.p.x;\n const y = (a.q.s * b.x + a.q.c * b.y) + a.p.y;\n return Vec2.neo(x, y);\n }\n\n static mulXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p\n // = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p\n const xf = Transform.identity();\n xf.q = Rot.mulRot(a.q, b.q);\n xf.p = Vec2.add(Rot.mulVec2(a.q, b.p), a.p);\n return xf;\n }\n\n static mulT(a: TransformValue, b: Vec2Value): Vec2;\n static mulT(a: TransformValue, b: TransformValue): Transform;\n static mulT(a, b) {\n if (\"x\" in b && \"y\" in b) {\n return Transform.mulTVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulTXf(a, b);\n }\n }\n\n static mulTVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const px = b.x - a.p.x;\n const py = b.y - a.p.y;\n const x = (a.q.c * px + a.q.s * py);\n const y = (-a.q.s * px + a.q.c * py);\n return Vec2.neo(x, y);\n }\n\n static mulTXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q' * (B.q * v1 + B.p - A.p)\n // = A.q' * B.q * v1 + A.q' * (B.p - A.p)\n const xf = Transform.identity();\n xf.q.setRot(Rot.mulTRot(a.q, b.q));\n xf.p.setVec2(Rot.mulTVec2(a.q, Vec2.sub(b.p, a.p)));\n return xf;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2 } from \"../common/Vec2\";\n\nexport class Velocity {\n /** linear */\n v = Vec2.zero();\n\n /** angular */\n w = 0;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n\n\nexport class Position {\n /** location */\n c = Vec2.zero();\n\n /** angle */\n a = 0;\n\n // todo: cache sin/cos\n getTransform(xf: TransformValue, p: Vec2Value): TransformValue {\n // xf.q = rotation(this.a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(this.a);\n xf.q.s = math_sin(this.a);\n xf.p.x = this.c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = this.c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n }\n}\n\nexport function getTransform(xf: TransformValue, p: Vec2Value, c: Vec2Value, a: number): TransformValue {\n // xf.q = rotation(a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(a);\n xf.q.s = math_sin(a);\n xf.p.x = c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { MassData } from \"../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"./AABB\";\nimport { DistanceProxy } from \"./Distance\";\nimport type { Transform, TransformValue } from \"../common/Transform\";\nimport type { Vec2Value } from \"../common/Vec2\";\nimport { Style } from \"../util/Testbed\";\n\n// todo make shape an interface\n\n/**\n * A shape is used for collision detection. You can create a shape however you\n * like. Shapes used for simulation in World are created automatically when a\n * Fixture is created. Shapes may encapsulate one or more child shapes.\n */\nexport abstract class Shape {\n /** @hidden */ m_type: ShapeType;\n\n /**\n * @hidden\n * Radius of a shape. For polygonal shapes this must be b2_polygonRadius.\n * There is no support for making rounded polygons.\n */\n m_radius: number;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @hidden */\n abstract _reset(): void;\n\n static isValid(obj: any): boolean {\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\n abstract getRadius(): number;\n\n /**\n * Get the type of this shape. You can use this to down cast to the concrete\n * shape.\n *\n * @return the shape type.\n */\n abstract getType(): ShapeType;\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n abstract _clone(): Shape;\n\n /**\n * Get the number of child primitives.\n */\n abstract getChildCount(): number;\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n abstract testPoint(xf: TransformValue, p: Vec2Value): boolean;\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean;\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void;\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n abstract computeMass(massData: MassData, density?: number): void;\n\n abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void;\n\n}\n\nexport type ShapeType = \"circle\" | \"edge\" | \"polygon\" | \"chain\";\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Shape, ShapeType } from \"../collision/Shape\";\nimport { Body, MassData } from \"./Body\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const synchronize_aabb1 = new AABB();\n/** @internal */ const synchronize_aabb2 = new AABB();\n/** @internal */ const displacement = matrix.vec2(0, 0);\n\n/**\n * A fixture definition is used to create a fixture. This class defines an\n * abstract fixture definition. You can reuse fixture definitions safely.\n */\nexport interface FixtureOpt {\n userData?: unknown;\n /**\n * The friction coefficient, usually in the range [0,1]\n */\n friction?: number;\n /**\n * The restitution (elasticity) usually in the range [0,1]\n */\n restitution?: number;\n /**\n * The density, usually in kg/m^2\n */\n density?: number;\n /**\n * A sensor shape collects contact information but never generates a collision response.\n */\n isSensor?: boolean;\n /**\n * Zero, positive or negative collision group.\n * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide.\n */\n filterGroupIndex?: number;\n /**\n * Collision category bit or bits that this fixture belongs to.\n * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa.\n */\n filterCategoryBits?: number;\n /**\n * Collision category bit or bits that this fixture accept for collision.\n */\n filterMaskBits?: number;\n}\n\nexport interface FixtureDef extends FixtureOpt {\n shape: Shape;\n}\n\n/** @internal */ const FixtureDefDefault: FixtureOpt = {\n userData : null,\n friction : 0.2,\n restitution : 0.0,\n density : 0.0,\n isSensor : false,\n\n filterGroupIndex : 0,\n filterCategoryBits : 0x0001,\n filterMaskBits : 0xFFFF\n};\n\n/**\n * This proxy is used internally to connect shape children to the broad-phase.\n */\nexport class FixtureProxy {\n aabb: AABB;\n fixture: Fixture;\n childIndex: number;\n proxyId: number;\n constructor(fixture: Fixture, childIndex: number) {\n this.aabb = new AABB();\n this.fixture = fixture;\n this.childIndex = childIndex;\n this.proxyId;\n }\n}\n\n/**\n * A fixture is used to attach a shape to a body for collision detection. A\n * fixture inherits its transform from its parent. Fixtures hold additional\n * non-geometric data such as friction, collision filters, etc.\n *\n * To create a new Fixture use {@link Body.createFixture}.\n */\nexport class Fixture {\n /** @internal */ m_body: Body;\n /** @internal */ m_friction: number;\n /** @internal */ m_restitution: number;\n /** @internal */ m_density: number;\n /** @internal */ m_isSensor: boolean;\n /** @internal */ m_filterGroupIndex: number;\n /** @internal */ m_filterCategoryBits: number;\n /** @internal */ m_filterMaskBits: number;\n /** @internal */ m_shape: Shape;\n /** @internal */ m_next: Fixture | null;\n /** @internal */ m_proxies: FixtureProxy[];\n // 0 indicates inactive state, this is not the same as m_proxies.length\n /** @internal */ m_proxyCount: number;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(body: Body, def: FixtureDef);\n constructor(body: Body, shape: Shape, def?: FixtureOpt);\n constructor(body: Body, shape: Shape, density?: number);\n /** @internal */\n constructor(body: Body, shape?, def?) {\n if (shape.shape) {\n def = shape;\n shape = shape.shape;\n\n } else if (typeof def === \"number\") {\n def = {density : def};\n }\n\n def = options(def, FixtureDefDefault);\n\n this.m_body = body;\n\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\n this.m_filterGroupIndex = def.filterGroupIndex;\n this.m_filterCategoryBits = def.filterCategoryBits;\n this.m_filterMaskBits = def.filterMaskBits;\n\n // TODO validate shape\n this.m_shape = shape; // .clone();\n\n this.m_next = null;\n\n this.m_proxies = [];\n this.m_proxyCount = 0;\n\n // fixture proxies are created here,\n // but they are activate in when a fixture is added to body\n const childCount = this.m_shape.getChildCount();\n for (let i = 0; i < childCount; ++i) {\n this.m_proxies[i] = new FixtureProxy(this, i);\n }\n\n this.m_userData = def.userData;\n }\n\n /** @hidden Re-setup fixture. */\n _reset(): void {\n const body = this.getBody();\n const broadPhase = body.m_world.m_broadPhase;\n this.destroyProxies(broadPhase);\n if (this.m_shape._reset) {\n this.m_shape._reset();\n }\n const childCount = this.m_shape.getChildCount();\n for (let 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\n /** @internal */\n _serialize(): object {\n return {\n friction: this.m_friction,\n restitution: this.m_restitution,\n density: this.m_density,\n isSensor: this.m_isSensor,\n\n filterGroupIndex: this.m_filterGroupIndex,\n filterCategoryBits: this.m_filterCategoryBits,\n filterMaskBits: this.m_filterMaskBits,\n\n shape: this.m_shape,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, body: any, restore: any): Fixture {\n const shape = restore(Shape, data.shape);\n const fixture = shape && new Fixture(body, shape, data);\n return fixture;\n }\n\n /**\n * Get the type of the child shape. You can use this to down cast to the\n * concrete shape.\n */\n getType(): ShapeType {\n return this.m_shape.m_type;\n }\n\n /**\n * Get the child shape. You can modify the child shape, however you should not\n * change the number of vertices because this will crash some collision caching\n * mechanisms. Manipulating the shape may lead to non-physical behavior.\n */\n getShape(): Shape {\n return this.m_shape;\n }\n\n /**\n * A sensor shape collects contact information but never generates a collision\n * response.\n */\n isSensor(): boolean {\n return this.m_isSensor;\n }\n\n /**\n * Set if this fixture is a sensor.\n */\n setSensor(sensor: boolean): void {\n if (sensor != this.m_isSensor) {\n this.m_body.setAwake(true);\n this.m_isSensor = sensor;\n }\n }\n\n // /**\n // * Get the contact filtering data.\n // */\n // getFilterData() {\n // return this.m_filter;\n // }\n\n /**\n * Get the user data that was assigned in the fixture definition. Use this to\n * store your application specific data.\n */\n getUserData(): unknown {\n return this.m_userData;\n }\n\n /**\n * Set the user data. Use this to store your application specific data.\n */\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get the parent body of this fixture. This is null if the fixture is not\n * attached.\n */\n getBody(): Body {\n return this.m_body;\n }\n\n /**\n * Get the next fixture in the parent body's fixture list.\n */\n getNext(): Fixture | null {\n return this.m_next;\n }\n\n /**\n * Get the density of this fixture.\n */\n getDensity(): number {\n return this.m_density;\n }\n\n /**\n * Set the density of this fixture. This will _not_ automatically adjust the\n * mass of the body. You must call Body.resetMassData to update the body's mass.\n */\n setDensity(density: number): void {\n _ASSERT && console.assert(Number.isFinite(density) && density >= 0.0);\n this.m_density = density;\n }\n\n /**\n * Get the coefficient of friction, usually in the range [0,1].\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Set the coefficient of friction. This will not change the friction of\n * existing contacts.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the coefficient of restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Set the coefficient of restitution. This will not change the restitution of\n * existing contacts.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Test a point in world coordinates for containment in this fixture.\n */\n testPoint(p: Vec2Value): boolean {\n return this.m_shape.testPoint(this.m_body.getTransform(), p);\n }\n\n /**\n * Cast a ray against this shape.\n */\n rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean {\n return this.m_shape.rayCast(output, input, this.m_body.getTransform(), childIndex);\n }\n\n /**\n * Get the mass data for this fixture. The mass data is based on the density and\n * the shape. The rotational inertia is about the shape's origin. This operation\n * may be expensive.\n */\n getMassData(massData: MassData): void {\n this.m_shape.computeMass(massData, this.m_density);\n }\n\n /**\n * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a\n * more accurate AABB, compute it using the shape and the body transform.\n */\n getAABB(childIndex: number): AABB {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_proxies.length);\n return this.m_proxies[childIndex].aabb;\n }\n\n /**\n * These support body activation/deactivation.\n */\n createProxies(broadPhase: BroadPhase, xf: TransformValue): void {\n _ASSERT && console.assert(this.m_proxyCount == 0);\n\n // Create proxies in the broad-phase.\n this.m_proxyCount = this.m_shape.getChildCount();\n\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n this.m_shape.computeAABB(proxy.aabb, xf, i);\n proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy);\n }\n }\n\n destroyProxies(broadPhase: BroadPhase): void {\n // Destroy proxies in the broad-phase.\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n broadPhase.destroyProxy(proxy.proxyId);\n proxy.proxyId = null;\n }\n\n this.m_proxyCount = 0;\n }\n\n /**\n * Updates this fixture proxy in broad-phase (with combined AABB of current and\n * next transformation).\n */\n synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void {\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n // Compute an AABB that covers the swept shape (may miss some rotation\n // effect).\n this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex);\n this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex);\n\n proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2);\n\n matrix.subVec2(displacement, xf2.p, xf1.p);\n\n broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement);\n }\n }\n\n /**\n * Set the contact filtering data. This will not update contacts until the next\n * time step when either parent body is active and awake. This automatically\n * calls refilter.\n */\n setFilterData(filter: { groupIndex: number, categoryBits: number, maskBits: number }): void {\n this.m_filterGroupIndex = filter.groupIndex;\n this.m_filterCategoryBits = filter.categoryBits;\n this.m_filterMaskBits = filter.maskBits;\n this.refilter();\n }\n\n getFilterGroupIndex(): number {\n return this.m_filterGroupIndex;\n }\n\n setFilterGroupIndex(groupIndex: number): void {\n this.m_filterGroupIndex = groupIndex;\n this.refilter();\n }\n\n getFilterCategoryBits(): number {\n return this.m_filterCategoryBits;\n }\n\n setFilterCategoryBits(categoryBits: number): void {\n this.m_filterCategoryBits = categoryBits;\n this.refilter();\n }\n\n getFilterMaskBits(): number {\n return this.m_filterMaskBits;\n }\n\n setFilterMaskBits(maskBits: number): void {\n this.m_filterMaskBits = maskBits;\n this.refilter();\n }\n\n /**\n * Call this if you want to establish collision that was previously disabled by\n * ContactFilter.\n */\n refilter(): void {\n if (this.m_body == null) {\n return;\n }\n\n // Flag associated contacts for filtering.\n let edge = this.m_body.getContactList();\n while (edge) {\n const contact = edge.contact;\n const fixtureA = contact.getFixtureA();\n const fixtureB = contact.getFixtureB();\n if (fixtureA == this || fixtureB == this) {\n contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n\n const world = this.m_body.getWorld();\n\n if (world == null) {\n return;\n }\n\n // Touch each proxy so that new pairs may be created\n const broadPhase = world.m_broadPhase;\n for (let i = 0; i < this.m_proxyCount; ++i) {\n broadPhase.touchProxy(this.m_proxies[i].proxyId);\n }\n }\n\n /**\n * Implement this method to provide collision filtering, if you want finer\n * control over contact creation.\n *\n * Return true if contact calculations should be performed between these two\n * fixtures.\n *\n * Warning: for performance reasons this is only called when the AABBs begin to\n * overlap.\n */\n shouldCollide(that: Fixture): boolean {\n\n if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) {\n return that.m_filterGroupIndex > 0;\n }\n\n const collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0;\n const collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0;\n const collide = collideA && collideB;\n return collide;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Velocity } from \"./Velocity\";\nimport { Position } from \"./Position\";\nimport { Fixture, FixtureDef, FixtureOpt } from \"./Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { JointEdge } from \"./Joint\";\nimport { World } from \"./World\";\nimport { ContactEdge } from \"./Contact\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nexport type BodyType = \"static\" | \"kinematic\" | \"dynamic\";\n\n/** @internal */ const STATIC = \"static\";\n/** @internal */ const KINEMATIC = \"kinematic\";\n/** @internal */ const DYNAMIC = \"dynamic\";\n\n/** @internal */ const oldCenter = matrix.vec2(0, 0);\n/** @internal */ const localCenter = matrix.vec2(0, 0);\n/** @internal */ const shift = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n\nexport interface BodyDef {\n /**\n * Body types are static, kinematic, or dynamic. Note: if a dynamic\n * body would have zero mass, the mass is set to one.\n */\n type?: BodyType;\n /**\n * The world position of the body. Avoid creating bodies at the\n * origin since this can lead to many overlapping shapes.\n */\n position?: Vec2Value;\n /**\n * The world angle of the body in radians.\n */\n angle?: number;\n /**\n * The linear velocity of the body's origin in world co-ordinates.\n */\n linearVelocity?: Vec2Value;\n angularVelocity?: number;\n /**\n * Linear damping is use to reduce the linear velocity. The\n * damping parameter can be larger than 1.0 but the damping effect becomes\n * sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n linearDamping?: number;\n /**\n * Angular damping is use to reduce the angular velocity.\n * The damping parameter can be larger than 1.0 but the damping effect\n * becomes sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n angularDamping?: number;\n /**\n * Should this body be prevented from rotating? Useful for characters.\n */\n fixedRotation?: boolean;\n /**\n * Is this a fast moving body that should be prevented from\n * tunneling through other moving bodies? Note that all bodies are\n * prevented from tunneling through kinematic and static bodies. This\n * setting is only considered on dynamic bodies. Warning: You should use\n * this flag sparingly since it increases processing time.\n */\n bullet?: boolean;\n gravityScale?: number;\n /**\n * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage.\n */\n allowSleep?: boolean;\n /**\n * Is this body initially awake or sleeping?\n */\n awake?: boolean;\n /**\n * Does this body start out active?\n */\n active?: boolean;\n userData?: any;\n}\n\n/** @internal */ const BodyDefDefault: BodyDef = {\n type : STATIC,\n position : Vec2.zero(),\n angle : 0.0,\n\n linearVelocity : Vec2.zero(),\n angularVelocity : 0.0,\n\n linearDamping : 0.0,\n angularDamping : 0.0,\n\n fixedRotation : false,\n bullet : false,\n gravityScale : 1.0,\n\n allowSleep : true,\n awake : true,\n active : true,\n\n userData : null\n};\n\n/**\n * MassData This holds the mass data computed for a shape.\n */\nexport interface MassData {\n /** The mass of the shape, usually in kilograms. */\n mass: number;\n /** The position of the shape's centroid relative to the shape's origin. */\n center: Vec2Value;\n /** The rotational inertia of the shape about the local origin. */\n I: number;\n}\n\n/**\n * A rigid body composed of one or more fixtures.\n *\n * To create a new Body use {@link World.createBody}.\n */\nexport class Body {\n /**\n * A static body does not move under simulation and behaves as if it has infinite mass.\n * Internally, zero is stored for the mass and the inverse mass.\n * Static bodies can be moved manually by the user.\n * A static body has zero velocity.\n * Static bodies do not collide with other static or kinematic bodies.\n */\n static readonly STATIC: BodyType = \"static\";\n /**\n * A kinematic body moves under simulation according to its velocity.\n * Kinematic bodies do not respond to forces.\n * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity.\n * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass.\n * Kinematic bodies do not collide with other kinematic or static bodies.\n */\n static readonly KINEMATIC: BodyType = \"kinematic\";\n\n /**\n * A dynamic body is fully simulated.\n * They can be moved manually by the user, but normally they move according to forces.\n * A dynamic body can collide with all body types.\n * A dynamic body always has finite, non-zero mass.\n * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate.\n */\n static readonly DYNAMIC: BodyType = \"dynamic\";\n\n /** @internal */ m_world: World;\n /** @internal */ m_awakeFlag: boolean;\n /** @internal */ m_autoSleepFlag: boolean;\n /** @internal */ m_bulletFlag: boolean;\n /** @internal */ m_fixedRotationFlag: boolean;\n /** @internal */ m_activeFlag: boolean;\n /** @internal */ m_islandFlag: boolean;\n /** @internal */ m_toiFlag: boolean;\n /** @internal */ m_userData: unknown;\n /** @internal */ m_type: BodyType;\n /** @internal */ m_mass: number;\n /** @internal */ m_invMass: number;\n /** @internal Rotational inertia about the center of mass. */\n m_I: number;\n /** @internal */ m_invI: number;\n /** @internal the body origin transform */\n m_xf: Transform;\n /** @internal the swept motion for CCD */\n m_sweep: Sweep;\n // position and velocity correction\n /** @internal */ c_velocity: Velocity;\n /** @internal */ c_position: Position;\n /** @internal */ m_force: Vec2;\n /** @internal */ m_torque: number;\n /** @internal */ m_linearVelocity: Vec2;\n /** @internal */ m_angularVelocity: number;\n /** @internal */ m_linearDamping: number;\n /** @internal */ m_angularDamping: number;\n /** @internal */ m_gravityScale: number;\n /** @internal */ m_sleepTime: number;\n /** @internal */ m_jointList: JointEdge | null;\n /** @internal */ m_contactList: ContactEdge | null;\n /** @internal */ m_fixtureList: Fixture | null;\n /** @internal */ m_prev: Body | null;\n /** @internal */ m_next: Body | null;\n /** @internal */ m_destroyed: boolean;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @internal */\n constructor(world: World, def: BodyDef) {\n def = options(def, BodyDefDefault);\n\n _ASSERT && console.assert(Vec2.isValid(def.position));\n _ASSERT && console.assert(Vec2.isValid(def.linearVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angle));\n _ASSERT && console.assert(Number.isFinite(def.angularVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angularDamping) && def.angularDamping >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.linearDamping) && def.linearDamping >= 0.0);\n\n this.m_world = world;\n\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\n this.m_islandFlag = false;\n this.m_toiFlag = false;\n\n this.m_userData = def.userData;\n this.m_type = def.type;\n\n if (this.m_type == DYNAMIC) {\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n } else {\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n }\n\n // Rotational inertia about the center of mass.\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n // the body origin transform\n this.m_xf = Transform.identity();\n this.m_xf.p.setVec2(def.position);\n this.m_xf.q.setAngle(def.angle);\n\n // the swept motion for CCD\n this.m_sweep = new Sweep();\n this.m_sweep.setTransform(this.m_xf);\n\n // position and velocity correction\n this.c_velocity = new Velocity();\n this.c_position = new Position();\n\n this.m_force = Vec2.zero();\n this.m_torque = 0.0;\n\n this.m_linearVelocity = Vec2.clone(def.linearVelocity);\n this.m_angularVelocity = def.angularVelocity;\n\n this.m_linearDamping = def.linearDamping;\n this.m_angularDamping = def.angularDamping;\n this.m_gravityScale = def.gravityScale;\n\n this.m_sleepTime = 0.0;\n\n this.m_jointList = null;\n this.m_contactList = null;\n this.m_fixtureList = null;\n\n this.m_prev = null;\n this.m_next = null;\n\n this.m_destroyed = false;\n }\n\n /** @internal */\n _serialize(): object {\n const fixtures = [];\n for (let 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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): Body {\n const body = new Body(world, data);\n\n if (data.fixtures) {\n for (let i = data.fixtures.length - 1; i >= 0; i--) {\n const fixture = restore(Fixture, data.fixtures[i], body);\n body._addFixture(fixture);\n }\n }\n return body;\n }\n\n isWorldLocked(): boolean {\n return this.m_world && this.m_world.isLocked() ? true : false;\n }\n\n getWorld(): World {\n return this.m_world;\n }\n\n getNext(): Body | null {\n return this.m_next;\n }\n\n setUserData(data: any): void {\n this.m_userData = data;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n getFixtureList(): Fixture | null {\n return this.m_fixtureList;\n }\n\n getJointList(): JointEdge | null {\n return this.m_jointList;\n }\n\n /**\n * Warning: this list changes during the time step and you may miss some\n * collisions if you don't use ContactListener.\n */\n getContactList(): ContactEdge | null {\n return this.m_contactList;\n }\n\n isStatic(): boolean {\n return this.m_type == STATIC;\n }\n\n isDynamic(): boolean {\n return this.m_type == DYNAMIC;\n }\n\n isKinematic(): boolean {\n return this.m_type == KINEMATIC;\n }\n\n /**\n * This will alter the mass and velocity.\n */\n setStatic(): Body {\n this.setType(STATIC);\n return this;\n }\n\n setDynamic(): Body {\n this.setType(DYNAMIC);\n return this;\n }\n\n setKinematic(): Body {\n this.setType(KINEMATIC);\n return this;\n }\n\n /**\n * Get the type of the body.\n */\n getType(): BodyType {\n return this.m_type;\n }\n\n /**\n * Set the type of the body to \"static\", \"kinematic\" or \"dynamic\".\n * @param type The type of the body.\n */\n setType(type: BodyType): void {\n _ASSERT && console.assert(type === STATIC || type === KINEMATIC || type === DYNAMIC);\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type == type) {\n return;\n }\n\n this.m_type = type;\n\n this.resetMassData();\n\n if (this.m_type == STATIC) {\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_sweep.forward();\n this.synchronizeFixtures();\n }\n\n this.setAwake(true);\n\n this.m_force.setZero();\n this.m_torque = 0.0;\n\n // Delete the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n\n // Touch the proxies so that new contacts will be created (when appropriate)\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n for (let i = 0; i < f.m_proxyCount; ++i) {\n broadPhase.touchProxy(f.m_proxies[i].proxyId);\n }\n }\n }\n\n isBullet(): boolean {\n return this.m_bulletFlag;\n }\n\n /**\n * Should this body be treated like a bullet for continuous collision detection?\n */\n setBullet(flag: boolean): void {\n this.m_bulletFlag = !!flag;\n }\n\n isSleepingAllowed(): boolean {\n return this.m_autoSleepFlag;\n }\n\n setSleepingAllowed(flag: boolean): void {\n this.m_autoSleepFlag = !!flag;\n if (this.m_autoSleepFlag == false) {\n this.setAwake(true);\n }\n }\n\n isAwake(): boolean {\n return this.m_awakeFlag;\n }\n\n /**\n * Set the sleep state of the body. A sleeping body has very low CPU cost.\n *\n * @param flag Set to true to wake the body, false to put it to sleep.\n */\n setAwake(flag: boolean): void {\n if (flag) {\n this.m_awakeFlag = true;\n this.m_sleepTime = 0.0;\n } else {\n this.m_awakeFlag = false;\n this.m_sleepTime = 0.0;\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_force.setZero();\n this.m_torque = 0.0;\n }\n }\n\n isActive(): boolean {\n return this.m_activeFlag;\n }\n\n /**\n * Set the active state of the body. An inactive body is not simulated and\n * cannot be collided with or woken up. If you pass a flag of true, all fixtures\n * will be added to the broad-phase. If you pass a flag of false, all fixtures\n * will be removed from the broad-phase and all contacts will be destroyed.\n * Fixtures and joints are otherwise unaffected.\n *\n * You may continue to create/destroy fixtures and joints on inactive bodies.\n * Fixtures on an inactive body are implicitly inactive and will not participate\n * in collisions, ray-casts, or queries. Joints connected to an inactive body\n * are implicitly inactive. An inactive body is still owned by a World object\n * and remains\n */\n setActive(flag: boolean): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (flag == this.m_activeFlag) {\n return;\n }\n\n this.m_activeFlag = !!flag;\n\n if (this.m_activeFlag) {\n // Create all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.createProxies(broadPhase, this.m_xf);\n }\n\t\t // Contacts are created at the beginning of the next\n\t\t this.m_world.m_newFixture = true;\n } else {\n // Destroy all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.destroyProxies(broadPhase);\n }\n\n // Destroy the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n }\n }\n\n isFixedRotation(): boolean {\n return this.m_fixedRotationFlag;\n }\n\n /**\n * Set this body to have fixed rotation. This causes the mass to be reset.\n */\n setFixedRotation(flag: boolean): void {\n if (this.m_fixedRotationFlag == flag) {\n return;\n }\n\n this.m_fixedRotationFlag = !!flag;\n\n this.m_angularVelocity = 0.0;\n\n this.resetMassData();\n }\n\n /**\n * Get the world transform for the body's origin.\n */\n getTransform(): Transform {\n return this.m_xf;\n }\n\n /**\n * Set the position of the body's origin and rotation. Manipulating a body's\n * transform may cause non-physical behavior. Note: contacts are updated on the\n * next call to World.step.\n *\n * @param position The world position of the body's local origin.\n * @param angle The world rotation in radians.\n */\n setTransform(position: Vec2Value, angle: number): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n this.m_xf.setNum(position, angle);\n this.m_sweep.setTransform(this.m_xf);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let 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\n synchronizeTransform(): void {\n this.m_sweep.getTransform(this.m_xf, 1);\n }\n\n /**\n * Update fixtures in broad-phase.\n */\n synchronizeFixtures(): void {\n this.m_sweep.getTransform(xf, 0);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.synchronize(broadPhase, xf, this.m_xf);\n }\n }\n\n /**\n * Used in TOI.\n */\n advance(alpha: number): void {\n // Advance to the new safe time. This doesn't sync the broad-phase.\n this.m_sweep.advance(alpha);\n matrix.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\n /**\n * Get the world position for the body's origin.\n */\n getPosition(): Vec2 {\n return this.m_xf.p;\n }\n\n setPosition(p: Vec2Value): void {\n this.setTransform(p, this.m_sweep.a);\n }\n\n /**\n * Get the current world rotation angle in radians.\n */\n getAngle(): number {\n return this.m_sweep.a;\n }\n\n setAngle(angle: number): void {\n this.setTransform(this.m_xf.p, angle);\n }\n\n /**\n * Get the world position of the center of mass.\n */\n getWorldCenter(): Vec2 {\n return this.m_sweep.c;\n }\n\n /**\n * Get the local position of the center of mass.\n */\n getLocalCenter(): Vec2 {\n return this.m_sweep.localCenter;\n }\n\n /**\n * Get the linear velocity of the center of mass.\n *\n * @return the linear velocity of the center of mass.\n */\n getLinearVelocity(): Vec2 {\n return this.m_linearVelocity;\n }\n\n /**\n * Get the world linear velocity of a world point attached to this body.\n *\n * @param worldPoint A point in world coordinates.\n */\n getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2 {\n const localCenter = Vec2.sub(worldPoint, this.m_sweep.c);\n return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity,\n localCenter));\n }\n\n /**\n * Get the world velocity of a local point.\n *\n * @param localPoint A point in local coordinates.\n */\n getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2 {\n return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint));\n }\n\n /**\n * Set the linear velocity of the center of mass.\n *\n * @param v The new linear velocity of the center of mass.\n */\n setLinearVelocity(v: Vec2Value): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (Vec2.dot(v, v) > 0.0) {\n this.setAwake(true);\n }\n this.m_linearVelocity.setVec2(v);\n }\n\n /**\n * Get the angular velocity.\n *\n * @returns the angular velocity in radians/second.\n */\n getAngularVelocity(): number {\n return this.m_angularVelocity;\n }\n\n /**\n * Set the angular velocity.\n *\n * @param omega The new angular velocity in radians/second.\n */\n setAngularVelocity(w: number): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (w * w > 0.0) {\n this.setAwake(true);\n }\n this.m_angularVelocity = w;\n }\n\n getLinearDamping(): number {\n return this.m_linearDamping;\n }\n\n setLinearDamping(linearDamping: number): void {\n this.m_linearDamping = linearDamping;\n }\n\n getAngularDamping(): number {\n return this.m_angularDamping;\n }\n\n setAngularDamping(angularDamping: number): void {\n this.m_angularDamping = angularDamping;\n }\n\n getGravityScale(): number {\n return this.m_gravityScale;\n }\n\n /**\n * Scale the gravity applied to this body.\n */\n setGravityScale(scale: number): void {\n this.m_gravityScale = scale;\n }\n\n /**\n * Get the total mass of the body.\n *\n * @returns The mass, usually in kilograms (kg).\n */\n getMass(): number {\n return this.m_mass;\n }\n\n /**\n * Get the rotational inertia of the body about the local origin.\n *\n * @return the rotational inertia, usually in kg-m^2.\n */\n getInertia(): number {\n return this.m_I + this.m_mass\n * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter);\n }\n\n /**\n * Copy the mass data of the body to data.\n */\n getMassData(data: MassData): void {\n data.mass = this.m_mass;\n data.I = this.getInertia();\n matrix.copyVec2(data.center, this.m_sweep.localCenter);\n }\n\n /**\n * This resets the mass properties to the sum of the mass properties of the\n * fixtures. This normally does not need to be called unless you called\n * SetMassData to override the mass and you later want to reset the mass.\n */\n resetMassData(): void {\n // Compute mass data from shapes. Each shape has its own density.\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n matrix.zeroVec2(this.m_sweep.localCenter);\n\n // Static and kinematic bodies have zero mass.\n if (this.isStatic() || this.isKinematic()) {\n matrix.copyVec2(this.m_sweep.c0, this.m_xf.p);\n matrix.copyVec2(this.m_sweep.c, this.m_xf.p);\n this.m_sweep.a0 = this.m_sweep.a;\n return;\n }\n\n _ASSERT && console.assert(this.isDynamic());\n\n // Accumulate mass over all fixtures.\n matrix.zeroVec2(localCenter);\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n if (f.m_density == 0.0) {\n continue;\n }\n\n const massData: MassData = {\n mass: 0,\n center: matrix.vec2(0, 0),\n I: 0\n };\n f.getMassData(massData);\n this.m_mass += massData.mass;\n matrix.plusScaleVec2(localCenter, massData.mass, massData.center);\n this.m_I += massData.I;\n }\n\n // Compute center of mass.\n if (this.m_mass > 0.0) {\n this.m_invMass = 1.0 / this.m_mass;\n matrix.scaleVec2(localCenter, this.m_invMass, localCenter);\n\n } else {\n // Force all dynamic bodies to have a positive mass.\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n }\n\n if (this.m_I > 0.0 && this.m_fixedRotationFlag == false) {\n // Center the inertia about the center of mass.\n this.m_I -= this.m_mass * matrix.dotVec2(localCenter, localCenter);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n\n } else {\n this.m_I = 0.0;\n this.m_invI = 0.0;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(localCenter, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Set the mass properties to override the mass properties of the fixtures. Note\n * that this changes the center of mass position. Note that creating or\n * destroying fixtures can also alter the mass. This function has no effect if\n * the body isn't dynamic.\n *\n * @param massData The mass properties.\n */\n setMassData(massData: MassData): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n this.m_mass = massData.mass;\n if (this.m_mass <= 0.0) {\n this.m_mass = 1.0;\n }\n\n this.m_invMass = 1.0 / this.m_mass;\n\n if (massData.I > 0.0 && this.m_fixedRotationFlag == false) {\n this.m_I = massData.I - this.m_mass * matrix.dotVec2(massData.center, massData.center);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(massData.center, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Apply a force at a world point. If the force is not applied at the center of\n * mass, it will generate a torque and affect the angular velocity. This wakes\n * up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyForce(force: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping.\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), force);\n }\n }\n\n /**\n * Apply a force to the center of mass. This wakes up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param wake Also wake up the body\n */\n applyForceToCenter(force: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n }\n }\n\n /**\n * Apply a torque. This affects the angular velocity without affecting the\n * linear velocity of the center of mass. This wakes up the body.\n *\n * @param torque About the z-axis (out of the screen), usually in N-m.\n * @param wake Also wake up the body\n */\n applyTorque(torque: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_torque += torque;\n }\n }\n\n /**\n * Apply an impulse at a point. This immediately modifies the velocity. It also\n * modifies the angular velocity if the point of application is not at the\n * center of mass. This wakes up the body.\n *\n * @param impulse The world impulse vector, usually in N-seconds or kg-m/s.\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n\n // Don't accumulate velocity if the body is sleeping\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(point, this.m_sweep.c), impulse);\n }\n }\n\n /**\n * Apply an angular impulse.\n *\n * @param impulse The angular impulse in units of kg*m*m/s\n * @param wake Also wake up the body\n */\n applyAngularImpulse(impulse: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate velocity if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_angularVelocity += this.m_invI * impulse;\n }\n }\n\n /**\n * This is used to test if two bodies should collide.\n * \n * Bodies do not collide when:\n * - Neither of them is dynamic\n * - They are connected by a joint with collideConnected == false\n */\n shouldCollide(that: Body): boolean {\n // At least one body should be dynamic.\n if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) {\n return false;\n }\n // Does a joint prevent collision?\n for (let 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\n /** @internal Used for deserialize. */\n _addFixture(fixture: Fixture): Fixture {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.createProxies(broadPhase, this.m_xf);\n }\n\n fixture.m_next = this.m_fixtureList;\n this.m_fixtureList = fixture;\n\n // Adjust mass properties if needed.\n if (fixture.m_density > 0.0) {\n this.resetMassData();\n }\n\n // Let the world know we have a new fixture. This will cause new contacts\n // to be created at the beginning of the next time step.\n this.m_world.m_newFixture = true;\n\n return fixture;\n }\n\n /**\n * Creates a fixture and attach it to this body.\n *\n * If the density is non-zero, this function automatically updates the mass of\n * the body.\n *\n * Contacts are not created until the next time step.\n *\n * Warning: This function is locked during callbacks.\n */\n createFixture(def: FixtureDef): Fixture;\n createFixture(shape: Shape, opt?: FixtureOpt): Fixture;\n createFixture(shape: Shape, density?: number): Fixture;\n // tslint:disable-next-line:typedef\n createFixture(shape, fixdef?) {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n const fixture = new Fixture(this, shape, fixdef);\n this._addFixture(fixture);\n return fixture;\n }\n\n /**\n * Destroy a fixture. This removes the fixture from the broad-phase and destroys\n * all contacts associated with this fixture. This will automatically adjust the\n * mass of the body if the body is dynamic and the fixture has positive density.\n * All fixtures attached to a body are implicitly destroyed when the body is\n * destroyed.\n *\n * Warning: This function is locked during callbacks.\n *\n * @param fixture The fixture to be removed.\n */\n destroyFixture(fixture: Fixture): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n _ASSERT && console.assert(fixture.m_body == this);\n\n // Remove the fixture from this body's singly linked list.\n let found = false;\n if (this.m_fixtureList === fixture) {\n this.m_fixtureList = fixture.m_next;\n found = true;\n\n } else {\n let node = this.m_fixtureList;\n while (node != null) {\n if (node.m_next === fixture) {\n node.m_next = fixture.m_next;\n found = true;\n break;\n }\n node = node.m_next;\n }\n }\n\n // You tried to remove a shape that is not attached to this body.\n _ASSERT && console.assert(found);\n\n // Destroy any contacts associated with the fixture.\n let edge = this.m_contactList;\n while (edge) {\n const c = edge.contact;\n edge = edge.next;\n\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n\n if (fixture == fixtureA || fixture == fixtureB) {\n // This destroys the contact and removes it from\n // this body's contact list.\n this.m_world.destroyContact(c);\n }\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.destroyProxies(broadPhase);\n }\n\n fixture.m_body = null;\n fixture.m_next = null;\n\n this.m_world.publish(\"remove-fixture\", fixture);\n\n // Reset the mass data.\n this.resetMassData();\n }\n\n /**\n * Get the corresponding world point of a local point.\n */\n getWorldPoint(localPoint: Vec2Value): Vec2 {\n return Transform.mulVec2(this.m_xf, localPoint);\n }\n\n /**\n * Get the corresponding world vector of a local vector.\n */\n getWorldVector(localVector: Vec2Value): Vec2 {\n return Rot.mulVec2(this.m_xf.q, localVector);\n }\n\n /**\n * Gets the corresponding local point of a world point.\n */\n getLocalPoint(worldPoint: Vec2Value): Vec2 {\n return Transform.mulTVec2(this.m_xf, worldPoint);\n }\n\n /**\n * Gets the corresponding local vector of a world vector.\n */\n getLocalVector(worldVector: Vec2Value): Vec2 {\n return Rot.mulTVec2(this.m_xf.q, worldVector);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2, Vec2Value } from \"../common/Vec2\";\nimport type { Body } from \"./Body\";\nimport { TimeStep } from \"./Solver\";\nimport { Style } from \"../util/Testbed\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/**\n * A joint edge is used to connect bodies and joints together in a joint graph\n * where each body is a node and each joint is an edge. A joint edge belongs to\n * a doubly linked list maintained in each attached body. Each joint has two\n * joint nodes, one for each attached body.\n */\nexport class JointEdge {\n /**\n * provides quick access to the other body attached.\n */\n other: Body | null = null;\n /**\n * the joint\n */\n joint: Joint | null = null;\n /**\n * prev the previous joint edge in the body's joint list\n */\n prev: JointEdge | null = null;\n /**\n * the next joint edge in the body's joint list\n */\n next: JointEdge | null = null;\n}\n\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointOpt {\n /**\n * Use this to attach application specific data to your joints.\n */\n userData?: any;\n /**\n * Set this flag to true if the attached bodies\n * should collide.\n */\n collideConnected?: boolean;\n}\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointDef extends JointOpt {\n /**\n * The first attached body.\n */\n bodyA: Body;\n /**\n * The second attached body.\n */\n bodyB: Body;\n}\n\n/** @internal */ const DEFAULTS = {\n userData : null,\n collideConnected : false\n};\n\n/**\n * The base joint class. Joints are used to constraint two bodies together in\n * various fashions. Some joints also feature limits and motors.\n */\nexport abstract class Joint {\n\n /** @internal */ m_type: string = \"unknown-joint\";\n\n /** @internal */ m_bodyA: Body;\n /** @internal */ m_bodyB: Body;\n\n /** @internal */ m_collideConnected: boolean;\n\n /** @internal */ m_prev: Joint | null = null;\n /** @internal */ m_next: Joint | null = null;\n\n /** @internal */ m_edgeA: JointEdge = new JointEdge();\n /** @internal */ m_edgeB: JointEdge = new JointEdge();\n\n /** @internal */ m_islandFlag: boolean = false;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(def: JointDef);\n constructor(def: JointOpt, bodyA: Body, bodyB: Body);\n constructor(def: JointDef | JointOpt, bodyA?: Body, bodyB?: Body) {\n bodyA = \"bodyA\" in def ? def.bodyA : bodyA;\n bodyB = \"bodyB\" in def ? def.bodyB : bodyB;\n\n _ASSERT && console.assert(!!bodyA);\n _ASSERT && console.assert(!!bodyB);\n _ASSERT && console.assert(bodyA != bodyB);\n\n this.m_bodyA = bodyA!;\n this.m_bodyB = bodyB!;\n\n this.m_collideConnected = !!def.collideConnected;\n this.m_userData = def.userData;\n }\n\n /**\n * Short-cut function to determine if either body is inactive.\n */\n isActive(): boolean {\n return this.m_bodyA.isActive() && this.m_bodyB.isActive();\n }\n\n /**\n * Get the type of the concrete joint.\n */\n getType(): string {\n return this.m_type;\n }\n\n /**\n * Get the first body attached to this joint.\n */\n getBodyA(): Body {\n return this.m_bodyA;\n }\n\n /**\n * Get the second body attached to this joint.\n */\n getBodyB(): Body {\n return this.m_bodyB;\n }\n\n /**\n * Get the next joint the world joint list.\n */\n getNext(): Joint {\n return this.m_next;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get collide connected. Note: modifying the collide connect flag won't work\n * correctly because the flag is only checked when fixture AABBs begin to\n * overlap.\n */\n getCollideConnected(): boolean {\n return this.m_collideConnected;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n abstract getAnchorA(): Vec2;\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n abstract getAnchorB(): Vec2;\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n abstract getReactionForce(inv_dt: number): Vec2;\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n abstract getReactionTorque(inv_dt: number): number;\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {}\n\n abstract initVelocityConstraints(step: TimeStep): void;\n\n abstract solveVelocityConstraints(step: TimeStep): void;\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n abstract solvePositionConstraints(step: TimeStep): boolean;\n\n /**\n * @hidden @experimental\n * Update joint with new props.\n */\n abstract _reset(def: Partial): void;\n\n /**\n * @internal @deprecated\n * Temporary for backward compatibility, will be removed.\n */\n _resetAnchors(def: any): void {\n return this._reset(def);\n }\n}\n","/** @hidden */\nexport const stats = {\n gjkCalls: 0,\n gjkIters: 0,\n gjkMaxIters: 0,\n\n toiTime: 0,\n toiMaxTime: 0,\n toiCalls: 0,\n toiIters: 0,\n toiMaxIters: 0,\n toiRootIters: 0,\n toiMaxRootIters: 0,\n\n toString(newline?: string): string {\n newline = typeof newline === \"string\" ? newline : \"\\n\";\n let string = \"\";\n // tslint:disable-next-line:no-for-in\n for (const name in this) {\n if (typeof this[name] !== \"function\" && typeof this[name] !== \"object\") {\n string += name + \": \" + this[name] + newline;\n }\n }\n return string;\n }\n};\n","/** @internal */\nexport const now = function(): number {\n return Date.now();\n};\n\n/** @internal */\nexport const diff = function(time: number): number {\n return Date.now() - time;\n};\n\n/** @internal */\nexport default {\n now,\n diff,\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport { Shape } from \"./Shape\";\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Transform, TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const e12 = matrix.vec2(0, 0);\n/** @internal */ const e13 = matrix.vec2(0, 0);\n/** @internal */ const e23 = matrix.vec2(0, 0);\n/** @internal */ const temp1 = matrix.vec2(0, 0);\n/** @internal */ const temp2 = matrix.vec2(0, 0);\n\n/**\n * GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates.\n */\n\nstats.gjkCalls = 0;\nstats.gjkIters = 0;\nstats.gjkMaxIters = 0;\n\n/**\n * Input for Distance. You have to option to use the shape radii in the\n * computation. Even\n */\nexport class DistanceInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n useRadii = false;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n this.useRadii = false;\n }\n}\n\n/**\n * Output for Distance.\n */\nexport class DistanceOutput {\n /** closest point on shapeA */\n pointA = matrix.vec2(0, 0);\n /** closest point on shapeB */\n pointB = matrix.vec2(0, 0);\n distance = 0;\n /** iterations number of GJK iterations used */\n iterations = 0;\n recycle() {\n matrix.zeroVec2(this.pointA);\n matrix.zeroVec2(this.pointB);\n this.distance = 0;\n this.iterations = 0;\n }\n}\n\n/**\n * Used to warm start Distance. Set count to zero on first call.\n */\nexport class SimplexCache {\n /** length or area */\n metric: number = 0;\n /** vertices on shape A */\n indexA: number[] = [];\n /** vertices on shape B */\n indexB: number[] = [];\n count: number = 0;\n recycle() {\n this.metric = 0;\n this.indexA.length = 0;\n this.indexB.length = 0;\n this.count = 0;\n }\n}\n\n/**\n * Compute the closest points between two shapes. Supports any combination of:\n * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On\n * the first call set SimplexCache.count to zero.\n */\nexport const Distance = function (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void {\n ++stats.gjkCalls;\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n // Initialize the simplex.\n // const simplex = new Simplex();\n simplex.recycle();\n simplex.readCache(cache, proxyA, xfA, proxyB, xfB);\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n const k_maxIters = Settings.maxDistanceIterations;\n\n // These store the vertices of the last simplex so that we\n // can check for duplicates and prevent cycling.\n const saveA = [];\n const saveB = []; // int[3]\n let saveCount = 0;\n\n // Main iteration loop.\n let iter = 0;\n while (iter < k_maxIters) {\n // Copy simplex so we can identify duplicates.\n saveCount = simplex.m_count;\n for (let i = 0; i < saveCount; ++i) {\n saveA[i] = vertices[i].indexA;\n saveB[i] = vertices[i].indexB;\n }\n\n simplex.solve();\n\n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count === 3) {\n break;\n }\n\n // Get search direction.\n const d = simplex.getSearchDirection();\n\n // Ensure the search direction is numerically fit.\n if (matrix.lengthSqrVec2(d) < EPSILON * EPSILON) {\n // The origin is probably contained by a line segment\n // or triangle. Thus the shapes are overlapped.\n\n // We can't return zero here even though there may be overlap.\n // In case the simplex is a point, segment, or triangle it is difficult\n // to determine if the origin is contained in the CSO or very close to it.\n break;\n }\n\n // Compute a tentative new simplex vertex using support points.\n const vertex = vertices[simplex.m_count]; // SimplexVertex\n\n vertex.indexA = proxyA.getSupport(matrix.derotVec2(temp, xfA.q, matrix.scaleVec2(temp, -1, d)));\n matrix.transformVec2(vertex.wA, xfA, proxyA.getVertex(vertex.indexA));\n\n vertex.indexB = proxyB.getSupport(matrix.derotVec2(temp, xfB.q, d));\n matrix.transformVec2(vertex.wB, xfB, proxyB.getVertex(vertex.indexB));\n\n matrix.subVec2(vertex.w, vertex.wB, vertex.wA);\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n ++stats.gjkIters;\n\n // Check for duplicate support points. This is the main termination\n // criteria.\n let duplicate = false;\n for (let i = 0; i < saveCount; ++i) {\n if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) {\n duplicate = true;\n break;\n }\n }\n\n // If we found a duplicate support point we must exit to avoid cycling.\n if (duplicate) {\n break;\n }\n\n // New vertex is ok and needed.\n ++simplex.m_count;\n }\n\n stats.gjkMaxIters = math_max(stats.gjkMaxIters, iter);\n\n // Prepare output.\n simplex.getWitnessPoints(output.pointA, output.pointB);\n output.distance = matrix.distVec2(output.pointA, output.pointB);\n output.iterations = iter;\n\n // Cache the simplex.\n simplex.writeCache(cache);\n\n // Apply radii if requested.\n if (input.useRadii) {\n const rA = proxyA.m_radius;\n const rB = proxyB.m_radius;\n\n if (output.distance > rA + rB && output.distance > EPSILON) {\n // Shapes are still no overlapped.\n // Move the witness points to the outer surface.\n output.distance -= rA + rB;\n matrix.subVec2(normal, output.pointB, output.pointA);\n matrix.normalizeVec2(normal);\n matrix.plusScaleVec2(output.pointA, rA, normal);\n matrix.minusScaleVec2(output.pointB, rB, normal);\n } else {\n // Shapes are overlapped when radii are considered.\n // Move the witness points to the middle.\n const p = matrix.subVec2(temp, output.pointA, output.pointB);\n matrix.copyVec2(output.pointA, p);\n matrix.copyVec2(output.pointB, p);\n output.distance = 0.0;\n }\n }\n};\n\n/**\n * A distance proxy is used by the GJK algorithm. It encapsulates any shape.\n */\nexport class DistanceProxy {\n /** @internal */ m_vertices: Vec2Value[] = [];\n // todo: remove this?\n /** @internal */ m_count = 0;\n /** @internal */ m_radius = 0;\n\n recycle() {\n this.m_vertices.length = 0;\n this.m_count = 0;\n this.m_radius = 0;\n }\n\n /**\n * Get the vertex count.\n */\n getVertexCount(): number {\n return this.m_count;\n }\n\n /**\n * Get a vertex by index. Used by Distance.\n */\n getVertex(index: number): Vec2Value {\n _ASSERT && console.assert(0 <= index && index < this.m_count);\n return this.m_vertices[index];\n }\n\n /**\n * Get the supporting vertex index in the given direction.\n */\n getSupport(d: Vec2Value): number {\n let bestIndex = -1;\n let bestValue = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const value = matrix.dotVec2(this.m_vertices[i], d);\n if (value > bestValue) {\n bestIndex = i;\n bestValue = value;\n }\n }\n return bestIndex;\n }\n\n /**\n * Get the supporting vertex in the given direction.\n */\n getSupportVertex(d: Vec2Value): Vec2Value {\n return this.m_vertices[this.getSupport(d)];\n }\n\n /**\n * Initialize the proxy using the given shape. The shape must remain in scope\n * while the proxy is in use.\n */\n set(shape: Shape, index: number): void {\n // TODO remove, use shape instead\n _ASSERT && console.assert(typeof shape.computeDistanceProxy === \"function\");\n shape.computeDistanceProxy(this, index);\n }\n\n /**\n * Initialize the proxy using a vertex cloud and radius. The vertices\n * must remain in scope while the proxy is in use.\n */\n setVertices(vertices: Vec2Value[], count: number, radius: number) {\n this.m_vertices = vertices;\n this.m_count = count;\n this.m_radius = radius;\n }\n}\n\nclass SimplexVertex {\n /** support point in proxyA */\n wA = matrix.vec2(0, 0);\n /** wA index */\n indexA = 0;\n\n /** support point in proxyB */\n wB = matrix.vec2(0, 0);\n /** wB index */\n indexB = 0;\n\n /** wB - wA; */\n w = matrix.vec2(0, 0);\n /** barycentric coordinate for closest point */\n a = 0;\n\n recycle() {\n this.indexA = 0;\n this.indexB = 0;\n matrix.zeroVec2(this.wA);\n matrix.zeroVec2(this.wB);\n matrix.zeroVec2(this.w);\n this.a = 0;\n }\n set(v: SimplexVertex): void {\n this.indexA = v.indexA;\n this.indexB = v.indexB;\n matrix.copyVec2(this.wA, v.wA);\n matrix.copyVec2(this.wB, v.wB);\n matrix.copyVec2(this.w, v.w);\n this.a = v.a;\n }\n}\n\n/** @internal */ const searchDirection_reuse = matrix.vec2(0, 0);\n/** @internal */ const closestPoint_reuse = matrix.vec2(0, 0); \n\nclass Simplex {\n m_v1 = new SimplexVertex();\n m_v2 = new SimplexVertex();\n m_v3 = new SimplexVertex();\n m_v = [this.m_v1, this.m_v2, this.m_v3];\n m_count: number;\n recycle() {\n this.m_v1.recycle();\n this.m_v2.recycle();\n this.m_v3.recycle();\n this.m_count = 0;\n }\n\n /** @internal */ toString(): string {\n if (this.m_count === 3) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y,\n this.m_v3.a, this.m_v3.wA.x, this.m_v3.wA.y, this.m_v3.wB.x, this.m_v3.wB.y\n ].toString();\n\n } else if (this.m_count === 2) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y\n ].toString();\n\n } else if (this.m_count === 1) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y\n ].toString();\n\n } else {\n return \"+\" + this.m_count;\n }\n }\n\n readCache(cache: SimplexCache, proxyA: DistanceProxy, transformA: TransformValue, proxyB: DistanceProxy, transformB: TransformValue): void {\n _ASSERT && console.assert(cache.count <= 3);\n\n // Copy data from cache.\n this.m_count = cache.count;\n for (let i = 0; i < this.m_count; ++i) {\n const v = this.m_v[i];\n v.indexA = cache.indexA[i];\n v.indexB = cache.indexB[i];\n const wALocal = proxyA.getVertex(v.indexA);\n const wBLocal = proxyB.getVertex(v.indexB);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 0.0;\n }\n\n // Compute the new simplex metric, if it is substantially different than\n // old metric then flush the simplex.\n if (this.m_count > 1) {\n const metric1 = cache.metric;\n const metric2 = this.getMetric();\n if (metric2 < 0.5 * metric1 || 2.0 * metric1 < metric2 || metric2 < EPSILON) {\n // Reset the simplex.\n this.m_count = 0;\n }\n }\n\n // If the cache is empty or invalid...\n if (this.m_count === 0) {\n const v = this.m_v[0];\n v.indexA = 0;\n v.indexB = 0;\n const wALocal = proxyA.getVertex(0);\n const wBLocal = proxyB.getVertex(0);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 1.0;\n this.m_count = 1;\n }\n }\n\n writeCache(cache: SimplexCache): void {\n cache.metric = this.getMetric();\n cache.count = this.m_count;\n for (let i = 0; i < this.m_count; ++i) {\n cache.indexA[i] = this.m_v[i].indexA;\n cache.indexB[i] = this.m_v[i].indexB;\n }\n }\n\n getSearchDirection(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 1:\n return matrix.setVec2(searchDirection_reuse, -v1.w.x, -v1.w.y);\n\n case 2: {\n matrix.subVec2(e12, v2.w, v1.w);\n const sgn = -matrix.crossVec2Vec2(e12, v1.w);\n if (sgn > 0.0) {\n // Origin is left of e12.\n return matrix.setVec2(searchDirection_reuse, -e12.y, e12.x);\n } else {\n // Origin is right of e12.\n return matrix.setVec2(searchDirection_reuse, e12.y, -e12.x);\n }\n }\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(searchDirection_reuse);\n }\n }\n\n getClosestPoint(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n\n case 1:\n return matrix.copyVec2(closestPoint_reuse, v1.w);\n\n case 2:\n return matrix.combine2Vec2(closestPoint_reuse, v1.a, v1.w, v2.a, v2.w);\n\n case 3:\n return matrix.zeroVec2(closestPoint_reuse);\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n }\n }\n\n getWitnessPoints(pA: Vec2Value, pB: Vec2Value): void {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n break;\n\n case 1:\n matrix.copyVec2(pA, v1.wA);\n matrix.copyVec2(pB, v1.wB);\n break;\n\n case 2:\n matrix.combine2Vec2(pA, v1.a, v1.wA, v2.a, v2.wA);\n matrix.combine2Vec2(pB, v1.a, v1.wB, v2.a, v2.wB);\n break;\n\n case 3:\n matrix.combine3Vec2(pA, v1.a, v1.wA, v2.a, v2.wA, v3.a, v3.wA);\n matrix.copyVec2(pB, pA);\n break;\n\n default:\n _ASSERT && console.assert(false);\n break;\n }\n }\n\n getMetric(): number {\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return 0.0;\n\n case 1:\n return 0.0;\n\n case 2:\n return matrix.distVec2(this.m_v1.w, this.m_v2.w);\n\n case 3:\n return matrix.crossVec2Vec2(\n matrix.subVec2(temp1, this.m_v2.w, this.m_v1.w),\n matrix.subVec2(temp2, this.m_v3.w, this.m_v1.w),\n );\n\n default:\n _ASSERT && console.assert(false);\n return 0.0;\n }\n }\n\n solve(): void {\n switch (this.m_count) {\n case 1:\n break;\n\n case 2:\n this.solve2();\n break;\n\n case 3:\n this.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n }\n\n// Solve a line segment using barycentric coordinates.\n//\n// p = a1 * w1 + a2 * w2\n// a1 + a2 = 1\n//\n// The vector from the origin to the closest point on the line is\n// perpendicular to the line.\n// e12 = w2 - w1\n// dot(p, e) = 0\n// a1 * dot(w1, e) + a2 * dot(w2, e) = 0\n//\n// 2-by-2 linear system\n// [1 1 ][a1] = [1]\n// [w1.e12 w2.e12][a2] = [0]\n//\n// Define\n// d12_1 = dot(w2, e12)\n// d12_2 = -dot(w1, e12)\n// d12 = d12_1 + d12_2\n//\n// Solution\n// a1 = d12_1 / d12\n// a2 = d12_2 / d12\n solve2(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n matrix.subVec2(e12, w2, w1);\n\n // w1 region\n const d12_2 = -matrix.dotVec2(w1, e12);\n if (d12_2 <= 0.0) {\n // a2 <= 0, so we clamp it to 0\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // w2 region\n const d12_1 = matrix.dotVec2(w2, e12);\n if (d12_1 <= 0.0) {\n // a1 <= 0, so we clamp it to 0\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // Must be in e12 region.\n const inv_d12 = 1.0 / (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\n// Possible regions:\n// - points[2]\n// - edge points[0]-points[2]\n// - edge points[1]-points[2]\n// - inside the triangle\n solve3(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n const w3 = this.m_v3.w;\n\n // Edge12\n // [1 1 ][a1] = [1]\n // [w1.e12 w2.e12][a2] = [0]\n // a3 = 0\n matrix.subVec2(e12, w2, w1);\n const w1e12 = matrix.dotVec2(w1, e12);\n const w2e12 = matrix.dotVec2(w2, e12);\n const d12_1 = w2e12;\n const d12_2 = -w1e12;\n\n // Edge13\n // [1 1 ][a1] = [1]\n // [w1.e13 w3.e13][a3] = [0]\n // a2 = 0\n matrix.subVec2(e13, w3, w1);\n const w1e13 = matrix.dotVec2(w1, e13);\n const w3e13 = matrix.dotVec2(w3, e13);\n const d13_1 = w3e13;\n const d13_2 = -w1e13;\n\n // Edge23\n // [1 1 ][a2] = [1]\n // [w2.e23 w3.e23][a3] = [0]\n // a1 = 0\n matrix.subVec2(e23, w3, w2);\n const w2e23 = matrix.dotVec2(w2, e23);\n const w3e23 = matrix.dotVec2(w3, e23);\n const d23_1 = w3e23;\n const d23_2 = -w2e23;\n\n // Triangle123\n const n123 = matrix.crossVec2Vec2(e12, e13);\n\n const d123_1 = n123 * matrix.crossVec2Vec2(w2, w3);\n const d123_2 = n123 * matrix.crossVec2Vec2(w3, w1);\n const d123_3 = n123 * matrix.crossVec2Vec2(w1, w2);\n\n // w1 region\n if (d12_2 <= 0.0 && d13_2 <= 0.0) {\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // e12\n if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) {\n const inv_d12 = 1.0 / (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\n // e13\n if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) {\n const inv_d13 = 1.0 / (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\n // w2 region\n if (d12_1 <= 0.0 && d23_2 <= 0.0) {\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // w3 region\n if (d13_1 <= 0.0 && d23_1 <= 0.0) {\n this.m_v3.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v3);\n return;\n }\n\n // e23\n if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) {\n const inv_d23 = 1.0 / (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\n // Must be in triangle123\n const inv_d123 = 1.0 / (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}\n\n/** @internal */ const simplex = new Simplex();\n\n/** @internal */ const input = new DistanceInput();\n/** @internal */ const cache = new SimplexCache();\n/** @internal */ const output = new DistanceOutput();\n\n/**\n * Determine if two generic shapes overlap.\n */\nexport const testOverlap = function (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue): boolean {\n input.recycle();\n input.proxyA.set(shapeA, indexA);\n input.proxyB.set(shapeB, indexB);\n matrix.copyTransform(input.transformA, xfA);\n matrix.copyTransform(input.transformB, xfB);\n input.useRadii = true;\n\n output.recycle();\n cache.recycle();\n\n Distance(output, cache, input);\n\n return output.distance < 10.0 * EPSILON;\n};\n\n// legacy exports\nDistance.testOverlap = testOverlap;\nDistance.Input = DistanceInput;\nDistance.Output = DistanceOutput;\nDistance.Proxy = DistanceProxy;\nDistance.Cache = SimplexCache;\n\n/**\n * Input parameters for ShapeCast\n */\nexport class ShapeCastInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n readonly translationB = Vec2.zero();\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n matrix.zeroVec2(this.translationB);\n }\n}\n\n/**\n * Output results for b2ShapeCast\n */\nexport class ShapeCastOutput {\n point: Vec2 = Vec2.zero();\n normal: Vec2 = Vec2.zero();\n lambda = 1.0;\n iterations = 0;\n}\n\n/**\n * Perform a linear shape cast of shape B moving and shape A fixed. Determines\n * the hit point, normal, and translation fraction.\n * \n * @returns true if hit, false if there is no hit or an initial overlap\n */\n//\n// GJK-raycast\n// Algorithm by Gino van den Bergen.\n// \"Smooth Mesh Contacts with GJK\" in Game Physics Pearls. 2010\nexport const ShapeCast = function(output: ShapeCastOutput, input: ShapeCastInput): boolean {\n output.iterations = 0;\n output.lambda = 1.0;\n output.normal.setZero();\n output.point.setZero();\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n\n const radiusA = math_max(proxyA.m_radius, Settings.polygonRadius);\n const radiusB = math_max(proxyB.m_radius, Settings.polygonRadius);\n const radius = radiusA + radiusB;\n\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n const r = input.translationB;\n const n = Vec2.zero();\n let lambda = 0.0;\n\n // Initial simplex\n const simplex = new Simplex();\n simplex.m_count = 0;\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n\n // Get support point in -r direction\n let indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(r)));\n let wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n let indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, r));\n let wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const v = Vec2.sub(wA, wB);\n\n // Sigma is the target distance between polygons\n const sigma = math_max(Settings.polygonRadius, radius - Settings.polygonRadius);\n const tolerance = 0.5 * Settings.linearSlop;\n\n // Main iteration loop.\n const k_maxIters = 20;\n let iter = 0;\n while (iter < k_maxIters && v.length() - sigma > tolerance) {\n _ASSERT && console.assert(simplex.m_count < 3);\n\n output.iterations += 1;\n\n // Support in direction -v (A - B)\n indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(v)));\n wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, v));\n wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const p = Vec2.sub(wA, wB);\n\n // -v is a normal at p\n v.normalize();\n\n // Intersect ray with plane\n const vp = Vec2.dot(v, p);\n const vr = Vec2.dot(v, r);\n if (vp - sigma > lambda * vr) {\n if (vr <= 0.0) {\n return false;\n }\n\n lambda = (vp - sigma) / vr;\n if (lambda > 1.0) {\n return false;\n }\n\n n.setMul(-1, v);\n simplex.m_count = 0;\n }\n\n // Reverse simplex since it works with B - A.\n // Shift by lambda * r because we want the closest point to the current clip point.\n // Note that the support point p is not shifted because we want the plane equation\n // to be formed in unshifted space.\n const vertex = vertices[simplex.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.0;\n simplex.m_count += 1;\n\n switch (simplex.m_count) {\n case 1:\n break;\n\n case 2:\n simplex.solve2();\n break;\n\n case 3:\n simplex.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n \n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count == 3) {\n // Overlap\n return false;\n }\n\n // Get search direction.\n v.setVec2(simplex.getClosestPoint());\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n }\n\n if (iter == 0) {\n // Initial overlap\n return false;\n\t}\n\n // Prepare output.\n const pointA = Vec2.zero();\n const pointB = Vec2.zero();\n simplex.getWitnessPoints(pointB, pointA);\n\n if (v.lengthSquared() > 0.0) {\n n.setMul(-1, v);\n n.normalize();\n }\n\n output.point = Vec2.combine(1, pointA, radiusA, n);\n output.normal = n;\n output.lambda = lambda;\n output.iterations = iter;\n return true;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport Timer from \"../util/Timer\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Distance, DistanceInput, DistanceOutput, DistanceProxy, SimplexCache } from \"./Distance\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\n/**\n * Input parameters for TimeOfImpact.\n */\nexport class TOIInput {\n proxyA = new DistanceProxy();\n proxyB = new DistanceProxy();\n sweepA = new Sweep();\n sweepB = new Sweep();\n /** defines sweep interval [0, tMax] */\n tMax: number;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.sweepA.recycle();\n this.sweepB.recycle();\n this.tMax = -1;\n }\n}\n\nexport enum TOIOutputState {\n e_unset = -1,\n e_unknown = 0,\n e_failed = 1,\n e_overlapped = 2,\n e_touching = 3,\n e_separated = 4,\n}\n\n/**\n * Output parameters for TimeOfImpact.\n */\nexport class TOIOutput {\n state = TOIOutputState.e_unset;\n t = -1;\n recycle() {\n this.state = TOIOutputState.e_unset;\n this.t = -1;\n }\n}\n\nstats.toiTime = 0;\nstats.toiMaxTime = 0;\nstats.toiCalls = 0;\nstats.toiIters = 0;\nstats.toiMaxIters = 0;\nstats.toiRootIters = 0;\nstats.toiMaxRootIters = 0;\n\n/** @internal */ const distanceInput = new DistanceInput();\n/** @internal */ const distanceOutput = new DistanceOutput();\n// this is passed to Distance and SeparationFunction\n/** @internal */ const cache = new SimplexCache();\n\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const axisA = matrix.vec2(0, 0);\n/** @internal */ const axisB = matrix.vec2(0, 0);\n/** @internal */ const localPointA = matrix.vec2(0, 0);\n/** @internal */ const localPointB = matrix.vec2(0, 0);\n\n\n/**\n * Compute the upper bound on time before two shapes penetrate. Time is\n * represented as a fraction between [0,tMax]. This uses a swept separating axis\n * and may miss some intermediate, non-tunneling collisions. If you change the\n * time interval, you should call this function again.\n *\n * Note: use Distance to compute the contact point and normal at the time of\n * impact.\n *\n * CCD via the local separating axis method. This seeks progression by computing\n * the largest time at which separation is maintained.\n */\nexport const TimeOfImpact = function (output: TOIOutput, input: TOIInput): void {\n const timer = Timer.now();\n\n ++stats.toiCalls;\n\n output.state = TOIOutputState.e_unknown;\n output.t = input.tMax;\n\n const proxyA = input.proxyA; // DistanceProxy\n const proxyB = input.proxyB; // DistanceProxy\n\n const sweepA = input.sweepA; // Sweep\n const sweepB = input.sweepB; // Sweep\n\n // Large rotations can make the root finder fail, so we normalize the\n // sweep angles.\n sweepA.normalize();\n sweepB.normalize();\n\n const tMax = input.tMax;\n\n const totalRadius = proxyA.m_radius + proxyB.m_radius;\n const target = math_max(Settings.linearSlop, totalRadius - 3.0 * Settings.linearSlop);\n const tolerance = 0.25 * Settings.linearSlop;\n _ASSERT && console.assert(target > tolerance);\n\n let t1 = 0.0;\n const k_maxIterations = Settings.maxTOIIterations;\n let iter = 0;\n\n // Prepare input for distance query.\n // const cache = new SimplexCache();\n cache.recycle();\n\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\n // The outer loop progressively attempts to compute new separating axes.\n // This loop terminates when an axis is repeated (no progress is made).\n while (true) {\n sweepA.getTransform(xfA, t1);\n sweepB.getTransform(xfB, t1);\n\n // Get the distance between shapes. We can also use the results\n // to get a separating axis.\n matrix.copyTransform(distanceInput.transformA, xfA);\n matrix.copyTransform(distanceInput.transformB, xfB);\n Distance(distanceOutput, cache, distanceInput);\n\n // If the shapes are overlapped, we give up on continuous collision.\n if (distanceOutput.distance <= 0.0) {\n // Failure!\n output.state = TOIOutputState.e_overlapped;\n output.t = 0.0;\n break;\n }\n\n if (distanceOutput.distance < target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n break;\n }\n\n // Initialize the separating axis.\n separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1);\n\n // if (false) {\n // // Dump the curve seen by the root finder\n // const N = 100;\n // const dx = 1.0 / N;\n // const xs = []; // [ N + 1 ];\n // const fs = []; // [ N + 1 ];\n // const x = 0.0;\n // for (const i = 0; i <= N; ++i) {\n // sweepA.getTransform(xfA, x);\n // sweepB.getTransform(xfB, x);\n // const f = fcn.evaluate(xfA, xfB) - target;\n // printf(\"%g %g\\n\", x, f);\n // xs[i] = x;\n // fs[i] = f;\n // x += dx;\n // }\n // }\n\n // Compute the TOI on the separating axis. We do this by successively\n // resolving the deepest point. This loop is bounded by the number of\n // vertices.\n let done = false;\n let t2 = tMax;\n let pushBackIter = 0;\n while (true) {\n // Find the deepest point at t2. Store the witness point indices.\n let s2 = separationFunction.findMinSeparation(t2);\n\n // Is the final configuration separated?\n if (s2 > target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_separated;\n output.t = tMax;\n done = true;\n break;\n }\n\n // Has the separation reached tolerance?\n if (s2 > target - tolerance) {\n // Advance the sweeps\n t1 = t2;\n break;\n }\n\n // Compute the initial separation of the witness points.\n let s1 = separationFunction.evaluate(t1);\n\n // Check for initial overlap. This might happen if the root finder\n // runs out of iterations.\n if (s1 < target - tolerance) {\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n done = true;\n break;\n }\n\n // Check for touching\n if (s1 <= target + tolerance) {\n // Victory! t1 should hold the TOI (could be 0.0).\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n done = true;\n break;\n }\n\n // Compute 1D root of: f(x) - target = 0\n let rootIterCount = 0;\n let a1 = t1;\n let a2 = t2;\n while (true) {\n // Use a mix of the secant rule and bisection.\n let t;\n if (rootIterCount & 1) {\n // Secant rule to improve convergence.\n t = a1 + (target - s1) * (a2 - a1) / (s2 - s1);\n } else {\n // Bisection to guarantee progress.\n t = 0.5 * (a1 + a2);\n }\n\n ++rootIterCount;\n ++stats.toiRootIters;\n\n const s = separationFunction.evaluate(t);\n\n if (math_abs(s - target) < tolerance) {\n // t2 holds a tentative value for t1\n t2 = t;\n break;\n }\n\n // Ensure we continue to bracket the root.\n if (s > target) {\n a1 = t;\n s1 = s;\n } else {\n a2 = t;\n s2 = s;\n }\n\n if (rootIterCount === 50) {\n break;\n }\n }\n\n stats.toiMaxRootIters = math_max(stats.toiMaxRootIters, rootIterCount);\n\n ++pushBackIter;\n\n if (pushBackIter === Settings.maxPolygonVertices) {\n break;\n }\n }\n\n ++iter;\n ++stats.toiIters;\n\n if (done) {\n break;\n }\n\n if (iter === k_maxIterations) {\n // Root finder got stuck. Semi-victory.\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n break;\n }\n }\n\n stats.toiMaxIters = math_max(stats.toiMaxIters, iter);\n\n const time = Timer.diff(timer);\n stats.toiMaxTime = math_max(stats.toiMaxTime, time);\n stats.toiTime += time;\n\n separationFunction.recycle();\n};\n\nenum SeparationFunctionType {\n e_unset = -1,\n e_points = 1,\n e_faceA = 2,\n e_faceB = 3,\n}\n\nclass SeparationFunction {\n // input cache\n // todo: maybe assign by copy instead of reference?\n m_proxyA: DistanceProxy = null;\n m_proxyB: DistanceProxy = null;\n m_sweepA: Sweep = null;\n m_sweepB: Sweep = null;\n\n // initialize cache\n m_type = SeparationFunctionType.e_unset;\n m_localPoint = matrix.vec2(0, 0);\n m_axis = matrix.vec2(0, 0);\n\n // compute output\n indexA = -1;\n indexB = -1;\n\n recycle() {\n this.m_proxyA = null;\n this.m_proxyB = null;\n this.m_sweepA = null;\n this.m_sweepB = null;\n\n this.m_type = SeparationFunctionType.e_unset;\n matrix.zeroVec2(this.m_localPoint);\n matrix.zeroVec2(this.m_axis);\n\n this.indexA = -1;\n this.indexB = -1;\n }\n\n // TODO_ERIN might not need to return the separation\n\n initialize(cache: SimplexCache, proxyA: DistanceProxy, sweepA: Sweep, proxyB: DistanceProxy, sweepB: Sweep, t1: number): number {\n const count = cache.count;\n _ASSERT && console.assert(0 < count && count < 3);\n\n this.m_proxyA = proxyA;\n this.m_proxyB = proxyB;\n this.m_sweepA = sweepA;\n this.m_sweepB = sweepB;\n\n this.m_sweepA.getTransform(xfA, t1);\n this.m_sweepB.getTransform(xfB, t1);\n\n if (count === 1) {\n this.m_type = SeparationFunctionType.e_points;\n const localPointA = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n matrix.subVec2(this.m_axis, pointB, pointA);\n const s = matrix.normalizeVec2Length(this.m_axis);\n return s;\n\n } else if (cache.indexA[0] === cache.indexA[1]) {\n // Two points on B and one on A.\n this.m_type = SeparationFunctionType.e_faceB;\n const localPointB1 = proxyB.getVertex(cache.indexB[0]);\n const localPointB2 = proxyB.getVertex(cache.indexB[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointB2, localPointB1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n const localPointA = proxyA.getVertex(cache.indexA[0]);\n const pointA = Transform.mulVec2(xfA, localPointA);\n\n let s = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n\n } else {\n // Two points on A and one or two points on B.\n this.m_type = SeparationFunctionType.e_faceA;\n const localPointA1 = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointA2 = this.m_proxyA.getVertex(cache.indexA[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointA2, localPointA1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n let s = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n }\n }\n\n compute(find: boolean, t: number): number {\n // It was findMinSeparation and evaluate\n this.m_sweepA.getTransform(xfA, t);\n this.m_sweepB.getTransform(xfB, t);\n\n switch (this.m_type) {\n case SeparationFunctionType.e_points: {\n if (find) {\n matrix.derotVec2(axisA, xfA.q, this.m_axis);\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, this.m_axis));\n\n this.indexA = this.m_proxyA.getSupport(axisA);\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, this.m_axis) - matrix.dotVec2(pointA, this.m_axis);\n return sep;\n }\n\n case SeparationFunctionType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexA = -1;\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n return sep;\n }\n\n case SeparationFunctionType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisA, xfA.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexB = -1;\n this.indexA = this.m_proxyA.getSupport(axisA);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.transformVec2(pointA, xfA, localPointA);\n\n const sep = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n return sep;\n }\n\n default:\n _ASSERT && console.assert(false);\n if (find) {\n this.indexA = -1;\n this.indexB = -1;\n }\n return 0.0;\n }\n }\n\n findMinSeparation(t: number): number {\n return this.compute(true, t);\n }\n\n evaluate(t: number): number {\n return this.compute(false, t);\n }\n}\n\n/** @internal */ const separationFunction = new SeparationFunction();\n\n// legacy exports\nTimeOfImpact.Input = TOIInput;\nTimeOfImpact.Output = TOIOutput;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { EPSILON } from \"../common/Math\";\nimport { Body } from \"./Body\";\nimport type { Contact } from \"./Contact\";\nimport { Joint } from \"./Joint\";\nimport { TimeOfImpact, TOIInput, TOIOutput, TOIOutputState } from \"../collision/TimeOfImpact\";\nimport { Distance, DistanceInput, DistanceOutput, SimplexCache } from \"../collision/Distance\";\nimport { World } from \"./World\";\nimport { Sweep } from \"../common/Sweep\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_min = Math.min;\n\n\nexport class TimeStep {\n /** time step */\n dt: number = 0;\n /** inverse time step (0 if dt == 0) */\n inv_dt: number = 0;\n velocityIterations: number = 0;\n positionIterations: number = 0;\n warmStarting: boolean = false;\n blockSolve: boolean = true;\n\n /** timestep ratio for variable timestep */\n inv_dt0: number = 0.0;\n /** dt * inv_dt0 */\n dtRatio: number = 1;\n\n reset(dt: number): void {\n if (this.dt > 0.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}\n\n// reuse\n/** @internal */ const s_subStep = new TimeStep();\n/** @internal */ const c = matrix.vec2(0, 0);\n/** @internal */ const v = matrix.vec2(0, 0);\n/** @internal */ const translation = matrix.vec2(0, 0);\n/** @internal */ const input = new TOIInput();\n/** @internal */ const output = new TOIOutput();\n/** @internal */ const backup = new Sweep();\n/** @internal */ const backup1 = new Sweep();\n/** @internal */ const backup2 = new Sweep();\n\n/**\n * Contact impulses for reporting. Impulses are used instead of forces because\n * sub-step forces may approach infinity for rigid body collisions. These match\n * up one-to-one with the contact points in Manifold.\n */\nexport class ContactImpulse {\n // TODO: merge with Contact class?\n\n private readonly contact: Contact;\n private readonly normals: number[];\n private readonly tangents: number[];\n\n constructor(contact: Contact) {\n this.contact = contact;\n this.normals = [];\n this.tangents = [];\n }\n\n recycle() {\n this.normals.length = 0;\n this.tangents.length = 0;\n }\n\n get normalImpulses(): number[] {\n const contact = this.contact;\n const normals = this.normals;\n normals.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n normals.push(contact.v_points[p].normalImpulse);\n }\n return normals;\n }\n\n get tangentImpulses(): number[] {\n const contact = this.contact;\n const tangents = this.tangents;\n tangents.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n tangents.push(contact.v_points[p].tangentImpulse);\n }\n return tangents;\n }\n}\n\n/**\n * Finds and solves islands. An island is a connected subset of the world.\n */\nexport class Solver {\n m_world: World;\n m_stack: Body[];\n m_bodies: Body[];\n m_contacts: Contact[];\n m_joints: Joint[];\n\n constructor(world: World) {\n this.m_world = world;\n this.m_stack = [];\n this.m_bodies = [];\n this.m_contacts = [];\n this.m_joints = [];\n }\n\n clear(): void {\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\n addBody(body: Body): void {\n _ASSERT && console.assert(body instanceof Body, \"Not a Body!\", body);\n this.m_bodies.push(body);\n // why?\n // body.c_position.c.setZero();\n // body.c_position.a = 0;\n // body.c_velocity.v.setZero();\n // body.c_velocity.w = 0;\n }\n\n addContact(contact: Contact): void {\n // _ASSERT && console.assert(contact instanceof Contact, 'Not a Contact!', contact);\n this.m_contacts.push(contact);\n }\n\n addJoint(joint: Joint): void {\n _ASSERT && console.assert(joint instanceof Joint, \"Not a Joint!\", joint);\n this.m_joints.push(joint);\n }\n\n solveWorld(step: TimeStep): void {\n const world = this.m_world;\n\n // Clear all the island flags.\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n }\n for (let c = world.m_contactList; c; c = c.m_next) {\n c.m_islandFlag = false;\n }\n for (let j = world.m_jointList; j; j = j.m_next) {\n j.m_islandFlag = false;\n }\n\n // Build and simulate all awake islands.\n const stack = this.m_stack;\n let loop = -1;\n for (let seed = world.m_bodyList; seed; seed = seed.m_next) {\n loop++;\n if (seed.m_islandFlag) {\n continue;\n }\n\n if (seed.isAwake() == false || seed.isActive() == false) {\n continue;\n }\n\n // The seed can be dynamic or kinematic.\n if (seed.isStatic()) {\n continue;\n }\n\n // Reset island and stack.\n this.clear();\n\n stack.push(seed);\n\n seed.m_islandFlag = true;\n\n // Perform a depth first search (DFS) on the constraint graph.\n while (stack.length > 0) {\n // Grab the next body off the stack and add it to the island.\n const b = stack.pop();\n _ASSERT && console.assert(b.isActive() == true);\n this.addBody(b);\n\n // Make sure the body is awake (without resetting sleep timer).\n b.m_awakeFlag = true;\n\n // To keep islands as small as possible, we don't\n // propagate islands across static bodies.\n if (b.isStatic()) {\n continue;\n }\n\n // Search all contacts connected to this body.\n for (let ce = b.m_contactList; ce; ce = ce.next) {\n const contact = ce.contact;\n\n // Has this contact already been added to an island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Is this contact solid and touching?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n this.addContact(contact);\n contact.m_islandFlag = true;\n\n const other = ce.other;\n\n // Was the other body already added to this island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n\n // Search all joints connect to this body.\n for (let je = b.m_jointList; je; je = je.next) {\n if (je.joint.m_islandFlag == true) {\n continue;\n }\n\n const other = je.other;\n\n // Don't simulate joints connected to inactive bodies.\n if (other.isActive() == false) {\n continue;\n }\n\n this.addJoint(je.joint);\n je.joint.m_islandFlag = true;\n\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n }\n\n this.solveIsland(step);\n\n // Post solve cleanup.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n // Allow static bodies to participate in other islands.\n // TODO: are they added at all?\n const b = this.m_bodies[i];\n if (b.isStatic()) {\n b.m_islandFlag = false;\n }\n }\n }\n }\n\n solveIsland(step: TimeStep): void {\n // B2: Island Solve\n const world = this.m_world;\n const gravity = world.m_gravity;\n const allowSleep = world.m_allowSleep;\n\n const h = step.dt;\n\n // Integrate velocities and apply damping. Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.m_sweep.c);\n const a = body.m_sweep.a;\n matrix.copyVec2(v, body.m_linearVelocity);\n let w = body.m_angularVelocity;\n\n // Store positions for continuous collision.\n matrix.copyVec2(body.m_sweep.c0, body.m_sweep.c);\n body.m_sweep.a0 = body.m_sweep.a;\n\n if (body.isDynamic()) {\n // Integrate velocities.\n matrix.plusScaleVec2(v, h * body.m_gravityScale, gravity);\n matrix.plusScaleVec2(v, h * body.m_invMass, body.m_force);\n w += h * body.m_invI * body.m_torque;\n /**\n *
\n         * Apply damping.\n         * ODE: dv/dt + c * v = 0\n         * Solution: v(t) = v0 * exp(-c * t)\n         * Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)\n         * v2 = exp(-c * dt) * v1\n         * Pade approximation:\n         * v2 = v1 * 1 / (1 + c * dt)\n         * 
\n */\n matrix.scaleVec2(v, 1.0 / (1.0 + h * body.m_linearDamping), v);\n w *= 1.0 / (1.0 + h * body.m_angularDamping);\n }\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(step);\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(step);\n }\n\n if (step.warmStarting) {\n // Warm start.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.warmStartConstraint(step);\n }\n }\n\n for (let i = 0; i < this.m_joints.length; ++i) {\n const joint = this.m_joints[i];\n joint.initVelocityConstraints(step);\n }\n\n // Solve velocity constraints\n for (let i = 0; i < step.velocityIterations; ++i) {\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n joint.solveVelocityConstraints(step);\n }\n\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(step);\n }\n }\n\n // Store impulses for warm starting\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.storeConstraintImpulses(step);\n }\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n // Solve position constraints\n let positionSolved = false;\n for (let i = 0; i < step.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraint(step);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -3.0 * Settings.linearSlop;\n\n let jointsOkay = true;\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n const jointOkay = joint.solvePositionConstraints(step);\n jointsOkay = jointsOkay && jointOkay;\n }\n\n if (contactsOkay && jointsOkay) {\n // Exit early if the position errors are small.\n positionSolved = true;\n break;\n }\n }\n\n // Copy state buffers back to the bodies\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(body.m_sweep.c, body.c_position.c);\n body.m_sweep.a = body.c_position.a;\n matrix.copyVec2(body.m_linearVelocity, body.c_velocity.v);\n body.m_angularVelocity = body.c_velocity.w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n\n if (allowSleep) {\n let minSleepTime = Infinity;\n\n const linTolSqr = Settings.linearSleepToleranceSqr;\n const angTolSqr = Settings.angularSleepToleranceSqr;\n\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n if (body.isStatic()) {\n continue;\n }\n\n if ((body.m_autoSleepFlag == false)\n || (body.m_angularVelocity * body.m_angularVelocity > angTolSqr)\n || (matrix.lengthSqrVec2(body.m_linearVelocity) > linTolSqr)) {\n body.m_sleepTime = 0.0;\n minSleepTime = 0.0;\n } else {\n body.m_sleepTime += h;\n minSleepTime = math_min(minSleepTime, body.m_sleepTime);\n }\n }\n\n if (minSleepTime >= Settings.timeToSleep && positionSolved) {\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.setAwake(false);\n }\n }\n }\n }\n\n /**\n * Find TOI contacts and solve them.\n */\n solveWorldTOI(step: TimeStep): void {\n const world = this.m_world;\n\n if (world.m_stepComplete) {\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n b.m_sweep.alpha0 = 0.0;\n }\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Invalidate TOI\n c.m_toiFlag = false;\n c.m_islandFlag = false;\n c.m_toiCount = 0;\n c.m_toi = 1.0;\n }\n }\n\n // Find TOI events and solve them.\n while (true) {\n // Find the first TOI.\n let minContact: Contact | null = null;\n let minAlpha = 1.0;\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Is this contact disabled?\n if (c.isEnabled() == false) {\n continue;\n }\n\n // Prevent excessive sub-stepping.\n if (c.m_toiCount > Settings.maxSubSteps) {\n continue;\n }\n\n let alpha = 1.0;\n if (c.m_toiFlag) {\n // This contact has a valid cached TOI.\n alpha = c.m_toi;\n } else {\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n // Is there a sensor?\n if (fA.isSensor() || fB.isSensor()) {\n continue;\n }\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n _ASSERT && console.assert(bA.isDynamic() || bB.isDynamic());\n\n const activeA = bA.isAwake() && !bA.isStatic();\n const activeB = bB.isAwake() && !bB.isStatic();\n\n // Is at least one body active (awake and dynamic or kinematic)?\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const collideA = bA.isBullet() || !bA.isDynamic();\n const collideB = bB.isBullet() || !bB.isDynamic();\n\n // Are these two non-bullet dynamic bodies?\n if (collideA == false && collideB == false) {\n continue;\n }\n\n // Compute the TOI for this contact.\n // Put the sweeps onto the same time interval.\n let alpha0 = bA.m_sweep.alpha0;\n\n if (bA.m_sweep.alpha0 < bB.m_sweep.alpha0) {\n alpha0 = bB.m_sweep.alpha0;\n bA.m_sweep.advance(alpha0);\n } else if (bB.m_sweep.alpha0 < bA.m_sweep.alpha0) {\n alpha0 = bA.m_sweep.alpha0;\n bB.m_sweep.advance(alpha0);\n }\n\n _ASSERT && console.assert(alpha0 < 1.0);\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const sweepA = bA.m_sweep;\n const sweepB = bB.m_sweep;\n\n // Compute the time of impact in interval [0, minTOI]\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.sweepA.set(bA.m_sweep);\n input.sweepB.set(bB.m_sweep);\n input.tMax = 1.0;\n\n TimeOfImpact(output, input);\n\n // Beta is the fraction of the remaining portion of the [time?].\n const beta = output.t;\n if (output.state == TOIOutputState.e_touching) {\n alpha = math_min(alpha0 + (1.0 - alpha0) * beta, 1.0);\n } else {\n alpha = 1.0;\n }\n\n c.m_toi = alpha;\n c.m_toiFlag = true;\n }\n\n if (alpha < minAlpha) {\n // This is the minimum TOI found so far.\n minContact = c;\n minAlpha = alpha;\n }\n }\n\n if (minContact == null || 1.0 - 10.0 * EPSILON < minAlpha) {\n // No more TOI events. Done!\n world.m_stepComplete = true;\n break;\n }\n\n // Advance the bodies to the TOI.\n const fA = minContact.getFixtureA();\n const fB = minContact.getFixtureB();\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n backup1.set(bA.m_sweep);\n backup2.set(bB.m_sweep);\n\n bA.advance(minAlpha);\n bB.advance(minAlpha);\n\n // The TOI contact likely has some new contact points.\n minContact.update(world);\n minContact.m_toiFlag = false;\n ++minContact.m_toiCount;\n\n // Is the contact solid?\n if (minContact.isEnabled() == false || minContact.isTouching() == false) {\n // Restore the sweeps.\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\n bA.setAwake(true);\n bB.setAwake(true);\n\n // Build the island\n this.clear();\n this.addBody(bA);\n this.addBody(bB);\n this.addContact(minContact);\n\n bA.m_islandFlag = true;\n bB.m_islandFlag = true;\n minContact.m_islandFlag = true;\n\n // Get contacts on bodyA and bodyB.\n const bodies = [ bA, bB ];\n for (let i = 0; i < bodies.length; ++i) {\n const body = bodies[i];\n if (body.isDynamic()) {\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n // if (this.m_bodyCount == this.m_bodyCapacity) { break; }\n // if (this.m_contactCount == this.m_contactCapacity) { break; }\n\n const contact = ce.contact;\n\n // Has this contact already been added to the island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Only add if either is static, kinematic or bullet.\n const other = ce.other;\n if (other.isDynamic() && !body.isBullet() && !other.isBullet()) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n // Tentatively advance the body to the TOI.\n backup.set(other.m_sweep);\n if (other.m_islandFlag == false) {\n other.advance(minAlpha);\n }\n\n // Update the contact points\n contact.update(world);\n\n // Was the contact disabled by the user?\n // Are there contact points?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n other.m_sweep.set(backup);\n other.synchronizeTransform();\n continue;\n }\n\n // Add the contact to the island\n contact.m_islandFlag = true;\n this.addContact(contact);\n\n // Has the other body already been added to the island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // Add the other body to the island.\n other.m_islandFlag = true;\n\n if (!other.isStatic()) {\n other.setAwake(true);\n }\n\n this.addBody(other);\n }\n }\n }\n\n s_subStep.reset((1.0 - minAlpha) * step.dt);\n s_subStep.dtRatio = 1.0;\n s_subStep.positionIterations = 20;\n s_subStep.velocityIterations = step.velocityIterations;\n s_subStep.warmStarting = false;\n\n this.solveIslandTOI(s_subStep, bA, bB);\n\n // Reset island flags and synchronize broad-phase proxies.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.m_islandFlag = false;\n\n if (!body.isDynamic()) {\n continue;\n }\n\n body.synchronizeFixtures();\n\n // Invalidate all contact TOIs on this displaced body.\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n ce.contact.m_toiFlag = false;\n ce.contact.m_islandFlag = false;\n }\n }\n\n // Commit fixture proxy movements to the broad-phase so that new contacts\n // are created.\n // Also, some contacts can be destroyed.\n world.findNewContacts();\n\n if (world.m_subStepping) {\n world.m_stepComplete = false;\n break;\n }\n }\n }\n\n solveIslandTOI(subStep: TimeStep, toiA: Body, toiB: Body): void {\n\n // Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n matrix.copyVec2(body.c_position.c, body.m_sweep.c);\n body.c_position.a = body.m_sweep.a;\n matrix.copyVec2(body.c_velocity.v, body.m_linearVelocity);\n body.c_velocity.w = body.m_angularVelocity;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(subStep);\n }\n\n // Solve position constraints.\n for (let i = 0; i < subStep.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -1.5 * Settings.linearSlop;\n if (contactsOkay) {\n break;\n }\n }\n\n if (false) {\n // Is the new position really safe?\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const c = this.m_contacts[i];\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const input = new DistanceInput();\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.transformA.set(bA.getTransform());\n input.transformB.set(bB.getTransform());\n input.useRadii = false;\n\n const output = new DistanceOutput();\n const cache = new SimplexCache();\n Distance(output, cache, input);\n\n if (output.distance == 0 || cache.count == 3) {\n cache.count += 0;\n }\n }\n }\n\n // Leap of faith to new safe state.\n matrix.copyVec2(toiA.m_sweep.c0, toiA.c_position.c);\n toiA.m_sweep.a0 = toiA.c_position.a;\n matrix.copyVec2(toiB.m_sweep.c0, toiB.c_position.c);\n toiB.m_sweep.a0 = toiB.c_position.a;\n\n // No warm starting is needed for TOI events because warm\n // starting impulses were applied in the discrete solver.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(subStep);\n }\n\n // Solve velocity constraints.\n for (let i = 0; i < subStep.velocityIterations; ++i) {\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(subStep);\n }\n }\n\n // Don't store the TOI contact forces for warm starting\n // because they can be quite large.\n\n const h = subStep.dt;\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n\n // Sync bodies\n matrix.copyVec2(body.m_sweep.c, c);\n body.m_sweep.a = a;\n matrix.copyVec2(body.m_linearVelocity, v);\n body.m_angularVelocity = w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n }\n\n /** @internal */\n postSolveIsland(): void {\n for (let c = 0; c < this.m_contacts.length; ++c) {\n const contact = this.m_contacts[c];\n this.m_world.postSolve(contact, contact.m_impulse);\n }\n }\n}\n\n// @ts-ignore\nSolver.TimeStep = TimeStep;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 2-by-2 matrix. Stored in column-major order.\n */\nexport class Mat22 {\n ex: Vec2;\n ey: Vec2;\n\n constructor(a: number, b: number, c: number, d: number);\n constructor(a: { x: number; y: number }, b: { x: number; y: number });\n constructor();\n constructor(a?, b?, c?, d?) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec2.clone(a);\n this.ey = Vec2.clone(b);\n } else if (typeof a === \"number\") {\n this.ex = Vec2.neo(a, c);\n this.ey = Vec2.neo(b, d);\n } else {\n this.ex = Vec2.zero();\n this.ey = Vec2.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat22.isValid(o), \"Invalid Mat22!\", o);\n }\n\n set(a: Mat22): void;\n set(a: Vec2Value, b: Vec2Value): void;\n set(a: number, b: number, c: number, d: number): void;\n set(a, b?, c?, d?): void {\n if (typeof a === \"number\" && typeof b === \"number\" && typeof c === \"number\"\n && typeof d === \"number\") {\n this.ex.setNum(a, c);\n this.ey.setNum(b, d);\n\n } else if (typeof a === \"object\" && typeof b === \"object\") {\n this.ex.setVec2(a);\n this.ey.setVec2(b);\n\n } else if (typeof a === \"object\") {\n _ASSERT && Mat22.assert(a);\n this.ex.setVec2(a.ex);\n this.ey.setVec2(a.ey);\n\n } else {\n _ASSERT && console.assert(false);\n }\n }\n\n setIdentity(): void {\n this.ex.x = 1.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 1.0;\n }\n\n setZero(): void {\n this.ex.x = 0.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 0.0;\n }\n\n getInverse(): Mat22 {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const imx = new Mat22();\n imx.ex.x = det * d;\n imx.ey.x = -det * b;\n imx.ex.y = -det * c;\n imx.ey.y = det * a;\n return imx;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const w = Vec2.zero();\n w.x = det * (d * v.x - b * v.y);\n w.y = det * (a * v.y - c * v.x);\n return w;\n }\n\n /**\n * Multiply a matrix times a vector. If a rotation matrix is provided, then this\n * transforms the vector from one frame to another.\n */\n static mul(mx: Mat22, my: Mat22): Mat22;\n static mul(mx: Mat22, v: Vec2Value): Vec2;\n static mul(mx, v) {\n if (v && \"x\" in v && \"y\" in v) {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n }\n\n static mulMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n /**\n * Multiply a matrix transpose times a vector. If a rotation matrix is provided,\n * then this transforms the vector from one frame to another (inverse\n * transform).\n */\n static mulT(mx: Mat22, my: Mat22): Mat22;\n static mulT(mx: Mat22, v: Vec2Value): Vec2;\n static mulT(mx, v) {\n if (v && \"x\" in v && \"y\" in v) { // Vec2\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulTVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n }\n\n static mulTMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n static abs(mx: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n return new Mat22(Vec2.abs(mx.ex), Vec2.abs(mx.ey));\n }\n\n static add(mx1: Mat22, mx2: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx1);\n _ASSERT && Mat22.assert(mx2);\n return new Mat22(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey));\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\nimport { EPSILON } from \"../common/Math\";\n\n\n/** @internal */ const math_sqrt = Math.sqrt;\n\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const dist = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n\nexport enum ManifoldType {\n e_unset = -1,\n e_circles = 0,\n e_faceA = 1,\n e_faceB = 2\n}\n\nexport enum ContactFeatureType {\n e_unset = -1,\n e_vertex = 0,\n e_face = 1\n}\n\n/**\n * This is used for determining the state of contact points.\n */\n export enum PointState {\n /** Point does not exist */\n nullState = 0,\n /** Point was added in the update */\n addState = 1,\n /** Point persisted across the update */\n persistState = 2,\n /** Point was removed in the update */\n removeState = 3\n}\n\n/**\n * Used for computing contact manifolds.\n */\n export class ClipVertex {\n v = matrix.vec2(0, 0);\n id: ContactID = new ContactID();\n\n set(o: ClipVertex): void {\n matrix.copyVec2(this.v, o.v);\n this.id.set(o.id);\n }\n recycle() {\n matrix.zeroVec2(this.v);\n this.id.recycle();\n }\n}\n\n/**\n * A manifold for two touching convex shapes. Manifolds are created in `evaluate`\n * method of Contact subclasses.\n *\n * Supported manifold types are e_faceA or e_faceB for clip point versus plane\n * with radius and e_circles point versus point with radius.\n *\n * We store contacts in this way so that position correction can account for\n * movement, which is critical for continuous physics. All contact scenarios\n * must be expressed in one of these types. This structure is stored across time\n * steps, so we keep it small.\n */\nexport class Manifold {\n type: ManifoldType;\n\n /**\n * Usage depends on manifold type:\n * - circles: not used\n * - faceA: the normal on polygonA\n * - faceB: the normal on polygonB\n */\n localNormal = matrix.vec2(0, 0);\n\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleA\n * - faceA: the center of faceA\n * - faceB: the center of faceB\n */\n localPoint = matrix.vec2(0, 0);\n\n /** The points of contact */\n points: ManifoldPoint[] = [ new ManifoldPoint(), new ManifoldPoint() ];\n\n /** The number of manifold points */\n pointCount: number = 0;\n\n set(that: Manifold): void {\n this.type = that.type;\n matrix.copyVec2(this.localNormal, that.localNormal);\n matrix.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\n recycle(): void {\n this.type = ManifoldType.e_unset;\n matrix.zeroVec2(this.localNormal);\n matrix.zeroVec2(this.localPoint);\n this.pointCount = 0;\n this.points[0].recycle();\n this.points[1].recycle();\n }\n\n /**\n * Evaluate the manifold with supplied transforms. This assumes modest motion\n * from the original state. This does not change the point count, impulses, etc.\n * The radii must come from the shapes that generated the manifold.\n */\n getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold {\n if (this.pointCount == 0) {\n return wm;\n }\n\n wm = wm || new WorldManifold();\n\n wm.pointCount = this.pointCount;\n\n const normal = wm.normal;\n const points = wm.points;\n const separations = wm.separations;\n\n switch (this.type) {\n case ManifoldType.e_circles: {\n matrix.setVec2(normal, 1.0, 0.0);\n const manifoldPoint = this.points[0];\n matrix.transformVec2(pointA, xfA, this.localPoint);\n matrix.transformVec2(pointB, xfB, manifoldPoint.localPoint);\n matrix.subVec2(dist, pointB, pointA);\n const lengthSqr = matrix.lengthSqrVec2(dist);\n if (lengthSqr > EPSILON * EPSILON) {\n const length = math_sqrt(lengthSqr);\n matrix.scaleVec2(normal, 1 / length, dist);\n }\n matrix.combine2Vec2(cA, 1, pointA, radiusA, normal);\n matrix.combine2Vec2(cB, 1, pointB, -radiusB, normal);\n matrix.combine2Vec2(points[0], 0.5, cA, 0.5, cB);\n separations[0] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.localNormal);\n matrix.transformVec2(planePoint, xfA, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfB, manifoldPoint.localPoint);\n matrix.combine2Vec2(cA, 1, clipPoint, radiusA - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cB, 1, clipPoint, -radiusB, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n }\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.localNormal);\n matrix.transformVec2(planePoint, xfB, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfA, manifoldPoint.localPoint);\n matrix.combine2Vec2(cB, 1, clipPoint, radiusB - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cA, 1, clipPoint, -radiusA, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cA, cB), normal);\n }\n // Ensure normal points from A to B.\n matrix.negVec2(normal);\n break;\n }\n }\n\n return wm;\n }\n\n static clipSegmentToLine = clipSegmentToLine;\n static ClipVertex = ClipVertex;\n static getPointStates = getPointStates;\n static PointState = PointState;\n}\n\n/**\n * A manifold point is a contact point belonging to a contact manifold. It holds\n * details related to the geometry and dynamics of the contact points.\n *\n * This structure is stored across time steps, so we keep it small.\n *\n * Note: impulses are used for internal caching and may not provide reliable\n * contact forces, especially for high speed collisions.\n */\nexport class ManifoldPoint {\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleB\n * - faceA: the local center of circleB or the clip point of polygonB\n * - faceB: the clip point of polygonA\n */\n localPoint = matrix.vec2(0, 0);\n /**\n * The non-penetration impulse\n */\n normalImpulse = 0;\n /**\n * The friction impulse\n */\n tangentImpulse = 0;\n /**\n * Uniquely identifies a contact point between two shapes to facilitate warm starting\n */\n readonly id = new ContactID();\n\n set(that: ManifoldPoint): void {\n matrix.copyVec2(this.localPoint, that.localPoint);\n this.normalImpulse = that.normalImpulse;\n this.tangentImpulse = that.tangentImpulse;\n this.id.set(that.id);\n }\n\n recycle(): void {\n matrix.zeroVec2(this.localPoint);\n this.normalImpulse = 0;\n this.tangentImpulse = 0;\n this.id.recycle();\n }\n}\n\n/**\n * Contact ids to facilitate warm starting.\n * \n * ContactFeature: The features that intersect to form the contact point.\n */\nexport class ContactID {\n\n /**\n * Used to quickly compare contact ids.\n */\n key = -1;\n\n /** ContactFeature index on shapeA */\n indexA = -1;\n\n /** ContactFeature index on shapeB */\n indexB = -1;\n\n /** ContactFeature type on shapeA */\n typeA = ContactFeatureType.e_unset;\n\n /** ContactFeature type on shapeB */\n typeB = ContactFeatureType.e_unset;\n\n setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void {\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\n set(that: ContactID): void {\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\n swapFeatures(): void {\n const indexA = this.indexA;\n const indexB = this.indexB;\n const typeA = this.typeA;\n const 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\n recycle(): void {\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}\n\n/**\n * This is used to compute the current state of a contact manifold.\n */\nexport class WorldManifold {\n /** World vector pointing from A to B */\n normal = matrix.vec2(0, 0);\n\n /** World contact point (point of intersection) */\n points = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints]\n\n /** A negative value indicates overlap, in meters */\n separations = [0, 0]; // [maxManifoldPoints]\n\n /** The number of manifold points */\n pointCount = 0;\n\n recycle() {\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.points[0]);\n matrix.zeroVec2(this.points[1]);\n this.separations[0] = 0;\n this.separations[1] = 0;\n this.pointCount = 0;\n }\n}\n\n/**\n * Compute the point states given two manifolds. The states pertain to the\n * transition from manifold1 to manifold2. So state1 is either persist or remove\n * while state2 is either add or persist.\n */\nexport function getPointStates(\n state1: PointState[],\n state2: PointState[],\n manifold1: Manifold,\n manifold2: Manifold\n): void {\n // state1, state2: PointState[Settings.maxManifoldPoints]\n\n // for (var i = 0; i < Settings.maxManifoldPoints; ++i) {\n // state1[i] = PointState.nullState;\n // state2[i] = PointState.nullState;\n // }\n\n // Detect persists and removes.\n for (let i = 0; i < manifold1.pointCount; ++i) {\n const id = manifold1.points[i].id;\n\n state1[i] = PointState.removeState;\n\n for (let 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\n // Detect persists and adds.\n for (let i = 0; i < manifold2.pointCount; ++i) {\n const id = manifold2.points[i].id;\n\n state2[i] = PointState.addState;\n\n for (let 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}\n\n/**\n * Clipping for contact manifolds. Sutherland-Hodgman clipping.\n */\nexport function clipSegmentToLine(\n vOut: ClipVertex[],\n vIn: ClipVertex[],\n normal: Vec2Value,\n offset: number,\n vertexIndexA: number\n): number {\n // Start with no output points\n let numOut = 0;\n\n // Calculate the distance of end points to the line\n const distance0 = matrix.dotVec2(normal, vIn[0].v) - offset;\n const distance1 = matrix.dotVec2(normal, vIn[1].v) - offset;\n\n // If the points are behind the plane\n if (distance0 <= 0.0)\n vOut[numOut++].set(vIn[0]);\n if (distance1 <= 0.0)\n vOut[numOut++].set(vIn[1]);\n\n // If the points are on different sides of the plane\n if (distance0 * distance1 < 0.0) {\n // Find intersection point of edge and plane\n const interp = distance0 / (distance0 - distance1);\n matrix.combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v);\n\n // VertexA is hitting edgeB.\n vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face);\n ++numOut;\n }\n\n return numOut;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { ShapeType } from \"../collision/Shape\";\nimport { clamp } from \"../common/Math\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Mat22 } from \"../common/Mat22\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Manifold, ManifoldType, WorldManifold } from \"../collision/Manifold\";\nimport { testOverlap } from \"../collision/Distance\";\nimport { Fixture } from \"./Fixture\";\nimport { Body } from \"./Body\";\nimport { ContactImpulse, TimeStep } from \"./Solver\";\nimport { Pool } from \"../util/Pool\";\nimport { getTransform } from \"./Position\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n// Solver debugging is normally disabled because the block solver sometimes has to deal with a poorly conditioned effective mass matrix.\n/** @internal */ const DEBUG_SOLVER = false;\n\n/** @internal */ const contactPool = new Pool({\n create() {\n return new Contact();\n },\n release(contact: Contact) {\n contact.recycle();\n }\n});\n\n/** @internal */ const oldManifold = new Manifold();\n\n/** @internal */ const worldManifold = new WorldManifold();\n\n/**\n * A contact edge is used to connect bodies and contacts together in a contact\n * graph where each body is a node and each contact is an edge. A contact edge\n * belongs to a doubly linked list maintained in each attached body. Each\n * contact has two contact nodes, one for each attached body.\n */\nexport class ContactEdge {\n contact: Contact;\n prev: ContactEdge | null = null;\n next: ContactEdge | null = null;\n other: Body | null = null;\n constructor(contact: Contact) {\n this.contact = contact;\n }\n\n /** @internal */\n recycle() {\n this.prev = null;\n this.next = null;\n this.other = null;\n }\n}\n\nexport type EvaluateFunction = (\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number\n) => void;\n\n/**\n * Friction mixing law. The idea is to allow either fixture to drive the\n * friction to zero. For example, anything slides on ice.\n */\nexport function mixFriction(friction1: number, friction2: number): number {\n return math_sqrt(friction1 * friction2);\n}\n\n/**\n * Restitution mixing law. The idea is allow for anything to bounce off an\n * inelastic surface. For example, a superball bounces on anything.\n */\nexport function mixRestitution(restitution1: number, restitution2: number): number {\n return restitution1 > restitution2 ? restitution1 : restitution2;\n}\n\n// TODO: move this to Settings?\n/** @internal */ const s_registers = [];\n\n// TODO: merge with ManifoldPoint?\nexport class VelocityConstraintPoint {\n rA = matrix.vec2(0, 0);\n rB = matrix.vec2(0, 0);\n normalImpulse = 0;\n tangentImpulse = 0;\n normalMass = 0;\n tangentMass = 0;\n velocityBias = 0;\n\n recycle() {\n matrix.zeroVec2(this.rA);\n matrix.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}\n\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const vA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const vB = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const rA = matrix.vec2(0, 0);\n/** @internal */ const rB = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const point = matrix.vec2(0, 0);\n/** @internal */ const dv = matrix.vec2(0, 0);\n/** @internal */ const dv1 = matrix.vec2(0, 0);\n/** @internal */ const dv2 = matrix.vec2(0, 0);\n/** @internal */ const b = matrix.vec2(0, 0);\n/** @internal */ const a = matrix.vec2(0, 0);\n/** @internal */ const x = matrix.vec2(0, 0);\n/** @internal */ const d = matrix.vec2(0, 0);\n/** @internal */ const P1 = matrix.vec2(0, 0);\n/** @internal */ const P2 = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * The class manages contact between two shapes. A contact exists for each\n * overlapping AABB in the broad-phase (except if filtered). Therefore a contact\n * object may exist that has no contact points.\n */\nexport class Contact {\n // Nodes for connecting bodies.\n /** @internal */ m_nodeA = new ContactEdge(this);\n /** @internal */ m_nodeB = new ContactEdge(this);\n /** @internal */ m_fixtureA: Fixture | null = null;\n /** @internal */ m_fixtureB: Fixture | null = null;\n /** @internal */ m_indexA = -1;\n /** @internal */ m_indexB = -1;\n /** @internal */ m_evaluateFcn: EvaluateFunction | null = null;\n /** @internal */ m_manifold: Manifold = new Manifold();\n /** @internal */ m_prev: Contact | null = null;\n /** @internal */ m_next: Contact | null = null;\n /** @internal */ m_toi = 1.0;\n /** @internal */ m_toiCount = 0;\n // This contact has a valid TOI in m_toi\n /** @internal */ m_toiFlag = false;\n /** @internal */ m_friction = 0.0;\n /** @internal */ m_restitution = 0.0;\n /** @internal */ m_tangentSpeed = 0.0;\n /** @internal This contact can be disabled (by user) */\n m_enabledFlag = true;\n /** @internal Used when crawling contact graph when forming islands. */\n m_islandFlag = false;\n /** @internal Set when the shapes are touching. */\n m_touchingFlag = false;\n /** @internal This contact needs filtering because a fixture filter was changed. */\n m_filterFlag = false;\n /** @internal This bullet contact had a TOI event */\n m_bulletHitFlag = false;\n\n /** @internal Contact reporting impulse object cache */\n m_impulse: ContactImpulse = new ContactImpulse(this);\n\n // VelocityConstraint\n /** @internal */ v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; // [maxManifoldPoints];\n /** @internal */ v_normal = matrix.vec2(0, 0);\n /** @internal */ v_normalMass: Mat22 = new Mat22();\n /** @internal */ v_K: Mat22 = new Mat22();\n /** @internal */ v_pointCount = 0;\n /** @internal */ v_tangentSpeed = 0;\n /** @internal */ v_friction = 0;\n /** @internal */ v_restitution = 0;\n /** @internal */ v_invMassA = 0;\n /** @internal */ v_invMassB = 0;\n /** @internal */ v_invIA = 0;\n /** @internal */ v_invIB = 0;\n\n // PositionConstraint\n /** @internal */ p_localPoints = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints];\n /** @internal */ p_localNormal = matrix.vec2(0, 0);\n /** @internal */ p_localPoint = matrix.vec2(0, 0);\n /** @internal */ p_localCenterA = matrix.vec2(0, 0);\n /** @internal */ p_localCenterB = matrix.vec2(0, 0);\n /** @internal */ p_type = ManifoldType.e_unset;\n /** @internal */ p_radiusA = 0;\n /** @internal */ p_radiusB = 0;\n /** @internal */ p_pointCount = 0;\n /** @internal */ p_invMassA = 0;\n /** @internal */ p_invMassB = 0;\n /** @internal */ p_invIA = 0;\n /** @internal */ p_invIB = 0;\n\n /** @internal */ \n initialize(fA: Fixture, indexA: number, fB: Fixture, indexB: number, evaluateFcn: EvaluateFunction) {\n this.m_fixtureA = fA;\n this.m_fixtureB = fB;\n\n this.m_indexA = indexA;\n this.m_indexB = indexB;\n\n this.m_evaluateFcn = evaluateFcn;\n\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\n /** @internal */ \n recycle() {\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\n this.m_impulse.recycle();\n\n // VelocityConstraint\n for(const point of this.v_points) {\n point.recycle();\n }\n matrix.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\n // PositionConstraint\n for(const point of this.p_localPoints) {\n matrix.zeroVec2(point);\n }\n matrix.zeroVec2(this.p_localNormal);\n matrix.zeroVec2(this.p_localPoint);\n matrix.zeroVec2(this.p_localCenterA);\n matrix.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\n initConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n const manifold = this.m_manifold;\n\n const pointCount = manifold.pointCount;\n _ASSERT && console.assert(pointCount > 0);\n\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\n this.v_friction = this.m_friction;\n this.v_restitution = this.m_restitution;\n this.v_tangentSpeed = this.m_tangentSpeed;\n\n this.v_pointCount = pointCount;\n\n this.v_K.setZero();\n this.v_normalMass.setZero();\n\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 matrix.copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter);\n matrix.copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter);\n\n this.p_radiusA = shapeA.m_radius;\n this.p_radiusB = shapeB.m_radius;\n\n this.p_type = manifold.type;\n matrix.copyVec2(this.p_localNormal, manifold.localNormal);\n matrix.copyVec2(this.p_localPoint, manifold.localPoint);\n this.p_pointCount = pointCount;\n\n for (let j = 0; j < Settings.maxManifoldPoints; ++j) {\n this.v_points[j].recycle();\n matrix.zeroVec2(this.p_localPoints[j]);\n }\n\n for (let j = 0; j < pointCount; ++j) {\n const cp = manifold.points[j];\n const 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 matrix.copyVec2(this.p_localPoints[j], cp.localPoint);\n }\n }\n\n /**\n * Get the contact manifold. Do not modify the manifold unless you understand\n * the internals of the library.\n */\n getManifold(): Manifold {\n return this.m_manifold;\n }\n\n /**\n * Get the world manifold.\n */\n getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n return this.m_manifold.getWorldManifold(\n worldManifold,\n bodyA.getTransform(), shapeA.m_radius,\n bodyB.getTransform(), shapeB.m_radius\n );\n }\n\n /**\n * Enable/disable this contact. This can be used inside the pre-solve contact\n * listener. The contact is only disabled for the current time step (or sub-step\n * in continuous collisions).\n */\n setEnabled(flag: boolean): void {\n this.m_enabledFlag = !!flag;\n }\n\n /**\n * Has this contact been disabled?\n */\n isEnabled(): boolean {\n return this.m_enabledFlag;\n }\n\n /**\n * Is this contact touching?\n */\n isTouching(): boolean {\n return this.m_touchingFlag;\n }\n\n /**\n * Get the next contact in the world's contact list.\n */\n getNext(): Contact | null {\n return this.m_next;\n }\n\n /**\n * Get fixture A in this contact.\n */\n getFixtureA(): Fixture {\n return this.m_fixtureA;\n }\n\n /**\n * Get fixture B in this contact.\n */\n getFixtureB(): Fixture {\n return this.m_fixtureB;\n }\n\n /**\n * Get the child primitive index for fixture A.\n */\n getChildIndexA(): number {\n return this.m_indexA;\n }\n\n /**\n * Get the child primitive index for fixture B.\n */\n getChildIndexB(): number {\n return this.m_indexB;\n }\n\n /**\n * Flag this contact for filtering. Filtering will occur the next time step.\n */\n flagForFiltering(): void {\n this.m_filterFlag = true;\n }\n\n /**\n * Override the default friction mixture. You can call this in\n * \"pre-solve\" callback. This value persists until set or reset.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the friction.\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Reset the friction mixture to the default value.\n */\n resetFriction(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction);\n }\n\n /**\n * Override the default restitution mixture. You can call this in\n * \"pre-solve\" callback. The value persists until you set or reset.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Get the restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Reset the restitution to the default value.\n */\n resetRestitution(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution);\n }\n\n /**\n * Set the desired tangent speed for a conveyor belt behavior. In meters per\n * second.\n */\n setTangentSpeed(speed: number): void {\n this.m_tangentSpeed = speed;\n }\n\n /**\n * Get the desired tangent speed. In meters per second.\n */\n getTangentSpeed(): number {\n return this.m_tangentSpeed;\n }\n\n /**\n * Called by Update method, and implemented by subclasses.\n */\n evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_evaluateFcn(manifold, xfA, fixtureA, this.m_indexA, xfB, fixtureB, this.m_indexB);\n }\n\n /**\n * Updates the contact manifold and touching status.\n *\n * Note: do not assume the fixture AABBs are overlapping or are valid.\n *\n * @param listener.beginContact\n * @param listener.endContact\n * @param listener.preSolve\n */\n update(listener?: {\n beginContact(contact: Contact): void,\n endContact(contact: Contact): void,\n preSolve(contact: Contact, oldManifold: Manifold): void\n }): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n // Re-enable this contact.\n this.m_enabledFlag = true;\n\n let touching = false;\n const wasTouching = this.m_touchingFlag;\n\n const sensorA = fixtureA.m_isSensor;\n const sensorB = fixtureB.m_isSensor;\n const sensor = sensorA || sensorB;\n\n const xfA = bodyA.m_xf;\n const xfB = bodyB.m_xf;\n\n // Is this contact a sensor?\n if (sensor) {\n touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB);\n\n // Sensors don't generate manifolds.\n this.m_manifold.pointCount = 0;\n } else {\n\n oldManifold.recycle();\n oldManifold.set(this.m_manifold);\n this.m_manifold.recycle();\n\n this.evaluate(this.m_manifold, xfA, xfB);\n touching = this.m_manifold.pointCount > 0;\n\n // Match old contact ids to new contact ids and copy the\n // stored impulses to warm start the solver.\n for (let i = 0; i < this.m_manifold.pointCount; ++i) {\n const nmp = this.m_manifold.points[i];\n nmp.normalImpulse = 0.0;\n nmp.tangentImpulse = 0.0;\n\n for (let j = 0; j < oldManifold.pointCount; ++j) {\n const 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\n if (touching !== wasTouching) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n }\n\n this.m_touchingFlag = touching;\n\n const hasListener = typeof listener === \"object\" && listener !== null;\n\n if (!wasTouching && touching && hasListener) {\n listener.beginContact(this);\n }\n\n if (wasTouching && !touching && hasListener) {\n listener.endContact(this);\n }\n\n if (!sensor && touching && hasListener && oldManifold) {\n listener.preSolve(this, oldManifold);\n }\n }\n\n solvePositionConstraint(step: TimeStep): number {\n return this._solvePositionConstraint(step, null, null);\n }\n\n solvePositionConstraintTOI(step: TimeStep, toiA: Body, toiB: Body): number {\n return this._solvePositionConstraint(step, toiA, toiB);\n }\n\n private _solvePositionConstraint(step: TimeStep, toiA: Body | null, toiB: Body | null): number {\n const toi = toiA !== null && toiB !== null ? true : false;\n let minSeparation = 0.0;\n\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return minSeparation;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return minSeparation;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n let mA = 0.0;\n let iA = 0.0;\n if (!toi || (bodyA === toiA || bodyA === toiB)) {\n mA = this.p_invMassA;\n iA = this.p_invIA;\n }\n\n let mB = 0.0;\n let iB = 0.0;\n if (!toi || (bodyB === toiA || bodyB === toiB)) {\n mB = this.p_invMassB;\n iB = this.p_invIB;\n }\n\n matrix.copyVec2(cA, positionA.c);\n let aA = positionA.a;\n\n matrix.copyVec2(cB, positionB.c);\n let aB = positionB.a;\n\n // Solve normal constraints\n for (let j = 0; j < this.p_pointCount; ++j) {\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n // PositionSolverManifold\n let separation: number;\n switch (this.p_type) {\n case ManifoldType.e_circles: {\n matrix.transformVec2(pointA, xfA, this.p_localPoint);\n matrix.transformVec2(pointB, xfB, this.p_localPoints[0]);\n matrix.subVec2(normal, pointB, pointA);\n matrix.normalizeVec2(normal);\n\n matrix.combine2Vec2(point, 0.5, pointA, 0.5, pointB);\n separation = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal) - this.p_radiusA - this.p_radiusB;\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfA, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfB, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfB, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfA, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n\n // Ensure normal points from A to B\n matrix.negVec2(normal);\n break;\n }\n // todo: what should we do here?\n default: {\n return minSeparation;\n }\n }\n\n matrix.subVec2(rA, point, cA);\n matrix.subVec2(rB, point, cB);\n\n // Track max constraint error.\n minSeparation = math_min(minSeparation, separation);\n\n const baumgarte = toi ? Settings.toiBaugarte : Settings.baumgarte;\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n // Prevent large corrections and allow slop.\n const C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0.0);\n\n // Compute the effective mass.\n const rnA = matrix.crossVec2Vec2(rA, normal);\n const rnB = matrix.crossVec2Vec2(rB, normal);\n const K = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n // Compute normal impulse\n const impulse = K > 0.0 ? -C / K : 0.0;\n\n matrix.scaleVec2(P, impulse, normal);\n\n matrix.minusScaleVec2(cA, mA, P);\n aA -= iA * matrix.crossVec2Vec2(rA, P);\n\n matrix.plusScaleVec2(cB, mB, P);\n aB += iB * matrix.crossVec2Vec2(rB, P);\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n\n return minSeparation;\n }\n\n initVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const radiusA = this.p_radiusA;\n const radiusB = this.p_radiusB;\n const manifold = this.m_manifold;\n\n const mA = this.v_invMassA;\n const mB = this.v_invMassB;\n const iA = this.v_invIA;\n const iB = this.v_invIB;\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n matrix.copyVec2(cA, positionA.c);\n const aA = positionA.a;\n matrix.copyVec2(vA, velocityA.v);\n const wA = velocityA.w;\n\n matrix.copyVec2(cB, positionB.c);\n const aB = positionB.a;\n matrix.copyVec2(vB, velocityB.v);\n const wB = velocityB.w;\n\n _ASSERT && console.assert(manifold.pointCount > 0);\n\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n worldManifold.recycle();\n manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB);\n\n matrix.copyVec2(this.v_normal, worldManifold.normal);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n const wmp = worldManifold.points[j];\n\n matrix.subVec2(vcp.rA, wmp, cA);\n matrix.subVec2(vcp.rB, wmp, cB);\n\n const rnA = matrix.crossVec2Vec2(vcp.rA, this.v_normal);\n const rnB = matrix.crossVec2Vec2(vcp.rB, this.v_normal);\n\n const kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n vcp.normalMass = kNormal > 0.0 ? 1.0 / kNormal : 0.0;\n\n matrix.crossVec2Num(tangent, this.v_normal, 1.0);\n\n const rtA = matrix.crossVec2Vec2(vcp.rA, tangent);\n const rtB = matrix.crossVec2Vec2(vcp.rB, tangent);\n\n const kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB;\n\n vcp.tangentMass = kTangent > 0.0 ? 1.0 / kTangent : 0.0;\n\n // Setup a velocity bias for restitution.\n vcp.velocityBias = 0.0;\n let vRel = 0;\n vRel += matrix.dotVec2(this.v_normal, vB);\n vRel += matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wB, vcp.rB));\n vRel -= matrix.dotVec2(this.v_normal, vA);\n vRel -= matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wA, vcp.rA));\n if (vRel < -Settings.velocityThreshold) {\n vcp.velocityBias = -this.v_restitution * vRel;\n }\n }\n\n // If we have two points, then prepare the block solver.\n if (this.v_pointCount == 2 && step.blockSolve) {\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n const rn1A = matrix.crossVec2Vec2(vcp1.rA, this.v_normal);\n const rn1B = matrix.crossVec2Vec2(vcp1.rB, this.v_normal);\n const rn2A = matrix.crossVec2Vec2(vcp2.rA, this.v_normal);\n const rn2B = matrix.crossVec2Vec2(vcp2.rB, this.v_normal);\n\n const k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B;\n const k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B;\n const k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B;\n\n // Ensure a reasonable condition number.\n const k_maxConditionNumber = 1000.0;\n if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) {\n // K is safe to invert.\n this.v_K.ex.setNum(k11, k12);\n this.v_K.ey.setNum(k12, k22);\n // this.v_normalMass.set(this.v_K.getInverse());\n const a = this.v_K.ex.x;\n const b = this.v_K.ey.x;\n const c = this.v_K.ex.y;\n const d = this.v_K.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n this.v_normalMass.ex.x = det * d;\n this.v_normalMass.ey.x = -det * b;\n this.v_normalMass.ex.y = -det * c;\n this.v_normalMass.ey.y = det * a;\n\n } else {\n // The constraints are redundant, just use one.\n // TODO_ERIN use deepest?\n this.v_pointCount = 1;\n }\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n warmStartConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n matrix.combine2Vec2(P, vcp.normalImpulse, normal, vcp.tangentImpulse, tangent);\n\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n matrix.minusScaleVec2(vA, mA, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n matrix.plusScaleVec2(vB, mB, P);\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n storeConstraintImpulses(step: TimeStep): void {\n const manifold = this.m_manifold;\n for (let 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\n solveVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const positionA = bodyA.c_position;\n\n const velocityB = bodyB.c_velocity;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n const friction = this.v_friction;\n\n _ASSERT && console.assert(this.v_pointCount == 1 || this.v_pointCount == 2);\n\n // Solve tangent constraints first because non-penetration is more important\n // than friction.\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute tangent force\n const vt = matrix.dotVec2(dv, tangent) - this.v_tangentSpeed;\n let lambda = vcp.tangentMass * (-vt);\n\n // Clamp the accumulated force\n const maxFriction = friction * vcp.normalImpulse;\n const newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction);\n lambda = newImpulse - vcp.tangentImpulse;\n vcp.tangentImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, tangent);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n\n // Solve normal constraints\n if (this.v_pointCount == 1 || step.blockSolve == false) {\n for (let i = 0; i < this.v_pointCount; ++i) {\n const vcp = this.v_points[i]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute normal impulse\n const vn = matrix.dotVec2(dv, normal);\n let lambda = -vcp.normalMass * (vn - vcp.velocityBias);\n\n // Clamp the accumulated impulse\n const newImpulse = math_max(vcp.normalImpulse + lambda, 0.0);\n lambda = newImpulse - vcp.normalImpulse;\n vcp.normalImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, normal);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n } else {\n // Block solver developed in collaboration with Dirk Gregorius (back in\n // 01/07 on Box2D_Lite).\n // Build the mini LCP for this contact patch\n //\n // vn = A * x + b, vn >= 0, x >= 0 and vn_i * x_i = 0 with i = 1..2\n //\n // A = J * W * JT and J = ( -n, -r1 x n, n, r2 x n )\n // b = vn0 - velocityBias\n //\n // The system is solved using the \"Total enumeration method\" (s. Murty).\n // The complementary constraint vn_i * x_i\n // implies that we must have in any solution either vn_i = 0 or x_i = 0.\n // So for the 2D contact problem the cases\n // vn1 = 0 and vn2 = 0, x1 = 0 and x2 = 0, x1 = 0 and vn2 = 0, x2 = 0 and\n // vn1 = 0 need to be tested. The first valid\n // solution that satisfies the problem is chosen.\n //\n // In order to account of the accumulated impulse 'a' (because of the\n // iterative nature of the solver which only requires\n // that the accumulated impulse is clamped and not the incremental\n // impulse) we change the impulse variable (x_i).\n //\n // Substitute:\n //\n // x = a + d\n //\n // a := old total impulse\n // x := new total impulse\n // d := incremental impulse\n //\n // For the current iteration we extend the formula for the incremental\n // impulse\n // to compute the new total impulse:\n //\n // vn = A * d + b\n // = A * (x - a) + b\n // = A * x + b - A * a\n // = A * x + b'\n // b' = b - A * a;\n\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n matrix.setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse);\n _ASSERT && console.assert(a.x >= 0.0 && a.y >= 0.0);\n\n // Relative velocity at contact\n // let dv1 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp1.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp1.rA));\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // let dv2 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp2.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp2.rA));\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n let vn1 = matrix.dotVec2(dv1, normal);\n let vn2 = matrix.dotVec2(dv2, normal);\n\n matrix.setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias);\n\n // Compute b'\n // b.sub(Mat22.mulVec2(this.v_K, a));\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\n const k_errorTol = 1e-3;\n // NOT_USED(k_errorTol);\n\n while (true) {\n //\n // Case 1: vn = 0\n //\n // 0 = A * x + b'\n //\n // Solve for x:\n //\n // x = - inv(A) * b'\n //\n // const x = Mat22.mulVec2(this.v_normalMass, b).neg();\n matrix.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\n if (x.x >= 0.0 && x.y >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 2: vn1 = 0 and x2 = 0\n //\n // 0 = a11 * x1 + a12 * 0 + b1'\n // vn2 = a21 * x1 + a22 * 0 + b2'\n //\n x.x = -vcp1.normalMass * b.x;\n x.y = 0.0;\n vn1 = 0.0;\n vn2 = this.v_K.ex.y * x.x + b.y;\n\n if (x.x >= 0.0 && vn2 >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 3: vn2 = 0 and x1 = 0\n //\n // vn1 = a11 * 0 + a12 * x2 + b1'\n // 0 = a21 * 0 + a22 * x2 + b2'\n //\n x.x = 0.0;\n x.y = -vcp2.normalMass * b.y;\n vn1 = this.v_K.ey.x * x.y + b.x;\n vn2 = 0.0;\n\n if (x.y >= 0.0 && vn1 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 4: x1 = 0 and x2 = 0\n //\n // vn1 = b1\n // vn2 = b2;\n //\n x.x = 0.0;\n x.y = 0.0;\n vn1 = b.x;\n vn2 = b.y;\n\n if (vn1 >= 0.0 && vn2 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n break;\n }\n\n // No solution, give up. This is hit sometimes, but it doesn't seem to\n // matter.\n break;\n }\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n /** @internal */\n static addType(type1: ShapeType, type2: ShapeType, callback: EvaluateFunction): void {\n s_registers[type1] = s_registers[type1] || {};\n s_registers[type1][type2] = callback;\n }\n\n /** @internal */\n static create(fixtureA: Fixture, indexA: number, fixtureB: Fixture, indexB: number): Contact | null {\n const typeA = fixtureA.m_shape.m_type;\n const typeB = fixtureB.m_shape.m_type;\n\n const contact = contactPool.allocate();\n let 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\n // Contact creation may swap fixtures.\n fixtureA = contact.m_fixtureA;\n fixtureB = contact.m_fixtureB;\n indexA = contact.getChildIndexA();\n indexB = contact.getChildIndexB();\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n\n // Connect to body A\n contact.m_nodeA.contact = contact;\n contact.m_nodeA.other = bodyB;\n\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\n // Connect to body B\n contact.m_nodeB.contact = contact;\n contact.m_nodeB.other = bodyA;\n\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\n // Wake up the bodies\n if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n return contact;\n }\n\n /** @internal */\n static destroy(contact: Contact, listener: { endContact: (contact: Contact) => void }): void {\n const fixtureA = contact.m_fixtureA;\n const fixtureB = contact.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n if (contact.isTouching()) {\n listener.endContact(contact);\n }\n\n // Remove from body 1\n if (contact.m_nodeA.prev) {\n contact.m_nodeA.prev.next = contact.m_nodeA.next;\n }\n\n if (contact.m_nodeA.next) {\n contact.m_nodeA.next.prev = contact.m_nodeA.prev;\n }\n\n if (contact.m_nodeA == bodyA.m_contactList) {\n bodyA.m_contactList = contact.m_nodeA.next;\n }\n\n // Remove from body 2\n if (contact.m_nodeB.prev) {\n contact.m_nodeB.prev.next = contact.m_nodeB.next;\n }\n\n if (contact.m_nodeB.next) {\n contact.m_nodeB.next.prev = contact.m_nodeB.prev;\n }\n\n if (contact.m_nodeB == bodyB.m_contactList) {\n bodyB.m_contactList = contact.m_nodeB.next;\n }\n\n if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n // const typeA = fixtureA.getType();\n // const typeB = fixtureB.getType();\n\n // const destroyFcn = s_registers[typeA][typeB].destroyFcn;\n // if (typeof destroyFcn === 'function') {\n // destroyFcn(contact);\n // }\n\n contactPool.release(contact);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { Solver, ContactImpulse, TimeStep } from \"./Solver\";\nimport { Body, BodyDef } from \"./Body\";\nimport { Joint } from \"./Joint\";\nimport { Contact } from \"./Contact\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Fixture, FixtureProxy } from \"./Fixture\";\nimport { Manifold } from \"../collision/Manifold\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface WorldDef {\n /** [default: { x : 0, y : 0}] */\n gravity?: Vec2Value;\n\n /** [default: true] */\n allowSleep?: boolean;\n\n /** [default: true] */\n warmStarting?: boolean;\n\n /** [default: true] */\n continuousPhysics?: boolean;\n\n /** [default: false] */\n subStepping?: boolean;\n\n /** [default: true] */\n blockSolve?: boolean;\n\n /** @internal [8] For the velocity constraint solver. */\n velocityIterations?: number;\n\n /** @internal [3] For the position constraint solver. */\n positionIterations?: number;\n}\n\n/** @internal */ const DEFAULTS: WorldDef = {\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};\n\n/**\n * Callback function for ray casts, see {@link World.rayCast}.\n *\n * Called for each fixture found in the query.\n * The returned value replaces the ray-cast input maxFraction.\n * You control how the ray cast proceeds by returning a numeric/float value.\n * \n * - `0` to terminate the ray cast\n * - `fraction` to clip the ray cast at current point\n * - `1` don't clip the ray and continue\n * - `-1` (or anything else) to continue\n *\n * @param fixture The fixture hit by the ray\n * @param point The point of initial intersection\n * @param normal The normal vector at the point of intersection\n * @param fraction The fraction along the ray at the point of intersection\n *\n * @returns A number to update the maxFraction\n */\nexport type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number;\n\n/**\n * Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\nexport type WorldAABBQueryCallback = (fixture: Fixture) => boolean;\n\nexport class World {\n /** @internal */ m_solver: Solver;\n /** @internal */ m_broadPhase: BroadPhase;\n /** @internal */ m_contactList: Contact | null;\n /** @internal */ m_contactCount: number;\n /** @internal */ m_bodyList: Body | null;\n /** @internal */ m_bodyCount: number;\n /** @internal */ m_jointList: Joint | null;\n /** @internal */ m_jointCount: number;\n /** @internal */ m_stepComplete: boolean;\n /** @internal */ m_allowSleep: boolean;\n /** @internal */ m_gravity: Vec2;\n /** @internal */ m_clearForces: boolean;\n /** @internal */ m_newFixture: boolean;\n /** @internal */ m_locked: boolean;\n /** @internal */ m_warmStarting: boolean;\n /** @internal */ m_continuousPhysics: boolean;\n /** @internal */ m_subStepping: boolean;\n /** @internal */ m_blockSolve: boolean;\n /** @internal */ m_velocityIterations: number;\n /** @internal */ m_positionIterations: number;\n /** @internal */ m_t: number;\n\n // TODO\n /** @internal */ _listeners: {\n [key: string]: any[]\n };\n\n /**\n * @param def World definition or gravity vector.\n */\n constructor(def?: WorldDef | Vec2 | null) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof World)) {\n return new World(def);\n }\n\n this.s_step = new TimeStep();\n\n\n if (!def) {\n def = {};\n } else if (Vec2.isValid(def)) {\n def = { gravity: def as Vec2 };\n }\n\n def = options(def, DEFAULTS) as WorldDef;\n\n this.m_solver = new Solver(this);\n\n this.m_broadPhase = new BroadPhase();\n\n this.m_contactList = null;\n this.m_contactCount = 0;\n\n this.m_bodyList = null;\n this.m_bodyCount = 0;\n\n this.m_jointList = null;\n this.m_jointCount = 0;\n\n this.m_stepComplete = true;\n\n this.m_allowSleep = def.allowSleep;\n this.m_gravity = Vec2.clone(def.gravity);\n\n this.m_clearForces = true;\n this.m_newFixture = false;\n this.m_locked = false;\n\n // These are for debugging the solver.\n this.m_warmStarting = def.warmStarting;\n this.m_continuousPhysics = def.continuousPhysics;\n this.m_subStepping = def.subStepping;\n\n this.m_blockSolve = def.blockSolve;\n this.m_velocityIterations = def.velocityIterations;\n this.m_positionIterations = def.positionIterations;\n\n this.m_t = 0;\n }\n\n /** @internal */\n _serialize(): object {\n const bodies = [];\n const joints = [];\n\n for (let b = this.getBodyList(); b; b = b.getNext()) {\n bodies.push(b);\n }\n\n for (let j = this.getJointList(); j; j = j.getNext()) {\n // @ts-ignore\n if (typeof j._serialize === \"function\") {\n joints.push(j);\n }\n }\n\n return {\n gravity: this.m_gravity,\n bodies,\n joints,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, context: any, restore: any): World {\n if (!data) {\n return new World();\n }\n\n const world = new World(data.gravity);\n\n if (data.bodies) {\n for (let i = data.bodies.length - 1; i >= 0; i -= 1) {\n world._addBody(restore(Body, data.bodies[i], world));\n }\n }\n\n if (data.joints) {\n for (let i = data.joints.length - 1; i >= 0; i--) {\n world.createJoint(restore(Joint, data.joints[i], world));\n }\n }\n\n return world;\n }\n\n /**\n * Get the world body list. With the returned body, use Body.getNext to get the\n * next body in the world list. A null body indicates the end of the list.\n *\n * @return the head of the world body list.\n */\n getBodyList(): Body | null {\n return this.m_bodyList;\n }\n\n /**\n * Get the world joint list. With the returned joint, use Joint.getNext to get\n * the next joint in the world list. A null joint indicates the end of the list.\n *\n * @return the head of the world joint list.\n */\n getJointList(): Joint | null {\n return this.m_jointList;\n }\n\n /**\n * Get the world contact list. With the returned contact, use Contact.getNext to\n * get the next contact in the world list. A null contact indicates the end of\n * the list.\n *\n * Warning: contacts are created and destroyed in the middle of a time step.\n * Use ContactListener to avoid missing contacts.\n *\n * @return the head of the world contact list.\n */\n getContactList(): Contact | null {\n return this.m_contactList;\n }\n\n getBodyCount(): number {\n return this.m_bodyCount;\n }\n\n getJointCount(): number {\n return this.m_jointCount;\n }\n\n /**\n * Get the number of contacts (each may have 0 or more contact points).\n */\n getContactCount(): number {\n return this.m_contactCount;\n }\n\n /**\n * Change the global gravity vector.\n */\n setGravity(gravity: Vec2Value): void {\n this.m_gravity.set(gravity);\n }\n\n /**\n * Get the global gravity vector.\n */\n getGravity(): Vec2 {\n return this.m_gravity;\n }\n\n /**\n * Is the world locked (in the middle of a time step).\n */\n isLocked(): boolean {\n return this.m_locked;\n }\n\n /**\n * Enable/disable sleep.\n */\n setAllowSleeping(flag: boolean): void {\n if (flag == this.m_allowSleep) {\n return;\n }\n\n this.m_allowSleep = flag;\n if (this.m_allowSleep == false) {\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.setAwake(true);\n }\n }\n }\n\n getAllowSleeping(): boolean {\n return this.m_allowSleep;\n }\n\n /**\n * Enable/disable warm starting. For testing.\n */\n setWarmStarting(flag: boolean): void {\n this.m_warmStarting = flag;\n }\n\n getWarmStarting(): boolean {\n return this.m_warmStarting;\n }\n\n /**\n * Enable/disable continuous physics. For testing.\n */\n setContinuousPhysics(flag: boolean): void {\n this.m_continuousPhysics = flag;\n }\n\n getContinuousPhysics(): boolean {\n return this.m_continuousPhysics;\n }\n\n /**\n * Enable/disable single stepped continuous physics. For testing.\n */\n setSubStepping(flag: boolean): void {\n this.m_subStepping = flag;\n }\n\n getSubStepping(): boolean {\n return this.m_subStepping;\n }\n\n /**\n * Set flag to control automatic clearing of forces after each time step.\n */\n setAutoClearForces(flag: boolean): void {\n this.m_clearForces = flag;\n }\n\n /**\n * Get the flag that controls automatic clearing of forces after each time step.\n */\n getAutoClearForces(): boolean {\n return this.m_clearForces;\n }\n\n /**\n * Manually clear the force buffer on all bodies. By default, forces are cleared\n * automatically after each call to step. The default behavior is modified by\n * calling setAutoClearForces. The purpose of this function is to support\n * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step\n * under a variable frame-rate. When you perform sub-stepping you will disable\n * auto clearing of forces and instead call clearForces after all sub-steps are\n * complete in one pass of your game loop.\n *\n * See {@link World.setAutoClearForces}\n */\n clearForces(): void {\n for (let body = this.m_bodyList; body; body = body.getNext()) {\n body.m_force.setZero();\n body.m_torque = 0.0;\n }\n }\n\n /**\n * Query the world for all fixtures that potentially overlap the provided AABB.\n *\n * @param aabb The query box.\n * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\n queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n this.m_broadPhase.query(aabb, function(proxyId: number): boolean { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n return callback(proxy.fixture);\n });\n }\n\n /**\n * Ray-cast the world for all fixtures in the path of the ray. Your callback\n * controls whether you get the closest point, any point, or n-points. The\n * ray-cast ignores shapes that contain the starting point.\n *\n * @param point1 The ray starting point\n * @param point2 The ray ending point\n * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value.\n */\n rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n\n this.m_broadPhase.rayCast({\n maxFraction : 1.0,\n p1 : point1,\n p2 : point2\n }, function(input: RayCastInput, proxyId: number): number { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n const fixture = proxy.fixture;\n const index = proxy.childIndex;\n // @ts-ignore\n const output: RayCastOutput = {}; // TODO GC\n const hit = fixture.rayCast(output, input, index);\n if (hit) {\n const fraction = output.fraction;\n const point = Vec2.add(Vec2.mulNumVec2((1.0 - fraction), input.p1), Vec2.mulNumVec2(fraction, input.p2));\n return callback(fixture, point, output.normal, fraction);\n }\n return input.maxFraction;\n });\n }\n\n /**\n * Get the number of broad-phase proxies.\n */\n getProxyCount(): number {\n return this.m_broadPhase.getProxyCount();\n }\n\n /**\n * Get the height of broad-phase dynamic tree.\n */\n getTreeHeight(): number {\n return this.m_broadPhase.getTreeHeight();\n }\n\n /**\n * Get the balance of broad-phase dynamic tree.\n */\n getTreeBalance(): number {\n return this.m_broadPhase.getTreeBalance();\n }\n\n /**\n * Get the quality metric of broad-phase dynamic tree. The smaller the better.\n * The minimum is 1.\n */\n getTreeQuality(): number {\n return this.m_broadPhase.getTreeQuality();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The body shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n _ASSERT && console.assert(this.m_locked == false);\n if (this.m_locked) {\n return;\n }\n\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.m_xf.p.sub(newOrigin);\n b.m_sweep.c0.sub(newOrigin);\n b.m_sweep.c.sub(newOrigin);\n }\n\n for (let j = this.m_jointList; j; j = j.m_next) {\n j.shiftOrigin(newOrigin);\n }\n\n this.m_broadPhase.shiftOrigin(newOrigin);\n }\n\n /** @internal Used for deserialize. */\n _addBody(body: Body): void {\n _ASSERT && console.assert(this.isLocked() === false);\n if (this.isLocked()) {\n return;\n }\n\n // Add to world doubly linked list.\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\n /**\n * Create a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This function is locked during callbacks.\n */\n createBody(def?: BodyDef): Body;\n createBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createBody(arg1?, arg2?) {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n let def: BodyDef = {};\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\n const body = new Body(this, def);\n this._addBody(body);\n return body;\n }\n\n createDynamicBody(def?: BodyDef): Body;\n createDynamicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createDynamicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n createKinematicBody(def?: BodyDef): Body;\n createKinematicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createKinematicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n /**\n * Destroy a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This automatically deletes all associated shapes and joints.\n *\n * Warning: This function is locked during callbacks.\n */\n destroyBody(b: Body): boolean {\n _ASSERT && console.assert(this.m_bodyCount > 0);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n if (b.m_destroyed) {\n return false;\n }\n\n // Delete the attached joints.\n let je = b.m_jointList;\n while (je) {\n const je0 = je;\n je = je.next;\n\n this.publish(\"remove-joint\", je0.joint);\n this.destroyJoint(je0.joint);\n\n b.m_jointList = je;\n }\n b.m_jointList = null;\n\n // Delete the attached contacts.\n let ce = b.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n\n this.destroyContact(ce0.contact);\n\n b.m_contactList = ce;\n }\n b.m_contactList = null;\n\n // Delete the attached fixtures. This destroys broad-phase proxies.\n let f = b.m_fixtureList;\n while (f) {\n const f0 = f;\n f = f.m_next;\n\n this.publish(\"remove-fixture\", f0);\n f0.destroyProxies(this.m_broadPhase);\n\n b.m_fixtureList = f;\n }\n b.m_fixtureList = null;\n\n // Remove world body list.\n if (b.m_prev) {\n b.m_prev.m_next = b.m_next;\n }\n\n if (b.m_next) {\n b.m_next.m_prev = b.m_prev;\n }\n\n if (b == this.m_bodyList) {\n this.m_bodyList = b.m_next;\n }\n\n b.m_destroyed = true;\n\n --this.m_bodyCount;\n\n this.publish(\"remove-body\", b);\n\n return true;\n }\n\n /**\n * Create a joint to constrain bodies together. No reference to the definition\n * is retained. This may cause the connected bodies to cease colliding.\n *\n * Warning: This function is locked during callbacks.\n */\n createJoint(joint: T): T | null {\n _ASSERT && console.assert(!!joint.m_bodyA);\n _ASSERT && console.assert(!!joint.m_bodyB);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n // Connect to the world list.\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\n // Connect to the bodies' doubly linked lists.\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\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\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n for (let edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) {\n if (edge.other == joint.m_bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n }\n }\n\n // Note: creating a joint doesn't wake the bodies.\n\n return joint;\n }\n\n /**\n * Destroy a joint. This may cause the connected bodies to begin colliding.\n * Warning: This function is locked during callbacks.\n */\n destroyJoint(joint: Joint): void {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n // Remove from the doubly linked list.\n if (joint.m_prev) {\n joint.m_prev.m_next = joint.m_next;\n }\n\n if (joint.m_next) {\n joint.m_next.m_prev = joint.m_prev;\n }\n\n if (joint == this.m_jointList) {\n this.m_jointList = joint.m_next;\n }\n\n // Disconnect from bodies.\n const bodyA = joint.m_bodyA;\n const bodyB = joint.m_bodyB;\n\n // Wake up connected bodies.\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n\n // Remove from body 1.\n if (joint.m_edgeA.prev) {\n joint.m_edgeA.prev.next = joint.m_edgeA.next;\n }\n\n if (joint.m_edgeA.next) {\n joint.m_edgeA.next.prev = joint.m_edgeA.prev;\n }\n\n if (joint.m_edgeA == bodyA.m_jointList) {\n bodyA.m_jointList = joint.m_edgeA.next;\n }\n\n joint.m_edgeA.prev = null;\n joint.m_edgeA.next = null;\n\n // Remove from body 2\n if (joint.m_edgeB.prev) {\n joint.m_edgeB.prev.next = joint.m_edgeB.next;\n }\n\n if (joint.m_edgeB.next) {\n joint.m_edgeB.next.prev = joint.m_edgeB.prev;\n }\n\n if (joint.m_edgeB == bodyB.m_jointList) {\n bodyB.m_jointList = joint.m_edgeB.next;\n }\n\n joint.m_edgeB.prev = null;\n joint.m_edgeB.next = null;\n\n _ASSERT && console.assert(this.m_jointCount > 0);\n --this.m_jointCount;\n\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n let edge = bodyB.getContactList();\n while (edge) {\n if (edge.other == bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n }\n\n this.publish(\"remove-joint\", joint);\n }\n\n /** @internal */\n s_step: TimeStep; // reuse\n\n /**\n * Take a time step. This performs collision detection, integration, and\n * constraint solution.\n *\n * Broad-phase, narrow-phase, solve and solve time of impacts.\n *\n * @param timeStep Time step, this should not vary.\n */\n step(timeStep: number, velocityIterations?: number, positionIterations?: number): void {\n this.publish(\"pre-step\", timeStep);\n\n if ((velocityIterations | 0) !== velocityIterations) {\n // TODO: remove this in future\n velocityIterations = 0;\n }\n\n velocityIterations = velocityIterations || this.m_velocityIterations;\n positionIterations = positionIterations || this.m_positionIterations;\n\n // If new fixtures were added, we need to find the new contacts.\n if (this.m_newFixture) {\n this.findNewContacts();\n this.m_newFixture = false;\n }\n\n this.m_locked = true;\n\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\n // Update contacts. This is where some contacts are destroyed.\n this.updateContacts();\n\n // Integrate velocities, solve velocity constraints, and integrate positions.\n if (this.m_stepComplete && timeStep > 0.0) {\n this.m_solver.solveWorld(this.s_step);\n\n // Synchronize fixtures, check for out of range bodies.\n for (let b = this.m_bodyList; b; b = b.getNext()) {\n // If a body was not in an island then it did not move.\n if (b.m_islandFlag == false) {\n continue;\n }\n\n if (b.isStatic()) {\n continue;\n }\n\n // Update fixtures (for broad-phase).\n b.synchronizeFixtures();\n }\n // Look for new contacts.\n this.findNewContacts();\n }\n\n // Handle TOI events.\n if (this.m_continuousPhysics && timeStep > 0.0) {\n this.m_solver.solveWorldTOI(this.s_step);\n }\n\n if (this.m_clearForces) {\n this.clearForces();\n }\n\n this.m_locked = false;\n\n this.publish(\"post-step\", timeStep);\n }\n\n /**\n * @internal\n * Call this method to find new contacts.\n */\n findNewContacts(): void {\n this.m_broadPhase.updatePairs(\n (proxyA: FixtureProxy, proxyB: FixtureProxy) => this.createContact(proxyA, proxyB)\n );\n }\n\n /**\n * @internal\n * Callback for broad-phase.\n */\n createContact(proxyA: FixtureProxy, proxyB: FixtureProxy): void {\n const fixtureA = proxyA.fixture;\n const fixtureB = proxyB.fixture;\n\n const indexA = proxyA.childIndex;\n const indexB = proxyB.childIndex;\n\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Are the fixtures on the same body?\n if (bodyA == bodyB) {\n return;\n }\n\n // TODO_ERIN use a hash table to remove a potential bottleneck when both\n // bodies have a lot of contacts.\n // Does a contact already exist?\n let edge = bodyB.getContactList(); // ContactEdge\n while (edge) {\n if (edge.other == bodyA) {\n const fA = edge.contact.getFixtureA();\n const fB = edge.contact.getFixtureB();\n const iA = edge.contact.getChildIndexA();\n const iB = edge.contact.getChildIndexB();\n\n if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) {\n // A contact already exists.\n return;\n }\n\n if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) {\n // A contact already exists.\n return;\n }\n }\n\n edge = edge.next;\n }\n\n if (bodyB.shouldCollide(bodyA) == false) {\n return;\n }\n if (fixtureB.shouldCollide(fixtureA) == false) {\n return;\n }\n\n // Call the factory.\n const contact = Contact.create(fixtureA, indexA, fixtureB, indexB);\n if (contact == null) {\n return;\n }\n\n // Insert into the world.\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\n ++this.m_contactCount;\n }\n\n /**\n * @internal\n * Removes old non-overlapping contacts, applies filters and updates contacts.\n */\n updateContacts(): void {\n // Update awake contacts.\n let c: Contact;\n let next_c = this.m_contactList;\n while (c = next_c) {\n next_c = c.getNext();\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Is this contact flagged for filtering?\n if (c.m_filterFlag) {\n if (bodyB.shouldCollide(bodyA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n if (fixtureB.shouldCollide(fixtureA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n // Clear the filtering flag.\n c.m_filterFlag = false;\n }\n\n const activeA = bodyA.isAwake() && !bodyA.isStatic();\n const activeB = bodyB.isAwake() && !bodyB.isStatic();\n\n // At least one body must be awake and it must be dynamic or kinematic.\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const proxyIdA = fixtureA.m_proxies[indexA].proxyId;\n const proxyIdB = fixtureB.m_proxies[indexB].proxyId;\n const overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB);\n\n // Here we destroy contacts that cease to overlap in the broad-phase.\n if (overlap == false) {\n this.destroyContact(c);\n continue;\n }\n\n // The contact persists.\n c.update(this);\n }\n }\n\n /** @internal */\n destroyContact(contact: Contact): void {\n // Remove from the world.\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\n Contact.destroy(contact, this);\n\n --this.m_contactCount;\n }\n\n\n /**\n * Called when two fixtures begin to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n /**\n * Called when two fixtures cease to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"end-contact\", listener: (contact: Contact) => void): World;\n /**\n * This is called after a contact is updated. This allows you to inspect a\n * contact before it goes to the solver. If you are careful, you can modify the\n * contact manifold (e.g. disable contact). A copy of the old manifold is\n * provided so that you can detect changes. Note: this is called only for awake\n * bodies. Note: this is called even when the number of contact points is zero.\n * Note: this is not called for sensors. Note: if you set the number of contact\n * points to zero, you will not get an end-contact callback. However, you may get\n * a begin-contact callback the next step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n /**\n * This lets you inspect a contact after the solver is finished. This is useful\n * for inspecting impulses. Note: the contact manifold does not include time of\n * impact impulses, which can be arbitrarily large if the sub-step is small.\n * Hence the impulse is provided explicitly in a separate data structure. Note:\n * this is only called for contacts that are touching, solid, and awake.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n /** Listener is called whenever a body is removed. */\n on(name: \"remove-body\", listener: (body: Body) => void): World;\n /** Listener is called whenever a joint is removed implicitly or explicitly. */\n on(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n /** Listener is called whenever a fixture is removed implicitly or explicitly. */\n on(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Register an event listener.\n */\n // tslint:disable-next-line:typedef\n on(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\n off(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n off(name: \"end-contact\", listener: (contact: Contact) => void): World;\n off(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n off(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n off(name: \"remove-body\", listener: (body: Body) => void): World;\n off(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n off(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Remove an event listener.\n */\n // tslint:disable-next-line:typedef\n off(name, listener) {\n if (typeof name !== \"string\" || typeof listener !== \"function\") {\n return this;\n }\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return this;\n }\n const index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n return this;\n }\n\n publish(name: string, arg1?: any, arg2?: any, arg3?: any): number {\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return 0;\n }\n for (let l = 0; l < listeners.length; l++) {\n listeners[l].call(this, arg1, arg2, arg3);\n }\n return listeners.length;\n }\n\n /** @internal */\n beginContact(contact: Contact): void {\n this.publish(\"begin-contact\", contact);\n }\n\n /** @internal */\n endContact(contact: Contact): void {\n this.publish(\"end-contact\", contact);\n }\n\n /** @internal */\n preSolve(contact: Contact, oldManifold: Manifold): void {\n this.publish(\"pre-solve\", contact, oldManifold);\n }\n\n /** @internal */\n postSolve(contact: Contact, impulse: ContactImpulse): void {\n this.publish(\"post-solve\", contact, impulse);\n }\n\n /**\n * Joints and fixtures are destroyed when their associated body is destroyed.\n * Register a destruction listener so that you may nullify references to these\n * joints and shapes.\n *\n * `function(object)` is called when any joint or fixture is about to\n * be destroyed due to the destruction of one of its attached or parent bodies.\n */\n\n /**\n * Register a contact filter to provide specific control over collision.\n * Otherwise the default filter is used (defaultFilter). The listener is owned\n * by you and must remain in scope.\n *\n * Moved to Fixture.\n */\n}","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface Vec3Value {\n x: number;\n y: number;\n z: number;\n}\n\nexport class Vec3 {\n x: number;\n y: number;\n z: number;\n\n constructor(x: number, y: number, z: number);\n constructor(obj: { x: number, y: number, z: number });\n constructor();\n constructor(x?, y?, z?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec3)) {\n return new Vec3(x, y, z);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n } else {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n _ASSERT && Vec3.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y,\n z: this.z\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = data.x;\n obj.y = data.y;\n obj.z = data.z;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number, z: number): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = x;\n obj.y = y;\n obj.z = z;\n return obj;\n }\n\n static zero(): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = 0;\n obj.y = 0;\n obj.z = 0;\n return obj;\n }\n\n static clone(v: Vec3Value): Vec3 {\n _ASSERT && Vec3.assert(v);\n return Vec3.neo(v.x, v.y, v.z);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /** Does this vector contain finite coordinates? */\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec3.isValid(o), \"Invalid Vec3!\", o);\n }\n\n setZero(): Vec3 {\n this.x = 0.0;\n this.y = 0.0;\n this.z = 0.0;\n return this;\n }\n\n set(x: number, y: number, z: number): Vec3 {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n\n add(w: Vec3Value): Vec3 {\n this.x += w.x;\n this.y += w.y;\n this.z += w.z;\n return this;\n }\n\n sub(w: Vec3Value): Vec3 {\n this.x -= w.x;\n this.y -= w.y;\n this.z -= w.z;\n return this;\n }\n\n mul(m: number): Vec3 {\n this.x *= m;\n this.y *= m;\n this.z *= m;\n return this;\n }\n\n static areEqual(v: Vec3Value, w: Vec3Value): boolean {\n _ASSERT && Vec3.assert(v);\n _ASSERT && Vec3.assert(w);\n return v === w ||\n typeof v === \"object\" && v !== null &&\n typeof w === \"object\" && w !== null &&\n v.x === w.x && v.y === w.y && v.z === w.z;\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n }\n\n /** Cross product on two vectors */\n static cross(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(\n v.y * w.z - v.z * w.y,\n v.z * w.x - v.x * w.z,\n v.x * w.y - v.y * w.x\n );\n }\n\n static add(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x + w.x, v.y + w.y, v.z + w.z);\n }\n\n static sub(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x - w.x, v.y - w.y, v.z - w.z);\n }\n\n static mul(v: Vec3Value, m: number): Vec3 {\n return new Vec3(m * v.x, m * v.y, m * v.z);\n }\n\n neg(): Vec3 {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n\n static neg(v: Vec3Value): Vec3 {\n return new Vec3(-v.x, -v.y, -v.z);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Shape } from \"../Shape\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { AABB, AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\n/**\n * A line segment (edge) shape. These can be connected in chains or loops to\n * other edge shapes. The connectivity information is used to ensure correct\n * contact normals.\n */\nexport class EdgeShape extends Shape {\n static TYPE = \"edge\" as const;\n /** @hidden */ m_type: \"edge\";\n\n /** @hidden */ m_radius: number;\n\n // These are the edge vertices\n /** @hidden */ m_vertex1: Vec2;\n /** @hidden */ m_vertex2: Vec2;\n\n // Optional adjacent vertices. These are used for smooth collision.\n // Used by chain shape.\n /** @hidden */ m_vertex0: Vec2;\n /** @hidden */ m_vertex3: Vec2;\n /** @hidden */ m_hasVertex0: boolean;\n /** @hidden */ m_hasVertex3: boolean;\n\n constructor(v1?: Vec2Value, v2?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof EdgeShape)) {\n return new EdgeShape(v1, v2);\n }\n\n super();\n\n this.m_type = EdgeShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n\n this.m_vertex1 = v1 ? Vec2.clone(v1) : Vec2.zero();\n this.m_vertex2 = v2 ? Vec2.clone(v2) : Vec2.zero();\n\n this.m_vertex0 = Vec2.zero();\n this.m_vertex3 = Vec2.zero();\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertex1: this.m_vertex1,\n vertex2: this.m_vertex2,\n\n vertex0: this.m_vertex0,\n vertex3: this.m_vertex3,\n hasVertex0: this.m_hasVertex0,\n hasVertex3: this.m_hasVertex3,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): EdgeShape {\n const shape = new EdgeShape(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\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getType(): \"edge\" {\n return this.m_type;\n }\n\n /** @internal @deprecated */\n setNext(v?: Vec2Value): EdgeShape {\n return this.setNextVertex(v);\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n setNextVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex3.setVec2(v);\n this.m_hasVertex3 = true;\n } else {\n this.m_vertex3.setZero();\n this.m_hasVertex3 = false;\n }\n return this;\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n getNextVertex(): Vec2 {\n return this.m_vertex3;\n }\n\n /** @internal @deprecated */\n setPrev(v?: Vec2Value): EdgeShape {\n return this.setPrevVertex(v);\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n setPrevVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex0.setVec2(v);\n this.m_hasVertex0 = true;\n } else {\n this.m_vertex0.setZero();\n this.m_hasVertex0 = false;\n }\n return this;\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n getPrevVertex(): Vec2 {\n return this.m_vertex0;\n }\n\n /**\n * Set this as an isolated edge.\n */\n _set(v1: Vec2Value, v2: Vec2Value): EdgeShape {\n this.m_vertex1.setVec2(v1);\n this.m_vertex2.setVec2(v2);\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n return this;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): EdgeShape {\n const clone = new EdgeShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // p = p1 + t * d\n // v = v1 + s * e\n // p1 + t * d = v1 + s * e\n // s * e - t * d = p1 - v1\n\n // NOT_USED(childIndex);\n\n // Put the ray into the edge's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n const v1 = this.m_vertex1;\n const v2 = this.m_vertex2;\n const e = Vec2.sub(v2, v1);\n const normal = Vec2.neo(e.y, -e.x);\n normal.normalize();\n\n // q = p1 + t * d\n // dot(normal, q - v1) = 0\n // dot(normal, p1 - v1) + t * dot(normal, d) = 0\n const numerator = Vec2.dot(normal, Vec2.sub(v1, p1));\n const denominator = Vec2.dot(normal, d);\n\n if (denominator == 0.0) {\n return false;\n }\n\n const t = numerator / denominator;\n if (t < 0.0 || input.maxFraction < t) {\n return false;\n }\n\n const q = Vec2.add(p1, Vec2.mulNumVec2(t, d));\n\n // q = v1 + s * r\n // s = dot(q - v1, r) / dot(r, r)\n const r = Vec2.sub(v2, v1);\n const rr = Vec2.dot(r, r);\n if (rr == 0.0) {\n return false;\n }\n\n const s = Vec2.dot(Vec2.sub(q, v1), r) / rr;\n if (s < 0.0 || 1.0 < s) {\n return false;\n }\n\n output.fraction = t;\n if (numerator > 0.0) {\n output.normal = Rot.mulVec2(xf.q, normal).neg();\n } else {\n output.normal = Rot.mulVec2(xf.q, normal);\n }\n return true;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n matrix.transformVec2(v1, xf, this.m_vertex1);\n matrix.transformVec2(v2, xf, this.m_vertex2);\n\n AABB.combinePoints(aabb, v1, v2);\n AABB.extend(aabb, this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Edge = EdgeShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { AABBValue, RayCastOutput, RayCastInput, AABB } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\nimport { EdgeShape } from \"./EdgeShape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\n\n/**\n * A chain shape is a free form sequence of line segments. The chain has\n * two-sided collision, so you can use inside and outside collision. Therefore,\n * you may use any winding order. Connectivity information is used to create\n * smooth collisions.\n *\n * WARNING: The chain will not collide properly if there are self-intersections.\n */\nexport class ChainShape extends Shape {\n static TYPE = \"chain\" as const;\n /** @hidden */ m_type: \"chain\";\n\n /** @hidden */ m_radius: number;\n\n /** @hidden */ m_vertices: Vec2[];\n /** @hidden */ m_count: number;\n /** @hidden */ m_prevVertex: Vec2 | null;\n /** @hidden */ m_nextVertex: Vec2 | null;\n /** @hidden */ m_hasPrevVertex: boolean;\n /** @hidden */ m_hasNextVertex: boolean;\n\n /** @hidden */ m_isLoop: boolean;\n\n constructor(vertices?: Vec2Value[], loop?: boolean) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof ChainShape)) {\n return new ChainShape(vertices, loop);\n }\n\n super();\n\n this.m_type = ChainShape.TYPE;\n this.m_radius = Settings.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\n this.m_isLoop = !!loop;\n\n if (vertices && vertices.length) {\n if (loop) {\n this._createLoop(vertices);\n } else {\n this._createChain(vertices);\n }\n }\n }\n\n /** @internal */\n _serialize(): object {\n const data = {\n type: this.m_type,\n vertices: this.m_vertices,\n isLoop: this.m_isLoop,\n hasPrevVertex: this.m_hasPrevVertex,\n hasNextVertex: this.m_hasNextVertex,\n prevVertex: null as Vec2 | null,\n nextVertex: null as Vec2 | 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\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): ChainShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n const shape = new ChainShape(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\n // clear() {\n // this.m_vertices.length = 0;\n // this.m_count = 0;\n // }\n\n getType(): \"chain\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal\n * Create a loop. This automatically adjusts connectivity.\n *\n * @param vertices an array of vertices, these are copied\n * @param count the vertex count\n */\n _createLoop(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 3);\n if (vertices.length < 3) {\n return;\n }\n\n for (let i = 1; i < vertices.length; ++i) {\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n // If the code crashes here, it means your vertices are too close together.\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_vertices = [];\n this.m_count = vertices.length + 1;\n for (let 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\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\n /**\n * @internal\n * Create a chain with isolated end vertices.\n *\n * @param vertices an array of vertices, these are copied\n */\n _createChain(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 2);\n for (let i = 1; i < vertices.length; ++i) {\n // If the code crashes here, it means your vertices are too close together.\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_count = vertices.length;\n for (let i = 0; i < vertices.length; ++i) {\n this.m_vertices[i] = Vec2.clone(vertices[i]);\n }\n\n this.m_hasPrevVertex = false;\n this.m_hasNextVertex = false;\n this.m_prevVertex = null;\n this.m_nextVertex = null;\n return this;\n }\n\n /** @hidden */\n _reset(): void {\n if (this.m_isLoop) {\n this._createLoop(this.m_vertices);\n } else {\n this._createChain(this.m_vertices);\n }\n }\n\n /**\n * Establish connectivity to a vertex that precedes the first vertex. Don't call\n * this for loops.\n */\n setPrevVertex(prevVertex: Vec2): void {\n // todo: copy or reference\n this.m_prevVertex = prevVertex;\n this.m_hasPrevVertex = true;\n }\n\n getPrevVertex(): Vec2 {\n return this.m_prevVertex;\n }\n\n /**\n * Establish connectivity to a vertex that follows the last vertex. Don't call\n * this for loops.\n */\n setNextVertex(nextVertex: Vec2): void {\n // todo: copy or reference\n this.m_nextVertex = nextVertex;\n this.m_hasNextVertex = true;\n }\n\n getNextVertex(): Vec2 {\n return this.m_nextVertex;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): ChainShape {\n const clone = new ChainShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): number {\n // edge count = vertex count - 1\n return this.m_count - 1;\n }\n\n // Get a child edge.\n getChildEdge(edge: EdgeShape, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count - 1);\n edge.m_type = EdgeShape.TYPE;\n edge.m_radius = this.m_radius;\n\n edge.m_vertex1 = this.m_vertices[childIndex];\n edge.m_vertex2 = this.m_vertices[childIndex + 1];\n\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\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\n getVertex(index: number): Vec2 {\n _ASSERT && console.assert(0 <= index && index <= this.m_count);\n if (index < this.m_count) {\n return this.m_vertices[index];\n } else {\n return this.m_vertices[0];\n }\n }\n\n isLoop(): boolean {\n return this.m_isLoop;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * This always return false.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n const edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1));\n return edgeShape.rayCast(output, input, xf, 0);\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n matrix.transformVec2(v1, xf, this.getVertex(childIndex));\n matrix.transformVec2(v2, xf, this.getVertex(childIndex + 1));\n\n AABB.combinePoints(aabb, v1, v2);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * Chains have zero mass.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.zeroVec2(massData.center);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\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}\n\nexport const Chain = ChainShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const center = matrix.vec2(0, 0);\n/** @internal */ const s = matrix.vec2(0, 0);\n\n/**\n * A convex polygon. It is assumed that the interior of the polygon is to the\n * left of each edge. Polygons have a maximum number of vertices equal to\n * Settings.maxPolygonVertices. In most cases you should not need many vertices\n * for a convex polygon. extends Shape\n */\nexport class PolygonShape extends Shape {\n static TYPE = \"polygon\" as const;\n /** @hidden */ m_type: \"polygon\";\n\n /** @hidden */ m_centroid: Vec2;\n /** @hidden */ m_vertices: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_normals: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_count: number;\n /** @hidden */ m_radius: number;\n\n constructor(vertices?: Vec2Value[]) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PolygonShape)) {\n return new PolygonShape(vertices);\n }\n\n super();\n\n this.m_type = PolygonShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n this.m_centroid = Vec2.zero();\n this.m_vertices = [];\n this.m_normals = [];\n this.m_count = 0;\n\n if (vertices && vertices.length) {\n this._set(vertices);\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertices: this.m_vertices,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): PolygonShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n\n const shape = new PolygonShape(vertices);\n return shape;\n }\n\n getType(): \"polygon\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): PolygonShape {\n const clone = new PolygonShape();\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 (let i = 0; i < this.m_count; i++) {\n clone.m_vertices.push(this.m_vertices[i].clone());\n }\n for (let i = 0; i < this.m_normals.length; i++) {\n clone.m_normals.push(this.m_normals[i].clone());\n }\n return clone;\n }\n\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /** @hidden */\n _reset(): void {\n this._set(this.m_vertices);\n }\n\n /**\n * @internal\n *\n * Create a convex hull from the given array of local points. The count must be\n * in the range [3, Settings.maxPolygonVertices].\n *\n * Warning: the points may be re-ordered, even if they form a convex polygon\n * Warning: collinear points are handled but not removed. Collinear points may\n * lead to poor stacking behavior.\n */\n _set(vertices: Vec2Value[]): void {\n _ASSERT && console.assert(3 <= vertices.length && vertices.length <= Settings.maxPolygonVertices);\n if (vertices.length < 3) {\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n let n = math_min(vertices.length, Settings.maxPolygonVertices);\n\n // Perform welding and copy vertices into local buffer.\n const ps: Vec2[] = []; // [Settings.maxPolygonVertices];\n for (let i = 0; i < n; ++i) {\n const v = vertices[i];\n\n let unique = true;\n for (let j = 0; j < ps.length; ++j) {\n if (Vec2.distanceSquared(v, ps[j]) < 0.25 * Settings.linearSlopSquared) {\n unique = false;\n break;\n }\n }\n\n if (unique) {\n ps.push(Vec2.clone(v));\n }\n }\n\n n = ps.length;\n if (n < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n // Create the convex hull using the Gift wrapping algorithm\n // http://en.wikipedia.org/wiki/Gift_wrapping_algorithm\n\n // Find the right most point on the hull (in case of multiple points bottom most is used)\n let i0 = 0;\n let x0 = ps[0].x;\n for (let i = 1; i < n; ++i) {\n const x = ps[i].x;\n if (x > x0 || (x === x0 && ps[i].y < ps[i0].y)) {\n i0 = i;\n x0 = x;\n }\n }\n\n const hull = [] as number[]; // [Settings.maxPolygonVertices];\n let m = 0;\n let ih = i0;\n\n while (true) {\n _ASSERT && console.assert(m < Settings.maxPolygonVertices);\n hull[m] = ih;\n\n let ie = 0;\n for (let j = 1; j < n; ++j) {\n if (ie === ih) {\n ie = j;\n continue;\n }\n\n const r = Vec2.sub(ps[ie], ps[hull[m]]);\n const v = Vec2.sub(ps[j], ps[hull[m]]);\n const c = Vec2.crossVec2Vec2(r, v);\n // c < 0 means counter-clockwise wrapping, c > 0 means clockwise wrapping\n if (c < 0.0) {\n ie = j;\n }\n\n // Collinearity check\n if (c === 0.0 && v.lengthSquared() > r.lengthSquared()) {\n ie = j;\n }\n }\n\n ++m;\n ih = ie;\n\n if (ie === i0) {\n break;\n }\n }\n\n if (m < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n this.m_count = m;\n\n // Copy vertices.\n this.m_vertices = [];\n for (let i = 0; i < m; ++i) {\n this.m_vertices[i] = ps[hull[i]];\n }\n\n // Compute normals. Ensure the edges have non-zero length.\n for (let i = 0; i < m; ++i) {\n const i1 = i;\n const i2 = i + 1 < m ? i + 1 : 0;\n const edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]);\n _ASSERT && console.assert(edge.lengthSquared() > EPSILON * EPSILON);\n this.m_normals[i] = Vec2.crossVec2Num(edge, 1.0);\n this.m_normals[i].normalize();\n }\n\n // Compute the polygon centroid.\n this.m_centroid = computeCentroid(this.m_vertices, m);\n }\n\n /** @internal */ _setAsBox(hx: number, hy: number, center?: Vec2Value, angle?: number): void {\n // start with right-bottom, counter-clockwise, as in Gift wrapping algorithm in PolygonShape._set()\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\n this.m_normals[0] = Vec2.neo(1.0, 0.0);\n this.m_normals[1] = Vec2.neo(0.0, 1.0);\n this.m_normals[2] = Vec2.neo(-1.0, 0.0);\n this.m_normals[3] = Vec2.neo(0.0, -1.0);\n\n this.m_count = 4;\n\n if (center && Vec2.isValid(center)) {\n angle = angle || 0;\n\n matrix.copyVec2(this.m_centroid, center);\n\n const xf = Transform.identity();\n xf.p.setVec2(center);\n xf.q.setAngle(angle);\n\n // Transform vertices and normals.\n for (let i = 0; i < this.m_count; ++i) {\n this.m_vertices[i] = Transform.mulVec2(xf, this.m_vertices[i]);\n this.m_normals[i] = Rot.mulVec2(xf.q, this.m_normals[i]);\n }\n }\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const pLocal = matrix.detransformVec2(temp, xf, p);\n\n for (let i = 0; i < this.m_count; ++i) {\n const dot = matrix.dotVec2(this.m_normals[i], pLocal) - matrix.dotVec2(this.m_normals[i], this.m_vertices[i]);\n if (dot > 0.0) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n\n // Put the ray into the polygon's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n let lower = 0.0;\n let upper = input.maxFraction;\n\n let index = -1;\n\n for (let i = 0; i < this.m_count; ++i) {\n // p = p1 + a * d\n // dot(normal, p - v) = 0\n // dot(normal, p1 - v) + a * dot(normal, d) = 0\n const numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1));\n const denominator = Vec2.dot(this.m_normals[i], d);\n\n if (denominator == 0.0) {\n if (numerator < 0.0) {\n return false;\n }\n } else {\n // Note: we want this predicate without division:\n // lower < numerator / denominator, where denominator < 0\n // Since denominator < 0, we have to flip the inequality:\n // lower < numerator / denominator <==> denominator * lower > numerator.\n if (denominator < 0.0 && numerator < lower * denominator) {\n // Increase lower.\n // The segment enters this half-space.\n lower = numerator / denominator;\n index = i;\n } else if (denominator > 0.0 && numerator < upper * denominator) {\n // Decrease upper.\n // The segment exits this half-space.\n upper = numerator / denominator;\n }\n }\n\n // The use of epsilon here causes the assert on lower to trip\n // in some cases. Apparently the use of epsilon was to make edge\n // shapes work, but now those are handled separately.\n // if (upper < lower - matrix.EPSILON)\n if (upper < lower) {\n return false;\n }\n }\n\n _ASSERT && console.assert(0.0 <= lower && lower <= input.maxFraction);\n\n if (index >= 0) {\n output.fraction = lower;\n output.normal = Rot.mulVec2(xf.q, this.m_normals[index]);\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const v = matrix.transformVec2(temp, xf, this.m_vertices[i]);\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, v.y);\n maxY = math_max(maxY, v.y);\n }\n\n matrix.setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius);\n matrix.setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n // Polygon mass, centroid, and inertia.\n // Let rho be the polygon density in mass per unit area.\n // Then:\n // mass = rho * int(dA)\n // centroid.x = (1/mass) * rho * int(x * dA)\n // centroid.y = (1/mass) * rho * int(y * dA)\n // I = rho * int((x*x + y*y) * dA)\n //\n // We can compute these integrals by summing all the integrals\n // for each triangle of the polygon. To evaluate the integral\n // for a single triangle, we make a change of variables to\n // the (u,v) coordinates of the triangle:\n // x = x0 + e1x * u + e2x * v\n // y = y0 + e1y * u + e2y * v\n // where 0 <= u && 0 <= v && u + v <= 1.\n //\n // We integrate u from [0,1-v] and then v from [0,1].\n // We also need to use the Jacobian of the transformation:\n // D = cross(e1, e2)\n //\n // Simplification: triangle centroid = (1/3) * (p1 + p2 + p3)\n //\n // The rest of the derivation is handled by computer algebra.\n\n _ASSERT && console.assert(this.m_count >= 3);\n\n matrix.zeroVec2(center);\n let area = 0.0;\n let I = 0.0;\n\n // s is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n matrix.zeroVec2(s);\n\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < this.m_count; ++i) {\n matrix.plusVec2(s, this.m_vertices[i]);\n }\n matrix.scaleVec2(s, 1.0 / this.m_count, s);\n\n const k_inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < this.m_count; ++i) {\n // Triangle vertices.\n matrix.subVec2(e1, this.m_vertices[i], s);\n if ( i + 1 < this.m_count) {\n matrix.subVec2(e2, this.m_vertices[i + 1], s);\n } else {\n matrix.subVec2(e2, this.m_vertices[0], s);\n }\n\n const D = matrix.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine2Vec2(temp, triangleArea * k_inv3, e1, triangleArea * k_inv3, e2);\n matrix.plusVec2(center, temp);\n\n const ex1 = e1.x;\n const ey1 = e1.y;\n const ex2 = e2.x;\n const ey2 = e2.y;\n\n const intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2;\n const inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2;\n\n I += (0.25 * k_inv3 * D) * (intx2 + inty2);\n }\n\n // Total mass\n massData.mass = density * area;\n\n // Center of mass\n _ASSERT && console.assert(area > EPSILON);\n matrix.scaleVec2(center, 1.0 / area, center);\n matrix.addVec2(massData.center, center, s);\n\n // Inertia tensor relative to the local origin (point s).\n massData.I = density * I;\n\n // Shift to center of mass then to original body origin.\n massData.I += massData.mass * (matrix.dotVec2(massData.center, massData.center) - matrix.dotVec2(center, center));\n }\n\n /**\n * Validate convexity. This is a very time consuming operation.\n * @returns true if valid\n */\n validate(): boolean {\n for (let i = 0; i < this.m_count; ++i) {\n const i1 = i;\n const i2 = i < this.m_count - 1 ? i1 + 1 : 0;\n const p = this.m_vertices[i1];\n matrix.subVec2(e, this.m_vertices[i2], p);\n\n for (let j = 0; j < this.m_count; ++j) {\n if (j == i1 || j == i2) {\n continue;\n }\n\n const c = matrix.crossVec2Vec2(e, matrix.subVec2(temp, this.m_vertices[j], p));\n if (c < 0.0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\n for (let 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}\n\n/** @internal */ function computeCentroid(vs: Vec2[], count: number): Vec2 {\n _ASSERT && console.assert(count >= 3);\n\n const c = Vec2.zero();\n let area = 0.0;\n\n // pRef is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n const pRef = Vec2.zero();\n if (false) {\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < count; ++i) {\n pRef.add(vs[i]);\n }\n pRef.mul(1.0 / count);\n }\n\n const inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < count; ++i) {\n // Triangle vertices.\n const p1 = pRef;\n const p2 = vs[i];\n const p3 = i + 1 < count ? vs[i + 1] : vs[0];\n\n const e1 = Vec2.sub(p2, p1);\n const e2 = Vec2.sub(p3, p1);\n\n const D = Vec2.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine3Vec2(temp, 1, p1, 1, p2, 1, p3);\n matrix.plusScaleVec2(c, triangleArea * inv3, temp);\n }\n\n // Centroid\n _ASSERT && console.assert(area > EPSILON);\n c.mul(1.0 / area);\n return c;\n}\n\nexport const Polygon = PolygonShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Shape } from \"../Shape\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_PI = Math.PI;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\nexport class CircleShape extends Shape {\n static TYPE = \"circle\" as const;\n /** @hidden */ m_type: \"circle\";\n\n /** @hidden */ m_p: Vec2;\n /** @hidden */ m_radius: number;\n\n constructor(position: Vec2Value, radius?: number);\n constructor(radius?: number);\n constructor(a: any, b?: any) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof CircleShape)) {\n return new CircleShape(a, b);\n }\n\n super();\n\n this.m_type = CircleShape.TYPE;\n this.m_p = Vec2.zero();\n this.m_radius = 1;\n\n if (typeof a === \"object\" && Vec2.isValid(a)) {\n this.m_p.setVec2(a);\n\n if (typeof b === \"number\") {\n this.m_radius = b;\n }\n\n } else if (typeof a === \"number\") {\n this.m_radius = a;\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n p: this.m_p,\n radius: this.m_radius,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): CircleShape {\n return new CircleShape(data.p, data.radius);\n }\n\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getType(): \"circle\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getCenter(): Vec2 {\n return this.m_p;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): CircleShape {\n const clone = new CircleShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const center = matrix.transformVec2(temp, xf, this.m_p);\n return matrix.distSqrVec2(p, center) <= this.m_radius * this.m_radius;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // Collision Detection in Interactive 3D Environments by Gino van den Bergen\n // From Section 3.1.2\n // x = s + a * r\n // norm(x) = radius\n\n const position = Vec2.add(xf.p, Rot.mulVec2(xf.q, this.m_p));\n const s = Vec2.sub(input.p1, position);\n const b = Vec2.dot(s, s) - this.m_radius * this.m_radius;\n\n // Solve quadratic equation.\n const r = Vec2.sub(input.p2, input.p1);\n const c = Vec2.dot(s, r);\n const rr = Vec2.dot(r, r);\n const sigma = c * c - rr * b;\n\n // Check for negative discriminant and short segment.\n if (sigma < 0.0 || rr < EPSILON) {\n return false;\n }\n\n // Find the point of intersection of the line with the circle.\n let a = -(c + math_sqrt(sigma));\n\n // Is the intersection point on the segment?\n if (0.0 <= a && a <= input.maxFraction * rr) {\n a /= rr;\n output.fraction = a;\n output.normal = Vec2.add(s, Vec2.mulNumVec2(a, r));\n output.normal.normalize();\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n const p = matrix.transformVec2(temp, xf, this.m_p);\n\n matrix.setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius);\n matrix.setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n massData.mass = density * math_PI * this.m_radius * this.m_radius;\n matrix.copyVec2(massData.center, this.m_p);\n // inertia about the local origin\n massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + matrix.lengthSqrVec2(this.m_p));\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Circle = CircleShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. A value of 0 disables softness.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * Distance length.\n */\n length?: number;\n}\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointDef extends JointDef, DistanceJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0\n};\n\n/**\n * A distance joint constrains two points on two bodies to remain at a fixed\n * distance from each other. You can view this as a massless, rigid rod.\n */\nexport class DistanceJoint extends Joint {\n static TYPE = \"distance-joint\" as const;\n\n // Solver shared\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_length: number;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_gamma: number;\n /** @internal */ m_bias: number;\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n /**\n * @param def DistanceJoint definition.\n */\n constructor(def: DistanceJointDef);\n /**\n * @param anchorA Anchor A in global coordination.\n * @param anchorB Anchor B in global coordination.\n */\n constructor(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value);\n constructor(def: DistanceJointDef, bodyA?: Body, bodyB?: Body, anchorA?: Vec2Value, anchorB?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof DistanceJoint)) {\n return new DistanceJoint(def, bodyA, bodyB, anchorA, anchorB);\n }\n\n // order of constructor arguments is changed in v0.2\n if (bodyB && anchorA && (\"m_type\" in anchorA) && (\"x\" in bodyB) && (\"y\" in bodyB)) {\n const temp = bodyB;\n bodyB = anchorA as any as Body;\n anchorA = temp as any as Vec2;\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = DistanceJoint.TYPE;\n\n // Solver shared\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 :\n 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.0;\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n\n // 1-D constrained system\n // m (v2 - v1) = lambda\n // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass.\n // x2 = x1 + h * v2\n\n // 1-D mass-damper-spring system\n // m (v2 - v1) + h * d * v2 + h * k *\n\n // C = norm(p2 - p1) - L\n // u = (p2 - p1) / norm(p2 - p1)\n // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1))\n // J = [-u -cross(r1, u) u cross(r2, u)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n length: this.m_length,\n\n impulse: this.m_impulse,\n gamma: this.m_gamma,\n bias: this.m_bias,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): DistanceJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new DistanceJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\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\n if (def.length > 0) {\n this.m_length = +def.length;\n } else if (def.length < 0) { // don't change length\n } else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) {\n this.m_length = Vec2.distance(\n this.m_bodyA.getWorldPoint(this.m_localAnchorA),\n this.m_bodyB.getWorldPoint(this.m_localAnchorB)\n );\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the natural length. Manipulating the length can lead to non-physical\n * behavior when the frequency is zero.\n */\n setLength(length: number): void {\n this.m_length = length;\n }\n\n /**\n * Get the natural length.\n */\n getLength(): number {\n return this.m_length;\n }\n\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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(cB, this.m_rB), Vec2.add(cA, this.m_rA));\n\n // Handle singularity.\n const length = this.m_u.length();\n if (length > Settings.linearSlop) {\n this.m_u.mul(1.0 / length);\n } else {\n this.m_u.setNum(0.0, 0.0);\n }\n\n const crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n let invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu;\n\n // Compute the effective mass matrix.\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (this.m_frequencyHz > 0.0) {\n const C = length - this.m_length;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * this.m_mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_mass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invMass += this.m_gamma;\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n } else {\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n const Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA);\n\n const impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse);\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n if (this.m_frequencyHz > 0.0) {\n // There is no position correction for soft distance constraints.\n return true;\n }\n\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const length = u.normalize();\n const C = clamp(length - this.m_length, -Settings.maxLinearCorrection, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointOpt extends JointOpt {\n /**\n * The maximum friction force in N.\n */\n maxForce?: number;\n /**\n * The maximum friction torque in N-m.\n */\n maxTorque?: number;\n}\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointDef extends JointDef, FrictionJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n maxTorque : 0.0,\n};\n\n/**\n * Friction joint. This is used for top-down friction. It provides 2D\n * translational friction and angular friction.\n */\nexport class FrictionJoint extends Joint {\n static TYPE = \"friction-joint\" as const;\n\n /** @internal */ m_type: \"friction-joint\";\n\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n // Solver shared\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: FrictionJointDef);\n /**\n * @param anchor Anchor in global coordination.\n */\n constructor(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: FrictionJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof FrictionJoint)) {\n return new FrictionJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = FrictionJoint.TYPE;\n\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\n // Solver shared\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): FrictionJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new FrictionJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y\n * 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\n * this.m_rB.x;\n\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.sub(\n Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)),\n Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA))\n );\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = this.m_linearImpulse;\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) {\n this.m_linearImpulse.normalize();\n this.m_linearImpulse.mul(maxImpulse);\n }\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Vec3, Vec3Value } from \"./Vec3\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 3-by-3 matrix. Stored in column-major order.\n */\nexport class Mat33 {\n ex: Vec3;\n ey: Vec3;\n ez: Vec3;\n\n constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value);\n constructor();\n constructor(a?: Vec3Value, b?: Vec3Value, c?: Vec3Value) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec3.clone(a);\n this.ey = Vec3.clone(b);\n this.ez = Vec3.clone(c);\n } else {\n this.ex = Vec3.zero();\n this.ey = Vec3.zero();\n this.ez = Vec3.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat33.isValid(o), \"Invalid Mat33!\", o);\n }\n\n /**\n * Set this matrix to all zeros.\n */\n setZero(): Mat33 {\n this.ex.setZero();\n this.ey.setZero();\n this.ez.setZero();\n return this;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve33(v: Vec3Value): Vec3 {\n // let det = matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, this.ez));\n let cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y;\n let cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z;\n let cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x;\n let det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = new Vec3();\n // r.x = det * matrix.dotVec3(v, matrix.newCrossVec3(this.ey, this.ez));\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 * (v.x * cross_x + v.y * cross_y + v.z * cross_z);\n\n // r.y = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(v, this.ez));\n cross_x = v.y * this.ez.z - v.z * this.ez.y;\n cross_y = v.z * this.ez.x - v.x * this.ez.z;\n cross_z = v.x * this.ez.y - v.y * this.ez.x;\n r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z);\n\n // r.z = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, v));\n cross_x = this.ey.y * v.z - this.ey.z * v.y;\n cross_y = this.ey.z * v.x - this.ey.x * v.z;\n cross_z = this.ey.x * v.y - this.ey.y * v.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\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix\n * equation.\n */\n solve22(v: Vec2Value): Vec2 {\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a21 = this.ex.y;\n const a22 = this.ey.y;\n let det = a11 * a22 - a12 * a21;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = Vec2.zero();\n r.x = det * (a22 * v.x - a12 * v.y);\n r.y = det * (a11 * v.y - a21 * v.x);\n return r;\n }\n\n /**\n * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if\n * singular.\n */\n getInverse22(M: Mat33): void {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n M.ex.x = det * d;\n M.ey.x = -det * b;\n M.ex.z = 0.0;\n M.ex.y = -det * c;\n M.ey.y = det * a;\n M.ey.z = 0.0;\n M.ez.x = 0.0;\n M.ez.y = 0.0;\n M.ez.z = 0.0;\n }\n\n /**\n * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix\n * if singular.\n */\n getSymInverse33(M: Mat33): void {\n let det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez));\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a13 = this.ez.x;\n const a22 = this.ey.y;\n const a23 = this.ez.y;\n const a33 = this.ez.z;\n\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\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\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\n /**\n * Multiply a matrix times a vector.\n */\n static mul(a: Mat33, b: Vec2Value): Vec2;\n static mul(a: Mat33, b: Vec3Value): Vec3;\n static mul(a, b) {\n _ASSERT && Mat33.assert(a);\n if (b && \"z\" in b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n\n } else if (b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec3(a: Mat33, b: Vec3Value): Vec3 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n }\n\n static mulVec2(a: Mat33, b: Vec2Value): Vec2 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n static add(a: Mat33, b: Mat33): Mat33 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Mat33.assert(b);\n return new Mat33(\n Vec3.add(a.ex, b.ex),\n Vec3.add(a.ey, b.ey),\n Vec3.add(a.ez, b.ez)\n );\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n// todo: use string?\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n} \n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointOpt extends JointOpt {\n /**\n * The lower angle for the joint limit (radians).\n */\n lowerAngle?: number;\n /**\n * The upper angle for the joint limit (radians).\n */\n upperAngle?: number;\n /**\n * The maximum motor torque used to achieve the desired motor speed. Usually\n * in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed. Usually in radians per second.\n */\n motorSpeed?: number;\n /**\n * A flag to enable joint limits.\n */\n enableLimit?: boolean;\n /**\n * A flag to enable the joint motor.\n */\n enableMotor?: boolean;\n}\n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointDef extends JointDef, RevoluteJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n lowerAngle : 0.0,\n upperAngle : 0.0,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n enableLimit : false,\n enableMotor : false\n};\n\n/**\n * A revolute joint constrains two bodies to share a common point while they are\n * free to rotate about the point. The relative rotation about the shared point\n * is the joint angle. You can limit the relative rotation with a joint limit\n * that specifies a lower and upper angle. You can use a motor to drive the\n * relative rotation about the shared point. A maximum motor torque is provided\n * so that infinite forces are not generated.\n */\nexport class RevoluteJoint extends Joint {\n static TYPE = \"revolute-joint\" as const;\n\n /** @internal */ m_type: \"revolute-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerAngle: number;\n /** @internal */ m_upperAngle: number;\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n // effective mass for point-to-point constraint.\n /** @internal */ m_mass: Mat33;\n // effective mass for motor/limit angular constraint.\n /** @internal */ m_motorMass: number;\n /** @internal */ m_limitState: number;\n\n constructor(def: RevoluteJointDef);\n constructor(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RevoluteJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RevoluteJoint)) {\n return new RevoluteJoint(def, bodyA, bodyB, anchor);\n }\n\n def = def ?? {} as RevoluteJointDef;\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_mass = new Mat33();\n this.m_limitState = LimitState.inactiveLimit;\n\n this.m_type = RevoluteJoint.TYPE;\n\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\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\n if (Number.isFinite(def.referenceAngle)) {\n this.m_referenceAngle = def.referenceAngle;\n } else {\n this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle();\n }\n\n this.m_impulse = new Vec3();\n this.m_motorImpulse = 0.0;\n\n this.m_lowerAngle = def.lowerAngle ?? DEFAULTS.lowerAngle;\n this.m_upperAngle = def.upperAngle ?? DEFAULTS.upperAngle;\n this.m_maxMotorTorque = def.maxMotorTorque ?? DEFAULTS.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed ?? DEFAULTS.motorSpeed;\n this.m_enableLimit = def.enableLimit ?? DEFAULTS.enableLimit;\n this.m_enableMotor = def.enableMotor ?? DEFAULTS.enableMotor;\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Motor constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any):RevoluteJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RevoluteJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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 !== undefined) {\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 !== undefined) {\n this.m_enableMotor = def.enableMotor;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle in radians.\n */\n getJointAngle(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle speed in radians per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_angularVelocity - bA.m_angularVelocity;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Get the current motor torque given the inverse time step. Unit is N*m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set the motor speed in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set the maximum motor torque, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit in radians.\n */\n getLowerLimit(): number {\n return this.m_lowerAngle;\n }\n\n /**\n * Get the upper joint limit in radians.\n */\n getUpperLimit(): number {\n return this.m_upperAngle;\n }\n\n /**\n * Set the joint limits in radians.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(lower <= upper);\n\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.0;\n this.m_lowerAngle = lower;\n this.m_upperAngle = upper;\n }\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force given the inverse time step. Unit is N.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque due to the joint limit given the inverse time step.\n * Unit is N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\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\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n\n if (this.m_enableMotor == false || fixedRotation) {\n this.m_motorImpulse = 0.0;\n }\n\n if (this.m_enableLimit && fixedRotation == false) {\n const jointAngle = aB - aA - this.m_referenceAngle;\n\n if (math_abs(this.m_upperAngle - this.m_lowerAngle) < 2.0 * Settings.angularSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointAngle <= this.m_lowerAngle) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atLowerLimit;\n\n } else if (jointAngle >= this.m_upperAngle) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atUpperLimit;\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\n // Solve motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits && fixedRotation == false) {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(this.m_mass.solve33(Cdot));\n\n if (this.m_limitState == LimitState.equalLimits) {\n this.m_impulse.add(impulse);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse < 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse > 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n\n } else {\n // Solve point-to-point constraint\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const impulse = this.m_mass.solve22(Vec2.neg(Cdot));\n\n this.m_impulse.x += impulse.x;\n this.m_impulse.y += impulse.y;\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n let angularError = 0.0;\n let positionError = 0.0;\n\n const fixedRotation = (this.m_invIA + this.m_invIB == 0.0);\n\n // Solve angular limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const angle = aB - aA - this.m_referenceAngle;\n let limitImpulse = 0.0;\n\n if (this.m_limitState == LimitState.equalLimits) {\n // Prevent large angular corrections\n const C = clamp(angle - this.m_lowerAngle, -Settings.maxAngularCorrection, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n angularError = math_abs(C);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n let C = angle - this.m_lowerAngle;\n angularError = -C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C + Settings.angularSlop, -Settings.maxAngularCorrection, 0.0);\n limitImpulse = -this.m_motorMass * C;\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n let C = angle - this.m_upperAngle;\n angularError = C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C - Settings.angularSlop, 0.0, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n }\n\n aA -= this.m_invIA * limitImpulse;\n aB += this.m_invIB * limitImpulse;\n }\n\n // Solve point-to-point constraint.\n {\n qA.setAngle(aA);\n qB.setAngle(aB);\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n const C = Vec2.zero();\n C.addCombine(1, cB, 1, rB);\n C.subCombine(1, cA, 1, rA);\n positionError = C.length();\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y;\n K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y;\n K.ey.x = K.ex.y;\n K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x;\n\n const impulse = Vec2.neg(K.solve(C));\n\n cA.subMul(mA, impulse);\n aA -= iA * Vec2.crossVec2Vec2(rA, impulse);\n\n cB.addMul(mB, impulse);\n aB += iB * Vec2.crossVec2Vec2(rB, impulse);\n }\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3, \n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointOpt extends JointOpt {\n /**\n * Enable/disable the joint limit.\n */\n enableLimit?: boolean;\n /**\n * The lower translation limit, usually in meters.\n */\n lowerTranslation?: number;\n /**\n * The upper translation limit, usually in meters.\n */\n upperTranslation?: number;\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorForce?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointDef extends JointDef, PrismaticJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation unit axis in bodyA.\n */\n localAxisA: Vec2Value;\n /**\n * referenceAngle The constrained angle between the bodies:\n * bodyB_angle - bodyA_angle.\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableLimit : false,\n lowerTranslation : 0.0,\n upperTranslation : 0.0,\n enableMotor : false,\n maxMotorForce : 0.0,\n motorSpeed : 0.0\n};\n\n/**\n * A prismatic joint. This joint provides one degree of freedom: translation\n * along an axis fixed in bodyA. Relative rotation is prevented. You can use a\n * joint limit to restrict the range of motion and a joint motor to drive the\n * motion or to model joint friction.\n */\nexport class PrismaticJoint extends Joint {\n static TYPE = \"prismatic-joint\" as const;\n\n /** @internal */ m_type: \"prismatic-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerTranslation: number;\n /** @internal */ m_upperTranslation: number;\n /** @internal */ m_maxMotorForce: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n /** @internal */ m_limitState: number; // TODO enum\n /** @internal */ m_axis: Vec2;\n /** @internal */ m_perp: Vec2;\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_s1: number;\n /** @internal */ m_s2: number;\n /** @internal */ m_a1: number;\n /** @internal */ m_a2: number;\n /** @internal */ m_K: Mat33;\n\n constructor(def: PrismaticJointDef);\n constructor(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: PrismaticJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PrismaticJoint)) {\n return new PrismaticJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PrismaticJoint.TYPE;\n\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, 0.0));\n this.m_localXAxisA.normalize();\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle();\n\n this.m_impulse = new Vec3();\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n\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.inactiveLimit;\n\n this.m_axis = Vec2.zero();\n this.m_perp = Vec2.zero();\n\n this.m_K = new Mat33();\n\n // Linear constraint (point-to-line)\n // d = p2 - p1 = x2 + r2 - x1 - r1\n // C = dot(perp, d)\n // Cdot = dot(d, cross(w1, perp)) + dot(perp, v2 + cross(w2, r2) - v1 -\n // cross(w1, r1))\n // = -dot(perp, v1) - dot(cross(d + r1, perp), w1) + dot(perp, v2) +\n // dot(cross(r2, perp), v2)\n // J = [-perp, -cross(d + r1, perp), perp, cross(r2,perp)]\n //\n // Angular constraint\n // C = a2 - a1 + a_initial\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n //\n // K = J * invM * JT\n //\n // J = [-a -s1 a s2]\n // [0 -1 0 1]\n // a = perp\n // s1 = cross(d + r1, a) = cross(p2 - x1, a)\n // s2 = cross(r2, a) = cross(p2 - x2, a)\n\n // Motor/Limit linear constraint\n // C = dot(ax1, d)\n // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) +\n // dot(cross(r2, ax1), v2)\n // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)]\n\n // Block Solver\n // We develop a block solver that includes the joint limit. This makes the\n // limit stiff (inelastic) even\n // when the mass has poor distribution (leading to large torques about the\n // joint anchor points).\n //\n // The Jacobian has 3 rows:\n // J = [-uT -s1 uT s2] // linear\n // [0 -1 0 1] // angular\n // [-vT -a1 vT a2] // limit\n //\n // u = perp\n // v = axis\n // s1 = cross(d + r1, u), s2 = cross(r2, u)\n // a1 = cross(d + r1, v), a2 = cross(r2, v)\n\n // M * (v2 - v1) = JT * df\n // J * v2 = bias\n //\n // v2 = v1 + invM * JT * df\n // J * (v1 + invM * JT * df) = bias\n // K * df = bias - J * v1 = -Cdot\n // K = J * invM * JT\n // Cdot = J * v1 - bias\n //\n // Now solve for f2.\n // df = f2 - f1\n // K * (f2 - f1) = -Cdot\n // f2 = invK * (-Cdot) + f1\n //\n // Clamp accumulated limit impulse.\n // lower: f2(3) = max(f2(3), 0)\n // upper: f2(3) = min(f2(3), 0)\n //\n // Solve for correct f2(1:2)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:3) * f1\n // = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:2) * f1(1:2) + K(1:2,3) * f1(3)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3)) +\n // K(1:2,1:2) * f1(1:2)\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n //\n // Now compute impulse to be applied:\n // df = f2 - f1\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PrismaticJoint {\n data = {...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 const joint = new PrismaticJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, 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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const pA = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const pB = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = this.m_bodyA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const rA = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter));\n const rB = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter));\n const p1 = Vec2.add(bA.m_sweep.c, rA);\n const p2 = Vec2.add(bB.m_sweep.c, rB);\n const d = Vec2.sub(p2, p1);\n const axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA);\n\n const vA = bA.m_linearVelocity;\n const vB = bB.m_linearVelocity;\n const wA = bA.m_angularVelocity;\n const wB = bB.m_angularVelocity;\n\n const speed = Vec2.dot(d, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB, wB, rB), Vec2.addCrossNumVec2(vA, wA, rA)));\n return speed;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit, usually in meters.\n */\n getLowerLimit(): number {\n return this.m_lowerTranslation;\n }\n\n /**\n * Get the upper joint limit, usually in meters.\n */\n getUpperLimit(): number {\n return this.m_upperTranslation;\n }\n\n /**\n * Set the joint limits, usually in meters.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(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.0;\n }\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in meters per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Set the maximum motor force, usually in N.\n */\n setMaxMotorForce(force: number): void {\n if (force == this.m_maxMotorForce) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorForce = force;\n }\n\n getMaxMotorForce(): number {\n return this.m_maxMotorForce;\n }\n\n /**\n * Get the motor speed, usually in meters per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Get the current motor force given the inverse time step, usually in N.\n */\n getMotorForce(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\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\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.y;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute motor Jacobian and effective mass.\n {\n this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_axis);\n this.m_a2 = Vec2.crossVec2Vec2(rB, this.m_axis);\n\n this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2\n * this.m_a2;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n }\n\n // Prismatic constraint.\n {\n this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_perp);\n this.m_s2 = Vec2.crossVec2Vec2(rB, this.m_perp);\n\n const s1test = Vec2.crossVec2Vec2(rA, this.m_perp);\n\n const k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2;\n const k12 = iA * this.m_s1 + iB * this.m_s2;\n const k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For bodies with fixed rotation.\n k22 = 1.0;\n }\n const k23 = iA * this.m_a1 + iB * this.m_a2;\n const k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2;\n\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\n // Compute motor and limit terms.\n if (this.m_enableLimit) {\n\n const jointTranslation = Vec2.dot(this.m_axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Settings.linearSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointTranslation <= this.m_lowerTranslation) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_limitState = LimitState.atLowerLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else if (jointTranslation >= this.m_upperTranslation) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_limitState = LimitState.atUpperLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n if (this.m_enableMotor == false) {\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse\n + this.m_impulse.z, this.m_axis);\n const LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1;\n const LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Solve linear motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits) {\n const Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB, vA)) + this.m_a2 * wB\n - this.m_a1 * wA;\n let impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorForce;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse,\n -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_axis);\n const LA = impulse * this.m_a1;\n const LB = impulse * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n const Cdot1 = Vec2.zero();\n Cdot1.x += Vec2.dot(this.m_perp, vB) + this.m_s2 * wB;\n Cdot1.x -= Vec2.dot(this.m_perp, vA) + this.m_s1 * wA;\n Cdot1.y = wB - wA;\n\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit) {\n // Solve prismatic and limit constraint in block form.\n let Cdot2 = 0;\n Cdot2 += Vec2.dot(this.m_axis, vB) + this.m_a2 * wB;\n Cdot2 -= Vec2.dot(this.m_axis, vA) + this.m_a1 * wA;\n\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const f1 = Vec3.clone(this.m_impulse);\n let df = this.m_K.solve33(Vec3.neg(Cdot));\n this.m_impulse.add(df);\n\n if (this.m_limitState == LimitState.atLowerLimit) {\n this.m_impulse.z = math_max(this.m_impulse.z, 0.0);\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n this.m_impulse.z = math_min(this.m_impulse.z, 0.0);\n }\n\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n const b = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y));\n const f2r = Vec2.add(this.m_K.solve22(b), Vec2.neo(f1.x, f1.y));\n this.m_impulse.x = f2r.x;\n this.m_impulse.y = f2r.y;\n\n df = Vec3.sub(this.m_impulse, f1);\n\n const P = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis);\n const LA = df.x * this.m_s1 + df.y + df.z * this.m_a1;\n const LB = df.x * this.m_s2 + df.y + df.z * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n // Limit is inactive, just solve the prismatic constraint in block form.\n const df = this.m_K.solve22(Vec2.neg(Cdot1));\n this.m_impulse.x += df.x;\n this.m_impulse.y += df.y;\n\n const P = Vec2.mulNumVec2(df.x, this.m_perp);\n const LA = df.x * this.m_s1 + df.y;\n const LB = df.x * this.m_s2 + df.y;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute fresh Jacobians\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const axis = Rot.mulVec2(qA, this.m_localXAxisA);\n const a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), axis);\n const a2 = Vec2.crossVec2Vec2(rB, axis);\n const perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), perp);\n const s2 = Vec2.crossVec2Vec2(rB, perp);\n\n let impulse = new Vec3();\n const C1 = Vec2.zero();\n C1.x = Vec2.dot(perp, d);\n C1.y = aB - aA - this.m_referenceAngle;\n\n let linearError = math_abs(C1.x);\n const angularError = math_abs(C1.y);\n\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n let active = false; // bool\n let C2 = 0.0;\n if (this.m_enableLimit) {\n\n const translation = Vec2.dot(axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * linearSlop) {\n // Prevent large angular corrections\n C2 = clamp(translation, -maxLinearCorrection, maxLinearCorrection);\n linearError = math_max(linearError, math_abs(translation));\n active = true;\n\n } else if (translation <= this.m_lowerTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_lowerTranslation + linearSlop,\n -maxLinearCorrection, 0.0);\n linearError = Math\n .max(linearError, this.m_lowerTranslation - translation);\n active = true;\n\n } else if (translation >= this.m_upperTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_upperTranslation - linearSlop, 0.0,\n maxLinearCorrection);\n linearError = Math\n .max(linearError, translation - this.m_upperTranslation);\n active = true;\n }\n }\n\n if (active) {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n const k13 = iA * s1 * a1 + iB * s2 * a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For fixed rotation\n k22 = 1.0;\n }\n const k23 = iA * a1 + iB * a2;\n const k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2;\n\n const 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\n const C = new Vec3();\n C.x = C1.x;\n C.y = C1.y;\n C.z = C2;\n\n impulse = K.solve33(Vec3.neg(C));\n } else {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n k22 = 1.0;\n }\n\n const K = new Mat22();\n K.ex.setNum(k11, k12);\n K.ey.setNum(k12, k22);\n\n const impulse1 = K.solve(Vec2.neg(C1));\n impulse.x = impulse1.x;\n impulse.y = impulse1.y;\n impulse.z = 0.0;\n }\n\n const P = Vec2.combine(impulse.x, perp, impulse.z, axis);\n const LA = impulse.x * s1 + impulse.y + impulse.z * a1;\n const LB = impulse.x * s2 + impulse.y + impulse.z * a2;\n\n cA.subMul(mA, P);\n aA -= iA * LA;\n cB.addMul(mB, P);\n aB += iB * LB;\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError <= Settings.linearSlop\n && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { } from \"../../common/Math\";\nimport { Vec2 } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { RevoluteJoint } from \"./RevoluteJoint\";\nimport { PrismaticJoint } from \"./PrismaticJoint\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointOpt extends JointOpt {\n /**\n * The gear ratio. See {@link GearJoint} for explanation.\n */\n ratio?: number;\n}\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointDef extends JointDef, GearJointOpt {\n /**\n * The first revolute/prismatic joint attached to the gear joint.\n */\n joint1: RevoluteJoint | PrismaticJoint;\n /**\n * The second prismatic/revolute joint attached to the gear joint.\n */\n joint2: RevoluteJoint | PrismaticJoint;\n}\n\n/** @internal */ const DEFAULTS = {\n ratio : 1.0\n};\n\n/**\n * A gear joint is used to connect two joints together. Either joint can be a\n * revolute or prismatic joint. You specify a gear ratio to bind the motions\n * together: coordinate1 + ratio * coordinate2 = constant\n *\n * The ratio can be negative or positive. If one joint is a revolute joint and\n * the other joint is a prismatic joint, then the ratio will have units of\n * length or units of 1/length. Warning: You have to manually destroy the gear\n * joint if joint1 or joint2 is destroyed.\n *\n * This definition requires two existing revolute or prismatic joints (any\n * combination will work).\n */\nexport class GearJoint extends Joint {\n static TYPE = \"gear-joint\" as const;\n\n /** @internal */ m_type: \"gear-joint\";\n /** @internal */ m_joint1: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_joint2: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_type1: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_type2: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_bodyC: Body;\n /** @internal */ m_localAnchorC: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_referenceAngleA: number;\n /** @internal */ m_localAxisC: Vec2;\n /** @internal */ m_bodyD: Body;\n /** @internal */ m_localAnchorD: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngleB: number;\n /** @internal */ m_localAxisD: Vec2;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_lcA: Vec2;\n /** @internal */ m_lcB: Vec2;\n /** @internal */ m_lcC: Vec2;\n /** @internal */ m_lcD: Vec2;\n /** @internal */ m_mA: number;\n /** @internal */ m_mB: number;\n /** @internal */ m_mC: number;\n /** @internal */ m_mD: number;\n /** @internal */ m_iA: number;\n /** @internal */ m_iB: number;\n /** @internal */ m_iC: number;\n /** @internal */ m_iD: number;\n /** @internal */ m_JvAC: Vec2;\n /** @internal */ m_JvBD: Vec2;\n /** @internal */ m_JwA: number;\n /** @internal */ m_JwB: number;\n /** @internal */ m_JwC: number;\n /** @internal */ m_JwD: number;\n /** @internal */ m_mass: number;\n\n constructor(def: GearJointDef);\n constructor(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number);\n constructor(def: GearJointDef, bodyA?: Body, bodyB?: Body, joint1?: RevoluteJoint | PrismaticJoint, joint2?: RevoluteJoint | PrismaticJoint, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof GearJoint)) {\n return new GearJoint(def, bodyA, bodyB, joint1, joint2, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = GearJoint.TYPE;\n\n _ASSERT && console.assert(joint1.m_type === RevoluteJoint.TYPE || joint1.m_type === PrismaticJoint.TYPE);\n _ASSERT && console.assert(joint2.m_type === RevoluteJoint.TYPE || joint2.m_type === PrismaticJoint.TYPE);\n\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\n this.m_type1 = this.m_joint1.getType() as \"revolute-joint\" | \"prismatic-joint\";\n this.m_type2 = this.m_joint2.getType() as \"revolute-joint\" | \"prismatic-joint\";\n\n // joint1 connects body A to body C\n // joint2 connects body B to body D\n\n let coordinateA: number;\n let coordinateB: number;\n\n // TODO_ERIN there might be some problem with the joint edges in Joint.\n\n this.m_bodyC = this.m_joint1.getBodyA();\n this.m_bodyA = this.m_joint1.getBodyB();\n\n // Get geometry of joint1\n const xfA = this.m_bodyA.m_xf;\n const aA = this.m_bodyA.m_sweep.a;\n const xfC = this.m_bodyC.m_xf;\n const aC = this.m_bodyC.m_sweep.a;\n\n if (this.m_type1 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint1 as RevoluteJoint;\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\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const prismatic = this.m_joint1 as PrismaticJoint;\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\n const pC = this.m_localAnchorC;\n const pA = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA.q, this.m_localAnchorA), Vec2.sub(xfA.p, xfC.p)));\n coordinateA = Vec2.dot(pA, this.m_localAxisC) - Vec2.dot(pC, this.m_localAxisC);\n }\n\n this.m_bodyD = this.m_joint2.getBodyA();\n this.m_bodyB = this.m_joint2.getBodyB();\n\n // Get geometry of joint2\n const xfB = this.m_bodyB.m_xf;\n const aB = this.m_bodyB.m_sweep.a;\n const xfD = this.m_bodyD.m_xf;\n const aD = this.m_bodyD.m_sweep.a;\n\n if (this.m_type2 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint2 as RevoluteJoint;\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const prismatic = this.m_joint2 as PrismaticJoint;\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\n const pD = this.m_localAnchorD;\n const pB = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB.q, this.m_localAnchorB), Vec2.sub(xfB.p, xfD.p)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n this.m_constant = coordinateA + this.m_ratio * coordinateB;\n\n this.m_impulse = 0.0;\n\n // Gear Joint:\n // C0 = (coordinate1 + ratio * coordinate2)_initial\n // C = (coordinate1 + ratio * coordinate2) - C0 = 0\n // J = [J1 ratio * J2]\n // K = J * invM * JT\n // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T\n //\n // Revolute:\n // coordinate = rotation\n // Cdot = angularVelocity\n // J = [0 0 1]\n // K = J * invM * JT = invI\n //\n // Prismatic:\n // coordinate = dot(p - pg, ug)\n // Cdot = dot(v + cross(w, r), ug)\n // J = [ug cross(r, ug)]\n // K = J * invM * JT = invMass + invI * cross(r, ug)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n joint1: this.m_joint1,\n joint2: this.m_joint2,\n ratio: this.m_ratio,\n\n // _constant: this.m_constant,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): GearJoint {\n data = {...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 const joint = new GearJoint(data);\n // if (data._constant) joint.m_constant = data._constant;\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n // todo: implement other fields\n if (Number.isFinite(def.ratio)) {\n this.m_ratio = def.ratio;\n }\n }\n\n /**\n * Get the first joint.\n */\n getJoint1(): Joint {\n return this.m_joint1;\n }\n\n /**\n * Get the second joint.\n */\n getJoint2(): Joint {\n return this.m_joint2;\n }\n\n /**\n * Set the gear ratio.\n */\n setRatio(ratio: number): void {\n _ASSERT && console.assert(Number.isFinite(ratio));\n this.m_ratio = ratio;\n }\n\n /**\n * Get the gear ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n const L = this.m_impulse * this.m_JwA;\n return inv_dt * L;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const aC = this.m_bodyC.c_position.a;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n\n const aD = this.m_bodyD.c_position.a;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n this.m_mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n this.m_JvAC = Vec2.zero();\n this.m_JwA = 1.0;\n this.m_JwC = 1.0;\n this.m_mass += this.m_iA + this.m_iC;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = 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(rA, 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\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 const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n // Compute effective mass.\n this.m_mass = this.m_mass > 0.0 ? 1.0 / this.m_mass : 0.0;\n\n if (step.warmStarting) {\n vA.addMul(this.m_mA * this.m_impulse, this.m_JvAC);\n wA += this.m_iA * this.m_impulse * this.m_JwA;\n\n vB.addMul(this.m_mB * this.m_impulse, this.m_JvBD);\n wB += this.m_iB * this.m_impulse * this.m_JwB;\n\n vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC);\n wC -= this.m_iC * this.m_impulse * this.m_JwC;\n\n vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD);\n wD -= this.m_iD * this.m_impulse * this.m_JwD;\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n let Cdot = Vec2.dot(this.m_JvAC, vA) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB) - 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\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n vA.addMul(this.m_mA * impulse, this.m_JvAC);\n wA += this.m_iA * impulse * this.m_JwA;\n vB.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\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n const cC = this.m_bodyC.c_position.c;\n let aC = this.m_bodyC.c_position.a;\n const cD = this.m_bodyD.c_position.c;\n let aD = this.m_bodyD.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n const linearError = 0.0;\n\n let coordinateA: number;\n let coordinateB: number;\n\n let JvAC: Vec2;\n let JvBD: Vec2;\n let JwA: number;\n let JwB: number;\n let JwC: number;\n let JwD: number;\n let mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n JvAC = Vec2.zero();\n JwA = 1.0;\n JwC = 1.0;\n mass += this.m_iA + this.m_iC;\n\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA);\n JvAC = u;\n JwC = Vec2.crossVec2Vec2(rC, u);\n JwA = Vec2.crossVec2Vec2(rA, u);\n mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA;\n\n const pC = Vec2.sub(this.m_localAnchorC, this.m_lcC);\n const pA = Rot.mulTVec2(qC, Vec2.add(rA, Vec2.sub(cA, cC)));\n coordinateA = Vec2.dot(Vec2.sub(pA, pC), this.m_localAxisC);\n }\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n const pD = Vec2.sub(this.m_localAnchorD, this.m_lcD);\n const pB = Rot.mulTVec2(qD, Vec2.add(rB, Vec2.sub(cB, cD)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n const C = (coordinateA + this.m_ratio * coordinateB) - this.m_constant;\n\n let impulse = 0.0;\n if (mass > 0.0) {\n impulse = -C / mass;\n }\n\n cA.addMul(this.m_mA * impulse, JvAC);\n aA += this.m_iA * impulse * JwA;\n cB.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\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\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\n // TODO_ERIN not implemented\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointOpt extends JointOpt {\n /**\n * The bodyB angle minus bodyA angle in radians.\n */\n angularOffset?: number;\n /**\n * The maximum motor force in N.\n */\n maxForce?: number;\n /**\n * The maximum motor torque in N-m.\n */\n maxTorque?: number;\n /**\n * Position correction factor in the range [0,1].\n */\n correctionFactor?: number;\n /**\n * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters.\n */\n linearOffset?: Vec2Value;\n}\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointDef extends JointDef, MotorJointOpt {\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 1.0,\n maxTorque : 1.0,\n correctionFactor : 0.3\n};\n\n/**\n * A motor joint is used to control the relative motion between two bodies. A\n * typical usage is to control the movement of a dynamic body with respect to\n * the ground.\n */\nexport class MotorJoint extends Joint {\n static TYPE = \"motor-joint\" as const;\n\n /** @internal */ m_type: \"motor-joint\";\n /** @internal */ m_linearOffset: Vec2;\n /** @internal */ m_angularOffset: number;\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n /** @internal */ m_correctionFactor: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_linearError: Vec2;\n /** @internal */ m_angularError: number;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: MotorJointDef);\n constructor(def: MotorJointOpt, bodyA: Body, bodyB: Body);\n constructor(def: MotorJointDef | MotorJointOpt, bodyA?: Body, bodyB?: Body) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MotorJoint)) {\n return new MotorJoint(def, bodyA, bodyB);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MotorJoint.TYPE;\n\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\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n this.m_correctionFactor = def.correctionFactor;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n //\n // r1 = offset - c1\n // r2 = -c2\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n correctionFactor: this.m_correctionFactor,\n\n linearOffset: this.m_linearOffset,\n angularOffset: this.m_angularOffset,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MotorJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new MotorJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Set the position correction factor in the range [0,1].\n */\n setCorrectionFactor(factor: number): void {\n _ASSERT && console.assert(Number.isFinite(factor) && 0.0 <= factor && factor <= 1.0);\n this.m_correctionFactor = factor;\n }\n\n /**\n * Get the position correction factor in the range [0,1].\n */\n getCorrectionFactor(): number {\n return this.m_correctionFactor;\n }\n\n /**\n * Set/get the target linear offset, in frame A, in meters.\n */\n setLinearOffset(linearOffset: Vec2Value): void {\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\n getLinearOffset(): Vec2 {\n return this.m_linearOffset;\n }\n\n /**\n * Set/get the target angular offset, in radians.\n */\n setAngularOffset(angularOffset: number): void {\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\n getAngularOffset(): number {\n return this.m_angularOffset;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getPosition();\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getPosition();\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Upper 2 by 2 of K for point to point\n const 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\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n this.m_linearError = Vec2.zero();\n this.m_linearError.addCombine(1, cB, 1, this.m_rB);\n this.m_linearError.subCombine(1, cA, 1, this.m_rA);\n\n this.m_angularError = aB - aA - this.m_angularOffset;\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n const inv_h = step.inv_dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError);\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = Vec2.clone(this.m_linearImpulse);\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n this.m_linearImpulse.clamp(maxImpulse);\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Transform } from \"../../common/Transform\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointOpt extends JointOpt {\n /**\n * [maxForce = 0.0] The maximum constraint force that can be exerted to move\n * the candidate body. Usually you will express as some multiple of the\n * weight (multiplier * mass * gravity).\n */\n maxForce?: number;\n /**\n * [frequencyHz = 5.0] The response speed.\n */\n frequencyHz?: number;\n /**\n * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical\n * damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointDef extends JointDef, MouseJointOpt {\n /**\n * The initial world target point. This is assumed to coincide with the body\n * anchor initially.\n */\n target: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n frequencyHz : 5.0,\n dampingRatio : 0.7\n};\n\n/**\n * A mouse joint is used to make a point on a body track a specified world\n * point. This a soft constraint with a maximum force. This allows the\n * constraint to stretch and without applying huge forces.\n *\n * You need to call setTarget(target) every time that mouse is \n * moved, to track the new location of the mouse.\n *\n * NOTE: this joint is not documented in the manual because it was developed to\n * be used in the testbed. If you want to learn how to use the mouse joint, look\n * at the testbed.\n */\nexport class MouseJoint extends Joint {\n static TYPE = \"mouse-joint\" as const;\n\n /** @internal */ m_type: \"mouse-joint\";\n /** @internal */ m_targetA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_impulse: Vec2;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_beta: number;\n /** @internal */ m_gamma: number;\n // Solver temp\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat22;\n /** @internal */ m_C: Vec2;\n\n constructor(def: MouseJointDef);\n constructor(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value);\n constructor(def: MouseJointDef, bodyA?: Body, bodyB?: Body, target?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MouseJoint)) {\n return new MouseJoint(def, bodyA, bodyB, target);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MouseJoint.TYPE;\n\n _ASSERT && console.assert(Number.isFinite(def.maxForce) && def.maxForce >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.frequencyHz) && def.frequencyHz >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.dampingRatio) && def.dampingRatio >= 0.0);\n\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\n this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), this.m_targetA);\n\n this.m_maxForce = def.maxForce;\n this.m_impulse = Vec2.zero();\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_beta = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rB = Vec2.zero();\n this.m_localCenterB = Vec2.zero();\n this.m_invMassB = 0.0;\n this.m_invIB = 0.0;\n this.m_mass = new Mat22();\n this.m_C = Vec2.zero();\n\n // p = attached point, m = mouse point\n // C = p - m\n // Cdot = v\n // = v + cross(w, r)\n // J = [I r_skew]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n target: this.m_targetA,\n maxForce: this.m_maxForce,\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n _localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MouseJoint {\n data = {...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 const joint = new MouseJoint(data);\n if (data._localAnchorB) {\n joint.m_localAnchorB = data._localAnchorB;\n }\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Use this to update the target point.\n */\n setTarget(target: Vec2Value): void {\n if (Vec2.areEqual(target, this.m_targetA)) return;\n this.m_bodyB.setAwake(true);\n this.m_targetA.set(target);\n }\n\n getTarget(): Vec2 {\n return this.m_targetA;\n }\n\n /**\n * Set the maximum force in Newtons.\n */\n setMaxForce(force: number): void {\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum force in Newtons.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the frequency in Hertz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get the frequency in Hertz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set the damping ratio (dimensionless).\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get the damping ratio (dimensionless).\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return Vec2.clone(this.m_targetA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_impulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * 0.0;\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_targetA.sub(newOrigin);\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const position = this.m_bodyB.c_position;\n const velocity = this.m_bodyB.c_velocity;\n\n const cB = position.c;\n const aB = position.a;\n const vB = velocity.v;\n let wB = velocity.w;\n\n const qB = Rot.neo(aB);\n\n const mass = this.m_bodyB.getMass();\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = mass * (omega * omega);\n\n // magic formulas\n // gamma has units of inverse mass.\n // beta has units of inverse time.\n const h = step.dt;\n _ASSERT && console.assert(d + h * k > EPSILON);\n this.m_gamma = h * (d + h * k);\n if (this.m_gamma != 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n this.m_beta = h * k * this.m_gamma;\n\n // Compute the effective mass matrix.\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) *\n // invI2 * skew(r2)]\n // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y\n // -r1.x*r1.y]\n // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x]\n const K = new Mat22();\n K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y\n + 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\n + this.m_gamma;\n\n this.m_mass = K.getInverse();\n\n this.m_C.setVec2(cB);\n this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA);\n this.m_C.mul(this.m_beta);\n\n // Cheat with some damping\n wB *= 0.98;\n\n if (step.warmStarting) {\n this.m_impulse.mul(step.dtRatio);\n vB.addMul(this.m_invMassB, this.m_impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse);\n\n } else {\n this.m_impulse.setZero();\n }\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const velocity = this.m_bodyB.c_velocity;\n const vB = Vec2.clone(velocity.v);\n let wB = velocity.w;\n\n // Cdot = v + cross(w, r)\n\n const Cdot = Vec2.crossNumVec2(wB, this.m_rB);\n Cdot.add(vB);\n\n Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse);\n Cdot.neg();\n\n let impulse = Mat22.mulVec2(this.m_mass, Cdot);\n\n const oldImpulse = Vec2.clone(this.m_impulse);\n this.m_impulse.add(impulse);\n const maxImpulse = step.dt * this.m_maxForce;\n this.m_impulse.clamp(maxImpulse);\n impulse = Vec2.sub(this.m_impulse, oldImpulse);\n\n vB.addMul(this.m_invMassB, impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\n// tslint:disable-next-line:no-empty-interface\nexport interface PulleyJointOpt extends JointOpt {\n}\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\nexport interface PulleyJointDef extends JointDef, PulleyJointOpt {\n /**\n * The first ground anchor in world coordinates. This point never moves.\n */\n groundAnchorA: Vec2Value;\n /**\n * The second ground anchor in world coordinates. This point never moves.\n */\n groundAnchorB: Vec2Value;\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The reference length for the segment attached to bodyA.\n */\n lengthA: number;\n /**\n * The reference length for the segment attached to bodyB.\n */\n lengthB: number;\n /**\n * The pulley ratio, used to simulate a block-and-tackle.\n */\n ratio: number;\n\n /** @hidden */ anchorA?: Vec2Value;\n /** @hidden */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n collideConnected : true\n};\n\n/**\n * The pulley joint is connected to two bodies and two fixed ground points. The\n * pulley supports a ratio such that: length1 + ratio * length2 <= constant\n *\n * Yes, the force transmitted is scaled by the ratio.\n *\n * Warning: the pulley joint can get a bit squirrelly by itself. They often work\n * better when combined with prismatic joints. You should also cover the the\n * anchor points with static shapes to prevent one side from going to zero\n * length.\n */\nexport class PulleyJoint extends Joint {\n static TYPE = \"pulley-joint\" as const;\n // static MIN_PULLEY_LENGTH: number = 2.0; // TODO where this is used?\n\n /** @internal */ m_type: \"pulley-joint\";\n /** @internal */ m_groundAnchorA: Vec2;\n /** @internal */ m_groundAnchorB: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_lengthA: number;\n /** @internal */ m_lengthB: number;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_uA: Vec2;\n /** @internal */ m_uB: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n constructor(def: PulleyJointDef);\n constructor(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number);\n constructor(def: PulleyJointDef, bodyA?: Body, bodyB?: Body, groundA?: Vec2Value, groundB?: Vec2Value, anchorA?: Vec2Value, anchorB?: Vec2Value, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PulleyJoint)) {\n return new PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PulleyJoint.TYPE;\n this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1.0, 1.0));\n this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1.0, 1.0));\n this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1.0, 0.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\n _ASSERT && console.assert(ratio > EPSILON);\n\n this.m_constant = this.m_lengthA + this.m_ratio * this.m_lengthB;\n\n this.m_impulse = 0.0;\n\n // Pulley:\n // length1 = norm(p1 - s1)\n // length2 = norm(p2 - s2)\n // C0 = (length1 + ratio * length2)_initial\n // C = C0 - (length1 + ratio * length2)\n // u1 = (p1 - s1) / norm(p1 - s1)\n // u2 = (p2 - s2) / norm(p2 - s2)\n // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2))\n // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 *\n // cross(r2, u2)^2)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PulleyJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new PulleyJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Get the first ground anchor.\n */\n getGroundAnchorA(): Vec2 {\n return this.m_groundAnchorA;\n }\n\n /**\n * Get the second ground anchor.\n */\n getGroundAnchorB(): Vec2 {\n return this.m_groundAnchorB;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getLengthA(): number {\n return this.m_lengthA;\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getLengthB(): number {\n return this.m_lengthB;\n }\n\n /**\n * Get the pulley ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getCurrentLengthA(): number {\n const p = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const s = this.m_groundAnchorA;\n return Vec2.distance(p, s);\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getCurrentLengthB(): number {\n const p = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const s = this.m_groundAnchorB;\n return Vec2.distance(p, s);\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n *\n * @param newOrigin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_groundAnchorA.sub(newOrigin);\n this.m_groundAnchorB.sub(newOrigin);\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // Get the pulley axes.\n this.m_uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n this.m_uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = this.m_uA.length();\n const lengthB = this.m_uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n this.m_uA.mul(1.0 / lengthA);\n } else {\n this.m_uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n this.m_uB.mul(1.0 / lengthB);\n } else {\n this.m_uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA);\n const ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n this.m_mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support variable time steps.\n this.m_impulse *= step.dtRatio;\n\n // Warm starting.\n const PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB);\n\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n\n const Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB);\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const PA = Vec2.mulNumVec2(-impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB);\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // Get the pulley axes.\n const uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n const uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = uA.length();\n const lengthB = uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n uA.mul(1.0 / lengthA);\n } else {\n uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n uB.mul(1.0 / lengthB);\n } else {\n uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(rA, uA);\n const ruB = Vec2.crossVec2Vec2(rB, uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n let mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (mass > 0.0) {\n mass = 1.0 / mass;\n }\n\n const C = this.m_constant - lengthA - this.m_ratio * lengthB;\n const linearError = math_abs(C);\n\n const impulse = -mass * C;\n\n const PA = Vec2.mulNumVec2(-impulse, uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB);\n\n cA.addMul(this.m_invMassA, PA);\n aA += this.m_invIA * Vec2.crossVec2Vec2(rA, PA);\n cB.addMul(this.m_invMassB, PB);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, PB);\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointOpt extends JointOpt {\n /**\n * The maximum length of the rope.\n * Warning: this must be larger than linearSlop or the joint will have no effect.\n */\n maxLength?: number;\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointDef extends JointDef, RopeJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxLength : 0.0,\n};\n\n/**\n * A rope joint enforces a maximum distance between two points on two bodies. It\n * has no other effect.\n *\n * Warning: if you attempt to change the maximum length during the simulation\n * you will get some non-physical behavior.\n *\n * A model that would allow you to dynamically modify the length would have some\n * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you\n * want to dynamically control length.\n */\nexport class RopeJoint extends Joint {\n static TYPE = \"rope-joint\" as const;\n\n /** @internal */ m_type: \"rope-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n /** @internal */ m_maxLength: number;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_length: number;\n /** @internal */ m_state: number; // TODO enum\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n constructor(def: RopeJointDef);\n constructor(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RopeJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RopeJoint)) {\n return new RopeJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = RopeJoint.TYPE;\n this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1.0, 0.0));\n\n this.m_maxLength = def.maxLength;\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_length = 0.0;\n this.m_state = LimitState.inactiveLimit;\n\n // Limit:\n // C = norm(pB - pA) - L\n // u = (pB - pA) / norm(pB - pA)\n // Cdot = dot(u, vB + cross(wB, rB) - vA - cross(wA, rA))\n // J = [-u -cross(rA, u) u cross(rB, u)]\n // K = J * invM * JT\n // = invMassA + invIA * cross(rA, u)^2 + invMassB + invIB * cross(rB, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n maxLength: this.m_maxLength,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): RopeJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RopeJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n if (Number.isFinite(def.maxLength)) {\n this.m_maxLength = def.maxLength;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum length of the rope.\n */\n setMaxLength(length: number): void {\n this.m_maxLength = length;\n }\n\n /**\n * Get the maximum length of the rope.\n */\n getMaxLength(): number {\n return this.m_maxLength;\n }\n\n getLimitState(): number {\n // TODO LimitState\n return this.m_state;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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, cB, 1, this.m_rB);\n this.m_u.subCombine(1, cA, 1, this.m_rA);\n\n this.m_length = this.m_u.length();\n\n const C = this.m_length - this.m_maxLength;\n if (C > 0.0) {\n this.m_state = LimitState.atUpperLimit;\n } else {\n this.m_state = LimitState.inactiveLimit;\n }\n\n if (this.m_length > Settings.linearSlop) {\n this.m_u.mul(1.0 / this.m_length);\n } else {\n this.m_u.setZero();\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n return;\n }\n\n // Compute effective mass.\n const crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n const invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB;\n\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.addCrossNumVec2(vA, wA, this.m_rA);\n const vpB = Vec2.addCrossNumVec2(vB, wB, this.m_rB);\n const C = this.m_length - this.m_maxLength;\n let Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA));\n\n // Predictive constraint.\n if (C < 0.0) {\n Cdot += step.inv_dt * C;\n }\n\n let impulse = -this.m_mass * Cdot;\n const oldImpulse = this.m_impulse;\n this.m_impulse = math_min(0.0, this.m_impulse + impulse);\n impulse = this.m_impulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.zero();\n u.addCombine(1, cB, 1, rB);\n u.subCombine(1, cA, 1, rA);\n\n const length = u.normalize();\n let C = length - this.m_maxLength;\n\n C = clamp(C, 0.0, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return length - this.m_maxLength < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness\n * with a value of 0.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle?: number;\n}\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointDef extends JointDef, WeldJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0,\n};\n\n/**\n * A weld joint essentially glues two bodies together. A weld joint may distort\n * somewhat because the island constraint solver is approximate.\n */\nexport class WeldJoint extends Joint {\n static TYPE = \"weld-joint\" as const;\n\n /** @internal */ m_type: \"weld-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_impulse: Vec3;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat33;\n\n constructor(def: WeldJointDef);\n constructor(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: WeldJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WeldJoint)) {\n return new WeldJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = WeldJoint.TYPE;\n\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\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_impulse = new Vec3();\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rA;\n this.m_rB;\n this.m_localCenterA;\n this.m_localCenterB;\n this.m_invMassA;\n this.m_invMassB;\n this.m_invIA;\n this.m_invIB;\n this.m_mass = new Mat33();\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // / = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // C = angle2 - angle1 - referenceAngle\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WeldJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WeldJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Set frequency in Hz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get frequency in Hz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set damping ratio.\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get damping ratio.\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const 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\n * 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\n * 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\n if (this.m_frequencyHz > 0.0) {\n K.getInverse22(this.m_mass);\n\n let invM = iA + iB;\n const m = invM > 0.0 ? 1.0 / invM : 0.0;\n\n const C = aB - aA - this.m_referenceAngle;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * m * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = m * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invM += this.m_gamma;\n this.m_mass.ez.z = invM != 0.0 ? 1.0 / invM : 0.0;\n } else if (K.ez.z == 0.0) {\n K.getInverse22(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n } else {\n K.getSymInverse33(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n if (this.m_frequencyHz > 0.0) {\n const Cdot2 = wB - wA;\n\n const impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z);\n this.m_impulse.z += impulse2;\n\n wA -= iA * impulse2;\n wB += iB * impulse2;\n\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n\n const impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1));\n this.m_impulse.x += impulse1.x;\n this.m_impulse.y += impulse1.y;\n\n const P = Vec2.clone(impulse1);\n\n vA.subMul(mA, P);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(mB, P);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, P);\n } else {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot));\n this.m_impulse.add(impulse);\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n let positionError: number;\n let angularError: number;\n\n const K = new Mat33();\n K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB;\n K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB;\n K.ez.x = -rA.y * iA - rB.y * iB;\n K.ex.y = K.ey.x;\n K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB;\n K.ez.y = rA.x * iA + rB.x * iB;\n K.ex.z = K.ez.x;\n K.ey.z = K.ez.y;\n K.ez.z = iA + iB;\n\n if (this.m_frequencyHz > 0.0) {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n positionError = C1.length();\n angularError = 0.0;\n\n const P = Vec2.neg(K.solve22(C1));\n\n cA.subMul(mA, P);\n aA -= iA * Vec2.crossVec2Vec2(rA, P);\n\n cB.addMul(mB, P);\n aB += iB * Vec2.crossVec2Vec2(rB, P);\n } else {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n const C2 = aB - aA - this.m_referenceAngle;\n\n positionError = C1.length();\n angularError = math_abs(C2);\n\n const C = new Vec3(C1.x, C1.y, C2);\n\n let impulse = new Vec3();\n if (K.ez.z > 0.0) {\n impulse = Vec3.neg(K.solve33(C));\n } else {\n const impulse2 = Vec2.neg(K.solve22(C1));\n impulse.set(impulse2.x, impulse2.y, 0.0);\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n cA.subMul(mA, P);\n aA -= iA * (Vec2.crossVec2Vec2(rA, P) + impulse.z);\n\n cB.addMul(mB, P);\n aB += iB * (Vec2.crossVec2Vec2(rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointOpt extends JointOpt {\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n /**\n * Suspension frequency, zero indicates no suspension.\n */\n frequencyHz?: number;\n /**\n * Suspension damping ratio, one indicates critical damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointDef extends JointDef, WheelJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation axis in bodyA.\n */\n localAxisA: Vec2Value;\n\n /** @internal renamed to localAxisA */\n localAxis?: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableMotor : false,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n frequencyHz : 2.0,\n dampingRatio : 0.7,\n};\n\n/**\n * A wheel joint. This joint provides two degrees of freedom: translation along\n * an axis fixed in bodyA and rotation in the plane. In other words, it is a\n * point to line constraint with a rotational motor and a linear spring/damper.\n * This joint is designed for vehicle suspensions.\n */\nexport class WheelJoint extends Joint {\n static TYPE = \"wheel-joint\" as const;\n\n /** @internal */ m_type: \"wheel-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_springMass: number;\n /** @internal */ m_springImpulse: number;\n\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableMotor: boolean;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n /** @internal */ m_ax: Vec2;\n /** @internal */ m_ay: Vec2;\n /** @internal */ m_sAx: number;\n /** @internal */ m_sBx: number;\n /** @internal */ m_sAy: number;\n /** @internal */ m_sBy: number;\n\n constructor(def: WheelJointDef);\n constructor(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: WheelJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WheelJoint)) {\n return new WheelJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_ax = Vec2.zero();\n this.m_ay = Vec2.zero();\n\n this.m_type = WheelJoint.TYPE;\n\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\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 // localAxis is renamed to localAxisA, this is for backward compatibility\n this.m_localXAxisA = Vec2.clone(def.localAxis);\n } else {\n this.m_localXAxisA = Vec2.neo(1.0, 0.0);\n }\n\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n this.m_springMass = 0.0;\n this.m_springImpulse = 0.0;\n\n this.m_maxMotorTorque = def.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed;\n this.m_enableMotor = def.enableMotor;\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Linear constraint (point-to-line)\n // d = pB - pA = xB + rB - xA - rA\n // C = dot(ay, d)\n // Cdot = dot(d, cross(wA, ay)) + dot(ay, vB + cross(wB, rB) - vA - cross(wA,\n // rA))\n // = -dot(ay, vA) - dot(cross(d + rA, ay), wA) + dot(ay, vB) + dot(cross(rB,\n // ay), vB)\n // J = [-ay, -cross(d + rA, ay), ay, cross(rB, ay)]\n\n // Spring linear constraint\n // C = dot(ax, d)\n // Cdot = = -dot(ax, vA) - dot(cross(d + rA, ax), wA) + dot(ax, vB) +\n // dot(cross(rB, ax), vB)\n // J = [-ax -cross(d+rA, ax) ax cross(rB, ax)]\n\n // Motor rotational constraint\n // Cdot = wB - wA\n // J = [0 0 -1 0 0 1]\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WheelJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WheelJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, def.localAxisA));\n }\n if (def.enableMotor !== undefined) {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const pA = bA.getWorldPoint(this.m_localAnchorA);\n const pB = bB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = bA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const wA = this.m_bodyA.m_angularVelocity;\n const wB = this.m_bodyB.m_angularVelocity;\n return wB - wA;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed, usually in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set/Get the maximum motor force, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Get the current motor torque given the inverse time step, usually in N-m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set/Get the spring frequency in hertz. Setting the frequency to zero disables\n * the spring.\n */\n setSpringFrequencyHz(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getSpringFrequencyHz(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set/Get the spring damping ratio\n */\n setSpringDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getSpringDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n // Point to line constraint\n {\n this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA);\n this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ay);\n this.m_sBy = Vec2.crossVec2Vec2(rB, this.m_ay);\n\n this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy\n * this.m_sBy;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n }\n\n // Spring constraint\n this.m_springMass = 0.0;\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n if (this.m_frequencyHz > 0.0) {\n this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ax);\n this.m_sBx = Vec2.crossVec2Vec2(rB, this.m_ax);\n\n const invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx\n * this.m_sBx;\n\n if (invMass > 0.0) {\n this.m_springMass = 1.0 / invMass;\n\n const C = Vec2.dot(d, this.m_ax);\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const damp = 2.0 * this.m_springMass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_springMass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (damp + h * k);\n if (this.m_gamma > 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n\n this.m_bias = C * h * k * this.m_gamma;\n\n this.m_springMass = invMass + this.m_gamma;\n if (this.m_springMass > 0.0) {\n this.m_springMass = 1.0 / this.m_springMass;\n }\n }\n } else {\n this.m_springImpulse = 0.0;\n }\n\n // Rotational motor\n if (this.m_enableMotor) {\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n } else {\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse *= step.dtRatio;\n this.m_springImpulse *= step.dtRatio;\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax);\n const LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse;\n const LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse;\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * LA;\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * LB;\n\n } else {\n this.m_impulse = 0.0;\n this.m_springImpulse = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Solve spring constraint\n {\n const Cdot = Vec2.dot(this.m_ax, vB) - Vec2.dot(this.m_ax, vA) + this.m_sBx * wB - this.m_sAx * wA;\n const impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse);\n this.m_springImpulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ax);\n const LA = impulse * this.m_sAx;\n const LB = impulse * this.m_sBx;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n // Solve rotational motor constraint\n {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve point to line constraint\n {\n const Cdot = Vec2.dot(this.m_ay, vB) - Vec2.dot(this.m_ay, vA) + this.m_sBy * wB - this.m_sAy * wA;\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ay);\n const LA = impulse * this.m_sAy;\n const LB = impulse * this.m_sBy;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const ay = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), ay);\n const sBy = Vec2.crossVec2Vec2(rB, ay);\n\n const C = Vec2.dot(d, ay);\n\n const 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\n const impulse = k != 0.0 ? -C / k : 0.0;\n\n const P = Vec2.mulNumVec2(impulse, ay);\n const LA = impulse * sAy;\n const LB = impulse * sBy;\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * LA;\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * LB;\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) <= Settings.linearSlop;\n }\n\n}\n","import { World } from \"../dynamics/World\";\nimport { Body } from \"../dynamics/Body\";\nimport { Joint } from \"../dynamics/Joint\";\nimport { Fixture } from \"../dynamics/Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { Vec2 } from \"../common/Vec2\";\nimport { Vec3 } from \"../common/Vec3\";\nimport { ChainShape } from \"../collision/shape/ChainShape\";\n// import { BoxShape } from \"../collision/shape/BoxShape\";\nimport { EdgeShape } from \"../collision/shape/EdgeShape\";\nimport { PolygonShape } from \"../collision/shape/PolygonShape\";\nimport { CircleShape } from \"../collision/shape/CircleShape\";\nimport { DistanceJoint } from \"../dynamics/joint/DistanceJoint\";\nimport { FrictionJoint } from \"../dynamics/joint/FrictionJoint\";\nimport { GearJoint } from \"../dynamics/joint/GearJoint\";\nimport { MotorJoint } from \"../dynamics/joint/MotorJoint\";\nimport { MouseJoint } from \"../dynamics/joint/MouseJoint\";\nimport { PrismaticJoint } from \"../dynamics/joint/PrismaticJoint\";\nimport { PulleyJoint } from \"../dynamics/joint/PulleyJoint\";\nimport { RevoluteJoint } from \"../dynamics/joint/RevoluteJoint\";\nimport { RopeJoint } from \"../dynamics/joint/RopeJoint\";\nimport { WeldJoint } from \"../dynamics/joint/WeldJoint\";\nimport { WheelJoint } from \"../dynamics/joint/WheelJoint\";\n\nlet SID = 0;\n\n// Classes to be serialized as reference objects\nconst SERIALIZE_REF_TYPES = {\n \"World\": World,\n \"Body\": Body,\n \"Joint\": Joint,\n \"Fixture\": Fixture,\n \"Shape\": Shape,\n};\n\n// For deserializing reference objects by reference type\nconst 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};\n\n// For deserializing data objects by type field\nconst DESERIALIZE_BY_TYPE_FIELD = {\n [Body.STATIC]: Body,\n [Body.DYNAMIC]: Body,\n [Body.KINEMATIC]: Body,\n [ChainShape.TYPE]: ChainShape,\n // [BoxShape.TYPE]: BoxShape,\n [PolygonShape.TYPE]: PolygonShape,\n [EdgeShape.TYPE]: EdgeShape,\n [CircleShape.TYPE]: CircleShape,\n [DistanceJoint.TYPE]: DistanceJoint,\n [FrictionJoint.TYPE]: FrictionJoint,\n [GearJoint.TYPE]: GearJoint,\n [MotorJoint.TYPE]: MotorJoint,\n [MouseJoint.TYPE]: MouseJoint,\n [PrismaticJoint.TYPE]: PrismaticJoint,\n [PulleyJoint.TYPE]: PulleyJoint,\n [RevoluteJoint.TYPE]: RevoluteJoint,\n [RopeJoint.TYPE]: RopeJoint,\n [WeldJoint.TYPE]: WeldJoint,\n [WheelJoint.TYPE]: WheelJoint,\n};\n\n// dummy types\ntype DataType = any;\ntype ObjectType = any;\ntype ClassName = any;\n\ntype SerializedType = object[];\n\ntype RefType = {\n refIndex: number,\n refType: string,\n};\n\ntype SerializerOptions = {\n rootClass: ClassName,\n preSerialize?: (obj: ObjectType) => DataType,\n postSerialize?: (data: DataType, obj: any) => DataType,\n preDeserialize?: (data: DataType) => DataType,\n postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType,\n};\n\nconst DEFAULT_OPTIONS: SerializerOptions = {\n rootClass: World,\n preSerialize: function(obj) { return obj; },\n postSerialize: function(data, obj) { return data; },\n preDeserialize: function(data: DataType) { return data; },\n postDeserialize: function(obj, data) { return obj; },\n};\n\ntype DeserializeChildCallback = (classHint: any, obj: any, context: any) => any;\ntype ClassDeserializerMethod = (data: any, context: any, deserialize: DeserializeChildCallback) => any;\n\nexport class Serializer {\n private options: SerializerOptions;\n constructor(options: SerializerOptions) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n toJson = (root: T): SerializedType => {\n const preSerialize = this.options.preSerialize;\n const postSerialize = this.options.postSerialize;\n const json = [];\n\n // Breadth-first ref serialization queue\n const refQueue = [root];\n\n const refMemoById: Record = {};\n\n function addToRefQueue(value: any, typeName: string) {\n value.__sid = value.__sid || ++SID;\n if (!refMemoById[value.__sid]) {\n refQueue.push(value);\n const index = json.length + refQueue.length;\n const ref = {\n refIndex: index,\n refType: typeName\n };\n refMemoById[value.__sid] = ref;\n }\n return refMemoById[value.__sid];\n }\n\n function serializeWithHooks(obj: ObjectType) {\n obj = preSerialize(obj);\n let data = obj._serialize();\n data = postSerialize(data, obj);\n return data;\n }\n\n // traverse the object graph\n // ref objects are pushed into the queue\n // other objects are serialize in-place \n function traverse(value: any, noRefType = false) {\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n // object with _serialize function\n if (typeof value._serialize === \"function\") {\n if (!noRefType) {\n for (const typeName in SERIALIZE_REF_TYPES) {\n if (value instanceof SERIALIZE_REF_TYPES[typeName]) {\n return addToRefQueue(value, typeName);\n }\n }\n }\n // object with _serialize function\n value = serializeWithHooks(value);\n }\n // recursive for arrays any objects\n if (Array.isArray(value)) {\n const newValue = [];\n for (let key = 0; key < value.length; key++) {\n newValue[key] = traverse(value[key]);\n }\n value = newValue;\n\n } else {\n const newValue = {};\n for (const 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\n while (refQueue.length) {\n const obj = refQueue.shift();\n const str = traverse(obj, true);\n json.push(str);\n }\n\n return json;\n };\n\n fromJson = (json: SerializedType): T => {\n const preDeserialize = this.options.preDeserialize;\n const postDeserialize = this.options.postDeserialize;\n const rootClass = this.options.rootClass;\n\n const deserializedRefMemoByIndex: Record = {};\n\n function deserializeWithHooks(classHint: ClassName, data: DataType, context: any): ObjectType {\n if (!classHint || !classHint._deserialize) {\n classHint = DESERIALIZE_BY_TYPE_FIELD[data.type];\n }\n const deserializer = classHint && classHint._deserialize;\n if (!deserializer) {\n return;\n }\n data = preDeserialize(data);\n const classDeserializeFn = classHint._deserialize as ClassDeserializerMethod;\n let obj = classDeserializeFn(data, context, deserializeChild);\n obj = postDeserialize(obj, data);\n return obj;\n }\n\n /**\n * Recursive callback function to deserialize a child data object or reference object.\n * \n * @param classHint suggested class to deserialize obj to\n * @param dataOrRef data or reference object\n * @param context for example world when deserializing bodies and joints\n */\n function deserializeChild(classHint: ClassName, dataOrRef: DataType | RefType, context: any) {\n const isRefObject = dataOrRef.refIndex && dataOrRef.refType;\n if (!isRefObject) {\n return deserializeWithHooks(classHint, dataOrRef, context); \n }\n const ref = dataOrRef as RefType;\n if (DESERIALIZE_BY_REF_TYPE[ref.refType]) {\n classHint = DESERIALIZE_BY_REF_TYPE[ref.refType];\n }\n const refIndex = ref.refIndex;\n if (!deserializedRefMemoByIndex[refIndex]) {\n const data = json[refIndex];\n const obj = deserializeWithHooks(classHint, data, context);\n deserializedRefMemoByIndex[refIndex] = obj;\n }\n return deserializedRefMemoByIndex[refIndex];\n }\n\n const root = deserializeWithHooks(rootClass, json[0], null);\n\n return root;\n };\n\n static toJson: (root: World) => SerializedType;\n static fromJson: (json: SerializedType) => World;\n}\n\nconst worldSerializer = new Serializer({\n rootClass: World,\n});\n\nSerializer.fromJson = worldSerializer.fromJson;\nSerializer.toJson = worldSerializer.toJson;\n","import type { AABBValue } from \"../collision/AABB\";\nimport type { World } from \"../dynamics/World\";\nimport type { Joint } from \"../dynamics/Joint\";\nimport type { Fixture } from \"../dynamics/Fixture\";\nimport type { Body } from \"../dynamics/Body\";\n\nexport interface Style {\n stroke?: string;\n fill?: string;\n lineWidth?: number;\n}\n\ntype KEY = \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" |\n \"8\" | \"9\" | \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\" |\n \"H\" | \"I\" | \"J\" | \"K\" | \"L\" | \"M\" | \"N\" | \"O\" | \"P\" |\n \"Q\" | \"R\" | \"S\" | \"T\" | \"U\" | \"V\" | \"W\" | \"X\" | \"Y\" |\n \"Z\" | \"right\" | \"left\" | \"up\" | \"down\" | \"fire\";\n\nexport type ActiveKeys = { [key in KEY]?: boolean };\n\ntype TestbedMountOptions = {};\n\nexport abstract class Testbed {\n /**\n * Mounts testbed. Call start with a world to start simulation and rendering.\n */\n static mount(options?: TestbedMountOptions): Testbed {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Mounts testbed if needed, then starts simulation and rendering.\n * \n * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`.\n */\n static start(world: World): Testbed {\n const testbed = Testbed.mount();\n testbed.start(world);\n return testbed;\n }\n\n /** World viewbox width. */\n width: number = 80;\n\n /** World viewbox height. */\n height: number = 60;\n\n /** World viewbox center vertical offset. */\n x: number = 0;\n\n /** World viewbox center horizontal offset. */\n y: number = -10;\n\n /** @hidden */\n scaleY: number = -1;\n\n /** World simulation step frequency */\n hz: number = 60;\n\n /** World simulation speed, default is 1 */\n speed: number = 1;\n\n background: string = \"#222222\";\n\n mouseForce?: number;\n activeKeys: ActiveKeys = {};\n\n /** callback, to be implemented by user */\n step = (dt: number, t: number): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keydown = (keyCode: number, label: string): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keyup = (keyCode: number, label: string): void => {\n return;\n };\n\n abstract status(name: string, value: any): void;\n abstract status(value: object | string): void;\n\n abstract info(text: string): void;\n\n color(r: number, g: number, b: number): string {\n r = r * 256 | 0;\n g = g * 256 | 0;\n b = b * 256 | 0;\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n }\n\n abstract drawPoint(p: {x: number, y: number}, r: any, color: string): void;\n abstract drawCircle(p: {x: number, y: number}, r: number, color: string): void;\n abstract drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawSegment(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawPolygon(points: Array<{x: number, y: number}>, color: string): void;\n abstract drawAABB(aabb: AABBValue, color: string): void;\n\n abstract start(world: World): void;\n\n abstract findOne(query: string): (Body | Joint | Fixture | null);\n abstract findAll(query: string): (Body | Joint | Fixture)[];\n}\n\ntype TestbedFactoryOptions = string | {};\n\n/** @deprecated */\ntype TestbedCallback = (testbed: Testbed) => (World | undefined);\n\n/** @deprecated */\nexport function testbed(callback: TestbedCallback): void;\n/** @deprecated */\nexport function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void;\n/** @internal */\nexport function testbed(a?: any, b?: any) {\n let callback: TestbedCallback | undefined;\n let options;\n if (typeof a === \"function\") {\n callback = a;\n options = b;\n } else if (typeof b === \"function\") {\n callback = b;\n options = a;\n } else {\n options = a ?? b;\n }\n const testbed = Testbed.mount(options);\n if (callback) {\n // this is for backwards compatibility\n const world = callback(testbed) || (testbed as any).world;\n testbed.start(world);\n } else {\n return testbed;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2Value } from \"../../common/Vec2\";\nimport { PolygonShape } from \"./PolygonShape\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * A rectangle polygon which extend PolygonShape.\n */\nexport class BoxShape extends PolygonShape {\n // note that box is serialized/deserialized as polygon\n static TYPE = \"polygon\" as const;\n\n /**\n * \n * @param halfWidth \n * @param halfHeight \n * @param center coordinate of the center of the box relative to the body\n * @param angle angle of the box relative to the body\n */\n constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof BoxShape)) {\n return new BoxShape(halfWidth, halfHeight, center, angle);\n }\n\n super();\n\n this._setAsBox(halfWidth, halfHeight, center, angle);\n }\n}\n\nexport const Box = BoxShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\nimport * as matrix from \"../../common/Matrix\";\nimport { Transform } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact);\n\n/** @internal */ function CircleCircleContact(manifold: Manifold, xfA: Transform, fixtureA: Fixture, indexA: number, xfB: Transform, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == CircleShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollideCircles(manifold, fixtureA.getShape() as CircleShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const pA = matrix.vec2(0, 0);\n/** @internal */ const pB = matrix.vec2(0, 0);\n\nexport const CollideCircles = function (manifold: Manifold, circleA: CircleShape, xfA: Transform, circleB: CircleShape, xfB: Transform): void {\n manifold.pointCount = 0;\n\n matrix.transformVec2(pA, xfA, circleA.m_p);\n matrix.transformVec2(pB, xfB, circleB.m_p);\n\n const distSqr = matrix.distSqrVec2(pB, pA);\n const rA = circleA.m_radius;\n const rB = circleB.m_radius;\n const radius = rA + rB;\n if (distSqr > radius * radius) {\n return;\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.copyVec2(manifold.localPoint, circleA.m_p);\n matrix.zeroVec2(manifold.localNormal);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact);\nContact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact);\n\n/** @internal */ function EdgeCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const shapeA = fixtureA.getShape() as EdgeShape;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\nfunction ChainCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const chain = fixtureA.getShape() as ChainShape;\n const edge = new EdgeShape();\n chain.getChildEdge(edge, indexA);\n\n const shapeA = edge;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const Q = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n// Compute contact points for edge versus circle.\n// This accounts for edge connectivity.\nexport const CollideEdgeCircle = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle in frame of edge\n matrix.retransformVec2(Q, xfB, xfA, circleB.m_p);\n\n const A = edgeA.m_vertex1;\n const B = edgeA.m_vertex2;\n matrix.subVec2(e, B, A);\n\n // Barycentric coordinates\n const u = matrix.dotVec2(e, B) - matrix.dotVec2(e, Q);\n const v = matrix.dotVec2(e, Q) - matrix.dotVec2(e, A);\n\n const radius = edgeA.m_radius + circleB.m_radius;\n\n // Region A\n if (v <= 0.0) {\n matrix.copyVec2(P, A);\n const dd = matrix.distSqrVec2(Q, A);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to A?\n if (edgeA.m_hasVertex0) {\n const A1 = edgeA.m_vertex0;\n const B1 = A;\n matrix.subVec2(e1, B1, A1);\n const u1 = matrix.dotVec2(e1, B1) - matrix.dotVec2(e1, Q);\n\n // Is the circle in Region AB of the previous edge?\n if (u1 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Region B\n if (u <= 0.0) {\n matrix.copyVec2(P, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to B?\n if (edgeA.m_hasVertex3) {\n const B2 = edgeA.m_vertex3;\n const A2 = B;\n matrix.subVec2(e2, B2, A2);\n const v2 = matrix.dotVec2(e2, Q) - matrix.dotVec2(e2, A2);\n\n // Is the circle in Region AB of the next edge?\n if (v2 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n\n return;\n }\n\n // Region AB\n const den = matrix.lengthSqrVec2(e);\n _ASSERT && console.assert(den > 0.0);\n matrix.combine2Vec2(P, u / den, A, v / den, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n matrix.crossNumVec2(n, 1, e);\n if (matrix.dotVec2(n, Q) - matrix.dotVec2(n, A) < 0.0) {\n matrix.negVec2(n);\n }\n matrix.normalizeVec2(n);\n\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, n);\n matrix.copyVec2(manifold.localPoint, A);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const incidentEdge = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipSegmentToLineNormal = matrix.vec2(0, 0);\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const v11 = matrix.vec2(0, 0);\n/** @internal */ const v12 = matrix.vec2(0, 0);\n/** @internal */ const localTangent = matrix.vec2(0, 0);\n/** @internal */ const localNormal = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n\n\nContact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact);\n\n/** @internal */ function PolygonContact(\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number,\n): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == PolygonShape.TYPE);\n CollidePolygons(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ interface MaxSeparation {\n maxSeparation: number;\n bestIndex: number;\n}\n\n/**\n * Find the max separation between poly1 and poly2 using edge normals from\n * poly1.\n */\n/** @internal */ function findMaxSeparation(\n poly1: PolygonShape,\n xf1: TransformValue,\n poly2: PolygonShape,\n xf2: TransformValue,\n output: MaxSeparation,\n): void {\n const count1 = poly1.m_count;\n const count2 = poly2.m_count;\n const n1s = poly1.m_normals;\n const v1s = poly1.m_vertices;\n const v2s = poly2.m_vertices;\n\n matrix.detransformTransform(xf, xf2, xf1);\n\n let bestIndex = 0;\n let maxSeparation = -Infinity;\n for (let i = 0; i < count1; ++i) {\n // Get poly1 normal in frame2.\n matrix.rotVec2(n, xf.q, n1s[i]);\n matrix.transformVec2(v1, xf, v1s[i]);\n\n // Find deepest point for normal i.\n let si = Infinity;\n for (let j = 0; j < count2; ++j) {\n const sij = matrix.dotVec2(n, v2s[j]) - matrix.dotVec2(n, v1);\n if (sij < si) {\n si = sij;\n }\n }\n\n if (si > maxSeparation) {\n maxSeparation = si;\n bestIndex = i;\n }\n }\n\n // used to keep last FindMaxSeparation call values\n output.maxSeparation = maxSeparation;\n output.bestIndex = bestIndex;\n}\n\n/** @internal */ function findIncidentEdge(\n clipVertex: ClipVertex[],\n poly1: PolygonShape,\n xf1: TransformValue,\n edge1: number,\n poly2: PolygonShape,\n xf2: TransformValue,\n): void {\n const normals1 = poly1.m_normals;\n\n const count2 = poly2.m_count;\n const vertices2 = poly2.m_vertices;\n const normals2 = poly2.m_normals;\n\n _ASSERT && console.assert(0 <= edge1 && edge1 < poly1.m_count);\n\n // Get the normal of the reference edge in poly2's frame.\n matrix.rerotVec2(normal1, xf2.q, xf1.q, normals1[edge1]);\n\n // Find the incident edge on poly2.\n let index = 0;\n let minDot = Infinity;\n for (let i = 0; i < count2; ++i) {\n const dot = matrix.dotVec2(normal1, normals2[i]);\n if (dot < minDot) {\n minDot = dot;\n index = i;\n }\n }\n\n // Build the clip vertices for the incident edge.\n const i1 = index;\n const i2 = i1 + 1 < count2 ? i1 + 1 : 0;\n\n matrix.transformVec2(clipVertex[0].v, xf2, vertices2[i1]);\n clipVertex[0].id.setFeatures(edge1, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.transformVec2(clipVertex[1].v, xf2, vertices2[i2]);\n clipVertex[1].id.setFeatures(edge1, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n}\n\n/** @internal */ const maxSeparation = {\n maxSeparation: 0,\n bestIndex: 0,\n};\n\n/**\n *\n * Find edge normal of max separation on A - return if separating axis is found
\n * Find edge normal of max separation on B - return if separation axis is found
\n * Choose reference edge as min(minA, minB)
\n * Find incident edge
\n * Clip\n *\n * The normal points from 1 to 2\n */\nexport const CollidePolygons = function (\n manifold: Manifold,\n polyA: PolygonShape,\n xfA: TransformValue,\n polyB: PolygonShape,\n xfB: TransformValue,\n): void {\n manifold.pointCount = 0;\n const totalRadius = polyA.m_radius + polyB.m_radius;\n\n findMaxSeparation(polyA, xfA, polyB, xfB, maxSeparation);\n const edgeA = maxSeparation.bestIndex;\n const separationA = maxSeparation.maxSeparation;\n if (separationA > totalRadius)\n return;\n\n findMaxSeparation(polyB, xfB, polyA, xfA, maxSeparation);\n const edgeB = maxSeparation.bestIndex;\n const separationB = maxSeparation.maxSeparation;\n if (separationB > totalRadius)\n return;\n\n let poly1: PolygonShape; // reference polygon\n let poly2: PolygonShape; // incident polygon\n let xf1: TransformValue;\n let xf2: TransformValue;\n let edge1: number; // reference edge\n let flip: boolean;\n const k_tol = 0.1 * Settings.linearSlop;\n\n if (separationB > separationA + k_tol) {\n poly1 = polyB;\n poly2 = polyA;\n xf1 = xfB;\n xf2 = xfA;\n edge1 = edgeB;\n manifold.type = ManifoldType.e_faceB;\n flip = true;\n } else {\n poly1 = polyA;\n poly2 = polyB;\n xf1 = xfA;\n xf2 = xfB;\n edge1 = edgeA;\n manifold.type = ManifoldType.e_faceA;\n flip = false;\n }\n\n incidentEdge[0].recycle(), incidentEdge[1].recycle();\n findIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2);\n\n const count1 = poly1.m_count;\n const vertices1 = poly1.m_vertices;\n\n const iv1 = edge1;\n const iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0;\n\n matrix.copyVec2(v11, vertices1[iv1]);\n matrix.copyVec2(v12, vertices1[iv2]);\n\n matrix.subVec2(localTangent, v12, v11);\n matrix.normalizeVec2(localTangent);\n\n matrix.crossVec2Num(localNormal, localTangent, 1.0);\n matrix.combine2Vec2(planePoint, 0.5, v11, 0.5, v12);\n\n matrix.rotVec2(tangent, xf1.q, localTangent);\n matrix.crossVec2Num(normal, tangent, 1.0);\n\n matrix.transformVec2(v11, xf1, v11);\n matrix.transformVec2(v12, xf1, v12);\n\n // Face offset.\n const frontOffset = matrix.dotVec2(normal, v11);\n\n // Side offsets, extended by polytope skin thickness.\n const sideOffset1 = -matrix.dotVec2(tangent, v11) + totalRadius;\n const sideOffset2 = matrix.dotVec2(tangent, v12) + totalRadius;\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n matrix.setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y);\n const np1 = clipSegmentToLine(clipPoints1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1);\n\n if (np1 < 2) {\n return;\n }\n\n // Clip to negative box side 1\n matrix.setVec2(clipSegmentToLineNormal, tangent.x, tangent.y);\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, clipSegmentToLineNormal, sideOffset2, iv2);\n\n if (np2 < 2) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n matrix.copyVec2(manifold.localNormal, localNormal);\n matrix.copyVec2(manifold.localPoint, planePoint);\n\n let pointCount = 0;\n for (let i = 0; i < clipPoints2.length/* maxManifoldPoints */; ++i) {\n const separation = matrix.dotVec2(normal, clipPoints2[i].v) - frontOffset;\n\n if (separation <= totalRadius) {\n const cp = manifold.points[pointCount];\n matrix.detransformVec2(cp.localPoint, xf2, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n if (flip) {\n // Swap features\n cp.id.swapFeatures();\n }\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact);\n\n/** @internal */ function PolygonCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollidePolygonCircle(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const cLocal = matrix.vec2(0, 0);\n/** @internal */ const faceCenter = matrix.vec2(0, 0);\n\nexport const CollidePolygonCircle = function (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle position in the frame of the polygon.\n matrix.retransformVec2(cLocal, xfB, xfA, circleB.m_p);\n\n // Find the min separating edge.\n let normalIndex = 0;\n let separation = -Infinity;\n const radius = polygonA.m_radius + circleB.m_radius;\n const vertexCount = polygonA.m_count;\n const vertices = polygonA.m_vertices;\n const normals = polygonA.m_normals;\n\n for (let i = 0; i < vertexCount; ++i) {\n const s = matrix.dotVec2(normals[i], cLocal) - matrix.dotVec2(normals[i], vertices[i]);\n\n if (s > radius) {\n // Early out.\n return;\n }\n\n if (s > separation) {\n separation = s;\n normalIndex = i;\n }\n }\n\n // Vertices that subtend the incident face.\n const vertIndex1 = normalIndex;\n const vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0;\n const v1 = vertices[vertIndex1];\n const v2 = vertices[vertIndex2];\n\n // If the center is inside the polygon ...\n if (separation < EPSILON) {\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[normalIndex]);\n matrix.combine2Vec2(manifold.localPoint, 0.5, v1, 0.5, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Compute barycentric coordinates\n // u1 = (cLocal - v1) dot (v2 - v1))\n const u1 = matrix.dotVec2(cLocal, v2) - matrix.dotVec2(cLocal, v1) - matrix.dotVec2(v1, v2) + matrix.dotVec2(v1, v1);\n // u2 = (cLocal - v2) dot (v1 - v2)\n const u2 = matrix.dotVec2(cLocal, v1) - matrix.dotVec2(cLocal, v2) - matrix.dotVec2(v2, v1) + matrix.dotVec2(v2, v2);\n if (u1 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v1) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v1);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v1);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else if (u2 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v2) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v2);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else {\n matrix.combine2Vec2(faceCenter, 0.5, v1, 0.5, v2);\n const separation = matrix.dotVec2(cLocal, normals[vertIndex1]) - matrix.dotVec2(faceCenter, normals[vertIndex1]);\n if (separation > radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[vertIndex1]);\n matrix.copyVec2(manifold.localPoint, faceCenter);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n }\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_min = Math.min;\n\nContact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact);\nContact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact);\n\n/** @internal */ function EdgePolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n CollideEdgePolygon(manifold, fA.getShape() as EdgeShape, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n// reused\n/** @internal */ const edge_reuse = new EdgeShape();\n\n/** @internal */ function ChainPolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n const chain = fA.getShape() as ChainShape;\n chain.getChildEdge(edge_reuse, indexA);\n\n CollideEdgePolygon(manifold, edge_reuse, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ enum EPAxisType {\n e_unknown = -1,\n e_edgeA = 1,\n e_edgeB = 2,\n}\n\n// unused?\n/** @internal */ enum VertexType {\n e_isolated = 0,\n e_concave = 1,\n e_convex = 2,\n}\n\n/**\n * This structure is used to keep track of the best separating axis.\n */\n/** @internal */ class EPAxis {\n type: EPAxisType;\n index: number;\n separation: number;\n}\n\n/**\n * This holds polygon B expressed in frame A.\n */\n/** @internal */ class TempPolygon {\n vertices: Vec2Value[] = []; // [Settings.maxPolygonVertices]\n normals: Vec2Value[] = []; // [Settings.maxPolygonVertices];\n count: number = 0;\n constructor() {\n for (let i = 0; i < Settings.maxPolygonVertices; i++) {\n this.vertices.push(matrix.vec2(0, 0));\n this.normals.push(matrix.vec2(0, 0));\n }\n }\n}\n\n/**\n * Reference face used for clipping\n */\n/** @internal */ class ReferenceFace {\n i1: number;\n i2: number;\n readonly v1 = matrix.vec2(0 ,0);\n readonly v2 = matrix.vec2(0 ,0);\n readonly normal = matrix.vec2(0 ,0);\n readonly sideNormal1 = matrix.vec2(0 ,0);\n sideOffset1: number;\n readonly sideNormal2 = matrix.vec2(0 ,0);\n sideOffset2: number;\n recycle() {\n matrix.zeroVec2(this.v1);\n matrix.zeroVec2(this.v2);\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.sideNormal1);\n matrix.zeroVec2(this.sideNormal2);\n }\n}\n\n// reused\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const ie = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const edgeAxis = new EPAxis();\n/** @internal */ const polygonAxis = new EPAxis();\n/** @internal */ const polygonBA = new TempPolygon();\n/** @internal */ const rf = new ReferenceFace();\n/** @internal */ const centroidB = matrix.vec2(0, 0);\n/** @internal */ const edge0 = matrix.vec2(0, 0);\n/** @internal */ const edge1 = matrix.vec2(0, 0);\n/** @internal */ const edge2 = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal0 = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n/** @internal */ const normal2 = matrix.vec2(0, 0);\n/** @internal */ const lowerLimit = matrix.vec2(0, 0);\n/** @internal */ const upperLimit = matrix.vec2(0, 0);\n/** @internal */ const perp = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n/**\n * This function collides and edge and a polygon, taking into account edge\n * adjacency.\n */\nexport const CollideEdgePolygon = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue): void {\n // Algorithm:\n // 1. Classify v1 and v2\n // 2. Classify polygon centroid as front or back\n // 3. Flip normal if necessary\n // 4. Initialize normal range to [-pi, pi] about face normal\n // 5. Adjust normal range according to adjacent edges\n // 6. Visit each separating axes, only accept axes within the range\n // 7. Return if _any_ axis indicates separation\n // 8. Clip\n\n // let m_type1: VertexType;\n // let m_type2: VertexType;\n\n matrix.detransformTransform(xf, xfA, xfB);\n matrix.transformVec2(centroidB, xf, polygonB.m_centroid);\n\n const v0 = edgeA.m_vertex0;\n const v1 = edgeA.m_vertex1;\n const v2 = edgeA.m_vertex2;\n const v3 = edgeA.m_vertex3;\n\n const hasVertex0 = edgeA.m_hasVertex0;\n const hasVertex3 = edgeA.m_hasVertex3;\n\n matrix.subVec2(edge1, v2, v1);\n matrix.normalizeVec2(edge1);\n matrix.setVec2(normal1, edge1.y, -edge1.x);\n const offset1 = matrix.dotVec2(normal1, centroidB) - matrix.dotVec2(normal1, v1);\n let offset0 = 0.0;\n let offset2 = 0.0;\n let convex1 = false;\n let convex2 = false;\n\n matrix.zeroVec2(normal0);\n matrix.zeroVec2(normal2);\n\n // Is there a preceding edge?\n if (hasVertex0) {\n matrix.subVec2(edge0, v1, v0);\n matrix.normalizeVec2(edge0);\n matrix.setVec2(normal0, edge0.y, -edge0.x);\n convex1 = matrix.crossVec2Vec2(edge0, edge1) >= 0.0;\n offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0);\n }\n\n // Is there a following edge?\n if (hasVertex3) {\n matrix.subVec2(edge2, v3, v2);\n matrix.normalizeVec2(edge2);\n matrix.setVec2(normal2, edge2.y, -edge2.x);\n convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0.0;\n offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v2);\n }\n\n let front: boolean;\n matrix.zeroVec2(normal);\n matrix.zeroVec2(lowerLimit);\n matrix.zeroVec2(upperLimit);\n\n // Determine front or back collision. Determine collision normal limits.\n if (hasVertex0 && hasVertex3) {\n if (convex1 && convex2) {\n front = offset0 >= 0.0 || offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex1) {\n front = offset0 >= 0.0 || (offset1 >= 0.0 && offset2 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex2) {\n front = offset2 >= 0.0 || (offset0 >= 0.0 && offset1 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex0) {\n if (convex1) {\n front = offset0 >= 0.0 || offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex3) {\n if (convex2) {\n front = offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n } else {\n front = offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n } else {\n front = offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n\n // Get polygonB in frameA\n polygonBA.count = polygonB.m_count;\n for (let i = 0; i < polygonB.m_count; ++i) {\n matrix.transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]);\n matrix.rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]);\n }\n\n const radius = polygonB.m_radius + edgeA.m_radius;\n\n manifold.pointCount = 0;\n\n { // ComputeEdgeSeparation\n edgeAxis.type = EPAxisType.e_edgeA;\n edgeAxis.index = front ? 0 : 1;\n edgeAxis.separation = Infinity;\n\n for (let i = 0; i < polygonBA.count; ++i) {\n const v = polygonBA.vertices[i];\n const s = matrix.dotVec2(normal, v) - matrix.dotVec2(normal, v1);\n if (s < edgeAxis.separation) {\n edgeAxis.separation = s;\n }\n }\n }\n\n // If no valid normal can be found than this edge should not collide.\n // @ts-ignore todo: why we need this if here?\n if (edgeAxis.type == EPAxisType.e_unknown) {\n return;\n }\n\n if (edgeAxis.separation > radius) {\n return;\n }\n\n { // ComputePolygonSeparation\n polygonAxis.type = EPAxisType.e_unknown;\n polygonAxis.index = -1;\n polygonAxis.separation = -Infinity;\n\n matrix.setVec2(perp, -normal.y, normal.x);\n\n for (let i = 0; i < polygonBA.count; ++i) {\n matrix.scaleVec2(n, -1, polygonBA.normals[i]);\n\n const s1 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v1);\n const s2 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v2);\n const s = math_min(s1, s2);\n\n if (s > radius) {\n // No collision\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n break;\n }\n\n // Adjacency\n if (matrix.dotVec2(n, perp) >= 0.0) {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(upperLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n } else {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(lowerLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n }\n\n if (s > polygonAxis.separation) {\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n }\n }\n }\n\n if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) {\n return;\n }\n\n // Use hysteresis for jitter reduction.\n const k_relativeTol = 0.98;\n const k_absoluteTol = 0.001;\n\n let primaryAxis: EPAxis;\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\n ie[0].recycle(), ie[1].recycle();\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n manifold.type = ManifoldType.e_faceA;\n\n // Search for the polygon normal that is most anti-parallel to the edge\n // normal.\n let bestIndex = 0;\n let bestValue = matrix.dotVec2(normal, polygonBA.normals[0]);\n for (let i = 1; i < polygonBA.count; ++i) {\n const value = matrix.dotVec2(normal, polygonBA.normals[i]);\n if (value < bestValue) {\n bestValue = value;\n bestIndex = i;\n }\n }\n\n const i1 = bestIndex;\n const i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0;\n\n matrix.copyVec2(ie[0].v, polygonBA.vertices[i1]);\n ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.copyVec2(ie[1].v, polygonBA.vertices[i2]);\n ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n\n if (front) {\n rf.i1 = 0;\n rf.i2 = 1;\n matrix.copyVec2(rf.v1, v1);\n matrix.copyVec2(rf.v2, v2);\n matrix.copyVec2(rf.normal, normal1);\n } else {\n rf.i1 = 1;\n rf.i2 = 0;\n matrix.copyVec2(rf.v1, v2);\n matrix.copyVec2(rf.v2, v1);\n matrix.scaleVec2(rf.normal, -1, normal1);\n }\n } else {\n manifold.type = ManifoldType.e_faceB;\n\n matrix.copyVec2(ie[0].v, v1);\n ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n matrix.copyVec2(ie[1].v, v2);\n ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n rf.i1 = primaryAxis.index;\n rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0;\n matrix.copyVec2(rf.v1, polygonBA.vertices[rf.i1]);\n matrix.copyVec2(rf.v2, polygonBA.vertices[rf.i2]);\n matrix.copyVec2(rf.normal, polygonBA.normals[rf.i1]);\n }\n\n matrix.setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x);\n matrix.setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y);\n rf.sideOffset1 = matrix.dotVec2(rf.sideNormal1, rf.v1);\n rf.sideOffset2 = matrix.dotVec2(rf.sideNormal2, rf.v2);\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n const np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1);\n\n if (np1 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Clip to negative box side 1\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2);\n\n if (np2 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.copyVec2(manifold.localNormal, rf.normal);\n matrix.copyVec2(manifold.localPoint, rf.v1);\n } else {\n matrix.copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]);\n matrix.copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]);\n }\n\n let pointCount = 0;\n for (let i = 0; i < Settings.maxManifoldPoints; ++i) {\n const separation = matrix.dotVec2(rf.normal, clipPoints2[i].v) - matrix.dotVec2(rf.normal, rf.v1);\n\n if (separation <= radius) {\n const cp = manifold.points[pointCount]; // ManifoldPoint\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.detransformVec2(cp.localPoint, xf, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n } else {\n matrix.copyVec2(cp.localPoint, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n cp.id.swapFeatures();\n }\n\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","import { CollidePolygons } from \"./collision/shape/CollidePolygon\";\nimport { Settings } from \"./Settings\";\nimport { Sweep } from \"./common/Sweep\";\nimport { DynamicTree } from \"./collision/DynamicTree\";\nimport { Manifold } from \"./collision/Manifold\";\nimport { Distance } from \"./collision/Distance\";\nimport { TimeOfImpact } from \"./collision/TimeOfImpact\";\nimport { stats } from \"./util/stats\";\n\n/** @hidden @deprecated Merged with main namespace */\nexport const internal = {\n CollidePolygons,\n Settings,\n Sweep,\n Manifold,\n Distance,\n TimeOfImpact,\n DynamicTree,\n stats\n};\n"],"names":["math_abs","math_sqrt","math_max","math_min","math_PI","Settings","math_sin","math_cos","math_atan2","temp","matrix.vec2","matrix.zeroVec2","matrix.transformVec2","matrix.copyVec2","matrix.setRotAngle","matrix.combine2Vec2","matrix.minusVec2","matrix.rotVec2","matrix.subVec2","xf","matrix.transform","matrix.plusScaleVec2","matrix.scaleVec2","matrix.dotVec2","matrix.crossNumVec2","matrix.plusVec2","normal","matrix.lengthSqrVec2","matrix.derotVec2","matrix.distVec2","matrix.normalizeVec2","matrix.minusScaleVec2","matrix.setVec2","matrix.crossVec2Vec2","matrix.combine3Vec2","input","cache","output","matrix.copyTransform","TOIOutputState","xfA","xfB","pointA","pointB","matrix.normalizeVec2Length","matrix.crossVec2Num","matrix.negVec2","matrix.mulVec2","cA","cB","planePoint","clipPoint","ManifoldType","ContactFeatureType","PointState","tangent","P","DEFAULTS","v1","v2","e","e1","e2","matrix.detransformVec2","matrix.addVec2","matrix.distSqrVec2","LimitState","n","matrix.retransformVec2","clipPoints1","clipPoints2","normal1","matrix.detransformTransform","matrix.rerotVec2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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A,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5G,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAC,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAC,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AAE3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAC,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC;AAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAC,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IAPD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,cAAc,CAAA,CAAA,CAAA;AACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;IACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA;IACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;IACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,C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A,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;IACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;IACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA;IACZ,CAAC,CAAA,CAJWA,0BAAkB,CAAlBA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA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AC;;KAErB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAC;KACxD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAC;KACxD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAC,CAAC;KACxD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,IAAI,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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"} \ No newline at end of file +{"version":3,"file":"planck.js","sources":["../node_modules/tslib/tslib.es6.js","../src/util/options.ts","../src/common/Math.ts","../src/common/Vec2.ts","../src/collision/AABB.ts","../src/Settings.ts","../src/util/Pool.ts","../src/collision/DynamicTree.ts","../src/collision/BroadPhase.ts","../src/common/Matrix.ts","../src/common/Rot.ts","../src/common/Sweep.ts","../src/common/Transform.ts","../src/dynamics/Velocity.ts","../src/dynamics/Position.ts","../src/collision/Shape.ts","../src/dynamics/Fixture.ts","../src/dynamics/Body.ts","../src/dynamics/Joint.ts","../src/util/stats.ts","../src/util/Timer.ts","../src/collision/Distance.ts","../src/collision/TimeOfImpact.ts","../src/dynamics/Solver.ts","../src/common/Mat22.ts","../src/collision/Manifold.ts","../src/dynamics/Contact.ts","../src/dynamics/World.ts","../src/common/Vec3.ts","../src/collision/shape/EdgeShape.ts","../src/collision/shape/ChainShape.ts","../src/collision/shape/PolygonShape.ts","../src/collision/shape/CircleShape.ts","../src/dynamics/joint/DistanceJoint.ts","../src/dynamics/joint/FrictionJoint.ts","../src/common/Mat33.ts","../src/dynamics/joint/RevoluteJoint.ts","../src/dynamics/joint/PrismaticJoint.ts","../src/dynamics/joint/GearJoint.ts","../src/dynamics/joint/MotorJoint.ts","../src/dynamics/joint/MouseJoint.ts","../src/dynamics/joint/PulleyJoint.ts","../src/dynamics/joint/RopeJoint.ts","../src/dynamics/joint/WeldJoint.ts","../src/dynamics/joint/WheelJoint.ts","../src/serializer/index.ts","../src/util/Testbed.ts","../src/collision/shape/BoxShape.ts","../src/collision/shape/CollideCircle.ts","../src/collision/shape/CollideEdgeCircle.ts","../src/collision/shape/CollidePolygon.ts","../src/collision/shape/CollideCirclePolygon.ts","../src/collision/shape/CollideEdgePolygon.ts","../src/internal.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/** @internal */\nexport const options = function(input: T, defaults: object): T {\n if (input === null || typeof input === \"undefined\") {\n // tslint:disable-next-line:no-object-literal-type-assertion\n input = {} as T;\n }\n\n const output = {...input};\n\n // tslint:disable-next-line:no-for-in\n for (const key in defaults) {\n if (defaults.hasOwnProperty(key) && typeof input[key] === \"undefined\") {\n output[key] = defaults[key];\n }\n }\n\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n const symbols = Object.getOwnPropertySymbols(defaults);\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n if (defaults.propertyIsEnumerable(symbol) && typeof input[symbol] === \"undefined\") {\n output[symbol] = defaults[symbol];\n }\n }\n }\n\n return output;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_random = Math.random;\n\n\nexport const EPSILON = 1e-9;\n\n/** @internal @deprecated */\nexport const isFinite = Number.isFinite;\n\n/**\n * @deprecated\n * Next Largest Power of 2 Given a binary integer value x, the next largest\n * power of 2 can be computed by a SWAR algorithm that recursively \"folds\" the\n * upper bits into the lower bits. This process yields a bit vector with the\n * same most significant 1 as x, but all 1's below it. Adding 1 to that value\n * yields the next largest power of 2. For a 32-bit value:\n */\nexport function nextPowerOfTwo(x: number): number {\n x |= (x >> 1);\n x |= (x >> 2);\n x |= (x >> 4);\n x |= (x >> 8);\n x |= (x >> 16);\n return x + 1;\n}\n\n/** @deprecated */\nexport function isPowerOfTwo(x: number): boolean {\n return x > 0 && (x & (x - 1)) === 0;\n}\n\n/** @deprecated */\nexport function mod(num: number, min?: number, max?: number): number {\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}\n\n/**\n * @deprecated\n * Returns a min if num is less than min, and max if more than max, otherwise returns num.\n */\nexport function clamp(num: number, min: number, max: number): number {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n } else {\n return num;\n }\n}\n\n/**\n * @deprecated\n * Returns a random number between min and max when two arguments are provided.\n * If one arg is provided between 0 to max.\n * If one arg is passed between 0 to 1.\n */\nexport function random(min?: number, max?: number): number {\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}\n\n/** @ignore */\nexport const 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;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"./Math\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/** 2D vector */\nexport interface Vec2Value {\n x: number;\n y: number;\n}\n\ndeclare module \"./Vec2\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec2(x: number, y: number): Vec2;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec2(obj: Vec2Value): Vec2;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec2(): Vec2;\n}\n\n/** 2D vector */\n// @ts-expect-error\nexport class Vec2 {\n x: number;\n y: number;\n\n constructor(x: number, y: number);\n constructor(obj: Vec2Value);\n constructor();\n // tslint:disable-next-line:typedef\n constructor(x?, y?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec2)) {\n return new Vec2(x, y);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n } else {\n this.x = x;\n this.y = y;\n }\n _ASSERT && Vec2.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = data.x;\n obj.y = data.y;\n return obj;\n }\n\n static zero(): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = 0;\n obj.y = 0;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = x;\n obj.y = y;\n return obj;\n }\n\n static clone(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(v.x, v.y);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /**\n * Does this vector contain finite coordinates?\n */\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.x) && Number.isFinite(obj.y);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec2.isValid(o), \"Invalid Vec2!\", o);\n }\n\n clone(): Vec2 {\n return Vec2.clone(this);\n }\n\n /**\n * Set this vector to all zeros.\n *\n * @returns this\n */\n setZero(): Vec2 {\n this.x = 0.0;\n this.y = 0.0;\n return this;\n }\n\n set(x: number, y: number): Vec2;\n set(value: Vec2Value): Vec2;\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n // tslint:disable-next-line:typedef\n set(x, y?) {\n if (typeof x === \"object\") {\n _ASSERT && Vec2.assert(x);\n this.x = x.x;\n this.y = x.y;\n } else {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n }\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setNum(x: number, y: number) {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setVec2(value: Vec2Value) {\n _ASSERT && Vec2.assert(value);\n this.x = value.x;\n this.y = value.y;\n\n return this;\n }\n\n /** @internal @deprecated Use setCombine or setMul */\n wSet(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.setCombine(a, v, b, w);\n } else {\n return this.setMul(a, v);\n }\n }\n\n /**\n * Set linear combination of v and w: `a * v + b * w`\n */\n setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x = x;\n this.y = y;\n return this;\n }\n\n setMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * Add a vector to this vector.\n *\n * @returns this\n */\n add(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x += w.x;\n this.y += w.y;\n return this;\n }\n\n /** @internal @deprecated Use addCombine or addMul */\n wAdd(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.addCombine(a, v, b, w);\n } else {\n return this.addMul(a, v);\n }\n }\n\n /**\n * Add linear combination of v and w: `a * v + b * w`\n */\n addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x += x;\n this.y += y;\n return this;\n }\n\n addMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x += x;\n this.y += y;\n return this;\n }\n\n /**\n * @deprecated Use subCombine or subMul\n */\n wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.subCombine(a, v, b, w);\n } else {\n return this.subMul(a, v);\n }}\n\n /**\n * Subtract linear combination of v and w: `a * v + b * w`\n */\n subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n subMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n /**\n * Subtract a vector from this vector\n *\n * @returns this\n */\n sub(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x -= w.x;\n this.y -= w.y;\n return this;\n }\n\n /**\n * Multiply this vector by a scalar.\n *\n * @returns this\n */\n mul(m: number): Vec2 {\n _ASSERT && console.assert(Number.isFinite(m));\n this.x *= m;\n this.y *= m;\n return this;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n length(): number {\n return Vec2.lengthOf(this);\n }\n\n /**\n * Get the length squared.\n */\n lengthSquared(): number {\n return Vec2.lengthSquared(this);\n }\n\n /**\n * Convert this vector into a unit vector.\n *\n * @returns old length\n */\n normalize(): number {\n const length = this.length();\n if (length < EPSILON) {\n return 0.0;\n }\n const invLength = 1.0 / length;\n this.x *= invLength;\n this.y *= invLength;\n return length;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n static lengthOf(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return math_sqrt(v.x * v.x + v.y * v.y);\n }\n\n /**\n * Get the length squared.\n */\n static lengthSquared(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return v.x * v.x + v.y * v.y;\n }\n\n static distance(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return math_sqrt(dx * dx + dy * dy);\n }\n\n static distanceSquared(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return dx * dx + dy * dy;\n }\n\n static areEqual(v: Vec2Value, w: Vec2Value): boolean {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v === w || typeof w === \"object\" && w !== null && v.x === w.x && v.y === w.y;\n }\n\n /**\n * Get the skew vector such that dot(skew_vec, other) == cross(vec, other)\n */\n static skew(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.y, v.x);\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.x + v.y * w.y;\n }\n\n /** Cross product between two vectors */\n static cross(v: Vec2Value, w: Vec2Value): number;\n /** Cross product between a vector and a scalar */\n static cross(v: Vec2Value, w: number): Vec2;\n /** Cross product between a scalar and a vector */\n static cross(v: number, w: Vec2Value): Vec2;\n static cross(v: any, w: any): any {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n\n } else {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n }\n\n /** Cross product on two vectors */\n static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n\n /** Cross product on a vector and a scalar */\n static crossVec2Num(v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n }\n\n /** Cross product on a vector and a scalar */\n static crossNumVec2(v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n }\n\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2;\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2;\n static addCross(a: Vec2Value, v: any, w: any): Vec2 {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n static add(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x + w.x, v.y + w.y);\n }\n\n /** @hidden @deprecated */\n static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return Vec2.combine(a, v, b, w);\n } else {\n return Vec2.mulNumVec2(a, v);\n }\n }\n\n static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n return Vec2.zero().setCombine(a, v, b, w);\n }\n\n static sub(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x - w.x, v.y - w.y);\n }\n\n static mul(a: Vec2Value, b: number): Vec2;\n static mul(a: number, b: Vec2Value): Vec2;\n static mul(a: any, b: any): Vec2 {\n if (typeof a === \"object\") {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n\n } else if (typeof b === \"object\") {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n }\n\n static mulVec2Num(a: Vec2Value, b: number): Vec2 {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n }\n\n static mulNumVec2(a: number, b: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n\n neg(): Vec2 {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n\n static neg(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.x, -v.y);\n }\n\n static abs(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(math_abs(v.x), math_abs(v.y));\n }\n\n static mid(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo((v.x + w.x) * 0.5, (v.y + w.y) * 0.5);\n }\n\n static upper(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_max(v.x, w.x), math_max(v.y, w.y));\n }\n\n static lower(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_min(v.x, w.x), math_min(v.y, w.y));\n }\n\n clamp(max: number): Vec2 {\n const lengthSqr = this.x * this.x + this.y * this.y;\n if (lengthSqr > max * max) {\n const scale = max / math_sqrt(lengthSqr);\n this.x *= scale;\n this.y *= scale;\n }\n return this;\n }\n\n static clamp(v: Vec2Value, max: number): Vec2 {\n const r = Vec2.neo(v.x, v.y);\n r.clamp(max);\n return r;\n }\n\n /** @hidden @deprecated */\n static scaleFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x * x, v.y * y);\n };\n }\n\n /** @hidden @deprecated */\n static translateFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x + x, v.y + y);\n };\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/**\n * Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n */\nexport interface RayCastInput {\n p1: Vec2Value;\n p2: Vec2Value;\n maxFraction: number;\n}\n\nexport type RayCastCallback = (subInput: RayCastInput, id: number) => number;\n\n/**\n * Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`,\n * where `p1` and `p2` come from RayCastInput.\n */\nexport interface RayCastOutput {\n normal: Vec2;\n fraction: number;\n}\n\n/** Axis-aligned bounding box */\nexport interface AABBValue {\n lowerBound: Vec2Value;\n upperBound: Vec2Value;\n}\n\ndeclare module \"./AABB\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function AABB(lower?: Vec2Value, upper?: Vec2Value): AABB;\n}\n\n/** Axis-aligned bounding box */\n// @ts-expect-error\nexport class AABB {\n lowerBound: Vec2;\n upperBound: Vec2;\n\n constructor(lower?: Vec2Value, upper?: Vec2Value) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof AABB)) {\n return new AABB(lower, upper);\n }\n\n this.lowerBound = Vec2.zero();\n this.upperBound = Vec2.zero();\n\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\n /**\n * Verify that the bounds are sorted.\n */\n isValid(): boolean {\n return AABB.isValid(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!AABB.isValid(o), \"Invalid AABB!\", o);\n }\n\n /**\n * Get the center of the AABB.\n */\n getCenter(): Vec2 {\n return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5);\n }\n\n /**\n * Get the extents of the AABB (half-widths).\n */\n getExtents(): Vec2 {\n return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5);\n }\n\n /**\n * Get the perimeter length.\n */\n getPerimeter(): number {\n return 2.0 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y);\n }\n\n /**\n * Combine one or two AABB into this one.\n */\n combine(a: AABBValue, b?: AABBValue): void {\n b = b || this;\n\n const lowerA = a.lowerBound;\n const upperA = a.upperBound;\n const lowerB = b.lowerBound;\n const upperB = b.upperBound;\n\n const lowerX = math_min(lowerA.x, lowerB.x);\n const lowerY = math_min(lowerA.y, lowerB.y);\n const upperX = math_max(upperB.x, upperA.x);\n const upperY = math_max(upperB.y, upperA.y);\n\n this.lowerBound.setNum(lowerX, lowerY);\n this.upperBound.setNum(upperX, upperY);\n }\n\n combinePoints(a: Vec2Value, b: Vec2Value): void {\n this.lowerBound.setNum(math_min(a.x, b.x), math_min(a.y, b.y));\n this.upperBound.setNum(math_max(a.x, b.x), math_max(a.y, b.y));\n }\n\n set(aabb: AABBValue): void {\n this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y);\n this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y);\n }\n\n contains(aabb: AABBValue): boolean {\n let 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\n extend(value: number): AABB {\n AABB.extend(this, value);\n return this;\n }\n\n static extend(out: AABBValue, value: number): AABBValue {\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\n static testOverlap(a: AABBValue, b: AABBValue): boolean {\n const d1x = b.lowerBound.x - a.upperBound.x;\n const d2x = a.lowerBound.x - b.upperBound.x;\n\n const d1y = b.lowerBound.y - a.upperBound.y;\n const d2y = a.lowerBound.y - b.upperBound.y;\n\n if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) {\n return false;\n }\n return true;\n }\n\n static areEqual(a: AABBValue, b: AABBValue): boolean {\n return Vec2.areEqual(a.lowerBound, b.lowerBound) && Vec2.areEqual(a.upperBound, b.upperBound);\n }\n\n static diff(a: AABBValue, b: AABBValue): number {\n const wD = math_max(0, math_min(a.upperBound.x, b.upperBound.x) - math_max(b.lowerBound.x, a.lowerBound.x));\n const hD = math_max(0, math_min(a.upperBound.y, b.upperBound.y) - math_max(b.lowerBound.y, a.lowerBound.y));\n\n const wA = a.upperBound.x - a.lowerBound.x;\n const hA = a.upperBound.y - a.lowerBound.y;\n\n const wB = b.upperBound.x - b.lowerBound.x;\n const hB = b.upperBound.y - b.lowerBound.y;\n\n return wA * hA + wB * hB - wD * hD;\n }\n\n rayCast(output: RayCastOutput, input: RayCastInput): boolean {\n // From Real-time Collision Detection, p179.\n\n let tmin = -Infinity;\n let tmax = Infinity;\n\n const p = input.p1;\n const d = Vec2.sub(input.p2, input.p1);\n const absD = Vec2.abs(d);\n\n const normal = Vec2.zero();\n\n for (let f: \"x\" | \"y\" = \"x\"; f !== null; f = (f === \"x\" ? \"y\" : null)) {\n if (absD.x < EPSILON) {\n // Parallel.\n if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) {\n return false;\n }\n } else {\n const inv_d = 1.0 / d[f];\n let t1 = (this.lowerBound[f] - p[f]) * inv_d;\n let t2 = (this.upperBound[f] - p[f]) * inv_d;\n\n // Sign of the normal vector.\n let s = -1.0;\n\n if (t1 > t2) {\n const temp = t1;\n t1 = t2;\n t2 = temp;\n s = 1.0;\n }\n\n // Push the min up\n if (t1 > tmin) {\n normal.setZero();\n normal[f] = s;\n tmin = t1;\n }\n\n // Pull the max down\n tmax = math_min(tmax, t2);\n\n if (tmin > tmax) {\n return false;\n }\n }\n }\n\n // Does the ray start inside the box?\n // Does the ray intersect beyond the max fraction?\n if (tmin < 0.0 || input.maxFraction < tmin) {\n return false;\n }\n\n // Intersection.\n output.fraction = tmin;\n output.normal = normal;\n return true;\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue {\n out.lowerBound.x = math_min(a.x, b.x);\n out.lowerBound.y = math_min(a.y, b.y);\n out.upperBound.x = math_max(a.x, b.x);\n out.upperBound.y = math_max(a.y, b.y);\n return out;\n }\n\n static combinedPerimeter(a: AABBValue, b: AABBValue) {\n const lx = math_min(a.lowerBound.x, b.lowerBound.x);\n const ly = math_min(a.lowerBound.y, b.lowerBound.y);\n const ux = math_max(a.upperBound.x, b.upperBound.x);\n const uy = math_max(a.upperBound.y, b.upperBound.y);\n return 2.0 * (ux - lx + uy - ly); \n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Tuning constants based on meters-kilograms-seconds (MKS) units.\n * \n * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units.\n */\nexport class Settings {\n /**\n * You can use this to change the length scale used by your game.\n * \n * For example for inches you could use 39.4.\n */\n static lengthUnitsPerMeter = 1.0;\n \n // Collision\n /**\n * The maximum number of contact points between two convex shapes. Do not change\n * this value.\n */\n static maxManifoldPoints: number = 2;\n\n /**\n * The maximum number of vertices on a convex polygon. You cannot increase this\n * too much because BlockAllocator has a maximum object size.\n */\n static maxPolygonVertices: number = 12;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This allows proxies to move\n * by a small amount without triggering a tree adjustment. This is in meters.\n */\n static aabbExtension: number = 0.1;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This is used to predict the\n * future position based on the current displacement. This is a dimensionless\n * multiplier.\n */\n static aabbMultiplier: number = 2.0;\n\n /**\n * A small length used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static linearSlop: number = 0.005;\n\n /**\n * A small angle used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static angularSlop: number = (2.0 / 180.0 * math_PI);\n\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 static get polygonRadius(): number { return 2.0 * Settings.linearSlop; }\n\n /**\n * Maximum number of sub-steps per contact in continuous physics simulation.\n */\n static maxSubSteps: number = 8;\n\n // Dynamics\n\n /**\n * Maximum number of contacts to be handled to solve a TOI impact.\n */\n static maxTOIContacts: number = 32;\n\n /**\n * Maximum iterations to solve a TOI.\n */\n static maxTOIIterations: number = 20;\n\n /**\n * Maximum iterations to find Distance.\n */\n static maxDistanceIterations: number = 20;\n\n /**\n * A velocity threshold for elastic collisions. Any collision with a relative\n * linear velocity below this threshold will be treated as inelastic.\n */\n static velocityThreshold: number = 1.0;\n\n /**\n * The maximum linear position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxLinearCorrection: number = 0.2;\n\n /**\n * The maximum angular position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxAngularCorrection: number = (8.0 / 180.0 * math_PI);\n\n /**\n * The maximum linear velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxTranslation: number = 2.0;\n\n /**\n * The maximum angular velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxRotation: number = (0.5 * math_PI);\n\n /**\n * This scale factor controls how fast overlap is resolved. Ideally this would\n * be 1 so that overlap is removed in one time step. However using values close\n * to 1 often lead to overshoot.\n */\n static baumgarte: number = 0.2;\n static toiBaugarte: number = 0.75;\n\n // Sleep\n\n /**\n * The time that a body must be still before it will go to sleep.\n */\n static timeToSleep: number = 0.5;\n\n /**\n * A body cannot sleep if its linear velocity is above this tolerance.\n */\n static linearSleepTolerance: number = 0.01;\n\n /**\n * A body cannot sleep if its angular velocity is above this tolerance.\n */\n static angularSleepTolerance: number = (2.0 / 180.0 * math_PI);\n}\n\n/** @internal */\nexport class SettingsInternal {\n static get maxManifoldPoints() {\n return Settings.maxManifoldPoints;\n }\n static get maxPolygonVertices() {\n return Settings.maxPolygonVertices;\n }\n static get aabbExtension() {\n return Settings.aabbExtension * Settings.lengthUnitsPerMeter;\n }\n static get aabbMultiplier() {\n return Settings.aabbMultiplier;\n }\n static get linearSlop() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get linearSlopSquared() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get angularSlop() {\n return Settings.angularSlop;\n }\n static get polygonRadius() {\n return 2.0 * Settings.linearSlop;\n }\n static get maxSubSteps() {\n return Settings.maxSubSteps;\n }\n static get maxTOIContacts() {\n return Settings.maxTOIContacts;\n }\n static get maxTOIIterations() {\n return Settings.maxTOIIterations;\n }\n static get maxDistanceIterations() {\n return Settings.maxDistanceIterations;\n }\n static get velocityThreshold() {\n return Settings.velocityThreshold * Settings.lengthUnitsPerMeter;\n }\n static get maxLinearCorrection() {\n return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter;\n }\n static get maxAngularCorrection() {\n return Settings.maxAngularCorrection;\n }\n static get maxTranslation() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxTranslationSquared() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxRotation() {\n return Settings.maxRotation;\n }\n static get maxRotationSquared() {\n return Settings.maxRotation * Settings.maxRotation;\n }\n static get baumgarte() {\n return Settings.baumgarte;\n }\n static get toiBaugarte() {\n return Settings.toiBaugarte;\n }\n static get timeToSleep() {\n return Settings.timeToSleep;\n }\n static get linearSleepTolerance() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get linearSleepToleranceSqr() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get angularSleepTolerance() {\n return Settings.angularSleepTolerance;\n }\n static get angularSleepToleranceSqr() {\n return Settings.angularSleepTolerance * Settings.angularSleepTolerance;\n }\n}\n","/*\n * Copyright (c) 2016-2018 Ali Shakiba http://shakiba.me/planck.js\n *\n * This software is provided 'as-is', without any express or implied\n * warranty. In no event will the authors be held liable for any damages\n * arising from the use of this software.\n * Permission is granted to anyone to use this software for any purpose,\n * including commercial applications, and to alter it and redistribute it\n * freely, subject to the following restrictions:\n * 1. The origin of this software must not be misrepresented; you must not\n * claim that you wrote the original software. If you use this software\n * in a product, an acknowledgment in the product documentation would be\n * appreciated but is not required.\n * 2. Altered source versions must be plainly marked as such, and must not be\n * misrepresented as being the original software.\n * 3. This notice may not be removed or altered from any source distribution.\n */\n\n/** @internal */\nexport interface PoolOptions {\n max?: number,\n create?: () => T,\n /** Called when an object is being re-allocated. */\n allocate?: (item: T) => void,\n /** Called when an object is returned to pool. */\n release?: (item: T) => void,\n /** Called when an object is returned to the pool but will be disposed from pool. */\n dispose?: (item: T) => T,\n}\n\n/** @internal */\nexport class Pool {\n _list: T[] = [];\n _max: number = Infinity;\n\n _createFn: () => T;\n _hasCreateFn: boolean = false;\n _createCount: number = 0;\n\n _allocateFn: (item: T) => void;\n _hasAllocateFn: boolean = false;\n _allocateCount: number = 0;\n\n _releaseFn: (item: T) => void;\n _hasReleaseFn: boolean = false;\n _releaseCount: number = 0;\n\n _disposeFn: (item: T) => T;\n _hasDisposeFn: boolean = false;\n _disposeCount: number = 0;\n\n constructor(opts: PoolOptions) {\n this._list = [];\n this._max = opts.max || this._max;\n\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\n max(n?: number): number | Pool {\n if (typeof n === \"number\") {\n this._max = n;\n return this;\n }\n return this._max;\n }\n\n size(): number {\n return this._list.length;\n }\n\n allocate(): T {\n let item: T;\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 // tslint:disable-next-line:no-object-literal-type-assertion\n item = {} as T;\n }\n }\n this._allocateCount++;\n if (this._hasAllocateFn) {\n this._allocateFn(item);\n }\n return item;\n }\n\n release(item: T): void {\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\n toString(): string {\n return \" +\" + this._createCount + \" >\" + this._allocateCount + \" <\" + this._releaseCount + \" -\"\n + this._disposeCount + \" =\" + this._list.length + \"/\" + this._max;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Pool } from \"../util/Pool\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\nexport type DynamicTreeQueryCallback = (nodeId: number) => boolean;\n\n/**\n * A node in the dynamic tree. The client does not interact with this directly.\n */\nexport class TreeNode {\n id: number;\n /** Enlarged AABB */\n aabb: AABB = new AABB();\n userData: T = null;\n parent: TreeNode = null;\n child1: TreeNode = null;\n child2: TreeNode = null;\n /** 0: leaf, -1: free node */\n height: number = -1;\n\n constructor(id?: number) {\n this.id = id;\n }\n\n /** @internal */\n toString(): string {\n return this.id + \": \" + this.userData;\n }\n\n isLeaf(): boolean {\n return this.child1 == null;\n }\n}\n\n/** @internal */ const poolTreeNode = new Pool>({\n create(): TreeNode {\n return new TreeNode();\n },\n release(node: TreeNode) {\n node.userData = null;\n node.parent = null;\n node.child1 = null;\n node.child2 = null;\n node.height = -1;\n node.id = undefined;\n }\n});\n\n/**\n * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A\n * dynamic tree arranges data in a binary tree to accelerate queries such as\n * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we\n * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger\n * than the client object. This allows the client object to move by small\n * amounts without triggering a tree update.\n *\n * Nodes are pooled and relocatable, so we use node indices rather than\n * pointers.\n */\nexport class DynamicTree {\n m_root: TreeNode;\n m_lastProxyId: number;\n m_nodes: {\n [id: number]: TreeNode\n };\n\n constructor() {\n this.m_root = null;\n this.m_nodes = {};\n this.m_lastProxyId = 0;\n }\n\n /**\n * Get proxy user data.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getUserData(id: number): T {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.userData;\n }\n\n /**\n * Get the fat AABB for a node id.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getFatAABB(id: number): AABB {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.aabb;\n }\n\n allocateNode(): TreeNode {\n const node = poolTreeNode.allocate();\n node.id = ++this.m_lastProxyId;\n this.m_nodes[node.id] = node;\n return node;\n }\n\n freeNode(node: TreeNode): void {\n // tslint:disable-next-line:no-dynamic-delete\n delete this.m_nodes[node.id];\n poolTreeNode.release(node);\n }\n\n /**\n * Create a proxy in the tree as a leaf node. We return the index of the node\n * instead of a pointer so that we can grow the node pool.\n *\n * Create a proxy. Provide a tight fitting AABB and a userData pointer.\n */\n createProxy(aabb: AABBValue, userData: T): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n\n const node = this.allocateNode();\n\n node.aabb.set(aabb);\n\n // Fatten the aabb.\n AABB.extend(node.aabb, Settings.aabbExtension);\n\n node.userData = userData;\n node.height = 0;\n\n this.insertLeaf(node);\n\n return node.id;\n }\n\n /**\n * Destroy a proxy. This asserts if the id is invalid.\n */\n destroyProxy(id: number): void {\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n this.removeLeaf(node);\n this.freeNode(node);\n }\n\n /**\n * Move a proxy with a swepted AABB. If the proxy has moved outside of its\n * fattened AABB, then the proxy is removed from the tree and re-inserted.\n * Otherwise the function returns immediately.\n *\n * @param d Displacement\n *\n * @return true if the proxy was re-inserted.\n */\n moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean {\n _ASSERT && console.assert(AABB.isValid(aabb));\n _ASSERT && console.assert(!d || Vec2.isValid(d));\n\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n if (node.aabb.contains(aabb)) {\n return false;\n }\n\n this.removeLeaf(node);\n\n node.aabb.set(aabb);\n\n // Extend AABB.\n aabb = node.aabb;\n AABB.extend(aabb, Settings.aabbExtension);\n\n // Predict AABB displacement.\n // const d = Vec2.mul(Settings.aabbMultiplier, displacement);\n\n if (d.x < 0.0) {\n aabb.lowerBound.x += d.x * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.x += d.x * Settings.aabbMultiplier;\n }\n\n if (d.y < 0.0) {\n aabb.lowerBound.y += d.y * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.y += d.y * Settings.aabbMultiplier;\n }\n\n this.insertLeaf(node);\n\n return true;\n }\n\n insertLeaf(leaf: TreeNode): void {\n _ASSERT && console.assert(AABB.isValid(leaf.aabb));\n\n if (this.m_root == null) {\n this.m_root = leaf;\n this.m_root.parent = null;\n return;\n }\n\n // Find the best sibling for this node\n const leafAABB = leaf.aabb;\n let index = this.m_root;\n while (!index.isLeaf()) {\n const child1 = index.child1;\n const child2 = index.child2;\n\n const area = index.aabb.getPerimeter();\n\n const combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB);\n\n // Cost of creating a new parent for this node and the new leaf\n const cost = 2.0 * combinedArea;\n\n // Minimum cost of pushing the leaf further down the tree\n const inheritanceCost = 2.0 * (combinedArea - area);\n\n // Cost of descending into child1\n const newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb);\n let cost1 = newArea1 + inheritanceCost;\n if (!child1.isLeaf()) {\n const oldArea = child1.aabb.getPerimeter();\n cost1 -= oldArea;\n }\n\n // Cost of descending into child2\n const newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb);\n let cost2 = newArea2 + inheritanceCost;\n if (!child2.isLeaf()) {\n const oldArea = child2.aabb.getPerimeter();\n cost2 -= oldArea;\n }\n\n // Descend according to the minimum cost.\n if (cost < cost1 && cost < cost2) {\n break;\n }\n\n // Descend\n if (cost1 < cost2) {\n index = child1;\n } else {\n index = child2;\n }\n }\n\n const sibling = index;\n\n // Create a new parent.\n const oldParent = sibling.parent;\n const 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\n if (oldParent != null) {\n // The sibling was not the root.\n if (oldParent.child1 === sibling) {\n oldParent.child1 = newParent;\n } else {\n oldParent.child2 = newParent;\n }\n\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n } else {\n // The sibling was the root.\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n this.m_root = newParent;\n }\n\n // Walk back up the tree fixing heights and AABBs\n index = leaf.parent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n _ASSERT && console.assert(child1 != null);\n _ASSERT && console.assert(child2 != null);\n\n index.height = 1 + math_max(child1.height, child2.height);\n index.aabb.combine(child1.aabb, child2.aabb);\n\n index = index.parent;\n }\n\n // validate();\n }\n\n removeLeaf(leaf: TreeNode): void {\n if (leaf === this.m_root) {\n this.m_root = null;\n return;\n }\n\n const parent = leaf.parent;\n const grandParent = parent.parent;\n let sibling;\n if (parent.child1 === leaf) {\n sibling = parent.child2;\n } else {\n sibling = parent.child1;\n }\n\n if (grandParent != null) {\n // Destroy parent and connect sibling to grandParent.\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\n // Adjust ancestor bounds.\n let index = grandParent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n index.aabb.combine(child1.aabb, child2.aabb);\n index.height = 1 + math_max(child1.height, child2.height);\n\n index = index.parent;\n }\n } else {\n this.m_root = sibling;\n sibling.parent = null;\n this.freeNode(parent);\n }\n\n // validate();\n }\n\n /**\n * Perform a left or right rotation if node A is imbalanced. Returns the new\n * root index.\n */\n balance(iA: TreeNode): TreeNode {\n _ASSERT && console.assert(iA != null);\n\n const A = iA;\n if (A.isLeaf() || A.height < 2) {\n return iA;\n }\n\n const B = A.child1;\n const C = A.child2;\n\n const balance = C.height - B.height;\n\n // Rotate C up\n if (balance > 1) {\n const F = C.child1;\n const G = C.child2;\n\n // Swap A and C\n C.child1 = A;\n C.parent = A.parent;\n A.parent = C;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(B.height, G.height);\n C.height = 1 + math_max(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\n A.height = 1 + math_max(B.height, F.height);\n C.height = 1 + math_max(A.height, G.height);\n }\n\n return C;\n }\n\n // Rotate B up\n if (balance < -1) {\n const D = B.child1;\n const E = B.child2;\n\n // Swap A and B\n B.child1 = A;\n B.parent = A.parent;\n A.parent = B;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(C.height, E.height);\n B.height = 1 + math_max(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\n A.height = 1 + math_max(C.height, D.height);\n B.height = 1 + math_max(A.height, E.height);\n }\n\n return B;\n }\n\n return A;\n }\n\n /**\n * Compute the height of the binary tree in O(N) time. Should not be called\n * often.\n */\n getHeight(): number {\n if (this.m_root == null) {\n return 0;\n }\n\n return this.m_root.height;\n }\n\n /**\n * Get the ratio of the sum of the node areas to the root area.\n */\n getAreaRatio(): number {\n if (this.m_root == null) {\n return 0.0;\n }\n\n const root = this.m_root;\n const rootArea = root.aabb.getPerimeter();\n\n let totalArea = 0.0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // Free node in pool\n continue;\n }\n\n totalArea += node.aabb.getPerimeter();\n }\n\n this.iteratorPool.release(it);\n\n return totalArea / rootArea;\n }\n\n /**\n * Compute the height of a sub-tree.\n */\n computeHeight(id?: number): number {\n let node;\n if (typeof id !== \"undefined\") {\n node = this.m_nodes[id];\n } else {\n node = this.m_root;\n }\n\n // _ASSERT && console.assert(0 <= id && id < this.m_nodeCapacity);\n\n if (node.isLeaf()) {\n return 0;\n }\n\n const height1 = this.computeHeight(node.child1.id);\n const height2 = this.computeHeight(node.child2.id);\n return 1 + math_max(height1, height2);\n }\n\n validateStructure(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n if (node === this.m_root) {\n _ASSERT && console.assert(node.parent == null);\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n _ASSERT && console.assert(child1.parent === node);\n _ASSERT && console.assert(child2.parent === node);\n\n this.validateStructure(child1);\n this.validateStructure(child2);\n }\n\n validateMetrics(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n const height1 = child1.height;\n const height2 = child2.height;\n const height = 1 + math_max(height1, height2);\n _ASSERT && console.assert(node.height === height);\n\n const aabb = new AABB();\n aabb.combine(child1.aabb, child2.aabb);\n\n _ASSERT && console.assert(AABB.areEqual(aabb, node.aabb));\n\n this.validateMetrics(child1);\n this.validateMetrics(child2);\n }\n\n /**\n * Validate this tree. For testing.\n */\n validate(): void {\n if (!_ASSERT) return;\n this.validateStructure(this.m_root);\n this.validateMetrics(this.m_root);\n\n console.assert(this.getHeight() === this.computeHeight());\n }\n\n /**\n * Get the maximum balance of an node in the tree. The balance is the difference\n * in height of the two children of a node.\n */\n getMaxBalance(): number {\n let maxBalance = 0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height <= 1) {\n continue;\n }\n\n _ASSERT && console.assert(!node.isLeaf());\n\n const balance = math_abs(node.child2.height - node.child1.height);\n maxBalance = math_max(maxBalance, balance);\n }\n this.iteratorPool.release(it);\n\n return maxBalance;\n }\n\n /**\n * Build an optimal tree. Very expensive. For testing.\n */\n rebuildBottomUp(): void {\n const nodes = [];\n let count = 0;\n\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // free node in pool\n continue;\n }\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\n while (count > 1) {\n let minCost = Infinity;\n let iMin = -1;\n let jMin = -1;\n for (let i = 0; i < count; ++i) {\n const aabbi = nodes[i].aabb;\n for (let j = i + 1; j < count; ++j) {\n const aabbj = nodes[j].aabb;\n const cost = AABB.combinedPerimeter(aabbi, aabbj);\n if (cost < minCost) {\n iMin = i;\n jMin = j;\n minCost = cost;\n }\n }\n }\n\n const child1 = nodes[iMin];\n const child2 = nodes[jMin];\n\n const parent = this.allocateNode();\n parent.child1 = child1;\n parent.child2 = child2;\n parent.height = 1 + math_max(child1.height, child2.height);\n parent.aabb.combine(child1.aabb, child2.aabb);\n parent.parent = null;\n\n child1.parent = parent;\n child2.parent = parent;\n\n nodes[jMin] = nodes[count - 1];\n nodes[iMin] = parent;\n --count;\n }\n\n this.m_root = nodes[0];\n\n _ASSERT && this.validate();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n const 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\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void {\n _ASSERT && console.assert(typeof queryCallback === \"function\");\n const stack = this.stackPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, aabb)) {\n if (node.isLeaf()) {\n const 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\n this.stackPool.release(stack);\n }\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n // TODO: GC\n _ASSERT && console.assert(typeof rayCastCallback === \"function\");\n const p1 = input.p1;\n const p2 = input.p2;\n const r = Vec2.sub(p2, p1);\n _ASSERT && console.assert(r.lengthSquared() > 0.0);\n r.normalize();\n\n // v is perpendicular to the segment.\n const v = Vec2.crossNumVec2(1.0, r);\n const abs_v = Vec2.abs(v);\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n\n let maxFraction = input.maxFraction;\n\n // Build a bounding box for the segment.\n const segmentAABB = new AABB();\n let t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2);\n segmentAABB.combinePoints(p1, t);\n\n const stack = this.stackPool.allocate();\n const subInput = this.inputPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, segmentAABB) === false) {\n continue;\n }\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n const c = node.aabb.getCenter();\n const h = node.aabb.getExtents();\n const separation = math_abs(Vec2.dot(v, Vec2.sub(p1, c))) - Vec2.dot(abs_v, h);\n if (separation > 0.0) {\n continue;\n }\n\n if (node.isLeaf()) {\n subInput.p1 = Vec2.clone(input.p1);\n subInput.p2 = Vec2.clone(input.p2);\n subInput.maxFraction = maxFraction;\n\n const value = rayCastCallback(subInput, node.id);\n\n if (value === 0.0) {\n // The client has terminated the ray cast.\n break;\n } else if (value > 0.0) {\n // update segment bounding box.\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\n private inputPool: Pool = new Pool({\n create(): RayCastInput {\n // tslint:disable-next-line:no-object-literal-type-assertion\n return {} as RayCastInput;\n },\n release(stack: RayCastInput): void {\n }\n });\n\n private stackPool: Pool>> = new Pool>>({\n create(): Array> {\n return [];\n },\n release(stack: Array>): void {\n stack.length = 0;\n }\n });\n\n private iteratorPool: Pool> = new Pool>({\n create(): Iterator {\n return new Iterator();\n },\n release(iterator: Iterator): void {\n iterator.close();\n }\n });\n\n}\n\n/** @internal */\nclass Iterator {\n parents: Array> = [];\n states: number[] = [];\n preorder(root: TreeNode): Iterator {\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 next(): TreeNode {\n while (this.parents.length > 0) {\n const i = this.parents.length - 1;\n const 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 close(): void {\n this.parents.length = 0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\nimport { DynamicTree, DynamicTreeQueryCallback } from \"./DynamicTree\";\nimport { FixtureProxy } from \"../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/**\n * The broad-phase wraps and extends a dynamic-tree to keep track of moved\n * objects and query them on update.\n */\nexport class BroadPhase {\n m_tree: DynamicTree = new DynamicTree();\n m_moveBuffer: number[] = [];\n\n m_callback: (userDataA: any, userDataB: any) => void;\n m_queryProxyId: number;\n\n /**\n * Get user data from a proxy. Returns null if the id is invalid.\n */\n getUserData(proxyId: number): FixtureProxy {\n return this.m_tree.getUserData(proxyId);\n }\n\n /**\n * Test overlap of fat AABBs.\n */\n testOverlap(proxyIdA: number, proxyIdB: number): boolean {\n const aabbA = this.m_tree.getFatAABB(proxyIdA);\n const aabbB = this.m_tree.getFatAABB(proxyIdB);\n return AABB.testOverlap(aabbA, aabbB);\n }\n\n /**\n * Get the fat AABB for a proxy.\n */\n getFatAABB(proxyId: number): AABB {\n return this.m_tree.getFatAABB(proxyId);\n }\n\n /**\n * Get the number of proxies.\n */\n getProxyCount(): number {\n return this.m_moveBuffer.length;\n }\n\n /**\n * Get the height of the embedded tree.\n */\n getTreeHeight(): number {\n return this.m_tree.getHeight();\n }\n\n /**\n * Get the balance (integer) of the embedded tree.\n */\n getTreeBalance(): number {\n return this.m_tree.getMaxBalance();\n }\n\n /**\n * Get the quality metric of the embedded tree.\n */\n getTreeQuality(): number {\n return this.m_tree.getAreaRatio();\n }\n\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query = (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void => {\n this.m_tree.query(aabb, queryCallback);\n };\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n this.m_tree.rayCast(input, rayCastCallback);\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_tree.shiftOrigin(newOrigin);\n }\n\n /**\n * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs\n * is called.\n */\n createProxy(aabb: AABBValue, userData: FixtureProxy): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const proxyId = this.m_tree.createProxy(aabb, userData);\n this.bufferMove(proxyId);\n return proxyId;\n }\n\n /**\n * Destroy a proxy. It is up to the client to remove any pairs.\n */\n destroyProxy(proxyId: number): void {\n this.unbufferMove(proxyId);\n this.m_tree.destroyProxy(proxyId);\n }\n\n /**\n * Call moveProxy as many times as you like, then when you are done call\n * UpdatePairs to finalized the proxy pairs (for your time step).\n */\n moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const changed = this.m_tree.moveProxy(proxyId, aabb, displacement);\n if (changed) {\n this.bufferMove(proxyId);\n }\n }\n\n /**\n * Call to trigger a re-processing of it's pairs on the next call to\n * UpdatePairs.\n */\n touchProxy(proxyId: number): void {\n this.bufferMove(proxyId);\n }\n\n bufferMove(proxyId: number): void {\n this.m_moveBuffer.push(proxyId);\n }\n\n unbufferMove(proxyId: number): void {\n for (let 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\n /**\n * Update the pairs. This results in pair callbacks. This can only add pairs.\n */\n updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void {\n _ASSERT && console.assert(typeof addPairCallback === \"function\");\n this.m_callback = addPairCallback;\n\n // Perform tree queries for all moving proxies.\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\n // We have to query the tree with the fat AABB so that\n // we don't fail to create a pair that may touch later.\n const fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId);\n\n // Query tree, create pairs and add them pair buffer.\n this.m_tree.query(fatAABB, this.queryCallback);\n }\n\n // Try to keep the tree balanced.\n // this.m_tree.rebalance(4);\n }\n\n queryCallback = (proxyId: number): boolean => {\n // A proxy cannot form a pair with itself.\n if (proxyId === this.m_queryProxyId) {\n return true;\n }\n\n const proxyIdA = math_min(proxyId, this.m_queryProxyId);\n const proxyIdB = math_max(proxyId, this.m_queryProxyId);\n\n // TODO: Skip any duplicate pairs.\n\n const userDataA = this.m_tree.getUserData(proxyIdA);\n const userDataB = this.m_tree.getUserData(proxyIdB);\n\n // Send the pairs back to the client.\n this.m_callback(userDataA, userDataB);\n\n return true;\n };\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2023 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\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_sqrt = Math.sqrt;\n\n\nimport { RotValue } from \"./Rot\";\nimport { TransformValue } from \"./Transform\";\nimport { Vec2Value } from \"./Vec2\";\nimport { Vec3Value } from \"./Vec3\";\n\nexport function vec2(x: number, y: number): Vec2Value {\n return { x, y };\n}\n\nexport function vec3(x: number, y: number, z: number): Vec3Value {\n return { x, y, z };\n}\n\nexport function rotation(angle: number): RotValue {\n return { s: math_sin(angle), c: math_cos(angle) };\n}\n\nexport function setVec2(out: Vec2Value, x: number, y: number): Vec2Value {\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function copyVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = w.x;\n out.y = w.y;\n return out;\n}\n\nexport function zeroVec2(out: Vec2Value): Vec2Value {\n out.x = 0;\n out.y = 0;\n return out;\n}\n\nexport function negVec2(out: Vec2Value): Vec2Value {\n out.x = -out.x;\n out.y = -out.y;\n return out;\n}\n\nexport function plusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x += w.x;\n out.y += w.y;\n return out;\n}\n\nexport function addVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x + w.x;\n out.y = v.x + w.y;\n return out;\n}\n\nexport function minusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x -= w.x;\n out.y -= w.y;\n return out;\n}\n\nexport function subVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x - w.x;\n out.y = v.y - w.y;\n return out;\n}\n\nexport function mulVec2(out: Vec2Value, m: number): Vec2Value {\n out.x *= m;\n out.y *= m;\n return out;\n}\n\nexport function scaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x = m * w.x;\n out.y = m * w.y;\n return out;\n}\n\nexport function plusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x += m * w.x;\n out.y += m * w.y;\n return out;\n}\n\nexport function minusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x -= m * w.x;\n out.y -= m * w.y;\n return out;\n}\n\nexport function combine2Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x;\n out.y = am * a.y + bm * b.y;\n return out;\n}\n\nexport function combine3Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value, cm: number, c: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x + cm * c.x;\n out.y = am * a.y + bm * b.y + cm * c.y;\n return out;\n}\n\nexport function normalizeVec2Length(out: Vec2Value): number {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length !== 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return length;\n}\n\nexport function normalizeVec2(out: Vec2Value): Vec2Value {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length > 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return out;\n}\n\nexport function crossVec2Num(out: Vec2Value, v: Vec2Value, w: number): Vec2Value {\n const x = w * v.y;\n const y = -w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossNumVec2(out: Vec2Value, w: number, v: Vec2Value): Vec2Value {\n const x = -w * v.y;\n const y = w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossVec2Vec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.y - a.y * b.x;\n}\n\nexport function dotVec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.x + a.y * b.y;\n}\n\nexport function lengthVec2(a: Vec2Value): number {\n return math_sqrt(a.x * a.x + a.y * a.y);\n}\n\nexport function lengthSqrVec2(a: Vec2Value): number {\n return a.x * a.x + a.y * a.y;\n}\n\nexport function distVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return math_sqrt(dx * dx + dy * dy);\n}\n\nexport function distSqrVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return dx * dx + dy * dy;\n}\n\nexport function dotVec3(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n}\n\nexport function setRotAngle(out: RotValue, a: number): RotValue {\n out.c = math_cos(a);\n out.s = math_sin(a);\n return out;\n}\n\nexport function rotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n out.x = q.c * v.x - q.s * v.y;\n out.y = q.s * v.x + q.c * v.y;\n return out;\n}\n\nexport function derotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n const x = q.c * v.x + q.s * v.y;\n const y = -q.s * v.x + q.c * v.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function rerotVec2(out: Vec2Value, before: RotValue, after: RotValue, v: Vec2Value): Vec2Value {\n const x0 = before.c * v.x + before.s * v.y;\n const y0 = -before.s * v.x + before.c * v.y;\n const x = after.c * x0 - after.s * y0;\n const y = after.s * x0 + after.c * y0;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function transform(x: number, y: number, a: number): TransformValue {\n return { p: vec2(x, y), q: rotation(a) };\n}\n\nexport function copyTransform(out: TransformValue, transform: TransformValue): TransformValue {\n out.p.x = transform.p.x;\n out.p.y = transform.p.y;\n out.q.s = transform.q.s;\n out.q.c = transform.q.c;\n return out;\n}\n\nexport function transformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const x = xf.q.c * v.x - xf.q.s * v.y + xf.p.x;\n const y = xf.q.s * v.x + xf.q.c * v.y + xf.p.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const px = v.x - xf.p.x;\n const py = v.y - xf.p.y;\n const x = (xf.q.c * px + xf.q.s * py);\n const y = (-xf.q.s * px + xf.q.c * py);\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function retransformVec2(out: Vec2Value, from: TransformValue, to: TransformValue, v: Vec2Value): Vec2Value {\n const x0 = from.q.c * v.x - from.q.s * v.y + from.p.x;\n const y0 = from.q.s * v.x + from.q.c * v.y + from.p.y;\n const px = x0 - to.p.x;\n const py = y0 - to.p.y;\n const x = to.q.c * px + to.q.s * py;\n const y = -to.q.s * px + to.q.c * py;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformTransform(out: TransformValue, a: TransformValue, b: TransformValue): TransformValue {\n const c = a.q.c * b.q.c + a.q.s * b.q.s;\n const s = a.q.c * b.q.s - a.q.s * b.q.c;\n const x = a.q.c * (b.p.x - a.p.x) + a.q.s * (b.p.y - a.p.y);\n const y = -a.q.s * (b.p.x - a.p.x) + a.q.c * (b.p.y - a.p.y);\n out.q.c = c;\n out.q.s = s;\n out.p.x = x;\n out.p.y = y;\n return out;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_atan2 = Math.atan2;\n\nexport interface RotValue {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n}\n\ndeclare module \"./Rot\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Rot(angle: number): Rot;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Rot(obj: RotValue): Rot;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Rot(): Rot;\n}\n\n/** Rotation */\n// @ts-expect-error\nexport class Rot {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n\n /** Initialize from an angle in radians. */\n constructor(angle?: number | RotValue) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Rot)) {\n return new Rot(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\n /** @hidden */\n static neo(angle: number): Rot {\n const obj = Object.create(Rot.prototype);\n obj.setAngle(angle);\n return obj;\n }\n\n static clone(rot: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n const obj = Object.create(Rot.prototype);\n obj.s = rot.s;\n obj.c = rot.c;\n return obj;\n }\n\n static identity(): Rot {\n const obj = Object.create(Rot.prototype);\n obj.s = 0.0;\n obj.c = 1.0;\n return obj;\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.s) && Number.isFinite(obj.c);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Rot.isValid(o), \"Invalid Rot!\", o);\n }\n\n /** Set to the identity rotation. */\n setIdentity(): void {\n this.s = 0.0;\n this.c = 1.0;\n }\n\n set(angle: number | RotValue): void {\n if (typeof angle === \"object\") {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n\n } else {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n }\n\n setRot(angle: RotValue): void {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n }\n\n /** Set using an angle in radians. */\n setAngle(angle: number): void {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n\n /** Get the angle in radians. */\n getAngle(): number {\n return math_atan2(this.s, this.c);\n }\n\n /** Get the x-axis. */\n getXAxis(): Vec2 {\n return Vec2.neo(this.c, this.s);\n }\n\n /** Get the y-axis. */\n getYAxis(): Vec2 {\n return Vec2.neo(-this.s, this.c);\n }\n\n /** Multiply two rotations: q * r */\n static mul(rot: RotValue, m: RotValue): Rot;\n /** Rotate a vector */\n static mul(rot: RotValue, m: Vec2Value): Vec2;\n static mul(rot, m) {\n _ASSERT && Rot.assert(rot);\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Multiply two rotations: q * r */\n static mulRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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\n /** Rotate a vector */\n static mulVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n\n static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2 {\n const x = rot.c * (v.x - w.x) - rot.s * (v.y - w.y);\n const y = rot.s * (v.x - w.x) + rot.c * (v.y - w.y);\n return Vec2.neo(x, y);\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulT(rot: RotValue, m: RotValue): Rot;\n /** Inverse rotate a vector */\n static mulT(rot: RotValue, m: Vec2Value): Vec2;\n static mulT(rot, m) {\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulTRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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\n /** Inverse rotate a vector */\n static mulTVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"./Matrix\";\nimport { mod } from \"./Math\";\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { TransformValue } from \"./Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_atan2 = Math.atan2;\n/** @internal */ const math_PI = Math.PI;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * This describes the motion of a body/shape for TOI computation. Shapes are\n * defined with respect to the body origin, which may not coincide with the\n * center of mass. However, to support dynamics we must interpolate the center\n * of mass position.\n */\nexport class Sweep {\n /** Local center of mass position */\n localCenter = Vec2.zero();\n\n /** World center position */\n c = Vec2.zero();\n\n /** World angle */\n a = 0;\n\n /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */\n alpha0 = 0;\n\n c0 = Vec2.zero();\n a0 = 0;\n\n /** @internal */\n recycle() {\n matrix.zeroVec2(this.localCenter);\n matrix.zeroVec2(this.c);\n this.a = 0;\n this.alpha0 = 0;\n matrix.zeroVec2(this.c0);\n this.a0 = 0;\n }\n\n setTransform(xf: TransformValue): void {\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n\n this.a = this.a0 = math_atan2(xf.q.s, xf.q.c);\n }\n\n setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void {\n matrix.copyVec2(this.localCenter, localCenter);\n\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n }\n\n /**\n * Get the interpolated transform at a specific time.\n *\n * @param xf\n * @param beta A factor in [0,1], where 0 indicates alpha0\n */\n getTransform(xf: TransformValue, beta: number = 0): void {\n matrix.setRotAngle(xf.q, (1.0 - beta) * this.a0 + beta * this.a);\n matrix.combine2Vec2(xf.p, (1.0 - beta), this.c0, beta, this.c);\n\n // shift to origin\n matrix.minusVec2(xf.p, matrix.rotVec2(temp, xf.q, this.localCenter));\n }\n\n /**\n * Advance the sweep forward, yielding a new initial state.\n *\n * @param alpha The new initial time\n */\n advance(alpha: number): void {\n _ASSERT && console.assert(this.alpha0 < 1.0);\n const beta = (alpha - this.alpha0) / (1.0 - this.alpha0);\n matrix.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\n forward(): void {\n this.a0 = this.a;\n matrix.copyVec2(this.c0, this.c);\n }\n\n /**\n * normalize the angles in radians to be between -pi and pi.\n */\n normalize(): void {\n const a0 = mod(this.a0, -math_PI, +math_PI);\n this.a -= this.a0 - a0;\n this.a0 = a0;\n }\n\n set(that: Sweep): void {\n matrix.copyVec2(this.localCenter, that.localCenter);\n matrix.copyVec2(this.c, that.c);\n this.a = that.a;\n this.alpha0 = that.alpha0;\n matrix.copyVec2(this.c0, that.c0);\n this.a0 = that.a0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Rot, RotValue } from \"./Rot\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport type TransformValue = {\n p: Vec2Value;\n q: RotValue;\n};\n\ndeclare module \"./Transform\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Transform(position?: Vec2Value, rotation?: number): Transform;\n}\n\n/**\n * A transform contains translation and rotation. It is used to represent the\n * position and orientation of rigid frames. Initialize using a position vector\n * and a rotation.\n */\n// @ts-expect-error\nexport class Transform {\n /** position */\n p: Vec2;\n\n /** rotation */\n q: Rot;\n\n constructor(position?: Vec2Value, rotation?: number) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Transform)) {\n return new Transform(position, rotation);\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 rotation !== \"undefined\") {\n this.q.setAngle(rotation);\n }\n }\n\n static clone(xf: Transform): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(xf.p);\n obj.q = Rot.clone(xf.q);\n return obj;\n }\n\n /** @hidden */\n static neo(position: Vec2Value, rotation: Rot): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(position);\n obj.q = Rot.clone(rotation);\n return obj;\n }\n\n static identity(): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.zero();\n obj.q = Rot.identity();\n return obj;\n }\n\n /** Set this to the identity transform */\n setIdentity(): void {\n this.p.setZero();\n this.q.setIdentity();\n }\n\n /** Set position and angle */\n set(position: Vec2Value, rotation: number): void;\n /** Copy from another transform */\n set(xf: TransformValue): void;\n set(a: any, b?: any) {\n if (typeof b === \"undefined\") {\n this.p.set(a.p);\n this.q.set(a.q);\n } else {\n this.p.set(a);\n this.q.set(b);\n }\n }\n\n /** Set position and angle */\n setNum(position: Vec2Value, rotation: number) {\n this.p.setVec2(position);\n this.q.setAngle(rotation);\n }\n\n setTransform(xf: TransformValue): void {\n this.p.setVec2(xf.p);\n this.q.setRot(xf.q);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.p) && Rot.isValid(obj.q);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Transform.isValid(o), \"Invalid Transform!\", o);\n }\n\n static mul(a: TransformValue, b: Vec2Value): Vec2;\n static mul(a: TransformValue, b: TransformValue): Transform;\n // static mul(a: Transform, b: Vec2Value[]): Vec2[];\n // static mul(a: Transform, b: Transform[]): Transform[];\n static mul(a, b) {\n if (Array.isArray(b)) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n\n } else if (\"x\" in b && \"y\" in b) {\n return Transform.mulVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulXf(a, b);\n }\n }\n\n static mulAll(a: Transform, b: Vec2Value[]): Vec2[];\n static mulAll(a: Transform, b: Transform[]): Transform[];\n static mulAll(a: TransformValue, b) {\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n }\n\n /** @hidden @deprecated */\n static mulFn(a: TransformValue) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n return function(b: Vec2Value): Vec2 {\n return Transform.mul(a, b);\n };\n }\n\n static mulVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = (a.q.c * b.x - a.q.s * b.y) + a.p.x;\n const y = (a.q.s * b.x + a.q.c * b.y) + a.p.y;\n return Vec2.neo(x, y);\n }\n\n static mulXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p\n // = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p\n const xf = Transform.identity();\n xf.q = Rot.mulRot(a.q, b.q);\n xf.p = Vec2.add(Rot.mulVec2(a.q, b.p), a.p);\n return xf;\n }\n\n static mulT(a: TransformValue, b: Vec2Value): Vec2;\n static mulT(a: TransformValue, b: TransformValue): Transform;\n static mulT(a, b) {\n if (\"x\" in b && \"y\" in b) {\n return Transform.mulTVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulTXf(a, b);\n }\n }\n\n static mulTVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const px = b.x - a.p.x;\n const py = b.y - a.p.y;\n const x = (a.q.c * px + a.q.s * py);\n const y = (-a.q.s * px + a.q.c * py);\n return Vec2.neo(x, y);\n }\n\n static mulTXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q' * (B.q * v1 + B.p - A.p)\n // = A.q' * B.q * v1 + A.q' * (B.p - A.p)\n const xf = Transform.identity();\n xf.q.setRot(Rot.mulTRot(a.q, b.q));\n xf.p.setVec2(Rot.mulTVec2(a.q, Vec2.sub(b.p, a.p)));\n return xf;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2 } from \"../common/Vec2\";\n\nexport class Velocity {\n /** linear */\n v = Vec2.zero();\n\n /** angular */\n w = 0;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n\n\nexport class Position {\n /** location */\n c = Vec2.zero();\n\n /** angle */\n a = 0;\n\n // todo: cache sin/cos\n getTransform(xf: TransformValue, p: Vec2Value): TransformValue {\n // xf.q = rotation(this.a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(this.a);\n xf.q.s = math_sin(this.a);\n xf.p.x = this.c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = this.c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n }\n}\n\nexport function getTransform(xf: TransformValue, p: Vec2Value, c: Vec2Value, a: number): TransformValue {\n // xf.q = rotation(a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(a);\n xf.q.s = math_sin(a);\n xf.p.x = c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { MassData } from \"../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"./AABB\";\nimport { DistanceProxy } from \"./Distance\";\nimport type { Transform, TransformValue } from \"../common/Transform\";\nimport type { Vec2Value } from \"../common/Vec2\";\nimport { Style } from \"../util/Testbed\";\n\n// todo make shape an interface\n\n/**\n * A shape is used for collision detection. You can create a shape however you\n * like. Shapes used for simulation in World are created automatically when a\n * Fixture is created. Shapes may encapsulate one or more child shapes.\n */\nexport abstract class Shape {\n /** @hidden */ m_type: ShapeType;\n\n /**\n * @hidden\n * Radius of a shape. For polygonal shapes this must be b2_polygonRadius.\n * There is no support for making rounded polygons.\n */\n m_radius: number;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @hidden */\n abstract _reset(): void;\n\n static isValid(obj: any): boolean {\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\n abstract getRadius(): number;\n\n /**\n * Get the type of this shape. You can use this to down cast to the concrete\n * shape.\n *\n * @return the shape type.\n */\n abstract getType(): ShapeType;\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n abstract _clone(): Shape;\n\n /**\n * Get the number of child primitives.\n */\n abstract getChildCount(): number;\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n abstract testPoint(xf: TransformValue, p: Vec2Value): boolean;\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean;\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void;\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n abstract computeMass(massData: MassData, density?: number): void;\n\n abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void;\n\n}\n\nexport type ShapeType = \"circle\" | \"edge\" | \"polygon\" | \"chain\";\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Shape, ShapeType } from \"../collision/Shape\";\nimport { Body, MassData } from \"./Body\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const synchronize_aabb1 = new AABB();\n/** @internal */ const synchronize_aabb2 = new AABB();\n/** @internal */ const displacement = matrix.vec2(0, 0);\n\n/**\n * A fixture definition is used to create a fixture. This class defines an\n * abstract fixture definition. You can reuse fixture definitions safely.\n */\nexport interface FixtureOpt {\n userData?: unknown;\n /**\n * The friction coefficient, usually in the range [0,1]\n */\n friction?: number;\n /**\n * The restitution (elasticity) usually in the range [0,1]\n */\n restitution?: number;\n /**\n * The density, usually in kg/m^2\n */\n density?: number;\n /**\n * A sensor shape collects contact information but never generates a collision response.\n */\n isSensor?: boolean;\n /**\n * Zero, positive or negative collision group.\n * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide.\n */\n filterGroupIndex?: number;\n /**\n * Collision category bit or bits that this fixture belongs to.\n * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa.\n */\n filterCategoryBits?: number;\n /**\n * Collision category bit or bits that this fixture accept for collision.\n */\n filterMaskBits?: number;\n}\n\nexport interface FixtureDef extends FixtureOpt {\n shape: Shape;\n}\n\n/** @internal */ const FixtureDefDefault: FixtureOpt = {\n userData : null,\n friction : 0.2,\n restitution : 0.0,\n density : 0.0,\n isSensor : false,\n\n filterGroupIndex : 0,\n filterCategoryBits : 0x0001,\n filterMaskBits : 0xFFFF\n};\n\n/**\n * This proxy is used internally to connect shape children to the broad-phase.\n */\nexport class FixtureProxy {\n aabb: AABB;\n fixture: Fixture;\n childIndex: number;\n proxyId: number;\n constructor(fixture: Fixture, childIndex: number) {\n this.aabb = new AABB();\n this.fixture = fixture;\n this.childIndex = childIndex;\n this.proxyId;\n }\n}\n\n/**\n * A fixture is used to attach a shape to a body for collision detection. A\n * fixture inherits its transform from its parent. Fixtures hold additional\n * non-geometric data such as friction, collision filters, etc.\n *\n * To create a new Fixture use {@link Body.createFixture}.\n */\nexport class Fixture {\n /** @internal */ m_body: Body;\n /** @internal */ m_friction: number;\n /** @internal */ m_restitution: number;\n /** @internal */ m_density: number;\n /** @internal */ m_isSensor: boolean;\n /** @internal */ m_filterGroupIndex: number;\n /** @internal */ m_filterCategoryBits: number;\n /** @internal */ m_filterMaskBits: number;\n /** @internal */ m_shape: Shape;\n /** @internal */ m_next: Fixture | null;\n /** @internal */ m_proxies: FixtureProxy[];\n // 0 indicates inactive state, this is not the same as m_proxies.length\n /** @internal */ m_proxyCount: number;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(body: Body, def: FixtureDef);\n constructor(body: Body, shape: Shape, def?: FixtureOpt);\n constructor(body: Body, shape: Shape, density?: number);\n /** @internal */\n constructor(body: Body, shape?, def?) {\n if (shape.shape) {\n def = shape;\n shape = shape.shape;\n\n } else if (typeof def === \"number\") {\n def = {density : def};\n }\n\n def = options(def, FixtureDefDefault);\n\n this.m_body = body;\n\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\n this.m_filterGroupIndex = def.filterGroupIndex;\n this.m_filterCategoryBits = def.filterCategoryBits;\n this.m_filterMaskBits = def.filterMaskBits;\n\n // TODO validate shape\n this.m_shape = shape; // .clone();\n\n this.m_next = null;\n\n this.m_proxies = [];\n this.m_proxyCount = 0;\n\n // fixture proxies are created here,\n // but they are activate in when a fixture is added to body\n const childCount = this.m_shape.getChildCount();\n for (let i = 0; i < childCount; ++i) {\n this.m_proxies[i] = new FixtureProxy(this, i);\n }\n\n this.m_userData = def.userData;\n }\n\n /** @hidden Re-setup fixture. */\n _reset(): void {\n const body = this.getBody();\n const broadPhase = body.m_world.m_broadPhase;\n this.destroyProxies(broadPhase);\n if (this.m_shape._reset) {\n this.m_shape._reset();\n }\n const childCount = this.m_shape.getChildCount();\n for (let 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\n /** @internal */\n _serialize(): object {\n return {\n friction: this.m_friction,\n restitution: this.m_restitution,\n density: this.m_density,\n isSensor: this.m_isSensor,\n\n filterGroupIndex: this.m_filterGroupIndex,\n filterCategoryBits: this.m_filterCategoryBits,\n filterMaskBits: this.m_filterMaskBits,\n\n shape: this.m_shape,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, body: any, restore: any): Fixture {\n const shape = restore(Shape, data.shape);\n const fixture = shape && new Fixture(body, shape, data);\n return fixture;\n }\n\n /**\n * Get the type of the child shape. You can use this to down cast to the\n * concrete shape.\n */\n getType(): ShapeType {\n return this.m_shape.m_type;\n }\n\n /**\n * Get the child shape. You can modify the child shape, however you should not\n * change the number of vertices because this will crash some collision caching\n * mechanisms. Manipulating the shape may lead to non-physical behavior.\n */\n getShape(): Shape {\n return this.m_shape;\n }\n\n /**\n * A sensor shape collects contact information but never generates a collision\n * response.\n */\n isSensor(): boolean {\n return this.m_isSensor;\n }\n\n /**\n * Set if this fixture is a sensor.\n */\n setSensor(sensor: boolean): void {\n if (sensor != this.m_isSensor) {\n this.m_body.setAwake(true);\n this.m_isSensor = sensor;\n }\n }\n\n // /**\n // * Get the contact filtering data.\n // */\n // getFilterData() {\n // return this.m_filter;\n // }\n\n /**\n * Get the user data that was assigned in the fixture definition. Use this to\n * store your application specific data.\n */\n getUserData(): unknown {\n return this.m_userData;\n }\n\n /**\n * Set the user data. Use this to store your application specific data.\n */\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get the parent body of this fixture. This is null if the fixture is not\n * attached.\n */\n getBody(): Body {\n return this.m_body;\n }\n\n /**\n * Get the next fixture in the parent body's fixture list.\n */\n getNext(): Fixture | null {\n return this.m_next;\n }\n\n /**\n * Get the density of this fixture.\n */\n getDensity(): number {\n return this.m_density;\n }\n\n /**\n * Set the density of this fixture. This will _not_ automatically adjust the\n * mass of the body. You must call Body.resetMassData to update the body's mass.\n */\n setDensity(density: number): void {\n _ASSERT && console.assert(Number.isFinite(density) && density >= 0.0);\n this.m_density = density;\n }\n\n /**\n * Get the coefficient of friction, usually in the range [0,1].\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Set the coefficient of friction. This will not change the friction of\n * existing contacts.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the coefficient of restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Set the coefficient of restitution. This will not change the restitution of\n * existing contacts.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Test a point in world coordinates for containment in this fixture.\n */\n testPoint(p: Vec2Value): boolean {\n return this.m_shape.testPoint(this.m_body.getTransform(), p);\n }\n\n /**\n * Cast a ray against this shape.\n */\n rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean {\n return this.m_shape.rayCast(output, input, this.m_body.getTransform(), childIndex);\n }\n\n /**\n * Get the mass data for this fixture. The mass data is based on the density and\n * the shape. The rotational inertia is about the shape's origin. This operation\n * may be expensive.\n */\n getMassData(massData: MassData): void {\n this.m_shape.computeMass(massData, this.m_density);\n }\n\n /**\n * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a\n * more accurate AABB, compute it using the shape and the body transform.\n */\n getAABB(childIndex: number): AABB {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_proxies.length);\n return this.m_proxies[childIndex].aabb;\n }\n\n /**\n * These support body activation/deactivation.\n */\n createProxies(broadPhase: BroadPhase, xf: TransformValue): void {\n _ASSERT && console.assert(this.m_proxyCount == 0);\n\n // Create proxies in the broad-phase.\n this.m_proxyCount = this.m_shape.getChildCount();\n\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n this.m_shape.computeAABB(proxy.aabb, xf, i);\n proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy);\n }\n }\n\n destroyProxies(broadPhase: BroadPhase): void {\n // Destroy proxies in the broad-phase.\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n broadPhase.destroyProxy(proxy.proxyId);\n proxy.proxyId = null;\n }\n\n this.m_proxyCount = 0;\n }\n\n /**\n * Updates this fixture proxy in broad-phase (with combined AABB of current and\n * next transformation).\n */\n synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void {\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n // Compute an AABB that covers the swept shape (may miss some rotation\n // effect).\n this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex);\n this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex);\n\n proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2);\n\n matrix.subVec2(displacement, xf2.p, xf1.p);\n\n broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement);\n }\n }\n\n /**\n * Set the contact filtering data. This will not update contacts until the next\n * time step when either parent body is active and awake. This automatically\n * calls refilter.\n */\n setFilterData(filter: { groupIndex: number, categoryBits: number, maskBits: number }): void {\n this.m_filterGroupIndex = filter.groupIndex;\n this.m_filterCategoryBits = filter.categoryBits;\n this.m_filterMaskBits = filter.maskBits;\n this.refilter();\n }\n\n getFilterGroupIndex(): number {\n return this.m_filterGroupIndex;\n }\n\n setFilterGroupIndex(groupIndex: number): void {\n this.m_filterGroupIndex = groupIndex;\n this.refilter();\n }\n\n getFilterCategoryBits(): number {\n return this.m_filterCategoryBits;\n }\n\n setFilterCategoryBits(categoryBits: number): void {\n this.m_filterCategoryBits = categoryBits;\n this.refilter();\n }\n\n getFilterMaskBits(): number {\n return this.m_filterMaskBits;\n }\n\n setFilterMaskBits(maskBits: number): void {\n this.m_filterMaskBits = maskBits;\n this.refilter();\n }\n\n /**\n * Call this if you want to establish collision that was previously disabled by\n * ContactFilter.\n */\n refilter(): void {\n if (this.m_body == null) {\n return;\n }\n\n // Flag associated contacts for filtering.\n let edge = this.m_body.getContactList();\n while (edge) {\n const contact = edge.contact;\n const fixtureA = contact.getFixtureA();\n const fixtureB = contact.getFixtureB();\n if (fixtureA == this || fixtureB == this) {\n contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n\n const world = this.m_body.getWorld();\n\n if (world == null) {\n return;\n }\n\n // Touch each proxy so that new pairs may be created\n const broadPhase = world.m_broadPhase;\n for (let i = 0; i < this.m_proxyCount; ++i) {\n broadPhase.touchProxy(this.m_proxies[i].proxyId);\n }\n }\n\n /**\n * Implement this method to provide collision filtering, if you want finer\n * control over contact creation.\n *\n * Return true if contact calculations should be performed between these two\n * fixtures.\n *\n * Warning: for performance reasons this is only called when the AABBs begin to\n * overlap.\n */\n shouldCollide(that: Fixture): boolean {\n\n if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) {\n return that.m_filterGroupIndex > 0;\n }\n\n const collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0;\n const collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0;\n const collide = collideA && collideB;\n return collide;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Velocity } from \"./Velocity\";\nimport { Position } from \"./Position\";\nimport { Fixture, FixtureDef, FixtureOpt } from \"./Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { JointEdge } from \"./Joint\";\nimport { World } from \"./World\";\nimport { ContactEdge } from \"./Contact\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A static body does not move under simulation and behaves as if it has infinite mass.\n * Internally, zero is stored for the mass and the inverse mass.\n * Static bodies can be moved manually by the user.\n * A static body has zero velocity.\n * Static bodies do not collide with other static or kinematic bodies.\n * \n * A kinematic body moves under simulation according to its velocity.\n * Kinematic bodies do not respond to forces.\n * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity.\n * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass.\n * Kinematic bodies do not collide with other kinematic or static bodies.\n * \n * A dynamic body is fully simulated.\n * They can be moved manually by the user, but normally they move according to forces.\n * A dynamic body can collide with all body types.\n * A dynamic body always has finite, non-zero mass.\n * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate.\n */\nexport type BodyType = \"static\" | \"kinematic\" | \"dynamic\";\n\n/** @internal */ const STATIC = \"static\";\n/** @internal */ const KINEMATIC = \"kinematic\";\n/** @internal */ const DYNAMIC = \"dynamic\";\n\n/** @internal */ const oldCenter = matrix.vec2(0, 0);\n/** @internal */ const localCenter = matrix.vec2(0, 0);\n/** @internal */ const shift = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n\nexport interface BodyDef {\n /**\n * Body types are static, kinematic, or dynamic. Note: if a dynamic\n * body would have zero mass, the mass is set to one.\n */\n type?: BodyType;\n /**\n * The world position of the body. Avoid creating bodies at the\n * origin since this can lead to many overlapping shapes.\n */\n position?: Vec2Value;\n /**\n * The world angle of the body in radians.\n */\n angle?: number;\n /**\n * The linear velocity of the body's origin in world co-ordinates.\n */\n linearVelocity?: Vec2Value;\n angularVelocity?: number;\n /**\n * Linear damping is use to reduce the linear velocity. The\n * damping parameter can be larger than 1.0 but the damping effect becomes\n * sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n linearDamping?: number;\n /**\n * Angular damping is use to reduce the angular velocity.\n * The damping parameter can be larger than 1.0 but the damping effect\n * becomes sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n angularDamping?: number;\n /**\n * Should this body be prevented from rotating? Useful for characters.\n */\n fixedRotation?: boolean;\n /**\n * Is this a fast moving body that should be prevented from\n * tunneling through other moving bodies? Note that all bodies are\n * prevented from tunneling through kinematic and static bodies. This\n * setting is only considered on dynamic bodies. Warning: You should use\n * this flag sparingly since it increases processing time.\n */\n bullet?: boolean;\n gravityScale?: number;\n /**\n * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage.\n */\n allowSleep?: boolean;\n /**\n * Is this body initially awake or sleeping?\n */\n awake?: boolean;\n /**\n * Does this body start out active?\n */\n active?: boolean;\n userData?: any;\n}\n\n/** @internal */ const BodyDefDefault: BodyDef = {\n type : STATIC,\n position : Vec2.zero(),\n angle : 0.0,\n\n linearVelocity : Vec2.zero(),\n angularVelocity : 0.0,\n\n linearDamping : 0.0,\n angularDamping : 0.0,\n\n fixedRotation : false,\n bullet : false,\n gravityScale : 1.0,\n\n allowSleep : true,\n awake : true,\n active : true,\n\n userData : null\n};\n\n/**\n * MassData This holds the mass data computed for a shape.\n */\nexport interface MassData {\n /** The mass of the shape, usually in kilograms. */\n mass: number;\n /** The position of the shape's centroid relative to the shape's origin. */\n center: Vec2Value;\n /** The rotational inertia of the shape about the local origin. */\n I: number;\n}\n\n/**\n * A rigid body composed of one or more fixtures.\n *\n * To create a new Body use {@link World.createBody}.\n */\nexport class Body {\n /** @hidden */\n static readonly STATIC: BodyType = \"static\";\n /** @hidden */\n static readonly KINEMATIC: BodyType = \"kinematic\";\n /** @hidden */\n static readonly DYNAMIC: BodyType = \"dynamic\";\n\n /** @internal */ m_world: World;\n /** @internal */ m_awakeFlag: boolean;\n /** @internal */ m_autoSleepFlag: boolean;\n /** @internal */ m_bulletFlag: boolean;\n /** @internal */ m_fixedRotationFlag: boolean;\n /** @internal */ m_activeFlag: boolean;\n /** @internal */ m_islandFlag: boolean;\n /** @internal */ m_toiFlag: boolean;\n /** @internal */ m_userData: unknown;\n /** @internal */ m_type: BodyType;\n /** @internal */ m_mass: number;\n /** @internal */ m_invMass: number;\n /** @internal Rotational inertia about the center of mass. */\n m_I: number;\n /** @internal */ m_invI: number;\n /** @internal the body origin transform */\n m_xf: Transform;\n /** @internal the swept motion for CCD */\n m_sweep: Sweep;\n // position and velocity correction\n /** @internal */ c_velocity: Velocity;\n /** @internal */ c_position: Position;\n /** @internal */ m_force: Vec2;\n /** @internal */ m_torque: number;\n /** @internal */ m_linearVelocity: Vec2;\n /** @internal */ m_angularVelocity: number;\n /** @internal */ m_linearDamping: number;\n /** @internal */ m_angularDamping: number;\n /** @internal */ m_gravityScale: number;\n /** @internal */ m_sleepTime: number;\n /** @internal */ m_jointList: JointEdge | null;\n /** @internal */ m_contactList: ContactEdge | null;\n /** @internal */ m_fixtureList: Fixture | null;\n /** @internal */ m_prev: Body | null;\n /** @internal */ m_next: Body | null;\n /** @internal */ m_destroyed: boolean;\n\n /** @hidden Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @internal */\n constructor(world: World, def: BodyDef) {\n def = options(def, BodyDefDefault);\n\n _ASSERT && console.assert(Vec2.isValid(def.position));\n _ASSERT && console.assert(Vec2.isValid(def.linearVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angle));\n _ASSERT && console.assert(Number.isFinite(def.angularVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angularDamping) && def.angularDamping >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.linearDamping) && def.linearDamping >= 0.0);\n\n this.m_world = world;\n\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\n this.m_islandFlag = false;\n this.m_toiFlag = false;\n\n this.m_userData = def.userData;\n this.m_type = def.type;\n\n if (this.m_type == DYNAMIC) {\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n } else {\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n }\n\n // Rotational inertia about the center of mass.\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n // the body origin transform\n this.m_xf = Transform.identity();\n this.m_xf.p.setVec2(def.position);\n this.m_xf.q.setAngle(def.angle);\n\n // the swept motion for CCD\n this.m_sweep = new Sweep();\n this.m_sweep.setTransform(this.m_xf);\n\n // position and velocity correction\n this.c_velocity = new Velocity();\n this.c_position = new Position();\n\n this.m_force = Vec2.zero();\n this.m_torque = 0.0;\n\n this.m_linearVelocity = Vec2.clone(def.linearVelocity);\n this.m_angularVelocity = def.angularVelocity;\n\n this.m_linearDamping = def.linearDamping;\n this.m_angularDamping = def.angularDamping;\n this.m_gravityScale = def.gravityScale;\n\n this.m_sleepTime = 0.0;\n\n this.m_jointList = null;\n this.m_contactList = null;\n this.m_fixtureList = null;\n\n this.m_prev = null;\n this.m_next = null;\n\n this.m_destroyed = false;\n }\n\n /** @internal */\n _serialize(): object {\n const fixtures = [];\n for (let 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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): Body {\n const body = new Body(world, data);\n\n if (data.fixtures) {\n for (let i = data.fixtures.length - 1; i >= 0; i--) {\n const fixture = restore(Fixture, data.fixtures[i], body);\n body._addFixture(fixture);\n }\n }\n return body;\n }\n\n isWorldLocked(): boolean {\n return this.m_world && this.m_world.isLocked() ? true : false;\n }\n\n getWorld(): World {\n return this.m_world;\n }\n\n getNext(): Body | null {\n return this.m_next;\n }\n\n setUserData(data: any): void {\n this.m_userData = data;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n getFixtureList(): Fixture | null {\n return this.m_fixtureList;\n }\n\n getJointList(): JointEdge | null {\n return this.m_jointList;\n }\n\n /**\n * Warning: this list changes during the time step and you may miss some\n * collisions if you don't use ContactListener.\n */\n getContactList(): ContactEdge | null {\n return this.m_contactList;\n }\n\n isStatic(): boolean {\n return this.m_type == STATIC;\n }\n\n isDynamic(): boolean {\n return this.m_type == DYNAMIC;\n }\n\n isKinematic(): boolean {\n return this.m_type == KINEMATIC;\n }\n\n /**\n * This will alter the mass and velocity.\n */\n setStatic(): Body {\n this.setType(STATIC);\n return this;\n }\n\n setDynamic(): Body {\n this.setType(DYNAMIC);\n return this;\n }\n\n setKinematic(): Body {\n this.setType(KINEMATIC);\n return this;\n }\n\n /**\n * Get the type of the body.\n */\n getType(): BodyType {\n return this.m_type;\n }\n\n /**\n * Set the type of the body to \"static\", \"kinematic\" or \"dynamic\".\n * @param type The type of the body.\n */\n setType(type: BodyType): void {\n _ASSERT && console.assert(type === STATIC || type === KINEMATIC || type === DYNAMIC);\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type == type) {\n return;\n }\n\n this.m_type = type;\n\n this.resetMassData();\n\n if (this.m_type == STATIC) {\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_sweep.forward();\n this.synchronizeFixtures();\n }\n\n this.setAwake(true);\n\n this.m_force.setZero();\n this.m_torque = 0.0;\n\n // Delete the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n\n // Touch the proxies so that new contacts will be created (when appropriate)\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n for (let i = 0; i < f.m_proxyCount; ++i) {\n broadPhase.touchProxy(f.m_proxies[i].proxyId);\n }\n }\n }\n\n isBullet(): boolean {\n return this.m_bulletFlag;\n }\n\n /**\n * Should this body be treated like a bullet for continuous collision detection?\n */\n setBullet(flag: boolean): void {\n this.m_bulletFlag = !!flag;\n }\n\n isSleepingAllowed(): boolean {\n return this.m_autoSleepFlag;\n }\n\n setSleepingAllowed(flag: boolean): void {\n this.m_autoSleepFlag = !!flag;\n if (this.m_autoSleepFlag == false) {\n this.setAwake(true);\n }\n }\n\n isAwake(): boolean {\n return this.m_awakeFlag;\n }\n\n /**\n * Set the sleep state of the body. A sleeping body has very low CPU cost.\n *\n * @param flag Set to true to wake the body, false to put it to sleep.\n */\n setAwake(flag: boolean): void {\n if (flag) {\n this.m_awakeFlag = true;\n this.m_sleepTime = 0.0;\n } else {\n this.m_awakeFlag = false;\n this.m_sleepTime = 0.0;\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_force.setZero();\n this.m_torque = 0.0;\n }\n }\n\n isActive(): boolean {\n return this.m_activeFlag;\n }\n\n /**\n * Set the active state of the body. An inactive body is not simulated and\n * cannot be collided with or woken up. If you pass a flag of true, all fixtures\n * will be added to the broad-phase. If you pass a flag of false, all fixtures\n * will be removed from the broad-phase and all contacts will be destroyed.\n * Fixtures and joints are otherwise unaffected.\n *\n * You may continue to create/destroy fixtures and joints on inactive bodies.\n * Fixtures on an inactive body are implicitly inactive and will not participate\n * in collisions, ray-casts, or queries. Joints connected to an inactive body\n * are implicitly inactive. An inactive body is still owned by a World object\n * and remains\n */\n setActive(flag: boolean): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (flag == this.m_activeFlag) {\n return;\n }\n\n this.m_activeFlag = !!flag;\n\n if (this.m_activeFlag) {\n // Create all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.createProxies(broadPhase, this.m_xf);\n }\n\t\t // Contacts are created at the beginning of the next\n\t\t this.m_world.m_newFixture = true;\n } else {\n // Destroy all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.destroyProxies(broadPhase);\n }\n\n // Destroy the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n }\n }\n\n isFixedRotation(): boolean {\n return this.m_fixedRotationFlag;\n }\n\n /**\n * Set this body to have fixed rotation. This causes the mass to be reset.\n */\n setFixedRotation(flag: boolean): void {\n if (this.m_fixedRotationFlag == flag) {\n return;\n }\n\n this.m_fixedRotationFlag = !!flag;\n\n this.m_angularVelocity = 0.0;\n\n this.resetMassData();\n }\n\n /**\n * Get the world transform for the body's origin.\n */\n getTransform(): Transform {\n return this.m_xf;\n }\n\n /**\n * Set the position of the body's origin and rotation. Manipulating a body's\n * transform may cause non-physical behavior. Note: contacts are updated on the\n * next call to World.step.\n *\n * @param position The world position of the body's local origin.\n * @param angle The world rotation in radians.\n */\n setTransform(position: Vec2Value, angle: number): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n this.m_xf.setNum(position, angle);\n this.m_sweep.setTransform(this.m_xf);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let 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\n synchronizeTransform(): void {\n this.m_sweep.getTransform(this.m_xf, 1);\n }\n\n /**\n * Update fixtures in broad-phase.\n */\n synchronizeFixtures(): void {\n this.m_sweep.getTransform(xf, 0);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.synchronize(broadPhase, xf, this.m_xf);\n }\n }\n\n /**\n * Used in TOI.\n */\n advance(alpha: number): void {\n // Advance to the new safe time. This doesn't sync the broad-phase.\n this.m_sweep.advance(alpha);\n matrix.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\n /**\n * Get the world position for the body's origin.\n */\n getPosition(): Vec2 {\n return this.m_xf.p;\n }\n\n setPosition(p: Vec2Value): void {\n this.setTransform(p, this.m_sweep.a);\n }\n\n /**\n * Get the current world rotation angle in radians.\n */\n getAngle(): number {\n return this.m_sweep.a;\n }\n\n setAngle(angle: number): void {\n this.setTransform(this.m_xf.p, angle);\n }\n\n /**\n * Get the world position of the center of mass.\n */\n getWorldCenter(): Vec2 {\n return this.m_sweep.c;\n }\n\n /**\n * Get the local position of the center of mass.\n */\n getLocalCenter(): Vec2 {\n return this.m_sweep.localCenter;\n }\n\n /**\n * Get the linear velocity of the center of mass.\n *\n * @return the linear velocity of the center of mass.\n */\n getLinearVelocity(): Vec2 {\n return this.m_linearVelocity;\n }\n\n /**\n * Get the world linear velocity of a world point attached to this body.\n *\n * @param worldPoint A point in world coordinates.\n */\n getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2 {\n const localCenter = Vec2.sub(worldPoint, this.m_sweep.c);\n return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity,\n localCenter));\n }\n\n /**\n * Get the world velocity of a local point.\n *\n * @param localPoint A point in local coordinates.\n */\n getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2 {\n return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint));\n }\n\n /**\n * Set the linear velocity of the center of mass.\n *\n * @param v The new linear velocity of the center of mass.\n */\n setLinearVelocity(v: Vec2Value): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (Vec2.dot(v, v) > 0.0) {\n this.setAwake(true);\n }\n this.m_linearVelocity.setVec2(v);\n }\n\n /**\n * Get the angular velocity.\n *\n * @returns the angular velocity in radians/second.\n */\n getAngularVelocity(): number {\n return this.m_angularVelocity;\n }\n\n /**\n * Set the angular velocity.\n *\n * @param w The new angular velocity in radians/second.\n */\n setAngularVelocity(w: number): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (w * w > 0.0) {\n this.setAwake(true);\n }\n this.m_angularVelocity = w;\n }\n\n getLinearDamping(): number {\n return this.m_linearDamping;\n }\n\n setLinearDamping(linearDamping: number): void {\n this.m_linearDamping = linearDamping;\n }\n\n getAngularDamping(): number {\n return this.m_angularDamping;\n }\n\n setAngularDamping(angularDamping: number): void {\n this.m_angularDamping = angularDamping;\n }\n\n getGravityScale(): number {\n return this.m_gravityScale;\n }\n\n /**\n * Scale the gravity applied to this body.\n */\n setGravityScale(scale: number): void {\n this.m_gravityScale = scale;\n }\n\n /**\n * Get the total mass of the body.\n *\n * @returns The mass, usually in kilograms (kg).\n */\n getMass(): number {\n return this.m_mass;\n }\n\n /**\n * Get the rotational inertia of the body about the local origin.\n *\n * @return the rotational inertia, usually in kg-m^2.\n */\n getInertia(): number {\n return this.m_I + this.m_mass\n * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter);\n }\n\n /**\n * Copy the mass data of the body to data.\n */\n getMassData(data: MassData): void {\n data.mass = this.m_mass;\n data.I = this.getInertia();\n matrix.copyVec2(data.center, this.m_sweep.localCenter);\n }\n\n /**\n * This resets the mass properties to the sum of the mass properties of the\n * fixtures. This normally does not need to be called unless you called\n * SetMassData to override the mass and you later want to reset the mass.\n */\n resetMassData(): void {\n // Compute mass data from shapes. Each shape has its own density.\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n matrix.zeroVec2(this.m_sweep.localCenter);\n\n // Static and kinematic bodies have zero mass.\n if (this.isStatic() || this.isKinematic()) {\n matrix.copyVec2(this.m_sweep.c0, this.m_xf.p);\n matrix.copyVec2(this.m_sweep.c, this.m_xf.p);\n this.m_sweep.a0 = this.m_sweep.a;\n return;\n }\n\n _ASSERT && console.assert(this.isDynamic());\n\n // Accumulate mass over all fixtures.\n matrix.zeroVec2(localCenter);\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n if (f.m_density == 0.0) {\n continue;\n }\n\n const massData: MassData = {\n mass: 0,\n center: matrix.vec2(0, 0),\n I: 0\n };\n f.getMassData(massData);\n this.m_mass += massData.mass;\n matrix.plusScaleVec2(localCenter, massData.mass, massData.center);\n this.m_I += massData.I;\n }\n\n // Compute center of mass.\n if (this.m_mass > 0.0) {\n this.m_invMass = 1.0 / this.m_mass;\n matrix.scaleVec2(localCenter, this.m_invMass, localCenter);\n\n } else {\n // Force all dynamic bodies to have a positive mass.\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n }\n\n if (this.m_I > 0.0 && this.m_fixedRotationFlag == false) {\n // Center the inertia about the center of mass.\n this.m_I -= this.m_mass * matrix.dotVec2(localCenter, localCenter);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n\n } else {\n this.m_I = 0.0;\n this.m_invI = 0.0;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(localCenter, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Set the mass properties to override the mass properties of the fixtures. Note\n * that this changes the center of mass position. Note that creating or\n * destroying fixtures can also alter the mass. This function has no effect if\n * the body isn't dynamic.\n *\n * @param massData The mass properties.\n */\n setMassData(massData: MassData): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n this.m_mass = massData.mass;\n if (this.m_mass <= 0.0) {\n this.m_mass = 1.0;\n }\n\n this.m_invMass = 1.0 / this.m_mass;\n\n if (massData.I > 0.0 && this.m_fixedRotationFlag == false) {\n this.m_I = massData.I - this.m_mass * matrix.dotVec2(massData.center, massData.center);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(massData.center, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Apply a force at a world point. If the force is not applied at the center of\n * mass, it will generate a torque and affect the angular velocity. This wakes\n * up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyForce(force: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping.\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), force);\n }\n }\n\n /**\n * Apply a force to the center of mass. This wakes up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param wake Also wake up the body\n */\n applyForceToCenter(force: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n }\n }\n\n /**\n * Apply a torque. This affects the angular velocity without affecting the\n * linear velocity of the center of mass. This wakes up the body.\n *\n * @param torque About the z-axis (out of the screen), usually in N-m.\n * @param wake Also wake up the body\n */\n applyTorque(torque: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_torque += torque;\n }\n }\n\n /**\n * Apply an impulse at a point. This immediately modifies the velocity. It also\n * modifies the angular velocity if the point of application is not at the\n * center of mass. This wakes up the body.\n *\n * @param impulse The world impulse vector, usually in N-seconds or kg-m/s.\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n\n // Don't accumulate velocity if the body is sleeping\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(point, this.m_sweep.c), impulse);\n }\n }\n\n /**\n * Apply an angular impulse.\n *\n * @param impulse The angular impulse in units of kg*m*m/s\n * @param wake Also wake up the body\n */\n applyAngularImpulse(impulse: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate velocity if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_angularVelocity += this.m_invI * impulse;\n }\n }\n\n /**\n * This is used to test if two bodies should collide.\n * \n * Bodies do not collide when:\n * - Neither of them is dynamic\n * - They are connected by a joint with collideConnected == false\n */\n shouldCollide(that: Body): boolean {\n // At least one body should be dynamic.\n if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) {\n return false;\n }\n // Does a joint prevent collision?\n for (let 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\n /** @internal Used for deserialize. */\n _addFixture(fixture: Fixture): Fixture {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.createProxies(broadPhase, this.m_xf);\n }\n\n fixture.m_next = this.m_fixtureList;\n this.m_fixtureList = fixture;\n\n // Adjust mass properties if needed.\n if (fixture.m_density > 0.0) {\n this.resetMassData();\n }\n\n // Let the world know we have a new fixture. This will cause new contacts\n // to be created at the beginning of the next time step.\n this.m_world.m_newFixture = true;\n\n return fixture;\n }\n\n /**\n * Creates a fixture and attach it to this body.\n *\n * If the density is non-zero, this function automatically updates the mass of\n * the body.\n *\n * Contacts are not created until the next time step.\n *\n * Warning: This function is locked during callbacks.\n */\n createFixture(def: FixtureDef): Fixture;\n createFixture(shape: Shape, opt?: FixtureOpt): Fixture;\n createFixture(shape: Shape, density?: number): Fixture;\n // tslint:disable-next-line:typedef\n createFixture(shape, fixdef?) {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n const fixture = new Fixture(this, shape, fixdef);\n this._addFixture(fixture);\n return fixture;\n }\n\n /**\n * Destroy a fixture. This removes the fixture from the broad-phase and destroys\n * all contacts associated with this fixture. This will automatically adjust the\n * mass of the body if the body is dynamic and the fixture has positive density.\n * All fixtures attached to a body are implicitly destroyed when the body is\n * destroyed.\n *\n * Warning: This function is locked during callbacks.\n *\n * @param fixture The fixture to be removed.\n */\n destroyFixture(fixture: Fixture): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n _ASSERT && console.assert(fixture.m_body == this);\n\n // Remove the fixture from this body's singly linked list.\n let found = false;\n if (this.m_fixtureList === fixture) {\n this.m_fixtureList = fixture.m_next;\n found = true;\n\n } else {\n let node = this.m_fixtureList;\n while (node != null) {\n if (node.m_next === fixture) {\n node.m_next = fixture.m_next;\n found = true;\n break;\n }\n node = node.m_next;\n }\n }\n\n // You tried to remove a shape that is not attached to this body.\n _ASSERT && console.assert(found);\n\n // Destroy any contacts associated with the fixture.\n let edge = this.m_contactList;\n while (edge) {\n const c = edge.contact;\n edge = edge.next;\n\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n\n if (fixture == fixtureA || fixture == fixtureB) {\n // This destroys the contact and removes it from\n // this body's contact list.\n this.m_world.destroyContact(c);\n }\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.destroyProxies(broadPhase);\n }\n\n fixture.m_body = null;\n fixture.m_next = null;\n\n this.m_world.publish(\"remove-fixture\", fixture);\n\n // Reset the mass data.\n this.resetMassData();\n }\n\n /**\n * Get the corresponding world point of a local point.\n */\n getWorldPoint(localPoint: Vec2Value): Vec2 {\n return Transform.mulVec2(this.m_xf, localPoint);\n }\n\n /**\n * Get the corresponding world vector of a local vector.\n */\n getWorldVector(localVector: Vec2Value): Vec2 {\n return Rot.mulVec2(this.m_xf.q, localVector);\n }\n\n /**\n * Gets the corresponding local point of a world point.\n */\n getLocalPoint(worldPoint: Vec2Value): Vec2 {\n return Transform.mulTVec2(this.m_xf, worldPoint);\n }\n\n /**\n * Gets the corresponding local vector of a world vector.\n */\n getLocalVector(worldVector: Vec2Value): Vec2 {\n return Rot.mulTVec2(this.m_xf.q, worldVector);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2, Vec2Value } from \"../common/Vec2\";\nimport type { Body } from \"./Body\";\nimport { TimeStep } from \"./Solver\";\nimport { Style } from \"../util/Testbed\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/**\n * A joint edge is used to connect bodies and joints together in a joint graph\n * where each body is a node and each joint is an edge. A joint edge belongs to\n * a doubly linked list maintained in each attached body. Each joint has two\n * joint nodes, one for each attached body.\n */\nexport class JointEdge {\n /**\n * provides quick access to the other body attached.\n */\n other: Body | null = null;\n /**\n * the joint\n */\n joint: Joint | null = null;\n /**\n * prev the previous joint edge in the body's joint list\n */\n prev: JointEdge | null = null;\n /**\n * the next joint edge in the body's joint list\n */\n next: JointEdge | null = null;\n}\n\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointOpt {\n /**\n * Use this to attach application specific data to your joints.\n */\n userData?: any;\n /**\n * Set this flag to true if the attached bodies\n * should collide.\n */\n collideConnected?: boolean;\n}\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointDef extends JointOpt {\n /**\n * The first attached body.\n */\n bodyA: Body;\n /**\n * The second attached body.\n */\n bodyB: Body;\n}\n\n/** @internal */ const DEFAULTS = {\n userData : null,\n collideConnected : false\n};\n\n/**\n * The base joint class. Joints are used to constraint two bodies together in\n * various fashions. Some joints also feature limits and motors.\n */\nexport abstract class Joint {\n\n /** @internal */ m_type: string = \"unknown-joint\";\n\n /** @internal */ m_bodyA: Body;\n /** @internal */ m_bodyB: Body;\n\n /** @internal */ m_collideConnected: boolean;\n\n /** @internal */ m_prev: Joint | null = null;\n /** @internal */ m_next: Joint | null = null;\n\n /** @internal */ m_edgeA: JointEdge = new JointEdge();\n /** @internal */ m_edgeB: JointEdge = new JointEdge();\n\n /** @internal */ m_islandFlag: boolean = false;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(def: JointDef);\n constructor(def: JointOpt, bodyA: Body, bodyB: Body);\n constructor(def: JointDef | JointOpt, bodyA?: Body, bodyB?: Body) {\n bodyA = \"bodyA\" in def ? def.bodyA : bodyA;\n bodyB = \"bodyB\" in def ? def.bodyB : bodyB;\n\n _ASSERT && console.assert(!!bodyA);\n _ASSERT && console.assert(!!bodyB);\n _ASSERT && console.assert(bodyA != bodyB);\n\n this.m_bodyA = bodyA!;\n this.m_bodyB = bodyB!;\n\n this.m_collideConnected = !!def.collideConnected;\n this.m_userData = def.userData;\n }\n\n /**\n * Short-cut function to determine if either body is inactive.\n */\n isActive(): boolean {\n return this.m_bodyA.isActive() && this.m_bodyB.isActive();\n }\n\n /**\n * Get the type of the concrete joint.\n */\n getType(): string {\n return this.m_type;\n }\n\n /**\n * Get the first body attached to this joint.\n */\n getBodyA(): Body {\n return this.m_bodyA;\n }\n\n /**\n * Get the second body attached to this joint.\n */\n getBodyB(): Body {\n return this.m_bodyB;\n }\n\n /**\n * Get the next joint the world joint list.\n */\n getNext(): Joint {\n return this.m_next;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get collide connected. Note: modifying the collide connect flag won't work\n * correctly because the flag is only checked when fixture AABBs begin to\n * overlap.\n */\n getCollideConnected(): boolean {\n return this.m_collideConnected;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n abstract getAnchorA(): Vec2;\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n abstract getAnchorB(): Vec2;\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n abstract getReactionForce(inv_dt: number): Vec2;\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n abstract getReactionTorque(inv_dt: number): number;\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {}\n\n abstract initVelocityConstraints(step: TimeStep): void;\n\n abstract solveVelocityConstraints(step: TimeStep): void;\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n abstract solvePositionConstraints(step: TimeStep): boolean;\n\n /**\n * @hidden @experimental\n * Update joint with new props.\n */\n abstract _reset(def: Partial): void;\n\n /**\n * @internal @deprecated\n * Temporary for backward compatibility, will be removed.\n */\n _resetAnchors(def: any): void {\n return this._reset(def);\n }\n}\n","/** @hidden */\nexport const stats = {\n gjkCalls: 0,\n gjkIters: 0,\n gjkMaxIters: 0,\n\n toiTime: 0,\n toiMaxTime: 0,\n toiCalls: 0,\n toiIters: 0,\n toiMaxIters: 0,\n toiRootIters: 0,\n toiMaxRootIters: 0,\n\n toString(newline?: string): string {\n newline = typeof newline === \"string\" ? newline : \"\\n\";\n let string = \"\";\n // tslint:disable-next-line:no-for-in\n for (const name in this) {\n if (typeof this[name] !== \"function\" && typeof this[name] !== \"object\") {\n string += name + \": \" + this[name] + newline;\n }\n }\n return string;\n }\n};\n","/** @internal */\nexport const now = function(): number {\n return Date.now();\n};\n\n/** @internal */\nexport const diff = function(time: number): number {\n return Date.now() - time;\n};\n\n/** @internal */\nexport default {\n now,\n diff,\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport { Shape } from \"./Shape\";\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Transform, TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const e12 = matrix.vec2(0, 0);\n/** @internal */ const e13 = matrix.vec2(0, 0);\n/** @internal */ const e23 = matrix.vec2(0, 0);\n/** @internal */ const temp1 = matrix.vec2(0, 0);\n/** @internal */ const temp2 = matrix.vec2(0, 0);\n\n/**\n * GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates.\n */\n\nstats.gjkCalls = 0;\nstats.gjkIters = 0;\nstats.gjkMaxIters = 0;\n\n/**\n * Input for Distance. You have to option to use the shape radii in the\n * computation. Even\n */\nexport class DistanceInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n useRadii = false;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n this.useRadii = false;\n }\n}\n\n/**\n * Output for Distance.\n */\nexport class DistanceOutput {\n /** closest point on shapeA */\n pointA = matrix.vec2(0, 0);\n /** closest point on shapeB */\n pointB = matrix.vec2(0, 0);\n distance = 0;\n /** iterations number of GJK iterations used */\n iterations = 0;\n recycle() {\n matrix.zeroVec2(this.pointA);\n matrix.zeroVec2(this.pointB);\n this.distance = 0;\n this.iterations = 0;\n }\n}\n\n/**\n * Used to warm start Distance. Set count to zero on first call.\n */\nexport class SimplexCache {\n /** length or area */\n metric: number = 0;\n /** vertices on shape A */\n indexA: number[] = [];\n /** vertices on shape B */\n indexB: number[] = [];\n count: number = 0;\n recycle() {\n this.metric = 0;\n this.indexA.length = 0;\n this.indexB.length = 0;\n this.count = 0;\n }\n}\n\n/**\n * Compute the closest points between two shapes. Supports any combination of:\n * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On\n * the first call set SimplexCache.count to zero.\n */\nexport const Distance = function (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void {\n ++stats.gjkCalls;\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n // Initialize the simplex.\n // const simplex = new Simplex();\n simplex.recycle();\n simplex.readCache(cache, proxyA, xfA, proxyB, xfB);\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n const k_maxIters = Settings.maxDistanceIterations;\n\n // These store the vertices of the last simplex so that we\n // can check for duplicates and prevent cycling.\n const saveA = [];\n const saveB = []; // int[3]\n let saveCount = 0;\n\n // Main iteration loop.\n let iter = 0;\n while (iter < k_maxIters) {\n // Copy simplex so we can identify duplicates.\n saveCount = simplex.m_count;\n for (let i = 0; i < saveCount; ++i) {\n saveA[i] = vertices[i].indexA;\n saveB[i] = vertices[i].indexB;\n }\n\n simplex.solve();\n\n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count === 3) {\n break;\n }\n\n // Get search direction.\n const d = simplex.getSearchDirection();\n\n // Ensure the search direction is numerically fit.\n if (matrix.lengthSqrVec2(d) < EPSILON * EPSILON) {\n // The origin is probably contained by a line segment\n // or triangle. Thus the shapes are overlapped.\n\n // We can't return zero here even though there may be overlap.\n // In case the simplex is a point, segment, or triangle it is difficult\n // to determine if the origin is contained in the CSO or very close to it.\n break;\n }\n\n // Compute a tentative new simplex vertex using support points.\n const vertex = vertices[simplex.m_count]; // SimplexVertex\n\n vertex.indexA = proxyA.getSupport(matrix.derotVec2(temp, xfA.q, matrix.scaleVec2(temp, -1, d)));\n matrix.transformVec2(vertex.wA, xfA, proxyA.getVertex(vertex.indexA));\n\n vertex.indexB = proxyB.getSupport(matrix.derotVec2(temp, xfB.q, d));\n matrix.transformVec2(vertex.wB, xfB, proxyB.getVertex(vertex.indexB));\n\n matrix.subVec2(vertex.w, vertex.wB, vertex.wA);\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n ++stats.gjkIters;\n\n // Check for duplicate support points. This is the main termination\n // criteria.\n let duplicate = false;\n for (let i = 0; i < saveCount; ++i) {\n if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) {\n duplicate = true;\n break;\n }\n }\n\n // If we found a duplicate support point we must exit to avoid cycling.\n if (duplicate) {\n break;\n }\n\n // New vertex is ok and needed.\n ++simplex.m_count;\n }\n\n stats.gjkMaxIters = math_max(stats.gjkMaxIters, iter);\n\n // Prepare output.\n simplex.getWitnessPoints(output.pointA, output.pointB);\n output.distance = matrix.distVec2(output.pointA, output.pointB);\n output.iterations = iter;\n\n // Cache the simplex.\n simplex.writeCache(cache);\n\n // Apply radii if requested.\n if (input.useRadii) {\n const rA = proxyA.m_radius;\n const rB = proxyB.m_radius;\n\n if (output.distance > rA + rB && output.distance > EPSILON) {\n // Shapes are still no overlapped.\n // Move the witness points to the outer surface.\n output.distance -= rA + rB;\n matrix.subVec2(normal, output.pointB, output.pointA);\n matrix.normalizeVec2(normal);\n matrix.plusScaleVec2(output.pointA, rA, normal);\n matrix.minusScaleVec2(output.pointB, rB, normal);\n } else {\n // Shapes are overlapped when radii are considered.\n // Move the witness points to the middle.\n const p = matrix.subVec2(temp, output.pointA, output.pointB);\n matrix.copyVec2(output.pointA, p);\n matrix.copyVec2(output.pointB, p);\n output.distance = 0.0;\n }\n }\n};\n\n/**\n * A distance proxy is used by the GJK algorithm. It encapsulates any shape.\n */\nexport class DistanceProxy {\n /** @internal */ m_vertices: Vec2Value[] = [];\n // todo: remove this?\n /** @internal */ m_count = 0;\n /** @internal */ m_radius = 0;\n\n recycle() {\n this.m_vertices.length = 0;\n this.m_count = 0;\n this.m_radius = 0;\n }\n\n /**\n * Get the vertex count.\n */\n getVertexCount(): number {\n return this.m_count;\n }\n\n /**\n * Get a vertex by index. Used by Distance.\n */\n getVertex(index: number): Vec2Value {\n _ASSERT && console.assert(0 <= index && index < this.m_count);\n return this.m_vertices[index];\n }\n\n /**\n * Get the supporting vertex index in the given direction.\n */\n getSupport(d: Vec2Value): number {\n let bestIndex = -1;\n let bestValue = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const value = matrix.dotVec2(this.m_vertices[i], d);\n if (value > bestValue) {\n bestIndex = i;\n bestValue = value;\n }\n }\n return bestIndex;\n }\n\n /**\n * Get the supporting vertex in the given direction.\n */\n getSupportVertex(d: Vec2Value): Vec2Value {\n return this.m_vertices[this.getSupport(d)];\n }\n\n /**\n * Initialize the proxy using the given shape. The shape must remain in scope\n * while the proxy is in use.\n */\n set(shape: Shape, index: number): void {\n // TODO remove, use shape instead\n _ASSERT && console.assert(typeof shape.computeDistanceProxy === \"function\");\n shape.computeDistanceProxy(this, index);\n }\n\n /**\n * Initialize the proxy using a vertex cloud and radius. The vertices\n * must remain in scope while the proxy is in use.\n */\n setVertices(vertices: Vec2Value[], count: number, radius: number) {\n this.m_vertices = vertices;\n this.m_count = count;\n this.m_radius = radius;\n }\n}\n\nclass SimplexVertex {\n /** support point in proxyA */\n wA = matrix.vec2(0, 0);\n /** wA index */\n indexA = 0;\n\n /** support point in proxyB */\n wB = matrix.vec2(0, 0);\n /** wB index */\n indexB = 0;\n\n /** wB - wA; */\n w = matrix.vec2(0, 0);\n /** barycentric coordinate for closest point */\n a = 0;\n\n recycle() {\n this.indexA = 0;\n this.indexB = 0;\n matrix.zeroVec2(this.wA);\n matrix.zeroVec2(this.wB);\n matrix.zeroVec2(this.w);\n this.a = 0;\n }\n set(v: SimplexVertex): void {\n this.indexA = v.indexA;\n this.indexB = v.indexB;\n matrix.copyVec2(this.wA, v.wA);\n matrix.copyVec2(this.wB, v.wB);\n matrix.copyVec2(this.w, v.w);\n this.a = v.a;\n }\n}\n\n/** @internal */ const searchDirection_reuse = matrix.vec2(0, 0);\n/** @internal */ const closestPoint_reuse = matrix.vec2(0, 0); \n\nclass Simplex {\n m_v1 = new SimplexVertex();\n m_v2 = new SimplexVertex();\n m_v3 = new SimplexVertex();\n m_v = [this.m_v1, this.m_v2, this.m_v3];\n m_count: number;\n recycle() {\n this.m_v1.recycle();\n this.m_v2.recycle();\n this.m_v3.recycle();\n this.m_count = 0;\n }\n\n /** @internal */ toString(): string {\n if (this.m_count === 3) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y,\n this.m_v3.a, this.m_v3.wA.x, this.m_v3.wA.y, this.m_v3.wB.x, this.m_v3.wB.y\n ].toString();\n\n } else if (this.m_count === 2) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y\n ].toString();\n\n } else if (this.m_count === 1) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y\n ].toString();\n\n } else {\n return \"+\" + this.m_count;\n }\n }\n\n readCache(cache: SimplexCache, proxyA: DistanceProxy, transformA: TransformValue, proxyB: DistanceProxy, transformB: TransformValue): void {\n _ASSERT && console.assert(cache.count <= 3);\n\n // Copy data from cache.\n this.m_count = cache.count;\n for (let i = 0; i < this.m_count; ++i) {\n const v = this.m_v[i];\n v.indexA = cache.indexA[i];\n v.indexB = cache.indexB[i];\n const wALocal = proxyA.getVertex(v.indexA);\n const wBLocal = proxyB.getVertex(v.indexB);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 0.0;\n }\n\n // Compute the new simplex metric, if it is substantially different than\n // old metric then flush the simplex.\n if (this.m_count > 1) {\n const metric1 = cache.metric;\n const metric2 = this.getMetric();\n if (metric2 < 0.5 * metric1 || 2.0 * metric1 < metric2 || metric2 < EPSILON) {\n // Reset the simplex.\n this.m_count = 0;\n }\n }\n\n // If the cache is empty or invalid...\n if (this.m_count === 0) {\n const v = this.m_v[0];\n v.indexA = 0;\n v.indexB = 0;\n const wALocal = proxyA.getVertex(0);\n const wBLocal = proxyB.getVertex(0);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 1.0;\n this.m_count = 1;\n }\n }\n\n writeCache(cache: SimplexCache): void {\n cache.metric = this.getMetric();\n cache.count = this.m_count;\n for (let i = 0; i < this.m_count; ++i) {\n cache.indexA[i] = this.m_v[i].indexA;\n cache.indexB[i] = this.m_v[i].indexB;\n }\n }\n\n getSearchDirection(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 1:\n return matrix.setVec2(searchDirection_reuse, -v1.w.x, -v1.w.y);\n\n case 2: {\n matrix.subVec2(e12, v2.w, v1.w);\n const sgn = -matrix.crossVec2Vec2(e12, v1.w);\n if (sgn > 0.0) {\n // Origin is left of e12.\n return matrix.setVec2(searchDirection_reuse, -e12.y, e12.x);\n } else {\n // Origin is right of e12.\n return matrix.setVec2(searchDirection_reuse, e12.y, -e12.x);\n }\n }\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(searchDirection_reuse);\n }\n }\n\n getClosestPoint(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n\n case 1:\n return matrix.copyVec2(closestPoint_reuse, v1.w);\n\n case 2:\n return matrix.combine2Vec2(closestPoint_reuse, v1.a, v1.w, v2.a, v2.w);\n\n case 3:\n return matrix.zeroVec2(closestPoint_reuse);\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n }\n }\n\n getWitnessPoints(pA: Vec2Value, pB: Vec2Value): void {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n break;\n\n case 1:\n matrix.copyVec2(pA, v1.wA);\n matrix.copyVec2(pB, v1.wB);\n break;\n\n case 2:\n matrix.combine2Vec2(pA, v1.a, v1.wA, v2.a, v2.wA);\n matrix.combine2Vec2(pB, v1.a, v1.wB, v2.a, v2.wB);\n break;\n\n case 3:\n matrix.combine3Vec2(pA, v1.a, v1.wA, v2.a, v2.wA, v3.a, v3.wA);\n matrix.copyVec2(pB, pA);\n break;\n\n default:\n _ASSERT && console.assert(false);\n break;\n }\n }\n\n getMetric(): number {\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return 0.0;\n\n case 1:\n return 0.0;\n\n case 2:\n return matrix.distVec2(this.m_v1.w, this.m_v2.w);\n\n case 3:\n return matrix.crossVec2Vec2(\n matrix.subVec2(temp1, this.m_v2.w, this.m_v1.w),\n matrix.subVec2(temp2, this.m_v3.w, this.m_v1.w),\n );\n\n default:\n _ASSERT && console.assert(false);\n return 0.0;\n }\n }\n\n solve(): void {\n switch (this.m_count) {\n case 1:\n break;\n\n case 2:\n this.solve2();\n break;\n\n case 3:\n this.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n }\n\n// Solve a line segment using barycentric coordinates.\n//\n// p = a1 * w1 + a2 * w2\n// a1 + a2 = 1\n//\n// The vector from the origin to the closest point on the line is\n// perpendicular to the line.\n// e12 = w2 - w1\n// dot(p, e) = 0\n// a1 * dot(w1, e) + a2 * dot(w2, e) = 0\n//\n// 2-by-2 linear system\n// [1 1 ][a1] = [1]\n// [w1.e12 w2.e12][a2] = [0]\n//\n// Define\n// d12_1 = dot(w2, e12)\n// d12_2 = -dot(w1, e12)\n// d12 = d12_1 + d12_2\n//\n// Solution\n// a1 = d12_1 / d12\n// a2 = d12_2 / d12\n solve2(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n matrix.subVec2(e12, w2, w1);\n\n // w1 region\n const d12_2 = -matrix.dotVec2(w1, e12);\n if (d12_2 <= 0.0) {\n // a2 <= 0, so we clamp it to 0\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // w2 region\n const d12_1 = matrix.dotVec2(w2, e12);\n if (d12_1 <= 0.0) {\n // a1 <= 0, so we clamp it to 0\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // Must be in e12 region.\n const inv_d12 = 1.0 / (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\n// Possible regions:\n// - points[2]\n// - edge points[0]-points[2]\n// - edge points[1]-points[2]\n// - inside the triangle\n solve3(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n const w3 = this.m_v3.w;\n\n // Edge12\n // [1 1 ][a1] = [1]\n // [w1.e12 w2.e12][a2] = [0]\n // a3 = 0\n matrix.subVec2(e12, w2, w1);\n const w1e12 = matrix.dotVec2(w1, e12);\n const w2e12 = matrix.dotVec2(w2, e12);\n const d12_1 = w2e12;\n const d12_2 = -w1e12;\n\n // Edge13\n // [1 1 ][a1] = [1]\n // [w1.e13 w3.e13][a3] = [0]\n // a2 = 0\n matrix.subVec2(e13, w3, w1);\n const w1e13 = matrix.dotVec2(w1, e13);\n const w3e13 = matrix.dotVec2(w3, e13);\n const d13_1 = w3e13;\n const d13_2 = -w1e13;\n\n // Edge23\n // [1 1 ][a2] = [1]\n // [w2.e23 w3.e23][a3] = [0]\n // a1 = 0\n matrix.subVec2(e23, w3, w2);\n const w2e23 = matrix.dotVec2(w2, e23);\n const w3e23 = matrix.dotVec2(w3, e23);\n const d23_1 = w3e23;\n const d23_2 = -w2e23;\n\n // Triangle123\n const n123 = matrix.crossVec2Vec2(e12, e13);\n\n const d123_1 = n123 * matrix.crossVec2Vec2(w2, w3);\n const d123_2 = n123 * matrix.crossVec2Vec2(w3, w1);\n const d123_3 = n123 * matrix.crossVec2Vec2(w1, w2);\n\n // w1 region\n if (d12_2 <= 0.0 && d13_2 <= 0.0) {\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // e12\n if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) {\n const inv_d12 = 1.0 / (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\n // e13\n if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) {\n const inv_d13 = 1.0 / (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\n // w2 region\n if (d12_1 <= 0.0 && d23_2 <= 0.0) {\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // w3 region\n if (d13_1 <= 0.0 && d23_1 <= 0.0) {\n this.m_v3.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v3);\n return;\n }\n\n // e23\n if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) {\n const inv_d23 = 1.0 / (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\n // Must be in triangle123\n const inv_d123 = 1.0 / (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}\n\n/** @internal */ const simplex = new Simplex();\n\n/** @internal */ const input = new DistanceInput();\n/** @internal */ const cache = new SimplexCache();\n/** @internal */ const output = new DistanceOutput();\n\n/**\n * Determine if two generic shapes overlap.\n */\nexport const testOverlap = function (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue): boolean {\n input.recycle();\n input.proxyA.set(shapeA, indexA);\n input.proxyB.set(shapeB, indexB);\n matrix.copyTransform(input.transformA, xfA);\n matrix.copyTransform(input.transformB, xfB);\n input.useRadii = true;\n\n output.recycle();\n cache.recycle();\n\n Distance(output, cache, input);\n\n return output.distance < 10.0 * EPSILON;\n};\n\n// legacy exports\nDistance.testOverlap = testOverlap;\nDistance.Input = DistanceInput;\nDistance.Output = DistanceOutput;\nDistance.Proxy = DistanceProxy;\nDistance.Cache = SimplexCache;\n\n/**\n * Input parameters for ShapeCast\n */\nexport class ShapeCastInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n readonly translationB = Vec2.zero();\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n matrix.zeroVec2(this.translationB);\n }\n}\n\n/**\n * Output results for b2ShapeCast\n */\nexport class ShapeCastOutput {\n point: Vec2 = Vec2.zero();\n normal: Vec2 = Vec2.zero();\n lambda = 1.0;\n iterations = 0;\n}\n\n/**\n * Perform a linear shape cast of shape B moving and shape A fixed. Determines\n * the hit point, normal, and translation fraction.\n * \n * @returns true if hit, false if there is no hit or an initial overlap\n */\n//\n// GJK-raycast\n// Algorithm by Gino van den Bergen.\n// \"Smooth Mesh Contacts with GJK\" in Game Physics Pearls. 2010\nexport const ShapeCast = function(output: ShapeCastOutput, input: ShapeCastInput): boolean {\n output.iterations = 0;\n output.lambda = 1.0;\n output.normal.setZero();\n output.point.setZero();\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n\n const radiusA = math_max(proxyA.m_radius, Settings.polygonRadius);\n const radiusB = math_max(proxyB.m_radius, Settings.polygonRadius);\n const radius = radiusA + radiusB;\n\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n const r = input.translationB;\n const n = Vec2.zero();\n let lambda = 0.0;\n\n // Initial simplex\n const simplex = new Simplex();\n simplex.m_count = 0;\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n\n // Get support point in -r direction\n let indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(r)));\n let wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n let indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, r));\n let wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const v = Vec2.sub(wA, wB);\n\n // Sigma is the target distance between polygons\n const sigma = math_max(Settings.polygonRadius, radius - Settings.polygonRadius);\n const tolerance = 0.5 * Settings.linearSlop;\n\n // Main iteration loop.\n const k_maxIters = 20;\n let iter = 0;\n while (iter < k_maxIters && v.length() - sigma > tolerance) {\n _ASSERT && console.assert(simplex.m_count < 3);\n\n output.iterations += 1;\n\n // Support in direction -v (A - B)\n indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(v)));\n wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, v));\n wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const p = Vec2.sub(wA, wB);\n\n // -v is a normal at p\n v.normalize();\n\n // Intersect ray with plane\n const vp = Vec2.dot(v, p);\n const vr = Vec2.dot(v, r);\n if (vp - sigma > lambda * vr) {\n if (vr <= 0.0) {\n return false;\n }\n\n lambda = (vp - sigma) / vr;\n if (lambda > 1.0) {\n return false;\n }\n\n n.setMul(-1, v);\n simplex.m_count = 0;\n }\n\n // Reverse simplex since it works with B - A.\n // Shift by lambda * r because we want the closest point to the current clip point.\n // Note that the support point p is not shifted because we want the plane equation\n // to be formed in unshifted space.\n const vertex = vertices[simplex.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.0;\n simplex.m_count += 1;\n\n switch (simplex.m_count) {\n case 1:\n break;\n\n case 2:\n simplex.solve2();\n break;\n\n case 3:\n simplex.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n \n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count == 3) {\n // Overlap\n return false;\n }\n\n // Get search direction.\n v.setVec2(simplex.getClosestPoint());\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n }\n\n if (iter == 0) {\n // Initial overlap\n return false;\n\t}\n\n // Prepare output.\n const pointA = Vec2.zero();\n const pointB = Vec2.zero();\n simplex.getWitnessPoints(pointB, pointA);\n\n if (v.lengthSquared() > 0.0) {\n n.setMul(-1, v);\n n.normalize();\n }\n\n output.point = Vec2.combine(1, pointA, radiusA, n);\n output.normal = n;\n output.lambda = lambda;\n output.iterations = iter;\n return true;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport Timer from \"../util/Timer\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Distance, DistanceInput, DistanceOutput, DistanceProxy, SimplexCache } from \"./Distance\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\n/**\n * Input parameters for TimeOfImpact.\n */\nexport class TOIInput {\n proxyA = new DistanceProxy();\n proxyB = new DistanceProxy();\n sweepA = new Sweep();\n sweepB = new Sweep();\n /** defines sweep interval [0, tMax] */\n tMax: number;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.sweepA.recycle();\n this.sweepB.recycle();\n this.tMax = -1;\n }\n}\n\nexport enum TOIOutputState {\n e_unset = -1,\n e_unknown = 0,\n e_failed = 1,\n e_overlapped = 2,\n e_touching = 3,\n e_separated = 4,\n}\n\n/**\n * Output parameters for TimeOfImpact.\n */\nexport class TOIOutput {\n state = TOIOutputState.e_unset;\n t = -1;\n recycle() {\n this.state = TOIOutputState.e_unset;\n this.t = -1;\n }\n}\n\nstats.toiTime = 0;\nstats.toiMaxTime = 0;\nstats.toiCalls = 0;\nstats.toiIters = 0;\nstats.toiMaxIters = 0;\nstats.toiRootIters = 0;\nstats.toiMaxRootIters = 0;\n\n/** @internal */ const distanceInput = new DistanceInput();\n/** @internal */ const distanceOutput = new DistanceOutput();\n// this is passed to Distance and SeparationFunction\n/** @internal */ const cache = new SimplexCache();\n\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const axisA = matrix.vec2(0, 0);\n/** @internal */ const axisB = matrix.vec2(0, 0);\n/** @internal */ const localPointA = matrix.vec2(0, 0);\n/** @internal */ const localPointB = matrix.vec2(0, 0);\n\n\n/**\n * Compute the upper bound on time before two shapes penetrate. Time is\n * represented as a fraction between [0,tMax]. This uses a swept separating axis\n * and may miss some intermediate, non-tunneling collisions. If you change the\n * time interval, you should call this function again.\n *\n * Note: use Distance to compute the contact point and normal at the time of\n * impact.\n *\n * CCD via the local separating axis method. This seeks progression by computing\n * the largest time at which separation is maintained.\n */\nexport const TimeOfImpact = function (output: TOIOutput, input: TOIInput): void {\n const timer = Timer.now();\n\n ++stats.toiCalls;\n\n output.state = TOIOutputState.e_unknown;\n output.t = input.tMax;\n\n const proxyA = input.proxyA; // DistanceProxy\n const proxyB = input.proxyB; // DistanceProxy\n\n const sweepA = input.sweepA; // Sweep\n const sweepB = input.sweepB; // Sweep\n\n // Large rotations can make the root finder fail, so we normalize the\n // sweep angles.\n sweepA.normalize();\n sweepB.normalize();\n\n const tMax = input.tMax;\n\n const totalRadius = proxyA.m_radius + proxyB.m_radius;\n const target = math_max(Settings.linearSlop, totalRadius - 3.0 * Settings.linearSlop);\n const tolerance = 0.25 * Settings.linearSlop;\n _ASSERT && console.assert(target > tolerance);\n\n let t1 = 0.0;\n const k_maxIterations = Settings.maxTOIIterations;\n let iter = 0;\n\n // Prepare input for distance query.\n // const cache = new SimplexCache();\n cache.recycle();\n\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\n // The outer loop progressively attempts to compute new separating axes.\n // This loop terminates when an axis is repeated (no progress is made).\n while (true) {\n sweepA.getTransform(xfA, t1);\n sweepB.getTransform(xfB, t1);\n\n // Get the distance between shapes. We can also use the results\n // to get a separating axis.\n matrix.copyTransform(distanceInput.transformA, xfA);\n matrix.copyTransform(distanceInput.transformB, xfB);\n Distance(distanceOutput, cache, distanceInput);\n\n // If the shapes are overlapped, we give up on continuous collision.\n if (distanceOutput.distance <= 0.0) {\n // Failure!\n output.state = TOIOutputState.e_overlapped;\n output.t = 0.0;\n break;\n }\n\n if (distanceOutput.distance < target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n break;\n }\n\n // Initialize the separating axis.\n separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1);\n\n // if (false) {\n // // Dump the curve seen by the root finder\n // const N = 100;\n // const dx = 1.0 / N;\n // const xs = []; // [ N + 1 ];\n // const fs = []; // [ N + 1 ];\n // const x = 0.0;\n // for (const i = 0; i <= N; ++i) {\n // sweepA.getTransform(xfA, x);\n // sweepB.getTransform(xfB, x);\n // const f = fcn.evaluate(xfA, xfB) - target;\n // printf(\"%g %g\\n\", x, f);\n // xs[i] = x;\n // fs[i] = f;\n // x += dx;\n // }\n // }\n\n // Compute the TOI on the separating axis. We do this by successively\n // resolving the deepest point. This loop is bounded by the number of\n // vertices.\n let done = false;\n let t2 = tMax;\n let pushBackIter = 0;\n while (true) {\n // Find the deepest point at t2. Store the witness point indices.\n let s2 = separationFunction.findMinSeparation(t2);\n\n // Is the final configuration separated?\n if (s2 > target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_separated;\n output.t = tMax;\n done = true;\n break;\n }\n\n // Has the separation reached tolerance?\n if (s2 > target - tolerance) {\n // Advance the sweeps\n t1 = t2;\n break;\n }\n\n // Compute the initial separation of the witness points.\n let s1 = separationFunction.evaluate(t1);\n\n // Check for initial overlap. This might happen if the root finder\n // runs out of iterations.\n if (s1 < target - tolerance) {\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n done = true;\n break;\n }\n\n // Check for touching\n if (s1 <= target + tolerance) {\n // Victory! t1 should hold the TOI (could be 0.0).\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n done = true;\n break;\n }\n\n // Compute 1D root of: f(x) - target = 0\n let rootIterCount = 0;\n let a1 = t1;\n let a2 = t2;\n while (true) {\n // Use a mix of the secant rule and bisection.\n let t;\n if (rootIterCount & 1) {\n // Secant rule to improve convergence.\n t = a1 + (target - s1) * (a2 - a1) / (s2 - s1);\n } else {\n // Bisection to guarantee progress.\n t = 0.5 * (a1 + a2);\n }\n\n ++rootIterCount;\n ++stats.toiRootIters;\n\n const s = separationFunction.evaluate(t);\n\n if (math_abs(s - target) < tolerance) {\n // t2 holds a tentative value for t1\n t2 = t;\n break;\n }\n\n // Ensure we continue to bracket the root.\n if (s > target) {\n a1 = t;\n s1 = s;\n } else {\n a2 = t;\n s2 = s;\n }\n\n if (rootIterCount === 50) {\n break;\n }\n }\n\n stats.toiMaxRootIters = math_max(stats.toiMaxRootIters, rootIterCount);\n\n ++pushBackIter;\n\n if (pushBackIter === Settings.maxPolygonVertices) {\n break;\n }\n }\n\n ++iter;\n ++stats.toiIters;\n\n if (done) {\n break;\n }\n\n if (iter === k_maxIterations) {\n // Root finder got stuck. Semi-victory.\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n break;\n }\n }\n\n stats.toiMaxIters = math_max(stats.toiMaxIters, iter);\n\n const time = Timer.diff(timer);\n stats.toiMaxTime = math_max(stats.toiMaxTime, time);\n stats.toiTime += time;\n\n separationFunction.recycle();\n};\n\nenum SeparationFunctionType {\n e_unset = -1,\n e_points = 1,\n e_faceA = 2,\n e_faceB = 3,\n}\n\nclass SeparationFunction {\n // input cache\n // todo: maybe assign by copy instead of reference?\n m_proxyA: DistanceProxy = null;\n m_proxyB: DistanceProxy = null;\n m_sweepA: Sweep = null;\n m_sweepB: Sweep = null;\n\n // initialize cache\n m_type = SeparationFunctionType.e_unset;\n m_localPoint = matrix.vec2(0, 0);\n m_axis = matrix.vec2(0, 0);\n\n // compute output\n indexA = -1;\n indexB = -1;\n\n recycle() {\n this.m_proxyA = null;\n this.m_proxyB = null;\n this.m_sweepA = null;\n this.m_sweepB = null;\n\n this.m_type = SeparationFunctionType.e_unset;\n matrix.zeroVec2(this.m_localPoint);\n matrix.zeroVec2(this.m_axis);\n\n this.indexA = -1;\n this.indexB = -1;\n }\n\n // TODO_ERIN might not need to return the separation\n\n initialize(cache: SimplexCache, proxyA: DistanceProxy, sweepA: Sweep, proxyB: DistanceProxy, sweepB: Sweep, t1: number): number {\n const count = cache.count;\n _ASSERT && console.assert(0 < count && count < 3);\n\n this.m_proxyA = proxyA;\n this.m_proxyB = proxyB;\n this.m_sweepA = sweepA;\n this.m_sweepB = sweepB;\n\n this.m_sweepA.getTransform(xfA, t1);\n this.m_sweepB.getTransform(xfB, t1);\n\n if (count === 1) {\n this.m_type = SeparationFunctionType.e_points;\n const localPointA = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n matrix.subVec2(this.m_axis, pointB, pointA);\n const s = matrix.normalizeVec2Length(this.m_axis);\n return s;\n\n } else if (cache.indexA[0] === cache.indexA[1]) {\n // Two points on B and one on A.\n this.m_type = SeparationFunctionType.e_faceB;\n const localPointB1 = proxyB.getVertex(cache.indexB[0]);\n const localPointB2 = proxyB.getVertex(cache.indexB[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointB2, localPointB1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n const localPointA = proxyA.getVertex(cache.indexA[0]);\n const pointA = Transform.mulVec2(xfA, localPointA);\n\n let s = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n\n } else {\n // Two points on A and one or two points on B.\n this.m_type = SeparationFunctionType.e_faceA;\n const localPointA1 = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointA2 = this.m_proxyA.getVertex(cache.indexA[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointA2, localPointA1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n let s = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n }\n }\n\n compute(find: boolean, t: number): number {\n // It was findMinSeparation and evaluate\n this.m_sweepA.getTransform(xfA, t);\n this.m_sweepB.getTransform(xfB, t);\n\n switch (this.m_type) {\n case SeparationFunctionType.e_points: {\n if (find) {\n matrix.derotVec2(axisA, xfA.q, this.m_axis);\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, this.m_axis));\n\n this.indexA = this.m_proxyA.getSupport(axisA);\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, this.m_axis) - matrix.dotVec2(pointA, this.m_axis);\n return sep;\n }\n\n case SeparationFunctionType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexA = -1;\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n return sep;\n }\n\n case SeparationFunctionType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisA, xfA.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexB = -1;\n this.indexA = this.m_proxyA.getSupport(axisA);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.transformVec2(pointA, xfA, localPointA);\n\n const sep = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n return sep;\n }\n\n default:\n _ASSERT && console.assert(false);\n if (find) {\n this.indexA = -1;\n this.indexB = -1;\n }\n return 0.0;\n }\n }\n\n findMinSeparation(t: number): number {\n return this.compute(true, t);\n }\n\n evaluate(t: number): number {\n return this.compute(false, t);\n }\n}\n\n/** @internal */ const separationFunction = new SeparationFunction();\n\n// legacy exports\nTimeOfImpact.Input = TOIInput;\nTimeOfImpact.Output = TOIOutput;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { EPSILON } from \"../common/Math\";\nimport { Body } from \"./Body\";\nimport type { Contact } from \"./Contact\";\nimport { Joint } from \"./Joint\";\nimport { TimeOfImpact, TOIInput, TOIOutput, TOIOutputState } from \"../collision/TimeOfImpact\";\nimport { Distance, DistanceInput, DistanceOutput, SimplexCache } from \"../collision/Distance\";\nimport { World } from \"./World\";\nimport { Sweep } from \"../common/Sweep\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_min = Math.min;\n\n\nexport class TimeStep {\n /** time step */\n dt: number = 0;\n /** inverse time step (0 if dt == 0) */\n inv_dt: number = 0;\n velocityIterations: number = 0;\n positionIterations: number = 0;\n warmStarting: boolean = false;\n blockSolve: boolean = true;\n\n /** timestep ratio for variable timestep */\n inv_dt0: number = 0.0;\n /** dt * inv_dt0 */\n dtRatio: number = 1;\n\n reset(dt: number): void {\n if (this.dt > 0.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}\n\n// reuse\n/** @internal */ const s_subStep = new TimeStep();\n/** @internal */ const c = matrix.vec2(0, 0);\n/** @internal */ const v = matrix.vec2(0, 0);\n/** @internal */ const translation = matrix.vec2(0, 0);\n/** @internal */ const input = new TOIInput();\n/** @internal */ const output = new TOIOutput();\n/** @internal */ const backup = new Sweep();\n/** @internal */ const backup1 = new Sweep();\n/** @internal */ const backup2 = new Sweep();\n\n/**\n * Contact impulses for reporting. Impulses are used instead of forces because\n * sub-step forces may approach infinity for rigid body collisions. These match\n * up one-to-one with the contact points in Manifold.\n */\nexport class ContactImpulse {\n // TODO: merge with Contact class?\n\n private readonly contact: Contact;\n private readonly normals: number[];\n private readonly tangents: number[];\n\n constructor(contact: Contact) {\n this.contact = contact;\n this.normals = [];\n this.tangents = [];\n }\n\n recycle() {\n this.normals.length = 0;\n this.tangents.length = 0;\n }\n\n get normalImpulses(): number[] {\n const contact = this.contact;\n const normals = this.normals;\n normals.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n normals.push(contact.v_points[p].normalImpulse);\n }\n return normals;\n }\n\n get tangentImpulses(): number[] {\n const contact = this.contact;\n const tangents = this.tangents;\n tangents.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n tangents.push(contact.v_points[p].tangentImpulse);\n }\n return tangents;\n }\n}\n\n/**\n * Finds and solves islands. An island is a connected subset of the world.\n */\nexport class Solver {\n m_world: World;\n m_stack: Body[];\n m_bodies: Body[];\n m_contacts: Contact[];\n m_joints: Joint[];\n\n constructor(world: World) {\n this.m_world = world;\n this.m_stack = [];\n this.m_bodies = [];\n this.m_contacts = [];\n this.m_joints = [];\n }\n\n clear(): void {\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\n addBody(body: Body): void {\n _ASSERT && console.assert(body instanceof Body, \"Not a Body!\", body);\n this.m_bodies.push(body);\n // why?\n // body.c_position.c.setZero();\n // body.c_position.a = 0;\n // body.c_velocity.v.setZero();\n // body.c_velocity.w = 0;\n }\n\n addContact(contact: Contact): void {\n // _ASSERT && console.assert(contact instanceof Contact, 'Not a Contact!', contact);\n this.m_contacts.push(contact);\n }\n\n addJoint(joint: Joint): void {\n _ASSERT && console.assert(joint instanceof Joint, \"Not a Joint!\", joint);\n this.m_joints.push(joint);\n }\n\n solveWorld(step: TimeStep): void {\n const world = this.m_world;\n\n // Clear all the island flags.\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n }\n for (let c = world.m_contactList; c; c = c.m_next) {\n c.m_islandFlag = false;\n }\n for (let j = world.m_jointList; j; j = j.m_next) {\n j.m_islandFlag = false;\n }\n\n // Build and simulate all awake islands.\n const stack = this.m_stack;\n let loop = -1;\n for (let seed = world.m_bodyList; seed; seed = seed.m_next) {\n loop++;\n if (seed.m_islandFlag) {\n continue;\n }\n\n if (seed.isAwake() == false || seed.isActive() == false) {\n continue;\n }\n\n // The seed can be dynamic or kinematic.\n if (seed.isStatic()) {\n continue;\n }\n\n // Reset island and stack.\n this.clear();\n\n stack.push(seed);\n\n seed.m_islandFlag = true;\n\n // Perform a depth first search (DFS) on the constraint graph.\n while (stack.length > 0) {\n // Grab the next body off the stack and add it to the island.\n const b = stack.pop();\n _ASSERT && console.assert(b.isActive() == true);\n this.addBody(b);\n\n // Make sure the body is awake (without resetting sleep timer).\n b.m_awakeFlag = true;\n\n // To keep islands as small as possible, we don't\n // propagate islands across static bodies.\n if (b.isStatic()) {\n continue;\n }\n\n // Search all contacts connected to this body.\n for (let ce = b.m_contactList; ce; ce = ce.next) {\n const contact = ce.contact;\n\n // Has this contact already been added to an island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Is this contact solid and touching?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n this.addContact(contact);\n contact.m_islandFlag = true;\n\n const other = ce.other;\n\n // Was the other body already added to this island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n\n // Search all joints connect to this body.\n for (let je = b.m_jointList; je; je = je.next) {\n if (je.joint.m_islandFlag == true) {\n continue;\n }\n\n const other = je.other;\n\n // Don't simulate joints connected to inactive bodies.\n if (other.isActive() == false) {\n continue;\n }\n\n this.addJoint(je.joint);\n je.joint.m_islandFlag = true;\n\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n }\n\n this.solveIsland(step);\n\n // Post solve cleanup.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n // Allow static bodies to participate in other islands.\n // TODO: are they added at all?\n const b = this.m_bodies[i];\n if (b.isStatic()) {\n b.m_islandFlag = false;\n }\n }\n }\n }\n\n solveIsland(step: TimeStep): void {\n // B2: Island Solve\n const world = this.m_world;\n const gravity = world.m_gravity;\n const allowSleep = world.m_allowSleep;\n\n const h = step.dt;\n\n // Integrate velocities and apply damping. Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.m_sweep.c);\n const a = body.m_sweep.a;\n matrix.copyVec2(v, body.m_linearVelocity);\n let w = body.m_angularVelocity;\n\n // Store positions for continuous collision.\n matrix.copyVec2(body.m_sweep.c0, body.m_sweep.c);\n body.m_sweep.a0 = body.m_sweep.a;\n\n if (body.isDynamic()) {\n // Integrate velocities.\n matrix.plusScaleVec2(v, h * body.m_gravityScale, gravity);\n matrix.plusScaleVec2(v, h * body.m_invMass, body.m_force);\n w += h * body.m_invI * body.m_torque;\n /**\n *
\n         * Apply damping.\n         * ODE: dv/dt + c * v = 0\n         * Solution: v(t) = v0 * exp(-c * t)\n         * Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)\n         * v2 = exp(-c * dt) * v1\n         * Pade approximation:\n         * v2 = v1 * 1 / (1 + c * dt)\n         * 
\n */\n matrix.scaleVec2(v, 1.0 / (1.0 + h * body.m_linearDamping), v);\n w *= 1.0 / (1.0 + h * body.m_angularDamping);\n }\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(step);\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(step);\n }\n\n if (step.warmStarting) {\n // Warm start.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.warmStartConstraint(step);\n }\n }\n\n for (let i = 0; i < this.m_joints.length; ++i) {\n const joint = this.m_joints[i];\n joint.initVelocityConstraints(step);\n }\n\n // Solve velocity constraints\n for (let i = 0; i < step.velocityIterations; ++i) {\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n joint.solveVelocityConstraints(step);\n }\n\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(step);\n }\n }\n\n // Store impulses for warm starting\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.storeConstraintImpulses(step);\n }\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n // Solve position constraints\n let positionSolved = false;\n for (let i = 0; i < step.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraint(step);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -3.0 * Settings.linearSlop;\n\n let jointsOkay = true;\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n const jointOkay = joint.solvePositionConstraints(step);\n jointsOkay = jointsOkay && jointOkay;\n }\n\n if (contactsOkay && jointsOkay) {\n // Exit early if the position errors are small.\n positionSolved = true;\n break;\n }\n }\n\n // Copy state buffers back to the bodies\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(body.m_sweep.c, body.c_position.c);\n body.m_sweep.a = body.c_position.a;\n matrix.copyVec2(body.m_linearVelocity, body.c_velocity.v);\n body.m_angularVelocity = body.c_velocity.w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n\n if (allowSleep) {\n let minSleepTime = Infinity;\n\n const linTolSqr = Settings.linearSleepToleranceSqr;\n const angTolSqr = Settings.angularSleepToleranceSqr;\n\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n if (body.isStatic()) {\n continue;\n }\n\n if ((body.m_autoSleepFlag == false)\n || (body.m_angularVelocity * body.m_angularVelocity > angTolSqr)\n || (matrix.lengthSqrVec2(body.m_linearVelocity) > linTolSqr)) {\n body.m_sleepTime = 0.0;\n minSleepTime = 0.0;\n } else {\n body.m_sleepTime += h;\n minSleepTime = math_min(minSleepTime, body.m_sleepTime);\n }\n }\n\n if (minSleepTime >= Settings.timeToSleep && positionSolved) {\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.setAwake(false);\n }\n }\n }\n }\n\n /**\n * Find TOI contacts and solve them.\n */\n solveWorldTOI(step: TimeStep): void {\n const world = this.m_world;\n\n if (world.m_stepComplete) {\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n b.m_sweep.alpha0 = 0.0;\n }\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Invalidate TOI\n c.m_toiFlag = false;\n c.m_islandFlag = false;\n c.m_toiCount = 0;\n c.m_toi = 1.0;\n }\n }\n\n // Find TOI events and solve them.\n while (true) {\n // Find the first TOI.\n let minContact: Contact | null = null;\n let minAlpha = 1.0;\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Is this contact disabled?\n if (c.isEnabled() == false) {\n continue;\n }\n\n // Prevent excessive sub-stepping.\n if (c.m_toiCount > Settings.maxSubSteps) {\n continue;\n }\n\n let alpha = 1.0;\n if (c.m_toiFlag) {\n // This contact has a valid cached TOI.\n alpha = c.m_toi;\n } else {\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n // Is there a sensor?\n if (fA.isSensor() || fB.isSensor()) {\n continue;\n }\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n _ASSERT && console.assert(bA.isDynamic() || bB.isDynamic());\n\n const activeA = bA.isAwake() && !bA.isStatic();\n const activeB = bB.isAwake() && !bB.isStatic();\n\n // Is at least one body active (awake and dynamic or kinematic)?\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const collideA = bA.isBullet() || !bA.isDynamic();\n const collideB = bB.isBullet() || !bB.isDynamic();\n\n // Are these two non-bullet dynamic bodies?\n if (collideA == false && collideB == false) {\n continue;\n }\n\n // Compute the TOI for this contact.\n // Put the sweeps onto the same time interval.\n let alpha0 = bA.m_sweep.alpha0;\n\n if (bA.m_sweep.alpha0 < bB.m_sweep.alpha0) {\n alpha0 = bB.m_sweep.alpha0;\n bA.m_sweep.advance(alpha0);\n } else if (bB.m_sweep.alpha0 < bA.m_sweep.alpha0) {\n alpha0 = bA.m_sweep.alpha0;\n bB.m_sweep.advance(alpha0);\n }\n\n _ASSERT && console.assert(alpha0 < 1.0);\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const sweepA = bA.m_sweep;\n const sweepB = bB.m_sweep;\n\n // Compute the time of impact in interval [0, minTOI]\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.sweepA.set(bA.m_sweep);\n input.sweepB.set(bB.m_sweep);\n input.tMax = 1.0;\n\n TimeOfImpact(output, input);\n\n // Beta is the fraction of the remaining portion of the [time?].\n const beta = output.t;\n if (output.state == TOIOutputState.e_touching) {\n alpha = math_min(alpha0 + (1.0 - alpha0) * beta, 1.0);\n } else {\n alpha = 1.0;\n }\n\n c.m_toi = alpha;\n c.m_toiFlag = true;\n }\n\n if (alpha < minAlpha) {\n // This is the minimum TOI found so far.\n minContact = c;\n minAlpha = alpha;\n }\n }\n\n if (minContact == null || 1.0 - 10.0 * EPSILON < minAlpha) {\n // No more TOI events. Done!\n world.m_stepComplete = true;\n break;\n }\n\n // Advance the bodies to the TOI.\n const fA = minContact.getFixtureA();\n const fB = minContact.getFixtureB();\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n backup1.set(bA.m_sweep);\n backup2.set(bB.m_sweep);\n\n bA.advance(minAlpha);\n bB.advance(minAlpha);\n\n // The TOI contact likely has some new contact points.\n minContact.update(world);\n minContact.m_toiFlag = false;\n ++minContact.m_toiCount;\n\n // Is the contact solid?\n if (minContact.isEnabled() == false || minContact.isTouching() == false) {\n // Restore the sweeps.\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\n bA.setAwake(true);\n bB.setAwake(true);\n\n // Build the island\n this.clear();\n this.addBody(bA);\n this.addBody(bB);\n this.addContact(minContact);\n\n bA.m_islandFlag = true;\n bB.m_islandFlag = true;\n minContact.m_islandFlag = true;\n\n // Get contacts on bodyA and bodyB.\n const bodies = [ bA, bB ];\n for (let i = 0; i < bodies.length; ++i) {\n const body = bodies[i];\n if (body.isDynamic()) {\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n // if (this.m_bodyCount == this.m_bodyCapacity) { break; }\n // if (this.m_contactCount == this.m_contactCapacity) { break; }\n\n const contact = ce.contact;\n\n // Has this contact already been added to the island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Only add if either is static, kinematic or bullet.\n const other = ce.other;\n if (other.isDynamic() && !body.isBullet() && !other.isBullet()) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n // Tentatively advance the body to the TOI.\n backup.set(other.m_sweep);\n if (other.m_islandFlag == false) {\n other.advance(minAlpha);\n }\n\n // Update the contact points\n contact.update(world);\n\n // Was the contact disabled by the user?\n // Are there contact points?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n other.m_sweep.set(backup);\n other.synchronizeTransform();\n continue;\n }\n\n // Add the contact to the island\n contact.m_islandFlag = true;\n this.addContact(contact);\n\n // Has the other body already been added to the island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // Add the other body to the island.\n other.m_islandFlag = true;\n\n if (!other.isStatic()) {\n other.setAwake(true);\n }\n\n this.addBody(other);\n }\n }\n }\n\n s_subStep.reset((1.0 - minAlpha) * step.dt);\n s_subStep.dtRatio = 1.0;\n s_subStep.positionIterations = 20;\n s_subStep.velocityIterations = step.velocityIterations;\n s_subStep.warmStarting = false;\n\n this.solveIslandTOI(s_subStep, bA, bB);\n\n // Reset island flags and synchronize broad-phase proxies.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.m_islandFlag = false;\n\n if (!body.isDynamic()) {\n continue;\n }\n\n body.synchronizeFixtures();\n\n // Invalidate all contact TOIs on this displaced body.\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n ce.contact.m_toiFlag = false;\n ce.contact.m_islandFlag = false;\n }\n }\n\n // Commit fixture proxy movements to the broad-phase so that new contacts\n // are created.\n // Also, some contacts can be destroyed.\n world.findNewContacts();\n\n if (world.m_subStepping) {\n world.m_stepComplete = false;\n break;\n }\n }\n }\n\n solveIslandTOI(subStep: TimeStep, toiA: Body, toiB: Body): void {\n\n // Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n matrix.copyVec2(body.c_position.c, body.m_sweep.c);\n body.c_position.a = body.m_sweep.a;\n matrix.copyVec2(body.c_velocity.v, body.m_linearVelocity);\n body.c_velocity.w = body.m_angularVelocity;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(subStep);\n }\n\n // Solve position constraints.\n for (let i = 0; i < subStep.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -1.5 * Settings.linearSlop;\n if (contactsOkay) {\n break;\n }\n }\n\n if (false) {\n // Is the new position really safe?\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const c = this.m_contacts[i];\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const input = new DistanceInput();\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.transformA.set(bA.getTransform());\n input.transformB.set(bB.getTransform());\n input.useRadii = false;\n\n const output = new DistanceOutput();\n const cache = new SimplexCache();\n Distance(output, cache, input);\n\n if (output.distance == 0 || cache.count == 3) {\n cache.count += 0;\n }\n }\n }\n\n // Leap of faith to new safe state.\n matrix.copyVec2(toiA.m_sweep.c0, toiA.c_position.c);\n toiA.m_sweep.a0 = toiA.c_position.a;\n matrix.copyVec2(toiB.m_sweep.c0, toiB.c_position.c);\n toiB.m_sweep.a0 = toiB.c_position.a;\n\n // No warm starting is needed for TOI events because warm\n // starting impulses were applied in the discrete solver.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(subStep);\n }\n\n // Solve velocity constraints.\n for (let i = 0; i < subStep.velocityIterations; ++i) {\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(subStep);\n }\n }\n\n // Don't store the TOI contact forces for warm starting\n // because they can be quite large.\n\n const h = subStep.dt;\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n\n // Sync bodies\n matrix.copyVec2(body.m_sweep.c, c);\n body.m_sweep.a = a;\n matrix.copyVec2(body.m_linearVelocity, v);\n body.m_angularVelocity = w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n }\n\n /** @internal */\n postSolveIsland(): void {\n for (let c = 0; c < this.m_contacts.length; ++c) {\n const contact = this.m_contacts[c];\n this.m_world.postSolve(contact, contact.m_impulse);\n }\n }\n}\n\n// @ts-ignore\nSolver.TimeStep = TimeStep;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 2-by-2 matrix. Stored in column-major order.\n */\nexport class Mat22 {\n ex: Vec2;\n ey: Vec2;\n\n constructor(a: number, b: number, c: number, d: number);\n constructor(a: { x: number; y: number }, b: { x: number; y: number });\n constructor();\n constructor(a?, b?, c?, d?) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec2.clone(a);\n this.ey = Vec2.clone(b);\n } else if (typeof a === \"number\") {\n this.ex = Vec2.neo(a, c);\n this.ey = Vec2.neo(b, d);\n } else {\n this.ex = Vec2.zero();\n this.ey = Vec2.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat22.isValid(o), \"Invalid Mat22!\", o);\n }\n\n set(a: Mat22): void;\n set(a: Vec2Value, b: Vec2Value): void;\n set(a: number, b: number, c: number, d: number): void;\n set(a, b?, c?, d?): void {\n if (typeof a === \"number\" && typeof b === \"number\" && typeof c === \"number\"\n && typeof d === \"number\") {\n this.ex.setNum(a, c);\n this.ey.setNum(b, d);\n\n } else if (typeof a === \"object\" && typeof b === \"object\") {\n this.ex.setVec2(a);\n this.ey.setVec2(b);\n\n } else if (typeof a === \"object\") {\n _ASSERT && Mat22.assert(a);\n this.ex.setVec2(a.ex);\n this.ey.setVec2(a.ey);\n\n } else {\n _ASSERT && console.assert(false);\n }\n }\n\n setIdentity(): void {\n this.ex.x = 1.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 1.0;\n }\n\n setZero(): void {\n this.ex.x = 0.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 0.0;\n }\n\n getInverse(): Mat22 {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const imx = new Mat22();\n imx.ex.x = det * d;\n imx.ey.x = -det * b;\n imx.ex.y = -det * c;\n imx.ey.y = det * a;\n return imx;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const w = Vec2.zero();\n w.x = det * (d * v.x - b * v.y);\n w.y = det * (a * v.y - c * v.x);\n return w;\n }\n\n /**\n * Multiply a matrix times a vector. If a rotation matrix is provided, then this\n * transforms the vector from one frame to another.\n */\n static mul(mx: Mat22, my: Mat22): Mat22;\n static mul(mx: Mat22, v: Vec2Value): Vec2;\n static mul(mx, v) {\n if (v && \"x\" in v && \"y\" in v) {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n }\n\n static mulMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n /**\n * Multiply a matrix transpose times a vector. If a rotation matrix is provided,\n * then this transforms the vector from one frame to another (inverse\n * transform).\n */\n static mulT(mx: Mat22, my: Mat22): Mat22;\n static mulT(mx: Mat22, v: Vec2Value): Vec2;\n static mulT(mx, v) {\n if (v && \"x\" in v && \"y\" in v) { // Vec2\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulTVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n }\n\n static mulTMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n static abs(mx: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n return new Mat22(Vec2.abs(mx.ex), Vec2.abs(mx.ey));\n }\n\n static add(mx1: Mat22, mx2: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx1);\n _ASSERT && Mat22.assert(mx2);\n return new Mat22(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey));\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\nimport { EPSILON } from \"../common/Math\";\n\n\n/** @internal */ const math_sqrt = Math.sqrt;\n\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const dist = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n\nexport enum ManifoldType {\n e_unset = -1,\n e_circles = 0,\n e_faceA = 1,\n e_faceB = 2\n}\n\nexport enum ContactFeatureType {\n e_unset = -1,\n e_vertex = 0,\n e_face = 1\n}\n\n/**\n * This is used for determining the state of contact points.\n */\n export enum PointState {\n /** Point does not exist */\n nullState = 0,\n /** Point was added in the update */\n addState = 1,\n /** Point persisted across the update */\n persistState = 2,\n /** Point was removed in the update */\n removeState = 3\n}\n\n/**\n * Used for computing contact manifolds.\n */\n export class ClipVertex {\n v = matrix.vec2(0, 0);\n id: ContactID = new ContactID();\n\n set(o: ClipVertex): void {\n matrix.copyVec2(this.v, o.v);\n this.id.set(o.id);\n }\n recycle() {\n matrix.zeroVec2(this.v);\n this.id.recycle();\n }\n}\n\n/**\n * A manifold for two touching convex shapes. Manifolds are created in `evaluate`\n * method of Contact subclasses.\n *\n * Supported manifold types are e_faceA or e_faceB for clip point versus plane\n * with radius and e_circles point versus point with radius.\n *\n * We store contacts in this way so that position correction can account for\n * movement, which is critical for continuous physics. All contact scenarios\n * must be expressed in one of these types. This structure is stored across time\n * steps, so we keep it small.\n */\nexport class Manifold {\n type: ManifoldType;\n\n /**\n * Usage depends on manifold type:\n * - circles: not used\n * - faceA: the normal on polygonA\n * - faceB: the normal on polygonB\n */\n localNormal = matrix.vec2(0, 0);\n\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleA\n * - faceA: the center of faceA\n * - faceB: the center of faceB\n */\n localPoint = matrix.vec2(0, 0);\n\n /** The points of contact */\n points: ManifoldPoint[] = [ new ManifoldPoint(), new ManifoldPoint() ];\n\n /** The number of manifold points */\n pointCount: number = 0;\n\n set(that: Manifold): void {\n this.type = that.type;\n matrix.copyVec2(this.localNormal, that.localNormal);\n matrix.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\n recycle(): void {\n this.type = ManifoldType.e_unset;\n matrix.zeroVec2(this.localNormal);\n matrix.zeroVec2(this.localPoint);\n this.pointCount = 0;\n this.points[0].recycle();\n this.points[1].recycle();\n }\n\n /**\n * Evaluate the manifold with supplied transforms. This assumes modest motion\n * from the original state. This does not change the point count, impulses, etc.\n * The radii must come from the shapes that generated the manifold.\n */\n getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold {\n if (this.pointCount == 0) {\n return wm;\n }\n\n wm = wm || new WorldManifold();\n\n wm.pointCount = this.pointCount;\n\n const normal = wm.normal;\n const points = wm.points;\n const separations = wm.separations;\n\n switch (this.type) {\n case ManifoldType.e_circles: {\n matrix.setVec2(normal, 1.0, 0.0);\n const manifoldPoint = this.points[0];\n matrix.transformVec2(pointA, xfA, this.localPoint);\n matrix.transformVec2(pointB, xfB, manifoldPoint.localPoint);\n matrix.subVec2(dist, pointB, pointA);\n const lengthSqr = matrix.lengthSqrVec2(dist);\n if (lengthSqr > EPSILON * EPSILON) {\n const length = math_sqrt(lengthSqr);\n matrix.scaleVec2(normal, 1 / length, dist);\n }\n matrix.combine2Vec2(cA, 1, pointA, radiusA, normal);\n matrix.combine2Vec2(cB, 1, pointB, -radiusB, normal);\n matrix.combine2Vec2(points[0], 0.5, cA, 0.5, cB);\n separations[0] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.localNormal);\n matrix.transformVec2(planePoint, xfA, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfB, manifoldPoint.localPoint);\n matrix.combine2Vec2(cA, 1, clipPoint, radiusA - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cB, 1, clipPoint, -radiusB, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n }\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.localNormal);\n matrix.transformVec2(planePoint, xfB, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfA, manifoldPoint.localPoint);\n matrix.combine2Vec2(cB, 1, clipPoint, radiusB - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cA, 1, clipPoint, -radiusA, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cA, cB), normal);\n }\n // Ensure normal points from A to B.\n matrix.negVec2(normal);\n break;\n }\n }\n\n return wm;\n }\n\n static clipSegmentToLine = clipSegmentToLine;\n static ClipVertex = ClipVertex;\n static getPointStates = getPointStates;\n static PointState = PointState;\n}\n\n/**\n * A manifold point is a contact point belonging to a contact manifold. It holds\n * details related to the geometry and dynamics of the contact points.\n *\n * This structure is stored across time steps, so we keep it small.\n *\n * Note: impulses are used for internal caching and may not provide reliable\n * contact forces, especially for high speed collisions.\n */\nexport class ManifoldPoint {\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleB\n * - faceA: the local center of circleB or the clip point of polygonB\n * - faceB: the clip point of polygonA\n */\n localPoint = matrix.vec2(0, 0);\n /**\n * The non-penetration impulse\n */\n normalImpulse = 0;\n /**\n * The friction impulse\n */\n tangentImpulse = 0;\n /**\n * Uniquely identifies a contact point between two shapes to facilitate warm starting\n */\n readonly id = new ContactID();\n\n set(that: ManifoldPoint): void {\n matrix.copyVec2(this.localPoint, that.localPoint);\n this.normalImpulse = that.normalImpulse;\n this.tangentImpulse = that.tangentImpulse;\n this.id.set(that.id);\n }\n\n recycle(): void {\n matrix.zeroVec2(this.localPoint);\n this.normalImpulse = 0;\n this.tangentImpulse = 0;\n this.id.recycle();\n }\n}\n\n/**\n * Contact ids to facilitate warm starting.\n * \n * ContactFeature: The features that intersect to form the contact point.\n */\nexport class ContactID {\n\n /**\n * Used to quickly compare contact ids.\n */\n key = -1;\n\n /** ContactFeature index on shapeA */\n indexA = -1;\n\n /** ContactFeature index on shapeB */\n indexB = -1;\n\n /** ContactFeature type on shapeA */\n typeA = ContactFeatureType.e_unset;\n\n /** ContactFeature type on shapeB */\n typeB = ContactFeatureType.e_unset;\n\n setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void {\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\n set(that: ContactID): void {\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\n swapFeatures(): void {\n const indexA = this.indexA;\n const indexB = this.indexB;\n const typeA = this.typeA;\n const 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\n recycle(): void {\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}\n\n/**\n * This is used to compute the current state of a contact manifold.\n */\nexport class WorldManifold {\n /** World vector pointing from A to B */\n normal = matrix.vec2(0, 0);\n\n /** World contact point (point of intersection) */\n points = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints]\n\n /** A negative value indicates overlap, in meters */\n separations = [0, 0]; // [maxManifoldPoints]\n\n /** The number of manifold points */\n pointCount = 0;\n\n recycle() {\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.points[0]);\n matrix.zeroVec2(this.points[1]);\n this.separations[0] = 0;\n this.separations[1] = 0;\n this.pointCount = 0;\n }\n}\n\n/**\n * Compute the point states given two manifolds. The states pertain to the\n * transition from manifold1 to manifold2. So state1 is either persist or remove\n * while state2 is either add or persist.\n */\nexport function getPointStates(\n state1: PointState[],\n state2: PointState[],\n manifold1: Manifold,\n manifold2: Manifold\n): void {\n // state1, state2: PointState[Settings.maxManifoldPoints]\n\n // for (var i = 0; i < Settings.maxManifoldPoints; ++i) {\n // state1[i] = PointState.nullState;\n // state2[i] = PointState.nullState;\n // }\n\n // Detect persists and removes.\n for (let i = 0; i < manifold1.pointCount; ++i) {\n const id = manifold1.points[i].id;\n\n state1[i] = PointState.removeState;\n\n for (let 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\n // Detect persists and adds.\n for (let i = 0; i < manifold2.pointCount; ++i) {\n const id = manifold2.points[i].id;\n\n state2[i] = PointState.addState;\n\n for (let 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}\n\n/**\n * Clipping for contact manifolds. Sutherland-Hodgman clipping.\n */\nexport function clipSegmentToLine(\n vOut: ClipVertex[],\n vIn: ClipVertex[],\n normal: Vec2Value,\n offset: number,\n vertexIndexA: number\n): number {\n // Start with no output points\n let numOut = 0;\n\n // Calculate the distance of end points to the line\n const distance0 = matrix.dotVec2(normal, vIn[0].v) - offset;\n const distance1 = matrix.dotVec2(normal, vIn[1].v) - offset;\n\n // If the points are behind the plane\n if (distance0 <= 0.0)\n vOut[numOut++].set(vIn[0]);\n if (distance1 <= 0.0)\n vOut[numOut++].set(vIn[1]);\n\n // If the points are on different sides of the plane\n if (distance0 * distance1 < 0.0) {\n // Find intersection point of edge and plane\n const interp = distance0 / (distance0 - distance1);\n matrix.combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v);\n\n // VertexA is hitting edgeB.\n vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face);\n ++numOut;\n }\n\n return numOut;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { ShapeType } from \"../collision/Shape\";\nimport { clamp } from \"../common/Math\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Mat22 } from \"../common/Mat22\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Manifold, ManifoldType, WorldManifold } from \"../collision/Manifold\";\nimport { testOverlap } from \"../collision/Distance\";\nimport { Fixture } from \"./Fixture\";\nimport { Body } from \"./Body\";\nimport { ContactImpulse, TimeStep } from \"./Solver\";\nimport { Pool } from \"../util/Pool\";\nimport { getTransform } from \"./Position\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n// Solver debugging is normally disabled because the block solver sometimes has to deal with a poorly conditioned effective mass matrix.\n/** @internal */ const DEBUG_SOLVER = false;\n\n/** @internal */ const contactPool = new Pool({\n create() {\n return new Contact();\n },\n release(contact: Contact) {\n contact.recycle();\n }\n});\n\n/** @internal */ const oldManifold = new Manifold();\n\n/** @internal */ const worldManifold = new WorldManifold();\n\n/**\n * A contact edge is used to connect bodies and contacts together in a contact\n * graph where each body is a node and each contact is an edge. A contact edge\n * belongs to a doubly linked list maintained in each attached body. Each\n * contact has two contact nodes, one for each attached body.\n */\nexport class ContactEdge {\n contact: Contact;\n prev: ContactEdge | null = null;\n next: ContactEdge | null = null;\n other: Body | null = null;\n constructor(contact: Contact) {\n this.contact = contact;\n }\n\n /** @internal */\n recycle() {\n this.prev = null;\n this.next = null;\n this.other = null;\n }\n}\n\nexport type EvaluateFunction = (\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number\n) => void;\n\n/**\n * Friction mixing law. The idea is to allow either fixture to drive the\n * friction to zero. For example, anything slides on ice.\n */\nexport function mixFriction(friction1: number, friction2: number): number {\n return math_sqrt(friction1 * friction2);\n}\n\n/**\n * Restitution mixing law. The idea is allow for anything to bounce off an\n * inelastic surface. For example, a superball bounces on anything.\n */\nexport function mixRestitution(restitution1: number, restitution2: number): number {\n return restitution1 > restitution2 ? restitution1 : restitution2;\n}\n\n// TODO: move this to Settings?\n/** @internal */ const s_registers = [];\n\n// TODO: merge with ManifoldPoint?\nexport class VelocityConstraintPoint {\n rA = matrix.vec2(0, 0);\n rB = matrix.vec2(0, 0);\n normalImpulse = 0;\n tangentImpulse = 0;\n normalMass = 0;\n tangentMass = 0;\n velocityBias = 0;\n\n recycle() {\n matrix.zeroVec2(this.rA);\n matrix.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}\n\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const vA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const vB = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const rA = matrix.vec2(0, 0);\n/** @internal */ const rB = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const point = matrix.vec2(0, 0);\n/** @internal */ const dv = matrix.vec2(0, 0);\n/** @internal */ const dv1 = matrix.vec2(0, 0);\n/** @internal */ const dv2 = matrix.vec2(0, 0);\n/** @internal */ const b = matrix.vec2(0, 0);\n/** @internal */ const a = matrix.vec2(0, 0);\n/** @internal */ const x = matrix.vec2(0, 0);\n/** @internal */ const d = matrix.vec2(0, 0);\n/** @internal */ const P1 = matrix.vec2(0, 0);\n/** @internal */ const P2 = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * The class manages contact between two shapes. A contact exists for each\n * overlapping AABB in the broad-phase (except if filtered). Therefore a contact\n * object may exist that has no contact points.\n */\nexport class Contact {\n // Nodes for connecting bodies.\n /** @internal */ m_nodeA = new ContactEdge(this);\n /** @internal */ m_nodeB = new ContactEdge(this);\n /** @internal */ m_fixtureA: Fixture | null = null;\n /** @internal */ m_fixtureB: Fixture | null = null;\n /** @internal */ m_indexA = -1;\n /** @internal */ m_indexB = -1;\n /** @internal */ m_evaluateFcn: EvaluateFunction | null = null;\n /** @internal */ m_manifold: Manifold = new Manifold();\n /** @internal */ m_prev: Contact | null = null;\n /** @internal */ m_next: Contact | null = null;\n /** @internal */ m_toi = 1.0;\n /** @internal */ m_toiCount = 0;\n // This contact has a valid TOI in m_toi\n /** @internal */ m_toiFlag = false;\n /** @internal */ m_friction = 0.0;\n /** @internal */ m_restitution = 0.0;\n /** @internal */ m_tangentSpeed = 0.0;\n /** @internal This contact can be disabled (by user) */\n m_enabledFlag = true;\n /** @internal Used when crawling contact graph when forming islands. */\n m_islandFlag = false;\n /** @internal Set when the shapes are touching. */\n m_touchingFlag = false;\n /** @internal This contact needs filtering because a fixture filter was changed. */\n m_filterFlag = false;\n /** @internal This bullet contact had a TOI event */\n m_bulletHitFlag = false;\n\n /** @internal Contact reporting impulse object cache */\n m_impulse: ContactImpulse = new ContactImpulse(this);\n\n // VelocityConstraint\n /** @internal */ v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; // [maxManifoldPoints];\n /** @internal */ v_normal = matrix.vec2(0, 0);\n /** @internal */ v_normalMass: Mat22 = new Mat22();\n /** @internal */ v_K: Mat22 = new Mat22();\n /** @internal */ v_pointCount = 0;\n /** @internal */ v_tangentSpeed = 0;\n /** @internal */ v_friction = 0;\n /** @internal */ v_restitution = 0;\n /** @internal */ v_invMassA = 0;\n /** @internal */ v_invMassB = 0;\n /** @internal */ v_invIA = 0;\n /** @internal */ v_invIB = 0;\n\n // PositionConstraint\n /** @internal */ p_localPoints = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints];\n /** @internal */ p_localNormal = matrix.vec2(0, 0);\n /** @internal */ p_localPoint = matrix.vec2(0, 0);\n /** @internal */ p_localCenterA = matrix.vec2(0, 0);\n /** @internal */ p_localCenterB = matrix.vec2(0, 0);\n /** @internal */ p_type = ManifoldType.e_unset;\n /** @internal */ p_radiusA = 0;\n /** @internal */ p_radiusB = 0;\n /** @internal */ p_pointCount = 0;\n /** @internal */ p_invMassA = 0;\n /** @internal */ p_invMassB = 0;\n /** @internal */ p_invIA = 0;\n /** @internal */ p_invIB = 0;\n\n /** @internal */ \n initialize(fA: Fixture, indexA: number, fB: Fixture, indexB: number, evaluateFcn: EvaluateFunction) {\n this.m_fixtureA = fA;\n this.m_fixtureB = fB;\n\n this.m_indexA = indexA;\n this.m_indexB = indexB;\n\n this.m_evaluateFcn = evaluateFcn;\n\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\n /** @internal */ \n recycle() {\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\n this.m_impulse.recycle();\n\n // VelocityConstraint\n for(const point of this.v_points) {\n point.recycle();\n }\n matrix.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\n // PositionConstraint\n for(const point of this.p_localPoints) {\n matrix.zeroVec2(point);\n }\n matrix.zeroVec2(this.p_localNormal);\n matrix.zeroVec2(this.p_localPoint);\n matrix.zeroVec2(this.p_localCenterA);\n matrix.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\n initConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n const manifold = this.m_manifold;\n\n const pointCount = manifold.pointCount;\n _ASSERT && console.assert(pointCount > 0);\n\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\n this.v_friction = this.m_friction;\n this.v_restitution = this.m_restitution;\n this.v_tangentSpeed = this.m_tangentSpeed;\n\n this.v_pointCount = pointCount;\n\n this.v_K.setZero();\n this.v_normalMass.setZero();\n\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 matrix.copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter);\n matrix.copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter);\n\n this.p_radiusA = shapeA.m_radius;\n this.p_radiusB = shapeB.m_radius;\n\n this.p_type = manifold.type;\n matrix.copyVec2(this.p_localNormal, manifold.localNormal);\n matrix.copyVec2(this.p_localPoint, manifold.localPoint);\n this.p_pointCount = pointCount;\n\n for (let j = 0; j < Settings.maxManifoldPoints; ++j) {\n this.v_points[j].recycle();\n matrix.zeroVec2(this.p_localPoints[j]);\n }\n\n for (let j = 0; j < pointCount; ++j) {\n const cp = manifold.points[j];\n const 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 matrix.copyVec2(this.p_localPoints[j], cp.localPoint);\n }\n }\n\n /**\n * Get the contact manifold. Do not modify the manifold unless you understand\n * the internals of the library.\n */\n getManifold(): Manifold {\n return this.m_manifold;\n }\n\n /**\n * Get the world manifold.\n */\n getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n return this.m_manifold.getWorldManifold(\n worldManifold,\n bodyA.getTransform(), shapeA.m_radius,\n bodyB.getTransform(), shapeB.m_radius\n );\n }\n\n /**\n * Enable/disable this contact. This can be used inside the pre-solve contact\n * listener. The contact is only disabled for the current time step (or sub-step\n * in continuous collisions).\n */\n setEnabled(flag: boolean): void {\n this.m_enabledFlag = !!flag;\n }\n\n /**\n * Has this contact been disabled?\n */\n isEnabled(): boolean {\n return this.m_enabledFlag;\n }\n\n /**\n * Is this contact touching?\n */\n isTouching(): boolean {\n return this.m_touchingFlag;\n }\n\n /**\n * Get the next contact in the world's contact list.\n */\n getNext(): Contact | null {\n return this.m_next;\n }\n\n /**\n * Get fixture A in this contact.\n */\n getFixtureA(): Fixture {\n return this.m_fixtureA;\n }\n\n /**\n * Get fixture B in this contact.\n */\n getFixtureB(): Fixture {\n return this.m_fixtureB;\n }\n\n /**\n * Get the child primitive index for fixture A.\n */\n getChildIndexA(): number {\n return this.m_indexA;\n }\n\n /**\n * Get the child primitive index for fixture B.\n */\n getChildIndexB(): number {\n return this.m_indexB;\n }\n\n /**\n * Flag this contact for filtering. Filtering will occur the next time step.\n */\n flagForFiltering(): void {\n this.m_filterFlag = true;\n }\n\n /**\n * Override the default friction mixture. You can call this in\n * \"pre-solve\" callback. This value persists until set or reset.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the friction.\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Reset the friction mixture to the default value.\n */\n resetFriction(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction);\n }\n\n /**\n * Override the default restitution mixture. You can call this in\n * \"pre-solve\" callback. The value persists until you set or reset.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Get the restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Reset the restitution to the default value.\n */\n resetRestitution(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution);\n }\n\n /**\n * Set the desired tangent speed for a conveyor belt behavior. In meters per\n * second.\n */\n setTangentSpeed(speed: number): void {\n this.m_tangentSpeed = speed;\n }\n\n /**\n * Get the desired tangent speed. In meters per second.\n */\n getTangentSpeed(): number {\n return this.m_tangentSpeed;\n }\n\n /**\n * Called by Update method, and implemented by subclasses.\n */\n evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_evaluateFcn(manifold, xfA, fixtureA, this.m_indexA, xfB, fixtureB, this.m_indexB);\n }\n\n /**\n * Updates the contact manifold and touching status.\n *\n * Note: do not assume the fixture AABBs are overlapping or are valid.\n *\n * @param listener.beginContact\n * @param listener.endContact\n * @param listener.preSolve\n */\n update(listener?: {\n beginContact(contact: Contact): void,\n endContact(contact: Contact): void,\n preSolve(contact: Contact, oldManifold: Manifold): void\n }): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n // Re-enable this contact.\n this.m_enabledFlag = true;\n\n let touching = false;\n const wasTouching = this.m_touchingFlag;\n\n const sensorA = fixtureA.m_isSensor;\n const sensorB = fixtureB.m_isSensor;\n const sensor = sensorA || sensorB;\n\n const xfA = bodyA.m_xf;\n const xfB = bodyB.m_xf;\n\n // Is this contact a sensor?\n if (sensor) {\n touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB);\n\n // Sensors don't generate manifolds.\n this.m_manifold.pointCount = 0;\n } else {\n\n oldManifold.recycle();\n oldManifold.set(this.m_manifold);\n this.m_manifold.recycle();\n\n this.evaluate(this.m_manifold, xfA, xfB);\n touching = this.m_manifold.pointCount > 0;\n\n // Match old contact ids to new contact ids and copy the\n // stored impulses to warm start the solver.\n for (let i = 0; i < this.m_manifold.pointCount; ++i) {\n const nmp = this.m_manifold.points[i];\n nmp.normalImpulse = 0.0;\n nmp.tangentImpulse = 0.0;\n\n for (let j = 0; j < oldManifold.pointCount; ++j) {\n const 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\n if (touching !== wasTouching) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n }\n\n this.m_touchingFlag = touching;\n\n const hasListener = typeof listener === \"object\" && listener !== null;\n\n if (!wasTouching && touching && hasListener) {\n listener.beginContact(this);\n }\n\n if (wasTouching && !touching && hasListener) {\n listener.endContact(this);\n }\n\n if (!sensor && touching && hasListener && oldManifold) {\n listener.preSolve(this, oldManifold);\n }\n }\n\n solvePositionConstraint(step: TimeStep): number {\n return this._solvePositionConstraint(step, null, null);\n }\n\n solvePositionConstraintTOI(step: TimeStep, toiA: Body, toiB: Body): number {\n return this._solvePositionConstraint(step, toiA, toiB);\n }\n\n private _solvePositionConstraint(step: TimeStep, toiA: Body | null, toiB: Body | null): number {\n const toi = toiA !== null && toiB !== null ? true : false;\n let minSeparation = 0.0;\n\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return minSeparation;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return minSeparation;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n let mA = 0.0;\n let iA = 0.0;\n if (!toi || (bodyA === toiA || bodyA === toiB)) {\n mA = this.p_invMassA;\n iA = this.p_invIA;\n }\n\n let mB = 0.0;\n let iB = 0.0;\n if (!toi || (bodyB === toiA || bodyB === toiB)) {\n mB = this.p_invMassB;\n iB = this.p_invIB;\n }\n\n matrix.copyVec2(cA, positionA.c);\n let aA = positionA.a;\n\n matrix.copyVec2(cB, positionB.c);\n let aB = positionB.a;\n\n // Solve normal constraints\n for (let j = 0; j < this.p_pointCount; ++j) {\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n // PositionSolverManifold\n let separation: number;\n switch (this.p_type) {\n case ManifoldType.e_circles: {\n matrix.transformVec2(pointA, xfA, this.p_localPoint);\n matrix.transformVec2(pointB, xfB, this.p_localPoints[0]);\n matrix.subVec2(normal, pointB, pointA);\n matrix.normalizeVec2(normal);\n\n matrix.combine2Vec2(point, 0.5, pointA, 0.5, pointB);\n separation = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal) - this.p_radiusA - this.p_radiusB;\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfA, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfB, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfB, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfA, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n\n // Ensure normal points from A to B\n matrix.negVec2(normal);\n break;\n }\n // todo: what should we do here?\n default: {\n return minSeparation;\n }\n }\n\n matrix.subVec2(rA, point, cA);\n matrix.subVec2(rB, point, cB);\n\n // Track max constraint error.\n minSeparation = math_min(minSeparation, separation);\n\n const baumgarte = toi ? Settings.toiBaugarte : Settings.baumgarte;\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n // Prevent large corrections and allow slop.\n const C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0.0);\n\n // Compute the effective mass.\n const rnA = matrix.crossVec2Vec2(rA, normal);\n const rnB = matrix.crossVec2Vec2(rB, normal);\n const K = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n // Compute normal impulse\n const impulse = K > 0.0 ? -C / K : 0.0;\n\n matrix.scaleVec2(P, impulse, normal);\n\n matrix.minusScaleVec2(cA, mA, P);\n aA -= iA * matrix.crossVec2Vec2(rA, P);\n\n matrix.plusScaleVec2(cB, mB, P);\n aB += iB * matrix.crossVec2Vec2(rB, P);\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n\n return minSeparation;\n }\n\n initVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const radiusA = this.p_radiusA;\n const radiusB = this.p_radiusB;\n const manifold = this.m_manifold;\n\n const mA = this.v_invMassA;\n const mB = this.v_invMassB;\n const iA = this.v_invIA;\n const iB = this.v_invIB;\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n matrix.copyVec2(cA, positionA.c);\n const aA = positionA.a;\n matrix.copyVec2(vA, velocityA.v);\n const wA = velocityA.w;\n\n matrix.copyVec2(cB, positionB.c);\n const aB = positionB.a;\n matrix.copyVec2(vB, velocityB.v);\n const wB = velocityB.w;\n\n _ASSERT && console.assert(manifold.pointCount > 0);\n\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n worldManifold.recycle();\n manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB);\n\n matrix.copyVec2(this.v_normal, worldManifold.normal);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n const wmp = worldManifold.points[j];\n\n matrix.subVec2(vcp.rA, wmp, cA);\n matrix.subVec2(vcp.rB, wmp, cB);\n\n const rnA = matrix.crossVec2Vec2(vcp.rA, this.v_normal);\n const rnB = matrix.crossVec2Vec2(vcp.rB, this.v_normal);\n\n const kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n vcp.normalMass = kNormal > 0.0 ? 1.0 / kNormal : 0.0;\n\n matrix.crossVec2Num(tangent, this.v_normal, 1.0);\n\n const rtA = matrix.crossVec2Vec2(vcp.rA, tangent);\n const rtB = matrix.crossVec2Vec2(vcp.rB, tangent);\n\n const kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB;\n\n vcp.tangentMass = kTangent > 0.0 ? 1.0 / kTangent : 0.0;\n\n // Setup a velocity bias for restitution.\n vcp.velocityBias = 0.0;\n let vRel = 0;\n vRel += matrix.dotVec2(this.v_normal, vB);\n vRel += matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wB, vcp.rB));\n vRel -= matrix.dotVec2(this.v_normal, vA);\n vRel -= matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wA, vcp.rA));\n if (vRel < -Settings.velocityThreshold) {\n vcp.velocityBias = -this.v_restitution * vRel;\n }\n }\n\n // If we have two points, then prepare the block solver.\n if (this.v_pointCount == 2 && step.blockSolve) {\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n const rn1A = matrix.crossVec2Vec2(vcp1.rA, this.v_normal);\n const rn1B = matrix.crossVec2Vec2(vcp1.rB, this.v_normal);\n const rn2A = matrix.crossVec2Vec2(vcp2.rA, this.v_normal);\n const rn2B = matrix.crossVec2Vec2(vcp2.rB, this.v_normal);\n\n const k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B;\n const k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B;\n const k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B;\n\n // Ensure a reasonable condition number.\n const k_maxConditionNumber = 1000.0;\n if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) {\n // K is safe to invert.\n this.v_K.ex.setNum(k11, k12);\n this.v_K.ey.setNum(k12, k22);\n // this.v_normalMass.set(this.v_K.getInverse());\n const a = this.v_K.ex.x;\n const b = this.v_K.ey.x;\n const c = this.v_K.ex.y;\n const d = this.v_K.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n this.v_normalMass.ex.x = det * d;\n this.v_normalMass.ey.x = -det * b;\n this.v_normalMass.ex.y = -det * c;\n this.v_normalMass.ey.y = det * a;\n\n } else {\n // The constraints are redundant, just use one.\n // TODO_ERIN use deepest?\n this.v_pointCount = 1;\n }\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n warmStartConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n matrix.combine2Vec2(P, vcp.normalImpulse, normal, vcp.tangentImpulse, tangent);\n\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n matrix.minusScaleVec2(vA, mA, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n matrix.plusScaleVec2(vB, mB, P);\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n storeConstraintImpulses(step: TimeStep): void {\n const manifold = this.m_manifold;\n for (let 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\n solveVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const positionA = bodyA.c_position;\n\n const velocityB = bodyB.c_velocity;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n const friction = this.v_friction;\n\n _ASSERT && console.assert(this.v_pointCount == 1 || this.v_pointCount == 2);\n\n // Solve tangent constraints first because non-penetration is more important\n // than friction.\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute tangent force\n const vt = matrix.dotVec2(dv, tangent) - this.v_tangentSpeed;\n let lambda = vcp.tangentMass * (-vt);\n\n // Clamp the accumulated force\n const maxFriction = friction * vcp.normalImpulse;\n const newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction);\n lambda = newImpulse - vcp.tangentImpulse;\n vcp.tangentImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, tangent);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n\n // Solve normal constraints\n if (this.v_pointCount == 1 || step.blockSolve == false) {\n for (let i = 0; i < this.v_pointCount; ++i) {\n const vcp = this.v_points[i]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute normal impulse\n const vn = matrix.dotVec2(dv, normal);\n let lambda = -vcp.normalMass * (vn - vcp.velocityBias);\n\n // Clamp the accumulated impulse\n const newImpulse = math_max(vcp.normalImpulse + lambda, 0.0);\n lambda = newImpulse - vcp.normalImpulse;\n vcp.normalImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, normal);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n } else {\n // Block solver developed in collaboration with Dirk Gregorius (back in\n // 01/07 on Box2D_Lite).\n // Build the mini LCP for this contact patch\n //\n // vn = A * x + b, vn >= 0, x >= 0 and vn_i * x_i = 0 with i = 1..2\n //\n // A = J * W * JT and J = ( -n, -r1 x n, n, r2 x n )\n // b = vn0 - velocityBias\n //\n // The system is solved using the \"Total enumeration method\" (s. Murty).\n // The complementary constraint vn_i * x_i\n // implies that we must have in any solution either vn_i = 0 or x_i = 0.\n // So for the 2D contact problem the cases\n // vn1 = 0 and vn2 = 0, x1 = 0 and x2 = 0, x1 = 0 and vn2 = 0, x2 = 0 and\n // vn1 = 0 need to be tested. The first valid\n // solution that satisfies the problem is chosen.\n //\n // In order to account of the accumulated impulse 'a' (because of the\n // iterative nature of the solver which only requires\n // that the accumulated impulse is clamped and not the incremental\n // impulse) we change the impulse variable (x_i).\n //\n // Substitute:\n //\n // x = a + d\n //\n // a := old total impulse\n // x := new total impulse\n // d := incremental impulse\n //\n // For the current iteration we extend the formula for the incremental\n // impulse\n // to compute the new total impulse:\n //\n // vn = A * d + b\n // = A * (x - a) + b\n // = A * x + b - A * a\n // = A * x + b'\n // b' = b - A * a;\n\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n matrix.setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse);\n _ASSERT && console.assert(a.x >= 0.0 && a.y >= 0.0);\n\n // Relative velocity at contact\n // let dv1 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp1.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp1.rA));\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // let dv2 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp2.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp2.rA));\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n let vn1 = matrix.dotVec2(dv1, normal);\n let vn2 = matrix.dotVec2(dv2, normal);\n\n matrix.setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias);\n\n // Compute b'\n // b.sub(Mat22.mulVec2(this.v_K, a));\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\n const k_errorTol = 1e-3;\n // NOT_USED(k_errorTol);\n\n while (true) {\n //\n // Case 1: vn = 0\n //\n // 0 = A * x + b'\n //\n // Solve for x:\n //\n // x = - inv(A) * b'\n //\n // const x = Mat22.mulVec2(this.v_normalMass, b).neg();\n matrix.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\n if (x.x >= 0.0 && x.y >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 2: vn1 = 0 and x2 = 0\n //\n // 0 = a11 * x1 + a12 * 0 + b1'\n // vn2 = a21 * x1 + a22 * 0 + b2'\n //\n x.x = -vcp1.normalMass * b.x;\n x.y = 0.0;\n vn1 = 0.0;\n vn2 = this.v_K.ex.y * x.x + b.y;\n\n if (x.x >= 0.0 && vn2 >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 3: vn2 = 0 and x1 = 0\n //\n // vn1 = a11 * 0 + a12 * x2 + b1'\n // 0 = a21 * 0 + a22 * x2 + b2'\n //\n x.x = 0.0;\n x.y = -vcp2.normalMass * b.y;\n vn1 = this.v_K.ey.x * x.y + b.x;\n vn2 = 0.0;\n\n if (x.y >= 0.0 && vn1 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 4: x1 = 0 and x2 = 0\n //\n // vn1 = b1\n // vn2 = b2;\n //\n x.x = 0.0;\n x.y = 0.0;\n vn1 = b.x;\n vn2 = b.y;\n\n if (vn1 >= 0.0 && vn2 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n break;\n }\n\n // No solution, give up. This is hit sometimes, but it doesn't seem to\n // matter.\n break;\n }\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n /** @internal */\n static addType(type1: ShapeType, type2: ShapeType, callback: EvaluateFunction): void {\n s_registers[type1] = s_registers[type1] || {};\n s_registers[type1][type2] = callback;\n }\n\n /** @internal */\n static create(fixtureA: Fixture, indexA: number, fixtureB: Fixture, indexB: number): Contact | null {\n const typeA = fixtureA.m_shape.m_type;\n const typeB = fixtureB.m_shape.m_type;\n\n const contact = contactPool.allocate();\n let 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\n // Contact creation may swap fixtures.\n fixtureA = contact.m_fixtureA;\n fixtureB = contact.m_fixtureB;\n indexA = contact.getChildIndexA();\n indexB = contact.getChildIndexB();\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n\n // Connect to body A\n contact.m_nodeA.contact = contact;\n contact.m_nodeA.other = bodyB;\n\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\n // Connect to body B\n contact.m_nodeB.contact = contact;\n contact.m_nodeB.other = bodyA;\n\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\n // Wake up the bodies\n if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n return contact;\n }\n\n /** @internal */\n static destroy(contact: Contact, listener: { endContact: (contact: Contact) => void }): void {\n const fixtureA = contact.m_fixtureA;\n const fixtureB = contact.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n if (contact.isTouching()) {\n listener.endContact(contact);\n }\n\n // Remove from body 1\n if (contact.m_nodeA.prev) {\n contact.m_nodeA.prev.next = contact.m_nodeA.next;\n }\n\n if (contact.m_nodeA.next) {\n contact.m_nodeA.next.prev = contact.m_nodeA.prev;\n }\n\n if (contact.m_nodeA == bodyA.m_contactList) {\n bodyA.m_contactList = contact.m_nodeA.next;\n }\n\n // Remove from body 2\n if (contact.m_nodeB.prev) {\n contact.m_nodeB.prev.next = contact.m_nodeB.next;\n }\n\n if (contact.m_nodeB.next) {\n contact.m_nodeB.next.prev = contact.m_nodeB.prev;\n }\n\n if (contact.m_nodeB == bodyB.m_contactList) {\n bodyB.m_contactList = contact.m_nodeB.next;\n }\n\n if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n // const typeA = fixtureA.getType();\n // const typeB = fixtureB.getType();\n\n // const destroyFcn = s_registers[typeA][typeB].destroyFcn;\n // if (typeof destroyFcn === 'function') {\n // destroyFcn(contact);\n // }\n\n contactPool.release(contact);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { Solver, ContactImpulse, TimeStep } from \"./Solver\";\nimport { Body, BodyDef } from \"./Body\";\nimport { Joint } from \"./Joint\";\nimport { Contact } from \"./Contact\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Fixture, FixtureProxy } from \"./Fixture\";\nimport { Manifold } from \"../collision/Manifold\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface WorldDef {\n /** [default: { x : 0, y : 0}] */\n gravity?: Vec2Value;\n\n /** [default: true] */\n allowSleep?: boolean;\n\n /** [default: true] */\n warmStarting?: boolean;\n\n /** [default: true] */\n continuousPhysics?: boolean;\n\n /** [default: false] */\n subStepping?: boolean;\n\n /** [default: true] */\n blockSolve?: boolean;\n\n /** @internal [8] For the velocity constraint solver. */\n velocityIterations?: number;\n\n /** @internal [3] For the position constraint solver. */\n positionIterations?: number;\n}\n\n/** @internal */ const DEFAULTS: WorldDef = {\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};\n\n/**\n * Callback function for ray casts, see {@link World.rayCast}.\n *\n * Called for each fixture found in the query.\n * The returned value replaces the ray-cast input maxFraction.\n * You control how the ray cast proceeds by returning a numeric/float value.\n * \n * - `0` to terminate the ray cast\n * - `fraction` to clip the ray cast at current point\n * - `1` don't clip the ray and continue\n * - `-1` (or anything else) to continue\n *\n * @param fixture The fixture hit by the ray\n * @param point The point of initial intersection\n * @param normal The normal vector at the point of intersection\n * @param fraction The fraction along the ray at the point of intersection\n *\n * @returns A number to update the maxFraction\n */\nexport type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number;\n\n/**\n * Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\nexport type WorldAABBQueryCallback = (fixture: Fixture) => boolean;\n\ndeclare module \"./World\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function World(deg: WorldDef): World;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function World(gravity: Vec2): World;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function World(): World;\n}\n\n/**\n * The `World` class contains the bodies and joints. It manages all aspects\n * of the simulation and allows for asynchronous queries (like AABB queries\n * and ray-casts). Much of your interactions with Planck.js will be with a\n * World object.\n */\n// @ts-expect-error\nexport class World {\n /** @internal */ m_solver: Solver;\n /** @internal */ m_broadPhase: BroadPhase;\n /** @internal */ m_contactList: Contact | null;\n /** @internal */ m_contactCount: number;\n /** @internal */ m_bodyList: Body | null;\n /** @internal */ m_bodyCount: number;\n /** @internal */ m_jointList: Joint | null;\n /** @internal */ m_jointCount: number;\n /** @internal */ m_stepComplete: boolean;\n /** @internal */ m_allowSleep: boolean;\n /** @internal */ m_gravity: Vec2;\n /** @internal */ m_clearForces: boolean;\n /** @internal */ m_newFixture: boolean;\n /** @internal */ m_locked: boolean;\n /** @internal */ m_warmStarting: boolean;\n /** @internal */ m_continuousPhysics: boolean;\n /** @internal */ m_subStepping: boolean;\n /** @internal */ m_blockSolve: boolean;\n /** @internal */ m_velocityIterations: number;\n /** @internal */ m_positionIterations: number;\n /** @internal */ m_t: number;\n\n // TODO\n /** @internal */ _listeners: {\n [key: string]: any[]\n };\n\n /**\n * @param def World definition or gravity vector.\n */\n constructor(def?: WorldDef | Vec2Value) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof World)) {\n return new World(def);\n }\n\n this.s_step = new TimeStep();\n\n\n if (!def) {\n def = {};\n } else if (Vec2.isValid(def)) {\n def = { gravity: def as Vec2 };\n }\n\n def = options(def, DEFAULTS) as WorldDef;\n\n this.m_solver = new Solver(this);\n\n this.m_broadPhase = new BroadPhase();\n\n this.m_contactList = null;\n this.m_contactCount = 0;\n\n this.m_bodyList = null;\n this.m_bodyCount = 0;\n\n this.m_jointList = null;\n this.m_jointCount = 0;\n\n this.m_stepComplete = true;\n\n this.m_allowSleep = def.allowSleep;\n this.m_gravity = Vec2.clone(def.gravity);\n\n this.m_clearForces = true;\n this.m_newFixture = false;\n this.m_locked = false;\n\n // These are for debugging the solver.\n this.m_warmStarting = def.warmStarting;\n this.m_continuousPhysics = def.continuousPhysics;\n this.m_subStepping = def.subStepping;\n\n this.m_blockSolve = def.blockSolve;\n this.m_velocityIterations = def.velocityIterations;\n this.m_positionIterations = def.positionIterations;\n\n this.m_t = 0;\n }\n\n /** @internal */\n _serialize(): object {\n const bodies = [];\n const joints = [];\n\n for (let b = this.getBodyList(); b; b = b.getNext()) {\n bodies.push(b);\n }\n\n for (let j = this.getJointList(); j; j = j.getNext()) {\n // @ts-ignore\n if (typeof j._serialize === \"function\") {\n joints.push(j);\n }\n }\n\n return {\n gravity: this.m_gravity,\n bodies,\n joints,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, context: any, restore: any): World {\n if (!data) {\n return new World();\n }\n\n const world = new World(data.gravity);\n\n if (data.bodies) {\n for (let i = data.bodies.length - 1; i >= 0; i -= 1) {\n world._addBody(restore(Body, data.bodies[i], world));\n }\n }\n\n if (data.joints) {\n for (let i = data.joints.length - 1; i >= 0; i--) {\n world.createJoint(restore(Joint, data.joints[i], world));\n }\n }\n\n return world;\n }\n\n /**\n * Get the world body list. With the returned body, use Body.getNext to get the\n * next body in the world list. A null body indicates the end of the list.\n *\n * @return the head of the world body list.\n */\n getBodyList(): Body | null {\n return this.m_bodyList;\n }\n\n /**\n * Get the world joint list. With the returned joint, use Joint.getNext to get\n * the next joint in the world list. A null joint indicates the end of the list.\n *\n * @return the head of the world joint list.\n */\n getJointList(): Joint | null {\n return this.m_jointList;\n }\n\n /**\n * Get the world contact list. With the returned contact, use Contact.getNext to\n * get the next contact in the world list. A null contact indicates the end of\n * the list.\n *\n * Warning: contacts are created and destroyed in the middle of a time step.\n * Use ContactListener to avoid missing contacts.\n *\n * @return the head of the world contact list.\n */\n getContactList(): Contact | null {\n return this.m_contactList;\n }\n\n getBodyCount(): number {\n return this.m_bodyCount;\n }\n\n getJointCount(): number {\n return this.m_jointCount;\n }\n\n /**\n * Get the number of contacts (each may have 0 or more contact points).\n */\n getContactCount(): number {\n return this.m_contactCount;\n }\n\n /**\n * Change the global gravity vector.\n */\n setGravity(gravity: Vec2Value): void {\n this.m_gravity.set(gravity);\n }\n\n /**\n * Get the global gravity vector.\n */\n getGravity(): Vec2 {\n return this.m_gravity;\n }\n\n /**\n * Is the world locked (in the middle of a time step).\n */\n isLocked(): boolean {\n return this.m_locked;\n }\n\n /**\n * Enable/disable sleep.\n */\n setAllowSleeping(flag: boolean): void {\n if (flag == this.m_allowSleep) {\n return;\n }\n\n this.m_allowSleep = flag;\n if (this.m_allowSleep == false) {\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.setAwake(true);\n }\n }\n }\n\n getAllowSleeping(): boolean {\n return this.m_allowSleep;\n }\n\n /**\n * Enable/disable warm starting. For testing.\n */\n setWarmStarting(flag: boolean): void {\n this.m_warmStarting = flag;\n }\n\n getWarmStarting(): boolean {\n return this.m_warmStarting;\n }\n\n /**\n * Enable/disable continuous physics. For testing.\n */\n setContinuousPhysics(flag: boolean): void {\n this.m_continuousPhysics = flag;\n }\n\n getContinuousPhysics(): boolean {\n return this.m_continuousPhysics;\n }\n\n /**\n * Enable/disable single stepped continuous physics. For testing.\n */\n setSubStepping(flag: boolean): void {\n this.m_subStepping = flag;\n }\n\n getSubStepping(): boolean {\n return this.m_subStepping;\n }\n\n /**\n * Set flag to control automatic clearing of forces after each time step.\n */\n setAutoClearForces(flag: boolean): void {\n this.m_clearForces = flag;\n }\n\n /**\n * Get the flag that controls automatic clearing of forces after each time step.\n */\n getAutoClearForces(): boolean {\n return this.m_clearForces;\n }\n\n /**\n * Manually clear the force buffer on all bodies. By default, forces are cleared\n * automatically after each call to step. The default behavior is modified by\n * calling setAutoClearForces. The purpose of this function is to support\n * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step\n * under a variable frame-rate. When you perform sub-stepping you will disable\n * auto clearing of forces and instead call clearForces after all sub-steps are\n * complete in one pass of your game loop.\n *\n * See {@link World.setAutoClearForces}\n */\n clearForces(): void {\n for (let body = this.m_bodyList; body; body = body.getNext()) {\n body.m_force.setZero();\n body.m_torque = 0.0;\n }\n }\n\n /**\n * Query the world for all fixtures that potentially overlap the provided AABB.\n *\n * @param aabb The query box.\n * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\n queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n this.m_broadPhase.query(aabb, function(proxyId: number): boolean { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n return callback(proxy.fixture);\n });\n }\n\n /**\n * Ray-cast the world for all fixtures in the path of the ray. Your callback\n * controls whether you get the closest point, any point, or n-points. The\n * ray-cast ignores shapes that contain the starting point.\n *\n * @param point1 The ray starting point\n * @param point2 The ray ending point\n * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value.\n */\n rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n\n this.m_broadPhase.rayCast({\n maxFraction : 1.0,\n p1 : point1,\n p2 : point2\n }, function(input: RayCastInput, proxyId: number): number { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n const fixture = proxy.fixture;\n const index = proxy.childIndex;\n // @ts-ignore\n const output: RayCastOutput = {}; // TODO GC\n const hit = fixture.rayCast(output, input, index);\n if (hit) {\n const fraction = output.fraction;\n const point = Vec2.add(Vec2.mulNumVec2((1.0 - fraction), input.p1), Vec2.mulNumVec2(fraction, input.p2));\n return callback(fixture, point, output.normal, fraction);\n }\n return input.maxFraction;\n });\n }\n\n /**\n * Get the number of broad-phase proxies.\n */\n getProxyCount(): number {\n return this.m_broadPhase.getProxyCount();\n }\n\n /**\n * Get the height of broad-phase dynamic tree.\n */\n getTreeHeight(): number {\n return this.m_broadPhase.getTreeHeight();\n }\n\n /**\n * Get the balance of broad-phase dynamic tree.\n */\n getTreeBalance(): number {\n return this.m_broadPhase.getTreeBalance();\n }\n\n /**\n * Get the quality metric of broad-phase dynamic tree. The smaller the better.\n * The minimum is 1.\n */\n getTreeQuality(): number {\n return this.m_broadPhase.getTreeQuality();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The body shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n _ASSERT && console.assert(this.m_locked == false);\n if (this.m_locked) {\n return;\n }\n\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.m_xf.p.sub(newOrigin);\n b.m_sweep.c0.sub(newOrigin);\n b.m_sweep.c.sub(newOrigin);\n }\n\n for (let j = this.m_jointList; j; j = j.m_next) {\n j.shiftOrigin(newOrigin);\n }\n\n this.m_broadPhase.shiftOrigin(newOrigin);\n }\n\n /** @internal Used for deserialize. */\n _addBody(body: Body): void {\n _ASSERT && console.assert(this.isLocked() === false);\n if (this.isLocked()) {\n return;\n }\n\n // Add to world doubly linked list.\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\n /**\n * Create a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This function is locked during callbacks.\n */\n createBody(def?: BodyDef): Body;\n createBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createBody(arg1?, arg2?) {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n let def: BodyDef = {};\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\n const body = new Body(this, def);\n this._addBody(body);\n return body;\n }\n\n createDynamicBody(def?: BodyDef): Body;\n createDynamicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createDynamicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n createKinematicBody(def?: BodyDef): Body;\n createKinematicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createKinematicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n /**\n * Destroy a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This automatically deletes all associated shapes and joints.\n *\n * Warning: This function is locked during callbacks.\n */\n destroyBody(b: Body): boolean {\n _ASSERT && console.assert(this.m_bodyCount > 0);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n if (b.m_destroyed) {\n return false;\n }\n\n // Delete the attached joints.\n let je = b.m_jointList;\n while (je) {\n const je0 = je;\n je = je.next;\n\n this.publish(\"remove-joint\", je0.joint);\n this.destroyJoint(je0.joint);\n\n b.m_jointList = je;\n }\n b.m_jointList = null;\n\n // Delete the attached contacts.\n let ce = b.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n\n this.destroyContact(ce0.contact);\n\n b.m_contactList = ce;\n }\n b.m_contactList = null;\n\n // Delete the attached fixtures. This destroys broad-phase proxies.\n let f = b.m_fixtureList;\n while (f) {\n const f0 = f;\n f = f.m_next;\n\n this.publish(\"remove-fixture\", f0);\n f0.destroyProxies(this.m_broadPhase);\n\n b.m_fixtureList = f;\n }\n b.m_fixtureList = null;\n\n // Remove world body list.\n if (b.m_prev) {\n b.m_prev.m_next = b.m_next;\n }\n\n if (b.m_next) {\n b.m_next.m_prev = b.m_prev;\n }\n\n if (b == this.m_bodyList) {\n this.m_bodyList = b.m_next;\n }\n\n b.m_destroyed = true;\n\n --this.m_bodyCount;\n\n this.publish(\"remove-body\", b);\n\n return true;\n }\n\n /**\n * Create a joint to constrain bodies together. No reference to the definition\n * is retained. This may cause the connected bodies to cease colliding.\n *\n * Warning: This function is locked during callbacks.\n */\n createJoint(joint: T): T | null {\n _ASSERT && console.assert(!!joint.m_bodyA);\n _ASSERT && console.assert(!!joint.m_bodyB);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n // Connect to the world list.\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\n // Connect to the bodies' doubly linked lists.\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\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\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n for (let edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) {\n if (edge.other == joint.m_bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n }\n }\n\n // Note: creating a joint doesn't wake the bodies.\n\n return joint;\n }\n\n /**\n * Destroy a joint. This may cause the connected bodies to begin colliding.\n * Warning: This function is locked during callbacks.\n */\n destroyJoint(joint: Joint): void {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n // Remove from the doubly linked list.\n if (joint.m_prev) {\n joint.m_prev.m_next = joint.m_next;\n }\n\n if (joint.m_next) {\n joint.m_next.m_prev = joint.m_prev;\n }\n\n if (joint == this.m_jointList) {\n this.m_jointList = joint.m_next;\n }\n\n // Disconnect from bodies.\n const bodyA = joint.m_bodyA;\n const bodyB = joint.m_bodyB;\n\n // Wake up connected bodies.\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n\n // Remove from body 1.\n if (joint.m_edgeA.prev) {\n joint.m_edgeA.prev.next = joint.m_edgeA.next;\n }\n\n if (joint.m_edgeA.next) {\n joint.m_edgeA.next.prev = joint.m_edgeA.prev;\n }\n\n if (joint.m_edgeA == bodyA.m_jointList) {\n bodyA.m_jointList = joint.m_edgeA.next;\n }\n\n joint.m_edgeA.prev = null;\n joint.m_edgeA.next = null;\n\n // Remove from body 2\n if (joint.m_edgeB.prev) {\n joint.m_edgeB.prev.next = joint.m_edgeB.next;\n }\n\n if (joint.m_edgeB.next) {\n joint.m_edgeB.next.prev = joint.m_edgeB.prev;\n }\n\n if (joint.m_edgeB == bodyB.m_jointList) {\n bodyB.m_jointList = joint.m_edgeB.next;\n }\n\n joint.m_edgeB.prev = null;\n joint.m_edgeB.next = null;\n\n _ASSERT && console.assert(this.m_jointCount > 0);\n --this.m_jointCount;\n\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n let edge = bodyB.getContactList();\n while (edge) {\n if (edge.other == bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n }\n\n this.publish(\"remove-joint\", joint);\n }\n\n /** @internal */\n s_step: TimeStep; // reuse\n\n /**\n * Take a time step. This performs collision detection, integration, and\n * constraint solution.\n *\n * Broad-phase, narrow-phase, solve and solve time of impacts.\n *\n * @param timeStep Time step, this should not vary.\n */\n step(timeStep: number, velocityIterations?: number, positionIterations?: number): void {\n this.publish(\"pre-step\", timeStep);\n\n if ((velocityIterations | 0) !== velocityIterations) {\n // TODO: remove this in future\n velocityIterations = 0;\n }\n\n velocityIterations = velocityIterations || this.m_velocityIterations;\n positionIterations = positionIterations || this.m_positionIterations;\n\n // If new fixtures were added, we need to find the new contacts.\n if (this.m_newFixture) {\n this.findNewContacts();\n this.m_newFixture = false;\n }\n\n this.m_locked = true;\n\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\n // Update contacts. This is where some contacts are destroyed.\n this.updateContacts();\n\n // Integrate velocities, solve velocity constraints, and integrate positions.\n if (this.m_stepComplete && timeStep > 0.0) {\n this.m_solver.solveWorld(this.s_step);\n\n // Synchronize fixtures, check for out of range bodies.\n for (let b = this.m_bodyList; b; b = b.getNext()) {\n // If a body was not in an island then it did not move.\n if (b.m_islandFlag == false) {\n continue;\n }\n\n if (b.isStatic()) {\n continue;\n }\n\n // Update fixtures (for broad-phase).\n b.synchronizeFixtures();\n }\n // Look for new contacts.\n this.findNewContacts();\n }\n\n // Handle TOI events.\n if (this.m_continuousPhysics && timeStep > 0.0) {\n this.m_solver.solveWorldTOI(this.s_step);\n }\n\n if (this.m_clearForces) {\n this.clearForces();\n }\n\n this.m_locked = false;\n\n this.publish(\"post-step\", timeStep);\n }\n\n /**\n * @internal\n * Call this method to find new contacts.\n */\n findNewContacts(): void {\n this.m_broadPhase.updatePairs(\n (proxyA: FixtureProxy, proxyB: FixtureProxy) => this.createContact(proxyA, proxyB)\n );\n }\n\n /**\n * @internal\n * Callback for broad-phase.\n */\n createContact(proxyA: FixtureProxy, proxyB: FixtureProxy): void {\n const fixtureA = proxyA.fixture;\n const fixtureB = proxyB.fixture;\n\n const indexA = proxyA.childIndex;\n const indexB = proxyB.childIndex;\n\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Are the fixtures on the same body?\n if (bodyA == bodyB) {\n return;\n }\n\n // TODO_ERIN use a hash table to remove a potential bottleneck when both\n // bodies have a lot of contacts.\n // Does a contact already exist?\n let edge = bodyB.getContactList(); // ContactEdge\n while (edge) {\n if (edge.other == bodyA) {\n const fA = edge.contact.getFixtureA();\n const fB = edge.contact.getFixtureB();\n const iA = edge.contact.getChildIndexA();\n const iB = edge.contact.getChildIndexB();\n\n if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) {\n // A contact already exists.\n return;\n }\n\n if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) {\n // A contact already exists.\n return;\n }\n }\n\n edge = edge.next;\n }\n\n if (bodyB.shouldCollide(bodyA) == false) {\n return;\n }\n if (fixtureB.shouldCollide(fixtureA) == false) {\n return;\n }\n\n // Call the factory.\n const contact = Contact.create(fixtureA, indexA, fixtureB, indexB);\n if (contact == null) {\n return;\n }\n\n // Insert into the world.\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\n ++this.m_contactCount;\n }\n\n /**\n * @internal\n * Removes old non-overlapping contacts, applies filters and updates contacts.\n */\n updateContacts(): void {\n // Update awake contacts.\n let c: Contact;\n let next_c = this.m_contactList;\n while (c = next_c) {\n next_c = c.getNext();\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Is this contact flagged for filtering?\n if (c.m_filterFlag) {\n if (bodyB.shouldCollide(bodyA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n if (fixtureB.shouldCollide(fixtureA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n // Clear the filtering flag.\n c.m_filterFlag = false;\n }\n\n const activeA = bodyA.isAwake() && !bodyA.isStatic();\n const activeB = bodyB.isAwake() && !bodyB.isStatic();\n\n // At least one body must be awake and it must be dynamic or kinematic.\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const proxyIdA = fixtureA.m_proxies[indexA].proxyId;\n const proxyIdB = fixtureB.m_proxies[indexB].proxyId;\n const overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB);\n\n // Here we destroy contacts that cease to overlap in the broad-phase.\n if (overlap == false) {\n this.destroyContact(c);\n continue;\n }\n\n // The contact persists.\n c.update(this);\n }\n }\n\n /** @internal */\n destroyContact(contact: Contact): void {\n // Remove from the world.\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\n Contact.destroy(contact, this);\n\n --this.m_contactCount;\n }\n\n\n /**\n * Called when two fixtures begin to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n /**\n * Called when two fixtures cease to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"end-contact\", listener: (contact: Contact) => void): World;\n /**\n * This is called after a contact is updated. This allows you to inspect a\n * contact before it goes to the solver. If you are careful, you can modify the\n * contact manifold (e.g. disable contact). A copy of the old manifold is\n * provided so that you can detect changes. Note: this is called only for awake\n * bodies. Note: this is called even when the number of contact points is zero.\n * Note: this is not called for sensors. Note: if you set the number of contact\n * points to zero, you will not get an end-contact callback. However, you may get\n * a begin-contact callback the next step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n /**\n * This lets you inspect a contact after the solver is finished. This is useful\n * for inspecting impulses. Note: the contact manifold does not include time of\n * impact impulses, which can be arbitrarily large if the sub-step is small.\n * Hence the impulse is provided explicitly in a separate data structure. Note:\n * this is only called for contacts that are touching, solid, and awake.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n /** Listener is called whenever a body is removed. */\n on(name: \"remove-body\", listener: (body: Body) => void): World;\n /** Listener is called whenever a joint is removed implicitly or explicitly. */\n on(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n /** Listener is called whenever a fixture is removed implicitly or explicitly. */\n on(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Register an event listener.\n */\n // tslint:disable-next-line:typedef\n on(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\n off(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n off(name: \"end-contact\", listener: (contact: Contact) => void): World;\n off(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n off(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n off(name: \"remove-body\", listener: (body: Body) => void): World;\n off(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n off(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Remove an event listener.\n */\n // tslint:disable-next-line:typedef\n off(name, listener) {\n if (typeof name !== \"string\" || typeof listener !== \"function\") {\n return this;\n }\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return this;\n }\n const index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n return this;\n }\n\n publish(name: string, arg1?: any, arg2?: any, arg3?: any): number {\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return 0;\n }\n for (let l = 0; l < listeners.length; l++) {\n listeners[l].call(this, arg1, arg2, arg3);\n }\n return listeners.length;\n }\n\n /** @internal */\n beginContact(contact: Contact): void {\n this.publish(\"begin-contact\", contact);\n }\n\n /** @internal */\n endContact(contact: Contact): void {\n this.publish(\"end-contact\", contact);\n }\n\n /** @internal */\n preSolve(contact: Contact, oldManifold: Manifold): void {\n this.publish(\"pre-solve\", contact, oldManifold);\n }\n\n /** @internal */\n postSolve(contact: Contact, impulse: ContactImpulse): void {\n this.publish(\"post-solve\", contact, impulse);\n }\n\n /**\n * Joints and fixtures are destroyed when their associated body is destroyed.\n * Register a destruction listener so that you may nullify references to these\n * joints and shapes.\n *\n * `function(object)` is called when any joint or fixture is about to\n * be destroyed due to the destruction of one of its attached or parent bodies.\n */\n\n /**\n * Register a contact filter to provide specific control over collision.\n * Otherwise the default filter is used (defaultFilter). The listener is owned\n * by you and must remain in scope.\n *\n * Moved to Fixture.\n */\n}","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/** 3D vector */\nexport interface Vec3Value {\n x: number;\n y: number;\n z: number;\n}\n\ndeclare module \"./Vec3\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec3(x: number, y: number, z: number): Vec3;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec3(obj: Vec3Value): Vec3;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec3(): Vec3;\n}\n\n/** 3D vector */\n// @ts-expect-error\nexport class Vec3 {\n x: number;\n y: number;\n z: number;\n\n constructor(x: number, y: number, z: number);\n constructor(obj: Vec3Value);\n constructor();\n constructor(x?, y?, z?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec3)) {\n return new Vec3(x, y, z);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n } else {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n _ASSERT && Vec3.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y,\n z: this.z\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = data.x;\n obj.y = data.y;\n obj.z = data.z;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number, z: number): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = x;\n obj.y = y;\n obj.z = z;\n return obj;\n }\n\n static zero(): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = 0;\n obj.y = 0;\n obj.z = 0;\n return obj;\n }\n\n static clone(v: Vec3Value): Vec3 {\n _ASSERT && Vec3.assert(v);\n return Vec3.neo(v.x, v.y, v.z);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /** Does this vector contain finite coordinates? */\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec3.isValid(o), \"Invalid Vec3!\", o);\n }\n\n setZero(): Vec3 {\n this.x = 0.0;\n this.y = 0.0;\n this.z = 0.0;\n return this;\n }\n\n set(x: number, y: number, z: number): Vec3 {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n\n add(w: Vec3Value): Vec3 {\n this.x += w.x;\n this.y += w.y;\n this.z += w.z;\n return this;\n }\n\n sub(w: Vec3Value): Vec3 {\n this.x -= w.x;\n this.y -= w.y;\n this.z -= w.z;\n return this;\n }\n\n mul(m: number): Vec3 {\n this.x *= m;\n this.y *= m;\n this.z *= m;\n return this;\n }\n\n static areEqual(v: Vec3Value, w: Vec3Value): boolean {\n _ASSERT && Vec3.assert(v);\n _ASSERT && Vec3.assert(w);\n return v === w ||\n typeof v === \"object\" && v !== null &&\n typeof w === \"object\" && w !== null &&\n v.x === w.x && v.y === w.y && v.z === w.z;\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n }\n\n /** Cross product on two vectors */\n static cross(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(\n v.y * w.z - v.z * w.y,\n v.z * w.x - v.x * w.z,\n v.x * w.y - v.y * w.x\n );\n }\n\n static add(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x + w.x, v.y + w.y, v.z + w.z);\n }\n\n static sub(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x - w.x, v.y - w.y, v.z - w.z);\n }\n\n static mul(v: Vec3Value, m: number): Vec3 {\n return new Vec3(m * v.x, m * v.y, m * v.z);\n }\n\n neg(): Vec3 {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n\n static neg(v: Vec3Value): Vec3 {\n return new Vec3(-v.x, -v.y, -v.z);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Shape } from \"../Shape\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { AABB, AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\ndeclare module \"./EdgeShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function EdgeShape(v1?: Vec2Value, v2?: Vec2Value): EdgeShape;\n}\n\n/**\n * A line segment (edge) shape. These can be connected in chains or loops to\n * other edge shapes. The connectivity information is used to ensure correct\n * contact normals.\n */\n// @ts-expect-error\nexport class EdgeShape extends Shape {\n static TYPE = \"edge\" as const;\n /** @hidden */ m_type: \"edge\";\n\n /** @hidden */ m_radius: number;\n\n // These are the edge vertices\n /** @hidden */ m_vertex1: Vec2;\n /** @hidden */ m_vertex2: Vec2;\n\n // Optional adjacent vertices. These are used for smooth collision.\n // Used by chain shape.\n /** @hidden */ m_vertex0: Vec2;\n /** @hidden */ m_vertex3: Vec2;\n /** @hidden */ m_hasVertex0: boolean;\n /** @hidden */ m_hasVertex3: boolean;\n\n constructor(v1?: Vec2Value, v2?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof EdgeShape)) {\n return new EdgeShape(v1, v2);\n }\n\n super();\n\n this.m_type = EdgeShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n\n this.m_vertex1 = v1 ? Vec2.clone(v1) : Vec2.zero();\n this.m_vertex2 = v2 ? Vec2.clone(v2) : Vec2.zero();\n\n this.m_vertex0 = Vec2.zero();\n this.m_vertex3 = Vec2.zero();\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertex1: this.m_vertex1,\n vertex2: this.m_vertex2,\n\n vertex0: this.m_vertex0,\n vertex3: this.m_vertex3,\n hasVertex0: this.m_hasVertex0,\n hasVertex3: this.m_hasVertex3,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): EdgeShape {\n const shape = new EdgeShape(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\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getType(): \"edge\" {\n return this.m_type;\n }\n\n /** @internal @deprecated */\n setNext(v?: Vec2Value): EdgeShape {\n return this.setNextVertex(v);\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n setNextVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex3.setVec2(v);\n this.m_hasVertex3 = true;\n } else {\n this.m_vertex3.setZero();\n this.m_hasVertex3 = false;\n }\n return this;\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n getNextVertex(): Vec2 {\n return this.m_vertex3;\n }\n\n /** @internal @deprecated */\n setPrev(v?: Vec2Value): EdgeShape {\n return this.setPrevVertex(v);\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n setPrevVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex0.setVec2(v);\n this.m_hasVertex0 = true;\n } else {\n this.m_vertex0.setZero();\n this.m_hasVertex0 = false;\n }\n return this;\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n getPrevVertex(): Vec2 {\n return this.m_vertex0;\n }\n\n /**\n * Set this as an isolated edge.\n */\n _set(v1: Vec2Value, v2: Vec2Value): EdgeShape {\n this.m_vertex1.setVec2(v1);\n this.m_vertex2.setVec2(v2);\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n return this;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): EdgeShape {\n const clone = new EdgeShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // p = p1 + t * d\n // v = v1 + s * e\n // p1 + t * d = v1 + s * e\n // s * e - t * d = p1 - v1\n\n // NOT_USED(childIndex);\n\n // Put the ray into the edge's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n const v1 = this.m_vertex1;\n const v2 = this.m_vertex2;\n const e = Vec2.sub(v2, v1);\n const normal = Vec2.neo(e.y, -e.x);\n normal.normalize();\n\n // q = p1 + t * d\n // dot(normal, q - v1) = 0\n // dot(normal, p1 - v1) + t * dot(normal, d) = 0\n const numerator = Vec2.dot(normal, Vec2.sub(v1, p1));\n const denominator = Vec2.dot(normal, d);\n\n if (denominator == 0.0) {\n return false;\n }\n\n const t = numerator / denominator;\n if (t < 0.0 || input.maxFraction < t) {\n return false;\n }\n\n const q = Vec2.add(p1, Vec2.mulNumVec2(t, d));\n\n // q = v1 + s * r\n // s = dot(q - v1, r) / dot(r, r)\n const r = Vec2.sub(v2, v1);\n const rr = Vec2.dot(r, r);\n if (rr == 0.0) {\n return false;\n }\n\n const s = Vec2.dot(Vec2.sub(q, v1), r) / rr;\n if (s < 0.0 || 1.0 < s) {\n return false;\n }\n\n output.fraction = t;\n if (numerator > 0.0) {\n output.normal = Rot.mulVec2(xf.q, normal).neg();\n } else {\n output.normal = Rot.mulVec2(xf.q, normal);\n }\n return true;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n matrix.transformVec2(v1, xf, this.m_vertex1);\n matrix.transformVec2(v2, xf, this.m_vertex2);\n\n AABB.combinePoints(aabb, v1, v2);\n AABB.extend(aabb, this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Edge = EdgeShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { AABBValue, RayCastOutput, RayCastInput, AABB } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\nimport { EdgeShape } from \"./EdgeShape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\ndeclare module \"./ChainShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function ChainShape(vertices?: Vec2Value[], loop?: boolean): ChainShape;\n}\n\n/**\n * A chain shape is a free form sequence of line segments. The chain has\n * two-sided collision, so you can use inside and outside collision. Therefore,\n * you may use any winding order. Connectivity information is used to create\n * smooth collisions.\n *\n * WARNING: The chain will not collide properly if there are self-intersections.\n */\n// @ts-expect-error\nexport class ChainShape extends Shape {\n static TYPE = \"chain\" as const;\n /** @hidden */ m_type: \"chain\";\n\n /** @hidden */ m_radius: number;\n\n /** @hidden */ m_vertices: Vec2[];\n /** @hidden */ m_count: number;\n /** @hidden */ m_prevVertex: Vec2 | null;\n /** @hidden */ m_nextVertex: Vec2 | null;\n /** @hidden */ m_hasPrevVertex: boolean;\n /** @hidden */ m_hasNextVertex: boolean;\n\n /** @hidden */ m_isLoop: boolean;\n\n constructor(vertices?: Vec2Value[], loop?: boolean) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof ChainShape)) {\n return new ChainShape(vertices, loop);\n }\n\n super();\n\n this.m_type = ChainShape.TYPE;\n this.m_radius = Settings.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\n this.m_isLoop = !!loop;\n\n if (vertices && vertices.length) {\n if (loop) {\n this._createLoop(vertices);\n } else {\n this._createChain(vertices);\n }\n }\n }\n\n /** @internal */\n _serialize(): object {\n const data = {\n type: this.m_type,\n vertices: this.m_vertices,\n isLoop: this.m_isLoop,\n hasPrevVertex: this.m_hasPrevVertex,\n hasNextVertex: this.m_hasNextVertex,\n prevVertex: null as Vec2 | null,\n nextVertex: null as Vec2 | 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\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): ChainShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n const shape = new ChainShape(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\n // clear() {\n // this.m_vertices.length = 0;\n // this.m_count = 0;\n // }\n\n getType(): \"chain\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal\n * Create a loop. This automatically adjusts connectivity.\n *\n * @param vertices an array of vertices, these are copied\n * @param count the vertex count\n */\n _createLoop(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 3);\n if (vertices.length < 3) {\n return;\n }\n\n for (let i = 1; i < vertices.length; ++i) {\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n // If the code crashes here, it means your vertices are too close together.\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_vertices = [];\n this.m_count = vertices.length + 1;\n for (let 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\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\n /**\n * @internal\n * Create a chain with isolated end vertices.\n *\n * @param vertices an array of vertices, these are copied\n */\n _createChain(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 2);\n for (let i = 1; i < vertices.length; ++i) {\n // If the code crashes here, it means your vertices are too close together.\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_count = vertices.length;\n for (let i = 0; i < vertices.length; ++i) {\n this.m_vertices[i] = Vec2.clone(vertices[i]);\n }\n\n this.m_hasPrevVertex = false;\n this.m_hasNextVertex = false;\n this.m_prevVertex = null;\n this.m_nextVertex = null;\n return this;\n }\n\n /** @hidden */\n _reset(): void {\n if (this.m_isLoop) {\n this._createLoop(this.m_vertices);\n } else {\n this._createChain(this.m_vertices);\n }\n }\n\n /**\n * Establish connectivity to a vertex that precedes the first vertex. Don't call\n * this for loops.\n */\n setPrevVertex(prevVertex: Vec2): void {\n // todo: copy or reference\n this.m_prevVertex = prevVertex;\n this.m_hasPrevVertex = true;\n }\n\n getPrevVertex(): Vec2 {\n return this.m_prevVertex;\n }\n\n /**\n * Establish connectivity to a vertex that follows the last vertex. Don't call\n * this for loops.\n */\n setNextVertex(nextVertex: Vec2): void {\n // todo: copy or reference\n this.m_nextVertex = nextVertex;\n this.m_hasNextVertex = true;\n }\n\n getNextVertex(): Vec2 {\n return this.m_nextVertex;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): ChainShape {\n const clone = new ChainShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): number {\n // edge count = vertex count - 1\n return this.m_count - 1;\n }\n\n // Get a child edge.\n getChildEdge(edge: EdgeShape, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count - 1);\n edge.m_type = EdgeShape.TYPE;\n edge.m_radius = this.m_radius;\n\n edge.m_vertex1 = this.m_vertices[childIndex];\n edge.m_vertex2 = this.m_vertices[childIndex + 1];\n\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\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\n getVertex(index: number): Vec2 {\n _ASSERT && console.assert(0 <= index && index <= this.m_count);\n if (index < this.m_count) {\n return this.m_vertices[index];\n } else {\n return this.m_vertices[0];\n }\n }\n\n isLoop(): boolean {\n return this.m_isLoop;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * This always return false.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n const edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1));\n return edgeShape.rayCast(output, input, xf, 0);\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n matrix.transformVec2(v1, xf, this.getVertex(childIndex));\n matrix.transformVec2(v2, xf, this.getVertex(childIndex + 1));\n\n AABB.combinePoints(aabb, v1, v2);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * Chains have zero mass.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.zeroVec2(massData.center);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\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}\n\nexport const Chain = ChainShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const center = matrix.vec2(0, 0);\n/** @internal */ const s = matrix.vec2(0, 0);\n\ndeclare module \"./PolygonShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PolygonShape(vertices?: Vec2Value[]): PolygonShape;\n}\n\n/**\n * A convex polygon. It is assumed that the interior of the polygon is to the\n * left of each edge. Polygons have a maximum number of vertices equal to\n * Settings.maxPolygonVertices. In most cases you should not need many vertices\n * for a convex polygon. extends Shape\n */\n// @ts-expect-error\nexport class PolygonShape extends Shape {\n static TYPE = \"polygon\" as const;\n /** @hidden */ m_type: \"polygon\";\n\n /** @hidden */ m_centroid: Vec2;\n /** @hidden */ m_vertices: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_normals: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_count: number;\n /** @hidden */ m_radius: number;\n\n constructor(vertices?: Vec2Value[]) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PolygonShape)) {\n return new PolygonShape(vertices);\n }\n\n super();\n\n this.m_type = PolygonShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n this.m_centroid = Vec2.zero();\n this.m_vertices = [];\n this.m_normals = [];\n this.m_count = 0;\n\n if (vertices && vertices.length) {\n this._set(vertices);\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertices: this.m_vertices,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): PolygonShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n\n const shape = new PolygonShape(vertices);\n return shape;\n }\n\n getType(): \"polygon\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): PolygonShape {\n const clone = new PolygonShape();\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 (let i = 0; i < this.m_count; i++) {\n clone.m_vertices.push(this.m_vertices[i].clone());\n }\n for (let i = 0; i < this.m_normals.length; i++) {\n clone.m_normals.push(this.m_normals[i].clone());\n }\n return clone;\n }\n\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /** @hidden */\n _reset(): void {\n this._set(this.m_vertices);\n }\n\n /**\n * @internal\n *\n * Create a convex hull from the given array of local points. The count must be\n * in the range [3, Settings.maxPolygonVertices].\n *\n * Warning: the points may be re-ordered, even if they form a convex polygon\n * Warning: collinear points are handled but not removed. Collinear points may\n * lead to poor stacking behavior.\n */\n _set(vertices: Vec2Value[]): void {\n _ASSERT && console.assert(3 <= vertices.length && vertices.length <= Settings.maxPolygonVertices);\n if (vertices.length < 3) {\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n let n = math_min(vertices.length, Settings.maxPolygonVertices);\n\n // Perform welding and copy vertices into local buffer.\n const ps: Vec2[] = []; // [Settings.maxPolygonVertices];\n for (let i = 0; i < n; ++i) {\n const v = vertices[i];\n\n let unique = true;\n for (let j = 0; j < ps.length; ++j) {\n if (Vec2.distanceSquared(v, ps[j]) < 0.25 * Settings.linearSlopSquared) {\n unique = false;\n break;\n }\n }\n\n if (unique) {\n ps.push(Vec2.clone(v));\n }\n }\n\n n = ps.length;\n if (n < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n // Create the convex hull using the Gift wrapping algorithm\n // http://en.wikipedia.org/wiki/Gift_wrapping_algorithm\n\n // Find the right most point on the hull (in case of multiple points bottom most is used)\n let i0 = 0;\n let x0 = ps[0].x;\n for (let i = 1; i < n; ++i) {\n const x = ps[i].x;\n if (x > x0 || (x === x0 && ps[i].y < ps[i0].y)) {\n i0 = i;\n x0 = x;\n }\n }\n\n const hull = [] as number[]; // [Settings.maxPolygonVertices];\n let m = 0;\n let ih = i0;\n\n while (true) {\n _ASSERT && console.assert(m < Settings.maxPolygonVertices);\n hull[m] = ih;\n\n let ie = 0;\n for (let j = 1; j < n; ++j) {\n if (ie === ih) {\n ie = j;\n continue;\n }\n\n const r = Vec2.sub(ps[ie], ps[hull[m]]);\n const v = Vec2.sub(ps[j], ps[hull[m]]);\n const c = Vec2.crossVec2Vec2(r, v);\n // c < 0 means counter-clockwise wrapping, c > 0 means clockwise wrapping\n if (c < 0.0) {\n ie = j;\n }\n\n // Collinearity check\n if (c === 0.0 && v.lengthSquared() > r.lengthSquared()) {\n ie = j;\n }\n }\n\n ++m;\n ih = ie;\n\n if (ie === i0) {\n break;\n }\n }\n\n if (m < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n this.m_count = m;\n\n // Copy vertices.\n this.m_vertices = [];\n for (let i = 0; i < m; ++i) {\n this.m_vertices[i] = ps[hull[i]];\n }\n\n // Compute normals. Ensure the edges have non-zero length.\n for (let i = 0; i < m; ++i) {\n const i1 = i;\n const i2 = i + 1 < m ? i + 1 : 0;\n const edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]);\n _ASSERT && console.assert(edge.lengthSquared() > EPSILON * EPSILON);\n this.m_normals[i] = Vec2.crossVec2Num(edge, 1.0);\n this.m_normals[i].normalize();\n }\n\n // Compute the polygon centroid.\n this.m_centroid = computeCentroid(this.m_vertices, m);\n }\n\n /** @internal */ _setAsBox(hx: number, hy: number, center?: Vec2Value, angle?: number): void {\n // start with right-bottom, counter-clockwise, as in Gift wrapping algorithm in PolygonShape._set()\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\n this.m_normals[0] = Vec2.neo(1.0, 0.0);\n this.m_normals[1] = Vec2.neo(0.0, 1.0);\n this.m_normals[2] = Vec2.neo(-1.0, 0.0);\n this.m_normals[3] = Vec2.neo(0.0, -1.0);\n\n this.m_count = 4;\n\n if (center && Vec2.isValid(center)) {\n angle = angle || 0;\n\n matrix.copyVec2(this.m_centroid, center);\n\n const xf = Transform.identity();\n xf.p.setVec2(center);\n xf.q.setAngle(angle);\n\n // Transform vertices and normals.\n for (let i = 0; i < this.m_count; ++i) {\n this.m_vertices[i] = Transform.mulVec2(xf, this.m_vertices[i]);\n this.m_normals[i] = Rot.mulVec2(xf.q, this.m_normals[i]);\n }\n }\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const pLocal = matrix.detransformVec2(temp, xf, p);\n\n for (let i = 0; i < this.m_count; ++i) {\n const dot = matrix.dotVec2(this.m_normals[i], pLocal) - matrix.dotVec2(this.m_normals[i], this.m_vertices[i]);\n if (dot > 0.0) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n\n // Put the ray into the polygon's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n let lower = 0.0;\n let upper = input.maxFraction;\n\n let index = -1;\n\n for (let i = 0; i < this.m_count; ++i) {\n // p = p1 + a * d\n // dot(normal, p - v) = 0\n // dot(normal, p1 - v) + a * dot(normal, d) = 0\n const numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1));\n const denominator = Vec2.dot(this.m_normals[i], d);\n\n if (denominator == 0.0) {\n if (numerator < 0.0) {\n return false;\n }\n } else {\n // Note: we want this predicate without division:\n // lower < numerator / denominator, where denominator < 0\n // Since denominator < 0, we have to flip the inequality:\n // lower < numerator / denominator <==> denominator * lower > numerator.\n if (denominator < 0.0 && numerator < lower * denominator) {\n // Increase lower.\n // The segment enters this half-space.\n lower = numerator / denominator;\n index = i;\n } else if (denominator > 0.0 && numerator < upper * denominator) {\n // Decrease upper.\n // The segment exits this half-space.\n upper = numerator / denominator;\n }\n }\n\n // The use of epsilon here causes the assert on lower to trip\n // in some cases. Apparently the use of epsilon was to make edge\n // shapes work, but now those are handled separately.\n // if (upper < lower - matrix.EPSILON)\n if (upper < lower) {\n return false;\n }\n }\n\n _ASSERT && console.assert(0.0 <= lower && lower <= input.maxFraction);\n\n if (index >= 0) {\n output.fraction = lower;\n output.normal = Rot.mulVec2(xf.q, this.m_normals[index]);\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const v = matrix.transformVec2(temp, xf, this.m_vertices[i]);\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, v.y);\n maxY = math_max(maxY, v.y);\n }\n\n matrix.setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius);\n matrix.setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n // Polygon mass, centroid, and inertia.\n // Let rho be the polygon density in mass per unit area.\n // Then:\n // mass = rho * int(dA)\n // centroid.x = (1/mass) * rho * int(x * dA)\n // centroid.y = (1/mass) * rho * int(y * dA)\n // I = rho * int((x*x + y*y) * dA)\n //\n // We can compute these integrals by summing all the integrals\n // for each triangle of the polygon. To evaluate the integral\n // for a single triangle, we make a change of variables to\n // the (u,v) coordinates of the triangle:\n // x = x0 + e1x * u + e2x * v\n // y = y0 + e1y * u + e2y * v\n // where 0 <= u && 0 <= v && u + v <= 1.\n //\n // We integrate u from [0,1-v] and then v from [0,1].\n // We also need to use the Jacobian of the transformation:\n // D = cross(e1, e2)\n //\n // Simplification: triangle centroid = (1/3) * (p1 + p2 + p3)\n //\n // The rest of the derivation is handled by computer algebra.\n\n _ASSERT && console.assert(this.m_count >= 3);\n\n matrix.zeroVec2(center);\n let area = 0.0;\n let I = 0.0;\n\n // s is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n matrix.zeroVec2(s);\n\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < this.m_count; ++i) {\n matrix.plusVec2(s, this.m_vertices[i]);\n }\n matrix.scaleVec2(s, 1.0 / this.m_count, s);\n\n const k_inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < this.m_count; ++i) {\n // Triangle vertices.\n matrix.subVec2(e1, this.m_vertices[i], s);\n if ( i + 1 < this.m_count) {\n matrix.subVec2(e2, this.m_vertices[i + 1], s);\n } else {\n matrix.subVec2(e2, this.m_vertices[0], s);\n }\n\n const D = matrix.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine2Vec2(temp, triangleArea * k_inv3, e1, triangleArea * k_inv3, e2);\n matrix.plusVec2(center, temp);\n\n const ex1 = e1.x;\n const ey1 = e1.y;\n const ex2 = e2.x;\n const ey2 = e2.y;\n\n const intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2;\n const inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2;\n\n I += (0.25 * k_inv3 * D) * (intx2 + inty2);\n }\n\n // Total mass\n massData.mass = density * area;\n\n // Center of mass\n _ASSERT && console.assert(area > EPSILON);\n matrix.scaleVec2(center, 1.0 / area, center);\n matrix.addVec2(massData.center, center, s);\n\n // Inertia tensor relative to the local origin (point s).\n massData.I = density * I;\n\n // Shift to center of mass then to original body origin.\n massData.I += massData.mass * (matrix.dotVec2(massData.center, massData.center) - matrix.dotVec2(center, center));\n }\n\n /**\n * Validate convexity. This is a very time consuming operation.\n * @returns true if valid\n */\n validate(): boolean {\n for (let i = 0; i < this.m_count; ++i) {\n const i1 = i;\n const i2 = i < this.m_count - 1 ? i1 + 1 : 0;\n const p = this.m_vertices[i1];\n matrix.subVec2(e, this.m_vertices[i2], p);\n\n for (let j = 0; j < this.m_count; ++j) {\n if (j == i1 || j == i2) {\n continue;\n }\n\n const c = matrix.crossVec2Vec2(e, matrix.subVec2(temp, this.m_vertices[j], p));\n if (c < 0.0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\n for (let 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}\n\n/** @internal */ function computeCentroid(vs: Vec2[], count: number): Vec2 {\n _ASSERT && console.assert(count >= 3);\n\n const c = Vec2.zero();\n let area = 0.0;\n\n // pRef is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n const pRef = Vec2.zero();\n if (false) {\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < count; ++i) {\n pRef.add(vs[i]);\n }\n pRef.mul(1.0 / count);\n }\n\n const inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < count; ++i) {\n // Triangle vertices.\n const p1 = pRef;\n const p2 = vs[i];\n const p3 = i + 1 < count ? vs[i + 1] : vs[0];\n\n const e1 = Vec2.sub(p2, p1);\n const e2 = Vec2.sub(p3, p1);\n\n const D = Vec2.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine3Vec2(temp, 1, p1, 1, p2, 1, p3);\n matrix.plusScaleVec2(c, triangleArea * inv3, temp);\n }\n\n // Centroid\n _ASSERT && console.assert(area > EPSILON);\n c.mul(1.0 / area);\n return c;\n}\n\nexport const Polygon = PolygonShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Shape } from \"../Shape\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_PI = Math.PI;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\ndeclare module \"./CircleShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function CircleShape(position: Vec2Value, radius?: number): CircleShape;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function CircleShape(radius?: number): CircleShape;\n}\n\n/** Circle shape. */\n// @ts-expect-error\nexport class CircleShape extends Shape {\n static TYPE = \"circle\" as const;\n /** @hidden */ m_type: \"circle\";\n\n /** @hidden */ m_p: Vec2;\n /** @hidden */ m_radius: number;\n\n constructor(position: Vec2Value, radius?: number);\n constructor(radius?: number);\n constructor(a: any, b?: any) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof CircleShape)) {\n return new CircleShape(a, b);\n }\n\n super();\n\n this.m_type = CircleShape.TYPE;\n this.m_p = Vec2.zero();\n this.m_radius = 1;\n\n if (typeof a === \"object\" && Vec2.isValid(a)) {\n this.m_p.setVec2(a);\n\n if (typeof b === \"number\") {\n this.m_radius = b;\n }\n\n } else if (typeof a === \"number\") {\n this.m_radius = a;\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n p: this.m_p,\n radius: this.m_radius,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): CircleShape {\n return new CircleShape(data.p, data.radius);\n }\n\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getType(): \"circle\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getCenter(): Vec2 {\n return this.m_p;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): CircleShape {\n const clone = new CircleShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const center = matrix.transformVec2(temp, xf, this.m_p);\n return matrix.distSqrVec2(p, center) <= this.m_radius * this.m_radius;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // Collision Detection in Interactive 3D Environments by Gino van den Bergen\n // From Section 3.1.2\n // x = s + a * r\n // norm(x) = radius\n\n const position = Vec2.add(xf.p, Rot.mulVec2(xf.q, this.m_p));\n const s = Vec2.sub(input.p1, position);\n const b = Vec2.dot(s, s) - this.m_radius * this.m_radius;\n\n // Solve quadratic equation.\n const r = Vec2.sub(input.p2, input.p1);\n const c = Vec2.dot(s, r);\n const rr = Vec2.dot(r, r);\n const sigma = c * c - rr * b;\n\n // Check for negative discriminant and short segment.\n if (sigma < 0.0 || rr < EPSILON) {\n return false;\n }\n\n // Find the point of intersection of the line with the circle.\n let a = -(c + math_sqrt(sigma));\n\n // Is the intersection point on the segment?\n if (0.0 <= a && a <= input.maxFraction * rr) {\n a /= rr;\n output.fraction = a;\n output.normal = Vec2.add(s, Vec2.mulNumVec2(a, r));\n output.normal.normalize();\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n const p = matrix.transformVec2(temp, xf, this.m_p);\n\n matrix.setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius);\n matrix.setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n massData.mass = density * math_PI * this.m_radius * this.m_radius;\n matrix.copyVec2(massData.center, this.m_p);\n // inertia about the local origin\n massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + matrix.lengthSqrVec2(this.m_p));\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Circle = CircleShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. A value of 0 disables softness.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * Distance length.\n */\n length?: number;\n}\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointDef extends JointDef, DistanceJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0\n};\n\ndeclare module \"./DistanceJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function DistanceJoint(def: DistanceJointDef): DistanceJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function DistanceJoint(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value): DistanceJoint;\n}\n\n/**\n * A distance joint constrains two points on two bodies to remain at a fixed\n * distance from each other. You can view this as a massless, rigid rod.\n */\n// @ts-expect-error\nexport class DistanceJoint extends Joint {\n static TYPE = \"distance-joint\" as const;\n\n // Solver shared\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_length: number;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_gamma: number;\n /** @internal */ m_bias: number;\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n /**\n * @param def DistanceJoint definition.\n */\n constructor(def: DistanceJointDef);\n /**\n * @param anchorA Anchor A in global coordination.\n * @param anchorB Anchor B in global coordination.\n */\n constructor(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value);\n constructor(def: DistanceJointDef, bodyA?: Body, bodyB?: Body, anchorA?: Vec2Value, anchorB?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof DistanceJoint)) {\n return new DistanceJoint(def, bodyA, bodyB, anchorA, anchorB);\n }\n\n // order of constructor arguments is changed in v0.2\n if (bodyB && anchorA && (\"m_type\" in anchorA) && (\"x\" in bodyB) && (\"y\" in bodyB)) {\n const temp = bodyB;\n bodyB = anchorA as any as Body;\n anchorA = temp as any as Vec2;\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = DistanceJoint.TYPE;\n\n // Solver shared\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 :\n 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.0;\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n\n // 1-D constrained system\n // m (v2 - v1) = lambda\n // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass.\n // x2 = x1 + h * v2\n\n // 1-D mass-damper-spring system\n // m (v2 - v1) + h * d * v2 + h * k *\n\n // C = norm(p2 - p1) - L\n // u = (p2 - p1) / norm(p2 - p1)\n // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1))\n // J = [-u -cross(r1, u) u cross(r2, u)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n length: this.m_length,\n\n impulse: this.m_impulse,\n gamma: this.m_gamma,\n bias: this.m_bias,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): DistanceJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new DistanceJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\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\n if (def.length > 0) {\n this.m_length = +def.length;\n } else if (def.length < 0) { // don't change length\n } else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) {\n this.m_length = Vec2.distance(\n this.m_bodyA.getWorldPoint(this.m_localAnchorA),\n this.m_bodyB.getWorldPoint(this.m_localAnchorB)\n );\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the natural length. Manipulating the length can lead to non-physical\n * behavior when the frequency is zero.\n */\n setLength(length: number): void {\n this.m_length = length;\n }\n\n /**\n * Get the natural length.\n */\n getLength(): number {\n return this.m_length;\n }\n\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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(cB, this.m_rB), Vec2.add(cA, this.m_rA));\n\n // Handle singularity.\n const length = this.m_u.length();\n if (length > Settings.linearSlop) {\n this.m_u.mul(1.0 / length);\n } else {\n this.m_u.setNum(0.0, 0.0);\n }\n\n const crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n let invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu;\n\n // Compute the effective mass matrix.\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (this.m_frequencyHz > 0.0) {\n const C = length - this.m_length;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * this.m_mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_mass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invMass += this.m_gamma;\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n } else {\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n const Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA);\n\n const impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse);\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n if (this.m_frequencyHz > 0.0) {\n // There is no position correction for soft distance constraints.\n return true;\n }\n\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const length = u.normalize();\n const C = clamp(length - this.m_length, -Settings.maxLinearCorrection, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointOpt extends JointOpt {\n /**\n * The maximum friction force in N.\n */\n maxForce?: number;\n /**\n * The maximum friction torque in N-m.\n */\n maxTorque?: number;\n}\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointDef extends JointDef, FrictionJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n maxTorque : 0.0,\n};\n\ndeclare module \"./FrictionJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function FrictionJoint(def: FrictionJointDef): FrictionJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function FrictionJoint(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): FrictionJoint;\n}\n\n/**\n * Friction joint. This is used for top-down friction. It provides 2D\n * translational friction and angular friction.\n */\n// @ts-expect-error\nexport class FrictionJoint extends Joint {\n static TYPE = \"friction-joint\" as const;\n\n /** @internal */ m_type: \"friction-joint\";\n\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n // Solver shared\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: FrictionJointDef);\n /**\n * @param anchor Anchor in global coordination.\n */\n constructor(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: FrictionJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof FrictionJoint)) {\n return new FrictionJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = FrictionJoint.TYPE;\n\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\n // Solver shared\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): FrictionJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new FrictionJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y\n * 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\n * this.m_rB.x;\n\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.sub(\n Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)),\n Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA))\n );\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = this.m_linearImpulse;\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) {\n this.m_linearImpulse.normalize();\n this.m_linearImpulse.mul(maxImpulse);\n }\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Vec3, Vec3Value } from \"./Vec3\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 3-by-3 matrix. Stored in column-major order.\n */\nexport class Mat33 {\n ex: Vec3;\n ey: Vec3;\n ez: Vec3;\n\n constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value);\n constructor();\n constructor(a?: Vec3Value, b?: Vec3Value, c?: Vec3Value) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec3.clone(a);\n this.ey = Vec3.clone(b);\n this.ez = Vec3.clone(c);\n } else {\n this.ex = Vec3.zero();\n this.ey = Vec3.zero();\n this.ez = Vec3.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat33.isValid(o), \"Invalid Mat33!\", o);\n }\n\n /**\n * Set this matrix to all zeros.\n */\n setZero(): Mat33 {\n this.ex.setZero();\n this.ey.setZero();\n this.ez.setZero();\n return this;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve33(v: Vec3Value): Vec3 {\n // let det = matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, this.ez));\n let cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y;\n let cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z;\n let cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x;\n let det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = new Vec3();\n // r.x = det * matrix.dotVec3(v, matrix.newCrossVec3(this.ey, this.ez));\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 * (v.x * cross_x + v.y * cross_y + v.z * cross_z);\n\n // r.y = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(v, this.ez));\n cross_x = v.y * this.ez.z - v.z * this.ez.y;\n cross_y = v.z * this.ez.x - v.x * this.ez.z;\n cross_z = v.x * this.ez.y - v.y * this.ez.x;\n r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z);\n\n // r.z = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, v));\n cross_x = this.ey.y * v.z - this.ey.z * v.y;\n cross_y = this.ey.z * v.x - this.ey.x * v.z;\n cross_z = this.ey.x * v.y - this.ey.y * v.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\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix\n * equation.\n */\n solve22(v: Vec2Value): Vec2 {\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a21 = this.ex.y;\n const a22 = this.ey.y;\n let det = a11 * a22 - a12 * a21;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = Vec2.zero();\n r.x = det * (a22 * v.x - a12 * v.y);\n r.y = det * (a11 * v.y - a21 * v.x);\n return r;\n }\n\n /**\n * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if\n * singular.\n */\n getInverse22(M: Mat33): void {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n M.ex.x = det * d;\n M.ey.x = -det * b;\n M.ex.z = 0.0;\n M.ex.y = -det * c;\n M.ey.y = det * a;\n M.ey.z = 0.0;\n M.ez.x = 0.0;\n M.ez.y = 0.0;\n M.ez.z = 0.0;\n }\n\n /**\n * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix\n * if singular.\n */\n getSymInverse33(M: Mat33): void {\n let det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez));\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a13 = this.ez.x;\n const a22 = this.ey.y;\n const a23 = this.ez.y;\n const a33 = this.ez.z;\n\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\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\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\n /**\n * Multiply a matrix times a vector.\n */\n static mul(a: Mat33, b: Vec2Value): Vec2;\n static mul(a: Mat33, b: Vec3Value): Vec3;\n static mul(a, b) {\n _ASSERT && Mat33.assert(a);\n if (b && \"z\" in b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n\n } else if (b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec3(a: Mat33, b: Vec3Value): Vec3 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n }\n\n static mulVec2(a: Mat33, b: Vec2Value): Vec2 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n static add(a: Mat33, b: Mat33): Mat33 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Mat33.assert(b);\n return new Mat33(\n Vec3.add(a.ex, b.ex),\n Vec3.add(a.ey, b.ey),\n Vec3.add(a.ez, b.ez)\n );\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n// todo: use string?\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n} \n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointOpt extends JointOpt {\n /**\n * The lower angle for the joint limit (radians).\n */\n lowerAngle?: number;\n /**\n * The upper angle for the joint limit (radians).\n */\n upperAngle?: number;\n /**\n * The maximum motor torque used to achieve the desired motor speed. Usually\n * in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed. Usually in radians per second.\n */\n motorSpeed?: number;\n /**\n * A flag to enable joint limits.\n */\n enableLimit?: boolean;\n /**\n * A flag to enable the joint motor.\n */\n enableMotor?: boolean;\n}\n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointDef extends JointDef, RevoluteJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n lowerAngle : 0.0,\n upperAngle : 0.0,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n enableLimit : false,\n enableMotor : false\n};\n\ndeclare module \"./RevoluteJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RevoluteJoint(def: RevoluteJointDef): RevoluteJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RevoluteJoint(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): RevoluteJoint;\n}\n\n/**\n * A revolute joint constrains two bodies to share a common point while they are\n * free to rotate about the point. The relative rotation about the shared point\n * is the joint angle. You can limit the relative rotation with a joint limit\n * that specifies a lower and upper angle. You can use a motor to drive the\n * relative rotation about the shared point. A maximum motor torque is provided\n * so that infinite forces are not generated.\n */\n// @ts-expect-error\nexport class RevoluteJoint extends Joint {\n static TYPE = \"revolute-joint\" as const;\n\n /** @internal */ m_type: \"revolute-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerAngle: number;\n /** @internal */ m_upperAngle: number;\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n // effective mass for point-to-point constraint.\n /** @internal */ m_mass: Mat33;\n // effective mass for motor/limit angular constraint.\n /** @internal */ m_motorMass: number;\n /** @internal */ m_limitState: number;\n\n constructor(def: RevoluteJointDef);\n constructor(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RevoluteJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RevoluteJoint)) {\n return new RevoluteJoint(def, bodyA, bodyB, anchor);\n }\n\n def = def ?? {} as RevoluteJointDef;\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_mass = new Mat33();\n this.m_limitState = LimitState.inactiveLimit;\n\n this.m_type = RevoluteJoint.TYPE;\n\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\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\n if (Number.isFinite(def.referenceAngle)) {\n this.m_referenceAngle = def.referenceAngle;\n } else {\n this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle();\n }\n\n this.m_impulse = new Vec3();\n this.m_motorImpulse = 0.0;\n\n this.m_lowerAngle = def.lowerAngle ?? DEFAULTS.lowerAngle;\n this.m_upperAngle = def.upperAngle ?? DEFAULTS.upperAngle;\n this.m_maxMotorTorque = def.maxMotorTorque ?? DEFAULTS.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed ?? DEFAULTS.motorSpeed;\n this.m_enableLimit = def.enableLimit ?? DEFAULTS.enableLimit;\n this.m_enableMotor = def.enableMotor ?? DEFAULTS.enableMotor;\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Motor constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any):RevoluteJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RevoluteJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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 !== undefined) {\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 !== undefined) {\n this.m_enableMotor = def.enableMotor;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle in radians.\n */\n getJointAngle(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle speed in radians per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_angularVelocity - bA.m_angularVelocity;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Get the current motor torque given the inverse time step. Unit is N*m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set the motor speed in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set the maximum motor torque, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit in radians.\n */\n getLowerLimit(): number {\n return this.m_lowerAngle;\n }\n\n /**\n * Get the upper joint limit in radians.\n */\n getUpperLimit(): number {\n return this.m_upperAngle;\n }\n\n /**\n * Set the joint limits in radians.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(lower <= upper);\n\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.0;\n this.m_lowerAngle = lower;\n this.m_upperAngle = upper;\n }\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force given the inverse time step. Unit is N.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque due to the joint limit given the inverse time step.\n * Unit is N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\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\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n\n if (this.m_enableMotor == false || fixedRotation) {\n this.m_motorImpulse = 0.0;\n }\n\n if (this.m_enableLimit && fixedRotation == false) {\n const jointAngle = aB - aA - this.m_referenceAngle;\n\n if (math_abs(this.m_upperAngle - this.m_lowerAngle) < 2.0 * Settings.angularSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointAngle <= this.m_lowerAngle) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atLowerLimit;\n\n } else if (jointAngle >= this.m_upperAngle) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atUpperLimit;\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\n // Solve motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits && fixedRotation == false) {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(this.m_mass.solve33(Cdot));\n\n if (this.m_limitState == LimitState.equalLimits) {\n this.m_impulse.add(impulse);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse < 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse > 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n\n } else {\n // Solve point-to-point constraint\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const impulse = this.m_mass.solve22(Vec2.neg(Cdot));\n\n this.m_impulse.x += impulse.x;\n this.m_impulse.y += impulse.y;\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n let angularError = 0.0;\n let positionError = 0.0;\n\n const fixedRotation = (this.m_invIA + this.m_invIB == 0.0);\n\n // Solve angular limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const angle = aB - aA - this.m_referenceAngle;\n let limitImpulse = 0.0;\n\n if (this.m_limitState == LimitState.equalLimits) {\n // Prevent large angular corrections\n const C = clamp(angle - this.m_lowerAngle, -Settings.maxAngularCorrection, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n angularError = math_abs(C);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n let C = angle - this.m_lowerAngle;\n angularError = -C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C + Settings.angularSlop, -Settings.maxAngularCorrection, 0.0);\n limitImpulse = -this.m_motorMass * C;\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n let C = angle - this.m_upperAngle;\n angularError = C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C - Settings.angularSlop, 0.0, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n }\n\n aA -= this.m_invIA * limitImpulse;\n aB += this.m_invIB * limitImpulse;\n }\n\n // Solve point-to-point constraint.\n {\n qA.setAngle(aA);\n qB.setAngle(aB);\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n const C = Vec2.zero();\n C.addCombine(1, cB, 1, rB);\n C.subCombine(1, cA, 1, rA);\n positionError = C.length();\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y;\n K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y;\n K.ey.x = K.ex.y;\n K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x;\n\n const impulse = Vec2.neg(K.solve(C));\n\n cA.subMul(mA, impulse);\n aA -= iA * Vec2.crossVec2Vec2(rA, impulse);\n\n cB.addMul(mB, impulse);\n aB += iB * Vec2.crossVec2Vec2(rB, impulse);\n }\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3, \n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointOpt extends JointOpt {\n /**\n * Enable/disable the joint limit.\n */\n enableLimit?: boolean;\n /**\n * The lower translation limit, usually in meters.\n */\n lowerTranslation?: number;\n /**\n * The upper translation limit, usually in meters.\n */\n upperTranslation?: number;\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorForce?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointDef extends JointDef, PrismaticJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation unit axis in bodyA.\n */\n localAxisA: Vec2Value;\n /**\n * referenceAngle The constrained angle between the bodies:\n * bodyB_angle - bodyA_angle.\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableLimit : false,\n lowerTranslation : 0.0,\n upperTranslation : 0.0,\n enableMotor : false,\n maxMotorForce : 0.0,\n motorSpeed : 0.0\n};\n\ndeclare module \"./PrismaticJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PrismaticJoint(def: PrismaticJointDef): PrismaticJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PrismaticJoint(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value): PrismaticJoint;\n}\n\n/**\n * A prismatic joint. This joint provides one degree of freedom: translation\n * along an axis fixed in bodyA. Relative rotation is prevented. You can use a\n * joint limit to restrict the range of motion and a joint motor to drive the\n * motion or to model joint friction.\n */\n// @ts-expect-error\nexport class PrismaticJoint extends Joint {\n static TYPE = \"prismatic-joint\" as const;\n\n /** @internal */ m_type: \"prismatic-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerTranslation: number;\n /** @internal */ m_upperTranslation: number;\n /** @internal */ m_maxMotorForce: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n /** @internal */ m_limitState: number; // TODO enum\n /** @internal */ m_axis: Vec2;\n /** @internal */ m_perp: Vec2;\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_s1: number;\n /** @internal */ m_s2: number;\n /** @internal */ m_a1: number;\n /** @internal */ m_a2: number;\n /** @internal */ m_K: Mat33;\n\n constructor(def: PrismaticJointDef);\n constructor(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: PrismaticJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PrismaticJoint)) {\n return new PrismaticJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PrismaticJoint.TYPE;\n\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, 0.0));\n this.m_localXAxisA.normalize();\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle();\n\n this.m_impulse = new Vec3();\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n\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.inactiveLimit;\n\n this.m_axis = Vec2.zero();\n this.m_perp = Vec2.zero();\n\n this.m_K = new Mat33();\n\n // Linear constraint (point-to-line)\n // d = p2 - p1 = x2 + r2 - x1 - r1\n // C = dot(perp, d)\n // Cdot = dot(d, cross(w1, perp)) + dot(perp, v2 + cross(w2, r2) - v1 -\n // cross(w1, r1))\n // = -dot(perp, v1) - dot(cross(d + r1, perp), w1) + dot(perp, v2) +\n // dot(cross(r2, perp), v2)\n // J = [-perp, -cross(d + r1, perp), perp, cross(r2,perp)]\n //\n // Angular constraint\n // C = a2 - a1 + a_initial\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n //\n // K = J * invM * JT\n //\n // J = [-a -s1 a s2]\n // [0 -1 0 1]\n // a = perp\n // s1 = cross(d + r1, a) = cross(p2 - x1, a)\n // s2 = cross(r2, a) = cross(p2 - x2, a)\n\n // Motor/Limit linear constraint\n // C = dot(ax1, d)\n // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) +\n // dot(cross(r2, ax1), v2)\n // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)]\n\n // Block Solver\n // We develop a block solver that includes the joint limit. This makes the\n // limit stiff (inelastic) even\n // when the mass has poor distribution (leading to large torques about the\n // joint anchor points).\n //\n // The Jacobian has 3 rows:\n // J = [-uT -s1 uT s2] // linear\n // [0 -1 0 1] // angular\n // [-vT -a1 vT a2] // limit\n //\n // u = perp\n // v = axis\n // s1 = cross(d + r1, u), s2 = cross(r2, u)\n // a1 = cross(d + r1, v), a2 = cross(r2, v)\n\n // M * (v2 - v1) = JT * df\n // J * v2 = bias\n //\n // v2 = v1 + invM * JT * df\n // J * (v1 + invM * JT * df) = bias\n // K * df = bias - J * v1 = -Cdot\n // K = J * invM * JT\n // Cdot = J * v1 - bias\n //\n // Now solve for f2.\n // df = f2 - f1\n // K * (f2 - f1) = -Cdot\n // f2 = invK * (-Cdot) + f1\n //\n // Clamp accumulated limit impulse.\n // lower: f2(3) = max(f2(3), 0)\n // upper: f2(3) = min(f2(3), 0)\n //\n // Solve for correct f2(1:2)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:3) * f1\n // = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:2) * f1(1:2) + K(1:2,3) * f1(3)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3)) +\n // K(1:2,1:2) * f1(1:2)\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n //\n // Now compute impulse to be applied:\n // df = f2 - f1\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PrismaticJoint {\n data = {...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 const joint = new PrismaticJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, 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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const pA = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const pB = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = this.m_bodyA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const rA = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter));\n const rB = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter));\n const p1 = Vec2.add(bA.m_sweep.c, rA);\n const p2 = Vec2.add(bB.m_sweep.c, rB);\n const d = Vec2.sub(p2, p1);\n const axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA);\n\n const vA = bA.m_linearVelocity;\n const vB = bB.m_linearVelocity;\n const wA = bA.m_angularVelocity;\n const wB = bB.m_angularVelocity;\n\n const speed = Vec2.dot(d, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB, wB, rB), Vec2.addCrossNumVec2(vA, wA, rA)));\n return speed;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit, usually in meters.\n */\n getLowerLimit(): number {\n return this.m_lowerTranslation;\n }\n\n /**\n * Get the upper joint limit, usually in meters.\n */\n getUpperLimit(): number {\n return this.m_upperTranslation;\n }\n\n /**\n * Set the joint limits, usually in meters.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(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.0;\n }\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in meters per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Set the maximum motor force, usually in N.\n */\n setMaxMotorForce(force: number): void {\n if (force == this.m_maxMotorForce) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorForce = force;\n }\n\n getMaxMotorForce(): number {\n return this.m_maxMotorForce;\n }\n\n /**\n * Get the motor speed, usually in meters per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Get the current motor force given the inverse time step, usually in N.\n */\n getMotorForce(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\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\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.y;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute motor Jacobian and effective mass.\n {\n this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_axis);\n this.m_a2 = Vec2.crossVec2Vec2(rB, this.m_axis);\n\n this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2\n * this.m_a2;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n }\n\n // Prismatic constraint.\n {\n this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_perp);\n this.m_s2 = Vec2.crossVec2Vec2(rB, this.m_perp);\n\n const s1test = Vec2.crossVec2Vec2(rA, this.m_perp);\n\n const k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2;\n const k12 = iA * this.m_s1 + iB * this.m_s2;\n const k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For bodies with fixed rotation.\n k22 = 1.0;\n }\n const k23 = iA * this.m_a1 + iB * this.m_a2;\n const k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2;\n\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\n // Compute motor and limit terms.\n if (this.m_enableLimit) {\n\n const jointTranslation = Vec2.dot(this.m_axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Settings.linearSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointTranslation <= this.m_lowerTranslation) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_limitState = LimitState.atLowerLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else if (jointTranslation >= this.m_upperTranslation) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_limitState = LimitState.atUpperLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n if (this.m_enableMotor == false) {\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse\n + this.m_impulse.z, this.m_axis);\n const LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1;\n const LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Solve linear motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits) {\n const Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB, vA)) + this.m_a2 * wB\n - this.m_a1 * wA;\n let impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorForce;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse,\n -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_axis);\n const LA = impulse * this.m_a1;\n const LB = impulse * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n const Cdot1 = Vec2.zero();\n Cdot1.x += Vec2.dot(this.m_perp, vB) + this.m_s2 * wB;\n Cdot1.x -= Vec2.dot(this.m_perp, vA) + this.m_s1 * wA;\n Cdot1.y = wB - wA;\n\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit) {\n // Solve prismatic and limit constraint in block form.\n let Cdot2 = 0;\n Cdot2 += Vec2.dot(this.m_axis, vB) + this.m_a2 * wB;\n Cdot2 -= Vec2.dot(this.m_axis, vA) + this.m_a1 * wA;\n\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const f1 = Vec3.clone(this.m_impulse);\n let df = this.m_K.solve33(Vec3.neg(Cdot));\n this.m_impulse.add(df);\n\n if (this.m_limitState == LimitState.atLowerLimit) {\n this.m_impulse.z = math_max(this.m_impulse.z, 0.0);\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n this.m_impulse.z = math_min(this.m_impulse.z, 0.0);\n }\n\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n const b = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y));\n const f2r = Vec2.add(this.m_K.solve22(b), Vec2.neo(f1.x, f1.y));\n this.m_impulse.x = f2r.x;\n this.m_impulse.y = f2r.y;\n\n df = Vec3.sub(this.m_impulse, f1);\n\n const P = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis);\n const LA = df.x * this.m_s1 + df.y + df.z * this.m_a1;\n const LB = df.x * this.m_s2 + df.y + df.z * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n // Limit is inactive, just solve the prismatic constraint in block form.\n const df = this.m_K.solve22(Vec2.neg(Cdot1));\n this.m_impulse.x += df.x;\n this.m_impulse.y += df.y;\n\n const P = Vec2.mulNumVec2(df.x, this.m_perp);\n const LA = df.x * this.m_s1 + df.y;\n const LB = df.x * this.m_s2 + df.y;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute fresh Jacobians\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const axis = Rot.mulVec2(qA, this.m_localXAxisA);\n const a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), axis);\n const a2 = Vec2.crossVec2Vec2(rB, axis);\n const perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), perp);\n const s2 = Vec2.crossVec2Vec2(rB, perp);\n\n let impulse = new Vec3();\n const C1 = Vec2.zero();\n C1.x = Vec2.dot(perp, d);\n C1.y = aB - aA - this.m_referenceAngle;\n\n let linearError = math_abs(C1.x);\n const angularError = math_abs(C1.y);\n\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n let active = false; // bool\n let C2 = 0.0;\n if (this.m_enableLimit) {\n\n const translation = Vec2.dot(axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * linearSlop) {\n // Prevent large angular corrections\n C2 = clamp(translation, -maxLinearCorrection, maxLinearCorrection);\n linearError = math_max(linearError, math_abs(translation));\n active = true;\n\n } else if (translation <= this.m_lowerTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_lowerTranslation + linearSlop,\n -maxLinearCorrection, 0.0);\n linearError = Math\n .max(linearError, this.m_lowerTranslation - translation);\n active = true;\n\n } else if (translation >= this.m_upperTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_upperTranslation - linearSlop, 0.0,\n maxLinearCorrection);\n linearError = Math\n .max(linearError, translation - this.m_upperTranslation);\n active = true;\n }\n }\n\n if (active) {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n const k13 = iA * s1 * a1 + iB * s2 * a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For fixed rotation\n k22 = 1.0;\n }\n const k23 = iA * a1 + iB * a2;\n const k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2;\n\n const 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\n const C = new Vec3();\n C.x = C1.x;\n C.y = C1.y;\n C.z = C2;\n\n impulse = K.solve33(Vec3.neg(C));\n } else {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n k22 = 1.0;\n }\n\n const K = new Mat22();\n K.ex.setNum(k11, k12);\n K.ey.setNum(k12, k22);\n\n const impulse1 = K.solve(Vec2.neg(C1));\n impulse.x = impulse1.x;\n impulse.y = impulse1.y;\n impulse.z = 0.0;\n }\n\n const P = Vec2.combine(impulse.x, perp, impulse.z, axis);\n const LA = impulse.x * s1 + impulse.y + impulse.z * a1;\n const LB = impulse.x * s2 + impulse.y + impulse.z * a2;\n\n cA.subMul(mA, P);\n aA -= iA * LA;\n cB.addMul(mB, P);\n aB += iB * LB;\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError <= Settings.linearSlop\n && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { } from \"../../common/Math\";\nimport { Vec2 } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { RevoluteJoint } from \"./RevoluteJoint\";\nimport { PrismaticJoint } from \"./PrismaticJoint\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointOpt extends JointOpt {\n /**\n * The gear ratio. See {@link GearJoint} for explanation.\n */\n ratio?: number;\n}\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointDef extends JointDef, GearJointOpt {\n /**\n * The first revolute/prismatic joint attached to the gear joint.\n */\n joint1: RevoluteJoint | PrismaticJoint;\n /**\n * The second prismatic/revolute joint attached to the gear joint.\n */\n joint2: RevoluteJoint | PrismaticJoint;\n}\n\n/** @internal */ const DEFAULTS = {\n ratio : 1.0\n};\n\ndeclare module \"./GearJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function GearJoint(def: GearJointDef): GearJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function GearJoint(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number): GearJoint;\n}\n\n/**\n * A gear joint is used to connect two joints together. Either joint can be a\n * revolute or prismatic joint. You specify a gear ratio to bind the motions\n * together: coordinate1 + ratio * coordinate2 = constant\n *\n * The ratio can be negative or positive. If one joint is a revolute joint and\n * the other joint is a prismatic joint, then the ratio will have units of\n * length or units of 1/length. Warning: You have to manually destroy the gear\n * joint if joint1 or joint2 is destroyed.\n *\n * This definition requires two existing revolute or prismatic joints (any\n * combination will work).\n */\n// @ts-expect-error\nexport class GearJoint extends Joint {\n static TYPE = \"gear-joint\" as const;\n\n /** @internal */ m_type: \"gear-joint\";\n /** @internal */ m_joint1: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_joint2: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_type1: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_type2: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_bodyC: Body;\n /** @internal */ m_localAnchorC: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_referenceAngleA: number;\n /** @internal */ m_localAxisC: Vec2;\n /** @internal */ m_bodyD: Body;\n /** @internal */ m_localAnchorD: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngleB: number;\n /** @internal */ m_localAxisD: Vec2;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_lcA: Vec2;\n /** @internal */ m_lcB: Vec2;\n /** @internal */ m_lcC: Vec2;\n /** @internal */ m_lcD: Vec2;\n /** @internal */ m_mA: number;\n /** @internal */ m_mB: number;\n /** @internal */ m_mC: number;\n /** @internal */ m_mD: number;\n /** @internal */ m_iA: number;\n /** @internal */ m_iB: number;\n /** @internal */ m_iC: number;\n /** @internal */ m_iD: number;\n /** @internal */ m_JvAC: Vec2;\n /** @internal */ m_JvBD: Vec2;\n /** @internal */ m_JwA: number;\n /** @internal */ m_JwB: number;\n /** @internal */ m_JwC: number;\n /** @internal */ m_JwD: number;\n /** @internal */ m_mass: number;\n\n constructor(def: GearJointDef);\n constructor(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number);\n constructor(def: GearJointDef, bodyA?: Body, bodyB?: Body, joint1?: RevoluteJoint | PrismaticJoint, joint2?: RevoluteJoint | PrismaticJoint, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof GearJoint)) {\n return new GearJoint(def, bodyA, bodyB, joint1, joint2, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = GearJoint.TYPE;\n\n _ASSERT && console.assert(joint1.m_type === RevoluteJoint.TYPE || joint1.m_type === PrismaticJoint.TYPE);\n _ASSERT && console.assert(joint2.m_type === RevoluteJoint.TYPE || joint2.m_type === PrismaticJoint.TYPE);\n\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\n this.m_type1 = this.m_joint1.getType() as \"revolute-joint\" | \"prismatic-joint\";\n this.m_type2 = this.m_joint2.getType() as \"revolute-joint\" | \"prismatic-joint\";\n\n // joint1 connects body A to body C\n // joint2 connects body B to body D\n\n let coordinateA: number;\n let coordinateB: number;\n\n // TODO_ERIN there might be some problem with the joint edges in Joint.\n\n this.m_bodyC = this.m_joint1.getBodyA();\n this.m_bodyA = this.m_joint1.getBodyB();\n\n // Get geometry of joint1\n const xfA = this.m_bodyA.m_xf;\n const aA = this.m_bodyA.m_sweep.a;\n const xfC = this.m_bodyC.m_xf;\n const aC = this.m_bodyC.m_sweep.a;\n\n if (this.m_type1 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint1 as RevoluteJoint;\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\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const prismatic = this.m_joint1 as PrismaticJoint;\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\n const pC = this.m_localAnchorC;\n const pA = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA.q, this.m_localAnchorA), Vec2.sub(xfA.p, xfC.p)));\n coordinateA = Vec2.dot(pA, this.m_localAxisC) - Vec2.dot(pC, this.m_localAxisC);\n }\n\n this.m_bodyD = this.m_joint2.getBodyA();\n this.m_bodyB = this.m_joint2.getBodyB();\n\n // Get geometry of joint2\n const xfB = this.m_bodyB.m_xf;\n const aB = this.m_bodyB.m_sweep.a;\n const xfD = this.m_bodyD.m_xf;\n const aD = this.m_bodyD.m_sweep.a;\n\n if (this.m_type2 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint2 as RevoluteJoint;\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const prismatic = this.m_joint2 as PrismaticJoint;\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\n const pD = this.m_localAnchorD;\n const pB = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB.q, this.m_localAnchorB), Vec2.sub(xfB.p, xfD.p)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n this.m_constant = coordinateA + this.m_ratio * coordinateB;\n\n this.m_impulse = 0.0;\n\n // Gear Joint:\n // C0 = (coordinate1 + ratio * coordinate2)_initial\n // C = (coordinate1 + ratio * coordinate2) - C0 = 0\n // J = [J1 ratio * J2]\n // K = J * invM * JT\n // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T\n //\n // Revolute:\n // coordinate = rotation\n // Cdot = angularVelocity\n // J = [0 0 1]\n // K = J * invM * JT = invI\n //\n // Prismatic:\n // coordinate = dot(p - pg, ug)\n // Cdot = dot(v + cross(w, r), ug)\n // J = [ug cross(r, ug)]\n // K = J * invM * JT = invMass + invI * cross(r, ug)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n joint1: this.m_joint1,\n joint2: this.m_joint2,\n ratio: this.m_ratio,\n\n // _constant: this.m_constant,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): GearJoint {\n data = {...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 const joint = new GearJoint(data);\n // if (data._constant) joint.m_constant = data._constant;\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n // todo: implement other fields\n if (Number.isFinite(def.ratio)) {\n this.m_ratio = def.ratio;\n }\n }\n\n /**\n * Get the first joint.\n */\n getJoint1(): Joint {\n return this.m_joint1;\n }\n\n /**\n * Get the second joint.\n */\n getJoint2(): Joint {\n return this.m_joint2;\n }\n\n /**\n * Set the gear ratio.\n */\n setRatio(ratio: number): void {\n _ASSERT && console.assert(Number.isFinite(ratio));\n this.m_ratio = ratio;\n }\n\n /**\n * Get the gear ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n const L = this.m_impulse * this.m_JwA;\n return inv_dt * L;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const aC = this.m_bodyC.c_position.a;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n\n const aD = this.m_bodyD.c_position.a;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n this.m_mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n this.m_JvAC = Vec2.zero();\n this.m_JwA = 1.0;\n this.m_JwC = 1.0;\n this.m_mass += this.m_iA + this.m_iC;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = 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(rA, 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\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 const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n // Compute effective mass.\n this.m_mass = this.m_mass > 0.0 ? 1.0 / this.m_mass : 0.0;\n\n if (step.warmStarting) {\n vA.addMul(this.m_mA * this.m_impulse, this.m_JvAC);\n wA += this.m_iA * this.m_impulse * this.m_JwA;\n\n vB.addMul(this.m_mB * this.m_impulse, this.m_JvBD);\n wB += this.m_iB * this.m_impulse * this.m_JwB;\n\n vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC);\n wC -= this.m_iC * this.m_impulse * this.m_JwC;\n\n vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD);\n wD -= this.m_iD * this.m_impulse * this.m_JwD;\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n let Cdot = Vec2.dot(this.m_JvAC, vA) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB) - 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\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n vA.addMul(this.m_mA * impulse, this.m_JvAC);\n wA += this.m_iA * impulse * this.m_JwA;\n vB.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\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n const cC = this.m_bodyC.c_position.c;\n let aC = this.m_bodyC.c_position.a;\n const cD = this.m_bodyD.c_position.c;\n let aD = this.m_bodyD.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n const linearError = 0.0;\n\n let coordinateA: number;\n let coordinateB: number;\n\n let JvAC: Vec2;\n let JvBD: Vec2;\n let JwA: number;\n let JwB: number;\n let JwC: number;\n let JwD: number;\n let mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n JvAC = Vec2.zero();\n JwA = 1.0;\n JwC = 1.0;\n mass += this.m_iA + this.m_iC;\n\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA);\n JvAC = u;\n JwC = Vec2.crossVec2Vec2(rC, u);\n JwA = Vec2.crossVec2Vec2(rA, u);\n mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA;\n\n const pC = Vec2.sub(this.m_localAnchorC, this.m_lcC);\n const pA = Rot.mulTVec2(qC, Vec2.add(rA, Vec2.sub(cA, cC)));\n coordinateA = Vec2.dot(Vec2.sub(pA, pC), this.m_localAxisC);\n }\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n const pD = Vec2.sub(this.m_localAnchorD, this.m_lcD);\n const pB = Rot.mulTVec2(qD, Vec2.add(rB, Vec2.sub(cB, cD)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n const C = (coordinateA + this.m_ratio * coordinateB) - this.m_constant;\n\n let impulse = 0.0;\n if (mass > 0.0) {\n impulse = -C / mass;\n }\n\n cA.addMul(this.m_mA * impulse, JvAC);\n aA += this.m_iA * impulse * JwA;\n cB.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\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\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\n // TODO_ERIN not implemented\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointOpt extends JointOpt {\n /**\n * The bodyB angle minus bodyA angle in radians.\n */\n angularOffset?: number;\n /**\n * The maximum motor force in N.\n */\n maxForce?: number;\n /**\n * The maximum motor torque in N-m.\n */\n maxTorque?: number;\n /**\n * Position correction factor in the range [0,1].\n */\n correctionFactor?: number;\n /**\n * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters.\n */\n linearOffset?: Vec2Value;\n}\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointDef extends JointDef, MotorJointOpt {\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 1.0,\n maxTorque : 1.0,\n correctionFactor : 0.3\n};\n\ndeclare module \"./MotorJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MotorJoint(def: MotorJointDef): MotorJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MotorJoint(def: MotorJointOpt, bodyA: Body, bodyB: Body): MotorJoint;\n}\n\n/**\n * A motor joint is used to control the relative motion between two bodies. A\n * typical usage is to control the movement of a dynamic body with respect to\n * the ground.\n */\n// @ts-expect-error\nexport class MotorJoint extends Joint {\n static TYPE = \"motor-joint\" as const;\n\n /** @internal */ m_type: \"motor-joint\";\n /** @internal */ m_linearOffset: Vec2;\n /** @internal */ m_angularOffset: number;\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n /** @internal */ m_correctionFactor: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_linearError: Vec2;\n /** @internal */ m_angularError: number;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: MotorJointDef);\n constructor(def: MotorJointOpt, bodyA: Body, bodyB: Body);\n constructor(def: MotorJointDef | MotorJointOpt, bodyA?: Body, bodyB?: Body) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MotorJoint)) {\n return new MotorJoint(def, bodyA, bodyB);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MotorJoint.TYPE;\n\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\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n this.m_correctionFactor = def.correctionFactor;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n //\n // r1 = offset - c1\n // r2 = -c2\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n correctionFactor: this.m_correctionFactor,\n\n linearOffset: this.m_linearOffset,\n angularOffset: this.m_angularOffset,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MotorJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new MotorJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Set the position correction factor in the range [0,1].\n */\n setCorrectionFactor(factor: number): void {\n _ASSERT && console.assert(Number.isFinite(factor) && 0.0 <= factor && factor <= 1.0);\n this.m_correctionFactor = factor;\n }\n\n /**\n * Get the position correction factor in the range [0,1].\n */\n getCorrectionFactor(): number {\n return this.m_correctionFactor;\n }\n\n /**\n * Set/get the target linear offset, in frame A, in meters.\n */\n setLinearOffset(linearOffset: Vec2Value): void {\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\n getLinearOffset(): Vec2 {\n return this.m_linearOffset;\n }\n\n /**\n * Set/get the target angular offset, in radians.\n */\n setAngularOffset(angularOffset: number): void {\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\n getAngularOffset(): number {\n return this.m_angularOffset;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getPosition();\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getPosition();\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Upper 2 by 2 of K for point to point\n const 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\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n this.m_linearError = Vec2.zero();\n this.m_linearError.addCombine(1, cB, 1, this.m_rB);\n this.m_linearError.subCombine(1, cA, 1, this.m_rA);\n\n this.m_angularError = aB - aA - this.m_angularOffset;\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n const inv_h = step.inv_dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError);\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = Vec2.clone(this.m_linearImpulse);\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n this.m_linearImpulse.clamp(maxImpulse);\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Transform } from \"../../common/Transform\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointOpt extends JointOpt {\n /**\n * [maxForce = 0.0] The maximum constraint force that can be exerted to move\n * the candidate body. Usually you will express as some multiple of the\n * weight (multiplier * mass * gravity).\n */\n maxForce?: number;\n /**\n * [frequencyHz = 5.0] The response speed.\n */\n frequencyHz?: number;\n /**\n * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical\n * damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointDef extends JointDef, MouseJointOpt {\n /**\n * The initial world target point. This is assumed to coincide with the body\n * anchor initially.\n */\n target: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n frequencyHz : 5.0,\n dampingRatio : 0.7\n};\n\ndeclare module \"./MouseJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MouseJoint(def: MouseJointDef): MouseJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MouseJoint(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value): MouseJoint;\n}\n\n/**\n * A mouse joint is used to make a point on a body track a specified world\n * point. This a soft constraint with a maximum force. This allows the\n * constraint to stretch and without applying huge forces.\n *\n * You need to call setTarget(target) every time that mouse is \n * moved, to track the new location of the mouse.\n *\n * NOTE: this joint is not documented in the manual because it was developed to\n * be used in the testbed. If you want to learn how to use the mouse joint, look\n * at the testbed.\n */\n// @ts-expect-error\nexport class MouseJoint extends Joint {\n static TYPE = \"mouse-joint\" as const;\n\n /** @internal */ m_type: \"mouse-joint\";\n /** @internal */ m_targetA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_impulse: Vec2;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_beta: number;\n /** @internal */ m_gamma: number;\n // Solver temp\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat22;\n /** @internal */ m_C: Vec2;\n\n constructor(def: MouseJointDef);\n constructor(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value);\n constructor(def: MouseJointDef, bodyA?: Body, bodyB?: Body, target?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MouseJoint)) {\n return new MouseJoint(def, bodyA, bodyB, target);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MouseJoint.TYPE;\n\n _ASSERT && console.assert(Number.isFinite(def.maxForce) && def.maxForce >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.frequencyHz) && def.frequencyHz >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.dampingRatio) && def.dampingRatio >= 0.0);\n\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\n this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), this.m_targetA);\n\n this.m_maxForce = def.maxForce;\n this.m_impulse = Vec2.zero();\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_beta = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rB = Vec2.zero();\n this.m_localCenterB = Vec2.zero();\n this.m_invMassB = 0.0;\n this.m_invIB = 0.0;\n this.m_mass = new Mat22();\n this.m_C = Vec2.zero();\n\n // p = attached point, m = mouse point\n // C = p - m\n // Cdot = v\n // = v + cross(w, r)\n // J = [I r_skew]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n target: this.m_targetA,\n maxForce: this.m_maxForce,\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n _localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MouseJoint {\n data = {...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 const joint = new MouseJoint(data);\n if (data._localAnchorB) {\n joint.m_localAnchorB = data._localAnchorB;\n }\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Use this to update the target point.\n */\n setTarget(target: Vec2Value): void {\n if (Vec2.areEqual(target, this.m_targetA)) return;\n this.m_bodyB.setAwake(true);\n this.m_targetA.set(target);\n }\n\n getTarget(): Vec2 {\n return this.m_targetA;\n }\n\n /**\n * Set the maximum force in Newtons.\n */\n setMaxForce(force: number): void {\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum force in Newtons.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the frequency in Hertz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get the frequency in Hertz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set the damping ratio (dimensionless).\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get the damping ratio (dimensionless).\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return Vec2.clone(this.m_targetA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_impulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * 0.0;\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_targetA.sub(newOrigin);\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const position = this.m_bodyB.c_position;\n const velocity = this.m_bodyB.c_velocity;\n\n const cB = position.c;\n const aB = position.a;\n const vB = velocity.v;\n let wB = velocity.w;\n\n const qB = Rot.neo(aB);\n\n const mass = this.m_bodyB.getMass();\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = mass * (omega * omega);\n\n // magic formulas\n // gamma has units of inverse mass.\n // beta has units of inverse time.\n const h = step.dt;\n _ASSERT && console.assert(d + h * k > EPSILON);\n this.m_gamma = h * (d + h * k);\n if (this.m_gamma != 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n this.m_beta = h * k * this.m_gamma;\n\n // Compute the effective mass matrix.\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) *\n // invI2 * skew(r2)]\n // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y\n // -r1.x*r1.y]\n // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x]\n const K = new Mat22();\n K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y\n + 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\n + this.m_gamma;\n\n this.m_mass = K.getInverse();\n\n this.m_C.setVec2(cB);\n this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA);\n this.m_C.mul(this.m_beta);\n\n // Cheat with some damping\n wB *= 0.98;\n\n if (step.warmStarting) {\n this.m_impulse.mul(step.dtRatio);\n vB.addMul(this.m_invMassB, this.m_impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse);\n\n } else {\n this.m_impulse.setZero();\n }\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const velocity = this.m_bodyB.c_velocity;\n const vB = Vec2.clone(velocity.v);\n let wB = velocity.w;\n\n // Cdot = v + cross(w, r)\n\n const Cdot = Vec2.crossNumVec2(wB, this.m_rB);\n Cdot.add(vB);\n\n Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse);\n Cdot.neg();\n\n let impulse = Mat22.mulVec2(this.m_mass, Cdot);\n\n const oldImpulse = Vec2.clone(this.m_impulse);\n this.m_impulse.add(impulse);\n const maxImpulse = step.dt * this.m_maxForce;\n this.m_impulse.clamp(maxImpulse);\n impulse = Vec2.sub(this.m_impulse, oldImpulse);\n\n vB.addMul(this.m_invMassB, impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\n// tslint:disable-next-line:no-empty-interface\nexport interface PulleyJointOpt extends JointOpt {\n}\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\nexport interface PulleyJointDef extends JointDef, PulleyJointOpt {\n /**\n * The first ground anchor in world coordinates. This point never moves.\n */\n groundAnchorA: Vec2Value;\n /**\n * The second ground anchor in world coordinates. This point never moves.\n */\n groundAnchorB: Vec2Value;\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The reference length for the segment attached to bodyA.\n */\n lengthA: number;\n /**\n * The reference length for the segment attached to bodyB.\n */\n lengthB: number;\n /**\n * The pulley ratio, used to simulate a block-and-tackle.\n */\n ratio: number;\n\n /** @hidden */ anchorA?: Vec2Value;\n /** @hidden */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n collideConnected : true\n};\n\ndeclare module \"./PulleyJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PulleyJoint(def: PulleyJointDef): PulleyJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PulleyJoint(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number): PulleyJoint;\n}\n\n/**\n * The pulley joint is connected to two bodies and two fixed ground points. The\n * pulley supports a ratio such that: length1 + ratio * length2 <= constant\n *\n * Yes, the force transmitted is scaled by the ratio.\n *\n * Warning: the pulley joint can get a bit squirrelly by itself. They often work\n * better when combined with prismatic joints. You should also cover the the\n * anchor points with static shapes to prevent one side from going to zero\n * length.\n */\n// @ts-expect-error\nexport class PulleyJoint extends Joint {\n static TYPE = \"pulley-joint\" as const;\n // static MIN_PULLEY_LENGTH: number = 2.0; // TODO where this is used?\n\n /** @internal */ m_type: \"pulley-joint\";\n /** @internal */ m_groundAnchorA: Vec2;\n /** @internal */ m_groundAnchorB: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_lengthA: number;\n /** @internal */ m_lengthB: number;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_uA: Vec2;\n /** @internal */ m_uB: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n constructor(def: PulleyJointDef);\n constructor(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number);\n constructor(def: PulleyJointDef, bodyA?: Body, bodyB?: Body, groundA?: Vec2Value, groundB?: Vec2Value, anchorA?: Vec2Value, anchorB?: Vec2Value, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PulleyJoint)) {\n return new PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PulleyJoint.TYPE;\n this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1.0, 1.0));\n this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1.0, 1.0));\n this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1.0, 0.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\n _ASSERT && console.assert(ratio > EPSILON);\n\n this.m_constant = this.m_lengthA + this.m_ratio * this.m_lengthB;\n\n this.m_impulse = 0.0;\n\n // Pulley:\n // length1 = norm(p1 - s1)\n // length2 = norm(p2 - s2)\n // C0 = (length1 + ratio * length2)_initial\n // C = C0 - (length1 + ratio * length2)\n // u1 = (p1 - s1) / norm(p1 - s1)\n // u2 = (p2 - s2) / norm(p2 - s2)\n // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2))\n // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 *\n // cross(r2, u2)^2)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PulleyJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new PulleyJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Get the first ground anchor.\n */\n getGroundAnchorA(): Vec2 {\n return this.m_groundAnchorA;\n }\n\n /**\n * Get the second ground anchor.\n */\n getGroundAnchorB(): Vec2 {\n return this.m_groundAnchorB;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getLengthA(): number {\n return this.m_lengthA;\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getLengthB(): number {\n return this.m_lengthB;\n }\n\n /**\n * Get the pulley ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getCurrentLengthA(): number {\n const p = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const s = this.m_groundAnchorA;\n return Vec2.distance(p, s);\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getCurrentLengthB(): number {\n const p = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const s = this.m_groundAnchorB;\n return Vec2.distance(p, s);\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n *\n * @param newOrigin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_groundAnchorA.sub(newOrigin);\n this.m_groundAnchorB.sub(newOrigin);\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // Get the pulley axes.\n this.m_uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n this.m_uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = this.m_uA.length();\n const lengthB = this.m_uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n this.m_uA.mul(1.0 / lengthA);\n } else {\n this.m_uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n this.m_uB.mul(1.0 / lengthB);\n } else {\n this.m_uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA);\n const ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n this.m_mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support variable time steps.\n this.m_impulse *= step.dtRatio;\n\n // Warm starting.\n const PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB);\n\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n\n const Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB);\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const PA = Vec2.mulNumVec2(-impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB);\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // Get the pulley axes.\n const uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n const uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = uA.length();\n const lengthB = uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n uA.mul(1.0 / lengthA);\n } else {\n uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n uB.mul(1.0 / lengthB);\n } else {\n uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(rA, uA);\n const ruB = Vec2.crossVec2Vec2(rB, uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n let mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (mass > 0.0) {\n mass = 1.0 / mass;\n }\n\n const C = this.m_constant - lengthA - this.m_ratio * lengthB;\n const linearError = math_abs(C);\n\n const impulse = -mass * C;\n\n const PA = Vec2.mulNumVec2(-impulse, uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB);\n\n cA.addMul(this.m_invMassA, PA);\n aA += this.m_invIA * Vec2.crossVec2Vec2(rA, PA);\n cB.addMul(this.m_invMassB, PB);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, PB);\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointOpt extends JointOpt {\n /**\n * The maximum length of the rope.\n * Warning: this must be larger than linearSlop or the joint will have no effect.\n */\n maxLength?: number;\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointDef extends JointDef, RopeJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxLength : 0.0,\n};\n\ndeclare module \"./RopeJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RopeJoint(def: RopeJointDef): RopeJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RopeJoint(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): RopeJoint;\n}\n\n/**\n * A rope joint enforces a maximum distance between two points on two bodies. It\n * has no other effect.\n *\n * Warning: if you attempt to change the maximum length during the simulation\n * you will get some non-physical behavior.\n *\n * A model that would allow you to dynamically modify the length would have some\n * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you\n * want to dynamically control length.\n */\n// @ts-expect-error\nexport class RopeJoint extends Joint {\n static TYPE = \"rope-joint\" as const;\n\n /** @internal */ m_type: \"rope-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n /** @internal */ m_maxLength: number;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_length: number;\n /** @internal */ m_state: number; // TODO enum\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n constructor(def: RopeJointDef);\n constructor(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RopeJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RopeJoint)) {\n return new RopeJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = RopeJoint.TYPE;\n this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1.0, 0.0));\n\n this.m_maxLength = def.maxLength;\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_length = 0.0;\n this.m_state = LimitState.inactiveLimit;\n\n // Limit:\n // C = norm(pB - pA) - L\n // u = (pB - pA) / norm(pB - pA)\n // Cdot = dot(u, vB + cross(wB, rB) - vA - cross(wA, rA))\n // J = [-u -cross(rA, u) u cross(rB, u)]\n // K = J * invM * JT\n // = invMassA + invIA * cross(rA, u)^2 + invMassB + invIB * cross(rB, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n maxLength: this.m_maxLength,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): RopeJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RopeJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n if (Number.isFinite(def.maxLength)) {\n this.m_maxLength = def.maxLength;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum length of the rope.\n */\n setMaxLength(length: number): void {\n this.m_maxLength = length;\n }\n\n /**\n * Get the maximum length of the rope.\n */\n getMaxLength(): number {\n return this.m_maxLength;\n }\n\n getLimitState(): number {\n // TODO LimitState\n return this.m_state;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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, cB, 1, this.m_rB);\n this.m_u.subCombine(1, cA, 1, this.m_rA);\n\n this.m_length = this.m_u.length();\n\n const C = this.m_length - this.m_maxLength;\n if (C > 0.0) {\n this.m_state = LimitState.atUpperLimit;\n } else {\n this.m_state = LimitState.inactiveLimit;\n }\n\n if (this.m_length > Settings.linearSlop) {\n this.m_u.mul(1.0 / this.m_length);\n } else {\n this.m_u.setZero();\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n return;\n }\n\n // Compute effective mass.\n const crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n const invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB;\n\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.addCrossNumVec2(vA, wA, this.m_rA);\n const vpB = Vec2.addCrossNumVec2(vB, wB, this.m_rB);\n const C = this.m_length - this.m_maxLength;\n let Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA));\n\n // Predictive constraint.\n if (C < 0.0) {\n Cdot += step.inv_dt * C;\n }\n\n let impulse = -this.m_mass * Cdot;\n const oldImpulse = this.m_impulse;\n this.m_impulse = math_min(0.0, this.m_impulse + impulse);\n impulse = this.m_impulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.zero();\n u.addCombine(1, cB, 1, rB);\n u.subCombine(1, cA, 1, rA);\n\n const length = u.normalize();\n let C = length - this.m_maxLength;\n\n C = clamp(C, 0.0, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return length - this.m_maxLength < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness\n * with a value of 0.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle?: number;\n}\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointDef extends JointDef, WeldJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0,\n};\n\ndeclare module \"./WeldJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WeldJoint(def: WeldJointDef): WeldJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WeldJoint(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): WeldJoint;\n}\n\n/**\n * A weld joint essentially glues two bodies together. A weld joint may distort\n * somewhat because the island constraint solver is approximate.\n */\n// @ts-expect-error\nexport class WeldJoint extends Joint {\n static TYPE = \"weld-joint\" as const;\n\n /** @internal */ m_type: \"weld-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_impulse: Vec3;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat33;\n\n constructor(def: WeldJointDef);\n constructor(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: WeldJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WeldJoint)) {\n return new WeldJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = WeldJoint.TYPE;\n\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\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_impulse = new Vec3();\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rA;\n this.m_rB;\n this.m_localCenterA;\n this.m_localCenterB;\n this.m_invMassA;\n this.m_invMassB;\n this.m_invIA;\n this.m_invIB;\n this.m_mass = new Mat33();\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // / = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // C = angle2 - angle1 - referenceAngle\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WeldJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WeldJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Set frequency in Hz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get frequency in Hz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set damping ratio.\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get damping ratio.\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const 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\n * 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\n * 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\n if (this.m_frequencyHz > 0.0) {\n K.getInverse22(this.m_mass);\n\n let invM = iA + iB;\n const m = invM > 0.0 ? 1.0 / invM : 0.0;\n\n const C = aB - aA - this.m_referenceAngle;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * m * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = m * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invM += this.m_gamma;\n this.m_mass.ez.z = invM != 0.0 ? 1.0 / invM : 0.0;\n } else if (K.ez.z == 0.0) {\n K.getInverse22(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n } else {\n K.getSymInverse33(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n if (this.m_frequencyHz > 0.0) {\n const Cdot2 = wB - wA;\n\n const impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z);\n this.m_impulse.z += impulse2;\n\n wA -= iA * impulse2;\n wB += iB * impulse2;\n\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n\n const impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1));\n this.m_impulse.x += impulse1.x;\n this.m_impulse.y += impulse1.y;\n\n const P = Vec2.clone(impulse1);\n\n vA.subMul(mA, P);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(mB, P);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, P);\n } else {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot));\n this.m_impulse.add(impulse);\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n let positionError: number;\n let angularError: number;\n\n const K = new Mat33();\n K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB;\n K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB;\n K.ez.x = -rA.y * iA - rB.y * iB;\n K.ex.y = K.ey.x;\n K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB;\n K.ez.y = rA.x * iA + rB.x * iB;\n K.ex.z = K.ez.x;\n K.ey.z = K.ez.y;\n K.ez.z = iA + iB;\n\n if (this.m_frequencyHz > 0.0) {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n positionError = C1.length();\n angularError = 0.0;\n\n const P = Vec2.neg(K.solve22(C1));\n\n cA.subMul(mA, P);\n aA -= iA * Vec2.crossVec2Vec2(rA, P);\n\n cB.addMul(mB, P);\n aB += iB * Vec2.crossVec2Vec2(rB, P);\n } else {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n const C2 = aB - aA - this.m_referenceAngle;\n\n positionError = C1.length();\n angularError = math_abs(C2);\n\n const C = new Vec3(C1.x, C1.y, C2);\n\n let impulse = new Vec3();\n if (K.ez.z > 0.0) {\n impulse = Vec3.neg(K.solve33(C));\n } else {\n const impulse2 = Vec2.neg(K.solve22(C1));\n impulse.set(impulse2.x, impulse2.y, 0.0);\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n cA.subMul(mA, P);\n aA -= iA * (Vec2.crossVec2Vec2(rA, P) + impulse.z);\n\n cB.addMul(mB, P);\n aB += iB * (Vec2.crossVec2Vec2(rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointOpt extends JointOpt {\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n /**\n * Suspension frequency, zero indicates no suspension.\n */\n frequencyHz?: number;\n /**\n * Suspension damping ratio, one indicates critical damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointDef extends JointDef, WheelJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation axis in bodyA.\n */\n localAxisA: Vec2Value;\n\n /** @internal renamed to localAxisA */\n localAxis?: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableMotor : false,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n frequencyHz : 2.0,\n dampingRatio : 0.7,\n};\n\ndeclare module \"./WheelJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WheelJoint(def: WheelJointDef): WheelJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WheelJoint(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value): WheelJoint;\n}\n\n/**\n * A wheel joint. This joint provides two degrees of freedom: translation along\n * an axis fixed in bodyA and rotation in the plane. In other words, it is a\n * point to line constraint with a rotational motor and a linear spring/damper.\n * This joint is designed for vehicle suspensions.\n */\n// @ts-expect-error\nexport class WheelJoint extends Joint {\n static TYPE = \"wheel-joint\" as const;\n\n /** @internal */ m_type: \"wheel-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_springMass: number;\n /** @internal */ m_springImpulse: number;\n\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableMotor: boolean;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n /** @internal */ m_ax: Vec2;\n /** @internal */ m_ay: Vec2;\n /** @internal */ m_sAx: number;\n /** @internal */ m_sBx: number;\n /** @internal */ m_sAy: number;\n /** @internal */ m_sBy: number;\n\n constructor(def: WheelJointDef);\n constructor(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: WheelJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WheelJoint)) {\n return new WheelJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_ax = Vec2.zero();\n this.m_ay = Vec2.zero();\n\n this.m_type = WheelJoint.TYPE;\n\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\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 // localAxis is renamed to localAxisA, this is for backward compatibility\n this.m_localXAxisA = Vec2.clone(def.localAxis);\n } else {\n this.m_localXAxisA = Vec2.neo(1.0, 0.0);\n }\n\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n this.m_springMass = 0.0;\n this.m_springImpulse = 0.0;\n\n this.m_maxMotorTorque = def.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed;\n this.m_enableMotor = def.enableMotor;\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Linear constraint (point-to-line)\n // d = pB - pA = xB + rB - xA - rA\n // C = dot(ay, d)\n // Cdot = dot(d, cross(wA, ay)) + dot(ay, vB + cross(wB, rB) - vA - cross(wA,\n // rA))\n // = -dot(ay, vA) - dot(cross(d + rA, ay), wA) + dot(ay, vB) + dot(cross(rB,\n // ay), vB)\n // J = [-ay, -cross(d + rA, ay), ay, cross(rB, ay)]\n\n // Spring linear constraint\n // C = dot(ax, d)\n // Cdot = = -dot(ax, vA) - dot(cross(d + rA, ax), wA) + dot(ax, vB) +\n // dot(cross(rB, ax), vB)\n // J = [-ax -cross(d+rA, ax) ax cross(rB, ax)]\n\n // Motor rotational constraint\n // Cdot = wB - wA\n // J = [0 0 -1 0 0 1]\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WheelJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WheelJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, def.localAxisA));\n }\n if (def.enableMotor !== undefined) {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const pA = bA.getWorldPoint(this.m_localAnchorA);\n const pB = bB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = bA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const wA = this.m_bodyA.m_angularVelocity;\n const wB = this.m_bodyB.m_angularVelocity;\n return wB - wA;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed, usually in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set/Get the maximum motor force, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Get the current motor torque given the inverse time step, usually in N-m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set/Get the spring frequency in hertz. Setting the frequency to zero disables\n * the spring.\n */\n setSpringFrequencyHz(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getSpringFrequencyHz(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set/Get the spring damping ratio\n */\n setSpringDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getSpringDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n // Point to line constraint\n {\n this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA);\n this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ay);\n this.m_sBy = Vec2.crossVec2Vec2(rB, this.m_ay);\n\n this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy\n * this.m_sBy;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n }\n\n // Spring constraint\n this.m_springMass = 0.0;\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n if (this.m_frequencyHz > 0.0) {\n this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ax);\n this.m_sBx = Vec2.crossVec2Vec2(rB, this.m_ax);\n\n const invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx\n * this.m_sBx;\n\n if (invMass > 0.0) {\n this.m_springMass = 1.0 / invMass;\n\n const C = Vec2.dot(d, this.m_ax);\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const damp = 2.0 * this.m_springMass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_springMass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (damp + h * k);\n if (this.m_gamma > 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n\n this.m_bias = C * h * k * this.m_gamma;\n\n this.m_springMass = invMass + this.m_gamma;\n if (this.m_springMass > 0.0) {\n this.m_springMass = 1.0 / this.m_springMass;\n }\n }\n } else {\n this.m_springImpulse = 0.0;\n }\n\n // Rotational motor\n if (this.m_enableMotor) {\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n } else {\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse *= step.dtRatio;\n this.m_springImpulse *= step.dtRatio;\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax);\n const LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse;\n const LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse;\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * LA;\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * LB;\n\n } else {\n this.m_impulse = 0.0;\n this.m_springImpulse = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Solve spring constraint\n {\n const Cdot = Vec2.dot(this.m_ax, vB) - Vec2.dot(this.m_ax, vA) + this.m_sBx * wB - this.m_sAx * wA;\n const impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse);\n this.m_springImpulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ax);\n const LA = impulse * this.m_sAx;\n const LB = impulse * this.m_sBx;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n // Solve rotational motor constraint\n {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve point to line constraint\n {\n const Cdot = Vec2.dot(this.m_ay, vB) - Vec2.dot(this.m_ay, vA) + this.m_sBy * wB - this.m_sAy * wA;\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ay);\n const LA = impulse * this.m_sAy;\n const LB = impulse * this.m_sBy;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const ay = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), ay);\n const sBy = Vec2.crossVec2Vec2(rB, ay);\n\n const C = Vec2.dot(d, ay);\n\n const 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\n const impulse = k != 0.0 ? -C / k : 0.0;\n\n const P = Vec2.mulNumVec2(impulse, ay);\n const LA = impulse * sAy;\n const LB = impulse * sBy;\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * LA;\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * LB;\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) <= Settings.linearSlop;\n }\n\n}\n","import { World } from \"../dynamics/World\";\nimport { Body } from \"../dynamics/Body\";\nimport { Joint } from \"../dynamics/Joint\";\nimport { Fixture } from \"../dynamics/Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { Vec2 } from \"../common/Vec2\";\nimport { Vec3 } from \"../common/Vec3\";\nimport { ChainShape } from \"../collision/shape/ChainShape\";\n// import { BoxShape } from \"../collision/shape/BoxShape\";\nimport { EdgeShape } from \"../collision/shape/EdgeShape\";\nimport { PolygonShape } from \"../collision/shape/PolygonShape\";\nimport { CircleShape } from \"../collision/shape/CircleShape\";\nimport { DistanceJoint } from \"../dynamics/joint/DistanceJoint\";\nimport { FrictionJoint } from \"../dynamics/joint/FrictionJoint\";\nimport { GearJoint } from \"../dynamics/joint/GearJoint\";\nimport { MotorJoint } from \"../dynamics/joint/MotorJoint\";\nimport { MouseJoint } from \"../dynamics/joint/MouseJoint\";\nimport { PrismaticJoint } from \"../dynamics/joint/PrismaticJoint\";\nimport { PulleyJoint } from \"../dynamics/joint/PulleyJoint\";\nimport { RevoluteJoint } from \"../dynamics/joint/RevoluteJoint\";\nimport { RopeJoint } from \"../dynamics/joint/RopeJoint\";\nimport { WeldJoint } from \"../dynamics/joint/WeldJoint\";\nimport { WheelJoint } from \"../dynamics/joint/WheelJoint\";\n\nlet SID = 0;\n\n// Classes to be serialized as reference objects\nconst SERIALIZE_REF_TYPES = {\n \"World\": World,\n \"Body\": Body,\n \"Joint\": Joint,\n \"Fixture\": Fixture,\n \"Shape\": Shape,\n};\n\n// For deserializing reference objects by reference type\nconst 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};\n\n// For deserializing data objects by type field\nconst DESERIALIZE_BY_TYPE_FIELD = {\n [Body.STATIC]: Body,\n [Body.DYNAMIC]: Body,\n [Body.KINEMATIC]: Body,\n [ChainShape.TYPE]: ChainShape,\n // [BoxShape.TYPE]: BoxShape,\n [PolygonShape.TYPE]: PolygonShape,\n [EdgeShape.TYPE]: EdgeShape,\n [CircleShape.TYPE]: CircleShape,\n [DistanceJoint.TYPE]: DistanceJoint,\n [FrictionJoint.TYPE]: FrictionJoint,\n [GearJoint.TYPE]: GearJoint,\n [MotorJoint.TYPE]: MotorJoint,\n [MouseJoint.TYPE]: MouseJoint,\n [PrismaticJoint.TYPE]: PrismaticJoint,\n [PulleyJoint.TYPE]: PulleyJoint,\n [RevoluteJoint.TYPE]: RevoluteJoint,\n [RopeJoint.TYPE]: RopeJoint,\n [WeldJoint.TYPE]: WeldJoint,\n [WheelJoint.TYPE]: WheelJoint,\n};\n\n// dummy types\ntype DataType = any;\ntype ObjectType = any;\ntype ClassName = any;\n\ntype SerializedType = object[];\n\ntype RefType = {\n refIndex: number,\n refType: string,\n};\n\ntype SerializerOptions = {\n rootClass: ClassName,\n preSerialize?: (obj: ObjectType) => DataType,\n postSerialize?: (data: DataType, obj: any) => DataType,\n preDeserialize?: (data: DataType) => DataType,\n postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType,\n};\n\nconst DEFAULT_OPTIONS: SerializerOptions = {\n rootClass: World,\n preSerialize: function(obj) { return obj; },\n postSerialize: function(data, obj) { return data; },\n preDeserialize: function(data: DataType) { return data; },\n postDeserialize: function(obj, data) { return obj; },\n};\n\ntype DeserializeChildCallback = (classHint: any, obj: any, context: any) => any;\ntype ClassDeserializerMethod = (data: any, context: any, deserialize: DeserializeChildCallback) => any;\n\nexport class Serializer {\n private options: SerializerOptions;\n constructor(options: SerializerOptions) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n toJson = (root: T): SerializedType => {\n const preSerialize = this.options.preSerialize;\n const postSerialize = this.options.postSerialize;\n const json = [];\n\n // Breadth-first ref serialization queue\n const refQueue = [root];\n\n const refMemoById: Record = {};\n\n function addToRefQueue(value: any, typeName: string) {\n value.__sid = value.__sid || ++SID;\n if (!refMemoById[value.__sid]) {\n refQueue.push(value);\n const index = json.length + refQueue.length;\n const ref = {\n refIndex: index,\n refType: typeName\n };\n refMemoById[value.__sid] = ref;\n }\n return refMemoById[value.__sid];\n }\n\n function serializeWithHooks(obj: ObjectType) {\n obj = preSerialize(obj);\n let data = obj._serialize();\n data = postSerialize(data, obj);\n return data;\n }\n\n // traverse the object graph\n // ref objects are pushed into the queue\n // other objects are serialize in-place \n function traverse(value: any, noRefType = false) {\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n // object with _serialize function\n if (typeof value._serialize === \"function\") {\n if (!noRefType) {\n for (const typeName in SERIALIZE_REF_TYPES) {\n if (value instanceof SERIALIZE_REF_TYPES[typeName]) {\n return addToRefQueue(value, typeName);\n }\n }\n }\n // object with _serialize function\n value = serializeWithHooks(value);\n }\n // recursive for arrays any objects\n if (Array.isArray(value)) {\n const newValue = [];\n for (let key = 0; key < value.length; key++) {\n newValue[key] = traverse(value[key]);\n }\n value = newValue;\n\n } else {\n const newValue = {};\n for (const 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\n while (refQueue.length) {\n const obj = refQueue.shift();\n const str = traverse(obj, true);\n json.push(str);\n }\n\n return json;\n };\n\n fromJson = (json: SerializedType): T => {\n const preDeserialize = this.options.preDeserialize;\n const postDeserialize = this.options.postDeserialize;\n const rootClass = this.options.rootClass;\n\n const deserializedRefMemoByIndex: Record = {};\n\n function deserializeWithHooks(classHint: ClassName, data: DataType, context: any): ObjectType {\n if (!classHint || !classHint._deserialize) {\n classHint = DESERIALIZE_BY_TYPE_FIELD[data.type];\n }\n const deserializer = classHint && classHint._deserialize;\n if (!deserializer) {\n return;\n }\n data = preDeserialize(data);\n const classDeserializeFn = classHint._deserialize as ClassDeserializerMethod;\n let obj = classDeserializeFn(data, context, deserializeChild);\n obj = postDeserialize(obj, data);\n return obj;\n }\n\n /**\n * Recursive callback function to deserialize a child data object or reference object.\n * \n * @param classHint suggested class to deserialize obj to\n * @param dataOrRef data or reference object\n * @param context for example world when deserializing bodies and joints\n */\n function deserializeChild(classHint: ClassName, dataOrRef: DataType | RefType, context: any) {\n const isRefObject = dataOrRef.refIndex && dataOrRef.refType;\n if (!isRefObject) {\n return deserializeWithHooks(classHint, dataOrRef, context); \n }\n const ref = dataOrRef as RefType;\n if (DESERIALIZE_BY_REF_TYPE[ref.refType]) {\n classHint = DESERIALIZE_BY_REF_TYPE[ref.refType];\n }\n const refIndex = ref.refIndex;\n if (!deserializedRefMemoByIndex[refIndex]) {\n const data = json[refIndex];\n const obj = deserializeWithHooks(classHint, data, context);\n deserializedRefMemoByIndex[refIndex] = obj;\n }\n return deserializedRefMemoByIndex[refIndex];\n }\n\n const root = deserializeWithHooks(rootClass, json[0], null);\n\n return root;\n };\n\n static toJson: (root: World) => SerializedType;\n static fromJson: (json: SerializedType) => World;\n}\n\nconst worldSerializer = new Serializer({\n rootClass: World,\n});\n\nSerializer.fromJson = worldSerializer.fromJson;\nSerializer.toJson = worldSerializer.toJson;\n","import type { AABBValue } from \"../collision/AABB\";\nimport type { World } from \"../dynamics/World\";\nimport type { Joint } from \"../dynamics/Joint\";\nimport type { Fixture } from \"../dynamics/Fixture\";\nimport type { Body } from \"../dynamics/Body\";\n\nexport interface Style {\n stroke?: string;\n fill?: string;\n lineWidth?: number;\n}\n\ntype KEY = \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" |\n \"8\" | \"9\" | \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\" |\n \"H\" | \"I\" | \"J\" | \"K\" | \"L\" | \"M\" | \"N\" | \"O\" | \"P\" |\n \"Q\" | \"R\" | \"S\" | \"T\" | \"U\" | \"V\" | \"W\" | \"X\" | \"Y\" |\n \"Z\" | \"right\" | \"left\" | \"up\" | \"down\" | \"fire\";\n\nexport type ActiveKeys = { [key in KEY]?: boolean };\n\ntype TestbedMountOptions = {};\n\nexport abstract class Testbed {\n /**\n * Mounts testbed. Call start with a world to start simulation and rendering.\n */\n static mount(options?: TestbedMountOptions): Testbed {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Mounts testbed if needed, then starts simulation and rendering.\n * \n * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`.\n */\n static start(world: World): Testbed {\n const testbed = Testbed.mount();\n testbed.start(world);\n return testbed;\n }\n\n /** World viewbox width. */\n width: number = 80;\n\n /** World viewbox height. */\n height: number = 60;\n\n /** World viewbox center vertical offset. */\n x: number = 0;\n\n /** World viewbox center horizontal offset. */\n y: number = -10;\n\n /** @hidden */\n scaleY: number = -1;\n\n /** World simulation step frequency */\n hz: number = 60;\n\n /** World simulation speed, default is 1 */\n speed: number = 1;\n\n background: string = \"#222222\";\n\n mouseForce?: number;\n activeKeys: ActiveKeys = {};\n\n /** callback, to be implemented by user */\n step = (dt: number, t: number): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keydown = (keyCode: number, label: string): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keyup = (keyCode: number, label: string): void => {\n return;\n };\n\n abstract status(name: string, value: any): void;\n abstract status(value: object | string): void;\n\n abstract info(text: string): void;\n\n color(r: number, g: number, b: number): string {\n r = r * 256 | 0;\n g = g * 256 | 0;\n b = b * 256 | 0;\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n }\n\n abstract drawPoint(p: {x: number, y: number}, r: any, color: string): void;\n abstract drawCircle(p: {x: number, y: number}, r: number, color: string): void;\n abstract drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawSegment(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawPolygon(points: Array<{x: number, y: number}>, color: string): void;\n abstract drawAABB(aabb: AABBValue, color: string): void;\n\n abstract start(world: World): void;\n\n abstract findOne(query: string): (Body | Joint | Fixture | null);\n abstract findAll(query: string): (Body | Joint | Fixture)[];\n}\n\ntype TestbedFactoryOptions = string | {};\n\n/** @deprecated */\ntype TestbedCallback = (testbed: Testbed) => (World | undefined);\n\n/** @deprecated */\nexport function testbed(callback: TestbedCallback): void;\n/** @deprecated */\nexport function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void;\n/** @internal */\nexport function testbed(a?: any, b?: any) {\n let callback: TestbedCallback | undefined;\n let options;\n if (typeof a === \"function\") {\n callback = a;\n options = b;\n } else if (typeof b === \"function\") {\n callback = b;\n options = a;\n } else {\n options = a ?? b;\n }\n const testbed = Testbed.mount(options);\n if (callback) {\n // this is for backwards compatibility\n const world = callback(testbed) || (testbed as any).world;\n testbed.start(world);\n } else {\n return testbed;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2Value } from \"../../common/Vec2\";\nimport { PolygonShape } from \"./PolygonShape\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\ndeclare module \"./BoxShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function BoxShape(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number): BoxShape;\n}\n\n/**\n * A rectangle polygon which extend PolygonShape.\n */\n// @ts-expect-error\nexport class BoxShape extends PolygonShape {\n // note that box is serialized/deserialized as polygon\n static TYPE = \"polygon\" as const;\n\n /**\n * \n * @param halfWidth \n * @param halfHeight \n * @param center coordinate of the center of the box relative to the body\n * @param angle angle of the box relative to the body\n */\n constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof BoxShape)) {\n return new BoxShape(halfWidth, halfHeight, center, angle);\n }\n\n super();\n\n this._setAsBox(halfWidth, halfHeight, center, angle);\n }\n}\n\nexport const Box = BoxShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\nimport * as matrix from \"../../common/Matrix\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact);\n\n/** @internal */ function CircleCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == CircleShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollideCircles(manifold, fixtureA.getShape() as CircleShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const pA = matrix.vec2(0, 0);\n/** @internal */ const pB = matrix.vec2(0, 0);\n\nexport const CollideCircles = function (manifold: Manifold, circleA: CircleShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n matrix.transformVec2(pA, xfA, circleA.m_p);\n matrix.transformVec2(pB, xfB, circleB.m_p);\n\n const distSqr = matrix.distSqrVec2(pB, pA);\n const rA = circleA.m_radius;\n const rB = circleB.m_radius;\n const radius = rA + rB;\n if (distSqr > radius * radius) {\n return;\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.copyVec2(manifold.localPoint, circleA.m_p);\n matrix.zeroVec2(manifold.localNormal);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact);\nContact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact);\n\n/** @internal */ function EdgeCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const shapeA = fixtureA.getShape() as EdgeShape;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\nfunction ChainCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const chain = fixtureA.getShape() as ChainShape;\n const edge = new EdgeShape();\n chain.getChildEdge(edge, indexA);\n\n const shapeA = edge;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const Q = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n// Compute contact points for edge versus circle.\n// This accounts for edge connectivity.\nexport const CollideEdgeCircle = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle in frame of edge\n matrix.retransformVec2(Q, xfB, xfA, circleB.m_p);\n\n const A = edgeA.m_vertex1;\n const B = edgeA.m_vertex2;\n matrix.subVec2(e, B, A);\n\n // Barycentric coordinates\n const u = matrix.dotVec2(e, B) - matrix.dotVec2(e, Q);\n const v = matrix.dotVec2(e, Q) - matrix.dotVec2(e, A);\n\n const radius = edgeA.m_radius + circleB.m_radius;\n\n // Region A\n if (v <= 0.0) {\n matrix.copyVec2(P, A);\n const dd = matrix.distSqrVec2(Q, A);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to A?\n if (edgeA.m_hasVertex0) {\n const A1 = edgeA.m_vertex0;\n const B1 = A;\n matrix.subVec2(e1, B1, A1);\n const u1 = matrix.dotVec2(e1, B1) - matrix.dotVec2(e1, Q);\n\n // Is the circle in Region AB of the previous edge?\n if (u1 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Region B\n if (u <= 0.0) {\n matrix.copyVec2(P, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to B?\n if (edgeA.m_hasVertex3) {\n const B2 = edgeA.m_vertex3;\n const A2 = B;\n matrix.subVec2(e2, B2, A2);\n const v2 = matrix.dotVec2(e2, Q) - matrix.dotVec2(e2, A2);\n\n // Is the circle in Region AB of the next edge?\n if (v2 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n\n return;\n }\n\n // Region AB\n const den = matrix.lengthSqrVec2(e);\n _ASSERT && console.assert(den > 0.0);\n matrix.combine2Vec2(P, u / den, A, v / den, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n matrix.crossNumVec2(n, 1, e);\n if (matrix.dotVec2(n, Q) - matrix.dotVec2(n, A) < 0.0) {\n matrix.negVec2(n);\n }\n matrix.normalizeVec2(n);\n\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, n);\n matrix.copyVec2(manifold.localPoint, A);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const incidentEdge = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipSegmentToLineNormal = matrix.vec2(0, 0);\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const v11 = matrix.vec2(0, 0);\n/** @internal */ const v12 = matrix.vec2(0, 0);\n/** @internal */ const localTangent = matrix.vec2(0, 0);\n/** @internal */ const localNormal = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n\n\nContact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact);\n\n/** @internal */ function PolygonContact(\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number,\n): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == PolygonShape.TYPE);\n CollidePolygons(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ interface MaxSeparation {\n maxSeparation: number;\n bestIndex: number;\n}\n\n/**\n * Find the max separation between poly1 and poly2 using edge normals from\n * poly1.\n */\n/** @internal */ function findMaxSeparation(\n poly1: PolygonShape,\n xf1: TransformValue,\n poly2: PolygonShape,\n xf2: TransformValue,\n output: MaxSeparation,\n): void {\n const count1 = poly1.m_count;\n const count2 = poly2.m_count;\n const n1s = poly1.m_normals;\n const v1s = poly1.m_vertices;\n const v2s = poly2.m_vertices;\n\n matrix.detransformTransform(xf, xf2, xf1);\n\n let bestIndex = 0;\n let maxSeparation = -Infinity;\n for (let i = 0; i < count1; ++i) {\n // Get poly1 normal in frame2.\n matrix.rotVec2(n, xf.q, n1s[i]);\n matrix.transformVec2(v1, xf, v1s[i]);\n\n // Find deepest point for normal i.\n let si = Infinity;\n for (let j = 0; j < count2; ++j) {\n const sij = matrix.dotVec2(n, v2s[j]) - matrix.dotVec2(n, v1);\n if (sij < si) {\n si = sij;\n }\n }\n\n if (si > maxSeparation) {\n maxSeparation = si;\n bestIndex = i;\n }\n }\n\n // used to keep last FindMaxSeparation call values\n output.maxSeparation = maxSeparation;\n output.bestIndex = bestIndex;\n}\n\n/** @internal */ function findIncidentEdge(\n clipVertex: ClipVertex[],\n poly1: PolygonShape,\n xf1: TransformValue,\n edge1: number,\n poly2: PolygonShape,\n xf2: TransformValue,\n): void {\n const normals1 = poly1.m_normals;\n\n const count2 = poly2.m_count;\n const vertices2 = poly2.m_vertices;\n const normals2 = poly2.m_normals;\n\n _ASSERT && console.assert(0 <= edge1 && edge1 < poly1.m_count);\n\n // Get the normal of the reference edge in poly2's frame.\n matrix.rerotVec2(normal1, xf2.q, xf1.q, normals1[edge1]);\n\n // Find the incident edge on poly2.\n let index = 0;\n let minDot = Infinity;\n for (let i = 0; i < count2; ++i) {\n const dot = matrix.dotVec2(normal1, normals2[i]);\n if (dot < minDot) {\n minDot = dot;\n index = i;\n }\n }\n\n // Build the clip vertices for the incident edge.\n const i1 = index;\n const i2 = i1 + 1 < count2 ? i1 + 1 : 0;\n\n matrix.transformVec2(clipVertex[0].v, xf2, vertices2[i1]);\n clipVertex[0].id.setFeatures(edge1, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.transformVec2(clipVertex[1].v, xf2, vertices2[i2]);\n clipVertex[1].id.setFeatures(edge1, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n}\n\n/** @internal */ const maxSeparation = {\n maxSeparation: 0,\n bestIndex: 0,\n};\n\n/**\n *\n * Find edge normal of max separation on A - return if separating axis is found
\n * Find edge normal of max separation on B - return if separation axis is found
\n * Choose reference edge as min(minA, minB)
\n * Find incident edge
\n * Clip\n *\n * The normal points from 1 to 2\n */\nexport const CollidePolygons = function (\n manifold: Manifold,\n polyA: PolygonShape,\n xfA: TransformValue,\n polyB: PolygonShape,\n xfB: TransformValue,\n): void {\n manifold.pointCount = 0;\n const totalRadius = polyA.m_radius + polyB.m_radius;\n\n findMaxSeparation(polyA, xfA, polyB, xfB, maxSeparation);\n const edgeA = maxSeparation.bestIndex;\n const separationA = maxSeparation.maxSeparation;\n if (separationA > totalRadius)\n return;\n\n findMaxSeparation(polyB, xfB, polyA, xfA, maxSeparation);\n const edgeB = maxSeparation.bestIndex;\n const separationB = maxSeparation.maxSeparation;\n if (separationB > totalRadius)\n return;\n\n let poly1: PolygonShape; // reference polygon\n let poly2: PolygonShape; // incident polygon\n let xf1: TransformValue;\n let xf2: TransformValue;\n let edge1: number; // reference edge\n let flip: boolean;\n const k_tol = 0.1 * Settings.linearSlop;\n\n if (separationB > separationA + k_tol) {\n poly1 = polyB;\n poly2 = polyA;\n xf1 = xfB;\n xf2 = xfA;\n edge1 = edgeB;\n manifold.type = ManifoldType.e_faceB;\n flip = true;\n } else {\n poly1 = polyA;\n poly2 = polyB;\n xf1 = xfA;\n xf2 = xfB;\n edge1 = edgeA;\n manifold.type = ManifoldType.e_faceA;\n flip = false;\n }\n\n incidentEdge[0].recycle(), incidentEdge[1].recycle();\n findIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2);\n\n const count1 = poly1.m_count;\n const vertices1 = poly1.m_vertices;\n\n const iv1 = edge1;\n const iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0;\n\n matrix.copyVec2(v11, vertices1[iv1]);\n matrix.copyVec2(v12, vertices1[iv2]);\n\n matrix.subVec2(localTangent, v12, v11);\n matrix.normalizeVec2(localTangent);\n\n matrix.crossVec2Num(localNormal, localTangent, 1.0);\n matrix.combine2Vec2(planePoint, 0.5, v11, 0.5, v12);\n\n matrix.rotVec2(tangent, xf1.q, localTangent);\n matrix.crossVec2Num(normal, tangent, 1.0);\n\n matrix.transformVec2(v11, xf1, v11);\n matrix.transformVec2(v12, xf1, v12);\n\n // Face offset.\n const frontOffset = matrix.dotVec2(normal, v11);\n\n // Side offsets, extended by polytope skin thickness.\n const sideOffset1 = -matrix.dotVec2(tangent, v11) + totalRadius;\n const sideOffset2 = matrix.dotVec2(tangent, v12) + totalRadius;\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n matrix.setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y);\n const np1 = clipSegmentToLine(clipPoints1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1);\n\n if (np1 < 2) {\n return;\n }\n\n // Clip to negative box side 1\n matrix.setVec2(clipSegmentToLineNormal, tangent.x, tangent.y);\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, clipSegmentToLineNormal, sideOffset2, iv2);\n\n if (np2 < 2) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n matrix.copyVec2(manifold.localNormal, localNormal);\n matrix.copyVec2(manifold.localPoint, planePoint);\n\n let pointCount = 0;\n for (let i = 0; i < clipPoints2.length/* maxManifoldPoints */; ++i) {\n const separation = matrix.dotVec2(normal, clipPoints2[i].v) - frontOffset;\n\n if (separation <= totalRadius) {\n const cp = manifold.points[pointCount];\n matrix.detransformVec2(cp.localPoint, xf2, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n if (flip) {\n // Swap features\n cp.id.swapFeatures();\n }\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact);\n\n/** @internal */ function PolygonCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollidePolygonCircle(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const cLocal = matrix.vec2(0, 0);\n/** @internal */ const faceCenter = matrix.vec2(0, 0);\n\nexport const CollidePolygonCircle = function (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle position in the frame of the polygon.\n matrix.retransformVec2(cLocal, xfB, xfA, circleB.m_p);\n\n // Find the min separating edge.\n let normalIndex = 0;\n let separation = -Infinity;\n const radius = polygonA.m_radius + circleB.m_radius;\n const vertexCount = polygonA.m_count;\n const vertices = polygonA.m_vertices;\n const normals = polygonA.m_normals;\n\n for (let i = 0; i < vertexCount; ++i) {\n const s = matrix.dotVec2(normals[i], cLocal) - matrix.dotVec2(normals[i], vertices[i]);\n\n if (s > radius) {\n // Early out.\n return;\n }\n\n if (s > separation) {\n separation = s;\n normalIndex = i;\n }\n }\n\n // Vertices that subtend the incident face.\n const vertIndex1 = normalIndex;\n const vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0;\n const v1 = vertices[vertIndex1];\n const v2 = vertices[vertIndex2];\n\n // If the center is inside the polygon ...\n if (separation < EPSILON) {\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[normalIndex]);\n matrix.combine2Vec2(manifold.localPoint, 0.5, v1, 0.5, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Compute barycentric coordinates\n // u1 = (cLocal - v1) dot (v2 - v1))\n const u1 = matrix.dotVec2(cLocal, v2) - matrix.dotVec2(cLocal, v1) - matrix.dotVec2(v1, v2) + matrix.dotVec2(v1, v1);\n // u2 = (cLocal - v2) dot (v1 - v2)\n const u2 = matrix.dotVec2(cLocal, v1) - matrix.dotVec2(cLocal, v2) - matrix.dotVec2(v2, v1) + matrix.dotVec2(v2, v2);\n if (u1 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v1) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v1);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v1);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else if (u2 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v2) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v2);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else {\n matrix.combine2Vec2(faceCenter, 0.5, v1, 0.5, v2);\n const separation = matrix.dotVec2(cLocal, normals[vertIndex1]) - matrix.dotVec2(faceCenter, normals[vertIndex1]);\n if (separation > radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[vertIndex1]);\n matrix.copyVec2(manifold.localPoint, faceCenter);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n }\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_min = Math.min;\n\nContact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact);\nContact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact);\n\n/** @internal */ function EdgePolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n CollideEdgePolygon(manifold, fA.getShape() as EdgeShape, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n// reused\n/** @internal */ const edge_reuse = new EdgeShape();\n\n/** @internal */ function ChainPolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n const chain = fA.getShape() as ChainShape;\n chain.getChildEdge(edge_reuse, indexA);\n\n CollideEdgePolygon(manifold, edge_reuse, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ enum EPAxisType {\n e_unknown = -1,\n e_edgeA = 1,\n e_edgeB = 2,\n}\n\n// unused?\n/** @internal */ enum VertexType {\n e_isolated = 0,\n e_concave = 1,\n e_convex = 2,\n}\n\n/**\n * This structure is used to keep track of the best separating axis.\n */\n/** @internal */ class EPAxis {\n type: EPAxisType;\n index: number;\n separation: number;\n}\n\n/**\n * This holds polygon B expressed in frame A.\n */\n/** @internal */ class TempPolygon {\n vertices: Vec2Value[] = []; // [Settings.maxPolygonVertices]\n normals: Vec2Value[] = []; // [Settings.maxPolygonVertices];\n count: number = 0;\n constructor() {\n for (let i = 0; i < Settings.maxPolygonVertices; i++) {\n this.vertices.push(matrix.vec2(0, 0));\n this.normals.push(matrix.vec2(0, 0));\n }\n }\n}\n\n/**\n * Reference face used for clipping\n */\n/** @internal */ class ReferenceFace {\n i1: number;\n i2: number;\n readonly v1 = matrix.vec2(0 ,0);\n readonly v2 = matrix.vec2(0 ,0);\n readonly normal = matrix.vec2(0 ,0);\n readonly sideNormal1 = matrix.vec2(0 ,0);\n sideOffset1: number;\n readonly sideNormal2 = matrix.vec2(0 ,0);\n sideOffset2: number;\n recycle() {\n matrix.zeroVec2(this.v1);\n matrix.zeroVec2(this.v2);\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.sideNormal1);\n matrix.zeroVec2(this.sideNormal2);\n }\n}\n\n// reused\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const ie = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const edgeAxis = new EPAxis();\n/** @internal */ const polygonAxis = new EPAxis();\n/** @internal */ const polygonBA = new TempPolygon();\n/** @internal */ const rf = new ReferenceFace();\n/** @internal */ const centroidB = matrix.vec2(0, 0);\n/** @internal */ const edge0 = matrix.vec2(0, 0);\n/** @internal */ const edge1 = matrix.vec2(0, 0);\n/** @internal */ const edge2 = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal0 = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n/** @internal */ const normal2 = matrix.vec2(0, 0);\n/** @internal */ const lowerLimit = matrix.vec2(0, 0);\n/** @internal */ const upperLimit = matrix.vec2(0, 0);\n/** @internal */ const perp = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n/**\n * This function collides and edge and a polygon, taking into account edge\n * adjacency.\n */\nexport const CollideEdgePolygon = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue): void {\n // Algorithm:\n // 1. Classify v1 and v2\n // 2. Classify polygon centroid as front or back\n // 3. Flip normal if necessary\n // 4. Initialize normal range to [-pi, pi] about face normal\n // 5. Adjust normal range according to adjacent edges\n // 6. Visit each separating axes, only accept axes within the range\n // 7. Return if _any_ axis indicates separation\n // 8. Clip\n\n // let m_type1: VertexType;\n // let m_type2: VertexType;\n\n matrix.detransformTransform(xf, xfA, xfB);\n matrix.transformVec2(centroidB, xf, polygonB.m_centroid);\n\n const v0 = edgeA.m_vertex0;\n const v1 = edgeA.m_vertex1;\n const v2 = edgeA.m_vertex2;\n const v3 = edgeA.m_vertex3;\n\n const hasVertex0 = edgeA.m_hasVertex0;\n const hasVertex3 = edgeA.m_hasVertex3;\n\n matrix.subVec2(edge1, v2, v1);\n matrix.normalizeVec2(edge1);\n matrix.setVec2(normal1, edge1.y, -edge1.x);\n const offset1 = matrix.dotVec2(normal1, centroidB) - matrix.dotVec2(normal1, v1);\n let offset0 = 0.0;\n let offset2 = 0.0;\n let convex1 = false;\n let convex2 = false;\n\n matrix.zeroVec2(normal0);\n matrix.zeroVec2(normal2);\n\n // Is there a preceding edge?\n if (hasVertex0) {\n matrix.subVec2(edge0, v1, v0);\n matrix.normalizeVec2(edge0);\n matrix.setVec2(normal0, edge0.y, -edge0.x);\n convex1 = matrix.crossVec2Vec2(edge0, edge1) >= 0.0;\n offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0);\n }\n\n // Is there a following edge?\n if (hasVertex3) {\n matrix.subVec2(edge2, v3, v2);\n matrix.normalizeVec2(edge2);\n matrix.setVec2(normal2, edge2.y, -edge2.x);\n convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0.0;\n offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v2);\n }\n\n let front: boolean;\n matrix.zeroVec2(normal);\n matrix.zeroVec2(lowerLimit);\n matrix.zeroVec2(upperLimit);\n\n // Determine front or back collision. Determine collision normal limits.\n if (hasVertex0 && hasVertex3) {\n if (convex1 && convex2) {\n front = offset0 >= 0.0 || offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex1) {\n front = offset0 >= 0.0 || (offset1 >= 0.0 && offset2 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex2) {\n front = offset2 >= 0.0 || (offset0 >= 0.0 && offset1 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex0) {\n if (convex1) {\n front = offset0 >= 0.0 || offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex3) {\n if (convex2) {\n front = offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n } else {\n front = offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n } else {\n front = offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n\n // Get polygonB in frameA\n polygonBA.count = polygonB.m_count;\n for (let i = 0; i < polygonB.m_count; ++i) {\n matrix.transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]);\n matrix.rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]);\n }\n\n const radius = polygonB.m_radius + edgeA.m_radius;\n\n manifold.pointCount = 0;\n\n { // ComputeEdgeSeparation\n edgeAxis.type = EPAxisType.e_edgeA;\n edgeAxis.index = front ? 0 : 1;\n edgeAxis.separation = Infinity;\n\n for (let i = 0; i < polygonBA.count; ++i) {\n const v = polygonBA.vertices[i];\n const s = matrix.dotVec2(normal, v) - matrix.dotVec2(normal, v1);\n if (s < edgeAxis.separation) {\n edgeAxis.separation = s;\n }\n }\n }\n\n // If no valid normal can be found than this edge should not collide.\n // @ts-ignore todo: why we need this if here?\n if (edgeAxis.type == EPAxisType.e_unknown) {\n return;\n }\n\n if (edgeAxis.separation > radius) {\n return;\n }\n\n { // ComputePolygonSeparation\n polygonAxis.type = EPAxisType.e_unknown;\n polygonAxis.index = -1;\n polygonAxis.separation = -Infinity;\n\n matrix.setVec2(perp, -normal.y, normal.x);\n\n for (let i = 0; i < polygonBA.count; ++i) {\n matrix.scaleVec2(n, -1, polygonBA.normals[i]);\n\n const s1 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v1);\n const s2 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v2);\n const s = math_min(s1, s2);\n\n if (s > radius) {\n // No collision\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n break;\n }\n\n // Adjacency\n if (matrix.dotVec2(n, perp) >= 0.0) {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(upperLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n } else {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(lowerLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n }\n\n if (s > polygonAxis.separation) {\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n }\n }\n }\n\n if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) {\n return;\n }\n\n // Use hysteresis for jitter reduction.\n const k_relativeTol = 0.98;\n const k_absoluteTol = 0.001;\n\n let primaryAxis: EPAxis;\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\n ie[0].recycle(), ie[1].recycle();\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n manifold.type = ManifoldType.e_faceA;\n\n // Search for the polygon normal that is most anti-parallel to the edge\n // normal.\n let bestIndex = 0;\n let bestValue = matrix.dotVec2(normal, polygonBA.normals[0]);\n for (let i = 1; i < polygonBA.count; ++i) {\n const value = matrix.dotVec2(normal, polygonBA.normals[i]);\n if (value < bestValue) {\n bestValue = value;\n bestIndex = i;\n }\n }\n\n const i1 = bestIndex;\n const i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0;\n\n matrix.copyVec2(ie[0].v, polygonBA.vertices[i1]);\n ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.copyVec2(ie[1].v, polygonBA.vertices[i2]);\n ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n\n if (front) {\n rf.i1 = 0;\n rf.i2 = 1;\n matrix.copyVec2(rf.v1, v1);\n matrix.copyVec2(rf.v2, v2);\n matrix.copyVec2(rf.normal, normal1);\n } else {\n rf.i1 = 1;\n rf.i2 = 0;\n matrix.copyVec2(rf.v1, v2);\n matrix.copyVec2(rf.v2, v1);\n matrix.scaleVec2(rf.normal, -1, normal1);\n }\n } else {\n manifold.type = ManifoldType.e_faceB;\n\n matrix.copyVec2(ie[0].v, v1);\n ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n matrix.copyVec2(ie[1].v, v2);\n ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n rf.i1 = primaryAxis.index;\n rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0;\n matrix.copyVec2(rf.v1, polygonBA.vertices[rf.i1]);\n matrix.copyVec2(rf.v2, polygonBA.vertices[rf.i2]);\n matrix.copyVec2(rf.normal, polygonBA.normals[rf.i1]);\n }\n\n matrix.setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x);\n matrix.setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y);\n rf.sideOffset1 = matrix.dotVec2(rf.sideNormal1, rf.v1);\n rf.sideOffset2 = matrix.dotVec2(rf.sideNormal2, rf.v2);\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n const np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1);\n\n if (np1 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Clip to negative box side 1\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2);\n\n if (np2 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.copyVec2(manifold.localNormal, rf.normal);\n matrix.copyVec2(manifold.localPoint, rf.v1);\n } else {\n matrix.copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]);\n matrix.copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]);\n }\n\n let pointCount = 0;\n for (let i = 0; i < Settings.maxManifoldPoints; ++i) {\n const separation = matrix.dotVec2(rf.normal, clipPoints2[i].v) - matrix.dotVec2(rf.normal, rf.v1);\n\n if (separation <= radius) {\n const cp = manifold.points[pointCount]; // ManifoldPoint\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.detransformVec2(cp.localPoint, xf, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n } else {\n matrix.copyVec2(cp.localPoint, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n cp.id.swapFeatures();\n }\n\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","import { CollidePolygons } from \"./collision/shape/CollidePolygon\";\nimport { Settings } from \"./Settings\";\nimport { Sweep } from \"./common/Sweep\";\nimport { DynamicTree } from \"./collision/DynamicTree\";\nimport { Manifold } from \"./collision/Manifold\";\nimport { Distance } from \"./collision/Distance\";\nimport { TimeOfImpact } from \"./collision/TimeOfImpact\";\nimport { stats } from \"./util/stats\";\n\n/** @hidden @deprecated Merged with main namespace */\nexport const internal = {\n CollidePolygons,\n Settings,\n Sweep,\n Manifold,\n Distance,\n TimeOfImpact,\n DynamicTree,\n stats\n};\n"],"names":["d","b","__assign","s","n","input","output","x","math_abs","math_sqrt","math_max","math_min","Vec2","v","a","AABB","normal","temp","math_PI","Settings","SettingsInternal","Pool","TreeNode","DynamicTree","c","Iterator","BroadPhase","displacement","math_sin","math_cos","transform","xf","math_atan2","Rot","matrix.vec2","Sweep","matrix.zeroVec2","matrix.transformVec2","matrix.copyVec2","localCenter","matrix.setRotAngle","matrix.combine2Vec2","matrix.minusVec2","matrix.rotVec2","Transform","rotation","Velocity","Position","Shape","FixtureProxy","Fixture","matrix.subVec2","matrix.transform","Body","matrix.plusScaleVec2","matrix.scaleVec2","matrix.dotVec2","matrix.crossNumVec2","matrix.plusVec2","point","JointEdge","Joint","DistanceInput","DistanceOutput","SimplexCache","cache","xfA","xfB","matrix.lengthSqrVec2","matrix.derotVec2","matrix.distVec2","rA","rB","matrix.normalizeVec2","matrix.minusScaleVec2","DistanceProxy","SimplexVertex","Simplex","v1","v2","matrix.setVec2","matrix.crossVec2Vec2","pA","pB","matrix.combine3Vec2","matrix.copyTransform","ShapeCastInput","ShapeCastOutput","simplex","pointA","pointB","TOIInput","TOIOutputState","TOIOutput","SeparationFunctionType","SeparationFunction","matrix.normalizeVec2Length","matrix.crossVec2Num","matrix.negVec2","TimeStep","ContactImpulse","Solver","matrix.mulVec2","Mat22","cA","cB","planePoint","clipPoint","ManifoldType","ContactFeatureType","PointState","ClipVertex","Manifold","ManifoldPoint","ContactID","WorldManifold","ContactEdge","VelocityConstraintPoint","tangent","P","Contact","_a","worldManifold","DEFAULTS","World","oldManifold","Vec3","EdgeShape","e","ChainShape","e1","e2","PolygonShape","ie","center","matrix.detransformVec2","matrix.addVec2","CircleShape","matrix.distSqrVec2","DistanceJoint","vA","vB","FrictionJoint","Mat33","LimitState","RevoluteJoint","PrismaticJoint","translation","perp","GearJoint","MotorJoint","MouseJoint","PulleyJoint","RopeJoint","WeldJoint","WheelJoint","Serializer","options","obj","Testbed","testbed","BoxShape","matrix.retransformVec2","clipPoints1","clipPoints2","normal1","matrix.detransformTransform","maxSeparation","edge1","matrix.rerotVec2","EPAxisType","VertexType","EPAxis","TempPolygon","ReferenceFace","s2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,MAAI,gBAAgB,SAASA,IAAGC,IAAG;AAC/B,oBAAgB,OAAO,kBAClB,EAAE,WAAW,CAAA,eAAgB,SAAS,SAAUD,IAAGC,IAAG;AAAE,MAAAD,GAAE,YAAYC;AAAA,IAAE,KACzE,SAAUD,IAAGC,IAAG;AAAE,eAAS,KAAKA,GAAG,KAAI,OAAO,UAAU,eAAe,KAAKA,IAAG,CAAC,EAAG,CAAAD,GAAE,CAAC,IAAIC,GAAE,CAAC;AAAA;AACjG,WAAO,cAAcD,IAAGC,EAAC;AAAA,EAC7B;AAEO,WAAS,UAAUD,IAAGC,IAAG;AAC5B,QAAI,OAAOA,OAAM,cAAcA,OAAM;AACjC,YAAM,IAAI,UAAU,yBAAyB,OAAOA,EAAC,IAAI,+BAA+B;AAC5F,kBAAcD,IAAGC,EAAC;AAClB,aAAS,KAAK;AAAE,WAAK,cAAcD;AAAA,IAAI;AACvC,IAAAA,GAAE,YAAYC,OAAM,OAAO,OAAO,OAAOA,EAAC,KAAK,GAAG,YAAYA,GAAE,WAAW,IAAI,GAAI;AAAA,EACvF;AAEO,MAAI,WAAW,WAAW;AAC7B,eAAW,OAAO,UAAU,SAASC,UAAS,GAAG;AAC7C,eAASC,IAAG,IAAI,GAAGC,KAAI,UAAU,QAAQ,IAAIA,IAAG,KAAK;AACjD,QAAAD,KAAI,UAAU,CAAC;AACf,iBAAS,KAAKA,GAAG,KAAI,OAAO,UAAU,eAAe,KAAKA,IAAG,CAAC,EAAG,GAAE,CAAC,IAAIA,GAAE,CAAC;AAAA,MAC9E;AACD,aAAO;AAAA,IACV;AACD,WAAO,SAAS,MAAM,MAAM,SAAS;AAAA,EACzC;ACvCa,MAAA,UAAU,SAAYE,QAAU,UAAgB;AAC3D,QAAIA,WAAU,QAAQ,OAAOA,WAAU,aAAa;AAElD,MAAAA,SAAQ;;AAGV,QAAMC,UAAM,SAAA,CAAA,GAAOD,MAAK;AAGxB,aAAW,OAAO,UAAU;AACtB,UAAA,SAAS,eAAe,GAAG,KAAK,OAAOA,OAAM,GAAG,MAAM,aAAa;AAC9D,QAAAC,QAAA,GAAG,IAAI,SAAS,GAAG;AAAA,MAAA;AAAA,IAC5B;AAGE,QAAA,OAAO,OAAO,0BAA0B,YAAY;AAChD,UAAA,UAAU,OAAO,sBAAsB,QAAQ;AACrD,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACjC,YAAA,SAAS,QAAQ,CAAC;AACpB,YAAA,SAAS,qBAAqB,MAAM,KAAK,OAAOD,OAAM,MAAM,MAAM,aAAa;AAC1E,UAAAC,QAAA,MAAM,IAAI,SAAS,MAAM;AAAA,QAAA;AAAA,MAClC;AAAA,IACF;AAGK,WAAAA;AAAA,EACT;ACHiB,MAAM,cAAc,KAAK;AAGnC,MAAM,UAAU;AAGhB,MAAM,WAAW,OAAO;AAUzB,WAAU,eAAeC,IAAS;AACtC,IAAAA,MAAMA,MAAK;AACX,IAAAA,MAAMA,MAAK;AACX,IAAAA,MAAMA,MAAK;AACX,IAAAA,MAAMA,MAAK;AACX,IAAAA,MAAMA,MAAK;AACX,WAAOA,KAAI;AAAA,EACb;AAGM,WAAU,aAAaA,IAAS;AACpC,WAAOA,KAAI,MAAMA,KAAKA,KAAI,OAAQ;AAAA,EACpC;AAGgB,WAAA,IAAI,KAAa,KAAc,KAAY;AACrD,QAAA,OAAO,QAAQ,aAAa;AACxB,YAAA;AACA,YAAA;AAAA,IAAA,WACG,OAAO,QAAQ,aAAa;AAC/B,YAAA;AACA,YAAA;AAAA,IAAA;AAER,QAAI,MAAM,KAAK;AACN,aAAA,MAAM,QAAQ,MAAM;AACpB,aAAA,OAAO,MAAM,IAAI,MAAM;AAAA,IAAA,OACzB;AACE,aAAA,MAAM,QAAQ,MAAM;AACpB,aAAA,OAAO,OAAO,IAAI,MAAM;AAAA,IAAA;AAAA,EAEnC;AAMgB,WAAA,MAAM,KAAa,KAAa,KAAW;AACzD,QAAI,MAAM,KAAK;AACN,aAAA;AAAA,IAAA,WACE,MAAM,KAAK;AACb,aAAA;AAAA,IAAA,OACF;AACE,aAAA;AAAA,IAAA;AAAA,EAEX;AAQgB,WAAA,OAAO,KAAc,KAAY;AAC3C,QAAA,OAAO,QAAQ,aAAa;AACxB,YAAA;AACA,YAAA;AAAA,IAAA,WACG,OAAO,QAAQ,aAAa;AAC/B,YAAA;AACA,YAAA;AAAA,IAAA;AAER,WAAO,QAAQ,MAAM,MAAM,YAAa,KAAI,MAAM,OAAO;AAAA,EAC3D;AAGa,MAAA,OAAO,OAAO,OAAO,IAAI;AACtC,OAAK,UAAU;AACf,OAAK,WAAW;AAChB,OAAK,iBAAiB;AACtB,OAAK,eAAe;AACpB,OAAK,MAAM;AACX,OAAK,QAAQ;AACb,OAAK,SAAS;AClFG,MAAMC,aAAW,KAAK;AACtB,MAAMC,cAAY,KAAK;AACvB,MAAMC,aAAW,KAAK;AACtB,MAAMC,aAAW,KAAK;AAuBvC,MAAA;AAAA;AAAA,IAAA,WAAA;AAQcC,eAAAA,MAAAL,IAAI,GAAE;AACZ,YAAwB,EAAE,gBAAgBK,QAAO;AAC5C,iBAAA,IAAIA,MAAKL,IAAG,CAAC;AAAA,QAAA;AAElB,YAAA,OAAOA,OAAM,aAAa;AAC5B,eAAK,IAAI;AACT,eAAK,IAAI;AAAA,QAAA,WACA,OAAOA,OAAM,UAAU;AAChC,eAAK,IAAIA,GAAE;AACX,eAAK,IAAIA,GAAE;AAAA,QAAA,OACN;AACL,eAAK,IAAIA;AACT,eAAK,IAAI;AAAA,QAAA;AAAA,MAEgB;AAI7B,YAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,GAAG,KAAK;AAAA,UACR,GAAG,KAAK;AAAA;MAEZ;AAGmB,YAAA,eAAnB,SAAoB,MAAS;AAC3B,YAAM,MAAM,OAAO,OAAOK,MAAK,SAAS;AACxC,YAAI,IAAI,KAAK;AACb,YAAI,IAAI,KAAK;AACN,eAAA;AAAA,MACT;AAEOA,YAAA,OAAP,WAAA;AACE,YAAM,MAAM,OAAO,OAAOA,MAAK,SAAS;AACxC,YAAI,IAAI;AACR,YAAI,IAAI;AACD,eAAA;AAAA,MACT;AAGO,YAAA,MAAP,SAAWL,IAAW,GAAS;AAC7B,YAAM,MAAM,OAAO,OAAOK,MAAK,SAAS;AACxC,YAAI,IAAIL;AACR,YAAI,IAAI;AACD,eAAA;AAAA,MACT;AAEY,YAAA,QAAZ,SAAaM,IAAY;AAEvB,eAAOD,MAAK,IAAIC,GAAE,GAAGA,GAAE,CAAC;AAAA,MAC1B;AAGA,YAAA,UAAA,WAAA,WAAA;AACS,eAAA,KAAK,UAAU,IAAI;AAAA,MAC5B;AAKc,YAAA,UAAd,SAAe,KAAQ;AACrB,YAAI,QAAQ,QAAQ,OAAO,QAAQ,aAAa;AACvC,iBAAA;AAAA,QAAA;AAEF,eAAA,OAAO,SAAS,IAAI,CAAC,KAAK,OAAO,SAAS,IAAI,CAAC;AAAA,MACxD;AAEa,YAAA,SAAb,SAAc,GAAM;AAAA,MAEpB;AAEA,YAAA,UAAA,QAAA,WAAA;AACSD,eAAAA,MAAK,MAAM,IAAI;AAAA,MACxB;AAOA,YAAA,UAAA,UAAA,WAAA;AACE,aAAK,IAAI;AACT,aAAK,IAAI;AACF,eAAA;AAAA,MACT;AAUAA,YAAA,UAAA,MAAA,SAAIL,IAAG,GAAE;AACH,YAAA,OAAOA,OAAM,UAAU;AAEzB,eAAK,IAAIA,GAAE;AACX,eAAK,IAAIA,GAAE;AAAA,QAAA,OACN;AAGL,eAAK,IAAIA;AACT,eAAK,IAAI;AAAA,QAAA;AAEJ,eAAA;AAAA,MACT;AAOCK,YAAA,UAAA,SAAA,SAAOL,IAAW,GAAS;AAG1B,aAAK,IAAIA;AACT,aAAK,IAAI;AAEF,eAAA;AAAA,MACT;AAOO,YAAA,UAAA,UAAP,SAAQ,OAAgB;AAEtB,aAAK,IAAI,MAAM;AACf,aAAK,IAAI,MAAM;AAER,eAAA;AAAA,MACT;AAGAK,YAAI,UAAA,OAAJ,SAAKE,IAAWD,IAAcZ,IAAY,GAAa;AACrD,YAAI,OAAOA,OAAM,eAAe,OAAO,MAAM,aAAa;AACxD,iBAAO,KAAK,WAAWa,IAAGD,IAAGZ,IAAG,CAAC;AAAA,QAAA,OAC5B;AACE,iBAAA,KAAK,OAAOa,IAAGD,EAAC;AAAA,QAAA;AAAA,MAE3B;AAKAD,YAAU,UAAA,aAAV,SAAWE,IAAWD,IAAcZ,IAAW,GAAY;AAKzD,YAAMM,KAAIO,KAAID,GAAE,IAAIZ,KAAI,EAAE;AAC1B,YAAM,IAAIa,KAAID,GAAE,IAAIZ,KAAI,EAAE;AAG1B,aAAK,IAAIM;AACT,aAAK,IAAI;AACF,eAAA;AAAA,MACT;AAEAK,YAAA,UAAA,SAAA,SAAOE,IAAWD,IAAY;AAGtB,YAAAN,KAAIO,KAAID,GAAE;AACV,YAAA,IAAIC,KAAID,GAAE;AAEhB,aAAK,IAAIN;AACT,aAAK,IAAI;AACF,eAAA;AAAA,MACT;AAOG,YAAA,UAAA,MAAH,SAAI,GAAY;AAEd,aAAK,KAAK,EAAE;AACZ,aAAK,KAAK,EAAE;AACL,eAAA;AAAA,MACT;AAGAK,YAAI,UAAA,OAAJ,SAAKE,IAAWD,IAAcZ,IAAY,GAAa;AACrD,YAAI,OAAOA,OAAM,eAAe,OAAO,MAAM,aAAa;AACxD,iBAAO,KAAK,WAAWa,IAAGD,IAAGZ,IAAG,CAAC;AAAA,QAAA,OAC5B;AACE,iBAAA,KAAK,OAAOa,IAAGD,EAAC;AAAA,QAAA;AAAA,MAE3B;AAKAD,YAAU,UAAA,aAAV,SAAWE,IAAWD,IAAcZ,IAAW,GAAY;AAMzD,YAAMM,KAAIO,KAAID,GAAE,IAAIZ,KAAI,EAAE;AAC1B,YAAM,IAAIa,KAAID,GAAE,IAAIZ,KAAI,EAAE;AAG1B,aAAK,KAAKM;AACV,aAAK,KAAK;AACH,eAAA;AAAA,MACT;AAEAK,YAAA,UAAA,SAAA,SAAOE,IAAWD,IAAY;AAGtB,YAAAN,KAAIO,KAAID,GAAE;AACV,YAAA,IAAIC,KAAID,GAAE;AAEhB,aAAK,KAAKN;AACV,aAAK,KAAK;AACH,eAAA;AAAA,MACT;AAKAK,YAAI,UAAA,OAAJ,SAAKE,IAAWD,IAAcZ,IAAY,GAAa;AACrD,YAAI,OAAOA,OAAM,eAAe,OAAO,MAAM,aAAa;AACxD,iBAAO,KAAK,WAAWa,IAAGD,IAAGZ,IAAG,CAAC;AAAA,QAAA,OAC5B;AACE,iBAAA,KAAK,OAAOa,IAAGD,EAAC;AAAA,QAAA;AAAA,MACxB;AAKHD,YAAU,UAAA,aAAV,SAAWE,IAAWD,IAAcZ,IAAW,GAAY;AAKzD,YAAMM,KAAIO,KAAID,GAAE,IAAIZ,KAAI,EAAE;AAC1B,YAAM,IAAIa,KAAID,GAAE,IAAIZ,KAAI,EAAE;AAG1B,aAAK,KAAKM;AACV,aAAK,KAAK;AACH,eAAA;AAAA,MACT;AAEAK,YAAA,UAAA,SAAA,SAAOE,IAAWD,IAAY;AAGtB,YAAAN,KAAIO,KAAID,GAAE;AACV,YAAA,IAAIC,KAAID,GAAE;AAEhB,aAAK,KAAKN;AACV,aAAK,KAAK;AACH,eAAA;AAAA,MACT;AAOG,YAAA,UAAA,MAAH,SAAI,GAAY;AAEd,aAAK,KAAK,EAAE;AACZ,aAAK,KAAK,EAAE;AACL,eAAA;AAAA,MACT;AAOG,YAAA,UAAA,MAAH,SAAI,GAAS;AAEX,aAAK,KAAK;AACV,aAAK,KAAK;AACH,eAAA;AAAA,MACT;AAOA,YAAA,UAAA,SAAA,WAAA;AACSK,eAAAA,MAAK,SAAS,IAAI;AAAA,MAC3B;AAKA,YAAA,UAAA,gBAAA,WAAA;AACSA,eAAAA,MAAK,cAAc,IAAI;AAAA,MAChC;AAOA,YAAA,UAAA,YAAA,WAAA;AACQ,YAAA,SAAS,KAAK;AACpB,YAAI,SAAS,SAAS;AACb,iBAAA;AAAA,QAAA;AAET,YAAM,YAAY,IAAM;AACxB,aAAK,KAAK;AACV,aAAK,KAAK;AACH,eAAA;AAAA,MACT;AAOe,YAAA,WAAf,SAAgBC,IAAY;AAEnB,eAAAJ,YAAUI,GAAE,IAAIA,GAAE,IAAIA,GAAE,IAAIA,GAAE,CAAC;AAAA,MACxC;AAKoB,YAAA,gBAApB,SAAqBA,IAAY;AAE/B,eAAOA,GAAE,IAAIA,GAAE,IAAIA,GAAE,IAAIA,GAAE;AAAA,MAC7B;AAEO,YAAA,WAAP,SAAgBA,IAAc,GAAY;AAGlC,YAAA,KAAKA,GAAE,IAAI,EAAE;AACb,YAAA,KAAKA,GAAE,IAAI,EAAE;AACnB,eAAOJ,YAAU,KAAK,KAAK,KAAK,EAAE;AAAA,MACpC;AAEO,YAAA,kBAAP,SAAuBI,IAAc,GAAY;AAGzC,YAAA,KAAKA,GAAE,IAAI,EAAE;AACb,YAAA,KAAKA,GAAE,IAAI,EAAE;AACZ,eAAA,KAAK,KAAK,KAAK;AAAA,MACxB;AAEO,YAAA,WAAP,SAAgBA,IAAc,GAAY;AAGxC,eAAOA,OAAM,KAAK,OAAO,MAAM,YAAY,MAAM,QAAQA,GAAE,MAAM,EAAE,KAAKA,GAAE,MAAM,EAAE;AAAA,MACpF;AAKW,YAAA,OAAX,SAAYA,IAAY;AAEtB,eAAOD,MAAK,IAAI,CAACC,GAAE,GAAGA,GAAE,CAAC;AAAA,MAC3B;AAGO,YAAA,MAAP,SAAWA,IAAc,GAAY;AAGnC,eAAOA,GAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,EAAE;AAAA,MAC7B;AAQO,YAAA,QAAP,SAAaA,IAAQ,GAAM;AACrB,YAAA,OAAO,MAAM,UAAU;AAGlBD,iBAAAA,MAAK,IAAI,IAAIC,GAAE,GAAG,CAAC,IAAIA,GAAE,CAAC;AAAA,QAAA,WAExB,OAAOA,OAAM,UAAU;AAGzBD,iBAAAA,MAAK,IAAI,CAACC,KAAI,EAAE,GAAGA,KAAI,EAAE,CAAC;AAAA,QAAA,OAE5B;AAGL,iBAAOA,GAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,EAAE;AAAA,QAAA;AAAA,MAE/B;AAGO,YAAA,gBAAP,SAAqBA,IAAc,GAAY;AAG7C,eAAOA,GAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,EAAE;AAAA,MAC7B;AAGO,YAAA,eAAP,SAAoBA,IAAc,GAAS;AAGlCD,eAAAA,MAAK,IAAI,IAAIC,GAAE,GAAG,CAAC,IAAIA,GAAE,CAAC;AAAA,MACnC;AAGO,YAAA,eAAP,SAAoBA,IAAW,GAAY;AAGlCD,eAAAA,MAAK,IAAI,CAACC,KAAI,EAAE,GAAGA,KAAI,EAAE,CAAC;AAAA,MACnC;AAMOD,YAAA,WAAP,SAAgBE,IAAcD,IAAQ,GAAM;AACtC,YAAA,OAAO,MAAM,UAAU;AAGzB,iBAAOD,MAAK,IAAI,IAAIC,GAAE,IAAIC,GAAE,GAAG,CAAC,IAAID,GAAE,IAAIC,GAAE,CAAC;AAAA,QAAA,WAEpC,OAAOD,OAAM,UAAU;AAGhC,iBAAOD,MAAK,IAAI,CAACC,KAAI,EAAE,IAAIC,GAAE,GAAGD,KAAI,EAAE,IAAIC,GAAE,CAAC;AAAA,QAAA;AAAA,MAIjD;AAKOF,YAAA,kBAAP,SAAuBE,IAAcD,IAAc,GAAS;AAG1D,eAAOD,MAAK,IAAI,IAAIC,GAAE,IAAIC,GAAE,GAAG,CAAC,IAAID,GAAE,IAAIC,GAAE,CAAC;AAAA,MAC/C;AAKOF,YAAA,kBAAP,SAAuBE,IAAcD,IAAW,GAAY;AAG1D,eAAOD,MAAK,IAAI,CAACC,KAAI,EAAE,IAAIC,GAAE,GAAGD,KAAI,EAAE,IAAIC,GAAE,CAAC;AAAA,MAC/C;AAEO,YAAA,MAAP,SAAWD,IAAc,GAAY;AAG5BD,eAAAA,MAAK,IAAIC,GAAE,IAAI,EAAE,GAAGA,GAAE,IAAI,EAAE,CAAC;AAAA,MACtC;AAGOD,YAAI,OAAX,SAAYE,IAAWD,IAAcZ,IAAW,GAAY;AAC1D,YAAI,OAAOA,OAAM,eAAe,OAAO,MAAM,aAAa;AACxD,iBAAOW,MAAK,QAAQE,IAAGD,IAAGZ,IAAG,CAAC;AAAA,QAAA,OACzB;AACEW,iBAAAA,MAAK,WAAWE,IAAGD,EAAC;AAAA,QAAA;AAAA,MAE/B;AAEOD,YAAO,UAAd,SAAeE,IAAWD,IAAcZ,IAAW,GAAY;AAC7D,eAAOW,MAAK,OAAO,WAAWE,IAAGD,IAAGZ,IAAG,CAAC;AAAA,MAC1C;AAEO,YAAA,MAAP,SAAWY,IAAc,GAAY;AAG5BD,eAAAA,MAAK,IAAIC,GAAE,IAAI,EAAE,GAAGA,GAAE,IAAI,EAAE,CAAC;AAAA,MACtC;AAIO,YAAA,MAAP,SAAWC,IAAQb,IAAM;AACnB,YAAA,OAAOa,OAAM,UAAU;AAGzB,iBAAOF,MAAK,IAAIE,GAAE,IAAIb,IAAGa,GAAE,IAAIb,EAAC;AAAA,QAAA,WAEvB,OAAOA,OAAM,UAAU;AAGhC,iBAAOW,MAAK,IAAIE,KAAIb,GAAE,GAAGa,KAAIb,GAAE,CAAC;AAAA,QAAA;AAAA,MAEpC;AAEO,YAAA,aAAP,SAAkBa,IAAcb,IAAS;AAGvC,eAAOW,MAAK,IAAIE,GAAE,IAAIb,IAAGa,GAAE,IAAIb,EAAC;AAAA,MAClC;AAEO,YAAA,aAAP,SAAkBa,IAAWb,IAAY;AAGvC,eAAOW,MAAK,IAAIE,KAAIb,GAAE,GAAGa,KAAIb,GAAE,CAAC;AAAA,MAClC;AAEA,YAAA,UAAA,MAAA,WAAA;AACO,aAAA,IAAI,CAAC,KAAK;AACV,aAAA,IAAI,CAAC,KAAK;AACR,eAAA;AAAA,MACT;AAEU,YAAA,MAAV,SAAWY,IAAY;AAErB,eAAOD,MAAK,IAAI,CAACC,GAAE,GAAG,CAACA,GAAE,CAAC;AAAA,MAC5B;AAEU,YAAA,MAAV,SAAWA,IAAY;AAEdD,eAAAA,MAAK,IAAIJ,WAASK,GAAE,CAAC,GAAGL,WAASK,GAAE,CAAC,CAAC;AAAA,MAC9C;AAEO,YAAA,MAAP,SAAWA,IAAc,GAAY;AAG5BD,eAAAA,MAAK,KAAKC,GAAE,IAAI,EAAE,KAAK,MAAMA,GAAE,IAAI,EAAE,KAAK,GAAG;AAAA,MACtD;AAEO,YAAA,QAAP,SAAaA,IAAc,GAAY;AAGrC,eAAOD,MAAK,IAAIF,WAASG,GAAE,GAAG,EAAE,CAAC,GAAGH,WAASG,GAAE,GAAG,EAAE,CAAC,CAAC;AAAA,MACxD;AAEO,YAAA,QAAP,SAAaA,IAAc,GAAY;AAGrC,eAAOD,MAAK,IAAID,WAASE,GAAE,GAAG,EAAE,CAAC,GAAGF,WAASE,GAAE,GAAG,EAAE,CAAC,CAAC;AAAA,MACxD;AAEK,YAAA,UAAA,QAAL,SAAM,KAAW;AACf,YAAM,YAAY,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AAC9C,YAAA,YAAY,MAAM,KAAK;AACnB,cAAA,QAAQ,MAAMJ,YAAU,SAAS;AACvC,eAAK,KAAK;AACV,eAAK,KAAK;AAAA,QAAA;AAEL,eAAA;AAAA,MACT;AAEO,YAAA,QAAP,SAAaI,IAAc,KAAW;AACpC,YAAM,IAAID,MAAK,IAAIC,GAAE,GAAGA,GAAE,CAAC;AAC3B,UAAE,MAAM,GAAG;AACJ,eAAA;AAAA,MACT;AAGO,YAAA,UAAP,SAAeN,IAAW,GAAS;AAEjC,eAAO,SAASM,IAAY;AAC1B,iBAAOD,MAAK,IAAIC,GAAE,IAAIN,IAAGM,GAAE,IAAI,CAAC;AAAA,QAClC;AAAA,MACF;AAGO,YAAA,cAAP,SAAmBN,IAAW,GAAS;AAErC,eAAO,SAASM,IAAY;AAC1B,iBAAOD,MAAK,IAAIC,GAAE,IAAIN,IAAGM,GAAE,IAAI,CAAC;AAAA,QAClC;AAAA,MACF;AACDD,aAAAA;AAAAA,IAAA,EAAA;AAAA;AC5lBgB,MAAMF,aAAW,KAAK;AACtB,MAAMC,aAAW,KAAK;AAoCvC,MAAA;AAAA;AAAA,IAAA,WAAA;AAIcI,eAAAA,MAAA,OAAmB,OAAiB;AAC1C,YAAwB,EAAE,gBAAgBA,QAAO;AAC5C,iBAAA,IAAIA,MAAK,OAAO,KAAK;AAAA,QAAA;AAGzB,aAAA,aAAa,KAAK;AAClB,aAAA,aAAa,KAAK;AAEnB,YAAA,OAAO,UAAU,UAAU;AACxB,eAAA,WAAW,QAAQ,KAAK;AAAA,QAAA;AAE3B,YAAA,OAAO,UAAU,UAAU;AACxB,eAAA,WAAW,QAAQ,KAAK;AAAA,QAAA,WACpB,OAAO,UAAU,UAAU;AAC/B,eAAA,WAAW,QAAQ,KAAK;AAAA,QAAA;AAAA,MAC/B;AAMF,YAAA,UAAA,UAAA,WAAA;AACSA,eAAAA,MAAK,QAAQ,IAAI;AAAA,MAC1B;AAEc,YAAA,UAAd,SAAe,KAAQ;AACrB,YAAI,QAAQ,QAAQ,OAAO,QAAQ,aAAa;AACvC,iBAAA;AAAA,QAAA;AAET,eAAO,KAAK,QAAQ,IAAI,UAAU,KAAK,KAAK,QAAQ,IAAI,UAAU,KAAK,KAAK,IAAI,IAAI,YAAY,IAAI,UAAU,EAAE,mBAAmB;AAAA,MACrI;AAEa,YAAA,SAAb,SAAc,GAAM;AAAA,MAEpB;AAKA,YAAA,UAAA,YAAA,WAAA;AACE,eAAO,KAAK,KAAK,KAAK,WAAW,IAAI,KAAK,WAAW,KAAK,MAAM,KAAK,WAAW,IAAI,KAAK,WAAW,KAAK,GAAG;AAAA,MAC9G;AAKA,YAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,KAAK,KAAK,WAAW,IAAI,KAAK,WAAW,KAAK,MAAM,KAAK,WAAW,IAAI,KAAK,WAAW,KAAK,GAAG;AAAA,MAC9G;AAKA,YAAA,UAAA,eAAA,WAAA;AACS,eAAA,KAAO,KAAK,WAAW,IAAI,KAAK,WAAW,IAAI,KAAK,WAAW,IAAI,KAAK,WAAW;AAAA,MAC5F;AAKAA,YAAA,UAAA,UAAA,SAAQD,IAAcb,IAAa;AACjC,QAAAA,KAAIA,MAAK;AAET,YAAM,SAASa,GAAE;AACjB,YAAM,SAASA,GAAE;AACjB,YAAM,SAASb,GAAE;AACjB,YAAM,SAASA,GAAE;AAEjB,YAAM,SAASU,WAAS,OAAO,GAAG,OAAO,CAAC;AAC1C,YAAM,SAASA,WAAS,OAAO,GAAG,OAAO,CAAC;AAC1C,YAAM,SAASD,WAAS,OAAO,GAAG,OAAO,CAAC;AAC1C,YAAM,SAASA,WAAS,OAAO,GAAG,OAAO,CAAC;AAErC,aAAA,WAAW,OAAO,QAAQ,MAAM;AAChC,aAAA,WAAW,OAAO,QAAQ,MAAM;AAAA,MACvC;AAEAK,YAAA,UAAA,gBAAA,SAAcD,IAAcb,IAAY;AACtC,aAAK,WAAW,OAAOU,WAASG,GAAE,GAAGb,GAAE,CAAC,GAAGU,WAASG,GAAE,GAAGb,GAAE,CAAC,CAAC;AAC7D,aAAK,WAAW,OAAOS,WAASI,GAAE,GAAGb,GAAE,CAAC,GAAGS,WAASI,GAAE,GAAGb,GAAE,CAAC,CAAC;AAAA,MAC/D;AAEG,YAAA,UAAA,MAAH,SAAI,MAAe;AACjB,aAAK,WAAW,OAAO,KAAK,WAAW,GAAG,KAAK,WAAW,CAAC;AAC3D,aAAK,WAAW,OAAO,KAAK,WAAW,GAAG,KAAK,WAAW,CAAC;AAAA,MAC7D;AAEQ,YAAA,UAAA,WAAR,SAAS,MAAe;AACtB,YAAI,SAAS;AACb,iBAAS,UAAU,KAAK,WAAW,KAAK,KAAK,WAAW;AACxD,iBAAS,UAAU,KAAK,WAAW,KAAK,KAAK,WAAW;AACxD,iBAAS,UAAU,KAAK,WAAW,KAAK,KAAK,WAAW;AACxD,iBAAS,UAAU,KAAK,WAAW,KAAK,KAAK,WAAW;AACjD,eAAA;AAAA,MACT;AAEM,YAAA,UAAA,SAAN,SAAO,OAAa;AACb,cAAA,OAAO,MAAM,KAAK;AAChB,eAAA;AAAA,MACT;AAEO,YAAA,SAAP,SAAc,KAAgB,OAAa;AACzC,YAAI,WAAW,KAAK;AACpB,YAAI,WAAW,KAAK;AACpB,YAAI,WAAW,KAAK;AACpB,YAAI,WAAW,KAAK;AACb,eAAA;AAAA,MACT;AAEO,YAAA,cAAP,SAAmBa,IAAcb,IAAY;AAC3C,YAAM,MAAMA,GAAE,WAAW,IAAIa,GAAE,WAAW;AAC1C,YAAM,MAAMA,GAAE,WAAW,IAAIb,GAAE,WAAW;AAE1C,YAAM,MAAMA,GAAE,WAAW,IAAIa,GAAE,WAAW;AAC1C,YAAM,MAAMA,GAAE,WAAW,IAAIb,GAAE,WAAW;AAE1C,YAAI,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,GAAG;AACrC,iBAAA;AAAA,QAAA;AAEF,eAAA;AAAA,MACT;AAEO,YAAA,WAAP,SAAgBa,IAAcb,IAAY;AACxC,eAAO,KAAK,SAASa,GAAE,YAAYb,GAAE,UAAU,KAAK,KAAK,SAASa,GAAE,YAAYb,GAAE,UAAU;AAAA,MAC9F;AAEO,YAAA,OAAP,SAAYa,IAAcb,IAAY;AACpC,YAAM,KAAKS,WAAS,GAAGC,WAASG,GAAE,WAAW,GAAGb,GAAE,WAAW,CAAC,IAAIS,WAAST,GAAE,WAAW,GAAGa,GAAE,WAAW,CAAC,CAAC;AAC1G,YAAM,KAAKJ,WAAS,GAAGC,WAASG,GAAE,WAAW,GAAGb,GAAE,WAAW,CAAC,IAAIS,WAAST,GAAE,WAAW,GAAGa,GAAE,WAAW,CAAC,CAAC;AAE1G,YAAM,KAAKA,GAAE,WAAW,IAAIA,GAAE,WAAW;AACzC,YAAM,KAAKA,GAAE,WAAW,IAAIA,GAAE,WAAW;AAEzC,YAAM,KAAKb,GAAE,WAAW,IAAIA,GAAE,WAAW;AACzC,YAAM,KAAKA,GAAE,WAAW,IAAIA,GAAE,WAAW;AAEzC,eAAO,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,MAClC;AAEAc,YAAA,UAAA,UAAA,SAAQT,SAAuBD,QAAmB;AAGhD,YAAI,OAAO;AACX,YAAI,OAAO;AAEX,YAAM,IAAIA,OAAM;AAChB,YAAML,KAAI,KAAK,IAAIK,OAAM,IAAIA,OAAM,EAAE;AAC/B,YAAA,OAAO,KAAK,IAAIL,EAAC;AAEjB,YAAAgB,UAAS,KAAK;AAEX,iBAAA,IAAe,KAAK,MAAM,MAAM,IAAK,MAAM,MAAM,MAAM,MAAO;AACjE,cAAA,KAAK,IAAI,SAAS;AAEpB,gBAAI,EAAE,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC,GAAG;AACnD,qBAAA;AAAA,YAAA;AAAA,UACT,OACK;AACC,gBAAA,QAAQ,IAAMhB,GAAE,CAAC;AACvB,gBAAI,MAAM,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK;AACvC,gBAAI,MAAM,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK;AAGvC,gBAAIG,KAAI;AAER,gBAAI,KAAK,IAAI;AACX,kBAAMc,QAAO;AACR,mBAAA;AACA,mBAAAA;AACD,cAAAd,KAAA;AAAA,YAAA;AAIN,gBAAI,KAAK,MAAM;AACb,cAAAa,QAAO,QAAO;AACd,cAAAA,QAAO,CAAC,IAAIb;AACL,qBAAA;AAAA,YAAA;AAIF,mBAAAQ,WAAS,MAAM,EAAE;AAExB,gBAAI,OAAO,MAAM;AACR,qBAAA;AAAA,YAAA;AAAA,UACT;AAAA,QACF;AAKF,YAAI,OAAO,KAAON,OAAM,cAAc,MAAM;AACnC,iBAAA;AAAA,QAAA;AAIT,QAAAC,QAAO,WAAW;AAClB,QAAAA,QAAO,SAASU;AACT,eAAA;AAAA,MACT;AAGA,YAAA,UAAA,WAAA,WAAA;AACS,eAAA,KAAK,UAAU,IAAI;AAAA,MAC5B;AAEOD,YAAA,gBAAP,SAAqB,KAAgBD,IAAcb,IAAY;AAC7D,YAAI,WAAW,IAAIU,WAASG,GAAE,GAAGb,GAAE,CAAC;AACpC,YAAI,WAAW,IAAIU,WAASG,GAAE,GAAGb,GAAE,CAAC;AACpC,YAAI,WAAW,IAAIS,WAASI,GAAE,GAAGb,GAAE,CAAC;AACpC,YAAI,WAAW,IAAIS,WAASI,GAAE,GAAGb,GAAE,CAAC;AAC7B,eAAA;AAAA,MACT;AAEO,YAAA,oBAAP,SAAyBa,IAAcb,IAAY;AACjD,YAAM,KAAKU,WAASG,GAAE,WAAW,GAAGb,GAAE,WAAW,CAAC;AAClD,YAAM,KAAKU,WAASG,GAAE,WAAW,GAAGb,GAAE,WAAW,CAAC;AAClD,YAAM,KAAKS,WAASI,GAAE,WAAW,GAAGb,GAAE,WAAW,CAAC;AAClD,YAAM,KAAKS,WAASI,GAAE,WAAW,GAAGb,GAAE,WAAW,CAAC;AAC3C,eAAA,KAAO,KAAK,KAAK,KAAK;AAAA,MAC/B;AACDc,aAAAA;AAAAA,IAAA,EAAA;AAAA;AC3QgB,MAAMG,YAAU,KAAK;AAQtC,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,YAAA;AAAA,MAAA;AAoDE,aAAA,eAAWA,WAAa,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAxB,WAAqC;AAAA,iBAAO,IAAMA,UAAS;AAAA,QAAY;AAAA;;OAAC;AA9CjEA,gBAAmB,sBAAG;AAOtBA,gBAAiB,oBAAW;AAM5BA,gBAAkB,qBAAW;AAM7BA,gBAAa,gBAAW;AAOxBA,gBAAc,iBAAW;AAMzBA,gBAAU,aAAW;AAMrBA,gBAAW,cAAY,IAAM,MAAQD;AAarCC,gBAAW,cAAW;AAOtBA,gBAAc,iBAAW;AAKzBA,gBAAgB,mBAAW;AAK3BA,gBAAqB,wBAAW;AAMhCA,gBAAiB,oBAAW;AAM5BA,gBAAmB,sBAAW;AAM9BA,gBAAoB,uBAAY,IAAM,MAAQD;AAM9CC,gBAAc,iBAAW;AAMzBA,gBAAA,cAAuB,MAAMD;AAO7BC,gBAAS,YAAW;AACpBA,gBAAW,cAAW;AAOtBA,gBAAW,cAAW;AAKtBA,gBAAoB,uBAAW;AAK/BA,gBAAqB,wBAAY,IAAM,MAAQD;AACvDC,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAGD,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,oBAAA;AAAA,MAAA;AACE,aAAA,eAAWA,mBAAiB,qBAAA;AAAA,QAA5B,KAAA,WAAA;AACE,iBAAO,SAAS;AAAA,QAClB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAkB,sBAAA;AAAA,QAA7B,KAAA,WAAA;AACE,iBAAO,SAAS;AAAA,QAClB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAa,iBAAA;AAAA,QAAxB,KAAA,WAAA;AACS,iBAAA,SAAS,gBAAgB,SAAS;AAAA,QAC3C;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAc,kBAAA;AAAA,QAAzB,KAAA,WAAA;AACE,iBAAO,SAAS;AAAA,QAClB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAU,cAAA;AAAA,QAArB,KAAA,WAAA;AACS,iBAAA,SAAS,aAAa,SAAS;AAAA,QACxC;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAiB,qBAAA;AAAA,QAA5B,KAAA,WAAA;AACE,iBAAO,SAAS,aAAa,SAAS,sBAAsB,SAAS,aAAa,SAAS;AAAA,QAC7F;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAW,eAAA;AAAA,QAAtB,KAAA,WAAA;AACE,iBAAO,SAAS;AAAA,QAClB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAa,iBAAA;AAAA,QAAxB,KAAA,WAAA;AACE,iBAAO,IAAM,SAAS;AAAA,QACxB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAW,eAAA;AAAA,QAAtB,KAAA,WAAA;AACE,iBAAO,SAAS;AAAA,QAClB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAc,kBAAA;AAAA,QAAzB,KAAA,WAAA;AACE,iBAAO,SAAS;AAAA,QAClB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAgB,oBAAA;AAAA,QAA3B,KAAA,WAAA;AACE,iBAAO,SAAS;AAAA,QAClB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAqB,yBAAA;AAAA,QAAhC,KAAA,WAAA;AACE,iBAAO,SAAS;AAAA,QAClB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAiB,qBAAA;AAAA,QAA5B,KAAA,WAAA;AACS,iBAAA,SAAS,oBAAoB,SAAS;AAAA,QAC/C;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAmB,uBAAA;AAAA,QAA9B,KAAA,WAAA;AACS,iBAAA,SAAS,sBAAsB,SAAS;AAAA,QACjD;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAoB,wBAAA;AAAA,QAA/B,KAAA,WAAA;AACE,iBAAO,SAAS;AAAA,QAClB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAc,kBAAA;AAAA,QAAzB,KAAA,WAAA;AACS,iBAAA,SAAS,iBAAiB,SAAS;AAAA,QAC5C;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAqB,yBAAA;AAAA,QAAhC,KAAA,WAAA;AACE,iBAAO,SAAS,iBAAiB,SAAS,sBAAsB,SAAS,iBAAiB,SAAS;AAAA,QACrG;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAW,eAAA;AAAA,QAAtB,KAAA,WAAA;AACE,iBAAO,SAAS;AAAA,QAClB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAkB,sBAAA;AAAA,QAA7B,KAAA,WAAA;AACS,iBAAA,SAAS,cAAc,SAAS;AAAA,QACzC;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAS,aAAA;AAAA,QAApB,KAAA,WAAA;AACE,iBAAO,SAAS;AAAA,QAClB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAW,eAAA;AAAA,QAAtB,KAAA,WAAA;AACE,iBAAO,SAAS;AAAA,QAClB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAW,eAAA;AAAA,QAAtB,KAAA,WAAA;AACE,iBAAO,SAAS;AAAA,QAClB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAoB,wBAAA;AAAA,QAA/B,KAAA,WAAA;AACS,iBAAA,SAAS,uBAAuB,SAAS;AAAA,QAClD;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAuB,2BAAA;AAAA,QAAlC,KAAA,WAAA;AACE,iBAAO,SAAS,uBAAuB,SAAS,sBAAsB,SAAS,uBAAuB,SAAS;AAAA,QACjH;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAqB,yBAAA;AAAA,QAAhC,KAAA,WAAA;AACE,iBAAO,SAAS;AAAA,QAClB;AAAA;;OAAC;AACD,aAAA,eAAWA,mBAAwB,4BAAA;AAAA,QAAnC,KAAA,WAAA;AACS,iBAAA,SAAS,wBAAwB,SAAS;AAAA,QACnD;AAAA;;OAAC;AACFA,aAAAA;AAAAA,IAAA,EAAA;AAAA;ACrND,MAAA;AAAA;AAAA,IAAA,WAAA;AAoBE,eAAAC,MAAY,MAAoB;AAnBhC,aAAK,QAAQ;AACb,aAAI,OAAW;AAGf,aAAY,eAAY;AACxB,aAAY,eAAW;AAGvB,aAAc,iBAAY;AAC1B,aAAc,iBAAW;AAGzB,aAAa,gBAAY;AACzB,aAAa,gBAAW;AAGxB,aAAa,gBAAY;AACzB,aAAa,gBAAW;AAGtB,aAAK,QAAQ,CAAA;AACR,aAAA,OAAO,KAAK,OAAO,KAAK;AAE7B,aAAK,YAAY,KAAK;AACjB,aAAA,eAAe,OAAO,KAAK,cAAc;AAC9C,aAAK,cAAc,KAAK;AACnB,aAAA,iBAAiB,OAAO,KAAK,gBAAgB;AAClD,aAAK,aAAa,KAAK;AAClB,aAAA,gBAAgB,OAAO,KAAK,eAAe;AAChD,aAAK,aAAa,KAAK;AAClB,aAAA,gBAAgB,OAAO,KAAK,eAAe;AAAA,MAAA;AAGlDA,YAAG,UAAA,MAAH,SAAIjB,IAAU;AACR,YAAA,OAAOA,OAAM,UAAU;AACzB,eAAK,OAAOA;AACL,iBAAA;AAAA,QAAA;AAET,eAAO,KAAK;AAAA,MACd;AAEAiB,YAAA,UAAA,OAAA,WAAA;AACE,eAAO,KAAK,MAAM;AAAA,MACpB;AAEAA,YAAA,UAAA,WAAA,WAAA;AACM,YAAA;AACA,YAAA,KAAK,MAAM,SAAS,GAAG;AAClB,iBAAA,KAAK,MAAM;eACb;AACA,eAAA;AACL,cAAI,KAAK,cAAc;AACrB,mBAAO,KAAK;iBACP;AAEL,mBAAO;;QACT;AAEG,aAAA;AACL,YAAI,KAAK,gBAAgB;AACvB,eAAK,YAAY,IAAI;AAAA,QAAA;AAEhB,eAAA;AAAA,MACT;AAEAA,YAAO,UAAA,UAAP,SAAQ,MAAO;AACb,YAAI,KAAK,MAAM,SAAS,KAAK,MAAM;AAC5B,eAAA;AACL,cAAI,KAAK,eAAe;AACtB,iBAAK,WAAW,IAAI;AAAA,UAAA;AAEjB,eAAA,MAAM,KAAK,IAAI;AAAA,QAAA,OACf;AACA,eAAA;AACL,cAAI,KAAK,eAAe;AACf,mBAAA,KAAK,WAAW,IAAI;AAAA,UAAA;AAAA,QAC7B;AAAA,MAEJ;AAEAA,YAAA,UAAA,WAAA,WAAA;AACE,eAAO,OAAO,KAAK,eAAe,OAAO,KAAK,iBAAiB,OAAO,KAAK,gBAAgB,OACvF,KAAK,gBAAgB,OAAO,KAAK,MAAM,SAAS,MAAM,KAAK;AAAA,MACjE;AACDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;ACrFgB,MAAMb,aAAW,KAAK;AACtB,MAAME,aAAW,KAAK;AAQvC,MAAA;AAAA;AAAA,IAAA,WAAA;AAWE,eAAAY,UAAY,IAAW;AARvB,aAAA,OAAa,IAAI,KAAI;AACrB,aAAQ,WAAM;AACd,aAAM,SAAgB;AACtB,aAAM,SAAgB;AACtB,aAAM,SAAgB;AAEtB,aAAM,SAAW;AAGf,aAAK,KAAK;AAAA,MAAA;AAIZ,gBAAA,UAAA,WAAA,WAAA;AACS,eAAA,KAAK,KAAK,OAAO,KAAK;AAAA,MAC/B;AAEA,gBAAA,UAAA,SAAA,WAAA;AACE,eAAO,KAAK,UAAU;AAAA,MACxB;AACDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAEgB,MAAM,eAAe,IAAI,KAAoB;AAAA,IAC5D,QAAM,WAAA;AACJ,aAAO,IAAI,SAAQ;AAAA,IACrB;AAAA,IACA,kBAAQ,MAAmB;AACzB,WAAK,WAAW;AAChB,WAAK,SAAS;AACd,WAAK,SAAS;AACd,WAAK,SAAS;AACd,WAAK,SAAS;AACd,WAAK,KAAK;AAAA,IAAA;AAAA,EAEb,CAAA;AAaD,MAAA;AAAA;AAAA,IAAA,WAAA;AAOE,eAAAC,eAAA;AA0uBiB,aAAA,YAAuB,IAAI,KAAmB;AAAA,UAC7D,QAAM,WAAA;AAEJ,mBAAO;UACT;AAAA,UACA,kBAAQ,OAAmB;AAAA,UAAA;AAAA,QAC3B,CACD;AAEgB,aAAA,YAA6B,IAAI,KAAyB;AAAA,UACzE,QAAM,WAAA;AACJ,mBAAO;UACT;AAAA,UACA,kBAAQ,OAAyB;AAC/B,kBAAM,SAAS;AAAA,UAAA;AAAA,QACjB,CACD;AAEmB,aAAA,eAAsB,IAAI,KAAkB;AAAA,UAC9D,QAAM,WAAA;AACJ,mBAAO,IAAI,SAAQ;AAAA,UACrB;AAAA,UACA,kBAAQ,UAAqB;AAC3B,qBAAS,MAAK;AAAA,UAAA;AAAA,QAChB,CACD;AAlwBC,aAAK,SAAS;AACd,aAAK,UAAU,CAAA;AACf,aAAK,gBAAgB;AAAA,MAAA;AAQZ,mBAAA,UAAA,cAAX,SAAY,IAAU;AACd,YAAA,OAAO,KAAK,QAAQ,EAAE;AAE5B,eAAO,KAAK;AAAA,MACd;AAOU,mBAAA,UAAA,aAAV,SAAW,IAAU;AACb,YAAA,OAAO,KAAK,QAAQ,EAAE;AAE5B,eAAO,KAAK;AAAA,MACd;AAEA,mBAAA,UAAA,eAAA,WAAA;AACQ,YAAA,OAAO,aAAa;AACrB,aAAA,KAAK,EAAE,KAAK;AACZ,aAAA,QAAQ,KAAK,EAAE,IAAI;AACjB,eAAA;AAAA,MACT;AAEQ,mBAAA,UAAA,WAAR,SAAS,MAAiB;AAEjB,eAAA,KAAK,QAAQ,KAAK,EAAE;AAC3B,qBAAa,QAAQ,IAAI;AAAA,MAC3B;AAQAA,mBAAA,UAAA,cAAA,SAAY,MAAiB,UAAW;AAGhC,YAAA,OAAO,KAAK;AAEb,aAAA,KAAK,IAAI,IAAI;AAGlB,aAAK,OAAO,KAAK,MAAMJ,iBAAS,aAAa;AAE7C,aAAK,WAAW;AAChB,aAAK,SAAS;AAEd,aAAK,WAAW,IAAI;AAEpB,eAAO,KAAK;AAAA,MACd;AAKY,mBAAA,UAAA,eAAZ,SAAa,IAAU;AACf,YAAA,OAAO,KAAK,QAAQ,EAAE;AAK5B,aAAK,WAAW,IAAI;AACpB,aAAK,SAAS,IAAI;AAAA,MACpB;AAWAI,mBAAA,UAAA,YAAA,SAAU,IAAY,MAAiBvB,IAAY;AAI3C,YAAA,OAAO,KAAK,QAAQ,EAAE;AAK5B,YAAI,KAAK,KAAK,SAAS,IAAI,GAAG;AACrB,iBAAA;AAAA,QAAA;AAGT,aAAK,WAAW,IAAI;AAEf,aAAA,KAAK,IAAI,IAAI;AAGlB,eAAO,KAAK;AACP,aAAA,OAAO,MAAMmB,iBAAS,aAAa;AAKpC,YAAAnB,GAAE,IAAI,GAAK;AACb,eAAK,WAAW,KAAKA,GAAE,IAAImB,iBAAS;AAAA,QAAA,OAC/B;AACL,eAAK,WAAW,KAAKnB,GAAE,IAAImB,iBAAS;AAAA,QAAA;AAGlC,YAAAnB,GAAE,IAAI,GAAK;AACb,eAAK,WAAW,KAAKA,GAAE,IAAImB,iBAAS;AAAA,QAAA,OAC/B;AACL,eAAK,WAAW,KAAKnB,GAAE,IAAImB,iBAAS;AAAA,QAAA;AAGtC,aAAK,WAAW,IAAI;AAEb,eAAA;AAAA,MACT;AAEU,mBAAA,UAAA,aAAV,SAAW,MAAiB;AAGtB,YAAA,KAAK,UAAU,MAAM;AACvB,eAAK,SAAS;AACd,eAAK,OAAO,SAAS;AACrB;AAAA,QAAA;AAIF,YAAM,WAAW,KAAK;AACtB,YAAI,QAAQ,KAAK;AACV,eAAA,CAAC,MAAM,UAAU;AACtB,cAAM,SAAS,MAAM;AACrB,cAAM,SAAS,MAAM;AAEf,cAAA,OAAO,MAAM,KAAK;AAExB,cAAM,eAAe,KAAK,kBAAkB,MAAM,MAAM,QAAQ;AAGhE,cAAM,OAAO,IAAM;AAGb,cAAA,kBAAkB,KAAO,eAAe;AAG9C,cAAM,WAAW,KAAK,kBAAkB,UAAU,OAAO,IAAI;AAC7D,cAAI,QAAQ,WAAW;AACnB,cAAA,CAAC,OAAO,UAAU;AACd,gBAAA,UAAU,OAAO,KAAK;AACnB,qBAAA;AAAA,UAAA;AAIX,cAAM,WAAW,KAAK,kBAAkB,UAAU,OAAO,IAAI;AAC7D,cAAI,QAAQ,WAAW;AACnB,cAAA,CAAC,OAAO,UAAU;AACd,gBAAA,UAAU,OAAO,KAAK;AACnB,qBAAA;AAAA,UAAA;AAIP,cAAA,OAAO,SAAS,OAAO,OAAO;AAChC;AAAA,UAAA;AAIF,cAAI,QAAQ,OAAO;AACT,oBAAA;AAAA,UAAA,OACH;AACG,oBAAA;AAAA,UAAA;AAAA,QACV;AAGF,YAAM,UAAU;AAGhB,YAAM,YAAY,QAAQ;AACpB,YAAA,YAAY,KAAK;AACvB,kBAAU,SAAS;AACnB,kBAAU,WAAW;AACrB,kBAAU,KAAK,QAAQ,UAAU,QAAQ,IAAI;AACnC,kBAAA,SAAS,QAAQ,SAAS;AAEpC,YAAI,aAAa,MAAM;AAEjB,cAAA,UAAU,WAAW,SAAS;AAChC,sBAAU,SAAS;AAAA,UAAA,OACd;AACL,sBAAU,SAAS;AAAA,UAAA;AAGrB,oBAAU,SAAS;AACnB,oBAAU,SAAS;AACnB,kBAAQ,SAAS;AACjB,eAAK,SAAS;AAAA,QAAA,OACT;AAEL,oBAAU,SAAS;AACnB,oBAAU,SAAS;AACnB,kBAAQ,SAAS;AACjB,eAAK,SAAS;AACd,eAAK,SAAS;AAAA,QAAA;AAIhB,gBAAQ,KAAK;AACb,eAAO,SAAS,MAAM;AACZ,kBAAA,KAAK,QAAQ,KAAK;AAE1B,cAAM,SAAS,MAAM;AACrB,cAAM,SAAS,MAAM;AAKrB,gBAAM,SAAS,IAAIT,WAAS,OAAO,QAAQ,OAAO,MAAM;AACxD,gBAAM,KAAK,QAAQ,OAAO,MAAM,OAAO,IAAI;AAE3C,kBAAQ,MAAM;AAAA,QAAA;AAAA,MAIlB;AAEU,mBAAA,UAAA,aAAV,SAAW,MAAiB;AACtB,YAAA,SAAS,KAAK,QAAQ;AACxB,eAAK,SAAS;AACd;AAAA,QAAA;AAGF,YAAM,SAAS,KAAK;AACpB,YAAM,cAAc,OAAO;AACvB,YAAA;AACA,YAAA,OAAO,WAAW,MAAM;AAC1B,oBAAU,OAAO;AAAA,QAAA,OACZ;AACL,oBAAU,OAAO;AAAA,QAAA;AAGnB,YAAI,eAAe,MAAM;AAEnB,cAAA,YAAY,WAAW,QAAQ;AACjC,wBAAY,SAAS;AAAA,UAAA,OAChB;AACL,wBAAY,SAAS;AAAA,UAAA;AAEvB,kBAAQ,SAAS;AACjB,eAAK,SAAS,MAAM;AAGpB,cAAI,QAAQ;AACZ,iBAAO,SAAS,MAAM;AACZ,oBAAA,KAAK,QAAQ,KAAK;AAE1B,gBAAM,SAAS,MAAM;AACrB,gBAAM,SAAS,MAAM;AAErB,kBAAM,KAAK,QAAQ,OAAO,MAAM,OAAO,IAAI;AAC3C,kBAAM,SAAS,IAAIA,WAAS,OAAO,QAAQ,OAAO,MAAM;AAExD,oBAAQ,MAAM;AAAA,UAAA;AAAA,QAChB,OACK;AACL,eAAK,SAAS;AACd,kBAAQ,SAAS;AACjB,eAAK,SAAS,MAAM;AAAA,QAAA;AAAA,MAIxB;AAMO,mBAAA,UAAA,UAAP,SAAQ,IAAe;AAGrB,YAAM,IAAI;AACV,YAAI,EAAE,OAAA,KAAY,EAAE,SAAS,GAAG;AACvB,iBAAA;AAAA,QAAA;AAGT,YAAM,IAAI,EAAE;AACZ,YAAM,IAAI,EAAE;AAEN,YAAA,UAAU,EAAE,SAAS,EAAE;AAG7B,YAAI,UAAU,GAAG;AACf,cAAM,IAAI,EAAE;AACZ,cAAM,IAAI,EAAE;AAGZ,YAAE,SAAS;AACX,YAAE,SAAS,EAAE;AACb,YAAE,SAAS;AAGP,cAAA,EAAE,UAAU,MAAM;AAChB,gBAAA,EAAE,OAAO,WAAW,IAAI;AAC1B,gBAAE,OAAO,SAAS;AAAA,YAAA,OACb;AACL,gBAAE,OAAO,SAAS;AAAA,YAAA;AAAA,UACpB,OACK;AACL,iBAAK,SAAS;AAAA,UAAA;AAIZ,cAAA,EAAE,SAAS,EAAE,QAAQ;AACvB,cAAE,SAAS;AACX,cAAE,SAAS;AACX,cAAE,SAAS;AACX,cAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,IAAI;AAC7B,cAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,IAAI;AAE7B,cAAE,SAAS,IAAIA,WAAS,EAAE,QAAQ,EAAE,MAAM;AAC1C,cAAE,SAAS,IAAIA,WAAS,EAAE,QAAQ,EAAE,MAAM;AAAA,UAAA,OACrC;AACL,cAAE,SAAS;AACX,cAAE,SAAS;AACX,cAAE,SAAS;AACX,cAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,IAAI;AAC7B,cAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,IAAI;AAE7B,cAAE,SAAS,IAAIA,WAAS,EAAE,QAAQ,EAAE,MAAM;AAC1C,cAAE,SAAS,IAAIA,WAAS,EAAE,QAAQ,EAAE,MAAM;AAAA,UAAA;AAGrC,iBAAA;AAAA,QAAA;AAIT,YAAI,UAAU,IAAI;AAChB,cAAM,IAAI,EAAE;AACZ,cAAM,IAAI,EAAE;AAGZ,YAAE,SAAS;AACX,YAAE,SAAS,EAAE;AACb,YAAE,SAAS;AAGP,cAAA,EAAE,UAAU,MAAM;AAChB,gBAAA,EAAE,OAAO,WAAW,GAAG;AACzB,gBAAE,OAAO,SAAS;AAAA,YAAA,OACb;AACL,gBAAE,OAAO,SAAS;AAAA,YAAA;AAAA,UACpB,OACK;AACL,iBAAK,SAAS;AAAA,UAAA;AAIZ,cAAA,EAAE,SAAS,EAAE,QAAQ;AACvB,cAAE,SAAS;AACX,cAAE,SAAS;AACX,cAAE,SAAS;AACX,cAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,IAAI;AAC7B,cAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,IAAI;AAE7B,cAAE,SAAS,IAAIA,WAAS,EAAE,QAAQ,EAAE,MAAM;AAC1C,cAAE,SAAS,IAAIA,WAAS,EAAE,QAAQ,EAAE,MAAM;AAAA,UAAA,OACrC;AACL,cAAE,SAAS;AACX,cAAE,SAAS;AACX,cAAE,SAAS;AACX,cAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,IAAI;AAC7B,cAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,IAAI;AAE7B,cAAE,SAAS,IAAIA,WAAS,EAAE,QAAQ,EAAE,MAAM;AAC1C,cAAE,SAAS,IAAIA,WAAS,EAAE,QAAQ,EAAE,MAAM;AAAA,UAAA;AAGrC,iBAAA;AAAA,QAAA;AAGF,eAAA;AAAA,MACT;AAMA,mBAAA,UAAA,YAAA,WAAA;AACM,YAAA,KAAK,UAAU,MAAM;AAChB,iBAAA;AAAA,QAAA;AAGT,eAAO,KAAK,OAAO;AAAA,MACrB;AAKA,mBAAA,UAAA,eAAA,WAAA;AACM,YAAA,KAAK,UAAU,MAAM;AAChB,iBAAA;AAAA,QAAA;AAGT,YAAM,OAAO,KAAK;AACZ,YAAA,WAAW,KAAK,KAAK;AAE3B,YAAI,YAAY;AACZ,YAAA;AACJ,YAAM,KAAK,KAAK,aAAa,WAAW,SAAS,KAAK,MAAM;AACrD,eAAA,OAAO,GAAG,QAAQ;AACnB,cAAA,KAAK,SAAS,GAAG;AAEnB;AAAA,UAAA;AAGW,uBAAA,KAAK,KAAK;;AAGpB,aAAA,aAAa,QAAQ,EAAE;AAE5B,eAAO,YAAY;AAAA,MACrB;AAKa,mBAAA,UAAA,gBAAb,SAAc,IAAW;AACnB,YAAA;AACA,YAAA,OAAO,OAAO,aAAa;AACtB,iBAAA,KAAK,QAAQ,EAAE;AAAA,QAAA,OACjB;AACL,iBAAO,KAAK;AAAA,QAAA;AAKV,YAAA,KAAK,UAAU;AACV,iBAAA;AAAA,QAAA;AAGT,YAAM,UAAU,KAAK,cAAc,KAAK,OAAO,EAAE;AACjD,YAAM,UAAU,KAAK,cAAc,KAAK,OAAO,EAAE;AAC1C,eAAA,IAAIA,WAAS,SAAS,OAAO;AAAA,MACtC;AAEiB,mBAAA,UAAA,oBAAjB,SAAkB,MAAiB;AACjC,YAAI,QAAQ,MAAM;AAChB;AAAA,QAAA;AAGE,YAAA,SAAS,KAAK,OAAQ;AAI1B,YAAM,SAAS,KAAK;AACpB,YAAM,SAAS,KAAK;AAEhB,YAAA,KAAK,UAAU;AAIjB;AAAA,QAAA;AASF,aAAK,kBAAkB,MAAM;AAC7B,aAAK,kBAAkB,MAAM;AAAA,MAC/B;AAEe,mBAAA,UAAA,kBAAf,SAAgB,MAAiB;AAC/B,YAAI,QAAQ,MAAM;AAChB;AAAA,QAAA;AAGF,YAAM,SAAS,KAAK;AACpB,YAAM,SAAS,KAAK;AAEhB,YAAA,KAAK,UAAU;AAIjB;AAAA,QAAA;AAMc,eAAO;AACP,eAAO;AAIjB,YAAA,OAAO,IAAI;AACjB,aAAK,QAAQ,OAAO,MAAM,OAAO,IAAI;AAIrC,aAAK,gBAAgB,MAAM;AAC3B,aAAK,gBAAgB,MAAM;AAAA,MAC7B;AAKA,mBAAA,UAAA,WAAA,WAAA;AACgB;AAAA,MAKhB;AAMA,mBAAA,UAAA,gBAAA,WAAA;AACE,YAAI,aAAa;AACb,YAAA;AACJ,YAAM,KAAK,KAAK,aAAa,WAAW,SAAS,KAAK,MAAM;AACrD,eAAA,OAAO,GAAG,QAAQ;AACnB,cAAA,KAAK,UAAU,GAAG;AACpB;AAAA,UAAA;AAKF,cAAM,UAAUF,WAAS,KAAK,OAAO,SAAS,KAAK,OAAO,MAAM;AACnD,uBAAAE,WAAS,YAAY,OAAO;AAAA,QAAA;AAEtC,aAAA,aAAa,QAAQ,EAAE;AAErB,eAAA;AAAA,MACT;AAKA,mBAAA,UAAA,kBAAA,WAAA;AACE,YAAM,QAAQ,CAAA;AACd,YAAI,QAAQ;AAGR,YAAA;AACJ,YAAM,KAAK,KAAK,aAAa,WAAW,SAAS,KAAK,MAAM;AACrD,eAAA,OAAO,GAAG,QAAQ;AACnB,cAAA,KAAK,SAAS,GAAG;AAEnB;AAAA,UAAA;AAGE,cAAA,KAAK,UAAU;AACjB,iBAAK,SAAS;AACd,kBAAM,KAAK,IAAI;AACb,cAAA;AAAA,UAAA,OACG;AACL,iBAAK,SAAS,IAAI;AAAA,UAAA;AAAA,QACpB;AAEG,aAAA,aAAa,QAAQ,EAAE;AAE5B,eAAO,QAAQ,GAAG;AAChB,cAAI,UAAU;AACd,cAAI,OAAO;AACX,cAAI,OAAO;AACX,mBAAS,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG;AACxB,gBAAA,QAAQ,MAAM,CAAC,EAAE;AACvB,qBAAS,IAAI,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG;AAC5B,kBAAA,QAAQ,MAAM,CAAC,EAAE;AACvB,kBAAM,OAAO,KAAK,kBAAkB,OAAO,KAAK;AAChD,kBAAI,OAAO,SAAS;AACX,uBAAA;AACA,uBAAA;AACG,0BAAA;AAAA,cAAA;AAAA,YACZ;AAAA,UACF;AAGI,cAAA,SAAS,MAAM,IAAI;AACnB,cAAA,SAAS,MAAM,IAAI;AAEnB,cAAA,WAAS,KAAK;AACpB,mBAAO,SAAS;AAChB,mBAAO,SAAS;AAChB,mBAAO,SAAS,IAAIA,WAAS,OAAO,QAAQ,OAAO,MAAM;AACzD,mBAAO,KAAK,QAAQ,OAAO,MAAM,OAAO,IAAI;AAC5C,mBAAO,SAAS;AAEhB,iBAAO,SAAS;AAChB,iBAAO,SAAS;AAEhB,gBAAM,IAAI,IAAI,MAAM,QAAQ,CAAC;AAC7B,gBAAM,IAAI,IAAI;AACZ,YAAA;AAAA,QAAA;AAGC,aAAA,SAAS,MAAM,CAAC;AAAA,MAGvB;AAQW,mBAAA,UAAA,cAAX,SAAY,WAAoB;AAE1B,YAAA;AACJ,YAAM,KAAK,KAAK,aAAa,WAAW,SAAS,KAAK,MAAM;AACrD,eAAA,OAAO,GAAG,QAAQ;AACvB,cAAM,OAAO,KAAK;AACb,eAAA,WAAW,KAAK,UAAU;AAC1B,eAAA,WAAW,KAAK,UAAU;AAC1B,eAAA,WAAW,KAAK,UAAU;AAC1B,eAAA,WAAW,KAAK,UAAU;AAAA,QAAA;AAE5B,aAAA,aAAa,QAAQ,EAAE;AAAA,MAC9B;AAMAa,mBAAA,UAAA,QAAA,SAAM,MAAiB,eAAuC;AAEtD,YAAA,QAAQ,KAAK,UAAU;AAEvB,cAAA,KAAK,KAAK,MAAM;AACf,eAAA,MAAM,SAAS,GAAG;AACjB,cAAA,OAAO,MAAM;AACnB,cAAI,QAAQ,MAAM;AAChB;AAAA,UAAA;AAGF,cAAI,KAAK,YAAY,KAAK,MAAM,IAAI,GAAG;AACjC,gBAAA,KAAK,UAAU;AACX,kBAAA,UAAU,cAAc,KAAK,EAAE;AACrC,kBAAI,YAAY,OAAO;AACrB;AAAA,cAAA;AAAA,YACF,OACK;AACC,oBAAA,KAAK,KAAK,MAAM;AAChB,oBAAA,KAAK,KAAK,MAAM;AAAA,YAAA;AAAA,UACxB;AAAA,QACF;AAGG,aAAA,UAAU,QAAQ,KAAK;AAAA,MAC9B;AAYAA,mBAAA,UAAA,UAAA,SAAQlB,QAAqB,iBAAgC;AAG3D,YAAM,KAAKA,OAAM;AACjB,YAAM,KAAKA,OAAM;AACjB,YAAM,IAAI,KAAK,IAAI,IAAI,EAAE;AAEzB,UAAE,UAAS;AAGX,YAAMQ,KAAI,KAAK,aAAa,GAAK,CAAC;AAC5B,YAAA,QAAQ,KAAK,IAAIA,EAAC;AAKxB,YAAI,cAAcR,OAAM;AAGlB,YAAA,cAAc,IAAI;AACxB,YAAI,IAAI,KAAK,QAAS,IAAI,aAAc,IAAI,aAAa,EAAE;AAC/C,oBAAA,cAAc,IAAI,CAAC;AAEzB,YAAA,QAAQ,KAAK,UAAU;AACvB,YAAA,WAAW,KAAK,UAAU;AAE1B,cAAA,KAAK,KAAK,MAAM;AACf,eAAA,MAAM,SAAS,GAAG;AACjB,cAAA,OAAO,MAAM;AACnB,cAAI,QAAQ,MAAM;AAChB;AAAA,UAAA;AAGF,cAAI,KAAK,YAAY,KAAK,MAAM,WAAW,MAAM,OAAO;AACtD;AAAA,UAAA;AAKI,cAAAmB,KAAI,KAAK,KAAK;AACd,cAAA,IAAI,KAAK,KAAK;AACpB,cAAM,aAAahB,WAAS,KAAK,IAAIK,IAAG,KAAK,IAAI,IAAIW,EAAC,CAAC,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC;AAC7E,cAAI,aAAa,GAAK;AACpB;AAAA,UAAA;AAGE,cAAA,KAAK,UAAU;AACjB,qBAAS,KAAK,KAAK,MAAMnB,OAAM,EAAE;AACjC,qBAAS,KAAK,KAAK,MAAMA,OAAM,EAAE;AACjC,qBAAS,cAAc;AAEvB,gBAAM,QAAQ,gBAAgB,UAAU,KAAK,EAAE;AAE/C,gBAAI,UAAU,GAAK;AAEjB;AAAA,YAAA,WACS,QAAQ,GAAK;AAER,4BAAA;AACd,kBAAI,KAAK,QAAS,IAAI,aAAc,IAAI,aAAa,EAAE;AAC3C,0BAAA,cAAc,IAAI,CAAC;AAAA,YAAA;AAAA,UACjC,OACK;AACC,kBAAA,KAAK,KAAK,MAAM;AAChB,kBAAA,KAAK,KAAK,MAAM;AAAA,UAAA;AAAA,QACxB;AAEG,aAAA,UAAU,QAAQ,KAAK;AACvB,aAAA,UAAU,QAAQ,QAAQ;AAAA,MACjC;AA6BDkB,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAGD,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAE,YAAA;AACE,aAAO,UAAuB;AAC9B,aAAM,SAAa;;AACX,gBAAA,UAAA,WAAR,SAAS,MAAiB;AACxB,aAAK,QAAQ,SAAS;AACjB,aAAA,QAAQ,KAAK,IAAI;AACtB,aAAK,OAAO,SAAS;AAChB,aAAA,OAAO,KAAK,CAAC;AACX,eAAA;AAAA,MACT;AACA,gBAAA,UAAA,OAAA,WAAA;AACS,eAAA,KAAK,QAAQ,SAAS,GAAG;AACxB,cAAA,IAAI,KAAK,QAAQ,SAAS;AAC1B,cAAA,OAAO,KAAK,QAAQ,CAAC;AAC3B,cAAI,KAAK,OAAO,CAAC,MAAM,GAAG;AACnB,iBAAA,OAAO,CAAC,IAAI;AACV,mBAAA;AAAA,UAAA;AAET,cAAI,KAAK,OAAO,CAAC,MAAM,GAAG;AACnB,iBAAA,OAAO,CAAC,IAAI;AACjB,gBAAI,KAAK,QAAQ;AACV,mBAAA,QAAQ,KAAK,KAAK,MAAM;AACxB,mBAAA,OAAO,KAAK,CAAC;AAClB,qBAAO,KAAK;AAAA,YAAA;AAAA,UACd;AAEF,cAAI,KAAK,OAAO,CAAC,MAAM,GAAG;AACnB,iBAAA,OAAO,CAAC,IAAI;AACjB,gBAAI,KAAK,QAAQ;AACV,mBAAA,QAAQ,KAAK,KAAK,MAAM;AACxB,mBAAA,OAAO,KAAK,CAAC;AAClB,qBAAO,KAAK;AAAA,YAAA;AAAA,UACd;AAEF,eAAK,QAAQ;AACb,eAAK,OAAO;;MAEhB;AACA,gBAAA,UAAA,QAAA,WAAA;AACE,aAAK,QAAQ,SAAS;AAAA,MACxB;AACDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;ACn3BgB,MAAMf,aAAW,KAAK;AACtB,MAAMC,aAAW,KAAK;AAOvC,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAe,cAAA;AAAA,YA0LC,QAAA;AAzLC,aAAA,SAAoC,IAAI,YAAW;AACnD,aAAY,eAAa;AA4DzB,aAAA,QAAQ,SAAC,MAAiB,eAAuC;AAC1D,gBAAA,OAAO,MAAM,MAAM,aAAa;AAAA,QACvC;AAuGa,aAAA,gBAAG,SAAC,SAAe;AAE1B,cAAA,YAAY,MAAK,gBAAgB;AAC5B,mBAAA;AAAA,UAAA;AAGT,cAAM,WAAWf,WAAS,SAAS,MAAK,cAAc;AACtD,cAAM,WAAWD,WAAS,SAAS,MAAK,cAAc;AAItD,cAAM,YAAY,MAAK,OAAO,YAAY,QAAQ;AAClD,cAAM,YAAY,MAAK,OAAO,YAAY,QAAQ;AAG7C,gBAAA,WAAW,WAAW,SAAS;AAE7B,iBAAA;AAAA,QACT;AAAA,MAAA;AA/KW,kBAAA,UAAA,cAAX,SAAY,SAAe;AAClB,eAAA,KAAK,OAAO,YAAY,OAAO;AAAA,MACxC;AAKAgB,kBAAA,UAAA,cAAA,SAAY,UAAkB,UAAgB;AAC5C,YAAM,QAAQ,KAAK,OAAO,WAAW,QAAQ;AAC7C,YAAM,QAAQ,KAAK,OAAO,WAAW,QAAQ;AACtC,eAAA,KAAK,YAAY,OAAO,KAAK;AAAA,MACtC;AAKU,kBAAA,UAAA,aAAV,SAAW,SAAe;AACjB,eAAA,KAAK,OAAO,WAAW,OAAO;AAAA,MACvC;AAKA,kBAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK,aAAa;AAAA,MAC3B;AAKA,kBAAA,UAAA,gBAAA,WAAA;AACS,eAAA,KAAK,OAAO;MACrB;AAKA,kBAAA,UAAA,iBAAA,WAAA;AACS,eAAA,KAAK,OAAO;MACrB;AAKA,kBAAA,UAAA,iBAAA,WAAA;AACS,eAAA,KAAK,OAAO;MACrB;AAoBAA,kBAAA,UAAA,UAAA,SAAQrB,QAAqB,iBAAgC;AACtD,aAAA,OAAO,QAAQA,QAAO,eAAe;AAAA,MAC5C;AAQW,kBAAA,UAAA,cAAX,SAAY,WAAoB;AACzB,aAAA,OAAO,YAAY,SAAS;AAAA,MACnC;AAMAqB,kBAAA,UAAA,cAAA,SAAY,MAAiB,UAAsB;AAEjD,YAAM,UAAU,KAAK,OAAO,YAAY,MAAM,QAAQ;AACtD,aAAK,WAAW,OAAO;AAChB,eAAA;AAAA,MACT;AAKY,kBAAA,UAAA,eAAZ,SAAa,SAAe;AAC1B,aAAK,aAAa,OAAO;AACpB,aAAA,OAAO,aAAa,OAAO;AAAA,MAClC;AAMAA,kBAAA,UAAA,YAAA,SAAU,SAAiB,MAAYC,eAAuB;AAE5D,YAAM,UAAU,KAAK,OAAO,UAAU,SAAS,MAAMA,aAAY;AACjE,YAAI,SAAS;AACX,eAAK,WAAW,OAAO;AAAA,QAAA;AAAA,MAE3B;AAMU,kBAAA,UAAA,aAAV,SAAW,SAAe;AACxB,aAAK,WAAW,OAAO;AAAA,MACzB;AAEU,kBAAA,UAAA,aAAV,SAAW,SAAe;AACnB,aAAA,aAAa,KAAK,OAAO;AAAA,MAChC;AAEY,kBAAA,UAAA,eAAZ,SAAa,SAAe;AAC1B,iBAAS,IAAI,GAAG,IAAI,KAAK,aAAa,QAAQ,EAAE,GAAG;AACjD,cAAI,KAAK,aAAa,CAAC,MAAM,SAAS;AAC/B,iBAAA,aAAa,CAAC,IAAI;AAAA,UAAA;AAAA,QACzB;AAAA,MAEJ;AAKW,kBAAA,UAAA,cAAX,SAAY,iBAA2E;AAErF,aAAK,aAAa;AAGX,eAAA,KAAK,aAAa,SAAS,GAAG;AAC9B,eAAA,iBAAiB,KAAK,aAAa,IAAG;AACvC,cAAA,KAAK,mBAAmB,MAAM;AAChC;AAAA,UAAA;AAKF,cAAM,UAAU,KAAK,OAAO,WAAW,KAAK,cAAc;AAG1D,eAAK,OAAO,MAAM,SAAS,KAAK,aAAa;AAAA,QAAA;AAAA,MAKjD;AAqBDD,aAAAA;AAAAA,IAAA,EAAA;AAAA;ACzMgB,MAAME,aAAW,KAAK;AACtB,MAAMC,aAAW,KAAK;AACtB,MAAMpB,cAAY,KAAK;AAQxB,WAAA,KAAKF,IAAW,GAAS;AAChC,WAAA,EAAE,GAAAA,IAAG;EACd;AAMM,WAAU,SAAS,OAAa;AAC7B,WAAA,EAAE,GAAGqB,WAAS,KAAK,GAAG,GAAGC,WAAS,KAAK;EAChD;AAEgB,WAAA,QAAQ,KAAgBtB,IAAW,GAAS;AAC1D,QAAI,IAAIA;AACR,QAAI,IAAI;AACD,WAAA;AAAA,EACT;AAEgB,WAAA,SAAS,KAAgB,GAAY;AACnD,QAAI,IAAI,EAAE;AACV,QAAI,IAAI,EAAE;AACH,WAAA;AAAA,EACT;AAEM,WAAU,SAAS,KAAc;AACrC,QAAI,IAAI;AACR,QAAI,IAAI;AACD,WAAA;AAAA,EACT;AAEM,WAAU,QAAQ,KAAc;AAChC,QAAA,IAAI,CAAC,IAAI;AACT,QAAA,IAAI,CAAC,IAAI;AACN,WAAA;AAAA,EACT;AAEgB,WAAA,SAAS,KAAgB,GAAY;AACnD,QAAI,KAAK,EAAE;AACX,QAAI,KAAK,EAAE;AACJ,WAAA;AAAA,EACT;AAEgB,WAAA,QAAQ,KAAgBM,IAAc,GAAY;AAC5D,QAAA,IAAIA,GAAE,IAAI,EAAE;AACZ,QAAA,IAAIA,GAAE,IAAI,EAAE;AACT,WAAA;AAAA,EACT;AAEgB,WAAA,UAAU,KAAgB,GAAY;AACpD,QAAI,KAAK,EAAE;AACX,QAAI,KAAK,EAAE;AACJ,WAAA;AAAA,EACT;AAEgB,WAAA,QAAQ,KAAgBA,IAAc,GAAY;AAC5D,QAAA,IAAIA,GAAE,IAAI,EAAE;AACZ,QAAA,IAAIA,GAAE,IAAI,EAAE;AACT,WAAA;AAAA,EACT;AAEgB,WAAA,QAAQ,KAAgB,GAAS;AAC/C,QAAI,KAAK;AACT,QAAI,KAAK;AACF,WAAA;AAAA,EACT;AAEgB,WAAA,UAAU,KAAgB,GAAW,GAAY;AAC3D,QAAA,IAAI,IAAI,EAAE;AACV,QAAA,IAAI,IAAI,EAAE;AACP,WAAA;AAAA,EACT;AAEgB,WAAA,cAAc,KAAgB,GAAW,GAAY;AAC/D,QAAA,KAAK,IAAI,EAAE;AACX,QAAA,KAAK,IAAI,EAAE;AACR,WAAA;AAAA,EACT;AAEgB,WAAA,eAAe,KAAgB,GAAW,GAAY;AAChE,QAAA,KAAK,IAAI,EAAE;AACX,QAAA,KAAK,IAAI,EAAE;AACR,WAAA;AAAA,EACT;AAEM,WAAU,aAAa,KAAgB,IAAYC,IAAc,IAAYb,IAAY;AAC7F,QAAI,IAAI,KAAKa,GAAE,IAAI,KAAKb,GAAE;AAC1B,QAAI,IAAI,KAAKa,GAAE,IAAI,KAAKb,GAAE;AACnB,WAAA;AAAA,EACT;AAEgB,WAAA,aAAa,KAAgB,IAAYa,IAAc,IAAYb,IAAc,IAAYuB,IAAY;AACnH,QAAA,IAAI,KAAKV,GAAE,IAAI,KAAKb,GAAE,IAAI,KAAKuB,GAAE;AACjC,QAAA,IAAI,KAAKV,GAAE,IAAI,KAAKb,GAAE,IAAI,KAAKuB,GAAE;AAC9B,WAAA;AAAA,EACT;AAEM,WAAU,oBAAoB,KAAc;AAC1C,QAAA,SAASf,YAAU,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC;AACtD,QAAI,WAAW,GAAG;AAChB,UAAM,YAAY,IAAI;AACtB,UAAI,KAAK;AACT,UAAI,KAAK;AAAA,IAAA;AAEJ,WAAA;AAAA,EACT;AAEM,WAAU,cAAc,KAAc;AACpC,QAAA,SAASA,YAAU,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC;AACtD,QAAI,SAAS,GAAG;AACd,UAAM,YAAY,IAAI;AACtB,UAAI,KAAK;AACT,UAAI,KAAK;AAAA,IAAA;AAEJ,WAAA;AAAA,EACT;AAEgB,WAAA,aAAa,KAAgBI,IAAc,GAAS;AAC5D,QAAAN,KAAI,IAAIM,GAAE;AACV,QAAA,IAAI,CAAC,IAAIA,GAAE;AACjB,QAAI,IAAIN;AACR,QAAI,IAAI;AACD,WAAA;AAAA,EACT;AAEgB,WAAA,aAAa,KAAgB,GAAWM,IAAY;AAC5D,QAAAN,KAAI,CAAC,IAAIM,GAAE;AACX,QAAA,IAAI,IAAIA,GAAE;AAChB,QAAI,IAAIN;AACR,QAAI,IAAI;AACD,WAAA;AAAA,EACT;AAEgB,WAAA,cAAcO,IAAcb,IAAY;AACtD,WAAOa,GAAE,IAAIb,GAAE,IAAIa,GAAE,IAAIb,GAAE;AAAA,EAC7B;AAEgB,WAAA,QAAQa,IAAcb,IAAY;AAChD,WAAOa,GAAE,IAAIb,GAAE,IAAIa,GAAE,IAAIb,GAAE;AAAA,EAC7B;AAMM,WAAU,cAAca,IAAY;AACxC,WAAOA,GAAE,IAAIA,GAAE,IAAIA,GAAE,IAAIA,GAAE;AAAA,EAC7B;AAEgB,WAAA,SAASA,IAAcb,IAAY;AAC3C,QAAA,KAAKa,GAAE,IAAIb,GAAE;AACb,QAAA,KAAKa,GAAE,IAAIb,GAAE;AACnB,WAAOQ,YAAU,KAAK,KAAK,KAAK,EAAE;AAAA,EACpC;AAEgB,WAAA,YAAYK,IAAcb,IAAY;AAC9C,QAAA,KAAKa,GAAE,IAAIb,GAAE;AACb,QAAA,KAAKa,GAAE,IAAIb,GAAE;AACZ,WAAA,KAAK,KAAK,KAAK;AAAA,EACxB;AAMgB,WAAA,YAAY,KAAea,IAAS;AAC9C,QAAA,IAAIe,WAASf,EAAC;AACd,QAAA,IAAIc,WAASd,EAAC;AACX,WAAA;AAAA,EACT;AAEgB,WAAA,QAAQ,KAAgB,GAAaD,IAAY;AAC/D,QAAI,IAAI,EAAE,IAAIA,GAAE,IAAI,EAAE,IAAIA,GAAE;AAC5B,QAAI,IAAI,EAAE,IAAIA,GAAE,IAAI,EAAE,IAAIA,GAAE;AACrB,WAAA;AAAA,EACT;AAEgB,WAAA,UAAU,KAAgB,GAAaA,IAAY;AACjE,QAAMN,KAAI,EAAE,IAAIM,GAAE,IAAI,EAAE,IAAIA,GAAE;AACxB,QAAA,IAAI,CAAC,EAAE,IAAIA,GAAE,IAAI,EAAE,IAAIA,GAAE;AAC/B,QAAI,IAAIN;AACR,QAAI,IAAI;AACD,WAAA;AAAA,EACT;AAEM,WAAU,UAAU,KAAgB,QAAkB,OAAiBM,IAAY;AACvF,QAAM,KAAK,OAAO,IAAIA,GAAE,IAAI,OAAO,IAAIA,GAAE;AACnC,QAAA,KAAK,CAAC,OAAO,IAAIA,GAAE,IAAI,OAAO,IAAIA,GAAE;AAC1C,QAAMN,KAAI,MAAM,IAAI,KAAK,MAAM,IAAI;AACnC,QAAM,IAAI,MAAM,IAAI,KAAK,MAAM,IAAI;AACnC,QAAI,IAAIA;AACR,QAAI,IAAI;AACD,WAAA;AAAA,EACT;AAEgB,WAAA,UAAUA,IAAW,GAAWO,IAAS;AAChD,WAAA,EAAE,GAAG,KAAKP,IAAG,CAAC,GAAG,GAAG,SAASO,EAAC;EACvC;AAEgB,WAAA,cAAc,KAAqBgB,YAAyB;AACtE,QAAA,EAAE,IAAIA,WAAU,EAAE;AAClB,QAAA,EAAE,IAAIA,WAAU,EAAE;AAClB,QAAA,EAAE,IAAIA,WAAU,EAAE;AAClB,QAAA,EAAE,IAAIA,WAAU,EAAE;AACf,WAAA;AAAA,EACT;AAEgB,WAAA,cAAc,KAAgBC,KAAoBlB,IAAY;AAC5E,QAAMN,KAAIwB,IAAG,EAAE,IAAIlB,GAAE,IAAIkB,IAAG,EAAE,IAAIlB,GAAE,IAAIkB,IAAG,EAAE;AAC7C,QAAM,IAAIA,IAAG,EAAE,IAAIlB,GAAE,IAAIkB,IAAG,EAAE,IAAIlB,GAAE,IAAIkB,IAAG,EAAE;AAC7C,QAAI,IAAIxB;AACR,QAAI,IAAI;AACD,WAAA;AAAA,EACT;AAEgB,WAAA,gBAAgB,KAAgBwB,KAAoBlB,IAAY;AAC9E,QAAM,KAAKA,GAAE,IAAIkB,IAAG,EAAE;AACtB,QAAM,KAAKlB,GAAE,IAAIkB,IAAG,EAAE;AACtB,QAAMxB,KAAKwB,IAAG,EAAE,IAAI,KAAKA,IAAG,EAAE,IAAI;AAC5B,QAAA,IAAK,CAACA,IAAG,EAAE,IAAI,KAAKA,IAAG,EAAE,IAAI;AACnC,QAAI,IAAIxB;AACR,QAAI,IAAI;AACD,WAAA;AAAA,EACT;AAEM,WAAU,gBAAgB,KAAgB,MAAsB,IAAoBM,IAAY;AACpG,QAAM,KAAK,KAAK,EAAE,IAAIA,GAAE,IAAI,KAAK,EAAE,IAAIA,GAAE,IAAI,KAAK,EAAE;AACpD,QAAM,KAAK,KAAK,EAAE,IAAIA,GAAE,IAAI,KAAK,EAAE,IAAIA,GAAE,IAAI,KAAK,EAAE;AAC9C,QAAA,KAAK,KAAK,GAAG,EAAE;AACf,QAAA,KAAK,KAAK,GAAG,EAAE;AACrB,QAAMN,KAAI,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,IAAI;AAC3B,QAAA,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,IAAI;AAClC,QAAI,IAAIA;AACR,QAAI,IAAI;AACD,WAAA;AAAA,EACT;AAEgB,WAAA,qBAAqB,KAAqBO,IAAmBb,IAAiB;AACtF,QAAAuB,KAAIV,GAAE,EAAE,IAAIb,GAAE,EAAE,IAAIa,GAAE,EAAE,IAAIb,GAAE,EAAE;AAChC,QAAAE,KAAIW,GAAE,EAAE,IAAIb,GAAE,EAAE,IAAIa,GAAE,EAAE,IAAIb,GAAE,EAAE;AACtC,QAAMM,KAAIO,GAAE,EAAE,KAAKb,GAAE,EAAE,IAAIa,GAAE,EAAE,KAAKA,GAAE,EAAE,KAAKb,GAAE,EAAE,IAAIa,GAAE,EAAE;AACzD,QAAM,IAAI,CAACA,GAAE,EAAE,KAAKb,GAAE,EAAE,IAAIa,GAAE,EAAE,KAAKA,GAAE,EAAE,KAAKb,GAAE,EAAE,IAAIa,GAAE,EAAE;AAC1D,QAAI,EAAE,IAAIU;AACV,QAAI,EAAE,IAAIrB;AACV,QAAI,EAAE,IAAII;AACV,QAAI,EAAE,IAAI;AACH,WAAA;AAAA,EACT;AC5PiB,MAAMqB,aAAW,KAAK;AACtB,MAAMC,aAAW,KAAK;AACtB,MAAMG,eAAa,KAAK;AAuBzC,MAAA;AAAA;AAAA,IAAA,WAAA;AAOE,eAAAC,KAAY,OAAyB;AAC/B,YAAwB,EAAE,gBAAgBA,OAAM;AAC3C,iBAAA,IAAIA,KAAI,KAAK;AAAA,QAAA;AAElB,YAAA,OAAO,UAAU,UAAU;AAC7B,eAAK,SAAS,KAAK;AAAA,QAAA,WACV,OAAO,UAAU,UAAU;AACpC,eAAK,OAAO,KAAK;AAAA,QAAA,OACZ;AACL,eAAK,YAAW;AAAA,QAAA;AAAA,MAClB;AAIQ,WAAA,MAAV,SAAW,OAAa;AACtB,YAAM,MAAM,OAAO,OAAOA,KAAI,SAAS;AACvC,YAAI,SAAS,KAAK;AACX,eAAA;AAAA,MACT;AAEY,WAAA,QAAZ,SAAa,KAAa;AAExB,YAAM,MAAM,OAAO,OAAOA,KAAI,SAAS;AACvC,YAAI,IAAI,IAAI;AACZ,YAAI,IAAI,IAAI;AACL,eAAA;AAAA,MACT;AAEOA,WAAA,WAAP,WAAA;AACE,YAAM,MAAM,OAAO,OAAOA,KAAI,SAAS;AACvC,YAAI,IAAI;AACR,YAAI,IAAI;AACD,eAAA;AAAA,MACT;AAEc,WAAA,UAAd,SAAe,KAAQ;AACrB,YAAI,QAAQ,QAAQ,OAAO,QAAQ,aAAa;AACvC,iBAAA;AAAA,QAAA;AAEF,eAAA,OAAO,SAAS,IAAI,CAAC,KAAK,OAAO,SAAS,IAAI,CAAC;AAAA,MACxD;AAEa,WAAA,SAAb,SAAc,GAAM;AAAA,MAEpB;AAGA,WAAA,UAAA,cAAA,WAAA;AACE,aAAK,IAAI;AACT,aAAK,IAAI;AAAA,MACX;AAEG,WAAA,UAAA,MAAH,SAAI,OAAwB;AACtB,YAAA,OAAO,UAAU,UAAU;AAE7B,eAAK,IAAI,MAAM;AACf,eAAK,IAAI,MAAM;AAAA,QAAA,OAEV;AAGA,eAAA,IAAIL,WAAS,KAAK;AAClB,eAAA,IAAIC,WAAS,KAAK;AAAA,QAAA;AAAA,MAE3B;AAEM,WAAA,UAAA,SAAN,SAAO,OAAe;AAEpB,aAAK,IAAI,MAAM;AACf,aAAK,IAAI,MAAM;AAAA,MACjB;AAGQ,WAAA,UAAA,WAAR,SAAS,OAAa;AAGf,aAAA,IAAID,WAAS,KAAK;AAClB,aAAA,IAAIC,WAAS,KAAK;AAAA,MACzB;AAGA,WAAA,UAAA,WAAA,WAAA;AACE,eAAOG,aAAW,KAAK,GAAG,KAAK,CAAC;AAAA,MAClC;AAGA,WAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC;AAAA,MAChC;AAGA,WAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAAA,MACjC;AAMO,WAAA,MAAP,SAAW,KAAK,GAAC;AAEX,YAAA,OAAO,KAAK,OAAO,GAAG;AAMlB,cAAA,KAAKC,KAAI;AACf,aAAG,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;AAC/B,aAAG,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;AACxB,iBAAA;AAAA,QAEE,WAAA,OAAO,KAAK,OAAO,GAAG;AAE/B,iBAAO,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,QAAA;AAAA,MAExE;AAGO,WAAA,SAAP,SAAc,KAAe,GAAW;AAOhC,YAAA,KAAKA,KAAI;AACf,WAAG,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;AAC/B,WAAG,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;AACxB,eAAA;AAAA,MACT;AAGO,WAAA,UAAP,SAAe,KAAe,GAAY;AAGxC,eAAO,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,MACtE;AAEOA,WAAA,SAAP,SAAc,KAAepB,IAAc,GAAY;AAC/C,YAAAN,KAAI,IAAI,KAAKM,GAAE,IAAI,EAAE,KAAK,IAAI,KAAKA,GAAE,IAAI,EAAE;AAC3C,YAAA,IAAI,IAAI,KAAKA,GAAE,IAAI,EAAE,KAAK,IAAI,KAAKA,GAAE,IAAI,EAAE;AAC1C,eAAA,KAAK,IAAIN,IAAG,CAAC;AAAA,MACtB;AAMO,WAAA,OAAP,SAAY,KAAK,GAAC;AACZ,YAAA,OAAO,KAAK,OAAO,GAAG;AAMlB,cAAA,KAAK0B,KAAI;AACf,aAAG,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;AAC/B,aAAG,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;AACxB,iBAAA;AAAA,QAEE,WAAA,OAAO,KAAK,OAAO,GAAG;AAE/B,iBAAO,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,QAAA;AAAA,MAEzE;AAGO,WAAA,UAAP,SAAe,KAAe,GAAW;AAMjC,YAAA,KAAKA,KAAI;AACf,WAAG,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;AAC/B,WAAG,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;AACxB,eAAA;AAAA,MACT;AAGO,WAAA,WAAP,SAAgB,KAAe,GAAY;AAEzC,eAAO,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,MACvE;AACDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;ACtNgB,MAAM,aAAa,KAAK;AACxB,MAAMf,YAAU,KAAK;AAGrB,MAAMD,SAAOiB,KAAY,GAAG,CAAC;AAQ9C,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,SAAA;AAEE,aAAA,cAAc,KAAK;AAGnB,aAAA,IAAI,KAAK;AAGT,aAAC,IAAG;AAGJ,aAAM,SAAG;AAET,aAAA,KAAK,KAAK;AACV,aAAE,KAAG;AAAA,MAAA;AAGL,aAAA,UAAA,UAAA,WAAA;AACSC,iBAAS,KAAK,WAAW;AACzBA,iBAAS,KAAK,CAAC;AACtB,aAAK,IAAI;AACT,aAAK,SAAS;AACPA,iBAAS,KAAK,EAAE;AACvB,aAAK,KAAK;AAAA,MACZ;AAEY,aAAA,UAAA,eAAZ,SAAaL,KAAkB;AAC7BM,sBAAqBpB,QAAMc,KAAI,KAAK,WAAW;AACxCO,iBAAS,KAAK,GAAGrB,MAAI;AACrBqB,iBAAS,KAAK,IAAIrB,MAAI;AAExB,aAAA,IAAI,KAAK,KAAK,WAAWc,IAAG,EAAE,GAAGA,IAAG,EAAE,CAAC;AAAA,MAC9C;AAEAI,aAAA,UAAA,iBAAA,SAAeI,cAAwBR,KAAkB;AAChDO,iBAAS,KAAK,aAAaC,YAAW;AAE7CF,sBAAqBpB,QAAMc,KAAI,KAAK,WAAW;AACxCO,iBAAS,KAAK,GAAGrB,MAAI;AACrBqB,iBAAS,KAAK,IAAIrB,MAAI;AAAA,MAC/B;AAQAkB,aAAA,UAAA,eAAA,SAAaJ,KAAoB,MAAgB;AAAhB,YAAA,SAAA,QAAA;AAAgB,iBAAA;AAAA,QAAA;AACxCS,oBAAYT,IAAG,IAAI,IAAM,QAAQ,KAAK,KAAK,OAAO,KAAK,CAAC;AACxDU,qBAAaV,IAAG,GAAI,IAAM,MAAO,KAAK,IAAI,MAAM,KAAK,CAAC;AAGtDW,kBAAUX,IAAG,GAAGY,QAAe1B,QAAMc,IAAG,GAAG,KAAK,WAAW,CAAC;AAAA,MACrE;AAOO,aAAA,UAAA,UAAP,SAAQ,OAAa;AAEnB,YAAM,QAAQ,QAAQ,KAAK,WAAW,IAAM,KAAK;AAC1CU,qBAAa,KAAK,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,EAAE;AAC5D,aAAK,KAAK,OAAO,KAAK,KAAK,IAAI,QAAQ,KAAK;AAC5C,aAAK,SAAS;AAAA,MAChB;AAEA,aAAA,UAAA,UAAA,WAAA;AACE,aAAK,KAAK,KAAK;AACfH,iBAAgB,KAAK,IAAI,KAAK,CAAC;AAAA,MACjC;AAKA,aAAA,UAAA,YAAA,WAAA;AACE,YAAM,KAAK,IAAI,KAAK,IAAI,CAACpB,WAAS,CAACA,SAAO;AACrC,aAAA,KAAK,KAAK,KAAK;AACpB,aAAK,KAAK;AAAA,MACZ;AAEG,aAAA,UAAA,MAAH,SAAI,MAAW;AACboB,iBAAgB,KAAK,aAAa,KAAK,WAAW;AAClDA,iBAAgB,KAAK,GAAG,KAAK,CAAC;AAC9B,aAAK,IAAI,KAAK;AACd,aAAK,SAAS,KAAK;AACnBA,iBAAgB,KAAK,IAAI,KAAK,EAAE;AAChC,aAAK,KAAK,KAAK;AAAA,MACjB;AACDH,aAAAA;AAAAA,IAAA,EAAA;AAAA;ACrFD,MAAA;AAAA;AAAA,IAAA,WAAA;AAOcS,eAAAA,WAAA,UAAsBC,WAAiB;AAC7C,YAAwB,EAAE,gBAAgBD,aAAY;AACjD,iBAAA,IAAIA,WAAU,UAAUC,SAAQ;AAAA,QAAA;AAEpC,aAAA,IAAI,KAAK;AACT,aAAA,IAAI,IAAI;AACT,YAAA,OAAO,aAAa,aAAa;AAC9B,eAAA,EAAE,QAAQ,QAAQ;AAAA,QAAA;AAErB,YAAA,OAAOA,cAAa,aAAa;AAC9B,eAAA,EAAE,SAASA,SAAQ;AAAA,QAAA;AAAA,MAC1B;AAGU,iBAAA,QAAZ,SAAad,KAAa;AACxB,YAAM,MAAM,OAAO,OAAOa,WAAU,SAAS;AAC7C,YAAI,IAAI,KAAK,MAAMb,IAAG,CAAC;AACvB,YAAI,IAAI,IAAI,MAAMA,IAAG,CAAC;AACf,eAAA;AAAA,MACT;AAGO,iBAAA,MAAP,SAAW,UAAqBc,WAAa;AAC3C,YAAM,MAAM,OAAO,OAAOD,WAAU,SAAS;AACzC,YAAA,IAAI,KAAK,MAAM,QAAQ;AACvB,YAAA,IAAI,IAAI,MAAMC,SAAQ;AACnB,eAAA;AAAA,MACT;AAEOD,iBAAA,WAAP,WAAA;AACE,YAAM,MAAM,OAAO,OAAOA,WAAU,SAAS;AACzC,YAAA,IAAI,KAAK;AACT,YAAA,IAAI,IAAI;AACL,eAAA;AAAA,MACT;AAGA,iBAAA,UAAA,cAAA,WAAA;AACE,aAAK,EAAE;AACP,aAAK,EAAE;MACT;AAMAA,iBAAA,UAAA,MAAA,SAAI9B,IAAQb,IAAO;AACb,YAAA,OAAOA,OAAM,aAAa;AACvB,eAAA,EAAE,IAAIa,GAAE,CAAC;AACT,eAAA,EAAE,IAAIA,GAAE,CAAC;AAAA,QAAA,OACT;AACA,eAAA,EAAE,IAAIA,EAAC;AACP,eAAA,EAAE,IAAIb,EAAC;AAAA,QAAA;AAAA,MAEhB;AAGA2C,iBAAA,UAAA,SAAA,SAAO,UAAqBC,WAAgB;AACrC,aAAA,EAAE,QAAQ,QAAQ;AAClB,aAAA,EAAE,SAASA,SAAQ;AAAA,MAC1B;AAEY,iBAAA,UAAA,eAAZ,SAAad,KAAkB;AACxB,aAAA,EAAE,QAAQA,IAAG,CAAC;AACd,aAAA,EAAE,OAAOA,IAAG,CAAC;AAAA,MACpB;AAEc,iBAAA,UAAd,SAAe,KAAQ;AACrB,YAAI,QAAQ,QAAQ,OAAO,QAAQ,aAAa;AACvC,iBAAA;AAAA,QAAA;AAEF,eAAA,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,QAAQ,IAAI,CAAC;AAAA,MACjD;AAEa,iBAAA,SAAb,SAAc,GAAM;AAAA,MAEpB;AAMO,iBAAA,MAAP,SAAWjB,IAAGb,IAAC;AACT,YAAA,MAAM,QAAQA,EAAC,GAAG;AAGpB,cAAM,MAAM,CAAA;AACZ,mBAAS,IAAI,GAAG,IAAIA,GAAE,QAAQ,KAAK;AACjC,gBAAI,CAAC,IAAI2C,WAAU,IAAI9B,IAAGb,GAAE,CAAC,CAAC;AAAA,UAAA;AAEzB,iBAAA;AAAA,QAEE,WAAA,OAAOA,MAAK,OAAOA,IAAG;AACxB2C,iBAAAA,WAAU,QAAQ9B,IAAGb,EAAC;AAAA,QAEpB,WAAA,OAAOA,MAAK,OAAOA,IAAG;AACxB2C,iBAAAA,WAAU,MAAM9B,IAAGb,EAAC;AAAA,QAAA;AAAA,MAE/B;AAIO,iBAAA,SAAP,SAAca,IAAmBb,IAAC;AAEhC,YAAM,MAAM,CAAA;AACZ,iBAAS,IAAI,GAAG,IAAIA,GAAE,QAAQ,KAAK;AACjC,cAAI,CAAC,IAAI2C,WAAU,IAAI9B,IAAGb,GAAE,CAAC,CAAC;AAAA,QAAA;AAEzB,eAAA;AAAA,MACT;AAGY,iBAAA,QAAZ,SAAaa,IAAiB;AAG5B,eAAO,SAASb,IAAY;AACnB2C,iBAAAA,WAAU,IAAI9B,IAAGb,EAAC;AAAA,QAC3B;AAAA,MACF;AAEO,iBAAA,UAAP,SAAea,IAAmBb,IAAY;AAG5C,YAAMM,KAAKO,GAAE,EAAE,IAAIb,GAAE,IAAIa,GAAE,EAAE,IAAIb,GAAE,IAAKa,GAAE,EAAE;AAC5C,YAAM,IAAKA,GAAE,EAAE,IAAIb,GAAE,IAAIa,GAAE,EAAE,IAAIb,GAAE,IAAKa,GAAE,EAAE;AACrC,eAAA,KAAK,IAAIP,IAAG,CAAC;AAAA,MACtB;AAEO,iBAAA,QAAP,SAAaO,IAAmBb,IAAiB;AAKzC,YAAA8B,MAAKa,WAAU;AACrB,QAAAb,IAAG,IAAI,IAAI,OAAOjB,GAAE,GAAGb,GAAE,CAAC;AACvB,QAAA8B,IAAA,IAAI,KAAK,IAAI,IAAI,QAAQjB,GAAE,GAAGb,GAAE,CAAC,GAAGa,GAAE,CAAC;AACnC,eAAAiB;AAAA,MACT;AAIO,iBAAA,OAAP,SAAYjB,IAAGb,IAAC;AACV,YAAA,OAAOA,MAAK,OAAOA,IAAG;AACjB2C,iBAAAA,WAAU,SAAS9B,IAAGb,EAAC;AAAA,QAErB,WAAA,OAAOA,MAAK,OAAOA,IAAG;AACxB2C,iBAAAA,WAAU,OAAO9B,IAAGb,EAAC;AAAA,QAAA;AAAA,MAEhC;AAEO,iBAAA,WAAP,SAAgBa,IAAmBb,IAAY;AAG7C,YAAM,KAAKA,GAAE,IAAIa,GAAE,EAAE;AACrB,YAAM,KAAKb,GAAE,IAAIa,GAAE,EAAE;AACrB,YAAMP,KAAKO,GAAE,EAAE,IAAI,KAAKA,GAAE,EAAE,IAAI;AAC1B,YAAA,IAAK,CAACA,GAAE,EAAE,IAAI,KAAKA,GAAE,EAAE,IAAI;AAC1B,eAAA,KAAK,IAAIP,IAAG,CAAC;AAAA,MACtB;AAEO,iBAAA,SAAP,SAAcO,IAAmBb,IAAiB;AAK1C,YAAA8B,MAAKa,WAAU;AAClB,QAAAb,IAAA,EAAE,OAAO,IAAI,QAAQjB,GAAE,GAAGb,GAAE,CAAC,CAAC;AACjC,QAAA8B,IAAG,EAAE,QAAQ,IAAI,SAASjB,GAAE,GAAG,KAAK,IAAIb,GAAE,GAAGa,GAAE,CAAC,CAAC,CAAC;AAC3C,eAAAiB;AAAA,MACT;AACDa,aAAAA;AAAAA,IAAA,EAAA;AAAA;ACxMD,MAAA;AAAA;AAAA,IAAA,2BAAA;AAAA,eAAAE,YAAA;AAEE,aAAA,IAAI,KAAK;AAGT,aAAC,IAAG;AAAA,MAAA;AACLA,aAAAA;AAAAA,IAAA,EAAA;AAAA;ACJgB,MAAM,WAAW,KAAK;AACtB,MAAM,WAAW,KAAK;AAGvC,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,YAAA;AAEE,aAAA,IAAI,KAAK;AAGT,aAAC,IAAG;AAAA,MAAA;AAGJA,gBAAA,UAAA,eAAA,SAAahB,KAAoB,GAAY;AAG3C,QAAAA,IAAG,EAAE,IAAI,SAAS,KAAK,CAAC;AACxB,QAAAA,IAAG,EAAE,IAAI,SAAS,KAAK,CAAC;AACxB,QAAAA,IAAG,EAAE,IAAI,KAAK,EAAE,KAAKA,IAAG,EAAE,IAAI,EAAE,IAAIA,IAAG,EAAE,IAAI,EAAE;AAC/C,QAAAA,IAAG,EAAE,IAAI,KAAK,EAAE,KAAKA,IAAG,EAAE,IAAI,EAAE,IAAIA,IAAG,EAAE,IAAI,EAAE;AACxC,eAAAA;AAAA,MACT;AACDgB,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAEK,WAAU,aAAahB,KAAoB,GAAcP,IAAcV,IAAS;AAGjF,IAAAiB,IAAA,EAAE,IAAI,SAASjB,EAAC;AAChB,IAAAiB,IAAA,EAAE,IAAI,SAASjB,EAAC;AACnB,IAAAiB,IAAG,EAAE,IAAIP,GAAE,KAAKO,IAAG,EAAE,IAAI,EAAE,IAAIA,IAAG,EAAE,IAAI,EAAE;AAC1C,IAAAA,IAAG,EAAE,IAAIP,GAAE,KAAKO,IAAG,EAAE,IAAI,EAAE,IAAIA,IAAG,EAAE,IAAI,EAAE;AACnC,WAAAA;AAAA,EACT;ACrBA,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAiB,SAAA;AAWE,aAAK,QAAU;AAGf,aAAO,UAAwB;;AAKxBA,aAAO,UAAd,SAAe,KAAQ;AACrB,YAAI,QAAQ,QAAQ,OAAO,QAAQ,aAAa;AACvC,iBAAA;AAAA,QAAA;AAET,eAAO,OAAO,IAAI,WAAW,YAAY,OAAO,IAAI,aAAa;AAAA,MACnE;AAgEDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;ACzFgB,MAAM,oBAAoB,IAAI;AAC9B,MAAM,oBAAoB,IAAI;AAC9B,MAAM,eAAed,KAAY,GAAG,CAAC;AA4CrC,MAAM,oBAAgC;AAAA,IACrD,UAAW;AAAA,IACX,UAAW;AAAA,IACX,aAAc;AAAA,IACd,SAAU;AAAA,IACV,UAAW;AAAA,IAEX,kBAAmB;AAAA,IACnB,oBAAqB;AAAA,IACrB,gBAAiB;AAAA;AAMnB,MAAA;AAAA;AAAA,IAAA,2BAAA;AAKce,eAAAA,cAAA,SAAkB,YAAkB;AACzC,aAAA,OAAO,IAAI;AAChB,aAAK,UAAU;AACf,aAAK,aAAa;AACb,aAAA;AAAA,MAAA;AAERA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AASD,MAAA;AAAA;AAAA,IAAA,WAAA;AA0BEC,eAAAA,SAAY,MAAY,OAAQ,KAAI;AATpC,aAAK,QAAU;AAGf,aAAO,UAAwB;AAO7B,YAAI,MAAM,OAAO;AACT,gBAAA;AACN,kBAAQ,MAAM;AAAA,QAAA,WAEL,OAAO,QAAQ,UAAU;AAC5B,gBAAA,EAAC,SAAU;;AAGb,cAAA,QAAQ,KAAK,iBAAiB;AAEpC,aAAK,SAAS;AAEd,aAAK,aAAa,IAAI;AACtB,aAAK,gBAAgB,IAAI;AACzB,aAAK,YAAY,IAAI;AACrB,aAAK,aAAa,IAAI;AAEtB,aAAK,qBAAqB,IAAI;AAC9B,aAAK,uBAAuB,IAAI;AAChC,aAAK,mBAAmB,IAAI;AAG5B,aAAK,UAAU;AAEf,aAAK,SAAS;AAEd,aAAK,YAAY,CAAA;AACjB,aAAK,eAAe;AAId,YAAA,aAAa,KAAK,QAAQ;AAChC,iBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,eAAK,UAAU,CAAC,IAAI,IAAI,aAAa,MAAM,CAAC;AAAA,QAAA;AAG9C,aAAK,aAAa,IAAI;AAAA,MAAA;AAIxB,eAAA,UAAA,SAAA,WAAA;AACQ,YAAA,OAAO,KAAK;AACZ,YAAA,aAAa,KAAK,QAAQ;AAChC,aAAK,eAAe,UAAU;AAC1B,YAAA,KAAK,QAAQ,QAAQ;AACvB,eAAK,QAAQ;;AAET,YAAA,aAAa,KAAK,QAAQ;AAChC,iBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,eAAK,UAAU,CAAC,IAAI,IAAI,aAAa,MAAM,CAAC;AAAA,QAAA;AAEzC,aAAA,cAAc,YAAY,KAAK,IAAI;AACxC,aAAK,cAAa;AAAA,MACpB;AAGA,eAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,UAAU,KAAK;AAAA,UACf,aAAa,KAAK;AAAA,UAClB,SAAS,KAAK;AAAA,UACd,UAAU,KAAK;AAAA,UAEf,kBAAkB,KAAK;AAAA,UACvB,oBAAoB,KAAK;AAAA,UACzB,gBAAgB,KAAK;AAAA,UAErB,OAAO,KAAK;AAAA;MAEhB;AAGOA,eAAA,eAAP,SAAoB,MAAW,MAAW,SAAY;AACpD,YAAM,QAAQ,QAAQ,OAAO,KAAK,KAAK;AACvC,YAAM,UAAU,SAAS,IAAIA,SAAQ,MAAM,OAAO,IAAI;AAC/C,eAAA;AAAA,MACT;AAMA,eAAA,UAAA,UAAA,WAAA;AACE,eAAO,KAAK,QAAQ;AAAA,MACtB;AAOA,eAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAMA,eAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKS,eAAA,UAAA,YAAT,SAAU,QAAe;AACnB,YAAA,UAAU,KAAK,YAAY;AACxB,eAAA,OAAO,SAAS,IAAI;AACzB,eAAK,aAAa;AAAA,QAAA;AAAA,MAEtB;AAaA,eAAA,UAAA,cAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKW,eAAA,UAAA,cAAX,SAAY,MAAa;AACvB,aAAK,aAAa;AAAA,MACpB;AAMA,eAAA,UAAA,UAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,eAAA,UAAA,UAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,eAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAMU,eAAA,UAAA,aAAV,SAAW,SAAe;AAExB,aAAK,YAAY;AAAA,MACnB;AAKA,eAAA,UAAA,cAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAMW,eAAA,UAAA,cAAX,SAAY,UAAgB;AAC1B,aAAK,aAAa;AAAA,MACpB;AAKA,eAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAMc,eAAA,UAAA,iBAAd,SAAe,aAAmB;AAChC,aAAK,gBAAgB;AAAA,MACvB;AAKS,eAAA,UAAA,YAAT,SAAU,GAAY;AACpB,eAAO,KAAK,QAAQ,UAAU,KAAK,OAAO,gBAAgB,CAAC;AAAA,MAC7D;AAKAA,eAAA,UAAA,UAAA,SAAQ5C,SAAuBD,QAAqB,YAAkB;AAC7D,eAAA,KAAK,QAAQ,QAAQC,SAAQD,QAAO,KAAK,OAAO,gBAAgB,UAAU;AAAA,MACnF;AAOW,eAAA,UAAA,cAAX,SAAY,UAAkB;AAC5B,aAAK,QAAQ,YAAY,UAAU,KAAK,SAAS;AAAA,MACnD;AAMO,eAAA,UAAA,UAAP,SAAQ,YAAkB;AAEjB,eAAA,KAAK,UAAU,UAAU,EAAE;AAAA,MACpC;AAKA6C,eAAA,UAAA,gBAAA,SAAc,YAAwBnB,KAAkB;AAIjD,aAAA,eAAe,KAAK,QAAQ,cAAa;AAE9C,iBAAS,IAAI,GAAG,IAAI,KAAK,cAAc,EAAE,GAAG;AACpC,cAAA,QAAQ,KAAK,UAAU,CAAC;AAC9B,eAAK,QAAQ,YAAY,MAAM,MAAMA,KAAI,CAAC;AAC1C,gBAAM,UAAU,WAAW,YAAY,MAAM,MAAM,KAAK;AAAA,QAAA;AAAA,MAE5D;AAEc,eAAA,UAAA,iBAAd,SAAe,YAAsB;AAEnC,iBAAS,IAAI,GAAG,IAAI,KAAK,cAAc,EAAE,GAAG;AACpC,cAAA,QAAQ,KAAK,UAAU,CAAC;AACnB,qBAAA,aAAa,MAAM,OAAO;AACrC,gBAAM,UAAU;AAAA,QAAA;AAGlB,aAAK,eAAe;AAAA,MACtB;AAMAmB,eAAA,UAAA,cAAA,SAAY,YAAwB,KAAqB,KAAmB;AAC1E,iBAAS,IAAI,GAAG,IAAI,KAAK,cAAc,EAAE,GAAG;AACpC,cAAA,QAAQ,KAAK,UAAU,CAAC;AAG9B,eAAK,QAAQ,YAAY,mBAAmB,KAAK,MAAM,UAAU;AACjE,eAAK,QAAQ,YAAY,mBAAmB,KAAK,MAAM,UAAU;AAE3D,gBAAA,KAAK,QAAQ,mBAAmB,iBAAiB;AAEvDC,kBAAe,cAAc,IAAI,GAAG,IAAI,CAAC;AAEzC,qBAAW,UAAU,MAAM,SAAS,MAAM,MAAM,YAAY;AAAA,QAAA;AAAA,MAEhE;AAOa,eAAA,UAAA,gBAAb,SAAc,QAAsE;AAClF,aAAK,qBAAqB,OAAO;AACjC,aAAK,uBAAuB,OAAO;AACnC,aAAK,mBAAmB,OAAO;AAC/B,aAAK,SAAQ;AAAA,MACf;AAEA,eAAA,UAAA,sBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEmB,eAAA,UAAA,sBAAnB,SAAoB,YAAkB;AACpC,aAAK,qBAAqB;AAC1B,aAAK,SAAQ;AAAA,MACf;AAEA,eAAA,UAAA,wBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEqB,eAAA,UAAA,wBAArB,SAAsB,cAAoB;AACxC,aAAK,uBAAuB;AAC5B,aAAK,SAAQ;AAAA,MACf;AAEA,eAAA,UAAA,oBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEiB,eAAA,UAAA,oBAAjB,SAAkB,UAAgB;AAChC,aAAK,mBAAmB;AACxB,aAAK,SAAQ;AAAA,MACf;AAMA,eAAA,UAAA,WAAA,WAAA;AACM,YAAA,KAAK,UAAU,MAAM;AACvB;AAAA,QAAA;AAIE,YAAA,OAAO,KAAK,OAAO;AACvB,eAAO,MAAM;AACX,cAAM,UAAU,KAAK;AACf,cAAA,WAAW,QAAQ;AACnB,cAAA,WAAW,QAAQ;AACrB,cAAA,YAAY,QAAQ,YAAY,MAAM;AACxC,oBAAQ,iBAAgB;AAAA,UAAA;AAG1B,iBAAO,KAAK;AAAA,QAAA;AAGR,YAAA,QAAQ,KAAK,OAAO;AAE1B,YAAI,SAAS,MAAM;AACjB;AAAA,QAAA;AAIF,YAAM,aAAa,MAAM;AACzB,iBAAS,IAAI,GAAG,IAAI,KAAK,cAAc,EAAE,GAAG;AAC1C,qBAAW,WAAW,KAAK,UAAU,CAAC,EAAE,OAAO;AAAA,QAAA;AAAA,MAEnD;AAYa,eAAA,UAAA,gBAAb,SAAc,MAAa;AAEzB,YAAI,KAAK,uBAAuB,KAAK,sBAAsB,KAAK,uBAAuB,GAAG;AACxF,iBAAO,KAAK,qBAAqB;AAAA,QAAA;AAGnC,YAAM,YAAY,KAAK,mBAAmB,KAAK,0BAA0B;AACzE,YAAM,YAAY,KAAK,uBAAuB,KAAK,sBAAsB;AACzE,YAAM,UAAU,YAAY;AACrB,eAAA;AAAA,MACT;AACDD,aAAAA;AAAAA,IAAA,EAAA;AAAA;ACncgB,MAAM,SAAS;AACf,MAAM,YAAY;AAClB,MAAM,UAAU;AAEhB,MAAM,YAAYhB,KAAY,GAAG,CAAC;AAClC,MAAM,cAAcA,KAAY,GAAG,CAAC;AACpC,MAAM,QAAQA,KAAY,GAAG,CAAC;AAC9B,MAAMjB,SAAOiB,KAAY,GAAG,CAAC;AAC7B,MAAMH,OAAKqB,UAAiB,GAAG,GAAG,CAAC;AAgEnC,MAAM,iBAA0B;AAAA,IAC/C,MAAO;AAAA,IACP,UAAW,KAAK,KAAM;AAAA,IACtB,OAAQ;AAAA,IAER,gBAAiB,KAAK,KAAM;AAAA,IAC5B,iBAAkB;AAAA,IAElB,eAAgB;AAAA,IAChB,gBAAiB;AAAA,IAEjB,eAAgB;AAAA,IAChB,QAAS;AAAA,IACT,cAAe;AAAA,IAEf,YAAa;AAAA,IACb,OAAQ;AAAA,IACR,QAAS;AAAA,IAET,UAAW;AAAA;AAoBb,MAAA;AAAA;AAAA,IAAA,WAAA;AAoDcC,eAAAA,MAAA,OAAc,KAAY;AANtC,aAAK,QAAU;AAGf,aAAO,UAAwB;AAIvB,cAAA,QAAQ,KAAK,cAAc;AASjC,aAAK,UAAU;AAEf,aAAK,cAAc,IAAI;AACvB,aAAK,kBAAkB,IAAI;AAC3B,aAAK,eAAe,IAAI;AACxB,aAAK,sBAAsB,IAAI;AAC/B,aAAK,eAAe,IAAI;AAExB,aAAK,eAAe;AACpB,aAAK,YAAY;AAEjB,aAAK,aAAa,IAAI;AACtB,aAAK,SAAS,IAAI;AAEd,YAAA,KAAK,UAAU,SAAS;AAC1B,eAAK,SAAS;AACd,eAAK,YAAY;AAAA,QAAA,OACZ;AACL,eAAK,SAAS;AACd,eAAK,YAAY;AAAA,QAAA;AAInB,aAAK,MAAM;AACX,aAAK,SAAS;AAGT,aAAA,OAAO,UAAU;AACtB,aAAK,KAAK,EAAE,QAAQ,IAAI,QAAQ;AAChC,aAAK,KAAK,EAAE,SAAS,IAAI,KAAK;AAGzB,aAAA,UAAU,IAAI;AACd,aAAA,QAAQ,aAAa,KAAK,IAAI;AAG9B,aAAA,aAAa,IAAI;AACjB,aAAA,aAAa,IAAI;AAEjB,aAAA,UAAU,KAAK;AACpB,aAAK,WAAW;AAEhB,aAAK,mBAAmB,KAAK,MAAM,IAAI,cAAc;AACrD,aAAK,oBAAoB,IAAI;AAE7B,aAAK,kBAAkB,IAAI;AAC3B,aAAK,mBAAmB,IAAI;AAC5B,aAAK,iBAAiB,IAAI;AAE1B,aAAK,cAAc;AAEnB,aAAK,cAAc;AACnB,aAAK,gBAAgB;AACrB,aAAK,gBAAgB;AAErB,aAAK,SAAS;AACd,aAAK,SAAS;AAEd,aAAK,cAAc;AAAA,MAAA;AAIrB,YAAA,UAAA,aAAA,WAAA;AACE,YAAM,WAAW,CAAA;AACjB,iBAAS,IAAI,KAAK,eAAe,GAAG,IAAI,EAAE,QAAQ;AAChD,mBAAS,KAAK,CAAC;AAAA,QAAA;AAEV,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UACX,QAAQ,KAAK;AAAA,UACb,UAAU,KAAK,KAAK;AAAA,UACpB,OAAO,KAAK,KAAK,EAAE,SAAU;AAAA,UAC7B,gBAAgB,KAAK;AAAA,UACrB,iBAAiB,KAAK;AAAA,UACtB;AAAA;MAEJ;AAGOA,YAAA,eAAP,SAAoB,MAAW,OAAY,SAAY;AACrD,YAAM,OAAO,IAAIA,MAAK,OAAO,IAAI;AAEjC,YAAI,KAAK,UAAU;AACjB,mBAAS,IAAI,KAAK,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAClD,gBAAM,UAAU,QAAQ,SAAS,KAAK,SAAS,CAAC,GAAG,IAAI;AACvD,iBAAK,YAAY,OAAO;AAAA,UAAA;AAAA,QAC1B;AAEK,eAAA;AAAA,MACT;AAEA,YAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK,WAAW,KAAK,QAAQ,SAAA,IAAa,OAAO;AAAA,MAC1D;AAEA,YAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEA,YAAA,UAAA,UAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEW,YAAA,UAAA,cAAX,SAAY,MAAS;AACnB,aAAK,aAAa;AAAA,MACpB;AAEA,YAAA,UAAA,cAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEA,YAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEA,YAAA,UAAA,eAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAMA,YAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEA,YAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK,UAAU;AAAA,MACxB;AAEA,YAAA,UAAA,YAAA,WAAA;AACE,eAAO,KAAK,UAAU;AAAA,MACxB;AAEA,YAAA,UAAA,cAAA,WAAA;AACE,eAAO,KAAK,UAAU;AAAA,MACxB;AAKA,YAAA,UAAA,YAAA,WAAA;AACE,aAAK,QAAQ,MAAM;AACZ,eAAA;AAAA,MACT;AAEA,YAAA,UAAA,aAAA,WAAA;AACE,aAAK,QAAQ,OAAO;AACb,eAAA;AAAA,MACT;AAEA,YAAA,UAAA,eAAA,WAAA;AACE,aAAK,QAAQ,SAAS;AACf,eAAA;AAAA,MACT;AAKA,YAAA,UAAA,UAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAMO,YAAA,UAAA,UAAP,SAAQ,MAAc;AAIhB,YAAA,KAAK,mBAAmB,MAAM;AAChC;AAAA,QAAA;AAGE,YAAA,KAAK,UAAU,MAAM;AACvB;AAAA,QAAA;AAGF,aAAK,SAAS;AAEd,aAAK,cAAa;AAEd,YAAA,KAAK,UAAU,QAAQ;AACzB,eAAK,iBAAiB;AACtB,eAAK,oBAAoB;AACzB,eAAK,QAAQ;AACb,eAAK,oBAAmB;AAAA,QAAA;AAG1B,aAAK,SAAS,IAAI;AAElB,aAAK,QAAQ;AACb,aAAK,WAAW;AAGhB,YAAI,KAAK,KAAK;AACd,eAAO,IAAI;AACT,cAAM,MAAM;AACZ,eAAK,GAAG;AACH,eAAA,QAAQ,eAAe,IAAI,OAAO;AAAA,QAAA;AAEzC,aAAK,gBAAgB;AAGf,YAAA,aAAa,KAAK,QAAQ;AAChC,iBAAS,IAAI,KAAK,eAAe,GAAG,IAAI,EAAE,QAAQ;AAChD,mBAAS,IAAI,GAAG,IAAI,EAAE,cAAc,EAAE,GAAG;AACvC,uBAAW,WAAW,EAAE,UAAU,CAAC,EAAE,OAAO;AAAA,UAAA;AAAA,QAC9C;AAAA,MAEJ;AAEA,YAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKS,YAAA,UAAA,YAAT,SAAU,MAAa;AAChB,aAAA,eAAe,CAAC,CAAC;AAAA,MACxB;AAEA,YAAA,UAAA,oBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEkB,YAAA,UAAA,qBAAlB,SAAmB,MAAa;AACzB,aAAA,kBAAkB,CAAC,CAAC;AACrB,YAAA,KAAK,mBAAmB,OAAO;AACjC,eAAK,SAAS,IAAI;AAAA,QAAA;AAAA,MAEtB;AAEA,YAAA,UAAA,UAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAOQ,YAAA,UAAA,WAAR,SAAS,MAAa;AACpB,YAAI,MAAM;AACR,eAAK,cAAc;AACnB,eAAK,cAAc;AAAA,QAAA,OACd;AACL,eAAK,cAAc;AACnB,eAAK,cAAc;AACnB,eAAK,iBAAiB;AACtB,eAAK,oBAAoB;AACzB,eAAK,QAAQ;AACb,eAAK,WAAW;AAAA,QAAA;AAAA,MAEpB;AAEA,YAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAeS,YAAA,UAAA,YAAT,SAAU,MAAa;AAGjB,YAAA,QAAQ,KAAK,cAAc;AAC7B;AAAA,QAAA;AAGG,aAAA,eAAe,CAAC,CAAC;AAEtB,YAAI,KAAK,cAAc;AAEf,cAAA,aAAa,KAAK,QAAQ;AAChC,mBAAS,IAAI,KAAK,eAAe,GAAG,IAAI,EAAE,QAAQ;AAC9C,cAAA,cAAc,YAAY,KAAK,IAAI;AAAA,UAAA;AAGzC,eAAK,QAAQ,eAAe;AAAA,QAAA,OACrB;AAEC,cAAA,aAAa,KAAK,QAAQ;AAChC,mBAAS,IAAI,KAAK,eAAe,GAAG,IAAI,EAAE,QAAQ;AAChD,cAAE,eAAe,UAAU;AAAA,UAAA;AAI7B,cAAI,KAAK,KAAK;AACd,iBAAO,IAAI;AACT,gBAAM,MAAM;AACZ,iBAAK,GAAG;AACH,iBAAA,QAAQ,eAAe,IAAI,OAAO;AAAA,UAAA;AAEzC,eAAK,gBAAgB;AAAA,QAAA;AAAA,MAEzB;AAEA,YAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKgB,YAAA,UAAA,mBAAhB,SAAiB,MAAa;AACxB,YAAA,KAAK,uBAAuB,MAAM;AACpC;AAAA,QAAA;AAGG,aAAA,sBAAsB,CAAC,CAAC;AAE7B,aAAK,oBAAoB;AAEzB,aAAK,cAAa;AAAA,MACpB;AAKA,YAAA,UAAA,eAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAUAA,YAAA,UAAA,eAAA,SAAa,UAAqB,OAAa;AAEzC,YAAA,KAAK,mBAAmB,MAAM;AAChC;AAAA,QAAA;AAGG,aAAA,KAAK,OAAO,UAAU,KAAK;AAC3B,aAAA,QAAQ,aAAa,KAAK,IAAI;AAE7B,YAAA,aAAa,KAAK,QAAQ;AAChC,iBAAS,IAAI,KAAK,eAAe,GAAG,IAAI,EAAE,QAAQ;AAChD,YAAE,YAAY,YAAY,KAAK,MAAM,KAAK,IAAI;AAAA,QAAA;AAEhD,aAAK,SAAS,IAAI;AAAA,MACpB;AAEA,YAAA,UAAA,uBAAA,WAAA;AACE,aAAK,QAAQ,aAAa,KAAK,MAAM,CAAC;AAAA,MACxC;AAKA,YAAA,UAAA,sBAAA,WAAA;AACO,aAAA,QAAQ,aAAatB,MAAI,CAAC;AAEzB,YAAA,aAAa,KAAK,QAAQ;AAChC,iBAAS,IAAI,KAAK,eAAe,GAAG,IAAI,EAAE,QAAQ;AAChD,YAAE,YAAY,YAAYA,MAAI,KAAK,IAAI;AAAA,QAAA;AAAA,MAE3C;AAKO,YAAA,UAAA,UAAP,SAAQ,OAAa;AAEd,aAAA,QAAQ,QAAQ,KAAK;AAC1BO,iBAAgB,KAAK,QAAQ,GAAG,KAAK,QAAQ,EAAE;AAC1C,aAAA,QAAQ,IAAI,KAAK,QAAQ;AAC9B,aAAK,QAAQ,aAAa,KAAK,MAAM,CAAC;AAAA,MACxC;AAKA,YAAA,UAAA,cAAA,WAAA;AACE,eAAO,KAAK,KAAK;AAAA,MACnB;AAEW,YAAA,UAAA,cAAX,SAAY,GAAY;AACtB,aAAK,aAAa,GAAG,KAAK,QAAQ,CAAC;AAAA,MACrC;AAKA,YAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK,QAAQ;AAAA,MACtB;AAEQ,YAAA,UAAA,WAAR,SAAS,OAAa;AACpB,aAAK,aAAa,KAAK,KAAK,GAAG,KAAK;AAAA,MACtC;AAKA,YAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK,QAAQ;AAAA,MACtB;AAKA,YAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK,QAAQ;AAAA,MACtB;AAOA,YAAA,UAAA,oBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAO+B,YAAA,UAAA,kCAA/B,SAAgC,YAAqB;AACnD,YAAMC,eAAc,KAAK,IAAI,YAAY,KAAK,QAAQ,CAAC;AAChD,eAAA,KAAK,IAAI,KAAK,kBAAkB,KAAK,aAAa,KAAK,mBAC5DA,YAAW,CAAC;AAAA,MAChB;AAO+B,YAAA,UAAA,kCAA/B,SAAgC,YAAqB;AACnD,eAAO,KAAK,gCAAgC,KAAK,cAAc,UAAU,CAAC;AAAA,MAC5E;AAOiB,YAAA,UAAA,oBAAjB,SAAkB1B,IAAY;AACxB,YAAA,KAAK,UAAU,QAAQ;AACzB;AAAA,QAAA;AAEF,YAAI,KAAK,IAAIA,IAAGA,EAAC,IAAI,GAAK;AACxB,eAAK,SAAS,IAAI;AAAA,QAAA;AAEf,aAAA,iBAAiB,QAAQA,EAAC;AAAA,MACjC;AAOA,YAAA,UAAA,qBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAOkB,YAAA,UAAA,qBAAlB,SAAmB,GAAS;AACtB,YAAA,KAAK,UAAU,QAAQ;AACzB;AAAA,QAAA;AAEE,YAAA,IAAI,IAAI,GAAK;AACf,eAAK,SAAS,IAAI;AAAA,QAAA;AAEpB,aAAK,oBAAoB;AAAA,MAC3B;AAEA,YAAA,UAAA,mBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEgB,YAAA,UAAA,mBAAhB,SAAiB,eAAqB;AACpC,aAAK,kBAAkB;AAAA,MACzB;AAEA,YAAA,UAAA,oBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEiB,YAAA,UAAA,oBAAjB,SAAkB,gBAAsB;AACtC,aAAK,mBAAmB;AAAA,MAC1B;AAEA,YAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKe,YAAA,UAAA,kBAAf,SAAgB,OAAa;AAC3B,aAAK,iBAAiB;AAAA,MACxB;AAOA,YAAA,UAAA,UAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAOA,YAAA,UAAA,aAAA,WAAA;AACS,eAAA,KAAK,MAAM,KAAK,SACnB,KAAK,IAAI,KAAK,QAAQ,aAAa,KAAK,QAAQ,WAAW;AAAA,MACjE;AAKW,YAAA,UAAA,cAAX,SAAY,MAAc;AACxB,aAAK,OAAO,KAAK;AACZ,aAAA,IAAI,KAAK;AACdyB,iBAAgB,KAAK,QAAQ,KAAK,QAAQ,WAAW;AAAA,MACvD;AAOA,YAAA,UAAA,gBAAA,WAAA;AAEE,aAAK,SAAS;AACd,aAAK,YAAY;AACjB,aAAK,MAAM;AACX,aAAK,SAAS;AACPF,iBAAS,KAAK,QAAQ,WAAW;AAGxC,YAAI,KAAK,SAAA,KAAc,KAAK,eAAe;AACzCE,mBAAgB,KAAK,QAAQ,IAAI,KAAK,KAAK,CAAC;AAC5CA,mBAAgB,KAAK,QAAQ,GAAG,KAAK,KAAK,CAAC;AACtC,eAAA,QAAQ,KAAK,KAAK,QAAQ;AAC/B;AAAA,QAAA;AAMFF,iBAAgB,WAAW;AAC3B,iBAAS,IAAI,KAAK,eAAe,GAAG,IAAI,EAAE,QAAQ;AAC5C,cAAA,EAAE,aAAa,GAAK;AACtB;AAAA,UAAA;AAGF,cAAM,WAAqB;AAAA,YACzB,MAAM;AAAA,YACN,QAAQF,KAAY,GAAG,CAAC;AAAA,YACxB,GAAG;AAAA;AAEL,YAAE,YAAY,QAAQ;AACtB,eAAK,UAAU,SAAS;AACxBoB,wBAAqB,aAAa,SAAS,MAAM,SAAS,MAAM;AAChE,eAAK,OAAO,SAAS;AAAA,QAAA;AAInB,YAAA,KAAK,SAAS,GAAK;AAChB,eAAA,YAAY,IAAM,KAAK;AAC5BC,oBAAiB,aAAa,KAAK,WAAW,WAAW;AAAA,QAAA,OAEpD;AAEL,eAAK,SAAS;AACd,eAAK,YAAY;AAAA,QAAA;AAGnB,YAAI,KAAK,MAAM,KAAO,KAAK,uBAAuB,OAAO;AAEvD,eAAK,OAAO,KAAK,SAASC,QAAe,aAAa,WAAW;AAE5D,eAAA,SAAS,IAAM,KAAK;AAAA,QAAA,OAEpB;AACL,eAAK,MAAM;AACX,eAAK,SAAS;AAAA,QAAA;AAIhBlB,iBAAgB,WAAW,KAAK,QAAQ,CAAC;AACzC,aAAK,QAAQ,eAAe,aAAa,KAAK,IAAI;AAGlDa,gBAAe,OAAO,KAAK,QAAQ,GAAG,SAAS;AAC/CM,qBAAoBxC,QAAM,KAAK,mBAAmB,KAAK;AAChDyC,iBAAS,KAAK,kBAAkBzC,MAAI;AAAA,MAC7C;AAUW,YAAA,UAAA,cAAX,SAAY,UAAkB;AAExB,YAAA,KAAK,mBAAmB,MAAM;AAChC;AAAA,QAAA;AAGE,YAAA,KAAK,UAAU,SAAS;AAC1B;AAAA,QAAA;AAGF,aAAK,YAAY;AACjB,aAAK,MAAM;AACX,aAAK,SAAS;AAEd,aAAK,SAAS,SAAS;AACnB,YAAA,KAAK,UAAU,GAAK;AACtB,eAAK,SAAS;AAAA,QAAA;AAGX,aAAA,YAAY,IAAM,KAAK;AAE5B,YAAI,SAAS,IAAI,KAAO,KAAK,uBAAuB,OAAO;AACpD,eAAA,MAAM,SAAS,IAAI,KAAK,SAASuC,QAAe,SAAS,QAAQ,SAAS,MAAM;AAEhF,eAAA,SAAS,IAAM,KAAK;AAAA,QAAA;AAI3BlB,iBAAgB,WAAW,KAAK,QAAQ,CAAC;AACzC,aAAK,QAAQ,eAAe,SAAS,QAAQ,KAAK,IAAI;AAGtDa,gBAAe,OAAO,KAAK,QAAQ,GAAG,SAAS;AAC/CM,qBAAoBxC,QAAM,KAAK,mBAAmB,KAAK;AAChDyC,iBAAS,KAAK,kBAAkBzC,MAAI;AAAA,MAC7C;AAWAoC,YAAA,UAAA,aAAA,SAAW,OAAkBM,QAAkB,MAAoB;AAApB,YAAA,SAAA,QAAA;AAAoB,iBAAA;AAAA,QAAA;AAC7D,YAAA,KAAK,UAAU,SAAS;AAC1B;AAAA,QAAA;AAEE,YAAA,QAAQ,KAAK,eAAe,OAAO;AACrC,eAAK,SAAS,IAAI;AAAA,QAAA;AAGpB,YAAI,KAAK,aAAa;AACf,eAAA,QAAQ,IAAI,KAAK;AACjB,eAAA,YAAY,KAAK,cAAc,KAAK,IAAIA,QAAO,KAAK,QAAQ,CAAC,GAAG,KAAK;AAAA,QAAA;AAAA,MAE9E;AAQAN,YAAA,UAAA,qBAAA,SAAmB,OAAkB,MAAoB;AAApB,YAAA,SAAA,QAAA;AAAoB,iBAAA;AAAA,QAAA;AACnD,YAAA,KAAK,UAAU,SAAS;AAC1B;AAAA,QAAA;AAEE,YAAA,QAAQ,KAAK,eAAe,OAAO;AACrC,eAAK,SAAS,IAAI;AAAA,QAAA;AAGpB,YAAI,KAAK,aAAa;AACf,eAAA,QAAQ,IAAI,KAAK;AAAA,QAAA;AAAA,MAE1B;AASAA,YAAA,UAAA,cAAA,SAAY,QAAgB,MAAoB;AAApB,YAAA,SAAA,QAAA;AAAoB,iBAAA;AAAA,QAAA;AAC1C,YAAA,KAAK,UAAU,SAAS;AAC1B;AAAA,QAAA;AAEE,YAAA,QAAQ,KAAK,eAAe,OAAO;AACrC,eAAK,SAAS,IAAI;AAAA,QAAA;AAGpB,YAAI,KAAK,aAAa;AACpB,eAAK,YAAY;AAAA,QAAA;AAAA,MAErB;AAWAA,YAAA,UAAA,qBAAA,SAAmB,SAAoBM,QAAkB,MAAoB;AAApB,YAAA,SAAA,QAAA;AAAoB,iBAAA;AAAA,QAAA;AACvE,YAAA,KAAK,UAAU,SAAS;AAC1B;AAAA,QAAA;AAEE,YAAA,QAAQ,KAAK,eAAe,OAAO;AACrC,eAAK,SAAS,IAAI;AAAA,QAAA;AAIpB,YAAI,KAAK,aAAa;AACpB,eAAK,iBAAiB,OAAO,KAAK,WAAW,OAAO;AACpD,eAAK,qBAAqB,KAAK,SAAS,KAAK,cAAc,KAAK,IAAIA,QAAO,KAAK,QAAQ,CAAC,GAAG,OAAO;AAAA,QAAA;AAAA,MAEvG;AAQAN,YAAA,UAAA,sBAAA,SAAoB,SAAiB,MAAoB;AAApB,YAAA,SAAA,QAAA;AAAoB,iBAAA;AAAA,QAAA;AACnD,YAAA,KAAK,UAAU,SAAS;AAC1B;AAAA,QAAA;AAGE,YAAA,QAAQ,KAAK,eAAe,OAAO;AACrC,eAAK,SAAS,IAAI;AAAA,QAAA;AAGpB,YAAI,KAAK,aAAa;AACf,eAAA,qBAAqB,KAAK,SAAS;AAAA,QAAA;AAAA,MAE5C;AASa,YAAA,UAAA,gBAAb,SAAc,MAAU;AAEtB,YAAI,KAAK,UAAU,WAAW,KAAK,UAAU,SAAS;AAC7C,iBAAA;AAAA,QAAA;AAGT,iBAAS,KAAK,KAAK,aAAa,IAAI,KAAK,GAAG,MAAM;AAC5C,cAAA,GAAG,SAAS,MAAM;AAChB,gBAAA,GAAG,MAAM,sBAAsB,OAAO;AACjC,qBAAA;AAAA,YAAA;AAAA,UACT;AAAA,QACF;AAEK,eAAA;AAAA,MACT;AAGW,YAAA,UAAA,cAAX,SAAY,SAAgB;AAGtB,YAAA,KAAK,mBAAmB,MAAM;AACzB,iBAAA;AAAA,QAAA;AAGT,YAAI,KAAK,cAAc;AACf,cAAA,aAAa,KAAK,QAAQ;AACxB,kBAAA,cAAc,YAAY,KAAK,IAAI;AAAA,QAAA;AAG7C,gBAAQ,SAAS,KAAK;AACtB,aAAK,gBAAgB;AAGjB,YAAA,QAAQ,YAAY,GAAK;AAC3B,eAAK,cAAa;AAAA,QAAA;AAKpB,aAAK,QAAQ,eAAe;AAErB,eAAA;AAAA,MACT;AAgBAA,YAAA,UAAA,gBAAA,SAAc,OAAO,QAAO;AAGtB,YAAA,KAAK,mBAAmB,MAAM;AACzB,iBAAA;AAAA,QAAA;AAGT,YAAM,UAAU,IAAI,QAAQ,MAAM,OAAO,MAAM;AAC/C,aAAK,YAAY,OAAO;AACjB,eAAA;AAAA,MACT;AAac,YAAA,UAAA,iBAAd,SAAe,SAAgB;AAGzB,YAAA,KAAK,mBAAmB,MAAM;AAChC;AAAA,QAAA;AAOE,YAAA,KAAK,kBAAkB,SAAS;AAClC,eAAK,gBAAgB,QAAQ;AAAA,QACrB,OAEH;AACL,cAAI,OAAO,KAAK;AAChB,iBAAO,QAAQ,MAAM;AACf,gBAAA,KAAK,WAAW,SAAS;AAC3B,mBAAK,SAAS,QAAQ;AAEtB;AAAA,YAAA;AAEF,mBAAO,KAAK;AAAA,UAAA;AAAA,QACd;AAOF,YAAI,OAAO,KAAK;AAChB,eAAO,MAAM;AACX,cAAM7B,KAAI,KAAK;AACf,iBAAO,KAAK;AAEN,cAAA,WAAWA,GAAE;AACb,cAAA,WAAWA,GAAE;AAEf,cAAA,WAAW,YAAY,WAAW,UAAU;AAGzC,iBAAA,QAAQ,eAAeA,EAAC;AAAA,UAAA;AAAA,QAC/B;AAGF,YAAI,KAAK,cAAc;AACf,cAAA,aAAa,KAAK,QAAQ;AAChC,kBAAQ,eAAe,UAAU;AAAA,QAAA;AAGnC,gBAAQ,SAAS;AACjB,gBAAQ,SAAS;AAEZ,aAAA,QAAQ,QAAQ,kBAAkB,OAAO;AAG9C,aAAK,cAAa;AAAA,MACpB;AAKa,YAAA,UAAA,gBAAb,SAAc,YAAqB;AACjC,eAAO,UAAU,QAAQ,KAAK,MAAM,UAAU;AAAA,MAChD;AAKc,YAAA,UAAA,iBAAd,SAAe,aAAsB;AACnC,eAAO,IAAI,QAAQ,KAAK,KAAK,GAAG,WAAW;AAAA,MAC7C;AAKa,YAAA,UAAA,gBAAb,SAAc,YAAqB;AACjC,eAAO,UAAU,SAAS,KAAK,MAAM,UAAU;AAAA,MACjD;AAKc,YAAA,UAAA,iBAAd,SAAe,aAAsB;AACnC,eAAO,IAAI,SAAS,KAAK,KAAK,GAAG,WAAW;AAAA,MAC9C;AA7+BgB6B,YAAM,SAAa;AAEnBA,YAAS,YAAa;AAEtBA,YAAO,UAAa;AA0+BrCA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AC1nCD,MAAA;AAAA;AAAA,IAAA,2BAAA;AAAA,eAAAO,aAAA;AAIE,aAAK,QAAgB;AAIrB,aAAK,QAAiB;AAItB,aAAI,OAAqB;AAIzB,aAAI,OAAqB;AAAA,MAAA;AAC1BA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAuCD,MAAA;AAAA;AAAA,IAAA,WAAA;AA0BEC,eAAAA,OAAY,KAA0B,OAAc,OAAY;AAxB/C,aAAA,SAAiB;AAOjB,aAAA,SAAuB;AACvB,aAAA,SAAuB;AAEhB,aAAA,UAAc,IAAI;AAClB,aAAA,UAAc,IAAI;AAEzB,aAAA,eAAwB;AAIzC,aAAK,QAAU;AAGf,aAAO,UAAwB;AAKrB,gBAAA,WAAW,MAAM,IAAI,QAAQ;AAC7B,gBAAA,WAAW,MAAM,IAAI,QAAQ;AAMrC,aAAK,UAAU;AACf,aAAK,UAAU;AAEV,aAAA,qBAAqB,CAAC,CAAC,IAAI;AAChC,aAAK,aAAa,IAAI;AAAA,MAAA;AAMxB,aAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK,QAAQ,SAAc,KAAA,KAAK,QAAQ;MACjD;AAKA,aAAA,UAAA,UAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,aAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,aAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,aAAA,UAAA,UAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEA,aAAA,UAAA,cAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEW,aAAA,UAAA,cAAX,SAAY,MAAa;AACvB,aAAK,aAAa;AAAA,MACpB;AAOA,aAAA,UAAA,sBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAyBA,aAAA,UAAA,cAAA,SAAY,WAAoB;AAAA,MAAS;AAqB5B,aAAA,UAAA,gBAAb,SAAc,KAAQ;AACb,eAAA,KAAK,OAAO,GAAG;AAAA,MACxB;AACDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;ACxOM,MAAM,QAAQ;AAAA,IACnB,UAAU;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,IAEb,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,IACb,cAAc;AAAA,IACd,iBAAiB;AAAA,IAEjB,mBAAS,SAAgB;AACb,gBAAA,OAAO,YAAY,WAAW,UAAU;AAClD,UAAI,SAAS;AAEb,eAAW,UAAQ,MAAM;AACnB,YAAA,OAAO,KAAK,MAAI,MAAM,cAAc,OAAO,KAAK,MAAI,MAAM,UAAU;AACtE,oBAAU,SAAO,OAAO,KAAK,MAAI,IAAI;AAAA,QAAA;AAAA,MACvC;AAEK,aAAA;AAAA,IAAA;AAAA;ACtBJ,MAAM,MAAM,WAAA;AACjB,WAAO,KAAK,IAAG;AAAA,EACjB;AAGa,MAAA,OAAO,SAAS,MAAY;AAChC,WAAA,KAAK,QAAQ;AAAA,EACtB;AAGe,QAAA,QAAA;AAAA,IACb;AAAA,IACA;AAAA;ACsBe,MAAMnD,aAAW,KAAK;AAGtB,MAAMO,SAAOiB,KAAY,GAAG,CAAC;AAC7B,MAAMlB,WAASkB,KAAY,GAAG,CAAC;AAC/B,MAAM,MAAMA,KAAY,GAAG,CAAC;AAC5B,MAAM,MAAMA,KAAY,GAAG,CAAC;AAC5B,MAAM,MAAMA,KAAY,GAAG,CAAC;AAC5B,MAAM,QAAQA,KAAY,GAAG,CAAC;AAC9B,MAAM,QAAQA,KAAY,GAAG,CAAC;AAM/C,QAAM,WAAW;AACjB,QAAM,WAAW;AACjB,QAAM,cAAc;AAMpB,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAA4B,iBAAA;AACW,aAAA,SAAS,IAAI,cAAa;AAC1B,aAAA,SAAS,IAAI,cAAa;AAC1B,aAAA,aAAa,UAAU;AACvB,aAAA,aAAa,UAAU;AAChC,aAAQ,WAAG;AAAA,MAAA;AACX,qBAAA,UAAA,UAAA,WAAA;AACE,aAAK,OAAO;AACZ,aAAK,OAAO;AACZ,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,WAAW;AAAA,MAClB;AACDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAKD,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,kBAAA;AAEE,aAAM,SAAG7B,KAAY,GAAG,CAAC;AAEzB,aAAM,SAAGA,KAAY,GAAG,CAAC;AACzB,aAAQ,WAAG;AAEX,aAAU,aAAG;AAAA,MAAA;AACb,sBAAA,UAAA,UAAA,WAAA;AACSE,iBAAS,KAAK,MAAM;AACpBA,iBAAS,KAAK,MAAM;AAC3B,aAAK,WAAW;AAChB,aAAK,aAAa;AAAA,MACpB;AACD2B,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAKD,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,gBAAA;AAEE,aAAM,SAAW;AAEjB,aAAM,SAAa;AAEnB,aAAM,SAAa;AACnB,aAAK,QAAW;AAAA,MAAA;AAChB,oBAAA,UAAA,UAAA,WAAA;AACE,aAAK,SAAS;AACd,aAAK,OAAO,SAAS;AACrB,aAAK,OAAO,SAAS;AACrB,aAAK,QAAQ;AAAA,MACf;AACDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAOY,MAAA,WAAW,SAAU1D,SAAwB2D,QAAqB5D,QAAoB;AACjG,MAAE,MAAM;AAER,QAAM,SAASA,OAAM;AACrB,QAAM,SAASA,OAAM;AACrB,QAAM6D,OAAM7D,OAAM;AAClB,QAAM8D,OAAM9D,OAAM;AAIlB,YAAQ,QAAO;AACf,YAAQ,UAAU4D,QAAO,QAAQC,MAAK,QAAQC,IAAG;AAGjD,QAAM,WAAW,QAAQ;AACzB,QAAM,aAAahD,iBAAS;AAI5B,QAAM,QAAQ,CAAA;AACd,QAAM,QAAQ,CAAE;AAChB,QAAI,YAAY;AAGhB,QAAI,OAAO;AACX,WAAO,OAAO,YAAY;AAExB,kBAAY,QAAQ;AACpB,eAAS,IAAI,GAAG,IAAI,WAAW,EAAE,GAAG;AAClC,cAAM,CAAC,IAAI,SAAS,CAAC,EAAE;AACvB,cAAM,CAAC,IAAI,SAAS,CAAC,EAAE;AAAA,MAAA;AAGzB,cAAQ,MAAK;AAGT,UAAA,QAAQ,YAAY,GAAG;AACzB;AAAA,MAAA;AAII,UAAAnB,KAAI,QAAQ;AAGlB,UAAIoE,cAAqBpE,EAAC,IAAI,UAAU,SAAS;AAO/C;AAAA,MAAA;AAII,UAAA,SAAS,SAAS,QAAQ,OAAO;AAEvC,aAAO,SAAS,OAAO,WAAWqE,UAAiBpD,QAAMiD,KAAI,GAAGX,UAAiBtC,QAAM,IAAIjB,EAAC,CAAC,CAAC;AACvFqC,oBAAc,OAAO,IAAI6B,MAAK,OAAO,UAAU,OAAO,MAAM,CAAC;AAE7D,aAAA,SAAS,OAAO,WAAWG,UAAiBpD,QAAMkD,KAAI,GAAGnE,EAAC,CAAC;AAC3DqC,oBAAc,OAAO,IAAI8B,MAAK,OAAO,UAAU,OAAO,MAAM,CAAC;AAEpEhB,cAAe,OAAO,GAAG,OAAO,IAAI,OAAO,EAAE;AAG3C,QAAA;AACF,QAAE,MAAM;AAIR,UAAI,YAAY;AAChB,eAAS,IAAI,GAAG,IAAI,WAAW,EAAE,GAAG;AAC9B,YAAA,OAAO,WAAW,MAAM,CAAC,KAAK,OAAO,WAAW,MAAM,CAAC,GAAG;AAChD,sBAAA;AACZ;AAAA,QAAA;AAAA,MACF;AAIF,UAAI,WAAW;AACb;AAAA,MAAA;AAIF,QAAE,QAAQ;AAAA,IAAA;AAGZ,UAAM,cAAczC,WAAS,MAAM,aAAa,IAAI;AAGpD,YAAQ,iBAAiBJ,QAAO,QAAQA,QAAO,MAAM;AACrDA,YAAO,WAAWgE,SAAgBhE,QAAO,QAAQA,QAAO,MAAM;AAC9DA,YAAO,aAAa;AAGpB,YAAQ,WAAW2D,MAAK;AAGxB,QAAI5D,OAAM,UAAU;AAClB,UAAMkE,MAAK,OAAO;AAClB,UAAMC,MAAK,OAAO;AAElB,UAAIlE,QAAO,WAAWiE,MAAKC,OAAMlE,QAAO,WAAW,SAAS;AAG1DA,gBAAO,YAAYiE,MAAKC;AACxBrB,gBAAenC,UAAQV,QAAO,QAAQA,QAAO,MAAM;AACnDmE,sBAAqBzD,QAAM;AAC3BsC,sBAAqBhD,QAAO,QAAQiE,KAAIvD,QAAM;AAC9C0D,uBAAsBpE,QAAO,QAAQkE,KAAIxD,QAAM;AAAA,MAAA,OAC1C;AAGL,YAAM,IAAImC,QAAelC,QAAMX,QAAO,QAAQA,QAAO,MAAM;AACpDgC,iBAAShC,QAAO,QAAQ,CAAC;AACzBgC,iBAAShC,QAAO,QAAQ,CAAC;AAChCA,gBAAO,WAAW;AAAA,MAAA;AAAA,IACpB;AAAA,EAEJ;AAKA,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAqE,iBAAA;AACmB,aAAA,aAA0B,CAAA;AAE1B,aAAA,UAAU;AACV,aAAA,WAAW;AAAA,MAAA;AAE5B,qBAAA,UAAA,UAAA,WAAA;AACE,aAAK,WAAW,SAAS;AACzB,aAAK,UAAU;AACf,aAAK,WAAW;AAAA,MAClB;AAKA,qBAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKS,qBAAA,UAAA,YAAT,SAAU,OAAa;AAEd,eAAA,KAAK,WAAW,KAAK;AAAA,MAC9B;AAKU,qBAAA,UAAA,aAAV,SAAW3E,IAAY;AACrB,YAAI,YAAY;AAChB,YAAI,YAAY;AAChB,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,EAAE,GAAG;AACrC,cAAM,QAAQwD,QAAe,KAAK,WAAW,CAAC,GAAGxD,EAAC;AAClD,cAAI,QAAQ,WAAW;AACT,wBAAA;AACA,wBAAA;AAAA,UAAA;AAAA,QACd;AAEK,eAAA;AAAA,MACT;AAKgB,qBAAA,UAAA,mBAAhB,SAAiBA,IAAY;AAC3B,eAAO,KAAK,WAAW,KAAK,WAAWA,EAAC,CAAC;AAAA,MAC3C;AAMA2E,qBAAA,UAAA,MAAA,SAAI,OAAc,OAAa;AAGvB,cAAA,qBAAqB,MAAM,KAAK;AAAA,MACxC;AAMAA,qBAAA,UAAA,cAAA,SAAY,UAAuB,OAAe,QAAc;AAC9D,aAAK,aAAa;AAClB,aAAK,UAAU;AACf,aAAK,WAAW;AAAA,MAClB;AACDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAED,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,iBAAA;AAEE,aAAE,KAAG1C,KAAY,GAAG,CAAC;AAErB,aAAM,SAAG;AAGT,aAAE,KAAGA,KAAY,GAAG,CAAC;AAErB,aAAM,SAAG;AAGT,aAAC,IAAGA,KAAY,GAAG,CAAC;AAEpB,aAAC,IAAG;AAAA,MAAA;AAEJ,qBAAA,UAAA,UAAA,WAAA;AACE,aAAK,SAAS;AACd,aAAK,SAAS;AACPE,iBAAS,KAAK,EAAE;AAChBA,iBAAS,KAAK,EAAE;AAChBA,iBAAS,KAAK,CAAC;AACtB,aAAK,IAAI;AAAA,MACX;AACG,qBAAA,UAAA,MAAH,SAAIvB,IAAgB;AAClB,aAAK,SAASA,GAAE;AAChB,aAAK,SAASA,GAAE;AAChByB,iBAAgB,KAAK,IAAIzB,GAAE,EAAE;AAC7ByB,iBAAgB,KAAK,IAAIzB,GAAE,EAAE;AAC7ByB,iBAAgB,KAAK,GAAGzB,GAAE,CAAC;AAC3B,aAAK,IAAIA,GAAE;AAAA,MACb;AACD+D,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAEgB,MAAM,wBAAwB1C,KAAY,GAAG,CAAC;AAC9C,MAAM,qBAAqBA,KAAY,GAAG,CAAC;AAE5D,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAA2C,WAAA;AACE,aAAA,OAAO,IAAI,cAAa;AACxB,aAAA,OAAO,IAAI,cAAa;AACxB,aAAA,OAAO,IAAI,cAAa;AACxB,aAAA,MAAM,CAAC,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI;AAAA,MAAA;AAEtC,eAAA,UAAA,UAAA,WAAA;AACE,aAAK,KAAK;AACV,aAAK,KAAK;AACV,aAAK,KAAK;AACV,aAAK,UAAU;AAAA,MACjB;oCAEiB,WAAA;AACX,YAAA,KAAK,YAAY,GAAG;AACf,iBAAA;AAAA,YAAC,MAAM,KAAK;AAAA,YACjB,KAAK,KAAK;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAC1E,KAAK,KAAK;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAC1E,KAAK,KAAK;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAC1E;mBAEO,KAAK,YAAY,GAAG;AACtB,iBAAA;AAAA,YAAC,MAAM,KAAK;AAAA,YACjB,KAAK,KAAK;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAC1E,KAAK,KAAK;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAC1E;mBAEO,KAAK,YAAY,GAAG;AACtB,iBAAA;AAAA,YAAC,MAAM,KAAK;AAAA,YACjB,KAAK,KAAK;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAAG,KAAK,KAAK,GAAG;AAAA,YAC1E;eAEG;AACL,iBAAO,MAAM,KAAK;AAAA,QAAA;AAAA,MAEtB;AAEAA,eAAS,UAAA,YAAT,SAAUZ,QAAqB,QAAuB,YAA4B,QAAuB,YAA0B;AAIjI,aAAK,UAAUA,OAAM;AACrB,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,EAAE,GAAG;AAC/B,cAAApD,KAAI,KAAK,IAAI,CAAC;AAClB,UAAAA,GAAA,SAASoD,OAAM,OAAO,CAAC;AACvB,UAAApD,GAAA,SAASoD,OAAM,OAAO,CAAC;AACzB,cAAM,UAAU,OAAO,UAAUpD,GAAE,MAAM;AACzC,cAAM,UAAU,OAAO,UAAUA,GAAE,MAAM;AACzCwB,wBAAqBxB,GAAE,IAAI,YAAY,OAAO;AAC9CwB,wBAAqBxB,GAAE,IAAI,YAAY,OAAO;AAC9CsC,kBAAetC,GAAE,GAAEA,GAAE,IAAIA,GAAE,EAAE;AAC7B,UAAAA,GAAE,IAAI;AAAA,QAAA;AAKJ,YAAA,KAAK,UAAU,GAAG;AACpB,cAAM,UAAUoD,OAAM;AAChB,cAAA,UAAU,KAAK;AACrB,cAAI,UAAU,MAAM,WAAW,IAAM,UAAU,WAAW,UAAU,SAAS;AAE3E,iBAAK,UAAU;AAAA,UAAA;AAAA,QACjB;AAIE,YAAA,KAAK,YAAY,GAAG;AAChB,cAAApD,KAAI,KAAK,IAAI,CAAC;AACpB,UAAAA,GAAE,SAAS;AACX,UAAAA,GAAE,SAAS;AACL,cAAA,UAAU,OAAO,UAAU,CAAC;AAC5B,cAAA,UAAU,OAAO,UAAU,CAAC;AAClCwB,wBAAqBxB,GAAE,IAAI,YAAY,OAAO;AAC9CwB,wBAAqBxB,GAAE,IAAI,YAAY,OAAO;AAC9CsC,kBAAetC,GAAE,GAAEA,GAAE,IAAIA,GAAE,EAAE;AAC7B,UAAAA,GAAE,IAAI;AACN,eAAK,UAAU;AAAA,QAAA;AAAA,MAEnB;AAEU,eAAA,UAAA,aAAV,SAAWoD,QAAmB;AACtB,eAAA,SAAS,KAAK;AACpBA,eAAM,QAAQ,KAAK;AACnB,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,EAAE,GAAG;AACrCA,iBAAM,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;AAC9BA,iBAAM,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;AAAA,QAAA;AAAA,MAElC;AAEA,eAAA,UAAA,qBAAA,WAAA;AACE,YAAMa,MAAK,KAAK;AAChB,YAAMC,MAAK,KAAK;AACL,aAAK;AAChB,gBAAQ,KAAK,SAAS;AAAA,UACpB,KAAK;AACI,mBAAAC,QAAe,uBAAuB,CAACF,IAAG,EAAE,GAAG,CAACA,IAAG,EAAE,CAAC;AAAA,UAE/D,KAAK,GAAG;AACN3B,oBAAe,KAAK4B,IAAG,GAAGD,IAAG,CAAC;AAC9B,gBAAM,MAAM,CAACG,cAAqB,KAAKH,IAAG,CAAC;AAC3C,gBAAI,MAAM,GAAK;AAEb,qBAAOE,QAAe,uBAAuB,CAAC,IAAI,GAAG,IAAI,CAAC;AAAA,YAAA,OACrD;AAEL,qBAAOA,QAAe,uBAAuB,IAAI,GAAG,CAAC,IAAI,CAAC;AAAA,YAAA;AAAA,UAC5D;AAAA,UAGF;AAES,mBAAA5C,SAAgB,qBAAqB;AAAA,QAAA;AAAA,MAElD;AAEA,eAAA,UAAA,kBAAA,WAAA;AACE,YAAM0C,MAAK,KAAK;AAChB,YAAMC,MAAK,KAAK;AACL,aAAK;AAChB,gBAAQ,KAAK,SAAS;AAAA,UACpB,KAAK;AAEI,mBAAA3C,SAAgB,kBAAkB;AAAA,UAE3C,KAAK;AACH,mBAAOE,SAAgB,oBAAoBwC,IAAG,CAAC;AAAA,UAEjD,KAAK;AACK,mBAAArC,aAAoB,oBAAoBqC,IAAG,GAAGA,IAAG,GAAGC,IAAG,GAAGA,IAAG,CAAC;AAAA,UAExE,KAAK;AACI,mBAAA3C,SAAgB,kBAAkB;AAAA,UAE3C;AAES,mBAAAA,SAAgB,kBAAkB;AAAA,QAAA;AAAA,MAE/C;AAEAyC,eAAA,UAAA,mBAAA,SAAiBK,KAAeC,KAAa;AAC3C,YAAML,MAAK,KAAK;AAChB,YAAMC,MAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,gBAAQ,KAAK,SAAS;AAAA,UACpB,KAAK;AAEH;AAAA,UAEF,KAAK;AACIzC,qBAAS4C,KAAIJ,IAAG,EAAE;AAClBxC,qBAAS6C,KAAIL,IAAG,EAAE;AACzB;AAAA,UAEF,KAAK;AACIrC,yBAAayC,KAAIJ,IAAG,GAAGA,IAAG,IAAIC,IAAG,GAAGA,IAAG,EAAE;AACzCtC,yBAAa0C,KAAIL,IAAG,GAAGA,IAAG,IAAIC,IAAG,GAAGA,IAAG,EAAE;AAChD;AAAA,UAEF,KAAK;AACHK,yBAAoBF,KAAIJ,IAAG,GAAGA,IAAG,IAAIC,IAAG,GAAGA,IAAG,IAAI,GAAG,GAAG,GAAG,EAAE;AACtDzC,qBAAS6C,KAAID,GAAE;AACtB;AAAA,QAIA;AAAA,MAEN;AAEA,eAAA,UAAA,YAAA,WAAA;AACE,gBAAQ,KAAK,SAAS;AAAA,UACpB,KAAK;AAEI,mBAAA;AAAA,UAET,KAAK;AACI,mBAAA;AAAA,UAET,KAAK;AACH,mBAAOZ,SAAgB,KAAK,KAAK,GAAG,KAAK,KAAK,CAAC;AAAA,UAEjD,KAAK;AACI,mBAAAW,cACL9B,QAAe,OAAO,KAAK,KAAK,GAAG,KAAK,KAAK,CAAC,GAC9CA,QAAe,OAAO,KAAK,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,UAGnD;AAES,mBAAA;AAAA,QAAA;AAAA,MAEb;AAEA,eAAA,UAAA,QAAA,WAAA;AACE,gBAAQ,KAAK,SAAS;AAAA,UACpB,KAAK;AACH;AAAA,UAEF,KAAK;AACH,iBAAK,OAAM;AACX;AAAA,UAEF,KAAK;AACH,iBAAK,OAAM;AACX;AAAA,QAG+B;AAAA,MAErC;AAyBA,eAAA,UAAA,SAAA,WAAA;AACQ,YAAA,KAAK,KAAK,KAAK;AACf,YAAA,KAAK,KAAK,KAAK;AACdA,gBAAQ,KAAK,IAAI,EAAE;AAG1B,YAAM,QAAQ,CAACK,QAAe,IAAI,GAAG;AACrC,YAAI,SAAS,GAAK;AAEhB,eAAK,KAAK,IAAI;AACd,eAAK,UAAU;AACf;AAAA,QAAA;AAIF,YAAM,QAAQA,QAAe,IAAI,GAAG;AACpC,YAAI,SAAS,GAAK;AAEhB,eAAK,KAAK,IAAI;AACd,eAAK,UAAU;AACV,eAAA,KAAK,IAAI,KAAK,IAAI;AACvB;AAAA,QAAA;AAII,YAAA,UAAU,KAAO,QAAQ;AAC1B,aAAA,KAAK,IAAI,QAAQ;AACjB,aAAA,KAAK,IAAI,QAAQ;AACtB,aAAK,UAAU;AAAA,MACjB;AAOA,eAAA,UAAA,SAAA,WAAA;AACQ,YAAA,KAAK,KAAK,KAAK;AACf,YAAA,KAAK,KAAK,KAAK;AACf,YAAA,KAAK,KAAK,KAAK;AAMdL,gBAAQ,KAAK,IAAI,EAAE;AAC1B,YAAM,QAAQK,QAAe,IAAI,GAAG;AACpC,YAAM,QAAQA,QAAe,IAAI,GAAG;AACpC,YAAM,QAAQ;AACd,YAAM,QAAQ,CAAC;AAMRL,gBAAQ,KAAK,IAAI,EAAE;AAC1B,YAAM,QAAQK,QAAe,IAAI,GAAG;AACpC,YAAM,QAAQA,QAAe,IAAI,GAAG;AACpC,YAAM,QAAQ;AACd,YAAM,QAAQ,CAAC;AAMRL,gBAAQ,KAAK,IAAI,EAAE;AAC1B,YAAM,QAAQK,QAAe,IAAI,GAAG;AACpC,YAAM,QAAQA,QAAe,IAAI,GAAG;AACpC,YAAM,QAAQ;AACd,YAAM,QAAQ,CAAC;AAGf,YAAM,OAAOyB,cAAqB,KAAK,GAAG;AAE1C,YAAM,SAAS,OAAOA,cAAqB,IAAI,EAAE;AACjD,YAAM,SAAS,OAAOA,cAAqB,IAAI,EAAE;AACjD,YAAM,SAAS,OAAOA,cAAqB,IAAI,EAAE;AAG7C,YAAA,SAAS,KAAO,SAAS,GAAK;AAChC,eAAK,KAAK,IAAI;AACd,eAAK,UAAU;AACf;AAAA,QAAA;AAIF,YAAI,QAAQ,KAAO,QAAQ,KAAO,UAAU,GAAK;AACzC,cAAA,UAAU,KAAO,QAAQ;AAC1B,eAAA,KAAK,IAAI,QAAQ;AACjB,eAAA,KAAK,IAAI,QAAQ;AACtB,eAAK,UAAU;AACf;AAAA,QAAA;AAIF,YAAI,QAAQ,KAAO,QAAQ,KAAO,UAAU,GAAK;AACzC,cAAA,UAAU,KAAO,QAAQ;AAC1B,eAAA,KAAK,IAAI,QAAQ;AACjB,eAAA,KAAK,IAAI,QAAQ;AACtB,eAAK,UAAU;AACV,eAAA,KAAK,IAAI,KAAK,IAAI;AACvB;AAAA,QAAA;AAIE,YAAA,SAAS,KAAO,SAAS,GAAK;AAChC,eAAK,KAAK,IAAI;AACd,eAAK,UAAU;AACV,eAAA,KAAK,IAAI,KAAK,IAAI;AACvB;AAAA,QAAA;AAIE,YAAA,SAAS,KAAO,SAAS,GAAK;AAChC,eAAK,KAAK,IAAI;AACd,eAAK,UAAU;AACV,eAAA,KAAK,IAAI,KAAK,IAAI;AACvB;AAAA,QAAA;AAIF,YAAI,QAAQ,KAAO,QAAQ,KAAO,UAAU,GAAK;AACzC,cAAA,UAAU,KAAO,QAAQ;AAC1B,eAAA,KAAK,IAAI,QAAQ;AACjB,eAAA,KAAK,IAAI,QAAQ;AACtB,eAAK,UAAU;AACV,eAAA,KAAK,IAAI,KAAK,IAAI;AACvB;AAAA,QAAA;AAII,YAAA,WAAW,KAAO,SAAS,SAAS;AACrC,aAAA,KAAK,IAAI,SAAS;AAClB,aAAA,KAAK,IAAI,SAAS;AAClB,aAAA,KAAK,IAAI,SAAS;AACvB,aAAK,UAAU;AAAA,MACjB;AACDJ,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAEgB,MAAM,UAAU,IAAI;AAEpB,MAAMxE,UAAQ,IAAI;AAClB,MAAM4D,UAAQ,IAAI;AAClB,MAAM3D,WAAS,IAAI;AAK7B,MAAM,cAAc,SAAU,QAAe,QAAgB,QAAe,QAAgB4D,MAAqBC,MAAmB;AACzI9D,YAAM,QAAO;AACPA,YAAA,OAAO,IAAI,QAAQ,MAAM;AACzBA,YAAA,OAAO,IAAI,QAAQ,MAAM;AACxBgF,kBAAchF,QAAM,YAAY6D,IAAG;AACnCmB,kBAAchF,QAAM,YAAY8D,IAAG;AAC1C9D,YAAM,WAAW;AAEjBC,aAAO,QAAO;AACd2D,YAAM,QAAO;AAEJ,aAAA3D,UAAQ2D,SAAO5D,OAAK;AAEtB,WAAAC,SAAO,WAAW,KAAO;AAAA,EAClC;AAGA,WAAS,cAAc;AACvB,WAAS,QAAQ;AACjB,WAAS,SAAS;AAClB,WAAS,QAAQ;AACjB,WAAS,QAAQ;AAKjB,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAgF,kBAAA;AACW,aAAA,SAAS,IAAI,cAAa;AAC1B,aAAA,SAAS,IAAI,cAAa;AAC1B,aAAA,aAAa,UAAU;AACvB,aAAA,aAAa,UAAU;AACvB,aAAA,eAAe,KAAK;;AAC7B,sBAAA,UAAA,UAAA,WAAA;AACE,aAAK,OAAO;AACZ,aAAK,OAAO;AACZ,aAAK,WAAW;AAChB,aAAK,WAAW;AACTlD,iBAAS,KAAK,YAAY;AAAA,MACnC;AACDkD,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAKD,MAAA;AAAA;AAAA,IAAA,2BAAA;AAAA,eAAAC,mBAAA;AACE,aAAA,QAAc,KAAK;AACnB,aAAA,SAAe,KAAK;AACpB,aAAM,SAAG;AACT,aAAU,aAAG;AAAA,MAAA;AACdA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAYY,MAAA,YAAY,SAASjF,SAAyBD,QAAqB;AAC9EC,YAAO,aAAa;AACpBA,YAAO,SAAS;AAChBA,YAAO,OAAO;AACdA,YAAO,MAAM;AAEb,QAAM,SAASD,OAAM;AACrB,QAAM,SAASA,OAAM;AAErB,QAAM,UAAUK,WAAS,OAAO,UAAUS,iBAAS,aAAa;AAChE,QAAM,UAAUT,WAAS,OAAO,UAAUS,iBAAS,aAAa;AAChE,QAAM,SAAS,UAAU;AAEzB,QAAM+C,OAAM7D,OAAM;AAClB,QAAM8D,OAAM9D,OAAM;AAElB,QAAM,IAAIA,OAAM;AACV,QAAAD,KAAI,KAAK;AACf,QAAI,SAAS;AAGPoF,QAAAA,WAAU,IAAI;AACpBA,aAAQ,UAAU;AAGlB,QAAM,WAAWA,SAAQ;AAGrB,QAAA,SAAS,OAAO,WAAW,IAAI,SAAStB,KAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC;AAC/D,QAAI,KAAK,UAAU,QAAQA,MAAK,OAAO,UAAU,MAAM,CAAC;AACpD,QAAA,SAAS,OAAO,WAAW,IAAI,SAASC,KAAI,GAAG,CAAC,CAAC;AACrD,QAAI,KAAK,UAAU,QAAQA,MAAK,OAAO,UAAU,MAAM,CAAC;AACxD,QAAMtD,KAAI,KAAK,IAAI,IAAI,EAAE;AAGzB,QAAM,QAAQH,WAASS,iBAAS,eAAe,SAASA,iBAAS,aAAa;AACxE,QAAA,YAAY,MAAMA,iBAAS;AAGjC,QAAM,aAAa;AACnB,QAAI,OAAO;AACX,WAAO,OAAO,cAAcN,GAAE,OAAM,IAAK,QAAQ,WAAW;AAG1DP,cAAO,cAAc;AAGZ,eAAA,OAAO,WAAW,IAAI,SAAS4D,KAAI,GAAG,KAAK,IAAIrD,EAAC,CAAC,CAAC;AAC3D,WAAK,UAAU,QAAQqD,MAAK,OAAO,UAAU,MAAM,CAAC;AACpD,eAAS,OAAO,WAAW,IAAI,SAASC,KAAI,GAAGtD,EAAC,CAAC;AACjD,WAAK,UAAU,QAAQsD,MAAK,OAAO,UAAU,MAAM,CAAC;AACpD,UAAM,IAAI,KAAK,IAAI,IAAI,EAAE;AAGzB,MAAAtD,GAAE,UAAS;AAGX,UAAM,KAAK,KAAK,IAAIA,IAAG,CAAC;AACxB,UAAM,KAAK,KAAK,IAAIA,IAAG,CAAC;AACpB,UAAA,KAAK,QAAQ,SAAS,IAAI;AAC5B,YAAI,MAAM,GAAK;AACN,iBAAA;AAAA,QAAA;AAGT,kBAAU,KAAK,SAAS;AACxB,YAAI,SAAS,GAAK;AACT,iBAAA;AAAA,QAAA;AAGP,QAAAT,GAAA,OAAO,IAAIS,EAAC;AACd2E,iBAAQ,UAAU;AAAA,MAAA;AAOd,UAAA,SAAS,SAASA,SAAQ,OAAO;AACvC,aAAO,SAAS;AAChB,aAAO,KAAK,KAAK,QAAQ,GAAG,IAAI,QAAQ,CAAC;AACzC,aAAO,SAAS;AAChB,aAAO,KAAK;AACZ,aAAO,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,EAAE;AACxC,aAAO,IAAI;AACXA,eAAQ,WAAW;AAEnB,cAAQA,SAAQ,SAAS;AAAA,QACvB,KAAK;AACH;AAAA,QAEF,KAAK;AACHA,mBAAQ,OAAM;AACd;AAAA,QAEF,KAAK;AACHA,mBAAQ,OAAM;AACd;AAAA,MAG+B;AAI/BA,UAAAA,SAAQ,WAAW,GAAG;AAEjB,eAAA;AAAA,MAAA;AAIP,MAAA3E,GAAA,QAAQ2E,SAAQ,iBAAiB;AAGjC,QAAA;AAAA,IAAA;AAGJ,QAAI,QAAQ,GAAG;AAEN,aAAA;AAAA,IAAA;AAIH,QAAAC,UAAS,KAAK;AACd,QAAAC,UAAS,KAAK;AACZ,aAAA,iBAAiBA,SAAQD,OAAM;AAEnC,QAAA5E,GAAE,kBAAkB,GAAK;AACzB,MAAAT,GAAA,OAAO,IAAIS,EAAC;AACd,MAAAT,GAAE,UAAS;AAAA,IAAA;AAGbE,YAAO,QAAQ,KAAK,QAAQ,GAAGmF,SAAQ,SAASrF,EAAC;AACjDE,YAAO,SAASF;AAChBE,YAAO,SAAS;AAChBA,YAAO,aAAa;AACb,WAAA;AAAA,EACT;AC73BiB,MAAME,aAAW,KAAK;AACtB,MAAME,aAAW,KAAK;AAMvC,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAiF,YAAA;AACE,aAAA,SAAS,IAAI,cAAa;AAC1B,aAAA,SAAS,IAAI,cAAa;AAC1B,aAAA,SAAS,IAAI,MAAK;AAClB,aAAA,SAAS,IAAI,MAAK;AAAA,MAAA;AAGlB,gBAAA,UAAA,UAAA,WAAA;AACE,aAAK,OAAO;AACZ,aAAK,OAAO;AACZ,aAAK,OAAO;AACZ,aAAK,OAAO;AACZ,aAAK,OAAO;AAAA,MACd;AACDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAEWC,EAAAA,SAAAA,iBAAAA;AAAA,GAAZ,SAAYA,iBAAc;AACxBA,oBAAAA,gBAAA,SAAA,IAAA,EAAA,IAAA;AACAA,oBAAAA,gBAAA,WAAA,IAAA,CAAA,IAAA;AACAA,oBAAAA,gBAAA,UAAA,IAAA,CAAA,IAAA;AACAA,oBAAAA,gBAAA,cAAA,IAAA,CAAA,IAAA;AACAA,oBAAAA,gBAAA,YAAA,IAAA,CAAA,IAAA;AACAA,oBAAAA,gBAAA,aAAA,IAAA,CAAA,IAAA;AAAA,EACF,GAPYA,SAAA,mBAAAA,0BAOX,CAAA,EAAA;AAKD,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,aAAA;AACE,aAAA,QAAQD,SAAAA,eAAe;AACvB,aAAC,IAAG;AAAA,MAAA;AACJ,iBAAA,UAAA,UAAA,WAAA;AACE,aAAK,QAAQA,SAAAA,eAAe;AAC5B,aAAK,IAAI;AAAA,MACX;AACDC,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAED,QAAM,UAAU;AAChB,QAAM,aAAa;AACnB,QAAM,WAAW;AACjB,QAAM,WAAW;AACjB,QAAM,cAAc;AACpB,QAAM,eAAe;AACrB,QAAM,kBAAkB;AAEP,MAAM,gBAAgB,IAAI;AAC1B,MAAM,iBAAiB,IAAI;AAE3B,MAAM,QAAQ,IAAI;AAElB,MAAM3B,QAAMd,UAAiB,GAAG,GAAG,CAAC;AACpC,MAAMe,QAAMf,UAAiB,GAAG,GAAG,CAAC;AACpC,MAAMnC,SAAOiB,KAAY,GAAG,CAAC;AAC7B,MAAMuD,WAASvD,KAAY,GAAG,CAAC;AAC/B,MAAMwD,WAASxD,KAAY,GAAG,CAAC;AAC/B,MAAMlB,WAASkB,KAAY,GAAG,CAAC;AAC/B,MAAM,QAAQA,KAAY,GAAG,CAAC;AAC9B,MAAM,QAAQA,KAAY,GAAG,CAAC;AAC9B,MAAM,cAAcA,KAAY,GAAG,CAAC;AACpC,MAAM,cAAcA,KAAY,GAAG,CAAC;AAexC,MAAA,eAAe,SAAU5B,SAAmBD,QAAe;AAChE,QAAA,QAAQ,MAAM;AAEpB,MAAE,MAAM;AAER,IAAAC,QAAO,QAAQsF,SAAAA,eAAe;AAC9B,IAAAtF,QAAO,IAAID,OAAM;AAEjB,QAAM,SAASA,OAAM;AACrB,QAAM,SAASA,OAAM;AAErB,QAAM,SAASA,OAAM;AACrB,QAAM,SAASA,OAAM;AAIrB,WAAO,UAAS;AAChB,WAAO,UAAS;AAEhB,QAAM,OAAOA,OAAM;AAEb,QAAA,cAAc,OAAO,WAAW,OAAO;AAC7C,QAAM,SAASK,WAASS,iBAAS,YAAY,cAAc,IAAMA,iBAAS,UAAU;AAC9E,QAAA,YAAY,OAAOA,iBAAS;AAGlC,QAAI,KAAK;AACT,QAAM,kBAAkBA,iBAAS;AACjC,QAAI,OAAO;AAIX,UAAM,QAAO;AAEb,kBAAc,OAAO,YAAY,OAAO,YAAY,OAAO,SAAS,OAAO,QAAQ;AACnF,kBAAc,OAAO,YAAY,OAAO,YAAY,OAAO,SAAS,OAAO,QAAQ;AACnF,kBAAc,WAAW;AAIzB,WAAO,MAAM;AACJ,aAAA,aAAa+C,OAAK,EAAE;AACpB,aAAA,aAAaC,OAAK,EAAE;AAIpBkB,oBAAc,cAAc,YAAYnB,KAAG;AAC3CmB,oBAAc,cAAc,YAAYlB,KAAG;AACzC,eAAA,gBAAgB,OAAO,aAAa;AAGzC,UAAA,eAAe,YAAY,GAAK;AAElC,QAAA7D,QAAO,QAAQsF,SAAAA,eAAe;AAC9B,QAAAtF,QAAO,IAAI;AACX;AAAA,MAAA;AAGE,UAAA,eAAe,WAAW,SAAS,WAAW;AAEhD,QAAAA,QAAO,QAAQsF,SAAAA,eAAe;AAC9B,QAAAtF,QAAO,IAAI;AACX;AAAA,MAAA;AAIF,yBAAmB,WAAW,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,EAAE;AAuBvE,UAAI,OAAO;AACX,UAAI,KAAK;AACT,UAAI,eAAe;AACnB,aAAO,MAAM;AAEP,YAAA,KAAK,mBAAmB,kBAAkB,EAAE;AAG5C,YAAA,KAAK,SAAS,WAAW;AAE3B,UAAAA,QAAO,QAAQsF,SAAAA,eAAe;AAC9B,UAAAtF,QAAO,IAAI;AACJ,iBAAA;AACP;AAAA,QAAA;AAIE,YAAA,KAAK,SAAS,WAAW;AAEtB,eAAA;AACL;AAAA,QAAA;AAIE,YAAA,KAAK,mBAAmB,SAAS,EAAE;AAInC,YAAA,KAAK,SAAS,WAAW;AAC3B,UAAAA,QAAO,QAAQsF,SAAAA,eAAe;AAC9B,UAAAtF,QAAO,IAAI;AACJ,iBAAA;AACP;AAAA,QAAA;AAIE,YAAA,MAAM,SAAS,WAAW;AAE5B,UAAAA,QAAO,QAAQsF,SAAAA,eAAe;AAC9B,UAAAtF,QAAO,IAAI;AACJ,iBAAA;AACP;AAAA,QAAA;AAIF,YAAI,gBAAgB;AACpB,YAAI,KAAK;AACT,YAAI,KAAK;AACT,eAAO,MAAM;AAEX,cAAI;AACJ,cAAI,gBAAgB,GAAG;AAErB,gBAAI,MAAM,SAAS,OAAO,KAAK,OAAO,KAAK;AAAA,UAAA,OACtC;AAEL,gBAAI,OAAO,KAAK;AAAA,UAAA;AAGhB,YAAA;AACF,YAAE,MAAM;AAEF,cAAAH,KAAI,mBAAmB,SAAS,CAAC;AAEvC,cAAIK,WAASL,KAAI,MAAM,IAAI,WAAW;AAE/B,iBAAA;AACL;AAAA,UAAA;AAIF,cAAIA,KAAI,QAAQ;AACT,iBAAA;AACA,iBAAAA;AAAA,UAAA,OACA;AACA,iBAAA;AACA,iBAAAA;AAAA,UAAA;AAGP,cAAI,kBAAkB,IAAI;AACxB;AAAA,UAAA;AAAA,QACF;AAGF,cAAM,kBAAkBO,WAAS,MAAM,iBAAiB,aAAa;AAEnE,UAAA;AAEE,YAAA,iBAAiBS,iBAAS,oBAAoB;AAChD;AAAA,QAAA;AAAA,MACF;AAGA,QAAA;AACF,QAAE,MAAM;AAER,UAAI,MAAM;AACR;AAAA,MAAA;AAGF,UAAI,SAAS,iBAAiB;AAE5B,QAAAb,QAAO,QAAQsF,SAAAA,eAAe;AAC9B,QAAAtF,QAAO,IAAI;AACX;AAAA,MAAA;AAAA,IACF;AAGF,UAAM,cAAcI,WAAS,MAAM,aAAa,IAAI;AAE9C,QAAA,OAAO,MAAM,KAAK,KAAK;AAC7B,UAAM,aAAaA,WAAS,MAAM,YAAY,IAAI;AAClD,UAAM,WAAW;AAEjB,uBAAmB,QAAO;AAAA,EAC5B;AAEA,MAAK;AAAA,GAAL,SAAKoF,yBAAsB;AACzBA,4BAAAA,wBAAA,SAAA,IAAA,EAAA,IAAA;AACAA,4BAAAA,wBAAA,UAAA,IAAA,CAAA,IAAA;AACAA,4BAAAA,wBAAA,SAAA,IAAA,CAAA,IAAA;AACAA,4BAAAA,wBAAA,SAAA,IAAA,CAAA,IAAA;AAAA,EACF,GALK,2BAAA,yBAKJ,CAAA,EAAA;AAED,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,sBAAA;AAGE,aAAQ,WAAkB;AAC1B,aAAQ,WAAkB;AAC1B,aAAQ,WAAU;AAClB,aAAQ,WAAU;AAGlB,aAAA,SAAS,uBAAuB;AAChC,aAAY,eAAG7D,KAAY,GAAG,CAAC;AAC/B,aAAM,SAAGA,KAAY,GAAG,CAAC;AAGzB,aAAM,SAAG;AACT,aAAM,SAAG;AAAA,MAAA;AAET,0BAAA,UAAA,UAAA,WAAA;AACE,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,WAAW;AAEhB,aAAK,SAAS,uBAAuB;AAC9BE,iBAAS,KAAK,YAAY;AAC1BA,iBAAS,KAAK,MAAM;AAE3B,aAAK,SAAS;AACd,aAAK,SAAS;AAAA,MAChB;AAIA,0BAAA,UAAA,aAAA,SAAW6B,QAAqB,QAAuB,QAAe,QAAuB,QAAe,IAAU;AACpH,YAAM,QAAQA,OAAM;AAGpB,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,WAAW;AAEX,aAAA,SAAS,aAAaC,OAAK,EAAE;AAC7B,aAAA,SAAS,aAAaC,OAAK,EAAE;AAElC,YAAI,UAAU,GAAG;AACf,eAAK,SAAS,uBAAuB;AACrC,cAAM,gBAAc,KAAK,SAAS,UAAUF,OAAM,OAAO,CAAC,CAAC;AAC3D,cAAM,gBAAc,KAAK,SAAS,UAAUA,OAAM,OAAO,CAAC,CAAC;AACpD5B,wBAAcoD,UAAQvB,OAAK,aAAW;AACtC7B,wBAAcqD,UAAQvB,OAAK,aAAW;AAC7ChB,kBAAe,KAAK,QAAQuC,UAAQD,QAAM;AAC1C,cAAMtF,KAAI6F,oBAA2B,KAAK,MAAM;AACzC,iBAAA7F;AAAA,QAAA,WAEE8D,OAAM,OAAO,CAAC,MAAMA,OAAM,OAAO,CAAC,GAAG;AAE9C,eAAK,SAAS,uBAAuB;AACrC,cAAM,eAAe,OAAO,UAAUA,OAAM,OAAO,CAAC,CAAC;AACrD,cAAM,eAAe,OAAO,UAAUA,OAAM,OAAO,CAAC,CAAC;AAE9CgC,uBAAa,KAAK,QAAQ9C,QAAelC,QAAM,cAAc,YAAY,GAAG,CAAG;AAC/EwD,wBAAc,KAAK,MAAM;AAChC9B,kBAAe3B,UAAQmD,MAAI,GAAG,KAAK,MAAM;AAEzC1B,uBAAoB,KAAK,cAAc,KAAK,cAAc,KAAK,YAAY;AAC3EJ,wBAAqBqD,UAAQvB,OAAK,KAAK,YAAY;AAEnD,cAAM,gBAAc,OAAO,UAAUF,OAAM,OAAO,CAAC,CAAC;AACpD,cAAM,WAAS,UAAU,QAAQC,OAAK,aAAW;AAE7C,cAAA/D,KAAIqD,QAAe,UAAQxC,QAAM,IAAIwC,QAAekC,UAAQ1E,QAAM;AACtE,cAAIb,KAAI,GAAK;AACJ+F,oBAAQ,KAAK,MAAM;AAC1B,YAAA/F,KAAI,CAACA;AAAA,UAAA;AAEA,iBAAAA;AAAA,QAAA,OAEF;AAEL,eAAK,SAAS,uBAAuB;AACrC,cAAM,eAAe,KAAK,SAAS,UAAU8D,OAAM,OAAO,CAAC,CAAC;AAC5D,cAAM,eAAe,KAAK,SAAS,UAAUA,OAAM,OAAO,CAAC,CAAC;AAErDgC,uBAAa,KAAK,QAAQ9C,QAAelC,QAAM,cAAc,YAAY,GAAG,CAAG;AAC/EwD,wBAAc,KAAK,MAAM;AAChC9B,kBAAe3B,UAAQkD,MAAI,GAAG,KAAK,MAAM;AAEzCzB,uBAAoB,KAAK,cAAc,KAAK,cAAc,KAAK,YAAY;AAC3EJ,wBAAqBoD,UAAQvB,OAAK,KAAK,YAAY;AAEnD,cAAM,gBAAc,KAAK,SAAS,UAAUD,OAAM,OAAO,CAAC,CAAC;AACpD5B,wBAAcqD,UAAQvB,OAAK,aAAW;AAEzC,cAAAhE,KAAIqD,QAAekC,UAAQ1E,QAAM,IAAIwC,QAAeiC,UAAQzE,QAAM;AACtE,cAAIb,KAAI,GAAK;AACJ+F,oBAAQ,KAAK,MAAM;AAC1B,YAAA/F,KAAI,CAACA;AAAA,UAAA;AAEA,iBAAAA;AAAA,QAAA;AAAA,MAEX;AAEA4F,0BAAA,UAAA,UAAA,SAAQ,MAAe,GAAS;AAEzB,aAAA,SAAS,aAAa7B,OAAK,CAAC;AAC5B,aAAA,SAAS,aAAaC,OAAK,CAAC;AAEjC,gBAAQ,KAAK,QAAQ;AAAA,UACnB,KAAK,uBAAuB,UAAU;AACpC,gBAAI,MAAM;AACRE,wBAAiB,OAAOH,MAAI,GAAG,KAAK,MAAM;AACnCG,wBAAU,OAAOF,MAAI,GAAGZ,UAAiBtC,QAAM,IAAI,KAAK,MAAM,CAAC;AAEtE,mBAAK,SAAS,KAAK,SAAS,WAAW,KAAK;AAC5C,mBAAK,SAAS,KAAK,SAAS,WAAW,KAAK;AAAA,YAAA;AAG9CqB,qBAAgB,aAAa,KAAK,SAAS,UAAU,KAAK,MAAM,CAAC;AACjEA,qBAAgB,aAAa,KAAK,SAAS,UAAU,KAAK,MAAM,CAAC;AAE1DD,0BAAcoD,UAAQvB,OAAK,WAAW;AACtC7B,0BAAcqD,UAAQvB,OAAK,WAAW;AAEvC,gBAAA,MAAMX,QAAekC,UAAQ,KAAK,MAAM,IAAIlC,QAAeiC,UAAQ,KAAK,MAAM;AAC7E,mBAAA;AAAA,UAAA;AAAA,UAGT,KAAK,uBAAuB,SAAS;AACnC9C,oBAAe3B,UAAQkD,MAAI,GAAG,KAAK,MAAM;AACzC7B,0BAAqBoD,UAAQvB,OAAK,KAAK,YAAY;AAEnD,gBAAI,MAAM;AACDG,wBAAU,OAAOF,MAAI,GAAGZ,UAAiBtC,QAAM,IAAID,QAAM,CAAC;AAEjE,mBAAK,SAAS;AACd,mBAAK,SAAS,KAAK,SAAS,WAAW,KAAK;AAAA,YAAA;AAG9CsB,qBAAgB,aAAa,KAAK,SAAS,UAAU,KAAK,MAAM,CAAC;AAC1DD,0BAAcqD,UAAQvB,OAAK,WAAW;AAEvC,gBAAA,MAAMX,QAAekC,UAAQ1E,QAAM,IAAIwC,QAAeiC,UAAQzE,QAAM;AACnE,mBAAA;AAAA,UAAA;AAAA,UAGT,KAAK,uBAAuB,SAAS;AACnC2B,oBAAe3B,UAAQmD,MAAI,GAAG,KAAK,MAAM;AACzC9B,0BAAqBqD,UAAQvB,OAAK,KAAK,YAAY;AAEnD,gBAAI,MAAM;AACDE,wBAAU,OAAOH,MAAI,GAAGX,UAAiBtC,QAAM,IAAID,QAAM,CAAC;AAEjE,mBAAK,SAAS;AACd,mBAAK,SAAS,KAAK,SAAS,WAAW,KAAK;AAAA,YAAA;AAG9CsB,qBAAgB,aAAa,KAAK,SAAS,UAAU,KAAK,MAAM,CAAC;AAC1DD,0BAAcoD,UAAQvB,OAAK,WAAW;AAEvC,gBAAA,MAAMV,QAAeiC,UAAQzE,QAAM,IAAIwC,QAAekC,UAAQ1E,QAAM;AACnE,mBAAA;AAAA,UAAA;AAAA,UAGT;AAEE,gBAAI,MAAM;AACR,mBAAK,SAAS;AACd,mBAAK,SAAS;AAAA,YAAA;AAET,mBAAA;AAAA,QAAA;AAAA,MAEb;AAEiB,0BAAA,UAAA,oBAAjB,SAAkB,GAAS;AAClB,eAAA,KAAK,QAAQ,MAAM,CAAC;AAAA,MAC7B;AAEQ,0BAAA,UAAA,WAAR,SAAS,GAAS;AACT,eAAA,KAAK,QAAQ,OAAO,CAAC;AAAA,MAC9B;AACD+E,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAEgB,MAAM,qBAAqB,IAAI;AAGhD,eAAa,QAAQ;AACrB,eAAa,SAAS;AC9dL,MAAMvF,aAAW,KAAK;AACtB,MAAMC,cAAY,KAAK;AACvB,MAAME,aAAW,KAAK;AAGvC,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAwF,YAAA;AAEE,aAAE,KAAW;AAEb,aAAM,SAAW;AACjB,aAAkB,qBAAW;AAC7B,aAAkB,qBAAW;AAC7B,aAAY,eAAY;AACxB,aAAU,aAAY;AAGtB,aAAO,UAAW;AAElB,aAAO,UAAW;AAAA,MAAA;AAEb,gBAAA,UAAA,QAAL,SAAM,IAAU;AACV,YAAA,KAAK,KAAK,GAAK;AACjB,eAAK,UAAU,KAAK;AAAA,QAAA;AAEtB,aAAK,KAAK;AACV,aAAK,SAAS,MAAM,IAAI,IAAI,IAAI;AAC3B,aAAA,UAAU,KAAK,KAAK;AAAA,MAC3B;AACDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAGgB,MAAM,YAAY,IAAI;AACtB,MAAM,IAAIjE,KAAY,GAAG,CAAC;AAC1B,MAAM,IAAIA,KAAY,GAAG,CAAC;AAC1B,MAAM,cAAcA,KAAY,GAAG,CAAC;AACpC,MAAM,QAAQ,IAAI;AAClB,MAAM,SAAS,IAAI;AACnB,MAAM,SAAS,IAAI;AACnB,MAAM,UAAU,IAAI;AACpB,MAAM,UAAU,IAAI;AAOrC,MAAA;AAAA;AAAA,IAAA,WAAA;AAOE,eAAAkE,gBAAY,SAAgB;AAC1B,aAAK,UAAU;AACf,aAAK,UAAU,CAAA;AACf,aAAK,WAAW,CAAA;AAAA,MAAA;AAGlB,sBAAA,UAAA,UAAA,WAAA;AACE,aAAK,QAAQ,SAAS;AACtB,aAAK,SAAS,SAAS;AAAA,MACzB;AAEA,aAAA,eAAIA,gBAAc,WAAA,kBAAA;AAAA,QAAlB,KAAA,WAAA;AACE,cAAM,UAAU,KAAK;AACrB,cAAM,UAAU,KAAK;AACrB,kBAAQ,SAAS;AACjB,mBAAS,IAAI,GAAG,IAAI,QAAQ,SAAS,QAAQ,EAAE,GAAG;AAChD,oBAAQ,KAAK,QAAQ,SAAS,CAAC,EAAE,aAAa;AAAA,UAAA;AAEzC,iBAAA;AAAA,QACT;AAAA;;OAAC;AAED,aAAA,eAAIA,gBAAe,WAAA,mBAAA;AAAA,QAAnB,KAAA,WAAA;AACE,cAAM,UAAU,KAAK;AACrB,cAAM,WAAW,KAAK;AACtB,mBAAS,SAAS;AAClB,mBAAS,IAAI,GAAG,IAAI,QAAQ,SAAS,QAAQ,EAAE,GAAG;AAChD,qBAAS,KAAK,QAAQ,SAAS,CAAC,EAAE,cAAc;AAAA,UAAA;AAE3C,iBAAA;AAAA,QACT;AAAA;;OAAC;AACFA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAKD,MAAA;AAAA;AAAA,IAAA,WAAA;AAOE,eAAAC,QAAY,OAAY;AACtB,aAAK,UAAU;AACf,aAAK,UAAU,CAAA;AACf,aAAK,WAAW,CAAA;AAChB,aAAK,aAAa,CAAA;AAClB,aAAK,WAAW,CAAA;AAAA,MAAA;AAGlB,cAAA,UAAA,QAAA,WAAA;AACE,aAAK,QAAQ,SAAS;AACtB,aAAK,SAAS,SAAS;AACvB,aAAK,WAAW,SAAS;AACzB,aAAK,SAAS,SAAS;AAAA,MACzB;AAEO,cAAA,UAAA,UAAP,SAAQ,MAAU;AAEX,aAAA,SAAS,KAAK,IAAI;AAAA,MAMzB;AAEU,cAAA,UAAA,aAAV,SAAW,SAAgB;AAEpB,aAAA,WAAW,KAAK,OAAO;AAAA,MAC9B;AAEQ,cAAA,UAAA,WAAR,SAAS,OAAY;AAEd,aAAA,SAAS,KAAK,KAAK;AAAA,MAC1B;AAEU,cAAA,UAAA,aAAV,SAAW,MAAc;AACvB,YAAM,QAAQ,KAAK;AAGnB,iBAASpG,KAAI,MAAM,YAAYA,IAAGA,KAAIA,GAAE,QAAQ;AAC9C,UAAAA,GAAE,eAAe;AAAA,QAAA;AAEnB,iBAAS,MAAI,MAAM,eAAe,KAAG,MAAI,IAAE,QAAQ;AACjD,cAAE,eAAe;AAAA,QAAA;AAEnB,iBAAS,IAAI,MAAM,aAAa,GAAG,IAAI,EAAE,QAAQ;AAC/C,YAAE,eAAe;AAAA,QAAA;AAInB,YAAM,QAAQ,KAAK;AAEnB,iBAAS,OAAO,MAAM,YAAY,MAAM,OAAO,KAAK,QAAQ;AAE1D,cAAI,KAAK,cAAc;AACrB;AAAA,UAAA;AAGF,cAAI,KAAK,aAAa,SAAS,KAAK,cAAc,OAAO;AACvD;AAAA,UAAA;AAIE,cAAA,KAAK,YAAY;AACnB;AAAA,UAAA;AAIF,eAAK,MAAK;AAEV,gBAAM,KAAK,IAAI;AAEf,eAAK,eAAe;AAGb,iBAAA,MAAM,SAAS,GAAG;AAEjB,gBAAAA,KAAI,MAAM;AAEhB,iBAAK,QAAQA,EAAC;AAGd,YAAAA,GAAE,cAAc;AAIZ,gBAAAA,GAAE,YAAY;AAChB;AAAA,YAAA;AAIF,qBAAS,KAAKA,GAAE,eAAe,IAAI,KAAK,GAAG,MAAM;AAC/C,kBAAM,UAAU,GAAG;AAGnB,kBAAI,QAAQ,cAAc;AACxB;AAAA,cAAA;AAIF,kBAAI,QAAQ,eAAe,SAAS,QAAQ,gBAAgB,OAAO;AACjE;AAAA,cAAA;AAII,kBAAA,UAAU,QAAQ,WAAW;AAC7B,kBAAA,UAAU,QAAQ,WAAW;AACnC,kBAAI,WAAW,SAAS;AACtB;AAAA,cAAA;AAGF,mBAAK,WAAW,OAAO;AACvB,sBAAQ,eAAe;AAEvB,kBAAM,QAAQ,GAAG;AAGjB,kBAAI,MAAM,cAAc;AACtB;AAAA,cAAA;AAIF,oBAAM,KAAK,KAAK;AAChB,oBAAM,eAAe;AAAA,YAAA;AAIvB,qBAAS,KAAKA,GAAE,aAAa,IAAI,KAAK,GAAG,MAAM;AACzC,kBAAA,GAAG,MAAM,gBAAgB,MAAM;AACjC;AAAA,cAAA;AAGF,kBAAM,QAAQ,GAAG;AAGb,kBAAA,MAAM,cAAc,OAAO;AAC7B;AAAA,cAAA;AAGG,mBAAA,SAAS,GAAG,KAAK;AACtB,iBAAG,MAAM,eAAe;AAExB,kBAAI,MAAM,cAAc;AACtB;AAAA,cAAA;AAIF,oBAAM,KAAK,KAAK;AAChB,oBAAM,eAAe;AAAA,YAAA;AAAA,UACvB;AAGF,eAAK,YAAY,IAAI;AAGrB,mBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,EAAE,GAAG;AAGvC,gBAAAA,KAAI,KAAK,SAAS,CAAC;AACrB,gBAAAA,GAAE,YAAY;AAChB,cAAAA,GAAE,eAAe;AAAA,YAAA;AAAA,UACnB;AAAA,QACF;AAAA,MAEJ;AAEW,cAAA,UAAA,cAAX,SAAY,MAAc;AAExB,YAAM,QAAQ,KAAK;AACnB,YAAM,UAAU,MAAM;AACtB,YAAM,aAAa,MAAM;AAEzB,YAAM,IAAI,KAAK;AAGf,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,EAAE,GAAG;AACvC,cAAA,OAAO,KAAK,SAAS,CAAC;AAE5BqC,mBAAgB,GAAG,KAAK,QAAQ,CAAC;AAC3B,cAAAxB,KAAI,KAAK,QAAQ;AAChBwB,mBAAS,GAAG,KAAK,gBAAgB;AACxC,cAAI,IAAI,KAAK;AAGbA,mBAAgB,KAAK,QAAQ,IAAI,KAAK,QAAQ,CAAC;AAC1C,eAAA,QAAQ,KAAK,KAAK,QAAQ;AAE3B,cAAA,KAAK,aAAa;AAEpBgB,0BAAqB,GAAG,IAAI,KAAK,gBAAgB,OAAO;AACxDA,0BAAqB,GAAG,IAAI,KAAK,WAAW,KAAK,OAAO;AACnD,iBAAA,IAAI,KAAK,SAAS,KAAK;AAY5BC,sBAAiB,GAAG,KAAO,IAAM,IAAI,KAAK,kBAAkB,CAAC;AACxD,iBAAA,KAAO,IAAM,IAAI,KAAK;AAAA,UAAA;AAG7BjB,mBAAgB,KAAK,WAAW,GAAG,CAAC;AACpC,eAAK,WAAW,IAAIxB;AACpBwB,mBAAgB,KAAK,WAAW,GAAG,CAAC;AACpC,eAAK,WAAW,IAAI;AAAA,QAAA;AAGtB,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,EAAE,GAAG;AACzC,cAAA,UAAU,KAAK,WAAW,CAAC;AACjC,kBAAQ,eAAe,IAAI;AAAA,QAAA;AAG7B,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,EAAE,GAAG;AACzC,cAAA,UAAU,KAAK,WAAW,CAAC;AACjC,kBAAQ,uBAAuB,IAAI;AAAA,QAAA;AAGrC,YAAI,KAAK,cAAc;AAErB,mBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,EAAE,GAAG;AACzC,gBAAA,UAAU,KAAK,WAAW,CAAC;AACjC,oBAAQ,oBAAoB,IAAI;AAAA,UAAA;AAAA,QAClC;AAGF,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,EAAE,GAAG;AACvC,cAAA,QAAQ,KAAK,SAAS,CAAC;AAC7B,gBAAM,wBAAwB,IAAI;AAAA,QAAA;AAIpC,iBAAS,IAAI,GAAG,IAAI,KAAK,oBAAoB,EAAE,GAAG;AAChD,mBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,EAAE,GAAG;AACvC,gBAAA,QAAQ,KAAK,SAAS,CAAC;AAC7B,kBAAM,yBAAyB,IAAI;AAAA,UAAA;AAGrC,mBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,EAAE,GAAG;AACzC,gBAAA,UAAU,KAAK,WAAW,CAAC;AACjC,oBAAQ,wBAAwB,IAAI;AAAA,UAAA;AAAA,QACtC;AAIF,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,EAAE,GAAG;AACzC,cAAA,UAAU,KAAK,WAAW,CAAC;AACjC,kBAAQ,wBAAwB,IAAI;AAAA,QAAA;AAItC,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,EAAE,GAAG;AACvC,cAAA,OAAO,KAAK,SAAS,CAAC;AAE5BA,mBAAgB,GAAG,KAAK,WAAW,CAAC;AAChC,cAAAxB,KAAI,KAAK,WAAW;AACxBwB,mBAAgB,GAAG,KAAK,WAAW,CAAC;AAChC,cAAA,IAAI,KAAK,WAAW;AAGjBiB,oBAAU,aAAa,GAAG,CAAC;AAC5B,cAAA,uBAAuBa,cAAqB,WAAW;AACzD,cAAA,uBAAuBjD,iBAAS,uBAAuB;AACzD,gBAAM,QAAQA,iBAAS,iBAAiBV,YAAU,oBAAoB;AAC/D6F,oBAAQ,GAAG,KAAK;AAAA,UAAA;AAGzB,cAAMzD,YAAW,IAAI;AACjB,cAAAA,YAAWA,YAAW1B,iBAAS,oBAAoB;AACrD,gBAAM,QAAQA,iBAAS,cAAcX,WAASqC,SAAQ;AACjD,iBAAA;AAAA,UAAA;AAIAS,wBAAc,GAAG,GAAG,CAAC;AAC5B,UAAAxC,MAAK,IAAI;AAETwB,mBAAgB,KAAK,WAAW,GAAG,CAAC;AACpC,eAAK,WAAW,IAAIxB;AACpBwB,mBAAgB,KAAK,WAAW,GAAG,CAAC;AACpC,eAAK,WAAW,IAAI;AAAA,QAAA;AAItB,YAAI,iBAAiB;AACrB,iBAAS,IAAI,GAAG,IAAI,KAAK,oBAAoB,EAAE,GAAG;AAChD,cAAI,gBAAgB;AACpB,mBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,EAAE,GAAG;AACzC,gBAAA,UAAU,KAAK,WAAW,CAAC;AAC3B,gBAAA,aAAa,QAAQ,wBAAwB,IAAI;AACvC,4BAAA3B,WAAS,eAAe,UAAU;AAAA,UAAA;AAI9C,cAAA,eAAe,iBAAiB,KAAOQ,iBAAS;AAEtD,cAAI,aAAa;AACjB,mBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,EAAE,GAAG;AACvC,gBAAA,QAAQ,KAAK,SAAS,CAAC;AACvB,gBAAA,YAAY,MAAM,yBAAyB,IAAI;AACrD,yBAAa,cAAc;AAAA,UAAA;AAG7B,cAAI,gBAAgB,YAAY;AAEb,6BAAA;AACjB;AAAA,UAAA;AAAA,QACF;AAIF,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,EAAE,GAAG;AACvC,cAAA,OAAO,KAAK,SAAS,CAAC;AAE5BmB,mBAAgB,KAAK,QAAQ,GAAG,KAAK,WAAW,CAAC;AAC5C,eAAA,QAAQ,IAAI,KAAK,WAAW;AACjCA,mBAAgB,KAAK,kBAAkB,KAAK,WAAW,CAAC;AACnD,eAAA,oBAAoB,KAAK,WAAW;AACzC,eAAK,qBAAoB;AAAA,QAAA;AAG3B,aAAK,gBAAe;AAEpB,YAAI,YAAY;AACd,cAAI,eAAe;AAEnB,cAAM,YAAYnB,iBAAS;AAC3B,cAAM,YAAYA,iBAAS;AAE3B,mBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,EAAE,GAAG;AACvC,gBAAA,OAAO,KAAK,SAAS,CAAC;AACxB,gBAAA,KAAK,YAAY;AACnB;AAAA,YAAA;AAGF,gBAAK,KAAK,mBAAmB,SACvB,KAAK,oBAAoB,KAAK,oBAAoB,aAClDiD,cAAqB,KAAK,gBAAgB,IAAI,WAAY;AAC9D,mBAAK,cAAc;AACJ,6BAAA;AAAA,YAAA,OACV;AACL,mBAAK,eAAe;AACL,6BAAAzD,WAAS,cAAc,KAAK,WAAW;AAAA,YAAA;AAAA,UACxD;AAGE,cAAA,gBAAgBQ,iBAAS,eAAe,gBAAgB;AAC1D,qBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,EAAE,GAAG;AACvC,kBAAA,OAAO,KAAK,SAAS,CAAC;AAC5B,mBAAK,SAAS,KAAK;AAAA,YAAA;AAAA,UACrB;AAAA,QACF;AAAA,MAEJ;AAKa,cAAA,UAAA,gBAAb,SAAc,MAAc;AAC1B,YAAM,QAAQ,KAAK;AAEnB,YAAI,MAAM,gBAAgB;AACxB,mBAASlB,KAAI,MAAM,YAAYA,IAAGA,KAAIA,GAAE,QAAQ;AAC9C,YAAAA,GAAE,eAAe;AACjB,YAAAA,GAAE,QAAQ,SAAS;AAAA,UAAA;AAGrB,mBAAS,MAAI,MAAM,eAAe,KAAG,MAAI,IAAE,QAAQ;AAEjD,gBAAE,YAAY;AACd,gBAAE,eAAe;AACjB,gBAAE,aAAa;AACf,gBAAE,QAAQ;AAAA,UAAA;AAAA,QACZ;AAIF,eAAO,MAAM;AAEX,cAAI,aAA6B;AACjC,cAAI,WAAW;AAEf,mBAAS,MAAI,MAAM,eAAe,KAAG,MAAI,IAAE,QAAQ;AAE7C,gBAAA,IAAE,eAAe,OAAO;AAC1B;AAAA,YAAA;AAIE,gBAAA,IAAE,aAAakB,iBAAS,aAAa;AACvC;AAAA,YAAA;AAGF,gBAAI,QAAQ;AACZ,gBAAI,IAAE,WAAW;AAEf,sBAAQ,IAAE;AAAA,YAAA,OACL;AACC,kBAAA,OAAK,IAAE;AACP,kBAAA,OAAK,IAAE;AAGb,kBAAI,KAAG,SAAA,KAAc,KAAG,YAAY;AAClC;AAAA,cAAA;AAGI,kBAAA,OAAK,KAAG;AACR,kBAAA,OAAK,KAAG;AAId,kBAAM,UAAU,KAAG,QAAa,KAAA,CAAC,KAAG,SAAQ;AAC5C,kBAAM,UAAU,KAAG,QAAa,KAAA,CAAC,KAAG,SAAQ;AAGxC,kBAAA,WAAW,SAAS,WAAW,OAAO;AACxC;AAAA,cAAA;AAGF,kBAAM,WAAW,KAAG,SAAc,KAAA,CAAC,KAAG,UAAS;AAC/C,kBAAM,WAAW,KAAG,SAAc,KAAA,CAAC,KAAG,UAAS;AAG3C,kBAAA,YAAY,SAAS,YAAY,OAAO;AAC1C;AAAA,cAAA;AAKE,kBAAA,SAAS,KAAG,QAAQ;AAExB,kBAAI,KAAG,QAAQ,SAAS,KAAG,QAAQ,QAAQ;AACzC,yBAAS,KAAG,QAAQ;AACjB,qBAAA,QAAQ,QAAQ,MAAM;AAAA,cAAA,WAChB,KAAG,QAAQ,SAAS,KAAG,QAAQ,QAAQ;AAChD,yBAAS,KAAG,QAAQ;AACjB,qBAAA,QAAQ,QAAQ,MAAM;AAAA,cAAA;AAKrB,kBAAA,SAAS,IAAE;AACX,kBAAA,SAAS,IAAE;AAEF,mBAAG;AACH,mBAAG;AAGlB,oBAAM,OAAO,IAAI,KAAG,SAAA,GAAY,MAAM;AACtC,oBAAM,OAAO,IAAI,KAAG,SAAA,GAAY,MAAM;AAChC,oBAAA,OAAO,IAAI,KAAG,OAAO;AACrB,oBAAA,OAAO,IAAI,KAAG,OAAO;AAC3B,oBAAM,OAAO;AAEb,2BAAa,QAAQ,KAAK;AAG1B,kBAAM,OAAO,OAAO;AAChB,kBAAA,OAAO,SAASyE,SAAA,eAAe,YAAY;AAC7C,wBAAQjF,WAAS,UAAU,IAAM,UAAU,MAAM,CAAG;AAAA,cAAA,OAC/C;AACG,wBAAA;AAAA,cAAA;AAGV,kBAAE,QAAQ;AACV,kBAAE,YAAY;AAAA,YAAA;AAGhB,gBAAI,QAAQ,UAAU;AAEP,2BAAA;AACF,yBAAA;AAAA,YAAA;AAAA,UACb;AAGF,cAAI,cAAc,QAAQ,IAAM,KAAO,UAAU,UAAU;AAEzD,kBAAM,iBAAiB;AACvB;AAAA,UAAA;AAII,cAAA,KAAK,WAAW;AAChB,cAAA,KAAK,WAAW;AAChB,cAAA,KAAK,GAAG;AACR,cAAA,KAAK,GAAG;AAEN,kBAAA,IAAI,GAAG,OAAO;AACd,kBAAA,IAAI,GAAG,OAAO;AAEtB,aAAG,QAAQ,QAAQ;AACnB,aAAG,QAAQ,QAAQ;AAGnB,qBAAW,OAAO,KAAK;AACvB,qBAAW,YAAY;AACvB,YAAE,WAAW;AAGb,cAAI,WAAW,eAAe,SAAS,WAAW,gBAAgB,OAAO;AAEvE,uBAAW,WAAW,KAAK;AACxB,eAAA,QAAQ,IAAI,OAAO;AACnB,eAAA,QAAQ,IAAI,OAAO;AACtB,eAAG,qBAAoB;AACvB,eAAG,qBAAoB;AACvB;AAAA,UAAA;AAGF,aAAG,SAAS,IAAI;AAChB,aAAG,SAAS,IAAI;AAGhB,eAAK,MAAK;AACV,eAAK,QAAQ,EAAE;AACf,eAAK,QAAQ,EAAE;AACf,eAAK,WAAW,UAAU;AAE1B,aAAG,eAAe;AAClB,aAAG,eAAe;AAClB,qBAAW,eAAe;AAGpB,cAAA,SAAS,CAAE,IAAI,EAAE;AACvB,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,EAAE,GAAG;AAChC,gBAAA,OAAO,OAAO,CAAC;AACjB,gBAAA,KAAK,aAAa;AACpB,uBAAS,KAAK,KAAK,eAAe,IAAI,KAAK,GAAG,MAAM;AAIlD,oBAAM,UAAU,GAAG;AAGnB,oBAAI,QAAQ,cAAc;AACxB;AAAA,gBAAA;AAIF,oBAAM,QAAQ,GAAG;AACb,oBAAA,MAAM,UAAW,KAAI,CAAC,KAAK,cAAc,CAAC,MAAM,YAAY;AAC9D;AAAA,gBAAA;AAII,oBAAA,UAAU,QAAQ,WAAW;AAC7B,oBAAA,UAAU,QAAQ,WAAW;AACnC,oBAAI,WAAW,SAAS;AACtB;AAAA,gBAAA;AAIK,uBAAA,IAAI,MAAM,OAAO;AACpB,oBAAA,MAAM,gBAAgB,OAAO;AAC/B,wBAAM,QAAQ,QAAQ;AAAA,gBAAA;AAIxB,wBAAQ,OAAO,KAAK;AAIpB,oBAAI,QAAQ,eAAe,SAAS,QAAQ,gBAAgB,OAAO;AAC3D,wBAAA,QAAQ,IAAI,MAAM;AACxB,wBAAM,qBAAoB;AAC1B;AAAA,gBAAA;AAIF,wBAAQ,eAAe;AACvB,qBAAK,WAAW,OAAO;AAGvB,oBAAI,MAAM,cAAc;AACtB;AAAA,gBAAA;AAIF,sBAAM,eAAe;AAEjB,oBAAA,CAAC,MAAM,YAAY;AACrB,wBAAM,SAAS,IAAI;AAAA,gBAAA;AAGrB,qBAAK,QAAQ,KAAK;AAAA,cAAA;AAAA,YACpB;AAAA,UACF;AAGF,oBAAU,OAAO,IAAM,YAAY,KAAK,EAAE;AAC1C,oBAAU,UAAU;AACpB,oBAAU,qBAAqB;AAC/B,oBAAU,qBAAqB,KAAK;AACpC,oBAAU,eAAe;AAEpB,eAAA,eAAe,WAAW,IAAI,EAAE;AAGrC,mBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,EAAE,GAAG;AACvC,gBAAA,OAAO,KAAK,SAAS,CAAC;AAC5B,iBAAK,eAAe;AAEhB,gBAAA,CAAC,KAAK,aAAa;AACrB;AAAA,YAAA;AAGF,iBAAK,oBAAmB;AAGxB,qBAAS,KAAK,KAAK,eAAe,IAAI,KAAK,GAAG,MAAM;AAClD,iBAAG,QAAQ,YAAY;AACvB,iBAAG,QAAQ,eAAe;AAAA,YAAA;AAAA,UAC5B;AAMF,gBAAM,gBAAe;AAErB,cAAI,MAAM,eAAe;AACvB,kBAAM,iBAAiB;AACvB;AAAA,UAAA;AAAA,QACF;AAAA,MAEJ;AAEA0F,cAAA,UAAA,iBAAA,SAAe,SAAmB,MAAY,MAAU;AAGtD,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,EAAE,GAAG;AACvC,cAAA,OAAO,KAAK,SAAS,CAAC;AAC5B/D,mBAAgB,KAAK,WAAW,GAAG,KAAK,QAAQ,CAAC;AAC5C,eAAA,WAAW,IAAI,KAAK,QAAQ;AACjCA,mBAAgB,KAAK,WAAW,GAAG,KAAK,gBAAgB;AACnD,eAAA,WAAW,IAAI,KAAK;AAAA,QAAA;AAG3B,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,EAAE,GAAG;AACzC,cAAA,UAAU,KAAK,WAAW,CAAC;AACjC,kBAAQ,eAAe,OAAO;AAAA,QAAA;AAIhC,iBAAS,IAAI,GAAG,IAAI,QAAQ,oBAAoB,EAAE,GAAG;AACnD,cAAI,gBAAgB;AACpB,mBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,EAAE,GAAG;AACzC,gBAAA,UAAU,KAAK,WAAW,CAAC;AACjC,gBAAM,aAAa,QAAQ,2BAA2B,SAAS,MAAM,IAAI;AACzD,4BAAA3B,WAAS,eAAe,UAAU;AAAA,UAAA;AAI9C,cAAA,eAAe,iBAAiB,OAAOQ,iBAAS;AACtD,cAAI,cAAc;AAChB;AAAA,UAAA;AAAA,QACF;AAGF,YAAA;AA+BAmB,iBAAgB,KAAK,QAAQ,IAAI,KAAK,WAAW,CAAC;AAC7C,aAAA,QAAQ,KAAK,KAAK,WAAW;AAClCA,iBAAgB,KAAK,QAAQ,IAAI,KAAK,WAAW,CAAC;AAC7C,aAAA,QAAQ,KAAK,KAAK,WAAW;AAIlC,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,EAAE,GAAG;AACzC,cAAA,UAAU,KAAK,WAAW,CAAC;AACjC,kBAAQ,uBAAuB,OAAO;AAAA,QAAA;AAIxC,iBAAS,IAAI,GAAG,IAAI,QAAQ,oBAAoB,EAAE,GAAG;AACnD,mBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,EAAE,GAAG;AACzC,gBAAA,UAAU,KAAK,WAAW,CAAC;AACjC,oBAAQ,wBAAwB,OAAO;AAAA,UAAA;AAAA,QACzC;AAMF,YAAM,IAAI,QAAQ;AAGlB,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,EAAE,GAAG;AACvC,cAAA,OAAO,KAAK,SAAS,CAAC;AAE5BA,mBAAgB,GAAG,KAAK,WAAW,CAAC;AAChC,cAAAxB,KAAI,KAAK,WAAW;AACxBwB,mBAAgB,GAAG,KAAK,WAAW,CAAC;AAChC,cAAA,IAAI,KAAK,WAAW;AAGjBiB,oBAAU,aAAa,GAAG,CAAC;AAC5B,cAAA,uBAAuBa,cAAqB,WAAW;AACzD,cAAA,uBAAuBjD,iBAAS,uBAAuB;AACzD,gBAAM,QAAQA,iBAAS,iBAAiBV,YAAU,oBAAoB;AAC/D6F,oBAAQ,GAAG,KAAK;AAAA,UAAA;AAGzB,cAAMzD,YAAW,IAAI;AACjB,cAAAA,YAAWA,YAAW1B,iBAAS,oBAAoB;AACrD,gBAAM,QAAQA,iBAAS,cAAcX,WAASqC,SAAQ;AACjD,iBAAA;AAAA,UAAA;AAIAS,wBAAc,GAAG,GAAG,CAAC;AAC5B,UAAAxC,MAAK,IAAI;AAETwB,mBAAgB,KAAK,WAAW,GAAG,CAAC;AACpC,eAAK,WAAW,IAAIxB;AACpBwB,mBAAgB,KAAK,WAAW,GAAG,CAAC;AACpC,eAAK,WAAW,IAAI;AAGpBA,mBAAgB,KAAK,QAAQ,GAAG,CAAC;AACjC,eAAK,QAAQ,IAAIxB;AACVwB,mBAAS,KAAK,kBAAkB,CAAC;AACxC,eAAK,oBAAoB;AACzB,eAAK,qBAAoB;AAAA,QAAA;AAG3B,aAAK,gBAAe;AAAA,MACtB;AAGA,cAAA,UAAA,kBAAA,WAAA;AACE,iBAAS,MAAI,GAAG,MAAI,KAAK,WAAW,QAAQ,EAAE,KAAG;AACzC,cAAA,UAAU,KAAK,WAAW,GAAC;AACjC,eAAK,QAAQ,UAAU,SAAS,QAAQ,SAAS;AAAA,QAAA;AAAA,MAErD;AACD+D,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAGD,SAAO,WAAW;ACx2BlB,MAAA;AAAA;AAAA,IAAA,WAAA;AAOE,eAAAE,OAAYzF,IAAIb,IAAIuB,IAAIxB,IAAE;AACxB,YAAI,OAAOc,OAAM,YAAYA,OAAM,MAAM;AAClC,eAAA,KAAK,KAAK,MAAMA,EAAC;AACjB,eAAA,KAAK,KAAK,MAAMb,EAAC;AAAA,QAAA,WACb,OAAOa,OAAM,UAAU;AAChC,eAAK,KAAK,KAAK,IAAIA,IAAGU,EAAC;AACvB,eAAK,KAAK,KAAK,IAAIvB,IAAGD,EAAC;AAAA,QAAA,OAClB;AACA,eAAA,KAAK,KAAK;AACV,eAAA,KAAK,KAAK;;MACjB;AAIF,aAAA,UAAA,WAAA,WAAA;AACS,eAAA,KAAK,UAAU,IAAI;AAAA,MAC5B;AAEc,aAAA,UAAd,SAAe,KAAQ;AACrB,YAAI,QAAQ,QAAQ,OAAO,QAAQ,aAAa;AACvC,iBAAA;AAAA,QAAA;AAEF,eAAA,KAAK,QAAQ,IAAI,EAAE,KAAK,KAAK,QAAQ,IAAI,EAAE;AAAA,MACpD;AAEa,aAAA,SAAb,SAAc,GAAM;AAAA,MAEpB;AAKAuG,aAAG,UAAA,MAAH,SAAIzF,IAAGb,IAAIuB,IAAIxB,IAAE;AACX,YAAA,OAAOc,OAAM,YAAY,OAAOb,OAAM,YAAY,OAAOuB,OAAM,YAC9D,OAAOxB,OAAM,UAAU;AACrB,eAAA,GAAG,OAAOc,IAAGU,EAAC;AACd,eAAA,GAAG,OAAOvB,IAAGD,EAAC;AAAA,mBAEV,OAAOc,OAAM,YAAY,OAAOb,OAAM,UAAU;AACpD,eAAA,GAAG,QAAQa,EAAC;AACZ,eAAA,GAAG,QAAQb,EAAC;AAAA,QAAA,WAER,OAAOa,OAAM,UAAU;AAE3B,eAAA,GAAG,QAAQA,GAAE,EAAE;AACf,eAAA,GAAG,QAAQA,GAAE,EAAE;AAAA,QAAA,MAEf;AAAA,MAGT;AAEA,aAAA,UAAA,cAAA,WAAA;AACE,aAAK,GAAG,IAAI;AACZ,aAAK,GAAG,IAAI;AACZ,aAAK,GAAG,IAAI;AACZ,aAAK,GAAG,IAAI;AAAA,MACd;AAEA,aAAA,UAAA,UAAA,WAAA;AACE,aAAK,GAAG,IAAI;AACZ,aAAK,GAAG,IAAI;AACZ,aAAK,GAAG,IAAI;AACZ,aAAK,GAAG,IAAI;AAAA,MACd;AAEA,aAAA,UAAA,aAAA,WAAA;AACQ,YAAAA,KAAI,KAAK,GAAG;AACZ,YAAAb,KAAI,KAAK,GAAG;AACZ,YAAAuB,KAAI,KAAK,GAAG;AACZ,YAAAxB,KAAI,KAAK,GAAG;AACd,YAAA,MAAMc,KAAId,KAAIC,KAAIuB;AACtB,YAAI,QAAQ,GAAK;AACf,gBAAM,IAAM;AAAA,QAAA;AAER,YAAA,MAAM,IAAI+E;AACZ,YAAA,GAAG,IAAI,MAAMvG;AACb,YAAA,GAAG,IAAI,CAAC,MAAMC;AACd,YAAA,GAAG,IAAI,CAAC,MAAMuB;AACd,YAAA,GAAG,IAAI,MAAMV;AACV,eAAA;AAAA,MACT;AAMK,aAAA,UAAA,QAAL,SAAMD,IAAY;AAEV,YAAAC,KAAI,KAAK,GAAG;AACZ,YAAAb,KAAI,KAAK,GAAG;AACZ,YAAAuB,KAAI,KAAK,GAAG;AACZ,YAAAxB,KAAI,KAAK,GAAG;AACd,YAAA,MAAMc,KAAId,KAAIC,KAAIuB;AACtB,YAAI,QAAQ,GAAK;AACf,gBAAM,IAAM;AAAA,QAAA;AAER,YAAA,IAAI,KAAK;AACf,UAAE,IAAI,OAAOxB,KAAIa,GAAE,IAAIZ,KAAIY,GAAE;AAC7B,UAAE,IAAI,OAAOC,KAAID,GAAE,IAAIW,KAAIX,GAAE;AACtB,eAAA;AAAA,MACT;AAQO,aAAA,MAAP,SAAW,IAAIA,IAAC;AACd,YAAIA,MAAK,OAAOA,MAAK,OAAOA,IAAG;AAEvB,cAAAN,KAAI,GAAG,GAAG,IAAIM,GAAE,IAAI,GAAG,GAAG,IAAIA,GAAE;AAChC,cAAA,IAAI,GAAG,GAAG,IAAIA,GAAE,IAAI,GAAG,GAAG,IAAIA,GAAE;AAC/B,iBAAA,KAAK,IAAIN,IAAG,CAAC;AAAA,QAEX,WAAAM,MAAK,QAAQA,MAAK,QAAQA,IAAG;AAGhC,cAAAC,KAAI,GAAG,GAAG,IAAID,GAAE,GAAG,IAAI,GAAG,GAAG,IAAIA,GAAE,GAAG;AACtC,cAAAZ,KAAI,GAAG,GAAG,IAAIY,GAAE,GAAG,IAAI,GAAG,GAAG,IAAIA,GAAE,GAAG;AACtC,cAAAW,KAAI,GAAG,GAAG,IAAIX,GAAE,GAAG,IAAI,GAAG,GAAG,IAAIA,GAAE,GAAG;AACtC,cAAAb,KAAI,GAAG,GAAG,IAAIa,GAAE,GAAG,IAAI,GAAG,GAAG,IAAIA,GAAE,GAAG;AAC5C,iBAAO,IAAI0F,OAAMzF,IAAGb,IAAGuB,IAAGxB,EAAC;AAAA,QAAA;AAAA,MAI/B;AAEO,aAAA,UAAP,SAAe,IAAWa,IAAY;AAE9B,YAAAN,KAAI,GAAG,GAAG,IAAIM,GAAE,IAAI,GAAG,GAAG,IAAIA,GAAE;AAChC,YAAA,IAAI,GAAG,GAAG,IAAIA,GAAE,IAAI,GAAG,GAAG,IAAIA,GAAE;AAC/B,eAAA,KAAK,IAAIN,IAAG,CAAC;AAAA,MACtB;AAEO,aAAA,WAAP,SAAgB,IAAWM,IAAQ;AAG3B,YAAAC,KAAI,GAAG,GAAG,IAAID,GAAE,GAAG,IAAI,GAAG,GAAG,IAAIA,GAAE,GAAG;AACtC,YAAAZ,KAAI,GAAG,GAAG,IAAIY,GAAE,GAAG,IAAI,GAAG,GAAG,IAAIA,GAAE,GAAG;AACtC,YAAAW,KAAI,GAAG,GAAG,IAAIX,GAAE,GAAG,IAAI,GAAG,GAAG,IAAIA,GAAE,GAAG;AACtC,YAAAb,KAAI,GAAG,GAAG,IAAIa,GAAE,GAAG,IAAI,GAAG,GAAG,IAAIA,GAAE,GAAG;AAC5C,eAAO,IAAI0F,OAAMzF,IAAGb,IAAGuB,IAAGxB,EAAC;AAAA,MAC7B;AASO,aAAA,OAAP,SAAY,IAAIa,IAAC;AACf,YAAIA,MAAK,OAAOA,MAAK,OAAOA,IAAG;AAE7B,iBAAO,KAAK,IAAI,KAAK,IAAIA,IAAG,GAAG,EAAE,GAAG,KAAK,IAAIA,IAAG,GAAG,EAAE,CAAC;AAAA,QAE7C,WAAAA,MAAK,QAAQA,MAAK,QAAQA,IAAG;AAEtC,cAAM,KAAK,KAAK,IAAI,KAAK,IAAI,GAAG,IAAIA,GAAE,EAAE,GAAG,KAAK,IAAI,GAAG,IAAIA,GAAE,EAAE,CAAC;AAChE,cAAM,KAAK,KAAK,IAAI,KAAK,IAAI,GAAG,IAAIA,GAAE,EAAE,GAAG,KAAK,IAAI,GAAG,IAAIA,GAAE,EAAE,CAAC;AACzD,iBAAA,IAAI0F,OAAM,IAAI,EAAE;AAAA,QAAA;AAAA,MAI3B;AAEO,aAAA,WAAP,SAAgB,IAAW1F,IAAY;AAGrC,eAAO,KAAK,IAAI,KAAK,IAAIA,IAAG,GAAG,EAAE,GAAG,KAAK,IAAIA,IAAG,GAAG,EAAE,CAAC;AAAA,MACxD;AAEO,aAAA,YAAP,SAAiB,IAAWA,IAAQ;AAGlC,YAAM,KAAK,KAAK,IAAI,KAAK,IAAI,GAAG,IAAIA,GAAE,EAAE,GAAG,KAAK,IAAI,GAAG,IAAIA,GAAE,EAAE,CAAC;AAChE,YAAM,KAAK,KAAK,IAAI,KAAK,IAAI,GAAG,IAAIA,GAAE,EAAE,GAAG,KAAK,IAAI,GAAG,IAAIA,GAAE,EAAE,CAAC;AACzD,eAAA,IAAI0F,OAAM,IAAI,EAAE;AAAA,MACzB;AAEU,aAAA,MAAV,SAAW,IAAS;AAEX,eAAA,IAAIA,OAAM,KAAK,IAAI,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC;AAAA,MACnD;AAEO,aAAA,MAAP,SAAW,KAAY,KAAU;AAG/B,eAAO,IAAIA,OAAM,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,GAAG,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,MACrE;AACDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AC1MgB,MAAM9F,cAAY,KAAK;AAEvB,MAAMgF,WAASvD,KAAY,GAAG,CAAC;AAC/B,MAAMwD,WAASxD,KAAY,GAAG,CAAC;AAC/B,MAAMjB,SAAOiB,KAAY,GAAG,CAAC;AAC7B,MAAMsE,OAAKtE,KAAY,GAAG,CAAC;AAC3B,MAAMuE,OAAKvE,KAAY,GAAG,CAAC;AAC3B,MAAM,OAAOA,KAAY,GAAG,CAAC;AAC7B,MAAMwE,eAAaxE,KAAY,GAAG,CAAC;AACnC,MAAMyE,cAAYzE,KAAY,GAAG,CAAC;AAEvC0E,EAAAA,SAAAA,eAAAA;AAAA,GAAZ,SAAYA,eAAY;AACtBA,kBAAAA,cAAA,SAAA,IAAA,EAAA,IAAA;AACAA,kBAAAA,cAAA,WAAA,IAAA,CAAA,IAAA;AACAA,kBAAAA,cAAA,SAAA,IAAA,CAAA,IAAA;AACAA,kBAAAA,cAAA,SAAA,IAAA,CAAA,IAAA;AAAA,EACF,GALYA,SAAA,iBAAAA,wBAKX,CAAA,EAAA;AAEWC,EAAAA,SAAAA,qBAAAA;AAAA,GAAZ,SAAYA,qBAAkB;AAC5BA,wBAAAA,oBAAA,SAAA,IAAA,EAAA,IAAA;AACAA,wBAAAA,oBAAA,UAAA,IAAA,CAAA,IAAA;AACAA,wBAAAA,oBAAA,QAAA,IAAA,CAAA,IAAA;AAAA,EACF,GAJYA,SAAA,uBAAAA,8BAIX,CAAA,EAAA;AAKYC,EAAAA,SAAAA,aAAAA;AAAA,GAAZ,SAAYA,aAAU;AAErBA,gBAAAA,YAAA,WAAA,IAAA,CAAA,IAAA;AAEAA,gBAAAA,YAAA,UAAA,IAAA,CAAA,IAAA;AAEAA,gBAAAA,YAAA,cAAA,IAAA,CAAA,IAAA;AAEAA,gBAAAA,YAAA,aAAA,IAAA,CAAA,IAAA;AAAA,EACF,GATaA,SAAA,eAAAA,sBASZ,CAAA,EAAA;AAKA,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,cAAA;AACC,aAAC,IAAG7E,KAAY,GAAG,CAAC;AACpB,aAAA,KAAgB,IAAI,UAAS;AAAA,MAAA;AAE7B6E,kBAAG,UAAA,MAAH,SAAI,GAAa;AACfzE,iBAAgB,KAAK,GAAG,EAAE,CAAC;AACtB,aAAA,GAAG,IAAI,EAAE,EAAE;AAAA,MAClB;AACAyE,kBAAA,UAAA,UAAA,WAAA;AACS3E,iBAAS,KAAK,CAAC;AACtB,aAAK,GAAG;MACV;AACD2E,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAcD,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,YAAA;AASE,aAAW,cAAG9E,KAAY,GAAG,CAAC;AAQ9B,aAAU,aAAGA,KAAY,GAAG,CAAC;AAG7B,aAAM,SAAoB,CAAE,IAAI,iBAAiB,IAAI,eAAe;AAGpE,aAAU,aAAW;AAAA,MAAA;AAErB8E,gBAAG,UAAA,MAAH,SAAI,MAAc;AAChB,aAAK,OAAO,KAAK;AACjB1E,iBAAgB,KAAK,aAAa,KAAK,WAAW;AAClDA,iBAAgB,KAAK,YAAY,KAAK,UAAU;AAChD,aAAK,aAAa,KAAK;AACvB,aAAK,OAAO,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;AACjC,aAAK,OAAO,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;AAAA,MACnC;AAEA0E,gBAAA,UAAA,UAAA,WAAA;AACE,aAAK,OAAOJ,SAAAA,aAAa;AAClBxE,iBAAS,KAAK,WAAW;AACzBA,iBAAS,KAAK,UAAU;AAC/B,aAAK,aAAa;AACb,aAAA,OAAO,CAAC,EAAE;AACV,aAAA,OAAO,CAAC,EAAE;MACjB;AAOA4E,gBAAgB,UAAA,mBAAhB,SAAiB,IAA0B9C,MAAqB,SAAiBC,MAAqB,SAAe;AAC/G,YAAA,KAAK,cAAc,GAAG;AACjB,iBAAA;AAAA,QAAA;AAGJ,aAAA,MAAM,IAAI;AAEf,WAAG,aAAa,KAAK;AAErB,YAAMnD,UAAS,GAAG;AAClB,YAAM,SAAS,GAAG;AAClB,YAAM,cAAc,GAAG;AAEvB,gBAAQ,KAAK,MAAM;AAAA,UACjB,KAAK4F,SAAAA,aAAa,WAAW;AACpB5B,oBAAQhE,SAAQ,GAAK,CAAG;AACzB,gBAAA,gBAAgB,KAAK,OAAO,CAAC;AACnCqB,0BAAqBoD,UAAQvB,MAAK,KAAK,UAAU;AACjD7B,0BAAqBqD,UAAQvB,MAAK,cAAc,UAAU;AACnDhB,oBAAQ,MAAMuC,UAAQD,QAAM;AAC7B,gBAAA,YAAYrB,cAAqB,IAAI;AACrC,gBAAA,YAAY,UAAU,SAAS;AAC7B,kBAAA,WAAS3D,YAAU,SAAS;AAClC8C,wBAAiBvC,SAAQ,IAAI,UAAQ,IAAI;AAAA,YAAA;AAE3CyB,yBAAoB+D,MAAI,GAAGf,UAAQ,SAASzE,OAAM;AAClDyB,yBAAoBgE,MAAI,GAAGf,UAAQ,CAAC,SAAS1E,OAAM;AACnDyB,yBAAoB,OAAO,CAAC,GAAG,KAAK+D,MAAI,KAAKC,IAAE;AACnC,wBAAA,CAAC,IAAIjD,QAAeL,QAAelC,QAAMwF,MAAID,IAAE,GAAGxF,OAAM;AACpE;AAAA,UAAA;AAAA,UAGF,KAAK4F,SAAAA,aAAa,SAAS;AACzBjE,oBAAe3B,SAAQkD,KAAI,GAAG,KAAK,WAAW;AAC9C7B,0BAAqBqE,cAAYxC,MAAK,KAAK,UAAU;AAErD,qBAAS,IAAI,GAAG,IAAI,KAAK,YAAY,EAAE,GAAG;AAClC,kBAAA,gBAAgB,KAAK,OAAO,CAAC;AACnC7B,4BAAqBsE,aAAWxC,MAAK,cAAc,UAAU;AAC7D1B,2BAAoB+D,MAAI,GAAGG,aAAW,UAAUnD,QAAeL,QAAelC,QAAM0F,aAAWD,YAAU,GAAG1F,OAAM,GAAGA,OAAM;AAC3HyB,2BAAoBgE,MAAI,GAAGE,aAAW,CAAC,SAAS3F,OAAM;AACtDyB,2BAAoB,OAAO,CAAC,GAAG,KAAK+D,MAAI,KAAKC,IAAE;AACnC,0BAAA,CAAC,IAAIjD,QAAeL,QAAelC,QAAMwF,MAAID,IAAE,GAAGxF,OAAM;AAAA,YAAA;AAEtE;AAAA,UAAA;AAAA,UAGF,KAAK4F,SAAAA,aAAa,SAAS;AACzBjE,oBAAe3B,SAAQmD,KAAI,GAAG,KAAK,WAAW;AAC9C9B,0BAAqBqE,cAAYvC,MAAK,KAAK,UAAU;AAErD,qBAAS,IAAI,GAAG,IAAI,KAAK,YAAY,EAAE,GAAG;AAClC,kBAAA,gBAAgB,KAAK,OAAO,CAAC;AACnC9B,4BAAqBsE,aAAWzC,MAAK,cAAc,UAAU;AAC7DzB,2BAAoBgE,MAAI,GAAGE,aAAW,UAAUnD,QAAeL,QAAelC,QAAM0F,aAAWD,YAAU,GAAG1F,OAAM,GAAGA,OAAM;AAC3HyB,2BAAoB+D,MAAI,GAAGG,aAAW,CAAC,SAAS3F,OAAM;AACtDyB,2BAAoB,OAAO,CAAC,GAAG,KAAK+D,MAAI,KAAKC,IAAE;AACnC,0BAAA,CAAC,IAAIjD,QAAeL,QAAelC,QAAMuF,MAAIC,IAAE,GAAGzF,OAAM;AAAA,YAAA;AAGtEkF,oBAAelF,OAAM;AACrB;AAAA,UAAA;AAAA,QACF;AAGK,eAAA;AAAA,MACT;AAEOgG,gBAAiB,oBAAG;AACpBA,gBAAU,aAAG;AACbA,gBAAc,iBAAG;AACjBA,gBAAU,aAAGF,SAAA;AACrBE,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAWD,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,iBAAA;AAOE,aAAU,aAAG/E,KAAY,GAAG,CAAC;AAI7B,aAAa,gBAAG;AAIhB,aAAc,iBAAG;AAIR,aAAA,KAAK,IAAI,UAAS;AAAA,MAAA;AAE3B+E,qBAAG,UAAA,MAAH,SAAI,MAAmB;AACrB3E,iBAAgB,KAAK,YAAY,KAAK,UAAU;AAChD,aAAK,gBAAgB,KAAK;AAC1B,aAAK,iBAAiB,KAAK;AACtB,aAAA,GAAG,IAAI,KAAK,EAAE;AAAA,MACrB;AAEA2E,qBAAA,UAAA,UAAA,WAAA;AACS7E,iBAAS,KAAK,UAAU;AAC/B,aAAK,gBAAgB;AACrB,aAAK,iBAAiB;AACtB,aAAK,GAAG;MACV;AACD6E,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAOD,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,aAAA;AAKE,aAAG,MAAG;AAGN,aAAM,SAAG;AAGT,aAAM,SAAG;AAGT,aAAA,QAAQL,SAAAA,mBAAmB;AAG3B,aAAA,QAAQA,SAAAA,mBAAmB;AAAA,MAAA;AAE3BK,iBAAW,UAAA,cAAX,SAAY,QAAgB,OAA2B,QAAgB,OAAyB;AAC9F,aAAK,SAAS;AACd,aAAK,SAAS;AACd,aAAK,QAAQ;AACb,aAAK,QAAQ;AACR,aAAA,MAAM,KAAK,SAAS,KAAK,SAAS,IAAI,KAAK,QAAQ,KAAK,KAAK,QAAQ;AAAA,MAC5E;AAEAA,iBAAG,UAAA,MAAH,SAAI,MAAe;AACjB,aAAK,SAAS,KAAK;AACnB,aAAK,SAAS,KAAK;AACnB,aAAK,QAAQ,KAAK;AAClB,aAAK,QAAQ,KAAK;AACb,aAAA,MAAM,KAAK,SAAS,KAAK,SAAS,IAAI,KAAK,QAAQ,KAAK,KAAK,QAAQ;AAAA,MAC5E;AAEAA,iBAAA,UAAA,eAAA,WAAA;AACE,YAAM,SAAS,KAAK;AACpB,YAAM,SAAS,KAAK;AACpB,YAAM,QAAQ,KAAK;AACnB,YAAM,QAAQ,KAAK;AACnB,aAAK,SAAS;AACd,aAAK,SAAS;AACd,aAAK,QAAQ;AACb,aAAK,QAAQ;AACR,aAAA,MAAM,KAAK,SAAS,KAAK,SAAS,IAAI,KAAK,QAAQ,KAAK,KAAK,QAAQ;AAAA,MAC5E;AAEAA,iBAAA,UAAA,UAAA,WAAA;AACE,aAAK,SAAS;AACd,aAAK,SAAS;AACd,aAAK,QAAQL,SAAAA,mBAAmB;AAChC,aAAK,QAAQA,SAAAA,mBAAmB;AAChC,aAAK,MAAM;AAAA,MACb;AACDK,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAKD,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,iBAAA;AAEE,aAAM,SAAGjF,KAAY,GAAG,CAAC;AAGnB,aAAA,SAAG,CAACA,KAAY,GAAG,CAAC,GAAGA,KAAY,GAAG,CAAC,CAAC;AAGnC,aAAA,cAAG,CAAC,GAAG,CAAC;AAGnB,aAAU,aAAG;AAAA,MAAA;AAEbiF,qBAAA,UAAA,UAAA,WAAA;AACS/E,iBAAS,KAAK,MAAM;AAC3BA,iBAAgB,KAAK,OAAO,CAAC,CAAC;AAC9BA,iBAAgB,KAAK,OAAO,CAAC,CAAC;AACzB,aAAA,YAAY,CAAC,IAAI;AACjB,aAAA,YAAY,CAAC,IAAI;AACtB,aAAK,aAAa;AAAA,MACpB;AACD+E,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAOK,WAAU,eACd,QACA,QACA,WACA,WAAmB;AAUnB,aAAS,IAAI,GAAG,IAAI,UAAU,YAAY,EAAE,GAAG;AAC7C,UAAM,KAAK,UAAU,OAAO,CAAC,EAAE;AAExB,aAAA,CAAC,IAAIL,SAAAA,WAAW;AAEvB,eAAS,IAAI,GAAG,IAAI,UAAU,YAAY,EAAE,GAAG;AAC7C,YAAI,UAAU,OAAO,CAAC,EAAE,GAAG,QAAQ,GAAG,KAAK;AAClC,iBAAA,CAAC,IAAIA,SAAAA,WAAW;AACvB;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAIF,aAAS,IAAI,GAAG,IAAI,UAAU,YAAY,EAAE,GAAG;AAC7C,UAAM,KAAK,UAAU,OAAO,CAAC,EAAE;AAExB,aAAA,CAAC,IAAIA,SAAAA,WAAW;AAEvB,eAAS,IAAI,GAAG,IAAI,UAAU,YAAY,EAAE,GAAG;AAC7C,YAAI,UAAU,OAAO,CAAC,EAAE,GAAG,QAAQ,GAAG,KAAK;AAClC,iBAAA,CAAC,IAAIA,SAAAA,WAAW;AACvB;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EAEJ;AAKM,WAAU,kBACd,MACA,KACA9F,SACA,QACA,cAAoB;AAGpB,QAAI,SAAS;AAGP,QAAA,YAAYwC,QAAexC,SAAQ,IAAI,CAAC,EAAE,CAAC,IAAI;AAC/C,QAAA,YAAYwC,QAAexC,SAAQ,IAAI,CAAC,EAAE,CAAC,IAAI;AAGrD,QAAI,aAAa;AACf,WAAK,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC;AAC3B,QAAI,aAAa;AACf,WAAK,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC;AAGvB,QAAA,YAAY,YAAY,GAAK;AAEzB,UAAA,SAAS,aAAa,YAAY;AACxCyB,mBAAoB,KAAK,MAAM,EAAE,GAAG,IAAI,QAAQ,IAAI,CAAC,EAAE,GAAG,QAAQ,IAAI,CAAC,EAAE,CAAC;AAG1E,WAAK,MAAM,EAAE,GAAG,YAAY,cAAcoE,SAAA,mBAAmB,UAAU,IAAI,CAAC,EAAE,GAAG,QAAQA,SAAAA,mBAAmB,MAAM;AAChH,QAAA;AAAA,IAAA;AAGG,WAAA;AAAA,EACT;ACxYiB,MAAMpG,cAAY,KAAK;AACvB,MAAMC,aAAW,KAAK;AACtB,MAAMC,aAAW,KAAK;AAMtB,MAAM,cAAc,IAAI,KAAc;AAAA,IACrD,QAAM,WAAA;AACJ,aAAO,IAAI,QAAO;AAAA,IACpB;AAAA,IACA,kBAAQ,SAAgB;AACtB,cAAQ,QAAO;AAAA,IAAA;AAAA,EAElB,CAAA;AAEgB,MAAM,cAAc,IAAI;AAExB,MAAM,gBAAgB,IAAI;AAQ3C,MAAA;AAAA;AAAA,IAAA,WAAA;AAKE,eAAAyG,aAAY,SAAgB;AAH5B,aAAI,OAAuB;AAC3B,aAAI,OAAuB;AAC3B,aAAK,QAAgB;AAEnB,aAAK,UAAU;AAAA,MAAA;AAIjB,mBAAA,UAAA,UAAA,WAAA;AACE,aAAK,OAAO;AACZ,aAAK,OAAO;AACZ,aAAK,QAAQ;AAAA,MACf;AACDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAgBe,WAAA,YAAY,WAAmB,WAAiB;AACvD,WAAA3G,YAAU,YAAY,SAAS;AAAA,EACxC;AAMgB,WAAA,eAAe,cAAsB,cAAoB;AAChE,WAAA,eAAe,eAAe,eAAe;AAAA,EACtD;AAGiB,MAAM,cAAc;AAGrC,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAA4G,2BAAA;AACE,aAAE,KAAGnF,KAAY,GAAG,CAAC;AACrB,aAAE,KAAGA,KAAY,GAAG,CAAC;AACrB,aAAa,gBAAG;AAChB,aAAc,iBAAG;AACjB,aAAU,aAAG;AACb,aAAW,cAAG;AACd,aAAY,eAAG;AAAA,MAAA;AAEf,+BAAA,UAAA,UAAA,WAAA;AACSE,iBAAS,KAAK,EAAE;AAChBA,iBAAS,KAAK,EAAE;AACvB,aAAK,gBAAgB;AACrB,aAAK,iBAAiB;AACtB,aAAK,aAAa;AAClB,aAAK,cAAc;AACnB,aAAK,eAAe;AAAA,MACtB;AACDiF,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAEgB,MAAM,KAAKnF,KAAY,GAAG,CAAC;AAC3B,MAAM,KAAKA,KAAY,GAAG,CAAC;AAC3B,MAAM,KAAKA,KAAY,GAAG,CAAC;AAC3B,MAAM,KAAKA,KAAY,GAAG,CAAC;AAC3B,MAAMoF,YAAUpF,KAAY,GAAG,CAAC;AAChC,MAAM,MAAMkB,UAAiB,GAAG,GAAG,CAAC;AACpC,MAAM,MAAMA,UAAiB,GAAG,GAAG,CAAC;AACpC,MAAM,SAASlB,KAAY,GAAG,CAAC;AAC/B,MAAM,SAASA,KAAY,GAAG,CAAC;AAC/B,MAAM,YAAYA,KAAY,GAAG,CAAC;AAClC,MAAMwE,eAAaxE,KAAY,GAAG,CAAC;AACnC,MAAM,KAAKA,KAAY,GAAG,CAAC;AAC3B,MAAM,KAAKA,KAAY,GAAG,CAAC;AAC3B,MAAMqF,MAAIrF,KAAY,GAAG,CAAC;AAC1B,MAAMlB,WAASkB,KAAY,GAAG,CAAC;AAC/B,MAAM,QAAQA,KAAY,GAAG,CAAC;AAC9B,MAAM,KAAKA,KAAY,GAAG,CAAC;AAC3B,MAAM,MAAMA,KAAY,GAAG,CAAC;AAC5B,MAAM,MAAMA,KAAY,GAAG,CAAC;AAC5B,MAAM,IAAIA,KAAY,GAAG,CAAC;AAC1B,MAAM,IAAIA,KAAY,GAAG,CAAC;AAC1B,MAAM,IAAIA,KAAY,GAAG,CAAC;AAC1B,MAAM,IAAIA,KAAY,GAAG,CAAC;AAC1B,MAAM,KAAKA,KAAY,GAAG,CAAC;AAC3B,MAAM,KAAKA,KAAY,GAAG,CAAC;AAC3B,MAAMjB,SAAOiB,KAAY,GAAG,CAAC;AAO9C,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAsF,WAAA;uBAE6B,IAAI,YAAY,IAAI;uBACpB,IAAI,YAAY,IAAI;AAC9B,aAAA,aAA6B;AAC7B,aAAA,aAA6B;AAC7B,aAAA,WAAW;AACX,aAAA,WAAW;AACX,aAAA,gBAAyC;AAC/B,aAAA,aAAa,IAAI;AAC3B,aAAA,SAAyB;AACzB,aAAA,SAAyB;AACzB,aAAA,QAAQ;AACR,aAAA,aAAa;AAEb,aAAA,YAAY;AACZ,aAAA,aAAa;AACb,aAAA,gBAAgB;AAChB,aAAA,iBAAiB;AAElC,aAAa,gBAAG;AAEhB,aAAY,eAAG;AAEf,aAAc,iBAAG;AAEjB,aAAY,eAAG;AAEf,aAAe,kBAAG;AAGlB,aAAA,YAA4B,IAAI,eAAe,IAAI;AAGlC,aAAA,WAAW,CAAC,IAAI,2BAA2B,IAAI,yBAAyB;AACxE,aAAQ,WAAGtF,KAAY,GAAG,CAAC;AACf,aAAA,eAAU,IAAI;AACvB,aAAA,MAAU,IAAI;AACjB,aAAA,eAAe;AACf,aAAA,iBAAiB;AACjB,aAAA,aAAa;AACb,aAAA,gBAAgB;AAChB,aAAA,aAAa;AACb,aAAA,aAAa;AACb,aAAA,UAAU;AACV,aAAA,UAAU;AAGG,aAAA,gBAAG,CAACA,KAAY,GAAG,CAAC,GAAGA,KAAY,GAAG,CAAC,CAAC;AACrD,aAAa,gBAAGA,KAAY,GAAG,CAAC;AAChC,aAAY,eAAGA,KAAY,GAAG,CAAC;AAC/B,aAAc,iBAAGA,KAAY,GAAG,CAAC;AACjC,aAAc,iBAAGA,KAAY,GAAG,CAAC;AACjC,aAAM,SAAG0E,SAAAA,aAAa;AACtB,aAAA,YAAY;AACZ,aAAA,YAAY;AACZ,aAAA,eAAe;AACf,aAAA,aAAa;AACb,aAAA,aAAa;AACb,aAAA,UAAU;AACV,aAAA,UAAU;AAAA,MAAA;AAG3BY,eAAU,UAAA,aAAV,SAAW,IAAa,QAAgB,IAAa,QAAgB,aAA6B;AAChG,aAAK,aAAa;AAClB,aAAK,aAAa;AAElB,aAAK,WAAW;AAChB,aAAK,WAAW;AAEhB,aAAK,gBAAgB;AAErB,aAAK,aAAa,YAAY,KAAK,WAAW,YAAY,KAAK,WAAW,UAAU;AACpF,aAAK,gBAAgB,eAAe,KAAK,WAAW,eAAe,KAAK,WAAW,aAAa;AAAA,MAClG;AAGA,eAAA,UAAA,UAAA,WAAA;AACE,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,aAAa;AAClB,aAAK,aAAa;AAClB,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,gBAAgB;AACrB,aAAK,WAAW;AAChB,aAAK,SAAS;AACd,aAAK,SAAS;AACd,aAAK,QAAQ;AACb,aAAK,aAAa;AAClB,aAAK,YAAY;AACjB,aAAK,aAAa;AAClB,aAAK,gBAAgB;AACrB,aAAK,iBAAiB;AACtB,aAAK,gBAAgB;AACrB,aAAK,eAAe;AACpB,aAAK,iBAAiB;AACtB,aAAK,eAAe;AACpB,aAAK,kBAAkB;AAEvB,aAAK,UAAU;AAGI,iBAAA,KAAA,GAAAC,MAAA,KAAK,UAAL,KAAaA,IAAA,QAAb,MAAe;AAAxB,cAAA,UAAKA,IAAA,EAAA;AACb,kBAAM,QAAO;AAAA,QAAA;AAERrF,iBAAS,KAAK,QAAQ;AAC7B,aAAK,aAAa;AAClB,aAAK,IAAI;AACT,aAAK,eAAe;AACpB,aAAK,iBAAiB;AACtB,aAAK,aAAa;AAClB,aAAK,gBAAgB;AACrB,aAAK,aAAa;AAClB,aAAK,aAAa;AAClB,aAAK,UAAU;AACf,aAAK,UAAU;AAGI,iBAAA,KAAA,GAAA,KAAA,KAAK,eAAL,KAAkB,GAAA,QAAlB,MAAoB;AAA7B,cAAA,UAAK,GAAA,EAAA;AACbA,mBAAgB,OAAK;AAAA,QAAA;AAEhBA,iBAAS,KAAK,aAAa;AAC3BA,iBAAS,KAAK,YAAY;AAC1BA,iBAAS,KAAK,cAAc;AAC5BA,iBAAS,KAAK,cAAc;AACnC,aAAK,SAASwE,SAAAA,aAAa;AAC3B,aAAK,YAAY;AACjB,aAAK,YAAY;AACjB,aAAK,eAAe;AACpB,aAAK,aAAa;AAClB,aAAK,aAAa;AAClB,aAAK,UAAU;AACf,aAAK,UAAU;AAAA,MACjB;AAEc,eAAA,UAAA,iBAAd,SAAe,MAAc;AAC3B,YAAM,WAAW,KAAK;AACtB,YAAM,WAAW,KAAK;AAClB,YAAA,aAAa,QAAQ,aAAa;AAAM;AAC5C,YAAM,QAAQ,SAAS;AACvB,YAAM,QAAQ,SAAS;AACnB,YAAA,UAAU,QAAQ,UAAU;AAAM;AACtC,YAAM,SAAS,SAAS;AACxB,YAAM,SAAS,SAAS;AACpB,YAAA,WAAW,QAAQ,WAAW;AAAM;AAExC,YAAM,WAAW,KAAK;AAEtB,YAAM,aAAa,SAAS;AAG5B,aAAK,aAAa,MAAM;AACxB,aAAK,aAAa,MAAM;AACxB,aAAK,UAAU,MAAM;AACrB,aAAK,UAAU,MAAM;AAErB,aAAK,aAAa,KAAK;AACvB,aAAK,gBAAgB,KAAK;AAC1B,aAAK,iBAAiB,KAAK;AAE3B,aAAK,eAAe;AAEpB,aAAK,IAAI;AACT,aAAK,aAAa;AAElB,aAAK,aAAa,MAAM;AACxB,aAAK,aAAa,MAAM;AACxB,aAAK,UAAU,MAAM;AACrB,aAAK,UAAU,MAAM;AACrBtE,iBAAgB,KAAK,gBAAgB,MAAM,QAAQ,WAAW;AAC9DA,iBAAgB,KAAK,gBAAgB,MAAM,QAAQ,WAAW;AAE9D,aAAK,YAAY,OAAO;AACxB,aAAK,YAAY,OAAO;AAExB,aAAK,SAAS,SAAS;AACvBA,iBAAgB,KAAK,eAAe,SAAS,WAAW;AACxDA,iBAAgB,KAAK,cAAc,SAAS,UAAU;AACtD,aAAK,eAAe;AAEpB,iBAAS,IAAI,GAAG,IAAInB,iBAAS,mBAAmB,EAAE,GAAG;AAC9C,eAAA,SAAS,CAAC,EAAE;AACjBiB,mBAAgB,KAAK,cAAc,CAAC,CAAC;AAAA,QAAA;AAGvC,iBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AAC7B,cAAA,KAAK,SAAS,OAAO,CAAC;AACtB,cAAA,MAAM,KAAK,SAAS,CAAC;AAC3B,cAAI,KAAK,cAAc;AACjB,gBAAA,gBAAgB,KAAK,UAAU,GAAG;AAClC,gBAAA,iBAAiB,KAAK,UAAU,GAAG;AAAA,UAAA;AAEzCE,mBAAgB,KAAK,cAAc,CAAC,GAAG,GAAG,UAAU;AAAA,QAAA;AAAA,MAExD;AAMA,eAAA,UAAA,cAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKgB,eAAA,UAAA,mBAAhB,SAAiBoF,gBAAmC;AAClD,YAAM,WAAW,KAAK;AACtB,YAAM,WAAW,KAAK;AAClB,YAAA,aAAa,QAAQ,aAAa;AAAM;AAC5C,YAAM,QAAQ,SAAS;AACvB,YAAM,QAAQ,SAAS;AACnB,YAAA,UAAU,QAAQ,UAAU;AAAM;AACtC,YAAM,SAAS,SAAS;AACxB,YAAM,SAAS,SAAS;AACpB,YAAA,WAAW,QAAQ,WAAW;AAAM;AAExC,eAAO,KAAK,WAAW,iBACrBA,gBACA,MAAM,aAAA,GAAgB,OAAO,UAC7B,MAAM,aAAc,GAAE,OAAO,QAAQ;AAAA,MAEzC;AAOU,eAAA,UAAA,aAAV,SAAW,MAAa;AACjB,aAAA,gBAAgB,CAAC,CAAC;AAAA,MACzB;AAKA,eAAA,UAAA,YAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,eAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,eAAA,UAAA,UAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,eAAA,UAAA,cAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,eAAA,UAAA,cAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,eAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,eAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,eAAA,UAAA,mBAAA,WAAA;AACE,aAAK,eAAe;AAAA,MACtB;AAMW,eAAA,UAAA,cAAX,SAAY,UAAgB;AAC1B,aAAK,aAAa;AAAA,MACpB;AAKA,eAAA,UAAA,cAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,eAAA,UAAA,gBAAA,WAAA;AACE,YAAM,WAAW,KAAK;AACtB,YAAM,WAAW,KAAK;AAClB,YAAA,aAAa,QAAQ,aAAa;AAAM;AAC5C,aAAK,aAAa,YAAY,SAAS,YAAY,SAAS,UAAU;AAAA,MACxE;AAMc,eAAA,UAAA,iBAAd,SAAe,aAAmB;AAChC,aAAK,gBAAgB;AAAA,MACvB;AAKA,eAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,eAAA,UAAA,mBAAA,WAAA;AACE,YAAM,WAAW,KAAK;AACtB,YAAM,WAAW,KAAK;AAClB,YAAA,aAAa,QAAQ,aAAa;AAAM;AAC5C,aAAK,gBAAgB,eAAe,SAAS,eAAe,SAAS,aAAa;AAAA,MACpF;AAMe,eAAA,UAAA,kBAAf,SAAgB,OAAa;AAC3B,aAAK,iBAAiB;AAAA,MACxB;AAKA,eAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKAF,eAAA,UAAA,WAAA,SAAS,UAAoBtD,MAAqBC,MAAmB;AACnE,YAAM,WAAW,KAAK;AACtB,YAAM,WAAW,KAAK;AAClB,YAAA,aAAa,QAAQ,aAAa;AAAM;AACvC,aAAA,cAAc,UAAUD,MAAK,UAAU,KAAK,UAAUC,MAAK,UAAU,KAAK,QAAQ;AAAA,MACzF;AAWM,eAAA,UAAA,SAAN,SAAO,UAIN;AACC,YAAM,WAAW,KAAK;AACtB,YAAM,WAAW,KAAK;AAClB,YAAA,aAAa,QAAQ,aAAa;AAAM;AAC5C,YAAM,QAAQ,SAAS;AACvB,YAAM,QAAQ,SAAS;AACnB,YAAA,UAAU,QAAQ,UAAU;AAAM;AACtC,YAAM,SAAS,SAAS;AACxB,YAAM,SAAS,SAAS;AACpB,YAAA,WAAW,QAAQ,WAAW;AAAM;AAGxC,aAAK,gBAAgB;AAErB,YAAI,WAAW;AACf,YAAM,cAAc,KAAK;AAEzB,YAAM,UAAU,SAAS;AACzB,YAAM,UAAU,SAAS;AACzB,YAAM,SAAS,WAAW;AAE1B,YAAMD,OAAM,MAAM;AAClB,YAAMC,OAAM,MAAM;AAGlB,YAAI,QAAQ;AACC,qBAAA,YAAY,QAAQ,KAAK,UAAU,QAAQ,KAAK,UAAUD,MAAKC,IAAG;AAG7E,eAAK,WAAW,aAAa;AAAA,QAAA,OACxB;AAEL,sBAAY,QAAO;AACP,sBAAA,IAAI,KAAK,UAAU;AAC/B,eAAK,WAAW;AAEhB,eAAK,SAAS,KAAK,YAAYD,MAAKC,IAAG;AAC5B,qBAAA,KAAK,WAAW,aAAa;AAIxC,mBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,YAAY,EAAE,GAAG;AACnD,gBAAM,MAAM,KAAK,WAAW,OAAO,CAAC;AACpC,gBAAI,gBAAgB;AACpB,gBAAI,iBAAiB;AAErB,qBAAS,IAAI,GAAG,IAAI,YAAY,YAAY,EAAE,GAAG;AACzC,kBAAA,MAAM,YAAY,OAAO,CAAC;AAChC,kBAAI,IAAI,GAAG,QAAQ,IAAI,GAAG,KAAK;AAC7B,oBAAI,gBAAgB,IAAI;AACxB,oBAAI,iBAAiB,IAAI;AACzB;AAAA,cAAA;AAAA,YACF;AAAA,UACF;AAGF,cAAI,aAAa,aAAa;AAC5B,kBAAM,SAAS,IAAI;AACnB,kBAAM,SAAS,IAAI;AAAA,UAAA;AAAA,QACrB;AAGF,aAAK,iBAAiB;AAEtB,YAAM,cAAc,OAAO,aAAa,YAAY,aAAa;AAE7D,YAAA,CAAC,eAAe,YAAY,aAAa;AAC3C,mBAAS,aAAa,IAAI;AAAA,QAAA;AAGxB,YAAA,eAAe,CAAC,YAAY,aAAa;AAC3C,mBAAS,WAAW,IAAI;AAAA,QAAA;AAG1B,YAAI,CAAC,UAAU,YAAY,eAAe,aAAa;AAC5C,mBAAA,SAAS,MAAM,WAAW;AAAA,QAAA;AAAA,MAEvC;AAEuB,eAAA,UAAA,0BAAvB,SAAwB,MAAc;AACpC,eAAO,KAAK,yBAAyB,MAAM,MAAM,IAAI;AAAA,MACvD;AAEAqD,eAAA,UAAA,6BAAA,SAA2B,MAAgB,MAAY,MAAU;AAC/D,eAAO,KAAK,yBAAyB,MAAM,MAAM,IAAI;AAAA,MACvD;AAEQA,eAAA,UAAA,2BAAR,SAAiC,MAAgB,MAAmB,MAAiB;AACnF,YAAM,MAAM,SAAS,QAAQ,SAAS,OAAO,OAAO;AACpD,YAAI,gBAAgB;AAEpB,YAAM,WAAW,KAAK;AACtB,YAAM,WAAW,KAAK;AAClB,YAAA,aAAa,QAAQ,aAAa;AAAa,iBAAA;AACnD,YAAM,QAAQ,SAAS;AACvB,YAAM,QAAQ,SAAS;AACnB,YAAA,UAAU,QAAQ,UAAU;AAAa,iBAAA;AAE3B,cAAM;AACN,cAAM;AACxB,YAAM,YAAY,MAAM;AACxB,YAAM,YAAY,MAAM;AAExB,YAAM,eAAe,KAAK;AAC1B,YAAM,eAAe,KAAK;AAE1B,YAAI,KAAK;AACT,YAAI,KAAK;AACT,YAAI,CAAC,QAAQ,UAAU,QAAQ,UAAU,OAAO;AAC9C,eAAK,KAAK;AACV,eAAK,KAAK;AAAA,QAAA;AAGZ,YAAI,KAAK;AACT,YAAI,KAAK;AACT,YAAI,CAAC,QAAQ,UAAU,QAAQ,UAAU,OAAO;AAC9C,eAAK,KAAK;AACV,eAAK,KAAK;AAAA,QAAA;AAGLlF,iBAAS,IAAI,UAAU,CAAC;AAC/B,YAAI,KAAK,UAAU;AAEZA,iBAAS,IAAI,UAAU,CAAC;AAC/B,YAAI,KAAK,UAAU;AAGnB,iBAAS,IAAI,GAAG,IAAI,KAAK,cAAc,EAAE,GAAG;AAC7B,uBAAA,KAAK,cAAc,IAAI,EAAE;AACzB,uBAAA,KAAK,cAAc,IAAI,EAAE;AAGtC,cAAI;AACJ,kBAAQ,KAAK,QAAQ;AAAA,YACnB,KAAKsE,SAAAA,aAAa,WAAW;AAC3BvE,4BAAqB,QAAQ,KAAK,KAAK,YAAY;AACnDA,4BAAqB,QAAQ,KAAK,KAAK,cAAc,CAAC,CAAC;AAChDc,sBAAQnC,UAAQ,QAAQ,MAAM;AACrCyD,4BAAqBzD,QAAM;AAE3ByB,2BAAoB,OAAO,KAAK,QAAQ,KAAK,MAAM;AACnD,2BAAae,QAAe,QAAQxC,QAAM,IAAIwC,QAAe,QAAQxC,QAAM,IAAI,KAAK,YAAY,KAAK;AACrG;AAAA,YAAA;AAAA,YAGF,KAAK4F,SAAAA,aAAa,SAAS;AACzBjE,sBAAe3B,UAAQ,IAAI,GAAG,KAAK,aAAa;AAChDqB,4BAAqBqE,cAAY,KAAK,KAAK,YAAY;AACvDrE,4BAAqB,WAAW,KAAK,KAAK,cAAc,CAAC,CAAC;AAC1D,2BAAamB,QAAe,WAAWxC,QAAM,IAAIwC,QAAekD,cAAY1F,QAAM,IAAI,KAAK,YAAY,KAAK;AACrGsB,uBAAS,OAAO,SAAS;AAChC;AAAA,YAAA;AAAA,YAGF,KAAKsE,SAAAA,aAAa,SAAS;AACzBjE,sBAAe3B,UAAQ,IAAI,GAAG,KAAK,aAAa;AAChDqB,4BAAqBqE,cAAY,KAAK,KAAK,YAAY;AACvDrE,4BAAqB,WAAW,KAAK,KAAK,cAAc,CAAC,CAAC;AAC1D,2BAAamB,QAAe,WAAWxC,QAAM,IAAIwC,QAAekD,cAAY1F,QAAM,IAAI,KAAK,YAAY,KAAK;AACrGsB,uBAAS,OAAO,SAAS;AAGhC4D,sBAAelF,QAAM;AACrB;AAAA,YAAA;AAAA,YAGF,SAAS;AACA,qBAAA;AAAA,YAAA;AAAA,UACT;AAGKmC,kBAAQ,IAAI,OAAO,EAAE;AACrBA,kBAAQ,IAAI,OAAO,EAAE;AAGZ,0BAAAxC,WAAS,eAAe,UAAU;AAElD,cAAM,YAAY,MAAMQ,iBAAS,cAAcA,iBAAS;AACxD,cAAM,aAAaA,iBAAS;AAC5B,cAAM,sBAAsBA,iBAAS;AAGrC,cAAM,IAAI,MAAM,aAAa,aAAa,aAAa,CAAC,qBAAqB,CAAG;AAGhF,cAAM,MAAM8D,cAAqB,IAAIjE,QAAM;AAC3C,cAAM,MAAMiE,cAAqB,IAAIjE,QAAM;AAC3C,cAAM,IAAI,KAAK,KAAK,KAAK,MAAM,MAAM,KAAK,MAAM;AAGhD,cAAM,UAAU,IAAI,IAAM,CAAC,IAAI,IAAI;AAE5BuC,oBAAUgE,KAAG,SAASvG,QAAM;AAE5B0D,yBAAe,IAAI,IAAI6C,GAAC;AAC/B,gBAAM,KAAKtC,cAAqB,IAAIsC,GAAC;AAE9BjE,wBAAc,IAAI,IAAIiE,GAAC;AAC9B,gBAAM,KAAKtC,cAAqB,IAAIsC,GAAC;AAAA,QAAA;AAGhCjF,iBAAS,UAAU,GAAG,EAAE;AAC/B,kBAAU,IAAI;AAEPA,iBAAS,UAAU,GAAG,EAAE;AAC/B,kBAAU,IAAI;AAEP,eAAA;AAAA,MACT;AAEsB,eAAA,UAAA,yBAAtB,SAAuB,MAAc;AACnC,YAAM,WAAW,KAAK;AACtB,YAAM,WAAW,KAAK;AAClB,YAAA,aAAa,QAAQ,aAAa;AAAM;AAC5C,YAAM,QAAQ,SAAS;AACvB,YAAM,QAAQ,SAAS;AACnB,YAAA,UAAU,QAAQ,UAAU;AAAM;AAEtC,YAAM,YAAY,MAAM;AACxB,YAAM,YAAY,MAAM;AAExB,YAAM,YAAY,MAAM;AACxB,YAAM,YAAY,MAAM;AAExB,YAAM,UAAU,KAAK;AACrB,YAAM,UAAU,KAAK;AACrB,YAAM,WAAW,KAAK;AAEtB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,eAAe,KAAK;AAC1B,YAAM,eAAe,KAAK;AAEnBA,iBAAS,IAAI,UAAU,CAAC;AAC/B,YAAM,KAAK,UAAU;AACdA,iBAAS,IAAI,UAAU,CAAC;AAC/B,YAAM,KAAK,UAAU;AAEdA,iBAAS,IAAI,UAAU,CAAC;AAC/B,YAAM,KAAK,UAAU;AACdA,iBAAS,IAAI,UAAU,CAAC;AAC/B,YAAM,KAAK,UAAU;AAIR,qBAAA,KAAK,cAAc,IAAI,EAAE;AACzB,qBAAA,KAAK,cAAc,IAAI,EAAE;AAEtC,sBAAc,QAAO;AACrB,iBAAS,iBAAiB,eAAe,KAAK,SAAS,KAAK,OAAO;AAEnEA,iBAAgB,KAAK,UAAU,cAAc,MAAM;AAEnD,iBAAS,IAAI,GAAG,IAAI,KAAK,cAAc,EAAE,GAAG;AACpC,cAAA,MAAM,KAAK,SAAS,CAAC;AACrB,cAAA,MAAM,cAAc,OAAO,CAAC;AAElCa,kBAAe,IAAI,IAAI,KAAK,EAAE;AAC9BA,kBAAe,IAAI,IAAI,KAAK,EAAE;AAE9B,cAAM,MAAM8B,cAAqB,IAAI,IAAI,KAAK,QAAQ;AACtD,cAAM,MAAMA,cAAqB,IAAI,IAAI,KAAK,QAAQ;AAEtD,cAAM,UAAU,KAAK,KAAK,KAAK,MAAM,MAAM,KAAK,MAAM;AAEtD,cAAI,aAAa,UAAU,IAAM,IAAM,UAAU;AAEjDgB,uBAAoBqB,WAAS,KAAK,UAAU,CAAG;AAE/C,cAAM,MAAMrC,cAAqB,IAAI,IAAIqC,SAAO;AAChD,cAAM,MAAMrC,cAAqB,IAAI,IAAIqC,SAAO;AAEhD,cAAM,WAAW,KAAK,KAAK,KAAK,MAAM,MAAM,KAAK,MAAM;AAEvD,cAAI,cAAc,WAAW,IAAM,IAAM,WAAW;AAGpD,cAAI,eAAe;AACnB,cAAI,OAAO;AACX,kBAAQ9D,QAAe,KAAK,UAAU,EAAE;AAChC,kBAAAA,QAAe,KAAK,UAAUC,aAAoBxC,QAAM,IAAI,IAAI,EAAE,CAAC;AAC3E,kBAAQuC,QAAe,KAAK,UAAU,EAAE;AAChC,kBAAAA,QAAe,KAAK,UAAUC,aAAoBxC,QAAM,IAAI,IAAI,EAAE,CAAC;AACvE,cAAA,OAAO,CAACE,iBAAS,mBAAmB;AAClC,gBAAA,eAAe,CAAC,KAAK,gBAAgB;AAAA,UAAA;AAAA,QAC3C;AAIF,YAAI,KAAK,gBAAgB,KAAK,KAAK,YAAY;AACvC,cAAA,OAAO,KAAK,SAAS,CAAC;AACtB,cAAA,OAAO,KAAK,SAAS,CAAC;AAE5B,cAAM,OAAO8D,cAAqB,KAAK,IAAI,KAAK,QAAQ;AACxD,cAAM,OAAOA,cAAqB,KAAK,IAAI,KAAK,QAAQ;AACxD,cAAM,OAAOA,cAAqB,KAAK,IAAI,KAAK,QAAQ;AACxD,cAAM,OAAOA,cAAqB,KAAK,IAAI,KAAK,QAAQ;AAExD,cAAM,MAAM,KAAK,KAAK,KAAK,OAAO,OAAO,KAAK,OAAO;AACrD,cAAM,MAAM,KAAK,KAAK,KAAK,OAAO,OAAO,KAAK,OAAO;AACrD,cAAM,MAAM,KAAK,KAAK,KAAK,OAAO,OAAO,KAAK,OAAO;AAGrD,cAAM,uBAAuB;AAC7B,cAAI,MAAM,MAAM,wBAAwB,MAAM,MAAM,MAAM,MAAM;AAE9D,iBAAK,IAAI,GAAG,OAAO,KAAK,GAAG;AAC3B,iBAAK,IAAI,GAAG,OAAO,KAAK,GAAG;AAErB,gBAAA,MAAI,KAAK,IAAI,GAAG;AAChB,gBAAA,MAAI,KAAK,IAAI,GAAG;AAChB,gBAAAzD,KAAI,KAAK,IAAI,GAAG;AAChB,gBAAA,MAAI,KAAK,IAAI,GAAG;AAClB,gBAAA,MAAM,MAAI,MAAI,MAAIA;AACtB,gBAAI,QAAQ,GAAK;AACf,oBAAM,IAAM;AAAA,YAAA;AAET,iBAAA,aAAa,GAAG,IAAI,MAAM;AAC/B,iBAAK,aAAa,GAAG,IAAI,CAAC,MAAM;AAChC,iBAAK,aAAa,GAAG,IAAI,CAAC,MAAMA;AAC3B,iBAAA,aAAa,GAAG,IAAI,MAAM;AAAA,UAAA,OAE1B;AAGL,iBAAK,eAAe;AAAA,UAAA;AAAA,QACtB;AAGKc,iBAAS,UAAU,GAAG,EAAE;AAC/B,kBAAU,IAAI;AACPA,iBAAS,UAAU,GAAG,EAAE;AAC/B,kBAAU,IAAI;AAEPA,iBAAS,UAAU,GAAG,EAAE;AAC/B,kBAAU,IAAI;AACPA,iBAAS,UAAU,GAAG,EAAE;AAC/B,kBAAU,IAAI;AAAA,MAChB;AAEmB,eAAA,UAAA,sBAAnB,SAAoB,MAAc;AAChC,YAAM,WAAW,KAAK;AACtB,YAAM,WAAW,KAAK;AAClB,YAAA,aAAa,QAAQ,aAAa;AAAM;AAC5C,YAAM,QAAQ,SAAS;AACvB,YAAM,QAAQ,SAAS;AACnB,YAAA,UAAU,QAAQ,UAAU;AAAM;AAEtC,YAAM,YAAY,MAAM;AACxB,YAAM,YAAY,MAAM;AACN,cAAM;AACN,cAAM;AAExB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAETA,iBAAS,IAAI,UAAU,CAAC;AAC/B,YAAI,KAAK,UAAU;AACZA,iBAAS,IAAI,UAAU,CAAC;AAC/B,YAAI,KAAK,UAAU;AAEZA,iBAAStB,UAAQ,KAAK,QAAQ;AAC9BiF,qBAAaqB,WAAStG,UAAQ,CAAG;AAExC,iBAAS,IAAI,GAAG,IAAI,KAAK,cAAc,EAAE,GAAG;AACpC,cAAA,MAAM,KAAK,SAAS,CAAC;AAE3ByB,uBAAoB8E,KAAG,IAAI,eAAevG,UAAQ,IAAI,gBAAgBsG,SAAO;AAE7E,gBAAM,KAAKrC,cAAqB,IAAI,IAAIsC,GAAC;AAClC7C,yBAAe,IAAI,IAAI6C,GAAC;AAC/B,gBAAM,KAAKtC,cAAqB,IAAI,IAAIsC,GAAC;AAClCjE,wBAAc,IAAI,IAAIiE,GAAC;AAAA,QAAA;AAGzBjF,iBAAS,UAAU,GAAG,EAAE;AAC/B,kBAAU,IAAI;AACPA,iBAAS,UAAU,GAAG,EAAE;AAC/B,kBAAU,IAAI;AAAA,MAChB;AAEuB,eAAA,UAAA,0BAAvB,SAAwB,MAAc;AACpC,YAAM,WAAW,KAAK;AACtB,iBAAS,IAAI,GAAG,IAAI,KAAK,cAAc,EAAE,GAAG;AAC1C,mBAAS,OAAO,CAAC,EAAE,gBAAgB,KAAK,SAAS,CAAC,EAAE;AACpD,mBAAS,OAAO,CAAC,EAAE,iBAAiB,KAAK,SAAS,CAAC,EAAE;AAAA,QAAA;AAAA,MAEzD;AAEuB,eAAA,UAAA,0BAAvB,SAAwB,MAAc;AACpC,YAAM,WAAW,KAAK;AACtB,YAAM,WAAW,KAAK;AAClB,YAAA,aAAa,QAAQ,aAAa;AAAM;AAC5C,YAAM,QAAQ,SAAS;AACvB,YAAM,QAAQ,SAAS;AACnB,YAAA,UAAU,QAAQ,UAAU;AAAM;AAEtC,YAAM,YAAY,MAAM;AACN,cAAM;AAExB,YAAM,YAAY,MAAM;AACN,cAAM;AAExB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAETA,iBAAS,IAAI,UAAU,CAAC;AAC/B,YAAI,KAAK,UAAU;AACZA,iBAAS,IAAI,UAAU,CAAC;AAC/B,YAAI,KAAK,UAAU;AAEZA,iBAAStB,UAAQ,KAAK,QAAQ;AAC9BiF,qBAAaqB,WAAStG,UAAQ,CAAG;AACxC,YAAM,WAAW,KAAK;AAMtB,iBAAS,IAAI,GAAG,IAAI,KAAK,cAAc,EAAE,GAAG;AACpC,cAAA,MAAM,KAAK,SAAS,CAAC;AAG3BoB,mBAAgB,EAAE;AACXsB,mBAAS,IAAI,EAAE;AACfA,mBAAS,IAAID,aAAoBxC,QAAM,IAAI,IAAI,EAAE,CAAC;AAClDyB,oBAAU,IAAI,EAAE;AAChBA,oBAAU,IAAIe,aAAoBxC,QAAM,IAAI,IAAI,EAAE,CAAC;AAG1D,cAAM,KAAKuC,QAAe,IAAI8D,SAAO,IAAI,KAAK;AAC1C,cAAA,SAAS,IAAI,cAAe,CAAC;AAG3B,cAAA,cAAc,WAAW,IAAI;AACnC,cAAM,aAAa,MAAM,IAAI,iBAAiB,QAAQ,CAAC,aAAa,WAAW;AAC/E,mBAAS,aAAa,IAAI;AAC1B,cAAI,iBAAiB;AAGd/D,oBAAUgE,KAAG,QAAQD,SAAO;AAE5B5C,yBAAe,IAAI,IAAI6C,GAAC;AAC/B,gBAAM,KAAKtC,cAAqB,IAAI,IAAIsC,GAAC;AAElCjE,wBAAc,IAAI,IAAIiE,GAAC;AAC9B,gBAAM,KAAKtC,cAAqB,IAAI,IAAIsC,GAAC;AAAA,QAAA;AAI3C,YAAI,KAAK,gBAAgB,KAAK,KAAK,cAAc,OAAO;AACtD,mBAAS,IAAI,GAAG,IAAI,KAAK,cAAc,EAAE,GAAG;AACpC,gBAAA,MAAM,KAAK,SAAS,CAAC;AAG3BnF,qBAAgB,EAAE;AACXsB,qBAAS,IAAI,EAAE;AACfA,qBAAS,IAAID,aAAoBxC,QAAM,IAAI,IAAI,EAAE,CAAC;AAClDyB,sBAAU,IAAI,EAAE;AAChBA,sBAAU,IAAIe,aAAoBxC,QAAM,IAAI,IAAI,EAAE,CAAC;AAG1D,gBAAM,KAAKuC,QAAe,IAAIxC,QAAM;AACpC,gBAAI,SAAS,CAAC,IAAI,cAAc,KAAK,IAAI;AAGzC,gBAAM,aAAaN,WAAS,IAAI,gBAAgB,QAAQ,CAAG;AAC3D,qBAAS,aAAa,IAAI;AAC1B,gBAAI,gBAAgB;AAGb6C,sBAAUgE,KAAG,QAAQvG,QAAM;AAE3B0D,2BAAe,IAAI,IAAI6C,GAAC;AAC/B,kBAAM,KAAKtC,cAAqB,IAAI,IAAIsC,GAAC;AAElCjE,0BAAc,IAAI,IAAIiE,GAAC;AAC9B,kBAAM,KAAKtC,cAAqB,IAAI,IAAIsC,GAAC;AAAA,UAAA;AAAA,QAC3C,OACK;AAyCC,cAAA,OAAO,KAAK,SAAS,CAAC;AACtB,cAAA,OAAO,KAAK,SAAS,CAAC;AAE5BvC,kBAAe,GAAG,KAAK,eAAe,KAAK,aAAa;AAKxD5C,mBAAgB,GAAG;AACZsB,mBAAS,KAAK,EAAE;AAChBA,mBAAS,KAAKD,aAAoBxC,QAAM,IAAI,KAAK,EAAE,CAAC;AACpDyB,oBAAU,KAAK,EAAE;AACjBA,oBAAU,KAAKe,aAAoBxC,QAAM,IAAI,KAAK,EAAE,CAAC;AAG5DmB,mBAAgB,GAAG;AACZsB,mBAAS,KAAK,EAAE;AAChBA,mBAAS,KAAKD,aAAoBxC,QAAM,IAAI,KAAK,EAAE,CAAC;AACpDyB,oBAAU,KAAK,EAAE;AACjBA,oBAAU,KAAKe,aAAoBxC,QAAM,IAAI,KAAK,EAAE,CAAC;AAG5D,cAAI,MAAMuC,QAAe,KAAKxC,QAAM;AACpC,cAAI,MAAMwC,QAAe,KAAKxC,QAAM;AAEpCgE,kBAAe,GAAG,MAAM,KAAK,cAAc,MAAM,KAAK,YAAY;AAIhE,YAAA,KAAK,KAAK,IAAI,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI,EAAE;AAC7C,YAAA,KAAK,KAAK,IAAI,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI,EAAE;AAK/C,iBAAO,MAAM;AAWX5C,qBAAgB,CAAC;AACjB,cAAE,IAAI,EAAE,KAAK,aAAa,GAAG,IAAI,EAAE,IAAI,KAAK,aAAa,GAAG,IAAI,EAAE;AAClE,cAAE,IAAI,EAAE,KAAK,aAAa,GAAG,IAAI,EAAE,IAAI,KAAK,aAAa,GAAG,IAAI,EAAE;AAElE,gBAAI,EAAE,KAAK,KAAO,EAAE,KAAK,GAAK;AAErBe,sBAAQ,GAAG,GAAG,CAAC;AAGtBI,wBAAiB,IAAI,EAAE,GAAGvC,QAAM;AAChCuC,wBAAiB,IAAI,EAAE,GAAGvC,QAAM;AAGzBoE,2BAAa,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE;AACzC,oBAAA,MAAMH,cAAqB,KAAK,IAAI,EAAE,IAAIA,cAAqB,KAAK,IAAI,EAAE;AAGhFG,2BAAoB,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE;AACvC,oBAAA,MAAMH,cAAqB,KAAK,IAAI,EAAE,IAAIA,cAAqB,KAAK,IAAI,EAAE;AAGhF,mBAAK,gBAAgB,EAAE;AACvB,mBAAK,gBAAgB,EAAE;AAuBvB;AAAA,YAAA;AASF,cAAE,IAAI,CAAC,KAAK,aAAa,EAAE;AAC3B,cAAE,IAAI;AACA,kBAAA;AACN,kBAAM,KAAK,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE;AAE9B,gBAAI,EAAE,KAAK,KAAO,OAAO,GAAK;AAErB9B,sBAAQ,GAAG,GAAG,CAAC;AAGtBI,wBAAiB,IAAI,EAAE,GAAGvC,QAAM;AAChCuC,wBAAiB,IAAI,EAAE,GAAGvC,QAAM;AAGzBoE,2BAAa,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE;AACzC,oBAAA,MAAMH,cAAqB,KAAK,IAAI,EAAE,IAAIA,cAAqB,KAAK,IAAI,EAAE;AAGhFG,2BAAoB,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE;AACvC,oBAAA,MAAMH,cAAqB,KAAK,IAAI,EAAE,IAAIA,cAAqB,KAAK,IAAI,EAAE;AAGhF,mBAAK,gBAAgB,EAAE;AACvB,mBAAK,gBAAgB,EAAE;AAevB;AAAA,YAAA;AASF,cAAE,IAAI;AACN,cAAE,IAAI,CAAC,KAAK,aAAa,EAAE;AAC3B,kBAAM,KAAK,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE;AACxB,kBAAA;AAEN,gBAAI,EAAE,KAAK,KAAO,OAAO,GAAK;AAErB9B,sBAAQ,GAAG,GAAG,CAAC;AAGtBI,wBAAiB,IAAI,EAAE,GAAGvC,QAAM;AAChCuC,wBAAiB,IAAI,EAAE,GAAGvC,QAAM;AAGzBoE,2BAAa,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE;AACzC,oBAAA,MAAMH,cAAqB,KAAK,IAAI,EAAE,IAAIA,cAAqB,KAAK,IAAI,EAAE;AAGhFG,2BAAoB,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE;AACvC,oBAAA,MAAMH,cAAqB,KAAK,IAAI,EAAE,IAAIA,cAAqB,KAAK,IAAI,EAAE;AAGhF,mBAAK,gBAAgB,EAAE;AACvB,mBAAK,gBAAgB,EAAE;AAevB;AAAA,YAAA;AASF,cAAE,IAAI;AACN,cAAE,IAAI;AACN,kBAAM,EAAE;AACR,kBAAM,EAAE;AAEJ,gBAAA,OAAO,KAAO,OAAO,GAAK;AAErB9B,sBAAQ,GAAG,GAAG,CAAC;AAGtBI,wBAAiB,IAAI,EAAE,GAAGvC,QAAM;AAChCuC,wBAAiB,IAAI,EAAE,GAAGvC,QAAM;AAGzBoE,2BAAa,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE;AACzC,oBAAA,MAAMH,cAAqB,KAAK,IAAI,EAAE,IAAIA,cAAqB,KAAK,IAAI,EAAE;AAGhFG,2BAAoB,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE;AACvC,oBAAA,MAAMH,cAAqB,KAAK,IAAI,EAAE,IAAIA,cAAqB,KAAK,IAAI,EAAE;AAGhF,mBAAK,gBAAgB,EAAE;AACvB,mBAAK,gBAAgB,EAAE;AAEvB;AAAA,YAAA;AAKF;AAAA,UAAA;AAAA,QACF;AAGK3C,iBAAS,UAAU,GAAG,EAAE;AAC/B,kBAAU,IAAI;AAEPA,iBAAS,UAAU,GAAG,EAAE;AAC/B,kBAAU,IAAI;AAAA,MAChB;AAGOkF,eAAA,UAAP,SAAe,OAAkB,OAAkB,UAA0B;AAC3E,oBAAY,KAAK,IAAI,YAAY,KAAK,KAAK,CAAA;AAC/B,oBAAA,KAAK,EAAE,KAAK,IAAI;AAAA,MAC9B;AAGOA,eAAM,SAAb,SAAc,UAAmB,QAAgB,UAAmB,QAAc;AAC1E,YAAA,QAAQ,SAAS,QAAQ;AACzB,YAAA,QAAQ,SAAS,QAAQ;AAEzB,YAAA,UAAU,YAAY;AACxB,YAAA;AACA,YAAA,cAAc,YAAY,KAAK,KAAK,YAAY,KAAK,EAAE,KAAK,GAAG;AACjE,kBAAQ,WAAW,UAAU,QAAQ,UAAU,QAAQ,WAAW;AAAA,QAAA,WACzD,cAAc,YAAY,KAAK,KAAK,YAAY,KAAK,EAAE,KAAK,GAAG;AACxE,kBAAQ,WAAW,UAAU,QAAQ,UAAU,QAAQ,WAAW;AAAA,QAAA,OAC7D;AACE,iBAAA;AAAA,QAAA;AAIT,mBAAW,QAAQ;AACnB,mBAAW,QAAQ;AACnB,iBAAS,QAAQ;AACjB,iBAAS,QAAQ;AACjB,YAAM,QAAQ,SAAS;AACvB,YAAM,QAAQ,SAAS;AAGvB,gBAAQ,QAAQ,UAAU;AAC1B,gBAAQ,QAAQ,QAAQ;AAExB,gBAAQ,QAAQ,OAAO;AACf,gBAAA,QAAQ,OAAO,MAAM;AACzB,YAAA,MAAM,iBAAiB,MAAM;AACzB,gBAAA,cAAc,OAAO,QAAQ;AAAA,QAAA;AAErC,cAAM,gBAAgB,QAAQ;AAG9B,gBAAQ,QAAQ,UAAU;AAC1B,gBAAQ,QAAQ,QAAQ;AAExB,gBAAQ,QAAQ,OAAO;AACf,gBAAA,QAAQ,OAAO,MAAM;AACzB,YAAA,MAAM,iBAAiB,MAAM;AACzB,gBAAA,cAAc,OAAO,QAAQ;AAAA,QAAA;AAErC,cAAM,gBAAgB,QAAQ;AAG9B,YAAI,SAAS,cAAc,SAAS,SAAS,cAAc,OAAO;AAChE,gBAAM,SAAS,IAAI;AACnB,gBAAM,SAAS,IAAI;AAAA,QAAA;AAGd,eAAA;AAAA,MACT;AAGO,eAAA,UAAP,SAAe,SAAkB,UAAoD;AACnF,YAAM,WAAW,QAAQ;AACzB,YAAM,WAAW,QAAQ;AACrB,YAAA,aAAa,QAAQ,aAAa;AAAM;AAC5C,YAAM,QAAQ,SAAS;AACvB,YAAM,QAAQ,SAAS;AACnB,YAAA,UAAU,QAAQ,UAAU;AAAM;AAElC,YAAA,QAAQ,cAAc;AACxB,mBAAS,WAAW,OAAO;AAAA,QAAA;AAIzB,YAAA,QAAQ,QAAQ,MAAM;AACxB,kBAAQ,QAAQ,KAAK,OAAO,QAAQ,QAAQ;AAAA,QAAA;AAG1C,YAAA,QAAQ,QAAQ,MAAM;AACxB,kBAAQ,QAAQ,KAAK,OAAO,QAAQ,QAAQ;AAAA,QAAA;AAG1C,YAAA,QAAQ,WAAW,MAAM,eAAe;AACpC,gBAAA,gBAAgB,QAAQ,QAAQ;AAAA,QAAA;AAIpC,YAAA,QAAQ,QAAQ,MAAM;AACxB,kBAAQ,QAAQ,KAAK,OAAO,QAAQ,QAAQ;AAAA,QAAA;AAG1C,YAAA,QAAQ,QAAQ,MAAM;AACxB,kBAAQ,QAAQ,KAAK,OAAO,QAAQ,QAAQ;AAAA,QAAA;AAG1C,YAAA,QAAQ,WAAW,MAAM,eAAe;AACpC,gBAAA,gBAAgB,QAAQ,QAAQ;AAAA,QAAA;AAGpC,YAAA,QAAQ,WAAW,aAAa,KAAK,CAAC,SAAS,cAAc,CAAC,SAAS,YAAY;AACrF,gBAAM,SAAS,IAAI;AACnB,gBAAM,SAAS,IAAI;AAAA,QAAA;AAWrB,oBAAY,QAAQ,OAAO;AAAA,MAC7B;AACDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AC30CgB,MAAMG,aAAqB;AAAA,IAC1C,SAAU,KAAK,KAAM;AAAA,IACrB,YAAa;AAAA,IACb,cAAe;AAAA,IACf,mBAAoB;AAAA,IACpB,aAAc;AAAA,IACd,YAAa;AAAA,IACb,oBAAqB;AAAA,IACrB,oBAAqB;AAAA;AAgDvB,MAAA;AAAA;AAAA,IAAA,WAAA;AA+BE,eAAAC,OAAY,KAA0B;AAChC,YAAwB,EAAE,gBAAgBA,SAAQ;AAC7C,iBAAA,IAAIA,OAAM,GAAG;AAAA,QAAA;AAGjB,aAAA,SAAS,IAAI;AAGlB,YAAI,CAAC,KAAK;AACR,gBAAM;QACG,WAAA,KAAK,QAAQ,GAAG,GAAG;AACtB,gBAAA,EAAE,SAAS;;AAGb,cAAA,QAAQ,KAAKD,UAAQ;AAEtB,aAAA,WAAW,IAAI,OAAO,IAAI;AAE1B,aAAA,eAAe,IAAI;AAExB,aAAK,gBAAgB;AACrB,aAAK,iBAAiB;AAEtB,aAAK,aAAa;AAClB,aAAK,cAAc;AAEnB,aAAK,cAAc;AACnB,aAAK,eAAe;AAEpB,aAAK,iBAAiB;AAEtB,aAAK,eAAe,IAAI;AACxB,aAAK,YAAY,KAAK,MAAM,IAAI,OAAO;AAEvC,aAAK,gBAAgB;AACrB,aAAK,eAAe;AACpB,aAAK,WAAW;AAGhB,aAAK,iBAAiB,IAAI;AAC1B,aAAK,sBAAsB,IAAI;AAC/B,aAAK,gBAAgB,IAAI;AAEzB,aAAK,eAAe,IAAI;AACxB,aAAK,uBAAuB,IAAI;AAChC,aAAK,uBAAuB,IAAI;AAEhC,aAAK,MAAM;AAAA,MAAA;AAIb,aAAA,UAAA,aAAA,WAAA;AACE,YAAM,SAAS,CAAA;AACf,YAAM,SAAS,CAAA;AAEN,iBAAA1H,KAAI,KAAK,YAAa,GAAEA,IAAGA,KAAIA,GAAE,WAAW;AACnD,iBAAO,KAAKA,EAAC;AAAA,QAAA;AAGN,iBAAA,IAAI,KAAK,aAAc,GAAE,GAAG,IAAI,EAAE,WAAW;AAEhD,cAAA,OAAO,EAAE,eAAe,YAAY;AACtC,mBAAO,KAAK,CAAC;AAAA,UAAA;AAAA,QACf;AAGK,eAAA;AAAA,UACL,SAAS,KAAK;AAAA,UACd;AAAA,UACA;AAAA;MAEJ;AAGO2H,aAAA,eAAP,SAAoB,MAAW,SAAc,SAAY;AACvD,YAAI,CAAC,MAAM;AACT,iBAAO,IAAIA,OAAK;AAAA,QAAA;AAGlB,YAAM,QAAQ,IAAIA,OAAM,KAAK,OAAO;AAEpC,YAAI,KAAK,QAAQ;AACN,mBAAA,IAAI,KAAK,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG;AAC7C,kBAAA,SAAS,QAAQ,MAAM,KAAK,OAAO,CAAC,GAAG,KAAK,CAAC;AAAA,UAAA;AAAA,QACrD;AAGF,YAAI,KAAK,QAAQ;AACf,mBAAS,IAAI,KAAK,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,kBAAA,YAAY,QAAQ,OAAO,KAAK,OAAO,CAAC,GAAG,KAAK,CAAC;AAAA,UAAA;AAAA,QACzD;AAGK,eAAA;AAAA,MACT;AAQA,aAAA,UAAA,cAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAQA,aAAA,UAAA,eAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAYA,aAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEA,aAAA,UAAA,eAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEA,aAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,aAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKU,aAAA,UAAA,aAAV,SAAW,SAAkB;AACtB,aAAA,UAAU,IAAI,OAAO;AAAA,MAC5B;AAKA,aAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,aAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKgB,aAAA,UAAA,mBAAhB,SAAiB,MAAa;AACxB,YAAA,QAAQ,KAAK,cAAc;AAC7B;AAAA,QAAA;AAGF,aAAK,eAAe;AAChB,YAAA,KAAK,gBAAgB,OAAO;AAC9B,mBAAS3H,KAAI,KAAK,YAAYA,IAAGA,KAAIA,GAAE,QAAQ;AAC7C,YAAAA,GAAE,SAAS,IAAI;AAAA,UAAA;AAAA,QACjB;AAAA,MAEJ;AAEA,aAAA,UAAA,mBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKe,aAAA,UAAA,kBAAf,SAAgB,MAAa;AAC3B,aAAK,iBAAiB;AAAA,MACxB;AAEA,aAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKoB,aAAA,UAAA,uBAApB,SAAqB,MAAa;AAChC,aAAK,sBAAsB;AAAA,MAC7B;AAEA,aAAA,UAAA,uBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKc,aAAA,UAAA,iBAAd,SAAe,MAAa;AAC1B,aAAK,gBAAgB;AAAA,MACvB;AAEA,aAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKkB,aAAA,UAAA,qBAAlB,SAAmB,MAAa;AAC9B,aAAK,gBAAgB;AAAA,MACvB;AAKA,aAAA,UAAA,qBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAaA,aAAA,UAAA,cAAA,WAAA;AACE,iBAAS,OAAO,KAAK,YAAY,MAAM,OAAO,KAAK,WAAW;AAC5D,eAAK,QAAQ;AACb,eAAK,WAAW;AAAA,QAAA;AAAA,MAEpB;AAQA2H,aAAA,UAAA,YAAA,SAAU,MAAiB,UAAgC;AAEzD,YAAM,aAAa,KAAK;AACxB,aAAK,aAAa,MAAM,MAAM,SAAS,SAAe;AAC9C,cAAA,QAAQ,WAAW,YAAY,OAAO;AACrC,iBAAA,SAAS,MAAM,OAAO;AAAA,QAAA,CAC9B;AAAA,MACH;AAWAA,aAAA,UAAA,UAAA,SAAQ,QAAmB,QAAmB,UAA8B;AAE1E,YAAM,aAAa,KAAK;AAExB,aAAK,aAAa,QAAQ;AAAA,UACxB,aAAc;AAAA,UACd,IAAK;AAAA,UACL,IAAK;AAAA,QAAA,GACJ,SAASvH,QAAqB,SAAe;AACxC,cAAA,QAAQ,WAAW,YAAY,OAAO;AAC5C,cAAM,UAAU,MAAM;AACtB,cAAM,QAAQ,MAAM;AAEpB,cAAMC,UAAwB,CAAE;AAChC,cAAM,MAAM,QAAQ,QAAQA,SAAQD,QAAO,KAAK;AAChD,cAAI,KAAK;AACP,gBAAM,WAAWC,QAAO;AACxB,gBAAMqD,SAAQ,KAAK,IAAI,KAAK,WAAY,IAAM,UAAWtD,OAAM,EAAE,GAAG,KAAK,WAAW,UAAUA,OAAM,EAAE,CAAC;AACvG,mBAAO,SAAS,SAASsD,QAAOrD,QAAO,QAAQ,QAAQ;AAAA,UAAA;AAEzD,iBAAOD,OAAM;AAAA,QAAA,CACd;AAAA,MACH;AAKA,aAAA,UAAA,gBAAA,WAAA;AACS,eAAA,KAAK,aAAa;MAC3B;AAKA,aAAA,UAAA,gBAAA,WAAA;AACS,eAAA,KAAK,aAAa;MAC3B;AAKA,aAAA,UAAA,iBAAA,WAAA;AACS,eAAA,KAAK,aAAa;MAC3B;AAMA,aAAA,UAAA,iBAAA,WAAA;AACS,eAAA,KAAK,aAAa;MAC3B;AAQW,aAAA,UAAA,cAAX,SAAY,WAAoB;AAE9B,YAAI,KAAK,UAAU;AACjB;AAAA,QAAA;AAGF,iBAASJ,KAAI,KAAK,YAAYA,IAAGA,KAAIA,GAAE,QAAQ;AAC3C,UAAAA,GAAA,KAAK,EAAE,IAAI,SAAS;AACpB,UAAAA,GAAA,QAAQ,GAAG,IAAI,SAAS;AACxB,UAAAA,GAAA,QAAQ,EAAE,IAAI,SAAS;AAAA,QAAA;AAG3B,iBAAS,IAAI,KAAK,aAAa,GAAG,IAAI,EAAE,QAAQ;AAC9C,YAAE,YAAY,SAAS;AAAA,QAAA;AAGpB,aAAA,aAAa,YAAY,SAAS;AAAA,MACzC;AAGQ,aAAA,UAAA,WAAR,SAAS,MAAU;AAEb,YAAA,KAAK,YAAY;AACnB;AAAA,QAAA;AAIF,aAAK,SAAS;AACd,aAAK,SAAS,KAAK;AACnB,YAAI,KAAK,YAAY;AACnB,eAAK,WAAW,SAAS;AAAA,QAAA;AAE3B,aAAK,aAAa;AAClB,UAAE,KAAK;AAAA,MACT;AAWA2H,aAAA,UAAA,aAAA,SAAW,MAAO,MAAK;AAEjB,YAAA,KAAK,YAAY;AACZ,iBAAA;AAAA,QAAA;AAGT,YAAI,MAAe,CAAA;AACnB,YAAI,CAAC,KAAM;AAAA,iBACA,KAAK,QAAQ,IAAI,GAAG;AAC7B,gBAAM,EAAE,UAAW,MAAM,OAAO,KAAI;AAAA,QAAA,WAC3B,OAAO,SAAS,UAAU;AAC7B,gBAAA;AAAA,QAAA;AAGR,YAAM,OAAO,IAAI,KAAK,MAAM,GAAG;AAC/B,aAAK,SAAS,IAAI;AACX,eAAA;AAAA,MACT;AAKAA,aAAA,UAAA,oBAAA,SAAkB,MAAO,MAAK;AAC5B,YAAI,MAAe,CAAA;AACnB,YAAI,CAAC,KAAM;AAAA,iBACA,KAAK,QAAQ,IAAI,GAAG;AAC7B,gBAAM,EAAE,UAAW,MAAM,OAAO,KAAI;AAAA,QAAA,WAC3B,OAAO,SAAS,UAAU;AAC7B,gBAAA;AAAA,QAAA;AAER,YAAI,OAAO;AACJ,eAAA,KAAK,WAAW,GAAG;AAAA,MAC5B;AAKAA,aAAA,UAAA,sBAAA,SAAoB,MAAO,MAAK;AAC9B,YAAI,MAAe,CAAA;AACnB,YAAI,CAAC,KAAM;AAAA,iBACA,KAAK,QAAQ,IAAI,GAAG;AAC7B,gBAAM,EAAE,UAAW,MAAM,OAAO,KAAI;AAAA,QAAA,WAC3B,OAAO,SAAS,UAAU;AAC7B,gBAAA;AAAA,QAAA;AAER,YAAI,OAAO;AACJ,eAAA,KAAK,WAAW,GAAG;AAAA,MAC5B;AAUW,aAAA,UAAA,cAAX,SAAY3H,IAAO;AAGb,YAAA,KAAK,YAAY;AACnB;AAAA,QAAA;AAGF,YAAIA,GAAE,aAAa;AACV,iBAAA;AAAA,QAAA;AAIT,YAAI,KAAKA,GAAE;AACX,eAAO,IAAI;AACT,cAAM,MAAM;AACZ,eAAK,GAAG;AAEH,eAAA,QAAQ,gBAAgB,IAAI,KAAK;AACjC,eAAA,aAAa,IAAI,KAAK;AAE3B,UAAAA,GAAE,cAAc;AAAA,QAAA;AAElB,QAAAA,GAAE,cAAc;AAGhB,YAAI,KAAKA,GAAE;AACX,eAAO,IAAI;AACT,cAAM,MAAM;AACZ,eAAK,GAAG;AAEH,eAAA,eAAe,IAAI,OAAO;AAE/B,UAAAA,GAAE,gBAAgB;AAAA,QAAA;AAEpB,QAAAA,GAAE,gBAAgB;AAGlB,YAAI,IAAIA,GAAE;AACV,eAAO,GAAG;AACR,cAAM,KAAK;AACX,cAAI,EAAE;AAED,eAAA,QAAQ,kBAAkB,EAAE;AAC9B,aAAA,eAAe,KAAK,YAAY;AAEnC,UAAAA,GAAE,gBAAgB;AAAA,QAAA;AAEpB,QAAAA,GAAE,gBAAgB;AAGlB,YAAIA,GAAE,QAAQ;AACV,UAAAA,GAAA,OAAO,SAASA,GAAE;AAAA,QAAA;AAGtB,YAAIA,GAAE,QAAQ;AACV,UAAAA,GAAA,OAAO,SAASA,GAAE;AAAA,QAAA;AAGlB,YAAAA,MAAK,KAAK,YAAY;AACxB,eAAK,aAAaA,GAAE;AAAA,QAAA;AAGtB,QAAAA,GAAE,cAAc;AAEhB,UAAE,KAAK;AAEF,aAAA,QAAQ,eAAeA,EAAC;AAEtB,eAAA;AAAA,MACT;AAQW,aAAA,UAAA,cAAX,SAA6B,OAAQ;AAI/B,YAAA,KAAK,YAAY;AACZ,iBAAA;AAAA,QAAA;AAIT,cAAM,SAAS;AACf,cAAM,SAAS,KAAK;AACpB,YAAI,KAAK,aAAa;AACpB,eAAK,YAAY,SAAS;AAAA,QAAA;AAE5B,aAAK,cAAc;AACnB,UAAE,KAAK;AAGP,cAAM,QAAQ,QAAQ;AAChB,cAAA,QAAQ,QAAQ,MAAM;AAC5B,cAAM,QAAQ,OAAO;AACf,cAAA,QAAQ,OAAO,MAAM,QAAQ;AACnC,YAAI,MAAM,QAAQ;AACV,gBAAA,QAAQ,YAAY,OAAO,MAAM;AACnC,cAAA,QAAQ,cAAc,MAAM;AAElC,cAAM,QAAQ,QAAQ;AAChB,cAAA,QAAQ,QAAQ,MAAM;AAC5B,cAAM,QAAQ,OAAO;AACf,cAAA,QAAQ,OAAO,MAAM,QAAQ;AACnC,YAAI,MAAM,QAAQ;AACV,gBAAA,QAAQ,YAAY,OAAO,MAAM;AACnC,cAAA,QAAQ,cAAc,MAAM;AAG9B,YAAA,MAAM,sBAAsB,OAAO;AAC5B,mBAAA,OAAO,MAAM,QAAQ,kBAAkB,MAAM,OAAO,KAAK,MAAM;AAClE,gBAAA,KAAK,SAAS,MAAM,SAAS;AAG/B,mBAAK,QAAQ;;UACf;AAAA,QACF;AAKK,eAAA;AAAA,MACT;AAMY,aAAA,UAAA,eAAZ,SAAa,OAAY;AAEnB,YAAA,KAAK,YAAY;AACnB;AAAA,QAAA;AAIF,YAAI,MAAM,QAAQ;AACV,gBAAA,OAAO,SAAS,MAAM;AAAA,QAAA;AAG9B,YAAI,MAAM,QAAQ;AACV,gBAAA,OAAO,SAAS,MAAM;AAAA,QAAA;AAG1B,YAAA,SAAS,KAAK,aAAa;AAC7B,eAAK,cAAc,MAAM;AAAA,QAAA;AAI3B,YAAM,QAAQ,MAAM;AACpB,YAAM,QAAQ,MAAM;AAGpB,cAAM,SAAS,IAAI;AACnB,cAAM,SAAS,IAAI;AAGf,YAAA,MAAM,QAAQ,MAAM;AACtB,gBAAM,QAAQ,KAAK,OAAO,MAAM,QAAQ;AAAA,QAAA;AAGtC,YAAA,MAAM,QAAQ,MAAM;AACtB,gBAAM,QAAQ,KAAK,OAAO,MAAM,QAAQ;AAAA,QAAA;AAGtC,YAAA,MAAM,WAAW,MAAM,aAAa;AAChC,gBAAA,cAAc,MAAM,QAAQ;AAAA,QAAA;AAGpC,cAAM,QAAQ,OAAO;AACrB,cAAM,QAAQ,OAAO;AAGjB,YAAA,MAAM,QAAQ,MAAM;AACtB,gBAAM,QAAQ,KAAK,OAAO,MAAM,QAAQ;AAAA,QAAA;AAGtC,YAAA,MAAM,QAAQ,MAAM;AACtB,gBAAM,QAAQ,KAAK,OAAO,MAAM,QAAQ;AAAA,QAAA;AAGtC,YAAA,MAAM,WAAW,MAAM,aAAa;AAChC,gBAAA,cAAc,MAAM,QAAQ;AAAA,QAAA;AAGpC,cAAM,QAAQ,OAAO;AACrB,cAAM,QAAQ,OAAO;AAGrB,UAAE,KAAK;AAGH,YAAA,MAAM,sBAAsB,OAAO;AACjC,cAAA,OAAO,MAAM;AACjB,iBAAO,MAAM;AACP,gBAAA,KAAK,SAAS,OAAO;AAGvB,mBAAK,QAAQ;;AAGf,mBAAO,KAAK;AAAA,UAAA;AAAA,QACd;AAGG,aAAA,QAAQ,gBAAgB,KAAK;AAAA,MACpC;AAaA2H,aAAA,UAAA,OAAA,SAAK,UAAkB,oBAA6B,oBAA2B;AACxE,aAAA,QAAQ,YAAY,QAAQ;AAE5B,aAAA,qBAAqB,OAAO,oBAAoB;AAE9B,+BAAA;AAAA,QAAA;AAGvB,6BAAqB,sBAAsB,KAAK;AAChD,6BAAqB,sBAAsB,KAAK;AAGhD,YAAI,KAAK,cAAc;AACrB,eAAK,gBAAe;AACpB,eAAK,eAAe;AAAA,QAAA;AAGtB,aAAK,WAAW;AAEX,aAAA,OAAO,MAAM,QAAQ;AAC1B,aAAK,OAAO,qBAAqB;AACjC,aAAK,OAAO,qBAAqB;AAC5B,aAAA,OAAO,eAAe,KAAK;AAC3B,aAAA,OAAO,aAAa,KAAK;AAG9B,aAAK,eAAc;AAGf,YAAA,KAAK,kBAAkB,WAAW,GAAK;AACpC,eAAA,SAAS,WAAW,KAAK,MAAM;AAGpC,mBAAS3H,KAAI,KAAK,YAAYA,IAAGA,KAAIA,GAAE,WAAW;AAE5C,gBAAAA,GAAE,gBAAgB,OAAO;AAC3B;AAAA,YAAA;AAGE,gBAAAA,GAAE,YAAY;AAChB;AAAA,YAAA;AAIF,YAAAA,GAAE,oBAAmB;AAAA,UAAA;AAGvB,eAAK,gBAAe;AAAA,QAAA;AAIlB,YAAA,KAAK,uBAAuB,WAAW,GAAK;AACzC,eAAA,SAAS,cAAc,KAAK,MAAM;AAAA,QAAA;AAGzC,YAAI,KAAK,eAAe;AACtB,eAAK,YAAW;AAAA,QAAA;AAGlB,aAAK,WAAW;AAEX,aAAA,QAAQ,aAAa,QAAQ;AAAA,MACpC;AAMA,aAAA,UAAA,kBAAA,WAAA;AAAA,YAIC,QAAA;AAHC,aAAK,aAAa,YAChB,SAAC,QAAsB,QAAyB;AAAA,iBAAA,MAAK,cAAc,QAAQ,MAAM;AAAA,QAAA,CAAC;AAAA,MAEtF;AAMA2H,aAAA,UAAA,gBAAA,SAAc,QAAsB,QAAoB;AACtD,YAAM,WAAW,OAAO;AACxB,YAAM,WAAW,OAAO;AAExB,YAAM,SAAS,OAAO;AACtB,YAAM,SAAS,OAAO;AAEhB,YAAA,QAAQ,SAAS;AACjB,YAAA,QAAQ,SAAS;AAGvB,YAAI,SAAS,OAAO;AAClB;AAAA,QAAA;AAME,YAAA,OAAO,MAAM,eAAgB;AACjC,eAAO,MAAM;AACP,cAAA,KAAK,SAAS,OAAO;AACjB,gBAAA,KAAK,KAAK,QAAQ;AAClB,gBAAA,KAAK,KAAK,QAAQ;AAClB,gBAAA,KAAK,KAAK,QAAQ;AAClB,gBAAA,KAAK,KAAK,QAAQ;AAExB,gBAAI,MAAM,YAAY,MAAM,YAAY,MAAM,UAAU,MAAM,QAAQ;AAEpE;AAAA,YAAA;AAGF,gBAAI,MAAM,YAAY,MAAM,YAAY,MAAM,UAAU,MAAM,QAAQ;AAEpE;AAAA,YAAA;AAAA,UACF;AAGF,iBAAO,KAAK;AAAA,QAAA;AAGd,YAAI,MAAM,cAAc,KAAK,KAAK,OAAO;AACvC;AAAA,QAAA;AAEF,YAAI,SAAS,cAAc,QAAQ,KAAK,OAAO;AAC7C;AAAA,QAAA;AAIF,YAAM,UAAU,QAAQ,OAAO,UAAU,QAAQ,UAAU,MAAM;AACjE,YAAI,WAAW,MAAM;AACnB;AAAA,QAAA;AAIF,gBAAQ,SAAS;AACb,YAAA,KAAK,iBAAiB,MAAM;AAC9B,kBAAQ,SAAS,KAAK;AACtB,eAAK,cAAc,SAAS;AAAA,QAAA;AAE9B,aAAK,gBAAgB;AAErB,UAAE,KAAK;AAAA,MACT;AAMA,aAAA,UAAA,iBAAA,WAAA;AAEM,YAAApG;AACJ,YAAI,SAAS,KAAK;AAClB,eAAOA,KAAI,QAAQ;AACjB,mBAASA,GAAE;AACL,cAAA,WAAWA,GAAE;AACb,cAAA,WAAWA,GAAE;AACb,cAAA,SAASA,GAAE;AACX,cAAA,SAASA,GAAE;AACX,cAAA,QAAQ,SAAS;AACjB,cAAA,QAAQ,SAAS;AAGvB,cAAIA,GAAE,cAAc;AAClB,gBAAI,MAAM,cAAc,KAAK,KAAK,OAAO;AACvC,mBAAK,eAAeA,EAAC;AACrB;AAAA,YAAA;AAGF,gBAAI,SAAS,cAAc,QAAQ,KAAK,OAAO;AAC7C,mBAAK,eAAeA,EAAC;AACrB;AAAA,YAAA;AAIF,YAAAA,GAAE,eAAe;AAAA,UAAA;AAGnB,cAAM,UAAU,MAAM,QAAa,KAAA,CAAC,MAAM,SAAQ;AAClD,cAAM,UAAU,MAAM,QAAa,KAAA,CAAC,MAAM,SAAQ;AAG9C,cAAA,WAAW,SAAS,WAAW,OAAO;AACxC;AAAA,UAAA;AAGF,cAAM,WAAW,SAAS,UAAU,MAAM,EAAE;AAC5C,cAAM,WAAW,SAAS,UAAU,MAAM,EAAE;AAC5C,cAAM,UAAU,KAAK,aAAa,YAAY,UAAU,QAAQ;AAGhE,cAAI,WAAW,OAAO;AACpB,iBAAK,eAAeA,EAAC;AACrB;AAAA,UAAA;AAIF,UAAAA,GAAE,OAAO,IAAI;AAAA,QAAA;AAAA,MAEjB;AAGc,aAAA,UAAA,iBAAd,SAAe,SAAgB;AAE7B,YAAI,QAAQ,QAAQ;AACV,kBAAA,OAAO,SAAS,QAAQ;AAAA,QAAA;AAElC,YAAI,QAAQ,QAAQ;AACV,kBAAA,OAAO,SAAS,QAAQ;AAAA,QAAA;AAE9B,YAAA,WAAW,KAAK,eAAe;AACjC,eAAK,gBAAgB,QAAQ;AAAA,QAAA;AAGvB,gBAAA,QAAQ,SAAS,IAAI;AAE7B,UAAE,KAAK;AAAA,MACT;AAgEAoG,aAAA,UAAA,KAAA,SAAG,MAAM,UAAQ;AACf,YAAI,OAAO,SAAS,YAAY,OAAO,aAAa,YAAY;AACvD,iBAAA;AAAA,QAAA;AAEL,YAAA,CAAC,KAAK,YAAY;AACpB,eAAK,aAAa,CAAA;AAAA,QAAA;AAEpB,YAAI,CAAC,KAAK,WAAW,IAAI,GAAG;AACrB,eAAA,WAAW,IAAI,IAAI;;AAE1B,aAAK,WAAW,IAAI,EAAE,KAAK,QAAQ;AAC5B,eAAA;AAAA,MACT;AAaAA,aAAA,UAAA,MAAA,SAAI,MAAM,UAAQ;AAChB,YAAI,OAAO,SAAS,YAAY,OAAO,aAAa,YAAY;AACvD,iBAAA;AAAA,QAAA;AAET,YAAM,YAAY,KAAK,cAAc,KAAK,WAAW,IAAI;AACzD,YAAI,CAAC,aAAa,CAAC,UAAU,QAAQ;AAC5B,iBAAA;AAAA,QAAA;AAEH,YAAA,QAAQ,UAAU,QAAQ,QAAQ;AACxC,YAAI,SAAS,GAAG;AACJ,oBAAA,OAAO,OAAO,CAAC;AAAA,QAAA;AAEpB,eAAA;AAAA,MACT;AAEAA,aAAO,UAAA,UAAP,SAAQ,MAAc,MAAY,MAAY,MAAU;AACtD,YAAM,YAAY,KAAK,cAAc,KAAK,WAAW,IAAI;AACzD,YAAI,CAAC,aAAa,CAAC,UAAU,QAAQ;AAC5B,iBAAA;AAAA,QAAA;AAET,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,oBAAU,CAAC,EAAE,KAAK,MAAM,MAAM,MAAM,IAAI;AAAA,QAAA;AAE1C,eAAO,UAAU;AAAA,MACnB;AAGY,aAAA,UAAA,eAAZ,SAAa,SAAgB;AACtB,aAAA,QAAQ,iBAAiB,OAAO;AAAA,MACvC;AAGU,aAAA,UAAA,aAAV,SAAW,SAAgB;AACpB,aAAA,QAAQ,eAAe,OAAO;AAAA,MACrC;AAGAA,aAAA,UAAA,WAAA,SAAS,SAAkBC,cAAqB;AACzC,aAAA,QAAQ,aAAa,SAASA,YAAW;AAAA,MAChD;AAGAD,aAAA,UAAA,YAAA,SAAU,SAAkB,SAAuB;AAC5C,aAAA,QAAQ,cAAc,SAAS,OAAO;AAAA,MAC7C;AAkBDA,aAAAA;AAAAA,IAAA,EAAA;AAAA;ACrmCD,MAAA;AAAA;AAAA,IAAA,WAAA;AAQEE,eAAAA,MAAYvH,IAAI,GAAI,GAAE;AAChB,YAAwB,EAAE,gBAAgBuH,QAAO;AACnD,iBAAO,IAAIA,MAAKvH,IAAG,GAAG,CAAC;AAAA,QAAA;AAErB,YAAA,OAAOA,OAAM,aAAa;AAC5B,eAAK,IAAI;AACT,eAAK,IAAI;AACT,eAAK,IAAI;AAAA,QAAA,WACA,OAAOA,OAAM,UAAU;AAChC,eAAK,IAAIA,GAAE;AACX,eAAK,IAAIA,GAAE;AACX,eAAK,IAAIA,GAAE;AAAA,QAAA,OACN;AACL,eAAK,IAAIA;AACT,eAAK,IAAI;AACT,eAAK,IAAI;AAAA,QAAA;AAAA,MAEgB;AAI7B,YAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,GAAG,KAAK;AAAA,UACR,GAAG,KAAK;AAAA,UACR,GAAG,KAAK;AAAA;MAEZ;AAGmB,YAAA,eAAnB,SAAoB,MAAS;AAC3B,YAAM,MAAM,OAAO,OAAOuH,MAAK,SAAS;AACxC,YAAI,IAAI,KAAK;AACb,YAAI,IAAI,KAAK;AACb,YAAI,IAAI,KAAK;AACN,eAAA;AAAA,MACT;AAGOA,YAAA,MAAP,SAAWvH,IAAW,GAAW,GAAS;AACxC,YAAM,MAAM,OAAO,OAAOuH,MAAK,SAAS;AACxC,YAAI,IAAIvH;AACR,YAAI,IAAI;AACR,YAAI,IAAI;AACD,eAAA;AAAA,MACT;AAEOuH,YAAA,OAAP,WAAA;AACE,YAAM,MAAM,OAAO,OAAOA,MAAK,SAAS;AACxC,YAAI,IAAI;AACR,YAAI,IAAI;AACR,YAAI,IAAI;AACD,eAAA;AAAA,MACT;AAEY,YAAA,QAAZ,SAAajH,IAAY;AAEvB,eAAOiH,MAAK,IAAIjH,GAAE,GAAGA,GAAE,GAAGA,GAAE,CAAC;AAAA,MAC/B;AAGA,YAAA,UAAA,WAAA,WAAA;AACS,eAAA,KAAK,UAAU,IAAI;AAAA,MAC5B;AAGc,YAAA,UAAd,SAAe,KAAQ;AACrB,YAAI,QAAQ,QAAQ,OAAO,QAAQ,aAAa;AACvC,iBAAA;AAAA,QAAA;AAET,eAAO,OAAO,SAAS,IAAI,CAAC,KAAK,OAAO,SAAS,IAAI,CAAC,KAAK,OAAO,SAAS,IAAI,CAAC;AAAA,MAClF;AAEa,YAAA,SAAb,SAAc,GAAM;AAAA,MAEpB;AAEA,YAAA,UAAA,UAAA,WAAA;AACE,aAAK,IAAI;AACT,aAAK,IAAI;AACT,aAAK,IAAI;AACF,eAAA;AAAA,MACT;AAEAiH,YAAA,UAAA,MAAA,SAAIvH,IAAW,GAAW,GAAS;AACjC,aAAK,IAAIA;AACT,aAAK,IAAI;AACT,aAAK,IAAI;AACF,eAAA;AAAA,MACT;AAEG,YAAA,UAAA,MAAH,SAAI,GAAY;AACd,aAAK,KAAK,EAAE;AACZ,aAAK,KAAK,EAAE;AACZ,aAAK,KAAK,EAAE;AACL,eAAA;AAAA,MACT;AAEG,YAAA,UAAA,MAAH,SAAI,GAAY;AACd,aAAK,KAAK,EAAE;AACZ,aAAK,KAAK,EAAE;AACZ,aAAK,KAAK,EAAE;AACL,eAAA;AAAA,MACT;AAEG,YAAA,UAAA,MAAH,SAAI,GAAS;AACX,aAAK,KAAK;AACV,aAAK,KAAK;AACV,aAAK,KAAK;AACH,eAAA;AAAA,MACT;AAEO,YAAA,WAAP,SAAgBM,IAAc,GAAY;AAGjC,eAAAA,OAAM,KACX,OAAOA,OAAM,YAAYA,OAAM,QAC/B,OAAO,MAAM,YAAY,MAAM,QAC/BA,GAAE,MAAM,EAAE,KAAKA,GAAE,MAAM,EAAE,KAAKA,GAAE,MAAM,EAAE;AAAA,MAC5C;AAGO,YAAA,MAAP,SAAWA,IAAc,GAAY;AAC5B,eAAAA,GAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,EAAE;AAAA,MACzC;AAGO,YAAA,QAAP,SAAaA,IAAc,GAAY;AAC9B,eAAA,IAAIiH,MACTjH,GAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,EAAE,GACpBA,GAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,EAAE,GACpBA,GAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,EAAE,CAAC;AAAA,MAEzB;AAEO,YAAA,MAAP,SAAWA,IAAc,GAAY;AACnC,eAAO,IAAIiH,MAAKjH,GAAE,IAAI,EAAE,GAAGA,GAAE,IAAI,EAAE,GAAGA,GAAE,IAAI,EAAE,CAAC;AAAA,MACjD;AAEO,YAAA,MAAP,SAAWA,IAAc,GAAY;AACnC,eAAO,IAAIiH,MAAKjH,GAAE,IAAI,EAAE,GAAGA,GAAE,IAAI,EAAE,GAAGA,GAAE,IAAI,EAAE,CAAC;AAAA,MACjD;AAEO,YAAA,MAAP,SAAWA,IAAc,GAAS;AACzB,eAAA,IAAIiH,MAAK,IAAIjH,GAAE,GAAG,IAAIA,GAAE,GAAG,IAAIA,GAAE,CAAC;AAAA,MAC3C;AAEA,YAAA,UAAA,MAAA,WAAA;AACO,aAAA,IAAI,CAAC,KAAK;AACV,aAAA,IAAI,CAAC,KAAK;AACV,aAAA,IAAI,CAAC,KAAK;AACR,eAAA;AAAA,MACT;AAEU,YAAA,MAAV,SAAWA,IAAY;AACd,eAAA,IAAIiH,MAAK,CAACjH,GAAE,GAAG,CAACA,GAAE,GAAG,CAACA,GAAE,CAAC;AAAA,MAClC;AACDiH,aAAAA;AAAAA,IAAA,EAAA;AAAA;ACjLgB,MAAMhD,OAAK5C,KAAY,GAAG,CAAC;AAC3B,MAAM6C,OAAK7C,KAAY,GAAG,CAAC;AAc5C,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAA+B,gBAAK6F,YAAA,MAAA;AAiBtBA,eAAAA,WAAAjD,MAAgBC,KAAc;AAA1C,YAkBC,QAAA;AAhBK,YAAwB,EAAE,iBAAgBgD,aAAY;AACjD,iBAAA,IAAIA,WAAUjD,MAAIC,GAAE;AAAA,QAAA;AAG7B,gBAAA,qBAAQ;AAER,cAAK,SAASgD,WAAU;AACxB,cAAK,WAAW5G,iBAAS;AAEzB,cAAK,YAAY2D,OAAK,KAAK,MAAMA,IAAE,IAAI,KAAK;AAC5C,cAAK,YAAYC,MAAK,KAAK,MAAMA,GAAE,IAAI,KAAK;AAEvC,cAAA,YAAY,KAAK;AACjB,cAAA,YAAY,KAAK;AACtB,cAAK,eAAe;AACpB,cAAK,eAAe;;;AAItB,iBAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UAEX,SAAS,KAAK;AAAA,UACd,SAAS,KAAK;AAAA,UAEd,SAAS,KAAK;AAAA,UACd,SAAS,KAAK;AAAA,UACd,YAAY,KAAK;AAAA,UACjB,YAAY,KAAK;AAAA;MAErB;AAGmB,iBAAA,eAAnB,SAAoB,MAAS;AAC3B,YAAM,QAAQ,IAAIgD,WAAU,KAAK,SAAS,KAAK,OAAO;AACtD,YAAI,MAAM,cAAc;AAChB,gBAAA,cAAc,KAAK,OAAO;AAAA,QAAA;AAElC,YAAI,MAAM,cAAc;AAChB,gBAAA,cAAc,KAAK,OAAO;AAAA,QAAA;AAE3B,eAAA;AAAA,MACT;AAGA,iBAAA,UAAA,SAAA,WAAA;AAAA,MAEA;AAEA,iBAAA,UAAA,YAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEA,iBAAA,UAAA,UAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAGO,iBAAA,UAAA,UAAP,SAAQlH,IAAa;AACZ,eAAA,KAAK,cAAcA,EAAC;AAAA,MAC7B;AAKa,iBAAA,UAAA,gBAAb,SAAcA,IAAa;AACzB,YAAIA,IAAG;AACA,eAAA,UAAU,QAAQA,EAAC;AACxB,eAAK,eAAe;AAAA,QAAA,OACf;AACL,eAAK,UAAU;AACf,eAAK,eAAe;AAAA,QAAA;AAEf,eAAA;AAAA,MACT;AAKA,iBAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAGO,iBAAA,UAAA,UAAP,SAAQA,IAAa;AACZ,eAAA,KAAK,cAAcA,EAAC;AAAA,MAC7B;AAKa,iBAAA,UAAA,gBAAb,SAAcA,IAAa;AACzB,YAAIA,IAAG;AACA,eAAA,UAAU,QAAQA,EAAC;AACxB,eAAK,eAAe;AAAA,QAAA,OACf;AACL,eAAK,UAAU;AACf,eAAK,eAAe;AAAA,QAAA;AAEf,eAAA;AAAA,MACT;AAKA,iBAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKAkH,iBAAA,UAAA,OAAA,SAAKjD,MAAeC,KAAa;AAC1B,aAAA,UAAU,QAAQD,IAAE;AACpB,aAAA,UAAU,QAAQC,GAAE;AACzB,aAAK,eAAe;AACpB,aAAK,eAAe;AACb,eAAA;AAAA,MACT;AAOA,iBAAA,UAAA,SAAA,WAAA;AACQ,YAAA,QAAQ,IAAIgD;AAClB,cAAM,SAAS,KAAK;AACpB,cAAM,WAAW,KAAK;AAChB,cAAA,UAAU,QAAQ,KAAK,SAAS;AAChC,cAAA,UAAU,QAAQ,KAAK,SAAS;AAChC,cAAA,UAAU,QAAQ,KAAK,SAAS;AAChC,cAAA,UAAU,QAAQ,KAAK,SAAS;AACtC,cAAM,eAAe,KAAK;AAC1B,cAAM,eAAe,KAAK;AACnB,eAAA;AAAA,MACT;AAKA,iBAAA,UAAA,gBAAA,WAAA;AACS,eAAA;AAAA,MACT;AASAA,iBAAA,UAAA,YAAA,SAAUhG,KAAoB,GAAY;AACjC,eAAA;AAAA,MACT;AAUAgG,iBAAO,UAAA,UAAP,SAAQzH,SAAuBD,QAAqB0B,KAAe,YAAkB;AAS7E,YAAA,KAAK,IAAI,SAASA,IAAG,GAAG,KAAK,IAAI1B,OAAM,IAAI0B,IAAG,CAAC,CAAC;AAChD,YAAA,KAAK,IAAI,SAASA,IAAG,GAAG,KAAK,IAAI1B,OAAM,IAAI0B,IAAG,CAAC,CAAC;AACtD,YAAM/B,KAAI,KAAK,IAAI,IAAI,EAAE;AAEzB,YAAM8E,OAAK,KAAK;AAChB,YAAMC,MAAK,KAAK;AAChB,YAAMiD,KAAI,KAAK,IAAIjD,KAAID,IAAE;AACzB,YAAM9D,UAAS,KAAK,IAAIgH,GAAE,GAAG,CAACA,GAAE,CAAC;AACjC,QAAAhH,QAAO,UAAS;AAKV,YAAA,YAAY,KAAK,IAAIA,SAAQ,KAAK,IAAI8D,MAAI,EAAE,CAAC;AACnD,YAAM,cAAc,KAAK,IAAI9D,SAAQhB,EAAC;AAEtC,YAAI,eAAe,GAAK;AACf,iBAAA;AAAA,QAAA;AAGT,YAAM,IAAI,YAAY;AACtB,YAAI,IAAI,KAAOK,OAAM,cAAc,GAAG;AAC7B,iBAAA;AAAA,QAAA;AAGH,YAAA,IAAI,KAAK,IAAI,IAAI,KAAK,WAAW,GAAGL,EAAC,CAAC;AAI5C,YAAM,IAAI,KAAK,IAAI+E,KAAID,IAAE;AACzB,YAAM,KAAK,KAAK,IAAI,GAAG,CAAC;AACxB,YAAI,MAAM,GAAK;AACN,iBAAA;AAAA,QAAA;AAGH,YAAA3E,KAAI,KAAK,IAAI,KAAK,IAAI,GAAG2E,IAAE,GAAG,CAAC,IAAI;AACrC,YAAA3E,KAAI,KAAO,IAAMA,IAAG;AACf,iBAAA;AAAA,QAAA;AAGT,QAAAG,QAAO,WAAW;AAClB,YAAI,YAAY,GAAK;AACnB,UAAAA,QAAO,SAAS,IAAI,QAAQyB,IAAG,GAAGf,OAAM,EAAE;eACrC;AACL,UAAAV,QAAO,SAAS,IAAI,QAAQyB,IAAG,GAAGf,OAAM;AAAA,QAAA;AAEnC,eAAA;AAAA,MACT;AAUA+G,iBAAA,UAAA,cAAA,SAAY,MAAiBhG,KAAoB,YAAkB;AACjEM,sBAAqByC,MAAI/C,KAAI,KAAK,SAAS;AAC3CM,sBAAqB0C,MAAIhD,KAAI,KAAK,SAAS;AAEtC,aAAA,cAAc,MAAM+C,MAAIC,IAAE;AAC1B,aAAA,OAAO,MAAM,KAAK,QAAQ;AAAA,MACjC;AASAgD,iBAAA,UAAA,cAAA,SAAY,UAAoB,SAAgB;AAC9C,iBAAS,OAAO;AACTtF,qBAAa,SAAS,QAAQ,KAAK,KAAK,WAAW,KAAK,KAAK,SAAS;AAC7E,iBAAS,IAAI;AAAA,MACf;AAEoB,iBAAA,UAAA,uBAApB,SAAqB,OAAoB;AACjC,cAAA,WAAW,CAAC,IAAI,KAAK;AACrB,cAAA,WAAW,CAAC,IAAI,KAAK;AAC3B,cAAM,WAAW,SAAS;AAC1B,cAAM,UAAU;AAChB,cAAM,WAAW,KAAK;AAAA,MACxB;AApROsF,iBAAI,OAAG;AAqRfA,aAAAA;AAAAA,IAAAA,EAtR8B,KAAK;AAAA;AAwR7B,MAAM,OAAO;ACvSH,MAAMjD,OAAK5C,KAAY,GAAG,CAAC;AAC3B,MAAM,KAAKA,KAAY,GAAG,CAAC;AAiB5C,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAAgC,gBAAK+F,aAAA,MAAA;AAevBA,eAAAA,YAAA,UAAwB,MAAc;AAAlD,YA0BC,QAAA;AAxBK,YAAwB,EAAE,iBAAgBA,cAAa;AAClD,iBAAA,IAAIA,YAAW,UAAU,IAAI;AAAA,QAAA;AAGtC,gBAAA,qBAAQ;AAER,cAAK,SAASA,YAAW;AACzB,cAAK,WAAW9G,iBAAS;AACzB,cAAK,aAAa,CAAA;AAClB,cAAK,UAAU;AACf,cAAK,eAAe;AACpB,cAAK,eAAe;AACpB,cAAK,kBAAkB;AACvB,cAAK,kBAAkB;AAElB,cAAA,WAAW,CAAC,CAAC;AAEd,YAAA,YAAY,SAAS,QAAQ;AAC/B,cAAI,MAAM;AACR,kBAAK,YAAY,QAAQ;AAAA,UAAA,OACpB;AACL,kBAAK,aAAa,QAAQ;AAAA,UAAA;AAAA,QAC5B;;;AAKJ,kBAAA,UAAA,aAAA,WAAA;AACE,YAAM,OAAO;AAAA,UACX,MAAM,KAAK;AAAA,UACX,UAAU,KAAK;AAAA,UACf,QAAQ,KAAK;AAAA,UACb,eAAe,KAAK;AAAA,UACpB,eAAe,KAAK;AAAA,UACpB,YAAY;AAAA,UACZ,YAAY;AAAA;AAEd,YAAI,KAAK,cAAc;AACrB,eAAK,aAAa,KAAK;AAAA,QAAA;AAEzB,YAAI,KAAK,cAAc;AACrB,eAAK,aAAa,KAAK;AAAA,QAAA;AAElB,eAAA;AAAA,MACT;AAGO8G,kBAAA,eAAP,SAAoB,MAAW,SAAc,SAAY;AACvD,YAAM,WAAmB,CAAA;AACzB,YAAI,KAAK,UAAU;AACjB,mBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,qBAAS,KAAK,QAAQ,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,UAAA;AAAA,QAC/C;AAEF,YAAM,QAAQ,IAAIA,YAAW,UAAU,KAAK,MAAM;AAClD,YAAI,KAAK,YAAY;AACb,gBAAA,cAAc,KAAK,UAAU;AAAA,QAAA;AAErC,YAAI,KAAK,YAAY;AACb,gBAAA,cAAc,KAAK,UAAU;AAAA,QAAA;AAE9B,eAAA;AAAA,MACT;AAOA,kBAAA,UAAA,UAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEA,kBAAA,UAAA,YAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AASW,kBAAA,UAAA,cAAX,SAAY,UAAqB;AAG3B,YAAA,SAAS,SAAS,GAAG;AACvB;AAAA,QAAA;AAGF,iBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AAC7B,mBAAS,IAAI,CAAC;AACd,mBAAS,CAAC;AAAA,QAE8D;AAGrF,aAAK,aAAa,CAAA;AACb,aAAA,UAAU,SAAS,SAAS;AACjC,iBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACxC,eAAK,WAAW,CAAC,IAAI,KAAK,MAAM,SAAS,CAAC,CAAC;AAAA,QAAA;AAExC,aAAA,WAAW,SAAS,MAAM,IAAI,KAAK,MAAM,SAAS,CAAC,CAAC;AAEzD,aAAK,eAAe,KAAK,WAAW,KAAK,UAAU,CAAC;AAC/C,aAAA,eAAe,KAAK,WAAW,CAAC;AACrC,aAAK,kBAAkB;AACvB,aAAK,kBAAkB;AAChB,eAAA;AAAA,MACT;AAQY,kBAAA,UAAA,eAAZ,SAAa,UAAqB;AAGhC,iBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AAE7B,mBAAS,IAAI,CAAC;AACd,mBAAS,CAAC;AAAA,QAC8D;AAGrF,aAAK,UAAU,SAAS;AACxB,iBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACxC,eAAK,WAAW,CAAC,IAAI,KAAK,MAAM,SAAS,CAAC,CAAC;AAAA,QAAA;AAG7C,aAAK,kBAAkB;AACvB,aAAK,kBAAkB;AACvB,aAAK,eAAe;AACpB,aAAK,eAAe;AACb,eAAA;AAAA,MACT;AAGA,kBAAA,UAAA,SAAA,WAAA;AACE,YAAI,KAAK,UAAU;AACZ,eAAA,YAAY,KAAK,UAAU;AAAA,QAAA,OAC3B;AACA,eAAA,aAAa,KAAK,UAAU;AAAA,QAAA;AAAA,MAErC;AAMa,kBAAA,UAAA,gBAAb,SAAc,YAAgB;AAE5B,aAAK,eAAe;AACpB,aAAK,kBAAkB;AAAA,MACzB;AAEA,kBAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAMa,kBAAA,UAAA,gBAAb,SAAc,YAAgB;AAE5B,aAAK,eAAe;AACpB,aAAK,kBAAkB;AAAA,MACzB;AAEA,kBAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAOA,kBAAA,UAAA,SAAA,WAAA;AACQ,YAAA,QAAQ,IAAIA;AACZ,cAAA,aAAa,KAAK,UAAU;AAClC,cAAM,SAAS,KAAK;AACpB,cAAM,WAAW,KAAK;AACtB,cAAM,eAAe,KAAK;AAC1B,cAAM,eAAe,KAAK;AAC1B,cAAM,kBAAkB,KAAK;AAC7B,cAAM,kBAAkB,KAAK;AACtB,eAAA;AAAA,MACT;AAKA,kBAAA,UAAA,gBAAA,WAAA;AAEE,eAAO,KAAK,UAAU;AAAA,MACxB;AAGAA,kBAAA,UAAA,eAAA,SAAa,MAAiB,YAAkB;AAE9C,aAAK,SAAS,UAAU;AACxB,aAAK,WAAW,KAAK;AAEhB,aAAA,YAAY,KAAK,WAAW,UAAU;AAC3C,aAAK,YAAY,KAAK,WAAW,aAAa,CAAC;AAE/C,YAAI,aAAa,GAAG;AAClB,eAAK,YAAY,KAAK,WAAW,aAAa,CAAC;AAC/C,eAAK,eAAe;AAAA,QAAA,OACf;AACL,eAAK,YAAY,KAAK;AACtB,eAAK,eAAe,KAAK;AAAA,QAAA;AAGvB,YAAA,aAAa,KAAK,UAAU,GAAG;AACjC,eAAK,YAAY,KAAK,WAAW,aAAa,CAAC;AAC/C,eAAK,eAAe;AAAA,QAAA,OACf;AACL,eAAK,YAAY,KAAK;AACtB,eAAK,eAAe,KAAK;AAAA,QAAA;AAAA,MAE7B;AAES,kBAAA,UAAA,YAAT,SAAU,OAAa;AAEjB,YAAA,QAAQ,KAAK,SAAS;AACjB,iBAAA,KAAK,WAAW,KAAK;AAAA,QAAA,OACvB;AACE,iBAAA,KAAK,WAAW,CAAC;AAAA,QAAA;AAAA,MAE5B;AAEA,kBAAA,UAAA,SAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAWAA,kBAAA,UAAA,YAAA,SAAUlG,KAAoB,GAAY;AACjC,eAAA;AAAA,MACT;AAUAkG,kBAAO,UAAA,UAAP,SAAQ3H,SAAuBD,QAAqB0B,KAAe,YAAkB;AAG7E,YAAA,YAAY,IAAI,UAAU,KAAK,UAAU,UAAU,GAAG,KAAK,UAAU,aAAa,CAAC,CAAC;AAC1F,eAAO,UAAU,QAAQzB,SAAQD,QAAO0B,KAAI,CAAC;AAAA,MAC/C;AAUAkG,kBAAA,UAAA,cAAA,SAAY,MAAiBlG,KAAoB,YAAkB;AAGjEM,sBAAqByC,MAAI/C,KAAI,KAAK,UAAU,UAAU,CAAC;AACvDM,sBAAqB,IAAIN,KAAI,KAAK,UAAU,aAAa,CAAC,CAAC;AAEtD,aAAA,cAAc,MAAM+C,MAAI,EAAE;AAAA,MACjC;AAWAmD,kBAAA,UAAA,cAAA,SAAY,UAAoB,SAAgB;AAC9C,iBAAS,OAAO;AACT7F,iBAAS,SAAS,MAAM;AAC/B,iBAAS,IAAI;AAAA,MACf;AAEA6F,kBAAA,UAAA,uBAAA,SAAqB,OAAsB,YAAkB;AAE3D,cAAM,WAAW,CAAC,IAAI,KAAK,UAAU,UAAU;AAC/C,cAAM,WAAW,CAAC,IAAI,KAAK,UAAU,aAAa,CAAC;AACnD,cAAM,UAAU;AAChB,cAAM,WAAW,KAAK;AAAA,MACxB;AAnUOA,kBAAI,OAAG;AAoUfA,aAAAA;AAAAA,IAAAA,EArU+B,KAAK;AAAA;AAuU9B,MAAM,QAAQ;ACzVJ,MAAMvH,aAAW,KAAK;AACtB,MAAMC,aAAW,KAAK;AAEtB,MAAMM,SAAOiB,KAAY,GAAG,CAAC;AAC7B,MAAM8F,MAAI9F,KAAY,GAAG,CAAC;AAC1B,MAAMgG,OAAKhG,KAAY,GAAG,CAAC;AAC3B,MAAMiG,OAAKjG,KAAY,GAAG,CAAC;AAC3B,MAAM,SAASA,KAAY,GAAG,CAAC;AAC/B,MAAM,IAAIA,KAAY,GAAG,CAAC;AAe3C,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAAkC,gBAAKkG,eAAA,MAAA;AAUrC,eAAAA,cAAY,UAAsB;AAAlC,YAkBC,QAAA;AAhBK,YAAwB,EAAE,iBAAgBA,gBAAe;AACpD,iBAAA,IAAIA,cAAa,QAAQ;AAAA,QAAA;AAGlC,gBAAA,qBAAQ;AAER,cAAK,SAASA,cAAa;AAC3B,cAAK,WAAWjH,iBAAS;AACpB,cAAA,aAAa,KAAK;AACvB,cAAK,aAAa,CAAA;AAClB,cAAK,YAAY,CAAA;AACjB,cAAK,UAAU;AAEX,YAAA,YAAY,SAAS,QAAQ;AAC/B,gBAAK,KAAK,QAAQ;AAAA,QAAA;;;AAKtB,oBAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UAEX,UAAU,KAAK;AAAA;MAEnB;AAGOiH,oBAAA,eAAP,SAAoB,MAAW,SAAc,SAAY;AACvD,YAAM,WAAmB,CAAA;AACzB,YAAI,KAAK,UAAU;AACjB,mBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,qBAAS,KAAK,QAAQ,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,UAAA;AAAA,QAC/C;AAGI,YAAA,QAAQ,IAAIA,cAAa,QAAQ;AAChC,eAAA;AAAA,MACT;AAEA,oBAAA,UAAA,UAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEA,oBAAA,UAAA,YAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAOA,oBAAA,UAAA,SAAA,WAAA;AACQ,YAAA,QAAQ,IAAIA;AAClB,cAAM,SAAS,KAAK;AACpB,cAAM,WAAW,KAAK;AACtB,cAAM,UAAU,KAAK;AACf,cAAA,WAAW,QAAQ,KAAK,UAAU;AACxC,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,KAAK;AACrC,gBAAM,WAAW,KAAK,KAAK,WAAW,CAAC,EAAE,OAAO;AAAA,QAAA;AAElD,iBAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC9C,gBAAM,UAAU,KAAK,KAAK,UAAU,CAAC,EAAE,OAAO;AAAA,QAAA;AAEzC,eAAA;AAAA,MACT;AAKA,oBAAA,UAAA,gBAAA,WAAA;AACS,eAAA;AAAA,MACT;AAGA,oBAAA,UAAA,SAAA,WAAA;AACO,aAAA,KAAK,KAAK,UAAU;AAAA,MAC3B;AAYI,oBAAA,UAAA,OAAJ,SAAK,UAAqB;AAEpB,YAAA,SAAS,SAAS,GAAG;AAClB,eAAA,UAAU,GAAK,CAAG;AACvB;AAAA,QAAA;AAGF,YAAIhI,KAAIO,WAAS,SAAS,QAAQQ,iBAAS,kBAAkB;AAG7D,YAAM,KAAa,CAAE;AACrB,iBAAS,IAAI,GAAG,IAAIf,IAAG,EAAE,GAAG;AACpB,cAAAS,KAAI,SAAS,CAAC;AAEpB,cAAI,SAAS;AACb,mBAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,EAAE,GAAG;AAC9B,gBAAA,KAAK,gBAAgBA,IAAG,GAAG,CAAC,CAAC,IAAI,OAAOM,iBAAS,mBAAmB;AAC7D,uBAAA;AACT;AAAA,YAAA;AAAA,UACF;AAGF,cAAI,QAAQ;AACV,eAAG,KAAK,KAAK,MAAMN,EAAC,CAAC;AAAA,UAAA;AAAA,QACvB;AAGF,QAAAT,KAAI,GAAG;AACP,YAAIA,KAAI,GAAG;AAGJ,eAAA,UAAU,GAAK,CAAG;AACvB;AAAA,QAAA;AAOF,YAAI,KAAK;AACL,YAAA,KAAK,GAAG,CAAC,EAAE;AACf,iBAAS,IAAI,GAAG,IAAIA,IAAG,EAAE,GAAG;AACpB,cAAAG,KAAI,GAAG,CAAC,EAAE;AACZ,cAAAA,KAAI,MAAOA,OAAM,MAAM,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,GAAI;AACzC,iBAAA;AACA,iBAAAA;AAAA,UAAA;AAAA,QACP;AAGF,YAAM,OAAO,CAAc;AAC3B,YAAI,IAAI;AACR,YAAI,KAAK;AAET,eAAO,MAAM;AAEX,eAAK,CAAC,IAAI;AAEV,cAAI8H,MAAK;AACT,mBAAS,IAAI,GAAG,IAAIjI,IAAG,EAAE,GAAG;AAC1B,gBAAIiI,QAAO,IAAI;AACR,cAAAA,MAAA;AACL;AAAA,YAAA;AAGI,gBAAA,IAAI,KAAK,IAAI,GAAGA,GAAE,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AAChC,gBAAAxH,KAAI,KAAK,IAAI,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AACrC,gBAAMW,KAAI,KAAK,cAAc,GAAGX,EAAC;AAEjC,gBAAIW,KAAI,GAAK;AACN,cAAA6G,MAAA;AAAA,YAAA;AAIP,gBAAI7G,OAAM,KAAOX,GAAE,kBAAkB,EAAE,iBAAiB;AACjD,cAAAwH,MAAA;AAAA,YAAA;AAAA,UACP;AAGA,YAAA;AACG,eAAAA;AAEL,cAAIA,QAAO,IAAI;AACb;AAAA,UAAA;AAAA,QACF;AAGF,YAAI,IAAI,GAAG;AAGJ,eAAA,UAAU,GAAK,CAAG;AACvB;AAAA,QAAA;AAGF,aAAK,UAAU;AAGf,aAAK,aAAa,CAAA;AAClB,iBAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AAC1B,eAAK,WAAW,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AAAA,QAAA;AAIjC,iBAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AAC1B,cAAM,KAAK;AACX,cAAM,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI;AACzB,cAAA,OAAO,KAAK,IAAI,KAAK,WAAW,EAAE,GAAG,KAAK,WAAW,EAAE,CAAC;AAE9D,eAAK,UAAU,CAAC,IAAI,KAAK,aAAa,MAAM,CAAG;AAC1C,eAAA,UAAU,CAAC,EAAE;;AAIpB,aAAK,aAAa,gBAAgB,KAAK,YAAY,CAAC;AAAA,MACtD;AAEiBD,oBAAS,UAAA,YAAT,SAAU,IAAY,IAAYE,SAAoB,OAAc;AAEnF,aAAK,WAAW,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE;AACrC,aAAK,WAAW,CAAC,IAAI,KAAK,IAAI,IAAI,EAAE;AACpC,aAAK,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;AAChC,aAAA,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;AAEtC,aAAK,UAAU,CAAC,IAAI,KAAK,IAAI,GAAK,CAAG;AACrC,aAAK,UAAU,CAAC,IAAI,KAAK,IAAI,GAAK,CAAG;AACrC,aAAK,UAAU,CAAC,IAAI,KAAK,IAAI,IAAM,CAAG;AACtC,aAAK,UAAU,CAAC,IAAI,KAAK,IAAI,GAAK,EAAI;AAEtC,aAAK,UAAU;AAEf,YAAIA,WAAU,KAAK,QAAQA,OAAM,GAAG;AAClC,kBAAQ,SAAS;AAEVhG,mBAAS,KAAK,YAAYgG,OAAM;AAEjC,cAAAvG,MAAK,UAAU;AAClB,UAAAA,IAAA,EAAE,QAAQuG,OAAM;AAChB,UAAAvG,IAAA,EAAE,SAAS,KAAK;AAGnB,mBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,EAAE,GAAG;AAChC,iBAAA,WAAW,CAAC,IAAI,UAAU,QAAQA,KAAI,KAAK,WAAW,CAAC,CAAC;AACxD,iBAAA,UAAU,CAAC,IAAI,IAAI,QAAQA,IAAG,GAAG,KAAK,UAAU,CAAC,CAAC;AAAA,UAAA;AAAA,QACzD;AAAA,MAEJ;AASAqG,oBAAA,UAAA,YAAA,SAAUrG,KAAoB,GAAY;AACxC,YAAM,SAASwG,gBAAuBtH,QAAMc,KAAI,CAAC;AAEjD,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,EAAE,GAAG;AACrC,cAAM,MAAMyB,QAAe,KAAK,UAAU,CAAC,GAAG,MAAM,IAAIA,QAAe,KAAK,UAAU,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC;AAC5G,cAAI,MAAM,GAAK;AACN,mBAAA;AAAA,UAAA;AAAA,QACT;AAGK,eAAA;AAAA,MACT;AAUA4E,oBAAO,UAAA,UAAP,SAAQ9H,SAAuBD,QAAqB0B,KAAe,YAAkB;AAG7E,YAAA,KAAK,IAAI,SAASA,IAAG,GAAG,KAAK,IAAI1B,OAAM,IAAI0B,IAAG,CAAC,CAAC;AAChD,YAAA,KAAK,IAAI,SAASA,IAAG,GAAG,KAAK,IAAI1B,OAAM,IAAI0B,IAAG,CAAC,CAAC;AACtD,YAAM/B,KAAI,KAAK,IAAI,IAAI,EAAE;AAEzB,YAAI,QAAQ;AACZ,YAAI,QAAQK,OAAM;AAElB,YAAI,QAAQ;AAEZ,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,EAAE,GAAG;AAIrC,cAAM,YAAY,KAAK,IAAI,KAAK,UAAU,CAAC,GAAG,KAAK,IAAI,KAAK,WAAW,CAAC,GAAG,EAAE,CAAC;AAC9E,cAAM,cAAc,KAAK,IAAI,KAAK,UAAU,CAAC,GAAGL,EAAC;AAEjD,cAAI,eAAe,GAAK;AACtB,gBAAI,YAAY,GAAK;AACZ,qBAAA;AAAA,YAAA;AAAA,UACT,OACK;AAKL,gBAAI,cAAc,KAAO,YAAY,QAAQ,aAAa;AAGxD,sBAAQ,YAAY;AACZ,sBAAA;AAAA,YACC,WAAA,cAAc,KAAO,YAAY,QAAQ,aAAa;AAG/D,sBAAQ,YAAY;AAAA,YAAA;AAAA,UACtB;AAOF,cAAI,QAAQ,OAAO;AACV,mBAAA;AAAA,UAAA;AAAA,QACT;AAKF,YAAI,SAAS,GAAG;AACd,UAAAM,QAAO,WAAW;AACX,UAAAA,QAAA,SAAS,IAAI,QAAQyB,IAAG,GAAG,KAAK,UAAU,KAAK,CAAC;AAChD,iBAAA;AAAA,QAAA;AAGF,eAAA;AAAA,MACT;AAUAqG,oBAAA,UAAA,cAAA,SAAY,MAAiBrG,KAAoB,YAAkB;AACjE,YAAI,OAAO;AACX,YAAI,OAAO;AACX,YAAI,OAAO;AACX,YAAI,OAAO;AACX,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,EAAE,GAAG;AAC/B,cAAAlB,KAAIwB,cAAqBpB,QAAMc,KAAI,KAAK,WAAW,CAAC,CAAC;AACpD,iBAAApB,WAAS,MAAME,GAAE,CAAC;AAClB,iBAAAH,WAAS,MAAMG,GAAE,CAAC;AAClB,iBAAAF,WAAS,MAAME,GAAE,CAAC;AAClB,iBAAAH,WAAS,MAAMG,GAAE,CAAC;AAAA,QAAA;AAGpBmE,gBAAQ,KAAK,YAAY,OAAO,KAAK,UAAU,OAAO,KAAK,QAAQ;AACnEA,gBAAQ,KAAK,YAAY,OAAO,KAAK,UAAU,OAAO,KAAK,QAAQ;AAAA,MAC5E;AASAoD,oBAAA,UAAA,cAAA,SAAY,UAAoB,SAAe;AA2B7ChG,iBAAgB,MAAM;AACtB,YAAI,OAAO;AACX,YAAI,IAAI;AAIRA,iBAAgB,CAAC;AAGjB,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,EAAE,GAAG;AACrCsB,mBAAgB,GAAG,KAAK,WAAW,CAAC,CAAC;AAAA,QAAA;AAEvCH,kBAAiB,GAAG,IAAM,KAAK,SAAS,CAAC;AAEzC,YAAM,SAAS,IAAM;AAErB,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,EAAE,GAAG;AAErCJ,kBAAe+E,MAAI,KAAK,WAAW,CAAC,GAAG,CAAC;AACnC,cAAA,IAAI,IAAI,KAAK,SAAS;AACzB/E,oBAAegF,MAAI,KAAK,WAAW,IAAI,CAAC,GAAG,CAAC;AAAA,UAAA,OACvC;AACLhF,oBAAegF,MAAI,KAAK,WAAW,CAAC,GAAG,CAAC;AAAA,UAAA;AAG1C,cAAM,IAAIlD,cAAqBiD,MAAIC,IAAE;AAErC,cAAM,eAAe,MAAM;AACnB,kBAAA;AAGR1F,uBAAoBxB,QAAM,eAAe,QAAQiH,MAAI,eAAe,QAAQC,IAAE;AACvEzE,mBAAS,QAAQzC,MAAI;AAE5B,cAAM,MAAMiH,KAAG;AACf,cAAM,MAAMA,KAAG;AACf,cAAM,MAAMC,KAAG;AACf,cAAM,MAAMA,KAAG;AAEf,cAAM,QAAQ,MAAM,MAAM,MAAM,MAAM,MAAM;AAC5C,cAAM,QAAQ,MAAM,MAAM,MAAM,MAAM,MAAM;AAEtC,eAAA,OAAO,SAAS,KAAM,QAAQ;AAAA,QAAA;AAItC,iBAAS,OAAO,UAAU;AAI1B5E,kBAAiB,QAAQ,IAAM,MAAM,MAAM;AAC3CiF,gBAAe,SAAS,QAAQ,QAAQ,CAAC;AAGzC,iBAAS,IAAI,UAAU;AAGvB,iBAAS,KAAK,SAAS,QAAQhF,QAAe,SAAS,QAAQ,SAAS,MAAM,IAAIA,QAAe,QAAQ,MAAM;AAAA,MACjH;AAMA,oBAAA,UAAA,WAAA,WAAA;AACE,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,EAAE,GAAG;AACrC,cAAM,KAAK;AACX,cAAM,KAAK,IAAI,KAAK,UAAU,IAAI,KAAK,IAAI;AACrC,cAAA,IAAI,KAAK,WAAW,EAAE;AAC5BL,kBAAe6E,KAAG,KAAK,WAAW,EAAE,GAAG,CAAC;AAExC,mBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,EAAE,GAAG;AACjC,gBAAA,KAAK,MAAM,KAAK,IAAI;AACtB;AAAA,YAAA;AAGF,gBAAMxG,KAAIyD,cAAqB+C,KAAG7E,QAAelC,QAAM,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC;AAC7E,gBAAIO,KAAI,GAAK;AACJ,qBAAA;AAAA,YAAA;AAAA,UACT;AAAA,QACF;AAGK,eAAA;AAAA,MACT;AAEoB,oBAAA,UAAA,uBAApB,SAAqB,OAAoB;AACvC,iBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,EAAE,GAAG;AACrC,gBAAM,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC;AAAA,QAAA;AAEnC,cAAA,WAAW,SAAS,KAAK;AAC/B,cAAM,UAAU,KAAK;AACrB,cAAM,WAAW,KAAK;AAAA,MACxB;AAveO4G,oBAAI,OAAG;AAwefA,aAAAA;AAAAA,IAAAA,EAzeiC,KAAK;AAAA;AA2etB,WAAS,gBAAgB,IAAY,OAAa;AAG3D,QAAA5G,KAAI,KAAK;AACf,QAAI,OAAO;AAIL,QAAA,OAAO,KAAK;AAClB,QAAA;AAQA,QAAM,OAAO,IAAM;AAEnB,aAAS,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG;AAE9B,UAAM,KAAK;AACL,UAAA,KAAK,GAAG,CAAC;AACT,UAAA,KAAK,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;AAE3C,UAAM,OAAK,KAAK,IAAI,IAAI,EAAE;AAC1B,UAAM,OAAK,KAAK,IAAI,IAAI,EAAE;AAE1B,UAAM,IAAI,KAAK,cAAc,MAAI,IAAE;AAEnC,UAAM,eAAe,MAAM;AACnB,cAAA;AAGR4D,mBAAoBnE,QAAM,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE;AAC7CqC,oBAAqB9B,IAAG,eAAe,MAAMP,MAAI;AAAA,IAAA;AAKjD,IAAAO,GAAA,IAAI,IAAM,IAAI;AACT,WAAAA;AAAA,EACT;AAEO,MAAM,UAAU;AChjBN,MAAM,YAAY,KAAK;AACvB,MAAMN,YAAU,KAAK;AAErB,MAAM,OAAOgB,KAAY,GAAG,CAAC;AAa9C,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAAiC,gBAAKuG,cAAA,MAAA;AASxBA,eAAAA,aAAA3H,IAAQb,IAAO;AAA3B,YAsBC,QAAA;AApBK,YAAwB,EAAE,iBAAgBwI,eAAc;AACnD,iBAAA,IAAIA,aAAY3H,IAAGb,EAAC;AAAA,QAAA;AAG7B,gBAAA,qBAAQ;AAER,cAAK,SAASwI,aAAY;AACrB,cAAA,MAAM,KAAK;AAChB,cAAK,WAAW;AAEhB,YAAI,OAAO3H,OAAM,YAAY,KAAK,QAAQA,EAAC,GAAG;AACvC,gBAAA,IAAI,QAAQA,EAAC;AAEd,cAAA,OAAOb,OAAM,UAAU;AACzB,kBAAK,WAAWA;AAAA,UAAA;AAAA,QAClB,WAES,OAAOa,OAAM,UAAU;AAChC,gBAAK,WAAWA;AAAA,QAAA;;;AAKpB,mBAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UAEX,GAAG,KAAK;AAAA,UACR,QAAQ,KAAK;AAAA;MAEjB;AAGmB,mBAAA,eAAnB,SAAoB,MAAS;AAC3B,eAAO,IAAI2H,aAAY,KAAK,GAAG,KAAK,MAAM;AAAA,MAC5C;AAGA,mBAAA,UAAA,SAAA,WAAA;AAAA,MAEA;AAEA,mBAAA,UAAA,UAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEA,mBAAA,UAAA,YAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEA,mBAAA,UAAA,YAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAOA,mBAAA,UAAA,SAAA,WAAA;AACQ,YAAA,QAAQ,IAAIA;AAClB,cAAM,SAAS,KAAK;AACpB,cAAM,WAAW,KAAK;AAChB,cAAA,MAAM,KAAK,IAAI,MAAK;AACnB,eAAA;AAAA,MACT;AAKA,mBAAA,UAAA,gBAAA,WAAA;AACS,eAAA;AAAA,MACT;AASAA,mBAAA,UAAA,YAAA,SAAU1G,KAAoB,GAAY;AACxC,YAAMuG,UAASjG,cAAqB,MAAMN,KAAI,KAAK,GAAG;AACtD,eAAO2G,YAAmB,GAAGJ,OAAM,KAAK,KAAK,WAAW,KAAK;AAAA,MAC/D;AAUAG,mBAAO,UAAA,UAAP,SAAQnI,SAAuBD,QAAqB0B,KAAe,YAAkB;AAM7E,YAAA,WAAW,KAAK,IAAIA,IAAG,GAAG,IAAI,QAAQA,IAAG,GAAG,KAAK,GAAG,CAAC;AAC3D,YAAM5B,KAAI,KAAK,IAAIE,OAAM,IAAI,QAAQ;AAC/B,YAAAJ,KAAI,KAAK,IAAIE,IAAGA,EAAC,IAAI,KAAK,WAAW,KAAK;AAGhD,YAAM,IAAI,KAAK,IAAIE,OAAM,IAAIA,OAAM,EAAE;AACrC,YAAMmB,KAAI,KAAK,IAAIrB,IAAG,CAAC;AACvB,YAAM,KAAK,KAAK,IAAI,GAAG,CAAC;AAClB,YAAA,QAAQqB,KAAIA,KAAI,KAAKvB;AAGvB,YAAA,QAAQ,KAAO,KAAK,SAAS;AACxB,iBAAA;AAAA,QAAA;AAIT,YAAIa,KAAI,EAAEU,KAAI,UAAU,KAAK;AAG7B,YAAI,KAAOV,MAAKA,MAAKT,OAAM,cAAc,IAAI;AACtC,UAAAS,MAAA;AACL,UAAAR,QAAO,WAAWQ;AACX,UAAAR,QAAA,SAAS,KAAK,IAAIH,IAAG,KAAK,WAAWW,IAAG,CAAC,CAAC;AACjD,UAAAR,QAAO,OAAO;AACP,iBAAA;AAAA,QAAA;AAGF,eAAA;AAAA,MACT;AAUAmI,mBAAA,UAAA,cAAA,SAAY,MAAiB1G,KAAoB,YAAkB;AACjE,YAAM,IAAIM,cAAqB,MAAMN,KAAI,KAAK,GAAG;AAE1CiD,gBAAQ,KAAK,YAAY,EAAE,IAAI,KAAK,UAAU,EAAE,IAAI,KAAK,QAAQ;AACjEA,gBAAQ,KAAK,YAAY,EAAE,IAAI,KAAK,UAAU,EAAE,IAAI,KAAK,QAAQ;AAAA,MAC1E;AASAyD,mBAAA,UAAA,cAAA,SAAY,UAAoB,SAAe;AAC7C,iBAAS,OAAO,UAAUvH,YAAU,KAAK,WAAW,KAAK;AACzDoB,iBAAgB,SAAS,QAAQ,KAAK,GAAG;AAEhC,iBAAA,IAAI,SAAS,QAAQ,MAAM,KAAK,WAAW,KAAK,WAAW8B,cAAqB,KAAK,GAAG;AAAA,MACnG;AAEoB,mBAAA,UAAA,uBAApB,SAAqB,OAAoB;AACjC,cAAA,WAAW,CAAC,IAAI,KAAK;AAC3B,cAAM,WAAW,SAAS;AAC1B,cAAM,UAAU;AAChB,cAAM,WAAW,KAAK;AAAA,MACxB;AA9KOqE,mBAAI,OAAG;AA+KfA,aAAAA;AAAAA,IAAAA,EAhLgC,KAAK;AAAA;AAkL/B,MAAM,SAAS;ACnML,MAAMjI,aAAW,KAAK;AACtB,MAAMU,YAAU,KAAK;AA6CrB,MAAMyG,aAAW;AAAA,IAChC,aAAc;AAAA,IACd,cAAe;AAAA;AAiBjB,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAAmC,gBAAKgB,gBAAA,MAAA;AAkCtC,eAAYA,eAAA,KAAuB,OAAc,OAAc,SAAqB,SAAmB;AAAvG,YA6CC,QAAA;AA3CK,YAAwB,EAAE,iBAAgBA,iBAAgB;AAC5D,iBAAO,IAAIA,eAAc,KAAK,OAAO,OAAO,SAAS,OAAO;AAAA,QAAA;AAI9D,YAAI,SAAS,WAAY,YAAY,WAAa,OAAO,SAAW,OAAO,OAAQ;AACjF,cAAM1H,QAAO;AACL,kBAAA;AACE,oBAAAA;AAAA,QAAA;AAGN,cAAA,QAAQ,KAAK0G,UAAQ;AAC3B,gBAAA,kBAAM,KAAK,OAAO,KAAK,KAAE;AACzB,gBAAQ,MAAK;AACb,gBAAQ,MAAK;AAEb,cAAK,SAASgB,eAAc;AAG5B,cAAK,iBAAiB,KAAK,MAAM,UAAU,MAAM,cAAc,OAAO,IAAI,IAAI,gBAAgB,KAAK,KAAA,CAAM;AACzG,cAAK,iBAAiB,KAAK,MAAM,UAAU,MAAM,cAAc,OAAO,IAAI,IAAI,gBAAgB,KAAK,KAAA,CAAM;AACzG,cAAK,WAAW,OAAO,SAAS,IAAI,MAAM,IAAI,IAAI,SAChD,KAAK,SAAS,MAAM,cAAc,MAAK,cAAc,GAAG,MAAM,cAAc,MAAK,cAAc,CAAC;AAClG,cAAK,gBAAgB,IAAI;AACzB,cAAK,iBAAiB,IAAI;AAC1B,cAAK,YAAY;AACjB,cAAK,UAAU;AACf,cAAK,SAAS;;;AAmBhB,qBAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,kBAAkB,KAAK;AAAA,UAEvB,aAAa,KAAK;AAAA,UAClB,cAAc,KAAK;AAAA,UAEnB,cAAc,KAAK;AAAA,UACnB,cAAc,KAAK;AAAA,UACnB,QAAQ,KAAK;AAAA,UAEb,SAAS,KAAK;AAAA,UACd,OAAO,KAAK;AAAA,UACZ,MAAM,KAAK;AAAA;MAEf;AAGOA,qBAAA,eAAP,SAAoB,MAAW,OAAY,SAAY;AACjD,eAAA,SAAA,CAAA,GAAO,IAAI;AACf,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AAC5C,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AACtC,YAAA,QAAQ,IAAIA,eAAc,IAAI;AAC7B,eAAA;AAAA,MACT;AAGM,qBAAA,UAAA,SAAN,SAAO,KAA8B;AACnC,YAAI,IAAI,SAAS;AACf,eAAK,eAAe,QAAQ,KAAK,QAAQ,cAAc,IAAI,OAAO,CAAC;AAAA,QAAA,WAC1D,IAAI,cAAc;AACtB,eAAA,eAAe,QAAQ,IAAI,YAAY;AAAA,QAAA;AAG9C,YAAI,IAAI,SAAS;AACf,eAAK,eAAe,QAAQ,KAAK,QAAQ,cAAc,IAAI,OAAO,CAAC;AAAA,QAAA,WAC1D,IAAI,cAAc;AACtB,eAAA,eAAe,QAAQ,IAAI,YAAY;AAAA,QAAA;AAG1C,YAAA,IAAI,SAAS,GAAG;AACb,eAAA,WAAW,CAAC,IAAI;AAAA,QACvB,WAAW,IAAI,SAAS,EAAG;AAAA,iBAChB,IAAI,WAAW,IAAI,WAAW,IAAI,WAAW,IAAI,SAAS;AACnE,eAAK,WAAW,KAAK,SACjB,KAAK,QAAQ,cAAc,KAAK,cAAc,GAC9C,KAAK,QAAQ,cAAc,KAAK,cAAc,CAAC;AAAA,QAAA;AAGrD,YAAI,OAAO,SAAS,IAAI,WAAW,GAAG;AACpC,eAAK,gBAAgB,IAAI;AAAA,QAAA;AAE3B,YAAI,OAAO,SAAS,IAAI,YAAY,GAAG;AACrC,eAAK,iBAAiB,IAAI;AAAA,QAAA;AAAA,MAE9B;AAKA,qBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,qBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAMS,qBAAA,UAAA,YAAT,SAAU,QAAc;AACtB,aAAK,WAAW;AAAA,MAClB;AAKA,qBAAA,UAAA,YAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEY,qBAAA,UAAA,eAAZ,SAAa,IAAU;AACrB,aAAK,gBAAgB;AAAA,MACvB;AAEA,qBAAA,UAAA,eAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEe,qBAAA,UAAA,kBAAf,SAAgB,OAAa;AAC3B,aAAK,iBAAiB;AAAA,MACxB;AAEA,qBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,qBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKA,qBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKgB,qBAAA,UAAA,mBAAhB,SAAiB,QAAc;AACtB,eAAA,KAAK,WAAW,KAAK,WAAW,KAAK,GAAG,EAAE,IAAI,MAAM;AAAA,MAC7D;AAKiB,qBAAA,UAAA,oBAAjB,SAAkB,QAAc;AACvB,eAAA;AAAA,MACT;AAEuB,qBAAA,UAAA,0BAAvB,SAAwB,MAAc;AAC/B,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,UAAU,KAAK,QAAQ;AACvB,aAAA,UAAU,KAAK,QAAQ;AAEtB,YAAAnC,MAAK,KAAK,QAAQ,WAAW;AAC7B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAoC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAAnC,MAAK,KAAK,QAAQ,WAAW;AAC7B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAoC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAEhB,aAAA,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACzE,aAAA,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AAC9E,aAAK,MAAM,KAAK,IAAI,KAAK,IAAIpC,KAAI,KAAK,IAAI,GAAG,KAAK,IAAID,KAAI,KAAK,IAAI,CAAC;AAG9D,YAAA,SAAS,KAAK,IAAI;AACpB,YAAA,SAASrF,iBAAS,YAAY;AAC3B,eAAA,IAAI,IAAI,IAAM,MAAM;AAAA,QAAA,OACpB;AACA,eAAA,IAAI,OAAO,GAAK,CAAG;AAAA,QAAA;AAG1B,YAAM,OAAO,KAAK,cAAc,KAAK,MAAM,KAAK,GAAG;AACnD,YAAM,OAAO,KAAK,cAAc,KAAK,MAAM,KAAK,GAAG;AAC/C,YAAA,UAAU,KAAK,aAAa,KAAK,UAAU,OAAO,OAAO,KAAK,aAAa,KAAK,UAAU,OAAO;AAGrG,aAAK,SAAS,WAAW,IAAM,IAAM,UAAU;AAE3C,YAAA,KAAK,gBAAgB,GAAK;AACtB,cAAA,IAAI,SAAS,KAAK;AAGlB,cAAA,QAAQ,IAAMD,YAAU,KAAK;AAGnC,cAAMlB,KAAI,IAAM,KAAK,SAAS,KAAK,iBAAiB;AAG9C,cAAA,IAAI,KAAK,SAAS,QAAQ;AAGhC,cAAM,IAAI,KAAK;AACV,eAAA,UAAU,KAAKA,KAAI,IAAI;AAC5B,eAAK,UAAU,KAAK,WAAW,IAAM,IAAM,KAAK,UAAU;AAC1D,eAAK,SAAS,IAAI,IAAI,IAAI,KAAK;AAE/B,qBAAW,KAAK;AAChB,eAAK,SAAS,WAAW,IAAM,IAAM,UAAU;AAAA,QAAA,OAC1C;AACL,eAAK,UAAU;AACf,eAAK,SAAS;AAAA,QAAA;AAGhB,YAAI,KAAK,cAAc;AAErB,eAAK,aAAa,KAAK;AAEvB,cAAMuH,KAAI,KAAK,WAAW,KAAK,WAAW,KAAK,GAAG;AAE/C,UAAAqB,IAAA,OAAO,KAAK,YAAYrB,EAAC;AAC5B,gBAAM,KAAK,UAAU,KAAK,cAAc,KAAK,MAAMA,EAAC;AAEjD,UAAAsB,IAAA,OAAO,KAAK,YAAYtB,EAAC;AAC5B,gBAAM,KAAK,UAAU,KAAK,cAAc,KAAK,MAAMA,EAAC;AAAA,QAAA,OAE/C;AACL,eAAK,YAAY;AAAA,QAAA;AAGnB,aAAK,QAAQ,WAAW,EAAE,QAAQqB,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQC,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAEwB,qBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAAD,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAG3B,YAAA,MAAM,KAAK,IAAID,KAAI,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC;AACnD,YAAA,MAAM,KAAK,IAAIC,KAAI,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC;AACnD,YAAA,OAAO,KAAK,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,GAAG;AAEvD,YAAA,UAAU,CAAC,KAAK,UAAU,OAAO,KAAK,SAAS,KAAK,UAAU,KAAK;AACzE,aAAK,aAAa;AAElB,YAAMtB,KAAI,KAAK,WAAW,SAAS,KAAK,GAAG;AACxC,QAAAqB,IAAA,OAAO,KAAK,YAAYrB,EAAC;AAC5B,cAAM,KAAK,UAAU,KAAK,cAAc,KAAK,MAAMA,EAAC;AACjD,QAAAsB,IAAA,OAAO,KAAK,YAAYtB,EAAC;AAC5B,cAAM,KAAK,UAAU,KAAK,cAAc,KAAK,MAAMA,EAAC;AAEpD,aAAK,QAAQ,WAAW,EAAE,QAAQqB,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQC,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAKwB,qBAAA,UAAA,2BAAxB,SAAyB,MAAc;AACjC,YAAA,KAAK,gBAAgB,GAAK;AAErB,iBAAA;AAAA,QAAA;AAGH,YAAArC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAErB,YAAMlC,MAAK,IAAI,OAAO,IAAI,KAAK,gBAAgB,KAAK,cAAc;AAClE,YAAMC,MAAK,IAAI,OAAO,IAAI,KAAK,gBAAgB,KAAK,cAAc;AAClE,YAAM,IAAI,KAAK,IAAI,KAAK,IAAIiC,KAAIjC,GAAE,GAAG,KAAK,IAAIgC,KAAIjC,GAAE,CAAC;AAE/C,YAAA,SAAS,EAAE;AACX,YAAA,IAAI,MAAM,SAAS,KAAK,UAAU,CAACpD,iBAAS,qBAAqBA,iBAAS,mBAAmB;AAE7F,YAAA,UAAU,CAAC,KAAK,SAAS;AAC/B,YAAMoG,KAAI,KAAK,WAAW,SAAS,CAAC;AAEjC,QAAAf,IAAA,OAAO,KAAK,YAAYe,EAAC;AAC5B,cAAM,KAAK,UAAU,KAAK,cAAchD,KAAIgD,EAAC;AAC1C,QAAAd,IAAA,OAAO,KAAK,YAAYc,EAAC;AAC5B,cAAM,KAAK,UAAU,KAAK,cAAc/C,KAAI+C,EAAC;AAE7C,aAAK,QAAQ,WAAW,EAAE,QAAQf,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQC,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAErB,eAAAjG,WAAS,CAAC,IAAIW,iBAAS;AAAA,MAChC;AA7WOwH,qBAAI,OAAG;AA+WfA,aAAAA;AAAAA,IAAAA,EAhXkC,KAAK;AAAA;AC/BvB,MAAMhB,aAAW;AAAA,IAChC,UAAW;AAAA,IACX,WAAY;AAAA;AAiBd,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAAmC,gBAAKmB,gBAAA,MAAA;AA+BtC,eAAAA,eAAY,KAAuB,OAAc,OAAc,QAAkB;AAAjF,YAiCC,QAAA;AA/BK,YAAwB,EAAE,iBAAgBA,iBAAgB;AAC5D,iBAAO,IAAIA,eAAc,KAAK,OAAO,OAAO,MAAM;AAAA,QAAA;AAG9C,cAAA,QAAQ,KAAKnB,UAAQ;AAC3B,gBAAA,kBAAM,KAAK,OAAO,KAAK,KAAE;AACzB,gBAAQ,MAAK;AACb,gBAAQ,MAAK;AAEb,cAAK,SAASmB,eAAc;AAE5B,cAAK,iBAAiB,KAAK,MAAM,SAAS,MAAM,cAAc,MAAM,IAAI,IAAI,gBAAgB,KAAK,KAAA,CAAM;AACvG,cAAK,iBAAiB,KAAK,MAAM,SAAS,MAAM,cAAc,MAAM,IAAI,IAAI,gBAAgB,KAAK,KAAA,CAAM;AAGlG,cAAA,kBAAkB,KAAK;AAC5B,cAAK,mBAAmB;AACxB,cAAK,aAAa,IAAI;AACtB,cAAK,cAAc,IAAI;;;AAgBzB,qBAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,kBAAkB,KAAK;AAAA,UAEvB,UAAU,KAAK;AAAA,UACf,WAAW,KAAK;AAAA,UAEhB,cAAc,KAAK;AAAA,UACnB,cAAc,KAAK;AAAA;MAEvB;AAGOA,qBAAA,eAAP,SAAoB,MAAW,OAAY,SAAY;AACjD,eAAA,SAAA,CAAA,GAAO,IAAI;AACf,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AAC5C,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AACtC,YAAA,QAAQ,IAAIA,eAAc,IAAI;AAC7B,eAAA;AAAA,MACT;AAGM,qBAAA,UAAA,SAAN,SAAO,KAA8B;AACnC,YAAI,IAAI,SAAS;AACf,eAAK,eAAe,QAAQ,KAAK,QAAQ,cAAc,IAAI,OAAO,CAAC;AAAA,QAAA,WAC1D,IAAI,cAAc;AACtB,eAAA,eAAe,QAAQ,IAAI,YAAY;AAAA,QAAA;AAE9C,YAAI,IAAI,SAAS;AACf,eAAK,eAAe,QAAQ,KAAK,QAAQ,cAAc,IAAI,OAAO,CAAC;AAAA,QAAA,WAC1D,IAAI,cAAc;AACtB,eAAA,eAAe,QAAQ,IAAI,YAAY;AAAA,QAAA;AAE9C,YAAI,OAAO,SAAS,IAAI,QAAQ,GAAG;AACjC,eAAK,aAAa,IAAI;AAAA,QAAA;AAExB,YAAI,OAAO,SAAS,IAAI,SAAS,GAAG;AAClC,eAAK,cAAc,IAAI;AAAA,QAAA;AAAA,MAE3B;AAKA,qBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,qBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKW,qBAAA,UAAA,cAAX,SAAY,OAAa;AAEvB,aAAK,aAAa;AAAA,MACpB;AAKA,qBAAA,UAAA,cAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKY,qBAAA,UAAA,eAAZ,SAAa,QAAc;AAEzB,aAAK,cAAc;AAAA,MACrB;AAKA,qBAAA,UAAA,eAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,qBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKA,qBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKgB,qBAAA,UAAA,mBAAhB,SAAiB,QAAc;AAC7B,eAAO,KAAK,WAAW,QAAQ,KAAK,eAAe;AAAA,MACrD;AAKiB,qBAAA,UAAA,oBAAjB,SAAkB,QAAc;AAC9B,eAAO,SAAS,KAAK;AAAA,MACvB;AAEuB,qBAAA,UAAA,0BAAvB,SAAwB,MAAc;AAC/B,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,UAAU,KAAK,QAAQ;AACvB,aAAA,UAAU,KAAK,QAAQ;AAEtB,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAF,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAGhB,aAAA,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACzE,aAAA,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AAW9E,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAEV,YAAA,IAAI,IAAI;AACd,UAAE,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAC7D,KAAK,KAAK;AAChB,UAAE,GAAG,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK;AACtE,UAAA,GAAG,IAAI,EAAE,GAAG;AACd,UAAE,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAC7D,KAAK,KAAK;AAEX,aAAA,eAAe,EAAE;AAEtB,aAAK,gBAAgB,KAAK;AACtB,YAAA,KAAK,gBAAgB,GAAK;AACvB,eAAA,gBAAgB,IAAM,KAAK;AAAA,QAAA;AAGlC,YAAI,KAAK,cAAc;AAEhB,eAAA,gBAAgB,IAAI,KAAK,OAAO;AACrC,eAAK,oBAAoB,KAAK;AAExB,cAAAtB,KAAI,KAAK,IAAI,KAAK,gBAAgB,GAAG,KAAK,gBAAgB,CAAC;AAE9D,UAAAqB,IAAA,OAAO,IAAIrB,EAAC;AACf,gBAAM,MAAM,KAAK,cAAc,KAAK,MAAMA,EAAC,IAAI,KAAK;AAEjD,UAAAsB,IAAA,OAAO,IAAItB,EAAC;AACf,gBAAM,MAAM,KAAK,cAAc,KAAK,MAAMA,EAAC,IAAI,KAAK;AAAA,QAAA,OAE/C;AACL,eAAK,gBAAgB;AACrB,eAAK,mBAAmB;AAAA,QAAA;AAGrB,aAAA,QAAQ,WAAW,IAAIqB;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAEwB,qBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAAD,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAEjC,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAEhB,YAAM,IAAI,KAAK;AAGf;AACE,cAAM,OAAO,KAAK;AACd,cAAA,UAAU,CAAC,KAAK,gBAAgB;AAEpC,cAAM,aAAa,KAAK;AAClB,cAAA,aAAa,IAAI,KAAK;AAC5B,eAAK,mBAAmB,MAAM,KAAK,mBAAmB,SAAS,CAAC,YAAY,UAAU;AACtF,oBAAU,KAAK,mBAAmB;AAElC,gBAAM,KAAK;AACX,gBAAM,KAAK;AAAA,QAAA;AAIb;AACQ,cAAA,OAAO,KAAK,IAChB,KAAK,IAAIA,KAAI,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC,GAC7C,KAAK,IAAID,KAAI,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC,CAAC;AAG5C,cAAA,UAAU,KAAK,IAAI,MAAM,QAAQ,KAAK,cAAc,IAAI,CAAC;AAC7D,cAAM,aAAa,KAAK;AACnB,eAAA,gBAAgB,IAAI,OAAO;AAE1B,cAAA,aAAa,IAAI,KAAK;AAE5B,cAAI,KAAK,gBAAgB,cAAe,IAAG,aAAa,YAAY;AAClE,iBAAK,gBAAgB;AAChB,iBAAA,gBAAgB,IAAI,UAAU;AAAA,UAAA;AAGrC,oBAAU,KAAK,IAAI,KAAK,iBAAiB,UAAU;AAEhD,UAAAA,IAAA,OAAO,IAAI,OAAO;AACrB,gBAAM,KAAK,KAAK,cAAc,KAAK,MAAM,OAAO;AAE7C,UAAAC,IAAA,OAAO,IAAI,OAAO;AACrB,gBAAM,KAAK,KAAK,cAAc,KAAK,MAAM,OAAO;AAAA,QAAA;AAG7C,aAAA,QAAQ,WAAW,IAAID;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAKwB,qBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC9B,eAAA;AAAA,MACT;AAnUOC,qBAAI,OAAG;AAqUfA,aAAAA;AAAAA,IAAAA,EAtUkC,KAAK;AAAA;ACtDxC,MAAA;AAAA;AAAA,IAAA,WAAA;AAOEC,eAAAA,OAAYjI,IAAeb,IAAeuB,IAAa;AACrD,YAAI,OAAOV,OAAM,YAAYA,OAAM,MAAM;AAClC,eAAA,KAAK,KAAK,MAAMA,EAAC;AACjB,eAAA,KAAK,KAAK,MAAMb,EAAC;AACjB,eAAA,KAAK,KAAK,MAAMuB,EAAC;AAAA,QAAA,OACjB;AACA,eAAA,KAAK,KAAK;AACV,eAAA,KAAK,KAAK;AACV,eAAA,KAAK,KAAK;;MACjB;AAIF,aAAA,UAAA,WAAA,WAAA;AACS,eAAA,KAAK,UAAU,IAAI;AAAA,MAC5B;AAEc,aAAA,UAAd,SAAe,KAAQ;AACrB,YAAI,QAAQ,QAAQ,OAAO,QAAQ,aAAa;AACvC,iBAAA;AAAA,QAAA;AAET,eAAO,KAAK,QAAQ,IAAI,EAAE,KAAK,KAAK,QAAQ,IAAI,EAAE,KAAK,KAAK,QAAQ,IAAI,EAAE;AAAA,MAC5E;AAEa,aAAA,SAAb,SAAc,GAAM;AAAA,MAEpB;AAKA,aAAA,UAAA,UAAA,WAAA;AACE,aAAK,GAAG;AACR,aAAK,GAAG;AACR,aAAK,GAAG;AACD,eAAA;AAAA,MACT;AAMO,aAAA,UAAA,UAAP,SAAQX,IAAY;AAEd,YAAA,UAAU,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG;AACtD,YAAA,UAAU,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG;AACtD,YAAA,UAAU,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG;AACtD,YAAA,MAAM,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI;AAClE,YAAI,QAAQ,GAAK;AACf,gBAAM,IAAM;AAAA,QAAA;AAER,YAAA,IAAI,IAAI;AAEJ,kBAAA,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG;AAC5C,kBAAA,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG;AAC5C,kBAAA,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG;AACpD,UAAA,IAAI,OAAOA,GAAE,IAAI,UAAUA,GAAE,IAAI,UAAUA,GAAE,IAAI;AAGzC,kBAAAA,GAAE,IAAI,KAAK,GAAG,IAAIA,GAAE,IAAI,KAAK,GAAG;AAChC,kBAAAA,GAAE,IAAI,KAAK,GAAG,IAAIA,GAAE,IAAI,KAAK,GAAG;AAChC,kBAAAA,GAAE,IAAI,KAAK,GAAG,IAAIA,GAAE,IAAI,KAAK,GAAG;AAC1C,UAAE,IAAI,OAAO,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI;AAG3D,kBAAA,KAAK,GAAG,IAAIA,GAAE,IAAI,KAAK,GAAG,IAAIA,GAAE;AAChC,kBAAA,KAAK,GAAG,IAAIA,GAAE,IAAI,KAAK,GAAG,IAAIA,GAAE;AAChC,kBAAA,KAAK,GAAG,IAAIA,GAAE,IAAI,KAAK,GAAG,IAAIA,GAAE;AAC1C,UAAE,IAAI,OAAO,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI;AAC9D,eAAA;AAAA,MACT;AAOO,aAAA,UAAA,UAAP,SAAQA,IAAY;AACZ,YAAA,MAAM,KAAK,GAAG;AACd,YAAA,MAAM,KAAK,GAAG;AACd,YAAA,MAAM,KAAK,GAAG;AACd,YAAA,MAAM,KAAK,GAAG;AAChB,YAAA,MAAM,MAAM,MAAM,MAAM;AAC5B,YAAI,QAAQ,GAAK;AACf,gBAAM,IAAM;AAAA,QAAA;AAER,YAAA,IAAI,KAAK;AACf,UAAE,IAAI,OAAO,MAAMA,GAAE,IAAI,MAAMA,GAAE;AACjC,UAAE,IAAI,OAAO,MAAMA,GAAE,IAAI,MAAMA,GAAE;AAC1B,eAAA;AAAA,MACT;AAMY,aAAA,UAAA,eAAZ,SAAa,GAAQ;AACb,YAAAC,KAAI,KAAK,GAAG;AACZ,YAAAb,KAAI,KAAK,GAAG;AACZ,YAAAuB,KAAI,KAAK,GAAG;AACZ,YAAAxB,KAAI,KAAK,GAAG;AACd,YAAA,MAAMc,KAAId,KAAIC,KAAIuB;AACtB,YAAI,QAAQ,GAAK;AACf,gBAAM,IAAM;AAAA,QAAA;AAEZ,UAAA,GAAG,IAAI,MAAMxB;AACb,UAAA,GAAG,IAAI,CAAC,MAAMC;AAChB,UAAE,GAAG,IAAI;AACP,UAAA,GAAG,IAAI,CAAC,MAAMuB;AACd,UAAA,GAAG,IAAI,MAAMV;AACf,UAAE,GAAG,IAAI;AACT,UAAE,GAAG,IAAI;AACT,UAAE,GAAG,IAAI;AACT,UAAE,GAAG,IAAI;AAAA,MACX;AAMe,aAAA,UAAA,kBAAf,SAAgB,GAAQ;AAClB,YAAA,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;AACxD,YAAI,QAAQ,GAAK;AACf,gBAAM,IAAM;AAAA,QAAA;AAER,YAAA,MAAM,KAAK,GAAG;AACd,YAAA,MAAM,KAAK,GAAG;AACd,YAAA,MAAM,KAAK,GAAG;AACd,YAAA,MAAM,KAAK,GAAG;AACd,YAAA,MAAM,KAAK,GAAG;AACd,YAAA,MAAM,KAAK,GAAG;AAEpB,UAAE,GAAG,IAAI,OAAO,MAAM,MAAM,MAAM;AAClC,UAAE,GAAG,IAAI,OAAO,MAAM,MAAM,MAAM;AAClC,UAAE,GAAG,IAAI,OAAO,MAAM,MAAM,MAAM;AAEhC,UAAA,GAAG,IAAI,EAAE,GAAG;AACd,UAAE,GAAG,IAAI,OAAO,MAAM,MAAM,MAAM;AAClC,UAAE,GAAG,IAAI,OAAO,MAAM,MAAM,MAAM;AAEhC,UAAA,GAAG,IAAI,EAAE,GAAG;AACZ,UAAA,GAAG,IAAI,EAAE,GAAG;AACd,UAAE,GAAG,IAAI,OAAO,MAAM,MAAM,MAAM;AAAA,MACpC;AAOO,aAAA,MAAP,SAAWA,IAAGb,IAAC;AAEb,YAAIA,MAAK,OAAOA,MAAK,OAAOA,MAAK,OAAOA,IAAG;AAEzC,cAAMM,KAAIO,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE;AACnD,cAAM,IAAIa,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE;AACnD,cAAM,IAAIa,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE;AACnD,iBAAO,IAAI,KAAKM,IAAG,GAAG,CAAC;AAAA,QAEd,WAAAN,MAAK,OAAOA,MAAK,OAAOA,IAAG;AAE9B,cAAAM,KAAIO,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE;AAC9B,cAAA,IAAIa,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE;AAC7B,iBAAA,KAAK,IAAIM,IAAG,CAAC;AAAA,QAAA;AAAA,MAIxB;AAEO,aAAA,UAAP,SAAeO,IAAUb,IAAY;AAGnC,YAAMM,KAAIO,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE;AACnD,YAAM,IAAIa,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE;AACnD,YAAM,IAAIa,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE;AACnD,eAAO,IAAI,KAAKM,IAAG,GAAG,CAAC;AAAA,MACzB;AAEO,aAAA,UAAP,SAAeO,IAAUb,IAAY;AAG7B,YAAAM,KAAIO,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE;AAC9B,YAAA,IAAIa,GAAE,GAAG,IAAIb,GAAE,IAAIa,GAAE,GAAG,IAAIb,GAAE;AAC7B,eAAA,KAAK,IAAIM,IAAG,CAAC;AAAA,MACtB;AAEO,aAAA,MAAP,SAAWO,IAAUb,IAAQ;AAGpB,eAAA,IAAI8I,OACT,KAAK,IAAIjI,GAAE,IAAIb,GAAE,EAAE,GACnB,KAAK,IAAIa,GAAE,IAAIb,GAAE,EAAE,GACnB,KAAK,IAAIa,GAAE,IAAIb,GAAE,EAAE,CAAC;AAAA,MAExB;AACD8I,aAAAA;AAAAA,IAAA,EAAA;AAAA;ACtMgB,MAAMvI,aAAW,KAAK;AAItB,MAAKwI;AAAA,GAAL,SAAKA,aAAU;AAC9BA,gBAAAA,YAAA,eAAA,IAAA,CAAA,IAAA;AACAA,gBAAAA,YAAA,cAAA,IAAA,CAAA,IAAA;AACAA,gBAAAA,YAAA,cAAA,IAAA,CAAA,IAAA;AACAA,gBAAAA,YAAA,aAAA,IAAA,CAAA,IAAA;AAAA,EACF,GALsBA,iBAAAA,eAKrB,CAAA,EAAA;AAwEgB,MAAMrB,aAAW;AAAA,IAChC,YAAa;AAAA,IACb,YAAa;AAAA,IACb,gBAAiB;AAAA,IACjB,YAAa;AAAA,IACb,aAAc;AAAA,IACd,aAAc;AAAA;AAqBhB,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAAmC,gBAAKsB,gBAAA,MAAA;AAiCtC,eAAAA,eAAY,KAAuB,OAAc,OAAc,QAAkB;AAAjF,YA4DC,QAAA;;AA1DK,YAAwB,EAAE,iBAAgBA,iBAAgB;AAC5D,iBAAO,IAAIA,eAAc,KAAK,OAAO,OAAO,MAAM;AAAA,QAAA;AAGpD,cAAM,QAAA,QAAA,iBAAA,MAAO;AACb,gBAAA,kBAAM,KAAK,OAAO,KAAK,KAAE;AACzB,gBAAQ,MAAK;AACb,gBAAQ,MAAK;AAER,cAAA,SAAS,IAAI;AAClB,cAAK,eAAeD,aAAW;AAE/B,cAAK,SAASC,eAAc;AAExB,YAAA,KAAK,QAAQ,MAAM,GAAG;AACnB,gBAAA,iBAAiB,MAAM,cAAc,MAAM;AAAA,QACvC,WAAA,KAAK,QAAQ,IAAI,YAAY,GAAG;AACzC,gBAAK,iBAAiB,KAAK,MAAM,IAAI,YAAY;AAAA,QAAA,OAC5C;AACA,gBAAA,iBAAiB,KAAK;;AAGzB,YAAA,KAAK,QAAQ,MAAM,GAAG;AACnB,gBAAA,iBAAiB,MAAM,cAAc,MAAM;AAAA,QACvC,WAAA,KAAK,QAAQ,IAAI,YAAY,GAAG;AACzC,gBAAK,iBAAiB,KAAK,MAAM,IAAI,YAAY;AAAA,QAAA,OAC5C;AACA,gBAAA,iBAAiB,KAAK;;AAG7B,YAAI,OAAO,SAAS,IAAI,cAAc,GAAG;AACvC,gBAAK,mBAAmB,IAAI;AAAA,QAAA,OACvB;AACL,gBAAK,mBAAmB,MAAM,SAAU,IAAG,MAAM,SAAQ;AAAA,QAAA;AAGtD,cAAA,YAAY,IAAI;AACrB,cAAK,iBAAiB;AAEjB,cAAA,gBAAexB,MAAA,IAAI,gBAAc,QAAAA,QAAA,SAAAA,MAAAE,WAAS;AAC1C,cAAA,gBAAe,KAAA,IAAI,gBAAc,QAAA,OAAA,SAAA,KAAAA,WAAS;AAC1C,cAAA,oBAAmB,KAAA,IAAI,oBAAkB,QAAA,OAAA,SAAA,KAAAA,WAAS;AAClD,cAAA,gBAAe,KAAA,IAAI,gBAAc,QAAA,OAAA,SAAA,KAAAA,WAAS;AAC1C,cAAA,iBAAgB,KAAA,IAAI,iBAAe,QAAA,OAAA,SAAA,KAAAA,WAAS;AAC5C,cAAA,iBAAgB,KAAA,IAAI,iBAAe,QAAA,OAAA,SAAA,KAAAA,WAAS;;;AAiBnD,qBAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,kBAAkB,KAAK;AAAA,UAEvB,YAAY,KAAK;AAAA,UACjB,YAAY,KAAK;AAAA,UACjB,gBAAgB,KAAK;AAAA,UACrB,YAAY,KAAK;AAAA,UACjB,aAAa,KAAK;AAAA,UAClB,aAAa,KAAK;AAAA,UAElB,cAAc,KAAK;AAAA,UACnB,cAAc,KAAK;AAAA,UACnB,gBAAgB,KAAK;AAAA;MAEzB;AAGOsB,qBAAA,eAAP,SAAoB,MAAW,OAAY,SAAY;AACjD,eAAA,SAAA,CAAA,GAAO,IAAI;AACf,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AAC5C,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AACtC,YAAA,QAAQ,IAAIA,eAAc,IAAI;AAC7B,eAAA;AAAA,MACT;AAGM,qBAAA,UAAA,SAAN,SAAO,KAA8B;AACnC,YAAI,IAAI,SAAS;AACf,eAAK,eAAe,QAAQ,KAAK,QAAQ,cAAc,IAAI,OAAO,CAAC;AAAA,QAAA,WAC1D,IAAI,cAAc;AACtB,eAAA,eAAe,QAAQ,IAAI,YAAY;AAAA,QAAA;AAE9C,YAAI,IAAI,SAAS;AACf,eAAK,eAAe,QAAQ,KAAK,QAAQ,cAAc,IAAI,OAAO,CAAC;AAAA,QAAA,WAC1D,IAAI,cAAc;AACtB,eAAA,eAAe,QAAQ,IAAI,YAAY;AAAA,QAAA;AAE9C,YAAI,OAAO,SAAS,IAAI,cAAc,GAAG;AACvC,eAAK,mBAAmB,IAAI;AAAA,QAAA;AAE1B,YAAA,IAAI,gBAAgB,QAAW;AACjC,eAAK,gBAAgB,IAAI;AAAA,QAAA;AAE3B,YAAI,OAAO,SAAS,IAAI,UAAU,GAAG;AACnC,eAAK,eAAe,IAAI;AAAA,QAAA;AAE1B,YAAI,OAAO,SAAS,IAAI,UAAU,GAAG;AACnC,eAAK,eAAe,IAAI;AAAA,QAAA;AAE1B,YAAI,OAAO,SAAS,IAAI,cAAc,GAAG;AACvC,eAAK,mBAAmB,IAAI;AAAA,QAAA;AAE9B,YAAI,OAAO,SAAS,IAAI,UAAU,GAAG;AACnC,eAAK,eAAe,IAAI;AAAA,QAAA;AAEtB,YAAA,IAAI,gBAAgB,QAAW;AACjC,eAAK,gBAAgB,IAAI;AAAA,QAAA;AAAA,MAE7B;AAKA,qBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,qBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,qBAAA,UAAA,oBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,qBAAA,UAAA,gBAAA,WAAA;AACE,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,eAAO,GAAG,QAAQ,IAAI,GAAG,QAAQ,IAAI,KAAK;AAAA,MAC5C;AAKA,qBAAA,UAAA,gBAAA,WAAA;AACE,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AACT,eAAA,GAAG,oBAAoB,GAAG;AAAA,MACnC;AAKA,qBAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKW,qBAAA,UAAA,cAAX,SAAY,MAAa;AACvB,YAAI,QAAQ,KAAK;AAAe;AAC3B,aAAA,QAAQ,SAAS,IAAI;AACrB,aAAA,QAAQ,SAAS,IAAI;AAC1B,aAAK,gBAAgB;AAAA,MACvB;AAKc,qBAAA,UAAA,iBAAd,SAAe,QAAc;AAC3B,eAAO,SAAS,KAAK;AAAA,MACvB;AAKa,qBAAA,UAAA,gBAAb,SAAc,OAAa;AACzB,YAAI,SAAS,KAAK;AAAc;AAC3B,aAAA,QAAQ,SAAS,IAAI;AACrB,aAAA,QAAQ,SAAS,IAAI;AAC1B,aAAK,eAAe;AAAA,MACtB;AAKA,qBAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKiB,qBAAA,UAAA,oBAAjB,SAAkB,QAAc;AAC9B,YAAI,UAAU,KAAK;AAAkB;AAChC,aAAA,QAAQ,SAAS,IAAI;AACrB,aAAA,QAAQ,SAAS,IAAI;AAC1B,aAAK,mBAAmB;AAAA,MAC1B;AAEA,qBAAA,UAAA,oBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,qBAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKW,qBAAA,UAAA,cAAX,SAAY,MAAa;AACnB,YAAA,QAAQ,KAAK,eAAe;AACzB,eAAA,QAAQ,SAAS,IAAI;AACrB,eAAA,QAAQ,SAAS,IAAI;AAC1B,eAAK,gBAAgB;AACrB,eAAK,UAAU,IAAI;AAAA,QAAA;AAAA,MAEvB;AAKA,qBAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,qBAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKAA,qBAAA,UAAA,YAAA,SAAU,OAAe,OAAa;AAGpC,YAAI,SAAS,KAAK,gBAAgB,SAAS,KAAK,cAAc;AACvD,eAAA,QAAQ,SAAS,IAAI;AACrB,eAAA,QAAQ,SAAS,IAAI;AAC1B,eAAK,UAAU,IAAI;AACnB,eAAK,eAAe;AACpB,eAAK,eAAe;AAAA,QAAA;AAAA,MAExB;AAKA,qBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKA,qBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKgB,qBAAA,UAAA,mBAAhB,SAAiB,QAAc;AACtB,eAAA,KAAK,IAAI,KAAK,UAAU,GAAG,KAAK,UAAU,CAAC,EAAE,IAAI,MAAM;AAAA,MAChE;AAMiB,qBAAA,UAAA,oBAAjB,SAAkB,QAAc;AACvB,eAAA,SAAS,KAAK,UAAU;AAAA,MACjC;AAEuB,qBAAA,UAAA,0BAAvB,SAAwB,MAAc;AAC/B,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,UAAU,KAAK,QAAQ;AACvB,aAAA,UAAU,KAAK,QAAQ;AAEtB,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAL,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAEhB,aAAA,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACzE,aAAA,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AAW9E,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAEV,YAAA,gBAAiB,KAAK,OAAO;AAEnC,aAAK,OAAO,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI;AAC1F,aAAK,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAK,KAAK,KAAK,IAAI;AAC7E,aAAA,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI;AACrD,aAAK,OAAO,GAAG,IAAI,KAAK,OAAO,GAAG;AAClC,aAAK,OAAO,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI;AACrF,aAAA,OAAO,GAAG,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI;AACpD,aAAK,OAAO,GAAG,IAAI,KAAK,OAAO,GAAG;AAClC,aAAK,OAAO,GAAG,IAAI,KAAK,OAAO,GAAG;AAC7B,aAAA,OAAO,GAAG,IAAI,KAAK;AAExB,aAAK,cAAc,KAAK;AACpB,YAAA,KAAK,cAAc,GAAK;AACrB,eAAA,cAAc,IAAM,KAAK;AAAA,QAAA;AAG5B,YAAA,KAAK,iBAAiB,SAAS,eAAe;AAChD,eAAK,iBAAiB;AAAA,QAAA;AAGpB,YAAA,KAAK,iBAAiB,iBAAiB,OAAO;AAC1C,cAAA,aAAa,KAAK,KAAK,KAAK;AAE9B,cAAArI,WAAS,KAAK,eAAe,KAAK,YAAY,IAAI,IAAMW,iBAAS,aAAa;AAChF,iBAAK,eAAe6H,aAAW;AAAA,UAAA,WAEtB,cAAc,KAAK,cAAc;AACtC,gBAAA,KAAK,gBAAgBA,aAAW,cAAc;AAChD,mBAAK,UAAU,IAAI;AAAA,YAAA;AAErB,iBAAK,eAAeA,aAAW;AAAA,UAAA,WAEtB,cAAc,KAAK,cAAc;AACtC,gBAAA,KAAK,gBAAgBA,aAAW,cAAc;AAChD,mBAAK,UAAU,IAAI;AAAA,YAAA;AAErB,iBAAK,eAAeA,aAAW;AAAA,UAAA,OAE1B;AACL,iBAAK,eAAeA,aAAW;AAC/B,iBAAK,UAAU,IAAI;AAAA,UAAA;AAAA,QACrB,OAEK;AACL,eAAK,eAAeA,aAAW;AAAA,QAAA;AAGjC,YAAI,KAAK,cAAc;AAEhB,eAAA,UAAU,IAAI,KAAK,OAAO;AAC/B,eAAK,kBAAkB,KAAK;AAEtB,cAAAzB,KAAI,KAAK,IAAI,KAAK,UAAU,GAAG,KAAK,UAAU,CAAC;AAElD,UAAAqB,IAAA,OAAO,IAAIrB,EAAC;AACT,gBAAA,MAAM,KAAK,cAAc,KAAK,MAAMA,EAAC,IAAI,KAAK,iBAAiB,KAAK,UAAU;AAEjF,UAAAsB,IAAA,OAAO,IAAItB,EAAC;AACT,gBAAA,MAAM,KAAK,cAAc,KAAK,MAAMA,EAAC,IAAI,KAAK,iBAAiB,KAAK,UAAU;AAAA,QAAA,OAE/E;AACL,eAAK,UAAU;AACf,eAAK,iBAAiB;AAAA,QAAA;AAGnB,aAAA,QAAQ,WAAW,IAAIqB;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAEwB,qBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAAD,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAEjC,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAEV,YAAA,gBAAiB,KAAK,OAAO;AAGnC,YAAI,KAAK,iBAAiB,KAAK,gBAAgBG,aAAW,eAAe,iBAAiB,OAAO;AACzF,cAAA,OAAO,KAAK,KAAK,KAAK;AACxB,cAAA,UAAU,CAAC,KAAK,cAAc;AAClC,cAAM,aAAa,KAAK;AAClB,cAAA,aAAa,KAAK,KAAK,KAAK;AAClC,eAAK,iBAAiB,MAAM,KAAK,iBAAiB,SAAS,CAAC,YAAY,UAAU;AAClF,oBAAU,KAAK,iBAAiB;AAEhC,gBAAM,KAAK;AACX,gBAAM,KAAK;AAAA,QAAA;AAIb,YAAI,KAAK,iBAAiB,KAAK,gBAAgBA,aAAW,iBAAiB,iBAAiB,OAAO;AAC3F,cAAA,QAAQ,KAAK;AACb,gBAAA,WAAW,GAAGH,KAAI,GAAG,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC;AACrD,gBAAA,WAAW,GAAGD,KAAI,GAAG,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC;AAC3D,cAAM,QAAQ,KAAK;AACnB,cAAM,OAAO,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK;AAE7C,cAAM,UAAU,KAAK,IAAI,KAAK,OAAO,QAAQ,IAAI,CAAC;AAE9C,cAAA,KAAK,gBAAgBI,aAAW,aAAa;AAC1C,iBAAA,UAAU,IAAI,OAAO;AAAA,UAEjB,WAAA,KAAK,gBAAgBA,aAAW,cAAc;AACvD,gBAAM,aAAa,KAAK,UAAU,IAAI,QAAQ;AAE9C,gBAAI,aAAa,GAAK;AACpB,kBAAM,MAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,UAAU,GAAG,KAAK,IAAI,KAAK,OAAO,GAAG,GAAG,KAAK,OAAO,GAAG,CAAC,CAAC;AAClG,kBAAM,UAAU,KAAK,OAAO,QAAQ,GAAG;AACvC,sBAAQ,IAAI,QAAQ;AACpB,sBAAQ,IAAI,QAAQ;AACZ,sBAAA,IAAI,CAAC,KAAK,UAAU;AACvB,mBAAA,UAAU,KAAK,QAAQ;AACvB,mBAAA,UAAU,KAAK,QAAQ;AAC5B,mBAAK,UAAU,IAAI;AAAA,YAAA,OAEd;AACA,mBAAA,UAAU,IAAI,OAAO;AAAA,YAAA;AAAA,UAGnB,WAAA,KAAK,gBAAgBA,aAAW,cAAc;AACvD,gBAAM,aAAa,KAAK,UAAU,IAAI,QAAQ;AAE9C,gBAAI,aAAa,GAAK;AACpB,kBAAM,MAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,UAAU,GAAG,KAAK,IAAI,KAAK,OAAO,GAAG,GAAG,KAAK,OAAO,GAAG,CAAC,CAAC;AAClG,kBAAM,UAAU,KAAK,OAAO,QAAQ,GAAG;AACvC,sBAAQ,IAAI,QAAQ;AACpB,sBAAQ,IAAI,QAAQ;AACZ,sBAAA,IAAI,CAAC,KAAK,UAAU;AACvB,mBAAA,UAAU,KAAK,QAAQ;AACvB,mBAAA,UAAU,KAAK,QAAQ;AAC5B,mBAAK,UAAU,IAAI;AAAA,YAAA,OAEd;AACA,mBAAA,UAAU,IAAI,OAAO;AAAA,YAAA;AAAA,UAC5B;AAGF,cAAMzB,KAAI,KAAK,IAAI,QAAQ,GAAG,QAAQ,CAAC;AAEpC,UAAAqB,IAAA,OAAO,IAAIrB,EAAC;AACf,gBAAM,MAAM,KAAK,cAAc,KAAK,MAAMA,EAAC,IAAI,QAAQ;AAEpD,UAAAsB,IAAA,OAAO,IAAItB,EAAC;AACf,gBAAM,MAAM,KAAK,cAAc,KAAK,MAAMA,EAAC,IAAI,QAAQ;AAAA,QAAA,OAElD;AAEC,cAAA,OAAO,KAAK;AACb,eAAA,WAAW,GAAGsB,KAAI,GAAG,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC;AACrD,eAAA,WAAW,GAAGD,KAAI,GAAG,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC;AAC1D,cAAM,UAAU,KAAK,OAAO,QAAQ,KAAK,IAAI,IAAI,CAAC;AAE7C,eAAA,UAAU,KAAK,QAAQ;AACvB,eAAA,UAAU,KAAK,QAAQ;AAEzB,UAAAA,IAAA,OAAO,IAAI,OAAO;AACrB,gBAAM,KAAK,KAAK,cAAc,KAAK,MAAM,OAAO;AAE7C,UAAAC,IAAA,OAAO,IAAI,OAAO;AACrB,gBAAM,KAAK,KAAK,cAAc,KAAK,MAAM,OAAO;AAAA,QAAA;AAG7C,aAAA,QAAQ,WAAW,IAAID;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAKwB,qBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAArC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAErB,YAAI,eAAe;AACnB,YAAI,gBAAgB;AAEpB,YAAM,gBAAiB,KAAK,UAAU,KAAK,WAAW;AAGtD,YAAI,KAAK,iBAAiB,KAAK,gBAAgBuC,aAAW,iBAAiB,iBAAiB,OAAO;AAC3F,cAAA,QAAQ,KAAK,KAAK,KAAK;AAC7B,cAAI,eAAe;AAEf,cAAA,KAAK,gBAAgBA,aAAW,aAAa;AAEzC,gBAAA,IAAI,MAAM,QAAQ,KAAK,cAAc,CAAC7H,iBAAS,sBAAsBA,iBAAS,oBAAoB;AACzF,2BAAA,CAAC,KAAK,cAAc;AACnC,2BAAeX,WAAS,CAAC;AAAA,UAEhB,WAAA,KAAK,gBAAgBwI,aAAW,cAAc;AACnD,gBAAA,IAAI,QAAQ,KAAK;AACrB,2BAAe,CAAC;AAGhB,gBAAI,MAAM,IAAI7H,iBAAS,aAAa,CAACA,iBAAS,sBAAsB,CAAG;AACxD,2BAAA,CAAC,KAAK,cAAc;AAAA,UAE1B,WAAA,KAAK,gBAAgB6H,aAAW,cAAc;AACnD,gBAAA,IAAI,QAAQ,KAAK;AACN,2BAAA;AAGf,gBAAI,MAAM,IAAI7H,iBAAS,aAAa,GAAKA,iBAAS,oBAAoB;AACvD,2BAAA,CAAC,KAAK,cAAc;AAAA,UAAA;AAGrC,gBAAM,KAAK,UAAU;AACrB,gBAAM,KAAK,UAAU;AAAA,QAAA;AAIvB;AACE,aAAG,SAAS,EAAE;AACd,aAAG,SAAS,EAAE;AACR,cAAAoD,MAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACvE,cAAAC,MAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AAEvE,cAAA,IAAI,KAAK;AACf,YAAE,WAAW,GAAGiC,KAAI,GAAGjC,GAAE;AACzB,YAAE,WAAW,GAAGgC,KAAI,GAAGjC,GAAE;AACzB,0BAAgB,EAAE;AAElB,cAAM,KAAK,KAAK;AAChB,cAAM,KAAK,KAAK;AAChB,cAAM,KAAK,KAAK;AAChB,cAAM,KAAK,KAAK;AAEV,cAAA,IAAI,IAAI;AACd,YAAE,GAAG,IAAI,KAAK,KAAK,KAAKA,IAAG,IAAIA,IAAG,IAAI,KAAKC,IAAG,IAAIA,IAAG;AACnD,YAAA,GAAG,IAAI,CAAC,KAAKD,IAAG,IAAIA,IAAG,IAAI,KAAKC,IAAG,IAAIA,IAAG;AAC1C,YAAA,GAAG,IAAI,EAAE,GAAG;AACd,YAAE,GAAG,IAAI,KAAK,KAAK,KAAKD,IAAG,IAAIA,IAAG,IAAI,KAAKC,IAAG,IAAIA,IAAG;AAErD,cAAM,UAAU,KAAK,IAAI,EAAE,MAAM,CAAC,CAAC;AAEhC,UAAAgC,IAAA,OAAO,IAAI,OAAO;AACrB,gBAAM,KAAK,KAAK,cAAcjC,KAAI,OAAO;AAEtC,UAAAkC,IAAA,OAAO,IAAI,OAAO;AACrB,gBAAM,KAAK,KAAK,cAAcjC,KAAI,OAAO;AAAA,QAAA;AAG3C,aAAK,QAAQ,WAAW,EAAE,QAAQgC,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQC,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAE5B,eAAO,iBAAiBtF,iBAAS,cAAc,gBAAgBA,iBAAS;AAAA,MAC1E;AAtnBO8H,qBAAI,OAAG;AAwnBfA,aAAAA;AAAAA,IAAAA,EAznBkC,KAAK;AAAA;AC3GvB,MAAMzI,aAAW,KAAK;AACtB,MAAM,WAAW,KAAK;AACtB,MAAMG,aAAW,KAAK;AAGtB,MAAKqI;AAAA,GAAL,SAAKA,aAAU;AAC9BA,gBAAAA,YAAA,eAAA,IAAA,CAAA,IAAA;AACAA,gBAAAA,YAAA,cAAA,IAAA,CAAA,IAAA;AACAA,gBAAAA,YAAA,cAAA,IAAA,CAAA,IAAA;AACAA,gBAAAA,YAAA,aAAA,IAAA,CAAA,IAAA;AAAA,EACF,GALsBA,iBAAAA,eAKrB,CAAA,EAAA;AAoEgB,MAAMrB,aAAW;AAAA,IAChC,aAAc;AAAA,IACd,kBAAmB;AAAA,IACnB,kBAAmB;AAAA,IACnB,aAAc;AAAA,IACd,eAAgB;AAAA,IAChB,YAAa;AAAA;AAmBf,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAAoC,gBAAKuB,iBAAA,MAAA;AAoCvC,eAAYA,gBAAA,KAAwB,OAAc,OAAc,QAAoB,MAAgB;AAApG,YA6GC,QAAA;AA3GK,YAAwB,EAAE,iBAAgBA,kBAAiB;AAC7D,iBAAO,IAAIA,gBAAe,KAAK,OAAO,OAAO,QAAQ,IAAI;AAAA,QAAA;AAGrD,cAAA,QAAQ,KAAKvB,UAAQ;AAC3B,gBAAA,kBAAM,KAAK,OAAO,KAAK,KAAE;AACzB,gBAAQ,MAAK;AACb,gBAAQ,MAAK;AAEb,cAAK,SAASuB,gBAAe;AAE7B,cAAK,iBAAiB,KAAK,MAAM,SAAS,MAAM,cAAc,MAAM,IAAI,IAAI,gBAAgB,KAAK,KAAA,CAAM;AACvG,cAAK,iBAAiB,KAAK,MAAM,SAAS,MAAM,cAAc,MAAM,IAAI,IAAI,gBAAgB,KAAK,KAAA,CAAM;AACvG,cAAK,gBAAgB,KAAK,MAAM,OAAO,MAAM,eAAe,IAAI,IAAI,IAAI,cAAc,KAAK,IAAI,GAAK,CAAG,CAAC;AACxG,cAAK,cAAc;AACnB,cAAK,gBAAgB,KAAK,aAAa,GAAK,MAAK,aAAa;AAC9D,cAAK,mBAAmB,OAAO,SAAS,IAAI,cAAc,IAAI,IAAI,iBAAiB,MAAM,SAAA,IAAa,MAAM;AAEvG,cAAA,YAAY,IAAI;AACrB,cAAK,cAAc;AACnB,cAAK,iBAAiB;AAEtB,cAAK,qBAAqB,IAAI;AAC9B,cAAK,qBAAqB,IAAI;AAC9B,cAAK,kBAAkB,IAAI;AAC3B,cAAK,eAAe,IAAI;AACxB,cAAK,gBAAgB,IAAI;AACzB,cAAK,gBAAgB,IAAI;AACzB,cAAK,eAAeF,aAAW;AAE1B,cAAA,SAAS,KAAK;AACd,cAAA,SAAS,KAAK;AAEd,cAAA,MAAM,IAAI;;;AA6EjB,sBAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,kBAAkB,KAAK;AAAA,UAEvB,kBAAkB,KAAK;AAAA,UACvB,kBAAkB,KAAK;AAAA,UACvB,eAAe,KAAK;AAAA,UACpB,YAAY,KAAK;AAAA,UACjB,aAAa,KAAK;AAAA,UAClB,aAAa,KAAK;AAAA,UAElB,cAAc,KAAK;AAAA,UACnB,cAAc,KAAK;AAAA,UACnB,YAAY,KAAK;AAAA,UACjB,gBAAgB,KAAK;AAAA;MAEzB;AAGOE,sBAAA,eAAP,SAAoB,MAAW,OAAY,SAAY;AACjD,eAAA,SAAA,CAAA,GAAO,IAAI;AACf,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AAC5C,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AAC5C,aAAK,aAAa,KAAK,MAAM,KAAK,UAAU;AACtC,YAAA,QAAQ,IAAIA,gBAAe,IAAI;AAC9B,eAAA;AAAA,MACT;AAGM,sBAAA,UAAA,SAAN,SAAO,KAA+B;AACpC,YAAI,IAAI,SAAS;AACf,eAAK,eAAe,QAAQ,KAAK,QAAQ,cAAc,IAAI,OAAO,CAAC;AAAA,QAAA,WAC1D,IAAI,cAAc;AACtB,eAAA,eAAe,QAAQ,IAAI,YAAY;AAAA,QAAA;AAE9C,YAAI,IAAI,SAAS;AACf,eAAK,eAAe,QAAQ,KAAK,QAAQ,cAAc,IAAI,OAAO,CAAC;AAAA,QAAA,WAC1D,IAAI,cAAc;AACtB,eAAA,eAAe,QAAQ,IAAI,YAAY;AAAA,QAAA;AAE9C,YAAI,IAAI,YAAY;AACb,eAAA,cAAc,QAAQ,IAAI,UAAU;AACzC,eAAK,cAAc,QAAQ,KAAK,aAAa,GAAK,IAAI,UAAU,CAAC;AAAA,QAAA;AAEnE,YAAI,OAAO,SAAS,IAAI,cAAc,GAAG;AACvC,eAAK,mBAAmB,IAAI;AAAA,QAAA;AAE1B,YAAA,OAAO,IAAI,gBAAgB,aAAa;AACrC,eAAA,gBAAgB,CAAC,CAAC,IAAI;AAAA,QAAA;AAE7B,YAAI,OAAO,SAAS,IAAI,gBAAgB,GAAG;AACzC,eAAK,qBAAqB,IAAI;AAAA,QAAA;AAEhC,YAAI,OAAO,SAAS,IAAI,gBAAgB,GAAG;AACzC,eAAK,qBAAqB,IAAI;AAAA,QAAA;AAE5B,YAAA,OAAO,IAAI,gBAAgB,aAAa;AACrC,eAAA,gBAAgB,CAAC,CAAC,IAAI;AAAA,QAAA;AAE7B,YAAI,OAAO,SAAS,IAAI,aAAa,GAAG;AACtC,eAAK,kBAAkB,IAAI;AAAA,QAAA;AAE7B,YAAI,OAAO,SAAS,IAAI,UAAU,GAAG;AACnC,eAAK,eAAe,IAAI;AAAA,QAAA;AAAA,MAE5B;AAKA,sBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,sBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,sBAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,sBAAA,UAAA,oBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,sBAAA,UAAA,sBAAA,WAAA;AACE,YAAMhE,MAAK,KAAK,QAAQ,cAAc,KAAK,cAAc;AACzD,YAAMC,MAAK,KAAK,QAAQ,cAAc,KAAK,cAAc;AACzD,YAAMnF,KAAI,KAAK,IAAImF,KAAID,GAAE;AACzB,YAAM,OAAO,KAAK,QAAQ,eAAe,KAAK,aAAa;AAE3D,YAAMiE,eAAc,KAAK,IAAInJ,IAAG,IAAI;AAC7B,eAAAmJ;AAAA,MACT;AAKA,sBAAA,UAAA,gBAAA,WAAA;AACE,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAEhB,YAAM5E,MAAK,IAAI,QAAQ,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,gBAAgB,GAAG,QAAQ,WAAW,CAAC;AACvF,YAAMC,MAAK,IAAI,QAAQ,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,gBAAgB,GAAG,QAAQ,WAAW,CAAC;AACvF,YAAM,KAAK,KAAK,IAAI,GAAG,QAAQ,GAAGD,GAAE;AACpC,YAAM,KAAK,KAAK,IAAI,GAAG,QAAQ,GAAGC,GAAE;AACpC,YAAMxE,KAAI,KAAK,IAAI,IAAI,EAAE;AACzB,YAAM,OAAO,IAAI,QAAQ,GAAG,KAAK,GAAG,KAAK,aAAa;AAEtD,YAAM4I,MAAK,GAAG;AACd,YAAMC,MAAK,GAAG;AACd,YAAM,KAAK,GAAG;AACd,YAAM,KAAK,GAAG;AAER,YAAA,QAAQ,KAAK,IAAI7I,IAAG,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,MAAM,KAAK,IAAI,KAAK,gBAAgB6I,KAAI,IAAIrE,GAAE,GAAG,KAAK,gBAAgBoE,KAAI,IAAIrE,GAAE,CAAC,CAAC;AAC7I,eAAA;AAAA,MACT;AAKA,sBAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKW,sBAAA,UAAA,cAAX,SAAY,MAAa;AACnB,YAAA,QAAQ,KAAK,eAAe;AACzB,eAAA,QAAQ,SAAS,IAAI;AACrB,eAAA,QAAQ,SAAS,IAAI;AAC1B,eAAK,gBAAgB;AACrB,eAAK,UAAU,IAAI;AAAA,QAAA;AAAA,MAEvB;AAKA,sBAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,sBAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA2E,sBAAA,UAAA,YAAA,SAAU,OAAe,OAAa;AAEpC,YAAI,SAAS,KAAK,sBAAsB,SAAS,KAAK,oBAAoB;AACnE,eAAA,QAAQ,SAAS,IAAI;AACrB,eAAA,QAAQ,SAAS,IAAI;AAC1B,eAAK,qBAAqB;AAC1B,eAAK,qBAAqB;AAC1B,eAAK,UAAU,IAAI;AAAA,QAAA;AAAA,MAEvB;AAKA,sBAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKW,sBAAA,UAAA,cAAX,SAAY,MAAa;AACvB,YAAI,QAAQ,KAAK;AAAe;AAC3B,aAAA,QAAQ,SAAS,IAAI;AACrB,aAAA,QAAQ,SAAS,IAAI;AAC1B,aAAK,gBAAgB;AAAA,MACvB;AAKa,sBAAA,UAAA,gBAAb,SAAc,OAAa;AACzB,YAAI,SAAS,KAAK;AAAc;AAC3B,aAAA,QAAQ,SAAS,IAAI;AACrB,aAAA,QAAQ,SAAS,IAAI;AAC1B,aAAK,eAAe;AAAA,MACtB;AAKgB,sBAAA,UAAA,mBAAhB,SAAiB,OAAa;AAC5B,YAAI,SAAS,KAAK;AAAiB;AAC9B,aAAA,QAAQ,SAAS,IAAI;AACrB,aAAA,QAAQ,SAAS,IAAI;AAC1B,aAAK,kBAAkB;AAAA,MACzB;AAEA,sBAAA,UAAA,mBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,sBAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKa,sBAAA,UAAA,gBAAb,SAAc,QAAc;AAC1B,eAAO,SAAS,KAAK;AAAA,MACvB;AAKA,sBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKA,sBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKgB,sBAAA,UAAA,mBAAhB,SAAiB,QAAc;AAC7B,eAAO,KAAK,QAAQ,KAAK,UAAU,GAAG,KAAK,QAAQ,KAAK,iBAAiB,KAAK,UAAU,GAAG,KAAK,MAAM,EAAE,IAAI,MAAM;AAAA,MACpH;AAKiB,sBAAA,UAAA,oBAAjB,SAAkB,QAAc;AACvB,eAAA,SAAS,KAAK,UAAU;AAAA,MACjC;AAEuB,sBAAA,UAAA,0BAAvB,SAAwB,MAAc;AAC/B,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,UAAU,KAAK,QAAQ;AACvB,aAAA,UAAU,KAAK,QAAQ;AAEtB,YAAA1C,MAAK,KAAK,QAAQ,WAAW;AAC7B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAoC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAAnC,MAAK,KAAK,QAAQ,WAAW;AAC7B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAoC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAGf,YAAAtE,MAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACvE,YAAAC,MAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACvE,YAAAxE,KAAI,KAAK;AACf,QAAAA,GAAE,WAAW,GAAGyG,KAAI,GAAGjC,GAAE;AACzB,QAAAxE,GAAE,WAAW,GAAGwG,KAAI,GAAGjC,GAAE;AAEzB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAGhB;AACE,eAAK,SAAS,IAAI,QAAQ,IAAI,KAAK,aAAa;AAC3C,eAAA,OAAO,KAAK,cAAc,KAAK,IAAIvE,IAAGuE,GAAE,GAAG,KAAK,MAAM;AAC3D,eAAK,OAAO,KAAK,cAAcC,KAAI,KAAK,MAAM;AAEzC,eAAA,cAAc,KAAK,KAAK,KAAK,KAAK,OAAO,KAAK,OAAO,KAAK,KAAK,OAC9D,KAAK;AACP,cAAA,KAAK,cAAc,GAAK;AACrB,iBAAA,cAAc,IAAM,KAAK;AAAA,UAAA;AAAA,QAChC;AAIF;AACE,eAAK,SAAS,IAAI,QAAQ,IAAI,KAAK,aAAa;AAE3C,eAAA,OAAO,KAAK,cAAc,KAAK,IAAIxE,IAAGuE,GAAE,GAAG,KAAK,MAAM;AAC3D,eAAK,OAAO,KAAK,cAAcC,KAAI,KAAK,MAAM;AAE/B,eAAK,cAAcD,KAAI,KAAK,MAAM;AAE3C,cAAA,MAAM,KAAK,KAAK,KAAK,KAAK,OAAO,KAAK,OAAO,KAAK,KAAK,OAAO,KAAK;AACzE,cAAM,MAAM,KAAK,KAAK,OAAO,KAAK,KAAK;AACjC,cAAA,MAAM,KAAK,KAAK,OAAO,KAAK,OAAO,KAAK,KAAK,OAAO,KAAK;AAC/D,cAAI,MAAM,KAAK;AACf,cAAI,OAAO,GAAK;AAER,kBAAA;AAAA,UAAA;AAER,cAAM,MAAM,KAAK,KAAK,OAAO,KAAK,KAAK;AACjC,cAAA,MAAM,KAAK,KAAK,KAAK,KAAK,OAAO,KAAK,OAAO,KAAK,KAAK,OAAO,KAAK;AAEzE,eAAK,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AAC7B,eAAK,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AAC7B,eAAK,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AAAA,QAAA;AAI/B,YAAI,KAAK,eAAe;AAEtB,cAAM,mBAAmB,KAAK,IAAI,KAAK,QAAQvE,EAAC;AAC5C,cAAAQ,WAAS,KAAK,qBAAqB,KAAK,kBAAkB,IAAI,IAAMW,iBAAS,YAAY;AAC3F,iBAAK,eAAe6H,aAAW;AAAA,UAAA,WAEtB,oBAAoB,KAAK,oBAAoB;AAClD,gBAAA,KAAK,gBAAgBA,aAAW,cAAc;AAChD,mBAAK,eAAeA,aAAW;AAC/B,mBAAK,UAAU,IAAI;AAAA,YAAA;AAAA,UACrB,WAES,oBAAoB,KAAK,oBAAoB;AAClD,gBAAA,KAAK,gBAAgBA,aAAW,cAAc;AAChD,mBAAK,eAAeA,aAAW;AAC/B,mBAAK,UAAU,IAAI;AAAA,YAAA;AAAA,UACrB,OAEK;AACL,iBAAK,eAAeA,aAAW;AAC/B,iBAAK,UAAU,IAAI;AAAA,UAAA;AAAA,QACrB,OAEK;AACL,eAAK,eAAeA,aAAW;AAC/B,eAAK,UAAU,IAAI;AAAA,QAAA;AAGjB,YAAA,KAAK,iBAAiB,OAAO;AAC/B,eAAK,iBAAiB;AAAA,QAAA;AAGxB,YAAI,KAAK,cAAc;AAEhB,eAAA,UAAU,IAAI,KAAK,OAAO;AAC/B,eAAK,kBAAkB,KAAK;AAE5B,cAAMzB,KAAI,KAAK,QAAQ,KAAK,UAAU,GAAG,KAAK,QAAQ,KAAK,iBACrD,KAAK,UAAU,GAAG,KAAK,MAAM;AACnC,cAAM,KAAK,KAAK,UAAU,IAAI,KAAK,OAAO,KAAK,UAAU,KAClD,KAAK,iBAAiB,KAAK,UAAU,KAAK,KAAK;AACtD,cAAM,KAAK,KAAK,UAAU,IAAI,KAAK,OAAO,KAAK,UAAU,KAClD,KAAK,iBAAiB,KAAK,UAAU,KAAK,KAAK;AAEnD,UAAAqB,IAAA,OAAO,IAAIrB,EAAC;AACf,gBAAM,KAAK;AAER,UAAAsB,IAAA,OAAO,IAAItB,EAAC;AACf,gBAAM,KAAK;AAAA,QAAA,OACN;AACL,eAAK,UAAU;AACf,eAAK,iBAAiB;AAAA,QAAA;AAGxB,aAAK,QAAQ,WAAW,EAAE,QAAQqB,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQC,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAEwB,sBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAAD,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAEjC,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAGhB,YAAI,KAAK,iBAAiB,KAAK,gBAAgBG,aAAW,aAAa;AACrE,cAAM,OAAO,KAAK,IAAI,KAAK,QAAQ,KAAK,IAAIH,KAAID,GAAE,CAAC,IAAI,KAAK,OAAO,KAC7D,KAAK,OAAO;AAClB,cAAI,UAAU,KAAK,eAAe,KAAK,eAAe;AACtD,cAAM,aAAa,KAAK;AAClB,cAAA,aAAa,KAAK,KAAK,KAAK;AAClC,eAAK,iBAAiB,MAAM,KAAK,iBAAiB,SAC9C,CAAC,YAAY,UAAU;AAC3B,oBAAU,KAAK,iBAAiB;AAEhC,cAAMrB,KAAI,KAAK,WAAW,SAAS,KAAK,MAAM;AACxC,cAAA,KAAK,UAAU,KAAK;AACpB,cAAA,KAAK,UAAU,KAAK;AAEvB,UAAAqB,IAAA,OAAO,IAAIrB,EAAC;AACf,gBAAM,KAAK;AAER,UAAAsB,IAAA,OAAO,IAAItB,EAAC;AACf,gBAAM,KAAK;AAAA,QAAA;AAGP,YAAA,QAAQ,KAAK;AACb,cAAA,KAAK,KAAK,IAAI,KAAK,QAAQsB,GAAE,IAAI,KAAK,OAAO;AAC7C,cAAA,KAAK,KAAK,IAAI,KAAK,QAAQD,GAAE,IAAI,KAAK,OAAO;AACnD,cAAM,IAAI,KAAK;AAEf,YAAI,KAAK,iBAAiB,KAAK,gBAAgBI,aAAW,eAAe;AAEvE,cAAI,QAAQ;AACZ,mBAAS,KAAK,IAAI,KAAK,QAAQH,GAAE,IAAI,KAAK,OAAO;AACjD,mBAAS,KAAK,IAAI,KAAK,QAAQD,GAAE,IAAI,KAAK,OAAO;AAEjD,cAAM,OAAO,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK;AAE7C,cAAM,KAAK,KAAK,MAAM,KAAK,SAAS;AACpC,cAAI,KAAK,KAAK,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC;AACnC,eAAA,UAAU,IAAI,EAAE;AAEjB,cAAA,KAAK,gBAAgBI,aAAW,cAAc;AAChD,iBAAK,UAAU,IAAI,SAAS,KAAK,UAAU,GAAG,CAAG;AAAA,UACxC,WAAA,KAAK,gBAAgBA,aAAW,cAAc;AACvD,iBAAK,UAAU,IAAIrI,WAAS,KAAK,UAAU,GAAG,CAAG;AAAA,UAAA;AAK7C,cAAAV,KAAI,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,UAAU,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;AACpG,cAAM,MAAM,KAAK,IAAI,KAAK,IAAI,QAAQA,EAAC,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;AACzD,eAAA,UAAU,IAAI,IAAI;AAClB,eAAA,UAAU,IAAI,IAAI;AAEvB,eAAK,KAAK,IAAI,KAAK,WAAW,EAAE;AAE1B,cAAAsH,KAAI,KAAK,QAAQ,GAAG,GAAG,KAAK,QAAQ,GAAG,GAAG,KAAK,MAAM;AACrD,cAAA,KAAK,GAAG,IAAI,KAAK,OAAO,GAAG,IAAI,GAAG,IAAI,KAAK;AAC3C,cAAA,KAAK,GAAG,IAAI,KAAK,OAAO,GAAG,IAAI,GAAG,IAAI,KAAK;AAE9C,UAAAqB,IAAA,OAAO,IAAIrB,EAAC;AACf,gBAAM,KAAK;AAER,UAAAsB,IAAA,OAAO,IAAItB,EAAC;AACf,gBAAM,KAAK;AAAA,QAAA,OACN;AAEL,cAAM,KAAK,KAAK,IAAI,QAAQ,KAAK,IAAI,KAAK,CAAC;AACtC,eAAA,UAAU,KAAK,GAAG;AAClB,eAAA,UAAU,KAAK,GAAG;AAEvB,cAAMA,KAAI,KAAK,WAAW,GAAG,GAAG,KAAK,MAAM;AAC3C,cAAM,KAAK,GAAG,IAAI,KAAK,OAAO,GAAG;AACjC,cAAM,KAAK,GAAG,IAAI,KAAK,OAAO,GAAG;AAE9B,UAAAqB,IAAA,OAAO,IAAIrB,EAAC;AACf,gBAAM,KAAK;AAER,UAAAsB,IAAA,OAAO,IAAItB,EAAC;AACf,gBAAM,KAAK;AAAA,QAAA;AAGR,aAAA,QAAQ,WAAW,IAAIqB;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAKwB,sBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAArC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAErB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAGV,YAAAlC,MAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACvE,YAAAC,MAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AAC7E,YAAMxE,KAAI,KAAK,IAAI,KAAK,IAAIyG,KAAIjC,GAAE,GAAG,KAAK,IAAIgC,KAAIjC,GAAE,CAAC;AAErD,YAAM,OAAO,IAAI,QAAQ,IAAI,KAAK,aAAa;AACzC,YAAA,KAAK,KAAK,cAAc,KAAK,IAAIvE,IAAGuE,GAAE,GAAG,IAAI;AACnD,YAAM,KAAK,KAAK,cAAcC,KAAI,IAAI;AACtC,YAAM4E,QAAO,IAAI,QAAQ,IAAI,KAAK,aAAa;AAEzC,YAAA,KAAK,KAAK,cAAc,KAAK,IAAIpJ,IAAGuE,GAAE,GAAG6E,KAAI;AACnD,YAAM,KAAK,KAAK,cAAc5E,KAAI4E,KAAI;AAElC,YAAA,UAAU,IAAI;AACZ,YAAA,KAAK,KAAK;AAChB,WAAG,IAAI,KAAK,IAAIA,OAAMpJ,EAAC;AACpB,WAAA,IAAI,KAAK,KAAK,KAAK;AAElB,YAAA,cAAcQ,WAAS,GAAG,CAAC;AACzB,YAAA,eAAeA,WAAS,GAAG,CAAC;AAElC,YAAM,aAAaW,iBAAS;AAC5B,YAAM,sBAAsBA,iBAAS;AAErC,YAAI,SAAS;AACb,YAAI,KAAK;AACT,YAAI,KAAK,eAAe;AAEtB,cAAMgI,eAAc,KAAK,IAAI,MAAMnJ,EAAC;AACpC,cAAIQ,WAAS,KAAK,qBAAqB,KAAK,kBAAkB,IAAI,IAAM,YAAY;AAElF,iBAAK,MAAM2I,cAAa,CAAC,qBAAqB,mBAAmB;AACjE,0BAAc,SAAS,aAAa3I,WAAS2I,YAAW,CAAC;AAChD,qBAAA;AAAA,UAAA,WAEAA,gBAAe,KAAK,oBAAoB;AAEjD,iBAAK,MAAMA,eAAc,KAAK,qBAAqB,YAC/C,CAAC,qBAAqB,CAAG;AAC7B,0BAAc,KACT,IAAI,aAAa,KAAK,qBAAqBA,YAAW;AAClD,qBAAA;AAAA,UAAA,WAEAA,gBAAe,KAAK,oBAAoB;AAEjD,iBAAK,MAAMA,eAAc,KAAK,qBAAqB,YAAY,GAC3D,mBAAmB;AACvB,0BAAc,KACT,IAAI,aAAaA,eAAc,KAAK,kBAAkB;AAClD,qBAAA;AAAA,UAAA;AAAA,QACX;AAGF,YAAI,QAAQ;AACV,cAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;AACzC,cAAA,MAAM,KAAK,KAAK,KAAK;AAC3B,cAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK;AACrC,cAAI,MAAM,KAAK;AACf,cAAI,OAAO,GAAK;AAER,kBAAA;AAAA,UAAA;AAEF,cAAA,MAAM,KAAK,KAAK,KAAK;AAC3B,cAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;AAEzC,cAAA,IAAI,IAAI;AACd,YAAE,GAAG,IAAI,KAAK,KAAK,GAAG;AACtB,YAAE,GAAG,IAAI,KAAK,KAAK,GAAG;AACtB,YAAE,GAAG,IAAI,KAAK,KAAK,GAAG;AAEhB,cAAA,IAAI,IAAI;AACd,YAAE,IAAI,GAAG;AACT,YAAE,IAAI,GAAG;AACT,YAAE,IAAI;AAEN,oBAAU,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC;AAAA,QAAA,OAC1B;AACL,cAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;AACzC,cAAA,MAAM,KAAK,KAAK,KAAK;AAC3B,cAAI,MAAM,KAAK;AACf,cAAI,OAAO,GAAK;AACR,kBAAA;AAAA,UAAA;AAGF,cAAA,IAAI,IAAI;AACZ,YAAA,GAAG,OAAO,KAAK,GAAG;AAClB,YAAA,GAAG,OAAO,KAAK,GAAG;AAEpB,cAAM,WAAW,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;AACrC,kBAAQ,IAAI,SAAS;AACrB,kBAAQ,IAAI,SAAS;AACrB,kBAAQ,IAAI;AAAA,QAAA;AAGR,YAAA5B,KAAI,KAAK,QAAQ,QAAQ,GAAG6B,OAAM,QAAQ,GAAG,IAAI;AACvD,YAAM,KAAK,QAAQ,IAAI,KAAK,QAAQ,IAAI,QAAQ,IAAI;AACpD,YAAM,KAAK,QAAQ,IAAI,KAAK,QAAQ,IAAI,QAAQ,IAAI;AAEjD,QAAA5C,IAAA,OAAO,IAAIe,EAAC;AACf,cAAM,KAAK;AACR,QAAAd,IAAA,OAAO,IAAIc,EAAC;AACf,cAAM,KAAK;AAEN,aAAA,QAAQ,WAAW,IAAIf;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAE5B,eAAO,eAAetF,iBAAS,cACxB,gBAAgBA,iBAAS;AAAA,MAClC;AA/vBO+H,sBAAI,OAAG;AAiwBfA,aAAAA;AAAAA,IAAAA,EAlwBmC,KAAK;AAAA;AC9ExB,MAAMvB,aAAW;AAAA,IAChC,OAAQ;AAAA;AA0BV,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAA+B,gBAAK0B,YAAA,MAAA;AA6ClC,eAAYA,WAAA,KAAmB,OAAc,OAAc,QAAyC,QAAyC,OAAc;AAA3J,YA+GC,QAAA;AA7GK,YAAwB,EAAE,iBAAgBA,aAAY;AACxD,iBAAO,IAAIA,WAAU,KAAK,OAAO,OAAO,QAAQ,QAAQ,KAAK;AAAA,QAAA;AAGzD,cAAA,QAAQ,KAAK1B,UAAQ;AAC3B,gBAAA,kBAAM,KAAK,OAAO,KAAK,KAAE;AACzB,gBAAQ,MAAK;AACb,gBAAQ,MAAK;AAEb,cAAK,SAAS0B,WAAU;AAKnB,cAAA,WAAW,SAAS,SAAS,IAAI;AACjC,cAAA,WAAW,SAAS,SAAS,IAAI;AACtC,cAAK,UAAU,OAAO,SAAS,KAAK,IAAI,QAAQ,IAAI;AAE/C,cAAA,UAAU,MAAK,SAAS,QAAO;AAC/B,cAAA,UAAU,MAAK,SAAS,QAAO;AAKhC,YAAA;AACA,YAAA;AAIC,cAAA,UAAU,MAAK,SAAS,SAAQ;AAChC,cAAA,UAAU,MAAK,SAAS,SAAQ;AAG/B,YAAAnF,OAAM,MAAK,QAAQ;AACnB,YAAA,KAAK,MAAK,QAAQ,QAAQ;AAC1B,YAAA,MAAM,MAAK,QAAQ;AACnB,YAAA,KAAK,MAAK,QAAQ,QAAQ;AAE5B,YAAA,MAAK,YAAY,cAAc,MAAM;AACvC,cAAM,WAAW,MAAK;AACtB,gBAAK,iBAAiB,SAAS;AAC/B,gBAAK,iBAAiB,SAAS;AAC/B,gBAAK,oBAAoB,SAAS;AAC7B,gBAAA,eAAe,KAAK;AAEX,wBAAA,KAAK,KAAK,MAAK;AAAA,QAAA,OACxB;AACL,cAAM,YAAY,MAAK;AACvB,gBAAK,iBAAiB,UAAU;AAChC,gBAAK,iBAAiB,UAAU;AAChC,gBAAK,oBAAoB,UAAU;AACnC,gBAAK,eAAe,UAAU;AAE9B,cAAM,KAAK,MAAK;AACV,cAAAgB,MAAK,IAAI,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,QAAQhB,KAAI,GAAG,MAAK,cAAc,GAAG,KAAK,IAAIA,KAAI,GAAG,IAAI,CAAC,CAAC,CAAC;AAC1F,wBAAA,KAAK,IAAIgB,KAAI,MAAK,YAAY,IAAI,KAAK,IAAI,IAAI,MAAK,YAAY;AAAA,QAAA;AAG3E,cAAA,UAAU,MAAK,SAAS,SAAQ;AAChC,cAAA,UAAU,MAAK,SAAS,SAAQ;AAG/B,YAAAf,OAAM,MAAK,QAAQ;AACnB,YAAA,KAAK,MAAK,QAAQ,QAAQ;AAC1B,YAAA,MAAM,MAAK,QAAQ;AACnB,YAAA,KAAK,MAAK,QAAQ,QAAQ;AAE5B,YAAA,MAAK,YAAY,cAAc,MAAM;AACvC,cAAM,WAAW,MAAK;AACtB,gBAAK,iBAAiB,SAAS;AAC/B,gBAAK,iBAAiB,SAAS;AAC/B,gBAAK,oBAAoB,SAAS;AAC7B,gBAAA,eAAe,KAAK;AAEX,wBAAA,KAAK,KAAK,MAAK;AAAA,QAAA,OACxB;AACL,cAAM,YAAY,MAAK;AACvB,gBAAK,iBAAiB,UAAU;AAChC,gBAAK,iBAAiB,UAAU;AAChC,gBAAK,oBAAoB,UAAU;AACnC,gBAAK,eAAe,UAAU;AAE9B,cAAM,KAAK,MAAK;AACV,cAAAgB,MAAK,IAAI,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,QAAQhB,KAAI,GAAG,MAAK,cAAc,GAAG,KAAK,IAAIA,KAAI,GAAG,IAAI,CAAC,CAAC,CAAC;AAC1F,wBAAA,KAAK,IAAIgB,KAAI,MAAK,YAAY,IAAI,KAAK,IAAI,IAAI,MAAK,YAAY;AAAA,QAAA;AAG3E,cAAA,aAAa,cAAc,MAAK,UAAU;AAE/C,cAAK,YAAY;;;AAuBnB,iBAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,kBAAkB,KAAK;AAAA,UAEvB,QAAQ,KAAK;AAAA,UACb,QAAQ,KAAK;AAAA,UACb,OAAO,KAAK;AAAA;AAAA;MAIhB;AAGOkE,iBAAA,eAAP,SAAoB,MAAW,OAAY,SAAY;AACjD,eAAA,SAAA,CAAA,GAAO,IAAI;AACf,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AAC5C,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AAC5C,aAAK,SAAS,QAAQ,OAAO,KAAK,QAAQ,KAAK;AAC/C,aAAK,SAAS,QAAQ,OAAO,KAAK,QAAQ,KAAK;AACzC,YAAA,QAAQ,IAAIA,WAAU,IAAI;AAEzB,eAAA;AAAA,MACT;AAGM,iBAAA,UAAA,SAAN,SAAO,KAA0B;AAE/B,YAAI,OAAO,SAAS,IAAI,KAAK,GAAG;AAC9B,eAAK,UAAU,IAAI;AAAA,QAAA;AAAA,MAEvB;AAKA,iBAAA,UAAA,YAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,iBAAA,UAAA,YAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKQ,iBAAA,UAAA,WAAR,SAAS,OAAa;AAEpB,aAAK,UAAU;AAAA,MACjB;AAKA,iBAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,iBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKA,iBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKgB,iBAAA,UAAA,mBAAhB,SAAiB,QAAc;AACtB,eAAA,KAAK,WAAW,KAAK,WAAW,KAAK,MAAM,EAAE,IAAI,MAAM;AAAA,MAChE;AAKiB,iBAAA,UAAA,oBAAjB,SAAkB,QAAc;AACxB,YAAA,IAAI,KAAK,YAAY,KAAK;AAChC,eAAO,SAAS;AAAA,MAClB;AAEuB,iBAAA,UAAA,0BAAvB,SAAwB,MAAc;AAC/B,aAAA,QAAQ,KAAK,QAAQ,QAAQ;AAC7B,aAAA,QAAQ,KAAK,QAAQ,QAAQ;AAC7B,aAAA,QAAQ,KAAK,QAAQ,QAAQ;AAC7B,aAAA,QAAQ,KAAK,QAAQ,QAAQ;AAC7B,aAAA,OAAO,KAAK,QAAQ;AACpB,aAAA,OAAO,KAAK,QAAQ;AACpB,aAAA,OAAO,KAAK,QAAQ;AACpB,aAAA,OAAO,KAAK,QAAQ;AACpB,aAAA,OAAO,KAAK,QAAQ;AACpB,aAAA,OAAO,KAAK,QAAQ;AACpB,aAAA,OAAO,KAAK,QAAQ;AACpB,aAAA,OAAO,KAAK,QAAQ;AAEnB,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAT,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAErB,aAAK,SAAS;AAEV,YAAA,KAAK,WAAW,cAAc,MAAM;AACjC,eAAA,SAAS,KAAK;AACnB,eAAK,QAAQ;AACb,eAAK,QAAQ;AACR,eAAA,UAAU,KAAK,OAAO,KAAK;AAAA,QAAA,OAC3B;AACL,cAAM,IAAI,IAAI,QAAQ,IAAI,KAAK,YAAY;AAC3C,cAAM,KAAK,IAAI,OAAO,IAAI,KAAK,gBAAgB,KAAK,KAAK;AACzD,cAAMtE,MAAK,IAAI,OAAO,IAAI,KAAK,gBAAgB,KAAK,KAAK;AACzD,eAAK,SAAS;AACd,eAAK,QAAQ,KAAK,cAAc,IAAI,CAAC;AACrC,eAAK,QAAQ,KAAK,cAAcA,KAAI,CAAC;AACrC,eAAK,UAAU,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,KAAK,OAAO,KAAK,QAAQ,KAAK;AAAA,QAAA;AAGzG,YAAA,KAAK,WAAW,cAAc,MAAM;AACjC,eAAA,SAAS,KAAK;AACnB,eAAK,QAAQ,KAAK;AAClB,eAAK,QAAQ,KAAK;AAClB,eAAK,UAAU,KAAK,UAAU,KAAK,WAAW,KAAK,OAAO,KAAK;AAAA,QAAA,OAC1D;AACL,cAAM,IAAI,IAAI,QAAQ,IAAI,KAAK,YAAY;AAC3C,cAAM,KAAK,IAAI,OAAO,IAAI,KAAK,gBAAgB,KAAK,KAAK;AACzD,cAAMC,MAAK,IAAI,OAAO,IAAI,KAAK,gBAAgB,KAAK,KAAK;AACzD,eAAK,SAAS,KAAK,WAAW,KAAK,SAAS,CAAC;AAC7C,eAAK,QAAQ,KAAK,UAAU,KAAK,cAAc,IAAI,CAAC;AACpD,eAAK,QAAQ,KAAK,UAAU,KAAK,cAAcA,KAAI,CAAC;AACpD,eAAK,UAAU,KAAK,UAAU,KAAK,WAAW,KAAK,OAAO,KAAK,QAAQ,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,KAAK,OAAO,KAAK,QAAQ,KAAK;AAAA,QAAA;AAI7I,aAAK,SAAS,KAAK,SAAS,IAAM,IAAM,KAAK,SAAS;AAEtD,YAAI,KAAK,cAAc;AACrB,UAAAoE,IAAG,OAAO,KAAK,OAAO,KAAK,WAAW,KAAK,MAAM;AACjD,gBAAM,KAAK,OAAO,KAAK,YAAY,KAAK;AAExC,UAAAC,IAAG,OAAO,KAAK,OAAO,KAAK,WAAW,KAAK,MAAM;AACjD,gBAAM,KAAK,OAAO,KAAK,YAAY,KAAK;AAExC,aAAG,OAAO,KAAK,OAAO,KAAK,WAAW,KAAK,MAAM;AACjD,gBAAM,KAAK,OAAO,KAAK,YAAY,KAAK;AAExC,aAAG,OAAO,KAAK,OAAO,KAAK,WAAW,KAAK,MAAM;AACjD,gBAAM,KAAK,OAAO,KAAK,YAAY,KAAK;AAAA,QAAA,OAEnC;AACL,eAAK,YAAY;AAAA,QAAA;AAGnB,aAAK,QAAQ,WAAW,EAAE,QAAQD,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQC,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQ,EAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQ,EAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAEwB,iBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAAD,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE7B,YAAA,OAAO,KAAK,IAAI,KAAK,QAAQD,GAAE,IAAI,KAAK,IAAI,KAAK,QAAQ,EAAE,IAAI,KAAK,IAAI,KAAK,QAAQC,GAAE,IAAI,KAAK,IAAI,KAAK,QAAQ,EAAE;AAC9G,gBAAA,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAO,KAAK,QAAQ,KAAK,KAAK,QAAQ;AAExE,YAAA,UAAU,CAAC,KAAK,SAAS;AAC/B,aAAK,aAAa;AAElB,QAAAD,IAAG,OAAO,KAAK,OAAO,SAAS,KAAK,MAAM;AACpC,cAAA,KAAK,OAAO,UAAU,KAAK;AACjC,QAAAC,IAAG,OAAO,KAAK,OAAO,SAAS,KAAK,MAAM;AACpC,cAAA,KAAK,OAAO,UAAU,KAAK;AACjC,WAAG,OAAO,KAAK,OAAO,SAAS,KAAK,MAAM;AACpC,cAAA,KAAK,OAAO,UAAU,KAAK;AACjC,WAAG,OAAO,KAAK,OAAO,SAAS,KAAK,MAAM;AACpC,cAAA,KAAK,OAAO,UAAU,KAAK;AAEjC,aAAK,QAAQ,WAAW,EAAE,QAAQD,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQC,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQ,EAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQ,EAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAKwB,iBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAArC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAErB,YAAM,cAAc;AAEhB,YAAA;AACA,YAAA;AAEA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACJ,YAAI,OAAO;AAEP,YAAA,KAAK,WAAW,cAAc,MAAM;AACtC,iBAAO,KAAK;AACN,gBAAA;AACA,gBAAA;AACE,kBAAA,KAAK,OAAO,KAAK;AAEX,wBAAA,KAAK,KAAK,KAAK;AAAA,QAAA,OACxB;AACL,cAAM,IAAI,IAAI,QAAQ,IAAI,KAAK,YAAY;AAC3C,cAAM,KAAK,IAAI,OAAO,IAAI,KAAK,gBAAgB,KAAK,KAAK;AACzD,cAAMlC,MAAK,IAAI,OAAO,IAAI,KAAK,gBAAgB,KAAK,KAAK;AAClD,iBAAA;AACD,gBAAA,KAAK,cAAc,IAAI,CAAC;AACxB,gBAAA,KAAK,cAAcA,KAAI,CAAC;AACtB,kBAAA,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,MAAM,MAAM,KAAK,OAAO,MAAM;AAE1E,cAAM,KAAK,KAAK,IAAI,KAAK,gBAAgB,KAAK,KAAK;AACnD,cAAMW,MAAK,IAAI,SAAS,IAAI,KAAK,IAAIX,KAAI,KAAK,IAAIiC,KAAI,EAAE,CAAC,CAAC;AAC5C,wBAAA,KAAK,IAAI,KAAK,IAAItB,KAAI,EAAE,GAAG,KAAK,YAAY;AAAA,QAAA;AAGxD,YAAA,KAAK,WAAW,cAAc,MAAM;AACtC,iBAAO,KAAK;AACZ,gBAAM,KAAK;AACX,gBAAM,KAAK;AACX,kBAAQ,KAAK,UAAU,KAAK,WAAW,KAAK,OAAO,KAAK;AAE1C,wBAAA,KAAK,KAAK,KAAK;AAAA,QAAA,OACxB;AACL,cAAM,IAAI,IAAI,QAAQ,IAAI,KAAK,YAAY;AAC3C,cAAM,KAAK,IAAI,OAAO,IAAI,KAAK,gBAAgB,KAAK,KAAK;AACzD,cAAMV,MAAK,IAAI,OAAO,IAAI,KAAK,gBAAgB,KAAK,KAAK;AACzD,iBAAO,KAAK,WAAW,KAAK,SAAS,CAAC;AACtC,gBAAM,KAAK,UAAU,KAAK,cAAc,IAAI,CAAC;AAC7C,gBAAM,KAAK,UAAU,KAAK,cAAcA,KAAI,CAAC;AAC7C,kBAAQ,KAAK,UAAU,KAAK,WAAW,KAAK,OAAO,KAAK,QAAQ,KAAK,OAAO,MAAM,MAAM,KAAK,OAAO,MAAM;AAE1G,cAAM,KAAK,KAAK,IAAI,KAAK,gBAAgB,KAAK,KAAK;AACnD,cAAMW,MAAK,IAAI,SAAS,IAAI,KAAK,IAAIX,KAAI,KAAK,IAAIiC,KAAI,EAAE,CAAC,CAAC;AAC5C,wBAAA,KAAK,IAAItB,KAAI,KAAK,YAAY,IAAI,KAAK,IAAI,IAAI,KAAK,YAAY;AAAA,QAAA;AAGhF,YAAM,IAAK,cAAc,KAAK,UAAU,cAAe,KAAK;AAE5D,YAAI,UAAU;AACd,YAAI,OAAO,GAAK;AACd,oBAAU,CAAC,IAAI;AAAA,QAAA;AAGjB,QAAAqB,IAAG,OAAO,KAAK,OAAO,SAAS,IAAI;AAC7B,cAAA,KAAK,OAAO,UAAU;AAC5B,QAAAC,IAAG,OAAO,KAAK,OAAO,SAAS,IAAI;AAC7B,cAAA,KAAK,OAAO,UAAU;AAC5B,WAAG,OAAO,KAAK,OAAO,SAAS,IAAI;AAC7B,cAAA,KAAK,OAAO,UAAU;AAC5B,WAAG,OAAO,KAAK,OAAO,SAAS,IAAI;AAC7B,cAAA,KAAK,OAAO,UAAU;AAE5B,aAAK,QAAQ,WAAW,EAAE,QAAQD,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQC,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQ,EAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQ,EAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAG5B,eAAO,cAActF,iBAAS;AAAA,MAChC;AAneOkI,iBAAI,OAAG;AAqefA,aAAAA;AAAAA,IAAAA,EAte8B,KAAK;AAAA;ACrBnB,MAAM1B,aAAW;AAAA,IAChC,UAAW;AAAA,IACX,WAAY;AAAA,IACZ,kBAAmB;AAAA;AAkBrB,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAAgC,gBAAK2B,aAAA,MAAA;AA4BnCA,eAAAA,YAAY,KAAoC,OAAc,OAAY;AAA1E,YAqCC,QAAA;AAnCK,YAAwB,EAAE,iBAAgBA,cAAa;AACzD,iBAAO,IAAIA,YAAW,KAAK,OAAO,KAAK;AAAA,QAAA;AAGnC,cAAA,QAAQ,KAAK3B,UAAQ;AAC3B,gBAAA,kBAAM,KAAK,OAAO,KAAK,KAAE;AACzB,gBAAQ,MAAK;AACb,gBAAQ,MAAK;AAEb,cAAK,SAAS2B,YAAW;AAEzB,cAAK,iBAAiB,KAAK,QAAQ,IAAI,YAAY,IAAI,KAAK,MAAM,IAAI,YAAY,IAAI,MAAM,cAAc,MAAM,aAAa;AAC7H,cAAK,kBAAkB,OAAO,SAAS,IAAI,aAAa,IAAI,IAAI,gBAAgB,MAAM,SAAA,IAAa,MAAM;AAEpG,cAAA,kBAAkB,KAAK;AAC5B,cAAK,mBAAmB;AAExB,cAAK,aAAa,IAAI;AACtB,cAAK,cAAc,IAAI;AACvB,cAAK,qBAAqB,IAAI;;;AAmBhC,kBAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,kBAAkB,KAAK;AAAA,UAEvB,UAAU,KAAK;AAAA,UACf,WAAW,KAAK;AAAA,UAChB,kBAAkB,KAAK;AAAA,UAEvB,cAAc,KAAK;AAAA,UACnB,eAAe,KAAK;AAAA;MAExB;AAGOA,kBAAA,eAAP,SAAoB,MAAW,OAAY,SAAY;AACjD,eAAA,SAAA,CAAA,GAAO,IAAI;AACf,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AAC5C,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AACtC,YAAA,QAAQ,IAAIA,YAAW,IAAI;AAC1B,eAAA;AAAA,MACT;AAGM,kBAAA,UAAA,SAAN,SAAO,KAA2B;AAChC,YAAI,OAAO,SAAS,IAAI,aAAa,GAAG;AACtC,eAAK,kBAAkB,IAAI;AAAA,QAAA;AAE7B,YAAI,OAAO,SAAS,IAAI,QAAQ,GAAG;AACjC,eAAK,aAAa,IAAI;AAAA,QAAA;AAExB,YAAI,OAAO,SAAS,IAAI,SAAS,GAAG;AAClC,eAAK,cAAc,IAAI;AAAA,QAAA;AAEzB,YAAI,OAAO,SAAS,IAAI,gBAAgB,GAAG;AACzC,eAAK,qBAAqB,IAAI;AAAA,QAAA;AAEhC,YAAI,KAAK,QAAQ,IAAI,YAAY,GAAG;AAC7B,eAAA,eAAe,IAAI,IAAI,YAAY;AAAA,QAAA;AAAA,MAE5C;AAKW,kBAAA,UAAA,cAAX,SAAY,OAAa;AAEvB,aAAK,aAAa;AAAA,MACpB;AAKA,kBAAA,UAAA,cAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKY,kBAAA,UAAA,eAAZ,SAAa,QAAc;AAEzB,aAAK,cAAc;AAAA,MACrB;AAKA,kBAAA,UAAA,eAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKmB,kBAAA,UAAA,sBAAnB,SAAoB,QAAc;AAEhC,aAAK,qBAAqB;AAAA,MAC5B;AAKA,kBAAA,UAAA,sBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKe,kBAAA,UAAA,kBAAf,SAAgB,cAAuB;AACjC,YAAA,aAAa,KAAK,KAAK,eAAe,KAAK,aAAa,KAAK,KAAK,eAAe,GAAG;AACjF,eAAA,QAAQ,SAAS,IAAI;AACrB,eAAA,QAAQ,SAAS,IAAI;AACrB,eAAA,eAAe,IAAI,YAAY;AAAA,QAAA;AAAA,MAExC;AAEA,kBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKgB,kBAAA,UAAA,mBAAhB,SAAiB,eAAqB;AAChC,YAAA,iBAAiB,KAAK,iBAAiB;AACpC,eAAA,QAAQ,SAAS,IAAI;AACrB,eAAA,QAAQ,SAAS,IAAI;AAC1B,eAAK,kBAAkB;AAAA,QAAA;AAAA,MAE3B;AAEA,kBAAA,UAAA,mBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,kBAAA,UAAA,aAAA,WAAA;AACS,eAAA,KAAK,QAAQ;MACtB;AAKA,kBAAA,UAAA,aAAA,WAAA;AACS,eAAA,KAAK,QAAQ;MACtB;AAKgB,kBAAA,UAAA,mBAAhB,SAAiB,QAAc;AAC7B,eAAO,KAAK,WAAW,QAAQ,KAAK,eAAe;AAAA,MACrD;AAKiB,kBAAA,UAAA,oBAAjB,SAAkB,QAAc;AAC9B,eAAO,SAAS,KAAK;AAAA,MACvB;AAEuB,kBAAA,UAAA,0BAAvB,SAAwB,MAAc;AAC/B,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,UAAU,KAAK,QAAQ;AACvB,aAAA,UAAU,KAAK,QAAQ;AAEtB,YAAA9C,MAAK,KAAK,QAAQ,WAAW;AAC7B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAoC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAAnC,MAAK,KAAK,QAAQ,WAAW;AAC7B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAoC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAGhB,aAAA,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACzE,aAAA,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,cAAc,CAAC;AAUzD,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAGV,YAAA,IAAI,IAAI;AACd,UAAE,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK;AACjF,UAAE,GAAG,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK;AACtE,UAAA,GAAG,IAAI,EAAE,GAAG;AACd,UAAE,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK;AAE5E,aAAA,eAAe,EAAE;AAEtB,aAAK,gBAAgB,KAAK;AACtB,YAAA,KAAK,gBAAgB,GAAK;AACvB,eAAA,gBAAgB,IAAM,KAAK;AAAA,QAAA;AAG7B,aAAA,gBAAgB,KAAK;AAC1B,aAAK,cAAc,WAAW,GAAGpC,KAAI,GAAG,KAAK,IAAI;AACjD,aAAK,cAAc,WAAW,GAAGD,KAAI,GAAG,KAAK,IAAI;AAE5C,aAAA,iBAAiB,KAAK,KAAK,KAAK;AAErC,YAAI,KAAK,cAAc;AAEhB,eAAA,gBAAgB,IAAI,KAAK,OAAO;AACrC,eAAK,oBAAoB,KAAK;AAExB,cAAAe,KAAI,KAAK,IAAI,KAAK,gBAAgB,GAAG,KAAK,gBAAgB,CAAC;AAE9D,UAAAqB,IAAA,OAAO,IAAIrB,EAAC;AACf,gBAAM,MAAM,KAAK,cAAc,KAAK,MAAMA,EAAC,IAAI,KAAK;AAEjD,UAAAsB,IAAA,OAAO,IAAItB,EAAC;AACf,gBAAM,MAAM,KAAK,cAAc,KAAK,MAAMA,EAAC,IAAI,KAAK;AAAA,QAAA,OAE/C;AACL,eAAK,gBAAgB;AACrB,eAAK,mBAAmB;AAAA,QAAA;AAGrB,aAAA,QAAQ,WAAW,IAAIqB;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAEwB,kBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAAD,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAEjC,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAEhB,YAAM,IAAI,KAAK;AACf,YAAM,QAAQ,KAAK;AAGnB;AACE,cAAM,OAAO,KAAK,KAAK,QAAQ,KAAK,qBAAqB,KAAK;AAC1D,cAAA,UAAU,CAAC,KAAK,gBAAgB;AAEpC,cAAM,aAAa,KAAK;AAClB,cAAA,aAAa,IAAI,KAAK;AAC5B,eAAK,mBAAmB,MAAM,KAAK,mBAAmB,SAAS,CAAC,YAAY,UAAU;AACtF,oBAAU,KAAK,mBAAmB;AAElC,gBAAM,KAAK;AACX,gBAAM,KAAK;AAAA,QAAA;AAIb;AACQ,cAAA,OAAO,KAAK;AACb,eAAA,WAAW,GAAGA,KAAI,GAAG,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC;AACrD,eAAA,WAAW,GAAGD,KAAI,GAAG,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC;AAC1D,eAAK,OAAO,QAAQ,KAAK,oBAAoB,KAAK,aAAa;AAE3D,cAAA,UAAU,KAAK,IAAI,MAAM,QAAQ,KAAK,cAAc,IAAI,CAAC;AAC7D,cAAM,aAAa,KAAK,MAAM,KAAK,eAAe;AAC7C,eAAA,gBAAgB,IAAI,OAAO;AAE1B,cAAA,aAAa,IAAI,KAAK;AAEvB,eAAA,gBAAgB,MAAM,UAAU;AAErC,oBAAU,KAAK,IAAI,KAAK,iBAAiB,UAAU;AAEhD,UAAAA,IAAA,OAAO,IAAI,OAAO;AACrB,gBAAM,KAAK,KAAK,cAAc,KAAK,MAAM,OAAO;AAE7C,UAAAC,IAAA,OAAO,IAAI,OAAO;AACrB,gBAAM,KAAK,KAAK,cAAc,KAAK,MAAM,OAAO;AAAA,QAAA;AAG7C,aAAA,QAAQ,WAAW,IAAID;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAKwB,kBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC9B,eAAA;AAAA,MACT;AAvWOS,kBAAI,OAAG;AAyWfA,aAAAA;AAAAA,IAAAA,EA1W+B,KAAK;AAAA;ACtDpB,MAAMpI,YAAU,KAAK;AAqCrB,MAAMyG,aAAW;AAAA,IAChC,UAAW;AAAA,IACX,aAAc;AAAA,IACd,cAAe;AAAA;AAyBjB,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAAgC,gBAAK4B,aAAA,MAAA;AAsBnC,eAAAA,YAAY,KAAoB,OAAc,OAAc,QAAkB;AAA9E,YAmDC,QAAA;AAjDK,YAAwB,EAAE,iBAAgBA,cAAa;AACzD,iBAAO,IAAIA,YAAW,KAAK,OAAO,OAAO,MAAM;AAAA,QAAA;AAG3C,cAAA,QAAQ,KAAK5B,UAAQ;AAC3B,gBAAA,kBAAM,KAAK,OAAO,KAAK,KAAE;AACzB,gBAAQ,MAAK;AACb,gBAAQ,MAAK;AAEb,cAAK,SAAS4B,YAAW;AAMrB,YAAA,KAAK,QAAQ,MAAM,GAAG;AACnB,gBAAA,YAAY,KAAK,MAAM,MAAM;AAAA,QACzB,WAAA,KAAK,QAAQ,IAAI,MAAM,GAAG;AACnC,gBAAK,YAAY,KAAK,MAAM,IAAI,MAAM;AAAA,QAAA,OACjC;AACA,gBAAA,YAAY,KAAK;;AAGxB,cAAK,iBAAiB,UAAU,SAAS,MAAM,gBAAgB,MAAK,SAAS;AAE7E,cAAK,aAAa,IAAI;AACjB,cAAA,YAAY,KAAK;AAEtB,cAAK,gBAAgB,IAAI;AACzB,cAAK,iBAAiB,IAAI;AAE1B,cAAK,SAAS;AACd,cAAK,UAAU;AAGV,cAAA,OAAO,KAAK;AACZ,cAAA,iBAAiB,KAAK;AAC3B,cAAK,aAAa;AAClB,cAAK,UAAU;AACV,cAAA,SAAS,IAAI;AACb,cAAA,MAAM,KAAK;;;AAYlB,kBAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,kBAAkB,KAAK;AAAA,UAEvB,QAAQ,KAAK;AAAA,UACb,UAAU,KAAK;AAAA,UACf,aAAa,KAAK;AAAA,UAClB,cAAc,KAAK;AAAA,UAEnB,eAAe,KAAK;AAAA;MAExB;AAGOA,kBAAA,eAAP,SAAoB,MAAW,OAAY,SAAY;AACjD,eAAA,SAAA,CAAA,GAAO,IAAI;AACf,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AAC5C,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AAC5C,aAAK,SAAS,KAAK,MAAM,KAAK,MAAM;AAC9B,YAAA,QAAQ,IAAIA,YAAW,IAAI;AACjC,YAAI,KAAK,eAAe;AACtB,gBAAM,iBAAiB,KAAK;AAAA,QAAA;AAEvB,eAAA;AAAA,MACT;AAGM,kBAAA,UAAA,SAAN,SAAO,KAA2B;AAChC,YAAI,OAAO,SAAS,IAAI,QAAQ,GAAG;AACjC,eAAK,aAAa,IAAI;AAAA,QAAA;AAExB,YAAI,OAAO,SAAS,IAAI,WAAW,GAAG;AACpC,eAAK,gBAAgB,IAAI;AAAA,QAAA;AAE3B,YAAI,OAAO,SAAS,IAAI,YAAY,GAAG;AACrC,eAAK,iBAAiB,IAAI;AAAA,QAAA;AAAA,MAE9B;AAKS,kBAAA,UAAA,YAAT,SAAU,QAAiB;AACzB,YAAI,KAAK,SAAS,QAAQ,KAAK,SAAS;AAAG;AACtC,aAAA,QAAQ,SAAS,IAAI;AACrB,aAAA,UAAU,IAAI,MAAM;AAAA,MAC3B;AAEA,kBAAA,UAAA,YAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKW,kBAAA,UAAA,cAAX,SAAY,OAAa;AACvB,aAAK,aAAa;AAAA,MACpB;AAKA,kBAAA,UAAA,cAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKY,kBAAA,UAAA,eAAZ,SAAa,IAAU;AACrB,aAAK,gBAAgB;AAAA,MACvB;AAKA,kBAAA,UAAA,eAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKe,kBAAA,UAAA,kBAAf,SAAgB,OAAa;AAC3B,aAAK,iBAAiB;AAAA,MACxB;AAKA,kBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,kBAAA,UAAA,aAAA,WAAA;AACS,eAAA,KAAK,MAAM,KAAK,SAAS;AAAA,MAClC;AAKA,kBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKgB,kBAAA,UAAA,mBAAhB,SAAiB,QAAc;AAC7B,eAAO,KAAK,WAAW,QAAQ,KAAK,SAAS;AAAA,MAC/C;AAKiB,kBAAA,UAAA,oBAAjB,SAAkB,QAAc;AAC9B,eAAO,SAAS;AAAA,MAClB;AAKW,kBAAA,UAAA,cAAX,SAAY,WAAoB;AACzB,aAAA,UAAU,IAAI,SAAS;AAAA,MAC9B;AAEuB,kBAAA,UAAA,0BAAvB,SAAwB,MAAc;AAC/B,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,UAAU,KAAK,QAAQ;AAEtB,YAAA,WAAW,KAAK,QAAQ;AACxB,YAAA,WAAW,KAAK,QAAQ;AAE9B,YAAM9C,MAAK,SAAS;AACpB,YAAM,KAAK,SAAS;AACpB,YAAMoC,MAAK,SAAS;AACpB,YAAI,KAAK,SAAS;AAEZ,YAAA,KAAK,IAAI,IAAI,EAAE;AAEf,YAAA,OAAO,KAAK,QAAQ;AAGpB,YAAA,QAAQ,IAAM3H,YAAU,KAAK;AAGnC,YAAMlB,KAAI,IAAM,OAAO,KAAK,iBAAiB;AAGvC,YAAA,IAAI,QAAQ,QAAQ;AAK1B,YAAM,IAAI,KAAK;AAEV,aAAA,UAAU,KAAKA,KAAI,IAAI;AACxB,YAAA,KAAK,WAAW,GAAK;AAClB,eAAA,UAAU,IAAM,KAAK;AAAA,QAAA;AAEvB,aAAA,SAAS,IAAI,IAAI,KAAK;AAGtB,aAAA,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AAOxE,YAAA,IAAI,IAAI;AACd,UAAE,GAAG,IAAI,KAAK,aAAa,KAAK,UAAU,KAAK,KAAK,IAAI,KAAK,KAAK,IAC5D,KAAK;AACT,UAAA,GAAG,IAAI,CAAC,KAAK,UAAU,KAAK,KAAK,IAAI,KAAK,KAAK;AAC/C,UAAA,GAAG,IAAI,EAAE,GAAG;AACd,UAAE,GAAG,IAAI,KAAK,aAAa,KAAK,UAAU,KAAK,KAAK,IAAI,KAAK,KAAK,IAC5D,KAAK;AAEN,aAAA,SAAS,EAAE;AAEX,aAAA,IAAI,QAAQyG,GAAE;AACnB,aAAK,IAAI,WAAW,GAAG,KAAK,MAAM,IAAI,KAAK,SAAS;AAC/C,aAAA,IAAI,IAAI,KAAK,MAAM;AAGlB,cAAA;AAEN,YAAI,KAAK,cAAc;AAChB,eAAA,UAAU,IAAI,KAAK,OAAO;AAC/B,UAAAoC,IAAG,OAAO,KAAK,YAAY,KAAK,SAAS;AACzC,gBAAM,KAAK,UAAU,KAAK,cAAc,KAAK,MAAM,KAAK,SAAS;AAAA,QAAA,OAE5D;AACL,eAAK,UAAU;;AAGR,iBAAA,EAAE,QAAQA,GAAE;AACrB,iBAAS,IAAI;AAAA,MACf;AAEwB,kBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAA,WAAW,KAAK,QAAQ;AAC9B,YAAMA,MAAK,KAAK,MAAM,SAAS,CAAC;AAChC,YAAI,KAAK,SAAS;AAIlB,YAAM,OAAO,KAAK,aAAa,IAAI,KAAK,IAAI;AAC5C,aAAK,IAAIA,GAAE;AAEX,aAAK,WAAW,GAAG,KAAK,KAAK,KAAK,SAAS,KAAK,SAAS;AACzD,aAAK,IAAG;AAER,YAAI,UAAU,MAAM,QAAQ,KAAK,QAAQ,IAAI;AAE7C,YAAM,aAAa,KAAK,MAAM,KAAK,SAAS;AACvC,aAAA,UAAU,IAAI,OAAO;AACpB,YAAA,aAAa,KAAK,KAAK,KAAK;AAC7B,aAAA,UAAU,MAAM,UAAU;AAC/B,kBAAU,KAAK,IAAI,KAAK,WAAW,UAAU;AAE1C,QAAAA,IAAA,OAAO,KAAK,YAAY,OAAO;AAClC,cAAM,KAAK,UAAU,KAAK,cAAc,KAAK,MAAM,OAAO;AAEjD,iBAAA,EAAE,QAAQA,GAAE;AACrB,iBAAS,IAAI;AAAA,MACf;AAKwB,kBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC9B,eAAA;AAAA,MACT;AA3TOU,kBAAI,OAAG;AA6TfA,aAAAA;AAAAA,IAAAA,EA9T+B,KAAK;AAAA;AClEpB,MAAM/I,aAAW,KAAK;AAiDtB,MAAMmH,aAAW;AAAA,IAChC,kBAAmB;AAAA;AAwBrB,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAAiC,gBAAK6B,cAAA,MAAA;AA8BpCA,eAAAA,aAAY,KAAqB,OAAc,OAAc,SAAqB,SAAqB,SAAqB,SAAqB,OAAc;AAA/J,YAsCC,QAAA;AApCK,YAAwB,EAAE,iBAAgBA,eAAc;AACnD,iBAAA,IAAIA,aAAY,KAAK,OAAO,OAAO,SAAS,SAAS,SAAS,SAAS,KAAK;AAAA,QAAA;AAG/E,cAAA,QAAQ,KAAK7B,UAAQ;AAC3B,gBAAA,kBAAM,KAAK,OAAO,KAAK,KAAE;AACzB,gBAAQ,MAAK;AACb,gBAAQ,MAAK;AAEb,cAAK,SAAS6B,aAAY;AACrB,cAAA,kBAAkB,KAAK,MAAM,UAAU,UAAU,IAAI,iBAAiB,KAAK,IAAI,IAAM,CAAG,CAAC;AACzF,cAAA,kBAAkB,KAAK,MAAM,UAAU,UAAU,IAAI,iBAAiB,KAAK,IAAI,GAAK,CAAG,CAAC;AAC7F,cAAK,iBAAiB,KAAK,MAAM,UAAU,MAAM,cAAc,OAAO,IAAI,IAAI,gBAAgB,KAAK,IAAI,IAAM,CAAG,CAAC;AACjH,cAAK,iBAAiB,KAAK,MAAM,UAAU,MAAM,cAAc,OAAO,IAAI,IAAI,gBAAgB,KAAK,IAAI,GAAK,CAAG,CAAC;AAC3G,cAAA,YAAY,OAAO,SAAS,IAAI,OAAO,IAAI,IAAI,UAAU,KAAK,SAAS,SAAS,OAAO;AACvF,cAAA,YAAY,OAAO,SAAS,IAAI,OAAO,IAAI,IAAI,UAAU,KAAK,SAAS,SAAS,OAAO;AAC5F,cAAK,UAAU,OAAO,SAAS,KAAK,IAAI,QAAQ,IAAI;AAIpD,cAAK,aAAa,MAAK,YAAY,MAAK,UAAU,MAAK;AAEvD,cAAK,YAAY;;;AAiBnB,mBAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,kBAAkB,KAAK;AAAA,UAEvB,eAAe,KAAK;AAAA,UACpB,eAAe,KAAK;AAAA,UACpB,cAAc,KAAK;AAAA,UACnB,cAAc,KAAK;AAAA,UACnB,SAAS,KAAK;AAAA,UACd,SAAS,KAAK;AAAA,UACd,OAAO,KAAK;AAAA;MAEhB;AAGOA,mBAAA,eAAP,SAAoB,MAAW,OAAY,SAAY;AACjD,eAAA,SAAA,CAAA,GAAO,IAAI;AACf,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AAC5C,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AACtC,YAAA,QAAQ,IAAIA,aAAY,IAAI;AAC3B,eAAA;AAAA,MACT;AAGM,mBAAA,UAAA,SAAN,SAAO,KAA4B;AACjC,YAAI,KAAK,QAAQ,IAAI,aAAa,GAAG;AAC9B,eAAA,gBAAgB,IAAI,IAAI,aAAa;AAAA,QAAA;AAE5C,YAAI,KAAK,QAAQ,IAAI,aAAa,GAAG;AAC9B,eAAA,gBAAgB,IAAI,IAAI,aAAa;AAAA,QAAA;AAE5C,YAAI,KAAK,QAAQ,IAAI,YAAY,GAAG;AAC7B,eAAA,eAAe,IAAI,IAAI,YAAY;AAAA,QAC/B,WAAA,KAAK,QAAQ,IAAI,OAAO,GAAG;AACpC,eAAK,eAAe,IAAI,KAAK,QAAQ,cAAc,IAAI,OAAO,CAAC;AAAA,QAAA;AAEjE,YAAI,KAAK,QAAQ,IAAI,YAAY,GAAG;AAC7B,eAAA,eAAe,IAAI,IAAI,YAAY;AAAA,QAC/B,WAAA,KAAK,QAAQ,IAAI,OAAO,GAAG;AACpC,eAAK,eAAe,IAAI,KAAK,QAAQ,cAAc,IAAI,OAAO,CAAC;AAAA,QAAA;AAEjE,YAAI,OAAO,SAAS,IAAI,OAAO,GAAG;AAChC,eAAK,YAAY,IAAI;AAAA,QAAA;AAEvB,YAAI,OAAO,SAAS,IAAI,OAAO,GAAG;AAChC,eAAK,YAAY,IAAI;AAAA,QAAA;AAEvB,YAAI,OAAO,SAAS,IAAI,KAAK,GAAG;AAC9B,eAAK,UAAU,IAAI;AAAA,QAAA;AAAA,MAEvB;AAKA,mBAAA,UAAA,mBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,mBAAA,UAAA,mBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,mBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,mBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,mBAAA,UAAA,WAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,mBAAA,UAAA,oBAAA,WAAA;AACE,YAAM,IAAI,KAAK,QAAQ,cAAc,KAAK,cAAc;AACxD,YAAMrJ,KAAI,KAAK;AACR,eAAA,KAAK,SAAS,GAAGA,EAAC;AAAA,MAC3B;AAKA,mBAAA,UAAA,oBAAA,WAAA;AACE,YAAM,IAAI,KAAK,QAAQ,cAAc,KAAK,cAAc;AACxD,YAAMA,KAAI,KAAK;AACR,eAAA,KAAK,SAAS,GAAGA,EAAC;AAAA,MAC3B;AAOW,mBAAA,UAAA,cAAX,SAAY,WAAoB;AACzB,aAAA,gBAAgB,IAAI,SAAS;AAC7B,aAAA,gBAAgB,IAAI,SAAS;AAAA,MACpC;AAKA,mBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKA,mBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKgB,mBAAA,UAAA,mBAAhB,SAAiB,QAAc;AACtB,eAAA,KAAK,WAAW,KAAK,WAAW,KAAK,IAAI,EAAE,IAAI,MAAM;AAAA,MAC9D;AAKiB,mBAAA,UAAA,oBAAjB,SAAkB,QAAc;AACvB,eAAA;AAAA,MACT;AAEuB,mBAAA,UAAA,0BAAvB,SAAwB,MAAc;AAC/B,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,UAAU,KAAK,QAAQ;AACvB,aAAA,UAAU,KAAK,QAAQ;AAEtB,YAAAqG,MAAK,KAAK,QAAQ,WAAW;AAC7B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAoC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAAnC,MAAK,KAAK,QAAQ,WAAW;AAC7B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAoC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAEhB,aAAA,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACzE,aAAA,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AAGzE,aAAA,OAAO,KAAK,IAAI,KAAK,IAAIrC,KAAI,KAAK,IAAI,GAAG,KAAK,eAAe;AAC7D,aAAA,OAAO,KAAK,IAAI,KAAK,IAAIC,KAAI,KAAK,IAAI,GAAG,KAAK,eAAe;AAE5D,YAAA,UAAU,KAAK,KAAK;AACpB,YAAA,UAAU,KAAK,KAAK;AAEtB,YAAA,UAAU,KAAOtF,iBAAS,YAAY;AACnC,eAAA,KAAK,IAAI,IAAM,OAAO;AAAA,QAAA,OACtB;AACL,eAAK,KAAK;;AAGR,YAAA,UAAU,KAAOA,iBAAS,YAAY;AACnC,eAAA,KAAK,IAAI,IAAM,OAAO;AAAA,QAAA,OACtB;AACL,eAAK,KAAK;;AAIZ,YAAM,MAAM,KAAK,cAAc,KAAK,MAAM,KAAK,IAAI;AACnD,YAAM,MAAM,KAAK,cAAc,KAAK,MAAM,KAAK,IAAI;AAEnD,YAAM,KAAK,KAAK,aAAa,KAAK,UAAU,MAAM;AAClD,YAAM,KAAK,KAAK,aAAa,KAAK,UAAU,MAAM;AAElD,aAAK,SAAS,KAAK,KAAK,UAAU,KAAK,UAAU;AAE7C,YAAA,KAAK,SAAS,GAAK;AAChB,eAAA,SAAS,IAAM,KAAK;AAAA,QAAA;AAG3B,YAAI,KAAK,cAAc;AAErB,eAAK,aAAa,KAAK;AAGvB,cAAM,KAAK,KAAK,WAAW,CAAC,KAAK,WAAW,KAAK,IAAI;AAC/C,cAAA,KAAK,KAAK,WAAW,CAAC,KAAK,UAAU,KAAK,WAAW,KAAK,IAAI;AAEjE,UAAAyH,IAAA,OAAO,KAAK,YAAY,EAAE;AAC7B,gBAAM,KAAK,UAAU,KAAK,cAAc,KAAK,MAAM,EAAE;AAElD,UAAAC,IAAA,OAAO,KAAK,YAAY,EAAE;AAC7B,gBAAM,KAAK,UAAU,KAAK,cAAc,KAAK,MAAM,EAAE;AAAA,QAAA,OAEhD;AACL,eAAK,YAAY;AAAA,QAAA;AAGd,aAAA,QAAQ,WAAW,IAAID;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAEwB,mBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAAD,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,MAAM,KAAK,IAAID,KAAI,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC;AACnD,YAAA,MAAM,KAAK,IAAIC,KAAI,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC;AAEzD,YAAM,OAAO,CAAC,KAAK,IAAI,KAAK,MAAM,GAAG,IAAI,KAAK,UAAU,KAAK,IAAI,KAAK,MAAM,GAAG;AACzE,YAAA,UAAU,CAAC,KAAK,SAAS;AAC/B,aAAK,aAAa;AAElB,YAAM,KAAK,KAAK,WAAW,CAAC,SAAS,KAAK,IAAI;AACxC,YAAA,KAAK,KAAK,WAAW,CAAC,KAAK,UAAU,SAAS,KAAK,IAAI;AAC1D,QAAAD,IAAA,OAAO,KAAK,YAAY,EAAE;AAC7B,cAAM,KAAK,UAAU,KAAK,cAAc,KAAK,MAAM,EAAE;AAClD,QAAAC,IAAA,OAAO,KAAK,YAAY,EAAE;AAC7B,cAAM,KAAK,UAAU,KAAK,cAAc,KAAK,MAAM,EAAE;AAEhD,aAAA,QAAQ,WAAW,IAAID;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAKwB,mBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAArC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAEf,YAAAlC,MAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACvE,YAAAC,MAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AAGvE,YAAA,KAAK,KAAK,IAAI,KAAK,IAAIgC,KAAI,KAAK,IAAI,GAAG,KAAK,eAAe;AAC3D,YAAA,KAAK,KAAK,IAAI,KAAK,IAAIC,KAAI,KAAK,IAAI,GAAG,KAAK,eAAe;AAE3D,YAAA,UAAU,GAAG;AACb,YAAA,UAAU,GAAG;AAEf,YAAA,UAAU,KAAOtF,iBAAS,YAAY;AACrC,aAAA,IAAI,IAAM,OAAO;AAAA,QAAA,OACf;AACL,aAAG,QAAO;AAAA,QAAA;AAGR,YAAA,UAAU,KAAOA,iBAAS,YAAY;AACrC,aAAA,IAAI,IAAM,OAAO;AAAA,QAAA,OACf;AACL,aAAG,QAAO;AAAA,QAAA;AAIZ,YAAM,MAAM,KAAK,cAAcoD,KAAI,EAAE;AACrC,YAAM,MAAM,KAAK,cAAcC,KAAI,EAAE;AAErC,YAAM,KAAK,KAAK,aAAa,KAAK,UAAU,MAAM;AAClD,YAAM,KAAK,KAAK,aAAa,KAAK,UAAU,MAAM;AAElD,YAAI,OAAO,KAAK,KAAK,UAAU,KAAK,UAAU;AAE9C,YAAI,OAAO,GAAK;AACd,iBAAO,IAAM;AAAA,QAAA;AAGf,YAAM,IAAI,KAAK,aAAa,UAAU,KAAK,UAAU;AAC/C,YAAA,cAAchE,WAAS,CAAC;AAExB,YAAA,UAAU,CAAC,OAAO;AAExB,YAAM,KAAK,KAAK,WAAW,CAAC,SAAS,EAAE;AACvC,YAAM,KAAK,KAAK,WAAW,CAAC,KAAK,UAAU,SAAS,EAAE;AAEnD,QAAAgG,IAAA,OAAO,KAAK,YAAY,EAAE;AAC7B,cAAM,KAAK,UAAU,KAAK,cAAcjC,KAAI,EAAE;AAC3C,QAAAkC,IAAA,OAAO,KAAK,YAAY,EAAE;AAC7B,cAAM,KAAK,UAAU,KAAK,cAAcjC,KAAI,EAAE;AAEzC,aAAA,QAAQ,WAAW,IAAIgC;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAE5B,eAAO,cAActF,iBAAS;AAAA,MAChC;AApYOqI,mBAAI,OAAG;AAsYfA,aAAAA;AAAAA,IAAAA,EAvYgC,KAAK;AAAA;AC3ErB,MAAM7I,aAAW,KAAK;AAEtB,MAAK;AAAA,GAAL,SAAKqI,aAAU;AAC9BA,gBAAAA,YAAA,eAAA,IAAA,CAAA,IAAA;AACAA,gBAAAA,YAAA,cAAA,IAAA,CAAA,IAAA;AACAA,gBAAAA,YAAA,cAAA,IAAA,CAAA,IAAA;AACAA,gBAAAA,YAAA,aAAA,IAAA,CAAA,IAAA;AAAA,EACF,GALsB,eAAA,aAKrB,CAAA,EAAA;AA+BgB,MAAMrB,aAAW;AAAA,IAChC,WAAY;AAAA;AAwBd,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAA+B,gBAAK8B,YAAA,MAAA;AA2BlC,eAAAA,WAAY,KAAmB,OAAc,OAAc,QAAkB;AAA7E,YA6BC,QAAA;AA3BK,YAAwB,EAAE,iBAAgBA,aAAY;AACxD,iBAAO,IAAIA,WAAU,KAAK,OAAO,OAAO,MAAM;AAAA,QAAA;AAG1C,cAAA,QAAQ,KAAK9B,UAAQ;AAC3B,gBAAA,kBAAM,KAAK,OAAO,KAAK,KAAE;AACzB,gBAAQ,MAAK;AACb,gBAAQ,MAAK;AAEb,cAAK,SAAS8B,WAAU;AACxB,cAAK,iBAAiB,KAAK,MAAM,SAAS,MAAM,cAAc,MAAM,IAAI,IAAI,gBAAgB,KAAK,IAAI,IAAM,CAAG,CAAC;AAC/G,cAAK,iBAAiB,KAAK,MAAM,SAAS,MAAM,cAAc,MAAM,IAAI,IAAI,gBAAgB,KAAK,IAAI,GAAK,CAAG,CAAC;AAE9G,cAAK,cAAc,IAAI;AAEvB,cAAK,SAAS;AACd,cAAK,YAAY;AACjB,cAAK,WAAW;AAChB,cAAK,UAAU,WAAW;;;AAY5B,iBAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,kBAAkB,KAAK;AAAA,UAEvB,cAAc,KAAK;AAAA,UACnB,cAAc,KAAK;AAAA,UACnB,WAAW,KAAK;AAAA;MAEpB;AAGOA,iBAAA,eAAP,SAAoB,MAAW,OAAY,SAAY;AACjD,eAAA,SAAA,CAAA,GAAO,IAAI;AACf,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AAC5C,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AACtC,YAAA,QAAQ,IAAIA,WAAU,IAAI;AACzB,eAAA;AAAA,MACT;AAGM,iBAAA,UAAA,SAAN,SAAO,KAA0B;AAC/B,YAAI,OAAO,SAAS,IAAI,SAAS,GAAG;AAClC,eAAK,cAAc,IAAI;AAAA,QAAA;AAAA,MAE3B;AAKA,iBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,iBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKY,iBAAA,UAAA,eAAZ,SAAa,QAAc;AACzB,aAAK,cAAc;AAAA,MACrB;AAKA,iBAAA,UAAA,eAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAEA,iBAAA,UAAA,gBAAA,WAAA;AAEE,eAAO,KAAK;AAAA,MACd;AAKA,iBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKA,iBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKgB,iBAAA,UAAA,mBAAhB,SAAiB,QAAc;AACtB,eAAA,KAAK,WAAW,KAAK,WAAW,KAAK,GAAG,EAAE,IAAI,MAAM;AAAA,MAC7D;AAKiB,iBAAA,UAAA,oBAAjB,SAAkB,QAAc;AACvB,eAAA;AAAA,MACT;AAEuB,iBAAA,UAAA,0BAAvB,SAAwB,MAAc;AAC/B,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,UAAU,KAAK,QAAQ;AACvB,aAAA,UAAU,KAAK,QAAQ;AAEtB,YAAAjD,MAAK,KAAK,QAAQ,WAAW;AAC7B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAoC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAAnC,MAAK,KAAK,QAAQ,WAAW;AAC7B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAoC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAErB,aAAK,OAAO,IAAI,OAAO,IAAI,KAAK,gBAAgB,KAAK,cAAc;AACnE,aAAK,OAAO,IAAI,OAAO,IAAI,KAAK,gBAAgB,KAAK,cAAc;AAC9D,aAAA,MAAM,KAAK;AAChB,aAAK,IAAI,WAAW,GAAGpC,KAAI,GAAG,KAAK,IAAI;AACvC,aAAK,IAAI,WAAW,GAAGD,KAAI,GAAG,KAAK,IAAI;AAElC,aAAA,WAAW,KAAK,IAAI,OAAM;AAEzB,YAAA,IAAI,KAAK,WAAW,KAAK;AAC/B,YAAI,IAAI,GAAK;AACX,eAAK,UAAU,WAAW;AAAA,QAAA,OACrB;AACL,eAAK,UAAU,WAAW;AAAA,QAAA;AAGxB,YAAA,KAAK,WAAWrF,iBAAS,YAAY;AACvC,eAAK,IAAI,IAAI,IAAM,KAAK,QAAQ;AAAA,QAAA,OAC3B;AACL,eAAK,IAAI;AACT,eAAK,SAAS;AACd,eAAK,YAAY;AACjB;AAAA,QAAA;AAIF,YAAM,MAAM,KAAK,cAAc,KAAK,MAAM,KAAK,GAAG;AAClD,YAAM,MAAM,KAAK,cAAc,KAAK,MAAM,KAAK,GAAG;AAC5C,YAAA,UAAU,KAAK,aAAa,KAAK,UAAU,MAAM,MAAM,KAAK,aAAa,KAAK,UAAU,MAAM;AAEpG,aAAK,SAAS,WAAW,IAAM,IAAM,UAAU;AAE/C,YAAI,KAAK,cAAc;AAErB,eAAK,aAAa,KAAK;AAEvB,cAAMoG,KAAI,KAAK,WAAW,KAAK,WAAW,KAAK,GAAG;AAE/C,UAAAqB,IAAA,OAAO,KAAK,YAAYrB,EAAC;AAC5B,gBAAM,KAAK,UAAU,KAAK,cAAc,KAAK,MAAMA,EAAC;AAEjD,UAAAsB,IAAA,OAAO,KAAK,YAAYtB,EAAC;AAC5B,gBAAM,KAAK,UAAU,KAAK,cAAc,KAAK,MAAMA,EAAC;AAAA,QAAA,OAE/C;AACL,eAAK,YAAY;AAAA,QAAA;AAGnB,aAAK,QAAQ,WAAW,EAAE,QAAQqB,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQC,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAEwB,iBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAAD,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAGjC,YAAM,MAAM,KAAK,gBAAgBD,KAAI,IAAI,KAAK,IAAI;AAClD,YAAM,MAAM,KAAK,gBAAgBC,KAAI,IAAI,KAAK,IAAI;AAC5C,YAAA,IAAI,KAAK,WAAW,KAAK;AAC3B,YAAA,OAAO,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,GAAG,CAAC;AAGhD,YAAI,IAAI,GAAK;AACX,kBAAQ,KAAK,SAAS;AAAA,QAAA;AAGpB,YAAA,UAAU,CAAC,KAAK,SAAS;AAC7B,YAAM,aAAa,KAAK;AACxB,aAAK,YAAYlI,WAAS,GAAK,KAAK,YAAY,OAAO;AACvD,kBAAU,KAAK,YAAY;AAE3B,YAAM4G,KAAI,KAAK,WAAW,SAAS,KAAK,GAAG;AACxC,QAAAqB,IAAA,OAAO,KAAK,YAAYrB,EAAC;AAC5B,cAAM,KAAK,UAAU,KAAK,cAAc,KAAK,MAAMA,EAAC;AACjD,QAAAsB,IAAA,OAAO,KAAK,YAAYtB,EAAC;AAC5B,cAAM,KAAK,UAAU,KAAK,cAAc,KAAK,MAAMA,EAAC;AAE/C,aAAA,QAAQ,WAAW,IAAIqB;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAKwB,iBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAArC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAErB,YAAMlC,MAAK,IAAI,OAAO,IAAI,KAAK,gBAAgB,KAAK,cAAc;AAClE,YAAMC,MAAK,IAAI,OAAO,IAAI,KAAK,gBAAgB,KAAK,cAAc;AAC5D,YAAA,IAAI,KAAK;AACf,UAAE,WAAW,GAAGiC,KAAI,GAAGjC,GAAE;AACzB,UAAE,WAAW,GAAGgC,KAAI,GAAGjC,GAAE;AAEnB,YAAA,SAAS,EAAE;AACb,YAAA,IAAI,SAAS,KAAK;AAEtB,YAAI,MAAM,GAAG,GAAKpD,iBAAS,mBAAmB;AAExC,YAAA,UAAU,CAAC,KAAK,SAAS;AAC/B,YAAMoG,KAAI,KAAK,WAAW,SAAS,CAAC;AAEjC,QAAAf,IAAA,OAAO,KAAK,YAAYe,EAAC;AAC5B,cAAM,KAAK,UAAU,KAAK,cAAchD,KAAIgD,EAAC;AAC1C,QAAAd,IAAA,OAAO,KAAK,YAAYc,EAAC;AAC5B,cAAM,KAAK,UAAU,KAAK,cAAc/C,KAAI+C,EAAC;AAE7C,aAAK,QAAQ,WAAW,EAAE,QAAQf,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQC,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAErB,eAAA,SAAS,KAAK,cAActF,iBAAS;AAAA,MAC9C;AArSOsI,iBAAI,OAAG;AAuSfA,aAAAA;AAAAA,IAAAA,EAxS8B,KAAK;AAAA;AC9DnB,MAAMjJ,aAAW,KAAK;AACtB,MAAMU,YAAU,KAAK;AA2CrB,MAAMyG,aAAW;AAAA,IAChC,aAAc;AAAA,IACd,cAAe;AAAA;AAiBjB,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAA+B,gBAAK+B,YAAA,MAAA;AA6BlC,eAAAA,WAAY,KAAmB,OAAc,OAAc,QAAkB;AAA7E,YAiDC,QAAA;AA/CK,YAAwB,EAAE,iBAAgBA,aAAY;AACxD,iBAAO,IAAIA,WAAU,KAAK,OAAO,OAAO,MAAM;AAAA,QAAA;AAG1C,cAAA,QAAQ,KAAK/B,UAAQ;AAC3B,gBAAA,kBAAM,KAAK,OAAO,KAAK,KAAE;AACzB,gBAAQ,MAAK;AACb,gBAAQ,MAAK;AAEb,cAAK,SAAS+B,WAAU;AAExB,cAAK,iBAAiB,KAAK,MAAM,SAAS,MAAM,cAAc,MAAM,IAAI,IAAI,gBAAgB,KAAK,KAAA,CAAM;AACvG,cAAK,iBAAiB,KAAK,MAAM,SAAS,MAAM,cAAc,MAAM,IAAI,IAAI,gBAAgB,KAAK,KAAA,CAAM;AACvG,cAAK,mBAAmB,OAAO,SAAS,IAAI,cAAc,IAAI,IAAI,iBAAiB,MAAM,SAAA,IAAa,MAAM;AAE5G,cAAK,gBAAgB,IAAI;AACzB,cAAK,iBAAiB,IAAI;AAErB,cAAA,YAAY,IAAI;AAErB,cAAK,SAAS;AACd,cAAK,UAAU;AAGV,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA,SAAS,IAAI;;;AAkBpB,iBAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,kBAAkB,KAAK;AAAA,UAEvB,aAAa,KAAK;AAAA,UAClB,cAAc,KAAK;AAAA,UAEnB,cAAc,KAAK;AAAA,UACnB,cAAc,KAAK;AAAA,UACnB,gBAAgB,KAAK;AAAA;MAEzB;AAGOA,iBAAA,eAAP,SAAoB,MAAW,OAAY,SAAY;AACjD,eAAA,SAAA,CAAA,GAAO,IAAI;AACf,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AAC5C,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AACtC,YAAA,QAAQ,IAAIA,WAAU,IAAI;AACzB,eAAA;AAAA,MACT;AAGM,iBAAA,UAAA,SAAN,SAAO,KAA0B;AAC/B,YAAI,IAAI,SAAS;AACf,eAAK,eAAe,QAAQ,KAAK,QAAQ,cAAc,IAAI,OAAO,CAAC;AAAA,QAAA,WAC1D,IAAI,cAAc;AACtB,eAAA,eAAe,QAAQ,IAAI,YAAY;AAAA,QAAA;AAE9C,YAAI,IAAI,SAAS;AACf,eAAK,eAAe,QAAQ,KAAK,QAAQ,cAAc,IAAI,OAAO,CAAC;AAAA,QAAA,WAC1D,IAAI,cAAc;AACtB,eAAA,eAAe,QAAQ,IAAI,YAAY;AAAA,QAAA;AAE9C,YAAI,OAAO,SAAS,IAAI,WAAW,GAAG;AACpC,eAAK,gBAAgB,IAAI;AAAA,QAAA;AAE3B,YAAI,OAAO,SAAS,IAAI,YAAY,GAAG;AACrC,eAAK,iBAAiB,IAAI;AAAA,QAAA;AAAA,MAE9B;AAKA,iBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,iBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,iBAAA,UAAA,oBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKY,iBAAA,UAAA,eAAZ,SAAa,IAAU;AACrB,aAAK,gBAAgB;AAAA,MACvB;AAKA,iBAAA,UAAA,eAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKe,iBAAA,UAAA,kBAAf,SAAgB,OAAa;AAC3B,aAAK,iBAAiB;AAAA,MACxB;AAKA,iBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,iBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKA,iBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKgB,iBAAA,UAAA,mBAAhB,SAAiB,QAAc;AACtB,eAAA,KAAK,IAAI,KAAK,UAAU,GAAG,KAAK,UAAU,CAAC,EAAE,IAAI,MAAM;AAAA,MAChE;AAKiB,iBAAA,UAAA,oBAAjB,SAAkB,QAAc;AACvB,eAAA,SAAS,KAAK,UAAU;AAAA,MACjC;AAEuB,iBAAA,UAAA,0BAAvB,SAAwB,MAAc;AAC/B,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,UAAU,KAAK,QAAQ;AACvB,aAAA,UAAU,KAAK,QAAQ;AAEtB,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAd,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAEhB,aAAA,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACzE,aAAA,OAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AAW9E,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAEV,YAAA,IAAI,IAAI;AACd,UAAE,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IACtE;AACN,UAAE,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI;AACrE,UAAA,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI;AACzC,UAAA,GAAG,IAAI,EAAE,GAAG;AACd,UAAE,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IACtE;AACJ,UAAA,GAAG,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI;AACxC,UAAA,GAAG,IAAI,EAAE,GAAG;AACZ,UAAA,GAAG,IAAI,EAAE,GAAG;AACZ,UAAA,GAAG,IAAI,KAAK;AAEV,YAAA,KAAK,gBAAgB,GAAK;AAC1B,YAAA,aAAa,KAAK,MAAM;AAE1B,cAAI,OAAO,KAAK;AAChB,cAAM,IAAI,OAAO,IAAM,IAAM,OAAO;AAE9B,cAAA,IAAI,KAAK,KAAK,KAAK;AAGnB,cAAA,QAAQ,IAAM3H,YAAU,KAAK;AAGnC,cAAMlB,KAAI,IAAM,IAAI,KAAK,iBAAiB;AAGpC,cAAA,IAAI,IAAI,QAAQ;AAGtB,cAAM,IAAI,KAAK;AACV,eAAA,UAAU,KAAKA,KAAI,IAAI;AAC5B,eAAK,UAAU,KAAK,WAAW,IAAM,IAAM,KAAK,UAAU;AAC1D,eAAK,SAAS,IAAI,IAAI,IAAI,KAAK;AAE/B,kBAAQ,KAAK;AACb,eAAK,OAAO,GAAG,IAAI,QAAQ,IAAM,IAAM,OAAO;AAAA,QACrC,WAAA,EAAE,GAAG,KAAK,GAAK;AACtB,YAAA,aAAa,KAAK,MAAM;AAC1B,eAAK,UAAU;AACf,eAAK,SAAS;AAAA,QAAA,OACT;AACH,YAAA,gBAAgB,KAAK,MAAM;AAC7B,eAAK,UAAU;AACf,eAAK,SAAS;AAAA,QAAA;AAGhB,YAAI,KAAK,cAAc;AAEhB,eAAA,UAAU,IAAI,KAAK,OAAO;AAEzB,cAAAuH,KAAI,KAAK,IAAI,KAAK,UAAU,GAAG,KAAK,UAAU,CAAC;AAElD,UAAAqB,IAAA,OAAO,IAAIrB,EAAC;AACT,gBAAA,MAAM,KAAK,cAAc,KAAK,MAAMA,EAAC,IAAI,KAAK,UAAU;AAE3D,UAAAsB,IAAA,OAAO,IAAItB,EAAC;AACT,gBAAA,MAAM,KAAK,cAAc,KAAK,MAAMA,EAAC,IAAI,KAAK,UAAU;AAAA,QAAA,OAEzD;AACL,eAAK,UAAU;;AAGZ,aAAA,QAAQ,WAAW,IAAIqB;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAEwB,iBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAAD,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAEjC,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAEZ,YAAA,KAAK,gBAAgB,GAAK;AAC5B,cAAM,QAAQ,KAAK;AAEnB,cAAM,WAAW,CAAC,KAAK,OAAO,GAAG,KAAK,QAAQ,KAAK,SAAS,KAAK,UAAU,KAAK,UAAU;AAC1F,eAAK,UAAU,KAAK;AAEpB,gBAAM,KAAK;AACX,gBAAM,KAAK;AAEL,cAAA,QAAQ,KAAK;AACb,gBAAA,WAAW,GAAGA,KAAI,GAAG,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC;AACrD,gBAAA,WAAW,GAAGD,KAAI,GAAG,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC;AAErD,cAAA,WAAW,KAAK,IAAI,MAAM,QAAQ,KAAK,QAAQ,KAAK,CAAC;AACtD,eAAA,UAAU,KAAK,SAAS;AACxB,eAAA,UAAU,KAAK,SAAS;AAEvB,cAAArB,KAAI,KAAK,MAAM,QAAQ;AAE1B,UAAAqB,IAAA,OAAO,IAAIrB,EAAC;AACf,gBAAM,KAAK,KAAK,cAAc,KAAK,MAAMA,EAAC;AAEvC,UAAAsB,IAAA,OAAO,IAAItB,EAAC;AACf,gBAAM,KAAK,KAAK,cAAc,KAAK,MAAMA,EAAC;AAAA,QAAA,OACrC;AACC,cAAA,QAAQ,KAAK;AACb,gBAAA,WAAW,GAAGsB,KAAI,GAAG,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC;AACrD,gBAAA,WAAW,GAAGD,KAAI,GAAG,KAAK,aAAa,IAAI,KAAK,IAAI,CAAC;AAC3D,cAAM,QAAQ,KAAK;AACnB,cAAM,OAAO,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK;AAEvC,cAAA,UAAU,KAAK,IAAI,MAAM,QAAQ,KAAK,QAAQ,IAAI,CAAC;AACpD,eAAA,UAAU,IAAI,OAAO;AAE1B,cAAMrB,KAAI,KAAK,IAAI,QAAQ,GAAG,QAAQ,CAAC;AAEpC,UAAAqB,IAAA,OAAO,IAAIrB,EAAC;AACf,gBAAM,MAAM,KAAK,cAAc,KAAK,MAAMA,EAAC,IAAI,QAAQ;AAEpD,UAAAsB,IAAA,OAAO,IAAItB,EAAC;AACf,gBAAM,MAAM,KAAK,cAAc,KAAK,MAAMA,EAAC,IAAI,QAAQ;AAAA,QAAA;AAGpD,aAAA,QAAQ,WAAW,IAAIqB;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAKwB,iBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAArC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAErB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAEV,YAAAlC,MAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACvE,YAAAC,MAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AAEzE,YAAA;AACA,YAAA;AAEE,YAAA,IAAI,IAAI;AACd,UAAE,GAAG,IAAI,KAAK,KAAKD,IAAG,IAAIA,IAAG,IAAI,KAAKC,IAAG,IAAIA,IAAG,IAAI;AAClD,UAAA,GAAG,IAAI,CAACD,IAAG,IAAIA,IAAG,IAAI,KAAKC,IAAG,IAAIA,IAAG,IAAI;AAC3C,UAAE,GAAG,IAAI,CAACD,IAAG,IAAI,KAAKC,IAAG,IAAI;AAC3B,UAAA,GAAG,IAAI,EAAE,GAAG;AACd,UAAE,GAAG,IAAI,KAAK,KAAKD,IAAG,IAAIA,IAAG,IAAI,KAAKC,IAAG,IAAIA,IAAG,IAAI;AACpD,UAAE,GAAG,IAAID,IAAG,IAAI,KAAKC,IAAG,IAAI;AAC1B,UAAA,GAAG,IAAI,EAAE,GAAG;AACZ,UAAA,GAAG,IAAI,EAAE,GAAG;AACZ,UAAA,GAAG,IAAI,KAAK;AAEV,YAAA,KAAK,gBAAgB,GAAK;AACtB,cAAA,KAAK,KAAK;AAChB,aAAG,WAAW,GAAGiC,KAAI,GAAGjC,GAAE;AAC1B,aAAG,WAAW,GAAGgC,KAAI,GAAGjC,GAAE;AAE1B,0BAAgB,GAAG;AACJ,yBAAA;AAEf,cAAMgD,KAAI,KAAK,IAAI,EAAE,QAAQ,EAAE,CAAC;AAE7B,UAAAf,IAAA,OAAO,IAAIe,EAAC;AACf,gBAAM,KAAK,KAAK,cAAchD,KAAIgD,EAAC;AAEhC,UAAAd,IAAA,OAAO,IAAIc,EAAC;AACf,gBAAM,KAAK,KAAK,cAAc/C,KAAI+C,EAAC;AAAA,QAAA,OAC9B;AACC,cAAA,KAAK,KAAK;AAChB,aAAG,WAAW,GAAGd,KAAI,GAAGjC,GAAE;AAC1B,aAAG,WAAW,GAAGgC,KAAI,GAAGjC,GAAE;AAEpB,cAAA,KAAK,KAAK,KAAK,KAAK;AAE1B,0BAAgB,GAAG;AACnB,yBAAe/D,WAAS,EAAE;AAE1B,cAAM,IAAI,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,EAAE;AAE7B,cAAA,UAAU,IAAI;AACd,cAAA,EAAE,GAAG,IAAI,GAAK;AAChB,sBAAU,KAAK,IAAI,EAAE,QAAQ,CAAC,CAAC;AAAA,UAAA,OAC1B;AACL,gBAAM,WAAW,KAAK,IAAI,EAAE,QAAQ,EAAE,CAAC;AACvC,oBAAQ,IAAI,SAAS,GAAG,SAAS,GAAG,CAAG;AAAA,UAAA;AAGzC,cAAM+G,KAAI,KAAK,IAAI,QAAQ,GAAG,QAAQ,CAAC;AAEpC,UAAAf,IAAA,OAAO,IAAIe,EAAC;AACf,gBAAM,MAAM,KAAK,cAAchD,KAAIgD,EAAC,IAAI,QAAQ;AAE7C,UAAAd,IAAA,OAAO,IAAIc,EAAC;AACf,gBAAM,MAAM,KAAK,cAAc/C,KAAI+C,EAAC,IAAI,QAAQ;AAAA,QAAA;AAG7C,aAAA,QAAQ,WAAW,IAAIf;AACvB,aAAA,QAAQ,WAAW,IAAI;AACvB,aAAA,QAAQ,WAAW,IAAIC;AACvB,aAAA,QAAQ,WAAW,IAAI;AAE5B,eAAO,iBAAiBtF,iBAAS,cAAc,gBAAgBA,iBAAS;AAAA,MAC1E;AApcOuI,iBAAI,OAAG;AAscfA,aAAAA;AAAAA,IAAAA,EAvc8B,KAAK;AAAA;AChEnB,MAAM,WAAW,KAAK;AACtB,MAAM,UAAU,KAAK;AA+DrB,MAAM,WAAW;AAAA,IAChC,aAAc;AAAA,IACd,gBAAiB;AAAA,IACjB,YAAa;AAAA,IACb,aAAc;AAAA,IACd,cAAe;AAAA;AAmBjB,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAAgC,gBAAKC,aAAA,MAAA;AA2CnC,eAAYA,YAAA,KAAoB,OAAc,OAAc,QAAoB,MAAgB;AAAhG,YAmEC,QAAA;AAjEK,YAAwB,EAAE,iBAAgBA,cAAa;AACzD,iBAAO,IAAIA,YAAW,KAAK,OAAO,OAAO,QAAQ,IAAI;AAAA,QAAA;AAGjD,cAAA,QAAQ,KAAK,QAAQ;AAC3B,gBAAA,kBAAM,KAAK,OAAO,KAAK,KAAE;AACzB,gBAAQ,MAAK;AACb,gBAAQ,MAAK;AAER,cAAA,OAAO,KAAK;AACZ,cAAA,OAAO,KAAK;AAEjB,cAAK,SAASA,YAAW;AAEzB,cAAK,iBAAiB,KAAK,MAAM,SAAS,MAAM,cAAc,MAAM,IAAI,IAAI,gBAAgB,KAAK,KAAA,CAAM;AACvG,cAAK,iBAAiB,KAAK,MAAM,SAAS,MAAM,cAAc,MAAM,IAAI,IAAI,gBAAgB,KAAK,KAAA,CAAM;AAEnG,YAAA,KAAK,QAAQ,IAAI,GAAG;AACjB,gBAAA,gBAAgB,MAAM,eAAe,IAAI;AAAA,QACrC,WAAA,KAAK,QAAQ,IAAI,UAAU,GAAG;AACvC,gBAAK,gBAAgB,KAAK,MAAM,IAAI,UAAU;AAAA,QACrC,WAAA,KAAK,QAAQ,IAAI,SAAS,GAAG;AAEtC,gBAAK,gBAAgB,KAAK,MAAM,IAAI,SAAS;AAAA,QAAA,OACxC;AACL,gBAAK,gBAAgB,KAAK,IAAI,GAAK,CAAG;AAAA,QAAA;AAGxC,cAAK,gBAAgB,KAAK,aAAa,GAAK,MAAK,aAAa;AAE9D,cAAK,SAAS;AACd,cAAK,YAAY;AACjB,cAAK,cAAc;AACnB,cAAK,iBAAiB;AACtB,cAAK,eAAe;AACpB,cAAK,kBAAkB;AAEvB,cAAK,mBAAmB,IAAI;AAC5B,cAAK,eAAe,IAAI;AACxB,cAAK,gBAAgB,IAAI;AAEzB,cAAK,gBAAgB,IAAI;AACzB,cAAK,iBAAiB,IAAI;AAE1B,cAAK,SAAS;AACd,cAAK,UAAU;;;AAuBjB,kBAAA,UAAA,aAAA,WAAA;AACS,eAAA;AAAA,UACL,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,kBAAkB,KAAK;AAAA,UAEvB,aAAa,KAAK;AAAA,UAClB,gBAAgB,KAAK;AAAA,UACrB,YAAY,KAAK;AAAA,UACjB,aAAa,KAAK;AAAA,UAClB,cAAc,KAAK;AAAA,UAEnB,cAAc,KAAK;AAAA,UACnB,cAAc,KAAK;AAAA,UACnB,YAAY,KAAK;AAAA;MAErB;AAGOA,kBAAA,eAAP,SAAoB,MAAW,OAAY,SAAY;AACjD,eAAA,SAAA,CAAA,GAAO,IAAI;AACf,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AAC5C,aAAK,QAAQ,QAAQ,MAAM,KAAK,OAAO,KAAK;AACtC,YAAA,QAAQ,IAAIA,YAAW,IAAI;AAC1B,eAAA;AAAA,MACT;AAGM,kBAAA,UAAA,SAAN,SAAO,KAA2B;AAChC,YAAI,IAAI,SAAS;AACf,eAAK,eAAe,QAAQ,KAAK,QAAQ,cAAc,IAAI,OAAO,CAAC;AAAA,QAAA,WAC1D,IAAI,cAAc;AACtB,eAAA,eAAe,QAAQ,IAAI,YAAY;AAAA,QAAA;AAE9C,YAAI,IAAI,SAAS;AACf,eAAK,eAAe,QAAQ,KAAK,QAAQ,cAAc,IAAI,OAAO,CAAC;AAAA,QAAA,WAC1D,IAAI,cAAc;AACtB,eAAA,eAAe,QAAQ,IAAI,YAAY;AAAA,QAAA;AAE9C,YAAI,IAAI,YAAY;AACb,eAAA,cAAc,QAAQ,IAAI,UAAU;AACzC,eAAK,cAAc,QAAQ,KAAK,aAAa,GAAK,IAAI,UAAU,CAAC;AAAA,QAAA;AAE/D,YAAA,IAAI,gBAAgB,QAAW;AACjC,eAAK,gBAAgB,IAAI;AAAA,QAAA;AAE3B,YAAI,OAAO,SAAS,IAAI,cAAc,GAAG;AACvC,eAAK,mBAAmB,IAAI;AAAA,QAAA;AAE9B,YAAI,OAAO,SAAS,IAAI,UAAU,GAAG;AACnC,eAAK,eAAe,IAAI;AAAA,QAAA;AAE1B,YAAI,OAAO,SAAS,IAAI,WAAW,GAAG;AACpC,eAAK,gBAAgB,IAAI;AAAA,QAAA;AAE3B,YAAI,OAAO,SAAS,IAAI,YAAY,GAAG;AACrC,eAAK,iBAAiB,IAAI;AAAA,QAAA;AAAA,MAE9B;AAKA,kBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,kBAAA,UAAA,kBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,kBAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,kBAAA,UAAA,sBAAA,WAAA;AACE,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAEhB,YAAMzE,MAAK,GAAG,cAAc,KAAK,cAAc;AAC/C,YAAMC,MAAK,GAAG,cAAc,KAAK,cAAc;AAC/C,YAAMnF,KAAI,KAAK,IAAImF,KAAID,GAAE;AACzB,YAAM,OAAO,GAAG,eAAe,KAAK,aAAa;AAEjD,YAAMiE,eAAc,KAAK,IAAInJ,IAAG,IAAI;AAC7B,eAAAmJ;AAAA,MACT;AAKA,kBAAA,UAAA,gBAAA,WAAA;AACQ,YAAA,KAAK,KAAK,QAAQ;AAClB,YAAA,KAAK,KAAK,QAAQ;AACxB,eAAO,KAAK;AAAA,MACd;AAKA,kBAAA,UAAA,iBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKW,kBAAA,UAAA,cAAX,SAAY,MAAa;AACvB,YAAI,QAAQ,KAAK;AAAe;AAC3B,aAAA,QAAQ,SAAS,IAAI;AACrB,aAAA,QAAQ,SAAS,IAAI;AAC1B,aAAK,gBAAgB;AAAA,MACvB;AAKa,kBAAA,UAAA,gBAAb,SAAc,OAAa;AACzB,YAAI,SAAS,KAAK;AAAc;AAC3B,aAAA,QAAQ,SAAS,IAAI;AACrB,aAAA,QAAQ,SAAS,IAAI;AAC1B,aAAK,eAAe;AAAA,MACtB;AAKA,kBAAA,UAAA,gBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKiB,kBAAA,UAAA,oBAAjB,SAAkB,QAAc;AAC9B,YAAI,UAAU,KAAK;AAAkB;AAChC,aAAA,QAAQ,SAAS,IAAI;AACrB,aAAA,QAAQ,SAAS,IAAI;AAC1B,aAAK,mBAAmB;AAAA,MAC1B;AAEA,kBAAA,UAAA,oBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKc,kBAAA,UAAA,iBAAd,SAAe,QAAc;AAC3B,eAAO,SAAS,KAAK;AAAA,MACvB;AAMoB,kBAAA,UAAA,uBAApB,SAAqB,IAAU;AAC7B,aAAK,gBAAgB;AAAA,MACvB;AAEA,kBAAA,UAAA,uBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKqB,kBAAA,UAAA,wBAArB,SAAsB,OAAa;AACjC,aAAK,iBAAiB;AAAA,MACxB;AAEA,kBAAA,UAAA,wBAAA,WAAA;AACE,eAAO,KAAK;AAAA,MACd;AAKA,kBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKA,kBAAA,UAAA,aAAA,WAAA;AACE,eAAO,KAAK,QAAQ,cAAc,KAAK,cAAc;AAAA,MACvD;AAKgB,kBAAA,UAAA,mBAAhB,SAAiB,QAAc;AAC7B,eAAO,KAAK,QAAQ,KAAK,WAAW,KAAK,MAAM,KAAK,iBAAiB,KAAK,IAAI,EAAE,IAAI,MAAM;AAAA,MAC5F;AAKiB,kBAAA,UAAA,oBAAjB,SAAkB,QAAc;AAC9B,eAAO,SAAS,KAAK;AAAA,MACvB;AAEuB,kBAAA,UAAA,0BAAvB,SAAwB,MAAc;AAC/B,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,iBAAiB,KAAK,QAAQ,QAAQ;AACtC,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,aAAa,KAAK,QAAQ;AAC1B,aAAA,UAAU,KAAK,QAAQ;AACvB,aAAA,UAAU,KAAK,QAAQ;AAE5B,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAEV,YAAA3C,MAAK,KAAK,QAAQ,WAAW;AAC7B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAoC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAAnC,MAAK,KAAK,QAAQ,WAAW;AAC7B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC7B,YAAAoC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAGf,YAAAtE,MAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACvE,YAAAC,MAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACvE,YAAAxE,KAAI,KAAK;AACf,QAAAA,GAAE,WAAW,GAAGyG,KAAI,GAAGjC,GAAE;AACzB,QAAAxE,GAAE,WAAW,GAAGwG,KAAI,GAAGjC,GAAE;AAGzB;AACE,eAAK,OAAO,IAAI,QAAQ,IAAI,KAAK,aAAa;AACzC,eAAA,QAAQ,KAAK,cAAc,KAAK,IAAIvE,IAAGuE,GAAE,GAAG,KAAK,IAAI;AAC1D,eAAK,QAAQ,KAAK,cAAcC,KAAI,KAAK,IAAI;AAExC,eAAA,SAAS,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,QAC3D,KAAK;AAEP,cAAA,KAAK,SAAS,GAAK;AAChB,iBAAA,SAAS,IAAM,KAAK;AAAA,UAAA;AAAA,QAC3B;AAIF,aAAK,eAAe;AACpB,aAAK,SAAS;AACd,aAAK,UAAU;AACX,YAAA,KAAK,gBAAgB,GAAK;AAC5B,eAAK,OAAO,IAAI,QAAQ,IAAI,KAAK,aAAa;AACzC,eAAA,QAAQ,KAAK,cAAc,KAAK,IAAIxE,IAAGuE,GAAE,GAAG,KAAK,IAAI;AAC1D,eAAK,QAAQ,KAAK,cAAcC,KAAI,KAAK,IAAI;AAEvC,cAAA,UAAU,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,QAC7D,KAAK;AAEX,cAAI,UAAU,GAAK;AACjB,iBAAK,eAAe,IAAM;AAE1B,gBAAM,IAAI,KAAK,IAAIxE,IAAG,KAAK,IAAI;AAGzB,gBAAA,QAAQ,IAAM,UAAU,KAAK;AAGnC,gBAAM,OAAO,IAAM,KAAK,eAAe,KAAK,iBAAiB;AAGvD,gBAAA,IAAI,KAAK,eAAe,QAAQ;AAGtC,gBAAM,IAAI,KAAK;AACV,iBAAA,UAAU,KAAK,OAAO,IAAI;AAC3B,gBAAA,KAAK,UAAU,GAAK;AACjB,mBAAA,UAAU,IAAM,KAAK;AAAA,YAAA;AAG5B,iBAAK,SAAS,IAAI,IAAI,IAAI,KAAK;AAE1B,iBAAA,eAAe,UAAU,KAAK;AAC/B,gBAAA,KAAK,eAAe,GAAK;AACtB,mBAAA,eAAe,IAAM,KAAK;AAAA,YAAA;AAAA,UACjC;AAAA,QACF,OACK;AACL,eAAK,kBAAkB;AAAA,QAAA;AAIzB,YAAI,KAAK,eAAe;AACtB,eAAK,cAAc,KAAK;AACpB,cAAA,KAAK,cAAc,GAAK;AACrB,iBAAA,cAAc,IAAM,KAAK;AAAA,UAAA;AAAA,QAChC,OACK;AACL,eAAK,cAAc;AACnB,eAAK,iBAAiB;AAAA,QAAA;AAGxB,YAAI,KAAK,cAAc;AAErB,eAAK,aAAa,KAAK;AACvB,eAAK,mBAAmB,KAAK;AAC7B,eAAK,kBAAkB,KAAK;AAEtB,cAAAuH,KAAI,KAAK,QAAQ,KAAK,WAAW,KAAK,MAAM,KAAK,iBAAiB,KAAK,IAAI;AAC3E,cAAA,KAAK,KAAK,YAAY,KAAK,QAAQ,KAAK,kBAAkB,KAAK,QAAQ,KAAK;AAC5E,cAAA,KAAK,KAAK,YAAY,KAAK,QAAQ,KAAK,kBAAkB,KAAK,QAAQ,KAAK;AAE/E,UAAAqB,IAAA,OAAO,KAAK,YAAYrB,EAAC;AAC5B,gBAAM,KAAK,UAAU;AAElB,UAAAsB,IAAA,OAAO,KAAK,YAAYtB,EAAC;AAC5B,gBAAM,KAAK,UAAU;AAAA,QAAA,OAEhB;AACL,eAAK,YAAY;AACjB,eAAK,kBAAkB;AACvB,eAAK,iBAAiB;AAAA,QAAA;AAGxB,aAAK,QAAQ,WAAW,EAAE,QAAQqB,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQC,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAEwB,kBAAA,UAAA,2BAAxB,SAAyB,MAAc;AACrC,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAEV,YAAAD,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAGjC;AACE,cAAM,OAAO,KAAK,IAAI,KAAK,MAAMA,GAAE,IAAI,KAAK,IAAI,KAAK,MAAMD,GAAE,IAAI,KAAK,QAAQ,KAAK,KAAK,QAAQ;AAC1F,cAAA,UAAU,CAAC,KAAK,gBAAgB,OAAO,KAAK,SAAS,KAAK,UAAU,KAAK;AAC/E,eAAK,mBAAmB;AAExB,cAAMrB,KAAI,KAAK,WAAW,SAAS,KAAK,IAAI;AACtC,cAAA,KAAK,UAAU,KAAK;AACpB,cAAA,KAAK,UAAU,KAAK;AAEvB,UAAAqB,IAAA,OAAO,IAAIrB,EAAC;AACf,gBAAM,KAAK;AAER,UAAAsB,IAAA,OAAO,IAAItB,EAAC;AACf,gBAAM,KAAK;AAAA,QAAA;AAIb;AACQ,cAAA,OAAO,KAAK,KAAK,KAAK;AACxB,cAAA,UAAU,CAAC,KAAK,cAAc;AAElC,cAAM,aAAa,KAAK;AAClB,cAAA,aAAa,KAAK,KAAK,KAAK;AAClC,eAAK,iBAAiB,MAAM,KAAK,iBAAiB,SAAS,CAAC,YAAY,UAAU;AAClF,oBAAU,KAAK,iBAAiB;AAEhC,gBAAM,KAAK;AACX,gBAAM,KAAK;AAAA,QAAA;AAIb;AACE,cAAM,OAAO,KAAK,IAAI,KAAK,MAAMsB,GAAE,IAAI,KAAK,IAAI,KAAK,MAAMD,GAAE,IAAI,KAAK,QAAQ,KAAK,KAAK,QAAQ;AAC1F,cAAA,UAAU,CAAC,KAAK,SAAS;AAC/B,eAAK,aAAa;AAElB,cAAMrB,KAAI,KAAK,WAAW,SAAS,KAAK,IAAI;AACtC,cAAA,KAAK,UAAU,KAAK;AACpB,cAAA,KAAK,UAAU,KAAK;AAEvB,UAAAqB,IAAA,OAAO,IAAIrB,EAAC;AACf,gBAAM,KAAK;AAER,UAAAsB,IAAA,OAAO,IAAItB,EAAC;AACf,gBAAM,KAAK;AAAA,QAAA;AAGb,aAAK,QAAQ,WAAW,EAAE,QAAQqB,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQC,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAAA,MAC9B;AAKwB,kBAAA,UAAA,2BAAxB,SAAyB,MAAc;AAC/B,YAAArC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAC3B,YAAAC,MAAK,KAAK,QAAQ,WAAW;AAC/B,YAAA,KAAK,KAAK,QAAQ,WAAW;AAE3B,YAAA,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,IAAI,IAAI,EAAE;AAEf,YAAAlC,MAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACvE,YAAAC,MAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAK,cAAc,CAAC;AACvE,YAAAxE,KAAI,KAAK;AACf,QAAAA,GAAE,WAAW,GAAGyG,KAAI,GAAGjC,GAAE;AACzB,QAAAxE,GAAE,WAAW,GAAGwG,KAAI,GAAGjC,GAAE;AAEzB,YAAM,KAAK,IAAI,QAAQ,IAAI,KAAK,aAAa;AAEvC,YAAA,MAAM,KAAK,cAAc,KAAK,IAAIvE,IAAGuE,GAAE,GAAG,EAAE;AAClD,YAAM,MAAM,KAAK,cAAcC,KAAI,EAAE;AAErC,YAAM,IAAI,KAAK,IAAIxE,IAAG,EAAE;AAExB,YAAM,IAAI,KAAK,aAAa,KAAK,aAAa,KAAK,UAAU,KAAK,QAAQ,KAAK,QAAQ,KAAK,UAAU,KAAK,QAAQ,KAAK;AAExH,YAAM,UAAU,KAAK,IAAM,CAAC,IAAI,IAAI;AAEpC,YAAMuH,KAAI,KAAK,WAAW,SAAS,EAAE;AACrC,YAAM,KAAK,UAAU;AACrB,YAAM,KAAK,UAAU;AAElB,QAAAf,IAAA,OAAO,KAAK,YAAYe,EAAC;AAC5B,cAAM,KAAK,UAAU;AAClB,QAAAd,IAAA,OAAO,KAAK,YAAYc,EAAC;AAC5B,cAAM,KAAK,UAAU;AAErB,aAAK,QAAQ,WAAW,EAAE,QAAQf,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAC5B,aAAK,QAAQ,WAAW,EAAE,QAAQC,GAAE;AAC/B,aAAA,QAAQ,WAAW,IAAI;AAErB,eAAA,SAAS,CAAC,KAAKtF,iBAAS;AAAA,MACjC;AApjBOwI,kBAAI,OAAG;AAsjBfA,aAAAA;AAAAA,IAAAA,EAvjB+B,KAAK;AAAA;;ACnGrC,MAAI,MAAM;AAGV,MAAM,sBAAsB;AAAA,IAC1B,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA;AAIX,MAAM,0BAA0B;AAAA,IAC9B,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA;AAIX,MAAM,6BAAyB,KAAA,CAAA,GAC7B,GAAC,KAAK,MAAM,IAAG,MACf,GAAC,KAAK,OAAO,IAAG,MAChB,GAAC,KAAK,SAAS,IAAG,MAClB,GAAC,WAAW,IAAI,IAAG;AAAA,EAEnB,GAAC,aAAa,IAAI,IAAG,cACrB,GAAC,UAAU,IAAI,IAAG,WAClB,GAAC,YAAY,IAAI,IAAG,aACpB,GAAC,cAAc,IAAI,IAAG,eACtB,GAAC,cAAc,IAAI,IAAG,eACtB,GAAC,UAAU,IAAI,IAAG,WAClB,GAAC,WAAW,IAAI,IAAG,YACnB,GAAC,WAAW,IAAI,IAAG,YACnB,GAAC,eAAe,IAAI,IAAG,gBACvB,GAAC,YAAY,IAAI,IAAG,aACpB,GAAC,cAAc,IAAI,IAAG,eACtB,GAAC,UAAU,IAAI,IAAG,WAClB,GAAC,UAAU,IAAI,IAAG,WAClB,GAAC,WAAW,IAAI,IAAG;AAuBrB,MAAM,kBAAqC;AAAA,IACzC,WAAW;AAAA,IACX,cAAc,SAAS,KAAG;AAAW,aAAA;AAAA,IAAK;AAAA,IAC1C,eAAe,SAAS,MAAM;AAAc,aAAA;AAAA,IAAM;AAAA,IAClD,gBAAgB,SAAS,MAAc;AAAW,aAAA;AAAA,IAAM;AAAA,IACxD,iBAAiB,SAAS,KAAK;AAAe,aAAA;AAAA,IAAA;AAAA;AAMhD,MAAA;AAAA;AAAA,IAAA,2BAAA;AAEE,eAAAC,YAAYC,UAA0B;AAAtC,YAKC,QAAA;AAEK,aAAA,SAAG,SAAC,MAAO;AACT,cAAA,eAAe,MAAK,QAAQ;AAC5B,cAAA,gBAAgB,MAAK,QAAQ;AACnC,cAAM,OAAO,CAAA;AAGP,cAAA,WAAW,CAAC,IAAI;AAEtB,cAAM,cAAuC,CAAA;AAEpC,mBAAA,cAAc,OAAY,UAAgB;AAC3C,kBAAA,QAAQ,MAAM,SAAS,EAAE;AAC/B,gBAAI,CAAC,YAAY,MAAM,KAAK,GAAG;AAC7B,uBAAS,KAAK,KAAK;AACb,kBAAA,QAAQ,KAAK,SAAS,SAAS;AACrC,kBAAM,MAAM;AAAA,gBACV,UAAU;AAAA,gBACV,SAAS;AAAA;AAEC,0BAAA,MAAM,KAAK,IAAI;AAAA,YAAA;AAEtB,mBAAA,YAAY,MAAM,KAAK;AAAA,UAAA;AAGhC,mBAAS,mBAAmBC,MAAe;AACzCA,mBAAM,aAAaA,IAAG;AAClB,gBAAA,OAAOA,KAAI;AACR,mBAAA,cAAc,MAAMA,IAAG;AACvB,mBAAA;AAAA,UAAA;AAMA,mBAAA,SAAS,OAAY,WAAiB;AAAjB,gBAAA,cAAA,QAAA;AAAiB,0BAAA;AAAA,YAAA;AAC7C,gBAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AACxC,qBAAA;AAAA,YAAA;AAGL,gBAAA,OAAO,MAAM,eAAe,YAAY;AAC1C,kBAAI,CAAC,WAAW;AACd,yBAAW,YAAY,qBAAqB;AACtC,sBAAA,iBAAiB,oBAAoB,QAAQ,GAAG;AAC3C,2BAAA,cAAc,OAAO,QAAQ;AAAA,kBAAA;AAAA,gBACtC;AAAA,cACF;AAGF,sBAAQ,mBAAmB,KAAK;AAAA,YAAA;AAG9B,gBAAA,MAAM,QAAQ,KAAK,GAAG;AACxB,kBAAM,WAAW,CAAA;AACjB,uBAAS,MAAM,GAAG,MAAM,MAAM,QAAQ,OAAO;AAC3C,yBAAS,GAAG,IAAI,SAAS,MAAM,GAAG,CAAC;AAAA,cAAA;AAE7B,sBAAA;AAAA,YAAA,OAEH;AACL,kBAAM,WAAW,CAAA;AACjB,uBAAW,OAAO,OAAO;AACnB,oBAAA,MAAM,eAAe,GAAG,GAAG;AAC7B,2BAAS,GAAG,IAAI,SAAS,MAAM,GAAG,CAAC;AAAA,gBAAA;AAAA,cACrC;AAEM,sBAAA;AAAA,YAAA;AAEH,mBAAA;AAAA,UAAA;AAGT,iBAAO,SAAS,QAAQ;AAChB,gBAAA,MAAM,SAAS;AACf,gBAAA,MAAM,SAAS,KAAK,IAAI;AAC9B,iBAAK,KAAK,GAAG;AAAA,UAAA;AAGR,iBAAA;AAAA,QACT;AAEQ,aAAA,WAAG,SAAC,MAAoB;AACxB,cAAA,iBAAiB,MAAK,QAAQ;AAC9B,cAAA,kBAAkB,MAAK,QAAQ;AAC/B,cAAA,YAAY,MAAK,QAAQ;AAE/B,cAAM,6BAAkD,CAAA;AAE/C,mBAAA,qBAAqB,WAAsB,MAAgB,SAAY;AAC9E,gBAAI,CAAC,aAAa,CAAC,UAAU,cAAc;AAC7B,0BAAA,0BAA0B,KAAK,IAAI;AAAA,YAAA;AAE3C,gBAAA,eAAe,aAAa,UAAU;AAC5C,gBAAI,CAAC,cAAc;AACjB;AAAA,YAAA;AAEF,mBAAO,eAAe,IAAI;AAC1B,gBAAM,qBAAqB,UAAU;AACrC,gBAAI,MAAM,mBAAmB,MAAM,SAAS,gBAAgB;AACtD,kBAAA,gBAAgB,KAAK,IAAI;AACxB,mBAAA;AAAA,UAAA;AAUA,mBAAA,iBAAiB,WAAsB,WAA+B,SAAY;AACnF,gBAAA,cAAc,UAAU,YAAY,UAAU;AACpD,gBAAI,CAAC,aAAa;AACT,qBAAA,qBAAqB,WAAW,WAAW,OAAO;AAAA,YAAA;AAE3D,gBAAM,MAAM;AACR,gBAAA,wBAAwB,IAAI,OAAO,GAAG;AAC5B,0BAAA,wBAAwB,IAAI,OAAO;AAAA,YAAA;AAEjD,gBAAM,WAAW,IAAI;AACjB,gBAAA,CAAC,2BAA2B,QAAQ,GAAG;AACnC,kBAAA,OAAO,KAAK,QAAQ;AAC1B,kBAAM,MAAM,qBAAqB,WAAW,MAAM,OAAO;AACzD,yCAA2B,QAAQ,IAAI;AAAA,YAAA;AAEzC,mBAAO,2BAA2B,QAAQ;AAAA,UAAA;AAG5C,cAAM,OAAO,qBAAqB,WAAW,KAAK,CAAC,GAAG,IAAI;AAEnD,iBAAA;AAAA,QACT;AAvIE,aAAK,UAAO,SAAA,SAAA,CAAA,GACP,eAAe,GACfD,QAAO;AAAA,MAAA;AAyIfD,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAED,MAAM,kBAAkB,IAAI,WAAkB;AAAA,IAC5C,WAAW;AAAA,EACZ,CAAA;AAED,aAAW,WAAW,gBAAgB;AACtC,aAAW,SAAS,gBAAgB;ACnOpC,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAG,WAAA;AAoBE,aAAK,QAAW;AAGhB,aAAM,SAAW;AAGjB,aAAC,IAAW;AAGZ,aAAC,IAAW;AAGZ,aAAM,SAAW;AAGjB,aAAE,KAAW;AAGb,aAAK,QAAW;AAEhB,aAAU,aAAW;AAGrB,aAAU,aAAe;AAGzB,aAAA,OAAO,SAAC,IAAY,GAAS;AAC3B;AAAA,QACF;AAGA,aAAA,UAAU,SAAC,SAAiB,OAAa;AACvC;AAAA,QACF;AAGA,aAAA,QAAQ,SAAC,SAAiB,OAAa;AACrC;AAAA,QACF;AAAA,MAAA;AAtDOA,eAAK,QAAZ,SAAaF,UAA6B;AAClC,cAAA,IAAI,MAAM,iBAAiB;AAAA,MACnC;AAOOE,eAAK,QAAZ,SAAa,OAAY;AACjBC,YAAAA,WAAUD,SAAQ;AACxBC,iBAAQ,MAAM,KAAK;AACZA,eAAAA;AAAAA,MACT;AAgDAD,eAAA,UAAA,QAAA,SAAM,GAAW,GAAW9J,IAAS;AACnC,YAAI,IAAI,MAAM;AACd,YAAI,IAAI,MAAM;AACd,QAAAA,KAAIA,KAAI,MAAM;AACd,eAAO,SAAS,IAAI,OAAO,IAAI,OAAOA,KAAI;AAAA,MAC5C;AAaD8J,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAYe,WAAA,QAAQjJ,IAASb,IAAO;AAClC,QAAA;AACA,QAAA4J;AACA,QAAA,OAAO/I,OAAM,YAAY;AAChB,iBAAAA;AACD,MAAA+I,WAAA5J;AAAA,IAAA,WACD,OAAOA,OAAM,YAAY;AACvB,iBAAAA;AACD,MAAA4J,WAAA/I;AAAA,IAAA,OACL;AACL,MAAA+I,WAAU/I,OAAA,QAAAA,gBAAAA,KAAKb;AAAA,IAAA;AAEX+J,QAAAA,WAAU,QAAQ,MAAMH,QAAO;AACrC,QAAI,UAAU;AAEZ,UAAM,QAAQ,SAASG,QAAO,KAAMA,SAAgB;AACpDA,eAAQ,MAAM,KAAK;AAAA,IAAA,OACd;AACEA,aAAAA;AAAAA,IAAA;AAAA,EAEX;ACjGA,MAAA;AAAA;AAAA,IAAA,SAAA,QAAA;AAA8B,gBAAYC,WAAA,MAAA;AAWxC,eAAAA,UAAY,WAAmB,YAAoB3B,SAAoB,OAAc;AAArF,YASC,QAAA;AAPK,YAAwB,EAAE,iBAAgB2B,YAAW;AACvD,iBAAO,IAAIA,UAAS,WAAW,YAAY3B,SAAQ,KAAK;AAAA,QAAA;AAG1D,gBAAA,qBAAQ;AAER,cAAK,UAAU,WAAW,YAAYA,SAAQ,KAAK;;;AAjB9C2B,gBAAI,OAAG;AAmBfA,aAAAA;AAAAA,IAAAA,EArB6B,YAAY;AAAA;AAuBnC,MAAM,MAAM;AC3BnB,UAAQ,QAAQ,YAAY,MAAM,YAAY,MAAM,mBAAmB;AAEtD,WAAS,oBAAoB,UAAoB/F,MAAqB,UAAmB,QAAgBC,MAAqB,UAAmB,QAAc;AAG/J,mBAAA,UAAU,SAAS,SAAyB,GAAED,MAAK,SAAS,YAA2BC,IAAG;AAAA,EAC3G;AAEiB,MAAM,KAAKjC,KAAY,GAAG,CAAC;AAC3B,MAAM,KAAKA,KAAY,GAAG,CAAC;AAErC,MAAM,iBAAiB,SAAU,UAAoB,SAAsBgC,MAAqB,SAAsBC,MAAmB;AAC9I,aAAS,aAAa;AAEtB9B,kBAAqB,IAAI6B,MAAK,QAAQ,GAAG;AACzC7B,kBAAqB,IAAI8B,MAAK,QAAQ,GAAG;AAEzC,QAAM,UAAUuE,YAAmB,IAAI,EAAE;AACzC,QAAMnE,MAAK,QAAQ;AACnB,QAAMC,MAAK,QAAQ;AACnB,QAAM,SAASD,MAAKC;AAChB,QAAA,UAAU,SAAS,QAAQ;AAC7B;AAAA,IAAA;AAGF,aAAS,OAAOoC,SAAAA,aAAa;AAC7BtE,aAAgB,SAAS,YAAY,QAAQ,GAAG;AACzCF,aAAS,SAAS,WAAW;AACpC,aAAS,aAAa;AACtBE,aAAgB,SAAS,OAAO,CAAC,EAAE,YAAY,QAAQ,GAAG;AAGjD,aAAA,OAAO,CAAC,EAAE,GAAG,YAAY,GAAGuE,SAAAA,mBAAmB,UAAU,GAAGA,SAAAA,mBAAmB,QAAQ;AAAA,EAClG;AChCA,UAAQ,QAAQ,UAAU,MAAM,YAAY,MAAM,iBAAiB;AACnE,UAAQ,QAAQ,WAAW,MAAM,YAAY,MAAM,kBAAkB;AAEpD,WAAS,kBAAkB,UAAoB3C,MAAqB,UAAmB,QAAgBC,MAAqB,UAAmB,QAAc;AAItK,QAAA,SAAS,SAAS;AAClB,QAAA,SAAS,SAAS;AAExB,sBAAkB,UAAU,QAAQD,MAAK,QAAQC,IAAG;AAAA,EACtD;AAEA,WAAS,mBAAmB,UAAoBD,MAAqB,UAAmB,QAAgBC,MAAqB,UAAmB,QAAc;AAItJ,QAAA,QAAQ,SAAS;AACjB,QAAA,OAAO,IAAI;AACX,UAAA,aAAa,MAAM,MAAM;AAE/B,QAAM,SAAS;AACT,QAAA,SAAS,SAAS;AAExB,sBAAkB,UAAU,QAAQD,MAAK,QAAQC,IAAG;AAAA,EACtD;AAEiB,MAAM,IAAIjC,KAAY,GAAG,CAAC;AAE1B,MAAM,KAAKA,KAAY,GAAG,CAAC;AAC3B,MAAM,KAAKA,KAAY,GAAG,CAAC;AAC3B,MAAM,IAAIA,KAAY,GAAG,CAAC;AAC1B,MAAM,IAAIA,KAAY,GAAG,CAAC;AAC1B,MAAM9B,MAAI8B,KAAY,GAAG,CAAC;AAIpC,MAAM,oBAAoB,SAAU,UAAoB,OAAkBgC,MAAqB,SAAsBC,MAAmB;AAC7I,aAAS,aAAa;AAGtB+F,oBAAuB,GAAG/F,MAAKD,MAAK,QAAQ,GAAG;AAE/C,QAAM,IAAI,MAAM;AAChB,QAAM,IAAI,MAAM;AACTf,YAAQ,GAAG,GAAG,CAAC;AAGhB,QAAA,IAAIK,QAAe,GAAG,CAAC,IAAIA,QAAe,GAAG,CAAC;AAC9C,QAAA3C,KAAI2C,QAAe,GAAG,CAAC,IAAIA,QAAe,GAAG,CAAC;AAE9C,QAAA,SAAS,MAAM,WAAW,QAAQ;AAGxC,QAAI3C,MAAK,GAAK;AACLyB,eAAS,GAAG,CAAC;AACpB,UAAM,OAAKoG,YAAmB,GAAG,CAAC;AAC9B,UAAA,OAAK,SAAS,QAAQ;AACxB;AAAA,MAAA;AAIF,UAAI,MAAM,cAAc;AACtB,YAAM,KAAK,MAAM;AACjB,YAAM,KAAK;AACJvF,gBAAQ,IAAI,IAAI,EAAE;AACnB,YAAA,KAAKK,QAAe,IAAI,EAAE,IAAIA,QAAe,IAAI,CAAC;AAGxD,YAAI,KAAK,GAAK;AACZ;AAAA,QAAA;AAAA,MACF;AAGF,eAAS,OAAOoD,SAAAA,aAAa;AACtBxE,eAAS,SAAS,WAAW;AAC7BE,eAAS,SAAS,YAAY,CAAC;AACtC,eAAS,aAAa;AACtBA,eAAgB,SAAS,OAAO,CAAC,EAAE,YAAY,QAAQ,GAAG;AAGjD,eAAA,OAAO,CAAC,EAAE,GAAG,YAAY,GAAGuE,SAAAA,mBAAmB,UAAU,GAAGA,SAAAA,mBAAmB,QAAQ;AAChG;AAAA,IAAA;AAIF,QAAI,KAAK,GAAK;AACLvE,eAAS,GAAG,CAAC;AACpB,UAAM,OAAKoG,YAAmB,GAAG,CAAC;AAC9B,UAAA,OAAK,SAAS,QAAQ;AACxB;AAAA,MAAA;AAIF,UAAI,MAAM,cAAc;AACtB,YAAM,KAAK,MAAM;AACjB,YAAM,KAAK;AACJvF,gBAAQ,IAAI,IAAI,EAAE;AACnB,YAAA4B,MAAKvB,QAAe,IAAI,CAAC,IAAIA,QAAe,IAAI,EAAE;AAGxD,YAAIuB,MAAK,GAAK;AACZ;AAAA,QAAA;AAAA,MACF;AAGF,eAAS,OAAO6B,SAAAA,aAAa;AACtBxE,eAAS,SAAS,WAAW;AAC7BE,eAAS,SAAS,YAAY,CAAC;AACtC,eAAS,aAAa;AACtBA,eAAgB,SAAS,OAAO,CAAC,EAAE,YAAY,QAAQ,GAAG;AAGjD,eAAA,OAAO,CAAC,EAAE,GAAG,YAAY,GAAGuE,SAAAA,mBAAmB,UAAU,GAAGA,SAAAA,mBAAmB,QAAQ;AAEhG;AAAA,IAAA;AAII,QAAA,MAAMzC,cAAqB,CAAC;AAElC3B,iBAAoB,GAAG,IAAI,KAAK,GAAG5B,KAAI,KAAK,CAAC;AAC7C,QAAM,KAAK6H,YAAmB,GAAG,CAAC;AAC9B,QAAA,KAAK,SAAS,QAAQ;AACxB;AAAA,IAAA;AAGKjF,iBAAarD,KAAG,GAAG,CAAC;AACvB,QAAAoD,QAAepD,KAAG,CAAC,IAAIoD,QAAepD,KAAG,CAAC,IAAI,GAAK;AACrD8F,cAAe9F,GAAC;AAAA,IAAA;AAElBqE,kBAAqBrE,GAAC;AAEtB,aAAS,OAAOwG,SAAAA,aAAa;AACtBtE,aAAS,SAAS,aAAalC,GAAC;AAChCkC,aAAS,SAAS,YAAY,CAAC;AACtC,aAAS,aAAa;AACtBA,aAAgB,SAAS,OAAO,CAAC,EAAE,YAAY,QAAQ,GAAG;AAGjD,aAAA,OAAO,CAAC,EAAE,GAAG,YAAY,GAAGuE,SAAAA,mBAAmB,QAAQ,GAAGA,SAAAA,mBAAmB,QAAQ;AAAA,EAChG;AC/IiB,MAAM,eAAe,CAAE,IAAI,cAAc,IAAI,YAAY;AACzD,MAAMsD,gBAAc,CAAE,IAAI,cAAc,IAAI,YAAY;AACxD,MAAMC,gBAAc,CAAE,IAAI,cAAc,IAAI,YAAY;AACxD,MAAM,0BAA0BlI,KAAY,GAAG,CAAC;AAChD,MAAM,KAAKA,KAAY,GAAG,CAAC;AAC3B,MAAM9B,MAAI8B,KAAY,GAAG,CAAC;AAC1B,MAAMH,OAAKqB,UAAiB,GAAG,GAAG,CAAC;AAEnC,MAAM,MAAMlB,KAAY,GAAG,CAAC;AAC5B,MAAM,MAAMA,KAAY,GAAG,CAAC;AAC5B,MAAM,eAAeA,KAAY,GAAG,CAAC;AACrC,MAAM,cAAcA,KAAY,GAAG,CAAC;AACpC,MAAM,aAAaA,KAAY,GAAG,CAAC;AACnC,MAAM,UAAUA,KAAY,GAAG,CAAC;AAChC,MAAMlB,WAASkB,KAAY,GAAG,CAAC;AAC/B,MAAMmI,YAAUnI,KAAY,GAAG,CAAC;AAGjD,UAAQ,QAAQ,aAAa,MAAM,aAAa,MAAM,cAAc;AAEnD,WAAS,eACxB,UACAgC,MACA,UACA,QACAC,MACA,UACA,QAAc;AAIE,oBAAA,UAAU,SAAS,SAA0B,GAAED,MAAK,SAAS,YAA4BC,IAAG;AAAA,EAC9G;AAWiB,WAAS,kBACxB,OACA,KACA,OACA,KACA7D,SAAqB;AAErB,QAAM,SAAS,MAAM;AACrB,QAAM,SAAS,MAAM;AACrB,QAAM,MAAM,MAAM;AAClB,QAAM,MAAM,MAAM;AAClB,QAAM,MAAM,MAAM;AAEXgK,yBAAqBvI,MAAI,KAAK,GAAG;AAExC,QAAI,YAAY;AAChB,QAAIwI,iBAAgB;AACpB,aAAS,IAAI,GAAG,IAAI,QAAQ,EAAE,GAAG;AAE/B5H,cAAevC,KAAG2B,KAAG,GAAG,IAAI,CAAC,CAAC;AAC9BM,oBAAqB,IAAIN,MAAI,IAAI,CAAC,CAAC;AAGnC,UAAI,KAAK;AACT,eAAS,IAAI,GAAG,IAAI,QAAQ,EAAE,GAAG;AACzB,YAAA,MAAMyB,QAAepD,KAAG,IAAI,CAAC,CAAC,IAAIoD,QAAepD,KAAG,EAAE;AAC5D,YAAI,MAAM,IAAI;AACP,eAAA;AAAA,QAAA;AAAA,MACP;AAGF,UAAI,KAAKmK,gBAAe;AACN,yBAAA;AACJ,oBAAA;AAAA,MAAA;AAAA,IACd;AAIF,IAAAjK,QAAO,gBAAgBiK;AACvB,IAAAjK,QAAO,YAAY;AAAA,EACrB;AAEiB,WAAS,iBACxB,YACA,OACA,KACAkK,QACA,OACA,KAAmB;AAEnB,QAAM,WAAW,MAAM;AAEvB,QAAM,SAAS,MAAM;AACrB,QAAM,YAAY,MAAM;AACxB,QAAM,WAAW,MAAM;AAKhBC,cAAUJ,WAAS,IAAI,GAAG,IAAI,GAAG,SAASG,MAAK,CAAC;AAGvD,QAAI,QAAQ;AACZ,QAAI,SAAS;AACb,aAAS,IAAI,GAAG,IAAI,QAAQ,EAAE,GAAG;AAC/B,UAAM,MAAMhH,QAAe6G,WAAS,SAAS,CAAC,CAAC;AAC/C,UAAI,MAAM,QAAQ;AACP,iBAAA;AACD,gBAAA;AAAA,MAAA;AAAA,IACV;AAIF,QAAM,KAAK;AACX,QAAM,KAAK,KAAK,IAAI,SAAS,KAAK,IAAI;AAE/BhI,kBAAc,WAAW,CAAC,EAAE,GAAG,KAAK,UAAU,EAAE,CAAC;AAC7C,eAAA,CAAC,EAAE,GAAG,YAAYmI,QAAO3D,SAAmB,mBAAA,QAAQ,IAAIA,SAAA,mBAAmB,QAAQ;AAEvFxE,kBAAc,WAAW,CAAC,EAAE,GAAG,KAAK,UAAU,EAAE,CAAC;AAC7C,eAAA,CAAC,EAAE,GAAG,YAAYmI,QAAO3D,SAAmB,mBAAA,QAAQ,IAAIA,SAAA,mBAAmB,QAAQ;AAAA,EAChG;AAEiB,MAAM,gBAAgB;AAAA,IACrC,eAAe;AAAA,IACf,WAAW;AAAA;AAaN,MAAM,kBAAkB,SAC7B,UACA,OACA3C,MACA,OACAC,MAAmB;AAEnB,aAAS,aAAa;AAChB,QAAA,cAAc,MAAM,WAAW,MAAM;AAE3C,sBAAkB,OAAOD,MAAK,OAAOC,MAAK,aAAa;AACvD,QAAM,QAAQ,cAAc;AAC5B,QAAM,cAAc,cAAc;AAClC,QAAI,cAAc;AAChB;AAEF,sBAAkB,OAAOA,MAAK,OAAOD,MAAK,aAAa;AACvD,QAAM,QAAQ,cAAc;AAC5B,QAAM,cAAc,cAAc;AAClC,QAAI,cAAc;AAChB;AAEE,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAAsG;AACA,QAAA;AACE,QAAA,QAAQ,MAAMrJ,iBAAS;AAEzB,QAAA,cAAc,cAAc,OAAO;AAC7B,cAAA;AACA,cAAA;AACF,YAAAgD;AACA,YAAAD;AACE,MAAAsG,SAAA;AACR,eAAS,OAAO5D,SAAAA,aAAa;AACtB,aAAA;AAAA,IAAA,OACF;AACG,cAAA;AACA,cAAA;AACF,YAAA1C;AACA,YAAAC;AACE,MAAAqG,SAAA;AACR,eAAS,OAAO5D,SAAAA,aAAa;AACtB,aAAA;AAAA,IAAA;AAGT,iBAAa,CAAC,EAAE,QAAA,GAAW,aAAa,CAAC,EAAE;AAC3C,qBAAiB,cAAc,OAAO,KAAK4D,QAAO,OAAO,GAAG;AAE5D,QAAM,SAAS,MAAM;AACrB,QAAM,YAAY,MAAM;AAExB,QAAM,MAAMA;AACZ,QAAM,MAAMA,SAAQ,IAAI,SAASA,SAAQ,IAAI;AAE7ClI,aAAgB,KAAK,UAAU,GAAG,CAAC;AACnCA,aAAgB,KAAK,UAAU,GAAG,CAAC;AAE5Ba,YAAQ,cAAc,KAAK,GAAG;AACrCsB,kBAAqB,YAAY;AAE1BwB,iBAAa,aAAa,cAAc,CAAG;AAClDxD,iBAAoB,YAAY,KAAK,KAAK,KAAK,GAAG;AAElDE,YAAe,SAAS,IAAI,GAAG,YAAY;AACpCsD,iBAAajF,UAAQ,SAAS,CAAG;AAEjCqB,kBAAc,KAAK,KAAK,GAAG;AAC3BA,kBAAc,KAAK,KAAK,GAAG;AAGlC,QAAM,cAAcmB,QAAexC,UAAQ,GAAG;AAG9C,QAAM,cAAc,CAACwC,QAAe,SAAS,GAAG,IAAI;AACpD,QAAM,cAAcA,QAAe,SAAS,GAAG,IAAI;AAGnD2G,kBAAY,CAAC,EAAE,QAAA,GAAWA,cAAY,CAAC,EAAE;AACzCC,kBAAY,CAAC,EAAE,QAAA,GAAWA,cAAY,CAAC,EAAE;AAGzCpF,YAAe,yBAAyB,CAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAC9D,QAAM,MAAM,kBAAkBmF,eAAa,cAAc,yBAAyB,aAAa,GAAG;AAElG,QAAI,MAAM,GAAG;AACX;AAAA,IAAA;AAIFnF,YAAe,yBAAyB,QAAQ,GAAG,QAAQ,CAAC;AAC5D,QAAM,MAAM,kBAAkBoF,eAAaD,eAAa,yBAAyB,aAAa,GAAG;AAEjG,QAAI,MAAM,GAAG;AACX;AAAA,IAAA;AAIK7H,aAAS,SAAS,aAAa,WAAW;AAC1CA,aAAS,SAAS,YAAY,UAAU;AAE/C,QAAI,aAAa;AACjB,aAAS,IAAI,GAAG,IAAI8H,cAAY,QAA+B,EAAE,GAAG;AAC5D,UAAA,aAAa5G,QAAexC,UAAQoJ,cAAY,CAAC,EAAE,CAAC,IAAI;AAE9D,UAAI,cAAc,aAAa;AACvB,YAAA,KAAK,SAAS,OAAO,UAAU;AACrC7B,wBAAuB,GAAG,YAAY,KAAK6B,cAAY,CAAC,EAAE,CAAC;AAC3D,WAAG,GAAG,IAAIA,cAAY,CAAC,EAAE,EAAE;AAC3B,YAAI,MAAM;AAER,aAAG,GAAG;;AAEN,UAAA;AAAA,MAAA;AAAA,IACJ;AAGF,aAAS,aAAa;AAAA,EACxB;ACnQA,UAAQ,QAAQ,aAAa,MAAM,YAAY,MAAM,oBAAoB;AAExD,WAAS,qBAAqB,UAAoBlG,MAAqB,UAAmB,QAAgBC,MAAqB,UAAmB,QAAc;AAG1J,yBAAA,UAAU,SAAS,SAA0B,GAAED,MAAK,SAAS,YAA2BC,IAAG;AAAA,EAClH;AAEiB,MAAM,SAASjC,KAAY,GAAG,CAAC;AAC/B,MAAM,aAAaA,KAAY,GAAG,CAAC;AAE7C,MAAM,uBAAuB,SAAU,UAAoB,UAAwBgC,MAAqB,SAAsBC,MAAmB;AACtJ,aAAS,aAAa;AAGtB+F,oBAAuB,QAAQ/F,MAAKD,MAAK,QAAQ,GAAG;AAGpD,QAAI,cAAc;AAClB,QAAI,aAAa;AACX,QAAA,SAAS,SAAS,WAAW,QAAQ;AAC3C,QAAM,cAAc,SAAS;AAC7B,QAAM,WAAW,SAAS;AAC1B,QAAM,UAAU,SAAS;AAEzB,aAAS,IAAI,GAAG,IAAI,aAAa,EAAE,GAAG;AACpC,UAAM/D,KAAIqD,QAAe,QAAQ,CAAC,GAAG,MAAM,IAAIA,QAAe,QAAQ,CAAC,GAAG,SAAS,CAAC,CAAC;AAErF,UAAIrD,KAAI,QAAQ;AAEd;AAAA,MAAA;AAGF,UAAIA,KAAI,YAAY;AACL,qBAAAA;AACC,sBAAA;AAAA,MAAA;AAAA,IAChB;AAIF,QAAM,aAAa;AACnB,QAAM,aAAa,aAAa,IAAI,cAAc,aAAa,IAAI;AAC7D,QAAA2E,MAAK,SAAS,UAAU;AACxB,QAAAC,MAAK,SAAS,UAAU;AAG9B,QAAI,aAAa,SAAS;AACxB,eAAS,aAAa;AACtB,eAAS,OAAO6B,SAAAA,aAAa;AAC7BtE,eAAgB,SAAS,aAAa,QAAQ,WAAW,CAAC;AAC1DG,mBAAoB,SAAS,YAAY,KAAKqC,KAAI,KAAKC,GAAE;AACzDzC,eAAgB,SAAS,OAAO,CAAC,EAAE,YAAY,QAAQ,GAAG;AAGjD,eAAA,OAAO,CAAC,EAAE,GAAG,YAAY,GAAGuE,SAAAA,mBAAmB,UAAU,GAAGA,SAAAA,mBAAmB,QAAQ;AAChG;AAAA,IAAA;AAKF,QAAM,KAAKrD,QAAe,QAAQuB,GAAE,IAAIvB,QAAe,QAAQsB,GAAE,IAAItB,QAAesB,KAAIC,GAAE,IAAIvB,QAAesB,KAAIA,GAAE;AAEnH,QAAM,KAAKtB,QAAe,QAAQsB,GAAE,IAAItB,QAAe,QAAQuB,GAAE,IAAIvB,QAAeuB,KAAID,GAAE,IAAItB,QAAeuB,KAAIA,GAAE;AACnH,QAAI,MAAM,GAAK;AACb,UAAI2D,YAAmB,QAAQ5D,GAAE,IAAI,SAAS,QAAQ;AACpD;AAAA,MAAA;AAGF,eAAS,aAAa;AACtB,eAAS,OAAO8B,SAAAA,aAAa;AAC7BzD,cAAe,SAAS,aAAa,QAAQ2B,GAAE;AACxCL,oBAAc,SAAS,WAAW;AAClCnC,eAAS,SAAS,YAAYwC,GAAE;AACvCxC,eAAgB,SAAS,OAAO,CAAC,EAAE,YAAY,QAAQ,GAAG;AAGjD,eAAA,OAAO,CAAC,EAAE,GAAG,YAAY,GAAGuE,SAAAA,mBAAmB,UAAU,GAAGA,SAAAA,mBAAmB,QAAQ;AAAA,IAAA,WACvF,MAAM,GAAK;AACpB,UAAI6B,YAAmB,QAAQ3D,GAAE,IAAI,SAAS,QAAQ;AACpD;AAAA,MAAA;AAGF,eAAS,aAAa;AACtB,eAAS,OAAO6B,SAAAA,aAAa;AAC7BzD,cAAe,SAAS,aAAa,QAAQ4B,GAAE;AACxCN,oBAAc,SAAS,WAAW;AAClCnC,eAAS,SAAS,YAAYyC,GAAE;AACvCzC,eAAgB,SAAS,OAAO,CAAC,EAAE,YAAY,QAAQ,GAAG;AAGjD,eAAA,OAAO,CAAC,EAAE,GAAG,YAAY,GAAGuE,SAAAA,mBAAmB,UAAU,GAAGA,SAAAA,mBAAmB,QAAQ;AAAA,IAAA,OAC3F;AACLpE,mBAAoB,YAAY,KAAKqC,KAAI,KAAKC,GAAE;AAChD,UAAM,eAAavB,QAAe,QAAQ,QAAQ,UAAU,CAAC,IAAIA,QAAe,YAAY,QAAQ,UAAU,CAAC;AAC/G,UAAI,eAAa,QAAQ;AACvB;AAAA,MAAA;AAGF,eAAS,aAAa;AACtB,eAAS,OAAOoD,SAAAA,aAAa;AAC7BtE,eAAgB,SAAS,aAAa,QAAQ,UAAU,CAAC;AAClDA,eAAS,SAAS,YAAY,UAAU;AAC/CA,eAAgB,SAAS,OAAO,CAAC,EAAE,YAAY,QAAQ,GAAG;AAGjD,eAAA,OAAO,CAAC,EAAE,GAAG,YAAY,GAAGuE,SAAAA,mBAAmB,UAAU,GAAGA,SAAAA,mBAAmB,QAAQ;AAAA,IAAA;AAAA,EAEpG;AC3GiB,MAAM,WAAW,KAAK;AAEvC,UAAQ,QAAQ,UAAU,MAAM,aAAa,MAAM,kBAAkB;AACrE,UAAQ,QAAQ,WAAW,MAAM,aAAa,MAAM,mBAAmB;AAEtD,WAAS,mBAAmB,UAAoB3C,MAAqB,IAAa,QAAgBC,MAAqB,IAAa,QAAc;AAI9I,uBAAA,UAAU,GAAG,SAAuB,GAAED,MAAK,GAAG,YAA4BC,IAAG;AAAA,EAClG;AAGiB,MAAM,aAAa,IAAI;AAEvB,WAAS,oBAAoB,UAAoBD,MAAqB,IAAa,QAAgBC,MAAqB,IAAa,QAAc;AAI5J,QAAA,QAAQ,GAAG;AACX,UAAA,aAAa,YAAY,MAAM;AAErC,uBAAmB,UAAU,YAAYD,MAAK,GAAG,YAA4BC,IAAG;AAAA,EAClF;AAEiB,MAAK;AAAA,GAAL,SAAKuG,aAAU;AAC9BA,gBAAAA,YAAA,WAAA,IAAA,EAAA,IAAA;AACAA,gBAAAA,YAAA,SAAA,IAAA,CAAA,IAAA;AACAA,gBAAAA,YAAA,SAAA,IAAA,CAAA,IAAA;AAAA,EACF,GAJsB,eAAA,aAIrB,CAAA,EAAA;AAGgB,MAAK;AAAA,GAAL,SAAKC,aAAU;AAC/BA,gBAAAA,YAAA,YAAA,IAAA,CAAA,IAAA;AACAA,gBAAAA,YAAA,WAAA,IAAA,CAAA,IAAA;AACAA,gBAAAA,YAAA,UAAA,IAAA,CAAA,IAAA;AAAA,EACD,GAJsB,eAAA,aAIrB,CAAA,EAAA;AAKgB,MAAA;AAAA;AAAA,IAAA,2BAAA;AAAA,eAAAC,UAAA;AAAA,MAAA;AAIhBA,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAKgB,MAAA;AAAA;AAAA,IAAA,2BAAA;AAIf,eAAAC,eAAA;AAHA,aAAA,WAAwB,CAAA;AACxB,aAAA,UAAuB,CAAA;AACvB,aAAK,QAAW;AAEd,iBAAS,IAAI,GAAG,IAAI1J,iBAAS,oBAAoB,KAAK;AACpD,eAAK,SAAS,KAAKe,KAAY,GAAG,CAAC,CAAC;AACpC,eAAK,QAAQ,KAAKA,KAAY,GAAG,CAAC,CAAC;AAAA,QAAA;AAAA,MACrC;AAEH2I,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAKgB,MAAA;AAAA;AAAA,IAAA,WAAA;AAAA,eAAAC,iBAAA;AAGN,aAAE,KAAG5I,KAAY,GAAG,CAAC;AACrB,aAAE,KAAGA,KAAY,GAAG,CAAC;AACrB,aAAM,SAAGA,KAAY,GAAG,CAAC;AACzB,aAAW,cAAGA,KAAY,GAAG,CAAC;AAE9B,aAAW,cAAGA,KAAY,GAAG,CAAC;AAAA,MAAA;AAEvC,qBAAA,UAAA,UAAA,WAAA;AACSE,iBAAS,KAAK,EAAE;AAChBA,iBAAS,KAAK,EAAE;AAChBA,iBAAS,KAAK,MAAM;AACpBA,iBAAS,KAAK,WAAW;AACzBA,iBAAS,KAAK,WAAW;AAAA,MAClC;AACD0I,aAAAA;AAAAA,IAAA,EAAA;AAAA;AAGgB,MAAM,cAAc,CAAE,IAAI,cAAc,IAAI,YAAY;AACxD,MAAM,cAAc,CAAE,IAAI,cAAc,IAAI,YAAY;AACxD,MAAM,KAAK,CAAE,IAAI,cAAc,IAAI,YAAY;AAC/C,MAAM,WAAW,IAAI;AACrB,MAAM,cAAc,IAAI;AACxB,MAAM,YAAY,IAAI;AACtB,MAAM,KAAK,IAAI;AACf,MAAM,YAAY5I,KAAY,GAAG,CAAC;AAClC,MAAM,QAAQA,KAAY,GAAG,CAAC;AAC9B,MAAM,QAAQA,KAAY,GAAG,CAAC;AAC9B,MAAM,QAAQA,KAAY,GAAG,CAAC;AAC9B,MAAM,KAAKkB,UAAiB,GAAG,GAAG,CAAC;AACnC,MAAM,SAASlB,KAAY,GAAG,CAAC;AAC/B,MAAM,UAAUA,KAAY,GAAG,CAAC;AAChC,MAAM,UAAUA,KAAY,GAAG,CAAC;AAChC,MAAM,UAAUA,KAAY,GAAG,CAAC;AAChC,MAAM,aAAaA,KAAY,GAAG,CAAC;AACnC,MAAM,aAAaA,KAAY,GAAG,CAAC;AACnC,MAAM,OAAOA,KAAY,GAAG,CAAC;AAC7B,MAAM,IAAIA,KAAY,GAAG,CAAC;AAMpC,MAAM,qBAAqB,SAAU,UAAoB,OAAkBgC,MAAqB,UAAwBC,MAAmB;AAczImG,yBAAqB,IAAIpG,MAAKC,IAAG;AACxC9B,kBAAqB,WAAW,IAAI,SAAS,UAAU;AAEvD,QAAM,KAAK,MAAM;AACjB,QAAMyC,MAAK,MAAM;AACjB,QAAMC,MAAK,MAAM;AACjB,QAAM,KAAK,MAAM;AAEjB,QAAM,aAAa,MAAM;AACzB,QAAM,aAAa,MAAM;AAElB5B,YAAQ,OAAO4B,KAAID,GAAE;AAC5BL,kBAAqB,KAAK;AAC1BO,YAAe,SAAS,MAAM,GAAG,CAAC,MAAM,CAAC;AACnC,QAAA,UAAUxB,QAAe,SAAS,SAAS,IAAIA,QAAe,SAASsB,GAAE;AAC/E,QAAI,UAAU;AACd,QAAI,UAAU;AACd,QAAI,UAAU;AACd,QAAI,UAAU;AAEd1C,aAAgB,OAAO;AACvBA,aAAgB,OAAO;AAGvB,QAAI,YAAY;AACPe,cAAQ,OAAO2B,KAAI,EAAE;AAC5BL,oBAAqB,KAAK;AAC1BO,cAAe,SAAS,MAAM,GAAG,CAAC,MAAM,CAAC;AACzC,gBAAUC,cAAqB,OAAO,KAAK,KAAK;AACtC,gBAAA,KAAK,IAAI,SAAS,SAAS,IAAI,KAAK,IAAI,SAAS,EAAE;AAAA,IAAA;AAI/D,QAAI,YAAY;AACP9B,cAAQ,OAAO,IAAI4B,GAAE;AAC5BN,oBAAqB,KAAK;AAC1BO,cAAe,SAAS,MAAM,GAAG,CAAC,MAAM,CAAC;AACzC,gBAAU,KAAK,cAAc,OAAO,KAAK,IAAI;AACnC,gBAAA,KAAK,IAAI,SAAS,SAAS,IAAI,KAAK,IAAI,SAASD,GAAE;AAAA,IAAA;AAG3D,QAAA;AACJ3C,aAAgB,MAAM;AACtBA,aAAgB,UAAU;AAC1BA,aAAgB,UAAU;AAG1B,QAAI,cAAc,YAAY;AAC5B,UAAI,WAAW,SAAS;AACtB,gBAAQ,WAAW,KAAO,WAAW,KAAO,WAAW;AACvD,YAAI,OAAO;AACFE,mBAAS,QAAQ,OAAO;AACxBA,mBAAS,YAAY,OAAO;AAC5BA,mBAAS,YAAY,OAAO;AAAA,QAAA,OAC9B;AACEiB,oBAAU,QAAQ,IAAI,OAAO;AAC7BA,oBAAU,YAAY,IAAI,OAAO;AACjCA,oBAAU,YAAY,IAAI,OAAO;AAAA,QAAA;AAAA,iBAEjC,SAAS;AAClB,gBAAQ,WAAW,KAAQ,WAAW,KAAO,WAAW;AACxD,YAAI,OAAO;AACFjB,mBAAS,QAAQ,OAAO;AACxBA,mBAAS,YAAY,OAAO;AAC5BA,mBAAS,YAAY,OAAO;AAAA,QAAA,OAC9B;AACEiB,oBAAU,QAAQ,IAAI,OAAO;AAC7BA,oBAAU,YAAY,IAAI,OAAO;AACjCA,oBAAU,YAAY,IAAI,OAAO;AAAA,QAAA;AAAA,iBAEjC,SAAS;AAClB,gBAAQ,WAAW,KAAQ,WAAW,KAAO,WAAW;AACxD,YAAI,OAAO;AACFjB,mBAAS,QAAQ,OAAO;AACxBA,mBAAS,YAAY,OAAO;AAC5BA,mBAAS,YAAY,OAAO;AAAA,QAAA,OAC9B;AACEiB,oBAAU,QAAQ,IAAI,OAAO;AAC7BA,oBAAU,YAAY,IAAI,OAAO;AACjCA,oBAAU,YAAY,IAAI,OAAO;AAAA,QAAA;AAAA,MAC1C,OACK;AACL,gBAAQ,WAAW,KAAO,WAAW,KAAO,WAAW;AACvD,YAAI,OAAO;AACFjB,mBAAS,QAAQ,OAAO;AACxBA,mBAAS,YAAY,OAAO;AAC5BA,mBAAS,YAAY,OAAO;AAAA,QAAA,OAC9B;AACEiB,oBAAU,QAAQ,IAAI,OAAO;AAC7BA,oBAAU,YAAY,IAAI,OAAO;AACjCA,oBAAU,YAAY,IAAI,OAAO;AAAA,QAAA;AAAA,MAC1C;AAAA,eAEO,YAAY;AACrB,UAAI,SAAS;AACH,gBAAA,WAAW,KAAO,WAAW;AACrC,YAAI,OAAO;AACFjB,mBAAS,QAAQ,OAAO;AACxBA,mBAAS,YAAY,OAAO;AAC5BiB,oBAAU,YAAY,IAAI,OAAO;AAAA,QAAA,OACnC;AACEA,oBAAU,QAAQ,IAAI,OAAO;AAC7BjB,mBAAS,YAAY,OAAO;AAC5BiB,oBAAU,YAAY,IAAI,OAAO;AAAA,QAAA;AAAA,MAC1C,OACK;AACG,gBAAA,WAAW,KAAO,WAAW;AACrC,YAAI,OAAO;AACFjB,mBAAS,QAAQ,OAAO;AACxBA,mBAAS,YAAY,OAAO;AAC5BiB,oBAAU,YAAY,IAAI,OAAO;AAAA,QAAA,OACnC;AACEA,oBAAU,QAAQ,IAAI,OAAO;AAC7BjB,mBAAS,YAAY,OAAO;AAC5BiB,oBAAU,YAAY,IAAI,OAAO;AAAA,QAAA;AAAA,MAC1C;AAAA,eAEO,YAAY;AACrB,UAAI,SAAS;AACH,gBAAA,WAAW,KAAO,WAAW;AACrC,YAAI,OAAO;AACFjB,mBAAS,QAAQ,OAAO;AACxBiB,oBAAU,YAAY,IAAI,OAAO;AACjCjB,mBAAS,YAAY,OAAO;AAAA,QAAA,OAC9B;AACEiB,oBAAU,QAAQ,IAAI,OAAO;AAC7BA,oBAAU,YAAY,IAAI,OAAO;AACjCjB,mBAAS,YAAY,OAAO;AAAA,QAAA;AAAA,MACrC,OACK;AACG,gBAAA,WAAW,KAAO,WAAW;AACrC,YAAI,OAAO;AACFA,mBAAS,QAAQ,OAAO;AACxBiB,oBAAU,YAAY,IAAI,OAAO;AACjCjB,mBAAS,YAAY,OAAO;AAAA,QAAA,OAC9B;AACEiB,oBAAU,QAAQ,IAAI,OAAO;AAC7BA,oBAAU,YAAY,IAAI,OAAO;AACjCjB,mBAAS,YAAY,OAAO;AAAA,QAAA;AAAA,MACrC;AAAA,IACF,OACK;AACL,cAAQ,WAAW;AACnB,UAAI,OAAO;AACFA,iBAAS,QAAQ,OAAO;AACxBiB,kBAAU,YAAY,IAAI,OAAO;AACjCA,kBAAU,YAAY,IAAI,OAAO;AAAA,MAAA,OACnC;AACEA,kBAAU,QAAQ,IAAI,OAAO;AAC7BjB,iBAAS,YAAY,OAAO;AAC5BA,iBAAS,YAAY,OAAO;AAAA,MAAA;AAAA,IACrC;AAIF,cAAU,QAAQ,SAAS;AAC3B,aAAS,IAAI,GAAG,IAAI,SAAS,SAAS,EAAE,GAAG;AAClCD,oBAAc,UAAU,SAAS,CAAC,GAAG,IAAI,SAAS,WAAW,CAAC,CAAC;AAC/DM,cAAQ,UAAU,QAAQ,CAAC,GAAG,GAAG,GAAG,SAAS,UAAU,CAAC,CAAC;AAAA,IAAA;AAG5D,QAAA,SAAS,SAAS,WAAW,MAAM;AAEzC,aAAS,aAAa;AAEtB;AACE,eAAS,OAAO,WAAW;AAClB,eAAA,QAAQ,QAAQ,IAAI;AAC7B,eAAS,aAAa;AAEtB,eAAS,IAAI,GAAG,IAAI,UAAU,OAAO,EAAE,GAAG;AAClC,YAAA9B,KAAI,UAAU,SAAS,CAAC;AACxB,YAAAV,KAAIqD,QAAe,QAAQ3C,EAAC,IAAI2C,QAAe,QAAQsB,GAAE;AAC3D,YAAA3E,KAAI,SAAS,YAAY;AAC3B,mBAAS,aAAaA;AAAA,QAAA;AAAA,MACxB;AAAA,IACF;AAKE,QAAA,SAAS,QAAQ,WAAW,WAAW;AACzC;AAAA,IAAA;AAGE,QAAA,SAAS,aAAa,QAAQ;AAChC;AAAA,IAAA;AAGF;AACE,kBAAY,OAAO,WAAW;AAC9B,kBAAY,QAAQ;AACpB,kBAAY,aAAa;AAEzB6E,cAAe,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;AAExC,eAAS,IAAI,GAAG,IAAI,UAAU,OAAO,EAAE,GAAG;AACxCzB,kBAAiB,GAAG,IAAI,UAAU,QAAQ,CAAC,CAAC;AAE5C,YAAM,KAAKC,QAAe,GAAG,UAAU,SAAS,CAAC,CAAC,IAAIA,QAAe,GAAGsB,GAAE;AAC1E,YAAMiG,MAAKvH,QAAe,GAAG,UAAU,SAAS,CAAC,CAAC,IAAIA,QAAe,GAAGuB,GAAE;AACpE,YAAA5E,KAAI,SAAS,IAAI4K,GAAE;AAEzB,YAAI5K,KAAI,QAAQ;AAEd,sBAAY,OAAO,WAAW;AAC9B,sBAAY,QAAQ;AACpB,sBAAY,aAAaA;AACzB;AAAA,QAAA;AAIF,YAAIqD,QAAe,GAAG,IAAI,KAAK,GAAK;AAClC,cAAIA,QAAe,GAAG,MAAM,IAAIA,QAAe,YAAY,MAAM,IAAI,CAACrC,iBAAS,aAAa;AAC1F;AAAA,UAAA;AAAA,QACF,OACK;AACL,cAAIqC,QAAe,GAAG,MAAM,IAAIA,QAAe,YAAY,MAAM,IAAI,CAACrC,iBAAS,aAAa;AAC1F;AAAA,UAAA;AAAA,QACF;AAGE,YAAAhB,KAAI,YAAY,YAAY;AAC9B,sBAAY,OAAO,WAAW;AAC9B,sBAAY,QAAQ;AACpB,sBAAY,aAAaA;AAAA,QAAA;AAAA,MAC3B;AAAA,IACF;AAGF,QAAI,YAAY,QAAQ,WAAW,aAAa,YAAY,aAAa,QAAQ;AAC/E;AAAA,IAAA;AAIF,QAAM,gBAAgB;AACtB,QAAM,gBAAgB;AAElB,QAAA;AACA,QAAA,YAAY,QAAQ,WAAW,WAAW;AAC9B,oBAAA;AAAA,IAAA,WACL,YAAY,aAAa,gBAAgB,SAAS,aAAa,eAAe;AACzE,oBAAA;AAAA,IAAA,OACT;AACS,oBAAA;AAAA,IAAA;AAGhB,OAAG,CAAC,EAAE,QAAA,GAAW,GAAG,CAAC,EAAE;AAEnB,QAAA,YAAY,QAAQ,WAAW,SAAS;AAC1C,eAAS,OAAOyG,SAAAA,aAAa;AAI7B,UAAI,YAAY;AAChB,UAAI,YAAYpD,QAAe,QAAQ,UAAU,QAAQ,CAAC,CAAC;AAC3D,eAAS,IAAI,GAAG,IAAI,UAAU,OAAO,EAAE,GAAG;AACxC,YAAM,QAAQA,QAAe,QAAQ,UAAU,QAAQ,CAAC,CAAC;AACzD,YAAI,QAAQ,WAAW;AACT,sBAAA;AACA,sBAAA;AAAA,QAAA;AAAA,MACd;AAGF,UAAM,KAAK;AACX,UAAM,KAAK,KAAK,IAAI,UAAU,QAAQ,KAAK,IAAI;AAExClB,eAAS,GAAG,CAAC,EAAE,GAAG,UAAU,SAAS,EAAE,CAAC;AAC5C,SAAA,CAAC,EAAE,GAAG,YAAY,GAAGuE,SAAmB,mBAAA,QAAQ,IAAIA,SAAA,mBAAmB,QAAQ;AAE3EvE,eAAS,GAAG,CAAC,EAAE,GAAG,UAAU,SAAS,EAAE,CAAC;AAC5C,SAAA,CAAC,EAAE,GAAG,YAAY,GAAGuE,SAAmB,mBAAA,QAAQ,IAAIA,SAAA,mBAAmB,QAAQ;AAElF,UAAI,OAAO;AACT,WAAG,KAAK;AACR,WAAG,KAAK;AACDvE,iBAAS,GAAG,IAAIwC,GAAE;AAClBxC,iBAAS,GAAG,IAAIyC,GAAE;AAClBzC,iBAAS,GAAG,QAAQ,OAAO;AAAA,MAAA,OAC7B;AACL,WAAG,KAAK;AACR,WAAG,KAAK;AACDA,iBAAS,GAAG,IAAIyC,GAAE;AAClBzC,iBAAS,GAAG,IAAIwC,GAAE;AACzBvB,kBAAiB,GAAG,QAAQ,IAAI,OAAO;AAAA,MAAA;AAAA,IACzC,OACK;AACL,eAAS,OAAOqD,SAAAA,aAAa;AAE7BtE,eAAgB,GAAG,CAAC,EAAE,GAAGwC,GAAE;AACxB,SAAA,CAAC,EAAE,GAAG,YAAY,GAAG+B,4BAAmB,UAAU,YAAY,OAAOA,SAAAA,mBAAmB,MAAM;AAEjGvE,eAAgB,GAAG,CAAC,EAAE,GAAGyC,GAAE;AACxB,SAAA,CAAC,EAAE,GAAG,YAAY,GAAG8B,4BAAmB,UAAU,YAAY,OAAOA,SAAAA,mBAAmB,MAAM;AAEjG,SAAG,KAAK,YAAY;AACjB,SAAA,KAAK,GAAG,KAAK,IAAI,UAAU,QAAQ,GAAG,KAAK,IAAI;AAClDvE,eAAgB,GAAG,IAAI,UAAU,SAAS,GAAG,EAAE,CAAC;AAChDA,eAAgB,GAAG,IAAI,UAAU,SAAS,GAAG,EAAE,CAAC;AAChDA,eAAgB,GAAG,QAAQ,UAAU,QAAQ,GAAG,EAAE,CAAC;AAAA,IAAA;AAG9C0C,YAAQ,GAAG,aAAa,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC;AACjDA,YAAQ,GAAG,aAAa,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC;AACnE,OAAG,cAAcxB,QAAe,GAAG,aAAa,GAAG,EAAE;AACrD,OAAG,cAAcA,QAAe,GAAG,aAAa,GAAG,EAAE;AAGrD,gBAAY,CAAC,EAAE,QAAA,GAAW,YAAY,CAAC,EAAE;AACzC,gBAAY,CAAC,EAAE,QAAA,GAAW,YAAY,CAAC,EAAE;AAGnC,QAAA,MAAM,kBAAkB,aAAa,IAAI,GAAG,aAAa,GAAG,aAAa,GAAG,EAAE;AAEhF,QAAA,MAAMrC,iBAAS,mBAAmB;AACpC;AAAA,IAAA;AAII,QAAA,MAAM,kBAAkB,aAAa,aAAa,GAAG,aAAa,GAAG,aAAa,GAAG,EAAE;AAEzF,QAAA,MAAMA,iBAAS,mBAAmB;AACpC;AAAA,IAAA;AAIE,QAAA,YAAY,QAAQ,WAAW,SAAS;AAC1CmB,eAAgB,SAAS,aAAa,GAAG,MAAM;AAC/CA,eAAgB,SAAS,YAAY,GAAG,EAAE;AAAA,IAAA,OACrC;AACLA,eAAgB,SAAS,aAAa,SAAS,UAAU,GAAG,EAAE,CAAC;AAC/DA,eAAgB,SAAS,YAAY,SAAS,WAAW,GAAG,EAAE,CAAC;AAAA,IAAA;AAGjE,QAAI,aAAa;AACjB,aAAS,IAAI,GAAG,IAAInB,iBAAS,mBAAmB,EAAE,GAAG;AACnD,UAAM,aAAaqC,QAAe,GAAG,QAAQ,YAAY,CAAC,EAAE,CAAC,IAAIA,QAAe,GAAG,QAAQ,GAAG,EAAE;AAEhG,UAAI,cAAc,QAAQ;AAClB,YAAA,KAAK,SAAS,OAAO,UAAU;AAEjC,YAAA,YAAY,QAAQ,WAAW,SAAS;AAC1C+E,0BAAuB,GAAG,YAAY,IAAI,YAAY,CAAC,EAAE,CAAC;AAC1D,aAAG,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE;AAAA,QAAA,OACtB;AACLjG,mBAAgB,GAAG,YAAY,YAAY,CAAC,EAAE,CAAC;AAC/C,aAAG,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE;AAC3B,aAAG,GAAG;;AAGN,UAAA;AAAA,MAAA;AAAA,IACJ;AAGF,aAAS,aAAa;AAAA,EACxB;AC1fO,MAAM,WAAW;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/dist/planck.min.js b/dist/planck.min.js index 7a18b50f..6651c635 100644 --- a/dist/planck.min.js +++ b/dist/planck.min.js @@ -1,7 +1,8 @@ +(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?factory(exports):typeof define==="function"&&define.amd?define(["exports"],factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,factory(global.planck={}))})(this,(function(exports2){"use strict"; /** - * Planck.js v1.0.9 + * Planck.js v1.1.0-alpha * @license The MIT license - * @copyright Copyright (c) 2023 Erin Catto, Ali Shakiba + * @copyright Copyright (c) 2024 Erin Catto, Ali Shakiba * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -21,19 +22,17 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).planck={})}(this,(function(t){"use strict"; /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */var e=function(t,i){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])})(t,i)};function i(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function o(){this.constructor=t}e(t,i),t.prototype=null===i?Object.create(i):(o.prototype=i.prototype,new o)}var o=function(){return(o=Object.assign||function(t){for(var e,i=1,o=arguments.length;ie?(t=(t-e)%(i-e))+(t<0?i:e):(t=(t-i)%(e-i))+(t<=0?e:i)}function h(t,e,i){return ti?i:t}var c=Object.create(Math);c.EPSILON=r,c.isFinite=a,c.nextPowerOfTwo=function(t){return t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,(t|=t>>16)+1},c.isPowerOfTwo=function(t){return t>0&&0==(t&t-1)},c.mod=m,c.clamp=h,c.random=function(t,e){return void 0===t?(e=1,t=0):void 0===e&&(e=t,t=0),t===e?t:n()*(e-t)+t};var _=Math.abs,l=Math.sqrt,u=Math.max,p=Math.min,y=function(){function t(e,i){if(!(this instanceof t))return new t(e,i);void 0===e?(this.x=0,this.y=0):"object"==typeof e?(this.x=e.x,this.y=e.y):(this.x=e,this.y=i)}return t.prototype._serialize=function(){return{x:this.x,y:this.y}},t._deserialize=function(e){var i=Object.create(t.prototype);return i.x=e.x,i.y=e.y,i},t.zero=function(){var e=Object.create(t.prototype);return e.x=0,e.y=0,e},t.neo=function(e,i){var o=Object.create(t.prototype);return o.x=e,o.y=i,o},t.clone=function(e){return t.neo(e.x,e.y)},t.prototype.toString=function(){return JSON.stringify(this)},t.isValid=function(t){return null!=t&&(Number.isFinite(t.x)&&Number.isFinite(t.y))},t.assert=function(t){},t.prototype.clone=function(){return t.clone(this)},t.prototype.setZero=function(){return this.x=0,this.y=0,this},t.prototype.set=function(t,e){return"object"==typeof t?(this.x=t.x,this.y=t.y):(this.x=t,this.y=e),this},t.prototype.setNum=function(t,e){return this.x=t,this.y=e,this},t.prototype.setVec2=function(t){return this.x=t.x,this.y=t.y,this},t.prototype.wSet=function(t,e,i,o){return void 0!==i||void 0!==o?this.setCombine(t,e,i,o):this.setMul(t,e)},t.prototype.setCombine=function(t,e,i,o){var s=t*e.x+i*o.x,n=t*e.y+i*o.y;return this.x=s,this.y=n,this},t.prototype.setMul=function(t,e){var i=t*e.x,o=t*e.y;return this.x=i,this.y=o,this},t.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this},t.prototype.wAdd=function(t,e,i,o){return void 0!==i||void 0!==o?this.addCombine(t,e,i,o):this.addMul(t,e)},t.prototype.addCombine=function(t,e,i,o){var s=t*e.x+i*o.x,n=t*e.y+i*o.y;return this.x+=s,this.y+=n,this},t.prototype.addMul=function(t,e){var i=t*e.x,o=t*e.y;return this.x+=i,this.y+=o,this},t.prototype.wSub=function(t,e,i,o){return void 0!==i||void 0!==o?this.subCombine(t,e,i,o):this.subMul(t,e)},t.prototype.subCombine=function(t,e,i,o){var s=t*e.x+i*o.x,n=t*e.y+i*o.y;return this.x-=s,this.y-=n,this},t.prototype.subMul=function(t,e){var i=t*e.x,o=t*e.y;return this.x-=i,this.y-=o,this},t.prototype.sub=function(t){return this.x-=t.x,this.y-=t.y,this},t.prototype.mul=function(t){return this.x*=t,this.y*=t,this},t.prototype.length=function(){return t.lengthOf(this)},t.prototype.lengthSquared=function(){return t.lengthSquared(this)},t.prototype.normalize=function(){var t=this.length();if(tt*t){var i=t/l(e);this.x*=i,this.y*=i}return this},t.clamp=function(e,i){var o=t.neo(e.x,e.y);return o.clamp(i),o},t.scaleFn=function(e,i){return function(o){return t.neo(o.x*e,o.y*i)}},t.translateFn=function(e,i){return function(o){return t.neo(o.x+e,o.y+i)}},t}(),d=Math.max,f=Math.min,v=function(){function t(e,i){if(!(this instanceof t))return new t(e,i);this.lowerBound=y.zero(),this.upperBound=y.zero(),"object"==typeof e&&this.lowerBound.setVec2(e),"object"==typeof i?this.upperBound.setVec2(i):"object"==typeof e&&this.upperBound.setVec2(e)}return t.prototype.isValid=function(){return t.isValid(this)},t.isValid=function(t){return null!=t&&(y.isValid(t.lowerBound)&&y.isValid(t.upperBound)&&y.sub(t.upperBound,t.lowerBound).lengthSquared()>=0)},t.assert=function(t){},t.prototype.getCenter=function(){return y.neo(.5*(this.lowerBound.x+this.upperBound.x),.5*(this.lowerBound.y+this.upperBound.y))},t.prototype.getExtents=function(){return y.neo(.5*(this.upperBound.x-this.lowerBound.x),.5*(this.upperBound.y-this.lowerBound.y))},t.prototype.getPerimeter=function(){return 2*(this.upperBound.x-this.lowerBound.x+this.upperBound.y-this.lowerBound.y)},t.prototype.combine=function(t,e){e=e||this;var i=t.lowerBound,o=t.upperBound,s=e.lowerBound,n=e.upperBound,r=f(i.x,s.x),a=f(i.y,s.y),m=d(n.x,o.x),h=d(n.y,o.y);this.lowerBound.setNum(r,a),this.upperBound.setNum(m,h)},t.prototype.combinePoints=function(t,e){this.lowerBound.setNum(f(t.x,e.x),f(t.y,e.y)),this.upperBound.setNum(d(t.x,e.x),d(t.y,e.y))},t.prototype.set=function(t){this.lowerBound.setNum(t.lowerBound.x,t.lowerBound.y),this.upperBound.setNum(t.upperBound.x,t.upperBound.y)},t.prototype.contains=function(t){var e=!0;return e=(e=(e=(e=e&&this.lowerBound.x<=t.lowerBound.x)&&this.lowerBound.y<=t.lowerBound.y)&&t.upperBound.x<=this.upperBound.x)&&t.upperBound.y<=this.upperBound.y},t.prototype.extend=function(e){return t.extend(this,e),this},t.extend=function(t,e){return t.lowerBound.x-=e,t.lowerBound.y-=e,t.upperBound.x+=e,t.upperBound.y+=e,t},t.testOverlap=function(t,e){var i=e.lowerBound.x-t.upperBound.x,o=t.lowerBound.x-e.upperBound.x,s=e.lowerBound.y-t.upperBound.y,n=t.lowerBound.y-e.upperBound.y;return!(i>0||s>0||o>0||n>0)},t.areEqual=function(t,e){return y.areEqual(t.lowerBound,e.lowerBound)&&y.areEqual(t.upperBound,e.upperBound)},t.diff=function(t,e){var i=d(0,f(t.upperBound.x,e.upperBound.x)-d(e.lowerBound.x,t.lowerBound.x)),o=d(0,f(t.upperBound.y,e.upperBound.y)-d(e.lowerBound.y,t.lowerBound.y));return(t.upperBound.x-t.lowerBound.x)*(t.upperBound.y-t.lowerBound.y)+(e.upperBound.x-e.lowerBound.x)*(e.upperBound.y-e.lowerBound.y)-i*o},t.prototype.rayCast=function(t,e){for(var i=-1/0,o=1/0,s=e.p1,n=y.sub(e.p2,e.p1),a=y.abs(n),m=y.zero(),h="x";null!==h;h="x"===h?"y":null)if(a.xl){var p=_;_=l,l=p,u=1}if(_>i&&(m.setZero(),m[h]=u,i=_),i>(o=f(o,l)))return!1}return!(i<0||e.maxFraction0?t=this._list.shift():(this._createCount++,t=this._hasCreateFn?this._createFn():{}),this._allocateCount++,this._hasAllocateFn&&this._allocateFn(t),t},t.prototype.release=function(t){this._list.length"+this._allocateCount+" <"+this._releaseCount+" -"+this._disposeCount+" ="+this._list.length+"/"+this._max},t}(),B=Math.abs,w=Math.max,V=function(){function t(t){this.aabb=new v,this.userData=null,this.parent=null,this.child1=null,this.child2=null,this.height=-1,this.id=t}return t.prototype.toString=function(){return this.id+": "+this.userData},t.prototype.isLeaf=function(){return null==this.child1},t}(),C=new b({create:function(){return new V},release:function(t){t.userData=null,t.parent=null,t.child1=null,t.child2=null,t.height=-1,t.id=void 0}}),M=function(){function t(){this.inputPool=new b({create:function(){return{}},release:function(t){}}),this.stackPool=new b({create:function(){return[]},release:function(t){t.length=0}}),this.iteratorPool=new b({create:function(){return new I},release:function(t){t.close()}}),this.m_root=null,this.m_nodes={},this.m_lastProxyId=0}return t.prototype.getUserData=function(t){return this.m_nodes[t].userData},t.prototype.getFatAABB=function(t){return this.m_nodes[t].aabb},t.prototype.allocateNode=function(){var t=C.allocate();return t.id=++this.m_lastProxyId,this.m_nodes[t.id]=t,t},t.prototype.freeNode=function(t){delete this.m_nodes[t.id],C.release(t)},t.prototype.createProxy=function(t,e){var i=this.allocateNode();return i.aabb.set(t),v.extend(i.aabb,g.aabbExtension),i.userData=e,i.height=0,this.insertLeaf(i),i.id},t.prototype.destroyProxy=function(t){var e=this.m_nodes[t];this.removeLeaf(e),this.freeNode(e)},t.prototype.moveProxy=function(t,e,i){var o=this.m_nodes[t];return!o.aabb.contains(e)&&(this.removeLeaf(o),o.aabb.set(e),e=o.aabb,v.extend(e,g.aabbExtension),i.x<0?e.lowerBound.x+=i.x*g.aabbMultiplier:e.upperBound.x+=i.x*g.aabbMultiplier,i.y<0?e.lowerBound.y+=i.y*g.aabbMultiplier:e.upperBound.y+=i.y*g.aabbMultiplier,this.insertLeaf(o),!0)},t.prototype.insertLeaf=function(t){if(null==this.m_root)return this.m_root=t,void(this.m_root.parent=null);for(var e=t.aabb,i=this.m_root;!i.isLeaf();){var o=i.child1,s=i.child2,n=i.aabb.getPerimeter(),r=v.combinedPerimeter(i.aabb,e),a=2*r,m=2*(r-n),h=v.combinedPerimeter(e,o.aabb)+m;if(!o.isLeaf())h-=o.aabb.getPerimeter();var c=v.combinedPerimeter(e,s.aabb)+m;if(!s.isLeaf())c-=s.aabb.getPerimeter();if(a1){var n=o.child1,r=o.child2;return o.child1=e,o.parent=e.parent,e.parent=o,null!=o.parent?o.parent.child1===t?o.parent.child1=o:o.parent.child2=o:this.m_root=o,n.height>r.height?(o.child2=n,e.child2=r,r.parent=e,e.aabb.combine(i.aabb,r.aabb),o.aabb.combine(e.aabb,n.aabb),e.height=1+w(i.height,r.height),o.height=1+w(e.height,n.height)):(o.child2=r,e.child2=n,n.parent=e,e.aabb.combine(i.aabb,n.aabb),o.aabb.combine(e.aabb,r.aabb),e.height=1+w(i.height,n.height),o.height=1+w(e.height,r.height)),o}if(s<-1){var a=i.child1,m=i.child2;return i.child1=e,i.parent=e.parent,e.parent=i,null!=i.parent?i.parent.child1===e?i.parent.child1=i:i.parent.child2=i:this.m_root=i,a.height>m.height?(i.child2=a,e.child1=m,m.parent=e,e.aabb.combine(o.aabb,m.aabb),i.aabb.combine(e.aabb,a.aabb),e.height=1+w(o.height,m.height),i.height=1+w(e.height,a.height)):(i.child2=m,e.child1=a,a.parent=e,e.aabb.combine(o.aabb,a.aabb),i.aabb.combine(e.aabb,m.aabb),e.height=1+w(o.height,a.height),i.height=1+w(e.height,m.height)),i}return e},t.prototype.getHeight=function(){return null==this.m_root?0:this.m_root.height},t.prototype.getAreaRatio=function(){if(null==this.m_root)return 0;for(var t,e=this.m_root.aabb.getPerimeter(),i=0,o=this.iteratorPool.allocate().preorder(this.m_root);t=o.next();)t.height<0||(i+=t.aabb.getPerimeter());return this.iteratorPool.release(o),i/e},t.prototype.computeHeight=function(t){var e;if((e=void 0!==t?this.m_nodes[t]:this.m_root).isLeaf())return 0;var i=this.computeHeight(e.child1.id),o=this.computeHeight(e.child2.id);return 1+w(i,o)},t.prototype.validateStructure=function(t){if(null!=t){this.m_root;var e=t.child1,i=t.child2;t.isLeaf()||(this.validateStructure(e),this.validateStructure(i))}},t.prototype.validateMetrics=function(t){if(null!=t){var e=t.child1,i=t.child2;if(!t.isLeaf())e.height,i.height,(new v).combine(e.aabb,i.aabb),this.validateMetrics(e),this.validateMetrics(i)}},t.prototype.validate=function(){},t.prototype.getMaxBalance=function(){for(var t,e=0,i=this.iteratorPool.allocate().preorder(this.m_root);t=i.next();)if(!(t.height<=1)){var o=B(t.child2.height-t.child1.height);e=w(e,o)}return this.iteratorPool.release(i),e},t.prototype.rebuildBottomUp=function(){for(var t,e=[],i=0,o=this.iteratorPool.allocate().preorder(this.m_root);t=o.next();)t.height<0||(t.isLeaf()?(t.parent=null,e[i]=t,++i):this.freeNode(t));for(this.iteratorPool.release(o);i>1;){for(var s=1/0,n=-1,r=-1,a=0;a0;){var o=i.pop();if(null!=o)if(v.testOverlap(o.aabb,t))if(o.isLeaf()){if(!1===e(o.id))return}else i.push(o.child1),i.push(o.child2)}this.stackPool.release(i)},t.prototype.rayCast=function(t,e){var i=t.p1,o=t.p2,s=y.sub(o,i);s.normalize();var n=y.crossNumVec2(1,s),r=y.abs(n),a=t.maxFraction,m=new v,h=y.combine(1-a,i,a,o);m.combinePoints(i,h);var c=this.stackPool.allocate(),_=this.inputPool.allocate();for(c.push(this.m_root);c.length>0;){var l=c.pop();if(null!=l&&!1!==v.testOverlap(l.aabb,m)){var u=l.aabb.getCenter(),p=l.aabb.getExtents();if(!(B(y.dot(n,y.sub(i,u)))-y.dot(r,p)>0))if(l.isLeaf()){_.p1=y.clone(t.p1),_.p2=y.clone(t.p2),_.maxFraction=a;var d=e(_,l.id);if(0===d)break;d>0&&(a=d,h=y.combine(1-a,i,a,o),m.combinePoints(i,h))}else c.push(l.child1),c.push(l.child2)}}this.stackPool.release(c),this.inputPool.release(_)},t}(),I=function(){function t(){this.parents=[],this.states=[]}return t.prototype.preorder=function(t){return this.parents.length=0,this.parents.push(t),this.states.length=0,this.states.push(0),this},t.prototype.next=function(){for(;this.parents.length>0;){var t=this.parents.length-1,e=this.parents[t];if(0===this.states[t])return this.states[t]=1,e;if(1===this.states[t]&&(this.states[t]=2,e.child1))return this.parents.push(e.child1),this.states.push(1),e.child1;if(2===this.states[t]&&(this.states[t]=3,e.child2))return this.parents.push(e.child2),this.states.push(1),e.child2;this.parents.pop(),this.states.pop()}},t.prototype.close=function(){this.parents.length=0},t}(),P=Math.max,S=Math.min,T=function(){function t(){var t=this;this.m_tree=new M,this.m_moveBuffer=[],this.query=function(e,i){t.m_tree.query(e,i)},this.queryCallback=function(e){if(e===t.m_queryProxyId)return!0;var i=S(e,t.m_queryProxyId),o=P(e,t.m_queryProxyId),s=t.m_tree.getUserData(i),n=t.m_tree.getUserData(o);return t.m_callback(s,n),!0}}return t.prototype.getUserData=function(t){return this.m_tree.getUserData(t)},t.prototype.testOverlap=function(t,e){var i=this.m_tree.getFatAABB(t),o=this.m_tree.getFatAABB(e);return v.testOverlap(i,o)},t.prototype.getFatAABB=function(t){return this.m_tree.getFatAABB(t)},t.prototype.getProxyCount=function(){return this.m_moveBuffer.length},t.prototype.getTreeHeight=function(){return this.m_tree.getHeight()},t.prototype.getTreeBalance=function(){return this.m_tree.getMaxBalance()},t.prototype.getTreeQuality=function(){return this.m_tree.getAreaRatio()},t.prototype.rayCast=function(t,e){this.m_tree.rayCast(t,e)},t.prototype.shiftOrigin=function(t){this.m_tree.shiftOrigin(t)},t.prototype.createProxy=function(t,e){var i=this.m_tree.createProxy(t,e);return this.bufferMove(i),i},t.prototype.destroyProxy=function(t){this.unbufferMove(t),this.m_tree.destroyProxy(t)},t.prototype.moveProxy=function(t,e,i){this.m_tree.moveProxy(t,e,i)&&this.bufferMove(t)},t.prototype.touchProxy=function(t){this.bufferMove(t)},t.prototype.bufferMove=function(t){this.m_moveBuffer.push(t)},t.prototype.unbufferMove=function(t){for(var e=0;e0;)if(this.m_queryProxyId=this.m_moveBuffer.pop(),null!==this.m_queryProxyId){var e=this.m_tree.getFatAABB(this.m_queryProxyId);this.m_tree.query(e,this.queryCallback)}},t}(),z=Math.sin,F=Math.cos,L=Math.sqrt;function q(t,e){return{x:t,y:e}}function N(t,e,i){return t.x=e,t.y=i,t}function k(t,e){return t.x=e.x,t.y=e.y,t}function D(t){return t.x=0,t.y=0,t}function j(t){return t.x=-t.x,t.y=-t.y,t}function O(t,e){return t.x+=e.x,t.y+=e.y,t}function R(t,e){return t.x-=e.x,t.y-=e.y,t}function E(t,e,i){return t.x=e.x-i.x,t.y=e.y-i.y,t}function J(t,e){return t.x*=e,t.y*=e,t}function Y(t,e,i){return t.x=e*i.x,t.y=e*i.y,t}function W(t,e,i){return t.x+=e*i.x,t.y+=e*i.y,t}function H(t,e,i){return t.x-=e*i.x,t.y-=e*i.y,t}function U(t,e,i,o,s){return t.x=e*i.x+o*s.x,t.y=e*i.y+o*s.y,t}function Z(t,e,i,o,s,n,r){return t.x=e*i.x+o*s.x+n*r.x,t.y=e*i.y+o*s.y+n*r.y,t}function K(t){var e=L(t.x*t.x+t.y*t.y);if(e>0){var i=1/e;t.x*=i,t.y*=i}return t}function X(t,e,i){var o=i*e.y,s=-i*e.x;return t.x=o,t.y=s,t}function G(t,e,i){var o=-e*i.y,s=e*i.x;return t.x=o,t.y=s,t}function Q(t,e){return t.x*e.y-t.y*e.x}function $(t,e){return t.x*e.x+t.y*e.y}function tt(t){return t.x*t.x+t.y*t.y}function et(t,e){var i=t.x-e.x,o=t.y-e.y;return L(i*i+o*o)}function it(t,e){var i=t.x-e.x,o=t.y-e.y;return i*i+o*o}function ot(t,e,i){return t.x=e.c*i.x-e.s*i.y,t.y=e.s*i.x+e.c*i.y,t}function st(t,e,i){var o=e.c*i.x+e.s*i.y,s=-e.s*i.x+e.c*i.y;return t.x=o,t.y=s,t}function nt(t,e,i){return{p:q(t,e),q:(o=i,{s:z(o),c:F(o)})};var o}function rt(t,e){return t.p.x=e.p.x,t.p.y=e.p.y,t.q.s=e.q.s,t.q.c=e.q.c,t}function at(t,e,i){var o=e.q.c*i.x-e.q.s*i.y+e.p.x,s=e.q.s*i.x+e.q.c*i.y+e.p.y;return t.x=o,t.y=s,t}function mt(t,e,i){var o=i.x-e.p.x,s=i.y-e.p.y,n=e.q.c*o+e.q.s*s,r=-e.q.s*o+e.q.c*s;return t.x=n,t.y=r,t}function ht(t,e,i,o){var s=e.q.c*o.x-e.q.s*o.y+e.p.x,n=e.q.s*o.x+e.q.c*o.y+e.p.y,r=s-i.p.x,a=n-i.p.y,m=i.q.c*r+i.q.s*a,h=-i.q.s*r+i.q.c*a;return t.x=m,t.y=h,t}function ct(t,e,i){var o=e.q.c*i.q.c+e.q.s*i.q.s,s=e.q.c*i.q.s-e.q.s*i.q.c,n=e.q.c*(i.p.x-e.p.x)+e.q.s*(i.p.y-e.p.y),r=-e.q.s*(i.p.x-e.p.x)+e.q.c*(i.p.y-e.p.y);return t.q.c=o,t.q.s=s,t.p.x=n,t.p.y=r,t}var _t=Math.sin,lt=Math.cos,ut=Math.atan2,pt=function(){function t(e){if(!(this instanceof t))return new t(e);"number"==typeof e?this.setAngle(e):"object"==typeof e?this.setRot(e):this.setIdentity()}return t.neo=function(e){var i=Object.create(t.prototype);return i.setAngle(e),i},t.clone=function(e){var i=Object.create(t.prototype);return i.s=e.s,i.c=e.c,i},t.identity=function(){var e=Object.create(t.prototype);return e.s=0,e.c=1,e},t.isValid=function(t){return null!=t&&(Number.isFinite(t.s)&&Number.isFinite(t.c))},t.assert=function(t){},t.prototype.setIdentity=function(){this.s=0,this.c=1},t.prototype.set=function(t){"object"==typeof t?(this.s=t.s,this.c=t.c):(this.s=_t(t),this.c=lt(t))},t.prototype.setRot=function(t){this.s=t.s,this.c=t.c},t.prototype.setAngle=function(t){this.s=_t(t),this.c=lt(t)},t.prototype.getAngle=function(){return ut(this.s,this.c)},t.prototype.getXAxis=function(){return y.neo(this.c,this.s)},t.prototype.getYAxis=function(){return y.neo(-this.s,this.c)},t.mul=function(e,i){if("c"in i&&"s"in i){var o=t.identity();return o.s=e.s*i.c+e.c*i.s,o.c=e.c*i.c-e.s*i.s,o}if("x"in i&&"y"in i)return y.neo(e.c*i.x-e.s*i.y,e.s*i.x+e.c*i.y)},t.mulRot=function(e,i){var o=t.identity();return o.s=e.s*i.c+e.c*i.s,o.c=e.c*i.c-e.s*i.s,o},t.mulVec2=function(t,e){return y.neo(t.c*e.x-t.s*e.y,t.s*e.x+t.c*e.y)},t.mulSub=function(t,e,i){var o=t.c*(e.x-i.x)-t.s*(e.y-i.y),s=t.s*(e.x-i.x)+t.c*(e.y-i.y);return y.neo(o,s)},t.mulT=function(e,i){if("c"in i&&"s"in i){var o=t.identity();return o.s=e.c*i.s-e.s*i.c,o.c=e.c*i.c+e.s*i.s,o}if("x"in i&&"y"in i)return y.neo(e.c*i.x+e.s*i.y,-e.s*i.x+e.c*i.y)},t.mulTRot=function(e,i){var o=t.identity();return o.s=e.c*i.s-e.s*i.c,o.c=e.c*i.c+e.s*i.s,o},t.mulTVec2=function(t,e){return y.neo(t.c*e.x+t.s*e.y,-t.s*e.x+t.c*e.y)},t}(),yt=Math.atan2,dt=Math.PI,ft=q(0,0),vt=function(){function t(){this.localCenter=y.zero(),this.c=y.zero(),this.a=0,this.alpha0=0,this.c0=y.zero(),this.a0=0}return t.prototype.recycle=function(){D(this.localCenter),D(this.c),this.a=0,this.alpha0=0,D(this.c0),this.a0=0},t.prototype.setTransform=function(t){at(ft,t,this.localCenter),k(this.c,ft),k(this.c0,ft),this.a=this.a0=yt(t.q.s,t.q.c)},t.prototype.setLocalCenter=function(t,e){k(this.localCenter,t),at(ft,e,this.localCenter),k(this.c,ft),k(this.c0,ft)},t.prototype.getTransform=function(t,e){void 0===e&&(e=0),function(t,e){t.c=F(e),t.s=z(e)}(t.q,(1-e)*this.a0+e*this.a),U(t.p,1-e,this.c0,e,this.c),R(t.p,ot(ft,t.q,this.localCenter))},t.prototype.advance=function(t){var e=(t-this.alpha0)/(1-this.alpha0);U(this.c0,e,this.c,1-e,this.c0),this.a0=e*this.a+(1-e)*this.a0,this.alpha0=t},t.prototype.forward=function(){this.a0=this.a,k(this.c0,this.c)},t.prototype.normalize=function(){var t=m(this.a0,-dt,+dt);this.a-=this.a0-t,this.a0=t},t.prototype.set=function(t){k(this.localCenter,t.localCenter),k(this.c,t.c),this.a=t.a,this.alpha0=t.alpha0,k(this.c0,t.c0),this.a0=t.a0},t}(),xt=function(){function t(e,i){if(!(this instanceof t))return new t(e,i);this.p=y.zero(),this.q=pt.identity(),void 0!==e&&this.p.setVec2(e),void 0!==i&&this.q.setAngle(i)}return t.clone=function(e){var i=Object.create(t.prototype);return i.p=y.clone(e.p),i.q=pt.clone(e.q),i},t.neo=function(e,i){var o=Object.create(t.prototype);return o.p=y.clone(e),o.q=pt.clone(i),o},t.identity=function(){var e=Object.create(t.prototype);return e.p=y.zero(),e.q=pt.identity(),e},t.prototype.setIdentity=function(){this.p.setZero(),this.q.setIdentity()},t.prototype.set=function(t,e){void 0===e?(this.p.set(t.p),this.q.set(t.q)):(this.p.set(t),this.q.set(e))},t.prototype.setNum=function(t,e){this.p.setVec2(t),this.q.setAngle(e)},t.prototype.setTransform=function(t){this.p.setVec2(t.p),this.q.setRot(t.q)},t.isValid=function(t){return null!=t&&(y.isValid(t.p)&&pt.isValid(t.q))},t.assert=function(t){},t.mul=function(e,i){if(Array.isArray(i)){for(var o=[],s=0;s0;var e=0!=(t.m_filterMaskBits&this.m_filterCategoryBits),i=0!=(t.m_filterCategoryBits&this.m_filterMaskBits);return e&&i},t}(),zt="static",Ft="kinematic",Lt="dynamic",qt=q(0,0),Nt=q(0,0),kt=q(0,0),Dt=q(0,0),jt=nt(0,0,0),Ot={type:zt,position:y.zero(),angle:0,linearVelocity:y.zero(),angularVelocity:0,linearDamping:0,angularDamping:0,fixedRotation:!1,bullet:!1,gravityScale:1,allowSleep:!0,awake:!0,active:!0,userData:null},Rt=function(){function t(t,e){this.style={},this.appData={},e=s(e,Ot),this.m_world=t,this.m_awakeFlag=e.awake,this.m_autoSleepFlag=e.allowSleep,this.m_bulletFlag=e.bullet,this.m_fixedRotationFlag=e.fixedRotation,this.m_activeFlag=e.active,this.m_islandFlag=!1,this.m_toiFlag=!1,this.m_userData=e.userData,this.m_type=e.type,this.m_type==Lt?(this.m_mass=1,this.m_invMass=1):(this.m_mass=0,this.m_invMass=0),this.m_I=0,this.m_invI=0,this.m_xf=xt.identity(),this.m_xf.p.setVec2(e.position),this.m_xf.q.setAngle(e.angle),this.m_sweep=new vt,this.m_sweep.setTransform(this.m_xf),this.c_velocity=new At,this.c_position=new Bt,this.m_force=y.zero(),this.m_torque=0,this.m_linearVelocity=y.clone(e.linearVelocity),this.m_angularVelocity=e.angularVelocity,this.m_linearDamping=e.linearDamping,this.m_angularDamping=e.angularDamping,this.m_gravityScale=e.gravityScale,this.m_sleepTime=0,this.m_jointList=null,this.m_contactList=null,this.m_fixtureList=null,this.m_prev=null,this.m_next=null,this.m_destroyed=!1}return t.prototype._serialize=function(){for(var t=[],e=this.m_fixtureList;e;e=e.m_next)t.push(e);return{type:this.m_type,bullet:this.m_bulletFlag,position:this.m_xf.p,angle:this.m_xf.q.getAngle(),linearVelocity:this.m_linearVelocity,angularVelocity:this.m_angularVelocity,fixtures:t}},t._deserialize=function(e,i,o){var s=new t(i,e);if(e.fixtures)for(var n=e.fixtures.length-1;n>=0;n--){var r=o(Tt,e.fixtures[n],s);s._addFixture(r)}return s},t.prototype.isWorldLocked=function(){return!(!this.m_world||!this.m_world.isLocked())},t.prototype.getWorld=function(){return this.m_world},t.prototype.getNext=function(){return this.m_next},t.prototype.setUserData=function(t){this.m_userData=t},t.prototype.getUserData=function(){return this.m_userData},t.prototype.getFixtureList=function(){return this.m_fixtureList},t.prototype.getJointList=function(){return this.m_jointList},t.prototype.getContactList=function(){return this.m_contactList},t.prototype.isStatic=function(){return this.m_type==zt},t.prototype.isDynamic=function(){return this.m_type==Lt},t.prototype.isKinematic=function(){return this.m_type==Ft},t.prototype.setStatic=function(){return this.setType(zt),this},t.prototype.setDynamic=function(){return this.setType(Lt),this},t.prototype.setKinematic=function(){return this.setType(Ft),this},t.prototype.getType=function(){return this.m_type},t.prototype.setType=function(t){if(1!=this.isWorldLocked()&&this.m_type!=t){this.m_type=t,this.resetMassData(),this.m_type==zt&&(this.m_linearVelocity.setZero(),this.m_angularVelocity=0,this.m_sweep.forward(),this.synchronizeFixtures()),this.setAwake(!0),this.m_force.setZero(),this.m_torque=0;for(var e=this.m_contactList;e;){var i=e;e=e.next,this.m_world.destroyContact(i.contact)}this.m_contactList=null;for(var o=this.m_world.m_broadPhase,s=this.m_fixtureList;s;s=s.m_next)for(var n=0;n0&&this.setAwake(!0),this.m_linearVelocity.setVec2(t))},t.prototype.getAngularVelocity=function(){return this.m_angularVelocity},t.prototype.setAngularVelocity=function(t){this.m_type!=zt&&(t*t>0&&this.setAwake(!0),this.m_angularVelocity=t)},t.prototype.getLinearDamping=function(){return this.m_linearDamping},t.prototype.setLinearDamping=function(t){this.m_linearDamping=t},t.prototype.getAngularDamping=function(){return this.m_angularDamping},t.prototype.setAngularDamping=function(t){this.m_angularDamping=t},t.prototype.getGravityScale=function(){return this.m_gravityScale},t.prototype.setGravityScale=function(t){this.m_gravityScale=t},t.prototype.getMass=function(){return this.m_mass},t.prototype.getInertia=function(){return this.m_I+this.m_mass*y.dot(this.m_sweep.localCenter,this.m_sweep.localCenter)},t.prototype.getMassData=function(t){t.mass=this.m_mass,t.I=this.getInertia(),k(t.center,this.m_sweep.localCenter)},t.prototype.resetMassData=function(){if(this.m_mass=0,this.m_invMass=0,this.m_I=0,this.m_invI=0,D(this.m_sweep.localCenter),this.isStatic()||this.isKinematic())return k(this.m_sweep.c0,this.m_xf.p),k(this.m_sweep.c,this.m_xf.p),void(this.m_sweep.a0=this.m_sweep.a);D(Nt);for(var t=this.m_fixtureList;t;t=t.m_next)if(0!=t.m_density){var e={mass:0,center:q(0,0),I:0};t.getMassData(e),this.m_mass+=e.mass,W(Nt,e.mass,e.center),this.m_I+=e.I}this.m_mass>0?(this.m_invMass=1/this.m_mass,Y(Nt,this.m_invMass,Nt)):(this.m_mass=1,this.m_invMass=1),this.m_I>0&&0==this.m_fixedRotationFlag?(this.m_I-=this.m_mass*$(Nt,Nt),this.m_invI=1/this.m_I):(this.m_I=0,this.m_invI=0),k(qt,this.m_sweep.c),this.m_sweep.setLocalCenter(Nt,this.m_xf),E(kt,this.m_sweep.c,qt),G(Dt,this.m_angularVelocity,kt),O(this.m_linearVelocity,Dt)},t.prototype.setMassData=function(t){1!=this.isWorldLocked()&&this.m_type==Lt&&(this.m_invMass=0,this.m_I=0,this.m_invI=0,this.m_mass=t.mass,this.m_mass<=0&&(this.m_mass=1),this.m_invMass=1/this.m_mass,t.I>0&&0==this.m_fixedRotationFlag&&(this.m_I=t.I-this.m_mass*$(t.center,t.center),this.m_invI=1/this.m_I),k(qt,this.m_sweep.c),this.m_sweep.setLocalCenter(t.center,this.m_xf),E(kt,this.m_sweep.c,qt),G(Dt,this.m_angularVelocity,kt),O(this.m_linearVelocity,Dt))},t.prototype.applyForce=function(t,e,i){void 0===i&&(i=!0),this.m_type==Lt&&(i&&0==this.m_awakeFlag&&this.setAwake(!0),this.m_awakeFlag&&(this.m_force.add(t),this.m_torque+=y.crossVec2Vec2(y.sub(e,this.m_sweep.c),t)))},t.prototype.applyForceToCenter=function(t,e){void 0===e&&(e=!0),this.m_type==Lt&&(e&&0==this.m_awakeFlag&&this.setAwake(!0),this.m_awakeFlag&&this.m_force.add(t))},t.prototype.applyTorque=function(t,e){void 0===e&&(e=!0),this.m_type==Lt&&(e&&0==this.m_awakeFlag&&this.setAwake(!0),this.m_awakeFlag&&(this.m_torque+=t))},t.prototype.applyLinearImpulse=function(t,e,i){void 0===i&&(i=!0),this.m_type==Lt&&(i&&0==this.m_awakeFlag&&this.setAwake(!0),this.m_awakeFlag&&(this.m_linearVelocity.addMul(this.m_invMass,t),this.m_angularVelocity+=this.m_invI*y.crossVec2Vec2(y.sub(e,this.m_sweep.c),t)))},t.prototype.applyAngularImpulse=function(t,e){void 0===e&&(e=!0),this.m_type==Lt&&(e&&0==this.m_awakeFlag&&this.setAwake(!0),this.m_awakeFlag&&(this.m_angularVelocity+=this.m_invI*t))},t.prototype.shouldCollide=function(t){if(this.m_type!=Lt&&t.m_type!=Lt)return!1;for(var e=this.m_jointList;e;e=e.next)if(e.other==t&&0==e.joint.m_collideConnected)return!1;return!0},t.prototype._addFixture=function(t){if(1==this.isWorldLocked())return null;if(this.m_activeFlag){var e=this.m_world.m_broadPhase;t.createProxies(e,this.m_xf)}return t.m_next=this.m_fixtureList,this.m_fixtureList=t,t.m_density>0&&this.resetMassData(),this.m_world.m_newFixture=!0,t},t.prototype.createFixture=function(t,e){if(1==this.isWorldLocked())return null;var i=new Tt(this,t,e);return this._addFixture(i),i},t.prototype.destroyFixture=function(t){if(1!=this.isWorldLocked()){if(this.m_fixtureList===t)this.m_fixtureList=t.m_next;else for(var e=this.m_fixtureList;null!=e;){if(e.m_next===t){e.m_next=t.m_next;break}e=e.m_next}for(var i=this.m_contactList;i;){var o=i.contact;i=i.next;var s=o.getFixtureA(),n=o.getFixtureB();t!=s&&t!=n||this.m_world.destroyContact(o)}if(this.m_activeFlag){var r=this.m_world.m_broadPhase;t.destroyProxies(r)}t.m_body=null,t.m_next=null,this.m_world.publish("remove-fixture",t),this.resetMassData()}},t.prototype.getWorldPoint=function(t){return xt.mulVec2(this.m_xf,t)},t.prototype.getWorldVector=function(t){return pt.mulVec2(this.m_xf.q,t)},t.prototype.getLocalPoint=function(t){return xt.mulTVec2(this.m_xf,t)},t.prototype.getLocalVector=function(t){return pt.mulTVec2(this.m_xf.q,t)},t.STATIC="static",t.KINEMATIC="kinematic",t.DYNAMIC="dynamic",t}(),Et=function(){this.other=null,this.joint=null,this.prev=null,this.next=null},Jt=function(){function t(t,e,i){this.m_type="unknown-joint",this.m_prev=null,this.m_next=null,this.m_edgeA=new Et,this.m_edgeB=new Et,this.m_islandFlag=!1,this.style={},this.appData={},e="bodyA"in t?t.bodyA:e,i="bodyB"in t?t.bodyB:i,this.m_bodyA=e,this.m_bodyB=i,this.m_collideConnected=!!t.collideConnected,this.m_userData=t.userData}return t.prototype.isActive=function(){return this.m_bodyA.isActive()&&this.m_bodyB.isActive()},t.prototype.getType=function(){return this.m_type},t.prototype.getBodyA=function(){return this.m_bodyA},t.prototype.getBodyB=function(){return this.m_bodyB},t.prototype.getNext=function(){return this.m_next},t.prototype.getUserData=function(){return this.m_userData},t.prototype.setUserData=function(t){this.m_userData=t},t.prototype.getCollideConnected=function(){return this.m_collideConnected},t.prototype.shiftOrigin=function(t){},t.prototype._resetAnchors=function(t){return this._reset(t)},t}(),Yt={gjkCalls:0,gjkIters:0,gjkMaxIters:0,toiTime:0,toiMaxTime:0,toiCalls:0,toiIters:0,toiMaxIters:0,toiRootIters:0,toiMaxRootIters:0,toString:function(t){t="string"==typeof t?t:"\n";var e="";for(var i in this)"function"!=typeof this[i]&&"object"!=typeof this[i]&&(e+=i+": "+this[i]+t);return e}},Wt=function(){return Date.now()},Ht=function(t){return Date.now()-t},Ut=Math.max,Zt=q(0,0),Kt=q(0,0),Xt=q(0,0),Gt=q(0,0),Qt=q(0,0),$t=q(0,0),te=q(0,0);Yt.gjkCalls=0,Yt.gjkIters=0,Yt.gjkMaxIters=0;var ee=function(){function t(){this.proxyA=new ne,this.proxyB=new ne,this.transformA=xt.identity(),this.transformB=xt.identity(),this.useRadii=!1}return t.prototype.recycle=function(){this.proxyA.recycle(),this.proxyB.recycle(),this.transformA.setIdentity(),this.transformB.setIdentity(),this.useRadii=!1},t}(),ie=function(){function t(){this.pointA=q(0,0),this.pointB=q(0,0),this.distance=0,this.iterations=0}return t.prototype.recycle=function(){D(this.pointA),D(this.pointB),this.distance=0,this.iterations=0},t}(),oe=function(){function t(){this.metric=0,this.indexA=[],this.indexB=[],this.count=0}return t.prototype.recycle=function(){this.metric=0,this.indexA.length=0,this.indexB.length=0,this.count=0},t}(),se=function(t,e,i){++Yt.gjkCalls;var o=i.proxyA,s=i.proxyB,n=i.transformA,a=i.transformB;ce.recycle(),ce.readCache(e,o,n,s,a);for(var m=ce.m_v,h=g.maxDistanceIterations,c=[],_=[],l=0,u=0;uv+x&&t.distance>r)t.distance-=v+x,E(Kt,t.pointB,t.pointA),K(Kt),W(t.pointA,v,Kt),H(t.pointB,x,Kt);else{var A=E(Zt,t.pointA,t.pointB);k(t.pointA,A),k(t.pointB,A),t.distance=0}}},ne=function(){function t(){this.m_vertices=[],this.m_count=0,this.m_radius=0}return t.prototype.recycle=function(){this.m_vertices.length=0,this.m_count=0,this.m_radius=0},t.prototype.getVertexCount=function(){return this.m_count},t.prototype.getVertex=function(t){return this.m_vertices[t]},t.prototype.getSupport=function(t){for(var e=-1,i=-1/0,o=0;oi&&(e=o,i=s)}return e},t.prototype.getSupportVertex=function(t){return this.m_vertices[this.getSupport(t)]},t.prototype.set=function(t,e){t.computeDistanceProxy(this,e)},t.prototype.setVertices=function(t,e,i){this.m_vertices=t,this.m_count=e,this.m_radius=i},t}(),re=function(){function t(){this.wA=q(0,0),this.indexA=0,this.wB=q(0,0),this.indexB=0,this.w=q(0,0),this.a=0}return t.prototype.recycle=function(){this.indexA=0,this.indexB=0,D(this.wA),D(this.wB),D(this.w),this.a=0},t.prototype.set=function(t){this.indexA=t.indexA,this.indexB=t.indexB,k(this.wA,t.wA),k(this.wB,t.wB),k(this.w,t.w),this.a=t.a},t}(),ae=q(0,0),me=q(0,0),he=function(){function t(){this.m_v1=new re,this.m_v2=new re,this.m_v3=new re,this.m_v=[this.m_v1,this.m_v2,this.m_v3]}return t.prototype.recycle=function(){this.m_v1.recycle(),this.m_v2.recycle(),this.m_v3.recycle(),this.m_count=0},t.prototype.toString=function(){return 3===this.m_count?["+"+this.m_count,this.m_v1.a,this.m_v1.wA.x,this.m_v1.wA.y,this.m_v1.wB.x,this.m_v1.wB.y,this.m_v2.a,this.m_v2.wA.x,this.m_v2.wA.y,this.m_v2.wB.x,this.m_v2.wB.y,this.m_v3.a,this.m_v3.wA.x,this.m_v3.wA.y,this.m_v3.wB.x,this.m_v3.wB.y].toString():2===this.m_count?["+"+this.m_count,this.m_v1.a,this.m_v1.wA.x,this.m_v1.wA.y,this.m_v1.wB.x,this.m_v1.wB.y,this.m_v2.a,this.m_v2.wA.x,this.m_v2.wA.y,this.m_v2.wB.x,this.m_v2.wB.y].toString():1===this.m_count?["+"+this.m_count,this.m_v1.a,this.m_v1.wA.x,this.m_v1.wA.y,this.m_v1.wB.x,this.m_v1.wB.y].toString():"+"+this.m_count},t.prototype.readCache=function(t,e,i,o,s){this.m_count=t.count;for(var n=0;n1){var h=t.metric,c=this.getMetric();(c<.5*h||2*h0?N(ae,-Xt.y,Xt.x):N(ae,Xt.y,-Xt.x);default:return D(ae)}},t.prototype.getClosestPoint=function(){var t=this.m_v1,e=this.m_v2;switch(this.m_v3,this.m_count){case 0:return D(me);case 1:return k(me,t.w);case 2:return U(me,t.a,t.w,e.a,e.w);case 3:default:return D(me)}},t.prototype.getWitnessPoints=function(t,e){var i=this.m_v1,o=this.m_v2,s=this.m_v3;switch(this.m_count){case 0:break;case 1:k(t,i.wA),k(e,i.wB);break;case 2:U(t,i.a,i.wA,o.a,o.wA),U(e,i.a,i.wB,o.a,o.wB);break;case 3:Z(t,i.a,i.wA,o.a,o.wA,s.a,s.wA),k(e,t)}},t.prototype.getMetric=function(){switch(this.m_count){case 0:case 1:return 0;case 2:return et(this.m_v1.w,this.m_v2.w);case 3:return Q(E($t,this.m_v2.w,this.m_v1.w),E(te,this.m_v3.w,this.m_v1.w));default:return 0}},t.prototype.solve=function(){switch(this.m_count){case 1:break;case 2:this.solve2();break;case 3:this.solve3()}},t.prototype.solve2=function(){var t=this.m_v1.w,e=this.m_v2.w;E(Xt,e,t);var i=-$(t,Xt);if(i<=0)return this.m_v1.a=1,void(this.m_count=1);var o=$(e,Xt);if(o<=0)return this.m_v2.a=1,this.m_count=1,void this.m_v1.set(this.m_v2);var s=1/(o+i);this.m_v1.a=o*s,this.m_v2.a=i*s,this.m_count=2},t.prototype.solve3=function(){var t=this.m_v1.w,e=this.m_v2.w,i=this.m_v3.w;E(Xt,e,t);var o=$(t,Xt),s=$(e,Xt),n=-o;E(Gt,i,t);var r=$(t,Gt),a=$(i,Gt),m=-r;E(Qt,i,e);var h=$(e,Qt),c=$(i,Qt),_=-h,l=Q(Xt,Gt),u=l*Q(e,i),p=l*Q(i,t),y=l*Q(t,e);if(n<=0&&m<=0)return this.m_v1.a=1,void(this.m_count=1);if(s>0&&n>0&&y<=0){var d=1/(s+n);return this.m_v1.a=s*d,this.m_v2.a=n*d,void(this.m_count=2)}if(a>0&&m>0&&p<=0){var f=1/(a+m);return this.m_v1.a=a*f,this.m_v3.a=m*f,this.m_count=2,void this.m_v2.set(this.m_v3)}if(s<=0&&_<=0)return this.m_v2.a=1,this.m_count=1,void this.m_v1.set(this.m_v2);if(a<=0&&c<=0)return this.m_v3.a=1,this.m_count=1,void this.m_v1.set(this.m_v3);if(c>0&&_>0&&u<=0){var v=1/(c+_);return this.m_v2.a=c*v,this.m_v3.a=_*v,this.m_count=2,void this.m_v1.set(this.m_v3)}var x=1/(u+p+y);this.m_v1.a=u*x,this.m_v2.a=p*x,this.m_v3.a=y*x,this.m_count=3},t}(),ce=new he,_e=new ee,le=new oe,ue=new ie,pe=function(t,e,i,o,s,n){return _e.recycle(),_e.proxyA.set(t,e),_e.proxyB.set(i,o),rt(_e.transformA,s),rt(_e.transformB,n),_e.useRadii=!0,ue.recycle(),le.recycle(),se(ue,le,_e),ue.distance<1e-8};se.testOverlap=pe,se.Input=ee,se.Output=ie,se.Proxy=ne,se.Cache=oe;var ye,de=function(){function t(){this.proxyA=new ne,this.proxyB=new ne,this.transformA=xt.identity(),this.transformB=xt.identity(),this.translationB=y.zero()}return t.prototype.recycle=function(){this.proxyA.recycle(),this.proxyB.recycle(),this.transformA.setIdentity(),this.transformB.setIdentity(),D(this.translationB)},t}(),fe=function(){this.point=y.zero(),this.normal=y.zero(),this.lambda=1,this.iterations=0},ve=function(t,e){t.iterations=0,t.lambda=1,t.normal.setZero(),t.point.setZero();var i=e.proxyA,o=e.proxyB,s=Ut(i.m_radius,g.polygonRadius),n=s+Ut(o.m_radius,g.polygonRadius),r=e.transformA,a=e.transformB,m=e.translationB,h=y.zero(),c=0,_=new he;_.m_count=0;for(var l=_.m_v,u=i.getSupport(pt.mulTVec2(r.q,y.neg(m))),p=xt.mulVec2(r,i.getVertex(u)),d=o.getSupport(pt.mulTVec2(a.q,m)),f=xt.mulVec2(a,o.getVertex(d)),v=y.sub(p,f),x=Ut(g.polygonRadius,n-g.polygonRadius),A=.5*g.linearSlop,b=0;b<20&&v.length()-x>A;){t.iterations+=1,u=i.getSupport(pt.mulTVec2(r.q,y.neg(v))),p=xt.mulVec2(r,i.getVertex(u)),d=o.getSupport(pt.mulTVec2(a.q,v)),f=xt.mulVec2(a,o.getVertex(d));var B=y.sub(p,f);v.normalize();var w=y.dot(v,B),V=y.dot(v,m);if(w-x>c*V){if(V<=0)return!1;if((c=(w-x)/V)>1)return!1;h.setMul(-1,v),_.m_count=0}var C=l[_.m_count];switch(C.indexA=d,C.wA=y.combine(1,f,c,m),C.indexB=u,C.wB=p,C.w=y.sub(C.wB,C.wA),C.a=1,_.m_count+=1,_.m_count){case 1:break;case 2:_.solve2();break;case 3:_.solve3()}if(3==_.m_count)return!1;v.setVec2(_.getClosestPoint()),++b}if(0==b)return!1;var M=y.zero(),I=y.zero();return _.getWitnessPoints(I,M),v.lengthSquared()>0&&(h.setMul(-1,v),h.normalize()),t.point=y.combine(1,M,s,h),t.normal=h,t.lambda=c,t.iterations=b,!0},xe=Math.abs,Ae=Math.max,ge=function(){function t(){this.proxyA=new ne,this.proxyB=new ne,this.sweepA=new vt,this.sweepB=new vt}return t.prototype.recycle=function(){this.proxyA.recycle(),this.proxyB.recycle(),this.sweepA.recycle(),this.sweepB.recycle(),this.tMax=-1},t}();t.TOIOutputState=void 0,(ye=t.TOIOutputState||(t.TOIOutputState={}))[ye.e_unset=-1]="e_unset",ye[ye.e_unknown=0]="e_unknown",ye[ye.e_failed=1]="e_failed",ye[ye.e_overlapped=2]="e_overlapped",ye[ye.e_touching=3]="e_touching",ye[ye.e_separated=4]="e_separated";var be=function(){function e(){this.state=t.TOIOutputState.e_unset,this.t=-1}return e.prototype.recycle=function(){this.state=t.TOIOutputState.e_unset,this.t=-1},e}();Yt.toiTime=0,Yt.toiMaxTime=0,Yt.toiCalls=0,Yt.toiIters=0,Yt.toiMaxIters=0,Yt.toiRootIters=0,Yt.toiMaxRootIters=0;var Be,we=new ee,Ve=new ie,Ce=new oe,Me=nt(0,0,0),Ie=nt(0,0,0),Pe=q(0,0),Se=q(0,0),Te=q(0,0),ze=q(0,0),Fe=q(0,0),Le=q(0,0),qe=q(0,0),Ne=q(0,0),ke=function(e,i){var o=Wt();++Yt.toiCalls,e.state=t.TOIOutputState.e_unknown,e.t=i.tMax;var s=i.proxyA,n=i.proxyB,r=i.sweepA,a=i.sweepB;r.normalize(),a.normalize();var m=i.tMax,h=s.m_radius+n.m_radius,c=Ae(g.linearSlop,h-3*g.linearSlop),_=.25*g.linearSlop,l=0,u=g.maxTOIIterations,p=0;for(Ce.recycle(),we.proxyA.setVertices(s.m_vertices,s.m_count,s.m_radius),we.proxyB.setVertices(n.m_vertices,n.m_count,n.m_radius),we.useRadii=!1;;){if(r.getTransform(Me,l),a.getTransform(Ie,l),rt(we.transformA,Me),rt(we.transformB,Ie),se(Ve,Ce,we),Ve.distance<=0){e.state=t.TOIOutputState.e_overlapped,e.t=0;break}if(Ve.distancec+_){e.state=t.TOIOutputState.e_separated,e.t=m,y=!0;break}if(v>c-_){l=d;break}var x=De.evaluate(l);if(xc?(b=w,x=V):(B=w,v=V),50===A)break}if(Yt.toiMaxRootIters=Ae(Yt.toiMaxRootIters,A),++f===g.maxPolygonVertices)break}if(++p,++Yt.toiIters,y)break;if(p===u){e.state=t.TOIOutputState.e_failed,e.t=l;break}}Yt.toiMaxIters=Ae(Yt.toiMaxIters,p);var C=Ht(o);Yt.toiMaxTime=Ae(Yt.toiMaxTime,C),Yt.toiTime+=C,De.recycle()};!function(t){t[t.e_unset=-1]="e_unset",t[t.e_points=1]="e_points",t[t.e_faceA=2]="e_faceA",t[t.e_faceB=3]="e_faceB"}(Be||(Be={}));var De=new(function(){function t(){this.m_proxyA=null,this.m_proxyB=null,this.m_sweepA=null,this.m_sweepB=null,this.m_type=Be.e_unset,this.m_localPoint=q(0,0),this.m_axis=q(0,0),this.indexA=-1,this.indexB=-1}return t.prototype.recycle=function(){this.m_proxyA=null,this.m_proxyB=null,this.m_sweepA=null,this.m_sweepB=null,this.m_type=Be.e_unset,D(this.m_localPoint),D(this.m_axis),this.indexA=-1,this.indexB=-1},t.prototype.initialize=function(t,e,i,o,s,n){var r=t.count;if(this.m_proxyA=e,this.m_proxyB=o,this.m_sweepA=i,this.m_sweepB=s,this.m_sweepA.getTransform(Me,n),this.m_sweepB.getTransform(Ie,n),1===r){this.m_type=Be.e_points;var a=this.m_proxyA.getVertex(t.indexA[0]),m=this.m_proxyB.getVertex(t.indexB[0]);return at(Se,Me,a),at(Te,Ie,m),E(this.m_axis,Te,Se),p=function(t){var e=L(t.x*t.x+t.y*t.y);if(0!==e){var i=1/e;t.x*=i,t.y*=i}return e}(this.m_axis)}if(t.indexA[0]===t.indexA[1]){this.m_type=Be.e_faceB;var h=o.getVertex(t.indexB[0]),c=o.getVertex(t.indexB[1]);X(this.m_axis,E(Pe,c,h),1),K(this.m_axis),ot(ze,Ie.q,this.m_axis),U(this.m_localPoint,.5,h,.5,c),at(Te,Ie,this.m_localPoint);var _=e.getVertex(t.indexA[0]);return(p=$(xt.mulVec2(Me,_),ze)-$(Te,ze))<0&&(j(this.m_axis),p=-p),p}this.m_type=Be.e_faceA;var l=this.m_proxyA.getVertex(t.indexA[0]),u=this.m_proxyA.getVertex(t.indexA[1]);X(this.m_axis,E(Pe,u,l),1),K(this.m_axis),ot(ze,Me.q,this.m_axis),U(this.m_localPoint,.5,l,.5,u),at(Se,Me,this.m_localPoint);var p,y=this.m_proxyB.getVertex(t.indexB[0]);return at(Te,Ie,y),(p=$(Te,ze)-$(Se,ze))<0&&(j(this.m_axis),p=-p),p},t.prototype.compute=function(t,e){switch(this.m_sweepA.getTransform(Me,e),this.m_sweepB.getTransform(Ie,e),this.m_type){case Be.e_points:return t&&(st(Fe,Me.q,this.m_axis),st(Le,Ie.q,Y(Pe,-1,this.m_axis)),this.indexA=this.m_proxyA.getSupport(Fe),this.indexB=this.m_proxyB.getSupport(Le)),k(qe,this.m_proxyA.getVertex(this.indexA)),k(Ne,this.m_proxyB.getVertex(this.indexB)),at(Se,Me,qe),at(Te,Ie,Ne),$(Te,this.m_axis)-$(Se,this.m_axis);case Be.e_faceA:return ot(ze,Me.q,this.m_axis),at(Se,Me,this.m_localPoint),t&&(st(Le,Ie.q,Y(Pe,-1,ze)),this.indexA=-1,this.indexB=this.m_proxyB.getSupport(Le)),k(Ne,this.m_proxyB.getVertex(this.indexB)),at(Te,Ie,Ne),$(Te,ze)-$(Se,ze);case Be.e_faceB:return ot(ze,Ie.q,this.m_axis),at(Te,Ie,this.m_localPoint),t&&(st(Fe,Me.q,Y(Pe,-1,ze)),this.indexB=-1,this.indexA=this.m_proxyA.getSupport(Fe)),k(qe,this.m_proxyA.getVertex(this.indexA)),at(Se,Me,qe),$(Se,ze)-$(Te,ze);default:return t&&(this.indexA=-1,this.indexB=-1),0}},t.prototype.findMinSeparation=function(t){return this.compute(!0,t)},t.prototype.evaluate=function(t){return this.compute(!1,t)},t}());ke.Input=ge,ke.Output=be;var je=Math.abs,Oe=Math.sqrt,Re=Math.min,Ee=function(){function t(){this.dt=0,this.inv_dt=0,this.velocityIterations=0,this.positionIterations=0,this.warmStarting=!1,this.blockSolve=!0,this.inv_dt0=0,this.dtRatio=1}return t.prototype.reset=function(t){this.dt>0&&(this.inv_dt0=this.inv_dt),this.dt=t,this.inv_dt=0==t?0:1/t,this.dtRatio=t*this.inv_dt0},t}(),Je=new Ee,Ye=q(0,0),We=q(0,0),He=q(0,0),Ue=new ge,Ze=new be,Ke=new vt,Xe=new vt,Ge=new vt,Qe=function(){function t(t){this.contact=t,this.normals=[],this.tangents=[]}return t.prototype.recycle=function(){this.normals.length=0,this.tangents.length=0},Object.defineProperty(t.prototype,"normalImpulses",{get:function(){var t=this.contact,e=this.normals;e.length=0;for(var i=0;i0;){i=n.pop();if(this.addBody(i),i.m_awakeFlag=!0,!i.isStatic()){for(var a=i.m_contactList;a;a=a.next){var m=a.contact;if(!m.m_islandFlag&&(0!=m.isEnabled()&&0!=m.isTouching())){var h=m.m_fixtureA.m_isSensor,c=m.m_fixtureB.m_isSensor;if(!h&&!c)this.addContact(m),m.m_islandFlag=!0,(l=a.other).m_islandFlag||(n.push(l),l.m_islandFlag=!0)}}for(var _=i.m_jointList;_;_=_.next){var l;if(1!=_.joint.m_islandFlag)0!=(l=_.other).isActive()&&(this.addJoint(_.joint),_.joint.m_islandFlag=!0,l.m_islandFlag||(n.push(l),l.m_islandFlag=!0))}}}this.solveIsland(t);for(var u=0;ug.maxTranslationSquared){var _=g.maxTranslation/Oe(c);J(We,_)}var l=s*m;if(l*l>g.maxRotationSquared)m*=_=g.maxRotation/je(l);W(Ye,s,We),a+=s*m,k(r.c_position.c,Ye),r.c_position.a=a,k(r.c_velocity.v,We),r.c_velocity.w=m}var u=!1;for(n=0;n=-3*g.linearSlop,f=!0;for(h=0;hb||tt(r.m_linearVelocity)>A?(r.m_sleepTime=0,x=0):(r.m_sleepTime+=s,x=Re(x,r.m_sleepTime)))}if(x>=g.timeToSleep&&u)for(n=0;ng.maxSubSteps)){var m=1;if(a.m_toiFlag)m=a.m_toi;else{var h=a.getFixtureA(),c=a.getFixtureB();if(h.isSensor()||c.isSensor())continue;var _=h.getBody(),l=c.getBody(),u=_.isAwake()&&!_.isStatic(),p=l.isAwake()&&!l.isStatic();if(0==u&&0==p)continue;var y=_.isBullet()||!_.isDynamic(),d=l.isBullet()||!l.isDynamic();if(0==y&&0==d)continue;var f=_.m_sweep.alpha0;_.m_sweep.alpha0=-1.5*g.linearSlop)break}k(e.m_sweep.c0,e.c_position.c),e.m_sweep.a0=e.c_position.a,k(i.m_sweep.c0,i.c_position.c),i.m_sweep.a0=i.c_position.a;for(o=0;og.maxTranslationSquared){var l=g.maxTranslation/Oe(_);J(We,l)}var u=a*c;if(u*u>g.maxRotationSquared)c*=l=g.maxRotation/je(u);W(Ye,a,We),h+=a*c,k(m.c_position.c,Ye),m.c_position.a=h,k(m.c_velocity.v,We),m.c_velocity.w=c,k(m.m_sweep.c,Ye),m.m_sweep.a=h,k(m.m_linearVelocity,We),m.m_angularVelocity=c,m.synchronizeTransform()}this.postSolveIsland()},e.prototype.postSolveIsland=function(){for(var t=0;t1e-18)Y(r,1/si(c),ci);U(mi,1,ni,o,r),U(hi,1,ri,-n,r),U(a[0],.5,mi,.5,hi),m[0]=$(E(ai,hi,mi),r);break;case t.ManifoldType.e_faceA:ot(r,i.q,this.localNormal),at(_i,i,this.localPoint);for(var _=0;_e?t:e}var Pi=[],Si=function(){function t(){this.rA=q(0,0),this.rB=q(0,0),this.normalImpulse=0,this.tangentImpulse=0,this.normalMass=0,this.tangentMass=0,this.velocityBias=0}return t.prototype.recycle=function(){D(this.rA),D(this.rB),this.normalImpulse=0,this.tangentImpulse=0,this.normalMass=0,this.tangentMass=0,this.velocityBias=0},t}(),Ti=q(0,0),zi=q(0,0),Fi=q(0,0),Li=q(0,0),qi=q(0,0),Ni=nt(0,0,0),ki=nt(0,0,0),Di=q(0,0),ji=q(0,0),Oi=q(0,0),Ri=q(0,0),Ei=q(0,0),Ji=q(0,0),Yi=q(0,0),Wi=q(0,0),Hi=q(0,0),Ui=q(0,0),Zi=q(0,0),Ki=q(0,0),Xi=q(0,0),Gi=q(0,0),Qi=q(0,0),$i=q(0,0),to=q(0,0),eo=q(0,0),io=q(0,0),oo=function(){function e(){this.m_nodeA=new Ci(this),this.m_nodeB=new Ci(this),this.m_fixtureA=null,this.m_fixtureB=null,this.m_indexA=-1,this.m_indexB=-1,this.m_evaluateFcn=null,this.m_manifold=new pi,this.m_prev=null,this.m_next=null,this.m_toi=1,this.m_toiCount=0,this.m_toiFlag=!1,this.m_friction=0,this.m_restitution=0,this.m_tangentSpeed=0,this.m_enabledFlag=!0,this.m_islandFlag=!1,this.m_touchingFlag=!1,this.m_filterFlag=!1,this.m_bulletHitFlag=!1,this.m_impulse=new Qe(this),this.v_points=[new Si,new Si],this.v_normal=q(0,0),this.v_normalMass=new oi,this.v_K=new oi,this.v_pointCount=0,this.v_tangentSpeed=0,this.v_friction=0,this.v_restitution=0,this.v_invMassA=0,this.v_invMassB=0,this.v_invIA=0,this.v_invIB=0,this.p_localPoints=[q(0,0),q(0,0)],this.p_localNormal=q(0,0),this.p_localPoint=q(0,0),this.p_localCenterA=q(0,0),this.p_localCenterB=q(0,0),this.p_type=t.ManifoldType.e_unset,this.p_radiusA=0,this.p_radiusB=0,this.p_pointCount=0,this.p_invMassA=0,this.p_invMassB=0,this.p_invIA=0,this.p_invIB=0}return e.prototype.initialize=function(t,e,i,o,s){this.m_fixtureA=t,this.m_fixtureB=i,this.m_indexA=e,this.m_indexB=o,this.m_evaluateFcn=s,this.m_friction=Mi(this.m_fixtureA.m_friction,this.m_fixtureB.m_friction),this.m_restitution=Ii(this.m_fixtureA.m_restitution,this.m_fixtureB.m_restitution)},e.prototype.recycle=function(){this.m_nodeA.recycle(),this.m_nodeB.recycle(),this.m_fixtureA=null,this.m_fixtureB=null,this.m_indexA=-1,this.m_indexB=-1,this.m_evaluateFcn=null,this.m_manifold.recycle(),this.m_prev=null,this.m_next=null,this.m_toi=1,this.m_toiCount=0,this.m_toiFlag=!1,this.m_friction=0,this.m_restitution=0,this.m_tangentSpeed=0,this.m_enabledFlag=!0,this.m_islandFlag=!1,this.m_touchingFlag=!1,this.m_filterFlag=!1,this.m_bulletHitFlag=!1,this.m_impulse.recycle();for(var e=0,i=this.v_points;e0;for(var p=0;p0?-w/M:0,Wi),H(Ti,y,Yi),x-=d*Q(Ei,Yi),W(Fi,f,Yi),A+=v*Q(Ji,Yi)}return k(_.c,Ti),_.a=x,k(l.c,Fi),l.a=A,n},e.prototype.initVelocityConstraint=function(t){var e=this.m_fixtureA,i=this.m_fixtureB;if(null!==e&&null!==i){var o=e.m_body,s=i.m_body;if(null!==o&&null!==s){var n=o.c_velocity,r=s.c_velocity,a=o.c_position,m=s.c_position,h=this.p_radiusA,c=this.p_radiusB,_=this.m_manifold,l=this.v_invMassA,u=this.v_invMassB,p=this.v_invIA,y=this.v_invIB,d=this.p_localCenterA,f=this.p_localCenterB;k(Ti,a.c);var v=a.a;k(zi,n.v);var x=n.w;k(Fi,m.c);var A=m.a;k(Li,r.v);var b=r.w;wt(Ni,d,Ti,v),wt(ki,f,Fi,A),Vi.recycle(),_.getWorldManifold(Vi,Ni,h,ki,c),k(this.v_normal,Vi.normal);for(var B=0;B0?1/I:0,X(qi,this.v_normal,1);var P=Q(w.rA,qi),S=Q(w.rB,qi),T=l+u+p*P*P+y*S*S;w.tangentMass=T>0?1/T:0,w.velocityBias=0;var z=0;z+=$(this.v_normal,Li),z+=$(this.v_normal,G(io,b,w.rB)),z-=$(this.v_normal,zi),(z-=$(this.v_normal,G(io,x,w.rA)))<-g.velocityThreshold&&(w.velocityBias=-this.v_restitution*z)}if(2==this.v_pointCount&&t.blockSolve){var F=this.v_points[0],L=this.v_points[1],q=Q(F.rA,this.v_normal),N=Q(F.rB,this.v_normal),D=Q(L.rA,this.v_normal),j=Q(L.rB,this.v_normal),O=l+u+p*q*q+y*N*N,R=l+u+p*D*D+y*j*j,J=l+u+p*q*D+y*N*j;if(O*O<1e3*(O*R-J*J)){this.v_K.ex.setNum(O,J),this.v_K.ey.setNum(J,R);var Y=this.v_K.ex.x,W=this.v_K.ey.x,H=this.v_K.ex.y,U=this.v_K.ey.y,Z=Y*U-W*H;0!==Z&&(Z=1/Z),this.v_normalMass.ex.x=Z*U,this.v_normalMass.ey.x=-Z*W,this.v_normalMass.ex.y=-Z*H,this.v_normalMass.ey.y=Z*Y}else this.v_pointCount=1}k(a.c,Ti),a.a=v,k(n.v,zi),n.w=x,k(m.c,Fi),m.a=A,k(r.v,Li),r.w=b}}},e.prototype.warmStartConstraint=function(t){var e=this.m_fixtureA,i=this.m_fixtureB;if(null!==e&&null!==i){var o=e.m_body,s=i.m_body;if(null!==o&&null!==s){var n=o.c_velocity,r=s.c_velocity;o.c_position,s.c_position;var a=this.v_invMassA,m=this.v_invIA,h=this.v_invMassB,c=this.v_invIB;k(zi,n.v);var _=n.w;k(Li,r.v);var l=r.w;k(Wi,this.v_normal),X(qi,Wi,1);for(var u=0;u=0&&Qi.y>=0){E($i,Qi,Gi),Y(to,$i.x,Wi),Y(eo,$i.y,Wi),Z(zi,-a,to,-a,eo,1,zi),l-=m*(Q(B.rA,to)+Q(w.rA,eo)),Z(Li,c,to,c,eo,1,Li),u+=_*(Q(B.rB,to)+Q(w.rB,eo)),B.normalImpulse=Qi.x,w.normalImpulse=Qi.y;break}if(Qi.x=-B.normalMass*Xi.x,Qi.y=0,V=0,C=this.v_K.ex.y*Qi.x+Xi.y,Qi.x>=0&&C>=0){E($i,Qi,Gi),Y(to,$i.x,Wi),Y(eo,$i.y,Wi),Z(zi,-a,to,-a,eo,1,zi),l-=m*(Q(B.rA,to)+Q(w.rA,eo)),Z(Li,c,to,c,eo,1,Li),u+=_*(Q(B.rB,to)+Q(w.rB,eo)),B.normalImpulse=Qi.x,w.normalImpulse=Qi.y;break}if(Qi.x=0,Qi.y=-w.normalMass*Xi.y,V=this.v_K.ey.x*Qi.y+Xi.x,C=0,Qi.y>=0&&V>=0){E($i,Qi,Gi),Y(to,$i.x,Wi),Y(eo,$i.y,Wi),Z(zi,-a,to,-a,eo,1,zi),l-=m*(Q(B.rA,to)+Q(w.rA,eo)),Z(Li,c,to,c,eo,1,Li),u+=_*(Q(B.rB,to)+Q(w.rB,eo)),B.normalImpulse=Qi.x,w.normalImpulse=Qi.y;break}if(Qi.x=0,Qi.y=0,V=Xi.x,C=Xi.y,V>=0&&C>=0){E($i,Qi,Gi),Y(to,$i.x,Wi),Y(eo,$i.y,Wi),Z(zi,-a,to,-a,eo,1,zi),l-=m*(Q(B.rA,to)+Q(w.rA,eo)),Z(Li,c,to,c,eo,1,Li),u+=_*(Q(B.rB,to)+Q(w.rB,eo)),B.normalImpulse=Qi.x,w.normalImpulse=Qi.y;break}break}}k(n.v,zi),n.w=l,k(r.v,Li),r.w=u}}},e.addType=function(t,e,i){Pi[t]=Pi[t]||{},Pi[t][e]=i},e.create=function(t,e,i,o){var s,n=t.m_shape.m_type,r=i.m_shape.m_type,a=Bi.allocate();if(s=Pi[n]&&Pi[n][r])a.initialize(t,e,i,o,s);else{if(!(s=Pi[r]&&Pi[r][n]))return null;a.initialize(i,o,t,e,s)}t=a.m_fixtureA,i=a.m_fixtureB,e=a.getChildIndexA(),o=a.getChildIndexB();var m=t.m_body,h=i.m_body;return a.m_nodeA.contact=a,a.m_nodeA.other=h,a.m_nodeA.prev=null,a.m_nodeA.next=m.m_contactList,null!=m.m_contactList&&(m.m_contactList.prev=a.m_nodeA),m.m_contactList=a.m_nodeA,a.m_nodeB.contact=a,a.m_nodeB.other=m,a.m_nodeB.prev=null,a.m_nodeB.next=h.m_contactList,null!=h.m_contactList&&(h.m_contactList.prev=a.m_nodeB),h.m_contactList=a.m_nodeB,0==t.isSensor()&&0==i.isSensor()&&(m.setAwake(!0),h.setAwake(!0)),a},e.destroy=function(t,e){var i=t.m_fixtureA,o=t.m_fixtureB;if(null!==i&&null!==o){var s=i.m_body,n=o.m_body;null!==s&&null!==n&&(t.isTouching()&&e.endContact(t),t.m_nodeA.prev&&(t.m_nodeA.prev.next=t.m_nodeA.next),t.m_nodeA.next&&(t.m_nodeA.next.prev=t.m_nodeA.prev),t.m_nodeA==s.m_contactList&&(s.m_contactList=t.m_nodeA.next),t.m_nodeB.prev&&(t.m_nodeB.prev.next=t.m_nodeB.next),t.m_nodeB.next&&(t.m_nodeB.next.prev=t.m_nodeB.prev),t.m_nodeB==n.m_contactList&&(n.m_contactList=t.m_nodeB.next),t.m_manifold.pointCount>0&&!i.m_isSensor&&!o.m_isSensor&&(s.setAwake(!0),n.setAwake(!0)),Bi.release(t))}},e}(),so={gravity:y.zero(),allowSleep:!0,warmStarting:!0,continuousPhysics:!0,subStepping:!1,blockSolve:!0,velocityIterations:8,positionIterations:3},no=function(){function t(e){if(!(this instanceof t))return new t(e);this.s_step=new Ee,e?y.isValid(e)&&(e={gravity:e}):e={},e=s(e,so),this.m_solver=new $e(this),this.m_broadPhase=new T,this.m_contactList=null,this.m_contactCount=0,this.m_bodyList=null,this.m_bodyCount=0,this.m_jointList=null,this.m_jointCount=0,this.m_stepComplete=!0,this.m_allowSleep=e.allowSleep,this.m_gravity=y.clone(e.gravity),this.m_clearForces=!0,this.m_newFixture=!1,this.m_locked=!1,this.m_warmStarting=e.warmStarting,this.m_continuousPhysics=e.continuousPhysics,this.m_subStepping=e.subStepping,this.m_blockSolve=e.blockSolve,this.m_velocityIterations=e.velocityIterations,this.m_positionIterations=e.positionIterations,this.m_t=0}return t.prototype._serialize=function(){for(var t=[],e=[],i=this.getBodyList();i;i=i.getNext())t.push(i);for(var o=this.getJointList();o;o=o.getNext())"function"==typeof o._serialize&&e.push(o);return{gravity:this.m_gravity,bodies:t,joints:e}},t._deserialize=function(e,i,o){if(!e)return new t;var s=new t(e.gravity);if(e.bodies)for(var n=e.bodies.length-1;n>=0;n-=1)s._addBody(o(Rt,e.bodies[n],s));if(e.joints)for(n=e.joints.length-1;n>=0;n--)s.createJoint(o(Jt,e.joints[n],s));return s},t.prototype.getBodyList=function(){return this.m_bodyList},t.prototype.getJointList=function(){return this.m_jointList},t.prototype.getContactList=function(){return this.m_contactList},t.prototype.getBodyCount=function(){return this.m_bodyCount},t.prototype.getJointCount=function(){return this.m_jointCount},t.prototype.getContactCount=function(){return this.m_contactCount},t.prototype.setGravity=function(t){this.m_gravity.set(t)},t.prototype.getGravity=function(){return this.m_gravity},t.prototype.isLocked=function(){return this.m_locked},t.prototype.setAllowSleeping=function(t){if(t!=this.m_allowSleep&&(this.m_allowSleep=t,0==this.m_allowSleep))for(var e=this.m_bodyList;e;e=e.m_next)e.setAwake(!0)},t.prototype.getAllowSleeping=function(){return this.m_allowSleep},t.prototype.setWarmStarting=function(t){this.m_warmStarting=t},t.prototype.getWarmStarting=function(){return this.m_warmStarting},t.prototype.setContinuousPhysics=function(t){this.m_continuousPhysics=t},t.prototype.getContinuousPhysics=function(){return this.m_continuousPhysics},t.prototype.setSubStepping=function(t){this.m_subStepping=t},t.prototype.getSubStepping=function(){return this.m_subStepping},t.prototype.setAutoClearForces=function(t){this.m_clearForces=t},t.prototype.getAutoClearForces=function(){return this.m_clearForces},t.prototype.clearForces=function(){for(var t=this.m_bodyList;t;t=t.getNext())t.m_force.setZero(),t.m_torque=0},t.prototype.queryAABB=function(t,e){var i=this.m_broadPhase;this.m_broadPhase.query(t,(function(t){var o=i.getUserData(t);return e(o.fixture)}))},t.prototype.rayCast=function(t,e,i){var o=this.m_broadPhase;this.m_broadPhase.rayCast({maxFraction:1,p1:t,p2:e},(function(t,e){var s=o.getUserData(e),n=s.fixture,r=s.childIndex,a={};if(n.rayCast(a,t,r)){var m=a.fraction,h=y.add(y.mulNumVec2(1-m,t.p1),y.mulNumVec2(m,t.p2));return i(n,h,a.normal,m)}return t.maxFraction}))},t.prototype.getProxyCount=function(){return this.m_broadPhase.getProxyCount()},t.prototype.getTreeHeight=function(){return this.m_broadPhase.getTreeHeight()},t.prototype.getTreeBalance=function(){return this.m_broadPhase.getTreeBalance()},t.prototype.getTreeQuality=function(){return this.m_broadPhase.getTreeQuality()},t.prototype.shiftOrigin=function(t){if(!this.m_locked){for(var e=this.m_bodyList;e;e=e.m_next)e.m_xf.p.sub(t),e.m_sweep.c0.sub(t),e.m_sweep.c.sub(t);for(var i=this.m_jointList;i;i=i.m_next)i.shiftOrigin(t);this.m_broadPhase.shiftOrigin(t)}},t.prototype._addBody=function(t){this.isLocked()||(t.m_prev=null,t.m_next=this.m_bodyList,this.m_bodyList&&(this.m_bodyList.m_prev=t),this.m_bodyList=t,++this.m_bodyCount)},t.prototype.createBody=function(t,e){if(this.isLocked())return null;var i={};t&&(y.isValid(t)?i={position:t,angle:e}:"object"==typeof t&&(i=t));var o=new Rt(this,i);return this._addBody(o),o},t.prototype.createDynamicBody=function(t,e){var i={};return t&&(y.isValid(t)?i={position:t,angle:e}:"object"==typeof t&&(i=t)),i.type="dynamic",this.createBody(i)},t.prototype.createKinematicBody=function(t,e){var i={};return t&&(y.isValid(t)?i={position:t,angle:e}:"object"==typeof t&&(i=t)),i.type="kinematic",this.createBody(i)},t.prototype.destroyBody=function(t){if(!this.isLocked()){if(t.m_destroyed)return!1;for(var e=t.m_jointList;e;){var i=e;e=e.next,this.publish("remove-joint",i.joint),this.destroyJoint(i.joint),t.m_jointList=e}t.m_jointList=null;for(var o=t.m_contactList;o;){var s=o;o=o.next,this.destroyContact(s.contact),t.m_contactList=o}t.m_contactList=null;for(var n=t.m_fixtureList;n;){var r=n;n=n.m_next,this.publish("remove-fixture",r),r.destroyProxies(this.m_broadPhase),t.m_fixtureList=n}return t.m_fixtureList=null,t.m_prev&&(t.m_prev.m_next=t.m_next),t.m_next&&(t.m_next.m_prev=t.m_prev),t==this.m_bodyList&&(this.m_bodyList=t.m_next),t.m_destroyed=!0,--this.m_bodyCount,this.publish("remove-body",t),!0}},t.prototype.createJoint=function(t){if(this.isLocked())return null;if(t.m_prev=null,t.m_next=this.m_jointList,this.m_jointList&&(this.m_jointList.m_prev=t),this.m_jointList=t,++this.m_jointCount,t.m_edgeA.joint=t,t.m_edgeA.other=t.m_bodyB,t.m_edgeA.prev=null,t.m_edgeA.next=t.m_bodyA.m_jointList,t.m_bodyA.m_jointList&&(t.m_bodyA.m_jointList.prev=t.m_edgeA),t.m_bodyA.m_jointList=t.m_edgeA,t.m_edgeB.joint=t,t.m_edgeB.other=t.m_bodyA,t.m_edgeB.prev=null,t.m_edgeB.next=t.m_bodyB.m_jointList,t.m_bodyB.m_jointList&&(t.m_bodyB.m_jointList.prev=t.m_edgeB),t.m_bodyB.m_jointList=t.m_edgeB,0==t.m_collideConnected)for(var e=t.m_bodyB.getContactList();e;e=e.next)e.other==t.m_bodyA&&e.contact.flagForFiltering();return t},t.prototype.destroyJoint=function(t){if(!this.isLocked()){t.m_prev&&(t.m_prev.m_next=t.m_next),t.m_next&&(t.m_next.m_prev=t.m_prev),t==this.m_jointList&&(this.m_jointList=t.m_next);var e=t.m_bodyA,i=t.m_bodyB;if(e.setAwake(!0),i.setAwake(!0),t.m_edgeA.prev&&(t.m_edgeA.prev.next=t.m_edgeA.next),t.m_edgeA.next&&(t.m_edgeA.next.prev=t.m_edgeA.prev),t.m_edgeA==e.m_jointList&&(e.m_jointList=t.m_edgeA.next),t.m_edgeA.prev=null,t.m_edgeA.next=null,t.m_edgeB.prev&&(t.m_edgeB.prev.next=t.m_edgeB.next),t.m_edgeB.next&&(t.m_edgeB.next.prev=t.m_edgeB.prev),t.m_edgeB==i.m_jointList&&(i.m_jointList=t.m_edgeB.next),t.m_edgeB.prev=null,t.m_edgeB.next=null,--this.m_jointCount,0==t.m_collideConnected)for(var o=i.getContactList();o;)o.other==e&&o.contact.flagForFiltering(),o=o.next;this.publish("remove-joint",t)}},t.prototype.step=function(t,e,i){if(this.publish("pre-step",t),(0|e)!==e&&(e=0),e=e||this.m_velocityIterations,i=i||this.m_positionIterations,this.m_newFixture&&(this.findNewContacts(),this.m_newFixture=!1),this.m_locked=!0,this.s_step.reset(t),this.s_step.velocityIterations=e,this.s_step.positionIterations=i,this.s_step.warmStarting=this.m_warmStarting,this.s_step.blockSolve=this.m_blockSolve,this.updateContacts(),this.m_stepComplete&&t>0){this.m_solver.solveWorld(this.s_step);for(var o=this.m_bodyList;o;o=o.getNext())0!=o.m_islandFlag&&(o.isStatic()||o.synchronizeFixtures());this.findNewContacts()}this.m_continuousPhysics&&t>0&&this.m_solver.solveWorldTOI(this.s_step),this.m_clearForces&&this.clearForces(),this.m_locked=!1,this.publish("post-step",t)},t.prototype.findNewContacts=function(){var t=this;this.m_broadPhase.updatePairs((function(e,i){return t.createContact(e,i)}))},t.prototype.createContact=function(t,e){var i=t.fixture,o=e.fixture,s=t.childIndex,n=e.childIndex,r=i.getBody(),a=o.getBody();if(r!=a){for(var m=a.getContactList();m;){if(m.other==r){var h=m.contact.getFixtureA(),c=m.contact.getFixtureB(),_=m.contact.getChildIndexA(),l=m.contact.getChildIndexB();if(h==i&&c==o&&_==s&&l==n)return;if(h==o&&c==i&&_==n&&l==s)return}m=m.next}if(0!=a.shouldCollide(r)&&0!=o.shouldCollide(i)){var u=oo.create(i,s,o,n);null!=u&&(u.m_prev=null,null!=this.m_contactList&&(u.m_next=this.m_contactList,this.m_contactList.m_prev=u),this.m_contactList=u,++this.m_contactCount)}}},t.prototype.updateContacts=function(){for(var t,e=this.m_contactList;t=e;){e=t.getNext();var i=t.getFixtureA(),o=t.getFixtureB(),s=t.getChildIndexA(),n=t.getChildIndexB(),r=i.getBody(),a=o.getBody();if(t.m_filterFlag){if(0==a.shouldCollide(r)){this.destroyContact(t);continue}if(0==o.shouldCollide(i)){this.destroyContact(t);continue}t.m_filterFlag=!1}var m=r.isAwake()&&!r.isStatic(),h=a.isAwake()&&!a.isStatic();if(0!=m||0!=h){var c=i.m_proxies[s].proxyId,_=o.m_proxies[n].proxyId;0!=this.m_broadPhase.testOverlap(c,_)?t.update(this):this.destroyContact(t)}}},t.prototype.destroyContact=function(t){t.m_prev&&(t.m_prev.m_next=t.m_next),t.m_next&&(t.m_next.m_prev=t.m_prev),t==this.m_contactList&&(this.m_contactList=t.m_next),oo.destroy(t,this),--this.m_contactCount},t.prototype.on=function(t,e){return"string"!=typeof t||"function"!=typeof e||(this._listeners||(this._listeners={}),this._listeners[t]||(this._listeners[t]=[]),this._listeners[t].push(e)),this},t.prototype.off=function(t,e){if("string"!=typeof t||"function"!=typeof e)return this;var i=this._listeners&&this._listeners[t];if(!i||!i.length)return this;var o=i.indexOf(e);return o>=0&&i.splice(o,1),this},t.prototype.publish=function(t,e,i,o){var s=this._listeners&&this._listeners[t];if(!s||!s.length)return 0;for(var n=0;n0?pt.mulVec2(i.q,c).neg():pt.mulVec2(i.q,c),!0)},e.prototype.computeAABB=function(t,e,i){at(ao,e,this.m_vertex1),at(mo,e,this.m_vertex2),v.combinePoints(t,ao,mo),v.extend(t,this.m_radius)},e.prototype.computeMass=function(t,e){t.mass=0,U(t.center,.5,this.m_vertex1,.5,this.m_vertex2),t.I=0},e.prototype.computeDistanceProxy=function(t){t.m_vertices[0]=this.m_vertex1,t.m_vertices[1]=this.m_vertex2,t.m_vertices.length=2,t.m_count=2,t.m_radius=this.m_radius},e.TYPE="edge",e}(Vt),co=ho,_o=q(0,0),lo=q(0,0),uo=function(t){function e(i,o){var s=this;return s instanceof e?((s=t.call(this)||this).m_type=e.TYPE,s.m_radius=g.polygonRadius,s.m_vertices=[],s.m_count=0,s.m_prevVertex=null,s.m_nextVertex=null,s.m_hasPrevVertex=!1,s.m_hasNextVertex=!1,s.m_isLoop=!!o,i&&i.length&&(o?s._createLoop(i):s._createChain(i)),s):new e(i,o)}return i(e,t),e.prototype._serialize=function(){var t={type:this.m_type,vertices:this.m_vertices,isLoop:this.m_isLoop,hasPrevVertex:this.m_hasPrevVertex,hasNextVertex:this.m_hasNextVertex,prevVertex:null,nextVertex:null};return this.m_prevVertex&&(t.prevVertex=this.m_prevVertex),this.m_nextVertex&&(t.nextVertex=this.m_nextVertex),t},e._deserialize=function(t,i,o){var s=[];if(t.vertices)for(var n=0;n0?(t.m_vertex0=this.m_vertices[e-1],t.m_hasVertex0=!0):(t.m_vertex0=this.m_prevVertex,t.m_hasVertex0=this.m_hasPrevVertex),em||h===m&&i[o].yp.lengthSquared()&&(u=r)}else u=r;if(++_,l=u,u===a)break}if(_<3)this._setAsBox(1,1);else{this.m_count=_,this.m_vertices=[];for(o=0;o<_;++o)this.m_vertices[o]=i[c[o]];for(o=0;o<_;++o){var f=o,v=o+1<_?o+1:0,x=y.sub(this.m_vertices[v],this.m_vertices[f]);this.m_normals[o]=y.crossVec2Num(x,1),this.m_normals[o].normalize()}this.m_centroid=function(t,e){for(var i=y.zero(),o=0,s=y.zero(),n=1/3,r=0;r0)return!1}return!0},e.prototype.rayCast=function(t,e,i,o){for(var s=pt.mulTVec2(i.q,y.sub(e.p1,i.p)),n=pt.mulTVec2(i.q,y.sub(e.p2,i.p)),r=y.sub(n,s),a=0,m=e.maxFraction,h=-1,c=0;c0&&_=0&&(t.fraction=a,t.normal=pt.mulVec2(i.q,this.m_normals[h]),!0)},e.prototype.computeAABB=function(t,e,i){for(var o=1/0,s=1/0,n=-1/0,r=-1/0,a=0;a0?this.m_length=+t.length:t.length<0||(t.anchorA||t.anchorA||t.anchorA||t.anchorA)&&(this.m_length=y.distance(this.m_bodyA.getWorldPoint(this.m_localAnchorA),this.m_bodyB.getWorldPoint(this.m_localAnchorB))),Number.isFinite(t.frequencyHz)&&(this.m_frequencyHz=t.frequencyHz),Number.isFinite(t.dampingRatio)&&(this.m_dampingRatio=t.dampingRatio)},e.prototype.getLocalAnchorA=function(){return this.m_localAnchorA},e.prototype.getLocalAnchorB=function(){return this.m_localAnchorB},e.prototype.setLength=function(t){this.m_length=t},e.prototype.getLength=function(){return this.m_length},e.prototype.setFrequency=function(t){this.m_frequencyHz=t},e.prototype.getFrequency=function(){return this.m_frequencyHz},e.prototype.setDampingRatio=function(t){this.m_dampingRatio=t},e.prototype.getDampingRatio=function(){return this.m_dampingRatio},e.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)},e.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)},e.prototype.getReactionForce=function(t){return y.mulNumVec2(this.m_impulse,this.m_u).mul(t)},e.prototype.getReactionTorque=function(t){return 0},e.prototype.initVelocityConstraints=function(t){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter,this.m_localCenterB=this.m_bodyB.m_sweep.localCenter,this.m_invMassA=this.m_bodyA.m_invMass,this.m_invMassB=this.m_bodyB.m_invMass,this.m_invIA=this.m_bodyA.m_invI,this.m_invIB=this.m_bodyB.m_invI;var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyA.c_velocity.v,s=this.m_bodyA.c_velocity.w,n=this.m_bodyB.c_position.c,r=this.m_bodyB.c_position.a,a=this.m_bodyB.c_velocity.v,m=this.m_bodyB.c_velocity.w,h=pt.neo(i),c=pt.neo(r);this.m_rA=pt.mulVec2(h,y.sub(this.m_localAnchorA,this.m_localCenterA)),this.m_rB=pt.mulVec2(c,y.sub(this.m_localAnchorB,this.m_localCenterB)),this.m_u=y.sub(y.add(n,this.m_rB),y.add(e,this.m_rA));var _=this.m_u.length();_>g.linearSlop?this.m_u.mul(1/_):this.m_u.setNum(0,0);var l=y.crossVec2Vec2(this.m_rA,this.m_u),u=y.crossVec2Vec2(this.m_rB,this.m_u),p=this.m_invMassA+this.m_invIA*l*l+this.m_invMassB+this.m_invIB*u*u;if(this.m_mass=0!=p?1/p:0,this.m_frequencyHz>0){var d=_-this.m_length,f=2*Fo*this.m_frequencyHz,v=2*this.m_mass*this.m_dampingRatio*f,x=this.m_mass*f*f,A=t.dt;this.m_gamma=A*(v+A*x),this.m_gamma=0!=this.m_gamma?1/this.m_gamma:0,this.m_bias=d*A*x*this.m_gamma,p+=this.m_gamma,this.m_mass=0!=p?1/p:0}else this.m_gamma=0,this.m_bias=0;if(t.warmStarting){this.m_impulse*=t.dtRatio;var b=y.mulNumVec2(this.m_impulse,this.m_u);o.subMul(this.m_invMassA,b),s-=this.m_invIA*y.crossVec2Vec2(this.m_rA,b),a.addMul(this.m_invMassB,b),m+=this.m_invIB*y.crossVec2Vec2(this.m_rB,b)}else this.m_impulse=0;this.m_bodyA.c_velocity.v.setVec2(o),this.m_bodyA.c_velocity.w=s,this.m_bodyB.c_velocity.v.setVec2(a),this.m_bodyB.c_velocity.w=m},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,s=this.m_bodyB.c_velocity.w,n=y.add(e,y.crossNumVec2(i,this.m_rA)),r=y.add(o,y.crossNumVec2(s,this.m_rB)),a=y.dot(this.m_u,r)-y.dot(this.m_u,n),m=-this.m_mass*(a+this.m_bias+this.m_gamma*this.m_impulse);this.m_impulse+=m;var h=y.mulNumVec2(m,this.m_u);e.subMul(this.m_invMassA,h),i-=this.m_invIA*y.crossVec2Vec2(this.m_rA,h),o.addMul(this.m_invMassB,h),s+=this.m_invIB*y.crossVec2Vec2(this.m_rB,h),this.m_bodyA.c_velocity.v.setVec2(e),this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v.setVec2(o),this.m_bodyB.c_velocity.w=s},e.prototype.solvePositionConstraints=function(t){if(this.m_frequencyHz>0)return!0;var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyB.c_position.c,s=this.m_bodyB.c_position.a,n=pt.neo(i),r=pt.neo(s),a=pt.mulSub(n,this.m_localAnchorA,this.m_localCenterA),m=pt.mulSub(r,this.m_localAnchorB,this.m_localCenterB),c=y.sub(y.add(o,m),y.add(e,a)),_=h(c.normalize()-this.m_length,-g.maxLinearCorrection,g.maxLinearCorrection),l=-this.m_mass*_,u=y.mulNumVec2(l,c);return e.subMul(this.m_invMassA,u),i-=this.m_invIA*y.crossVec2Vec2(a,u),o.addMul(this.m_invMassB,u),s+=this.m_invIB*y.crossVec2Vec2(m,u),this.m_bodyA.c_position.c.setVec2(e),this.m_bodyA.c_position.a=i,this.m_bodyB.c_position.c.setVec2(o),this.m_bodyB.c_position.a=s,zo(_)0&&(this.m_angularMass=1/this.m_angularMass),t.warmStarting){this.m_linearImpulse.mul(t.dtRatio),this.m_angularImpulse*=t.dtRatio;var p=y.neo(this.m_linearImpulse.x,this.m_linearImpulse.y);i.subMul(h,p),o-=_*(y.crossVec2Vec2(this.m_rA,p)+this.m_angularImpulse),n.addMul(c,p),r+=l*(y.crossVec2Vec2(this.m_rB,p)+this.m_angularImpulse)}else this.m_linearImpulse.setZero(),this.m_angularImpulse=0;this.m_bodyA.c_velocity.v=i,this.m_bodyA.c_velocity.w=o,this.m_bodyB.c_velocity.v=n,this.m_bodyB.c_velocity.w=r},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,s=this.m_bodyB.c_velocity.w,n=this.m_invMassA,r=this.m_invMassB,a=this.m_invIA,m=this.m_invIB,c=t.dt,_=s-i,l=-this.m_angularMass*_,u=this.m_angularImpulse,p=c*this.m_maxTorque;this.m_angularImpulse=h(this.m_angularImpulse+l,-p,p),i-=a*(l=this.m_angularImpulse-u),s+=m*l;_=y.sub(y.add(o,y.crossNumVec2(s,this.m_rB)),y.add(e,y.crossNumVec2(i,this.m_rA))),l=y.neg(oi.mulVec2(this.m_linearMass,_)),u=this.m_linearImpulse;this.m_linearImpulse.add(l);p=c*this.m_maxForce;this.m_linearImpulse.lengthSquared()>p*p&&(this.m_linearImpulse.normalize(),this.m_linearImpulse.mul(p)),l=y.sub(this.m_linearImpulse,u),e.subMul(n,l),i-=a*y.crossVec2Vec2(this.m_rA,l),o.addMul(r,l),s+=m*y.crossVec2Vec2(this.m_rB,l),this.m_bodyA.c_velocity.v=e,this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v=o,this.m_bodyB.c_velocity.w=s},e.prototype.solvePositionConstraints=function(t){return!0},e.TYPE="friction-joint",e}(Jt),Do=function(){function t(t,e,i){"object"==typeof t&&null!==t?(this.ex=ro.clone(t),this.ey=ro.clone(e),this.ez=ro.clone(i)):(this.ex=ro.zero(),this.ey=ro.zero(),this.ez=ro.zero())}return t.prototype.toString=function(){return JSON.stringify(this)},t.isValid=function(t){return null!=t&&(ro.isValid(t.ex)&&ro.isValid(t.ey)&&ro.isValid(t.ez))},t.assert=function(t){},t.prototype.setZero=function(){return this.ex.setZero(),this.ey.setZero(),this.ez.setZero(),this},t.prototype.solve33=function(t){var e=this.ey.y*this.ez.z-this.ey.z*this.ez.y,i=this.ey.z*this.ez.x-this.ey.x*this.ez.z,o=this.ey.x*this.ez.y-this.ey.y*this.ez.x,s=this.ex.x*e+this.ex.y*i+this.ex.z*o;0!==s&&(s=1/s);var n=new ro;return e=this.ey.y*this.ez.z-this.ey.z*this.ez.y,i=this.ey.z*this.ez.x-this.ey.x*this.ez.z,o=this.ey.x*this.ez.y-this.ey.y*this.ez.x,n.x=s*(t.x*e+t.y*i+t.z*o),e=t.y*this.ez.z-t.z*this.ez.y,i=t.z*this.ez.x-t.x*this.ez.z,o=t.x*this.ez.y-t.y*this.ez.x,n.y=s*(this.ex.x*e+this.ex.y*i+this.ex.z*o),e=this.ey.y*t.z-this.ey.z*t.y,i=this.ey.z*t.x-this.ey.x*t.z,o=this.ey.x*t.y-this.ey.y*t.x,n.z=s*(this.ex.x*e+this.ex.y*i+this.ex.z*o),n},t.prototype.solve22=function(t){var e=this.ex.x,i=this.ey.x,o=this.ex.y,s=this.ey.y,n=e*s-i*o;0!==n&&(n=1/n);var r=y.zero();return r.x=n*(s*t.x-i*t.y),r.y=n*(e*t.y-o*t.x),r},t.prototype.getInverse22=function(t){var e=this.ex.x,i=this.ey.x,o=this.ex.y,s=this.ey.y,n=e*s-i*o;0!==n&&(n=1/n),t.ex.x=n*s,t.ey.x=-n*i,t.ex.z=0,t.ex.y=-n*o,t.ey.y=n*e,t.ey.z=0,t.ez.x=0,t.ez.y=0,t.ez.z=0},t.prototype.getSymInverse33=function(t){var e=ro.dot(this.ex,ro.cross(this.ey,this.ez));0!==e&&(e=1/e);var i=this.ex.x,o=this.ey.x,s=this.ez.x,n=this.ey.y,r=this.ez.y,a=this.ez.z;t.ex.x=e*(n*a-r*r),t.ex.y=e*(s*r-o*a),t.ex.z=e*(o*r-s*n),t.ey.x=t.ex.y,t.ey.y=e*(i*a-s*s),t.ey.z=e*(s*o-i*r),t.ez.x=t.ex.z,t.ez.y=t.ey.z,t.ez.z=e*(i*n-o*o)},t.mul=function(t,e){if(e&&"z"in e&&"y"in e&&"x"in e){var i=t.ex.x*e.x+t.ey.x*e.y+t.ez.x*e.z,o=t.ex.y*e.x+t.ey.y*e.y+t.ez.y*e.z,s=t.ex.z*e.x+t.ey.z*e.y+t.ez.z*e.z;return new ro(i,o,s)}if(e&&"y"in e&&"x"in e){i=t.ex.x*e.x+t.ey.x*e.y,o=t.ex.y*e.x+t.ey.y*e.y;return y.neo(i,o)}},t.mulVec3=function(t,e){var i=t.ex.x*e.x+t.ey.x*e.y+t.ez.x*e.z,o=t.ex.y*e.x+t.ey.y*e.y+t.ez.y*e.z,s=t.ex.z*e.x+t.ey.z*e.y+t.ez.z*e.z;return new ro(i,o,s)},t.mulVec2=function(t,e){var i=t.ex.x*e.x+t.ey.x*e.y,o=t.ex.y*e.x+t.ey.y*e.y;return y.neo(i,o)},t.add=function(e,i){return new t(ro.add(e.ex,i.ex),ro.add(e.ey,i.ey),ro.add(e.ez,i.ez))},t}(),jo=Math.abs;!function(t){t[t.inactiveLimit=0]="inactiveLimit",t[t.atLowerLimit=1]="atLowerLimit",t[t.atUpperLimit=2]="atUpperLimit",t[t.equalLimits=3]="equalLimits"}(Vo||(Vo={}));var Oo,Ro=0,Eo=0,Jo=0,Yo=0,Wo=!1,Ho=!1,Uo=function(t){function e(i,o,s,n){var r,a,m,h,c,_,l=this;return l instanceof e?(i=null!=i?i:{},o=(l=t.call(this,i,o,s)||this).m_bodyA,s=l.m_bodyB,l.m_mass=new Do,l.m_limitState=Vo.inactiveLimit,l.m_type=e.TYPE,y.isValid(n)?l.m_localAnchorA=o.getLocalPoint(n):y.isValid(i.localAnchorA)?l.m_localAnchorA=y.clone(i.localAnchorA):l.m_localAnchorA=y.zero(),y.isValid(n)?l.m_localAnchorB=s.getLocalPoint(n):y.isValid(i.localAnchorB)?l.m_localAnchorB=y.clone(i.localAnchorB):l.m_localAnchorB=y.zero(),Number.isFinite(i.referenceAngle)?l.m_referenceAngle=i.referenceAngle:l.m_referenceAngle=s.getAngle()-o.getAngle(),l.m_impulse=new ro,l.m_motorImpulse=0,l.m_lowerAngle=null!==(r=i.lowerAngle)&&void 0!==r?r:Ro,l.m_upperAngle=null!==(a=i.upperAngle)&&void 0!==a?a:Eo,l.m_maxMotorTorque=null!==(m=i.maxMotorTorque)&&void 0!==m?m:Jo,l.m_motorSpeed=null!==(h=i.motorSpeed)&&void 0!==h?h:Yo,l.m_enableLimit=null!==(c=i.enableLimit)&&void 0!==c?c:Wo,l.m_enableMotor=null!==(_=i.enableMotor)&&void 0!==_?_:Ho,l):new e(i,o,s,n)}return i(e,t),e.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,lowerAngle:this.m_lowerAngle,upperAngle:this.m_upperAngle,maxMotorTorque:this.m_maxMotorTorque,motorSpeed:this.m_motorSpeed,enableLimit:this.m_enableLimit,enableMotor:this.m_enableMotor,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,referenceAngle:this.m_referenceAngle}},e._deserialize=function(t,i,s){return(t=o({},t)).bodyA=s(Rt,t.bodyA,i),t.bodyB=s(Rt,t.bodyB,i),new e(t)},e.prototype._reset=function(t){t.anchorA?this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(t.anchorA)):t.localAnchorA&&this.m_localAnchorA.setVec2(t.localAnchorA),t.anchorB?this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(t.anchorB)):t.localAnchorB&&this.m_localAnchorB.setVec2(t.localAnchorB),Number.isFinite(t.referenceAngle)&&(this.m_referenceAngle=t.referenceAngle),void 0!==t.enableLimit&&(this.m_enableLimit=t.enableLimit),Number.isFinite(t.lowerAngle)&&(this.m_lowerAngle=t.lowerAngle),Number.isFinite(t.upperAngle)&&(this.m_upperAngle=t.upperAngle),Number.isFinite(t.maxMotorTorque)&&(this.m_maxMotorTorque=t.maxMotorTorque),Number.isFinite(t.motorSpeed)&&(this.m_motorSpeed=t.motorSpeed),void 0!==t.enableMotor&&(this.m_enableMotor=t.enableMotor)},e.prototype.getLocalAnchorA=function(){return this.m_localAnchorA},e.prototype.getLocalAnchorB=function(){return this.m_localAnchorB},e.prototype.getReferenceAngle=function(){return this.m_referenceAngle},e.prototype.getJointAngle=function(){var t=this.m_bodyA;return this.m_bodyB.m_sweep.a-t.m_sweep.a-this.m_referenceAngle},e.prototype.getJointSpeed=function(){var t=this.m_bodyA;return this.m_bodyB.m_angularVelocity-t.m_angularVelocity},e.prototype.isMotorEnabled=function(){return this.m_enableMotor},e.prototype.enableMotor=function(t){t!=this.m_enableMotor&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_enableMotor=t)},e.prototype.getMotorTorque=function(t){return t*this.m_motorImpulse},e.prototype.setMotorSpeed=function(t){t!=this.m_motorSpeed&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_motorSpeed=t)},e.prototype.getMotorSpeed=function(){return this.m_motorSpeed},e.prototype.setMaxMotorTorque=function(t){t!=this.m_maxMotorTorque&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_maxMotorTorque=t)},e.prototype.getMaxMotorTorque=function(){return this.m_maxMotorTorque},e.prototype.isLimitEnabled=function(){return this.m_enableLimit},e.prototype.enableLimit=function(t){t!=this.m_enableLimit&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_enableLimit=t,this.m_impulse.z=0)},e.prototype.getLowerLimit=function(){return this.m_lowerAngle},e.prototype.getUpperLimit=function(){return this.m_upperAngle},e.prototype.setLimits=function(t,e){t==this.m_lowerAngle&&e==this.m_upperAngle||(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_impulse.z=0,this.m_lowerAngle=t,this.m_upperAngle=e)},e.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)},e.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)},e.prototype.getReactionForce=function(t){return y.neo(this.m_impulse.x,this.m_impulse.y).mul(t)},e.prototype.getReactionTorque=function(t){return t*this.m_impulse.z},e.prototype.initVelocityConstraints=function(t){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter,this.m_localCenterB=this.m_bodyB.m_sweep.localCenter,this.m_invMassA=this.m_bodyA.m_invMass,this.m_invMassB=this.m_bodyB.m_invMass,this.m_invIA=this.m_bodyA.m_invI,this.m_invIB=this.m_bodyB.m_invI;var e=this.m_bodyA.c_position.a,i=this.m_bodyA.c_velocity.v,o=this.m_bodyA.c_velocity.w,s=this.m_bodyB.c_position.a,n=this.m_bodyB.c_velocity.v,r=this.m_bodyB.c_velocity.w,a=pt.neo(e),m=pt.neo(s);this.m_rA=pt.mulVec2(a,y.sub(this.m_localAnchorA,this.m_localCenterA)),this.m_rB=pt.mulVec2(m,y.sub(this.m_localAnchorB,this.m_localCenterB));var h=this.m_invMassA,c=this.m_invMassB,_=this.m_invIA,l=this.m_invIB,u=_+l===0;if(this.m_mass.ex.x=h+c+this.m_rA.y*this.m_rA.y*_+this.m_rB.y*this.m_rB.y*l,this.m_mass.ey.x=-this.m_rA.y*this.m_rA.x*_-this.m_rB.y*this.m_rB.x*l,this.m_mass.ez.x=-this.m_rA.y*_-this.m_rB.y*l,this.m_mass.ex.y=this.m_mass.ey.x,this.m_mass.ey.y=h+c+this.m_rA.x*this.m_rA.x*_+this.m_rB.x*this.m_rB.x*l,this.m_mass.ez.y=this.m_rA.x*_+this.m_rB.x*l,this.m_mass.ex.z=this.m_mass.ez.x,this.m_mass.ey.z=this.m_mass.ez.y,this.m_mass.ez.z=_+l,this.m_motorMass=_+l,this.m_motorMass>0&&(this.m_motorMass=1/this.m_motorMass),(0==this.m_enableMotor||u)&&(this.m_motorImpulse=0),this.m_enableLimit&&0==u){var p=s-e-this.m_referenceAngle;jo(this.m_upperAngle-this.m_lowerAngle)<2*g.angularSlop?this.m_limitState=Vo.equalLimits:p<=this.m_lowerAngle?(this.m_limitState!=Vo.atLowerLimit&&(this.m_impulse.z=0),this.m_limitState=Vo.atLowerLimit):p>=this.m_upperAngle?(this.m_limitState!=Vo.atUpperLimit&&(this.m_impulse.z=0),this.m_limitState=Vo.atUpperLimit):(this.m_limitState=Vo.inactiveLimit,this.m_impulse.z=0)}else this.m_limitState=Vo.inactiveLimit;if(t.warmStarting){this.m_impulse.mul(t.dtRatio),this.m_motorImpulse*=t.dtRatio;var d=y.neo(this.m_impulse.x,this.m_impulse.y);i.subMul(h,d),o-=_*(y.crossVec2Vec2(this.m_rA,d)+this.m_motorImpulse+this.m_impulse.z),n.addMul(c,d),r+=l*(y.crossVec2Vec2(this.m_rB,d)+this.m_motorImpulse+this.m_impulse.z)}else this.m_impulse.setZero(),this.m_motorImpulse=0;this.m_bodyA.c_velocity.v=i,this.m_bodyA.c_velocity.w=o,this.m_bodyB.c_velocity.v=n,this.m_bodyB.c_velocity.w=r},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,s=this.m_bodyB.c_velocity.w,n=this.m_invMassA,r=this.m_invMassB,a=this.m_invIA,m=this.m_invIB,c=a+m===0;if(this.m_enableMotor&&this.m_limitState!=Vo.equalLimits&&0==c){var _=s-i-this.m_motorSpeed,l=-this.m_motorMass*_,u=this.m_motorImpulse,p=t.dt*this.m_maxMotorTorque;this.m_motorImpulse=h(this.m_motorImpulse+l,-p,p),i-=a*(l=this.m_motorImpulse-u),s+=m*l}if(this.m_enableLimit&&this.m_limitState!=Vo.inactiveLimit&&0==c){var d=y.zero();d.addCombine(1,o,1,y.crossNumVec2(s,this.m_rB)),d.subCombine(1,e,1,y.crossNumVec2(i,this.m_rA));var f=s-i;_=new ro(d.x,d.y,f),l=ro.neg(this.m_mass.solve33(_));if(this.m_limitState==Vo.equalLimits)this.m_impulse.add(l);else if(this.m_limitState==Vo.atLowerLimit){if(this.m_impulse.z+l.z<0){var v=y.combine(-1,d,this.m_impulse.z,y.neo(this.m_mass.ez.x,this.m_mass.ez.y)),x=this.m_mass.solve22(v);l.x=x.x,l.y=x.y,l.z=-this.m_impulse.z,this.m_impulse.x+=x.x,this.m_impulse.y+=x.y,this.m_impulse.z=0}else this.m_impulse.add(l)}else if(this.m_limitState==Vo.atUpperLimit){if(this.m_impulse.z+l.z>0){v=y.combine(-1,d,this.m_impulse.z,y.neo(this.m_mass.ez.x,this.m_mass.ez.y)),x=this.m_mass.solve22(v);l.x=x.x,l.y=x.y,l.z=-this.m_impulse.z,this.m_impulse.x+=x.x,this.m_impulse.y+=x.y,this.m_impulse.z=0}else this.m_impulse.add(l)}var A=y.neo(l.x,l.y);e.subMul(n,A),i-=a*(y.crossVec2Vec2(this.m_rA,A)+l.z),o.addMul(r,A),s+=m*(y.crossVec2Vec2(this.m_rB,A)+l.z)}else{(_=y.zero()).addCombine(1,o,1,y.crossNumVec2(s,this.m_rB)),_.subCombine(1,e,1,y.crossNumVec2(i,this.m_rA));l=this.m_mass.solve22(y.neg(_));this.m_impulse.x+=l.x,this.m_impulse.y+=l.y,e.subMul(n,l),i-=a*y.crossVec2Vec2(this.m_rA,l),o.addMul(r,l),s+=m*y.crossVec2Vec2(this.m_rB,l)}this.m_bodyA.c_velocity.v=e,this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v=o,this.m_bodyB.c_velocity.w=s},e.prototype.solvePositionConstraints=function(t){var e,i=this.m_bodyA.c_position.c,o=this.m_bodyA.c_position.a,s=this.m_bodyB.c_position.c,n=this.m_bodyB.c_position.a,r=pt.neo(o),a=pt.neo(n),m=0,c=this.m_invIA+this.m_invIB==0;if(this.m_enableLimit&&this.m_limitState!=Vo.inactiveLimit&&0==c){var _=n-o-this.m_referenceAngle,l=0;if(this.m_limitState==Vo.equalLimits){var u=h(_-this.m_lowerAngle,-g.maxAngularCorrection,g.maxAngularCorrection);l=-this.m_motorMass*u,m=jo(u)}else if(this.m_limitState==Vo.atLowerLimit){m=-(u=_-this.m_lowerAngle),u=h(u+g.angularSlop,-g.maxAngularCorrection,0),l=-this.m_motorMass*u}else if(this.m_limitState==Vo.atUpperLimit){m=u=_-this.m_upperAngle,u=h(u-g.angularSlop,0,g.maxAngularCorrection),l=-this.m_motorMass*u}o-=this.m_invIA*l,n+=this.m_invIB*l}r.setAngle(o),a.setAngle(n);var p=pt.mulVec2(r,y.sub(this.m_localAnchorA,this.m_localCenterA)),d=pt.mulVec2(a,y.sub(this.m_localAnchorB,this.m_localCenterB));(u=y.zero()).addCombine(1,s,1,d),u.subCombine(1,i,1,p),e=u.length();var f=this.m_invMassA,v=this.m_invMassB,x=this.m_invIA,A=this.m_invIB,b=new oi;b.ex.x=f+v+x*p.y*p.y+A*d.y*d.y,b.ex.y=-x*p.x*p.y-A*d.x*d.y,b.ey.x=b.ex.y,b.ey.y=f+v+x*p.x*p.x+A*d.x*d.x;var B=y.neg(b.solve(u));return i.subMul(f,B),o-=x*y.crossVec2Vec2(p,B),s.addMul(v,B),n+=A*y.crossVec2Vec2(d,B),this.m_bodyA.c_position.c.setVec2(i),this.m_bodyA.c_position.a=o,this.m_bodyB.c_position.c.setVec2(s),this.m_bodyB.c_position.a=n,e<=g.linearSlop&&m<=g.angularSlop},e.TYPE="revolute-joint",e}(Jt),Zo=Math.abs,Ko=Math.max,Xo=Math.min;!function(t){t[t.inactiveLimit=0]="inactiveLimit",t[t.atLowerLimit=1]="atLowerLimit",t[t.atUpperLimit=2]="atUpperLimit",t[t.equalLimits=3]="equalLimits"}(Oo||(Oo={}));var Go,Qo={enableLimit:!1,lowerTranslation:0,upperTranslation:0,enableMotor:!1,maxMotorForce:0,motorSpeed:0},$o=function(t){function e(i,o,n,r,a){var m=this;return m instanceof e?(i=s(i,Qo),o=(m=t.call(this,i,o,n)||this).m_bodyA,n=m.m_bodyB,m.m_type=e.TYPE,m.m_localAnchorA=y.clone(r?o.getLocalPoint(r):i.localAnchorA||y.zero()),m.m_localAnchorB=y.clone(r?n.getLocalPoint(r):i.localAnchorB||y.zero()),m.m_localXAxisA=y.clone(a?o.getLocalVector(a):i.localAxisA||y.neo(1,0)),m.m_localXAxisA.normalize(),m.m_localYAxisA=y.crossNumVec2(1,m.m_localXAxisA),m.m_referenceAngle=Number.isFinite(i.referenceAngle)?i.referenceAngle:n.getAngle()-o.getAngle(),m.m_impulse=new ro,m.m_motorMass=0,m.m_motorImpulse=0,m.m_lowerTranslation=i.lowerTranslation,m.m_upperTranslation=i.upperTranslation,m.m_maxMotorForce=i.maxMotorForce,m.m_motorSpeed=i.motorSpeed,m.m_enableLimit=i.enableLimit,m.m_enableMotor=i.enableMotor,m.m_limitState=Oo.inactiveLimit,m.m_axis=y.zero(),m.m_perp=y.zero(),m.m_K=new Do,m):new e(i,o,n,r,a)}return i(e,t),e.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,lowerTranslation:this.m_lowerTranslation,upperTranslation:this.m_upperTranslation,maxMotorForce:this.m_maxMotorForce,motorSpeed:this.m_motorSpeed,enableLimit:this.m_enableLimit,enableMotor:this.m_enableMotor,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,localAxisA:this.m_localXAxisA,referenceAngle:this.m_referenceAngle}},e._deserialize=function(t,i,s){return(t=o({},t)).bodyA=s(Rt,t.bodyA,i),t.bodyB=s(Rt,t.bodyB,i),t.localAxisA=y.clone(t.localAxisA),new e(t)},e.prototype._reset=function(t){t.anchorA?this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(t.anchorA)):t.localAnchorA&&this.m_localAnchorA.setVec2(t.localAnchorA),t.anchorB?this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(t.anchorB)):t.localAnchorB&&this.m_localAnchorB.setVec2(t.localAnchorB),t.localAxisA&&(this.m_localXAxisA.setVec2(t.localAxisA),this.m_localYAxisA.setVec2(y.crossNumVec2(1,t.localAxisA))),Number.isFinite(t.referenceAngle)&&(this.m_referenceAngle=t.referenceAngle),void 0!==t.enableLimit&&(this.m_enableLimit=!!t.enableLimit),Number.isFinite(t.lowerTranslation)&&(this.m_lowerTranslation=t.lowerTranslation),Number.isFinite(t.upperTranslation)&&(this.m_upperTranslation=t.upperTranslation),void 0!==t.enableMotor&&(this.m_enableMotor=!!t.enableMotor),Number.isFinite(t.maxMotorForce)&&(this.m_maxMotorForce=t.maxMotorForce),Number.isFinite(t.motorSpeed)&&(this.m_motorSpeed=t.motorSpeed)},e.prototype.getLocalAnchorA=function(){return this.m_localAnchorA},e.prototype.getLocalAnchorB=function(){return this.m_localAnchorB},e.prototype.getLocalAxisA=function(){return this.m_localXAxisA},e.prototype.getReferenceAngle=function(){return this.m_referenceAngle},e.prototype.getJointTranslation=function(){var t=this.m_bodyA.getWorldPoint(this.m_localAnchorA),e=this.m_bodyB.getWorldPoint(this.m_localAnchorB),i=y.sub(e,t),o=this.m_bodyA.getWorldVector(this.m_localXAxisA);return y.dot(i,o)},e.prototype.getJointSpeed=function(){var t=this.m_bodyA,e=this.m_bodyB,i=pt.mulVec2(t.m_xf.q,y.sub(this.m_localAnchorA,t.m_sweep.localCenter)),o=pt.mulVec2(e.m_xf.q,y.sub(this.m_localAnchorB,e.m_sweep.localCenter)),s=y.add(t.m_sweep.c,i),n=y.add(e.m_sweep.c,o),r=y.sub(n,s),a=pt.mulVec2(t.m_xf.q,this.m_localXAxisA),m=t.m_linearVelocity,h=e.m_linearVelocity,c=t.m_angularVelocity,_=e.m_angularVelocity;return y.dot(r,y.crossNumVec2(c,a))+y.dot(a,y.sub(y.addCrossNumVec2(h,_,o),y.addCrossNumVec2(m,c,i)))},e.prototype.isLimitEnabled=function(){return this.m_enableLimit},e.prototype.enableLimit=function(t){t!=this.m_enableLimit&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_enableLimit=t,this.m_impulse.z=0)},e.prototype.getLowerLimit=function(){return this.m_lowerTranslation},e.prototype.getUpperLimit=function(){return this.m_upperTranslation},e.prototype.setLimits=function(t,e){t==this.m_lowerTranslation&&e==this.m_upperTranslation||(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_lowerTranslation=t,this.m_upperTranslation=e,this.m_impulse.z=0)},e.prototype.isMotorEnabled=function(){return this.m_enableMotor},e.prototype.enableMotor=function(t){t!=this.m_enableMotor&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_enableMotor=t)},e.prototype.setMotorSpeed=function(t){t!=this.m_motorSpeed&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_motorSpeed=t)},e.prototype.setMaxMotorForce=function(t){t!=this.m_maxMotorForce&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_maxMotorForce=t)},e.prototype.getMaxMotorForce=function(){return this.m_maxMotorForce},e.prototype.getMotorSpeed=function(){return this.m_motorSpeed},e.prototype.getMotorForce=function(t){return t*this.m_motorImpulse},e.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)},e.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)},e.prototype.getReactionForce=function(t){return y.combine(this.m_impulse.x,this.m_perp,this.m_motorImpulse+this.m_impulse.z,this.m_axis).mul(t)},e.prototype.getReactionTorque=function(t){return t*this.m_impulse.y},e.prototype.initVelocityConstraints=function(t){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter,this.m_localCenterB=this.m_bodyB.m_sweep.localCenter,this.m_invMassA=this.m_bodyA.m_invMass,this.m_invMassB=this.m_bodyB.m_invMass,this.m_invIA=this.m_bodyA.m_invI,this.m_invIB=this.m_bodyB.m_invI;var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyA.c_velocity.v,s=this.m_bodyA.c_velocity.w,n=this.m_bodyB.c_position.c,r=this.m_bodyB.c_position.a,a=this.m_bodyB.c_velocity.v,m=this.m_bodyB.c_velocity.w,h=pt.neo(i),c=pt.neo(r),_=pt.mulVec2(h,y.sub(this.m_localAnchorA,this.m_localCenterA)),l=pt.mulVec2(c,y.sub(this.m_localAnchorB,this.m_localCenterB)),u=y.zero();u.addCombine(1,n,1,l),u.subCombine(1,e,1,_);var p=this.m_invMassA,d=this.m_invMassB,f=this.m_invIA,v=this.m_invIB;this.m_axis=pt.mulVec2(h,this.m_localXAxisA),this.m_a1=y.crossVec2Vec2(y.add(u,_),this.m_axis),this.m_a2=y.crossVec2Vec2(l,this.m_axis),this.m_motorMass=p+d+f*this.m_a1*this.m_a1+v*this.m_a2*this.m_a2,this.m_motorMass>0&&(this.m_motorMass=1/this.m_motorMass),this.m_perp=pt.mulVec2(h,this.m_localYAxisA),this.m_s1=y.crossVec2Vec2(y.add(u,_),this.m_perp),this.m_s2=y.crossVec2Vec2(l,this.m_perp),y.crossVec2Vec2(_,this.m_perp);var x=p+d+f*this.m_s1*this.m_s1+v*this.m_s2*this.m_s2,A=f*this.m_s1+v*this.m_s2,b=f*this.m_s1*this.m_a1+v*this.m_s2*this.m_a2,B=f+v;0==B&&(B=1);var w=f*this.m_a1+v*this.m_a2,V=p+d+f*this.m_a1*this.m_a1+v*this.m_a2*this.m_a2;if(this.m_K.ex.set(x,A,b),this.m_K.ey.set(A,B,w),this.m_K.ez.set(b,w,V),this.m_enableLimit){var C=y.dot(this.m_axis,u);Zo(this.m_upperTranslation-this.m_lowerTranslation)<2*g.linearSlop?this.m_limitState=Oo.equalLimits:C<=this.m_lowerTranslation?this.m_limitState!=Oo.atLowerLimit&&(this.m_limitState=Oo.atLowerLimit,this.m_impulse.z=0):C>=this.m_upperTranslation?this.m_limitState!=Oo.atUpperLimit&&(this.m_limitState=Oo.atUpperLimit,this.m_impulse.z=0):(this.m_limitState=Oo.inactiveLimit,this.m_impulse.z=0)}else this.m_limitState=Oo.inactiveLimit,this.m_impulse.z=0;if(0==this.m_enableMotor&&(this.m_motorImpulse=0),t.warmStarting){this.m_impulse.mul(t.dtRatio),this.m_motorImpulse*=t.dtRatio;var M=y.combine(this.m_impulse.x,this.m_perp,this.m_motorImpulse+this.m_impulse.z,this.m_axis),I=this.m_impulse.x*this.m_s1+this.m_impulse.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_a1,P=this.m_impulse.x*this.m_s2+this.m_impulse.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_a2;o.subMul(p,M),s-=f*I,a.addMul(d,M),m+=v*P}else this.m_impulse.setZero(),this.m_motorImpulse=0;this.m_bodyA.c_velocity.v.setVec2(o),this.m_bodyA.c_velocity.w=s,this.m_bodyB.c_velocity.v.setVec2(a),this.m_bodyB.c_velocity.w=m},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,s=this.m_bodyB.c_velocity.w,n=this.m_invMassA,r=this.m_invMassB,a=this.m_invIA,m=this.m_invIB;if(this.m_enableMotor&&this.m_limitState!=Oo.equalLimits){var c=y.dot(this.m_axis,y.sub(o,e))+this.m_a2*s-this.m_a1*i,_=this.m_motorMass*(this.m_motorSpeed-c),l=this.m_motorImpulse,u=t.dt*this.m_maxMotorForce;this.m_motorImpulse=h(this.m_motorImpulse+_,-u,u),_=this.m_motorImpulse-l;var p=y.mulNumVec2(_,this.m_axis),d=_*this.m_a1,f=_*this.m_a2;e.subMul(n,p),i-=a*d,o.addMul(r,p),s+=m*f}var v=y.zero();if(v.x+=y.dot(this.m_perp,o)+this.m_s2*s,v.x-=y.dot(this.m_perp,e)+this.m_s1*i,v.y=s-i,this.m_enableLimit&&this.m_limitState!=Oo.inactiveLimit){var x=0;x+=y.dot(this.m_axis,o)+this.m_a2*s,x-=y.dot(this.m_axis,e)+this.m_a1*i;c=new ro(v.x,v.y,x);var A=ro.clone(this.m_impulse),g=this.m_K.solve33(ro.neg(c));this.m_impulse.add(g),this.m_limitState==Oo.atLowerLimit?this.m_impulse.z=Ko(this.m_impulse.z,0):this.m_limitState==Oo.atUpperLimit&&(this.m_impulse.z=Xo(this.m_impulse.z,0));var b=y.combine(-1,v,-(this.m_impulse.z-A.z),y.neo(this.m_K.ez.x,this.m_K.ez.y)),B=y.add(this.m_K.solve22(b),y.neo(A.x,A.y));this.m_impulse.x=B.x,this.m_impulse.y=B.y,g=ro.sub(this.m_impulse,A);p=y.combine(g.x,this.m_perp,g.z,this.m_axis),d=g.x*this.m_s1+g.y+g.z*this.m_a1,f=g.x*this.m_s2+g.y+g.z*this.m_a2;e.subMul(n,p),i-=a*d,o.addMul(r,p),s+=m*f}else{g=this.m_K.solve22(y.neg(v));this.m_impulse.x+=g.x,this.m_impulse.y+=g.y;p=y.mulNumVec2(g.x,this.m_perp),d=g.x*this.m_s1+g.y,f=g.x*this.m_s2+g.y;e.subMul(n,p),i-=a*d,o.addMul(r,p),s+=m*f}this.m_bodyA.c_velocity.v=e,this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v=o,this.m_bodyB.c_velocity.w=s},e.prototype.solvePositionConstraints=function(t){var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyB.c_position.c,s=this.m_bodyB.c_position.a,n=pt.neo(i),r=pt.neo(s),a=this.m_invMassA,m=this.m_invMassB,c=this.m_invIA,_=this.m_invIB,l=pt.mulVec2(n,y.sub(this.m_localAnchorA,this.m_localCenterA)),u=pt.mulVec2(r,y.sub(this.m_localAnchorB,this.m_localCenterB)),p=y.sub(y.add(o,u),y.add(e,l)),d=pt.mulVec2(n,this.m_localXAxisA),f=y.crossVec2Vec2(y.add(p,l),d),v=y.crossVec2Vec2(u,d),x=pt.mulVec2(n,this.m_localYAxisA),A=y.crossVec2Vec2(y.add(p,l),x),b=y.crossVec2Vec2(u,x),B=new ro,w=y.zero();w.x=y.dot(x,p),w.y=s-i-this.m_referenceAngle;var V=Zo(w.x),C=Zo(w.y),M=g.linearSlop,I=g.maxLinearCorrection,P=!1,S=0;if(this.m_enableLimit){var T=y.dot(d,p);Zo(this.m_upperTranslation-this.m_lowerTranslation)<2*M?(S=h(T,-I,I),V=Ko(V,Zo(T)),P=!0):T<=this.m_lowerTranslation?(S=h(T-this.m_lowerTranslation+M,-I,0),V=Math.max(V,this.m_lowerTranslation-T),P=!0):T>=this.m_upperTranslation&&(S=h(T-this.m_upperTranslation-M,0,I),V=Math.max(V,T-this.m_upperTranslation),P=!0)}if(P){var z=a+m+c*A*A+_*b*b,F=c*A+_*b,L=c*A*f+_*b*v;0==(D=c+_)&&(D=1);var q=c*f+_*v,N=a+m+c*f*f+_*v*v;(j=new Do).ex.set(z,F,L),j.ey.set(F,D,q),j.ez.set(L,q,N);var k=new ro;k.x=w.x,k.y=w.y,k.z=S,B=j.solve33(ro.neg(k))}else{var D,j;z=a+m+c*A*A+_*b*b,F=c*A+_*b;0==(D=c+_)&&(D=1),(j=new oi).ex.setNum(z,F),j.ey.setNum(F,D);var O=j.solve(y.neg(w));B.x=O.x,B.y=O.y,B.z=0}var R=y.combine(B.x,x,B.z,d),E=B.x*A+B.y+B.z*f,J=B.x*b+B.y+B.z*v;return e.subMul(a,R),i-=c*E,o.addMul(m,R),s+=_*J,this.m_bodyA.c_position.c=e,this.m_bodyA.c_position.a=i,this.m_bodyB.c_position.c=o,this.m_bodyB.c_position.a=s,V<=g.linearSlop&&C<=g.angularSlop},e.TYPE="prismatic-joint",e}(Jt),ts={ratio:1},es=function(t){function e(i,o,n,r,a,m){var h,c,_=this;if(!(_ instanceof e))return new e(i,o,n,r,a,m);i=s(i,ts),o=(_=t.call(this,i,o,n)||this).m_bodyA,n=_.m_bodyB,_.m_type=e.TYPE,_.m_joint1=r||i.joint1,_.m_joint2=a||i.joint2,_.m_ratio=Number.isFinite(m)?m:i.ratio,_.m_type1=_.m_joint1.getType(),_.m_type2=_.m_joint2.getType(),_.m_bodyC=_.m_joint1.getBodyA(),_.m_bodyA=_.m_joint1.getBodyB();var l=_.m_bodyA.m_xf,u=_.m_bodyA.m_sweep.a,p=_.m_bodyC.m_xf,d=_.m_bodyC.m_sweep.a;if(_.m_type1===Uo.TYPE){var f=_.m_joint1;_.m_localAnchorC=f.m_localAnchorA,_.m_localAnchorA=f.m_localAnchorB,_.m_referenceAngleA=f.m_referenceAngle,_.m_localAxisC=y.zero(),h=u-d-_.m_referenceAngleA}else{var v=_.m_joint1;_.m_localAnchorC=v.m_localAnchorA,_.m_localAnchorA=v.m_localAnchorB,_.m_referenceAngleA=v.m_referenceAngle,_.m_localAxisC=v.m_localXAxisA;var x=_.m_localAnchorC,A=pt.mulTVec2(p.q,y.add(pt.mulVec2(l.q,_.m_localAnchorA),y.sub(l.p,p.p)));h=y.dot(A,_.m_localAxisC)-y.dot(x,_.m_localAxisC)}_.m_bodyD=_.m_joint2.getBodyA(),_.m_bodyB=_.m_joint2.getBodyB();var g=_.m_bodyB.m_xf,b=_.m_bodyB.m_sweep.a,B=_.m_bodyD.m_xf,w=_.m_bodyD.m_sweep.a;if(_.m_type2===Uo.TYPE){f=_.m_joint2;_.m_localAnchorD=f.m_localAnchorA,_.m_localAnchorB=f.m_localAnchorB,_.m_referenceAngleB=f.m_referenceAngle,_.m_localAxisD=y.zero(),c=b-w-_.m_referenceAngleB}else{v=_.m_joint2;_.m_localAnchorD=v.m_localAnchorA,_.m_localAnchorB=v.m_localAnchorB,_.m_referenceAngleB=v.m_referenceAngle,_.m_localAxisD=v.m_localXAxisA;var V=_.m_localAnchorD,C=pt.mulTVec2(B.q,y.add(pt.mulVec2(g.q,_.m_localAnchorB),y.sub(g.p,B.p)));c=y.dot(C,_.m_localAxisD)-y.dot(V,_.m_localAxisD)}return _.m_constant=h+_.m_ratio*c,_.m_impulse=0,_}return i(e,t),e.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,joint1:this.m_joint1,joint2:this.m_joint2,ratio:this.m_ratio}},e._deserialize=function(t,i,s){return(t=o({},t)).bodyA=s(Rt,t.bodyA,i),t.bodyB=s(Rt,t.bodyB,i),t.joint1=s(Jt,t.joint1,i),t.joint2=s(Jt,t.joint2,i),new e(t)},e.prototype._reset=function(t){Number.isFinite(t.ratio)&&(this.m_ratio=t.ratio)},e.prototype.getJoint1=function(){return this.m_joint1},e.prototype.getJoint2=function(){return this.m_joint2},e.prototype.setRatio=function(t){this.m_ratio=t},e.prototype.getRatio=function(){return this.m_ratio},e.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)},e.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)},e.prototype.getReactionForce=function(t){return y.mulNumVec2(this.m_impulse,this.m_JvAC).mul(t)},e.prototype.getReactionTorque=function(t){return t*(this.m_impulse*this.m_JwA)},e.prototype.initVelocityConstraints=function(t){this.m_lcA=this.m_bodyA.m_sweep.localCenter,this.m_lcB=this.m_bodyB.m_sweep.localCenter,this.m_lcC=this.m_bodyC.m_sweep.localCenter,this.m_lcD=this.m_bodyD.m_sweep.localCenter,this.m_mA=this.m_bodyA.m_invMass,this.m_mB=this.m_bodyB.m_invMass,this.m_mC=this.m_bodyC.m_invMass,this.m_mD=this.m_bodyD.m_invMass,this.m_iA=this.m_bodyA.m_invI,this.m_iB=this.m_bodyB.m_invI,this.m_iC=this.m_bodyC.m_invI,this.m_iD=this.m_bodyD.m_invI;var e=this.m_bodyA.c_position.a,i=this.m_bodyA.c_velocity.v,o=this.m_bodyA.c_velocity.w,s=this.m_bodyB.c_position.a,n=this.m_bodyB.c_velocity.v,r=this.m_bodyB.c_velocity.w,a=this.m_bodyC.c_position.a,m=this.m_bodyC.c_velocity.v,h=this.m_bodyC.c_velocity.w,c=this.m_bodyD.c_position.a,_=this.m_bodyD.c_velocity.v,l=this.m_bodyD.c_velocity.w,u=pt.neo(e),p=pt.neo(s),d=pt.neo(a),f=pt.neo(c);if(this.m_mass=0,this.m_type1==Uo.TYPE)this.m_JvAC=y.zero(),this.m_JwA=1,this.m_JwC=1,this.m_mass+=this.m_iA+this.m_iC;else{var v=pt.mulVec2(d,this.m_localAxisC),x=pt.mulSub(d,this.m_localAnchorC,this.m_lcC),A=pt.mulSub(u,this.m_localAnchorA,this.m_lcA);this.m_JvAC=v,this.m_JwC=y.crossVec2Vec2(x,v),this.m_JwA=y.crossVec2Vec2(A,v),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}if(this.m_type2==Uo.TYPE)this.m_JvBD=y.zero(),this.m_JwB=this.m_ratio,this.m_JwD=this.m_ratio,this.m_mass+=this.m_ratio*this.m_ratio*(this.m_iB+this.m_iD);else{v=pt.mulVec2(f,this.m_localAxisD);var g=pt.mulSub(f,this.m_localAnchorD,this.m_lcD),b=pt.mulSub(p,this.m_localAnchorB,this.m_lcB);this.m_JvBD=y.mulNumVec2(this.m_ratio,v),this.m_JwD=this.m_ratio*y.crossVec2Vec2(g,v),this.m_JwB=this.m_ratio*y.crossVec2Vec2(b,v),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}this.m_mass=this.m_mass>0?1/this.m_mass:0,t.warmStarting?(i.addMul(this.m_mA*this.m_impulse,this.m_JvAC),o+=this.m_iA*this.m_impulse*this.m_JwA,n.addMul(this.m_mB*this.m_impulse,this.m_JvBD),r+=this.m_iB*this.m_impulse*this.m_JwB,m.subMul(this.m_mC*this.m_impulse,this.m_JvAC),h-=this.m_iC*this.m_impulse*this.m_JwC,_.subMul(this.m_mD*this.m_impulse,this.m_JvBD),l-=this.m_iD*this.m_impulse*this.m_JwD):this.m_impulse=0,this.m_bodyA.c_velocity.v.setVec2(i),this.m_bodyA.c_velocity.w=o,this.m_bodyB.c_velocity.v.setVec2(n),this.m_bodyB.c_velocity.w=r,this.m_bodyC.c_velocity.v.setVec2(m),this.m_bodyC.c_velocity.w=h,this.m_bodyD.c_velocity.v.setVec2(_),this.m_bodyD.c_velocity.w=l},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,s=this.m_bodyB.c_velocity.w,n=this.m_bodyC.c_velocity.v,r=this.m_bodyC.c_velocity.w,a=this.m_bodyD.c_velocity.v,m=this.m_bodyD.c_velocity.w,h=y.dot(this.m_JvAC,e)-y.dot(this.m_JvAC,n)+y.dot(this.m_JvBD,o)-y.dot(this.m_JvBD,a);h+=this.m_JwA*i-this.m_JwC*r+(this.m_JwB*s-this.m_JwD*m);var c=-this.m_mass*h;this.m_impulse+=c,e.addMul(this.m_mA*c,this.m_JvAC),i+=this.m_iA*c*this.m_JwA,o.addMul(this.m_mB*c,this.m_JvBD),s+=this.m_iB*c*this.m_JwB,n.subMul(this.m_mC*c,this.m_JvAC),r-=this.m_iC*c*this.m_JwC,a.subMul(this.m_mD*c,this.m_JvBD),m-=this.m_iD*c*this.m_JwD,this.m_bodyA.c_velocity.v.setVec2(e),this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v.setVec2(o),this.m_bodyB.c_velocity.w=s,this.m_bodyC.c_velocity.v.setVec2(n),this.m_bodyC.c_velocity.w=r,this.m_bodyD.c_velocity.v.setVec2(a),this.m_bodyD.c_velocity.w=m},e.prototype.solvePositionConstraints=function(t){var e,i,o,s,n,r,a,m,h=this.m_bodyA.c_position.c,c=this.m_bodyA.c_position.a,_=this.m_bodyB.c_position.c,l=this.m_bodyB.c_position.a,u=this.m_bodyC.c_position.c,p=this.m_bodyC.c_position.a,d=this.m_bodyD.c_position.c,f=this.m_bodyD.c_position.a,v=pt.neo(c),x=pt.neo(l),A=pt.neo(p),b=pt.neo(f),B=0;if(this.m_type1==Uo.TYPE)o=y.zero(),n=1,a=1,B+=this.m_iA+this.m_iC,e=c-p-this.m_referenceAngleA;else{var w=pt.mulVec2(A,this.m_localAxisC),V=pt.mulSub(A,this.m_localAnchorC,this.m_lcC),C=pt.mulSub(v,this.m_localAnchorA,this.m_lcA);o=w,a=y.crossVec2Vec2(V,w),n=y.crossVec2Vec2(C,w),B+=this.m_mC+this.m_mA+this.m_iC*a*a+this.m_iA*n*n;var M=y.sub(this.m_localAnchorC,this.m_lcC),I=pt.mulTVec2(A,y.add(C,y.sub(h,u)));e=y.dot(y.sub(I,M),this.m_localAxisC)}if(this.m_type2==Uo.TYPE)s=y.zero(),r=this.m_ratio,m=this.m_ratio,B+=this.m_ratio*this.m_ratio*(this.m_iB+this.m_iD),i=l-f-this.m_referenceAngleB;else{w=pt.mulVec2(b,this.m_localAxisD);var P=pt.mulSub(b,this.m_localAnchorD,this.m_lcD),S=pt.mulSub(x,this.m_localAnchorB,this.m_lcB);s=y.mulNumVec2(this.m_ratio,w),m=this.m_ratio*y.crossVec2Vec2(P,w),r=this.m_ratio*y.crossVec2Vec2(S,w),B+=this.m_ratio*this.m_ratio*(this.m_mD+this.m_mB)+this.m_iD*m*m+this.m_iB*r*r;var T=y.sub(this.m_localAnchorD,this.m_lcD),z=pt.mulTVec2(b,y.add(S,y.sub(_,d)));i=y.dot(z,this.m_localAxisD)-y.dot(T,this.m_localAxisD)}var F=e+this.m_ratio*i-this.m_constant,L=0;return B>0&&(L=-F/B),h.addMul(this.m_mA*L,o),c+=this.m_iA*L*n,_.addMul(this.m_mB*L,s),l+=this.m_iB*L*r,u.subMul(this.m_mC*L,o),p-=this.m_iC*L*a,d.subMul(this.m_mD*L,s),f-=this.m_iD*L*m,this.m_bodyA.c_position.c.setVec2(h),this.m_bodyA.c_position.a=c,this.m_bodyB.c_position.c.setVec2(_),this.m_bodyB.c_position.a=l,this.m_bodyC.c_position.c.setVec2(u),this.m_bodyC.c_position.a=p,this.m_bodyD.c_position.c.setVec2(d),this.m_bodyD.c_position.a=f,00&&(this.m_angularMass=1/this.m_angularMass),this.m_linearError=y.zero(),this.m_linearError.addCombine(1,n,1,this.m_rB),this.m_linearError.subCombine(1,e,1,this.m_rA),this.m_angularError=r-i-this.m_angularOffset,t.warmStarting){this.m_linearImpulse.mul(t.dtRatio),this.m_angularImpulse*=t.dtRatio;var f=y.neo(this.m_linearImpulse.x,this.m_linearImpulse.y);o.subMul(_,f),s-=u*(y.crossVec2Vec2(this.m_rA,f)+this.m_angularImpulse),a.addMul(l,f),m+=p*(y.crossVec2Vec2(this.m_rB,f)+this.m_angularImpulse)}else this.m_linearImpulse.setZero(),this.m_angularImpulse=0;this.m_bodyA.c_velocity.v=o,this.m_bodyA.c_velocity.w=s,this.m_bodyB.c_velocity.v=a,this.m_bodyB.c_velocity.w=m},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,s=this.m_bodyB.c_velocity.w,n=this.m_invMassA,r=this.m_invMassB,a=this.m_invIA,m=this.m_invIB,c=t.dt,_=t.inv_dt,l=s-i+_*this.m_correctionFactor*this.m_angularError,u=-this.m_angularMass*l,p=this.m_angularImpulse,d=c*this.m_maxTorque;this.m_angularImpulse=h(this.m_angularImpulse+u,-d,d),i-=a*(u=this.m_angularImpulse-p),s+=m*u,(l=y.zero()).addCombine(1,o,1,y.crossNumVec2(s,this.m_rB)),l.subCombine(1,e,1,y.crossNumVec2(i,this.m_rA)),l.addMul(_*this.m_correctionFactor,this.m_linearError);u=y.neg(oi.mulVec2(this.m_linearMass,l)),p=y.clone(this.m_linearImpulse);this.m_linearImpulse.add(u);d=c*this.m_maxForce;this.m_linearImpulse.clamp(d),u=y.sub(this.m_linearImpulse,p),e.subMul(n,u),i-=a*y.crossVec2Vec2(this.m_rA,u),o.addMul(r,u),s+=m*y.crossVec2Vec2(this.m_rB,u),this.m_bodyA.c_velocity.v=e,this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v=o,this.m_bodyB.c_velocity.w=s},e.prototype.solvePositionConstraints=function(t){return!0},e.TYPE="motor-joint",e}(Jt),ss=Math.PI,ns={maxForce:0,frequencyHz:5,dampingRatio:.7},rs=function(t){function e(i,o,n,r){var a=this;return a instanceof e?(i=s(i,ns),o=(a=t.call(this,i,o,n)||this).m_bodyA,n=a.m_bodyB,a.m_type=e.TYPE,y.isValid(r)?a.m_targetA=y.clone(r):y.isValid(i.target)?a.m_targetA=y.clone(i.target):a.m_targetA=y.zero(),a.m_localAnchorB=xt.mulTVec2(n.getTransform(),a.m_targetA),a.m_maxForce=i.maxForce,a.m_impulse=y.zero(),a.m_frequencyHz=i.frequencyHz,a.m_dampingRatio=i.dampingRatio,a.m_beta=0,a.m_gamma=0,a.m_rB=y.zero(),a.m_localCenterB=y.zero(),a.m_invMassB=0,a.m_invIB=0,a.m_mass=new oi,a.m_C=y.zero(),a):new e(i,o,n,r)}return i(e,t),e.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,target:this.m_targetA,maxForce:this.m_maxForce,frequencyHz:this.m_frequencyHz,dampingRatio:this.m_dampingRatio,_localAnchorB:this.m_localAnchorB}},e._deserialize=function(t,i,s){(t=o({},t)).bodyA=s(Rt,t.bodyA,i),t.bodyB=s(Rt,t.bodyB,i),t.target=y.clone(t.target);var n=new e(t);return t._localAnchorB&&(n.m_localAnchorB=t._localAnchorB),n},e.prototype._reset=function(t){Number.isFinite(t.maxForce)&&(this.m_maxForce=t.maxForce),Number.isFinite(t.frequencyHz)&&(this.m_frequencyHz=t.frequencyHz),Number.isFinite(t.dampingRatio)&&(this.m_dampingRatio=t.dampingRatio)},e.prototype.setTarget=function(t){y.areEqual(t,this.m_targetA)||(this.m_bodyB.setAwake(!0),this.m_targetA.set(t))},e.prototype.getTarget=function(){return this.m_targetA},e.prototype.setMaxForce=function(t){this.m_maxForce=t},e.prototype.getMaxForce=function(){return this.m_maxForce},e.prototype.setFrequency=function(t){this.m_frequencyHz=t},e.prototype.getFrequency=function(){return this.m_frequencyHz},e.prototype.setDampingRatio=function(t){this.m_dampingRatio=t},e.prototype.getDampingRatio=function(){return this.m_dampingRatio},e.prototype.getAnchorA=function(){return y.clone(this.m_targetA)},e.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)},e.prototype.getReactionForce=function(t){return y.mulNumVec2(t,this.m_impulse)},e.prototype.getReactionTorque=function(t){return 0*t},e.prototype.shiftOrigin=function(t){this.m_targetA.sub(t)},e.prototype.initVelocityConstraints=function(t){this.m_localCenterB=this.m_bodyB.m_sweep.localCenter,this.m_invMassB=this.m_bodyB.m_invMass,this.m_invIB=this.m_bodyB.m_invI;var e=this.m_bodyB.c_position,i=this.m_bodyB.c_velocity,o=e.c,s=e.a,n=i.v,r=i.w,a=pt.neo(s),m=this.m_bodyB.getMass(),h=2*ss*this.m_frequencyHz,c=2*m*this.m_dampingRatio*h,_=m*(h*h),l=t.dt;this.m_gamma=l*(c+l*_),0!=this.m_gamma&&(this.m_gamma=1/this.m_gamma),this.m_beta=l*_*this.m_gamma,this.m_rB=pt.mulVec2(a,y.sub(this.m_localAnchorB,this.m_localCenterB));var u=new oi;u.ex.x=this.m_invMassB+this.m_invIB*this.m_rB.y*this.m_rB.y+this.m_gamma,u.ex.y=-this.m_invIB*this.m_rB.x*this.m_rB.y,u.ey.x=u.ex.y,u.ey.y=this.m_invMassB+this.m_invIB*this.m_rB.x*this.m_rB.x+this.m_gamma,this.m_mass=u.getInverse(),this.m_C.setVec2(o),this.m_C.addCombine(1,this.m_rB,-1,this.m_targetA),this.m_C.mul(this.m_beta),r*=.98,t.warmStarting?(this.m_impulse.mul(t.dtRatio),n.addMul(this.m_invMassB,this.m_impulse),r+=this.m_invIB*y.crossVec2Vec2(this.m_rB,this.m_impulse)):this.m_impulse.setZero(),i.v.setVec2(n),i.w=r},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyB.c_velocity,i=y.clone(e.v),o=e.w,s=y.crossNumVec2(o,this.m_rB);s.add(i),s.addCombine(1,this.m_C,this.m_gamma,this.m_impulse),s.neg();var n=oi.mulVec2(this.m_mass,s),r=y.clone(this.m_impulse);this.m_impulse.add(n);var a=t.dt*this.m_maxForce;this.m_impulse.clamp(a),n=y.sub(this.m_impulse,r),i.addMul(this.m_invMassB,n),o+=this.m_invIB*y.crossVec2Vec2(this.m_rB,n),e.v.setVec2(i),e.w=o},e.prototype.solvePositionConstraints=function(t){return!0},e.TYPE="mouse-joint",e}(Jt),as=Math.abs,ms={collideConnected:!0},hs=function(t){function e(i,o,n,r,a,m,h,c){var _=this;return _ instanceof e?(i=s(i,ms),o=(_=t.call(this,i,o,n)||this).m_bodyA,n=_.m_bodyB,_.m_type=e.TYPE,_.m_groundAnchorA=y.clone(r||(i.groundAnchorA||y.neo(-1,1))),_.m_groundAnchorB=y.clone(a||(i.groundAnchorB||y.neo(1,1))),_.m_localAnchorA=y.clone(m?o.getLocalPoint(m):i.localAnchorA||y.neo(-1,0)),_.m_localAnchorB=y.clone(h?n.getLocalPoint(h):i.localAnchorB||y.neo(1,0)),_.m_lengthA=Number.isFinite(i.lengthA)?i.lengthA:y.distance(m,r),_.m_lengthB=Number.isFinite(i.lengthB)?i.lengthB:y.distance(h,a),_.m_ratio=Number.isFinite(c)?c:i.ratio,_.m_constant=_.m_lengthA+_.m_ratio*_.m_lengthB,_.m_impulse=0,_):new e(i,o,n,r,a,m,h,c)}return i(e,t),e.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,groundAnchorA:this.m_groundAnchorA,groundAnchorB:this.m_groundAnchorB,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,lengthA:this.m_lengthA,lengthB:this.m_lengthB,ratio:this.m_ratio}},e._deserialize=function(t,i,s){return(t=o({},t)).bodyA=s(Rt,t.bodyA,i),t.bodyB=s(Rt,t.bodyB,i),new e(t)},e.prototype._reset=function(t){y.isValid(t.groundAnchorA)&&this.m_groundAnchorA.set(t.groundAnchorA),y.isValid(t.groundAnchorB)&&this.m_groundAnchorB.set(t.groundAnchorB),y.isValid(t.localAnchorA)?this.m_localAnchorA.set(t.localAnchorA):y.isValid(t.anchorA)&&this.m_localAnchorA.set(this.m_bodyA.getLocalPoint(t.anchorA)),y.isValid(t.localAnchorB)?this.m_localAnchorB.set(t.localAnchorB):y.isValid(t.anchorB)&&this.m_localAnchorB.set(this.m_bodyB.getLocalPoint(t.anchorB)),Number.isFinite(t.lengthA)&&(this.m_lengthA=t.lengthA),Number.isFinite(t.lengthB)&&(this.m_lengthB=t.lengthB),Number.isFinite(t.ratio)&&(this.m_ratio=t.ratio)},e.prototype.getGroundAnchorA=function(){return this.m_groundAnchorA},e.prototype.getGroundAnchorB=function(){return this.m_groundAnchorB},e.prototype.getLengthA=function(){return this.m_lengthA},e.prototype.getLengthB=function(){return this.m_lengthB},e.prototype.getRatio=function(){return this.m_ratio},e.prototype.getCurrentLengthA=function(){var t=this.m_bodyA.getWorldPoint(this.m_localAnchorA),e=this.m_groundAnchorA;return y.distance(t,e)},e.prototype.getCurrentLengthB=function(){var t=this.m_bodyB.getWorldPoint(this.m_localAnchorB),e=this.m_groundAnchorB;return y.distance(t,e)},e.prototype.shiftOrigin=function(t){this.m_groundAnchorA.sub(t),this.m_groundAnchorB.sub(t)},e.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)},e.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)},e.prototype.getReactionForce=function(t){return y.mulNumVec2(this.m_impulse,this.m_uB).mul(t)},e.prototype.getReactionTorque=function(t){return 0},e.prototype.initVelocityConstraints=function(t){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter,this.m_localCenterB=this.m_bodyB.m_sweep.localCenter,this.m_invMassA=this.m_bodyA.m_invMass,this.m_invMassB=this.m_bodyB.m_invMass,this.m_invIA=this.m_bodyA.m_invI,this.m_invIB=this.m_bodyB.m_invI;var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyA.c_velocity.v,s=this.m_bodyA.c_velocity.w,n=this.m_bodyB.c_position.c,r=this.m_bodyB.c_position.a,a=this.m_bodyB.c_velocity.v,m=this.m_bodyB.c_velocity.w,h=pt.neo(i),c=pt.neo(r);this.m_rA=pt.mulVec2(h,y.sub(this.m_localAnchorA,this.m_localCenterA)),this.m_rB=pt.mulVec2(c,y.sub(this.m_localAnchorB,this.m_localCenterB)),this.m_uA=y.sub(y.add(e,this.m_rA),this.m_groundAnchorA),this.m_uB=y.sub(y.add(n,this.m_rB),this.m_groundAnchorB);var _=this.m_uA.length(),l=this.m_uB.length();_>10*g.linearSlop?this.m_uA.mul(1/_):this.m_uA.setZero(),l>10*g.linearSlop?this.m_uB.mul(1/l):this.m_uB.setZero();var u=y.crossVec2Vec2(this.m_rA,this.m_uA),p=y.crossVec2Vec2(this.m_rB,this.m_uB),d=this.m_invMassA+this.m_invIA*u*u,f=this.m_invMassB+this.m_invIB*p*p;if(this.m_mass=d+this.m_ratio*this.m_ratio*f,this.m_mass>0&&(this.m_mass=1/this.m_mass),t.warmStarting){this.m_impulse*=t.dtRatio;var v=y.mulNumVec2(-this.m_impulse,this.m_uA),x=y.mulNumVec2(-this.m_ratio*this.m_impulse,this.m_uB);o.addMul(this.m_invMassA,v),s+=this.m_invIA*y.crossVec2Vec2(this.m_rA,v),a.addMul(this.m_invMassB,x),m+=this.m_invIB*y.crossVec2Vec2(this.m_rB,x)}else this.m_impulse=0;this.m_bodyA.c_velocity.v=o,this.m_bodyA.c_velocity.w=s,this.m_bodyB.c_velocity.v=a,this.m_bodyB.c_velocity.w=m},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,s=this.m_bodyB.c_velocity.w,n=y.add(e,y.crossNumVec2(i,this.m_rA)),r=y.add(o,y.crossNumVec2(s,this.m_rB)),a=-y.dot(this.m_uA,n)-this.m_ratio*y.dot(this.m_uB,r),m=-this.m_mass*a;this.m_impulse+=m;var h=y.mulNumVec2(-m,this.m_uA),c=y.mulNumVec2(-this.m_ratio*m,this.m_uB);e.addMul(this.m_invMassA,h),i+=this.m_invIA*y.crossVec2Vec2(this.m_rA,h),o.addMul(this.m_invMassB,c),s+=this.m_invIB*y.crossVec2Vec2(this.m_rB,c),this.m_bodyA.c_velocity.v=e,this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v=o,this.m_bodyB.c_velocity.w=s},e.prototype.solvePositionConstraints=function(t){var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyB.c_position.c,s=this.m_bodyB.c_position.a,n=pt.neo(i),r=pt.neo(s),a=pt.mulVec2(n,y.sub(this.m_localAnchorA,this.m_localCenterA)),m=pt.mulVec2(r,y.sub(this.m_localAnchorB,this.m_localCenterB)),h=y.sub(y.add(e,this.m_rA),this.m_groundAnchorA),c=y.sub(y.add(o,this.m_rB),this.m_groundAnchorB),_=h.length(),l=c.length();_>10*g.linearSlop?h.mul(1/_):h.setZero(),l>10*g.linearSlop?c.mul(1/l):c.setZero();var u=y.crossVec2Vec2(a,h),p=y.crossVec2Vec2(m,c),d=this.m_invMassA+this.m_invIA*u*u,f=this.m_invMassB+this.m_invIB*p*p,v=d+this.m_ratio*this.m_ratio*f;v>0&&(v=1/v);var x=this.m_constant-_-this.m_ratio*l,A=as(x),b=-v*x,B=y.mulNumVec2(-b,h),w=y.mulNumVec2(-this.m_ratio*b,c);return e.addMul(this.m_invMassA,B),i+=this.m_invIA*y.crossVec2Vec2(a,B),o.addMul(this.m_invMassB,w),s+=this.m_invIB*y.crossVec2Vec2(m,w),this.m_bodyA.c_position.c=e,this.m_bodyA.c_position.a=i,this.m_bodyB.c_position.c=o,this.m_bodyB.c_position.a=s,A0?Go.atUpperLimit:Go.inactiveLimit,!(this.m_length>g.linearSlop))return this.m_u.setZero(),this.m_mass=0,void(this.m_impulse=0);this.m_u.mul(1/this.m_length);var l=y.crossVec2Vec2(this.m_rA,this.m_u),u=y.crossVec2Vec2(this.m_rB,this.m_u),p=this.m_invMassA+this.m_invIA*l*l+this.m_invMassB+this.m_invIB*u*u;if(this.m_mass=0!=p?1/p:0,t.warmStarting){this.m_impulse*=t.dtRatio;var d=y.mulNumVec2(this.m_impulse,this.m_u);o.subMul(this.m_invMassA,d),s-=this.m_invIA*y.crossVec2Vec2(this.m_rA,d),a.addMul(this.m_invMassB,d),m+=this.m_invIB*y.crossVec2Vec2(this.m_rB,d)}else this.m_impulse=0;this.m_bodyA.c_velocity.v.setVec2(o),this.m_bodyA.c_velocity.w=s,this.m_bodyB.c_velocity.v.setVec2(a),this.m_bodyB.c_velocity.w=m},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,s=this.m_bodyB.c_velocity.w,n=y.addCrossNumVec2(e,i,this.m_rA),r=y.addCrossNumVec2(o,s,this.m_rB),a=this.m_length-this.m_maxLength,m=y.dot(this.m_u,y.sub(r,n));a<0&&(m+=t.inv_dt*a);var h=-this.m_mass*m,c=this.m_impulse;this.m_impulse=cs(0,this.m_impulse+h),h=this.m_impulse-c;var _=y.mulNumVec2(h,this.m_u);e.subMul(this.m_invMassA,_),i-=this.m_invIA*y.crossVec2Vec2(this.m_rA,_),o.addMul(this.m_invMassB,_),s+=this.m_invIB*y.crossVec2Vec2(this.m_rB,_),this.m_bodyA.c_velocity.v=e,this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v=o,this.m_bodyB.c_velocity.w=s},e.prototype.solvePositionConstraints=function(t){var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyB.c_position.c,s=this.m_bodyB.c_position.a,n=pt.neo(i),r=pt.neo(s),a=pt.mulSub(n,this.m_localAnchorA,this.m_localCenterA),m=pt.mulSub(r,this.m_localAnchorB,this.m_localCenterB),c=y.zero();c.addCombine(1,o,1,m),c.subCombine(1,e,1,a);var _=c.normalize(),l=_-this.m_maxLength;l=h(l,0,g.maxLinearCorrection);var u=-this.m_mass*l,p=y.mulNumVec2(u,c);return e.subMul(this.m_invMassA,p),i-=this.m_invIA*y.crossVec2Vec2(a,p),o.addMul(this.m_invMassB,p),s+=this.m_invIB*y.crossVec2Vec2(m,p),this.m_bodyA.c_position.c.setVec2(e),this.m_bodyA.c_position.a=i,this.m_bodyB.c_position.c.setVec2(o),this.m_bodyB.c_position.a=s,_-this.m_maxLength0){u.getInverse22(this.m_mass);var p=_+l,d=p>0?1/p:0,f=s-e-this.m_referenceAngle,v=2*ys*this.m_frequencyHz,x=2*d*this.m_dampingRatio*v,A=d*v*v,g=t.dt;this.m_gamma=g*(x+g*A),this.m_gamma=0!=this.m_gamma?1/this.m_gamma:0,this.m_bias=f*g*A*this.m_gamma,p+=this.m_gamma,this.m_mass.ez.z=0!=p?1/p:0}else 0==u.ez.z?(u.getInverse22(this.m_mass),this.m_gamma=0,this.m_bias=0):(u.getSymInverse33(this.m_mass),this.m_gamma=0,this.m_bias=0);if(t.warmStarting){this.m_impulse.mul(t.dtRatio);var b=y.neo(this.m_impulse.x,this.m_impulse.y);i.subMul(h,b),o-=_*(y.crossVec2Vec2(this.m_rA,b)+this.m_impulse.z),n.addMul(c,b),r+=l*(y.crossVec2Vec2(this.m_rB,b)+this.m_impulse.z)}else this.m_impulse.setZero();this.m_bodyA.c_velocity.v=i,this.m_bodyA.c_velocity.w=o,this.m_bodyB.c_velocity.v=n,this.m_bodyB.c_velocity.w=r},e.prototype.solveVelocityConstraints=function(t){var e=this.m_bodyA.c_velocity.v,i=this.m_bodyA.c_velocity.w,o=this.m_bodyB.c_velocity.v,s=this.m_bodyB.c_velocity.w,n=this.m_invMassA,r=this.m_invMassB,a=this.m_invIA,m=this.m_invIB;if(this.m_frequencyHz>0){var h=s-i,c=-this.m_mass.ez.z*(h+this.m_bias+this.m_gamma*this.m_impulse.z);this.m_impulse.z+=c,i-=a*c,s+=m*c,(u=y.zero()).addCombine(1,o,1,y.crossNumVec2(s,this.m_rB)),u.subCombine(1,e,1,y.crossNumVec2(i,this.m_rA));var _=y.neg(Do.mulVec2(this.m_mass,u));this.m_impulse.x+=_.x,this.m_impulse.y+=_.y;var l=y.clone(_);e.subMul(n,l),i-=a*y.crossVec2Vec2(this.m_rA,l),o.addMul(r,l),s+=m*y.crossVec2Vec2(this.m_rB,l)}else{var u;(u=y.zero()).addCombine(1,o,1,y.crossNumVec2(s,this.m_rB)),u.subCombine(1,e,1,y.crossNumVec2(i,this.m_rA));h=s-i;var p=new ro(u.x,u.y,h),d=ro.neg(Do.mulVec3(this.m_mass,p));this.m_impulse.add(d);l=y.neo(d.x,d.y);e.subMul(n,l),i-=a*(y.crossVec2Vec2(this.m_rA,l)+d.z),o.addMul(r,l),s+=m*(y.crossVec2Vec2(this.m_rB,l)+d.z)}this.m_bodyA.c_velocity.v=e,this.m_bodyA.c_velocity.w=i,this.m_bodyB.c_velocity.v=o,this.m_bodyB.c_velocity.w=s},e.prototype.solvePositionConstraints=function(t){var e,i,o=this.m_bodyA.c_position.c,s=this.m_bodyA.c_position.a,n=this.m_bodyB.c_position.c,r=this.m_bodyB.c_position.a,a=pt.neo(s),m=pt.neo(r),h=this.m_invMassA,c=this.m_invMassB,_=this.m_invIA,l=this.m_invIB,u=pt.mulVec2(a,y.sub(this.m_localAnchorA,this.m_localCenterA)),p=pt.mulVec2(m,y.sub(this.m_localAnchorB,this.m_localCenterB)),d=new Do;if(d.ex.x=h+c+u.y*u.y*_+p.y*p.y*l,d.ey.x=-u.y*u.x*_-p.y*p.x*l,d.ez.x=-u.y*_-p.y*l,d.ex.y=d.ey.x,d.ey.y=h+c+u.x*u.x*_+p.x*p.x*l,d.ez.y=u.x*_+p.x*l,d.ex.z=d.ez.x,d.ey.z=d.ez.y,d.ez.z=_+l,this.m_frequencyHz>0){(v=y.zero()).addCombine(1,n,1,p),v.subCombine(1,o,1,u),e=v.length(),i=0;var f=y.neg(d.solve22(v));o.subMul(h,f),s-=_*y.crossVec2Vec2(u,f),n.addMul(c,f),r+=l*y.crossVec2Vec2(p,f)}else{var v;(v=y.zero()).addCombine(1,n,1,p),v.subCombine(1,o,1,u);var x=r-s-this.m_referenceAngle;e=v.length(),i=ps(x);var A=new ro(v.x,v.y,x),b=new ro;if(d.ez.z>0)b=ro.neg(d.solve33(A));else{var B=y.neg(d.solve22(v));b.set(B.x,B.y,0)}f=y.neo(b.x,b.y);o.subMul(h,f),s-=_*(y.crossVec2Vec2(u,f)+b.z),n.addMul(c,f),r+=l*(y.crossVec2Vec2(p,f)+b.z)}return this.m_bodyA.c_position.c=o,this.m_bodyA.c_position.a=s,this.m_bodyB.c_position.c=n,this.m_bodyB.c_position.a=r,e<=g.linearSlop&&i<=g.angularSlop},e.TYPE="weld-joint",e}(Jt),vs=Math.abs,xs=Math.PI,As={enableMotor:!1,maxMotorTorque:0,motorSpeed:0,frequencyHz:2,dampingRatio:.7},gs=function(t){function e(i,o,n,r,a){var m=this;return m instanceof e?(i=s(i,As),o=(m=t.call(this,i,o,n)||this).m_bodyA,n=m.m_bodyB,m.m_ax=y.zero(),m.m_ay=y.zero(),m.m_type=e.TYPE,m.m_localAnchorA=y.clone(r?o.getLocalPoint(r):i.localAnchorA||y.zero()),m.m_localAnchorB=y.clone(r?n.getLocalPoint(r):i.localAnchorB||y.zero()),y.isValid(a)?m.m_localXAxisA=o.getLocalVector(a):y.isValid(i.localAxisA)?m.m_localXAxisA=y.clone(i.localAxisA):y.isValid(i.localAxis)?m.m_localXAxisA=y.clone(i.localAxis):m.m_localXAxisA=y.neo(1,0),m.m_localYAxisA=y.crossNumVec2(1,m.m_localXAxisA),m.m_mass=0,m.m_impulse=0,m.m_motorMass=0,m.m_motorImpulse=0,m.m_springMass=0,m.m_springImpulse=0,m.m_maxMotorTorque=i.maxMotorTorque,m.m_motorSpeed=i.motorSpeed,m.m_enableMotor=i.enableMotor,m.m_frequencyHz=i.frequencyHz,m.m_dampingRatio=i.dampingRatio,m.m_bias=0,m.m_gamma=0,m):new e(i,o,n,r,a)}return i(e,t),e.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,enableMotor:this.m_enableMotor,maxMotorTorque:this.m_maxMotorTorque,motorSpeed:this.m_motorSpeed,frequencyHz:this.m_frequencyHz,dampingRatio:this.m_dampingRatio,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,localAxisA:this.m_localXAxisA}},e._deserialize=function(t,i,s){return(t=o({},t)).bodyA=s(Rt,t.bodyA,i),t.bodyB=s(Rt,t.bodyB,i),new e(t)},e.prototype._reset=function(t){t.anchorA?this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(t.anchorA)):t.localAnchorA&&this.m_localAnchorA.setVec2(t.localAnchorA),t.anchorB?this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(t.anchorB)):t.localAnchorB&&this.m_localAnchorB.setVec2(t.localAnchorB),t.localAxisA&&(this.m_localXAxisA.setVec2(t.localAxisA),this.m_localYAxisA.setVec2(y.crossNumVec2(1,t.localAxisA))),void 0!==t.enableMotor&&(this.m_enableMotor=t.enableMotor),Number.isFinite(t.maxMotorTorque)&&(this.m_maxMotorTorque=t.maxMotorTorque),Number.isFinite(t.motorSpeed)&&(this.m_motorSpeed=t.motorSpeed),Number.isFinite(t.frequencyHz)&&(this.m_frequencyHz=t.frequencyHz),Number.isFinite(t.dampingRatio)&&(this.m_dampingRatio=t.dampingRatio)},e.prototype.getLocalAnchorA=function(){return this.m_localAnchorA},e.prototype.getLocalAnchorB=function(){return this.m_localAnchorB},e.prototype.getLocalAxisA=function(){return this.m_localXAxisA},e.prototype.getJointTranslation=function(){var t=this.m_bodyA,e=this.m_bodyB,i=t.getWorldPoint(this.m_localAnchorA),o=e.getWorldPoint(this.m_localAnchorB),s=y.sub(o,i),n=t.getWorldVector(this.m_localXAxisA);return y.dot(s,n)},e.prototype.getJointSpeed=function(){var t=this.m_bodyA.m_angularVelocity;return this.m_bodyB.m_angularVelocity-t},e.prototype.isMotorEnabled=function(){return this.m_enableMotor},e.prototype.enableMotor=function(t){t!=this.m_enableMotor&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_enableMotor=t)},e.prototype.setMotorSpeed=function(t){t!=this.m_motorSpeed&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_motorSpeed=t)},e.prototype.getMotorSpeed=function(){return this.m_motorSpeed},e.prototype.setMaxMotorTorque=function(t){t!=this.m_maxMotorTorque&&(this.m_bodyA.setAwake(!0),this.m_bodyB.setAwake(!0),this.m_maxMotorTorque=t)},e.prototype.getMaxMotorTorque=function(){return this.m_maxMotorTorque},e.prototype.getMotorTorque=function(t){return t*this.m_motorImpulse},e.prototype.setSpringFrequencyHz=function(t){this.m_frequencyHz=t},e.prototype.getSpringFrequencyHz=function(){return this.m_frequencyHz},e.prototype.setSpringDampingRatio=function(t){this.m_dampingRatio=t},e.prototype.getSpringDampingRatio=function(){return this.m_dampingRatio},e.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)},e.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)},e.prototype.getReactionForce=function(t){return y.combine(this.m_impulse,this.m_ay,this.m_springImpulse,this.m_ax).mul(t)},e.prototype.getReactionTorque=function(t){return t*this.m_motorImpulse},e.prototype.initVelocityConstraints=function(t){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter,this.m_localCenterB=this.m_bodyB.m_sweep.localCenter,this.m_invMassA=this.m_bodyA.m_invMass,this.m_invMassB=this.m_bodyB.m_invMass,this.m_invIA=this.m_bodyA.m_invI,this.m_invIB=this.m_bodyB.m_invI;var e=this.m_invMassA,i=this.m_invMassB,o=this.m_invIA,s=this.m_invIB,n=this.m_bodyA.c_position.c,r=this.m_bodyA.c_position.a,a=this.m_bodyA.c_velocity.v,m=this.m_bodyA.c_velocity.w,h=this.m_bodyB.c_position.c,c=this.m_bodyB.c_position.a,_=this.m_bodyB.c_velocity.v,l=this.m_bodyB.c_velocity.w,u=pt.neo(r),p=pt.neo(c),d=pt.mulVec2(u,y.sub(this.m_localAnchorA,this.m_localCenterA)),f=pt.mulVec2(p,y.sub(this.m_localAnchorB,this.m_localCenterB)),v=y.zero();if(v.addCombine(1,h,1,f),v.subCombine(1,n,1,d),this.m_ay=pt.mulVec2(u,this.m_localYAxisA),this.m_sAy=y.crossVec2Vec2(y.add(v,d),this.m_ay),this.m_sBy=y.crossVec2Vec2(f,this.m_ay),this.m_mass=e+i+o*this.m_sAy*this.m_sAy+s*this.m_sBy*this.m_sBy,this.m_mass>0&&(this.m_mass=1/this.m_mass),this.m_springMass=0,this.m_bias=0,this.m_gamma=0,this.m_frequencyHz>0){this.m_ax=pt.mulVec2(u,this.m_localXAxisA),this.m_sAx=y.crossVec2Vec2(y.add(v,d),this.m_ax),this.m_sBx=y.crossVec2Vec2(f,this.m_ax);var x=e+i+o*this.m_sAx*this.m_sAx+s*this.m_sBx*this.m_sBx;if(x>0){this.m_springMass=1/x;var A=y.dot(v,this.m_ax),g=2*xs*this.m_frequencyHz,b=2*this.m_springMass*this.m_dampingRatio*g,B=this.m_springMass*g*g,w=t.dt;this.m_gamma=w*(b+w*B),this.m_gamma>0&&(this.m_gamma=1/this.m_gamma),this.m_bias=A*w*B*this.m_gamma,this.m_springMass=x+this.m_gamma,this.m_springMass>0&&(this.m_springMass=1/this.m_springMass)}}else this.m_springImpulse=0;if(this.m_enableMotor?(this.m_motorMass=o+s,this.m_motorMass>0&&(this.m_motorMass=1/this.m_motorMass)):(this.m_motorMass=0,this.m_motorImpulse=0),t.warmStarting){this.m_impulse*=t.dtRatio,this.m_springImpulse*=t.dtRatio,this.m_motorImpulse*=t.dtRatio;var V=y.combine(this.m_impulse,this.m_ay,this.m_springImpulse,this.m_ax),C=this.m_impulse*this.m_sAy+this.m_springImpulse*this.m_sAx+this.m_motorImpulse,M=this.m_impulse*this.m_sBy+this.m_springImpulse*this.m_sBx+this.m_motorImpulse;a.subMul(this.m_invMassA,V),m-=this.m_invIA*C,_.addMul(this.m_invMassB,V),l+=this.m_invIB*M}else this.m_impulse=0,this.m_springImpulse=0,this.m_motorImpulse=0;this.m_bodyA.c_velocity.v.setVec2(a),this.m_bodyA.c_velocity.w=m,this.m_bodyB.c_velocity.v.setVec2(_),this.m_bodyB.c_velocity.w=l},e.prototype.solveVelocityConstraints=function(t){var e=this.m_invMassA,i=this.m_invMassB,o=this.m_invIA,s=this.m_invIB,n=this.m_bodyA.c_velocity.v,r=this.m_bodyA.c_velocity.w,a=this.m_bodyB.c_velocity.v,m=this.m_bodyB.c_velocity.w,c=y.dot(this.m_ax,a)-y.dot(this.m_ax,n)+this.m_sBx*m-this.m_sAx*r,_=-this.m_springMass*(c+this.m_bias+this.m_gamma*this.m_springImpulse);this.m_springImpulse+=_;var l=y.mulNumVec2(_,this.m_ax),u=_*this.m_sAx,p=_*this.m_sBx;n.subMul(e,l),r-=o*u,a.addMul(i,l);c=(m+=s*p)-r-this.m_motorSpeed,_=-this.m_motorMass*c;var d=this.m_motorImpulse,f=t.dt*this.m_maxMotorTorque;this.m_motorImpulse=h(this.m_motorImpulse+_,-f,f),r-=o*(_=this.m_motorImpulse-d),m+=s*_;c=y.dot(this.m_ay,a)-y.dot(this.m_ay,n)+this.m_sBy*m-this.m_sAy*r,_=-this.m_mass*c;this.m_impulse+=_;l=y.mulNumVec2(_,this.m_ay),u=_*this.m_sAy,p=_*this.m_sBy;n.subMul(e,l),r-=o*u,a.addMul(i,l),m+=s*p,this.m_bodyA.c_velocity.v.setVec2(n),this.m_bodyA.c_velocity.w=r,this.m_bodyB.c_velocity.v.setVec2(a),this.m_bodyB.c_velocity.w=m},e.prototype.solvePositionConstraints=function(t){var e=this.m_bodyA.c_position.c,i=this.m_bodyA.c_position.a,o=this.m_bodyB.c_position.c,s=this.m_bodyB.c_position.a,n=pt.neo(i),r=pt.neo(s),a=pt.mulVec2(n,y.sub(this.m_localAnchorA,this.m_localCenterA)),m=pt.mulVec2(r,y.sub(this.m_localAnchorB,this.m_localCenterB)),h=y.zero();h.addCombine(1,o,1,m),h.subCombine(1,e,1,a);var c=pt.mulVec2(n,this.m_localYAxisA),_=y.crossVec2Vec2(y.add(h,a),c),l=y.crossVec2Vec2(m,c),u=y.dot(h,c),p=this.m_invMassA+this.m_invMassB+this.m_invIA*this.m_sAy*this.m_sAy+this.m_invIB*this.m_sBy*this.m_sBy,d=0!=p?-u/p:0,f=y.mulNumVec2(d,c),v=d*_,x=d*l;return e.subMul(this.m_invMassA,f),i-=this.m_invIA*v,o.addMul(this.m_invMassB,f),s+=this.m_invIB*x,this.m_bodyA.c_position.c.setVec2(e),this.m_bodyA.c_position.a=i,this.m_bodyB.c_position.c.setVec2(o),this.m_bodyB.c_position.a=s,vs(u)<=g.linearSlop},e.TYPE="wheel-joint",e}(Jt),bs=0,Bs={World:no,Body:Rt,Joint:Jt,Fixture:Tt,Shape:Vt},ws={Vec2:y,Vec3:ro,World:no,Body:Rt,Joint:Jt,Fixture:Tt,Shape:Vt},Vs=((_s={})[Rt.STATIC]=Rt,_s[Rt.DYNAMIC]=Rt,_s[Rt.KINEMATIC]=Rt,_s[uo.TYPE]=uo,_s[wo.TYPE]=wo,_s[ho.TYPE]=ho,_s[So.TYPE]=So,_s[qo.TYPE]=qo,_s[ko.TYPE]=ko,_s[es.TYPE]=es,_s[os.TYPE]=os,_s[rs.TYPE]=rs,_s[$o.TYPE]=$o,_s[hs.TYPE]=hs,_s[Uo.TYPE]=Uo,_s[us.TYPE]=us,_s[fs.TYPE]=fs,_s[gs.TYPE]=gs,_s),Cs={rootClass:no,preSerialize:function(t){return t},postSerialize:function(t,e){return t},preDeserialize:function(t){return t},postDeserialize:function(t,e){return t}},Ms=function(t){var e=this;this.toJson=function(t){var i=e.options.preSerialize,o=e.options.postSerialize,s=[],n=[t],r={};function a(t,e){if(t.__sid=t.__sid||++bs,!r[t.__sid]){n.push(t);var i={refIndex:s.length+n.length,refType:e};r[t.__sid]=i}return r[t.__sid]}function m(t,e){if(void 0===e&&(e=!1),"object"!=typeof t||null===t)return t;if("function"==typeof t._serialize){if(!e)for(var s in Bs)if(t instanceof Bs[s])return a(t,s);t=function(t){var e=(t=i(t))._serialize();return o(e,t)}(t)}if(Array.isArray(t)){for(var n=[],r=0;ra*a||(e.type=t.ManifoldType.e_circles,k(e.localPoint,i.m_p),D(e.localNormal),e.pointCount=1,k(e.points[0].localPoint,s.m_p),e.points[0].id.setFeatures(0,t.ContactFeatureType.e_vertex,0,t.ContactFeatureType.e_vertex))};oo.addType(ho.TYPE,So.TYPE,(function(t,e,i,o,s,n,r){var a=i.getShape(),m=n.getShape();Es(t,a,e,m,s)})),oo.addType(uo.TYPE,So.TYPE,(function(t,e,i,o,s,n,r){var a=i.getShape(),m=new ho;a.getChildEdge(m,o);var h=m,c=n.getShape();Es(t,h,e,c,s)}));var Ns=q(0,0),ks=q(0,0),Ds=q(0,0),js=q(0,0),Os=q(0,0),Rs=q(0,0),Es=function(e,i,o,s,n){e.pointCount=0,ht(js,n,o,s.m_p);var r=i.m_vertex1,a=i.m_vertex2;E(Ns,a,r);var m=$(Ns,a)-$(Ns,js),h=$(Ns,js)-$(Ns,r),c=i.m_radius+s.m_radius;if(h<=0){if(k(Os,r),it(js,r)>c*c)return;if(i.m_hasVertex0){var _=i.m_vertex0,l=r;if(E(ks,l,_),$(ks,l)-$(ks,js)>0)return}return e.type=t.ManifoldType.e_circles,D(e.localNormal),k(e.localPoint,Os),e.pointCount=1,k(e.points[0].localPoint,s.m_p),void e.points[0].id.setFeatures(0,t.ContactFeatureType.e_vertex,0,t.ContactFeatureType.e_vertex)}if(m<=0){if(k(Os,a),it(js,Os)>c*c)return;if(i.m_hasVertex3){var u=i.m_vertex3,p=a;if(E(Ds,u,p),$(Ds,js)-$(Ds,p)>0)return}return e.type=t.ManifoldType.e_circles,D(e.localNormal),k(e.localPoint,Os),e.pointCount=1,k(e.points[0].localPoint,s.m_p),void e.points[0].id.setFeatures(1,t.ContactFeatureType.e_vertex,0,t.ContactFeatureType.e_vertex)}var y=tt(Ns);U(Os,m/y,r,h/y,a),it(js,Os)>c*c||(G(Rs,1,Ns),$(Rs,js)-$(Rs,r)<0&&j(Rs),K(Rs),e.type=t.ManifoldType.e_faceA,k(e.localNormal,Rs),k(e.localPoint,r),e.pointCount=1,k(e.points[0].localPoint,s.m_p),e.points[0].id.setFeatures(0,t.ContactFeatureType.e_face,0,t.ContactFeatureType.e_vertex))},Js=[new ui,new ui],Ys=[new ui,new ui],Ws=[new ui,new ui],Hs=q(0,0),Us=q(0,0),Zs=q(0,0),Ks=nt(0,0,0),Xs=q(0,0),Gs=q(0,0),Qs=q(0,0),$s=q(0,0),tn=q(0,0),en=q(0,0),on=q(0,0),sn=q(0,0);function nn(t,e,i,o,s){var n=t.m_count,r=i.m_count,a=t.m_normals,m=t.m_vertices,h=i.m_vertices;ct(Ks,o,e);for(var c=0,_=-1/0,l=0;l_&&(_=u,c=l)}s.maxSeparation=_,s.bestIndex=c}oo.addType(wo.TYPE,wo.TYPE,(function(t,e,i,o,s,n,r){an(t,i.getShape(),e,n.getShape(),s)}));var rn={maxSeparation:0,bestIndex:0},an=function(e,i,o,s,n){e.pointCount=0;var r=i.m_radius+s.m_radius;nn(i,o,s,n,rn);var a=rn.bestIndex,m=rn.maxSeparation;if(!(m>r)){nn(s,n,i,o,rn);var h=rn.bestIndex,c=rn.maxSeparation;if(!(c>r)){var _,l,u,p,y,d;c>m+.1*g.linearSlop?(_=s,l=i,u=n,p=o,y=h,e.type=t.ManifoldType.e_faceB,d=!0):(_=i,l=s,u=o,p=n,y=a,e.type=t.ManifoldType.e_faceA,d=!1),Js[0].recycle(),Js[1].recycle(),function(e,i,o,s,n,r){var a=i.m_normals,m=n.m_count,h=n.m_vertices,c=n.m_normals;!function(t,e,i,o){var s=e.c*o.x+e.s*o.y,n=-e.s*o.x+e.c*o.y,r=i.c*s-i.s*n,a=i.s*s+i.c*n;t.x=r,t.y=a}(sn,r.q,o.q,a[s]);for(var _=0,l=1/0,u=0;uh)return;p>m&&(m=p,a=u)}var y=a,d=y+1h*h)return;e.pointCount=1,e.type=t.ManifoldType.e_faceA,E(e.localNormal,mn,f),K(e.localNormal),k(e.localPoint,f),k(e.points[0].localPoint,s.m_p),e.points[0].id.setFeatures(0,t.ContactFeatureType.e_vertex,0,t.ContactFeatureType.e_vertex)}else if(A<=0){if(it(mn,v)>h*h)return;e.pointCount=1,e.type=t.ManifoldType.e_faceA,E(e.localNormal,mn,v),K(e.localNormal),k(e.localPoint,v),k(e.points[0].localPoint,s.m_p),e.points[0].id.setFeatures(0,t.ContactFeatureType.e_vertex,0,t.ContactFeatureType.e_vertex)}else{if(U(hn,.5,f,.5,v),$(mn,l[y])-$(hn,l[y])>h)return;e.pointCount=1,e.type=t.ManifoldType.e_faceA,k(e.localNormal,l[y]),k(e.localPoint,hn),k(e.points[0].localPoint,s.m_p),e.points[0].id.setFeatures(0,t.ContactFeatureType.e_vertex,0,t.ContactFeatureType.e_vertex)}},_n=Math.min;oo.addType(ho.TYPE,wo.TYPE,(function(t,e,i,o,s,n,r){Dn(t,i.getShape(),e,n.getShape(),s)})),oo.addType(uo.TYPE,wo.TYPE,(function(t,e,i,o,s,n,r){i.getShape().getChildEdge(pn,o),Dn(t,pn,e,n.getShape(),s)}));var ln,un,pn=new ho;!function(t){t[t.e_unknown=-1]="e_unknown",t[t.e_edgeA=1]="e_edgeA",t[t.e_edgeB=2]="e_edgeB"}(ln||(ln={})),function(t){t[t.e_isolated=0]="e_isolated",t[t.e_concave=1]="e_concave",t[t.e_convex=2]="e_convex"}(un||(un={}));var yn=function(){},dn=function(){this.vertices=[],this.normals=[],this.count=0;for(var t=0;t=0,p=y.dot(Tn,Vn)-y.dot(Tn,r)),_&&(E(In,h,m),K(In),N(Fn,In.y,-In.x),v=y.crossVec2Vec2(Mn,In)>0,d=y.dot(Fn,Vn)-y.dot(Fn,m)),D(Sn),D(Ln),D(qn),c&&_?f&&v?(l=p>=0||u>=0||d>=0)?(k(Sn,zn),k(Ln,Tn),k(qn,Fn)):(Y(Sn,-1,zn),Y(Ln,-1,zn),Y(qn,-1,zn)):f?(l=p>=0||u>=0&&d>=0)?(k(Sn,zn),k(Ln,Tn),k(qn,zn)):(Y(Sn,-1,zn),Y(Ln,-1,Fn),Y(qn,-1,zn)):v?(l=d>=0||p>=0&&u>=0)?(k(Sn,zn),k(Ln,zn),k(qn,Fn)):(Y(Sn,-1,zn),Y(Ln,-1,zn),Y(qn,-1,Tn)):(l=p>=0&&u>=0&&d>=0)?(k(Sn,zn),k(Ln,zn),k(qn,zn)):(Y(Sn,-1,zn),Y(Ln,-1,Fn),Y(qn,-1,Tn)):c?f?(l=p>=0||u>=0)?(k(Sn,zn),k(Ln,Tn),Y(qn,-1,zn)):(Y(Sn,-1,zn),k(Ln,zn),Y(qn,-1,zn)):(l=p>=0&&u>=0)?(k(Sn,zn),k(Ln,zn),Y(qn,-1,zn)):(Y(Sn,-1,zn),k(Ln,zn),Y(qn,-1,Tn)):_?v?(l=u>=0||d>=0)?(k(Sn,zn),Y(Ln,-1,zn),k(qn,Fn)):(Y(Sn,-1,zn),Y(Ln,-1,zn),k(qn,zn)):(l=u>=0&&d>=0)?(k(Sn,zn),Y(Ln,-1,zn),k(qn,zn)):(Y(Sn,-1,zn),Y(Ln,-1,Fn),k(qn,zn)):(l=u>=0)?(k(Sn,zn),Y(Ln,-1,zn),Y(qn,-1,zn)):(Y(Sn,-1,zn),k(Ln,zn),k(qn,zn)),Bn.count=s.m_count;for(var x=0;xA)){bn.type=ln.e_unknown,bn.index=-1,bn.separation=-1/0,N(Nn,-Sn.y,Sn.x);for(x=0;xA){bn.type=ln.e_edgeB,bn.index=x,bn.separation=B;break}if($(kn,Nn)>=0){if($(kn,Sn)-$(qn,Sn)<-g.angularSlop)continue}else if($(kn,Sn)-$(Ln,Sn)<-g.angularSlop)continue;B>bn.separation&&(bn.type=ln.e_edgeB,bn.index=x,bn.separation=B)}if(!(bn.type!=ln.e_unknown&&bn.separation>A)){var C;if(C=bn.type==ln.e_unknown?gn:bn.separation>.98*gn.separation+.001?bn:gn,An[0].recycle(),An[1].recycle(),C.type==ln.e_edgeA){e.type=t.ManifoldType.e_faceA;var M=0,I=$(Sn,Bn.normals[0]);for(x=1;x>1;x2|=x2>>2;x2|=x2>>4;x2|=x2>>8;x2|=x2>>16;return x2+1}function isPowerOfTwo(x2){return x2>0&&(x2&x2-1)===0}function mod(num,min,max){if(typeof min==="undefined"){max=1;min=0}else if(typeof max==="undefined"){max=min;min=0}if(max>min){num=(num-min)%(max-min);return num+(num<0?max:min)}else{num=(num-max)%(min-max);return num+(num<=0?min:max)}}function clamp(num,min,max){if(nummax){return max}else{return num}}function random(min,max){if(typeof min==="undefined"){max=1;min=0}else if(typeof max==="undefined"){max=min;min=0}return min===max?min:math_random()*(max-min)+min}var math=Object.create(Math);math.EPSILON=EPSILON;math.isFinite=isFinite;math.nextPowerOfTwo=nextPowerOfTwo;math.isPowerOfTwo=isPowerOfTwo;math.mod=mod;math.clamp=clamp;math.random=random;var math_abs$9=Math.abs;var math_sqrt$5=Math.sqrt;var math_max$8=Math.max;var math_min$8=Math.min;var Vec2=function(){function Vec22(x2,y){if(!(this instanceof Vec22)){return new Vec22(x2,y)}if(typeof x2==="undefined"){this.x=0;this.y=0}else if(typeof x2==="object"){this.x=x2.x;this.y=x2.y}else{this.x=x2;this.y=y}}Vec22.prototype._serialize=function(){return{x:this.x,y:this.y}};Vec22._deserialize=function(data){var obj=Object.create(Vec22.prototype);obj.x=data.x;obj.y=data.y;return obj};Vec22.zero=function(){var obj=Object.create(Vec22.prototype);obj.x=0;obj.y=0;return obj};Vec22.neo=function(x2,y){var obj=Object.create(Vec22.prototype);obj.x=x2;obj.y=y;return obj};Vec22.clone=function(v3){return Vec22.neo(v3.x,v3.y)};Vec22.prototype.toString=function(){return JSON.stringify(this)};Vec22.isValid=function(obj){if(obj===null||typeof obj==="undefined"){return false}return Number.isFinite(obj.x)&&Number.isFinite(obj.y)};Vec22.assert=function(o){};Vec22.prototype.clone=function(){return Vec22.clone(this)};Vec22.prototype.setZero=function(){this.x=0;this.y=0;return this};Vec22.prototype.set=function(x2,y){if(typeof x2==="object"){this.x=x2.x;this.y=x2.y}else{this.x=x2;this.y=y}return this};Vec22.prototype.setNum=function(x2,y){this.x=x2;this.y=y;return this};Vec22.prototype.setVec2=function(value){this.x=value.x;this.y=value.y;return this};Vec22.prototype.wSet=function(a2,v3,b2,w){if(typeof b2!=="undefined"||typeof w!=="undefined"){return this.setCombine(a2,v3,b2,w)}else{return this.setMul(a2,v3)}};Vec22.prototype.setCombine=function(a2,v3,b2,w){var x2=a2*v3.x+b2*w.x;var y=a2*v3.y+b2*w.y;this.x=x2;this.y=y;return this};Vec22.prototype.setMul=function(a2,v3){var x2=a2*v3.x;var y=a2*v3.y;this.x=x2;this.y=y;return this};Vec22.prototype.add=function(w){this.x+=w.x;this.y+=w.y;return this};Vec22.prototype.wAdd=function(a2,v3,b2,w){if(typeof b2!=="undefined"||typeof w!=="undefined"){return this.addCombine(a2,v3,b2,w)}else{return this.addMul(a2,v3)}};Vec22.prototype.addCombine=function(a2,v3,b2,w){var x2=a2*v3.x+b2*w.x;var y=a2*v3.y+b2*w.y;this.x+=x2;this.y+=y;return this};Vec22.prototype.addMul=function(a2,v3){var x2=a2*v3.x;var y=a2*v3.y;this.x+=x2;this.y+=y;return this};Vec22.prototype.wSub=function(a2,v3,b2,w){if(typeof b2!=="undefined"||typeof w!=="undefined"){return this.subCombine(a2,v3,b2,w)}else{return this.subMul(a2,v3)}};Vec22.prototype.subCombine=function(a2,v3,b2,w){var x2=a2*v3.x+b2*w.x;var y=a2*v3.y+b2*w.y;this.x-=x2;this.y-=y;return this};Vec22.prototype.subMul=function(a2,v3){var x2=a2*v3.x;var y=a2*v3.y;this.x-=x2;this.y-=y;return this};Vec22.prototype.sub=function(w){this.x-=w.x;this.y-=w.y;return this};Vec22.prototype.mul=function(m){this.x*=m;this.y*=m;return this};Vec22.prototype.length=function(){return Vec22.lengthOf(this)};Vec22.prototype.lengthSquared=function(){return Vec22.lengthSquared(this)};Vec22.prototype.normalize=function(){var length=this.length();if(lengthmax*max){var scale=max/math_sqrt$5(lengthSqr);this.x*=scale;this.y*=scale}return this};Vec22.clamp=function(v3,max){var r=Vec22.neo(v3.x,v3.y);r.clamp(max);return r};Vec22.scaleFn=function(x2,y){return function(v3){return Vec22.neo(v3.x*x2,v3.y*y)}};Vec22.translateFn=function(x2,y){return function(v3){return Vec22.neo(v3.x+x2,v3.y+y)}};return Vec22}();var math_max$7=Math.max;var math_min$7=Math.min;var AABB=function(){function AABB2(lower,upper){if(!(this instanceof AABB2)){return new AABB2(lower,upper)}this.lowerBound=Vec2.zero();this.upperBound=Vec2.zero();if(typeof lower==="object"){this.lowerBound.setVec2(lower)}if(typeof upper==="object"){this.upperBound.setVec2(upper)}else if(typeof lower==="object"){this.upperBound.setVec2(lower)}}AABB2.prototype.isValid=function(){return AABB2.isValid(this)};AABB2.isValid=function(obj){if(obj===null||typeof obj==="undefined"){return false}return Vec2.isValid(obj.lowerBound)&&Vec2.isValid(obj.upperBound)&&Vec2.sub(obj.upperBound,obj.lowerBound).lengthSquared()>=0};AABB2.assert=function(o){};AABB2.prototype.getCenter=function(){return Vec2.neo((this.lowerBound.x+this.upperBound.x)*.5,(this.lowerBound.y+this.upperBound.y)*.5)};AABB2.prototype.getExtents=function(){return Vec2.neo((this.upperBound.x-this.lowerBound.x)*.5,(this.upperBound.y-this.lowerBound.y)*.5)};AABB2.prototype.getPerimeter=function(){return 2*(this.upperBound.x-this.lowerBound.x+this.upperBound.y-this.lowerBound.y)};AABB2.prototype.combine=function(a2,b2){b2=b2||this;var lowerA=a2.lowerBound;var upperA=a2.upperBound;var lowerB=b2.lowerBound;var upperB=b2.upperBound;var lowerX=math_min$7(lowerA.x,lowerB.x);var lowerY=math_min$7(lowerA.y,lowerB.y);var upperX=math_max$7(upperB.x,upperA.x);var upperY=math_max$7(upperB.y,upperA.y);this.lowerBound.setNum(lowerX,lowerY);this.upperBound.setNum(upperX,upperY)};AABB2.prototype.combinePoints=function(a2,b2){this.lowerBound.setNum(math_min$7(a2.x,b2.x),math_min$7(a2.y,b2.y));this.upperBound.setNum(math_max$7(a2.x,b2.x),math_max$7(a2.y,b2.y))};AABB2.prototype.set=function(aabb){this.lowerBound.setNum(aabb.lowerBound.x,aabb.lowerBound.y);this.upperBound.setNum(aabb.upperBound.x,aabb.upperBound.y)};AABB2.prototype.contains=function(aabb){var result=true;result=result&&this.lowerBound.x<=aabb.lowerBound.x;result=result&&this.lowerBound.y<=aabb.lowerBound.y;result=result&&aabb.upperBound.x<=this.upperBound.x;result=result&&aabb.upperBound.y<=this.upperBound.y;return result};AABB2.prototype.extend=function(value){AABB2.extend(this,value);return this};AABB2.extend=function(out,value){out.lowerBound.x-=value;out.lowerBound.y-=value;out.upperBound.x+=value;out.upperBound.y+=value;return out};AABB2.testOverlap=function(a2,b2){var d1x=b2.lowerBound.x-a2.upperBound.x;var d2x=a2.lowerBound.x-b2.upperBound.x;var d1y=b2.lowerBound.y-a2.upperBound.y;var d2y=a2.lowerBound.y-b2.upperBound.y;if(d1x>0||d1y>0||d2x>0||d2y>0){return false}return true};AABB2.areEqual=function(a2,b2){return Vec2.areEqual(a2.lowerBound,b2.lowerBound)&&Vec2.areEqual(a2.upperBound,b2.upperBound)};AABB2.diff=function(a2,b2){var wD=math_max$7(0,math_min$7(a2.upperBound.x,b2.upperBound.x)-math_max$7(b2.lowerBound.x,a2.lowerBound.x));var hD=math_max$7(0,math_min$7(a2.upperBound.y,b2.upperBound.y)-math_max$7(b2.lowerBound.y,a2.lowerBound.y));var wA=a2.upperBound.x-a2.lowerBound.x;var hA=a2.upperBound.y-a2.lowerBound.y;var wB=b2.upperBound.x-b2.lowerBound.x;var hB=b2.upperBound.y-b2.lowerBound.y;return wA*hA+wB*hB-wD*hD};AABB2.prototype.rayCast=function(output2,input2){var tmin=-Infinity;var tmax=Infinity;var p=input2.p1;var d2=Vec2.sub(input2.p2,input2.p1);var absD=Vec2.abs(d2);var normal3=Vec2.zero();for(var f="x";f!==null;f=f==="x"?"y":null){if(absD.xt2){var temp3=t1;t1=t2;t2=temp3;s2=1}if(t1>tmin){normal3.setZero();normal3[f]=s2;tmin=t1}tmax=math_min$7(tmax,t2);if(tmin>tmax){return false}}}if(tmin<0||input2.maxFraction0){item=this._list.shift()}else{this._createCount++;if(this._hasCreateFn){item=this._createFn()}else{item={}}}this._allocateCount++;if(this._hasAllocateFn){this._allocateFn(item)}return item};Pool2.prototype.release=function(item){if(this._list.length"+this._allocateCount+" <"+this._releaseCount+" -"+this._disposeCount+" ="+this._list.length+"/"+this._max};return Pool2}();var math_abs$8=Math.abs;var math_max$6=Math.max;var TreeNode=function(){function TreeNode2(id){this.aabb=new AABB;this.userData=null;this.parent=null;this.child1=null;this.child2=null;this.height=-1;this.id=id}TreeNode2.prototype.toString=function(){return this.id+": "+this.userData};TreeNode2.prototype.isLeaf=function(){return this.child1==null};return TreeNode2}();var poolTreeNode=new Pool({create:function(){return new TreeNode},release:function(node){node.userData=null;node.parent=null;node.child1=null;node.child2=null;node.height=-1;node.id=void 0}});var DynamicTree=function(){function DynamicTree2(){this.inputPool=new Pool({create:function(){return{}},release:function(stack){}});this.stackPool=new Pool({create:function(){return[]},release:function(stack){stack.length=0}});this.iteratorPool=new Pool({create:function(){return new Iterator},release:function(iterator){iterator.close()}});this.m_root=null;this.m_nodes={};this.m_lastProxyId=0}DynamicTree2.prototype.getUserData=function(id){var node=this.m_nodes[id];return node.userData};DynamicTree2.prototype.getFatAABB=function(id){var node=this.m_nodes[id];return node.aabb};DynamicTree2.prototype.allocateNode=function(){var node=poolTreeNode.allocate();node.id=++this.m_lastProxyId;this.m_nodes[node.id]=node;return node};DynamicTree2.prototype.freeNode=function(node){delete this.m_nodes[node.id];poolTreeNode.release(node)};DynamicTree2.prototype.createProxy=function(aabb,userData){var node=this.allocateNode();node.aabb.set(aabb);AABB.extend(node.aabb,SettingsInternal.aabbExtension);node.userData=userData;node.height=0;this.insertLeaf(node);return node.id};DynamicTree2.prototype.destroyProxy=function(id){var node=this.m_nodes[id];this.removeLeaf(node);this.freeNode(node)};DynamicTree2.prototype.moveProxy=function(id,aabb,d2){var node=this.m_nodes[id];if(node.aabb.contains(aabb)){return false}this.removeLeaf(node);node.aabb.set(aabb);aabb=node.aabb;AABB.extend(aabb,SettingsInternal.aabbExtension);if(d2.x<0){aabb.lowerBound.x+=d2.x*SettingsInternal.aabbMultiplier}else{aabb.upperBound.x+=d2.x*SettingsInternal.aabbMultiplier}if(d2.y<0){aabb.lowerBound.y+=d2.y*SettingsInternal.aabbMultiplier}else{aabb.upperBound.y+=d2.y*SettingsInternal.aabbMultiplier}this.insertLeaf(node);return true};DynamicTree2.prototype.insertLeaf=function(leaf){if(this.m_root==null){this.m_root=leaf;this.m_root.parent=null;return}var leafAABB=leaf.aabb;var index=this.m_root;while(!index.isLeaf()){var child1=index.child1;var child2=index.child2;var area=index.aabb.getPerimeter();var combinedArea=AABB.combinedPerimeter(index.aabb,leafAABB);var cost=2*combinedArea;var inheritanceCost=2*(combinedArea-area);var newArea1=AABB.combinedPerimeter(leafAABB,child1.aabb);var cost1=newArea1+inheritanceCost;if(!child1.isLeaf()){var oldArea=child1.aabb.getPerimeter();cost1-=oldArea}var newArea2=AABB.combinedPerimeter(leafAABB,child2.aabb);var cost2=newArea2+inheritanceCost;if(!child2.isLeaf()){var oldArea=child2.aabb.getPerimeter();cost2-=oldArea}if(cost1){var F=C.child1;var G=C.child2;C.child1=A;C.parent=A.parent;A.parent=C;if(C.parent!=null){if(C.parent.child1===iA){C.parent.child1=C}else{C.parent.child2=C}}else{this.m_root=C}if(F.height>G.height){C.child2=F;A.child2=G;G.parent=A;A.aabb.combine(B.aabb,G.aabb);C.aabb.combine(A.aabb,F.aabb);A.height=1+math_max$6(B.height,G.height);C.height=1+math_max$6(A.height,F.height)}else{C.child2=G;A.child2=F;F.parent=A;A.aabb.combine(B.aabb,F.aabb);C.aabb.combine(A.aabb,G.aabb);A.height=1+math_max$6(B.height,F.height);C.height=1+math_max$6(A.height,G.height)}return C}if(balance<-1){var D=B.child1;var E=B.child2;B.child1=A;B.parent=A.parent;A.parent=B;if(B.parent!=null){if(B.parent.child1===A){B.parent.child1=B}else{B.parent.child2=B}}else{this.m_root=B}if(D.height>E.height){B.child2=D;A.child1=E;E.parent=A;A.aabb.combine(C.aabb,E.aabb);B.aabb.combine(A.aabb,D.aabb);A.height=1+math_max$6(C.height,E.height);B.height=1+math_max$6(A.height,D.height)}else{B.child2=E;A.child1=D;D.parent=A;A.aabb.combine(C.aabb,D.aabb);B.aabb.combine(A.aabb,E.aabb);A.height=1+math_max$6(C.height,D.height);B.height=1+math_max$6(A.height,E.height)}return B}return A};DynamicTree2.prototype.getHeight=function(){if(this.m_root==null){return 0}return this.m_root.height};DynamicTree2.prototype.getAreaRatio=function(){if(this.m_root==null){return 0}var root=this.m_root;var rootArea=root.aabb.getPerimeter();var totalArea=0;var node;var it=this.iteratorPool.allocate().preorder(this.m_root);while(node=it.next()){if(node.height<0){continue}totalArea+=node.aabb.getPerimeter()}this.iteratorPool.release(it);return totalArea/rootArea};DynamicTree2.prototype.computeHeight=function(id){var node;if(typeof id!=="undefined"){node=this.m_nodes[id]}else{node=this.m_root}if(node.isLeaf()){return 0}var height1=this.computeHeight(node.child1.id);var height2=this.computeHeight(node.child2.id);return 1+math_max$6(height1,height2)};DynamicTree2.prototype.validateStructure=function(node){if(node==null){return}if(node===this.m_root);var child1=node.child1;var child2=node.child2;if(node.isLeaf()){return}this.validateStructure(child1);this.validateStructure(child2)};DynamicTree2.prototype.validateMetrics=function(node){if(node==null){return}var child1=node.child1;var child2=node.child2;if(node.isLeaf()){return}child1.height;child2.height;var aabb=new AABB;aabb.combine(child1.aabb,child2.aabb);this.validateMetrics(child1);this.validateMetrics(child2)};DynamicTree2.prototype.validate=function(){return};DynamicTree2.prototype.getMaxBalance=function(){var maxBalance=0;var node;var it=this.iteratorPool.allocate().preorder(this.m_root);while(node=it.next()){if(node.height<=1){continue}var balance=math_abs$8(node.child2.height-node.child1.height);maxBalance=math_max$6(maxBalance,balance)}this.iteratorPool.release(it);return maxBalance};DynamicTree2.prototype.rebuildBottomUp=function(){var nodes=[];var count=0;var node;var it=this.iteratorPool.allocate().preorder(this.m_root);while(node=it.next()){if(node.height<0){continue}if(node.isLeaf()){node.parent=null;nodes[count]=node;++count}else{this.freeNode(node)}}this.iteratorPool.release(it);while(count>1){var minCost=Infinity;var iMin=-1;var jMin=-1;for(var i=0;i0){var node=stack.pop();if(node==null){continue}if(AABB.testOverlap(node.aabb,aabb)){if(node.isLeaf()){var proceed=queryCallback(node.id);if(proceed===false){return}}else{stack.push(node.child1);stack.push(node.child2)}}}this.stackPool.release(stack)};DynamicTree2.prototype.rayCast=function(input2,rayCastCallback){var p1=input2.p1;var p2=input2.p2;var r=Vec2.sub(p2,p1);r.normalize();var v3=Vec2.crossNumVec2(1,r);var abs_v=Vec2.abs(v3);var maxFraction=input2.maxFraction;var segmentAABB=new AABB;var t=Vec2.combine(1-maxFraction,p1,maxFraction,p2);segmentAABB.combinePoints(p1,t);var stack=this.stackPool.allocate();var subInput=this.inputPool.allocate();stack.push(this.m_root);while(stack.length>0){var node=stack.pop();if(node==null){continue}if(AABB.testOverlap(node.aabb,segmentAABB)===false){continue}var c2=node.aabb.getCenter();var h=node.aabb.getExtents();var separation=math_abs$8(Vec2.dot(v3,Vec2.sub(p1,c2)))-Vec2.dot(abs_v,h);if(separation>0){continue}if(node.isLeaf()){subInput.p1=Vec2.clone(input2.p1);subInput.p2=Vec2.clone(input2.p2);subInput.maxFraction=maxFraction;var value=rayCastCallback(subInput,node.id);if(value===0){break}else if(value>0){maxFraction=value;t=Vec2.combine(1-maxFraction,p1,maxFraction,p2);segmentAABB.combinePoints(p1,t)}}else{stack.push(node.child1);stack.push(node.child2)}}this.stackPool.release(stack);this.inputPool.release(subInput)};return DynamicTree2}();var Iterator=function(){function Iterator2(){this.parents=[];this.states=[]}Iterator2.prototype.preorder=function(root){this.parents.length=0;this.parents.push(root);this.states.length=0;this.states.push(0);return this};Iterator2.prototype.next=function(){while(this.parents.length>0){var i=this.parents.length-1;var node=this.parents[i];if(this.states[i]===0){this.states[i]=1;return node}if(this.states[i]===1){this.states[i]=2;if(node.child1){this.parents.push(node.child1);this.states.push(1);return node.child1}}if(this.states[i]===2){this.states[i]=3;if(node.child2){this.parents.push(node.child2);this.states.push(1);return node.child2}}this.parents.pop();this.states.pop()}};Iterator2.prototype.close=function(){this.parents.length=0};return Iterator2}();var math_max$5=Math.max;var math_min$6=Math.min;var BroadPhase=function(){function BroadPhase2(){var _this=this;this.m_tree=new DynamicTree;this.m_moveBuffer=[];this.query=function(aabb,queryCallback){_this.m_tree.query(aabb,queryCallback)};this.queryCallback=function(proxyId){if(proxyId===_this.m_queryProxyId){return true}var proxyIdA=math_min$6(proxyId,_this.m_queryProxyId);var proxyIdB=math_max$5(proxyId,_this.m_queryProxyId);var userDataA=_this.m_tree.getUserData(proxyIdA);var userDataB=_this.m_tree.getUserData(proxyIdB);_this.m_callback(userDataA,userDataB);return true}}BroadPhase2.prototype.getUserData=function(proxyId){return this.m_tree.getUserData(proxyId)};BroadPhase2.prototype.testOverlap=function(proxyIdA,proxyIdB){var aabbA=this.m_tree.getFatAABB(proxyIdA);var aabbB=this.m_tree.getFatAABB(proxyIdB);return AABB.testOverlap(aabbA,aabbB)};BroadPhase2.prototype.getFatAABB=function(proxyId){return this.m_tree.getFatAABB(proxyId)};BroadPhase2.prototype.getProxyCount=function(){return this.m_moveBuffer.length};BroadPhase2.prototype.getTreeHeight=function(){return this.m_tree.getHeight()};BroadPhase2.prototype.getTreeBalance=function(){return this.m_tree.getMaxBalance()};BroadPhase2.prototype.getTreeQuality=function(){return this.m_tree.getAreaRatio()};BroadPhase2.prototype.rayCast=function(input2,rayCastCallback){this.m_tree.rayCast(input2,rayCastCallback)};BroadPhase2.prototype.shiftOrigin=function(newOrigin){this.m_tree.shiftOrigin(newOrigin)};BroadPhase2.prototype.createProxy=function(aabb,userData){var proxyId=this.m_tree.createProxy(aabb,userData);this.bufferMove(proxyId);return proxyId};BroadPhase2.prototype.destroyProxy=function(proxyId){this.unbufferMove(proxyId);this.m_tree.destroyProxy(proxyId)};BroadPhase2.prototype.moveProxy=function(proxyId,aabb,displacement2){var changed=this.m_tree.moveProxy(proxyId,aabb,displacement2);if(changed){this.bufferMove(proxyId)}};BroadPhase2.prototype.touchProxy=function(proxyId){this.bufferMove(proxyId)};BroadPhase2.prototype.bufferMove=function(proxyId){this.m_moveBuffer.push(proxyId)};BroadPhase2.prototype.unbufferMove=function(proxyId){for(var i=0;i0){this.m_queryProxyId=this.m_moveBuffer.pop();if(this.m_queryProxyId===null){continue}var fatAABB=this.m_tree.getFatAABB(this.m_queryProxyId);this.m_tree.query(fatAABB,this.queryCallback)}};return BroadPhase2}();var math_sin$2=Math.sin;var math_cos$2=Math.cos;var math_sqrt$4=Math.sqrt;function vec2(x2,y){return{x:x2,y:y}}function rotation(angle){return{s:math_sin$2(angle),c:math_cos$2(angle)}}function setVec2(out,x2,y){out.x=x2;out.y=y;return out}function copyVec2(out,w){out.x=w.x;out.y=w.y;return out}function zeroVec2(out){out.x=0;out.y=0;return out}function negVec2(out){out.x=-out.x;out.y=-out.y;return out}function plusVec2(out,w){out.x+=w.x;out.y+=w.y;return out}function addVec2(out,v3,w){out.x=v3.x+w.x;out.y=v3.x+w.y;return out}function minusVec2(out,w){out.x-=w.x;out.y-=w.y;return out}function subVec2(out,v3,w){out.x=v3.x-w.x;out.y=v3.y-w.y;return out}function mulVec2(out,m){out.x*=m;out.y*=m;return out}function scaleVec2(out,m,w){out.x=m*w.x;out.y=m*w.y;return out}function plusScaleVec2(out,m,w){out.x+=m*w.x;out.y+=m*w.y;return out}function minusScaleVec2(out,m,w){out.x-=m*w.x;out.y-=m*w.y;return out}function combine2Vec2(out,am,a2,bm,b2){out.x=am*a2.x+bm*b2.x;out.y=am*a2.y+bm*b2.y;return out}function combine3Vec2(out,am,a2,bm,b2,cm,c2){out.x=am*a2.x+bm*b2.x+cm*c2.x;out.y=am*a2.y+bm*b2.y+cm*c2.y;return out}function normalizeVec2Length(out){var length=math_sqrt$4(out.x*out.x+out.y*out.y);if(length!==0){var invLength=1/length;out.x*=invLength;out.y*=invLength}return length}function normalizeVec2(out){var length=math_sqrt$4(out.x*out.x+out.y*out.y);if(length>0){var invLength=1/length;out.x*=invLength;out.y*=invLength}return out}function crossVec2Num(out,v3,w){var x2=w*v3.y;var y=-w*v3.x;out.x=x2;out.y=y;return out}function crossNumVec2(out,w,v3){var x2=-w*v3.y;var y=w*v3.x;out.x=x2;out.y=y;return out}function crossVec2Vec2(a2,b2){return a2.x*b2.y-a2.y*b2.x}function dotVec2(a2,b2){return a2.x*b2.x+a2.y*b2.y}function lengthSqrVec2(a2){return a2.x*a2.x+a2.y*a2.y}function distVec2(a2,b2){var dx=a2.x-b2.x;var dy=a2.y-b2.y;return math_sqrt$4(dx*dx+dy*dy)}function distSqrVec2(a2,b2){var dx=a2.x-b2.x;var dy=a2.y-b2.y;return dx*dx+dy*dy}function setRotAngle(out,a2){out.c=math_cos$2(a2);out.s=math_sin$2(a2);return out}function rotVec2(out,q,v3){out.x=q.c*v3.x-q.s*v3.y;out.y=q.s*v3.x+q.c*v3.y;return out}function derotVec2(out,q,v3){var x2=q.c*v3.x+q.s*v3.y;var y=-q.s*v3.x+q.c*v3.y;out.x=x2;out.y=y;return out}function rerotVec2(out,before,after,v3){var x0=before.c*v3.x+before.s*v3.y;var y0=-before.s*v3.x+before.c*v3.y;var x2=after.c*x0-after.s*y0;var y=after.s*x0+after.c*y0;out.x=x2;out.y=y;return out}function transform(x2,y,a2){return{p:vec2(x2,y),q:rotation(a2)}}function copyTransform(out,transform2){out.p.x=transform2.p.x;out.p.y=transform2.p.y;out.q.s=transform2.q.s;out.q.c=transform2.q.c;return out}function transformVec2(out,xf2,v3){var x2=xf2.q.c*v3.x-xf2.q.s*v3.y+xf2.p.x;var y=xf2.q.s*v3.x+xf2.q.c*v3.y+xf2.p.y;out.x=x2;out.y=y;return out}function detransformVec2(out,xf2,v3){var px=v3.x-xf2.p.x;var py=v3.y-xf2.p.y;var x2=xf2.q.c*px+xf2.q.s*py;var y=-xf2.q.s*px+xf2.q.c*py;out.x=x2;out.y=y;return out}function retransformVec2(out,from,to,v3){var x0=from.q.c*v3.x-from.q.s*v3.y+from.p.x;var y0=from.q.s*v3.x+from.q.c*v3.y+from.p.y;var px=x0-to.p.x;var py=y0-to.p.y;var x2=to.q.c*px+to.q.s*py;var y=-to.q.s*px+to.q.c*py;out.x=x2;out.y=y;return out}function detransformTransform(out,a2,b2){var c2=a2.q.c*b2.q.c+a2.q.s*b2.q.s;var s2=a2.q.c*b2.q.s-a2.q.s*b2.q.c;var x2=a2.q.c*(b2.p.x-a2.p.x)+a2.q.s*(b2.p.y-a2.p.y);var y=-a2.q.s*(b2.p.x-a2.p.x)+a2.q.c*(b2.p.y-a2.p.y);out.q.c=c2;out.q.s=s2;out.p.x=x2;out.p.y=y;return out}var math_sin$1=Math.sin;var math_cos$1=Math.cos;var math_atan2$1=Math.atan2;var Rot=function(){function Rot2(angle){if(!(this instanceof Rot2)){return new Rot2(angle)}if(typeof angle==="number"){this.setAngle(angle)}else if(typeof angle==="object"){this.setRot(angle)}else{this.setIdentity()}}Rot2.neo=function(angle){var obj=Object.create(Rot2.prototype);obj.setAngle(angle);return obj};Rot2.clone=function(rot){var obj=Object.create(Rot2.prototype);obj.s=rot.s;obj.c=rot.c;return obj};Rot2.identity=function(){var obj=Object.create(Rot2.prototype);obj.s=0;obj.c=1;return obj};Rot2.isValid=function(obj){if(obj===null||typeof obj==="undefined"){return false}return Number.isFinite(obj.s)&&Number.isFinite(obj.c)};Rot2.assert=function(o){};Rot2.prototype.setIdentity=function(){this.s=0;this.c=1};Rot2.prototype.set=function(angle){if(typeof angle==="object"){this.s=angle.s;this.c=angle.c}else{this.s=math_sin$1(angle);this.c=math_cos$1(angle)}};Rot2.prototype.setRot=function(angle){this.s=angle.s;this.c=angle.c};Rot2.prototype.setAngle=function(angle){this.s=math_sin$1(angle);this.c=math_cos$1(angle)};Rot2.prototype.getAngle=function(){return math_atan2$1(this.s,this.c)};Rot2.prototype.getXAxis=function(){return Vec2.neo(this.c,this.s)};Rot2.prototype.getYAxis=function(){return Vec2.neo(-this.s,this.c)};Rot2.mul=function(rot,m){if("c"in m&&"s"in m){var qr=Rot2.identity();qr.s=rot.s*m.c+rot.c*m.s;qr.c=rot.c*m.c-rot.s*m.s;return qr}else if("x"in m&&"y"in m){return Vec2.neo(rot.c*m.x-rot.s*m.y,rot.s*m.x+rot.c*m.y)}};Rot2.mulRot=function(rot,m){var qr=Rot2.identity();qr.s=rot.s*m.c+rot.c*m.s;qr.c=rot.c*m.c-rot.s*m.s;return qr};Rot2.mulVec2=function(rot,m){return Vec2.neo(rot.c*m.x-rot.s*m.y,rot.s*m.x+rot.c*m.y)};Rot2.mulSub=function(rot,v3,w){var x2=rot.c*(v3.x-w.x)-rot.s*(v3.y-w.y);var y=rot.s*(v3.x-w.x)+rot.c*(v3.y-w.y);return Vec2.neo(x2,y)};Rot2.mulT=function(rot,m){if("c"in m&&"s"in m){var qr=Rot2.identity();qr.s=rot.c*m.s-rot.s*m.c;qr.c=rot.c*m.c+rot.s*m.s;return qr}else if("x"in m&&"y"in m){return Vec2.neo(rot.c*m.x+rot.s*m.y,-rot.s*m.x+rot.c*m.y)}};Rot2.mulTRot=function(rot,m){var qr=Rot2.identity();qr.s=rot.c*m.s-rot.s*m.c;qr.c=rot.c*m.c+rot.s*m.s;return qr};Rot2.mulTVec2=function(rot,m){return Vec2.neo(rot.c*m.x+rot.s*m.y,-rot.s*m.x+rot.c*m.y)};return Rot2}();var math_atan2=Math.atan2;var math_PI$5=Math.PI;var temp$7=vec2(0,0);var Sweep=function(){function Sweep2(){this.localCenter=Vec2.zero();this.c=Vec2.zero();this.a=0;this.alpha0=0;this.c0=Vec2.zero();this.a0=0}Sweep2.prototype.recycle=function(){zeroVec2(this.localCenter);zeroVec2(this.c);this.a=0;this.alpha0=0;zeroVec2(this.c0);this.a0=0};Sweep2.prototype.setTransform=function(xf2){transformVec2(temp$7,xf2,this.localCenter);copyVec2(this.c,temp$7);copyVec2(this.c0,temp$7);this.a=this.a0=math_atan2(xf2.q.s,xf2.q.c)};Sweep2.prototype.setLocalCenter=function(localCenter2,xf2){copyVec2(this.localCenter,localCenter2);transformVec2(temp$7,xf2,this.localCenter);copyVec2(this.c,temp$7);copyVec2(this.c0,temp$7)};Sweep2.prototype.getTransform=function(xf2,beta){if(beta===void 0){beta=0}setRotAngle(xf2.q,(1-beta)*this.a0+beta*this.a);combine2Vec2(xf2.p,1-beta,this.c0,beta,this.c);minusVec2(xf2.p,rotVec2(temp$7,xf2.q,this.localCenter))};Sweep2.prototype.advance=function(alpha){var beta=(alpha-this.alpha0)/(1-this.alpha0);combine2Vec2(this.c0,beta,this.c,1-beta,this.c0);this.a0=beta*this.a+(1-beta)*this.a0;this.alpha0=alpha};Sweep2.prototype.forward=function(){this.a0=this.a;copyVec2(this.c0,this.c)};Sweep2.prototype.normalize=function(){var a0=mod(this.a0,-math_PI$5,+math_PI$5);this.a-=this.a0-a0;this.a0=a0};Sweep2.prototype.set=function(that){copyVec2(this.localCenter,that.localCenter);copyVec2(this.c,that.c);this.a=that.a;this.alpha0=that.alpha0;copyVec2(this.c0,that.c0);this.a0=that.a0};return Sweep2}();var Transform=function(){function Transform2(position,rotation2){if(!(this instanceof Transform2)){return new Transform2(position,rotation2)}this.p=Vec2.zero();this.q=Rot.identity();if(typeof position!=="undefined"){this.p.setVec2(position)}if(typeof rotation2!=="undefined"){this.q.setAngle(rotation2)}}Transform2.clone=function(xf2){var obj=Object.create(Transform2.prototype);obj.p=Vec2.clone(xf2.p);obj.q=Rot.clone(xf2.q);return obj};Transform2.neo=function(position,rotation2){var obj=Object.create(Transform2.prototype);obj.p=Vec2.clone(position);obj.q=Rot.clone(rotation2);return obj};Transform2.identity=function(){var obj=Object.create(Transform2.prototype);obj.p=Vec2.zero();obj.q=Rot.identity();return obj};Transform2.prototype.setIdentity=function(){this.p.setZero();this.q.setIdentity()};Transform2.prototype.set=function(a2,b2){if(typeof b2==="undefined"){this.p.set(a2.p);this.q.set(a2.q)}else{this.p.set(a2);this.q.set(b2)}};Transform2.prototype.setNum=function(position,rotation2){this.p.setVec2(position);this.q.setAngle(rotation2)};Transform2.prototype.setTransform=function(xf2){this.p.setVec2(xf2.p);this.q.setRot(xf2.q)};Transform2.isValid=function(obj){if(obj===null||typeof obj==="undefined"){return false}return Vec2.isValid(obj.p)&&Rot.isValid(obj.q)};Transform2.assert=function(o){};Transform2.mul=function(a2,b2){if(Array.isArray(b2)){var arr=[];for(var i=0;i0}var collideA=(that.m_filterMaskBits&this.m_filterCategoryBits)!==0;var collideB=(that.m_filterCategoryBits&this.m_filterMaskBits)!==0;var collide=collideA&&collideB;return collide};return Fixture2}();var STATIC="static";var KINEMATIC="kinematic";var DYNAMIC="dynamic";var oldCenter=vec2(0,0);var localCenter=vec2(0,0);var shift=vec2(0,0);var temp$6=vec2(0,0);var xf$2=transform(0,0,0);var BodyDefDefault={type:STATIC,position:Vec2.zero(),angle:0,linearVelocity:Vec2.zero(),angularVelocity:0,linearDamping:0,angularDamping:0,fixedRotation:false,bullet:false,gravityScale:1,allowSleep:true,awake:true,active:true,userData:null};var Body=function(){function Body2(world,def){this.style={};this.appData={};def=options(def,BodyDefDefault);this.m_world=world;this.m_awakeFlag=def.awake;this.m_autoSleepFlag=def.allowSleep;this.m_bulletFlag=def.bullet;this.m_fixedRotationFlag=def.fixedRotation;this.m_activeFlag=def.active;this.m_islandFlag=false;this.m_toiFlag=false;this.m_userData=def.userData;this.m_type=def.type;if(this.m_type==DYNAMIC){this.m_mass=1;this.m_invMass=1}else{this.m_mass=0;this.m_invMass=0}this.m_I=0;this.m_invI=0;this.m_xf=Transform.identity();this.m_xf.p.setVec2(def.position);this.m_xf.q.setAngle(def.angle);this.m_sweep=new Sweep;this.m_sweep.setTransform(this.m_xf);this.c_velocity=new Velocity;this.c_position=new Position;this.m_force=Vec2.zero();this.m_torque=0;this.m_linearVelocity=Vec2.clone(def.linearVelocity);this.m_angularVelocity=def.angularVelocity;this.m_linearDamping=def.linearDamping;this.m_angularDamping=def.angularDamping;this.m_gravityScale=def.gravityScale;this.m_sleepTime=0;this.m_jointList=null;this.m_contactList=null;this.m_fixtureList=null;this.m_prev=null;this.m_next=null;this.m_destroyed=false}Body2.prototype._serialize=function(){var fixtures=[];for(var f=this.m_fixtureList;f;f=f.m_next){fixtures.push(f)}return{type:this.m_type,bullet:this.m_bulletFlag,position:this.m_xf.p,angle:this.m_xf.q.getAngle(),linearVelocity:this.m_linearVelocity,angularVelocity:this.m_angularVelocity,fixtures:fixtures}};Body2._deserialize=function(data,world,restore){var body=new Body2(world,data);if(data.fixtures){for(var i=data.fixtures.length-1;i>=0;i--){var fixture=restore(Fixture,data.fixtures[i],body);body._addFixture(fixture)}}return body};Body2.prototype.isWorldLocked=function(){return this.m_world&&this.m_world.isLocked()?true:false};Body2.prototype.getWorld=function(){return this.m_world};Body2.prototype.getNext=function(){return this.m_next};Body2.prototype.setUserData=function(data){this.m_userData=data};Body2.prototype.getUserData=function(){return this.m_userData};Body2.prototype.getFixtureList=function(){return this.m_fixtureList};Body2.prototype.getJointList=function(){return this.m_jointList};Body2.prototype.getContactList=function(){return this.m_contactList};Body2.prototype.isStatic=function(){return this.m_type==STATIC};Body2.prototype.isDynamic=function(){return this.m_type==DYNAMIC};Body2.prototype.isKinematic=function(){return this.m_type==KINEMATIC};Body2.prototype.setStatic=function(){this.setType(STATIC);return this};Body2.prototype.setDynamic=function(){this.setType(DYNAMIC);return this};Body2.prototype.setKinematic=function(){this.setType(KINEMATIC);return this};Body2.prototype.getType=function(){return this.m_type};Body2.prototype.setType=function(type){if(this.isWorldLocked()==true){return}if(this.m_type==type){return}this.m_type=type;this.resetMassData();if(this.m_type==STATIC){this.m_linearVelocity.setZero();this.m_angularVelocity=0;this.m_sweep.forward();this.synchronizeFixtures()}this.setAwake(true);this.m_force.setZero();this.m_torque=0;var ce=this.m_contactList;while(ce){var ce0=ce;ce=ce.next;this.m_world.destroyContact(ce0.contact)}this.m_contactList=null;var broadPhase=this.m_world.m_broadPhase;for(var f=this.m_fixtureList;f;f=f.m_next){for(var i=0;i0){this.setAwake(true)}this.m_linearVelocity.setVec2(v3)};Body2.prototype.getAngularVelocity=function(){return this.m_angularVelocity};Body2.prototype.setAngularVelocity=function(w){if(this.m_type==STATIC){return}if(w*w>0){this.setAwake(true)}this.m_angularVelocity=w};Body2.prototype.getLinearDamping=function(){return this.m_linearDamping};Body2.prototype.setLinearDamping=function(linearDamping){this.m_linearDamping=linearDamping};Body2.prototype.getAngularDamping=function(){return this.m_angularDamping};Body2.prototype.setAngularDamping=function(angularDamping){this.m_angularDamping=angularDamping};Body2.prototype.getGravityScale=function(){return this.m_gravityScale};Body2.prototype.setGravityScale=function(scale){this.m_gravityScale=scale};Body2.prototype.getMass=function(){return this.m_mass};Body2.prototype.getInertia=function(){return this.m_I+this.m_mass*Vec2.dot(this.m_sweep.localCenter,this.m_sweep.localCenter)};Body2.prototype.getMassData=function(data){data.mass=this.m_mass;data.I=this.getInertia();copyVec2(data.center,this.m_sweep.localCenter)};Body2.prototype.resetMassData=function(){this.m_mass=0;this.m_invMass=0;this.m_I=0;this.m_invI=0;zeroVec2(this.m_sweep.localCenter);if(this.isStatic()||this.isKinematic()){copyVec2(this.m_sweep.c0,this.m_xf.p);copyVec2(this.m_sweep.c,this.m_xf.p);this.m_sweep.a0=this.m_sweep.a;return}zeroVec2(localCenter);for(var f=this.m_fixtureList;f;f=f.m_next){if(f.m_density==0){continue}var massData={mass:0,center:vec2(0,0),I:0};f.getMassData(massData);this.m_mass+=massData.mass;plusScaleVec2(localCenter,massData.mass,massData.center);this.m_I+=massData.I}if(this.m_mass>0){this.m_invMass=1/this.m_mass;scaleVec2(localCenter,this.m_invMass,localCenter)}else{this.m_mass=1;this.m_invMass=1}if(this.m_I>0&&this.m_fixedRotationFlag==false){this.m_I-=this.m_mass*dotVec2(localCenter,localCenter);this.m_invI=1/this.m_I}else{this.m_I=0;this.m_invI=0}copyVec2(oldCenter,this.m_sweep.c);this.m_sweep.setLocalCenter(localCenter,this.m_xf);subVec2(shift,this.m_sweep.c,oldCenter);crossNumVec2(temp$6,this.m_angularVelocity,shift);plusVec2(this.m_linearVelocity,temp$6)};Body2.prototype.setMassData=function(massData){if(this.isWorldLocked()==true){return}if(this.m_type!=DYNAMIC){return}this.m_invMass=0;this.m_I=0;this.m_invI=0;this.m_mass=massData.mass;if(this.m_mass<=0){this.m_mass=1}this.m_invMass=1/this.m_mass;if(massData.I>0&&this.m_fixedRotationFlag==false){this.m_I=massData.I-this.m_mass*dotVec2(massData.center,massData.center);this.m_invI=1/this.m_I}copyVec2(oldCenter,this.m_sweep.c);this.m_sweep.setLocalCenter(massData.center,this.m_xf);subVec2(shift,this.m_sweep.c,oldCenter);crossNumVec2(temp$6,this.m_angularVelocity,shift);plusVec2(this.m_linearVelocity,temp$6)};Body2.prototype.applyForce=function(force,point2,wake){if(wake===void 0){wake=true}if(this.m_type!=DYNAMIC){return}if(wake&&this.m_awakeFlag==false){this.setAwake(true)}if(this.m_awakeFlag){this.m_force.add(force);this.m_torque+=Vec2.crossVec2Vec2(Vec2.sub(point2,this.m_sweep.c),force)}};Body2.prototype.applyForceToCenter=function(force,wake){if(wake===void 0){wake=true}if(this.m_type!=DYNAMIC){return}if(wake&&this.m_awakeFlag==false){this.setAwake(true)}if(this.m_awakeFlag){this.m_force.add(force)}};Body2.prototype.applyTorque=function(torque,wake){if(wake===void 0){wake=true}if(this.m_type!=DYNAMIC){return}if(wake&&this.m_awakeFlag==false){this.setAwake(true)}if(this.m_awakeFlag){this.m_torque+=torque}};Body2.prototype.applyLinearImpulse=function(impulse,point2,wake){if(wake===void 0){wake=true}if(this.m_type!=DYNAMIC){return}if(wake&&this.m_awakeFlag==false){this.setAwake(true)}if(this.m_awakeFlag){this.m_linearVelocity.addMul(this.m_invMass,impulse);this.m_angularVelocity+=this.m_invI*Vec2.crossVec2Vec2(Vec2.sub(point2,this.m_sweep.c),impulse)}};Body2.prototype.applyAngularImpulse=function(impulse,wake){if(wake===void 0){wake=true}if(this.m_type!=DYNAMIC){return}if(wake&&this.m_awakeFlag==false){this.setAwake(true)}if(this.m_awakeFlag){this.m_angularVelocity+=this.m_invI*impulse}};Body2.prototype.shouldCollide=function(that){if(this.m_type!=DYNAMIC&&that.m_type!=DYNAMIC){return false}for(var jn=this.m_jointList;jn;jn=jn.next){if(jn.other==that){if(jn.joint.m_collideConnected==false){return false}}}return true};Body2.prototype._addFixture=function(fixture){if(this.isWorldLocked()==true){return null}if(this.m_activeFlag){var broadPhase=this.m_world.m_broadPhase;fixture.createProxies(broadPhase,this.m_xf)}fixture.m_next=this.m_fixtureList;this.m_fixtureList=fixture;if(fixture.m_density>0){this.resetMassData()}this.m_world.m_newFixture=true;return fixture};Body2.prototype.createFixture=function(shape,fixdef){if(this.isWorldLocked()==true){return null}var fixture=new Fixture(this,shape,fixdef);this._addFixture(fixture);return fixture};Body2.prototype.destroyFixture=function(fixture){if(this.isWorldLocked()==true){return}if(this.m_fixtureList===fixture){this.m_fixtureList=fixture.m_next}else{var node=this.m_fixtureList;while(node!=null){if(node.m_next===fixture){node.m_next=fixture.m_next;break}node=node.m_next}}var edge=this.m_contactList;while(edge){var c2=edge.contact;edge=edge.next;var fixtureA=c2.getFixtureA();var fixtureB=c2.getFixtureB();if(fixture==fixtureA||fixture==fixtureB){this.m_world.destroyContact(c2)}}if(this.m_activeFlag){var broadPhase=this.m_world.m_broadPhase;fixture.destroyProxies(broadPhase)}fixture.m_body=null;fixture.m_next=null;this.m_world.publish("remove-fixture",fixture);this.resetMassData()};Body2.prototype.getWorldPoint=function(localPoint){return Transform.mulVec2(this.m_xf,localPoint)};Body2.prototype.getWorldVector=function(localVector){return Rot.mulVec2(this.m_xf.q,localVector)};Body2.prototype.getLocalPoint=function(worldPoint){return Transform.mulTVec2(this.m_xf,worldPoint)};Body2.prototype.getLocalVector=function(worldVector){return Rot.mulTVec2(this.m_xf.q,worldVector)};Body2.STATIC="static";Body2.KINEMATIC="kinematic";Body2.DYNAMIC="dynamic";return Body2}();var JointEdge=function(){function JointEdge2(){this.other=null;this.joint=null;this.prev=null;this.next=null}return JointEdge2}();var Joint=function(){function Joint2(def,bodyA,bodyB){this.m_type="unknown-joint";this.m_prev=null;this.m_next=null;this.m_edgeA=new JointEdge;this.m_edgeB=new JointEdge;this.m_islandFlag=false;this.style={};this.appData={};bodyA="bodyA"in def?def.bodyA:bodyA;bodyB="bodyB"in def?def.bodyB:bodyB;this.m_bodyA=bodyA;this.m_bodyB=bodyB;this.m_collideConnected=!!def.collideConnected;this.m_userData=def.userData}Joint2.prototype.isActive=function(){return this.m_bodyA.isActive()&&this.m_bodyB.isActive()};Joint2.prototype.getType=function(){return this.m_type};Joint2.prototype.getBodyA=function(){return this.m_bodyA};Joint2.prototype.getBodyB=function(){return this.m_bodyB};Joint2.prototype.getNext=function(){return this.m_next};Joint2.prototype.getUserData=function(){return this.m_userData};Joint2.prototype.setUserData=function(data){this.m_userData=data};Joint2.prototype.getCollideConnected=function(){return this.m_collideConnected};Joint2.prototype.shiftOrigin=function(newOrigin){};Joint2.prototype._resetAnchors=function(def){return this._reset(def)};return Joint2}();var stats={gjkCalls:0,gjkIters:0,gjkMaxIters:0,toiTime:0,toiMaxTime:0,toiCalls:0,toiIters:0,toiMaxIters:0,toiRootIters:0,toiMaxRootIters:0,toString:function(newline){newline=typeof newline==="string"?newline:"\n";var string="";for(var name_1 in this){if(typeof this[name_1]!=="function"&&typeof this[name_1]!=="object"){string+=name_1+": "+this[name_1]+newline}}return string}};var now=function(){return Date.now()};var diff=function(time){return Date.now()-time};const Timer={now:now,diff:diff};var math_max$4=Math.max;var temp$5=vec2(0,0);var normal$4=vec2(0,0);var e12=vec2(0,0);var e13=vec2(0,0);var e23=vec2(0,0);var temp1=vec2(0,0);var temp2=vec2(0,0);stats.gjkCalls=0;stats.gjkIters=0;stats.gjkMaxIters=0;var DistanceInput=function(){function DistanceInput2(){this.proxyA=new DistanceProxy;this.proxyB=new DistanceProxy;this.transformA=Transform.identity();this.transformB=Transform.identity();this.useRadii=false}DistanceInput2.prototype.recycle=function(){this.proxyA.recycle();this.proxyB.recycle();this.transformA.setIdentity();this.transformB.setIdentity();this.useRadii=false};return DistanceInput2}();var DistanceOutput=function(){function DistanceOutput2(){this.pointA=vec2(0,0);this.pointB=vec2(0,0);this.distance=0;this.iterations=0}DistanceOutput2.prototype.recycle=function(){zeroVec2(this.pointA);zeroVec2(this.pointB);this.distance=0;this.iterations=0};return DistanceOutput2}();var SimplexCache=function(){function SimplexCache2(){this.metric=0;this.indexA=[];this.indexB=[];this.count=0}SimplexCache2.prototype.recycle=function(){this.metric=0;this.indexA.length=0;this.indexB.length=0;this.count=0};return SimplexCache2}();var Distance=function(output2,cache2,input2){++stats.gjkCalls;var proxyA=input2.proxyA;var proxyB=input2.proxyB;var xfA2=input2.transformA;var xfB2=input2.transformB;simplex.recycle();simplex.readCache(cache2,proxyA,xfA2,proxyB,xfB2);var vertices=simplex.m_v;var k_maxIters=SettingsInternal.maxDistanceIterations;var saveA=[];var saveB=[];var saveCount=0;var iter=0;while(iterrA2+rB2&&output2.distance>EPSILON){output2.distance-=rA2+rB2;subVec2(normal$4,output2.pointB,output2.pointA);normalizeVec2(normal$4);plusScaleVec2(output2.pointA,rA2,normal$4);minusScaleVec2(output2.pointB,rB2,normal$4)}else{var p=subVec2(temp$5,output2.pointA,output2.pointB);copyVec2(output2.pointA,p);copyVec2(output2.pointB,p);output2.distance=0}}};var DistanceProxy=function(){function DistanceProxy2(){this.m_vertices=[];this.m_count=0;this.m_radius=0}DistanceProxy2.prototype.recycle=function(){this.m_vertices.length=0;this.m_count=0;this.m_radius=0};DistanceProxy2.prototype.getVertexCount=function(){return this.m_count};DistanceProxy2.prototype.getVertex=function(index){return this.m_vertices[index]};DistanceProxy2.prototype.getSupport=function(d2){var bestIndex=-1;var bestValue=-Infinity;for(var i=0;ibestValue){bestIndex=i;bestValue=value}}return bestIndex};DistanceProxy2.prototype.getSupportVertex=function(d2){return this.m_vertices[this.getSupport(d2)]};DistanceProxy2.prototype.set=function(shape,index){shape.computeDistanceProxy(this,index)};DistanceProxy2.prototype.setVertices=function(vertices,count,radius){this.m_vertices=vertices;this.m_count=count;this.m_radius=radius};return DistanceProxy2}();var SimplexVertex=function(){function SimplexVertex2(){this.wA=vec2(0,0);this.indexA=0;this.wB=vec2(0,0);this.indexB=0;this.w=vec2(0,0);this.a=0}SimplexVertex2.prototype.recycle=function(){this.indexA=0;this.indexB=0;zeroVec2(this.wA);zeroVec2(this.wB);zeroVec2(this.w);this.a=0};SimplexVertex2.prototype.set=function(v3){this.indexA=v3.indexA;this.indexB=v3.indexB;copyVec2(this.wA,v3.wA);copyVec2(this.wB,v3.wB);copyVec2(this.w,v3.w);this.a=v3.a};return SimplexVertex2}();var searchDirection_reuse=vec2(0,0);var closestPoint_reuse=vec2(0,0);var Simplex=function(){function Simplex2(){this.m_v1=new SimplexVertex;this.m_v2=new SimplexVertex;this.m_v3=new SimplexVertex;this.m_v=[this.m_v1,this.m_v2,this.m_v3]}Simplex2.prototype.recycle=function(){this.m_v1.recycle();this.m_v2.recycle();this.m_v3.recycle();this.m_count=0};Simplex2.prototype.toString=function(){if(this.m_count===3){return["+"+this.m_count,this.m_v1.a,this.m_v1.wA.x,this.m_v1.wA.y,this.m_v1.wB.x,this.m_v1.wB.y,this.m_v2.a,this.m_v2.wA.x,this.m_v2.wA.y,this.m_v2.wB.x,this.m_v2.wB.y,this.m_v3.a,this.m_v3.wA.x,this.m_v3.wA.y,this.m_v3.wB.x,this.m_v3.wB.y].toString()}else if(this.m_count===2){return["+"+this.m_count,this.m_v1.a,this.m_v1.wA.x,this.m_v1.wA.y,this.m_v1.wB.x,this.m_v1.wB.y,this.m_v2.a,this.m_v2.wA.x,this.m_v2.wA.y,this.m_v2.wB.x,this.m_v2.wB.y].toString()}else if(this.m_count===1){return["+"+this.m_count,this.m_v1.a,this.m_v1.wA.x,this.m_v1.wA.y,this.m_v1.wB.x,this.m_v1.wB.y].toString()}else{return"+"+this.m_count}};Simplex2.prototype.readCache=function(cache2,proxyA,transformA,proxyB,transformB){this.m_count=cache2.count;for(var i=0;i1){var metric1=cache2.metric;var metric2=this.getMetric();if(metric2<.5*metric1||2*metric10){return setVec2(searchDirection_reuse,-e12.y,e12.x)}else{return setVec2(searchDirection_reuse,e12.y,-e12.x)}}default:return zeroVec2(searchDirection_reuse)}};Simplex2.prototype.getClosestPoint=function(){var v13=this.m_v1;var v22=this.m_v2;this.m_v3;switch(this.m_count){case 0:return zeroVec2(closestPoint_reuse);case 1:return copyVec2(closestPoint_reuse,v13.w);case 2:return combine2Vec2(closestPoint_reuse,v13.a,v13.w,v22.a,v22.w);case 3:return zeroVec2(closestPoint_reuse);default:return zeroVec2(closestPoint_reuse)}};Simplex2.prototype.getWitnessPoints=function(pA2,pB2){var v13=this.m_v1;var v22=this.m_v2;var v3=this.m_v3;switch(this.m_count){case 0:break;case 1:copyVec2(pA2,v13.wA);copyVec2(pB2,v13.wB);break;case 2:combine2Vec2(pA2,v13.a,v13.wA,v22.a,v22.wA);combine2Vec2(pB2,v13.a,v13.wB,v22.a,v22.wB);break;case 3:combine3Vec2(pA2,v13.a,v13.wA,v22.a,v22.wA,v3.a,v3.wA);copyVec2(pB2,pA2);break}};Simplex2.prototype.getMetric=function(){switch(this.m_count){case 0:return 0;case 1:return 0;case 2:return distVec2(this.m_v1.w,this.m_v2.w);case 3:return crossVec2Vec2(subVec2(temp1,this.m_v2.w,this.m_v1.w),subVec2(temp2,this.m_v3.w,this.m_v1.w));default:return 0}};Simplex2.prototype.solve=function(){switch(this.m_count){case 1:break;case 2:this.solve2();break;case 3:this.solve3();break}};Simplex2.prototype.solve2=function(){var w1=this.m_v1.w;var w2=this.m_v2.w;subVec2(e12,w2,w1);var d12_2=-dotVec2(w1,e12);if(d12_2<=0){this.m_v1.a=1;this.m_count=1;return}var d12_1=dotVec2(w2,e12);if(d12_1<=0){this.m_v2.a=1;this.m_count=1;this.m_v1.set(this.m_v2);return}var inv_d12=1/(d12_1+d12_2);this.m_v1.a=d12_1*inv_d12;this.m_v2.a=d12_2*inv_d12;this.m_count=2};Simplex2.prototype.solve3=function(){var w1=this.m_v1.w;var w2=this.m_v2.w;var w3=this.m_v3.w;subVec2(e12,w2,w1);var w1e12=dotVec2(w1,e12);var w2e12=dotVec2(w2,e12);var d12_1=w2e12;var d12_2=-w1e12;subVec2(e13,w3,w1);var w1e13=dotVec2(w1,e13);var w3e13=dotVec2(w3,e13);var d13_1=w3e13;var d13_2=-w1e13;subVec2(e23,w3,w2);var w2e23=dotVec2(w2,e23);var w3e23=dotVec2(w3,e23);var d23_1=w3e23;var d23_2=-w2e23;var n123=crossVec2Vec2(e12,e13);var d123_1=n123*crossVec2Vec2(w2,w3);var d123_2=n123*crossVec2Vec2(w3,w1);var d123_3=n123*crossVec2Vec2(w1,w2);if(d12_2<=0&&d13_2<=0){this.m_v1.a=1;this.m_count=1;return}if(d12_1>0&&d12_2>0&&d123_3<=0){var inv_d12=1/(d12_1+d12_2);this.m_v1.a=d12_1*inv_d12;this.m_v2.a=d12_2*inv_d12;this.m_count=2;return}if(d13_1>0&&d13_2>0&&d123_2<=0){var inv_d13=1/(d13_1+d13_2);this.m_v1.a=d13_1*inv_d13;this.m_v3.a=d13_2*inv_d13;this.m_count=2;this.m_v2.set(this.m_v3);return}if(d12_1<=0&&d23_2<=0){this.m_v2.a=1;this.m_count=1;this.m_v1.set(this.m_v2);return}if(d13_1<=0&&d23_1<=0){this.m_v3.a=1;this.m_count=1;this.m_v1.set(this.m_v3);return}if(d23_1>0&&d23_2>0&&d123_1<=0){var inv_d23=1/(d23_1+d23_2);this.m_v2.a=d23_1*inv_d23;this.m_v3.a=d23_2*inv_d23;this.m_count=2;this.m_v1.set(this.m_v3);return}var inv_d123=1/(d123_1+d123_2+d123_3);this.m_v1.a=d123_1*inv_d123;this.m_v2.a=d123_2*inv_d123;this.m_v3.a=d123_3*inv_d123;this.m_count=3};return Simplex2}();var simplex=new Simplex;var input$1=new DistanceInput;var cache$1=new SimplexCache;var output$1=new DistanceOutput;var testOverlap=function(shapeA,indexA,shapeB,indexB,xfA2,xfB2){input$1.recycle();input$1.proxyA.set(shapeA,indexA);input$1.proxyB.set(shapeB,indexB);copyTransform(input$1.transformA,xfA2);copyTransform(input$1.transformB,xfB2);input$1.useRadii=true;output$1.recycle();cache$1.recycle();Distance(output$1,cache$1,input$1);return output$1.distance<10*EPSILON};Distance.testOverlap=testOverlap;Distance.Input=DistanceInput;Distance.Output=DistanceOutput;Distance.Proxy=DistanceProxy;Distance.Cache=SimplexCache;var ShapeCastInput=function(){function ShapeCastInput2(){this.proxyA=new DistanceProxy;this.proxyB=new DistanceProxy;this.transformA=Transform.identity();this.transformB=Transform.identity();this.translationB=Vec2.zero()}ShapeCastInput2.prototype.recycle=function(){this.proxyA.recycle();this.proxyB.recycle();this.transformA.setIdentity();this.transformB.setIdentity();zeroVec2(this.translationB)};return ShapeCastInput2}();var ShapeCastOutput=function(){function ShapeCastOutput2(){this.point=Vec2.zero();this.normal=Vec2.zero();this.lambda=1;this.iterations=0}return ShapeCastOutput2}();var ShapeCast=function(output2,input2){output2.iterations=0;output2.lambda=1;output2.normal.setZero();output2.point.setZero();var proxyA=input2.proxyA;var proxyB=input2.proxyB;var radiusA=math_max$4(proxyA.m_radius,SettingsInternal.polygonRadius);var radiusB=math_max$4(proxyB.m_radius,SettingsInternal.polygonRadius);var radius=radiusA+radiusB;var xfA2=input2.transformA;var xfB2=input2.transformB;var r=input2.translationB;var n2=Vec2.zero();var lambda=0;var simplex2=new Simplex;simplex2.m_count=0;var vertices=simplex2.m_v;var indexA=proxyA.getSupport(Rot.mulTVec2(xfA2.q,Vec2.neg(r)));var wA=Transform.mulVec2(xfA2,proxyA.getVertex(indexA));var indexB=proxyB.getSupport(Rot.mulTVec2(xfB2.q,r));var wB=Transform.mulVec2(xfB2,proxyB.getVertex(indexB));var v3=Vec2.sub(wA,wB);var sigma=math_max$4(SettingsInternal.polygonRadius,radius-SettingsInternal.polygonRadius);var tolerance=.5*SettingsInternal.linearSlop;var k_maxIters=20;var iter=0;while(itertolerance){output2.iterations+=1;indexA=proxyA.getSupport(Rot.mulTVec2(xfA2.q,Vec2.neg(v3)));wA=Transform.mulVec2(xfA2,proxyA.getVertex(indexA));indexB=proxyB.getSupport(Rot.mulTVec2(xfB2.q,v3));wB=Transform.mulVec2(xfB2,proxyB.getVertex(indexB));var p=Vec2.sub(wA,wB);v3.normalize();var vp=Vec2.dot(v3,p);var vr=Vec2.dot(v3,r);if(vp-sigma>lambda*vr){if(vr<=0){return false}lambda=(vp-sigma)/vr;if(lambda>1){return false}n2.setMul(-1,v3);simplex2.m_count=0}var vertex=vertices[simplex2.m_count];vertex.indexA=indexB;vertex.wA=Vec2.combine(1,wB,lambda,r);vertex.indexB=indexA;vertex.wB=wA;vertex.w=Vec2.sub(vertex.wB,vertex.wA);vertex.a=1;simplex2.m_count+=1;switch(simplex2.m_count){case 1:break;case 2:simplex2.solve2();break;case 3:simplex2.solve3();break}if(simplex2.m_count==3){return false}v3.setVec2(simplex2.getClosestPoint());++iter}if(iter==0){return false}var pointA2=Vec2.zero();var pointB2=Vec2.zero();simplex2.getWitnessPoints(pointB2,pointA2);if(v3.lengthSquared()>0){n2.setMul(-1,v3);n2.normalize()}output2.point=Vec2.combine(1,pointA2,radiusA,n2);output2.normal=n2;output2.lambda=lambda;output2.iterations=iter;return true};var math_abs$7=Math.abs;var math_max$3=Math.max;var TOIInput=function(){function TOIInput2(){this.proxyA=new DistanceProxy;this.proxyB=new DistanceProxy;this.sweepA=new Sweep;this.sweepB=new Sweep}TOIInput2.prototype.recycle=function(){this.proxyA.recycle();this.proxyB.recycle();this.sweepA.recycle();this.sweepB.recycle();this.tMax=-1};return TOIInput2}();exports2.TOIOutputState=void 0;(function(TOIOutputState2){TOIOutputState2[TOIOutputState2["e_unset"]=-1]="e_unset";TOIOutputState2[TOIOutputState2["e_unknown"]=0]="e_unknown";TOIOutputState2[TOIOutputState2["e_failed"]=1]="e_failed";TOIOutputState2[TOIOutputState2["e_overlapped"]=2]="e_overlapped";TOIOutputState2[TOIOutputState2["e_touching"]=3]="e_touching";TOIOutputState2[TOIOutputState2["e_separated"]=4]="e_separated"})(exports2.TOIOutputState||(exports2.TOIOutputState={}));var TOIOutput=function(){function TOIOutput2(){this.state=exports2.TOIOutputState.e_unset;this.t=-1}TOIOutput2.prototype.recycle=function(){this.state=exports2.TOIOutputState.e_unset;this.t=-1};return TOIOutput2}();stats.toiTime=0;stats.toiMaxTime=0;stats.toiCalls=0;stats.toiIters=0;stats.toiMaxIters=0;stats.toiRootIters=0;stats.toiMaxRootIters=0;var distanceInput=new DistanceInput;var distanceOutput=new DistanceOutput;var cache=new SimplexCache;var xfA$1=transform(0,0,0);var xfB$1=transform(0,0,0);var temp$4=vec2(0,0);var pointA$2=vec2(0,0);var pointB$2=vec2(0,0);var normal$3=vec2(0,0);var axisA=vec2(0,0);var axisB=vec2(0,0);var localPointA=vec2(0,0);var localPointB=vec2(0,0);var TimeOfImpact=function(output2,input2){var timer=Timer.now();++stats.toiCalls;output2.state=exports2.TOIOutputState.e_unknown;output2.t=input2.tMax;var proxyA=input2.proxyA;var proxyB=input2.proxyB;var sweepA=input2.sweepA;var sweepB=input2.sweepB;sweepA.normalize();sweepB.normalize();var tMax=input2.tMax;var totalRadius=proxyA.m_radius+proxyB.m_radius;var target=math_max$3(SettingsInternal.linearSlop,totalRadius-3*SettingsInternal.linearSlop);var tolerance=.25*SettingsInternal.linearSlop;var t1=0;var k_maxIterations=SettingsInternal.maxTOIIterations;var iter=0;cache.recycle();distanceInput.proxyA.setVertices(proxyA.m_vertices,proxyA.m_count,proxyA.m_radius);distanceInput.proxyB.setVertices(proxyB.m_vertices,proxyB.m_count,proxyB.m_radius);distanceInput.useRadii=false;while(true){sweepA.getTransform(xfA$1,t1);sweepB.getTransform(xfB$1,t1);copyTransform(distanceInput.transformA,xfA$1);copyTransform(distanceInput.transformB,xfB$1);Distance(distanceOutput,cache,distanceInput);if(distanceOutput.distance<=0){output2.state=exports2.TOIOutputState.e_overlapped;output2.t=0;break}if(distanceOutput.distancetarget+tolerance){output2.state=exports2.TOIOutputState.e_separated;output2.t=tMax;done=true;break}if(s2>target-tolerance){t1=t2;break}var s1=separationFunction.evaluate(t1);if(s1target){a1=t;s1=s3}else{a2=t;s2=s3}if(rootIterCount===50){break}}stats.toiMaxRootIters=math_max$3(stats.toiMaxRootIters,rootIterCount);++pushBackIter;if(pushBackIter===SettingsInternal.maxPolygonVertices){break}}++iter;++stats.toiIters;if(done){break}if(iter===k_maxIterations){output2.state=exports2.TOIOutputState.e_failed;output2.t=t1;break}}stats.toiMaxIters=math_max$3(stats.toiMaxIters,iter);var time=Timer.diff(timer);stats.toiMaxTime=math_max$3(stats.toiMaxTime,time);stats.toiTime+=time;separationFunction.recycle()};var SeparationFunctionType;(function(SeparationFunctionType2){SeparationFunctionType2[SeparationFunctionType2["e_unset"]=-1]="e_unset";SeparationFunctionType2[SeparationFunctionType2["e_points"]=1]="e_points";SeparationFunctionType2[SeparationFunctionType2["e_faceA"]=2]="e_faceA";SeparationFunctionType2[SeparationFunctionType2["e_faceB"]=3]="e_faceB"})(SeparationFunctionType||(SeparationFunctionType={}));var SeparationFunction=function(){function SeparationFunction2(){this.m_proxyA=null;this.m_proxyB=null;this.m_sweepA=null;this.m_sweepB=null;this.m_type=SeparationFunctionType.e_unset;this.m_localPoint=vec2(0,0);this.m_axis=vec2(0,0);this.indexA=-1;this.indexB=-1}SeparationFunction2.prototype.recycle=function(){this.m_proxyA=null;this.m_proxyB=null;this.m_sweepA=null;this.m_sweepB=null;this.m_type=SeparationFunctionType.e_unset;zeroVec2(this.m_localPoint);zeroVec2(this.m_axis);this.indexA=-1;this.indexB=-1};SeparationFunction2.prototype.initialize=function(cache2,proxyA,sweepA,proxyB,sweepB,t1){var count=cache2.count;this.m_proxyA=proxyA;this.m_proxyB=proxyB;this.m_sweepA=sweepA;this.m_sweepB=sweepB;this.m_sweepA.getTransform(xfA$1,t1);this.m_sweepB.getTransform(xfB$1,t1);if(count===1){this.m_type=SeparationFunctionType.e_points;var localPointA_1=this.m_proxyA.getVertex(cache2.indexA[0]);var localPointB_1=this.m_proxyB.getVertex(cache2.indexB[0]);transformVec2(pointA$2,xfA$1,localPointA_1);transformVec2(pointB$2,xfB$1,localPointB_1);subVec2(this.m_axis,pointB$2,pointA$2);var s2=normalizeVec2Length(this.m_axis);return s2}else if(cache2.indexA[0]===cache2.indexA[1]){this.m_type=SeparationFunctionType.e_faceB;var localPointB1=proxyB.getVertex(cache2.indexB[0]);var localPointB2=proxyB.getVertex(cache2.indexB[1]);crossVec2Num(this.m_axis,subVec2(temp$4,localPointB2,localPointB1),1);normalizeVec2(this.m_axis);rotVec2(normal$3,xfB$1.q,this.m_axis);combine2Vec2(this.m_localPoint,.5,localPointB1,.5,localPointB2);transformVec2(pointB$2,xfB$1,this.m_localPoint);var localPointA_2=proxyA.getVertex(cache2.indexA[0]);var pointA_1=Transform.mulVec2(xfA$1,localPointA_2);var s2=dotVec2(pointA_1,normal$3)-dotVec2(pointB$2,normal$3);if(s2<0){negVec2(this.m_axis);s2=-s2}return s2}else{this.m_type=SeparationFunctionType.e_faceA;var localPointA1=this.m_proxyA.getVertex(cache2.indexA[0]);var localPointA2=this.m_proxyA.getVertex(cache2.indexA[1]);crossVec2Num(this.m_axis,subVec2(temp$4,localPointA2,localPointA1),1);normalizeVec2(this.m_axis);rotVec2(normal$3,xfA$1.q,this.m_axis);combine2Vec2(this.m_localPoint,.5,localPointA1,.5,localPointA2);transformVec2(pointA$2,xfA$1,this.m_localPoint);var localPointB_2=this.m_proxyB.getVertex(cache2.indexB[0]);transformVec2(pointB$2,xfB$1,localPointB_2);var s2=dotVec2(pointB$2,normal$3)-dotVec2(pointA$2,normal$3);if(s2<0){negVec2(this.m_axis);s2=-s2}return s2}};SeparationFunction2.prototype.compute=function(find,t){this.m_sweepA.getTransform(xfA$1,t);this.m_sweepB.getTransform(xfB$1,t);switch(this.m_type){case SeparationFunctionType.e_points:{if(find){derotVec2(axisA,xfA$1.q,this.m_axis);derotVec2(axisB,xfB$1.q,scaleVec2(temp$4,-1,this.m_axis));this.indexA=this.m_proxyA.getSupport(axisA);this.indexB=this.m_proxyB.getSupport(axisB)}copyVec2(localPointA,this.m_proxyA.getVertex(this.indexA));copyVec2(localPointB,this.m_proxyB.getVertex(this.indexB));transformVec2(pointA$2,xfA$1,localPointA);transformVec2(pointB$2,xfB$1,localPointB);var sep=dotVec2(pointB$2,this.m_axis)-dotVec2(pointA$2,this.m_axis);return sep}case SeparationFunctionType.e_faceA:{rotVec2(normal$3,xfA$1.q,this.m_axis);transformVec2(pointA$2,xfA$1,this.m_localPoint);if(find){derotVec2(axisB,xfB$1.q,scaleVec2(temp$4,-1,normal$3));this.indexA=-1;this.indexB=this.m_proxyB.getSupport(axisB)}copyVec2(localPointB,this.m_proxyB.getVertex(this.indexB));transformVec2(pointB$2,xfB$1,localPointB);var sep=dotVec2(pointB$2,normal$3)-dotVec2(pointA$2,normal$3);return sep}case SeparationFunctionType.e_faceB:{rotVec2(normal$3,xfB$1.q,this.m_axis);transformVec2(pointB$2,xfB$1,this.m_localPoint);if(find){derotVec2(axisA,xfA$1.q,scaleVec2(temp$4,-1,normal$3));this.indexB=-1;this.indexA=this.m_proxyA.getSupport(axisA)}copyVec2(localPointA,this.m_proxyA.getVertex(this.indexA));transformVec2(pointA$2,xfA$1,localPointA);var sep=dotVec2(pointA$2,normal$3)-dotVec2(pointB$2,normal$3);return sep}default:if(find){this.indexA=-1;this.indexB=-1}return 0}};SeparationFunction2.prototype.findMinSeparation=function(t){return this.compute(true,t)};SeparationFunction2.prototype.evaluate=function(t){return this.compute(false,t)};return SeparationFunction2}();var separationFunction=new SeparationFunction;TimeOfImpact.Input=TOIInput;TimeOfImpact.Output=TOIOutput;var math_abs$6=Math.abs;var math_sqrt$3=Math.sqrt;var math_min$5=Math.min;var TimeStep=function(){function TimeStep2(){this.dt=0;this.inv_dt=0;this.velocityIterations=0;this.positionIterations=0;this.warmStarting=false;this.blockSolve=true;this.inv_dt0=0;this.dtRatio=1}TimeStep2.prototype.reset=function(dt){if(this.dt>0){this.inv_dt0=this.inv_dt}this.dt=dt;this.inv_dt=dt==0?0:1/dt;this.dtRatio=dt*this.inv_dt0};return TimeStep2}();var s_subStep=new TimeStep;var c=vec2(0,0);var v=vec2(0,0);var translation=vec2(0,0);var input=new TOIInput;var output=new TOIOutput;var backup=new Sweep;var backup1=new Sweep;var backup2=new Sweep;var ContactImpulse=function(){function ContactImpulse2(contact){this.contact=contact;this.normals=[];this.tangents=[]}ContactImpulse2.prototype.recycle=function(){this.normals.length=0;this.tangents.length=0};Object.defineProperty(ContactImpulse2.prototype,"normalImpulses",{get:function(){var contact=this.contact;var normals=this.normals;normals.length=0;for(var p=0;p0){var b2=stack.pop();this.addBody(b2);b2.m_awakeFlag=true;if(b2.isStatic()){continue}for(var ce=b2.m_contactList;ce;ce=ce.next){var contact=ce.contact;if(contact.m_islandFlag){continue}if(contact.isEnabled()==false||contact.isTouching()==false){continue}var sensorA=contact.m_fixtureA.m_isSensor;var sensorB=contact.m_fixtureB.m_isSensor;if(sensorA||sensorB){continue}this.addContact(contact);contact.m_islandFlag=true;var other=ce.other;if(other.m_islandFlag){continue}stack.push(other);other.m_islandFlag=true}for(var je=b2.m_jointList;je;je=je.next){if(je.joint.m_islandFlag==true){continue}var other=je.other;if(other.isActive()==false){continue}this.addJoint(je.joint);je.joint.m_islandFlag=true;if(other.m_islandFlag){continue}stack.push(other);other.m_islandFlag=true}}this.solveIsland(step);for(var i=0;iSettingsInternal.maxTranslationSquared){var ratio=SettingsInternal.maxTranslation/math_sqrt$3(translationLengthSqr);mulVec2(v,ratio)}var rotation2=h*w;if(rotation2*rotation2>SettingsInternal.maxRotationSquared){var ratio=SettingsInternal.maxRotation/math_abs$6(rotation2);w*=ratio}plusScaleVec2(c,h,v);a2+=h*w;copyVec2(body.c_position.c,c);body.c_position.a=a2;copyVec2(body.c_velocity.v,v);body.c_velocity.w=w}var positionSolved=false;for(var i=0;i=-3*SettingsInternal.linearSlop;var jointsOkay=true;for(var j=0;jangTolSqr||lengthSqrVec2(body.m_linearVelocity)>linTolSqr){body.m_sleepTime=0;minSleepTime=0}else{body.m_sleepTime+=h;minSleepTime=math_min$5(minSleepTime,body.m_sleepTime)}}if(minSleepTime>=SettingsInternal.timeToSleep&&positionSolved){for(var i=0;iSettingsInternal.maxSubSteps){continue}var alpha=1;if(c_3.m_toiFlag){alpha=c_3.m_toi}else{var fA_1=c_3.getFixtureA();var fB_1=c_3.getFixtureB();if(fA_1.isSensor()||fB_1.isSensor()){continue}var bA_1=fA_1.getBody();var bB_1=fB_1.getBody();var activeA=bA_1.isAwake()&&!bA_1.isStatic();var activeB=bB_1.isAwake()&&!bB_1.isStatic();if(activeA==false&&activeB==false){continue}var collideA=bA_1.isBullet()||!bA_1.isDynamic();var collideB=bB_1.isBullet()||!bB_1.isDynamic();if(collideA==false&&collideB==false){continue}var alpha0=bA_1.m_sweep.alpha0;if(bA_1.m_sweep.alpha0=-1.5*SettingsInternal.linearSlop;if(contactsOkay){break}}var i;copyVec2(toiA.m_sweep.c0,toiA.c_position.c);toiA.m_sweep.a0=toiA.c_position.a;copyVec2(toiB.m_sweep.c0,toiB.c_position.c);toiB.m_sweep.a0=toiB.c_position.a;for(var i=0;iSettingsInternal.maxTranslationSquared){var ratio=SettingsInternal.maxTranslation/math_sqrt$3(translationLengthSqr);mulVec2(v,ratio)}var rotation2=h*w;if(rotation2*rotation2>SettingsInternal.maxRotationSquared){var ratio=SettingsInternal.maxRotation/math_abs$6(rotation2);w*=ratio}plusScaleVec2(c,h,v);a2+=h*w;copyVec2(body.c_position.c,c);body.c_position.a=a2;copyVec2(body.c_velocity.v,v);body.c_velocity.w=w;copyVec2(body.m_sweep.c,c);body.m_sweep.a=a2;copyVec2(body.m_linearVelocity,v);body.m_angularVelocity=w;body.synchronizeTransform()}this.postSolveIsland()};Solver2.prototype.postSolveIsland=function(){for(var c_5=0;c_5EPSILON*EPSILON){var length_1=math_sqrt$2(lengthSqr);scaleVec2(normal3,1/length_1,dist)}combine2Vec2(cA$1,1,pointA$1,radiusA,normal3);combine2Vec2(cB$1,1,pointB$1,-radiusB,normal3);combine2Vec2(points[0],.5,cA$1,.5,cB$1);separations[0]=dotVec2(subVec2(temp$3,cB$1,cA$1),normal3);break}case exports2.ManifoldType.e_faceA:{rotVec2(normal3,xfA2.q,this.localNormal);transformVec2(planePoint$2,xfA2,this.localPoint);for(var i=0;irestitution2?restitution1:restitution2}var s_registers=[];var VelocityConstraintPoint=function(){function VelocityConstraintPoint2(){this.rA=vec2(0,0);this.rB=vec2(0,0);this.normalImpulse=0;this.tangentImpulse=0;this.normalMass=0;this.tangentMass=0;this.velocityBias=0}VelocityConstraintPoint2.prototype.recycle=function(){zeroVec2(this.rA);zeroVec2(this.rB);this.normalImpulse=0;this.tangentImpulse=0;this.normalMass=0;this.tangentMass=0;this.velocityBias=0};return VelocityConstraintPoint2}();var cA=vec2(0,0);var vA=vec2(0,0);var cB=vec2(0,0);var vB=vec2(0,0);var tangent$1=vec2(0,0);var xfA=transform(0,0,0);var xfB=transform(0,0,0);var pointA=vec2(0,0);var pointB=vec2(0,0);var clipPoint=vec2(0,0);var planePoint$1=vec2(0,0);var rA=vec2(0,0);var rB=vec2(0,0);var P$1=vec2(0,0);var normal$2=vec2(0,0);var point=vec2(0,0);var dv=vec2(0,0);var dv1=vec2(0,0);var dv2=vec2(0,0);var b=vec2(0,0);var a=vec2(0,0);var x=vec2(0,0);var d=vec2(0,0);var P1=vec2(0,0);var P2=vec2(0,0);var temp$2=vec2(0,0);var Contact=function(){function Contact2(){this.m_nodeA=new ContactEdge(this);this.m_nodeB=new ContactEdge(this);this.m_fixtureA=null;this.m_fixtureB=null;this.m_indexA=-1;this.m_indexB=-1;this.m_evaluateFcn=null;this.m_manifold=new Manifold;this.m_prev=null;this.m_next=null;this.m_toi=1;this.m_toiCount=0;this.m_toiFlag=false;this.m_friction=0;this.m_restitution=0;this.m_tangentSpeed=0;this.m_enabledFlag=true;this.m_islandFlag=false;this.m_touchingFlag=false;this.m_filterFlag=false;this.m_bulletHitFlag=false;this.m_impulse=new ContactImpulse(this);this.v_points=[new VelocityConstraintPoint,new VelocityConstraintPoint];this.v_normal=vec2(0,0);this.v_normalMass=new Mat22;this.v_K=new Mat22;this.v_pointCount=0;this.v_tangentSpeed=0;this.v_friction=0;this.v_restitution=0;this.v_invMassA=0;this.v_invMassB=0;this.v_invIA=0;this.v_invIB=0;this.p_localPoints=[vec2(0,0),vec2(0,0)];this.p_localNormal=vec2(0,0);this.p_localPoint=vec2(0,0);this.p_localCenterA=vec2(0,0);this.p_localCenterB=vec2(0,0);this.p_type=exports2.ManifoldType.e_unset;this.p_radiusA=0;this.p_radiusB=0;this.p_pointCount=0;this.p_invMassA=0;this.p_invMassB=0;this.p_invIA=0;this.p_invIB=0}Contact2.prototype.initialize=function(fA,indexA,fB,indexB,evaluateFcn){this.m_fixtureA=fA;this.m_fixtureB=fB;this.m_indexA=indexA;this.m_indexB=indexB;this.m_evaluateFcn=evaluateFcn;this.m_friction=mixFriction(this.m_fixtureA.m_friction,this.m_fixtureB.m_friction);this.m_restitution=mixRestitution(this.m_fixtureA.m_restitution,this.m_fixtureB.m_restitution)};Contact2.prototype.recycle=function(){this.m_nodeA.recycle();this.m_nodeB.recycle();this.m_fixtureA=null;this.m_fixtureB=null;this.m_indexA=-1;this.m_indexB=-1;this.m_evaluateFcn=null;this.m_manifold.recycle();this.m_prev=null;this.m_next=null;this.m_toi=1;this.m_toiCount=0;this.m_toiFlag=false;this.m_friction=0;this.m_restitution=0;this.m_tangentSpeed=0;this.m_enabledFlag=true;this.m_islandFlag=false;this.m_touchingFlag=false;this.m_filterFlag=false;this.m_bulletHitFlag=false;this.m_impulse.recycle();for(var _i=0,_a2=this.v_points;_i<_a2.length;_i++){var point_1=_a2[_i];point_1.recycle()}zeroVec2(this.v_normal);this.v_normalMass.setZero();this.v_K.setZero();this.v_pointCount=0;this.v_tangentSpeed=0;this.v_friction=0;this.v_restitution=0;this.v_invMassA=0;this.v_invMassB=0;this.v_invIA=0;this.v_invIB=0;for(var _b=0,_c=this.p_localPoints;_b<_c.length;_b++){var point_2=_c[_b];zeroVec2(point_2)}zeroVec2(this.p_localNormal);zeroVec2(this.p_localPoint);zeroVec2(this.p_localCenterA);zeroVec2(this.p_localCenterB);this.p_type=exports2.ManifoldType.e_unset;this.p_radiusA=0;this.p_radiusB=0;this.p_pointCount=0;this.p_invMassA=0;this.p_invMassB=0;this.p_invIA=0;this.p_invIB=0};Contact2.prototype.initConstraint=function(step){var fixtureA=this.m_fixtureA;var fixtureB=this.m_fixtureB;if(fixtureA===null||fixtureB===null)return;var bodyA=fixtureA.m_body;var bodyB=fixtureB.m_body;if(bodyA===null||bodyB===null)return;var shapeA=fixtureA.m_shape;var shapeB=fixtureB.m_shape;if(shapeA===null||shapeB===null)return;var manifold=this.m_manifold;var pointCount=manifold.pointCount;this.v_invMassA=bodyA.m_invMass;this.v_invMassB=bodyB.m_invMass;this.v_invIA=bodyA.m_invI;this.v_invIB=bodyB.m_invI;this.v_friction=this.m_friction;this.v_restitution=this.m_restitution;this.v_tangentSpeed=this.m_tangentSpeed;this.v_pointCount=pointCount;this.v_K.setZero();this.v_normalMass.setZero();this.p_invMassA=bodyA.m_invMass;this.p_invMassB=bodyB.m_invMass;this.p_invIA=bodyA.m_invI;this.p_invIB=bodyB.m_invI;copyVec2(this.p_localCenterA,bodyA.m_sweep.localCenter);copyVec2(this.p_localCenterB,bodyB.m_sweep.localCenter);this.p_radiusA=shapeA.m_radius;this.p_radiusB=shapeB.m_radius;this.p_type=manifold.type;copyVec2(this.p_localNormal,manifold.localNormal);copyVec2(this.p_localPoint,manifold.localPoint);this.p_pointCount=pointCount;for(var j=0;j0;for(var i=0;i0?-C/K:0;scaleVec2(P$1,impulse,normal$2);minusScaleVec2(cA,mA,P$1);aA-=iA*crossVec2Vec2(rA,P$1);plusScaleVec2(cB,mB,P$1);aB+=iB*crossVec2Vec2(rB,P$1)}copyVec2(positionA.c,cA);positionA.a=aA;copyVec2(positionB.c,cB);positionB.a=aB;return minSeparation};Contact2.prototype.initVelocityConstraint=function(step){var fixtureA=this.m_fixtureA;var fixtureB=this.m_fixtureB;if(fixtureA===null||fixtureB===null)return;var bodyA=fixtureA.m_body;var bodyB=fixtureB.m_body;if(bodyA===null||bodyB===null)return;var velocityA=bodyA.c_velocity;var velocityB=bodyB.c_velocity;var positionA=bodyA.c_position;var positionB=bodyB.c_position;var radiusA=this.p_radiusA;var radiusB=this.p_radiusB;var manifold=this.m_manifold;var mA=this.v_invMassA;var mB=this.v_invMassB;var iA=this.v_invIA;var iB=this.v_invIB;var localCenterA=this.p_localCenterA;var localCenterB=this.p_localCenterB;copyVec2(cA,positionA.c);var aA=positionA.a;copyVec2(vA,velocityA.v);var wA=velocityA.w;copyVec2(cB,positionB.c);var aB=positionB.a;copyVec2(vB,velocityB.v);var wB=velocityB.w;getTransform(xfA,localCenterA,cA,aA);getTransform(xfB,localCenterB,cB,aB);worldManifold.recycle();manifold.getWorldManifold(worldManifold,xfA,radiusA,xfB,radiusB);copyVec2(this.v_normal,worldManifold.normal);for(var j=0;j0?1/kNormal:0;crossVec2Num(tangent$1,this.v_normal,1);var rtA=crossVec2Vec2(vcp.rA,tangent$1);var rtB=crossVec2Vec2(vcp.rB,tangent$1);var kTangent=mA+mB+iA*rtA*rtA+iB*rtB*rtB;vcp.tangentMass=kTangent>0?1/kTangent:0;vcp.velocityBias=0;var vRel=0;vRel+=dotVec2(this.v_normal,vB);vRel+=dotVec2(this.v_normal,crossNumVec2(temp$2,wB,vcp.rB));vRel-=dotVec2(this.v_normal,vA);vRel-=dotVec2(this.v_normal,crossNumVec2(temp$2,wA,vcp.rA));if(vRel<-SettingsInternal.velocityThreshold){vcp.velocityBias=-this.v_restitution*vRel}}if(this.v_pointCount==2&&step.blockSolve){var vcp1=this.v_points[0];var vcp2=this.v_points[1];var rn1A=crossVec2Vec2(vcp1.rA,this.v_normal);var rn1B=crossVec2Vec2(vcp1.rB,this.v_normal);var rn2A=crossVec2Vec2(vcp2.rA,this.v_normal);var rn2B=crossVec2Vec2(vcp2.rB,this.v_normal);var k11=mA+mB+iA*rn1A*rn1A+iB*rn1B*rn1B;var k22=mA+mB+iA*rn2A*rn2A+iB*rn2B*rn2B;var k12=mA+mB+iA*rn1A*rn2A+iB*rn1B*rn2B;var k_maxConditionNumber=1e3;if(k11*k11=0&&x.y>=0){subVec2(d,x,a);scaleVec2(P1,d.x,normal$2);scaleVec2(P2,d.y,normal$2);combine3Vec2(vA,-mA,P1,-mA,P2,1,vA);wA-=iA*(crossVec2Vec2(vcp1.rA,P1)+crossVec2Vec2(vcp2.rA,P2));combine3Vec2(vB,mB,P1,mB,P2,1,vB);wB+=iB*(crossVec2Vec2(vcp1.rB,P1)+crossVec2Vec2(vcp2.rB,P2));vcp1.normalImpulse=x.x;vcp2.normalImpulse=x.y;break}x.x=-vcp1.normalMass*b.x;x.y=0;vn1=0;vn2=this.v_K.ex.y*x.x+b.y;if(x.x>=0&&vn2>=0){subVec2(d,x,a);scaleVec2(P1,d.x,normal$2);scaleVec2(P2,d.y,normal$2);combine3Vec2(vA,-mA,P1,-mA,P2,1,vA);wA-=iA*(crossVec2Vec2(vcp1.rA,P1)+crossVec2Vec2(vcp2.rA,P2));combine3Vec2(vB,mB,P1,mB,P2,1,vB);wB+=iB*(crossVec2Vec2(vcp1.rB,P1)+crossVec2Vec2(vcp2.rB,P2));vcp1.normalImpulse=x.x;vcp2.normalImpulse=x.y;break}x.x=0;x.y=-vcp2.normalMass*b.y;vn1=this.v_K.ey.x*x.y+b.x;vn2=0;if(x.y>=0&&vn1>=0){subVec2(d,x,a);scaleVec2(P1,d.x,normal$2);scaleVec2(P2,d.y,normal$2);combine3Vec2(vA,-mA,P1,-mA,P2,1,vA);wA-=iA*(crossVec2Vec2(vcp1.rA,P1)+crossVec2Vec2(vcp2.rA,P2));combine3Vec2(vB,mB,P1,mB,P2,1,vB);wB+=iB*(crossVec2Vec2(vcp1.rB,P1)+crossVec2Vec2(vcp2.rB,P2));vcp1.normalImpulse=x.x;vcp2.normalImpulse=x.y;break}x.x=0;x.y=0;vn1=b.x;vn2=b.y;if(vn1>=0&&vn2>=0){subVec2(d,x,a);scaleVec2(P1,d.x,normal$2);scaleVec2(P2,d.y,normal$2);combine3Vec2(vA,-mA,P1,-mA,P2,1,vA);wA-=iA*(crossVec2Vec2(vcp1.rA,P1)+crossVec2Vec2(vcp2.rA,P2));combine3Vec2(vB,mB,P1,mB,P2,1,vB);wB+=iB*(crossVec2Vec2(vcp1.rB,P1)+crossVec2Vec2(vcp2.rB,P2));vcp1.normalImpulse=x.x;vcp2.normalImpulse=x.y;break}break}}copyVec2(velocityA.v,vA);velocityA.w=wA;copyVec2(velocityB.v,vB);velocityB.w=wB};Contact2.addType=function(type1,type2,callback){s_registers[type1]=s_registers[type1]||{};s_registers[type1][type2]=callback};Contact2.create=function(fixtureA,indexA,fixtureB,indexB){var typeA=fixtureA.m_shape.m_type;var typeB=fixtureB.m_shape.m_type;var contact=contactPool.allocate();var evaluateFcn;if(evaluateFcn=s_registers[typeA]&&s_registers[typeA][typeB]){contact.initialize(fixtureA,indexA,fixtureB,indexB,evaluateFcn)}else if(evaluateFcn=s_registers[typeB]&&s_registers[typeB][typeA]){contact.initialize(fixtureB,indexB,fixtureA,indexA,evaluateFcn)}else{return null}fixtureA=contact.m_fixtureA;fixtureB=contact.m_fixtureB;indexA=contact.getChildIndexA();indexB=contact.getChildIndexB();var bodyA=fixtureA.m_body;var bodyB=fixtureB.m_body;contact.m_nodeA.contact=contact;contact.m_nodeA.other=bodyB;contact.m_nodeA.prev=null;contact.m_nodeA.next=bodyA.m_contactList;if(bodyA.m_contactList!=null){bodyA.m_contactList.prev=contact.m_nodeA}bodyA.m_contactList=contact.m_nodeA;contact.m_nodeB.contact=contact;contact.m_nodeB.other=bodyA;contact.m_nodeB.prev=null;contact.m_nodeB.next=bodyB.m_contactList;if(bodyB.m_contactList!=null){bodyB.m_contactList.prev=contact.m_nodeB}bodyB.m_contactList=contact.m_nodeB;if(fixtureA.isSensor()==false&&fixtureB.isSensor()==false){bodyA.setAwake(true);bodyB.setAwake(true)}return contact};Contact2.destroy=function(contact,listener){var fixtureA=contact.m_fixtureA;var fixtureB=contact.m_fixtureB;if(fixtureA===null||fixtureB===null)return;var bodyA=fixtureA.m_body;var bodyB=fixtureB.m_body;if(bodyA===null||bodyB===null)return;if(contact.isTouching()){listener.endContact(contact)}if(contact.m_nodeA.prev){contact.m_nodeA.prev.next=contact.m_nodeA.next}if(contact.m_nodeA.next){contact.m_nodeA.next.prev=contact.m_nodeA.prev}if(contact.m_nodeA==bodyA.m_contactList){bodyA.m_contactList=contact.m_nodeA.next}if(contact.m_nodeB.prev){contact.m_nodeB.prev.next=contact.m_nodeB.next}if(contact.m_nodeB.next){contact.m_nodeB.next.prev=contact.m_nodeB.prev}if(contact.m_nodeB==bodyB.m_contactList){bodyB.m_contactList=contact.m_nodeB.next}if(contact.m_manifold.pointCount>0&&!fixtureA.m_isSensor&&!fixtureB.m_isSensor){bodyA.setAwake(true);bodyB.setAwake(true)}contactPool.release(contact)};return Contact2}();var DEFAULTS$b={gravity:Vec2.zero(),allowSleep:true,warmStarting:true,continuousPhysics:true,subStepping:false,blockSolve:true,velocityIterations:8,positionIterations:3};var World=function(){function World2(def){if(!(this instanceof World2)){return new World2(def)}this.s_step=new TimeStep;if(!def){def={}}else if(Vec2.isValid(def)){def={gravity:def}}def=options(def,DEFAULTS$b);this.m_solver=new Solver(this);this.m_broadPhase=new BroadPhase;this.m_contactList=null;this.m_contactCount=0;this.m_bodyList=null;this.m_bodyCount=0;this.m_jointList=null;this.m_jointCount=0;this.m_stepComplete=true;this.m_allowSleep=def.allowSleep;this.m_gravity=Vec2.clone(def.gravity);this.m_clearForces=true;this.m_newFixture=false;this.m_locked=false;this.m_warmStarting=def.warmStarting;this.m_continuousPhysics=def.continuousPhysics;this.m_subStepping=def.subStepping;this.m_blockSolve=def.blockSolve;this.m_velocityIterations=def.velocityIterations;this.m_positionIterations=def.positionIterations;this.m_t=0}World2.prototype._serialize=function(){var bodies=[];var joints=[];for(var b2=this.getBodyList();b2;b2=b2.getNext()){bodies.push(b2)}for(var j=this.getJointList();j;j=j.getNext()){if(typeof j._serialize==="function"){joints.push(j)}}return{gravity:this.m_gravity,bodies:bodies,joints:joints}};World2._deserialize=function(data,context,restore){if(!data){return new World2}var world=new World2(data.gravity);if(data.bodies){for(var i=data.bodies.length-1;i>=0;i-=1){world._addBody(restore(Body,data.bodies[i],world))}}if(data.joints){for(var i=data.joints.length-1;i>=0;i--){world.createJoint(restore(Joint,data.joints[i],world))}}return world};World2.prototype.getBodyList=function(){return this.m_bodyList};World2.prototype.getJointList=function(){return this.m_jointList};World2.prototype.getContactList=function(){return this.m_contactList};World2.prototype.getBodyCount=function(){return this.m_bodyCount};World2.prototype.getJointCount=function(){return this.m_jointCount};World2.prototype.getContactCount=function(){return this.m_contactCount};World2.prototype.setGravity=function(gravity){this.m_gravity.set(gravity)};World2.prototype.getGravity=function(){return this.m_gravity};World2.prototype.isLocked=function(){return this.m_locked};World2.prototype.setAllowSleeping=function(flag){if(flag==this.m_allowSleep){return}this.m_allowSleep=flag;if(this.m_allowSleep==false){for(var b2=this.m_bodyList;b2;b2=b2.m_next){b2.setAwake(true)}}};World2.prototype.getAllowSleeping=function(){return this.m_allowSleep};World2.prototype.setWarmStarting=function(flag){this.m_warmStarting=flag};World2.prototype.getWarmStarting=function(){return this.m_warmStarting};World2.prototype.setContinuousPhysics=function(flag){this.m_continuousPhysics=flag};World2.prototype.getContinuousPhysics=function(){return this.m_continuousPhysics};World2.prototype.setSubStepping=function(flag){this.m_subStepping=flag};World2.prototype.getSubStepping=function(){return this.m_subStepping};World2.prototype.setAutoClearForces=function(flag){this.m_clearForces=flag};World2.prototype.getAutoClearForces=function(){return this.m_clearForces};World2.prototype.clearForces=function(){for(var body=this.m_bodyList;body;body=body.getNext()){body.m_force.setZero();body.m_torque=0}};World2.prototype.queryAABB=function(aabb,callback){var broadPhase=this.m_broadPhase;this.m_broadPhase.query(aabb,(function(proxyId){var proxy=broadPhase.getUserData(proxyId);return callback(proxy.fixture)}))};World2.prototype.rayCast=function(point1,point2,callback){var broadPhase=this.m_broadPhase;this.m_broadPhase.rayCast({maxFraction:1,p1:point1,p2:point2},(function(input2,proxyId){var proxy=broadPhase.getUserData(proxyId);var fixture=proxy.fixture;var index=proxy.childIndex;var output2={};var hit=fixture.rayCast(output2,input2,index);if(hit){var fraction=output2.fraction;var point3=Vec2.add(Vec2.mulNumVec2(1-fraction,input2.p1),Vec2.mulNumVec2(fraction,input2.p2));return callback(fixture,point3,output2.normal,fraction)}return input2.maxFraction}))};World2.prototype.getProxyCount=function(){return this.m_broadPhase.getProxyCount()};World2.prototype.getTreeHeight=function(){return this.m_broadPhase.getTreeHeight()};World2.prototype.getTreeBalance=function(){return this.m_broadPhase.getTreeBalance()};World2.prototype.getTreeQuality=function(){return this.m_broadPhase.getTreeQuality()};World2.prototype.shiftOrigin=function(newOrigin){if(this.m_locked){return}for(var b2=this.m_bodyList;b2;b2=b2.m_next){b2.m_xf.p.sub(newOrigin);b2.m_sweep.c0.sub(newOrigin);b2.m_sweep.c.sub(newOrigin)}for(var j=this.m_jointList;j;j=j.m_next){j.shiftOrigin(newOrigin)}this.m_broadPhase.shiftOrigin(newOrigin)};World2.prototype._addBody=function(body){if(this.isLocked()){return}body.m_prev=null;body.m_next=this.m_bodyList;if(this.m_bodyList){this.m_bodyList.m_prev=body}this.m_bodyList=body;++this.m_bodyCount};World2.prototype.createBody=function(arg1,arg2){if(this.isLocked()){return null}var def={};if(!arg1);else if(Vec2.isValid(arg1)){def={position:arg1,angle:arg2}}else if(typeof arg1==="object"){def=arg1}var body=new Body(this,def);this._addBody(body);return body};World2.prototype.createDynamicBody=function(arg1,arg2){var def={};if(!arg1);else if(Vec2.isValid(arg1)){def={position:arg1,angle:arg2}}else if(typeof arg1==="object"){def=arg1}def.type="dynamic";return this.createBody(def)};World2.prototype.createKinematicBody=function(arg1,arg2){var def={};if(!arg1);else if(Vec2.isValid(arg1)){def={position:arg1,angle:arg2}}else if(typeof arg1==="object"){def=arg1}def.type="kinematic";return this.createBody(def)};World2.prototype.destroyBody=function(b2){if(this.isLocked()){return}if(b2.m_destroyed){return false}var je=b2.m_jointList;while(je){var je0=je;je=je.next;this.publish("remove-joint",je0.joint);this.destroyJoint(je0.joint);b2.m_jointList=je}b2.m_jointList=null;var ce=b2.m_contactList;while(ce){var ce0=ce;ce=ce.next;this.destroyContact(ce0.contact);b2.m_contactList=ce}b2.m_contactList=null;var f=b2.m_fixtureList;while(f){var f0=f;f=f.m_next;this.publish("remove-fixture",f0);f0.destroyProxies(this.m_broadPhase);b2.m_fixtureList=f}b2.m_fixtureList=null;if(b2.m_prev){b2.m_prev.m_next=b2.m_next}if(b2.m_next){b2.m_next.m_prev=b2.m_prev}if(b2==this.m_bodyList){this.m_bodyList=b2.m_next}b2.m_destroyed=true;--this.m_bodyCount;this.publish("remove-body",b2);return true};World2.prototype.createJoint=function(joint){if(this.isLocked()){return null}joint.m_prev=null;joint.m_next=this.m_jointList;if(this.m_jointList){this.m_jointList.m_prev=joint}this.m_jointList=joint;++this.m_jointCount;joint.m_edgeA.joint=joint;joint.m_edgeA.other=joint.m_bodyB;joint.m_edgeA.prev=null;joint.m_edgeA.next=joint.m_bodyA.m_jointList;if(joint.m_bodyA.m_jointList)joint.m_bodyA.m_jointList.prev=joint.m_edgeA;joint.m_bodyA.m_jointList=joint.m_edgeA;joint.m_edgeB.joint=joint;joint.m_edgeB.other=joint.m_bodyA;joint.m_edgeB.prev=null;joint.m_edgeB.next=joint.m_bodyB.m_jointList;if(joint.m_bodyB.m_jointList)joint.m_bodyB.m_jointList.prev=joint.m_edgeB;joint.m_bodyB.m_jointList=joint.m_edgeB;if(joint.m_collideConnected==false){for(var edge=joint.m_bodyB.getContactList();edge;edge=edge.next){if(edge.other==joint.m_bodyA){edge.contact.flagForFiltering()}}}return joint};World2.prototype.destroyJoint=function(joint){if(this.isLocked()){return}if(joint.m_prev){joint.m_prev.m_next=joint.m_next}if(joint.m_next){joint.m_next.m_prev=joint.m_prev}if(joint==this.m_jointList){this.m_jointList=joint.m_next}var bodyA=joint.m_bodyA;var bodyB=joint.m_bodyB;bodyA.setAwake(true);bodyB.setAwake(true);if(joint.m_edgeA.prev){joint.m_edgeA.prev.next=joint.m_edgeA.next}if(joint.m_edgeA.next){joint.m_edgeA.next.prev=joint.m_edgeA.prev}if(joint.m_edgeA==bodyA.m_jointList){bodyA.m_jointList=joint.m_edgeA.next}joint.m_edgeA.prev=null;joint.m_edgeA.next=null;if(joint.m_edgeB.prev){joint.m_edgeB.prev.next=joint.m_edgeB.next}if(joint.m_edgeB.next){joint.m_edgeB.next.prev=joint.m_edgeB.prev}if(joint.m_edgeB==bodyB.m_jointList){bodyB.m_jointList=joint.m_edgeB.next}joint.m_edgeB.prev=null;joint.m_edgeB.next=null;--this.m_jointCount;if(joint.m_collideConnected==false){var edge=bodyB.getContactList();while(edge){if(edge.other==bodyA){edge.contact.flagForFiltering()}edge=edge.next}}this.publish("remove-joint",joint)};World2.prototype.step=function(timeStep,velocityIterations,positionIterations){this.publish("pre-step",timeStep);if((velocityIterations|0)!==velocityIterations){velocityIterations=0}velocityIterations=velocityIterations||this.m_velocityIterations;positionIterations=positionIterations||this.m_positionIterations;if(this.m_newFixture){this.findNewContacts();this.m_newFixture=false}this.m_locked=true;this.s_step.reset(timeStep);this.s_step.velocityIterations=velocityIterations;this.s_step.positionIterations=positionIterations;this.s_step.warmStarting=this.m_warmStarting;this.s_step.blockSolve=this.m_blockSolve;this.updateContacts();if(this.m_stepComplete&&timeStep>0){this.m_solver.solveWorld(this.s_step);for(var b2=this.m_bodyList;b2;b2=b2.getNext()){if(b2.m_islandFlag==false){continue}if(b2.isStatic()){continue}b2.synchronizeFixtures()}this.findNewContacts()}if(this.m_continuousPhysics&&timeStep>0){this.m_solver.solveWorldTOI(this.s_step)}if(this.m_clearForces){this.clearForces()}this.m_locked=false;this.publish("post-step",timeStep)};World2.prototype.findNewContacts=function(){var _this=this;this.m_broadPhase.updatePairs((function(proxyA,proxyB){return _this.createContact(proxyA,proxyB)}))};World2.prototype.createContact=function(proxyA,proxyB){var fixtureA=proxyA.fixture;var fixtureB=proxyB.fixture;var indexA=proxyA.childIndex;var indexB=proxyB.childIndex;var bodyA=fixtureA.getBody();var bodyB=fixtureB.getBody();if(bodyA==bodyB){return}var edge=bodyB.getContactList();while(edge){if(edge.other==bodyA){var fA=edge.contact.getFixtureA();var fB=edge.contact.getFixtureB();var iA=edge.contact.getChildIndexA();var iB=edge.contact.getChildIndexB();if(fA==fixtureA&&fB==fixtureB&&iA==indexA&&iB==indexB){return}if(fA==fixtureB&&fB==fixtureA&&iA==indexB&&iB==indexA){return}}edge=edge.next}if(bodyB.shouldCollide(bodyA)==false){return}if(fixtureB.shouldCollide(fixtureA)==false){return}var contact=Contact.create(fixtureA,indexA,fixtureB,indexB);if(contact==null){return}contact.m_prev=null;if(this.m_contactList!=null){contact.m_next=this.m_contactList;this.m_contactList.m_prev=contact}this.m_contactList=contact;++this.m_contactCount};World2.prototype.updateContacts=function(){var c2;var next_c=this.m_contactList;while(c2=next_c){next_c=c2.getNext();var fixtureA=c2.getFixtureA();var fixtureB=c2.getFixtureB();var indexA=c2.getChildIndexA();var indexB=c2.getChildIndexB();var bodyA=fixtureA.getBody();var bodyB=fixtureB.getBody();if(c2.m_filterFlag){if(bodyB.shouldCollide(bodyA)==false){this.destroyContact(c2);continue}if(fixtureB.shouldCollide(fixtureA)==false){this.destroyContact(c2);continue}c2.m_filterFlag=false}var activeA=bodyA.isAwake()&&!bodyA.isStatic();var activeB=bodyB.isAwake()&&!bodyB.isStatic();if(activeA==false&&activeB==false){continue}var proxyIdA=fixtureA.m_proxies[indexA].proxyId;var proxyIdB=fixtureB.m_proxies[indexB].proxyId;var overlap=this.m_broadPhase.testOverlap(proxyIdA,proxyIdB);if(overlap==false){this.destroyContact(c2);continue}c2.update(this)}};World2.prototype.destroyContact=function(contact){if(contact.m_prev){contact.m_prev.m_next=contact.m_next}if(contact.m_next){contact.m_next.m_prev=contact.m_prev}if(contact==this.m_contactList){this.m_contactList=contact.m_next}Contact.destroy(contact,this);--this.m_contactCount};World2.prototype.on=function(name,listener){if(typeof name!=="string"||typeof listener!=="function"){return this}if(!this._listeners){this._listeners={}}if(!this._listeners[name]){this._listeners[name]=[]}this._listeners[name].push(listener);return this};World2.prototype.off=function(name,listener){if(typeof name!=="string"||typeof listener!=="function"){return this}var listeners=this._listeners&&this._listeners[name];if(!listeners||!listeners.length){return this}var index=listeners.indexOf(listener);if(index>=0){listeners.splice(index,1)}return this};World2.prototype.publish=function(name,arg1,arg2,arg3){var listeners=this._listeners&&this._listeners[name];if(!listeners||!listeners.length){return 0}for(var l=0;l0){output2.normal=Rot.mulVec2(xf2.q,normal3).neg()}else{output2.normal=Rot.mulVec2(xf2.q,normal3)}return true};EdgeShape2.prototype.computeAABB=function(aabb,xf2,childIndex){transformVec2(v1$2,xf2,this.m_vertex1);transformVec2(v2$1,xf2,this.m_vertex2);AABB.combinePoints(aabb,v1$2,v2$1);AABB.extend(aabb,this.m_radius)};EdgeShape2.prototype.computeMass=function(massData,density){massData.mass=0;combine2Vec2(massData.center,.5,this.m_vertex1,.5,this.m_vertex2);massData.I=0};EdgeShape2.prototype.computeDistanceProxy=function(proxy){proxy.m_vertices[0]=this.m_vertex1;proxy.m_vertices[1]=this.m_vertex2;proxy.m_vertices.length=2;proxy.m_count=2;proxy.m_radius=this.m_radius};EdgeShape2.TYPE="edge";return EdgeShape2}(Shape);var Edge=EdgeShape;var v1$1=vec2(0,0);var v2=vec2(0,0);var ChainShape=function(_super){__extends(ChainShape2,_super);function ChainShape2(vertices,loop){var _this=this;if(!(_this instanceof ChainShape2)){return new ChainShape2(vertices,loop)}_this=_super.call(this)||this;_this.m_type=ChainShape2.TYPE;_this.m_radius=SettingsInternal.polygonRadius;_this.m_vertices=[];_this.m_count=0;_this.m_prevVertex=null;_this.m_nextVertex=null;_this.m_hasPrevVertex=false;_this.m_hasNextVertex=false;_this.m_isLoop=!!loop;if(vertices&&vertices.length){if(loop){_this._createLoop(vertices)}else{_this._createChain(vertices)}}return _this}ChainShape2.prototype._serialize=function(){var data={type:this.m_type,vertices:this.m_vertices,isLoop:this.m_isLoop,hasPrevVertex:this.m_hasPrevVertex,hasNextVertex:this.m_hasNextVertex,prevVertex:null,nextVertex:null};if(this.m_prevVertex){data.prevVertex=this.m_prevVertex}if(this.m_nextVertex){data.nextVertex=this.m_nextVertex}return data};ChainShape2._deserialize=function(data,fixture,restore){var vertices=[];if(data.vertices){for(var i=0;i0){edge.m_vertex0=this.m_vertices[childIndex-1];edge.m_hasVertex0=true}else{edge.m_vertex0=this.m_prevVertex;edge.m_hasVertex0=this.m_hasPrevVertex}if(childIndexx0||x2===x0&&ps[i].yr.lengthSquared()){ie2=j}}++m;ih=ie2;if(ie2===i0){break}}if(m<3){this._setAsBox(1,1);return}this.m_count=m;this.m_vertices=[];for(var i=0;i0){return false}}return true};PolygonShape2.prototype.rayCast=function(output2,input2,xf2,childIndex){var p1=Rot.mulTVec2(xf2.q,Vec2.sub(input2.p1,xf2.p));var p2=Rot.mulTVec2(xf2.q,Vec2.sub(input2.p2,xf2.p));var d2=Vec2.sub(p2,p1);var lower=0;var upper=input2.maxFraction;var index=-1;for(var i=0;i0&&numerator=0){output2.fraction=lower;output2.normal=Rot.mulVec2(xf2.q,this.m_normals[index]);return true}return false};PolygonShape2.prototype.computeAABB=function(aabb,xf2,childIndex){var minX=Infinity;var minY=Infinity;var maxX=-Infinity;var maxY=-Infinity;for(var i=0;i0){this.m_length=+def.length}else if(def.length<0);else if(def.anchorA||def.anchorA||def.anchorA||def.anchorA){this.m_length=Vec2.distance(this.m_bodyA.getWorldPoint(this.m_localAnchorA),this.m_bodyB.getWorldPoint(this.m_localAnchorB))}if(Number.isFinite(def.frequencyHz)){this.m_frequencyHz=def.frequencyHz}if(Number.isFinite(def.dampingRatio)){this.m_dampingRatio=def.dampingRatio}};DistanceJoint2.prototype.getLocalAnchorA=function(){return this.m_localAnchorA};DistanceJoint2.prototype.getLocalAnchorB=function(){return this.m_localAnchorB};DistanceJoint2.prototype.setLength=function(length){this.m_length=length};DistanceJoint2.prototype.getLength=function(){return this.m_length};DistanceJoint2.prototype.setFrequency=function(hz){this.m_frequencyHz=hz};DistanceJoint2.prototype.getFrequency=function(){return this.m_frequencyHz};DistanceJoint2.prototype.setDampingRatio=function(ratio){this.m_dampingRatio=ratio};DistanceJoint2.prototype.getDampingRatio=function(){return this.m_dampingRatio};DistanceJoint2.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)};DistanceJoint2.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)};DistanceJoint2.prototype.getReactionForce=function(inv_dt){return Vec2.mulNumVec2(this.m_impulse,this.m_u).mul(inv_dt)};DistanceJoint2.prototype.getReactionTorque=function(inv_dt){return 0};DistanceJoint2.prototype.initVelocityConstraints=function(step){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter;this.m_localCenterB=this.m_bodyB.m_sweep.localCenter;this.m_invMassA=this.m_bodyA.m_invMass;this.m_invMassB=this.m_bodyB.m_invMass;this.m_invIA=this.m_bodyA.m_invI;this.m_invIB=this.m_bodyB.m_invI;var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var qA=Rot.neo(aA);var qB=Rot.neo(aB);this.m_rA=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));this.m_rB=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));this.m_u=Vec2.sub(Vec2.add(cB2,this.m_rB),Vec2.add(cA2,this.m_rA));var length=this.m_u.length();if(length>SettingsInternal.linearSlop){this.m_u.mul(1/length)}else{this.m_u.setNum(0,0)}var crAu=Vec2.crossVec2Vec2(this.m_rA,this.m_u);var crBu=Vec2.crossVec2Vec2(this.m_rB,this.m_u);var invMass=this.m_invMassA+this.m_invIA*crAu*crAu+this.m_invMassB+this.m_invIB*crBu*crBu;this.m_mass=invMass!=0?1/invMass:0;if(this.m_frequencyHz>0){var C=length-this.m_length;var omega=2*math_PI$3*this.m_frequencyHz;var d2=2*this.m_mass*this.m_dampingRatio*omega;var k=this.m_mass*omega*omega;var h=step.dt;this.m_gamma=h*(d2+h*k);this.m_gamma=this.m_gamma!=0?1/this.m_gamma:0;this.m_bias=C*h*k*this.m_gamma;invMass+=this.m_gamma;this.m_mass=invMass!=0?1/invMass:0}else{this.m_gamma=0;this.m_bias=0}if(step.warmStarting){this.m_impulse*=step.dtRatio;var P3=Vec2.mulNumVec2(this.m_impulse,this.m_u);vA2.subMul(this.m_invMassA,P3);wA-=this.m_invIA*Vec2.crossVec2Vec2(this.m_rA,P3);vB2.addMul(this.m_invMassB,P3);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,P3)}else{this.m_impulse=0}this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB};DistanceJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var vpA=Vec2.add(vA2,Vec2.crossNumVec2(wA,this.m_rA));var vpB=Vec2.add(vB2,Vec2.crossNumVec2(wB,this.m_rB));var Cdot=Vec2.dot(this.m_u,vpB)-Vec2.dot(this.m_u,vpA);var impulse=-this.m_mass*(Cdot+this.m_bias+this.m_gamma*this.m_impulse);this.m_impulse+=impulse;var P3=Vec2.mulNumVec2(impulse,this.m_u);vA2.subMul(this.m_invMassA,P3);wA-=this.m_invIA*Vec2.crossVec2Vec2(this.m_rA,P3);vB2.addMul(this.m_invMassB,P3);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,P3);this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB};DistanceJoint2.prototype.solvePositionConstraints=function(step){if(this.m_frequencyHz>0){return true}var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var rA2=Rot.mulSub(qA,this.m_localAnchorA,this.m_localCenterA);var rB2=Rot.mulSub(qB,this.m_localAnchorB,this.m_localCenterB);var u=Vec2.sub(Vec2.add(cB2,rB2),Vec2.add(cA2,rA2));var length=u.normalize();var C=clamp(length-this.m_length,-SettingsInternal.maxLinearCorrection,SettingsInternal.maxLinearCorrection);var impulse=-this.m_mass*C;var P3=Vec2.mulNumVec2(impulse,u);cA2.subMul(this.m_invMassA,P3);aA-=this.m_invIA*Vec2.crossVec2Vec2(rA2,P3);cB2.addMul(this.m_invMassB,P3);aB+=this.m_invIB*Vec2.crossVec2Vec2(rB2,P3);this.m_bodyA.c_position.c.setVec2(cA2);this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c.setVec2(cB2);this.m_bodyB.c_position.a=aB;return math_abs$5(C)0){this.m_angularMass=1/this.m_angularMass}if(step.warmStarting){this.m_linearImpulse.mul(step.dtRatio);this.m_angularImpulse*=step.dtRatio;var P3=Vec2.neo(this.m_linearImpulse.x,this.m_linearImpulse.y);vA2.subMul(mA,P3);wA-=iA*(Vec2.crossVec2Vec2(this.m_rA,P3)+this.m_angularImpulse);vB2.addMul(mB,P3);wB+=iB*(Vec2.crossVec2Vec2(this.m_rB,P3)+this.m_angularImpulse)}else{this.m_linearImpulse.setZero();this.m_angularImpulse=0}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};FrictionJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var h=step.dt;{var Cdot=wB-wA;var impulse=-this.m_angularMass*Cdot;var oldImpulse=this.m_angularImpulse;var maxImpulse=h*this.m_maxTorque;this.m_angularImpulse=clamp(this.m_angularImpulse+impulse,-maxImpulse,maxImpulse);impulse=this.m_angularImpulse-oldImpulse;wA-=iA*impulse;wB+=iB*impulse}{var Cdot=Vec2.sub(Vec2.add(vB2,Vec2.crossNumVec2(wB,this.m_rB)),Vec2.add(vA2,Vec2.crossNumVec2(wA,this.m_rA)));var impulse=Vec2.neg(Mat22.mulVec2(this.m_linearMass,Cdot));var oldImpulse=this.m_linearImpulse;this.m_linearImpulse.add(impulse);var maxImpulse=h*this.m_maxForce;if(this.m_linearImpulse.lengthSquared()>maxImpulse*maxImpulse){this.m_linearImpulse.normalize();this.m_linearImpulse.mul(maxImpulse)}impulse=Vec2.sub(this.m_linearImpulse,oldImpulse);vA2.subMul(mA,impulse);wA-=iA*Vec2.crossVec2Vec2(this.m_rA,impulse);vB2.addMul(mB,impulse);wB+=iB*Vec2.crossVec2Vec2(this.m_rB,impulse)}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};FrictionJoint2.prototype.solvePositionConstraints=function(step){return true};FrictionJoint2.TYPE="friction-joint";return FrictionJoint2}(Joint);var Mat33=function(){function Mat332(a2,b2,c2){if(typeof a2==="object"&&a2!==null){this.ex=Vec3.clone(a2);this.ey=Vec3.clone(b2);this.ez=Vec3.clone(c2)}else{this.ex=Vec3.zero();this.ey=Vec3.zero();this.ez=Vec3.zero()}}Mat332.prototype.toString=function(){return JSON.stringify(this)};Mat332.isValid=function(obj){if(obj===null||typeof obj==="undefined"){return false}return Vec3.isValid(obj.ex)&&Vec3.isValid(obj.ey)&&Vec3.isValid(obj.ez)};Mat332.assert=function(o){};Mat332.prototype.setZero=function(){this.ex.setZero();this.ey.setZero();this.ez.setZero();return this};Mat332.prototype.solve33=function(v3){var cross_x=this.ey.y*this.ez.z-this.ey.z*this.ez.y;var cross_y=this.ey.z*this.ez.x-this.ey.x*this.ez.z;var cross_z=this.ey.x*this.ez.y-this.ey.y*this.ez.x;var det=this.ex.x*cross_x+this.ex.y*cross_y+this.ex.z*cross_z;if(det!==0){det=1/det}var r=new Vec3;cross_x=this.ey.y*this.ez.z-this.ey.z*this.ez.y;cross_y=this.ey.z*this.ez.x-this.ey.x*this.ez.z;cross_z=this.ey.x*this.ez.y-this.ey.y*this.ez.x;r.x=det*(v3.x*cross_x+v3.y*cross_y+v3.z*cross_z);cross_x=v3.y*this.ez.z-v3.z*this.ez.y;cross_y=v3.z*this.ez.x-v3.x*this.ez.z;cross_z=v3.x*this.ez.y-v3.y*this.ez.x;r.y=det*(this.ex.x*cross_x+this.ex.y*cross_y+this.ex.z*cross_z);cross_x=this.ey.y*v3.z-this.ey.z*v3.y;cross_y=this.ey.z*v3.x-this.ey.x*v3.z;cross_z=this.ey.x*v3.y-this.ey.y*v3.x;r.z=det*(this.ex.x*cross_x+this.ex.y*cross_y+this.ex.z*cross_z);return r};Mat332.prototype.solve22=function(v3){var a11=this.ex.x;var a12=this.ey.x;var a21=this.ex.y;var a22=this.ey.y;var det=a11*a22-a12*a21;if(det!==0){det=1/det}var r=Vec2.zero();r.x=det*(a22*v3.x-a12*v3.y);r.y=det*(a11*v3.y-a21*v3.x);return r};Mat332.prototype.getInverse22=function(M){var a2=this.ex.x;var b2=this.ey.x;var c2=this.ex.y;var d2=this.ey.y;var det=a2*d2-b2*c2;if(det!==0){det=1/det}M.ex.x=det*d2;M.ey.x=-det*b2;M.ex.z=0;M.ex.y=-det*c2;M.ey.y=det*a2;M.ey.z=0;M.ez.x=0;M.ez.y=0;M.ez.z=0};Mat332.prototype.getSymInverse33=function(M){var det=Vec3.dot(this.ex,Vec3.cross(this.ey,this.ez));if(det!==0){det=1/det}var a11=this.ex.x;var a12=this.ey.x;var a13=this.ez.x;var a22=this.ey.y;var a23=this.ez.y;var a33=this.ez.z;M.ex.x=det*(a22*a33-a23*a23);M.ex.y=det*(a13*a23-a12*a33);M.ex.z=det*(a12*a23-a13*a22);M.ey.x=M.ex.y;M.ey.y=det*(a11*a33-a13*a13);M.ey.z=det*(a13*a12-a11*a23);M.ez.x=M.ex.z;M.ez.y=M.ey.z;M.ez.z=det*(a11*a22-a12*a12)};Mat332.mul=function(a2,b2){if(b2&&"z"in b2&&"y"in b2&&"x"in b2){var x2=a2.ex.x*b2.x+a2.ey.x*b2.y+a2.ez.x*b2.z;var y=a2.ex.y*b2.x+a2.ey.y*b2.y+a2.ez.y*b2.z;var z=a2.ex.z*b2.x+a2.ey.z*b2.y+a2.ez.z*b2.z;return new Vec3(x2,y,z)}else if(b2&&"y"in b2&&"x"in b2){var x2=a2.ex.x*b2.x+a2.ey.x*b2.y;var y=a2.ex.y*b2.x+a2.ey.y*b2.y;return Vec2.neo(x2,y)}};Mat332.mulVec3=function(a2,b2){var x2=a2.ex.x*b2.x+a2.ey.x*b2.y+a2.ez.x*b2.z;var y=a2.ex.y*b2.x+a2.ey.y*b2.y+a2.ez.y*b2.z;var z=a2.ex.z*b2.x+a2.ey.z*b2.y+a2.ez.z*b2.z;return new Vec3(x2,y,z)};Mat332.mulVec2=function(a2,b2){var x2=a2.ex.x*b2.x+a2.ey.x*b2.y;var y=a2.ex.y*b2.x+a2.ey.y*b2.y;return Vec2.neo(x2,y)};Mat332.add=function(a2,b2){return new Mat332(Vec3.add(a2.ex,b2.ex),Vec3.add(a2.ey,b2.ey),Vec3.add(a2.ez,b2.ez))};return Mat332}();var math_abs$4=Math.abs;var LimitState$2;(function(LimitState2){LimitState2[LimitState2["inactiveLimit"]=0]="inactiveLimit";LimitState2[LimitState2["atLowerLimit"]=1]="atLowerLimit";LimitState2[LimitState2["atUpperLimit"]=2]="atUpperLimit";LimitState2[LimitState2["equalLimits"]=3]="equalLimits"})(LimitState$2||(LimitState$2={}));var DEFAULTS$8={lowerAngle:0,upperAngle:0,maxMotorTorque:0,motorSpeed:0,enableLimit:false,enableMotor:false};var RevoluteJoint=function(_super){__extends(RevoluteJoint2,_super);function RevoluteJoint2(def,bodyA,bodyB,anchor){var _this=this;var _a2,_b,_c,_d,_e,_f;if(!(_this instanceof RevoluteJoint2)){return new RevoluteJoint2(def,bodyA,bodyB,anchor)}def=def!==null&&def!==void 0?def:{};_this=_super.call(this,def,bodyA,bodyB)||this;bodyA=_this.m_bodyA;bodyB=_this.m_bodyB;_this.m_mass=new Mat33;_this.m_limitState=LimitState$2.inactiveLimit;_this.m_type=RevoluteJoint2.TYPE;if(Vec2.isValid(anchor)){_this.m_localAnchorA=bodyA.getLocalPoint(anchor)}else if(Vec2.isValid(def.localAnchorA)){_this.m_localAnchorA=Vec2.clone(def.localAnchorA)}else{_this.m_localAnchorA=Vec2.zero()}if(Vec2.isValid(anchor)){_this.m_localAnchorB=bodyB.getLocalPoint(anchor)}else if(Vec2.isValid(def.localAnchorB)){_this.m_localAnchorB=Vec2.clone(def.localAnchorB)}else{_this.m_localAnchorB=Vec2.zero()}if(Number.isFinite(def.referenceAngle)){_this.m_referenceAngle=def.referenceAngle}else{_this.m_referenceAngle=bodyB.getAngle()-bodyA.getAngle()}_this.m_impulse=new Vec3;_this.m_motorImpulse=0;_this.m_lowerAngle=(_a2=def.lowerAngle)!==null&&_a2!==void 0?_a2:DEFAULTS$8.lowerAngle;_this.m_upperAngle=(_b=def.upperAngle)!==null&&_b!==void 0?_b:DEFAULTS$8.upperAngle;_this.m_maxMotorTorque=(_c=def.maxMotorTorque)!==null&&_c!==void 0?_c:DEFAULTS$8.maxMotorTorque;_this.m_motorSpeed=(_d=def.motorSpeed)!==null&&_d!==void 0?_d:DEFAULTS$8.motorSpeed;_this.m_enableLimit=(_e=def.enableLimit)!==null&&_e!==void 0?_e:DEFAULTS$8.enableLimit;_this.m_enableMotor=(_f=def.enableMotor)!==null&&_f!==void 0?_f:DEFAULTS$8.enableMotor;return _this}RevoluteJoint2.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,lowerAngle:this.m_lowerAngle,upperAngle:this.m_upperAngle,maxMotorTorque:this.m_maxMotorTorque,motorSpeed:this.m_motorSpeed,enableLimit:this.m_enableLimit,enableMotor:this.m_enableMotor,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,referenceAngle:this.m_referenceAngle}};RevoluteJoint2._deserialize=function(data,world,restore){data=__assign({},data);data.bodyA=restore(Body,data.bodyA,world);data.bodyB=restore(Body,data.bodyB,world);var joint=new RevoluteJoint2(data);return joint};RevoluteJoint2.prototype._reset=function(def){if(def.anchorA){this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA))}else if(def.localAnchorA){this.m_localAnchorA.setVec2(def.localAnchorA)}if(def.anchorB){this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB))}else if(def.localAnchorB){this.m_localAnchorB.setVec2(def.localAnchorB)}if(Number.isFinite(def.referenceAngle)){this.m_referenceAngle=def.referenceAngle}if(def.enableLimit!==void 0){this.m_enableLimit=def.enableLimit}if(Number.isFinite(def.lowerAngle)){this.m_lowerAngle=def.lowerAngle}if(Number.isFinite(def.upperAngle)){this.m_upperAngle=def.upperAngle}if(Number.isFinite(def.maxMotorTorque)){this.m_maxMotorTorque=def.maxMotorTorque}if(Number.isFinite(def.motorSpeed)){this.m_motorSpeed=def.motorSpeed}if(def.enableMotor!==void 0){this.m_enableMotor=def.enableMotor}};RevoluteJoint2.prototype.getLocalAnchorA=function(){return this.m_localAnchorA};RevoluteJoint2.prototype.getLocalAnchorB=function(){return this.m_localAnchorB};RevoluteJoint2.prototype.getReferenceAngle=function(){return this.m_referenceAngle};RevoluteJoint2.prototype.getJointAngle=function(){var bA=this.m_bodyA;var bB=this.m_bodyB;return bB.m_sweep.a-bA.m_sweep.a-this.m_referenceAngle};RevoluteJoint2.prototype.getJointSpeed=function(){var bA=this.m_bodyA;var bB=this.m_bodyB;return bB.m_angularVelocity-bA.m_angularVelocity};RevoluteJoint2.prototype.isMotorEnabled=function(){return this.m_enableMotor};RevoluteJoint2.prototype.enableMotor=function(flag){if(flag==this.m_enableMotor)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_enableMotor=flag};RevoluteJoint2.prototype.getMotorTorque=function(inv_dt){return inv_dt*this.m_motorImpulse};RevoluteJoint2.prototype.setMotorSpeed=function(speed){if(speed==this.m_motorSpeed)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_motorSpeed=speed};RevoluteJoint2.prototype.getMotorSpeed=function(){return this.m_motorSpeed};RevoluteJoint2.prototype.setMaxMotorTorque=function(torque){if(torque==this.m_maxMotorTorque)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_maxMotorTorque=torque};RevoluteJoint2.prototype.getMaxMotorTorque=function(){return this.m_maxMotorTorque};RevoluteJoint2.prototype.isLimitEnabled=function(){return this.m_enableLimit};RevoluteJoint2.prototype.enableLimit=function(flag){if(flag!=this.m_enableLimit){this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_enableLimit=flag;this.m_impulse.z=0}};RevoluteJoint2.prototype.getLowerLimit=function(){return this.m_lowerAngle};RevoluteJoint2.prototype.getUpperLimit=function(){return this.m_upperAngle};RevoluteJoint2.prototype.setLimits=function(lower,upper){if(lower!=this.m_lowerAngle||upper!=this.m_upperAngle){this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_impulse.z=0;this.m_lowerAngle=lower;this.m_upperAngle=upper}};RevoluteJoint2.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)};RevoluteJoint2.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)};RevoluteJoint2.prototype.getReactionForce=function(inv_dt){return Vec2.neo(this.m_impulse.x,this.m_impulse.y).mul(inv_dt)};RevoluteJoint2.prototype.getReactionTorque=function(inv_dt){return inv_dt*this.m_impulse.z};RevoluteJoint2.prototype.initVelocityConstraints=function(step){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter;this.m_localCenterB=this.m_bodyB.m_sweep.localCenter;this.m_invMassA=this.m_bodyA.m_invMass;this.m_invMassB=this.m_bodyB.m_invMass;this.m_invIA=this.m_bodyA.m_invI;this.m_invIB=this.m_bodyB.m_invI;var aA=this.m_bodyA.c_position.a;var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var aB=this.m_bodyB.c_position.a;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var qA=Rot.neo(aA);var qB=Rot.neo(aB);this.m_rA=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));this.m_rB=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var fixedRotation=iA+iB===0;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;this.m_mass.ey.x=-this.m_rA.y*this.m_rA.x*iA-this.m_rB.y*this.m_rB.x*iB;this.m_mass.ez.x=-this.m_rA.y*iA-this.m_rB.y*iB;this.m_mass.ex.y=this.m_mass.ey.x;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;this.m_mass.ez.y=this.m_rA.x*iA+this.m_rB.x*iB;this.m_mass.ex.z=this.m_mass.ez.x;this.m_mass.ey.z=this.m_mass.ez.y;this.m_mass.ez.z=iA+iB;this.m_motorMass=iA+iB;if(this.m_motorMass>0){this.m_motorMass=1/this.m_motorMass}if(this.m_enableMotor==false||fixedRotation){this.m_motorImpulse=0}if(this.m_enableLimit&&fixedRotation==false){var jointAngle=aB-aA-this.m_referenceAngle;if(math_abs$4(this.m_upperAngle-this.m_lowerAngle)<2*SettingsInternal.angularSlop){this.m_limitState=LimitState$2.equalLimits}else if(jointAngle<=this.m_lowerAngle){if(this.m_limitState!=LimitState$2.atLowerLimit){this.m_impulse.z=0}this.m_limitState=LimitState$2.atLowerLimit}else if(jointAngle>=this.m_upperAngle){if(this.m_limitState!=LimitState$2.atUpperLimit){this.m_impulse.z=0}this.m_limitState=LimitState$2.atUpperLimit}else{this.m_limitState=LimitState$2.inactiveLimit;this.m_impulse.z=0}}else{this.m_limitState=LimitState$2.inactiveLimit}if(step.warmStarting){this.m_impulse.mul(step.dtRatio);this.m_motorImpulse*=step.dtRatio;var P3=Vec2.neo(this.m_impulse.x,this.m_impulse.y);vA2.subMul(mA,P3);wA-=iA*(Vec2.crossVec2Vec2(this.m_rA,P3)+this.m_motorImpulse+this.m_impulse.z);vB2.addMul(mB,P3);wB+=iB*(Vec2.crossVec2Vec2(this.m_rB,P3)+this.m_motorImpulse+this.m_impulse.z)}else{this.m_impulse.setZero();this.m_motorImpulse=0}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};RevoluteJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var fixedRotation=iA+iB===0;if(this.m_enableMotor&&this.m_limitState!=LimitState$2.equalLimits&&fixedRotation==false){var Cdot=wB-wA-this.m_motorSpeed;var impulse=-this.m_motorMass*Cdot;var oldImpulse=this.m_motorImpulse;var maxImpulse=step.dt*this.m_maxMotorTorque;this.m_motorImpulse=clamp(this.m_motorImpulse+impulse,-maxImpulse,maxImpulse);impulse=this.m_motorImpulse-oldImpulse;wA-=iA*impulse;wB+=iB*impulse}if(this.m_enableLimit&&this.m_limitState!=LimitState$2.inactiveLimit&&fixedRotation==false){var Cdot1=Vec2.zero();Cdot1.addCombine(1,vB2,1,Vec2.crossNumVec2(wB,this.m_rB));Cdot1.subCombine(1,vA2,1,Vec2.crossNumVec2(wA,this.m_rA));var Cdot2=wB-wA;var Cdot=new Vec3(Cdot1.x,Cdot1.y,Cdot2);var impulse=Vec3.neg(this.m_mass.solve33(Cdot));if(this.m_limitState==LimitState$2.equalLimits){this.m_impulse.add(impulse)}else if(this.m_limitState==LimitState$2.atLowerLimit){var newImpulse=this.m_impulse.z+impulse.z;if(newImpulse<0){var rhs=Vec2.combine(-1,Cdot1,this.m_impulse.z,Vec2.neo(this.m_mass.ez.x,this.m_mass.ez.y));var reduced=this.m_mass.solve22(rhs);impulse.x=reduced.x;impulse.y=reduced.y;impulse.z=-this.m_impulse.z;this.m_impulse.x+=reduced.x;this.m_impulse.y+=reduced.y;this.m_impulse.z=0}else{this.m_impulse.add(impulse)}}else if(this.m_limitState==LimitState$2.atUpperLimit){var newImpulse=this.m_impulse.z+impulse.z;if(newImpulse>0){var rhs=Vec2.combine(-1,Cdot1,this.m_impulse.z,Vec2.neo(this.m_mass.ez.x,this.m_mass.ez.y));var reduced=this.m_mass.solve22(rhs);impulse.x=reduced.x;impulse.y=reduced.y;impulse.z=-this.m_impulse.z;this.m_impulse.x+=reduced.x;this.m_impulse.y+=reduced.y;this.m_impulse.z=0}else{this.m_impulse.add(impulse)}}var P3=Vec2.neo(impulse.x,impulse.y);vA2.subMul(mA,P3);wA-=iA*(Vec2.crossVec2Vec2(this.m_rA,P3)+impulse.z);vB2.addMul(mB,P3);wB+=iB*(Vec2.crossVec2Vec2(this.m_rB,P3)+impulse.z)}else{var Cdot=Vec2.zero();Cdot.addCombine(1,vB2,1,Vec2.crossNumVec2(wB,this.m_rB));Cdot.subCombine(1,vA2,1,Vec2.crossNumVec2(wA,this.m_rA));var impulse=this.m_mass.solve22(Vec2.neg(Cdot));this.m_impulse.x+=impulse.x;this.m_impulse.y+=impulse.y;vA2.subMul(mA,impulse);wA-=iA*Vec2.crossVec2Vec2(this.m_rA,impulse);vB2.addMul(mB,impulse);wB+=iB*Vec2.crossVec2Vec2(this.m_rB,impulse)}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};RevoluteJoint2.prototype.solvePositionConstraints=function(step){var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var angularError=0;var positionError=0;var fixedRotation=this.m_invIA+this.m_invIB==0;if(this.m_enableLimit&&this.m_limitState!=LimitState$2.inactiveLimit&&fixedRotation==false){var angle=aB-aA-this.m_referenceAngle;var limitImpulse=0;if(this.m_limitState==LimitState$2.equalLimits){var C=clamp(angle-this.m_lowerAngle,-SettingsInternal.maxAngularCorrection,SettingsInternal.maxAngularCorrection);limitImpulse=-this.m_motorMass*C;angularError=math_abs$4(C)}else if(this.m_limitState==LimitState$2.atLowerLimit){var C=angle-this.m_lowerAngle;angularError=-C;C=clamp(C+SettingsInternal.angularSlop,-SettingsInternal.maxAngularCorrection,0);limitImpulse=-this.m_motorMass*C}else if(this.m_limitState==LimitState$2.atUpperLimit){var C=angle-this.m_upperAngle;angularError=C;C=clamp(C-SettingsInternal.angularSlop,0,SettingsInternal.maxAngularCorrection);limitImpulse=-this.m_motorMass*C}aA-=this.m_invIA*limitImpulse;aB+=this.m_invIB*limitImpulse}{qA.setAngle(aA);qB.setAngle(aB);var rA2=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));var rB2=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var C=Vec2.zero();C.addCombine(1,cB2,1,rB2);C.subCombine(1,cA2,1,rA2);positionError=C.length();var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var K=new Mat22;K.ex.x=mA+mB+iA*rA2.y*rA2.y+iB*rB2.y*rB2.y;K.ex.y=-iA*rA2.x*rA2.y-iB*rB2.x*rB2.y;K.ey.x=K.ex.y;K.ey.y=mA+mB+iA*rA2.x*rA2.x+iB*rB2.x*rB2.x;var impulse=Vec2.neg(K.solve(C));cA2.subMul(mA,impulse);aA-=iA*Vec2.crossVec2Vec2(rA2,impulse);cB2.addMul(mB,impulse);aB+=iB*Vec2.crossVec2Vec2(rB2,impulse)}this.m_bodyA.c_position.c.setVec2(cA2);this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c.setVec2(cB2);this.m_bodyB.c_position.a=aB;return positionError<=SettingsInternal.linearSlop&&angularError<=SettingsInternal.angularSlop};RevoluteJoint2.TYPE="revolute-joint";return RevoluteJoint2}(Joint);var math_abs$3=Math.abs;var math_max=Math.max;var math_min$2=Math.min;var LimitState$1;(function(LimitState2){LimitState2[LimitState2["inactiveLimit"]=0]="inactiveLimit";LimitState2[LimitState2["atLowerLimit"]=1]="atLowerLimit";LimitState2[LimitState2["atUpperLimit"]=2]="atUpperLimit";LimitState2[LimitState2["equalLimits"]=3]="equalLimits"})(LimitState$1||(LimitState$1={}));var DEFAULTS$7={enableLimit:false,lowerTranslation:0,upperTranslation:0,enableMotor:false,maxMotorForce:0,motorSpeed:0};var PrismaticJoint=function(_super){__extends(PrismaticJoint2,_super);function PrismaticJoint2(def,bodyA,bodyB,anchor,axis){var _this=this;if(!(_this instanceof PrismaticJoint2)){return new PrismaticJoint2(def,bodyA,bodyB,anchor,axis)}def=options(def,DEFAULTS$7);_this=_super.call(this,def,bodyA,bodyB)||this;bodyA=_this.m_bodyA;bodyB=_this.m_bodyB;_this.m_type=PrismaticJoint2.TYPE;_this.m_localAnchorA=Vec2.clone(anchor?bodyA.getLocalPoint(anchor):def.localAnchorA||Vec2.zero());_this.m_localAnchorB=Vec2.clone(anchor?bodyB.getLocalPoint(anchor):def.localAnchorB||Vec2.zero());_this.m_localXAxisA=Vec2.clone(axis?bodyA.getLocalVector(axis):def.localAxisA||Vec2.neo(1,0));_this.m_localXAxisA.normalize();_this.m_localYAxisA=Vec2.crossNumVec2(1,_this.m_localXAxisA);_this.m_referenceAngle=Number.isFinite(def.referenceAngle)?def.referenceAngle:bodyB.getAngle()-bodyA.getAngle();_this.m_impulse=new Vec3;_this.m_motorMass=0;_this.m_motorImpulse=0;_this.m_lowerTranslation=def.lowerTranslation;_this.m_upperTranslation=def.upperTranslation;_this.m_maxMotorForce=def.maxMotorForce;_this.m_motorSpeed=def.motorSpeed;_this.m_enableLimit=def.enableLimit;_this.m_enableMotor=def.enableMotor;_this.m_limitState=LimitState$1.inactiveLimit;_this.m_axis=Vec2.zero();_this.m_perp=Vec2.zero();_this.m_K=new Mat33;return _this}PrismaticJoint2.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,lowerTranslation:this.m_lowerTranslation,upperTranslation:this.m_upperTranslation,maxMotorForce:this.m_maxMotorForce,motorSpeed:this.m_motorSpeed,enableLimit:this.m_enableLimit,enableMotor:this.m_enableMotor,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,localAxisA:this.m_localXAxisA,referenceAngle:this.m_referenceAngle}};PrismaticJoint2._deserialize=function(data,world,restore){data=__assign({},data);data.bodyA=restore(Body,data.bodyA,world);data.bodyB=restore(Body,data.bodyB,world);data.localAxisA=Vec2.clone(data.localAxisA);var joint=new PrismaticJoint2(data);return joint};PrismaticJoint2.prototype._reset=function(def){if(def.anchorA){this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA))}else if(def.localAnchorA){this.m_localAnchorA.setVec2(def.localAnchorA)}if(def.anchorB){this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB))}else if(def.localAnchorB){this.m_localAnchorB.setVec2(def.localAnchorB)}if(def.localAxisA){this.m_localXAxisA.setVec2(def.localAxisA);this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1,def.localAxisA))}if(Number.isFinite(def.referenceAngle)){this.m_referenceAngle=def.referenceAngle}if(typeof def.enableLimit!=="undefined"){this.m_enableLimit=!!def.enableLimit}if(Number.isFinite(def.lowerTranslation)){this.m_lowerTranslation=def.lowerTranslation}if(Number.isFinite(def.upperTranslation)){this.m_upperTranslation=def.upperTranslation}if(typeof def.enableMotor!=="undefined"){this.m_enableMotor=!!def.enableMotor}if(Number.isFinite(def.maxMotorForce)){this.m_maxMotorForce=def.maxMotorForce}if(Number.isFinite(def.motorSpeed)){this.m_motorSpeed=def.motorSpeed}};PrismaticJoint2.prototype.getLocalAnchorA=function(){return this.m_localAnchorA};PrismaticJoint2.prototype.getLocalAnchorB=function(){return this.m_localAnchorB};PrismaticJoint2.prototype.getLocalAxisA=function(){return this.m_localXAxisA};PrismaticJoint2.prototype.getReferenceAngle=function(){return this.m_referenceAngle};PrismaticJoint2.prototype.getJointTranslation=function(){var pA2=this.m_bodyA.getWorldPoint(this.m_localAnchorA);var pB2=this.m_bodyB.getWorldPoint(this.m_localAnchorB);var d2=Vec2.sub(pB2,pA2);var axis=this.m_bodyA.getWorldVector(this.m_localXAxisA);var translation2=Vec2.dot(d2,axis);return translation2};PrismaticJoint2.prototype.getJointSpeed=function(){var bA=this.m_bodyA;var bB=this.m_bodyB;var rA2=Rot.mulVec2(bA.m_xf.q,Vec2.sub(this.m_localAnchorA,bA.m_sweep.localCenter));var rB2=Rot.mulVec2(bB.m_xf.q,Vec2.sub(this.m_localAnchorB,bB.m_sweep.localCenter));var p1=Vec2.add(bA.m_sweep.c,rA2);var p2=Vec2.add(bB.m_sweep.c,rB2);var d2=Vec2.sub(p2,p1);var axis=Rot.mulVec2(bA.m_xf.q,this.m_localXAxisA);var vA2=bA.m_linearVelocity;var vB2=bB.m_linearVelocity;var wA=bA.m_angularVelocity;var wB=bB.m_angularVelocity;var speed=Vec2.dot(d2,Vec2.crossNumVec2(wA,axis))+Vec2.dot(axis,Vec2.sub(Vec2.addCrossNumVec2(vB2,wB,rB2),Vec2.addCrossNumVec2(vA2,wA,rA2)));return speed};PrismaticJoint2.prototype.isLimitEnabled=function(){return this.m_enableLimit};PrismaticJoint2.prototype.enableLimit=function(flag){if(flag!=this.m_enableLimit){this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_enableLimit=flag;this.m_impulse.z=0}};PrismaticJoint2.prototype.getLowerLimit=function(){return this.m_lowerTranslation};PrismaticJoint2.prototype.getUpperLimit=function(){return this.m_upperTranslation};PrismaticJoint2.prototype.setLimits=function(lower,upper){if(lower!=this.m_lowerTranslation||upper!=this.m_upperTranslation){this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_lowerTranslation=lower;this.m_upperTranslation=upper;this.m_impulse.z=0}};PrismaticJoint2.prototype.isMotorEnabled=function(){return this.m_enableMotor};PrismaticJoint2.prototype.enableMotor=function(flag){if(flag==this.m_enableMotor)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_enableMotor=flag};PrismaticJoint2.prototype.setMotorSpeed=function(speed){if(speed==this.m_motorSpeed)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_motorSpeed=speed};PrismaticJoint2.prototype.setMaxMotorForce=function(force){if(force==this.m_maxMotorForce)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_maxMotorForce=force};PrismaticJoint2.prototype.getMaxMotorForce=function(){return this.m_maxMotorForce};PrismaticJoint2.prototype.getMotorSpeed=function(){return this.m_motorSpeed};PrismaticJoint2.prototype.getMotorForce=function(inv_dt){return inv_dt*this.m_motorImpulse};PrismaticJoint2.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)};PrismaticJoint2.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)};PrismaticJoint2.prototype.getReactionForce=function(inv_dt){return Vec2.combine(this.m_impulse.x,this.m_perp,this.m_motorImpulse+this.m_impulse.z,this.m_axis).mul(inv_dt)};PrismaticJoint2.prototype.getReactionTorque=function(inv_dt){return inv_dt*this.m_impulse.y};PrismaticJoint2.prototype.initVelocityConstraints=function(step){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter;this.m_localCenterB=this.m_bodyB.m_sweep.localCenter;this.m_invMassA=this.m_bodyA.m_invMass;this.m_invMassB=this.m_bodyB.m_invMass;this.m_invIA=this.m_bodyA.m_invI;this.m_invIB=this.m_bodyB.m_invI;var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var rA2=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));var rB2=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var d2=Vec2.zero();d2.addCombine(1,cB2,1,rB2);d2.subCombine(1,cA2,1,rA2);var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;{this.m_axis=Rot.mulVec2(qA,this.m_localXAxisA);this.m_a1=Vec2.crossVec2Vec2(Vec2.add(d2,rA2),this.m_axis);this.m_a2=Vec2.crossVec2Vec2(rB2,this.m_axis);this.m_motorMass=mA+mB+iA*this.m_a1*this.m_a1+iB*this.m_a2*this.m_a2;if(this.m_motorMass>0){this.m_motorMass=1/this.m_motorMass}}{this.m_perp=Rot.mulVec2(qA,this.m_localYAxisA);this.m_s1=Vec2.crossVec2Vec2(Vec2.add(d2,rA2),this.m_perp);this.m_s2=Vec2.crossVec2Vec2(rB2,this.m_perp);Vec2.crossVec2Vec2(rA2,this.m_perp);var k11=mA+mB+iA*this.m_s1*this.m_s1+iB*this.m_s2*this.m_s2;var k12=iA*this.m_s1+iB*this.m_s2;var k13=iA*this.m_s1*this.m_a1+iB*this.m_s2*this.m_a2;var k22=iA+iB;if(k22==0){k22=1}var k23=iA*this.m_a1+iB*this.m_a2;var k33=mA+mB+iA*this.m_a1*this.m_a1+iB*this.m_a2*this.m_a2;this.m_K.ex.set(k11,k12,k13);this.m_K.ey.set(k12,k22,k23);this.m_K.ez.set(k13,k23,k33)}if(this.m_enableLimit){var jointTranslation=Vec2.dot(this.m_axis,d2);if(math_abs$3(this.m_upperTranslation-this.m_lowerTranslation)<2*SettingsInternal.linearSlop){this.m_limitState=LimitState$1.equalLimits}else if(jointTranslation<=this.m_lowerTranslation){if(this.m_limitState!=LimitState$1.atLowerLimit){this.m_limitState=LimitState$1.atLowerLimit;this.m_impulse.z=0}}else if(jointTranslation>=this.m_upperTranslation){if(this.m_limitState!=LimitState$1.atUpperLimit){this.m_limitState=LimitState$1.atUpperLimit;this.m_impulse.z=0}}else{this.m_limitState=LimitState$1.inactiveLimit;this.m_impulse.z=0}}else{this.m_limitState=LimitState$1.inactiveLimit;this.m_impulse.z=0}if(this.m_enableMotor==false){this.m_motorImpulse=0}if(step.warmStarting){this.m_impulse.mul(step.dtRatio);this.m_motorImpulse*=step.dtRatio;var P3=Vec2.combine(this.m_impulse.x,this.m_perp,this.m_motorImpulse+this.m_impulse.z,this.m_axis);var LA=this.m_impulse.x*this.m_s1+this.m_impulse.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_a1;var LB=this.m_impulse.x*this.m_s2+this.m_impulse.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_a2;vA2.subMul(mA,P3);wA-=iA*LA;vB2.addMul(mB,P3);wB+=iB*LB}else{this.m_impulse.setZero();this.m_motorImpulse=0}this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB};PrismaticJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;if(this.m_enableMotor&&this.m_limitState!=LimitState$1.equalLimits){var Cdot=Vec2.dot(this.m_axis,Vec2.sub(vB2,vA2))+this.m_a2*wB-this.m_a1*wA;var impulse=this.m_motorMass*(this.m_motorSpeed-Cdot);var oldImpulse=this.m_motorImpulse;var maxImpulse=step.dt*this.m_maxMotorForce;this.m_motorImpulse=clamp(this.m_motorImpulse+impulse,-maxImpulse,maxImpulse);impulse=this.m_motorImpulse-oldImpulse;var P3=Vec2.mulNumVec2(impulse,this.m_axis);var LA=impulse*this.m_a1;var LB=impulse*this.m_a2;vA2.subMul(mA,P3);wA-=iA*LA;vB2.addMul(mB,P3);wB+=iB*LB}var Cdot1=Vec2.zero();Cdot1.x+=Vec2.dot(this.m_perp,vB2)+this.m_s2*wB;Cdot1.x-=Vec2.dot(this.m_perp,vA2)+this.m_s1*wA;Cdot1.y=wB-wA;if(this.m_enableLimit&&this.m_limitState!=LimitState$1.inactiveLimit){var Cdot2=0;Cdot2+=Vec2.dot(this.m_axis,vB2)+this.m_a2*wB;Cdot2-=Vec2.dot(this.m_axis,vA2)+this.m_a1*wA;var Cdot=new Vec3(Cdot1.x,Cdot1.y,Cdot2);var f1=Vec3.clone(this.m_impulse);var df=this.m_K.solve33(Vec3.neg(Cdot));this.m_impulse.add(df);if(this.m_limitState==LimitState$1.atLowerLimit){this.m_impulse.z=math_max(this.m_impulse.z,0)}else if(this.m_limitState==LimitState$1.atUpperLimit){this.m_impulse.z=math_min$2(this.m_impulse.z,0)}var b2=Vec2.combine(-1,Cdot1,-(this.m_impulse.z-f1.z),Vec2.neo(this.m_K.ez.x,this.m_K.ez.y));var f2r=Vec2.add(this.m_K.solve22(b2),Vec2.neo(f1.x,f1.y));this.m_impulse.x=f2r.x;this.m_impulse.y=f2r.y;df=Vec3.sub(this.m_impulse,f1);var P3=Vec2.combine(df.x,this.m_perp,df.z,this.m_axis);var LA=df.x*this.m_s1+df.y+df.z*this.m_a1;var LB=df.x*this.m_s2+df.y+df.z*this.m_a2;vA2.subMul(mA,P3);wA-=iA*LA;vB2.addMul(mB,P3);wB+=iB*LB}else{var df=this.m_K.solve22(Vec2.neg(Cdot1));this.m_impulse.x+=df.x;this.m_impulse.y+=df.y;var P3=Vec2.mulNumVec2(df.x,this.m_perp);var LA=df.x*this.m_s1+df.y;var LB=df.x*this.m_s2+df.y;vA2.subMul(mA,P3);wA-=iA*LA;vB2.addMul(mB,P3);wB+=iB*LB}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};PrismaticJoint2.prototype.solvePositionConstraints=function(step){var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var rA2=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));var rB2=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var d2=Vec2.sub(Vec2.add(cB2,rB2),Vec2.add(cA2,rA2));var axis=Rot.mulVec2(qA,this.m_localXAxisA);var a1=Vec2.crossVec2Vec2(Vec2.add(d2,rA2),axis);var a2=Vec2.crossVec2Vec2(rB2,axis);var perp2=Rot.mulVec2(qA,this.m_localYAxisA);var s1=Vec2.crossVec2Vec2(Vec2.add(d2,rA2),perp2);var s2=Vec2.crossVec2Vec2(rB2,perp2);var impulse=new Vec3;var C1=Vec2.zero();C1.x=Vec2.dot(perp2,d2);C1.y=aB-aA-this.m_referenceAngle;var linearError=math_abs$3(C1.x);var angularError=math_abs$3(C1.y);var linearSlop=SettingsInternal.linearSlop;var maxLinearCorrection=SettingsInternal.maxLinearCorrection;var active=false;var C2=0;if(this.m_enableLimit){var translation2=Vec2.dot(axis,d2);if(math_abs$3(this.m_upperTranslation-this.m_lowerTranslation)<2*linearSlop){C2=clamp(translation2,-maxLinearCorrection,maxLinearCorrection);linearError=math_max(linearError,math_abs$3(translation2));active=true}else if(translation2<=this.m_lowerTranslation){C2=clamp(translation2-this.m_lowerTranslation+linearSlop,-maxLinearCorrection,0);linearError=Math.max(linearError,this.m_lowerTranslation-translation2);active=true}else if(translation2>=this.m_upperTranslation){C2=clamp(translation2-this.m_upperTranslation-linearSlop,0,maxLinearCorrection);linearError=Math.max(linearError,translation2-this.m_upperTranslation);active=true}}if(active){var k11=mA+mB+iA*s1*s1+iB*s2*s2;var k12=iA*s1+iB*s2;var k13=iA*s1*a1+iB*s2*a2;var k22=iA+iB;if(k22==0){k22=1}var k23=iA*a1+iB*a2;var k33=mA+mB+iA*a1*a1+iB*a2*a2;var K=new Mat33;K.ex.set(k11,k12,k13);K.ey.set(k12,k22,k23);K.ez.set(k13,k23,k33);var C=new Vec3;C.x=C1.x;C.y=C1.y;C.z=C2;impulse=K.solve33(Vec3.neg(C))}else{var k11=mA+mB+iA*s1*s1+iB*s2*s2;var k12=iA*s1+iB*s2;var k22=iA+iB;if(k22==0){k22=1}var K=new Mat22;K.ex.setNum(k11,k12);K.ey.setNum(k12,k22);var impulse1=K.solve(Vec2.neg(C1));impulse.x=impulse1.x;impulse.y=impulse1.y;impulse.z=0}var P3=Vec2.combine(impulse.x,perp2,impulse.z,axis);var LA=impulse.x*s1+impulse.y+impulse.z*a1;var LB=impulse.x*s2+impulse.y+impulse.z*a2;cA2.subMul(mA,P3);aA-=iA*LA;cB2.addMul(mB,P3);aB+=iB*LB;this.m_bodyA.c_position.c=cA2;this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c=cB2;this.m_bodyB.c_position.a=aB;return linearError<=SettingsInternal.linearSlop&&angularError<=SettingsInternal.angularSlop};PrismaticJoint2.TYPE="prismatic-joint";return PrismaticJoint2}(Joint);var DEFAULTS$6={ratio:1};var GearJoint=function(_super){__extends(GearJoint2,_super);function GearJoint2(def,bodyA,bodyB,joint1,joint2,ratio){var _this=this;if(!(_this instanceof GearJoint2)){return new GearJoint2(def,bodyA,bodyB,joint1,joint2,ratio)}def=options(def,DEFAULTS$6);_this=_super.call(this,def,bodyA,bodyB)||this;bodyA=_this.m_bodyA;bodyB=_this.m_bodyB;_this.m_type=GearJoint2.TYPE;_this.m_joint1=joint1?joint1:def.joint1;_this.m_joint2=joint2?joint2:def.joint2;_this.m_ratio=Number.isFinite(ratio)?ratio:def.ratio;_this.m_type1=_this.m_joint1.getType();_this.m_type2=_this.m_joint2.getType();var coordinateA;var coordinateB;_this.m_bodyC=_this.m_joint1.getBodyA();_this.m_bodyA=_this.m_joint1.getBodyB();var xfA2=_this.m_bodyA.m_xf;var aA=_this.m_bodyA.m_sweep.a;var xfC=_this.m_bodyC.m_xf;var aC=_this.m_bodyC.m_sweep.a;if(_this.m_type1===RevoluteJoint.TYPE){var revolute=_this.m_joint1;_this.m_localAnchorC=revolute.m_localAnchorA;_this.m_localAnchorA=revolute.m_localAnchorB;_this.m_referenceAngleA=revolute.m_referenceAngle;_this.m_localAxisC=Vec2.zero();coordinateA=aA-aC-_this.m_referenceAngleA}else{var prismatic=_this.m_joint1;_this.m_localAnchorC=prismatic.m_localAnchorA;_this.m_localAnchorA=prismatic.m_localAnchorB;_this.m_referenceAngleA=prismatic.m_referenceAngle;_this.m_localAxisC=prismatic.m_localXAxisA;var pC=_this.m_localAnchorC;var pA2=Rot.mulTVec2(xfC.q,Vec2.add(Rot.mulVec2(xfA2.q,_this.m_localAnchorA),Vec2.sub(xfA2.p,xfC.p)));coordinateA=Vec2.dot(pA2,_this.m_localAxisC)-Vec2.dot(pC,_this.m_localAxisC)}_this.m_bodyD=_this.m_joint2.getBodyA();_this.m_bodyB=_this.m_joint2.getBodyB();var xfB2=_this.m_bodyB.m_xf;var aB=_this.m_bodyB.m_sweep.a;var xfD=_this.m_bodyD.m_xf;var aD=_this.m_bodyD.m_sweep.a;if(_this.m_type2===RevoluteJoint.TYPE){var revolute=_this.m_joint2;_this.m_localAnchorD=revolute.m_localAnchorA;_this.m_localAnchorB=revolute.m_localAnchorB;_this.m_referenceAngleB=revolute.m_referenceAngle;_this.m_localAxisD=Vec2.zero();coordinateB=aB-aD-_this.m_referenceAngleB}else{var prismatic=_this.m_joint2;_this.m_localAnchorD=prismatic.m_localAnchorA;_this.m_localAnchorB=prismatic.m_localAnchorB;_this.m_referenceAngleB=prismatic.m_referenceAngle;_this.m_localAxisD=prismatic.m_localXAxisA;var pD=_this.m_localAnchorD;var pB2=Rot.mulTVec2(xfD.q,Vec2.add(Rot.mulVec2(xfB2.q,_this.m_localAnchorB),Vec2.sub(xfB2.p,xfD.p)));coordinateB=Vec2.dot(pB2,_this.m_localAxisD)-Vec2.dot(pD,_this.m_localAxisD)}_this.m_constant=coordinateA+_this.m_ratio*coordinateB;_this.m_impulse=0;return _this}GearJoint2.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,joint1:this.m_joint1,joint2:this.m_joint2,ratio:this.m_ratio}};GearJoint2._deserialize=function(data,world,restore){data=__assign({},data);data.bodyA=restore(Body,data.bodyA,world);data.bodyB=restore(Body,data.bodyB,world);data.joint1=restore(Joint,data.joint1,world);data.joint2=restore(Joint,data.joint2,world);var joint=new GearJoint2(data);return joint};GearJoint2.prototype._reset=function(def){if(Number.isFinite(def.ratio)){this.m_ratio=def.ratio}};GearJoint2.prototype.getJoint1=function(){return this.m_joint1};GearJoint2.prototype.getJoint2=function(){return this.m_joint2};GearJoint2.prototype.setRatio=function(ratio){this.m_ratio=ratio};GearJoint2.prototype.getRatio=function(){return this.m_ratio};GearJoint2.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)};GearJoint2.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)};GearJoint2.prototype.getReactionForce=function(inv_dt){return Vec2.mulNumVec2(this.m_impulse,this.m_JvAC).mul(inv_dt)};GearJoint2.prototype.getReactionTorque=function(inv_dt){var L=this.m_impulse*this.m_JwA;return inv_dt*L};GearJoint2.prototype.initVelocityConstraints=function(step){this.m_lcA=this.m_bodyA.m_sweep.localCenter;this.m_lcB=this.m_bodyB.m_sweep.localCenter;this.m_lcC=this.m_bodyC.m_sweep.localCenter;this.m_lcD=this.m_bodyD.m_sweep.localCenter;this.m_mA=this.m_bodyA.m_invMass;this.m_mB=this.m_bodyB.m_invMass;this.m_mC=this.m_bodyC.m_invMass;this.m_mD=this.m_bodyD.m_invMass;this.m_iA=this.m_bodyA.m_invI;this.m_iB=this.m_bodyB.m_invI;this.m_iC=this.m_bodyC.m_invI;this.m_iD=this.m_bodyD.m_invI;var aA=this.m_bodyA.c_position.a;var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var aB=this.m_bodyB.c_position.a;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var aC=this.m_bodyC.c_position.a;var vC=this.m_bodyC.c_velocity.v;var wC=this.m_bodyC.c_velocity.w;var aD=this.m_bodyD.c_position.a;var vD=this.m_bodyD.c_velocity.v;var wD=this.m_bodyD.c_velocity.w;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var qC=Rot.neo(aC);var qD=Rot.neo(aD);this.m_mass=0;if(this.m_type1==RevoluteJoint.TYPE){this.m_JvAC=Vec2.zero();this.m_JwA=1;this.m_JwC=1;this.m_mass+=this.m_iA+this.m_iC}else{var u=Rot.mulVec2(qC,this.m_localAxisC);var rC=Rot.mulSub(qC,this.m_localAnchorC,this.m_lcC);var rA2=Rot.mulSub(qA,this.m_localAnchorA,this.m_lcA);this.m_JvAC=u;this.m_JwC=Vec2.crossVec2Vec2(rC,u);this.m_JwA=Vec2.crossVec2Vec2(rA2,u);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}if(this.m_type2==RevoluteJoint.TYPE){this.m_JvBD=Vec2.zero();this.m_JwB=this.m_ratio;this.m_JwD=this.m_ratio;this.m_mass+=this.m_ratio*this.m_ratio*(this.m_iB+this.m_iD)}else{var u=Rot.mulVec2(qD,this.m_localAxisD);var rD=Rot.mulSub(qD,this.m_localAnchorD,this.m_lcD);var rB2=Rot.mulSub(qB,this.m_localAnchorB,this.m_lcB);this.m_JvBD=Vec2.mulNumVec2(this.m_ratio,u);this.m_JwD=this.m_ratio*Vec2.crossVec2Vec2(rD,u);this.m_JwB=this.m_ratio*Vec2.crossVec2Vec2(rB2,u);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}this.m_mass=this.m_mass>0?1/this.m_mass:0;if(step.warmStarting){vA2.addMul(this.m_mA*this.m_impulse,this.m_JvAC);wA+=this.m_iA*this.m_impulse*this.m_JwA;vB2.addMul(this.m_mB*this.m_impulse,this.m_JvBD);wB+=this.m_iB*this.m_impulse*this.m_JwB;vC.subMul(this.m_mC*this.m_impulse,this.m_JvAC);wC-=this.m_iC*this.m_impulse*this.m_JwC;vD.subMul(this.m_mD*this.m_impulse,this.m_JvBD);wD-=this.m_iD*this.m_impulse*this.m_JwD}else{this.m_impulse=0}this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB;this.m_bodyC.c_velocity.v.setVec2(vC);this.m_bodyC.c_velocity.w=wC;this.m_bodyD.c_velocity.v.setVec2(vD);this.m_bodyD.c_velocity.w=wD};GearJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var vC=this.m_bodyC.c_velocity.v;var wC=this.m_bodyC.c_velocity.w;var vD=this.m_bodyD.c_velocity.v;var wD=this.m_bodyD.c_velocity.w;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);Cdot+=this.m_JwA*wA-this.m_JwC*wC+(this.m_JwB*wB-this.m_JwD*wD);var impulse=-this.m_mass*Cdot;this.m_impulse+=impulse;vA2.addMul(this.m_mA*impulse,this.m_JvAC);wA+=this.m_iA*impulse*this.m_JwA;vB2.addMul(this.m_mB*impulse,this.m_JvBD);wB+=this.m_iB*impulse*this.m_JwB;vC.subMul(this.m_mC*impulse,this.m_JvAC);wC-=this.m_iC*impulse*this.m_JwC;vD.subMul(this.m_mD*impulse,this.m_JvBD);wD-=this.m_iD*impulse*this.m_JwD;this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB;this.m_bodyC.c_velocity.v.setVec2(vC);this.m_bodyC.c_velocity.w=wC;this.m_bodyD.c_velocity.v.setVec2(vD);this.m_bodyD.c_velocity.w=wD};GearJoint2.prototype.solvePositionConstraints=function(step){var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var cC=this.m_bodyC.c_position.c;var aC=this.m_bodyC.c_position.a;var cD=this.m_bodyD.c_position.c;var aD=this.m_bodyD.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var qC=Rot.neo(aC);var qD=Rot.neo(aD);var linearError=0;var coordinateA;var coordinateB;var JvAC;var JvBD;var JwA;var JwB;var JwC;var JwD;var mass=0;if(this.m_type1==RevoluteJoint.TYPE){JvAC=Vec2.zero();JwA=1;JwC=1;mass+=this.m_iA+this.m_iC;coordinateA=aA-aC-this.m_referenceAngleA}else{var u=Rot.mulVec2(qC,this.m_localAxisC);var rC=Rot.mulSub(qC,this.m_localAnchorC,this.m_lcC);var rA2=Rot.mulSub(qA,this.m_localAnchorA,this.m_lcA);JvAC=u;JwC=Vec2.crossVec2Vec2(rC,u);JwA=Vec2.crossVec2Vec2(rA2,u);mass+=this.m_mC+this.m_mA+this.m_iC*JwC*JwC+this.m_iA*JwA*JwA;var pC=Vec2.sub(this.m_localAnchorC,this.m_lcC);var pA2=Rot.mulTVec2(qC,Vec2.add(rA2,Vec2.sub(cA2,cC)));coordinateA=Vec2.dot(Vec2.sub(pA2,pC),this.m_localAxisC)}if(this.m_type2==RevoluteJoint.TYPE){JvBD=Vec2.zero();JwB=this.m_ratio;JwD=this.m_ratio;mass+=this.m_ratio*this.m_ratio*(this.m_iB+this.m_iD);coordinateB=aB-aD-this.m_referenceAngleB}else{var u=Rot.mulVec2(qD,this.m_localAxisD);var rD=Rot.mulSub(qD,this.m_localAnchorD,this.m_lcD);var rB2=Rot.mulSub(qB,this.m_localAnchorB,this.m_lcB);JvBD=Vec2.mulNumVec2(this.m_ratio,u);JwD=this.m_ratio*Vec2.crossVec2Vec2(rD,u);JwB=this.m_ratio*Vec2.crossVec2Vec2(rB2,u);mass+=this.m_ratio*this.m_ratio*(this.m_mD+this.m_mB)+this.m_iD*JwD*JwD+this.m_iB*JwB*JwB;var pD=Vec2.sub(this.m_localAnchorD,this.m_lcD);var pB2=Rot.mulTVec2(qD,Vec2.add(rB2,Vec2.sub(cB2,cD)));coordinateB=Vec2.dot(pB2,this.m_localAxisD)-Vec2.dot(pD,this.m_localAxisD)}var C=coordinateA+this.m_ratio*coordinateB-this.m_constant;var impulse=0;if(mass>0){impulse=-C/mass}cA2.addMul(this.m_mA*impulse,JvAC);aA+=this.m_iA*impulse*JwA;cB2.addMul(this.m_mB*impulse,JvBD);aB+=this.m_iB*impulse*JwB;cC.subMul(this.m_mC*impulse,JvAC);aC-=this.m_iC*impulse*JwC;cD.subMul(this.m_mD*impulse,JvBD);aD-=this.m_iD*impulse*JwD;this.m_bodyA.c_position.c.setVec2(cA2);this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c.setVec2(cB2);this.m_bodyB.c_position.a=aB;this.m_bodyC.c_position.c.setVec2(cC);this.m_bodyC.c_position.a=aC;this.m_bodyD.c_position.c.setVec2(cD);this.m_bodyD.c_position.a=aD;return linearError0){this.m_angularMass=1/this.m_angularMass}this.m_linearError=Vec2.zero();this.m_linearError.addCombine(1,cB2,1,this.m_rB);this.m_linearError.subCombine(1,cA2,1,this.m_rA);this.m_angularError=aB-aA-this.m_angularOffset;if(step.warmStarting){this.m_linearImpulse.mul(step.dtRatio);this.m_angularImpulse*=step.dtRatio;var P3=Vec2.neo(this.m_linearImpulse.x,this.m_linearImpulse.y);vA2.subMul(mA,P3);wA-=iA*(Vec2.crossVec2Vec2(this.m_rA,P3)+this.m_angularImpulse);vB2.addMul(mB,P3);wB+=iB*(Vec2.crossVec2Vec2(this.m_rB,P3)+this.m_angularImpulse)}else{this.m_linearImpulse.setZero();this.m_angularImpulse=0}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};MotorJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var h=step.dt;var inv_h=step.inv_dt;{var Cdot=wB-wA+inv_h*this.m_correctionFactor*this.m_angularError;var impulse=-this.m_angularMass*Cdot;var oldImpulse=this.m_angularImpulse;var maxImpulse=h*this.m_maxTorque;this.m_angularImpulse=clamp(this.m_angularImpulse+impulse,-maxImpulse,maxImpulse);impulse=this.m_angularImpulse-oldImpulse;wA-=iA*impulse;wB+=iB*impulse}{var Cdot=Vec2.zero();Cdot.addCombine(1,vB2,1,Vec2.crossNumVec2(wB,this.m_rB));Cdot.subCombine(1,vA2,1,Vec2.crossNumVec2(wA,this.m_rA));Cdot.addMul(inv_h*this.m_correctionFactor,this.m_linearError);var impulse=Vec2.neg(Mat22.mulVec2(this.m_linearMass,Cdot));var oldImpulse=Vec2.clone(this.m_linearImpulse);this.m_linearImpulse.add(impulse);var maxImpulse=h*this.m_maxForce;this.m_linearImpulse.clamp(maxImpulse);impulse=Vec2.sub(this.m_linearImpulse,oldImpulse);vA2.subMul(mA,impulse);wA-=iA*Vec2.crossVec2Vec2(this.m_rA,impulse);vB2.addMul(mB,impulse);wB+=iB*Vec2.crossVec2Vec2(this.m_rB,impulse)}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};MotorJoint2.prototype.solvePositionConstraints=function(step){return true};MotorJoint2.TYPE="motor-joint";return MotorJoint2}(Joint);var math_PI$2=Math.PI;var DEFAULTS$4={maxForce:0,frequencyHz:5,dampingRatio:.7};var MouseJoint=function(_super){__extends(MouseJoint2,_super);function MouseJoint2(def,bodyA,bodyB,target){var _this=this;if(!(_this instanceof MouseJoint2)){return new MouseJoint2(def,bodyA,bodyB,target)}def=options(def,DEFAULTS$4);_this=_super.call(this,def,bodyA,bodyB)||this;bodyA=_this.m_bodyA;bodyB=_this.m_bodyB;_this.m_type=MouseJoint2.TYPE;if(Vec2.isValid(target)){_this.m_targetA=Vec2.clone(target)}else if(Vec2.isValid(def.target)){_this.m_targetA=Vec2.clone(def.target)}else{_this.m_targetA=Vec2.zero()}_this.m_localAnchorB=Transform.mulTVec2(bodyB.getTransform(),_this.m_targetA);_this.m_maxForce=def.maxForce;_this.m_impulse=Vec2.zero();_this.m_frequencyHz=def.frequencyHz;_this.m_dampingRatio=def.dampingRatio;_this.m_beta=0;_this.m_gamma=0;_this.m_rB=Vec2.zero();_this.m_localCenterB=Vec2.zero();_this.m_invMassB=0;_this.m_invIB=0;_this.m_mass=new Mat22;_this.m_C=Vec2.zero();return _this}MouseJoint2.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,target:this.m_targetA,maxForce:this.m_maxForce,frequencyHz:this.m_frequencyHz,dampingRatio:this.m_dampingRatio,_localAnchorB:this.m_localAnchorB}};MouseJoint2._deserialize=function(data,world,restore){data=__assign({},data);data.bodyA=restore(Body,data.bodyA,world);data.bodyB=restore(Body,data.bodyB,world);data.target=Vec2.clone(data.target);var joint=new MouseJoint2(data);if(data._localAnchorB){joint.m_localAnchorB=data._localAnchorB}return joint};MouseJoint2.prototype._reset=function(def){if(Number.isFinite(def.maxForce)){this.m_maxForce=def.maxForce}if(Number.isFinite(def.frequencyHz)){this.m_frequencyHz=def.frequencyHz}if(Number.isFinite(def.dampingRatio)){this.m_dampingRatio=def.dampingRatio}};MouseJoint2.prototype.setTarget=function(target){if(Vec2.areEqual(target,this.m_targetA))return;this.m_bodyB.setAwake(true);this.m_targetA.set(target)};MouseJoint2.prototype.getTarget=function(){return this.m_targetA};MouseJoint2.prototype.setMaxForce=function(force){this.m_maxForce=force};MouseJoint2.prototype.getMaxForce=function(){return this.m_maxForce};MouseJoint2.prototype.setFrequency=function(hz){this.m_frequencyHz=hz};MouseJoint2.prototype.getFrequency=function(){return this.m_frequencyHz};MouseJoint2.prototype.setDampingRatio=function(ratio){this.m_dampingRatio=ratio};MouseJoint2.prototype.getDampingRatio=function(){return this.m_dampingRatio};MouseJoint2.prototype.getAnchorA=function(){return Vec2.clone(this.m_targetA)};MouseJoint2.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)};MouseJoint2.prototype.getReactionForce=function(inv_dt){return Vec2.mulNumVec2(inv_dt,this.m_impulse)};MouseJoint2.prototype.getReactionTorque=function(inv_dt){return inv_dt*0};MouseJoint2.prototype.shiftOrigin=function(newOrigin){this.m_targetA.sub(newOrigin)};MouseJoint2.prototype.initVelocityConstraints=function(step){this.m_localCenterB=this.m_bodyB.m_sweep.localCenter;this.m_invMassB=this.m_bodyB.m_invMass;this.m_invIB=this.m_bodyB.m_invI;var position=this.m_bodyB.c_position;var velocity=this.m_bodyB.c_velocity;var cB2=position.c;var aB=position.a;var vB2=velocity.v;var wB=velocity.w;var qB=Rot.neo(aB);var mass=this.m_bodyB.getMass();var omega=2*math_PI$2*this.m_frequencyHz;var d2=2*mass*this.m_dampingRatio*omega;var k=mass*(omega*omega);var h=step.dt;this.m_gamma=h*(d2+h*k);if(this.m_gamma!=0){this.m_gamma=1/this.m_gamma}this.m_beta=h*k*this.m_gamma;this.m_rB=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var K=new Mat22;K.ex.x=this.m_invMassB+this.m_invIB*this.m_rB.y*this.m_rB.y+this.m_gamma;K.ex.y=-this.m_invIB*this.m_rB.x*this.m_rB.y;K.ey.x=K.ex.y;K.ey.y=this.m_invMassB+this.m_invIB*this.m_rB.x*this.m_rB.x+this.m_gamma;this.m_mass=K.getInverse();this.m_C.setVec2(cB2);this.m_C.addCombine(1,this.m_rB,-1,this.m_targetA);this.m_C.mul(this.m_beta);wB*=.98;if(step.warmStarting){this.m_impulse.mul(step.dtRatio);vB2.addMul(this.m_invMassB,this.m_impulse);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,this.m_impulse)}else{this.m_impulse.setZero()}velocity.v.setVec2(vB2);velocity.w=wB};MouseJoint2.prototype.solveVelocityConstraints=function(step){var velocity=this.m_bodyB.c_velocity;var vB2=Vec2.clone(velocity.v);var wB=velocity.w;var Cdot=Vec2.crossNumVec2(wB,this.m_rB);Cdot.add(vB2);Cdot.addCombine(1,this.m_C,this.m_gamma,this.m_impulse);Cdot.neg();var impulse=Mat22.mulVec2(this.m_mass,Cdot);var oldImpulse=Vec2.clone(this.m_impulse);this.m_impulse.add(impulse);var maxImpulse=step.dt*this.m_maxForce;this.m_impulse.clamp(maxImpulse);impulse=Vec2.sub(this.m_impulse,oldImpulse);vB2.addMul(this.m_invMassB,impulse);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,impulse);velocity.v.setVec2(vB2);velocity.w=wB};MouseJoint2.prototype.solvePositionConstraints=function(step){return true};MouseJoint2.TYPE="mouse-joint";return MouseJoint2}(Joint);var math_abs$2=Math.abs;var DEFAULTS$3={collideConnected:true};var PulleyJoint=function(_super){__extends(PulleyJoint2,_super);function PulleyJoint2(def,bodyA,bodyB,groundA,groundB,anchorA,anchorB,ratio){var _this=this;if(!(_this instanceof PulleyJoint2)){return new PulleyJoint2(def,bodyA,bodyB,groundA,groundB,anchorA,anchorB,ratio)}def=options(def,DEFAULTS$3);_this=_super.call(this,def,bodyA,bodyB)||this;bodyA=_this.m_bodyA;bodyB=_this.m_bodyB;_this.m_type=PulleyJoint2.TYPE;_this.m_groundAnchorA=Vec2.clone(groundA?groundA:def.groundAnchorA||Vec2.neo(-1,1));_this.m_groundAnchorB=Vec2.clone(groundB?groundB:def.groundAnchorB||Vec2.neo(1,1));_this.m_localAnchorA=Vec2.clone(anchorA?bodyA.getLocalPoint(anchorA):def.localAnchorA||Vec2.neo(-1,0));_this.m_localAnchorB=Vec2.clone(anchorB?bodyB.getLocalPoint(anchorB):def.localAnchorB||Vec2.neo(1,0));_this.m_lengthA=Number.isFinite(def.lengthA)?def.lengthA:Vec2.distance(anchorA,groundA);_this.m_lengthB=Number.isFinite(def.lengthB)?def.lengthB:Vec2.distance(anchorB,groundB);_this.m_ratio=Number.isFinite(ratio)?ratio:def.ratio;_this.m_constant=_this.m_lengthA+_this.m_ratio*_this.m_lengthB;_this.m_impulse=0;return _this}PulleyJoint2.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,groundAnchorA:this.m_groundAnchorA,groundAnchorB:this.m_groundAnchorB,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,lengthA:this.m_lengthA,lengthB:this.m_lengthB,ratio:this.m_ratio}};PulleyJoint2._deserialize=function(data,world,restore){data=__assign({},data);data.bodyA=restore(Body,data.bodyA,world);data.bodyB=restore(Body,data.bodyB,world);var joint=new PulleyJoint2(data);return joint};PulleyJoint2.prototype._reset=function(def){if(Vec2.isValid(def.groundAnchorA)){this.m_groundAnchorA.set(def.groundAnchorA)}if(Vec2.isValid(def.groundAnchorB)){this.m_groundAnchorB.set(def.groundAnchorB)}if(Vec2.isValid(def.localAnchorA)){this.m_localAnchorA.set(def.localAnchorA)}else if(Vec2.isValid(def.anchorA)){this.m_localAnchorA.set(this.m_bodyA.getLocalPoint(def.anchorA))}if(Vec2.isValid(def.localAnchorB)){this.m_localAnchorB.set(def.localAnchorB)}else if(Vec2.isValid(def.anchorB)){this.m_localAnchorB.set(this.m_bodyB.getLocalPoint(def.anchorB))}if(Number.isFinite(def.lengthA)){this.m_lengthA=def.lengthA}if(Number.isFinite(def.lengthB)){this.m_lengthB=def.lengthB}if(Number.isFinite(def.ratio)){this.m_ratio=def.ratio}};PulleyJoint2.prototype.getGroundAnchorA=function(){return this.m_groundAnchorA};PulleyJoint2.prototype.getGroundAnchorB=function(){return this.m_groundAnchorB};PulleyJoint2.prototype.getLengthA=function(){return this.m_lengthA};PulleyJoint2.prototype.getLengthB=function(){return this.m_lengthB};PulleyJoint2.prototype.getRatio=function(){return this.m_ratio};PulleyJoint2.prototype.getCurrentLengthA=function(){var p=this.m_bodyA.getWorldPoint(this.m_localAnchorA);var s2=this.m_groundAnchorA;return Vec2.distance(p,s2)};PulleyJoint2.prototype.getCurrentLengthB=function(){var p=this.m_bodyB.getWorldPoint(this.m_localAnchorB);var s2=this.m_groundAnchorB;return Vec2.distance(p,s2)};PulleyJoint2.prototype.shiftOrigin=function(newOrigin){this.m_groundAnchorA.sub(newOrigin);this.m_groundAnchorB.sub(newOrigin)};PulleyJoint2.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)};PulleyJoint2.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)};PulleyJoint2.prototype.getReactionForce=function(inv_dt){return Vec2.mulNumVec2(this.m_impulse,this.m_uB).mul(inv_dt)};PulleyJoint2.prototype.getReactionTorque=function(inv_dt){return 0};PulleyJoint2.prototype.initVelocityConstraints=function(step){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter;this.m_localCenterB=this.m_bodyB.m_sweep.localCenter;this.m_invMassA=this.m_bodyA.m_invMass;this.m_invMassB=this.m_bodyB.m_invMass;this.m_invIA=this.m_bodyA.m_invI;this.m_invIB=this.m_bodyB.m_invI;var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var qA=Rot.neo(aA);var qB=Rot.neo(aB);this.m_rA=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));this.m_rB=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));this.m_uA=Vec2.sub(Vec2.add(cA2,this.m_rA),this.m_groundAnchorA);this.m_uB=Vec2.sub(Vec2.add(cB2,this.m_rB),this.m_groundAnchorB);var lengthA=this.m_uA.length();var lengthB=this.m_uB.length();if(lengthA>10*SettingsInternal.linearSlop){this.m_uA.mul(1/lengthA)}else{this.m_uA.setZero()}if(lengthB>10*SettingsInternal.linearSlop){this.m_uB.mul(1/lengthB)}else{this.m_uB.setZero()}var ruA=Vec2.crossVec2Vec2(this.m_rA,this.m_uA);var ruB=Vec2.crossVec2Vec2(this.m_rB,this.m_uB);var mA=this.m_invMassA+this.m_invIA*ruA*ruA;var mB=this.m_invMassB+this.m_invIB*ruB*ruB;this.m_mass=mA+this.m_ratio*this.m_ratio*mB;if(this.m_mass>0){this.m_mass=1/this.m_mass}if(step.warmStarting){this.m_impulse*=step.dtRatio;var PA=Vec2.mulNumVec2(-this.m_impulse,this.m_uA);var PB=Vec2.mulNumVec2(-this.m_ratio*this.m_impulse,this.m_uB);vA2.addMul(this.m_invMassA,PA);wA+=this.m_invIA*Vec2.crossVec2Vec2(this.m_rA,PA);vB2.addMul(this.m_invMassB,PB);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,PB)}else{this.m_impulse=0}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};PulleyJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var vpA=Vec2.add(vA2,Vec2.crossNumVec2(wA,this.m_rA));var vpB=Vec2.add(vB2,Vec2.crossNumVec2(wB,this.m_rB));var Cdot=-Vec2.dot(this.m_uA,vpA)-this.m_ratio*Vec2.dot(this.m_uB,vpB);var impulse=-this.m_mass*Cdot;this.m_impulse+=impulse;var PA=Vec2.mulNumVec2(-impulse,this.m_uA);var PB=Vec2.mulNumVec2(-this.m_ratio*impulse,this.m_uB);vA2.addMul(this.m_invMassA,PA);wA+=this.m_invIA*Vec2.crossVec2Vec2(this.m_rA,PA);vB2.addMul(this.m_invMassB,PB);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,PB);this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};PulleyJoint2.prototype.solvePositionConstraints=function(step){var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var rA2=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));var rB2=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var uA=Vec2.sub(Vec2.add(cA2,this.m_rA),this.m_groundAnchorA);var uB=Vec2.sub(Vec2.add(cB2,this.m_rB),this.m_groundAnchorB);var lengthA=uA.length();var lengthB=uB.length();if(lengthA>10*SettingsInternal.linearSlop){uA.mul(1/lengthA)}else{uA.setZero()}if(lengthB>10*SettingsInternal.linearSlop){uB.mul(1/lengthB)}else{uB.setZero()}var ruA=Vec2.crossVec2Vec2(rA2,uA);var ruB=Vec2.crossVec2Vec2(rB2,uB);var mA=this.m_invMassA+this.m_invIA*ruA*ruA;var mB=this.m_invMassB+this.m_invIB*ruB*ruB;var mass=mA+this.m_ratio*this.m_ratio*mB;if(mass>0){mass=1/mass}var C=this.m_constant-lengthA-this.m_ratio*lengthB;var linearError=math_abs$2(C);var impulse=-mass*C;var PA=Vec2.mulNumVec2(-impulse,uA);var PB=Vec2.mulNumVec2(-this.m_ratio*impulse,uB);cA2.addMul(this.m_invMassA,PA);aA+=this.m_invIA*Vec2.crossVec2Vec2(rA2,PA);cB2.addMul(this.m_invMassB,PB);aB+=this.m_invIB*Vec2.crossVec2Vec2(rB2,PB);this.m_bodyA.c_position.c=cA2;this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c=cB2;this.m_bodyB.c_position.a=aB;return linearError0){this.m_state=LimitState.atUpperLimit}else{this.m_state=LimitState.inactiveLimit}if(this.m_length>SettingsInternal.linearSlop){this.m_u.mul(1/this.m_length)}else{this.m_u.setZero();this.m_mass=0;this.m_impulse=0;return}var crA=Vec2.crossVec2Vec2(this.m_rA,this.m_u);var crB=Vec2.crossVec2Vec2(this.m_rB,this.m_u);var invMass=this.m_invMassA+this.m_invIA*crA*crA+this.m_invMassB+this.m_invIB*crB*crB;this.m_mass=invMass!=0?1/invMass:0;if(step.warmStarting){this.m_impulse*=step.dtRatio;var P3=Vec2.mulNumVec2(this.m_impulse,this.m_u);vA2.subMul(this.m_invMassA,P3);wA-=this.m_invIA*Vec2.crossVec2Vec2(this.m_rA,P3);vB2.addMul(this.m_invMassB,P3);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,P3)}else{this.m_impulse=0}this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB};RopeJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var vpA=Vec2.addCrossNumVec2(vA2,wA,this.m_rA);var vpB=Vec2.addCrossNumVec2(vB2,wB,this.m_rB);var C=this.m_length-this.m_maxLength;var Cdot=Vec2.dot(this.m_u,Vec2.sub(vpB,vpA));if(C<0){Cdot+=step.inv_dt*C}var impulse=-this.m_mass*Cdot;var oldImpulse=this.m_impulse;this.m_impulse=math_min$1(0,this.m_impulse+impulse);impulse=this.m_impulse-oldImpulse;var P3=Vec2.mulNumVec2(impulse,this.m_u);vA2.subMul(this.m_invMassA,P3);wA-=this.m_invIA*Vec2.crossVec2Vec2(this.m_rA,P3);vB2.addMul(this.m_invMassB,P3);wB+=this.m_invIB*Vec2.crossVec2Vec2(this.m_rB,P3);this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};RopeJoint2.prototype.solvePositionConstraints=function(step){var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var rA2=Rot.mulSub(qA,this.m_localAnchorA,this.m_localCenterA);var rB2=Rot.mulSub(qB,this.m_localAnchorB,this.m_localCenterB);var u=Vec2.zero();u.addCombine(1,cB2,1,rB2);u.subCombine(1,cA2,1,rA2);var length=u.normalize();var C=length-this.m_maxLength;C=clamp(C,0,SettingsInternal.maxLinearCorrection);var impulse=-this.m_mass*C;var P3=Vec2.mulNumVec2(impulse,u);cA2.subMul(this.m_invMassA,P3);aA-=this.m_invIA*Vec2.crossVec2Vec2(rA2,P3);cB2.addMul(this.m_invMassB,P3);aB+=this.m_invIB*Vec2.crossVec2Vec2(rB2,P3);this.m_bodyA.c_position.c.setVec2(cA2);this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c.setVec2(cB2);this.m_bodyB.c_position.a=aB;return length-this.m_maxLength0){K.getInverse22(this.m_mass);var invM=iA+iB;var m=invM>0?1/invM:0;var C=aB-aA-this.m_referenceAngle;var omega=2*math_PI$1*this.m_frequencyHz;var d2=2*m*this.m_dampingRatio*omega;var k=m*omega*omega;var h=step.dt;this.m_gamma=h*(d2+h*k);this.m_gamma=this.m_gamma!=0?1/this.m_gamma:0;this.m_bias=C*h*k*this.m_gamma;invM+=this.m_gamma;this.m_mass.ez.z=invM!=0?1/invM:0}else if(K.ez.z==0){K.getInverse22(this.m_mass);this.m_gamma=0;this.m_bias=0}else{K.getSymInverse33(this.m_mass);this.m_gamma=0;this.m_bias=0}if(step.warmStarting){this.m_impulse.mul(step.dtRatio);var P3=Vec2.neo(this.m_impulse.x,this.m_impulse.y);vA2.subMul(mA,P3);wA-=iA*(Vec2.crossVec2Vec2(this.m_rA,P3)+this.m_impulse.z);vB2.addMul(mB,P3);wB+=iB*(Vec2.crossVec2Vec2(this.m_rB,P3)+this.m_impulse.z)}else{this.m_impulse.setZero()}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};WeldJoint2.prototype.solveVelocityConstraints=function(step){var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;if(this.m_frequencyHz>0){var Cdot2=wB-wA;var impulse2=-this.m_mass.ez.z*(Cdot2+this.m_bias+this.m_gamma*this.m_impulse.z);this.m_impulse.z+=impulse2;wA-=iA*impulse2;wB+=iB*impulse2;var Cdot1=Vec2.zero();Cdot1.addCombine(1,vB2,1,Vec2.crossNumVec2(wB,this.m_rB));Cdot1.subCombine(1,vA2,1,Vec2.crossNumVec2(wA,this.m_rA));var impulse1=Vec2.neg(Mat33.mulVec2(this.m_mass,Cdot1));this.m_impulse.x+=impulse1.x;this.m_impulse.y+=impulse1.y;var P3=Vec2.clone(impulse1);vA2.subMul(mA,P3);wA-=iA*Vec2.crossVec2Vec2(this.m_rA,P3);vB2.addMul(mB,P3);wB+=iB*Vec2.crossVec2Vec2(this.m_rB,P3)}else{var Cdot1=Vec2.zero();Cdot1.addCombine(1,vB2,1,Vec2.crossNumVec2(wB,this.m_rB));Cdot1.subCombine(1,vA2,1,Vec2.crossNumVec2(wA,this.m_rA));var Cdot2=wB-wA;var Cdot=new Vec3(Cdot1.x,Cdot1.y,Cdot2);var impulse=Vec3.neg(Mat33.mulVec3(this.m_mass,Cdot));this.m_impulse.add(impulse);var P3=Vec2.neo(impulse.x,impulse.y);vA2.subMul(mA,P3);wA-=iA*(Vec2.crossVec2Vec2(this.m_rA,P3)+impulse.z);vB2.addMul(mB,P3);wB+=iB*(Vec2.crossVec2Vec2(this.m_rB,P3)+impulse.z)}this.m_bodyA.c_velocity.v=vA2;this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v=vB2;this.m_bodyB.c_velocity.w=wB};WeldJoint2.prototype.solvePositionConstraints=function(step){var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var rA2=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));var rB2=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var positionError;var angularError;var K=new Mat33;K.ex.x=mA+mB+rA2.y*rA2.y*iA+rB2.y*rB2.y*iB;K.ey.x=-rA2.y*rA2.x*iA-rB2.y*rB2.x*iB;K.ez.x=-rA2.y*iA-rB2.y*iB;K.ex.y=K.ey.x;K.ey.y=mA+mB+rA2.x*rA2.x*iA+rB2.x*rB2.x*iB;K.ez.y=rA2.x*iA+rB2.x*iB;K.ex.z=K.ez.x;K.ey.z=K.ez.y;K.ez.z=iA+iB;if(this.m_frequencyHz>0){var C1=Vec2.zero();C1.addCombine(1,cB2,1,rB2);C1.subCombine(1,cA2,1,rA2);positionError=C1.length();angularError=0;var P3=Vec2.neg(K.solve22(C1));cA2.subMul(mA,P3);aA-=iA*Vec2.crossVec2Vec2(rA2,P3);cB2.addMul(mB,P3);aB+=iB*Vec2.crossVec2Vec2(rB2,P3)}else{var C1=Vec2.zero();C1.addCombine(1,cB2,1,rB2);C1.subCombine(1,cA2,1,rA2);var C2=aB-aA-this.m_referenceAngle;positionError=C1.length();angularError=math_abs$1(C2);var C=new Vec3(C1.x,C1.y,C2);var impulse=new Vec3;if(K.ez.z>0){impulse=Vec3.neg(K.solve33(C))}else{var impulse2=Vec2.neg(K.solve22(C1));impulse.set(impulse2.x,impulse2.y,0)}var P3=Vec2.neo(impulse.x,impulse.y);cA2.subMul(mA,P3);aA-=iA*(Vec2.crossVec2Vec2(rA2,P3)+impulse.z);cB2.addMul(mB,P3);aB+=iB*(Vec2.crossVec2Vec2(rB2,P3)+impulse.z)}this.m_bodyA.c_position.c=cA2;this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c=cB2;this.m_bodyB.c_position.a=aB;return positionError<=SettingsInternal.linearSlop&&angularError<=SettingsInternal.angularSlop};WeldJoint2.TYPE="weld-joint";return WeldJoint2}(Joint);var math_abs=Math.abs;var math_PI=Math.PI;var DEFAULTS={enableMotor:false,maxMotorTorque:0,motorSpeed:0,frequencyHz:2,dampingRatio:.7};var WheelJoint=function(_super){__extends(WheelJoint2,_super);function WheelJoint2(def,bodyA,bodyB,anchor,axis){var _this=this;if(!(_this instanceof WheelJoint2)){return new WheelJoint2(def,bodyA,bodyB,anchor,axis)}def=options(def,DEFAULTS);_this=_super.call(this,def,bodyA,bodyB)||this;bodyA=_this.m_bodyA;bodyB=_this.m_bodyB;_this.m_ax=Vec2.zero();_this.m_ay=Vec2.zero();_this.m_type=WheelJoint2.TYPE;_this.m_localAnchorA=Vec2.clone(anchor?bodyA.getLocalPoint(anchor):def.localAnchorA||Vec2.zero());_this.m_localAnchorB=Vec2.clone(anchor?bodyB.getLocalPoint(anchor):def.localAnchorB||Vec2.zero());if(Vec2.isValid(axis)){_this.m_localXAxisA=bodyA.getLocalVector(axis)}else if(Vec2.isValid(def.localAxisA)){_this.m_localXAxisA=Vec2.clone(def.localAxisA)}else if(Vec2.isValid(def.localAxis)){_this.m_localXAxisA=Vec2.clone(def.localAxis)}else{_this.m_localXAxisA=Vec2.neo(1,0)}_this.m_localYAxisA=Vec2.crossNumVec2(1,_this.m_localXAxisA);_this.m_mass=0;_this.m_impulse=0;_this.m_motorMass=0;_this.m_motorImpulse=0;_this.m_springMass=0;_this.m_springImpulse=0;_this.m_maxMotorTorque=def.maxMotorTorque;_this.m_motorSpeed=def.motorSpeed;_this.m_enableMotor=def.enableMotor;_this.m_frequencyHz=def.frequencyHz;_this.m_dampingRatio=def.dampingRatio;_this.m_bias=0;_this.m_gamma=0;return _this}WheelJoint2.prototype._serialize=function(){return{type:this.m_type,bodyA:this.m_bodyA,bodyB:this.m_bodyB,collideConnected:this.m_collideConnected,enableMotor:this.m_enableMotor,maxMotorTorque:this.m_maxMotorTorque,motorSpeed:this.m_motorSpeed,frequencyHz:this.m_frequencyHz,dampingRatio:this.m_dampingRatio,localAnchorA:this.m_localAnchorA,localAnchorB:this.m_localAnchorB,localAxisA:this.m_localXAxisA}};WheelJoint2._deserialize=function(data,world,restore){data=__assign({},data);data.bodyA=restore(Body,data.bodyA,world);data.bodyB=restore(Body,data.bodyB,world);var joint=new WheelJoint2(data);return joint};WheelJoint2.prototype._reset=function(def){if(def.anchorA){this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA))}else if(def.localAnchorA){this.m_localAnchorA.setVec2(def.localAnchorA)}if(def.anchorB){this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB))}else if(def.localAnchorB){this.m_localAnchorB.setVec2(def.localAnchorB)}if(def.localAxisA){this.m_localXAxisA.setVec2(def.localAxisA);this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1,def.localAxisA))}if(def.enableMotor!==void 0){this.m_enableMotor=def.enableMotor}if(Number.isFinite(def.maxMotorTorque)){this.m_maxMotorTorque=def.maxMotorTorque}if(Number.isFinite(def.motorSpeed)){this.m_motorSpeed=def.motorSpeed}if(Number.isFinite(def.frequencyHz)){this.m_frequencyHz=def.frequencyHz}if(Number.isFinite(def.dampingRatio)){this.m_dampingRatio=def.dampingRatio}};WheelJoint2.prototype.getLocalAnchorA=function(){return this.m_localAnchorA};WheelJoint2.prototype.getLocalAnchorB=function(){return this.m_localAnchorB};WheelJoint2.prototype.getLocalAxisA=function(){return this.m_localXAxisA};WheelJoint2.prototype.getJointTranslation=function(){var bA=this.m_bodyA;var bB=this.m_bodyB;var pA2=bA.getWorldPoint(this.m_localAnchorA);var pB2=bB.getWorldPoint(this.m_localAnchorB);var d2=Vec2.sub(pB2,pA2);var axis=bA.getWorldVector(this.m_localXAxisA);var translation2=Vec2.dot(d2,axis);return translation2};WheelJoint2.prototype.getJointSpeed=function(){var wA=this.m_bodyA.m_angularVelocity;var wB=this.m_bodyB.m_angularVelocity;return wB-wA};WheelJoint2.prototype.isMotorEnabled=function(){return this.m_enableMotor};WheelJoint2.prototype.enableMotor=function(flag){if(flag==this.m_enableMotor)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_enableMotor=flag};WheelJoint2.prototype.setMotorSpeed=function(speed){if(speed==this.m_motorSpeed)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_motorSpeed=speed};WheelJoint2.prototype.getMotorSpeed=function(){return this.m_motorSpeed};WheelJoint2.prototype.setMaxMotorTorque=function(torque){if(torque==this.m_maxMotorTorque)return;this.m_bodyA.setAwake(true);this.m_bodyB.setAwake(true);this.m_maxMotorTorque=torque};WheelJoint2.prototype.getMaxMotorTorque=function(){return this.m_maxMotorTorque};WheelJoint2.prototype.getMotorTorque=function(inv_dt){return inv_dt*this.m_motorImpulse};WheelJoint2.prototype.setSpringFrequencyHz=function(hz){this.m_frequencyHz=hz};WheelJoint2.prototype.getSpringFrequencyHz=function(){return this.m_frequencyHz};WheelJoint2.prototype.setSpringDampingRatio=function(ratio){this.m_dampingRatio=ratio};WheelJoint2.prototype.getSpringDampingRatio=function(){return this.m_dampingRatio};WheelJoint2.prototype.getAnchorA=function(){return this.m_bodyA.getWorldPoint(this.m_localAnchorA)};WheelJoint2.prototype.getAnchorB=function(){return this.m_bodyB.getWorldPoint(this.m_localAnchorB)};WheelJoint2.prototype.getReactionForce=function(inv_dt){return Vec2.combine(this.m_impulse,this.m_ay,this.m_springImpulse,this.m_ax).mul(inv_dt)};WheelJoint2.prototype.getReactionTorque=function(inv_dt){return inv_dt*this.m_motorImpulse};WheelJoint2.prototype.initVelocityConstraints=function(step){this.m_localCenterA=this.m_bodyA.m_sweep.localCenter;this.m_localCenterB=this.m_bodyB.m_sweep.localCenter;this.m_invMassA=this.m_bodyA.m_invMass;this.m_invMassB=this.m_bodyB.m_invMass;this.m_invIA=this.m_bodyA.m_invI;this.m_invIB=this.m_bodyB.m_invI;var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var rA2=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));var rB2=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var d2=Vec2.zero();d2.addCombine(1,cB2,1,rB2);d2.subCombine(1,cA2,1,rA2);{this.m_ay=Rot.mulVec2(qA,this.m_localYAxisA);this.m_sAy=Vec2.crossVec2Vec2(Vec2.add(d2,rA2),this.m_ay);this.m_sBy=Vec2.crossVec2Vec2(rB2,this.m_ay);this.m_mass=mA+mB+iA*this.m_sAy*this.m_sAy+iB*this.m_sBy*this.m_sBy;if(this.m_mass>0){this.m_mass=1/this.m_mass}}this.m_springMass=0;this.m_bias=0;this.m_gamma=0;if(this.m_frequencyHz>0){this.m_ax=Rot.mulVec2(qA,this.m_localXAxisA);this.m_sAx=Vec2.crossVec2Vec2(Vec2.add(d2,rA2),this.m_ax);this.m_sBx=Vec2.crossVec2Vec2(rB2,this.m_ax);var invMass=mA+mB+iA*this.m_sAx*this.m_sAx+iB*this.m_sBx*this.m_sBx;if(invMass>0){this.m_springMass=1/invMass;var C=Vec2.dot(d2,this.m_ax);var omega=2*math_PI*this.m_frequencyHz;var damp=2*this.m_springMass*this.m_dampingRatio*omega;var k=this.m_springMass*omega*omega;var h=step.dt;this.m_gamma=h*(damp+h*k);if(this.m_gamma>0){this.m_gamma=1/this.m_gamma}this.m_bias=C*h*k*this.m_gamma;this.m_springMass=invMass+this.m_gamma;if(this.m_springMass>0){this.m_springMass=1/this.m_springMass}}}else{this.m_springImpulse=0}if(this.m_enableMotor){this.m_motorMass=iA+iB;if(this.m_motorMass>0){this.m_motorMass=1/this.m_motorMass}}else{this.m_motorMass=0;this.m_motorImpulse=0}if(step.warmStarting){this.m_impulse*=step.dtRatio;this.m_springImpulse*=step.dtRatio;this.m_motorImpulse*=step.dtRatio;var P3=Vec2.combine(this.m_impulse,this.m_ay,this.m_springImpulse,this.m_ax);var LA=this.m_impulse*this.m_sAy+this.m_springImpulse*this.m_sAx+this.m_motorImpulse;var LB=this.m_impulse*this.m_sBy+this.m_springImpulse*this.m_sBx+this.m_motorImpulse;vA2.subMul(this.m_invMassA,P3);wA-=this.m_invIA*LA;vB2.addMul(this.m_invMassB,P3);wB+=this.m_invIB*LB}else{this.m_impulse=0;this.m_springImpulse=0;this.m_motorImpulse=0}this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB};WheelJoint2.prototype.solveVelocityConstraints=function(step){var mA=this.m_invMassA;var mB=this.m_invMassB;var iA=this.m_invIA;var iB=this.m_invIB;var vA2=this.m_bodyA.c_velocity.v;var wA=this.m_bodyA.c_velocity.w;var vB2=this.m_bodyB.c_velocity.v;var wB=this.m_bodyB.c_velocity.w;{var Cdot=Vec2.dot(this.m_ax,vB2)-Vec2.dot(this.m_ax,vA2)+this.m_sBx*wB-this.m_sAx*wA;var impulse=-this.m_springMass*(Cdot+this.m_bias+this.m_gamma*this.m_springImpulse);this.m_springImpulse+=impulse;var P3=Vec2.mulNumVec2(impulse,this.m_ax);var LA=impulse*this.m_sAx;var LB=impulse*this.m_sBx;vA2.subMul(mA,P3);wA-=iA*LA;vB2.addMul(mB,P3);wB+=iB*LB}{var Cdot=wB-wA-this.m_motorSpeed;var impulse=-this.m_motorMass*Cdot;var oldImpulse=this.m_motorImpulse;var maxImpulse=step.dt*this.m_maxMotorTorque;this.m_motorImpulse=clamp(this.m_motorImpulse+impulse,-maxImpulse,maxImpulse);impulse=this.m_motorImpulse-oldImpulse;wA-=iA*impulse;wB+=iB*impulse}{var Cdot=Vec2.dot(this.m_ay,vB2)-Vec2.dot(this.m_ay,vA2)+this.m_sBy*wB-this.m_sAy*wA;var impulse=-this.m_mass*Cdot;this.m_impulse+=impulse;var P3=Vec2.mulNumVec2(impulse,this.m_ay);var LA=impulse*this.m_sAy;var LB=impulse*this.m_sBy;vA2.subMul(mA,P3);wA-=iA*LA;vB2.addMul(mB,P3);wB+=iB*LB}this.m_bodyA.c_velocity.v.setVec2(vA2);this.m_bodyA.c_velocity.w=wA;this.m_bodyB.c_velocity.v.setVec2(vB2);this.m_bodyB.c_velocity.w=wB};WheelJoint2.prototype.solvePositionConstraints=function(step){var cA2=this.m_bodyA.c_position.c;var aA=this.m_bodyA.c_position.a;var cB2=this.m_bodyB.c_position.c;var aB=this.m_bodyB.c_position.a;var qA=Rot.neo(aA);var qB=Rot.neo(aB);var rA2=Rot.mulVec2(qA,Vec2.sub(this.m_localAnchorA,this.m_localCenterA));var rB2=Rot.mulVec2(qB,Vec2.sub(this.m_localAnchorB,this.m_localCenterB));var d2=Vec2.zero();d2.addCombine(1,cB2,1,rB2);d2.subCombine(1,cA2,1,rA2);var ay=Rot.mulVec2(qA,this.m_localYAxisA);var sAy=Vec2.crossVec2Vec2(Vec2.add(d2,rA2),ay);var sBy=Vec2.crossVec2Vec2(rB2,ay);var C=Vec2.dot(d2,ay);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;var impulse=k!=0?-C/k:0;var P3=Vec2.mulNumVec2(impulse,ay);var LA=impulse*sAy;var LB=impulse*sBy;cA2.subMul(this.m_invMassA,P3);aA-=this.m_invIA*LA;cB2.addMul(this.m_invMassB,P3);aB+=this.m_invIB*LB;this.m_bodyA.c_position.c.setVec2(cA2);this.m_bodyA.c_position.a=aA;this.m_bodyB.c_position.c.setVec2(cB2);this.m_bodyB.c_position.a=aB;return math_abs(C)<=SettingsInternal.linearSlop};WheelJoint2.TYPE="wheel-joint";return WheelJoint2}(Joint);var _a;var SID=0;var SERIALIZE_REF_TYPES={World:World,Body:Body,Joint:Joint,Fixture:Fixture,Shape:Shape};var DESERIALIZE_BY_REF_TYPE={Vec2:Vec2,Vec3:Vec3,World:World,Body:Body,Joint:Joint,Fixture:Fixture,Shape:Shape};var DESERIALIZE_BY_TYPE_FIELD=(_a={},_a[Body.STATIC]=Body,_a[Body.DYNAMIC]=Body,_a[Body.KINEMATIC]=Body,_a[ChainShape.TYPE]=ChainShape,_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);var DEFAULT_OPTIONS={rootClass:World,preSerialize:function(obj){return obj},postSerialize:function(data,obj){return data},preDeserialize:function(data){return data},postDeserialize:function(obj,data){return obj}};var Serializer=function(){function Serializer2(options2){var _this=this;this.toJson=function(root){var preSerialize=_this.options.preSerialize;var postSerialize=_this.options.postSerialize;var json=[];var refQueue=[root];var refMemoById={};function addToRefQueue(value,typeName){value.__sid=value.__sid||++SID;if(!refMemoById[value.__sid]){refQueue.push(value);var index=json.length+refQueue.length;var ref={refIndex:index,refType:typeName};refMemoById[value.__sid]=ref}return refMemoById[value.__sid]}function serializeWithHooks(obj2){obj2=preSerialize(obj2);var data=obj2._serialize();data=postSerialize(data,obj2);return data}function traverse(value,noRefType){if(noRefType===void 0){noRefType=false}if(typeof value!=="object"||value===null){return value}if(typeof value._serialize==="function"){if(!noRefType){for(var typeName in SERIALIZE_REF_TYPES){if(value instanceof SERIALIZE_REF_TYPES[typeName]){return addToRefQueue(value,typeName)}}}value=serializeWithHooks(value)}if(Array.isArray(value)){var newValue=[];for(var key=0;keyradius*radius){return}manifold.type=exports2.ManifoldType.e_circles;copyVec2(manifold.localPoint,circleA.m_p);zeroVec2(manifold.localNormal);manifold.pointCount=1;copyVec2(manifold.points[0].localPoint,circleB.m_p);manifold.points[0].id.setFeatures(0,exports2.ContactFeatureType.e_vertex,0,exports2.ContactFeatureType.e_vertex)};Contact.addType(EdgeShape.TYPE,CircleShape.TYPE,EdgeCircleContact);Contact.addType(ChainShape.TYPE,CircleShape.TYPE,ChainCircleContact);function EdgeCircleContact(manifold,xfA2,fixtureA,indexA,xfB2,fixtureB,indexB){var shapeA=fixtureA.getShape();var shapeB=fixtureB.getShape();CollideEdgeCircle(manifold,shapeA,xfA2,shapeB,xfB2)}function ChainCircleContact(manifold,xfA2,fixtureA,indexA,xfB2,fixtureB,indexB){var chain=fixtureA.getShape();var edge=new EdgeShape;chain.getChildEdge(edge,indexA);var shapeA=edge;var shapeB=fixtureB.getShape();CollideEdgeCircle(manifold,shapeA,xfA2,shapeB,xfB2)}var e=vec2(0,0);var e1=vec2(0,0);var e2=vec2(0,0);var Q=vec2(0,0);var P=vec2(0,0);var n$2=vec2(0,0);var CollideEdgeCircle=function(manifold,edgeA,xfA2,circleB,xfB2){manifold.pointCount=0;retransformVec2(Q,xfB2,xfA2,circleB.m_p);var A=edgeA.m_vertex1;var B=edgeA.m_vertex2;subVec2(e,B,A);var u=dotVec2(e,B)-dotVec2(e,Q);var v3=dotVec2(e,Q)-dotVec2(e,A);var radius=edgeA.m_radius+circleB.m_radius;if(v3<=0){copyVec2(P,A);var dd_1=distSqrVec2(Q,A);if(dd_1>radius*radius){return}if(edgeA.m_hasVertex0){var A1=edgeA.m_vertex0;var B1=A;subVec2(e1,B1,A1);var u1=dotVec2(e1,B1)-dotVec2(e1,Q);if(u1>0){return}}manifold.type=exports2.ManifoldType.e_circles;zeroVec2(manifold.localNormal);copyVec2(manifold.localPoint,P);manifold.pointCount=1;copyVec2(manifold.points[0].localPoint,circleB.m_p);manifold.points[0].id.setFeatures(0,exports2.ContactFeatureType.e_vertex,0,exports2.ContactFeatureType.e_vertex);return}if(u<=0){copyVec2(P,B);var dd_2=distSqrVec2(Q,P);if(dd_2>radius*radius){return}if(edgeA.m_hasVertex3){var B2=edgeA.m_vertex3;var A2=B;subVec2(e2,B2,A2);var v22=dotVec2(e2,Q)-dotVec2(e2,A2);if(v22>0){return}}manifold.type=exports2.ManifoldType.e_circles;zeroVec2(manifold.localNormal);copyVec2(manifold.localPoint,P);manifold.pointCount=1;copyVec2(manifold.points[0].localPoint,circleB.m_p);manifold.points[0].id.setFeatures(1,exports2.ContactFeatureType.e_vertex,0,exports2.ContactFeatureType.e_vertex);return}var den=lengthSqrVec2(e);combine2Vec2(P,u/den,A,v3/den,B);var dd=distSqrVec2(Q,P);if(dd>radius*radius){return}crossNumVec2(n$2,1,e);if(dotVec2(n$2,Q)-dotVec2(n$2,A)<0){negVec2(n$2)}normalizeVec2(n$2);manifold.type=exports2.ManifoldType.e_faceA;copyVec2(manifold.localNormal,n$2);copyVec2(manifold.localPoint,A);manifold.pointCount=1;copyVec2(manifold.points[0].localPoint,circleB.m_p);manifold.points[0].id.setFeatures(0,exports2.ContactFeatureType.e_face,0,exports2.ContactFeatureType.e_vertex)};var incidentEdge=[new ClipVertex,new ClipVertex];var clipPoints1$1=[new ClipVertex,new ClipVertex];var clipPoints2$1=[new ClipVertex,new ClipVertex];var clipSegmentToLineNormal=vec2(0,0);var v1=vec2(0,0);var n$1=vec2(0,0);var xf$1=transform(0,0,0);var v11=vec2(0,0);var v12=vec2(0,0);var localTangent=vec2(0,0);var localNormal=vec2(0,0);var planePoint=vec2(0,0);var tangent=vec2(0,0);var normal$1=vec2(0,0);var normal1$1=vec2(0,0);Contact.addType(PolygonShape.TYPE,PolygonShape.TYPE,PolygonContact);function PolygonContact(manifold,xfA2,fixtureA,indexA,xfB2,fixtureB,indexB){CollidePolygons(manifold,fixtureA.getShape(),xfA2,fixtureB.getShape(),xfB2)}function findMaxSeparation(poly1,xf1,poly2,xf2,output2){var count1=poly1.m_count;var count2=poly2.m_count;var n1s=poly1.m_normals;var v1s=poly1.m_vertices;var v2s=poly2.m_vertices;detransformTransform(xf$1,xf2,xf1);var bestIndex=0;var maxSeparation2=-Infinity;for(var i=0;imaxSeparation2){maxSeparation2=si;bestIndex=i}}output2.maxSeparation=maxSeparation2;output2.bestIndex=bestIndex}function findIncidentEdge(clipVertex,poly1,xf1,edge12,poly2,xf2){var normals1=poly1.m_normals;var count2=poly2.m_count;var vertices2=poly2.m_vertices;var normals2=poly2.m_normals;rerotVec2(normal1$1,xf2.q,xf1.q,normals1[edge12]);var index=0;var minDot=Infinity;for(var i=0;itotalRadius)return;findMaxSeparation(polyB,xfB2,polyA,xfA2,maxSeparation);var edgeB=maxSeparation.bestIndex;var separationB=maxSeparation.maxSeparation;if(separationB>totalRadius)return;var poly1;var poly2;var xf1;var xf2;var edge12;var flip;var k_tol=.1*SettingsInternal.linearSlop;if(separationB>separationA+k_tol){poly1=polyB;poly2=polyA;xf1=xfB2;xf2=xfA2;edge12=edgeB;manifold.type=exports2.ManifoldType.e_faceB;flip=true}else{poly1=polyA;poly2=polyB;xf1=xfA2;xf2=xfB2;edge12=edgeA;manifold.type=exports2.ManifoldType.e_faceA;flip=false}incidentEdge[0].recycle(),incidentEdge[1].recycle();findIncidentEdge(incidentEdge,poly1,xf1,edge12,poly2,xf2);var count1=poly1.m_count;var vertices1=poly1.m_vertices;var iv1=edge12;var iv2=edge12+1radius){return}if(s2>separation){separation=s2;normalIndex=i}}var vertIndex1=normalIndex;var vertIndex2=vertIndex1+1radius*radius){return}manifold.pointCount=1;manifold.type=exports2.ManifoldType.e_faceA;subVec2(manifold.localNormal,cLocal,v13);normalizeVec2(manifold.localNormal);copyVec2(manifold.localPoint,v13);copyVec2(manifold.points[0].localPoint,circleB.m_p);manifold.points[0].id.setFeatures(0,exports2.ContactFeatureType.e_vertex,0,exports2.ContactFeatureType.e_vertex)}else if(u2<=0){if(distSqrVec2(cLocal,v22)>radius*radius){return}manifold.pointCount=1;manifold.type=exports2.ManifoldType.e_faceA;subVec2(manifold.localNormal,cLocal,v22);normalizeVec2(manifold.localNormal);copyVec2(manifold.localPoint,v22);copyVec2(manifold.points[0].localPoint,circleB.m_p);manifold.points[0].id.setFeatures(0,exports2.ContactFeatureType.e_vertex,0,exports2.ContactFeatureType.e_vertex)}else{combine2Vec2(faceCenter,.5,v13,.5,v22);var separation_1=dotVec2(cLocal,normals[vertIndex1])-dotVec2(faceCenter,normals[vertIndex1]);if(separation_1>radius){return}manifold.pointCount=1;manifold.type=exports2.ManifoldType.e_faceA;copyVec2(manifold.localNormal,normals[vertIndex1]);copyVec2(manifold.localPoint,faceCenter);copyVec2(manifold.points[0].localPoint,circleB.m_p);manifold.points[0].id.setFeatures(0,exports2.ContactFeatureType.e_vertex,0,exports2.ContactFeatureType.e_vertex)}};var math_min=Math.min;Contact.addType(EdgeShape.TYPE,PolygonShape.TYPE,EdgePolygonContact);Contact.addType(ChainShape.TYPE,PolygonShape.TYPE,ChainPolygonContact);function EdgePolygonContact(manifold,xfA2,fA,indexA,xfB2,fB,indexB){CollideEdgePolygon(manifold,fA.getShape(),xfA2,fB.getShape(),xfB2)}var edge_reuse=new EdgeShape;function ChainPolygonContact(manifold,xfA2,fA,indexA,xfB2,fB,indexB){var chain=fA.getShape();chain.getChildEdge(edge_reuse,indexA);CollideEdgePolygon(manifold,edge_reuse,xfA2,fB.getShape(),xfB2)}var EPAxisType;(function(EPAxisType2){EPAxisType2[EPAxisType2["e_unknown"]=-1]="e_unknown";EPAxisType2[EPAxisType2["e_edgeA"]=1]="e_edgeA";EPAxisType2[EPAxisType2["e_edgeB"]=2]="e_edgeB"})(EPAxisType||(EPAxisType={}));var VertexType;(function(VertexType2){VertexType2[VertexType2["e_isolated"]=0]="e_isolated";VertexType2[VertexType2["e_concave"]=1]="e_concave";VertexType2[VertexType2["e_convex"]=2]="e_convex"})(VertexType||(VertexType={}));var EPAxis=function(){function EPAxis2(){}return EPAxis2}();var TempPolygon=function(){function TempPolygon2(){this.vertices=[];this.normals=[];this.count=0;for(var i=0;i=0;offset0=Vec2.dot(normal0,centroidB)-Vec2.dot(normal0,v0)}if(hasVertex3){subVec2(edge2,v3,v22);normalizeVec2(edge2);setVec2(normal2,edge2.y,-edge2.x);convex2=Vec2.crossVec2Vec2(edge1,edge2)>0;offset2=Vec2.dot(normal2,centroidB)-Vec2.dot(normal2,v22)}var front;zeroVec2(normal);zeroVec2(lowerLimit);zeroVec2(upperLimit);if(hasVertex0&&hasVertex3){if(convex1&&convex2){front=offset0>=0||offset1>=0||offset2>=0;if(front){copyVec2(normal,normal1);copyVec2(lowerLimit,normal0);copyVec2(upperLimit,normal2)}else{scaleVec2(normal,-1,normal1);scaleVec2(lowerLimit,-1,normal1);scaleVec2(upperLimit,-1,normal1)}}else if(convex1){front=offset0>=0||offset1>=0&&offset2>=0;if(front){copyVec2(normal,normal1);copyVec2(lowerLimit,normal0);copyVec2(upperLimit,normal1)}else{scaleVec2(normal,-1,normal1);scaleVec2(lowerLimit,-1,normal2);scaleVec2(upperLimit,-1,normal1)}}else if(convex2){front=offset2>=0||offset0>=0&&offset1>=0;if(front){copyVec2(normal,normal1);copyVec2(lowerLimit,normal1);copyVec2(upperLimit,normal2)}else{scaleVec2(normal,-1,normal1);scaleVec2(lowerLimit,-1,normal1);scaleVec2(upperLimit,-1,normal0)}}else{front=offset0>=0&&offset1>=0&&offset2>=0;if(front){copyVec2(normal,normal1);copyVec2(lowerLimit,normal1);copyVec2(upperLimit,normal1)}else{scaleVec2(normal,-1,normal1);scaleVec2(lowerLimit,-1,normal2);scaleVec2(upperLimit,-1,normal0)}}}else if(hasVertex0){if(convex1){front=offset0>=0||offset1>=0;if(front){copyVec2(normal,normal1);copyVec2(lowerLimit,normal0);scaleVec2(upperLimit,-1,normal1)}else{scaleVec2(normal,-1,normal1);copyVec2(lowerLimit,normal1);scaleVec2(upperLimit,-1,normal1)}}else{front=offset0>=0&&offset1>=0;if(front){copyVec2(normal,normal1);copyVec2(lowerLimit,normal1);scaleVec2(upperLimit,-1,normal1)}else{scaleVec2(normal,-1,normal1);copyVec2(lowerLimit,normal1);scaleVec2(upperLimit,-1,normal0)}}}else if(hasVertex3){if(convex2){front=offset1>=0||offset2>=0;if(front){copyVec2(normal,normal1);scaleVec2(lowerLimit,-1,normal1);copyVec2(upperLimit,normal2)}else{scaleVec2(normal,-1,normal1);scaleVec2(lowerLimit,-1,normal1);copyVec2(upperLimit,normal1)}}else{front=offset1>=0&&offset2>=0;if(front){copyVec2(normal,normal1);scaleVec2(lowerLimit,-1,normal1);copyVec2(upperLimit,normal1)}else{scaleVec2(normal,-1,normal1);scaleVec2(lowerLimit,-1,normal2);copyVec2(upperLimit,normal1)}}}else{front=offset1>=0;if(front){copyVec2(normal,normal1);scaleVec2(lowerLimit,-1,normal1);scaleVec2(upperLimit,-1,normal1)}else{scaleVec2(normal,-1,normal1);copyVec2(lowerLimit,normal1);copyVec2(upperLimit,normal1)}}polygonBA.count=polygonB.m_count;for(var i=0;iradius){return}{polygonAxis.type=EPAxisType.e_unknown;polygonAxis.index=-1;polygonAxis.separation=-Infinity;setVec2(perp,-normal.y,normal.x);for(var i=0;iradius){polygonAxis.type=EPAxisType.e_edgeB;polygonAxis.index=i;polygonAxis.separation=s2;break}if(dotVec2(n,perp)>=0){if(dotVec2(n,normal)-dotVec2(upperLimit,normal)<-SettingsInternal.angularSlop){continue}}else{if(dotVec2(n,normal)-dotVec2(lowerLimit,normal)<-SettingsInternal.angularSlop){continue}}if(s2>polygonAxis.separation){polygonAxis.type=EPAxisType.e_edgeB;polygonAxis.index=i;polygonAxis.separation=s2}}}if(polygonAxis.type!=EPAxisType.e_unknown&&polygonAxis.separation>radius){return}var k_relativeTol=.98;var k_absoluteTol=.001;var primaryAxis;if(polygonAxis.type==EPAxisType.e_unknown){primaryAxis=edgeAxis}else if(polygonAxis.separation>k_relativeTol*edgeAxis.separation+k_absoluteTol){primaryAxis=polygonAxis}else{primaryAxis=edgeAxis}ie[0].recycle(),ie[1].recycle();if(primaryAxis.type==EPAxisType.e_edgeA){manifold.type=exports2.ManifoldType.e_faceA;var bestIndex=0;var bestValue=dotVec2(normal,polygonBA.normals[0]);for(var i=1;i= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/** @internal */\nexport const options = function(input: T, defaults: object): T {\n if (input === null || typeof input === \"undefined\") {\n // tslint:disable-next-line:no-object-literal-type-assertion\n input = {} as T;\n }\n\n const output = {...input};\n\n // tslint:disable-next-line:no-for-in\n for (const key in defaults) {\n if (defaults.hasOwnProperty(key) && typeof input[key] === \"undefined\") {\n output[key] = defaults[key];\n }\n }\n\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n const symbols = Object.getOwnPropertySymbols(defaults);\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n if (defaults.propertyIsEnumerable(symbol) && typeof input[symbol] === \"undefined\") {\n output[symbol] = defaults[symbol];\n }\n }\n }\n\n return output;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_random = Math.random;\n\n\nexport const EPSILON = 1e-9;\n\n/** @internal @deprecated */\nexport const isFinite = Number.isFinite;\n\n/**\n * @deprecated\n * Next Largest Power of 2 Given a binary integer value x, the next largest\n * power of 2 can be computed by a SWAR algorithm that recursively \"folds\" the\n * upper bits into the lower bits. This process yields a bit vector with the\n * same most significant 1 as x, but all 1's below it. Adding 1 to that value\n * yields the next largest power of 2. For a 32-bit value:\n */\nexport function nextPowerOfTwo(x: number): number {\n x |= (x >> 1);\n x |= (x >> 2);\n x |= (x >> 4);\n x |= (x >> 8);\n x |= (x >> 16);\n return x + 1;\n}\n\n/** @deprecated */\nexport function isPowerOfTwo(x: number): boolean {\n return x > 0 && (x & (x - 1)) === 0;\n}\n\n/** @deprecated */\nexport function mod(num: number, min?: number, max?: number): number {\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}\n\n/**\n * @deprecated\n * Returns a min if num is less than min, and max if more than max, otherwise returns num.\n */\nexport function clamp(num: number, min: number, max: number): number {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n } else {\n return num;\n }\n}\n\n/**\n * @deprecated\n * Returns a random number between min and max when two arguments are provided.\n * If one arg is provided between 0 to max.\n * If one arg is passed between 0 to 1.\n */\nexport function random(min?: number, max?: number): number {\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}\n\n/** @ignore */\nexport const 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;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"./Math\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\nexport interface Vec2Value {\n x: number;\n y: number;\n}\n\nexport class Vec2 {\n x: number;\n y: number;\n\n constructor(x: number, y: number);\n constructor(obj: { x: number, y: number });\n constructor();\n // tslint:disable-next-line:typedef\n constructor(x?, y?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec2)) {\n return new Vec2(x, y);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n } else {\n this.x = x;\n this.y = y;\n }\n _ASSERT && Vec2.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = data.x;\n obj.y = data.y;\n return obj;\n }\n\n static zero(): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = 0;\n obj.y = 0;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = x;\n obj.y = y;\n return obj;\n }\n\n static clone(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(v.x, v.y);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /**\n * Does this vector contain finite coordinates?\n */\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.x) && Number.isFinite(obj.y);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec2.isValid(o), \"Invalid Vec2!\", o);\n }\n\n clone(): Vec2 {\n return Vec2.clone(this);\n }\n\n /**\n * Set this vector to all zeros.\n *\n * @returns this\n */\n setZero(): Vec2 {\n this.x = 0.0;\n this.y = 0.0;\n return this;\n }\n\n set(x: number, y: number): Vec2;\n set(value: Vec2Value): Vec2;\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n // tslint:disable-next-line:typedef\n set(x, y?) {\n if (typeof x === \"object\") {\n _ASSERT && Vec2.assert(x);\n this.x = x.x;\n this.y = x.y;\n } else {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n }\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setNum(x: number, y: number) {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setVec2(value: Vec2Value) {\n _ASSERT && Vec2.assert(value);\n this.x = value.x;\n this.y = value.y;\n\n return this;\n }\n\n /** @internal @deprecated Use setCombine or setMul */\n wSet(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.setCombine(a, v, b, w);\n } else {\n return this.setMul(a, v);\n }\n }\n\n /**\n * Set linear combination of v and w: `a * v + b * w`\n */\n setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x = x;\n this.y = y;\n return this;\n }\n\n setMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * Add a vector to this vector.\n *\n * @returns this\n */\n add(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x += w.x;\n this.y += w.y;\n return this;\n }\n\n /** @internal @deprecated Use addCombine or addMul */\n wAdd(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.addCombine(a, v, b, w);\n } else {\n return this.addMul(a, v);\n }\n }\n\n /**\n * Add linear combination of v and w: `a * v + b * w`\n */\n addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x += x;\n this.y += y;\n return this;\n }\n\n addMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x += x;\n this.y += y;\n return this;\n }\n\n /**\n * @deprecated Use subCombine or subMul\n */\n wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.subCombine(a, v, b, w);\n } else {\n return this.subMul(a, v);\n }}\n\n /**\n * Subtract linear combination of v and w: `a * v + b * w`\n */\n subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n subMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n /**\n * Subtract a vector from this vector\n *\n * @returns this\n */\n sub(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x -= w.x;\n this.y -= w.y;\n return this;\n }\n\n /**\n * Multiply this vector by a scalar.\n *\n * @returns this\n */\n mul(m: number): Vec2 {\n _ASSERT && console.assert(Number.isFinite(m));\n this.x *= m;\n this.y *= m;\n return this;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n length(): number {\n return Vec2.lengthOf(this);\n }\n\n /**\n * Get the length squared.\n */\n lengthSquared(): number {\n return Vec2.lengthSquared(this);\n }\n\n /**\n * Convert this vector into a unit vector.\n *\n * @returns old length\n */\n normalize(): number {\n const length = this.length();\n if (length < EPSILON) {\n return 0.0;\n }\n const invLength = 1.0 / length;\n this.x *= invLength;\n this.y *= invLength;\n return length;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n static lengthOf(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return math_sqrt(v.x * v.x + v.y * v.y);\n }\n\n /**\n * Get the length squared.\n */\n static lengthSquared(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return v.x * v.x + v.y * v.y;\n }\n\n static distance(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return math_sqrt(dx * dx + dy * dy);\n }\n\n static distanceSquared(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return dx * dx + dy * dy;\n }\n\n static areEqual(v: Vec2Value, w: Vec2Value): boolean {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v === w || typeof w === \"object\" && w !== null && v.x === w.x && v.y === w.y;\n }\n\n /**\n * Get the skew vector such that dot(skew_vec, other) == cross(vec, other)\n */\n static skew(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.y, v.x);\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.x + v.y * w.y;\n }\n\n /** Cross product between two vectors */\n static cross(v: Vec2Value, w: Vec2Value): number;\n /** Cross product between a vector and a scalar */\n static cross(v: Vec2Value, w: number): Vec2;\n /** Cross product between a scalar and a vector */\n static cross(v: number, w: Vec2Value): Vec2;\n static cross(v: any, w: any): any {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n\n } else {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n }\n\n /** Cross product on two vectors */\n static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n\n /** Cross product on a vector and a scalar */\n static crossVec2Num(v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n }\n\n /** Cross product on a vector and a scalar */\n static crossNumVec2(v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n }\n\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2;\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2;\n static addCross(a: Vec2Value, v: any, w: any): Vec2 {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n static add(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x + w.x, v.y + w.y);\n }\n\n /** @hidden @deprecated */\n static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return Vec2.combine(a, v, b, w);\n } else {\n return Vec2.mulNumVec2(a, v);\n }\n }\n\n static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n return Vec2.zero().setCombine(a, v, b, w);\n }\n\n static sub(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x - w.x, v.y - w.y);\n }\n\n static mul(a: Vec2Value, b: number): Vec2;\n static mul(a: number, b: Vec2Value): Vec2;\n static mul(a: any, b: any): Vec2 {\n if (typeof a === \"object\") {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n\n } else if (typeof b === \"object\") {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n }\n\n static mulVec2Num(a: Vec2Value, b: number): Vec2 {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n }\n\n static mulNumVec2(a: number, b: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n\n neg(): Vec2 {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n\n static neg(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.x, -v.y);\n }\n\n static abs(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(math_abs(v.x), math_abs(v.y));\n }\n\n static mid(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo((v.x + w.x) * 0.5, (v.y + w.y) * 0.5);\n }\n\n static upper(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_max(v.x, w.x), math_max(v.y, w.y));\n }\n\n static lower(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_min(v.x, w.x), math_min(v.y, w.y));\n }\n\n clamp(max: number): Vec2 {\n const lengthSqr = this.x * this.x + this.y * this.y;\n if (lengthSqr > max * max) {\n const scale = max / math_sqrt(lengthSqr);\n this.x *= scale;\n this.y *= scale;\n }\n return this;\n }\n\n static clamp(v: Vec2Value, max: number): Vec2 {\n const r = Vec2.neo(v.x, v.y);\n r.clamp(max);\n return r;\n }\n\n /** @hidden @deprecated */\n static scaleFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x * x, v.y * y);\n };\n }\n\n /** @hidden @deprecated */\n static translateFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x + x, v.y + y);\n };\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/**\n * Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n */\nexport interface RayCastInput {\n p1: Vec2Value;\n p2: Vec2Value;\n maxFraction: number;\n}\n\nexport type RayCastCallback = (subInput: RayCastInput, id: number) => number;\n\n/**\n * Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`,\n * where `p1` and `p2` come from RayCastInput.\n */\nexport interface RayCastOutput {\n normal: Vec2;\n fraction: number;\n}\n\nexport interface AABBValue {\n lowerBound: Vec2Value;\n upperBound: Vec2Value;\n}\n\nexport class AABB {\n lowerBound: Vec2;\n upperBound: Vec2;\n\n constructor(lower?: Vec2Value, upper?: Vec2Value) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof AABB)) {\n return new AABB(lower, upper);\n }\n\n this.lowerBound = Vec2.zero();\n this.upperBound = Vec2.zero();\n\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\n /**\n * Verify that the bounds are sorted.\n */\n isValid(): boolean {\n return AABB.isValid(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!AABB.isValid(o), \"Invalid AABB!\", o);\n }\n\n /**\n * Get the center of the AABB.\n */\n getCenter(): Vec2 {\n return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5);\n }\n\n /**\n * Get the extents of the AABB (half-widths).\n */\n getExtents(): Vec2 {\n return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5);\n }\n\n /**\n * Get the perimeter length.\n */\n getPerimeter(): number {\n return 2.0 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y);\n }\n\n /**\n * Combine one or two AABB into this one.\n */\n combine(a: AABBValue, b?: AABBValue): void {\n b = b || this;\n\n const lowerA = a.lowerBound;\n const upperA = a.upperBound;\n const lowerB = b.lowerBound;\n const upperB = b.upperBound;\n\n const lowerX = math_min(lowerA.x, lowerB.x);\n const lowerY = math_min(lowerA.y, lowerB.y);\n const upperX = math_max(upperB.x, upperA.x);\n const upperY = math_max(upperB.y, upperA.y);\n\n this.lowerBound.setNum(lowerX, lowerY);\n this.upperBound.setNum(upperX, upperY);\n }\n\n combinePoints(a: Vec2Value, b: Vec2Value): void {\n this.lowerBound.setNum(math_min(a.x, b.x), math_min(a.y, b.y));\n this.upperBound.setNum(math_max(a.x, b.x), math_max(a.y, b.y));\n }\n\n set(aabb: AABBValue): void {\n this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y);\n this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y);\n }\n\n contains(aabb: AABBValue): boolean {\n let 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\n extend(value: number): AABB {\n AABB.extend(this, value);\n return this;\n }\n\n static extend(out: AABBValue, value: number): AABBValue {\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\n static testOverlap(a: AABBValue, b: AABBValue): boolean {\n const d1x = b.lowerBound.x - a.upperBound.x;\n const d2x = a.lowerBound.x - b.upperBound.x;\n\n const d1y = b.lowerBound.y - a.upperBound.y;\n const d2y = a.lowerBound.y - b.upperBound.y;\n\n if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) {\n return false;\n }\n return true;\n }\n\n static areEqual(a: AABBValue, b: AABBValue): boolean {\n return Vec2.areEqual(a.lowerBound, b.lowerBound) && Vec2.areEqual(a.upperBound, b.upperBound);\n }\n\n static diff(a: AABBValue, b: AABBValue): number {\n const wD = math_max(0, math_min(a.upperBound.x, b.upperBound.x) - math_max(b.lowerBound.x, a.lowerBound.x));\n const hD = math_max(0, math_min(a.upperBound.y, b.upperBound.y) - math_max(b.lowerBound.y, a.lowerBound.y));\n\n const wA = a.upperBound.x - a.lowerBound.x;\n const hA = a.upperBound.y - a.lowerBound.y;\n\n const wB = b.upperBound.x - b.lowerBound.x;\n const hB = b.upperBound.y - b.lowerBound.y;\n\n return wA * hA + wB * hB - wD * hD;\n }\n\n rayCast(output: RayCastOutput, input: RayCastInput): boolean {\n // From Real-time Collision Detection, p179.\n\n let tmin = -Infinity;\n let tmax = Infinity;\n\n const p = input.p1;\n const d = Vec2.sub(input.p2, input.p1);\n const absD = Vec2.abs(d);\n\n const normal = Vec2.zero();\n\n for (let f: \"x\" | \"y\" = \"x\"; f !== null; f = (f === \"x\" ? \"y\" : null)) {\n if (absD.x < EPSILON) {\n // Parallel.\n if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) {\n return false;\n }\n } else {\n const inv_d = 1.0 / d[f];\n let t1 = (this.lowerBound[f] - p[f]) * inv_d;\n let t2 = (this.upperBound[f] - p[f]) * inv_d;\n\n // Sign of the normal vector.\n let s = -1.0;\n\n if (t1 > t2) {\n const temp = t1;\n t1 = t2;\n t2 = temp;\n s = 1.0;\n }\n\n // Push the min up\n if (t1 > tmin) {\n normal.setZero();\n normal[f] = s;\n tmin = t1;\n }\n\n // Pull the max down\n tmax = math_min(tmax, t2);\n\n if (tmin > tmax) {\n return false;\n }\n }\n }\n\n // Does the ray start inside the box?\n // Does the ray intersect beyond the max fraction?\n if (tmin < 0.0 || input.maxFraction < tmin) {\n return false;\n }\n\n // Intersection.\n output.fraction = tmin;\n output.normal = normal;\n return true;\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue {\n out.lowerBound.x = math_min(a.x, b.x);\n out.lowerBound.y = math_min(a.y, b.y);\n out.upperBound.x = math_max(a.x, b.x);\n out.upperBound.y = math_max(a.y, b.y);\n return out;\n }\n\n static combinedPerimeter(a: AABBValue, b: AABBValue) {\n const lx = math_min(a.lowerBound.x, b.lowerBound.x);\n const ly = math_min(a.lowerBound.y, b.lowerBound.y);\n const ux = math_max(a.upperBound.x, b.upperBound.x);\n const uy = math_max(a.upperBound.y, b.upperBound.y);\n return 2.0 * (ux - lx + uy - ly); \n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Tuning constants based on meters-kilograms-seconds (MKS) units.\n * \n * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units.\n */\nexport class Settings {\n /**\n * You can use this to change the length scale used by your game.\n * \n * For example for inches you could use 39.4.\n */\n static lengthUnitsPerMeter = 1.0;\n \n // Collision\n /**\n * The maximum number of contact points between two convex shapes. Do not change\n * this value.\n */\n static maxManifoldPoints: number = 2;\n\n /**\n * The maximum number of vertices on a convex polygon. You cannot increase this\n * too much because BlockAllocator has a maximum object size.\n */\n static maxPolygonVertices: number = 12;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This allows proxies to move\n * by a small amount without triggering a tree adjustment. This is in meters.\n */\n static aabbExtension: number = 0.1;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This is used to predict the\n * future position based on the current displacement. This is a dimensionless\n * multiplier.\n */\n static aabbMultiplier: number = 2.0;\n\n /**\n * A small length used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static linearSlop: number = 0.005;\n\n /**\n * A small angle used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static angularSlop: number = (2.0 / 180.0 * math_PI);\n\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 static get polygonRadius(): number { return 2.0 * Settings.linearSlop; }\n\n /**\n * Maximum number of sub-steps per contact in continuous physics simulation.\n */\n static maxSubSteps: number = 8;\n\n // Dynamics\n\n /**\n * Maximum number of contacts to be handled to solve a TOI impact.\n */\n static maxTOIContacts: number = 32;\n\n /**\n * Maximum iterations to solve a TOI.\n */\n static maxTOIIterations: number = 20;\n\n /**\n * Maximum iterations to find Distance.\n */\n static maxDistanceIterations: number = 20;\n\n /**\n * A velocity threshold for elastic collisions. Any collision with a relative\n * linear velocity below this threshold will be treated as inelastic.\n */\n static velocityThreshold: number = 1.0;\n\n /**\n * The maximum linear position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxLinearCorrection: number = 0.2;\n\n /**\n * The maximum angular position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxAngularCorrection: number = (8.0 / 180.0 * math_PI);\n\n /**\n * The maximum linear velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxTranslation: number = 2.0;\n\n /**\n * The maximum angular velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxRotation: number = (0.5 * math_PI);\n\n /**\n * This scale factor controls how fast overlap is resolved. Ideally this would\n * be 1 so that overlap is removed in one time step. However using values close\n * to 1 often lead to overshoot.\n */\n static baumgarte: number = 0.2;\n static toiBaugarte: number = 0.75;\n\n // Sleep\n\n /**\n * The time that a body must be still before it will go to sleep.\n */\n static timeToSleep: number = 0.5;\n\n /**\n * A body cannot sleep if its linear velocity is above this tolerance.\n */\n static linearSleepTolerance: number = 0.01;\n\n /**\n * A body cannot sleep if its angular velocity is above this tolerance.\n */\n static angularSleepTolerance: number = (2.0 / 180.0 * math_PI);\n}\n\n/** @internal */\nexport class SettingsInternal {\n static get maxManifoldPoints() {\n return Settings.maxManifoldPoints;\n }\n static get maxPolygonVertices() {\n return Settings.maxPolygonVertices;\n }\n static get aabbExtension() {\n return Settings.aabbExtension * Settings.lengthUnitsPerMeter;\n }\n static get aabbMultiplier() {\n return Settings.aabbMultiplier;\n }\n static get linearSlop() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get linearSlopSquared() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get angularSlop() {\n return Settings.angularSlop;\n }\n static get polygonRadius() {\n return 2.0 * Settings.linearSlop;\n }\n static get maxSubSteps() {\n return Settings.maxSubSteps;\n }\n static get maxTOIContacts() {\n return Settings.maxTOIContacts;\n }\n static get maxTOIIterations() {\n return Settings.maxTOIIterations;\n }\n static get maxDistanceIterations() {\n return Settings.maxDistanceIterations;\n }\n static get velocityThreshold() {\n return Settings.velocityThreshold * Settings.lengthUnitsPerMeter;\n }\n static get maxLinearCorrection() {\n return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter;\n }\n static get maxAngularCorrection() {\n return Settings.maxAngularCorrection;\n }\n static get maxTranslation() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxTranslationSquared() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxRotation() {\n return Settings.maxRotation;\n }\n static get maxRotationSquared() {\n return Settings.maxRotation * Settings.maxRotation;\n }\n static get baumgarte() {\n return Settings.baumgarte;\n }\n static get toiBaugarte() {\n return Settings.toiBaugarte;\n }\n static get timeToSleep() {\n return Settings.timeToSleep;\n }\n static get linearSleepTolerance() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get linearSleepToleranceSqr() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get angularSleepTolerance() {\n return Settings.angularSleepTolerance;\n }\n static get angularSleepToleranceSqr() {\n return Settings.angularSleepTolerance * Settings.angularSleepTolerance;\n }\n}\n","/*\n * Copyright (c) 2016-2018 Ali Shakiba http://shakiba.me/planck.js\n *\n * This software is provided 'as-is', without any express or implied\n * warranty. In no event will the authors be held liable for any damages\n * arising from the use of this software.\n * Permission is granted to anyone to use this software for any purpose,\n * including commercial applications, and to alter it and redistribute it\n * freely, subject to the following restrictions:\n * 1. The origin of this software must not be misrepresented; you must not\n * claim that you wrote the original software. If you use this software\n * in a product, an acknowledgment in the product documentation would be\n * appreciated but is not required.\n * 2. Altered source versions must be plainly marked as such, and must not be\n * misrepresented as being the original software.\n * 3. This notice may not be removed or altered from any source distribution.\n */\n\n/** @internal */\nexport interface PoolOptions {\n max?: number,\n create?: () => T,\n /** Called when an object is being re-allocated. */\n allocate?: (item: T) => void,\n /** Called when an object is returned to pool. */\n release?: (item: T) => void,\n /** Called when an object is returned to the pool but will be disposed from pool. */\n dispose?: (item: T) => T,\n}\n\n/** @internal */\nexport class Pool {\n _list: T[] = [];\n _max: number = Infinity;\n\n _createFn: () => T;\n _hasCreateFn: boolean = false;\n _createCount: number = 0;\n\n _allocateFn: (item: T) => void;\n _hasAllocateFn: boolean = false;\n _allocateCount: number = 0;\n\n _releaseFn: (item: T) => void;\n _hasReleaseFn: boolean = false;\n _releaseCount: number = 0;\n\n _disposeFn: (item: T) => T;\n _hasDisposeFn: boolean = false;\n _disposeCount: number = 0;\n\n constructor(opts: PoolOptions) {\n this._list = [];\n this._max = opts.max || this._max;\n\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\n max(n?: number): number | Pool {\n if (typeof n === \"number\") {\n this._max = n;\n return this;\n }\n return this._max;\n }\n\n size(): number {\n return this._list.length;\n }\n\n allocate(): T {\n let item: T;\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 // tslint:disable-next-line:no-object-literal-type-assertion\n item = {} as T;\n }\n }\n this._allocateCount++;\n if (this._hasAllocateFn) {\n this._allocateFn(item);\n }\n return item;\n }\n\n release(item: T): void {\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\n toString(): string {\n return \" +\" + this._createCount + \" >\" + this._allocateCount + \" <\" + this._releaseCount + \" -\"\n + this._disposeCount + \" =\" + this._list.length + \"/\" + this._max;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Pool } from \"../util/Pool\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\nexport type DynamicTreeQueryCallback = (nodeId: number) => boolean;\n\n/**\n * A node in the dynamic tree. The client does not interact with this directly.\n */\nexport class TreeNode {\n id: number;\n /** Enlarged AABB */\n aabb: AABB = new AABB();\n userData: T = null;\n parent: TreeNode = null;\n child1: TreeNode = null;\n child2: TreeNode = null;\n /** 0: leaf, -1: free node */\n height: number = -1;\n\n constructor(id?: number) {\n this.id = id;\n }\n\n /** @internal */\n toString(): string {\n return this.id + \": \" + this.userData;\n }\n\n isLeaf(): boolean {\n return this.child1 == null;\n }\n}\n\n/** @internal */ const poolTreeNode = new Pool>({\n create(): TreeNode {\n return new TreeNode();\n },\n release(node: TreeNode) {\n node.userData = null;\n node.parent = null;\n node.child1 = null;\n node.child2 = null;\n node.height = -1;\n node.id = undefined;\n }\n});\n\n/**\n * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A\n * dynamic tree arranges data in a binary tree to accelerate queries such as\n * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we\n * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger\n * than the client object. This allows the client object to move by small\n * amounts without triggering a tree update.\n *\n * Nodes are pooled and relocatable, so we use node indices rather than\n * pointers.\n */\nexport class DynamicTree {\n m_root: TreeNode;\n m_lastProxyId: number;\n m_nodes: {\n [id: number]: TreeNode\n };\n\n constructor() {\n this.m_root = null;\n this.m_nodes = {};\n this.m_lastProxyId = 0;\n }\n\n /**\n * Get proxy user data.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getUserData(id: number): T {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.userData;\n }\n\n /**\n * Get the fat AABB for a node id.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getFatAABB(id: number): AABB {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.aabb;\n }\n\n allocateNode(): TreeNode {\n const node = poolTreeNode.allocate();\n node.id = ++this.m_lastProxyId;\n this.m_nodes[node.id] = node;\n return node;\n }\n\n freeNode(node: TreeNode): void {\n // tslint:disable-next-line:no-dynamic-delete\n delete this.m_nodes[node.id];\n poolTreeNode.release(node);\n }\n\n /**\n * Create a proxy in the tree as a leaf node. We return the index of the node\n * instead of a pointer so that we can grow the node pool.\n *\n * Create a proxy. Provide a tight fitting AABB and a userData pointer.\n */\n createProxy(aabb: AABBValue, userData: T): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n\n const node = this.allocateNode();\n\n node.aabb.set(aabb);\n\n // Fatten the aabb.\n AABB.extend(node.aabb, Settings.aabbExtension);\n\n node.userData = userData;\n node.height = 0;\n\n this.insertLeaf(node);\n\n return node.id;\n }\n\n /**\n * Destroy a proxy. This asserts if the id is invalid.\n */\n destroyProxy(id: number): void {\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n this.removeLeaf(node);\n this.freeNode(node);\n }\n\n /**\n * Move a proxy with a swepted AABB. If the proxy has moved outside of its\n * fattened AABB, then the proxy is removed from the tree and re-inserted.\n * Otherwise the function returns immediately.\n *\n * @param d Displacement\n *\n * @return true if the proxy was re-inserted.\n */\n moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean {\n _ASSERT && console.assert(AABB.isValid(aabb));\n _ASSERT && console.assert(!d || Vec2.isValid(d));\n\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n if (node.aabb.contains(aabb)) {\n return false;\n }\n\n this.removeLeaf(node);\n\n node.aabb.set(aabb);\n\n // Extend AABB.\n aabb = node.aabb;\n AABB.extend(aabb, Settings.aabbExtension);\n\n // Predict AABB displacement.\n // const d = Vec2.mul(Settings.aabbMultiplier, displacement);\n\n if (d.x < 0.0) {\n aabb.lowerBound.x += d.x * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.x += d.x * Settings.aabbMultiplier;\n }\n\n if (d.y < 0.0) {\n aabb.lowerBound.y += d.y * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.y += d.y * Settings.aabbMultiplier;\n }\n\n this.insertLeaf(node);\n\n return true;\n }\n\n insertLeaf(leaf: TreeNode): void {\n _ASSERT && console.assert(AABB.isValid(leaf.aabb));\n\n if (this.m_root == null) {\n this.m_root = leaf;\n this.m_root.parent = null;\n return;\n }\n\n // Find the best sibling for this node\n const leafAABB = leaf.aabb;\n let index = this.m_root;\n while (!index.isLeaf()) {\n const child1 = index.child1;\n const child2 = index.child2;\n\n const area = index.aabb.getPerimeter();\n\n const combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB);\n\n // Cost of creating a new parent for this node and the new leaf\n const cost = 2.0 * combinedArea;\n\n // Minimum cost of pushing the leaf further down the tree\n const inheritanceCost = 2.0 * (combinedArea - area);\n\n // Cost of descending into child1\n const newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb);\n let cost1 = newArea1 + inheritanceCost;\n if (!child1.isLeaf()) {\n const oldArea = child1.aabb.getPerimeter();\n cost1 -= oldArea;\n }\n\n // Cost of descending into child2\n const newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb);\n let cost2 = newArea2 + inheritanceCost;\n if (!child2.isLeaf()) {\n const oldArea = child2.aabb.getPerimeter();\n cost2 -= oldArea;\n }\n\n // Descend according to the minimum cost.\n if (cost < cost1 && cost < cost2) {\n break;\n }\n\n // Descend\n if (cost1 < cost2) {\n index = child1;\n } else {\n index = child2;\n }\n }\n\n const sibling = index;\n\n // Create a new parent.\n const oldParent = sibling.parent;\n const 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\n if (oldParent != null) {\n // The sibling was not the root.\n if (oldParent.child1 === sibling) {\n oldParent.child1 = newParent;\n } else {\n oldParent.child2 = newParent;\n }\n\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n } else {\n // The sibling was the root.\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n this.m_root = newParent;\n }\n\n // Walk back up the tree fixing heights and AABBs\n index = leaf.parent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n _ASSERT && console.assert(child1 != null);\n _ASSERT && console.assert(child2 != null);\n\n index.height = 1 + math_max(child1.height, child2.height);\n index.aabb.combine(child1.aabb, child2.aabb);\n\n index = index.parent;\n }\n\n // validate();\n }\n\n removeLeaf(leaf: TreeNode): void {\n if (leaf === this.m_root) {\n this.m_root = null;\n return;\n }\n\n const parent = leaf.parent;\n const grandParent = parent.parent;\n let sibling;\n if (parent.child1 === leaf) {\n sibling = parent.child2;\n } else {\n sibling = parent.child1;\n }\n\n if (grandParent != null) {\n // Destroy parent and connect sibling to grandParent.\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\n // Adjust ancestor bounds.\n let index = grandParent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n index.aabb.combine(child1.aabb, child2.aabb);\n index.height = 1 + math_max(child1.height, child2.height);\n\n index = index.parent;\n }\n } else {\n this.m_root = sibling;\n sibling.parent = null;\n this.freeNode(parent);\n }\n\n // validate();\n }\n\n /**\n * Perform a left or right rotation if node A is imbalanced. Returns the new\n * root index.\n */\n balance(iA: TreeNode): TreeNode {\n _ASSERT && console.assert(iA != null);\n\n const A = iA;\n if (A.isLeaf() || A.height < 2) {\n return iA;\n }\n\n const B = A.child1;\n const C = A.child2;\n\n const balance = C.height - B.height;\n\n // Rotate C up\n if (balance > 1) {\n const F = C.child1;\n const G = C.child2;\n\n // Swap A and C\n C.child1 = A;\n C.parent = A.parent;\n A.parent = C;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(B.height, G.height);\n C.height = 1 + math_max(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\n A.height = 1 + math_max(B.height, F.height);\n C.height = 1 + math_max(A.height, G.height);\n }\n\n return C;\n }\n\n // Rotate B up\n if (balance < -1) {\n const D = B.child1;\n const E = B.child2;\n\n // Swap A and B\n B.child1 = A;\n B.parent = A.parent;\n A.parent = B;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(C.height, E.height);\n B.height = 1 + math_max(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\n A.height = 1 + math_max(C.height, D.height);\n B.height = 1 + math_max(A.height, E.height);\n }\n\n return B;\n }\n\n return A;\n }\n\n /**\n * Compute the height of the binary tree in O(N) time. Should not be called\n * often.\n */\n getHeight(): number {\n if (this.m_root == null) {\n return 0;\n }\n\n return this.m_root.height;\n }\n\n /**\n * Get the ratio of the sum of the node areas to the root area.\n */\n getAreaRatio(): number {\n if (this.m_root == null) {\n return 0.0;\n }\n\n const root = this.m_root;\n const rootArea = root.aabb.getPerimeter();\n\n let totalArea = 0.0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // Free node in pool\n continue;\n }\n\n totalArea += node.aabb.getPerimeter();\n }\n\n this.iteratorPool.release(it);\n\n return totalArea / rootArea;\n }\n\n /**\n * Compute the height of a sub-tree.\n */\n computeHeight(id?: number): number {\n let node;\n if (typeof id !== \"undefined\") {\n node = this.m_nodes[id];\n } else {\n node = this.m_root;\n }\n\n // _ASSERT && console.assert(0 <= id && id < this.m_nodeCapacity);\n\n if (node.isLeaf()) {\n return 0;\n }\n\n const height1 = this.computeHeight(node.child1.id);\n const height2 = this.computeHeight(node.child2.id);\n return 1 + math_max(height1, height2);\n }\n\n validateStructure(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n if (node === this.m_root) {\n _ASSERT && console.assert(node.parent == null);\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n _ASSERT && console.assert(child1.parent === node);\n _ASSERT && console.assert(child2.parent === node);\n\n this.validateStructure(child1);\n this.validateStructure(child2);\n }\n\n validateMetrics(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n const height1 = child1.height;\n const height2 = child2.height;\n const height = 1 + math_max(height1, height2);\n _ASSERT && console.assert(node.height === height);\n\n const aabb = new AABB();\n aabb.combine(child1.aabb, child2.aabb);\n\n _ASSERT && console.assert(AABB.areEqual(aabb, node.aabb));\n\n this.validateMetrics(child1);\n this.validateMetrics(child2);\n }\n\n /**\n * Validate this tree. For testing.\n */\n validate(): void {\n if (!_ASSERT) return;\n this.validateStructure(this.m_root);\n this.validateMetrics(this.m_root);\n\n console.assert(this.getHeight() === this.computeHeight());\n }\n\n /**\n * Get the maximum balance of an node in the tree. The balance is the difference\n * in height of the two children of a node.\n */\n getMaxBalance(): number {\n let maxBalance = 0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height <= 1) {\n continue;\n }\n\n _ASSERT && console.assert(!node.isLeaf());\n\n const balance = math_abs(node.child2.height - node.child1.height);\n maxBalance = math_max(maxBalance, balance);\n }\n this.iteratorPool.release(it);\n\n return maxBalance;\n }\n\n /**\n * Build an optimal tree. Very expensive. For testing.\n */\n rebuildBottomUp(): void {\n const nodes = [];\n let count = 0;\n\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // free node in pool\n continue;\n }\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\n while (count > 1) {\n let minCost = Infinity;\n let iMin = -1;\n let jMin = -1;\n for (let i = 0; i < count; ++i) {\n const aabbi = nodes[i].aabb;\n for (let j = i + 1; j < count; ++j) {\n const aabbj = nodes[j].aabb;\n const cost = AABB.combinedPerimeter(aabbi, aabbj);\n if (cost < minCost) {\n iMin = i;\n jMin = j;\n minCost = cost;\n }\n }\n }\n\n const child1 = nodes[iMin];\n const child2 = nodes[jMin];\n\n const parent = this.allocateNode();\n parent.child1 = child1;\n parent.child2 = child2;\n parent.height = 1 + math_max(child1.height, child2.height);\n parent.aabb.combine(child1.aabb, child2.aabb);\n parent.parent = null;\n\n child1.parent = parent;\n child2.parent = parent;\n\n nodes[jMin] = nodes[count - 1];\n nodes[iMin] = parent;\n --count;\n }\n\n this.m_root = nodes[0];\n\n _ASSERT && this.validate();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n const 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\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void {\n _ASSERT && console.assert(typeof queryCallback === \"function\");\n const stack = this.stackPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, aabb)) {\n if (node.isLeaf()) {\n const 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\n this.stackPool.release(stack);\n }\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n // TODO: GC\n _ASSERT && console.assert(typeof rayCastCallback === \"function\");\n const p1 = input.p1;\n const p2 = input.p2;\n const r = Vec2.sub(p2, p1);\n _ASSERT && console.assert(r.lengthSquared() > 0.0);\n r.normalize();\n\n // v is perpendicular to the segment.\n const v = Vec2.crossNumVec2(1.0, r);\n const abs_v = Vec2.abs(v);\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n\n let maxFraction = input.maxFraction;\n\n // Build a bounding box for the segment.\n const segmentAABB = new AABB();\n let t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2);\n segmentAABB.combinePoints(p1, t);\n\n const stack = this.stackPool.allocate();\n const subInput = this.inputPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, segmentAABB) === false) {\n continue;\n }\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n const c = node.aabb.getCenter();\n const h = node.aabb.getExtents();\n const separation = math_abs(Vec2.dot(v, Vec2.sub(p1, c))) - Vec2.dot(abs_v, h);\n if (separation > 0.0) {\n continue;\n }\n\n if (node.isLeaf()) {\n subInput.p1 = Vec2.clone(input.p1);\n subInput.p2 = Vec2.clone(input.p2);\n subInput.maxFraction = maxFraction;\n\n const value = rayCastCallback(subInput, node.id);\n\n if (value === 0.0) {\n // The client has terminated the ray cast.\n break;\n } else if (value > 0.0) {\n // update segment bounding box.\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\n private inputPool: Pool = new Pool({\n create(): RayCastInput {\n // tslint:disable-next-line:no-object-literal-type-assertion\n return {} as RayCastInput;\n },\n release(stack: RayCastInput): void {\n }\n });\n\n private stackPool: Pool>> = new Pool>>({\n create(): Array> {\n return [];\n },\n release(stack: Array>): void {\n stack.length = 0;\n }\n });\n\n private iteratorPool: Pool> = new Pool>({\n create(): Iterator {\n return new Iterator();\n },\n release(iterator: Iterator): void {\n iterator.close();\n }\n });\n\n}\n\n/** @internal */\nclass Iterator {\n parents: Array> = [];\n states: number[] = [];\n preorder(root: TreeNode): Iterator {\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 next(): TreeNode {\n while (this.parents.length > 0) {\n const i = this.parents.length - 1;\n const 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 close(): void {\n this.parents.length = 0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\nimport { DynamicTree, DynamicTreeQueryCallback } from \"./DynamicTree\";\nimport { FixtureProxy } from \"../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/**\n * The broad-phase wraps and extends a dynamic-tree to keep track of moved\n * objects and query them on update.\n */\nexport class BroadPhase {\n m_tree: DynamicTree = new DynamicTree();\n m_moveBuffer: number[] = [];\n\n m_callback: (userDataA: any, userDataB: any) => void;\n m_queryProxyId: number;\n\n /**\n * Get user data from a proxy. Returns null if the id is invalid.\n */\n getUserData(proxyId: number): FixtureProxy {\n return this.m_tree.getUserData(proxyId);\n }\n\n /**\n * Test overlap of fat AABBs.\n */\n testOverlap(proxyIdA: number, proxyIdB: number): boolean {\n const aabbA = this.m_tree.getFatAABB(proxyIdA);\n const aabbB = this.m_tree.getFatAABB(proxyIdB);\n return AABB.testOverlap(aabbA, aabbB);\n }\n\n /**\n * Get the fat AABB for a proxy.\n */\n getFatAABB(proxyId: number): AABB {\n return this.m_tree.getFatAABB(proxyId);\n }\n\n /**\n * Get the number of proxies.\n */\n getProxyCount(): number {\n return this.m_moveBuffer.length;\n }\n\n /**\n * Get the height of the embedded tree.\n */\n getTreeHeight(): number {\n return this.m_tree.getHeight();\n }\n\n /**\n * Get the balance (integer) of the embedded tree.\n */\n getTreeBalance(): number {\n return this.m_tree.getMaxBalance();\n }\n\n /**\n * Get the quality metric of the embedded tree.\n */\n getTreeQuality(): number {\n return this.m_tree.getAreaRatio();\n }\n\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query = (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void => {\n this.m_tree.query(aabb, queryCallback);\n };\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n this.m_tree.rayCast(input, rayCastCallback);\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_tree.shiftOrigin(newOrigin);\n }\n\n /**\n * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs\n * is called.\n */\n createProxy(aabb: AABBValue, userData: FixtureProxy): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const proxyId = this.m_tree.createProxy(aabb, userData);\n this.bufferMove(proxyId);\n return proxyId;\n }\n\n /**\n * Destroy a proxy. It is up to the client to remove any pairs.\n */\n destroyProxy(proxyId: number): void {\n this.unbufferMove(proxyId);\n this.m_tree.destroyProxy(proxyId);\n }\n\n /**\n * Call moveProxy as many times as you like, then when you are done call\n * UpdatePairs to finalized the proxy pairs (for your time step).\n */\n moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const changed = this.m_tree.moveProxy(proxyId, aabb, displacement);\n if (changed) {\n this.bufferMove(proxyId);\n }\n }\n\n /**\n * Call to trigger a re-processing of it's pairs on the next call to\n * UpdatePairs.\n */\n touchProxy(proxyId: number): void {\n this.bufferMove(proxyId);\n }\n\n bufferMove(proxyId: number): void {\n this.m_moveBuffer.push(proxyId);\n }\n\n unbufferMove(proxyId: number): void {\n for (let 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\n /**\n * Update the pairs. This results in pair callbacks. This can only add pairs.\n */\n updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void {\n _ASSERT && console.assert(typeof addPairCallback === \"function\");\n this.m_callback = addPairCallback;\n\n // Perform tree queries for all moving proxies.\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\n // We have to query the tree with the fat AABB so that\n // we don't fail to create a pair that may touch later.\n const fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId);\n\n // Query tree, create pairs and add them pair buffer.\n this.m_tree.query(fatAABB, this.queryCallback);\n }\n\n // Try to keep the tree balanced.\n // this.m_tree.rebalance(4);\n }\n\n queryCallback = (proxyId: number): boolean => {\n // A proxy cannot form a pair with itself.\n if (proxyId === this.m_queryProxyId) {\n return true;\n }\n\n const proxyIdA = math_min(proxyId, this.m_queryProxyId);\n const proxyIdB = math_max(proxyId, this.m_queryProxyId);\n\n // TODO: Skip any duplicate pairs.\n\n const userDataA = this.m_tree.getUserData(proxyIdA);\n const userDataB = this.m_tree.getUserData(proxyIdB);\n\n // Send the pairs back to the client.\n this.m_callback(userDataA, userDataB);\n\n return true;\n };\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2023 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\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_sqrt = Math.sqrt;\n\n\nimport { RotValue } from \"./Rot\";\nimport { TransformValue } from \"./Transform\";\nimport { Vec2Value } from \"./Vec2\";\nimport { Vec3Value } from \"./Vec3\";\n\nexport function vec2(x: number, y: number): Vec2Value {\n return { x, y };\n}\n\nexport function vec3(x: number, y: number, z: number): Vec3Value {\n return { x, y, z };\n}\n\nexport function rotation(angle: number): RotValue {\n return { s: math_sin(angle), c: math_cos(angle) };\n}\n\nexport function setVec2(out: Vec2Value, x: number, y: number): Vec2Value {\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function copyVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = w.x;\n out.y = w.y;\n return out;\n}\n\nexport function zeroVec2(out: Vec2Value): Vec2Value {\n out.x = 0;\n out.y = 0;\n return out;\n}\n\nexport function negVec2(out: Vec2Value): Vec2Value {\n out.x = -out.x;\n out.y = -out.y;\n return out;\n}\n\nexport function plusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x += w.x;\n out.y += w.y;\n return out;\n}\n\nexport function addVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x + w.x;\n out.y = v.x + w.y;\n return out;\n}\n\nexport function minusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x -= w.x;\n out.y -= w.y;\n return out;\n}\n\nexport function subVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x - w.x;\n out.y = v.y - w.y;\n return out;\n}\n\nexport function mulVec2(out: Vec2Value, m: number): Vec2Value {\n out.x *= m;\n out.y *= m;\n return out;\n}\n\nexport function scaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x = m * w.x;\n out.y = m * w.y;\n return out;\n}\n\nexport function plusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x += m * w.x;\n out.y += m * w.y;\n return out;\n}\n\nexport function minusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x -= m * w.x;\n out.y -= m * w.y;\n return out;\n}\n\nexport function combine2Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x;\n out.y = am * a.y + bm * b.y;\n return out;\n}\n\nexport function combine3Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value, cm: number, c: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x + cm * c.x;\n out.y = am * a.y + bm * b.y + cm * c.y;\n return out;\n}\n\nexport function normalizeVec2Length(out: Vec2Value): number {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length !== 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return length;\n}\n\nexport function normalizeVec2(out: Vec2Value): Vec2Value {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length > 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return out;\n}\n\nexport function crossVec2Num(out: Vec2Value, v: Vec2Value, w: number): Vec2Value {\n const x = w * v.y;\n const y = -w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossNumVec2(out: Vec2Value, w: number, v: Vec2Value): Vec2Value {\n const x = -w * v.y;\n const y = w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossVec2Vec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.y - a.y * b.x;\n}\n\nexport function dotVec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.x + a.y * b.y;\n}\n\nexport function lengthVec2(a: Vec2Value): number {\n return math_sqrt(a.x * a.x + a.y * a.y);\n}\n\nexport function lengthSqrVec2(a: Vec2Value): number {\n return a.x * a.x + a.y * a.y;\n}\n\nexport function distVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return math_sqrt(dx * dx + dy * dy);\n}\n\nexport function distSqrVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return dx * dx + dy * dy;\n}\n\nexport function dotVec3(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n}\n\nexport function setRotAngle(out: RotValue, a: number): RotValue {\n out.c = math_cos(a);\n out.s = math_sin(a);\n return out;\n}\n\nexport function rotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n out.x = q.c * v.x - q.s * v.y;\n out.y = q.s * v.x + q.c * v.y;\n return out;\n}\n\nexport function derotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n const x = q.c * v.x + q.s * v.y;\n const y = -q.s * v.x + q.c * v.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function rerotVec2(out: Vec2Value, before: RotValue, after: RotValue, v: Vec2Value): Vec2Value {\n const x0 = before.c * v.x + before.s * v.y;\n const y0 = -before.s * v.x + before.c * v.y;\n const x = after.c * x0 - after.s * y0;\n const y = after.s * x0 + after.c * y0;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function transform(x: number, y: number, a: number): TransformValue {\n return { p: vec2(x, y), q: rotation(a) };\n}\n\nexport function copyTransform(out: TransformValue, transform: TransformValue): TransformValue {\n out.p.x = transform.p.x;\n out.p.y = transform.p.y;\n out.q.s = transform.q.s;\n out.q.c = transform.q.c;\n return out;\n}\n\nexport function transformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const x = xf.q.c * v.x - xf.q.s * v.y + xf.p.x;\n const y = xf.q.s * v.x + xf.q.c * v.y + xf.p.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const px = v.x - xf.p.x;\n const py = v.y - xf.p.y;\n const x = (xf.q.c * px + xf.q.s * py);\n const y = (-xf.q.s * px + xf.q.c * py);\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function retransformVec2(out: Vec2Value, from: TransformValue, to: TransformValue, v: Vec2Value): Vec2Value {\n const x0 = from.q.c * v.x - from.q.s * v.y + from.p.x;\n const y0 = from.q.s * v.x + from.q.c * v.y + from.p.y;\n const px = x0 - to.p.x;\n const py = y0 - to.p.y;\n const x = to.q.c * px + to.q.s * py;\n const y = -to.q.s * px + to.q.c * py;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformTransform(out: TransformValue, a: TransformValue, b: TransformValue): TransformValue {\n const c = a.q.c * b.q.c + a.q.s * b.q.s;\n const s = a.q.c * b.q.s - a.q.s * b.q.c;\n const x = a.q.c * (b.p.x - a.p.x) + a.q.s * (b.p.y - a.p.y);\n const y = -a.q.s * (b.p.x - a.p.x) + a.q.c * (b.p.y - a.p.y);\n out.q.c = c;\n out.q.s = s;\n out.p.x = x;\n out.p.y = y;\n return out;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_atan2 = Math.atan2;\n\nexport interface RotValue {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n}\n\nexport class Rot {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n\n /** Initialize from an angle in radians. */\n constructor(angle?: number | RotValue) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Rot)) {\n return new Rot(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\n /** @hidden */\n static neo(angle: number): Rot {\n const obj = Object.create(Rot.prototype);\n obj.setAngle(angle);\n return obj;\n }\n\n static clone(rot: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n const obj = Object.create(Rot.prototype);\n obj.s = rot.s;\n obj.c = rot.c;\n return obj;\n }\n\n static identity(): Rot {\n const obj = Object.create(Rot.prototype);\n obj.s = 0.0;\n obj.c = 1.0;\n return obj;\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.s) && Number.isFinite(obj.c);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Rot.isValid(o), \"Invalid Rot!\", o);\n }\n\n /** Set to the identity rotation. */\n setIdentity(): void {\n this.s = 0.0;\n this.c = 1.0;\n }\n\n set(angle: number | RotValue): void {\n if (typeof angle === \"object\") {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n\n } else {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n }\n\n setRot(angle: RotValue): void {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n }\n\n /** Set using an angle in radians. */\n setAngle(angle: number): void {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n\n /** Get the angle in radians. */\n getAngle(): number {\n return math_atan2(this.s, this.c);\n }\n\n /** Get the x-axis. */\n getXAxis(): Vec2 {\n return Vec2.neo(this.c, this.s);\n }\n\n /** Get the y-axis. */\n getYAxis(): Vec2 {\n return Vec2.neo(-this.s, this.c);\n }\n\n /** Multiply two rotations: q * r */\n static mul(rot: RotValue, m: RotValue): Rot;\n /** Rotate a vector */\n static mul(rot: RotValue, m: Vec2Value): Vec2;\n static mul(rot, m) {\n _ASSERT && Rot.assert(rot);\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Multiply two rotations: q * r */\n static mulRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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\n /** Rotate a vector */\n static mulVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n\n static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2 {\n const x = rot.c * (v.x - w.x) - rot.s * (v.y - w.y);\n const y = rot.s * (v.x - w.x) + rot.c * (v.y - w.y);\n return Vec2.neo(x, y);\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulT(rot: RotValue, m: RotValue): Rot;\n /** Inverse rotate a vector */\n static mulT(rot: RotValue, m: Vec2Value): Vec2;\n static mulT(rot, m) {\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulTRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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\n /** Inverse rotate a vector */\n static mulTVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"./Matrix\";\nimport { mod } from \"./Math\";\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { TransformValue } from \"./Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_atan2 = Math.atan2;\n/** @internal */ const math_PI = Math.PI;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * This describes the motion of a body/shape for TOI computation. Shapes are\n * defined with respect to the body origin, which may not coincide with the\n * center of mass. However, to support dynamics we must interpolate the center\n * of mass position.\n */\nexport class Sweep {\n /** Local center of mass position */\n localCenter = Vec2.zero();\n\n /** World center position */\n c = Vec2.zero();\n\n /** World angle */\n a = 0;\n\n /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */\n alpha0 = 0;\n\n c0 = Vec2.zero();\n a0 = 0;\n\n /** @internal */\n recycle() {\n matrix.zeroVec2(this.localCenter);\n matrix.zeroVec2(this.c);\n this.a = 0;\n this.alpha0 = 0;\n matrix.zeroVec2(this.c0);\n this.a0 = 0;\n }\n\n setTransform(xf: TransformValue): void {\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n\n this.a = this.a0 = math_atan2(xf.q.s, xf.q.c);\n }\n\n setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void {\n matrix.copyVec2(this.localCenter, localCenter);\n\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n }\n\n /**\n * Get the interpolated transform at a specific time.\n *\n * @param xf\n * @param beta A factor in [0,1], where 0 indicates alpha0\n */\n getTransform(xf: TransformValue, beta: number = 0): void {\n matrix.setRotAngle(xf.q, (1.0 - beta) * this.a0 + beta * this.a);\n matrix.combine2Vec2(xf.p, (1.0 - beta), this.c0, beta, this.c);\n\n // shift to origin\n matrix.minusVec2(xf.p, matrix.rotVec2(temp, xf.q, this.localCenter));\n }\n\n /**\n * Advance the sweep forward, yielding a new initial state.\n *\n * @param alpha The new initial time\n */\n advance(alpha: number): void {\n _ASSERT && console.assert(this.alpha0 < 1.0);\n const beta = (alpha - this.alpha0) / (1.0 - this.alpha0);\n matrix.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\n forward(): void {\n this.a0 = this.a;\n matrix.copyVec2(this.c0, this.c);\n }\n\n /**\n * normalize the angles in radians to be between -pi and pi.\n */\n normalize(): void {\n const a0 = mod(this.a0, -math_PI, +math_PI);\n this.a -= this.a0 - a0;\n this.a0 = a0;\n }\n\n set(that: Sweep): void {\n matrix.copyVec2(this.localCenter, that.localCenter);\n matrix.copyVec2(this.c, that.c);\n this.a = that.a;\n this.alpha0 = that.alpha0;\n matrix.copyVec2(this.c0, that.c0);\n this.a0 = that.a0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Rot, RotValue } from \"./Rot\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport type TransformValue = {\n p: Vec2Value;\n q: RotValue;\n};\n\n/**\n * A transform contains translation and rotation. It is used to represent the\n * position and orientation of rigid frames. Initialize using a position vector\n * and a rotation.\n */\nexport class Transform {\n /** position */\n p: Vec2;\n\n /** rotation */\n q: Rot;\n\n constructor(position?: Vec2Value, rotation?: number) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Transform)) {\n return new Transform(position, rotation);\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 rotation !== \"undefined\") {\n this.q.setAngle(rotation);\n }\n }\n\n static clone(xf: Transform): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(xf.p);\n obj.q = Rot.clone(xf.q);\n return obj;\n }\n\n /** @hidden */\n static neo(position: Vec2Value, rotation: Rot): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(position);\n obj.q = Rot.clone(rotation);\n return obj;\n }\n\n static identity(): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.zero();\n obj.q = Rot.identity();\n return obj;\n }\n\n /** Set this to the identity transform */\n setIdentity(): void {\n this.p.setZero();\n this.q.setIdentity();\n }\n\n /** Set position and angle */\n set(position: Vec2Value, rotation: number): void;\n /** Copy from another transform */\n set(xf: TransformValue): void;\n set(a: any, b?: any) {\n if (typeof b === \"undefined\") {\n this.p.set(a.p);\n this.q.set(a.q);\n } else {\n this.p.set(a);\n this.q.set(b);\n }\n }\n\n /** Set position and angle */\n setNum(position: Vec2Value, rotation: number) {\n this.p.setVec2(position);\n this.q.setAngle(rotation);\n }\n\n setTransform(xf: TransformValue): void {\n this.p.setVec2(xf.p);\n this.q.setRot(xf.q);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.p) && Rot.isValid(obj.q);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Transform.isValid(o), \"Invalid Transform!\", o);\n }\n\n static mul(a: TransformValue, b: Vec2Value): Vec2;\n static mul(a: TransformValue, b: TransformValue): Transform;\n // static mul(a: Transform, b: Vec2Value[]): Vec2[];\n // static mul(a: Transform, b: Transform[]): Transform[];\n static mul(a, b) {\n if (Array.isArray(b)) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n\n } else if (\"x\" in b && \"y\" in b) {\n return Transform.mulVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulXf(a, b);\n }\n }\n\n static mulAll(a: Transform, b: Vec2Value[]): Vec2[];\n static mulAll(a: Transform, b: Transform[]): Transform[];\n static mulAll(a: TransformValue, b) {\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n }\n\n /** @hidden @deprecated */\n static mulFn(a: TransformValue) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n return function(b: Vec2Value): Vec2 {\n return Transform.mul(a, b);\n };\n }\n\n static mulVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = (a.q.c * b.x - a.q.s * b.y) + a.p.x;\n const y = (a.q.s * b.x + a.q.c * b.y) + a.p.y;\n return Vec2.neo(x, y);\n }\n\n static mulXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p\n // = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p\n const xf = Transform.identity();\n xf.q = Rot.mulRot(a.q, b.q);\n xf.p = Vec2.add(Rot.mulVec2(a.q, b.p), a.p);\n return xf;\n }\n\n static mulT(a: TransformValue, b: Vec2Value): Vec2;\n static mulT(a: TransformValue, b: TransformValue): Transform;\n static mulT(a, b) {\n if (\"x\" in b && \"y\" in b) {\n return Transform.mulTVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulTXf(a, b);\n }\n }\n\n static mulTVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const px = b.x - a.p.x;\n const py = b.y - a.p.y;\n const x = (a.q.c * px + a.q.s * py);\n const y = (-a.q.s * px + a.q.c * py);\n return Vec2.neo(x, y);\n }\n\n static mulTXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q' * (B.q * v1 + B.p - A.p)\n // = A.q' * B.q * v1 + A.q' * (B.p - A.p)\n const xf = Transform.identity();\n xf.q.setRot(Rot.mulTRot(a.q, b.q));\n xf.p.setVec2(Rot.mulTVec2(a.q, Vec2.sub(b.p, a.p)));\n return xf;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2 } from \"../common/Vec2\";\n\nexport class Velocity {\n /** linear */\n v = Vec2.zero();\n\n /** angular */\n w = 0;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n\n\nexport class Position {\n /** location */\n c = Vec2.zero();\n\n /** angle */\n a = 0;\n\n // todo: cache sin/cos\n getTransform(xf: TransformValue, p: Vec2Value): TransformValue {\n // xf.q = rotation(this.a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(this.a);\n xf.q.s = math_sin(this.a);\n xf.p.x = this.c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = this.c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n }\n}\n\nexport function getTransform(xf: TransformValue, p: Vec2Value, c: Vec2Value, a: number): TransformValue {\n // xf.q = rotation(a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(a);\n xf.q.s = math_sin(a);\n xf.p.x = c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { MassData } from \"../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"./AABB\";\nimport { DistanceProxy } from \"./Distance\";\nimport type { Transform, TransformValue } from \"../common/Transform\";\nimport type { Vec2Value } from \"../common/Vec2\";\nimport { Style } from \"../util/Testbed\";\n\n// todo make shape an interface\n\n/**\n * A shape is used for collision detection. You can create a shape however you\n * like. Shapes used for simulation in World are created automatically when a\n * Fixture is created. Shapes may encapsulate one or more child shapes.\n */\nexport abstract class Shape {\n /** @hidden */ m_type: ShapeType;\n\n /**\n * @hidden\n * Radius of a shape. For polygonal shapes this must be b2_polygonRadius.\n * There is no support for making rounded polygons.\n */\n m_radius: number;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @hidden */\n abstract _reset(): void;\n\n static isValid(obj: any): boolean {\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\n abstract getRadius(): number;\n\n /**\n * Get the type of this shape. You can use this to down cast to the concrete\n * shape.\n *\n * @return the shape type.\n */\n abstract getType(): ShapeType;\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n abstract _clone(): Shape;\n\n /**\n * Get the number of child primitives.\n */\n abstract getChildCount(): number;\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n abstract testPoint(xf: TransformValue, p: Vec2Value): boolean;\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean;\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void;\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n abstract computeMass(massData: MassData, density?: number): void;\n\n abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void;\n\n}\n\nexport type ShapeType = \"circle\" | \"edge\" | \"polygon\" | \"chain\";\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Shape, ShapeType } from \"../collision/Shape\";\nimport { Body, MassData } from \"./Body\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const synchronize_aabb1 = new AABB();\n/** @internal */ const synchronize_aabb2 = new AABB();\n/** @internal */ const displacement = matrix.vec2(0, 0);\n\n/**\n * A fixture definition is used to create a fixture. This class defines an\n * abstract fixture definition. You can reuse fixture definitions safely.\n */\nexport interface FixtureOpt {\n userData?: unknown;\n /**\n * The friction coefficient, usually in the range [0,1]\n */\n friction?: number;\n /**\n * The restitution (elasticity) usually in the range [0,1]\n */\n restitution?: number;\n /**\n * The density, usually in kg/m^2\n */\n density?: number;\n /**\n * A sensor shape collects contact information but never generates a collision response.\n */\n isSensor?: boolean;\n /**\n * Zero, positive or negative collision group.\n * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide.\n */\n filterGroupIndex?: number;\n /**\n * Collision category bit or bits that this fixture belongs to.\n * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa.\n */\n filterCategoryBits?: number;\n /**\n * Collision category bit or bits that this fixture accept for collision.\n */\n filterMaskBits?: number;\n}\n\nexport interface FixtureDef extends FixtureOpt {\n shape: Shape;\n}\n\n/** @internal */ const FixtureDefDefault: FixtureOpt = {\n userData : null,\n friction : 0.2,\n restitution : 0.0,\n density : 0.0,\n isSensor : false,\n\n filterGroupIndex : 0,\n filterCategoryBits : 0x0001,\n filterMaskBits : 0xFFFF\n};\n\n/**\n * This proxy is used internally to connect shape children to the broad-phase.\n */\nexport class FixtureProxy {\n aabb: AABB;\n fixture: Fixture;\n childIndex: number;\n proxyId: number;\n constructor(fixture: Fixture, childIndex: number) {\n this.aabb = new AABB();\n this.fixture = fixture;\n this.childIndex = childIndex;\n this.proxyId;\n }\n}\n\n/**\n * A fixture is used to attach a shape to a body for collision detection. A\n * fixture inherits its transform from its parent. Fixtures hold additional\n * non-geometric data such as friction, collision filters, etc.\n *\n * To create a new Fixture use {@link Body.createFixture}.\n */\nexport class Fixture {\n /** @internal */ m_body: Body;\n /** @internal */ m_friction: number;\n /** @internal */ m_restitution: number;\n /** @internal */ m_density: number;\n /** @internal */ m_isSensor: boolean;\n /** @internal */ m_filterGroupIndex: number;\n /** @internal */ m_filterCategoryBits: number;\n /** @internal */ m_filterMaskBits: number;\n /** @internal */ m_shape: Shape;\n /** @internal */ m_next: Fixture | null;\n /** @internal */ m_proxies: FixtureProxy[];\n // 0 indicates inactive state, this is not the same as m_proxies.length\n /** @internal */ m_proxyCount: number;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(body: Body, def: FixtureDef);\n constructor(body: Body, shape: Shape, def?: FixtureOpt);\n constructor(body: Body, shape: Shape, density?: number);\n /** @internal */\n constructor(body: Body, shape?, def?) {\n if (shape.shape) {\n def = shape;\n shape = shape.shape;\n\n } else if (typeof def === \"number\") {\n def = {density : def};\n }\n\n def = options(def, FixtureDefDefault);\n\n this.m_body = body;\n\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\n this.m_filterGroupIndex = def.filterGroupIndex;\n this.m_filterCategoryBits = def.filterCategoryBits;\n this.m_filterMaskBits = def.filterMaskBits;\n\n // TODO validate shape\n this.m_shape = shape; // .clone();\n\n this.m_next = null;\n\n this.m_proxies = [];\n this.m_proxyCount = 0;\n\n // fixture proxies are created here,\n // but they are activate in when a fixture is added to body\n const childCount = this.m_shape.getChildCount();\n for (let i = 0; i < childCount; ++i) {\n this.m_proxies[i] = new FixtureProxy(this, i);\n }\n\n this.m_userData = def.userData;\n }\n\n /** @hidden Re-setup fixture. */\n _reset(): void {\n const body = this.getBody();\n const broadPhase = body.m_world.m_broadPhase;\n this.destroyProxies(broadPhase);\n if (this.m_shape._reset) {\n this.m_shape._reset();\n }\n const childCount = this.m_shape.getChildCount();\n for (let 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\n /** @internal */\n _serialize(): object {\n return {\n friction: this.m_friction,\n restitution: this.m_restitution,\n density: this.m_density,\n isSensor: this.m_isSensor,\n\n filterGroupIndex: this.m_filterGroupIndex,\n filterCategoryBits: this.m_filterCategoryBits,\n filterMaskBits: this.m_filterMaskBits,\n\n shape: this.m_shape,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, body: any, restore: any): Fixture {\n const shape = restore(Shape, data.shape);\n const fixture = shape && new Fixture(body, shape, data);\n return fixture;\n }\n\n /**\n * Get the type of the child shape. You can use this to down cast to the\n * concrete shape.\n */\n getType(): ShapeType {\n return this.m_shape.m_type;\n }\n\n /**\n * Get the child shape. You can modify the child shape, however you should not\n * change the number of vertices because this will crash some collision caching\n * mechanisms. Manipulating the shape may lead to non-physical behavior.\n */\n getShape(): Shape {\n return this.m_shape;\n }\n\n /**\n * A sensor shape collects contact information but never generates a collision\n * response.\n */\n isSensor(): boolean {\n return this.m_isSensor;\n }\n\n /**\n * Set if this fixture is a sensor.\n */\n setSensor(sensor: boolean): void {\n if (sensor != this.m_isSensor) {\n this.m_body.setAwake(true);\n this.m_isSensor = sensor;\n }\n }\n\n // /**\n // * Get the contact filtering data.\n // */\n // getFilterData() {\n // return this.m_filter;\n // }\n\n /**\n * Get the user data that was assigned in the fixture definition. Use this to\n * store your application specific data.\n */\n getUserData(): unknown {\n return this.m_userData;\n }\n\n /**\n * Set the user data. Use this to store your application specific data.\n */\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get the parent body of this fixture. This is null if the fixture is not\n * attached.\n */\n getBody(): Body {\n return this.m_body;\n }\n\n /**\n * Get the next fixture in the parent body's fixture list.\n */\n getNext(): Fixture | null {\n return this.m_next;\n }\n\n /**\n * Get the density of this fixture.\n */\n getDensity(): number {\n return this.m_density;\n }\n\n /**\n * Set the density of this fixture. This will _not_ automatically adjust the\n * mass of the body. You must call Body.resetMassData to update the body's mass.\n */\n setDensity(density: number): void {\n _ASSERT && console.assert(Number.isFinite(density) && density >= 0.0);\n this.m_density = density;\n }\n\n /**\n * Get the coefficient of friction, usually in the range [0,1].\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Set the coefficient of friction. This will not change the friction of\n * existing contacts.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the coefficient of restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Set the coefficient of restitution. This will not change the restitution of\n * existing contacts.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Test a point in world coordinates for containment in this fixture.\n */\n testPoint(p: Vec2Value): boolean {\n return this.m_shape.testPoint(this.m_body.getTransform(), p);\n }\n\n /**\n * Cast a ray against this shape.\n */\n rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean {\n return this.m_shape.rayCast(output, input, this.m_body.getTransform(), childIndex);\n }\n\n /**\n * Get the mass data for this fixture. The mass data is based on the density and\n * the shape. The rotational inertia is about the shape's origin. This operation\n * may be expensive.\n */\n getMassData(massData: MassData): void {\n this.m_shape.computeMass(massData, this.m_density);\n }\n\n /**\n * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a\n * more accurate AABB, compute it using the shape and the body transform.\n */\n getAABB(childIndex: number): AABB {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_proxies.length);\n return this.m_proxies[childIndex].aabb;\n }\n\n /**\n * These support body activation/deactivation.\n */\n createProxies(broadPhase: BroadPhase, xf: TransformValue): void {\n _ASSERT && console.assert(this.m_proxyCount == 0);\n\n // Create proxies in the broad-phase.\n this.m_proxyCount = this.m_shape.getChildCount();\n\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n this.m_shape.computeAABB(proxy.aabb, xf, i);\n proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy);\n }\n }\n\n destroyProxies(broadPhase: BroadPhase): void {\n // Destroy proxies in the broad-phase.\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n broadPhase.destroyProxy(proxy.proxyId);\n proxy.proxyId = null;\n }\n\n this.m_proxyCount = 0;\n }\n\n /**\n * Updates this fixture proxy in broad-phase (with combined AABB of current and\n * next transformation).\n */\n synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void {\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n // Compute an AABB that covers the swept shape (may miss some rotation\n // effect).\n this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex);\n this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex);\n\n proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2);\n\n matrix.subVec2(displacement, xf2.p, xf1.p);\n\n broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement);\n }\n }\n\n /**\n * Set the contact filtering data. This will not update contacts until the next\n * time step when either parent body is active and awake. This automatically\n * calls refilter.\n */\n setFilterData(filter: { groupIndex: number, categoryBits: number, maskBits: number }): void {\n this.m_filterGroupIndex = filter.groupIndex;\n this.m_filterCategoryBits = filter.categoryBits;\n this.m_filterMaskBits = filter.maskBits;\n this.refilter();\n }\n\n getFilterGroupIndex(): number {\n return this.m_filterGroupIndex;\n }\n\n setFilterGroupIndex(groupIndex: number): void {\n this.m_filterGroupIndex = groupIndex;\n this.refilter();\n }\n\n getFilterCategoryBits(): number {\n return this.m_filterCategoryBits;\n }\n\n setFilterCategoryBits(categoryBits: number): void {\n this.m_filterCategoryBits = categoryBits;\n this.refilter();\n }\n\n getFilterMaskBits(): number {\n return this.m_filterMaskBits;\n }\n\n setFilterMaskBits(maskBits: number): void {\n this.m_filterMaskBits = maskBits;\n this.refilter();\n }\n\n /**\n * Call this if you want to establish collision that was previously disabled by\n * ContactFilter.\n */\n refilter(): void {\n if (this.m_body == null) {\n return;\n }\n\n // Flag associated contacts for filtering.\n let edge = this.m_body.getContactList();\n while (edge) {\n const contact = edge.contact;\n const fixtureA = contact.getFixtureA();\n const fixtureB = contact.getFixtureB();\n if (fixtureA == this || fixtureB == this) {\n contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n\n const world = this.m_body.getWorld();\n\n if (world == null) {\n return;\n }\n\n // Touch each proxy so that new pairs may be created\n const broadPhase = world.m_broadPhase;\n for (let i = 0; i < this.m_proxyCount; ++i) {\n broadPhase.touchProxy(this.m_proxies[i].proxyId);\n }\n }\n\n /**\n * Implement this method to provide collision filtering, if you want finer\n * control over contact creation.\n *\n * Return true if contact calculations should be performed between these two\n * fixtures.\n *\n * Warning: for performance reasons this is only called when the AABBs begin to\n * overlap.\n */\n shouldCollide(that: Fixture): boolean {\n\n if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) {\n return that.m_filterGroupIndex > 0;\n }\n\n const collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0;\n const collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0;\n const collide = collideA && collideB;\n return collide;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Velocity } from \"./Velocity\";\nimport { Position } from \"./Position\";\nimport { Fixture, FixtureDef, FixtureOpt } from \"./Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { JointEdge } from \"./Joint\";\nimport { World } from \"./World\";\nimport { ContactEdge } from \"./Contact\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nexport type BodyType = \"static\" | \"kinematic\" | \"dynamic\";\n\n/** @internal */ const STATIC = \"static\";\n/** @internal */ const KINEMATIC = \"kinematic\";\n/** @internal */ const DYNAMIC = \"dynamic\";\n\n/** @internal */ const oldCenter = matrix.vec2(0, 0);\n/** @internal */ const localCenter = matrix.vec2(0, 0);\n/** @internal */ const shift = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n\nexport interface BodyDef {\n /**\n * Body types are static, kinematic, or dynamic. Note: if a dynamic\n * body would have zero mass, the mass is set to one.\n */\n type?: BodyType;\n /**\n * The world position of the body. Avoid creating bodies at the\n * origin since this can lead to many overlapping shapes.\n */\n position?: Vec2Value;\n /**\n * The world angle of the body in radians.\n */\n angle?: number;\n /**\n * The linear velocity of the body's origin in world co-ordinates.\n */\n linearVelocity?: Vec2Value;\n angularVelocity?: number;\n /**\n * Linear damping is use to reduce the linear velocity. The\n * damping parameter can be larger than 1.0 but the damping effect becomes\n * sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n linearDamping?: number;\n /**\n * Angular damping is use to reduce the angular velocity.\n * The damping parameter can be larger than 1.0 but the damping effect\n * becomes sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n angularDamping?: number;\n /**\n * Should this body be prevented from rotating? Useful for characters.\n */\n fixedRotation?: boolean;\n /**\n * Is this a fast moving body that should be prevented from\n * tunneling through other moving bodies? Note that all bodies are\n * prevented from tunneling through kinematic and static bodies. This\n * setting is only considered on dynamic bodies. Warning: You should use\n * this flag sparingly since it increases processing time.\n */\n bullet?: boolean;\n gravityScale?: number;\n /**\n * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage.\n */\n allowSleep?: boolean;\n /**\n * Is this body initially awake or sleeping?\n */\n awake?: boolean;\n /**\n * Does this body start out active?\n */\n active?: boolean;\n userData?: any;\n}\n\n/** @internal */ const BodyDefDefault: BodyDef = {\n type : STATIC,\n position : Vec2.zero(),\n angle : 0.0,\n\n linearVelocity : Vec2.zero(),\n angularVelocity : 0.0,\n\n linearDamping : 0.0,\n angularDamping : 0.0,\n\n fixedRotation : false,\n bullet : false,\n gravityScale : 1.0,\n\n allowSleep : true,\n awake : true,\n active : true,\n\n userData : null\n};\n\n/**\n * MassData This holds the mass data computed for a shape.\n */\nexport interface MassData {\n /** The mass of the shape, usually in kilograms. */\n mass: number;\n /** The position of the shape's centroid relative to the shape's origin. */\n center: Vec2Value;\n /** The rotational inertia of the shape about the local origin. */\n I: number;\n}\n\n/**\n * A rigid body composed of one or more fixtures.\n *\n * To create a new Body use {@link World.createBody}.\n */\nexport class Body {\n /**\n * A static body does not move under simulation and behaves as if it has infinite mass.\n * Internally, zero is stored for the mass and the inverse mass.\n * Static bodies can be moved manually by the user.\n * A static body has zero velocity.\n * Static bodies do not collide with other static or kinematic bodies.\n */\n static readonly STATIC: BodyType = \"static\";\n /**\n * A kinematic body moves under simulation according to its velocity.\n * Kinematic bodies do not respond to forces.\n * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity.\n * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass.\n * Kinematic bodies do not collide with other kinematic or static bodies.\n */\n static readonly KINEMATIC: BodyType = \"kinematic\";\n\n /**\n * A dynamic body is fully simulated.\n * They can be moved manually by the user, but normally they move according to forces.\n * A dynamic body can collide with all body types.\n * A dynamic body always has finite, non-zero mass.\n * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate.\n */\n static readonly DYNAMIC: BodyType = \"dynamic\";\n\n /** @internal */ m_world: World;\n /** @internal */ m_awakeFlag: boolean;\n /** @internal */ m_autoSleepFlag: boolean;\n /** @internal */ m_bulletFlag: boolean;\n /** @internal */ m_fixedRotationFlag: boolean;\n /** @internal */ m_activeFlag: boolean;\n /** @internal */ m_islandFlag: boolean;\n /** @internal */ m_toiFlag: boolean;\n /** @internal */ m_userData: unknown;\n /** @internal */ m_type: BodyType;\n /** @internal */ m_mass: number;\n /** @internal */ m_invMass: number;\n /** @internal Rotational inertia about the center of mass. */\n m_I: number;\n /** @internal */ m_invI: number;\n /** @internal the body origin transform */\n m_xf: Transform;\n /** @internal the swept motion for CCD */\n m_sweep: Sweep;\n // position and velocity correction\n /** @internal */ c_velocity: Velocity;\n /** @internal */ c_position: Position;\n /** @internal */ m_force: Vec2;\n /** @internal */ m_torque: number;\n /** @internal */ m_linearVelocity: Vec2;\n /** @internal */ m_angularVelocity: number;\n /** @internal */ m_linearDamping: number;\n /** @internal */ m_angularDamping: number;\n /** @internal */ m_gravityScale: number;\n /** @internal */ m_sleepTime: number;\n /** @internal */ m_jointList: JointEdge | null;\n /** @internal */ m_contactList: ContactEdge | null;\n /** @internal */ m_fixtureList: Fixture | null;\n /** @internal */ m_prev: Body | null;\n /** @internal */ m_next: Body | null;\n /** @internal */ m_destroyed: boolean;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @internal */\n constructor(world: World, def: BodyDef) {\n def = options(def, BodyDefDefault);\n\n _ASSERT && console.assert(Vec2.isValid(def.position));\n _ASSERT && console.assert(Vec2.isValid(def.linearVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angle));\n _ASSERT && console.assert(Number.isFinite(def.angularVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angularDamping) && def.angularDamping >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.linearDamping) && def.linearDamping >= 0.0);\n\n this.m_world = world;\n\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\n this.m_islandFlag = false;\n this.m_toiFlag = false;\n\n this.m_userData = def.userData;\n this.m_type = def.type;\n\n if (this.m_type == DYNAMIC) {\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n } else {\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n }\n\n // Rotational inertia about the center of mass.\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n // the body origin transform\n this.m_xf = Transform.identity();\n this.m_xf.p.setVec2(def.position);\n this.m_xf.q.setAngle(def.angle);\n\n // the swept motion for CCD\n this.m_sweep = new Sweep();\n this.m_sweep.setTransform(this.m_xf);\n\n // position and velocity correction\n this.c_velocity = new Velocity();\n this.c_position = new Position();\n\n this.m_force = Vec2.zero();\n this.m_torque = 0.0;\n\n this.m_linearVelocity = Vec2.clone(def.linearVelocity);\n this.m_angularVelocity = def.angularVelocity;\n\n this.m_linearDamping = def.linearDamping;\n this.m_angularDamping = def.angularDamping;\n this.m_gravityScale = def.gravityScale;\n\n this.m_sleepTime = 0.0;\n\n this.m_jointList = null;\n this.m_contactList = null;\n this.m_fixtureList = null;\n\n this.m_prev = null;\n this.m_next = null;\n\n this.m_destroyed = false;\n }\n\n /** @internal */\n _serialize(): object {\n const fixtures = [];\n for (let 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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): Body {\n const body = new Body(world, data);\n\n if (data.fixtures) {\n for (let i = data.fixtures.length - 1; i >= 0; i--) {\n const fixture = restore(Fixture, data.fixtures[i], body);\n body._addFixture(fixture);\n }\n }\n return body;\n }\n\n isWorldLocked(): boolean {\n return this.m_world && this.m_world.isLocked() ? true : false;\n }\n\n getWorld(): World {\n return this.m_world;\n }\n\n getNext(): Body | null {\n return this.m_next;\n }\n\n setUserData(data: any): void {\n this.m_userData = data;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n getFixtureList(): Fixture | null {\n return this.m_fixtureList;\n }\n\n getJointList(): JointEdge | null {\n return this.m_jointList;\n }\n\n /**\n * Warning: this list changes during the time step and you may miss some\n * collisions if you don't use ContactListener.\n */\n getContactList(): ContactEdge | null {\n return this.m_contactList;\n }\n\n isStatic(): boolean {\n return this.m_type == STATIC;\n }\n\n isDynamic(): boolean {\n return this.m_type == DYNAMIC;\n }\n\n isKinematic(): boolean {\n return this.m_type == KINEMATIC;\n }\n\n /**\n * This will alter the mass and velocity.\n */\n setStatic(): Body {\n this.setType(STATIC);\n return this;\n }\n\n setDynamic(): Body {\n this.setType(DYNAMIC);\n return this;\n }\n\n setKinematic(): Body {\n this.setType(KINEMATIC);\n return this;\n }\n\n /**\n * Get the type of the body.\n */\n getType(): BodyType {\n return this.m_type;\n }\n\n /**\n * Set the type of the body to \"static\", \"kinematic\" or \"dynamic\".\n * @param type The type of the body.\n */\n setType(type: BodyType): void {\n _ASSERT && console.assert(type === STATIC || type === KINEMATIC || type === DYNAMIC);\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type == type) {\n return;\n }\n\n this.m_type = type;\n\n this.resetMassData();\n\n if (this.m_type == STATIC) {\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_sweep.forward();\n this.synchronizeFixtures();\n }\n\n this.setAwake(true);\n\n this.m_force.setZero();\n this.m_torque = 0.0;\n\n // Delete the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n\n // Touch the proxies so that new contacts will be created (when appropriate)\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n for (let i = 0; i < f.m_proxyCount; ++i) {\n broadPhase.touchProxy(f.m_proxies[i].proxyId);\n }\n }\n }\n\n isBullet(): boolean {\n return this.m_bulletFlag;\n }\n\n /**\n * Should this body be treated like a bullet for continuous collision detection?\n */\n setBullet(flag: boolean): void {\n this.m_bulletFlag = !!flag;\n }\n\n isSleepingAllowed(): boolean {\n return this.m_autoSleepFlag;\n }\n\n setSleepingAllowed(flag: boolean): void {\n this.m_autoSleepFlag = !!flag;\n if (this.m_autoSleepFlag == false) {\n this.setAwake(true);\n }\n }\n\n isAwake(): boolean {\n return this.m_awakeFlag;\n }\n\n /**\n * Set the sleep state of the body. A sleeping body has very low CPU cost.\n *\n * @param flag Set to true to wake the body, false to put it to sleep.\n */\n setAwake(flag: boolean): void {\n if (flag) {\n this.m_awakeFlag = true;\n this.m_sleepTime = 0.0;\n } else {\n this.m_awakeFlag = false;\n this.m_sleepTime = 0.0;\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_force.setZero();\n this.m_torque = 0.0;\n }\n }\n\n isActive(): boolean {\n return this.m_activeFlag;\n }\n\n /**\n * Set the active state of the body. An inactive body is not simulated and\n * cannot be collided with or woken up. If you pass a flag of true, all fixtures\n * will be added to the broad-phase. If you pass a flag of false, all fixtures\n * will be removed from the broad-phase and all contacts will be destroyed.\n * Fixtures and joints are otherwise unaffected.\n *\n * You may continue to create/destroy fixtures and joints on inactive bodies.\n * Fixtures on an inactive body are implicitly inactive and will not participate\n * in collisions, ray-casts, or queries. Joints connected to an inactive body\n * are implicitly inactive. An inactive body is still owned by a World object\n * and remains\n */\n setActive(flag: boolean): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (flag == this.m_activeFlag) {\n return;\n }\n\n this.m_activeFlag = !!flag;\n\n if (this.m_activeFlag) {\n // Create all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.createProxies(broadPhase, this.m_xf);\n }\n\t\t // Contacts are created at the beginning of the next\n\t\t this.m_world.m_newFixture = true;\n } else {\n // Destroy all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.destroyProxies(broadPhase);\n }\n\n // Destroy the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n }\n }\n\n isFixedRotation(): boolean {\n return this.m_fixedRotationFlag;\n }\n\n /**\n * Set this body to have fixed rotation. This causes the mass to be reset.\n */\n setFixedRotation(flag: boolean): void {\n if (this.m_fixedRotationFlag == flag) {\n return;\n }\n\n this.m_fixedRotationFlag = !!flag;\n\n this.m_angularVelocity = 0.0;\n\n this.resetMassData();\n }\n\n /**\n * Get the world transform for the body's origin.\n */\n getTransform(): Transform {\n return this.m_xf;\n }\n\n /**\n * Set the position of the body's origin and rotation. Manipulating a body's\n * transform may cause non-physical behavior. Note: contacts are updated on the\n * next call to World.step.\n *\n * @param position The world position of the body's local origin.\n * @param angle The world rotation in radians.\n */\n setTransform(position: Vec2Value, angle: number): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n this.m_xf.setNum(position, angle);\n this.m_sweep.setTransform(this.m_xf);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let 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\n synchronizeTransform(): void {\n this.m_sweep.getTransform(this.m_xf, 1);\n }\n\n /**\n * Update fixtures in broad-phase.\n */\n synchronizeFixtures(): void {\n this.m_sweep.getTransform(xf, 0);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.synchronize(broadPhase, xf, this.m_xf);\n }\n }\n\n /**\n * Used in TOI.\n */\n advance(alpha: number): void {\n // Advance to the new safe time. This doesn't sync the broad-phase.\n this.m_sweep.advance(alpha);\n matrix.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\n /**\n * Get the world position for the body's origin.\n */\n getPosition(): Vec2 {\n return this.m_xf.p;\n }\n\n setPosition(p: Vec2Value): void {\n this.setTransform(p, this.m_sweep.a);\n }\n\n /**\n * Get the current world rotation angle in radians.\n */\n getAngle(): number {\n return this.m_sweep.a;\n }\n\n setAngle(angle: number): void {\n this.setTransform(this.m_xf.p, angle);\n }\n\n /**\n * Get the world position of the center of mass.\n */\n getWorldCenter(): Vec2 {\n return this.m_sweep.c;\n }\n\n /**\n * Get the local position of the center of mass.\n */\n getLocalCenter(): Vec2 {\n return this.m_sweep.localCenter;\n }\n\n /**\n * Get the linear velocity of the center of mass.\n *\n * @return the linear velocity of the center of mass.\n */\n getLinearVelocity(): Vec2 {\n return this.m_linearVelocity;\n }\n\n /**\n * Get the world linear velocity of a world point attached to this body.\n *\n * @param worldPoint A point in world coordinates.\n */\n getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2 {\n const localCenter = Vec2.sub(worldPoint, this.m_sweep.c);\n return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity,\n localCenter));\n }\n\n /**\n * Get the world velocity of a local point.\n *\n * @param localPoint A point in local coordinates.\n */\n getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2 {\n return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint));\n }\n\n /**\n * Set the linear velocity of the center of mass.\n *\n * @param v The new linear velocity of the center of mass.\n */\n setLinearVelocity(v: Vec2Value): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (Vec2.dot(v, v) > 0.0) {\n this.setAwake(true);\n }\n this.m_linearVelocity.setVec2(v);\n }\n\n /**\n * Get the angular velocity.\n *\n * @returns the angular velocity in radians/second.\n */\n getAngularVelocity(): number {\n return this.m_angularVelocity;\n }\n\n /**\n * Set the angular velocity.\n *\n * @param omega The new angular velocity in radians/second.\n */\n setAngularVelocity(w: number): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (w * w > 0.0) {\n this.setAwake(true);\n }\n this.m_angularVelocity = w;\n }\n\n getLinearDamping(): number {\n return this.m_linearDamping;\n }\n\n setLinearDamping(linearDamping: number): void {\n this.m_linearDamping = linearDamping;\n }\n\n getAngularDamping(): number {\n return this.m_angularDamping;\n }\n\n setAngularDamping(angularDamping: number): void {\n this.m_angularDamping = angularDamping;\n }\n\n getGravityScale(): number {\n return this.m_gravityScale;\n }\n\n /**\n * Scale the gravity applied to this body.\n */\n setGravityScale(scale: number): void {\n this.m_gravityScale = scale;\n }\n\n /**\n * Get the total mass of the body.\n *\n * @returns The mass, usually in kilograms (kg).\n */\n getMass(): number {\n return this.m_mass;\n }\n\n /**\n * Get the rotational inertia of the body about the local origin.\n *\n * @return the rotational inertia, usually in kg-m^2.\n */\n getInertia(): number {\n return this.m_I + this.m_mass\n * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter);\n }\n\n /**\n * Copy the mass data of the body to data.\n */\n getMassData(data: MassData): void {\n data.mass = this.m_mass;\n data.I = this.getInertia();\n matrix.copyVec2(data.center, this.m_sweep.localCenter);\n }\n\n /**\n * This resets the mass properties to the sum of the mass properties of the\n * fixtures. This normally does not need to be called unless you called\n * SetMassData to override the mass and you later want to reset the mass.\n */\n resetMassData(): void {\n // Compute mass data from shapes. Each shape has its own density.\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n matrix.zeroVec2(this.m_sweep.localCenter);\n\n // Static and kinematic bodies have zero mass.\n if (this.isStatic() || this.isKinematic()) {\n matrix.copyVec2(this.m_sweep.c0, this.m_xf.p);\n matrix.copyVec2(this.m_sweep.c, this.m_xf.p);\n this.m_sweep.a0 = this.m_sweep.a;\n return;\n }\n\n _ASSERT && console.assert(this.isDynamic());\n\n // Accumulate mass over all fixtures.\n matrix.zeroVec2(localCenter);\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n if (f.m_density == 0.0) {\n continue;\n }\n\n const massData: MassData = {\n mass: 0,\n center: matrix.vec2(0, 0),\n I: 0\n };\n f.getMassData(massData);\n this.m_mass += massData.mass;\n matrix.plusScaleVec2(localCenter, massData.mass, massData.center);\n this.m_I += massData.I;\n }\n\n // Compute center of mass.\n if (this.m_mass > 0.0) {\n this.m_invMass = 1.0 / this.m_mass;\n matrix.scaleVec2(localCenter, this.m_invMass, localCenter);\n\n } else {\n // Force all dynamic bodies to have a positive mass.\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n }\n\n if (this.m_I > 0.0 && this.m_fixedRotationFlag == false) {\n // Center the inertia about the center of mass.\n this.m_I -= this.m_mass * matrix.dotVec2(localCenter, localCenter);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n\n } else {\n this.m_I = 0.0;\n this.m_invI = 0.0;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(localCenter, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Set the mass properties to override the mass properties of the fixtures. Note\n * that this changes the center of mass position. Note that creating or\n * destroying fixtures can also alter the mass. This function has no effect if\n * the body isn't dynamic.\n *\n * @param massData The mass properties.\n */\n setMassData(massData: MassData): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n this.m_mass = massData.mass;\n if (this.m_mass <= 0.0) {\n this.m_mass = 1.0;\n }\n\n this.m_invMass = 1.0 / this.m_mass;\n\n if (massData.I > 0.0 && this.m_fixedRotationFlag == false) {\n this.m_I = massData.I - this.m_mass * matrix.dotVec2(massData.center, massData.center);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(massData.center, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Apply a force at a world point. If the force is not applied at the center of\n * mass, it will generate a torque and affect the angular velocity. This wakes\n * up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyForce(force: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping.\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), force);\n }\n }\n\n /**\n * Apply a force to the center of mass. This wakes up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param wake Also wake up the body\n */\n applyForceToCenter(force: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n }\n }\n\n /**\n * Apply a torque. This affects the angular velocity without affecting the\n * linear velocity of the center of mass. This wakes up the body.\n *\n * @param torque About the z-axis (out of the screen), usually in N-m.\n * @param wake Also wake up the body\n */\n applyTorque(torque: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_torque += torque;\n }\n }\n\n /**\n * Apply an impulse at a point. This immediately modifies the velocity. It also\n * modifies the angular velocity if the point of application is not at the\n * center of mass. This wakes up the body.\n *\n * @param impulse The world impulse vector, usually in N-seconds or kg-m/s.\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n\n // Don't accumulate velocity if the body is sleeping\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(point, this.m_sweep.c), impulse);\n }\n }\n\n /**\n * Apply an angular impulse.\n *\n * @param impulse The angular impulse in units of kg*m*m/s\n * @param wake Also wake up the body\n */\n applyAngularImpulse(impulse: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate velocity if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_angularVelocity += this.m_invI * impulse;\n }\n }\n\n /**\n * This is used to test if two bodies should collide.\n * \n * Bodies do not collide when:\n * - Neither of them is dynamic\n * - They are connected by a joint with collideConnected == false\n */\n shouldCollide(that: Body): boolean {\n // At least one body should be dynamic.\n if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) {\n return false;\n }\n // Does a joint prevent collision?\n for (let 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\n /** @internal Used for deserialize. */\n _addFixture(fixture: Fixture): Fixture {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.createProxies(broadPhase, this.m_xf);\n }\n\n fixture.m_next = this.m_fixtureList;\n this.m_fixtureList = fixture;\n\n // Adjust mass properties if needed.\n if (fixture.m_density > 0.0) {\n this.resetMassData();\n }\n\n // Let the world know we have a new fixture. This will cause new contacts\n // to be created at the beginning of the next time step.\n this.m_world.m_newFixture = true;\n\n return fixture;\n }\n\n /**\n * Creates a fixture and attach it to this body.\n *\n * If the density is non-zero, this function automatically updates the mass of\n * the body.\n *\n * Contacts are not created until the next time step.\n *\n * Warning: This function is locked during callbacks.\n */\n createFixture(def: FixtureDef): Fixture;\n createFixture(shape: Shape, opt?: FixtureOpt): Fixture;\n createFixture(shape: Shape, density?: number): Fixture;\n // tslint:disable-next-line:typedef\n createFixture(shape, fixdef?) {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n const fixture = new Fixture(this, shape, fixdef);\n this._addFixture(fixture);\n return fixture;\n }\n\n /**\n * Destroy a fixture. This removes the fixture from the broad-phase and destroys\n * all contacts associated with this fixture. This will automatically adjust the\n * mass of the body if the body is dynamic and the fixture has positive density.\n * All fixtures attached to a body are implicitly destroyed when the body is\n * destroyed.\n *\n * Warning: This function is locked during callbacks.\n *\n * @param fixture The fixture to be removed.\n */\n destroyFixture(fixture: Fixture): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n _ASSERT && console.assert(fixture.m_body == this);\n\n // Remove the fixture from this body's singly linked list.\n let found = false;\n if (this.m_fixtureList === fixture) {\n this.m_fixtureList = fixture.m_next;\n found = true;\n\n } else {\n let node = this.m_fixtureList;\n while (node != null) {\n if (node.m_next === fixture) {\n node.m_next = fixture.m_next;\n found = true;\n break;\n }\n node = node.m_next;\n }\n }\n\n // You tried to remove a shape that is not attached to this body.\n _ASSERT && console.assert(found);\n\n // Destroy any contacts associated with the fixture.\n let edge = this.m_contactList;\n while (edge) {\n const c = edge.contact;\n edge = edge.next;\n\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n\n if (fixture == fixtureA || fixture == fixtureB) {\n // This destroys the contact and removes it from\n // this body's contact list.\n this.m_world.destroyContact(c);\n }\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.destroyProxies(broadPhase);\n }\n\n fixture.m_body = null;\n fixture.m_next = null;\n\n this.m_world.publish(\"remove-fixture\", fixture);\n\n // Reset the mass data.\n this.resetMassData();\n }\n\n /**\n * Get the corresponding world point of a local point.\n */\n getWorldPoint(localPoint: Vec2Value): Vec2 {\n return Transform.mulVec2(this.m_xf, localPoint);\n }\n\n /**\n * Get the corresponding world vector of a local vector.\n */\n getWorldVector(localVector: Vec2Value): Vec2 {\n return Rot.mulVec2(this.m_xf.q, localVector);\n }\n\n /**\n * Gets the corresponding local point of a world point.\n */\n getLocalPoint(worldPoint: Vec2Value): Vec2 {\n return Transform.mulTVec2(this.m_xf, worldPoint);\n }\n\n /**\n * Gets the corresponding local vector of a world vector.\n */\n getLocalVector(worldVector: Vec2Value): Vec2 {\n return Rot.mulTVec2(this.m_xf.q, worldVector);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2, Vec2Value } from \"../common/Vec2\";\nimport type { Body } from \"./Body\";\nimport { TimeStep } from \"./Solver\";\nimport { Style } from \"../util/Testbed\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/**\n * A joint edge is used to connect bodies and joints together in a joint graph\n * where each body is a node and each joint is an edge. A joint edge belongs to\n * a doubly linked list maintained in each attached body. Each joint has two\n * joint nodes, one for each attached body.\n */\nexport class JointEdge {\n /**\n * provides quick access to the other body attached.\n */\n other: Body | null = null;\n /**\n * the joint\n */\n joint: Joint | null = null;\n /**\n * prev the previous joint edge in the body's joint list\n */\n prev: JointEdge | null = null;\n /**\n * the next joint edge in the body's joint list\n */\n next: JointEdge | null = null;\n}\n\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointOpt {\n /**\n * Use this to attach application specific data to your joints.\n */\n userData?: any;\n /**\n * Set this flag to true if the attached bodies\n * should collide.\n */\n collideConnected?: boolean;\n}\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointDef extends JointOpt {\n /**\n * The first attached body.\n */\n bodyA: Body;\n /**\n * The second attached body.\n */\n bodyB: Body;\n}\n\n/** @internal */ const DEFAULTS = {\n userData : null,\n collideConnected : false\n};\n\n/**\n * The base joint class. Joints are used to constraint two bodies together in\n * various fashions. Some joints also feature limits and motors.\n */\nexport abstract class Joint {\n\n /** @internal */ m_type: string = \"unknown-joint\";\n\n /** @internal */ m_bodyA: Body;\n /** @internal */ m_bodyB: Body;\n\n /** @internal */ m_collideConnected: boolean;\n\n /** @internal */ m_prev: Joint | null = null;\n /** @internal */ m_next: Joint | null = null;\n\n /** @internal */ m_edgeA: JointEdge = new JointEdge();\n /** @internal */ m_edgeB: JointEdge = new JointEdge();\n\n /** @internal */ m_islandFlag: boolean = false;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(def: JointDef);\n constructor(def: JointOpt, bodyA: Body, bodyB: Body);\n constructor(def: JointDef | JointOpt, bodyA?: Body, bodyB?: Body) {\n bodyA = \"bodyA\" in def ? def.bodyA : bodyA;\n bodyB = \"bodyB\" in def ? def.bodyB : bodyB;\n\n _ASSERT && console.assert(!!bodyA);\n _ASSERT && console.assert(!!bodyB);\n _ASSERT && console.assert(bodyA != bodyB);\n\n this.m_bodyA = bodyA!;\n this.m_bodyB = bodyB!;\n\n this.m_collideConnected = !!def.collideConnected;\n this.m_userData = def.userData;\n }\n\n /**\n * Short-cut function to determine if either body is inactive.\n */\n isActive(): boolean {\n return this.m_bodyA.isActive() && this.m_bodyB.isActive();\n }\n\n /**\n * Get the type of the concrete joint.\n */\n getType(): string {\n return this.m_type;\n }\n\n /**\n * Get the first body attached to this joint.\n */\n getBodyA(): Body {\n return this.m_bodyA;\n }\n\n /**\n * Get the second body attached to this joint.\n */\n getBodyB(): Body {\n return this.m_bodyB;\n }\n\n /**\n * Get the next joint the world joint list.\n */\n getNext(): Joint {\n return this.m_next;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get collide connected. Note: modifying the collide connect flag won't work\n * correctly because the flag is only checked when fixture AABBs begin to\n * overlap.\n */\n getCollideConnected(): boolean {\n return this.m_collideConnected;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n abstract getAnchorA(): Vec2;\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n abstract getAnchorB(): Vec2;\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n abstract getReactionForce(inv_dt: number): Vec2;\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n abstract getReactionTorque(inv_dt: number): number;\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {}\n\n abstract initVelocityConstraints(step: TimeStep): void;\n\n abstract solveVelocityConstraints(step: TimeStep): void;\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n abstract solvePositionConstraints(step: TimeStep): boolean;\n\n /**\n * @hidden @experimental\n * Update joint with new props.\n */\n abstract _reset(def: Partial): void;\n\n /**\n * @internal @deprecated\n * Temporary for backward compatibility, will be removed.\n */\n _resetAnchors(def: any): void {\n return this._reset(def);\n }\n}\n","/** @hidden */\nexport const stats = {\n gjkCalls: 0,\n gjkIters: 0,\n gjkMaxIters: 0,\n\n toiTime: 0,\n toiMaxTime: 0,\n toiCalls: 0,\n toiIters: 0,\n toiMaxIters: 0,\n toiRootIters: 0,\n toiMaxRootIters: 0,\n\n toString(newline?: string): string {\n newline = typeof newline === \"string\" ? newline : \"\\n\";\n let string = \"\";\n // tslint:disable-next-line:no-for-in\n for (const name in this) {\n if (typeof this[name] !== \"function\" && typeof this[name] !== \"object\") {\n string += name + \": \" + this[name] + newline;\n }\n }\n return string;\n }\n};\n","/** @internal */\nexport const now = function(): number {\n return Date.now();\n};\n\n/** @internal */\nexport const diff = function(time: number): number {\n return Date.now() - time;\n};\n\n/** @internal */\nexport default {\n now,\n diff,\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport { Shape } from \"./Shape\";\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Transform, TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const e12 = matrix.vec2(0, 0);\n/** @internal */ const e13 = matrix.vec2(0, 0);\n/** @internal */ const e23 = matrix.vec2(0, 0);\n/** @internal */ const temp1 = matrix.vec2(0, 0);\n/** @internal */ const temp2 = matrix.vec2(0, 0);\n\n/**\n * GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates.\n */\n\nstats.gjkCalls = 0;\nstats.gjkIters = 0;\nstats.gjkMaxIters = 0;\n\n/**\n * Input for Distance. You have to option to use the shape radii in the\n * computation. Even\n */\nexport class DistanceInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n useRadii = false;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n this.useRadii = false;\n }\n}\n\n/**\n * Output for Distance.\n */\nexport class DistanceOutput {\n /** closest point on shapeA */\n pointA = matrix.vec2(0, 0);\n /** closest point on shapeB */\n pointB = matrix.vec2(0, 0);\n distance = 0;\n /** iterations number of GJK iterations used */\n iterations = 0;\n recycle() {\n matrix.zeroVec2(this.pointA);\n matrix.zeroVec2(this.pointB);\n this.distance = 0;\n this.iterations = 0;\n }\n}\n\n/**\n * Used to warm start Distance. Set count to zero on first call.\n */\nexport class SimplexCache {\n /** length or area */\n metric: number = 0;\n /** vertices on shape A */\n indexA: number[] = [];\n /** vertices on shape B */\n indexB: number[] = [];\n count: number = 0;\n recycle() {\n this.metric = 0;\n this.indexA.length = 0;\n this.indexB.length = 0;\n this.count = 0;\n }\n}\n\n/**\n * Compute the closest points between two shapes. Supports any combination of:\n * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On\n * the first call set SimplexCache.count to zero.\n */\nexport const Distance = function (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void {\n ++stats.gjkCalls;\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n // Initialize the simplex.\n // const simplex = new Simplex();\n simplex.recycle();\n simplex.readCache(cache, proxyA, xfA, proxyB, xfB);\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n const k_maxIters = Settings.maxDistanceIterations;\n\n // These store the vertices of the last simplex so that we\n // can check for duplicates and prevent cycling.\n const saveA = [];\n const saveB = []; // int[3]\n let saveCount = 0;\n\n // Main iteration loop.\n let iter = 0;\n while (iter < k_maxIters) {\n // Copy simplex so we can identify duplicates.\n saveCount = simplex.m_count;\n for (let i = 0; i < saveCount; ++i) {\n saveA[i] = vertices[i].indexA;\n saveB[i] = vertices[i].indexB;\n }\n\n simplex.solve();\n\n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count === 3) {\n break;\n }\n\n // Get search direction.\n const d = simplex.getSearchDirection();\n\n // Ensure the search direction is numerically fit.\n if (matrix.lengthSqrVec2(d) < EPSILON * EPSILON) {\n // The origin is probably contained by a line segment\n // or triangle. Thus the shapes are overlapped.\n\n // We can't return zero here even though there may be overlap.\n // In case the simplex is a point, segment, or triangle it is difficult\n // to determine if the origin is contained in the CSO or very close to it.\n break;\n }\n\n // Compute a tentative new simplex vertex using support points.\n const vertex = vertices[simplex.m_count]; // SimplexVertex\n\n vertex.indexA = proxyA.getSupport(matrix.derotVec2(temp, xfA.q, matrix.scaleVec2(temp, -1, d)));\n matrix.transformVec2(vertex.wA, xfA, proxyA.getVertex(vertex.indexA));\n\n vertex.indexB = proxyB.getSupport(matrix.derotVec2(temp, xfB.q, d));\n matrix.transformVec2(vertex.wB, xfB, proxyB.getVertex(vertex.indexB));\n\n matrix.subVec2(vertex.w, vertex.wB, vertex.wA);\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n ++stats.gjkIters;\n\n // Check for duplicate support points. This is the main termination\n // criteria.\n let duplicate = false;\n for (let i = 0; i < saveCount; ++i) {\n if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) {\n duplicate = true;\n break;\n }\n }\n\n // If we found a duplicate support point we must exit to avoid cycling.\n if (duplicate) {\n break;\n }\n\n // New vertex is ok and needed.\n ++simplex.m_count;\n }\n\n stats.gjkMaxIters = math_max(stats.gjkMaxIters, iter);\n\n // Prepare output.\n simplex.getWitnessPoints(output.pointA, output.pointB);\n output.distance = matrix.distVec2(output.pointA, output.pointB);\n output.iterations = iter;\n\n // Cache the simplex.\n simplex.writeCache(cache);\n\n // Apply radii if requested.\n if (input.useRadii) {\n const rA = proxyA.m_radius;\n const rB = proxyB.m_radius;\n\n if (output.distance > rA + rB && output.distance > EPSILON) {\n // Shapes are still no overlapped.\n // Move the witness points to the outer surface.\n output.distance -= rA + rB;\n matrix.subVec2(normal, output.pointB, output.pointA);\n matrix.normalizeVec2(normal);\n matrix.plusScaleVec2(output.pointA, rA, normal);\n matrix.minusScaleVec2(output.pointB, rB, normal);\n } else {\n // Shapes are overlapped when radii are considered.\n // Move the witness points to the middle.\n const p = matrix.subVec2(temp, output.pointA, output.pointB);\n matrix.copyVec2(output.pointA, p);\n matrix.copyVec2(output.pointB, p);\n output.distance = 0.0;\n }\n }\n};\n\n/**\n * A distance proxy is used by the GJK algorithm. It encapsulates any shape.\n */\nexport class DistanceProxy {\n /** @internal */ m_vertices: Vec2Value[] = [];\n // todo: remove this?\n /** @internal */ m_count = 0;\n /** @internal */ m_radius = 0;\n\n recycle() {\n this.m_vertices.length = 0;\n this.m_count = 0;\n this.m_radius = 0;\n }\n\n /**\n * Get the vertex count.\n */\n getVertexCount(): number {\n return this.m_count;\n }\n\n /**\n * Get a vertex by index. Used by Distance.\n */\n getVertex(index: number): Vec2Value {\n _ASSERT && console.assert(0 <= index && index < this.m_count);\n return this.m_vertices[index];\n }\n\n /**\n * Get the supporting vertex index in the given direction.\n */\n getSupport(d: Vec2Value): number {\n let bestIndex = -1;\n let bestValue = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const value = matrix.dotVec2(this.m_vertices[i], d);\n if (value > bestValue) {\n bestIndex = i;\n bestValue = value;\n }\n }\n return bestIndex;\n }\n\n /**\n * Get the supporting vertex in the given direction.\n */\n getSupportVertex(d: Vec2Value): Vec2Value {\n return this.m_vertices[this.getSupport(d)];\n }\n\n /**\n * Initialize the proxy using the given shape. The shape must remain in scope\n * while the proxy is in use.\n */\n set(shape: Shape, index: number): void {\n // TODO remove, use shape instead\n _ASSERT && console.assert(typeof shape.computeDistanceProxy === \"function\");\n shape.computeDistanceProxy(this, index);\n }\n\n /**\n * Initialize the proxy using a vertex cloud and radius. The vertices\n * must remain in scope while the proxy is in use.\n */\n setVertices(vertices: Vec2Value[], count: number, radius: number) {\n this.m_vertices = vertices;\n this.m_count = count;\n this.m_radius = radius;\n }\n}\n\nclass SimplexVertex {\n /** support point in proxyA */\n wA = matrix.vec2(0, 0);\n /** wA index */\n indexA = 0;\n\n /** support point in proxyB */\n wB = matrix.vec2(0, 0);\n /** wB index */\n indexB = 0;\n\n /** wB - wA; */\n w = matrix.vec2(0, 0);\n /** barycentric coordinate for closest point */\n a = 0;\n\n recycle() {\n this.indexA = 0;\n this.indexB = 0;\n matrix.zeroVec2(this.wA);\n matrix.zeroVec2(this.wB);\n matrix.zeroVec2(this.w);\n this.a = 0;\n }\n set(v: SimplexVertex): void {\n this.indexA = v.indexA;\n this.indexB = v.indexB;\n matrix.copyVec2(this.wA, v.wA);\n matrix.copyVec2(this.wB, v.wB);\n matrix.copyVec2(this.w, v.w);\n this.a = v.a;\n }\n}\n\n/** @internal */ const searchDirection_reuse = matrix.vec2(0, 0);\n/** @internal */ const closestPoint_reuse = matrix.vec2(0, 0); \n\nclass Simplex {\n m_v1 = new SimplexVertex();\n m_v2 = new SimplexVertex();\n m_v3 = new SimplexVertex();\n m_v = [this.m_v1, this.m_v2, this.m_v3];\n m_count: number;\n recycle() {\n this.m_v1.recycle();\n this.m_v2.recycle();\n this.m_v3.recycle();\n this.m_count = 0;\n }\n\n /** @internal */ toString(): string {\n if (this.m_count === 3) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y,\n this.m_v3.a, this.m_v3.wA.x, this.m_v3.wA.y, this.m_v3.wB.x, this.m_v3.wB.y\n ].toString();\n\n } else if (this.m_count === 2) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y\n ].toString();\n\n } else if (this.m_count === 1) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y\n ].toString();\n\n } else {\n return \"+\" + this.m_count;\n }\n }\n\n readCache(cache: SimplexCache, proxyA: DistanceProxy, transformA: TransformValue, proxyB: DistanceProxy, transformB: TransformValue): void {\n _ASSERT && console.assert(cache.count <= 3);\n\n // Copy data from cache.\n this.m_count = cache.count;\n for (let i = 0; i < this.m_count; ++i) {\n const v = this.m_v[i];\n v.indexA = cache.indexA[i];\n v.indexB = cache.indexB[i];\n const wALocal = proxyA.getVertex(v.indexA);\n const wBLocal = proxyB.getVertex(v.indexB);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 0.0;\n }\n\n // Compute the new simplex metric, if it is substantially different than\n // old metric then flush the simplex.\n if (this.m_count > 1) {\n const metric1 = cache.metric;\n const metric2 = this.getMetric();\n if (metric2 < 0.5 * metric1 || 2.0 * metric1 < metric2 || metric2 < EPSILON) {\n // Reset the simplex.\n this.m_count = 0;\n }\n }\n\n // If the cache is empty or invalid...\n if (this.m_count === 0) {\n const v = this.m_v[0];\n v.indexA = 0;\n v.indexB = 0;\n const wALocal = proxyA.getVertex(0);\n const wBLocal = proxyB.getVertex(0);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 1.0;\n this.m_count = 1;\n }\n }\n\n writeCache(cache: SimplexCache): void {\n cache.metric = this.getMetric();\n cache.count = this.m_count;\n for (let i = 0; i < this.m_count; ++i) {\n cache.indexA[i] = this.m_v[i].indexA;\n cache.indexB[i] = this.m_v[i].indexB;\n }\n }\n\n getSearchDirection(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 1:\n return matrix.setVec2(searchDirection_reuse, -v1.w.x, -v1.w.y);\n\n case 2: {\n matrix.subVec2(e12, v2.w, v1.w);\n const sgn = -matrix.crossVec2Vec2(e12, v1.w);\n if (sgn > 0.0) {\n // Origin is left of e12.\n return matrix.setVec2(searchDirection_reuse, -e12.y, e12.x);\n } else {\n // Origin is right of e12.\n return matrix.setVec2(searchDirection_reuse, e12.y, -e12.x);\n }\n }\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(searchDirection_reuse);\n }\n }\n\n getClosestPoint(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n\n case 1:\n return matrix.copyVec2(closestPoint_reuse, v1.w);\n\n case 2:\n return matrix.combine2Vec2(closestPoint_reuse, v1.a, v1.w, v2.a, v2.w);\n\n case 3:\n return matrix.zeroVec2(closestPoint_reuse);\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n }\n }\n\n getWitnessPoints(pA: Vec2Value, pB: Vec2Value): void {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n break;\n\n case 1:\n matrix.copyVec2(pA, v1.wA);\n matrix.copyVec2(pB, v1.wB);\n break;\n\n case 2:\n matrix.combine2Vec2(pA, v1.a, v1.wA, v2.a, v2.wA);\n matrix.combine2Vec2(pB, v1.a, v1.wB, v2.a, v2.wB);\n break;\n\n case 3:\n matrix.combine3Vec2(pA, v1.a, v1.wA, v2.a, v2.wA, v3.a, v3.wA);\n matrix.copyVec2(pB, pA);\n break;\n\n default:\n _ASSERT && console.assert(false);\n break;\n }\n }\n\n getMetric(): number {\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return 0.0;\n\n case 1:\n return 0.0;\n\n case 2:\n return matrix.distVec2(this.m_v1.w, this.m_v2.w);\n\n case 3:\n return matrix.crossVec2Vec2(\n matrix.subVec2(temp1, this.m_v2.w, this.m_v1.w),\n matrix.subVec2(temp2, this.m_v3.w, this.m_v1.w),\n );\n\n default:\n _ASSERT && console.assert(false);\n return 0.0;\n }\n }\n\n solve(): void {\n switch (this.m_count) {\n case 1:\n break;\n\n case 2:\n this.solve2();\n break;\n\n case 3:\n this.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n }\n\n// Solve a line segment using barycentric coordinates.\n//\n// p = a1 * w1 + a2 * w2\n// a1 + a2 = 1\n//\n// The vector from the origin to the closest point on the line is\n// perpendicular to the line.\n// e12 = w2 - w1\n// dot(p, e) = 0\n// a1 * dot(w1, e) + a2 * dot(w2, e) = 0\n//\n// 2-by-2 linear system\n// [1 1 ][a1] = [1]\n// [w1.e12 w2.e12][a2] = [0]\n//\n// Define\n// d12_1 = dot(w2, e12)\n// d12_2 = -dot(w1, e12)\n// d12 = d12_1 + d12_2\n//\n// Solution\n// a1 = d12_1 / d12\n// a2 = d12_2 / d12\n solve2(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n matrix.subVec2(e12, w2, w1);\n\n // w1 region\n const d12_2 = -matrix.dotVec2(w1, e12);\n if (d12_2 <= 0.0) {\n // a2 <= 0, so we clamp it to 0\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // w2 region\n const d12_1 = matrix.dotVec2(w2, e12);\n if (d12_1 <= 0.0) {\n // a1 <= 0, so we clamp it to 0\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // Must be in e12 region.\n const inv_d12 = 1.0 / (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\n// Possible regions:\n// - points[2]\n// - edge points[0]-points[2]\n// - edge points[1]-points[2]\n// - inside the triangle\n solve3(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n const w3 = this.m_v3.w;\n\n // Edge12\n // [1 1 ][a1] = [1]\n // [w1.e12 w2.e12][a2] = [0]\n // a3 = 0\n matrix.subVec2(e12, w2, w1);\n const w1e12 = matrix.dotVec2(w1, e12);\n const w2e12 = matrix.dotVec2(w2, e12);\n const d12_1 = w2e12;\n const d12_2 = -w1e12;\n\n // Edge13\n // [1 1 ][a1] = [1]\n // [w1.e13 w3.e13][a3] = [0]\n // a2 = 0\n matrix.subVec2(e13, w3, w1);\n const w1e13 = matrix.dotVec2(w1, e13);\n const w3e13 = matrix.dotVec2(w3, e13);\n const d13_1 = w3e13;\n const d13_2 = -w1e13;\n\n // Edge23\n // [1 1 ][a2] = [1]\n // [w2.e23 w3.e23][a3] = [0]\n // a1 = 0\n matrix.subVec2(e23, w3, w2);\n const w2e23 = matrix.dotVec2(w2, e23);\n const w3e23 = matrix.dotVec2(w3, e23);\n const d23_1 = w3e23;\n const d23_2 = -w2e23;\n\n // Triangle123\n const n123 = matrix.crossVec2Vec2(e12, e13);\n\n const d123_1 = n123 * matrix.crossVec2Vec2(w2, w3);\n const d123_2 = n123 * matrix.crossVec2Vec2(w3, w1);\n const d123_3 = n123 * matrix.crossVec2Vec2(w1, w2);\n\n // w1 region\n if (d12_2 <= 0.0 && d13_2 <= 0.0) {\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // e12\n if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) {\n const inv_d12 = 1.0 / (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\n // e13\n if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) {\n const inv_d13 = 1.0 / (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\n // w2 region\n if (d12_1 <= 0.0 && d23_2 <= 0.0) {\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // w3 region\n if (d13_1 <= 0.0 && d23_1 <= 0.0) {\n this.m_v3.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v3);\n return;\n }\n\n // e23\n if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) {\n const inv_d23 = 1.0 / (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\n // Must be in triangle123\n const inv_d123 = 1.0 / (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}\n\n/** @internal */ const simplex = new Simplex();\n\n/** @internal */ const input = new DistanceInput();\n/** @internal */ const cache = new SimplexCache();\n/** @internal */ const output = new DistanceOutput();\n\n/**\n * Determine if two generic shapes overlap.\n */\nexport const testOverlap = function (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue): boolean {\n input.recycle();\n input.proxyA.set(shapeA, indexA);\n input.proxyB.set(shapeB, indexB);\n matrix.copyTransform(input.transformA, xfA);\n matrix.copyTransform(input.transformB, xfB);\n input.useRadii = true;\n\n output.recycle();\n cache.recycle();\n\n Distance(output, cache, input);\n\n return output.distance < 10.0 * EPSILON;\n};\n\n// legacy exports\nDistance.testOverlap = testOverlap;\nDistance.Input = DistanceInput;\nDistance.Output = DistanceOutput;\nDistance.Proxy = DistanceProxy;\nDistance.Cache = SimplexCache;\n\n/**\n * Input parameters for ShapeCast\n */\nexport class ShapeCastInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n readonly translationB = Vec2.zero();\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n matrix.zeroVec2(this.translationB);\n }\n}\n\n/**\n * Output results for b2ShapeCast\n */\nexport class ShapeCastOutput {\n point: Vec2 = Vec2.zero();\n normal: Vec2 = Vec2.zero();\n lambda = 1.0;\n iterations = 0;\n}\n\n/**\n * Perform a linear shape cast of shape B moving and shape A fixed. Determines\n * the hit point, normal, and translation fraction.\n * \n * @returns true if hit, false if there is no hit or an initial overlap\n */\n//\n// GJK-raycast\n// Algorithm by Gino van den Bergen.\n// \"Smooth Mesh Contacts with GJK\" in Game Physics Pearls. 2010\nexport const ShapeCast = function(output: ShapeCastOutput, input: ShapeCastInput): boolean {\n output.iterations = 0;\n output.lambda = 1.0;\n output.normal.setZero();\n output.point.setZero();\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n\n const radiusA = math_max(proxyA.m_radius, Settings.polygonRadius);\n const radiusB = math_max(proxyB.m_radius, Settings.polygonRadius);\n const radius = radiusA + radiusB;\n\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n const r = input.translationB;\n const n = Vec2.zero();\n let lambda = 0.0;\n\n // Initial simplex\n const simplex = new Simplex();\n simplex.m_count = 0;\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n\n // Get support point in -r direction\n let indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(r)));\n let wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n let indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, r));\n let wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const v = Vec2.sub(wA, wB);\n\n // Sigma is the target distance between polygons\n const sigma = math_max(Settings.polygonRadius, radius - Settings.polygonRadius);\n const tolerance = 0.5 * Settings.linearSlop;\n\n // Main iteration loop.\n const k_maxIters = 20;\n let iter = 0;\n while (iter < k_maxIters && v.length() - sigma > tolerance) {\n _ASSERT && console.assert(simplex.m_count < 3);\n\n output.iterations += 1;\n\n // Support in direction -v (A - B)\n indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(v)));\n wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, v));\n wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const p = Vec2.sub(wA, wB);\n\n // -v is a normal at p\n v.normalize();\n\n // Intersect ray with plane\n const vp = Vec2.dot(v, p);\n const vr = Vec2.dot(v, r);\n if (vp - sigma > lambda * vr) {\n if (vr <= 0.0) {\n return false;\n }\n\n lambda = (vp - sigma) / vr;\n if (lambda > 1.0) {\n return false;\n }\n\n n.setMul(-1, v);\n simplex.m_count = 0;\n }\n\n // Reverse simplex since it works with B - A.\n // Shift by lambda * r because we want the closest point to the current clip point.\n // Note that the support point p is not shifted because we want the plane equation\n // to be formed in unshifted space.\n const vertex = vertices[simplex.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.0;\n simplex.m_count += 1;\n\n switch (simplex.m_count) {\n case 1:\n break;\n\n case 2:\n simplex.solve2();\n break;\n\n case 3:\n simplex.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n \n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count == 3) {\n // Overlap\n return false;\n }\n\n // Get search direction.\n v.setVec2(simplex.getClosestPoint());\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n }\n\n if (iter == 0) {\n // Initial overlap\n return false;\n\t}\n\n // Prepare output.\n const pointA = Vec2.zero();\n const pointB = Vec2.zero();\n simplex.getWitnessPoints(pointB, pointA);\n\n if (v.lengthSquared() > 0.0) {\n n.setMul(-1, v);\n n.normalize();\n }\n\n output.point = Vec2.combine(1, pointA, radiusA, n);\n output.normal = n;\n output.lambda = lambda;\n output.iterations = iter;\n return true;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport Timer from \"../util/Timer\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Distance, DistanceInput, DistanceOutput, DistanceProxy, SimplexCache } from \"./Distance\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\n/**\n * Input parameters for TimeOfImpact.\n */\nexport class TOIInput {\n proxyA = new DistanceProxy();\n proxyB = new DistanceProxy();\n sweepA = new Sweep();\n sweepB = new Sweep();\n /** defines sweep interval [0, tMax] */\n tMax: number;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.sweepA.recycle();\n this.sweepB.recycle();\n this.tMax = -1;\n }\n}\n\nexport enum TOIOutputState {\n e_unset = -1,\n e_unknown = 0,\n e_failed = 1,\n e_overlapped = 2,\n e_touching = 3,\n e_separated = 4,\n}\n\n/**\n * Output parameters for TimeOfImpact.\n */\nexport class TOIOutput {\n state = TOIOutputState.e_unset;\n t = -1;\n recycle() {\n this.state = TOIOutputState.e_unset;\n this.t = -1;\n }\n}\n\nstats.toiTime = 0;\nstats.toiMaxTime = 0;\nstats.toiCalls = 0;\nstats.toiIters = 0;\nstats.toiMaxIters = 0;\nstats.toiRootIters = 0;\nstats.toiMaxRootIters = 0;\n\n/** @internal */ const distanceInput = new DistanceInput();\n/** @internal */ const distanceOutput = new DistanceOutput();\n// this is passed to Distance and SeparationFunction\n/** @internal */ const cache = new SimplexCache();\n\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const axisA = matrix.vec2(0, 0);\n/** @internal */ const axisB = matrix.vec2(0, 0);\n/** @internal */ const localPointA = matrix.vec2(0, 0);\n/** @internal */ const localPointB = matrix.vec2(0, 0);\n\n\n/**\n * Compute the upper bound on time before two shapes penetrate. Time is\n * represented as a fraction between [0,tMax]. This uses a swept separating axis\n * and may miss some intermediate, non-tunneling collisions. If you change the\n * time interval, you should call this function again.\n *\n * Note: use Distance to compute the contact point and normal at the time of\n * impact.\n *\n * CCD via the local separating axis method. This seeks progression by computing\n * the largest time at which separation is maintained.\n */\nexport const TimeOfImpact = function (output: TOIOutput, input: TOIInput): void {\n const timer = Timer.now();\n\n ++stats.toiCalls;\n\n output.state = TOIOutputState.e_unknown;\n output.t = input.tMax;\n\n const proxyA = input.proxyA; // DistanceProxy\n const proxyB = input.proxyB; // DistanceProxy\n\n const sweepA = input.sweepA; // Sweep\n const sweepB = input.sweepB; // Sweep\n\n // Large rotations can make the root finder fail, so we normalize the\n // sweep angles.\n sweepA.normalize();\n sweepB.normalize();\n\n const tMax = input.tMax;\n\n const totalRadius = proxyA.m_radius + proxyB.m_radius;\n const target = math_max(Settings.linearSlop, totalRadius - 3.0 * Settings.linearSlop);\n const tolerance = 0.25 * Settings.linearSlop;\n _ASSERT && console.assert(target > tolerance);\n\n let t1 = 0.0;\n const k_maxIterations = Settings.maxTOIIterations;\n let iter = 0;\n\n // Prepare input for distance query.\n // const cache = new SimplexCache();\n cache.recycle();\n\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\n // The outer loop progressively attempts to compute new separating axes.\n // This loop terminates when an axis is repeated (no progress is made).\n while (true) {\n sweepA.getTransform(xfA, t1);\n sweepB.getTransform(xfB, t1);\n\n // Get the distance between shapes. We can also use the results\n // to get a separating axis.\n matrix.copyTransform(distanceInput.transformA, xfA);\n matrix.copyTransform(distanceInput.transformB, xfB);\n Distance(distanceOutput, cache, distanceInput);\n\n // If the shapes are overlapped, we give up on continuous collision.\n if (distanceOutput.distance <= 0.0) {\n // Failure!\n output.state = TOIOutputState.e_overlapped;\n output.t = 0.0;\n break;\n }\n\n if (distanceOutput.distance < target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n break;\n }\n\n // Initialize the separating axis.\n separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1);\n\n // if (false) {\n // // Dump the curve seen by the root finder\n // const N = 100;\n // const dx = 1.0 / N;\n // const xs = []; // [ N + 1 ];\n // const fs = []; // [ N + 1 ];\n // const x = 0.0;\n // for (const i = 0; i <= N; ++i) {\n // sweepA.getTransform(xfA, x);\n // sweepB.getTransform(xfB, x);\n // const f = fcn.evaluate(xfA, xfB) - target;\n // printf(\"%g %g\\n\", x, f);\n // xs[i] = x;\n // fs[i] = f;\n // x += dx;\n // }\n // }\n\n // Compute the TOI on the separating axis. We do this by successively\n // resolving the deepest point. This loop is bounded by the number of\n // vertices.\n let done = false;\n let t2 = tMax;\n let pushBackIter = 0;\n while (true) {\n // Find the deepest point at t2. Store the witness point indices.\n let s2 = separationFunction.findMinSeparation(t2);\n\n // Is the final configuration separated?\n if (s2 > target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_separated;\n output.t = tMax;\n done = true;\n break;\n }\n\n // Has the separation reached tolerance?\n if (s2 > target - tolerance) {\n // Advance the sweeps\n t1 = t2;\n break;\n }\n\n // Compute the initial separation of the witness points.\n let s1 = separationFunction.evaluate(t1);\n\n // Check for initial overlap. This might happen if the root finder\n // runs out of iterations.\n if (s1 < target - tolerance) {\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n done = true;\n break;\n }\n\n // Check for touching\n if (s1 <= target + tolerance) {\n // Victory! t1 should hold the TOI (could be 0.0).\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n done = true;\n break;\n }\n\n // Compute 1D root of: f(x) - target = 0\n let rootIterCount = 0;\n let a1 = t1;\n let a2 = t2;\n while (true) {\n // Use a mix of the secant rule and bisection.\n let t;\n if (rootIterCount & 1) {\n // Secant rule to improve convergence.\n t = a1 + (target - s1) * (a2 - a1) / (s2 - s1);\n } else {\n // Bisection to guarantee progress.\n t = 0.5 * (a1 + a2);\n }\n\n ++rootIterCount;\n ++stats.toiRootIters;\n\n const s = separationFunction.evaluate(t);\n\n if (math_abs(s - target) < tolerance) {\n // t2 holds a tentative value for t1\n t2 = t;\n break;\n }\n\n // Ensure we continue to bracket the root.\n if (s > target) {\n a1 = t;\n s1 = s;\n } else {\n a2 = t;\n s2 = s;\n }\n\n if (rootIterCount === 50) {\n break;\n }\n }\n\n stats.toiMaxRootIters = math_max(stats.toiMaxRootIters, rootIterCount);\n\n ++pushBackIter;\n\n if (pushBackIter === Settings.maxPolygonVertices) {\n break;\n }\n }\n\n ++iter;\n ++stats.toiIters;\n\n if (done) {\n break;\n }\n\n if (iter === k_maxIterations) {\n // Root finder got stuck. Semi-victory.\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n break;\n }\n }\n\n stats.toiMaxIters = math_max(stats.toiMaxIters, iter);\n\n const time = Timer.diff(timer);\n stats.toiMaxTime = math_max(stats.toiMaxTime, time);\n stats.toiTime += time;\n\n separationFunction.recycle();\n};\n\nenum SeparationFunctionType {\n e_unset = -1,\n e_points = 1,\n e_faceA = 2,\n e_faceB = 3,\n}\n\nclass SeparationFunction {\n // input cache\n // todo: maybe assign by copy instead of reference?\n m_proxyA: DistanceProxy = null;\n m_proxyB: DistanceProxy = null;\n m_sweepA: Sweep = null;\n m_sweepB: Sweep = null;\n\n // initialize cache\n m_type = SeparationFunctionType.e_unset;\n m_localPoint = matrix.vec2(0, 0);\n m_axis = matrix.vec2(0, 0);\n\n // compute output\n indexA = -1;\n indexB = -1;\n\n recycle() {\n this.m_proxyA = null;\n this.m_proxyB = null;\n this.m_sweepA = null;\n this.m_sweepB = null;\n\n this.m_type = SeparationFunctionType.e_unset;\n matrix.zeroVec2(this.m_localPoint);\n matrix.zeroVec2(this.m_axis);\n\n this.indexA = -1;\n this.indexB = -1;\n }\n\n // TODO_ERIN might not need to return the separation\n\n initialize(cache: SimplexCache, proxyA: DistanceProxy, sweepA: Sweep, proxyB: DistanceProxy, sweepB: Sweep, t1: number): number {\n const count = cache.count;\n _ASSERT && console.assert(0 < count && count < 3);\n\n this.m_proxyA = proxyA;\n this.m_proxyB = proxyB;\n this.m_sweepA = sweepA;\n this.m_sweepB = sweepB;\n\n this.m_sweepA.getTransform(xfA, t1);\n this.m_sweepB.getTransform(xfB, t1);\n\n if (count === 1) {\n this.m_type = SeparationFunctionType.e_points;\n const localPointA = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n matrix.subVec2(this.m_axis, pointB, pointA);\n const s = matrix.normalizeVec2Length(this.m_axis);\n return s;\n\n } else if (cache.indexA[0] === cache.indexA[1]) {\n // Two points on B and one on A.\n this.m_type = SeparationFunctionType.e_faceB;\n const localPointB1 = proxyB.getVertex(cache.indexB[0]);\n const localPointB2 = proxyB.getVertex(cache.indexB[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointB2, localPointB1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n const localPointA = proxyA.getVertex(cache.indexA[0]);\n const pointA = Transform.mulVec2(xfA, localPointA);\n\n let s = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n\n } else {\n // Two points on A and one or two points on B.\n this.m_type = SeparationFunctionType.e_faceA;\n const localPointA1 = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointA2 = this.m_proxyA.getVertex(cache.indexA[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointA2, localPointA1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n let s = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n }\n }\n\n compute(find: boolean, t: number): number {\n // It was findMinSeparation and evaluate\n this.m_sweepA.getTransform(xfA, t);\n this.m_sweepB.getTransform(xfB, t);\n\n switch (this.m_type) {\n case SeparationFunctionType.e_points: {\n if (find) {\n matrix.derotVec2(axisA, xfA.q, this.m_axis);\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, this.m_axis));\n\n this.indexA = this.m_proxyA.getSupport(axisA);\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, this.m_axis) - matrix.dotVec2(pointA, this.m_axis);\n return sep;\n }\n\n case SeparationFunctionType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexA = -1;\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n return sep;\n }\n\n case SeparationFunctionType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisA, xfA.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexB = -1;\n this.indexA = this.m_proxyA.getSupport(axisA);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.transformVec2(pointA, xfA, localPointA);\n\n const sep = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n return sep;\n }\n\n default:\n _ASSERT && console.assert(false);\n if (find) {\n this.indexA = -1;\n this.indexB = -1;\n }\n return 0.0;\n }\n }\n\n findMinSeparation(t: number): number {\n return this.compute(true, t);\n }\n\n evaluate(t: number): number {\n return this.compute(false, t);\n }\n}\n\n/** @internal */ const separationFunction = new SeparationFunction();\n\n// legacy exports\nTimeOfImpact.Input = TOIInput;\nTimeOfImpact.Output = TOIOutput;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { EPSILON } from \"../common/Math\";\nimport { Body } from \"./Body\";\nimport type { Contact } from \"./Contact\";\nimport { Joint } from \"./Joint\";\nimport { TimeOfImpact, TOIInput, TOIOutput, TOIOutputState } from \"../collision/TimeOfImpact\";\nimport { Distance, DistanceInput, DistanceOutput, SimplexCache } from \"../collision/Distance\";\nimport { World } from \"./World\";\nimport { Sweep } from \"../common/Sweep\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_min = Math.min;\n\n\nexport class TimeStep {\n /** time step */\n dt: number = 0;\n /** inverse time step (0 if dt == 0) */\n inv_dt: number = 0;\n velocityIterations: number = 0;\n positionIterations: number = 0;\n warmStarting: boolean = false;\n blockSolve: boolean = true;\n\n /** timestep ratio for variable timestep */\n inv_dt0: number = 0.0;\n /** dt * inv_dt0 */\n dtRatio: number = 1;\n\n reset(dt: number): void {\n if (this.dt > 0.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}\n\n// reuse\n/** @internal */ const s_subStep = new TimeStep();\n/** @internal */ const c = matrix.vec2(0, 0);\n/** @internal */ const v = matrix.vec2(0, 0);\n/** @internal */ const translation = matrix.vec2(0, 0);\n/** @internal */ const input = new TOIInput();\n/** @internal */ const output = new TOIOutput();\n/** @internal */ const backup = new Sweep();\n/** @internal */ const backup1 = new Sweep();\n/** @internal */ const backup2 = new Sweep();\n\n/**\n * Contact impulses for reporting. Impulses are used instead of forces because\n * sub-step forces may approach infinity for rigid body collisions. These match\n * up one-to-one with the contact points in Manifold.\n */\nexport class ContactImpulse {\n // TODO: merge with Contact class?\n\n private readonly contact: Contact;\n private readonly normals: number[];\n private readonly tangents: number[];\n\n constructor(contact: Contact) {\n this.contact = contact;\n this.normals = [];\n this.tangents = [];\n }\n\n recycle() {\n this.normals.length = 0;\n this.tangents.length = 0;\n }\n\n get normalImpulses(): number[] {\n const contact = this.contact;\n const normals = this.normals;\n normals.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n normals.push(contact.v_points[p].normalImpulse);\n }\n return normals;\n }\n\n get tangentImpulses(): number[] {\n const contact = this.contact;\n const tangents = this.tangents;\n tangents.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n tangents.push(contact.v_points[p].tangentImpulse);\n }\n return tangents;\n }\n}\n\n/**\n * Finds and solves islands. An island is a connected subset of the world.\n */\nexport class Solver {\n m_world: World;\n m_stack: Body[];\n m_bodies: Body[];\n m_contacts: Contact[];\n m_joints: Joint[];\n\n constructor(world: World) {\n this.m_world = world;\n this.m_stack = [];\n this.m_bodies = [];\n this.m_contacts = [];\n this.m_joints = [];\n }\n\n clear(): void {\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\n addBody(body: Body): void {\n _ASSERT && console.assert(body instanceof Body, \"Not a Body!\", body);\n this.m_bodies.push(body);\n // why?\n // body.c_position.c.setZero();\n // body.c_position.a = 0;\n // body.c_velocity.v.setZero();\n // body.c_velocity.w = 0;\n }\n\n addContact(contact: Contact): void {\n // _ASSERT && console.assert(contact instanceof Contact, 'Not a Contact!', contact);\n this.m_contacts.push(contact);\n }\n\n addJoint(joint: Joint): void {\n _ASSERT && console.assert(joint instanceof Joint, \"Not a Joint!\", joint);\n this.m_joints.push(joint);\n }\n\n solveWorld(step: TimeStep): void {\n const world = this.m_world;\n\n // Clear all the island flags.\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n }\n for (let c = world.m_contactList; c; c = c.m_next) {\n c.m_islandFlag = false;\n }\n for (let j = world.m_jointList; j; j = j.m_next) {\n j.m_islandFlag = false;\n }\n\n // Build and simulate all awake islands.\n const stack = this.m_stack;\n let loop = -1;\n for (let seed = world.m_bodyList; seed; seed = seed.m_next) {\n loop++;\n if (seed.m_islandFlag) {\n continue;\n }\n\n if (seed.isAwake() == false || seed.isActive() == false) {\n continue;\n }\n\n // The seed can be dynamic or kinematic.\n if (seed.isStatic()) {\n continue;\n }\n\n // Reset island and stack.\n this.clear();\n\n stack.push(seed);\n\n seed.m_islandFlag = true;\n\n // Perform a depth first search (DFS) on the constraint graph.\n while (stack.length > 0) {\n // Grab the next body off the stack and add it to the island.\n const b = stack.pop();\n _ASSERT && console.assert(b.isActive() == true);\n this.addBody(b);\n\n // Make sure the body is awake (without resetting sleep timer).\n b.m_awakeFlag = true;\n\n // To keep islands as small as possible, we don't\n // propagate islands across static bodies.\n if (b.isStatic()) {\n continue;\n }\n\n // Search all contacts connected to this body.\n for (let ce = b.m_contactList; ce; ce = ce.next) {\n const contact = ce.contact;\n\n // Has this contact already been added to an island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Is this contact solid and touching?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n this.addContact(contact);\n contact.m_islandFlag = true;\n\n const other = ce.other;\n\n // Was the other body already added to this island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n\n // Search all joints connect to this body.\n for (let je = b.m_jointList; je; je = je.next) {\n if (je.joint.m_islandFlag == true) {\n continue;\n }\n\n const other = je.other;\n\n // Don't simulate joints connected to inactive bodies.\n if (other.isActive() == false) {\n continue;\n }\n\n this.addJoint(je.joint);\n je.joint.m_islandFlag = true;\n\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n }\n\n this.solveIsland(step);\n\n // Post solve cleanup.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n // Allow static bodies to participate in other islands.\n // TODO: are they added at all?\n const b = this.m_bodies[i];\n if (b.isStatic()) {\n b.m_islandFlag = false;\n }\n }\n }\n }\n\n solveIsland(step: TimeStep): void {\n // B2: Island Solve\n const world = this.m_world;\n const gravity = world.m_gravity;\n const allowSleep = world.m_allowSleep;\n\n const h = step.dt;\n\n // Integrate velocities and apply damping. Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.m_sweep.c);\n const a = body.m_sweep.a;\n matrix.copyVec2(v, body.m_linearVelocity);\n let w = body.m_angularVelocity;\n\n // Store positions for continuous collision.\n matrix.copyVec2(body.m_sweep.c0, body.m_sweep.c);\n body.m_sweep.a0 = body.m_sweep.a;\n\n if (body.isDynamic()) {\n // Integrate velocities.\n matrix.plusScaleVec2(v, h * body.m_gravityScale, gravity);\n matrix.plusScaleVec2(v, h * body.m_invMass, body.m_force);\n w += h * body.m_invI * body.m_torque;\n /**\n *
\n         * Apply damping.\n         * ODE: dv/dt + c * v = 0\n         * Solution: v(t) = v0 * exp(-c * t)\n         * Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)\n         * v2 = exp(-c * dt) * v1\n         * Pade approximation:\n         * v2 = v1 * 1 / (1 + c * dt)\n         * 
\n */\n matrix.scaleVec2(v, 1.0 / (1.0 + h * body.m_linearDamping), v);\n w *= 1.0 / (1.0 + h * body.m_angularDamping);\n }\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(step);\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(step);\n }\n\n if (step.warmStarting) {\n // Warm start.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.warmStartConstraint(step);\n }\n }\n\n for (let i = 0; i < this.m_joints.length; ++i) {\n const joint = this.m_joints[i];\n joint.initVelocityConstraints(step);\n }\n\n // Solve velocity constraints\n for (let i = 0; i < step.velocityIterations; ++i) {\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n joint.solveVelocityConstraints(step);\n }\n\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(step);\n }\n }\n\n // Store impulses for warm starting\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.storeConstraintImpulses(step);\n }\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n // Solve position constraints\n let positionSolved = false;\n for (let i = 0; i < step.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraint(step);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -3.0 * Settings.linearSlop;\n\n let jointsOkay = true;\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n const jointOkay = joint.solvePositionConstraints(step);\n jointsOkay = jointsOkay && jointOkay;\n }\n\n if (contactsOkay && jointsOkay) {\n // Exit early if the position errors are small.\n positionSolved = true;\n break;\n }\n }\n\n // Copy state buffers back to the bodies\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(body.m_sweep.c, body.c_position.c);\n body.m_sweep.a = body.c_position.a;\n matrix.copyVec2(body.m_linearVelocity, body.c_velocity.v);\n body.m_angularVelocity = body.c_velocity.w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n\n if (allowSleep) {\n let minSleepTime = Infinity;\n\n const linTolSqr = Settings.linearSleepToleranceSqr;\n const angTolSqr = Settings.angularSleepToleranceSqr;\n\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n if (body.isStatic()) {\n continue;\n }\n\n if ((body.m_autoSleepFlag == false)\n || (body.m_angularVelocity * body.m_angularVelocity > angTolSqr)\n || (matrix.lengthSqrVec2(body.m_linearVelocity) > linTolSqr)) {\n body.m_sleepTime = 0.0;\n minSleepTime = 0.0;\n } else {\n body.m_sleepTime += h;\n minSleepTime = math_min(minSleepTime, body.m_sleepTime);\n }\n }\n\n if (minSleepTime >= Settings.timeToSleep && positionSolved) {\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.setAwake(false);\n }\n }\n }\n }\n\n /**\n * Find TOI contacts and solve them.\n */\n solveWorldTOI(step: TimeStep): void {\n const world = this.m_world;\n\n if (world.m_stepComplete) {\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n b.m_sweep.alpha0 = 0.0;\n }\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Invalidate TOI\n c.m_toiFlag = false;\n c.m_islandFlag = false;\n c.m_toiCount = 0;\n c.m_toi = 1.0;\n }\n }\n\n // Find TOI events and solve them.\n while (true) {\n // Find the first TOI.\n let minContact: Contact | null = null;\n let minAlpha = 1.0;\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Is this contact disabled?\n if (c.isEnabled() == false) {\n continue;\n }\n\n // Prevent excessive sub-stepping.\n if (c.m_toiCount > Settings.maxSubSteps) {\n continue;\n }\n\n let alpha = 1.0;\n if (c.m_toiFlag) {\n // This contact has a valid cached TOI.\n alpha = c.m_toi;\n } else {\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n // Is there a sensor?\n if (fA.isSensor() || fB.isSensor()) {\n continue;\n }\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n _ASSERT && console.assert(bA.isDynamic() || bB.isDynamic());\n\n const activeA = bA.isAwake() && !bA.isStatic();\n const activeB = bB.isAwake() && !bB.isStatic();\n\n // Is at least one body active (awake and dynamic or kinematic)?\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const collideA = bA.isBullet() || !bA.isDynamic();\n const collideB = bB.isBullet() || !bB.isDynamic();\n\n // Are these two non-bullet dynamic bodies?\n if (collideA == false && collideB == false) {\n continue;\n }\n\n // Compute the TOI for this contact.\n // Put the sweeps onto the same time interval.\n let alpha0 = bA.m_sweep.alpha0;\n\n if (bA.m_sweep.alpha0 < bB.m_sweep.alpha0) {\n alpha0 = bB.m_sweep.alpha0;\n bA.m_sweep.advance(alpha0);\n } else if (bB.m_sweep.alpha0 < bA.m_sweep.alpha0) {\n alpha0 = bA.m_sweep.alpha0;\n bB.m_sweep.advance(alpha0);\n }\n\n _ASSERT && console.assert(alpha0 < 1.0);\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const sweepA = bA.m_sweep;\n const sweepB = bB.m_sweep;\n\n // Compute the time of impact in interval [0, minTOI]\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.sweepA.set(bA.m_sweep);\n input.sweepB.set(bB.m_sweep);\n input.tMax = 1.0;\n\n TimeOfImpact(output, input);\n\n // Beta is the fraction of the remaining portion of the [time?].\n const beta = output.t;\n if (output.state == TOIOutputState.e_touching) {\n alpha = math_min(alpha0 + (1.0 - alpha0) * beta, 1.0);\n } else {\n alpha = 1.0;\n }\n\n c.m_toi = alpha;\n c.m_toiFlag = true;\n }\n\n if (alpha < minAlpha) {\n // This is the minimum TOI found so far.\n minContact = c;\n minAlpha = alpha;\n }\n }\n\n if (minContact == null || 1.0 - 10.0 * EPSILON < minAlpha) {\n // No more TOI events. Done!\n world.m_stepComplete = true;\n break;\n }\n\n // Advance the bodies to the TOI.\n const fA = minContact.getFixtureA();\n const fB = minContact.getFixtureB();\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n backup1.set(bA.m_sweep);\n backup2.set(bB.m_sweep);\n\n bA.advance(minAlpha);\n bB.advance(minAlpha);\n\n // The TOI contact likely has some new contact points.\n minContact.update(world);\n minContact.m_toiFlag = false;\n ++minContact.m_toiCount;\n\n // Is the contact solid?\n if (minContact.isEnabled() == false || minContact.isTouching() == false) {\n // Restore the sweeps.\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\n bA.setAwake(true);\n bB.setAwake(true);\n\n // Build the island\n this.clear();\n this.addBody(bA);\n this.addBody(bB);\n this.addContact(minContact);\n\n bA.m_islandFlag = true;\n bB.m_islandFlag = true;\n minContact.m_islandFlag = true;\n\n // Get contacts on bodyA and bodyB.\n const bodies = [ bA, bB ];\n for (let i = 0; i < bodies.length; ++i) {\n const body = bodies[i];\n if (body.isDynamic()) {\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n // if (this.m_bodyCount == this.m_bodyCapacity) { break; }\n // if (this.m_contactCount == this.m_contactCapacity) { break; }\n\n const contact = ce.contact;\n\n // Has this contact already been added to the island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Only add if either is static, kinematic or bullet.\n const other = ce.other;\n if (other.isDynamic() && !body.isBullet() && !other.isBullet()) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n // Tentatively advance the body to the TOI.\n backup.set(other.m_sweep);\n if (other.m_islandFlag == false) {\n other.advance(minAlpha);\n }\n\n // Update the contact points\n contact.update(world);\n\n // Was the contact disabled by the user?\n // Are there contact points?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n other.m_sweep.set(backup);\n other.synchronizeTransform();\n continue;\n }\n\n // Add the contact to the island\n contact.m_islandFlag = true;\n this.addContact(contact);\n\n // Has the other body already been added to the island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // Add the other body to the island.\n other.m_islandFlag = true;\n\n if (!other.isStatic()) {\n other.setAwake(true);\n }\n\n this.addBody(other);\n }\n }\n }\n\n s_subStep.reset((1.0 - minAlpha) * step.dt);\n s_subStep.dtRatio = 1.0;\n s_subStep.positionIterations = 20;\n s_subStep.velocityIterations = step.velocityIterations;\n s_subStep.warmStarting = false;\n\n this.solveIslandTOI(s_subStep, bA, bB);\n\n // Reset island flags and synchronize broad-phase proxies.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.m_islandFlag = false;\n\n if (!body.isDynamic()) {\n continue;\n }\n\n body.synchronizeFixtures();\n\n // Invalidate all contact TOIs on this displaced body.\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n ce.contact.m_toiFlag = false;\n ce.contact.m_islandFlag = false;\n }\n }\n\n // Commit fixture proxy movements to the broad-phase so that new contacts\n // are created.\n // Also, some contacts can be destroyed.\n world.findNewContacts();\n\n if (world.m_subStepping) {\n world.m_stepComplete = false;\n break;\n }\n }\n }\n\n solveIslandTOI(subStep: TimeStep, toiA: Body, toiB: Body): void {\n\n // Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n matrix.copyVec2(body.c_position.c, body.m_sweep.c);\n body.c_position.a = body.m_sweep.a;\n matrix.copyVec2(body.c_velocity.v, body.m_linearVelocity);\n body.c_velocity.w = body.m_angularVelocity;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(subStep);\n }\n\n // Solve position constraints.\n for (let i = 0; i < subStep.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -1.5 * Settings.linearSlop;\n if (contactsOkay) {\n break;\n }\n }\n\n if (false) {\n // Is the new position really safe?\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const c = this.m_contacts[i];\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const input = new DistanceInput();\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.transformA.set(bA.getTransform());\n input.transformB.set(bB.getTransform());\n input.useRadii = false;\n\n const output = new DistanceOutput();\n const cache = new SimplexCache();\n Distance(output, cache, input);\n\n if (output.distance == 0 || cache.count == 3) {\n cache.count += 0;\n }\n }\n }\n\n // Leap of faith to new safe state.\n matrix.copyVec2(toiA.m_sweep.c0, toiA.c_position.c);\n toiA.m_sweep.a0 = toiA.c_position.a;\n matrix.copyVec2(toiB.m_sweep.c0, toiB.c_position.c);\n toiB.m_sweep.a0 = toiB.c_position.a;\n\n // No warm starting is needed for TOI events because warm\n // starting impulses were applied in the discrete solver.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(subStep);\n }\n\n // Solve velocity constraints.\n for (let i = 0; i < subStep.velocityIterations; ++i) {\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(subStep);\n }\n }\n\n // Don't store the TOI contact forces for warm starting\n // because they can be quite large.\n\n const h = subStep.dt;\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n\n // Sync bodies\n matrix.copyVec2(body.m_sweep.c, c);\n body.m_sweep.a = a;\n matrix.copyVec2(body.m_linearVelocity, v);\n body.m_angularVelocity = w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n }\n\n /** @internal */\n postSolveIsland(): void {\n for (let c = 0; c < this.m_contacts.length; ++c) {\n const contact = this.m_contacts[c];\n this.m_world.postSolve(contact, contact.m_impulse);\n }\n }\n}\n\n// @ts-ignore\nSolver.TimeStep = TimeStep;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 2-by-2 matrix. Stored in column-major order.\n */\nexport class Mat22 {\n ex: Vec2;\n ey: Vec2;\n\n constructor(a: number, b: number, c: number, d: number);\n constructor(a: { x: number; y: number }, b: { x: number; y: number });\n constructor();\n constructor(a?, b?, c?, d?) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec2.clone(a);\n this.ey = Vec2.clone(b);\n } else if (typeof a === \"number\") {\n this.ex = Vec2.neo(a, c);\n this.ey = Vec2.neo(b, d);\n } else {\n this.ex = Vec2.zero();\n this.ey = Vec2.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat22.isValid(o), \"Invalid Mat22!\", o);\n }\n\n set(a: Mat22): void;\n set(a: Vec2Value, b: Vec2Value): void;\n set(a: number, b: number, c: number, d: number): void;\n set(a, b?, c?, d?): void {\n if (typeof a === \"number\" && typeof b === \"number\" && typeof c === \"number\"\n && typeof d === \"number\") {\n this.ex.setNum(a, c);\n this.ey.setNum(b, d);\n\n } else if (typeof a === \"object\" && typeof b === \"object\") {\n this.ex.setVec2(a);\n this.ey.setVec2(b);\n\n } else if (typeof a === \"object\") {\n _ASSERT && Mat22.assert(a);\n this.ex.setVec2(a.ex);\n this.ey.setVec2(a.ey);\n\n } else {\n _ASSERT && console.assert(false);\n }\n }\n\n setIdentity(): void {\n this.ex.x = 1.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 1.0;\n }\n\n setZero(): void {\n this.ex.x = 0.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 0.0;\n }\n\n getInverse(): Mat22 {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const imx = new Mat22();\n imx.ex.x = det * d;\n imx.ey.x = -det * b;\n imx.ex.y = -det * c;\n imx.ey.y = det * a;\n return imx;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const w = Vec2.zero();\n w.x = det * (d * v.x - b * v.y);\n w.y = det * (a * v.y - c * v.x);\n return w;\n }\n\n /**\n * Multiply a matrix times a vector. If a rotation matrix is provided, then this\n * transforms the vector from one frame to another.\n */\n static mul(mx: Mat22, my: Mat22): Mat22;\n static mul(mx: Mat22, v: Vec2Value): Vec2;\n static mul(mx, v) {\n if (v && \"x\" in v && \"y\" in v) {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n }\n\n static mulMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n /**\n * Multiply a matrix transpose times a vector. If a rotation matrix is provided,\n * then this transforms the vector from one frame to another (inverse\n * transform).\n */\n static mulT(mx: Mat22, my: Mat22): Mat22;\n static mulT(mx: Mat22, v: Vec2Value): Vec2;\n static mulT(mx, v) {\n if (v && \"x\" in v && \"y\" in v) { // Vec2\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulTVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n }\n\n static mulTMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n static abs(mx: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n return new Mat22(Vec2.abs(mx.ex), Vec2.abs(mx.ey));\n }\n\n static add(mx1: Mat22, mx2: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx1);\n _ASSERT && Mat22.assert(mx2);\n return new Mat22(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey));\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\nimport { EPSILON } from \"../common/Math\";\n\n\n/** @internal */ const math_sqrt = Math.sqrt;\n\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const dist = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n\nexport enum ManifoldType {\n e_unset = -1,\n e_circles = 0,\n e_faceA = 1,\n e_faceB = 2\n}\n\nexport enum ContactFeatureType {\n e_unset = -1,\n e_vertex = 0,\n e_face = 1\n}\n\n/**\n * This is used for determining the state of contact points.\n */\n export enum PointState {\n /** Point does not exist */\n nullState = 0,\n /** Point was added in the update */\n addState = 1,\n /** Point persisted across the update */\n persistState = 2,\n /** Point was removed in the update */\n removeState = 3\n}\n\n/**\n * Used for computing contact manifolds.\n */\n export class ClipVertex {\n v = matrix.vec2(0, 0);\n id: ContactID = new ContactID();\n\n set(o: ClipVertex): void {\n matrix.copyVec2(this.v, o.v);\n this.id.set(o.id);\n }\n recycle() {\n matrix.zeroVec2(this.v);\n this.id.recycle();\n }\n}\n\n/**\n * A manifold for two touching convex shapes. Manifolds are created in `evaluate`\n * method of Contact subclasses.\n *\n * Supported manifold types are e_faceA or e_faceB for clip point versus plane\n * with radius and e_circles point versus point with radius.\n *\n * We store contacts in this way so that position correction can account for\n * movement, which is critical for continuous physics. All contact scenarios\n * must be expressed in one of these types. This structure is stored across time\n * steps, so we keep it small.\n */\nexport class Manifold {\n type: ManifoldType;\n\n /**\n * Usage depends on manifold type:\n * - circles: not used\n * - faceA: the normal on polygonA\n * - faceB: the normal on polygonB\n */\n localNormal = matrix.vec2(0, 0);\n\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleA\n * - faceA: the center of faceA\n * - faceB: the center of faceB\n */\n localPoint = matrix.vec2(0, 0);\n\n /** The points of contact */\n points: ManifoldPoint[] = [ new ManifoldPoint(), new ManifoldPoint() ];\n\n /** The number of manifold points */\n pointCount: number = 0;\n\n set(that: Manifold): void {\n this.type = that.type;\n matrix.copyVec2(this.localNormal, that.localNormal);\n matrix.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\n recycle(): void {\n this.type = ManifoldType.e_unset;\n matrix.zeroVec2(this.localNormal);\n matrix.zeroVec2(this.localPoint);\n this.pointCount = 0;\n this.points[0].recycle();\n this.points[1].recycle();\n }\n\n /**\n * Evaluate the manifold with supplied transforms. This assumes modest motion\n * from the original state. This does not change the point count, impulses, etc.\n * The radii must come from the shapes that generated the manifold.\n */\n getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold {\n if (this.pointCount == 0) {\n return wm;\n }\n\n wm = wm || new WorldManifold();\n\n wm.pointCount = this.pointCount;\n\n const normal = wm.normal;\n const points = wm.points;\n const separations = wm.separations;\n\n switch (this.type) {\n case ManifoldType.e_circles: {\n matrix.setVec2(normal, 1.0, 0.0);\n const manifoldPoint = this.points[0];\n matrix.transformVec2(pointA, xfA, this.localPoint);\n matrix.transformVec2(pointB, xfB, manifoldPoint.localPoint);\n matrix.subVec2(dist, pointB, pointA);\n const lengthSqr = matrix.lengthSqrVec2(dist);\n if (lengthSqr > EPSILON * EPSILON) {\n const length = math_sqrt(lengthSqr);\n matrix.scaleVec2(normal, 1 / length, dist);\n }\n matrix.combine2Vec2(cA, 1, pointA, radiusA, normal);\n matrix.combine2Vec2(cB, 1, pointB, -radiusB, normal);\n matrix.combine2Vec2(points[0], 0.5, cA, 0.5, cB);\n separations[0] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.localNormal);\n matrix.transformVec2(planePoint, xfA, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfB, manifoldPoint.localPoint);\n matrix.combine2Vec2(cA, 1, clipPoint, radiusA - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cB, 1, clipPoint, -radiusB, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n }\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.localNormal);\n matrix.transformVec2(planePoint, xfB, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfA, manifoldPoint.localPoint);\n matrix.combine2Vec2(cB, 1, clipPoint, radiusB - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cA, 1, clipPoint, -radiusA, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cA, cB), normal);\n }\n // Ensure normal points from A to B.\n matrix.negVec2(normal);\n break;\n }\n }\n\n return wm;\n }\n\n static clipSegmentToLine = clipSegmentToLine;\n static ClipVertex = ClipVertex;\n static getPointStates = getPointStates;\n static PointState = PointState;\n}\n\n/**\n * A manifold point is a contact point belonging to a contact manifold. It holds\n * details related to the geometry and dynamics of the contact points.\n *\n * This structure is stored across time steps, so we keep it small.\n *\n * Note: impulses are used for internal caching and may not provide reliable\n * contact forces, especially for high speed collisions.\n */\nexport class ManifoldPoint {\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleB\n * - faceA: the local center of circleB or the clip point of polygonB\n * - faceB: the clip point of polygonA\n */\n localPoint = matrix.vec2(0, 0);\n /**\n * The non-penetration impulse\n */\n normalImpulse = 0;\n /**\n * The friction impulse\n */\n tangentImpulse = 0;\n /**\n * Uniquely identifies a contact point between two shapes to facilitate warm starting\n */\n readonly id = new ContactID();\n\n set(that: ManifoldPoint): void {\n matrix.copyVec2(this.localPoint, that.localPoint);\n this.normalImpulse = that.normalImpulse;\n this.tangentImpulse = that.tangentImpulse;\n this.id.set(that.id);\n }\n\n recycle(): void {\n matrix.zeroVec2(this.localPoint);\n this.normalImpulse = 0;\n this.tangentImpulse = 0;\n this.id.recycle();\n }\n}\n\n/**\n * Contact ids to facilitate warm starting.\n * \n * ContactFeature: The features that intersect to form the contact point.\n */\nexport class ContactID {\n\n /**\n * Used to quickly compare contact ids.\n */\n key = -1;\n\n /** ContactFeature index on shapeA */\n indexA = -1;\n\n /** ContactFeature index on shapeB */\n indexB = -1;\n\n /** ContactFeature type on shapeA */\n typeA = ContactFeatureType.e_unset;\n\n /** ContactFeature type on shapeB */\n typeB = ContactFeatureType.e_unset;\n\n setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void {\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\n set(that: ContactID): void {\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\n swapFeatures(): void {\n const indexA = this.indexA;\n const indexB = this.indexB;\n const typeA = this.typeA;\n const 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\n recycle(): void {\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}\n\n/**\n * This is used to compute the current state of a contact manifold.\n */\nexport class WorldManifold {\n /** World vector pointing from A to B */\n normal = matrix.vec2(0, 0);\n\n /** World contact point (point of intersection) */\n points = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints]\n\n /** A negative value indicates overlap, in meters */\n separations = [0, 0]; // [maxManifoldPoints]\n\n /** The number of manifold points */\n pointCount = 0;\n\n recycle() {\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.points[0]);\n matrix.zeroVec2(this.points[1]);\n this.separations[0] = 0;\n this.separations[1] = 0;\n this.pointCount = 0;\n }\n}\n\n/**\n * Compute the point states given two manifolds. The states pertain to the\n * transition from manifold1 to manifold2. So state1 is either persist or remove\n * while state2 is either add or persist.\n */\nexport function getPointStates(\n state1: PointState[],\n state2: PointState[],\n manifold1: Manifold,\n manifold2: Manifold\n): void {\n // state1, state2: PointState[Settings.maxManifoldPoints]\n\n // for (var i = 0; i < Settings.maxManifoldPoints; ++i) {\n // state1[i] = PointState.nullState;\n // state2[i] = PointState.nullState;\n // }\n\n // Detect persists and removes.\n for (let i = 0; i < manifold1.pointCount; ++i) {\n const id = manifold1.points[i].id;\n\n state1[i] = PointState.removeState;\n\n for (let 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\n // Detect persists and adds.\n for (let i = 0; i < manifold2.pointCount; ++i) {\n const id = manifold2.points[i].id;\n\n state2[i] = PointState.addState;\n\n for (let 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}\n\n/**\n * Clipping for contact manifolds. Sutherland-Hodgman clipping.\n */\nexport function clipSegmentToLine(\n vOut: ClipVertex[],\n vIn: ClipVertex[],\n normal: Vec2Value,\n offset: number,\n vertexIndexA: number\n): number {\n // Start with no output points\n let numOut = 0;\n\n // Calculate the distance of end points to the line\n const distance0 = matrix.dotVec2(normal, vIn[0].v) - offset;\n const distance1 = matrix.dotVec2(normal, vIn[1].v) - offset;\n\n // If the points are behind the plane\n if (distance0 <= 0.0)\n vOut[numOut++].set(vIn[0]);\n if (distance1 <= 0.0)\n vOut[numOut++].set(vIn[1]);\n\n // If the points are on different sides of the plane\n if (distance0 * distance1 < 0.0) {\n // Find intersection point of edge and plane\n const interp = distance0 / (distance0 - distance1);\n matrix.combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v);\n\n // VertexA is hitting edgeB.\n vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face);\n ++numOut;\n }\n\n return numOut;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { ShapeType } from \"../collision/Shape\";\nimport { clamp } from \"../common/Math\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Mat22 } from \"../common/Mat22\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Manifold, ManifoldType, WorldManifold } from \"../collision/Manifold\";\nimport { testOverlap } from \"../collision/Distance\";\nimport { Fixture } from \"./Fixture\";\nimport { Body } from \"./Body\";\nimport { ContactImpulse, TimeStep } from \"./Solver\";\nimport { Pool } from \"../util/Pool\";\nimport { getTransform } from \"./Position\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n// Solver debugging is normally disabled because the block solver sometimes has to deal with a poorly conditioned effective mass matrix.\n/** @internal */ const DEBUG_SOLVER = false;\n\n/** @internal */ const contactPool = new Pool({\n create() {\n return new Contact();\n },\n release(contact: Contact) {\n contact.recycle();\n }\n});\n\n/** @internal */ const oldManifold = new Manifold();\n\n/** @internal */ const worldManifold = new WorldManifold();\n\n/**\n * A contact edge is used to connect bodies and contacts together in a contact\n * graph where each body is a node and each contact is an edge. A contact edge\n * belongs to a doubly linked list maintained in each attached body. Each\n * contact has two contact nodes, one for each attached body.\n */\nexport class ContactEdge {\n contact: Contact;\n prev: ContactEdge | null = null;\n next: ContactEdge | null = null;\n other: Body | null = null;\n constructor(contact: Contact) {\n this.contact = contact;\n }\n\n /** @internal */\n recycle() {\n this.prev = null;\n this.next = null;\n this.other = null;\n }\n}\n\nexport type EvaluateFunction = (\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number\n) => void;\n\n/**\n * Friction mixing law. The idea is to allow either fixture to drive the\n * friction to zero. For example, anything slides on ice.\n */\nexport function mixFriction(friction1: number, friction2: number): number {\n return math_sqrt(friction1 * friction2);\n}\n\n/**\n * Restitution mixing law. The idea is allow for anything to bounce off an\n * inelastic surface. For example, a superball bounces on anything.\n */\nexport function mixRestitution(restitution1: number, restitution2: number): number {\n return restitution1 > restitution2 ? restitution1 : restitution2;\n}\n\n// TODO: move this to Settings?\n/** @internal */ const s_registers = [];\n\n// TODO: merge with ManifoldPoint?\nexport class VelocityConstraintPoint {\n rA = matrix.vec2(0, 0);\n rB = matrix.vec2(0, 0);\n normalImpulse = 0;\n tangentImpulse = 0;\n normalMass = 0;\n tangentMass = 0;\n velocityBias = 0;\n\n recycle() {\n matrix.zeroVec2(this.rA);\n matrix.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}\n\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const vA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const vB = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const rA = matrix.vec2(0, 0);\n/** @internal */ const rB = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const point = matrix.vec2(0, 0);\n/** @internal */ const dv = matrix.vec2(0, 0);\n/** @internal */ const dv1 = matrix.vec2(0, 0);\n/** @internal */ const dv2 = matrix.vec2(0, 0);\n/** @internal */ const b = matrix.vec2(0, 0);\n/** @internal */ const a = matrix.vec2(0, 0);\n/** @internal */ const x = matrix.vec2(0, 0);\n/** @internal */ const d = matrix.vec2(0, 0);\n/** @internal */ const P1 = matrix.vec2(0, 0);\n/** @internal */ const P2 = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * The class manages contact between two shapes. A contact exists for each\n * overlapping AABB in the broad-phase (except if filtered). Therefore a contact\n * object may exist that has no contact points.\n */\nexport class Contact {\n // Nodes for connecting bodies.\n /** @internal */ m_nodeA = new ContactEdge(this);\n /** @internal */ m_nodeB = new ContactEdge(this);\n /** @internal */ m_fixtureA: Fixture | null = null;\n /** @internal */ m_fixtureB: Fixture | null = null;\n /** @internal */ m_indexA = -1;\n /** @internal */ m_indexB = -1;\n /** @internal */ m_evaluateFcn: EvaluateFunction | null = null;\n /** @internal */ m_manifold: Manifold = new Manifold();\n /** @internal */ m_prev: Contact | null = null;\n /** @internal */ m_next: Contact | null = null;\n /** @internal */ m_toi = 1.0;\n /** @internal */ m_toiCount = 0;\n // This contact has a valid TOI in m_toi\n /** @internal */ m_toiFlag = false;\n /** @internal */ m_friction = 0.0;\n /** @internal */ m_restitution = 0.0;\n /** @internal */ m_tangentSpeed = 0.0;\n /** @internal This contact can be disabled (by user) */\n m_enabledFlag = true;\n /** @internal Used when crawling contact graph when forming islands. */\n m_islandFlag = false;\n /** @internal Set when the shapes are touching. */\n m_touchingFlag = false;\n /** @internal This contact needs filtering because a fixture filter was changed. */\n m_filterFlag = false;\n /** @internal This bullet contact had a TOI event */\n m_bulletHitFlag = false;\n\n /** @internal Contact reporting impulse object cache */\n m_impulse: ContactImpulse = new ContactImpulse(this);\n\n // VelocityConstraint\n /** @internal */ v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; // [maxManifoldPoints];\n /** @internal */ v_normal = matrix.vec2(0, 0);\n /** @internal */ v_normalMass: Mat22 = new Mat22();\n /** @internal */ v_K: Mat22 = new Mat22();\n /** @internal */ v_pointCount = 0;\n /** @internal */ v_tangentSpeed = 0;\n /** @internal */ v_friction = 0;\n /** @internal */ v_restitution = 0;\n /** @internal */ v_invMassA = 0;\n /** @internal */ v_invMassB = 0;\n /** @internal */ v_invIA = 0;\n /** @internal */ v_invIB = 0;\n\n // PositionConstraint\n /** @internal */ p_localPoints = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints];\n /** @internal */ p_localNormal = matrix.vec2(0, 0);\n /** @internal */ p_localPoint = matrix.vec2(0, 0);\n /** @internal */ p_localCenterA = matrix.vec2(0, 0);\n /** @internal */ p_localCenterB = matrix.vec2(0, 0);\n /** @internal */ p_type = ManifoldType.e_unset;\n /** @internal */ p_radiusA = 0;\n /** @internal */ p_radiusB = 0;\n /** @internal */ p_pointCount = 0;\n /** @internal */ p_invMassA = 0;\n /** @internal */ p_invMassB = 0;\n /** @internal */ p_invIA = 0;\n /** @internal */ p_invIB = 0;\n\n /** @internal */ \n initialize(fA: Fixture, indexA: number, fB: Fixture, indexB: number, evaluateFcn: EvaluateFunction) {\n this.m_fixtureA = fA;\n this.m_fixtureB = fB;\n\n this.m_indexA = indexA;\n this.m_indexB = indexB;\n\n this.m_evaluateFcn = evaluateFcn;\n\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\n /** @internal */ \n recycle() {\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\n this.m_impulse.recycle();\n\n // VelocityConstraint\n for(const point of this.v_points) {\n point.recycle();\n }\n matrix.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\n // PositionConstraint\n for(const point of this.p_localPoints) {\n matrix.zeroVec2(point);\n }\n matrix.zeroVec2(this.p_localNormal);\n matrix.zeroVec2(this.p_localPoint);\n matrix.zeroVec2(this.p_localCenterA);\n matrix.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\n initConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n const manifold = this.m_manifold;\n\n const pointCount = manifold.pointCount;\n _ASSERT && console.assert(pointCount > 0);\n\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\n this.v_friction = this.m_friction;\n this.v_restitution = this.m_restitution;\n this.v_tangentSpeed = this.m_tangentSpeed;\n\n this.v_pointCount = pointCount;\n\n this.v_K.setZero();\n this.v_normalMass.setZero();\n\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 matrix.copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter);\n matrix.copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter);\n\n this.p_radiusA = shapeA.m_radius;\n this.p_radiusB = shapeB.m_radius;\n\n this.p_type = manifold.type;\n matrix.copyVec2(this.p_localNormal, manifold.localNormal);\n matrix.copyVec2(this.p_localPoint, manifold.localPoint);\n this.p_pointCount = pointCount;\n\n for (let j = 0; j < Settings.maxManifoldPoints; ++j) {\n this.v_points[j].recycle();\n matrix.zeroVec2(this.p_localPoints[j]);\n }\n\n for (let j = 0; j < pointCount; ++j) {\n const cp = manifold.points[j];\n const 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 matrix.copyVec2(this.p_localPoints[j], cp.localPoint);\n }\n }\n\n /**\n * Get the contact manifold. Do not modify the manifold unless you understand\n * the internals of the library.\n */\n getManifold(): Manifold {\n return this.m_manifold;\n }\n\n /**\n * Get the world manifold.\n */\n getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n return this.m_manifold.getWorldManifold(\n worldManifold,\n bodyA.getTransform(), shapeA.m_radius,\n bodyB.getTransform(), shapeB.m_radius\n );\n }\n\n /**\n * Enable/disable this contact. This can be used inside the pre-solve contact\n * listener. The contact is only disabled for the current time step (or sub-step\n * in continuous collisions).\n */\n setEnabled(flag: boolean): void {\n this.m_enabledFlag = !!flag;\n }\n\n /**\n * Has this contact been disabled?\n */\n isEnabled(): boolean {\n return this.m_enabledFlag;\n }\n\n /**\n * Is this contact touching?\n */\n isTouching(): boolean {\n return this.m_touchingFlag;\n }\n\n /**\n * Get the next contact in the world's contact list.\n */\n getNext(): Contact | null {\n return this.m_next;\n }\n\n /**\n * Get fixture A in this contact.\n */\n getFixtureA(): Fixture {\n return this.m_fixtureA;\n }\n\n /**\n * Get fixture B in this contact.\n */\n getFixtureB(): Fixture {\n return this.m_fixtureB;\n }\n\n /**\n * Get the child primitive index for fixture A.\n */\n getChildIndexA(): number {\n return this.m_indexA;\n }\n\n /**\n * Get the child primitive index for fixture B.\n */\n getChildIndexB(): number {\n return this.m_indexB;\n }\n\n /**\n * Flag this contact for filtering. Filtering will occur the next time step.\n */\n flagForFiltering(): void {\n this.m_filterFlag = true;\n }\n\n /**\n * Override the default friction mixture. You can call this in\n * \"pre-solve\" callback. This value persists until set or reset.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the friction.\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Reset the friction mixture to the default value.\n */\n resetFriction(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction);\n }\n\n /**\n * Override the default restitution mixture. You can call this in\n * \"pre-solve\" callback. The value persists until you set or reset.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Get the restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Reset the restitution to the default value.\n */\n resetRestitution(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution);\n }\n\n /**\n * Set the desired tangent speed for a conveyor belt behavior. In meters per\n * second.\n */\n setTangentSpeed(speed: number): void {\n this.m_tangentSpeed = speed;\n }\n\n /**\n * Get the desired tangent speed. In meters per second.\n */\n getTangentSpeed(): number {\n return this.m_tangentSpeed;\n }\n\n /**\n * Called by Update method, and implemented by subclasses.\n */\n evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_evaluateFcn(manifold, xfA, fixtureA, this.m_indexA, xfB, fixtureB, this.m_indexB);\n }\n\n /**\n * Updates the contact manifold and touching status.\n *\n * Note: do not assume the fixture AABBs are overlapping or are valid.\n *\n * @param listener.beginContact\n * @param listener.endContact\n * @param listener.preSolve\n */\n update(listener?: {\n beginContact(contact: Contact): void,\n endContact(contact: Contact): void,\n preSolve(contact: Contact, oldManifold: Manifold): void\n }): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n // Re-enable this contact.\n this.m_enabledFlag = true;\n\n let touching = false;\n const wasTouching = this.m_touchingFlag;\n\n const sensorA = fixtureA.m_isSensor;\n const sensorB = fixtureB.m_isSensor;\n const sensor = sensorA || sensorB;\n\n const xfA = bodyA.m_xf;\n const xfB = bodyB.m_xf;\n\n // Is this contact a sensor?\n if (sensor) {\n touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB);\n\n // Sensors don't generate manifolds.\n this.m_manifold.pointCount = 0;\n } else {\n\n oldManifold.recycle();\n oldManifold.set(this.m_manifold);\n this.m_manifold.recycle();\n\n this.evaluate(this.m_manifold, xfA, xfB);\n touching = this.m_manifold.pointCount > 0;\n\n // Match old contact ids to new contact ids and copy the\n // stored impulses to warm start the solver.\n for (let i = 0; i < this.m_manifold.pointCount; ++i) {\n const nmp = this.m_manifold.points[i];\n nmp.normalImpulse = 0.0;\n nmp.tangentImpulse = 0.0;\n\n for (let j = 0; j < oldManifold.pointCount; ++j) {\n const 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\n if (touching !== wasTouching) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n }\n\n this.m_touchingFlag = touching;\n\n const hasListener = typeof listener === \"object\" && listener !== null;\n\n if (!wasTouching && touching && hasListener) {\n listener.beginContact(this);\n }\n\n if (wasTouching && !touching && hasListener) {\n listener.endContact(this);\n }\n\n if (!sensor && touching && hasListener && oldManifold) {\n listener.preSolve(this, oldManifold);\n }\n }\n\n solvePositionConstraint(step: TimeStep): number {\n return this._solvePositionConstraint(step, null, null);\n }\n\n solvePositionConstraintTOI(step: TimeStep, toiA: Body, toiB: Body): number {\n return this._solvePositionConstraint(step, toiA, toiB);\n }\n\n private _solvePositionConstraint(step: TimeStep, toiA: Body | null, toiB: Body | null): number {\n const toi = toiA !== null && toiB !== null ? true : false;\n let minSeparation = 0.0;\n\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return minSeparation;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return minSeparation;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n let mA = 0.0;\n let iA = 0.0;\n if (!toi || (bodyA === toiA || bodyA === toiB)) {\n mA = this.p_invMassA;\n iA = this.p_invIA;\n }\n\n let mB = 0.0;\n let iB = 0.0;\n if (!toi || (bodyB === toiA || bodyB === toiB)) {\n mB = this.p_invMassB;\n iB = this.p_invIB;\n }\n\n matrix.copyVec2(cA, positionA.c);\n let aA = positionA.a;\n\n matrix.copyVec2(cB, positionB.c);\n let aB = positionB.a;\n\n // Solve normal constraints\n for (let j = 0; j < this.p_pointCount; ++j) {\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n // PositionSolverManifold\n let separation: number;\n switch (this.p_type) {\n case ManifoldType.e_circles: {\n matrix.transformVec2(pointA, xfA, this.p_localPoint);\n matrix.transformVec2(pointB, xfB, this.p_localPoints[0]);\n matrix.subVec2(normal, pointB, pointA);\n matrix.normalizeVec2(normal);\n\n matrix.combine2Vec2(point, 0.5, pointA, 0.5, pointB);\n separation = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal) - this.p_radiusA - this.p_radiusB;\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfA, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfB, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfB, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfA, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n\n // Ensure normal points from A to B\n matrix.negVec2(normal);\n break;\n }\n // todo: what should we do here?\n default: {\n return minSeparation;\n }\n }\n\n matrix.subVec2(rA, point, cA);\n matrix.subVec2(rB, point, cB);\n\n // Track max constraint error.\n minSeparation = math_min(minSeparation, separation);\n\n const baumgarte = toi ? Settings.toiBaugarte : Settings.baumgarte;\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n // Prevent large corrections and allow slop.\n const C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0.0);\n\n // Compute the effective mass.\n const rnA = matrix.crossVec2Vec2(rA, normal);\n const rnB = matrix.crossVec2Vec2(rB, normal);\n const K = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n // Compute normal impulse\n const impulse = K > 0.0 ? -C / K : 0.0;\n\n matrix.scaleVec2(P, impulse, normal);\n\n matrix.minusScaleVec2(cA, mA, P);\n aA -= iA * matrix.crossVec2Vec2(rA, P);\n\n matrix.plusScaleVec2(cB, mB, P);\n aB += iB * matrix.crossVec2Vec2(rB, P);\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n\n return minSeparation;\n }\n\n initVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const radiusA = this.p_radiusA;\n const radiusB = this.p_radiusB;\n const manifold = this.m_manifold;\n\n const mA = this.v_invMassA;\n const mB = this.v_invMassB;\n const iA = this.v_invIA;\n const iB = this.v_invIB;\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n matrix.copyVec2(cA, positionA.c);\n const aA = positionA.a;\n matrix.copyVec2(vA, velocityA.v);\n const wA = velocityA.w;\n\n matrix.copyVec2(cB, positionB.c);\n const aB = positionB.a;\n matrix.copyVec2(vB, velocityB.v);\n const wB = velocityB.w;\n\n _ASSERT && console.assert(manifold.pointCount > 0);\n\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n worldManifold.recycle();\n manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB);\n\n matrix.copyVec2(this.v_normal, worldManifold.normal);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n const wmp = worldManifold.points[j];\n\n matrix.subVec2(vcp.rA, wmp, cA);\n matrix.subVec2(vcp.rB, wmp, cB);\n\n const rnA = matrix.crossVec2Vec2(vcp.rA, this.v_normal);\n const rnB = matrix.crossVec2Vec2(vcp.rB, this.v_normal);\n\n const kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n vcp.normalMass = kNormal > 0.0 ? 1.0 / kNormal : 0.0;\n\n matrix.crossVec2Num(tangent, this.v_normal, 1.0);\n\n const rtA = matrix.crossVec2Vec2(vcp.rA, tangent);\n const rtB = matrix.crossVec2Vec2(vcp.rB, tangent);\n\n const kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB;\n\n vcp.tangentMass = kTangent > 0.0 ? 1.0 / kTangent : 0.0;\n\n // Setup a velocity bias for restitution.\n vcp.velocityBias = 0.0;\n let vRel = 0;\n vRel += matrix.dotVec2(this.v_normal, vB);\n vRel += matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wB, vcp.rB));\n vRel -= matrix.dotVec2(this.v_normal, vA);\n vRel -= matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wA, vcp.rA));\n if (vRel < -Settings.velocityThreshold) {\n vcp.velocityBias = -this.v_restitution * vRel;\n }\n }\n\n // If we have two points, then prepare the block solver.\n if (this.v_pointCount == 2 && step.blockSolve) {\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n const rn1A = matrix.crossVec2Vec2(vcp1.rA, this.v_normal);\n const rn1B = matrix.crossVec2Vec2(vcp1.rB, this.v_normal);\n const rn2A = matrix.crossVec2Vec2(vcp2.rA, this.v_normal);\n const rn2B = matrix.crossVec2Vec2(vcp2.rB, this.v_normal);\n\n const k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B;\n const k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B;\n const k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B;\n\n // Ensure a reasonable condition number.\n const k_maxConditionNumber = 1000.0;\n if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) {\n // K is safe to invert.\n this.v_K.ex.setNum(k11, k12);\n this.v_K.ey.setNum(k12, k22);\n // this.v_normalMass.set(this.v_K.getInverse());\n const a = this.v_K.ex.x;\n const b = this.v_K.ey.x;\n const c = this.v_K.ex.y;\n const d = this.v_K.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n this.v_normalMass.ex.x = det * d;\n this.v_normalMass.ey.x = -det * b;\n this.v_normalMass.ex.y = -det * c;\n this.v_normalMass.ey.y = det * a;\n\n } else {\n // The constraints are redundant, just use one.\n // TODO_ERIN use deepest?\n this.v_pointCount = 1;\n }\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n warmStartConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n matrix.combine2Vec2(P, vcp.normalImpulse, normal, vcp.tangentImpulse, tangent);\n\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n matrix.minusScaleVec2(vA, mA, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n matrix.plusScaleVec2(vB, mB, P);\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n storeConstraintImpulses(step: TimeStep): void {\n const manifold = this.m_manifold;\n for (let 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\n solveVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const positionA = bodyA.c_position;\n\n const velocityB = bodyB.c_velocity;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n const friction = this.v_friction;\n\n _ASSERT && console.assert(this.v_pointCount == 1 || this.v_pointCount == 2);\n\n // Solve tangent constraints first because non-penetration is more important\n // than friction.\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute tangent force\n const vt = matrix.dotVec2(dv, tangent) - this.v_tangentSpeed;\n let lambda = vcp.tangentMass * (-vt);\n\n // Clamp the accumulated force\n const maxFriction = friction * vcp.normalImpulse;\n const newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction);\n lambda = newImpulse - vcp.tangentImpulse;\n vcp.tangentImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, tangent);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n\n // Solve normal constraints\n if (this.v_pointCount == 1 || step.blockSolve == false) {\n for (let i = 0; i < this.v_pointCount; ++i) {\n const vcp = this.v_points[i]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute normal impulse\n const vn = matrix.dotVec2(dv, normal);\n let lambda = -vcp.normalMass * (vn - vcp.velocityBias);\n\n // Clamp the accumulated impulse\n const newImpulse = math_max(vcp.normalImpulse + lambda, 0.0);\n lambda = newImpulse - vcp.normalImpulse;\n vcp.normalImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, normal);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n } else {\n // Block solver developed in collaboration with Dirk Gregorius (back in\n // 01/07 on Box2D_Lite).\n // Build the mini LCP for this contact patch\n //\n // vn = A * x + b, vn >= 0, x >= 0 and vn_i * x_i = 0 with i = 1..2\n //\n // A = J * W * JT and J = ( -n, -r1 x n, n, r2 x n )\n // b = vn0 - velocityBias\n //\n // The system is solved using the \"Total enumeration method\" (s. Murty).\n // The complementary constraint vn_i * x_i\n // implies that we must have in any solution either vn_i = 0 or x_i = 0.\n // So for the 2D contact problem the cases\n // vn1 = 0 and vn2 = 0, x1 = 0 and x2 = 0, x1 = 0 and vn2 = 0, x2 = 0 and\n // vn1 = 0 need to be tested. The first valid\n // solution that satisfies the problem is chosen.\n //\n // In order to account of the accumulated impulse 'a' (because of the\n // iterative nature of the solver which only requires\n // that the accumulated impulse is clamped and not the incremental\n // impulse) we change the impulse variable (x_i).\n //\n // Substitute:\n //\n // x = a + d\n //\n // a := old total impulse\n // x := new total impulse\n // d := incremental impulse\n //\n // For the current iteration we extend the formula for the incremental\n // impulse\n // to compute the new total impulse:\n //\n // vn = A * d + b\n // = A * (x - a) + b\n // = A * x + b - A * a\n // = A * x + b'\n // b' = b - A * a;\n\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n matrix.setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse);\n _ASSERT && console.assert(a.x >= 0.0 && a.y >= 0.0);\n\n // Relative velocity at contact\n // let dv1 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp1.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp1.rA));\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // let dv2 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp2.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp2.rA));\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n let vn1 = matrix.dotVec2(dv1, normal);\n let vn2 = matrix.dotVec2(dv2, normal);\n\n matrix.setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias);\n\n // Compute b'\n // b.sub(Mat22.mulVec2(this.v_K, a));\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\n const k_errorTol = 1e-3;\n // NOT_USED(k_errorTol);\n\n while (true) {\n //\n // Case 1: vn = 0\n //\n // 0 = A * x + b'\n //\n // Solve for x:\n //\n // x = - inv(A) * b'\n //\n // const x = Mat22.mulVec2(this.v_normalMass, b).neg();\n matrix.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\n if (x.x >= 0.0 && x.y >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 2: vn1 = 0 and x2 = 0\n //\n // 0 = a11 * x1 + a12 * 0 + b1'\n // vn2 = a21 * x1 + a22 * 0 + b2'\n //\n x.x = -vcp1.normalMass * b.x;\n x.y = 0.0;\n vn1 = 0.0;\n vn2 = this.v_K.ex.y * x.x + b.y;\n\n if (x.x >= 0.0 && vn2 >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 3: vn2 = 0 and x1 = 0\n //\n // vn1 = a11 * 0 + a12 * x2 + b1'\n // 0 = a21 * 0 + a22 * x2 + b2'\n //\n x.x = 0.0;\n x.y = -vcp2.normalMass * b.y;\n vn1 = this.v_K.ey.x * x.y + b.x;\n vn2 = 0.0;\n\n if (x.y >= 0.0 && vn1 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 4: x1 = 0 and x2 = 0\n //\n // vn1 = b1\n // vn2 = b2;\n //\n x.x = 0.0;\n x.y = 0.0;\n vn1 = b.x;\n vn2 = b.y;\n\n if (vn1 >= 0.0 && vn2 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n break;\n }\n\n // No solution, give up. This is hit sometimes, but it doesn't seem to\n // matter.\n break;\n }\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n /** @internal */\n static addType(type1: ShapeType, type2: ShapeType, callback: EvaluateFunction): void {\n s_registers[type1] = s_registers[type1] || {};\n s_registers[type1][type2] = callback;\n }\n\n /** @internal */\n static create(fixtureA: Fixture, indexA: number, fixtureB: Fixture, indexB: number): Contact | null {\n const typeA = fixtureA.m_shape.m_type;\n const typeB = fixtureB.m_shape.m_type;\n\n const contact = contactPool.allocate();\n let 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\n // Contact creation may swap fixtures.\n fixtureA = contact.m_fixtureA;\n fixtureB = contact.m_fixtureB;\n indexA = contact.getChildIndexA();\n indexB = contact.getChildIndexB();\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n\n // Connect to body A\n contact.m_nodeA.contact = contact;\n contact.m_nodeA.other = bodyB;\n\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\n // Connect to body B\n contact.m_nodeB.contact = contact;\n contact.m_nodeB.other = bodyA;\n\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\n // Wake up the bodies\n if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n return contact;\n }\n\n /** @internal */\n static destroy(contact: Contact, listener: { endContact: (contact: Contact) => void }): void {\n const fixtureA = contact.m_fixtureA;\n const fixtureB = contact.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n if (contact.isTouching()) {\n listener.endContact(contact);\n }\n\n // Remove from body 1\n if (contact.m_nodeA.prev) {\n contact.m_nodeA.prev.next = contact.m_nodeA.next;\n }\n\n if (contact.m_nodeA.next) {\n contact.m_nodeA.next.prev = contact.m_nodeA.prev;\n }\n\n if (contact.m_nodeA == bodyA.m_contactList) {\n bodyA.m_contactList = contact.m_nodeA.next;\n }\n\n // Remove from body 2\n if (contact.m_nodeB.prev) {\n contact.m_nodeB.prev.next = contact.m_nodeB.next;\n }\n\n if (contact.m_nodeB.next) {\n contact.m_nodeB.next.prev = contact.m_nodeB.prev;\n }\n\n if (contact.m_nodeB == bodyB.m_contactList) {\n bodyB.m_contactList = contact.m_nodeB.next;\n }\n\n if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n // const typeA = fixtureA.getType();\n // const typeB = fixtureB.getType();\n\n // const destroyFcn = s_registers[typeA][typeB].destroyFcn;\n // if (typeof destroyFcn === 'function') {\n // destroyFcn(contact);\n // }\n\n contactPool.release(contact);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { Solver, ContactImpulse, TimeStep } from \"./Solver\";\nimport { Body, BodyDef } from \"./Body\";\nimport { Joint } from \"./Joint\";\nimport { Contact } from \"./Contact\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Fixture, FixtureProxy } from \"./Fixture\";\nimport { Manifold } from \"../collision/Manifold\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface WorldDef {\n /** [default: { x : 0, y : 0}] */\n gravity?: Vec2Value;\n\n /** [default: true] */\n allowSleep?: boolean;\n\n /** [default: true] */\n warmStarting?: boolean;\n\n /** [default: true] */\n continuousPhysics?: boolean;\n\n /** [default: false] */\n subStepping?: boolean;\n\n /** [default: true] */\n blockSolve?: boolean;\n\n /** @internal [8] For the velocity constraint solver. */\n velocityIterations?: number;\n\n /** @internal [3] For the position constraint solver. */\n positionIterations?: number;\n}\n\n/** @internal */ const DEFAULTS: WorldDef = {\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};\n\n/**\n * Callback function for ray casts, see {@link World.rayCast}.\n *\n * Called for each fixture found in the query.\n * The returned value replaces the ray-cast input maxFraction.\n * You control how the ray cast proceeds by returning a numeric/float value.\n * \n * - `0` to terminate the ray cast\n * - `fraction` to clip the ray cast at current point\n * - `1` don't clip the ray and continue\n * - `-1` (or anything else) to continue\n *\n * @param fixture The fixture hit by the ray\n * @param point The point of initial intersection\n * @param normal The normal vector at the point of intersection\n * @param fraction The fraction along the ray at the point of intersection\n *\n * @returns A number to update the maxFraction\n */\nexport type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number;\n\n/**\n * Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\nexport type WorldAABBQueryCallback = (fixture: Fixture) => boolean;\n\nexport class World {\n /** @internal */ m_solver: Solver;\n /** @internal */ m_broadPhase: BroadPhase;\n /** @internal */ m_contactList: Contact | null;\n /** @internal */ m_contactCount: number;\n /** @internal */ m_bodyList: Body | null;\n /** @internal */ m_bodyCount: number;\n /** @internal */ m_jointList: Joint | null;\n /** @internal */ m_jointCount: number;\n /** @internal */ m_stepComplete: boolean;\n /** @internal */ m_allowSleep: boolean;\n /** @internal */ m_gravity: Vec2;\n /** @internal */ m_clearForces: boolean;\n /** @internal */ m_newFixture: boolean;\n /** @internal */ m_locked: boolean;\n /** @internal */ m_warmStarting: boolean;\n /** @internal */ m_continuousPhysics: boolean;\n /** @internal */ m_subStepping: boolean;\n /** @internal */ m_blockSolve: boolean;\n /** @internal */ m_velocityIterations: number;\n /** @internal */ m_positionIterations: number;\n /** @internal */ m_t: number;\n\n // TODO\n /** @internal */ _listeners: {\n [key: string]: any[]\n };\n\n /**\n * @param def World definition or gravity vector.\n */\n constructor(def?: WorldDef | Vec2 | null) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof World)) {\n return new World(def);\n }\n\n this.s_step = new TimeStep();\n\n\n if (!def) {\n def = {};\n } else if (Vec2.isValid(def)) {\n def = { gravity: def as Vec2 };\n }\n\n def = options(def, DEFAULTS) as WorldDef;\n\n this.m_solver = new Solver(this);\n\n this.m_broadPhase = new BroadPhase();\n\n this.m_contactList = null;\n this.m_contactCount = 0;\n\n this.m_bodyList = null;\n this.m_bodyCount = 0;\n\n this.m_jointList = null;\n this.m_jointCount = 0;\n\n this.m_stepComplete = true;\n\n this.m_allowSleep = def.allowSleep;\n this.m_gravity = Vec2.clone(def.gravity);\n\n this.m_clearForces = true;\n this.m_newFixture = false;\n this.m_locked = false;\n\n // These are for debugging the solver.\n this.m_warmStarting = def.warmStarting;\n this.m_continuousPhysics = def.continuousPhysics;\n this.m_subStepping = def.subStepping;\n\n this.m_blockSolve = def.blockSolve;\n this.m_velocityIterations = def.velocityIterations;\n this.m_positionIterations = def.positionIterations;\n\n this.m_t = 0;\n }\n\n /** @internal */\n _serialize(): object {\n const bodies = [];\n const joints = [];\n\n for (let b = this.getBodyList(); b; b = b.getNext()) {\n bodies.push(b);\n }\n\n for (let j = this.getJointList(); j; j = j.getNext()) {\n // @ts-ignore\n if (typeof j._serialize === \"function\") {\n joints.push(j);\n }\n }\n\n return {\n gravity: this.m_gravity,\n bodies,\n joints,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, context: any, restore: any): World {\n if (!data) {\n return new World();\n }\n\n const world = new World(data.gravity);\n\n if (data.bodies) {\n for (let i = data.bodies.length - 1; i >= 0; i -= 1) {\n world._addBody(restore(Body, data.bodies[i], world));\n }\n }\n\n if (data.joints) {\n for (let i = data.joints.length - 1; i >= 0; i--) {\n world.createJoint(restore(Joint, data.joints[i], world));\n }\n }\n\n return world;\n }\n\n /**\n * Get the world body list. With the returned body, use Body.getNext to get the\n * next body in the world list. A null body indicates the end of the list.\n *\n * @return the head of the world body list.\n */\n getBodyList(): Body | null {\n return this.m_bodyList;\n }\n\n /**\n * Get the world joint list. With the returned joint, use Joint.getNext to get\n * the next joint in the world list. A null joint indicates the end of the list.\n *\n * @return the head of the world joint list.\n */\n getJointList(): Joint | null {\n return this.m_jointList;\n }\n\n /**\n * Get the world contact list. With the returned contact, use Contact.getNext to\n * get the next contact in the world list. A null contact indicates the end of\n * the list.\n *\n * Warning: contacts are created and destroyed in the middle of a time step.\n * Use ContactListener to avoid missing contacts.\n *\n * @return the head of the world contact list.\n */\n getContactList(): Contact | null {\n return this.m_contactList;\n }\n\n getBodyCount(): number {\n return this.m_bodyCount;\n }\n\n getJointCount(): number {\n return this.m_jointCount;\n }\n\n /**\n * Get the number of contacts (each may have 0 or more contact points).\n */\n getContactCount(): number {\n return this.m_contactCount;\n }\n\n /**\n * Change the global gravity vector.\n */\n setGravity(gravity: Vec2Value): void {\n this.m_gravity.set(gravity);\n }\n\n /**\n * Get the global gravity vector.\n */\n getGravity(): Vec2 {\n return this.m_gravity;\n }\n\n /**\n * Is the world locked (in the middle of a time step).\n */\n isLocked(): boolean {\n return this.m_locked;\n }\n\n /**\n * Enable/disable sleep.\n */\n setAllowSleeping(flag: boolean): void {\n if (flag == this.m_allowSleep) {\n return;\n }\n\n this.m_allowSleep = flag;\n if (this.m_allowSleep == false) {\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.setAwake(true);\n }\n }\n }\n\n getAllowSleeping(): boolean {\n return this.m_allowSleep;\n }\n\n /**\n * Enable/disable warm starting. For testing.\n */\n setWarmStarting(flag: boolean): void {\n this.m_warmStarting = flag;\n }\n\n getWarmStarting(): boolean {\n return this.m_warmStarting;\n }\n\n /**\n * Enable/disable continuous physics. For testing.\n */\n setContinuousPhysics(flag: boolean): void {\n this.m_continuousPhysics = flag;\n }\n\n getContinuousPhysics(): boolean {\n return this.m_continuousPhysics;\n }\n\n /**\n * Enable/disable single stepped continuous physics. For testing.\n */\n setSubStepping(flag: boolean): void {\n this.m_subStepping = flag;\n }\n\n getSubStepping(): boolean {\n return this.m_subStepping;\n }\n\n /**\n * Set flag to control automatic clearing of forces after each time step.\n */\n setAutoClearForces(flag: boolean): void {\n this.m_clearForces = flag;\n }\n\n /**\n * Get the flag that controls automatic clearing of forces after each time step.\n */\n getAutoClearForces(): boolean {\n return this.m_clearForces;\n }\n\n /**\n * Manually clear the force buffer on all bodies. By default, forces are cleared\n * automatically after each call to step. The default behavior is modified by\n * calling setAutoClearForces. The purpose of this function is to support\n * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step\n * under a variable frame-rate. When you perform sub-stepping you will disable\n * auto clearing of forces and instead call clearForces after all sub-steps are\n * complete in one pass of your game loop.\n *\n * See {@link World.setAutoClearForces}\n */\n clearForces(): void {\n for (let body = this.m_bodyList; body; body = body.getNext()) {\n body.m_force.setZero();\n body.m_torque = 0.0;\n }\n }\n\n /**\n * Query the world for all fixtures that potentially overlap the provided AABB.\n *\n * @param aabb The query box.\n * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\n queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n this.m_broadPhase.query(aabb, function(proxyId: number): boolean { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n return callback(proxy.fixture);\n });\n }\n\n /**\n * Ray-cast the world for all fixtures in the path of the ray. Your callback\n * controls whether you get the closest point, any point, or n-points. The\n * ray-cast ignores shapes that contain the starting point.\n *\n * @param point1 The ray starting point\n * @param point2 The ray ending point\n * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value.\n */\n rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n\n this.m_broadPhase.rayCast({\n maxFraction : 1.0,\n p1 : point1,\n p2 : point2\n }, function(input: RayCastInput, proxyId: number): number { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n const fixture = proxy.fixture;\n const index = proxy.childIndex;\n // @ts-ignore\n const output: RayCastOutput = {}; // TODO GC\n const hit = fixture.rayCast(output, input, index);\n if (hit) {\n const fraction = output.fraction;\n const point = Vec2.add(Vec2.mulNumVec2((1.0 - fraction), input.p1), Vec2.mulNumVec2(fraction, input.p2));\n return callback(fixture, point, output.normal, fraction);\n }\n return input.maxFraction;\n });\n }\n\n /**\n * Get the number of broad-phase proxies.\n */\n getProxyCount(): number {\n return this.m_broadPhase.getProxyCount();\n }\n\n /**\n * Get the height of broad-phase dynamic tree.\n */\n getTreeHeight(): number {\n return this.m_broadPhase.getTreeHeight();\n }\n\n /**\n * Get the balance of broad-phase dynamic tree.\n */\n getTreeBalance(): number {\n return this.m_broadPhase.getTreeBalance();\n }\n\n /**\n * Get the quality metric of broad-phase dynamic tree. The smaller the better.\n * The minimum is 1.\n */\n getTreeQuality(): number {\n return this.m_broadPhase.getTreeQuality();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The body shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n _ASSERT && console.assert(this.m_locked == false);\n if (this.m_locked) {\n return;\n }\n\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.m_xf.p.sub(newOrigin);\n b.m_sweep.c0.sub(newOrigin);\n b.m_sweep.c.sub(newOrigin);\n }\n\n for (let j = this.m_jointList; j; j = j.m_next) {\n j.shiftOrigin(newOrigin);\n }\n\n this.m_broadPhase.shiftOrigin(newOrigin);\n }\n\n /** @internal Used for deserialize. */\n _addBody(body: Body): void {\n _ASSERT && console.assert(this.isLocked() === false);\n if (this.isLocked()) {\n return;\n }\n\n // Add to world doubly linked list.\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\n /**\n * Create a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This function is locked during callbacks.\n */\n createBody(def?: BodyDef): Body;\n createBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createBody(arg1?, arg2?) {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n let def: BodyDef = {};\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\n const body = new Body(this, def);\n this._addBody(body);\n return body;\n }\n\n createDynamicBody(def?: BodyDef): Body;\n createDynamicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createDynamicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n createKinematicBody(def?: BodyDef): Body;\n createKinematicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createKinematicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n /**\n * Destroy a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This automatically deletes all associated shapes and joints.\n *\n * Warning: This function is locked during callbacks.\n */\n destroyBody(b: Body): boolean {\n _ASSERT && console.assert(this.m_bodyCount > 0);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n if (b.m_destroyed) {\n return false;\n }\n\n // Delete the attached joints.\n let je = b.m_jointList;\n while (je) {\n const je0 = je;\n je = je.next;\n\n this.publish(\"remove-joint\", je0.joint);\n this.destroyJoint(je0.joint);\n\n b.m_jointList = je;\n }\n b.m_jointList = null;\n\n // Delete the attached contacts.\n let ce = b.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n\n this.destroyContact(ce0.contact);\n\n b.m_contactList = ce;\n }\n b.m_contactList = null;\n\n // Delete the attached fixtures. This destroys broad-phase proxies.\n let f = b.m_fixtureList;\n while (f) {\n const f0 = f;\n f = f.m_next;\n\n this.publish(\"remove-fixture\", f0);\n f0.destroyProxies(this.m_broadPhase);\n\n b.m_fixtureList = f;\n }\n b.m_fixtureList = null;\n\n // Remove world body list.\n if (b.m_prev) {\n b.m_prev.m_next = b.m_next;\n }\n\n if (b.m_next) {\n b.m_next.m_prev = b.m_prev;\n }\n\n if (b == this.m_bodyList) {\n this.m_bodyList = b.m_next;\n }\n\n b.m_destroyed = true;\n\n --this.m_bodyCount;\n\n this.publish(\"remove-body\", b);\n\n return true;\n }\n\n /**\n * Create a joint to constrain bodies together. No reference to the definition\n * is retained. This may cause the connected bodies to cease colliding.\n *\n * Warning: This function is locked during callbacks.\n */\n createJoint(joint: T): T | null {\n _ASSERT && console.assert(!!joint.m_bodyA);\n _ASSERT && console.assert(!!joint.m_bodyB);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n // Connect to the world list.\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\n // Connect to the bodies' doubly linked lists.\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\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\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n for (let edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) {\n if (edge.other == joint.m_bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n }\n }\n\n // Note: creating a joint doesn't wake the bodies.\n\n return joint;\n }\n\n /**\n * Destroy a joint. This may cause the connected bodies to begin colliding.\n * Warning: This function is locked during callbacks.\n */\n destroyJoint(joint: Joint): void {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n // Remove from the doubly linked list.\n if (joint.m_prev) {\n joint.m_prev.m_next = joint.m_next;\n }\n\n if (joint.m_next) {\n joint.m_next.m_prev = joint.m_prev;\n }\n\n if (joint == this.m_jointList) {\n this.m_jointList = joint.m_next;\n }\n\n // Disconnect from bodies.\n const bodyA = joint.m_bodyA;\n const bodyB = joint.m_bodyB;\n\n // Wake up connected bodies.\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n\n // Remove from body 1.\n if (joint.m_edgeA.prev) {\n joint.m_edgeA.prev.next = joint.m_edgeA.next;\n }\n\n if (joint.m_edgeA.next) {\n joint.m_edgeA.next.prev = joint.m_edgeA.prev;\n }\n\n if (joint.m_edgeA == bodyA.m_jointList) {\n bodyA.m_jointList = joint.m_edgeA.next;\n }\n\n joint.m_edgeA.prev = null;\n joint.m_edgeA.next = null;\n\n // Remove from body 2\n if (joint.m_edgeB.prev) {\n joint.m_edgeB.prev.next = joint.m_edgeB.next;\n }\n\n if (joint.m_edgeB.next) {\n joint.m_edgeB.next.prev = joint.m_edgeB.prev;\n }\n\n if (joint.m_edgeB == bodyB.m_jointList) {\n bodyB.m_jointList = joint.m_edgeB.next;\n }\n\n joint.m_edgeB.prev = null;\n joint.m_edgeB.next = null;\n\n _ASSERT && console.assert(this.m_jointCount > 0);\n --this.m_jointCount;\n\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n let edge = bodyB.getContactList();\n while (edge) {\n if (edge.other == bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n }\n\n this.publish(\"remove-joint\", joint);\n }\n\n /** @internal */\n s_step: TimeStep; // reuse\n\n /**\n * Take a time step. This performs collision detection, integration, and\n * constraint solution.\n *\n * Broad-phase, narrow-phase, solve and solve time of impacts.\n *\n * @param timeStep Time step, this should not vary.\n */\n step(timeStep: number, velocityIterations?: number, positionIterations?: number): void {\n this.publish(\"pre-step\", timeStep);\n\n if ((velocityIterations | 0) !== velocityIterations) {\n // TODO: remove this in future\n velocityIterations = 0;\n }\n\n velocityIterations = velocityIterations || this.m_velocityIterations;\n positionIterations = positionIterations || this.m_positionIterations;\n\n // If new fixtures were added, we need to find the new contacts.\n if (this.m_newFixture) {\n this.findNewContacts();\n this.m_newFixture = false;\n }\n\n this.m_locked = true;\n\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\n // Update contacts. This is where some contacts are destroyed.\n this.updateContacts();\n\n // Integrate velocities, solve velocity constraints, and integrate positions.\n if (this.m_stepComplete && timeStep > 0.0) {\n this.m_solver.solveWorld(this.s_step);\n\n // Synchronize fixtures, check for out of range bodies.\n for (let b = this.m_bodyList; b; b = b.getNext()) {\n // If a body was not in an island then it did not move.\n if (b.m_islandFlag == false) {\n continue;\n }\n\n if (b.isStatic()) {\n continue;\n }\n\n // Update fixtures (for broad-phase).\n b.synchronizeFixtures();\n }\n // Look for new contacts.\n this.findNewContacts();\n }\n\n // Handle TOI events.\n if (this.m_continuousPhysics && timeStep > 0.0) {\n this.m_solver.solveWorldTOI(this.s_step);\n }\n\n if (this.m_clearForces) {\n this.clearForces();\n }\n\n this.m_locked = false;\n\n this.publish(\"post-step\", timeStep);\n }\n\n /**\n * @internal\n * Call this method to find new contacts.\n */\n findNewContacts(): void {\n this.m_broadPhase.updatePairs(\n (proxyA: FixtureProxy, proxyB: FixtureProxy) => this.createContact(proxyA, proxyB)\n );\n }\n\n /**\n * @internal\n * Callback for broad-phase.\n */\n createContact(proxyA: FixtureProxy, proxyB: FixtureProxy): void {\n const fixtureA = proxyA.fixture;\n const fixtureB = proxyB.fixture;\n\n const indexA = proxyA.childIndex;\n const indexB = proxyB.childIndex;\n\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Are the fixtures on the same body?\n if (bodyA == bodyB) {\n return;\n }\n\n // TODO_ERIN use a hash table to remove a potential bottleneck when both\n // bodies have a lot of contacts.\n // Does a contact already exist?\n let edge = bodyB.getContactList(); // ContactEdge\n while (edge) {\n if (edge.other == bodyA) {\n const fA = edge.contact.getFixtureA();\n const fB = edge.contact.getFixtureB();\n const iA = edge.contact.getChildIndexA();\n const iB = edge.contact.getChildIndexB();\n\n if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) {\n // A contact already exists.\n return;\n }\n\n if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) {\n // A contact already exists.\n return;\n }\n }\n\n edge = edge.next;\n }\n\n if (bodyB.shouldCollide(bodyA) == false) {\n return;\n }\n if (fixtureB.shouldCollide(fixtureA) == false) {\n return;\n }\n\n // Call the factory.\n const contact = Contact.create(fixtureA, indexA, fixtureB, indexB);\n if (contact == null) {\n return;\n }\n\n // Insert into the world.\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\n ++this.m_contactCount;\n }\n\n /**\n * @internal\n * Removes old non-overlapping contacts, applies filters and updates contacts.\n */\n updateContacts(): void {\n // Update awake contacts.\n let c: Contact;\n let next_c = this.m_contactList;\n while (c = next_c) {\n next_c = c.getNext();\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Is this contact flagged for filtering?\n if (c.m_filterFlag) {\n if (bodyB.shouldCollide(bodyA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n if (fixtureB.shouldCollide(fixtureA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n // Clear the filtering flag.\n c.m_filterFlag = false;\n }\n\n const activeA = bodyA.isAwake() && !bodyA.isStatic();\n const activeB = bodyB.isAwake() && !bodyB.isStatic();\n\n // At least one body must be awake and it must be dynamic or kinematic.\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const proxyIdA = fixtureA.m_proxies[indexA].proxyId;\n const proxyIdB = fixtureB.m_proxies[indexB].proxyId;\n const overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB);\n\n // Here we destroy contacts that cease to overlap in the broad-phase.\n if (overlap == false) {\n this.destroyContact(c);\n continue;\n }\n\n // The contact persists.\n c.update(this);\n }\n }\n\n /** @internal */\n destroyContact(contact: Contact): void {\n // Remove from the world.\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\n Contact.destroy(contact, this);\n\n --this.m_contactCount;\n }\n\n\n /**\n * Called when two fixtures begin to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n /**\n * Called when two fixtures cease to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"end-contact\", listener: (contact: Contact) => void): World;\n /**\n * This is called after a contact is updated. This allows you to inspect a\n * contact before it goes to the solver. If you are careful, you can modify the\n * contact manifold (e.g. disable contact). A copy of the old manifold is\n * provided so that you can detect changes. Note: this is called only for awake\n * bodies. Note: this is called even when the number of contact points is zero.\n * Note: this is not called for sensors. Note: if you set the number of contact\n * points to zero, you will not get an end-contact callback. However, you may get\n * a begin-contact callback the next step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n /**\n * This lets you inspect a contact after the solver is finished. This is useful\n * for inspecting impulses. Note: the contact manifold does not include time of\n * impact impulses, which can be arbitrarily large if the sub-step is small.\n * Hence the impulse is provided explicitly in a separate data structure. Note:\n * this is only called for contacts that are touching, solid, and awake.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n /** Listener is called whenever a body is removed. */\n on(name: \"remove-body\", listener: (body: Body) => void): World;\n /** Listener is called whenever a joint is removed implicitly or explicitly. */\n on(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n /** Listener is called whenever a fixture is removed implicitly or explicitly. */\n on(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Register an event listener.\n */\n // tslint:disable-next-line:typedef\n on(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\n off(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n off(name: \"end-contact\", listener: (contact: Contact) => void): World;\n off(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n off(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n off(name: \"remove-body\", listener: (body: Body) => void): World;\n off(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n off(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Remove an event listener.\n */\n // tslint:disable-next-line:typedef\n off(name, listener) {\n if (typeof name !== \"string\" || typeof listener !== \"function\") {\n return this;\n }\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return this;\n }\n const index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n return this;\n }\n\n publish(name: string, arg1?: any, arg2?: any, arg3?: any): number {\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return 0;\n }\n for (let l = 0; l < listeners.length; l++) {\n listeners[l].call(this, arg1, arg2, arg3);\n }\n return listeners.length;\n }\n\n /** @internal */\n beginContact(contact: Contact): void {\n this.publish(\"begin-contact\", contact);\n }\n\n /** @internal */\n endContact(contact: Contact): void {\n this.publish(\"end-contact\", contact);\n }\n\n /** @internal */\n preSolve(contact: Contact, oldManifold: Manifold): void {\n this.publish(\"pre-solve\", contact, oldManifold);\n }\n\n /** @internal */\n postSolve(contact: Contact, impulse: ContactImpulse): void {\n this.publish(\"post-solve\", contact, impulse);\n }\n\n /**\n * Joints and fixtures are destroyed when their associated body is destroyed.\n * Register a destruction listener so that you may nullify references to these\n * joints and shapes.\n *\n * `function(object)` is called when any joint or fixture is about to\n * be destroyed due to the destruction of one of its attached or parent bodies.\n */\n\n /**\n * Register a contact filter to provide specific control over collision.\n * Otherwise the default filter is used (defaultFilter). The listener is owned\n * by you and must remain in scope.\n *\n * Moved to Fixture.\n */\n}","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface Vec3Value {\n x: number;\n y: number;\n z: number;\n}\n\nexport class Vec3 {\n x: number;\n y: number;\n z: number;\n\n constructor(x: number, y: number, z: number);\n constructor(obj: { x: number, y: number, z: number });\n constructor();\n constructor(x?, y?, z?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec3)) {\n return new Vec3(x, y, z);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n } else {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n _ASSERT && Vec3.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y,\n z: this.z\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = data.x;\n obj.y = data.y;\n obj.z = data.z;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number, z: number): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = x;\n obj.y = y;\n obj.z = z;\n return obj;\n }\n\n static zero(): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = 0;\n obj.y = 0;\n obj.z = 0;\n return obj;\n }\n\n static clone(v: Vec3Value): Vec3 {\n _ASSERT && Vec3.assert(v);\n return Vec3.neo(v.x, v.y, v.z);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /** Does this vector contain finite coordinates? */\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec3.isValid(o), \"Invalid Vec3!\", o);\n }\n\n setZero(): Vec3 {\n this.x = 0.0;\n this.y = 0.0;\n this.z = 0.0;\n return this;\n }\n\n set(x: number, y: number, z: number): Vec3 {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n\n add(w: Vec3Value): Vec3 {\n this.x += w.x;\n this.y += w.y;\n this.z += w.z;\n return this;\n }\n\n sub(w: Vec3Value): Vec3 {\n this.x -= w.x;\n this.y -= w.y;\n this.z -= w.z;\n return this;\n }\n\n mul(m: number): Vec3 {\n this.x *= m;\n this.y *= m;\n this.z *= m;\n return this;\n }\n\n static areEqual(v: Vec3Value, w: Vec3Value): boolean {\n _ASSERT && Vec3.assert(v);\n _ASSERT && Vec3.assert(w);\n return v === w ||\n typeof v === \"object\" && v !== null &&\n typeof w === \"object\" && w !== null &&\n v.x === w.x && v.y === w.y && v.z === w.z;\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n }\n\n /** Cross product on two vectors */\n static cross(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(\n v.y * w.z - v.z * w.y,\n v.z * w.x - v.x * w.z,\n v.x * w.y - v.y * w.x\n );\n }\n\n static add(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x + w.x, v.y + w.y, v.z + w.z);\n }\n\n static sub(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x - w.x, v.y - w.y, v.z - w.z);\n }\n\n static mul(v: Vec3Value, m: number): Vec3 {\n return new Vec3(m * v.x, m * v.y, m * v.z);\n }\n\n neg(): Vec3 {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n\n static neg(v: Vec3Value): Vec3 {\n return new Vec3(-v.x, -v.y, -v.z);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Shape } from \"../Shape\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { AABB, AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\n/**\n * A line segment (edge) shape. These can be connected in chains or loops to\n * other edge shapes. The connectivity information is used to ensure correct\n * contact normals.\n */\nexport class EdgeShape extends Shape {\n static TYPE = \"edge\" as const;\n /** @hidden */ m_type: \"edge\";\n\n /** @hidden */ m_radius: number;\n\n // These are the edge vertices\n /** @hidden */ m_vertex1: Vec2;\n /** @hidden */ m_vertex2: Vec2;\n\n // Optional adjacent vertices. These are used for smooth collision.\n // Used by chain shape.\n /** @hidden */ m_vertex0: Vec2;\n /** @hidden */ m_vertex3: Vec2;\n /** @hidden */ m_hasVertex0: boolean;\n /** @hidden */ m_hasVertex3: boolean;\n\n constructor(v1?: Vec2Value, v2?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof EdgeShape)) {\n return new EdgeShape(v1, v2);\n }\n\n super();\n\n this.m_type = EdgeShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n\n this.m_vertex1 = v1 ? Vec2.clone(v1) : Vec2.zero();\n this.m_vertex2 = v2 ? Vec2.clone(v2) : Vec2.zero();\n\n this.m_vertex0 = Vec2.zero();\n this.m_vertex3 = Vec2.zero();\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertex1: this.m_vertex1,\n vertex2: this.m_vertex2,\n\n vertex0: this.m_vertex0,\n vertex3: this.m_vertex3,\n hasVertex0: this.m_hasVertex0,\n hasVertex3: this.m_hasVertex3,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): EdgeShape {\n const shape = new EdgeShape(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\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getType(): \"edge\" {\n return this.m_type;\n }\n\n /** @internal @deprecated */\n setNext(v?: Vec2Value): EdgeShape {\n return this.setNextVertex(v);\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n setNextVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex3.setVec2(v);\n this.m_hasVertex3 = true;\n } else {\n this.m_vertex3.setZero();\n this.m_hasVertex3 = false;\n }\n return this;\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n getNextVertex(): Vec2 {\n return this.m_vertex3;\n }\n\n /** @internal @deprecated */\n setPrev(v?: Vec2Value): EdgeShape {\n return this.setPrevVertex(v);\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n setPrevVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex0.setVec2(v);\n this.m_hasVertex0 = true;\n } else {\n this.m_vertex0.setZero();\n this.m_hasVertex0 = false;\n }\n return this;\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n getPrevVertex(): Vec2 {\n return this.m_vertex0;\n }\n\n /**\n * Set this as an isolated edge.\n */\n _set(v1: Vec2Value, v2: Vec2Value): EdgeShape {\n this.m_vertex1.setVec2(v1);\n this.m_vertex2.setVec2(v2);\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n return this;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): EdgeShape {\n const clone = new EdgeShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // p = p1 + t * d\n // v = v1 + s * e\n // p1 + t * d = v1 + s * e\n // s * e - t * d = p1 - v1\n\n // NOT_USED(childIndex);\n\n // Put the ray into the edge's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n const v1 = this.m_vertex1;\n const v2 = this.m_vertex2;\n const e = Vec2.sub(v2, v1);\n const normal = Vec2.neo(e.y, -e.x);\n normal.normalize();\n\n // q = p1 + t * d\n // dot(normal, q - v1) = 0\n // dot(normal, p1 - v1) + t * dot(normal, d) = 0\n const numerator = Vec2.dot(normal, Vec2.sub(v1, p1));\n const denominator = Vec2.dot(normal, d);\n\n if (denominator == 0.0) {\n return false;\n }\n\n const t = numerator / denominator;\n if (t < 0.0 || input.maxFraction < t) {\n return false;\n }\n\n const q = Vec2.add(p1, Vec2.mulNumVec2(t, d));\n\n // q = v1 + s * r\n // s = dot(q - v1, r) / dot(r, r)\n const r = Vec2.sub(v2, v1);\n const rr = Vec2.dot(r, r);\n if (rr == 0.0) {\n return false;\n }\n\n const s = Vec2.dot(Vec2.sub(q, v1), r) / rr;\n if (s < 0.0 || 1.0 < s) {\n return false;\n }\n\n output.fraction = t;\n if (numerator > 0.0) {\n output.normal = Rot.mulVec2(xf.q, normal).neg();\n } else {\n output.normal = Rot.mulVec2(xf.q, normal);\n }\n return true;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n matrix.transformVec2(v1, xf, this.m_vertex1);\n matrix.transformVec2(v2, xf, this.m_vertex2);\n\n AABB.combinePoints(aabb, v1, v2);\n AABB.extend(aabb, this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Edge = EdgeShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { AABBValue, RayCastOutput, RayCastInput, AABB } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\nimport { EdgeShape } from \"./EdgeShape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\n\n/**\n * A chain shape is a free form sequence of line segments. The chain has\n * two-sided collision, so you can use inside and outside collision. Therefore,\n * you may use any winding order. Connectivity information is used to create\n * smooth collisions.\n *\n * WARNING: The chain will not collide properly if there are self-intersections.\n */\nexport class ChainShape extends Shape {\n static TYPE = \"chain\" as const;\n /** @hidden */ m_type: \"chain\";\n\n /** @hidden */ m_radius: number;\n\n /** @hidden */ m_vertices: Vec2[];\n /** @hidden */ m_count: number;\n /** @hidden */ m_prevVertex: Vec2 | null;\n /** @hidden */ m_nextVertex: Vec2 | null;\n /** @hidden */ m_hasPrevVertex: boolean;\n /** @hidden */ m_hasNextVertex: boolean;\n\n /** @hidden */ m_isLoop: boolean;\n\n constructor(vertices?: Vec2Value[], loop?: boolean) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof ChainShape)) {\n return new ChainShape(vertices, loop);\n }\n\n super();\n\n this.m_type = ChainShape.TYPE;\n this.m_radius = Settings.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\n this.m_isLoop = !!loop;\n\n if (vertices && vertices.length) {\n if (loop) {\n this._createLoop(vertices);\n } else {\n this._createChain(vertices);\n }\n }\n }\n\n /** @internal */\n _serialize(): object {\n const data = {\n type: this.m_type,\n vertices: this.m_vertices,\n isLoop: this.m_isLoop,\n hasPrevVertex: this.m_hasPrevVertex,\n hasNextVertex: this.m_hasNextVertex,\n prevVertex: null as Vec2 | null,\n nextVertex: null as Vec2 | 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\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): ChainShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n const shape = new ChainShape(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\n // clear() {\n // this.m_vertices.length = 0;\n // this.m_count = 0;\n // }\n\n getType(): \"chain\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal\n * Create a loop. This automatically adjusts connectivity.\n *\n * @param vertices an array of vertices, these are copied\n * @param count the vertex count\n */\n _createLoop(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 3);\n if (vertices.length < 3) {\n return;\n }\n\n for (let i = 1; i < vertices.length; ++i) {\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n // If the code crashes here, it means your vertices are too close together.\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_vertices = [];\n this.m_count = vertices.length + 1;\n for (let 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\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\n /**\n * @internal\n * Create a chain with isolated end vertices.\n *\n * @param vertices an array of vertices, these are copied\n */\n _createChain(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 2);\n for (let i = 1; i < vertices.length; ++i) {\n // If the code crashes here, it means your vertices are too close together.\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_count = vertices.length;\n for (let i = 0; i < vertices.length; ++i) {\n this.m_vertices[i] = Vec2.clone(vertices[i]);\n }\n\n this.m_hasPrevVertex = false;\n this.m_hasNextVertex = false;\n this.m_prevVertex = null;\n this.m_nextVertex = null;\n return this;\n }\n\n /** @hidden */\n _reset(): void {\n if (this.m_isLoop) {\n this._createLoop(this.m_vertices);\n } else {\n this._createChain(this.m_vertices);\n }\n }\n\n /**\n * Establish connectivity to a vertex that precedes the first vertex. Don't call\n * this for loops.\n */\n setPrevVertex(prevVertex: Vec2): void {\n // todo: copy or reference\n this.m_prevVertex = prevVertex;\n this.m_hasPrevVertex = true;\n }\n\n getPrevVertex(): Vec2 {\n return this.m_prevVertex;\n }\n\n /**\n * Establish connectivity to a vertex that follows the last vertex. Don't call\n * this for loops.\n */\n setNextVertex(nextVertex: Vec2): void {\n // todo: copy or reference\n this.m_nextVertex = nextVertex;\n this.m_hasNextVertex = true;\n }\n\n getNextVertex(): Vec2 {\n return this.m_nextVertex;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): ChainShape {\n const clone = new ChainShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): number {\n // edge count = vertex count - 1\n return this.m_count - 1;\n }\n\n // Get a child edge.\n getChildEdge(edge: EdgeShape, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count - 1);\n edge.m_type = EdgeShape.TYPE;\n edge.m_radius = this.m_radius;\n\n edge.m_vertex1 = this.m_vertices[childIndex];\n edge.m_vertex2 = this.m_vertices[childIndex + 1];\n\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\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\n getVertex(index: number): Vec2 {\n _ASSERT && console.assert(0 <= index && index <= this.m_count);\n if (index < this.m_count) {\n return this.m_vertices[index];\n } else {\n return this.m_vertices[0];\n }\n }\n\n isLoop(): boolean {\n return this.m_isLoop;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * This always return false.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n const edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1));\n return edgeShape.rayCast(output, input, xf, 0);\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n matrix.transformVec2(v1, xf, this.getVertex(childIndex));\n matrix.transformVec2(v2, xf, this.getVertex(childIndex + 1));\n\n AABB.combinePoints(aabb, v1, v2);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * Chains have zero mass.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.zeroVec2(massData.center);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\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}\n\nexport const Chain = ChainShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const center = matrix.vec2(0, 0);\n/** @internal */ const s = matrix.vec2(0, 0);\n\n/**\n * A convex polygon. It is assumed that the interior of the polygon is to the\n * left of each edge. Polygons have a maximum number of vertices equal to\n * Settings.maxPolygonVertices. In most cases you should not need many vertices\n * for a convex polygon. extends Shape\n */\nexport class PolygonShape extends Shape {\n static TYPE = \"polygon\" as const;\n /** @hidden */ m_type: \"polygon\";\n\n /** @hidden */ m_centroid: Vec2;\n /** @hidden */ m_vertices: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_normals: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_count: number;\n /** @hidden */ m_radius: number;\n\n constructor(vertices?: Vec2Value[]) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PolygonShape)) {\n return new PolygonShape(vertices);\n }\n\n super();\n\n this.m_type = PolygonShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n this.m_centroid = Vec2.zero();\n this.m_vertices = [];\n this.m_normals = [];\n this.m_count = 0;\n\n if (vertices && vertices.length) {\n this._set(vertices);\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertices: this.m_vertices,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): PolygonShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n\n const shape = new PolygonShape(vertices);\n return shape;\n }\n\n getType(): \"polygon\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): PolygonShape {\n const clone = new PolygonShape();\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 (let i = 0; i < this.m_count; i++) {\n clone.m_vertices.push(this.m_vertices[i].clone());\n }\n for (let i = 0; i < this.m_normals.length; i++) {\n clone.m_normals.push(this.m_normals[i].clone());\n }\n return clone;\n }\n\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /** @hidden */\n _reset(): void {\n this._set(this.m_vertices);\n }\n\n /**\n * @internal\n *\n * Create a convex hull from the given array of local points. The count must be\n * in the range [3, Settings.maxPolygonVertices].\n *\n * Warning: the points may be re-ordered, even if they form a convex polygon\n * Warning: collinear points are handled but not removed. Collinear points may\n * lead to poor stacking behavior.\n */\n _set(vertices: Vec2Value[]): void {\n _ASSERT && console.assert(3 <= vertices.length && vertices.length <= Settings.maxPolygonVertices);\n if (vertices.length < 3) {\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n let n = math_min(vertices.length, Settings.maxPolygonVertices);\n\n // Perform welding and copy vertices into local buffer.\n const ps: Vec2[] = []; // [Settings.maxPolygonVertices];\n for (let i = 0; i < n; ++i) {\n const v = vertices[i];\n\n let unique = true;\n for (let j = 0; j < ps.length; ++j) {\n if (Vec2.distanceSquared(v, ps[j]) < 0.25 * Settings.linearSlopSquared) {\n unique = false;\n break;\n }\n }\n\n if (unique) {\n ps.push(Vec2.clone(v));\n }\n }\n\n n = ps.length;\n if (n < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n // Create the convex hull using the Gift wrapping algorithm\n // http://en.wikipedia.org/wiki/Gift_wrapping_algorithm\n\n // Find the right most point on the hull (in case of multiple points bottom most is used)\n let i0 = 0;\n let x0 = ps[0].x;\n for (let i = 1; i < n; ++i) {\n const x = ps[i].x;\n if (x > x0 || (x === x0 && ps[i].y < ps[i0].y)) {\n i0 = i;\n x0 = x;\n }\n }\n\n const hull = [] as number[]; // [Settings.maxPolygonVertices];\n let m = 0;\n let ih = i0;\n\n while (true) {\n _ASSERT && console.assert(m < Settings.maxPolygonVertices);\n hull[m] = ih;\n\n let ie = 0;\n for (let j = 1; j < n; ++j) {\n if (ie === ih) {\n ie = j;\n continue;\n }\n\n const r = Vec2.sub(ps[ie], ps[hull[m]]);\n const v = Vec2.sub(ps[j], ps[hull[m]]);\n const c = Vec2.crossVec2Vec2(r, v);\n // c < 0 means counter-clockwise wrapping, c > 0 means clockwise wrapping\n if (c < 0.0) {\n ie = j;\n }\n\n // Collinearity check\n if (c === 0.0 && v.lengthSquared() > r.lengthSquared()) {\n ie = j;\n }\n }\n\n ++m;\n ih = ie;\n\n if (ie === i0) {\n break;\n }\n }\n\n if (m < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n this.m_count = m;\n\n // Copy vertices.\n this.m_vertices = [];\n for (let i = 0; i < m; ++i) {\n this.m_vertices[i] = ps[hull[i]];\n }\n\n // Compute normals. Ensure the edges have non-zero length.\n for (let i = 0; i < m; ++i) {\n const i1 = i;\n const i2 = i + 1 < m ? i + 1 : 0;\n const edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]);\n _ASSERT && console.assert(edge.lengthSquared() > EPSILON * EPSILON);\n this.m_normals[i] = Vec2.crossVec2Num(edge, 1.0);\n this.m_normals[i].normalize();\n }\n\n // Compute the polygon centroid.\n this.m_centroid = computeCentroid(this.m_vertices, m);\n }\n\n /** @internal */ _setAsBox(hx: number, hy: number, center?: Vec2Value, angle?: number): void {\n // start with right-bottom, counter-clockwise, as in Gift wrapping algorithm in PolygonShape._set()\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\n this.m_normals[0] = Vec2.neo(1.0, 0.0);\n this.m_normals[1] = Vec2.neo(0.0, 1.0);\n this.m_normals[2] = Vec2.neo(-1.0, 0.0);\n this.m_normals[3] = Vec2.neo(0.0, -1.0);\n\n this.m_count = 4;\n\n if (center && Vec2.isValid(center)) {\n angle = angle || 0;\n\n matrix.copyVec2(this.m_centroid, center);\n\n const xf = Transform.identity();\n xf.p.setVec2(center);\n xf.q.setAngle(angle);\n\n // Transform vertices and normals.\n for (let i = 0; i < this.m_count; ++i) {\n this.m_vertices[i] = Transform.mulVec2(xf, this.m_vertices[i]);\n this.m_normals[i] = Rot.mulVec2(xf.q, this.m_normals[i]);\n }\n }\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const pLocal = matrix.detransformVec2(temp, xf, p);\n\n for (let i = 0; i < this.m_count; ++i) {\n const dot = matrix.dotVec2(this.m_normals[i], pLocal) - matrix.dotVec2(this.m_normals[i], this.m_vertices[i]);\n if (dot > 0.0) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n\n // Put the ray into the polygon's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n let lower = 0.0;\n let upper = input.maxFraction;\n\n let index = -1;\n\n for (let i = 0; i < this.m_count; ++i) {\n // p = p1 + a * d\n // dot(normal, p - v) = 0\n // dot(normal, p1 - v) + a * dot(normal, d) = 0\n const numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1));\n const denominator = Vec2.dot(this.m_normals[i], d);\n\n if (denominator == 0.0) {\n if (numerator < 0.0) {\n return false;\n }\n } else {\n // Note: we want this predicate without division:\n // lower < numerator / denominator, where denominator < 0\n // Since denominator < 0, we have to flip the inequality:\n // lower < numerator / denominator <==> denominator * lower > numerator.\n if (denominator < 0.0 && numerator < lower * denominator) {\n // Increase lower.\n // The segment enters this half-space.\n lower = numerator / denominator;\n index = i;\n } else if (denominator > 0.0 && numerator < upper * denominator) {\n // Decrease upper.\n // The segment exits this half-space.\n upper = numerator / denominator;\n }\n }\n\n // The use of epsilon here causes the assert on lower to trip\n // in some cases. Apparently the use of epsilon was to make edge\n // shapes work, but now those are handled separately.\n // if (upper < lower - matrix.EPSILON)\n if (upper < lower) {\n return false;\n }\n }\n\n _ASSERT && console.assert(0.0 <= lower && lower <= input.maxFraction);\n\n if (index >= 0) {\n output.fraction = lower;\n output.normal = Rot.mulVec2(xf.q, this.m_normals[index]);\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const v = matrix.transformVec2(temp, xf, this.m_vertices[i]);\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, v.y);\n maxY = math_max(maxY, v.y);\n }\n\n matrix.setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius);\n matrix.setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n // Polygon mass, centroid, and inertia.\n // Let rho be the polygon density in mass per unit area.\n // Then:\n // mass = rho * int(dA)\n // centroid.x = (1/mass) * rho * int(x * dA)\n // centroid.y = (1/mass) * rho * int(y * dA)\n // I = rho * int((x*x + y*y) * dA)\n //\n // We can compute these integrals by summing all the integrals\n // for each triangle of the polygon. To evaluate the integral\n // for a single triangle, we make a change of variables to\n // the (u,v) coordinates of the triangle:\n // x = x0 + e1x * u + e2x * v\n // y = y0 + e1y * u + e2y * v\n // where 0 <= u && 0 <= v && u + v <= 1.\n //\n // We integrate u from [0,1-v] and then v from [0,1].\n // We also need to use the Jacobian of the transformation:\n // D = cross(e1, e2)\n //\n // Simplification: triangle centroid = (1/3) * (p1 + p2 + p3)\n //\n // The rest of the derivation is handled by computer algebra.\n\n _ASSERT && console.assert(this.m_count >= 3);\n\n matrix.zeroVec2(center);\n let area = 0.0;\n let I = 0.0;\n\n // s is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n matrix.zeroVec2(s);\n\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < this.m_count; ++i) {\n matrix.plusVec2(s, this.m_vertices[i]);\n }\n matrix.scaleVec2(s, 1.0 / this.m_count, s);\n\n const k_inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < this.m_count; ++i) {\n // Triangle vertices.\n matrix.subVec2(e1, this.m_vertices[i], s);\n if ( i + 1 < this.m_count) {\n matrix.subVec2(e2, this.m_vertices[i + 1], s);\n } else {\n matrix.subVec2(e2, this.m_vertices[0], s);\n }\n\n const D = matrix.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine2Vec2(temp, triangleArea * k_inv3, e1, triangleArea * k_inv3, e2);\n matrix.plusVec2(center, temp);\n\n const ex1 = e1.x;\n const ey1 = e1.y;\n const ex2 = e2.x;\n const ey2 = e2.y;\n\n const intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2;\n const inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2;\n\n I += (0.25 * k_inv3 * D) * (intx2 + inty2);\n }\n\n // Total mass\n massData.mass = density * area;\n\n // Center of mass\n _ASSERT && console.assert(area > EPSILON);\n matrix.scaleVec2(center, 1.0 / area, center);\n matrix.addVec2(massData.center, center, s);\n\n // Inertia tensor relative to the local origin (point s).\n massData.I = density * I;\n\n // Shift to center of mass then to original body origin.\n massData.I += massData.mass * (matrix.dotVec2(massData.center, massData.center) - matrix.dotVec2(center, center));\n }\n\n /**\n * Validate convexity. This is a very time consuming operation.\n * @returns true if valid\n */\n validate(): boolean {\n for (let i = 0; i < this.m_count; ++i) {\n const i1 = i;\n const i2 = i < this.m_count - 1 ? i1 + 1 : 0;\n const p = this.m_vertices[i1];\n matrix.subVec2(e, this.m_vertices[i2], p);\n\n for (let j = 0; j < this.m_count; ++j) {\n if (j == i1 || j == i2) {\n continue;\n }\n\n const c = matrix.crossVec2Vec2(e, matrix.subVec2(temp, this.m_vertices[j], p));\n if (c < 0.0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\n for (let 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}\n\n/** @internal */ function computeCentroid(vs: Vec2[], count: number): Vec2 {\n _ASSERT && console.assert(count >= 3);\n\n const c = Vec2.zero();\n let area = 0.0;\n\n // pRef is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n const pRef = Vec2.zero();\n if (false) {\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < count; ++i) {\n pRef.add(vs[i]);\n }\n pRef.mul(1.0 / count);\n }\n\n const inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < count; ++i) {\n // Triangle vertices.\n const p1 = pRef;\n const p2 = vs[i];\n const p3 = i + 1 < count ? vs[i + 1] : vs[0];\n\n const e1 = Vec2.sub(p2, p1);\n const e2 = Vec2.sub(p3, p1);\n\n const D = Vec2.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine3Vec2(temp, 1, p1, 1, p2, 1, p3);\n matrix.plusScaleVec2(c, triangleArea * inv3, temp);\n }\n\n // Centroid\n _ASSERT && console.assert(area > EPSILON);\n c.mul(1.0 / area);\n return c;\n}\n\nexport const Polygon = PolygonShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n// todo: use string?\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n} \n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointOpt extends JointOpt {\n /**\n * The lower angle for the joint limit (radians).\n */\n lowerAngle?: number;\n /**\n * The upper angle for the joint limit (radians).\n */\n upperAngle?: number;\n /**\n * The maximum motor torque used to achieve the desired motor speed. Usually\n * in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed. Usually in radians per second.\n */\n motorSpeed?: number;\n /**\n * A flag to enable joint limits.\n */\n enableLimit?: boolean;\n /**\n * A flag to enable the joint motor.\n */\n enableMotor?: boolean;\n}\n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointDef extends JointDef, RevoluteJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n lowerAngle : 0.0,\n upperAngle : 0.0,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n enableLimit : false,\n enableMotor : false\n};\n\n/**\n * A revolute joint constrains two bodies to share a common point while they are\n * free to rotate about the point. The relative rotation about the shared point\n * is the joint angle. You can limit the relative rotation with a joint limit\n * that specifies a lower and upper angle. You can use a motor to drive the\n * relative rotation about the shared point. A maximum motor torque is provided\n * so that infinite forces are not generated.\n */\nexport class RevoluteJoint extends Joint {\n static TYPE = \"revolute-joint\" as const;\n\n /** @internal */ m_type: \"revolute-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerAngle: number;\n /** @internal */ m_upperAngle: number;\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n // effective mass for point-to-point constraint.\n /** @internal */ m_mass: Mat33;\n // effective mass for motor/limit angular constraint.\n /** @internal */ m_motorMass: number;\n /** @internal */ m_limitState: number;\n\n constructor(def: RevoluteJointDef);\n constructor(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RevoluteJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RevoluteJoint)) {\n return new RevoluteJoint(def, bodyA, bodyB, anchor);\n }\n\n def = def ?? {} as RevoluteJointDef;\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_mass = new Mat33();\n this.m_limitState = LimitState.inactiveLimit;\n\n this.m_type = RevoluteJoint.TYPE;\n\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\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\n if (Number.isFinite(def.referenceAngle)) {\n this.m_referenceAngle = def.referenceAngle;\n } else {\n this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle();\n }\n\n this.m_impulse = new Vec3();\n this.m_motorImpulse = 0.0;\n\n this.m_lowerAngle = def.lowerAngle ?? DEFAULTS.lowerAngle;\n this.m_upperAngle = def.upperAngle ?? DEFAULTS.upperAngle;\n this.m_maxMotorTorque = def.maxMotorTorque ?? DEFAULTS.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed ?? DEFAULTS.motorSpeed;\n this.m_enableLimit = def.enableLimit ?? DEFAULTS.enableLimit;\n this.m_enableMotor = def.enableMotor ?? DEFAULTS.enableMotor;\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Motor constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any):RevoluteJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RevoluteJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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 !== undefined) {\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 !== undefined) {\n this.m_enableMotor = def.enableMotor;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle in radians.\n */\n getJointAngle(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle speed in radians per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_angularVelocity - bA.m_angularVelocity;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Get the current motor torque given the inverse time step. Unit is N*m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set the motor speed in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set the maximum motor torque, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit in radians.\n */\n getLowerLimit(): number {\n return this.m_lowerAngle;\n }\n\n /**\n * Get the upper joint limit in radians.\n */\n getUpperLimit(): number {\n return this.m_upperAngle;\n }\n\n /**\n * Set the joint limits in radians.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(lower <= upper);\n\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.0;\n this.m_lowerAngle = lower;\n this.m_upperAngle = upper;\n }\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force given the inverse time step. Unit is N.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque due to the joint limit given the inverse time step.\n * Unit is N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\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\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n\n if (this.m_enableMotor == false || fixedRotation) {\n this.m_motorImpulse = 0.0;\n }\n\n if (this.m_enableLimit && fixedRotation == false) {\n const jointAngle = aB - aA - this.m_referenceAngle;\n\n if (math_abs(this.m_upperAngle - this.m_lowerAngle) < 2.0 * Settings.angularSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointAngle <= this.m_lowerAngle) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atLowerLimit;\n\n } else if (jointAngle >= this.m_upperAngle) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atUpperLimit;\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\n // Solve motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits && fixedRotation == false) {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(this.m_mass.solve33(Cdot));\n\n if (this.m_limitState == LimitState.equalLimits) {\n this.m_impulse.add(impulse);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse < 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse > 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n\n } else {\n // Solve point-to-point constraint\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const impulse = this.m_mass.solve22(Vec2.neg(Cdot));\n\n this.m_impulse.x += impulse.x;\n this.m_impulse.y += impulse.y;\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n let angularError = 0.0;\n let positionError = 0.0;\n\n const fixedRotation = (this.m_invIA + this.m_invIB == 0.0);\n\n // Solve angular limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const angle = aB - aA - this.m_referenceAngle;\n let limitImpulse = 0.0;\n\n if (this.m_limitState == LimitState.equalLimits) {\n // Prevent large angular corrections\n const C = clamp(angle - this.m_lowerAngle, -Settings.maxAngularCorrection, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n angularError = math_abs(C);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n let C = angle - this.m_lowerAngle;\n angularError = -C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C + Settings.angularSlop, -Settings.maxAngularCorrection, 0.0);\n limitImpulse = -this.m_motorMass * C;\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n let C = angle - this.m_upperAngle;\n angularError = C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C - Settings.angularSlop, 0.0, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n }\n\n aA -= this.m_invIA * limitImpulse;\n aB += this.m_invIB * limitImpulse;\n }\n\n // Solve point-to-point constraint.\n {\n qA.setAngle(aA);\n qB.setAngle(aB);\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n const C = Vec2.zero();\n C.addCombine(1, cB, 1, rB);\n C.subCombine(1, cA, 1, rA);\n positionError = C.length();\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y;\n K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y;\n K.ey.x = K.ex.y;\n K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x;\n\n const impulse = Vec2.neg(K.solve(C));\n\n cA.subMul(mA, impulse);\n aA -= iA * Vec2.crossVec2Vec2(rA, impulse);\n\n cB.addMul(mB, impulse);\n aB += iB * Vec2.crossVec2Vec2(rB, impulse);\n }\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Shape } from \"../Shape\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_PI = Math.PI;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\nexport class CircleShape extends Shape {\n static TYPE = \"circle\" as const;\n /** @hidden */ m_type: \"circle\";\n\n /** @hidden */ m_p: Vec2;\n /** @hidden */ m_radius: number;\n\n constructor(position: Vec2Value, radius?: number);\n constructor(radius?: number);\n constructor(a: any, b?: any) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof CircleShape)) {\n return new CircleShape(a, b);\n }\n\n super();\n\n this.m_type = CircleShape.TYPE;\n this.m_p = Vec2.zero();\n this.m_radius = 1;\n\n if (typeof a === \"object\" && Vec2.isValid(a)) {\n this.m_p.setVec2(a);\n\n if (typeof b === \"number\") {\n this.m_radius = b;\n }\n\n } else if (typeof a === \"number\") {\n this.m_radius = a;\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n p: this.m_p,\n radius: this.m_radius,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): CircleShape {\n return new CircleShape(data.p, data.radius);\n }\n\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getType(): \"circle\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getCenter(): Vec2 {\n return this.m_p;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): CircleShape {\n const clone = new CircleShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const center = matrix.transformVec2(temp, xf, this.m_p);\n return matrix.distSqrVec2(p, center) <= this.m_radius * this.m_radius;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // Collision Detection in Interactive 3D Environments by Gino van den Bergen\n // From Section 3.1.2\n // x = s + a * r\n // norm(x) = radius\n\n const position = Vec2.add(xf.p, Rot.mulVec2(xf.q, this.m_p));\n const s = Vec2.sub(input.p1, position);\n const b = Vec2.dot(s, s) - this.m_radius * this.m_radius;\n\n // Solve quadratic equation.\n const r = Vec2.sub(input.p2, input.p1);\n const c = Vec2.dot(s, r);\n const rr = Vec2.dot(r, r);\n const sigma = c * c - rr * b;\n\n // Check for negative discriminant and short segment.\n if (sigma < 0.0 || rr < EPSILON) {\n return false;\n }\n\n // Find the point of intersection of the line with the circle.\n let a = -(c + math_sqrt(sigma));\n\n // Is the intersection point on the segment?\n if (0.0 <= a && a <= input.maxFraction * rr) {\n a /= rr;\n output.fraction = a;\n output.normal = Vec2.add(s, Vec2.mulNumVec2(a, r));\n output.normal.normalize();\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n const p = matrix.transformVec2(temp, xf, this.m_p);\n\n matrix.setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius);\n matrix.setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n massData.mass = density * math_PI * this.m_radius * this.m_radius;\n matrix.copyVec2(massData.center, this.m_p);\n // inertia about the local origin\n massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + matrix.lengthSqrVec2(this.m_p));\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Circle = CircleShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. A value of 0 disables softness.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * Distance length.\n */\n length?: number;\n}\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointDef extends JointDef, DistanceJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0\n};\n\n/**\n * A distance joint constrains two points on two bodies to remain at a fixed\n * distance from each other. You can view this as a massless, rigid rod.\n */\nexport class DistanceJoint extends Joint {\n static TYPE = \"distance-joint\" as const;\n\n // Solver shared\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_length: number;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_gamma: number;\n /** @internal */ m_bias: number;\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n /**\n * @param def DistanceJoint definition.\n */\n constructor(def: DistanceJointDef);\n /**\n * @param anchorA Anchor A in global coordination.\n * @param anchorB Anchor B in global coordination.\n */\n constructor(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value);\n constructor(def: DistanceJointDef, bodyA?: Body, bodyB?: Body, anchorA?: Vec2Value, anchorB?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof DistanceJoint)) {\n return new DistanceJoint(def, bodyA, bodyB, anchorA, anchorB);\n }\n\n // order of constructor arguments is changed in v0.2\n if (bodyB && anchorA && (\"m_type\" in anchorA) && (\"x\" in bodyB) && (\"y\" in bodyB)) {\n const temp = bodyB;\n bodyB = anchorA as any as Body;\n anchorA = temp as any as Vec2;\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = DistanceJoint.TYPE;\n\n // Solver shared\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 :\n 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.0;\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n\n // 1-D constrained system\n // m (v2 - v1) = lambda\n // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass.\n // x2 = x1 + h * v2\n\n // 1-D mass-damper-spring system\n // m (v2 - v1) + h * d * v2 + h * k *\n\n // C = norm(p2 - p1) - L\n // u = (p2 - p1) / norm(p2 - p1)\n // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1))\n // J = [-u -cross(r1, u) u cross(r2, u)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n length: this.m_length,\n\n impulse: this.m_impulse,\n gamma: this.m_gamma,\n bias: this.m_bias,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): DistanceJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new DistanceJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\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\n if (def.length > 0) {\n this.m_length = +def.length;\n } else if (def.length < 0) { // don't change length\n } else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) {\n this.m_length = Vec2.distance(\n this.m_bodyA.getWorldPoint(this.m_localAnchorA),\n this.m_bodyB.getWorldPoint(this.m_localAnchorB)\n );\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the natural length. Manipulating the length can lead to non-physical\n * behavior when the frequency is zero.\n */\n setLength(length: number): void {\n this.m_length = length;\n }\n\n /**\n * Get the natural length.\n */\n getLength(): number {\n return this.m_length;\n }\n\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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(cB, this.m_rB), Vec2.add(cA, this.m_rA));\n\n // Handle singularity.\n const length = this.m_u.length();\n if (length > Settings.linearSlop) {\n this.m_u.mul(1.0 / length);\n } else {\n this.m_u.setNum(0.0, 0.0);\n }\n\n const crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n let invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu;\n\n // Compute the effective mass matrix.\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (this.m_frequencyHz > 0.0) {\n const C = length - this.m_length;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * this.m_mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_mass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invMass += this.m_gamma;\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n } else {\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n const Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA);\n\n const impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse);\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n if (this.m_frequencyHz > 0.0) {\n // There is no position correction for soft distance constraints.\n return true;\n }\n\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const length = u.normalize();\n const C = clamp(length - this.m_length, -Settings.maxLinearCorrection, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointOpt extends JointOpt {\n /**\n * The maximum friction force in N.\n */\n maxForce?: number;\n /**\n * The maximum friction torque in N-m.\n */\n maxTorque?: number;\n}\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointDef extends JointDef, FrictionJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n maxTorque : 0.0,\n};\n\n/**\n * Friction joint. This is used for top-down friction. It provides 2D\n * translational friction and angular friction.\n */\nexport class FrictionJoint extends Joint {\n static TYPE = \"friction-joint\" as const;\n\n /** @internal */ m_type: \"friction-joint\";\n\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n // Solver shared\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: FrictionJointDef);\n /**\n * @param anchor Anchor in global coordination.\n */\n constructor(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: FrictionJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof FrictionJoint)) {\n return new FrictionJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = FrictionJoint.TYPE;\n\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\n // Solver shared\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): FrictionJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new FrictionJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y\n * 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\n * this.m_rB.x;\n\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.sub(\n Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)),\n Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA))\n );\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = this.m_linearImpulse;\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) {\n this.m_linearImpulse.normalize();\n this.m_linearImpulse.mul(maxImpulse);\n }\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Vec3, Vec3Value } from \"./Vec3\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 3-by-3 matrix. Stored in column-major order.\n */\nexport class Mat33 {\n ex: Vec3;\n ey: Vec3;\n ez: Vec3;\n\n constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value);\n constructor();\n constructor(a?: Vec3Value, b?: Vec3Value, c?: Vec3Value) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec3.clone(a);\n this.ey = Vec3.clone(b);\n this.ez = Vec3.clone(c);\n } else {\n this.ex = Vec3.zero();\n this.ey = Vec3.zero();\n this.ez = Vec3.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat33.isValid(o), \"Invalid Mat33!\", o);\n }\n\n /**\n * Set this matrix to all zeros.\n */\n setZero(): Mat33 {\n this.ex.setZero();\n this.ey.setZero();\n this.ez.setZero();\n return this;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve33(v: Vec3Value): Vec3 {\n // let det = matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, this.ez));\n let cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y;\n let cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z;\n let cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x;\n let det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = new Vec3();\n // r.x = det * matrix.dotVec3(v, matrix.newCrossVec3(this.ey, this.ez));\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 * (v.x * cross_x + v.y * cross_y + v.z * cross_z);\n\n // r.y = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(v, this.ez));\n cross_x = v.y * this.ez.z - v.z * this.ez.y;\n cross_y = v.z * this.ez.x - v.x * this.ez.z;\n cross_z = v.x * this.ez.y - v.y * this.ez.x;\n r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z);\n\n // r.z = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, v));\n cross_x = this.ey.y * v.z - this.ey.z * v.y;\n cross_y = this.ey.z * v.x - this.ey.x * v.z;\n cross_z = this.ey.x * v.y - this.ey.y * v.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\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix\n * equation.\n */\n solve22(v: Vec2Value): Vec2 {\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a21 = this.ex.y;\n const a22 = this.ey.y;\n let det = a11 * a22 - a12 * a21;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = Vec2.zero();\n r.x = det * (a22 * v.x - a12 * v.y);\n r.y = det * (a11 * v.y - a21 * v.x);\n return r;\n }\n\n /**\n * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if\n * singular.\n */\n getInverse22(M: Mat33): void {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n M.ex.x = det * d;\n M.ey.x = -det * b;\n M.ex.z = 0.0;\n M.ex.y = -det * c;\n M.ey.y = det * a;\n M.ey.z = 0.0;\n M.ez.x = 0.0;\n M.ez.y = 0.0;\n M.ez.z = 0.0;\n }\n\n /**\n * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix\n * if singular.\n */\n getSymInverse33(M: Mat33): void {\n let det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez));\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a13 = this.ez.x;\n const a22 = this.ey.y;\n const a23 = this.ez.y;\n const a33 = this.ez.z;\n\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\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\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\n /**\n * Multiply a matrix times a vector.\n */\n static mul(a: Mat33, b: Vec2Value): Vec2;\n static mul(a: Mat33, b: Vec3Value): Vec3;\n static mul(a, b) {\n _ASSERT && Mat33.assert(a);\n if (b && \"z\" in b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n\n } else if (b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec3(a: Mat33, b: Vec3Value): Vec3 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n }\n\n static mulVec2(a: Mat33, b: Vec2Value): Vec2 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n static add(a: Mat33, b: Mat33): Mat33 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Mat33.assert(b);\n return new Mat33(\n Vec3.add(a.ex, b.ex),\n Vec3.add(a.ey, b.ey),\n Vec3.add(a.ez, b.ez)\n );\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3, \n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointOpt extends JointOpt {\n /**\n * Enable/disable the joint limit.\n */\n enableLimit?: boolean;\n /**\n * The lower translation limit, usually in meters.\n */\n lowerTranslation?: number;\n /**\n * The upper translation limit, usually in meters.\n */\n upperTranslation?: number;\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorForce?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointDef extends JointDef, PrismaticJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation unit axis in bodyA.\n */\n localAxisA: Vec2Value;\n /**\n * referenceAngle The constrained angle between the bodies:\n * bodyB_angle - bodyA_angle.\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableLimit : false,\n lowerTranslation : 0.0,\n upperTranslation : 0.0,\n enableMotor : false,\n maxMotorForce : 0.0,\n motorSpeed : 0.0\n};\n\n/**\n * A prismatic joint. This joint provides one degree of freedom: translation\n * along an axis fixed in bodyA. Relative rotation is prevented. You can use a\n * joint limit to restrict the range of motion and a joint motor to drive the\n * motion or to model joint friction.\n */\nexport class PrismaticJoint extends Joint {\n static TYPE = \"prismatic-joint\" as const;\n\n /** @internal */ m_type: \"prismatic-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerTranslation: number;\n /** @internal */ m_upperTranslation: number;\n /** @internal */ m_maxMotorForce: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n /** @internal */ m_limitState: number; // TODO enum\n /** @internal */ m_axis: Vec2;\n /** @internal */ m_perp: Vec2;\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_s1: number;\n /** @internal */ m_s2: number;\n /** @internal */ m_a1: number;\n /** @internal */ m_a2: number;\n /** @internal */ m_K: Mat33;\n\n constructor(def: PrismaticJointDef);\n constructor(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: PrismaticJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PrismaticJoint)) {\n return new PrismaticJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PrismaticJoint.TYPE;\n\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, 0.0));\n this.m_localXAxisA.normalize();\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle();\n\n this.m_impulse = new Vec3();\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n\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.inactiveLimit;\n\n this.m_axis = Vec2.zero();\n this.m_perp = Vec2.zero();\n\n this.m_K = new Mat33();\n\n // Linear constraint (point-to-line)\n // d = p2 - p1 = x2 + r2 - x1 - r1\n // C = dot(perp, d)\n // Cdot = dot(d, cross(w1, perp)) + dot(perp, v2 + cross(w2, r2) - v1 -\n // cross(w1, r1))\n // = -dot(perp, v1) - dot(cross(d + r1, perp), w1) + dot(perp, v2) +\n // dot(cross(r2, perp), v2)\n // J = [-perp, -cross(d + r1, perp), perp, cross(r2,perp)]\n //\n // Angular constraint\n // C = a2 - a1 + a_initial\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n //\n // K = J * invM * JT\n //\n // J = [-a -s1 a s2]\n // [0 -1 0 1]\n // a = perp\n // s1 = cross(d + r1, a) = cross(p2 - x1, a)\n // s2 = cross(r2, a) = cross(p2 - x2, a)\n\n // Motor/Limit linear constraint\n // C = dot(ax1, d)\n // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) +\n // dot(cross(r2, ax1), v2)\n // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)]\n\n // Block Solver\n // We develop a block solver that includes the joint limit. This makes the\n // limit stiff (inelastic) even\n // when the mass has poor distribution (leading to large torques about the\n // joint anchor points).\n //\n // The Jacobian has 3 rows:\n // J = [-uT -s1 uT s2] // linear\n // [0 -1 0 1] // angular\n // [-vT -a1 vT a2] // limit\n //\n // u = perp\n // v = axis\n // s1 = cross(d + r1, u), s2 = cross(r2, u)\n // a1 = cross(d + r1, v), a2 = cross(r2, v)\n\n // M * (v2 - v1) = JT * df\n // J * v2 = bias\n //\n // v2 = v1 + invM * JT * df\n // J * (v1 + invM * JT * df) = bias\n // K * df = bias - J * v1 = -Cdot\n // K = J * invM * JT\n // Cdot = J * v1 - bias\n //\n // Now solve for f2.\n // df = f2 - f1\n // K * (f2 - f1) = -Cdot\n // f2 = invK * (-Cdot) + f1\n //\n // Clamp accumulated limit impulse.\n // lower: f2(3) = max(f2(3), 0)\n // upper: f2(3) = min(f2(3), 0)\n //\n // Solve for correct f2(1:2)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:3) * f1\n // = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:2) * f1(1:2) + K(1:2,3) * f1(3)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3)) +\n // K(1:2,1:2) * f1(1:2)\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n //\n // Now compute impulse to be applied:\n // df = f2 - f1\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PrismaticJoint {\n data = {...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 const joint = new PrismaticJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, 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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const pA = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const pB = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = this.m_bodyA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const rA = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter));\n const rB = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter));\n const p1 = Vec2.add(bA.m_sweep.c, rA);\n const p2 = Vec2.add(bB.m_sweep.c, rB);\n const d = Vec2.sub(p2, p1);\n const axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA);\n\n const vA = bA.m_linearVelocity;\n const vB = bB.m_linearVelocity;\n const wA = bA.m_angularVelocity;\n const wB = bB.m_angularVelocity;\n\n const speed = Vec2.dot(d, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB, wB, rB), Vec2.addCrossNumVec2(vA, wA, rA)));\n return speed;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit, usually in meters.\n */\n getLowerLimit(): number {\n return this.m_lowerTranslation;\n }\n\n /**\n * Get the upper joint limit, usually in meters.\n */\n getUpperLimit(): number {\n return this.m_upperTranslation;\n }\n\n /**\n * Set the joint limits, usually in meters.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(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.0;\n }\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in meters per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Set the maximum motor force, usually in N.\n */\n setMaxMotorForce(force: number): void {\n if (force == this.m_maxMotorForce) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorForce = force;\n }\n\n getMaxMotorForce(): number {\n return this.m_maxMotorForce;\n }\n\n /**\n * Get the motor speed, usually in meters per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Get the current motor force given the inverse time step, usually in N.\n */\n getMotorForce(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\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\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.y;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute motor Jacobian and effective mass.\n {\n this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_axis);\n this.m_a2 = Vec2.crossVec2Vec2(rB, this.m_axis);\n\n this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2\n * this.m_a2;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n }\n\n // Prismatic constraint.\n {\n this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_perp);\n this.m_s2 = Vec2.crossVec2Vec2(rB, this.m_perp);\n\n const s1test = Vec2.crossVec2Vec2(rA, this.m_perp);\n\n const k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2;\n const k12 = iA * this.m_s1 + iB * this.m_s2;\n const k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For bodies with fixed rotation.\n k22 = 1.0;\n }\n const k23 = iA * this.m_a1 + iB * this.m_a2;\n const k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2;\n\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\n // Compute motor and limit terms.\n if (this.m_enableLimit) {\n\n const jointTranslation = Vec2.dot(this.m_axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Settings.linearSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointTranslation <= this.m_lowerTranslation) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_limitState = LimitState.atLowerLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else if (jointTranslation >= this.m_upperTranslation) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_limitState = LimitState.atUpperLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n if (this.m_enableMotor == false) {\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse\n + this.m_impulse.z, this.m_axis);\n const LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1;\n const LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Solve linear motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits) {\n const Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB, vA)) + this.m_a2 * wB\n - this.m_a1 * wA;\n let impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorForce;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse,\n -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_axis);\n const LA = impulse * this.m_a1;\n const LB = impulse * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n const Cdot1 = Vec2.zero();\n Cdot1.x += Vec2.dot(this.m_perp, vB) + this.m_s2 * wB;\n Cdot1.x -= Vec2.dot(this.m_perp, vA) + this.m_s1 * wA;\n Cdot1.y = wB - wA;\n\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit) {\n // Solve prismatic and limit constraint in block form.\n let Cdot2 = 0;\n Cdot2 += Vec2.dot(this.m_axis, vB) + this.m_a2 * wB;\n Cdot2 -= Vec2.dot(this.m_axis, vA) + this.m_a1 * wA;\n\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const f1 = Vec3.clone(this.m_impulse);\n let df = this.m_K.solve33(Vec3.neg(Cdot));\n this.m_impulse.add(df);\n\n if (this.m_limitState == LimitState.atLowerLimit) {\n this.m_impulse.z = math_max(this.m_impulse.z, 0.0);\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n this.m_impulse.z = math_min(this.m_impulse.z, 0.0);\n }\n\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n const b = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y));\n const f2r = Vec2.add(this.m_K.solve22(b), Vec2.neo(f1.x, f1.y));\n this.m_impulse.x = f2r.x;\n this.m_impulse.y = f2r.y;\n\n df = Vec3.sub(this.m_impulse, f1);\n\n const P = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis);\n const LA = df.x * this.m_s1 + df.y + df.z * this.m_a1;\n const LB = df.x * this.m_s2 + df.y + df.z * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n // Limit is inactive, just solve the prismatic constraint in block form.\n const df = this.m_K.solve22(Vec2.neg(Cdot1));\n this.m_impulse.x += df.x;\n this.m_impulse.y += df.y;\n\n const P = Vec2.mulNumVec2(df.x, this.m_perp);\n const LA = df.x * this.m_s1 + df.y;\n const LB = df.x * this.m_s2 + df.y;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute fresh Jacobians\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const axis = Rot.mulVec2(qA, this.m_localXAxisA);\n const a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), axis);\n const a2 = Vec2.crossVec2Vec2(rB, axis);\n const perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), perp);\n const s2 = Vec2.crossVec2Vec2(rB, perp);\n\n let impulse = new Vec3();\n const C1 = Vec2.zero();\n C1.x = Vec2.dot(perp, d);\n C1.y = aB - aA - this.m_referenceAngle;\n\n let linearError = math_abs(C1.x);\n const angularError = math_abs(C1.y);\n\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n let active = false; // bool\n let C2 = 0.0;\n if (this.m_enableLimit) {\n\n const translation = Vec2.dot(axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * linearSlop) {\n // Prevent large angular corrections\n C2 = clamp(translation, -maxLinearCorrection, maxLinearCorrection);\n linearError = math_max(linearError, math_abs(translation));\n active = true;\n\n } else if (translation <= this.m_lowerTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_lowerTranslation + linearSlop,\n -maxLinearCorrection, 0.0);\n linearError = Math\n .max(linearError, this.m_lowerTranslation - translation);\n active = true;\n\n } else if (translation >= this.m_upperTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_upperTranslation - linearSlop, 0.0,\n maxLinearCorrection);\n linearError = Math\n .max(linearError, translation - this.m_upperTranslation);\n active = true;\n }\n }\n\n if (active) {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n const k13 = iA * s1 * a1 + iB * s2 * a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For fixed rotation\n k22 = 1.0;\n }\n const k23 = iA * a1 + iB * a2;\n const k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2;\n\n const 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\n const C = new Vec3();\n C.x = C1.x;\n C.y = C1.y;\n C.z = C2;\n\n impulse = K.solve33(Vec3.neg(C));\n } else {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n k22 = 1.0;\n }\n\n const K = new Mat22();\n K.ex.setNum(k11, k12);\n K.ey.setNum(k12, k22);\n\n const impulse1 = K.solve(Vec2.neg(C1));\n impulse.x = impulse1.x;\n impulse.y = impulse1.y;\n impulse.z = 0.0;\n }\n\n const P = Vec2.combine(impulse.x, perp, impulse.z, axis);\n const LA = impulse.x * s1 + impulse.y + impulse.z * a1;\n const LB = impulse.x * s2 + impulse.y + impulse.z * a2;\n\n cA.subMul(mA, P);\n aA -= iA * LA;\n cB.addMul(mB, P);\n aB += iB * LB;\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError <= Settings.linearSlop\n && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointOpt extends JointOpt {\n /**\n * The maximum length of the rope.\n * Warning: this must be larger than linearSlop or the joint will have no effect.\n */\n maxLength?: number;\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointDef extends JointDef, RopeJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxLength : 0.0,\n};\n\n/**\n * A rope joint enforces a maximum distance between two points on two bodies. It\n * has no other effect.\n *\n * Warning: if you attempt to change the maximum length during the simulation\n * you will get some non-physical behavior.\n *\n * A model that would allow you to dynamically modify the length would have some\n * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you\n * want to dynamically control length.\n */\nexport class RopeJoint extends Joint {\n static TYPE = \"rope-joint\" as const;\n\n /** @internal */ m_type: \"rope-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n /** @internal */ m_maxLength: number;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_length: number;\n /** @internal */ m_state: number; // TODO enum\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n constructor(def: RopeJointDef);\n constructor(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RopeJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RopeJoint)) {\n return new RopeJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = RopeJoint.TYPE;\n this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1.0, 0.0));\n\n this.m_maxLength = def.maxLength;\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_length = 0.0;\n this.m_state = LimitState.inactiveLimit;\n\n // Limit:\n // C = norm(pB - pA) - L\n // u = (pB - pA) / norm(pB - pA)\n // Cdot = dot(u, vB + cross(wB, rB) - vA - cross(wA, rA))\n // J = [-u -cross(rA, u) u cross(rB, u)]\n // K = J * invM * JT\n // = invMassA + invIA * cross(rA, u)^2 + invMassB + invIB * cross(rB, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n maxLength: this.m_maxLength,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): RopeJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RopeJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n if (Number.isFinite(def.maxLength)) {\n this.m_maxLength = def.maxLength;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum length of the rope.\n */\n setMaxLength(length: number): void {\n this.m_maxLength = length;\n }\n\n /**\n * Get the maximum length of the rope.\n */\n getMaxLength(): number {\n return this.m_maxLength;\n }\n\n getLimitState(): number {\n // TODO LimitState\n return this.m_state;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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, cB, 1, this.m_rB);\n this.m_u.subCombine(1, cA, 1, this.m_rA);\n\n this.m_length = this.m_u.length();\n\n const C = this.m_length - this.m_maxLength;\n if (C > 0.0) {\n this.m_state = LimitState.atUpperLimit;\n } else {\n this.m_state = LimitState.inactiveLimit;\n }\n\n if (this.m_length > Settings.linearSlop) {\n this.m_u.mul(1.0 / this.m_length);\n } else {\n this.m_u.setZero();\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n return;\n }\n\n // Compute effective mass.\n const crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n const invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB;\n\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.addCrossNumVec2(vA, wA, this.m_rA);\n const vpB = Vec2.addCrossNumVec2(vB, wB, this.m_rB);\n const C = this.m_length - this.m_maxLength;\n let Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA));\n\n // Predictive constraint.\n if (C < 0.0) {\n Cdot += step.inv_dt * C;\n }\n\n let impulse = -this.m_mass * Cdot;\n const oldImpulse = this.m_impulse;\n this.m_impulse = math_min(0.0, this.m_impulse + impulse);\n impulse = this.m_impulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.zero();\n u.addCombine(1, cB, 1, rB);\n u.subCombine(1, cA, 1, rA);\n\n const length = u.normalize();\n let C = length - this.m_maxLength;\n\n C = clamp(C, 0.0, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return length - this.m_maxLength < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { } from \"../../common/Math\";\nimport { Vec2 } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { RevoluteJoint } from \"./RevoluteJoint\";\nimport { PrismaticJoint } from \"./PrismaticJoint\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointOpt extends JointOpt {\n /**\n * The gear ratio. See {@link GearJoint} for explanation.\n */\n ratio?: number;\n}\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointDef extends JointDef, GearJointOpt {\n /**\n * The first revolute/prismatic joint attached to the gear joint.\n */\n joint1: RevoluteJoint | PrismaticJoint;\n /**\n * The second prismatic/revolute joint attached to the gear joint.\n */\n joint2: RevoluteJoint | PrismaticJoint;\n}\n\n/** @internal */ const DEFAULTS = {\n ratio : 1.0\n};\n\n/**\n * A gear joint is used to connect two joints together. Either joint can be a\n * revolute or prismatic joint. You specify a gear ratio to bind the motions\n * together: coordinate1 + ratio * coordinate2 = constant\n *\n * The ratio can be negative or positive. If one joint is a revolute joint and\n * the other joint is a prismatic joint, then the ratio will have units of\n * length or units of 1/length. Warning: You have to manually destroy the gear\n * joint if joint1 or joint2 is destroyed.\n *\n * This definition requires two existing revolute or prismatic joints (any\n * combination will work).\n */\nexport class GearJoint extends Joint {\n static TYPE = \"gear-joint\" as const;\n\n /** @internal */ m_type: \"gear-joint\";\n /** @internal */ m_joint1: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_joint2: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_type1: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_type2: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_bodyC: Body;\n /** @internal */ m_localAnchorC: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_referenceAngleA: number;\n /** @internal */ m_localAxisC: Vec2;\n /** @internal */ m_bodyD: Body;\n /** @internal */ m_localAnchorD: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngleB: number;\n /** @internal */ m_localAxisD: Vec2;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_lcA: Vec2;\n /** @internal */ m_lcB: Vec2;\n /** @internal */ m_lcC: Vec2;\n /** @internal */ m_lcD: Vec2;\n /** @internal */ m_mA: number;\n /** @internal */ m_mB: number;\n /** @internal */ m_mC: number;\n /** @internal */ m_mD: number;\n /** @internal */ m_iA: number;\n /** @internal */ m_iB: number;\n /** @internal */ m_iC: number;\n /** @internal */ m_iD: number;\n /** @internal */ m_JvAC: Vec2;\n /** @internal */ m_JvBD: Vec2;\n /** @internal */ m_JwA: number;\n /** @internal */ m_JwB: number;\n /** @internal */ m_JwC: number;\n /** @internal */ m_JwD: number;\n /** @internal */ m_mass: number;\n\n constructor(def: GearJointDef);\n constructor(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number);\n constructor(def: GearJointDef, bodyA?: Body, bodyB?: Body, joint1?: RevoluteJoint | PrismaticJoint, joint2?: RevoluteJoint | PrismaticJoint, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof GearJoint)) {\n return new GearJoint(def, bodyA, bodyB, joint1, joint2, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = GearJoint.TYPE;\n\n _ASSERT && console.assert(joint1.m_type === RevoluteJoint.TYPE || joint1.m_type === PrismaticJoint.TYPE);\n _ASSERT && console.assert(joint2.m_type === RevoluteJoint.TYPE || joint2.m_type === PrismaticJoint.TYPE);\n\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\n this.m_type1 = this.m_joint1.getType() as \"revolute-joint\" | \"prismatic-joint\";\n this.m_type2 = this.m_joint2.getType() as \"revolute-joint\" | \"prismatic-joint\";\n\n // joint1 connects body A to body C\n // joint2 connects body B to body D\n\n let coordinateA: number;\n let coordinateB: number;\n\n // TODO_ERIN there might be some problem with the joint edges in Joint.\n\n this.m_bodyC = this.m_joint1.getBodyA();\n this.m_bodyA = this.m_joint1.getBodyB();\n\n // Get geometry of joint1\n const xfA = this.m_bodyA.m_xf;\n const aA = this.m_bodyA.m_sweep.a;\n const xfC = this.m_bodyC.m_xf;\n const aC = this.m_bodyC.m_sweep.a;\n\n if (this.m_type1 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint1 as RevoluteJoint;\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\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const prismatic = this.m_joint1 as PrismaticJoint;\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\n const pC = this.m_localAnchorC;\n const pA = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA.q, this.m_localAnchorA), Vec2.sub(xfA.p, xfC.p)));\n coordinateA = Vec2.dot(pA, this.m_localAxisC) - Vec2.dot(pC, this.m_localAxisC);\n }\n\n this.m_bodyD = this.m_joint2.getBodyA();\n this.m_bodyB = this.m_joint2.getBodyB();\n\n // Get geometry of joint2\n const xfB = this.m_bodyB.m_xf;\n const aB = this.m_bodyB.m_sweep.a;\n const xfD = this.m_bodyD.m_xf;\n const aD = this.m_bodyD.m_sweep.a;\n\n if (this.m_type2 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint2 as RevoluteJoint;\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const prismatic = this.m_joint2 as PrismaticJoint;\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\n const pD = this.m_localAnchorD;\n const pB = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB.q, this.m_localAnchorB), Vec2.sub(xfB.p, xfD.p)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n this.m_constant = coordinateA + this.m_ratio * coordinateB;\n\n this.m_impulse = 0.0;\n\n // Gear Joint:\n // C0 = (coordinate1 + ratio * coordinate2)_initial\n // C = (coordinate1 + ratio * coordinate2) - C0 = 0\n // J = [J1 ratio * J2]\n // K = J * invM * JT\n // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T\n //\n // Revolute:\n // coordinate = rotation\n // Cdot = angularVelocity\n // J = [0 0 1]\n // K = J * invM * JT = invI\n //\n // Prismatic:\n // coordinate = dot(p - pg, ug)\n // Cdot = dot(v + cross(w, r), ug)\n // J = [ug cross(r, ug)]\n // K = J * invM * JT = invMass + invI * cross(r, ug)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n joint1: this.m_joint1,\n joint2: this.m_joint2,\n ratio: this.m_ratio,\n\n // _constant: this.m_constant,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): GearJoint {\n data = {...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 const joint = new GearJoint(data);\n // if (data._constant) joint.m_constant = data._constant;\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n // todo: implement other fields\n if (Number.isFinite(def.ratio)) {\n this.m_ratio = def.ratio;\n }\n }\n\n /**\n * Get the first joint.\n */\n getJoint1(): Joint {\n return this.m_joint1;\n }\n\n /**\n * Get the second joint.\n */\n getJoint2(): Joint {\n return this.m_joint2;\n }\n\n /**\n * Set the gear ratio.\n */\n setRatio(ratio: number): void {\n _ASSERT && console.assert(Number.isFinite(ratio));\n this.m_ratio = ratio;\n }\n\n /**\n * Get the gear ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n const L = this.m_impulse * this.m_JwA;\n return inv_dt * L;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const aC = this.m_bodyC.c_position.a;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n\n const aD = this.m_bodyD.c_position.a;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n this.m_mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n this.m_JvAC = Vec2.zero();\n this.m_JwA = 1.0;\n this.m_JwC = 1.0;\n this.m_mass += this.m_iA + this.m_iC;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = 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(rA, 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\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 const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n // Compute effective mass.\n this.m_mass = this.m_mass > 0.0 ? 1.0 / this.m_mass : 0.0;\n\n if (step.warmStarting) {\n vA.addMul(this.m_mA * this.m_impulse, this.m_JvAC);\n wA += this.m_iA * this.m_impulse * this.m_JwA;\n\n vB.addMul(this.m_mB * this.m_impulse, this.m_JvBD);\n wB += this.m_iB * this.m_impulse * this.m_JwB;\n\n vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC);\n wC -= this.m_iC * this.m_impulse * this.m_JwC;\n\n vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD);\n wD -= this.m_iD * this.m_impulse * this.m_JwD;\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n let Cdot = Vec2.dot(this.m_JvAC, vA) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB) - 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\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n vA.addMul(this.m_mA * impulse, this.m_JvAC);\n wA += this.m_iA * impulse * this.m_JwA;\n vB.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\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n const cC = this.m_bodyC.c_position.c;\n let aC = this.m_bodyC.c_position.a;\n const cD = this.m_bodyD.c_position.c;\n let aD = this.m_bodyD.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n const linearError = 0.0;\n\n let coordinateA: number;\n let coordinateB: number;\n\n let JvAC: Vec2;\n let JvBD: Vec2;\n let JwA: number;\n let JwB: number;\n let JwC: number;\n let JwD: number;\n let mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n JvAC = Vec2.zero();\n JwA = 1.0;\n JwC = 1.0;\n mass += this.m_iA + this.m_iC;\n\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA);\n JvAC = u;\n JwC = Vec2.crossVec2Vec2(rC, u);\n JwA = Vec2.crossVec2Vec2(rA, u);\n mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA;\n\n const pC = Vec2.sub(this.m_localAnchorC, this.m_lcC);\n const pA = Rot.mulTVec2(qC, Vec2.add(rA, Vec2.sub(cA, cC)));\n coordinateA = Vec2.dot(Vec2.sub(pA, pC), this.m_localAxisC);\n }\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n const pD = Vec2.sub(this.m_localAnchorD, this.m_lcD);\n const pB = Rot.mulTVec2(qD, Vec2.add(rB, Vec2.sub(cB, cD)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n const C = (coordinateA + this.m_ratio * coordinateB) - this.m_constant;\n\n let impulse = 0.0;\n if (mass > 0.0) {\n impulse = -C / mass;\n }\n\n cA.addMul(this.m_mA * impulse, JvAC);\n aA += this.m_iA * impulse * JwA;\n cB.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\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\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\n // TODO_ERIN not implemented\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointOpt extends JointOpt {\n /**\n * The bodyB angle minus bodyA angle in radians.\n */\n angularOffset?: number;\n /**\n * The maximum motor force in N.\n */\n maxForce?: number;\n /**\n * The maximum motor torque in N-m.\n */\n maxTorque?: number;\n /**\n * Position correction factor in the range [0,1].\n */\n correctionFactor?: number;\n /**\n * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters.\n */\n linearOffset?: Vec2Value;\n}\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointDef extends JointDef, MotorJointOpt {\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 1.0,\n maxTorque : 1.0,\n correctionFactor : 0.3\n};\n\n/**\n * A motor joint is used to control the relative motion between two bodies. A\n * typical usage is to control the movement of a dynamic body with respect to\n * the ground.\n */\nexport class MotorJoint extends Joint {\n static TYPE = \"motor-joint\" as const;\n\n /** @internal */ m_type: \"motor-joint\";\n /** @internal */ m_linearOffset: Vec2;\n /** @internal */ m_angularOffset: number;\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n /** @internal */ m_correctionFactor: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_linearError: Vec2;\n /** @internal */ m_angularError: number;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: MotorJointDef);\n constructor(def: MotorJointOpt, bodyA: Body, bodyB: Body);\n constructor(def: MotorJointDef | MotorJointOpt, bodyA?: Body, bodyB?: Body) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MotorJoint)) {\n return new MotorJoint(def, bodyA, bodyB);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MotorJoint.TYPE;\n\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\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n this.m_correctionFactor = def.correctionFactor;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n //\n // r1 = offset - c1\n // r2 = -c2\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n correctionFactor: this.m_correctionFactor,\n\n linearOffset: this.m_linearOffset,\n angularOffset: this.m_angularOffset,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MotorJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new MotorJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Set the position correction factor in the range [0,1].\n */\n setCorrectionFactor(factor: number): void {\n _ASSERT && console.assert(Number.isFinite(factor) && 0.0 <= factor && factor <= 1.0);\n this.m_correctionFactor = factor;\n }\n\n /**\n * Get the position correction factor in the range [0,1].\n */\n getCorrectionFactor(): number {\n return this.m_correctionFactor;\n }\n\n /**\n * Set/get the target linear offset, in frame A, in meters.\n */\n setLinearOffset(linearOffset: Vec2Value): void {\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\n getLinearOffset(): Vec2 {\n return this.m_linearOffset;\n }\n\n /**\n * Set/get the target angular offset, in radians.\n */\n setAngularOffset(angularOffset: number): void {\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\n getAngularOffset(): number {\n return this.m_angularOffset;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getPosition();\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getPosition();\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Upper 2 by 2 of K for point to point\n const 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\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n this.m_linearError = Vec2.zero();\n this.m_linearError.addCombine(1, cB, 1, this.m_rB);\n this.m_linearError.subCombine(1, cA, 1, this.m_rA);\n\n this.m_angularError = aB - aA - this.m_angularOffset;\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n const inv_h = step.inv_dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError);\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = Vec2.clone(this.m_linearImpulse);\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n this.m_linearImpulse.clamp(maxImpulse);\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Transform } from \"../../common/Transform\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointOpt extends JointOpt {\n /**\n * [maxForce = 0.0] The maximum constraint force that can be exerted to move\n * the candidate body. Usually you will express as some multiple of the\n * weight (multiplier * mass * gravity).\n */\n maxForce?: number;\n /**\n * [frequencyHz = 5.0] The response speed.\n */\n frequencyHz?: number;\n /**\n * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical\n * damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointDef extends JointDef, MouseJointOpt {\n /**\n * The initial world target point. This is assumed to coincide with the body\n * anchor initially.\n */\n target: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n frequencyHz : 5.0,\n dampingRatio : 0.7\n};\n\n/**\n * A mouse joint is used to make a point on a body track a specified world\n * point. This a soft constraint with a maximum force. This allows the\n * constraint to stretch and without applying huge forces.\n *\n * You need to call setTarget(target) every time that mouse is \n * moved, to track the new location of the mouse.\n *\n * NOTE: this joint is not documented in the manual because it was developed to\n * be used in the testbed. If you want to learn how to use the mouse joint, look\n * at the testbed.\n */\nexport class MouseJoint extends Joint {\n static TYPE = \"mouse-joint\" as const;\n\n /** @internal */ m_type: \"mouse-joint\";\n /** @internal */ m_targetA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_impulse: Vec2;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_beta: number;\n /** @internal */ m_gamma: number;\n // Solver temp\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat22;\n /** @internal */ m_C: Vec2;\n\n constructor(def: MouseJointDef);\n constructor(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value);\n constructor(def: MouseJointDef, bodyA?: Body, bodyB?: Body, target?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MouseJoint)) {\n return new MouseJoint(def, bodyA, bodyB, target);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MouseJoint.TYPE;\n\n _ASSERT && console.assert(Number.isFinite(def.maxForce) && def.maxForce >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.frequencyHz) && def.frequencyHz >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.dampingRatio) && def.dampingRatio >= 0.0);\n\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\n this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), this.m_targetA);\n\n this.m_maxForce = def.maxForce;\n this.m_impulse = Vec2.zero();\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_beta = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rB = Vec2.zero();\n this.m_localCenterB = Vec2.zero();\n this.m_invMassB = 0.0;\n this.m_invIB = 0.0;\n this.m_mass = new Mat22();\n this.m_C = Vec2.zero();\n\n // p = attached point, m = mouse point\n // C = p - m\n // Cdot = v\n // = v + cross(w, r)\n // J = [I r_skew]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n target: this.m_targetA,\n maxForce: this.m_maxForce,\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n _localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MouseJoint {\n data = {...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 const joint = new MouseJoint(data);\n if (data._localAnchorB) {\n joint.m_localAnchorB = data._localAnchorB;\n }\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Use this to update the target point.\n */\n setTarget(target: Vec2Value): void {\n if (Vec2.areEqual(target, this.m_targetA)) return;\n this.m_bodyB.setAwake(true);\n this.m_targetA.set(target);\n }\n\n getTarget(): Vec2 {\n return this.m_targetA;\n }\n\n /**\n * Set the maximum force in Newtons.\n */\n setMaxForce(force: number): void {\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum force in Newtons.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the frequency in Hertz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get the frequency in Hertz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set the damping ratio (dimensionless).\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get the damping ratio (dimensionless).\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return Vec2.clone(this.m_targetA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_impulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * 0.0;\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_targetA.sub(newOrigin);\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const position = this.m_bodyB.c_position;\n const velocity = this.m_bodyB.c_velocity;\n\n const cB = position.c;\n const aB = position.a;\n const vB = velocity.v;\n let wB = velocity.w;\n\n const qB = Rot.neo(aB);\n\n const mass = this.m_bodyB.getMass();\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = mass * (omega * omega);\n\n // magic formulas\n // gamma has units of inverse mass.\n // beta has units of inverse time.\n const h = step.dt;\n _ASSERT && console.assert(d + h * k > EPSILON);\n this.m_gamma = h * (d + h * k);\n if (this.m_gamma != 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n this.m_beta = h * k * this.m_gamma;\n\n // Compute the effective mass matrix.\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) *\n // invI2 * skew(r2)]\n // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y\n // -r1.x*r1.y]\n // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x]\n const K = new Mat22();\n K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y\n + 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\n + this.m_gamma;\n\n this.m_mass = K.getInverse();\n\n this.m_C.setVec2(cB);\n this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA);\n this.m_C.mul(this.m_beta);\n\n // Cheat with some damping\n wB *= 0.98;\n\n if (step.warmStarting) {\n this.m_impulse.mul(step.dtRatio);\n vB.addMul(this.m_invMassB, this.m_impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse);\n\n } else {\n this.m_impulse.setZero();\n }\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const velocity = this.m_bodyB.c_velocity;\n const vB = Vec2.clone(velocity.v);\n let wB = velocity.w;\n\n // Cdot = v + cross(w, r)\n\n const Cdot = Vec2.crossNumVec2(wB, this.m_rB);\n Cdot.add(vB);\n\n Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse);\n Cdot.neg();\n\n let impulse = Mat22.mulVec2(this.m_mass, Cdot);\n\n const oldImpulse = Vec2.clone(this.m_impulse);\n this.m_impulse.add(impulse);\n const maxImpulse = step.dt * this.m_maxForce;\n this.m_impulse.clamp(maxImpulse);\n impulse = Vec2.sub(this.m_impulse, oldImpulse);\n\n vB.addMul(this.m_invMassB, impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\n// tslint:disable-next-line:no-empty-interface\nexport interface PulleyJointOpt extends JointOpt {\n}\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\nexport interface PulleyJointDef extends JointDef, PulleyJointOpt {\n /**\n * The first ground anchor in world coordinates. This point never moves.\n */\n groundAnchorA: Vec2Value;\n /**\n * The second ground anchor in world coordinates. This point never moves.\n */\n groundAnchorB: Vec2Value;\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The reference length for the segment attached to bodyA.\n */\n lengthA: number;\n /**\n * The reference length for the segment attached to bodyB.\n */\n lengthB: number;\n /**\n * The pulley ratio, used to simulate a block-and-tackle.\n */\n ratio: number;\n\n /** @hidden */ anchorA?: Vec2Value;\n /** @hidden */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n collideConnected : true\n};\n\n/**\n * The pulley joint is connected to two bodies and two fixed ground points. The\n * pulley supports a ratio such that: length1 + ratio * length2 <= constant\n *\n * Yes, the force transmitted is scaled by the ratio.\n *\n * Warning: the pulley joint can get a bit squirrelly by itself. They often work\n * better when combined with prismatic joints. You should also cover the the\n * anchor points with static shapes to prevent one side from going to zero\n * length.\n */\nexport class PulleyJoint extends Joint {\n static TYPE = \"pulley-joint\" as const;\n // static MIN_PULLEY_LENGTH: number = 2.0; // TODO where this is used?\n\n /** @internal */ m_type: \"pulley-joint\";\n /** @internal */ m_groundAnchorA: Vec2;\n /** @internal */ m_groundAnchorB: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_lengthA: number;\n /** @internal */ m_lengthB: number;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_uA: Vec2;\n /** @internal */ m_uB: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n constructor(def: PulleyJointDef);\n constructor(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number);\n constructor(def: PulleyJointDef, bodyA?: Body, bodyB?: Body, groundA?: Vec2Value, groundB?: Vec2Value, anchorA?: Vec2Value, anchorB?: Vec2Value, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PulleyJoint)) {\n return new PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PulleyJoint.TYPE;\n this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1.0, 1.0));\n this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1.0, 1.0));\n this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1.0, 0.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\n _ASSERT && console.assert(ratio > EPSILON);\n\n this.m_constant = this.m_lengthA + this.m_ratio * this.m_lengthB;\n\n this.m_impulse = 0.0;\n\n // Pulley:\n // length1 = norm(p1 - s1)\n // length2 = norm(p2 - s2)\n // C0 = (length1 + ratio * length2)_initial\n // C = C0 - (length1 + ratio * length2)\n // u1 = (p1 - s1) / norm(p1 - s1)\n // u2 = (p2 - s2) / norm(p2 - s2)\n // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2))\n // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 *\n // cross(r2, u2)^2)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PulleyJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new PulleyJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Get the first ground anchor.\n */\n getGroundAnchorA(): Vec2 {\n return this.m_groundAnchorA;\n }\n\n /**\n * Get the second ground anchor.\n */\n getGroundAnchorB(): Vec2 {\n return this.m_groundAnchorB;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getLengthA(): number {\n return this.m_lengthA;\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getLengthB(): number {\n return this.m_lengthB;\n }\n\n /**\n * Get the pulley ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getCurrentLengthA(): number {\n const p = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const s = this.m_groundAnchorA;\n return Vec2.distance(p, s);\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getCurrentLengthB(): number {\n const p = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const s = this.m_groundAnchorB;\n return Vec2.distance(p, s);\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n *\n * @param newOrigin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_groundAnchorA.sub(newOrigin);\n this.m_groundAnchorB.sub(newOrigin);\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // Get the pulley axes.\n this.m_uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n this.m_uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = this.m_uA.length();\n const lengthB = this.m_uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n this.m_uA.mul(1.0 / lengthA);\n } else {\n this.m_uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n this.m_uB.mul(1.0 / lengthB);\n } else {\n this.m_uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA);\n const ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n this.m_mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support variable time steps.\n this.m_impulse *= step.dtRatio;\n\n // Warm starting.\n const PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB);\n\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n\n const Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB);\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const PA = Vec2.mulNumVec2(-impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB);\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // Get the pulley axes.\n const uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n const uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = uA.length();\n const lengthB = uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n uA.mul(1.0 / lengthA);\n } else {\n uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n uB.mul(1.0 / lengthB);\n } else {\n uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(rA, uA);\n const ruB = Vec2.crossVec2Vec2(rB, uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n let mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (mass > 0.0) {\n mass = 1.0 / mass;\n }\n\n const C = this.m_constant - lengthA - this.m_ratio * lengthB;\n const linearError = math_abs(C);\n\n const impulse = -mass * C;\n\n const PA = Vec2.mulNumVec2(-impulse, uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB);\n\n cA.addMul(this.m_invMassA, PA);\n aA += this.m_invIA * Vec2.crossVec2Vec2(rA, PA);\n cB.addMul(this.m_invMassB, PB);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, PB);\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness\n * with a value of 0.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle?: number;\n}\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointDef extends JointDef, WeldJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0,\n};\n\n/**\n * A weld joint essentially glues two bodies together. A weld joint may distort\n * somewhat because the island constraint solver is approximate.\n */\nexport class WeldJoint extends Joint {\n static TYPE = \"weld-joint\" as const;\n\n /** @internal */ m_type: \"weld-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_impulse: Vec3;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat33;\n\n constructor(def: WeldJointDef);\n constructor(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: WeldJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WeldJoint)) {\n return new WeldJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = WeldJoint.TYPE;\n\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\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_impulse = new Vec3();\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rA;\n this.m_rB;\n this.m_localCenterA;\n this.m_localCenterB;\n this.m_invMassA;\n this.m_invMassB;\n this.m_invIA;\n this.m_invIB;\n this.m_mass = new Mat33();\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // / = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // C = angle2 - angle1 - referenceAngle\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WeldJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WeldJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Set frequency in Hz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get frequency in Hz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set damping ratio.\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get damping ratio.\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const 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\n * 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\n * 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\n if (this.m_frequencyHz > 0.0) {\n K.getInverse22(this.m_mass);\n\n let invM = iA + iB;\n const m = invM > 0.0 ? 1.0 / invM : 0.0;\n\n const C = aB - aA - this.m_referenceAngle;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * m * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = m * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invM += this.m_gamma;\n this.m_mass.ez.z = invM != 0.0 ? 1.0 / invM : 0.0;\n } else if (K.ez.z == 0.0) {\n K.getInverse22(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n } else {\n K.getSymInverse33(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n if (this.m_frequencyHz > 0.0) {\n const Cdot2 = wB - wA;\n\n const impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z);\n this.m_impulse.z += impulse2;\n\n wA -= iA * impulse2;\n wB += iB * impulse2;\n\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n\n const impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1));\n this.m_impulse.x += impulse1.x;\n this.m_impulse.y += impulse1.y;\n\n const P = Vec2.clone(impulse1);\n\n vA.subMul(mA, P);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(mB, P);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, P);\n } else {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot));\n this.m_impulse.add(impulse);\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n let positionError: number;\n let angularError: number;\n\n const K = new Mat33();\n K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB;\n K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB;\n K.ez.x = -rA.y * iA - rB.y * iB;\n K.ex.y = K.ey.x;\n K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB;\n K.ez.y = rA.x * iA + rB.x * iB;\n K.ex.z = K.ez.x;\n K.ey.z = K.ez.y;\n K.ez.z = iA + iB;\n\n if (this.m_frequencyHz > 0.0) {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n positionError = C1.length();\n angularError = 0.0;\n\n const P = Vec2.neg(K.solve22(C1));\n\n cA.subMul(mA, P);\n aA -= iA * Vec2.crossVec2Vec2(rA, P);\n\n cB.addMul(mB, P);\n aB += iB * Vec2.crossVec2Vec2(rB, P);\n } else {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n const C2 = aB - aA - this.m_referenceAngle;\n\n positionError = C1.length();\n angularError = math_abs(C2);\n\n const C = new Vec3(C1.x, C1.y, C2);\n\n let impulse = new Vec3();\n if (K.ez.z > 0.0) {\n impulse = Vec3.neg(K.solve33(C));\n } else {\n const impulse2 = Vec2.neg(K.solve22(C1));\n impulse.set(impulse2.x, impulse2.y, 0.0);\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n cA.subMul(mA, P);\n aA -= iA * (Vec2.crossVec2Vec2(rA, P) + impulse.z);\n\n cB.addMul(mB, P);\n aB += iB * (Vec2.crossVec2Vec2(rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointOpt extends JointOpt {\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n /**\n * Suspension frequency, zero indicates no suspension.\n */\n frequencyHz?: number;\n /**\n * Suspension damping ratio, one indicates critical damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointDef extends JointDef, WheelJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation axis in bodyA.\n */\n localAxisA: Vec2Value;\n\n /** @internal renamed to localAxisA */\n localAxis?: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableMotor : false,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n frequencyHz : 2.0,\n dampingRatio : 0.7,\n};\n\n/**\n * A wheel joint. This joint provides two degrees of freedom: translation along\n * an axis fixed in bodyA and rotation in the plane. In other words, it is a\n * point to line constraint with a rotational motor and a linear spring/damper.\n * This joint is designed for vehicle suspensions.\n */\nexport class WheelJoint extends Joint {\n static TYPE = \"wheel-joint\" as const;\n\n /** @internal */ m_type: \"wheel-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_springMass: number;\n /** @internal */ m_springImpulse: number;\n\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableMotor: boolean;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n /** @internal */ m_ax: Vec2;\n /** @internal */ m_ay: Vec2;\n /** @internal */ m_sAx: number;\n /** @internal */ m_sBx: number;\n /** @internal */ m_sAy: number;\n /** @internal */ m_sBy: number;\n\n constructor(def: WheelJointDef);\n constructor(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: WheelJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WheelJoint)) {\n return new WheelJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_ax = Vec2.zero();\n this.m_ay = Vec2.zero();\n\n this.m_type = WheelJoint.TYPE;\n\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\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 // localAxis is renamed to localAxisA, this is for backward compatibility\n this.m_localXAxisA = Vec2.clone(def.localAxis);\n } else {\n this.m_localXAxisA = Vec2.neo(1.0, 0.0);\n }\n\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n this.m_springMass = 0.0;\n this.m_springImpulse = 0.0;\n\n this.m_maxMotorTorque = def.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed;\n this.m_enableMotor = def.enableMotor;\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Linear constraint (point-to-line)\n // d = pB - pA = xB + rB - xA - rA\n // C = dot(ay, d)\n // Cdot = dot(d, cross(wA, ay)) + dot(ay, vB + cross(wB, rB) - vA - cross(wA,\n // rA))\n // = -dot(ay, vA) - dot(cross(d + rA, ay), wA) + dot(ay, vB) + dot(cross(rB,\n // ay), vB)\n // J = [-ay, -cross(d + rA, ay), ay, cross(rB, ay)]\n\n // Spring linear constraint\n // C = dot(ax, d)\n // Cdot = = -dot(ax, vA) - dot(cross(d + rA, ax), wA) + dot(ax, vB) +\n // dot(cross(rB, ax), vB)\n // J = [-ax -cross(d+rA, ax) ax cross(rB, ax)]\n\n // Motor rotational constraint\n // Cdot = wB - wA\n // J = [0 0 -1 0 0 1]\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WheelJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WheelJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, def.localAxisA));\n }\n if (def.enableMotor !== undefined) {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const pA = bA.getWorldPoint(this.m_localAnchorA);\n const pB = bB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = bA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const wA = this.m_bodyA.m_angularVelocity;\n const wB = this.m_bodyB.m_angularVelocity;\n return wB - wA;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed, usually in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set/Get the maximum motor force, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Get the current motor torque given the inverse time step, usually in N-m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set/Get the spring frequency in hertz. Setting the frequency to zero disables\n * the spring.\n */\n setSpringFrequencyHz(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getSpringFrequencyHz(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set/Get the spring damping ratio\n */\n setSpringDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getSpringDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n // Point to line constraint\n {\n this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA);\n this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ay);\n this.m_sBy = Vec2.crossVec2Vec2(rB, this.m_ay);\n\n this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy\n * this.m_sBy;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n }\n\n // Spring constraint\n this.m_springMass = 0.0;\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n if (this.m_frequencyHz > 0.0) {\n this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ax);\n this.m_sBx = Vec2.crossVec2Vec2(rB, this.m_ax);\n\n const invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx\n * this.m_sBx;\n\n if (invMass > 0.0) {\n this.m_springMass = 1.0 / invMass;\n\n const C = Vec2.dot(d, this.m_ax);\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const damp = 2.0 * this.m_springMass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_springMass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (damp + h * k);\n if (this.m_gamma > 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n\n this.m_bias = C * h * k * this.m_gamma;\n\n this.m_springMass = invMass + this.m_gamma;\n if (this.m_springMass > 0.0) {\n this.m_springMass = 1.0 / this.m_springMass;\n }\n }\n } else {\n this.m_springImpulse = 0.0;\n }\n\n // Rotational motor\n if (this.m_enableMotor) {\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n } else {\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse *= step.dtRatio;\n this.m_springImpulse *= step.dtRatio;\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax);\n const LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse;\n const LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse;\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * LA;\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * LB;\n\n } else {\n this.m_impulse = 0.0;\n this.m_springImpulse = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Solve spring constraint\n {\n const Cdot = Vec2.dot(this.m_ax, vB) - Vec2.dot(this.m_ax, vA) + this.m_sBx * wB - this.m_sAx * wA;\n const impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse);\n this.m_springImpulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ax);\n const LA = impulse * this.m_sAx;\n const LB = impulse * this.m_sBx;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n // Solve rotational motor constraint\n {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve point to line constraint\n {\n const Cdot = Vec2.dot(this.m_ay, vB) - Vec2.dot(this.m_ay, vA) + this.m_sBy * wB - this.m_sAy * wA;\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ay);\n const LA = impulse * this.m_sAy;\n const LB = impulse * this.m_sBy;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const ay = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), ay);\n const sBy = Vec2.crossVec2Vec2(rB, ay);\n\n const C = Vec2.dot(d, ay);\n\n const 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\n const impulse = k != 0.0 ? -C / k : 0.0;\n\n const P = Vec2.mulNumVec2(impulse, ay);\n const LA = impulse * sAy;\n const LB = impulse * sBy;\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * LA;\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * LB;\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) <= Settings.linearSlop;\n }\n\n}\n","import { World } from \"../dynamics/World\";\nimport { Body } from \"../dynamics/Body\";\nimport { Joint } from \"../dynamics/Joint\";\nimport { Fixture } from \"../dynamics/Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { Vec2 } from \"../common/Vec2\";\nimport { Vec3 } from \"../common/Vec3\";\nimport { ChainShape } from \"../collision/shape/ChainShape\";\n// import { BoxShape } from \"../collision/shape/BoxShape\";\nimport { EdgeShape } from \"../collision/shape/EdgeShape\";\nimport { PolygonShape } from \"../collision/shape/PolygonShape\";\nimport { CircleShape } from \"../collision/shape/CircleShape\";\nimport { DistanceJoint } from \"../dynamics/joint/DistanceJoint\";\nimport { FrictionJoint } from \"../dynamics/joint/FrictionJoint\";\nimport { GearJoint } from \"../dynamics/joint/GearJoint\";\nimport { MotorJoint } from \"../dynamics/joint/MotorJoint\";\nimport { MouseJoint } from \"../dynamics/joint/MouseJoint\";\nimport { PrismaticJoint } from \"../dynamics/joint/PrismaticJoint\";\nimport { PulleyJoint } from \"../dynamics/joint/PulleyJoint\";\nimport { RevoluteJoint } from \"../dynamics/joint/RevoluteJoint\";\nimport { RopeJoint } from \"../dynamics/joint/RopeJoint\";\nimport { WeldJoint } from \"../dynamics/joint/WeldJoint\";\nimport { WheelJoint } from \"../dynamics/joint/WheelJoint\";\n\nlet SID = 0;\n\n// Classes to be serialized as reference objects\nconst SERIALIZE_REF_TYPES = {\n \"World\": World,\n \"Body\": Body,\n \"Joint\": Joint,\n \"Fixture\": Fixture,\n \"Shape\": Shape,\n};\n\n// For deserializing reference objects by reference type\nconst 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};\n\n// For deserializing data objects by type field\nconst DESERIALIZE_BY_TYPE_FIELD = {\n [Body.STATIC]: Body,\n [Body.DYNAMIC]: Body,\n [Body.KINEMATIC]: Body,\n [ChainShape.TYPE]: ChainShape,\n // [BoxShape.TYPE]: BoxShape,\n [PolygonShape.TYPE]: PolygonShape,\n [EdgeShape.TYPE]: EdgeShape,\n [CircleShape.TYPE]: CircleShape,\n [DistanceJoint.TYPE]: DistanceJoint,\n [FrictionJoint.TYPE]: FrictionJoint,\n [GearJoint.TYPE]: GearJoint,\n [MotorJoint.TYPE]: MotorJoint,\n [MouseJoint.TYPE]: MouseJoint,\n [PrismaticJoint.TYPE]: PrismaticJoint,\n [PulleyJoint.TYPE]: PulleyJoint,\n [RevoluteJoint.TYPE]: RevoluteJoint,\n [RopeJoint.TYPE]: RopeJoint,\n [WeldJoint.TYPE]: WeldJoint,\n [WheelJoint.TYPE]: WheelJoint,\n};\n\n// dummy types\ntype DataType = any;\ntype ObjectType = any;\ntype ClassName = any;\n\ntype SerializedType = object[];\n\ntype RefType = {\n refIndex: number,\n refType: string,\n};\n\ntype SerializerOptions = {\n rootClass: ClassName,\n preSerialize?: (obj: ObjectType) => DataType,\n postSerialize?: (data: DataType, obj: any) => DataType,\n preDeserialize?: (data: DataType) => DataType,\n postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType,\n};\n\nconst DEFAULT_OPTIONS: SerializerOptions = {\n rootClass: World,\n preSerialize: function(obj) { return obj; },\n postSerialize: function(data, obj) { return data; },\n preDeserialize: function(data: DataType) { return data; },\n postDeserialize: function(obj, data) { return obj; },\n};\n\ntype DeserializeChildCallback = (classHint: any, obj: any, context: any) => any;\ntype ClassDeserializerMethod = (data: any, context: any, deserialize: DeserializeChildCallback) => any;\n\nexport class Serializer {\n private options: SerializerOptions;\n constructor(options: SerializerOptions) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n toJson = (root: T): SerializedType => {\n const preSerialize = this.options.preSerialize;\n const postSerialize = this.options.postSerialize;\n const json = [];\n\n // Breadth-first ref serialization queue\n const refQueue = [root];\n\n const refMemoById: Record = {};\n\n function addToRefQueue(value: any, typeName: string) {\n value.__sid = value.__sid || ++SID;\n if (!refMemoById[value.__sid]) {\n refQueue.push(value);\n const index = json.length + refQueue.length;\n const ref = {\n refIndex: index,\n refType: typeName\n };\n refMemoById[value.__sid] = ref;\n }\n return refMemoById[value.__sid];\n }\n\n function serializeWithHooks(obj: ObjectType) {\n obj = preSerialize(obj);\n let data = obj._serialize();\n data = postSerialize(data, obj);\n return data;\n }\n\n // traverse the object graph\n // ref objects are pushed into the queue\n // other objects are serialize in-place \n function traverse(value: any, noRefType = false) {\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n // object with _serialize function\n if (typeof value._serialize === \"function\") {\n if (!noRefType) {\n for (const typeName in SERIALIZE_REF_TYPES) {\n if (value instanceof SERIALIZE_REF_TYPES[typeName]) {\n return addToRefQueue(value, typeName);\n }\n }\n }\n // object with _serialize function\n value = serializeWithHooks(value);\n }\n // recursive for arrays any objects\n if (Array.isArray(value)) {\n const newValue = [];\n for (let key = 0; key < value.length; key++) {\n newValue[key] = traverse(value[key]);\n }\n value = newValue;\n\n } else {\n const newValue = {};\n for (const 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\n while (refQueue.length) {\n const obj = refQueue.shift();\n const str = traverse(obj, true);\n json.push(str);\n }\n\n return json;\n };\n\n fromJson = (json: SerializedType): T => {\n const preDeserialize = this.options.preDeserialize;\n const postDeserialize = this.options.postDeserialize;\n const rootClass = this.options.rootClass;\n\n const deserializedRefMemoByIndex: Record = {};\n\n function deserializeWithHooks(classHint: ClassName, data: DataType, context: any): ObjectType {\n if (!classHint || !classHint._deserialize) {\n classHint = DESERIALIZE_BY_TYPE_FIELD[data.type];\n }\n const deserializer = classHint && classHint._deserialize;\n if (!deserializer) {\n return;\n }\n data = preDeserialize(data);\n const classDeserializeFn = classHint._deserialize as ClassDeserializerMethod;\n let obj = classDeserializeFn(data, context, deserializeChild);\n obj = postDeserialize(obj, data);\n return obj;\n }\n\n /**\n * Recursive callback function to deserialize a child data object or reference object.\n * \n * @param classHint suggested class to deserialize obj to\n * @param dataOrRef data or reference object\n * @param context for example world when deserializing bodies and joints\n */\n function deserializeChild(classHint: ClassName, dataOrRef: DataType | RefType, context: any) {\n const isRefObject = dataOrRef.refIndex && dataOrRef.refType;\n if (!isRefObject) {\n return deserializeWithHooks(classHint, dataOrRef, context); \n }\n const ref = dataOrRef as RefType;\n if (DESERIALIZE_BY_REF_TYPE[ref.refType]) {\n classHint = DESERIALIZE_BY_REF_TYPE[ref.refType];\n }\n const refIndex = ref.refIndex;\n if (!deserializedRefMemoByIndex[refIndex]) {\n const data = json[refIndex];\n const obj = deserializeWithHooks(classHint, data, context);\n deserializedRefMemoByIndex[refIndex] = obj;\n }\n return deserializedRefMemoByIndex[refIndex];\n }\n\n const root = deserializeWithHooks(rootClass, json[0], null);\n\n return root;\n };\n\n static toJson: (root: World) => SerializedType;\n static fromJson: (json: SerializedType) => World;\n}\n\nconst worldSerializer = new Serializer({\n rootClass: World,\n});\n\nSerializer.fromJson = worldSerializer.fromJson;\nSerializer.toJson = worldSerializer.toJson;\n","import type { AABBValue } from \"../collision/AABB\";\nimport type { World } from \"../dynamics/World\";\nimport type { Joint } from \"../dynamics/Joint\";\nimport type { Fixture } from \"../dynamics/Fixture\";\nimport type { Body } from \"../dynamics/Body\";\n\nexport interface Style {\n stroke?: string;\n fill?: string;\n lineWidth?: number;\n}\n\ntype KEY = \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" |\n \"8\" | \"9\" | \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\" |\n \"H\" | \"I\" | \"J\" | \"K\" | \"L\" | \"M\" | \"N\" | \"O\" | \"P\" |\n \"Q\" | \"R\" | \"S\" | \"T\" | \"U\" | \"V\" | \"W\" | \"X\" | \"Y\" |\n \"Z\" | \"right\" | \"left\" | \"up\" | \"down\" | \"fire\";\n\nexport type ActiveKeys = { [key in KEY]?: boolean };\n\ntype TestbedMountOptions = {};\n\nexport abstract class Testbed {\n /**\n * Mounts testbed. Call start with a world to start simulation and rendering.\n */\n static mount(options?: TestbedMountOptions): Testbed {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Mounts testbed if needed, then starts simulation and rendering.\n * \n * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`.\n */\n static start(world: World): Testbed {\n const testbed = Testbed.mount();\n testbed.start(world);\n return testbed;\n }\n\n /** World viewbox width. */\n width: number = 80;\n\n /** World viewbox height. */\n height: number = 60;\n\n /** World viewbox center vertical offset. */\n x: number = 0;\n\n /** World viewbox center horizontal offset. */\n y: number = -10;\n\n /** @hidden */\n scaleY: number = -1;\n\n /** World simulation step frequency */\n hz: number = 60;\n\n /** World simulation speed, default is 1 */\n speed: number = 1;\n\n background: string = \"#222222\";\n\n mouseForce?: number;\n activeKeys: ActiveKeys = {};\n\n /** callback, to be implemented by user */\n step = (dt: number, t: number): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keydown = (keyCode: number, label: string): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keyup = (keyCode: number, label: string): void => {\n return;\n };\n\n abstract status(name: string, value: any): void;\n abstract status(value: object | string): void;\n\n abstract info(text: string): void;\n\n color(r: number, g: number, b: number): string {\n r = r * 256 | 0;\n g = g * 256 | 0;\n b = b * 256 | 0;\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n }\n\n abstract drawPoint(p: {x: number, y: number}, r: any, color: string): void;\n abstract drawCircle(p: {x: number, y: number}, r: number, color: string): void;\n abstract drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawSegment(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawPolygon(points: Array<{x: number, y: number}>, color: string): void;\n abstract drawAABB(aabb: AABBValue, color: string): void;\n\n abstract start(world: World): void;\n\n abstract findOne(query: string): (Body | Joint | Fixture | null);\n abstract findAll(query: string): (Body | Joint | Fixture)[];\n}\n\ntype TestbedFactoryOptions = string | {};\n\n/** @deprecated */\ntype TestbedCallback = (testbed: Testbed) => (World | undefined);\n\n/** @deprecated */\nexport function testbed(callback: TestbedCallback): void;\n/** @deprecated */\nexport function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void;\n/** @internal */\nexport function testbed(a?: any, b?: any) {\n let callback: TestbedCallback | undefined;\n let options;\n if (typeof a === \"function\") {\n callback = a;\n options = b;\n } else if (typeof b === \"function\") {\n callback = b;\n options = a;\n } else {\n options = a ?? b;\n }\n const testbed = Testbed.mount(options);\n if (callback) {\n // this is for backwards compatibility\n const world = callback(testbed) || (testbed as any).world;\n testbed.start(world);\n } else {\n return testbed;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2Value } from \"../../common/Vec2\";\nimport { PolygonShape } from \"./PolygonShape\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * A rectangle polygon which extend PolygonShape.\n */\nexport class BoxShape extends PolygonShape {\n // note that box is serialized/deserialized as polygon\n static TYPE = \"polygon\" as const;\n\n /**\n * \n * @param halfWidth \n * @param halfHeight \n * @param center coordinate of the center of the box relative to the body\n * @param angle angle of the box relative to the body\n */\n constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof BoxShape)) {\n return new BoxShape(halfWidth, halfHeight, center, angle);\n }\n\n super();\n\n this._setAsBox(halfWidth, halfHeight, center, angle);\n }\n}\n\nexport const Box = BoxShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\nimport * as matrix from \"../../common/Matrix\";\nimport { Transform } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact);\n\n/** @internal */ function CircleCircleContact(manifold: Manifold, xfA: Transform, fixtureA: Fixture, indexA: number, xfB: Transform, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == CircleShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollideCircles(manifold, fixtureA.getShape() as CircleShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const pA = matrix.vec2(0, 0);\n/** @internal */ const pB = matrix.vec2(0, 0);\n\nexport const CollideCircles = function (manifold: Manifold, circleA: CircleShape, xfA: Transform, circleB: CircleShape, xfB: Transform): void {\n manifold.pointCount = 0;\n\n matrix.transformVec2(pA, xfA, circleA.m_p);\n matrix.transformVec2(pB, xfB, circleB.m_p);\n\n const distSqr = matrix.distSqrVec2(pB, pA);\n const rA = circleA.m_radius;\n const rB = circleB.m_radius;\n const radius = rA + rB;\n if (distSqr > radius * radius) {\n return;\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.copyVec2(manifold.localPoint, circleA.m_p);\n matrix.zeroVec2(manifold.localNormal);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact);\nContact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact);\n\n/** @internal */ function EdgeCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const shapeA = fixtureA.getShape() as EdgeShape;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\nfunction ChainCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const chain = fixtureA.getShape() as ChainShape;\n const edge = new EdgeShape();\n chain.getChildEdge(edge, indexA);\n\n const shapeA = edge;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const Q = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n// Compute contact points for edge versus circle.\n// This accounts for edge connectivity.\nexport const CollideEdgeCircle = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle in frame of edge\n matrix.retransformVec2(Q, xfB, xfA, circleB.m_p);\n\n const A = edgeA.m_vertex1;\n const B = edgeA.m_vertex2;\n matrix.subVec2(e, B, A);\n\n // Barycentric coordinates\n const u = matrix.dotVec2(e, B) - matrix.dotVec2(e, Q);\n const v = matrix.dotVec2(e, Q) - matrix.dotVec2(e, A);\n\n const radius = edgeA.m_radius + circleB.m_radius;\n\n // Region A\n if (v <= 0.0) {\n matrix.copyVec2(P, A);\n const dd = matrix.distSqrVec2(Q, A);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to A?\n if (edgeA.m_hasVertex0) {\n const A1 = edgeA.m_vertex0;\n const B1 = A;\n matrix.subVec2(e1, B1, A1);\n const u1 = matrix.dotVec2(e1, B1) - matrix.dotVec2(e1, Q);\n\n // Is the circle in Region AB of the previous edge?\n if (u1 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Region B\n if (u <= 0.0) {\n matrix.copyVec2(P, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to B?\n if (edgeA.m_hasVertex3) {\n const B2 = edgeA.m_vertex3;\n const A2 = B;\n matrix.subVec2(e2, B2, A2);\n const v2 = matrix.dotVec2(e2, Q) - matrix.dotVec2(e2, A2);\n\n // Is the circle in Region AB of the next edge?\n if (v2 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n\n return;\n }\n\n // Region AB\n const den = matrix.lengthSqrVec2(e);\n _ASSERT && console.assert(den > 0.0);\n matrix.combine2Vec2(P, u / den, A, v / den, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n matrix.crossNumVec2(n, 1, e);\n if (matrix.dotVec2(n, Q) - matrix.dotVec2(n, A) < 0.0) {\n matrix.negVec2(n);\n }\n matrix.normalizeVec2(n);\n\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, n);\n matrix.copyVec2(manifold.localPoint, A);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const incidentEdge = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipSegmentToLineNormal = matrix.vec2(0, 0);\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const v11 = matrix.vec2(0, 0);\n/** @internal */ const v12 = matrix.vec2(0, 0);\n/** @internal */ const localTangent = matrix.vec2(0, 0);\n/** @internal */ const localNormal = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n\n\nContact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact);\n\n/** @internal */ function PolygonContact(\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number,\n): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == PolygonShape.TYPE);\n CollidePolygons(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ interface MaxSeparation {\n maxSeparation: number;\n bestIndex: number;\n}\n\n/**\n * Find the max separation between poly1 and poly2 using edge normals from\n * poly1.\n */\n/** @internal */ function findMaxSeparation(\n poly1: PolygonShape,\n xf1: TransformValue,\n poly2: PolygonShape,\n xf2: TransformValue,\n output: MaxSeparation,\n): void {\n const count1 = poly1.m_count;\n const count2 = poly2.m_count;\n const n1s = poly1.m_normals;\n const v1s = poly1.m_vertices;\n const v2s = poly2.m_vertices;\n\n matrix.detransformTransform(xf, xf2, xf1);\n\n let bestIndex = 0;\n let maxSeparation = -Infinity;\n for (let i = 0; i < count1; ++i) {\n // Get poly1 normal in frame2.\n matrix.rotVec2(n, xf.q, n1s[i]);\n matrix.transformVec2(v1, xf, v1s[i]);\n\n // Find deepest point for normal i.\n let si = Infinity;\n for (let j = 0; j < count2; ++j) {\n const sij = matrix.dotVec2(n, v2s[j]) - matrix.dotVec2(n, v1);\n if (sij < si) {\n si = sij;\n }\n }\n\n if (si > maxSeparation) {\n maxSeparation = si;\n bestIndex = i;\n }\n }\n\n // used to keep last FindMaxSeparation call values\n output.maxSeparation = maxSeparation;\n output.bestIndex = bestIndex;\n}\n\n/** @internal */ function findIncidentEdge(\n clipVertex: ClipVertex[],\n poly1: PolygonShape,\n xf1: TransformValue,\n edge1: number,\n poly2: PolygonShape,\n xf2: TransformValue,\n): void {\n const normals1 = poly1.m_normals;\n\n const count2 = poly2.m_count;\n const vertices2 = poly2.m_vertices;\n const normals2 = poly2.m_normals;\n\n _ASSERT && console.assert(0 <= edge1 && edge1 < poly1.m_count);\n\n // Get the normal of the reference edge in poly2's frame.\n matrix.rerotVec2(normal1, xf2.q, xf1.q, normals1[edge1]);\n\n // Find the incident edge on poly2.\n let index = 0;\n let minDot = Infinity;\n for (let i = 0; i < count2; ++i) {\n const dot = matrix.dotVec2(normal1, normals2[i]);\n if (dot < minDot) {\n minDot = dot;\n index = i;\n }\n }\n\n // Build the clip vertices for the incident edge.\n const i1 = index;\n const i2 = i1 + 1 < count2 ? i1 + 1 : 0;\n\n matrix.transformVec2(clipVertex[0].v, xf2, vertices2[i1]);\n clipVertex[0].id.setFeatures(edge1, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.transformVec2(clipVertex[1].v, xf2, vertices2[i2]);\n clipVertex[1].id.setFeatures(edge1, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n}\n\n/** @internal */ const maxSeparation = {\n maxSeparation: 0,\n bestIndex: 0,\n};\n\n/**\n *\n * Find edge normal of max separation on A - return if separating axis is found
\n * Find edge normal of max separation on B - return if separation axis is found
\n * Choose reference edge as min(minA, minB)
\n * Find incident edge
\n * Clip\n *\n * The normal points from 1 to 2\n */\nexport const CollidePolygons = function (\n manifold: Manifold,\n polyA: PolygonShape,\n xfA: TransformValue,\n polyB: PolygonShape,\n xfB: TransformValue,\n): void {\n manifold.pointCount = 0;\n const totalRadius = polyA.m_radius + polyB.m_radius;\n\n findMaxSeparation(polyA, xfA, polyB, xfB, maxSeparation);\n const edgeA = maxSeparation.bestIndex;\n const separationA = maxSeparation.maxSeparation;\n if (separationA > totalRadius)\n return;\n\n findMaxSeparation(polyB, xfB, polyA, xfA, maxSeparation);\n const edgeB = maxSeparation.bestIndex;\n const separationB = maxSeparation.maxSeparation;\n if (separationB > totalRadius)\n return;\n\n let poly1: PolygonShape; // reference polygon\n let poly2: PolygonShape; // incident polygon\n let xf1: TransformValue;\n let xf2: TransformValue;\n let edge1: number; // reference edge\n let flip: boolean;\n const k_tol = 0.1 * Settings.linearSlop;\n\n if (separationB > separationA + k_tol) {\n poly1 = polyB;\n poly2 = polyA;\n xf1 = xfB;\n xf2 = xfA;\n edge1 = edgeB;\n manifold.type = ManifoldType.e_faceB;\n flip = true;\n } else {\n poly1 = polyA;\n poly2 = polyB;\n xf1 = xfA;\n xf2 = xfB;\n edge1 = edgeA;\n manifold.type = ManifoldType.e_faceA;\n flip = false;\n }\n\n incidentEdge[0].recycle(), incidentEdge[1].recycle();\n findIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2);\n\n const count1 = poly1.m_count;\n const vertices1 = poly1.m_vertices;\n\n const iv1 = edge1;\n const iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0;\n\n matrix.copyVec2(v11, vertices1[iv1]);\n matrix.copyVec2(v12, vertices1[iv2]);\n\n matrix.subVec2(localTangent, v12, v11);\n matrix.normalizeVec2(localTangent);\n\n matrix.crossVec2Num(localNormal, localTangent, 1.0);\n matrix.combine2Vec2(planePoint, 0.5, v11, 0.5, v12);\n\n matrix.rotVec2(tangent, xf1.q, localTangent);\n matrix.crossVec2Num(normal, tangent, 1.0);\n\n matrix.transformVec2(v11, xf1, v11);\n matrix.transformVec2(v12, xf1, v12);\n\n // Face offset.\n const frontOffset = matrix.dotVec2(normal, v11);\n\n // Side offsets, extended by polytope skin thickness.\n const sideOffset1 = -matrix.dotVec2(tangent, v11) + totalRadius;\n const sideOffset2 = matrix.dotVec2(tangent, v12) + totalRadius;\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n matrix.setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y);\n const np1 = clipSegmentToLine(clipPoints1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1);\n\n if (np1 < 2) {\n return;\n }\n\n // Clip to negative box side 1\n matrix.setVec2(clipSegmentToLineNormal, tangent.x, tangent.y);\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, clipSegmentToLineNormal, sideOffset2, iv2);\n\n if (np2 < 2) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n matrix.copyVec2(manifold.localNormal, localNormal);\n matrix.copyVec2(manifold.localPoint, planePoint);\n\n let pointCount = 0;\n for (let i = 0; i < clipPoints2.length/* maxManifoldPoints */; ++i) {\n const separation = matrix.dotVec2(normal, clipPoints2[i].v) - frontOffset;\n\n if (separation <= totalRadius) {\n const cp = manifold.points[pointCount];\n matrix.detransformVec2(cp.localPoint, xf2, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n if (flip) {\n // Swap features\n cp.id.swapFeatures();\n }\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact);\n\n/** @internal */ function PolygonCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollidePolygonCircle(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const cLocal = matrix.vec2(0, 0);\n/** @internal */ const faceCenter = matrix.vec2(0, 0);\n\nexport const CollidePolygonCircle = function (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle position in the frame of the polygon.\n matrix.retransformVec2(cLocal, xfB, xfA, circleB.m_p);\n\n // Find the min separating edge.\n let normalIndex = 0;\n let separation = -Infinity;\n const radius = polygonA.m_radius + circleB.m_radius;\n const vertexCount = polygonA.m_count;\n const vertices = polygonA.m_vertices;\n const normals = polygonA.m_normals;\n\n for (let i = 0; i < vertexCount; ++i) {\n const s = matrix.dotVec2(normals[i], cLocal) - matrix.dotVec2(normals[i], vertices[i]);\n\n if (s > radius) {\n // Early out.\n return;\n }\n\n if (s > separation) {\n separation = s;\n normalIndex = i;\n }\n }\n\n // Vertices that subtend the incident face.\n const vertIndex1 = normalIndex;\n const vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0;\n const v1 = vertices[vertIndex1];\n const v2 = vertices[vertIndex2];\n\n // If the center is inside the polygon ...\n if (separation < EPSILON) {\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[normalIndex]);\n matrix.combine2Vec2(manifold.localPoint, 0.5, v1, 0.5, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Compute barycentric coordinates\n // u1 = (cLocal - v1) dot (v2 - v1))\n const u1 = matrix.dotVec2(cLocal, v2) - matrix.dotVec2(cLocal, v1) - matrix.dotVec2(v1, v2) + matrix.dotVec2(v1, v1);\n // u2 = (cLocal - v2) dot (v1 - v2)\n const u2 = matrix.dotVec2(cLocal, v1) - matrix.dotVec2(cLocal, v2) - matrix.dotVec2(v2, v1) + matrix.dotVec2(v2, v2);\n if (u1 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v1) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v1);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v1);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else if (u2 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v2) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v2);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else {\n matrix.combine2Vec2(faceCenter, 0.5, v1, 0.5, v2);\n const separation = matrix.dotVec2(cLocal, normals[vertIndex1]) - matrix.dotVec2(faceCenter, normals[vertIndex1]);\n if (separation > radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[vertIndex1]);\n matrix.copyVec2(manifold.localPoint, faceCenter);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n }\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_min = Math.min;\n\nContact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact);\nContact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact);\n\n/** @internal */ function EdgePolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n CollideEdgePolygon(manifold, fA.getShape() as EdgeShape, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n// reused\n/** @internal */ const edge_reuse = new EdgeShape();\n\n/** @internal */ function ChainPolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n const chain = fA.getShape() as ChainShape;\n chain.getChildEdge(edge_reuse, indexA);\n\n CollideEdgePolygon(manifold, edge_reuse, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ enum EPAxisType {\n e_unknown = -1,\n e_edgeA = 1,\n e_edgeB = 2,\n}\n\n// unused?\n/** @internal */ enum VertexType {\n e_isolated = 0,\n e_concave = 1,\n e_convex = 2,\n}\n\n/**\n * This structure is used to keep track of the best separating axis.\n */\n/** @internal */ class EPAxis {\n type: EPAxisType;\n index: number;\n separation: number;\n}\n\n/**\n * This holds polygon B expressed in frame A.\n */\n/** @internal */ class TempPolygon {\n vertices: Vec2Value[] = []; // [Settings.maxPolygonVertices]\n normals: Vec2Value[] = []; // [Settings.maxPolygonVertices];\n count: number = 0;\n constructor() {\n for (let i = 0; i < Settings.maxPolygonVertices; i++) {\n this.vertices.push(matrix.vec2(0, 0));\n this.normals.push(matrix.vec2(0, 0));\n }\n }\n}\n\n/**\n * Reference face used for clipping\n */\n/** @internal */ class ReferenceFace {\n i1: number;\n i2: number;\n readonly v1 = matrix.vec2(0 ,0);\n readonly v2 = matrix.vec2(0 ,0);\n readonly normal = matrix.vec2(0 ,0);\n readonly sideNormal1 = matrix.vec2(0 ,0);\n sideOffset1: number;\n readonly sideNormal2 = matrix.vec2(0 ,0);\n sideOffset2: number;\n recycle() {\n matrix.zeroVec2(this.v1);\n matrix.zeroVec2(this.v2);\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.sideNormal1);\n matrix.zeroVec2(this.sideNormal2);\n }\n}\n\n// reused\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const ie = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const edgeAxis = new EPAxis();\n/** @internal */ const polygonAxis = new EPAxis();\n/** @internal */ const polygonBA = new TempPolygon();\n/** @internal */ const rf = new ReferenceFace();\n/** @internal */ const centroidB = matrix.vec2(0, 0);\n/** @internal */ const edge0 = matrix.vec2(0, 0);\n/** @internal */ const edge1 = matrix.vec2(0, 0);\n/** @internal */ const edge2 = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal0 = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n/** @internal */ const normal2 = matrix.vec2(0, 0);\n/** @internal */ const lowerLimit = matrix.vec2(0, 0);\n/** @internal */ const upperLimit = matrix.vec2(0, 0);\n/** @internal */ const perp = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n/**\n * This function collides and edge and a polygon, taking into account edge\n * adjacency.\n */\nexport const CollideEdgePolygon = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue): void {\n // Algorithm:\n // 1. Classify v1 and v2\n // 2. Classify polygon centroid as front or back\n // 3. Flip normal if necessary\n // 4. Initialize normal range to [-pi, pi] about face normal\n // 5. Adjust normal range according to adjacent edges\n // 6. Visit each separating axes, only accept axes within the range\n // 7. Return if _any_ axis indicates separation\n // 8. Clip\n\n // let m_type1: VertexType;\n // let m_type2: VertexType;\n\n matrix.detransformTransform(xf, xfA, xfB);\n matrix.transformVec2(centroidB, xf, polygonB.m_centroid);\n\n const v0 = edgeA.m_vertex0;\n const v1 = edgeA.m_vertex1;\n const v2 = edgeA.m_vertex2;\n const v3 = edgeA.m_vertex3;\n\n const hasVertex0 = edgeA.m_hasVertex0;\n const hasVertex3 = edgeA.m_hasVertex3;\n\n matrix.subVec2(edge1, v2, v1);\n matrix.normalizeVec2(edge1);\n matrix.setVec2(normal1, edge1.y, -edge1.x);\n const offset1 = matrix.dotVec2(normal1, centroidB) - matrix.dotVec2(normal1, v1);\n let offset0 = 0.0;\n let offset2 = 0.0;\n let convex1 = false;\n let convex2 = false;\n\n matrix.zeroVec2(normal0);\n matrix.zeroVec2(normal2);\n\n // Is there a preceding edge?\n if (hasVertex0) {\n matrix.subVec2(edge0, v1, v0);\n matrix.normalizeVec2(edge0);\n matrix.setVec2(normal0, edge0.y, -edge0.x);\n convex1 = matrix.crossVec2Vec2(edge0, edge1) >= 0.0;\n offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0);\n }\n\n // Is there a following edge?\n if (hasVertex3) {\n matrix.subVec2(edge2, v3, v2);\n matrix.normalizeVec2(edge2);\n matrix.setVec2(normal2, edge2.y, -edge2.x);\n convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0.0;\n offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v2);\n }\n\n let front: boolean;\n matrix.zeroVec2(normal);\n matrix.zeroVec2(lowerLimit);\n matrix.zeroVec2(upperLimit);\n\n // Determine front or back collision. Determine collision normal limits.\n if (hasVertex0 && hasVertex3) {\n if (convex1 && convex2) {\n front = offset0 >= 0.0 || offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex1) {\n front = offset0 >= 0.0 || (offset1 >= 0.0 && offset2 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex2) {\n front = offset2 >= 0.0 || (offset0 >= 0.0 && offset1 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex0) {\n if (convex1) {\n front = offset0 >= 0.0 || offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex3) {\n if (convex2) {\n front = offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n } else {\n front = offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n } else {\n front = offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n\n // Get polygonB in frameA\n polygonBA.count = polygonB.m_count;\n for (let i = 0; i < polygonB.m_count; ++i) {\n matrix.transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]);\n matrix.rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]);\n }\n\n const radius = polygonB.m_radius + edgeA.m_radius;\n\n manifold.pointCount = 0;\n\n { // ComputeEdgeSeparation\n edgeAxis.type = EPAxisType.e_edgeA;\n edgeAxis.index = front ? 0 : 1;\n edgeAxis.separation = Infinity;\n\n for (let i = 0; i < polygonBA.count; ++i) {\n const v = polygonBA.vertices[i];\n const s = matrix.dotVec2(normal, v) - matrix.dotVec2(normal, v1);\n if (s < edgeAxis.separation) {\n edgeAxis.separation = s;\n }\n }\n }\n\n // If no valid normal can be found than this edge should not collide.\n // @ts-ignore todo: why we need this if here?\n if (edgeAxis.type == EPAxisType.e_unknown) {\n return;\n }\n\n if (edgeAxis.separation > radius) {\n return;\n }\n\n { // ComputePolygonSeparation\n polygonAxis.type = EPAxisType.e_unknown;\n polygonAxis.index = -1;\n polygonAxis.separation = -Infinity;\n\n matrix.setVec2(perp, -normal.y, normal.x);\n\n for (let i = 0; i < polygonBA.count; ++i) {\n matrix.scaleVec2(n, -1, polygonBA.normals[i]);\n\n const s1 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v1);\n const s2 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v2);\n const s = math_min(s1, s2);\n\n if (s > radius) {\n // No collision\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n break;\n }\n\n // Adjacency\n if (matrix.dotVec2(n, perp) >= 0.0) {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(upperLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n } else {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(lowerLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n }\n\n if (s > polygonAxis.separation) {\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n }\n }\n }\n\n if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) {\n return;\n }\n\n // Use hysteresis for jitter reduction.\n const k_relativeTol = 0.98;\n const k_absoluteTol = 0.001;\n\n let primaryAxis: EPAxis;\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\n ie[0].recycle(), ie[1].recycle();\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n manifold.type = ManifoldType.e_faceA;\n\n // Search for the polygon normal that is most anti-parallel to the edge\n // normal.\n let bestIndex = 0;\n let bestValue = matrix.dotVec2(normal, polygonBA.normals[0]);\n for (let i = 1; i < polygonBA.count; ++i) {\n const value = matrix.dotVec2(normal, polygonBA.normals[i]);\n if (value < bestValue) {\n bestValue = value;\n bestIndex = i;\n }\n }\n\n const i1 = bestIndex;\n const i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0;\n\n matrix.copyVec2(ie[0].v, polygonBA.vertices[i1]);\n ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.copyVec2(ie[1].v, polygonBA.vertices[i2]);\n ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n\n if (front) {\n rf.i1 = 0;\n rf.i2 = 1;\n matrix.copyVec2(rf.v1, v1);\n matrix.copyVec2(rf.v2, v2);\n matrix.copyVec2(rf.normal, normal1);\n } else {\n rf.i1 = 1;\n rf.i2 = 0;\n matrix.copyVec2(rf.v1, v2);\n matrix.copyVec2(rf.v2, v1);\n matrix.scaleVec2(rf.normal, -1, normal1);\n }\n } else {\n manifold.type = ManifoldType.e_faceB;\n\n matrix.copyVec2(ie[0].v, v1);\n ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n matrix.copyVec2(ie[1].v, v2);\n ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n rf.i1 = primaryAxis.index;\n rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0;\n matrix.copyVec2(rf.v1, polygonBA.vertices[rf.i1]);\n matrix.copyVec2(rf.v2, polygonBA.vertices[rf.i2]);\n matrix.copyVec2(rf.normal, polygonBA.normals[rf.i1]);\n }\n\n matrix.setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x);\n matrix.setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y);\n rf.sideOffset1 = matrix.dotVec2(rf.sideNormal1, rf.v1);\n rf.sideOffset2 = matrix.dotVec2(rf.sideNormal2, rf.v2);\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n const np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1);\n\n if (np1 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Clip to negative box side 1\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2);\n\n if (np2 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.copyVec2(manifold.localNormal, rf.normal);\n matrix.copyVec2(manifold.localPoint, rf.v1);\n } else {\n matrix.copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]);\n matrix.copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]);\n }\n\n let pointCount = 0;\n for (let i = 0; i < Settings.maxManifoldPoints; ++i) {\n const separation = matrix.dotVec2(rf.normal, clipPoints2[i].v) - matrix.dotVec2(rf.normal, rf.v1);\n\n if (separation <= radius) {\n const cp = manifold.points[pointCount]; // ManifoldPoint\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.detransformVec2(cp.localPoint, xf, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n } else {\n matrix.copyVec2(cp.localPoint, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n cp.id.swapFeatures();\n }\n\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","import { CollidePolygons } from \"./collision/shape/CollidePolygon\";\nimport { Settings } from \"./Settings\";\nimport { Sweep } from \"./common/Sweep\";\nimport { DynamicTree } from \"./collision/DynamicTree\";\nimport { Manifold } from \"./collision/Manifold\";\nimport { Distance } from \"./collision/Distance\";\nimport { TimeOfImpact } from \"./collision/TimeOfImpact\";\nimport { stats } from \"./util/stats\";\n\n/** @hidden @deprecated Merged with main namespace */\nexport const internal = {\n CollidePolygons,\n Settings,\n Sweep,\n Manifold,\n Distance,\n TimeOfImpact,\n DynamicTree,\n stats\n};\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","options","input","defaults","output","key","getOwnPropertySymbols","symbols","symbol","propertyIsEnumerable","math_random","Math","random","EPSILON","isFinite","Number","mod","num","min","max","clamp","math","nextPowerOfTwo","x","isPowerOfTwo","math_abs","abs","math_sqrt","sqrt","math_max","math_min","Vec2","y","_serialize","_deserialize","data","obj","zero","neo","clone","v","toString","JSON","stringify","isValid","assert","o","setZero","set","setNum","setVec2","value","wSet","a","w","setCombine","setMul","add","wAdd","addCombine","addMul","wSub","subCombine","subMul","sub","mul","m","lengthOf","lengthSquared","normalize","invLength","distance","dx","dy","distanceSquared","areEqual","skew","dot","cross","crossVec2Vec2","crossVec2Num","crossNumVec2","addCross","addCrossVec2Num","addCrossNumVec2","combine","mulNumVec2","mulVec2Num","neg","mid","upper","lower","lengthSqr","scale","r","scaleFn","translateFn","AABB","lowerBound","upperBound","getCenter","getExtents","getPerimeter","lowerA","upperA","lowerB","upperB","lowerX","lowerY","upperX","upperY","combinePoints","aabb","contains","result","extend","out","testOverlap","d1x","d2x","d1y","d2y","diff","wD","hD","rayCast","tmin","Infinity","tmax","p1","p2","absD","normal","f","inv_d","t1","t2","temp","maxFraction","fraction","combinedPerimeter","lx","ly","math_PI","PI","Settings","defineProperty","linearSlop","lengthUnitsPerMeter","maxManifoldPoints","maxPolygonVertices","aabbExtension","aabbMultiplier","angularSlop","maxSubSteps","maxTOIContacts","maxTOIIterations","maxDistanceIterations","velocityThreshold","maxLinearCorrection","maxAngularCorrection","maxTranslation","maxRotation","baumgarte","toiBaugarte","timeToSleep","linearSleepTolerance","angularSleepTolerance","SettingsInternal","get","Pool","opts","_list","_max","_hasCreateFn","_createCount","_hasAllocateFn","_allocateCount","_hasReleaseFn","_releaseCount","_hasDisposeFn","_disposeCount","_createFn","_allocateFn","allocate","_releaseFn","release","_disposeFn","dispose","size","item","shift","push","TreeNode","id","userData","parent","child1","child2","height","isLeaf","poolTreeNode","node","undefined","DynamicTree","inputPool","stack","stackPool","iteratorPool","Iterator","iterator","close","m_root","m_nodes","m_lastProxyId","getUserData","getFatAABB","allocateNode","freeNode","createProxy","insertLeaf","destroyProxy","removeLeaf","moveProxy","leaf","leafAABB","index","area","combinedArea","cost","inheritanceCost","cost1","cost2","sibling","oldParent","newParent","balance","grandParent","iA","A","B","C","F","G","D","E","getHeight","getAreaRatio","rootArea","totalArea","it","preorder","next","computeHeight","height1","height2","validateStructure","validateMetrics","validate","getMaxBalance","maxBalance","rebuildBottomUp","nodes","count","minCost","iMin","jMin","aabbi","j","aabbj","parent_1","shiftOrigin","newOrigin","query","queryCallback","pop","rayCastCallback","abs_v","segmentAABB","subInput","c","h","parents","states","root","BroadPhase","_this","m_tree","m_moveBuffer","proxyId","m_queryProxyId","proxyIdA","proxyIdB","userDataA","userDataB","m_callback","aabbA","aabbB","getProxyCount","getTreeHeight","getTreeBalance","getTreeQuality","bufferMove","unbufferMove","displacement","touchProxy","updatePairs","addPairCallback","fatAABB","math_sin","sin","math_cos","cos","vec2","copyVec2","zeroVec2","negVec2","plusVec2","minusVec2","subVec2","mulVec2","scaleVec2","plusScaleVec2","minusScaleVec2","combine2Vec2","am","bm","combine3Vec2","cm","normalizeVec2","dotVec2","lengthSqrVec2","distVec2","distSqrVec2","rotVec2","q","derotVec2","transform","angle","copyTransform","transformVec2","xf","detransformVec2","px","py","retransformVec2","from","to","x0","y0","detransformTransform","math_atan2","atan2","Rot","setAngle","setRot","setIdentity","rot","identity","getAngle","getXAxis","getYAxis","qr","mulRot","mulSub","mulT","mulTRot","mulTVec2","matrix.vec2","Sweep","localCenter","alpha0","c0","a0","recycle","matrix.zeroVec2","setTransform","matrix.transformVec2","matrix.copyVec2","setLocalCenter","getTransform","beta","matrix.setRotAngle","matrix.combine2Vec2","matrix.minusVec2","matrix.rotVec2","advance","alpha","forward","that","Transform","position","rotation","isArray","arr","mulXf","mulAll","mulFn","mulTXf","Velocity","Position","Shape","style","appData","m_type","m_radius","synchronize_aabb1","synchronize_aabb2","FixtureDefDefault","friction","restitution","density","isSensor","filterGroupIndex","filterCategoryBits","filterMaskBits","FixtureProxy","fixture","childIndex","Fixture","body","shape","def","m_body","m_friction","m_restitution","m_density","m_isSensor","m_filterGroupIndex","m_filterCategoryBits","m_filterMaskBits","m_shape","m_next","m_proxies","m_proxyCount","childCount","getChildCount","m_userData","_reset","getBody","broadPhase","m_world","m_broadPhase","destroyProxies","createProxies","m_xf","resetMassData","restore","getType","getShape","setSensor","sensor","setAwake","setUserData","getNext","getDensity","setDensity","getFriction","setFriction","getRestitution","setRestitution","testPoint","getMassData","massData","computeMass","getAABB","proxy","computeAABB","synchronize","xf1","xf2","matrix.subVec2","setFilterData","filter","groupIndex","categoryBits","maskBits","refilter","getFilterGroupIndex","setFilterGroupIndex","getFilterCategoryBits","setFilterCategoryBits","getFilterMaskBits","setFilterMaskBits","edge","getContactList","contact","fixtureA","getFixtureA","fixtureB","getFixtureB","flagForFiltering","world","getWorld","shouldCollide","collideA","collideB","STATIC","KINEMATIC","DYNAMIC","oldCenter","matrix.transform","BodyDefDefault","type","linearVelocity","angularVelocity","linearDamping","angularDamping","fixedRotation","bullet","gravityScale","allowSleep","awake","active","Body","m_awakeFlag","m_autoSleepFlag","m_bulletFlag","m_fixedRotationFlag","m_activeFlag","m_islandFlag","m_toiFlag","m_mass","m_invMass","m_I","m_invI","m_sweep","c_velocity","c_position","m_force","m_torque","m_linearVelocity","m_angularVelocity","m_linearDamping","m_angularDamping","m_gravityScale","m_sleepTime","m_jointList","m_contactList","m_fixtureList","m_prev","m_destroyed","fixtures","_addFixture","isWorldLocked","isLocked","getFixtureList","getJointList","isStatic","isDynamic","isKinematic","setStatic","setType","setDynamic","setKinematic","synchronizeFixtures","ce","ce0","destroyContact","isBullet","setBullet","flag","isSleepingAllowed","setSleepingAllowed","isAwake","isActive","setActive","m_newFixture","isFixedRotation","setFixedRotation","synchronizeTransform","getPosition","setPosition","getWorldCenter","getLocalCenter","getLinearVelocity","getLinearVelocityFromWorldPoint","worldPoint","getLinearVelocityFromLocalPoint","localPoint","getWorldPoint","setLinearVelocity","getAngularVelocity","setAngularVelocity","getLinearDamping","setLinearDamping","getAngularDamping","setAngularDamping","getGravityScale","setGravityScale","getMass","getInertia","mass","I","center","matrix.plusScaleVec2","matrix.scaleVec2","matrix.dotVec2","matrix.crossNumVec2","matrix.plusVec2","setMassData","applyForce","force","point","wake","applyForceToCenter","applyTorque","torque","applyLinearImpulse","impulse","applyAngularImpulse","jn","other","joint","m_collideConnected","createFixture","fixdef","destroyFixture","publish","getWorldVector","localVector","getLocalPoint","getLocalVector","worldVector","JointEdge","prev","Joint","bodyA","bodyB","m_edgeA","m_edgeB","m_bodyA","m_bodyB","collideConnected","getBodyA","getBodyB","getCollideConnected","_resetAnchors","stats","gjkCalls","gjkIters","gjkMaxIters","toiTime","toiMaxTime","toiCalls","toiIters","toiMaxIters","toiRootIters","toiMaxRootIters","newline","string","name_1","Timer","Date","now","time","e12","e13","e23","temp1","temp2","DistanceInput","proxyA","DistanceProxy","proxyB","transformA","transformB","useRadii","DistanceOutput","pointA","pointB","iterations","SimplexCache","metric","indexA","indexB","Distance","cache","xfA","xfB","simplex","readCache","vertices","m_v","k_maxIters","saveA","saveB","saveCount","iter","m_count","solve","getSearchDirection","matrix.lengthSqrVec2","vertex","getSupport","matrix.derotVec2","wA","getVertex","wB","duplicate","getWitnessPoints","matrix.distVec2","writeCache","rA","rB","matrix.normalizeVec2","matrix.minusScaleVec2","m_vertices","getVertexCount","bestIndex","bestValue","getSupportVertex","computeDistanceProxy","setVertices","radius","SimplexVertex","searchDirection_reuse","closestPoint_reuse","Simplex","m_v1","m_v2","m_v3","wALocal","wBLocal","metric1","metric2","getMetric","v1","v2","matrix.setVec2","matrix.crossVec2Vec2","getClosestPoint","pA","pB","v3","matrix.combine3Vec2","solve2","solve3","w1","w2","d12_2","d12_1","inv_d12","w3","w1e12","w1e13","d13_1","d13_2","w2e23","d23_1","d23_2","n123","d123_1","d123_2","d123_3","inv_d13","inv_d23","inv_d123","shapeA","shapeB","matrix.copyTransform","Input","Output","Proxy","Cache","TOIOutputState","ShapeCastInput","translationB","ShapeCastOutput","lambda","ShapeCast","radiusA","polygonRadius","sigma","tolerance","vp","vr","TOIInput","sweepA","sweepB","tMax","exports","TOIOutput","state","e_unset","SeparationFunctionType","distanceInput","distanceOutput","axisA","axisB","localPointA","localPointB","TimeOfImpact","timer","e_unknown","totalRadius","target","k_maxIterations","e_overlapped","e_touching","separationFunction","initialize","done","pushBackIter","s2","findMinSeparation","e_separated","s1","evaluate","e_failed","rootIterCount","a1","a2","SeparationFunction","m_proxyA","m_proxyB","m_sweepA","m_sweepB","m_localPoint","m_axis","e_points","localPointA_1","localPointB_1","matrix.normalizeVec2Length","e_faceB","localPointB1","localPointB2","matrix.crossVec2Num","localPointA_2","matrix.negVec2","e_faceA","localPointA1","localPointA2","localPointB_2","compute","find","TimeStep","dt","inv_dt","velocityIterations","positionIterations","warmStarting","blockSolve","inv_dt0","dtRatio","reset","s_subStep","translation","backup","backup1","backup2","ContactImpulse","normals","tangents","v_points","normalImpulse","tangentImpulse","Solver","m_stack","m_bodies","m_contacts","m_joints","clear","addBody","addContact","addJoint","solveWorld","step","m_bodyList","c_1","seed","isEnabled","isTouching","sensorA","m_fixtureA","sensorB","m_fixtureB","je","solveIsland","gravity","m_gravity","m_allowSleep","initConstraint","initVelocityConstraint","warmStartConstraint","initVelocityConstraints","solveVelocityConstraints","solveVelocityConstraint","storeConstraintImpulses","translationLengthSqr","maxTranslationSquared","ratio","matrix.mulVec2","maxRotationSquared","positionSolved","minSeparation","separation","solvePositionConstraint","contactsOkay","jointsOkay","jointOkay","solvePositionConstraints","postSolveIsland","minSleepTime","linTolSqr","linearSleepToleranceSqr","angTolSqr","angularSleepToleranceSqr","solveWorldTOI","m_stepComplete","c_2","m_toiCount","m_toi","minContact","minAlpha","c_3","fA_1","fB_1","bA_1","bB_1","activeA","activeB","getChildIndexA","getChildIndexB","fA","fB","bA","bB","update","bodies","solveIslandTOI","findNewContacts","m_subStepping","setEnabled","subStep","toiA","toiB","solvePositionConstraintTOI","c_5","postSolve","m_impulse","ManifoldType","ContactFeatureType","PointState","Mat22","ex","ey","getInverse","det","imx","mx","mulMat22","mulTMat22","mx1","mx2","cA","cB","dist","planePoint","clipPoint","ClipVertex","ContactID","Manifold","localNormal","points","ManifoldPoint","pointCount","getWorldManifold","wm","radiusB","WorldManifold","separations","e_circles","manifoldPoint","clipSegmentToLine","getPointStates","typeA","typeB","setFeatures","swapFeatures","state1","state2","manifold1","manifold2","removeState","persistState","addState","vOut","vIn","offset","vertexIndexA","numOut","distance0","distance1","interp","e_vertex","e_face","contactPool","Contact","oldManifold","worldManifold","ContactEdge","mixFriction","friction1","friction2","mixRestitution","restitution1","restitution2","s_registers","VelocityConstraintPoint","normalMass","tangentMass","velocityBias","vA","vB","tangent","P","dv","dv1","dv2","P1","P2","m_indexA","m_indexB","m_evaluateFcn","m_manifold","m_tangentSpeed","m_enabledFlag","m_touchingFlag","m_filterFlag","m_bulletHitFlag","v_normal","v_normalMass","v_K","v_pointCount","v_tangentSpeed","v_friction","v_restitution","v_invMassA","v_invMassB","v_invIA","v_invIB","p_localPoints","p_localNormal","p_localPoint","p_localCenterA","p_localCenterB","p_type","p_radiusA","p_radiusB","p_pointCount","p_invMassA","p_invMassB","p_invIA","p_invIB","evaluateFcn","m_nodeA","m_nodeB","_i","_a","_b","_c","manifold","cp","vcp","getManifold","resetFriction","resetRestitution","setTangentSpeed","speed","getTangentSpeed","listener","touching","wasTouching","nmp","omp","hasListener","beginContact","endContact","preSolve","_solvePositionConstraint","toi","positionA","positionB","localCenterA","localCenterB","mA","mB","iB","aA","aB","rnA","rnB","K","velocityA","velocityB","wmp","kNormal","rtA","rtB","kTangent","vRel","vcp1","vcp2","rn1A","rn1B","rn2A","rn2B","k11","k22","k12","a_1","b_1","d_1","vt","maxFriction","newImpulse","vn","vn1","vn2","addType","type1","type2","callback","destroy","DEFAULTS","continuousPhysics","subStepping","World","s_step","m_solver","m_contactCount","m_bodyCount","m_jointCount","m_clearForces","m_locked","m_warmStarting","m_continuousPhysics","m_blockSolve","m_velocityIterations","m_positionIterations","m_t","joints","getBodyList","context","_addBody","createJoint","getBodyCount","getJointCount","getContactCount","setGravity","getGravity","setAllowSleeping","getAllowSleeping","setWarmStarting","getWarmStarting","setContinuousPhysics","getContinuousPhysics","setSubStepping","getSubStepping","setAutoClearForces","getAutoClearForces","clearForces","queryAABB","point1","point2","createBody","arg1","arg2","createDynamicBody","createKinematicBody","destroyBody","je0","destroyJoint","f0","timeStep","updateContacts","createContact","next_c","on","name","_listeners","off","listeners","indexOf","splice","arg3","l","Vec3","z","EdgeShape","_super","TYPE","m_vertex1","m_vertex2","m_vertex0","m_vertex3","m_hasVertex0","m_hasVertex3","vertex1","vertex2","vertex0","vertex3","hasVertex0","hasVertex3","setPrevVertex","setNextVertex","getRadius","setNext","getNextVertex","setPrev","getPrevVertex","_set","_clone","e","numerator","denominator","rr","Edge","ChainShape","loop","m_prevVertex","m_nextVertex","m_hasPrevVertex","m_hasNextVertex","m_isLoop","_createLoop","_createChain","isLoop","hasPrevVertex","hasNextVertex","prevVertex","nextVertex","getChildEdge","Chain","e1","e2","PolygonShape","m_centroid","m_normals","_setAsBox","ps","unique","linearSlopSquared","i0","hull","ih","ie","i1","i2","vs","pRef","inv3","p3","e1_1","e2_1","triangleArea","computeCentroid","hx","hy","pLocal","matrix.detransformVec2","minX","minY","maxX","maxY","k_inv3","ex1","ey1","ex2","ey2","matrix.addVec2","LimitState","Polygon","CircleShape","m_p","matrix.distSqrVec2","Circle","frequencyHz","dampingRatio","DistanceJoint","anchorA","anchorB","m_localAnchorA","localAnchorA","m_localAnchorB","localAnchorB","m_length","m_frequencyHz","m_dampingRatio","m_gamma","m_bias","gamma","bias","getLocalAnchorA","getLocalAnchorB","setLength","getLength","setFrequency","hz","getFrequency","setDampingRatio","getDampingRatio","getAnchorA","getAnchorB","getReactionForce","m_u","getReactionTorque","m_localCenterA","m_localCenterB","m_invMassA","m_invMassB","m_invIA","m_invIB","qA","qB","m_rA","m_rB","crAu","crBu","invMass","omega","k","vpA","vpB","Cdot","u","maxForce","maxTorque","FrictionJoint","anchor","m_linearImpulse","m_angularImpulse","m_maxForce","m_maxTorque","setMaxForce","getMaxForce","setMaxTorque","getMaxTorque","m_linearMass","m_angularMass","oldImpulse","maxImpulse","Mat33","ez","solve33","cross_x","cross_y","cross_z","solve22","a11","a12","a21","a22","getInverse22","M","getSymInverse33","a13","a23","a33","mulVec3","RevoluteJoint","m_limitState","inactiveLimit","referenceAngle","m_referenceAngle","m_motorImpulse","m_lowerAngle","lowerAngle","m_upperAngle","upperAngle","m_maxMotorTorque","maxMotorTorque","m_motorSpeed","_d","motorSpeed","m_enableLimit","_e","enableLimit","m_enableMotor","_f","enableMotor","getReferenceAngle","getJointAngle","getJointSpeed","isMotorEnabled","getMotorTorque","setMotorSpeed","getMotorSpeed","setMaxMotorTorque","getMaxMotorTorque","isLimitEnabled","getLowerLimit","getUpperLimit","setLimits","m_motorMass","jointAngle","equalLimits","atLowerLimit","atUpperLimit","Cdot1","Cdot2","rhs","reduced","positionError","angularError","limitImpulse","lowerTranslation","upperTranslation","maxMotorForce","PrismaticJoint","axis","m_localXAxisA","localAxisA","m_localYAxisA","m_lowerTranslation","m_upperTranslation","m_maxMotorForce","m_perp","m_K","getLocalAxisA","getJointTranslation","setMaxMotorForce","getMaxMotorForce","getMotorForce","m_a1","m_a2","m_s1","m_s2","k13","k23","k33","jointTranslation","LA","LB","f1","df","f2r","perp","C1","linearError","C2","impulse1","GearJoint","joint1","joint2","coordinateA","coordinateB","m_joint1","m_joint2","m_ratio","m_type1","m_type2","m_bodyC","xfC","aC","revolute","m_localAnchorC","m_referenceAngleA","m_localAxisC","prismatic","pC","m_bodyD","xfD","aD","m_localAnchorD","m_referenceAngleB","m_localAxisD","pD","m_constant","getJoint1","getJoint2","setRatio","getRatio","m_JvAC","m_JwA","m_lcA","m_lcB","m_lcC","m_lcD","m_mA","m_mB","m_mC","m_mD","m_iA","m_iB","m_iC","m_iD","vC","wC","vD","qC","qD","m_JwC","rC","m_JvBD","m_JwB","m_JwD","rD","JvAC","JvBD","JwA","JwB","JwC","JwD","cC","cD","correctionFactor","MotorJoint","m_linearOffset","linearOffset","m_angularOffset","angularOffset","m_correctionFactor","setCorrectionFactor","factor","getCorrectionFactor","setLinearOffset","getLinearOffset","setAngularOffset","getAngularOffset","m_linearError","m_angularError","inv_h","MouseJoint","m_targetA","m_beta","m_C","_localAnchorB","setTarget","getTarget","velocity","PulleyJoint","groundA","groundB","m_groundAnchorA","groundAnchorA","m_groundAnchorB","groundAnchorB","m_lengthA","lengthA","m_lengthB","lengthB","getGroundAnchorA","getGroundAnchorB","getLengthA","getLengthB","getCurrentLengthA","getCurrentLengthB","m_uB","m_uA","ruA","ruB","PA","PB","uA","uB","maxLength","RopeJoint","m_maxLength","m_state","setMaxLength","getMaxLength","getLimitState","crA","crB","WeldJoint","invM","impulse2","WheelJoint","m_ax","m_ay","localAxis","m_springMass","m_springImpulse","setSpringFrequencyHz","getSpringFrequencyHz","setSpringDampingRatio","getSpringDampingRatio","m_sAy","m_sBy","m_sAx","m_sBx","damp","ay","sAy","sBy","SID","SERIALIZE_REF_TYPES","DESERIALIZE_BY_REF_TYPE","DESERIALIZE_BY_TYPE_FIELD","DEFAULT_OPTIONS","rootClass","preSerialize","postSerialize","preDeserialize","postDeserialize","Serializer","toJson","json","refQueue","refMemoById","addToRefQueue","typeName","__sid","ref","refIndex","refType","traverse","noRefType","serializeWithHooks","newValue","str","fromJson","deserializedRefMemoByIndex","deserializeWithHooks","classHint","classDeserializeFn","deserializeChild","dataOrRef","worldSerializer","Testbed","width","scaleY","background","activeKeys","keydown","keyCode","label","keyup","mount","Error","start","testbed","color","g","BoxShape","halfWidth","halfHeight","Box","CollideCircles","circleA","circleB","distSqr","CollideEdgeCircle","chain","Q","edgeA","matrix.retransformVec2","A1","B1","B2","A2","den","incidentEdge","clipPoints1","clipPoints2","clipSegmentToLineNormal","v11","v12","localTangent","normal1","findMaxSeparation","poly1","poly2","count1","count2","n1s","v1s","v2s","matrix.detransformTransform","maxSeparation","si","sij","CollidePolygons","polyA","polyB","separationA","edgeB","separationB","edge1","flip","clipVertex","normals1","vertices2","normals2","before","after","matrix.rerotVec2","minDot","findIncidentEdge","vertices1","iv1","iv2","frontOffset","sideOffset1","sideOffset2","CollidePolygonCircle","cLocal","faceCenter","polygonA","normalIndex","vertexCount","vertIndex1","vertIndex2","u1","u2","CollideEdgePolygon","edge_reuse","EPAxisType","VertexType","EPAxis","TempPolygon","ReferenceFace","sideNormal1","sideNormal2","edgeAxis","polygonAxis","polygonBA","rf","centroidB","edge0","edge2","normal0","normal2","lowerLimit","upperLimit","polygonB","v0","front","offset1","offset0","offset2","convex1","convex2","e_edgeA","e_edgeB","primaryAxis","internal"],"mappings":"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"} \ No newline at end of file +{"version":3,"names":["global","factory","exports","module","define","amd","globalThis","self","planck","this","exports2","extendStatics","d2","b2","Object","setPrototypeOf","__proto__","Array","d3","b3","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","constructor","create","__assign","assign","__assign2","t","s2","i","n2","arguments","length","apply","options","input2","defaults","output2","key","getOwnPropertySymbols","symbols","symbol","propertyIsEnumerable","math_random","Math","random","EPSILON","isFinite","Number","nextPowerOfTwo","x2","isPowerOfTwo","mod","num","min","max","clamp","math","math_abs$9","abs","math_sqrt$5","sqrt","math_max$8","math_min$8","Vec2","Vec22","y","x","_serialize","_deserialize","data","obj","zero","neo","clone","v3","toString","JSON","stringify","isValid","assert","o","setZero","set","setNum","setVec2","value","wSet","a2","w","setCombine","setMul","add","wAdd","addCombine","addMul","wSub","subCombine","subMul","sub","mul","m","lengthOf","lengthSquared","normalize","invLength","distance","dx","dy","distanceSquared","areEqual","skew","dot","cross","crossVec2Vec2","crossVec2Num","crossNumVec2","addCross","addCrossVec2Num","addCrossNumVec2","combine","mulNumVec2","mulVec2Num","neg","mid","upper","lower","lengthSqr","scale","r","scaleFn","translateFn","math_max$7","math_min$7","AABB","AABB2","lowerBound","upperBound","getCenter","getExtents","getPerimeter","lowerA","upperA","lowerB","upperB","lowerX","lowerY","upperX","upperY","combinePoints","aabb","contains","result","extend","out","testOverlap","d1x","d2x","d1y","d2y","diff","wD","hD","wA","hA","wB","hB","rayCast","tmin","Infinity","tmax","p1","p2","absD","normal3","f","inv_d","t1","t2","temp3","maxFraction","fraction","normal","combinedPerimeter","lx","ly","ux","uy","math_PI$6","PI","Settings","Settings2","defineProperty","get","linearSlop","enumerable","configurable","lengthUnitsPerMeter","maxManifoldPoints","maxPolygonVertices","aabbExtension","aabbMultiplier","angularSlop","maxSubSteps","maxTOIContacts","maxTOIIterations","maxDistanceIterations","velocityThreshold","maxLinearCorrection","maxAngularCorrection","maxTranslation","maxRotation","baumgarte","toiBaugarte","timeToSleep","linearSleepTolerance","angularSleepTolerance","SettingsInternal","SettingsInternal2","Pool","Pool2","opts","_list","_max","_hasCreateFn","_createCount","_hasAllocateFn","_allocateCount","_hasReleaseFn","_releaseCount","_hasDisposeFn","_disposeCount","_createFn","_allocateFn","allocate","_releaseFn","release","_disposeFn","dispose","size","item","shift","push","math_abs$8","math_max$6","TreeNode","TreeNode2","id","userData","parent","child1","child2","height","isLeaf","poolTreeNode","node","DynamicTree","DynamicTree2","inputPool","stack","stackPool","iteratorPool","Iterator","iterator","close","m_root","m_nodes","m_lastProxyId","getUserData","getFatAABB","allocateNode","freeNode","createProxy","insertLeaf","destroyProxy","removeLeaf","moveProxy","leaf","leafAABB","index","area","combinedArea","cost","inheritanceCost","newArea1","cost1","oldArea","newArea2","cost2","sibling","oldParent","newParent","balance","grandParent","iA","A","B","C","F","G","D","E","getHeight","getAreaRatio","root","rootArea","totalArea","it","preorder","next","computeHeight","height1","height2","validateStructure","validateMetrics","validate","getMaxBalance","maxBalance","rebuildBottomUp","nodes","count","minCost","iMin","jMin","aabbi","j","aabbj","parent_1","shiftOrigin","newOrigin","query","queryCallback","pop","proceed","rayCastCallback","abs_v","segmentAABB","subInput","c2","h","separation","Iterator2","parents","states","math_max$5","math_min$6","BroadPhase","BroadPhase2","_this","m_tree","m_moveBuffer","proxyId","m_queryProxyId","proxyIdA","proxyIdB","userDataA","userDataB","m_callback","aabbA","aabbB","getProxyCount","getTreeHeight","getTreeBalance","getTreeQuality","bufferMove","unbufferMove","displacement2","changed","touchProxy","updatePairs","addPairCallback","fatAABB","math_sin$2","sin","math_cos$2","cos","math_sqrt$4","vec2","rotation","angle","s","c","copyVec2","zeroVec2","negVec2","plusVec2","addVec2","minusVec2","subVec2","mulVec2","scaleVec2","plusScaleVec2","minusScaleVec2","combine2Vec2","am","bm","combine3Vec2","cm","normalizeVec2Length","normalizeVec2","dotVec2","lengthSqrVec2","distVec2","distSqrVec2","setRotAngle","rotVec2","q","derotVec2","rerotVec2","before","after","x0","y0","transform","copyTransform","transform2","transformVec2","xf2","detransformVec2","px","py","retransformVec2","from","to","detransformTransform","math_sin$1","math_cos$1","math_atan2$1","atan2","Rot","Rot2","setAngle","setRot","setIdentity","rot","identity","getAngle","getXAxis","getYAxis","qr","mulRot","mulSub","mulT","mulTRot","mulTVec2","math_atan2","math_PI$5","temp$7","Sweep","Sweep2","localCenter","a","alpha0","c0","a0","recycle","setTransform","setLocalCenter","localCenter2","getTransform","beta","advance","alpha","forward","that","Transform","Transform2","position","rotation2","isArray","arr","mulXf","mulAll","mulFn","mulTXf","Velocity","Velocity2","v","math_sin","math_cos","Position","Position2","Shape","Shape2","style","appData","m_type","m_radius","synchronize_aabb1","synchronize_aabb2","displacement","FixtureDefDefault","friction","restitution","density","isSensor","filterGroupIndex","filterCategoryBits","filterMaskBits","FixtureProxy","FixtureProxy2","fixture","childIndex","Fixture","Fixture2","body","shape","def","m_body","m_friction","m_restitution","m_density","m_isSensor","m_filterGroupIndex","m_filterCategoryBits","m_filterMaskBits","m_shape","m_next","m_proxies","m_proxyCount","childCount","getChildCount","m_userData","_reset","getBody","broadPhase","m_world","m_broadPhase","destroyProxies","createProxies","m_xf","resetMassData","restore","getType","getShape","setSensor","sensor","setAwake","setUserData","getNext","getDensity","setDensity","getFriction","setFriction","getRestitution","setRestitution","testPoint","getMassData","massData","computeMass","getAABB","proxy","computeAABB","synchronize","xf1","setFilterData","filter","groupIndex","categoryBits","maskBits","refilter","getFilterGroupIndex","setFilterGroupIndex","getFilterCategoryBits","setFilterCategoryBits","getFilterMaskBits","setFilterMaskBits","edge","getContactList","contact","fixtureA","getFixtureA","fixtureB","getFixtureB","flagForFiltering","world","getWorld","shouldCollide","collideA","collideB","collide","STATIC","KINEMATIC","DYNAMIC","oldCenter","temp$6","xf$2","BodyDefDefault","type","linearVelocity","angularVelocity","linearDamping","angularDamping","fixedRotation","bullet","gravityScale","allowSleep","awake","active","Body","Body2","m_awakeFlag","m_autoSleepFlag","m_bulletFlag","m_fixedRotationFlag","m_activeFlag","m_islandFlag","m_toiFlag","m_mass","m_invMass","m_I","m_invI","m_sweep","c_velocity","c_position","m_force","m_torque","m_linearVelocity","m_angularVelocity","m_linearDamping","m_angularDamping","m_gravityScale","m_sleepTime","m_jointList","m_contactList","m_fixtureList","m_prev","m_destroyed","fixtures","_addFixture","isWorldLocked","isLocked","getFixtureList","getJointList","isStatic","isDynamic","isKinematic","setStatic","setType","setDynamic","setKinematic","synchronizeFixtures","ce","ce0","destroyContact","isBullet","setBullet","flag","isSleepingAllowed","setSleepingAllowed","isAwake","isActive","setActive","m_newFixture","isFixedRotation","setFixedRotation","synchronizeTransform","getPosition","setPosition","getWorldCenter","getLocalCenter","getLinearVelocity","getLinearVelocityFromWorldPoint","worldPoint","getLinearVelocityFromLocalPoint","localPoint","getWorldPoint","setLinearVelocity","getAngularVelocity","setAngularVelocity","getLinearDamping","setLinearDamping","getAngularDamping","setAngularDamping","getGravityScale","setGravityScale","getMass","getInertia","mass","I","center","setMassData","applyForce","force","point2","wake","applyForceToCenter","applyTorque","torque","applyLinearImpulse","impulse","applyAngularImpulse","jn","other","joint","m_collideConnected","createFixture","fixdef","destroyFixture","publish","getWorldVector","localVector","getLocalPoint","getLocalVector","worldVector","JointEdge","JointEdge2","prev","Joint","Joint2","bodyA","bodyB","m_edgeA","m_edgeB","m_bodyA","m_bodyB","collideConnected","getBodyA","getBodyB","getCollideConnected","_resetAnchors","stats","gjkCalls","gjkIters","gjkMaxIters","toiTime","toiMaxTime","toiCalls","toiIters","toiMaxIters","toiRootIters","toiMaxRootIters","newline","string","name_1","now","Date","time","Timer","math_max$4","temp$5","normal$4","e12","e13","e23","temp1","temp2","DistanceInput","DistanceInput2","proxyA","DistanceProxy","proxyB","transformA","transformB","useRadii","DistanceOutput","DistanceOutput2","pointA","pointB","iterations","SimplexCache","SimplexCache2","metric","indexA","indexB","Distance","cache2","xfA2","xfB2","simplex","readCache","vertices","m_v","k_maxIters","saveA","saveB","saveCount","iter","m_count","solve","getSearchDirection","vertex","getSupport","getVertex","duplicate","getWitnessPoints","writeCache","rA2","rB2","DistanceProxy2","m_vertices","getVertexCount","bestIndex","bestValue","getSupportVertex","computeDistanceProxy","setVertices","radius","SimplexVertex","SimplexVertex2","searchDirection_reuse","closestPoint_reuse","Simplex","Simplex2","m_v1","m_v2","m_v3","wALocal","wBLocal","metric1","metric2","getMetric","v13","v22","sgn","getClosestPoint","pA2","pB2","solve2","solve3","w1","w2","d12_2","d12_1","inv_d12","w3","w1e12","w2e12","w1e13","w3e13","d13_1","d13_2","w2e23","w3e23","d23_1","d23_2","n123","d123_1","d123_2","d123_3","inv_d13","inv_d23","inv_d123","input$1","cache$1","output$1","shapeA","shapeB","Input","Output","Proxy","Cache","ShapeCastInput","ShapeCastInput2","translationB","ShapeCastOutput","ShapeCastOutput2","point","lambda","ShapeCast","radiusA","polygonRadius","radiusB","simplex2","sigma","tolerance","vp","vr","pointA2","pointB2","math_abs$7","math_max$3","TOIInput","TOIInput2","sweepA","sweepB","tMax","TOIOutputState","TOIOutputState2","TOIOutput","TOIOutput2","state","e_unset","distanceInput","distanceOutput","cache","xfA$1","xfB$1","temp$4","pointA$2","pointB$2","normal$3","axisA","axisB","localPointA","localPointB","TimeOfImpact","timer","e_unknown","totalRadius","target","k_maxIterations","e_overlapped","e_touching","separationFunction","initialize","done","pushBackIter","findMinSeparation","e_separated","s1","evaluate","e_failed","rootIterCount","a1","s3","SeparationFunctionType","SeparationFunctionType2","SeparationFunction","SeparationFunction2","m_proxyA","m_proxyB","m_sweepA","m_sweepB","m_localPoint","m_axis","e_points","localPointA_1","localPointB_1","e_faceB","localPointB1","localPointB2","localPointA_2","pointA_1","e_faceA","localPointA1","localPointA2","localPointB_2","compute","find","sep","math_abs$6","math_sqrt$3","math_min$5","TimeStep","TimeStep2","dt","inv_dt","velocityIterations","positionIterations","warmStarting","blockSolve","inv_dt0","dtRatio","reset","s_subStep","translation","input","output","backup","backup1","backup2","ContactImpulse","ContactImpulse2","normals","tangents","v_points","normalImpulse","tangentImpulse","Solver","Solver2","m_stack","m_bodies","m_contacts","m_joints","clear","addBody","addContact","addJoint","solveWorld","step","m_bodyList","c_1","seed","isEnabled","isTouching","sensorA","m_fixtureA","sensorB","m_fixtureB","je","solveIsland","gravity","m_gravity","m_allowSleep","initConstraint","initVelocityConstraint","warmStartConstraint","initVelocityConstraints","solveVelocityConstraints","solveVelocityConstraint","storeConstraintImpulses","translationLengthSqr","maxTranslationSquared","ratio","maxRotationSquared","positionSolved","minSeparation","solvePositionConstraint","contactsOkay","jointsOkay","jointOkay","solvePositionConstraints","postSolveIsland","minSleepTime","linTolSqr","linearSleepToleranceSqr","angTolSqr","angularSleepToleranceSqr","solveWorldTOI","m_stepComplete","c_2","m_toiCount","m_toi","minContact","minAlpha","c_3","fA_1","fB_1","bA_1","bB_1","activeA","activeB","getChildIndexA","getChildIndexB","fA","fB","bA","bB","update","setEnabled","bodies","solveIslandTOI","findNewContacts","m_subStepping","subStep","toiA","toiB","solvePositionConstraintTOI","c_5","postSolve","m_impulse","Mat22","Mat222","ex","ey","getInverse","det","imx","mx","mulMat22","c1","mulTMat22","mx1","mx2","math_sqrt$2","pointA$1","pointB$1","temp$3","cA$1","cB$1","dist","planePoint$2","clipPoint$1","ManifoldType","ManifoldType2","ContactFeatureType","ContactFeatureType2","PointState","PointState2","ClipVertex","ClipVertex2","ContactID","Manifold","Manifold2","localNormal","points","ManifoldPoint","pointCount","getWorldManifold","wm","WorldManifold","separations","e_circles","manifoldPoint","length_1","clipSegmentToLine","getPointStates","ManifoldPoint2","ContactID2","typeA","typeB","setFeatures","swapFeatures","WorldManifold2","state1","state2","manifold1","manifold2","removeState","persistState","addState","vOut","vIn","offset","vertexIndexA","numOut","distance0","distance1","interp","e_vertex","e_face","math_sqrt$1","math_max$2","math_min$4","contactPool","Contact","oldManifold","worldManifold","ContactEdge","ContactEdge2","mixFriction","friction1","friction2","mixRestitution","restitution1","restitution2","s_registers","VelocityConstraintPoint","VelocityConstraintPoint2","rA","rB","normalMass","tangentMass","velocityBias","cA","vA","cB","vB","tangent$1","xfA","xfB","clipPoint","planePoint$1","P$1","normal$2","dv","dv1","dv2","b","d","P1","P2","temp$2","Contact2","m_nodeA","m_nodeB","m_indexA","m_indexB","m_evaluateFcn","m_manifold","m_tangentSpeed","m_enabledFlag","m_touchingFlag","m_filterFlag","m_bulletHitFlag","v_normal","v_normalMass","v_K","v_pointCount","v_tangentSpeed","v_friction","v_restitution","v_invMassA","v_invMassB","v_invIA","v_invIB","p_localPoints","p_localNormal","p_localPoint","p_localCenterA","p_localCenterB","p_type","p_radiusA","p_radiusB","p_pointCount","p_invMassA","p_invMassB","p_invIA","p_invIB","evaluateFcn","_i","_a2","point_1","_b","_c","point_2","manifold","cp","vcp","getManifold","worldManifold2","resetFriction","resetRestitution","setTangentSpeed","speed","getTangentSpeed","listener","touching","wasTouching","nmp","omp","hasListener","beginContact","endContact","preSolve","_solvePositionConstraint","toi","positionA","positionB","localCenterA","localCenterB","mA","mB","iB","aA","aB","rnA","rnB","K","velocityA","velocityB","wmp","kNormal","rtA","rtB","kTangent","vRel","vcp1","vcp2","rn1A","rn1B","rn2A","rn2B","k11","k22","k12","k_maxConditionNumber","a_1","b_1","d_1","vt","maxFriction","newImpulse","vn","vn1","vn2","addType","type1","type2","callback","destroy","DEFAULTS$b","continuousPhysics","subStepping","World","World2","s_step","m_solver","m_contactCount","m_bodyCount","m_jointCount","m_clearForces","m_locked","m_warmStarting","m_continuousPhysics","m_blockSolve","m_velocityIterations","m_positionIterations","m_t","joints","getBodyList","context","_addBody","createJoint","getBodyCount","getJointCount","getContactCount","setGravity","getGravity","setAllowSleeping","getAllowSleeping","setWarmStarting","getWarmStarting","setContinuousPhysics","getContinuousPhysics","setSubStepping","getSubStepping","setAutoClearForces","getAutoClearForces","clearForces","queryAABB","point1","hit","point3","createBody","arg1","arg2","createDynamicBody","createKinematicBody","destroyBody","je0","destroyJoint","f0","timeStep","updateContacts","createContact","next_c","overlap","on","name","_listeners","off","listeners","indexOf","splice","arg3","l","oldManifold2","Vec3","Vec32","z","v1$2","v2$1","EdgeShape","_super","EdgeShape2","v122","TYPE","m_vertex1","m_vertex2","m_vertex0","m_vertex3","m_hasVertex0","m_hasVertex3","vertex1","vertex2","vertex0","vertex3","hasVertex0","hasVertex3","setPrevVertex","setNextVertex","getRadius","setNext","getNextVertex","setPrev","getPrevVertex","_set","_clone","e3","numerator","denominator","rr","Edge","v1$1","v2","ChainShape","ChainShape2","loop","m_prevVertex","m_nextVertex","m_hasPrevVertex","m_hasNextVertex","m_isLoop","_createLoop","_createChain","isLoop","hasPrevVertex","hasNextVertex","prevVertex","nextVertex","getChildEdge","edgeShape","Chain","math_max$1","math_min$3","temp$1","e$1","e1$1","e2$1","PolygonShape","PolygonShape2","m_centroid","m_normals","_setAsBox","ps","unique","linearSlopSquared","i0","hull","ih","ie2","i1","i2","computeCentroid","hx","hy","center2","pLocal","minX","minY","maxX","maxY","k_inv3","triangleArea","ex1","ey1","ex2","ey2","intx2","inty2","vs","pRef","inv3","p3","e1_1","e2_1","Polygon","math_sqrt","math_PI$4","temp","CircleShape","CircleShape2","m_p","Circle","math_abs$5","math_PI$3","DEFAULTS$a","frequencyHz","dampingRatio","DistanceJoint","DistanceJoint2","anchorA","anchorB","m_localAnchorA","localAnchorA","m_localAnchorB","localAnchorB","m_length","m_frequencyHz","m_dampingRatio","m_gamma","m_bias","gamma","bias","getLocalAnchorA","getLocalAnchorB","setLength","getLength","setFrequency","hz","getFrequency","setDampingRatio","getDampingRatio","getAnchorA","getAnchorB","getReactionForce","m_u","getReactionTorque","m_localCenterA","m_localCenterB","m_invMassA","m_invMassB","m_invIA","m_invIB","cA2","vA2","cB2","vB2","qA","qB","m_rA","m_rB","crAu","crBu","invMass","omega","k","P3","vpA","vpB","Cdot","u","DEFAULTS$9","maxForce","maxTorque","FrictionJoint","FrictionJoint2","anchor","m_linearImpulse","m_angularImpulse","m_maxForce","m_maxTorque","setMaxForce","getMaxForce","setMaxTorque","getMaxTorque","m_linearMass","m_angularMass","oldImpulse","maxImpulse","Mat33","Mat332","ez","solve33","cross_x","cross_y","cross_z","solve22","a11","a12","a21","a22","getInverse22","M","getSymInverse33","a13","a23","a33","mulVec3","math_abs$4","LimitState$2","LimitState2","DEFAULTS$8","lowerAngle","upperAngle","maxMotorTorque","motorSpeed","enableLimit","enableMotor","RevoluteJoint","RevoluteJoint2","_d","_e","_f","m_limitState","inactiveLimit","referenceAngle","m_referenceAngle","m_motorImpulse","m_lowerAngle","m_upperAngle","m_maxMotorTorque","m_motorSpeed","m_enableLimit","m_enableMotor","getReferenceAngle","getJointAngle","getJointSpeed","isMotorEnabled","getMotorTorque","setMotorSpeed","getMotorSpeed","setMaxMotorTorque","getMaxMotorTorque","isLimitEnabled","getLowerLimit","getUpperLimit","setLimits","m_motorMass","jointAngle","equalLimits","atLowerLimit","atUpperLimit","Cdot1","Cdot2","rhs","reduced","angularError","positionError","limitImpulse","math_abs$3","math_max","math_min$2","LimitState$1","DEFAULTS$7","lowerTranslation","upperTranslation","maxMotorForce","PrismaticJoint","PrismaticJoint2","axis","m_localXAxisA","localAxisA","m_localYAxisA","m_lowerTranslation","m_upperTranslation","m_maxMotorForce","m_perp","m_K","getLocalAxisA","getJointTranslation","translation2","setMaxMotorForce","getMaxMotorForce","getMotorForce","m_a1","m_a2","m_s1","m_s2","k13","k23","k33","jointTranslation","LA","LB","f1","df","f2r","perp2","C1","linearError","C2","impulse1","DEFAULTS$6","GearJoint","GearJoint2","joint1","joint2","m_joint1","m_joint2","m_ratio","m_type1","m_type2","coordinateA","coordinateB","m_bodyC","xfC","aC","revolute","m_localAnchorC","m_referenceAngleA","m_localAxisC","prismatic","pC","m_bodyD","xfD","aD","m_localAnchorD","m_referenceAngleB","m_localAxisD","pD","m_constant","getJoint1","getJoint2","setRatio","getRatio","m_JvAC","L","m_JwA","m_lcA","m_lcB","m_lcC","m_lcD","m_mA","m_mB","m_mC","m_mD","m_iA","m_iB","m_iC","m_iD","vC","wC","vD","qC","qD","m_JwC","rC","m_JvBD","m_JwB","m_JwD","rD","cC","cD","JvAC","JvBD","JwA","JwB","JwC","JwD","DEFAULTS$5","correctionFactor","MotorJoint","MotorJoint2","m_linearOffset","linearOffset","m_angularOffset","angularOffset","m_correctionFactor","setCorrectionFactor","factor","getCorrectionFactor","setLinearOffset","getLinearOffset","setAngularOffset","getAngularOffset","m_linearError","m_angularError","inv_h","math_PI$2","DEFAULTS$4","MouseJoint","MouseJoint2","m_targetA","m_beta","m_C","_localAnchorB","setTarget","getTarget","velocity","math_abs$2","DEFAULTS$3","PulleyJoint","PulleyJoint2","groundA","groundB","m_groundAnchorA","groundAnchorA","m_groundAnchorB","groundAnchorB","m_lengthA","lengthA","m_lengthB","lengthB","getGroundAnchorA","getGroundAnchorB","getLengthA","getLengthB","getCurrentLengthA","getCurrentLengthB","m_uB","m_uA","ruA","ruB","PA","PB","uA","uB","math_min$1","LimitState","DEFAULTS$2","maxLength","RopeJoint","RopeJoint2","m_maxLength","m_state","setMaxLength","getMaxLength","getLimitState","crA","crB","math_abs$1","math_PI$1","DEFAULTS$1","WeldJoint","WeldJoint2","invM","impulse2","math_abs","math_PI","DEFAULTS","WheelJoint","WheelJoint2","m_ax","m_ay","localAxis","m_springMass","m_springImpulse","setSpringFrequencyHz","getSpringFrequencyHz","setSpringDampingRatio","getSpringDampingRatio","m_sAy","m_sBy","m_sAx","m_sBx","damp","ay","sAy","sBy","_a","SID","SERIALIZE_REF_TYPES","DESERIALIZE_BY_REF_TYPE","DESERIALIZE_BY_TYPE_FIELD","DEFAULT_OPTIONS","rootClass","preSerialize","postSerialize","preDeserialize","postDeserialize","Serializer","Serializer2","options2","toJson","json","refQueue","refMemoById","addToRefQueue","typeName","__sid","ref","refIndex","refType","serializeWithHooks","obj2","traverse","noRefType","newValue","str","fromJson","deserializedRefMemoByIndex","deserializeWithHooks","classHint","deserializer","classDeserializeFn","deserializeChild","dataOrRef","isRefObject","worldSerializer","Testbed","Testbed2","width","scaleY","background","activeKeys","keydown","keyCode","label","keyup","mount","Error","start","testbed2","color","g","testbed","BoxShape","BoxShape2","halfWidth","halfHeight","Box","CircleCircleContact","CollideCircles","pA","pB","circleA","circleB","distSqr","EdgeCircleContact","ChainCircleContact","CollideEdgeCircle","chain","e","e1","e2","Q","P","n$2","edgeA","dd_1","A1","B1","u1","dd_2","B2","A2","den","dd","incidentEdge","clipPoints1$1","clipPoints2$1","clipSegmentToLineNormal","v1","n$1","xf$1","v11","v12","localTangent","planePoint","tangent","normal$1","normal1$1","PolygonContact","CollidePolygons","findMaxSeparation","poly1","poly2","count1","count2","n1s","v1s","v2s","maxSeparation2","si","sij","maxSeparation","findIncidentEdge","clipVertex","edge12","normals1","vertices2","normals2","minDot","polyA","polyB","separationA","edgeB","separationB","flip","k_tol","vertices1","iv1","iv2","frontOffset","sideOffset1","sideOffset2","np1","np2","PolygonCircleContact","CollidePolygonCircle","cLocal","faceCenter","polygonA","normalIndex","vertexCount","vertIndex1","vertIndex2","u2","separation_1","math_min","EdgePolygonContact","ChainPolygonContact","CollideEdgePolygon","edge_reuse","EPAxisType","EPAxisType2","VertexType","VertexType2","EPAxis","EPAxis2","TempPolygon","TempPolygon2","ReferenceFace","ReferenceFace2","sideNormal1","sideNormal2","clipPoints1","clipPoints2","ie","edgeAxis","polygonAxis","polygonBA","rf","centroidB","edge0","edge1","edge2","xf","normal0","normal1","normal2","lowerLimit","upperLimit","perp","n","polygonB","v0","offset1","offset0","offset2","convex1","convex2","front","e_edgeA","v4","s22","e_edgeB","k_relativeTol","k_absoluteTol","primaryAxis","internal","freeze","Symbol","toStringTag","default","defineProperties","__esModule"],"sources":["./dist/planck.js"],"mappings":"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ArM,kBACAlB,4BACAgsB,4BACAxrB,8BACAL,4BACA9e,wBACA8lC,UACA9B,oBACAz0B,gBACAJ,0BACAg/B,4BACAiI,oBACAh6B,YACAH,oBACA0X,kBACAI,4BACA,gBAAIb,GACF,OAAO9iC,SAAS8iC,YAClB,EACAtB,YACAsd,YACAt8C,KAAMa,KACN+mD,sBACAmB,sBACA,cAAIroB,GACF,OAAOljC,SAASkjC,UAClB,EACAwW,gBACArC,0BACAuM,8BACAsI,wBACAvL,4BACAqN,oBACAvzC,QACAw2C,sBACAvlD,kBACA2B,kCACAyQ,YACAyX,oBACAP,8BACAG,gCACA/F,0BACAiN,cACAzgB,YACAwa,kBACAO,oBACA,kBAAIF,GACF,OAAOz2B,SAASy2B,cAClB,EACAq8B,gBACAl7B,0BACAgD,kBACA/d,oBACA5N,kBACArL,UACA2vC,UACAzM,gDACA8nB,oBACAO,sBACA5f,YACAxL,4BACAK,oCACAC,8BACA04B,kBACAx2B,wBACAG,8BACA7Z,YACAtjB,wBACAuqD,iBACCmJ,OAAOC,YAAa,CAAEh4D,MAAO,YAChClF,SAASkI,KAAOA,KAChBlI,SAASmlB,KAAOA,KAChBnlB,SAASm0D,IAAMA,IACfn0D,SAAS+zD,SAAWA,SACpB/zD,SAASsV,WAAaA,WACtBtV,SAAS82C,MAAQA,MACjB92C,SAAS61C,WAAaA,WACtB71C,SAASi6C,OAASA,OAClBj6C,SAAS85C,YAAcA,YACvB95C,SAASojC,WAAaA,WACtBpjC,SAASq0D,eAAiBA,eAC1Br0D,SAAS60D,kBAAoBA,kBAC7B70D,SAAS+5D,mBAAqBA,mBAC9B/5D,SAASk5D,qBAAuBA,qBAChCl5D,SAAS82D,gBAAkBA,gBAC3B92D,SAASkmC,QAAUA,QACnBlmC,SAASqmC,YAAcA,YACvBrmC,SAASsjC,UAAYA,UACrBtjC,SAAS87B,eAAiBA,eAC1B97B,SAASyvB,SAAWA,SACpBzvB,SAASuuB,cAAgBA,cACzBvuB,SAASu6C,cAAgBA,cACzBv6C,SAAS+uB,eAAiBA,eAC1B/uB,SAAS0uB,cAAgBA,cACzB1uB,SAAS4P,YAAcA,YACvB5P,SAAS01C,KAAOA,KAChB11C,SAAS4zC,UAAYA,UACrB5zC,SAASmf,QAAUA,QACnBnf,SAAS+e,aAAeA,aACxB/e,SAAS+9C,cAAgBA,cACzB/9C,SAASgmD,UAAYA,UACrBhmD,SAASgsB,MAAQA,MACjBhsB,SAAS6rB,UAAYA,UACrB7rB,SAASujC,SAAWA,SACpBvjC,SAAS2jC,cAAgBA,cACzB3jC,SAASwhC,MAAQA,MACjBxhC,SAAS8+C,MAAQA,MACjB9+C,SAASwC,KAAOa,KAChBrD,SAASoqD,WAAaA,WACtBpqD,SAASurD,WAAaA,WACtBvrD,SAAS05C,QAAUA,QACnB15C,SAASq3C,aAAeA,aACxBr3C,SAAS4jD,eAAiBA,eAC1B5jD,SAASksD,YAAcA,YACvBlsD,SAAS2gD,cAAgBA,cACzB3gD,SAASguD,UAAYA,UACrBhuD,SAASya,IAAMA,IACfza,SAASixD,WAAaA,WACtBjxD,SAAS0L,SAAWA,SACpB1L,SAASqN,iBAAmBA,iBAC5BrN,SAAS8d,MAAQA,MACjB9d,SAASu1B,UAAYA,UACrBv1B,SAASg1B,eAAiBA,eAC1Bh1B,SAASm1B,gBAAkBA,gBAC3Bn1B,SAASovB,aAAeA,aACxBpvB,SAASq8B,OAASA,OAClBr8B,SAAS4b,MAAQA,MACjB5b,SAASo2B,SAAWA,SACpBp2B,SAAS22B,UAAYA,UACrB32B,SAAS8yD,QAAUA,QACnB9yD,SAAS43B,aAAeA,aACxB53B,SAAS46B,SAAWA,SACpB56B,SAAS6c,UAAYA,UACrB7c,SAASiP,SAAWA,SACpBjP,SAAS4D,KAAOA,KAChB5D,SAASuzC,KAAOA,KAChBvzC,SAAS8mC,wBAA0BA,wBACnC9mC,SAAS4uD,UAAYA,UACrB5uD,SAASmvD,WAAaA,WACtBnvD,SAASuvC,MAAQA,MACjBvvC,SAAS+jC,cAAgBA,cACzB/jC,SAASokC,kBAAoBA,kBAC7BpkC,SAASm9D,QAAUr9D,OACnBE,SAASqkC,eAAiBA,eAC1BrkC,SAAS+8D,SAAWA,SACpB/8D,SAASumC,YAAcA,YACvBvmC,SAAS0mC,eAAiBA,eAC1B1mC,SAAS6sB,MAAQA,MACjB7sB,SAASuJ,YAAcA,YACvBvJ,SAAS8zD,QAAUA,QACnB1zD,OAAOg9D,iBAAiBp9D,SAAU,CAAEq9D,WAAY,CAAEn4D,MAAO,MAAQ,CAAC+3D,OAAOC,aAAc,CAAEh4D,MAAO,WAClG","ignoreList":[]} \ No newline at end of file diff --git a/dist/planck.mjs b/dist/planck.mjs index 010d2af0..90066b6b 100644 --- a/dist/planck.mjs +++ b/dist/planck.mjs @@ -1,7 +1,7 @@ /** - * Planck.js v1.0.9 + * Planck.js v1.1.0-alpha * @license The MIT license - * @copyright Copyright (c) 2023 Erin Catto, Ali Shakiba + * @copyright Copyright (c) 2024 Erin Catto, Ali Shakiba * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -21,7 +21,6 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - /*! ***************************************************************************** Copyright (c) Microsoft Corporation. @@ -36,158 +35,103 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); +var extendStatics = function(d2, b2) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b3) { + d3.__proto__ = b3; + } || function(d3, b3) { + for (var p in b3) if (Object.prototype.hasOwnProperty.call(b3, p)) d3[p] = b3[p]; + }; + return extendStatics(d2, b2); }; - -function __extends(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +function __extends(d2, b2) { + if (typeof b2 !== "function" && b2 !== null) + throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); + extendStatics(d2, b2); + function __() { + this.constructor = d2; + } + d2.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); } - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); + __assign = Object.assign || function __assign2(t) { + for (var s2, i = 1, n2 = arguments.length; i < n2; i++) { + s2 = arguments[i]; + for (var p in s2) if (Object.prototype.hasOwnProperty.call(s2, p)) t[p] = s2[p]; + } + return t; + }; + return __assign.apply(this, arguments); }; - -/** @internal */ -var options = function (input, defaults) { - if (input === null || typeof input === "undefined") { - // tslint:disable-next-line:no-object-literal-type-assertion - input = {}; - } - var output = __assign({}, input); - // tslint:disable-next-line:no-for-in - for (var key in defaults) { - if (defaults.hasOwnProperty(key) && typeof input[key] === "undefined") { - output[key] = defaults[key]; - } - } - if (typeof Object.getOwnPropertySymbols === "function") { - var symbols = Object.getOwnPropertySymbols(defaults); - for (var i = 0; i < symbols.length; i++) { - var symbol = symbols[i]; - if (defaults.propertyIsEnumerable(symbol) && typeof input[symbol] === "undefined") { - output[symbol] = defaults[symbol]; - } - } - } - return output; +var options = function(input2, defaults) { + if (input2 === null || typeof input2 === "undefined") { + input2 = {}; + } + var output2 = __assign({}, input2); + for (var key in defaults) { + if (defaults.hasOwnProperty(key) && typeof input2[key] === "undefined") { + output2[key] = defaults[key]; + } + } + if (typeof Object.getOwnPropertySymbols === "function") { + var symbols = Object.getOwnPropertySymbols(defaults); + for (var i = 0; i < symbols.length; i++) { + var symbol = symbols[i]; + if (defaults.propertyIsEnumerable(symbol) && typeof input2[symbol] === "undefined") { + output2[symbol] = defaults[symbol]; + } + } + } + return output2; }; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_random = Math.random; +var math_random = Math.random; var EPSILON = 1e-9; -/** @internal @deprecated */ var isFinite = Number.isFinite; -/** - * @deprecated - * Next Largest Power of 2 Given a binary integer value x, the next largest - * power of 2 can be computed by a SWAR algorithm that recursively "folds" the - * upper bits into the lower bits. This process yields a bit vector with the - * same most significant 1 as x, but all 1's below it. Adding 1 to that value - * yields the next largest power of 2. For a 32-bit value: - */ -function nextPowerOfTwo(x) { - x |= (x >> 1); - x |= (x >> 2); - x |= (x >> 4); - x |= (x >> 8); - x |= (x >> 16); - return x + 1; +function nextPowerOfTwo(x2) { + x2 |= x2 >> 1; + x2 |= x2 >> 2; + x2 |= x2 >> 4; + x2 |= x2 >> 8; + x2 |= x2 >> 16; + return x2 + 1; } -/** @deprecated */ -function isPowerOfTwo(x) { - return x > 0 && (x & (x - 1)) === 0; +function isPowerOfTwo(x2) { + return x2 > 0 && (x2 & x2 - 1) === 0; } -/** @deprecated */ function mod(num, min, max) { - if (typeof min === "undefined") { - max = 1; - min = 0; - } - else if (typeof max === "undefined") { - max = min; - min = 0; - } - if (max > min) { - num = (num - min) % (max - min); - return num + (num < 0 ? max : min); - } - else { - num = (num - max) % (min - max); - return num + (num <= 0 ? min : max); - } + if (typeof min === "undefined") { + max = 1; + min = 0; + } else if (typeof max === "undefined") { + max = min; + min = 0; + } + if (max > min) { + num = (num - min) % (max - min); + return num + (num < 0 ? max : min); + } else { + num = (num - max) % (min - max); + return num + (num <= 0 ? min : max); + } } -/** - * @deprecated - * Returns a min if num is less than min, and max if more than max, otherwise returns num. - */ function clamp(num, min, max) { - if (num < min) { - return min; - } - else if (num > max) { - return max; - } - else { - return num; - } + if (num < min) { + return min; + } else if (num > max) { + return max; + } else { + return num; + } } -/** - * @deprecated - * Returns a random number between min and max when two arguments are provided. - * If one arg is provided between 0 to max. - * If one arg is passed between 0 to 1. - */ function random(min, max) { - if (typeof min === "undefined") { - max = 1; - min = 0; - } - else if (typeof max === "undefined") { - max = min; - min = 0; - } - return min === max ? min : math_random() * (max - min) + min; + if (typeof min === "undefined") { + max = 1; + min = 0; + } else if (typeof max === "undefined") { + max = min; + min = 0; + } + return min === max ? min : math_random() * (max - min) + min; } -/** @ignore */ var math = Object.create(Math); math.EPSILON = EPSILON; math.isFinite = isFinite; @@ -196,5102 +140,3618 @@ math.isPowerOfTwo = isPowerOfTwo; math.mod = mod; math.clamp = clamp; math.random = random; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$9 = Math.abs; -/** @internal */ var math_sqrt$5 = Math.sqrt; -/** @internal */ var math_max$8 = Math.max; -/** @internal */ var math_min$8 = Math.min; -var Vec2 = /** @class */ (function () { - // tslint:disable-next-line:typedef - function Vec2(x, y) { - if (!(this instanceof Vec2)) { - return new Vec2(x, y); - } - if (typeof x === "undefined") { - this.x = 0; - this.y = 0; - } - else if (typeof x === "object") { - this.x = x.x; - this.y = x.y; - } - else { - this.x = x; - this.y = y; - } - } - /** @internal */ - Vec2.prototype._serialize = function () { - return { - x: this.x, - y: this.y - }; - }; - /** @internal */ - Vec2._deserialize = function (data) { - var obj = Object.create(Vec2.prototype); - obj.x = data.x; - obj.y = data.y; - return obj; - }; - Vec2.zero = function () { - var obj = Object.create(Vec2.prototype); - obj.x = 0; - obj.y = 0; - return obj; - }; - /** @hidden */ - Vec2.neo = function (x, y) { - var obj = Object.create(Vec2.prototype); - obj.x = x; - obj.y = y; - return obj; - }; - Vec2.clone = function (v) { - return Vec2.neo(v.x, v.y); - }; - /** @hidden */ - Vec2.prototype.toString = function () { - return JSON.stringify(this); - }; - /** - * Does this vector contain finite coordinates? - */ - Vec2.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Number.isFinite(obj.x) && Number.isFinite(obj.y); - }; - Vec2.assert = function (o) { - }; - Vec2.prototype.clone = function () { - return Vec2.clone(this); - }; - /** - * Set this vector to all zeros. - * - * @returns this - */ - Vec2.prototype.setZero = function () { - this.x = 0.0; - this.y = 0.0; - return this; - }; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - // tslint:disable-next-line:typedef - Vec2.prototype.set = function (x, y) { - if (typeof x === "object") { - this.x = x.x; - this.y = x.y; - } - else { - this.x = x; - this.y = y; - } - return this; - }; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - Vec2.prototype.setNum = function (x, y) { - this.x = x; +var math_abs$9 = Math.abs; +var math_sqrt$5 = Math.sqrt; +var math_max$8 = Math.max; +var math_min$8 = Math.min; +var Vec2 = ( + /** @class */ + function() { + function Vec22(x2, y) { + if (!(this instanceof Vec22)) { + return new Vec22(x2, y); + } + if (typeof x2 === "undefined") { + this.x = 0; + this.y = 0; + } else if (typeof x2 === "object") { + this.x = x2.x; + this.y = x2.y; + } else { + this.x = x2; this.y = y; - return this; + } + } + Vec22.prototype._serialize = function() { + return { + x: this.x, + y: this.y + }; + }; + Vec22._deserialize = function(data) { + var obj = Object.create(Vec22.prototype); + obj.x = data.x; + obj.y = data.y; + return obj; + }; + Vec22.zero = function() { + var obj = Object.create(Vec22.prototype); + obj.x = 0; + obj.y = 0; + return obj; + }; + Vec22.neo = function(x2, y) { + var obj = Object.create(Vec22.prototype); + obj.x = x2; + obj.y = y; + return obj; + }; + Vec22.clone = function(v3) { + return Vec22.neo(v3.x, v3.y); + }; + Vec22.prototype.toString = function() { + return JSON.stringify(this); + }; + Vec22.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Number.isFinite(obj.x) && Number.isFinite(obj.y); }; - /** - * Set this vector to some specified coordinates. - * - * @returns this - */ - Vec2.prototype.setVec2 = function (value) { - this.x = value.x; - this.y = value.y; - return this; + Vec22.assert = function(o) { }; - /** @internal @deprecated Use setCombine or setMul */ - Vec2.prototype.wSet = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return this.setCombine(a, v, b, w); - } - else { - return this.setMul(a, v); - } + Vec22.prototype.clone = function() { + return Vec22.clone(this); }; - /** - * Set linear combination of v and w: `a * v + b * w` - */ - Vec2.prototype.setCombine = function (a, v, b, w) { - var x = a * v.x + b * w.x; - var y = a * v.y + b * w.y; - // `this` may be `w` - this.x = x; - this.y = y; - return this; + Vec22.prototype.setZero = function() { + this.x = 0; + this.y = 0; + return this; }; - Vec2.prototype.setMul = function (a, v) { - var x = a * v.x; - var y = a * v.y; - this.x = x; + Vec22.prototype.set = function(x2, y) { + if (typeof x2 === "object") { + this.x = x2.x; + this.y = x2.y; + } else { + this.x = x2; this.y = y; - return this; - }; - /** - * Add a vector to this vector. - * - * @returns this - */ - Vec2.prototype.add = function (w) { - this.x += w.x; - this.y += w.y; - return this; - }; - /** @internal @deprecated Use addCombine or addMul */ - Vec2.prototype.wAdd = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return this.addCombine(a, v, b, w); - } - else { - return this.addMul(a, v); - } - }; - /** - * Add linear combination of v and w: `a * v + b * w` - */ - Vec2.prototype.addCombine = function (a, v, b, w) { - var x = a * v.x + b * w.x; - var y = a * v.y + b * w.y; - // `this` may be `w` - this.x += x; - this.y += y; - return this; - }; - Vec2.prototype.addMul = function (a, v) { - var x = a * v.x; - var y = a * v.y; - this.x += x; - this.y += y; - return this; - }; - /** - * @deprecated Use subCombine or subMul - */ - Vec2.prototype.wSub = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return this.subCombine(a, v, b, w); - } - else { - return this.subMul(a, v); - } - }; - /** - * Subtract linear combination of v and w: `a * v + b * w` - */ - Vec2.prototype.subCombine = function (a, v, b, w) { - var x = a * v.x + b * w.x; - var y = a * v.y + b * w.y; - // `this` may be `w` - this.x -= x; - this.y -= y; - return this; - }; - Vec2.prototype.subMul = function (a, v) { - var x = a * v.x; - var y = a * v.y; - this.x -= x; - this.y -= y; - return this; - }; - /** - * Subtract a vector from this vector - * - * @returns this - */ - Vec2.prototype.sub = function (w) { - this.x -= w.x; - this.y -= w.y; - return this; - }; - /** - * Multiply this vector by a scalar. - * - * @returns this - */ - Vec2.prototype.mul = function (m) { - this.x *= m; - this.y *= m; - return this; - }; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - Vec2.prototype.length = function () { - return Vec2.lengthOf(this); - }; - /** - * Get the length squared. - */ - Vec2.prototype.lengthSquared = function () { - return Vec2.lengthSquared(this); - }; - /** - * Convert this vector into a unit vector. - * - * @returns old length - */ - Vec2.prototype.normalize = function () { - var length = this.length(); - if (length < EPSILON) { - return 0.0; - } - var invLength = 1.0 / length; - this.x *= invLength; - this.y *= invLength; - return length; - }; - /** - * Get the length of this vector (the norm). - * - * For performance, use this instead of lengthSquared (if possible). - */ - Vec2.lengthOf = function (v) { - return math_sqrt$5(v.x * v.x + v.y * v.y); - }; - /** - * Get the length squared. - */ - Vec2.lengthSquared = function (v) { - return v.x * v.x + v.y * v.y; - }; - Vec2.distance = function (v, w) { - var dx = v.x - w.x; - var dy = v.y - w.y; - return math_sqrt$5(dx * dx + dy * dy); - }; - Vec2.distanceSquared = function (v, w) { - var dx = v.x - w.x; - var dy = v.y - w.y; - return dx * dx + dy * dy; - }; - Vec2.areEqual = function (v, w) { - return v === w || typeof w === "object" && w !== null && v.x === w.x && v.y === w.y; - }; - /** - * Get the skew vector such that dot(skew_vec, other) == cross(vec, other) - */ - Vec2.skew = function (v) { - return Vec2.neo(-v.y, v.x); - }; - /** Dot product on two vectors */ - Vec2.dot = function (v, w) { - return v.x * w.x + v.y * w.y; - }; - Vec2.cross = function (v, w) { - if (typeof w === "number") { - return Vec2.neo(w * v.y, -w * v.x); - } - else if (typeof v === "number") { - return Vec2.neo(-v * w.y, v * w.x); - } - else { - return v.x * w.y - v.y * w.x; - } - }; - /** Cross product on two vectors */ - Vec2.crossVec2Vec2 = function (v, w) { - return v.x * w.y - v.y * w.x; - }; - /** Cross product on a vector and a scalar */ - Vec2.crossVec2Num = function (v, w) { - return Vec2.neo(w * v.y, -w * v.x); - }; - /** Cross product on a vector and a scalar */ - Vec2.crossNumVec2 = function (v, w) { - return Vec2.neo(-v * w.y, v * w.x); - }; - Vec2.addCross = function (a, v, w) { - if (typeof w === "number") { - return Vec2.neo(w * v.y + a.x, -w * v.x + a.y); - } - else if (typeof v === "number") { - return Vec2.neo(-v * w.y + a.x, v * w.x + a.y); - } - }; - /** - * Returns `a + (v x w)` - */ - Vec2.addCrossVec2Num = function (a, v, w) { - return Vec2.neo(w * v.y + a.x, -w * v.x + a.y); - }; - /** - * Returns `a + (v x w)` - */ - Vec2.addCrossNumVec2 = function (a, v, w) { - return Vec2.neo(-v * w.y + a.x, v * w.x + a.y); - }; - Vec2.add = function (v, w) { - return Vec2.neo(v.x + w.x, v.y + w.y); - }; - /** @hidden @deprecated */ - Vec2.wAdd = function (a, v, b, w) { - if (typeof b !== "undefined" || typeof w !== "undefined") { - return Vec2.combine(a, v, b, w); - } - else { - return Vec2.mulNumVec2(a, v); - } - }; - Vec2.combine = function (a, v, b, w) { - return Vec2.zero().setCombine(a, v, b, w); - }; - Vec2.sub = function (v, w) { - return Vec2.neo(v.x - w.x, v.y - w.y); - }; - Vec2.mul = function (a, b) { - if (typeof a === "object") { - return Vec2.neo(a.x * b, a.y * b); - } - else if (typeof b === "object") { - return Vec2.neo(a * b.x, a * b.y); - } - }; - Vec2.mulVec2Num = function (a, b) { - return Vec2.neo(a.x * b, a.y * b); - }; - Vec2.mulNumVec2 = function (a, b) { - return Vec2.neo(a * b.x, a * b.y); - }; - Vec2.prototype.neg = function () { - this.x = -this.x; - this.y = -this.y; - return this; - }; - Vec2.neg = function (v) { - return Vec2.neo(-v.x, -v.y); - }; - Vec2.abs = function (v) { - return Vec2.neo(math_abs$9(v.x), math_abs$9(v.y)); - }; - Vec2.mid = function (v, w) { - return Vec2.neo((v.x + w.x) * 0.5, (v.y + w.y) * 0.5); - }; - Vec2.upper = function (v, w) { - return Vec2.neo(math_max$8(v.x, w.x), math_max$8(v.y, w.y)); - }; - Vec2.lower = function (v, w) { - return Vec2.neo(math_min$8(v.x, w.x), math_min$8(v.y, w.y)); - }; - Vec2.prototype.clamp = function (max) { - var lengthSqr = this.x * this.x + this.y * this.y; - if (lengthSqr > max * max) { - var scale = max / math_sqrt$5(lengthSqr); - this.x *= scale; - this.y *= scale; - } - return this; - }; - Vec2.clamp = function (v, max) { - var r = Vec2.neo(v.x, v.y); - r.clamp(max); - return r; - }; - /** @hidden @deprecated */ - Vec2.scaleFn = function (x, y) { - // todo: this was used in examples, remove in the future - return function (v) { - return Vec2.neo(v.x * x, v.y * y); - }; - }; - /** @hidden @deprecated */ - Vec2.translateFn = function (x, y) { - // todo: this was used in examples, remove in the future - return function (v) { - return Vec2.neo(v.x + x, v.y + y); - }; - }; - return Vec2; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_max$7 = Math.max; -/** @internal */ var math_min$7 = Math.min; -var AABB = /** @class */ (function () { - function AABB(lower, upper) { - if (!(this instanceof AABB)) { - return new AABB(lower, upper); - } - this.lowerBound = Vec2.zero(); - this.upperBound = Vec2.zero(); - if (typeof lower === "object") { - this.lowerBound.setVec2(lower); - } - if (typeof upper === "object") { - this.upperBound.setVec2(upper); - } - else if (typeof lower === "object") { - this.upperBound.setVec2(lower); - } - } - /** - * Verify that the bounds are sorted. - */ - AABB.prototype.isValid = function () { - return AABB.isValid(this); - }; - AABB.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec2.isValid(obj.lowerBound) && Vec2.isValid(obj.upperBound) && Vec2.sub(obj.upperBound, obj.lowerBound).lengthSquared() >= 0; - }; - AABB.assert = function (o) { - }; - /** - * Get the center of the AABB. - */ - AABB.prototype.getCenter = function () { - return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5); - }; - /** - * Get the extents of the AABB (half-widths). - */ - AABB.prototype.getExtents = function () { - return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5); - }; - /** - * Get the perimeter length. - */ - AABB.prototype.getPerimeter = function () { - return 2.0 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y); - }; - /** - * Combine one or two AABB into this one. - */ - AABB.prototype.combine = function (a, b) { - b = b || this; - var lowerA = a.lowerBound; - var upperA = a.upperBound; - var lowerB = b.lowerBound; - var upperB = b.upperBound; - var lowerX = math_min$7(lowerA.x, lowerB.x); - var lowerY = math_min$7(lowerA.y, lowerB.y); - var upperX = math_max$7(upperB.x, upperA.x); - var upperY = math_max$7(upperB.y, upperA.y); - this.lowerBound.setNum(lowerX, lowerY); - this.upperBound.setNum(upperX, upperY); - }; - AABB.prototype.combinePoints = function (a, b) { - this.lowerBound.setNum(math_min$7(a.x, b.x), math_min$7(a.y, b.y)); - this.upperBound.setNum(math_max$7(a.x, b.x), math_max$7(a.y, b.y)); - }; - AABB.prototype.set = function (aabb) { - this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y); - this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y); - }; - AABB.prototype.contains = function (aabb) { - var result = true; - result = result && this.lowerBound.x <= aabb.lowerBound.x; - result = result && this.lowerBound.y <= aabb.lowerBound.y; - result = result && aabb.upperBound.x <= this.upperBound.x; - result = result && aabb.upperBound.y <= this.upperBound.y; - return result; - }; - AABB.prototype.extend = function (value) { - AABB.extend(this, value); - return this; - }; - AABB.extend = function (out, value) { - out.lowerBound.x -= value; - out.lowerBound.y -= value; - out.upperBound.x += value; - out.upperBound.y += value; - return out; - }; - AABB.testOverlap = function (a, b) { - var d1x = b.lowerBound.x - a.upperBound.x; - var d2x = a.lowerBound.x - b.upperBound.x; - var d1y = b.lowerBound.y - a.upperBound.y; - var d2y = a.lowerBound.y - b.upperBound.y; - if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) { + } + return this; + }; + Vec22.prototype.setNum = function(x2, y) { + this.x = x2; + this.y = y; + return this; + }; + Vec22.prototype.setVec2 = function(value) { + this.x = value.x; + this.y = value.y; + return this; + }; + Vec22.prototype.wSet = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return this.setCombine(a2, v3, b2, w); + } else { + return this.setMul(a2, v3); + } + }; + Vec22.prototype.setCombine = function(a2, v3, b2, w) { + var x2 = a2 * v3.x + b2 * w.x; + var y = a2 * v3.y + b2 * w.y; + this.x = x2; + this.y = y; + return this; + }; + Vec22.prototype.setMul = function(a2, v3) { + var x2 = a2 * v3.x; + var y = a2 * v3.y; + this.x = x2; + this.y = y; + return this; + }; + Vec22.prototype.add = function(w) { + this.x += w.x; + this.y += w.y; + return this; + }; + Vec22.prototype.wAdd = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return this.addCombine(a2, v3, b2, w); + } else { + return this.addMul(a2, v3); + } + }; + Vec22.prototype.addCombine = function(a2, v3, b2, w) { + var x2 = a2 * v3.x + b2 * w.x; + var y = a2 * v3.y + b2 * w.y; + this.x += x2; + this.y += y; + return this; + }; + Vec22.prototype.addMul = function(a2, v3) { + var x2 = a2 * v3.x; + var y = a2 * v3.y; + this.x += x2; + this.y += y; + return this; + }; + Vec22.prototype.wSub = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return this.subCombine(a2, v3, b2, w); + } else { + return this.subMul(a2, v3); + } + }; + Vec22.prototype.subCombine = function(a2, v3, b2, w) { + var x2 = a2 * v3.x + b2 * w.x; + var y = a2 * v3.y + b2 * w.y; + this.x -= x2; + this.y -= y; + return this; + }; + Vec22.prototype.subMul = function(a2, v3) { + var x2 = a2 * v3.x; + var y = a2 * v3.y; + this.x -= x2; + this.y -= y; + return this; + }; + Vec22.prototype.sub = function(w) { + this.x -= w.x; + this.y -= w.y; + return this; + }; + Vec22.prototype.mul = function(m) { + this.x *= m; + this.y *= m; + return this; + }; + Vec22.prototype.length = function() { + return Vec22.lengthOf(this); + }; + Vec22.prototype.lengthSquared = function() { + return Vec22.lengthSquared(this); + }; + Vec22.prototype.normalize = function() { + var length = this.length(); + if (length < EPSILON) { + return 0; + } + var invLength = 1 / length; + this.x *= invLength; + this.y *= invLength; + return length; + }; + Vec22.lengthOf = function(v3) { + return math_sqrt$5(v3.x * v3.x + v3.y * v3.y); + }; + Vec22.lengthSquared = function(v3) { + return v3.x * v3.x + v3.y * v3.y; + }; + Vec22.distance = function(v3, w) { + var dx = v3.x - w.x; + var dy = v3.y - w.y; + return math_sqrt$5(dx * dx + dy * dy); + }; + Vec22.distanceSquared = function(v3, w) { + var dx = v3.x - w.x; + var dy = v3.y - w.y; + return dx * dx + dy * dy; + }; + Vec22.areEqual = function(v3, w) { + return v3 === w || typeof w === "object" && w !== null && v3.x === w.x && v3.y === w.y; + }; + Vec22.skew = function(v3) { + return Vec22.neo(-v3.y, v3.x); + }; + Vec22.dot = function(v3, w) { + return v3.x * w.x + v3.y * w.y; + }; + Vec22.cross = function(v3, w) { + if (typeof w === "number") { + return Vec22.neo(w * v3.y, -w * v3.x); + } else if (typeof v3 === "number") { + return Vec22.neo(-v3 * w.y, v3 * w.x); + } else { + return v3.x * w.y - v3.y * w.x; + } + }; + Vec22.crossVec2Vec2 = function(v3, w) { + return v3.x * w.y - v3.y * w.x; + }; + Vec22.crossVec2Num = function(v3, w) { + return Vec22.neo(w * v3.y, -w * v3.x); + }; + Vec22.crossNumVec2 = function(v3, w) { + return Vec22.neo(-v3 * w.y, v3 * w.x); + }; + Vec22.addCross = function(a2, v3, w) { + if (typeof w === "number") { + return Vec22.neo(w * v3.y + a2.x, -w * v3.x + a2.y); + } else if (typeof v3 === "number") { + return Vec22.neo(-v3 * w.y + a2.x, v3 * w.x + a2.y); + } + }; + Vec22.addCrossVec2Num = function(a2, v3, w) { + return Vec22.neo(w * v3.y + a2.x, -w * v3.x + a2.y); + }; + Vec22.addCrossNumVec2 = function(a2, v3, w) { + return Vec22.neo(-v3 * w.y + a2.x, v3 * w.x + a2.y); + }; + Vec22.add = function(v3, w) { + return Vec22.neo(v3.x + w.x, v3.y + w.y); + }; + Vec22.wAdd = function(a2, v3, b2, w) { + if (typeof b2 !== "undefined" || typeof w !== "undefined") { + return Vec22.combine(a2, v3, b2, w); + } else { + return Vec22.mulNumVec2(a2, v3); + } + }; + Vec22.combine = function(a2, v3, b2, w) { + return Vec22.zero().setCombine(a2, v3, b2, w); + }; + Vec22.sub = function(v3, w) { + return Vec22.neo(v3.x - w.x, v3.y - w.y); + }; + Vec22.mul = function(a2, b2) { + if (typeof a2 === "object") { + return Vec22.neo(a2.x * b2, a2.y * b2); + } else if (typeof b2 === "object") { + return Vec22.neo(a2 * b2.x, a2 * b2.y); + } + }; + Vec22.mulVec2Num = function(a2, b2) { + return Vec22.neo(a2.x * b2, a2.y * b2); + }; + Vec22.mulNumVec2 = function(a2, b2) { + return Vec22.neo(a2 * b2.x, a2 * b2.y); + }; + Vec22.prototype.neg = function() { + this.x = -this.x; + this.y = -this.y; + return this; + }; + Vec22.neg = function(v3) { + return Vec22.neo(-v3.x, -v3.y); + }; + Vec22.abs = function(v3) { + return Vec22.neo(math_abs$9(v3.x), math_abs$9(v3.y)); + }; + Vec22.mid = function(v3, w) { + return Vec22.neo((v3.x + w.x) * 0.5, (v3.y + w.y) * 0.5); + }; + Vec22.upper = function(v3, w) { + return Vec22.neo(math_max$8(v3.x, w.x), math_max$8(v3.y, w.y)); + }; + Vec22.lower = function(v3, w) { + return Vec22.neo(math_min$8(v3.x, w.x), math_min$8(v3.y, w.y)); + }; + Vec22.prototype.clamp = function(max) { + var lengthSqr = this.x * this.x + this.y * this.y; + if (lengthSqr > max * max) { + var scale = max / math_sqrt$5(lengthSqr); + this.x *= scale; + this.y *= scale; + } + return this; + }; + Vec22.clamp = function(v3, max) { + var r = Vec22.neo(v3.x, v3.y); + r.clamp(max); + return r; + }; + Vec22.scaleFn = function(x2, y) { + return function(v3) { + return Vec22.neo(v3.x * x2, v3.y * y); + }; + }; + Vec22.translateFn = function(x2, y) { + return function(v3) { + return Vec22.neo(v3.x + x2, v3.y + y); + }; + }; + return Vec22; + }() +); +var math_max$7 = Math.max; +var math_min$7 = Math.min; +var AABB = ( + /** @class */ + function() { + function AABB2(lower, upper) { + if (!(this instanceof AABB2)) { + return new AABB2(lower, upper); + } + this.lowerBound = Vec2.zero(); + this.upperBound = Vec2.zero(); + if (typeof lower === "object") { + this.lowerBound.setVec2(lower); + } + if (typeof upper === "object") { + this.upperBound.setVec2(upper); + } else if (typeof lower === "object") { + this.upperBound.setVec2(lower); + } + } + AABB2.prototype.isValid = function() { + return AABB2.isValid(this); + }; + AABB2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec2.isValid(obj.lowerBound) && Vec2.isValid(obj.upperBound) && Vec2.sub(obj.upperBound, obj.lowerBound).lengthSquared() >= 0; + }; + AABB2.assert = function(o) { + }; + AABB2.prototype.getCenter = function() { + return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5); + }; + AABB2.prototype.getExtents = function() { + return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5); + }; + AABB2.prototype.getPerimeter = function() { + return 2 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y); + }; + AABB2.prototype.combine = function(a2, b2) { + b2 = b2 || this; + var lowerA = a2.lowerBound; + var upperA = a2.upperBound; + var lowerB = b2.lowerBound; + var upperB = b2.upperBound; + var lowerX = math_min$7(lowerA.x, lowerB.x); + var lowerY = math_min$7(lowerA.y, lowerB.y); + var upperX = math_max$7(upperB.x, upperA.x); + var upperY = math_max$7(upperB.y, upperA.y); + this.lowerBound.setNum(lowerX, lowerY); + this.upperBound.setNum(upperX, upperY); + }; + AABB2.prototype.combinePoints = function(a2, b2) { + this.lowerBound.setNum(math_min$7(a2.x, b2.x), math_min$7(a2.y, b2.y)); + this.upperBound.setNum(math_max$7(a2.x, b2.x), math_max$7(a2.y, b2.y)); + }; + AABB2.prototype.set = function(aabb) { + this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y); + this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y); + }; + AABB2.prototype.contains = function(aabb) { + var result = true; + result = result && this.lowerBound.x <= aabb.lowerBound.x; + result = result && this.lowerBound.y <= aabb.lowerBound.y; + result = result && aabb.upperBound.x <= this.upperBound.x; + result = result && aabb.upperBound.y <= this.upperBound.y; + return result; + }; + AABB2.prototype.extend = function(value) { + AABB2.extend(this, value); + return this; + }; + AABB2.extend = function(out, value) { + out.lowerBound.x -= value; + out.lowerBound.y -= value; + out.upperBound.x += value; + out.upperBound.y += value; + return out; + }; + AABB2.testOverlap = function(a2, b2) { + var d1x = b2.lowerBound.x - a2.upperBound.x; + var d2x = a2.lowerBound.x - b2.upperBound.x; + var d1y = b2.lowerBound.y - a2.upperBound.y; + var d2y = a2.lowerBound.y - b2.upperBound.y; + if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) { + return false; + } + return true; + }; + AABB2.areEqual = function(a2, b2) { + return Vec2.areEqual(a2.lowerBound, b2.lowerBound) && Vec2.areEqual(a2.upperBound, b2.upperBound); + }; + AABB2.diff = function(a2, b2) { + var wD = math_max$7(0, math_min$7(a2.upperBound.x, b2.upperBound.x) - math_max$7(b2.lowerBound.x, a2.lowerBound.x)); + var hD = math_max$7(0, math_min$7(a2.upperBound.y, b2.upperBound.y) - math_max$7(b2.lowerBound.y, a2.lowerBound.y)); + var wA = a2.upperBound.x - a2.lowerBound.x; + var hA = a2.upperBound.y - a2.lowerBound.y; + var wB = b2.upperBound.x - b2.lowerBound.x; + var hB = b2.upperBound.y - b2.lowerBound.y; + return wA * hA + wB * hB - wD * hD; + }; + AABB2.prototype.rayCast = function(output2, input2) { + var tmin = -Infinity; + var tmax = Infinity; + var p = input2.p1; + var d2 = Vec2.sub(input2.p2, input2.p1); + var absD = Vec2.abs(d2); + var normal3 = Vec2.zero(); + for (var f = "x"; f !== null; f = f === "x" ? "y" : null) { + if (absD.x < EPSILON) { + if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) { return false; - } - return true; - }; - AABB.areEqual = function (a, b) { - return Vec2.areEqual(a.lowerBound, b.lowerBound) && Vec2.areEqual(a.upperBound, b.upperBound); - }; - AABB.diff = function (a, b) { - var wD = math_max$7(0, math_min$7(a.upperBound.x, b.upperBound.x) - math_max$7(b.lowerBound.x, a.lowerBound.x)); - var hD = math_max$7(0, math_min$7(a.upperBound.y, b.upperBound.y) - math_max$7(b.lowerBound.y, a.lowerBound.y)); - var wA = a.upperBound.x - a.lowerBound.x; - var hA = a.upperBound.y - a.lowerBound.y; - var wB = b.upperBound.x - b.lowerBound.x; - var hB = b.upperBound.y - b.lowerBound.y; - return wA * hA + wB * hB - wD * hD; - }; - AABB.prototype.rayCast = function (output, input) { - // From Real-time Collision Detection, p179. - var tmin = -Infinity; - var tmax = Infinity; - var p = input.p1; - var d = Vec2.sub(input.p2, input.p1); - var absD = Vec2.abs(d); - var normal = Vec2.zero(); - for (var f = "x"; f !== null; f = (f === "x" ? "y" : null)) { - if (absD.x < EPSILON) { - // Parallel. - if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) { - return false; - } - } - else { - var inv_d = 1.0 / d[f]; - var t1 = (this.lowerBound[f] - p[f]) * inv_d; - var t2 = (this.upperBound[f] - p[f]) * inv_d; - // Sign of the normal vector. - var s = -1.0; - if (t1 > t2) { - var temp = t1; - t1 = t2; - t2 = temp; - s = 1.0; - } - // Push the min up - if (t1 > tmin) { - normal.setZero(); - normal[f] = s; - tmin = t1; - } - // Pull the max down - tmax = math_min$7(tmax, t2); - if (tmin > tmax) { - return false; - } - } - } - // Does the ray start inside the box? - // Does the ray intersect beyond the max fraction? - if (tmin < 0.0 || input.maxFraction < tmin) { + } + } else { + var inv_d = 1 / d2[f]; + var t1 = (this.lowerBound[f] - p[f]) * inv_d; + var t2 = (this.upperBound[f] - p[f]) * inv_d; + var s2 = -1; + if (t1 > t2) { + var temp3 = t1; + t1 = t2; + t2 = temp3; + s2 = 1; + } + if (t1 > tmin) { + normal3.setZero(); + normal3[f] = s2; + tmin = t1; + } + tmax = math_min$7(tmax, t2); + if (tmin > tmax) { return false; + } } - // Intersection. - output.fraction = tmin; - output.normal = normal; - return true; - }; - /** @hidden */ - AABB.prototype.toString = function () { - return JSON.stringify(this); - }; - AABB.combinePoints = function (out, a, b) { - out.lowerBound.x = math_min$7(a.x, b.x); - out.lowerBound.y = math_min$7(a.y, b.y); - out.upperBound.x = math_max$7(a.x, b.x); - out.upperBound.y = math_max$7(a.y, b.y); - return out; - }; - AABB.combinedPerimeter = function (a, b) { - var lx = math_min$7(a.lowerBound.x, b.lowerBound.x); - var ly = math_min$7(a.lowerBound.y, b.lowerBound.y); - var ux = math_max$7(a.upperBound.x, b.upperBound.x); - var uy = math_max$7(a.upperBound.y, b.upperBound.y); - return 2.0 * (ux - lx + uy - ly); - }; - return AABB; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_PI$6 = Math.PI; -/** - * Tuning constants based on meters-kilograms-seconds (MKS) units. - * - * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units. - */ -var Settings = /** @class */ (function () { - function Settings() { - } - Object.defineProperty(Settings, "polygonRadius", { - /** - * The radius of the polygon/edge shape skin. This should not be modified. - * Making this smaller means polygons will have an insufficient buffer for - * continuous collision. Making it larger may create artifacts for vertex - * collision. - */ - get: function () { return 2.0 * Settings.linearSlop; }, - enumerable: false, - configurable: true + } + if (tmin < 0 || input2.maxFraction < tmin) { + return false; + } + output2.fraction = tmin; + output2.normal = normal3; + return true; + }; + AABB2.prototype.toString = function() { + return JSON.stringify(this); + }; + AABB2.combinePoints = function(out, a2, b2) { + out.lowerBound.x = math_min$7(a2.x, b2.x); + out.lowerBound.y = math_min$7(a2.y, b2.y); + out.upperBound.x = math_max$7(a2.x, b2.x); + out.upperBound.y = math_max$7(a2.y, b2.y); + return out; + }; + AABB2.combinedPerimeter = function(a2, b2) { + var lx = math_min$7(a2.lowerBound.x, b2.lowerBound.x); + var ly = math_min$7(a2.lowerBound.y, b2.lowerBound.y); + var ux = math_max$7(a2.upperBound.x, b2.upperBound.x); + var uy = math_max$7(a2.upperBound.y, b2.upperBound.y); + return 2 * (ux - lx + uy - ly); + }; + return AABB2; + }() +); +var math_PI$6 = Math.PI; +var Settings = ( + /** @class */ + function() { + function Settings2() { + } + Object.defineProperty(Settings2, "polygonRadius", { + /** + * The radius of the polygon/edge shape skin. This should not be modified. + * Making this smaller means polygons will have an insufficient buffer for + * continuous collision. Making it larger may create artifacts for vertex + * collision. + */ + get: function() { + return 2 * Settings2.linearSlop; + }, + enumerable: false, + configurable: true }); - /** - * You can use this to change the length scale used by your game. - * - * For example for inches you could use 39.4. - */ - Settings.lengthUnitsPerMeter = 1.0; - // Collision - /** - * The maximum number of contact points between two convex shapes. Do not change - * this value. - */ - Settings.maxManifoldPoints = 2; - /** - * The maximum number of vertices on a convex polygon. You cannot increase this - * too much because BlockAllocator has a maximum object size. - */ - Settings.maxPolygonVertices = 12; - /** - * This is used to fatten AABBs in the dynamic tree. This allows proxies to move - * by a small amount without triggering a tree adjustment. This is in meters. - */ - Settings.aabbExtension = 0.1; - /** - * This is used to fatten AABBs in the dynamic tree. This is used to predict the - * future position based on the current displacement. This is a dimensionless - * multiplier. - */ - Settings.aabbMultiplier = 2.0; - /** - * A small length used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - Settings.linearSlop = 0.005; - /** - * A small angle used as a collision and constraint tolerance. Usually it is - * chosen to be numerically significant, but visually insignificant. - */ - Settings.angularSlop = (2.0 / 180.0 * math_PI$6); - /** - * Maximum number of sub-steps per contact in continuous physics simulation. - */ - Settings.maxSubSteps = 8; - // Dynamics - /** - * Maximum number of contacts to be handled to solve a TOI impact. - */ - Settings.maxTOIContacts = 32; - /** - * Maximum iterations to solve a TOI. - */ - Settings.maxTOIIterations = 20; - /** - * Maximum iterations to find Distance. - */ - Settings.maxDistanceIterations = 20; - /** - * A velocity threshold for elastic collisions. Any collision with a relative - * linear velocity below this threshold will be treated as inelastic. - */ - Settings.velocityThreshold = 1.0; - /** - * The maximum linear position correction used when solving constraints. This - * helps to prevent overshoot. - */ - Settings.maxLinearCorrection = 0.2; - /** - * The maximum angular position correction used when solving constraints. This - * helps to prevent overshoot. - */ - Settings.maxAngularCorrection = (8.0 / 180.0 * math_PI$6); - /** - * The maximum linear velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - Settings.maxTranslation = 2.0; - /** - * The maximum angular velocity of a body. This limit is very large and is used - * to prevent numerical problems. You shouldn't need to adjust Settings. - */ - Settings.maxRotation = (0.5 * math_PI$6); - /** - * This scale factor controls how fast overlap is resolved. Ideally this would - * be 1 so that overlap is removed in one time step. However using values close - * to 1 often lead to overshoot. - */ - Settings.baumgarte = 0.2; - Settings.toiBaugarte = 0.75; - // Sleep - /** - * The time that a body must be still before it will go to sleep. - */ - Settings.timeToSleep = 0.5; - /** - * A body cannot sleep if its linear velocity is above this tolerance. - */ - Settings.linearSleepTolerance = 0.01; - /** - * A body cannot sleep if its angular velocity is above this tolerance. - */ - Settings.angularSleepTolerance = (2.0 / 180.0 * math_PI$6); - return Settings; -}()); -/** @internal */ -var SettingsInternal = /** @class */ (function () { - function SettingsInternal() { - } - Object.defineProperty(SettingsInternal, "maxManifoldPoints", { - get: function () { - return Settings.maxManifoldPoints; - }, - enumerable: false, - configurable: true + Settings2.lengthUnitsPerMeter = 1; + Settings2.maxManifoldPoints = 2; + Settings2.maxPolygonVertices = 12; + Settings2.aabbExtension = 0.1; + Settings2.aabbMultiplier = 2; + Settings2.linearSlop = 5e-3; + Settings2.angularSlop = 2 / 180 * math_PI$6; + Settings2.maxSubSteps = 8; + Settings2.maxTOIContacts = 32; + Settings2.maxTOIIterations = 20; + Settings2.maxDistanceIterations = 20; + Settings2.velocityThreshold = 1; + Settings2.maxLinearCorrection = 0.2; + Settings2.maxAngularCorrection = 8 / 180 * math_PI$6; + Settings2.maxTranslation = 2; + Settings2.maxRotation = 0.5 * math_PI$6; + Settings2.baumgarte = 0.2; + Settings2.toiBaugarte = 0.75; + Settings2.timeToSleep = 0.5; + Settings2.linearSleepTolerance = 0.01; + Settings2.angularSleepTolerance = 2 / 180 * math_PI$6; + return Settings2; + }() +); +var SettingsInternal = ( + /** @class */ + function() { + function SettingsInternal2() { + } + Object.defineProperty(SettingsInternal2, "maxManifoldPoints", { + get: function() { + return Settings.maxManifoldPoints; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxPolygonVertices", { - get: function () { - return Settings.maxPolygonVertices; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxPolygonVertices", { + get: function() { + return Settings.maxPolygonVertices; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "aabbExtension", { - get: function () { - return Settings.aabbExtension * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "aabbExtension", { + get: function() { + return Settings.aabbExtension * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "aabbMultiplier", { - get: function () { - return Settings.aabbMultiplier; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "aabbMultiplier", { + get: function() { + return Settings.aabbMultiplier; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "linearSlop", { - get: function () { - return Settings.linearSlop * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "linearSlop", { + get: function() { + return Settings.linearSlop * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "linearSlopSquared", { - get: function () { - return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "linearSlopSquared", { + get: function() { + return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "angularSlop", { - get: function () { - return Settings.angularSlop; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "angularSlop", { + get: function() { + return Settings.angularSlop; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "polygonRadius", { - get: function () { - return 2.0 * Settings.linearSlop; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "polygonRadius", { + get: function() { + return 2 * Settings.linearSlop; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxSubSteps", { - get: function () { - return Settings.maxSubSteps; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxSubSteps", { + get: function() { + return Settings.maxSubSteps; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxTOIContacts", { - get: function () { - return Settings.maxTOIContacts; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxTOIContacts", { + get: function() { + return Settings.maxTOIContacts; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxTOIIterations", { - get: function () { - return Settings.maxTOIIterations; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxTOIIterations", { + get: function() { + return Settings.maxTOIIterations; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxDistanceIterations", { - get: function () { - return Settings.maxDistanceIterations; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxDistanceIterations", { + get: function() { + return Settings.maxDistanceIterations; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "velocityThreshold", { - get: function () { - return Settings.velocityThreshold * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "velocityThreshold", { + get: function() { + return Settings.velocityThreshold * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxLinearCorrection", { - get: function () { - return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxLinearCorrection", { + get: function() { + return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxAngularCorrection", { - get: function () { - return Settings.maxAngularCorrection; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxAngularCorrection", { + get: function() { + return Settings.maxAngularCorrection; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxTranslation", { - get: function () { - return Settings.maxTranslation * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxTranslation", { + get: function() { + return Settings.maxTranslation * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxTranslationSquared", { - get: function () { - return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxTranslationSquared", { + get: function() { + return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxRotation", { - get: function () { - return Settings.maxRotation; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxRotation", { + get: function() { + return Settings.maxRotation; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "maxRotationSquared", { - get: function () { - return Settings.maxRotation * Settings.maxRotation; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "maxRotationSquared", { + get: function() { + return Settings.maxRotation * Settings.maxRotation; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "baumgarte", { - get: function () { - return Settings.baumgarte; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "baumgarte", { + get: function() { + return Settings.baumgarte; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "toiBaugarte", { - get: function () { - return Settings.toiBaugarte; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "toiBaugarte", { + get: function() { + return Settings.toiBaugarte; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "timeToSleep", { - get: function () { - return Settings.timeToSleep; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "timeToSleep", { + get: function() { + return Settings.timeToSleep; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "linearSleepTolerance", { - get: function () { - return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "linearSleepTolerance", { + get: function() { + return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "linearSleepToleranceSqr", { - get: function () { - return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "linearSleepToleranceSqr", { + get: function() { + return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "angularSleepTolerance", { - get: function () { - return Settings.angularSleepTolerance; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "angularSleepTolerance", { + get: function() { + return Settings.angularSleepTolerance; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(SettingsInternal, "angularSleepToleranceSqr", { - get: function () { - return Settings.angularSleepTolerance * Settings.angularSleepTolerance; - }, - enumerable: false, - configurable: true + Object.defineProperty(SettingsInternal2, "angularSleepToleranceSqr", { + get: function() { + return Settings.angularSleepTolerance * Settings.angularSleepTolerance; + }, + enumerable: false, + configurable: true }); - return SettingsInternal; -}()); - -/* - * Copyright (c) 2016-2018 Ali Shakiba http://shakiba.me/planck.js - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - */ -/** @internal */ -var Pool = /** @class */ (function () { - function Pool(opts) { - this._list = []; - this._max = Infinity; - this._hasCreateFn = false; - this._createCount = 0; - this._hasAllocateFn = false; - this._allocateCount = 0; - this._hasReleaseFn = false; - this._releaseCount = 0; - this._hasDisposeFn = false; - this._disposeCount = 0; - this._list = []; - this._max = opts.max || this._max; - this._createFn = opts.create; - this._hasCreateFn = typeof this._createFn === "function"; - this._allocateFn = opts.allocate; - this._hasAllocateFn = typeof this._allocateFn === "function"; - this._releaseFn = opts.release; - this._hasReleaseFn = typeof this._releaseFn === "function"; - this._disposeFn = opts.dispose; - this._hasDisposeFn = typeof this._disposeFn === "function"; - } - Pool.prototype.max = function (n) { - if (typeof n === "number") { - this._max = n; - return this; + return SettingsInternal2; + }() +); +var Pool = ( + /** @class */ + function() { + function Pool2(opts) { + this._list = []; + this._max = Infinity; + this._hasCreateFn = false; + this._createCount = 0; + this._hasAllocateFn = false; + this._allocateCount = 0; + this._hasReleaseFn = false; + this._releaseCount = 0; + this._hasDisposeFn = false; + this._disposeCount = 0; + this._list = []; + this._max = opts.max || this._max; + this._createFn = opts.create; + this._hasCreateFn = typeof this._createFn === "function"; + this._allocateFn = opts.allocate; + this._hasAllocateFn = typeof this._allocateFn === "function"; + this._releaseFn = opts.release; + this._hasReleaseFn = typeof this._releaseFn === "function"; + this._disposeFn = opts.dispose; + this._hasDisposeFn = typeof this._disposeFn === "function"; + } + Pool2.prototype.max = function(n2) { + if (typeof n2 === "number") { + this._max = n2; + return this; + } + return this._max; + }; + Pool2.prototype.size = function() { + return this._list.length; + }; + Pool2.prototype.allocate = function() { + var item; + if (this._list.length > 0) { + item = this._list.shift(); + } else { + this._createCount++; + if (this._hasCreateFn) { + item = this._createFn(); + } else { + item = {}; + } + } + this._allocateCount++; + if (this._hasAllocateFn) { + this._allocateFn(item); + } + return item; + }; + Pool2.prototype.release = function(item) { + if (this._list.length < this._max) { + this._releaseCount++; + if (this._hasReleaseFn) { + this._releaseFn(item); + } + this._list.push(item); + } else { + this._disposeCount++; + if (this._hasDisposeFn) { + item = this._disposeFn(item); + } + } + }; + Pool2.prototype.toString = function() { + return " +" + this._createCount + " >" + this._allocateCount + " <" + this._releaseCount + " -" + this._disposeCount + " =" + this._list.length + "/" + this._max; + }; + return Pool2; + }() +); +var math_abs$8 = Math.abs; +var math_max$6 = Math.max; +var TreeNode = ( + /** @class */ + function() { + function TreeNode2(id) { + this.aabb = new AABB(); + this.userData = null; + this.parent = null; + this.child1 = null; + this.child2 = null; + this.height = -1; + this.id = id; + } + TreeNode2.prototype.toString = function() { + return this.id + ": " + this.userData; + }; + TreeNode2.prototype.isLeaf = function() { + return this.child1 == null; + }; + return TreeNode2; + }() +); +var poolTreeNode = new Pool({ + create: function() { + return new TreeNode(); + }, + release: function(node) { + node.userData = null; + node.parent = null; + node.child1 = null; + node.child2 = null; + node.height = -1; + node.id = void 0; + } +}); +var DynamicTree = ( + /** @class */ + function() { + function DynamicTree2() { + this.inputPool = new Pool({ + create: function() { + return {}; + }, + release: function(stack) { } - return this._max; - }; - Pool.prototype.size = function () { - return this._list.length; + }); + this.stackPool = new Pool({ + create: function() { + return []; + }, + release: function(stack) { + stack.length = 0; + } + }); + this.iteratorPool = new Pool({ + create: function() { + return new Iterator(); + }, + release: function(iterator) { + iterator.close(); + } + }); + this.m_root = null; + this.m_nodes = {}; + this.m_lastProxyId = 0; + } + DynamicTree2.prototype.getUserData = function(id) { + var node = this.m_nodes[id]; + return node.userData; + }; + DynamicTree2.prototype.getFatAABB = function(id) { + var node = this.m_nodes[id]; + return node.aabb; + }; + DynamicTree2.prototype.allocateNode = function() { + var node = poolTreeNode.allocate(); + node.id = ++this.m_lastProxyId; + this.m_nodes[node.id] = node; + return node; + }; + DynamicTree2.prototype.freeNode = function(node) { + delete this.m_nodes[node.id]; + poolTreeNode.release(node); + }; + DynamicTree2.prototype.createProxy = function(aabb, userData) { + var node = this.allocateNode(); + node.aabb.set(aabb); + AABB.extend(node.aabb, SettingsInternal.aabbExtension); + node.userData = userData; + node.height = 0; + this.insertLeaf(node); + return node.id; + }; + DynamicTree2.prototype.destroyProxy = function(id) { + var node = this.m_nodes[id]; + this.removeLeaf(node); + this.freeNode(node); + }; + DynamicTree2.prototype.moveProxy = function(id, aabb, d2) { + var node = this.m_nodes[id]; + if (node.aabb.contains(aabb)) { + return false; + } + this.removeLeaf(node); + node.aabb.set(aabb); + aabb = node.aabb; + AABB.extend(aabb, SettingsInternal.aabbExtension); + if (d2.x < 0) { + aabb.lowerBound.x += d2.x * SettingsInternal.aabbMultiplier; + } else { + aabb.upperBound.x += d2.x * SettingsInternal.aabbMultiplier; + } + if (d2.y < 0) { + aabb.lowerBound.y += d2.y * SettingsInternal.aabbMultiplier; + } else { + aabb.upperBound.y += d2.y * SettingsInternal.aabbMultiplier; + } + this.insertLeaf(node); + return true; + }; + DynamicTree2.prototype.insertLeaf = function(leaf) { + if (this.m_root == null) { + this.m_root = leaf; + this.m_root.parent = null; + return; + } + var leafAABB = leaf.aabb; + var index = this.m_root; + while (!index.isLeaf()) { + var child1 = index.child1; + var child2 = index.child2; + var area = index.aabb.getPerimeter(); + var combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB); + var cost = 2 * combinedArea; + var inheritanceCost = 2 * (combinedArea - area); + var newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb); + var cost1 = newArea1 + inheritanceCost; + if (!child1.isLeaf()) { + var oldArea = child1.aabb.getPerimeter(); + cost1 -= oldArea; + } + var newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb); + var cost2 = newArea2 + inheritanceCost; + if (!child2.isLeaf()) { + var oldArea = child2.aabb.getPerimeter(); + cost2 -= oldArea; + } + if (cost < cost1 && cost < cost2) { + break; + } + if (cost1 < cost2) { + index = child1; + } else { + index = child2; + } + } + var sibling = index; + var oldParent = sibling.parent; + var newParent = this.allocateNode(); + newParent.parent = oldParent; + newParent.userData = null; + newParent.aabb.combine(leafAABB, sibling.aabb); + newParent.height = sibling.height + 1; + if (oldParent != null) { + if (oldParent.child1 === sibling) { + oldParent.child1 = newParent; + } else { + oldParent.child2 = newParent; + } + newParent.child1 = sibling; + newParent.child2 = leaf; + sibling.parent = newParent; + leaf.parent = newParent; + } else { + newParent.child1 = sibling; + newParent.child2 = leaf; + sibling.parent = newParent; + leaf.parent = newParent; + this.m_root = newParent; + } + index = leaf.parent; + while (index != null) { + index = this.balance(index); + var child1 = index.child1; + var child2 = index.child2; + index.height = 1 + math_max$6(child1.height, child2.height); + index.aabb.combine(child1.aabb, child2.aabb); + index = index.parent; + } + }; + DynamicTree2.prototype.removeLeaf = function(leaf) { + if (leaf === this.m_root) { + this.m_root = null; + return; + } + var parent = leaf.parent; + var grandParent = parent.parent; + var sibling; + if (parent.child1 === leaf) { + sibling = parent.child2; + } else { + sibling = parent.child1; + } + if (grandParent != null) { + if (grandParent.child1 === parent) { + grandParent.child1 = sibling; + } else { + grandParent.child2 = sibling; + } + sibling.parent = grandParent; + this.freeNode(parent); + var index = grandParent; + while (index != null) { + index = this.balance(index); + var child1 = index.child1; + var child2 = index.child2; + index.aabb.combine(child1.aabb, child2.aabb); + index.height = 1 + math_max$6(child1.height, child2.height); + index = index.parent; + } + } else { + this.m_root = sibling; + sibling.parent = null; + this.freeNode(parent); + } + }; + DynamicTree2.prototype.balance = function(iA) { + var A = iA; + if (A.isLeaf() || A.height < 2) { + return iA; + } + var B = A.child1; + var C = A.child2; + var balance = C.height - B.height; + if (balance > 1) { + var F = C.child1; + var G = C.child2; + C.child1 = A; + C.parent = A.parent; + A.parent = C; + if (C.parent != null) { + if (C.parent.child1 === iA) { + C.parent.child1 = C; + } else { + C.parent.child2 = C; + } + } else { + this.m_root = C; + } + if (F.height > G.height) { + C.child2 = F; + A.child2 = G; + G.parent = A; + A.aabb.combine(B.aabb, G.aabb); + C.aabb.combine(A.aabb, F.aabb); + A.height = 1 + math_max$6(B.height, G.height); + C.height = 1 + math_max$6(A.height, F.height); + } else { + C.child2 = G; + A.child2 = F; + F.parent = A; + A.aabb.combine(B.aabb, F.aabb); + C.aabb.combine(A.aabb, G.aabb); + A.height = 1 + math_max$6(B.height, F.height); + C.height = 1 + math_max$6(A.height, G.height); + } + return C; + } + if (balance < -1) { + var D = B.child1; + var E = B.child2; + B.child1 = A; + B.parent = A.parent; + A.parent = B; + if (B.parent != null) { + if (B.parent.child1 === A) { + B.parent.child1 = B; + } else { + B.parent.child2 = B; + } + } else { + this.m_root = B; + } + if (D.height > E.height) { + B.child2 = D; + A.child1 = E; + E.parent = A; + A.aabb.combine(C.aabb, E.aabb); + B.aabb.combine(A.aabb, D.aabb); + A.height = 1 + math_max$6(C.height, E.height); + B.height = 1 + math_max$6(A.height, D.height); + } else { + B.child2 = E; + A.child1 = D; + D.parent = A; + A.aabb.combine(C.aabb, D.aabb); + B.aabb.combine(A.aabb, E.aabb); + A.height = 1 + math_max$6(C.height, D.height); + B.height = 1 + math_max$6(A.height, E.height); + } + return B; + } + return A; + }; + DynamicTree2.prototype.getHeight = function() { + if (this.m_root == null) { + return 0; + } + return this.m_root.height; + }; + DynamicTree2.prototype.getAreaRatio = function() { + if (this.m_root == null) { + return 0; + } + var root = this.m_root; + var rootArea = root.aabb.getPerimeter(); + var totalArea = 0; + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + if (node.height < 0) { + continue; + } + totalArea += node.aabb.getPerimeter(); + } + this.iteratorPool.release(it); + return totalArea / rootArea; + }; + DynamicTree2.prototype.computeHeight = function(id) { + var node; + if (typeof id !== "undefined") { + node = this.m_nodes[id]; + } else { + node = this.m_root; + } + if (node.isLeaf()) { + return 0; + } + var height1 = this.computeHeight(node.child1.id); + var height2 = this.computeHeight(node.child2.id); + return 1 + math_max$6(height1, height2); + }; + DynamicTree2.prototype.validateStructure = function(node) { + if (node == null) { + return; + } + if (node === this.m_root) ; + var child1 = node.child1; + var child2 = node.child2; + if (node.isLeaf()) { + return; + } + this.validateStructure(child1); + this.validateStructure(child2); }; - Pool.prototype.allocate = function () { - var item; - if (this._list.length > 0) { - item = this._list.shift(); + DynamicTree2.prototype.validateMetrics = function(node) { + if (node == null) { + return; + } + var child1 = node.child1; + var child2 = node.child2; + if (node.isLeaf()) { + return; + } + child1.height; + child2.height; + var aabb = new AABB(); + aabb.combine(child1.aabb, child2.aabb); + this.validateMetrics(child1); + this.validateMetrics(child2); + }; + DynamicTree2.prototype.validate = function() { + return; + }; + DynamicTree2.prototype.getMaxBalance = function() { + var maxBalance = 0; + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + if (node.height <= 1) { + continue; + } + var balance = math_abs$8(node.child2.height - node.child1.height); + maxBalance = math_max$6(maxBalance, balance); + } + this.iteratorPool.release(it); + return maxBalance; + }; + DynamicTree2.prototype.rebuildBottomUp = function() { + var nodes = []; + var count = 0; + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + if (node.height < 0) { + continue; } - else { - this._createCount++; - if (this._hasCreateFn) { - item = this._createFn(); - } - else { - // tslint:disable-next-line:no-object-literal-type-assertion - item = {}; - } + if (node.isLeaf()) { + node.parent = null; + nodes[count] = node; + ++count; + } else { + this.freeNode(node); + } + } + this.iteratorPool.release(it); + while (count > 1) { + var minCost = Infinity; + var iMin = -1; + var jMin = -1; + for (var i = 0; i < count; ++i) { + var aabbi = nodes[i].aabb; + for (var j = i + 1; j < count; ++j) { + var aabbj = nodes[j].aabb; + var cost = AABB.combinedPerimeter(aabbi, aabbj); + if (cost < minCost) { + iMin = i; + jMin = j; + minCost = cost; + } + } + } + var child1 = nodes[iMin]; + var child2 = nodes[jMin]; + var parent_1 = this.allocateNode(); + parent_1.child1 = child1; + parent_1.child2 = child2; + parent_1.height = 1 + math_max$6(child1.height, child2.height); + parent_1.aabb.combine(child1.aabb, child2.aabb); + parent_1.parent = null; + child1.parent = parent_1; + child2.parent = parent_1; + nodes[jMin] = nodes[count - 1]; + nodes[iMin] = parent_1; + --count; + } + this.m_root = nodes[0]; + }; + DynamicTree2.prototype.shiftOrigin = function(newOrigin) { + var node; + var it = this.iteratorPool.allocate().preorder(this.m_root); + while (node = it.next()) { + var aabb = node.aabb; + aabb.lowerBound.x -= newOrigin.x; + aabb.lowerBound.y -= newOrigin.y; + aabb.upperBound.x -= newOrigin.x; + aabb.upperBound.y -= newOrigin.y; + } + this.iteratorPool.release(it); + }; + DynamicTree2.prototype.query = function(aabb, queryCallback) { + var stack = this.stackPool.allocate(); + stack.push(this.m_root); + while (stack.length > 0) { + var node = stack.pop(); + if (node == null) { + continue; + } + if (AABB.testOverlap(node.aabb, aabb)) { + if (node.isLeaf()) { + var proceed = queryCallback(node.id); + if (proceed === false) { + return; + } + } else { + stack.push(node.child1); + stack.push(node.child2); + } + } + } + this.stackPool.release(stack); + }; + DynamicTree2.prototype.rayCast = function(input2, rayCastCallback) { + var p1 = input2.p1; + var p2 = input2.p2; + var r = Vec2.sub(p2, p1); + r.normalize(); + var v3 = Vec2.crossNumVec2(1, r); + var abs_v = Vec2.abs(v3); + var maxFraction = input2.maxFraction; + var segmentAABB = new AABB(); + var t = Vec2.combine(1 - maxFraction, p1, maxFraction, p2); + segmentAABB.combinePoints(p1, t); + var stack = this.stackPool.allocate(); + var subInput = this.inputPool.allocate(); + stack.push(this.m_root); + while (stack.length > 0) { + var node = stack.pop(); + if (node == null) { + continue; } - this._allocateCount++; - if (this._hasAllocateFn) { - this._allocateFn(item); + if (AABB.testOverlap(node.aabb, segmentAABB) === false) { + continue; } - return item; - }; - Pool.prototype.release = function (item) { - if (this._list.length < this._max) { - this._releaseCount++; - if (this._hasReleaseFn) { - this._releaseFn(item); - } - this._list.push(item); - } - else { - this._disposeCount++; - if (this._hasDisposeFn) { - item = this._disposeFn(item); - } - } - }; - Pool.prototype.toString = function () { - return " +" + this._createCount + " >" + this._allocateCount + " <" + this._releaseCount + " -" - + this._disposeCount + " =" + this._list.length + "/" + this._max; - }; - return Pool; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$8 = Math.abs; -/** @internal */ var math_max$6 = Math.max; -/** - * A node in the dynamic tree. The client does not interact with this directly. - */ -var TreeNode = /** @class */ (function () { - function TreeNode(id) { - /** Enlarged AABB */ - this.aabb = new AABB(); - this.userData = null; - this.parent = null; - this.child1 = null; - this.child2 = null; - /** 0: leaf, -1: free node */ - this.height = -1; - this.id = id; - } - /** @internal */ - TreeNode.prototype.toString = function () { - return this.id + ": " + this.userData; - }; - TreeNode.prototype.isLeaf = function () { - return this.child1 == null; - }; - return TreeNode; -}()); -/** @internal */ var poolTreeNode = new Pool({ - create: function () { - return new TreeNode(); - }, - release: function (node) { - node.userData = null; - node.parent = null; - node.child1 = null; - node.child2 = null; - node.height = -1; - node.id = undefined; - } -}); -/** - * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A - * dynamic tree arranges data in a binary tree to accelerate queries such as - * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we - * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger - * than the client object. This allows the client object to move by small - * amounts without triggering a tree update. - * - * Nodes are pooled and relocatable, so we use node indices rather than - * pointers. - */ -var DynamicTree = /** @class */ (function () { - function DynamicTree() { - this.inputPool = new Pool({ - create: function () { - // tslint:disable-next-line:no-object-literal-type-assertion - return {}; - }, - release: function (stack) { - } - }); - this.stackPool = new Pool({ - create: function () { - return []; - }, - release: function (stack) { - stack.length = 0; - } - }); - this.iteratorPool = new Pool({ - create: function () { - return new Iterator(); - }, - release: function (iterator) { - iterator.close(); - } - }); - this.m_root = null; - this.m_nodes = {}; - this.m_lastProxyId = 0; - } - /** - * Get proxy user data. - * - * @return the proxy user data or 0 if the id is invalid. - */ - DynamicTree.prototype.getUserData = function (id) { - var node = this.m_nodes[id]; - return node.userData; - }; - /** - * Get the fat AABB for a node id. - * - * @return the proxy user data or 0 if the id is invalid. - */ - DynamicTree.prototype.getFatAABB = function (id) { - var node = this.m_nodes[id]; - return node.aabb; - }; - DynamicTree.prototype.allocateNode = function () { - var node = poolTreeNode.allocate(); - node.id = ++this.m_lastProxyId; - this.m_nodes[node.id] = node; - return node; - }; - DynamicTree.prototype.freeNode = function (node) { - // tslint:disable-next-line:no-dynamic-delete - delete this.m_nodes[node.id]; - poolTreeNode.release(node); - }; - /** - * Create a proxy in the tree as a leaf node. We return the index of the node - * instead of a pointer so that we can grow the node pool. - * - * Create a proxy. Provide a tight fitting AABB and a userData pointer. - */ - DynamicTree.prototype.createProxy = function (aabb, userData) { - var node = this.allocateNode(); - node.aabb.set(aabb); - // Fatten the aabb. - AABB.extend(node.aabb, SettingsInternal.aabbExtension); - node.userData = userData; - node.height = 0; - this.insertLeaf(node); - return node.id; - }; - /** - * Destroy a proxy. This asserts if the id is invalid. - */ - DynamicTree.prototype.destroyProxy = function (id) { - var node = this.m_nodes[id]; - this.removeLeaf(node); - this.freeNode(node); - }; - /** - * Move a proxy with a swepted AABB. If the proxy has moved outside of its - * fattened AABB, then the proxy is removed from the tree and re-inserted. - * Otherwise the function returns immediately. - * - * @param d Displacement - * - * @return true if the proxy was re-inserted. - */ - DynamicTree.prototype.moveProxy = function (id, aabb, d) { - var node = this.m_nodes[id]; - if (node.aabb.contains(aabb)) { - return false; - } - this.removeLeaf(node); - node.aabb.set(aabb); - // Extend AABB. - aabb = node.aabb; - AABB.extend(aabb, SettingsInternal.aabbExtension); - // Predict AABB displacement. - // const d = Vec2.mul(Settings.aabbMultiplier, displacement); - if (d.x < 0.0) { - aabb.lowerBound.x += d.x * SettingsInternal.aabbMultiplier; - } - else { - aabb.upperBound.x += d.x * SettingsInternal.aabbMultiplier; - } - if (d.y < 0.0) { - aabb.lowerBound.y += d.y * SettingsInternal.aabbMultiplier; - } - else { - aabb.upperBound.y += d.y * SettingsInternal.aabbMultiplier; - } - this.insertLeaf(node); - return true; - }; - DynamicTree.prototype.insertLeaf = function (leaf) { - if (this.m_root == null) { - this.m_root = leaf; - this.m_root.parent = null; - return; - } - // Find the best sibling for this node - var leafAABB = leaf.aabb; - var index = this.m_root; - while (!index.isLeaf()) { - var child1 = index.child1; - var child2 = index.child2; - var area = index.aabb.getPerimeter(); - var combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB); - // Cost of creating a new parent for this node and the new leaf - var cost = 2.0 * combinedArea; - // Minimum cost of pushing the leaf further down the tree - var inheritanceCost = 2.0 * (combinedArea - area); - // Cost of descending into child1 - var newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb); - var cost1 = newArea1 + inheritanceCost; - if (!child1.isLeaf()) { - var oldArea = child1.aabb.getPerimeter(); - cost1 -= oldArea; - } - // Cost of descending into child2 - var newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb); - var cost2 = newArea2 + inheritanceCost; - if (!child2.isLeaf()) { - var oldArea = child2.aabb.getPerimeter(); - cost2 -= oldArea; - } - // Descend according to the minimum cost. - if (cost < cost1 && cost < cost2) { - break; - } - // Descend - if (cost1 < cost2) { - index = child1; - } - else { - index = child2; - } - } - var sibling = index; - // Create a new parent. - var oldParent = sibling.parent; - var newParent = this.allocateNode(); - newParent.parent = oldParent; - newParent.userData = null; - newParent.aabb.combine(leafAABB, sibling.aabb); - newParent.height = sibling.height + 1; - if (oldParent != null) { - // The sibling was not the root. - if (oldParent.child1 === sibling) { - oldParent.child1 = newParent; - } - else { - oldParent.child2 = newParent; - } - newParent.child1 = sibling; - newParent.child2 = leaf; - sibling.parent = newParent; - leaf.parent = newParent; - } - else { - // The sibling was the root. - newParent.child1 = sibling; - newParent.child2 = leaf; - sibling.parent = newParent; - leaf.parent = newParent; - this.m_root = newParent; - } - // Walk back up the tree fixing heights and AABBs - index = leaf.parent; - while (index != null) { - index = this.balance(index); - var child1 = index.child1; - var child2 = index.child2; - index.height = 1 + math_max$6(child1.height, child2.height); - index.aabb.combine(child1.aabb, child2.aabb); - index = index.parent; - } - // validate(); - }; - DynamicTree.prototype.removeLeaf = function (leaf) { - if (leaf === this.m_root) { - this.m_root = null; - return; - } - var parent = leaf.parent; - var grandParent = parent.parent; - var sibling; - if (parent.child1 === leaf) { - sibling = parent.child2; - } - else { - sibling = parent.child1; - } - if (grandParent != null) { - // Destroy parent and connect sibling to grandParent. - if (grandParent.child1 === parent) { - grandParent.child1 = sibling; - } - else { - grandParent.child2 = sibling; - } - sibling.parent = grandParent; - this.freeNode(parent); - // Adjust ancestor bounds. - var index = grandParent; - while (index != null) { - index = this.balance(index); - var child1 = index.child1; - var child2 = index.child2; - index.aabb.combine(child1.aabb, child2.aabb); - index.height = 1 + math_max$6(child1.height, child2.height); - index = index.parent; - } - } - else { - this.m_root = sibling; - sibling.parent = null; - this.freeNode(parent); - } - // validate(); - }; - /** - * Perform a left or right rotation if node A is imbalanced. Returns the new - * root index. - */ - DynamicTree.prototype.balance = function (iA) { - var A = iA; - if (A.isLeaf() || A.height < 2) { - return iA; - } - var B = A.child1; - var C = A.child2; - var balance = C.height - B.height; - // Rotate C up - if (balance > 1) { - var F = C.child1; - var G = C.child2; - // Swap A and C - C.child1 = A; - C.parent = A.parent; - A.parent = C; - // A's old parent should point to C - if (C.parent != null) { - if (C.parent.child1 === iA) { - C.parent.child1 = C; - } - else { - C.parent.child2 = C; - } - } - else { - this.m_root = C; - } - // Rotate - if (F.height > G.height) { - C.child2 = F; - A.child2 = G; - G.parent = A; - A.aabb.combine(B.aabb, G.aabb); - C.aabb.combine(A.aabb, F.aabb); - A.height = 1 + math_max$6(B.height, G.height); - C.height = 1 + math_max$6(A.height, F.height); - } - else { - C.child2 = G; - A.child2 = F; - F.parent = A; - A.aabb.combine(B.aabb, F.aabb); - C.aabb.combine(A.aabb, G.aabb); - A.height = 1 + math_max$6(B.height, F.height); - C.height = 1 + math_max$6(A.height, G.height); - } - return C; - } - // Rotate B up - if (balance < -1) { - var D = B.child1; - var E = B.child2; - // Swap A and B - B.child1 = A; - B.parent = A.parent; - A.parent = B; - // A's old parent should point to B - if (B.parent != null) { - if (B.parent.child1 === A) { - B.parent.child1 = B; - } - else { - B.parent.child2 = B; - } - } - else { - this.m_root = B; - } - // Rotate - if (D.height > E.height) { - B.child2 = D; - A.child1 = E; - E.parent = A; - A.aabb.combine(C.aabb, E.aabb); - B.aabb.combine(A.aabb, D.aabb); - A.height = 1 + math_max$6(C.height, E.height); - B.height = 1 + math_max$6(A.height, D.height); - } - else { - B.child2 = E; - A.child1 = D; - D.parent = A; - A.aabb.combine(C.aabb, D.aabb); - B.aabb.combine(A.aabb, E.aabb); - A.height = 1 + math_max$6(C.height, D.height); - B.height = 1 + math_max$6(A.height, E.height); - } - return B; - } - return A; - }; - /** - * Compute the height of the binary tree in O(N) time. Should not be called - * often. - */ - DynamicTree.prototype.getHeight = function () { - if (this.m_root == null) { - return 0; - } - return this.m_root.height; - }; - /** - * Get the ratio of the sum of the node areas to the root area. - */ - DynamicTree.prototype.getAreaRatio = function () { - if (this.m_root == null) { - return 0.0; - } - var root = this.m_root; - var rootArea = root.aabb.getPerimeter(); - var totalArea = 0.0; - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - if (node.height < 0) { - // Free node in pool - continue; - } - totalArea += node.aabb.getPerimeter(); + var c2 = node.aabb.getCenter(); + var h = node.aabb.getExtents(); + var separation = math_abs$8(Vec2.dot(v3, Vec2.sub(p1, c2))) - Vec2.dot(abs_v, h); + if (separation > 0) { + continue; } - this.iteratorPool.release(it); - return totalArea / rootArea; - }; - /** - * Compute the height of a sub-tree. - */ - DynamicTree.prototype.computeHeight = function (id) { - var node; - if (typeof id !== "undefined") { - node = this.m_nodes[id]; - } - else { - node = this.m_root; - } - // false && console.assert(0 <= id && id < this.m_nodeCapacity); if (node.isLeaf()) { - return 0; - } - var height1 = this.computeHeight(node.child1.id); - var height2 = this.computeHeight(node.child2.id); - return 1 + math_max$6(height1, height2); + subInput.p1 = Vec2.clone(input2.p1); + subInput.p2 = Vec2.clone(input2.p2); + subInput.maxFraction = maxFraction; + var value = rayCastCallback(subInput, node.id); + if (value === 0) { + break; + } else if (value > 0) { + maxFraction = value; + t = Vec2.combine(1 - maxFraction, p1, maxFraction, p2); + segmentAABB.combinePoints(p1, t); + } + } else { + stack.push(node.child1); + stack.push(node.child2); + } + } + this.stackPool.release(stack); + this.inputPool.release(subInput); + }; + return DynamicTree2; + }() +); +var Iterator = ( + /** @class */ + function() { + function Iterator2() { + this.parents = []; + this.states = []; + } + Iterator2.prototype.preorder = function(root) { + this.parents.length = 0; + this.parents.push(root); + this.states.length = 0; + this.states.push(0); + return this; + }; + Iterator2.prototype.next = function() { + while (this.parents.length > 0) { + var i = this.parents.length - 1; + var node = this.parents[i]; + if (this.states[i] === 0) { + this.states[i] = 1; + return node; + } + if (this.states[i] === 1) { + this.states[i] = 2; + if (node.child1) { + this.parents.push(node.child1); + this.states.push(1); + return node.child1; + } + } + if (this.states[i] === 2) { + this.states[i] = 3; + if (node.child2) { + this.parents.push(node.child2); + this.states.push(1); + return node.child2; + } + } + this.parents.pop(); + this.states.pop(); + } + }; + Iterator2.prototype.close = function() { + this.parents.length = 0; + }; + return Iterator2; + }() +); +var math_max$5 = Math.max; +var math_min$6 = Math.min; +var BroadPhase = ( + /** @class */ + function() { + function BroadPhase2() { + var _this = this; + this.m_tree = new DynamicTree(); + this.m_moveBuffer = []; + this.query = function(aabb, queryCallback) { + _this.m_tree.query(aabb, queryCallback); + }; + this.queryCallback = function(proxyId) { + if (proxyId === _this.m_queryProxyId) { + return true; + } + var proxyIdA = math_min$6(proxyId, _this.m_queryProxyId); + var proxyIdB = math_max$5(proxyId, _this.m_queryProxyId); + var userDataA = _this.m_tree.getUserData(proxyIdA); + var userDataB = _this.m_tree.getUserData(proxyIdB); + _this.m_callback(userDataA, userDataB); + return true; + }; + } + BroadPhase2.prototype.getUserData = function(proxyId) { + return this.m_tree.getUserData(proxyId); }; - DynamicTree.prototype.validateStructure = function (node) { - if (node == null) { - return; - } - if (node === this.m_root) ; - var child1 = node.child1; - var child2 = node.child2; - if (node.isLeaf()) { - return; - } - this.validateStructure(child1); - this.validateStructure(child2); + BroadPhase2.prototype.testOverlap = function(proxyIdA, proxyIdB) { + var aabbA = this.m_tree.getFatAABB(proxyIdA); + var aabbB = this.m_tree.getFatAABB(proxyIdB); + return AABB.testOverlap(aabbA, aabbB); }; - DynamicTree.prototype.validateMetrics = function (node) { - if (node == null) { - return; - } - var child1 = node.child1; - var child2 = node.child2; - if (node.isLeaf()) { - return; - } - // false && console.assert(0 <= child1 && child1 < this.m_nodeCapacity); - // false && console.assert(0 <= child2 && child2 < this.m_nodeCapacity); - child1.height; - child2.height; - var aabb = new AABB(); - aabb.combine(child1.aabb, child2.aabb); - this.validateMetrics(child1); - this.validateMetrics(child2); - }; - /** - * Validate this tree. For testing. - */ - DynamicTree.prototype.validate = function () { - return; + BroadPhase2.prototype.getFatAABB = function(proxyId) { + return this.m_tree.getFatAABB(proxyId); }; - /** - * Get the maximum balance of an node in the tree. The balance is the difference - * in height of the two children of a node. - */ - DynamicTree.prototype.getMaxBalance = function () { - var maxBalance = 0; - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - if (node.height <= 1) { - continue; - } - var balance = math_abs$8(node.child2.height - node.child1.height); - maxBalance = math_max$6(maxBalance, balance); - } - this.iteratorPool.release(it); - return maxBalance; - }; - /** - * Build an optimal tree. Very expensive. For testing. - */ - DynamicTree.prototype.rebuildBottomUp = function () { - var nodes = []; - var count = 0; - // Build array of leaves. Free the rest. - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - if (node.height < 0) { - // free node in pool - continue; - } - if (node.isLeaf()) { - node.parent = null; - nodes[count] = node; - ++count; - } - else { - this.freeNode(node); - } - } - this.iteratorPool.release(it); - while (count > 1) { - var minCost = Infinity; - var iMin = -1; - var jMin = -1; - for (var i = 0; i < count; ++i) { - var aabbi = nodes[i].aabb; - for (var j = i + 1; j < count; ++j) { - var aabbj = nodes[j].aabb; - var cost = AABB.combinedPerimeter(aabbi, aabbj); - if (cost < minCost) { - iMin = i; - jMin = j; - minCost = cost; - } - } - } - var child1 = nodes[iMin]; - var child2 = nodes[jMin]; - var parent_1 = this.allocateNode(); - parent_1.child1 = child1; - parent_1.child2 = child2; - parent_1.height = 1 + math_max$6(child1.height, child2.height); - parent_1.aabb.combine(child1.aabb, child2.aabb); - parent_1.parent = null; - child1.parent = parent_1; - child2.parent = parent_1; - nodes[jMin] = nodes[count - 1]; - nodes[iMin] = parent_1; - --count; - } - this.m_root = nodes[0]; - }; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - DynamicTree.prototype.shiftOrigin = function (newOrigin) { - // Build array of leaves. Free the rest. - var node; - var it = this.iteratorPool.allocate().preorder(this.m_root); - while (node = it.next()) { - var aabb = node.aabb; - aabb.lowerBound.x -= newOrigin.x; - aabb.lowerBound.y -= newOrigin.y; - aabb.upperBound.x -= newOrigin.x; - aabb.upperBound.y -= newOrigin.y; - } - this.iteratorPool.release(it); - }; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - DynamicTree.prototype.query = function (aabb, queryCallback) { - var stack = this.stackPool.allocate(); - stack.push(this.m_root); - while (stack.length > 0) { - var node = stack.pop(); - if (node == null) { - continue; - } - if (AABB.testOverlap(node.aabb, aabb)) { - if (node.isLeaf()) { - var proceed = queryCallback(node.id); - if (proceed === false) { - return; - } - } - else { - stack.push(node.child1); - stack.push(node.child2); - } - } - } - this.stackPool.release(stack); - }; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - DynamicTree.prototype.rayCast = function (input, rayCastCallback) { - var p1 = input.p1; - var p2 = input.p2; - var r = Vec2.sub(p2, p1); - r.normalize(); - // v is perpendicular to the segment. - var v = Vec2.crossNumVec2(1.0, r); - var abs_v = Vec2.abs(v); - // Separating axis for segment (Gino, p80). - // |dot(v, p1 - c)| > dot(|v|, h) - var maxFraction = input.maxFraction; - // Build a bounding box for the segment. - var segmentAABB = new AABB(); - var t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2); - segmentAABB.combinePoints(p1, t); - var stack = this.stackPool.allocate(); - var subInput = this.inputPool.allocate(); - stack.push(this.m_root); - while (stack.length > 0) { - var node = stack.pop(); - if (node == null) { - continue; - } - if (AABB.testOverlap(node.aabb, segmentAABB) === false) { - continue; - } - // Separating axis for segment (Gino, p80). - // |dot(v, p1 - c)| > dot(|v|, h) - var c = node.aabb.getCenter(); - var h = node.aabb.getExtents(); - var separation = math_abs$8(Vec2.dot(v, Vec2.sub(p1, c))) - Vec2.dot(abs_v, h); - if (separation > 0.0) { - continue; - } - if (node.isLeaf()) { - subInput.p1 = Vec2.clone(input.p1); - subInput.p2 = Vec2.clone(input.p2); - subInput.maxFraction = maxFraction; - var value = rayCastCallback(subInput, node.id); - if (value === 0.0) { - // The client has terminated the ray cast. - break; - } - else if (value > 0.0) { - // update segment bounding box. - maxFraction = value; - t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2); - segmentAABB.combinePoints(p1, t); - } - } - else { - stack.push(node.child1); - stack.push(node.child2); - } - } - this.stackPool.release(stack); - this.inputPool.release(subInput); + BroadPhase2.prototype.getProxyCount = function() { + return this.m_moveBuffer.length; }; - return DynamicTree; -}()); -/** @internal */ -var Iterator = /** @class */ (function () { - function Iterator() { - this.parents = []; - this.states = []; - } - Iterator.prototype.preorder = function (root) { - this.parents.length = 0; - this.parents.push(root); - this.states.length = 0; - this.states.push(0); - return this; + BroadPhase2.prototype.getTreeHeight = function() { + return this.m_tree.getHeight(); }; - Iterator.prototype.next = function () { - while (this.parents.length > 0) { - var i = this.parents.length - 1; - var node = this.parents[i]; - if (this.states[i] === 0) { - this.states[i] = 1; - return node; - } - if (this.states[i] === 1) { - this.states[i] = 2; - if (node.child1) { - this.parents.push(node.child1); - this.states.push(1); - return node.child1; - } - } - if (this.states[i] === 2) { - this.states[i] = 3; - if (node.child2) { - this.parents.push(node.child2); - this.states.push(1); - return node.child2; - } - } - this.parents.pop(); - this.states.pop(); - } + BroadPhase2.prototype.getTreeBalance = function() { + return this.m_tree.getMaxBalance(); }; - Iterator.prototype.close = function () { - this.parents.length = 0; + BroadPhase2.prototype.getTreeQuality = function() { + return this.m_tree.getAreaRatio(); }; - return Iterator; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_max$5 = Math.max; -/** @internal */ var math_min$6 = Math.min; -/** - * The broad-phase wraps and extends a dynamic-tree to keep track of moved - * objects and query them on update. - */ -var BroadPhase = /** @class */ (function () { - function BroadPhase() { - var _this = this; - this.m_tree = new DynamicTree(); - this.m_moveBuffer = []; - /** - * Query an AABB for overlapping proxies. The callback class is called for each - * proxy that overlaps the supplied AABB. - */ - this.query = function (aabb, queryCallback) { - _this.m_tree.query(aabb, queryCallback); - }; - this.queryCallback = function (proxyId) { - // A proxy cannot form a pair with itself. - if (proxyId === _this.m_queryProxyId) { - return true; - } - var proxyIdA = math_min$6(proxyId, _this.m_queryProxyId); - var proxyIdB = math_max$5(proxyId, _this.m_queryProxyId); - // TODO: Skip any duplicate pairs. - var userDataA = _this.m_tree.getUserData(proxyIdA); - var userDataB = _this.m_tree.getUserData(proxyIdB); - // Send the pairs back to the client. - _this.m_callback(userDataA, userDataB); - return true; - }; - } - /** - * Get user data from a proxy. Returns null if the id is invalid. - */ - BroadPhase.prototype.getUserData = function (proxyId) { - return this.m_tree.getUserData(proxyId); - }; - /** - * Test overlap of fat AABBs. - */ - BroadPhase.prototype.testOverlap = function (proxyIdA, proxyIdB) { - var aabbA = this.m_tree.getFatAABB(proxyIdA); - var aabbB = this.m_tree.getFatAABB(proxyIdB); - return AABB.testOverlap(aabbA, aabbB); - }; - /** - * Get the fat AABB for a proxy. - */ - BroadPhase.prototype.getFatAABB = function (proxyId) { - return this.m_tree.getFatAABB(proxyId); - }; - /** - * Get the number of proxies. - */ - BroadPhase.prototype.getProxyCount = function () { - return this.m_moveBuffer.length; - }; - /** - * Get the height of the embedded tree. - */ - BroadPhase.prototype.getTreeHeight = function () { - return this.m_tree.getHeight(); - }; - /** - * Get the balance (integer) of the embedded tree. - */ - BroadPhase.prototype.getTreeBalance = function () { - return this.m_tree.getMaxBalance(); - }; - /** - * Get the quality metric of the embedded tree. - */ - BroadPhase.prototype.getTreeQuality = function () { - return this.m_tree.getAreaRatio(); - }; - /** - * Ray-cast against the proxies in the tree. This relies on the callback to - * perform a exact ray-cast in the case were the proxy contains a shape. The - * callback also performs the any collision filtering. This has performance - * roughly equal to k * log(n), where k is the number of collisions and n is the - * number of proxies in the tree. - * - * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. - * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. - */ - BroadPhase.prototype.rayCast = function (input, rayCastCallback) { - this.m_tree.rayCast(input, rayCastCallback); - }; - /** - * Shift the world origin. Useful for large worlds. The shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - BroadPhase.prototype.shiftOrigin = function (newOrigin) { - this.m_tree.shiftOrigin(newOrigin); - }; - /** - * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs - * is called. - */ - BroadPhase.prototype.createProxy = function (aabb, userData) { - var proxyId = this.m_tree.createProxy(aabb, userData); - this.bufferMove(proxyId); - return proxyId; - }; - /** - * Destroy a proxy. It is up to the client to remove any pairs. - */ - BroadPhase.prototype.destroyProxy = function (proxyId) { - this.unbufferMove(proxyId); - this.m_tree.destroyProxy(proxyId); - }; - /** - * Call moveProxy as many times as you like, then when you are done call - * UpdatePairs to finalized the proxy pairs (for your time step). - */ - BroadPhase.prototype.moveProxy = function (proxyId, aabb, displacement) { - var changed = this.m_tree.moveProxy(proxyId, aabb, displacement); - if (changed) { - this.bufferMove(proxyId); - } - }; - /** - * Call to trigger a re-processing of it's pairs on the next call to - * UpdatePairs. - */ - BroadPhase.prototype.touchProxy = function (proxyId) { - this.bufferMove(proxyId); + BroadPhase2.prototype.rayCast = function(input2, rayCastCallback) { + this.m_tree.rayCast(input2, rayCastCallback); }; - BroadPhase.prototype.bufferMove = function (proxyId) { - this.m_moveBuffer.push(proxyId); + BroadPhase2.prototype.shiftOrigin = function(newOrigin) { + this.m_tree.shiftOrigin(newOrigin); }; - BroadPhase.prototype.unbufferMove = function (proxyId) { - for (var i = 0; i < this.m_moveBuffer.length; ++i) { - if (this.m_moveBuffer[i] === proxyId) { - this.m_moveBuffer[i] = null; - } - } + BroadPhase2.prototype.createProxy = function(aabb, userData) { + var proxyId = this.m_tree.createProxy(aabb, userData); + this.bufferMove(proxyId); + return proxyId; }; - /** - * Update the pairs. This results in pair callbacks. This can only add pairs. - */ - BroadPhase.prototype.updatePairs = function (addPairCallback) { - this.m_callback = addPairCallback; - // Perform tree queries for all moving proxies. - while (this.m_moveBuffer.length > 0) { - this.m_queryProxyId = this.m_moveBuffer.pop(); - if (this.m_queryProxyId === null) { - continue; - } - // We have to query the tree with the fat AABB so that - // we don't fail to create a pair that may touch later. - var fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId); - // Query tree, create pairs and add them pair buffer. - this.m_tree.query(fatAABB, this.queryCallback); - } - // Try to keep the tree balanced. - // this.m_tree.rebalance(4); + BroadPhase2.prototype.destroyProxy = function(proxyId) { + this.unbufferMove(proxyId); + this.m_tree.destroyProxy(proxyId); }; - return BroadPhase; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2023 Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_sin$2 = Math.sin; -/** @internal */ var math_cos$2 = Math.cos; -/** @internal */ var math_sqrt$4 = Math.sqrt; -function vec2(x, y) { - return { x: x, y: y }; + BroadPhase2.prototype.moveProxy = function(proxyId, aabb, displacement2) { + var changed = this.m_tree.moveProxy(proxyId, aabb, displacement2); + if (changed) { + this.bufferMove(proxyId); + } + }; + BroadPhase2.prototype.touchProxy = function(proxyId) { + this.bufferMove(proxyId); + }; + BroadPhase2.prototype.bufferMove = function(proxyId) { + this.m_moveBuffer.push(proxyId); + }; + BroadPhase2.prototype.unbufferMove = function(proxyId) { + for (var i = 0; i < this.m_moveBuffer.length; ++i) { + if (this.m_moveBuffer[i] === proxyId) { + this.m_moveBuffer[i] = null; + } + } + }; + BroadPhase2.prototype.updatePairs = function(addPairCallback) { + this.m_callback = addPairCallback; + while (this.m_moveBuffer.length > 0) { + this.m_queryProxyId = this.m_moveBuffer.pop(); + if (this.m_queryProxyId === null) { + continue; + } + var fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId); + this.m_tree.query(fatAABB, this.queryCallback); + } + }; + return BroadPhase2; + }() +); +var math_sin$2 = Math.sin; +var math_cos$2 = Math.cos; +var math_sqrt$4 = Math.sqrt; +function vec2(x2, y) { + return { x: x2, y }; } function rotation(angle) { - return { s: math_sin$2(angle), c: math_cos$2(angle) }; + return { s: math_sin$2(angle), c: math_cos$2(angle) }; } -function setVec2(out, x, y) { - out.x = x; - out.y = y; - return out; +function setVec2(out, x2, y) { + out.x = x2; + out.y = y; + return out; } function copyVec2(out, w) { - out.x = w.x; - out.y = w.y; - return out; + out.x = w.x; + out.y = w.y; + return out; } function zeroVec2(out) { - out.x = 0; - out.y = 0; - return out; + out.x = 0; + out.y = 0; + return out; } function negVec2(out) { - out.x = -out.x; - out.y = -out.y; - return out; + out.x = -out.x; + out.y = -out.y; + return out; } function plusVec2(out, w) { - out.x += w.x; - out.y += w.y; - return out; + out.x += w.x; + out.y += w.y; + return out; } -function addVec2(out, v, w) { - out.x = v.x + w.x; - out.y = v.x + w.y; - return out; +function addVec2(out, v3, w) { + out.x = v3.x + w.x; + out.y = v3.x + w.y; + return out; } function minusVec2(out, w) { - out.x -= w.x; - out.y -= w.y; - return out; + out.x -= w.x; + out.y -= w.y; + return out; } -function subVec2(out, v, w) { - out.x = v.x - w.x; - out.y = v.y - w.y; - return out; +function subVec2(out, v3, w) { + out.x = v3.x - w.x; + out.y = v3.y - w.y; + return out; } function mulVec2(out, m) { - out.x *= m; - out.y *= m; - return out; + out.x *= m; + out.y *= m; + return out; } function scaleVec2(out, m, w) { - out.x = m * w.x; - out.y = m * w.y; - return out; + out.x = m * w.x; + out.y = m * w.y; + return out; } function plusScaleVec2(out, m, w) { - out.x += m * w.x; - out.y += m * w.y; - return out; + out.x += m * w.x; + out.y += m * w.y; + return out; } function minusScaleVec2(out, m, w) { - out.x -= m * w.x; - out.y -= m * w.y; - return out; + out.x -= m * w.x; + out.y -= m * w.y; + return out; } -function combine2Vec2(out, am, a, bm, b) { - out.x = am * a.x + bm * b.x; - out.y = am * a.y + bm * b.y; - return out; +function combine2Vec2(out, am, a2, bm, b2) { + out.x = am * a2.x + bm * b2.x; + out.y = am * a2.y + bm * b2.y; + return out; } -function combine3Vec2(out, am, a, bm, b, cm, c) { - out.x = am * a.x + bm * b.x + cm * c.x; - out.y = am * a.y + bm * b.y + cm * c.y; - return out; +function combine3Vec2(out, am, a2, bm, b2, cm, c2) { + out.x = am * a2.x + bm * b2.x + cm * c2.x; + out.y = am * a2.y + bm * b2.y + cm * c2.y; + return out; } function normalizeVec2Length(out) { - var length = math_sqrt$4(out.x * out.x + out.y * out.y); - if (length !== 0) { - var invLength = 1 / length; - out.x *= invLength; - out.y *= invLength; - } - return length; + var length = math_sqrt$4(out.x * out.x + out.y * out.y); + if (length !== 0) { + var invLength = 1 / length; + out.x *= invLength; + out.y *= invLength; + } + return length; } function normalizeVec2(out) { - var length = math_sqrt$4(out.x * out.x + out.y * out.y); - if (length > 0) { - var invLength = 1 / length; - out.x *= invLength; - out.y *= invLength; - } - return out; + var length = math_sqrt$4(out.x * out.x + out.y * out.y); + if (length > 0) { + var invLength = 1 / length; + out.x *= invLength; + out.y *= invLength; + } + return out; } -function crossVec2Num(out, v, w) { - var x = w * v.y; - var y = -w * v.x; - out.x = x; - out.y = y; - return out; +function crossVec2Num(out, v3, w) { + var x2 = w * v3.y; + var y = -w * v3.x; + out.x = x2; + out.y = y; + return out; } -function crossNumVec2(out, w, v) { - var x = -w * v.y; - var y = w * v.x; - out.x = x; - out.y = y; - return out; +function crossNumVec2(out, w, v3) { + var x2 = -w * v3.y; + var y = w * v3.x; + out.x = x2; + out.y = y; + return out; } -function crossVec2Vec2(a, b) { - return a.x * b.y - a.y * b.x; +function crossVec2Vec2(a2, b2) { + return a2.x * b2.y - a2.y * b2.x; } -function dotVec2(a, b) { - return a.x * b.x + a.y * b.y; +function dotVec2(a2, b2) { + return a2.x * b2.x + a2.y * b2.y; } -function lengthSqrVec2(a) { - return a.x * a.x + a.y * a.y; +function lengthSqrVec2(a2) { + return a2.x * a2.x + a2.y * a2.y; } -function distVec2(a, b) { - var dx = a.x - b.x; - var dy = a.y - b.y; - return math_sqrt$4(dx * dx + dy * dy); +function distVec2(a2, b2) { + var dx = a2.x - b2.x; + var dy = a2.y - b2.y; + return math_sqrt$4(dx * dx + dy * dy); } -function distSqrVec2(a, b) { - var dx = a.x - b.x; - var dy = a.y - b.y; - return dx * dx + dy * dy; +function distSqrVec2(a2, b2) { + var dx = a2.x - b2.x; + var dy = a2.y - b2.y; + return dx * dx + dy * dy; } -function setRotAngle(out, a) { - out.c = math_cos$2(a); - out.s = math_sin$2(a); - return out; +function setRotAngle(out, a2) { + out.c = math_cos$2(a2); + out.s = math_sin$2(a2); + return out; } -function rotVec2(out, q, v) { - out.x = q.c * v.x - q.s * v.y; - out.y = q.s * v.x + q.c * v.y; - return out; +function rotVec2(out, q, v3) { + out.x = q.c * v3.x - q.s * v3.y; + out.y = q.s * v3.x + q.c * v3.y; + return out; } -function derotVec2(out, q, v) { - var x = q.c * v.x + q.s * v.y; - var y = -q.s * v.x + q.c * v.y; - out.x = x; - out.y = y; - return out; +function derotVec2(out, q, v3) { + var x2 = q.c * v3.x + q.s * v3.y; + var y = -q.s * v3.x + q.c * v3.y; + out.x = x2; + out.y = y; + return out; } -function rerotVec2(out, before, after, v) { - var x0 = before.c * v.x + before.s * v.y; - var y0 = -before.s * v.x + before.c * v.y; - var x = after.c * x0 - after.s * y0; - var y = after.s * x0 + after.c * y0; - out.x = x; - out.y = y; - return out; +function rerotVec2(out, before, after, v3) { + var x0 = before.c * v3.x + before.s * v3.y; + var y0 = -before.s * v3.x + before.c * v3.y; + var x2 = after.c * x0 - after.s * y0; + var y = after.s * x0 + after.c * y0; + out.x = x2; + out.y = y; + return out; } -function transform(x, y, a) { - return { p: vec2(x, y), q: rotation(a) }; +function transform(x2, y, a2) { + return { p: vec2(x2, y), q: rotation(a2) }; } -function copyTransform(out, transform) { - out.p.x = transform.p.x; - out.p.y = transform.p.y; - out.q.s = transform.q.s; - out.q.c = transform.q.c; - return out; +function copyTransform(out, transform2) { + out.p.x = transform2.p.x; + out.p.y = transform2.p.y; + out.q.s = transform2.q.s; + out.q.c = transform2.q.c; + return out; } -function transformVec2(out, xf, v) { - var x = xf.q.c * v.x - xf.q.s * v.y + xf.p.x; - var y = xf.q.s * v.x + xf.q.c * v.y + xf.p.y; - out.x = x; - out.y = y; - return out; +function transformVec2(out, xf2, v3) { + var x2 = xf2.q.c * v3.x - xf2.q.s * v3.y + xf2.p.x; + var y = xf2.q.s * v3.x + xf2.q.c * v3.y + xf2.p.y; + out.x = x2; + out.y = y; + return out; } -function detransformVec2(out, xf, v) { - var px = v.x - xf.p.x; - var py = v.y - xf.p.y; - var x = (xf.q.c * px + xf.q.s * py); - var y = (-xf.q.s * px + xf.q.c * py); - out.x = x; - out.y = y; - return out; +function detransformVec2(out, xf2, v3) { + var px = v3.x - xf2.p.x; + var py = v3.y - xf2.p.y; + var x2 = xf2.q.c * px + xf2.q.s * py; + var y = -xf2.q.s * px + xf2.q.c * py; + out.x = x2; + out.y = y; + return out; } -function retransformVec2(out, from, to, v) { - var x0 = from.q.c * v.x - from.q.s * v.y + from.p.x; - var y0 = from.q.s * v.x + from.q.c * v.y + from.p.y; - var px = x0 - to.p.x; - var py = y0 - to.p.y; - var x = to.q.c * px + to.q.s * py; - var y = -to.q.s * px + to.q.c * py; - out.x = x; - out.y = y; - return out; +function retransformVec2(out, from, to, v3) { + var x0 = from.q.c * v3.x - from.q.s * v3.y + from.p.x; + var y0 = from.q.s * v3.x + from.q.c * v3.y + from.p.y; + var px = x0 - to.p.x; + var py = y0 - to.p.y; + var x2 = to.q.c * px + to.q.s * py; + var y = -to.q.s * px + to.q.c * py; + out.x = x2; + out.y = y; + return out; } -function detransformTransform(out, a, b) { - var c = a.q.c * b.q.c + a.q.s * b.q.s; - var s = a.q.c * b.q.s - a.q.s * b.q.c; - var x = a.q.c * (b.p.x - a.p.x) + a.q.s * (b.p.y - a.p.y); - var y = -a.q.s * (b.p.x - a.p.x) + a.q.c * (b.p.y - a.p.y); - out.q.c = c; - out.q.s = s; - out.p.x = x; - out.p.y = y; - return out; +function detransformTransform(out, a2, b2) { + var c2 = a2.q.c * b2.q.c + a2.q.s * b2.q.s; + var s2 = a2.q.c * b2.q.s - a2.q.s * b2.q.c; + var x2 = a2.q.c * (b2.p.x - a2.p.x) + a2.q.s * (b2.p.y - a2.p.y); + var y = -a2.q.s * (b2.p.x - a2.p.x) + a2.q.c * (b2.p.y - a2.p.y); + out.q.c = c2; + out.q.s = s2; + out.p.x = x2; + out.p.y = y; + return out; } - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_sin$1 = Math.sin; -/** @internal */ var math_cos$1 = Math.cos; -/** @internal */ var math_atan2$1 = Math.atan2; -var Rot = /** @class */ (function () { - /** Initialize from an angle in radians. */ - function Rot(angle) { - if (!(this instanceof Rot)) { - return new Rot(angle); - } - if (typeof angle === "number") { - this.setAngle(angle); - } - else if (typeof angle === "object") { - this.setRot(angle); - } - else { - this.setIdentity(); - } - } - /** @hidden */ - Rot.neo = function (angle) { - var obj = Object.create(Rot.prototype); - obj.setAngle(angle); - return obj; - }; - Rot.clone = function (rot) { - var obj = Object.create(Rot.prototype); - obj.s = rot.s; - obj.c = rot.c; - return obj; - }; - Rot.identity = function () { - var obj = Object.create(Rot.prototype); - obj.s = 0.0; - obj.c = 1.0; - return obj; - }; - Rot.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Number.isFinite(obj.s) && Number.isFinite(obj.c); - }; - Rot.assert = function (o) { +var math_sin$1 = Math.sin; +var math_cos$1 = Math.cos; +var math_atan2$1 = Math.atan2; +var Rot = ( + /** @class */ + function() { + function Rot2(angle) { + if (!(this instanceof Rot2)) { + return new Rot2(angle); + } + if (typeof angle === "number") { + this.setAngle(angle); + } else if (typeof angle === "object") { + this.setRot(angle); + } else { + this.setIdentity(); + } + } + Rot2.neo = function(angle) { + var obj = Object.create(Rot2.prototype); + obj.setAngle(angle); + return obj; + }; + Rot2.clone = function(rot) { + var obj = Object.create(Rot2.prototype); + obj.s = rot.s; + obj.c = rot.c; + return obj; + }; + Rot2.identity = function() { + var obj = Object.create(Rot2.prototype); + obj.s = 0; + obj.c = 1; + return obj; + }; + Rot2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Number.isFinite(obj.s) && Number.isFinite(obj.c); }; - /** Set to the identity rotation. */ - Rot.prototype.setIdentity = function () { - this.s = 0.0; - this.c = 1.0; + Rot2.assert = function(o) { }; - Rot.prototype.set = function (angle) { - if (typeof angle === "object") { - this.s = angle.s; - this.c = angle.c; - } - else { - // TODO_ERIN optimize - this.s = math_sin$1(angle); - this.c = math_cos$1(angle); - } + Rot2.prototype.setIdentity = function() { + this.s = 0; + this.c = 1; }; - Rot.prototype.setRot = function (angle) { + Rot2.prototype.set = function(angle) { + if (typeof angle === "object") { this.s = angle.s; this.c = angle.c; - }; - /** Set using an angle in radians. */ - Rot.prototype.setAngle = function (angle) { - // TODO_ERIN optimize + } else { this.s = math_sin$1(angle); this.c = math_cos$1(angle); + } }; - /** Get the angle in radians. */ - Rot.prototype.getAngle = function () { - return math_atan2$1(this.s, this.c); - }; - /** Get the x-axis. */ - Rot.prototype.getXAxis = function () { - return Vec2.neo(this.c, this.s); - }; - /** Get the y-axis. */ - Rot.prototype.getYAxis = function () { - return Vec2.neo(-this.s, this.c); - }; - Rot.mul = function (rot, m) { - if ("c" in m && "s" in m) { - // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc] - // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc] - // s = qs * rc + qc * rs - // c = qc * rc - qs * rs - var qr = Rot.identity(); - qr.s = rot.s * m.c + rot.c * m.s; - qr.c = rot.c * m.c - rot.s * m.s; - return qr; - } - else if ("x" in m && "y" in m) { - return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y); - } - }; - /** Multiply two rotations: q * r */ - Rot.mulRot = function (rot, m) { - // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc] - // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc] - // s = qs * rc + qc * rs - // c = qc * rc - qs * rs - var qr = Rot.identity(); + Rot2.prototype.setRot = function(angle) { + this.s = angle.s; + this.c = angle.c; + }; + Rot2.prototype.setAngle = function(angle) { + this.s = math_sin$1(angle); + this.c = math_cos$1(angle); + }; + Rot2.prototype.getAngle = function() { + return math_atan2$1(this.s, this.c); + }; + Rot2.prototype.getXAxis = function() { + return Vec2.neo(this.c, this.s); + }; + Rot2.prototype.getYAxis = function() { + return Vec2.neo(-this.s, this.c); + }; + Rot2.mul = function(rot, m) { + if ("c" in m && "s" in m) { + var qr = Rot2.identity(); qr.s = rot.s * m.c + rot.c * m.s; qr.c = rot.c * m.c - rot.s * m.s; return qr; - }; - /** Rotate a vector */ - Rot.mulVec2 = function (rot, m) { + } else if ("x" in m && "y" in m) { return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y); + } + }; + Rot2.mulRot = function(rot, m) { + var qr = Rot2.identity(); + qr.s = rot.s * m.c + rot.c * m.s; + qr.c = rot.c * m.c - rot.s * m.s; + return qr; + }; + Rot2.mulVec2 = function(rot, m) { + return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y); }; - Rot.mulSub = function (rot, v, w) { - var x = rot.c * (v.x - w.x) - rot.s * (v.y - w.y); - var y = rot.s * (v.x - w.x) + rot.c * (v.y - w.y); - return Vec2.neo(x, y); - }; - Rot.mulT = function (rot, m) { - if ("c" in m && "s" in m) { - // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc] - // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc] - // s = qc * rs - qs * rc - // c = qc * rc + qs * rs - var qr = Rot.identity(); - qr.s = rot.c * m.s - rot.s * m.c; - qr.c = rot.c * m.c + rot.s * m.s; - return qr; - } - else if ("x" in m && "y" in m) { - return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y); - } - }; - /** Transpose multiply two rotations: qT * r */ - Rot.mulTRot = function (rot, m) { - // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc] - // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc] - // s = qc * rs - qs * rc - // c = qc * rc + qs * rs - var qr = Rot.identity(); + Rot2.mulSub = function(rot, v3, w) { + var x2 = rot.c * (v3.x - w.x) - rot.s * (v3.y - w.y); + var y = rot.s * (v3.x - w.x) + rot.c * (v3.y - w.y); + return Vec2.neo(x2, y); + }; + Rot2.mulT = function(rot, m) { + if ("c" in m && "s" in m) { + var qr = Rot2.identity(); qr.s = rot.c * m.s - rot.s * m.c; qr.c = rot.c * m.c + rot.s * m.s; return qr; - }; - /** Inverse rotate a vector */ - Rot.mulTVec2 = function (rot, m) { + } else if ("x" in m && "y" in m) { return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y); + } + }; + Rot2.mulTRot = function(rot, m) { + var qr = Rot2.identity(); + qr.s = rot.c * m.s - rot.s * m.c; + qr.c = rot.c * m.c + rot.s * m.s; + return qr; + }; + Rot2.mulTVec2 = function(rot, m) { + return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y); + }; + return Rot2; + }() +); +var math_atan2 = Math.atan2; +var math_PI$5 = Math.PI; +var temp$7 = vec2(0, 0); +var Sweep = ( + /** @class */ + function() { + function Sweep2() { + this.localCenter = Vec2.zero(); + this.c = Vec2.zero(); + this.a = 0; + this.alpha0 = 0; + this.c0 = Vec2.zero(); + this.a0 = 0; + } + Sweep2.prototype.recycle = function() { + zeroVec2(this.localCenter); + zeroVec2(this.c); + this.a = 0; + this.alpha0 = 0; + zeroVec2(this.c0); + this.a0 = 0; + }; + Sweep2.prototype.setTransform = function(xf2) { + transformVec2(temp$7, xf2, this.localCenter); + copyVec2(this.c, temp$7); + copyVec2(this.c0, temp$7); + this.a = this.a0 = math_atan2(xf2.q.s, xf2.q.c); + }; + Sweep2.prototype.setLocalCenter = function(localCenter2, xf2) { + copyVec2(this.localCenter, localCenter2); + transformVec2(temp$7, xf2, this.localCenter); + copyVec2(this.c, temp$7); + copyVec2(this.c0, temp$7); + }; + Sweep2.prototype.getTransform = function(xf2, beta) { + if (beta === void 0) { + beta = 0; + } + setRotAngle(xf2.q, (1 - beta) * this.a0 + beta * this.a); + combine2Vec2(xf2.p, 1 - beta, this.c0, beta, this.c); + minusVec2(xf2.p, rotVec2(temp$7, xf2.q, this.localCenter)); + }; + Sweep2.prototype.advance = function(alpha) { + var beta = (alpha - this.alpha0) / (1 - this.alpha0); + combine2Vec2(this.c0, beta, this.c, 1 - beta, this.c0); + this.a0 = beta * this.a + (1 - beta) * this.a0; + this.alpha0 = alpha; + }; + Sweep2.prototype.forward = function() { + this.a0 = this.a; + copyVec2(this.c0, this.c); + }; + Sweep2.prototype.normalize = function() { + var a0 = mod(this.a0, -math_PI$5, +math_PI$5); + this.a -= this.a0 - a0; + this.a0 = a0; + }; + Sweep2.prototype.set = function(that) { + copyVec2(this.localCenter, that.localCenter); + copyVec2(this.c, that.c); + this.a = that.a; + this.alpha0 = that.alpha0; + copyVec2(this.c0, that.c0); + this.a0 = that.a0; + }; + return Sweep2; + }() +); +var Transform = ( + /** @class */ + function() { + function Transform2(position, rotation2) { + if (!(this instanceof Transform2)) { + return new Transform2(position, rotation2); + } + this.p = Vec2.zero(); + this.q = Rot.identity(); + if (typeof position !== "undefined") { + this.p.setVec2(position); + } + if (typeof rotation2 !== "undefined") { + this.q.setAngle(rotation2); + } + } + Transform2.clone = function(xf2) { + var obj = Object.create(Transform2.prototype); + obj.p = Vec2.clone(xf2.p); + obj.q = Rot.clone(xf2.q); + return obj; + }; + Transform2.neo = function(position, rotation2) { + var obj = Object.create(Transform2.prototype); + obj.p = Vec2.clone(position); + obj.q = Rot.clone(rotation2); + return obj; + }; + Transform2.identity = function() { + var obj = Object.create(Transform2.prototype); + obj.p = Vec2.zero(); + obj.q = Rot.identity(); + return obj; + }; + Transform2.prototype.setIdentity = function() { + this.p.setZero(); + this.q.setIdentity(); + }; + Transform2.prototype.set = function(a2, b2) { + if (typeof b2 === "undefined") { + this.p.set(a2.p); + this.q.set(a2.q); + } else { + this.p.set(a2); + this.q.set(b2); + } + }; + Transform2.prototype.setNum = function(position, rotation2) { + this.p.setVec2(position); + this.q.setAngle(rotation2); + }; + Transform2.prototype.setTransform = function(xf2) { + this.p.setVec2(xf2.p); + this.q.setRot(xf2.q); + }; + Transform2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec2.isValid(obj.p) && Rot.isValid(obj.q); }; - return Rot; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_atan2 = Math.atan2; -/** @internal */ var math_PI$5 = Math.PI; -/** @internal */ var temp$7 = vec2(0, 0); -/** - * This describes the motion of a body/shape for TOI computation. Shapes are - * defined with respect to the body origin, which may not coincide with the - * center of mass. However, to support dynamics we must interpolate the center - * of mass position. - */ -var Sweep = /** @class */ (function () { - function Sweep() { - /** Local center of mass position */ - this.localCenter = Vec2.zero(); - /** World center position */ - this.c = Vec2.zero(); - /** World angle */ - this.a = 0; - /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */ - this.alpha0 = 0; - this.c0 = Vec2.zero(); - this.a0 = 0; - } - /** @internal */ - Sweep.prototype.recycle = function () { - zeroVec2(this.localCenter); - zeroVec2(this.c); - this.a = 0; - this.alpha0 = 0; - zeroVec2(this.c0); - this.a0 = 0; - }; - Sweep.prototype.setTransform = function (xf) { - transformVec2(temp$7, xf, this.localCenter); - copyVec2(this.c, temp$7); - copyVec2(this.c0, temp$7); - this.a = this.a0 = math_atan2(xf.q.s, xf.q.c); - }; - Sweep.prototype.setLocalCenter = function (localCenter, xf) { - copyVec2(this.localCenter, localCenter); - transformVec2(temp$7, xf, this.localCenter); - copyVec2(this.c, temp$7); - copyVec2(this.c0, temp$7); - }; - /** - * Get the interpolated transform at a specific time. - * - * @param xf - * @param beta A factor in [0,1], where 0 indicates alpha0 - */ - Sweep.prototype.getTransform = function (xf, beta) { - if (beta === void 0) { beta = 0; } - setRotAngle(xf.q, (1.0 - beta) * this.a0 + beta * this.a); - combine2Vec2(xf.p, (1.0 - beta), this.c0, beta, this.c); - // shift to origin - minusVec2(xf.p, rotVec2(temp$7, xf.q, this.localCenter)); - }; - /** - * Advance the sweep forward, yielding a new initial state. - * - * @param alpha The new initial time - */ - Sweep.prototype.advance = function (alpha) { - var beta = (alpha - this.alpha0) / (1.0 - this.alpha0); - combine2Vec2(this.c0, beta, this.c, 1 - beta, this.c0); - this.a0 = beta * this.a + (1 - beta) * this.a0; - this.alpha0 = alpha; - }; - Sweep.prototype.forward = function () { - this.a0 = this.a; - copyVec2(this.c0, this.c); - }; - /** - * normalize the angles in radians to be between -pi and pi. - */ - Sweep.prototype.normalize = function () { - var a0 = mod(this.a0, -math_PI$5, +math_PI$5); - this.a -= this.a0 - a0; - this.a0 = a0; - }; - Sweep.prototype.set = function (that) { - copyVec2(this.localCenter, that.localCenter); - copyVec2(this.c, that.c); - this.a = that.a; - this.alpha0 = that.alpha0; - copyVec2(this.c0, that.c0); - this.a0 = that.a0; - }; - return Sweep; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** - * A transform contains translation and rotation. It is used to represent the - * position and orientation of rigid frames. Initialize using a position vector - * and a rotation. - */ -var Transform = /** @class */ (function () { - function Transform(position, rotation) { - if (!(this instanceof Transform)) { - return new Transform(position, rotation); - } - this.p = Vec2.zero(); - this.q = Rot.identity(); - if (typeof position !== "undefined") { - this.p.setVec2(position); - } - if (typeof rotation !== "undefined") { - this.q.setAngle(rotation); - } - } - Transform.clone = function (xf) { - var obj = Object.create(Transform.prototype); - obj.p = Vec2.clone(xf.p); - obj.q = Rot.clone(xf.q); - return obj; - }; - /** @hidden */ - Transform.neo = function (position, rotation) { - var obj = Object.create(Transform.prototype); - obj.p = Vec2.clone(position); - obj.q = Rot.clone(rotation); - return obj; - }; - Transform.identity = function () { - var obj = Object.create(Transform.prototype); - obj.p = Vec2.zero(); - obj.q = Rot.identity(); - return obj; - }; - /** Set this to the identity transform */ - Transform.prototype.setIdentity = function () { - this.p.setZero(); - this.q.setIdentity(); - }; - Transform.prototype.set = function (a, b) { - if (typeof b === "undefined") { - this.p.set(a.p); - this.q.set(a.q); - } - else { - this.p.set(a); - this.q.set(b); - } - }; - /** Set position and angle */ - Transform.prototype.setNum = function (position, rotation) { - this.p.setVec2(position); - this.q.setAngle(rotation); + Transform2.assert = function(o) { }; - Transform.prototype.setTransform = function (xf) { - this.p.setVec2(xf.p); - this.q.setRot(xf.q); - }; - Transform.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; + Transform2.mul = function(a2, b2) { + if (Array.isArray(b2)) { + var arr = []; + for (var i = 0; i < b2.length; i++) { + arr[i] = Transform2.mul(a2, b2[i]); } - return Vec2.isValid(obj.p) && Rot.isValid(obj.q); + return arr; + } else if ("x" in b2 && "y" in b2) { + return Transform2.mulVec2(a2, b2); + } else if ("p" in b2 && "q" in b2) { + return Transform2.mulXf(a2, b2); + } + }; + Transform2.mulAll = function(a2, b2) { + var arr = []; + for (var i = 0; i < b2.length; i++) { + arr[i] = Transform2.mul(a2, b2[i]); + } + return arr; + }; + Transform2.mulFn = function(a2) { + return function(b2) { + return Transform2.mul(a2, b2); + }; + }; + Transform2.mulVec2 = function(a2, b2) { + var x2 = a2.q.c * b2.x - a2.q.s * b2.y + a2.p.x; + var y = a2.q.s * b2.x + a2.q.c * b2.y + a2.p.y; + return Vec2.neo(x2, y); + }; + Transform2.mulXf = function(a2, b2) { + var xf2 = Transform2.identity(); + xf2.q = Rot.mulRot(a2.q, b2.q); + xf2.p = Vec2.add(Rot.mulVec2(a2.q, b2.p), a2.p); + return xf2; + }; + Transform2.mulT = function(a2, b2) { + if ("x" in b2 && "y" in b2) { + return Transform2.mulTVec2(a2, b2); + } else if ("p" in b2 && "q" in b2) { + return Transform2.mulTXf(a2, b2); + } + }; + Transform2.mulTVec2 = function(a2, b2) { + var px = b2.x - a2.p.x; + var py = b2.y - a2.p.y; + var x2 = a2.q.c * px + a2.q.s * py; + var y = -a2.q.s * px + a2.q.c * py; + return Vec2.neo(x2, y); + }; + Transform2.mulTXf = function(a2, b2) { + var xf2 = Transform2.identity(); + xf2.q.setRot(Rot.mulTRot(a2.q, b2.q)); + xf2.p.setVec2(Rot.mulTVec2(a2.q, Vec2.sub(b2.p, a2.p))); + return xf2; + }; + return Transform2; + }() +); +var Velocity = ( + /** @class */ + /* @__PURE__ */ function() { + function Velocity2() { + this.v = Vec2.zero(); + this.w = 0; + } + return Velocity2; + }() +); +var math_sin = Math.sin; +var math_cos = Math.cos; +var Position = ( + /** @class */ + function() { + function Position2() { + this.c = Vec2.zero(); + this.a = 0; + } + Position2.prototype.getTransform = function(xf2, p) { + xf2.q.c = math_cos(this.a); + xf2.q.s = math_sin(this.a); + xf2.p.x = this.c.x - (xf2.q.c * p.x - xf2.q.s * p.y); + xf2.p.y = this.c.y - (xf2.q.s * p.x + xf2.q.c * p.y); + return xf2; + }; + return Position2; + }() +); +function getTransform(xf2, p, c2, a2) { + xf2.q.c = math_cos(a2); + xf2.q.s = math_sin(a2); + xf2.p.x = c2.x - (xf2.q.c * p.x - xf2.q.s * p.y); + xf2.p.y = c2.y - (xf2.q.s * p.x + xf2.q.c * p.y); + return xf2; +} +var Shape = ( + /** @class */ + function() { + function Shape2() { + this.style = {}; + this.appData = {}; + } + Shape2.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return typeof obj.m_type === "string" && typeof obj.m_radius === "number"; + }; + return Shape2; + }() +); +var synchronize_aabb1 = new AABB(); +var synchronize_aabb2 = new AABB(); +var displacement = vec2(0, 0); +var FixtureDefDefault = { + userData: null, + friction: 0.2, + restitution: 0, + density: 0, + isSensor: false, + filterGroupIndex: 0, + filterCategoryBits: 1, + filterMaskBits: 65535 +}; +var FixtureProxy = ( + /** @class */ + /* @__PURE__ */ function() { + function FixtureProxy2(fixture, childIndex) { + this.aabb = new AABB(); + this.fixture = fixture; + this.childIndex = childIndex; + this.proxyId; + } + return FixtureProxy2; + }() +); +var Fixture = ( + /** @class */ + function() { + function Fixture2(body, shape, def) { + this.style = {}; + this.appData = {}; + if (shape.shape) { + def = shape; + shape = shape.shape; + } else if (typeof def === "number") { + def = { density: def }; + } + def = options(def, FixtureDefDefault); + this.m_body = body; + this.m_friction = def.friction; + this.m_restitution = def.restitution; + this.m_density = def.density; + this.m_isSensor = def.isSensor; + this.m_filterGroupIndex = def.filterGroupIndex; + this.m_filterCategoryBits = def.filterCategoryBits; + this.m_filterMaskBits = def.filterMaskBits; + this.m_shape = shape; + this.m_next = null; + this.m_proxies = []; + this.m_proxyCount = 0; + var childCount = this.m_shape.getChildCount(); + for (var i = 0; i < childCount; ++i) { + this.m_proxies[i] = new FixtureProxy(this, i); + } + this.m_userData = def.userData; + } + Fixture2.prototype._reset = function() { + var body = this.getBody(); + var broadPhase = body.m_world.m_broadPhase; + this.destroyProxies(broadPhase); + if (this.m_shape._reset) { + this.m_shape._reset(); + } + var childCount = this.m_shape.getChildCount(); + for (var i = 0; i < childCount; ++i) { + this.m_proxies[i] = new FixtureProxy(this, i); + } + this.createProxies(broadPhase, body.m_xf); + body.resetMassData(); + }; + Fixture2.prototype._serialize = function() { + return { + friction: this.m_friction, + restitution: this.m_restitution, + density: this.m_density, + isSensor: this.m_isSensor, + filterGroupIndex: this.m_filterGroupIndex, + filterCategoryBits: this.m_filterCategoryBits, + filterMaskBits: this.m_filterMaskBits, + shape: this.m_shape + }; + }; + Fixture2._deserialize = function(data, body, restore) { + var shape = restore(Shape, data.shape); + var fixture = shape && new Fixture2(body, shape, data); + return fixture; + }; + Fixture2.prototype.getType = function() { + return this.m_shape.m_type; + }; + Fixture2.prototype.getShape = function() { + return this.m_shape; + }; + Fixture2.prototype.isSensor = function() { + return this.m_isSensor; + }; + Fixture2.prototype.setSensor = function(sensor) { + if (sensor != this.m_isSensor) { + this.m_body.setAwake(true); + this.m_isSensor = sensor; + } + }; + Fixture2.prototype.getUserData = function() { + return this.m_userData; + }; + Fixture2.prototype.setUserData = function(data) { + this.m_userData = data; + }; + Fixture2.prototype.getBody = function() { + return this.m_body; + }; + Fixture2.prototype.getNext = function() { + return this.m_next; + }; + Fixture2.prototype.getDensity = function() { + return this.m_density; + }; + Fixture2.prototype.setDensity = function(density) { + this.m_density = density; + }; + Fixture2.prototype.getFriction = function() { + return this.m_friction; + }; + Fixture2.prototype.setFriction = function(friction) { + this.m_friction = friction; + }; + Fixture2.prototype.getRestitution = function() { + return this.m_restitution; + }; + Fixture2.prototype.setRestitution = function(restitution) { + this.m_restitution = restitution; + }; + Fixture2.prototype.testPoint = function(p) { + return this.m_shape.testPoint(this.m_body.getTransform(), p); + }; + Fixture2.prototype.rayCast = function(output2, input2, childIndex) { + return this.m_shape.rayCast(output2, input2, this.m_body.getTransform(), childIndex); + }; + Fixture2.prototype.getMassData = function(massData) { + this.m_shape.computeMass(massData, this.m_density); + }; + Fixture2.prototype.getAABB = function(childIndex) { + return this.m_proxies[childIndex].aabb; + }; + Fixture2.prototype.createProxies = function(broadPhase, xf2) { + this.m_proxyCount = this.m_shape.getChildCount(); + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i]; + this.m_shape.computeAABB(proxy.aabb, xf2, i); + proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy); + } + }; + Fixture2.prototype.destroyProxies = function(broadPhase) { + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i]; + broadPhase.destroyProxy(proxy.proxyId); + proxy.proxyId = null; + } + this.m_proxyCount = 0; + }; + Fixture2.prototype.synchronize = function(broadPhase, xf1, xf2) { + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i]; + this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex); + this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex); + proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2); + subVec2(displacement, xf2.p, xf1.p); + broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement); + } + }; + Fixture2.prototype.setFilterData = function(filter) { + this.m_filterGroupIndex = filter.groupIndex; + this.m_filterCategoryBits = filter.categoryBits; + this.m_filterMaskBits = filter.maskBits; + this.refilter(); + }; + Fixture2.prototype.getFilterGroupIndex = function() { + return this.m_filterGroupIndex; }; - Transform.assert = function (o) { + Fixture2.prototype.setFilterGroupIndex = function(groupIndex) { + this.m_filterGroupIndex = groupIndex; + this.refilter(); }; - // static mul(a: Transform, b: Vec2Value[]): Vec2[]; - // static mul(a: Transform, b: Transform[]): Transform[]; - Transform.mul = function (a, b) { - if (Array.isArray(b)) { - var arr = []; - for (var i = 0; i < b.length; i++) { - arr[i] = Transform.mul(a, b[i]); - } - return arr; - } - else if ("x" in b && "y" in b) { - return Transform.mulVec2(a, b); - } - else if ("p" in b && "q" in b) { - return Transform.mulXf(a, b); - } + Fixture2.prototype.getFilterCategoryBits = function() { + return this.m_filterCategoryBits; }; - Transform.mulAll = function (a, b) { - var arr = []; - for (var i = 0; i < b.length; i++) { - arr[i] = Transform.mul(a, b[i]); - } - return arr; + Fixture2.prototype.setFilterCategoryBits = function(categoryBits) { + this.m_filterCategoryBits = categoryBits; + this.refilter(); }; - /** @hidden @deprecated */ - Transform.mulFn = function (a) { - return function (b) { - return Transform.mul(a, b); - }; + Fixture2.prototype.getFilterMaskBits = function() { + return this.m_filterMaskBits; }; - Transform.mulVec2 = function (a, b) { - var x = (a.q.c * b.x - a.q.s * b.y) + a.p.x; - var y = (a.q.s * b.x + a.q.c * b.y) + a.p.y; - return Vec2.neo(x, y); - }; - Transform.mulXf = function (a, b) { - // v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p - // = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p - var xf = Transform.identity(); - xf.q = Rot.mulRot(a.q, b.q); - xf.p = Vec2.add(Rot.mulVec2(a.q, b.p), a.p); - return xf; - }; - Transform.mulT = function (a, b) { - if ("x" in b && "y" in b) { - return Transform.mulTVec2(a, b); - } - else if ("p" in b && "q" in b) { - return Transform.mulTXf(a, b); - } - }; - Transform.mulTVec2 = function (a, b) { - var px = b.x - a.p.x; - var py = b.y - a.p.y; - var x = (a.q.c * px + a.q.s * py); - var y = (-a.q.s * px + a.q.c * py); - return Vec2.neo(x, y); - }; - Transform.mulTXf = function (a, b) { - // v2 = A.q' * (B.q * v1 + B.p - A.p) - // = A.q' * B.q * v1 + A.q' * (B.p - A.p) - var xf = Transform.identity(); - xf.q.setRot(Rot.mulTRot(a.q, b.q)); - xf.p.setVec2(Rot.mulTVec2(a.q, Vec2.sub(b.p, a.p))); - return xf; - }; - return Transform; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -var Velocity = /** @class */ (function () { - function Velocity() { - /** linear */ - this.v = Vec2.zero(); - /** angular */ - this.w = 0; - } - return Velocity; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_sin = Math.sin; -/** @internal */ var math_cos = Math.cos; -var Position = /** @class */ (function () { - function Position() { - /** location */ - this.c = Vec2.zero(); - /** angle */ - this.a = 0; - } - // todo: cache sin/cos - Position.prototype.getTransform = function (xf, p) { - // xf.q = rotation(this.a); - // xf.p = this.c - xf.q * p - xf.q.c = math_cos(this.a); - xf.q.s = math_sin(this.a); - xf.p.x = this.c.x - (xf.q.c * p.x - xf.q.s * p.y); - xf.p.y = this.c.y - (xf.q.s * p.x + xf.q.c * p.y); - return xf; - }; - return Position; -}()); -function getTransform(xf, p, c, a) { - // xf.q = rotation(a); - // xf.p = this.c - xf.q * p - xf.q.c = math_cos(a); - xf.q.s = math_sin(a); - xf.p.x = c.x - (xf.q.c * p.x - xf.q.s * p.y); - xf.p.y = c.y - (xf.q.s * p.x + xf.q.c * p.y); - return xf; -} - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -// todo make shape an interface -/** - * A shape is used for collision detection. You can create a shape however you - * like. Shapes used for simulation in World are created automatically when a - * Fixture is created. Shapes may encapsulate one or more child shapes. - */ -var Shape = /** @class */ (function () { - function Shape() { - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - } - Shape.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return typeof obj.m_type === "string" && typeof obj.m_radius === "number"; + Fixture2.prototype.setFilterMaskBits = function(maskBits) { + this.m_filterMaskBits = maskBits; + this.refilter(); }; - return Shape; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var synchronize_aabb1 = new AABB(); -/** @internal */ var synchronize_aabb2 = new AABB(); -/** @internal */ var displacement = vec2(0, 0); -/** @internal */ var FixtureDefDefault = { - userData: null, - friction: 0.2, - restitution: 0.0, - density: 0.0, - isSensor: false, - filterGroupIndex: 0, - filterCategoryBits: 0x0001, - filterMaskBits: 0xFFFF + Fixture2.prototype.refilter = function() { + if (this.m_body == null) { + return; + } + var edge = this.m_body.getContactList(); + while (edge) { + var contact = edge.contact; + var fixtureA = contact.getFixtureA(); + var fixtureB = contact.getFixtureB(); + if (fixtureA == this || fixtureB == this) { + contact.flagForFiltering(); + } + edge = edge.next; + } + var world = this.m_body.getWorld(); + if (world == null) { + return; + } + var broadPhase = world.m_broadPhase; + for (var i = 0; i < this.m_proxyCount; ++i) { + broadPhase.touchProxy(this.m_proxies[i].proxyId); + } + }; + Fixture2.prototype.shouldCollide = function(that) { + if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) { + return that.m_filterGroupIndex > 0; + } + var collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0; + var collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0; + var collide = collideA && collideB; + return collide; + }; + return Fixture2; + }() +); +var STATIC = "static"; +var KINEMATIC = "kinematic"; +var DYNAMIC = "dynamic"; +var oldCenter = vec2(0, 0); +var localCenter = vec2(0, 0); +var shift = vec2(0, 0); +var temp$6 = vec2(0, 0); +var xf$2 = transform(0, 0, 0); +var BodyDefDefault = { + type: STATIC, + position: Vec2.zero(), + angle: 0, + linearVelocity: Vec2.zero(), + angularVelocity: 0, + linearDamping: 0, + angularDamping: 0, + fixedRotation: false, + bullet: false, + gravityScale: 1, + allowSleep: true, + awake: true, + active: true, + userData: null }; -/** - * This proxy is used internally to connect shape children to the broad-phase. - */ -var FixtureProxy = /** @class */ (function () { - function FixtureProxy(fixture, childIndex) { - this.aabb = new AABB(); - this.fixture = fixture; - this.childIndex = childIndex; - this.proxyId; - } - return FixtureProxy; -}()); -/** - * A fixture is used to attach a shape to a body for collision detection. A - * fixture inherits its transform from its parent. Fixtures hold additional - * non-geometric data such as friction, collision filters, etc. - * - * To create a new Fixture use {@link Body.createFixture}. - */ -var Fixture = /** @class */ (function () { - /** @internal */ - function Fixture(body, shape, def) { - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - if (shape.shape) { - def = shape; - shape = shape.shape; - } - else if (typeof def === "number") { - def = { density: def }; - } - def = options(def, FixtureDefDefault); - this.m_body = body; - this.m_friction = def.friction; - this.m_restitution = def.restitution; - this.m_density = def.density; - this.m_isSensor = def.isSensor; - this.m_filterGroupIndex = def.filterGroupIndex; - this.m_filterCategoryBits = def.filterCategoryBits; - this.m_filterMaskBits = def.filterMaskBits; - // TODO validate shape - this.m_shape = shape; // .clone(); - this.m_next = null; - this.m_proxies = []; - this.m_proxyCount = 0; - // fixture proxies are created here, - // but they are activate in when a fixture is added to body - var childCount = this.m_shape.getChildCount(); - for (var i = 0; i < childCount; ++i) { - this.m_proxies[i] = new FixtureProxy(this, i); - } - this.m_userData = def.userData; - } - /** @hidden Re-setup fixture. */ - Fixture.prototype._reset = function () { - var body = this.getBody(); - var broadPhase = body.m_world.m_broadPhase; - this.destroyProxies(broadPhase); - if (this.m_shape._reset) { - this.m_shape._reset(); - } - var childCount = this.m_shape.getChildCount(); - for (var i = 0; i < childCount; ++i) { - this.m_proxies[i] = new FixtureProxy(this, i); - } - this.createProxies(broadPhase, body.m_xf); - body.resetMassData(); - }; - /** @internal */ - Fixture.prototype._serialize = function () { - return { - friction: this.m_friction, - restitution: this.m_restitution, - density: this.m_density, - isSensor: this.m_isSensor, - filterGroupIndex: this.m_filterGroupIndex, - filterCategoryBits: this.m_filterCategoryBits, - filterMaskBits: this.m_filterMaskBits, - shape: this.m_shape, - }; +var Body = ( + /** @class */ + function() { + function Body2(world, def) { + this.style = {}; + this.appData = {}; + def = options(def, BodyDefDefault); + this.m_world = world; + this.m_awakeFlag = def.awake; + this.m_autoSleepFlag = def.allowSleep; + this.m_bulletFlag = def.bullet; + this.m_fixedRotationFlag = def.fixedRotation; + this.m_activeFlag = def.active; + this.m_islandFlag = false; + this.m_toiFlag = false; + this.m_userData = def.userData; + this.m_type = def.type; + if (this.m_type == DYNAMIC) { + this.m_mass = 1; + this.m_invMass = 1; + } else { + this.m_mass = 0; + this.m_invMass = 0; + } + this.m_I = 0; + this.m_invI = 0; + this.m_xf = Transform.identity(); + this.m_xf.p.setVec2(def.position); + this.m_xf.q.setAngle(def.angle); + this.m_sweep = new Sweep(); + this.m_sweep.setTransform(this.m_xf); + this.c_velocity = new Velocity(); + this.c_position = new Position(); + this.m_force = Vec2.zero(); + this.m_torque = 0; + this.m_linearVelocity = Vec2.clone(def.linearVelocity); + this.m_angularVelocity = def.angularVelocity; + this.m_linearDamping = def.linearDamping; + this.m_angularDamping = def.angularDamping; + this.m_gravityScale = def.gravityScale; + this.m_sleepTime = 0; + this.m_jointList = null; + this.m_contactList = null; + this.m_fixtureList = null; + this.m_prev = null; + this.m_next = null; + this.m_destroyed = false; + } + Body2.prototype._serialize = function() { + var fixtures = []; + for (var f = this.m_fixtureList; f; f = f.m_next) { + fixtures.push(f); + } + return { + type: this.m_type, + bullet: this.m_bulletFlag, + position: this.m_xf.p, + angle: this.m_xf.q.getAngle(), + linearVelocity: this.m_linearVelocity, + angularVelocity: this.m_angularVelocity, + fixtures + }; + }; + Body2._deserialize = function(data, world, restore) { + var body = new Body2(world, data); + if (data.fixtures) { + for (var i = data.fixtures.length - 1; i >= 0; i--) { + var fixture = restore(Fixture, data.fixtures[i], body); + body._addFixture(fixture); + } + } + return body; + }; + Body2.prototype.isWorldLocked = function() { + return this.m_world && this.m_world.isLocked() ? true : false; + }; + Body2.prototype.getWorld = function() { + return this.m_world; + }; + Body2.prototype.getNext = function() { + return this.m_next; + }; + Body2.prototype.setUserData = function(data) { + this.m_userData = data; + }; + Body2.prototype.getUserData = function() { + return this.m_userData; + }; + Body2.prototype.getFixtureList = function() { + return this.m_fixtureList; + }; + Body2.prototype.getJointList = function() { + return this.m_jointList; + }; + Body2.prototype.getContactList = function() { + return this.m_contactList; + }; + Body2.prototype.isStatic = function() { + return this.m_type == STATIC; + }; + Body2.prototype.isDynamic = function() { + return this.m_type == DYNAMIC; + }; + Body2.prototype.isKinematic = function() { + return this.m_type == KINEMATIC; + }; + Body2.prototype.setStatic = function() { + this.setType(STATIC); + return this; + }; + Body2.prototype.setDynamic = function() { + this.setType(DYNAMIC); + return this; + }; + Body2.prototype.setKinematic = function() { + this.setType(KINEMATIC); + return this; + }; + Body2.prototype.getType = function() { + return this.m_type; + }; + Body2.prototype.setType = function(type) { + if (this.isWorldLocked() == true) { + return; + } + if (this.m_type == type) { + return; + } + this.m_type = type; + this.resetMassData(); + if (this.m_type == STATIC) { + this.m_linearVelocity.setZero(); + this.m_angularVelocity = 0; + this.m_sweep.forward(); + this.synchronizeFixtures(); + } + this.setAwake(true); + this.m_force.setZero(); + this.m_torque = 0; + var ce = this.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.m_world.destroyContact(ce0.contact); + } + this.m_contactList = null; + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + for (var i = 0; i < f.m_proxyCount; ++i) { + broadPhase.touchProxy(f.m_proxies[i].proxyId); + } + } + }; + Body2.prototype.isBullet = function() { + return this.m_bulletFlag; + }; + Body2.prototype.setBullet = function(flag) { + this.m_bulletFlag = !!flag; + }; + Body2.prototype.isSleepingAllowed = function() { + return this.m_autoSleepFlag; + }; + Body2.prototype.setSleepingAllowed = function(flag) { + this.m_autoSleepFlag = !!flag; + if (this.m_autoSleepFlag == false) { + this.setAwake(true); + } + }; + Body2.prototype.isAwake = function() { + return this.m_awakeFlag; + }; + Body2.prototype.setAwake = function(flag) { + if (flag) { + this.m_awakeFlag = true; + this.m_sleepTime = 0; + } else { + this.m_awakeFlag = false; + this.m_sleepTime = 0; + this.m_linearVelocity.setZero(); + this.m_angularVelocity = 0; + this.m_force.setZero(); + this.m_torque = 0; + } }; - /** @internal */ - Fixture._deserialize = function (data, body, restore) { - var shape = restore(Shape, data.shape); - var fixture = shape && new Fixture(body, shape, data); - return fixture; - }; - /** - * Get the type of the child shape. You can use this to down cast to the - * concrete shape. - */ - Fixture.prototype.getType = function () { - return this.m_shape.m_type; - }; - /** - * Get the child shape. You can modify the child shape, however you should not - * change the number of vertices because this will crash some collision caching - * mechanisms. Manipulating the shape may lead to non-physical behavior. - */ - Fixture.prototype.getShape = function () { - return this.m_shape; - }; - /** - * A sensor shape collects contact information but never generates a collision - * response. - */ - Fixture.prototype.isSensor = function () { - return this.m_isSensor; - }; - /** - * Set if this fixture is a sensor. - */ - Fixture.prototype.setSensor = function (sensor) { - if (sensor != this.m_isSensor) { - this.m_body.setAwake(true); - this.m_isSensor = sensor; - } - }; - // /** - // * Get the contact filtering data. - // */ - // getFilterData() { - // return this.m_filter; - // } - /** - * Get the user data that was assigned in the fixture definition. Use this to - * store your application specific data. - */ - Fixture.prototype.getUserData = function () { - return this.m_userData; - }; - /** - * Set the user data. Use this to store your application specific data. - */ - Fixture.prototype.setUserData = function (data) { - this.m_userData = data; - }; - /** - * Get the parent body of this fixture. This is null if the fixture is not - * attached. - */ - Fixture.prototype.getBody = function () { - return this.m_body; - }; - /** - * Get the next fixture in the parent body's fixture list. - */ - Fixture.prototype.getNext = function () { - return this.m_next; - }; - /** - * Get the density of this fixture. - */ - Fixture.prototype.getDensity = function () { - return this.m_density; - }; - /** - * Set the density of this fixture. This will _not_ automatically adjust the - * mass of the body. You must call Body.resetMassData to update the body's mass. - */ - Fixture.prototype.setDensity = function (density) { - this.m_density = density; - }; - /** - * Get the coefficient of friction, usually in the range [0,1]. - */ - Fixture.prototype.getFriction = function () { - return this.m_friction; - }; - /** - * Set the coefficient of friction. This will not change the friction of - * existing contacts. - */ - Fixture.prototype.setFriction = function (friction) { - this.m_friction = friction; - }; - /** - * Get the coefficient of restitution. - */ - Fixture.prototype.getRestitution = function () { - return this.m_restitution; - }; - /** - * Set the coefficient of restitution. This will not change the restitution of - * existing contacts. - */ - Fixture.prototype.setRestitution = function (restitution) { - this.m_restitution = restitution; - }; - /** - * Test a point in world coordinates for containment in this fixture. - */ - Fixture.prototype.testPoint = function (p) { - return this.m_shape.testPoint(this.m_body.getTransform(), p); - }; - /** - * Cast a ray against this shape. - */ - Fixture.prototype.rayCast = function (output, input, childIndex) { - return this.m_shape.rayCast(output, input, this.m_body.getTransform(), childIndex); - }; - /** - * Get the mass data for this fixture. The mass data is based on the density and - * the shape. The rotational inertia is about the shape's origin. This operation - * may be expensive. - */ - Fixture.prototype.getMassData = function (massData) { - this.m_shape.computeMass(massData, this.m_density); - }; - /** - * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a - * more accurate AABB, compute it using the shape and the body transform. - */ - Fixture.prototype.getAABB = function (childIndex) { - return this.m_proxies[childIndex].aabb; - }; - /** - * These support body activation/deactivation. - */ - Fixture.prototype.createProxies = function (broadPhase, xf) { - // Create proxies in the broad-phase. - this.m_proxyCount = this.m_shape.getChildCount(); - for (var i = 0; i < this.m_proxyCount; ++i) { - var proxy = this.m_proxies[i]; - this.m_shape.computeAABB(proxy.aabb, xf, i); - proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy); - } - }; - Fixture.prototype.destroyProxies = function (broadPhase) { - // Destroy proxies in the broad-phase. - for (var i = 0; i < this.m_proxyCount; ++i) { - var proxy = this.m_proxies[i]; - broadPhase.destroyProxy(proxy.proxyId); - proxy.proxyId = null; - } - this.m_proxyCount = 0; - }; - /** - * Updates this fixture proxy in broad-phase (with combined AABB of current and - * next transformation). - */ - Fixture.prototype.synchronize = function (broadPhase, xf1, xf2) { - for (var i = 0; i < this.m_proxyCount; ++i) { - var proxy = this.m_proxies[i]; - // Compute an AABB that covers the swept shape (may miss some rotation - // effect). - this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex); - this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex); - proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2); - subVec2(displacement, xf2.p, xf1.p); - broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement); - } - }; - /** - * Set the contact filtering data. This will not update contacts until the next - * time step when either parent body is active and awake. This automatically - * calls refilter. - */ - Fixture.prototype.setFilterData = function (filter) { - this.m_filterGroupIndex = filter.groupIndex; - this.m_filterCategoryBits = filter.categoryBits; - this.m_filterMaskBits = filter.maskBits; - this.refilter(); - }; - Fixture.prototype.getFilterGroupIndex = function () { - return this.m_filterGroupIndex; - }; - Fixture.prototype.setFilterGroupIndex = function (groupIndex) { - this.m_filterGroupIndex = groupIndex; - this.refilter(); - }; - Fixture.prototype.getFilterCategoryBits = function () { - return this.m_filterCategoryBits; - }; - Fixture.prototype.setFilterCategoryBits = function (categoryBits) { - this.m_filterCategoryBits = categoryBits; - this.refilter(); - }; - Fixture.prototype.getFilterMaskBits = function () { - return this.m_filterMaskBits; - }; - Fixture.prototype.setFilterMaskBits = function (maskBits) { - this.m_filterMaskBits = maskBits; - this.refilter(); - }; - /** - * Call this if you want to establish collision that was previously disabled by - * ContactFilter. - */ - Fixture.prototype.refilter = function () { - if (this.m_body == null) { - return; + Body2.prototype.isActive = function() { + return this.m_activeFlag; + }; + Body2.prototype.setActive = function(flag) { + if (flag == this.m_activeFlag) { + return; + } + this.m_activeFlag = !!flag; + if (this.m_activeFlag) { + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.createProxies(broadPhase, this.m_xf); } - // Flag associated contacts for filtering. - var edge = this.m_body.getContactList(); - while (edge) { - var contact = edge.contact; - var fixtureA = contact.getFixtureA(); - var fixtureB = contact.getFixtureB(); - if (fixtureA == this || fixtureB == this) { - contact.flagForFiltering(); - } - edge = edge.next; + this.m_world.m_newFixture = true; + } else { + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.destroyProxies(broadPhase); } - var world = this.m_body.getWorld(); - if (world == null) { - return; + var ce = this.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.m_world.destroyContact(ce0.contact); } - // Touch each proxy so that new pairs may be created - var broadPhase = world.m_broadPhase; - for (var i = 0; i < this.m_proxyCount; ++i) { - broadPhase.touchProxy(this.m_proxies[i].proxyId); - } - }; - /** - * Implement this method to provide collision filtering, if you want finer - * control over contact creation. - * - * Return true if contact calculations should be performed between these two - * fixtures. - * - * Warning: for performance reasons this is only called when the AABBs begin to - * overlap. - */ - Fixture.prototype.shouldCollide = function (that) { - if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) { - return that.m_filterGroupIndex > 0; - } - var collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0; - var collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0; - var collide = collideA && collideB; - return collide; - }; - return Fixture; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var STATIC = "static"; -/** @internal */ var KINEMATIC = "kinematic"; -/** @internal */ var DYNAMIC = "dynamic"; -/** @internal */ var oldCenter = vec2(0, 0); -/** @internal */ var localCenter = vec2(0, 0); -/** @internal */ var shift = vec2(0, 0); -/** @internal */ var temp$6 = vec2(0, 0); -/** @internal */ var xf$2 = transform(0, 0, 0); -/** @internal */ var BodyDefDefault = { - type: STATIC, - position: Vec2.zero(), - angle: 0.0, - linearVelocity: Vec2.zero(), - angularVelocity: 0.0, - linearDamping: 0.0, - angularDamping: 0.0, - fixedRotation: false, - bullet: false, - gravityScale: 1.0, - allowSleep: true, - awake: true, - active: true, - userData: null -}; -/** - * A rigid body composed of one or more fixtures. - * - * To create a new Body use {@link World.createBody}. - */ -var Body = /** @class */ (function () { - /** @internal */ - function Body(world, def) { - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - def = options(def, BodyDefDefault); - this.m_world = world; - this.m_awakeFlag = def.awake; - this.m_autoSleepFlag = def.allowSleep; - this.m_bulletFlag = def.bullet; - this.m_fixedRotationFlag = def.fixedRotation; - this.m_activeFlag = def.active; - this.m_islandFlag = false; - this.m_toiFlag = false; - this.m_userData = def.userData; - this.m_type = def.type; - if (this.m_type == DYNAMIC) { - this.m_mass = 1.0; - this.m_invMass = 1.0; - } - else { - this.m_mass = 0.0; - this.m_invMass = 0.0; - } - // Rotational inertia about the center of mass. - this.m_I = 0.0; - this.m_invI = 0.0; - // the body origin transform - this.m_xf = Transform.identity(); - this.m_xf.p.setVec2(def.position); - this.m_xf.q.setAngle(def.angle); - // the swept motion for CCD - this.m_sweep = new Sweep(); - this.m_sweep.setTransform(this.m_xf); - // position and velocity correction - this.c_velocity = new Velocity(); - this.c_position = new Position(); - this.m_force = Vec2.zero(); - this.m_torque = 0.0; - this.m_linearVelocity = Vec2.clone(def.linearVelocity); - this.m_angularVelocity = def.angularVelocity; - this.m_linearDamping = def.linearDamping; - this.m_angularDamping = def.angularDamping; - this.m_gravityScale = def.gravityScale; - this.m_sleepTime = 0.0; - this.m_jointList = null; this.m_contactList = null; - this.m_fixtureList = null; - this.m_prev = null; - this.m_next = null; - this.m_destroyed = false; - } - /** @internal */ - Body.prototype._serialize = function () { - var fixtures = []; - for (var f = this.m_fixtureList; f; f = f.m_next) { - fixtures.push(f); - } - return { - type: this.m_type, - bullet: this.m_bulletFlag, - position: this.m_xf.p, - angle: this.m_xf.q.getAngle(), - linearVelocity: this.m_linearVelocity, - angularVelocity: this.m_angularVelocity, - fixtures: fixtures, - }; + } }; - /** @internal */ - Body._deserialize = function (data, world, restore) { - var body = new Body(world, data); - if (data.fixtures) { - for (var i = data.fixtures.length - 1; i >= 0; i--) { - var fixture = restore(Fixture, data.fixtures[i], body); - body._addFixture(fixture); - } - } - return body; + Body2.prototype.isFixedRotation = function() { + return this.m_fixedRotationFlag; }; - Body.prototype.isWorldLocked = function () { - return this.m_world && this.m_world.isLocked() ? true : false; + Body2.prototype.setFixedRotation = function(flag) { + if (this.m_fixedRotationFlag == flag) { + return; + } + this.m_fixedRotationFlag = !!flag; + this.m_angularVelocity = 0; + this.resetMassData(); }; - Body.prototype.getWorld = function () { - return this.m_world; + Body2.prototype.getTransform = function() { + return this.m_xf; }; - Body.prototype.getNext = function () { - return this.m_next; + Body2.prototype.setTransform = function(position, angle) { + if (this.isWorldLocked() == true) { + return; + } + this.m_xf.setNum(position, angle); + this.m_sweep.setTransform(this.m_xf); + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.synchronize(broadPhase, this.m_xf, this.m_xf); + } + this.setAwake(true); }; - Body.prototype.setUserData = function (data) { - this.m_userData = data; + Body2.prototype.synchronizeTransform = function() { + this.m_sweep.getTransform(this.m_xf, 1); }; - Body.prototype.getUserData = function () { - return this.m_userData; + Body2.prototype.synchronizeFixtures = function() { + this.m_sweep.getTransform(xf$2, 0); + var broadPhase = this.m_world.m_broadPhase; + for (var f = this.m_fixtureList; f; f = f.m_next) { + f.synchronize(broadPhase, xf$2, this.m_xf); + } }; - Body.prototype.getFixtureList = function () { - return this.m_fixtureList; + Body2.prototype.advance = function(alpha) { + this.m_sweep.advance(alpha); + copyVec2(this.m_sweep.c, this.m_sweep.c0); + this.m_sweep.a = this.m_sweep.a0; + this.m_sweep.getTransform(this.m_xf, 1); }; - Body.prototype.getJointList = function () { - return this.m_jointList; + Body2.prototype.getPosition = function() { + return this.m_xf.p; }; - /** - * Warning: this list changes during the time step and you may miss some - * collisions if you don't use ContactListener. - */ - Body.prototype.getContactList = function () { - return this.m_contactList; + Body2.prototype.setPosition = function(p) { + this.setTransform(p, this.m_sweep.a); }; - Body.prototype.isStatic = function () { - return this.m_type == STATIC; + Body2.prototype.getAngle = function() { + return this.m_sweep.a; }; - Body.prototype.isDynamic = function () { - return this.m_type == DYNAMIC; + Body2.prototype.setAngle = function(angle) { + this.setTransform(this.m_xf.p, angle); }; - Body.prototype.isKinematic = function () { - return this.m_type == KINEMATIC; + Body2.prototype.getWorldCenter = function() { + return this.m_sweep.c; }; - /** - * This will alter the mass and velocity. - */ - Body.prototype.setStatic = function () { - this.setType(STATIC); - return this; + Body2.prototype.getLocalCenter = function() { + return this.m_sweep.localCenter; }; - Body.prototype.setDynamic = function () { - this.setType(DYNAMIC); - return this; + Body2.prototype.getLinearVelocity = function() { + return this.m_linearVelocity; }; - Body.prototype.setKinematic = function () { - this.setType(KINEMATIC); - return this; + Body2.prototype.getLinearVelocityFromWorldPoint = function(worldPoint) { + var localCenter2 = Vec2.sub(worldPoint, this.m_sweep.c); + return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity, localCenter2)); }; - /** - * Get the type of the body. - */ - Body.prototype.getType = function () { - return this.m_type; - }; - /** - * Set the type of the body to "static", "kinematic" or "dynamic". - * @param type The type of the body. - */ - Body.prototype.setType = function (type) { - if (this.isWorldLocked() == true) { - return; - } - if (this.m_type == type) { - return; - } - this.m_type = type; - this.resetMassData(); - if (this.m_type == STATIC) { - this.m_linearVelocity.setZero(); - this.m_angularVelocity = 0.0; - this.m_sweep.forward(); - this.synchronizeFixtures(); - } + Body2.prototype.getLinearVelocityFromLocalPoint = function(localPoint) { + return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint)); + }; + Body2.prototype.setLinearVelocity = function(v3) { + if (this.m_type == STATIC) { + return; + } + if (Vec2.dot(v3, v3) > 0) { this.setAwake(true); - this.m_force.setZero(); - this.m_torque = 0.0; - // Delete the attached contacts. - var ce = this.m_contactList; - while (ce) { - var ce0 = ce; - ce = ce.next; - this.m_world.destroyContact(ce0.contact); - } - this.m_contactList = null; - // Touch the proxies so that new contacts will be created (when appropriate) - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - for (var i = 0; i < f.m_proxyCount; ++i) { - broadPhase.touchProxy(f.m_proxies[i].proxyId); - } - } + } + this.m_linearVelocity.setVec2(v3); }; - Body.prototype.isBullet = function () { - return this.m_bulletFlag; - }; - /** - * Should this body be treated like a bullet for continuous collision detection? - */ - Body.prototype.setBullet = function (flag) { - this.m_bulletFlag = !!flag; - }; - Body.prototype.isSleepingAllowed = function () { - return this.m_autoSleepFlag; - }; - Body.prototype.setSleepingAllowed = function (flag) { - this.m_autoSleepFlag = !!flag; - if (this.m_autoSleepFlag == false) { - this.setAwake(true); - } - }; - Body.prototype.isAwake = function () { - return this.m_awakeFlag; - }; - /** - * Set the sleep state of the body. A sleeping body has very low CPU cost. - * - * @param flag Set to true to wake the body, false to put it to sleep. - */ - Body.prototype.setAwake = function (flag) { - if (flag) { - this.m_awakeFlag = true; - this.m_sleepTime = 0.0; - } - else { - this.m_awakeFlag = false; - this.m_sleepTime = 0.0; - this.m_linearVelocity.setZero(); - this.m_angularVelocity = 0.0; - this.m_force.setZero(); - this.m_torque = 0.0; - } - }; - Body.prototype.isActive = function () { - return this.m_activeFlag; - }; - /** - * Set the active state of the body. An inactive body is not simulated and - * cannot be collided with or woken up. If you pass a flag of true, all fixtures - * will be added to the broad-phase. If you pass a flag of false, all fixtures - * will be removed from the broad-phase and all contacts will be destroyed. - * Fixtures and joints are otherwise unaffected. - * - * You may continue to create/destroy fixtures and joints on inactive bodies. - * Fixtures on an inactive body are implicitly inactive and will not participate - * in collisions, ray-casts, or queries. Joints connected to an inactive body - * are implicitly inactive. An inactive body is still owned by a World object - * and remains - */ - Body.prototype.setActive = function (flag) { - if (flag == this.m_activeFlag) { - return; - } - this.m_activeFlag = !!flag; - if (this.m_activeFlag) { - // Create all proxies. - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.createProxies(broadPhase, this.m_xf); - } - // Contacts are created at the beginning of the next - this.m_world.m_newFixture = true; - } - else { - // Destroy all proxies. - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.destroyProxies(broadPhase); - } - // Destroy the attached contacts. - var ce = this.m_contactList; - while (ce) { - var ce0 = ce; - ce = ce.next; - this.m_world.destroyContact(ce0.contact); - } - this.m_contactList = null; - } + Body2.prototype.getAngularVelocity = function() { + return this.m_angularVelocity; }; - Body.prototype.isFixedRotation = function () { - return this.m_fixedRotationFlag; + Body2.prototype.setAngularVelocity = function(w) { + if (this.m_type == STATIC) { + return; + } + if (w * w > 0) { + this.setAwake(true); + } + this.m_angularVelocity = w; }; - /** - * Set this body to have fixed rotation. This causes the mass to be reset. - */ - Body.prototype.setFixedRotation = function (flag) { - if (this.m_fixedRotationFlag == flag) { - return; - } - this.m_fixedRotationFlag = !!flag; - this.m_angularVelocity = 0.0; - this.resetMassData(); + Body2.prototype.getLinearDamping = function() { + return this.m_linearDamping; }; - /** - * Get the world transform for the body's origin. - */ - Body.prototype.getTransform = function () { - return this.m_xf; - }; - /** - * Set the position of the body's origin and rotation. Manipulating a body's - * transform may cause non-physical behavior. Note: contacts are updated on the - * next call to World.step. - * - * @param position The world position of the body's local origin. - * @param angle The world rotation in radians. - */ - Body.prototype.setTransform = function (position, angle) { - if (this.isWorldLocked() == true) { - return; - } - this.m_xf.setNum(position, angle); - this.m_sweep.setTransform(this.m_xf); - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.synchronize(broadPhase, this.m_xf, this.m_xf); - } - this.setAwake(true); + Body2.prototype.setLinearDamping = function(linearDamping) { + this.m_linearDamping = linearDamping; }; - Body.prototype.synchronizeTransform = function () { - this.m_sweep.getTransform(this.m_xf, 1); + Body2.prototype.getAngularDamping = function() { + return this.m_angularDamping; }; - /** - * Update fixtures in broad-phase. - */ - Body.prototype.synchronizeFixtures = function () { - this.m_sweep.getTransform(xf$2, 0); - var broadPhase = this.m_world.m_broadPhase; - for (var f = this.m_fixtureList; f; f = f.m_next) { - f.synchronize(broadPhase, xf$2, this.m_xf); - } - }; - /** - * Used in TOI. - */ - Body.prototype.advance = function (alpha) { - // Advance to the new safe time. This doesn't sync the broad-phase. - this.m_sweep.advance(alpha); - copyVec2(this.m_sweep.c, this.m_sweep.c0); - this.m_sweep.a = this.m_sweep.a0; - this.m_sweep.getTransform(this.m_xf, 1); - }; - /** - * Get the world position for the body's origin. - */ - Body.prototype.getPosition = function () { - return this.m_xf.p; - }; - Body.prototype.setPosition = function (p) { - this.setTransform(p, this.m_sweep.a); - }; - /** - * Get the current world rotation angle in radians. - */ - Body.prototype.getAngle = function () { - return this.m_sweep.a; - }; - Body.prototype.setAngle = function (angle) { - this.setTransform(this.m_xf.p, angle); - }; - /** - * Get the world position of the center of mass. - */ - Body.prototype.getWorldCenter = function () { - return this.m_sweep.c; - }; - /** - * Get the local position of the center of mass. - */ - Body.prototype.getLocalCenter = function () { - return this.m_sweep.localCenter; - }; - /** - * Get the linear velocity of the center of mass. - * - * @return the linear velocity of the center of mass. - */ - Body.prototype.getLinearVelocity = function () { - return this.m_linearVelocity; - }; - /** - * Get the world linear velocity of a world point attached to this body. - * - * @param worldPoint A point in world coordinates. - */ - Body.prototype.getLinearVelocityFromWorldPoint = function (worldPoint) { - var localCenter = Vec2.sub(worldPoint, this.m_sweep.c); - return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity, localCenter)); - }; - /** - * Get the world velocity of a local point. - * - * @param localPoint A point in local coordinates. - */ - Body.prototype.getLinearVelocityFromLocalPoint = function (localPoint) { - return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint)); - }; - /** - * Set the linear velocity of the center of mass. - * - * @param v The new linear velocity of the center of mass. - */ - Body.prototype.setLinearVelocity = function (v) { - if (this.m_type == STATIC) { - return; - } - if (Vec2.dot(v, v) > 0.0) { - this.setAwake(true); - } - this.m_linearVelocity.setVec2(v); - }; - /** - * Get the angular velocity. - * - * @returns the angular velocity in radians/second. - */ - Body.prototype.getAngularVelocity = function () { - return this.m_angularVelocity; - }; - /** - * Set the angular velocity. - * - * @param omega The new angular velocity in radians/second. - */ - Body.prototype.setAngularVelocity = function (w) { - if (this.m_type == STATIC) { - return; - } - if (w * w > 0.0) { - this.setAwake(true); - } - this.m_angularVelocity = w; - }; - Body.prototype.getLinearDamping = function () { - return this.m_linearDamping; - }; - Body.prototype.setLinearDamping = function (linearDamping) { - this.m_linearDamping = linearDamping; - }; - Body.prototype.getAngularDamping = function () { - return this.m_angularDamping; - }; - Body.prototype.setAngularDamping = function (angularDamping) { - this.m_angularDamping = angularDamping; - }; - Body.prototype.getGravityScale = function () { - return this.m_gravityScale; - }; - /** - * Scale the gravity applied to this body. - */ - Body.prototype.setGravityScale = function (scale) { - this.m_gravityScale = scale; - }; - /** - * Get the total mass of the body. - * - * @returns The mass, usually in kilograms (kg). - */ - Body.prototype.getMass = function () { - return this.m_mass; - }; - /** - * Get the rotational inertia of the body about the local origin. - * - * @return the rotational inertia, usually in kg-m^2. - */ - Body.prototype.getInertia = function () { - return this.m_I + this.m_mass - * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter); - }; - /** - * Copy the mass data of the body to data. - */ - Body.prototype.getMassData = function (data) { - data.mass = this.m_mass; - data.I = this.getInertia(); - copyVec2(data.center, this.m_sweep.localCenter); - }; - /** - * This resets the mass properties to the sum of the mass properties of the - * fixtures. This normally does not need to be called unless you called - * SetMassData to override the mass and you later want to reset the mass. - */ - Body.prototype.resetMassData = function () { - // Compute mass data from shapes. Each shape has its own density. - this.m_mass = 0.0; - this.m_invMass = 0.0; - this.m_I = 0.0; - this.m_invI = 0.0; - zeroVec2(this.m_sweep.localCenter); - // Static and kinematic bodies have zero mass. - if (this.isStatic() || this.isKinematic()) { - copyVec2(this.m_sweep.c0, this.m_xf.p); - copyVec2(this.m_sweep.c, this.m_xf.p); - this.m_sweep.a0 = this.m_sweep.a; - return; - } - // Accumulate mass over all fixtures. - zeroVec2(localCenter); - for (var f = this.m_fixtureList; f; f = f.m_next) { - if (f.m_density == 0.0) { - continue; - } - var massData = { - mass: 0, - center: vec2(0, 0), - I: 0 - }; - f.getMassData(massData); - this.m_mass += massData.mass; - plusScaleVec2(localCenter, massData.mass, massData.center); - this.m_I += massData.I; - } - // Compute center of mass. - if (this.m_mass > 0.0) { - this.m_invMass = 1.0 / this.m_mass; - scaleVec2(localCenter, this.m_invMass, localCenter); - } - else { - // Force all dynamic bodies to have a positive mass. - this.m_mass = 1.0; - this.m_invMass = 1.0; - } - if (this.m_I > 0.0 && this.m_fixedRotationFlag == false) { - // Center the inertia about the center of mass. - this.m_I -= this.m_mass * dotVec2(localCenter, localCenter); - this.m_invI = 1.0 / this.m_I; - } - else { - this.m_I = 0.0; - this.m_invI = 0.0; - } - // Move center of mass. - copyVec2(oldCenter, this.m_sweep.c); - this.m_sweep.setLocalCenter(localCenter, this.m_xf); - // Update center of mass velocity. - subVec2(shift, this.m_sweep.c, oldCenter); - crossNumVec2(temp$6, this.m_angularVelocity, shift); - plusVec2(this.m_linearVelocity, temp$6); - }; - /** - * Set the mass properties to override the mass properties of the fixtures. Note - * that this changes the center of mass position. Note that creating or - * destroying fixtures can also alter the mass. This function has no effect if - * the body isn't dynamic. - * - * @param massData The mass properties. - */ - Body.prototype.setMassData = function (massData) { - if (this.isWorldLocked() == true) { - return; - } - if (this.m_type != DYNAMIC) { - return; - } - this.m_invMass = 0.0; - this.m_I = 0.0; - this.m_invI = 0.0; - this.m_mass = massData.mass; - if (this.m_mass <= 0.0) { - this.m_mass = 1.0; - } - this.m_invMass = 1.0 / this.m_mass; - if (massData.I > 0.0 && this.m_fixedRotationFlag == false) { - this.m_I = massData.I - this.m_mass * dotVec2(massData.center, massData.center); - this.m_invI = 1.0 / this.m_I; - } - // Move center of mass. - copyVec2(oldCenter, this.m_sweep.c); - this.m_sweep.setLocalCenter(massData.center, this.m_xf); - // Update center of mass velocity. - subVec2(shift, this.m_sweep.c, oldCenter); - crossNumVec2(temp$6, this.m_angularVelocity, shift); - plusVec2(this.m_linearVelocity, temp$6); - }; - /** - * Apply a force at a world point. If the force is not applied at the center of - * mass, it will generate a torque and affect the angular velocity. This wakes - * up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - Body.prototype.applyForce = function (force, point, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate a force if the body is sleeping. - if (this.m_awakeFlag) { - this.m_force.add(force); - this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), force); - } + Body2.prototype.setAngularDamping = function(angularDamping) { + this.m_angularDamping = angularDamping; }; - /** - * Apply a force to the center of mass. This wakes up the body. - * - * @param force The world force vector, usually in Newtons (N). - * @param wake Also wake up the body - */ - Body.prototype.applyForceToCenter = function (force, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate a force if the body is sleeping - if (this.m_awakeFlag) { - this.m_force.add(force); - } + Body2.prototype.getGravityScale = function() { + return this.m_gravityScale; }; - /** - * Apply a torque. This affects the angular velocity without affecting the - * linear velocity of the center of mass. This wakes up the body. - * - * @param torque About the z-axis (out of the screen), usually in N-m. - * @param wake Also wake up the body - */ - Body.prototype.applyTorque = function (torque, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate a force if the body is sleeping - if (this.m_awakeFlag) { - this.m_torque += torque; - } - }; - /** - * Apply an impulse at a point. This immediately modifies the velocity. It also - * modifies the angular velocity if the point of application is not at the - * center of mass. This wakes up the body. - * - * @param impulse The world impulse vector, usually in N-seconds or kg-m/s. - * @param point The world position of the point of application. - * @param wake Also wake up the body - */ - Body.prototype.applyLinearImpulse = function (impulse, point, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate velocity if the body is sleeping - if (this.m_awakeFlag) { - this.m_linearVelocity.addMul(this.m_invMass, impulse); - this.m_angularVelocity += this.m_invI * Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), impulse); - } + Body2.prototype.setGravityScale = function(scale) { + this.m_gravityScale = scale; }; - /** - * Apply an angular impulse. - * - * @param impulse The angular impulse in units of kg*m*m/s - * @param wake Also wake up the body - */ - Body.prototype.applyAngularImpulse = function (impulse, wake) { - if (wake === void 0) { wake = true; } - if (this.m_type != DYNAMIC) { - return; - } - if (wake && this.m_awakeFlag == false) { - this.setAwake(true); - } - // Don't accumulate velocity if the body is sleeping - if (this.m_awakeFlag) { - this.m_angularVelocity += this.m_invI * impulse; - } + Body2.prototype.getMass = function() { + return this.m_mass; + }; + Body2.prototype.getInertia = function() { + return this.m_I + this.m_mass * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter); + }; + Body2.prototype.getMassData = function(data) { + data.mass = this.m_mass; + data.I = this.getInertia(); + copyVec2(data.center, this.m_sweep.localCenter); + }; + Body2.prototype.resetMassData = function() { + this.m_mass = 0; + this.m_invMass = 0; + this.m_I = 0; + this.m_invI = 0; + zeroVec2(this.m_sweep.localCenter); + if (this.isStatic() || this.isKinematic()) { + copyVec2(this.m_sweep.c0, this.m_xf.p); + copyVec2(this.m_sweep.c, this.m_xf.p); + this.m_sweep.a0 = this.m_sweep.a; + return; + } + zeroVec2(localCenter); + for (var f = this.m_fixtureList; f; f = f.m_next) { + if (f.m_density == 0) { + continue; + } + var massData = { + mass: 0, + center: vec2(0, 0), + I: 0 + }; + f.getMassData(massData); + this.m_mass += massData.mass; + plusScaleVec2(localCenter, massData.mass, massData.center); + this.m_I += massData.I; + } + if (this.m_mass > 0) { + this.m_invMass = 1 / this.m_mass; + scaleVec2(localCenter, this.m_invMass, localCenter); + } else { + this.m_mass = 1; + this.m_invMass = 1; + } + if (this.m_I > 0 && this.m_fixedRotationFlag == false) { + this.m_I -= this.m_mass * dotVec2(localCenter, localCenter); + this.m_invI = 1 / this.m_I; + } else { + this.m_I = 0; + this.m_invI = 0; + } + copyVec2(oldCenter, this.m_sweep.c); + this.m_sweep.setLocalCenter(localCenter, this.m_xf); + subVec2(shift, this.m_sweep.c, oldCenter); + crossNumVec2(temp$6, this.m_angularVelocity, shift); + plusVec2(this.m_linearVelocity, temp$6); + }; + Body2.prototype.setMassData = function(massData) { + if (this.isWorldLocked() == true) { + return; + } + if (this.m_type != DYNAMIC) { + return; + } + this.m_invMass = 0; + this.m_I = 0; + this.m_invI = 0; + this.m_mass = massData.mass; + if (this.m_mass <= 0) { + this.m_mass = 1; + } + this.m_invMass = 1 / this.m_mass; + if (massData.I > 0 && this.m_fixedRotationFlag == false) { + this.m_I = massData.I - this.m_mass * dotVec2(massData.center, massData.center); + this.m_invI = 1 / this.m_I; + } + copyVec2(oldCenter, this.m_sweep.c); + this.m_sweep.setLocalCenter(massData.center, this.m_xf); + subVec2(shift, this.m_sweep.c, oldCenter); + crossNumVec2(temp$6, this.m_angularVelocity, shift); + plusVec2(this.m_linearVelocity, temp$6); + }; + Body2.prototype.applyForce = function(force, point2, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_force.add(force); + this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point2, this.m_sweep.c), force); + } + }; + Body2.prototype.applyForceToCenter = function(force, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_force.add(force); + } + }; + Body2.prototype.applyTorque = function(torque, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_torque += torque; + } + }; + Body2.prototype.applyLinearImpulse = function(impulse, point2, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_linearVelocity.addMul(this.m_invMass, impulse); + this.m_angularVelocity += this.m_invI * Vec2.crossVec2Vec2(Vec2.sub(point2, this.m_sweep.c), impulse); + } + }; + Body2.prototype.applyAngularImpulse = function(impulse, wake) { + if (wake === void 0) { + wake = true; + } + if (this.m_type != DYNAMIC) { + return; + } + if (wake && this.m_awakeFlag == false) { + this.setAwake(true); + } + if (this.m_awakeFlag) { + this.m_angularVelocity += this.m_invI * impulse; + } }; - /** - * This is used to test if two bodies should collide. - * - * Bodies do not collide when: - * - Neither of them is dynamic - * - They are connected by a joint with collideConnected == false - */ - Body.prototype.shouldCollide = function (that) { - // At least one body should be dynamic. - if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) { + Body2.prototype.shouldCollide = function(that) { + if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) { + return false; + } + for (var jn = this.m_jointList; jn; jn = jn.next) { + if (jn.other == that) { + if (jn.joint.m_collideConnected == false) { return false; + } } - // Does a joint prevent collision? - for (var jn = this.m_jointList; jn; jn = jn.next) { - if (jn.other == that) { - if (jn.joint.m_collideConnected == false) { - return false; - } - } - } - return true; + } + return true; }; - /** @internal Used for deserialize. */ - Body.prototype._addFixture = function (fixture) { - if (this.isWorldLocked() == true) { - return null; - } - if (this.m_activeFlag) { - var broadPhase = this.m_world.m_broadPhase; - fixture.createProxies(broadPhase, this.m_xf); - } - fixture.m_next = this.m_fixtureList; - this.m_fixtureList = fixture; - // Adjust mass properties if needed. - if (fixture.m_density > 0.0) { - this.resetMassData(); - } - // Let the world know we have a new fixture. This will cause new contacts - // to be created at the beginning of the next time step. - this.m_world.m_newFixture = true; - return fixture; - }; - // tslint:disable-next-line:typedef - Body.prototype.createFixture = function (shape, fixdef) { - if (this.isWorldLocked() == true) { - return null; - } - var fixture = new Fixture(this, shape, fixdef); - this._addFixture(fixture); - return fixture; - }; - /** - * Destroy a fixture. This removes the fixture from the broad-phase and destroys - * all contacts associated with this fixture. This will automatically adjust the - * mass of the body if the body is dynamic and the fixture has positive density. - * All fixtures attached to a body are implicitly destroyed when the body is - * destroyed. - * - * Warning: This function is locked during callbacks. - * - * @param fixture The fixture to be removed. - */ - Body.prototype.destroyFixture = function (fixture) { - if (this.isWorldLocked() == true) { - return; - } - if (this.m_fixtureList === fixture) { - this.m_fixtureList = fixture.m_next; - } - else { - var node = this.m_fixtureList; - while (node != null) { - if (node.m_next === fixture) { - node.m_next = fixture.m_next; - break; - } - node = node.m_next; - } - } - // Destroy any contacts associated with the fixture. - var edge = this.m_contactList; - while (edge) { - var c = edge.contact; - edge = edge.next; - var fixtureA = c.getFixtureA(); - var fixtureB = c.getFixtureB(); - if (fixture == fixtureA || fixture == fixtureB) { - // This destroys the contact and removes it from - // this body's contact list. - this.m_world.destroyContact(c); - } - } - if (this.m_activeFlag) { - var broadPhase = this.m_world.m_broadPhase; - fixture.destroyProxies(broadPhase); - } - fixture.m_body = null; - fixture.m_next = null; - this.m_world.publish("remove-fixture", fixture); - // Reset the mass data. + Body2.prototype._addFixture = function(fixture) { + if (this.isWorldLocked() == true) { + return null; + } + if (this.m_activeFlag) { + var broadPhase = this.m_world.m_broadPhase; + fixture.createProxies(broadPhase, this.m_xf); + } + fixture.m_next = this.m_fixtureList; + this.m_fixtureList = fixture; + if (fixture.m_density > 0) { this.resetMassData(); - }; - /** - * Get the corresponding world point of a local point. - */ - Body.prototype.getWorldPoint = function (localPoint) { - return Transform.mulVec2(this.m_xf, localPoint); - }; - /** - * Get the corresponding world vector of a local vector. - */ - Body.prototype.getWorldVector = function (localVector) { - return Rot.mulVec2(this.m_xf.q, localVector); - }; - /** - * Gets the corresponding local point of a world point. - */ - Body.prototype.getLocalPoint = function (worldPoint) { - return Transform.mulTVec2(this.m_xf, worldPoint); - }; - /** - * Gets the corresponding local vector of a world vector. - */ - Body.prototype.getLocalVector = function (worldVector) { - return Rot.mulTVec2(this.m_xf.q, worldVector); - }; - /** - * A static body does not move under simulation and behaves as if it has infinite mass. - * Internally, zero is stored for the mass and the inverse mass. - * Static bodies can be moved manually by the user. - * A static body has zero velocity. - * Static bodies do not collide with other static or kinematic bodies. - */ - Body.STATIC = "static"; - /** - * A kinematic body moves under simulation according to its velocity. - * Kinematic bodies do not respond to forces. - * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity. - * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass. - * Kinematic bodies do not collide with other kinematic or static bodies. - */ - Body.KINEMATIC = "kinematic"; - /** - * A dynamic body is fully simulated. - * They can be moved manually by the user, but normally they move according to forces. - * A dynamic body can collide with all body types. - * A dynamic body always has finite, non-zero mass. - * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate. - */ - Body.DYNAMIC = "dynamic"; - return Body; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** - * A joint edge is used to connect bodies and joints together in a joint graph - * where each body is a node and each joint is an edge. A joint edge belongs to - * a doubly linked list maintained in each attached body. Each joint has two - * joint nodes, one for each attached body. - */ -var JointEdge = /** @class */ (function () { - function JointEdge() { - /** - * provides quick access to the other body attached. - */ - this.other = null; - /** - * the joint - */ - this.joint = null; - /** - * prev the previous joint edge in the body's joint list - */ - this.prev = null; - /** - * the next joint edge in the body's joint list - */ - this.next = null; - } - return JointEdge; -}()); -/** - * The base joint class. Joints are used to constraint two bodies together in - * various fashions. Some joints also feature limits and motors. - */ -var Joint = /** @class */ (function () { - function Joint(def, bodyA, bodyB) { - /** @internal */ this.m_type = "unknown-joint"; - /** @internal */ this.m_prev = null; - /** @internal */ this.m_next = null; - /** @internal */ this.m_edgeA = new JointEdge(); - /** @internal */ this.m_edgeB = new JointEdge(); - /** @internal */ this.m_islandFlag = false; - /** Styling for dev-tools. */ - this.style = {}; - /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ - this.appData = {}; - bodyA = "bodyA" in def ? def.bodyA : bodyA; - bodyB = "bodyB" in def ? def.bodyB : bodyB; - this.m_bodyA = bodyA; - this.m_bodyB = bodyB; - this.m_collideConnected = !!def.collideConnected; - this.m_userData = def.userData; - } - /** - * Short-cut function to determine if either body is inactive. - */ - Joint.prototype.isActive = function () { - return this.m_bodyA.isActive() && this.m_bodyB.isActive(); - }; - /** - * Get the type of the concrete joint. - */ - Joint.prototype.getType = function () { - return this.m_type; - }; - /** - * Get the first body attached to this joint. - */ - Joint.prototype.getBodyA = function () { - return this.m_bodyA; - }; - /** - * Get the second body attached to this joint. - */ - Joint.prototype.getBodyB = function () { - return this.m_bodyB; - }; - /** - * Get the next joint the world joint list. - */ - Joint.prototype.getNext = function () { - return this.m_next; - }; - Joint.prototype.getUserData = function () { - return this.m_userData; - }; - Joint.prototype.setUserData = function (data) { - this.m_userData = data; - }; - /** - * Get collide connected. Note: modifying the collide connect flag won't work - * correctly because the flag is only checked when fixture AABBs begin to - * overlap. - */ - Joint.prototype.getCollideConnected = function () { - return this.m_collideConnected; - }; - /** - * Shift the origin for any points stored in world coordinates. - */ - Joint.prototype.shiftOrigin = function (newOrigin) { }; - /** - * @internal @deprecated - * Temporary for backward compatibility, will be removed. - */ - Joint.prototype._resetAnchors = function (def) { - return this._reset(def); - }; - return Joint; -}()); - -/** @hidden */ + } + this.m_world.m_newFixture = true; + return fixture; + }; + Body2.prototype.createFixture = function(shape, fixdef) { + if (this.isWorldLocked() == true) { + return null; + } + var fixture = new Fixture(this, shape, fixdef); + this._addFixture(fixture); + return fixture; + }; + Body2.prototype.destroyFixture = function(fixture) { + if (this.isWorldLocked() == true) { + return; + } + if (this.m_fixtureList === fixture) { + this.m_fixtureList = fixture.m_next; + } else { + var node = this.m_fixtureList; + while (node != null) { + if (node.m_next === fixture) { + node.m_next = fixture.m_next; + break; + } + node = node.m_next; + } + } + var edge = this.m_contactList; + while (edge) { + var c2 = edge.contact; + edge = edge.next; + var fixtureA = c2.getFixtureA(); + var fixtureB = c2.getFixtureB(); + if (fixture == fixtureA || fixture == fixtureB) { + this.m_world.destroyContact(c2); + } + } + if (this.m_activeFlag) { + var broadPhase = this.m_world.m_broadPhase; + fixture.destroyProxies(broadPhase); + } + fixture.m_body = null; + fixture.m_next = null; + this.m_world.publish("remove-fixture", fixture); + this.resetMassData(); + }; + Body2.prototype.getWorldPoint = function(localPoint) { + return Transform.mulVec2(this.m_xf, localPoint); + }; + Body2.prototype.getWorldVector = function(localVector) { + return Rot.mulVec2(this.m_xf.q, localVector); + }; + Body2.prototype.getLocalPoint = function(worldPoint) { + return Transform.mulTVec2(this.m_xf, worldPoint); + }; + Body2.prototype.getLocalVector = function(worldVector) { + return Rot.mulTVec2(this.m_xf.q, worldVector); + }; + Body2.STATIC = "static"; + Body2.KINEMATIC = "kinematic"; + Body2.DYNAMIC = "dynamic"; + return Body2; + }() +); +var JointEdge = ( + /** @class */ + /* @__PURE__ */ function() { + function JointEdge2() { + this.other = null; + this.joint = null; + this.prev = null; + this.next = null; + } + return JointEdge2; + }() +); +var Joint = ( + /** @class */ + function() { + function Joint2(def, bodyA, bodyB) { + this.m_type = "unknown-joint"; + this.m_prev = null; + this.m_next = null; + this.m_edgeA = new JointEdge(); + this.m_edgeB = new JointEdge(); + this.m_islandFlag = false; + this.style = {}; + this.appData = {}; + bodyA = "bodyA" in def ? def.bodyA : bodyA; + bodyB = "bodyB" in def ? def.bodyB : bodyB; + this.m_bodyA = bodyA; + this.m_bodyB = bodyB; + this.m_collideConnected = !!def.collideConnected; + this.m_userData = def.userData; + } + Joint2.prototype.isActive = function() { + return this.m_bodyA.isActive() && this.m_bodyB.isActive(); + }; + Joint2.prototype.getType = function() { + return this.m_type; + }; + Joint2.prototype.getBodyA = function() { + return this.m_bodyA; + }; + Joint2.prototype.getBodyB = function() { + return this.m_bodyB; + }; + Joint2.prototype.getNext = function() { + return this.m_next; + }; + Joint2.prototype.getUserData = function() { + return this.m_userData; + }; + Joint2.prototype.setUserData = function(data) { + this.m_userData = data; + }; + Joint2.prototype.getCollideConnected = function() { + return this.m_collideConnected; + }; + Joint2.prototype.shiftOrigin = function(newOrigin) { + }; + Joint2.prototype._resetAnchors = function(def) { + return this._reset(def); + }; + return Joint2; + }() +); var stats = { - gjkCalls: 0, - gjkIters: 0, - gjkMaxIters: 0, - toiTime: 0, - toiMaxTime: 0, - toiCalls: 0, - toiIters: 0, - toiMaxIters: 0, - toiRootIters: 0, - toiMaxRootIters: 0, - toString: function (newline) { - newline = typeof newline === "string" ? newline : "\n"; - var string = ""; - // tslint:disable-next-line:no-for-in - for (var name_1 in this) { - if (typeof this[name_1] !== "function" && typeof this[name_1] !== "object") { - string += name_1 + ": " + this[name_1] + newline; - } - } - return string; - } + gjkCalls: 0, + gjkIters: 0, + gjkMaxIters: 0, + toiTime: 0, + toiMaxTime: 0, + toiCalls: 0, + toiIters: 0, + toiMaxIters: 0, + toiRootIters: 0, + toiMaxRootIters: 0, + toString: function(newline) { + newline = typeof newline === "string" ? newline : "\n"; + var string = ""; + for (var name_1 in this) { + if (typeof this[name_1] !== "function" && typeof this[name_1] !== "object") { + string += name_1 + ": " + this[name_1] + newline; + } + } + return string; + } }; - -/** @internal */ -var now = function () { - return Date.now(); +var now = function() { + return Date.now(); }; -/** @internal */ -var diff = function (time) { - return Date.now() - time; +var diff = function(time) { + return Date.now() - time; }; -/** @internal */ -var Timer = { - now: now, - diff: diff, +const Timer = { + now, + diff }; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_max$4 = Math.max; -/** @internal */ var temp$5 = vec2(0, 0); -/** @internal */ var normal$4 = vec2(0, 0); -/** @internal */ var e12 = vec2(0, 0); -/** @internal */ var e13 = vec2(0, 0); -/** @internal */ var e23 = vec2(0, 0); -/** @internal */ var temp1 = vec2(0, 0); -/** @internal */ var temp2 = vec2(0, 0); -/** - * GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates. - */ +var math_max$4 = Math.max; +var temp$5 = vec2(0, 0); +var normal$4 = vec2(0, 0); +var e12 = vec2(0, 0); +var e13 = vec2(0, 0); +var e23 = vec2(0, 0); +var temp1 = vec2(0, 0); +var temp2 = vec2(0, 0); stats.gjkCalls = 0; stats.gjkIters = 0; stats.gjkMaxIters = 0; -/** - * Input for Distance. You have to option to use the shape radii in the - * computation. Even - */ -var DistanceInput = /** @class */ (function () { - function DistanceInput() { - this.proxyA = new DistanceProxy(); - this.proxyB = new DistanceProxy(); - this.transformA = Transform.identity(); - this.transformB = Transform.identity(); - this.useRadii = false; - } - DistanceInput.prototype.recycle = function () { - this.proxyA.recycle(); - this.proxyB.recycle(); - this.transformA.setIdentity(); - this.transformB.setIdentity(); - this.useRadii = false; - }; - return DistanceInput; -}()); -/** - * Output for Distance. - */ -var DistanceOutput = /** @class */ (function () { - function DistanceOutput() { - /** closest point on shapeA */ - this.pointA = vec2(0, 0); - /** closest point on shapeB */ - this.pointB = vec2(0, 0); - this.distance = 0; - /** iterations number of GJK iterations used */ - this.iterations = 0; - } - DistanceOutput.prototype.recycle = function () { - zeroVec2(this.pointA); - zeroVec2(this.pointB); - this.distance = 0; - this.iterations = 0; - }; - return DistanceOutput; -}()); -/** - * Used to warm start Distance. Set count to zero on first call. - */ -var SimplexCache = /** @class */ (function () { - function SimplexCache() { - /** length or area */ - this.metric = 0; - /** vertices on shape A */ - this.indexA = []; - /** vertices on shape B */ - this.indexB = []; - this.count = 0; - } - SimplexCache.prototype.recycle = function () { - this.metric = 0; - this.indexA.length = 0; - this.indexB.length = 0; - this.count = 0; - }; - return SimplexCache; -}()); -/** - * Compute the closest points between two shapes. Supports any combination of: - * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On - * the first call set SimplexCache.count to zero. - */ -var Distance = function (output, cache, input) { - ++stats.gjkCalls; - var proxyA = input.proxyA; - var proxyB = input.proxyB; - var xfA = input.transformA; - var xfB = input.transformB; - // Initialize the simplex. - // const simplex = new Simplex(); - simplex.recycle(); - simplex.readCache(cache, proxyA, xfA, proxyB, xfB); - // Get simplex vertices as an array. - var vertices = simplex.m_v; - var k_maxIters = SettingsInternal.maxDistanceIterations; - // These store the vertices of the last simplex so that we - // can check for duplicates and prevent cycling. - var saveA = []; - var saveB = []; // int[3] - var saveCount = 0; - // Main iteration loop. - var iter = 0; - while (iter < k_maxIters) { - // Copy simplex so we can identify duplicates. - saveCount = simplex.m_count; - for (var i = 0; i < saveCount; ++i) { - saveA[i] = vertices[i].indexA; - saveB[i] = vertices[i].indexB; - } - simplex.solve(); - // If we have 3 points, then the origin is in the corresponding triangle. - if (simplex.m_count === 3) { - break; - } - // Get search direction. - var d = simplex.getSearchDirection(); - // Ensure the search direction is numerically fit. - if (lengthSqrVec2(d) < EPSILON * EPSILON) { - // The origin is probably contained by a line segment - // or triangle. Thus the shapes are overlapped. - // We can't return zero here even though there may be overlap. - // In case the simplex is a point, segment, or triangle it is difficult - // to determine if the origin is contained in the CSO or very close to it. - break; - } - // Compute a tentative new simplex vertex using support points. - var vertex = vertices[simplex.m_count]; // SimplexVertex - vertex.indexA = proxyA.getSupport(derotVec2(temp$5, xfA.q, scaleVec2(temp$5, -1, d))); - transformVec2(vertex.wA, xfA, proxyA.getVertex(vertex.indexA)); - vertex.indexB = proxyB.getSupport(derotVec2(temp$5, xfB.q, d)); - transformVec2(vertex.wB, xfB, proxyB.getVertex(vertex.indexB)); - subVec2(vertex.w, vertex.wB, vertex.wA); - // Iteration count is equated to the number of support point calls. - ++iter; - ++stats.gjkIters; - // Check for duplicate support points. This is the main termination - // criteria. - var duplicate = false; - for (var i = 0; i < saveCount; ++i) { - if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) { - duplicate = true; - break; - } - } - // If we found a duplicate support point we must exit to avoid cycling. - if (duplicate) { - break; - } - // New vertex is ok and needed. - ++simplex.m_count; - } - stats.gjkMaxIters = math_max$4(stats.gjkMaxIters, iter); - // Prepare output. - simplex.getWitnessPoints(output.pointA, output.pointB); - output.distance = distVec2(output.pointA, output.pointB); - output.iterations = iter; - // Cache the simplex. - simplex.writeCache(cache); - // Apply radii if requested. - if (input.useRadii) { - var rA = proxyA.m_radius; - var rB = proxyB.m_radius; - if (output.distance > rA + rB && output.distance > EPSILON) { - // Shapes are still no overlapped. - // Move the witness points to the outer surface. - output.distance -= rA + rB; - subVec2(normal$4, output.pointB, output.pointA); - normalizeVec2(normal$4); - plusScaleVec2(output.pointA, rA, normal$4); - minusScaleVec2(output.pointB, rB, normal$4); - } - else { - // Shapes are overlapped when radii are considered. - // Move the witness points to the middle. - var p = subVec2(temp$5, output.pointA, output.pointB); - copyVec2(output.pointA, p); - copyVec2(output.pointB, p); - output.distance = 0.0; - } - } +var DistanceInput = ( + /** @class */ + function() { + function DistanceInput2() { + this.proxyA = new DistanceProxy(); + this.proxyB = new DistanceProxy(); + this.transformA = Transform.identity(); + this.transformB = Transform.identity(); + this.useRadii = false; + } + DistanceInput2.prototype.recycle = function() { + this.proxyA.recycle(); + this.proxyB.recycle(); + this.transformA.setIdentity(); + this.transformB.setIdentity(); + this.useRadii = false; + }; + return DistanceInput2; + }() +); +var DistanceOutput = ( + /** @class */ + function() { + function DistanceOutput2() { + this.pointA = vec2(0, 0); + this.pointB = vec2(0, 0); + this.distance = 0; + this.iterations = 0; + } + DistanceOutput2.prototype.recycle = function() { + zeroVec2(this.pointA); + zeroVec2(this.pointB); + this.distance = 0; + this.iterations = 0; + }; + return DistanceOutput2; + }() +); +var SimplexCache = ( + /** @class */ + function() { + function SimplexCache2() { + this.metric = 0; + this.indexA = []; + this.indexB = []; + this.count = 0; + } + SimplexCache2.prototype.recycle = function() { + this.metric = 0; + this.indexA.length = 0; + this.indexB.length = 0; + this.count = 0; + }; + return SimplexCache2; + }() +); +var Distance = function(output2, cache2, input2) { + ++stats.gjkCalls; + var proxyA = input2.proxyA; + var proxyB = input2.proxyB; + var xfA2 = input2.transformA; + var xfB2 = input2.transformB; + simplex.recycle(); + simplex.readCache(cache2, proxyA, xfA2, proxyB, xfB2); + var vertices = simplex.m_v; + var k_maxIters = SettingsInternal.maxDistanceIterations; + var saveA = []; + var saveB = []; + var saveCount = 0; + var iter = 0; + while (iter < k_maxIters) { + saveCount = simplex.m_count; + for (var i = 0; i < saveCount; ++i) { + saveA[i] = vertices[i].indexA; + saveB[i] = vertices[i].indexB; + } + simplex.solve(); + if (simplex.m_count === 3) { + break; + } + var d2 = simplex.getSearchDirection(); + if (lengthSqrVec2(d2) < EPSILON * EPSILON) { + break; + } + var vertex = vertices[simplex.m_count]; + vertex.indexA = proxyA.getSupport(derotVec2(temp$5, xfA2.q, scaleVec2(temp$5, -1, d2))); + transformVec2(vertex.wA, xfA2, proxyA.getVertex(vertex.indexA)); + vertex.indexB = proxyB.getSupport(derotVec2(temp$5, xfB2.q, d2)); + transformVec2(vertex.wB, xfB2, proxyB.getVertex(vertex.indexB)); + subVec2(vertex.w, vertex.wB, vertex.wA); + ++iter; + ++stats.gjkIters; + var duplicate = false; + for (var i = 0; i < saveCount; ++i) { + if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) { + duplicate = true; + break; + } + } + if (duplicate) { + break; + } + ++simplex.m_count; + } + stats.gjkMaxIters = math_max$4(stats.gjkMaxIters, iter); + simplex.getWitnessPoints(output2.pointA, output2.pointB); + output2.distance = distVec2(output2.pointA, output2.pointB); + output2.iterations = iter; + simplex.writeCache(cache2); + if (input2.useRadii) { + var rA2 = proxyA.m_radius; + var rB2 = proxyB.m_radius; + if (output2.distance > rA2 + rB2 && output2.distance > EPSILON) { + output2.distance -= rA2 + rB2; + subVec2(normal$4, output2.pointB, output2.pointA); + normalizeVec2(normal$4); + plusScaleVec2(output2.pointA, rA2, normal$4); + minusScaleVec2(output2.pointB, rB2, normal$4); + } else { + var p = subVec2(temp$5, output2.pointA, output2.pointB); + copyVec2(output2.pointA, p); + copyVec2(output2.pointB, p); + output2.distance = 0; + } + } }; -/** - * A distance proxy is used by the GJK algorithm. It encapsulates any shape. - */ -var DistanceProxy = /** @class */ (function () { - function DistanceProxy() { - /** @internal */ this.m_vertices = []; - // todo: remove this? - /** @internal */ this.m_count = 0; - /** @internal */ this.m_radius = 0; - } - DistanceProxy.prototype.recycle = function () { - this.m_vertices.length = 0; - this.m_count = 0; - this.m_radius = 0; - }; - /** - * Get the vertex count. - */ - DistanceProxy.prototype.getVertexCount = function () { - return this.m_count; - }; - /** - * Get a vertex by index. Used by Distance. - */ - DistanceProxy.prototype.getVertex = function (index) { - return this.m_vertices[index]; - }; - /** - * Get the supporting vertex index in the given direction. - */ - DistanceProxy.prototype.getSupport = function (d) { - var bestIndex = -1; - var bestValue = -Infinity; - for (var i = 0; i < this.m_count; ++i) { - var value = dotVec2(this.m_vertices[i], d); - if (value > bestValue) { - bestIndex = i; - bestValue = value; - } - } - return bestIndex; - }; - /** - * Get the supporting vertex in the given direction. - */ - DistanceProxy.prototype.getSupportVertex = function (d) { - return this.m_vertices[this.getSupport(d)]; - }; - /** - * Initialize the proxy using the given shape. The shape must remain in scope - * while the proxy is in use. - */ - DistanceProxy.prototype.set = function (shape, index) { - shape.computeDistanceProxy(this, index); - }; - /** - * Initialize the proxy using a vertex cloud and radius. The vertices - * must remain in scope while the proxy is in use. - */ - DistanceProxy.prototype.setVertices = function (vertices, count, radius) { - this.m_vertices = vertices; - this.m_count = count; - this.m_radius = radius; - }; - return DistanceProxy; -}()); -var SimplexVertex = /** @class */ (function () { - function SimplexVertex() { - /** support point in proxyA */ - this.wA = vec2(0, 0); - /** wA index */ - this.indexA = 0; - /** support point in proxyB */ - this.wB = vec2(0, 0); - /** wB index */ - this.indexB = 0; - /** wB - wA; */ - this.w = vec2(0, 0); - /** barycentric coordinate for closest point */ - this.a = 0; - } - SimplexVertex.prototype.recycle = function () { - this.indexA = 0; - this.indexB = 0; - zeroVec2(this.wA); - zeroVec2(this.wB); - zeroVec2(this.w); - this.a = 0; - }; - SimplexVertex.prototype.set = function (v) { - this.indexA = v.indexA; - this.indexB = v.indexB; - copyVec2(this.wA, v.wA); - copyVec2(this.wB, v.wB); - copyVec2(this.w, v.w); - this.a = v.a; - }; - return SimplexVertex; -}()); -/** @internal */ var searchDirection_reuse = vec2(0, 0); -/** @internal */ var closestPoint_reuse = vec2(0, 0); -var Simplex = /** @class */ (function () { - function Simplex() { - this.m_v1 = new SimplexVertex(); - this.m_v2 = new SimplexVertex(); - this.m_v3 = new SimplexVertex(); - this.m_v = [this.m_v1, this.m_v2, this.m_v3]; - } - Simplex.prototype.recycle = function () { - this.m_v1.recycle(); - this.m_v2.recycle(); - this.m_v3.recycle(); - this.m_count = 0; - }; - /** @internal */ Simplex.prototype.toString = function () { - if (this.m_count === 3) { - return ["+" + this.m_count, - this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y, - this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y, - this.m_v3.a, this.m_v3.wA.x, this.m_v3.wA.y, this.m_v3.wB.x, this.m_v3.wB.y - ].toString(); - } - else if (this.m_count === 2) { - return ["+" + this.m_count, - this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y, - this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y - ].toString(); - } - else if (this.m_count === 1) { - return ["+" + this.m_count, - this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y - ].toString(); - } - else { - return "+" + this.m_count; - } - }; - Simplex.prototype.readCache = function (cache, proxyA, transformA, proxyB, transformB) { - // Copy data from cache. - this.m_count = cache.count; - for (var i = 0; i < this.m_count; ++i) { - var v = this.m_v[i]; - v.indexA = cache.indexA[i]; - v.indexB = cache.indexB[i]; - var wALocal = proxyA.getVertex(v.indexA); - var wBLocal = proxyB.getVertex(v.indexB); - transformVec2(v.wA, transformA, wALocal); - transformVec2(v.wB, transformB, wBLocal); - subVec2(v.w, v.wB, v.wA); - v.a = 0.0; - } - // Compute the new simplex metric, if it is substantially different than - // old metric then flush the simplex. - if (this.m_count > 1) { - var metric1 = cache.metric; - var metric2 = this.getMetric(); - if (metric2 < 0.5 * metric1 || 2.0 * metric1 < metric2 || metric2 < EPSILON) { - // Reset the simplex. - this.m_count = 0; - } - } - // If the cache is empty or invalid... - if (this.m_count === 0) { - var v = this.m_v[0]; - v.indexA = 0; - v.indexB = 0; - var wALocal = proxyA.getVertex(0); - var wBLocal = proxyB.getVertex(0); - transformVec2(v.wA, transformA, wALocal); - transformVec2(v.wB, transformB, wBLocal); - subVec2(v.w, v.wB, v.wA); - v.a = 1.0; - this.m_count = 1; - } - }; - Simplex.prototype.writeCache = function (cache) { - cache.metric = this.getMetric(); - cache.count = this.m_count; - for (var i = 0; i < this.m_count; ++i) { - cache.indexA[i] = this.m_v[i].indexA; - cache.indexB[i] = this.m_v[i].indexB; - } - }; - Simplex.prototype.getSearchDirection = function () { - var v1 = this.m_v1; - var v2 = this.m_v2; - this.m_v3; - switch (this.m_count) { - case 1: - return setVec2(searchDirection_reuse, -v1.w.x, -v1.w.y); - case 2: { - subVec2(e12, v2.w, v1.w); - var sgn = -crossVec2Vec2(e12, v1.w); - if (sgn > 0.0) { - // Origin is left of e12. - return setVec2(searchDirection_reuse, -e12.y, e12.x); - } - else { - // Origin is right of e12. - return setVec2(searchDirection_reuse, e12.y, -e12.x); - } - } - default: - return zeroVec2(searchDirection_reuse); - } - }; - Simplex.prototype.getClosestPoint = function () { - var v1 = this.m_v1; - var v2 = this.m_v2; - this.m_v3; - switch (this.m_count) { - case 0: - return zeroVec2(closestPoint_reuse); - case 1: - return copyVec2(closestPoint_reuse, v1.w); - case 2: - return combine2Vec2(closestPoint_reuse, v1.a, v1.w, v2.a, v2.w); - case 3: - return zeroVec2(closestPoint_reuse); - default: - return zeroVec2(closestPoint_reuse); - } - }; - Simplex.prototype.getWitnessPoints = function (pA, pB) { - var v1 = this.m_v1; - var v2 = this.m_v2; - var v3 = this.m_v3; - switch (this.m_count) { - case 0: - break; - case 1: - copyVec2(pA, v1.wA); - copyVec2(pB, v1.wB); - break; - case 2: - combine2Vec2(pA, v1.a, v1.wA, v2.a, v2.wA); - combine2Vec2(pB, v1.a, v1.wB, v2.a, v2.wB); - break; - case 3: - combine3Vec2(pA, v1.a, v1.wA, v2.a, v2.wA, v3.a, v3.wA); - copyVec2(pB, pA); - break; - } - }; - Simplex.prototype.getMetric = function () { - switch (this.m_count) { - case 0: - return 0.0; - case 1: - return 0.0; - case 2: - return distVec2(this.m_v1.w, this.m_v2.w); - case 3: - return crossVec2Vec2(subVec2(temp1, this.m_v2.w, this.m_v1.w), subVec2(temp2, this.m_v3.w, this.m_v1.w)); - default: - return 0.0; - } - }; - Simplex.prototype.solve = function () { - switch (this.m_count) { - case 1: - break; - case 2: - this.solve2(); - break; - case 3: - this.solve3(); - break; - } - }; - // Solve a line segment using barycentric coordinates. - // - // p = a1 * w1 + a2 * w2 - // a1 + a2 = 1 - // - // The vector from the origin to the closest point on the line is - // perpendicular to the line. - // e12 = w2 - w1 - // dot(p, e) = 0 - // a1 * dot(w1, e) + a2 * dot(w2, e) = 0 - // - // 2-by-2 linear system - // [1 1 ][a1] = [1] - // [w1.e12 w2.e12][a2] = [0] - // - // Define - // d12_1 = dot(w2, e12) - // d12_2 = -dot(w1, e12) - // d12 = d12_1 + d12_2 - // - // Solution - // a1 = d12_1 / d12 - // a2 = d12_2 / d12 - Simplex.prototype.solve2 = function () { - var w1 = this.m_v1.w; - var w2 = this.m_v2.w; - subVec2(e12, w2, w1); - // w1 region - var d12_2 = -dotVec2(w1, e12); - if (d12_2 <= 0.0) { - // a2 <= 0, so we clamp it to 0 - this.m_v1.a = 1.0; - this.m_count = 1; - return; - } - // w2 region - var d12_1 = dotVec2(w2, e12); - if (d12_1 <= 0.0) { - // a1 <= 0, so we clamp it to 0 - this.m_v2.a = 1.0; - this.m_count = 1; - this.m_v1.set(this.m_v2); - return; - } - // Must be in e12 region. - var inv_d12 = 1.0 / (d12_1 + d12_2); +var DistanceProxy = ( + /** @class */ + function() { + function DistanceProxy2() { + this.m_vertices = []; + this.m_count = 0; + this.m_radius = 0; + } + DistanceProxy2.prototype.recycle = function() { + this.m_vertices.length = 0; + this.m_count = 0; + this.m_radius = 0; + }; + DistanceProxy2.prototype.getVertexCount = function() { + return this.m_count; + }; + DistanceProxy2.prototype.getVertex = function(index) { + return this.m_vertices[index]; + }; + DistanceProxy2.prototype.getSupport = function(d2) { + var bestIndex = -1; + var bestValue = -Infinity; + for (var i = 0; i < this.m_count; ++i) { + var value = dotVec2(this.m_vertices[i], d2); + if (value > bestValue) { + bestIndex = i; + bestValue = value; + } + } + return bestIndex; + }; + DistanceProxy2.prototype.getSupportVertex = function(d2) { + return this.m_vertices[this.getSupport(d2)]; + }; + DistanceProxy2.prototype.set = function(shape, index) { + shape.computeDistanceProxy(this, index); + }; + DistanceProxy2.prototype.setVertices = function(vertices, count, radius) { + this.m_vertices = vertices; + this.m_count = count; + this.m_radius = radius; + }; + return DistanceProxy2; + }() +); +var SimplexVertex = ( + /** @class */ + function() { + function SimplexVertex2() { + this.wA = vec2(0, 0); + this.indexA = 0; + this.wB = vec2(0, 0); + this.indexB = 0; + this.w = vec2(0, 0); + this.a = 0; + } + SimplexVertex2.prototype.recycle = function() { + this.indexA = 0; + this.indexB = 0; + zeroVec2(this.wA); + zeroVec2(this.wB); + zeroVec2(this.w); + this.a = 0; + }; + SimplexVertex2.prototype.set = function(v3) { + this.indexA = v3.indexA; + this.indexB = v3.indexB; + copyVec2(this.wA, v3.wA); + copyVec2(this.wB, v3.wB); + copyVec2(this.w, v3.w); + this.a = v3.a; + }; + return SimplexVertex2; + }() +); +var searchDirection_reuse = vec2(0, 0); +var closestPoint_reuse = vec2(0, 0); +var Simplex = ( + /** @class */ + function() { + function Simplex2() { + this.m_v1 = new SimplexVertex(); + this.m_v2 = new SimplexVertex(); + this.m_v3 = new SimplexVertex(); + this.m_v = [this.m_v1, this.m_v2, this.m_v3]; + } + Simplex2.prototype.recycle = function() { + this.m_v1.recycle(); + this.m_v2.recycle(); + this.m_v3.recycle(); + this.m_count = 0; + }; + Simplex2.prototype.toString = function() { + if (this.m_count === 3) { + return [ + "+" + this.m_count, + this.m_v1.a, + this.m_v1.wA.x, + this.m_v1.wA.y, + this.m_v1.wB.x, + this.m_v1.wB.y, + this.m_v2.a, + this.m_v2.wA.x, + this.m_v2.wA.y, + this.m_v2.wB.x, + this.m_v2.wB.y, + this.m_v3.a, + this.m_v3.wA.x, + this.m_v3.wA.y, + this.m_v3.wB.x, + this.m_v3.wB.y + ].toString(); + } else if (this.m_count === 2) { + return [ + "+" + this.m_count, + this.m_v1.a, + this.m_v1.wA.x, + this.m_v1.wA.y, + this.m_v1.wB.x, + this.m_v1.wB.y, + this.m_v2.a, + this.m_v2.wA.x, + this.m_v2.wA.y, + this.m_v2.wB.x, + this.m_v2.wB.y + ].toString(); + } else if (this.m_count === 1) { + return [ + "+" + this.m_count, + this.m_v1.a, + this.m_v1.wA.x, + this.m_v1.wA.y, + this.m_v1.wB.x, + this.m_v1.wB.y + ].toString(); + } else { + return "+" + this.m_count; + } + }; + Simplex2.prototype.readCache = function(cache2, proxyA, transformA, proxyB, transformB) { + this.m_count = cache2.count; + for (var i = 0; i < this.m_count; ++i) { + var v3 = this.m_v[i]; + v3.indexA = cache2.indexA[i]; + v3.indexB = cache2.indexB[i]; + var wALocal = proxyA.getVertex(v3.indexA); + var wBLocal = proxyB.getVertex(v3.indexB); + transformVec2(v3.wA, transformA, wALocal); + transformVec2(v3.wB, transformB, wBLocal); + subVec2(v3.w, v3.wB, v3.wA); + v3.a = 0; + } + if (this.m_count > 1) { + var metric1 = cache2.metric; + var metric2 = this.getMetric(); + if (metric2 < 0.5 * metric1 || 2 * metric1 < metric2 || metric2 < EPSILON) { + this.m_count = 0; + } + } + if (this.m_count === 0) { + var v3 = this.m_v[0]; + v3.indexA = 0; + v3.indexB = 0; + var wALocal = proxyA.getVertex(0); + var wBLocal = proxyB.getVertex(0); + transformVec2(v3.wA, transformA, wALocal); + transformVec2(v3.wB, transformB, wBLocal); + subVec2(v3.w, v3.wB, v3.wA); + v3.a = 1; + this.m_count = 1; + } + }; + Simplex2.prototype.writeCache = function(cache2) { + cache2.metric = this.getMetric(); + cache2.count = this.m_count; + for (var i = 0; i < this.m_count; ++i) { + cache2.indexA[i] = this.m_v[i].indexA; + cache2.indexB[i] = this.m_v[i].indexB; + } + }; + Simplex2.prototype.getSearchDirection = function() { + var v13 = this.m_v1; + var v22 = this.m_v2; + this.m_v3; + switch (this.m_count) { + case 1: + return setVec2(searchDirection_reuse, -v13.w.x, -v13.w.y); + case 2: { + subVec2(e12, v22.w, v13.w); + var sgn = -crossVec2Vec2(e12, v13.w); + if (sgn > 0) { + return setVec2(searchDirection_reuse, -e12.y, e12.x); + } else { + return setVec2(searchDirection_reuse, e12.y, -e12.x); + } + } + default: + return zeroVec2(searchDirection_reuse); + } + }; + Simplex2.prototype.getClosestPoint = function() { + var v13 = this.m_v1; + var v22 = this.m_v2; + this.m_v3; + switch (this.m_count) { + case 0: + return zeroVec2(closestPoint_reuse); + case 1: + return copyVec2(closestPoint_reuse, v13.w); + case 2: + return combine2Vec2(closestPoint_reuse, v13.a, v13.w, v22.a, v22.w); + case 3: + return zeroVec2(closestPoint_reuse); + default: + return zeroVec2(closestPoint_reuse); + } + }; + Simplex2.prototype.getWitnessPoints = function(pA2, pB2) { + var v13 = this.m_v1; + var v22 = this.m_v2; + var v3 = this.m_v3; + switch (this.m_count) { + case 0: + break; + case 1: + copyVec2(pA2, v13.wA); + copyVec2(pB2, v13.wB); + break; + case 2: + combine2Vec2(pA2, v13.a, v13.wA, v22.a, v22.wA); + combine2Vec2(pB2, v13.a, v13.wB, v22.a, v22.wB); + break; + case 3: + combine3Vec2(pA2, v13.a, v13.wA, v22.a, v22.wA, v3.a, v3.wA); + copyVec2(pB2, pA2); + break; + } + }; + Simplex2.prototype.getMetric = function() { + switch (this.m_count) { + case 0: + return 0; + case 1: + return 0; + case 2: + return distVec2(this.m_v1.w, this.m_v2.w); + case 3: + return crossVec2Vec2(subVec2(temp1, this.m_v2.w, this.m_v1.w), subVec2(temp2, this.m_v3.w, this.m_v1.w)); + default: + return 0; + } + }; + Simplex2.prototype.solve = function() { + switch (this.m_count) { + case 1: + break; + case 2: + this.solve2(); + break; + case 3: + this.solve3(); + break; + } + }; + Simplex2.prototype.solve2 = function() { + var w1 = this.m_v1.w; + var w2 = this.m_v2.w; + subVec2(e12, w2, w1); + var d12_2 = -dotVec2(w1, e12); + if (d12_2 <= 0) { + this.m_v1.a = 1; + this.m_count = 1; + return; + } + var d12_1 = dotVec2(w2, e12); + if (d12_1 <= 0) { + this.m_v2.a = 1; + this.m_count = 1; + this.m_v1.set(this.m_v2); + return; + } + var inv_d12 = 1 / (d12_1 + d12_2); + this.m_v1.a = d12_1 * inv_d12; + this.m_v2.a = d12_2 * inv_d12; + this.m_count = 2; + }; + Simplex2.prototype.solve3 = function() { + var w1 = this.m_v1.w; + var w2 = this.m_v2.w; + var w3 = this.m_v3.w; + subVec2(e12, w2, w1); + var w1e12 = dotVec2(w1, e12); + var w2e12 = dotVec2(w2, e12); + var d12_1 = w2e12; + var d12_2 = -w1e12; + subVec2(e13, w3, w1); + var w1e13 = dotVec2(w1, e13); + var w3e13 = dotVec2(w3, e13); + var d13_1 = w3e13; + var d13_2 = -w1e13; + subVec2(e23, w3, w2); + var w2e23 = dotVec2(w2, e23); + var w3e23 = dotVec2(w3, e23); + var d23_1 = w3e23; + var d23_2 = -w2e23; + var n123 = crossVec2Vec2(e12, e13); + var d123_1 = n123 * crossVec2Vec2(w2, w3); + var d123_2 = n123 * crossVec2Vec2(w3, w1); + var d123_3 = n123 * crossVec2Vec2(w1, w2); + if (d12_2 <= 0 && d13_2 <= 0) { + this.m_v1.a = 1; + this.m_count = 1; + return; + } + if (d12_1 > 0 && d12_2 > 0 && d123_3 <= 0) { + var inv_d12 = 1 / (d12_1 + d12_2); this.m_v1.a = d12_1 * inv_d12; this.m_v2.a = d12_2 * inv_d12; this.m_count = 2; - }; - // Possible regions: - // - points[2] - // - edge points[0]-points[2] - // - edge points[1]-points[2] - // - inside the triangle - Simplex.prototype.solve3 = function () { - var w1 = this.m_v1.w; - var w2 = this.m_v2.w; - var w3 = this.m_v3.w; - // Edge12 - // [1 1 ][a1] = [1] - // [w1.e12 w2.e12][a2] = [0] - // a3 = 0 - subVec2(e12, w2, w1); - var w1e12 = dotVec2(w1, e12); - var w2e12 = dotVec2(w2, e12); - var d12_1 = w2e12; - var d12_2 = -w1e12; - // Edge13 - // [1 1 ][a1] = [1] - // [w1.e13 w3.e13][a3] = [0] - // a2 = 0 - subVec2(e13, w3, w1); - var w1e13 = dotVec2(w1, e13); - var w3e13 = dotVec2(w3, e13); - var d13_1 = w3e13; - var d13_2 = -w1e13; - // Edge23 - // [1 1 ][a2] = [1] - // [w2.e23 w3.e23][a3] = [0] - // a1 = 0 - subVec2(e23, w3, w2); - var w2e23 = dotVec2(w2, e23); - var w3e23 = dotVec2(w3, e23); - var d23_1 = w3e23; - var d23_2 = -w2e23; - // Triangle123 - var n123 = crossVec2Vec2(e12, e13); - var d123_1 = n123 * crossVec2Vec2(w2, w3); - var d123_2 = n123 * crossVec2Vec2(w3, w1); - var d123_3 = n123 * crossVec2Vec2(w1, w2); - // w1 region - if (d12_2 <= 0.0 && d13_2 <= 0.0) { - this.m_v1.a = 1.0; - this.m_count = 1; - return; - } - // e12 - if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) { - var inv_d12 = 1.0 / (d12_1 + d12_2); - this.m_v1.a = d12_1 * inv_d12; - this.m_v2.a = d12_2 * inv_d12; - this.m_count = 2; - return; - } - // e13 - if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) { - var inv_d13 = 1.0 / (d13_1 + d13_2); - this.m_v1.a = d13_1 * inv_d13; - this.m_v3.a = d13_2 * inv_d13; - this.m_count = 2; - this.m_v2.set(this.m_v3); - return; - } - // w2 region - if (d12_1 <= 0.0 && d23_2 <= 0.0) { - this.m_v2.a = 1.0; - this.m_count = 1; - this.m_v1.set(this.m_v2); - return; - } - // w3 region - if (d13_1 <= 0.0 && d23_1 <= 0.0) { - this.m_v3.a = 1.0; - this.m_count = 1; - this.m_v1.set(this.m_v3); - return; - } - // e23 - if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) { - var inv_d23 = 1.0 / (d23_1 + d23_2); - this.m_v2.a = d23_1 * inv_d23; - this.m_v3.a = d23_2 * inv_d23; - this.m_count = 2; - this.m_v1.set(this.m_v3); - return; - } - // Must be in triangle123 - var inv_d123 = 1.0 / (d123_1 + d123_2 + d123_3); - this.m_v1.a = d123_1 * inv_d123; - this.m_v2.a = d123_2 * inv_d123; - this.m_v3.a = d123_3 * inv_d123; - this.m_count = 3; - }; - return Simplex; -}()); -/** @internal */ var simplex = new Simplex(); -/** @internal */ var input$1 = new DistanceInput(); -/** @internal */ var cache$1 = new SimplexCache(); -/** @internal */ var output$1 = new DistanceOutput(); -/** - * Determine if two generic shapes overlap. - */ -var testOverlap = function (shapeA, indexA, shapeB, indexB, xfA, xfB) { - input$1.recycle(); - input$1.proxyA.set(shapeA, indexA); - input$1.proxyB.set(shapeB, indexB); - copyTransform(input$1.transformA, xfA); - copyTransform(input$1.transformB, xfB); - input$1.useRadii = true; - output$1.recycle(); - cache$1.recycle(); - Distance(output$1, cache$1, input$1); - return output$1.distance < 10.0 * EPSILON; + return; + } + if (d13_1 > 0 && d13_2 > 0 && d123_2 <= 0) { + var inv_d13 = 1 / (d13_1 + d13_2); + this.m_v1.a = d13_1 * inv_d13; + this.m_v3.a = d13_2 * inv_d13; + this.m_count = 2; + this.m_v2.set(this.m_v3); + return; + } + if (d12_1 <= 0 && d23_2 <= 0) { + this.m_v2.a = 1; + this.m_count = 1; + this.m_v1.set(this.m_v2); + return; + } + if (d13_1 <= 0 && d23_1 <= 0) { + this.m_v3.a = 1; + this.m_count = 1; + this.m_v1.set(this.m_v3); + return; + } + if (d23_1 > 0 && d23_2 > 0 && d123_1 <= 0) { + var inv_d23 = 1 / (d23_1 + d23_2); + this.m_v2.a = d23_1 * inv_d23; + this.m_v3.a = d23_2 * inv_d23; + this.m_count = 2; + this.m_v1.set(this.m_v3); + return; + } + var inv_d123 = 1 / (d123_1 + d123_2 + d123_3); + this.m_v1.a = d123_1 * inv_d123; + this.m_v2.a = d123_2 * inv_d123; + this.m_v3.a = d123_3 * inv_d123; + this.m_count = 3; + }; + return Simplex2; + }() +); +var simplex = new Simplex(); +var input$1 = new DistanceInput(); +var cache$1 = new SimplexCache(); +var output$1 = new DistanceOutput(); +var testOverlap = function(shapeA, indexA, shapeB, indexB, xfA2, xfB2) { + input$1.recycle(); + input$1.proxyA.set(shapeA, indexA); + input$1.proxyB.set(shapeB, indexB); + copyTransform(input$1.transformA, xfA2); + copyTransform(input$1.transformB, xfB2); + input$1.useRadii = true; + output$1.recycle(); + cache$1.recycle(); + Distance(output$1, cache$1, input$1); + return output$1.distance < 10 * EPSILON; }; -// legacy exports Distance.testOverlap = testOverlap; Distance.Input = DistanceInput; Distance.Output = DistanceOutput; Distance.Proxy = DistanceProxy; Distance.Cache = SimplexCache; -/** - * Input parameters for ShapeCast - */ -var ShapeCastInput = /** @class */ (function () { - function ShapeCastInput() { - this.proxyA = new DistanceProxy(); - this.proxyB = new DistanceProxy(); - this.transformA = Transform.identity(); - this.transformB = Transform.identity(); - this.translationB = Vec2.zero(); - } - ShapeCastInput.prototype.recycle = function () { - this.proxyA.recycle(); - this.proxyB.recycle(); - this.transformA.setIdentity(); - this.transformB.setIdentity(); - zeroVec2(this.translationB); - }; - return ShapeCastInput; -}()); -/** - * Output results for b2ShapeCast - */ -var ShapeCastOutput = /** @class */ (function () { - function ShapeCastOutput() { - this.point = Vec2.zero(); - this.normal = Vec2.zero(); - this.lambda = 1.0; - this.iterations = 0; - } - return ShapeCastOutput; -}()); -/** - * Perform a linear shape cast of shape B moving and shape A fixed. Determines - * the hit point, normal, and translation fraction. - * - * @returns true if hit, false if there is no hit or an initial overlap - */ -// -// GJK-raycast -// Algorithm by Gino van den Bergen. -// "Smooth Mesh Contacts with GJK" in Game Physics Pearls. 2010 -var ShapeCast = function (output, input) { - output.iterations = 0; - output.lambda = 1.0; - output.normal.setZero(); - output.point.setZero(); - var proxyA = input.proxyA; - var proxyB = input.proxyB; - var radiusA = math_max$4(proxyA.m_radius, SettingsInternal.polygonRadius); - var radiusB = math_max$4(proxyB.m_radius, SettingsInternal.polygonRadius); - var radius = radiusA + radiusB; - var xfA = input.transformA; - var xfB = input.transformB; - var r = input.translationB; - var n = Vec2.zero(); - var lambda = 0.0; - // Initial simplex - var simplex = new Simplex(); - simplex.m_count = 0; - // Get simplex vertices as an array. - var vertices = simplex.m_v; - // Get support point in -r direction - var indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(r))); - var wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA)); - var indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, r)); - var wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB)); - var v = Vec2.sub(wA, wB); - // Sigma is the target distance between polygons - var sigma = math_max$4(SettingsInternal.polygonRadius, radius - SettingsInternal.polygonRadius); - var tolerance = 0.5 * SettingsInternal.linearSlop; - // Main iteration loop. - var k_maxIters = 20; - var iter = 0; - while (iter < k_maxIters && v.length() - sigma > tolerance) { - output.iterations += 1; - // Support in direction -v (A - B) - indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(v))); - wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA)); - indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, v)); - wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB)); - var p = Vec2.sub(wA, wB); - // -v is a normal at p - v.normalize(); - // Intersect ray with plane - var vp = Vec2.dot(v, p); - var vr = Vec2.dot(v, r); - if (vp - sigma > lambda * vr) { - if (vr <= 0.0) { - return false; - } - lambda = (vp - sigma) / vr; - if (lambda > 1.0) { - return false; - } - n.setMul(-1, v); - simplex.m_count = 0; - } - // Reverse simplex since it works with B - A. - // Shift by lambda * r because we want the closest point to the current clip point. - // Note that the support point p is not shifted because we want the plane equation - // to be formed in unshifted space. - var vertex = vertices[simplex.m_count]; - vertex.indexA = indexB; - vertex.wA = Vec2.combine(1, wB, lambda, r); - vertex.indexB = indexA; - vertex.wB = wA; - vertex.w = Vec2.sub(vertex.wB, vertex.wA); - vertex.a = 1.0; - simplex.m_count += 1; - switch (simplex.m_count) { - case 1: - break; - case 2: - simplex.solve2(); - break; - case 3: - simplex.solve3(); - break; - } - // If we have 3 points, then the origin is in the corresponding triangle. - if (simplex.m_count == 3) { - // Overlap - return false; - } - // Get search direction. - v.setVec2(simplex.getClosestPoint()); - // Iteration count is equated to the number of support point calls. - ++iter; - } - if (iter == 0) { - // Initial overlap +var ShapeCastInput = ( + /** @class */ + function() { + function ShapeCastInput2() { + this.proxyA = new DistanceProxy(); + this.proxyB = new DistanceProxy(); + this.transformA = Transform.identity(); + this.transformB = Transform.identity(); + this.translationB = Vec2.zero(); + } + ShapeCastInput2.prototype.recycle = function() { + this.proxyA.recycle(); + this.proxyB.recycle(); + this.transformA.setIdentity(); + this.transformB.setIdentity(); + zeroVec2(this.translationB); + }; + return ShapeCastInput2; + }() +); +var ShapeCastOutput = ( + /** @class */ + /* @__PURE__ */ function() { + function ShapeCastOutput2() { + this.point = Vec2.zero(); + this.normal = Vec2.zero(); + this.lambda = 1; + this.iterations = 0; + } + return ShapeCastOutput2; + }() +); +var ShapeCast = function(output2, input2) { + output2.iterations = 0; + output2.lambda = 1; + output2.normal.setZero(); + output2.point.setZero(); + var proxyA = input2.proxyA; + var proxyB = input2.proxyB; + var radiusA = math_max$4(proxyA.m_radius, SettingsInternal.polygonRadius); + var radiusB = math_max$4(proxyB.m_radius, SettingsInternal.polygonRadius); + var radius = radiusA + radiusB; + var xfA2 = input2.transformA; + var xfB2 = input2.transformB; + var r = input2.translationB; + var n2 = Vec2.zero(); + var lambda = 0; + var simplex2 = new Simplex(); + simplex2.m_count = 0; + var vertices = simplex2.m_v; + var indexA = proxyA.getSupport(Rot.mulTVec2(xfA2.q, Vec2.neg(r))); + var wA = Transform.mulVec2(xfA2, proxyA.getVertex(indexA)); + var indexB = proxyB.getSupport(Rot.mulTVec2(xfB2.q, r)); + var wB = Transform.mulVec2(xfB2, proxyB.getVertex(indexB)); + var v3 = Vec2.sub(wA, wB); + var sigma = math_max$4(SettingsInternal.polygonRadius, radius - SettingsInternal.polygonRadius); + var tolerance = 0.5 * SettingsInternal.linearSlop; + var k_maxIters = 20; + var iter = 0; + while (iter < k_maxIters && v3.length() - sigma > tolerance) { + output2.iterations += 1; + indexA = proxyA.getSupport(Rot.mulTVec2(xfA2.q, Vec2.neg(v3))); + wA = Transform.mulVec2(xfA2, proxyA.getVertex(indexA)); + indexB = proxyB.getSupport(Rot.mulTVec2(xfB2.q, v3)); + wB = Transform.mulVec2(xfB2, proxyB.getVertex(indexB)); + var p = Vec2.sub(wA, wB); + v3.normalize(); + var vp = Vec2.dot(v3, p); + var vr = Vec2.dot(v3, r); + if (vp - sigma > lambda * vr) { + if (vr <= 0) { return false; - } - // Prepare output. - var pointA = Vec2.zero(); - var pointB = Vec2.zero(); - simplex.getWitnessPoints(pointB, pointA); - if (v.lengthSquared() > 0.0) { - n.setMul(-1, v); - n.normalize(); - } - output.point = Vec2.combine(1, pointA, radiusA, n); - output.normal = n; - output.lambda = lambda; - output.iterations = iter; - return true; + } + lambda = (vp - sigma) / vr; + if (lambda > 1) { + return false; + } + n2.setMul(-1, v3); + simplex2.m_count = 0; + } + var vertex = vertices[simplex2.m_count]; + vertex.indexA = indexB; + vertex.wA = Vec2.combine(1, wB, lambda, r); + vertex.indexB = indexA; + vertex.wB = wA; + vertex.w = Vec2.sub(vertex.wB, vertex.wA); + vertex.a = 1; + simplex2.m_count += 1; + switch (simplex2.m_count) { + case 1: + break; + case 2: + simplex2.solve2(); + break; + case 3: + simplex2.solve3(); + break; + } + if (simplex2.m_count == 3) { + return false; + } + v3.setVec2(simplex2.getClosestPoint()); + ++iter; + } + if (iter == 0) { + return false; + } + var pointA2 = Vec2.zero(); + var pointB2 = Vec2.zero(); + simplex2.getWitnessPoints(pointB2, pointA2); + if (v3.lengthSquared() > 0) { + n2.setMul(-1, v3); + n2.normalize(); + } + output2.point = Vec2.combine(1, pointA2, radiusA, n2); + output2.normal = n2; + output2.lambda = lambda; + output2.iterations = iter; + return true; }; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$7 = Math.abs; -/** @internal */ var math_max$3 = Math.max; -/** - * Input parameters for TimeOfImpact. - */ -var TOIInput = /** @class */ (function () { - function TOIInput() { - this.proxyA = new DistanceProxy(); - this.proxyB = new DistanceProxy(); - this.sweepA = new Sweep(); - this.sweepB = new Sweep(); - } - TOIInput.prototype.recycle = function () { - this.proxyA.recycle(); - this.proxyB.recycle(); - this.sweepA.recycle(); - this.sweepB.recycle(); - this.tMax = -1; - }; - return TOIInput; -}()); +var math_abs$7 = Math.abs; +var math_max$3 = Math.max; +var TOIInput = ( + /** @class */ + function() { + function TOIInput2() { + this.proxyA = new DistanceProxy(); + this.proxyB = new DistanceProxy(); + this.sweepA = new Sweep(); + this.sweepB = new Sweep(); + } + TOIInput2.prototype.recycle = function() { + this.proxyA.recycle(); + this.proxyB.recycle(); + this.sweepA.recycle(); + this.sweepB.recycle(); + this.tMax = -1; + }; + return TOIInput2; + }() +); var TOIOutputState; -(function (TOIOutputState) { - TOIOutputState[TOIOutputState["e_unset"] = -1] = "e_unset"; - TOIOutputState[TOIOutputState["e_unknown"] = 0] = "e_unknown"; - TOIOutputState[TOIOutputState["e_failed"] = 1] = "e_failed"; - TOIOutputState[TOIOutputState["e_overlapped"] = 2] = "e_overlapped"; - TOIOutputState[TOIOutputState["e_touching"] = 3] = "e_touching"; - TOIOutputState[TOIOutputState["e_separated"] = 4] = "e_separated"; +(function(TOIOutputState2) { + TOIOutputState2[TOIOutputState2["e_unset"] = -1] = "e_unset"; + TOIOutputState2[TOIOutputState2["e_unknown"] = 0] = "e_unknown"; + TOIOutputState2[TOIOutputState2["e_failed"] = 1] = "e_failed"; + TOIOutputState2[TOIOutputState2["e_overlapped"] = 2] = "e_overlapped"; + TOIOutputState2[TOIOutputState2["e_touching"] = 3] = "e_touching"; + TOIOutputState2[TOIOutputState2["e_separated"] = 4] = "e_separated"; })(TOIOutputState || (TOIOutputState = {})); -/** - * Output parameters for TimeOfImpact. - */ -var TOIOutput = /** @class */ (function () { - function TOIOutput() { - this.state = TOIOutputState.e_unset; - this.t = -1; - } - TOIOutput.prototype.recycle = function () { - this.state = TOIOutputState.e_unset; - this.t = -1; - }; - return TOIOutput; -}()); +var TOIOutput = ( + /** @class */ + function() { + function TOIOutput2() { + this.state = TOIOutputState.e_unset; + this.t = -1; + } + TOIOutput2.prototype.recycle = function() { + this.state = TOIOutputState.e_unset; + this.t = -1; + }; + return TOIOutput2; + }() +); stats.toiTime = 0; stats.toiMaxTime = 0; stats.toiCalls = 0; @@ -5299,10866 +3759,8061 @@ stats.toiIters = 0; stats.toiMaxIters = 0; stats.toiRootIters = 0; stats.toiMaxRootIters = 0; -/** @internal */ var distanceInput = new DistanceInput(); -/** @internal */ var distanceOutput = new DistanceOutput(); -// this is passed to Distance and SeparationFunction -/** @internal */ var cache = new SimplexCache(); -/** @internal */ var xfA$1 = transform(0, 0, 0); -/** @internal */ var xfB$1 = transform(0, 0, 0); -/** @internal */ var temp$4 = vec2(0, 0); -/** @internal */ var pointA$2 = vec2(0, 0); -/** @internal */ var pointB$2 = vec2(0, 0); -/** @internal */ var normal$3 = vec2(0, 0); -/** @internal */ var axisA = vec2(0, 0); -/** @internal */ var axisB = vec2(0, 0); -/** @internal */ var localPointA = vec2(0, 0); -/** @internal */ var localPointB = vec2(0, 0); -/** - * Compute the upper bound on time before two shapes penetrate. Time is - * represented as a fraction between [0,tMax]. This uses a swept separating axis - * and may miss some intermediate, non-tunneling collisions. If you change the - * time interval, you should call this function again. - * - * Note: use Distance to compute the contact point and normal at the time of - * impact. - * - * CCD via the local separating axis method. This seeks progression by computing - * the largest time at which separation is maintained. - */ -var TimeOfImpact = function (output, input) { - var timer = Timer.now(); - ++stats.toiCalls; - output.state = TOIOutputState.e_unknown; - output.t = input.tMax; - var proxyA = input.proxyA; // DistanceProxy - var proxyB = input.proxyB; // DistanceProxy - var sweepA = input.sweepA; // Sweep - var sweepB = input.sweepB; // Sweep - // Large rotations can make the root finder fail, so we normalize the - // sweep angles. - sweepA.normalize(); - sweepB.normalize(); - var tMax = input.tMax; - var totalRadius = proxyA.m_radius + proxyB.m_radius; - var target = math_max$3(SettingsInternal.linearSlop, totalRadius - 3.0 * SettingsInternal.linearSlop); - var tolerance = 0.25 * SettingsInternal.linearSlop; - var t1 = 0.0; - var k_maxIterations = SettingsInternal.maxTOIIterations; - var iter = 0; - // Prepare input for distance query. - // const cache = new SimplexCache(); - cache.recycle(); - distanceInput.proxyA.setVertices(proxyA.m_vertices, proxyA.m_count, proxyA.m_radius); - distanceInput.proxyB.setVertices(proxyB.m_vertices, proxyB.m_count, proxyB.m_radius); - distanceInput.useRadii = false; - // The outer loop progressively attempts to compute new separating axes. - // This loop terminates when an axis is repeated (no progress is made). +var distanceInput = new DistanceInput(); +var distanceOutput = new DistanceOutput(); +var cache = new SimplexCache(); +var xfA$1 = transform(0, 0, 0); +var xfB$1 = transform(0, 0, 0); +var temp$4 = vec2(0, 0); +var pointA$2 = vec2(0, 0); +var pointB$2 = vec2(0, 0); +var normal$3 = vec2(0, 0); +var axisA = vec2(0, 0); +var axisB = vec2(0, 0); +var localPointA = vec2(0, 0); +var localPointB = vec2(0, 0); +var TimeOfImpact = function(output2, input2) { + var timer = Timer.now(); + ++stats.toiCalls; + output2.state = TOIOutputState.e_unknown; + output2.t = input2.tMax; + var proxyA = input2.proxyA; + var proxyB = input2.proxyB; + var sweepA = input2.sweepA; + var sweepB = input2.sweepB; + sweepA.normalize(); + sweepB.normalize(); + var tMax = input2.tMax; + var totalRadius = proxyA.m_radius + proxyB.m_radius; + var target = math_max$3(SettingsInternal.linearSlop, totalRadius - 3 * SettingsInternal.linearSlop); + var tolerance = 0.25 * SettingsInternal.linearSlop; + var t1 = 0; + var k_maxIterations = SettingsInternal.maxTOIIterations; + var iter = 0; + cache.recycle(); + distanceInput.proxyA.setVertices(proxyA.m_vertices, proxyA.m_count, proxyA.m_radius); + distanceInput.proxyB.setVertices(proxyB.m_vertices, proxyB.m_count, proxyB.m_radius); + distanceInput.useRadii = false; + while (true) { + sweepA.getTransform(xfA$1, t1); + sweepB.getTransform(xfB$1, t1); + copyTransform(distanceInput.transformA, xfA$1); + copyTransform(distanceInput.transformB, xfB$1); + Distance(distanceOutput, cache, distanceInput); + if (distanceOutput.distance <= 0) { + output2.state = TOIOutputState.e_overlapped; + output2.t = 0; + break; + } + if (distanceOutput.distance < target + tolerance) { + output2.state = TOIOutputState.e_touching; + output2.t = t1; + break; + } + separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1); + var done = false; + var t2 = tMax; + var pushBackIter = 0; while (true) { - sweepA.getTransform(xfA$1, t1); - sweepB.getTransform(xfB$1, t1); - // Get the distance between shapes. We can also use the results - // to get a separating axis. - copyTransform(distanceInput.transformA, xfA$1); - copyTransform(distanceInput.transformB, xfB$1); - Distance(distanceOutput, cache, distanceInput); - // If the shapes are overlapped, we give up on continuous collision. - if (distanceOutput.distance <= 0.0) { - // Failure! - output.state = TOIOutputState.e_overlapped; - output.t = 0.0; - break; - } - if (distanceOutput.distance < target + tolerance) { - // Victory! - output.state = TOIOutputState.e_touching; - output.t = t1; - break; - } - // Initialize the separating axis. - separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1); - // if (false) { - // // Dump the curve seen by the root finder - // const N = 100; - // const dx = 1.0 / N; - // const xs = []; // [ N + 1 ]; - // const fs = []; // [ N + 1 ]; - // const x = 0.0; - // for (const i = 0; i <= N; ++i) { - // sweepA.getTransform(xfA, x); - // sweepB.getTransform(xfB, x); - // const f = fcn.evaluate(xfA, xfB) - target; - // printf("%g %g\n", x, f); - // xs[i] = x; - // fs[i] = f; - // x += dx; - // } - // } - // Compute the TOI on the separating axis. We do this by successively - // resolving the deepest point. This loop is bounded by the number of - // vertices. - var done = false; - var t2 = tMax; - var pushBackIter = 0; - while (true) { - // Find the deepest point at t2. Store the witness point indices. - var s2 = separationFunction.findMinSeparation(t2); - // Is the final configuration separated? - if (s2 > target + tolerance) { - // Victory! - output.state = TOIOutputState.e_separated; - output.t = tMax; - done = true; - break; - } - // Has the separation reached tolerance? - if (s2 > target - tolerance) { - // Advance the sweeps - t1 = t2; - break; - } - // Compute the initial separation of the witness points. - var s1 = separationFunction.evaluate(t1); - // Check for initial overlap. This might happen if the root finder - // runs out of iterations. - if (s1 < target - tolerance) { - output.state = TOIOutputState.e_failed; - output.t = t1; - done = true; - break; - } - // Check for touching - if (s1 <= target + tolerance) { - // Victory! t1 should hold the TOI (could be 0.0). - output.state = TOIOutputState.e_touching; - output.t = t1; - done = true; - break; - } - // Compute 1D root of: f(x) - target = 0 - var rootIterCount = 0; - var a1 = t1; - var a2 = t2; - while (true) { - // Use a mix of the secant rule and bisection. - var t = void 0; - if (rootIterCount & 1) { - // Secant rule to improve convergence. - t = a1 + (target - s1) * (a2 - a1) / (s2 - s1); - } - else { - // Bisection to guarantee progress. - t = 0.5 * (a1 + a2); - } - ++rootIterCount; - ++stats.toiRootIters; - var s = separationFunction.evaluate(t); - if (math_abs$7(s - target) < tolerance) { - // t2 holds a tentative value for t1 - t2 = t; - break; - } - // Ensure we continue to bracket the root. - if (s > target) { - a1 = t; - s1 = s; - } - else { - a2 = t; - s2 = s; - } - if (rootIterCount === 50) { - break; - } - } - stats.toiMaxRootIters = math_max$3(stats.toiMaxRootIters, rootIterCount); - ++pushBackIter; - if (pushBackIter === SettingsInternal.maxPolygonVertices) { - break; - } - } - ++iter; - ++stats.toiIters; - if (done) { - break; - } - if (iter === k_maxIterations) { - // Root finder got stuck. Semi-victory. - output.state = TOIOutputState.e_failed; - output.t = t1; - break; - } - } - stats.toiMaxIters = math_max$3(stats.toiMaxIters, iter); - var time = Timer.diff(timer); - stats.toiMaxTime = math_max$3(stats.toiMaxTime, time); - stats.toiTime += time; - separationFunction.recycle(); + var s2 = separationFunction.findMinSeparation(t2); + if (s2 > target + tolerance) { + output2.state = TOIOutputState.e_separated; + output2.t = tMax; + done = true; + break; + } + if (s2 > target - tolerance) { + t1 = t2; + break; + } + var s1 = separationFunction.evaluate(t1); + if (s1 < target - tolerance) { + output2.state = TOIOutputState.e_failed; + output2.t = t1; + done = true; + break; + } + if (s1 <= target + tolerance) { + output2.state = TOIOutputState.e_touching; + output2.t = t1; + done = true; + break; + } + var rootIterCount = 0; + var a1 = t1; + var a2 = t2; + while (true) { + var t = void 0; + if (rootIterCount & 1) { + t = a1 + (target - s1) * (a2 - a1) / (s2 - s1); + } else { + t = 0.5 * (a1 + a2); + } + ++rootIterCount; + ++stats.toiRootIters; + var s3 = separationFunction.evaluate(t); + if (math_abs$7(s3 - target) < tolerance) { + t2 = t; + break; + } + if (s3 > target) { + a1 = t; + s1 = s3; + } else { + a2 = t; + s2 = s3; + } + if (rootIterCount === 50) { + break; + } + } + stats.toiMaxRootIters = math_max$3(stats.toiMaxRootIters, rootIterCount); + ++pushBackIter; + if (pushBackIter === SettingsInternal.maxPolygonVertices) { + break; + } + } + ++iter; + ++stats.toiIters; + if (done) { + break; + } + if (iter === k_maxIterations) { + output2.state = TOIOutputState.e_failed; + output2.t = t1; + break; + } + } + stats.toiMaxIters = math_max$3(stats.toiMaxIters, iter); + var time = Timer.diff(timer); + stats.toiMaxTime = math_max$3(stats.toiMaxTime, time); + stats.toiTime += time; + separationFunction.recycle(); }; var SeparationFunctionType; -(function (SeparationFunctionType) { - SeparationFunctionType[SeparationFunctionType["e_unset"] = -1] = "e_unset"; - SeparationFunctionType[SeparationFunctionType["e_points"] = 1] = "e_points"; - SeparationFunctionType[SeparationFunctionType["e_faceA"] = 2] = "e_faceA"; - SeparationFunctionType[SeparationFunctionType["e_faceB"] = 3] = "e_faceB"; +(function(SeparationFunctionType2) { + SeparationFunctionType2[SeparationFunctionType2["e_unset"] = -1] = "e_unset"; + SeparationFunctionType2[SeparationFunctionType2["e_points"] = 1] = "e_points"; + SeparationFunctionType2[SeparationFunctionType2["e_faceA"] = 2] = "e_faceA"; + SeparationFunctionType2[SeparationFunctionType2["e_faceB"] = 3] = "e_faceB"; })(SeparationFunctionType || (SeparationFunctionType = {})); -var SeparationFunction = /** @class */ (function () { - function SeparationFunction() { - // input cache - // todo: maybe assign by copy instead of reference? - this.m_proxyA = null; - this.m_proxyB = null; - this.m_sweepA = null; - this.m_sweepB = null; - // initialize cache - this.m_type = SeparationFunctionType.e_unset; - this.m_localPoint = vec2(0, 0); - this.m_axis = vec2(0, 0); - // compute output - this.indexA = -1; - this.indexB = -1; - } - SeparationFunction.prototype.recycle = function () { - this.m_proxyA = null; - this.m_proxyB = null; - this.m_sweepA = null; - this.m_sweepB = null; - this.m_type = SeparationFunctionType.e_unset; - zeroVec2(this.m_localPoint); - zeroVec2(this.m_axis); - this.indexA = -1; - this.indexB = -1; - }; - // TODO_ERIN might not need to return the separation - SeparationFunction.prototype.initialize = function (cache, proxyA, sweepA, proxyB, sweepB, t1) { - var count = cache.count; - this.m_proxyA = proxyA; - this.m_proxyB = proxyB; - this.m_sweepA = sweepA; - this.m_sweepB = sweepB; - this.m_sweepA.getTransform(xfA$1, t1); - this.m_sweepB.getTransform(xfB$1, t1); - if (count === 1) { - this.m_type = SeparationFunctionType.e_points; - var localPointA_1 = this.m_proxyA.getVertex(cache.indexA[0]); - var localPointB_1 = this.m_proxyB.getVertex(cache.indexB[0]); - transformVec2(pointA$2, xfA$1, localPointA_1); - transformVec2(pointB$2, xfB$1, localPointB_1); - subVec2(this.m_axis, pointB$2, pointA$2); - var s = normalizeVec2Length(this.m_axis); - return s; - } - else if (cache.indexA[0] === cache.indexA[1]) { - // Two points on B and one on A. - this.m_type = SeparationFunctionType.e_faceB; - var localPointB1 = proxyB.getVertex(cache.indexB[0]); - var localPointB2 = proxyB.getVertex(cache.indexB[1]); - crossVec2Num(this.m_axis, subVec2(temp$4, localPointB2, localPointB1), 1.0); - normalizeVec2(this.m_axis); - rotVec2(normal$3, xfB$1.q, this.m_axis); - combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2); - transformVec2(pointB$2, xfB$1, this.m_localPoint); - var localPointA_2 = proxyA.getVertex(cache.indexA[0]); - var pointA_1 = Transform.mulVec2(xfA$1, localPointA_2); - var s = dotVec2(pointA_1, normal$3) - dotVec2(pointB$2, normal$3); - if (s < 0.0) { - negVec2(this.m_axis); - s = -s; - } - return s; - } - else { - // Two points on A and one or two points on B. - this.m_type = SeparationFunctionType.e_faceA; - var localPointA1 = this.m_proxyA.getVertex(cache.indexA[0]); - var localPointA2 = this.m_proxyA.getVertex(cache.indexA[1]); - crossVec2Num(this.m_axis, subVec2(temp$4, localPointA2, localPointA1), 1.0); - normalizeVec2(this.m_axis); - rotVec2(normal$3, xfA$1.q, this.m_axis); - combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2); - transformVec2(pointA$2, xfA$1, this.m_localPoint); - var localPointB_2 = this.m_proxyB.getVertex(cache.indexB[0]); - transformVec2(pointB$2, xfB$1, localPointB_2); - var s = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); - if (s < 0.0) { - negVec2(this.m_axis); - s = -s; - } - return s; - } - }; - SeparationFunction.prototype.compute = function (find, t) { - // It was findMinSeparation and evaluate - this.m_sweepA.getTransform(xfA$1, t); - this.m_sweepB.getTransform(xfB$1, t); - switch (this.m_type) { - case SeparationFunctionType.e_points: { - if (find) { - derotVec2(axisA, xfA$1.q, this.m_axis); - derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, this.m_axis)); - this.indexA = this.m_proxyA.getSupport(axisA); - this.indexB = this.m_proxyB.getSupport(axisB); - } - copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); - copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); - transformVec2(pointA$2, xfA$1, localPointA); - transformVec2(pointB$2, xfB$1, localPointB); - var sep = dotVec2(pointB$2, this.m_axis) - dotVec2(pointA$2, this.m_axis); - return sep; - } - case SeparationFunctionType.e_faceA: { - rotVec2(normal$3, xfA$1.q, this.m_axis); - transformVec2(pointA$2, xfA$1, this.m_localPoint); - if (find) { - derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, normal$3)); - this.indexA = -1; - this.indexB = this.m_proxyB.getSupport(axisB); - } - copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); - transformVec2(pointB$2, xfB$1, localPointB); - var sep = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); - return sep; - } - case SeparationFunctionType.e_faceB: { - rotVec2(normal$3, xfB$1.q, this.m_axis); - transformVec2(pointB$2, xfB$1, this.m_localPoint); - if (find) { - derotVec2(axisA, xfA$1.q, scaleVec2(temp$4, -1, normal$3)); - this.indexB = -1; - this.indexA = this.m_proxyA.getSupport(axisA); - } - copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); - transformVec2(pointA$2, xfA$1, localPointA); - var sep = dotVec2(pointA$2, normal$3) - dotVec2(pointB$2, normal$3); - return sep; - } - default: - if (find) { - this.indexA = -1; - this.indexB = -1; - } - return 0.0; - } - }; - SeparationFunction.prototype.findMinSeparation = function (t) { - return this.compute(true, t); - }; - SeparationFunction.prototype.evaluate = function (t) { - return this.compute(false, t); - }; - return SeparationFunction; -}()); -/** @internal */ var separationFunction = new SeparationFunction(); -// legacy exports +var SeparationFunction = ( + /** @class */ + function() { + function SeparationFunction2() { + this.m_proxyA = null; + this.m_proxyB = null; + this.m_sweepA = null; + this.m_sweepB = null; + this.m_type = SeparationFunctionType.e_unset; + this.m_localPoint = vec2(0, 0); + this.m_axis = vec2(0, 0); + this.indexA = -1; + this.indexB = -1; + } + SeparationFunction2.prototype.recycle = function() { + this.m_proxyA = null; + this.m_proxyB = null; + this.m_sweepA = null; + this.m_sweepB = null; + this.m_type = SeparationFunctionType.e_unset; + zeroVec2(this.m_localPoint); + zeroVec2(this.m_axis); + this.indexA = -1; + this.indexB = -1; + }; + SeparationFunction2.prototype.initialize = function(cache2, proxyA, sweepA, proxyB, sweepB, t1) { + var count = cache2.count; + this.m_proxyA = proxyA; + this.m_proxyB = proxyB; + this.m_sweepA = sweepA; + this.m_sweepB = sweepB; + this.m_sweepA.getTransform(xfA$1, t1); + this.m_sweepB.getTransform(xfB$1, t1); + if (count === 1) { + this.m_type = SeparationFunctionType.e_points; + var localPointA_1 = this.m_proxyA.getVertex(cache2.indexA[0]); + var localPointB_1 = this.m_proxyB.getVertex(cache2.indexB[0]); + transformVec2(pointA$2, xfA$1, localPointA_1); + transformVec2(pointB$2, xfB$1, localPointB_1); + subVec2(this.m_axis, pointB$2, pointA$2); + var s2 = normalizeVec2Length(this.m_axis); + return s2; + } else if (cache2.indexA[0] === cache2.indexA[1]) { + this.m_type = SeparationFunctionType.e_faceB; + var localPointB1 = proxyB.getVertex(cache2.indexB[0]); + var localPointB2 = proxyB.getVertex(cache2.indexB[1]); + crossVec2Num(this.m_axis, subVec2(temp$4, localPointB2, localPointB1), 1); + normalizeVec2(this.m_axis); + rotVec2(normal$3, xfB$1.q, this.m_axis); + combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2); + transformVec2(pointB$2, xfB$1, this.m_localPoint); + var localPointA_2 = proxyA.getVertex(cache2.indexA[0]); + var pointA_1 = Transform.mulVec2(xfA$1, localPointA_2); + var s2 = dotVec2(pointA_1, normal$3) - dotVec2(pointB$2, normal$3); + if (s2 < 0) { + negVec2(this.m_axis); + s2 = -s2; + } + return s2; + } else { + this.m_type = SeparationFunctionType.e_faceA; + var localPointA1 = this.m_proxyA.getVertex(cache2.indexA[0]); + var localPointA2 = this.m_proxyA.getVertex(cache2.indexA[1]); + crossVec2Num(this.m_axis, subVec2(temp$4, localPointA2, localPointA1), 1); + normalizeVec2(this.m_axis); + rotVec2(normal$3, xfA$1.q, this.m_axis); + combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2); + transformVec2(pointA$2, xfA$1, this.m_localPoint); + var localPointB_2 = this.m_proxyB.getVertex(cache2.indexB[0]); + transformVec2(pointB$2, xfB$1, localPointB_2); + var s2 = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); + if (s2 < 0) { + negVec2(this.m_axis); + s2 = -s2; + } + return s2; + } + }; + SeparationFunction2.prototype.compute = function(find, t) { + this.m_sweepA.getTransform(xfA$1, t); + this.m_sweepB.getTransform(xfB$1, t); + switch (this.m_type) { + case SeparationFunctionType.e_points: { + if (find) { + derotVec2(axisA, xfA$1.q, this.m_axis); + derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, this.m_axis)); + this.indexA = this.m_proxyA.getSupport(axisA); + this.indexB = this.m_proxyB.getSupport(axisB); + } + copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); + copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); + transformVec2(pointA$2, xfA$1, localPointA); + transformVec2(pointB$2, xfB$1, localPointB); + var sep = dotVec2(pointB$2, this.m_axis) - dotVec2(pointA$2, this.m_axis); + return sep; + } + case SeparationFunctionType.e_faceA: { + rotVec2(normal$3, xfA$1.q, this.m_axis); + transformVec2(pointA$2, xfA$1, this.m_localPoint); + if (find) { + derotVec2(axisB, xfB$1.q, scaleVec2(temp$4, -1, normal$3)); + this.indexA = -1; + this.indexB = this.m_proxyB.getSupport(axisB); + } + copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB)); + transformVec2(pointB$2, xfB$1, localPointB); + var sep = dotVec2(pointB$2, normal$3) - dotVec2(pointA$2, normal$3); + return sep; + } + case SeparationFunctionType.e_faceB: { + rotVec2(normal$3, xfB$1.q, this.m_axis); + transformVec2(pointB$2, xfB$1, this.m_localPoint); + if (find) { + derotVec2(axisA, xfA$1.q, scaleVec2(temp$4, -1, normal$3)); + this.indexB = -1; + this.indexA = this.m_proxyA.getSupport(axisA); + } + copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA)); + transformVec2(pointA$2, xfA$1, localPointA); + var sep = dotVec2(pointA$2, normal$3) - dotVec2(pointB$2, normal$3); + return sep; + } + default: + if (find) { + this.indexA = -1; + this.indexB = -1; + } + return 0; + } + }; + SeparationFunction2.prototype.findMinSeparation = function(t) { + return this.compute(true, t); + }; + SeparationFunction2.prototype.evaluate = function(t) { + return this.compute(false, t); + }; + return SeparationFunction2; + }() +); +var separationFunction = new SeparationFunction(); TimeOfImpact.Input = TOIInput; TimeOfImpact.Output = TOIOutput; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$6 = Math.abs; -/** @internal */ var math_sqrt$3 = Math.sqrt; -/** @internal */ var math_min$5 = Math.min; -var TimeStep = /** @class */ (function () { - function TimeStep() { - /** time step */ - this.dt = 0; - /** inverse time step (0 if dt == 0) */ - this.inv_dt = 0; - this.velocityIterations = 0; - this.positionIterations = 0; - this.warmStarting = false; - this.blockSolve = true; - /** timestep ratio for variable timestep */ - this.inv_dt0 = 0.0; - /** dt * inv_dt0 */ - this.dtRatio = 1; - } - TimeStep.prototype.reset = function (dt) { - if (this.dt > 0.0) { - this.inv_dt0 = this.inv_dt; - } - this.dt = dt; - this.inv_dt = dt == 0 ? 0 : 1 / dt; - this.dtRatio = dt * this.inv_dt0; - }; - return TimeStep; -}()); -// reuse -/** @internal */ var s_subStep = new TimeStep(); -/** @internal */ var c = vec2(0, 0); -/** @internal */ var v = vec2(0, 0); -/** @internal */ var translation = vec2(0, 0); -/** @internal */ var input = new TOIInput(); -/** @internal */ var output = new TOIOutput(); -/** @internal */ var backup = new Sweep(); -/** @internal */ var backup1 = new Sweep(); -/** @internal */ var backup2 = new Sweep(); -/** - * Contact impulses for reporting. Impulses are used instead of forces because - * sub-step forces may approach infinity for rigid body collisions. These match - * up one-to-one with the contact points in Manifold. - */ -var ContactImpulse = /** @class */ (function () { - function ContactImpulse(contact) { - this.contact = contact; - this.normals = []; - this.tangents = []; - } - ContactImpulse.prototype.recycle = function () { - this.normals.length = 0; - this.tangents.length = 0; - }; - Object.defineProperty(ContactImpulse.prototype, "normalImpulses", { - get: function () { - var contact = this.contact; - var normals = this.normals; - normals.length = 0; - for (var p = 0; p < contact.v_points.length; ++p) { - normals.push(contact.v_points[p].normalImpulse); - } - return normals; - }, - enumerable: false, - configurable: true +var math_abs$6 = Math.abs; +var math_sqrt$3 = Math.sqrt; +var math_min$5 = Math.min; +var TimeStep = ( + /** @class */ + function() { + function TimeStep2() { + this.dt = 0; + this.inv_dt = 0; + this.velocityIterations = 0; + this.positionIterations = 0; + this.warmStarting = false; + this.blockSolve = true; + this.inv_dt0 = 0; + this.dtRatio = 1; + } + TimeStep2.prototype.reset = function(dt) { + if (this.dt > 0) { + this.inv_dt0 = this.inv_dt; + } + this.dt = dt; + this.inv_dt = dt == 0 ? 0 : 1 / dt; + this.dtRatio = dt * this.inv_dt0; + }; + return TimeStep2; + }() +); +var s_subStep = new TimeStep(); +var c = vec2(0, 0); +var v = vec2(0, 0); +var translation = vec2(0, 0); +var input = new TOIInput(); +var output = new TOIOutput(); +var backup = new Sweep(); +var backup1 = new Sweep(); +var backup2 = new Sweep(); +var ContactImpulse = ( + /** @class */ + function() { + function ContactImpulse2(contact) { + this.contact = contact; + this.normals = []; + this.tangents = []; + } + ContactImpulse2.prototype.recycle = function() { + this.normals.length = 0; + this.tangents.length = 0; + }; + Object.defineProperty(ContactImpulse2.prototype, "normalImpulses", { + get: function() { + var contact = this.contact; + var normals = this.normals; + normals.length = 0; + for (var p = 0; p < contact.v_points.length; ++p) { + normals.push(contact.v_points[p].normalImpulse); + } + return normals; + }, + enumerable: false, + configurable: true }); - Object.defineProperty(ContactImpulse.prototype, "tangentImpulses", { - get: function () { - var contact = this.contact; - var tangents = this.tangents; - tangents.length = 0; - for (var p = 0; p < contact.v_points.length; ++p) { - tangents.push(contact.v_points[p].tangentImpulse); - } - return tangents; - }, - enumerable: false, - configurable: true + Object.defineProperty(ContactImpulse2.prototype, "tangentImpulses", { + get: function() { + var contact = this.contact; + var tangents = this.tangents; + tangents.length = 0; + for (var p = 0; p < contact.v_points.length; ++p) { + tangents.push(contact.v_points[p].tangentImpulse); + } + return tangents; + }, + enumerable: false, + configurable: true }); - return ContactImpulse; -}()); -/** - * Finds and solves islands. An island is a connected subset of the world. - */ -var Solver = /** @class */ (function () { - function Solver(world) { - this.m_world = world; - this.m_stack = []; - this.m_bodies = []; - this.m_contacts = []; - this.m_joints = []; - } - Solver.prototype.clear = function () { - this.m_stack.length = 0; - this.m_bodies.length = 0; - this.m_contacts.length = 0; - this.m_joints.length = 0; - }; - Solver.prototype.addBody = function (body) { - this.m_bodies.push(body); - // why? - // body.c_position.c.setZero(); - // body.c_position.a = 0; - // body.c_velocity.v.setZero(); - // body.c_velocity.w = 0; - }; - Solver.prototype.addContact = function (contact) { - // false && console.assert(contact instanceof Contact, 'Not a Contact!', contact); - this.m_contacts.push(contact); - }; - Solver.prototype.addJoint = function (joint) { - this.m_joints.push(joint); - }; - Solver.prototype.solveWorld = function (step) { - var world = this.m_world; - // Clear all the island flags. - for (var b = world.m_bodyList; b; b = b.m_next) { - b.m_islandFlag = false; - } - for (var c_1 = world.m_contactList; c_1; c_1 = c_1.m_next) { - c_1.m_islandFlag = false; - } - for (var j = world.m_jointList; j; j = j.m_next) { - j.m_islandFlag = false; - } - // Build and simulate all awake islands. - var stack = this.m_stack; - for (var seed = world.m_bodyList; seed; seed = seed.m_next) { - if (seed.m_islandFlag) { - continue; - } - if (seed.isAwake() == false || seed.isActive() == false) { - continue; - } - // The seed can be dynamic or kinematic. - if (seed.isStatic()) { - continue; - } - // Reset island and stack. - this.clear(); - stack.push(seed); - seed.m_islandFlag = true; - // Perform a depth first search (DFS) on the constraint graph. - while (stack.length > 0) { - // Grab the next body off the stack and add it to the island. - var b = stack.pop(); - this.addBody(b); - // Make sure the body is awake (without resetting sleep timer). - b.m_awakeFlag = true; - // To keep islands as small as possible, we don't - // propagate islands across static bodies. - if (b.isStatic()) { - continue; - } - // Search all contacts connected to this body. - for (var ce = b.m_contactList; ce; ce = ce.next) { - var contact = ce.contact; - // Has this contact already been added to an island? - if (contact.m_islandFlag) { - continue; - } - // Is this contact solid and touching? - if (contact.isEnabled() == false || contact.isTouching() == false) { - continue; - } - // Skip sensors. - var sensorA = contact.m_fixtureA.m_isSensor; - var sensorB = contact.m_fixtureB.m_isSensor; - if (sensorA || sensorB) { - continue; - } - this.addContact(contact); - contact.m_islandFlag = true; - var other = ce.other; - // Was the other body already added to this island? - if (other.m_islandFlag) { - continue; - } - // false && console.assert(stack.length < world.m_bodyCount); - stack.push(other); - other.m_islandFlag = true; - } - // Search all joints connect to this body. - for (var je = b.m_jointList; je; je = je.next) { - if (je.joint.m_islandFlag == true) { - continue; - } - var other = je.other; - // Don't simulate joints connected to inactive bodies. - if (other.isActive() == false) { - continue; - } - this.addJoint(je.joint); - je.joint.m_islandFlag = true; - if (other.m_islandFlag) { - continue; - } - // false && console.assert(stack.length < world.m_bodyCount); - stack.push(other); - other.m_islandFlag = true; - } - } - this.solveIsland(step); - // Post solve cleanup. - for (var i = 0; i < this.m_bodies.length; ++i) { - // Allow static bodies to participate in other islands. - // TODO: are they added at all? - var b = this.m_bodies[i]; - if (b.isStatic()) { - b.m_islandFlag = false; - } - } - } - }; - Solver.prototype.solveIsland = function (step) { - // B2: Island Solve - var world = this.m_world; - var gravity = world.m_gravity; - var allowSleep = world.m_allowSleep; - var h = step.dt; - // Integrate velocities and apply damping. Initialize the body state. + return ContactImpulse2; + }() +); +var Solver = ( + /** @class */ + function() { + function Solver2(world) { + this.m_world = world; + this.m_stack = []; + this.m_bodies = []; + this.m_contacts = []; + this.m_joints = []; + } + Solver2.prototype.clear = function() { + this.m_stack.length = 0; + this.m_bodies.length = 0; + this.m_contacts.length = 0; + this.m_joints.length = 0; + }; + Solver2.prototype.addBody = function(body) { + this.m_bodies.push(body); + }; + Solver2.prototype.addContact = function(contact) { + this.m_contacts.push(contact); + }; + Solver2.prototype.addJoint = function(joint) { + this.m_joints.push(joint); + }; + Solver2.prototype.solveWorld = function(step) { + var world = this.m_world; + for (var b2 = world.m_bodyList; b2; b2 = b2.m_next) { + b2.m_islandFlag = false; + } + for (var c_1 = world.m_contactList; c_1; c_1 = c_1.m_next) { + c_1.m_islandFlag = false; + } + for (var j = world.m_jointList; j; j = j.m_next) { + j.m_islandFlag = false; + } + var stack = this.m_stack; + for (var seed = world.m_bodyList; seed; seed = seed.m_next) { + if (seed.m_islandFlag) { + continue; + } + if (seed.isAwake() == false || seed.isActive() == false) { + continue; + } + if (seed.isStatic()) { + continue; + } + this.clear(); + stack.push(seed); + seed.m_islandFlag = true; + while (stack.length > 0) { + var b2 = stack.pop(); + this.addBody(b2); + b2.m_awakeFlag = true; + if (b2.isStatic()) { + continue; + } + for (var ce = b2.m_contactList; ce; ce = ce.next) { + var contact = ce.contact; + if (contact.m_islandFlag) { + continue; + } + if (contact.isEnabled() == false || contact.isTouching() == false) { + continue; + } + var sensorA = contact.m_fixtureA.m_isSensor; + var sensorB = contact.m_fixtureB.m_isSensor; + if (sensorA || sensorB) { + continue; + } + this.addContact(contact); + contact.m_islandFlag = true; + var other = ce.other; + if (other.m_islandFlag) { + continue; + } + stack.push(other); + other.m_islandFlag = true; + } + for (var je = b2.m_jointList; je; je = je.next) { + if (je.joint.m_islandFlag == true) { + continue; + } + var other = je.other; + if (other.isActive() == false) { + continue; + } + this.addJoint(je.joint); + je.joint.m_islandFlag = true; + if (other.m_islandFlag) { + continue; + } + stack.push(other); + other.m_islandFlag = true; + } + } + this.solveIsland(step); for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(c, body.m_sweep.c); - var a = body.m_sweep.a; - copyVec2(v, body.m_linearVelocity); - var w = body.m_angularVelocity; - // Store positions for continuous collision. - copyVec2(body.m_sweep.c0, body.m_sweep.c); - body.m_sweep.a0 = body.m_sweep.a; - if (body.isDynamic()) { - // Integrate velocities. - plusScaleVec2(v, h * body.m_gravityScale, gravity); - plusScaleVec2(v, h * body.m_invMass, body.m_force); - w += h * body.m_invI * body.m_torque; - /** - *
-                 * Apply damping.
-                 * ODE: dv/dt + c * v = 0
-                 * Solution: v(t) = v0 * exp(-c * t)
-                 * Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)
-                 * v2 = exp(-c * dt) * v1
-                 * Pade approximation:
-                 * v2 = v1 * 1 / (1 + c * dt)
-                 * 
- */ - scaleVec2(v, 1.0 / (1.0 + h * body.m_linearDamping), v); - w *= 1.0 / (1.0 + h * body.m_angularDamping); - } - copyVec2(body.c_position.c, c); - body.c_position.a = a; - copyVec2(body.c_velocity.v, v); - body.c_velocity.w = w; - } - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initConstraint(step); - } - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initVelocityConstraint(step); - } - if (step.warmStarting) { - // Warm start. - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.warmStartConstraint(step); - } - } - for (var i = 0; i < this.m_joints.length; ++i) { - var joint = this.m_joints[i]; - joint.initVelocityConstraints(step); - } - // Solve velocity constraints - for (var i = 0; i < step.velocityIterations; ++i) { - for (var j = 0; j < this.m_joints.length; ++j) { - var joint = this.m_joints[j]; - joint.solveVelocityConstraints(step); - } - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - contact.solveVelocityConstraint(step); - } - } - // Store impulses for warm starting + var b2 = this.m_bodies[i]; + if (b2.isStatic()) { + b2.m_islandFlag = false; + } + } + } + }; + Solver2.prototype.solveIsland = function(step) { + var world = this.m_world; + var gravity = world.m_gravity; + var allowSleep = world.m_allowSleep; + var h = step.dt; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(c, body.m_sweep.c); + var a2 = body.m_sweep.a; + copyVec2(v, body.m_linearVelocity); + var w = body.m_angularVelocity; + copyVec2(body.m_sweep.c0, body.m_sweep.c); + body.m_sweep.a0 = body.m_sweep.a; + if (body.isDynamic()) { + plusScaleVec2(v, h * body.m_gravityScale, gravity); + plusScaleVec2(v, h * body.m_invMass, body.m_force); + w += h * body.m_invI * body.m_torque; + scaleVec2(v, 1 / (1 + h * body.m_linearDamping), v); + w *= 1 / (1 + h * body.m_angularDamping); + } + copyVec2(body.c_position.c, c); + body.c_position.a = a2; + copyVec2(body.c_velocity.v, v); + body.c_velocity.w = w; + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initConstraint(step); + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initVelocityConstraint(step); + } + if (step.warmStarting) { for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.storeConstraintImpulses(step); - } - // Integrate positions - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(c, body.c_position.c); - var a = body.c_position.a; - copyVec2(v, body.c_velocity.v); - var w = body.c_velocity.w; - // Check for large velocities - scaleVec2(translation, h, v); - var translationLengthSqr = lengthSqrVec2(translation); - if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { - var ratio = SettingsInternal.maxTranslation / math_sqrt$3(translationLengthSqr); - mulVec2(v, ratio); - } - var rotation = h * w; - if (rotation * rotation > SettingsInternal.maxRotationSquared) { - var ratio = SettingsInternal.maxRotation / math_abs$6(rotation); - w *= ratio; - } - // Integrate - plusScaleVec2(c, h, v); - a += h * w; - copyVec2(body.c_position.c, c); - body.c_position.a = a; - copyVec2(body.c_velocity.v, v); - body.c_velocity.w = w; - } - // Solve position constraints - var positionSolved = false; - for (var i = 0; i < step.positionIterations; ++i) { - var minSeparation = 0.0; - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - var separation = contact.solvePositionConstraint(step); - minSeparation = math_min$5(minSeparation, separation); - } - // We can't expect minSpeparation >= -Settings.linearSlop because we don't - // push the separation above -Settings.linearSlop. - var contactsOkay = minSeparation >= -3.0 * SettingsInternal.linearSlop; - var jointsOkay = true; - for (var j = 0; j < this.m_joints.length; ++j) { - var joint = this.m_joints[j]; - var jointOkay = joint.solvePositionConstraints(step); - jointsOkay = jointsOkay && jointOkay; - } - if (contactsOkay && jointsOkay) { - // Exit early if the position errors are small. - positionSolved = true; - break; - } - } - // Copy state buffers back to the bodies + var contact = this.m_contacts[i]; + contact.warmStartConstraint(step); + } + } + for (var i = 0; i < this.m_joints.length; ++i) { + var joint = this.m_joints[i]; + joint.initVelocityConstraints(step); + } + for (var i = 0; i < step.velocityIterations; ++i) { + for (var j = 0; j < this.m_joints.length; ++j) { + var joint = this.m_joints[j]; + joint.solveVelocityConstraints(step); + } + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + contact.solveVelocityConstraint(step); + } + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.storeConstraintImpulses(step); + } + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(c, body.c_position.c); + var a2 = body.c_position.a; + copyVec2(v, body.c_velocity.v); + var w = body.c_velocity.w; + scaleVec2(translation, h, v); + var translationLengthSqr = lengthSqrVec2(translation); + if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { + var ratio = SettingsInternal.maxTranslation / math_sqrt$3(translationLengthSqr); + mulVec2(v, ratio); + } + var rotation2 = h * w; + if (rotation2 * rotation2 > SettingsInternal.maxRotationSquared) { + var ratio = SettingsInternal.maxRotation / math_abs$6(rotation2); + w *= ratio; + } + plusScaleVec2(c, h, v); + a2 += h * w; + copyVec2(body.c_position.c, c); + body.c_position.a = a2; + copyVec2(body.c_velocity.v, v); + body.c_velocity.w = w; + } + var positionSolved = false; + for (var i = 0; i < step.positionIterations; ++i) { + var minSeparation = 0; + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + var separation = contact.solvePositionConstraint(step); + minSeparation = math_min$5(minSeparation, separation); + } + var contactsOkay = minSeparation >= -3 * SettingsInternal.linearSlop; + var jointsOkay = true; + for (var j = 0; j < this.m_joints.length; ++j) { + var joint = this.m_joints[j]; + var jointOkay = joint.solvePositionConstraints(step); + jointsOkay = jointsOkay && jointOkay; + } + if (contactsOkay && jointsOkay) { + positionSolved = true; + break; + } + } + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(body.m_sweep.c, body.c_position.c); + body.m_sweep.a = body.c_position.a; + copyVec2(body.m_linearVelocity, body.c_velocity.v); + body.m_angularVelocity = body.c_velocity.w; + body.synchronizeTransform(); + } + this.postSolveIsland(); + if (allowSleep) { + var minSleepTime = Infinity; + var linTolSqr = SettingsInternal.linearSleepToleranceSqr; + var angTolSqr = SettingsInternal.angularSleepToleranceSqr; for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + if (body.isStatic()) { + continue; + } + if (body.m_autoSleepFlag == false || body.m_angularVelocity * body.m_angularVelocity > angTolSqr || lengthSqrVec2(body.m_linearVelocity) > linTolSqr) { + body.m_sleepTime = 0; + minSleepTime = 0; + } else { + body.m_sleepTime += h; + minSleepTime = math_min$5(minSleepTime, body.m_sleepTime); + } + } + if (minSleepTime >= SettingsInternal.timeToSleep && positionSolved) { + for (var i = 0; i < this.m_bodies.length; ++i) { var body = this.m_bodies[i]; - copyVec2(body.m_sweep.c, body.c_position.c); - body.m_sweep.a = body.c_position.a; - copyVec2(body.m_linearVelocity, body.c_velocity.v); - body.m_angularVelocity = body.c_velocity.w; - body.synchronizeTransform(); - } - this.postSolveIsland(); - if (allowSleep) { - var minSleepTime = Infinity; - var linTolSqr = SettingsInternal.linearSleepToleranceSqr; - var angTolSqr = SettingsInternal.angularSleepToleranceSqr; - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - if (body.isStatic()) { - continue; - } - if ((body.m_autoSleepFlag == false) - || (body.m_angularVelocity * body.m_angularVelocity > angTolSqr) - || (lengthSqrVec2(body.m_linearVelocity) > linTolSqr)) { - body.m_sleepTime = 0.0; - minSleepTime = 0.0; - } - else { - body.m_sleepTime += h; - minSleepTime = math_min$5(minSleepTime, body.m_sleepTime); - } - } - if (minSleepTime >= SettingsInternal.timeToSleep && positionSolved) { - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - body.setAwake(false); - } - } - } - }; - /** - * Find TOI contacts and solve them. - */ - Solver.prototype.solveWorldTOI = function (step) { - var world = this.m_world; - if (world.m_stepComplete) { - for (var b = world.m_bodyList; b; b = b.m_next) { - b.m_islandFlag = false; - b.m_sweep.alpha0 = 0.0; - } - for (var c_2 = world.m_contactList; c_2; c_2 = c_2.m_next) { - // Invalidate TOI - c_2.m_toiFlag = false; - c_2.m_islandFlag = false; - c_2.m_toiCount = 0; - c_2.m_toi = 1.0; - } - } - // Find TOI events and solve them. - while (true) { - // Find the first TOI. - var minContact = null; - var minAlpha = 1.0; - for (var c_3 = world.m_contactList; c_3; c_3 = c_3.m_next) { - // Is this contact disabled? - if (c_3.isEnabled() == false) { - continue; - } - // Prevent excessive sub-stepping. - if (c_3.m_toiCount > SettingsInternal.maxSubSteps) { - continue; - } - var alpha = 1.0; - if (c_3.m_toiFlag) { - // This contact has a valid cached TOI. - alpha = c_3.m_toi; - } - else { - var fA_1 = c_3.getFixtureA(); - var fB_1 = c_3.getFixtureB(); - // Is there a sensor? - if (fA_1.isSensor() || fB_1.isSensor()) { - continue; - } - var bA_1 = fA_1.getBody(); - var bB_1 = fB_1.getBody(); - var activeA = bA_1.isAwake() && !bA_1.isStatic(); - var activeB = bB_1.isAwake() && !bB_1.isStatic(); - // Is at least one body active (awake and dynamic or kinematic)? - if (activeA == false && activeB == false) { - continue; - } - var collideA = bA_1.isBullet() || !bA_1.isDynamic(); - var collideB = bB_1.isBullet() || !bB_1.isDynamic(); - // Are these two non-bullet dynamic bodies? - if (collideA == false && collideB == false) { - continue; - } - // Compute the TOI for this contact. - // Put the sweeps onto the same time interval. - var alpha0 = bA_1.m_sweep.alpha0; - if (bA_1.m_sweep.alpha0 < bB_1.m_sweep.alpha0) { - alpha0 = bB_1.m_sweep.alpha0; - bA_1.m_sweep.advance(alpha0); - } - else if (bB_1.m_sweep.alpha0 < bA_1.m_sweep.alpha0) { - alpha0 = bA_1.m_sweep.alpha0; - bB_1.m_sweep.advance(alpha0); - } - var indexA = c_3.getChildIndexA(); - var indexB = c_3.getChildIndexB(); - bA_1.m_sweep; - bB_1.m_sweep; - // Compute the time of impact in interval [0, minTOI] - input.proxyA.set(fA_1.getShape(), indexA); - input.proxyB.set(fB_1.getShape(), indexB); - input.sweepA.set(bA_1.m_sweep); - input.sweepB.set(bB_1.m_sweep); - input.tMax = 1.0; - TimeOfImpact(output, input); - // Beta is the fraction of the remaining portion of the [time?]. - var beta = output.t; - if (output.state == TOIOutputState.e_touching) { - alpha = math_min$5(alpha0 + (1.0 - alpha0) * beta, 1.0); - } - else { - alpha = 1.0; - } - c_3.m_toi = alpha; - c_3.m_toiFlag = true; - } - if (alpha < minAlpha) { - // This is the minimum TOI found so far. - minContact = c_3; - minAlpha = alpha; - } - } - if (minContact == null || 1.0 - 10.0 * EPSILON < minAlpha) { - // No more TOI events. Done! - world.m_stepComplete = true; - break; - } - // Advance the bodies to the TOI. - var fA = minContact.getFixtureA(); - var fB = minContact.getFixtureB(); - var bA = fA.getBody(); - var bB = fB.getBody(); - backup1.set(bA.m_sweep); - backup2.set(bB.m_sweep); - bA.advance(minAlpha); - bB.advance(minAlpha); - // The TOI contact likely has some new contact points. - minContact.update(world); - minContact.m_toiFlag = false; - ++minContact.m_toiCount; - // Is the contact solid? - if (minContact.isEnabled() == false || minContact.isTouching() == false) { - // Restore the sweeps. - minContact.setEnabled(false); - bA.m_sweep.set(backup1); - bB.m_sweep.set(backup2); - bA.synchronizeTransform(); - bB.synchronizeTransform(); + body.setAwake(false); + } + } + } + }; + Solver2.prototype.solveWorldTOI = function(step) { + var world = this.m_world; + if (world.m_stepComplete) { + for (var b2 = world.m_bodyList; b2; b2 = b2.m_next) { + b2.m_islandFlag = false; + b2.m_sweep.alpha0 = 0; + } + for (var c_2 = world.m_contactList; c_2; c_2 = c_2.m_next) { + c_2.m_toiFlag = false; + c_2.m_islandFlag = false; + c_2.m_toiCount = 0; + c_2.m_toi = 1; + } + } + while (true) { + var minContact = null; + var minAlpha = 1; + for (var c_3 = world.m_contactList; c_3; c_3 = c_3.m_next) { + if (c_3.isEnabled() == false) { + continue; + } + if (c_3.m_toiCount > SettingsInternal.maxSubSteps) { + continue; + } + var alpha = 1; + if (c_3.m_toiFlag) { + alpha = c_3.m_toi; + } else { + var fA_1 = c_3.getFixtureA(); + var fB_1 = c_3.getFixtureB(); + if (fA_1.isSensor() || fB_1.isSensor()) { + continue; + } + var bA_1 = fA_1.getBody(); + var bB_1 = fB_1.getBody(); + var activeA = bA_1.isAwake() && !bA_1.isStatic(); + var activeB = bB_1.isAwake() && !bB_1.isStatic(); + if (activeA == false && activeB == false) { + continue; + } + var collideA = bA_1.isBullet() || !bA_1.isDynamic(); + var collideB = bB_1.isBullet() || !bB_1.isDynamic(); + if (collideA == false && collideB == false) { + continue; + } + var alpha0 = bA_1.m_sweep.alpha0; + if (bA_1.m_sweep.alpha0 < bB_1.m_sweep.alpha0) { + alpha0 = bB_1.m_sweep.alpha0; + bA_1.m_sweep.advance(alpha0); + } else if (bB_1.m_sweep.alpha0 < bA_1.m_sweep.alpha0) { + alpha0 = bA_1.m_sweep.alpha0; + bB_1.m_sweep.advance(alpha0); + } + var indexA = c_3.getChildIndexA(); + var indexB = c_3.getChildIndexB(); + bA_1.m_sweep; + bB_1.m_sweep; + input.proxyA.set(fA_1.getShape(), indexA); + input.proxyB.set(fB_1.getShape(), indexB); + input.sweepA.set(bA_1.m_sweep); + input.sweepB.set(bB_1.m_sweep); + input.tMax = 1; + TimeOfImpact(output, input); + var beta = output.t; + if (output.state == TOIOutputState.e_touching) { + alpha = math_min$5(alpha0 + (1 - alpha0) * beta, 1); + } else { + alpha = 1; + } + c_3.m_toi = alpha; + c_3.m_toiFlag = true; + } + if (alpha < minAlpha) { + minContact = c_3; + minAlpha = alpha; + } + } + if (minContact == null || 1 - 10 * EPSILON < minAlpha) { + world.m_stepComplete = true; + break; + } + var fA = minContact.getFixtureA(); + var fB = minContact.getFixtureB(); + var bA = fA.getBody(); + var bB = fB.getBody(); + backup1.set(bA.m_sweep); + backup2.set(bB.m_sweep); + bA.advance(minAlpha); + bB.advance(minAlpha); + minContact.update(world); + minContact.m_toiFlag = false; + ++minContact.m_toiCount; + if (minContact.isEnabled() == false || minContact.isTouching() == false) { + minContact.setEnabled(false); + bA.m_sweep.set(backup1); + bB.m_sweep.set(backup2); + bA.synchronizeTransform(); + bB.synchronizeTransform(); + continue; + } + bA.setAwake(true); + bB.setAwake(true); + this.clear(); + this.addBody(bA); + this.addBody(bB); + this.addContact(minContact); + bA.m_islandFlag = true; + bB.m_islandFlag = true; + minContact.m_islandFlag = true; + var bodies = [bA, bB]; + for (var i = 0; i < bodies.length; ++i) { + var body = bodies[i]; + if (body.isDynamic()) { + for (var ce = body.m_contactList; ce; ce = ce.next) { + var contact = ce.contact; + if (contact.m_islandFlag) { continue; - } - bA.setAwake(true); - bB.setAwake(true); - // Build the island - this.clear(); - this.addBody(bA); - this.addBody(bB); - this.addContact(minContact); - bA.m_islandFlag = true; - bB.m_islandFlag = true; - minContact.m_islandFlag = true; - // Get contacts on bodyA and bodyB. - var bodies = [bA, bB]; - for (var i = 0; i < bodies.length; ++i) { - var body = bodies[i]; - if (body.isDynamic()) { - for (var ce = body.m_contactList; ce; ce = ce.next) { - // if (this.m_bodyCount == this.m_bodyCapacity) { break; } - // if (this.m_contactCount == this.m_contactCapacity) { break; } - var contact = ce.contact; - // Has this contact already been added to the island? - if (contact.m_islandFlag) { - continue; - } - // Only add if either is static, kinematic or bullet. - var other = ce.other; - if (other.isDynamic() && !body.isBullet() && !other.isBullet()) { - continue; - } - // Skip sensors. - var sensorA = contact.m_fixtureA.m_isSensor; - var sensorB = contact.m_fixtureB.m_isSensor; - if (sensorA || sensorB) { - continue; - } - // Tentatively advance the body to the TOI. - backup.set(other.m_sweep); - if (other.m_islandFlag == false) { - other.advance(minAlpha); - } - // Update the contact points - contact.update(world); - // Was the contact disabled by the user? - // Are there contact points? - if (contact.isEnabled() == false || contact.isTouching() == false) { - other.m_sweep.set(backup); - other.synchronizeTransform(); - continue; - } - // Add the contact to the island - contact.m_islandFlag = true; - this.addContact(contact); - // Has the other body already been added to the island? - if (other.m_islandFlag) { - continue; - } - // Add the other body to the island. - other.m_islandFlag = true; - if (!other.isStatic()) { - other.setAwake(true); - } - this.addBody(other); - } - } - } - s_subStep.reset((1.0 - minAlpha) * step.dt); - s_subStep.dtRatio = 1.0; - s_subStep.positionIterations = 20; - s_subStep.velocityIterations = step.velocityIterations; - s_subStep.warmStarting = false; - this.solveIslandTOI(s_subStep, bA, bB); - // Reset island flags and synchronize broad-phase proxies. - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - body.m_islandFlag = false; - if (!body.isDynamic()) { - continue; - } - body.synchronizeFixtures(); - // Invalidate all contact TOIs on this displaced body. - for (var ce = body.m_contactList; ce; ce = ce.next) { - ce.contact.m_toiFlag = false; - ce.contact.m_islandFlag = false; - } - } - // Commit fixture proxy movements to the broad-phase so that new contacts - // are created. - // Also, some contacts can be destroyed. - world.findNewContacts(); - if (world.m_subStepping) { - world.m_stepComplete = false; - break; - } - } - }; - Solver.prototype.solveIslandTOI = function (subStep, toiA, toiB) { - // Initialize the body state. - for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(body.c_position.c, body.m_sweep.c); - body.c_position.a = body.m_sweep.a; - copyVec2(body.c_velocity.v, body.m_linearVelocity); - body.c_velocity.w = body.m_angularVelocity; - } - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initConstraint(subStep); - } - // Solve position constraints. - for (var i = 0; i < subStep.positionIterations; ++i) { - var minSeparation = 0.0; - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - var separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB); - minSeparation = math_min$5(minSeparation, separation); - } - // We can't expect minSpeparation >= -Settings.linearSlop because we don't - // push the separation above -Settings.linearSlop. - var contactsOkay = minSeparation >= -1.5 * SettingsInternal.linearSlop; - if (contactsOkay) { - break; - } - } - var i; - // Leap of faith to new safe state. - copyVec2(toiA.m_sweep.c0, toiA.c_position.c); - toiA.m_sweep.a0 = toiA.c_position.a; - copyVec2(toiB.m_sweep.c0, toiB.c_position.c); - toiB.m_sweep.a0 = toiB.c_position.a; - // No warm starting is needed for TOI events because warm - // starting impulses were applied in the discrete solver. - for (var i = 0; i < this.m_contacts.length; ++i) { - var contact = this.m_contacts[i]; - contact.initVelocityConstraint(subStep); - } - // Solve velocity constraints. - for (var i = 0; i < subStep.velocityIterations; ++i) { - for (var j = 0; j < this.m_contacts.length; ++j) { - var contact = this.m_contacts[j]; - contact.solveVelocityConstraint(subStep); - } - } - // Don't store the TOI contact forces for warm starting - // because they can be quite large. - var h = subStep.dt; - // Integrate positions + } + var other = ce.other; + if (other.isDynamic() && !body.isBullet() && !other.isBullet()) { + continue; + } + var sensorA = contact.m_fixtureA.m_isSensor; + var sensorB = contact.m_fixtureB.m_isSensor; + if (sensorA || sensorB) { + continue; + } + backup.set(other.m_sweep); + if (other.m_islandFlag == false) { + other.advance(minAlpha); + } + contact.update(world); + if (contact.isEnabled() == false || contact.isTouching() == false) { + other.m_sweep.set(backup); + other.synchronizeTransform(); + continue; + } + contact.m_islandFlag = true; + this.addContact(contact); + if (other.m_islandFlag) { + continue; + } + other.m_islandFlag = true; + if (!other.isStatic()) { + other.setAwake(true); + } + this.addBody(other); + } + } + } + s_subStep.reset((1 - minAlpha) * step.dt); + s_subStep.dtRatio = 1; + s_subStep.positionIterations = 20; + s_subStep.velocityIterations = step.velocityIterations; + s_subStep.warmStarting = false; + this.solveIslandTOI(s_subStep, bA, bB); for (var i = 0; i < this.m_bodies.length; ++i) { - var body = this.m_bodies[i]; - copyVec2(c, body.c_position.c); - var a = body.c_position.a; - copyVec2(v, body.c_velocity.v); - var w = body.c_velocity.w; - // Check for large velocities - scaleVec2(translation, h, v); - var translationLengthSqr = lengthSqrVec2(translation); - if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { - var ratio = SettingsInternal.maxTranslation / math_sqrt$3(translationLengthSqr); - mulVec2(v, ratio); - } - var rotation = h * w; - if (rotation * rotation > SettingsInternal.maxRotationSquared) { - var ratio = SettingsInternal.maxRotation / math_abs$6(rotation); - w *= ratio; - } - // Integrate - plusScaleVec2(c, h, v); - a += h * w; - copyVec2(body.c_position.c, c); - body.c_position.a = a; - copyVec2(body.c_velocity.v, v); - body.c_velocity.w = w; - // Sync bodies - copyVec2(body.m_sweep.c, c); - body.m_sweep.a = a; - copyVec2(body.m_linearVelocity, v); - body.m_angularVelocity = w; - body.synchronizeTransform(); - } - this.postSolveIsland(); - }; - /** @internal */ - Solver.prototype.postSolveIsland = function () { - for (var c_5 = 0; c_5 < this.m_contacts.length; ++c_5) { - var contact = this.m_contacts[c_5]; - this.m_world.postSolve(contact, contact.m_impulse); - } - }; - return Solver; -}()); -// @ts-ignore + var body = this.m_bodies[i]; + body.m_islandFlag = false; + if (!body.isDynamic()) { + continue; + } + body.synchronizeFixtures(); + for (var ce = body.m_contactList; ce; ce = ce.next) { + ce.contact.m_toiFlag = false; + ce.contact.m_islandFlag = false; + } + } + world.findNewContacts(); + if (world.m_subStepping) { + world.m_stepComplete = false; + break; + } + } + }; + Solver2.prototype.solveIslandTOI = function(subStep, toiA, toiB) { + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(body.c_position.c, body.m_sweep.c); + body.c_position.a = body.m_sweep.a; + copyVec2(body.c_velocity.v, body.m_linearVelocity); + body.c_velocity.w = body.m_angularVelocity; + } + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initConstraint(subStep); + } + for (var i = 0; i < subStep.positionIterations; ++i) { + var minSeparation = 0; + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + var separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB); + minSeparation = math_min$5(minSeparation, separation); + } + var contactsOkay = minSeparation >= -1.5 * SettingsInternal.linearSlop; + if (contactsOkay) { + break; + } + } + var i; + copyVec2(toiA.m_sweep.c0, toiA.c_position.c); + toiA.m_sweep.a0 = toiA.c_position.a; + copyVec2(toiB.m_sweep.c0, toiB.c_position.c); + toiB.m_sweep.a0 = toiB.c_position.a; + for (var i = 0; i < this.m_contacts.length; ++i) { + var contact = this.m_contacts[i]; + contact.initVelocityConstraint(subStep); + } + for (var i = 0; i < subStep.velocityIterations; ++i) { + for (var j = 0; j < this.m_contacts.length; ++j) { + var contact = this.m_contacts[j]; + contact.solveVelocityConstraint(subStep); + } + } + var h = subStep.dt; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + copyVec2(c, body.c_position.c); + var a2 = body.c_position.a; + copyVec2(v, body.c_velocity.v); + var w = body.c_velocity.w; + scaleVec2(translation, h, v); + var translationLengthSqr = lengthSqrVec2(translation); + if (translationLengthSqr > SettingsInternal.maxTranslationSquared) { + var ratio = SettingsInternal.maxTranslation / math_sqrt$3(translationLengthSqr); + mulVec2(v, ratio); + } + var rotation2 = h * w; + if (rotation2 * rotation2 > SettingsInternal.maxRotationSquared) { + var ratio = SettingsInternal.maxRotation / math_abs$6(rotation2); + w *= ratio; + } + plusScaleVec2(c, h, v); + a2 += h * w; + copyVec2(body.c_position.c, c); + body.c_position.a = a2; + copyVec2(body.c_velocity.v, v); + body.c_velocity.w = w; + copyVec2(body.m_sweep.c, c); + body.m_sweep.a = a2; + copyVec2(body.m_linearVelocity, v); + body.m_angularVelocity = w; + body.synchronizeTransform(); + } + this.postSolveIsland(); + }; + Solver2.prototype.postSolveIsland = function() { + for (var c_5 = 0; c_5 < this.m_contacts.length; ++c_5) { + var contact = this.m_contacts[c_5]; + this.m_world.postSolve(contact, contact.m_impulse); + } + }; + return Solver2; + }() +); Solver.TimeStep = TimeStep; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** - * A 2-by-2 matrix. Stored in column-major order. - */ -var Mat22 = /** @class */ (function () { - function Mat22(a, b, c, d) { - if (typeof a === "object" && a !== null) { - this.ex = Vec2.clone(a); - this.ey = Vec2.clone(b); - } - else if (typeof a === "number") { - this.ex = Vec2.neo(a, c); - this.ey = Vec2.neo(b, d); - } - else { - this.ex = Vec2.zero(); - this.ey = Vec2.zero(); - } - } - /** @hidden */ - Mat22.prototype.toString = function () { - return JSON.stringify(this); - }; - Mat22.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey); - }; - Mat22.assert = function (o) { - }; - Mat22.prototype.set = function (a, b, c, d) { - if (typeof a === "number" && typeof b === "number" && typeof c === "number" - && typeof d === "number") { - this.ex.setNum(a, c); - this.ey.setNum(b, d); - } - else if (typeof a === "object" && typeof b === "object") { - this.ex.setVec2(a); - this.ey.setVec2(b); - } - else if (typeof a === "object") { - this.ex.setVec2(a.ex); - this.ey.setVec2(a.ey); - } - else ; - }; - Mat22.prototype.setIdentity = function () { - this.ex.x = 1.0; - this.ey.x = 0.0; - this.ex.y = 0.0; - this.ey.y = 1.0; - }; - Mat22.prototype.setZero = function () { - this.ex.x = 0.0; - this.ey.x = 0.0; - this.ex.y = 0.0; - this.ey.y = 0.0; - }; - Mat22.prototype.getInverse = function () { - var a = this.ex.x; - var b = this.ey.x; - var c = this.ex.y; - var d = this.ey.y; - var det = a * d - b * c; - if (det !== 0.0) { - det = 1.0 / det; - } - var imx = new Mat22(); - imx.ex.x = det * d; - imx.ey.x = -det * b; - imx.ex.y = -det * c; - imx.ey.y = det * a; - return imx; - }; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - Mat22.prototype.solve = function (v) { - var a = this.ex.x; - var b = this.ey.x; - var c = this.ex.y; - var d = this.ey.y; - var det = a * d - b * c; - if (det !== 0.0) { - det = 1.0 / det; - } - var w = Vec2.zero(); - w.x = det * (d * v.x - b * v.y); - w.y = det * (a * v.y - c * v.x); - return w; - }; - Mat22.mul = function (mx, v) { - if (v && "x" in v && "y" in v) { - var x = mx.ex.x * v.x + mx.ey.x * v.y; - var y = mx.ex.y * v.x + mx.ey.y * v.y; - return Vec2.neo(x, y); - } - else if (v && "ex" in v && "ey" in v) { // Mat22 - // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey)); - var a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y; - var b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y; - var c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y; - var d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y; - return new Mat22(a, b, c, d); - } - }; - Mat22.mulVec2 = function (mx, v) { - var x = mx.ex.x * v.x + mx.ey.x * v.y; - var y = mx.ex.y * v.x + mx.ey.y * v.y; - return Vec2.neo(x, y); - }; - Mat22.mulMat22 = function (mx, v) { - // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey)); - var a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y; - var b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y; - var c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y; - var d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y; - return new Mat22(a, b, c, d); - }; - Mat22.mulT = function (mx, v) { - if (v && "x" in v && "y" in v) { // Vec2 - return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey)); - } - else if (v && "ex" in v && "ey" in v) { // Mat22 - var c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex)); - var c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey)); - return new Mat22(c1, c2); - } - }; - Mat22.mulTVec2 = function (mx, v) { - return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey)); - }; - Mat22.mulTMat22 = function (mx, v) { - var c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex)); - var c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey)); - return new Mat22(c1, c2); - }; - Mat22.abs = function (mx) { - return new Mat22(Vec2.abs(mx.ex), Vec2.abs(mx.ey)); - }; - Mat22.add = function (mx1, mx2) { - return new Mat22(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey)); - }; - return Mat22; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_sqrt$2 = Math.sqrt; -/** @internal */ var pointA$1 = vec2(0, 0); -/** @internal */ var pointB$1 = vec2(0, 0); -/** @internal */ var temp$3 = vec2(0, 0); -/** @internal */ var cA$1 = vec2(0, 0); -/** @internal */ var cB$1 = vec2(0, 0); -/** @internal */ var dist = vec2(0, 0); -/** @internal */ var planePoint$2 = vec2(0, 0); -/** @internal */ var clipPoint$1 = vec2(0, 0); +var Mat22 = ( + /** @class */ + function() { + function Mat222(a2, b2, c2, d2) { + if (typeof a2 === "object" && a2 !== null) { + this.ex = Vec2.clone(a2); + this.ey = Vec2.clone(b2); + } else if (typeof a2 === "number") { + this.ex = Vec2.neo(a2, c2); + this.ey = Vec2.neo(b2, d2); + } else { + this.ex = Vec2.zero(); + this.ey = Vec2.zero(); + } + } + Mat222.prototype.toString = function() { + return JSON.stringify(this); + }; + Mat222.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey); + }; + Mat222.assert = function(o) { + }; + Mat222.prototype.set = function(a2, b2, c2, d2) { + if (typeof a2 === "number" && typeof b2 === "number" && typeof c2 === "number" && typeof d2 === "number") { + this.ex.setNum(a2, c2); + this.ey.setNum(b2, d2); + } else if (typeof a2 === "object" && typeof b2 === "object") { + this.ex.setVec2(a2); + this.ey.setVec2(b2); + } else if (typeof a2 === "object") { + this.ex.setVec2(a2.ex); + this.ey.setVec2(a2.ey); + } else ; + }; + Mat222.prototype.setIdentity = function() { + this.ex.x = 1; + this.ey.x = 0; + this.ex.y = 0; + this.ey.y = 1; + }; + Mat222.prototype.setZero = function() { + this.ex.x = 0; + this.ey.x = 0; + this.ex.y = 0; + this.ey.y = 0; + }; + Mat222.prototype.getInverse = function() { + var a2 = this.ex.x; + var b2 = this.ey.x; + var c2 = this.ex.y; + var d2 = this.ey.y; + var det = a2 * d2 - b2 * c2; + if (det !== 0) { + det = 1 / det; + } + var imx = new Mat222(); + imx.ex.x = det * d2; + imx.ey.x = -det * b2; + imx.ex.y = -det * c2; + imx.ey.y = det * a2; + return imx; + }; + Mat222.prototype.solve = function(v3) { + var a2 = this.ex.x; + var b2 = this.ey.x; + var c2 = this.ex.y; + var d2 = this.ey.y; + var det = a2 * d2 - b2 * c2; + if (det !== 0) { + det = 1 / det; + } + var w = Vec2.zero(); + w.x = det * (d2 * v3.x - b2 * v3.y); + w.y = det * (a2 * v3.y - c2 * v3.x); + return w; + }; + Mat222.mul = function(mx, v3) { + if (v3 && "x" in v3 && "y" in v3) { + var x2 = mx.ex.x * v3.x + mx.ey.x * v3.y; + var y = mx.ex.y * v3.x + mx.ey.y * v3.y; + return Vec2.neo(x2, y); + } else if (v3 && "ex" in v3 && "ey" in v3) { + var a2 = mx.ex.x * v3.ex.x + mx.ey.x * v3.ex.y; + var b2 = mx.ex.x * v3.ey.x + mx.ey.x * v3.ey.y; + var c2 = mx.ex.y * v3.ex.x + mx.ey.y * v3.ex.y; + var d2 = mx.ex.y * v3.ey.x + mx.ey.y * v3.ey.y; + return new Mat222(a2, b2, c2, d2); + } + }; + Mat222.mulVec2 = function(mx, v3) { + var x2 = mx.ex.x * v3.x + mx.ey.x * v3.y; + var y = mx.ex.y * v3.x + mx.ey.y * v3.y; + return Vec2.neo(x2, y); + }; + Mat222.mulMat22 = function(mx, v3) { + var a2 = mx.ex.x * v3.ex.x + mx.ey.x * v3.ex.y; + var b2 = mx.ex.x * v3.ey.x + mx.ey.x * v3.ey.y; + var c2 = mx.ex.y * v3.ex.x + mx.ey.y * v3.ex.y; + var d2 = mx.ex.y * v3.ey.x + mx.ey.y * v3.ey.y; + return new Mat222(a2, b2, c2, d2); + }; + Mat222.mulT = function(mx, v3) { + if (v3 && "x" in v3 && "y" in v3) { + return Vec2.neo(Vec2.dot(v3, mx.ex), Vec2.dot(v3, mx.ey)); + } else if (v3 && "ex" in v3 && "ey" in v3) { + var c1 = Vec2.neo(Vec2.dot(mx.ex, v3.ex), Vec2.dot(mx.ey, v3.ex)); + var c2 = Vec2.neo(Vec2.dot(mx.ex, v3.ey), Vec2.dot(mx.ey, v3.ey)); + return new Mat222(c1, c2); + } + }; + Mat222.mulTVec2 = function(mx, v3) { + return Vec2.neo(Vec2.dot(v3, mx.ex), Vec2.dot(v3, mx.ey)); + }; + Mat222.mulTMat22 = function(mx, v3) { + var c1 = Vec2.neo(Vec2.dot(mx.ex, v3.ex), Vec2.dot(mx.ey, v3.ex)); + var c2 = Vec2.neo(Vec2.dot(mx.ex, v3.ey), Vec2.dot(mx.ey, v3.ey)); + return new Mat222(c1, c2); + }; + Mat222.abs = function(mx) { + return new Mat222(Vec2.abs(mx.ex), Vec2.abs(mx.ey)); + }; + Mat222.add = function(mx1, mx2) { + return new Mat222(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey)); + }; + return Mat222; + }() +); +var math_sqrt$2 = Math.sqrt; +var pointA$1 = vec2(0, 0); +var pointB$1 = vec2(0, 0); +var temp$3 = vec2(0, 0); +var cA$1 = vec2(0, 0); +var cB$1 = vec2(0, 0); +var dist = vec2(0, 0); +var planePoint$2 = vec2(0, 0); +var clipPoint$1 = vec2(0, 0); var ManifoldType; -(function (ManifoldType) { - ManifoldType[ManifoldType["e_unset"] = -1] = "e_unset"; - ManifoldType[ManifoldType["e_circles"] = 0] = "e_circles"; - ManifoldType[ManifoldType["e_faceA"] = 1] = "e_faceA"; - ManifoldType[ManifoldType["e_faceB"] = 2] = "e_faceB"; +(function(ManifoldType2) { + ManifoldType2[ManifoldType2["e_unset"] = -1] = "e_unset"; + ManifoldType2[ManifoldType2["e_circles"] = 0] = "e_circles"; + ManifoldType2[ManifoldType2["e_faceA"] = 1] = "e_faceA"; + ManifoldType2[ManifoldType2["e_faceB"] = 2] = "e_faceB"; })(ManifoldType || (ManifoldType = {})); var ContactFeatureType; -(function (ContactFeatureType) { - ContactFeatureType[ContactFeatureType["e_unset"] = -1] = "e_unset"; - ContactFeatureType[ContactFeatureType["e_vertex"] = 0] = "e_vertex"; - ContactFeatureType[ContactFeatureType["e_face"] = 1] = "e_face"; +(function(ContactFeatureType2) { + ContactFeatureType2[ContactFeatureType2["e_unset"] = -1] = "e_unset"; + ContactFeatureType2[ContactFeatureType2["e_vertex"] = 0] = "e_vertex"; + ContactFeatureType2[ContactFeatureType2["e_face"] = 1] = "e_face"; })(ContactFeatureType || (ContactFeatureType = {})); -/** - * This is used for determining the state of contact points. - */ var PointState; -(function (PointState) { - /** Point does not exist */ - PointState[PointState["nullState"] = 0] = "nullState"; - /** Point was added in the update */ - PointState[PointState["addState"] = 1] = "addState"; - /** Point persisted across the update */ - PointState[PointState["persistState"] = 2] = "persistState"; - /** Point was removed in the update */ - PointState[PointState["removeState"] = 3] = "removeState"; +(function(PointState2) { + PointState2[PointState2["nullState"] = 0] = "nullState"; + PointState2[PointState2["addState"] = 1] = "addState"; + PointState2[PointState2["persistState"] = 2] = "persistState"; + PointState2[PointState2["removeState"] = 3] = "removeState"; })(PointState || (PointState = {})); -/** - * Used for computing contact manifolds. - */ -var ClipVertex = /** @class */ (function () { - function ClipVertex() { - this.v = vec2(0, 0); - this.id = new ContactID(); - } - ClipVertex.prototype.set = function (o) { - copyVec2(this.v, o.v); - this.id.set(o.id); - }; - ClipVertex.prototype.recycle = function () { - zeroVec2(this.v); - this.id.recycle(); - }; - return ClipVertex; -}()); -/** - * A manifold for two touching convex shapes. Manifolds are created in `evaluate` - * method of Contact subclasses. - * - * Supported manifold types are e_faceA or e_faceB for clip point versus plane - * with radius and e_circles point versus point with radius. - * - * We store contacts in this way so that position correction can account for - * movement, which is critical for continuous physics. All contact scenarios - * must be expressed in one of these types. This structure is stored across time - * steps, so we keep it small. - */ -var Manifold = /** @class */ (function () { - function Manifold() { - /** - * Usage depends on manifold type: - * - circles: not used - * - faceA: the normal on polygonA - * - faceB: the normal on polygonB - */ - this.localNormal = vec2(0, 0); - /** - * Usage depends on manifold type: - * - circles: the local center of circleA - * - faceA: the center of faceA - * - faceB: the center of faceB - */ - this.localPoint = vec2(0, 0); - /** The points of contact */ - this.points = [new ManifoldPoint(), new ManifoldPoint()]; - /** The number of manifold points */ - this.pointCount = 0; - } - Manifold.prototype.set = function (that) { - this.type = that.type; - copyVec2(this.localNormal, that.localNormal); - copyVec2(this.localPoint, that.localPoint); - this.pointCount = that.pointCount; - this.points[0].set(that.points[0]); - this.points[1].set(that.points[1]); - }; - Manifold.prototype.recycle = function () { - this.type = ManifoldType.e_unset; - zeroVec2(this.localNormal); - zeroVec2(this.localPoint); - this.pointCount = 0; - this.points[0].recycle(); - this.points[1].recycle(); - }; - /** - * Evaluate the manifold with supplied transforms. This assumes modest motion - * from the original state. This does not change the point count, impulses, etc. - * The radii must come from the shapes that generated the manifold. - */ - Manifold.prototype.getWorldManifold = function (wm, xfA, radiusA, xfB, radiusB) { - if (this.pointCount == 0) { - return wm; - } - wm = wm || new WorldManifold(); - wm.pointCount = this.pointCount; - var normal = wm.normal; - var points = wm.points; - var separations = wm.separations; - switch (this.type) { - case ManifoldType.e_circles: { - setVec2(normal, 1.0, 0.0); - var manifoldPoint = this.points[0]; - transformVec2(pointA$1, xfA, this.localPoint); - transformVec2(pointB$1, xfB, manifoldPoint.localPoint); - subVec2(dist, pointB$1, pointA$1); - var lengthSqr = lengthSqrVec2(dist); - if (lengthSqr > EPSILON * EPSILON) { - var length_1 = math_sqrt$2(lengthSqr); - scaleVec2(normal, 1 / length_1, dist); - } - combine2Vec2(cA$1, 1, pointA$1, radiusA, normal); - combine2Vec2(cB$1, 1, pointB$1, -radiusB, normal); - combine2Vec2(points[0], 0.5, cA$1, 0.5, cB$1); - separations[0] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal); - break; - } - case ManifoldType.e_faceA: { - rotVec2(normal, xfA.q, this.localNormal); - transformVec2(planePoint$2, xfA, this.localPoint); - for (var i = 0; i < this.pointCount; ++i) { - var manifoldPoint = this.points[i]; - transformVec2(clipPoint$1, xfB, manifoldPoint.localPoint); - combine2Vec2(cA$1, 1, clipPoint$1, radiusA - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal), normal); - combine2Vec2(cB$1, 1, clipPoint$1, -radiusB, normal); - combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); - separations[i] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal); - } - break; - } - case ManifoldType.e_faceB: { - rotVec2(normal, xfB.q, this.localNormal); - transformVec2(planePoint$2, xfB, this.localPoint); - for (var i = 0; i < this.pointCount; ++i) { - var manifoldPoint = this.points[i]; - transformVec2(clipPoint$1, xfA, manifoldPoint.localPoint); - combine2Vec2(cB$1, 1, clipPoint$1, radiusB - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal), normal); - combine2Vec2(cA$1, 1, clipPoint$1, -radiusA, normal); - combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); - separations[i] = dotVec2(subVec2(temp$3, cA$1, cB$1), normal); - } - // Ensure normal points from A to B. - negVec2(normal); - break; - } - } +var ClipVertex = ( + /** @class */ + function() { + function ClipVertex2() { + this.v = vec2(0, 0); + this.id = new ContactID(); + } + ClipVertex2.prototype.set = function(o) { + copyVec2(this.v, o.v); + this.id.set(o.id); + }; + ClipVertex2.prototype.recycle = function() { + zeroVec2(this.v); + this.id.recycle(); + }; + return ClipVertex2; + }() +); +var Manifold = ( + /** @class */ + function() { + function Manifold2() { + this.localNormal = vec2(0, 0); + this.localPoint = vec2(0, 0); + this.points = [new ManifoldPoint(), new ManifoldPoint()]; + this.pointCount = 0; + } + Manifold2.prototype.set = function(that) { + this.type = that.type; + copyVec2(this.localNormal, that.localNormal); + copyVec2(this.localPoint, that.localPoint); + this.pointCount = that.pointCount; + this.points[0].set(that.points[0]); + this.points[1].set(that.points[1]); + }; + Manifold2.prototype.recycle = function() { + this.type = ManifoldType.e_unset; + zeroVec2(this.localNormal); + zeroVec2(this.localPoint); + this.pointCount = 0; + this.points[0].recycle(); + this.points[1].recycle(); + }; + Manifold2.prototype.getWorldManifold = function(wm, xfA2, radiusA, xfB2, radiusB) { + if (this.pointCount == 0) { return wm; - }; - Manifold.clipSegmentToLine = clipSegmentToLine; - Manifold.ClipVertex = ClipVertex; - Manifold.getPointStates = getPointStates; - Manifold.PointState = PointState; - return Manifold; -}()); -/** - * A manifold point is a contact point belonging to a contact manifold. It holds - * details related to the geometry and dynamics of the contact points. - * - * This structure is stored across time steps, so we keep it small. - * - * Note: impulses are used for internal caching and may not provide reliable - * contact forces, especially for high speed collisions. - */ -var ManifoldPoint = /** @class */ (function () { - function ManifoldPoint() { - /** - * Usage depends on manifold type: - * - circles: the local center of circleB - * - faceA: the local center of circleB or the clip point of polygonB - * - faceB: the clip point of polygonA - */ - this.localPoint = vec2(0, 0); - /** - * The non-penetration impulse - */ - this.normalImpulse = 0; - /** - * The friction impulse - */ - this.tangentImpulse = 0; - /** - * Uniquely identifies a contact point between two shapes to facilitate warm starting - */ - this.id = new ContactID(); - } - ManifoldPoint.prototype.set = function (that) { - copyVec2(this.localPoint, that.localPoint); - this.normalImpulse = that.normalImpulse; - this.tangentImpulse = that.tangentImpulse; - this.id.set(that.id); - }; - ManifoldPoint.prototype.recycle = function () { - zeroVec2(this.localPoint); - this.normalImpulse = 0; - this.tangentImpulse = 0; - this.id.recycle(); - }; - return ManifoldPoint; -}()); -/** - * Contact ids to facilitate warm starting. - * - * ContactFeature: The features that intersect to form the contact point. - */ -var ContactID = /** @class */ (function () { - function ContactID() { - /** - * Used to quickly compare contact ids. - */ - this.key = -1; - /** ContactFeature index on shapeA */ - this.indexA = -1; - /** ContactFeature index on shapeB */ - this.indexB = -1; - /** ContactFeature type on shapeA */ - this.typeA = ContactFeatureType.e_unset; - /** ContactFeature type on shapeB */ - this.typeB = ContactFeatureType.e_unset; - } - ContactID.prototype.setFeatures = function (indexA, typeA, indexB, typeB) { - this.indexA = indexA; - this.indexB = indexB; - this.typeA = typeA; - this.typeB = typeB; - this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; - }; - ContactID.prototype.set = function (that) { - this.indexA = that.indexA; - this.indexB = that.indexB; - this.typeA = that.typeA; - this.typeB = that.typeB; - this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; - }; - ContactID.prototype.swapFeatures = function () { - var indexA = this.indexA; - var indexB = this.indexB; - var typeA = this.typeA; - var typeB = this.typeB; - this.indexA = indexB; - this.indexB = indexA; - this.typeA = typeB; - this.typeB = typeA; - this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; - }; - ContactID.prototype.recycle = function () { - this.indexA = 0; - this.indexB = 0; - this.typeA = ContactFeatureType.e_unset; - this.typeB = ContactFeatureType.e_unset; - this.key = -1; - }; - return ContactID; -}()); -/** - * This is used to compute the current state of a contact manifold. - */ -var WorldManifold = /** @class */ (function () { - function WorldManifold() { - /** World vector pointing from A to B */ - this.normal = vec2(0, 0); - /** World contact point (point of intersection) */ - this.points = [vec2(0, 0), vec2(0, 0)]; // [maxManifoldPoints] - /** A negative value indicates overlap, in meters */ - this.separations = [0, 0]; // [maxManifoldPoints] - /** The number of manifold points */ - this.pointCount = 0; - } - WorldManifold.prototype.recycle = function () { - zeroVec2(this.normal); - zeroVec2(this.points[0]); - zeroVec2(this.points[1]); - this.separations[0] = 0; - this.separations[1] = 0; - this.pointCount = 0; - }; - return WorldManifold; -}()); -/** - * Compute the point states given two manifolds. The states pertain to the - * transition from manifold1 to manifold2. So state1 is either persist or remove - * while state2 is either add or persist. - */ + } + wm = wm || new WorldManifold(); + wm.pointCount = this.pointCount; + var normal3 = wm.normal; + var points = wm.points; + var separations = wm.separations; + switch (this.type) { + case ManifoldType.e_circles: { + setVec2(normal3, 1, 0); + var manifoldPoint = this.points[0]; + transformVec2(pointA$1, xfA2, this.localPoint); + transformVec2(pointB$1, xfB2, manifoldPoint.localPoint); + subVec2(dist, pointB$1, pointA$1); + var lengthSqr = lengthSqrVec2(dist); + if (lengthSqr > EPSILON * EPSILON) { + var length_1 = math_sqrt$2(lengthSqr); + scaleVec2(normal3, 1 / length_1, dist); + } + combine2Vec2(cA$1, 1, pointA$1, radiusA, normal3); + combine2Vec2(cB$1, 1, pointB$1, -radiusB, normal3); + combine2Vec2(points[0], 0.5, cA$1, 0.5, cB$1); + separations[0] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal3); + break; + } + case ManifoldType.e_faceA: { + rotVec2(normal3, xfA2.q, this.localNormal); + transformVec2(planePoint$2, xfA2, this.localPoint); + for (var i = 0; i < this.pointCount; ++i) { + var manifoldPoint = this.points[i]; + transformVec2(clipPoint$1, xfB2, manifoldPoint.localPoint); + combine2Vec2(cA$1, 1, clipPoint$1, radiusA - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal3), normal3); + combine2Vec2(cB$1, 1, clipPoint$1, -radiusB, normal3); + combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); + separations[i] = dotVec2(subVec2(temp$3, cB$1, cA$1), normal3); + } + break; + } + case ManifoldType.e_faceB: { + rotVec2(normal3, xfB2.q, this.localNormal); + transformVec2(planePoint$2, xfB2, this.localPoint); + for (var i = 0; i < this.pointCount; ++i) { + var manifoldPoint = this.points[i]; + transformVec2(clipPoint$1, xfA2, manifoldPoint.localPoint); + combine2Vec2(cB$1, 1, clipPoint$1, radiusB - dotVec2(subVec2(temp$3, clipPoint$1, planePoint$2), normal3), normal3); + combine2Vec2(cA$1, 1, clipPoint$1, -radiusA, normal3); + combine2Vec2(points[i], 0.5, cA$1, 0.5, cB$1); + separations[i] = dotVec2(subVec2(temp$3, cA$1, cB$1), normal3); + } + negVec2(normal3); + break; + } + } + return wm; + }; + Manifold2.clipSegmentToLine = clipSegmentToLine; + Manifold2.ClipVertex = ClipVertex; + Manifold2.getPointStates = getPointStates; + Manifold2.PointState = PointState; + return Manifold2; + }() +); +var ManifoldPoint = ( + /** @class */ + function() { + function ManifoldPoint2() { + this.localPoint = vec2(0, 0); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.id = new ContactID(); + } + ManifoldPoint2.prototype.set = function(that) { + copyVec2(this.localPoint, that.localPoint); + this.normalImpulse = that.normalImpulse; + this.tangentImpulse = that.tangentImpulse; + this.id.set(that.id); + }; + ManifoldPoint2.prototype.recycle = function() { + zeroVec2(this.localPoint); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.id.recycle(); + }; + return ManifoldPoint2; + }() +); +var ContactID = ( + /** @class */ + function() { + function ContactID2() { + this.key = -1; + this.indexA = -1; + this.indexB = -1; + this.typeA = ContactFeatureType.e_unset; + this.typeB = ContactFeatureType.e_unset; + } + ContactID2.prototype.setFeatures = function(indexA, typeA, indexB, typeB) { + this.indexA = indexA; + this.indexB = indexB; + this.typeA = typeA; + this.typeB = typeB; + this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; + }; + ContactID2.prototype.set = function(that) { + this.indexA = that.indexA; + this.indexB = that.indexB; + this.typeA = that.typeA; + this.typeB = that.typeB; + this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; + }; + ContactID2.prototype.swapFeatures = function() { + var indexA = this.indexA; + var indexB = this.indexB; + var typeA = this.typeA; + var typeB = this.typeB; + this.indexA = indexB; + this.indexB = indexA; + this.typeA = typeB; + this.typeB = typeA; + this.key = this.indexA + this.indexB * 4 + this.typeA * 16 + this.typeB * 64; + }; + ContactID2.prototype.recycle = function() { + this.indexA = 0; + this.indexB = 0; + this.typeA = ContactFeatureType.e_unset; + this.typeB = ContactFeatureType.e_unset; + this.key = -1; + }; + return ContactID2; + }() +); +var WorldManifold = ( + /** @class */ + function() { + function WorldManifold2() { + this.normal = vec2(0, 0); + this.points = [vec2(0, 0), vec2(0, 0)]; + this.separations = [0, 0]; + this.pointCount = 0; + } + WorldManifold2.prototype.recycle = function() { + zeroVec2(this.normal); + zeroVec2(this.points[0]); + zeroVec2(this.points[1]); + this.separations[0] = 0; + this.separations[1] = 0; + this.pointCount = 0; + }; + return WorldManifold2; + }() +); function getPointStates(state1, state2, manifold1, manifold2) { - // state1, state2: PointState[Settings.maxManifoldPoints] - // for (var i = 0; i < Settings.maxManifoldPoints; ++i) { - // state1[i] = PointState.nullState; - // state2[i] = PointState.nullState; - // } - // Detect persists and removes. - for (var i = 0; i < manifold1.pointCount; ++i) { - var id = manifold1.points[i].id; - state1[i] = PointState.removeState; - for (var j = 0; j < manifold2.pointCount; ++j) { - if (manifold2.points[j].id.key === id.key) { - state1[i] = PointState.persistState; - break; - } - } - } - // Detect persists and adds. - for (var i = 0; i < manifold2.pointCount; ++i) { - var id = manifold2.points[i].id; - state2[i] = PointState.addState; - for (var j = 0; j < manifold1.pointCount; ++j) { - if (manifold1.points[j].id.key === id.key) { - state2[i] = PointState.persistState; - break; - } - } - } + for (var i = 0; i < manifold1.pointCount; ++i) { + var id = manifold1.points[i].id; + state1[i] = PointState.removeState; + for (var j = 0; j < manifold2.pointCount; ++j) { + if (manifold2.points[j].id.key === id.key) { + state1[i] = PointState.persistState; + break; + } + } + } + for (var i = 0; i < manifold2.pointCount; ++i) { + var id = manifold2.points[i].id; + state2[i] = PointState.addState; + for (var j = 0; j < manifold1.pointCount; ++j) { + if (manifold1.points[j].id.key === id.key) { + state2[i] = PointState.persistState; + break; + } + } + } } -/** - * Clipping for contact manifolds. Sutherland-Hodgman clipping. - */ -function clipSegmentToLine(vOut, vIn, normal, offset, vertexIndexA) { - // Start with no output points - var numOut = 0; - // Calculate the distance of end points to the line - var distance0 = dotVec2(normal, vIn[0].v) - offset; - var distance1 = dotVec2(normal, vIn[1].v) - offset; - // If the points are behind the plane - if (distance0 <= 0.0) - vOut[numOut++].set(vIn[0]); - if (distance1 <= 0.0) - vOut[numOut++].set(vIn[1]); - // If the points are on different sides of the plane - if (distance0 * distance1 < 0.0) { - // Find intersection point of edge and plane - var interp = distance0 / (distance0 - distance1); - combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v); - // VertexA is hitting edgeB. - vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face); - ++numOut; - } - return numOut; +function clipSegmentToLine(vOut, vIn, normal3, offset, vertexIndexA) { + var numOut = 0; + var distance0 = dotVec2(normal3, vIn[0].v) - offset; + var distance1 = dotVec2(normal3, vIn[1].v) - offset; + if (distance0 <= 0) + vOut[numOut++].set(vIn[0]); + if (distance1 <= 0) + vOut[numOut++].set(vIn[1]); + if (distance0 * distance1 < 0) { + var interp = distance0 / (distance0 - distance1); + combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v); + vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face); + ++numOut; + } + return numOut; } - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_sqrt$1 = Math.sqrt; -/** @internal */ var math_max$2 = Math.max; -/** @internal */ var math_min$4 = Math.min; -/** @internal */ var contactPool = new Pool({ - create: function () { - return new Contact(); - }, - release: function (contact) { - contact.recycle(); - } +var math_sqrt$1 = Math.sqrt; +var math_max$2 = Math.max; +var math_min$4 = Math.min; +var contactPool = new Pool({ + create: function() { + return new Contact(); + }, + release: function(contact) { + contact.recycle(); + } }); -/** @internal */ var oldManifold = new Manifold(); -/** @internal */ var worldManifold = new WorldManifold(); -/** - * A contact edge is used to connect bodies and contacts together in a contact - * graph where each body is a node and each contact is an edge. A contact edge - * belongs to a doubly linked list maintained in each attached body. Each - * contact has two contact nodes, one for each attached body. - */ -var ContactEdge = /** @class */ (function () { - function ContactEdge(contact) { - this.prev = null; - this.next = null; - this.other = null; - this.contact = contact; - } - /** @internal */ - ContactEdge.prototype.recycle = function () { - this.prev = null; - this.next = null; - this.other = null; - }; - return ContactEdge; -}()); -/** - * Friction mixing law. The idea is to allow either fixture to drive the - * friction to zero. For example, anything slides on ice. - */ +var oldManifold = new Manifold(); +var worldManifold = new WorldManifold(); +var ContactEdge = ( + /** @class */ + function() { + function ContactEdge2(contact) { + this.prev = null; + this.next = null; + this.other = null; + this.contact = contact; + } + ContactEdge2.prototype.recycle = function() { + this.prev = null; + this.next = null; + this.other = null; + }; + return ContactEdge2; + }() +); function mixFriction(friction1, friction2) { - return math_sqrt$1(friction1 * friction2); + return math_sqrt$1(friction1 * friction2); } -/** - * Restitution mixing law. The idea is allow for anything to bounce off an - * inelastic surface. For example, a superball bounces on anything. - */ function mixRestitution(restitution1, restitution2) { - return restitution1 > restitution2 ? restitution1 : restitution2; + return restitution1 > restitution2 ? restitution1 : restitution2; } -// TODO: move this to Settings? -/** @internal */ var s_registers = []; -// TODO: merge with ManifoldPoint? -var VelocityConstraintPoint = /** @class */ (function () { - function VelocityConstraintPoint() { - this.rA = vec2(0, 0); - this.rB = vec2(0, 0); - this.normalImpulse = 0; - this.tangentImpulse = 0; - this.normalMass = 0; - this.tangentMass = 0; - this.velocityBias = 0; - } - VelocityConstraintPoint.prototype.recycle = function () { - zeroVec2(this.rA); - zeroVec2(this.rB); - this.normalImpulse = 0; - this.tangentImpulse = 0; - this.normalMass = 0; - this.tangentMass = 0; - this.velocityBias = 0; - }; - return VelocityConstraintPoint; -}()); -/** @internal */ var cA = vec2(0, 0); -/** @internal */ var vA = vec2(0, 0); -/** @internal */ var cB = vec2(0, 0); -/** @internal */ var vB = vec2(0, 0); -/** @internal */ var tangent$1 = vec2(0, 0); -/** @internal */ var xfA = transform(0, 0, 0); -/** @internal */ var xfB = transform(0, 0, 0); -/** @internal */ var pointA = vec2(0, 0); -/** @internal */ var pointB = vec2(0, 0); -/** @internal */ var clipPoint = vec2(0, 0); -/** @internal */ var planePoint$1 = vec2(0, 0); -/** @internal */ var rA = vec2(0, 0); -/** @internal */ var rB = vec2(0, 0); -/** @internal */ var P$1 = vec2(0, 0); -/** @internal */ var normal$2 = vec2(0, 0); -/** @internal */ var point = vec2(0, 0); -/** @internal */ var dv = vec2(0, 0); -/** @internal */ var dv1 = vec2(0, 0); -/** @internal */ var dv2 = vec2(0, 0); -/** @internal */ var b = vec2(0, 0); -/** @internal */ var a = vec2(0, 0); -/** @internal */ var x = vec2(0, 0); -/** @internal */ var d = vec2(0, 0); -/** @internal */ var P1 = vec2(0, 0); -/** @internal */ var P2 = vec2(0, 0); -/** @internal */ var temp$2 = vec2(0, 0); -/** - * The class manages contact between two shapes. A contact exists for each - * overlapping AABB in the broad-phase (except if filtered). Therefore a contact - * object may exist that has no contact points. - */ -var Contact = /** @class */ (function () { - function Contact() { - // Nodes for connecting bodies. - /** @internal */ this.m_nodeA = new ContactEdge(this); - /** @internal */ this.m_nodeB = new ContactEdge(this); - /** @internal */ this.m_fixtureA = null; - /** @internal */ this.m_fixtureB = null; - /** @internal */ this.m_indexA = -1; - /** @internal */ this.m_indexB = -1; - /** @internal */ this.m_evaluateFcn = null; - /** @internal */ this.m_manifold = new Manifold(); - /** @internal */ this.m_prev = null; - /** @internal */ this.m_next = null; - /** @internal */ this.m_toi = 1.0; - /** @internal */ this.m_toiCount = 0; - // This contact has a valid TOI in m_toi - /** @internal */ this.m_toiFlag = false; - /** @internal */ this.m_friction = 0.0; - /** @internal */ this.m_restitution = 0.0; - /** @internal */ this.m_tangentSpeed = 0.0; - /** @internal This contact can be disabled (by user) */ - this.m_enabledFlag = true; - /** @internal Used when crawling contact graph when forming islands. */ - this.m_islandFlag = false; - /** @internal Set when the shapes are touching. */ - this.m_touchingFlag = false; - /** @internal This contact needs filtering because a fixture filter was changed. */ - this.m_filterFlag = false; - /** @internal This bullet contact had a TOI event */ - this.m_bulletHitFlag = false; - /** @internal Contact reporting impulse object cache */ - this.m_impulse = new ContactImpulse(this); - // VelocityConstraint - /** @internal */ this.v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; // [maxManifoldPoints]; - /** @internal */ this.v_normal = vec2(0, 0); - /** @internal */ this.v_normalMass = new Mat22(); - /** @internal */ this.v_K = new Mat22(); - /** @internal */ this.v_pointCount = 0; - /** @internal */ this.v_tangentSpeed = 0; - /** @internal */ this.v_friction = 0; - /** @internal */ this.v_restitution = 0; - /** @internal */ this.v_invMassA = 0; - /** @internal */ this.v_invMassB = 0; - /** @internal */ this.v_invIA = 0; - /** @internal */ this.v_invIB = 0; - // PositionConstraint - /** @internal */ this.p_localPoints = [vec2(0, 0), vec2(0, 0)]; // [maxManifoldPoints]; - /** @internal */ this.p_localNormal = vec2(0, 0); - /** @internal */ this.p_localPoint = vec2(0, 0); - /** @internal */ this.p_localCenterA = vec2(0, 0); - /** @internal */ this.p_localCenterB = vec2(0, 0); - /** @internal */ this.p_type = ManifoldType.e_unset; - /** @internal */ this.p_radiusA = 0; - /** @internal */ this.p_radiusB = 0; - /** @internal */ this.p_pointCount = 0; - /** @internal */ this.p_invMassA = 0; - /** @internal */ this.p_invMassB = 0; - /** @internal */ this.p_invIA = 0; - /** @internal */ this.p_invIB = 0; - } - /** @internal */ - Contact.prototype.initialize = function (fA, indexA, fB, indexB, evaluateFcn) { - this.m_fixtureA = fA; - this.m_fixtureB = fB; - this.m_indexA = indexA; - this.m_indexB = indexB; - this.m_evaluateFcn = evaluateFcn; - this.m_friction = mixFriction(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction); - this.m_restitution = mixRestitution(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution); - }; - /** @internal */ - Contact.prototype.recycle = function () { - this.m_nodeA.recycle(); - this.m_nodeB.recycle(); - this.m_fixtureA = null; - this.m_fixtureB = null; - this.m_indexA = -1; - this.m_indexB = -1; - this.m_evaluateFcn = null; - this.m_manifold.recycle(); - this.m_prev = null; - this.m_next = null; - this.m_toi = 1; - this.m_toiCount = 0; - this.m_toiFlag = false; - this.m_friction = 0; - this.m_restitution = 0; - this.m_tangentSpeed = 0; - this.m_enabledFlag = true; - this.m_islandFlag = false; - this.m_touchingFlag = false; - this.m_filterFlag = false; - this.m_bulletHitFlag = false; - this.m_impulse.recycle(); - // VelocityConstraint - for (var _i = 0, _a = this.v_points; _i < _a.length; _i++) { - var point_1 = _a[_i]; - point_1.recycle(); - } - zeroVec2(this.v_normal); - this.v_normalMass.setZero(); - this.v_K.setZero(); - this.v_pointCount = 0; - this.v_tangentSpeed = 0; - this.v_friction = 0; - this.v_restitution = 0; - this.v_invMassA = 0; - this.v_invMassB = 0; - this.v_invIA = 0; - this.v_invIB = 0; - // PositionConstraint - for (var _b = 0, _c = this.p_localPoints; _b < _c.length; _b++) { - var point_2 = _c[_b]; - zeroVec2(point_2); - } - zeroVec2(this.p_localNormal); - zeroVec2(this.p_localPoint); - zeroVec2(this.p_localCenterA); - zeroVec2(this.p_localCenterB); - this.p_type = ManifoldType.e_unset; - this.p_radiusA = 0; - this.p_radiusB = 0; - this.p_pointCount = 0; - this.p_invMassA = 0; - this.p_invMassB = 0; - this.p_invIA = 0; - this.p_invIB = 0; - }; - Contact.prototype.initConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var shapeA = fixtureA.m_shape; - var shapeB = fixtureB.m_shape; - if (shapeA === null || shapeB === null) - return; - var manifold = this.m_manifold; - var pointCount = manifold.pointCount; - this.v_invMassA = bodyA.m_invMass; - this.v_invMassB = bodyB.m_invMass; - this.v_invIA = bodyA.m_invI; - this.v_invIB = bodyB.m_invI; - this.v_friction = this.m_friction; - this.v_restitution = this.m_restitution; - this.v_tangentSpeed = this.m_tangentSpeed; - this.v_pointCount = pointCount; - this.v_K.setZero(); - this.v_normalMass.setZero(); - this.p_invMassA = bodyA.m_invMass; - this.p_invMassB = bodyB.m_invMass; - this.p_invIA = bodyA.m_invI; - this.p_invIB = bodyB.m_invI; - copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter); - copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter); - this.p_radiusA = shapeA.m_radius; - this.p_radiusB = shapeB.m_radius; - this.p_type = manifold.type; - copyVec2(this.p_localNormal, manifold.localNormal); - copyVec2(this.p_localPoint, manifold.localPoint); - this.p_pointCount = pointCount; - for (var j = 0; j < SettingsInternal.maxManifoldPoints; ++j) { - this.v_points[j].recycle(); - zeroVec2(this.p_localPoints[j]); - } - for (var j = 0; j < pointCount; ++j) { - var cp = manifold.points[j]; - var vcp = this.v_points[j]; - if (step.warmStarting) { - vcp.normalImpulse = step.dtRatio * cp.normalImpulse; - vcp.tangentImpulse = step.dtRatio * cp.tangentImpulse; - } - copyVec2(this.p_localPoints[j], cp.localPoint); - } - }; - /** - * Get the contact manifold. Do not modify the manifold unless you understand - * the internals of the library. - */ - Contact.prototype.getManifold = function () { - return this.m_manifold; - }; - /** - * Get the world manifold. - */ - Contact.prototype.getWorldManifold = function (worldManifold) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var shapeA = fixtureA.m_shape; - var shapeB = fixtureB.m_shape; - if (shapeA === null || shapeB === null) - return; - return this.m_manifold.getWorldManifold(worldManifold, bodyA.getTransform(), shapeA.m_radius, bodyB.getTransform(), shapeB.m_radius); - }; - /** - * Enable/disable this contact. This can be used inside the pre-solve contact - * listener. The contact is only disabled for the current time step (or sub-step - * in continuous collisions). - */ - Contact.prototype.setEnabled = function (flag) { - this.m_enabledFlag = !!flag; - }; - /** - * Has this contact been disabled? - */ - Contact.prototype.isEnabled = function () { - return this.m_enabledFlag; - }; - /** - * Is this contact touching? - */ - Contact.prototype.isTouching = function () { - return this.m_touchingFlag; - }; - /** - * Get the next contact in the world's contact list. - */ - Contact.prototype.getNext = function () { - return this.m_next; - }; - /** - * Get fixture A in this contact. - */ - Contact.prototype.getFixtureA = function () { - return this.m_fixtureA; - }; - /** - * Get fixture B in this contact. - */ - Contact.prototype.getFixtureB = function () { - return this.m_fixtureB; - }; - /** - * Get the child primitive index for fixture A. - */ - Contact.prototype.getChildIndexA = function () { - return this.m_indexA; - }; - /** - * Get the child primitive index for fixture B. - */ - Contact.prototype.getChildIndexB = function () { - return this.m_indexB; - }; - /** - * Flag this contact for filtering. Filtering will occur the next time step. - */ - Contact.prototype.flagForFiltering = function () { - this.m_filterFlag = true; - }; - /** - * Override the default friction mixture. You can call this in - * "pre-solve" callback. This value persists until set or reset. - */ - Contact.prototype.setFriction = function (friction) { - this.m_friction = friction; - }; - /** - * Get the friction. - */ - Contact.prototype.getFriction = function () { - return this.m_friction; - }; - /** - * Reset the friction mixture to the default value. - */ - Contact.prototype.resetFriction = function () { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction); - }; - /** - * Override the default restitution mixture. You can call this in - * "pre-solve" callback. The value persists until you set or reset. - */ - Contact.prototype.setRestitution = function (restitution) { - this.m_restitution = restitution; - }; - /** - * Get the restitution. - */ - Contact.prototype.getRestitution = function () { - return this.m_restitution; - }; - /** - * Reset the restitution to the default value. - */ - Contact.prototype.resetRestitution = function () { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution); - }; - /** - * Set the desired tangent speed for a conveyor belt behavior. In meters per - * second. - */ - Contact.prototype.setTangentSpeed = function (speed) { - this.m_tangentSpeed = speed; - }; - /** - * Get the desired tangent speed. In meters per second. - */ - Contact.prototype.getTangentSpeed = function () { - return this.m_tangentSpeed; - }; - /** - * Called by Update method, and implemented by subclasses. - */ - Contact.prototype.evaluate = function (manifold, xfA, xfB) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - this.m_evaluateFcn(manifold, xfA, fixtureA, this.m_indexA, xfB, fixtureB, this.m_indexB); - }; - /** - * Updates the contact manifold and touching status. - * - * Note: do not assume the fixture AABBs are overlapping or are valid. - * - * @param listener.beginContact - * @param listener.endContact - * @param listener.preSolve - */ - Contact.prototype.update = function (listener) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var shapeA = fixtureA.m_shape; - var shapeB = fixtureB.m_shape; - if (shapeA === null || shapeB === null) - return; - // Re-enable this contact. - this.m_enabledFlag = true; - var touching = false; - var wasTouching = this.m_touchingFlag; - var sensorA = fixtureA.m_isSensor; - var sensorB = fixtureB.m_isSensor; - var sensor = sensorA || sensorB; - var xfA = bodyA.m_xf; - var xfB = bodyB.m_xf; - // Is this contact a sensor? - if (sensor) { - touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB); - // Sensors don't generate manifolds. - this.m_manifold.pointCount = 0; - } - else { - oldManifold.recycle(); - oldManifold.set(this.m_manifold); - this.m_manifold.recycle(); - this.evaluate(this.m_manifold, xfA, xfB); - touching = this.m_manifold.pointCount > 0; - // Match old contact ids to new contact ids and copy the - // stored impulses to warm start the solver. - for (var i = 0; i < this.m_manifold.pointCount; ++i) { - var nmp = this.m_manifold.points[i]; - nmp.normalImpulse = 0.0; - nmp.tangentImpulse = 0.0; - for (var j = 0; j < oldManifold.pointCount; ++j) { - var omp = oldManifold.points[j]; - if (omp.id.key === nmp.id.key) { - nmp.normalImpulse = omp.normalImpulse; - nmp.tangentImpulse = omp.tangentImpulse; - break; - } - } - } - if (touching !== wasTouching) { - bodyA.setAwake(true); - bodyB.setAwake(true); - } - } - this.m_touchingFlag = touching; - var hasListener = typeof listener === "object" && listener !== null; - if (!wasTouching && touching && hasListener) { - listener.beginContact(this); - } - if (wasTouching && !touching && hasListener) { - listener.endContact(this); - } - if (!sensor && touching && hasListener && oldManifold) { - listener.preSolve(this, oldManifold); +var s_registers = []; +var VelocityConstraintPoint = ( + /** @class */ + function() { + function VelocityConstraintPoint2() { + this.rA = vec2(0, 0); + this.rB = vec2(0, 0); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.normalMass = 0; + this.tangentMass = 0; + this.velocityBias = 0; + } + VelocityConstraintPoint2.prototype.recycle = function() { + zeroVec2(this.rA); + zeroVec2(this.rB); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.normalMass = 0; + this.tangentMass = 0; + this.velocityBias = 0; + }; + return VelocityConstraintPoint2; + }() +); +var cA = vec2(0, 0); +var vA = vec2(0, 0); +var cB = vec2(0, 0); +var vB = vec2(0, 0); +var tangent$1 = vec2(0, 0); +var xfA = transform(0, 0, 0); +var xfB = transform(0, 0, 0); +var pointA = vec2(0, 0); +var pointB = vec2(0, 0); +var clipPoint = vec2(0, 0); +var planePoint$1 = vec2(0, 0); +var rA = vec2(0, 0); +var rB = vec2(0, 0); +var P$1 = vec2(0, 0); +var normal$2 = vec2(0, 0); +var point = vec2(0, 0); +var dv = vec2(0, 0); +var dv1 = vec2(0, 0); +var dv2 = vec2(0, 0); +var b = vec2(0, 0); +var a = vec2(0, 0); +var x = vec2(0, 0); +var d = vec2(0, 0); +var P1 = vec2(0, 0); +var P2 = vec2(0, 0); +var temp$2 = vec2(0, 0); +var Contact = ( + /** @class */ + function() { + function Contact2() { + this.m_nodeA = new ContactEdge(this); + this.m_nodeB = new ContactEdge(this); + this.m_fixtureA = null; + this.m_fixtureB = null; + this.m_indexA = -1; + this.m_indexB = -1; + this.m_evaluateFcn = null; + this.m_manifold = new Manifold(); + this.m_prev = null; + this.m_next = null; + this.m_toi = 1; + this.m_toiCount = 0; + this.m_toiFlag = false; + this.m_friction = 0; + this.m_restitution = 0; + this.m_tangentSpeed = 0; + this.m_enabledFlag = true; + this.m_islandFlag = false; + this.m_touchingFlag = false; + this.m_filterFlag = false; + this.m_bulletHitFlag = false; + this.m_impulse = new ContactImpulse(this); + this.v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; + this.v_normal = vec2(0, 0); + this.v_normalMass = new Mat22(); + this.v_K = new Mat22(); + this.v_pointCount = 0; + this.v_tangentSpeed = 0; + this.v_friction = 0; + this.v_restitution = 0; + this.v_invMassA = 0; + this.v_invMassB = 0; + this.v_invIA = 0; + this.v_invIB = 0; + this.p_localPoints = [vec2(0, 0), vec2(0, 0)]; + this.p_localNormal = vec2(0, 0); + this.p_localPoint = vec2(0, 0); + this.p_localCenterA = vec2(0, 0); + this.p_localCenterB = vec2(0, 0); + this.p_type = ManifoldType.e_unset; + this.p_radiusA = 0; + this.p_radiusB = 0; + this.p_pointCount = 0; + this.p_invMassA = 0; + this.p_invMassB = 0; + this.p_invIA = 0; + this.p_invIB = 0; + } + Contact2.prototype.initialize = function(fA, indexA, fB, indexB, evaluateFcn) { + this.m_fixtureA = fA; + this.m_fixtureB = fB; + this.m_indexA = indexA; + this.m_indexB = indexB; + this.m_evaluateFcn = evaluateFcn; + this.m_friction = mixFriction(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction); + this.m_restitution = mixRestitution(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution); + }; + Contact2.prototype.recycle = function() { + this.m_nodeA.recycle(); + this.m_nodeB.recycle(); + this.m_fixtureA = null; + this.m_fixtureB = null; + this.m_indexA = -1; + this.m_indexB = -1; + this.m_evaluateFcn = null; + this.m_manifold.recycle(); + this.m_prev = null; + this.m_next = null; + this.m_toi = 1; + this.m_toiCount = 0; + this.m_toiFlag = false; + this.m_friction = 0; + this.m_restitution = 0; + this.m_tangentSpeed = 0; + this.m_enabledFlag = true; + this.m_islandFlag = false; + this.m_touchingFlag = false; + this.m_filterFlag = false; + this.m_bulletHitFlag = false; + this.m_impulse.recycle(); + for (var _i = 0, _a2 = this.v_points; _i < _a2.length; _i++) { + var point_1 = _a2[_i]; + point_1.recycle(); + } + zeroVec2(this.v_normal); + this.v_normalMass.setZero(); + this.v_K.setZero(); + this.v_pointCount = 0; + this.v_tangentSpeed = 0; + this.v_friction = 0; + this.v_restitution = 0; + this.v_invMassA = 0; + this.v_invMassB = 0; + this.v_invIA = 0; + this.v_invIB = 0; + for (var _b = 0, _c = this.p_localPoints; _b < _c.length; _b++) { + var point_2 = _c[_b]; + zeroVec2(point_2); + } + zeroVec2(this.p_localNormal); + zeroVec2(this.p_localPoint); + zeroVec2(this.p_localCenterA); + zeroVec2(this.p_localCenterB); + this.p_type = ManifoldType.e_unset; + this.p_radiusA = 0; + this.p_radiusB = 0; + this.p_pointCount = 0; + this.p_invMassA = 0; + this.p_invMassB = 0; + this.p_invIA = 0; + this.p_invIB = 0; + }; + Contact2.prototype.initConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var shapeA = fixtureA.m_shape; + var shapeB = fixtureB.m_shape; + if (shapeA === null || shapeB === null) + return; + var manifold = this.m_manifold; + var pointCount = manifold.pointCount; + this.v_invMassA = bodyA.m_invMass; + this.v_invMassB = bodyB.m_invMass; + this.v_invIA = bodyA.m_invI; + this.v_invIB = bodyB.m_invI; + this.v_friction = this.m_friction; + this.v_restitution = this.m_restitution; + this.v_tangentSpeed = this.m_tangentSpeed; + this.v_pointCount = pointCount; + this.v_K.setZero(); + this.v_normalMass.setZero(); + this.p_invMassA = bodyA.m_invMass; + this.p_invMassB = bodyB.m_invMass; + this.p_invIA = bodyA.m_invI; + this.p_invIB = bodyB.m_invI; + copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter); + copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter); + this.p_radiusA = shapeA.m_radius; + this.p_radiusB = shapeB.m_radius; + this.p_type = manifold.type; + copyVec2(this.p_localNormal, manifold.localNormal); + copyVec2(this.p_localPoint, manifold.localPoint); + this.p_pointCount = pointCount; + for (var j = 0; j < SettingsInternal.maxManifoldPoints; ++j) { + this.v_points[j].recycle(); + zeroVec2(this.p_localPoints[j]); + } + for (var j = 0; j < pointCount; ++j) { + var cp = manifold.points[j]; + var vcp = this.v_points[j]; + if (step.warmStarting) { + vcp.normalImpulse = step.dtRatio * cp.normalImpulse; + vcp.tangentImpulse = step.dtRatio * cp.tangentImpulse; } + copyVec2(this.p_localPoints[j], cp.localPoint); + } }; - Contact.prototype.solvePositionConstraint = function (step) { - return this._solvePositionConstraint(step, null, null); - }; - Contact.prototype.solvePositionConstraintTOI = function (step, toiA, toiB) { - return this._solvePositionConstraint(step, toiA, toiB); - }; - Contact.prototype._solvePositionConstraint = function (step, toiA, toiB) { - var toi = toiA !== null && toiB !== null ? true : false; - var minSeparation = 0.0; - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return minSeparation; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return minSeparation; - bodyA.c_velocity; - bodyB.c_velocity; - var positionA = bodyA.c_position; - var positionB = bodyB.c_position; - var localCenterA = this.p_localCenterA; - var localCenterB = this.p_localCenterB; - var mA = 0.0; - var iA = 0.0; - if (!toi || (bodyA === toiA || bodyA === toiB)) { - mA = this.p_invMassA; - iA = this.p_invIA; - } - var mB = 0.0; - var iB = 0.0; - if (!toi || (bodyB === toiA || bodyB === toiB)) { - mB = this.p_invMassB; - iB = this.p_invIB; - } - copyVec2(cA, positionA.c); - var aA = positionA.a; - copyVec2(cB, positionB.c); - var aB = positionB.a; - // Solve normal constraints - for (var j = 0; j < this.p_pointCount; ++j) { - getTransform(xfA, localCenterA, cA, aA); - getTransform(xfB, localCenterB, cB, aB); - // PositionSolverManifold - var separation = void 0; - switch (this.p_type) { - case ManifoldType.e_circles: { - transformVec2(pointA, xfA, this.p_localPoint); - transformVec2(pointB, xfB, this.p_localPoints[0]); - subVec2(normal$2, pointB, pointA); - normalizeVec2(normal$2); - combine2Vec2(point, 0.5, pointA, 0.5, pointB); - separation = dotVec2(pointB, normal$2) - dotVec2(pointA, normal$2) - this.p_radiusA - this.p_radiusB; - break; - } - case ManifoldType.e_faceA: { - rotVec2(normal$2, xfA.q, this.p_localNormal); - transformVec2(planePoint$1, xfA, this.p_localPoint); - transformVec2(clipPoint, xfB, this.p_localPoints[j]); - separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; - copyVec2(point, clipPoint); - break; - } - case ManifoldType.e_faceB: { - rotVec2(normal$2, xfB.q, this.p_localNormal); - transformVec2(planePoint$1, xfB, this.p_localPoint); - transformVec2(clipPoint, xfA, this.p_localPoints[j]); - separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; - copyVec2(point, clipPoint); - // Ensure normal points from A to B - negVec2(normal$2); - break; - } - // todo: what should we do here? - default: { - return minSeparation; - } - } - subVec2(rA, point, cA); - subVec2(rB, point, cB); - // Track max constraint error. - minSeparation = math_min$4(minSeparation, separation); - var baumgarte = toi ? SettingsInternal.toiBaugarte : SettingsInternal.baumgarte; - var linearSlop = SettingsInternal.linearSlop; - var maxLinearCorrection = SettingsInternal.maxLinearCorrection; - // Prevent large corrections and allow slop. - var C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0.0); - // Compute the effective mass. - var rnA = crossVec2Vec2(rA, normal$2); - var rnB = crossVec2Vec2(rB, normal$2); - var K = mA + mB + iA * rnA * rnA + iB * rnB * rnB; - // Compute normal impulse - var impulse = K > 0.0 ? -C / K : 0.0; - scaleVec2(P$1, impulse, normal$2); - minusScaleVec2(cA, mA, P$1); - aA -= iA * crossVec2Vec2(rA, P$1); - plusScaleVec2(cB, mB, P$1); - aB += iB * crossVec2Vec2(rB, P$1); - } - copyVec2(positionA.c, cA); - positionA.a = aA; - copyVec2(positionB.c, cB); - positionB.a = aB; - return minSeparation; + Contact2.prototype.getManifold = function() { + return this.m_manifold; }; - Contact.prototype.initVelocityConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var velocityA = bodyA.c_velocity; - var velocityB = bodyB.c_velocity; - var positionA = bodyA.c_position; - var positionB = bodyB.c_position; - var radiusA = this.p_radiusA; - var radiusB = this.p_radiusB; - var manifold = this.m_manifold; - var mA = this.v_invMassA; - var mB = this.v_invMassB; - var iA = this.v_invIA; - var iB = this.v_invIB; - var localCenterA = this.p_localCenterA; - var localCenterB = this.p_localCenterB; - copyVec2(cA, positionA.c); - var aA = positionA.a; - copyVec2(vA, velocityA.v); - var wA = velocityA.w; - copyVec2(cB, positionB.c); - var aB = positionB.a; - copyVec2(vB, velocityB.v); - var wB = velocityB.w; - getTransform(xfA, localCenterA, cA, aA); - getTransform(xfB, localCenterB, cB, aB); - worldManifold.recycle(); - manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB); - copyVec2(this.v_normal, worldManifold.normal); - for (var j = 0; j < this.v_pointCount; ++j) { - var vcp = this.v_points[j]; // VelocityConstraintPoint - var wmp = worldManifold.points[j]; - subVec2(vcp.rA, wmp, cA); - subVec2(vcp.rB, wmp, cB); - var rnA = crossVec2Vec2(vcp.rA, this.v_normal); - var rnB = crossVec2Vec2(vcp.rB, this.v_normal); - var kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB; - vcp.normalMass = kNormal > 0.0 ? 1.0 / kNormal : 0.0; - crossVec2Num(tangent$1, this.v_normal, 1.0); - var rtA = crossVec2Vec2(vcp.rA, tangent$1); - var rtB = crossVec2Vec2(vcp.rB, tangent$1); - var kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB; - vcp.tangentMass = kTangent > 0.0 ? 1.0 / kTangent : 0.0; - // Setup a velocity bias for restitution. - vcp.velocityBias = 0.0; - var vRel = 0; - vRel += dotVec2(this.v_normal, vB); - vRel += dotVec2(this.v_normal, crossNumVec2(temp$2, wB, vcp.rB)); - vRel -= dotVec2(this.v_normal, vA); - vRel -= dotVec2(this.v_normal, crossNumVec2(temp$2, wA, vcp.rA)); - if (vRel < -SettingsInternal.velocityThreshold) { - vcp.velocityBias = -this.v_restitution * vRel; - } - } - // If we have two points, then prepare the block solver. - if (this.v_pointCount == 2 && step.blockSolve) { - var vcp1 = this.v_points[0]; // VelocityConstraintPoint - var vcp2 = this.v_points[1]; // VelocityConstraintPoint - var rn1A = crossVec2Vec2(vcp1.rA, this.v_normal); - var rn1B = crossVec2Vec2(vcp1.rB, this.v_normal); - var rn2A = crossVec2Vec2(vcp2.rA, this.v_normal); - var rn2B = crossVec2Vec2(vcp2.rB, this.v_normal); - var k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B; - var k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B; - var k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B; - // Ensure a reasonable condition number. - var k_maxConditionNumber = 1000.0; - if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) { - // K is safe to invert. - this.v_K.ex.setNum(k11, k12); - this.v_K.ey.setNum(k12, k22); - // this.v_normalMass.set(this.v_K.getInverse()); - var a_1 = this.v_K.ex.x; - var b_1 = this.v_K.ey.x; - var c = this.v_K.ex.y; - var d_1 = this.v_K.ey.y; - var det = a_1 * d_1 - b_1 * c; - if (det !== 0.0) { - det = 1.0 / det; - } - this.v_normalMass.ex.x = det * d_1; - this.v_normalMass.ey.x = -det * b_1; - this.v_normalMass.ex.y = -det * c; - this.v_normalMass.ey.y = det * a_1; - } - else { - // The constraints are redundant, just use one. - // TODO_ERIN use deepest? - this.v_pointCount = 1; - } - } - copyVec2(positionA.c, cA); - positionA.a = aA; - copyVec2(velocityA.v, vA); - velocityA.w = wA; - copyVec2(positionB.c, cB); - positionB.a = aB; - copyVec2(velocityB.v, vB); - velocityB.w = wB; - }; - Contact.prototype.warmStartConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var velocityA = bodyA.c_velocity; - var velocityB = bodyB.c_velocity; - bodyA.c_position; - bodyB.c_position; - var mA = this.v_invMassA; - var iA = this.v_invIA; - var mB = this.v_invMassB; - var iB = this.v_invIB; - copyVec2(vA, velocityA.v); - var wA = velocityA.w; - copyVec2(vB, velocityB.v); - var wB = velocityB.w; - copyVec2(normal$2, this.v_normal); - crossVec2Num(tangent$1, normal$2, 1.0); - for (var j = 0; j < this.v_pointCount; ++j) { - var vcp = this.v_points[j]; // VelocityConstraintPoint - combine2Vec2(P$1, vcp.normalImpulse, normal$2, vcp.tangentImpulse, tangent$1); - wA -= iA * crossVec2Vec2(vcp.rA, P$1); - minusScaleVec2(vA, mA, P$1); - wB += iB * crossVec2Vec2(vcp.rB, P$1); - plusScaleVec2(vB, mB, P$1); - } - copyVec2(velocityA.v, vA); - velocityA.w = wA; - copyVec2(velocityB.v, vB); - velocityB.w = wB; - }; - Contact.prototype.storeConstraintImpulses = function (step) { - var manifold = this.m_manifold; - for (var j = 0; j < this.v_pointCount; ++j) { - manifold.points[j].normalImpulse = this.v_points[j].normalImpulse; - manifold.points[j].tangentImpulse = this.v_points[j].tangentImpulse; - } - }; - Contact.prototype.solveVelocityConstraint = function (step) { - var fixtureA = this.m_fixtureA; - var fixtureB = this.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - var velocityA = bodyA.c_velocity; - bodyA.c_position; - var velocityB = bodyB.c_velocity; - bodyB.c_position; - var mA = this.v_invMassA; - var iA = this.v_invIA; - var mB = this.v_invMassB; - var iB = this.v_invIB; - copyVec2(vA, velocityA.v); - var wA = velocityA.w; - copyVec2(vB, velocityB.v); - var wB = velocityB.w; - copyVec2(normal$2, this.v_normal); - crossVec2Num(tangent$1, normal$2, 1.0); - var friction = this.v_friction; - // Solve tangent constraints first because non-penetration is more important - // than friction. - for (var j = 0; j < this.v_pointCount; ++j) { - var vcp = this.v_points[j]; // VelocityConstraintPoint - // Relative velocity at contact - zeroVec2(dv); - plusVec2(dv, vB); - plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); - minusVec2(dv, vA); - minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); - // Compute tangent force - var vt = dotVec2(dv, tangent$1) - this.v_tangentSpeed; - var lambda = vcp.tangentMass * (-vt); - // Clamp the accumulated force - var maxFriction = friction * vcp.normalImpulse; - var newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction); - lambda = newImpulse - vcp.tangentImpulse; - vcp.tangentImpulse = newImpulse; - // Apply contact impulse - scaleVec2(P$1, lambda, tangent$1); - minusScaleVec2(vA, mA, P$1); - wA -= iA * crossVec2Vec2(vcp.rA, P$1); - plusScaleVec2(vB, mB, P$1); - wB += iB * crossVec2Vec2(vcp.rB, P$1); - } - // Solve normal constraints - if (this.v_pointCount == 1 || step.blockSolve == false) { - for (var i = 0; i < this.v_pointCount; ++i) { - var vcp = this.v_points[i]; // VelocityConstraintPoint - // Relative velocity at contact - zeroVec2(dv); - plusVec2(dv, vB); - plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); - minusVec2(dv, vA); - minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); - // Compute normal impulse - var vn = dotVec2(dv, normal$2); - var lambda = -vcp.normalMass * (vn - vcp.velocityBias); - // Clamp the accumulated impulse - var newImpulse = math_max$2(vcp.normalImpulse + lambda, 0.0); - lambda = newImpulse - vcp.normalImpulse; - vcp.normalImpulse = newImpulse; - // Apply contact impulse - scaleVec2(P$1, lambda, normal$2); - minusScaleVec2(vA, mA, P$1); - wA -= iA * crossVec2Vec2(vcp.rA, P$1); - plusScaleVec2(vB, mB, P$1); - wB += iB * crossVec2Vec2(vcp.rB, P$1); - } - } - else { - // Block solver developed in collaboration with Dirk Gregorius (back in - // 01/07 on Box2D_Lite). - // Build the mini LCP for this contact patch - // - // vn = A * x + b, vn >= 0, x >= 0 and vn_i * x_i = 0 with i = 1..2 - // - // A = J * W * JT and J = ( -n, -r1 x n, n, r2 x n ) - // b = vn0 - velocityBias - // - // The system is solved using the "Total enumeration method" (s. Murty). - // The complementary constraint vn_i * x_i - // implies that we must have in any solution either vn_i = 0 or x_i = 0. - // So for the 2D contact problem the cases - // vn1 = 0 and vn2 = 0, x1 = 0 and x2 = 0, x1 = 0 and vn2 = 0, x2 = 0 and - // vn1 = 0 need to be tested. The first valid - // solution that satisfies the problem is chosen. - // - // In order to account of the accumulated impulse 'a' (because of the - // iterative nature of the solver which only requires - // that the accumulated impulse is clamped and not the incremental - // impulse) we change the impulse variable (x_i). - // - // Substitute: - // - // x = a + d - // - // a := old total impulse - // x := new total impulse - // d := incremental impulse - // - // For the current iteration we extend the formula for the incremental - // impulse - // to compute the new total impulse: - // - // vn = A * d + b - // = A * (x - a) + b - // = A * x + b - A * a - // = A * x + b' - // b' = b - A * a; - var vcp1 = this.v_points[0]; // VelocityConstraintPoint - var vcp2 = this.v_points[1]; // VelocityConstraintPoint - setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse); - // Relative velocity at contact - // let dv1 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp1.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp1.rA)); - zeroVec2(dv1); - plusVec2(dv1, vB); - plusVec2(dv1, crossNumVec2(temp$2, wB, vcp1.rB)); - minusVec2(dv1, vA); - minusVec2(dv1, crossNumVec2(temp$2, wA, vcp1.rA)); - // let dv2 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp2.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp2.rA)); - zeroVec2(dv2); - plusVec2(dv2, vB); - plusVec2(dv2, crossNumVec2(temp$2, wB, vcp2.rB)); - minusVec2(dv2, vA); - minusVec2(dv2, crossNumVec2(temp$2, wA, vcp2.rA)); - // Compute normal velocity - var vn1 = dotVec2(dv1, normal$2); - var vn2 = dotVec2(dv2, normal$2); - setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias); - // Compute b' - // b.sub(Mat22.mulVec2(this.v_K, a)); - b.x -= this.v_K.ex.x * a.x + this.v_K.ey.x * a.y; - b.y -= this.v_K.ex.y * a.x + this.v_K.ey.y * a.y; - // NOT_USED(k_errorTol); - while (true) { - // - // Case 1: vn = 0 - // - // 0 = A * x + b' - // - // Solve for x: - // - // x = - inv(A) * b' - // - // const x = Mat22.mulVec2(this.v_normalMass, b).neg(); - zeroVec2(x); - x.x = -(this.v_normalMass.ex.x * b.x + this.v_normalMass.ey.x * b.y); - x.y = -(this.v_normalMass.ex.y * b.x + this.v_normalMass.ey.y * b.y); - if (x.x >= 0.0 && x.y >= 0.0) { - // Get the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // - // Case 2: vn1 = 0 and x2 = 0 - // - // 0 = a11 * x1 + a12 * 0 + b1' - // vn2 = a21 * x1 + a22 * 0 + b2' - // - x.x = -vcp1.normalMass * b.x; - x.y = 0.0; - vn1 = 0.0; - vn2 = this.v_K.ex.y * x.x + b.y; - if (x.x >= 0.0 && vn2 >= 0.0) { - // Get the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // - // Case 3: vn2 = 0 and x1 = 0 - // - // vn1 = a11 * 0 + a12 * x2 + b1' - // 0 = a21 * 0 + a22 * x2 + b2' - // - x.x = 0.0; - x.y = -vcp2.normalMass * b.y; - vn1 = this.v_K.ey.x * x.y + b.x; - vn2 = 0.0; - if (x.y >= 0.0 && vn1 >= 0.0) { - // Resubstitute for the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // - // Case 4: x1 = 0 and x2 = 0 - // - // vn1 = b1 - // vn2 = b2; - // - x.x = 0.0; - x.y = 0.0; - vn1 = b.x; - vn2 = b.y; - if (vn1 >= 0.0 && vn2 >= 0.0) { - // Resubstitute for the incremental impulse - subVec2(d, x, a); - // Apply incremental impulse - scaleVec2(P1, d.x, normal$2); - scaleVec2(P2, d.y, normal$2); - // vA.subCombine(mA, P1, mA, P2); - combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); - wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); - // vB.addCombine(mB, P1, mB, P2); - combine3Vec2(vB, mB, P1, mB, P2, 1, vB); - wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); - // Accumulate - vcp1.normalImpulse = x.x; - vcp2.normalImpulse = x.y; - break; - } - // No solution, give up. This is hit sometimes, but it doesn't seem to - // matter. - break; - } - } - copyVec2(velocityA.v, vA); - velocityA.w = wA; - copyVec2(velocityB.v, vB); - velocityB.w = wB; - }; - /** @internal */ - Contact.addType = function (type1, type2, callback) { - s_registers[type1] = s_registers[type1] || {}; - s_registers[type1][type2] = callback; - }; - /** @internal */ - Contact.create = function (fixtureA, indexA, fixtureB, indexB) { - var typeA = fixtureA.m_shape.m_type; - var typeB = fixtureB.m_shape.m_type; - var contact = contactPool.allocate(); - var evaluateFcn; - if (evaluateFcn = s_registers[typeA] && s_registers[typeA][typeB]) { - contact.initialize(fixtureA, indexA, fixtureB, indexB, evaluateFcn); - } - else if (evaluateFcn = s_registers[typeB] && s_registers[typeB][typeA]) { - contact.initialize(fixtureB, indexB, fixtureA, indexA, evaluateFcn); - } - else { - return null; - } - // Contact creation may swap fixtures. - fixtureA = contact.m_fixtureA; - fixtureB = contact.m_fixtureB; - indexA = contact.getChildIndexA(); - indexB = contact.getChildIndexB(); - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - // Connect to body A - contact.m_nodeA.contact = contact; - contact.m_nodeA.other = bodyB; - contact.m_nodeA.prev = null; - contact.m_nodeA.next = bodyA.m_contactList; - if (bodyA.m_contactList != null) { - bodyA.m_contactList.prev = contact.m_nodeA; - } - bodyA.m_contactList = contact.m_nodeA; - // Connect to body B - contact.m_nodeB.contact = contact; - contact.m_nodeB.other = bodyA; - contact.m_nodeB.prev = null; - contact.m_nodeB.next = bodyB.m_contactList; - if (bodyB.m_contactList != null) { - bodyB.m_contactList.prev = contact.m_nodeB; - } - bodyB.m_contactList = contact.m_nodeB; - // Wake up the bodies - if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) { - bodyA.setAwake(true); - bodyB.setAwake(true); - } - return contact; - }; - /** @internal */ - Contact.destroy = function (contact, listener) { - var fixtureA = contact.m_fixtureA; - var fixtureB = contact.m_fixtureB; - if (fixtureA === null || fixtureB === null) - return; - var bodyA = fixtureA.m_body; - var bodyB = fixtureB.m_body; - if (bodyA === null || bodyB === null) - return; - if (contact.isTouching()) { - listener.endContact(contact); - } - // Remove from body 1 - if (contact.m_nodeA.prev) { - contact.m_nodeA.prev.next = contact.m_nodeA.next; - } - if (contact.m_nodeA.next) { - contact.m_nodeA.next.prev = contact.m_nodeA.prev; - } - if (contact.m_nodeA == bodyA.m_contactList) { - bodyA.m_contactList = contact.m_nodeA.next; - } - // Remove from body 2 - if (contact.m_nodeB.prev) { - contact.m_nodeB.prev.next = contact.m_nodeB.next; - } - if (contact.m_nodeB.next) { - contact.m_nodeB.next.prev = contact.m_nodeB.prev; - } - if (contact.m_nodeB == bodyB.m_contactList) { - bodyB.m_contactList = contact.m_nodeB.next; - } - if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) { - bodyA.setAwake(true); - bodyB.setAwake(true); - } - // const typeA = fixtureA.getType(); - // const typeB = fixtureB.getType(); - // const destroyFcn = s_registers[typeA][typeB].destroyFcn; - // if (typeof destroyFcn === 'function') { - // destroyFcn(contact); - // } - contactPool.release(contact); + Contact2.prototype.getWorldManifold = function(worldManifold2) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var shapeA = fixtureA.m_shape; + var shapeB = fixtureB.m_shape; + if (shapeA === null || shapeB === null) + return; + return this.m_manifold.getWorldManifold(worldManifold2, bodyA.getTransform(), shapeA.m_radius, bodyB.getTransform(), shapeB.m_radius); }; - return Contact; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var DEFAULTS$b = { - gravity: Vec2.zero(), - allowSleep: true, - warmStarting: true, - continuousPhysics: true, - subStepping: false, - blockSolve: true, - velocityIterations: 8, - positionIterations: 3 -}; -var World = /** @class */ (function () { - /** - * @param def World definition or gravity vector. - */ - function World(def) { - if (!(this instanceof World)) { - return new World(def); - } - this.s_step = new TimeStep(); - if (!def) { - def = {}; - } - else if (Vec2.isValid(def)) { - def = { gravity: def }; - } - def = options(def, DEFAULTS$b); - this.m_solver = new Solver(this); - this.m_broadPhase = new BroadPhase(); - this.m_contactList = null; - this.m_contactCount = 0; - this.m_bodyList = null; - this.m_bodyCount = 0; - this.m_jointList = null; - this.m_jointCount = 0; - this.m_stepComplete = true; - this.m_allowSleep = def.allowSleep; - this.m_gravity = Vec2.clone(def.gravity); - this.m_clearForces = true; - this.m_newFixture = false; - this.m_locked = false; - // These are for debugging the solver. - this.m_warmStarting = def.warmStarting; - this.m_continuousPhysics = def.continuousPhysics; - this.m_subStepping = def.subStepping; - this.m_blockSolve = def.blockSolve; - this.m_velocityIterations = def.velocityIterations; - this.m_positionIterations = def.positionIterations; - this.m_t = 0; - } - /** @internal */ - World.prototype._serialize = function () { - var bodies = []; - var joints = []; - for (var b = this.getBodyList(); b; b = b.getNext()) { - bodies.push(b); - } - for (var j = this.getJointList(); j; j = j.getNext()) { - // @ts-ignore - if (typeof j._serialize === "function") { - joints.push(j); - } - } - return { - gravity: this.m_gravity, - bodies: bodies, - joints: joints, - }; + Contact2.prototype.setEnabled = function(flag) { + this.m_enabledFlag = !!flag; }; - /** @internal */ - World._deserialize = function (data, context, restore) { - if (!data) { - return new World(); - } - var world = new World(data.gravity); - if (data.bodies) { - for (var i = data.bodies.length - 1; i >= 0; i -= 1) { - world._addBody(restore(Body, data.bodies[i], world)); - } - } - if (data.joints) { - for (var i = data.joints.length - 1; i >= 0; i--) { - world.createJoint(restore(Joint, data.joints[i], world)); - } - } - return world; - }; - /** - * Get the world body list. With the returned body, use Body.getNext to get the - * next body in the world list. A null body indicates the end of the list. - * - * @return the head of the world body list. - */ - World.prototype.getBodyList = function () { - return this.m_bodyList; - }; - /** - * Get the world joint list. With the returned joint, use Joint.getNext to get - * the next joint in the world list. A null joint indicates the end of the list. - * - * @return the head of the world joint list. - */ - World.prototype.getJointList = function () { - return this.m_jointList; - }; - /** - * Get the world contact list. With the returned contact, use Contact.getNext to - * get the next contact in the world list. A null contact indicates the end of - * the list. - * - * Warning: contacts are created and destroyed in the middle of a time step. - * Use ContactListener to avoid missing contacts. - * - * @return the head of the world contact list. - */ - World.prototype.getContactList = function () { - return this.m_contactList; - }; - World.prototype.getBodyCount = function () { - return this.m_bodyCount; - }; - World.prototype.getJointCount = function () { - return this.m_jointCount; - }; - /** - * Get the number of contacts (each may have 0 or more contact points). - */ - World.prototype.getContactCount = function () { - return this.m_contactCount; - }; - /** - * Change the global gravity vector. - */ - World.prototype.setGravity = function (gravity) { - this.m_gravity.set(gravity); - }; - /** - * Get the global gravity vector. - */ - World.prototype.getGravity = function () { - return this.m_gravity; - }; - /** - * Is the world locked (in the middle of a time step). - */ - World.prototype.isLocked = function () { - return this.m_locked; - }; - /** - * Enable/disable sleep. - */ - World.prototype.setAllowSleeping = function (flag) { - if (flag == this.m_allowSleep) { - return; - } - this.m_allowSleep = flag; - if (this.m_allowSleep == false) { - for (var b = this.m_bodyList; b; b = b.m_next) { - b.setAwake(true); - } - } + Contact2.prototype.isEnabled = function() { + return this.m_enabledFlag; }; - World.prototype.getAllowSleeping = function () { - return this.m_allowSleep; - }; - /** - * Enable/disable warm starting. For testing. - */ - World.prototype.setWarmStarting = function (flag) { - this.m_warmStarting = flag; - }; - World.prototype.getWarmStarting = function () { - return this.m_warmStarting; - }; - /** - * Enable/disable continuous physics. For testing. - */ - World.prototype.setContinuousPhysics = function (flag) { - this.m_continuousPhysics = flag; - }; - World.prototype.getContinuousPhysics = function () { - return this.m_continuousPhysics; - }; - /** - * Enable/disable single stepped continuous physics. For testing. - */ - World.prototype.setSubStepping = function (flag) { - this.m_subStepping = flag; - }; - World.prototype.getSubStepping = function () { - return this.m_subStepping; - }; - /** - * Set flag to control automatic clearing of forces after each time step. - */ - World.prototype.setAutoClearForces = function (flag) { - this.m_clearForces = flag; - }; - /** - * Get the flag that controls automatic clearing of forces after each time step. - */ - World.prototype.getAutoClearForces = function () { - return this.m_clearForces; - }; - /** - * Manually clear the force buffer on all bodies. By default, forces are cleared - * automatically after each call to step. The default behavior is modified by - * calling setAutoClearForces. The purpose of this function is to support - * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step - * under a variable frame-rate. When you perform sub-stepping you will disable - * auto clearing of forces and instead call clearForces after all sub-steps are - * complete in one pass of your game loop. - * - * See {@link World.setAutoClearForces} - */ - World.prototype.clearForces = function () { - for (var body = this.m_bodyList; body; body = body.getNext()) { - body.m_force.setZero(); - body.m_torque = 0.0; - } - }; - /** - * Query the world for all fixtures that potentially overlap the provided AABB. - * - * @param aabb The query box. - * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query. - */ - World.prototype.queryAABB = function (aabb, callback) { - var broadPhase = this.m_broadPhase; - this.m_broadPhase.query(aabb, function (proxyId) { - var proxy = broadPhase.getUserData(proxyId); - return callback(proxy.fixture); - }); - }; - /** - * Ray-cast the world for all fixtures in the path of the ray. Your callback - * controls whether you get the closest point, any point, or n-points. The - * ray-cast ignores shapes that contain the starting point. - * - * @param point1 The ray starting point - * @param point2 The ray ending point - * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value. - */ - World.prototype.rayCast = function (point1, point2, callback) { - var broadPhase = this.m_broadPhase; - this.m_broadPhase.rayCast({ - maxFraction: 1.0, - p1: point1, - p2: point2 - }, function (input, proxyId) { - var proxy = broadPhase.getUserData(proxyId); - var fixture = proxy.fixture; - var index = proxy.childIndex; - // @ts-ignore - var output = {}; // TODO GC - var hit = fixture.rayCast(output, input, index); - if (hit) { - var fraction = output.fraction; - var point = Vec2.add(Vec2.mulNumVec2((1.0 - fraction), input.p1), Vec2.mulNumVec2(fraction, input.p2)); - return callback(fixture, point, output.normal, fraction); - } - return input.maxFraction; - }); - }; - /** - * Get the number of broad-phase proxies. - */ - World.prototype.getProxyCount = function () { - return this.m_broadPhase.getProxyCount(); - }; - /** - * Get the height of broad-phase dynamic tree. - */ - World.prototype.getTreeHeight = function () { - return this.m_broadPhase.getTreeHeight(); - }; - /** - * Get the balance of broad-phase dynamic tree. - */ - World.prototype.getTreeBalance = function () { - return this.m_broadPhase.getTreeBalance(); - }; - /** - * Get the quality metric of broad-phase dynamic tree. The smaller the better. - * The minimum is 1. - */ - World.prototype.getTreeQuality = function () { - return this.m_broadPhase.getTreeQuality(); - }; - /** - * Shift the world origin. Useful for large worlds. The body shift formula is: - * position -= newOrigin - * - * @param newOrigin The new origin with respect to the old origin - */ - World.prototype.shiftOrigin = function (newOrigin) { - if (this.m_locked) { - return; - } - for (var b = this.m_bodyList; b; b = b.m_next) { - b.m_xf.p.sub(newOrigin); - b.m_sweep.c0.sub(newOrigin); - b.m_sweep.c.sub(newOrigin); - } - for (var j = this.m_jointList; j; j = j.m_next) { - j.shiftOrigin(newOrigin); - } - this.m_broadPhase.shiftOrigin(newOrigin); + Contact2.prototype.isTouching = function() { + return this.m_touchingFlag; }; - /** @internal Used for deserialize. */ - World.prototype._addBody = function (body) { - if (this.isLocked()) { - return; - } - // Add to world doubly linked list. - body.m_prev = null; - body.m_next = this.m_bodyList; - if (this.m_bodyList) { - this.m_bodyList.m_prev = body; - } - this.m_bodyList = body; - ++this.m_bodyCount; - }; - // tslint:disable-next-line:typedef - World.prototype.createBody = function (arg1, arg2) { - if (this.isLocked()) { - return null; - } - var def = {}; - if (!arg1) ; - else if (Vec2.isValid(arg1)) { - def = { position: arg1, angle: arg2 }; - } - else if (typeof arg1 === "object") { - def = arg1; - } - var body = new Body(this, def); - this._addBody(body); - return body; - }; - // tslint:disable-next-line:typedef - World.prototype.createDynamicBody = function (arg1, arg2) { - var def = {}; - if (!arg1) ; - else if (Vec2.isValid(arg1)) { - def = { position: arg1, angle: arg2 }; - } - else if (typeof arg1 === "object") { - def = arg1; - } - def.type = "dynamic"; - return this.createBody(def); - }; - // tslint:disable-next-line:typedef - World.prototype.createKinematicBody = function (arg1, arg2) { - var def = {}; - if (!arg1) ; - else if (Vec2.isValid(arg1)) { - def = { position: arg1, angle: arg2 }; - } - else if (typeof arg1 === "object") { - def = arg1; - } - def.type = "kinematic"; - return this.createBody(def); - }; - /** - * Destroy a rigid body given a definition. No reference to the definition is - * retained. - * - * Warning: This automatically deletes all associated shapes and joints. - * - * Warning: This function is locked during callbacks. - */ - World.prototype.destroyBody = function (b) { - if (this.isLocked()) { - return; - } - if (b.m_destroyed) { - return false; - } - // Delete the attached joints. - var je = b.m_jointList; - while (je) { - var je0 = je; - je = je.next; - this.publish("remove-joint", je0.joint); - this.destroyJoint(je0.joint); - b.m_jointList = je; - } - b.m_jointList = null; - // Delete the attached contacts. - var ce = b.m_contactList; - while (ce) { - var ce0 = ce; - ce = ce.next; - this.destroyContact(ce0.contact); - b.m_contactList = ce; - } - b.m_contactList = null; - // Delete the attached fixtures. This destroys broad-phase proxies. - var f = b.m_fixtureList; - while (f) { - var f0 = f; - f = f.m_next; - this.publish("remove-fixture", f0); - f0.destroyProxies(this.m_broadPhase); - b.m_fixtureList = f; - } - b.m_fixtureList = null; - // Remove world body list. - if (b.m_prev) { - b.m_prev.m_next = b.m_next; - } - if (b.m_next) { - b.m_next.m_prev = b.m_prev; - } - if (b == this.m_bodyList) { - this.m_bodyList = b.m_next; - } - b.m_destroyed = true; - --this.m_bodyCount; - this.publish("remove-body", b); - return true; + Contact2.prototype.getNext = function() { + return this.m_next; }; - /** - * Create a joint to constrain bodies together. No reference to the definition - * is retained. This may cause the connected bodies to cease colliding. - * - * Warning: This function is locked during callbacks. - */ - World.prototype.createJoint = function (joint) { - if (this.isLocked()) { - return null; - } - // Connect to the world list. - joint.m_prev = null; - joint.m_next = this.m_jointList; - if (this.m_jointList) { - this.m_jointList.m_prev = joint; - } - this.m_jointList = joint; - ++this.m_jointCount; - // Connect to the bodies' doubly linked lists. - joint.m_edgeA.joint = joint; - joint.m_edgeA.other = joint.m_bodyB; - joint.m_edgeA.prev = null; - joint.m_edgeA.next = joint.m_bodyA.m_jointList; - if (joint.m_bodyA.m_jointList) - joint.m_bodyA.m_jointList.prev = joint.m_edgeA; - joint.m_bodyA.m_jointList = joint.m_edgeA; - joint.m_edgeB.joint = joint; - joint.m_edgeB.other = joint.m_bodyA; - joint.m_edgeB.prev = null; - joint.m_edgeB.next = joint.m_bodyB.m_jointList; - if (joint.m_bodyB.m_jointList) - joint.m_bodyB.m_jointList.prev = joint.m_edgeB; - joint.m_bodyB.m_jointList = joint.m_edgeB; - // If the joint prevents collisions, then flag any contacts for filtering. - if (joint.m_collideConnected == false) { - for (var edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) { - if (edge.other == joint.m_bodyA) { - // Flag the contact for filtering at the next time step (where either - // body is awake). - edge.contact.flagForFiltering(); - } - } - } - // Note: creating a joint doesn't wake the bodies. - return joint; + Contact2.prototype.getFixtureA = function() { + return this.m_fixtureA; }; - /** - * Destroy a joint. This may cause the connected bodies to begin colliding. - * Warning: This function is locked during callbacks. - */ - World.prototype.destroyJoint = function (joint) { - if (this.isLocked()) { - return; - } - // Remove from the doubly linked list. - if (joint.m_prev) { - joint.m_prev.m_next = joint.m_next; - } - if (joint.m_next) { - joint.m_next.m_prev = joint.m_prev; - } - if (joint == this.m_jointList) { - this.m_jointList = joint.m_next; - } - // Disconnect from bodies. - var bodyA = joint.m_bodyA; - var bodyB = joint.m_bodyB; - // Wake up connected bodies. - bodyA.setAwake(true); - bodyB.setAwake(true); - // Remove from body 1. - if (joint.m_edgeA.prev) { - joint.m_edgeA.prev.next = joint.m_edgeA.next; - } - if (joint.m_edgeA.next) { - joint.m_edgeA.next.prev = joint.m_edgeA.prev; - } - if (joint.m_edgeA == bodyA.m_jointList) { - bodyA.m_jointList = joint.m_edgeA.next; - } - joint.m_edgeA.prev = null; - joint.m_edgeA.next = null; - // Remove from body 2 - if (joint.m_edgeB.prev) { - joint.m_edgeB.prev.next = joint.m_edgeB.next; - } - if (joint.m_edgeB.next) { - joint.m_edgeB.next.prev = joint.m_edgeB.prev; - } - if (joint.m_edgeB == bodyB.m_jointList) { - bodyB.m_jointList = joint.m_edgeB.next; - } - joint.m_edgeB.prev = null; - joint.m_edgeB.next = null; - --this.m_jointCount; - // If the joint prevents collisions, then flag any contacts for filtering. - if (joint.m_collideConnected == false) { - var edge = bodyB.getContactList(); - while (edge) { - if (edge.other == bodyA) { - // Flag the contact for filtering at the next time step (where either - // body is awake). - edge.contact.flagForFiltering(); - } - edge = edge.next; - } - } - this.publish("remove-joint", joint); - }; - /** - * Take a time step. This performs collision detection, integration, and - * constraint solution. - * - * Broad-phase, narrow-phase, solve and solve time of impacts. - * - * @param timeStep Time step, this should not vary. - */ - World.prototype.step = function (timeStep, velocityIterations, positionIterations) { - this.publish("pre-step", timeStep); - if ((velocityIterations | 0) !== velocityIterations) { - // TODO: remove this in future - velocityIterations = 0; - } - velocityIterations = velocityIterations || this.m_velocityIterations; - positionIterations = positionIterations || this.m_positionIterations; - // If new fixtures were added, we need to find the new contacts. - if (this.m_newFixture) { - this.findNewContacts(); - this.m_newFixture = false; - } - this.m_locked = true; - this.s_step.reset(timeStep); - this.s_step.velocityIterations = velocityIterations; - this.s_step.positionIterations = positionIterations; - this.s_step.warmStarting = this.m_warmStarting; - this.s_step.blockSolve = this.m_blockSolve; - // Update contacts. This is where some contacts are destroyed. - this.updateContacts(); - // Integrate velocities, solve velocity constraints, and integrate positions. - if (this.m_stepComplete && timeStep > 0.0) { - this.m_solver.solveWorld(this.s_step); - // Synchronize fixtures, check for out of range bodies. - for (var b = this.m_bodyList; b; b = b.getNext()) { - // If a body was not in an island then it did not move. - if (b.m_islandFlag == false) { - continue; - } - if (b.isStatic()) { - continue; - } - // Update fixtures (for broad-phase). - b.synchronizeFixtures(); - } - // Look for new contacts. - this.findNewContacts(); - } - // Handle TOI events. - if (this.m_continuousPhysics && timeStep > 0.0) { - this.m_solver.solveWorldTOI(this.s_step); - } - if (this.m_clearForces) { - this.clearForces(); - } - this.m_locked = false; - this.publish("post-step", timeStep); - }; - /** - * @internal - * Call this method to find new contacts. - */ - World.prototype.findNewContacts = function () { - var _this = this; - this.m_broadPhase.updatePairs(function (proxyA, proxyB) { return _this.createContact(proxyA, proxyB); }); - }; - /** - * @internal - * Callback for broad-phase. - */ - World.prototype.createContact = function (proxyA, proxyB) { - var fixtureA = proxyA.fixture; - var fixtureB = proxyB.fixture; - var indexA = proxyA.childIndex; - var indexB = proxyB.childIndex; - var bodyA = fixtureA.getBody(); - var bodyB = fixtureB.getBody(); - // Are the fixtures on the same body? - if (bodyA == bodyB) { - return; - } - // TODO_ERIN use a hash table to remove a potential bottleneck when both - // bodies have a lot of contacts. - // Does a contact already exist? - var edge = bodyB.getContactList(); // ContactEdge - while (edge) { - if (edge.other == bodyA) { - var fA = edge.contact.getFixtureA(); - var fB = edge.contact.getFixtureB(); - var iA = edge.contact.getChildIndexA(); - var iB = edge.contact.getChildIndexB(); - if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) { - // A contact already exists. - return; - } - if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) { - // A contact already exists. - return; - } - } - edge = edge.next; - } - if (bodyB.shouldCollide(bodyA) == false) { - return; - } - if (fixtureB.shouldCollide(fixtureA) == false) { - return; - } - // Call the factory. - var contact = Contact.create(fixtureA, indexA, fixtureB, indexB); - if (contact == null) { - return; - } - // Insert into the world. - contact.m_prev = null; - if (this.m_contactList != null) { - contact.m_next = this.m_contactList; - this.m_contactList.m_prev = contact; - } - this.m_contactList = contact; - ++this.m_contactCount; - }; - /** - * @internal - * Removes old non-overlapping contacts, applies filters and updates contacts. - */ - World.prototype.updateContacts = function () { - // Update awake contacts. - var c; - var next_c = this.m_contactList; - while (c = next_c) { - next_c = c.getNext(); - var fixtureA = c.getFixtureA(); - var fixtureB = c.getFixtureB(); - var indexA = c.getChildIndexA(); - var indexB = c.getChildIndexB(); - var bodyA = fixtureA.getBody(); - var bodyB = fixtureB.getBody(); - // Is this contact flagged for filtering? - if (c.m_filterFlag) { - if (bodyB.shouldCollide(bodyA) == false) { - this.destroyContact(c); - continue; - } - if (fixtureB.shouldCollide(fixtureA) == false) { - this.destroyContact(c); - continue; - } - // Clear the filtering flag. - c.m_filterFlag = false; - } - var activeA = bodyA.isAwake() && !bodyA.isStatic(); - var activeB = bodyB.isAwake() && !bodyB.isStatic(); - // At least one body must be awake and it must be dynamic or kinematic. - if (activeA == false && activeB == false) { - continue; - } - var proxyIdA = fixtureA.m_proxies[indexA].proxyId; - var proxyIdB = fixtureB.m_proxies[indexB].proxyId; - var overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB); - // Here we destroy contacts that cease to overlap in the broad-phase. - if (overlap == false) { - this.destroyContact(c); - continue; - } - // The contact persists. - c.update(this); - } + Contact2.prototype.getFixtureB = function() { + return this.m_fixtureB; }; - /** @internal */ - World.prototype.destroyContact = function (contact) { - // Remove from the world. - if (contact.m_prev) { - contact.m_prev.m_next = contact.m_next; - } - if (contact.m_next) { - contact.m_next.m_prev = contact.m_prev; - } - if (contact == this.m_contactList) { - this.m_contactList = contact.m_next; - } - Contact.destroy(contact, this); - --this.m_contactCount; + Contact2.prototype.getChildIndexA = function() { + return this.m_indexA; }; - /** - * Register an event listener. - */ - // tslint:disable-next-line:typedef - World.prototype.on = function (name, listener) { - if (typeof name !== "string" || typeof listener !== "function") { - return this; - } - if (!this._listeners) { - this._listeners = {}; - } - if (!this._listeners[name]) { - this._listeners[name] = []; - } - this._listeners[name].push(listener); - return this; + Contact2.prototype.getChildIndexB = function() { + return this.m_indexB; }; - /** - * Remove an event listener. - */ - // tslint:disable-next-line:typedef - World.prototype.off = function (name, listener) { - if (typeof name !== "string" || typeof listener !== "function") { - return this; - } - var listeners = this._listeners && this._listeners[name]; - if (!listeners || !listeners.length) { - return this; - } - var index = listeners.indexOf(listener); - if (index >= 0) { - listeners.splice(index, 1); - } - return this; + Contact2.prototype.flagForFiltering = function() { + this.m_filterFlag = true; }; - World.prototype.publish = function (name, arg1, arg2, arg3) { - var listeners = this._listeners && this._listeners[name]; - if (!listeners || !listeners.length) { - return 0; - } - for (var l = 0; l < listeners.length; l++) { - listeners[l].call(this, arg1, arg2, arg3); - } - return listeners.length; + Contact2.prototype.setFriction = function(friction) { + this.m_friction = friction; }; - /** @internal */ - World.prototype.beginContact = function (contact) { - this.publish("begin-contact", contact); + Contact2.prototype.getFriction = function() { + return this.m_friction; }; - /** @internal */ - World.prototype.endContact = function (contact) { - this.publish("end-contact", contact); + Contact2.prototype.resetFriction = function() { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction); }; - /** @internal */ - World.prototype.preSolve = function (contact, oldManifold) { - this.publish("pre-solve", contact, oldManifold); + Contact2.prototype.setRestitution = function(restitution) { + this.m_restitution = restitution; }; - /** @internal */ - World.prototype.postSolve = function (contact, impulse) { - this.publish("post-solve", contact, impulse); + Contact2.prototype.getRestitution = function() { + return this.m_restitution; }; - return World; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -var Vec3 = /** @class */ (function () { - function Vec3(x, y, z) { - if (!(this instanceof Vec3)) { - return new Vec3(x, y, z); - } - if (typeof x === "undefined") { - this.x = 0; - this.y = 0; - this.z = 0; - } - else if (typeof x === "object") { - this.x = x.x; - this.y = x.y; - this.z = x.z; - } - else { - this.x = x; - this.y = y; - this.z = z; - } - } - /** @internal */ - Vec3.prototype._serialize = function () { - return { - x: this.x, - y: this.y, - z: this.z - }; + Contact2.prototype.resetRestitution = function() { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution); }; - /** @internal */ - Vec3._deserialize = function (data) { - var obj = Object.create(Vec3.prototype); - obj.x = data.x; - obj.y = data.y; - obj.z = data.z; - return obj; - }; - /** @hidden */ - Vec3.neo = function (x, y, z) { - var obj = Object.create(Vec3.prototype); - obj.x = x; - obj.y = y; - obj.z = z; - return obj; - }; - Vec3.zero = function () { - var obj = Object.create(Vec3.prototype); - obj.x = 0; - obj.y = 0; - obj.z = 0; - return obj; - }; - Vec3.clone = function (v) { - return Vec3.neo(v.x, v.y, v.z); - }; - /** @hidden */ - Vec3.prototype.toString = function () { - return JSON.stringify(this); - }; - /** Does this vector contain finite coordinates? */ - Vec3.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Number.isFinite(obj.x) && Number.isFinite(obj.y) && Number.isFinite(obj.z); + Contact2.prototype.setTangentSpeed = function(speed) { + this.m_tangentSpeed = speed; }; - Vec3.assert = function (o) { + Contact2.prototype.getTangentSpeed = function() { + return this.m_tangentSpeed; }; - Vec3.prototype.setZero = function () { - this.x = 0.0; - this.y = 0.0; - this.z = 0.0; - return this; + Contact2.prototype.evaluate = function(manifold, xfA2, xfB2) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + this.m_evaluateFcn(manifold, xfA2, fixtureA, this.m_indexA, xfB2, fixtureB, this.m_indexB); }; - Vec3.prototype.set = function (x, y, z) { - this.x = x; - this.y = y; - this.z = z; - return this; + Contact2.prototype.update = function(listener) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var shapeA = fixtureA.m_shape; + var shapeB = fixtureB.m_shape; + if (shapeA === null || shapeB === null) + return; + this.m_enabledFlag = true; + var touching = false; + var wasTouching = this.m_touchingFlag; + var sensorA = fixtureA.m_isSensor; + var sensorB = fixtureB.m_isSensor; + var sensor = sensorA || sensorB; + var xfA2 = bodyA.m_xf; + var xfB2 = bodyB.m_xf; + if (sensor) { + touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA2, xfB2); + this.m_manifold.pointCount = 0; + } else { + oldManifold.recycle(); + oldManifold.set(this.m_manifold); + this.m_manifold.recycle(); + this.evaluate(this.m_manifold, xfA2, xfB2); + touching = this.m_manifold.pointCount > 0; + for (var i = 0; i < this.m_manifold.pointCount; ++i) { + var nmp = this.m_manifold.points[i]; + nmp.normalImpulse = 0; + nmp.tangentImpulse = 0; + for (var j = 0; j < oldManifold.pointCount; ++j) { + var omp = oldManifold.points[j]; + if (omp.id.key === nmp.id.key) { + nmp.normalImpulse = omp.normalImpulse; + nmp.tangentImpulse = omp.tangentImpulse; + break; + } + } + } + if (touching !== wasTouching) { + bodyA.setAwake(true); + bodyB.setAwake(true); + } + } + this.m_touchingFlag = touching; + var hasListener = typeof listener === "object" && listener !== null; + if (!wasTouching && touching && hasListener) { + listener.beginContact(this); + } + if (wasTouching && !touching && hasListener) { + listener.endContact(this); + } + if (!sensor && touching && hasListener && oldManifold) { + listener.preSolve(this, oldManifold); + } + }; + Contact2.prototype.solvePositionConstraint = function(step) { + return this._solvePositionConstraint(step, null, null); + }; + Contact2.prototype.solvePositionConstraintTOI = function(step, toiA, toiB) { + return this._solvePositionConstraint(step, toiA, toiB); + }; + Contact2.prototype._solvePositionConstraint = function(step, toiA, toiB) { + var toi = toiA !== null && toiB !== null ? true : false; + var minSeparation = 0; + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return minSeparation; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return minSeparation; + bodyA.c_velocity; + bodyB.c_velocity; + var positionA = bodyA.c_position; + var positionB = bodyB.c_position; + var localCenterA = this.p_localCenterA; + var localCenterB = this.p_localCenterB; + var mA = 0; + var iA = 0; + if (!toi || (bodyA === toiA || bodyA === toiB)) { + mA = this.p_invMassA; + iA = this.p_invIA; + } + var mB = 0; + var iB = 0; + if (!toi || (bodyB === toiA || bodyB === toiB)) { + mB = this.p_invMassB; + iB = this.p_invIB; + } + copyVec2(cA, positionA.c); + var aA = positionA.a; + copyVec2(cB, positionB.c); + var aB = positionB.a; + for (var j = 0; j < this.p_pointCount; ++j) { + getTransform(xfA, localCenterA, cA, aA); + getTransform(xfB, localCenterB, cB, aB); + var separation = void 0; + switch (this.p_type) { + case ManifoldType.e_circles: { + transformVec2(pointA, xfA, this.p_localPoint); + transformVec2(pointB, xfB, this.p_localPoints[0]); + subVec2(normal$2, pointB, pointA); + normalizeVec2(normal$2); + combine2Vec2(point, 0.5, pointA, 0.5, pointB); + separation = dotVec2(pointB, normal$2) - dotVec2(pointA, normal$2) - this.p_radiusA - this.p_radiusB; + break; + } + case ManifoldType.e_faceA: { + rotVec2(normal$2, xfA.q, this.p_localNormal); + transformVec2(planePoint$1, xfA, this.p_localPoint); + transformVec2(clipPoint, xfB, this.p_localPoints[j]); + separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; + copyVec2(point, clipPoint); + break; + } + case ManifoldType.e_faceB: { + rotVec2(normal$2, xfB.q, this.p_localNormal); + transformVec2(planePoint$1, xfB, this.p_localPoint); + transformVec2(clipPoint, xfA, this.p_localPoints[j]); + separation = dotVec2(clipPoint, normal$2) - dotVec2(planePoint$1, normal$2) - this.p_radiusA - this.p_radiusB; + copyVec2(point, clipPoint); + negVec2(normal$2); + break; + } + default: { + return minSeparation; + } + } + subVec2(rA, point, cA); + subVec2(rB, point, cB); + minSeparation = math_min$4(minSeparation, separation); + var baumgarte = toi ? SettingsInternal.toiBaugarte : SettingsInternal.baumgarte; + var linearSlop = SettingsInternal.linearSlop; + var maxLinearCorrection = SettingsInternal.maxLinearCorrection; + var C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0); + var rnA = crossVec2Vec2(rA, normal$2); + var rnB = crossVec2Vec2(rB, normal$2); + var K = mA + mB + iA * rnA * rnA + iB * rnB * rnB; + var impulse = K > 0 ? -C / K : 0; + scaleVec2(P$1, impulse, normal$2); + minusScaleVec2(cA, mA, P$1); + aA -= iA * crossVec2Vec2(rA, P$1); + plusScaleVec2(cB, mB, P$1); + aB += iB * crossVec2Vec2(rB, P$1); + } + copyVec2(positionA.c, cA); + positionA.a = aA; + copyVec2(positionB.c, cB); + positionB.a = aB; + return minSeparation; + }; + Contact2.prototype.initVelocityConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var velocityA = bodyA.c_velocity; + var velocityB = bodyB.c_velocity; + var positionA = bodyA.c_position; + var positionB = bodyB.c_position; + var radiusA = this.p_radiusA; + var radiusB = this.p_radiusB; + var manifold = this.m_manifold; + var mA = this.v_invMassA; + var mB = this.v_invMassB; + var iA = this.v_invIA; + var iB = this.v_invIB; + var localCenterA = this.p_localCenterA; + var localCenterB = this.p_localCenterB; + copyVec2(cA, positionA.c); + var aA = positionA.a; + copyVec2(vA, velocityA.v); + var wA = velocityA.w; + copyVec2(cB, positionB.c); + var aB = positionB.a; + copyVec2(vB, velocityB.v); + var wB = velocityB.w; + getTransform(xfA, localCenterA, cA, aA); + getTransform(xfB, localCenterB, cB, aB); + worldManifold.recycle(); + manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB); + copyVec2(this.v_normal, worldManifold.normal); + for (var j = 0; j < this.v_pointCount; ++j) { + var vcp = this.v_points[j]; + var wmp = worldManifold.points[j]; + subVec2(vcp.rA, wmp, cA); + subVec2(vcp.rB, wmp, cB); + var rnA = crossVec2Vec2(vcp.rA, this.v_normal); + var rnB = crossVec2Vec2(vcp.rB, this.v_normal); + var kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB; + vcp.normalMass = kNormal > 0 ? 1 / kNormal : 0; + crossVec2Num(tangent$1, this.v_normal, 1); + var rtA = crossVec2Vec2(vcp.rA, tangent$1); + var rtB = crossVec2Vec2(vcp.rB, tangent$1); + var kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB; + vcp.tangentMass = kTangent > 0 ? 1 / kTangent : 0; + vcp.velocityBias = 0; + var vRel = 0; + vRel += dotVec2(this.v_normal, vB); + vRel += dotVec2(this.v_normal, crossNumVec2(temp$2, wB, vcp.rB)); + vRel -= dotVec2(this.v_normal, vA); + vRel -= dotVec2(this.v_normal, crossNumVec2(temp$2, wA, vcp.rA)); + if (vRel < -SettingsInternal.velocityThreshold) { + vcp.velocityBias = -this.v_restitution * vRel; + } + } + if (this.v_pointCount == 2 && step.blockSolve) { + var vcp1 = this.v_points[0]; + var vcp2 = this.v_points[1]; + var rn1A = crossVec2Vec2(vcp1.rA, this.v_normal); + var rn1B = crossVec2Vec2(vcp1.rB, this.v_normal); + var rn2A = crossVec2Vec2(vcp2.rA, this.v_normal); + var rn2B = crossVec2Vec2(vcp2.rB, this.v_normal); + var k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B; + var k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B; + var k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B; + var k_maxConditionNumber = 1e3; + if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) { + this.v_K.ex.setNum(k11, k12); + this.v_K.ey.setNum(k12, k22); + var a_1 = this.v_K.ex.x; + var b_1 = this.v_K.ey.x; + var c2 = this.v_K.ex.y; + var d_1 = this.v_K.ey.y; + var det = a_1 * d_1 - b_1 * c2; + if (det !== 0) { + det = 1 / det; + } + this.v_normalMass.ex.x = det * d_1; + this.v_normalMass.ey.x = -det * b_1; + this.v_normalMass.ex.y = -det * c2; + this.v_normalMass.ey.y = det * a_1; + } else { + this.v_pointCount = 1; + } + } + copyVec2(positionA.c, cA); + positionA.a = aA; + copyVec2(velocityA.v, vA); + velocityA.w = wA; + copyVec2(positionB.c, cB); + positionB.a = aB; + copyVec2(velocityB.v, vB); + velocityB.w = wB; + }; + Contact2.prototype.warmStartConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var velocityA = bodyA.c_velocity; + var velocityB = bodyB.c_velocity; + bodyA.c_position; + bodyB.c_position; + var mA = this.v_invMassA; + var iA = this.v_invIA; + var mB = this.v_invMassB; + var iB = this.v_invIB; + copyVec2(vA, velocityA.v); + var wA = velocityA.w; + copyVec2(vB, velocityB.v); + var wB = velocityB.w; + copyVec2(normal$2, this.v_normal); + crossVec2Num(tangent$1, normal$2, 1); + for (var j = 0; j < this.v_pointCount; ++j) { + var vcp = this.v_points[j]; + combine2Vec2(P$1, vcp.normalImpulse, normal$2, vcp.tangentImpulse, tangent$1); + wA -= iA * crossVec2Vec2(vcp.rA, P$1); + minusScaleVec2(vA, mA, P$1); + wB += iB * crossVec2Vec2(vcp.rB, P$1); + plusScaleVec2(vB, mB, P$1); + } + copyVec2(velocityA.v, vA); + velocityA.w = wA; + copyVec2(velocityB.v, vB); + velocityB.w = wB; + }; + Contact2.prototype.storeConstraintImpulses = function(step) { + var manifold = this.m_manifold; + for (var j = 0; j < this.v_pointCount; ++j) { + manifold.points[j].normalImpulse = this.v_points[j].normalImpulse; + manifold.points[j].tangentImpulse = this.v_points[j].tangentImpulse; + } + }; + Contact2.prototype.solveVelocityConstraint = function(step) { + var fixtureA = this.m_fixtureA; + var fixtureB = this.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + var velocityA = bodyA.c_velocity; + bodyA.c_position; + var velocityB = bodyB.c_velocity; + bodyB.c_position; + var mA = this.v_invMassA; + var iA = this.v_invIA; + var mB = this.v_invMassB; + var iB = this.v_invIB; + copyVec2(vA, velocityA.v); + var wA = velocityA.w; + copyVec2(vB, velocityB.v); + var wB = velocityB.w; + copyVec2(normal$2, this.v_normal); + crossVec2Num(tangent$1, normal$2, 1); + var friction = this.v_friction; + for (var j = 0; j < this.v_pointCount; ++j) { + var vcp = this.v_points[j]; + zeroVec2(dv); + plusVec2(dv, vB); + plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); + minusVec2(dv, vA); + minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); + var vt = dotVec2(dv, tangent$1) - this.v_tangentSpeed; + var lambda = vcp.tangentMass * -vt; + var maxFriction = friction * vcp.normalImpulse; + var newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction); + lambda = newImpulse - vcp.tangentImpulse; + vcp.tangentImpulse = newImpulse; + scaleVec2(P$1, lambda, tangent$1); + minusScaleVec2(vA, mA, P$1); + wA -= iA * crossVec2Vec2(vcp.rA, P$1); + plusScaleVec2(vB, mB, P$1); + wB += iB * crossVec2Vec2(vcp.rB, P$1); + } + if (this.v_pointCount == 1 || step.blockSolve == false) { + for (var i = 0; i < this.v_pointCount; ++i) { + var vcp = this.v_points[i]; + zeroVec2(dv); + plusVec2(dv, vB); + plusVec2(dv, crossNumVec2(temp$2, wB, vcp.rB)); + minusVec2(dv, vA); + minusVec2(dv, crossNumVec2(temp$2, wA, vcp.rA)); + var vn = dotVec2(dv, normal$2); + var lambda = -vcp.normalMass * (vn - vcp.velocityBias); + var newImpulse = math_max$2(vcp.normalImpulse + lambda, 0); + lambda = newImpulse - vcp.normalImpulse; + vcp.normalImpulse = newImpulse; + scaleVec2(P$1, lambda, normal$2); + minusScaleVec2(vA, mA, P$1); + wA -= iA * crossVec2Vec2(vcp.rA, P$1); + plusScaleVec2(vB, mB, P$1); + wB += iB * crossVec2Vec2(vcp.rB, P$1); + } + } else { + var vcp1 = this.v_points[0]; + var vcp2 = this.v_points[1]; + setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse); + zeroVec2(dv1); + plusVec2(dv1, vB); + plusVec2(dv1, crossNumVec2(temp$2, wB, vcp1.rB)); + minusVec2(dv1, vA); + minusVec2(dv1, crossNumVec2(temp$2, wA, vcp1.rA)); + zeroVec2(dv2); + plusVec2(dv2, vB); + plusVec2(dv2, crossNumVec2(temp$2, wB, vcp2.rB)); + minusVec2(dv2, vA); + minusVec2(dv2, crossNumVec2(temp$2, wA, vcp2.rA)); + var vn1 = dotVec2(dv1, normal$2); + var vn2 = dotVec2(dv2, normal$2); + setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias); + b.x -= this.v_K.ex.x * a.x + this.v_K.ey.x * a.y; + b.y -= this.v_K.ex.y * a.x + this.v_K.ey.y * a.y; + while (true) { + zeroVec2(x); + x.x = -(this.v_normalMass.ex.x * b.x + this.v_normalMass.ey.x * b.y); + x.y = -(this.v_normalMass.ex.y * b.x + this.v_normalMass.ey.y * b.y); + if (x.x >= 0 && x.y >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + x.x = -vcp1.normalMass * b.x; + x.y = 0; + vn1 = 0; + vn2 = this.v_K.ex.y * x.x + b.y; + if (x.x >= 0 && vn2 >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + x.x = 0; + x.y = -vcp2.normalMass * b.y; + vn1 = this.v_K.ey.x * x.y + b.x; + vn2 = 0; + if (x.y >= 0 && vn1 >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + x.x = 0; + x.y = 0; + vn1 = b.x; + vn2 = b.y; + if (vn1 >= 0 && vn2 >= 0) { + subVec2(d, x, a); + scaleVec2(P1, d.x, normal$2); + scaleVec2(P2, d.y, normal$2); + combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA); + wA -= iA * (crossVec2Vec2(vcp1.rA, P1) + crossVec2Vec2(vcp2.rA, P2)); + combine3Vec2(vB, mB, P1, mB, P2, 1, vB); + wB += iB * (crossVec2Vec2(vcp1.rB, P1) + crossVec2Vec2(vcp2.rB, P2)); + vcp1.normalImpulse = x.x; + vcp2.normalImpulse = x.y; + break; + } + break; + } + } + copyVec2(velocityA.v, vA); + velocityA.w = wA; + copyVec2(velocityB.v, vB); + velocityB.w = wB; + }; + Contact2.addType = function(type1, type2, callback) { + s_registers[type1] = s_registers[type1] || {}; + s_registers[type1][type2] = callback; + }; + Contact2.create = function(fixtureA, indexA, fixtureB, indexB) { + var typeA = fixtureA.m_shape.m_type; + var typeB = fixtureB.m_shape.m_type; + var contact = contactPool.allocate(); + var evaluateFcn; + if (evaluateFcn = s_registers[typeA] && s_registers[typeA][typeB]) { + contact.initialize(fixtureA, indexA, fixtureB, indexB, evaluateFcn); + } else if (evaluateFcn = s_registers[typeB] && s_registers[typeB][typeA]) { + contact.initialize(fixtureB, indexB, fixtureA, indexA, evaluateFcn); + } else { + return null; + } + fixtureA = contact.m_fixtureA; + fixtureB = contact.m_fixtureB; + indexA = contact.getChildIndexA(); + indexB = contact.getChildIndexB(); + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + contact.m_nodeA.contact = contact; + contact.m_nodeA.other = bodyB; + contact.m_nodeA.prev = null; + contact.m_nodeA.next = bodyA.m_contactList; + if (bodyA.m_contactList != null) { + bodyA.m_contactList.prev = contact.m_nodeA; + } + bodyA.m_contactList = contact.m_nodeA; + contact.m_nodeB.contact = contact; + contact.m_nodeB.other = bodyA; + contact.m_nodeB.prev = null; + contact.m_nodeB.next = bodyB.m_contactList; + if (bodyB.m_contactList != null) { + bodyB.m_contactList.prev = contact.m_nodeB; + } + bodyB.m_contactList = contact.m_nodeB; + if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) { + bodyA.setAwake(true); + bodyB.setAwake(true); + } + return contact; }; - Vec3.prototype.add = function (w) { - this.x += w.x; - this.y += w.y; - this.z += w.z; + Contact2.destroy = function(contact, listener) { + var fixtureA = contact.m_fixtureA; + var fixtureB = contact.m_fixtureB; + if (fixtureA === null || fixtureB === null) + return; + var bodyA = fixtureA.m_body; + var bodyB = fixtureB.m_body; + if (bodyA === null || bodyB === null) + return; + if (contact.isTouching()) { + listener.endContact(contact); + } + if (contact.m_nodeA.prev) { + contact.m_nodeA.prev.next = contact.m_nodeA.next; + } + if (contact.m_nodeA.next) { + contact.m_nodeA.next.prev = contact.m_nodeA.prev; + } + if (contact.m_nodeA == bodyA.m_contactList) { + bodyA.m_contactList = contact.m_nodeA.next; + } + if (contact.m_nodeB.prev) { + contact.m_nodeB.prev.next = contact.m_nodeB.next; + } + if (contact.m_nodeB.next) { + contact.m_nodeB.next.prev = contact.m_nodeB.prev; + } + if (contact.m_nodeB == bodyB.m_contactList) { + bodyB.m_contactList = contact.m_nodeB.next; + } + if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) { + bodyA.setAwake(true); + bodyB.setAwake(true); + } + contactPool.release(contact); + }; + return Contact2; + }() +); +var DEFAULTS$b = { + gravity: Vec2.zero(), + allowSleep: true, + warmStarting: true, + continuousPhysics: true, + subStepping: false, + blockSolve: true, + velocityIterations: 8, + positionIterations: 3 +}; +var World = ( + /** @class */ + function() { + function World2(def) { + if (!(this instanceof World2)) { + return new World2(def); + } + this.s_step = new TimeStep(); + if (!def) { + def = {}; + } else if (Vec2.isValid(def)) { + def = { gravity: def }; + } + def = options(def, DEFAULTS$b); + this.m_solver = new Solver(this); + this.m_broadPhase = new BroadPhase(); + this.m_contactList = null; + this.m_contactCount = 0; + this.m_bodyList = null; + this.m_bodyCount = 0; + this.m_jointList = null; + this.m_jointCount = 0; + this.m_stepComplete = true; + this.m_allowSleep = def.allowSleep; + this.m_gravity = Vec2.clone(def.gravity); + this.m_clearForces = true; + this.m_newFixture = false; + this.m_locked = false; + this.m_warmStarting = def.warmStarting; + this.m_continuousPhysics = def.continuousPhysics; + this.m_subStepping = def.subStepping; + this.m_blockSolve = def.blockSolve; + this.m_velocityIterations = def.velocityIterations; + this.m_positionIterations = def.positionIterations; + this.m_t = 0; + } + World2.prototype._serialize = function() { + var bodies = []; + var joints = []; + for (var b2 = this.getBodyList(); b2; b2 = b2.getNext()) { + bodies.push(b2); + } + for (var j = this.getJointList(); j; j = j.getNext()) { + if (typeof j._serialize === "function") { + joints.push(j); + } + } + return { + gravity: this.m_gravity, + bodies, + joints + }; + }; + World2._deserialize = function(data, context, restore) { + if (!data) { + return new World2(); + } + var world = new World2(data.gravity); + if (data.bodies) { + for (var i = data.bodies.length - 1; i >= 0; i -= 1) { + world._addBody(restore(Body, data.bodies[i], world)); + } + } + if (data.joints) { + for (var i = data.joints.length - 1; i >= 0; i--) { + world.createJoint(restore(Joint, data.joints[i], world)); + } + } + return world; + }; + World2.prototype.getBodyList = function() { + return this.m_bodyList; + }; + World2.prototype.getJointList = function() { + return this.m_jointList; + }; + World2.prototype.getContactList = function() { + return this.m_contactList; + }; + World2.prototype.getBodyCount = function() { + return this.m_bodyCount; + }; + World2.prototype.getJointCount = function() { + return this.m_jointCount; + }; + World2.prototype.getContactCount = function() { + return this.m_contactCount; + }; + World2.prototype.setGravity = function(gravity) { + this.m_gravity.set(gravity); + }; + World2.prototype.getGravity = function() { + return this.m_gravity; + }; + World2.prototype.isLocked = function() { + return this.m_locked; + }; + World2.prototype.setAllowSleeping = function(flag) { + if (flag == this.m_allowSleep) { + return; + } + this.m_allowSleep = flag; + if (this.m_allowSleep == false) { + for (var b2 = this.m_bodyList; b2; b2 = b2.m_next) { + b2.setAwake(true); + } + } + }; + World2.prototype.getAllowSleeping = function() { + return this.m_allowSleep; + }; + World2.prototype.setWarmStarting = function(flag) { + this.m_warmStarting = flag; + }; + World2.prototype.getWarmStarting = function() { + return this.m_warmStarting; + }; + World2.prototype.setContinuousPhysics = function(flag) { + this.m_continuousPhysics = flag; + }; + World2.prototype.getContinuousPhysics = function() { + return this.m_continuousPhysics; + }; + World2.prototype.setSubStepping = function(flag) { + this.m_subStepping = flag; + }; + World2.prototype.getSubStepping = function() { + return this.m_subStepping; + }; + World2.prototype.setAutoClearForces = function(flag) { + this.m_clearForces = flag; + }; + World2.prototype.getAutoClearForces = function() { + return this.m_clearForces; + }; + World2.prototype.clearForces = function() { + for (var body = this.m_bodyList; body; body = body.getNext()) { + body.m_force.setZero(); + body.m_torque = 0; + } + }; + World2.prototype.queryAABB = function(aabb, callback) { + var broadPhase = this.m_broadPhase; + this.m_broadPhase.query(aabb, function(proxyId) { + var proxy = broadPhase.getUserData(proxyId); + return callback(proxy.fixture); + }); + }; + World2.prototype.rayCast = function(point1, point2, callback) { + var broadPhase = this.m_broadPhase; + this.m_broadPhase.rayCast({ + maxFraction: 1, + p1: point1, + p2: point2 + }, function(input2, proxyId) { + var proxy = broadPhase.getUserData(proxyId); + var fixture = proxy.fixture; + var index = proxy.childIndex; + var output2 = {}; + var hit = fixture.rayCast(output2, input2, index); + if (hit) { + var fraction = output2.fraction; + var point3 = Vec2.add(Vec2.mulNumVec2(1 - fraction, input2.p1), Vec2.mulNumVec2(fraction, input2.p2)); + return callback(fixture, point3, output2.normal, fraction); + } + return input2.maxFraction; + }); + }; + World2.prototype.getProxyCount = function() { + return this.m_broadPhase.getProxyCount(); + }; + World2.prototype.getTreeHeight = function() { + return this.m_broadPhase.getTreeHeight(); + }; + World2.prototype.getTreeBalance = function() { + return this.m_broadPhase.getTreeBalance(); + }; + World2.prototype.getTreeQuality = function() { + return this.m_broadPhase.getTreeQuality(); + }; + World2.prototype.shiftOrigin = function(newOrigin) { + if (this.m_locked) { + return; + } + for (var b2 = this.m_bodyList; b2; b2 = b2.m_next) { + b2.m_xf.p.sub(newOrigin); + b2.m_sweep.c0.sub(newOrigin); + b2.m_sweep.c.sub(newOrigin); + } + for (var j = this.m_jointList; j; j = j.m_next) { + j.shiftOrigin(newOrigin); + } + this.m_broadPhase.shiftOrigin(newOrigin); + }; + World2.prototype._addBody = function(body) { + if (this.isLocked()) { + return; + } + body.m_prev = null; + body.m_next = this.m_bodyList; + if (this.m_bodyList) { + this.m_bodyList.m_prev = body; + } + this.m_bodyList = body; + ++this.m_bodyCount; + }; + World2.prototype.createBody = function(arg1, arg2) { + if (this.isLocked()) { + return null; + } + var def = {}; + if (!arg1) ; + else if (Vec2.isValid(arg1)) { + def = { position: arg1, angle: arg2 }; + } else if (typeof arg1 === "object") { + def = arg1; + } + var body = new Body(this, def); + this._addBody(body); + return body; + }; + World2.prototype.createDynamicBody = function(arg1, arg2) { + var def = {}; + if (!arg1) ; + else if (Vec2.isValid(arg1)) { + def = { position: arg1, angle: arg2 }; + } else if (typeof arg1 === "object") { + def = arg1; + } + def.type = "dynamic"; + return this.createBody(def); + }; + World2.prototype.createKinematicBody = function(arg1, arg2) { + var def = {}; + if (!arg1) ; + else if (Vec2.isValid(arg1)) { + def = { position: arg1, angle: arg2 }; + } else if (typeof arg1 === "object") { + def = arg1; + } + def.type = "kinematic"; + return this.createBody(def); + }; + World2.prototype.destroyBody = function(b2) { + if (this.isLocked()) { + return; + } + if (b2.m_destroyed) { + return false; + } + var je = b2.m_jointList; + while (je) { + var je0 = je; + je = je.next; + this.publish("remove-joint", je0.joint); + this.destroyJoint(je0.joint); + b2.m_jointList = je; + } + b2.m_jointList = null; + var ce = b2.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.destroyContact(ce0.contact); + b2.m_contactList = ce; + } + b2.m_contactList = null; + var f = b2.m_fixtureList; + while (f) { + var f0 = f; + f = f.m_next; + this.publish("remove-fixture", f0); + f0.destroyProxies(this.m_broadPhase); + b2.m_fixtureList = f; + } + b2.m_fixtureList = null; + if (b2.m_prev) { + b2.m_prev.m_next = b2.m_next; + } + if (b2.m_next) { + b2.m_next.m_prev = b2.m_prev; + } + if (b2 == this.m_bodyList) { + this.m_bodyList = b2.m_next; + } + b2.m_destroyed = true; + --this.m_bodyCount; + this.publish("remove-body", b2); + return true; + }; + World2.prototype.createJoint = function(joint) { + if (this.isLocked()) { + return null; + } + joint.m_prev = null; + joint.m_next = this.m_jointList; + if (this.m_jointList) { + this.m_jointList.m_prev = joint; + } + this.m_jointList = joint; + ++this.m_jointCount; + joint.m_edgeA.joint = joint; + joint.m_edgeA.other = joint.m_bodyB; + joint.m_edgeA.prev = null; + joint.m_edgeA.next = joint.m_bodyA.m_jointList; + if (joint.m_bodyA.m_jointList) + joint.m_bodyA.m_jointList.prev = joint.m_edgeA; + joint.m_bodyA.m_jointList = joint.m_edgeA; + joint.m_edgeB.joint = joint; + joint.m_edgeB.other = joint.m_bodyA; + joint.m_edgeB.prev = null; + joint.m_edgeB.next = joint.m_bodyB.m_jointList; + if (joint.m_bodyB.m_jointList) + joint.m_bodyB.m_jointList.prev = joint.m_edgeB; + joint.m_bodyB.m_jointList = joint.m_edgeB; + if (joint.m_collideConnected == false) { + for (var edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) { + if (edge.other == joint.m_bodyA) { + edge.contact.flagForFiltering(); + } + } + } + return joint; + }; + World2.prototype.destroyJoint = function(joint) { + if (this.isLocked()) { + return; + } + if (joint.m_prev) { + joint.m_prev.m_next = joint.m_next; + } + if (joint.m_next) { + joint.m_next.m_prev = joint.m_prev; + } + if (joint == this.m_jointList) { + this.m_jointList = joint.m_next; + } + var bodyA = joint.m_bodyA; + var bodyB = joint.m_bodyB; + bodyA.setAwake(true); + bodyB.setAwake(true); + if (joint.m_edgeA.prev) { + joint.m_edgeA.prev.next = joint.m_edgeA.next; + } + if (joint.m_edgeA.next) { + joint.m_edgeA.next.prev = joint.m_edgeA.prev; + } + if (joint.m_edgeA == bodyA.m_jointList) { + bodyA.m_jointList = joint.m_edgeA.next; + } + joint.m_edgeA.prev = null; + joint.m_edgeA.next = null; + if (joint.m_edgeB.prev) { + joint.m_edgeB.prev.next = joint.m_edgeB.next; + } + if (joint.m_edgeB.next) { + joint.m_edgeB.next.prev = joint.m_edgeB.prev; + } + if (joint.m_edgeB == bodyB.m_jointList) { + bodyB.m_jointList = joint.m_edgeB.next; + } + joint.m_edgeB.prev = null; + joint.m_edgeB.next = null; + --this.m_jointCount; + if (joint.m_collideConnected == false) { + var edge = bodyB.getContactList(); + while (edge) { + if (edge.other == bodyA) { + edge.contact.flagForFiltering(); + } + edge = edge.next; + } + } + this.publish("remove-joint", joint); + }; + World2.prototype.step = function(timeStep, velocityIterations, positionIterations) { + this.publish("pre-step", timeStep); + if ((velocityIterations | 0) !== velocityIterations) { + velocityIterations = 0; + } + velocityIterations = velocityIterations || this.m_velocityIterations; + positionIterations = positionIterations || this.m_positionIterations; + if (this.m_newFixture) { + this.findNewContacts(); + this.m_newFixture = false; + } + this.m_locked = true; + this.s_step.reset(timeStep); + this.s_step.velocityIterations = velocityIterations; + this.s_step.positionIterations = positionIterations; + this.s_step.warmStarting = this.m_warmStarting; + this.s_step.blockSolve = this.m_blockSolve; + this.updateContacts(); + if (this.m_stepComplete && timeStep > 0) { + this.m_solver.solveWorld(this.s_step); + for (var b2 = this.m_bodyList; b2; b2 = b2.getNext()) { + if (b2.m_islandFlag == false) { + continue; + } + if (b2.isStatic()) { + continue; + } + b2.synchronizeFixtures(); + } + this.findNewContacts(); + } + if (this.m_continuousPhysics && timeStep > 0) { + this.m_solver.solveWorldTOI(this.s_step); + } + if (this.m_clearForces) { + this.clearForces(); + } + this.m_locked = false; + this.publish("post-step", timeStep); + }; + World2.prototype.findNewContacts = function() { + var _this = this; + this.m_broadPhase.updatePairs(function(proxyA, proxyB) { + return _this.createContact(proxyA, proxyB); + }); + }; + World2.prototype.createContact = function(proxyA, proxyB) { + var fixtureA = proxyA.fixture; + var fixtureB = proxyB.fixture; + var indexA = proxyA.childIndex; + var indexB = proxyB.childIndex; + var bodyA = fixtureA.getBody(); + var bodyB = fixtureB.getBody(); + if (bodyA == bodyB) { + return; + } + var edge = bodyB.getContactList(); + while (edge) { + if (edge.other == bodyA) { + var fA = edge.contact.getFixtureA(); + var fB = edge.contact.getFixtureB(); + var iA = edge.contact.getChildIndexA(); + var iB = edge.contact.getChildIndexB(); + if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) { + return; + } + if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) { + return; + } + } + edge = edge.next; + } + if (bodyB.shouldCollide(bodyA) == false) { + return; + } + if (fixtureB.shouldCollide(fixtureA) == false) { + return; + } + var contact = Contact.create(fixtureA, indexA, fixtureB, indexB); + if (contact == null) { + return; + } + contact.m_prev = null; + if (this.m_contactList != null) { + contact.m_next = this.m_contactList; + this.m_contactList.m_prev = contact; + } + this.m_contactList = contact; + ++this.m_contactCount; + }; + World2.prototype.updateContacts = function() { + var c2; + var next_c = this.m_contactList; + while (c2 = next_c) { + next_c = c2.getNext(); + var fixtureA = c2.getFixtureA(); + var fixtureB = c2.getFixtureB(); + var indexA = c2.getChildIndexA(); + var indexB = c2.getChildIndexB(); + var bodyA = fixtureA.getBody(); + var bodyB = fixtureB.getBody(); + if (c2.m_filterFlag) { + if (bodyB.shouldCollide(bodyA) == false) { + this.destroyContact(c2); + continue; + } + if (fixtureB.shouldCollide(fixtureA) == false) { + this.destroyContact(c2); + continue; + } + c2.m_filterFlag = false; + } + var activeA = bodyA.isAwake() && !bodyA.isStatic(); + var activeB = bodyB.isAwake() && !bodyB.isStatic(); + if (activeA == false && activeB == false) { + continue; + } + var proxyIdA = fixtureA.m_proxies[indexA].proxyId; + var proxyIdB = fixtureB.m_proxies[indexB].proxyId; + var overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB); + if (overlap == false) { + this.destroyContact(c2); + continue; + } + c2.update(this); + } + }; + World2.prototype.destroyContact = function(contact) { + if (contact.m_prev) { + contact.m_prev.m_next = contact.m_next; + } + if (contact.m_next) { + contact.m_next.m_prev = contact.m_prev; + } + if (contact == this.m_contactList) { + this.m_contactList = contact.m_next; + } + Contact.destroy(contact, this); + --this.m_contactCount; + }; + World2.prototype.on = function(name, listener) { + if (typeof name !== "string" || typeof listener !== "function") { return this; - }; - Vec3.prototype.sub = function (w) { - this.x -= w.x; - this.y -= w.y; - this.z -= w.z; + } + if (!this._listeners) { + this._listeners = {}; + } + if (!this._listeners[name]) { + this._listeners[name] = []; + } + this._listeners[name].push(listener); + return this; + }; + World2.prototype.off = function(name, listener) { + if (typeof name !== "string" || typeof listener !== "function") { return this; - }; - Vec3.prototype.mul = function (m) { - this.x *= m; - this.y *= m; - this.z *= m; + } + var listeners = this._listeners && this._listeners[name]; + if (!listeners || !listeners.length) { return this; + } + var index = listeners.indexOf(listener); + if (index >= 0) { + listeners.splice(index, 1); + } + return this; + }; + World2.prototype.publish = function(name, arg1, arg2, arg3) { + var listeners = this._listeners && this._listeners[name]; + if (!listeners || !listeners.length) { + return 0; + } + for (var l = 0; l < listeners.length; l++) { + listeners[l].call(this, arg1, arg2, arg3); + } + return listeners.length; + }; + World2.prototype.beginContact = function(contact) { + this.publish("begin-contact", contact); + }; + World2.prototype.endContact = function(contact) { + this.publish("end-contact", contact); + }; + World2.prototype.preSolve = function(contact, oldManifold2) { + this.publish("pre-solve", contact, oldManifold2); + }; + World2.prototype.postSolve = function(contact, impulse) { + this.publish("post-solve", contact, impulse); + }; + return World2; + }() +); +var Vec3 = ( + /** @class */ + function() { + function Vec32(x2, y, z) { + if (!(this instanceof Vec32)) { + return new Vec32(x2, y, z); + } + if (typeof x2 === "undefined") { + this.x = 0; + this.y = 0; + this.z = 0; + } else if (typeof x2 === "object") { + this.x = x2.x; + this.y = x2.y; + this.z = x2.z; + } else { + this.x = x2; + this.y = y; + this.z = z; + } + } + Vec32.prototype._serialize = function() { + return { + x: this.x, + y: this.y, + z: this.z + }; + }; + Vec32._deserialize = function(data) { + var obj = Object.create(Vec32.prototype); + obj.x = data.x; + obj.y = data.y; + obj.z = data.z; + return obj; + }; + Vec32.neo = function(x2, y, z) { + var obj = Object.create(Vec32.prototype); + obj.x = x2; + obj.y = y; + obj.z = z; + return obj; + }; + Vec32.zero = function() { + var obj = Object.create(Vec32.prototype); + obj.x = 0; + obj.y = 0; + obj.z = 0; + return obj; + }; + Vec32.clone = function(v3) { + return Vec32.neo(v3.x, v3.y, v3.z); + }; + Vec32.prototype.toString = function() { + return JSON.stringify(this); + }; + Vec32.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Number.isFinite(obj.x) && Number.isFinite(obj.y) && Number.isFinite(obj.z); + }; + Vec32.assert = function(o) { + }; + Vec32.prototype.setZero = function() { + this.x = 0; + this.y = 0; + this.z = 0; + return this; + }; + Vec32.prototype.set = function(x2, y, z) { + this.x = x2; + this.y = y; + this.z = z; + return this; + }; + Vec32.prototype.add = function(w) { + this.x += w.x; + this.y += w.y; + this.z += w.z; + return this; + }; + Vec32.prototype.sub = function(w) { + this.x -= w.x; + this.y -= w.y; + this.z -= w.z; + return this; + }; + Vec32.prototype.mul = function(m) { + this.x *= m; + this.y *= m; + this.z *= m; + return this; + }; + Vec32.areEqual = function(v3, w) { + 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; + }; + Vec32.dot = function(v3, w) { + return v3.x * w.x + v3.y * w.y + v3.z * w.z; + }; + Vec32.cross = function(v3, w) { + 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); + }; + Vec32.add = function(v3, w) { + return new Vec32(v3.x + w.x, v3.y + w.y, v3.z + w.z); + }; + Vec32.sub = function(v3, w) { + return new Vec32(v3.x - w.x, v3.y - w.y, v3.z - w.z); + }; + Vec32.mul = function(v3, m) { + return new Vec32(m * v3.x, m * v3.y, m * v3.z); + }; + Vec32.prototype.neg = function() { + this.x = -this.x; + this.y = -this.y; + this.z = -this.z; + return this; + }; + Vec32.neg = function(v3) { + return new Vec32(-v3.x, -v3.y, -v3.z); + }; + return Vec32; + }() +); +var v1$2 = vec2(0, 0); +var v2$1 = vec2(0, 0); +var EdgeShape = ( + /** @class */ + function(_super) { + __extends(EdgeShape2, _super); + function EdgeShape2(v122, v22) { + var _this = this; + if (!(_this instanceof EdgeShape2)) { + return new EdgeShape2(v122, v22); + } + _this = _super.call(this) || this; + _this.m_type = EdgeShape2.TYPE; + _this.m_radius = SettingsInternal.polygonRadius; + _this.m_vertex1 = v122 ? Vec2.clone(v122) : Vec2.zero(); + _this.m_vertex2 = v22 ? Vec2.clone(v22) : Vec2.zero(); + _this.m_vertex0 = Vec2.zero(); + _this.m_vertex3 = Vec2.zero(); + _this.m_hasVertex0 = false; + _this.m_hasVertex3 = false; + return _this; + } + EdgeShape2.prototype._serialize = function() { + return { + type: this.m_type, + vertex1: this.m_vertex1, + vertex2: this.m_vertex2, + vertex0: this.m_vertex0, + vertex3: this.m_vertex3, + hasVertex0: this.m_hasVertex0, + hasVertex3: this.m_hasVertex3 + }; + }; + EdgeShape2._deserialize = function(data) { + var shape = new EdgeShape2(data.vertex1, data.vertex2); + if (shape.m_hasVertex0) { + shape.setPrevVertex(data.vertex0); + } + if (shape.m_hasVertex3) { + shape.setNextVertex(data.vertex3); + } + return shape; + }; + EdgeShape2.prototype._reset = function() { + }; + EdgeShape2.prototype.getRadius = function() { + return this.m_radius; + }; + EdgeShape2.prototype.getType = function() { + return this.m_type; + }; + EdgeShape2.prototype.setNext = function(v3) { + return this.setNextVertex(v3); + }; + EdgeShape2.prototype.setNextVertex = function(v3) { + if (v3) { + this.m_vertex3.setVec2(v3); + this.m_hasVertex3 = true; + } else { + this.m_vertex3.setZero(); + this.m_hasVertex3 = false; + } + return this; }; - Vec3.areEqual = function (v, w) { - return v === w || - typeof v === "object" && v !== null && - typeof w === "object" && w !== null && - v.x === w.x && v.y === w.y && v.z === w.z; - }; - /** Dot product on two vectors */ - Vec3.dot = function (v, w) { - return v.x * w.x + v.y * w.y + v.z * w.z; - }; - /** Cross product on two vectors */ - Vec3.cross = function (v, w) { - return new Vec3(v.y * w.z - v.z * w.y, v.z * w.x - v.x * w.z, v.x * w.y - v.y * w.x); - }; - Vec3.add = function (v, w) { - return new Vec3(v.x + w.x, v.y + w.y, v.z + w.z); - }; - Vec3.sub = function (v, w) { - return new Vec3(v.x - w.x, v.y - w.y, v.z - w.z); - }; - Vec3.mul = function (v, m) { - return new Vec3(m * v.x, m * v.y, m * v.z); - }; - Vec3.prototype.neg = function () { - this.x = -this.x; - this.y = -this.y; - this.z = -this.z; - return this; + EdgeShape2.prototype.getNextVertex = function() { + return this.m_vertex3; }; - Vec3.neg = function (v) { - return new Vec3(-v.x, -v.y, -v.z); + EdgeShape2.prototype.setPrev = function(v3) { + return this.setPrevVertex(v3); }; - return Vec3; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var v1$2 = vec2(0, 0); -/** @internal */ var v2$1 = vec2(0, 0); -/** - * A line segment (edge) shape. These can be connected in chains or loops to - * other edge shapes. The connectivity information is used to ensure correct - * contact normals. - */ -var EdgeShape = /** @class */ (function (_super) { - __extends(EdgeShape, _super); - function EdgeShape(v1, v2) { - var _this = this; - // @ts-ignore - if (!(_this instanceof EdgeShape)) { - return new EdgeShape(v1, v2); - } - _this = _super.call(this) || this; - _this.m_type = EdgeShape.TYPE; - _this.m_radius = SettingsInternal.polygonRadius; - _this.m_vertex1 = v1 ? Vec2.clone(v1) : Vec2.zero(); - _this.m_vertex2 = v2 ? Vec2.clone(v2) : Vec2.zero(); - _this.m_vertex0 = Vec2.zero(); - _this.m_vertex3 = Vec2.zero(); - _this.m_hasVertex0 = false; - _this.m_hasVertex3 = false; - return _this; - } - /** @internal */ - EdgeShape.prototype._serialize = function () { - return { - type: this.m_type, - vertex1: this.m_vertex1, - vertex2: this.m_vertex2, - vertex0: this.m_vertex0, - vertex3: this.m_vertex3, - hasVertex0: this.m_hasVertex0, - hasVertex3: this.m_hasVertex3, - }; - }; - /** @internal */ - EdgeShape._deserialize = function (data) { - var shape = new EdgeShape(data.vertex1, data.vertex2); - if (shape.m_hasVertex0) { - shape.setPrevVertex(data.vertex0); - } - if (shape.m_hasVertex3) { - shape.setNextVertex(data.vertex3); - } - return shape; - }; - /** @hidden */ - EdgeShape.prototype._reset = function () { - // noop - }; - EdgeShape.prototype.getRadius = function () { - return this.m_radius; - }; - EdgeShape.prototype.getType = function () { - return this.m_type; - }; - /** @internal @deprecated */ - EdgeShape.prototype.setNext = function (v) { - return this.setNextVertex(v); - }; - /** - * Optional next vertex, used for smooth collision. - */ - EdgeShape.prototype.setNextVertex = function (v) { - if (v) { - this.m_vertex3.setVec2(v); - this.m_hasVertex3 = true; - } - else { - this.m_vertex3.setZero(); - this.m_hasVertex3 = false; - } - return this; - }; - /** - * Optional next vertex, used for smooth collision. - */ - EdgeShape.prototype.getNextVertex = function () { - return this.m_vertex3; - }; - /** @internal @deprecated */ - EdgeShape.prototype.setPrev = function (v) { - return this.setPrevVertex(v); - }; - /** - * Optional prev vertex, used for smooth collision. - */ - EdgeShape.prototype.setPrevVertex = function (v) { - if (v) { - this.m_vertex0.setVec2(v); - this.m_hasVertex0 = true; - } - else { - this.m_vertex0.setZero(); - this.m_hasVertex0 = false; - } - return this; - }; - /** - * Optional prev vertex, used for smooth collision. - */ - EdgeShape.prototype.getPrevVertex = function () { - return this.m_vertex0; - }; - /** - * Set this as an isolated edge. - */ - EdgeShape.prototype._set = function (v1, v2) { - this.m_vertex1.setVec2(v1); - this.m_vertex2.setVec2(v2); + EdgeShape2.prototype.setPrevVertex = function(v3) { + if (v3) { + this.m_vertex0.setVec2(v3); + this.m_hasVertex0 = true; + } else { + this.m_vertex0.setZero(); this.m_hasVertex0 = false; - this.m_hasVertex3 = false; - return this; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - EdgeShape.prototype._clone = function () { - var clone = new EdgeShape(); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_vertex1.setVec2(this.m_vertex1); - clone.m_vertex2.setVec2(this.m_vertex2); - clone.m_vertex0.setVec2(this.m_vertex0); - clone.m_vertex3.setVec2(this.m_vertex3); - clone.m_hasVertex0 = this.m_hasVertex0; - clone.m_hasVertex3 = this.m_hasVertex3; - return clone; - }; - /** - * Get the number of child primitives. - */ - EdgeShape.prototype.getChildCount = function () { - return 1; - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - EdgeShape.prototype.testPoint = function (xf, p) { + } + return this; + }; + EdgeShape2.prototype.getPrevVertex = function() { + return this.m_vertex0; + }; + EdgeShape2.prototype._set = function(v122, v22) { + this.m_vertex1.setVec2(v122); + this.m_vertex2.setVec2(v22); + this.m_hasVertex0 = false; + this.m_hasVertex3 = false; + return this; + }; + EdgeShape2.prototype._clone = function() { + var clone = new EdgeShape2(); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_vertex1.setVec2(this.m_vertex1); + clone.m_vertex2.setVec2(this.m_vertex2); + clone.m_vertex0.setVec2(this.m_vertex0); + clone.m_vertex3.setVec2(this.m_vertex3); + clone.m_hasVertex0 = this.m_hasVertex0; + clone.m_hasVertex3 = this.m_hasVertex3; + return clone; + }; + EdgeShape2.prototype.getChildCount = function() { + return 1; + }; + EdgeShape2.prototype.testPoint = function(xf2, p) { + return false; + }; + EdgeShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var p1 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p1, xf2.p)); + var p2 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p2, xf2.p)); + var d2 = Vec2.sub(p2, p1); + var v122 = this.m_vertex1; + var v22 = this.m_vertex2; + var e3 = Vec2.sub(v22, v122); + var normal3 = Vec2.neo(e3.y, -e3.x); + normal3.normalize(); + var numerator = Vec2.dot(normal3, Vec2.sub(v122, p1)); + var denominator = Vec2.dot(normal3, d2); + if (denominator == 0) { return false; - }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - EdgeShape.prototype.rayCast = function (output, input, xf, childIndex) { - // p = p1 + t * d - // v = v1 + s * e - // p1 + t * d = v1 + s * e - // s * e - t * d = p1 - v1 - // NOT_USED(childIndex); - // Put the ray into the edge's frame of reference. - var p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p)); - var p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p)); - var d = Vec2.sub(p2, p1); - var v1 = this.m_vertex1; - var v2 = this.m_vertex2; - var e = Vec2.sub(v2, v1); - var normal = Vec2.neo(e.y, -e.x); - normal.normalize(); - // q = p1 + t * d - // dot(normal, q - v1) = 0 - // dot(normal, p1 - v1) + t * dot(normal, d) = 0 - var numerator = Vec2.dot(normal, Vec2.sub(v1, p1)); - var denominator = Vec2.dot(normal, d); - if (denominator == 0.0) { - return false; - } - var t = numerator / denominator; - if (t < 0.0 || input.maxFraction < t) { - return false; - } - var q = Vec2.add(p1, Vec2.mulNumVec2(t, d)); - // q = v1 + s * r - // s = dot(q - v1, r) / dot(r, r) - var r = Vec2.sub(v2, v1); - var rr = Vec2.dot(r, r); - if (rr == 0.0) { - return false; - } - var s = Vec2.dot(Vec2.sub(q, v1), r) / rr; - if (s < 0.0 || 1.0 < s) { - return false; - } - output.fraction = t; - if (numerator > 0.0) { - output.normal = Rot.mulVec2(xf.q, normal).neg(); - } - else { - output.normal = Rot.mulVec2(xf.q, normal); - } - return true; - }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - EdgeShape.prototype.computeAABB = function (aabb, xf, childIndex) { - transformVec2(v1$2, xf, this.m_vertex1); - transformVec2(v2$1, xf, this.m_vertex2); - AABB.combinePoints(aabb, v1$2, v2$1); - AABB.extend(aabb, this.m_radius); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - EdgeShape.prototype.computeMass = function (massData, density) { - massData.mass = 0.0; - combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2); - massData.I = 0.0; - }; - EdgeShape.prototype.computeDistanceProxy = function (proxy) { - proxy.m_vertices[0] = this.m_vertex1; - proxy.m_vertices[1] = this.m_vertex2; - proxy.m_vertices.length = 2; - proxy.m_count = 2; - proxy.m_radius = this.m_radius; - }; - EdgeShape.TYPE = "edge"; - return EdgeShape; -}(Shape)); -var Edge = EdgeShape; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var v1$1 = vec2(0, 0); -/** @internal */ var v2 = vec2(0, 0); -/** - * A chain shape is a free form sequence of line segments. The chain has - * two-sided collision, so you can use inside and outside collision. Therefore, - * you may use any winding order. Connectivity information is used to create - * smooth collisions. - * - * WARNING: The chain will not collide properly if there are self-intersections. - */ -var ChainShape = /** @class */ (function (_super) { - __extends(ChainShape, _super); - function ChainShape(vertices, loop) { - var _this = this; - // @ts-ignore - if (!(_this instanceof ChainShape)) { - return new ChainShape(vertices, loop); - } - _this = _super.call(this) || this; - _this.m_type = ChainShape.TYPE; - _this.m_radius = SettingsInternal.polygonRadius; - _this.m_vertices = []; - _this.m_count = 0; - _this.m_prevVertex = null; - _this.m_nextVertex = null; - _this.m_hasPrevVertex = false; - _this.m_hasNextVertex = false; - _this.m_isLoop = !!loop; - if (vertices && vertices.length) { - if (loop) { - _this._createLoop(vertices); - } - else { - _this._createChain(vertices); - } - } - return _this; - } - /** @internal */ - ChainShape.prototype._serialize = function () { - var data = { - type: this.m_type, - vertices: this.m_vertices, - isLoop: this.m_isLoop, - hasPrevVertex: this.m_hasPrevVertex, - hasNextVertex: this.m_hasNextVertex, - prevVertex: null, - nextVertex: null, - }; - if (this.m_prevVertex) { - data.prevVertex = this.m_prevVertex; - } - if (this.m_nextVertex) { - data.nextVertex = this.m_nextVertex; - } - return data; - }; - /** @internal */ - ChainShape._deserialize = function (data, fixture, restore) { - var vertices = []; - if (data.vertices) { - for (var i = 0; i < data.vertices.length; i++) { - vertices.push(restore(Vec2, data.vertices[i])); - } - } - var shape = new ChainShape(vertices, data.isLoop); - if (data.prevVertex) { - shape.setPrevVertex(data.prevVertex); - } - if (data.nextVertex) { - shape.setNextVertex(data.nextVertex); - } - return shape; - }; - // clear() { - // this.m_vertices.length = 0; - // this.m_count = 0; - // } - ChainShape.prototype.getType = function () { - return this.m_type; - }; - ChainShape.prototype.getRadius = function () { - return this.m_radius; - }; - /** - * @internal - * Create a loop. This automatically adjusts connectivity. - * - * @param vertices an array of vertices, these are copied - * @param count the vertex count - */ - ChainShape.prototype._createLoop = function (vertices) { - if (vertices.length < 3) { - return; - } - for (var i = 1; i < vertices.length; ++i) { - vertices[i - 1]; - vertices[i]; - } - this.m_vertices = []; - this.m_count = vertices.length + 1; - for (var i = 0; i < vertices.length; ++i) { - this.m_vertices[i] = Vec2.clone(vertices[i]); - } - this.m_vertices[vertices.length] = Vec2.clone(vertices[0]); - this.m_prevVertex = this.m_vertices[this.m_count - 2]; - this.m_nextVertex = this.m_vertices[1]; - this.m_hasPrevVertex = true; - this.m_hasNextVertex = true; - return this; - }; - /** - * @internal - * Create a chain with isolated end vertices. - * - * @param vertices an array of vertices, these are copied - */ - ChainShape.prototype._createChain = function (vertices) { - for (var i = 1; i < vertices.length; ++i) { - // If the code crashes here, it means your vertices are too close together. - vertices[i - 1]; - vertices[i]; - } - this.m_count = vertices.length; - for (var i = 0; i < vertices.length; ++i) { - this.m_vertices[i] = Vec2.clone(vertices[i]); - } - this.m_hasPrevVertex = false; - this.m_hasNextVertex = false; - this.m_prevVertex = null; - this.m_nextVertex = null; - return this; - }; - /** @hidden */ - ChainShape.prototype._reset = function () { - if (this.m_isLoop) { - this._createLoop(this.m_vertices); - } - else { - this._createChain(this.m_vertices); - } - }; - /** - * Establish connectivity to a vertex that precedes the first vertex. Don't call - * this for loops. - */ - ChainShape.prototype.setPrevVertex = function (prevVertex) { - // todo: copy or reference - this.m_prevVertex = prevVertex; - this.m_hasPrevVertex = true; - }; - ChainShape.prototype.getPrevVertex = function () { - return this.m_prevVertex; - }; - /** - * Establish connectivity to a vertex that follows the last vertex. Don't call - * this for loops. - */ - ChainShape.prototype.setNextVertex = function (nextVertex) { - // todo: copy or reference - this.m_nextVertex = nextVertex; - this.m_hasNextVertex = true; - }; - ChainShape.prototype.getNextVertex = function () { - return this.m_nextVertex; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - ChainShape.prototype._clone = function () { - var clone = new ChainShape(); - clone._createChain(this.m_vertices); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_prevVertex = this.m_prevVertex; - clone.m_nextVertex = this.m_nextVertex; - clone.m_hasPrevVertex = this.m_hasPrevVertex; - clone.m_hasNextVertex = this.m_hasNextVertex; - return clone; - }; - /** - * Get the number of child primitives. - */ - ChainShape.prototype.getChildCount = function () { - // edge count = vertex count - 1 - return this.m_count - 1; - }; - // Get a child edge. - ChainShape.prototype.getChildEdge = function (edge, childIndex) { - edge.m_type = EdgeShape.TYPE; - edge.m_radius = this.m_radius; - edge.m_vertex1 = this.m_vertices[childIndex]; - edge.m_vertex2 = this.m_vertices[childIndex + 1]; - if (childIndex > 0) { - edge.m_vertex0 = this.m_vertices[childIndex - 1]; - edge.m_hasVertex0 = true; - } - else { - edge.m_vertex0 = this.m_prevVertex; - edge.m_hasVertex0 = this.m_hasPrevVertex; - } - if (childIndex < this.m_count - 2) { - edge.m_vertex3 = this.m_vertices[childIndex + 2]; - edge.m_hasVertex3 = true; - } - else { - edge.m_vertex3 = this.m_nextVertex; - edge.m_hasVertex3 = this.m_hasNextVertex; - } - }; - ChainShape.prototype.getVertex = function (index) { - if (index < this.m_count) { - return this.m_vertices[index]; - } - else { - return this.m_vertices[0]; - } - }; - ChainShape.prototype.isLoop = function () { - return this.m_isLoop; - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * This always return false. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - ChainShape.prototype.testPoint = function (xf, p) { + } + var t = numerator / denominator; + if (t < 0 || input2.maxFraction < t) { return false; - }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - ChainShape.prototype.rayCast = function (output, input, xf, childIndex) { - var edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1)); - return edgeShape.rayCast(output, input, xf, 0); - }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - ChainShape.prototype.computeAABB = function (aabb, xf, childIndex) { - transformVec2(v1$1, xf, this.getVertex(childIndex)); - transformVec2(v2, xf, this.getVertex(childIndex + 1)); - AABB.combinePoints(aabb, v1$1, v2); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * Chains have zero mass. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - ChainShape.prototype.computeMass = function (massData, density) { - massData.mass = 0.0; - zeroVec2(massData.center); - massData.I = 0.0; - }; - ChainShape.prototype.computeDistanceProxy = function (proxy, childIndex) { - proxy.m_vertices[0] = this.getVertex(childIndex); - proxy.m_vertices[1] = this.getVertex(childIndex + 1); - proxy.m_count = 2; - proxy.m_radius = this.m_radius; - }; - ChainShape.TYPE = "chain"; - return ChainShape; -}(Shape)); -var Chain = ChainShape; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_max$1 = Math.max; -/** @internal */ var math_min$3 = Math.min; -/** @internal */ var temp$1 = vec2(0, 0); -/** @internal */ var e$1 = vec2(0, 0); -/** @internal */ var e1$1 = vec2(0, 0); -/** @internal */ var e2$1 = vec2(0, 0); -/** @internal */ var center = vec2(0, 0); -/** @internal */ var s = vec2(0, 0); -/** - * A convex polygon. It is assumed that the interior of the polygon is to the - * left of each edge. Polygons have a maximum number of vertices equal to - * Settings.maxPolygonVertices. In most cases you should not need many vertices - * for a convex polygon. extends Shape - */ -var PolygonShape = /** @class */ (function (_super) { - __extends(PolygonShape, _super); - function PolygonShape(vertices) { - var _this = this; - // @ts-ignore - if (!(_this instanceof PolygonShape)) { - return new PolygonShape(vertices); - } - _this = _super.call(this) || this; - _this.m_type = PolygonShape.TYPE; - _this.m_radius = SettingsInternal.polygonRadius; - _this.m_centroid = Vec2.zero(); - _this.m_vertices = []; - _this.m_normals = []; - _this.m_count = 0; - if (vertices && vertices.length) { - _this._set(vertices); - } - return _this; - } - /** @internal */ - PolygonShape.prototype._serialize = function () { - return { - type: this.m_type, - vertices: this.m_vertices, - }; - }; - /** @internal */ - PolygonShape._deserialize = function (data, fixture, restore) { - var vertices = []; - if (data.vertices) { - for (var i = 0; i < data.vertices.length; i++) { - vertices.push(restore(Vec2, data.vertices[i])); - } - } - var shape = new PolygonShape(vertices); - return shape; - }; - PolygonShape.prototype.getType = function () { - return this.m_type; - }; - PolygonShape.prototype.getRadius = function () { - return this.m_radius; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - PolygonShape.prototype._clone = function () { - var clone = new PolygonShape(); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_count = this.m_count; - clone.m_centroid.setVec2(this.m_centroid); - for (var i = 0; i < this.m_count; i++) { - clone.m_vertices.push(this.m_vertices[i].clone()); - } - for (var i = 0; i < this.m_normals.length; i++) { - clone.m_normals.push(this.m_normals[i].clone()); - } - return clone; - }; - /** - * Get the number of child primitives. - */ - PolygonShape.prototype.getChildCount = function () { - return 1; - }; - /** @hidden */ - PolygonShape.prototype._reset = function () { - this._set(this.m_vertices); - }; - /** - * @internal - * - * Create a convex hull from the given array of local points. The count must be - * in the range [3, Settings.maxPolygonVertices]. - * - * Warning: the points may be re-ordered, even if they form a convex polygon - * Warning: collinear points are handled but not removed. Collinear points may - * lead to poor stacking behavior. - */ - PolygonShape.prototype._set = function (vertices) { - if (vertices.length < 3) { - this._setAsBox(1.0, 1.0); - return; - } - var n = math_min$3(vertices.length, SettingsInternal.maxPolygonVertices); - // Perform welding and copy vertices into local buffer. - var ps = []; // [Settings.maxPolygonVertices]; - for (var i = 0; i < n; ++i) { - var v = vertices[i]; - var unique = true; - for (var j = 0; j < ps.length; ++j) { - if (Vec2.distanceSquared(v, ps[j]) < 0.25 * SettingsInternal.linearSlopSquared) { - unique = false; - break; - } - } - if (unique) { - ps.push(Vec2.clone(v)); - } - } - n = ps.length; - if (n < 3) { - this._setAsBox(1.0, 1.0); - return; - } - // Create the convex hull using the Gift wrapping algorithm - // http://en.wikipedia.org/wiki/Gift_wrapping_algorithm - // Find the right most point on the hull (in case of multiple points bottom most is used) - var i0 = 0; - var x0 = ps[0].x; - for (var i = 1; i < n; ++i) { - var x = ps[i].x; - if (x > x0 || (x === x0 && ps[i].y < ps[i0].y)) { - i0 = i; - x0 = x; - } - } - var hull = []; // [Settings.maxPolygonVertices]; - var m = 0; - var ih = i0; - while (true) { - hull[m] = ih; - var ie = 0; - for (var j = 1; j < n; ++j) { - if (ie === ih) { - ie = j; - continue; - } - var r = Vec2.sub(ps[ie], ps[hull[m]]); - var v = Vec2.sub(ps[j], ps[hull[m]]); - var c = Vec2.crossVec2Vec2(r, v); - // c < 0 means counter-clockwise wrapping, c > 0 means clockwise wrapping - if (c < 0.0) { - ie = j; - } - // Collinearity check - if (c === 0.0 && v.lengthSquared() > r.lengthSquared()) { - ie = j; - } - } - ++m; - ih = ie; - if (ie === i0) { - break; - } - } - if (m < 3) { - this._setAsBox(1.0, 1.0); - return; - } - this.m_count = m; - // Copy vertices. - this.m_vertices = []; - for (var i = 0; i < m; ++i) { - this.m_vertices[i] = ps[hull[i]]; - } - // Compute normals. Ensure the edges have non-zero length. - for (var i = 0; i < m; ++i) { - var i1 = i; - var i2 = i + 1 < m ? i + 1 : 0; - var edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]); - this.m_normals[i] = Vec2.crossVec2Num(edge, 1.0); - this.m_normals[i].normalize(); - } - // Compute the polygon centroid. - this.m_centroid = computeCentroid(this.m_vertices, m); - }; - /** @internal */ PolygonShape.prototype._setAsBox = function (hx, hy, center, angle) { - // start with right-bottom, counter-clockwise, as in Gift wrapping algorithm in PolygonShape._set() - this.m_vertices[0] = Vec2.neo(hx, -hy); - this.m_vertices[1] = Vec2.neo(hx, hy); - this.m_vertices[2] = Vec2.neo(-hx, hy); - this.m_vertices[3] = Vec2.neo(-hx, -hy); - this.m_normals[0] = Vec2.neo(1.0, 0.0); - this.m_normals[1] = Vec2.neo(0.0, 1.0); - this.m_normals[2] = Vec2.neo(-1.0, 0.0); - this.m_normals[3] = Vec2.neo(0.0, -1.0); - this.m_count = 4; - if (center && Vec2.isValid(center)) { - angle = angle || 0; - copyVec2(this.m_centroid, center); - var xf = Transform.identity(); - xf.p.setVec2(center); - xf.q.setAngle(angle); - // Transform vertices and normals. - for (var i = 0; i < this.m_count; ++i) { - this.m_vertices[i] = Transform.mulVec2(xf, this.m_vertices[i]); - this.m_normals[i] = Rot.mulVec2(xf.q, this.m_normals[i]); - } - } - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - PolygonShape.prototype.testPoint = function (xf, p) { - var pLocal = detransformVec2(temp$1, xf, p); - for (var i = 0; i < this.m_count; ++i) { - var dot = dotVec2(this.m_normals[i], pLocal) - dotVec2(this.m_normals[i], this.m_vertices[i]); - if (dot > 0.0) { - return false; - } - } - return true; - }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - PolygonShape.prototype.rayCast = function (output, input, xf, childIndex) { - // Put the ray into the polygon's frame of reference. - var p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p)); - var p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p)); - var d = Vec2.sub(p2, p1); - var lower = 0.0; - var upper = input.maxFraction; - var index = -1; - for (var i = 0; i < this.m_count; ++i) { - // p = p1 + a * d - // dot(normal, p - v) = 0 - // dot(normal, p1 - v) + a * dot(normal, d) = 0 - var numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1)); - var denominator = Vec2.dot(this.m_normals[i], d); - if (denominator == 0.0) { - if (numerator < 0.0) { - return false; - } - } - else { - // Note: we want this predicate without division: - // lower < numerator / denominator, where denominator < 0 - // Since denominator < 0, we have to flip the inequality: - // lower < numerator / denominator <==> denominator * lower > numerator. - if (denominator < 0.0 && numerator < lower * denominator) { - // Increase lower. - // The segment enters this half-space. - lower = numerator / denominator; - index = i; - } - else if (denominator > 0.0 && numerator < upper * denominator) { - // Decrease upper. - // The segment exits this half-space. - upper = numerator / denominator; - } - } - // The use of epsilon here causes the assert on lower to trip - // in some cases. Apparently the use of epsilon was to make edge - // shapes work, but now those are handled separately. - // if (upper < lower - matrix.EPSILON) - if (upper < lower) { - return false; - } - } - if (index >= 0) { - output.fraction = lower; - output.normal = Rot.mulVec2(xf.q, this.m_normals[index]); - return true; - } + } + var q = Vec2.add(p1, Vec2.mulNumVec2(t, d2)); + var r = Vec2.sub(v22, v122); + var rr = Vec2.dot(r, r); + if (rr == 0) { return false; - }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - PolygonShape.prototype.computeAABB = function (aabb, xf, childIndex) { - var minX = Infinity; - var minY = Infinity; - var maxX = -Infinity; - var maxY = -Infinity; - for (var i = 0; i < this.m_count; ++i) { - var v = transformVec2(temp$1, xf, this.m_vertices[i]); - minX = math_min$3(minX, v.x); - maxX = math_max$1(maxX, v.x); - minY = math_min$3(minY, v.y); - maxY = math_max$1(maxY, v.y); - } - setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius); - setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - PolygonShape.prototype.computeMass = function (massData, density) { - zeroVec2(center); - var area = 0.0; - var I = 0.0; - // s is the reference point for forming triangles. - // It's location doesn't change the result (except for rounding error). - zeroVec2(s); - // This code would put the reference point inside the polygon. - for (var i = 0; i < this.m_count; ++i) { - plusVec2(s, this.m_vertices[i]); - } - scaleVec2(s, 1.0 / this.m_count, s); - var k_inv3 = 1.0 / 3.0; - for (var i = 0; i < this.m_count; ++i) { - // Triangle vertices. - subVec2(e1$1, this.m_vertices[i], s); - if (i + 1 < this.m_count) { - subVec2(e2$1, this.m_vertices[i + 1], s); - } - else { - subVec2(e2$1, this.m_vertices[0], s); - } - var D = crossVec2Vec2(e1$1, e2$1); - var triangleArea = 0.5 * D; - area += triangleArea; - // Area weighted centroid - combine2Vec2(temp$1, triangleArea * k_inv3, e1$1, triangleArea * k_inv3, e2$1); - plusVec2(center, temp$1); - var ex1 = e1$1.x; - var ey1 = e1$1.y; - var ex2 = e2$1.x; - var ey2 = e2$1.y; - var intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2; - var inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2; - I += (0.25 * k_inv3 * D) * (intx2 + inty2); - } - // Total mass - massData.mass = density * area; - scaleVec2(center, 1.0 / area, center); - addVec2(massData.center, center, s); - // Inertia tensor relative to the local origin (point s). - massData.I = density * I; - // Shift to center of mass then to original body origin. - massData.I += massData.mass * (dotVec2(massData.center, massData.center) - dotVec2(center, center)); - }; - /** - * Validate convexity. This is a very time consuming operation. - * @returns true if valid - */ - PolygonShape.prototype.validate = function () { - for (var i = 0; i < this.m_count; ++i) { - var i1 = i; - var i2 = i < this.m_count - 1 ? i1 + 1 : 0; - var p = this.m_vertices[i1]; - subVec2(e$1, this.m_vertices[i2], p); - for (var j = 0; j < this.m_count; ++j) { - if (j == i1 || j == i2) { - continue; - } - var c = crossVec2Vec2(e$1, subVec2(temp$1, this.m_vertices[j], p)); - if (c < 0.0) { - return false; - } - } - } - return true; - }; - PolygonShape.prototype.computeDistanceProxy = function (proxy) { - for (var i = 0; i < this.m_count; ++i) { - proxy.m_vertices[i] = this.m_vertices[i]; - } - proxy.m_vertices.length = this.m_count; - proxy.m_count = this.m_count; - proxy.m_radius = this.m_radius; - }; - PolygonShape.TYPE = "polygon"; - return PolygonShape; -}(Shape)); -/** @internal */ function computeCentroid(vs, count) { - var c = Vec2.zero(); - var area = 0.0; - // pRef is the reference point for forming triangles. - // It's location doesn't change the result (except for rounding error). - var pRef = Vec2.zero(); - var i; - var inv3 = 1.0 / 3.0; - for (var i = 0; i < count; ++i) { - // Triangle vertices. - var p1 = pRef; - var p2 = vs[i]; - var p3 = i + 1 < count ? vs[i + 1] : vs[0]; - var e1_1 = Vec2.sub(p2, p1); - var e2_1 = Vec2.sub(p3, p1); - var D = Vec2.crossVec2Vec2(e1_1, e2_1); - var triangleArea = 0.5 * D; - area += triangleArea; - // Area weighted centroid - combine3Vec2(temp$1, 1, p1, 1, p2, 1, p3); - plusScaleVec2(c, triangleArea * inv3, temp$1); - } - c.mul(1.0 / area); - return c; -} -var Polygon = PolygonShape; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_sqrt = Math.sqrt; -/** @internal */ var math_PI$4 = Math.PI; -/** @internal */ var temp = vec2(0, 0); -var CircleShape = /** @class */ (function (_super) { - __extends(CircleShape, _super); - function CircleShape(a, b) { - var _this = this; - // @ts-ignore - if (!(_this instanceof CircleShape)) { - return new CircleShape(a, b); - } - _this = _super.call(this) || this; - _this.m_type = CircleShape.TYPE; - _this.m_p = Vec2.zero(); - _this.m_radius = 1; - if (typeof a === "object" && Vec2.isValid(a)) { - _this.m_p.setVec2(a); - if (typeof b === "number") { - _this.m_radius = b; - } - } - else if (typeof a === "number") { - _this.m_radius = a; - } - return _this; - } - /** @internal */ - CircleShape.prototype._serialize = function () { - return { - type: this.m_type, - p: this.m_p, - radius: this.m_radius, - }; - }; - /** @internal */ - CircleShape._deserialize = function (data) { - return new CircleShape(data.p, data.radius); - }; - /** @hidden */ - CircleShape.prototype._reset = function () { - // noop - }; - CircleShape.prototype.getType = function () { - return this.m_type; - }; - CircleShape.prototype.getRadius = function () { - return this.m_radius; - }; - CircleShape.prototype.getCenter = function () { - return this.m_p; - }; - /** - * @internal @deprecated Shapes should be treated as immutable. - * - * clone the concrete shape. - */ - CircleShape.prototype._clone = function () { - var clone = new CircleShape(); - clone.m_type = this.m_type; - clone.m_radius = this.m_radius; - clone.m_p = this.m_p.clone(); - return clone; - }; - /** - * Get the number of child primitives. - */ - CircleShape.prototype.getChildCount = function () { - return 1; - }; - /** - * Test a point for containment in this shape. This only works for convex - * shapes. - * - * @param xf The shape world transform. - * @param p A point in world coordinates. - */ - CircleShape.prototype.testPoint = function (xf, p) { - var center = transformVec2(temp, xf, this.m_p); - return distSqrVec2(p, center) <= this.m_radius * this.m_radius; - }; - /** - * Cast a ray against a child shape. - * - * @param output The ray-cast results. - * @param input The ray-cast input parameters. - * @param xf The transform to be applied to the shape. - * @param childIndex The child shape index - */ - CircleShape.prototype.rayCast = function (output, input, xf, childIndex) { - // Collision Detection in Interactive 3D Environments by Gino van den Bergen - // From Section 3.1.2 - // x = s + a * r - // norm(x) = radius - var position = Vec2.add(xf.p, Rot.mulVec2(xf.q, this.m_p)); - var s = Vec2.sub(input.p1, position); - var b = Vec2.dot(s, s) - this.m_radius * this.m_radius; - // Solve quadratic equation. - var r = Vec2.sub(input.p2, input.p1); - var c = Vec2.dot(s, r); - var rr = Vec2.dot(r, r); - var sigma = c * c - rr * b; - // Check for negative discriminant and short segment. - if (sigma < 0.0 || rr < EPSILON) { - return false; - } - // Find the point of intersection of the line with the circle. - var a = -(c + math_sqrt(sigma)); - // Is the intersection point on the segment? - if (0.0 <= a && a <= input.maxFraction * rr) { - a /= rr; - output.fraction = a; - output.normal = Vec2.add(s, Vec2.mulNumVec2(a, r)); - output.normal.normalize(); - return true; - } + } + var s2 = Vec2.dot(Vec2.sub(q, v122), r) / rr; + if (s2 < 0 || 1 < s2) { return false; - }; - /** - * Given a transform, compute the associated axis aligned bounding box for a - * child shape. - * - * @param aabb Returns the axis aligned box. - * @param xf The world transform of the shape. - * @param childIndex The child shape - */ - CircleShape.prototype.computeAABB = function (aabb, xf, childIndex) { - var p = transformVec2(temp, xf, this.m_p); - setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius); - setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius); - }; - /** - * Compute the mass properties of this shape using its dimensions and density. - * The inertia tensor is computed about the local origin. - * - * @param massData Returns the mass data for this shape. - * @param density The density in kilograms per meter squared. - */ - CircleShape.prototype.computeMass = function (massData, density) { - massData.mass = density * math_PI$4 * this.m_radius * this.m_radius; - copyVec2(massData.center, this.m_p); - // inertia about the local origin - massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + lengthSqrVec2(this.m_p)); - }; - CircleShape.prototype.computeDistanceProxy = function (proxy) { - proxy.m_vertices[0] = this.m_p; - proxy.m_vertices.length = 1; - proxy.m_count = 1; - proxy.m_radius = this.m_radius; - }; - CircleShape.TYPE = "circle"; - return CircleShape; -}(Shape)); -var Circle = CircleShape; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$5 = Math.abs; -/** @internal */ var math_PI$3 = Math.PI; -/** @internal */ var DEFAULTS$a = { - frequencyHz: 0.0, - dampingRatio: 0.0 -}; -/** - * A distance joint constrains two points on two bodies to remain at a fixed - * distance from each other. You can view this as a massless, rigid rod. - */ -var DistanceJoint = /** @class */ (function (_super) { - __extends(DistanceJoint, _super); - function DistanceJoint(def, bodyA, bodyB, anchorA, anchorB) { - var _this = this; - // @ts-ignore - if (!(_this instanceof DistanceJoint)) { - return new DistanceJoint(def, bodyA, bodyB, anchorA, anchorB); - } - // order of constructor arguments is changed in v0.2 - if (bodyB && anchorA && ("m_type" in anchorA) && ("x" in bodyB) && ("y" in bodyB)) { - var temp = bodyB; - bodyB = anchorA; - anchorA = temp; - } - def = options(def, DEFAULTS$a); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = DistanceJoint.TYPE; - // Solver shared - _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.zero()); - _this.m_length = Number.isFinite(def.length) ? def.length : - Vec2.distance(bodyA.getWorldPoint(_this.m_localAnchorA), bodyB.getWorldPoint(_this.m_localAnchorB)); - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_impulse = 0.0; - _this.m_gamma = 0.0; - _this.m_bias = 0.0; - return _this; - // 1-D constrained system - // m (v2 - v1) = lambda - // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass. - // x2 = x1 + h * v2 - // 1-D mass-damper-spring system - // m (v2 - v1) + h * d * v2 + h * k * - // C = norm(p2 - p1) - L - // u = (p2 - p1) / norm(p2 - p1) - // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1)) - // J = [-u -cross(r1, u) u cross(r2, u)] - // K = J * invM * JT - // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2 - } - /** @internal */ - DistanceJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - length: this.m_length, - impulse: this.m_impulse, - gamma: this.m_gamma, - bias: this.m_bias, - }; - }; - /** @internal */ - DistanceJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new DistanceJoint(data); - return joint; - }; - /** @hidden */ - DistanceJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (def.length > 0) { - this.m_length = +def.length; - } - else if (def.length < 0) ; - else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) { - this.m_length = Vec2.distance(this.m_bodyA.getWorldPoint(this.m_localAnchorA), this.m_bodyB.getWorldPoint(this.m_localAnchorB)); - } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; - } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - DistanceJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - DistanceJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Set the natural length. Manipulating the length can lead to non-physical - * behavior when the frequency is zero. - */ - DistanceJoint.prototype.setLength = function (length) { - this.m_length = length; - }; - /** - * Get the natural length. - */ - DistanceJoint.prototype.getLength = function () { - return this.m_length; - }; - DistanceJoint.prototype.setFrequency = function (hz) { - this.m_frequencyHz = hz; - }; - DistanceJoint.prototype.getFrequency = function () { - return this.m_frequencyHz; - }; - DistanceJoint.prototype.setDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - DistanceJoint.prototype.getDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - DistanceJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - DistanceJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - DistanceJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - DistanceJoint.prototype.getReactionTorque = function (inv_dt) { - return 0.0; - }; - DistanceJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - this.m_u = Vec2.sub(Vec2.add(cB, this.m_rB), Vec2.add(cA, this.m_rA)); - // Handle singularity. - var length = this.m_u.length(); - if (length > SettingsInternal.linearSlop) { - this.m_u.mul(1.0 / length); - } - else { - this.m_u.setNum(0.0, 0.0); - } - var crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u); - var crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u); - var invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu; - // Compute the effective mass matrix. - this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0; - if (this.m_frequencyHz > 0.0) { - var C = length - this.m_length; - // Frequency - var omega = 2.0 * math_PI$3 * this.m_frequencyHz; - // Damping coefficient - var d = 2.0 * this.m_mass * this.m_dampingRatio * omega; - // Spring stiffness - var k = this.m_mass * omega * omega; - // magic formulas - var h = step.dt; - this.m_gamma = h * (d + h * k); - this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0; - this.m_bias = C * h * k * this.m_gamma; - invMass += this.m_gamma; - this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0; - } - else { - this.m_gamma = 0.0; - this.m_bias = 0.0; - } - if (step.warmStarting) { - // Scale the impulse to support a variable time step. - this.m_impulse *= step.dtRatio; - var P = Vec2.mulNumVec2(this.m_impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - DistanceJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - // Cdot = dot(u, v + cross(w, r)) - var vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA)); - var vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)); - var Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA); - var impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse); - this.m_impulse += impulse; - var P = Vec2.mulNumVec2(impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - DistanceJoint.prototype.solvePositionConstraints = function (step) { - if (this.m_frequencyHz > 0.0) { - // There is no position correction for soft distance constraints. - return true; - } - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); - var u = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA)); - var length = u.normalize(); - var C = clamp(length - this.m_length, -SettingsInternal.maxLinearCorrection, SettingsInternal.maxLinearCorrection); - var impulse = -this.m_mass * C; - var P = Vec2.mulNumVec2(impulse, u); - cA.subMul(this.m_invMassA, P); - aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P); - cB.addMul(this.m_invMassB, P); - aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P); - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return math_abs$5(C) < SettingsInternal.linearSlop; - }; - DistanceJoint.TYPE = "distance-joint"; - return DistanceJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var DEFAULTS$9 = { - maxForce: 0.0, - maxTorque: 0.0, -}; -/** - * Friction joint. This is used for top-down friction. It provides 2D - * translational friction and angular friction. - */ -var FrictionJoint = /** @class */ (function (_super) { - __extends(FrictionJoint, _super); - function FrictionJoint(def, bodyA, bodyB, anchor) { - var _this = this; - // @ts-ignore - if (!(_this instanceof FrictionJoint)) { - return new FrictionJoint(def, bodyA, bodyB, anchor); - } - def = options(def, DEFAULTS$9); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = FrictionJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - // Solver shared - _this.m_linearImpulse = Vec2.zero(); - _this.m_angularImpulse = 0.0; - _this.m_maxForce = def.maxForce; - _this.m_maxTorque = def.maxTorque; - return _this; - // Point-to-point constraint - // Cdot = v2 - v1 - // = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // Angle constraint - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 - } - /** @internal */ - FrictionJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - maxForce: this.m_maxForce, - maxTorque: this.m_maxTorque, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - }; - }; - /** @internal */ - FrictionJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new FrictionJoint(data); - return joint; - }; - /** @hidden */ - FrictionJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (Number.isFinite(def.maxForce)) { - this.m_maxForce = def.maxForce; - } - if (Number.isFinite(def.maxTorque)) { - this.m_maxTorque = def.maxTorque; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - FrictionJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - FrictionJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Set the maximum friction force in N. - */ - FrictionJoint.prototype.setMaxForce = function (force) { - this.m_maxForce = force; - }; - /** - * Get the maximum friction force in N. - */ - FrictionJoint.prototype.getMaxForce = function () { - return this.m_maxForce; - }; - /** - * Set the maximum friction torque in N*m. - */ - FrictionJoint.prototype.setMaxTorque = function (torque) { - this.m_maxTorque = torque; - }; - /** - * Get the maximum friction torque in N*m. - */ - FrictionJoint.prototype.getMaxTorque = function () { - return this.m_maxTorque; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - FrictionJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - FrictionJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - FrictionJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - FrictionJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_angularImpulse; - }; - FrictionJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective mass matrix. - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // [ 0 -1 0 1] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var K = new Mat22(); - K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y - * this.m_rB.y; - K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; - K.ey.x = K.ex.y; - K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x - * this.m_rB.x; - this.m_linearMass = K.getInverse(); - this.m_angularMass = iA + iB; - if (this.m_angularMass > 0.0) { - this.m_angularMass = 1.0 / this.m_angularMass; - } - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_linearImpulse.mul(step.dtRatio); - this.m_angularImpulse *= step.dtRatio; - var P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse); - } - else { - this.m_linearImpulse.setZero(); - this.m_angularImpulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - FrictionJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var h = step.dt; - // Solve angular friction - { - var Cdot = wB - wA; - var impulse = -this.m_angularMass * Cdot; - var oldImpulse = this.m_angularImpulse; - var maxImpulse = h * this.m_maxTorque; - this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_angularImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve linear friction - { - var Cdot = Vec2.sub(Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)), Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA))); - var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); - var oldImpulse = this.m_linearImpulse; - this.m_linearImpulse.add(impulse); - var maxImpulse = h * this.m_maxForce; - if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) { - this.m_linearImpulse.normalize(); - this.m_linearImpulse.mul(maxImpulse); - } - impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); - vA.subMul(mA, impulse); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); - vB.addMul(mB, impulse); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - FrictionJoint.prototype.solvePositionConstraints = function (step) { - return true; - }; - FrictionJoint.TYPE = "friction-joint"; - return FrictionJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** - * A 3-by-3 matrix. Stored in column-major order. - */ -var Mat33 = /** @class */ (function () { - function Mat33(a, b, c) { - if (typeof a === "object" && a !== null) { - this.ex = Vec3.clone(a); - this.ey = Vec3.clone(b); - this.ez = Vec3.clone(c); - } - else { - this.ex = Vec3.zero(); - this.ey = Vec3.zero(); - this.ez = Vec3.zero(); - } - } - /** @hidden */ - Mat33.prototype.toString = function () { - return JSON.stringify(this); - }; - Mat33.isValid = function (obj) { - if (obj === null || typeof obj === "undefined") { - return false; - } - return Vec3.isValid(obj.ex) && Vec3.isValid(obj.ey) && Vec3.isValid(obj.ez); - }; - Mat33.assert = function (o) { - }; - /** - * Set this matrix to all zeros. - */ - Mat33.prototype.setZero = function () { - this.ex.setZero(); - this.ey.setZero(); - this.ez.setZero(); - return this; - }; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. - */ - Mat33.prototype.solve33 = function (v) { - // let det = matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, this.ez)); - var cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; - var cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; - var cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; - var det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z; - if (det !== 0.0) { - det = 1.0 / det; - } - var r = new Vec3(); - // r.x = det * matrix.dotVec3(v, matrix.newCrossVec3(this.ey, this.ez)); - cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; - cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; - cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; - r.x = det * (v.x * cross_x + v.y * cross_y + v.z * cross_z); - // r.y = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(v, this.ez)); - cross_x = v.y * this.ez.z - v.z * this.ez.y; - cross_y = v.z * this.ez.x - v.x * this.ez.z; - cross_z = v.x * this.ez.y - v.y * this.ez.x; - r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); - // r.z = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, v)); - cross_x = this.ey.y * v.z - this.ey.z * v.y; - cross_y = this.ey.z * v.x - this.ey.x * v.z; - cross_z = this.ey.x * v.y - this.ey.y * v.x; - r.z = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); - return r; - }; - /** - * Solve A * x = b, where b is a column vector. This is more efficient than - * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix - * equation. - */ - Mat33.prototype.solve22 = function (v) { - var a11 = this.ex.x; - var a12 = this.ey.x; - var a21 = this.ex.y; - var a22 = this.ey.y; - var det = a11 * a22 - a12 * a21; - if (det !== 0.0) { - det = 1.0 / det; - } - var r = Vec2.zero(); - r.x = det * (a22 * v.x - a12 * v.y); - r.y = det * (a11 * v.y - a21 * v.x); - return r; - }; - /** - * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if - * singular. - */ - Mat33.prototype.getInverse22 = function (M) { - var a = this.ex.x; - var b = this.ey.x; - var c = this.ex.y; - var d = this.ey.y; - var det = a * d - b * c; - if (det !== 0.0) { - det = 1.0 / det; - } - M.ex.x = det * d; - M.ey.x = -det * b; - M.ex.z = 0.0; - M.ex.y = -det * c; - M.ey.y = det * a; - M.ey.z = 0.0; - M.ez.x = 0.0; - M.ez.y = 0.0; - M.ez.z = 0.0; - }; - /** - * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix - * if singular. - */ - Mat33.prototype.getSymInverse33 = function (M) { - var det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez)); - if (det !== 0.0) { - det = 1.0 / det; - } - var a11 = this.ex.x; - var a12 = this.ey.x; - var a13 = this.ez.x; - var a22 = this.ey.y; - var a23 = this.ez.y; - var a33 = this.ez.z; - M.ex.x = det * (a22 * a33 - a23 * a23); - M.ex.y = det * (a13 * a23 - a12 * a33); - M.ex.z = det * (a12 * a23 - a13 * a22); - M.ey.x = M.ex.y; - M.ey.y = det * (a11 * a33 - a13 * a13); - M.ey.z = det * (a13 * a12 - a11 * a23); - M.ez.x = M.ex.z; - M.ez.y = M.ey.z; - M.ez.z = det * (a11 * a22 - a12 * a12); - }; - Mat33.mul = function (a, b) { - if (b && "z" in b && "y" in b && "x" in b) { - var x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z; - var y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z; - var z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z; - return new Vec3(x, y, z); - } - else if (b && "y" in b && "x" in b) { - var x = a.ex.x * b.x + a.ey.x * b.y; - var y = a.ex.y * b.x + a.ey.y * b.y; - return Vec2.neo(x, y); - } - }; - Mat33.mulVec3 = function (a, b) { - var x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z; - var y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z; - var z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z; - return new Vec3(x, y, z); - }; - Mat33.mulVec2 = function (a, b) { - var x = a.ex.x * b.x + a.ey.x * b.y; - var y = a.ex.y * b.x + a.ey.y * b.y; - return Vec2.neo(x, y); - }; - Mat33.add = function (a, b) { - return new Mat33(Vec3.add(a.ex, b.ex), Vec3.add(a.ey, b.ey), Vec3.add(a.ez, b.ez)); - }; - return Mat33; -}()); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$4 = Math.abs; -// todo: use string? -/** @internal */ var LimitState$2; -(function (LimitState) { - LimitState[LimitState["inactiveLimit"] = 0] = "inactiveLimit"; - LimitState[LimitState["atLowerLimit"] = 1] = "atLowerLimit"; - LimitState[LimitState["atUpperLimit"] = 2] = "atUpperLimit"; - LimitState[LimitState["equalLimits"] = 3] = "equalLimits"; -})(LimitState$2 || (LimitState$2 = {})); -/** @internal */ var DEFAULTS$8 = { - lowerAngle: 0.0, - upperAngle: 0.0, - maxMotorTorque: 0.0, - motorSpeed: 0.0, - enableLimit: false, - enableMotor: false -}; -/** - * A revolute joint constrains two bodies to share a common point while they are - * free to rotate about the point. The relative rotation about the shared point - * is the joint angle. You can limit the relative rotation with a joint limit - * that specifies a lower and upper angle. You can use a motor to drive the - * relative rotation about the shared point. A maximum motor torque is provided - * so that infinite forces are not generated. - */ -var RevoluteJoint = /** @class */ (function (_super) { - __extends(RevoluteJoint, _super); - function RevoluteJoint(def, bodyA, bodyB, anchor) { - var _a, _b, _c, _d, _e, _f; - var _this = this; - // @ts-ignore - if (!(_this instanceof RevoluteJoint)) { - return new RevoluteJoint(def, bodyA, bodyB, anchor); - } - def = def !== null && def !== void 0 ? def : {}; - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_mass = new Mat33(); - _this.m_limitState = LimitState$2.inactiveLimit; - _this.m_type = RevoluteJoint.TYPE; - if (Vec2.isValid(anchor)) { - _this.m_localAnchorA = bodyA.getLocalPoint(anchor); - } - else if (Vec2.isValid(def.localAnchorA)) { - _this.m_localAnchorA = Vec2.clone(def.localAnchorA); - } - else { - _this.m_localAnchorA = Vec2.zero(); - } - if (Vec2.isValid(anchor)) { - _this.m_localAnchorB = bodyB.getLocalPoint(anchor); - } - else if (Vec2.isValid(def.localAnchorB)) { - _this.m_localAnchorB = Vec2.clone(def.localAnchorB); - } - else { - _this.m_localAnchorB = Vec2.zero(); - } - if (Number.isFinite(def.referenceAngle)) { - _this.m_referenceAngle = def.referenceAngle; - } - else { - _this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle(); - } - _this.m_impulse = new Vec3(); - _this.m_motorImpulse = 0.0; - _this.m_lowerAngle = (_a = def.lowerAngle) !== null && _a !== void 0 ? _a : DEFAULTS$8.lowerAngle; - _this.m_upperAngle = (_b = def.upperAngle) !== null && _b !== void 0 ? _b : DEFAULTS$8.upperAngle; - _this.m_maxMotorTorque = (_c = def.maxMotorTorque) !== null && _c !== void 0 ? _c : DEFAULTS$8.maxMotorTorque; - _this.m_motorSpeed = (_d = def.motorSpeed) !== null && _d !== void 0 ? _d : DEFAULTS$8.motorSpeed; - _this.m_enableLimit = (_e = def.enableLimit) !== null && _e !== void 0 ? _e : DEFAULTS$8.enableLimit; - _this.m_enableMotor = (_f = def.enableMotor) !== null && _f !== void 0 ? _f : DEFAULTS$8.enableMotor; - return _this; - // Point-to-point constraint - // C = p2 - p1 - // Cdot = v2 - v1 - // = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // Motor constraint - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 - } - /** @internal */ - RevoluteJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - lowerAngle: this.m_lowerAngle, - upperAngle: this.m_upperAngle, - maxMotorTorque: this.m_maxMotorTorque, - motorSpeed: this.m_motorSpeed, - enableLimit: this.m_enableLimit, - enableMotor: this.m_enableMotor, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - referenceAngle: this.m_referenceAngle, - }; - }; - /** @internal */ - RevoluteJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new RevoluteJoint(data); - return joint; - }; - /** @hidden */ - RevoluteJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (Number.isFinite(def.referenceAngle)) { - this.m_referenceAngle = def.referenceAngle; - } - if (def.enableLimit !== undefined) { - this.m_enableLimit = def.enableLimit; - } - if (Number.isFinite(def.lowerAngle)) { - this.m_lowerAngle = def.lowerAngle; - } - if (Number.isFinite(def.upperAngle)) { - this.m_upperAngle = def.upperAngle; - } - if (Number.isFinite(def.maxMotorTorque)) { - this.m_maxMotorTorque = def.maxMotorTorque; - } - if (Number.isFinite(def.motorSpeed)) { - this.m_motorSpeed = def.motorSpeed; - } - if (def.enableMotor !== undefined) { - this.m_enableMotor = def.enableMotor; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - RevoluteJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - RevoluteJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Get the reference angle. - */ - RevoluteJoint.prototype.getReferenceAngle = function () { - return this.m_referenceAngle; - }; - /** - * Get the current joint angle in radians. - */ - RevoluteJoint.prototype.getJointAngle = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle; - }; - /** - * Get the current joint angle speed in radians per second. - */ - RevoluteJoint.prototype.getJointSpeed = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - return bB.m_angularVelocity - bA.m_angularVelocity; - }; - /** - * Is the joint motor enabled? - */ - RevoluteJoint.prototype.isMotorEnabled = function () { - return this.m_enableMotor; - }; - /** - * Enable/disable the joint motor. - */ - RevoluteJoint.prototype.enableMotor = function (flag) { - if (flag == this.m_enableMotor) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableMotor = flag; - }; - /** - * Get the current motor torque given the inverse time step. Unit is N*m. - */ - RevoluteJoint.prototype.getMotorTorque = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - /** - * Set the motor speed in radians per second. - */ - RevoluteJoint.prototype.setMotorSpeed = function (speed) { - if (speed == this.m_motorSpeed) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_motorSpeed = speed; - }; - /** - * Get the motor speed in radians per second. - */ - RevoluteJoint.prototype.getMotorSpeed = function () { - return this.m_motorSpeed; - }; - /** - * Set the maximum motor torque, usually in N-m. - */ - RevoluteJoint.prototype.setMaxMotorTorque = function (torque) { - if (torque == this.m_maxMotorTorque) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_maxMotorTorque = torque; - }; - RevoluteJoint.prototype.getMaxMotorTorque = function () { - return this.m_maxMotorTorque; - }; - /** - * Is the joint limit enabled? - */ - RevoluteJoint.prototype.isLimitEnabled = function () { - return this.m_enableLimit; - }; - /** - * Enable/disable the joint limit. - */ - RevoluteJoint.prototype.enableLimit = function (flag) { - if (flag != this.m_enableLimit) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableLimit = flag; - this.m_impulse.z = 0.0; - } - }; - /** - * Get the lower joint limit in radians. - */ - RevoluteJoint.prototype.getLowerLimit = function () { - return this.m_lowerAngle; - }; - /** - * Get the upper joint limit in radians. - */ - RevoluteJoint.prototype.getUpperLimit = function () { - return this.m_upperAngle; - }; - /** - * Set the joint limits in radians. - */ - RevoluteJoint.prototype.setLimits = function (lower, upper) { - if (lower != this.m_lowerAngle || upper != this.m_upperAngle) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_impulse.z = 0.0; - this.m_lowerAngle = lower; - this.m_upperAngle = upper; - } - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - RevoluteJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - RevoluteJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force given the inverse time step. Unit is N. - */ - RevoluteJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); - }; - /** - * Get the reaction torque due to the joint limit given the inverse time step. - * Unit is N*m. - */ - RevoluteJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_impulse.z; - }; - RevoluteJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // [ 0 -1 0 1] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var fixedRotation = (iA + iB === 0.0); - 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; - this.m_mass.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; - this.m_mass.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; - this.m_mass.ex.y = this.m_mass.ey.x; - 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; - this.m_mass.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; - this.m_mass.ex.z = this.m_mass.ez.x; - this.m_mass.ey.z = this.m_mass.ez.y; - this.m_mass.ez.z = iA + iB; - this.m_motorMass = iA + iB; - if (this.m_motorMass > 0.0) { - this.m_motorMass = 1.0 / this.m_motorMass; - } - if (this.m_enableMotor == false || fixedRotation) { - this.m_motorImpulse = 0.0; - } - if (this.m_enableLimit && fixedRotation == false) { - var jointAngle = aB - aA - this.m_referenceAngle; - if (math_abs$4(this.m_upperAngle - this.m_lowerAngle) < 2.0 * SettingsInternal.angularSlop) { - this.m_limitState = LimitState$2.equalLimits; - } - else if (jointAngle <= this.m_lowerAngle) { - if (this.m_limitState != LimitState$2.atLowerLimit) { - this.m_impulse.z = 0.0; - } - this.m_limitState = LimitState$2.atLowerLimit; - } - else if (jointAngle >= this.m_upperAngle) { - if (this.m_limitState != LimitState$2.atUpperLimit) { - this.m_impulse.z = 0.0; - } - this.m_limitState = LimitState$2.atUpperLimit; - } - else { - this.m_limitState = LimitState$2.inactiveLimit; - this.m_impulse.z = 0.0; - } - } - else { - this.m_limitState = LimitState$2.inactiveLimit; - } - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_impulse.mul(step.dtRatio); - this.m_motorImpulse *= step.dtRatio; - var P = Vec2.neo(this.m_impulse.x, this.m_impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z); - } - else { - this.m_impulse.setZero(); - this.m_motorImpulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - RevoluteJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var fixedRotation = (iA + iB === 0.0); - // Solve motor constraint. - if (this.m_enableMotor && this.m_limitState != LimitState$2.equalLimits && fixedRotation == false) { - var Cdot = wB - wA - this.m_motorSpeed; - var impulse = -this.m_motorMass * Cdot; - var oldImpulse = this.m_motorImpulse; - var maxImpulse = step.dt * this.m_maxMotorTorque; - this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_motorImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve limit constraint. - if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { - var Cdot1 = Vec2.zero(); - Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var Cdot2 = wB - wA; - var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); - var impulse = Vec3.neg(this.m_mass.solve33(Cdot)); - if (this.m_limitState == LimitState$2.equalLimits) { - this.m_impulse.add(impulse); - } - else if (this.m_limitState == LimitState$2.atLowerLimit) { - var newImpulse = this.m_impulse.z + impulse.z; - if (newImpulse < 0.0) { - var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); - var reduced = this.m_mass.solve22(rhs); - impulse.x = reduced.x; - impulse.y = reduced.y; - impulse.z = -this.m_impulse.z; - this.m_impulse.x += reduced.x; - this.m_impulse.y += reduced.y; - this.m_impulse.z = 0.0; - } - else { - this.m_impulse.add(impulse); - } - } - else if (this.m_limitState == LimitState$2.atUpperLimit) { - var newImpulse = this.m_impulse.z + impulse.z; - if (newImpulse > 0.0) { - var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); - var reduced = this.m_mass.solve22(rhs); - impulse.x = reduced.x; - impulse.y = reduced.y; - impulse.z = -this.m_impulse.z; - this.m_impulse.x += reduced.x; - this.m_impulse.y += reduced.y; - this.m_impulse.z = 0.0; - } - else { - this.m_impulse.add(impulse); - } - } - var P = Vec2.neo(impulse.x, impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z); - } - else { - // Solve point-to-point constraint - var Cdot = Vec2.zero(); - Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var impulse = this.m_mass.solve22(Vec2.neg(Cdot)); - this.m_impulse.x += impulse.x; - this.m_impulse.y += impulse.y; - vA.subMul(mA, impulse); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); - vB.addMul(mB, impulse); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - RevoluteJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var angularError = 0.0; - var positionError = 0.0; - var fixedRotation = (this.m_invIA + this.m_invIB == 0.0); - // Solve angular limit constraint. - if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { - var angle = aB - aA - this.m_referenceAngle; - var limitImpulse = 0.0; - if (this.m_limitState == LimitState$2.equalLimits) { - // Prevent large angular corrections - var C = clamp(angle - this.m_lowerAngle, -SettingsInternal.maxAngularCorrection, SettingsInternal.maxAngularCorrection); - limitImpulse = -this.m_motorMass * C; - angularError = math_abs$4(C); - } - else if (this.m_limitState == LimitState$2.atLowerLimit) { - var C = angle - this.m_lowerAngle; - angularError = -C; - // Prevent large angular corrections and allow some slop. - C = clamp(C + SettingsInternal.angularSlop, -SettingsInternal.maxAngularCorrection, 0.0); - limitImpulse = -this.m_motorMass * C; - } - else if (this.m_limitState == LimitState$2.atUpperLimit) { - var C = angle - this.m_upperAngle; - angularError = C; - // Prevent large angular corrections and allow some slop. - C = clamp(C - SettingsInternal.angularSlop, 0.0, SettingsInternal.maxAngularCorrection); - limitImpulse = -this.m_motorMass * C; - } - aA -= this.m_invIA * limitImpulse; - aB += this.m_invIB * limitImpulse; - } - // Solve point-to-point constraint. - { - qA.setAngle(aA); - qB.setAngle(aB); - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var C = Vec2.zero(); - C.addCombine(1, cB, 1, rB); - C.subCombine(1, cA, 1, rA); - positionError = C.length(); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var K = new Mat22(); - K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y; - K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y; - K.ey.x = K.ex.y; - K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x; - var impulse = Vec2.neg(K.solve(C)); - cA.subMul(mA, impulse); - aA -= iA * Vec2.crossVec2Vec2(rA, impulse); - cB.addMul(mB, impulse); - aB += iB * Vec2.crossVec2Vec2(rB, impulse); - } - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; - }; - RevoluteJoint.TYPE = "revolute-joint"; - return RevoluteJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$3 = Math.abs; -/** @internal */ var math_max = Math.max; -/** @internal */ var math_min$2 = Math.min; -/** @internal */ var LimitState$1; -(function (LimitState) { - LimitState[LimitState["inactiveLimit"] = 0] = "inactiveLimit"; - LimitState[LimitState["atLowerLimit"] = 1] = "atLowerLimit"; - LimitState[LimitState["atUpperLimit"] = 2] = "atUpperLimit"; - LimitState[LimitState["equalLimits"] = 3] = "equalLimits"; -})(LimitState$1 || (LimitState$1 = {})); -/** @internal */ var DEFAULTS$7 = { - enableLimit: false, - lowerTranslation: 0.0, - upperTranslation: 0.0, - enableMotor: false, - maxMotorForce: 0.0, - motorSpeed: 0.0 -}; -/** - * A prismatic joint. This joint provides one degree of freedom: translation - * along an axis fixed in bodyA. Relative rotation is prevented. You can use a - * joint limit to restrict the range of motion and a joint motor to drive the - * motion or to model joint friction. - */ -var PrismaticJoint = /** @class */ (function (_super) { - __extends(PrismaticJoint, _super); - function PrismaticJoint(def, bodyA, bodyB, anchor, axis) { - var _this = this; - // @ts-ignore - if (!(_this instanceof PrismaticJoint)) { - return new PrismaticJoint(def, bodyA, bodyB, anchor, axis); - } - def = options(def, DEFAULTS$7); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = PrismaticJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - _this.m_localXAxisA = Vec2.clone(axis ? bodyA.getLocalVector(axis) : def.localAxisA || Vec2.neo(1.0, 0.0)); - _this.m_localXAxisA.normalize(); - _this.m_localYAxisA = Vec2.crossNumVec2(1.0, _this.m_localXAxisA); - _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); - _this.m_impulse = new Vec3(); - _this.m_motorMass = 0.0; - _this.m_motorImpulse = 0.0; - _this.m_lowerTranslation = def.lowerTranslation; - _this.m_upperTranslation = def.upperTranslation; - _this.m_maxMotorForce = def.maxMotorForce; - _this.m_motorSpeed = def.motorSpeed; - _this.m_enableLimit = def.enableLimit; - _this.m_enableMotor = def.enableMotor; - _this.m_limitState = LimitState$1.inactiveLimit; - _this.m_axis = Vec2.zero(); - _this.m_perp = Vec2.zero(); - _this.m_K = new Mat33(); - return _this; - // Linear constraint (point-to-line) - // d = p2 - p1 = x2 + r2 - x1 - r1 - // C = dot(perp, d) - // Cdot = dot(d, cross(w1, perp)) + dot(perp, v2 + cross(w2, r2) - v1 - - // cross(w1, r1)) - // = -dot(perp, v1) - dot(cross(d + r1, perp), w1) + dot(perp, v2) + - // dot(cross(r2, perp), v2) - // J = [-perp, -cross(d + r1, perp), perp, cross(r2,perp)] - // - // Angular constraint - // C = a2 - a1 + a_initial - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // - // K = J * invM * JT - // - // J = [-a -s1 a s2] - // [0 -1 0 1] - // a = perp - // s1 = cross(d + r1, a) = cross(p2 - x1, a) - // s2 = cross(r2, a) = cross(p2 - x2, a) - // Motor/Limit linear constraint - // C = dot(ax1, d) - // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) + - // dot(cross(r2, ax1), v2) - // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)] - // Block Solver - // We develop a block solver that includes the joint limit. This makes the - // limit stiff (inelastic) even - // when the mass has poor distribution (leading to large torques about the - // joint anchor points). - // - // The Jacobian has 3 rows: - // J = [-uT -s1 uT s2] // linear - // [0 -1 0 1] // angular - // [-vT -a1 vT a2] // limit - // - // u = perp - // v = axis - // s1 = cross(d + r1, u), s2 = cross(r2, u) - // a1 = cross(d + r1, v), a2 = cross(r2, v) - // M * (v2 - v1) = JT * df - // J * v2 = bias - // - // v2 = v1 + invM * JT * df - // J * (v1 + invM * JT * df) = bias - // K * df = bias - J * v1 = -Cdot - // K = J * invM * JT - // Cdot = J * v1 - bias - // - // Now solve for f2. - // df = f2 - f1 - // K * (f2 - f1) = -Cdot - // f2 = invK * (-Cdot) + f1 - // - // Clamp accumulated limit impulse. - // lower: f2(3) = max(f2(3), 0) - // upper: f2(3) = min(f2(3), 0) - // - // Solve for correct f2(1:2) - // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:3) * f1 - // = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:2) * f1(1:2) + K(1:2,3) * f1(3) - // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3)) + - // K(1:2,1:2) * f1(1:2) - // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) + - // f1(1:2) - // - // Now compute impulse to be applied: - // df = f2 - f1 - } - /** @internal */ - PrismaticJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - lowerTranslation: this.m_lowerTranslation, - upperTranslation: this.m_upperTranslation, - maxMotorForce: this.m_maxMotorForce, - motorSpeed: this.m_motorSpeed, - enableLimit: this.m_enableLimit, - enableMotor: this.m_enableMotor, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - localAxisA: this.m_localXAxisA, - referenceAngle: this.m_referenceAngle, - }; - }; - /** @internal */ - PrismaticJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - data.localAxisA = Vec2.clone(data.localAxisA); - var joint = new PrismaticJoint(data); - return joint; - }; - /** @hidden */ - PrismaticJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (def.localAxisA) { - this.m_localXAxisA.setVec2(def.localAxisA); - this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1.0, def.localAxisA)); - } - if (Number.isFinite(def.referenceAngle)) { - this.m_referenceAngle = def.referenceAngle; - } - if (typeof def.enableLimit !== "undefined") { - this.m_enableLimit = !!def.enableLimit; - } - if (Number.isFinite(def.lowerTranslation)) { - this.m_lowerTranslation = def.lowerTranslation; - } - if (Number.isFinite(def.upperTranslation)) { - this.m_upperTranslation = def.upperTranslation; - } - if (typeof def.enableMotor !== "undefined") { - this.m_enableMotor = !!def.enableMotor; - } - if (Number.isFinite(def.maxMotorForce)) { - this.m_maxMotorForce = def.maxMotorForce; - } - if (Number.isFinite(def.motorSpeed)) { - this.m_motorSpeed = def.motorSpeed; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - PrismaticJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - PrismaticJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * The local joint axis relative to bodyA. - */ - PrismaticJoint.prototype.getLocalAxisA = function () { - return this.m_localXAxisA; - }; - /** - * Get the reference angle. - */ - PrismaticJoint.prototype.getReferenceAngle = function () { - return this.m_referenceAngle; - }; - /** - * Get the current joint translation, usually in meters. - */ - PrismaticJoint.prototype.getJointTranslation = function () { - var pA = this.m_bodyA.getWorldPoint(this.m_localAnchorA); - var pB = this.m_bodyB.getWorldPoint(this.m_localAnchorB); - var d = Vec2.sub(pB, pA); - var axis = this.m_bodyA.getWorldVector(this.m_localXAxisA); - var translation = Vec2.dot(d, axis); - return translation; - }; - /** - * Get the current joint translation speed, usually in meters per second. - */ - PrismaticJoint.prototype.getJointSpeed = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - var rA = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter)); - var rB = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter)); - var p1 = Vec2.add(bA.m_sweep.c, rA); - var p2 = Vec2.add(bB.m_sweep.c, rB); - var d = Vec2.sub(p2, p1); - var axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA); - var vA = bA.m_linearVelocity; - var vB = bB.m_linearVelocity; - var wA = bA.m_angularVelocity; - var wB = bB.m_angularVelocity; - var speed = Vec2.dot(d, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB, wB, rB), Vec2.addCrossNumVec2(vA, wA, rA))); - return speed; - }; - /** - * Is the joint limit enabled? - */ - PrismaticJoint.prototype.isLimitEnabled = function () { - return this.m_enableLimit; - }; - /** - * Enable/disable the joint limit. - */ - PrismaticJoint.prototype.enableLimit = function (flag) { - if (flag != this.m_enableLimit) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableLimit = flag; - this.m_impulse.z = 0.0; - } - }; - /** - * Get the lower joint limit, usually in meters. - */ - PrismaticJoint.prototype.getLowerLimit = function () { - return this.m_lowerTranslation; - }; - /** - * Get the upper joint limit, usually in meters. - */ - PrismaticJoint.prototype.getUpperLimit = function () { - return this.m_upperTranslation; - }; - /** - * Set the joint limits, usually in meters. - */ - PrismaticJoint.prototype.setLimits = function (lower, upper) { - if (lower != this.m_lowerTranslation || upper != this.m_upperTranslation) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_lowerTranslation = lower; - this.m_upperTranslation = upper; - this.m_impulse.z = 0.0; - } - }; - /** - * Is the joint motor enabled? - */ - PrismaticJoint.prototype.isMotorEnabled = function () { - return this.m_enableMotor; - }; - /** - * Enable/disable the joint motor. - */ - PrismaticJoint.prototype.enableMotor = function (flag) { - if (flag == this.m_enableMotor) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_enableMotor = flag; - }; - /** - * Set the motor speed, usually in meters per second. - */ - PrismaticJoint.prototype.setMotorSpeed = function (speed) { - if (speed == this.m_motorSpeed) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_motorSpeed = speed; - }; - /** - * Set the maximum motor force, usually in N. - */ - PrismaticJoint.prototype.setMaxMotorForce = function (force) { - if (force == this.m_maxMotorForce) - return; - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_maxMotorForce = force; - }; - PrismaticJoint.prototype.getMaxMotorForce = function () { - return this.m_maxMotorForce; - }; - /** - * Get the motor speed, usually in meters per second. - */ - PrismaticJoint.prototype.getMotorSpeed = function () { - return this.m_motorSpeed; - }; - /** - * Get the current motor force given the inverse time step, usually in N. - */ - PrismaticJoint.prototype.getMotorForce = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - PrismaticJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - PrismaticJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - PrismaticJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - PrismaticJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_impulse.y; - }; - PrismaticJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective masses. - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.zero(); - d.addCombine(1, cB, 1, rB); - d.subCombine(1, cA, 1, rA); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Compute motor Jacobian and effective mass. - { - this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA); - this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_axis); - this.m_a2 = Vec2.crossVec2Vec2(rB, this.m_axis); - this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 - * this.m_a2; - if (this.m_motorMass > 0.0) { - this.m_motorMass = 1.0 / this.m_motorMass; - } - } - // Prismatic constraint. - { - this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA); - this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_perp); - this.m_s2 = Vec2.crossVec2Vec2(rB, this.m_perp); - Vec2.crossVec2Vec2(rA, this.m_perp); - var k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2; - var k12 = iA * this.m_s1 + iB * this.m_s2; - var k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2; - var k22 = iA + iB; - if (k22 == 0.0) { - // For bodies with fixed rotation. - k22 = 1.0; - } - var k23 = iA * this.m_a1 + iB * this.m_a2; - var k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2; - this.m_K.ex.set(k11, k12, k13); - this.m_K.ey.set(k12, k22, k23); - this.m_K.ez.set(k13, k23, k33); - } - // Compute motor and limit terms. - if (this.m_enableLimit) { - var jointTranslation = Vec2.dot(this.m_axis, d); - if (math_abs$3(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * SettingsInternal.linearSlop) { - this.m_limitState = LimitState$1.equalLimits; - } - else if (jointTranslation <= this.m_lowerTranslation) { - if (this.m_limitState != LimitState$1.atLowerLimit) { - this.m_limitState = LimitState$1.atLowerLimit; - this.m_impulse.z = 0.0; - } - } - else if (jointTranslation >= this.m_upperTranslation) { - if (this.m_limitState != LimitState$1.atUpperLimit) { - this.m_limitState = LimitState$1.atUpperLimit; - this.m_impulse.z = 0.0; - } - } - else { - this.m_limitState = LimitState$1.inactiveLimit; - this.m_impulse.z = 0.0; - } - } - else { - this.m_limitState = LimitState$1.inactiveLimit; - this.m_impulse.z = 0.0; - } - if (this.m_enableMotor == false) { - this.m_motorImpulse = 0.0; - } - if (step.warmStarting) { - // Account for variable time step. - this.m_impulse.mul(step.dtRatio); - this.m_motorImpulse *= step.dtRatio; - var P = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse - + this.m_impulse.z, this.m_axis); - var LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y - + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1; - var LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y - + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - else { - this.m_impulse.setZero(); - this.m_motorImpulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - PrismaticJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Solve linear motor constraint. - if (this.m_enableMotor && this.m_limitState != LimitState$1.equalLimits) { - var Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB, vA)) + this.m_a2 * wB - - this.m_a1 * wA; - var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot); - var oldImpulse = this.m_motorImpulse; - var maxImpulse = step.dt * this.m_maxMotorForce; - this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_motorImpulse - oldImpulse; - var P = Vec2.mulNumVec2(impulse, this.m_axis); - var LA = impulse * this.m_a1; - var LB = impulse * this.m_a2; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - var Cdot1 = Vec2.zero(); - Cdot1.x += Vec2.dot(this.m_perp, vB) + this.m_s2 * wB; - Cdot1.x -= Vec2.dot(this.m_perp, vA) + this.m_s1 * wA; - Cdot1.y = wB - wA; - if (this.m_enableLimit && this.m_limitState != LimitState$1.inactiveLimit) { - // Solve prismatic and limit constraint in block form. - var Cdot2 = 0; - Cdot2 += Vec2.dot(this.m_axis, vB) + this.m_a2 * wB; - Cdot2 -= Vec2.dot(this.m_axis, vA) + this.m_a1 * wA; - var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); - var f1 = Vec3.clone(this.m_impulse); - var df = this.m_K.solve33(Vec3.neg(Cdot)); - this.m_impulse.add(df); - if (this.m_limitState == LimitState$1.atLowerLimit) { - this.m_impulse.z = math_max(this.m_impulse.z, 0.0); - } - else if (this.m_limitState == LimitState$1.atUpperLimit) { - this.m_impulse.z = math_min$2(this.m_impulse.z, 0.0); - } - // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) + - // f1(1:2) - var b = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y)); - var f2r = Vec2.add(this.m_K.solve22(b), Vec2.neo(f1.x, f1.y)); - this.m_impulse.x = f2r.x; - this.m_impulse.y = f2r.y; - df = Vec3.sub(this.m_impulse, f1); - var P = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis); - var LA = df.x * this.m_s1 + df.y + df.z * this.m_a1; - var LB = df.x * this.m_s2 + df.y + df.z * this.m_a2; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - else { - // Limit is inactive, just solve the prismatic constraint in block form. - var df = this.m_K.solve22(Vec2.neg(Cdot1)); - this.m_impulse.x += df.x; - this.m_impulse.y += df.y; - var P = Vec2.mulNumVec2(df.x, this.m_perp); - var LA = df.x * this.m_s1 + df.y; - var LB = df.x * this.m_s2 + df.y; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - PrismaticJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Compute fresh Jacobians - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA)); - var axis = Rot.mulVec2(qA, this.m_localXAxisA); - var a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), axis); - var a2 = Vec2.crossVec2Vec2(rB, axis); - var perp = Rot.mulVec2(qA, this.m_localYAxisA); - var s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), perp); - var s2 = Vec2.crossVec2Vec2(rB, perp); - var impulse = new Vec3(); - var C1 = Vec2.zero(); - C1.x = Vec2.dot(perp, d); - C1.y = aB - aA - this.m_referenceAngle; - var linearError = math_abs$3(C1.x); - var angularError = math_abs$3(C1.y); - var linearSlop = SettingsInternal.linearSlop; - var maxLinearCorrection = SettingsInternal.maxLinearCorrection; - var active = false; // bool - var C2 = 0.0; - if (this.m_enableLimit) { - var translation = Vec2.dot(axis, d); - if (math_abs$3(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * linearSlop) { - // Prevent large angular corrections - C2 = clamp(translation, -maxLinearCorrection, maxLinearCorrection); - linearError = math_max(linearError, math_abs$3(translation)); - active = true; - } - else if (translation <= this.m_lowerTranslation) { - // Prevent large linear corrections and allow some slop. - C2 = clamp(translation - this.m_lowerTranslation + linearSlop, -maxLinearCorrection, 0.0); - linearError = Math - .max(linearError, this.m_lowerTranslation - translation); - active = true; - } - else if (translation >= this.m_upperTranslation) { - // Prevent large linear corrections and allow some slop. - C2 = clamp(translation - this.m_upperTranslation - linearSlop, 0.0, maxLinearCorrection); - linearError = Math - .max(linearError, translation - this.m_upperTranslation); - active = true; - } - } - if (active) { - var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; - var k12 = iA * s1 + iB * s2; - var k13 = iA * s1 * a1 + iB * s2 * a2; - var k22 = iA + iB; - if (k22 == 0.0) { - // For fixed rotation - k22 = 1.0; - } - var k23 = iA * a1 + iB * a2; - var k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2; - var K = new Mat33(); - K.ex.set(k11, k12, k13); - K.ey.set(k12, k22, k23); - K.ez.set(k13, k23, k33); - var C = new Vec3(); - C.x = C1.x; - C.y = C1.y; - C.z = C2; - impulse = K.solve33(Vec3.neg(C)); - } - else { - var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; - var k12 = iA * s1 + iB * s2; - var k22 = iA + iB; - if (k22 == 0.0) { - k22 = 1.0; - } - var K = new Mat22(); - K.ex.setNum(k11, k12); - K.ey.setNum(k12, k22); - var impulse1 = K.solve(Vec2.neg(C1)); - impulse.x = impulse1.x; - impulse.y = impulse1.y; - impulse.z = 0.0; - } - var P = Vec2.combine(impulse.x, perp, impulse.z, axis); - var LA = impulse.x * s1 + impulse.y + impulse.z * a1; - var LB = impulse.x * s2 + impulse.y + impulse.z * a2; - cA.subMul(mA, P); - aA -= iA * LA; - cB.addMul(mB, P); - aB += iB * LB; - this.m_bodyA.c_position.c = cA; - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c = cB; - this.m_bodyB.c_position.a = aB; - return linearError <= SettingsInternal.linearSlop - && angularError <= SettingsInternal.angularSlop; - }; - PrismaticJoint.TYPE = "prismatic-joint"; - return PrismaticJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var DEFAULTS$6 = { - ratio: 1.0 -}; -/** - * A gear joint is used to connect two joints together. Either joint can be a - * revolute or prismatic joint. You specify a gear ratio to bind the motions - * together: coordinate1 + ratio * coordinate2 = constant - * - * The ratio can be negative or positive. If one joint is a revolute joint and - * the other joint is a prismatic joint, then the ratio will have units of - * length or units of 1/length. Warning: You have to manually destroy the gear - * joint if joint1 or joint2 is destroyed. - * - * This definition requires two existing revolute or prismatic joints (any - * combination will work). - */ -var GearJoint = /** @class */ (function (_super) { - __extends(GearJoint, _super); - function GearJoint(def, bodyA, bodyB, joint1, joint2, ratio) { - var _this = this; - // @ts-ignore - if (!(_this instanceof GearJoint)) { - return new GearJoint(def, bodyA, bodyB, joint1, joint2, ratio); - } - def = options(def, DEFAULTS$6); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = GearJoint.TYPE; - _this.m_joint1 = joint1 ? joint1 : def.joint1; - _this.m_joint2 = joint2 ? joint2 : def.joint2; - _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; - _this.m_type1 = _this.m_joint1.getType(); - _this.m_type2 = _this.m_joint2.getType(); - // joint1 connects body A to body C - // joint2 connects body B to body D - var coordinateA; - var coordinateB; - // TODO_ERIN there might be some problem with the joint edges in Joint. - _this.m_bodyC = _this.m_joint1.getBodyA(); - _this.m_bodyA = _this.m_joint1.getBodyB(); - // Get geometry of joint1 - var xfA = _this.m_bodyA.m_xf; - var aA = _this.m_bodyA.m_sweep.a; - var xfC = _this.m_bodyC.m_xf; - var aC = _this.m_bodyC.m_sweep.a; - if (_this.m_type1 === RevoluteJoint.TYPE) { - var revolute = _this.m_joint1; - _this.m_localAnchorC = revolute.m_localAnchorA; - _this.m_localAnchorA = revolute.m_localAnchorB; - _this.m_referenceAngleA = revolute.m_referenceAngle; - _this.m_localAxisC = Vec2.zero(); - coordinateA = aA - aC - _this.m_referenceAngleA; - } - else { - var prismatic = _this.m_joint1; - _this.m_localAnchorC = prismatic.m_localAnchorA; - _this.m_localAnchorA = prismatic.m_localAnchorB; - _this.m_referenceAngleA = prismatic.m_referenceAngle; - _this.m_localAxisC = prismatic.m_localXAxisA; - var pC = _this.m_localAnchorC; - var pA = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA.q, _this.m_localAnchorA), Vec2.sub(xfA.p, xfC.p))); - coordinateA = Vec2.dot(pA, _this.m_localAxisC) - Vec2.dot(pC, _this.m_localAxisC); - } - _this.m_bodyD = _this.m_joint2.getBodyA(); - _this.m_bodyB = _this.m_joint2.getBodyB(); - // Get geometry of joint2 - var xfB = _this.m_bodyB.m_xf; - var aB = _this.m_bodyB.m_sweep.a; - var xfD = _this.m_bodyD.m_xf; - var aD = _this.m_bodyD.m_sweep.a; - if (_this.m_type2 === RevoluteJoint.TYPE) { - var revolute = _this.m_joint2; - _this.m_localAnchorD = revolute.m_localAnchorA; - _this.m_localAnchorB = revolute.m_localAnchorB; - _this.m_referenceAngleB = revolute.m_referenceAngle; - _this.m_localAxisD = Vec2.zero(); - coordinateB = aB - aD - _this.m_referenceAngleB; - } - else { - var prismatic = _this.m_joint2; - _this.m_localAnchorD = prismatic.m_localAnchorA; - _this.m_localAnchorB = prismatic.m_localAnchorB; - _this.m_referenceAngleB = prismatic.m_referenceAngle; - _this.m_localAxisD = prismatic.m_localXAxisA; - var pD = _this.m_localAnchorD; - var pB = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB.q, _this.m_localAnchorB), Vec2.sub(xfB.p, xfD.p))); - coordinateB = Vec2.dot(pB, _this.m_localAxisD) - Vec2.dot(pD, _this.m_localAxisD); - } - _this.m_constant = coordinateA + _this.m_ratio * coordinateB; - _this.m_impulse = 0.0; - return _this; - // Gear Joint: - // C0 = (coordinate1 + ratio * coordinate2)_initial - // C = (coordinate1 + ratio * coordinate2) - C0 = 0 - // J = [J1 ratio * J2] - // K = J * invM * JT - // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T - // - // Revolute: - // coordinate = rotation - // Cdot = angularVelocity - // J = [0 0 1] - // K = J * invM * JT = invI - // - // Prismatic: - // coordinate = dot(p - pg, ug) - // Cdot = dot(v + cross(w, r), ug) - // J = [ug cross(r, ug)] - // K = J * invM * JT = invMass + invI * cross(r, ug)^2 - } - /** @internal */ - GearJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - joint1: this.m_joint1, - joint2: this.m_joint2, - ratio: this.m_ratio, - // _constant: this.m_constant, - }; - }; - /** @internal */ - GearJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - data.joint1 = restore(Joint, data.joint1, world); - data.joint2 = restore(Joint, data.joint2, world); - var joint = new GearJoint(data); - // if (data._constant) joint.m_constant = data._constant; - return joint; - }; - /** @hidden */ - GearJoint.prototype._reset = function (def) { - // todo: implement other fields - if (Number.isFinite(def.ratio)) { - this.m_ratio = def.ratio; - } - }; - /** - * Get the first joint. - */ - GearJoint.prototype.getJoint1 = function () { - return this.m_joint1; - }; - /** - * Get the second joint. - */ - GearJoint.prototype.getJoint2 = function () { - return this.m_joint2; - }; - /** - * Set the gear ratio. - */ - GearJoint.prototype.setRatio = function (ratio) { - this.m_ratio = ratio; - }; - /** - * Get the gear ratio. - */ - GearJoint.prototype.getRatio = function () { - return this.m_ratio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - GearJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - GearJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - GearJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - GearJoint.prototype.getReactionTorque = function (inv_dt) { - var L = this.m_impulse * this.m_JwA; - return inv_dt * L; - }; - GearJoint.prototype.initVelocityConstraints = function (step) { - this.m_lcA = this.m_bodyA.m_sweep.localCenter; - this.m_lcB = this.m_bodyB.m_sweep.localCenter; - this.m_lcC = this.m_bodyC.m_sweep.localCenter; - this.m_lcD = this.m_bodyD.m_sweep.localCenter; - this.m_mA = this.m_bodyA.m_invMass; - this.m_mB = this.m_bodyB.m_invMass; - this.m_mC = this.m_bodyC.m_invMass; - this.m_mD = this.m_bodyD.m_invMass; - this.m_iA = this.m_bodyA.m_invI; - this.m_iB = this.m_bodyB.m_invI; - this.m_iC = this.m_bodyC.m_invI; - this.m_iD = this.m_bodyD.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var aC = this.m_bodyC.c_position.a; - var vC = this.m_bodyC.c_velocity.v; - var wC = this.m_bodyC.c_velocity.w; - var aD = this.m_bodyD.c_position.a; - var vD = this.m_bodyD.c_velocity.v; - var wD = this.m_bodyD.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var qC = Rot.neo(aC); - var qD = Rot.neo(aD); - this.m_mass = 0.0; - if (this.m_type1 == RevoluteJoint.TYPE) { - this.m_JvAC = Vec2.zero(); - this.m_JwA = 1.0; - this.m_JwC = 1.0; - this.m_mass += this.m_iA + this.m_iC; - } - else { - var u = Rot.mulVec2(qC, this.m_localAxisC); - var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); - this.m_JvAC = u; - this.m_JwC = Vec2.crossVec2Vec2(rC, u); - this.m_JwA = Vec2.crossVec2Vec2(rA, u); - 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; - } - if (this.m_type2 == RevoluteJoint.TYPE) { - this.m_JvBD = Vec2.zero(); - this.m_JwB = this.m_ratio; - this.m_JwD = this.m_ratio; - this.m_mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); - } - else { - var u = Rot.mulVec2(qD, this.m_localAxisD); - var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); - this.m_JvBD = Vec2.mulNumVec2(this.m_ratio, u); - this.m_JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); - this.m_JwB = this.m_ratio * Vec2.crossVec2Vec2(rB, u); - 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; - } - // Compute effective mass. - this.m_mass = this.m_mass > 0.0 ? 1.0 / this.m_mass : 0.0; - if (step.warmStarting) { - vA.addMul(this.m_mA * this.m_impulse, this.m_JvAC); - wA += this.m_iA * this.m_impulse * this.m_JwA; - vB.addMul(this.m_mB * this.m_impulse, this.m_JvBD); - wB += this.m_iB * this.m_impulse * this.m_JwB; - vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC); - wC -= this.m_iC * this.m_impulse * this.m_JwC; - vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD); - wD -= this.m_iD * this.m_impulse * this.m_JwD; - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - this.m_bodyC.c_velocity.v.setVec2(vC); - this.m_bodyC.c_velocity.w = wC; - this.m_bodyD.c_velocity.v.setVec2(vD); - this.m_bodyD.c_velocity.w = wD; - }; - GearJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var vC = this.m_bodyC.c_velocity.v; - var wC = this.m_bodyC.c_velocity.w; - var vD = this.m_bodyD.c_velocity.v; - var wD = this.m_bodyD.c_velocity.w; - var Cdot = Vec2.dot(this.m_JvAC, vA) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB) - Vec2.dot(this.m_JvBD, vD); - Cdot += (this.m_JwA * wA - this.m_JwC * wC) + (this.m_JwB * wB - this.m_JwD * wD); - var impulse = -this.m_mass * Cdot; - this.m_impulse += impulse; - vA.addMul(this.m_mA * impulse, this.m_JvAC); - wA += this.m_iA * impulse * this.m_JwA; - vB.addMul(this.m_mB * impulse, this.m_JvBD); - wB += this.m_iB * impulse * this.m_JwB; - vC.subMul(this.m_mC * impulse, this.m_JvAC); - wC -= this.m_iC * impulse * this.m_JwC; - vD.subMul(this.m_mD * impulse, this.m_JvBD); - wD -= this.m_iD * impulse * this.m_JwD; - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - this.m_bodyC.c_velocity.v.setVec2(vC); - this.m_bodyC.c_velocity.w = wC; - this.m_bodyD.c_velocity.v.setVec2(vD); - this.m_bodyD.c_velocity.w = wD; - }; - /** - * This returns true if the position errors are within tolerance. - */ - GearJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var cC = this.m_bodyC.c_position.c; - var aC = this.m_bodyC.c_position.a; - var cD = this.m_bodyD.c_position.c; - var aD = this.m_bodyD.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var qC = Rot.neo(aC); - var qD = Rot.neo(aD); - var linearError = 0.0; - var coordinateA; - var coordinateB; - var JvAC; - var JvBD; - var JwA; - var JwB; - var JwC; - var JwD; - var mass = 0.0; - if (this.m_type1 == RevoluteJoint.TYPE) { - JvAC = Vec2.zero(); - JwA = 1.0; - JwC = 1.0; - mass += this.m_iA + this.m_iC; - coordinateA = aA - aC - this.m_referenceAngleA; - } - else { - var u = Rot.mulVec2(qC, this.m_localAxisC); - var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); - JvAC = u; - JwC = Vec2.crossVec2Vec2(rC, u); - JwA = Vec2.crossVec2Vec2(rA, u); - mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA; - var pC = Vec2.sub(this.m_localAnchorC, this.m_lcC); - var pA = Rot.mulTVec2(qC, Vec2.add(rA, Vec2.sub(cA, cC))); - coordinateA = Vec2.dot(Vec2.sub(pA, pC), this.m_localAxisC); - } - if (this.m_type2 == RevoluteJoint.TYPE) { - JvBD = Vec2.zero(); - JwB = this.m_ratio; - JwD = this.m_ratio; - mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); - coordinateB = aB - aD - this.m_referenceAngleB; - } - else { - var u = Rot.mulVec2(qD, this.m_localAxisD); - var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); - JvBD = Vec2.mulNumVec2(this.m_ratio, u); - JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); - JwB = this.m_ratio * Vec2.crossVec2Vec2(rB, u); - mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * JwD * JwD + this.m_iB * JwB * JwB; - var pD = Vec2.sub(this.m_localAnchorD, this.m_lcD); - var pB = Rot.mulTVec2(qD, Vec2.add(rB, Vec2.sub(cB, cD))); - coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD); - } - var C = (coordinateA + this.m_ratio * coordinateB) - this.m_constant; - var impulse = 0.0; - if (mass > 0.0) { - impulse = -C / mass; - } - cA.addMul(this.m_mA * impulse, JvAC); - aA += this.m_iA * impulse * JwA; - cB.addMul(this.m_mB * impulse, JvBD); - aB += this.m_iB * impulse * JwB; - cC.subMul(this.m_mC * impulse, JvAC); - aC -= this.m_iC * impulse * JwC; - cD.subMul(this.m_mD * impulse, JvBD); - aD -= this.m_iD * impulse * JwD; - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - this.m_bodyC.c_position.c.setVec2(cC); - this.m_bodyC.c_position.a = aC; - this.m_bodyD.c_position.c.setVec2(cD); - this.m_bodyD.c_position.a = aD; - // TODO_ERIN not implemented - return linearError < SettingsInternal.linearSlop; - }; - GearJoint.TYPE = "gear-joint"; - return GearJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var DEFAULTS$5 = { - maxForce: 1.0, - maxTorque: 1.0, - correctionFactor: 0.3 -}; -/** - * A motor joint is used to control the relative motion between two bodies. A - * typical usage is to control the movement of a dynamic body with respect to - * the ground. - */ -var MotorJoint = /** @class */ (function (_super) { - __extends(MotorJoint, _super); - function MotorJoint(def, bodyA, bodyB) { - var _this = this; - // @ts-ignore - if (!(_this instanceof MotorJoint)) { - return new MotorJoint(def, bodyA, bodyB); - } - def = options(def, DEFAULTS$5); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = MotorJoint.TYPE; - _this.m_linearOffset = Vec2.isValid(def.linearOffset) ? Vec2.clone(def.linearOffset) : bodyA.getLocalPoint(bodyB.getPosition()); - _this.m_angularOffset = Number.isFinite(def.angularOffset) ? def.angularOffset : bodyB.getAngle() - bodyA.getAngle(); - _this.m_linearImpulse = Vec2.zero(); - _this.m_angularImpulse = 0.0; - _this.m_maxForce = def.maxForce; - _this.m_maxTorque = def.maxTorque; - _this.m_correctionFactor = def.correctionFactor; - return _this; - // Point-to-point constraint - // Cdot = v2 - v1 - // = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // - // r1 = offset - c1 - // r2 = -c2 - // Angle constraint - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 - } - /** @internal */ - MotorJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - maxForce: this.m_maxForce, - maxTorque: this.m_maxTorque, - correctionFactor: this.m_correctionFactor, - linearOffset: this.m_linearOffset, - angularOffset: this.m_angularOffset, - }; - }; - /** @internal */ - MotorJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new MotorJoint(data); - return joint; - }; - /** @hidden */ - MotorJoint.prototype._reset = function (def) { - if (Number.isFinite(def.angularOffset)) { - this.m_angularOffset = def.angularOffset; - } - if (Number.isFinite(def.maxForce)) { - this.m_maxForce = def.maxForce; - } - if (Number.isFinite(def.maxTorque)) { - this.m_maxTorque = def.maxTorque; - } - if (Number.isFinite(def.correctionFactor)) { - this.m_correctionFactor = def.correctionFactor; - } - if (Vec2.isValid(def.linearOffset)) { - this.m_linearOffset.set(def.linearOffset); - } - }; - /** - * Set the maximum friction force in N. - */ - MotorJoint.prototype.setMaxForce = function (force) { - this.m_maxForce = force; - }; - /** - * Get the maximum friction force in N. - */ - MotorJoint.prototype.getMaxForce = function () { - return this.m_maxForce; - }; - /** - * Set the maximum friction torque in N*m. - */ - MotorJoint.prototype.setMaxTorque = function (torque) { - this.m_maxTorque = torque; - }; - /** - * Get the maximum friction torque in N*m. - */ - MotorJoint.prototype.getMaxTorque = function () { - return this.m_maxTorque; - }; - /** - * Set the position correction factor in the range [0,1]. - */ - MotorJoint.prototype.setCorrectionFactor = function (factor) { - this.m_correctionFactor = factor; - }; - /** - * Get the position correction factor in the range [0,1]. - */ - MotorJoint.prototype.getCorrectionFactor = function () { - return this.m_correctionFactor; - }; - /** - * Set/get the target linear offset, in frame A, in meters. - */ - MotorJoint.prototype.setLinearOffset = function (linearOffset) { - if (linearOffset.x != this.m_linearOffset.x || linearOffset.y != this.m_linearOffset.y) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_linearOffset.set(linearOffset); - } - }; - MotorJoint.prototype.getLinearOffset = function () { - return this.m_linearOffset; - }; - /** - * Set/get the target angular offset, in radians. - */ - MotorJoint.prototype.setAngularOffset = function (angularOffset) { - if (angularOffset != this.m_angularOffset) { - this.m_bodyA.setAwake(true); - this.m_bodyB.setAwake(true); - this.m_angularOffset = angularOffset; - } - }; - MotorJoint.prototype.getAngularOffset = function () { - return this.m_angularOffset; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - MotorJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getPosition(); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - MotorJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getPosition(); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - MotorJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - MotorJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_angularImpulse; - }; - MotorJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective mass matrix. - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_linearOffset, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.neg(this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - // Upper 2 by 2 of K for point to point - var K = new Mat22(); - K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y; - K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; - K.ey.x = K.ex.y; - K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x; - this.m_linearMass = K.getInverse(); - this.m_angularMass = iA + iB; - if (this.m_angularMass > 0.0) { - this.m_angularMass = 1.0 / this.m_angularMass; - } - this.m_linearError = Vec2.zero(); - this.m_linearError.addCombine(1, cB, 1, this.m_rB); - this.m_linearError.subCombine(1, cA, 1, this.m_rA); - this.m_angularError = aB - aA - this.m_angularOffset; - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_linearImpulse.mul(step.dtRatio); - this.m_angularImpulse *= step.dtRatio; - var P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse); - } - else { - this.m_linearImpulse.setZero(); - this.m_angularImpulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - MotorJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var h = step.dt; - var inv_h = step.inv_dt; - // Solve angular friction - { - var Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError; - var impulse = -this.m_angularMass * Cdot; - var oldImpulse = this.m_angularImpulse; - var maxImpulse = h * this.m_maxTorque; - this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_angularImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve linear friction - { - var Cdot = Vec2.zero(); - Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError); - var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); - var oldImpulse = Vec2.clone(this.m_linearImpulse); - this.m_linearImpulse.add(impulse); - var maxImpulse = h * this.m_maxForce; - this.m_linearImpulse.clamp(maxImpulse); - impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); - vA.subMul(mA, impulse); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); - vB.addMul(mB, impulse); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - MotorJoint.prototype.solvePositionConstraints = function (step) { - return true; - }; - MotorJoint.TYPE = "motor-joint"; - return MotorJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_PI$2 = Math.PI; -/** @internal */ var DEFAULTS$4 = { - maxForce: 0.0, - frequencyHz: 5.0, - dampingRatio: 0.7 -}; -/** - * A mouse joint is used to make a point on a body track a specified world - * point. This a soft constraint with a maximum force. This allows the - * constraint to stretch and without applying huge forces. - * - * You need to call setTarget(target) every time that mouse is - * moved, to track the new location of the mouse. - * - * NOTE: this joint is not documented in the manual because it was developed to - * be used in the testbed. If you want to learn how to use the mouse joint, look - * at the testbed. - */ -var MouseJoint = /** @class */ (function (_super) { - __extends(MouseJoint, _super); - function MouseJoint(def, bodyA, bodyB, target) { - var _this = this; - // @ts-ignore - if (!(_this instanceof MouseJoint)) { - return new MouseJoint(def, bodyA, bodyB, target); - } - def = options(def, DEFAULTS$4); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = MouseJoint.TYPE; - if (Vec2.isValid(target)) { - _this.m_targetA = Vec2.clone(target); - } - else if (Vec2.isValid(def.target)) { - _this.m_targetA = Vec2.clone(def.target); - } - else { - _this.m_targetA = Vec2.zero(); - } - _this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), _this.m_targetA); - _this.m_maxForce = def.maxForce; - _this.m_impulse = Vec2.zero(); - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_beta = 0.0; - _this.m_gamma = 0.0; - // Solver temp - _this.m_rB = Vec2.zero(); - _this.m_localCenterB = Vec2.zero(); - _this.m_invMassB = 0.0; - _this.m_invIB = 0.0; - _this.m_mass = new Mat22(); - _this.m_C = Vec2.zero(); - return _this; - // p = attached point, m = mouse point - // C = p - m - // Cdot = v - // = v + cross(w, r) - // J = [I r_skew] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - } - /** @internal */ - MouseJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - target: this.m_targetA, - maxForce: this.m_maxForce, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - _localAnchorB: this.m_localAnchorB, - }; - }; - /** @internal */ - MouseJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - data.target = Vec2.clone(data.target); - var joint = new MouseJoint(data); - if (data._localAnchorB) { - joint.m_localAnchorB = data._localAnchorB; - } - return joint; - }; - /** @hidden */ - MouseJoint.prototype._reset = function (def) { - if (Number.isFinite(def.maxForce)) { - this.m_maxForce = def.maxForce; - } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; - } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; - } - }; - /** - * Use this to update the target point. - */ - MouseJoint.prototype.setTarget = function (target) { - if (Vec2.areEqual(target, this.m_targetA)) - return; - this.m_bodyB.setAwake(true); - this.m_targetA.set(target); - }; - MouseJoint.prototype.getTarget = function () { - return this.m_targetA; - }; - /** - * Set the maximum force in Newtons. - */ - MouseJoint.prototype.setMaxForce = function (force) { - this.m_maxForce = force; - }; - /** - * Get the maximum force in Newtons. - */ - MouseJoint.prototype.getMaxForce = function () { - return this.m_maxForce; - }; - /** - * Set the frequency in Hertz. - */ - MouseJoint.prototype.setFrequency = function (hz) { - this.m_frequencyHz = hz; - }; - /** - * Get the frequency in Hertz. - */ - MouseJoint.prototype.getFrequency = function () { - return this.m_frequencyHz; - }; - /** - * Set the damping ratio (dimensionless). - */ - MouseJoint.prototype.setDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - /** - * Get the damping ratio (dimensionless). - */ - MouseJoint.prototype.getDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - MouseJoint.prototype.getAnchorA = function () { - return Vec2.clone(this.m_targetA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - MouseJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - MouseJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(inv_dt, this.m_impulse); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - MouseJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * 0.0; - }; - /** - * Shift the origin for any points stored in world coordinates. - */ - MouseJoint.prototype.shiftOrigin = function (newOrigin) { - this.m_targetA.sub(newOrigin); - }; - MouseJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIB = this.m_bodyB.m_invI; - var position = this.m_bodyB.c_position; - var velocity = this.m_bodyB.c_velocity; - var cB = position.c; - var aB = position.a; - var vB = velocity.v; - var wB = velocity.w; - var qB = Rot.neo(aB); - var mass = this.m_bodyB.getMass(); - // Frequency - var omega = 2.0 * math_PI$2 * this.m_frequencyHz; - // Damping coefficient - var d = 2.0 * mass * this.m_dampingRatio * omega; - // Spring stiffness - var k = mass * (omega * omega); - // magic formulas - // gamma has units of inverse mass. - // beta has units of inverse time. - var h = step.dt; - this.m_gamma = h * (d + h * k); - if (this.m_gamma != 0.0) { - this.m_gamma = 1.0 / this.m_gamma; - } - this.m_beta = h * k * this.m_gamma; - // Compute the effective mass matrix. - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) * - // invI2 * skew(r2)] - // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y - // -r1.x*r1.y] - // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x] - var K = new Mat22(); - K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y - + this.m_gamma; - K.ex.y = -this.m_invIB * this.m_rB.x * this.m_rB.y; - K.ey.x = K.ex.y; - K.ey.y = this.m_invMassB + this.m_invIB * this.m_rB.x * this.m_rB.x - + this.m_gamma; - this.m_mass = K.getInverse(); - this.m_C.setVec2(cB); - this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA); - this.m_C.mul(this.m_beta); - // Cheat with some damping - wB *= 0.98; - if (step.warmStarting) { - this.m_impulse.mul(step.dtRatio); - vB.addMul(this.m_invMassB, this.m_impulse); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse); - } - else { - this.m_impulse.setZero(); - } - velocity.v.setVec2(vB); - velocity.w = wB; - }; - MouseJoint.prototype.solveVelocityConstraints = function (step) { - var velocity = this.m_bodyB.c_velocity; - var vB = Vec2.clone(velocity.v); - var wB = velocity.w; - // Cdot = v + cross(w, r) - var Cdot = Vec2.crossNumVec2(wB, this.m_rB); - Cdot.add(vB); - Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse); - Cdot.neg(); - var impulse = Mat22.mulVec2(this.m_mass, Cdot); - var oldImpulse = Vec2.clone(this.m_impulse); - this.m_impulse.add(impulse); - var maxImpulse = step.dt * this.m_maxForce; - this.m_impulse.clamp(maxImpulse); - impulse = Vec2.sub(this.m_impulse, oldImpulse); - vB.addMul(this.m_invMassB, impulse); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse); - velocity.v.setVec2(vB); - velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - MouseJoint.prototype.solvePositionConstraints = function (step) { - return true; - }; - MouseJoint.TYPE = "mouse-joint"; - return MouseJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$2 = Math.abs; -/** @internal */ var DEFAULTS$3 = { - collideConnected: true -}; -/** - * The pulley joint is connected to two bodies and two fixed ground points. The - * pulley supports a ratio such that: length1 + ratio * length2 <= constant - * - * Yes, the force transmitted is scaled by the ratio. - * - * Warning: the pulley joint can get a bit squirrelly by itself. They often work - * better when combined with prismatic joints. You should also cover the the - * anchor points with static shapes to prevent one side from going to zero - * length. - */ -var PulleyJoint = /** @class */ (function (_super) { - __extends(PulleyJoint, _super); - function PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio) { - var _this = this; - // @ts-ignore - if (!(_this instanceof PulleyJoint)) { - return new PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio); - } - def = options(def, DEFAULTS$3); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = PulleyJoint.TYPE; - _this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1.0, 1.0)); - _this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1.0, 1.0)); - _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1.0, 0.0)); - _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1.0, 0.0)); - _this.m_lengthA = Number.isFinite(def.lengthA) ? def.lengthA : Vec2.distance(anchorA, groundA); - _this.m_lengthB = Number.isFinite(def.lengthB) ? def.lengthB : Vec2.distance(anchorB, groundB); - _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; - _this.m_constant = _this.m_lengthA + _this.m_ratio * _this.m_lengthB; - _this.m_impulse = 0.0; - return _this; - // Pulley: - // length1 = norm(p1 - s1) - // length2 = norm(p2 - s2) - // C0 = (length1 + ratio * length2)_initial - // C = C0 - (length1 + ratio * length2) - // u1 = (p1 - s1) / norm(p1 - s1) - // u2 = (p2 - s2) / norm(p2 - s2) - // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2)) - // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)] - // K = J * invM * JT - // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 * - // cross(r2, u2)^2) - } - /** @internal */ - PulleyJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - groundAnchorA: this.m_groundAnchorA, - groundAnchorB: this.m_groundAnchorB, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - lengthA: this.m_lengthA, - lengthB: this.m_lengthB, - ratio: this.m_ratio, - }; - }; - /** @internal */ - PulleyJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new PulleyJoint(data); - return joint; - }; - /** @hidden */ - PulleyJoint.prototype._reset = function (def) { - if (Vec2.isValid(def.groundAnchorA)) { - this.m_groundAnchorA.set(def.groundAnchorA); - } - if (Vec2.isValid(def.groundAnchorB)) { - this.m_groundAnchorB.set(def.groundAnchorB); - } - if (Vec2.isValid(def.localAnchorA)) { - this.m_localAnchorA.set(def.localAnchorA); - } - else if (Vec2.isValid(def.anchorA)) { - this.m_localAnchorA.set(this.m_bodyA.getLocalPoint(def.anchorA)); - } - if (Vec2.isValid(def.localAnchorB)) { - this.m_localAnchorB.set(def.localAnchorB); - } - else if (Vec2.isValid(def.anchorB)) { - this.m_localAnchorB.set(this.m_bodyB.getLocalPoint(def.anchorB)); - } - if (Number.isFinite(def.lengthA)) { - this.m_lengthA = def.lengthA; - } - if (Number.isFinite(def.lengthB)) { - this.m_lengthB = def.lengthB; - } - if (Number.isFinite(def.ratio)) { - this.m_ratio = def.ratio; - } - }; - /** - * Get the first ground anchor. - */ - PulleyJoint.prototype.getGroundAnchorA = function () { - return this.m_groundAnchorA; - }; - /** - * Get the second ground anchor. - */ - PulleyJoint.prototype.getGroundAnchorB = function () { - return this.m_groundAnchorB; - }; - /** - * Get the current length of the segment attached to bodyA. - */ - PulleyJoint.prototype.getLengthA = function () { - return this.m_lengthA; - }; - /** - * Get the current length of the segment attached to bodyB. - */ - PulleyJoint.prototype.getLengthB = function () { - return this.m_lengthB; - }; - /** - * Get the pulley ratio. - */ - PulleyJoint.prototype.getRatio = function () { - return this.m_ratio; - }; - /** - * Get the current length of the segment attached to bodyA. - */ - PulleyJoint.prototype.getCurrentLengthA = function () { - var p = this.m_bodyA.getWorldPoint(this.m_localAnchorA); - var s = this.m_groundAnchorA; - return Vec2.distance(p, s); - }; - /** - * Get the current length of the segment attached to bodyB. - */ - PulleyJoint.prototype.getCurrentLengthB = function () { - var p = this.m_bodyB.getWorldPoint(this.m_localAnchorB); - var s = this.m_groundAnchorB; - return Vec2.distance(p, s); - }; - /** - * Shift the origin for any points stored in world coordinates. - * - * @param newOrigin - */ - PulleyJoint.prototype.shiftOrigin = function (newOrigin) { - this.m_groundAnchorA.sub(newOrigin); - this.m_groundAnchorB.sub(newOrigin); - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - PulleyJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - PulleyJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - PulleyJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - PulleyJoint.prototype.getReactionTorque = function (inv_dt) { - return 0.0; - }; - PulleyJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // Get the pulley axes. - this.m_uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA); - this.m_uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB); - var lengthA = this.m_uA.length(); - var lengthB = this.m_uB.length(); - if (lengthA > 10.0 * SettingsInternal.linearSlop) { - this.m_uA.mul(1.0 / lengthA); - } - else { - this.m_uA.setZero(); - } - if (lengthB > 10.0 * SettingsInternal.linearSlop) { - this.m_uB.mul(1.0 / lengthB); - } - else { - this.m_uB.setZero(); - } - // Compute effective mass. - var ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA); - var ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB); - var mA = this.m_invMassA + this.m_invIA * ruA * ruA; - var mB = this.m_invMassB + this.m_invIB * ruB * ruB; - this.m_mass = mA + this.m_ratio * this.m_ratio * mB; - if (this.m_mass > 0.0) { - this.m_mass = 1.0 / this.m_mass; - } - if (step.warmStarting) { - // Scale impulses to support variable time steps. - this.m_impulse *= step.dtRatio; - // Warm starting. - var PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA); - var PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB); - vA.addMul(this.m_invMassA, PA); - wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); - vB.addMul(this.m_invMassB, PB); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - PulleyJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA)); - var vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)); - var Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB); - var impulse = -this.m_mass * Cdot; - this.m_impulse += impulse; - var PA = Vec2.mulNumVec2(-impulse, this.m_uA); - var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB); - vA.addMul(this.m_invMassA, PA); - wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); - vB.addMul(this.m_invMassB, PB); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - PulleyJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // Get the pulley axes. - var uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA); - var uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB); - var lengthA = uA.length(); - var lengthB = uB.length(); - if (lengthA > 10.0 * SettingsInternal.linearSlop) { - uA.mul(1.0 / lengthA); - } - else { - uA.setZero(); - } - if (lengthB > 10.0 * SettingsInternal.linearSlop) { - uB.mul(1.0 / lengthB); - } - else { - uB.setZero(); - } - // Compute effective mass. - var ruA = Vec2.crossVec2Vec2(rA, uA); - var ruB = Vec2.crossVec2Vec2(rB, uB); - var mA = this.m_invMassA + this.m_invIA * ruA * ruA; - var mB = this.m_invMassB + this.m_invIB * ruB * ruB; - var mass = mA + this.m_ratio * this.m_ratio * mB; - if (mass > 0.0) { - mass = 1.0 / mass; - } - var C = this.m_constant - lengthA - this.m_ratio * lengthB; - var linearError = math_abs$2(C); - var impulse = -mass * C; - var PA = Vec2.mulNumVec2(-impulse, uA); - var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB); - cA.addMul(this.m_invMassA, PA); - aA += this.m_invIA * Vec2.crossVec2Vec2(rA, PA); - cB.addMul(this.m_invMassB, PB); - aB += this.m_invIB * Vec2.crossVec2Vec2(rB, PB); - this.m_bodyA.c_position.c = cA; - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c = cB; - this.m_bodyB.c_position.a = aB; - return linearError < SettingsInternal.linearSlop; - }; - PulleyJoint.TYPE = "pulley-joint"; - return PulleyJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_min$1 = Math.min; -/** @internal */ var LimitState; -(function (LimitState) { - LimitState[LimitState["inactiveLimit"] = 0] = "inactiveLimit"; - LimitState[LimitState["atLowerLimit"] = 1] = "atLowerLimit"; - LimitState[LimitState["atUpperLimit"] = 2] = "atUpperLimit"; - LimitState[LimitState["equalLimits"] = 3] = "equalLimits"; -})(LimitState || (LimitState = {})); -/** @internal */ var DEFAULTS$2 = { - maxLength: 0.0, -}; -/** - * A rope joint enforces a maximum distance between two points on two bodies. It - * has no other effect. - * - * Warning: if you attempt to change the maximum length during the simulation - * you will get some non-physical behavior. - * - * A model that would allow you to dynamically modify the length would have some - * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you - * want to dynamically control length. - */ -var RopeJoint = /** @class */ (function (_super) { - __extends(RopeJoint, _super); - function RopeJoint(def, bodyA, bodyB, anchor) { - var _this = this; - // @ts-ignore - if (!(_this instanceof RopeJoint)) { - return new RopeJoint(def, bodyA, bodyB, anchor); - } - def = options(def, DEFAULTS$2); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = RopeJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1.0, 0.0)); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1.0, 0.0)); - _this.m_maxLength = def.maxLength; - _this.m_mass = 0.0; - _this.m_impulse = 0.0; - _this.m_length = 0.0; - _this.m_state = LimitState.inactiveLimit; - return _this; - // Limit: - // C = norm(pB - pA) - L - // u = (pB - pA) / norm(pB - pA) - // Cdot = dot(u, vB + cross(wB, rB) - vA - cross(wA, rA)) - // J = [-u -cross(rA, u) u cross(rB, u)] - // K = J * invM * JT - // = invMassA + invIA * cross(rA, u)^2 + invMassB + invIB * cross(rB, u)^2 - } - /** @internal */ - RopeJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - maxLength: this.m_maxLength, - }; - }; - /** @internal */ - RopeJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new RopeJoint(data); - return joint; - }; - /** @hidden */ - RopeJoint.prototype._reset = function (def) { - if (Number.isFinite(def.maxLength)) { - this.m_maxLength = def.maxLength; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - RopeJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - RopeJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Set the maximum length of the rope. - */ - RopeJoint.prototype.setMaxLength = function (length) { - this.m_maxLength = length; - }; - /** - * Get the maximum length of the rope. - */ - RopeJoint.prototype.getMaxLength = function () { - return this.m_maxLength; - }; - RopeJoint.prototype.getLimitState = function () { - // TODO LimitState - return this.m_state; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - RopeJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - RopeJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - RopeJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - RopeJoint.prototype.getReactionTorque = function (inv_dt) { - return 0.0; - }; - RopeJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); - this.m_rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); - this.m_u = Vec2.zero(); - this.m_u.addCombine(1, cB, 1, this.m_rB); - this.m_u.subCombine(1, cA, 1, this.m_rA); - this.m_length = this.m_u.length(); - var C = this.m_length - this.m_maxLength; - if (C > 0.0) { - this.m_state = LimitState.atUpperLimit; - } - else { - this.m_state = LimitState.inactiveLimit; - } - if (this.m_length > SettingsInternal.linearSlop) { - this.m_u.mul(1.0 / this.m_length); - } - else { - this.m_u.setZero(); - this.m_mass = 0.0; - this.m_impulse = 0.0; - return; + } + output2.fraction = t; + if (numerator > 0) { + output2.normal = Rot.mulVec2(xf2.q, normal3).neg(); + } else { + output2.normal = Rot.mulVec2(xf2.q, normal3); + } + return true; + }; + EdgeShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + transformVec2(v1$2, xf2, this.m_vertex1); + transformVec2(v2$1, xf2, this.m_vertex2); + AABB.combinePoints(aabb, v1$2, v2$1); + AABB.extend(aabb, this.m_radius); + }; + EdgeShape2.prototype.computeMass = function(massData, density) { + massData.mass = 0; + combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2); + massData.I = 0; + }; + EdgeShape2.prototype.computeDistanceProxy = function(proxy) { + proxy.m_vertices[0] = this.m_vertex1; + proxy.m_vertices[1] = this.m_vertex2; + proxy.m_vertices.length = 2; + proxy.m_count = 2; + proxy.m_radius = this.m_radius; + }; + EdgeShape2.TYPE = "edge"; + return EdgeShape2; + }(Shape) +); +var Edge = EdgeShape; +var v1$1 = vec2(0, 0); +var v2 = vec2(0, 0); +var ChainShape = ( + /** @class */ + function(_super) { + __extends(ChainShape2, _super); + function ChainShape2(vertices, loop) { + var _this = this; + if (!(_this instanceof ChainShape2)) { + return new ChainShape2(vertices, loop); + } + _this = _super.call(this) || this; + _this.m_type = ChainShape2.TYPE; + _this.m_radius = SettingsInternal.polygonRadius; + _this.m_vertices = []; + _this.m_count = 0; + _this.m_prevVertex = null; + _this.m_nextVertex = null; + _this.m_hasPrevVertex = false; + _this.m_hasNextVertex = false; + _this.m_isLoop = !!loop; + if (vertices && vertices.length) { + if (loop) { + _this._createLoop(vertices); + } else { + _this._createChain(vertices); + } + } + return _this; + } + ChainShape2.prototype._serialize = function() { + var data = { + type: this.m_type, + vertices: this.m_vertices, + isLoop: this.m_isLoop, + hasPrevVertex: this.m_hasPrevVertex, + hasNextVertex: this.m_hasNextVertex, + prevVertex: null, + nextVertex: null + }; + if (this.m_prevVertex) { + data.prevVertex = this.m_prevVertex; + } + if (this.m_nextVertex) { + data.nextVertex = this.m_nextVertex; + } + return data; + }; + ChainShape2._deserialize = function(data, fixture, restore) { + var vertices = []; + if (data.vertices) { + for (var i = 0; i < data.vertices.length; i++) { + vertices.push(restore(Vec2, data.vertices[i])); + } + } + var shape = new ChainShape2(vertices, data.isLoop); + if (data.prevVertex) { + shape.setPrevVertex(data.prevVertex); + } + if (data.nextVertex) { + shape.setNextVertex(data.nextVertex); + } + return shape; + }; + ChainShape2.prototype.getType = function() { + return this.m_type; + }; + ChainShape2.prototype.getRadius = function() { + return this.m_radius; + }; + ChainShape2.prototype._createLoop = function(vertices) { + if (vertices.length < 3) { + return; + } + for (var i = 1; i < vertices.length; ++i) { + vertices[i - 1]; + vertices[i]; + } + this.m_vertices = []; + this.m_count = vertices.length + 1; + for (var i = 0; i < vertices.length; ++i) { + this.m_vertices[i] = Vec2.clone(vertices[i]); + } + this.m_vertices[vertices.length] = Vec2.clone(vertices[0]); + this.m_prevVertex = this.m_vertices[this.m_count - 2]; + this.m_nextVertex = this.m_vertices[1]; + this.m_hasPrevVertex = true; + this.m_hasNextVertex = true; + return this; + }; + ChainShape2.prototype._createChain = function(vertices) { + for (var i = 1; i < vertices.length; ++i) { + vertices[i - 1]; + vertices[i]; + } + this.m_count = vertices.length; + for (var i = 0; i < vertices.length; ++i) { + this.m_vertices[i] = Vec2.clone(vertices[i]); + } + this.m_hasPrevVertex = false; + this.m_hasNextVertex = false; + this.m_prevVertex = null; + this.m_nextVertex = null; + return this; + }; + ChainShape2.prototype._reset = function() { + if (this.m_isLoop) { + this._createLoop(this.m_vertices); + } else { + this._createChain(this.m_vertices); + } + }; + ChainShape2.prototype.setPrevVertex = function(prevVertex) { + this.m_prevVertex = prevVertex; + this.m_hasPrevVertex = true; + }; + ChainShape2.prototype.getPrevVertex = function() { + return this.m_prevVertex; + }; + ChainShape2.prototype.setNextVertex = function(nextVertex) { + this.m_nextVertex = nextVertex; + this.m_hasNextVertex = true; + }; + ChainShape2.prototype.getNextVertex = function() { + return this.m_nextVertex; + }; + ChainShape2.prototype._clone = function() { + var clone = new ChainShape2(); + clone._createChain(this.m_vertices); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_prevVertex = this.m_prevVertex; + clone.m_nextVertex = this.m_nextVertex; + clone.m_hasPrevVertex = this.m_hasPrevVertex; + clone.m_hasNextVertex = this.m_hasNextVertex; + return clone; + }; + ChainShape2.prototype.getChildCount = function() { + return this.m_count - 1; + }; + ChainShape2.prototype.getChildEdge = function(edge, childIndex) { + edge.m_type = EdgeShape.TYPE; + edge.m_radius = this.m_radius; + edge.m_vertex1 = this.m_vertices[childIndex]; + edge.m_vertex2 = this.m_vertices[childIndex + 1]; + if (childIndex > 0) { + edge.m_vertex0 = this.m_vertices[childIndex - 1]; + edge.m_hasVertex0 = true; + } else { + edge.m_vertex0 = this.m_prevVertex; + edge.m_hasVertex0 = this.m_hasPrevVertex; + } + if (childIndex < this.m_count - 2) { + edge.m_vertex3 = this.m_vertices[childIndex + 2]; + edge.m_hasVertex3 = true; + } else { + edge.m_vertex3 = this.m_nextVertex; + edge.m_hasVertex3 = this.m_hasNextVertex; + } + }; + ChainShape2.prototype.getVertex = function(index) { + if (index < this.m_count) { + return this.m_vertices[index]; + } else { + return this.m_vertices[0]; + } + }; + ChainShape2.prototype.isLoop = function() { + return this.m_isLoop; + }; + ChainShape2.prototype.testPoint = function(xf2, p) { + return false; + }; + ChainShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1)); + return edgeShape.rayCast(output2, input2, xf2, 0); + }; + ChainShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + transformVec2(v1$1, xf2, this.getVertex(childIndex)); + transformVec2(v2, xf2, this.getVertex(childIndex + 1)); + AABB.combinePoints(aabb, v1$1, v2); + }; + ChainShape2.prototype.computeMass = function(massData, density) { + massData.mass = 0; + zeroVec2(massData.center); + massData.I = 0; + }; + ChainShape2.prototype.computeDistanceProxy = function(proxy, childIndex) { + proxy.m_vertices[0] = this.getVertex(childIndex); + proxy.m_vertices[1] = this.getVertex(childIndex + 1); + proxy.m_count = 2; + proxy.m_radius = this.m_radius; + }; + ChainShape2.TYPE = "chain"; + return ChainShape2; + }(Shape) +); +var Chain = ChainShape; +var math_max$1 = Math.max; +var math_min$3 = Math.min; +var temp$1 = vec2(0, 0); +var e$1 = vec2(0, 0); +var e1$1 = vec2(0, 0); +var e2$1 = vec2(0, 0); +var center = vec2(0, 0); +var s = vec2(0, 0); +var PolygonShape = ( + /** @class */ + function(_super) { + __extends(PolygonShape2, _super); + function PolygonShape2(vertices) { + var _this = this; + if (!(_this instanceof PolygonShape2)) { + return new PolygonShape2(vertices); + } + _this = _super.call(this) || this; + _this.m_type = PolygonShape2.TYPE; + _this.m_radius = SettingsInternal.polygonRadius; + _this.m_centroid = Vec2.zero(); + _this.m_vertices = []; + _this.m_normals = []; + _this.m_count = 0; + if (vertices && vertices.length) { + _this._set(vertices); + } + return _this; + } + PolygonShape2.prototype._serialize = function() { + return { + type: this.m_type, + vertices: this.m_vertices + }; + }; + PolygonShape2._deserialize = function(data, fixture, restore) { + var vertices = []; + if (data.vertices) { + for (var i = 0; i < data.vertices.length; i++) { + vertices.push(restore(Vec2, data.vertices[i])); + } + } + var shape = new PolygonShape2(vertices); + return shape; + }; + PolygonShape2.prototype.getType = function() { + return this.m_type; + }; + PolygonShape2.prototype.getRadius = function() { + return this.m_radius; + }; + PolygonShape2.prototype._clone = function() { + var clone = new PolygonShape2(); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_count = this.m_count; + clone.m_centroid.setVec2(this.m_centroid); + for (var i = 0; i < this.m_count; i++) { + clone.m_vertices.push(this.m_vertices[i].clone()); + } + for (var i = 0; i < this.m_normals.length; i++) { + clone.m_normals.push(this.m_normals[i].clone()); + } + return clone; + }; + PolygonShape2.prototype.getChildCount = function() { + return 1; + }; + PolygonShape2.prototype._reset = function() { + this._set(this.m_vertices); + }; + PolygonShape2.prototype._set = function(vertices) { + if (vertices.length < 3) { + this._setAsBox(1, 1); + return; + } + var n2 = math_min$3(vertices.length, SettingsInternal.maxPolygonVertices); + var ps = []; + for (var i = 0; i < n2; ++i) { + var v3 = vertices[i]; + var unique = true; + for (var j = 0; j < ps.length; ++j) { + if (Vec2.distanceSquared(v3, ps[j]) < 0.25 * SettingsInternal.linearSlopSquared) { + unique = false; + break; + } } - // Compute effective mass. - var crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u); - var crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u); - var invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB; - this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0; - if (step.warmStarting) { - // Scale the impulse to support a variable time step. - this.m_impulse *= step.dtRatio; - var P = Vec2.mulNumVec2(this.m_impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - } - else { - this.m_impulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - RopeJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - // Cdot = dot(u, v + cross(w, r)) - var vpA = Vec2.addCrossNumVec2(vA, wA, this.m_rA); - var vpB = Vec2.addCrossNumVec2(vB, wB, this.m_rB); - var C = this.m_length - this.m_maxLength; - var Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA)); - // Predictive constraint. - if (C < 0.0) { - Cdot += step.inv_dt * C; + if (unique) { + ps.push(Vec2.clone(v3)); } - var impulse = -this.m_mass * Cdot; - var oldImpulse = this.m_impulse; - this.m_impulse = math_min$1(0.0, this.m_impulse + impulse); - impulse = this.m_impulse - oldImpulse; - var P = Vec2.mulNumVec2(impulse, this.m_u); - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P); - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - RopeJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); - var rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); - var u = Vec2.zero(); - u.addCombine(1, cB, 1, rB); - u.subCombine(1, cA, 1, rA); - var length = u.normalize(); - var C = length - this.m_maxLength; - C = clamp(C, 0.0, SettingsInternal.maxLinearCorrection); - var impulse = -this.m_mass * C; - var P = Vec2.mulNumVec2(impulse, u); - cA.subMul(this.m_invMassA, P); - aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P); - cB.addMul(this.m_invMassB, P); - aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P); - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return length - this.m_maxLength < SettingsInternal.linearSlop; - }; - RopeJoint.TYPE = "rope-joint"; - return RopeJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs$1 = Math.abs; -/** @internal */ var math_PI$1 = Math.PI; -/** @internal */ var DEFAULTS$1 = { - frequencyHz: 0.0, - dampingRatio: 0.0, + } + n2 = ps.length; + if (n2 < 3) { + this._setAsBox(1, 1); + return; + } + var i0 = 0; + var x0 = ps[0].x; + for (var i = 1; i < n2; ++i) { + var x2 = ps[i].x; + if (x2 > x0 || x2 === x0 && ps[i].y < ps[i0].y) { + i0 = i; + x0 = x2; + } + } + var hull = []; + var m = 0; + var ih = i0; + while (true) { + hull[m] = ih; + var ie2 = 0; + for (var j = 1; j < n2; ++j) { + if (ie2 === ih) { + ie2 = j; + continue; + } + var r = Vec2.sub(ps[ie2], ps[hull[m]]); + var v3 = Vec2.sub(ps[j], ps[hull[m]]); + var c2 = Vec2.crossVec2Vec2(r, v3); + if (c2 < 0) { + ie2 = j; + } + if (c2 === 0 && v3.lengthSquared() > r.lengthSquared()) { + ie2 = j; + } + } + ++m; + ih = ie2; + if (ie2 === i0) { + break; + } + } + if (m < 3) { + this._setAsBox(1, 1); + return; + } + this.m_count = m; + this.m_vertices = []; + for (var i = 0; i < m; ++i) { + this.m_vertices[i] = ps[hull[i]]; + } + for (var i = 0; i < m; ++i) { + var i1 = i; + var i2 = i + 1 < m ? i + 1 : 0; + var edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]); + this.m_normals[i] = Vec2.crossVec2Num(edge, 1); + this.m_normals[i].normalize(); + } + this.m_centroid = computeCentroid(this.m_vertices, m); + }; + PolygonShape2.prototype._setAsBox = function(hx, hy, center2, angle) { + this.m_vertices[0] = Vec2.neo(hx, -hy); + this.m_vertices[1] = Vec2.neo(hx, hy); + this.m_vertices[2] = Vec2.neo(-hx, hy); + this.m_vertices[3] = Vec2.neo(-hx, -hy); + this.m_normals[0] = Vec2.neo(1, 0); + this.m_normals[1] = Vec2.neo(0, 1); + this.m_normals[2] = Vec2.neo(-1, 0); + this.m_normals[3] = Vec2.neo(0, -1); + this.m_count = 4; + if (center2 && Vec2.isValid(center2)) { + angle = angle || 0; + copyVec2(this.m_centroid, center2); + var xf2 = Transform.identity(); + xf2.p.setVec2(center2); + xf2.q.setAngle(angle); + for (var i = 0; i < this.m_count; ++i) { + this.m_vertices[i] = Transform.mulVec2(xf2, this.m_vertices[i]); + this.m_normals[i] = Rot.mulVec2(xf2.q, this.m_normals[i]); + } + } + }; + PolygonShape2.prototype.testPoint = function(xf2, p) { + var pLocal = detransformVec2(temp$1, xf2, p); + for (var i = 0; i < this.m_count; ++i) { + var dot = dotVec2(this.m_normals[i], pLocal) - dotVec2(this.m_normals[i], this.m_vertices[i]); + if (dot > 0) { + return false; + } + } + return true; + }; + PolygonShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var p1 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p1, xf2.p)); + var p2 = Rot.mulTVec2(xf2.q, Vec2.sub(input2.p2, xf2.p)); + var d2 = Vec2.sub(p2, p1); + var lower = 0; + var upper = input2.maxFraction; + var index = -1; + for (var i = 0; i < this.m_count; ++i) { + var numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1)); + var denominator = Vec2.dot(this.m_normals[i], d2); + if (denominator == 0) { + if (numerator < 0) { + return false; + } + } else { + if (denominator < 0 && numerator < lower * denominator) { + lower = numerator / denominator; + index = i; + } else if (denominator > 0 && numerator < upper * denominator) { + upper = numerator / denominator; + } + } + if (upper < lower) { + return false; + } + } + if (index >= 0) { + output2.fraction = lower; + output2.normal = Rot.mulVec2(xf2.q, this.m_normals[index]); + return true; + } + return false; + }; + PolygonShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + var minX = Infinity; + var minY = Infinity; + var maxX = -Infinity; + var maxY = -Infinity; + for (var i = 0; i < this.m_count; ++i) { + var v3 = transformVec2(temp$1, xf2, this.m_vertices[i]); + minX = math_min$3(minX, v3.x); + maxX = math_max$1(maxX, v3.x); + minY = math_min$3(minY, v3.y); + maxY = math_max$1(maxY, v3.y); + } + setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius); + setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius); + }; + PolygonShape2.prototype.computeMass = function(massData, density) { + zeroVec2(center); + var area = 0; + var I = 0; + zeroVec2(s); + for (var i = 0; i < this.m_count; ++i) { + plusVec2(s, this.m_vertices[i]); + } + scaleVec2(s, 1 / this.m_count, s); + var k_inv3 = 1 / 3; + for (var i = 0; i < this.m_count; ++i) { + subVec2(e1$1, this.m_vertices[i], s); + if (i + 1 < this.m_count) { + subVec2(e2$1, this.m_vertices[i + 1], s); + } else { + subVec2(e2$1, this.m_vertices[0], s); + } + var D = crossVec2Vec2(e1$1, e2$1); + var triangleArea = 0.5 * D; + area += triangleArea; + combine2Vec2(temp$1, triangleArea * k_inv3, e1$1, triangleArea * k_inv3, e2$1); + plusVec2(center, temp$1); + var ex1 = e1$1.x; + var ey1 = e1$1.y; + var ex2 = e2$1.x; + var ey2 = e2$1.y; + var intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2; + var inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2; + I += 0.25 * k_inv3 * D * (intx2 + inty2); + } + massData.mass = density * area; + scaleVec2(center, 1 / area, center); + addVec2(massData.center, center, s); + massData.I = density * I; + massData.I += massData.mass * (dotVec2(massData.center, massData.center) - dotVec2(center, center)); + }; + PolygonShape2.prototype.validate = function() { + for (var i = 0; i < this.m_count; ++i) { + var i1 = i; + var i2 = i < this.m_count - 1 ? i1 + 1 : 0; + var p = this.m_vertices[i1]; + subVec2(e$1, this.m_vertices[i2], p); + for (var j = 0; j < this.m_count; ++j) { + if (j == i1 || j == i2) { + continue; + } + var c2 = crossVec2Vec2(e$1, subVec2(temp$1, this.m_vertices[j], p)); + if (c2 < 0) { + return false; + } + } + } + return true; + }; + PolygonShape2.prototype.computeDistanceProxy = function(proxy) { + for (var i = 0; i < this.m_count; ++i) { + proxy.m_vertices[i] = this.m_vertices[i]; + } + proxy.m_vertices.length = this.m_count; + proxy.m_count = this.m_count; + proxy.m_radius = this.m_radius; + }; + PolygonShape2.TYPE = "polygon"; + return PolygonShape2; + }(Shape) +); +function computeCentroid(vs, count) { + var c2 = Vec2.zero(); + var area = 0; + var pRef = Vec2.zero(); + var i; + var inv3 = 1 / 3; + for (var i = 0; i < count; ++i) { + var p1 = pRef; + var p2 = vs[i]; + var p3 = i + 1 < count ? vs[i + 1] : vs[0]; + var e1_1 = Vec2.sub(p2, p1); + var e2_1 = Vec2.sub(p3, p1); + var D = Vec2.crossVec2Vec2(e1_1, e2_1); + var triangleArea = 0.5 * D; + area += triangleArea; + combine3Vec2(temp$1, 1, p1, 1, p2, 1, p3); + plusScaleVec2(c2, triangleArea * inv3, temp$1); + } + c2.mul(1 / area); + return c2; +} +var Polygon = PolygonShape; +var math_sqrt = Math.sqrt; +var math_PI$4 = Math.PI; +var temp = vec2(0, 0); +var CircleShape = ( + /** @class */ + function(_super) { + __extends(CircleShape2, _super); + function CircleShape2(a2, b2) { + var _this = this; + if (!(_this instanceof CircleShape2)) { + return new CircleShape2(a2, b2); + } + _this = _super.call(this) || this; + _this.m_type = CircleShape2.TYPE; + _this.m_p = Vec2.zero(); + _this.m_radius = 1; + if (typeof a2 === "object" && Vec2.isValid(a2)) { + _this.m_p.setVec2(a2); + if (typeof b2 === "number") { + _this.m_radius = b2; + } + } else if (typeof a2 === "number") { + _this.m_radius = a2; + } + return _this; + } + CircleShape2.prototype._serialize = function() { + return { + type: this.m_type, + p: this.m_p, + radius: this.m_radius + }; + }; + CircleShape2._deserialize = function(data) { + return new CircleShape2(data.p, data.radius); + }; + CircleShape2.prototype._reset = function() { + }; + CircleShape2.prototype.getType = function() { + return this.m_type; + }; + CircleShape2.prototype.getRadius = function() { + return this.m_radius; + }; + CircleShape2.prototype.getCenter = function() { + return this.m_p; + }; + CircleShape2.prototype._clone = function() { + var clone = new CircleShape2(); + clone.m_type = this.m_type; + clone.m_radius = this.m_radius; + clone.m_p = this.m_p.clone(); + return clone; + }; + CircleShape2.prototype.getChildCount = function() { + return 1; + }; + CircleShape2.prototype.testPoint = function(xf2, p) { + var center2 = transformVec2(temp, xf2, this.m_p); + return distSqrVec2(p, center2) <= this.m_radius * this.m_radius; + }; + CircleShape2.prototype.rayCast = function(output2, input2, xf2, childIndex) { + var position = Vec2.add(xf2.p, Rot.mulVec2(xf2.q, this.m_p)); + var s2 = Vec2.sub(input2.p1, position); + var b2 = Vec2.dot(s2, s2) - this.m_radius * this.m_radius; + var r = Vec2.sub(input2.p2, input2.p1); + var c2 = Vec2.dot(s2, r); + var rr = Vec2.dot(r, r); + var sigma = c2 * c2 - rr * b2; + if (sigma < 0 || rr < EPSILON) { + return false; + } + var a2 = -(c2 + math_sqrt(sigma)); + if (0 <= a2 && a2 <= input2.maxFraction * rr) { + a2 /= rr; + output2.fraction = a2; + output2.normal = Vec2.add(s2, Vec2.mulNumVec2(a2, r)); + output2.normal.normalize(); + return true; + } + return false; + }; + CircleShape2.prototype.computeAABB = function(aabb, xf2, childIndex) { + var p = transformVec2(temp, xf2, this.m_p); + setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius); + setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius); + }; + CircleShape2.prototype.computeMass = function(massData, density) { + massData.mass = density * math_PI$4 * this.m_radius * this.m_radius; + copyVec2(massData.center, this.m_p); + massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + lengthSqrVec2(this.m_p)); + }; + CircleShape2.prototype.computeDistanceProxy = function(proxy) { + proxy.m_vertices[0] = this.m_p; + proxy.m_vertices.length = 1; + proxy.m_count = 1; + proxy.m_radius = this.m_radius; + }; + CircleShape2.TYPE = "circle"; + return CircleShape2; + }(Shape) +); +var Circle = CircleShape; +var math_abs$5 = Math.abs; +var math_PI$3 = Math.PI; +var DEFAULTS$a = { + frequencyHz: 0, + dampingRatio: 0 }; -/** - * A weld joint essentially glues two bodies together. A weld joint may distort - * somewhat because the island constraint solver is approximate. - */ -var WeldJoint = /** @class */ (function (_super) { - __extends(WeldJoint, _super); - function WeldJoint(def, bodyA, bodyB, anchor) { - var _this = this; - // @ts-ignore - if (!(_this instanceof WeldJoint)) { - return new WeldJoint(def, bodyA, bodyB, anchor); - } - def = options(def, DEFAULTS$1); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_type = WeldJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_impulse = new Vec3(); - _this.m_bias = 0.0; - _this.m_gamma = 0.0; - // Solver temp - _this.m_rA; - _this.m_rB; - _this.m_localCenterA; - _this.m_localCenterB; - _this.m_invMassA; - _this.m_invMassB; - _this.m_invIA; - _this.m_invIB; - _this.m_mass = new Mat33(); - return _this; - // Point-to-point constraint - // C = p2 - p1 - // Cdot = v2 - v1 - // / = v2 + cross(w2, r2) - v1 - cross(w1, r1) - // J = [-I -r1_skew I r2_skew ] - // Identity used: - // w k % (rx i + ry j) = w * (-ry i + rx j) - // Angle constraint - // C = angle2 - angle1 - referenceAngle - // Cdot = w2 - w1 - // J = [0 0 -1 0 0 1] - // K = invI1 + invI2 - } - /** @internal */ - WeldJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - referenceAngle: this.m_referenceAngle, - }; +var DistanceJoint = ( + /** @class */ + function(_super) { + __extends(DistanceJoint2, _super); + function DistanceJoint2(def, bodyA, bodyB, anchorA, anchorB) { + var _this = this; + if (!(_this instanceof DistanceJoint2)) { + return new DistanceJoint2(def, bodyA, bodyB, anchorA, anchorB); + } + if (bodyB && anchorA && "m_type" in anchorA && "x" in bodyB && "y" in bodyB) { + var temp3 = bodyB; + bodyB = anchorA; + anchorA = temp3; + } + def = options(def, DEFAULTS$a); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = DistanceJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.zero()); + _this.m_length = Number.isFinite(def.length) ? def.length : Vec2.distance(bodyA.getWorldPoint(_this.m_localAnchorA), bodyB.getWorldPoint(_this.m_localAnchorB)); + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_impulse = 0; + _this.m_gamma = 0; + _this.m_bias = 0; + return _this; + } + DistanceJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + length: this.m_length, + impulse: this.m_impulse, + gamma: this.m_gamma, + bias: this.m_bias + }; + }; + DistanceJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new DistanceJoint2(data); + return joint; + }; + DistanceJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (def.length > 0) { + this.m_length = +def.length; + } else if (def.length < 0) ; + else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) { + this.m_length = Vec2.distance(this.m_bodyA.getWorldPoint(this.m_localAnchorA), this.m_bodyB.getWorldPoint(this.m_localAnchorB)); + } + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; + } + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; + } + }; + DistanceJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + DistanceJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + DistanceJoint2.prototype.setLength = function(length) { + this.m_length = length; + }; + DistanceJoint2.prototype.getLength = function() { + return this.m_length; + }; + DistanceJoint2.prototype.setFrequency = function(hz) { + this.m_frequencyHz = hz; + }; + DistanceJoint2.prototype.getFrequency = function() { + return this.m_frequencyHz; + }; + DistanceJoint2.prototype.setDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + DistanceJoint2.prototype.getDampingRatio = function() { + return this.m_dampingRatio; + }; + DistanceJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + DistanceJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + DistanceJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); + }; + DistanceJoint2.prototype.getReactionTorque = function(inv_dt) { + return 0; + }; + DistanceJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + this.m_u = Vec2.sub(Vec2.add(cB2, this.m_rB), Vec2.add(cA2, this.m_rA)); + var length = this.m_u.length(); + if (length > SettingsInternal.linearSlop) { + this.m_u.mul(1 / length); + } else { + this.m_u.setNum(0, 0); + } + var crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u); + var crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u); + var invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu; + this.m_mass = invMass != 0 ? 1 / invMass : 0; + if (this.m_frequencyHz > 0) { + var C = length - this.m_length; + var omega = 2 * math_PI$3 * this.m_frequencyHz; + var d2 = 2 * this.m_mass * this.m_dampingRatio * omega; + var k = this.m_mass * omega * omega; + var h = step.dt; + this.m_gamma = h * (d2 + h * k); + this.m_gamma = this.m_gamma != 0 ? 1 / this.m_gamma : 0; + this.m_bias = C * h * k * this.m_gamma; + invMass += this.m_gamma; + this.m_mass = invMass != 0 ? 1 / invMass : 0; + } else { + this.m_gamma = 0; + this.m_bias = 0; + } + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + var P3 = Vec2.mulNumVec2(this.m_impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + DistanceJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vpA = Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA)); + var vpB = Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB)); + var Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA); + var impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse); + this.m_impulse += impulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + DistanceJoint2.prototype.solvePositionConstraints = function(step) { + if (this.m_frequencyHz > 0) { + return true; + } + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); + var u = Vec2.sub(Vec2.add(cB2, rB2), Vec2.add(cA2, rA2)); + var length = u.normalize(); + var C = clamp(length - this.m_length, -SettingsInternal.maxLinearCorrection, SettingsInternal.maxLinearCorrection); + var impulse = -this.m_mass * C; + var P3 = Vec2.mulNumVec2(impulse, u); + cA2.subMul(this.m_invMassA, P3); + aA -= this.m_invIA * Vec2.crossVec2Vec2(rA2, P3); + cB2.addMul(this.m_invMassB, P3); + aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, P3); + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return math_abs$5(C) < SettingsInternal.linearSlop; + }; + DistanceJoint2.TYPE = "distance-joint"; + return DistanceJoint2; + }(Joint) +); +var DEFAULTS$9 = { + maxForce: 0, + maxTorque: 0 +}; +var FrictionJoint = ( + /** @class */ + function(_super) { + __extends(FrictionJoint2, _super); + function FrictionJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + if (!(_this instanceof FrictionJoint2)) { + return new FrictionJoint2(def, bodyA, bodyB, anchor); + } + def = options(def, DEFAULTS$9); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = FrictionJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + _this.m_linearImpulse = Vec2.zero(); + _this.m_angularImpulse = 0; + _this.m_maxForce = def.maxForce; + _this.m_maxTorque = def.maxTorque; + return _this; + } + FrictionJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + maxForce: this.m_maxForce, + maxTorque: this.m_maxTorque, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB + }; + }; + FrictionJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new FrictionJoint2(data); + return joint; + }; + FrictionJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (Number.isFinite(def.maxForce)) { + this.m_maxForce = def.maxForce; + } + if (Number.isFinite(def.maxTorque)) { + this.m_maxTorque = def.maxTorque; + } + }; + FrictionJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + FrictionJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + FrictionJoint2.prototype.setMaxForce = function(force) { + this.m_maxForce = force; + }; + FrictionJoint2.prototype.getMaxForce = function() { + return this.m_maxForce; + }; + FrictionJoint2.prototype.setMaxTorque = function(torque) { + this.m_maxTorque = torque; + }; + FrictionJoint2.prototype.getMaxTorque = function() { + return this.m_maxTorque; + }; + FrictionJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + FrictionJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + FrictionJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); + }; + FrictionJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_angularImpulse; + }; + FrictionJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var K = new Mat22(); + K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y; + K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x; + this.m_linearMass = K.getInverse(); + this.m_angularMass = iA + iB; + if (this.m_angularMass > 0) { + this.m_angularMass = 1 / this.m_angularMass; + } + if (step.warmStarting) { + this.m_linearImpulse.mul(step.dtRatio); + this.m_angularImpulse *= step.dtRatio; + var P3 = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_angularImpulse); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_angularImpulse); + } else { + this.m_linearImpulse.setZero(); + this.m_angularImpulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + FrictionJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var h = step.dt; + { + var Cdot = wB - wA; + var impulse = -this.m_angularMass * Cdot; + var oldImpulse = this.m_angularImpulse; + var maxImpulse = h * this.m_maxTorque; + this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_angularImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + { + var Cdot = Vec2.sub(Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB)), Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA))); + var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); + var oldImpulse = this.m_linearImpulse; + this.m_linearImpulse.add(impulse); + var maxImpulse = h * this.m_maxForce; + if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) { + this.m_linearImpulse.normalize(); + this.m_linearImpulse.mul(maxImpulse); + } + impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); + vA2.subMul(mA, impulse); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); + vB2.addMul(mB, impulse); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + FrictionJoint2.prototype.solvePositionConstraints = function(step) { + return true; + }; + FrictionJoint2.TYPE = "friction-joint"; + return FrictionJoint2; + }(Joint) +); +var Mat33 = ( + /** @class */ + function() { + function Mat332(a2, b2, c2) { + if (typeof a2 === "object" && a2 !== null) { + this.ex = Vec3.clone(a2); + this.ey = Vec3.clone(b2); + this.ez = Vec3.clone(c2); + } else { + this.ex = Vec3.zero(); + this.ey = Vec3.zero(); + this.ez = Vec3.zero(); + } + } + Mat332.prototype.toString = function() { + return JSON.stringify(this); + }; + Mat332.isValid = function(obj) { + if (obj === null || typeof obj === "undefined") { + return false; + } + return Vec3.isValid(obj.ex) && Vec3.isValid(obj.ey) && Vec3.isValid(obj.ez); + }; + Mat332.assert = function(o) { + }; + Mat332.prototype.setZero = function() { + this.ex.setZero(); + this.ey.setZero(); + this.ez.setZero(); + return this; + }; + Mat332.prototype.solve33 = function(v3) { + var cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; + var cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; + var cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; + var det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z; + if (det !== 0) { + det = 1 / det; + } + var r = new Vec3(); + cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y; + cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z; + cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x; + r.x = det * (v3.x * cross_x + v3.y * cross_y + v3.z * cross_z); + cross_x = v3.y * this.ez.z - v3.z * this.ez.y; + cross_y = v3.z * this.ez.x - v3.x * this.ez.z; + cross_z = v3.x * this.ez.y - v3.y * this.ez.x; + r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); + cross_x = this.ey.y * v3.z - this.ey.z * v3.y; + cross_y = this.ey.z * v3.x - this.ey.x * v3.z; + cross_z = this.ey.x * v3.y - this.ey.y * v3.x; + r.z = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z); + return r; + }; + Mat332.prototype.solve22 = function(v3) { + var a11 = this.ex.x; + var a12 = this.ey.x; + var a21 = this.ex.y; + var a22 = this.ey.y; + var det = a11 * a22 - a12 * a21; + if (det !== 0) { + det = 1 / det; + } + var r = Vec2.zero(); + r.x = det * (a22 * v3.x - a12 * v3.y); + r.y = det * (a11 * v3.y - a21 * v3.x); + return r; + }; + Mat332.prototype.getInverse22 = function(M) { + var a2 = this.ex.x; + var b2 = this.ey.x; + var c2 = this.ex.y; + var d2 = this.ey.y; + var det = a2 * d2 - b2 * c2; + if (det !== 0) { + det = 1 / det; + } + M.ex.x = det * d2; + M.ey.x = -det * b2; + M.ex.z = 0; + M.ex.y = -det * c2; + M.ey.y = det * a2; + M.ey.z = 0; + M.ez.x = 0; + M.ez.y = 0; + M.ez.z = 0; + }; + Mat332.prototype.getSymInverse33 = function(M) { + var det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez)); + if (det !== 0) { + det = 1 / det; + } + var a11 = this.ex.x; + var a12 = this.ey.x; + var a13 = this.ez.x; + var a22 = this.ey.y; + var a23 = this.ez.y; + var a33 = this.ez.z; + M.ex.x = det * (a22 * a33 - a23 * a23); + M.ex.y = det * (a13 * a23 - a12 * a33); + M.ex.z = det * (a12 * a23 - a13 * a22); + M.ey.x = M.ex.y; + M.ey.y = det * (a11 * a33 - a13 * a13); + M.ey.z = det * (a13 * a12 - a11 * a23); + M.ez.x = M.ex.z; + M.ez.y = M.ey.z; + M.ez.z = det * (a11 * a22 - a12 * a12); + }; + Mat332.mul = function(a2, b2) { + if (b2 && "z" in b2 && "y" in b2 && "x" in b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y + a2.ez.x * b2.z; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y + a2.ez.y * b2.z; + var z = a2.ex.z * b2.x + a2.ey.z * b2.y + a2.ez.z * b2.z; + return new Vec3(x2, y, z); + } else if (b2 && "y" in b2 && "x" in b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y; + return Vec2.neo(x2, y); + } + }; + Mat332.mulVec3 = function(a2, b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y + a2.ez.x * b2.z; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y + a2.ez.y * b2.z; + var z = a2.ex.z * b2.x + a2.ey.z * b2.y + a2.ez.z * b2.z; + return new Vec3(x2, y, z); + }; + Mat332.mulVec2 = function(a2, b2) { + var x2 = a2.ex.x * b2.x + a2.ey.x * b2.y; + var y = a2.ex.y * b2.x + a2.ey.y * b2.y; + return Vec2.neo(x2, y); + }; + Mat332.add = function(a2, b2) { + return new Mat332(Vec3.add(a2.ex, b2.ex), Vec3.add(a2.ey, b2.ey), Vec3.add(a2.ez, b2.ez)); + }; + return Mat332; + }() +); +var math_abs$4 = Math.abs; +var LimitState$2; +(function(LimitState2) { + LimitState2[LimitState2["inactiveLimit"] = 0] = "inactiveLimit"; + LimitState2[LimitState2["atLowerLimit"] = 1] = "atLowerLimit"; + LimitState2[LimitState2["atUpperLimit"] = 2] = "atUpperLimit"; + LimitState2[LimitState2["equalLimits"] = 3] = "equalLimits"; +})(LimitState$2 || (LimitState$2 = {})); +var DEFAULTS$8 = { + lowerAngle: 0, + upperAngle: 0, + maxMotorTorque: 0, + motorSpeed: 0, + enableLimit: false, + enableMotor: false +}; +var RevoluteJoint = ( + /** @class */ + function(_super) { + __extends(RevoluteJoint2, _super); + function RevoluteJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + var _a2, _b, _c, _d, _e, _f; + if (!(_this instanceof RevoluteJoint2)) { + return new RevoluteJoint2(def, bodyA, bodyB, anchor); + } + def = def !== null && def !== void 0 ? def : {}; + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_mass = new Mat33(); + _this.m_limitState = LimitState$2.inactiveLimit; + _this.m_type = RevoluteJoint2.TYPE; + if (Vec2.isValid(anchor)) { + _this.m_localAnchorA = bodyA.getLocalPoint(anchor); + } else if (Vec2.isValid(def.localAnchorA)) { + _this.m_localAnchorA = Vec2.clone(def.localAnchorA); + } else { + _this.m_localAnchorA = Vec2.zero(); + } + if (Vec2.isValid(anchor)) { + _this.m_localAnchorB = bodyB.getLocalPoint(anchor); + } else if (Vec2.isValid(def.localAnchorB)) { + _this.m_localAnchorB = Vec2.clone(def.localAnchorB); + } else { + _this.m_localAnchorB = Vec2.zero(); + } + if (Number.isFinite(def.referenceAngle)) { + _this.m_referenceAngle = def.referenceAngle; + } else { + _this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle(); + } + _this.m_impulse = new Vec3(); + _this.m_motorImpulse = 0; + _this.m_lowerAngle = (_a2 = def.lowerAngle) !== null && _a2 !== void 0 ? _a2 : DEFAULTS$8.lowerAngle; + _this.m_upperAngle = (_b = def.upperAngle) !== null && _b !== void 0 ? _b : DEFAULTS$8.upperAngle; + _this.m_maxMotorTorque = (_c = def.maxMotorTorque) !== null && _c !== void 0 ? _c : DEFAULTS$8.maxMotorTorque; + _this.m_motorSpeed = (_d = def.motorSpeed) !== null && _d !== void 0 ? _d : DEFAULTS$8.motorSpeed; + _this.m_enableLimit = (_e = def.enableLimit) !== null && _e !== void 0 ? _e : DEFAULTS$8.enableLimit; + _this.m_enableMotor = (_f = def.enableMotor) !== null && _f !== void 0 ? _f : DEFAULTS$8.enableMotor; + return _this; + } + RevoluteJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + lowerAngle: this.m_lowerAngle, + upperAngle: this.m_upperAngle, + maxMotorTorque: this.m_maxMotorTorque, + motorSpeed: this.m_motorSpeed, + enableLimit: this.m_enableLimit, + enableMotor: this.m_enableMotor, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + referenceAngle: this.m_referenceAngle + }; + }; + RevoluteJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new RevoluteJoint2(data); + return joint; + }; + RevoluteJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (Number.isFinite(def.referenceAngle)) { + this.m_referenceAngle = def.referenceAngle; + } + if (def.enableLimit !== void 0) { + this.m_enableLimit = def.enableLimit; + } + if (Number.isFinite(def.lowerAngle)) { + this.m_lowerAngle = def.lowerAngle; + } + if (Number.isFinite(def.upperAngle)) { + this.m_upperAngle = def.upperAngle; + } + if (Number.isFinite(def.maxMotorTorque)) { + this.m_maxMotorTorque = def.maxMotorTorque; + } + if (Number.isFinite(def.motorSpeed)) { + this.m_motorSpeed = def.motorSpeed; + } + if (def.enableMotor !== void 0) { + this.m_enableMotor = def.enableMotor; + } + }; + RevoluteJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + RevoluteJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + RevoluteJoint2.prototype.getReferenceAngle = function() { + return this.m_referenceAngle; + }; + RevoluteJoint2.prototype.getJointAngle = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle; + }; + RevoluteJoint2.prototype.getJointSpeed = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + return bB.m_angularVelocity - bA.m_angularVelocity; + }; + RevoluteJoint2.prototype.isMotorEnabled = function() { + return this.m_enableMotor; + }; + RevoluteJoint2.prototype.enableMotor = function(flag) { + if (flag == this.m_enableMotor) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableMotor = flag; }; - /** @internal */ - WeldJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new WeldJoint(data); - return joint; - }; - /** @hidden */ - WeldJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; - } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - WeldJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - WeldJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * Get the reference angle. - */ - WeldJoint.prototype.getReferenceAngle = function () { - return this.m_referenceAngle; - }; - /** - * Set frequency in Hz. - */ - WeldJoint.prototype.setFrequency = function (hz) { - this.m_frequencyHz = hz; - }; - /** - * Get frequency in Hz. - */ - WeldJoint.prototype.getFrequency = function () { - return this.m_frequencyHz; - }; - /** - * Set damping ratio. - */ - WeldJoint.prototype.setDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - /** - * Get damping ratio. - */ - WeldJoint.prototype.getDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - WeldJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - WeldJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - WeldJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - WeldJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_impulse.z; - }; - WeldJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - // J = [-I -r1_skew I r2_skew] - // [ 0 -1 0 1] - // r_skew = [-ry; rx] - // Matlab - // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB] - // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB] - // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB] - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var K = new Mat33(); - K.ex.x = mA + mB + this.m_rA.y * this.m_rA.y * iA + this.m_rB.y * this.m_rB.y - * iB; - K.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; - K.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; - K.ex.y = K.ey.x; - K.ey.y = mA + mB + this.m_rA.x * this.m_rA.x * iA + this.m_rB.x * this.m_rB.x - * iB; - K.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; - K.ex.z = K.ez.x; - K.ey.z = K.ez.y; - K.ez.z = iA + iB; - if (this.m_frequencyHz > 0.0) { - K.getInverse22(this.m_mass); - var invM = iA + iB; - var m = invM > 0.0 ? 1.0 / invM : 0.0; - var C = aB - aA - this.m_referenceAngle; - // Frequency - var omega = 2.0 * math_PI$1 * this.m_frequencyHz; - // Damping coefficient - var d = 2.0 * m * this.m_dampingRatio * omega; - // Spring stiffness - var k = m * omega * omega; - // magic formulas - var h = step.dt; - this.m_gamma = h * (d + h * k); - this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0; - this.m_bias = C * h * k * this.m_gamma; - invM += this.m_gamma; - this.m_mass.ez.z = invM != 0.0 ? 1.0 / invM : 0.0; - } - else if (K.ez.z == 0.0) { - K.getInverse22(this.m_mass); - this.m_gamma = 0.0; - this.m_bias = 0.0; - } - else { - K.getSymInverse33(this.m_mass); - this.m_gamma = 0.0; - this.m_bias = 0.0; - } - if (step.warmStarting) { - // Scale impulses to support a variable time step. - this.m_impulse.mul(step.dtRatio); - var P = Vec2.neo(this.m_impulse.x, this.m_impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_impulse.z); - } - else { - this.m_impulse.setZero(); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - WeldJoint.prototype.solveVelocityConstraints = function (step) { - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - if (this.m_frequencyHz > 0.0) { - var Cdot2 = wB - wA; - var impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z); - this.m_impulse.z += impulse2; - wA -= iA * impulse2; - wB += iB * impulse2; - var Cdot1 = Vec2.zero(); - Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1)); - this.m_impulse.x += impulse1.x; - this.m_impulse.y += impulse1.y; - var P = Vec2.clone(impulse1); - vA.subMul(mA, P); - wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P); - vB.addMul(mB, P); - wB += iB * Vec2.crossVec2Vec2(this.m_rB, P); - } - else { - var Cdot1 = Vec2.zero(); - Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB)); - Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA)); - var Cdot2 = wB - wA; - var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); - var impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot)); + RevoluteJoint2.prototype.getMotorTorque = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + RevoluteJoint2.prototype.setMotorSpeed = function(speed) { + if (speed == this.m_motorSpeed) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_motorSpeed = speed; + }; + RevoluteJoint2.prototype.getMotorSpeed = function() { + return this.m_motorSpeed; + }; + RevoluteJoint2.prototype.setMaxMotorTorque = function(torque) { + if (torque == this.m_maxMotorTorque) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_maxMotorTorque = torque; + }; + RevoluteJoint2.prototype.getMaxMotorTorque = function() { + return this.m_maxMotorTorque; + }; + RevoluteJoint2.prototype.isLimitEnabled = function() { + return this.m_enableLimit; + }; + RevoluteJoint2.prototype.enableLimit = function(flag) { + if (flag != this.m_enableLimit) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableLimit = flag; + this.m_impulse.z = 0; + } + }; + RevoluteJoint2.prototype.getLowerLimit = function() { + return this.m_lowerAngle; + }; + RevoluteJoint2.prototype.getUpperLimit = function() { + return this.m_upperAngle; + }; + RevoluteJoint2.prototype.setLimits = function(lower, upper) { + if (lower != this.m_lowerAngle || upper != this.m_upperAngle) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_impulse.z = 0; + this.m_lowerAngle = lower; + this.m_upperAngle = upper; + } + }; + RevoluteJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + RevoluteJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + RevoluteJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); + }; + RevoluteJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_impulse.z; + }; + RevoluteJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var fixedRotation = iA + iB === 0; + 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; + this.m_mass.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; + this.m_mass.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; + this.m_mass.ex.y = this.m_mass.ey.x; + 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; + this.m_mass.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; + this.m_mass.ex.z = this.m_mass.ez.x; + this.m_mass.ey.z = this.m_mass.ez.y; + this.m_mass.ez.z = iA + iB; + this.m_motorMass = iA + iB; + if (this.m_motorMass > 0) { + this.m_motorMass = 1 / this.m_motorMass; + } + if (this.m_enableMotor == false || fixedRotation) { + this.m_motorImpulse = 0; + } + if (this.m_enableLimit && fixedRotation == false) { + var jointAngle = aB - aA - this.m_referenceAngle; + if (math_abs$4(this.m_upperAngle - this.m_lowerAngle) < 2 * SettingsInternal.angularSlop) { + this.m_limitState = LimitState$2.equalLimits; + } else if (jointAngle <= this.m_lowerAngle) { + if (this.m_limitState != LimitState$2.atLowerLimit) { + this.m_impulse.z = 0; + } + this.m_limitState = LimitState$2.atLowerLimit; + } else if (jointAngle >= this.m_upperAngle) { + if (this.m_limitState != LimitState$2.atUpperLimit) { + this.m_impulse.z = 0; + } + this.m_limitState = LimitState$2.atUpperLimit; + } else { + this.m_limitState = LimitState$2.inactiveLimit; + this.m_impulse.z = 0; + } + } else { + this.m_limitState = LimitState$2.inactiveLimit; + } + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + this.m_motorImpulse *= step.dtRatio; + var P3 = Vec2.neo(this.m_impulse.x, this.m_impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_motorImpulse + this.m_impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_motorImpulse + this.m_impulse.z); + } else { + this.m_impulse.setZero(); + this.m_motorImpulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + RevoluteJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var fixedRotation = iA + iB === 0; + if (this.m_enableMotor && this.m_limitState != LimitState$2.equalLimits && fixedRotation == false) { + var Cdot = wB - wA - this.m_motorSpeed; + var impulse = -this.m_motorMass * Cdot; + var oldImpulse = this.m_motorImpulse; + var maxImpulse = step.dt * this.m_maxMotorTorque; + this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { + var Cdot1 = Vec2.zero(); + Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var Cdot2 = wB - wA; + var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); + var impulse = Vec3.neg(this.m_mass.solve33(Cdot)); + if (this.m_limitState == LimitState$2.equalLimits) { + this.m_impulse.add(impulse); + } else if (this.m_limitState == LimitState$2.atLowerLimit) { + var newImpulse = this.m_impulse.z + impulse.z; + if (newImpulse < 0) { + var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); + var reduced = this.m_mass.solve22(rhs); + impulse.x = reduced.x; + impulse.y = reduced.y; + impulse.z = -this.m_impulse.z; + this.m_impulse.x += reduced.x; + this.m_impulse.y += reduced.y; + this.m_impulse.z = 0; + } else { + this.m_impulse.add(impulse); + } + } else if (this.m_limitState == LimitState$2.atUpperLimit) { + var newImpulse = this.m_impulse.z + impulse.z; + if (newImpulse > 0) { + var rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y)); + var reduced = this.m_mass.solve22(rhs); + impulse.x = reduced.x; + impulse.y = reduced.y; + impulse.z = -this.m_impulse.z; + this.m_impulse.x += reduced.x; + this.m_impulse.y += reduced.y; + this.m_impulse.z = 0; + } else { this.m_impulse.add(impulse); - var P = Vec2.neo(impulse.x, impulse.y); - vA.subMul(mA, P); - wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z); - vB.addMul(mB, P); - wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z); - } - this.m_bodyA.c_velocity.v = vA; - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v = vB; - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - WeldJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); + } + } + var P3 = Vec2.neo(impulse.x, impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + impulse.z); + } else { + var Cdot = Vec2.zero(); + Cdot.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var impulse = this.m_mass.solve22(Vec2.neg(Cdot)); + this.m_impulse.x += impulse.x; + this.m_impulse.y += impulse.y; + vA2.subMul(mA, impulse); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); + vB2.addMul(mB, impulse); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + RevoluteJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var angularError = 0; + var positionError = 0; + var fixedRotation = this.m_invIA + this.m_invIB == 0; + if (this.m_enableLimit && this.m_limitState != LimitState$2.inactiveLimit && fixedRotation == false) { + var angle = aB - aA - this.m_referenceAngle; + var limitImpulse = 0; + if (this.m_limitState == LimitState$2.equalLimits) { + var C = clamp(angle - this.m_lowerAngle, -SettingsInternal.maxAngularCorrection, SettingsInternal.maxAngularCorrection); + limitImpulse = -this.m_motorMass * C; + angularError = math_abs$4(C); + } else if (this.m_limitState == LimitState$2.atLowerLimit) { + var C = angle - this.m_lowerAngle; + angularError = -C; + C = clamp(C + SettingsInternal.angularSlop, -SettingsInternal.maxAngularCorrection, 0); + limitImpulse = -this.m_motorMass * C; + } else if (this.m_limitState == LimitState$2.atUpperLimit) { + var C = angle - this.m_upperAngle; + angularError = C; + C = clamp(C - SettingsInternal.angularSlop, 0, SettingsInternal.maxAngularCorrection); + limitImpulse = -this.m_motorMass * C; + } + aA -= this.m_invIA * limitImpulse; + aB += this.m_invIB * limitImpulse; + } + { + qA.setAngle(aA); + qB.setAngle(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var C = Vec2.zero(); + C.addCombine(1, cB2, 1, rB2); + C.subCombine(1, cA2, 1, rA2); + positionError = C.length(); var mA = this.m_invMassA; var mB = this.m_invMassB; var iA = this.m_invIA; var iB = this.m_invIB; - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var positionError; - var angularError; - var K = new Mat33(); - K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB; - K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB; - K.ez.x = -rA.y * iA - rB.y * iB; - K.ex.y = K.ey.x; - K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB; - K.ez.y = rA.x * iA + rB.x * iB; - K.ex.z = K.ez.x; - K.ey.z = K.ez.y; - K.ez.z = iA + iB; - if (this.m_frequencyHz > 0.0) { - var C1 = Vec2.zero(); - C1.addCombine(1, cB, 1, rB); - C1.subCombine(1, cA, 1, rA); - positionError = C1.length(); - angularError = 0.0; - var P = Vec2.neg(K.solve22(C1)); - cA.subMul(mA, P); - aA -= iA * Vec2.crossVec2Vec2(rA, P); - cB.addMul(mB, P); - aB += iB * Vec2.crossVec2Vec2(rB, P); - } - else { - var C1 = Vec2.zero(); - C1.addCombine(1, cB, 1, rB); - C1.subCombine(1, cA, 1, rA); - var C2 = aB - aA - this.m_referenceAngle; - positionError = C1.length(); - angularError = math_abs$1(C2); - var C = new Vec3(C1.x, C1.y, C2); - var impulse = new Vec3(); - if (K.ez.z > 0.0) { - impulse = Vec3.neg(K.solve33(C)); - } - else { - var impulse2 = Vec2.neg(K.solve22(C1)); - impulse.set(impulse2.x, impulse2.y, 0.0); - } - var P = Vec2.neo(impulse.x, impulse.y); - cA.subMul(mA, P); - aA -= iA * (Vec2.crossVec2Vec2(rA, P) + impulse.z); - cB.addMul(mB, P); - aB += iB * (Vec2.crossVec2Vec2(rB, P) + impulse.z); - } - this.m_bodyA.c_position.c = cA; - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c = cB; - this.m_bodyB.c_position.a = aB; - return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; - }; - WeldJoint.TYPE = "weld-joint"; - return WeldJoint; -}(Joint)); - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_abs = Math.abs; -/** @internal */ var math_PI = Math.PI; -/** @internal */ var DEFAULTS = { - enableMotor: false, - maxMotorTorque: 0.0, - motorSpeed: 0.0, - frequencyHz: 2.0, - dampingRatio: 0.7, + var K = new Mat22(); + K.ex.x = mA + mB + iA * rA2.y * rA2.y + iB * rB2.y * rB2.y; + K.ex.y = -iA * rA2.x * rA2.y - iB * rB2.x * rB2.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * rA2.x * rA2.x + iB * rB2.x * rB2.x; + var impulse = Vec2.neg(K.solve(C)); + cA2.subMul(mA, impulse); + aA -= iA * Vec2.crossVec2Vec2(rA2, impulse); + cB2.addMul(mB, impulse); + aB += iB * Vec2.crossVec2Vec2(rB2, impulse); + } + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; + }; + RevoluteJoint2.TYPE = "revolute-joint"; + return RevoluteJoint2; + }(Joint) +); +var math_abs$3 = Math.abs; +var math_max = Math.max; +var math_min$2 = Math.min; +var LimitState$1; +(function(LimitState2) { + LimitState2[LimitState2["inactiveLimit"] = 0] = "inactiveLimit"; + LimitState2[LimitState2["atLowerLimit"] = 1] = "atLowerLimit"; + LimitState2[LimitState2["atUpperLimit"] = 2] = "atUpperLimit"; + LimitState2[LimitState2["equalLimits"] = 3] = "equalLimits"; +})(LimitState$1 || (LimitState$1 = {})); +var DEFAULTS$7 = { + enableLimit: false, + lowerTranslation: 0, + upperTranslation: 0, + enableMotor: false, + maxMotorForce: 0, + motorSpeed: 0 }; -/** - * A wheel joint. This joint provides two degrees of freedom: translation along - * an axis fixed in bodyA and rotation in the plane. In other words, it is a - * point to line constraint with a rotational motor and a linear spring/damper. - * This joint is designed for vehicle suspensions. - */ -var WheelJoint = /** @class */ (function (_super) { - __extends(WheelJoint, _super); - function WheelJoint(def, bodyA, bodyB, anchor, axis) { - var _this = this; - // @ts-ignore - if (!(_this instanceof WheelJoint)) { - return new WheelJoint(def, bodyA, bodyB, anchor, axis); - } - def = options(def, DEFAULTS); - _this = _super.call(this, def, bodyA, bodyB) || this; - bodyA = _this.m_bodyA; - bodyB = _this.m_bodyB; - _this.m_ax = Vec2.zero(); - _this.m_ay = Vec2.zero(); - _this.m_type = WheelJoint.TYPE; - _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); - _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); - if (Vec2.isValid(axis)) { - _this.m_localXAxisA = bodyA.getLocalVector(axis); - } - else if (Vec2.isValid(def.localAxisA)) { - _this.m_localXAxisA = Vec2.clone(def.localAxisA); - } - else if (Vec2.isValid(def.localAxis)) { - // localAxis is renamed to localAxisA, this is for backward compatibility - _this.m_localXAxisA = Vec2.clone(def.localAxis); - } - else { - _this.m_localXAxisA = Vec2.neo(1.0, 0.0); - } - _this.m_localYAxisA = Vec2.crossNumVec2(1.0, _this.m_localXAxisA); - _this.m_mass = 0.0; - _this.m_impulse = 0.0; - _this.m_motorMass = 0.0; - _this.m_motorImpulse = 0.0; - _this.m_springMass = 0.0; - _this.m_springImpulse = 0.0; - _this.m_maxMotorTorque = def.maxMotorTorque; - _this.m_motorSpeed = def.motorSpeed; - _this.m_enableMotor = def.enableMotor; - _this.m_frequencyHz = def.frequencyHz; - _this.m_dampingRatio = def.dampingRatio; - _this.m_bias = 0.0; - _this.m_gamma = 0.0; - return _this; - // Linear constraint (point-to-line) - // d = pB - pA = xB + rB - xA - rA - // C = dot(ay, d) - // Cdot = dot(d, cross(wA, ay)) + dot(ay, vB + cross(wB, rB) - vA - cross(wA, - // rA)) - // = -dot(ay, vA) - dot(cross(d + rA, ay), wA) + dot(ay, vB) + dot(cross(rB, - // ay), vB) - // J = [-ay, -cross(d + rA, ay), ay, cross(rB, ay)] - // Spring linear constraint - // C = dot(ax, d) - // Cdot = = -dot(ax, vA) - dot(cross(d + rA, ax), wA) + dot(ax, vB) + - // dot(cross(rB, ax), vB) - // J = [-ax -cross(d+rA, ax) ax cross(rB, ax)] - // Motor rotational constraint - // Cdot = wB - wA - // J = [0 0 -1 0 0 1] - } - /** @internal */ - WheelJoint.prototype._serialize = function () { - return { - type: this.m_type, - bodyA: this.m_bodyA, - bodyB: this.m_bodyB, - collideConnected: this.m_collideConnected, - enableMotor: this.m_enableMotor, - maxMotorTorque: this.m_maxMotorTorque, - motorSpeed: this.m_motorSpeed, - frequencyHz: this.m_frequencyHz, - dampingRatio: this.m_dampingRatio, - localAnchorA: this.m_localAnchorA, - localAnchorB: this.m_localAnchorB, - localAxisA: this.m_localXAxisA, - }; +var PrismaticJoint = ( + /** @class */ + function(_super) { + __extends(PrismaticJoint2, _super); + function PrismaticJoint2(def, bodyA, bodyB, anchor, axis) { + var _this = this; + if (!(_this instanceof PrismaticJoint2)) { + return new PrismaticJoint2(def, bodyA, bodyB, anchor, axis); + } + def = options(def, DEFAULTS$7); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = PrismaticJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + _this.m_localXAxisA = Vec2.clone(axis ? bodyA.getLocalVector(axis) : def.localAxisA || Vec2.neo(1, 0)); + _this.m_localXAxisA.normalize(); + _this.m_localYAxisA = Vec2.crossNumVec2(1, _this.m_localXAxisA); + _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); + _this.m_impulse = new Vec3(); + _this.m_motorMass = 0; + _this.m_motorImpulse = 0; + _this.m_lowerTranslation = def.lowerTranslation; + _this.m_upperTranslation = def.upperTranslation; + _this.m_maxMotorForce = def.maxMotorForce; + _this.m_motorSpeed = def.motorSpeed; + _this.m_enableLimit = def.enableLimit; + _this.m_enableMotor = def.enableMotor; + _this.m_limitState = LimitState$1.inactiveLimit; + _this.m_axis = Vec2.zero(); + _this.m_perp = Vec2.zero(); + _this.m_K = new Mat33(); + return _this; + } + PrismaticJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + lowerTranslation: this.m_lowerTranslation, + upperTranslation: this.m_upperTranslation, + maxMotorForce: this.m_maxMotorForce, + motorSpeed: this.m_motorSpeed, + enableLimit: this.m_enableLimit, + enableMotor: this.m_enableMotor, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + localAxisA: this.m_localXAxisA, + referenceAngle: this.m_referenceAngle + }; + }; + PrismaticJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + data.localAxisA = Vec2.clone(data.localAxisA); + var joint = new PrismaticJoint2(data); + return joint; + }; + PrismaticJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (def.localAxisA) { + this.m_localXAxisA.setVec2(def.localAxisA); + this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1, def.localAxisA)); + } + if (Number.isFinite(def.referenceAngle)) { + this.m_referenceAngle = def.referenceAngle; + } + if (typeof def.enableLimit !== "undefined") { + this.m_enableLimit = !!def.enableLimit; + } + if (Number.isFinite(def.lowerTranslation)) { + this.m_lowerTranslation = def.lowerTranslation; + } + if (Number.isFinite(def.upperTranslation)) { + this.m_upperTranslation = def.upperTranslation; + } + if (typeof def.enableMotor !== "undefined") { + this.m_enableMotor = !!def.enableMotor; + } + if (Number.isFinite(def.maxMotorForce)) { + this.m_maxMotorForce = def.maxMotorForce; + } + if (Number.isFinite(def.motorSpeed)) { + this.m_motorSpeed = def.motorSpeed; + } + }; + PrismaticJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + PrismaticJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + PrismaticJoint2.prototype.getLocalAxisA = function() { + return this.m_localXAxisA; + }; + PrismaticJoint2.prototype.getReferenceAngle = function() { + return this.m_referenceAngle; + }; + PrismaticJoint2.prototype.getJointTranslation = function() { + var pA2 = this.m_bodyA.getWorldPoint(this.m_localAnchorA); + var pB2 = this.m_bodyB.getWorldPoint(this.m_localAnchorB); + var d2 = Vec2.sub(pB2, pA2); + var axis = this.m_bodyA.getWorldVector(this.m_localXAxisA); + var translation2 = Vec2.dot(d2, axis); + return translation2; + }; + PrismaticJoint2.prototype.getJointSpeed = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + var rA2 = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter)); + var rB2 = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter)); + var p1 = Vec2.add(bA.m_sweep.c, rA2); + var p2 = Vec2.add(bB.m_sweep.c, rB2); + var d2 = Vec2.sub(p2, p1); + var axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA); + var vA2 = bA.m_linearVelocity; + var vB2 = bB.m_linearVelocity; + var wA = bA.m_angularVelocity; + var wB = bB.m_angularVelocity; + var speed = Vec2.dot(d2, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB2, wB, rB2), Vec2.addCrossNumVec2(vA2, wA, rA2))); + return speed; + }; + PrismaticJoint2.prototype.isLimitEnabled = function() { + return this.m_enableLimit; + }; + PrismaticJoint2.prototype.enableLimit = function(flag) { + if (flag != this.m_enableLimit) { + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableLimit = flag; + this.m_impulse.z = 0; + } }; - /** @internal */ - WheelJoint._deserialize = function (data, world, restore) { - data = __assign({}, data); - data.bodyA = restore(Body, data.bodyA, world); - data.bodyB = restore(Body, data.bodyB, world); - var joint = new WheelJoint(data); - return joint; - }; - /** @hidden */ - WheelJoint.prototype._reset = function (def) { - if (def.anchorA) { - this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); - } - else if (def.localAnchorA) { - this.m_localAnchorA.setVec2(def.localAnchorA); - } - if (def.anchorB) { - this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); - } - else if (def.localAnchorB) { - this.m_localAnchorB.setVec2(def.localAnchorB); - } - if (def.localAxisA) { - this.m_localXAxisA.setVec2(def.localAxisA); - this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1.0, def.localAxisA)); - } - if (def.enableMotor !== undefined) { - this.m_enableMotor = def.enableMotor; - } - if (Number.isFinite(def.maxMotorTorque)) { - this.m_maxMotorTorque = def.maxMotorTorque; - } - if (Number.isFinite(def.motorSpeed)) { - this.m_motorSpeed = def.motorSpeed; - } - if (Number.isFinite(def.frequencyHz)) { - this.m_frequencyHz = def.frequencyHz; - } - if (Number.isFinite(def.dampingRatio)) { - this.m_dampingRatio = def.dampingRatio; - } - }; - /** - * The local anchor point relative to bodyA's origin. - */ - WheelJoint.prototype.getLocalAnchorA = function () { - return this.m_localAnchorA; - }; - /** - * The local anchor point relative to bodyB's origin. - */ - WheelJoint.prototype.getLocalAnchorB = function () { - return this.m_localAnchorB; - }; - /** - * The local joint axis relative to bodyA. - */ - WheelJoint.prototype.getLocalAxisA = function () { - return this.m_localXAxisA; - }; - /** - * Get the current joint translation, usually in meters. - */ - WheelJoint.prototype.getJointTranslation = function () { - var bA = this.m_bodyA; - var bB = this.m_bodyB; - var pA = bA.getWorldPoint(this.m_localAnchorA); - var pB = bB.getWorldPoint(this.m_localAnchorB); - var d = Vec2.sub(pB, pA); - var axis = bA.getWorldVector(this.m_localXAxisA); - var translation = Vec2.dot(d, axis); - return translation; - }; - /** - * Get the current joint translation speed, usually in meters per second. - */ - WheelJoint.prototype.getJointSpeed = function () { - var wA = this.m_bodyA.m_angularVelocity; - var wB = this.m_bodyB.m_angularVelocity; - return wB - wA; - }; - /** - * Is the joint motor enabled? - */ - WheelJoint.prototype.isMotorEnabled = function () { - return this.m_enableMotor; - }; - /** - * Enable/disable the joint motor. - */ - WheelJoint.prototype.enableMotor = function (flag) { - if (flag == this.m_enableMotor) - return; + PrismaticJoint2.prototype.getLowerLimit = function() { + return this.m_lowerTranslation; + }; + PrismaticJoint2.prototype.getUpperLimit = function() { + return this.m_upperTranslation; + }; + PrismaticJoint2.prototype.setLimits = function(lower, upper) { + if (lower != this.m_lowerTranslation || upper != this.m_upperTranslation) { this.m_bodyA.setAwake(true); this.m_bodyB.setAwake(true); - this.m_enableMotor = flag; + this.m_lowerTranslation = lower; + this.m_upperTranslation = upper; + this.m_impulse.z = 0; + } }; - /** - * Set the motor speed, usually in radians per second. - */ - WheelJoint.prototype.setMotorSpeed = function (speed) { - if (speed == this.m_motorSpeed) - return; + PrismaticJoint2.prototype.isMotorEnabled = function() { + return this.m_enableMotor; + }; + PrismaticJoint2.prototype.enableMotor = function(flag) { + if (flag == this.m_enableMotor) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableMotor = flag; + }; + PrismaticJoint2.prototype.setMotorSpeed = function(speed) { + if (speed == this.m_motorSpeed) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_motorSpeed = speed; + }; + PrismaticJoint2.prototype.setMaxMotorForce = function(force) { + if (force == this.m_maxMotorForce) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_maxMotorForce = force; + }; + PrismaticJoint2.prototype.getMaxMotorForce = function() { + return this.m_maxMotorForce; + }; + PrismaticJoint2.prototype.getMotorSpeed = function() { + return this.m_motorSpeed; + }; + PrismaticJoint2.prototype.getMotorForce = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + PrismaticJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + PrismaticJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + PrismaticJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis).mul(inv_dt); + }; + PrismaticJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_impulse.y; + }; + PrismaticJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.zero(); + d2.addCombine(1, cB2, 1, rB2); + d2.subCombine(1, cA2, 1, rA2); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + { + this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA); + this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_axis); + this.m_a2 = Vec2.crossVec2Vec2(rB2, this.m_axis); + this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2; + if (this.m_motorMass > 0) { + this.m_motorMass = 1 / this.m_motorMass; + } + } + { + this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA); + this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_perp); + this.m_s2 = Vec2.crossVec2Vec2(rB2, this.m_perp); + Vec2.crossVec2Vec2(rA2, this.m_perp); + var k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2; + var k12 = iA * this.m_s1 + iB * this.m_s2; + var k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2; + var k22 = iA + iB; + if (k22 == 0) { + k22 = 1; + } + var k23 = iA * this.m_a1 + iB * this.m_a2; + var k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2; + this.m_K.ex.set(k11, k12, k13); + this.m_K.ey.set(k12, k22, k23); + this.m_K.ez.set(k13, k23, k33); + } + if (this.m_enableLimit) { + var jointTranslation = Vec2.dot(this.m_axis, d2); + if (math_abs$3(this.m_upperTranslation - this.m_lowerTranslation) < 2 * SettingsInternal.linearSlop) { + this.m_limitState = LimitState$1.equalLimits; + } else if (jointTranslation <= this.m_lowerTranslation) { + if (this.m_limitState != LimitState$1.atLowerLimit) { + this.m_limitState = LimitState$1.atLowerLimit; + this.m_impulse.z = 0; + } + } else if (jointTranslation >= this.m_upperTranslation) { + if (this.m_limitState != LimitState$1.atUpperLimit) { + this.m_limitState = LimitState$1.atUpperLimit; + this.m_impulse.z = 0; + } + } else { + this.m_limitState = LimitState$1.inactiveLimit; + this.m_impulse.z = 0; + } + } else { + this.m_limitState = LimitState$1.inactiveLimit; + this.m_impulse.z = 0; + } + if (this.m_enableMotor == false) { + this.m_motorImpulse = 0; + } + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + this.m_motorImpulse *= step.dtRatio; + var P3 = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse + this.m_impulse.z, this.m_axis); + var LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1; + var LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } else { + this.m_impulse.setZero(); + this.m_motorImpulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + PrismaticJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + if (this.m_enableMotor && this.m_limitState != LimitState$1.equalLimits) { + var Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB2, vA2)) + this.m_a2 * wB - this.m_a1 * wA; + var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot); + var oldImpulse = this.m_motorImpulse; + var maxImpulse = step.dt * this.m_maxMotorForce; + this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_axis); + var LA = impulse * this.m_a1; + var LB = impulse * this.m_a2; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + var Cdot1 = Vec2.zero(); + Cdot1.x += Vec2.dot(this.m_perp, vB2) + this.m_s2 * wB; + Cdot1.x -= Vec2.dot(this.m_perp, vA2) + this.m_s1 * wA; + Cdot1.y = wB - wA; + if (this.m_enableLimit && this.m_limitState != LimitState$1.inactiveLimit) { + var Cdot2 = 0; + Cdot2 += Vec2.dot(this.m_axis, vB2) + this.m_a2 * wB; + Cdot2 -= Vec2.dot(this.m_axis, vA2) + this.m_a1 * wA; + var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); + var f1 = Vec3.clone(this.m_impulse); + var df = this.m_K.solve33(Vec3.neg(Cdot)); + this.m_impulse.add(df); + if (this.m_limitState == LimitState$1.atLowerLimit) { + this.m_impulse.z = math_max(this.m_impulse.z, 0); + } else if (this.m_limitState == LimitState$1.atUpperLimit) { + this.m_impulse.z = math_min$2(this.m_impulse.z, 0); + } + var b2 = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y)); + var f2r = Vec2.add(this.m_K.solve22(b2), Vec2.neo(f1.x, f1.y)); + this.m_impulse.x = f2r.x; + this.m_impulse.y = f2r.y; + df = Vec3.sub(this.m_impulse, f1); + var P3 = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis); + var LA = df.x * this.m_s1 + df.y + df.z * this.m_a1; + var LB = df.x * this.m_s2 + df.y + df.z * this.m_a2; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } else { + var df = this.m_K.solve22(Vec2.neg(Cdot1)); + this.m_impulse.x += df.x; + this.m_impulse.y += df.y; + var P3 = Vec2.mulNumVec2(df.x, this.m_perp); + var LA = df.x * this.m_s1 + df.y; + var LB = df.x * this.m_s2 + df.y; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + PrismaticJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.sub(Vec2.add(cB2, rB2), Vec2.add(cA2, rA2)); + var axis = Rot.mulVec2(qA, this.m_localXAxisA); + var a1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), axis); + var a2 = Vec2.crossVec2Vec2(rB2, axis); + var perp2 = Rot.mulVec2(qA, this.m_localYAxisA); + var s1 = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), perp2); + var s2 = Vec2.crossVec2Vec2(rB2, perp2); + var impulse = new Vec3(); + var C1 = Vec2.zero(); + C1.x = Vec2.dot(perp2, d2); + C1.y = aB - aA - this.m_referenceAngle; + var linearError = math_abs$3(C1.x); + var angularError = math_abs$3(C1.y); + var linearSlop = SettingsInternal.linearSlop; + var maxLinearCorrection = SettingsInternal.maxLinearCorrection; + var active = false; + var C2 = 0; + if (this.m_enableLimit) { + var translation2 = Vec2.dot(axis, d2); + if (math_abs$3(this.m_upperTranslation - this.m_lowerTranslation) < 2 * linearSlop) { + C2 = clamp(translation2, -maxLinearCorrection, maxLinearCorrection); + linearError = math_max(linearError, math_abs$3(translation2)); + active = true; + } else if (translation2 <= this.m_lowerTranslation) { + C2 = clamp(translation2 - this.m_lowerTranslation + linearSlop, -maxLinearCorrection, 0); + linearError = Math.max(linearError, this.m_lowerTranslation - translation2); + active = true; + } else if (translation2 >= this.m_upperTranslation) { + C2 = clamp(translation2 - this.m_upperTranslation - linearSlop, 0, maxLinearCorrection); + linearError = Math.max(linearError, translation2 - this.m_upperTranslation); + active = true; + } + } + if (active) { + var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; + var k12 = iA * s1 + iB * s2; + var k13 = iA * s1 * a1 + iB * s2 * a2; + var k22 = iA + iB; + if (k22 == 0) { + k22 = 1; + } + var k23 = iA * a1 + iB * a2; + var k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2; + var K = new Mat33(); + K.ex.set(k11, k12, k13); + K.ey.set(k12, k22, k23); + K.ez.set(k13, k23, k33); + var C = new Vec3(); + C.x = C1.x; + C.y = C1.y; + C.z = C2; + impulse = K.solve33(Vec3.neg(C)); + } else { + var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; + var k12 = iA * s1 + iB * s2; + var k22 = iA + iB; + if (k22 == 0) { + k22 = 1; + } + var K = new Mat22(); + K.ex.setNum(k11, k12); + K.ey.setNum(k12, k22); + var impulse1 = K.solve(Vec2.neg(C1)); + impulse.x = impulse1.x; + impulse.y = impulse1.y; + impulse.z = 0; + } + var P3 = Vec2.combine(impulse.x, perp2, impulse.z, axis); + var LA = impulse.x * s1 + impulse.y + impulse.z * a1; + var LB = impulse.x * s2 + impulse.y + impulse.z * a2; + cA2.subMul(mA, P3); + aA -= iA * LA; + cB2.addMul(mB, P3); + aB += iB * LB; + this.m_bodyA.c_position.c = cA2; + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c = cB2; + this.m_bodyB.c_position.a = aB; + return linearError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; + }; + PrismaticJoint2.TYPE = "prismatic-joint"; + return PrismaticJoint2; + }(Joint) +); +var DEFAULTS$6 = { + ratio: 1 +}; +var GearJoint = ( + /** @class */ + function(_super) { + __extends(GearJoint2, _super); + function GearJoint2(def, bodyA, bodyB, joint1, joint2, ratio) { + var _this = this; + if (!(_this instanceof GearJoint2)) { + return new GearJoint2(def, bodyA, bodyB, joint1, joint2, ratio); + } + def = options(def, DEFAULTS$6); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = GearJoint2.TYPE; + _this.m_joint1 = joint1 ? joint1 : def.joint1; + _this.m_joint2 = joint2 ? joint2 : def.joint2; + _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; + _this.m_type1 = _this.m_joint1.getType(); + _this.m_type2 = _this.m_joint2.getType(); + var coordinateA; + var coordinateB; + _this.m_bodyC = _this.m_joint1.getBodyA(); + _this.m_bodyA = _this.m_joint1.getBodyB(); + var xfA2 = _this.m_bodyA.m_xf; + var aA = _this.m_bodyA.m_sweep.a; + var xfC = _this.m_bodyC.m_xf; + var aC = _this.m_bodyC.m_sweep.a; + if (_this.m_type1 === RevoluteJoint.TYPE) { + var revolute = _this.m_joint1; + _this.m_localAnchorC = revolute.m_localAnchorA; + _this.m_localAnchorA = revolute.m_localAnchorB; + _this.m_referenceAngleA = revolute.m_referenceAngle; + _this.m_localAxisC = Vec2.zero(); + coordinateA = aA - aC - _this.m_referenceAngleA; + } else { + var prismatic = _this.m_joint1; + _this.m_localAnchorC = prismatic.m_localAnchorA; + _this.m_localAnchorA = prismatic.m_localAnchorB; + _this.m_referenceAngleA = prismatic.m_referenceAngle; + _this.m_localAxisC = prismatic.m_localXAxisA; + var pC = _this.m_localAnchorC; + var pA2 = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA2.q, _this.m_localAnchorA), Vec2.sub(xfA2.p, xfC.p))); + coordinateA = Vec2.dot(pA2, _this.m_localAxisC) - Vec2.dot(pC, _this.m_localAxisC); + } + _this.m_bodyD = _this.m_joint2.getBodyA(); + _this.m_bodyB = _this.m_joint2.getBodyB(); + var xfB2 = _this.m_bodyB.m_xf; + var aB = _this.m_bodyB.m_sweep.a; + var xfD = _this.m_bodyD.m_xf; + var aD = _this.m_bodyD.m_sweep.a; + if (_this.m_type2 === RevoluteJoint.TYPE) { + var revolute = _this.m_joint2; + _this.m_localAnchorD = revolute.m_localAnchorA; + _this.m_localAnchorB = revolute.m_localAnchorB; + _this.m_referenceAngleB = revolute.m_referenceAngle; + _this.m_localAxisD = Vec2.zero(); + coordinateB = aB - aD - _this.m_referenceAngleB; + } else { + var prismatic = _this.m_joint2; + _this.m_localAnchorD = prismatic.m_localAnchorA; + _this.m_localAnchorB = prismatic.m_localAnchorB; + _this.m_referenceAngleB = prismatic.m_referenceAngle; + _this.m_localAxisD = prismatic.m_localXAxisA; + var pD = _this.m_localAnchorD; + var pB2 = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB2.q, _this.m_localAnchorB), Vec2.sub(xfB2.p, xfD.p))); + coordinateB = Vec2.dot(pB2, _this.m_localAxisD) - Vec2.dot(pD, _this.m_localAxisD); + } + _this.m_constant = coordinateA + _this.m_ratio * coordinateB; + _this.m_impulse = 0; + return _this; + } + GearJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + joint1: this.m_joint1, + joint2: this.m_joint2, + ratio: this.m_ratio + // _constant: this.m_constant, + }; + }; + GearJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + data.joint1 = restore(Joint, data.joint1, world); + data.joint2 = restore(Joint, data.joint2, world); + var joint = new GearJoint2(data); + return joint; + }; + GearJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.ratio)) { + this.m_ratio = def.ratio; + } + }; + GearJoint2.prototype.getJoint1 = function() { + return this.m_joint1; + }; + GearJoint2.prototype.getJoint2 = function() { + return this.m_joint2; + }; + GearJoint2.prototype.setRatio = function(ratio) { + this.m_ratio = ratio; + }; + GearJoint2.prototype.getRatio = function() { + return this.m_ratio; + }; + GearJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + GearJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + GearJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt); + }; + GearJoint2.prototype.getReactionTorque = function(inv_dt) { + var L = this.m_impulse * this.m_JwA; + return inv_dt * L; + }; + GearJoint2.prototype.initVelocityConstraints = function(step) { + this.m_lcA = this.m_bodyA.m_sweep.localCenter; + this.m_lcB = this.m_bodyB.m_sweep.localCenter; + this.m_lcC = this.m_bodyC.m_sweep.localCenter; + this.m_lcD = this.m_bodyD.m_sweep.localCenter; + this.m_mA = this.m_bodyA.m_invMass; + this.m_mB = this.m_bodyB.m_invMass; + this.m_mC = this.m_bodyC.m_invMass; + this.m_mD = this.m_bodyD.m_invMass; + this.m_iA = this.m_bodyA.m_invI; + this.m_iB = this.m_bodyB.m_invI; + this.m_iC = this.m_bodyC.m_invI; + this.m_iD = this.m_bodyD.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var aC = this.m_bodyC.c_position.a; + var vC = this.m_bodyC.c_velocity.v; + var wC = this.m_bodyC.c_velocity.w; + var aD = this.m_bodyD.c_position.a; + var vD = this.m_bodyD.c_velocity.v; + var wD = this.m_bodyD.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var qC = Rot.neo(aC); + var qD = Rot.neo(aD); + this.m_mass = 0; + if (this.m_type1 == RevoluteJoint.TYPE) { + this.m_JvAC = Vec2.zero(); + this.m_JwA = 1; + this.m_JwC = 1; + this.m_mass += this.m_iA + this.m_iC; + } else { + var u = Rot.mulVec2(qC, this.m_localAxisC); + var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); + this.m_JvAC = u; + this.m_JwC = Vec2.crossVec2Vec2(rC, u); + this.m_JwA = Vec2.crossVec2Vec2(rA2, u); + 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; + } + if (this.m_type2 == RevoluteJoint.TYPE) { + this.m_JvBD = Vec2.zero(); + this.m_JwB = this.m_ratio; + this.m_JwD = this.m_ratio; + this.m_mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); + } else { + var u = Rot.mulVec2(qD, this.m_localAxisD); + var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); + this.m_JvBD = Vec2.mulNumVec2(this.m_ratio, u); + this.m_JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); + this.m_JwB = this.m_ratio * Vec2.crossVec2Vec2(rB2, u); + 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; + } + this.m_mass = this.m_mass > 0 ? 1 / this.m_mass : 0; + if (step.warmStarting) { + vA2.addMul(this.m_mA * this.m_impulse, this.m_JvAC); + wA += this.m_iA * this.m_impulse * this.m_JwA; + vB2.addMul(this.m_mB * this.m_impulse, this.m_JvBD); + wB += this.m_iB * this.m_impulse * this.m_JwB; + vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC); + wC -= this.m_iC * this.m_impulse * this.m_JwC; + vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD); + wD -= this.m_iD * this.m_impulse * this.m_JwD; + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + this.m_bodyC.c_velocity.v.setVec2(vC); + this.m_bodyC.c_velocity.w = wC; + this.m_bodyD.c_velocity.v.setVec2(vD); + this.m_bodyD.c_velocity.w = wD; + }; + GearJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vC = this.m_bodyC.c_velocity.v; + var wC = this.m_bodyC.c_velocity.w; + var vD = this.m_bodyD.c_velocity.v; + var wD = this.m_bodyD.c_velocity.w; + 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); + Cdot += this.m_JwA * wA - this.m_JwC * wC + (this.m_JwB * wB - this.m_JwD * wD); + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + vA2.addMul(this.m_mA * impulse, this.m_JvAC); + wA += this.m_iA * impulse * this.m_JwA; + vB2.addMul(this.m_mB * impulse, this.m_JvBD); + wB += this.m_iB * impulse * this.m_JwB; + vC.subMul(this.m_mC * impulse, this.m_JvAC); + wC -= this.m_iC * impulse * this.m_JwC; + vD.subMul(this.m_mD * impulse, this.m_JvBD); + wD -= this.m_iD * impulse * this.m_JwD; + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + this.m_bodyC.c_velocity.v.setVec2(vC); + this.m_bodyC.c_velocity.w = wC; + this.m_bodyD.c_velocity.v.setVec2(vD); + this.m_bodyD.c_velocity.w = wD; + }; + GearJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var cC = this.m_bodyC.c_position.c; + var aC = this.m_bodyC.c_position.a; + var cD = this.m_bodyD.c_position.c; + var aD = this.m_bodyD.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var qC = Rot.neo(aC); + var qD = Rot.neo(aD); + var linearError = 0; + var coordinateA; + var coordinateB; + var JvAC; + var JvBD; + var JwA; + var JwB; + var JwC; + var JwD; + var mass = 0; + if (this.m_type1 == RevoluteJoint.TYPE) { + JvAC = Vec2.zero(); + JwA = 1; + JwC = 1; + mass += this.m_iA + this.m_iC; + coordinateA = aA - aC - this.m_referenceAngleA; + } else { + var u = Rot.mulVec2(qC, this.m_localAxisC); + var rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA); + JvAC = u; + JwC = Vec2.crossVec2Vec2(rC, u); + JwA = Vec2.crossVec2Vec2(rA2, u); + mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA; + var pC = Vec2.sub(this.m_localAnchorC, this.m_lcC); + var pA2 = Rot.mulTVec2(qC, Vec2.add(rA2, Vec2.sub(cA2, cC))); + coordinateA = Vec2.dot(Vec2.sub(pA2, pC), this.m_localAxisC); + } + if (this.m_type2 == RevoluteJoint.TYPE) { + JvBD = Vec2.zero(); + JwB = this.m_ratio; + JwD = this.m_ratio; + mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); + coordinateB = aB - aD - this.m_referenceAngleB; + } else { + var u = Rot.mulVec2(qD, this.m_localAxisD); + var rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_lcB); + JvBD = Vec2.mulNumVec2(this.m_ratio, u); + JwD = this.m_ratio * Vec2.crossVec2Vec2(rD, u); + JwB = this.m_ratio * Vec2.crossVec2Vec2(rB2, u); + mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * JwD * JwD + this.m_iB * JwB * JwB; + var pD = Vec2.sub(this.m_localAnchorD, this.m_lcD); + var pB2 = Rot.mulTVec2(qD, Vec2.add(rB2, Vec2.sub(cB2, cD))); + coordinateB = Vec2.dot(pB2, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD); + } + var C = coordinateA + this.m_ratio * coordinateB - this.m_constant; + var impulse = 0; + if (mass > 0) { + impulse = -C / mass; + } + cA2.addMul(this.m_mA * impulse, JvAC); + aA += this.m_iA * impulse * JwA; + cB2.addMul(this.m_mB * impulse, JvBD); + aB += this.m_iB * impulse * JwB; + cC.subMul(this.m_mC * impulse, JvAC); + aC -= this.m_iC * impulse * JwC; + cD.subMul(this.m_mD * impulse, JvBD); + aD -= this.m_iD * impulse * JwD; + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + this.m_bodyC.c_position.c.setVec2(cC); + this.m_bodyC.c_position.a = aC; + this.m_bodyD.c_position.c.setVec2(cD); + this.m_bodyD.c_position.a = aD; + return linearError < SettingsInternal.linearSlop; + }; + GearJoint2.TYPE = "gear-joint"; + return GearJoint2; + }(Joint) +); +var DEFAULTS$5 = { + maxForce: 1, + maxTorque: 1, + correctionFactor: 0.3 +}; +var MotorJoint = ( + /** @class */ + function(_super) { + __extends(MotorJoint2, _super); + function MotorJoint2(def, bodyA, bodyB) { + var _this = this; + if (!(_this instanceof MotorJoint2)) { + return new MotorJoint2(def, bodyA, bodyB); + } + def = options(def, DEFAULTS$5); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = MotorJoint2.TYPE; + _this.m_linearOffset = Vec2.isValid(def.linearOffset) ? Vec2.clone(def.linearOffset) : bodyA.getLocalPoint(bodyB.getPosition()); + _this.m_angularOffset = Number.isFinite(def.angularOffset) ? def.angularOffset : bodyB.getAngle() - bodyA.getAngle(); + _this.m_linearImpulse = Vec2.zero(); + _this.m_angularImpulse = 0; + _this.m_maxForce = def.maxForce; + _this.m_maxTorque = def.maxTorque; + _this.m_correctionFactor = def.correctionFactor; + return _this; + } + MotorJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + maxForce: this.m_maxForce, + maxTorque: this.m_maxTorque, + correctionFactor: this.m_correctionFactor, + linearOffset: this.m_linearOffset, + angularOffset: this.m_angularOffset + }; + }; + MotorJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new MotorJoint2(data); + return joint; + }; + MotorJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.angularOffset)) { + this.m_angularOffset = def.angularOffset; + } + if (Number.isFinite(def.maxForce)) { + this.m_maxForce = def.maxForce; + } + if (Number.isFinite(def.maxTorque)) { + this.m_maxTorque = def.maxTorque; + } + if (Number.isFinite(def.correctionFactor)) { + this.m_correctionFactor = def.correctionFactor; + } + if (Vec2.isValid(def.linearOffset)) { + this.m_linearOffset.set(def.linearOffset); + } + }; + MotorJoint2.prototype.setMaxForce = function(force) { + this.m_maxForce = force; + }; + MotorJoint2.prototype.getMaxForce = function() { + return this.m_maxForce; + }; + MotorJoint2.prototype.setMaxTorque = function(torque) { + this.m_maxTorque = torque; + }; + MotorJoint2.prototype.getMaxTorque = function() { + return this.m_maxTorque; + }; + MotorJoint2.prototype.setCorrectionFactor = function(factor) { + this.m_correctionFactor = factor; + }; + MotorJoint2.prototype.getCorrectionFactor = function() { + return this.m_correctionFactor; + }; + MotorJoint2.prototype.setLinearOffset = function(linearOffset) { + if (linearOffset.x != this.m_linearOffset.x || linearOffset.y != this.m_linearOffset.y) { this.m_bodyA.setAwake(true); this.m_bodyB.setAwake(true); - this.m_motorSpeed = speed; - }; - /** - * Get the motor speed, usually in radians per second. - */ - WheelJoint.prototype.getMotorSpeed = function () { - return this.m_motorSpeed; - }; - /** - * Set/Get the maximum motor force, usually in N-m. - */ - WheelJoint.prototype.setMaxMotorTorque = function (torque) { - if (torque == this.m_maxMotorTorque) - return; + this.m_linearOffset.set(linearOffset); + } + }; + MotorJoint2.prototype.getLinearOffset = function() { + return this.m_linearOffset; + }; + MotorJoint2.prototype.setAngularOffset = function(angularOffset) { + if (angularOffset != this.m_angularOffset) { this.m_bodyA.setAwake(true); this.m_bodyB.setAwake(true); - this.m_maxMotorTorque = torque; - }; - WheelJoint.prototype.getMaxMotorTorque = function () { - return this.m_maxMotorTorque; - }; - /** - * Get the current motor torque given the inverse time step, usually in N-m. - */ - WheelJoint.prototype.getMotorTorque = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - /** - * Set/Get the spring frequency in hertz. Setting the frequency to zero disables - * the spring. - */ - WheelJoint.prototype.setSpringFrequencyHz = function (hz) { - this.m_frequencyHz = hz; - }; - WheelJoint.prototype.getSpringFrequencyHz = function () { - return this.m_frequencyHz; - }; - /** - * Set/Get the spring damping ratio - */ - WheelJoint.prototype.setSpringDampingRatio = function (ratio) { - this.m_dampingRatio = ratio; - }; - WheelJoint.prototype.getSpringDampingRatio = function () { - return this.m_dampingRatio; - }; - /** - * Get the anchor point on bodyA in world coordinates. - */ - WheelJoint.prototype.getAnchorA = function () { - return this.m_bodyA.getWorldPoint(this.m_localAnchorA); - }; - /** - * Get the anchor point on bodyB in world coordinates. - */ - WheelJoint.prototype.getAnchorB = function () { - return this.m_bodyB.getWorldPoint(this.m_localAnchorB); - }; - /** - * Get the reaction force on bodyB at the joint anchor in Newtons. - */ - WheelJoint.prototype.getReactionForce = function (inv_dt) { - return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt); - }; - /** - * Get the reaction torque on bodyB in N*m. - */ - WheelJoint.prototype.getReactionTorque = function (inv_dt) { - return inv_dt * this.m_motorImpulse; - }; - WheelJoint.prototype.initVelocityConstraints = function (step) { - this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; - this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; - this.m_invMassA = this.m_bodyA.m_invMass; - this.m_invMassB = this.m_bodyB.m_invMass; - this.m_invIA = this.m_bodyA.m_invI; - this.m_invIB = this.m_bodyB.m_invI; - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - // Compute the effective masses. - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.zero(); - d.addCombine(1, cB, 1, rB); - d.subCombine(1, cA, 1, rA); - // Point to line constraint - { - this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA); - this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ay); - this.m_sBy = Vec2.crossVec2Vec2(rB, this.m_ay); - this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy - * this.m_sBy; - if (this.m_mass > 0.0) { - this.m_mass = 1.0 / this.m_mass; - } - } - // Spring constraint - this.m_springMass = 0.0; - this.m_bias = 0.0; - this.m_gamma = 0.0; - if (this.m_frequencyHz > 0.0) { - this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA); - this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ax); - this.m_sBx = Vec2.crossVec2Vec2(rB, this.m_ax); - var invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx - * this.m_sBx; - if (invMass > 0.0) { - this.m_springMass = 1.0 / invMass; - var C = Vec2.dot(d, this.m_ax); - // Frequency - var omega = 2.0 * math_PI * this.m_frequencyHz; - // Damping coefficient - var damp = 2.0 * this.m_springMass * this.m_dampingRatio * omega; - // Spring stiffness - var k = this.m_springMass * omega * omega; - // magic formulas - var h = step.dt; - this.m_gamma = h * (damp + h * k); - if (this.m_gamma > 0.0) { - this.m_gamma = 1.0 / this.m_gamma; - } - this.m_bias = C * h * k * this.m_gamma; - this.m_springMass = invMass + this.m_gamma; - if (this.m_springMass > 0.0) { - this.m_springMass = 1.0 / this.m_springMass; - } - } - } - else { - this.m_springImpulse = 0.0; - } - // Rotational motor - if (this.m_enableMotor) { - this.m_motorMass = iA + iB; - if (this.m_motorMass > 0.0) { - this.m_motorMass = 1.0 / this.m_motorMass; - } - } - else { - this.m_motorMass = 0.0; - this.m_motorImpulse = 0.0; - } - if (step.warmStarting) { - // Account for variable time step. - this.m_impulse *= step.dtRatio; - this.m_springImpulse *= step.dtRatio; - this.m_motorImpulse *= step.dtRatio; - var P = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax); - var LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse; - var LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse; - vA.subMul(this.m_invMassA, P); - wA -= this.m_invIA * LA; - vB.addMul(this.m_invMassB, P); - wB += this.m_invIB * LB; - } - else { - this.m_impulse = 0.0; - this.m_springImpulse = 0.0; - this.m_motorImpulse = 0.0; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - WheelJoint.prototype.solveVelocityConstraints = function (step) { - var mA = this.m_invMassA; - var mB = this.m_invMassB; - var iA = this.m_invIA; - var iB = this.m_invIB; - var vA = this.m_bodyA.c_velocity.v; - var wA = this.m_bodyA.c_velocity.w; - var vB = this.m_bodyB.c_velocity.v; - var wB = this.m_bodyB.c_velocity.w; - // Solve spring constraint - { - var Cdot = Vec2.dot(this.m_ax, vB) - Vec2.dot(this.m_ax, vA) + this.m_sBx * wB - this.m_sAx * wA; - var impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse); - this.m_springImpulse += impulse; - var P = Vec2.mulNumVec2(impulse, this.m_ax); - var LA = impulse * this.m_sAx; - var LB = impulse * this.m_sBx; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - // Solve rotational motor constraint - { - var Cdot = wB - wA - this.m_motorSpeed; - var impulse = -this.m_motorMass * Cdot; - var oldImpulse = this.m_motorImpulse; - var maxImpulse = step.dt * this.m_maxMotorTorque; - this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); - impulse = this.m_motorImpulse - oldImpulse; - wA -= iA * impulse; - wB += iB * impulse; - } - // Solve point to line constraint - { - var Cdot = Vec2.dot(this.m_ay, vB) - Vec2.dot(this.m_ay, vA) + this.m_sBy * wB - this.m_sAy * wA; - var impulse = -this.m_mass * Cdot; - this.m_impulse += impulse; - var P = Vec2.mulNumVec2(impulse, this.m_ay); - var LA = impulse * this.m_sAy; - var LB = impulse * this.m_sBy; - vA.subMul(mA, P); - wA -= iA * LA; - vB.addMul(mB, P); - wB += iB * LB; - } - this.m_bodyA.c_velocity.v.setVec2(vA); - this.m_bodyA.c_velocity.w = wA; - this.m_bodyB.c_velocity.v.setVec2(vB); - this.m_bodyB.c_velocity.w = wB; - }; - /** - * This returns true if the position errors are within tolerance. - */ - WheelJoint.prototype.solvePositionConstraints = function (step) { - var cA = this.m_bodyA.c_position.c; - var aA = this.m_bodyA.c_position.a; - var cB = this.m_bodyB.c_position.c; - var aB = this.m_bodyB.c_position.a; - var qA = Rot.neo(aA); - var qB = Rot.neo(aB); - var rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); - var rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); - var d = Vec2.zero(); - d.addCombine(1, cB, 1, rB); - d.subCombine(1, cA, 1, rA); - var ay = Rot.mulVec2(qA, this.m_localYAxisA); - var sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), ay); - var sBy = Vec2.crossVec2Vec2(rB, ay); - var C = Vec2.dot(d, ay); - 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; - var impulse = k != 0.0 ? -C / k : 0.0; - var P = Vec2.mulNumVec2(impulse, ay); - var LA = impulse * sAy; - var LB = impulse * sBy; - cA.subMul(this.m_invMassA, P); - aA -= this.m_invIA * LA; - cB.addMul(this.m_invMassB, P); - aB += this.m_invIB * LB; - this.m_bodyA.c_position.c.setVec2(cA); - this.m_bodyA.c_position.a = aA; - this.m_bodyB.c_position.c.setVec2(cB); - this.m_bodyB.c_position.a = aB; - return math_abs(C) <= SettingsInternal.linearSlop; - }; - WheelJoint.TYPE = "wheel-joint"; - return WheelJoint; -}(Joint)); - + this.m_angularOffset = angularOffset; + } + }; + MotorJoint2.prototype.getAngularOffset = function() { + return this.m_angularOffset; + }; + MotorJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getPosition(); + }; + MotorJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getPosition(); + }; + MotorJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse); + }; + MotorJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_angularImpulse; + }; + MotorJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_linearOffset, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.neg(this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var K = new Mat22(); + K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y * this.m_rB.y; + K.ex.y = -iA * this.m_rA.x * this.m_rA.y - iB * this.m_rB.x * this.m_rB.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * this.m_rA.x * this.m_rA.x + iB * this.m_rB.x * this.m_rB.x; + this.m_linearMass = K.getInverse(); + this.m_angularMass = iA + iB; + if (this.m_angularMass > 0) { + this.m_angularMass = 1 / this.m_angularMass; + } + this.m_linearError = Vec2.zero(); + this.m_linearError.addCombine(1, cB2, 1, this.m_rB); + this.m_linearError.subCombine(1, cA2, 1, this.m_rA); + this.m_angularError = aB - aA - this.m_angularOffset; + if (step.warmStarting) { + this.m_linearImpulse.mul(step.dtRatio); + this.m_angularImpulse *= step.dtRatio; + var P3 = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_angularImpulse); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_angularImpulse); + } else { + this.m_linearImpulse.setZero(); + this.m_angularImpulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + MotorJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var h = step.dt; + var inv_h = step.inv_dt; + { + var Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError; + var impulse = -this.m_angularMass * Cdot; + var oldImpulse = this.m_angularImpulse; + var maxImpulse = h * this.m_maxTorque; + this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_angularImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + { + var Cdot = Vec2.zero(); + Cdot.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError); + var impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot)); + var oldImpulse = Vec2.clone(this.m_linearImpulse); + this.m_linearImpulse.add(impulse); + var maxImpulse = h * this.m_maxForce; + this.m_linearImpulse.clamp(maxImpulse); + impulse = Vec2.sub(this.m_linearImpulse, oldImpulse); + vA2.subMul(mA, impulse); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse); + vB2.addMul(mB, impulse); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + MotorJoint2.prototype.solvePositionConstraints = function(step) { + return true; + }; + MotorJoint2.TYPE = "motor-joint"; + return MotorJoint2; + }(Joint) +); +var math_PI$2 = Math.PI; +var DEFAULTS$4 = { + maxForce: 0, + frequencyHz: 5, + dampingRatio: 0.7 +}; +var MouseJoint = ( + /** @class */ + function(_super) { + __extends(MouseJoint2, _super); + function MouseJoint2(def, bodyA, bodyB, target) { + var _this = this; + if (!(_this instanceof MouseJoint2)) { + return new MouseJoint2(def, bodyA, bodyB, target); + } + def = options(def, DEFAULTS$4); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = MouseJoint2.TYPE; + if (Vec2.isValid(target)) { + _this.m_targetA = Vec2.clone(target); + } else if (Vec2.isValid(def.target)) { + _this.m_targetA = Vec2.clone(def.target); + } else { + _this.m_targetA = Vec2.zero(); + } + _this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), _this.m_targetA); + _this.m_maxForce = def.maxForce; + _this.m_impulse = Vec2.zero(); + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_beta = 0; + _this.m_gamma = 0; + _this.m_rB = Vec2.zero(); + _this.m_localCenterB = Vec2.zero(); + _this.m_invMassB = 0; + _this.m_invIB = 0; + _this.m_mass = new Mat22(); + _this.m_C = Vec2.zero(); + return _this; + } + MouseJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + target: this.m_targetA, + maxForce: this.m_maxForce, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + _localAnchorB: this.m_localAnchorB + }; + }; + MouseJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + data.target = Vec2.clone(data.target); + var joint = new MouseJoint2(data); + if (data._localAnchorB) { + joint.m_localAnchorB = data._localAnchorB; + } + return joint; + }; + MouseJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.maxForce)) { + this.m_maxForce = def.maxForce; + } + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; + } + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; + } + }; + MouseJoint2.prototype.setTarget = function(target) { + if (Vec2.areEqual(target, this.m_targetA)) + return; + this.m_bodyB.setAwake(true); + this.m_targetA.set(target); + }; + MouseJoint2.prototype.getTarget = function() { + return this.m_targetA; + }; + MouseJoint2.prototype.setMaxForce = function(force) { + this.m_maxForce = force; + }; + MouseJoint2.prototype.getMaxForce = function() { + return this.m_maxForce; + }; + MouseJoint2.prototype.setFrequency = function(hz) { + this.m_frequencyHz = hz; + }; + MouseJoint2.prototype.getFrequency = function() { + return this.m_frequencyHz; + }; + MouseJoint2.prototype.setDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + MouseJoint2.prototype.getDampingRatio = function() { + return this.m_dampingRatio; + }; + MouseJoint2.prototype.getAnchorA = function() { + return Vec2.clone(this.m_targetA); + }; + MouseJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + MouseJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(inv_dt, this.m_impulse); + }; + MouseJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * 0; + }; + MouseJoint2.prototype.shiftOrigin = function(newOrigin) { + this.m_targetA.sub(newOrigin); + }; + MouseJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIB = this.m_bodyB.m_invI; + var position = this.m_bodyB.c_position; + var velocity = this.m_bodyB.c_velocity; + var cB2 = position.c; + var aB = position.a; + var vB2 = velocity.v; + var wB = velocity.w; + var qB = Rot.neo(aB); + var mass = this.m_bodyB.getMass(); + var omega = 2 * math_PI$2 * this.m_frequencyHz; + var d2 = 2 * mass * this.m_dampingRatio * omega; + var k = mass * (omega * omega); + var h = step.dt; + this.m_gamma = h * (d2 + h * k); + if (this.m_gamma != 0) { + this.m_gamma = 1 / this.m_gamma; + } + this.m_beta = h * k * this.m_gamma; + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var K = new Mat22(); + K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y + this.m_gamma; + K.ex.y = -this.m_invIB * this.m_rB.x * this.m_rB.y; + K.ey.x = K.ex.y; + K.ey.y = this.m_invMassB + this.m_invIB * this.m_rB.x * this.m_rB.x + this.m_gamma; + this.m_mass = K.getInverse(); + this.m_C.setVec2(cB2); + this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA); + this.m_C.mul(this.m_beta); + wB *= 0.98; + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + vB2.addMul(this.m_invMassB, this.m_impulse); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse); + } else { + this.m_impulse.setZero(); + } + velocity.v.setVec2(vB2); + velocity.w = wB; + }; + MouseJoint2.prototype.solveVelocityConstraints = function(step) { + var velocity = this.m_bodyB.c_velocity; + var vB2 = Vec2.clone(velocity.v); + var wB = velocity.w; + var Cdot = Vec2.crossNumVec2(wB, this.m_rB); + Cdot.add(vB2); + Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse); + Cdot.neg(); + var impulse = Mat22.mulVec2(this.m_mass, Cdot); + var oldImpulse = Vec2.clone(this.m_impulse); + this.m_impulse.add(impulse); + var maxImpulse = step.dt * this.m_maxForce; + this.m_impulse.clamp(maxImpulse); + impulse = Vec2.sub(this.m_impulse, oldImpulse); + vB2.addMul(this.m_invMassB, impulse); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse); + velocity.v.setVec2(vB2); + velocity.w = wB; + }; + MouseJoint2.prototype.solvePositionConstraints = function(step) { + return true; + }; + MouseJoint2.TYPE = "mouse-joint"; + return MouseJoint2; + }(Joint) +); +var math_abs$2 = Math.abs; +var DEFAULTS$3 = { + collideConnected: true +}; +var PulleyJoint = ( + /** @class */ + function(_super) { + __extends(PulleyJoint2, _super); + function PulleyJoint2(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio) { + var _this = this; + if (!(_this instanceof PulleyJoint2)) { + return new PulleyJoint2(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio); + } + def = options(def, DEFAULTS$3); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = PulleyJoint2.TYPE; + _this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1, 1)); + _this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1, 1)); + _this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1, 0)); + _this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1, 0)); + _this.m_lengthA = Number.isFinite(def.lengthA) ? def.lengthA : Vec2.distance(anchorA, groundA); + _this.m_lengthB = Number.isFinite(def.lengthB) ? def.lengthB : Vec2.distance(anchorB, groundB); + _this.m_ratio = Number.isFinite(ratio) ? ratio : def.ratio; + _this.m_constant = _this.m_lengthA + _this.m_ratio * _this.m_lengthB; + _this.m_impulse = 0; + return _this; + } + PulleyJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + groundAnchorA: this.m_groundAnchorA, + groundAnchorB: this.m_groundAnchorB, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + lengthA: this.m_lengthA, + lengthB: this.m_lengthB, + ratio: this.m_ratio + }; + }; + PulleyJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new PulleyJoint2(data); + return joint; + }; + PulleyJoint2.prototype._reset = function(def) { + if (Vec2.isValid(def.groundAnchorA)) { + this.m_groundAnchorA.set(def.groundAnchorA); + } + if (Vec2.isValid(def.groundAnchorB)) { + this.m_groundAnchorB.set(def.groundAnchorB); + } + if (Vec2.isValid(def.localAnchorA)) { + this.m_localAnchorA.set(def.localAnchorA); + } else if (Vec2.isValid(def.anchorA)) { + this.m_localAnchorA.set(this.m_bodyA.getLocalPoint(def.anchorA)); + } + if (Vec2.isValid(def.localAnchorB)) { + this.m_localAnchorB.set(def.localAnchorB); + } else if (Vec2.isValid(def.anchorB)) { + this.m_localAnchorB.set(this.m_bodyB.getLocalPoint(def.anchorB)); + } + if (Number.isFinite(def.lengthA)) { + this.m_lengthA = def.lengthA; + } + if (Number.isFinite(def.lengthB)) { + this.m_lengthB = def.lengthB; + } + if (Number.isFinite(def.ratio)) { + this.m_ratio = def.ratio; + } + }; + PulleyJoint2.prototype.getGroundAnchorA = function() { + return this.m_groundAnchorA; + }; + PulleyJoint2.prototype.getGroundAnchorB = function() { + return this.m_groundAnchorB; + }; + PulleyJoint2.prototype.getLengthA = function() { + return this.m_lengthA; + }; + PulleyJoint2.prototype.getLengthB = function() { + return this.m_lengthB; + }; + PulleyJoint2.prototype.getRatio = function() { + return this.m_ratio; + }; + PulleyJoint2.prototype.getCurrentLengthA = function() { + var p = this.m_bodyA.getWorldPoint(this.m_localAnchorA); + var s2 = this.m_groundAnchorA; + return Vec2.distance(p, s2); + }; + PulleyJoint2.prototype.getCurrentLengthB = function() { + var p = this.m_bodyB.getWorldPoint(this.m_localAnchorB); + var s2 = this.m_groundAnchorB; + return Vec2.distance(p, s2); + }; + PulleyJoint2.prototype.shiftOrigin = function(newOrigin) { + this.m_groundAnchorA.sub(newOrigin); + this.m_groundAnchorB.sub(newOrigin); + }; + PulleyJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + PulleyJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + PulleyJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt); + }; + PulleyJoint2.prototype.getReactionTorque = function(inv_dt) { + return 0; + }; + PulleyJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + this.m_uA = Vec2.sub(Vec2.add(cA2, this.m_rA), this.m_groundAnchorA); + this.m_uB = Vec2.sub(Vec2.add(cB2, this.m_rB), this.m_groundAnchorB); + var lengthA = this.m_uA.length(); + var lengthB = this.m_uB.length(); + if (lengthA > 10 * SettingsInternal.linearSlop) { + this.m_uA.mul(1 / lengthA); + } else { + this.m_uA.setZero(); + } + if (lengthB > 10 * SettingsInternal.linearSlop) { + this.m_uB.mul(1 / lengthB); + } else { + this.m_uB.setZero(); + } + var ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA); + var ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB); + var mA = this.m_invMassA + this.m_invIA * ruA * ruA; + var mB = this.m_invMassB + this.m_invIB * ruB * ruB; + this.m_mass = mA + this.m_ratio * this.m_ratio * mB; + if (this.m_mass > 0) { + this.m_mass = 1 / this.m_mass; + } + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + var PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA); + var PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB); + vA2.addMul(this.m_invMassA, PA); + wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); + vB2.addMul(this.m_invMassB, PB); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + PulleyJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vpA = Vec2.add(vA2, Vec2.crossNumVec2(wA, this.m_rA)); + var vpB = Vec2.add(vB2, Vec2.crossNumVec2(wB, this.m_rB)); + var Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB); + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + var PA = Vec2.mulNumVec2(-impulse, this.m_uA); + var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB); + vA2.addMul(this.m_invMassA, PA); + wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA); + vB2.addMul(this.m_invMassB, PB); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB); + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + PulleyJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var uA = Vec2.sub(Vec2.add(cA2, this.m_rA), this.m_groundAnchorA); + var uB = Vec2.sub(Vec2.add(cB2, this.m_rB), this.m_groundAnchorB); + var lengthA = uA.length(); + var lengthB = uB.length(); + if (lengthA > 10 * SettingsInternal.linearSlop) { + uA.mul(1 / lengthA); + } else { + uA.setZero(); + } + if (lengthB > 10 * SettingsInternal.linearSlop) { + uB.mul(1 / lengthB); + } else { + uB.setZero(); + } + var ruA = Vec2.crossVec2Vec2(rA2, uA); + var ruB = Vec2.crossVec2Vec2(rB2, uB); + var mA = this.m_invMassA + this.m_invIA * ruA * ruA; + var mB = this.m_invMassB + this.m_invIB * ruB * ruB; + var mass = mA + this.m_ratio * this.m_ratio * mB; + if (mass > 0) { + mass = 1 / mass; + } + var C = this.m_constant - lengthA - this.m_ratio * lengthB; + var linearError = math_abs$2(C); + var impulse = -mass * C; + var PA = Vec2.mulNumVec2(-impulse, uA); + var PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB); + cA2.addMul(this.m_invMassA, PA); + aA += this.m_invIA * Vec2.crossVec2Vec2(rA2, PA); + cB2.addMul(this.m_invMassB, PB); + aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, PB); + this.m_bodyA.c_position.c = cA2; + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c = cB2; + this.m_bodyB.c_position.a = aB; + return linearError < SettingsInternal.linearSlop; + }; + PulleyJoint2.TYPE = "pulley-joint"; + return PulleyJoint2; + }(Joint) +); +var math_min$1 = Math.min; +var LimitState; +(function(LimitState2) { + LimitState2[LimitState2["inactiveLimit"] = 0] = "inactiveLimit"; + LimitState2[LimitState2["atLowerLimit"] = 1] = "atLowerLimit"; + LimitState2[LimitState2["atUpperLimit"] = 2] = "atUpperLimit"; + LimitState2[LimitState2["equalLimits"] = 3] = "equalLimits"; +})(LimitState || (LimitState = {})); +var DEFAULTS$2 = { + maxLength: 0 +}; +var RopeJoint = ( + /** @class */ + function(_super) { + __extends(RopeJoint2, _super); + function RopeJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + if (!(_this instanceof RopeJoint2)) { + return new RopeJoint2(def, bodyA, bodyB, anchor); + } + def = options(def, DEFAULTS$2); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = RopeJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1, 0)); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1, 0)); + _this.m_maxLength = def.maxLength; + _this.m_mass = 0; + _this.m_impulse = 0; + _this.m_length = 0; + _this.m_state = LimitState.inactiveLimit; + return _this; + } + RopeJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + maxLength: this.m_maxLength + }; + }; + RopeJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new RopeJoint2(data); + return joint; + }; + RopeJoint2.prototype._reset = function(def) { + if (Number.isFinite(def.maxLength)) { + this.m_maxLength = def.maxLength; + } + }; + RopeJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + RopeJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + RopeJoint2.prototype.setMaxLength = function(length) { + this.m_maxLength = length; + }; + RopeJoint2.prototype.getMaxLength = function() { + return this.m_maxLength; + }; + RopeJoint2.prototype.getLimitState = function() { + return this.m_state; + }; + RopeJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + RopeJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + RopeJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt); + }; + RopeJoint2.prototype.getReactionTorque = function(inv_dt) { + return 0; + }; + RopeJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); + this.m_rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); + this.m_u = Vec2.zero(); + this.m_u.addCombine(1, cB2, 1, this.m_rB); + this.m_u.subCombine(1, cA2, 1, this.m_rA); + this.m_length = this.m_u.length(); + var C = this.m_length - this.m_maxLength; + if (C > 0) { + this.m_state = LimitState.atUpperLimit; + } else { + this.m_state = LimitState.inactiveLimit; + } + if (this.m_length > SettingsInternal.linearSlop) { + this.m_u.mul(1 / this.m_length); + } else { + this.m_u.setZero(); + this.m_mass = 0; + this.m_impulse = 0; + return; + } + var crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u); + var crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u); + var invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB; + this.m_mass = invMass != 0 ? 1 / invMass : 0; + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + var P3 = Vec2.mulNumVec2(this.m_impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + } else { + this.m_impulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + RopeJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var vpA = Vec2.addCrossNumVec2(vA2, wA, this.m_rA); + var vpB = Vec2.addCrossNumVec2(vB2, wB, this.m_rB); + var C = this.m_length - this.m_maxLength; + var Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA)); + if (C < 0) { + Cdot += step.inv_dt * C; + } + var impulse = -this.m_mass * Cdot; + var oldImpulse = this.m_impulse; + this.m_impulse = math_min$1(0, this.m_impulse + impulse); + impulse = this.m_impulse - oldImpulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_u); + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P3); + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + RopeJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA); + var rB2 = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB); + var u = Vec2.zero(); + u.addCombine(1, cB2, 1, rB2); + u.subCombine(1, cA2, 1, rA2); + var length = u.normalize(); + var C = length - this.m_maxLength; + C = clamp(C, 0, SettingsInternal.maxLinearCorrection); + var impulse = -this.m_mass * C; + var P3 = Vec2.mulNumVec2(impulse, u); + cA2.subMul(this.m_invMassA, P3); + aA -= this.m_invIA * Vec2.crossVec2Vec2(rA2, P3); + cB2.addMul(this.m_invMassB, P3); + aB += this.m_invIB * Vec2.crossVec2Vec2(rB2, P3); + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return length - this.m_maxLength < SettingsInternal.linearSlop; + }; + RopeJoint2.TYPE = "rope-joint"; + return RopeJoint2; + }(Joint) +); +var math_abs$1 = Math.abs; +var math_PI$1 = Math.PI; +var DEFAULTS$1 = { + frequencyHz: 0, + dampingRatio: 0 +}; +var WeldJoint = ( + /** @class */ + function(_super) { + __extends(WeldJoint2, _super); + function WeldJoint2(def, bodyA, bodyB, anchor) { + var _this = this; + if (!(_this instanceof WeldJoint2)) { + return new WeldJoint2(def, bodyA, bodyB, anchor); + } + def = options(def, DEFAULTS$1); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_type = WeldJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + _this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle(); + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_impulse = new Vec3(); + _this.m_bias = 0; + _this.m_gamma = 0; + _this.m_rA; + _this.m_rB; + _this.m_localCenterA; + _this.m_localCenterB; + _this.m_invMassA; + _this.m_invMassB; + _this.m_invIA; + _this.m_invIB; + _this.m_mass = new Mat33(); + return _this; + } + WeldJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + referenceAngle: this.m_referenceAngle + }; + }; + WeldJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new WeldJoint2(data); + return joint; + }; + WeldJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; + } + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; + } + }; + WeldJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + WeldJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + WeldJoint2.prototype.getReferenceAngle = function() { + return this.m_referenceAngle; + }; + WeldJoint2.prototype.setFrequency = function(hz) { + this.m_frequencyHz = hz; + }; + WeldJoint2.prototype.getFrequency = function() { + return this.m_frequencyHz; + }; + WeldJoint2.prototype.setDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + WeldJoint2.prototype.getDampingRatio = function() { + return this.m_dampingRatio; + }; + WeldJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + WeldJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + WeldJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt); + }; + WeldJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_impulse.z; + }; + WeldJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + this.m_rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var K = new Mat33(); + K.ex.x = mA + mB + this.m_rA.y * this.m_rA.y * iA + this.m_rB.y * this.m_rB.y * iB; + K.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; + K.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; + K.ex.y = K.ey.x; + K.ey.y = mA + mB + this.m_rA.x * this.m_rA.x * iA + this.m_rB.x * this.m_rB.x * iB; + K.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; + K.ex.z = K.ez.x; + K.ey.z = K.ez.y; + K.ez.z = iA + iB; + if (this.m_frequencyHz > 0) { + K.getInverse22(this.m_mass); + var invM = iA + iB; + var m = invM > 0 ? 1 / invM : 0; + var C = aB - aA - this.m_referenceAngle; + var omega = 2 * math_PI$1 * this.m_frequencyHz; + var d2 = 2 * m * this.m_dampingRatio * omega; + var k = m * omega * omega; + var h = step.dt; + this.m_gamma = h * (d2 + h * k); + this.m_gamma = this.m_gamma != 0 ? 1 / this.m_gamma : 0; + this.m_bias = C * h * k * this.m_gamma; + invM += this.m_gamma; + this.m_mass.ez.z = invM != 0 ? 1 / invM : 0; + } else if (K.ez.z == 0) { + K.getInverse22(this.m_mass); + this.m_gamma = 0; + this.m_bias = 0; + } else { + K.getSymInverse33(this.m_mass); + this.m_gamma = 0; + this.m_bias = 0; + } + if (step.warmStarting) { + this.m_impulse.mul(step.dtRatio); + var P3 = Vec2.neo(this.m_impulse.x, this.m_impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + this.m_impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + this.m_impulse.z); + } else { + this.m_impulse.setZero(); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + WeldJoint2.prototype.solveVelocityConstraints = function(step) { + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + if (this.m_frequencyHz > 0) { + var Cdot2 = wB - wA; + var impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z); + this.m_impulse.z += impulse2; + wA -= iA * impulse2; + wB += iB * impulse2; + var Cdot1 = Vec2.zero(); + Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1)); + this.m_impulse.x += impulse1.x; + this.m_impulse.y += impulse1.y; + var P3 = Vec2.clone(impulse1); + vA2.subMul(mA, P3); + wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P3); + vB2.addMul(mB, P3); + wB += iB * Vec2.crossVec2Vec2(this.m_rB, P3); + } else { + var Cdot1 = Vec2.zero(); + Cdot1.addCombine(1, vB2, 1, Vec2.crossNumVec2(wB, this.m_rB)); + Cdot1.subCombine(1, vA2, 1, Vec2.crossNumVec2(wA, this.m_rA)); + var Cdot2 = wB - wA; + var Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2); + var impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot)); + this.m_impulse.add(impulse); + var P3 = Vec2.neo(impulse.x, impulse.y); + vA2.subMul(mA, P3); + wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P3) + impulse.z); + vB2.addMul(mB, P3); + wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P3) + impulse.z); + } + this.m_bodyA.c_velocity.v = vA2; + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v = vB2; + this.m_bodyB.c_velocity.w = wB; + }; + WeldJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var positionError; + var angularError; + var K = new Mat33(); + K.ex.x = mA + mB + rA2.y * rA2.y * iA + rB2.y * rB2.y * iB; + K.ey.x = -rA2.y * rA2.x * iA - rB2.y * rB2.x * iB; + K.ez.x = -rA2.y * iA - rB2.y * iB; + K.ex.y = K.ey.x; + K.ey.y = mA + mB + rA2.x * rA2.x * iA + rB2.x * rB2.x * iB; + K.ez.y = rA2.x * iA + rB2.x * iB; + K.ex.z = K.ez.x; + K.ey.z = K.ez.y; + K.ez.z = iA + iB; + if (this.m_frequencyHz > 0) { + var C1 = Vec2.zero(); + C1.addCombine(1, cB2, 1, rB2); + C1.subCombine(1, cA2, 1, rA2); + positionError = C1.length(); + angularError = 0; + var P3 = Vec2.neg(K.solve22(C1)); + cA2.subMul(mA, P3); + aA -= iA * Vec2.crossVec2Vec2(rA2, P3); + cB2.addMul(mB, P3); + aB += iB * Vec2.crossVec2Vec2(rB2, P3); + } else { + var C1 = Vec2.zero(); + C1.addCombine(1, cB2, 1, rB2); + C1.subCombine(1, cA2, 1, rA2); + var C2 = aB - aA - this.m_referenceAngle; + positionError = C1.length(); + angularError = math_abs$1(C2); + var C = new Vec3(C1.x, C1.y, C2); + var impulse = new Vec3(); + if (K.ez.z > 0) { + impulse = Vec3.neg(K.solve33(C)); + } else { + var impulse2 = Vec2.neg(K.solve22(C1)); + impulse.set(impulse2.x, impulse2.y, 0); + } + var P3 = Vec2.neo(impulse.x, impulse.y); + cA2.subMul(mA, P3); + aA -= iA * (Vec2.crossVec2Vec2(rA2, P3) + impulse.z); + cB2.addMul(mB, P3); + aB += iB * (Vec2.crossVec2Vec2(rB2, P3) + impulse.z); + } + this.m_bodyA.c_position.c = cA2; + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c = cB2; + this.m_bodyB.c_position.a = aB; + return positionError <= SettingsInternal.linearSlop && angularError <= SettingsInternal.angularSlop; + }; + WeldJoint2.TYPE = "weld-joint"; + return WeldJoint2; + }(Joint) +); +var math_abs = Math.abs; +var math_PI = Math.PI; +var DEFAULTS = { + enableMotor: false, + maxMotorTorque: 0, + motorSpeed: 0, + frequencyHz: 2, + dampingRatio: 0.7 +}; +var WheelJoint = ( + /** @class */ + function(_super) { + __extends(WheelJoint2, _super); + function WheelJoint2(def, bodyA, bodyB, anchor, axis) { + var _this = this; + if (!(_this instanceof WheelJoint2)) { + return new WheelJoint2(def, bodyA, bodyB, anchor, axis); + } + def = options(def, DEFAULTS); + _this = _super.call(this, def, bodyA, bodyB) || this; + bodyA = _this.m_bodyA; + bodyB = _this.m_bodyB; + _this.m_ax = Vec2.zero(); + _this.m_ay = Vec2.zero(); + _this.m_type = WheelJoint2.TYPE; + _this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.zero()); + _this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.zero()); + if (Vec2.isValid(axis)) { + _this.m_localXAxisA = bodyA.getLocalVector(axis); + } else if (Vec2.isValid(def.localAxisA)) { + _this.m_localXAxisA = Vec2.clone(def.localAxisA); + } else if (Vec2.isValid(def.localAxis)) { + _this.m_localXAxisA = Vec2.clone(def.localAxis); + } else { + _this.m_localXAxisA = Vec2.neo(1, 0); + } + _this.m_localYAxisA = Vec2.crossNumVec2(1, _this.m_localXAxisA); + _this.m_mass = 0; + _this.m_impulse = 0; + _this.m_motorMass = 0; + _this.m_motorImpulse = 0; + _this.m_springMass = 0; + _this.m_springImpulse = 0; + _this.m_maxMotorTorque = def.maxMotorTorque; + _this.m_motorSpeed = def.motorSpeed; + _this.m_enableMotor = def.enableMotor; + _this.m_frequencyHz = def.frequencyHz; + _this.m_dampingRatio = def.dampingRatio; + _this.m_bias = 0; + _this.m_gamma = 0; + return _this; + } + WheelJoint2.prototype._serialize = function() { + return { + type: this.m_type, + bodyA: this.m_bodyA, + bodyB: this.m_bodyB, + collideConnected: this.m_collideConnected, + enableMotor: this.m_enableMotor, + maxMotorTorque: this.m_maxMotorTorque, + motorSpeed: this.m_motorSpeed, + frequencyHz: this.m_frequencyHz, + dampingRatio: this.m_dampingRatio, + localAnchorA: this.m_localAnchorA, + localAnchorB: this.m_localAnchorB, + localAxisA: this.m_localXAxisA + }; + }; + WheelJoint2._deserialize = function(data, world, restore) { + data = __assign({}, data); + data.bodyA = restore(Body, data.bodyA, world); + data.bodyB = restore(Body, data.bodyB, world); + var joint = new WheelJoint2(data); + return joint; + }; + WheelJoint2.prototype._reset = function(def) { + if (def.anchorA) { + this.m_localAnchorA.setVec2(this.m_bodyA.getLocalPoint(def.anchorA)); + } else if (def.localAnchorA) { + this.m_localAnchorA.setVec2(def.localAnchorA); + } + if (def.anchorB) { + this.m_localAnchorB.setVec2(this.m_bodyB.getLocalPoint(def.anchorB)); + } else if (def.localAnchorB) { + this.m_localAnchorB.setVec2(def.localAnchorB); + } + if (def.localAxisA) { + this.m_localXAxisA.setVec2(def.localAxisA); + this.m_localYAxisA.setVec2(Vec2.crossNumVec2(1, def.localAxisA)); + } + if (def.enableMotor !== void 0) { + this.m_enableMotor = def.enableMotor; + } + if (Number.isFinite(def.maxMotorTorque)) { + this.m_maxMotorTorque = def.maxMotorTorque; + } + if (Number.isFinite(def.motorSpeed)) { + this.m_motorSpeed = def.motorSpeed; + } + if (Number.isFinite(def.frequencyHz)) { + this.m_frequencyHz = def.frequencyHz; + } + if (Number.isFinite(def.dampingRatio)) { + this.m_dampingRatio = def.dampingRatio; + } + }; + WheelJoint2.prototype.getLocalAnchorA = function() { + return this.m_localAnchorA; + }; + WheelJoint2.prototype.getLocalAnchorB = function() { + return this.m_localAnchorB; + }; + WheelJoint2.prototype.getLocalAxisA = function() { + return this.m_localXAxisA; + }; + WheelJoint2.prototype.getJointTranslation = function() { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + var pA2 = bA.getWorldPoint(this.m_localAnchorA); + var pB2 = bB.getWorldPoint(this.m_localAnchorB); + var d2 = Vec2.sub(pB2, pA2); + var axis = bA.getWorldVector(this.m_localXAxisA); + var translation2 = Vec2.dot(d2, axis); + return translation2; + }; + WheelJoint2.prototype.getJointSpeed = function() { + var wA = this.m_bodyA.m_angularVelocity; + var wB = this.m_bodyB.m_angularVelocity; + return wB - wA; + }; + WheelJoint2.prototype.isMotorEnabled = function() { + return this.m_enableMotor; + }; + WheelJoint2.prototype.enableMotor = function(flag) { + if (flag == this.m_enableMotor) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_enableMotor = flag; + }; + WheelJoint2.prototype.setMotorSpeed = function(speed) { + if (speed == this.m_motorSpeed) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_motorSpeed = speed; + }; + WheelJoint2.prototype.getMotorSpeed = function() { + return this.m_motorSpeed; + }; + WheelJoint2.prototype.setMaxMotorTorque = function(torque) { + if (torque == this.m_maxMotorTorque) + return; + this.m_bodyA.setAwake(true); + this.m_bodyB.setAwake(true); + this.m_maxMotorTorque = torque; + }; + WheelJoint2.prototype.getMaxMotorTorque = function() { + return this.m_maxMotorTorque; + }; + WheelJoint2.prototype.getMotorTorque = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + WheelJoint2.prototype.setSpringFrequencyHz = function(hz) { + this.m_frequencyHz = hz; + }; + WheelJoint2.prototype.getSpringFrequencyHz = function() { + return this.m_frequencyHz; + }; + WheelJoint2.prototype.setSpringDampingRatio = function(ratio) { + this.m_dampingRatio = ratio; + }; + WheelJoint2.prototype.getSpringDampingRatio = function() { + return this.m_dampingRatio; + }; + WheelJoint2.prototype.getAnchorA = function() { + return this.m_bodyA.getWorldPoint(this.m_localAnchorA); + }; + WheelJoint2.prototype.getAnchorB = function() { + return this.m_bodyB.getWorldPoint(this.m_localAnchorB); + }; + WheelJoint2.prototype.getReactionForce = function(inv_dt) { + return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt); + }; + WheelJoint2.prototype.getReactionTorque = function(inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + WheelJoint2.prototype.initVelocityConstraints = function(step) { + this.m_localCenterA = this.m_bodyA.m_sweep.localCenter; + this.m_localCenterB = this.m_bodyB.m_sweep.localCenter; + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.zero(); + d2.addCombine(1, cB2, 1, rB2); + d2.subCombine(1, cA2, 1, rA2); + { + this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA); + this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_ay); + this.m_sBy = Vec2.crossVec2Vec2(rB2, this.m_ay); + this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy * this.m_sBy; + if (this.m_mass > 0) { + this.m_mass = 1 / this.m_mass; + } + } + this.m_springMass = 0; + this.m_bias = 0; + this.m_gamma = 0; + if (this.m_frequencyHz > 0) { + this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA); + this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), this.m_ax); + this.m_sBx = Vec2.crossVec2Vec2(rB2, this.m_ax); + var invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx * this.m_sBx; + if (invMass > 0) { + this.m_springMass = 1 / invMass; + var C = Vec2.dot(d2, this.m_ax); + var omega = 2 * math_PI * this.m_frequencyHz; + var damp = 2 * this.m_springMass * this.m_dampingRatio * omega; + var k = this.m_springMass * omega * omega; + var h = step.dt; + this.m_gamma = h * (damp + h * k); + if (this.m_gamma > 0) { + this.m_gamma = 1 / this.m_gamma; + } + this.m_bias = C * h * k * this.m_gamma; + this.m_springMass = invMass + this.m_gamma; + if (this.m_springMass > 0) { + this.m_springMass = 1 / this.m_springMass; + } + } + } else { + this.m_springImpulse = 0; + } + if (this.m_enableMotor) { + this.m_motorMass = iA + iB; + if (this.m_motorMass > 0) { + this.m_motorMass = 1 / this.m_motorMass; + } + } else { + this.m_motorMass = 0; + this.m_motorImpulse = 0; + } + if (step.warmStarting) { + this.m_impulse *= step.dtRatio; + this.m_springImpulse *= step.dtRatio; + this.m_motorImpulse *= step.dtRatio; + var P3 = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax); + var LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse; + var LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse; + vA2.subMul(this.m_invMassA, P3); + wA -= this.m_invIA * LA; + vB2.addMul(this.m_invMassB, P3); + wB += this.m_invIB * LB; + } else { + this.m_impulse = 0; + this.m_springImpulse = 0; + this.m_motorImpulse = 0; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + WheelJoint2.prototype.solveVelocityConstraints = function(step) { + var mA = this.m_invMassA; + var mB = this.m_invMassB; + var iA = this.m_invIA; + var iB = this.m_invIB; + var vA2 = this.m_bodyA.c_velocity.v; + var wA = this.m_bodyA.c_velocity.w; + var vB2 = this.m_bodyB.c_velocity.v; + var wB = this.m_bodyB.c_velocity.w; + { + var Cdot = Vec2.dot(this.m_ax, vB2) - Vec2.dot(this.m_ax, vA2) + this.m_sBx * wB - this.m_sAx * wA; + var impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse); + this.m_springImpulse += impulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_ax); + var LA = impulse * this.m_sAx; + var LB = impulse * this.m_sBx; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + { + var Cdot = wB - wA - this.m_motorSpeed; + var impulse = -this.m_motorMass * Cdot; + var oldImpulse = this.m_motorImpulse; + var maxImpulse = step.dt * this.m_maxMotorTorque; + this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + { + var Cdot = Vec2.dot(this.m_ay, vB2) - Vec2.dot(this.m_ay, vA2) + this.m_sBy * wB - this.m_sAy * wA; + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + var P3 = Vec2.mulNumVec2(impulse, this.m_ay); + var LA = impulse * this.m_sAy; + var LB = impulse * this.m_sBy; + vA2.subMul(mA, P3); + wA -= iA * LA; + vB2.addMul(mB, P3); + wB += iB * LB; + } + this.m_bodyA.c_velocity.v.setVec2(vA2); + this.m_bodyA.c_velocity.w = wA; + this.m_bodyB.c_velocity.v.setVec2(vB2); + this.m_bodyB.c_velocity.w = wB; + }; + WheelJoint2.prototype.solvePositionConstraints = function(step) { + var cA2 = this.m_bodyA.c_position.c; + var aA = this.m_bodyA.c_position.a; + var cB2 = this.m_bodyB.c_position.c; + var aB = this.m_bodyB.c_position.a; + var qA = Rot.neo(aA); + var qB = Rot.neo(aB); + var rA2 = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA)); + var rB2 = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB)); + var d2 = Vec2.zero(); + d2.addCombine(1, cB2, 1, rB2); + d2.subCombine(1, cA2, 1, rA2); + var ay = Rot.mulVec2(qA, this.m_localYAxisA); + var sAy = Vec2.crossVec2Vec2(Vec2.add(d2, rA2), ay); + var sBy = Vec2.crossVec2Vec2(rB2, ay); + var C = Vec2.dot(d2, ay); + 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; + var impulse = k != 0 ? -C / k : 0; + var P3 = Vec2.mulNumVec2(impulse, ay); + var LA = impulse * sAy; + var LB = impulse * sBy; + cA2.subMul(this.m_invMassA, P3); + aA -= this.m_invIA * LA; + cB2.addMul(this.m_invMassB, P3); + aB += this.m_invIB * LB; + this.m_bodyA.c_position.c.setVec2(cA2); + this.m_bodyA.c_position.a = aA; + this.m_bodyB.c_position.c.setVec2(cB2); + this.m_bodyB.c_position.a = aB; + return math_abs(C) <= SettingsInternal.linearSlop; + }; + WheelJoint2.TYPE = "wheel-joint"; + return WheelJoint2; + }(Joint) +); var _a; var SID = 0; -// Classes to be serialized as reference objects var SERIALIZE_REF_TYPES = { - "World": World, - "Body": Body, - "Joint": Joint, - "Fixture": Fixture, - "Shape": Shape, + "World": World, + "Body": Body, + "Joint": Joint, + "Fixture": Fixture, + "Shape": Shape }; -// For deserializing reference objects by reference type var DESERIALIZE_BY_REF_TYPE = { - "Vec2": Vec2, - "Vec3": Vec3, - "World": World, - "Body": Body, - "Joint": Joint, - "Fixture": Fixture, - "Shape": Shape, + "Vec2": Vec2, + "Vec3": Vec3, + "World": World, + "Body": Body, + "Joint": Joint, + "Fixture": Fixture, + "Shape": Shape }; -// For deserializing data objects by type field -var DESERIALIZE_BY_TYPE_FIELD = (_a = {}, - _a[Body.STATIC] = Body, - _a[Body.DYNAMIC] = Body, - _a[Body.KINEMATIC] = Body, - _a[ChainShape.TYPE] = ChainShape, - // [BoxShape.TYPE]: BoxShape, - _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); +var DESERIALIZE_BY_TYPE_FIELD = (_a = {}, _a[Body.STATIC] = Body, _a[Body.DYNAMIC] = Body, _a[Body.KINEMATIC] = Body, _a[ChainShape.TYPE] = ChainShape, // [BoxShape.TYPE]: BoxShape, +_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); var DEFAULT_OPTIONS = { - rootClass: World, - preSerialize: function (obj) { return obj; }, - postSerialize: function (data, obj) { return data; }, - preDeserialize: function (data) { return data; }, - postDeserialize: function (obj, data) { return obj; }, + rootClass: World, + preSerialize: function(obj) { + return obj; + }, + postSerialize: function(data, obj) { + return data; + }, + preDeserialize: function(data) { + return data; + }, + postDeserialize: function(obj, data) { + return obj; + } }; -var Serializer = /** @class */ (function () { - function Serializer(options) { - var _this = this; - this.toJson = function (root) { - var preSerialize = _this.options.preSerialize; - var postSerialize = _this.options.postSerialize; - var json = []; - // Breadth-first ref serialization queue - var refQueue = [root]; - var refMemoById = {}; - function addToRefQueue(value, typeName) { - value.__sid = value.__sid || ++SID; - if (!refMemoById[value.__sid]) { - refQueue.push(value); - var index = json.length + refQueue.length; - var ref = { - refIndex: index, - refType: typeName - }; - refMemoById[value.__sid] = ref; - } - return refMemoById[value.__sid]; - } - function serializeWithHooks(obj) { - obj = preSerialize(obj); - var data = obj._serialize(); - data = postSerialize(data, obj); - return data; - } - // traverse the object graph - // ref objects are pushed into the queue - // other objects are serialize in-place - function traverse(value, noRefType) { - if (noRefType === void 0) { noRefType = false; } - if (typeof value !== "object" || value === null) { - return value; - } - // object with _serialize function - if (typeof value._serialize === "function") { - if (!noRefType) { - for (var typeName in SERIALIZE_REF_TYPES) { - if (value instanceof SERIALIZE_REF_TYPES[typeName]) { - return addToRefQueue(value, typeName); - } - } - } - // object with _serialize function - value = serializeWithHooks(value); - } - // recursive for arrays any objects - if (Array.isArray(value)) { - var newValue = []; - for (var key = 0; key < value.length; key++) { - newValue[key] = traverse(value[key]); - } - value = newValue; - } - else { - var newValue = {}; - for (var key in value) { - if (value.hasOwnProperty(key)) { - newValue[key] = traverse(value[key]); - } - } - value = newValue; - } - return value; - } - while (refQueue.length) { - var obj = refQueue.shift(); - var str = traverse(obj, true); - json.push(str); - } - return json; - }; - this.fromJson = function (json) { - var preDeserialize = _this.options.preDeserialize; - var postDeserialize = _this.options.postDeserialize; - var rootClass = _this.options.rootClass; - var deserializedRefMemoByIndex = {}; - function deserializeWithHooks(classHint, data, context) { - if (!classHint || !classHint._deserialize) { - classHint = DESERIALIZE_BY_TYPE_FIELD[data.type]; - } - var deserializer = classHint && classHint._deserialize; - if (!deserializer) { - return; - } - data = preDeserialize(data); - var classDeserializeFn = classHint._deserialize; - var obj = classDeserializeFn(data, context, deserializeChild); - obj = postDeserialize(obj, data); - return obj; - } - /** - * Recursive callback function to deserialize a child data object or reference object. - * - * @param classHint suggested class to deserialize obj to - * @param dataOrRef data or reference object - * @param context for example world when deserializing bodies and joints - */ - function deserializeChild(classHint, dataOrRef, context) { - var isRefObject = dataOrRef.refIndex && dataOrRef.refType; - if (!isRefObject) { - return deserializeWithHooks(classHint, dataOrRef, context); - } - var ref = dataOrRef; - if (DESERIALIZE_BY_REF_TYPE[ref.refType]) { - classHint = DESERIALIZE_BY_REF_TYPE[ref.refType]; - } - var refIndex = ref.refIndex; - if (!deserializedRefMemoByIndex[refIndex]) { - var data = json[refIndex]; - var obj = deserializeWithHooks(classHint, data, context); - deserializedRefMemoByIndex[refIndex] = obj; +var Serializer = ( + /** @class */ + /* @__PURE__ */ function() { + function Serializer2(options2) { + var _this = this; + this.toJson = function(root) { + var preSerialize = _this.options.preSerialize; + var postSerialize = _this.options.postSerialize; + var json = []; + var refQueue = [root]; + var refMemoById = {}; + function addToRefQueue(value, typeName) { + value.__sid = value.__sid || ++SID; + if (!refMemoById[value.__sid]) { + refQueue.push(value); + var index = json.length + refQueue.length; + var ref = { + refIndex: index, + refType: typeName + }; + refMemoById[value.__sid] = ref; + } + return refMemoById[value.__sid]; + } + function serializeWithHooks(obj2) { + obj2 = preSerialize(obj2); + var data = obj2._serialize(); + data = postSerialize(data, obj2); + return data; + } + function traverse(value, noRefType) { + if (noRefType === void 0) { + noRefType = false; + } + if (typeof value !== "object" || value === null) { + return value; + } + if (typeof value._serialize === "function") { + if (!noRefType) { + for (var typeName in SERIALIZE_REF_TYPES) { + if (value instanceof SERIALIZE_REF_TYPES[typeName]) { + return addToRefQueue(value, typeName); } - return deserializedRefMemoByIndex[refIndex]; - } - var root = deserializeWithHooks(rootClass, json[0], null); - return root; - }; - this.options = __assign(__assign({}, DEFAULT_OPTIONS), options); - } - return Serializer; -}()); -var worldSerializer = new Serializer({ - rootClass: World, -}); -Serializer.fromJson = worldSerializer.fromJson; -Serializer.toJson = worldSerializer.toJson; - -var Testbed = /** @class */ (function () { - function Testbed() { - /** World viewbox width. */ - this.width = 80; - /** World viewbox height. */ - this.height = 60; - /** World viewbox center vertical offset. */ - this.x = 0; - /** World viewbox center horizontal offset. */ - this.y = -10; - /** @hidden */ - this.scaleY = -1; - /** World simulation step frequency */ - this.hz = 60; - /** World simulation speed, default is 1 */ - this.speed = 1; - this.background = "#222222"; - this.activeKeys = {}; - /** callback, to be implemented by user */ - this.step = function (dt, t) { - return; - }; - /** callback, to be implemented by user */ - this.keydown = function (keyCode, label) { - return; - }; - /** callback, to be implemented by user */ - this.keyup = function (keyCode, label) { - return; - }; - } - /** - * Mounts testbed. Call start with a world to start simulation and rendering. - */ - Testbed.mount = function (options) { - throw new Error("Not implemented"); - }; - /** - * Mounts testbed if needed, then starts simulation and rendering. - * - * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`. - */ - Testbed.start = function (world) { - var testbed = Testbed.mount(); - testbed.start(world); - return testbed; - }; - Testbed.prototype.color = function (r, g, b) { - r = r * 256 | 0; - g = g * 256 | 0; - b = b * 256 | 0; - return "rgb(" + r + ", " + g + ", " + b + ")"; - }; - return Testbed; -}()); -/** @internal */ -function testbed(a, b) { - var callback; - var options; - if (typeof a === "function") { - callback = a; - options = b; - } - else if (typeof b === "function") { - callback = b; - options = a; - } - else { - options = a !== null && a !== void 0 ? a : b; - } - var testbed = Testbed.mount(options); - if (callback) { - // this is for backwards compatibility - var world = callback(testbed) || testbed.world; - testbed.start(world); - } - else { - return testbed; - } -} - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** - * A rectangle polygon which extend PolygonShape. - */ -var BoxShape = /** @class */ (function (_super) { - __extends(BoxShape, _super); - /** - * - * @param halfWidth - * @param halfHeight - * @param center coordinate of the center of the box relative to the body - * @param angle angle of the box relative to the body - */ - function BoxShape(halfWidth, halfHeight, center, angle) { - var _this = this; - // @ts-ignore - if (!(_this instanceof BoxShape)) { - return new BoxShape(halfWidth, halfHeight, center, angle); - } - _this = _super.call(this) || this; - _this._setAsBox(halfWidth, halfHeight, center, angle); - return _this; - } - // note that box is serialized/deserialized as polygon - BoxShape.TYPE = "polygon"; - return BoxShape; -}(PolygonShape)); -var Box = BoxShape; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ + } + } + value = serializeWithHooks(value); + } + if (Array.isArray(value)) { + var newValue = []; + for (var key = 0; key < value.length; key++) { + newValue[key] = traverse(value[key]); + } + value = newValue; + } else { + var newValue = {}; + for (var key in value) { + if (value.hasOwnProperty(key)) { + newValue[key] = traverse(value[key]); + } + } + value = newValue; + } + return value; + } + while (refQueue.length) { + var obj = refQueue.shift(); + var str = traverse(obj, true); + json.push(str); + } + return json; + }; + this.fromJson = function(json) { + var preDeserialize = _this.options.preDeserialize; + var postDeserialize = _this.options.postDeserialize; + var rootClass = _this.options.rootClass; + var deserializedRefMemoByIndex = {}; + function deserializeWithHooks(classHint, data, context) { + if (!classHint || !classHint._deserialize) { + classHint = DESERIALIZE_BY_TYPE_FIELD[data.type]; + } + var deserializer = classHint && classHint._deserialize; + if (!deserializer) { + return; + } + data = preDeserialize(data); + var classDeserializeFn = classHint._deserialize; + var obj = classDeserializeFn(data, context, deserializeChild); + obj = postDeserialize(obj, data); + return obj; + } + function deserializeChild(classHint, dataOrRef, context) { + var isRefObject = dataOrRef.refIndex && dataOrRef.refType; + if (!isRefObject) { + return deserializeWithHooks(classHint, dataOrRef, context); + } + var ref = dataOrRef; + if (DESERIALIZE_BY_REF_TYPE[ref.refType]) { + classHint = DESERIALIZE_BY_REF_TYPE[ref.refType]; + } + var refIndex = ref.refIndex; + if (!deserializedRefMemoByIndex[refIndex]) { + var data = json[refIndex]; + var obj = deserializeWithHooks(classHint, data, context); + deserializedRefMemoByIndex[refIndex] = obj; + } + return deserializedRefMemoByIndex[refIndex]; + } + var root = deserializeWithHooks(rootClass, json[0], null); + return root; + }; + this.options = __assign(__assign({}, DEFAULT_OPTIONS), options2); + } + return Serializer2; + }() +); +var worldSerializer = new Serializer({ + rootClass: World +}); +Serializer.fromJson = worldSerializer.fromJson; +Serializer.toJson = worldSerializer.toJson; +var Testbed = ( + /** @class */ + function() { + function Testbed2() { + this.width = 80; + this.height = 60; + this.x = 0; + this.y = -10; + this.scaleY = -1; + this.hz = 60; + this.speed = 1; + this.background = "#222222"; + this.activeKeys = {}; + this.step = function(dt, t) { + return; + }; + this.keydown = function(keyCode, label) { + return; + }; + this.keyup = function(keyCode, label) { + return; + }; + } + Testbed2.mount = function(options2) { + throw new Error("Not implemented"); + }; + Testbed2.start = function(world) { + var testbed2 = Testbed2.mount(); + testbed2.start(world); + return testbed2; + }; + Testbed2.prototype.color = function(r, g, b2) { + r = r * 256 | 0; + g = g * 256 | 0; + b2 = b2 * 256 | 0; + return "rgb(" + r + ", " + g + ", " + b2 + ")"; + }; + return Testbed2; + }() +); +function testbed(a2, b2) { + var callback; + var options2; + if (typeof a2 === "function") { + callback = a2; + options2 = b2; + } else if (typeof b2 === "function") { + callback = b2; + options2 = a2; + } else { + options2 = a2 !== null && a2 !== void 0 ? a2 : b2; + } + var testbed2 = Testbed.mount(options2); + if (callback) { + var world = callback(testbed2) || testbed2.world; + testbed2.start(world); + } else { + return testbed2; + } +} +var BoxShape = ( + /** @class */ + function(_super) { + __extends(BoxShape2, _super); + function BoxShape2(halfWidth, halfHeight, center2, angle) { + var _this = this; + if (!(_this instanceof BoxShape2)) { + return new BoxShape2(halfWidth, halfHeight, center2, angle); + } + _this = _super.call(this) || this; + _this._setAsBox(halfWidth, halfHeight, center2, angle); + return _this; + } + BoxShape2.TYPE = "polygon"; + return BoxShape2; + }(PolygonShape) +); +var Box = BoxShape; Contact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact); -/** @internal */ function CircleCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - CollideCircles(manifold, fixtureA.getShape(), xfA, fixtureB.getShape(), xfB); +function CircleCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + CollideCircles(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2); } -/** @internal */ var pA = vec2(0, 0); -/** @internal */ var pB = vec2(0, 0); -var CollideCircles = function (manifold, circleA, xfA, circleB, xfB) { - manifold.pointCount = 0; - transformVec2(pA, xfA, circleA.m_p); - transformVec2(pB, xfB, circleB.m_p); - var distSqr = distSqrVec2(pB, pA); - var rA = circleA.m_radius; - var rB = circleB.m_radius; - var radius = rA + rB; - if (distSqr > radius * radius) { - return; - } - manifold.type = ManifoldType.e_circles; - copyVec2(manifold.localPoint, circleA.m_p); - zeroVec2(manifold.localNormal); - manifold.pointCount = 1; - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); +var pA = vec2(0, 0); +var pB = vec2(0, 0); +var CollideCircles = function(manifold, circleA, xfA2, circleB, xfB2) { + manifold.pointCount = 0; + transformVec2(pA, xfA2, circleA.m_p); + transformVec2(pB, xfB2, circleB.m_p); + var distSqr = distSqrVec2(pB, pA); + var rA2 = circleA.m_radius; + var rB2 = circleB.m_radius; + var radius = rA2 + rB2; + if (distSqr > radius * radius) { + return; + } + manifold.type = ManifoldType.e_circles; + copyVec2(manifold.localPoint, circleA.m_p); + zeroVec2(manifold.localNormal); + manifold.pointCount = 1; + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); }; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ Contact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact); Contact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact); -/** @internal */ function EdgeCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - var shapeA = fixtureA.getShape(); - var shapeB = fixtureB.getShape(); - CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB); +function EdgeCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + var shapeA = fixtureA.getShape(); + var shapeB = fixtureB.getShape(); + CollideEdgeCircle(manifold, shapeA, xfA2, shapeB, xfB2); } -function ChainCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - var chain = fixtureA.getShape(); - var edge = new EdgeShape(); - chain.getChildEdge(edge, indexA); - var shapeA = edge; - var shapeB = fixtureB.getShape(); - CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB); +function ChainCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + var chain = fixtureA.getShape(); + var edge = new EdgeShape(); + chain.getChildEdge(edge, indexA); + var shapeA = edge; + var shapeB = fixtureB.getShape(); + CollideEdgeCircle(manifold, shapeA, xfA2, shapeB, xfB2); } -/** @internal */ var e = vec2(0, 0); -/** @internal */ var e1 = vec2(0, 0); -/** @internal */ var e2 = vec2(0, 0); -/** @internal */ var Q = vec2(0, 0); -/** @internal */ var P = vec2(0, 0); -/** @internal */ var n$2 = vec2(0, 0); -// Compute contact points for edge versus circle. -// This accounts for edge connectivity. -var CollideEdgeCircle = function (manifold, edgeA, xfA, circleB, xfB) { - manifold.pointCount = 0; - // Compute circle in frame of edge - retransformVec2(Q, xfB, xfA, circleB.m_p); - var A = edgeA.m_vertex1; - var B = edgeA.m_vertex2; - subVec2(e, B, A); - // Barycentric coordinates - var u = dotVec2(e, B) - dotVec2(e, Q); - var v = dotVec2(e, Q) - dotVec2(e, A); - var radius = edgeA.m_radius + circleB.m_radius; - // Region A - if (v <= 0.0) { - copyVec2(P, A); - var dd_1 = distSqrVec2(Q, A); - if (dd_1 > radius * radius) { - return; - } - // Is there an edge connected to A? - if (edgeA.m_hasVertex0) { - var A1 = edgeA.m_vertex0; - var B1 = A; - subVec2(e1, B1, A1); - var u1 = dotVec2(e1, B1) - dotVec2(e1, Q); - // Is the circle in Region AB of the previous edge? - if (u1 > 0.0) { - return; - } - } - manifold.type = ManifoldType.e_circles; - zeroVec2(manifold.localNormal); - copyVec2(manifold.localPoint, P); - manifold.pointCount = 1; - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); - return; - } - // Region B - if (u <= 0.0) { - copyVec2(P, B); - var dd_2 = distSqrVec2(Q, P); - if (dd_2 > radius * radius) { - return; - } - // Is there an edge connected to B? - if (edgeA.m_hasVertex3) { - var B2 = edgeA.m_vertex3; - var A2 = B; - subVec2(e2, B2, A2); - var v2 = dotVec2(e2, Q) - dotVec2(e2, A2); - // Is the circle in Region AB of the next edge? - if (v2 > 0.0) { - return; - } - } - manifold.type = ManifoldType.e_circles; - zeroVec2(manifold.localNormal); - copyVec2(manifold.localPoint, P); - manifold.pointCount = 1; - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); +var e = vec2(0, 0); +var e1 = vec2(0, 0); +var e2 = vec2(0, 0); +var Q = vec2(0, 0); +var P = vec2(0, 0); +var n$2 = vec2(0, 0); +var CollideEdgeCircle = function(manifold, edgeA, xfA2, circleB, xfB2) { + manifold.pointCount = 0; + retransformVec2(Q, xfB2, xfA2, circleB.m_p); + var A = edgeA.m_vertex1; + var B = edgeA.m_vertex2; + subVec2(e, B, A); + var u = dotVec2(e, B) - dotVec2(e, Q); + var v3 = dotVec2(e, Q) - dotVec2(e, A); + var radius = edgeA.m_radius + circleB.m_radius; + if (v3 <= 0) { + copyVec2(P, A); + var dd_1 = distSqrVec2(Q, A); + if (dd_1 > radius * radius) { + return; + } + if (edgeA.m_hasVertex0) { + var A1 = edgeA.m_vertex0; + var B1 = A; + subVec2(e1, B1, A1); + var u1 = dotVec2(e1, B1) - dotVec2(e1, Q); + if (u1 > 0) { return; + } } - // Region AB - var den = lengthSqrVec2(e); - combine2Vec2(P, u / den, A, v / den, B); - var dd = distSqrVec2(Q, P); - if (dd > radius * radius) { + manifold.type = ManifoldType.e_circles; + zeroVec2(manifold.localNormal); + copyVec2(manifold.localPoint, P); + manifold.pointCount = 1; + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + return; + } + if (u <= 0) { + copyVec2(P, B); + var dd_2 = distSqrVec2(Q, P); + if (dd_2 > radius * radius) { + return; + } + if (edgeA.m_hasVertex3) { + var B2 = edgeA.m_vertex3; + var A2 = B; + subVec2(e2, B2, A2); + var v22 = dotVec2(e2, Q) - dotVec2(e2, A2); + if (v22 > 0) { return; + } } - crossNumVec2(n$2, 1, e); - if (dotVec2(n$2, Q) - dotVec2(n$2, A) < 0.0) { - negVec2(n$2); - } - normalizeVec2(n$2); - manifold.type = ManifoldType.e_faceA; - copyVec2(manifold.localNormal, n$2); - copyVec2(manifold.localPoint, A); + manifold.type = ManifoldType.e_circles; + zeroVec2(manifold.localNormal); + copyVec2(manifold.localPoint, P); manifold.pointCount = 1; copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex); + manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + return; + } + var den = lengthSqrVec2(e); + combine2Vec2(P, u / den, A, v3 / den, B); + var dd = distSqrVec2(Q, P); + if (dd > radius * radius) { + return; + } + crossNumVec2(n$2, 1, e); + if (dotVec2(n$2, Q) - dotVec2(n$2, A) < 0) { + negVec2(n$2); + } + normalizeVec2(n$2); + manifold.type = ManifoldType.e_faceA; + copyVec2(manifold.localNormal, n$2); + copyVec2(manifold.localPoint, A); + manifold.pointCount = 1; + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex); }; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var incidentEdge = [new ClipVertex(), new ClipVertex()]; -/** @internal */ var clipPoints1$1 = [new ClipVertex(), new ClipVertex()]; -/** @internal */ var clipPoints2$1 = [new ClipVertex(), new ClipVertex()]; -/** @internal */ var clipSegmentToLineNormal = vec2(0, 0); -/** @internal */ var v1 = vec2(0, 0); -/** @internal */ var n$1 = vec2(0, 0); -/** @internal */ var xf$1 = transform(0, 0, 0); -/** @internal */ var v11 = vec2(0, 0); -/** @internal */ var v12 = vec2(0, 0); -/** @internal */ var localTangent = vec2(0, 0); -/** @internal */ var localNormal = vec2(0, 0); -/** @internal */ var planePoint = vec2(0, 0); -/** @internal */ var tangent = vec2(0, 0); -/** @internal */ var normal$1 = vec2(0, 0); -/** @internal */ var normal1$1 = vec2(0, 0); +var incidentEdge = [new ClipVertex(), new ClipVertex()]; +var clipPoints1$1 = [new ClipVertex(), new ClipVertex()]; +var clipPoints2$1 = [new ClipVertex(), new ClipVertex()]; +var clipSegmentToLineNormal = vec2(0, 0); +var v1 = vec2(0, 0); +var n$1 = vec2(0, 0); +var xf$1 = transform(0, 0, 0); +var v11 = vec2(0, 0); +var v12 = vec2(0, 0); +var localTangent = vec2(0, 0); +var localNormal = vec2(0, 0); +var planePoint = vec2(0, 0); +var tangent = vec2(0, 0); +var normal$1 = vec2(0, 0); +var normal1$1 = vec2(0, 0); Contact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact); -/** @internal */ function PolygonContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - CollidePolygons(manifold, fixtureA.getShape(), xfA, fixtureB.getShape(), xfB); +function PolygonContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + CollidePolygons(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2); } -/** - * Find the max separation between poly1 and poly2 using edge normals from - * poly1. - */ -/** @internal */ function findMaxSeparation(poly1, xf1, poly2, xf2, output) { - var count1 = poly1.m_count; - var count2 = poly2.m_count; - var n1s = poly1.m_normals; - var v1s = poly1.m_vertices; - var v2s = poly2.m_vertices; - detransformTransform(xf$1, xf2, xf1); - var bestIndex = 0; - var maxSeparation = -Infinity; - for (var i = 0; i < count1; ++i) { - // Get poly1 normal in frame2. - rotVec2(n$1, xf$1.q, n1s[i]); - transformVec2(v1, xf$1, v1s[i]); - // Find deepest point for normal i. - var si = Infinity; - for (var j = 0; j < count2; ++j) { - var sij = dotVec2(n$1, v2s[j]) - dotVec2(n$1, v1); - if (sij < si) { - si = sij; - } - } - if (si > maxSeparation) { - maxSeparation = si; - bestIndex = i; - } - } - // used to keep last FindMaxSeparation call values - output.maxSeparation = maxSeparation; - output.bestIndex = bestIndex; +function findMaxSeparation(poly1, xf1, poly2, xf2, output2) { + var count1 = poly1.m_count; + var count2 = poly2.m_count; + var n1s = poly1.m_normals; + var v1s = poly1.m_vertices; + var v2s = poly2.m_vertices; + detransformTransform(xf$1, xf2, xf1); + var bestIndex = 0; + var maxSeparation2 = -Infinity; + for (var i = 0; i < count1; ++i) { + rotVec2(n$1, xf$1.q, n1s[i]); + transformVec2(v1, xf$1, v1s[i]); + var si = Infinity; + for (var j = 0; j < count2; ++j) { + var sij = dotVec2(n$1, v2s[j]) - dotVec2(n$1, v1); + if (sij < si) { + si = sij; + } + } + if (si > maxSeparation2) { + maxSeparation2 = si; + bestIndex = i; + } + } + output2.maxSeparation = maxSeparation2; + output2.bestIndex = bestIndex; } -/** @internal */ function findIncidentEdge(clipVertex, poly1, xf1, edge1, poly2, xf2) { - var normals1 = poly1.m_normals; - var count2 = poly2.m_count; - var vertices2 = poly2.m_vertices; - var normals2 = poly2.m_normals; - // Get the normal of the reference edge in poly2's frame. - rerotVec2(normal1$1, xf2.q, xf1.q, normals1[edge1]); - // Find the incident edge on poly2. - var index = 0; - var minDot = Infinity; - for (var i = 0; i < count2; ++i) { - var dot = dotVec2(normal1$1, normals2[i]); - if (dot < minDot) { - minDot = dot; - index = i; - } - } - // Build the clip vertices for the incident edge. - var i1 = index; - var i2 = i1 + 1 < count2 ? i1 + 1 : 0; - transformVec2(clipVertex[0].v, xf2, vertices2[i1]); - clipVertex[0].id.setFeatures(edge1, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex); - transformVec2(clipVertex[1].v, xf2, vertices2[i2]); - clipVertex[1].id.setFeatures(edge1, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex); +function findIncidentEdge(clipVertex, poly1, xf1, edge12, poly2, xf2) { + var normals1 = poly1.m_normals; + var count2 = poly2.m_count; + var vertices2 = poly2.m_vertices; + var normals2 = poly2.m_normals; + rerotVec2(normal1$1, xf2.q, xf1.q, normals1[edge12]); + var index = 0; + var minDot = Infinity; + for (var i = 0; i < count2; ++i) { + var dot = dotVec2(normal1$1, normals2[i]); + if (dot < minDot) { + minDot = dot; + index = i; + } + } + var i1 = index; + var i2 = i1 + 1 < count2 ? i1 + 1 : 0; + transformVec2(clipVertex[0].v, xf2, vertices2[i1]); + clipVertex[0].id.setFeatures(edge12, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex); + transformVec2(clipVertex[1].v, xf2, vertices2[i2]); + clipVertex[1].id.setFeatures(edge12, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex); } -/** @internal */ var maxSeparation = { - maxSeparation: 0, - bestIndex: 0, +var maxSeparation = { + maxSeparation: 0, + bestIndex: 0 }; -/** - * - * Find edge normal of max separation on A - return if separating axis is found
- * Find edge normal of max separation on B - return if separation axis is found
- * Choose reference edge as min(minA, minB)
- * Find incident edge
- * Clip - * - * The normal points from 1 to 2 - */ -var CollidePolygons = function (manifold, polyA, xfA, polyB, xfB) { - manifold.pointCount = 0; - var totalRadius = polyA.m_radius + polyB.m_radius; - findMaxSeparation(polyA, xfA, polyB, xfB, maxSeparation); - var edgeA = maxSeparation.bestIndex; - var separationA = maxSeparation.maxSeparation; - if (separationA > totalRadius) - return; - findMaxSeparation(polyB, xfB, polyA, xfA, maxSeparation); - var edgeB = maxSeparation.bestIndex; - var separationB = maxSeparation.maxSeparation; - if (separationB > totalRadius) - return; - var poly1; // reference polygon - var poly2; // incident polygon - var xf1; - var xf2; - var edge1; // reference edge - var flip; - var k_tol = 0.1 * SettingsInternal.linearSlop; - if (separationB > separationA + k_tol) { - poly1 = polyB; - poly2 = polyA; - xf1 = xfB; - xf2 = xfA; - edge1 = edgeB; - manifold.type = ManifoldType.e_faceB; - flip = true; - } - else { - poly1 = polyA; - poly2 = polyB; - xf1 = xfA; - xf2 = xfB; - edge1 = edgeA; - manifold.type = ManifoldType.e_faceA; - flip = false; - } - incidentEdge[0].recycle(), incidentEdge[1].recycle(); - findIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2); - var count1 = poly1.m_count; - var vertices1 = poly1.m_vertices; - var iv1 = edge1; - var iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0; - copyVec2(v11, vertices1[iv1]); - copyVec2(v12, vertices1[iv2]); - subVec2(localTangent, v12, v11); - normalizeVec2(localTangent); - crossVec2Num(localNormal, localTangent, 1.0); - combine2Vec2(planePoint, 0.5, v11, 0.5, v12); - rotVec2(tangent, xf1.q, localTangent); - crossVec2Num(normal$1, tangent, 1.0); - transformVec2(v11, xf1, v11); - transformVec2(v12, xf1, v12); - // Face offset. - var frontOffset = dotVec2(normal$1, v11); - // Side offsets, extended by polytope skin thickness. - var sideOffset1 = -dotVec2(tangent, v11) + totalRadius; - var sideOffset2 = dotVec2(tangent, v12) + totalRadius; - // Clip incident edge against extruded edge1 side edges. - clipPoints1$1[0].recycle(), clipPoints1$1[1].recycle(); - clipPoints2$1[0].recycle(), clipPoints2$1[1].recycle(); - // Clip to box side 1 - setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y); - var np1 = clipSegmentToLine(clipPoints1$1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1); - if (np1 < 2) { - return; - } - // Clip to negative box side 1 - setVec2(clipSegmentToLineNormal, tangent.x, tangent.y); - var np2 = clipSegmentToLine(clipPoints2$1, clipPoints1$1, clipSegmentToLineNormal, sideOffset2, iv2); - if (np2 < 2) { - return; - } - // Now clipPoints2 contains the clipped points. - copyVec2(manifold.localNormal, localNormal); - copyVec2(manifold.localPoint, planePoint); - var pointCount = 0; - for (var i = 0; i < clipPoints2$1.length /* maxManifoldPoints */; ++i) { - var separation = dotVec2(normal$1, clipPoints2$1[i].v) - frontOffset; - if (separation <= totalRadius) { - var cp = manifold.points[pointCount]; - detransformVec2(cp.localPoint, xf2, clipPoints2$1[i].v); - cp.id.set(clipPoints2$1[i].id); - if (flip) { - // Swap features - cp.id.swapFeatures(); - } - ++pointCount; - } - } - manifold.pointCount = pointCount; +var CollidePolygons = function(manifold, polyA, xfA2, polyB, xfB2) { + manifold.pointCount = 0; + var totalRadius = polyA.m_radius + polyB.m_radius; + findMaxSeparation(polyA, xfA2, polyB, xfB2, maxSeparation); + var edgeA = maxSeparation.bestIndex; + var separationA = maxSeparation.maxSeparation; + if (separationA > totalRadius) + return; + findMaxSeparation(polyB, xfB2, polyA, xfA2, maxSeparation); + var edgeB = maxSeparation.bestIndex; + var separationB = maxSeparation.maxSeparation; + if (separationB > totalRadius) + return; + var poly1; + var poly2; + var xf1; + var xf2; + var edge12; + var flip; + var k_tol = 0.1 * SettingsInternal.linearSlop; + if (separationB > separationA + k_tol) { + poly1 = polyB; + poly2 = polyA; + xf1 = xfB2; + xf2 = xfA2; + edge12 = edgeB; + manifold.type = ManifoldType.e_faceB; + flip = true; + } else { + poly1 = polyA; + poly2 = polyB; + xf1 = xfA2; + xf2 = xfB2; + edge12 = edgeA; + manifold.type = ManifoldType.e_faceA; + flip = false; + } + incidentEdge[0].recycle(), incidentEdge[1].recycle(); + findIncidentEdge(incidentEdge, poly1, xf1, edge12, poly2, xf2); + var count1 = poly1.m_count; + var vertices1 = poly1.m_vertices; + var iv1 = edge12; + var iv2 = edge12 + 1 < count1 ? edge12 + 1 : 0; + copyVec2(v11, vertices1[iv1]); + copyVec2(v12, vertices1[iv2]); + subVec2(localTangent, v12, v11); + normalizeVec2(localTangent); + crossVec2Num(localNormal, localTangent, 1); + combine2Vec2(planePoint, 0.5, v11, 0.5, v12); + rotVec2(tangent, xf1.q, localTangent); + crossVec2Num(normal$1, tangent, 1); + transformVec2(v11, xf1, v11); + transformVec2(v12, xf1, v12); + var frontOffset = dotVec2(normal$1, v11); + var sideOffset1 = -dotVec2(tangent, v11) + totalRadius; + var sideOffset2 = dotVec2(tangent, v12) + totalRadius; + clipPoints1$1[0].recycle(), clipPoints1$1[1].recycle(); + clipPoints2$1[0].recycle(), clipPoints2$1[1].recycle(); + setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y); + var np1 = clipSegmentToLine(clipPoints1$1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1); + if (np1 < 2) { + return; + } + setVec2(clipSegmentToLineNormal, tangent.x, tangent.y); + var np2 = clipSegmentToLine(clipPoints2$1, clipPoints1$1, clipSegmentToLineNormal, sideOffset2, iv2); + if (np2 < 2) { + return; + } + copyVec2(manifold.localNormal, localNormal); + copyVec2(manifold.localPoint, planePoint); + var pointCount = 0; + for (var i = 0; i < clipPoints2$1.length; ++i) { + var separation = dotVec2(normal$1, clipPoints2$1[i].v) - frontOffset; + if (separation <= totalRadius) { + var cp = manifold.points[pointCount]; + detransformVec2(cp.localPoint, xf2, clipPoints2$1[i].v); + cp.id.set(clipPoints2$1[i].id); + if (flip) { + cp.id.swapFeatures(); + } + ++pointCount; + } + } + manifold.pointCount = pointCount; }; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ Contact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact); -/** @internal */ function PolygonCircleContact(manifold, xfA, fixtureA, indexA, xfB, fixtureB, indexB) { - CollidePolygonCircle(manifold, fixtureA.getShape(), xfA, fixtureB.getShape(), xfB); +function PolygonCircleContact(manifold, xfA2, fixtureA, indexA, xfB2, fixtureB, indexB) { + CollidePolygonCircle(manifold, fixtureA.getShape(), xfA2, fixtureB.getShape(), xfB2); } -/** @internal */ var cLocal = vec2(0, 0); -/** @internal */ var faceCenter = vec2(0, 0); -var CollidePolygonCircle = function (manifold, polygonA, xfA, circleB, xfB) { - manifold.pointCount = 0; - // Compute circle position in the frame of the polygon. - retransformVec2(cLocal, xfB, xfA, circleB.m_p); - // Find the min separating edge. - var normalIndex = 0; - var separation = -Infinity; - var radius = polygonA.m_radius + circleB.m_radius; - var vertexCount = polygonA.m_count; - var vertices = polygonA.m_vertices; - var normals = polygonA.m_normals; - for (var i = 0; i < vertexCount; ++i) { - var s = dotVec2(normals[i], cLocal) - dotVec2(normals[i], vertices[i]); - if (s > radius) { - // Early out. - return; - } - if (s > separation) { - separation = s; - normalIndex = i; - } - } - // Vertices that subtend the incident face. - var vertIndex1 = normalIndex; - var vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0; - var v1 = vertices[vertIndex1]; - var v2 = vertices[vertIndex2]; - // If the center is inside the polygon ... - if (separation < EPSILON) { - manifold.pointCount = 1; - manifold.type = ManifoldType.e_faceA; - copyVec2(manifold.localNormal, normals[normalIndex]); - combine2Vec2(manifold.localPoint, 0.5, v1, 0.5, v2); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); - return; - } - // Compute barycentric coordinates - // u1 = (cLocal - v1) dot (v2 - v1)) - var u1 = dotVec2(cLocal, v2) - dotVec2(cLocal, v1) - dotVec2(v1, v2) + dotVec2(v1, v1); - // u2 = (cLocal - v2) dot (v1 - v2) - var u2 = dotVec2(cLocal, v1) - dotVec2(cLocal, v2) - dotVec2(v2, v1) + dotVec2(v2, v2); - if (u1 <= 0.0) { - if (distSqrVec2(cLocal, v1) > radius * radius) { - return; - } - manifold.pointCount = 1; - manifold.type = ManifoldType.e_faceA; - subVec2(manifold.localNormal, cLocal, v1); - normalizeVec2(manifold.localNormal); - copyVec2(manifold.localPoint, v1); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); +var cLocal = vec2(0, 0); +var faceCenter = vec2(0, 0); +var CollidePolygonCircle = function(manifold, polygonA, xfA2, circleB, xfB2) { + manifold.pointCount = 0; + retransformVec2(cLocal, xfB2, xfA2, circleB.m_p); + var normalIndex = 0; + var separation = -Infinity; + var radius = polygonA.m_radius + circleB.m_radius; + var vertexCount = polygonA.m_count; + var vertices = polygonA.m_vertices; + var normals = polygonA.m_normals; + for (var i = 0; i < vertexCount; ++i) { + var s2 = dotVec2(normals[i], cLocal) - dotVec2(normals[i], vertices[i]); + if (s2 > radius) { + return; + } + if (s2 > separation) { + separation = s2; + normalIndex = i; + } + } + var vertIndex1 = normalIndex; + var vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0; + var v13 = vertices[vertIndex1]; + var v22 = vertices[vertIndex2]; + if (separation < EPSILON) { + manifold.pointCount = 1; + manifold.type = ManifoldType.e_faceA; + copyVec2(manifold.localNormal, normals[normalIndex]); + combine2Vec2(manifold.localPoint, 0.5, v13, 0.5, v22); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + return; + } + var u1 = dotVec2(cLocal, v22) - dotVec2(cLocal, v13) - dotVec2(v13, v22) + dotVec2(v13, v13); + var u2 = dotVec2(cLocal, v13) - dotVec2(cLocal, v22) - dotVec2(v22, v13) + dotVec2(v22, v22); + if (u1 <= 0) { + if (distSqrVec2(cLocal, v13) > radius * radius) { + return; } - else if (u2 <= 0.0) { - if (distSqrVec2(cLocal, v2) > radius * radius) { - return; - } - manifold.pointCount = 1; - manifold.type = ManifoldType.e_faceA; - subVec2(manifold.localNormal, cLocal, v2); - normalizeVec2(manifold.localNormal); - copyVec2(manifold.localPoint, v2); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + manifold.pointCount = 1; + manifold.type = ManifoldType.e_faceA; + subVec2(manifold.localNormal, cLocal, v13); + normalizeVec2(manifold.localNormal); + copyVec2(manifold.localPoint, v13); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + } else if (u2 <= 0) { + if (distSqrVec2(cLocal, v22) > radius * radius) { + return; } - else { - combine2Vec2(faceCenter, 0.5, v1, 0.5, v2); - var separation_1 = dotVec2(cLocal, normals[vertIndex1]) - dotVec2(faceCenter, normals[vertIndex1]); - if (separation_1 > radius) { - return; - } - manifold.pointCount = 1; - manifold.type = ManifoldType.e_faceA; - copyVec2(manifold.localNormal, normals[vertIndex1]); - copyVec2(manifold.localPoint, faceCenter); - copyVec2(manifold.points[0].localPoint, circleB.m_p); - // manifold.points[0].id.key = 0; - manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + manifold.pointCount = 1; + manifold.type = ManifoldType.e_faceA; + subVec2(manifold.localNormal, cLocal, v22); + normalizeVec2(manifold.localNormal); + copyVec2(manifold.localPoint, v22); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + } else { + combine2Vec2(faceCenter, 0.5, v13, 0.5, v22); + var separation_1 = dotVec2(cLocal, normals[vertIndex1]) - dotVec2(faceCenter, normals[vertIndex1]); + if (separation_1 > radius) { + return; } + manifold.pointCount = 1; + manifold.type = ManifoldType.e_faceA; + copyVec2(manifold.localNormal, normals[vertIndex1]); + copyVec2(manifold.localPoint, faceCenter); + copyVec2(manifold.points[0].localPoint, circleB.m_p); + manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex); + } }; - -/* - * Planck.js - * The MIT License - * Copyright (c) 2021 Erin Catto, Ali Shakiba - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/** @internal */ var math_min = Math.min; +var math_min = Math.min; Contact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact); Contact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact); -/** @internal */ function EdgePolygonContact(manifold, xfA, fA, indexA, xfB, fB, indexB) { - CollideEdgePolygon(manifold, fA.getShape(), xfA, fB.getShape(), xfB); +function EdgePolygonContact(manifold, xfA2, fA, indexA, xfB2, fB, indexB) { + CollideEdgePolygon(manifold, fA.getShape(), xfA2, fB.getShape(), xfB2); } -// reused -/** @internal */ var edge_reuse = new EdgeShape(); -/** @internal */ function ChainPolygonContact(manifold, xfA, fA, indexA, xfB, fB, indexB) { - var chain = fA.getShape(); - chain.getChildEdge(edge_reuse, indexA); - CollideEdgePolygon(manifold, edge_reuse, xfA, fB.getShape(), xfB); +var edge_reuse = new EdgeShape(); +function ChainPolygonContact(manifold, xfA2, fA, indexA, xfB2, fB, indexB) { + var chain = fA.getShape(); + chain.getChildEdge(edge_reuse, indexA); + CollideEdgePolygon(manifold, edge_reuse, xfA2, fB.getShape(), xfB2); } -/** @internal */ var EPAxisType; -(function (EPAxisType) { - EPAxisType[EPAxisType["e_unknown"] = -1] = "e_unknown"; - EPAxisType[EPAxisType["e_edgeA"] = 1] = "e_edgeA"; - EPAxisType[EPAxisType["e_edgeB"] = 2] = "e_edgeB"; +var EPAxisType; +(function(EPAxisType2) { + EPAxisType2[EPAxisType2["e_unknown"] = -1] = "e_unknown"; + EPAxisType2[EPAxisType2["e_edgeA"] = 1] = "e_edgeA"; + EPAxisType2[EPAxisType2["e_edgeB"] = 2] = "e_edgeB"; })(EPAxisType || (EPAxisType = {})); -// unused? -/** @internal */ var VertexType; -(function (VertexType) { - VertexType[VertexType["e_isolated"] = 0] = "e_isolated"; - VertexType[VertexType["e_concave"] = 1] = "e_concave"; - VertexType[VertexType["e_convex"] = 2] = "e_convex"; +var VertexType; +(function(VertexType2) { + VertexType2[VertexType2["e_isolated"] = 0] = "e_isolated"; + VertexType2[VertexType2["e_concave"] = 1] = "e_concave"; + VertexType2[VertexType2["e_convex"] = 2] = "e_convex"; })(VertexType || (VertexType = {})); -/** - * This structure is used to keep track of the best separating axis. - */ -/** @internal */ var EPAxis = /** @class */ (function () { - function EPAxis() { - } - return EPAxis; -}()); -/** - * This holds polygon B expressed in frame A. - */ -/** @internal */ var TempPolygon = /** @class */ (function () { - function TempPolygon() { - this.vertices = []; // [Settings.maxPolygonVertices] - this.normals = []; // [Settings.maxPolygonVertices]; - this.count = 0; - for (var i = 0; i < SettingsInternal.maxPolygonVertices; i++) { - this.vertices.push(vec2(0, 0)); - this.normals.push(vec2(0, 0)); - } - } - return TempPolygon; -}()); -/** - * Reference face used for clipping - */ -/** @internal */ var ReferenceFace = /** @class */ (function () { - function ReferenceFace() { - this.v1 = vec2(0, 0); - this.v2 = vec2(0, 0); - this.normal = vec2(0, 0); - this.sideNormal1 = vec2(0, 0); - this.sideNormal2 = vec2(0, 0); - } - ReferenceFace.prototype.recycle = function () { - zeroVec2(this.v1); - zeroVec2(this.v2); - zeroVec2(this.normal); - zeroVec2(this.sideNormal1); - zeroVec2(this.sideNormal2); - }; - return ReferenceFace; -}()); -// reused -/** @internal */ var clipPoints1 = [new ClipVertex(), new ClipVertex()]; -/** @internal */ var clipPoints2 = [new ClipVertex(), new ClipVertex()]; -/** @internal */ var ie = [new ClipVertex(), new ClipVertex()]; -/** @internal */ var edgeAxis = new EPAxis(); -/** @internal */ var polygonAxis = new EPAxis(); -/** @internal */ var polygonBA = new TempPolygon(); -/** @internal */ var rf = new ReferenceFace(); -/** @internal */ var centroidB = vec2(0, 0); -/** @internal */ var edge0 = vec2(0, 0); -/** @internal */ var edge1 = vec2(0, 0); -/** @internal */ var edge2 = vec2(0, 0); -/** @internal */ var xf = transform(0, 0, 0); -/** @internal */ var normal = vec2(0, 0); -/** @internal */ var normal0 = vec2(0, 0); -/** @internal */ var normal1 = vec2(0, 0); -/** @internal */ var normal2 = vec2(0, 0); -/** @internal */ var lowerLimit = vec2(0, 0); -/** @internal */ var upperLimit = vec2(0, 0); -/** @internal */ var perp = vec2(0, 0); -/** @internal */ var n = vec2(0, 0); -/** - * This function collides and edge and a polygon, taking into account edge - * adjacency. - */ -var CollideEdgePolygon = function (manifold, edgeA, xfA, polygonB, xfB) { - // Algorithm: - // 1. Classify v1 and v2 - // 2. Classify polygon centroid as front or back - // 3. Flip normal if necessary - // 4. Initialize normal range to [-pi, pi] about face normal - // 5. Adjust normal range according to adjacent edges - // 6. Visit each separating axes, only accept axes within the range - // 7. Return if _any_ axis indicates separation - // 8. Clip - // let m_type1: VertexType; - // let m_type2: VertexType; - detransformTransform(xf, xfA, xfB); - transformVec2(centroidB, xf, polygonB.m_centroid); - var v0 = edgeA.m_vertex0; - var v1 = edgeA.m_vertex1; - var v2 = edgeA.m_vertex2; - var v3 = edgeA.m_vertex3; - var hasVertex0 = edgeA.m_hasVertex0; - var hasVertex3 = edgeA.m_hasVertex3; - subVec2(edge1, v2, v1); - normalizeVec2(edge1); - setVec2(normal1, edge1.y, -edge1.x); - var offset1 = dotVec2(normal1, centroidB) - dotVec2(normal1, v1); - var offset0 = 0.0; - var offset2 = 0.0; - var convex1 = false; - var convex2 = false; - zeroVec2(normal0); - zeroVec2(normal2); - // Is there a preceding edge? - if (hasVertex0) { - subVec2(edge0, v1, v0); - normalizeVec2(edge0); - setVec2(normal0, edge0.y, -edge0.x); - convex1 = crossVec2Vec2(edge0, edge1) >= 0.0; - offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0); - } - // Is there a following edge? - if (hasVertex3) { - subVec2(edge2, v3, v2); - normalizeVec2(edge2); - setVec2(normal2, edge2.y, -edge2.x); - convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0.0; - offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v2); - } - var front; - zeroVec2(normal); - zeroVec2(lowerLimit); - zeroVec2(upperLimit); - // Determine front or back collision. Determine collision normal limits. - if (hasVertex0 && hasVertex3) { - if (convex1 && convex2) { - front = offset0 >= 0.0 || offset1 >= 0.0 || offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal0); - copyVec2(upperLimit, normal2); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal1); - scaleVec2(upperLimit, -1, normal1); - } - } - else if (convex1) { - front = offset0 >= 0.0 || (offset1 >= 0.0 && offset2 >= 0.0); - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal0); - copyVec2(upperLimit, normal1); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal2); - scaleVec2(upperLimit, -1, normal1); - } - } - else if (convex2) { - front = offset2 >= 0.0 || (offset0 >= 0.0 && offset1 >= 0.0); - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal1); - copyVec2(upperLimit, normal2); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal1); - scaleVec2(upperLimit, -1, normal0); - } - } - else { - front = offset0 >= 0.0 && offset1 >= 0.0 && offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal1); - copyVec2(upperLimit, normal1); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal2); - scaleVec2(upperLimit, -1, normal0); - } - } - } - else if (hasVertex0) { - if (convex1) { - front = offset0 >= 0.0 || offset1 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal0); - scaleVec2(upperLimit, -1, normal1); - } - else { - scaleVec2(normal, -1, normal1); - copyVec2(lowerLimit, normal1); - scaleVec2(upperLimit, -1, normal1); - } - } - else { - front = offset0 >= 0.0 && offset1 >= 0.0; - if (front) { - copyVec2(normal, normal1); - copyVec2(lowerLimit, normal1); - scaleVec2(upperLimit, -1, normal1); - } - else { - scaleVec2(normal, -1, normal1); - copyVec2(lowerLimit, normal1); - scaleVec2(upperLimit, -1, normal0); - } - } - } - else if (hasVertex3) { - if (convex2) { - front = offset1 >= 0.0 || offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - scaleVec2(lowerLimit, -1, normal1); - copyVec2(upperLimit, normal2); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal1); - copyVec2(upperLimit, normal1); - } - } - else { - front = offset1 >= 0.0 && offset2 >= 0.0; - if (front) { - copyVec2(normal, normal1); - scaleVec2(lowerLimit, -1, normal1); - copyVec2(upperLimit, normal1); - } - else { - scaleVec2(normal, -1, normal1); - scaleVec2(lowerLimit, -1, normal2); - copyVec2(upperLimit, normal1); - } - } - } - else { - front = offset1 >= 0.0; - if (front) { - copyVec2(normal, normal1); - scaleVec2(lowerLimit, -1, normal1); - scaleVec2(upperLimit, -1, normal1); - } - else { - scaleVec2(normal, -1, normal1); - copyVec2(lowerLimit, normal1); - copyVec2(upperLimit, normal1); - } - } - // Get polygonB in frameA - polygonBA.count = polygonB.m_count; - for (var i = 0; i < polygonB.m_count; ++i) { - transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]); - rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]); - } - var radius = polygonB.m_radius + edgeA.m_radius; - manifold.pointCount = 0; - { // ComputeEdgeSeparation - edgeAxis.type = EPAxisType.e_edgeA; - edgeAxis.index = front ? 0 : 1; - edgeAxis.separation = Infinity; - for (var i = 0; i < polygonBA.count; ++i) { - var v = polygonBA.vertices[i]; - var s = dotVec2(normal, v) - dotVec2(normal, v1); - if (s < edgeAxis.separation) { - edgeAxis.separation = s; - } - } - } - // If no valid normal can be found than this edge should not collide. - // @ts-ignore todo: why we need this if here? - if (edgeAxis.type == EPAxisType.e_unknown) { - return; - } - if (edgeAxis.separation > radius) { - return; - } - { // ComputePolygonSeparation - polygonAxis.type = EPAxisType.e_unknown; - polygonAxis.index = -1; - polygonAxis.separation = -Infinity; - setVec2(perp, -normal.y, normal.x); - for (var i = 0; i < polygonBA.count; ++i) { - scaleVec2(n, -1, polygonBA.normals[i]); - var s1 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v1); - var s2 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v2); - var s = math_min(s1, s2); - if (s > radius) { - // No collision - polygonAxis.type = EPAxisType.e_edgeB; - polygonAxis.index = i; - polygonAxis.separation = s; - break; - } - // Adjacency - if (dotVec2(n, perp) >= 0.0) { - if (dotVec2(n, normal) - dotVec2(upperLimit, normal) < -SettingsInternal.angularSlop) { - continue; - } - } - else { - if (dotVec2(n, normal) - dotVec2(lowerLimit, normal) < -SettingsInternal.angularSlop) { - continue; - } - } - if (s > polygonAxis.separation) { - polygonAxis.type = EPAxisType.e_edgeB; - polygonAxis.index = i; - polygonAxis.separation = s; - } - } - } - if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) { - return; - } - // Use hysteresis for jitter reduction. - var k_relativeTol = 0.98; - var k_absoluteTol = 0.001; - var primaryAxis; - if (polygonAxis.type == EPAxisType.e_unknown) { - primaryAxis = edgeAxis; - } - else if (polygonAxis.separation > k_relativeTol * edgeAxis.separation + k_absoluteTol) { - primaryAxis = polygonAxis; - } - else { - primaryAxis = edgeAxis; - } - ie[0].recycle(), ie[1].recycle(); - if (primaryAxis.type == EPAxisType.e_edgeA) { - manifold.type = ManifoldType.e_faceA; - // Search for the polygon normal that is most anti-parallel to the edge - // normal. - var bestIndex = 0; - var bestValue = dotVec2(normal, polygonBA.normals[0]); - for (var i = 1; i < polygonBA.count; ++i) { - var value = dotVec2(normal, polygonBA.normals[i]); - if (value < bestValue) { - bestValue = value; - bestIndex = i; - } - } - var i1 = bestIndex; - var i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0; - copyVec2(ie[0].v, polygonBA.vertices[i1]); - ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex); - copyVec2(ie[1].v, polygonBA.vertices[i2]); - ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex); - if (front) { - rf.i1 = 0; - rf.i2 = 1; - copyVec2(rf.v1, v1); - copyVec2(rf.v2, v2); - copyVec2(rf.normal, normal1); - } - else { - rf.i1 = 1; - rf.i2 = 0; - copyVec2(rf.v1, v2); - copyVec2(rf.v2, v1); - scaleVec2(rf.normal, -1, normal1); - } - } - else { - manifold.type = ManifoldType.e_faceB; - copyVec2(ie[0].v, v1); - ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face); - copyVec2(ie[1].v, v2); - ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face); - rf.i1 = primaryAxis.index; - rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0; - copyVec2(rf.v1, polygonBA.vertices[rf.i1]); - copyVec2(rf.v2, polygonBA.vertices[rf.i2]); - copyVec2(rf.normal, polygonBA.normals[rf.i1]); - } - setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x); - setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y); - rf.sideOffset1 = dotVec2(rf.sideNormal1, rf.v1); - rf.sideOffset2 = dotVec2(rf.sideNormal2, rf.v2); - // Clip incident edge against extruded edge1 side edges. - clipPoints1[0].recycle(), clipPoints1[1].recycle(); - clipPoints2[0].recycle(), clipPoints2[1].recycle(); - // Clip to box side 1 - var np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1); - if (np1 < SettingsInternal.maxManifoldPoints) { - return; - } - // Clip to negative box side 1 - var np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2); - if (np2 < SettingsInternal.maxManifoldPoints) { - return; - } - // Now clipPoints2 contains the clipped points. - if (primaryAxis.type == EPAxisType.e_edgeA) { - copyVec2(manifold.localNormal, rf.normal); - copyVec2(manifold.localPoint, rf.v1); - } - else { - copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]); - copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]); - } - var pointCount = 0; - for (var i = 0; i < SettingsInternal.maxManifoldPoints; ++i) { - var separation = dotVec2(rf.normal, clipPoints2[i].v) - dotVec2(rf.normal, rf.v1); - if (separation <= radius) { - var cp = manifold.points[pointCount]; // ManifoldPoint - if (primaryAxis.type == EPAxisType.e_edgeA) { - detransformVec2(cp.localPoint, xf, clipPoints2[i].v); - cp.id.set(clipPoints2[i].id); - } - else { - copyVec2(cp.localPoint, clipPoints2[i].v); - cp.id.set(clipPoints2[i].id); - cp.id.swapFeatures(); - } - ++pointCount; - } - } - manifold.pointCount = pointCount; +var EPAxis = ( + /** @class */ + /* @__PURE__ */ function() { + function EPAxis2() { + } + return EPAxis2; + }() +); +var TempPolygon = ( + /** @class */ + /* @__PURE__ */ function() { + function TempPolygon2() { + this.vertices = []; + this.normals = []; + this.count = 0; + for (var i = 0; i < SettingsInternal.maxPolygonVertices; i++) { + this.vertices.push(vec2(0, 0)); + this.normals.push(vec2(0, 0)); + } + } + return TempPolygon2; + }() +); +var ReferenceFace = ( + /** @class */ + function() { + function ReferenceFace2() { + this.v1 = vec2(0, 0); + this.v2 = vec2(0, 0); + this.normal = vec2(0, 0); + this.sideNormal1 = vec2(0, 0); + this.sideNormal2 = vec2(0, 0); + } + ReferenceFace2.prototype.recycle = function() { + zeroVec2(this.v1); + zeroVec2(this.v2); + zeroVec2(this.normal); + zeroVec2(this.sideNormal1); + zeroVec2(this.sideNormal2); + }; + return ReferenceFace2; + }() +); +var clipPoints1 = [new ClipVertex(), new ClipVertex()]; +var clipPoints2 = [new ClipVertex(), new ClipVertex()]; +var ie = [new ClipVertex(), new ClipVertex()]; +var edgeAxis = new EPAxis(); +var polygonAxis = new EPAxis(); +var polygonBA = new TempPolygon(); +var rf = new ReferenceFace(); +var centroidB = vec2(0, 0); +var edge0 = vec2(0, 0); +var edge1 = vec2(0, 0); +var edge2 = vec2(0, 0); +var xf = transform(0, 0, 0); +var normal = vec2(0, 0); +var normal0 = vec2(0, 0); +var normal1 = vec2(0, 0); +var normal2 = vec2(0, 0); +var lowerLimit = vec2(0, 0); +var upperLimit = vec2(0, 0); +var perp = vec2(0, 0); +var n = vec2(0, 0); +var CollideEdgePolygon = function(manifold, edgeA, xfA2, polygonB, xfB2) { + detransformTransform(xf, xfA2, xfB2); + transformVec2(centroidB, xf, polygonB.m_centroid); + var v0 = edgeA.m_vertex0; + var v13 = edgeA.m_vertex1; + var v22 = edgeA.m_vertex2; + var v3 = edgeA.m_vertex3; + var hasVertex0 = edgeA.m_hasVertex0; + var hasVertex3 = edgeA.m_hasVertex3; + subVec2(edge1, v22, v13); + normalizeVec2(edge1); + setVec2(normal1, edge1.y, -edge1.x); + var offset1 = dotVec2(normal1, centroidB) - dotVec2(normal1, v13); + var offset0 = 0; + var offset2 = 0; + var convex1 = false; + var convex2 = false; + zeroVec2(normal0); + zeroVec2(normal2); + if (hasVertex0) { + subVec2(edge0, v13, v0); + normalizeVec2(edge0); + setVec2(normal0, edge0.y, -edge0.x); + convex1 = crossVec2Vec2(edge0, edge1) >= 0; + offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0); + } + if (hasVertex3) { + subVec2(edge2, v3, v22); + normalizeVec2(edge2); + setVec2(normal2, edge2.y, -edge2.x); + convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0; + offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v22); + } + var front; + zeroVec2(normal); + zeroVec2(lowerLimit); + zeroVec2(upperLimit); + if (hasVertex0 && hasVertex3) { + if (convex1 && convex2) { + front = offset0 >= 0 || offset1 >= 0 || offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal0); + copyVec2(upperLimit, normal2); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal1); + scaleVec2(upperLimit, -1, normal1); + } + } else if (convex1) { + front = offset0 >= 0 || offset1 >= 0 && offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal0); + copyVec2(upperLimit, normal1); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal2); + scaleVec2(upperLimit, -1, normal1); + } + } else if (convex2) { + front = offset2 >= 0 || offset0 >= 0 && offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal1); + copyVec2(upperLimit, normal2); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal1); + scaleVec2(upperLimit, -1, normal0); + } + } else { + front = offset0 >= 0 && offset1 >= 0 && offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal1); + copyVec2(upperLimit, normal1); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal2); + scaleVec2(upperLimit, -1, normal0); + } + } + } else if (hasVertex0) { + if (convex1) { + front = offset0 >= 0 || offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal0); + scaleVec2(upperLimit, -1, normal1); + } else { + scaleVec2(normal, -1, normal1); + copyVec2(lowerLimit, normal1); + scaleVec2(upperLimit, -1, normal1); + } + } else { + front = offset0 >= 0 && offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + copyVec2(lowerLimit, normal1); + scaleVec2(upperLimit, -1, normal1); + } else { + scaleVec2(normal, -1, normal1); + copyVec2(lowerLimit, normal1); + scaleVec2(upperLimit, -1, normal0); + } + } + } else if (hasVertex3) { + if (convex2) { + front = offset1 >= 0 || offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + scaleVec2(lowerLimit, -1, normal1); + copyVec2(upperLimit, normal2); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal1); + copyVec2(upperLimit, normal1); + } + } else { + front = offset1 >= 0 && offset2 >= 0; + if (front) { + copyVec2(normal, normal1); + scaleVec2(lowerLimit, -1, normal1); + copyVec2(upperLimit, normal1); + } else { + scaleVec2(normal, -1, normal1); + scaleVec2(lowerLimit, -1, normal2); + copyVec2(upperLimit, normal1); + } + } + } else { + front = offset1 >= 0; + if (front) { + copyVec2(normal, normal1); + scaleVec2(lowerLimit, -1, normal1); + scaleVec2(upperLimit, -1, normal1); + } else { + scaleVec2(normal, -1, normal1); + copyVec2(lowerLimit, normal1); + copyVec2(upperLimit, normal1); + } + } + polygonBA.count = polygonB.m_count; + for (var i = 0; i < polygonB.m_count; ++i) { + transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]); + rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]); + } + var radius = polygonB.m_radius + edgeA.m_radius; + manifold.pointCount = 0; + { + edgeAxis.type = EPAxisType.e_edgeA; + edgeAxis.index = front ? 0 : 1; + edgeAxis.separation = Infinity; + for (var i = 0; i < polygonBA.count; ++i) { + var v4 = polygonBA.vertices[i]; + var s2 = dotVec2(normal, v4) - dotVec2(normal, v13); + if (s2 < edgeAxis.separation) { + edgeAxis.separation = s2; + } + } + } + if (edgeAxis.type == EPAxisType.e_unknown) { + return; + } + if (edgeAxis.separation > radius) { + return; + } + { + polygonAxis.type = EPAxisType.e_unknown; + polygonAxis.index = -1; + polygonAxis.separation = -Infinity; + setVec2(perp, -normal.y, normal.x); + for (var i = 0; i < polygonBA.count; ++i) { + scaleVec2(n, -1, polygonBA.normals[i]); + var s1 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v13); + var s22 = dotVec2(n, polygonBA.vertices[i]) - dotVec2(n, v22); + var s2 = math_min(s1, s22); + if (s2 > radius) { + polygonAxis.type = EPAxisType.e_edgeB; + polygonAxis.index = i; + polygonAxis.separation = s2; + break; + } + if (dotVec2(n, perp) >= 0) { + if (dotVec2(n, normal) - dotVec2(upperLimit, normal) < -SettingsInternal.angularSlop) { + continue; + } + } else { + if (dotVec2(n, normal) - dotVec2(lowerLimit, normal) < -SettingsInternal.angularSlop) { + continue; + } + } + if (s2 > polygonAxis.separation) { + polygonAxis.type = EPAxisType.e_edgeB; + polygonAxis.index = i; + polygonAxis.separation = s2; + } + } + } + if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) { + return; + } + var k_relativeTol = 0.98; + var k_absoluteTol = 1e-3; + var primaryAxis; + if (polygonAxis.type == EPAxisType.e_unknown) { + primaryAxis = edgeAxis; + } else if (polygonAxis.separation > k_relativeTol * edgeAxis.separation + k_absoluteTol) { + primaryAxis = polygonAxis; + } else { + primaryAxis = edgeAxis; + } + ie[0].recycle(), ie[1].recycle(); + if (primaryAxis.type == EPAxisType.e_edgeA) { + manifold.type = ManifoldType.e_faceA; + var bestIndex = 0; + var bestValue = dotVec2(normal, polygonBA.normals[0]); + for (var i = 1; i < polygonBA.count; ++i) { + var value = dotVec2(normal, polygonBA.normals[i]); + if (value < bestValue) { + bestValue = value; + bestIndex = i; + } + } + var i1 = bestIndex; + var i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0; + copyVec2(ie[0].v, polygonBA.vertices[i1]); + ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex); + copyVec2(ie[1].v, polygonBA.vertices[i2]); + ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex); + if (front) { + rf.i1 = 0; + rf.i2 = 1; + copyVec2(rf.v1, v13); + copyVec2(rf.v2, v22); + copyVec2(rf.normal, normal1); + } else { + rf.i1 = 1; + rf.i2 = 0; + copyVec2(rf.v1, v22); + copyVec2(rf.v2, v13); + scaleVec2(rf.normal, -1, normal1); + } + } else { + manifold.type = ManifoldType.e_faceB; + copyVec2(ie[0].v, v13); + ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face); + copyVec2(ie[1].v, v22); + ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face); + rf.i1 = primaryAxis.index; + rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0; + copyVec2(rf.v1, polygonBA.vertices[rf.i1]); + copyVec2(rf.v2, polygonBA.vertices[rf.i2]); + copyVec2(rf.normal, polygonBA.normals[rf.i1]); + } + setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x); + setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y); + rf.sideOffset1 = dotVec2(rf.sideNormal1, rf.v1); + rf.sideOffset2 = dotVec2(rf.sideNormal2, rf.v2); + clipPoints1[0].recycle(), clipPoints1[1].recycle(); + clipPoints2[0].recycle(), clipPoints2[1].recycle(); + var np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1); + if (np1 < SettingsInternal.maxManifoldPoints) { + return; + } + var np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2); + if (np2 < SettingsInternal.maxManifoldPoints) { + return; + } + if (primaryAxis.type == EPAxisType.e_edgeA) { + copyVec2(manifold.localNormal, rf.normal); + copyVec2(manifold.localPoint, rf.v1); + } else { + copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]); + copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]); + } + var pointCount = 0; + for (var i = 0; i < SettingsInternal.maxManifoldPoints; ++i) { + var separation = dotVec2(rf.normal, clipPoints2[i].v) - dotVec2(rf.normal, rf.v1); + if (separation <= radius) { + var cp = manifold.points[pointCount]; + if (primaryAxis.type == EPAxisType.e_edgeA) { + detransformVec2(cp.localPoint, xf, clipPoints2[i].v); + cp.id.set(clipPoints2[i].id); + } else { + copyVec2(cp.localPoint, clipPoints2[i].v); + cp.id.set(clipPoints2[i].id); + cp.id.swapFeatures(); + } + ++pointCount; + } + } + manifold.pointCount = pointCount; }; - -/** @hidden @deprecated Merged with main namespace */ var internal = { - CollidePolygons: CollidePolygons, - Settings: Settings, - Sweep: Sweep, - Manifold: Manifold, - Distance: Distance, - TimeOfImpact: TimeOfImpact, - DynamicTree: DynamicTree, - stats: stats + CollidePolygons, + Settings, + Sweep, + Manifold, + Distance, + TimeOfImpact, + DynamicTree, + stats +}; +const planck = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + AABB, + Body, + Box, + BoxShape, + BroadPhase, + Chain, + ChainShape, + Circle, + CircleShape, + ClipVertex, + CollideCircles, + CollideEdgeCircle, + CollideEdgePolygon, + CollidePolygonCircle, + CollidePolygons, + Contact, + ContactEdge, + get ContactFeatureType() { + return ContactFeatureType; + }, + ContactID, + ContactImpulse, + Distance, + DistanceInput, + DistanceJoint, + DistanceOutput, + DistanceProxy, + DynamicTree, + Edge, + EdgeShape, + Fixture, + FixtureProxy, + FrictionJoint, + GearJoint, + Joint, + JointEdge, + Manifold, + ManifoldPoint, + get ManifoldType() { + return ManifoldType; + }, + Mat22, + Mat33, + Math: math, + MotorJoint, + MouseJoint, + get PointState() { + return PointState; + }, + Polygon, + PolygonShape, + PrismaticJoint, + PulleyJoint, + RevoluteJoint, + RopeJoint, + Rot, + Serializer, + Settings, + SettingsInternal, + Shape, + ShapeCast, + ShapeCastInput, + ShapeCastOutput, + SimplexCache, + Solver, + Sweep, + TOIInput, + TOIOutput, + get TOIOutputState() { + return TOIOutputState; + }, + Testbed, + TimeOfImpact, + TimeStep, + Transform, + TreeNode, + Vec2, + Vec3, + VelocityConstraintPoint, + WeldJoint, + WheelJoint, + World, + WorldManifold, + clipSegmentToLine, + getPointStates, + internal, + mixFriction, + mixRestitution, + stats, + testOverlap, + testbed +}, Symbol.toStringTag, { value: "Module" })); +export { + AABB, + Body, + Box, + BoxShape, + BroadPhase, + Chain, + ChainShape, + Circle, + CircleShape, + ClipVertex, + CollideCircles, + CollideEdgeCircle, + CollideEdgePolygon, + CollidePolygonCircle, + CollidePolygons, + Contact, + ContactEdge, + ContactFeatureType, + ContactID, + ContactImpulse, + Distance, + DistanceInput, + DistanceJoint, + DistanceOutput, + DistanceProxy, + DynamicTree, + Edge, + EdgeShape, + Fixture, + FixtureProxy, + FrictionJoint, + GearJoint, + Joint, + JointEdge, + Manifold, + ManifoldPoint, + ManifoldType, + Mat22, + Mat33, + math as Math, + MotorJoint, + MouseJoint, + PointState, + Polygon, + PolygonShape, + PrismaticJoint, + PulleyJoint, + RevoluteJoint, + RopeJoint, + Rot, + Serializer, + Settings, + SettingsInternal, + Shape, + ShapeCast, + ShapeCastInput, + ShapeCastOutput, + SimplexCache, + Solver, + Sweep, + TOIInput, + TOIOutput, + TOIOutputState, + Testbed, + TimeOfImpact, + TimeStep, + Transform, + TreeNode, + Vec2, + Vec3, + VelocityConstraintPoint, + WeldJoint, + WheelJoint, + World, + WorldManifold, + clipSegmentToLine, + planck as default, + getPointStates, + internal, + mixFriction, + mixRestitution, + stats, + testOverlap, + testbed }; - -var planck = /*#__PURE__*/Object.freeze({ - __proto__: null, - Math: math, - Serializer: Serializer, - Testbed: Testbed, - testbed: testbed, - Vec2: Vec2, - Vec3: Vec3, - Mat22: Mat22, - Mat33: Mat33, - Transform: Transform, - Rot: Rot, - AABB: AABB, - Shape: Shape, - FixtureProxy: FixtureProxy, - Fixture: Fixture, - Body: Body, - ContactEdge: ContactEdge, - mixFriction: mixFriction, - mixRestitution: mixRestitution, - VelocityConstraintPoint: VelocityConstraintPoint, - Contact: Contact, - JointEdge: JointEdge, - Joint: Joint, - World: World, - CircleShape: CircleShape, - Circle: Circle, - EdgeShape: EdgeShape, - Edge: Edge, - PolygonShape: PolygonShape, - Polygon: Polygon, - ChainShape: ChainShape, - Chain: Chain, - BoxShape: BoxShape, - Box: Box, - CollideCircles: CollideCircles, - CollideEdgeCircle: CollideEdgeCircle, - CollidePolygons: CollidePolygons, - CollidePolygonCircle: CollidePolygonCircle, - CollideEdgePolygon: CollideEdgePolygon, - DistanceJoint: DistanceJoint, - FrictionJoint: FrictionJoint, - GearJoint: GearJoint, - MotorJoint: MotorJoint, - MouseJoint: MouseJoint, - PrismaticJoint: PrismaticJoint, - PulleyJoint: PulleyJoint, - RevoluteJoint: RevoluteJoint, - RopeJoint: RopeJoint, - WeldJoint: WeldJoint, - WheelJoint: WheelJoint, - Settings: Settings, - SettingsInternal: SettingsInternal, - Sweep: Sweep, - get ManifoldType () { return ManifoldType; }, - get ContactFeatureType () { return ContactFeatureType; }, - get PointState () { return PointState; }, - ClipVertex: ClipVertex, - Manifold: Manifold, - ManifoldPoint: ManifoldPoint, - ContactID: ContactID, - WorldManifold: WorldManifold, - getPointStates: getPointStates, - clipSegmentToLine: clipSegmentToLine, - DistanceInput: DistanceInput, - DistanceOutput: DistanceOutput, - SimplexCache: SimplexCache, - Distance: Distance, - DistanceProxy: DistanceProxy, - testOverlap: testOverlap, - ShapeCastInput: ShapeCastInput, - ShapeCastOutput: ShapeCastOutput, - ShapeCast: ShapeCast, - TOIInput: TOIInput, - get TOIOutputState () { return TOIOutputState; }, - TOIOutput: TOIOutput, - TimeOfImpact: TimeOfImpact, - TreeNode: TreeNode, - DynamicTree: DynamicTree, - stats: stats, - internal: internal -}); - -export { AABB, Body, Box, BoxShape, Chain, ChainShape, Circle, CircleShape, ClipVertex, CollideCircles, CollideEdgeCircle, CollideEdgePolygon, CollidePolygonCircle, CollidePolygons, Contact, ContactEdge, ContactFeatureType, ContactID, Distance, DistanceInput, DistanceJoint, DistanceOutput, DistanceProxy, DynamicTree, Edge, EdgeShape, Fixture, FixtureProxy, FrictionJoint, GearJoint, Joint, JointEdge, Manifold, ManifoldPoint, ManifoldType, Mat22, Mat33, math as Math, MotorJoint, MouseJoint, PointState, Polygon, PolygonShape, PrismaticJoint, PulleyJoint, RevoluteJoint, RopeJoint, Rot, Serializer, Settings, SettingsInternal, Shape, ShapeCast, ShapeCastInput, ShapeCastOutput, SimplexCache, Sweep, TOIInput, TOIOutput, TOIOutputState, Testbed, TimeOfImpact, Transform, TreeNode, Vec2, Vec3, VelocityConstraintPoint, WeldJoint, WheelJoint, World, WorldManifold, clipSegmentToLine, planck as default, getPointStates, internal, mixFriction, mixRestitution, stats, testOverlap, testbed }; //# sourceMappingURL=planck.mjs.map diff --git a/dist/planck.mjs.map b/dist/planck.mjs.map index 7451bd4a..f6fb1814 100644 --- a/dist/planck.mjs.map +++ b/dist/planck.mjs.map @@ -1 +1 @@ -{"version":3,"file":"planck.mjs","sources":["../node_modules/tslib/tslib.es6.js","../src/util/options.ts","../src/common/Math.ts","../src/common/Vec2.ts","../src/collision/AABB.ts","../src/Settings.ts","../src/util/Pool.ts","../src/collision/DynamicTree.ts","../src/collision/BroadPhase.ts","../src/common/Matrix.ts","../src/common/Rot.ts","../src/common/Sweep.ts","../src/common/Transform.ts","../src/dynamics/Velocity.ts","../src/dynamics/Position.ts","../src/collision/Shape.ts","../src/dynamics/Fixture.ts","../src/dynamics/Body.ts","../src/dynamics/Joint.ts","../src/util/stats.ts","../src/util/Timer.ts","../src/collision/Distance.ts","../src/collision/TimeOfImpact.ts","../src/dynamics/Solver.ts","../src/common/Mat22.ts","../src/collision/Manifold.ts","../src/dynamics/Contact.ts","../src/dynamics/World.ts","../src/common/Vec3.ts","../src/collision/shape/EdgeShape.ts","../src/collision/shape/ChainShape.ts","../src/collision/shape/PolygonShape.ts","../src/collision/shape/CircleShape.ts","../src/dynamics/joint/DistanceJoint.ts","../src/dynamics/joint/FrictionJoint.ts","../src/common/Mat33.ts","../src/dynamics/joint/RevoluteJoint.ts","../src/dynamics/joint/PrismaticJoint.ts","../src/dynamics/joint/GearJoint.ts","../src/dynamics/joint/MotorJoint.ts","../src/dynamics/joint/MouseJoint.ts","../src/dynamics/joint/PulleyJoint.ts","../src/dynamics/joint/RopeJoint.ts","../src/dynamics/joint/WeldJoint.ts","../src/dynamics/joint/WheelJoint.ts","../src/serializer/index.ts","../src/util/Testbed.ts","../src/collision/shape/BoxShape.ts","../src/collision/shape/CollideCircle.ts","../src/collision/shape/CollideEdgeCircle.ts","../src/collision/shape/CollidePolygon.ts","../src/collision/shape/CollideCirclePolygon.ts","../src/collision/shape/CollideEdgePolygon.ts","../src/internal.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/** @internal */\nexport const options = function(input: T, defaults: object): T {\n if (input === null || typeof input === \"undefined\") {\n // tslint:disable-next-line:no-object-literal-type-assertion\n input = {} as T;\n }\n\n const output = {...input};\n\n // tslint:disable-next-line:no-for-in\n for (const key in defaults) {\n if (defaults.hasOwnProperty(key) && typeof input[key] === \"undefined\") {\n output[key] = defaults[key];\n }\n }\n\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n const symbols = Object.getOwnPropertySymbols(defaults);\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n if (defaults.propertyIsEnumerable(symbol) && typeof input[symbol] === \"undefined\") {\n output[symbol] = defaults[symbol];\n }\n }\n }\n\n return output;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_random = Math.random;\n\n\nexport const EPSILON = 1e-9;\n\n/** @internal @deprecated */\nexport const isFinite = Number.isFinite;\n\n/**\n * @deprecated\n * Next Largest Power of 2 Given a binary integer value x, the next largest\n * power of 2 can be computed by a SWAR algorithm that recursively \"folds\" the\n * upper bits into the lower bits. This process yields a bit vector with the\n * same most significant 1 as x, but all 1's below it. Adding 1 to that value\n * yields the next largest power of 2. For a 32-bit value:\n */\nexport function nextPowerOfTwo(x: number): number {\n x |= (x >> 1);\n x |= (x >> 2);\n x |= (x >> 4);\n x |= (x >> 8);\n x |= (x >> 16);\n return x + 1;\n}\n\n/** @deprecated */\nexport function isPowerOfTwo(x: number): boolean {\n return x > 0 && (x & (x - 1)) === 0;\n}\n\n/** @deprecated */\nexport function mod(num: number, min?: number, max?: number): number {\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}\n\n/**\n * @deprecated\n * Returns a min if num is less than min, and max if more than max, otherwise returns num.\n */\nexport function clamp(num: number, min: number, max: number): number {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n } else {\n return num;\n }\n}\n\n/**\n * @deprecated\n * Returns a random number between min and max when two arguments are provided.\n * If one arg is provided between 0 to max.\n * If one arg is passed between 0 to 1.\n */\nexport function random(min?: number, max?: number): number {\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}\n\n/** @ignore */\nexport const 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;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"./Math\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\nexport interface Vec2Value {\n x: number;\n y: number;\n}\n\nexport class Vec2 {\n x: number;\n y: number;\n\n constructor(x: number, y: number);\n constructor(obj: { x: number, y: number });\n constructor();\n // tslint:disable-next-line:typedef\n constructor(x?, y?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec2)) {\n return new Vec2(x, y);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n } else {\n this.x = x;\n this.y = y;\n }\n _ASSERT && Vec2.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = data.x;\n obj.y = data.y;\n return obj;\n }\n\n static zero(): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = 0;\n obj.y = 0;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = x;\n obj.y = y;\n return obj;\n }\n\n static clone(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(v.x, v.y);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /**\n * Does this vector contain finite coordinates?\n */\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.x) && Number.isFinite(obj.y);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec2.isValid(o), \"Invalid Vec2!\", o);\n }\n\n clone(): Vec2 {\n return Vec2.clone(this);\n }\n\n /**\n * Set this vector to all zeros.\n *\n * @returns this\n */\n setZero(): Vec2 {\n this.x = 0.0;\n this.y = 0.0;\n return this;\n }\n\n set(x: number, y: number): Vec2;\n set(value: Vec2Value): Vec2;\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n // tslint:disable-next-line:typedef\n set(x, y?) {\n if (typeof x === \"object\") {\n _ASSERT && Vec2.assert(x);\n this.x = x.x;\n this.y = x.y;\n } else {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n }\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setNum(x: number, y: number) {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setVec2(value: Vec2Value) {\n _ASSERT && Vec2.assert(value);\n this.x = value.x;\n this.y = value.y;\n\n return this;\n }\n\n /** @internal @deprecated Use setCombine or setMul */\n wSet(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.setCombine(a, v, b, w);\n } else {\n return this.setMul(a, v);\n }\n }\n\n /**\n * Set linear combination of v and w: `a * v + b * w`\n */\n setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x = x;\n this.y = y;\n return this;\n }\n\n setMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * Add a vector to this vector.\n *\n * @returns this\n */\n add(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x += w.x;\n this.y += w.y;\n return this;\n }\n\n /** @internal @deprecated Use addCombine or addMul */\n wAdd(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.addCombine(a, v, b, w);\n } else {\n return this.addMul(a, v);\n }\n }\n\n /**\n * Add linear combination of v and w: `a * v + b * w`\n */\n addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x += x;\n this.y += y;\n return this;\n }\n\n addMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x += x;\n this.y += y;\n return this;\n }\n\n /**\n * @deprecated Use subCombine or subMul\n */\n wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.subCombine(a, v, b, w);\n } else {\n return this.subMul(a, v);\n }}\n\n /**\n * Subtract linear combination of v and w: `a * v + b * w`\n */\n subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n subMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n /**\n * Subtract a vector from this vector\n *\n * @returns this\n */\n sub(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x -= w.x;\n this.y -= w.y;\n return this;\n }\n\n /**\n * Multiply this vector by a scalar.\n *\n * @returns this\n */\n mul(m: number): Vec2 {\n _ASSERT && console.assert(Number.isFinite(m));\n this.x *= m;\n this.y *= m;\n return this;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n length(): number {\n return Vec2.lengthOf(this);\n }\n\n /**\n * Get the length squared.\n */\n lengthSquared(): number {\n return Vec2.lengthSquared(this);\n }\n\n /**\n * Convert this vector into a unit vector.\n *\n * @returns old length\n */\n normalize(): number {\n const length = this.length();\n if (length < EPSILON) {\n return 0.0;\n }\n const invLength = 1.0 / length;\n this.x *= invLength;\n this.y *= invLength;\n return length;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n static lengthOf(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return math_sqrt(v.x * v.x + v.y * v.y);\n }\n\n /**\n * Get the length squared.\n */\n static lengthSquared(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return v.x * v.x + v.y * v.y;\n }\n\n static distance(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return math_sqrt(dx * dx + dy * dy);\n }\n\n static distanceSquared(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return dx * dx + dy * dy;\n }\n\n static areEqual(v: Vec2Value, w: Vec2Value): boolean {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v === w || typeof w === \"object\" && w !== null && v.x === w.x && v.y === w.y;\n }\n\n /**\n * Get the skew vector such that dot(skew_vec, other) == cross(vec, other)\n */\n static skew(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.y, v.x);\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.x + v.y * w.y;\n }\n\n /** Cross product between two vectors */\n static cross(v: Vec2Value, w: Vec2Value): number;\n /** Cross product between a vector and a scalar */\n static cross(v: Vec2Value, w: number): Vec2;\n /** Cross product between a scalar and a vector */\n static cross(v: number, w: Vec2Value): Vec2;\n static cross(v: any, w: any): any {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n\n } else {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n }\n\n /** Cross product on two vectors */\n static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n\n /** Cross product on a vector and a scalar */\n static crossVec2Num(v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n }\n\n /** Cross product on a vector and a scalar */\n static crossNumVec2(v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n }\n\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2;\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2;\n static addCross(a: Vec2Value, v: any, w: any): Vec2 {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n static add(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x + w.x, v.y + w.y);\n }\n\n /** @hidden @deprecated */\n static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return Vec2.combine(a, v, b, w);\n } else {\n return Vec2.mulNumVec2(a, v);\n }\n }\n\n static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n return Vec2.zero().setCombine(a, v, b, w);\n }\n\n static sub(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x - w.x, v.y - w.y);\n }\n\n static mul(a: Vec2Value, b: number): Vec2;\n static mul(a: number, b: Vec2Value): Vec2;\n static mul(a: any, b: any): Vec2 {\n if (typeof a === \"object\") {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n\n } else if (typeof b === \"object\") {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n }\n\n static mulVec2Num(a: Vec2Value, b: number): Vec2 {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n }\n\n static mulNumVec2(a: number, b: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n\n neg(): Vec2 {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n\n static neg(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.x, -v.y);\n }\n\n static abs(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(math_abs(v.x), math_abs(v.y));\n }\n\n static mid(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo((v.x + w.x) * 0.5, (v.y + w.y) * 0.5);\n }\n\n static upper(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_max(v.x, w.x), math_max(v.y, w.y));\n }\n\n static lower(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_min(v.x, w.x), math_min(v.y, w.y));\n }\n\n clamp(max: number): Vec2 {\n const lengthSqr = this.x * this.x + this.y * this.y;\n if (lengthSqr > max * max) {\n const scale = max / math_sqrt(lengthSqr);\n this.x *= scale;\n this.y *= scale;\n }\n return this;\n }\n\n static clamp(v: Vec2Value, max: number): Vec2 {\n const r = Vec2.neo(v.x, v.y);\n r.clamp(max);\n return r;\n }\n\n /** @hidden @deprecated */\n static scaleFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x * x, v.y * y);\n };\n }\n\n /** @hidden @deprecated */\n static translateFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x + x, v.y + y);\n };\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/**\n * Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n */\nexport interface RayCastInput {\n p1: Vec2Value;\n p2: Vec2Value;\n maxFraction: number;\n}\n\nexport type RayCastCallback = (subInput: RayCastInput, id: number) => number;\n\n/**\n * Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`,\n * where `p1` and `p2` come from RayCastInput.\n */\nexport interface RayCastOutput {\n normal: Vec2;\n fraction: number;\n}\n\nexport interface AABBValue {\n lowerBound: Vec2Value;\n upperBound: Vec2Value;\n}\n\nexport class AABB {\n lowerBound: Vec2;\n upperBound: Vec2;\n\n constructor(lower?: Vec2Value, upper?: Vec2Value) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof AABB)) {\n return new AABB(lower, upper);\n }\n\n this.lowerBound = Vec2.zero();\n this.upperBound = Vec2.zero();\n\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\n /**\n * Verify that the bounds are sorted.\n */\n isValid(): boolean {\n return AABB.isValid(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!AABB.isValid(o), \"Invalid AABB!\", o);\n }\n\n /**\n * Get the center of the AABB.\n */\n getCenter(): Vec2 {\n return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5);\n }\n\n /**\n * Get the extents of the AABB (half-widths).\n */\n getExtents(): Vec2 {\n return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5);\n }\n\n /**\n * Get the perimeter length.\n */\n getPerimeter(): number {\n return 2.0 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y);\n }\n\n /**\n * Combine one or two AABB into this one.\n */\n combine(a: AABBValue, b?: AABBValue): void {\n b = b || this;\n\n const lowerA = a.lowerBound;\n const upperA = a.upperBound;\n const lowerB = b.lowerBound;\n const upperB = b.upperBound;\n\n const lowerX = math_min(lowerA.x, lowerB.x);\n const lowerY = math_min(lowerA.y, lowerB.y);\n const upperX = math_max(upperB.x, upperA.x);\n const upperY = math_max(upperB.y, upperA.y);\n\n this.lowerBound.setNum(lowerX, lowerY);\n this.upperBound.setNum(upperX, upperY);\n }\n\n combinePoints(a: Vec2Value, b: Vec2Value): void {\n this.lowerBound.setNum(math_min(a.x, b.x), math_min(a.y, b.y));\n this.upperBound.setNum(math_max(a.x, b.x), math_max(a.y, b.y));\n }\n\n set(aabb: AABBValue): void {\n this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y);\n this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y);\n }\n\n contains(aabb: AABBValue): boolean {\n let 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\n extend(value: number): AABB {\n AABB.extend(this, value);\n return this;\n }\n\n static extend(out: AABBValue, value: number): AABBValue {\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\n static testOverlap(a: AABBValue, b: AABBValue): boolean {\n const d1x = b.lowerBound.x - a.upperBound.x;\n const d2x = a.lowerBound.x - b.upperBound.x;\n\n const d1y = b.lowerBound.y - a.upperBound.y;\n const d2y = a.lowerBound.y - b.upperBound.y;\n\n if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) {\n return false;\n }\n return true;\n }\n\n static areEqual(a: AABBValue, b: AABBValue): boolean {\n return Vec2.areEqual(a.lowerBound, b.lowerBound) && Vec2.areEqual(a.upperBound, b.upperBound);\n }\n\n static diff(a: AABBValue, b: AABBValue): number {\n const wD = math_max(0, math_min(a.upperBound.x, b.upperBound.x) - math_max(b.lowerBound.x, a.lowerBound.x));\n const hD = math_max(0, math_min(a.upperBound.y, b.upperBound.y) - math_max(b.lowerBound.y, a.lowerBound.y));\n\n const wA = a.upperBound.x - a.lowerBound.x;\n const hA = a.upperBound.y - a.lowerBound.y;\n\n const wB = b.upperBound.x - b.lowerBound.x;\n const hB = b.upperBound.y - b.lowerBound.y;\n\n return wA * hA + wB * hB - wD * hD;\n }\n\n rayCast(output: RayCastOutput, input: RayCastInput): boolean {\n // From Real-time Collision Detection, p179.\n\n let tmin = -Infinity;\n let tmax = Infinity;\n\n const p = input.p1;\n const d = Vec2.sub(input.p2, input.p1);\n const absD = Vec2.abs(d);\n\n const normal = Vec2.zero();\n\n for (let f: \"x\" | \"y\" = \"x\"; f !== null; f = (f === \"x\" ? \"y\" : null)) {\n if (absD.x < EPSILON) {\n // Parallel.\n if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) {\n return false;\n }\n } else {\n const inv_d = 1.0 / d[f];\n let t1 = (this.lowerBound[f] - p[f]) * inv_d;\n let t2 = (this.upperBound[f] - p[f]) * inv_d;\n\n // Sign of the normal vector.\n let s = -1.0;\n\n if (t1 > t2) {\n const temp = t1;\n t1 = t2;\n t2 = temp;\n s = 1.0;\n }\n\n // Push the min up\n if (t1 > tmin) {\n normal.setZero();\n normal[f] = s;\n tmin = t1;\n }\n\n // Pull the max down\n tmax = math_min(tmax, t2);\n\n if (tmin > tmax) {\n return false;\n }\n }\n }\n\n // Does the ray start inside the box?\n // Does the ray intersect beyond the max fraction?\n if (tmin < 0.0 || input.maxFraction < tmin) {\n return false;\n }\n\n // Intersection.\n output.fraction = tmin;\n output.normal = normal;\n return true;\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue {\n out.lowerBound.x = math_min(a.x, b.x);\n out.lowerBound.y = math_min(a.y, b.y);\n out.upperBound.x = math_max(a.x, b.x);\n out.upperBound.y = math_max(a.y, b.y);\n return out;\n }\n\n static combinedPerimeter(a: AABBValue, b: AABBValue) {\n const lx = math_min(a.lowerBound.x, b.lowerBound.x);\n const ly = math_min(a.lowerBound.y, b.lowerBound.y);\n const ux = math_max(a.upperBound.x, b.upperBound.x);\n const uy = math_max(a.upperBound.y, b.upperBound.y);\n return 2.0 * (ux - lx + uy - ly); \n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Tuning constants based on meters-kilograms-seconds (MKS) units.\n * \n * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units.\n */\nexport class Settings {\n /**\n * You can use this to change the length scale used by your game.\n * \n * For example for inches you could use 39.4.\n */\n static lengthUnitsPerMeter = 1.0;\n \n // Collision\n /**\n * The maximum number of contact points between two convex shapes. Do not change\n * this value.\n */\n static maxManifoldPoints: number = 2;\n\n /**\n * The maximum number of vertices on a convex polygon. You cannot increase this\n * too much because BlockAllocator has a maximum object size.\n */\n static maxPolygonVertices: number = 12;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This allows proxies to move\n * by a small amount without triggering a tree adjustment. This is in meters.\n */\n static aabbExtension: number = 0.1;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This is used to predict the\n * future position based on the current displacement. This is a dimensionless\n * multiplier.\n */\n static aabbMultiplier: number = 2.0;\n\n /**\n * A small length used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static linearSlop: number = 0.005;\n\n /**\n * A small angle used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static angularSlop: number = (2.0 / 180.0 * math_PI);\n\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 static get polygonRadius(): number { return 2.0 * Settings.linearSlop; }\n\n /**\n * Maximum number of sub-steps per contact in continuous physics simulation.\n */\n static maxSubSteps: number = 8;\n\n // Dynamics\n\n /**\n * Maximum number of contacts to be handled to solve a TOI impact.\n */\n static maxTOIContacts: number = 32;\n\n /**\n * Maximum iterations to solve a TOI.\n */\n static maxTOIIterations: number = 20;\n\n /**\n * Maximum iterations to find Distance.\n */\n static maxDistanceIterations: number = 20;\n\n /**\n * A velocity threshold for elastic collisions. Any collision with a relative\n * linear velocity below this threshold will be treated as inelastic.\n */\n static velocityThreshold: number = 1.0;\n\n /**\n * The maximum linear position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxLinearCorrection: number = 0.2;\n\n /**\n * The maximum angular position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxAngularCorrection: number = (8.0 / 180.0 * math_PI);\n\n /**\n * The maximum linear velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxTranslation: number = 2.0;\n\n /**\n * The maximum angular velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxRotation: number = (0.5 * math_PI);\n\n /**\n * This scale factor controls how fast overlap is resolved. Ideally this would\n * be 1 so that overlap is removed in one time step. However using values close\n * to 1 often lead to overshoot.\n */\n static baumgarte: number = 0.2;\n static toiBaugarte: number = 0.75;\n\n // Sleep\n\n /**\n * The time that a body must be still before it will go to sleep.\n */\n static timeToSleep: number = 0.5;\n\n /**\n * A body cannot sleep if its linear velocity is above this tolerance.\n */\n static linearSleepTolerance: number = 0.01;\n\n /**\n * A body cannot sleep if its angular velocity is above this tolerance.\n */\n static angularSleepTolerance: number = (2.0 / 180.0 * math_PI);\n}\n\n/** @internal */\nexport class SettingsInternal {\n static get maxManifoldPoints() {\n return Settings.maxManifoldPoints;\n }\n static get maxPolygonVertices() {\n return Settings.maxPolygonVertices;\n }\n static get aabbExtension() {\n return Settings.aabbExtension * Settings.lengthUnitsPerMeter;\n }\n static get aabbMultiplier() {\n return Settings.aabbMultiplier;\n }\n static get linearSlop() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get linearSlopSquared() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get angularSlop() {\n return Settings.angularSlop;\n }\n static get polygonRadius() {\n return 2.0 * Settings.linearSlop;\n }\n static get maxSubSteps() {\n return Settings.maxSubSteps;\n }\n static get maxTOIContacts() {\n return Settings.maxTOIContacts;\n }\n static get maxTOIIterations() {\n return Settings.maxTOIIterations;\n }\n static get maxDistanceIterations() {\n return Settings.maxDistanceIterations;\n }\n static get velocityThreshold() {\n return Settings.velocityThreshold * Settings.lengthUnitsPerMeter;\n }\n static get maxLinearCorrection() {\n return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter;\n }\n static get maxAngularCorrection() {\n return Settings.maxAngularCorrection;\n }\n static get maxTranslation() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxTranslationSquared() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxRotation() {\n return Settings.maxRotation;\n }\n static get maxRotationSquared() {\n return Settings.maxRotation * Settings.maxRotation;\n }\n static get baumgarte() {\n return Settings.baumgarte;\n }\n static get toiBaugarte() {\n return Settings.toiBaugarte;\n }\n static get timeToSleep() {\n return Settings.timeToSleep;\n }\n static get linearSleepTolerance() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get linearSleepToleranceSqr() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get angularSleepTolerance() {\n return Settings.angularSleepTolerance;\n }\n static get angularSleepToleranceSqr() {\n return Settings.angularSleepTolerance * Settings.angularSleepTolerance;\n }\n}\n","/*\n * Copyright (c) 2016-2018 Ali Shakiba http://shakiba.me/planck.js\n *\n * This software is provided 'as-is', without any express or implied\n * warranty. In no event will the authors be held liable for any damages\n * arising from the use of this software.\n * Permission is granted to anyone to use this software for any purpose,\n * including commercial applications, and to alter it and redistribute it\n * freely, subject to the following restrictions:\n * 1. The origin of this software must not be misrepresented; you must not\n * claim that you wrote the original software. If you use this software\n * in a product, an acknowledgment in the product documentation would be\n * appreciated but is not required.\n * 2. Altered source versions must be plainly marked as such, and must not be\n * misrepresented as being the original software.\n * 3. This notice may not be removed or altered from any source distribution.\n */\n\n/** @internal */\nexport interface PoolOptions {\n max?: number,\n create?: () => T,\n /** Called when an object is being re-allocated. */\n allocate?: (item: T) => void,\n /** Called when an object is returned to pool. */\n release?: (item: T) => void,\n /** Called when an object is returned to the pool but will be disposed from pool. */\n dispose?: (item: T) => T,\n}\n\n/** @internal */\nexport class Pool {\n _list: T[] = [];\n _max: number = Infinity;\n\n _createFn: () => T;\n _hasCreateFn: boolean = false;\n _createCount: number = 0;\n\n _allocateFn: (item: T) => void;\n _hasAllocateFn: boolean = false;\n _allocateCount: number = 0;\n\n _releaseFn: (item: T) => void;\n _hasReleaseFn: boolean = false;\n _releaseCount: number = 0;\n\n _disposeFn: (item: T) => T;\n _hasDisposeFn: boolean = false;\n _disposeCount: number = 0;\n\n constructor(opts: PoolOptions) {\n this._list = [];\n this._max = opts.max || this._max;\n\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\n max(n?: number): number | Pool {\n if (typeof n === \"number\") {\n this._max = n;\n return this;\n }\n return this._max;\n }\n\n size(): number {\n return this._list.length;\n }\n\n allocate(): T {\n let item: T;\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 // tslint:disable-next-line:no-object-literal-type-assertion\n item = {} as T;\n }\n }\n this._allocateCount++;\n if (this._hasAllocateFn) {\n this._allocateFn(item);\n }\n return item;\n }\n\n release(item: T): void {\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\n toString(): string {\n return \" +\" + this._createCount + \" >\" + this._allocateCount + \" <\" + this._releaseCount + \" -\"\n + this._disposeCount + \" =\" + this._list.length + \"/\" + this._max;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Pool } from \"../util/Pool\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\nexport type DynamicTreeQueryCallback = (nodeId: number) => boolean;\n\n/**\n * A node in the dynamic tree. The client does not interact with this directly.\n */\nexport class TreeNode {\n id: number;\n /** Enlarged AABB */\n aabb: AABB = new AABB();\n userData: T = null;\n parent: TreeNode = null;\n child1: TreeNode = null;\n child2: TreeNode = null;\n /** 0: leaf, -1: free node */\n height: number = -1;\n\n constructor(id?: number) {\n this.id = id;\n }\n\n /** @internal */\n toString(): string {\n return this.id + \": \" + this.userData;\n }\n\n isLeaf(): boolean {\n return this.child1 == null;\n }\n}\n\n/** @internal */ const poolTreeNode = new Pool>({\n create(): TreeNode {\n return new TreeNode();\n },\n release(node: TreeNode) {\n node.userData = null;\n node.parent = null;\n node.child1 = null;\n node.child2 = null;\n node.height = -1;\n node.id = undefined;\n }\n});\n\n/**\n * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A\n * dynamic tree arranges data in a binary tree to accelerate queries such as\n * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we\n * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger\n * than the client object. This allows the client object to move by small\n * amounts without triggering a tree update.\n *\n * Nodes are pooled and relocatable, so we use node indices rather than\n * pointers.\n */\nexport class DynamicTree {\n m_root: TreeNode;\n m_lastProxyId: number;\n m_nodes: {\n [id: number]: TreeNode\n };\n\n constructor() {\n this.m_root = null;\n this.m_nodes = {};\n this.m_lastProxyId = 0;\n }\n\n /**\n * Get proxy user data.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getUserData(id: number): T {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.userData;\n }\n\n /**\n * Get the fat AABB for a node id.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getFatAABB(id: number): AABB {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.aabb;\n }\n\n allocateNode(): TreeNode {\n const node = poolTreeNode.allocate();\n node.id = ++this.m_lastProxyId;\n this.m_nodes[node.id] = node;\n return node;\n }\n\n freeNode(node: TreeNode): void {\n // tslint:disable-next-line:no-dynamic-delete\n delete this.m_nodes[node.id];\n poolTreeNode.release(node);\n }\n\n /**\n * Create a proxy in the tree as a leaf node. We return the index of the node\n * instead of a pointer so that we can grow the node pool.\n *\n * Create a proxy. Provide a tight fitting AABB and a userData pointer.\n */\n createProxy(aabb: AABBValue, userData: T): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n\n const node = this.allocateNode();\n\n node.aabb.set(aabb);\n\n // Fatten the aabb.\n AABB.extend(node.aabb, Settings.aabbExtension);\n\n node.userData = userData;\n node.height = 0;\n\n this.insertLeaf(node);\n\n return node.id;\n }\n\n /**\n * Destroy a proxy. This asserts if the id is invalid.\n */\n destroyProxy(id: number): void {\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n this.removeLeaf(node);\n this.freeNode(node);\n }\n\n /**\n * Move a proxy with a swepted AABB. If the proxy has moved outside of its\n * fattened AABB, then the proxy is removed from the tree and re-inserted.\n * Otherwise the function returns immediately.\n *\n * @param d Displacement\n *\n * @return true if the proxy was re-inserted.\n */\n moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean {\n _ASSERT && console.assert(AABB.isValid(aabb));\n _ASSERT && console.assert(!d || Vec2.isValid(d));\n\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n if (node.aabb.contains(aabb)) {\n return false;\n }\n\n this.removeLeaf(node);\n\n node.aabb.set(aabb);\n\n // Extend AABB.\n aabb = node.aabb;\n AABB.extend(aabb, Settings.aabbExtension);\n\n // Predict AABB displacement.\n // const d = Vec2.mul(Settings.aabbMultiplier, displacement);\n\n if (d.x < 0.0) {\n aabb.lowerBound.x += d.x * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.x += d.x * Settings.aabbMultiplier;\n }\n\n if (d.y < 0.0) {\n aabb.lowerBound.y += d.y * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.y += d.y * Settings.aabbMultiplier;\n }\n\n this.insertLeaf(node);\n\n return true;\n }\n\n insertLeaf(leaf: TreeNode): void {\n _ASSERT && console.assert(AABB.isValid(leaf.aabb));\n\n if (this.m_root == null) {\n this.m_root = leaf;\n this.m_root.parent = null;\n return;\n }\n\n // Find the best sibling for this node\n const leafAABB = leaf.aabb;\n let index = this.m_root;\n while (!index.isLeaf()) {\n const child1 = index.child1;\n const child2 = index.child2;\n\n const area = index.aabb.getPerimeter();\n\n const combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB);\n\n // Cost of creating a new parent for this node and the new leaf\n const cost = 2.0 * combinedArea;\n\n // Minimum cost of pushing the leaf further down the tree\n const inheritanceCost = 2.0 * (combinedArea - area);\n\n // Cost of descending into child1\n const newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb);\n let cost1 = newArea1 + inheritanceCost;\n if (!child1.isLeaf()) {\n const oldArea = child1.aabb.getPerimeter();\n cost1 -= oldArea;\n }\n\n // Cost of descending into child2\n const newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb);\n let cost2 = newArea2 + inheritanceCost;\n if (!child2.isLeaf()) {\n const oldArea = child2.aabb.getPerimeter();\n cost2 -= oldArea;\n }\n\n // Descend according to the minimum cost.\n if (cost < cost1 && cost < cost2) {\n break;\n }\n\n // Descend\n if (cost1 < cost2) {\n index = child1;\n } else {\n index = child2;\n }\n }\n\n const sibling = index;\n\n // Create a new parent.\n const oldParent = sibling.parent;\n const 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\n if (oldParent != null) {\n // The sibling was not the root.\n if (oldParent.child1 === sibling) {\n oldParent.child1 = newParent;\n } else {\n oldParent.child2 = newParent;\n }\n\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n } else {\n // The sibling was the root.\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n this.m_root = newParent;\n }\n\n // Walk back up the tree fixing heights and AABBs\n index = leaf.parent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n _ASSERT && console.assert(child1 != null);\n _ASSERT && console.assert(child2 != null);\n\n index.height = 1 + math_max(child1.height, child2.height);\n index.aabb.combine(child1.aabb, child2.aabb);\n\n index = index.parent;\n }\n\n // validate();\n }\n\n removeLeaf(leaf: TreeNode): void {\n if (leaf === this.m_root) {\n this.m_root = null;\n return;\n }\n\n const parent = leaf.parent;\n const grandParent = parent.parent;\n let sibling;\n if (parent.child1 === leaf) {\n sibling = parent.child2;\n } else {\n sibling = parent.child1;\n }\n\n if (grandParent != null) {\n // Destroy parent and connect sibling to grandParent.\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\n // Adjust ancestor bounds.\n let index = grandParent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n index.aabb.combine(child1.aabb, child2.aabb);\n index.height = 1 + math_max(child1.height, child2.height);\n\n index = index.parent;\n }\n } else {\n this.m_root = sibling;\n sibling.parent = null;\n this.freeNode(parent);\n }\n\n // validate();\n }\n\n /**\n * Perform a left or right rotation if node A is imbalanced. Returns the new\n * root index.\n */\n balance(iA: TreeNode): TreeNode {\n _ASSERT && console.assert(iA != null);\n\n const A = iA;\n if (A.isLeaf() || A.height < 2) {\n return iA;\n }\n\n const B = A.child1;\n const C = A.child2;\n\n const balance = C.height - B.height;\n\n // Rotate C up\n if (balance > 1) {\n const F = C.child1;\n const G = C.child2;\n\n // Swap A and C\n C.child1 = A;\n C.parent = A.parent;\n A.parent = C;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(B.height, G.height);\n C.height = 1 + math_max(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\n A.height = 1 + math_max(B.height, F.height);\n C.height = 1 + math_max(A.height, G.height);\n }\n\n return C;\n }\n\n // Rotate B up\n if (balance < -1) {\n const D = B.child1;\n const E = B.child2;\n\n // Swap A and B\n B.child1 = A;\n B.parent = A.parent;\n A.parent = B;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(C.height, E.height);\n B.height = 1 + math_max(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\n A.height = 1 + math_max(C.height, D.height);\n B.height = 1 + math_max(A.height, E.height);\n }\n\n return B;\n }\n\n return A;\n }\n\n /**\n * Compute the height of the binary tree in O(N) time. Should not be called\n * often.\n */\n getHeight(): number {\n if (this.m_root == null) {\n return 0;\n }\n\n return this.m_root.height;\n }\n\n /**\n * Get the ratio of the sum of the node areas to the root area.\n */\n getAreaRatio(): number {\n if (this.m_root == null) {\n return 0.0;\n }\n\n const root = this.m_root;\n const rootArea = root.aabb.getPerimeter();\n\n let totalArea = 0.0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // Free node in pool\n continue;\n }\n\n totalArea += node.aabb.getPerimeter();\n }\n\n this.iteratorPool.release(it);\n\n return totalArea / rootArea;\n }\n\n /**\n * Compute the height of a sub-tree.\n */\n computeHeight(id?: number): number {\n let node;\n if (typeof id !== \"undefined\") {\n node = this.m_nodes[id];\n } else {\n node = this.m_root;\n }\n\n // _ASSERT && console.assert(0 <= id && id < this.m_nodeCapacity);\n\n if (node.isLeaf()) {\n return 0;\n }\n\n const height1 = this.computeHeight(node.child1.id);\n const height2 = this.computeHeight(node.child2.id);\n return 1 + math_max(height1, height2);\n }\n\n validateStructure(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n if (node === this.m_root) {\n _ASSERT && console.assert(node.parent == null);\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n _ASSERT && console.assert(child1.parent === node);\n _ASSERT && console.assert(child2.parent === node);\n\n this.validateStructure(child1);\n this.validateStructure(child2);\n }\n\n validateMetrics(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n const height1 = child1.height;\n const height2 = child2.height;\n const height = 1 + math_max(height1, height2);\n _ASSERT && console.assert(node.height === height);\n\n const aabb = new AABB();\n aabb.combine(child1.aabb, child2.aabb);\n\n _ASSERT && console.assert(AABB.areEqual(aabb, node.aabb));\n\n this.validateMetrics(child1);\n this.validateMetrics(child2);\n }\n\n /**\n * Validate this tree. For testing.\n */\n validate(): void {\n if (!_ASSERT) return;\n this.validateStructure(this.m_root);\n this.validateMetrics(this.m_root);\n\n console.assert(this.getHeight() === this.computeHeight());\n }\n\n /**\n * Get the maximum balance of an node in the tree. The balance is the difference\n * in height of the two children of a node.\n */\n getMaxBalance(): number {\n let maxBalance = 0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height <= 1) {\n continue;\n }\n\n _ASSERT && console.assert(!node.isLeaf());\n\n const balance = math_abs(node.child2.height - node.child1.height);\n maxBalance = math_max(maxBalance, balance);\n }\n this.iteratorPool.release(it);\n\n return maxBalance;\n }\n\n /**\n * Build an optimal tree. Very expensive. For testing.\n */\n rebuildBottomUp(): void {\n const nodes = [];\n let count = 0;\n\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // free node in pool\n continue;\n }\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\n while (count > 1) {\n let minCost = Infinity;\n let iMin = -1;\n let jMin = -1;\n for (let i = 0; i < count; ++i) {\n const aabbi = nodes[i].aabb;\n for (let j = i + 1; j < count; ++j) {\n const aabbj = nodes[j].aabb;\n const cost = AABB.combinedPerimeter(aabbi, aabbj);\n if (cost < minCost) {\n iMin = i;\n jMin = j;\n minCost = cost;\n }\n }\n }\n\n const child1 = nodes[iMin];\n const child2 = nodes[jMin];\n\n const parent = this.allocateNode();\n parent.child1 = child1;\n parent.child2 = child2;\n parent.height = 1 + math_max(child1.height, child2.height);\n parent.aabb.combine(child1.aabb, child2.aabb);\n parent.parent = null;\n\n child1.parent = parent;\n child2.parent = parent;\n\n nodes[jMin] = nodes[count - 1];\n nodes[iMin] = parent;\n --count;\n }\n\n this.m_root = nodes[0];\n\n _ASSERT && this.validate();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n const 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\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void {\n _ASSERT && console.assert(typeof queryCallback === \"function\");\n const stack = this.stackPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, aabb)) {\n if (node.isLeaf()) {\n const 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\n this.stackPool.release(stack);\n }\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n // TODO: GC\n _ASSERT && console.assert(typeof rayCastCallback === \"function\");\n const p1 = input.p1;\n const p2 = input.p2;\n const r = Vec2.sub(p2, p1);\n _ASSERT && console.assert(r.lengthSquared() > 0.0);\n r.normalize();\n\n // v is perpendicular to the segment.\n const v = Vec2.crossNumVec2(1.0, r);\n const abs_v = Vec2.abs(v);\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n\n let maxFraction = input.maxFraction;\n\n // Build a bounding box for the segment.\n const segmentAABB = new AABB();\n let t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2);\n segmentAABB.combinePoints(p1, t);\n\n const stack = this.stackPool.allocate();\n const subInput = this.inputPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, segmentAABB) === false) {\n continue;\n }\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n const c = node.aabb.getCenter();\n const h = node.aabb.getExtents();\n const separation = math_abs(Vec2.dot(v, Vec2.sub(p1, c))) - Vec2.dot(abs_v, h);\n if (separation > 0.0) {\n continue;\n }\n\n if (node.isLeaf()) {\n subInput.p1 = Vec2.clone(input.p1);\n subInput.p2 = Vec2.clone(input.p2);\n subInput.maxFraction = maxFraction;\n\n const value = rayCastCallback(subInput, node.id);\n\n if (value === 0.0) {\n // The client has terminated the ray cast.\n break;\n } else if (value > 0.0) {\n // update segment bounding box.\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\n private inputPool: Pool = new Pool({\n create(): RayCastInput {\n // tslint:disable-next-line:no-object-literal-type-assertion\n return {} as RayCastInput;\n },\n release(stack: RayCastInput): void {\n }\n });\n\n private stackPool: Pool>> = new Pool>>({\n create(): Array> {\n return [];\n },\n release(stack: Array>): void {\n stack.length = 0;\n }\n });\n\n private iteratorPool: Pool> = new Pool>({\n create(): Iterator {\n return new Iterator();\n },\n release(iterator: Iterator): void {\n iterator.close();\n }\n });\n\n}\n\n/** @internal */\nclass Iterator {\n parents: Array> = [];\n states: number[] = [];\n preorder(root: TreeNode): Iterator {\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 next(): TreeNode {\n while (this.parents.length > 0) {\n const i = this.parents.length - 1;\n const 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 close(): void {\n this.parents.length = 0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\nimport { DynamicTree, DynamicTreeQueryCallback } from \"./DynamicTree\";\nimport { FixtureProxy } from \"../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/**\n * The broad-phase wraps and extends a dynamic-tree to keep track of moved\n * objects and query them on update.\n */\nexport class BroadPhase {\n m_tree: DynamicTree = new DynamicTree();\n m_moveBuffer: number[] = [];\n\n m_callback: (userDataA: any, userDataB: any) => void;\n m_queryProxyId: number;\n\n /**\n * Get user data from a proxy. Returns null if the id is invalid.\n */\n getUserData(proxyId: number): FixtureProxy {\n return this.m_tree.getUserData(proxyId);\n }\n\n /**\n * Test overlap of fat AABBs.\n */\n testOverlap(proxyIdA: number, proxyIdB: number): boolean {\n const aabbA = this.m_tree.getFatAABB(proxyIdA);\n const aabbB = this.m_tree.getFatAABB(proxyIdB);\n return AABB.testOverlap(aabbA, aabbB);\n }\n\n /**\n * Get the fat AABB for a proxy.\n */\n getFatAABB(proxyId: number): AABB {\n return this.m_tree.getFatAABB(proxyId);\n }\n\n /**\n * Get the number of proxies.\n */\n getProxyCount(): number {\n return this.m_moveBuffer.length;\n }\n\n /**\n * Get the height of the embedded tree.\n */\n getTreeHeight(): number {\n return this.m_tree.getHeight();\n }\n\n /**\n * Get the balance (integer) of the embedded tree.\n */\n getTreeBalance(): number {\n return this.m_tree.getMaxBalance();\n }\n\n /**\n * Get the quality metric of the embedded tree.\n */\n getTreeQuality(): number {\n return this.m_tree.getAreaRatio();\n }\n\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query = (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void => {\n this.m_tree.query(aabb, queryCallback);\n };\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n this.m_tree.rayCast(input, rayCastCallback);\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_tree.shiftOrigin(newOrigin);\n }\n\n /**\n * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs\n * is called.\n */\n createProxy(aabb: AABBValue, userData: FixtureProxy): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const proxyId = this.m_tree.createProxy(aabb, userData);\n this.bufferMove(proxyId);\n return proxyId;\n }\n\n /**\n * Destroy a proxy. It is up to the client to remove any pairs.\n */\n destroyProxy(proxyId: number): void {\n this.unbufferMove(proxyId);\n this.m_tree.destroyProxy(proxyId);\n }\n\n /**\n * Call moveProxy as many times as you like, then when you are done call\n * UpdatePairs to finalized the proxy pairs (for your time step).\n */\n moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const changed = this.m_tree.moveProxy(proxyId, aabb, displacement);\n if (changed) {\n this.bufferMove(proxyId);\n }\n }\n\n /**\n * Call to trigger a re-processing of it's pairs on the next call to\n * UpdatePairs.\n */\n touchProxy(proxyId: number): void {\n this.bufferMove(proxyId);\n }\n\n bufferMove(proxyId: number): void {\n this.m_moveBuffer.push(proxyId);\n }\n\n unbufferMove(proxyId: number): void {\n for (let 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\n /**\n * Update the pairs. This results in pair callbacks. This can only add pairs.\n */\n updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void {\n _ASSERT && console.assert(typeof addPairCallback === \"function\");\n this.m_callback = addPairCallback;\n\n // Perform tree queries for all moving proxies.\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\n // We have to query the tree with the fat AABB so that\n // we don't fail to create a pair that may touch later.\n const fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId);\n\n // Query tree, create pairs and add them pair buffer.\n this.m_tree.query(fatAABB, this.queryCallback);\n }\n\n // Try to keep the tree balanced.\n // this.m_tree.rebalance(4);\n }\n\n queryCallback = (proxyId: number): boolean => {\n // A proxy cannot form a pair with itself.\n if (proxyId === this.m_queryProxyId) {\n return true;\n }\n\n const proxyIdA = math_min(proxyId, this.m_queryProxyId);\n const proxyIdB = math_max(proxyId, this.m_queryProxyId);\n\n // TODO: Skip any duplicate pairs.\n\n const userDataA = this.m_tree.getUserData(proxyIdA);\n const userDataB = this.m_tree.getUserData(proxyIdB);\n\n // Send the pairs back to the client.\n this.m_callback(userDataA, userDataB);\n\n return true;\n };\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2023 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\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_sqrt = Math.sqrt;\n\n\nimport { RotValue } from \"./Rot\";\nimport { TransformValue } from \"./Transform\";\nimport { Vec2Value } from \"./Vec2\";\nimport { Vec3Value } from \"./Vec3\";\n\nexport function vec2(x: number, y: number): Vec2Value {\n return { x, y };\n}\n\nexport function vec3(x: number, y: number, z: number): Vec3Value {\n return { x, y, z };\n}\n\nexport function rotation(angle: number): RotValue {\n return { s: math_sin(angle), c: math_cos(angle) };\n}\n\nexport function setVec2(out: Vec2Value, x: number, y: number): Vec2Value {\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function copyVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = w.x;\n out.y = w.y;\n return out;\n}\n\nexport function zeroVec2(out: Vec2Value): Vec2Value {\n out.x = 0;\n out.y = 0;\n return out;\n}\n\nexport function negVec2(out: Vec2Value): Vec2Value {\n out.x = -out.x;\n out.y = -out.y;\n return out;\n}\n\nexport function plusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x += w.x;\n out.y += w.y;\n return out;\n}\n\nexport function addVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x + w.x;\n out.y = v.x + w.y;\n return out;\n}\n\nexport function minusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x -= w.x;\n out.y -= w.y;\n return out;\n}\n\nexport function subVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x - w.x;\n out.y = v.y - w.y;\n return out;\n}\n\nexport function mulVec2(out: Vec2Value, m: number): Vec2Value {\n out.x *= m;\n out.y *= m;\n return out;\n}\n\nexport function scaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x = m * w.x;\n out.y = m * w.y;\n return out;\n}\n\nexport function plusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x += m * w.x;\n out.y += m * w.y;\n return out;\n}\n\nexport function minusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x -= m * w.x;\n out.y -= m * w.y;\n return out;\n}\n\nexport function combine2Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x;\n out.y = am * a.y + bm * b.y;\n return out;\n}\n\nexport function combine3Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value, cm: number, c: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x + cm * c.x;\n out.y = am * a.y + bm * b.y + cm * c.y;\n return out;\n}\n\nexport function normalizeVec2Length(out: Vec2Value): number {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length !== 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return length;\n}\n\nexport function normalizeVec2(out: Vec2Value): Vec2Value {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length > 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return out;\n}\n\nexport function crossVec2Num(out: Vec2Value, v: Vec2Value, w: number): Vec2Value {\n const x = w * v.y;\n const y = -w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossNumVec2(out: Vec2Value, w: number, v: Vec2Value): Vec2Value {\n const x = -w * v.y;\n const y = w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossVec2Vec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.y - a.y * b.x;\n}\n\nexport function dotVec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.x + a.y * b.y;\n}\n\nexport function lengthVec2(a: Vec2Value): number {\n return math_sqrt(a.x * a.x + a.y * a.y);\n}\n\nexport function lengthSqrVec2(a: Vec2Value): number {\n return a.x * a.x + a.y * a.y;\n}\n\nexport function distVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return math_sqrt(dx * dx + dy * dy);\n}\n\nexport function distSqrVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return dx * dx + dy * dy;\n}\n\nexport function dotVec3(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n}\n\nexport function setRotAngle(out: RotValue, a: number): RotValue {\n out.c = math_cos(a);\n out.s = math_sin(a);\n return out;\n}\n\nexport function rotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n out.x = q.c * v.x - q.s * v.y;\n out.y = q.s * v.x + q.c * v.y;\n return out;\n}\n\nexport function derotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n const x = q.c * v.x + q.s * v.y;\n const y = -q.s * v.x + q.c * v.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function rerotVec2(out: Vec2Value, before: RotValue, after: RotValue, v: Vec2Value): Vec2Value {\n const x0 = before.c * v.x + before.s * v.y;\n const y0 = -before.s * v.x + before.c * v.y;\n const x = after.c * x0 - after.s * y0;\n const y = after.s * x0 + after.c * y0;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function transform(x: number, y: number, a: number): TransformValue {\n return { p: vec2(x, y), q: rotation(a) };\n}\n\nexport function copyTransform(out: TransformValue, transform: TransformValue): TransformValue {\n out.p.x = transform.p.x;\n out.p.y = transform.p.y;\n out.q.s = transform.q.s;\n out.q.c = transform.q.c;\n return out;\n}\n\nexport function transformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const x = xf.q.c * v.x - xf.q.s * v.y + xf.p.x;\n const y = xf.q.s * v.x + xf.q.c * v.y + xf.p.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const px = v.x - xf.p.x;\n const py = v.y - xf.p.y;\n const x = (xf.q.c * px + xf.q.s * py);\n const y = (-xf.q.s * px + xf.q.c * py);\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function retransformVec2(out: Vec2Value, from: TransformValue, to: TransformValue, v: Vec2Value): Vec2Value {\n const x0 = from.q.c * v.x - from.q.s * v.y + from.p.x;\n const y0 = from.q.s * v.x + from.q.c * v.y + from.p.y;\n const px = x0 - to.p.x;\n const py = y0 - to.p.y;\n const x = to.q.c * px + to.q.s * py;\n const y = -to.q.s * px + to.q.c * py;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformTransform(out: TransformValue, a: TransformValue, b: TransformValue): TransformValue {\n const c = a.q.c * b.q.c + a.q.s * b.q.s;\n const s = a.q.c * b.q.s - a.q.s * b.q.c;\n const x = a.q.c * (b.p.x - a.p.x) + a.q.s * (b.p.y - a.p.y);\n const y = -a.q.s * (b.p.x - a.p.x) + a.q.c * (b.p.y - a.p.y);\n out.q.c = c;\n out.q.s = s;\n out.p.x = x;\n out.p.y = y;\n return out;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_atan2 = Math.atan2;\n\nexport interface RotValue {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n}\n\nexport class Rot {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n\n /** Initialize from an angle in radians. */\n constructor(angle?: number | RotValue) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Rot)) {\n return new Rot(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\n /** @hidden */\n static neo(angle: number): Rot {\n const obj = Object.create(Rot.prototype);\n obj.setAngle(angle);\n return obj;\n }\n\n static clone(rot: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n const obj = Object.create(Rot.prototype);\n obj.s = rot.s;\n obj.c = rot.c;\n return obj;\n }\n\n static identity(): Rot {\n const obj = Object.create(Rot.prototype);\n obj.s = 0.0;\n obj.c = 1.0;\n return obj;\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.s) && Number.isFinite(obj.c);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Rot.isValid(o), \"Invalid Rot!\", o);\n }\n\n /** Set to the identity rotation. */\n setIdentity(): void {\n this.s = 0.0;\n this.c = 1.0;\n }\n\n set(angle: number | RotValue): void {\n if (typeof angle === \"object\") {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n\n } else {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n }\n\n setRot(angle: RotValue): void {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n }\n\n /** Set using an angle in radians. */\n setAngle(angle: number): void {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n\n /** Get the angle in radians. */\n getAngle(): number {\n return math_atan2(this.s, this.c);\n }\n\n /** Get the x-axis. */\n getXAxis(): Vec2 {\n return Vec2.neo(this.c, this.s);\n }\n\n /** Get the y-axis. */\n getYAxis(): Vec2 {\n return Vec2.neo(-this.s, this.c);\n }\n\n /** Multiply two rotations: q * r */\n static mul(rot: RotValue, m: RotValue): Rot;\n /** Rotate a vector */\n static mul(rot: RotValue, m: Vec2Value): Vec2;\n static mul(rot, m) {\n _ASSERT && Rot.assert(rot);\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Multiply two rotations: q * r */\n static mulRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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\n /** Rotate a vector */\n static mulVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n\n static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2 {\n const x = rot.c * (v.x - w.x) - rot.s * (v.y - w.y);\n const y = rot.s * (v.x - w.x) + rot.c * (v.y - w.y);\n return Vec2.neo(x, y);\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulT(rot: RotValue, m: RotValue): Rot;\n /** Inverse rotate a vector */\n static mulT(rot: RotValue, m: Vec2Value): Vec2;\n static mulT(rot, m) {\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulTRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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\n /** Inverse rotate a vector */\n static mulTVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"./Matrix\";\nimport { mod } from \"./Math\";\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { TransformValue } from \"./Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_atan2 = Math.atan2;\n/** @internal */ const math_PI = Math.PI;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * This describes the motion of a body/shape for TOI computation. Shapes are\n * defined with respect to the body origin, which may not coincide with the\n * center of mass. However, to support dynamics we must interpolate the center\n * of mass position.\n */\nexport class Sweep {\n /** Local center of mass position */\n localCenter = Vec2.zero();\n\n /** World center position */\n c = Vec2.zero();\n\n /** World angle */\n a = 0;\n\n /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */\n alpha0 = 0;\n\n c0 = Vec2.zero();\n a0 = 0;\n\n /** @internal */\n recycle() {\n matrix.zeroVec2(this.localCenter);\n matrix.zeroVec2(this.c);\n this.a = 0;\n this.alpha0 = 0;\n matrix.zeroVec2(this.c0);\n this.a0 = 0;\n }\n\n setTransform(xf: TransformValue): void {\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n\n this.a = this.a0 = math_atan2(xf.q.s, xf.q.c);\n }\n\n setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void {\n matrix.copyVec2(this.localCenter, localCenter);\n\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n }\n\n /**\n * Get the interpolated transform at a specific time.\n *\n * @param xf\n * @param beta A factor in [0,1], where 0 indicates alpha0\n */\n getTransform(xf: TransformValue, beta: number = 0): void {\n matrix.setRotAngle(xf.q, (1.0 - beta) * this.a0 + beta * this.a);\n matrix.combine2Vec2(xf.p, (1.0 - beta), this.c0, beta, this.c);\n\n // shift to origin\n matrix.minusVec2(xf.p, matrix.rotVec2(temp, xf.q, this.localCenter));\n }\n\n /**\n * Advance the sweep forward, yielding a new initial state.\n *\n * @param alpha The new initial time\n */\n advance(alpha: number): void {\n _ASSERT && console.assert(this.alpha0 < 1.0);\n const beta = (alpha - this.alpha0) / (1.0 - this.alpha0);\n matrix.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\n forward(): void {\n this.a0 = this.a;\n matrix.copyVec2(this.c0, this.c);\n }\n\n /**\n * normalize the angles in radians to be between -pi and pi.\n */\n normalize(): void {\n const a0 = mod(this.a0, -math_PI, +math_PI);\n this.a -= this.a0 - a0;\n this.a0 = a0;\n }\n\n set(that: Sweep): void {\n matrix.copyVec2(this.localCenter, that.localCenter);\n matrix.copyVec2(this.c, that.c);\n this.a = that.a;\n this.alpha0 = that.alpha0;\n matrix.copyVec2(this.c0, that.c0);\n this.a0 = that.a0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Rot, RotValue } from \"./Rot\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport type TransformValue = {\n p: Vec2Value;\n q: RotValue;\n};\n\n/**\n * A transform contains translation and rotation. It is used to represent the\n * position and orientation of rigid frames. Initialize using a position vector\n * and a rotation.\n */\nexport class Transform {\n /** position */\n p: Vec2;\n\n /** rotation */\n q: Rot;\n\n constructor(position?: Vec2Value, rotation?: number) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Transform)) {\n return new Transform(position, rotation);\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 rotation !== \"undefined\") {\n this.q.setAngle(rotation);\n }\n }\n\n static clone(xf: Transform): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(xf.p);\n obj.q = Rot.clone(xf.q);\n return obj;\n }\n\n /** @hidden */\n static neo(position: Vec2Value, rotation: Rot): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(position);\n obj.q = Rot.clone(rotation);\n return obj;\n }\n\n static identity(): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.zero();\n obj.q = Rot.identity();\n return obj;\n }\n\n /** Set this to the identity transform */\n setIdentity(): void {\n this.p.setZero();\n this.q.setIdentity();\n }\n\n /** Set position and angle */\n set(position: Vec2Value, rotation: number): void;\n /** Copy from another transform */\n set(xf: TransformValue): void;\n set(a: any, b?: any) {\n if (typeof b === \"undefined\") {\n this.p.set(a.p);\n this.q.set(a.q);\n } else {\n this.p.set(a);\n this.q.set(b);\n }\n }\n\n /** Set position and angle */\n setNum(position: Vec2Value, rotation: number) {\n this.p.setVec2(position);\n this.q.setAngle(rotation);\n }\n\n setTransform(xf: TransformValue): void {\n this.p.setVec2(xf.p);\n this.q.setRot(xf.q);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.p) && Rot.isValid(obj.q);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Transform.isValid(o), \"Invalid Transform!\", o);\n }\n\n static mul(a: TransformValue, b: Vec2Value): Vec2;\n static mul(a: TransformValue, b: TransformValue): Transform;\n // static mul(a: Transform, b: Vec2Value[]): Vec2[];\n // static mul(a: Transform, b: Transform[]): Transform[];\n static mul(a, b) {\n if (Array.isArray(b)) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n\n } else if (\"x\" in b && \"y\" in b) {\n return Transform.mulVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulXf(a, b);\n }\n }\n\n static mulAll(a: Transform, b: Vec2Value[]): Vec2[];\n static mulAll(a: Transform, b: Transform[]): Transform[];\n static mulAll(a: TransformValue, b) {\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n }\n\n /** @hidden @deprecated */\n static mulFn(a: TransformValue) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n return function(b: Vec2Value): Vec2 {\n return Transform.mul(a, b);\n };\n }\n\n static mulVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = (a.q.c * b.x - a.q.s * b.y) + a.p.x;\n const y = (a.q.s * b.x + a.q.c * b.y) + a.p.y;\n return Vec2.neo(x, y);\n }\n\n static mulXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p\n // = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p\n const xf = Transform.identity();\n xf.q = Rot.mulRot(a.q, b.q);\n xf.p = Vec2.add(Rot.mulVec2(a.q, b.p), a.p);\n return xf;\n }\n\n static mulT(a: TransformValue, b: Vec2Value): Vec2;\n static mulT(a: TransformValue, b: TransformValue): Transform;\n static mulT(a, b) {\n if (\"x\" in b && \"y\" in b) {\n return Transform.mulTVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulTXf(a, b);\n }\n }\n\n static mulTVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const px = b.x - a.p.x;\n const py = b.y - a.p.y;\n const x = (a.q.c * px + a.q.s * py);\n const y = (-a.q.s * px + a.q.c * py);\n return Vec2.neo(x, y);\n }\n\n static mulTXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q' * (B.q * v1 + B.p - A.p)\n // = A.q' * B.q * v1 + A.q' * (B.p - A.p)\n const xf = Transform.identity();\n xf.q.setRot(Rot.mulTRot(a.q, b.q));\n xf.p.setVec2(Rot.mulTVec2(a.q, Vec2.sub(b.p, a.p)));\n return xf;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2 } from \"../common/Vec2\";\n\nexport class Velocity {\n /** linear */\n v = Vec2.zero();\n\n /** angular */\n w = 0;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n\n\nexport class Position {\n /** location */\n c = Vec2.zero();\n\n /** angle */\n a = 0;\n\n // todo: cache sin/cos\n getTransform(xf: TransformValue, p: Vec2Value): TransformValue {\n // xf.q = rotation(this.a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(this.a);\n xf.q.s = math_sin(this.a);\n xf.p.x = this.c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = this.c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n }\n}\n\nexport function getTransform(xf: TransformValue, p: Vec2Value, c: Vec2Value, a: number): TransformValue {\n // xf.q = rotation(a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(a);\n xf.q.s = math_sin(a);\n xf.p.x = c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { MassData } from \"../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"./AABB\";\nimport { DistanceProxy } from \"./Distance\";\nimport type { Transform, TransformValue } from \"../common/Transform\";\nimport type { Vec2Value } from \"../common/Vec2\";\nimport { Style } from \"../util/Testbed\";\n\n// todo make shape an interface\n\n/**\n * A shape is used for collision detection. You can create a shape however you\n * like. Shapes used for simulation in World are created automatically when a\n * Fixture is created. Shapes may encapsulate one or more child shapes.\n */\nexport abstract class Shape {\n /** @hidden */ m_type: ShapeType;\n\n /**\n * @hidden\n * Radius of a shape. For polygonal shapes this must be b2_polygonRadius.\n * There is no support for making rounded polygons.\n */\n m_radius: number;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @hidden */\n abstract _reset(): void;\n\n static isValid(obj: any): boolean {\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\n abstract getRadius(): number;\n\n /**\n * Get the type of this shape. You can use this to down cast to the concrete\n * shape.\n *\n * @return the shape type.\n */\n abstract getType(): ShapeType;\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n abstract _clone(): Shape;\n\n /**\n * Get the number of child primitives.\n */\n abstract getChildCount(): number;\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n abstract testPoint(xf: TransformValue, p: Vec2Value): boolean;\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean;\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void;\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n abstract computeMass(massData: MassData, density?: number): void;\n\n abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void;\n\n}\n\nexport type ShapeType = \"circle\" | \"edge\" | \"polygon\" | \"chain\";\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Shape, ShapeType } from \"../collision/Shape\";\nimport { Body, MassData } from \"./Body\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const synchronize_aabb1 = new AABB();\n/** @internal */ const synchronize_aabb2 = new AABB();\n/** @internal */ const displacement = matrix.vec2(0, 0);\n\n/**\n * A fixture definition is used to create a fixture. This class defines an\n * abstract fixture definition. You can reuse fixture definitions safely.\n */\nexport interface FixtureOpt {\n userData?: unknown;\n /**\n * The friction coefficient, usually in the range [0,1]\n */\n friction?: number;\n /**\n * The restitution (elasticity) usually in the range [0,1]\n */\n restitution?: number;\n /**\n * The density, usually in kg/m^2\n */\n density?: number;\n /**\n * A sensor shape collects contact information but never generates a collision response.\n */\n isSensor?: boolean;\n /**\n * Zero, positive or negative collision group.\n * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide.\n */\n filterGroupIndex?: number;\n /**\n * Collision category bit or bits that this fixture belongs to.\n * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa.\n */\n filterCategoryBits?: number;\n /**\n * Collision category bit or bits that this fixture accept for collision.\n */\n filterMaskBits?: number;\n}\n\nexport interface FixtureDef extends FixtureOpt {\n shape: Shape;\n}\n\n/** @internal */ const FixtureDefDefault: FixtureOpt = {\n userData : null,\n friction : 0.2,\n restitution : 0.0,\n density : 0.0,\n isSensor : false,\n\n filterGroupIndex : 0,\n filterCategoryBits : 0x0001,\n filterMaskBits : 0xFFFF\n};\n\n/**\n * This proxy is used internally to connect shape children to the broad-phase.\n */\nexport class FixtureProxy {\n aabb: AABB;\n fixture: Fixture;\n childIndex: number;\n proxyId: number;\n constructor(fixture: Fixture, childIndex: number) {\n this.aabb = new AABB();\n this.fixture = fixture;\n this.childIndex = childIndex;\n this.proxyId;\n }\n}\n\n/**\n * A fixture is used to attach a shape to a body for collision detection. A\n * fixture inherits its transform from its parent. Fixtures hold additional\n * non-geometric data such as friction, collision filters, etc.\n *\n * To create a new Fixture use {@link Body.createFixture}.\n */\nexport class Fixture {\n /** @internal */ m_body: Body;\n /** @internal */ m_friction: number;\n /** @internal */ m_restitution: number;\n /** @internal */ m_density: number;\n /** @internal */ m_isSensor: boolean;\n /** @internal */ m_filterGroupIndex: number;\n /** @internal */ m_filterCategoryBits: number;\n /** @internal */ m_filterMaskBits: number;\n /** @internal */ m_shape: Shape;\n /** @internal */ m_next: Fixture | null;\n /** @internal */ m_proxies: FixtureProxy[];\n // 0 indicates inactive state, this is not the same as m_proxies.length\n /** @internal */ m_proxyCount: number;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(body: Body, def: FixtureDef);\n constructor(body: Body, shape: Shape, def?: FixtureOpt);\n constructor(body: Body, shape: Shape, density?: number);\n /** @internal */\n constructor(body: Body, shape?, def?) {\n if (shape.shape) {\n def = shape;\n shape = shape.shape;\n\n } else if (typeof def === \"number\") {\n def = {density : def};\n }\n\n def = options(def, FixtureDefDefault);\n\n this.m_body = body;\n\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\n this.m_filterGroupIndex = def.filterGroupIndex;\n this.m_filterCategoryBits = def.filterCategoryBits;\n this.m_filterMaskBits = def.filterMaskBits;\n\n // TODO validate shape\n this.m_shape = shape; // .clone();\n\n this.m_next = null;\n\n this.m_proxies = [];\n this.m_proxyCount = 0;\n\n // fixture proxies are created here,\n // but they are activate in when a fixture is added to body\n const childCount = this.m_shape.getChildCount();\n for (let i = 0; i < childCount; ++i) {\n this.m_proxies[i] = new FixtureProxy(this, i);\n }\n\n this.m_userData = def.userData;\n }\n\n /** @hidden Re-setup fixture. */\n _reset(): void {\n const body = this.getBody();\n const broadPhase = body.m_world.m_broadPhase;\n this.destroyProxies(broadPhase);\n if (this.m_shape._reset) {\n this.m_shape._reset();\n }\n const childCount = this.m_shape.getChildCount();\n for (let 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\n /** @internal */\n _serialize(): object {\n return {\n friction: this.m_friction,\n restitution: this.m_restitution,\n density: this.m_density,\n isSensor: this.m_isSensor,\n\n filterGroupIndex: this.m_filterGroupIndex,\n filterCategoryBits: this.m_filterCategoryBits,\n filterMaskBits: this.m_filterMaskBits,\n\n shape: this.m_shape,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, body: any, restore: any): Fixture {\n const shape = restore(Shape, data.shape);\n const fixture = shape && new Fixture(body, shape, data);\n return fixture;\n }\n\n /**\n * Get the type of the child shape. You can use this to down cast to the\n * concrete shape.\n */\n getType(): ShapeType {\n return this.m_shape.m_type;\n }\n\n /**\n * Get the child shape. You can modify the child shape, however you should not\n * change the number of vertices because this will crash some collision caching\n * mechanisms. Manipulating the shape may lead to non-physical behavior.\n */\n getShape(): Shape {\n return this.m_shape;\n }\n\n /**\n * A sensor shape collects contact information but never generates a collision\n * response.\n */\n isSensor(): boolean {\n return this.m_isSensor;\n }\n\n /**\n * Set if this fixture is a sensor.\n */\n setSensor(sensor: boolean): void {\n if (sensor != this.m_isSensor) {\n this.m_body.setAwake(true);\n this.m_isSensor = sensor;\n }\n }\n\n // /**\n // * Get the contact filtering data.\n // */\n // getFilterData() {\n // return this.m_filter;\n // }\n\n /**\n * Get the user data that was assigned in the fixture definition. Use this to\n * store your application specific data.\n */\n getUserData(): unknown {\n return this.m_userData;\n }\n\n /**\n * Set the user data. Use this to store your application specific data.\n */\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get the parent body of this fixture. This is null if the fixture is not\n * attached.\n */\n getBody(): Body {\n return this.m_body;\n }\n\n /**\n * Get the next fixture in the parent body's fixture list.\n */\n getNext(): Fixture | null {\n return this.m_next;\n }\n\n /**\n * Get the density of this fixture.\n */\n getDensity(): number {\n return this.m_density;\n }\n\n /**\n * Set the density of this fixture. This will _not_ automatically adjust the\n * mass of the body. You must call Body.resetMassData to update the body's mass.\n */\n setDensity(density: number): void {\n _ASSERT && console.assert(Number.isFinite(density) && density >= 0.0);\n this.m_density = density;\n }\n\n /**\n * Get the coefficient of friction, usually in the range [0,1].\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Set the coefficient of friction. This will not change the friction of\n * existing contacts.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the coefficient of restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Set the coefficient of restitution. This will not change the restitution of\n * existing contacts.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Test a point in world coordinates for containment in this fixture.\n */\n testPoint(p: Vec2Value): boolean {\n return this.m_shape.testPoint(this.m_body.getTransform(), p);\n }\n\n /**\n * Cast a ray against this shape.\n */\n rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean {\n return this.m_shape.rayCast(output, input, this.m_body.getTransform(), childIndex);\n }\n\n /**\n * Get the mass data for this fixture. The mass data is based on the density and\n * the shape. The rotational inertia is about the shape's origin. This operation\n * may be expensive.\n */\n getMassData(massData: MassData): void {\n this.m_shape.computeMass(massData, this.m_density);\n }\n\n /**\n * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a\n * more accurate AABB, compute it using the shape and the body transform.\n */\n getAABB(childIndex: number): AABB {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_proxies.length);\n return this.m_proxies[childIndex].aabb;\n }\n\n /**\n * These support body activation/deactivation.\n */\n createProxies(broadPhase: BroadPhase, xf: TransformValue): void {\n _ASSERT && console.assert(this.m_proxyCount == 0);\n\n // Create proxies in the broad-phase.\n this.m_proxyCount = this.m_shape.getChildCount();\n\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n this.m_shape.computeAABB(proxy.aabb, xf, i);\n proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy);\n }\n }\n\n destroyProxies(broadPhase: BroadPhase): void {\n // Destroy proxies in the broad-phase.\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n broadPhase.destroyProxy(proxy.proxyId);\n proxy.proxyId = null;\n }\n\n this.m_proxyCount = 0;\n }\n\n /**\n * Updates this fixture proxy in broad-phase (with combined AABB of current and\n * next transformation).\n */\n synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void {\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n // Compute an AABB that covers the swept shape (may miss some rotation\n // effect).\n this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex);\n this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex);\n\n proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2);\n\n matrix.subVec2(displacement, xf2.p, xf1.p);\n\n broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement);\n }\n }\n\n /**\n * Set the contact filtering data. This will not update contacts until the next\n * time step when either parent body is active and awake. This automatically\n * calls refilter.\n */\n setFilterData(filter: { groupIndex: number, categoryBits: number, maskBits: number }): void {\n this.m_filterGroupIndex = filter.groupIndex;\n this.m_filterCategoryBits = filter.categoryBits;\n this.m_filterMaskBits = filter.maskBits;\n this.refilter();\n }\n\n getFilterGroupIndex(): number {\n return this.m_filterGroupIndex;\n }\n\n setFilterGroupIndex(groupIndex: number): void {\n this.m_filterGroupIndex = groupIndex;\n this.refilter();\n }\n\n getFilterCategoryBits(): number {\n return this.m_filterCategoryBits;\n }\n\n setFilterCategoryBits(categoryBits: number): void {\n this.m_filterCategoryBits = categoryBits;\n this.refilter();\n }\n\n getFilterMaskBits(): number {\n return this.m_filterMaskBits;\n }\n\n setFilterMaskBits(maskBits: number): void {\n this.m_filterMaskBits = maskBits;\n this.refilter();\n }\n\n /**\n * Call this if you want to establish collision that was previously disabled by\n * ContactFilter.\n */\n refilter(): void {\n if (this.m_body == null) {\n return;\n }\n\n // Flag associated contacts for filtering.\n let edge = this.m_body.getContactList();\n while (edge) {\n const contact = edge.contact;\n const fixtureA = contact.getFixtureA();\n const fixtureB = contact.getFixtureB();\n if (fixtureA == this || fixtureB == this) {\n contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n\n const world = this.m_body.getWorld();\n\n if (world == null) {\n return;\n }\n\n // Touch each proxy so that new pairs may be created\n const broadPhase = world.m_broadPhase;\n for (let i = 0; i < this.m_proxyCount; ++i) {\n broadPhase.touchProxy(this.m_proxies[i].proxyId);\n }\n }\n\n /**\n * Implement this method to provide collision filtering, if you want finer\n * control over contact creation.\n *\n * Return true if contact calculations should be performed between these two\n * fixtures.\n *\n * Warning: for performance reasons this is only called when the AABBs begin to\n * overlap.\n */\n shouldCollide(that: Fixture): boolean {\n\n if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) {\n return that.m_filterGroupIndex > 0;\n }\n\n const collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0;\n const collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0;\n const collide = collideA && collideB;\n return collide;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Velocity } from \"./Velocity\";\nimport { Position } from \"./Position\";\nimport { Fixture, FixtureDef, FixtureOpt } from \"./Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { JointEdge } from \"./Joint\";\nimport { World } from \"./World\";\nimport { ContactEdge } from \"./Contact\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nexport type BodyType = \"static\" | \"kinematic\" | \"dynamic\";\n\n/** @internal */ const STATIC = \"static\";\n/** @internal */ const KINEMATIC = \"kinematic\";\n/** @internal */ const DYNAMIC = \"dynamic\";\n\n/** @internal */ const oldCenter = matrix.vec2(0, 0);\n/** @internal */ const localCenter = matrix.vec2(0, 0);\n/** @internal */ const shift = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n\nexport interface BodyDef {\n /**\n * Body types are static, kinematic, or dynamic. Note: if a dynamic\n * body would have zero mass, the mass is set to one.\n */\n type?: BodyType;\n /**\n * The world position of the body. Avoid creating bodies at the\n * origin since this can lead to many overlapping shapes.\n */\n position?: Vec2Value;\n /**\n * The world angle of the body in radians.\n */\n angle?: number;\n /**\n * The linear velocity of the body's origin in world co-ordinates.\n */\n linearVelocity?: Vec2Value;\n angularVelocity?: number;\n /**\n * Linear damping is use to reduce the linear velocity. The\n * damping parameter can be larger than 1.0 but the damping effect becomes\n * sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n linearDamping?: number;\n /**\n * Angular damping is use to reduce the angular velocity.\n * The damping parameter can be larger than 1.0 but the damping effect\n * becomes sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n angularDamping?: number;\n /**\n * Should this body be prevented from rotating? Useful for characters.\n */\n fixedRotation?: boolean;\n /**\n * Is this a fast moving body that should be prevented from\n * tunneling through other moving bodies? Note that all bodies are\n * prevented from tunneling through kinematic and static bodies. This\n * setting is only considered on dynamic bodies. Warning: You should use\n * this flag sparingly since it increases processing time.\n */\n bullet?: boolean;\n gravityScale?: number;\n /**\n * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage.\n */\n allowSleep?: boolean;\n /**\n * Is this body initially awake or sleeping?\n */\n awake?: boolean;\n /**\n * Does this body start out active?\n */\n active?: boolean;\n userData?: any;\n}\n\n/** @internal */ const BodyDefDefault: BodyDef = {\n type : STATIC,\n position : Vec2.zero(),\n angle : 0.0,\n\n linearVelocity : Vec2.zero(),\n angularVelocity : 0.0,\n\n linearDamping : 0.0,\n angularDamping : 0.0,\n\n fixedRotation : false,\n bullet : false,\n gravityScale : 1.0,\n\n allowSleep : true,\n awake : true,\n active : true,\n\n userData : null\n};\n\n/**\n * MassData This holds the mass data computed for a shape.\n */\nexport interface MassData {\n /** The mass of the shape, usually in kilograms. */\n mass: number;\n /** The position of the shape's centroid relative to the shape's origin. */\n center: Vec2Value;\n /** The rotational inertia of the shape about the local origin. */\n I: number;\n}\n\n/**\n * A rigid body composed of one or more fixtures.\n *\n * To create a new Body use {@link World.createBody}.\n */\nexport class Body {\n /**\n * A static body does not move under simulation and behaves as if it has infinite mass.\n * Internally, zero is stored for the mass and the inverse mass.\n * Static bodies can be moved manually by the user.\n * A static body has zero velocity.\n * Static bodies do not collide with other static or kinematic bodies.\n */\n static readonly STATIC: BodyType = \"static\";\n /**\n * A kinematic body moves under simulation according to its velocity.\n * Kinematic bodies do not respond to forces.\n * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity.\n * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass.\n * Kinematic bodies do not collide with other kinematic or static bodies.\n */\n static readonly KINEMATIC: BodyType = \"kinematic\";\n\n /**\n * A dynamic body is fully simulated.\n * They can be moved manually by the user, but normally they move according to forces.\n * A dynamic body can collide with all body types.\n * A dynamic body always has finite, non-zero mass.\n * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate.\n */\n static readonly DYNAMIC: BodyType = \"dynamic\";\n\n /** @internal */ m_world: World;\n /** @internal */ m_awakeFlag: boolean;\n /** @internal */ m_autoSleepFlag: boolean;\n /** @internal */ m_bulletFlag: boolean;\n /** @internal */ m_fixedRotationFlag: boolean;\n /** @internal */ m_activeFlag: boolean;\n /** @internal */ m_islandFlag: boolean;\n /** @internal */ m_toiFlag: boolean;\n /** @internal */ m_userData: unknown;\n /** @internal */ m_type: BodyType;\n /** @internal */ m_mass: number;\n /** @internal */ m_invMass: number;\n /** @internal Rotational inertia about the center of mass. */\n m_I: number;\n /** @internal */ m_invI: number;\n /** @internal the body origin transform */\n m_xf: Transform;\n /** @internal the swept motion for CCD */\n m_sweep: Sweep;\n // position and velocity correction\n /** @internal */ c_velocity: Velocity;\n /** @internal */ c_position: Position;\n /** @internal */ m_force: Vec2;\n /** @internal */ m_torque: number;\n /** @internal */ m_linearVelocity: Vec2;\n /** @internal */ m_angularVelocity: number;\n /** @internal */ m_linearDamping: number;\n /** @internal */ m_angularDamping: number;\n /** @internal */ m_gravityScale: number;\n /** @internal */ m_sleepTime: number;\n /** @internal */ m_jointList: JointEdge | null;\n /** @internal */ m_contactList: ContactEdge | null;\n /** @internal */ m_fixtureList: Fixture | null;\n /** @internal */ m_prev: Body | null;\n /** @internal */ m_next: Body | null;\n /** @internal */ m_destroyed: boolean;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @internal */\n constructor(world: World, def: BodyDef) {\n def = options(def, BodyDefDefault);\n\n _ASSERT && console.assert(Vec2.isValid(def.position));\n _ASSERT && console.assert(Vec2.isValid(def.linearVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angle));\n _ASSERT && console.assert(Number.isFinite(def.angularVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angularDamping) && def.angularDamping >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.linearDamping) && def.linearDamping >= 0.0);\n\n this.m_world = world;\n\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\n this.m_islandFlag = false;\n this.m_toiFlag = false;\n\n this.m_userData = def.userData;\n this.m_type = def.type;\n\n if (this.m_type == DYNAMIC) {\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n } else {\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n }\n\n // Rotational inertia about the center of mass.\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n // the body origin transform\n this.m_xf = Transform.identity();\n this.m_xf.p.setVec2(def.position);\n this.m_xf.q.setAngle(def.angle);\n\n // the swept motion for CCD\n this.m_sweep = new Sweep();\n this.m_sweep.setTransform(this.m_xf);\n\n // position and velocity correction\n this.c_velocity = new Velocity();\n this.c_position = new Position();\n\n this.m_force = Vec2.zero();\n this.m_torque = 0.0;\n\n this.m_linearVelocity = Vec2.clone(def.linearVelocity);\n this.m_angularVelocity = def.angularVelocity;\n\n this.m_linearDamping = def.linearDamping;\n this.m_angularDamping = def.angularDamping;\n this.m_gravityScale = def.gravityScale;\n\n this.m_sleepTime = 0.0;\n\n this.m_jointList = null;\n this.m_contactList = null;\n this.m_fixtureList = null;\n\n this.m_prev = null;\n this.m_next = null;\n\n this.m_destroyed = false;\n }\n\n /** @internal */\n _serialize(): object {\n const fixtures = [];\n for (let 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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): Body {\n const body = new Body(world, data);\n\n if (data.fixtures) {\n for (let i = data.fixtures.length - 1; i >= 0; i--) {\n const fixture = restore(Fixture, data.fixtures[i], body);\n body._addFixture(fixture);\n }\n }\n return body;\n }\n\n isWorldLocked(): boolean {\n return this.m_world && this.m_world.isLocked() ? true : false;\n }\n\n getWorld(): World {\n return this.m_world;\n }\n\n getNext(): Body | null {\n return this.m_next;\n }\n\n setUserData(data: any): void {\n this.m_userData = data;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n getFixtureList(): Fixture | null {\n return this.m_fixtureList;\n }\n\n getJointList(): JointEdge | null {\n return this.m_jointList;\n }\n\n /**\n * Warning: this list changes during the time step and you may miss some\n * collisions if you don't use ContactListener.\n */\n getContactList(): ContactEdge | null {\n return this.m_contactList;\n }\n\n isStatic(): boolean {\n return this.m_type == STATIC;\n }\n\n isDynamic(): boolean {\n return this.m_type == DYNAMIC;\n }\n\n isKinematic(): boolean {\n return this.m_type == KINEMATIC;\n }\n\n /**\n * This will alter the mass and velocity.\n */\n setStatic(): Body {\n this.setType(STATIC);\n return this;\n }\n\n setDynamic(): Body {\n this.setType(DYNAMIC);\n return this;\n }\n\n setKinematic(): Body {\n this.setType(KINEMATIC);\n return this;\n }\n\n /**\n * Get the type of the body.\n */\n getType(): BodyType {\n return this.m_type;\n }\n\n /**\n * Set the type of the body to \"static\", \"kinematic\" or \"dynamic\".\n * @param type The type of the body.\n */\n setType(type: BodyType): void {\n _ASSERT && console.assert(type === STATIC || type === KINEMATIC || type === DYNAMIC);\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type == type) {\n return;\n }\n\n this.m_type = type;\n\n this.resetMassData();\n\n if (this.m_type == STATIC) {\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_sweep.forward();\n this.synchronizeFixtures();\n }\n\n this.setAwake(true);\n\n this.m_force.setZero();\n this.m_torque = 0.0;\n\n // Delete the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n\n // Touch the proxies so that new contacts will be created (when appropriate)\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n for (let i = 0; i < f.m_proxyCount; ++i) {\n broadPhase.touchProxy(f.m_proxies[i].proxyId);\n }\n }\n }\n\n isBullet(): boolean {\n return this.m_bulletFlag;\n }\n\n /**\n * Should this body be treated like a bullet for continuous collision detection?\n */\n setBullet(flag: boolean): void {\n this.m_bulletFlag = !!flag;\n }\n\n isSleepingAllowed(): boolean {\n return this.m_autoSleepFlag;\n }\n\n setSleepingAllowed(flag: boolean): void {\n this.m_autoSleepFlag = !!flag;\n if (this.m_autoSleepFlag == false) {\n this.setAwake(true);\n }\n }\n\n isAwake(): boolean {\n return this.m_awakeFlag;\n }\n\n /**\n * Set the sleep state of the body. A sleeping body has very low CPU cost.\n *\n * @param flag Set to true to wake the body, false to put it to sleep.\n */\n setAwake(flag: boolean): void {\n if (flag) {\n this.m_awakeFlag = true;\n this.m_sleepTime = 0.0;\n } else {\n this.m_awakeFlag = false;\n this.m_sleepTime = 0.0;\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_force.setZero();\n this.m_torque = 0.0;\n }\n }\n\n isActive(): boolean {\n return this.m_activeFlag;\n }\n\n /**\n * Set the active state of the body. An inactive body is not simulated and\n * cannot be collided with or woken up. If you pass a flag of true, all fixtures\n * will be added to the broad-phase. If you pass a flag of false, all fixtures\n * will be removed from the broad-phase and all contacts will be destroyed.\n * Fixtures and joints are otherwise unaffected.\n *\n * You may continue to create/destroy fixtures and joints on inactive bodies.\n * Fixtures on an inactive body are implicitly inactive and will not participate\n * in collisions, ray-casts, or queries. Joints connected to an inactive body\n * are implicitly inactive. An inactive body is still owned by a World object\n * and remains\n */\n setActive(flag: boolean): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (flag == this.m_activeFlag) {\n return;\n }\n\n this.m_activeFlag = !!flag;\n\n if (this.m_activeFlag) {\n // Create all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.createProxies(broadPhase, this.m_xf);\n }\n\t\t // Contacts are created at the beginning of the next\n\t\t this.m_world.m_newFixture = true;\n } else {\n // Destroy all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.destroyProxies(broadPhase);\n }\n\n // Destroy the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n }\n }\n\n isFixedRotation(): boolean {\n return this.m_fixedRotationFlag;\n }\n\n /**\n * Set this body to have fixed rotation. This causes the mass to be reset.\n */\n setFixedRotation(flag: boolean): void {\n if (this.m_fixedRotationFlag == flag) {\n return;\n }\n\n this.m_fixedRotationFlag = !!flag;\n\n this.m_angularVelocity = 0.0;\n\n this.resetMassData();\n }\n\n /**\n * Get the world transform for the body's origin.\n */\n getTransform(): Transform {\n return this.m_xf;\n }\n\n /**\n * Set the position of the body's origin and rotation. Manipulating a body's\n * transform may cause non-physical behavior. Note: contacts are updated on the\n * next call to World.step.\n *\n * @param position The world position of the body's local origin.\n * @param angle The world rotation in radians.\n */\n setTransform(position: Vec2Value, angle: number): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n this.m_xf.setNum(position, angle);\n this.m_sweep.setTransform(this.m_xf);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let 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\n synchronizeTransform(): void {\n this.m_sweep.getTransform(this.m_xf, 1);\n }\n\n /**\n * Update fixtures in broad-phase.\n */\n synchronizeFixtures(): void {\n this.m_sweep.getTransform(xf, 0);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.synchronize(broadPhase, xf, this.m_xf);\n }\n }\n\n /**\n * Used in TOI.\n */\n advance(alpha: number): void {\n // Advance to the new safe time. This doesn't sync the broad-phase.\n this.m_sweep.advance(alpha);\n matrix.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\n /**\n * Get the world position for the body's origin.\n */\n getPosition(): Vec2 {\n return this.m_xf.p;\n }\n\n setPosition(p: Vec2Value): void {\n this.setTransform(p, this.m_sweep.a);\n }\n\n /**\n * Get the current world rotation angle in radians.\n */\n getAngle(): number {\n return this.m_sweep.a;\n }\n\n setAngle(angle: number): void {\n this.setTransform(this.m_xf.p, angle);\n }\n\n /**\n * Get the world position of the center of mass.\n */\n getWorldCenter(): Vec2 {\n return this.m_sweep.c;\n }\n\n /**\n * Get the local position of the center of mass.\n */\n getLocalCenter(): Vec2 {\n return this.m_sweep.localCenter;\n }\n\n /**\n * Get the linear velocity of the center of mass.\n *\n * @return the linear velocity of the center of mass.\n */\n getLinearVelocity(): Vec2 {\n return this.m_linearVelocity;\n }\n\n /**\n * Get the world linear velocity of a world point attached to this body.\n *\n * @param worldPoint A point in world coordinates.\n */\n getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2 {\n const localCenter = Vec2.sub(worldPoint, this.m_sweep.c);\n return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity,\n localCenter));\n }\n\n /**\n * Get the world velocity of a local point.\n *\n * @param localPoint A point in local coordinates.\n */\n getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2 {\n return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint));\n }\n\n /**\n * Set the linear velocity of the center of mass.\n *\n * @param v The new linear velocity of the center of mass.\n */\n setLinearVelocity(v: Vec2Value): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (Vec2.dot(v, v) > 0.0) {\n this.setAwake(true);\n }\n this.m_linearVelocity.setVec2(v);\n }\n\n /**\n * Get the angular velocity.\n *\n * @returns the angular velocity in radians/second.\n */\n getAngularVelocity(): number {\n return this.m_angularVelocity;\n }\n\n /**\n * Set the angular velocity.\n *\n * @param omega The new angular velocity in radians/second.\n */\n setAngularVelocity(w: number): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (w * w > 0.0) {\n this.setAwake(true);\n }\n this.m_angularVelocity = w;\n }\n\n getLinearDamping(): number {\n return this.m_linearDamping;\n }\n\n setLinearDamping(linearDamping: number): void {\n this.m_linearDamping = linearDamping;\n }\n\n getAngularDamping(): number {\n return this.m_angularDamping;\n }\n\n setAngularDamping(angularDamping: number): void {\n this.m_angularDamping = angularDamping;\n }\n\n getGravityScale(): number {\n return this.m_gravityScale;\n }\n\n /**\n * Scale the gravity applied to this body.\n */\n setGravityScale(scale: number): void {\n this.m_gravityScale = scale;\n }\n\n /**\n * Get the total mass of the body.\n *\n * @returns The mass, usually in kilograms (kg).\n */\n getMass(): number {\n return this.m_mass;\n }\n\n /**\n * Get the rotational inertia of the body about the local origin.\n *\n * @return the rotational inertia, usually in kg-m^2.\n */\n getInertia(): number {\n return this.m_I + this.m_mass\n * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter);\n }\n\n /**\n * Copy the mass data of the body to data.\n */\n getMassData(data: MassData): void {\n data.mass = this.m_mass;\n data.I = this.getInertia();\n matrix.copyVec2(data.center, this.m_sweep.localCenter);\n }\n\n /**\n * This resets the mass properties to the sum of the mass properties of the\n * fixtures. This normally does not need to be called unless you called\n * SetMassData to override the mass and you later want to reset the mass.\n */\n resetMassData(): void {\n // Compute mass data from shapes. Each shape has its own density.\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n matrix.zeroVec2(this.m_sweep.localCenter);\n\n // Static and kinematic bodies have zero mass.\n if (this.isStatic() || this.isKinematic()) {\n matrix.copyVec2(this.m_sweep.c0, this.m_xf.p);\n matrix.copyVec2(this.m_sweep.c, this.m_xf.p);\n this.m_sweep.a0 = this.m_sweep.a;\n return;\n }\n\n _ASSERT && console.assert(this.isDynamic());\n\n // Accumulate mass over all fixtures.\n matrix.zeroVec2(localCenter);\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n if (f.m_density == 0.0) {\n continue;\n }\n\n const massData: MassData = {\n mass: 0,\n center: matrix.vec2(0, 0),\n I: 0\n };\n f.getMassData(massData);\n this.m_mass += massData.mass;\n matrix.plusScaleVec2(localCenter, massData.mass, massData.center);\n this.m_I += massData.I;\n }\n\n // Compute center of mass.\n if (this.m_mass > 0.0) {\n this.m_invMass = 1.0 / this.m_mass;\n matrix.scaleVec2(localCenter, this.m_invMass, localCenter);\n\n } else {\n // Force all dynamic bodies to have a positive mass.\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n }\n\n if (this.m_I > 0.0 && this.m_fixedRotationFlag == false) {\n // Center the inertia about the center of mass.\n this.m_I -= this.m_mass * matrix.dotVec2(localCenter, localCenter);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n\n } else {\n this.m_I = 0.0;\n this.m_invI = 0.0;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(localCenter, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Set the mass properties to override the mass properties of the fixtures. Note\n * that this changes the center of mass position. Note that creating or\n * destroying fixtures can also alter the mass. This function has no effect if\n * the body isn't dynamic.\n *\n * @param massData The mass properties.\n */\n setMassData(massData: MassData): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n this.m_mass = massData.mass;\n if (this.m_mass <= 0.0) {\n this.m_mass = 1.0;\n }\n\n this.m_invMass = 1.0 / this.m_mass;\n\n if (massData.I > 0.0 && this.m_fixedRotationFlag == false) {\n this.m_I = massData.I - this.m_mass * matrix.dotVec2(massData.center, massData.center);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(massData.center, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Apply a force at a world point. If the force is not applied at the center of\n * mass, it will generate a torque and affect the angular velocity. This wakes\n * up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyForce(force: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping.\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), force);\n }\n }\n\n /**\n * Apply a force to the center of mass. This wakes up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param wake Also wake up the body\n */\n applyForceToCenter(force: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n }\n }\n\n /**\n * Apply a torque. This affects the angular velocity without affecting the\n * linear velocity of the center of mass. This wakes up the body.\n *\n * @param torque About the z-axis (out of the screen), usually in N-m.\n * @param wake Also wake up the body\n */\n applyTorque(torque: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_torque += torque;\n }\n }\n\n /**\n * Apply an impulse at a point. This immediately modifies the velocity. It also\n * modifies the angular velocity if the point of application is not at the\n * center of mass. This wakes up the body.\n *\n * @param impulse The world impulse vector, usually in N-seconds or kg-m/s.\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n\n // Don't accumulate velocity if the body is sleeping\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(point, this.m_sweep.c), impulse);\n }\n }\n\n /**\n * Apply an angular impulse.\n *\n * @param impulse The angular impulse in units of kg*m*m/s\n * @param wake Also wake up the body\n */\n applyAngularImpulse(impulse: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate velocity if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_angularVelocity += this.m_invI * impulse;\n }\n }\n\n /**\n * This is used to test if two bodies should collide.\n * \n * Bodies do not collide when:\n * - Neither of them is dynamic\n * - They are connected by a joint with collideConnected == false\n */\n shouldCollide(that: Body): boolean {\n // At least one body should be dynamic.\n if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) {\n return false;\n }\n // Does a joint prevent collision?\n for (let 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\n /** @internal Used for deserialize. */\n _addFixture(fixture: Fixture): Fixture {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.createProxies(broadPhase, this.m_xf);\n }\n\n fixture.m_next = this.m_fixtureList;\n this.m_fixtureList = fixture;\n\n // Adjust mass properties if needed.\n if (fixture.m_density > 0.0) {\n this.resetMassData();\n }\n\n // Let the world know we have a new fixture. This will cause new contacts\n // to be created at the beginning of the next time step.\n this.m_world.m_newFixture = true;\n\n return fixture;\n }\n\n /**\n * Creates a fixture and attach it to this body.\n *\n * If the density is non-zero, this function automatically updates the mass of\n * the body.\n *\n * Contacts are not created until the next time step.\n *\n * Warning: This function is locked during callbacks.\n */\n createFixture(def: FixtureDef): Fixture;\n createFixture(shape: Shape, opt?: FixtureOpt): Fixture;\n createFixture(shape: Shape, density?: number): Fixture;\n // tslint:disable-next-line:typedef\n createFixture(shape, fixdef?) {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n const fixture = new Fixture(this, shape, fixdef);\n this._addFixture(fixture);\n return fixture;\n }\n\n /**\n * Destroy a fixture. This removes the fixture from the broad-phase and destroys\n * all contacts associated with this fixture. This will automatically adjust the\n * mass of the body if the body is dynamic and the fixture has positive density.\n * All fixtures attached to a body are implicitly destroyed when the body is\n * destroyed.\n *\n * Warning: This function is locked during callbacks.\n *\n * @param fixture The fixture to be removed.\n */\n destroyFixture(fixture: Fixture): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n _ASSERT && console.assert(fixture.m_body == this);\n\n // Remove the fixture from this body's singly linked list.\n let found = false;\n if (this.m_fixtureList === fixture) {\n this.m_fixtureList = fixture.m_next;\n found = true;\n\n } else {\n let node = this.m_fixtureList;\n while (node != null) {\n if (node.m_next === fixture) {\n node.m_next = fixture.m_next;\n found = true;\n break;\n }\n node = node.m_next;\n }\n }\n\n // You tried to remove a shape that is not attached to this body.\n _ASSERT && console.assert(found);\n\n // Destroy any contacts associated with the fixture.\n let edge = this.m_contactList;\n while (edge) {\n const c = edge.contact;\n edge = edge.next;\n\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n\n if (fixture == fixtureA || fixture == fixtureB) {\n // This destroys the contact and removes it from\n // this body's contact list.\n this.m_world.destroyContact(c);\n }\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.destroyProxies(broadPhase);\n }\n\n fixture.m_body = null;\n fixture.m_next = null;\n\n this.m_world.publish(\"remove-fixture\", fixture);\n\n // Reset the mass data.\n this.resetMassData();\n }\n\n /**\n * Get the corresponding world point of a local point.\n */\n getWorldPoint(localPoint: Vec2Value): Vec2 {\n return Transform.mulVec2(this.m_xf, localPoint);\n }\n\n /**\n * Get the corresponding world vector of a local vector.\n */\n getWorldVector(localVector: Vec2Value): Vec2 {\n return Rot.mulVec2(this.m_xf.q, localVector);\n }\n\n /**\n * Gets the corresponding local point of a world point.\n */\n getLocalPoint(worldPoint: Vec2Value): Vec2 {\n return Transform.mulTVec2(this.m_xf, worldPoint);\n }\n\n /**\n * Gets the corresponding local vector of a world vector.\n */\n getLocalVector(worldVector: Vec2Value): Vec2 {\n return Rot.mulTVec2(this.m_xf.q, worldVector);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2, Vec2Value } from \"../common/Vec2\";\nimport type { Body } from \"./Body\";\nimport { TimeStep } from \"./Solver\";\nimport { Style } from \"../util/Testbed\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/**\n * A joint edge is used to connect bodies and joints together in a joint graph\n * where each body is a node and each joint is an edge. A joint edge belongs to\n * a doubly linked list maintained in each attached body. Each joint has two\n * joint nodes, one for each attached body.\n */\nexport class JointEdge {\n /**\n * provides quick access to the other body attached.\n */\n other: Body | null = null;\n /**\n * the joint\n */\n joint: Joint | null = null;\n /**\n * prev the previous joint edge in the body's joint list\n */\n prev: JointEdge | null = null;\n /**\n * the next joint edge in the body's joint list\n */\n next: JointEdge | null = null;\n}\n\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointOpt {\n /**\n * Use this to attach application specific data to your joints.\n */\n userData?: any;\n /**\n * Set this flag to true if the attached bodies\n * should collide.\n */\n collideConnected?: boolean;\n}\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointDef extends JointOpt {\n /**\n * The first attached body.\n */\n bodyA: Body;\n /**\n * The second attached body.\n */\n bodyB: Body;\n}\n\n/** @internal */ const DEFAULTS = {\n userData : null,\n collideConnected : false\n};\n\n/**\n * The base joint class. Joints are used to constraint two bodies together in\n * various fashions. Some joints also feature limits and motors.\n */\nexport abstract class Joint {\n\n /** @internal */ m_type: string = \"unknown-joint\";\n\n /** @internal */ m_bodyA: Body;\n /** @internal */ m_bodyB: Body;\n\n /** @internal */ m_collideConnected: boolean;\n\n /** @internal */ m_prev: Joint | null = null;\n /** @internal */ m_next: Joint | null = null;\n\n /** @internal */ m_edgeA: JointEdge = new JointEdge();\n /** @internal */ m_edgeB: JointEdge = new JointEdge();\n\n /** @internal */ m_islandFlag: boolean = false;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(def: JointDef);\n constructor(def: JointOpt, bodyA: Body, bodyB: Body);\n constructor(def: JointDef | JointOpt, bodyA?: Body, bodyB?: Body) {\n bodyA = \"bodyA\" in def ? def.bodyA : bodyA;\n bodyB = \"bodyB\" in def ? def.bodyB : bodyB;\n\n _ASSERT && console.assert(!!bodyA);\n _ASSERT && console.assert(!!bodyB);\n _ASSERT && console.assert(bodyA != bodyB);\n\n this.m_bodyA = bodyA!;\n this.m_bodyB = bodyB!;\n\n this.m_collideConnected = !!def.collideConnected;\n this.m_userData = def.userData;\n }\n\n /**\n * Short-cut function to determine if either body is inactive.\n */\n isActive(): boolean {\n return this.m_bodyA.isActive() && this.m_bodyB.isActive();\n }\n\n /**\n * Get the type of the concrete joint.\n */\n getType(): string {\n return this.m_type;\n }\n\n /**\n * Get the first body attached to this joint.\n */\n getBodyA(): Body {\n return this.m_bodyA;\n }\n\n /**\n * Get the second body attached to this joint.\n */\n getBodyB(): Body {\n return this.m_bodyB;\n }\n\n /**\n * Get the next joint the world joint list.\n */\n getNext(): Joint {\n return this.m_next;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get collide connected. Note: modifying the collide connect flag won't work\n * correctly because the flag is only checked when fixture AABBs begin to\n * overlap.\n */\n getCollideConnected(): boolean {\n return this.m_collideConnected;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n abstract getAnchorA(): Vec2;\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n abstract getAnchorB(): Vec2;\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n abstract getReactionForce(inv_dt: number): Vec2;\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n abstract getReactionTorque(inv_dt: number): number;\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {}\n\n abstract initVelocityConstraints(step: TimeStep): void;\n\n abstract solveVelocityConstraints(step: TimeStep): void;\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n abstract solvePositionConstraints(step: TimeStep): boolean;\n\n /**\n * @hidden @experimental\n * Update joint with new props.\n */\n abstract _reset(def: Partial): void;\n\n /**\n * @internal @deprecated\n * Temporary for backward compatibility, will be removed.\n */\n _resetAnchors(def: any): void {\n return this._reset(def);\n }\n}\n","/** @hidden */\nexport const stats = {\n gjkCalls: 0,\n gjkIters: 0,\n gjkMaxIters: 0,\n\n toiTime: 0,\n toiMaxTime: 0,\n toiCalls: 0,\n toiIters: 0,\n toiMaxIters: 0,\n toiRootIters: 0,\n toiMaxRootIters: 0,\n\n toString(newline?: string): string {\n newline = typeof newline === \"string\" ? newline : \"\\n\";\n let string = \"\";\n // tslint:disable-next-line:no-for-in\n for (const name in this) {\n if (typeof this[name] !== \"function\" && typeof this[name] !== \"object\") {\n string += name + \": \" + this[name] + newline;\n }\n }\n return string;\n }\n};\n","/** @internal */\nexport const now = function(): number {\n return Date.now();\n};\n\n/** @internal */\nexport const diff = function(time: number): number {\n return Date.now() - time;\n};\n\n/** @internal */\nexport default {\n now,\n diff,\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport { Shape } from \"./Shape\";\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Transform, TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const e12 = matrix.vec2(0, 0);\n/** @internal */ const e13 = matrix.vec2(0, 0);\n/** @internal */ const e23 = matrix.vec2(0, 0);\n/** @internal */ const temp1 = matrix.vec2(0, 0);\n/** @internal */ const temp2 = matrix.vec2(0, 0);\n\n/**\n * GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates.\n */\n\nstats.gjkCalls = 0;\nstats.gjkIters = 0;\nstats.gjkMaxIters = 0;\n\n/**\n * Input for Distance. You have to option to use the shape radii in the\n * computation. Even\n */\nexport class DistanceInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n useRadii = false;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n this.useRadii = false;\n }\n}\n\n/**\n * Output for Distance.\n */\nexport class DistanceOutput {\n /** closest point on shapeA */\n pointA = matrix.vec2(0, 0);\n /** closest point on shapeB */\n pointB = matrix.vec2(0, 0);\n distance = 0;\n /** iterations number of GJK iterations used */\n iterations = 0;\n recycle() {\n matrix.zeroVec2(this.pointA);\n matrix.zeroVec2(this.pointB);\n this.distance = 0;\n this.iterations = 0;\n }\n}\n\n/**\n * Used to warm start Distance. Set count to zero on first call.\n */\nexport class SimplexCache {\n /** length or area */\n metric: number = 0;\n /** vertices on shape A */\n indexA: number[] = [];\n /** vertices on shape B */\n indexB: number[] = [];\n count: number = 0;\n recycle() {\n this.metric = 0;\n this.indexA.length = 0;\n this.indexB.length = 0;\n this.count = 0;\n }\n}\n\n/**\n * Compute the closest points between two shapes. Supports any combination of:\n * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On\n * the first call set SimplexCache.count to zero.\n */\nexport const Distance = function (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void {\n ++stats.gjkCalls;\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n // Initialize the simplex.\n // const simplex = new Simplex();\n simplex.recycle();\n simplex.readCache(cache, proxyA, xfA, proxyB, xfB);\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n const k_maxIters = Settings.maxDistanceIterations;\n\n // These store the vertices of the last simplex so that we\n // can check for duplicates and prevent cycling.\n const saveA = [];\n const saveB = []; // int[3]\n let saveCount = 0;\n\n // Main iteration loop.\n let iter = 0;\n while (iter < k_maxIters) {\n // Copy simplex so we can identify duplicates.\n saveCount = simplex.m_count;\n for (let i = 0; i < saveCount; ++i) {\n saveA[i] = vertices[i].indexA;\n saveB[i] = vertices[i].indexB;\n }\n\n simplex.solve();\n\n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count === 3) {\n break;\n }\n\n // Get search direction.\n const d = simplex.getSearchDirection();\n\n // Ensure the search direction is numerically fit.\n if (matrix.lengthSqrVec2(d) < EPSILON * EPSILON) {\n // The origin is probably contained by a line segment\n // or triangle. Thus the shapes are overlapped.\n\n // We can't return zero here even though there may be overlap.\n // In case the simplex is a point, segment, or triangle it is difficult\n // to determine if the origin is contained in the CSO or very close to it.\n break;\n }\n\n // Compute a tentative new simplex vertex using support points.\n const vertex = vertices[simplex.m_count]; // SimplexVertex\n\n vertex.indexA = proxyA.getSupport(matrix.derotVec2(temp, xfA.q, matrix.scaleVec2(temp, -1, d)));\n matrix.transformVec2(vertex.wA, xfA, proxyA.getVertex(vertex.indexA));\n\n vertex.indexB = proxyB.getSupport(matrix.derotVec2(temp, xfB.q, d));\n matrix.transformVec2(vertex.wB, xfB, proxyB.getVertex(vertex.indexB));\n\n matrix.subVec2(vertex.w, vertex.wB, vertex.wA);\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n ++stats.gjkIters;\n\n // Check for duplicate support points. This is the main termination\n // criteria.\n let duplicate = false;\n for (let i = 0; i < saveCount; ++i) {\n if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) {\n duplicate = true;\n break;\n }\n }\n\n // If we found a duplicate support point we must exit to avoid cycling.\n if (duplicate) {\n break;\n }\n\n // New vertex is ok and needed.\n ++simplex.m_count;\n }\n\n stats.gjkMaxIters = math_max(stats.gjkMaxIters, iter);\n\n // Prepare output.\n simplex.getWitnessPoints(output.pointA, output.pointB);\n output.distance = matrix.distVec2(output.pointA, output.pointB);\n output.iterations = iter;\n\n // Cache the simplex.\n simplex.writeCache(cache);\n\n // Apply radii if requested.\n if (input.useRadii) {\n const rA = proxyA.m_radius;\n const rB = proxyB.m_radius;\n\n if (output.distance > rA + rB && output.distance > EPSILON) {\n // Shapes are still no overlapped.\n // Move the witness points to the outer surface.\n output.distance -= rA + rB;\n matrix.subVec2(normal, output.pointB, output.pointA);\n matrix.normalizeVec2(normal);\n matrix.plusScaleVec2(output.pointA, rA, normal);\n matrix.minusScaleVec2(output.pointB, rB, normal);\n } else {\n // Shapes are overlapped when radii are considered.\n // Move the witness points to the middle.\n const p = matrix.subVec2(temp, output.pointA, output.pointB);\n matrix.copyVec2(output.pointA, p);\n matrix.copyVec2(output.pointB, p);\n output.distance = 0.0;\n }\n }\n};\n\n/**\n * A distance proxy is used by the GJK algorithm. It encapsulates any shape.\n */\nexport class DistanceProxy {\n /** @internal */ m_vertices: Vec2Value[] = [];\n // todo: remove this?\n /** @internal */ m_count = 0;\n /** @internal */ m_radius = 0;\n\n recycle() {\n this.m_vertices.length = 0;\n this.m_count = 0;\n this.m_radius = 0;\n }\n\n /**\n * Get the vertex count.\n */\n getVertexCount(): number {\n return this.m_count;\n }\n\n /**\n * Get a vertex by index. Used by Distance.\n */\n getVertex(index: number): Vec2Value {\n _ASSERT && console.assert(0 <= index && index < this.m_count);\n return this.m_vertices[index];\n }\n\n /**\n * Get the supporting vertex index in the given direction.\n */\n getSupport(d: Vec2Value): number {\n let bestIndex = -1;\n let bestValue = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const value = matrix.dotVec2(this.m_vertices[i], d);\n if (value > bestValue) {\n bestIndex = i;\n bestValue = value;\n }\n }\n return bestIndex;\n }\n\n /**\n * Get the supporting vertex in the given direction.\n */\n getSupportVertex(d: Vec2Value): Vec2Value {\n return this.m_vertices[this.getSupport(d)];\n }\n\n /**\n * Initialize the proxy using the given shape. The shape must remain in scope\n * while the proxy is in use.\n */\n set(shape: Shape, index: number): void {\n // TODO remove, use shape instead\n _ASSERT && console.assert(typeof shape.computeDistanceProxy === \"function\");\n shape.computeDistanceProxy(this, index);\n }\n\n /**\n * Initialize the proxy using a vertex cloud and radius. The vertices\n * must remain in scope while the proxy is in use.\n */\n setVertices(vertices: Vec2Value[], count: number, radius: number) {\n this.m_vertices = vertices;\n this.m_count = count;\n this.m_radius = radius;\n }\n}\n\nclass SimplexVertex {\n /** support point in proxyA */\n wA = matrix.vec2(0, 0);\n /** wA index */\n indexA = 0;\n\n /** support point in proxyB */\n wB = matrix.vec2(0, 0);\n /** wB index */\n indexB = 0;\n\n /** wB - wA; */\n w = matrix.vec2(0, 0);\n /** barycentric coordinate for closest point */\n a = 0;\n\n recycle() {\n this.indexA = 0;\n this.indexB = 0;\n matrix.zeroVec2(this.wA);\n matrix.zeroVec2(this.wB);\n matrix.zeroVec2(this.w);\n this.a = 0;\n }\n set(v: SimplexVertex): void {\n this.indexA = v.indexA;\n this.indexB = v.indexB;\n matrix.copyVec2(this.wA, v.wA);\n matrix.copyVec2(this.wB, v.wB);\n matrix.copyVec2(this.w, v.w);\n this.a = v.a;\n }\n}\n\n/** @internal */ const searchDirection_reuse = matrix.vec2(0, 0);\n/** @internal */ const closestPoint_reuse = matrix.vec2(0, 0); \n\nclass Simplex {\n m_v1 = new SimplexVertex();\n m_v2 = new SimplexVertex();\n m_v3 = new SimplexVertex();\n m_v = [this.m_v1, this.m_v2, this.m_v3];\n m_count: number;\n recycle() {\n this.m_v1.recycle();\n this.m_v2.recycle();\n this.m_v3.recycle();\n this.m_count = 0;\n }\n\n /** @internal */ toString(): string {\n if (this.m_count === 3) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y,\n this.m_v3.a, this.m_v3.wA.x, this.m_v3.wA.y, this.m_v3.wB.x, this.m_v3.wB.y\n ].toString();\n\n } else if (this.m_count === 2) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y\n ].toString();\n\n } else if (this.m_count === 1) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y\n ].toString();\n\n } else {\n return \"+\" + this.m_count;\n }\n }\n\n readCache(cache: SimplexCache, proxyA: DistanceProxy, transformA: TransformValue, proxyB: DistanceProxy, transformB: TransformValue): void {\n _ASSERT && console.assert(cache.count <= 3);\n\n // Copy data from cache.\n this.m_count = cache.count;\n for (let i = 0; i < this.m_count; ++i) {\n const v = this.m_v[i];\n v.indexA = cache.indexA[i];\n v.indexB = cache.indexB[i];\n const wALocal = proxyA.getVertex(v.indexA);\n const wBLocal = proxyB.getVertex(v.indexB);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 0.0;\n }\n\n // Compute the new simplex metric, if it is substantially different than\n // old metric then flush the simplex.\n if (this.m_count > 1) {\n const metric1 = cache.metric;\n const metric2 = this.getMetric();\n if (metric2 < 0.5 * metric1 || 2.0 * metric1 < metric2 || metric2 < EPSILON) {\n // Reset the simplex.\n this.m_count = 0;\n }\n }\n\n // If the cache is empty or invalid...\n if (this.m_count === 0) {\n const v = this.m_v[0];\n v.indexA = 0;\n v.indexB = 0;\n const wALocal = proxyA.getVertex(0);\n const wBLocal = proxyB.getVertex(0);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 1.0;\n this.m_count = 1;\n }\n }\n\n writeCache(cache: SimplexCache): void {\n cache.metric = this.getMetric();\n cache.count = this.m_count;\n for (let i = 0; i < this.m_count; ++i) {\n cache.indexA[i] = this.m_v[i].indexA;\n cache.indexB[i] = this.m_v[i].indexB;\n }\n }\n\n getSearchDirection(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 1:\n return matrix.setVec2(searchDirection_reuse, -v1.w.x, -v1.w.y);\n\n case 2: {\n matrix.subVec2(e12, v2.w, v1.w);\n const sgn = -matrix.crossVec2Vec2(e12, v1.w);\n if (sgn > 0.0) {\n // Origin is left of e12.\n return matrix.setVec2(searchDirection_reuse, -e12.y, e12.x);\n } else {\n // Origin is right of e12.\n return matrix.setVec2(searchDirection_reuse, e12.y, -e12.x);\n }\n }\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(searchDirection_reuse);\n }\n }\n\n getClosestPoint(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n\n case 1:\n return matrix.copyVec2(closestPoint_reuse, v1.w);\n\n case 2:\n return matrix.combine2Vec2(closestPoint_reuse, v1.a, v1.w, v2.a, v2.w);\n\n case 3:\n return matrix.zeroVec2(closestPoint_reuse);\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n }\n }\n\n getWitnessPoints(pA: Vec2Value, pB: Vec2Value): void {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n break;\n\n case 1:\n matrix.copyVec2(pA, v1.wA);\n matrix.copyVec2(pB, v1.wB);\n break;\n\n case 2:\n matrix.combine2Vec2(pA, v1.a, v1.wA, v2.a, v2.wA);\n matrix.combine2Vec2(pB, v1.a, v1.wB, v2.a, v2.wB);\n break;\n\n case 3:\n matrix.combine3Vec2(pA, v1.a, v1.wA, v2.a, v2.wA, v3.a, v3.wA);\n matrix.copyVec2(pB, pA);\n break;\n\n default:\n _ASSERT && console.assert(false);\n break;\n }\n }\n\n getMetric(): number {\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return 0.0;\n\n case 1:\n return 0.0;\n\n case 2:\n return matrix.distVec2(this.m_v1.w, this.m_v2.w);\n\n case 3:\n return matrix.crossVec2Vec2(\n matrix.subVec2(temp1, this.m_v2.w, this.m_v1.w),\n matrix.subVec2(temp2, this.m_v3.w, this.m_v1.w),\n );\n\n default:\n _ASSERT && console.assert(false);\n return 0.0;\n }\n }\n\n solve(): void {\n switch (this.m_count) {\n case 1:\n break;\n\n case 2:\n this.solve2();\n break;\n\n case 3:\n this.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n }\n\n// Solve a line segment using barycentric coordinates.\n//\n// p = a1 * w1 + a2 * w2\n// a1 + a2 = 1\n//\n// The vector from the origin to the closest point on the line is\n// perpendicular to the line.\n// e12 = w2 - w1\n// dot(p, e) = 0\n// a1 * dot(w1, e) + a2 * dot(w2, e) = 0\n//\n// 2-by-2 linear system\n// [1 1 ][a1] = [1]\n// [w1.e12 w2.e12][a2] = [0]\n//\n// Define\n// d12_1 = dot(w2, e12)\n// d12_2 = -dot(w1, e12)\n// d12 = d12_1 + d12_2\n//\n// Solution\n// a1 = d12_1 / d12\n// a2 = d12_2 / d12\n solve2(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n matrix.subVec2(e12, w2, w1);\n\n // w1 region\n const d12_2 = -matrix.dotVec2(w1, e12);\n if (d12_2 <= 0.0) {\n // a2 <= 0, so we clamp it to 0\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // w2 region\n const d12_1 = matrix.dotVec2(w2, e12);\n if (d12_1 <= 0.0) {\n // a1 <= 0, so we clamp it to 0\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // Must be in e12 region.\n const inv_d12 = 1.0 / (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\n// Possible regions:\n// - points[2]\n// - edge points[0]-points[2]\n// - edge points[1]-points[2]\n// - inside the triangle\n solve3(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n const w3 = this.m_v3.w;\n\n // Edge12\n // [1 1 ][a1] = [1]\n // [w1.e12 w2.e12][a2] = [0]\n // a3 = 0\n matrix.subVec2(e12, w2, w1);\n const w1e12 = matrix.dotVec2(w1, e12);\n const w2e12 = matrix.dotVec2(w2, e12);\n const d12_1 = w2e12;\n const d12_2 = -w1e12;\n\n // Edge13\n // [1 1 ][a1] = [1]\n // [w1.e13 w3.e13][a3] = [0]\n // a2 = 0\n matrix.subVec2(e13, w3, w1);\n const w1e13 = matrix.dotVec2(w1, e13);\n const w3e13 = matrix.dotVec2(w3, e13);\n const d13_1 = w3e13;\n const d13_2 = -w1e13;\n\n // Edge23\n // [1 1 ][a2] = [1]\n // [w2.e23 w3.e23][a3] = [0]\n // a1 = 0\n matrix.subVec2(e23, w3, w2);\n const w2e23 = matrix.dotVec2(w2, e23);\n const w3e23 = matrix.dotVec2(w3, e23);\n const d23_1 = w3e23;\n const d23_2 = -w2e23;\n\n // Triangle123\n const n123 = matrix.crossVec2Vec2(e12, e13);\n\n const d123_1 = n123 * matrix.crossVec2Vec2(w2, w3);\n const d123_2 = n123 * matrix.crossVec2Vec2(w3, w1);\n const d123_3 = n123 * matrix.crossVec2Vec2(w1, w2);\n\n // w1 region\n if (d12_2 <= 0.0 && d13_2 <= 0.0) {\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // e12\n if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) {\n const inv_d12 = 1.0 / (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\n // e13\n if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) {\n const inv_d13 = 1.0 / (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\n // w2 region\n if (d12_1 <= 0.0 && d23_2 <= 0.0) {\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // w3 region\n if (d13_1 <= 0.0 && d23_1 <= 0.0) {\n this.m_v3.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v3);\n return;\n }\n\n // e23\n if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) {\n const inv_d23 = 1.0 / (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\n // Must be in triangle123\n const inv_d123 = 1.0 / (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}\n\n/** @internal */ const simplex = new Simplex();\n\n/** @internal */ const input = new DistanceInput();\n/** @internal */ const cache = new SimplexCache();\n/** @internal */ const output = new DistanceOutput();\n\n/**\n * Determine if two generic shapes overlap.\n */\nexport const testOverlap = function (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue): boolean {\n input.recycle();\n input.proxyA.set(shapeA, indexA);\n input.proxyB.set(shapeB, indexB);\n matrix.copyTransform(input.transformA, xfA);\n matrix.copyTransform(input.transformB, xfB);\n input.useRadii = true;\n\n output.recycle();\n cache.recycle();\n\n Distance(output, cache, input);\n\n return output.distance < 10.0 * EPSILON;\n};\n\n// legacy exports\nDistance.testOverlap = testOverlap;\nDistance.Input = DistanceInput;\nDistance.Output = DistanceOutput;\nDistance.Proxy = DistanceProxy;\nDistance.Cache = SimplexCache;\n\n/**\n * Input parameters for ShapeCast\n */\nexport class ShapeCastInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n readonly translationB = Vec2.zero();\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n matrix.zeroVec2(this.translationB);\n }\n}\n\n/**\n * Output results for b2ShapeCast\n */\nexport class ShapeCastOutput {\n point: Vec2 = Vec2.zero();\n normal: Vec2 = Vec2.zero();\n lambda = 1.0;\n iterations = 0;\n}\n\n/**\n * Perform a linear shape cast of shape B moving and shape A fixed. Determines\n * the hit point, normal, and translation fraction.\n * \n * @returns true if hit, false if there is no hit or an initial overlap\n */\n//\n// GJK-raycast\n// Algorithm by Gino van den Bergen.\n// \"Smooth Mesh Contacts with GJK\" in Game Physics Pearls. 2010\nexport const ShapeCast = function(output: ShapeCastOutput, input: ShapeCastInput): boolean {\n output.iterations = 0;\n output.lambda = 1.0;\n output.normal.setZero();\n output.point.setZero();\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n\n const radiusA = math_max(proxyA.m_radius, Settings.polygonRadius);\n const radiusB = math_max(proxyB.m_radius, Settings.polygonRadius);\n const radius = radiusA + radiusB;\n\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n const r = input.translationB;\n const n = Vec2.zero();\n let lambda = 0.0;\n\n // Initial simplex\n const simplex = new Simplex();\n simplex.m_count = 0;\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n\n // Get support point in -r direction\n let indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(r)));\n let wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n let indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, r));\n let wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const v = Vec2.sub(wA, wB);\n\n // Sigma is the target distance between polygons\n const sigma = math_max(Settings.polygonRadius, radius - Settings.polygonRadius);\n const tolerance = 0.5 * Settings.linearSlop;\n\n // Main iteration loop.\n const k_maxIters = 20;\n let iter = 0;\n while (iter < k_maxIters && v.length() - sigma > tolerance) {\n _ASSERT && console.assert(simplex.m_count < 3);\n\n output.iterations += 1;\n\n // Support in direction -v (A - B)\n indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(v)));\n wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, v));\n wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const p = Vec2.sub(wA, wB);\n\n // -v is a normal at p\n v.normalize();\n\n // Intersect ray with plane\n const vp = Vec2.dot(v, p);\n const vr = Vec2.dot(v, r);\n if (vp - sigma > lambda * vr) {\n if (vr <= 0.0) {\n return false;\n }\n\n lambda = (vp - sigma) / vr;\n if (lambda > 1.0) {\n return false;\n }\n\n n.setMul(-1, v);\n simplex.m_count = 0;\n }\n\n // Reverse simplex since it works with B - A.\n // Shift by lambda * r because we want the closest point to the current clip point.\n // Note that the support point p is not shifted because we want the plane equation\n // to be formed in unshifted space.\n const vertex = vertices[simplex.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.0;\n simplex.m_count += 1;\n\n switch (simplex.m_count) {\n case 1:\n break;\n\n case 2:\n simplex.solve2();\n break;\n\n case 3:\n simplex.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n \n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count == 3) {\n // Overlap\n return false;\n }\n\n // Get search direction.\n v.setVec2(simplex.getClosestPoint());\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n }\n\n if (iter == 0) {\n // Initial overlap\n return false;\n\t}\n\n // Prepare output.\n const pointA = Vec2.zero();\n const pointB = Vec2.zero();\n simplex.getWitnessPoints(pointB, pointA);\n\n if (v.lengthSquared() > 0.0) {\n n.setMul(-1, v);\n n.normalize();\n }\n\n output.point = Vec2.combine(1, pointA, radiusA, n);\n output.normal = n;\n output.lambda = lambda;\n output.iterations = iter;\n return true;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport Timer from \"../util/Timer\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Distance, DistanceInput, DistanceOutput, DistanceProxy, SimplexCache } from \"./Distance\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\n/**\n * Input parameters for TimeOfImpact.\n */\nexport class TOIInput {\n proxyA = new DistanceProxy();\n proxyB = new DistanceProxy();\n sweepA = new Sweep();\n sweepB = new Sweep();\n /** defines sweep interval [0, tMax] */\n tMax: number;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.sweepA.recycle();\n this.sweepB.recycle();\n this.tMax = -1;\n }\n}\n\nexport enum TOIOutputState {\n e_unset = -1,\n e_unknown = 0,\n e_failed = 1,\n e_overlapped = 2,\n e_touching = 3,\n e_separated = 4,\n}\n\n/**\n * Output parameters for TimeOfImpact.\n */\nexport class TOIOutput {\n state = TOIOutputState.e_unset;\n t = -1;\n recycle() {\n this.state = TOIOutputState.e_unset;\n this.t = -1;\n }\n}\n\nstats.toiTime = 0;\nstats.toiMaxTime = 0;\nstats.toiCalls = 0;\nstats.toiIters = 0;\nstats.toiMaxIters = 0;\nstats.toiRootIters = 0;\nstats.toiMaxRootIters = 0;\n\n/** @internal */ const distanceInput = new DistanceInput();\n/** @internal */ const distanceOutput = new DistanceOutput();\n// this is passed to Distance and SeparationFunction\n/** @internal */ const cache = new SimplexCache();\n\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const axisA = matrix.vec2(0, 0);\n/** @internal */ const axisB = matrix.vec2(0, 0);\n/** @internal */ const localPointA = matrix.vec2(0, 0);\n/** @internal */ const localPointB = matrix.vec2(0, 0);\n\n\n/**\n * Compute the upper bound on time before two shapes penetrate. Time is\n * represented as a fraction between [0,tMax]. This uses a swept separating axis\n * and may miss some intermediate, non-tunneling collisions. If you change the\n * time interval, you should call this function again.\n *\n * Note: use Distance to compute the contact point and normal at the time of\n * impact.\n *\n * CCD via the local separating axis method. This seeks progression by computing\n * the largest time at which separation is maintained.\n */\nexport const TimeOfImpact = function (output: TOIOutput, input: TOIInput): void {\n const timer = Timer.now();\n\n ++stats.toiCalls;\n\n output.state = TOIOutputState.e_unknown;\n output.t = input.tMax;\n\n const proxyA = input.proxyA; // DistanceProxy\n const proxyB = input.proxyB; // DistanceProxy\n\n const sweepA = input.sweepA; // Sweep\n const sweepB = input.sweepB; // Sweep\n\n // Large rotations can make the root finder fail, so we normalize the\n // sweep angles.\n sweepA.normalize();\n sweepB.normalize();\n\n const tMax = input.tMax;\n\n const totalRadius = proxyA.m_radius + proxyB.m_radius;\n const target = math_max(Settings.linearSlop, totalRadius - 3.0 * Settings.linearSlop);\n const tolerance = 0.25 * Settings.linearSlop;\n _ASSERT && console.assert(target > tolerance);\n\n let t1 = 0.0;\n const k_maxIterations = Settings.maxTOIIterations;\n let iter = 0;\n\n // Prepare input for distance query.\n // const cache = new SimplexCache();\n cache.recycle();\n\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\n // The outer loop progressively attempts to compute new separating axes.\n // This loop terminates when an axis is repeated (no progress is made).\n while (true) {\n sweepA.getTransform(xfA, t1);\n sweepB.getTransform(xfB, t1);\n\n // Get the distance between shapes. We can also use the results\n // to get a separating axis.\n matrix.copyTransform(distanceInput.transformA, xfA);\n matrix.copyTransform(distanceInput.transformB, xfB);\n Distance(distanceOutput, cache, distanceInput);\n\n // If the shapes are overlapped, we give up on continuous collision.\n if (distanceOutput.distance <= 0.0) {\n // Failure!\n output.state = TOIOutputState.e_overlapped;\n output.t = 0.0;\n break;\n }\n\n if (distanceOutput.distance < target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n break;\n }\n\n // Initialize the separating axis.\n separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1);\n\n // if (false) {\n // // Dump the curve seen by the root finder\n // const N = 100;\n // const dx = 1.0 / N;\n // const xs = []; // [ N + 1 ];\n // const fs = []; // [ N + 1 ];\n // const x = 0.0;\n // for (const i = 0; i <= N; ++i) {\n // sweepA.getTransform(xfA, x);\n // sweepB.getTransform(xfB, x);\n // const f = fcn.evaluate(xfA, xfB) - target;\n // printf(\"%g %g\\n\", x, f);\n // xs[i] = x;\n // fs[i] = f;\n // x += dx;\n // }\n // }\n\n // Compute the TOI on the separating axis. We do this by successively\n // resolving the deepest point. This loop is bounded by the number of\n // vertices.\n let done = false;\n let t2 = tMax;\n let pushBackIter = 0;\n while (true) {\n // Find the deepest point at t2. Store the witness point indices.\n let s2 = separationFunction.findMinSeparation(t2);\n\n // Is the final configuration separated?\n if (s2 > target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_separated;\n output.t = tMax;\n done = true;\n break;\n }\n\n // Has the separation reached tolerance?\n if (s2 > target - tolerance) {\n // Advance the sweeps\n t1 = t2;\n break;\n }\n\n // Compute the initial separation of the witness points.\n let s1 = separationFunction.evaluate(t1);\n\n // Check for initial overlap. This might happen if the root finder\n // runs out of iterations.\n if (s1 < target - tolerance) {\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n done = true;\n break;\n }\n\n // Check for touching\n if (s1 <= target + tolerance) {\n // Victory! t1 should hold the TOI (could be 0.0).\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n done = true;\n break;\n }\n\n // Compute 1D root of: f(x) - target = 0\n let rootIterCount = 0;\n let a1 = t1;\n let a2 = t2;\n while (true) {\n // Use a mix of the secant rule and bisection.\n let t;\n if (rootIterCount & 1) {\n // Secant rule to improve convergence.\n t = a1 + (target - s1) * (a2 - a1) / (s2 - s1);\n } else {\n // Bisection to guarantee progress.\n t = 0.5 * (a1 + a2);\n }\n\n ++rootIterCount;\n ++stats.toiRootIters;\n\n const s = separationFunction.evaluate(t);\n\n if (math_abs(s - target) < tolerance) {\n // t2 holds a tentative value for t1\n t2 = t;\n break;\n }\n\n // Ensure we continue to bracket the root.\n if (s > target) {\n a1 = t;\n s1 = s;\n } else {\n a2 = t;\n s2 = s;\n }\n\n if (rootIterCount === 50) {\n break;\n }\n }\n\n stats.toiMaxRootIters = math_max(stats.toiMaxRootIters, rootIterCount);\n\n ++pushBackIter;\n\n if (pushBackIter === Settings.maxPolygonVertices) {\n break;\n }\n }\n\n ++iter;\n ++stats.toiIters;\n\n if (done) {\n break;\n }\n\n if (iter === k_maxIterations) {\n // Root finder got stuck. Semi-victory.\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n break;\n }\n }\n\n stats.toiMaxIters = math_max(stats.toiMaxIters, iter);\n\n const time = Timer.diff(timer);\n stats.toiMaxTime = math_max(stats.toiMaxTime, time);\n stats.toiTime += time;\n\n separationFunction.recycle();\n};\n\nenum SeparationFunctionType {\n e_unset = -1,\n e_points = 1,\n e_faceA = 2,\n e_faceB = 3,\n}\n\nclass SeparationFunction {\n // input cache\n // todo: maybe assign by copy instead of reference?\n m_proxyA: DistanceProxy = null;\n m_proxyB: DistanceProxy = null;\n m_sweepA: Sweep = null;\n m_sweepB: Sweep = null;\n\n // initialize cache\n m_type = SeparationFunctionType.e_unset;\n m_localPoint = matrix.vec2(0, 0);\n m_axis = matrix.vec2(0, 0);\n\n // compute output\n indexA = -1;\n indexB = -1;\n\n recycle() {\n this.m_proxyA = null;\n this.m_proxyB = null;\n this.m_sweepA = null;\n this.m_sweepB = null;\n\n this.m_type = SeparationFunctionType.e_unset;\n matrix.zeroVec2(this.m_localPoint);\n matrix.zeroVec2(this.m_axis);\n\n this.indexA = -1;\n this.indexB = -1;\n }\n\n // TODO_ERIN might not need to return the separation\n\n initialize(cache: SimplexCache, proxyA: DistanceProxy, sweepA: Sweep, proxyB: DistanceProxy, sweepB: Sweep, t1: number): number {\n const count = cache.count;\n _ASSERT && console.assert(0 < count && count < 3);\n\n this.m_proxyA = proxyA;\n this.m_proxyB = proxyB;\n this.m_sweepA = sweepA;\n this.m_sweepB = sweepB;\n\n this.m_sweepA.getTransform(xfA, t1);\n this.m_sweepB.getTransform(xfB, t1);\n\n if (count === 1) {\n this.m_type = SeparationFunctionType.e_points;\n const localPointA = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n matrix.subVec2(this.m_axis, pointB, pointA);\n const s = matrix.normalizeVec2Length(this.m_axis);\n return s;\n\n } else if (cache.indexA[0] === cache.indexA[1]) {\n // Two points on B and one on A.\n this.m_type = SeparationFunctionType.e_faceB;\n const localPointB1 = proxyB.getVertex(cache.indexB[0]);\n const localPointB2 = proxyB.getVertex(cache.indexB[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointB2, localPointB1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n const localPointA = proxyA.getVertex(cache.indexA[0]);\n const pointA = Transform.mulVec2(xfA, localPointA);\n\n let s = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n\n } else {\n // Two points on A and one or two points on B.\n this.m_type = SeparationFunctionType.e_faceA;\n const localPointA1 = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointA2 = this.m_proxyA.getVertex(cache.indexA[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointA2, localPointA1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n let s = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n }\n }\n\n compute(find: boolean, t: number): number {\n // It was findMinSeparation and evaluate\n this.m_sweepA.getTransform(xfA, t);\n this.m_sweepB.getTransform(xfB, t);\n\n switch (this.m_type) {\n case SeparationFunctionType.e_points: {\n if (find) {\n matrix.derotVec2(axisA, xfA.q, this.m_axis);\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, this.m_axis));\n\n this.indexA = this.m_proxyA.getSupport(axisA);\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, this.m_axis) - matrix.dotVec2(pointA, this.m_axis);\n return sep;\n }\n\n case SeparationFunctionType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexA = -1;\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n return sep;\n }\n\n case SeparationFunctionType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisA, xfA.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexB = -1;\n this.indexA = this.m_proxyA.getSupport(axisA);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.transformVec2(pointA, xfA, localPointA);\n\n const sep = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n return sep;\n }\n\n default:\n _ASSERT && console.assert(false);\n if (find) {\n this.indexA = -1;\n this.indexB = -1;\n }\n return 0.0;\n }\n }\n\n findMinSeparation(t: number): number {\n return this.compute(true, t);\n }\n\n evaluate(t: number): number {\n return this.compute(false, t);\n }\n}\n\n/** @internal */ const separationFunction = new SeparationFunction();\n\n// legacy exports\nTimeOfImpact.Input = TOIInput;\nTimeOfImpact.Output = TOIOutput;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { EPSILON } from \"../common/Math\";\nimport { Body } from \"./Body\";\nimport type { Contact } from \"./Contact\";\nimport { Joint } from \"./Joint\";\nimport { TimeOfImpact, TOIInput, TOIOutput, TOIOutputState } from \"../collision/TimeOfImpact\";\nimport { Distance, DistanceInput, DistanceOutput, SimplexCache } from \"../collision/Distance\";\nimport { World } from \"./World\";\nimport { Sweep } from \"../common/Sweep\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_min = Math.min;\n\n\nexport class TimeStep {\n /** time step */\n dt: number = 0;\n /** inverse time step (0 if dt == 0) */\n inv_dt: number = 0;\n velocityIterations: number = 0;\n positionIterations: number = 0;\n warmStarting: boolean = false;\n blockSolve: boolean = true;\n\n /** timestep ratio for variable timestep */\n inv_dt0: number = 0.0;\n /** dt * inv_dt0 */\n dtRatio: number = 1;\n\n reset(dt: number): void {\n if (this.dt > 0.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}\n\n// reuse\n/** @internal */ const s_subStep = new TimeStep();\n/** @internal */ const c = matrix.vec2(0, 0);\n/** @internal */ const v = matrix.vec2(0, 0);\n/** @internal */ const translation = matrix.vec2(0, 0);\n/** @internal */ const input = new TOIInput();\n/** @internal */ const output = new TOIOutput();\n/** @internal */ const backup = new Sweep();\n/** @internal */ const backup1 = new Sweep();\n/** @internal */ const backup2 = new Sweep();\n\n/**\n * Contact impulses for reporting. Impulses are used instead of forces because\n * sub-step forces may approach infinity for rigid body collisions. These match\n * up one-to-one with the contact points in Manifold.\n */\nexport class ContactImpulse {\n // TODO: merge with Contact class?\n\n private readonly contact: Contact;\n private readonly normals: number[];\n private readonly tangents: number[];\n\n constructor(contact: Contact) {\n this.contact = contact;\n this.normals = [];\n this.tangents = [];\n }\n\n recycle() {\n this.normals.length = 0;\n this.tangents.length = 0;\n }\n\n get normalImpulses(): number[] {\n const contact = this.contact;\n const normals = this.normals;\n normals.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n normals.push(contact.v_points[p].normalImpulse);\n }\n return normals;\n }\n\n get tangentImpulses(): number[] {\n const contact = this.contact;\n const tangents = this.tangents;\n tangents.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n tangents.push(contact.v_points[p].tangentImpulse);\n }\n return tangents;\n }\n}\n\n/**\n * Finds and solves islands. An island is a connected subset of the world.\n */\nexport class Solver {\n m_world: World;\n m_stack: Body[];\n m_bodies: Body[];\n m_contacts: Contact[];\n m_joints: Joint[];\n\n constructor(world: World) {\n this.m_world = world;\n this.m_stack = [];\n this.m_bodies = [];\n this.m_contacts = [];\n this.m_joints = [];\n }\n\n clear(): void {\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\n addBody(body: Body): void {\n _ASSERT && console.assert(body instanceof Body, \"Not a Body!\", body);\n this.m_bodies.push(body);\n // why?\n // body.c_position.c.setZero();\n // body.c_position.a = 0;\n // body.c_velocity.v.setZero();\n // body.c_velocity.w = 0;\n }\n\n addContact(contact: Contact): void {\n // _ASSERT && console.assert(contact instanceof Contact, 'Not a Contact!', contact);\n this.m_contacts.push(contact);\n }\n\n addJoint(joint: Joint): void {\n _ASSERT && console.assert(joint instanceof Joint, \"Not a Joint!\", joint);\n this.m_joints.push(joint);\n }\n\n solveWorld(step: TimeStep): void {\n const world = this.m_world;\n\n // Clear all the island flags.\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n }\n for (let c = world.m_contactList; c; c = c.m_next) {\n c.m_islandFlag = false;\n }\n for (let j = world.m_jointList; j; j = j.m_next) {\n j.m_islandFlag = false;\n }\n\n // Build and simulate all awake islands.\n const stack = this.m_stack;\n let loop = -1;\n for (let seed = world.m_bodyList; seed; seed = seed.m_next) {\n loop++;\n if (seed.m_islandFlag) {\n continue;\n }\n\n if (seed.isAwake() == false || seed.isActive() == false) {\n continue;\n }\n\n // The seed can be dynamic or kinematic.\n if (seed.isStatic()) {\n continue;\n }\n\n // Reset island and stack.\n this.clear();\n\n stack.push(seed);\n\n seed.m_islandFlag = true;\n\n // Perform a depth first search (DFS) on the constraint graph.\n while (stack.length > 0) {\n // Grab the next body off the stack and add it to the island.\n const b = stack.pop();\n _ASSERT && console.assert(b.isActive() == true);\n this.addBody(b);\n\n // Make sure the body is awake (without resetting sleep timer).\n b.m_awakeFlag = true;\n\n // To keep islands as small as possible, we don't\n // propagate islands across static bodies.\n if (b.isStatic()) {\n continue;\n }\n\n // Search all contacts connected to this body.\n for (let ce = b.m_contactList; ce; ce = ce.next) {\n const contact = ce.contact;\n\n // Has this contact already been added to an island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Is this contact solid and touching?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n this.addContact(contact);\n contact.m_islandFlag = true;\n\n const other = ce.other;\n\n // Was the other body already added to this island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n\n // Search all joints connect to this body.\n for (let je = b.m_jointList; je; je = je.next) {\n if (je.joint.m_islandFlag == true) {\n continue;\n }\n\n const other = je.other;\n\n // Don't simulate joints connected to inactive bodies.\n if (other.isActive() == false) {\n continue;\n }\n\n this.addJoint(je.joint);\n je.joint.m_islandFlag = true;\n\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n }\n\n this.solveIsland(step);\n\n // Post solve cleanup.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n // Allow static bodies to participate in other islands.\n // TODO: are they added at all?\n const b = this.m_bodies[i];\n if (b.isStatic()) {\n b.m_islandFlag = false;\n }\n }\n }\n }\n\n solveIsland(step: TimeStep): void {\n // B2: Island Solve\n const world = this.m_world;\n const gravity = world.m_gravity;\n const allowSleep = world.m_allowSleep;\n\n const h = step.dt;\n\n // Integrate velocities and apply damping. Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.m_sweep.c);\n const a = body.m_sweep.a;\n matrix.copyVec2(v, body.m_linearVelocity);\n let w = body.m_angularVelocity;\n\n // Store positions for continuous collision.\n matrix.copyVec2(body.m_sweep.c0, body.m_sweep.c);\n body.m_sweep.a0 = body.m_sweep.a;\n\n if (body.isDynamic()) {\n // Integrate velocities.\n matrix.plusScaleVec2(v, h * body.m_gravityScale, gravity);\n matrix.plusScaleVec2(v, h * body.m_invMass, body.m_force);\n w += h * body.m_invI * body.m_torque;\n /**\n *
\n         * Apply damping.\n         * ODE: dv/dt + c * v = 0\n         * Solution: v(t) = v0 * exp(-c * t)\n         * Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)\n         * v2 = exp(-c * dt) * v1\n         * Pade approximation:\n         * v2 = v1 * 1 / (1 + c * dt)\n         * 
\n */\n matrix.scaleVec2(v, 1.0 / (1.0 + h * body.m_linearDamping), v);\n w *= 1.0 / (1.0 + h * body.m_angularDamping);\n }\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(step);\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(step);\n }\n\n if (step.warmStarting) {\n // Warm start.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.warmStartConstraint(step);\n }\n }\n\n for (let i = 0; i < this.m_joints.length; ++i) {\n const joint = this.m_joints[i];\n joint.initVelocityConstraints(step);\n }\n\n // Solve velocity constraints\n for (let i = 0; i < step.velocityIterations; ++i) {\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n joint.solveVelocityConstraints(step);\n }\n\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(step);\n }\n }\n\n // Store impulses for warm starting\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.storeConstraintImpulses(step);\n }\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n // Solve position constraints\n let positionSolved = false;\n for (let i = 0; i < step.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraint(step);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -3.0 * Settings.linearSlop;\n\n let jointsOkay = true;\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n const jointOkay = joint.solvePositionConstraints(step);\n jointsOkay = jointsOkay && jointOkay;\n }\n\n if (contactsOkay && jointsOkay) {\n // Exit early if the position errors are small.\n positionSolved = true;\n break;\n }\n }\n\n // Copy state buffers back to the bodies\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(body.m_sweep.c, body.c_position.c);\n body.m_sweep.a = body.c_position.a;\n matrix.copyVec2(body.m_linearVelocity, body.c_velocity.v);\n body.m_angularVelocity = body.c_velocity.w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n\n if (allowSleep) {\n let minSleepTime = Infinity;\n\n const linTolSqr = Settings.linearSleepToleranceSqr;\n const angTolSqr = Settings.angularSleepToleranceSqr;\n\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n if (body.isStatic()) {\n continue;\n }\n\n if ((body.m_autoSleepFlag == false)\n || (body.m_angularVelocity * body.m_angularVelocity > angTolSqr)\n || (matrix.lengthSqrVec2(body.m_linearVelocity) > linTolSqr)) {\n body.m_sleepTime = 0.0;\n minSleepTime = 0.0;\n } else {\n body.m_sleepTime += h;\n minSleepTime = math_min(minSleepTime, body.m_sleepTime);\n }\n }\n\n if (minSleepTime >= Settings.timeToSleep && positionSolved) {\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.setAwake(false);\n }\n }\n }\n }\n\n /**\n * Find TOI contacts and solve them.\n */\n solveWorldTOI(step: TimeStep): void {\n const world = this.m_world;\n\n if (world.m_stepComplete) {\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n b.m_sweep.alpha0 = 0.0;\n }\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Invalidate TOI\n c.m_toiFlag = false;\n c.m_islandFlag = false;\n c.m_toiCount = 0;\n c.m_toi = 1.0;\n }\n }\n\n // Find TOI events and solve them.\n while (true) {\n // Find the first TOI.\n let minContact: Contact | null = null;\n let minAlpha = 1.0;\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Is this contact disabled?\n if (c.isEnabled() == false) {\n continue;\n }\n\n // Prevent excessive sub-stepping.\n if (c.m_toiCount > Settings.maxSubSteps) {\n continue;\n }\n\n let alpha = 1.0;\n if (c.m_toiFlag) {\n // This contact has a valid cached TOI.\n alpha = c.m_toi;\n } else {\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n // Is there a sensor?\n if (fA.isSensor() || fB.isSensor()) {\n continue;\n }\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n _ASSERT && console.assert(bA.isDynamic() || bB.isDynamic());\n\n const activeA = bA.isAwake() && !bA.isStatic();\n const activeB = bB.isAwake() && !bB.isStatic();\n\n // Is at least one body active (awake and dynamic or kinematic)?\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const collideA = bA.isBullet() || !bA.isDynamic();\n const collideB = bB.isBullet() || !bB.isDynamic();\n\n // Are these two non-bullet dynamic bodies?\n if (collideA == false && collideB == false) {\n continue;\n }\n\n // Compute the TOI for this contact.\n // Put the sweeps onto the same time interval.\n let alpha0 = bA.m_sweep.alpha0;\n\n if (bA.m_sweep.alpha0 < bB.m_sweep.alpha0) {\n alpha0 = bB.m_sweep.alpha0;\n bA.m_sweep.advance(alpha0);\n } else if (bB.m_sweep.alpha0 < bA.m_sweep.alpha0) {\n alpha0 = bA.m_sweep.alpha0;\n bB.m_sweep.advance(alpha0);\n }\n\n _ASSERT && console.assert(alpha0 < 1.0);\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const sweepA = bA.m_sweep;\n const sweepB = bB.m_sweep;\n\n // Compute the time of impact in interval [0, minTOI]\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.sweepA.set(bA.m_sweep);\n input.sweepB.set(bB.m_sweep);\n input.tMax = 1.0;\n\n TimeOfImpact(output, input);\n\n // Beta is the fraction of the remaining portion of the [time?].\n const beta = output.t;\n if (output.state == TOIOutputState.e_touching) {\n alpha = math_min(alpha0 + (1.0 - alpha0) * beta, 1.0);\n } else {\n alpha = 1.0;\n }\n\n c.m_toi = alpha;\n c.m_toiFlag = true;\n }\n\n if (alpha < minAlpha) {\n // This is the minimum TOI found so far.\n minContact = c;\n minAlpha = alpha;\n }\n }\n\n if (minContact == null || 1.0 - 10.0 * EPSILON < minAlpha) {\n // No more TOI events. Done!\n world.m_stepComplete = true;\n break;\n }\n\n // Advance the bodies to the TOI.\n const fA = minContact.getFixtureA();\n const fB = minContact.getFixtureB();\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n backup1.set(bA.m_sweep);\n backup2.set(bB.m_sweep);\n\n bA.advance(minAlpha);\n bB.advance(minAlpha);\n\n // The TOI contact likely has some new contact points.\n minContact.update(world);\n minContact.m_toiFlag = false;\n ++minContact.m_toiCount;\n\n // Is the contact solid?\n if (minContact.isEnabled() == false || minContact.isTouching() == false) {\n // Restore the sweeps.\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\n bA.setAwake(true);\n bB.setAwake(true);\n\n // Build the island\n this.clear();\n this.addBody(bA);\n this.addBody(bB);\n this.addContact(minContact);\n\n bA.m_islandFlag = true;\n bB.m_islandFlag = true;\n minContact.m_islandFlag = true;\n\n // Get contacts on bodyA and bodyB.\n const bodies = [ bA, bB ];\n for (let i = 0; i < bodies.length; ++i) {\n const body = bodies[i];\n if (body.isDynamic()) {\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n // if (this.m_bodyCount == this.m_bodyCapacity) { break; }\n // if (this.m_contactCount == this.m_contactCapacity) { break; }\n\n const contact = ce.contact;\n\n // Has this contact already been added to the island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Only add if either is static, kinematic or bullet.\n const other = ce.other;\n if (other.isDynamic() && !body.isBullet() && !other.isBullet()) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n // Tentatively advance the body to the TOI.\n backup.set(other.m_sweep);\n if (other.m_islandFlag == false) {\n other.advance(minAlpha);\n }\n\n // Update the contact points\n contact.update(world);\n\n // Was the contact disabled by the user?\n // Are there contact points?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n other.m_sweep.set(backup);\n other.synchronizeTransform();\n continue;\n }\n\n // Add the contact to the island\n contact.m_islandFlag = true;\n this.addContact(contact);\n\n // Has the other body already been added to the island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // Add the other body to the island.\n other.m_islandFlag = true;\n\n if (!other.isStatic()) {\n other.setAwake(true);\n }\n\n this.addBody(other);\n }\n }\n }\n\n s_subStep.reset((1.0 - minAlpha) * step.dt);\n s_subStep.dtRatio = 1.0;\n s_subStep.positionIterations = 20;\n s_subStep.velocityIterations = step.velocityIterations;\n s_subStep.warmStarting = false;\n\n this.solveIslandTOI(s_subStep, bA, bB);\n\n // Reset island flags and synchronize broad-phase proxies.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.m_islandFlag = false;\n\n if (!body.isDynamic()) {\n continue;\n }\n\n body.synchronizeFixtures();\n\n // Invalidate all contact TOIs on this displaced body.\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n ce.contact.m_toiFlag = false;\n ce.contact.m_islandFlag = false;\n }\n }\n\n // Commit fixture proxy movements to the broad-phase so that new contacts\n // are created.\n // Also, some contacts can be destroyed.\n world.findNewContacts();\n\n if (world.m_subStepping) {\n world.m_stepComplete = false;\n break;\n }\n }\n }\n\n solveIslandTOI(subStep: TimeStep, toiA: Body, toiB: Body): void {\n\n // Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n matrix.copyVec2(body.c_position.c, body.m_sweep.c);\n body.c_position.a = body.m_sweep.a;\n matrix.copyVec2(body.c_velocity.v, body.m_linearVelocity);\n body.c_velocity.w = body.m_angularVelocity;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(subStep);\n }\n\n // Solve position constraints.\n for (let i = 0; i < subStep.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -1.5 * Settings.linearSlop;\n if (contactsOkay) {\n break;\n }\n }\n\n if (false) {\n // Is the new position really safe?\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const c = this.m_contacts[i];\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const input = new DistanceInput();\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.transformA.set(bA.getTransform());\n input.transformB.set(bB.getTransform());\n input.useRadii = false;\n\n const output = new DistanceOutput();\n const cache = new SimplexCache();\n Distance(output, cache, input);\n\n if (output.distance == 0 || cache.count == 3) {\n cache.count += 0;\n }\n }\n }\n\n // Leap of faith to new safe state.\n matrix.copyVec2(toiA.m_sweep.c0, toiA.c_position.c);\n toiA.m_sweep.a0 = toiA.c_position.a;\n matrix.copyVec2(toiB.m_sweep.c0, toiB.c_position.c);\n toiB.m_sweep.a0 = toiB.c_position.a;\n\n // No warm starting is needed for TOI events because warm\n // starting impulses were applied in the discrete solver.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(subStep);\n }\n\n // Solve velocity constraints.\n for (let i = 0; i < subStep.velocityIterations; ++i) {\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(subStep);\n }\n }\n\n // Don't store the TOI contact forces for warm starting\n // because they can be quite large.\n\n const h = subStep.dt;\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n\n // Sync bodies\n matrix.copyVec2(body.m_sweep.c, c);\n body.m_sweep.a = a;\n matrix.copyVec2(body.m_linearVelocity, v);\n body.m_angularVelocity = w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n }\n\n /** @internal */\n postSolveIsland(): void {\n for (let c = 0; c < this.m_contacts.length; ++c) {\n const contact = this.m_contacts[c];\n this.m_world.postSolve(contact, contact.m_impulse);\n }\n }\n}\n\n// @ts-ignore\nSolver.TimeStep = TimeStep;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 2-by-2 matrix. Stored in column-major order.\n */\nexport class Mat22 {\n ex: Vec2;\n ey: Vec2;\n\n constructor(a: number, b: number, c: number, d: number);\n constructor(a: { x: number; y: number }, b: { x: number; y: number });\n constructor();\n constructor(a?, b?, c?, d?) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec2.clone(a);\n this.ey = Vec2.clone(b);\n } else if (typeof a === \"number\") {\n this.ex = Vec2.neo(a, c);\n this.ey = Vec2.neo(b, d);\n } else {\n this.ex = Vec2.zero();\n this.ey = Vec2.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat22.isValid(o), \"Invalid Mat22!\", o);\n }\n\n set(a: Mat22): void;\n set(a: Vec2Value, b: Vec2Value): void;\n set(a: number, b: number, c: number, d: number): void;\n set(a, b?, c?, d?): void {\n if (typeof a === \"number\" && typeof b === \"number\" && typeof c === \"number\"\n && typeof d === \"number\") {\n this.ex.setNum(a, c);\n this.ey.setNum(b, d);\n\n } else if (typeof a === \"object\" && typeof b === \"object\") {\n this.ex.setVec2(a);\n this.ey.setVec2(b);\n\n } else if (typeof a === \"object\") {\n _ASSERT && Mat22.assert(a);\n this.ex.setVec2(a.ex);\n this.ey.setVec2(a.ey);\n\n } else {\n _ASSERT && console.assert(false);\n }\n }\n\n setIdentity(): void {\n this.ex.x = 1.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 1.0;\n }\n\n setZero(): void {\n this.ex.x = 0.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 0.0;\n }\n\n getInverse(): Mat22 {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const imx = new Mat22();\n imx.ex.x = det * d;\n imx.ey.x = -det * b;\n imx.ex.y = -det * c;\n imx.ey.y = det * a;\n return imx;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const w = Vec2.zero();\n w.x = det * (d * v.x - b * v.y);\n w.y = det * (a * v.y - c * v.x);\n return w;\n }\n\n /**\n * Multiply a matrix times a vector. If a rotation matrix is provided, then this\n * transforms the vector from one frame to another.\n */\n static mul(mx: Mat22, my: Mat22): Mat22;\n static mul(mx: Mat22, v: Vec2Value): Vec2;\n static mul(mx, v) {\n if (v && \"x\" in v && \"y\" in v) {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n }\n\n static mulMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n /**\n * Multiply a matrix transpose times a vector. If a rotation matrix is provided,\n * then this transforms the vector from one frame to another (inverse\n * transform).\n */\n static mulT(mx: Mat22, my: Mat22): Mat22;\n static mulT(mx: Mat22, v: Vec2Value): Vec2;\n static mulT(mx, v) {\n if (v && \"x\" in v && \"y\" in v) { // Vec2\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulTVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n }\n\n static mulTMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n static abs(mx: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n return new Mat22(Vec2.abs(mx.ex), Vec2.abs(mx.ey));\n }\n\n static add(mx1: Mat22, mx2: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx1);\n _ASSERT && Mat22.assert(mx2);\n return new Mat22(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey));\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\nimport { EPSILON } from \"../common/Math\";\n\n\n/** @internal */ const math_sqrt = Math.sqrt;\n\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const dist = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n\nexport enum ManifoldType {\n e_unset = -1,\n e_circles = 0,\n e_faceA = 1,\n e_faceB = 2\n}\n\nexport enum ContactFeatureType {\n e_unset = -1,\n e_vertex = 0,\n e_face = 1\n}\n\n/**\n * This is used for determining the state of contact points.\n */\n export enum PointState {\n /** Point does not exist */\n nullState = 0,\n /** Point was added in the update */\n addState = 1,\n /** Point persisted across the update */\n persistState = 2,\n /** Point was removed in the update */\n removeState = 3\n}\n\n/**\n * Used for computing contact manifolds.\n */\n export class ClipVertex {\n v = matrix.vec2(0, 0);\n id: ContactID = new ContactID();\n\n set(o: ClipVertex): void {\n matrix.copyVec2(this.v, o.v);\n this.id.set(o.id);\n }\n recycle() {\n matrix.zeroVec2(this.v);\n this.id.recycle();\n }\n}\n\n/**\n * A manifold for two touching convex shapes. Manifolds are created in `evaluate`\n * method of Contact subclasses.\n *\n * Supported manifold types are e_faceA or e_faceB for clip point versus plane\n * with radius and e_circles point versus point with radius.\n *\n * We store contacts in this way so that position correction can account for\n * movement, which is critical for continuous physics. All contact scenarios\n * must be expressed in one of these types. This structure is stored across time\n * steps, so we keep it small.\n */\nexport class Manifold {\n type: ManifoldType;\n\n /**\n * Usage depends on manifold type:\n * - circles: not used\n * - faceA: the normal on polygonA\n * - faceB: the normal on polygonB\n */\n localNormal = matrix.vec2(0, 0);\n\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleA\n * - faceA: the center of faceA\n * - faceB: the center of faceB\n */\n localPoint = matrix.vec2(0, 0);\n\n /** The points of contact */\n points: ManifoldPoint[] = [ new ManifoldPoint(), new ManifoldPoint() ];\n\n /** The number of manifold points */\n pointCount: number = 0;\n\n set(that: Manifold): void {\n this.type = that.type;\n matrix.copyVec2(this.localNormal, that.localNormal);\n matrix.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\n recycle(): void {\n this.type = ManifoldType.e_unset;\n matrix.zeroVec2(this.localNormal);\n matrix.zeroVec2(this.localPoint);\n this.pointCount = 0;\n this.points[0].recycle();\n this.points[1].recycle();\n }\n\n /**\n * Evaluate the manifold with supplied transforms. This assumes modest motion\n * from the original state. This does not change the point count, impulses, etc.\n * The radii must come from the shapes that generated the manifold.\n */\n getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold {\n if (this.pointCount == 0) {\n return wm;\n }\n\n wm = wm || new WorldManifold();\n\n wm.pointCount = this.pointCount;\n\n const normal = wm.normal;\n const points = wm.points;\n const separations = wm.separations;\n\n switch (this.type) {\n case ManifoldType.e_circles: {\n matrix.setVec2(normal, 1.0, 0.0);\n const manifoldPoint = this.points[0];\n matrix.transformVec2(pointA, xfA, this.localPoint);\n matrix.transformVec2(pointB, xfB, manifoldPoint.localPoint);\n matrix.subVec2(dist, pointB, pointA);\n const lengthSqr = matrix.lengthSqrVec2(dist);\n if (lengthSqr > EPSILON * EPSILON) {\n const length = math_sqrt(lengthSqr);\n matrix.scaleVec2(normal, 1 / length, dist);\n }\n matrix.combine2Vec2(cA, 1, pointA, radiusA, normal);\n matrix.combine2Vec2(cB, 1, pointB, -radiusB, normal);\n matrix.combine2Vec2(points[0], 0.5, cA, 0.5, cB);\n separations[0] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.localNormal);\n matrix.transformVec2(planePoint, xfA, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfB, manifoldPoint.localPoint);\n matrix.combine2Vec2(cA, 1, clipPoint, radiusA - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cB, 1, clipPoint, -radiusB, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n }\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.localNormal);\n matrix.transformVec2(planePoint, xfB, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfA, manifoldPoint.localPoint);\n matrix.combine2Vec2(cB, 1, clipPoint, radiusB - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cA, 1, clipPoint, -radiusA, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cA, cB), normal);\n }\n // Ensure normal points from A to B.\n matrix.negVec2(normal);\n break;\n }\n }\n\n return wm;\n }\n\n static clipSegmentToLine = clipSegmentToLine;\n static ClipVertex = ClipVertex;\n static getPointStates = getPointStates;\n static PointState = PointState;\n}\n\n/**\n * A manifold point is a contact point belonging to a contact manifold. It holds\n * details related to the geometry and dynamics of the contact points.\n *\n * This structure is stored across time steps, so we keep it small.\n *\n * Note: impulses are used for internal caching and may not provide reliable\n * contact forces, especially for high speed collisions.\n */\nexport class ManifoldPoint {\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleB\n * - faceA: the local center of circleB or the clip point of polygonB\n * - faceB: the clip point of polygonA\n */\n localPoint = matrix.vec2(0, 0);\n /**\n * The non-penetration impulse\n */\n normalImpulse = 0;\n /**\n * The friction impulse\n */\n tangentImpulse = 0;\n /**\n * Uniquely identifies a contact point between two shapes to facilitate warm starting\n */\n readonly id = new ContactID();\n\n set(that: ManifoldPoint): void {\n matrix.copyVec2(this.localPoint, that.localPoint);\n this.normalImpulse = that.normalImpulse;\n this.tangentImpulse = that.tangentImpulse;\n this.id.set(that.id);\n }\n\n recycle(): void {\n matrix.zeroVec2(this.localPoint);\n this.normalImpulse = 0;\n this.tangentImpulse = 0;\n this.id.recycle();\n }\n}\n\n/**\n * Contact ids to facilitate warm starting.\n * \n * ContactFeature: The features that intersect to form the contact point.\n */\nexport class ContactID {\n\n /**\n * Used to quickly compare contact ids.\n */\n key = -1;\n\n /** ContactFeature index on shapeA */\n indexA = -1;\n\n /** ContactFeature index on shapeB */\n indexB = -1;\n\n /** ContactFeature type on shapeA */\n typeA = ContactFeatureType.e_unset;\n\n /** ContactFeature type on shapeB */\n typeB = ContactFeatureType.e_unset;\n\n setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void {\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\n set(that: ContactID): void {\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\n swapFeatures(): void {\n const indexA = this.indexA;\n const indexB = this.indexB;\n const typeA = this.typeA;\n const 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\n recycle(): void {\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}\n\n/**\n * This is used to compute the current state of a contact manifold.\n */\nexport class WorldManifold {\n /** World vector pointing from A to B */\n normal = matrix.vec2(0, 0);\n\n /** World contact point (point of intersection) */\n points = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints]\n\n /** A negative value indicates overlap, in meters */\n separations = [0, 0]; // [maxManifoldPoints]\n\n /** The number of manifold points */\n pointCount = 0;\n\n recycle() {\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.points[0]);\n matrix.zeroVec2(this.points[1]);\n this.separations[0] = 0;\n this.separations[1] = 0;\n this.pointCount = 0;\n }\n}\n\n/**\n * Compute the point states given two manifolds. The states pertain to the\n * transition from manifold1 to manifold2. So state1 is either persist or remove\n * while state2 is either add or persist.\n */\nexport function getPointStates(\n state1: PointState[],\n state2: PointState[],\n manifold1: Manifold,\n manifold2: Manifold\n): void {\n // state1, state2: PointState[Settings.maxManifoldPoints]\n\n // for (var i = 0; i < Settings.maxManifoldPoints; ++i) {\n // state1[i] = PointState.nullState;\n // state2[i] = PointState.nullState;\n // }\n\n // Detect persists and removes.\n for (let i = 0; i < manifold1.pointCount; ++i) {\n const id = manifold1.points[i].id;\n\n state1[i] = PointState.removeState;\n\n for (let 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\n // Detect persists and adds.\n for (let i = 0; i < manifold2.pointCount; ++i) {\n const id = manifold2.points[i].id;\n\n state2[i] = PointState.addState;\n\n for (let 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}\n\n/**\n * Clipping for contact manifolds. Sutherland-Hodgman clipping.\n */\nexport function clipSegmentToLine(\n vOut: ClipVertex[],\n vIn: ClipVertex[],\n normal: Vec2Value,\n offset: number,\n vertexIndexA: number\n): number {\n // Start with no output points\n let numOut = 0;\n\n // Calculate the distance of end points to the line\n const distance0 = matrix.dotVec2(normal, vIn[0].v) - offset;\n const distance1 = matrix.dotVec2(normal, vIn[1].v) - offset;\n\n // If the points are behind the plane\n if (distance0 <= 0.0)\n vOut[numOut++].set(vIn[0]);\n if (distance1 <= 0.0)\n vOut[numOut++].set(vIn[1]);\n\n // If the points are on different sides of the plane\n if (distance0 * distance1 < 0.0) {\n // Find intersection point of edge and plane\n const interp = distance0 / (distance0 - distance1);\n matrix.combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v);\n\n // VertexA is hitting edgeB.\n vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face);\n ++numOut;\n }\n\n return numOut;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { ShapeType } from \"../collision/Shape\";\nimport { clamp } from \"../common/Math\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Mat22 } from \"../common/Mat22\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Manifold, ManifoldType, WorldManifold } from \"../collision/Manifold\";\nimport { testOverlap } from \"../collision/Distance\";\nimport { Fixture } from \"./Fixture\";\nimport { Body } from \"./Body\";\nimport { ContactImpulse, TimeStep } from \"./Solver\";\nimport { Pool } from \"../util/Pool\";\nimport { getTransform } from \"./Position\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n// Solver debugging is normally disabled because the block solver sometimes has to deal with a poorly conditioned effective mass matrix.\n/** @internal */ const DEBUG_SOLVER = false;\n\n/** @internal */ const contactPool = new Pool({\n create() {\n return new Contact();\n },\n release(contact: Contact) {\n contact.recycle();\n }\n});\n\n/** @internal */ const oldManifold = new Manifold();\n\n/** @internal */ const worldManifold = new WorldManifold();\n\n/**\n * A contact edge is used to connect bodies and contacts together in a contact\n * graph where each body is a node and each contact is an edge. A contact edge\n * belongs to a doubly linked list maintained in each attached body. Each\n * contact has two contact nodes, one for each attached body.\n */\nexport class ContactEdge {\n contact: Contact;\n prev: ContactEdge | null = null;\n next: ContactEdge | null = null;\n other: Body | null = null;\n constructor(contact: Contact) {\n this.contact = contact;\n }\n\n /** @internal */\n recycle() {\n this.prev = null;\n this.next = null;\n this.other = null;\n }\n}\n\nexport type EvaluateFunction = (\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number\n) => void;\n\n/**\n * Friction mixing law. The idea is to allow either fixture to drive the\n * friction to zero. For example, anything slides on ice.\n */\nexport function mixFriction(friction1: number, friction2: number): number {\n return math_sqrt(friction1 * friction2);\n}\n\n/**\n * Restitution mixing law. The idea is allow for anything to bounce off an\n * inelastic surface. For example, a superball bounces on anything.\n */\nexport function mixRestitution(restitution1: number, restitution2: number): number {\n return restitution1 > restitution2 ? restitution1 : restitution2;\n}\n\n// TODO: move this to Settings?\n/** @internal */ const s_registers = [];\n\n// TODO: merge with ManifoldPoint?\nexport class VelocityConstraintPoint {\n rA = matrix.vec2(0, 0);\n rB = matrix.vec2(0, 0);\n normalImpulse = 0;\n tangentImpulse = 0;\n normalMass = 0;\n tangentMass = 0;\n velocityBias = 0;\n\n recycle() {\n matrix.zeroVec2(this.rA);\n matrix.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}\n\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const vA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const vB = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const rA = matrix.vec2(0, 0);\n/** @internal */ const rB = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const point = matrix.vec2(0, 0);\n/** @internal */ const dv = matrix.vec2(0, 0);\n/** @internal */ const dv1 = matrix.vec2(0, 0);\n/** @internal */ const dv2 = matrix.vec2(0, 0);\n/** @internal */ const b = matrix.vec2(0, 0);\n/** @internal */ const a = matrix.vec2(0, 0);\n/** @internal */ const x = matrix.vec2(0, 0);\n/** @internal */ const d = matrix.vec2(0, 0);\n/** @internal */ const P1 = matrix.vec2(0, 0);\n/** @internal */ const P2 = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * The class manages contact between two shapes. A contact exists for each\n * overlapping AABB in the broad-phase (except if filtered). Therefore a contact\n * object may exist that has no contact points.\n */\nexport class Contact {\n // Nodes for connecting bodies.\n /** @internal */ m_nodeA = new ContactEdge(this);\n /** @internal */ m_nodeB = new ContactEdge(this);\n /** @internal */ m_fixtureA: Fixture | null = null;\n /** @internal */ m_fixtureB: Fixture | null = null;\n /** @internal */ m_indexA = -1;\n /** @internal */ m_indexB = -1;\n /** @internal */ m_evaluateFcn: EvaluateFunction | null = null;\n /** @internal */ m_manifold: Manifold = new Manifold();\n /** @internal */ m_prev: Contact | null = null;\n /** @internal */ m_next: Contact | null = null;\n /** @internal */ m_toi = 1.0;\n /** @internal */ m_toiCount = 0;\n // This contact has a valid TOI in m_toi\n /** @internal */ m_toiFlag = false;\n /** @internal */ m_friction = 0.0;\n /** @internal */ m_restitution = 0.0;\n /** @internal */ m_tangentSpeed = 0.0;\n /** @internal This contact can be disabled (by user) */\n m_enabledFlag = true;\n /** @internal Used when crawling contact graph when forming islands. */\n m_islandFlag = false;\n /** @internal Set when the shapes are touching. */\n m_touchingFlag = false;\n /** @internal This contact needs filtering because a fixture filter was changed. */\n m_filterFlag = false;\n /** @internal This bullet contact had a TOI event */\n m_bulletHitFlag = false;\n\n /** @internal Contact reporting impulse object cache */\n m_impulse: ContactImpulse = new ContactImpulse(this);\n\n // VelocityConstraint\n /** @internal */ v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; // [maxManifoldPoints];\n /** @internal */ v_normal = matrix.vec2(0, 0);\n /** @internal */ v_normalMass: Mat22 = new Mat22();\n /** @internal */ v_K: Mat22 = new Mat22();\n /** @internal */ v_pointCount = 0;\n /** @internal */ v_tangentSpeed = 0;\n /** @internal */ v_friction = 0;\n /** @internal */ v_restitution = 0;\n /** @internal */ v_invMassA = 0;\n /** @internal */ v_invMassB = 0;\n /** @internal */ v_invIA = 0;\n /** @internal */ v_invIB = 0;\n\n // PositionConstraint\n /** @internal */ p_localPoints = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints];\n /** @internal */ p_localNormal = matrix.vec2(0, 0);\n /** @internal */ p_localPoint = matrix.vec2(0, 0);\n /** @internal */ p_localCenterA = matrix.vec2(0, 0);\n /** @internal */ p_localCenterB = matrix.vec2(0, 0);\n /** @internal */ p_type = ManifoldType.e_unset;\n /** @internal */ p_radiusA = 0;\n /** @internal */ p_radiusB = 0;\n /** @internal */ p_pointCount = 0;\n /** @internal */ p_invMassA = 0;\n /** @internal */ p_invMassB = 0;\n /** @internal */ p_invIA = 0;\n /** @internal */ p_invIB = 0;\n\n /** @internal */ \n initialize(fA: Fixture, indexA: number, fB: Fixture, indexB: number, evaluateFcn: EvaluateFunction) {\n this.m_fixtureA = fA;\n this.m_fixtureB = fB;\n\n this.m_indexA = indexA;\n this.m_indexB = indexB;\n\n this.m_evaluateFcn = evaluateFcn;\n\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\n /** @internal */ \n recycle() {\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\n this.m_impulse.recycle();\n\n // VelocityConstraint\n for(const point of this.v_points) {\n point.recycle();\n }\n matrix.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\n // PositionConstraint\n for(const point of this.p_localPoints) {\n matrix.zeroVec2(point);\n }\n matrix.zeroVec2(this.p_localNormal);\n matrix.zeroVec2(this.p_localPoint);\n matrix.zeroVec2(this.p_localCenterA);\n matrix.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\n initConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n const manifold = this.m_manifold;\n\n const pointCount = manifold.pointCount;\n _ASSERT && console.assert(pointCount > 0);\n\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\n this.v_friction = this.m_friction;\n this.v_restitution = this.m_restitution;\n this.v_tangentSpeed = this.m_tangentSpeed;\n\n this.v_pointCount = pointCount;\n\n this.v_K.setZero();\n this.v_normalMass.setZero();\n\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 matrix.copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter);\n matrix.copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter);\n\n this.p_radiusA = shapeA.m_radius;\n this.p_radiusB = shapeB.m_radius;\n\n this.p_type = manifold.type;\n matrix.copyVec2(this.p_localNormal, manifold.localNormal);\n matrix.copyVec2(this.p_localPoint, manifold.localPoint);\n this.p_pointCount = pointCount;\n\n for (let j = 0; j < Settings.maxManifoldPoints; ++j) {\n this.v_points[j].recycle();\n matrix.zeroVec2(this.p_localPoints[j]);\n }\n\n for (let j = 0; j < pointCount; ++j) {\n const cp = manifold.points[j];\n const 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 matrix.copyVec2(this.p_localPoints[j], cp.localPoint);\n }\n }\n\n /**\n * Get the contact manifold. Do not modify the manifold unless you understand\n * the internals of the library.\n */\n getManifold(): Manifold {\n return this.m_manifold;\n }\n\n /**\n * Get the world manifold.\n */\n getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n return this.m_manifold.getWorldManifold(\n worldManifold,\n bodyA.getTransform(), shapeA.m_radius,\n bodyB.getTransform(), shapeB.m_radius\n );\n }\n\n /**\n * Enable/disable this contact. This can be used inside the pre-solve contact\n * listener. The contact is only disabled for the current time step (or sub-step\n * in continuous collisions).\n */\n setEnabled(flag: boolean): void {\n this.m_enabledFlag = !!flag;\n }\n\n /**\n * Has this contact been disabled?\n */\n isEnabled(): boolean {\n return this.m_enabledFlag;\n }\n\n /**\n * Is this contact touching?\n */\n isTouching(): boolean {\n return this.m_touchingFlag;\n }\n\n /**\n * Get the next contact in the world's contact list.\n */\n getNext(): Contact | null {\n return this.m_next;\n }\n\n /**\n * Get fixture A in this contact.\n */\n getFixtureA(): Fixture {\n return this.m_fixtureA;\n }\n\n /**\n * Get fixture B in this contact.\n */\n getFixtureB(): Fixture {\n return this.m_fixtureB;\n }\n\n /**\n * Get the child primitive index for fixture A.\n */\n getChildIndexA(): number {\n return this.m_indexA;\n }\n\n /**\n * Get the child primitive index for fixture B.\n */\n getChildIndexB(): number {\n return this.m_indexB;\n }\n\n /**\n * Flag this contact for filtering. Filtering will occur the next time step.\n */\n flagForFiltering(): void {\n this.m_filterFlag = true;\n }\n\n /**\n * Override the default friction mixture. You can call this in\n * \"pre-solve\" callback. This value persists until set or reset.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the friction.\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Reset the friction mixture to the default value.\n */\n resetFriction(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction);\n }\n\n /**\n * Override the default restitution mixture. You can call this in\n * \"pre-solve\" callback. The value persists until you set or reset.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Get the restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Reset the restitution to the default value.\n */\n resetRestitution(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution);\n }\n\n /**\n * Set the desired tangent speed for a conveyor belt behavior. In meters per\n * second.\n */\n setTangentSpeed(speed: number): void {\n this.m_tangentSpeed = speed;\n }\n\n /**\n * Get the desired tangent speed. In meters per second.\n */\n getTangentSpeed(): number {\n return this.m_tangentSpeed;\n }\n\n /**\n * Called by Update method, and implemented by subclasses.\n */\n evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_evaluateFcn(manifold, xfA, fixtureA, this.m_indexA, xfB, fixtureB, this.m_indexB);\n }\n\n /**\n * Updates the contact manifold and touching status.\n *\n * Note: do not assume the fixture AABBs are overlapping or are valid.\n *\n * @param listener.beginContact\n * @param listener.endContact\n * @param listener.preSolve\n */\n update(listener?: {\n beginContact(contact: Contact): void,\n endContact(contact: Contact): void,\n preSolve(contact: Contact, oldManifold: Manifold): void\n }): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n // Re-enable this contact.\n this.m_enabledFlag = true;\n\n let touching = false;\n const wasTouching = this.m_touchingFlag;\n\n const sensorA = fixtureA.m_isSensor;\n const sensorB = fixtureB.m_isSensor;\n const sensor = sensorA || sensorB;\n\n const xfA = bodyA.m_xf;\n const xfB = bodyB.m_xf;\n\n // Is this contact a sensor?\n if (sensor) {\n touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB);\n\n // Sensors don't generate manifolds.\n this.m_manifold.pointCount = 0;\n } else {\n\n oldManifold.recycle();\n oldManifold.set(this.m_manifold);\n this.m_manifold.recycle();\n\n this.evaluate(this.m_manifold, xfA, xfB);\n touching = this.m_manifold.pointCount > 0;\n\n // Match old contact ids to new contact ids and copy the\n // stored impulses to warm start the solver.\n for (let i = 0; i < this.m_manifold.pointCount; ++i) {\n const nmp = this.m_manifold.points[i];\n nmp.normalImpulse = 0.0;\n nmp.tangentImpulse = 0.0;\n\n for (let j = 0; j < oldManifold.pointCount; ++j) {\n const 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\n if (touching !== wasTouching) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n }\n\n this.m_touchingFlag = touching;\n\n const hasListener = typeof listener === \"object\" && listener !== null;\n\n if (!wasTouching && touching && hasListener) {\n listener.beginContact(this);\n }\n\n if (wasTouching && !touching && hasListener) {\n listener.endContact(this);\n }\n\n if (!sensor && touching && hasListener && oldManifold) {\n listener.preSolve(this, oldManifold);\n }\n }\n\n solvePositionConstraint(step: TimeStep): number {\n return this._solvePositionConstraint(step, null, null);\n }\n\n solvePositionConstraintTOI(step: TimeStep, toiA: Body, toiB: Body): number {\n return this._solvePositionConstraint(step, toiA, toiB);\n }\n\n private _solvePositionConstraint(step: TimeStep, toiA: Body | null, toiB: Body | null): number {\n const toi = toiA !== null && toiB !== null ? true : false;\n let minSeparation = 0.0;\n\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return minSeparation;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return minSeparation;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n let mA = 0.0;\n let iA = 0.0;\n if (!toi || (bodyA === toiA || bodyA === toiB)) {\n mA = this.p_invMassA;\n iA = this.p_invIA;\n }\n\n let mB = 0.0;\n let iB = 0.0;\n if (!toi || (bodyB === toiA || bodyB === toiB)) {\n mB = this.p_invMassB;\n iB = this.p_invIB;\n }\n\n matrix.copyVec2(cA, positionA.c);\n let aA = positionA.a;\n\n matrix.copyVec2(cB, positionB.c);\n let aB = positionB.a;\n\n // Solve normal constraints\n for (let j = 0; j < this.p_pointCount; ++j) {\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n // PositionSolverManifold\n let separation: number;\n switch (this.p_type) {\n case ManifoldType.e_circles: {\n matrix.transformVec2(pointA, xfA, this.p_localPoint);\n matrix.transformVec2(pointB, xfB, this.p_localPoints[0]);\n matrix.subVec2(normal, pointB, pointA);\n matrix.normalizeVec2(normal);\n\n matrix.combine2Vec2(point, 0.5, pointA, 0.5, pointB);\n separation = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal) - this.p_radiusA - this.p_radiusB;\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfA, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfB, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfB, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfA, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n\n // Ensure normal points from A to B\n matrix.negVec2(normal);\n break;\n }\n // todo: what should we do here?\n default: {\n return minSeparation;\n }\n }\n\n matrix.subVec2(rA, point, cA);\n matrix.subVec2(rB, point, cB);\n\n // Track max constraint error.\n minSeparation = math_min(minSeparation, separation);\n\n const baumgarte = toi ? Settings.toiBaugarte : Settings.baumgarte;\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n // Prevent large corrections and allow slop.\n const C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0.0);\n\n // Compute the effective mass.\n const rnA = matrix.crossVec2Vec2(rA, normal);\n const rnB = matrix.crossVec2Vec2(rB, normal);\n const K = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n // Compute normal impulse\n const impulse = K > 0.0 ? -C / K : 0.0;\n\n matrix.scaleVec2(P, impulse, normal);\n\n matrix.minusScaleVec2(cA, mA, P);\n aA -= iA * matrix.crossVec2Vec2(rA, P);\n\n matrix.plusScaleVec2(cB, mB, P);\n aB += iB * matrix.crossVec2Vec2(rB, P);\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n\n return minSeparation;\n }\n\n initVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const radiusA = this.p_radiusA;\n const radiusB = this.p_radiusB;\n const manifold = this.m_manifold;\n\n const mA = this.v_invMassA;\n const mB = this.v_invMassB;\n const iA = this.v_invIA;\n const iB = this.v_invIB;\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n matrix.copyVec2(cA, positionA.c);\n const aA = positionA.a;\n matrix.copyVec2(vA, velocityA.v);\n const wA = velocityA.w;\n\n matrix.copyVec2(cB, positionB.c);\n const aB = positionB.a;\n matrix.copyVec2(vB, velocityB.v);\n const wB = velocityB.w;\n\n _ASSERT && console.assert(manifold.pointCount > 0);\n\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n worldManifold.recycle();\n manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB);\n\n matrix.copyVec2(this.v_normal, worldManifold.normal);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n const wmp = worldManifold.points[j];\n\n matrix.subVec2(vcp.rA, wmp, cA);\n matrix.subVec2(vcp.rB, wmp, cB);\n\n const rnA = matrix.crossVec2Vec2(vcp.rA, this.v_normal);\n const rnB = matrix.crossVec2Vec2(vcp.rB, this.v_normal);\n\n const kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n vcp.normalMass = kNormal > 0.0 ? 1.0 / kNormal : 0.0;\n\n matrix.crossVec2Num(tangent, this.v_normal, 1.0);\n\n const rtA = matrix.crossVec2Vec2(vcp.rA, tangent);\n const rtB = matrix.crossVec2Vec2(vcp.rB, tangent);\n\n const kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB;\n\n vcp.tangentMass = kTangent > 0.0 ? 1.0 / kTangent : 0.0;\n\n // Setup a velocity bias for restitution.\n vcp.velocityBias = 0.0;\n let vRel = 0;\n vRel += matrix.dotVec2(this.v_normal, vB);\n vRel += matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wB, vcp.rB));\n vRel -= matrix.dotVec2(this.v_normal, vA);\n vRel -= matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wA, vcp.rA));\n if (vRel < -Settings.velocityThreshold) {\n vcp.velocityBias = -this.v_restitution * vRel;\n }\n }\n\n // If we have two points, then prepare the block solver.\n if (this.v_pointCount == 2 && step.blockSolve) {\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n const rn1A = matrix.crossVec2Vec2(vcp1.rA, this.v_normal);\n const rn1B = matrix.crossVec2Vec2(vcp1.rB, this.v_normal);\n const rn2A = matrix.crossVec2Vec2(vcp2.rA, this.v_normal);\n const rn2B = matrix.crossVec2Vec2(vcp2.rB, this.v_normal);\n\n const k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B;\n const k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B;\n const k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B;\n\n // Ensure a reasonable condition number.\n const k_maxConditionNumber = 1000.0;\n if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) {\n // K is safe to invert.\n this.v_K.ex.setNum(k11, k12);\n this.v_K.ey.setNum(k12, k22);\n // this.v_normalMass.set(this.v_K.getInverse());\n const a = this.v_K.ex.x;\n const b = this.v_K.ey.x;\n const c = this.v_K.ex.y;\n const d = this.v_K.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n this.v_normalMass.ex.x = det * d;\n this.v_normalMass.ey.x = -det * b;\n this.v_normalMass.ex.y = -det * c;\n this.v_normalMass.ey.y = det * a;\n\n } else {\n // The constraints are redundant, just use one.\n // TODO_ERIN use deepest?\n this.v_pointCount = 1;\n }\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n warmStartConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n matrix.combine2Vec2(P, vcp.normalImpulse, normal, vcp.tangentImpulse, tangent);\n\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n matrix.minusScaleVec2(vA, mA, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n matrix.plusScaleVec2(vB, mB, P);\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n storeConstraintImpulses(step: TimeStep): void {\n const manifold = this.m_manifold;\n for (let 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\n solveVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const positionA = bodyA.c_position;\n\n const velocityB = bodyB.c_velocity;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n const friction = this.v_friction;\n\n _ASSERT && console.assert(this.v_pointCount == 1 || this.v_pointCount == 2);\n\n // Solve tangent constraints first because non-penetration is more important\n // than friction.\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute tangent force\n const vt = matrix.dotVec2(dv, tangent) - this.v_tangentSpeed;\n let lambda = vcp.tangentMass * (-vt);\n\n // Clamp the accumulated force\n const maxFriction = friction * vcp.normalImpulse;\n const newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction);\n lambda = newImpulse - vcp.tangentImpulse;\n vcp.tangentImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, tangent);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n\n // Solve normal constraints\n if (this.v_pointCount == 1 || step.blockSolve == false) {\n for (let i = 0; i < this.v_pointCount; ++i) {\n const vcp = this.v_points[i]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute normal impulse\n const vn = matrix.dotVec2(dv, normal);\n let lambda = -vcp.normalMass * (vn - vcp.velocityBias);\n\n // Clamp the accumulated impulse\n const newImpulse = math_max(vcp.normalImpulse + lambda, 0.0);\n lambda = newImpulse - vcp.normalImpulse;\n vcp.normalImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, normal);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n } else {\n // Block solver developed in collaboration with Dirk Gregorius (back in\n // 01/07 on Box2D_Lite).\n // Build the mini LCP for this contact patch\n //\n // vn = A * x + b, vn >= 0, x >= 0 and vn_i * x_i = 0 with i = 1..2\n //\n // A = J * W * JT and J = ( -n, -r1 x n, n, r2 x n )\n // b = vn0 - velocityBias\n //\n // The system is solved using the \"Total enumeration method\" (s. Murty).\n // The complementary constraint vn_i * x_i\n // implies that we must have in any solution either vn_i = 0 or x_i = 0.\n // So for the 2D contact problem the cases\n // vn1 = 0 and vn2 = 0, x1 = 0 and x2 = 0, x1 = 0 and vn2 = 0, x2 = 0 and\n // vn1 = 0 need to be tested. The first valid\n // solution that satisfies the problem is chosen.\n //\n // In order to account of the accumulated impulse 'a' (because of the\n // iterative nature of the solver which only requires\n // that the accumulated impulse is clamped and not the incremental\n // impulse) we change the impulse variable (x_i).\n //\n // Substitute:\n //\n // x = a + d\n //\n // a := old total impulse\n // x := new total impulse\n // d := incremental impulse\n //\n // For the current iteration we extend the formula for the incremental\n // impulse\n // to compute the new total impulse:\n //\n // vn = A * d + b\n // = A * (x - a) + b\n // = A * x + b - A * a\n // = A * x + b'\n // b' = b - A * a;\n\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n matrix.setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse);\n _ASSERT && console.assert(a.x >= 0.0 && a.y >= 0.0);\n\n // Relative velocity at contact\n // let dv1 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp1.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp1.rA));\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // let dv2 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp2.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp2.rA));\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n let vn1 = matrix.dotVec2(dv1, normal);\n let vn2 = matrix.dotVec2(dv2, normal);\n\n matrix.setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias);\n\n // Compute b'\n // b.sub(Mat22.mulVec2(this.v_K, a));\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\n const k_errorTol = 1e-3;\n // NOT_USED(k_errorTol);\n\n while (true) {\n //\n // Case 1: vn = 0\n //\n // 0 = A * x + b'\n //\n // Solve for x:\n //\n // x = - inv(A) * b'\n //\n // const x = Mat22.mulVec2(this.v_normalMass, b).neg();\n matrix.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\n if (x.x >= 0.0 && x.y >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 2: vn1 = 0 and x2 = 0\n //\n // 0 = a11 * x1 + a12 * 0 + b1'\n // vn2 = a21 * x1 + a22 * 0 + b2'\n //\n x.x = -vcp1.normalMass * b.x;\n x.y = 0.0;\n vn1 = 0.0;\n vn2 = this.v_K.ex.y * x.x + b.y;\n\n if (x.x >= 0.0 && vn2 >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 3: vn2 = 0 and x1 = 0\n //\n // vn1 = a11 * 0 + a12 * x2 + b1'\n // 0 = a21 * 0 + a22 * x2 + b2'\n //\n x.x = 0.0;\n x.y = -vcp2.normalMass * b.y;\n vn1 = this.v_K.ey.x * x.y + b.x;\n vn2 = 0.0;\n\n if (x.y >= 0.0 && vn1 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 4: x1 = 0 and x2 = 0\n //\n // vn1 = b1\n // vn2 = b2;\n //\n x.x = 0.0;\n x.y = 0.0;\n vn1 = b.x;\n vn2 = b.y;\n\n if (vn1 >= 0.0 && vn2 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n break;\n }\n\n // No solution, give up. This is hit sometimes, but it doesn't seem to\n // matter.\n break;\n }\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n /** @internal */\n static addType(type1: ShapeType, type2: ShapeType, callback: EvaluateFunction): void {\n s_registers[type1] = s_registers[type1] || {};\n s_registers[type1][type2] = callback;\n }\n\n /** @internal */\n static create(fixtureA: Fixture, indexA: number, fixtureB: Fixture, indexB: number): Contact | null {\n const typeA = fixtureA.m_shape.m_type;\n const typeB = fixtureB.m_shape.m_type;\n\n const contact = contactPool.allocate();\n let 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\n // Contact creation may swap fixtures.\n fixtureA = contact.m_fixtureA;\n fixtureB = contact.m_fixtureB;\n indexA = contact.getChildIndexA();\n indexB = contact.getChildIndexB();\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n\n // Connect to body A\n contact.m_nodeA.contact = contact;\n contact.m_nodeA.other = bodyB;\n\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\n // Connect to body B\n contact.m_nodeB.contact = contact;\n contact.m_nodeB.other = bodyA;\n\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\n // Wake up the bodies\n if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n return contact;\n }\n\n /** @internal */\n static destroy(contact: Contact, listener: { endContact: (contact: Contact) => void }): void {\n const fixtureA = contact.m_fixtureA;\n const fixtureB = contact.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n if (contact.isTouching()) {\n listener.endContact(contact);\n }\n\n // Remove from body 1\n if (contact.m_nodeA.prev) {\n contact.m_nodeA.prev.next = contact.m_nodeA.next;\n }\n\n if (contact.m_nodeA.next) {\n contact.m_nodeA.next.prev = contact.m_nodeA.prev;\n }\n\n if (contact.m_nodeA == bodyA.m_contactList) {\n bodyA.m_contactList = contact.m_nodeA.next;\n }\n\n // Remove from body 2\n if (contact.m_nodeB.prev) {\n contact.m_nodeB.prev.next = contact.m_nodeB.next;\n }\n\n if (contact.m_nodeB.next) {\n contact.m_nodeB.next.prev = contact.m_nodeB.prev;\n }\n\n if (contact.m_nodeB == bodyB.m_contactList) {\n bodyB.m_contactList = contact.m_nodeB.next;\n }\n\n if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n // const typeA = fixtureA.getType();\n // const typeB = fixtureB.getType();\n\n // const destroyFcn = s_registers[typeA][typeB].destroyFcn;\n // if (typeof destroyFcn === 'function') {\n // destroyFcn(contact);\n // }\n\n contactPool.release(contact);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { Solver, ContactImpulse, TimeStep } from \"./Solver\";\nimport { Body, BodyDef } from \"./Body\";\nimport { Joint } from \"./Joint\";\nimport { Contact } from \"./Contact\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Fixture, FixtureProxy } from \"./Fixture\";\nimport { Manifold } from \"../collision/Manifold\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface WorldDef {\n /** [default: { x : 0, y : 0}] */\n gravity?: Vec2Value;\n\n /** [default: true] */\n allowSleep?: boolean;\n\n /** [default: true] */\n warmStarting?: boolean;\n\n /** [default: true] */\n continuousPhysics?: boolean;\n\n /** [default: false] */\n subStepping?: boolean;\n\n /** [default: true] */\n blockSolve?: boolean;\n\n /** @internal [8] For the velocity constraint solver. */\n velocityIterations?: number;\n\n /** @internal [3] For the position constraint solver. */\n positionIterations?: number;\n}\n\n/** @internal */ const DEFAULTS: WorldDef = {\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};\n\n/**\n * Callback function for ray casts, see {@link World.rayCast}.\n *\n * Called for each fixture found in the query.\n * The returned value replaces the ray-cast input maxFraction.\n * You control how the ray cast proceeds by returning a numeric/float value.\n * \n * - `0` to terminate the ray cast\n * - `fraction` to clip the ray cast at current point\n * - `1` don't clip the ray and continue\n * - `-1` (or anything else) to continue\n *\n * @param fixture The fixture hit by the ray\n * @param point The point of initial intersection\n * @param normal The normal vector at the point of intersection\n * @param fraction The fraction along the ray at the point of intersection\n *\n * @returns A number to update the maxFraction\n */\nexport type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number;\n\n/**\n * Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\nexport type WorldAABBQueryCallback = (fixture: Fixture) => boolean;\n\nexport class World {\n /** @internal */ m_solver: Solver;\n /** @internal */ m_broadPhase: BroadPhase;\n /** @internal */ m_contactList: Contact | null;\n /** @internal */ m_contactCount: number;\n /** @internal */ m_bodyList: Body | null;\n /** @internal */ m_bodyCount: number;\n /** @internal */ m_jointList: Joint | null;\n /** @internal */ m_jointCount: number;\n /** @internal */ m_stepComplete: boolean;\n /** @internal */ m_allowSleep: boolean;\n /** @internal */ m_gravity: Vec2;\n /** @internal */ m_clearForces: boolean;\n /** @internal */ m_newFixture: boolean;\n /** @internal */ m_locked: boolean;\n /** @internal */ m_warmStarting: boolean;\n /** @internal */ m_continuousPhysics: boolean;\n /** @internal */ m_subStepping: boolean;\n /** @internal */ m_blockSolve: boolean;\n /** @internal */ m_velocityIterations: number;\n /** @internal */ m_positionIterations: number;\n /** @internal */ m_t: number;\n\n // TODO\n /** @internal */ _listeners: {\n [key: string]: any[]\n };\n\n /**\n * @param def World definition or gravity vector.\n */\n constructor(def?: WorldDef | Vec2 | null) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof World)) {\n return new World(def);\n }\n\n this.s_step = new TimeStep();\n\n\n if (!def) {\n def = {};\n } else if (Vec2.isValid(def)) {\n def = { gravity: def as Vec2 };\n }\n\n def = options(def, DEFAULTS) as WorldDef;\n\n this.m_solver = new Solver(this);\n\n this.m_broadPhase = new BroadPhase();\n\n this.m_contactList = null;\n this.m_contactCount = 0;\n\n this.m_bodyList = null;\n this.m_bodyCount = 0;\n\n this.m_jointList = null;\n this.m_jointCount = 0;\n\n this.m_stepComplete = true;\n\n this.m_allowSleep = def.allowSleep;\n this.m_gravity = Vec2.clone(def.gravity);\n\n this.m_clearForces = true;\n this.m_newFixture = false;\n this.m_locked = false;\n\n // These are for debugging the solver.\n this.m_warmStarting = def.warmStarting;\n this.m_continuousPhysics = def.continuousPhysics;\n this.m_subStepping = def.subStepping;\n\n this.m_blockSolve = def.blockSolve;\n this.m_velocityIterations = def.velocityIterations;\n this.m_positionIterations = def.positionIterations;\n\n this.m_t = 0;\n }\n\n /** @internal */\n _serialize(): object {\n const bodies = [];\n const joints = [];\n\n for (let b = this.getBodyList(); b; b = b.getNext()) {\n bodies.push(b);\n }\n\n for (let j = this.getJointList(); j; j = j.getNext()) {\n // @ts-ignore\n if (typeof j._serialize === \"function\") {\n joints.push(j);\n }\n }\n\n return {\n gravity: this.m_gravity,\n bodies,\n joints,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, context: any, restore: any): World {\n if (!data) {\n return new World();\n }\n\n const world = new World(data.gravity);\n\n if (data.bodies) {\n for (let i = data.bodies.length - 1; i >= 0; i -= 1) {\n world._addBody(restore(Body, data.bodies[i], world));\n }\n }\n\n if (data.joints) {\n for (let i = data.joints.length - 1; i >= 0; i--) {\n world.createJoint(restore(Joint, data.joints[i], world));\n }\n }\n\n return world;\n }\n\n /**\n * Get the world body list. With the returned body, use Body.getNext to get the\n * next body in the world list. A null body indicates the end of the list.\n *\n * @return the head of the world body list.\n */\n getBodyList(): Body | null {\n return this.m_bodyList;\n }\n\n /**\n * Get the world joint list. With the returned joint, use Joint.getNext to get\n * the next joint in the world list. A null joint indicates the end of the list.\n *\n * @return the head of the world joint list.\n */\n getJointList(): Joint | null {\n return this.m_jointList;\n }\n\n /**\n * Get the world contact list. With the returned contact, use Contact.getNext to\n * get the next contact in the world list. A null contact indicates the end of\n * the list.\n *\n * Warning: contacts are created and destroyed in the middle of a time step.\n * Use ContactListener to avoid missing contacts.\n *\n * @return the head of the world contact list.\n */\n getContactList(): Contact | null {\n return this.m_contactList;\n }\n\n getBodyCount(): number {\n return this.m_bodyCount;\n }\n\n getJointCount(): number {\n return this.m_jointCount;\n }\n\n /**\n * Get the number of contacts (each may have 0 or more contact points).\n */\n getContactCount(): number {\n return this.m_contactCount;\n }\n\n /**\n * Change the global gravity vector.\n */\n setGravity(gravity: Vec2Value): void {\n this.m_gravity.set(gravity);\n }\n\n /**\n * Get the global gravity vector.\n */\n getGravity(): Vec2 {\n return this.m_gravity;\n }\n\n /**\n * Is the world locked (in the middle of a time step).\n */\n isLocked(): boolean {\n return this.m_locked;\n }\n\n /**\n * Enable/disable sleep.\n */\n setAllowSleeping(flag: boolean): void {\n if (flag == this.m_allowSleep) {\n return;\n }\n\n this.m_allowSleep = flag;\n if (this.m_allowSleep == false) {\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.setAwake(true);\n }\n }\n }\n\n getAllowSleeping(): boolean {\n return this.m_allowSleep;\n }\n\n /**\n * Enable/disable warm starting. For testing.\n */\n setWarmStarting(flag: boolean): void {\n this.m_warmStarting = flag;\n }\n\n getWarmStarting(): boolean {\n return this.m_warmStarting;\n }\n\n /**\n * Enable/disable continuous physics. For testing.\n */\n setContinuousPhysics(flag: boolean): void {\n this.m_continuousPhysics = flag;\n }\n\n getContinuousPhysics(): boolean {\n return this.m_continuousPhysics;\n }\n\n /**\n * Enable/disable single stepped continuous physics. For testing.\n */\n setSubStepping(flag: boolean): void {\n this.m_subStepping = flag;\n }\n\n getSubStepping(): boolean {\n return this.m_subStepping;\n }\n\n /**\n * Set flag to control automatic clearing of forces after each time step.\n */\n setAutoClearForces(flag: boolean): void {\n this.m_clearForces = flag;\n }\n\n /**\n * Get the flag that controls automatic clearing of forces after each time step.\n */\n getAutoClearForces(): boolean {\n return this.m_clearForces;\n }\n\n /**\n * Manually clear the force buffer on all bodies. By default, forces are cleared\n * automatically after each call to step. The default behavior is modified by\n * calling setAutoClearForces. The purpose of this function is to support\n * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step\n * under a variable frame-rate. When you perform sub-stepping you will disable\n * auto clearing of forces and instead call clearForces after all sub-steps are\n * complete in one pass of your game loop.\n *\n * See {@link World.setAutoClearForces}\n */\n clearForces(): void {\n for (let body = this.m_bodyList; body; body = body.getNext()) {\n body.m_force.setZero();\n body.m_torque = 0.0;\n }\n }\n\n /**\n * Query the world for all fixtures that potentially overlap the provided AABB.\n *\n * @param aabb The query box.\n * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\n queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n this.m_broadPhase.query(aabb, function(proxyId: number): boolean { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n return callback(proxy.fixture);\n });\n }\n\n /**\n * Ray-cast the world for all fixtures in the path of the ray. Your callback\n * controls whether you get the closest point, any point, or n-points. The\n * ray-cast ignores shapes that contain the starting point.\n *\n * @param point1 The ray starting point\n * @param point2 The ray ending point\n * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value.\n */\n rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n\n this.m_broadPhase.rayCast({\n maxFraction : 1.0,\n p1 : point1,\n p2 : point2\n }, function(input: RayCastInput, proxyId: number): number { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n const fixture = proxy.fixture;\n const index = proxy.childIndex;\n // @ts-ignore\n const output: RayCastOutput = {}; // TODO GC\n const hit = fixture.rayCast(output, input, index);\n if (hit) {\n const fraction = output.fraction;\n const point = Vec2.add(Vec2.mulNumVec2((1.0 - fraction), input.p1), Vec2.mulNumVec2(fraction, input.p2));\n return callback(fixture, point, output.normal, fraction);\n }\n return input.maxFraction;\n });\n }\n\n /**\n * Get the number of broad-phase proxies.\n */\n getProxyCount(): number {\n return this.m_broadPhase.getProxyCount();\n }\n\n /**\n * Get the height of broad-phase dynamic tree.\n */\n getTreeHeight(): number {\n return this.m_broadPhase.getTreeHeight();\n }\n\n /**\n * Get the balance of broad-phase dynamic tree.\n */\n getTreeBalance(): number {\n return this.m_broadPhase.getTreeBalance();\n }\n\n /**\n * Get the quality metric of broad-phase dynamic tree. The smaller the better.\n * The minimum is 1.\n */\n getTreeQuality(): number {\n return this.m_broadPhase.getTreeQuality();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The body shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n _ASSERT && console.assert(this.m_locked == false);\n if (this.m_locked) {\n return;\n }\n\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.m_xf.p.sub(newOrigin);\n b.m_sweep.c0.sub(newOrigin);\n b.m_sweep.c.sub(newOrigin);\n }\n\n for (let j = this.m_jointList; j; j = j.m_next) {\n j.shiftOrigin(newOrigin);\n }\n\n this.m_broadPhase.shiftOrigin(newOrigin);\n }\n\n /** @internal Used for deserialize. */\n _addBody(body: Body): void {\n _ASSERT && console.assert(this.isLocked() === false);\n if (this.isLocked()) {\n return;\n }\n\n // Add to world doubly linked list.\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\n /**\n * Create a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This function is locked during callbacks.\n */\n createBody(def?: BodyDef): Body;\n createBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createBody(arg1?, arg2?) {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n let def: BodyDef = {};\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\n const body = new Body(this, def);\n this._addBody(body);\n return body;\n }\n\n createDynamicBody(def?: BodyDef): Body;\n createDynamicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createDynamicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n createKinematicBody(def?: BodyDef): Body;\n createKinematicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createKinematicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n /**\n * Destroy a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This automatically deletes all associated shapes and joints.\n *\n * Warning: This function is locked during callbacks.\n */\n destroyBody(b: Body): boolean {\n _ASSERT && console.assert(this.m_bodyCount > 0);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n if (b.m_destroyed) {\n return false;\n }\n\n // Delete the attached joints.\n let je = b.m_jointList;\n while (je) {\n const je0 = je;\n je = je.next;\n\n this.publish(\"remove-joint\", je0.joint);\n this.destroyJoint(je0.joint);\n\n b.m_jointList = je;\n }\n b.m_jointList = null;\n\n // Delete the attached contacts.\n let ce = b.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n\n this.destroyContact(ce0.contact);\n\n b.m_contactList = ce;\n }\n b.m_contactList = null;\n\n // Delete the attached fixtures. This destroys broad-phase proxies.\n let f = b.m_fixtureList;\n while (f) {\n const f0 = f;\n f = f.m_next;\n\n this.publish(\"remove-fixture\", f0);\n f0.destroyProxies(this.m_broadPhase);\n\n b.m_fixtureList = f;\n }\n b.m_fixtureList = null;\n\n // Remove world body list.\n if (b.m_prev) {\n b.m_prev.m_next = b.m_next;\n }\n\n if (b.m_next) {\n b.m_next.m_prev = b.m_prev;\n }\n\n if (b == this.m_bodyList) {\n this.m_bodyList = b.m_next;\n }\n\n b.m_destroyed = true;\n\n --this.m_bodyCount;\n\n this.publish(\"remove-body\", b);\n\n return true;\n }\n\n /**\n * Create a joint to constrain bodies together. No reference to the definition\n * is retained. This may cause the connected bodies to cease colliding.\n *\n * Warning: This function is locked during callbacks.\n */\n createJoint(joint: T): T | null {\n _ASSERT && console.assert(!!joint.m_bodyA);\n _ASSERT && console.assert(!!joint.m_bodyB);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n // Connect to the world list.\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\n // Connect to the bodies' doubly linked lists.\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\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\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n for (let edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) {\n if (edge.other == joint.m_bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n }\n }\n\n // Note: creating a joint doesn't wake the bodies.\n\n return joint;\n }\n\n /**\n * Destroy a joint. This may cause the connected bodies to begin colliding.\n * Warning: This function is locked during callbacks.\n */\n destroyJoint(joint: Joint): void {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n // Remove from the doubly linked list.\n if (joint.m_prev) {\n joint.m_prev.m_next = joint.m_next;\n }\n\n if (joint.m_next) {\n joint.m_next.m_prev = joint.m_prev;\n }\n\n if (joint == this.m_jointList) {\n this.m_jointList = joint.m_next;\n }\n\n // Disconnect from bodies.\n const bodyA = joint.m_bodyA;\n const bodyB = joint.m_bodyB;\n\n // Wake up connected bodies.\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n\n // Remove from body 1.\n if (joint.m_edgeA.prev) {\n joint.m_edgeA.prev.next = joint.m_edgeA.next;\n }\n\n if (joint.m_edgeA.next) {\n joint.m_edgeA.next.prev = joint.m_edgeA.prev;\n }\n\n if (joint.m_edgeA == bodyA.m_jointList) {\n bodyA.m_jointList = joint.m_edgeA.next;\n }\n\n joint.m_edgeA.prev = null;\n joint.m_edgeA.next = null;\n\n // Remove from body 2\n if (joint.m_edgeB.prev) {\n joint.m_edgeB.prev.next = joint.m_edgeB.next;\n }\n\n if (joint.m_edgeB.next) {\n joint.m_edgeB.next.prev = joint.m_edgeB.prev;\n }\n\n if (joint.m_edgeB == bodyB.m_jointList) {\n bodyB.m_jointList = joint.m_edgeB.next;\n }\n\n joint.m_edgeB.prev = null;\n joint.m_edgeB.next = null;\n\n _ASSERT && console.assert(this.m_jointCount > 0);\n --this.m_jointCount;\n\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n let edge = bodyB.getContactList();\n while (edge) {\n if (edge.other == bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n }\n\n this.publish(\"remove-joint\", joint);\n }\n\n /** @internal */\n s_step: TimeStep; // reuse\n\n /**\n * Take a time step. This performs collision detection, integration, and\n * constraint solution.\n *\n * Broad-phase, narrow-phase, solve and solve time of impacts.\n *\n * @param timeStep Time step, this should not vary.\n */\n step(timeStep: number, velocityIterations?: number, positionIterations?: number): void {\n this.publish(\"pre-step\", timeStep);\n\n if ((velocityIterations | 0) !== velocityIterations) {\n // TODO: remove this in future\n velocityIterations = 0;\n }\n\n velocityIterations = velocityIterations || this.m_velocityIterations;\n positionIterations = positionIterations || this.m_positionIterations;\n\n // If new fixtures were added, we need to find the new contacts.\n if (this.m_newFixture) {\n this.findNewContacts();\n this.m_newFixture = false;\n }\n\n this.m_locked = true;\n\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\n // Update contacts. This is where some contacts are destroyed.\n this.updateContacts();\n\n // Integrate velocities, solve velocity constraints, and integrate positions.\n if (this.m_stepComplete && timeStep > 0.0) {\n this.m_solver.solveWorld(this.s_step);\n\n // Synchronize fixtures, check for out of range bodies.\n for (let b = this.m_bodyList; b; b = b.getNext()) {\n // If a body was not in an island then it did not move.\n if (b.m_islandFlag == false) {\n continue;\n }\n\n if (b.isStatic()) {\n continue;\n }\n\n // Update fixtures (for broad-phase).\n b.synchronizeFixtures();\n }\n // Look for new contacts.\n this.findNewContacts();\n }\n\n // Handle TOI events.\n if (this.m_continuousPhysics && timeStep > 0.0) {\n this.m_solver.solveWorldTOI(this.s_step);\n }\n\n if (this.m_clearForces) {\n this.clearForces();\n }\n\n this.m_locked = false;\n\n this.publish(\"post-step\", timeStep);\n }\n\n /**\n * @internal\n * Call this method to find new contacts.\n */\n findNewContacts(): void {\n this.m_broadPhase.updatePairs(\n (proxyA: FixtureProxy, proxyB: FixtureProxy) => this.createContact(proxyA, proxyB)\n );\n }\n\n /**\n * @internal\n * Callback for broad-phase.\n */\n createContact(proxyA: FixtureProxy, proxyB: FixtureProxy): void {\n const fixtureA = proxyA.fixture;\n const fixtureB = proxyB.fixture;\n\n const indexA = proxyA.childIndex;\n const indexB = proxyB.childIndex;\n\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Are the fixtures on the same body?\n if (bodyA == bodyB) {\n return;\n }\n\n // TODO_ERIN use a hash table to remove a potential bottleneck when both\n // bodies have a lot of contacts.\n // Does a contact already exist?\n let edge = bodyB.getContactList(); // ContactEdge\n while (edge) {\n if (edge.other == bodyA) {\n const fA = edge.contact.getFixtureA();\n const fB = edge.contact.getFixtureB();\n const iA = edge.contact.getChildIndexA();\n const iB = edge.contact.getChildIndexB();\n\n if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) {\n // A contact already exists.\n return;\n }\n\n if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) {\n // A contact already exists.\n return;\n }\n }\n\n edge = edge.next;\n }\n\n if (bodyB.shouldCollide(bodyA) == false) {\n return;\n }\n if (fixtureB.shouldCollide(fixtureA) == false) {\n return;\n }\n\n // Call the factory.\n const contact = Contact.create(fixtureA, indexA, fixtureB, indexB);\n if (contact == null) {\n return;\n }\n\n // Insert into the world.\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\n ++this.m_contactCount;\n }\n\n /**\n * @internal\n * Removes old non-overlapping contacts, applies filters and updates contacts.\n */\n updateContacts(): void {\n // Update awake contacts.\n let c: Contact;\n let next_c = this.m_contactList;\n while (c = next_c) {\n next_c = c.getNext();\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Is this contact flagged for filtering?\n if (c.m_filterFlag) {\n if (bodyB.shouldCollide(bodyA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n if (fixtureB.shouldCollide(fixtureA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n // Clear the filtering flag.\n c.m_filterFlag = false;\n }\n\n const activeA = bodyA.isAwake() && !bodyA.isStatic();\n const activeB = bodyB.isAwake() && !bodyB.isStatic();\n\n // At least one body must be awake and it must be dynamic or kinematic.\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const proxyIdA = fixtureA.m_proxies[indexA].proxyId;\n const proxyIdB = fixtureB.m_proxies[indexB].proxyId;\n const overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB);\n\n // Here we destroy contacts that cease to overlap in the broad-phase.\n if (overlap == false) {\n this.destroyContact(c);\n continue;\n }\n\n // The contact persists.\n c.update(this);\n }\n }\n\n /** @internal */\n destroyContact(contact: Contact): void {\n // Remove from the world.\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\n Contact.destroy(contact, this);\n\n --this.m_contactCount;\n }\n\n\n /**\n * Called when two fixtures begin to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n /**\n * Called when two fixtures cease to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"end-contact\", listener: (contact: Contact) => void): World;\n /**\n * This is called after a contact is updated. This allows you to inspect a\n * contact before it goes to the solver. If you are careful, you can modify the\n * contact manifold (e.g. disable contact). A copy of the old manifold is\n * provided so that you can detect changes. Note: this is called only for awake\n * bodies. Note: this is called even when the number of contact points is zero.\n * Note: this is not called for sensors. Note: if you set the number of contact\n * points to zero, you will not get an end-contact callback. However, you may get\n * a begin-contact callback the next step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n /**\n * This lets you inspect a contact after the solver is finished. This is useful\n * for inspecting impulses. Note: the contact manifold does not include time of\n * impact impulses, which can be arbitrarily large if the sub-step is small.\n * Hence the impulse is provided explicitly in a separate data structure. Note:\n * this is only called for contacts that are touching, solid, and awake.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n /** Listener is called whenever a body is removed. */\n on(name: \"remove-body\", listener: (body: Body) => void): World;\n /** Listener is called whenever a joint is removed implicitly or explicitly. */\n on(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n /** Listener is called whenever a fixture is removed implicitly or explicitly. */\n on(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Register an event listener.\n */\n // tslint:disable-next-line:typedef\n on(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\n off(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n off(name: \"end-contact\", listener: (contact: Contact) => void): World;\n off(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n off(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n off(name: \"remove-body\", listener: (body: Body) => void): World;\n off(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n off(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Remove an event listener.\n */\n // tslint:disable-next-line:typedef\n off(name, listener) {\n if (typeof name !== \"string\" || typeof listener !== \"function\") {\n return this;\n }\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return this;\n }\n const index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n return this;\n }\n\n publish(name: string, arg1?: any, arg2?: any, arg3?: any): number {\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return 0;\n }\n for (let l = 0; l < listeners.length; l++) {\n listeners[l].call(this, arg1, arg2, arg3);\n }\n return listeners.length;\n }\n\n /** @internal */\n beginContact(contact: Contact): void {\n this.publish(\"begin-contact\", contact);\n }\n\n /** @internal */\n endContact(contact: Contact): void {\n this.publish(\"end-contact\", contact);\n }\n\n /** @internal */\n preSolve(contact: Contact, oldManifold: Manifold): void {\n this.publish(\"pre-solve\", contact, oldManifold);\n }\n\n /** @internal */\n postSolve(contact: Contact, impulse: ContactImpulse): void {\n this.publish(\"post-solve\", contact, impulse);\n }\n\n /**\n * Joints and fixtures are destroyed when their associated body is destroyed.\n * Register a destruction listener so that you may nullify references to these\n * joints and shapes.\n *\n * `function(object)` is called when any joint or fixture is about to\n * be destroyed due to the destruction of one of its attached or parent bodies.\n */\n\n /**\n * Register a contact filter to provide specific control over collision.\n * Otherwise the default filter is used (defaultFilter). The listener is owned\n * by you and must remain in scope.\n *\n * Moved to Fixture.\n */\n}","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface Vec3Value {\n x: number;\n y: number;\n z: number;\n}\n\nexport class Vec3 {\n x: number;\n y: number;\n z: number;\n\n constructor(x: number, y: number, z: number);\n constructor(obj: { x: number, y: number, z: number });\n constructor();\n constructor(x?, y?, z?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec3)) {\n return new Vec3(x, y, z);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n } else {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n _ASSERT && Vec3.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y,\n z: this.z\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = data.x;\n obj.y = data.y;\n obj.z = data.z;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number, z: number): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = x;\n obj.y = y;\n obj.z = z;\n return obj;\n }\n\n static zero(): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = 0;\n obj.y = 0;\n obj.z = 0;\n return obj;\n }\n\n static clone(v: Vec3Value): Vec3 {\n _ASSERT && Vec3.assert(v);\n return Vec3.neo(v.x, v.y, v.z);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /** Does this vector contain finite coordinates? */\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec3.isValid(o), \"Invalid Vec3!\", o);\n }\n\n setZero(): Vec3 {\n this.x = 0.0;\n this.y = 0.0;\n this.z = 0.0;\n return this;\n }\n\n set(x: number, y: number, z: number): Vec3 {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n\n add(w: Vec3Value): Vec3 {\n this.x += w.x;\n this.y += w.y;\n this.z += w.z;\n return this;\n }\n\n sub(w: Vec3Value): Vec3 {\n this.x -= w.x;\n this.y -= w.y;\n this.z -= w.z;\n return this;\n }\n\n mul(m: number): Vec3 {\n this.x *= m;\n this.y *= m;\n this.z *= m;\n return this;\n }\n\n static areEqual(v: Vec3Value, w: Vec3Value): boolean {\n _ASSERT && Vec3.assert(v);\n _ASSERT && Vec3.assert(w);\n return v === w ||\n typeof v === \"object\" && v !== null &&\n typeof w === \"object\" && w !== null &&\n v.x === w.x && v.y === w.y && v.z === w.z;\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n }\n\n /** Cross product on two vectors */\n static cross(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(\n v.y * w.z - v.z * w.y,\n v.z * w.x - v.x * w.z,\n v.x * w.y - v.y * w.x\n );\n }\n\n static add(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x + w.x, v.y + w.y, v.z + w.z);\n }\n\n static sub(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x - w.x, v.y - w.y, v.z - w.z);\n }\n\n static mul(v: Vec3Value, m: number): Vec3 {\n return new Vec3(m * v.x, m * v.y, m * v.z);\n }\n\n neg(): Vec3 {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n\n static neg(v: Vec3Value): Vec3 {\n return new Vec3(-v.x, -v.y, -v.z);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Shape } from \"../Shape\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { AABB, AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\n/**\n * A line segment (edge) shape. These can be connected in chains or loops to\n * other edge shapes. The connectivity information is used to ensure correct\n * contact normals.\n */\nexport class EdgeShape extends Shape {\n static TYPE = \"edge\" as const;\n /** @hidden */ m_type: \"edge\";\n\n /** @hidden */ m_radius: number;\n\n // These are the edge vertices\n /** @hidden */ m_vertex1: Vec2;\n /** @hidden */ m_vertex2: Vec2;\n\n // Optional adjacent vertices. These are used for smooth collision.\n // Used by chain shape.\n /** @hidden */ m_vertex0: Vec2;\n /** @hidden */ m_vertex3: Vec2;\n /** @hidden */ m_hasVertex0: boolean;\n /** @hidden */ m_hasVertex3: boolean;\n\n constructor(v1?: Vec2Value, v2?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof EdgeShape)) {\n return new EdgeShape(v1, v2);\n }\n\n super();\n\n this.m_type = EdgeShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n\n this.m_vertex1 = v1 ? Vec2.clone(v1) : Vec2.zero();\n this.m_vertex2 = v2 ? Vec2.clone(v2) : Vec2.zero();\n\n this.m_vertex0 = Vec2.zero();\n this.m_vertex3 = Vec2.zero();\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertex1: this.m_vertex1,\n vertex2: this.m_vertex2,\n\n vertex0: this.m_vertex0,\n vertex3: this.m_vertex3,\n hasVertex0: this.m_hasVertex0,\n hasVertex3: this.m_hasVertex3,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): EdgeShape {\n const shape = new EdgeShape(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\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getType(): \"edge\" {\n return this.m_type;\n }\n\n /** @internal @deprecated */\n setNext(v?: Vec2Value): EdgeShape {\n return this.setNextVertex(v);\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n setNextVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex3.setVec2(v);\n this.m_hasVertex3 = true;\n } else {\n this.m_vertex3.setZero();\n this.m_hasVertex3 = false;\n }\n return this;\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n getNextVertex(): Vec2 {\n return this.m_vertex3;\n }\n\n /** @internal @deprecated */\n setPrev(v?: Vec2Value): EdgeShape {\n return this.setPrevVertex(v);\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n setPrevVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex0.setVec2(v);\n this.m_hasVertex0 = true;\n } else {\n this.m_vertex0.setZero();\n this.m_hasVertex0 = false;\n }\n return this;\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n getPrevVertex(): Vec2 {\n return this.m_vertex0;\n }\n\n /**\n * Set this as an isolated edge.\n */\n _set(v1: Vec2Value, v2: Vec2Value): EdgeShape {\n this.m_vertex1.setVec2(v1);\n this.m_vertex2.setVec2(v2);\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n return this;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): EdgeShape {\n const clone = new EdgeShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // p = p1 + t * d\n // v = v1 + s * e\n // p1 + t * d = v1 + s * e\n // s * e - t * d = p1 - v1\n\n // NOT_USED(childIndex);\n\n // Put the ray into the edge's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n const v1 = this.m_vertex1;\n const v2 = this.m_vertex2;\n const e = Vec2.sub(v2, v1);\n const normal = Vec2.neo(e.y, -e.x);\n normal.normalize();\n\n // q = p1 + t * d\n // dot(normal, q - v1) = 0\n // dot(normal, p1 - v1) + t * dot(normal, d) = 0\n const numerator = Vec2.dot(normal, Vec2.sub(v1, p1));\n const denominator = Vec2.dot(normal, d);\n\n if (denominator == 0.0) {\n return false;\n }\n\n const t = numerator / denominator;\n if (t < 0.0 || input.maxFraction < t) {\n return false;\n }\n\n const q = Vec2.add(p1, Vec2.mulNumVec2(t, d));\n\n // q = v1 + s * r\n // s = dot(q - v1, r) / dot(r, r)\n const r = Vec2.sub(v2, v1);\n const rr = Vec2.dot(r, r);\n if (rr == 0.0) {\n return false;\n }\n\n const s = Vec2.dot(Vec2.sub(q, v1), r) / rr;\n if (s < 0.0 || 1.0 < s) {\n return false;\n }\n\n output.fraction = t;\n if (numerator > 0.0) {\n output.normal = Rot.mulVec2(xf.q, normal).neg();\n } else {\n output.normal = Rot.mulVec2(xf.q, normal);\n }\n return true;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n matrix.transformVec2(v1, xf, this.m_vertex1);\n matrix.transformVec2(v2, xf, this.m_vertex2);\n\n AABB.combinePoints(aabb, v1, v2);\n AABB.extend(aabb, this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Edge = EdgeShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { AABBValue, RayCastOutput, RayCastInput, AABB } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\nimport { EdgeShape } from \"./EdgeShape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\n\n/**\n * A chain shape is a free form sequence of line segments. The chain has\n * two-sided collision, so you can use inside and outside collision. Therefore,\n * you may use any winding order. Connectivity information is used to create\n * smooth collisions.\n *\n * WARNING: The chain will not collide properly if there are self-intersections.\n */\nexport class ChainShape extends Shape {\n static TYPE = \"chain\" as const;\n /** @hidden */ m_type: \"chain\";\n\n /** @hidden */ m_radius: number;\n\n /** @hidden */ m_vertices: Vec2[];\n /** @hidden */ m_count: number;\n /** @hidden */ m_prevVertex: Vec2 | null;\n /** @hidden */ m_nextVertex: Vec2 | null;\n /** @hidden */ m_hasPrevVertex: boolean;\n /** @hidden */ m_hasNextVertex: boolean;\n\n /** @hidden */ m_isLoop: boolean;\n\n constructor(vertices?: Vec2Value[], loop?: boolean) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof ChainShape)) {\n return new ChainShape(vertices, loop);\n }\n\n super();\n\n this.m_type = ChainShape.TYPE;\n this.m_radius = Settings.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\n this.m_isLoop = !!loop;\n\n if (vertices && vertices.length) {\n if (loop) {\n this._createLoop(vertices);\n } else {\n this._createChain(vertices);\n }\n }\n }\n\n /** @internal */\n _serialize(): object {\n const data = {\n type: this.m_type,\n vertices: this.m_vertices,\n isLoop: this.m_isLoop,\n hasPrevVertex: this.m_hasPrevVertex,\n hasNextVertex: this.m_hasNextVertex,\n prevVertex: null as Vec2 | null,\n nextVertex: null as Vec2 | 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\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): ChainShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n const shape = new ChainShape(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\n // clear() {\n // this.m_vertices.length = 0;\n // this.m_count = 0;\n // }\n\n getType(): \"chain\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal\n * Create a loop. This automatically adjusts connectivity.\n *\n * @param vertices an array of vertices, these are copied\n * @param count the vertex count\n */\n _createLoop(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 3);\n if (vertices.length < 3) {\n return;\n }\n\n for (let i = 1; i < vertices.length; ++i) {\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n // If the code crashes here, it means your vertices are too close together.\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_vertices = [];\n this.m_count = vertices.length + 1;\n for (let 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\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\n /**\n * @internal\n * Create a chain with isolated end vertices.\n *\n * @param vertices an array of vertices, these are copied\n */\n _createChain(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 2);\n for (let i = 1; i < vertices.length; ++i) {\n // If the code crashes here, it means your vertices are too close together.\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_count = vertices.length;\n for (let i = 0; i < vertices.length; ++i) {\n this.m_vertices[i] = Vec2.clone(vertices[i]);\n }\n\n this.m_hasPrevVertex = false;\n this.m_hasNextVertex = false;\n this.m_prevVertex = null;\n this.m_nextVertex = null;\n return this;\n }\n\n /** @hidden */\n _reset(): void {\n if (this.m_isLoop) {\n this._createLoop(this.m_vertices);\n } else {\n this._createChain(this.m_vertices);\n }\n }\n\n /**\n * Establish connectivity to a vertex that precedes the first vertex. Don't call\n * this for loops.\n */\n setPrevVertex(prevVertex: Vec2): void {\n // todo: copy or reference\n this.m_prevVertex = prevVertex;\n this.m_hasPrevVertex = true;\n }\n\n getPrevVertex(): Vec2 {\n return this.m_prevVertex;\n }\n\n /**\n * Establish connectivity to a vertex that follows the last vertex. Don't call\n * this for loops.\n */\n setNextVertex(nextVertex: Vec2): void {\n // todo: copy or reference\n this.m_nextVertex = nextVertex;\n this.m_hasNextVertex = true;\n }\n\n getNextVertex(): Vec2 {\n return this.m_nextVertex;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): ChainShape {\n const clone = new ChainShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): number {\n // edge count = vertex count - 1\n return this.m_count - 1;\n }\n\n // Get a child edge.\n getChildEdge(edge: EdgeShape, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count - 1);\n edge.m_type = EdgeShape.TYPE;\n edge.m_radius = this.m_radius;\n\n edge.m_vertex1 = this.m_vertices[childIndex];\n edge.m_vertex2 = this.m_vertices[childIndex + 1];\n\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\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\n getVertex(index: number): Vec2 {\n _ASSERT && console.assert(0 <= index && index <= this.m_count);\n if (index < this.m_count) {\n return this.m_vertices[index];\n } else {\n return this.m_vertices[0];\n }\n }\n\n isLoop(): boolean {\n return this.m_isLoop;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * This always return false.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n const edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1));\n return edgeShape.rayCast(output, input, xf, 0);\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n matrix.transformVec2(v1, xf, this.getVertex(childIndex));\n matrix.transformVec2(v2, xf, this.getVertex(childIndex + 1));\n\n AABB.combinePoints(aabb, v1, v2);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * Chains have zero mass.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.zeroVec2(massData.center);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\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}\n\nexport const Chain = ChainShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const center = matrix.vec2(0, 0);\n/** @internal */ const s = matrix.vec2(0, 0);\n\n/**\n * A convex polygon. It is assumed that the interior of the polygon is to the\n * left of each edge. Polygons have a maximum number of vertices equal to\n * Settings.maxPolygonVertices. In most cases you should not need many vertices\n * for a convex polygon. extends Shape\n */\nexport class PolygonShape extends Shape {\n static TYPE = \"polygon\" as const;\n /** @hidden */ m_type: \"polygon\";\n\n /** @hidden */ m_centroid: Vec2;\n /** @hidden */ m_vertices: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_normals: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_count: number;\n /** @hidden */ m_radius: number;\n\n constructor(vertices?: Vec2Value[]) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PolygonShape)) {\n return new PolygonShape(vertices);\n }\n\n super();\n\n this.m_type = PolygonShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n this.m_centroid = Vec2.zero();\n this.m_vertices = [];\n this.m_normals = [];\n this.m_count = 0;\n\n if (vertices && vertices.length) {\n this._set(vertices);\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertices: this.m_vertices,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): PolygonShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n\n const shape = new PolygonShape(vertices);\n return shape;\n }\n\n getType(): \"polygon\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): PolygonShape {\n const clone = new PolygonShape();\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 (let i = 0; i < this.m_count; i++) {\n clone.m_vertices.push(this.m_vertices[i].clone());\n }\n for (let i = 0; i < this.m_normals.length; i++) {\n clone.m_normals.push(this.m_normals[i].clone());\n }\n return clone;\n }\n\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /** @hidden */\n _reset(): void {\n this._set(this.m_vertices);\n }\n\n /**\n * @internal\n *\n * Create a convex hull from the given array of local points. The count must be\n * in the range [3, Settings.maxPolygonVertices].\n *\n * Warning: the points may be re-ordered, even if they form a convex polygon\n * Warning: collinear points are handled but not removed. Collinear points may\n * lead to poor stacking behavior.\n */\n _set(vertices: Vec2Value[]): void {\n _ASSERT && console.assert(3 <= vertices.length && vertices.length <= Settings.maxPolygonVertices);\n if (vertices.length < 3) {\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n let n = math_min(vertices.length, Settings.maxPolygonVertices);\n\n // Perform welding and copy vertices into local buffer.\n const ps: Vec2[] = []; // [Settings.maxPolygonVertices];\n for (let i = 0; i < n; ++i) {\n const v = vertices[i];\n\n let unique = true;\n for (let j = 0; j < ps.length; ++j) {\n if (Vec2.distanceSquared(v, ps[j]) < 0.25 * Settings.linearSlopSquared) {\n unique = false;\n break;\n }\n }\n\n if (unique) {\n ps.push(Vec2.clone(v));\n }\n }\n\n n = ps.length;\n if (n < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n // Create the convex hull using the Gift wrapping algorithm\n // http://en.wikipedia.org/wiki/Gift_wrapping_algorithm\n\n // Find the right most point on the hull (in case of multiple points bottom most is used)\n let i0 = 0;\n let x0 = ps[0].x;\n for (let i = 1; i < n; ++i) {\n const x = ps[i].x;\n if (x > x0 || (x === x0 && ps[i].y < ps[i0].y)) {\n i0 = i;\n x0 = x;\n }\n }\n\n const hull = [] as number[]; // [Settings.maxPolygonVertices];\n let m = 0;\n let ih = i0;\n\n while (true) {\n _ASSERT && console.assert(m < Settings.maxPolygonVertices);\n hull[m] = ih;\n\n let ie = 0;\n for (let j = 1; j < n; ++j) {\n if (ie === ih) {\n ie = j;\n continue;\n }\n\n const r = Vec2.sub(ps[ie], ps[hull[m]]);\n const v = Vec2.sub(ps[j], ps[hull[m]]);\n const c = Vec2.crossVec2Vec2(r, v);\n // c < 0 means counter-clockwise wrapping, c > 0 means clockwise wrapping\n if (c < 0.0) {\n ie = j;\n }\n\n // Collinearity check\n if (c === 0.0 && v.lengthSquared() > r.lengthSquared()) {\n ie = j;\n }\n }\n\n ++m;\n ih = ie;\n\n if (ie === i0) {\n break;\n }\n }\n\n if (m < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n this.m_count = m;\n\n // Copy vertices.\n this.m_vertices = [];\n for (let i = 0; i < m; ++i) {\n this.m_vertices[i] = ps[hull[i]];\n }\n\n // Compute normals. Ensure the edges have non-zero length.\n for (let i = 0; i < m; ++i) {\n const i1 = i;\n const i2 = i + 1 < m ? i + 1 : 0;\n const edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]);\n _ASSERT && console.assert(edge.lengthSquared() > EPSILON * EPSILON);\n this.m_normals[i] = Vec2.crossVec2Num(edge, 1.0);\n this.m_normals[i].normalize();\n }\n\n // Compute the polygon centroid.\n this.m_centroid = computeCentroid(this.m_vertices, m);\n }\n\n /** @internal */ _setAsBox(hx: number, hy: number, center?: Vec2Value, angle?: number): void {\n // start with right-bottom, counter-clockwise, as in Gift wrapping algorithm in PolygonShape._set()\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\n this.m_normals[0] = Vec2.neo(1.0, 0.0);\n this.m_normals[1] = Vec2.neo(0.0, 1.0);\n this.m_normals[2] = Vec2.neo(-1.0, 0.0);\n this.m_normals[3] = Vec2.neo(0.0, -1.0);\n\n this.m_count = 4;\n\n if (center && Vec2.isValid(center)) {\n angle = angle || 0;\n\n matrix.copyVec2(this.m_centroid, center);\n\n const xf = Transform.identity();\n xf.p.setVec2(center);\n xf.q.setAngle(angle);\n\n // Transform vertices and normals.\n for (let i = 0; i < this.m_count; ++i) {\n this.m_vertices[i] = Transform.mulVec2(xf, this.m_vertices[i]);\n this.m_normals[i] = Rot.mulVec2(xf.q, this.m_normals[i]);\n }\n }\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const pLocal = matrix.detransformVec2(temp, xf, p);\n\n for (let i = 0; i < this.m_count; ++i) {\n const dot = matrix.dotVec2(this.m_normals[i], pLocal) - matrix.dotVec2(this.m_normals[i], this.m_vertices[i]);\n if (dot > 0.0) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n\n // Put the ray into the polygon's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n let lower = 0.0;\n let upper = input.maxFraction;\n\n let index = -1;\n\n for (let i = 0; i < this.m_count; ++i) {\n // p = p1 + a * d\n // dot(normal, p - v) = 0\n // dot(normal, p1 - v) + a * dot(normal, d) = 0\n const numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1));\n const denominator = Vec2.dot(this.m_normals[i], d);\n\n if (denominator == 0.0) {\n if (numerator < 0.0) {\n return false;\n }\n } else {\n // Note: we want this predicate without division:\n // lower < numerator / denominator, where denominator < 0\n // Since denominator < 0, we have to flip the inequality:\n // lower < numerator / denominator <==> denominator * lower > numerator.\n if (denominator < 0.0 && numerator < lower * denominator) {\n // Increase lower.\n // The segment enters this half-space.\n lower = numerator / denominator;\n index = i;\n } else if (denominator > 0.0 && numerator < upper * denominator) {\n // Decrease upper.\n // The segment exits this half-space.\n upper = numerator / denominator;\n }\n }\n\n // The use of epsilon here causes the assert on lower to trip\n // in some cases. Apparently the use of epsilon was to make edge\n // shapes work, but now those are handled separately.\n // if (upper < lower - matrix.EPSILON)\n if (upper < lower) {\n return false;\n }\n }\n\n _ASSERT && console.assert(0.0 <= lower && lower <= input.maxFraction);\n\n if (index >= 0) {\n output.fraction = lower;\n output.normal = Rot.mulVec2(xf.q, this.m_normals[index]);\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const v = matrix.transformVec2(temp, xf, this.m_vertices[i]);\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, v.y);\n maxY = math_max(maxY, v.y);\n }\n\n matrix.setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius);\n matrix.setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n // Polygon mass, centroid, and inertia.\n // Let rho be the polygon density in mass per unit area.\n // Then:\n // mass = rho * int(dA)\n // centroid.x = (1/mass) * rho * int(x * dA)\n // centroid.y = (1/mass) * rho * int(y * dA)\n // I = rho * int((x*x + y*y) * dA)\n //\n // We can compute these integrals by summing all the integrals\n // for each triangle of the polygon. To evaluate the integral\n // for a single triangle, we make a change of variables to\n // the (u,v) coordinates of the triangle:\n // x = x0 + e1x * u + e2x * v\n // y = y0 + e1y * u + e2y * v\n // where 0 <= u && 0 <= v && u + v <= 1.\n //\n // We integrate u from [0,1-v] and then v from [0,1].\n // We also need to use the Jacobian of the transformation:\n // D = cross(e1, e2)\n //\n // Simplification: triangle centroid = (1/3) * (p1 + p2 + p3)\n //\n // The rest of the derivation is handled by computer algebra.\n\n _ASSERT && console.assert(this.m_count >= 3);\n\n matrix.zeroVec2(center);\n let area = 0.0;\n let I = 0.0;\n\n // s is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n matrix.zeroVec2(s);\n\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < this.m_count; ++i) {\n matrix.plusVec2(s, this.m_vertices[i]);\n }\n matrix.scaleVec2(s, 1.0 / this.m_count, s);\n\n const k_inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < this.m_count; ++i) {\n // Triangle vertices.\n matrix.subVec2(e1, this.m_vertices[i], s);\n if ( i + 1 < this.m_count) {\n matrix.subVec2(e2, this.m_vertices[i + 1], s);\n } else {\n matrix.subVec2(e2, this.m_vertices[0], s);\n }\n\n const D = matrix.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine2Vec2(temp, triangleArea * k_inv3, e1, triangleArea * k_inv3, e2);\n matrix.plusVec2(center, temp);\n\n const ex1 = e1.x;\n const ey1 = e1.y;\n const ex2 = e2.x;\n const ey2 = e2.y;\n\n const intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2;\n const inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2;\n\n I += (0.25 * k_inv3 * D) * (intx2 + inty2);\n }\n\n // Total mass\n massData.mass = density * area;\n\n // Center of mass\n _ASSERT && console.assert(area > EPSILON);\n matrix.scaleVec2(center, 1.0 / area, center);\n matrix.addVec2(massData.center, center, s);\n\n // Inertia tensor relative to the local origin (point s).\n massData.I = density * I;\n\n // Shift to center of mass then to original body origin.\n massData.I += massData.mass * (matrix.dotVec2(massData.center, massData.center) - matrix.dotVec2(center, center));\n }\n\n /**\n * Validate convexity. This is a very time consuming operation.\n * @returns true if valid\n */\n validate(): boolean {\n for (let i = 0; i < this.m_count; ++i) {\n const i1 = i;\n const i2 = i < this.m_count - 1 ? i1 + 1 : 0;\n const p = this.m_vertices[i1];\n matrix.subVec2(e, this.m_vertices[i2], p);\n\n for (let j = 0; j < this.m_count; ++j) {\n if (j == i1 || j == i2) {\n continue;\n }\n\n const c = matrix.crossVec2Vec2(e, matrix.subVec2(temp, this.m_vertices[j], p));\n if (c < 0.0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\n for (let 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}\n\n/** @internal */ function computeCentroid(vs: Vec2[], count: number): Vec2 {\n _ASSERT && console.assert(count >= 3);\n\n const c = Vec2.zero();\n let area = 0.0;\n\n // pRef is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n const pRef = Vec2.zero();\n if (false) {\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < count; ++i) {\n pRef.add(vs[i]);\n }\n pRef.mul(1.0 / count);\n }\n\n const inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < count; ++i) {\n // Triangle vertices.\n const p1 = pRef;\n const p2 = vs[i];\n const p3 = i + 1 < count ? vs[i + 1] : vs[0];\n\n const e1 = Vec2.sub(p2, p1);\n const e2 = Vec2.sub(p3, p1);\n\n const D = Vec2.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine3Vec2(temp, 1, p1, 1, p2, 1, p3);\n matrix.plusScaleVec2(c, triangleArea * inv3, temp);\n }\n\n // Centroid\n _ASSERT && console.assert(area > EPSILON);\n c.mul(1.0 / area);\n return c;\n}\n\nexport const Polygon = PolygonShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Shape } from \"../Shape\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_PI = Math.PI;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\nexport class CircleShape extends Shape {\n static TYPE = \"circle\" as const;\n /** @hidden */ m_type: \"circle\";\n\n /** @hidden */ m_p: Vec2;\n /** @hidden */ m_radius: number;\n\n constructor(position: Vec2Value, radius?: number);\n constructor(radius?: number);\n constructor(a: any, b?: any) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof CircleShape)) {\n return new CircleShape(a, b);\n }\n\n super();\n\n this.m_type = CircleShape.TYPE;\n this.m_p = Vec2.zero();\n this.m_radius = 1;\n\n if (typeof a === \"object\" && Vec2.isValid(a)) {\n this.m_p.setVec2(a);\n\n if (typeof b === \"number\") {\n this.m_radius = b;\n }\n\n } else if (typeof a === \"number\") {\n this.m_radius = a;\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n p: this.m_p,\n radius: this.m_radius,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): CircleShape {\n return new CircleShape(data.p, data.radius);\n }\n\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getType(): \"circle\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getCenter(): Vec2 {\n return this.m_p;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): CircleShape {\n const clone = new CircleShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const center = matrix.transformVec2(temp, xf, this.m_p);\n return matrix.distSqrVec2(p, center) <= this.m_radius * this.m_radius;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // Collision Detection in Interactive 3D Environments by Gino van den Bergen\n // From Section 3.1.2\n // x = s + a * r\n // norm(x) = radius\n\n const position = Vec2.add(xf.p, Rot.mulVec2(xf.q, this.m_p));\n const s = Vec2.sub(input.p1, position);\n const b = Vec2.dot(s, s) - this.m_radius * this.m_radius;\n\n // Solve quadratic equation.\n const r = Vec2.sub(input.p2, input.p1);\n const c = Vec2.dot(s, r);\n const rr = Vec2.dot(r, r);\n const sigma = c * c - rr * b;\n\n // Check for negative discriminant and short segment.\n if (sigma < 0.0 || rr < EPSILON) {\n return false;\n }\n\n // Find the point of intersection of the line with the circle.\n let a = -(c + math_sqrt(sigma));\n\n // Is the intersection point on the segment?\n if (0.0 <= a && a <= input.maxFraction * rr) {\n a /= rr;\n output.fraction = a;\n output.normal = Vec2.add(s, Vec2.mulNumVec2(a, r));\n output.normal.normalize();\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n const p = matrix.transformVec2(temp, xf, this.m_p);\n\n matrix.setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius);\n matrix.setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n massData.mass = density * math_PI * this.m_radius * this.m_radius;\n matrix.copyVec2(massData.center, this.m_p);\n // inertia about the local origin\n massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + matrix.lengthSqrVec2(this.m_p));\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Circle = CircleShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. A value of 0 disables softness.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * Distance length.\n */\n length?: number;\n}\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointDef extends JointDef, DistanceJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0\n};\n\n/**\n * A distance joint constrains two points on two bodies to remain at a fixed\n * distance from each other. You can view this as a massless, rigid rod.\n */\nexport class DistanceJoint extends Joint {\n static TYPE = \"distance-joint\" as const;\n\n // Solver shared\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_length: number;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_gamma: number;\n /** @internal */ m_bias: number;\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n /**\n * @param def DistanceJoint definition.\n */\n constructor(def: DistanceJointDef);\n /**\n * @param anchorA Anchor A in global coordination.\n * @param anchorB Anchor B in global coordination.\n */\n constructor(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value);\n constructor(def: DistanceJointDef, bodyA?: Body, bodyB?: Body, anchorA?: Vec2Value, anchorB?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof DistanceJoint)) {\n return new DistanceJoint(def, bodyA, bodyB, anchorA, anchorB);\n }\n\n // order of constructor arguments is changed in v0.2\n if (bodyB && anchorA && (\"m_type\" in anchorA) && (\"x\" in bodyB) && (\"y\" in bodyB)) {\n const temp = bodyB;\n bodyB = anchorA as any as Body;\n anchorA = temp as any as Vec2;\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = DistanceJoint.TYPE;\n\n // Solver shared\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 :\n 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.0;\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n\n // 1-D constrained system\n // m (v2 - v1) = lambda\n // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass.\n // x2 = x1 + h * v2\n\n // 1-D mass-damper-spring system\n // m (v2 - v1) + h * d * v2 + h * k *\n\n // C = norm(p2 - p1) - L\n // u = (p2 - p1) / norm(p2 - p1)\n // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1))\n // J = [-u -cross(r1, u) u cross(r2, u)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n length: this.m_length,\n\n impulse: this.m_impulse,\n gamma: this.m_gamma,\n bias: this.m_bias,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): DistanceJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new DistanceJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\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\n if (def.length > 0) {\n this.m_length = +def.length;\n } else if (def.length < 0) { // don't change length\n } else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) {\n this.m_length = Vec2.distance(\n this.m_bodyA.getWorldPoint(this.m_localAnchorA),\n this.m_bodyB.getWorldPoint(this.m_localAnchorB)\n );\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the natural length. Manipulating the length can lead to non-physical\n * behavior when the frequency is zero.\n */\n setLength(length: number): void {\n this.m_length = length;\n }\n\n /**\n * Get the natural length.\n */\n getLength(): number {\n return this.m_length;\n }\n\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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(cB, this.m_rB), Vec2.add(cA, this.m_rA));\n\n // Handle singularity.\n const length = this.m_u.length();\n if (length > Settings.linearSlop) {\n this.m_u.mul(1.0 / length);\n } else {\n this.m_u.setNum(0.0, 0.0);\n }\n\n const crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n let invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu;\n\n // Compute the effective mass matrix.\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (this.m_frequencyHz > 0.0) {\n const C = length - this.m_length;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * this.m_mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_mass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invMass += this.m_gamma;\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n } else {\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n const Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA);\n\n const impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse);\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n if (this.m_frequencyHz > 0.0) {\n // There is no position correction for soft distance constraints.\n return true;\n }\n\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const length = u.normalize();\n const C = clamp(length - this.m_length, -Settings.maxLinearCorrection, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointOpt extends JointOpt {\n /**\n * The maximum friction force in N.\n */\n maxForce?: number;\n /**\n * The maximum friction torque in N-m.\n */\n maxTorque?: number;\n}\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointDef extends JointDef, FrictionJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n maxTorque : 0.0,\n};\n\n/**\n * Friction joint. This is used for top-down friction. It provides 2D\n * translational friction and angular friction.\n */\nexport class FrictionJoint extends Joint {\n static TYPE = \"friction-joint\" as const;\n\n /** @internal */ m_type: \"friction-joint\";\n\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n // Solver shared\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: FrictionJointDef);\n /**\n * @param anchor Anchor in global coordination.\n */\n constructor(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: FrictionJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof FrictionJoint)) {\n return new FrictionJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = FrictionJoint.TYPE;\n\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\n // Solver shared\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): FrictionJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new FrictionJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y\n * 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\n * this.m_rB.x;\n\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.sub(\n Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)),\n Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA))\n );\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = this.m_linearImpulse;\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) {\n this.m_linearImpulse.normalize();\n this.m_linearImpulse.mul(maxImpulse);\n }\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Vec3, Vec3Value } from \"./Vec3\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 3-by-3 matrix. Stored in column-major order.\n */\nexport class Mat33 {\n ex: Vec3;\n ey: Vec3;\n ez: Vec3;\n\n constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value);\n constructor();\n constructor(a?: Vec3Value, b?: Vec3Value, c?: Vec3Value) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec3.clone(a);\n this.ey = Vec3.clone(b);\n this.ez = Vec3.clone(c);\n } else {\n this.ex = Vec3.zero();\n this.ey = Vec3.zero();\n this.ez = Vec3.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat33.isValid(o), \"Invalid Mat33!\", o);\n }\n\n /**\n * Set this matrix to all zeros.\n */\n setZero(): Mat33 {\n this.ex.setZero();\n this.ey.setZero();\n this.ez.setZero();\n return this;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve33(v: Vec3Value): Vec3 {\n // let det = matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, this.ez));\n let cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y;\n let cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z;\n let cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x;\n let det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = new Vec3();\n // r.x = det * matrix.dotVec3(v, matrix.newCrossVec3(this.ey, this.ez));\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 * (v.x * cross_x + v.y * cross_y + v.z * cross_z);\n\n // r.y = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(v, this.ez));\n cross_x = v.y * this.ez.z - v.z * this.ez.y;\n cross_y = v.z * this.ez.x - v.x * this.ez.z;\n cross_z = v.x * this.ez.y - v.y * this.ez.x;\n r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z);\n\n // r.z = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, v));\n cross_x = this.ey.y * v.z - this.ey.z * v.y;\n cross_y = this.ey.z * v.x - this.ey.x * v.z;\n cross_z = this.ey.x * v.y - this.ey.y * v.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\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix\n * equation.\n */\n solve22(v: Vec2Value): Vec2 {\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a21 = this.ex.y;\n const a22 = this.ey.y;\n let det = a11 * a22 - a12 * a21;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = Vec2.zero();\n r.x = det * (a22 * v.x - a12 * v.y);\n r.y = det * (a11 * v.y - a21 * v.x);\n return r;\n }\n\n /**\n * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if\n * singular.\n */\n getInverse22(M: Mat33): void {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n M.ex.x = det * d;\n M.ey.x = -det * b;\n M.ex.z = 0.0;\n M.ex.y = -det * c;\n M.ey.y = det * a;\n M.ey.z = 0.0;\n M.ez.x = 0.0;\n M.ez.y = 0.0;\n M.ez.z = 0.0;\n }\n\n /**\n * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix\n * if singular.\n */\n getSymInverse33(M: Mat33): void {\n let det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez));\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a13 = this.ez.x;\n const a22 = this.ey.y;\n const a23 = this.ez.y;\n const a33 = this.ez.z;\n\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\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\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\n /**\n * Multiply a matrix times a vector.\n */\n static mul(a: Mat33, b: Vec2Value): Vec2;\n static mul(a: Mat33, b: Vec3Value): Vec3;\n static mul(a, b) {\n _ASSERT && Mat33.assert(a);\n if (b && \"z\" in b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n\n } else if (b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec3(a: Mat33, b: Vec3Value): Vec3 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n }\n\n static mulVec2(a: Mat33, b: Vec2Value): Vec2 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n static add(a: Mat33, b: Mat33): Mat33 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Mat33.assert(b);\n return new Mat33(\n Vec3.add(a.ex, b.ex),\n Vec3.add(a.ey, b.ey),\n Vec3.add(a.ez, b.ez)\n );\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n// todo: use string?\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n} \n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointOpt extends JointOpt {\n /**\n * The lower angle for the joint limit (radians).\n */\n lowerAngle?: number;\n /**\n * The upper angle for the joint limit (radians).\n */\n upperAngle?: number;\n /**\n * The maximum motor torque used to achieve the desired motor speed. Usually\n * in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed. Usually in radians per second.\n */\n motorSpeed?: number;\n /**\n * A flag to enable joint limits.\n */\n enableLimit?: boolean;\n /**\n * A flag to enable the joint motor.\n */\n enableMotor?: boolean;\n}\n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointDef extends JointDef, RevoluteJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n lowerAngle : 0.0,\n upperAngle : 0.0,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n enableLimit : false,\n enableMotor : false\n};\n\n/**\n * A revolute joint constrains two bodies to share a common point while they are\n * free to rotate about the point. The relative rotation about the shared point\n * is the joint angle. You can limit the relative rotation with a joint limit\n * that specifies a lower and upper angle. You can use a motor to drive the\n * relative rotation about the shared point. A maximum motor torque is provided\n * so that infinite forces are not generated.\n */\nexport class RevoluteJoint extends Joint {\n static TYPE = \"revolute-joint\" as const;\n\n /** @internal */ m_type: \"revolute-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerAngle: number;\n /** @internal */ m_upperAngle: number;\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n // effective mass for point-to-point constraint.\n /** @internal */ m_mass: Mat33;\n // effective mass for motor/limit angular constraint.\n /** @internal */ m_motorMass: number;\n /** @internal */ m_limitState: number;\n\n constructor(def: RevoluteJointDef);\n constructor(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RevoluteJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RevoluteJoint)) {\n return new RevoluteJoint(def, bodyA, bodyB, anchor);\n }\n\n def = def ?? {} as RevoluteJointDef;\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_mass = new Mat33();\n this.m_limitState = LimitState.inactiveLimit;\n\n this.m_type = RevoluteJoint.TYPE;\n\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\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\n if (Number.isFinite(def.referenceAngle)) {\n this.m_referenceAngle = def.referenceAngle;\n } else {\n this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle();\n }\n\n this.m_impulse = new Vec3();\n this.m_motorImpulse = 0.0;\n\n this.m_lowerAngle = def.lowerAngle ?? DEFAULTS.lowerAngle;\n this.m_upperAngle = def.upperAngle ?? DEFAULTS.upperAngle;\n this.m_maxMotorTorque = def.maxMotorTorque ?? DEFAULTS.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed ?? DEFAULTS.motorSpeed;\n this.m_enableLimit = def.enableLimit ?? DEFAULTS.enableLimit;\n this.m_enableMotor = def.enableMotor ?? DEFAULTS.enableMotor;\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Motor constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any):RevoluteJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RevoluteJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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 !== undefined) {\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 !== undefined) {\n this.m_enableMotor = def.enableMotor;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle in radians.\n */\n getJointAngle(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle speed in radians per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_angularVelocity - bA.m_angularVelocity;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Get the current motor torque given the inverse time step. Unit is N*m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set the motor speed in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set the maximum motor torque, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit in radians.\n */\n getLowerLimit(): number {\n return this.m_lowerAngle;\n }\n\n /**\n * Get the upper joint limit in radians.\n */\n getUpperLimit(): number {\n return this.m_upperAngle;\n }\n\n /**\n * Set the joint limits in radians.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(lower <= upper);\n\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.0;\n this.m_lowerAngle = lower;\n this.m_upperAngle = upper;\n }\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force given the inverse time step. Unit is N.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque due to the joint limit given the inverse time step.\n * Unit is N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\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\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n\n if (this.m_enableMotor == false || fixedRotation) {\n this.m_motorImpulse = 0.0;\n }\n\n if (this.m_enableLimit && fixedRotation == false) {\n const jointAngle = aB - aA - this.m_referenceAngle;\n\n if (math_abs(this.m_upperAngle - this.m_lowerAngle) < 2.0 * Settings.angularSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointAngle <= this.m_lowerAngle) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atLowerLimit;\n\n } else if (jointAngle >= this.m_upperAngle) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atUpperLimit;\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\n // Solve motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits && fixedRotation == false) {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(this.m_mass.solve33(Cdot));\n\n if (this.m_limitState == LimitState.equalLimits) {\n this.m_impulse.add(impulse);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse < 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse > 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n\n } else {\n // Solve point-to-point constraint\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const impulse = this.m_mass.solve22(Vec2.neg(Cdot));\n\n this.m_impulse.x += impulse.x;\n this.m_impulse.y += impulse.y;\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n let angularError = 0.0;\n let positionError = 0.0;\n\n const fixedRotation = (this.m_invIA + this.m_invIB == 0.0);\n\n // Solve angular limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const angle = aB - aA - this.m_referenceAngle;\n let limitImpulse = 0.0;\n\n if (this.m_limitState == LimitState.equalLimits) {\n // Prevent large angular corrections\n const C = clamp(angle - this.m_lowerAngle, -Settings.maxAngularCorrection, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n angularError = math_abs(C);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n let C = angle - this.m_lowerAngle;\n angularError = -C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C + Settings.angularSlop, -Settings.maxAngularCorrection, 0.0);\n limitImpulse = -this.m_motorMass * C;\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n let C = angle - this.m_upperAngle;\n angularError = C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C - Settings.angularSlop, 0.0, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n }\n\n aA -= this.m_invIA * limitImpulse;\n aB += this.m_invIB * limitImpulse;\n }\n\n // Solve point-to-point constraint.\n {\n qA.setAngle(aA);\n qB.setAngle(aB);\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n const C = Vec2.zero();\n C.addCombine(1, cB, 1, rB);\n C.subCombine(1, cA, 1, rA);\n positionError = C.length();\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y;\n K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y;\n K.ey.x = K.ex.y;\n K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x;\n\n const impulse = Vec2.neg(K.solve(C));\n\n cA.subMul(mA, impulse);\n aA -= iA * Vec2.crossVec2Vec2(rA, impulse);\n\n cB.addMul(mB, impulse);\n aB += iB * Vec2.crossVec2Vec2(rB, impulse);\n }\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3, \n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointOpt extends JointOpt {\n /**\n * Enable/disable the joint limit.\n */\n enableLimit?: boolean;\n /**\n * The lower translation limit, usually in meters.\n */\n lowerTranslation?: number;\n /**\n * The upper translation limit, usually in meters.\n */\n upperTranslation?: number;\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorForce?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointDef extends JointDef, PrismaticJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation unit axis in bodyA.\n */\n localAxisA: Vec2Value;\n /**\n * referenceAngle The constrained angle between the bodies:\n * bodyB_angle - bodyA_angle.\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableLimit : false,\n lowerTranslation : 0.0,\n upperTranslation : 0.0,\n enableMotor : false,\n maxMotorForce : 0.0,\n motorSpeed : 0.0\n};\n\n/**\n * A prismatic joint. This joint provides one degree of freedom: translation\n * along an axis fixed in bodyA. Relative rotation is prevented. You can use a\n * joint limit to restrict the range of motion and a joint motor to drive the\n * motion or to model joint friction.\n */\nexport class PrismaticJoint extends Joint {\n static TYPE = \"prismatic-joint\" as const;\n\n /** @internal */ m_type: \"prismatic-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerTranslation: number;\n /** @internal */ m_upperTranslation: number;\n /** @internal */ m_maxMotorForce: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n /** @internal */ m_limitState: number; // TODO enum\n /** @internal */ m_axis: Vec2;\n /** @internal */ m_perp: Vec2;\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_s1: number;\n /** @internal */ m_s2: number;\n /** @internal */ m_a1: number;\n /** @internal */ m_a2: number;\n /** @internal */ m_K: Mat33;\n\n constructor(def: PrismaticJointDef);\n constructor(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: PrismaticJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PrismaticJoint)) {\n return new PrismaticJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PrismaticJoint.TYPE;\n\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, 0.0));\n this.m_localXAxisA.normalize();\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle();\n\n this.m_impulse = new Vec3();\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n\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.inactiveLimit;\n\n this.m_axis = Vec2.zero();\n this.m_perp = Vec2.zero();\n\n this.m_K = new Mat33();\n\n // Linear constraint (point-to-line)\n // d = p2 - p1 = x2 + r2 - x1 - r1\n // C = dot(perp, d)\n // Cdot = dot(d, cross(w1, perp)) + dot(perp, v2 + cross(w2, r2) - v1 -\n // cross(w1, r1))\n // = -dot(perp, v1) - dot(cross(d + r1, perp), w1) + dot(perp, v2) +\n // dot(cross(r2, perp), v2)\n // J = [-perp, -cross(d + r1, perp), perp, cross(r2,perp)]\n //\n // Angular constraint\n // C = a2 - a1 + a_initial\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n //\n // K = J * invM * JT\n //\n // J = [-a -s1 a s2]\n // [0 -1 0 1]\n // a = perp\n // s1 = cross(d + r1, a) = cross(p2 - x1, a)\n // s2 = cross(r2, a) = cross(p2 - x2, a)\n\n // Motor/Limit linear constraint\n // C = dot(ax1, d)\n // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) +\n // dot(cross(r2, ax1), v2)\n // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)]\n\n // Block Solver\n // We develop a block solver that includes the joint limit. This makes the\n // limit stiff (inelastic) even\n // when the mass has poor distribution (leading to large torques about the\n // joint anchor points).\n //\n // The Jacobian has 3 rows:\n // J = [-uT -s1 uT s2] // linear\n // [0 -1 0 1] // angular\n // [-vT -a1 vT a2] // limit\n //\n // u = perp\n // v = axis\n // s1 = cross(d + r1, u), s2 = cross(r2, u)\n // a1 = cross(d + r1, v), a2 = cross(r2, v)\n\n // M * (v2 - v1) = JT * df\n // J * v2 = bias\n //\n // v2 = v1 + invM * JT * df\n // J * (v1 + invM * JT * df) = bias\n // K * df = bias - J * v1 = -Cdot\n // K = J * invM * JT\n // Cdot = J * v1 - bias\n //\n // Now solve for f2.\n // df = f2 - f1\n // K * (f2 - f1) = -Cdot\n // f2 = invK * (-Cdot) + f1\n //\n // Clamp accumulated limit impulse.\n // lower: f2(3) = max(f2(3), 0)\n // upper: f2(3) = min(f2(3), 0)\n //\n // Solve for correct f2(1:2)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:3) * f1\n // = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:2) * f1(1:2) + K(1:2,3) * f1(3)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3)) +\n // K(1:2,1:2) * f1(1:2)\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n //\n // Now compute impulse to be applied:\n // df = f2 - f1\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PrismaticJoint {\n data = {...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 const joint = new PrismaticJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, 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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const pA = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const pB = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = this.m_bodyA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const rA = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter));\n const rB = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter));\n const p1 = Vec2.add(bA.m_sweep.c, rA);\n const p2 = Vec2.add(bB.m_sweep.c, rB);\n const d = Vec2.sub(p2, p1);\n const axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA);\n\n const vA = bA.m_linearVelocity;\n const vB = bB.m_linearVelocity;\n const wA = bA.m_angularVelocity;\n const wB = bB.m_angularVelocity;\n\n const speed = Vec2.dot(d, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB, wB, rB), Vec2.addCrossNumVec2(vA, wA, rA)));\n return speed;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit, usually in meters.\n */\n getLowerLimit(): number {\n return this.m_lowerTranslation;\n }\n\n /**\n * Get the upper joint limit, usually in meters.\n */\n getUpperLimit(): number {\n return this.m_upperTranslation;\n }\n\n /**\n * Set the joint limits, usually in meters.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(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.0;\n }\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in meters per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Set the maximum motor force, usually in N.\n */\n setMaxMotorForce(force: number): void {\n if (force == this.m_maxMotorForce) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorForce = force;\n }\n\n getMaxMotorForce(): number {\n return this.m_maxMotorForce;\n }\n\n /**\n * Get the motor speed, usually in meters per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Get the current motor force given the inverse time step, usually in N.\n */\n getMotorForce(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\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\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.y;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute motor Jacobian and effective mass.\n {\n this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_axis);\n this.m_a2 = Vec2.crossVec2Vec2(rB, this.m_axis);\n\n this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2\n * this.m_a2;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n }\n\n // Prismatic constraint.\n {\n this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_perp);\n this.m_s2 = Vec2.crossVec2Vec2(rB, this.m_perp);\n\n const s1test = Vec2.crossVec2Vec2(rA, this.m_perp);\n\n const k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2;\n const k12 = iA * this.m_s1 + iB * this.m_s2;\n const k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For bodies with fixed rotation.\n k22 = 1.0;\n }\n const k23 = iA * this.m_a1 + iB * this.m_a2;\n const k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2;\n\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\n // Compute motor and limit terms.\n if (this.m_enableLimit) {\n\n const jointTranslation = Vec2.dot(this.m_axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Settings.linearSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointTranslation <= this.m_lowerTranslation) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_limitState = LimitState.atLowerLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else if (jointTranslation >= this.m_upperTranslation) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_limitState = LimitState.atUpperLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n if (this.m_enableMotor == false) {\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse\n + this.m_impulse.z, this.m_axis);\n const LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1;\n const LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Solve linear motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits) {\n const Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB, vA)) + this.m_a2 * wB\n - this.m_a1 * wA;\n let impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorForce;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse,\n -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_axis);\n const LA = impulse * this.m_a1;\n const LB = impulse * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n const Cdot1 = Vec2.zero();\n Cdot1.x += Vec2.dot(this.m_perp, vB) + this.m_s2 * wB;\n Cdot1.x -= Vec2.dot(this.m_perp, vA) + this.m_s1 * wA;\n Cdot1.y = wB - wA;\n\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit) {\n // Solve prismatic and limit constraint in block form.\n let Cdot2 = 0;\n Cdot2 += Vec2.dot(this.m_axis, vB) + this.m_a2 * wB;\n Cdot2 -= Vec2.dot(this.m_axis, vA) + this.m_a1 * wA;\n\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const f1 = Vec3.clone(this.m_impulse);\n let df = this.m_K.solve33(Vec3.neg(Cdot));\n this.m_impulse.add(df);\n\n if (this.m_limitState == LimitState.atLowerLimit) {\n this.m_impulse.z = math_max(this.m_impulse.z, 0.0);\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n this.m_impulse.z = math_min(this.m_impulse.z, 0.0);\n }\n\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n const b = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y));\n const f2r = Vec2.add(this.m_K.solve22(b), Vec2.neo(f1.x, f1.y));\n this.m_impulse.x = f2r.x;\n this.m_impulse.y = f2r.y;\n\n df = Vec3.sub(this.m_impulse, f1);\n\n const P = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis);\n const LA = df.x * this.m_s1 + df.y + df.z * this.m_a1;\n const LB = df.x * this.m_s2 + df.y + df.z * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n // Limit is inactive, just solve the prismatic constraint in block form.\n const df = this.m_K.solve22(Vec2.neg(Cdot1));\n this.m_impulse.x += df.x;\n this.m_impulse.y += df.y;\n\n const P = Vec2.mulNumVec2(df.x, this.m_perp);\n const LA = df.x * this.m_s1 + df.y;\n const LB = df.x * this.m_s2 + df.y;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute fresh Jacobians\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const axis = Rot.mulVec2(qA, this.m_localXAxisA);\n const a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), axis);\n const a2 = Vec2.crossVec2Vec2(rB, axis);\n const perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), perp);\n const s2 = Vec2.crossVec2Vec2(rB, perp);\n\n let impulse = new Vec3();\n const C1 = Vec2.zero();\n C1.x = Vec2.dot(perp, d);\n C1.y = aB - aA - this.m_referenceAngle;\n\n let linearError = math_abs(C1.x);\n const angularError = math_abs(C1.y);\n\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n let active = false; // bool\n let C2 = 0.0;\n if (this.m_enableLimit) {\n\n const translation = Vec2.dot(axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * linearSlop) {\n // Prevent large angular corrections\n C2 = clamp(translation, -maxLinearCorrection, maxLinearCorrection);\n linearError = math_max(linearError, math_abs(translation));\n active = true;\n\n } else if (translation <= this.m_lowerTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_lowerTranslation + linearSlop,\n -maxLinearCorrection, 0.0);\n linearError = Math\n .max(linearError, this.m_lowerTranslation - translation);\n active = true;\n\n } else if (translation >= this.m_upperTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_upperTranslation - linearSlop, 0.0,\n maxLinearCorrection);\n linearError = Math\n .max(linearError, translation - this.m_upperTranslation);\n active = true;\n }\n }\n\n if (active) {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n const k13 = iA * s1 * a1 + iB * s2 * a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For fixed rotation\n k22 = 1.0;\n }\n const k23 = iA * a1 + iB * a2;\n const k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2;\n\n const 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\n const C = new Vec3();\n C.x = C1.x;\n C.y = C1.y;\n C.z = C2;\n\n impulse = K.solve33(Vec3.neg(C));\n } else {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n k22 = 1.0;\n }\n\n const K = new Mat22();\n K.ex.setNum(k11, k12);\n K.ey.setNum(k12, k22);\n\n const impulse1 = K.solve(Vec2.neg(C1));\n impulse.x = impulse1.x;\n impulse.y = impulse1.y;\n impulse.z = 0.0;\n }\n\n const P = Vec2.combine(impulse.x, perp, impulse.z, axis);\n const LA = impulse.x * s1 + impulse.y + impulse.z * a1;\n const LB = impulse.x * s2 + impulse.y + impulse.z * a2;\n\n cA.subMul(mA, P);\n aA -= iA * LA;\n cB.addMul(mB, P);\n aB += iB * LB;\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError <= Settings.linearSlop\n && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { } from \"../../common/Math\";\nimport { Vec2 } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { RevoluteJoint } from \"./RevoluteJoint\";\nimport { PrismaticJoint } from \"./PrismaticJoint\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointOpt extends JointOpt {\n /**\n * The gear ratio. See {@link GearJoint} for explanation.\n */\n ratio?: number;\n}\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointDef extends JointDef, GearJointOpt {\n /**\n * The first revolute/prismatic joint attached to the gear joint.\n */\n joint1: RevoluteJoint | PrismaticJoint;\n /**\n * The second prismatic/revolute joint attached to the gear joint.\n */\n joint2: RevoluteJoint | PrismaticJoint;\n}\n\n/** @internal */ const DEFAULTS = {\n ratio : 1.0\n};\n\n/**\n * A gear joint is used to connect two joints together. Either joint can be a\n * revolute or prismatic joint. You specify a gear ratio to bind the motions\n * together: coordinate1 + ratio * coordinate2 = constant\n *\n * The ratio can be negative or positive. If one joint is a revolute joint and\n * the other joint is a prismatic joint, then the ratio will have units of\n * length or units of 1/length. Warning: You have to manually destroy the gear\n * joint if joint1 or joint2 is destroyed.\n *\n * This definition requires two existing revolute or prismatic joints (any\n * combination will work).\n */\nexport class GearJoint extends Joint {\n static TYPE = \"gear-joint\" as const;\n\n /** @internal */ m_type: \"gear-joint\";\n /** @internal */ m_joint1: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_joint2: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_type1: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_type2: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_bodyC: Body;\n /** @internal */ m_localAnchorC: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_referenceAngleA: number;\n /** @internal */ m_localAxisC: Vec2;\n /** @internal */ m_bodyD: Body;\n /** @internal */ m_localAnchorD: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngleB: number;\n /** @internal */ m_localAxisD: Vec2;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_lcA: Vec2;\n /** @internal */ m_lcB: Vec2;\n /** @internal */ m_lcC: Vec2;\n /** @internal */ m_lcD: Vec2;\n /** @internal */ m_mA: number;\n /** @internal */ m_mB: number;\n /** @internal */ m_mC: number;\n /** @internal */ m_mD: number;\n /** @internal */ m_iA: number;\n /** @internal */ m_iB: number;\n /** @internal */ m_iC: number;\n /** @internal */ m_iD: number;\n /** @internal */ m_JvAC: Vec2;\n /** @internal */ m_JvBD: Vec2;\n /** @internal */ m_JwA: number;\n /** @internal */ m_JwB: number;\n /** @internal */ m_JwC: number;\n /** @internal */ m_JwD: number;\n /** @internal */ m_mass: number;\n\n constructor(def: GearJointDef);\n constructor(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number);\n constructor(def: GearJointDef, bodyA?: Body, bodyB?: Body, joint1?: RevoluteJoint | PrismaticJoint, joint2?: RevoluteJoint | PrismaticJoint, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof GearJoint)) {\n return new GearJoint(def, bodyA, bodyB, joint1, joint2, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = GearJoint.TYPE;\n\n _ASSERT && console.assert(joint1.m_type === RevoluteJoint.TYPE || joint1.m_type === PrismaticJoint.TYPE);\n _ASSERT && console.assert(joint2.m_type === RevoluteJoint.TYPE || joint2.m_type === PrismaticJoint.TYPE);\n\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\n this.m_type1 = this.m_joint1.getType() as \"revolute-joint\" | \"prismatic-joint\";\n this.m_type2 = this.m_joint2.getType() as \"revolute-joint\" | \"prismatic-joint\";\n\n // joint1 connects body A to body C\n // joint2 connects body B to body D\n\n let coordinateA: number;\n let coordinateB: number;\n\n // TODO_ERIN there might be some problem with the joint edges in Joint.\n\n this.m_bodyC = this.m_joint1.getBodyA();\n this.m_bodyA = this.m_joint1.getBodyB();\n\n // Get geometry of joint1\n const xfA = this.m_bodyA.m_xf;\n const aA = this.m_bodyA.m_sweep.a;\n const xfC = this.m_bodyC.m_xf;\n const aC = this.m_bodyC.m_sweep.a;\n\n if (this.m_type1 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint1 as RevoluteJoint;\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\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const prismatic = this.m_joint1 as PrismaticJoint;\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\n const pC = this.m_localAnchorC;\n const pA = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA.q, this.m_localAnchorA), Vec2.sub(xfA.p, xfC.p)));\n coordinateA = Vec2.dot(pA, this.m_localAxisC) - Vec2.dot(pC, this.m_localAxisC);\n }\n\n this.m_bodyD = this.m_joint2.getBodyA();\n this.m_bodyB = this.m_joint2.getBodyB();\n\n // Get geometry of joint2\n const xfB = this.m_bodyB.m_xf;\n const aB = this.m_bodyB.m_sweep.a;\n const xfD = this.m_bodyD.m_xf;\n const aD = this.m_bodyD.m_sweep.a;\n\n if (this.m_type2 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint2 as RevoluteJoint;\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const prismatic = this.m_joint2 as PrismaticJoint;\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\n const pD = this.m_localAnchorD;\n const pB = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB.q, this.m_localAnchorB), Vec2.sub(xfB.p, xfD.p)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n this.m_constant = coordinateA + this.m_ratio * coordinateB;\n\n this.m_impulse = 0.0;\n\n // Gear Joint:\n // C0 = (coordinate1 + ratio * coordinate2)_initial\n // C = (coordinate1 + ratio * coordinate2) - C0 = 0\n // J = [J1 ratio * J2]\n // K = J * invM * JT\n // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T\n //\n // Revolute:\n // coordinate = rotation\n // Cdot = angularVelocity\n // J = [0 0 1]\n // K = J * invM * JT = invI\n //\n // Prismatic:\n // coordinate = dot(p - pg, ug)\n // Cdot = dot(v + cross(w, r), ug)\n // J = [ug cross(r, ug)]\n // K = J * invM * JT = invMass + invI * cross(r, ug)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n joint1: this.m_joint1,\n joint2: this.m_joint2,\n ratio: this.m_ratio,\n\n // _constant: this.m_constant,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): GearJoint {\n data = {...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 const joint = new GearJoint(data);\n // if (data._constant) joint.m_constant = data._constant;\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n // todo: implement other fields\n if (Number.isFinite(def.ratio)) {\n this.m_ratio = def.ratio;\n }\n }\n\n /**\n * Get the first joint.\n */\n getJoint1(): Joint {\n return this.m_joint1;\n }\n\n /**\n * Get the second joint.\n */\n getJoint2(): Joint {\n return this.m_joint2;\n }\n\n /**\n * Set the gear ratio.\n */\n setRatio(ratio: number): void {\n _ASSERT && console.assert(Number.isFinite(ratio));\n this.m_ratio = ratio;\n }\n\n /**\n * Get the gear ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n const L = this.m_impulse * this.m_JwA;\n return inv_dt * L;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const aC = this.m_bodyC.c_position.a;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n\n const aD = this.m_bodyD.c_position.a;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n this.m_mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n this.m_JvAC = Vec2.zero();\n this.m_JwA = 1.0;\n this.m_JwC = 1.0;\n this.m_mass += this.m_iA + this.m_iC;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = 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(rA, 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\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 const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n // Compute effective mass.\n this.m_mass = this.m_mass > 0.0 ? 1.0 / this.m_mass : 0.0;\n\n if (step.warmStarting) {\n vA.addMul(this.m_mA * this.m_impulse, this.m_JvAC);\n wA += this.m_iA * this.m_impulse * this.m_JwA;\n\n vB.addMul(this.m_mB * this.m_impulse, this.m_JvBD);\n wB += this.m_iB * this.m_impulse * this.m_JwB;\n\n vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC);\n wC -= this.m_iC * this.m_impulse * this.m_JwC;\n\n vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD);\n wD -= this.m_iD * this.m_impulse * this.m_JwD;\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n let Cdot = Vec2.dot(this.m_JvAC, vA) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB) - 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\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n vA.addMul(this.m_mA * impulse, this.m_JvAC);\n wA += this.m_iA * impulse * this.m_JwA;\n vB.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\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n const cC = this.m_bodyC.c_position.c;\n let aC = this.m_bodyC.c_position.a;\n const cD = this.m_bodyD.c_position.c;\n let aD = this.m_bodyD.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n const linearError = 0.0;\n\n let coordinateA: number;\n let coordinateB: number;\n\n let JvAC: Vec2;\n let JvBD: Vec2;\n let JwA: number;\n let JwB: number;\n let JwC: number;\n let JwD: number;\n let mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n JvAC = Vec2.zero();\n JwA = 1.0;\n JwC = 1.0;\n mass += this.m_iA + this.m_iC;\n\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA);\n JvAC = u;\n JwC = Vec2.crossVec2Vec2(rC, u);\n JwA = Vec2.crossVec2Vec2(rA, u);\n mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA;\n\n const pC = Vec2.sub(this.m_localAnchorC, this.m_lcC);\n const pA = Rot.mulTVec2(qC, Vec2.add(rA, Vec2.sub(cA, cC)));\n coordinateA = Vec2.dot(Vec2.sub(pA, pC), this.m_localAxisC);\n }\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n const pD = Vec2.sub(this.m_localAnchorD, this.m_lcD);\n const pB = Rot.mulTVec2(qD, Vec2.add(rB, Vec2.sub(cB, cD)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n const C = (coordinateA + this.m_ratio * coordinateB) - this.m_constant;\n\n let impulse = 0.0;\n if (mass > 0.0) {\n impulse = -C / mass;\n }\n\n cA.addMul(this.m_mA * impulse, JvAC);\n aA += this.m_iA * impulse * JwA;\n cB.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\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\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\n // TODO_ERIN not implemented\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointOpt extends JointOpt {\n /**\n * The bodyB angle minus bodyA angle in radians.\n */\n angularOffset?: number;\n /**\n * The maximum motor force in N.\n */\n maxForce?: number;\n /**\n * The maximum motor torque in N-m.\n */\n maxTorque?: number;\n /**\n * Position correction factor in the range [0,1].\n */\n correctionFactor?: number;\n /**\n * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters.\n */\n linearOffset?: Vec2Value;\n}\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointDef extends JointDef, MotorJointOpt {\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 1.0,\n maxTorque : 1.0,\n correctionFactor : 0.3\n};\n\n/**\n * A motor joint is used to control the relative motion between two bodies. A\n * typical usage is to control the movement of a dynamic body with respect to\n * the ground.\n */\nexport class MotorJoint extends Joint {\n static TYPE = \"motor-joint\" as const;\n\n /** @internal */ m_type: \"motor-joint\";\n /** @internal */ m_linearOffset: Vec2;\n /** @internal */ m_angularOffset: number;\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n /** @internal */ m_correctionFactor: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_linearError: Vec2;\n /** @internal */ m_angularError: number;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: MotorJointDef);\n constructor(def: MotorJointOpt, bodyA: Body, bodyB: Body);\n constructor(def: MotorJointDef | MotorJointOpt, bodyA?: Body, bodyB?: Body) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MotorJoint)) {\n return new MotorJoint(def, bodyA, bodyB);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MotorJoint.TYPE;\n\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\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n this.m_correctionFactor = def.correctionFactor;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n //\n // r1 = offset - c1\n // r2 = -c2\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n correctionFactor: this.m_correctionFactor,\n\n linearOffset: this.m_linearOffset,\n angularOffset: this.m_angularOffset,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MotorJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new MotorJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Set the position correction factor in the range [0,1].\n */\n setCorrectionFactor(factor: number): void {\n _ASSERT && console.assert(Number.isFinite(factor) && 0.0 <= factor && factor <= 1.0);\n this.m_correctionFactor = factor;\n }\n\n /**\n * Get the position correction factor in the range [0,1].\n */\n getCorrectionFactor(): number {\n return this.m_correctionFactor;\n }\n\n /**\n * Set/get the target linear offset, in frame A, in meters.\n */\n setLinearOffset(linearOffset: Vec2Value): void {\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\n getLinearOffset(): Vec2 {\n return this.m_linearOffset;\n }\n\n /**\n * Set/get the target angular offset, in radians.\n */\n setAngularOffset(angularOffset: number): void {\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\n getAngularOffset(): number {\n return this.m_angularOffset;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getPosition();\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getPosition();\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Upper 2 by 2 of K for point to point\n const 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\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n this.m_linearError = Vec2.zero();\n this.m_linearError.addCombine(1, cB, 1, this.m_rB);\n this.m_linearError.subCombine(1, cA, 1, this.m_rA);\n\n this.m_angularError = aB - aA - this.m_angularOffset;\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n const inv_h = step.inv_dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError);\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = Vec2.clone(this.m_linearImpulse);\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n this.m_linearImpulse.clamp(maxImpulse);\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Transform } from \"../../common/Transform\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointOpt extends JointOpt {\n /**\n * [maxForce = 0.0] The maximum constraint force that can be exerted to move\n * the candidate body. Usually you will express as some multiple of the\n * weight (multiplier * mass * gravity).\n */\n maxForce?: number;\n /**\n * [frequencyHz = 5.0] The response speed.\n */\n frequencyHz?: number;\n /**\n * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical\n * damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointDef extends JointDef, MouseJointOpt {\n /**\n * The initial world target point. This is assumed to coincide with the body\n * anchor initially.\n */\n target: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n frequencyHz : 5.0,\n dampingRatio : 0.7\n};\n\n/**\n * A mouse joint is used to make a point on a body track a specified world\n * point. This a soft constraint with a maximum force. This allows the\n * constraint to stretch and without applying huge forces.\n *\n * You need to call setTarget(target) every time that mouse is \n * moved, to track the new location of the mouse.\n *\n * NOTE: this joint is not documented in the manual because it was developed to\n * be used in the testbed. If you want to learn how to use the mouse joint, look\n * at the testbed.\n */\nexport class MouseJoint extends Joint {\n static TYPE = \"mouse-joint\" as const;\n\n /** @internal */ m_type: \"mouse-joint\";\n /** @internal */ m_targetA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_impulse: Vec2;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_beta: number;\n /** @internal */ m_gamma: number;\n // Solver temp\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat22;\n /** @internal */ m_C: Vec2;\n\n constructor(def: MouseJointDef);\n constructor(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value);\n constructor(def: MouseJointDef, bodyA?: Body, bodyB?: Body, target?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MouseJoint)) {\n return new MouseJoint(def, bodyA, bodyB, target);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MouseJoint.TYPE;\n\n _ASSERT && console.assert(Number.isFinite(def.maxForce) && def.maxForce >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.frequencyHz) && def.frequencyHz >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.dampingRatio) && def.dampingRatio >= 0.0);\n\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\n this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), this.m_targetA);\n\n this.m_maxForce = def.maxForce;\n this.m_impulse = Vec2.zero();\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_beta = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rB = Vec2.zero();\n this.m_localCenterB = Vec2.zero();\n this.m_invMassB = 0.0;\n this.m_invIB = 0.0;\n this.m_mass = new Mat22();\n this.m_C = Vec2.zero();\n\n // p = attached point, m = mouse point\n // C = p - m\n // Cdot = v\n // = v + cross(w, r)\n // J = [I r_skew]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n target: this.m_targetA,\n maxForce: this.m_maxForce,\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n _localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MouseJoint {\n data = {...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 const joint = new MouseJoint(data);\n if (data._localAnchorB) {\n joint.m_localAnchorB = data._localAnchorB;\n }\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Use this to update the target point.\n */\n setTarget(target: Vec2Value): void {\n if (Vec2.areEqual(target, this.m_targetA)) return;\n this.m_bodyB.setAwake(true);\n this.m_targetA.set(target);\n }\n\n getTarget(): Vec2 {\n return this.m_targetA;\n }\n\n /**\n * Set the maximum force in Newtons.\n */\n setMaxForce(force: number): void {\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum force in Newtons.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the frequency in Hertz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get the frequency in Hertz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set the damping ratio (dimensionless).\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get the damping ratio (dimensionless).\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return Vec2.clone(this.m_targetA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_impulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * 0.0;\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_targetA.sub(newOrigin);\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const position = this.m_bodyB.c_position;\n const velocity = this.m_bodyB.c_velocity;\n\n const cB = position.c;\n const aB = position.a;\n const vB = velocity.v;\n let wB = velocity.w;\n\n const qB = Rot.neo(aB);\n\n const mass = this.m_bodyB.getMass();\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = mass * (omega * omega);\n\n // magic formulas\n // gamma has units of inverse mass.\n // beta has units of inverse time.\n const h = step.dt;\n _ASSERT && console.assert(d + h * k > EPSILON);\n this.m_gamma = h * (d + h * k);\n if (this.m_gamma != 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n this.m_beta = h * k * this.m_gamma;\n\n // Compute the effective mass matrix.\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) *\n // invI2 * skew(r2)]\n // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y\n // -r1.x*r1.y]\n // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x]\n const K = new Mat22();\n K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y\n + 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\n + this.m_gamma;\n\n this.m_mass = K.getInverse();\n\n this.m_C.setVec2(cB);\n this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA);\n this.m_C.mul(this.m_beta);\n\n // Cheat with some damping\n wB *= 0.98;\n\n if (step.warmStarting) {\n this.m_impulse.mul(step.dtRatio);\n vB.addMul(this.m_invMassB, this.m_impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse);\n\n } else {\n this.m_impulse.setZero();\n }\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const velocity = this.m_bodyB.c_velocity;\n const vB = Vec2.clone(velocity.v);\n let wB = velocity.w;\n\n // Cdot = v + cross(w, r)\n\n const Cdot = Vec2.crossNumVec2(wB, this.m_rB);\n Cdot.add(vB);\n\n Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse);\n Cdot.neg();\n\n let impulse = Mat22.mulVec2(this.m_mass, Cdot);\n\n const oldImpulse = Vec2.clone(this.m_impulse);\n this.m_impulse.add(impulse);\n const maxImpulse = step.dt * this.m_maxForce;\n this.m_impulse.clamp(maxImpulse);\n impulse = Vec2.sub(this.m_impulse, oldImpulse);\n\n vB.addMul(this.m_invMassB, impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\n// tslint:disable-next-line:no-empty-interface\nexport interface PulleyJointOpt extends JointOpt {\n}\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\nexport interface PulleyJointDef extends JointDef, PulleyJointOpt {\n /**\n * The first ground anchor in world coordinates. This point never moves.\n */\n groundAnchorA: Vec2Value;\n /**\n * The second ground anchor in world coordinates. This point never moves.\n */\n groundAnchorB: Vec2Value;\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The reference length for the segment attached to bodyA.\n */\n lengthA: number;\n /**\n * The reference length for the segment attached to bodyB.\n */\n lengthB: number;\n /**\n * The pulley ratio, used to simulate a block-and-tackle.\n */\n ratio: number;\n\n /** @hidden */ anchorA?: Vec2Value;\n /** @hidden */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n collideConnected : true\n};\n\n/**\n * The pulley joint is connected to two bodies and two fixed ground points. The\n * pulley supports a ratio such that: length1 + ratio * length2 <= constant\n *\n * Yes, the force transmitted is scaled by the ratio.\n *\n * Warning: the pulley joint can get a bit squirrelly by itself. They often work\n * better when combined with prismatic joints. You should also cover the the\n * anchor points with static shapes to prevent one side from going to zero\n * length.\n */\nexport class PulleyJoint extends Joint {\n static TYPE = \"pulley-joint\" as const;\n // static MIN_PULLEY_LENGTH: number = 2.0; // TODO where this is used?\n\n /** @internal */ m_type: \"pulley-joint\";\n /** @internal */ m_groundAnchorA: Vec2;\n /** @internal */ m_groundAnchorB: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_lengthA: number;\n /** @internal */ m_lengthB: number;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_uA: Vec2;\n /** @internal */ m_uB: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n constructor(def: PulleyJointDef);\n constructor(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number);\n constructor(def: PulleyJointDef, bodyA?: Body, bodyB?: Body, groundA?: Vec2Value, groundB?: Vec2Value, anchorA?: Vec2Value, anchorB?: Vec2Value, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PulleyJoint)) {\n return new PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PulleyJoint.TYPE;\n this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1.0, 1.0));\n this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1.0, 1.0));\n this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1.0, 0.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\n _ASSERT && console.assert(ratio > EPSILON);\n\n this.m_constant = this.m_lengthA + this.m_ratio * this.m_lengthB;\n\n this.m_impulse = 0.0;\n\n // Pulley:\n // length1 = norm(p1 - s1)\n // length2 = norm(p2 - s2)\n // C0 = (length1 + ratio * length2)_initial\n // C = C0 - (length1 + ratio * length2)\n // u1 = (p1 - s1) / norm(p1 - s1)\n // u2 = (p2 - s2) / norm(p2 - s2)\n // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2))\n // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 *\n // cross(r2, u2)^2)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PulleyJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new PulleyJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Get the first ground anchor.\n */\n getGroundAnchorA(): Vec2 {\n return this.m_groundAnchorA;\n }\n\n /**\n * Get the second ground anchor.\n */\n getGroundAnchorB(): Vec2 {\n return this.m_groundAnchorB;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getLengthA(): number {\n return this.m_lengthA;\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getLengthB(): number {\n return this.m_lengthB;\n }\n\n /**\n * Get the pulley ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getCurrentLengthA(): number {\n const p = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const s = this.m_groundAnchorA;\n return Vec2.distance(p, s);\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getCurrentLengthB(): number {\n const p = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const s = this.m_groundAnchorB;\n return Vec2.distance(p, s);\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n *\n * @param newOrigin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_groundAnchorA.sub(newOrigin);\n this.m_groundAnchorB.sub(newOrigin);\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // Get the pulley axes.\n this.m_uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n this.m_uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = this.m_uA.length();\n const lengthB = this.m_uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n this.m_uA.mul(1.0 / lengthA);\n } else {\n this.m_uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n this.m_uB.mul(1.0 / lengthB);\n } else {\n this.m_uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA);\n const ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n this.m_mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support variable time steps.\n this.m_impulse *= step.dtRatio;\n\n // Warm starting.\n const PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB);\n\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n\n const Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB);\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const PA = Vec2.mulNumVec2(-impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB);\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // Get the pulley axes.\n const uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n const uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = uA.length();\n const lengthB = uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n uA.mul(1.0 / lengthA);\n } else {\n uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n uB.mul(1.0 / lengthB);\n } else {\n uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(rA, uA);\n const ruB = Vec2.crossVec2Vec2(rB, uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n let mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (mass > 0.0) {\n mass = 1.0 / mass;\n }\n\n const C = this.m_constant - lengthA - this.m_ratio * lengthB;\n const linearError = math_abs(C);\n\n const impulse = -mass * C;\n\n const PA = Vec2.mulNumVec2(-impulse, uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB);\n\n cA.addMul(this.m_invMassA, PA);\n aA += this.m_invIA * Vec2.crossVec2Vec2(rA, PA);\n cB.addMul(this.m_invMassB, PB);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, PB);\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointOpt extends JointOpt {\n /**\n * The maximum length of the rope.\n * Warning: this must be larger than linearSlop or the joint will have no effect.\n */\n maxLength?: number;\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointDef extends JointDef, RopeJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxLength : 0.0,\n};\n\n/**\n * A rope joint enforces a maximum distance between two points on two bodies. It\n * has no other effect.\n *\n * Warning: if you attempt to change the maximum length during the simulation\n * you will get some non-physical behavior.\n *\n * A model that would allow you to dynamically modify the length would have some\n * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you\n * want to dynamically control length.\n */\nexport class RopeJoint extends Joint {\n static TYPE = \"rope-joint\" as const;\n\n /** @internal */ m_type: \"rope-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n /** @internal */ m_maxLength: number;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_length: number;\n /** @internal */ m_state: number; // TODO enum\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n constructor(def: RopeJointDef);\n constructor(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RopeJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RopeJoint)) {\n return new RopeJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = RopeJoint.TYPE;\n this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1.0, 0.0));\n\n this.m_maxLength = def.maxLength;\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_length = 0.0;\n this.m_state = LimitState.inactiveLimit;\n\n // Limit:\n // C = norm(pB - pA) - L\n // u = (pB - pA) / norm(pB - pA)\n // Cdot = dot(u, vB + cross(wB, rB) - vA - cross(wA, rA))\n // J = [-u -cross(rA, u) u cross(rB, u)]\n // K = J * invM * JT\n // = invMassA + invIA * cross(rA, u)^2 + invMassB + invIB * cross(rB, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n maxLength: this.m_maxLength,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): RopeJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RopeJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n if (Number.isFinite(def.maxLength)) {\n this.m_maxLength = def.maxLength;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum length of the rope.\n */\n setMaxLength(length: number): void {\n this.m_maxLength = length;\n }\n\n /**\n * Get the maximum length of the rope.\n */\n getMaxLength(): number {\n return this.m_maxLength;\n }\n\n getLimitState(): number {\n // TODO LimitState\n return this.m_state;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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, cB, 1, this.m_rB);\n this.m_u.subCombine(1, cA, 1, this.m_rA);\n\n this.m_length = this.m_u.length();\n\n const C = this.m_length - this.m_maxLength;\n if (C > 0.0) {\n this.m_state = LimitState.atUpperLimit;\n } else {\n this.m_state = LimitState.inactiveLimit;\n }\n\n if (this.m_length > Settings.linearSlop) {\n this.m_u.mul(1.0 / this.m_length);\n } else {\n this.m_u.setZero();\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n return;\n }\n\n // Compute effective mass.\n const crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n const invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB;\n\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.addCrossNumVec2(vA, wA, this.m_rA);\n const vpB = Vec2.addCrossNumVec2(vB, wB, this.m_rB);\n const C = this.m_length - this.m_maxLength;\n let Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA));\n\n // Predictive constraint.\n if (C < 0.0) {\n Cdot += step.inv_dt * C;\n }\n\n let impulse = -this.m_mass * Cdot;\n const oldImpulse = this.m_impulse;\n this.m_impulse = math_min(0.0, this.m_impulse + impulse);\n impulse = this.m_impulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.zero();\n u.addCombine(1, cB, 1, rB);\n u.subCombine(1, cA, 1, rA);\n\n const length = u.normalize();\n let C = length - this.m_maxLength;\n\n C = clamp(C, 0.0, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return length - this.m_maxLength < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness\n * with a value of 0.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle?: number;\n}\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointDef extends JointDef, WeldJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0,\n};\n\n/**\n * A weld joint essentially glues two bodies together. A weld joint may distort\n * somewhat because the island constraint solver is approximate.\n */\nexport class WeldJoint extends Joint {\n static TYPE = \"weld-joint\" as const;\n\n /** @internal */ m_type: \"weld-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_impulse: Vec3;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat33;\n\n constructor(def: WeldJointDef);\n constructor(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: WeldJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WeldJoint)) {\n return new WeldJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = WeldJoint.TYPE;\n\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\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_impulse = new Vec3();\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rA;\n this.m_rB;\n this.m_localCenterA;\n this.m_localCenterB;\n this.m_invMassA;\n this.m_invMassB;\n this.m_invIA;\n this.m_invIB;\n this.m_mass = new Mat33();\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // / = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // C = angle2 - angle1 - referenceAngle\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WeldJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WeldJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Set frequency in Hz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get frequency in Hz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set damping ratio.\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get damping ratio.\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const 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\n * 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\n * 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\n if (this.m_frequencyHz > 0.0) {\n K.getInverse22(this.m_mass);\n\n let invM = iA + iB;\n const m = invM > 0.0 ? 1.0 / invM : 0.0;\n\n const C = aB - aA - this.m_referenceAngle;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * m * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = m * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invM += this.m_gamma;\n this.m_mass.ez.z = invM != 0.0 ? 1.0 / invM : 0.0;\n } else if (K.ez.z == 0.0) {\n K.getInverse22(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n } else {\n K.getSymInverse33(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n if (this.m_frequencyHz > 0.0) {\n const Cdot2 = wB - wA;\n\n const impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z);\n this.m_impulse.z += impulse2;\n\n wA -= iA * impulse2;\n wB += iB * impulse2;\n\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n\n const impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1));\n this.m_impulse.x += impulse1.x;\n this.m_impulse.y += impulse1.y;\n\n const P = Vec2.clone(impulse1);\n\n vA.subMul(mA, P);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(mB, P);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, P);\n } else {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot));\n this.m_impulse.add(impulse);\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n let positionError: number;\n let angularError: number;\n\n const K = new Mat33();\n K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB;\n K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB;\n K.ez.x = -rA.y * iA - rB.y * iB;\n K.ex.y = K.ey.x;\n K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB;\n K.ez.y = rA.x * iA + rB.x * iB;\n K.ex.z = K.ez.x;\n K.ey.z = K.ez.y;\n K.ez.z = iA + iB;\n\n if (this.m_frequencyHz > 0.0) {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n positionError = C1.length();\n angularError = 0.0;\n\n const P = Vec2.neg(K.solve22(C1));\n\n cA.subMul(mA, P);\n aA -= iA * Vec2.crossVec2Vec2(rA, P);\n\n cB.addMul(mB, P);\n aB += iB * Vec2.crossVec2Vec2(rB, P);\n } else {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n const C2 = aB - aA - this.m_referenceAngle;\n\n positionError = C1.length();\n angularError = math_abs(C2);\n\n const C = new Vec3(C1.x, C1.y, C2);\n\n let impulse = new Vec3();\n if (K.ez.z > 0.0) {\n impulse = Vec3.neg(K.solve33(C));\n } else {\n const impulse2 = Vec2.neg(K.solve22(C1));\n impulse.set(impulse2.x, impulse2.y, 0.0);\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n cA.subMul(mA, P);\n aA -= iA * (Vec2.crossVec2Vec2(rA, P) + impulse.z);\n\n cB.addMul(mB, P);\n aB += iB * (Vec2.crossVec2Vec2(rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointOpt extends JointOpt {\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n /**\n * Suspension frequency, zero indicates no suspension.\n */\n frequencyHz?: number;\n /**\n * Suspension damping ratio, one indicates critical damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointDef extends JointDef, WheelJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation axis in bodyA.\n */\n localAxisA: Vec2Value;\n\n /** @internal renamed to localAxisA */\n localAxis?: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableMotor : false,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n frequencyHz : 2.0,\n dampingRatio : 0.7,\n};\n\n/**\n * A wheel joint. This joint provides two degrees of freedom: translation along\n * an axis fixed in bodyA and rotation in the plane. In other words, it is a\n * point to line constraint with a rotational motor and a linear spring/damper.\n * This joint is designed for vehicle suspensions.\n */\nexport class WheelJoint extends Joint {\n static TYPE = \"wheel-joint\" as const;\n\n /** @internal */ m_type: \"wheel-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_springMass: number;\n /** @internal */ m_springImpulse: number;\n\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableMotor: boolean;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n /** @internal */ m_ax: Vec2;\n /** @internal */ m_ay: Vec2;\n /** @internal */ m_sAx: number;\n /** @internal */ m_sBx: number;\n /** @internal */ m_sAy: number;\n /** @internal */ m_sBy: number;\n\n constructor(def: WheelJointDef);\n constructor(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: WheelJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WheelJoint)) {\n return new WheelJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_ax = Vec2.zero();\n this.m_ay = Vec2.zero();\n\n this.m_type = WheelJoint.TYPE;\n\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\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 // localAxis is renamed to localAxisA, this is for backward compatibility\n this.m_localXAxisA = Vec2.clone(def.localAxis);\n } else {\n this.m_localXAxisA = Vec2.neo(1.0, 0.0);\n }\n\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n this.m_springMass = 0.0;\n this.m_springImpulse = 0.0;\n\n this.m_maxMotorTorque = def.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed;\n this.m_enableMotor = def.enableMotor;\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Linear constraint (point-to-line)\n // d = pB - pA = xB + rB - xA - rA\n // C = dot(ay, d)\n // Cdot = dot(d, cross(wA, ay)) + dot(ay, vB + cross(wB, rB) - vA - cross(wA,\n // rA))\n // = -dot(ay, vA) - dot(cross(d + rA, ay), wA) + dot(ay, vB) + dot(cross(rB,\n // ay), vB)\n // J = [-ay, -cross(d + rA, ay), ay, cross(rB, ay)]\n\n // Spring linear constraint\n // C = dot(ax, d)\n // Cdot = = -dot(ax, vA) - dot(cross(d + rA, ax), wA) + dot(ax, vB) +\n // dot(cross(rB, ax), vB)\n // J = [-ax -cross(d+rA, ax) ax cross(rB, ax)]\n\n // Motor rotational constraint\n // Cdot = wB - wA\n // J = [0 0 -1 0 0 1]\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WheelJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WheelJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, def.localAxisA));\n }\n if (def.enableMotor !== undefined) {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const pA = bA.getWorldPoint(this.m_localAnchorA);\n const pB = bB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = bA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const wA = this.m_bodyA.m_angularVelocity;\n const wB = this.m_bodyB.m_angularVelocity;\n return wB - wA;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed, usually in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set/Get the maximum motor force, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Get the current motor torque given the inverse time step, usually in N-m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set/Get the spring frequency in hertz. Setting the frequency to zero disables\n * the spring.\n */\n setSpringFrequencyHz(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getSpringFrequencyHz(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set/Get the spring damping ratio\n */\n setSpringDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getSpringDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n // Point to line constraint\n {\n this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA);\n this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ay);\n this.m_sBy = Vec2.crossVec2Vec2(rB, this.m_ay);\n\n this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy\n * this.m_sBy;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n }\n\n // Spring constraint\n this.m_springMass = 0.0;\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n if (this.m_frequencyHz > 0.0) {\n this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ax);\n this.m_sBx = Vec2.crossVec2Vec2(rB, this.m_ax);\n\n const invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx\n * this.m_sBx;\n\n if (invMass > 0.0) {\n this.m_springMass = 1.0 / invMass;\n\n const C = Vec2.dot(d, this.m_ax);\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const damp = 2.0 * this.m_springMass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_springMass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (damp + h * k);\n if (this.m_gamma > 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n\n this.m_bias = C * h * k * this.m_gamma;\n\n this.m_springMass = invMass + this.m_gamma;\n if (this.m_springMass > 0.0) {\n this.m_springMass = 1.0 / this.m_springMass;\n }\n }\n } else {\n this.m_springImpulse = 0.0;\n }\n\n // Rotational motor\n if (this.m_enableMotor) {\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n } else {\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse *= step.dtRatio;\n this.m_springImpulse *= step.dtRatio;\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax);\n const LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse;\n const LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse;\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * LA;\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * LB;\n\n } else {\n this.m_impulse = 0.0;\n this.m_springImpulse = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Solve spring constraint\n {\n const Cdot = Vec2.dot(this.m_ax, vB) - Vec2.dot(this.m_ax, vA) + this.m_sBx * wB - this.m_sAx * wA;\n const impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse);\n this.m_springImpulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ax);\n const LA = impulse * this.m_sAx;\n const LB = impulse * this.m_sBx;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n // Solve rotational motor constraint\n {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve point to line constraint\n {\n const Cdot = Vec2.dot(this.m_ay, vB) - Vec2.dot(this.m_ay, vA) + this.m_sBy * wB - this.m_sAy * wA;\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ay);\n const LA = impulse * this.m_sAy;\n const LB = impulse * this.m_sBy;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const ay = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), ay);\n const sBy = Vec2.crossVec2Vec2(rB, ay);\n\n const C = Vec2.dot(d, ay);\n\n const 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\n const impulse = k != 0.0 ? -C / k : 0.0;\n\n const P = Vec2.mulNumVec2(impulse, ay);\n const LA = impulse * sAy;\n const LB = impulse * sBy;\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * LA;\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * LB;\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) <= Settings.linearSlop;\n }\n\n}\n","import { World } from \"../dynamics/World\";\nimport { Body } from \"../dynamics/Body\";\nimport { Joint } from \"../dynamics/Joint\";\nimport { Fixture } from \"../dynamics/Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { Vec2 } from \"../common/Vec2\";\nimport { Vec3 } from \"../common/Vec3\";\nimport { ChainShape } from \"../collision/shape/ChainShape\";\n// import { BoxShape } from \"../collision/shape/BoxShape\";\nimport { EdgeShape } from \"../collision/shape/EdgeShape\";\nimport { PolygonShape } from \"../collision/shape/PolygonShape\";\nimport { CircleShape } from \"../collision/shape/CircleShape\";\nimport { DistanceJoint } from \"../dynamics/joint/DistanceJoint\";\nimport { FrictionJoint } from \"../dynamics/joint/FrictionJoint\";\nimport { GearJoint } from \"../dynamics/joint/GearJoint\";\nimport { MotorJoint } from \"../dynamics/joint/MotorJoint\";\nimport { MouseJoint } from \"../dynamics/joint/MouseJoint\";\nimport { PrismaticJoint } from \"../dynamics/joint/PrismaticJoint\";\nimport { PulleyJoint } from \"../dynamics/joint/PulleyJoint\";\nimport { RevoluteJoint } from \"../dynamics/joint/RevoluteJoint\";\nimport { RopeJoint } from \"../dynamics/joint/RopeJoint\";\nimport { WeldJoint } from \"../dynamics/joint/WeldJoint\";\nimport { WheelJoint } from \"../dynamics/joint/WheelJoint\";\n\nlet SID = 0;\n\n// Classes to be serialized as reference objects\nconst SERIALIZE_REF_TYPES = {\n \"World\": World,\n \"Body\": Body,\n \"Joint\": Joint,\n \"Fixture\": Fixture,\n \"Shape\": Shape,\n};\n\n// For deserializing reference objects by reference type\nconst 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};\n\n// For deserializing data objects by type field\nconst DESERIALIZE_BY_TYPE_FIELD = {\n [Body.STATIC]: Body,\n [Body.DYNAMIC]: Body,\n [Body.KINEMATIC]: Body,\n [ChainShape.TYPE]: ChainShape,\n // [BoxShape.TYPE]: BoxShape,\n [PolygonShape.TYPE]: PolygonShape,\n [EdgeShape.TYPE]: EdgeShape,\n [CircleShape.TYPE]: CircleShape,\n [DistanceJoint.TYPE]: DistanceJoint,\n [FrictionJoint.TYPE]: FrictionJoint,\n [GearJoint.TYPE]: GearJoint,\n [MotorJoint.TYPE]: MotorJoint,\n [MouseJoint.TYPE]: MouseJoint,\n [PrismaticJoint.TYPE]: PrismaticJoint,\n [PulleyJoint.TYPE]: PulleyJoint,\n [RevoluteJoint.TYPE]: RevoluteJoint,\n [RopeJoint.TYPE]: RopeJoint,\n [WeldJoint.TYPE]: WeldJoint,\n [WheelJoint.TYPE]: WheelJoint,\n};\n\n// dummy types\ntype DataType = any;\ntype ObjectType = any;\ntype ClassName = any;\n\ntype SerializedType = object[];\n\ntype RefType = {\n refIndex: number,\n refType: string,\n};\n\ntype SerializerOptions = {\n rootClass: ClassName,\n preSerialize?: (obj: ObjectType) => DataType,\n postSerialize?: (data: DataType, obj: any) => DataType,\n preDeserialize?: (data: DataType) => DataType,\n postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType,\n};\n\nconst DEFAULT_OPTIONS: SerializerOptions = {\n rootClass: World,\n preSerialize: function(obj) { return obj; },\n postSerialize: function(data, obj) { return data; },\n preDeserialize: function(data: DataType) { return data; },\n postDeserialize: function(obj, data) { return obj; },\n};\n\ntype DeserializeChildCallback = (classHint: any, obj: any, context: any) => any;\ntype ClassDeserializerMethod = (data: any, context: any, deserialize: DeserializeChildCallback) => any;\n\nexport class Serializer {\n private options: SerializerOptions;\n constructor(options: SerializerOptions) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n toJson = (root: T): SerializedType => {\n const preSerialize = this.options.preSerialize;\n const postSerialize = this.options.postSerialize;\n const json = [];\n\n // Breadth-first ref serialization queue\n const refQueue = [root];\n\n const refMemoById: Record = {};\n\n function addToRefQueue(value: any, typeName: string) {\n value.__sid = value.__sid || ++SID;\n if (!refMemoById[value.__sid]) {\n refQueue.push(value);\n const index = json.length + refQueue.length;\n const ref = {\n refIndex: index,\n refType: typeName\n };\n refMemoById[value.__sid] = ref;\n }\n return refMemoById[value.__sid];\n }\n\n function serializeWithHooks(obj: ObjectType) {\n obj = preSerialize(obj);\n let data = obj._serialize();\n data = postSerialize(data, obj);\n return data;\n }\n\n // traverse the object graph\n // ref objects are pushed into the queue\n // other objects are serialize in-place \n function traverse(value: any, noRefType = false) {\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n // object with _serialize function\n if (typeof value._serialize === \"function\") {\n if (!noRefType) {\n for (const typeName in SERIALIZE_REF_TYPES) {\n if (value instanceof SERIALIZE_REF_TYPES[typeName]) {\n return addToRefQueue(value, typeName);\n }\n }\n }\n // object with _serialize function\n value = serializeWithHooks(value);\n }\n // recursive for arrays any objects\n if (Array.isArray(value)) {\n const newValue = [];\n for (let key = 0; key < value.length; key++) {\n newValue[key] = traverse(value[key]);\n }\n value = newValue;\n\n } else {\n const newValue = {};\n for (const 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\n while (refQueue.length) {\n const obj = refQueue.shift();\n const str = traverse(obj, true);\n json.push(str);\n }\n\n return json;\n };\n\n fromJson = (json: SerializedType): T => {\n const preDeserialize = this.options.preDeserialize;\n const postDeserialize = this.options.postDeserialize;\n const rootClass = this.options.rootClass;\n\n const deserializedRefMemoByIndex: Record = {};\n\n function deserializeWithHooks(classHint: ClassName, data: DataType, context: any): ObjectType {\n if (!classHint || !classHint._deserialize) {\n classHint = DESERIALIZE_BY_TYPE_FIELD[data.type];\n }\n const deserializer = classHint && classHint._deserialize;\n if (!deserializer) {\n return;\n }\n data = preDeserialize(data);\n const classDeserializeFn = classHint._deserialize as ClassDeserializerMethod;\n let obj = classDeserializeFn(data, context, deserializeChild);\n obj = postDeserialize(obj, data);\n return obj;\n }\n\n /**\n * Recursive callback function to deserialize a child data object or reference object.\n * \n * @param classHint suggested class to deserialize obj to\n * @param dataOrRef data or reference object\n * @param context for example world when deserializing bodies and joints\n */\n function deserializeChild(classHint: ClassName, dataOrRef: DataType | RefType, context: any) {\n const isRefObject = dataOrRef.refIndex && dataOrRef.refType;\n if (!isRefObject) {\n return deserializeWithHooks(classHint, dataOrRef, context); \n }\n const ref = dataOrRef as RefType;\n if (DESERIALIZE_BY_REF_TYPE[ref.refType]) {\n classHint = DESERIALIZE_BY_REF_TYPE[ref.refType];\n }\n const refIndex = ref.refIndex;\n if (!deserializedRefMemoByIndex[refIndex]) {\n const data = json[refIndex];\n const obj = deserializeWithHooks(classHint, data, context);\n deserializedRefMemoByIndex[refIndex] = obj;\n }\n return deserializedRefMemoByIndex[refIndex];\n }\n\n const root = deserializeWithHooks(rootClass, json[0], null);\n\n return root;\n };\n\n static toJson: (root: World) => SerializedType;\n static fromJson: (json: SerializedType) => World;\n}\n\nconst worldSerializer = new Serializer({\n rootClass: World,\n});\n\nSerializer.fromJson = worldSerializer.fromJson;\nSerializer.toJson = worldSerializer.toJson;\n","import type { AABBValue } from \"../collision/AABB\";\nimport type { World } from \"../dynamics/World\";\nimport type { Joint } from \"../dynamics/Joint\";\nimport type { Fixture } from \"../dynamics/Fixture\";\nimport type { Body } from \"../dynamics/Body\";\n\nexport interface Style {\n stroke?: string;\n fill?: string;\n lineWidth?: number;\n}\n\ntype KEY = \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" |\n \"8\" | \"9\" | \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\" |\n \"H\" | \"I\" | \"J\" | \"K\" | \"L\" | \"M\" | \"N\" | \"O\" | \"P\" |\n \"Q\" | \"R\" | \"S\" | \"T\" | \"U\" | \"V\" | \"W\" | \"X\" | \"Y\" |\n \"Z\" | \"right\" | \"left\" | \"up\" | \"down\" | \"fire\";\n\nexport type ActiveKeys = { [key in KEY]?: boolean };\n\ntype TestbedMountOptions = {};\n\nexport abstract class Testbed {\n /**\n * Mounts testbed. Call start with a world to start simulation and rendering.\n */\n static mount(options?: TestbedMountOptions): Testbed {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Mounts testbed if needed, then starts simulation and rendering.\n * \n * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`.\n */\n static start(world: World): Testbed {\n const testbed = Testbed.mount();\n testbed.start(world);\n return testbed;\n }\n\n /** World viewbox width. */\n width: number = 80;\n\n /** World viewbox height. */\n height: number = 60;\n\n /** World viewbox center vertical offset. */\n x: number = 0;\n\n /** World viewbox center horizontal offset. */\n y: number = -10;\n\n /** @hidden */\n scaleY: number = -1;\n\n /** World simulation step frequency */\n hz: number = 60;\n\n /** World simulation speed, default is 1 */\n speed: number = 1;\n\n background: string = \"#222222\";\n\n mouseForce?: number;\n activeKeys: ActiveKeys = {};\n\n /** callback, to be implemented by user */\n step = (dt: number, t: number): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keydown = (keyCode: number, label: string): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keyup = (keyCode: number, label: string): void => {\n return;\n };\n\n abstract status(name: string, value: any): void;\n abstract status(value: object | string): void;\n\n abstract info(text: string): void;\n\n color(r: number, g: number, b: number): string {\n r = r * 256 | 0;\n g = g * 256 | 0;\n b = b * 256 | 0;\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n }\n\n abstract drawPoint(p: {x: number, y: number}, r: any, color: string): void;\n abstract drawCircle(p: {x: number, y: number}, r: number, color: string): void;\n abstract drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawSegment(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawPolygon(points: Array<{x: number, y: number}>, color: string): void;\n abstract drawAABB(aabb: AABBValue, color: string): void;\n\n abstract start(world: World): void;\n\n abstract findOne(query: string): (Body | Joint | Fixture | null);\n abstract findAll(query: string): (Body | Joint | Fixture)[];\n}\n\ntype TestbedFactoryOptions = string | {};\n\n/** @deprecated */\ntype TestbedCallback = (testbed: Testbed) => (World | undefined);\n\n/** @deprecated */\nexport function testbed(callback: TestbedCallback): void;\n/** @deprecated */\nexport function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void;\n/** @internal */\nexport function testbed(a?: any, b?: any) {\n let callback: TestbedCallback | undefined;\n let options;\n if (typeof a === \"function\") {\n callback = a;\n options = b;\n } else if (typeof b === \"function\") {\n callback = b;\n options = a;\n } else {\n options = a ?? b;\n }\n const testbed = Testbed.mount(options);\n if (callback) {\n // this is for backwards compatibility\n const world = callback(testbed) || (testbed as any).world;\n testbed.start(world);\n } else {\n return testbed;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2Value } from \"../../common/Vec2\";\nimport { PolygonShape } from \"./PolygonShape\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * A rectangle polygon which extend PolygonShape.\n */\nexport class BoxShape extends PolygonShape {\n // note that box is serialized/deserialized as polygon\n static TYPE = \"polygon\" as const;\n\n /**\n * \n * @param halfWidth \n * @param halfHeight \n * @param center coordinate of the center of the box relative to the body\n * @param angle angle of the box relative to the body\n */\n constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof BoxShape)) {\n return new BoxShape(halfWidth, halfHeight, center, angle);\n }\n\n super();\n\n this._setAsBox(halfWidth, halfHeight, center, angle);\n }\n}\n\nexport const Box = BoxShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\nimport * as matrix from \"../../common/Matrix\";\nimport { Transform } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact);\n\n/** @internal */ function CircleCircleContact(manifold: Manifold, xfA: Transform, fixtureA: Fixture, indexA: number, xfB: Transform, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == CircleShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollideCircles(manifold, fixtureA.getShape() as CircleShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const pA = matrix.vec2(0, 0);\n/** @internal */ const pB = matrix.vec2(0, 0);\n\nexport const CollideCircles = function (manifold: Manifold, circleA: CircleShape, xfA: Transform, circleB: CircleShape, xfB: Transform): void {\n manifold.pointCount = 0;\n\n matrix.transformVec2(pA, xfA, circleA.m_p);\n matrix.transformVec2(pB, xfB, circleB.m_p);\n\n const distSqr = matrix.distSqrVec2(pB, pA);\n const rA = circleA.m_radius;\n const rB = circleB.m_radius;\n const radius = rA + rB;\n if (distSqr > radius * radius) {\n return;\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.copyVec2(manifold.localPoint, circleA.m_p);\n matrix.zeroVec2(manifold.localNormal);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact);\nContact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact);\n\n/** @internal */ function EdgeCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const shapeA = fixtureA.getShape() as EdgeShape;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\nfunction ChainCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const chain = fixtureA.getShape() as ChainShape;\n const edge = new EdgeShape();\n chain.getChildEdge(edge, indexA);\n\n const shapeA = edge;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const Q = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n// Compute contact points for edge versus circle.\n// This accounts for edge connectivity.\nexport const CollideEdgeCircle = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle in frame of edge\n matrix.retransformVec2(Q, xfB, xfA, circleB.m_p);\n\n const A = edgeA.m_vertex1;\n const B = edgeA.m_vertex2;\n matrix.subVec2(e, B, A);\n\n // Barycentric coordinates\n const u = matrix.dotVec2(e, B) - matrix.dotVec2(e, Q);\n const v = matrix.dotVec2(e, Q) - matrix.dotVec2(e, A);\n\n const radius = edgeA.m_radius + circleB.m_radius;\n\n // Region A\n if (v <= 0.0) {\n matrix.copyVec2(P, A);\n const dd = matrix.distSqrVec2(Q, A);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to A?\n if (edgeA.m_hasVertex0) {\n const A1 = edgeA.m_vertex0;\n const B1 = A;\n matrix.subVec2(e1, B1, A1);\n const u1 = matrix.dotVec2(e1, B1) - matrix.dotVec2(e1, Q);\n\n // Is the circle in Region AB of the previous edge?\n if (u1 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Region B\n if (u <= 0.0) {\n matrix.copyVec2(P, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to B?\n if (edgeA.m_hasVertex3) {\n const B2 = edgeA.m_vertex3;\n const A2 = B;\n matrix.subVec2(e2, B2, A2);\n const v2 = matrix.dotVec2(e2, Q) - matrix.dotVec2(e2, A2);\n\n // Is the circle in Region AB of the next edge?\n if (v2 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n\n return;\n }\n\n // Region AB\n const den = matrix.lengthSqrVec2(e);\n _ASSERT && console.assert(den > 0.0);\n matrix.combine2Vec2(P, u / den, A, v / den, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n matrix.crossNumVec2(n, 1, e);\n if (matrix.dotVec2(n, Q) - matrix.dotVec2(n, A) < 0.0) {\n matrix.negVec2(n);\n }\n matrix.normalizeVec2(n);\n\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, n);\n matrix.copyVec2(manifold.localPoint, A);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const incidentEdge = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipSegmentToLineNormal = matrix.vec2(0, 0);\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const v11 = matrix.vec2(0, 0);\n/** @internal */ const v12 = matrix.vec2(0, 0);\n/** @internal */ const localTangent = matrix.vec2(0, 0);\n/** @internal */ const localNormal = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n\n\nContact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact);\n\n/** @internal */ function PolygonContact(\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number,\n): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == PolygonShape.TYPE);\n CollidePolygons(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ interface MaxSeparation {\n maxSeparation: number;\n bestIndex: number;\n}\n\n/**\n * Find the max separation between poly1 and poly2 using edge normals from\n * poly1.\n */\n/** @internal */ function findMaxSeparation(\n poly1: PolygonShape,\n xf1: TransformValue,\n poly2: PolygonShape,\n xf2: TransformValue,\n output: MaxSeparation,\n): void {\n const count1 = poly1.m_count;\n const count2 = poly2.m_count;\n const n1s = poly1.m_normals;\n const v1s = poly1.m_vertices;\n const v2s = poly2.m_vertices;\n\n matrix.detransformTransform(xf, xf2, xf1);\n\n let bestIndex = 0;\n let maxSeparation = -Infinity;\n for (let i = 0; i < count1; ++i) {\n // Get poly1 normal in frame2.\n matrix.rotVec2(n, xf.q, n1s[i]);\n matrix.transformVec2(v1, xf, v1s[i]);\n\n // Find deepest point for normal i.\n let si = Infinity;\n for (let j = 0; j < count2; ++j) {\n const sij = matrix.dotVec2(n, v2s[j]) - matrix.dotVec2(n, v1);\n if (sij < si) {\n si = sij;\n }\n }\n\n if (si > maxSeparation) {\n maxSeparation = si;\n bestIndex = i;\n }\n }\n\n // used to keep last FindMaxSeparation call values\n output.maxSeparation = maxSeparation;\n output.bestIndex = bestIndex;\n}\n\n/** @internal */ function findIncidentEdge(\n clipVertex: ClipVertex[],\n poly1: PolygonShape,\n xf1: TransformValue,\n edge1: number,\n poly2: PolygonShape,\n xf2: TransformValue,\n): void {\n const normals1 = poly1.m_normals;\n\n const count2 = poly2.m_count;\n const vertices2 = poly2.m_vertices;\n const normals2 = poly2.m_normals;\n\n _ASSERT && console.assert(0 <= edge1 && edge1 < poly1.m_count);\n\n // Get the normal of the reference edge in poly2's frame.\n matrix.rerotVec2(normal1, xf2.q, xf1.q, normals1[edge1]);\n\n // Find the incident edge on poly2.\n let index = 0;\n let minDot = Infinity;\n for (let i = 0; i < count2; ++i) {\n const dot = matrix.dotVec2(normal1, normals2[i]);\n if (dot < minDot) {\n minDot = dot;\n index = i;\n }\n }\n\n // Build the clip vertices for the incident edge.\n const i1 = index;\n const i2 = i1 + 1 < count2 ? i1 + 1 : 0;\n\n matrix.transformVec2(clipVertex[0].v, xf2, vertices2[i1]);\n clipVertex[0].id.setFeatures(edge1, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.transformVec2(clipVertex[1].v, xf2, vertices2[i2]);\n clipVertex[1].id.setFeatures(edge1, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n}\n\n/** @internal */ const maxSeparation = {\n maxSeparation: 0,\n bestIndex: 0,\n};\n\n/**\n *\n * Find edge normal of max separation on A - return if separating axis is found
\n * Find edge normal of max separation on B - return if separation axis is found
\n * Choose reference edge as min(minA, minB)
\n * Find incident edge
\n * Clip\n *\n * The normal points from 1 to 2\n */\nexport const CollidePolygons = function (\n manifold: Manifold,\n polyA: PolygonShape,\n xfA: TransformValue,\n polyB: PolygonShape,\n xfB: TransformValue,\n): void {\n manifold.pointCount = 0;\n const totalRadius = polyA.m_radius + polyB.m_radius;\n\n findMaxSeparation(polyA, xfA, polyB, xfB, maxSeparation);\n const edgeA = maxSeparation.bestIndex;\n const separationA = maxSeparation.maxSeparation;\n if (separationA > totalRadius)\n return;\n\n findMaxSeparation(polyB, xfB, polyA, xfA, maxSeparation);\n const edgeB = maxSeparation.bestIndex;\n const separationB = maxSeparation.maxSeparation;\n if (separationB > totalRadius)\n return;\n\n let poly1: PolygonShape; // reference polygon\n let poly2: PolygonShape; // incident polygon\n let xf1: TransformValue;\n let xf2: TransformValue;\n let edge1: number; // reference edge\n let flip: boolean;\n const k_tol = 0.1 * Settings.linearSlop;\n\n if (separationB > separationA + k_tol) {\n poly1 = polyB;\n poly2 = polyA;\n xf1 = xfB;\n xf2 = xfA;\n edge1 = edgeB;\n manifold.type = ManifoldType.e_faceB;\n flip = true;\n } else {\n poly1 = polyA;\n poly2 = polyB;\n xf1 = xfA;\n xf2 = xfB;\n edge1 = edgeA;\n manifold.type = ManifoldType.e_faceA;\n flip = false;\n }\n\n incidentEdge[0].recycle(), incidentEdge[1].recycle();\n findIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2);\n\n const count1 = poly1.m_count;\n const vertices1 = poly1.m_vertices;\n\n const iv1 = edge1;\n const iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0;\n\n matrix.copyVec2(v11, vertices1[iv1]);\n matrix.copyVec2(v12, vertices1[iv2]);\n\n matrix.subVec2(localTangent, v12, v11);\n matrix.normalizeVec2(localTangent);\n\n matrix.crossVec2Num(localNormal, localTangent, 1.0);\n matrix.combine2Vec2(planePoint, 0.5, v11, 0.5, v12);\n\n matrix.rotVec2(tangent, xf1.q, localTangent);\n matrix.crossVec2Num(normal, tangent, 1.0);\n\n matrix.transformVec2(v11, xf1, v11);\n matrix.transformVec2(v12, xf1, v12);\n\n // Face offset.\n const frontOffset = matrix.dotVec2(normal, v11);\n\n // Side offsets, extended by polytope skin thickness.\n const sideOffset1 = -matrix.dotVec2(tangent, v11) + totalRadius;\n const sideOffset2 = matrix.dotVec2(tangent, v12) + totalRadius;\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n matrix.setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y);\n const np1 = clipSegmentToLine(clipPoints1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1);\n\n if (np1 < 2) {\n return;\n }\n\n // Clip to negative box side 1\n matrix.setVec2(clipSegmentToLineNormal, tangent.x, tangent.y);\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, clipSegmentToLineNormal, sideOffset2, iv2);\n\n if (np2 < 2) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n matrix.copyVec2(manifold.localNormal, localNormal);\n matrix.copyVec2(manifold.localPoint, planePoint);\n\n let pointCount = 0;\n for (let i = 0; i < clipPoints2.length/* maxManifoldPoints */; ++i) {\n const separation = matrix.dotVec2(normal, clipPoints2[i].v) - frontOffset;\n\n if (separation <= totalRadius) {\n const cp = manifold.points[pointCount];\n matrix.detransformVec2(cp.localPoint, xf2, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n if (flip) {\n // Swap features\n cp.id.swapFeatures();\n }\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact);\n\n/** @internal */ function PolygonCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollidePolygonCircle(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const cLocal = matrix.vec2(0, 0);\n/** @internal */ const faceCenter = matrix.vec2(0, 0);\n\nexport const CollidePolygonCircle = function (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle position in the frame of the polygon.\n matrix.retransformVec2(cLocal, xfB, xfA, circleB.m_p);\n\n // Find the min separating edge.\n let normalIndex = 0;\n let separation = -Infinity;\n const radius = polygonA.m_radius + circleB.m_radius;\n const vertexCount = polygonA.m_count;\n const vertices = polygonA.m_vertices;\n const normals = polygonA.m_normals;\n\n for (let i = 0; i < vertexCount; ++i) {\n const s = matrix.dotVec2(normals[i], cLocal) - matrix.dotVec2(normals[i], vertices[i]);\n\n if (s > radius) {\n // Early out.\n return;\n }\n\n if (s > separation) {\n separation = s;\n normalIndex = i;\n }\n }\n\n // Vertices that subtend the incident face.\n const vertIndex1 = normalIndex;\n const vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0;\n const v1 = vertices[vertIndex1];\n const v2 = vertices[vertIndex2];\n\n // If the center is inside the polygon ...\n if (separation < EPSILON) {\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[normalIndex]);\n matrix.combine2Vec2(manifold.localPoint, 0.5, v1, 0.5, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Compute barycentric coordinates\n // u1 = (cLocal - v1) dot (v2 - v1))\n const u1 = matrix.dotVec2(cLocal, v2) - matrix.dotVec2(cLocal, v1) - matrix.dotVec2(v1, v2) + matrix.dotVec2(v1, v1);\n // u2 = (cLocal - v2) dot (v1 - v2)\n const u2 = matrix.dotVec2(cLocal, v1) - matrix.dotVec2(cLocal, v2) - matrix.dotVec2(v2, v1) + matrix.dotVec2(v2, v2);\n if (u1 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v1) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v1);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v1);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else if (u2 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v2) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v2);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else {\n matrix.combine2Vec2(faceCenter, 0.5, v1, 0.5, v2);\n const separation = matrix.dotVec2(cLocal, normals[vertIndex1]) - matrix.dotVec2(faceCenter, normals[vertIndex1]);\n if (separation > radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[vertIndex1]);\n matrix.copyVec2(manifold.localPoint, faceCenter);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n }\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_min = Math.min;\n\nContact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact);\nContact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact);\n\n/** @internal */ function EdgePolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n CollideEdgePolygon(manifold, fA.getShape() as EdgeShape, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n// reused\n/** @internal */ const edge_reuse = new EdgeShape();\n\n/** @internal */ function ChainPolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n const chain = fA.getShape() as ChainShape;\n chain.getChildEdge(edge_reuse, indexA);\n\n CollideEdgePolygon(manifold, edge_reuse, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ enum EPAxisType {\n e_unknown = -1,\n e_edgeA = 1,\n e_edgeB = 2,\n}\n\n// unused?\n/** @internal */ enum VertexType {\n e_isolated = 0,\n e_concave = 1,\n e_convex = 2,\n}\n\n/**\n * This structure is used to keep track of the best separating axis.\n */\n/** @internal */ class EPAxis {\n type: EPAxisType;\n index: number;\n separation: number;\n}\n\n/**\n * This holds polygon B expressed in frame A.\n */\n/** @internal */ class TempPolygon {\n vertices: Vec2Value[] = []; // [Settings.maxPolygonVertices]\n normals: Vec2Value[] = []; // [Settings.maxPolygonVertices];\n count: number = 0;\n constructor() {\n for (let i = 0; i < Settings.maxPolygonVertices; i++) {\n this.vertices.push(matrix.vec2(0, 0));\n this.normals.push(matrix.vec2(0, 0));\n }\n }\n}\n\n/**\n * Reference face used for clipping\n */\n/** @internal */ class ReferenceFace {\n i1: number;\n i2: number;\n readonly v1 = matrix.vec2(0 ,0);\n readonly v2 = matrix.vec2(0 ,0);\n readonly normal = matrix.vec2(0 ,0);\n readonly sideNormal1 = matrix.vec2(0 ,0);\n sideOffset1: number;\n readonly sideNormal2 = matrix.vec2(0 ,0);\n sideOffset2: number;\n recycle() {\n matrix.zeroVec2(this.v1);\n matrix.zeroVec2(this.v2);\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.sideNormal1);\n matrix.zeroVec2(this.sideNormal2);\n }\n}\n\n// reused\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const ie = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const edgeAxis = new EPAxis();\n/** @internal */ const polygonAxis = new EPAxis();\n/** @internal */ const polygonBA = new TempPolygon();\n/** @internal */ const rf = new ReferenceFace();\n/** @internal */ const centroidB = matrix.vec2(0, 0);\n/** @internal */ const edge0 = matrix.vec2(0, 0);\n/** @internal */ const edge1 = matrix.vec2(0, 0);\n/** @internal */ const edge2 = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal0 = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n/** @internal */ const normal2 = matrix.vec2(0, 0);\n/** @internal */ const lowerLimit = matrix.vec2(0, 0);\n/** @internal */ const upperLimit = matrix.vec2(0, 0);\n/** @internal */ const perp = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n/**\n * This function collides and edge and a polygon, taking into account edge\n * adjacency.\n */\nexport const CollideEdgePolygon = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue): void {\n // Algorithm:\n // 1. Classify v1 and v2\n // 2. Classify polygon centroid as front or back\n // 3. Flip normal if necessary\n // 4. Initialize normal range to [-pi, pi] about face normal\n // 5. Adjust normal range according to adjacent edges\n // 6. Visit each separating axes, only accept axes within the range\n // 7. Return if _any_ axis indicates separation\n // 8. Clip\n\n // let m_type1: VertexType;\n // let m_type2: VertexType;\n\n matrix.detransformTransform(xf, xfA, xfB);\n matrix.transformVec2(centroidB, xf, polygonB.m_centroid);\n\n const v0 = edgeA.m_vertex0;\n const v1 = edgeA.m_vertex1;\n const v2 = edgeA.m_vertex2;\n const v3 = edgeA.m_vertex3;\n\n const hasVertex0 = edgeA.m_hasVertex0;\n const hasVertex3 = edgeA.m_hasVertex3;\n\n matrix.subVec2(edge1, v2, v1);\n matrix.normalizeVec2(edge1);\n matrix.setVec2(normal1, edge1.y, -edge1.x);\n const offset1 = matrix.dotVec2(normal1, centroidB) - matrix.dotVec2(normal1, v1);\n let offset0 = 0.0;\n let offset2 = 0.0;\n let convex1 = false;\n let convex2 = false;\n\n matrix.zeroVec2(normal0);\n matrix.zeroVec2(normal2);\n\n // Is there a preceding edge?\n if (hasVertex0) {\n matrix.subVec2(edge0, v1, v0);\n matrix.normalizeVec2(edge0);\n matrix.setVec2(normal0, edge0.y, -edge0.x);\n convex1 = matrix.crossVec2Vec2(edge0, edge1) >= 0.0;\n offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0);\n }\n\n // Is there a following edge?\n if (hasVertex3) {\n matrix.subVec2(edge2, v3, v2);\n matrix.normalizeVec2(edge2);\n matrix.setVec2(normal2, edge2.y, -edge2.x);\n convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0.0;\n offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v2);\n }\n\n let front: boolean;\n matrix.zeroVec2(normal);\n matrix.zeroVec2(lowerLimit);\n matrix.zeroVec2(upperLimit);\n\n // Determine front or back collision. Determine collision normal limits.\n if (hasVertex0 && hasVertex3) {\n if (convex1 && convex2) {\n front = offset0 >= 0.0 || offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex1) {\n front = offset0 >= 0.0 || (offset1 >= 0.0 && offset2 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex2) {\n front = offset2 >= 0.0 || (offset0 >= 0.0 && offset1 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex0) {\n if (convex1) {\n front = offset0 >= 0.0 || offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex3) {\n if (convex2) {\n front = offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n } else {\n front = offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n } else {\n front = offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n\n // Get polygonB in frameA\n polygonBA.count = polygonB.m_count;\n for (let i = 0; i < polygonB.m_count; ++i) {\n matrix.transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]);\n matrix.rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]);\n }\n\n const radius = polygonB.m_radius + edgeA.m_radius;\n\n manifold.pointCount = 0;\n\n { // ComputeEdgeSeparation\n edgeAxis.type = EPAxisType.e_edgeA;\n edgeAxis.index = front ? 0 : 1;\n edgeAxis.separation = Infinity;\n\n for (let i = 0; i < polygonBA.count; ++i) {\n const v = polygonBA.vertices[i];\n const s = matrix.dotVec2(normal, v) - matrix.dotVec2(normal, v1);\n if (s < edgeAxis.separation) {\n edgeAxis.separation = s;\n }\n }\n }\n\n // If no valid normal can be found than this edge should not collide.\n // @ts-ignore todo: why we need this if here?\n if (edgeAxis.type == EPAxisType.e_unknown) {\n return;\n }\n\n if (edgeAxis.separation > radius) {\n return;\n }\n\n { // ComputePolygonSeparation\n polygonAxis.type = EPAxisType.e_unknown;\n polygonAxis.index = -1;\n polygonAxis.separation = -Infinity;\n\n matrix.setVec2(perp, -normal.y, normal.x);\n\n for (let i = 0; i < polygonBA.count; ++i) {\n matrix.scaleVec2(n, -1, polygonBA.normals[i]);\n\n const s1 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v1);\n const s2 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v2);\n const s = math_min(s1, s2);\n\n if (s > radius) {\n // No collision\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n break;\n }\n\n // Adjacency\n if (matrix.dotVec2(n, perp) >= 0.0) {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(upperLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n } else {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(lowerLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n }\n\n if (s > polygonAxis.separation) {\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n }\n }\n }\n\n if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) {\n return;\n }\n\n // Use hysteresis for jitter reduction.\n const k_relativeTol = 0.98;\n const k_absoluteTol = 0.001;\n\n let primaryAxis: EPAxis;\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\n ie[0].recycle(), ie[1].recycle();\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n manifold.type = ManifoldType.e_faceA;\n\n // Search for the polygon normal that is most anti-parallel to the edge\n // normal.\n let bestIndex = 0;\n let bestValue = matrix.dotVec2(normal, polygonBA.normals[0]);\n for (let i = 1; i < polygonBA.count; ++i) {\n const value = matrix.dotVec2(normal, polygonBA.normals[i]);\n if (value < bestValue) {\n bestValue = value;\n bestIndex = i;\n }\n }\n\n const i1 = bestIndex;\n const i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0;\n\n matrix.copyVec2(ie[0].v, polygonBA.vertices[i1]);\n ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.copyVec2(ie[1].v, polygonBA.vertices[i2]);\n ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n\n if (front) {\n rf.i1 = 0;\n rf.i2 = 1;\n matrix.copyVec2(rf.v1, v1);\n matrix.copyVec2(rf.v2, v2);\n matrix.copyVec2(rf.normal, normal1);\n } else {\n rf.i1 = 1;\n rf.i2 = 0;\n matrix.copyVec2(rf.v1, v2);\n matrix.copyVec2(rf.v2, v1);\n matrix.scaleVec2(rf.normal, -1, normal1);\n }\n } else {\n manifold.type = ManifoldType.e_faceB;\n\n matrix.copyVec2(ie[0].v, v1);\n ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n matrix.copyVec2(ie[1].v, v2);\n ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n rf.i1 = primaryAxis.index;\n rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0;\n matrix.copyVec2(rf.v1, polygonBA.vertices[rf.i1]);\n matrix.copyVec2(rf.v2, polygonBA.vertices[rf.i2]);\n matrix.copyVec2(rf.normal, polygonBA.normals[rf.i1]);\n }\n\n matrix.setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x);\n matrix.setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y);\n rf.sideOffset1 = matrix.dotVec2(rf.sideNormal1, rf.v1);\n rf.sideOffset2 = matrix.dotVec2(rf.sideNormal2, rf.v2);\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n const np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1);\n\n if (np1 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Clip to negative box side 1\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2);\n\n if (np2 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.copyVec2(manifold.localNormal, rf.normal);\n matrix.copyVec2(manifold.localPoint, rf.v1);\n } else {\n matrix.copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]);\n matrix.copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]);\n }\n\n let pointCount = 0;\n for (let i = 0; i < Settings.maxManifoldPoints; ++i) {\n const separation = matrix.dotVec2(rf.normal, clipPoints2[i].v) - matrix.dotVec2(rf.normal, rf.v1);\n\n if (separation <= radius) {\n const cp = manifold.points[pointCount]; // ManifoldPoint\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.detransformVec2(cp.localPoint, xf, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n } else {\n matrix.copyVec2(cp.localPoint, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n cp.id.swapFeatures();\n }\n\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","import { CollidePolygons } from \"./collision/shape/CollidePolygon\";\nimport { Settings } from \"./Settings\";\nimport { Sweep } from \"./common/Sweep\";\nimport { DynamicTree } from \"./collision/DynamicTree\";\nimport { Manifold } from \"./collision/Manifold\";\nimport { Distance } from \"./collision/Distance\";\nimport { TimeOfImpact } from \"./collision/TimeOfImpact\";\nimport { stats } from \"./util/stats\";\n\n/** @hidden @deprecated Merged with main namespace */\nexport const internal = {\n CollidePolygons,\n Settings,\n Sweep,\n Manifold,\n Distance,\n TimeOfImpact,\n DynamicTree,\n stats\n};\n"],"names":["math_abs","math_sqrt","math_max","math_min","math_PI","Settings","math_sin","math_cos","math_atan2","temp","matrix.vec2","matrix.zeroVec2","matrix.transformVec2","matrix.copyVec2","matrix.setRotAngle","matrix.combine2Vec2","matrix.minusVec2","matrix.rotVec2","matrix.subVec2","xf","matrix.transform","matrix.plusScaleVec2","matrix.scaleVec2","matrix.dotVec2","matrix.crossNumVec2","matrix.plusVec2","normal","matrix.lengthSqrVec2","matrix.derotVec2","matrix.distVec2","matrix.normalizeVec2","matrix.minusScaleVec2","matrix.setVec2","matrix.crossVec2Vec2","matrix.combine3Vec2","input","cache","output","matrix.copyTransform","xfA","xfB","pointA","pointB","matrix.normalizeVec2Length","matrix.crossVec2Num","matrix.negVec2","matrix.mulVec2","cA","cB","planePoint","clipPoint","tangent","P","DEFAULTS","v1","v2","e","e1","e2","matrix.detransformVec2","matrix.addVec2","matrix.distSqrVec2","LimitState","n","matrix.retransformVec2","clipPoints1","clipPoints2","normal1","matrix.detransformTransform","matrix.rerotVec2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,C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,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA;AACX,CAAA,CAAA,CAAA,CAAA,CAAA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"} \ No newline at end of file +{"version":3,"file":"planck.mjs","sources":["../node_modules/tslib/tslib.es6.js","../src/util/options.ts","../src/common/Math.ts","../src/common/Vec2.ts","../src/collision/AABB.ts","../src/Settings.ts","../src/util/Pool.ts","../src/collision/DynamicTree.ts","../src/collision/BroadPhase.ts","../src/common/Matrix.ts","../src/common/Rot.ts","../src/common/Sweep.ts","../src/common/Transform.ts","../src/dynamics/Velocity.ts","../src/dynamics/Position.ts","../src/collision/Shape.ts","../src/dynamics/Fixture.ts","../src/dynamics/Body.ts","../src/dynamics/Joint.ts","../src/util/stats.ts","../src/util/Timer.ts","../src/collision/Distance.ts","../src/collision/TimeOfImpact.ts","../src/dynamics/Solver.ts","../src/common/Mat22.ts","../src/collision/Manifold.ts","../src/dynamics/Contact.ts","../src/dynamics/World.ts","../src/common/Vec3.ts","../src/collision/shape/EdgeShape.ts","../src/collision/shape/ChainShape.ts","../src/collision/shape/PolygonShape.ts","../src/collision/shape/CircleShape.ts","../src/dynamics/joint/DistanceJoint.ts","../src/dynamics/joint/FrictionJoint.ts","../src/common/Mat33.ts","../src/dynamics/joint/RevoluteJoint.ts","../src/dynamics/joint/PrismaticJoint.ts","../src/dynamics/joint/GearJoint.ts","../src/dynamics/joint/MotorJoint.ts","../src/dynamics/joint/MouseJoint.ts","../src/dynamics/joint/PulleyJoint.ts","../src/dynamics/joint/RopeJoint.ts","../src/dynamics/joint/WeldJoint.ts","../src/dynamics/joint/WheelJoint.ts","../src/serializer/index.ts","../src/util/Testbed.ts","../src/collision/shape/BoxShape.ts","../src/collision/shape/CollideCircle.ts","../src/collision/shape/CollideEdgeCircle.ts","../src/collision/shape/CollidePolygon.ts","../src/collision/shape/CollideCirclePolygon.ts","../src/collision/shape/CollideEdgePolygon.ts","../src/internal.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/** @internal */\nexport const options = function(input: T, defaults: object): T {\n if (input === null || typeof input === \"undefined\") {\n // tslint:disable-next-line:no-object-literal-type-assertion\n input = {} as T;\n }\n\n const output = {...input};\n\n // tslint:disable-next-line:no-for-in\n for (const key in defaults) {\n if (defaults.hasOwnProperty(key) && typeof input[key] === \"undefined\") {\n output[key] = defaults[key];\n }\n }\n\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n const symbols = Object.getOwnPropertySymbols(defaults);\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n if (defaults.propertyIsEnumerable(symbol) && typeof input[symbol] === \"undefined\") {\n output[symbol] = defaults[symbol];\n }\n }\n }\n\n return output;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_random = Math.random;\n\n\nexport const EPSILON = 1e-9;\n\n/** @internal @deprecated */\nexport const isFinite = Number.isFinite;\n\n/**\n * @deprecated\n * Next Largest Power of 2 Given a binary integer value x, the next largest\n * power of 2 can be computed by a SWAR algorithm that recursively \"folds\" the\n * upper bits into the lower bits. This process yields a bit vector with the\n * same most significant 1 as x, but all 1's below it. Adding 1 to that value\n * yields the next largest power of 2. For a 32-bit value:\n */\nexport function nextPowerOfTwo(x: number): number {\n x |= (x >> 1);\n x |= (x >> 2);\n x |= (x >> 4);\n x |= (x >> 8);\n x |= (x >> 16);\n return x + 1;\n}\n\n/** @deprecated */\nexport function isPowerOfTwo(x: number): boolean {\n return x > 0 && (x & (x - 1)) === 0;\n}\n\n/** @deprecated */\nexport function mod(num: number, min?: number, max?: number): number {\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}\n\n/**\n * @deprecated\n * Returns a min if num is less than min, and max if more than max, otherwise returns num.\n */\nexport function clamp(num: number, min: number, max: number): number {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n } else {\n return num;\n }\n}\n\n/**\n * @deprecated\n * Returns a random number between min and max when two arguments are provided.\n * If one arg is provided between 0 to max.\n * If one arg is passed between 0 to 1.\n */\nexport function random(min?: number, max?: number): number {\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}\n\n/** @ignore */\nexport const 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;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"./Math\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/** 2D vector */\nexport interface Vec2Value {\n x: number;\n y: number;\n}\n\ndeclare module \"./Vec2\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec2(x: number, y: number): Vec2;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec2(obj: Vec2Value): Vec2;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec2(): Vec2;\n}\n\n/** 2D vector */\n// @ts-expect-error\nexport class Vec2 {\n x: number;\n y: number;\n\n constructor(x: number, y: number);\n constructor(obj: Vec2Value);\n constructor();\n // tslint:disable-next-line:typedef\n constructor(x?, y?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec2)) {\n return new Vec2(x, y);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n } else {\n this.x = x;\n this.y = y;\n }\n _ASSERT && Vec2.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = data.x;\n obj.y = data.y;\n return obj;\n }\n\n static zero(): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = 0;\n obj.y = 0;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number): Vec2 {\n const obj = Object.create(Vec2.prototype);\n obj.x = x;\n obj.y = y;\n return obj;\n }\n\n static clone(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(v.x, v.y);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /**\n * Does this vector contain finite coordinates?\n */\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.x) && Number.isFinite(obj.y);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec2.isValid(o), \"Invalid Vec2!\", o);\n }\n\n clone(): Vec2 {\n return Vec2.clone(this);\n }\n\n /**\n * Set this vector to all zeros.\n *\n * @returns this\n */\n setZero(): Vec2 {\n this.x = 0.0;\n this.y = 0.0;\n return this;\n }\n\n set(x: number, y: number): Vec2;\n set(value: Vec2Value): Vec2;\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n // tslint:disable-next-line:typedef\n set(x, y?) {\n if (typeof x === \"object\") {\n _ASSERT && Vec2.assert(x);\n this.x = x.x;\n this.y = x.y;\n } else {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n }\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setNum(x: number, y: number) {\n _ASSERT && console.assert(Number.isFinite(x));\n _ASSERT && console.assert(Number.isFinite(y));\n this.x = x;\n this.y = y;\n\n return this;\n }\n\n /**\n * Set this vector to some specified coordinates.\n *\n * @returns this\n */\n setVec2(value: Vec2Value) {\n _ASSERT && Vec2.assert(value);\n this.x = value.x;\n this.y = value.y;\n\n return this;\n }\n\n /** @internal @deprecated Use setCombine or setMul */\n wSet(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.setCombine(a, v, b, w);\n } else {\n return this.setMul(a, v);\n }\n }\n\n /**\n * Set linear combination of v and w: `a * v + b * w`\n */\n setCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x = x;\n this.y = y;\n return this;\n }\n\n setMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * Add a vector to this vector.\n *\n * @returns this\n */\n add(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x += w.x;\n this.y += w.y;\n return this;\n }\n\n /** @internal @deprecated Use addCombine or addMul */\n wAdd(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.addCombine(a, v, b, w);\n } else {\n return this.addMul(a, v);\n }\n }\n\n /**\n * Add linear combination of v and w: `a * v + b * w`\n */\n addCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x += x;\n this.y += y;\n return this;\n }\n\n addMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x += x;\n this.y += y;\n return this;\n }\n\n /**\n * @deprecated Use subCombine or subMul\n */\n wSub(a: number, v: Vec2Value, b?: number, w?: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return this.subCombine(a, v, b, w);\n } else {\n return this.subMul(a, v);\n }}\n\n /**\n * Subtract linear combination of v and w: `a * v + b * w`\n */\n subCombine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(b));\n _ASSERT && Vec2.assert(w);\n const x = a * v.x + b * w.x;\n const y = a * v.y + b * w.y;\n\n // `this` may be `w`\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n subMul(a: number, v: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(v);\n const x = a * v.x;\n const y = a * v.y;\n\n this.x -= x;\n this.y -= y;\n return this;\n }\n\n /**\n * Subtract a vector from this vector\n *\n * @returns this\n */\n sub(w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(w);\n this.x -= w.x;\n this.y -= w.y;\n return this;\n }\n\n /**\n * Multiply this vector by a scalar.\n *\n * @returns this\n */\n mul(m: number): Vec2 {\n _ASSERT && console.assert(Number.isFinite(m));\n this.x *= m;\n this.y *= m;\n return this;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n length(): number {\n return Vec2.lengthOf(this);\n }\n\n /**\n * Get the length squared.\n */\n lengthSquared(): number {\n return Vec2.lengthSquared(this);\n }\n\n /**\n * Convert this vector into a unit vector.\n *\n * @returns old length\n */\n normalize(): number {\n const length = this.length();\n if (length < EPSILON) {\n return 0.0;\n }\n const invLength = 1.0 / length;\n this.x *= invLength;\n this.y *= invLength;\n return length;\n }\n\n /**\n * Get the length of this vector (the norm).\n *\n * For performance, use this instead of lengthSquared (if possible).\n */\n static lengthOf(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return math_sqrt(v.x * v.x + v.y * v.y);\n }\n\n /**\n * Get the length squared.\n */\n static lengthSquared(v: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n return v.x * v.x + v.y * v.y;\n }\n\n static distance(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return math_sqrt(dx * dx + dy * dy);\n }\n\n static distanceSquared(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n const dx = v.x - w.x;\n const dy = v.y - w.y;\n return dx * dx + dy * dy;\n }\n\n static areEqual(v: Vec2Value, w: Vec2Value): boolean {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v === w || typeof w === \"object\" && w !== null && v.x === w.x && v.y === w.y;\n }\n\n /**\n * Get the skew vector such that dot(skew_vec, other) == cross(vec, other)\n */\n static skew(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.y, v.x);\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.x + v.y * w.y;\n }\n\n /** Cross product between two vectors */\n static cross(v: Vec2Value, w: Vec2Value): number;\n /** Cross product between a vector and a scalar */\n static cross(v: Vec2Value, w: number): Vec2;\n /** Cross product between a scalar and a vector */\n static cross(v: number, w: Vec2Value): Vec2;\n static cross(v: any, w: any): any {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n\n } else {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n }\n\n /** Cross product on two vectors */\n static crossVec2Vec2(v: Vec2Value, w: Vec2Value): number {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return v.x * w.y - v.y * w.x;\n }\n\n /** Cross product on a vector and a scalar */\n static crossVec2Num(v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y, -w * v.x);\n }\n\n /** Cross product on a vector and a scalar */\n static crossNumVec2(v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y, v * w.x);\n }\n\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: Vec2Value, w: number): Vec2;\n /** Returns `a + (v x w)` */\n static addCross(a: Vec2Value, v: number, w: Vec2Value): Vec2;\n static addCross(a: Vec2Value, v: any, w: any): Vec2 {\n if (typeof w === \"number\") {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n\n } else if (typeof v === \"number\") {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossVec2Num(a: Vec2Value, v: Vec2Value, w: number): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && console.assert(Number.isFinite(w));\n return Vec2.neo(w * v.y + a.x, -w * v.x + a.y);\n }\n\n /**\n * Returns `a + (v x w)`\n */\n static addCrossNumVec2(a: Vec2Value, v: number, w: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(v));\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(-v * w.y + a.x, v * w.x + a.y);\n }\n\n static add(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x + w.x, v.y + w.y);\n }\n\n /** @hidden @deprecated */\n static wAdd(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n if (typeof b !== \"undefined\" || typeof w !== \"undefined\") {\n return Vec2.combine(a, v, b, w);\n } else {\n return Vec2.mulNumVec2(a, v);\n }\n }\n\n static combine(a: number, v: Vec2Value, b: number, w: Vec2Value): Vec2 {\n return Vec2.zero().setCombine(a, v, b, w);\n }\n\n static sub(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(v.x - w.x, v.y - w.y);\n }\n\n static mul(a: Vec2Value, b: number): Vec2;\n static mul(a: number, b: Vec2Value): Vec2;\n static mul(a: any, b: any): Vec2 {\n if (typeof a === \"object\") {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n\n } else if (typeof b === \"object\") {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n }\n\n static mulVec2Num(a: Vec2Value, b: number): Vec2 {\n _ASSERT && Vec2.assert(a);\n _ASSERT && console.assert(Number.isFinite(b));\n return Vec2.neo(a.x * b, a.y * b);\n }\n\n static mulNumVec2(a: number, b: Vec2Value): Vec2 {\n _ASSERT && console.assert(Number.isFinite(a));\n _ASSERT && Vec2.assert(b);\n return Vec2.neo(a * b.x, a * b.y);\n }\n\n neg(): Vec2 {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n\n static neg(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(-v.x, -v.y);\n }\n\n static abs(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(math_abs(v.x), math_abs(v.y));\n }\n\n static mid(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo((v.x + w.x) * 0.5, (v.y + w.y) * 0.5);\n }\n\n static upper(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_max(v.x, w.x), math_max(v.y, w.y));\n }\n\n static lower(v: Vec2Value, w: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n _ASSERT && Vec2.assert(w);\n return Vec2.neo(math_min(v.x, w.x), math_min(v.y, w.y));\n }\n\n clamp(max: number): Vec2 {\n const lengthSqr = this.x * this.x + this.y * this.y;\n if (lengthSqr > max * max) {\n const scale = max / math_sqrt(lengthSqr);\n this.x *= scale;\n this.y *= scale;\n }\n return this;\n }\n\n static clamp(v: Vec2Value, max: number): Vec2 {\n const r = Vec2.neo(v.x, v.y);\n r.clamp(max);\n return r;\n }\n\n /** @hidden @deprecated */\n static scaleFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x * x, v.y * y);\n };\n }\n\n /** @hidden @deprecated */\n static translateFn(x: number, y: number) {\n // todo: this was used in examples, remove in the future\n return function(v: Vec2Value): Vec2 {\n return Vec2.neo(v.x + x, v.y + y);\n };\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/**\n * Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n */\nexport interface RayCastInput {\n p1: Vec2Value;\n p2: Vec2Value;\n maxFraction: number;\n}\n\nexport type RayCastCallback = (subInput: RayCastInput, id: number) => number;\n\n/**\n * Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`,\n * where `p1` and `p2` come from RayCastInput.\n */\nexport interface RayCastOutput {\n normal: Vec2;\n fraction: number;\n}\n\n/** Axis-aligned bounding box */\nexport interface AABBValue {\n lowerBound: Vec2Value;\n upperBound: Vec2Value;\n}\n\ndeclare module \"./AABB\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function AABB(lower?: Vec2Value, upper?: Vec2Value): AABB;\n}\n\n/** Axis-aligned bounding box */\n// @ts-expect-error\nexport class AABB {\n lowerBound: Vec2;\n upperBound: Vec2;\n\n constructor(lower?: Vec2Value, upper?: Vec2Value) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof AABB)) {\n return new AABB(lower, upper);\n }\n\n this.lowerBound = Vec2.zero();\n this.upperBound = Vec2.zero();\n\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\n /**\n * Verify that the bounds are sorted.\n */\n isValid(): boolean {\n return AABB.isValid(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!AABB.isValid(o), \"Invalid AABB!\", o);\n }\n\n /**\n * Get the center of the AABB.\n */\n getCenter(): Vec2 {\n return Vec2.neo((this.lowerBound.x + this.upperBound.x) * 0.5, (this.lowerBound.y + this.upperBound.y) * 0.5);\n }\n\n /**\n * Get the extents of the AABB (half-widths).\n */\n getExtents(): Vec2 {\n return Vec2.neo((this.upperBound.x - this.lowerBound.x) * 0.5, (this.upperBound.y - this.lowerBound.y) * 0.5);\n }\n\n /**\n * Get the perimeter length.\n */\n getPerimeter(): number {\n return 2.0 * (this.upperBound.x - this.lowerBound.x + this.upperBound.y - this.lowerBound.y);\n }\n\n /**\n * Combine one or two AABB into this one.\n */\n combine(a: AABBValue, b?: AABBValue): void {\n b = b || this;\n\n const lowerA = a.lowerBound;\n const upperA = a.upperBound;\n const lowerB = b.lowerBound;\n const upperB = b.upperBound;\n\n const lowerX = math_min(lowerA.x, lowerB.x);\n const lowerY = math_min(lowerA.y, lowerB.y);\n const upperX = math_max(upperB.x, upperA.x);\n const upperY = math_max(upperB.y, upperA.y);\n\n this.lowerBound.setNum(lowerX, lowerY);\n this.upperBound.setNum(upperX, upperY);\n }\n\n combinePoints(a: Vec2Value, b: Vec2Value): void {\n this.lowerBound.setNum(math_min(a.x, b.x), math_min(a.y, b.y));\n this.upperBound.setNum(math_max(a.x, b.x), math_max(a.y, b.y));\n }\n\n set(aabb: AABBValue): void {\n this.lowerBound.setNum(aabb.lowerBound.x, aabb.lowerBound.y);\n this.upperBound.setNum(aabb.upperBound.x, aabb.upperBound.y);\n }\n\n contains(aabb: AABBValue): boolean {\n let 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\n extend(value: number): AABB {\n AABB.extend(this, value);\n return this;\n }\n\n static extend(out: AABBValue, value: number): AABBValue {\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\n static testOverlap(a: AABBValue, b: AABBValue): boolean {\n const d1x = b.lowerBound.x - a.upperBound.x;\n const d2x = a.lowerBound.x - b.upperBound.x;\n\n const d1y = b.lowerBound.y - a.upperBound.y;\n const d2y = a.lowerBound.y - b.upperBound.y;\n\n if (d1x > 0 || d1y > 0 || d2x > 0 || d2y > 0) {\n return false;\n }\n return true;\n }\n\n static areEqual(a: AABBValue, b: AABBValue): boolean {\n return Vec2.areEqual(a.lowerBound, b.lowerBound) && Vec2.areEqual(a.upperBound, b.upperBound);\n }\n\n static diff(a: AABBValue, b: AABBValue): number {\n const wD = math_max(0, math_min(a.upperBound.x, b.upperBound.x) - math_max(b.lowerBound.x, a.lowerBound.x));\n const hD = math_max(0, math_min(a.upperBound.y, b.upperBound.y) - math_max(b.lowerBound.y, a.lowerBound.y));\n\n const wA = a.upperBound.x - a.lowerBound.x;\n const hA = a.upperBound.y - a.lowerBound.y;\n\n const wB = b.upperBound.x - b.lowerBound.x;\n const hB = b.upperBound.y - b.lowerBound.y;\n\n return wA * hA + wB * hB - wD * hD;\n }\n\n rayCast(output: RayCastOutput, input: RayCastInput): boolean {\n // From Real-time Collision Detection, p179.\n\n let tmin = -Infinity;\n let tmax = Infinity;\n\n const p = input.p1;\n const d = Vec2.sub(input.p2, input.p1);\n const absD = Vec2.abs(d);\n\n const normal = Vec2.zero();\n\n for (let f: \"x\" | \"y\" = \"x\"; f !== null; f = (f === \"x\" ? \"y\" : null)) {\n if (absD.x < EPSILON) {\n // Parallel.\n if (p[f] < this.lowerBound[f] || this.upperBound[f] < p[f]) {\n return false;\n }\n } else {\n const inv_d = 1.0 / d[f];\n let t1 = (this.lowerBound[f] - p[f]) * inv_d;\n let t2 = (this.upperBound[f] - p[f]) * inv_d;\n\n // Sign of the normal vector.\n let s = -1.0;\n\n if (t1 > t2) {\n const temp = t1;\n t1 = t2;\n t2 = temp;\n s = 1.0;\n }\n\n // Push the min up\n if (t1 > tmin) {\n normal.setZero();\n normal[f] = s;\n tmin = t1;\n }\n\n // Pull the max down\n tmax = math_min(tmax, t2);\n\n if (tmin > tmax) {\n return false;\n }\n }\n }\n\n // Does the ray start inside the box?\n // Does the ray intersect beyond the max fraction?\n if (tmin < 0.0 || input.maxFraction < tmin) {\n return false;\n }\n\n // Intersection.\n output.fraction = tmin;\n output.normal = normal;\n return true;\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static combinePoints(out: AABBValue, a: Vec2Value, b: Vec2Value): AABBValue {\n out.lowerBound.x = math_min(a.x, b.x);\n out.lowerBound.y = math_min(a.y, b.y);\n out.upperBound.x = math_max(a.x, b.x);\n out.upperBound.y = math_max(a.y, b.y);\n return out;\n }\n\n static combinedPerimeter(a: AABBValue, b: AABBValue) {\n const lx = math_min(a.lowerBound.x, b.lowerBound.x);\n const ly = math_min(a.lowerBound.y, b.lowerBound.y);\n const ux = math_max(a.upperBound.x, b.upperBound.x);\n const uy = math_max(a.upperBound.y, b.upperBound.y);\n return 2.0 * (ux - lx + uy - ly); \n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Tuning constants based on meters-kilograms-seconds (MKS) units.\n * \n * Some tolerances are absolute and some are relative. Absolute tolerances use MKS units.\n */\nexport class Settings {\n /**\n * You can use this to change the length scale used by your game.\n * \n * For example for inches you could use 39.4.\n */\n static lengthUnitsPerMeter = 1.0;\n \n // Collision\n /**\n * The maximum number of contact points between two convex shapes. Do not change\n * this value.\n */\n static maxManifoldPoints: number = 2;\n\n /**\n * The maximum number of vertices on a convex polygon. You cannot increase this\n * too much because BlockAllocator has a maximum object size.\n */\n static maxPolygonVertices: number = 12;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This allows proxies to move\n * by a small amount without triggering a tree adjustment. This is in meters.\n */\n static aabbExtension: number = 0.1;\n\n /**\n * This is used to fatten AABBs in the dynamic tree. This is used to predict the\n * future position based on the current displacement. This is a dimensionless\n * multiplier.\n */\n static aabbMultiplier: number = 2.0;\n\n /**\n * A small length used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static linearSlop: number = 0.005;\n\n /**\n * A small angle used as a collision and constraint tolerance. Usually it is\n * chosen to be numerically significant, but visually insignificant.\n */\n static angularSlop: number = (2.0 / 180.0 * math_PI);\n\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 static get polygonRadius(): number { return 2.0 * Settings.linearSlop; }\n\n /**\n * Maximum number of sub-steps per contact in continuous physics simulation.\n */\n static maxSubSteps: number = 8;\n\n // Dynamics\n\n /**\n * Maximum number of contacts to be handled to solve a TOI impact.\n */\n static maxTOIContacts: number = 32;\n\n /**\n * Maximum iterations to solve a TOI.\n */\n static maxTOIIterations: number = 20;\n\n /**\n * Maximum iterations to find Distance.\n */\n static maxDistanceIterations: number = 20;\n\n /**\n * A velocity threshold for elastic collisions. Any collision with a relative\n * linear velocity below this threshold will be treated as inelastic.\n */\n static velocityThreshold: number = 1.0;\n\n /**\n * The maximum linear position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxLinearCorrection: number = 0.2;\n\n /**\n * The maximum angular position correction used when solving constraints. This\n * helps to prevent overshoot.\n */\n static maxAngularCorrection: number = (8.0 / 180.0 * math_PI);\n\n /**\n * The maximum linear velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxTranslation: number = 2.0;\n\n /**\n * The maximum angular velocity of a body. This limit is very large and is used\n * to prevent numerical problems. You shouldn't need to adjust Settings.\n */\n static maxRotation: number = (0.5 * math_PI);\n\n /**\n * This scale factor controls how fast overlap is resolved. Ideally this would\n * be 1 so that overlap is removed in one time step. However using values close\n * to 1 often lead to overshoot.\n */\n static baumgarte: number = 0.2;\n static toiBaugarte: number = 0.75;\n\n // Sleep\n\n /**\n * The time that a body must be still before it will go to sleep.\n */\n static timeToSleep: number = 0.5;\n\n /**\n * A body cannot sleep if its linear velocity is above this tolerance.\n */\n static linearSleepTolerance: number = 0.01;\n\n /**\n * A body cannot sleep if its angular velocity is above this tolerance.\n */\n static angularSleepTolerance: number = (2.0 / 180.0 * math_PI);\n}\n\n/** @internal */\nexport class SettingsInternal {\n static get maxManifoldPoints() {\n return Settings.maxManifoldPoints;\n }\n static get maxPolygonVertices() {\n return Settings.maxPolygonVertices;\n }\n static get aabbExtension() {\n return Settings.aabbExtension * Settings.lengthUnitsPerMeter;\n }\n static get aabbMultiplier() {\n return Settings.aabbMultiplier;\n }\n static get linearSlop() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get linearSlopSquared() {\n return Settings.linearSlop * Settings.lengthUnitsPerMeter * Settings.linearSlop * Settings.lengthUnitsPerMeter;\n }\n static get angularSlop() {\n return Settings.angularSlop;\n }\n static get polygonRadius() {\n return 2.0 * Settings.linearSlop;\n }\n static get maxSubSteps() {\n return Settings.maxSubSteps;\n }\n static get maxTOIContacts() {\n return Settings.maxTOIContacts;\n }\n static get maxTOIIterations() {\n return Settings.maxTOIIterations;\n }\n static get maxDistanceIterations() {\n return Settings.maxDistanceIterations;\n }\n static get velocityThreshold() {\n return Settings.velocityThreshold * Settings.lengthUnitsPerMeter;\n }\n static get maxLinearCorrection() {\n return Settings.maxLinearCorrection * Settings.lengthUnitsPerMeter;\n }\n static get maxAngularCorrection() {\n return Settings.maxAngularCorrection;\n }\n static get maxTranslation() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxTranslationSquared() {\n return Settings.maxTranslation * Settings.lengthUnitsPerMeter * Settings.maxTranslation * Settings.lengthUnitsPerMeter;\n }\n static get maxRotation() {\n return Settings.maxRotation;\n }\n static get maxRotationSquared() {\n return Settings.maxRotation * Settings.maxRotation;\n }\n static get baumgarte() {\n return Settings.baumgarte;\n }\n static get toiBaugarte() {\n return Settings.toiBaugarte;\n }\n static get timeToSleep() {\n return Settings.timeToSleep;\n }\n static get linearSleepTolerance() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get linearSleepToleranceSqr() {\n return Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter * Settings.linearSleepTolerance * Settings.lengthUnitsPerMeter;\n }\n static get angularSleepTolerance() {\n return Settings.angularSleepTolerance;\n }\n static get angularSleepToleranceSqr() {\n return Settings.angularSleepTolerance * Settings.angularSleepTolerance;\n }\n}\n","/*\n * Copyright (c) 2016-2018 Ali Shakiba http://shakiba.me/planck.js\n *\n * This software is provided 'as-is', without any express or implied\n * warranty. In no event will the authors be held liable for any damages\n * arising from the use of this software.\n * Permission is granted to anyone to use this software for any purpose,\n * including commercial applications, and to alter it and redistribute it\n * freely, subject to the following restrictions:\n * 1. The origin of this software must not be misrepresented; you must not\n * claim that you wrote the original software. If you use this software\n * in a product, an acknowledgment in the product documentation would be\n * appreciated but is not required.\n * 2. Altered source versions must be plainly marked as such, and must not be\n * misrepresented as being the original software.\n * 3. This notice may not be removed or altered from any source distribution.\n */\n\n/** @internal */\nexport interface PoolOptions {\n max?: number,\n create?: () => T,\n /** Called when an object is being re-allocated. */\n allocate?: (item: T) => void,\n /** Called when an object is returned to pool. */\n release?: (item: T) => void,\n /** Called when an object is returned to the pool but will be disposed from pool. */\n dispose?: (item: T) => T,\n}\n\n/** @internal */\nexport class Pool {\n _list: T[] = [];\n _max: number = Infinity;\n\n _createFn: () => T;\n _hasCreateFn: boolean = false;\n _createCount: number = 0;\n\n _allocateFn: (item: T) => void;\n _hasAllocateFn: boolean = false;\n _allocateCount: number = 0;\n\n _releaseFn: (item: T) => void;\n _hasReleaseFn: boolean = false;\n _releaseCount: number = 0;\n\n _disposeFn: (item: T) => T;\n _hasDisposeFn: boolean = false;\n _disposeCount: number = 0;\n\n constructor(opts: PoolOptions) {\n this._list = [];\n this._max = opts.max || this._max;\n\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\n max(n?: number): number | Pool {\n if (typeof n === \"number\") {\n this._max = n;\n return this;\n }\n return this._max;\n }\n\n size(): number {\n return this._list.length;\n }\n\n allocate(): T {\n let item: T;\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 // tslint:disable-next-line:no-object-literal-type-assertion\n item = {} as T;\n }\n }\n this._allocateCount++;\n if (this._hasAllocateFn) {\n this._allocateFn(item);\n }\n return item;\n }\n\n release(item: T): void {\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\n toString(): string {\n return \" +\" + this._createCount + \" >\" + this._allocateCount + \" <\" + this._releaseCount + \" -\"\n + this._disposeCount + \" =\" + this._list.length + \"/\" + this._max;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Pool } from \"../util/Pool\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\nexport type DynamicTreeQueryCallback = (nodeId: number) => boolean;\n\n/**\n * A node in the dynamic tree. The client does not interact with this directly.\n */\nexport class TreeNode {\n id: number;\n /** Enlarged AABB */\n aabb: AABB = new AABB();\n userData: T = null;\n parent: TreeNode = null;\n child1: TreeNode = null;\n child2: TreeNode = null;\n /** 0: leaf, -1: free node */\n height: number = -1;\n\n constructor(id?: number) {\n this.id = id;\n }\n\n /** @internal */\n toString(): string {\n return this.id + \": \" + this.userData;\n }\n\n isLeaf(): boolean {\n return this.child1 == null;\n }\n}\n\n/** @internal */ const poolTreeNode = new Pool>({\n create(): TreeNode {\n return new TreeNode();\n },\n release(node: TreeNode) {\n node.userData = null;\n node.parent = null;\n node.child1 = null;\n node.child2 = null;\n node.height = -1;\n node.id = undefined;\n }\n});\n\n/**\n * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A\n * dynamic tree arranges data in a binary tree to accelerate queries such as\n * volume queries and ray casts. Leafs are proxies with an AABB. In the tree we\n * expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger\n * than the client object. This allows the client object to move by small\n * amounts without triggering a tree update.\n *\n * Nodes are pooled and relocatable, so we use node indices rather than\n * pointers.\n */\nexport class DynamicTree {\n m_root: TreeNode;\n m_lastProxyId: number;\n m_nodes: {\n [id: number]: TreeNode\n };\n\n constructor() {\n this.m_root = null;\n this.m_nodes = {};\n this.m_lastProxyId = 0;\n }\n\n /**\n * Get proxy user data.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getUserData(id: number): T {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.userData;\n }\n\n /**\n * Get the fat AABB for a node id.\n *\n * @return the proxy user data or 0 if the id is invalid.\n */\n getFatAABB(id: number): AABB {\n const node = this.m_nodes[id];\n _ASSERT && console.assert(!!node);\n return node.aabb;\n }\n\n allocateNode(): TreeNode {\n const node = poolTreeNode.allocate();\n node.id = ++this.m_lastProxyId;\n this.m_nodes[node.id] = node;\n return node;\n }\n\n freeNode(node: TreeNode): void {\n // tslint:disable-next-line:no-dynamic-delete\n delete this.m_nodes[node.id];\n poolTreeNode.release(node);\n }\n\n /**\n * Create a proxy in the tree as a leaf node. We return the index of the node\n * instead of a pointer so that we can grow the node pool.\n *\n * Create a proxy. Provide a tight fitting AABB and a userData pointer.\n */\n createProxy(aabb: AABBValue, userData: T): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n\n const node = this.allocateNode();\n\n node.aabb.set(aabb);\n\n // Fatten the aabb.\n AABB.extend(node.aabb, Settings.aabbExtension);\n\n node.userData = userData;\n node.height = 0;\n\n this.insertLeaf(node);\n\n return node.id;\n }\n\n /**\n * Destroy a proxy. This asserts if the id is invalid.\n */\n destroyProxy(id: number): void {\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n this.removeLeaf(node);\n this.freeNode(node);\n }\n\n /**\n * Move a proxy with a swepted AABB. If the proxy has moved outside of its\n * fattened AABB, then the proxy is removed from the tree and re-inserted.\n * Otherwise the function returns immediately.\n *\n * @param d Displacement\n *\n * @return true if the proxy was re-inserted.\n */\n moveProxy(id: number, aabb: AABBValue, d: Vec2Value): boolean {\n _ASSERT && console.assert(AABB.isValid(aabb));\n _ASSERT && console.assert(!d || Vec2.isValid(d));\n\n const node = this.m_nodes[id];\n\n _ASSERT && console.assert(!!node);\n _ASSERT && console.assert(node.isLeaf());\n\n if (node.aabb.contains(aabb)) {\n return false;\n }\n\n this.removeLeaf(node);\n\n node.aabb.set(aabb);\n\n // Extend AABB.\n aabb = node.aabb;\n AABB.extend(aabb, Settings.aabbExtension);\n\n // Predict AABB displacement.\n // const d = Vec2.mul(Settings.aabbMultiplier, displacement);\n\n if (d.x < 0.0) {\n aabb.lowerBound.x += d.x * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.x += d.x * Settings.aabbMultiplier;\n }\n\n if (d.y < 0.0) {\n aabb.lowerBound.y += d.y * Settings.aabbMultiplier;\n } else {\n aabb.upperBound.y += d.y * Settings.aabbMultiplier;\n }\n\n this.insertLeaf(node);\n\n return true;\n }\n\n insertLeaf(leaf: TreeNode): void {\n _ASSERT && console.assert(AABB.isValid(leaf.aabb));\n\n if (this.m_root == null) {\n this.m_root = leaf;\n this.m_root.parent = null;\n return;\n }\n\n // Find the best sibling for this node\n const leafAABB = leaf.aabb;\n let index = this.m_root;\n while (!index.isLeaf()) {\n const child1 = index.child1;\n const child2 = index.child2;\n\n const area = index.aabb.getPerimeter();\n\n const combinedArea = AABB.combinedPerimeter(index.aabb, leafAABB);\n\n // Cost of creating a new parent for this node and the new leaf\n const cost = 2.0 * combinedArea;\n\n // Minimum cost of pushing the leaf further down the tree\n const inheritanceCost = 2.0 * (combinedArea - area);\n\n // Cost of descending into child1\n const newArea1 = AABB.combinedPerimeter(leafAABB, child1.aabb);\n let cost1 = newArea1 + inheritanceCost;\n if (!child1.isLeaf()) {\n const oldArea = child1.aabb.getPerimeter();\n cost1 -= oldArea;\n }\n\n // Cost of descending into child2\n const newArea2 = AABB.combinedPerimeter(leafAABB, child2.aabb);\n let cost2 = newArea2 + inheritanceCost;\n if (!child2.isLeaf()) {\n const oldArea = child2.aabb.getPerimeter();\n cost2 -= oldArea;\n }\n\n // Descend according to the minimum cost.\n if (cost < cost1 && cost < cost2) {\n break;\n }\n\n // Descend\n if (cost1 < cost2) {\n index = child1;\n } else {\n index = child2;\n }\n }\n\n const sibling = index;\n\n // Create a new parent.\n const oldParent = sibling.parent;\n const 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\n if (oldParent != null) {\n // The sibling was not the root.\n if (oldParent.child1 === sibling) {\n oldParent.child1 = newParent;\n } else {\n oldParent.child2 = newParent;\n }\n\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n } else {\n // The sibling was the root.\n newParent.child1 = sibling;\n newParent.child2 = leaf;\n sibling.parent = newParent;\n leaf.parent = newParent;\n this.m_root = newParent;\n }\n\n // Walk back up the tree fixing heights and AABBs\n index = leaf.parent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n _ASSERT && console.assert(child1 != null);\n _ASSERT && console.assert(child2 != null);\n\n index.height = 1 + math_max(child1.height, child2.height);\n index.aabb.combine(child1.aabb, child2.aabb);\n\n index = index.parent;\n }\n\n // validate();\n }\n\n removeLeaf(leaf: TreeNode): void {\n if (leaf === this.m_root) {\n this.m_root = null;\n return;\n }\n\n const parent = leaf.parent;\n const grandParent = parent.parent;\n let sibling;\n if (parent.child1 === leaf) {\n sibling = parent.child2;\n } else {\n sibling = parent.child1;\n }\n\n if (grandParent != null) {\n // Destroy parent and connect sibling to grandParent.\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\n // Adjust ancestor bounds.\n let index = grandParent;\n while (index != null) {\n index = this.balance(index);\n\n const child1 = index.child1;\n const child2 = index.child2;\n\n index.aabb.combine(child1.aabb, child2.aabb);\n index.height = 1 + math_max(child1.height, child2.height);\n\n index = index.parent;\n }\n } else {\n this.m_root = sibling;\n sibling.parent = null;\n this.freeNode(parent);\n }\n\n // validate();\n }\n\n /**\n * Perform a left or right rotation if node A is imbalanced. Returns the new\n * root index.\n */\n balance(iA: TreeNode): TreeNode {\n _ASSERT && console.assert(iA != null);\n\n const A = iA;\n if (A.isLeaf() || A.height < 2) {\n return iA;\n }\n\n const B = A.child1;\n const C = A.child2;\n\n const balance = C.height - B.height;\n\n // Rotate C up\n if (balance > 1) {\n const F = C.child1;\n const G = C.child2;\n\n // Swap A and C\n C.child1 = A;\n C.parent = A.parent;\n A.parent = C;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(B.height, G.height);\n C.height = 1 + math_max(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\n A.height = 1 + math_max(B.height, F.height);\n C.height = 1 + math_max(A.height, G.height);\n }\n\n return C;\n }\n\n // Rotate B up\n if (balance < -1) {\n const D = B.child1;\n const E = B.child2;\n\n // Swap A and B\n B.child1 = A;\n B.parent = A.parent;\n A.parent = B;\n\n // A's old parent should point to 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\n // Rotate\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\n A.height = 1 + math_max(C.height, E.height);\n B.height = 1 + math_max(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\n A.height = 1 + math_max(C.height, D.height);\n B.height = 1 + math_max(A.height, E.height);\n }\n\n return B;\n }\n\n return A;\n }\n\n /**\n * Compute the height of the binary tree in O(N) time. Should not be called\n * often.\n */\n getHeight(): number {\n if (this.m_root == null) {\n return 0;\n }\n\n return this.m_root.height;\n }\n\n /**\n * Get the ratio of the sum of the node areas to the root area.\n */\n getAreaRatio(): number {\n if (this.m_root == null) {\n return 0.0;\n }\n\n const root = this.m_root;\n const rootArea = root.aabb.getPerimeter();\n\n let totalArea = 0.0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // Free node in pool\n continue;\n }\n\n totalArea += node.aabb.getPerimeter();\n }\n\n this.iteratorPool.release(it);\n\n return totalArea / rootArea;\n }\n\n /**\n * Compute the height of a sub-tree.\n */\n computeHeight(id?: number): number {\n let node;\n if (typeof id !== \"undefined\") {\n node = this.m_nodes[id];\n } else {\n node = this.m_root;\n }\n\n // _ASSERT && console.assert(0 <= id && id < this.m_nodeCapacity);\n\n if (node.isLeaf()) {\n return 0;\n }\n\n const height1 = this.computeHeight(node.child1.id);\n const height2 = this.computeHeight(node.child2.id);\n return 1 + math_max(height1, height2);\n }\n\n validateStructure(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n if (node === this.m_root) {\n _ASSERT && console.assert(node.parent == null);\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n _ASSERT && console.assert(child1.parent === node);\n _ASSERT && console.assert(child2.parent === node);\n\n this.validateStructure(child1);\n this.validateStructure(child2);\n }\n\n validateMetrics(node: TreeNode): void {\n if (node == null) {\n return;\n }\n\n const child1 = node.child1;\n const child2 = node.child2;\n\n if (node.isLeaf()) {\n _ASSERT && console.assert(child1 == null);\n _ASSERT && console.assert(child2 == null);\n _ASSERT && console.assert(node.height === 0);\n return;\n }\n\n // _ASSERT && console.assert(0 <= child1 && child1 < this.m_nodeCapacity);\n // _ASSERT && console.assert(0 <= child2 && child2 < this.m_nodeCapacity);\n\n const height1 = child1.height;\n const height2 = child2.height;\n const height = 1 + math_max(height1, height2);\n _ASSERT && console.assert(node.height === height);\n\n const aabb = new AABB();\n aabb.combine(child1.aabb, child2.aabb);\n\n _ASSERT && console.assert(AABB.areEqual(aabb, node.aabb));\n\n this.validateMetrics(child1);\n this.validateMetrics(child2);\n }\n\n /**\n * Validate this tree. For testing.\n */\n validate(): void {\n if (!_ASSERT) return;\n this.validateStructure(this.m_root);\n this.validateMetrics(this.m_root);\n\n console.assert(this.getHeight() === this.computeHeight());\n }\n\n /**\n * Get the maximum balance of an node in the tree. The balance is the difference\n * in height of the two children of a node.\n */\n getMaxBalance(): number {\n let maxBalance = 0;\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height <= 1) {\n continue;\n }\n\n _ASSERT && console.assert(!node.isLeaf());\n\n const balance = math_abs(node.child2.height - node.child1.height);\n maxBalance = math_max(maxBalance, balance);\n }\n this.iteratorPool.release(it);\n\n return maxBalance;\n }\n\n /**\n * Build an optimal tree. Very expensive. For testing.\n */\n rebuildBottomUp(): void {\n const nodes = [];\n let count = 0;\n\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n if (node.height < 0) {\n // free node in pool\n continue;\n }\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\n while (count > 1) {\n let minCost = Infinity;\n let iMin = -1;\n let jMin = -1;\n for (let i = 0; i < count; ++i) {\n const aabbi = nodes[i].aabb;\n for (let j = i + 1; j < count; ++j) {\n const aabbj = nodes[j].aabb;\n const cost = AABB.combinedPerimeter(aabbi, aabbj);\n if (cost < minCost) {\n iMin = i;\n jMin = j;\n minCost = cost;\n }\n }\n }\n\n const child1 = nodes[iMin];\n const child2 = nodes[jMin];\n\n const parent = this.allocateNode();\n parent.child1 = child1;\n parent.child2 = child2;\n parent.height = 1 + math_max(child1.height, child2.height);\n parent.aabb.combine(child1.aabb, child2.aabb);\n parent.parent = null;\n\n child1.parent = parent;\n child2.parent = parent;\n\n nodes[jMin] = nodes[count - 1];\n nodes[iMin] = parent;\n --count;\n }\n\n this.m_root = nodes[0];\n\n _ASSERT && this.validate();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n // Build array of leaves. Free the rest.\n let node;\n const it = this.iteratorPool.allocate().preorder(this.m_root);\n while (node = it.next()) {\n const 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\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query(aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void {\n _ASSERT && console.assert(typeof queryCallback === \"function\");\n const stack = this.stackPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, aabb)) {\n if (node.isLeaf()) {\n const 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\n this.stackPool.release(stack);\n }\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n // TODO: GC\n _ASSERT && console.assert(typeof rayCastCallback === \"function\");\n const p1 = input.p1;\n const p2 = input.p2;\n const r = Vec2.sub(p2, p1);\n _ASSERT && console.assert(r.lengthSquared() > 0.0);\n r.normalize();\n\n // v is perpendicular to the segment.\n const v = Vec2.crossNumVec2(1.0, r);\n const abs_v = Vec2.abs(v);\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n\n let maxFraction = input.maxFraction;\n\n // Build a bounding box for the segment.\n const segmentAABB = new AABB();\n let t = Vec2.combine((1 - maxFraction), p1, maxFraction, p2);\n segmentAABB.combinePoints(p1, t);\n\n const stack = this.stackPool.allocate();\n const subInput = this.inputPool.allocate();\n\n stack.push(this.m_root);\n while (stack.length > 0) {\n const node = stack.pop();\n if (node == null) {\n continue;\n }\n\n if (AABB.testOverlap(node.aabb, segmentAABB) === false) {\n continue;\n }\n\n // Separating axis for segment (Gino, p80).\n // |dot(v, p1 - c)| > dot(|v|, h)\n const c = node.aabb.getCenter();\n const h = node.aabb.getExtents();\n const separation = math_abs(Vec2.dot(v, Vec2.sub(p1, c))) - Vec2.dot(abs_v, h);\n if (separation > 0.0) {\n continue;\n }\n\n if (node.isLeaf()) {\n subInput.p1 = Vec2.clone(input.p1);\n subInput.p2 = Vec2.clone(input.p2);\n subInput.maxFraction = maxFraction;\n\n const value = rayCastCallback(subInput, node.id);\n\n if (value === 0.0) {\n // The client has terminated the ray cast.\n break;\n } else if (value > 0.0) {\n // update segment bounding box.\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\n private inputPool: Pool = new Pool({\n create(): RayCastInput {\n // tslint:disable-next-line:no-object-literal-type-assertion\n return {} as RayCastInput;\n },\n release(stack: RayCastInput): void {\n }\n });\n\n private stackPool: Pool>> = new Pool>>({\n create(): Array> {\n return [];\n },\n release(stack: Array>): void {\n stack.length = 0;\n }\n });\n\n private iteratorPool: Pool> = new Pool>({\n create(): Iterator {\n return new Iterator();\n },\n release(iterator: Iterator): void {\n iterator.close();\n }\n });\n\n}\n\n/** @internal */\nclass Iterator {\n parents: Array> = [];\n states: number[] = [];\n preorder(root: TreeNode): Iterator {\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 next(): TreeNode {\n while (this.parents.length > 0) {\n const i = this.parents.length - 1;\n const 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 close(): void {\n this.parents.length = 0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, AABBValue, RayCastCallback, RayCastInput } from \"./AABB\";\nimport { DynamicTree, DynamicTreeQueryCallback } from \"./DynamicTree\";\nimport { FixtureProxy } from \"../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/**\n * The broad-phase wraps and extends a dynamic-tree to keep track of moved\n * objects and query them on update.\n */\nexport class BroadPhase {\n m_tree: DynamicTree = new DynamicTree();\n m_moveBuffer: number[] = [];\n\n m_callback: (userDataA: any, userDataB: any) => void;\n m_queryProxyId: number;\n\n /**\n * Get user data from a proxy. Returns null if the id is invalid.\n */\n getUserData(proxyId: number): FixtureProxy {\n return this.m_tree.getUserData(proxyId);\n }\n\n /**\n * Test overlap of fat AABBs.\n */\n testOverlap(proxyIdA: number, proxyIdB: number): boolean {\n const aabbA = this.m_tree.getFatAABB(proxyIdA);\n const aabbB = this.m_tree.getFatAABB(proxyIdB);\n return AABB.testOverlap(aabbA, aabbB);\n }\n\n /**\n * Get the fat AABB for a proxy.\n */\n getFatAABB(proxyId: number): AABB {\n return this.m_tree.getFatAABB(proxyId);\n }\n\n /**\n * Get the number of proxies.\n */\n getProxyCount(): number {\n return this.m_moveBuffer.length;\n }\n\n /**\n * Get the height of the embedded tree.\n */\n getTreeHeight(): number {\n return this.m_tree.getHeight();\n }\n\n /**\n * Get the balance (integer) of the embedded tree.\n */\n getTreeBalance(): number {\n return this.m_tree.getMaxBalance();\n }\n\n /**\n * Get the quality metric of the embedded tree.\n */\n getTreeQuality(): number {\n return this.m_tree.getAreaRatio();\n }\n\n /**\n * Query an AABB for overlapping proxies. The callback class is called for each\n * proxy that overlaps the supplied AABB.\n */\n query = (aabb: AABBValue, queryCallback: DynamicTreeQueryCallback): void => {\n this.m_tree.query(aabb, queryCallback);\n };\n\n /**\n * Ray-cast against the proxies in the tree. This relies on the callback to\n * perform a exact ray-cast in the case were the proxy contains a shape. The\n * callback also performs the any collision filtering. This has performance\n * roughly equal to k * log(n), where k is the number of collisions and n is the\n * number of proxies in the tree.\n *\n * @param input The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`.\n * @param rayCastCallback A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast.\n */\n rayCast(input: RayCastInput, rayCastCallback: RayCastCallback): void {\n this.m_tree.rayCast(input, rayCastCallback);\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_tree.shiftOrigin(newOrigin);\n }\n\n /**\n * Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs\n * is called.\n */\n createProxy(aabb: AABBValue, userData: FixtureProxy): number {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const proxyId = this.m_tree.createProxy(aabb, userData);\n this.bufferMove(proxyId);\n return proxyId;\n }\n\n /**\n * Destroy a proxy. It is up to the client to remove any pairs.\n */\n destroyProxy(proxyId: number): void {\n this.unbufferMove(proxyId);\n this.m_tree.destroyProxy(proxyId);\n }\n\n /**\n * Call moveProxy as many times as you like, then when you are done call\n * UpdatePairs to finalized the proxy pairs (for your time step).\n */\n moveProxy(proxyId: number, aabb: AABB, displacement: Vec2Value): void {\n _ASSERT && console.assert(AABB.isValid(aabb));\n const changed = this.m_tree.moveProxy(proxyId, aabb, displacement);\n if (changed) {\n this.bufferMove(proxyId);\n }\n }\n\n /**\n * Call to trigger a re-processing of it's pairs on the next call to\n * UpdatePairs.\n */\n touchProxy(proxyId: number): void {\n this.bufferMove(proxyId);\n }\n\n bufferMove(proxyId: number): void {\n this.m_moveBuffer.push(proxyId);\n }\n\n unbufferMove(proxyId: number): void {\n for (let 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\n /**\n * Update the pairs. This results in pair callbacks. This can only add pairs.\n */\n updatePairs(addPairCallback: (userDataA: FixtureProxy, userDataB: FixtureProxy) => void): void {\n _ASSERT && console.assert(typeof addPairCallback === \"function\");\n this.m_callback = addPairCallback;\n\n // Perform tree queries for all moving proxies.\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\n // We have to query the tree with the fat AABB so that\n // we don't fail to create a pair that may touch later.\n const fatAABB = this.m_tree.getFatAABB(this.m_queryProxyId);\n\n // Query tree, create pairs and add them pair buffer.\n this.m_tree.query(fatAABB, this.queryCallback);\n }\n\n // Try to keep the tree balanced.\n // this.m_tree.rebalance(4);\n }\n\n queryCallback = (proxyId: number): boolean => {\n // A proxy cannot form a pair with itself.\n if (proxyId === this.m_queryProxyId) {\n return true;\n }\n\n const proxyIdA = math_min(proxyId, this.m_queryProxyId);\n const proxyIdB = math_max(proxyId, this.m_queryProxyId);\n\n // TODO: Skip any duplicate pairs.\n\n const userDataA = this.m_tree.getUserData(proxyIdA);\n const userDataB = this.m_tree.getUserData(proxyIdB);\n\n // Send the pairs back to the client.\n this.m_callback(userDataA, userDataB);\n\n return true;\n };\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2023 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\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_sqrt = Math.sqrt;\n\n\nimport { RotValue } from \"./Rot\";\nimport { TransformValue } from \"./Transform\";\nimport { Vec2Value } from \"./Vec2\";\nimport { Vec3Value } from \"./Vec3\";\n\nexport function vec2(x: number, y: number): Vec2Value {\n return { x, y };\n}\n\nexport function vec3(x: number, y: number, z: number): Vec3Value {\n return { x, y, z };\n}\n\nexport function rotation(angle: number): RotValue {\n return { s: math_sin(angle), c: math_cos(angle) };\n}\n\nexport function setVec2(out: Vec2Value, x: number, y: number): Vec2Value {\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function copyVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = w.x;\n out.y = w.y;\n return out;\n}\n\nexport function zeroVec2(out: Vec2Value): Vec2Value {\n out.x = 0;\n out.y = 0;\n return out;\n}\n\nexport function negVec2(out: Vec2Value): Vec2Value {\n out.x = -out.x;\n out.y = -out.y;\n return out;\n}\n\nexport function plusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x += w.x;\n out.y += w.y;\n return out;\n}\n\nexport function addVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x + w.x;\n out.y = v.x + w.y;\n return out;\n}\n\nexport function minusVec2(out: Vec2Value, w: Vec2Value): Vec2Value {\n out.x -= w.x;\n out.y -= w.y;\n return out;\n}\n\nexport function subVec2(out: Vec2Value, v: Vec2Value, w: Vec2Value): Vec2Value {\n out.x = v.x - w.x;\n out.y = v.y - w.y;\n return out;\n}\n\nexport function mulVec2(out: Vec2Value, m: number): Vec2Value {\n out.x *= m;\n out.y *= m;\n return out;\n}\n\nexport function scaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x = m * w.x;\n out.y = m * w.y;\n return out;\n}\n\nexport function plusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x += m * w.x;\n out.y += m * w.y;\n return out;\n}\n\nexport function minusScaleVec2(out: Vec2Value, m: number, w: Vec2Value): Vec2Value {\n out.x -= m * w.x;\n out.y -= m * w.y;\n return out;\n}\n\nexport function combine2Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x;\n out.y = am * a.y + bm * b.y;\n return out;\n}\n\nexport function combine3Vec2(out: Vec2Value, am: number, a: Vec2Value, bm: number, b: Vec2Value, cm: number, c: Vec2Value): Vec2Value {\n out.x = am * a.x + bm * b.x + cm * c.x;\n out.y = am * a.y + bm * b.y + cm * c.y;\n return out;\n}\n\nexport function normalizeVec2Length(out: Vec2Value): number {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length !== 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return length;\n}\n\nexport function normalizeVec2(out: Vec2Value): Vec2Value {\n const length = math_sqrt(out.x * out.x + out.y * out.y);\n if (length > 0) {\n const invLength = 1 / length;\n out.x *= invLength;\n out.y *= invLength;\n }\n return out;\n}\n\nexport function crossVec2Num(out: Vec2Value, v: Vec2Value, w: number): Vec2Value {\n const x = w * v.y;\n const y = -w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossNumVec2(out: Vec2Value, w: number, v: Vec2Value): Vec2Value {\n const x = -w * v.y;\n const y = w * v.x;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function crossVec2Vec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.y - a.y * b.x;\n}\n\nexport function dotVec2(a: Vec2Value, b: Vec2Value): number {\n return a.x * b.x + a.y * b.y;\n}\n\nexport function lengthVec2(a: Vec2Value): number {\n return math_sqrt(a.x * a.x + a.y * a.y);\n}\n\nexport function lengthSqrVec2(a: Vec2Value): number {\n return a.x * a.x + a.y * a.y;\n}\n\nexport function distVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return math_sqrt(dx * dx + dy * dy);\n}\n\nexport function distSqrVec2(a: Vec2Value, b: Vec2Value): number {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n return dx * dx + dy * dy;\n}\n\nexport function dotVec3(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n}\n\nexport function setRotAngle(out: RotValue, a: number): RotValue {\n out.c = math_cos(a);\n out.s = math_sin(a);\n return out;\n}\n\nexport function rotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n out.x = q.c * v.x - q.s * v.y;\n out.y = q.s * v.x + q.c * v.y;\n return out;\n}\n\nexport function derotVec2(out: Vec2Value, q: RotValue, v: Vec2Value): Vec2Value {\n const x = q.c * v.x + q.s * v.y;\n const y = -q.s * v.x + q.c * v.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function rerotVec2(out: Vec2Value, before: RotValue, after: RotValue, v: Vec2Value): Vec2Value {\n const x0 = before.c * v.x + before.s * v.y;\n const y0 = -before.s * v.x + before.c * v.y;\n const x = after.c * x0 - after.s * y0;\n const y = after.s * x0 + after.c * y0;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function transform(x: number, y: number, a: number): TransformValue {\n return { p: vec2(x, y), q: rotation(a) };\n}\n\nexport function copyTransform(out: TransformValue, transform: TransformValue): TransformValue {\n out.p.x = transform.p.x;\n out.p.y = transform.p.y;\n out.q.s = transform.q.s;\n out.q.c = transform.q.c;\n return out;\n}\n\nexport function transformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const x = xf.q.c * v.x - xf.q.s * v.y + xf.p.x;\n const y = xf.q.s * v.x + xf.q.c * v.y + xf.p.y;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformVec2(out: Vec2Value, xf: TransformValue, v: Vec2Value): Vec2Value {\n const px = v.x - xf.p.x;\n const py = v.y - xf.p.y;\n const x = (xf.q.c * px + xf.q.s * py);\n const y = (-xf.q.s * px + xf.q.c * py);\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function retransformVec2(out: Vec2Value, from: TransformValue, to: TransformValue, v: Vec2Value): Vec2Value {\n const x0 = from.q.c * v.x - from.q.s * v.y + from.p.x;\n const y0 = from.q.s * v.x + from.q.c * v.y + from.p.y;\n const px = x0 - to.p.x;\n const py = y0 - to.p.y;\n const x = to.q.c * px + to.q.s * py;\n const y = -to.q.s * px + to.q.c * py;\n out.x = x;\n out.y = y;\n return out;\n}\n\nexport function detransformTransform(out: TransformValue, a: TransformValue, b: TransformValue): TransformValue {\n const c = a.q.c * b.q.c + a.q.s * b.q.s;\n const s = a.q.c * b.q.s - a.q.s * b.q.c;\n const x = a.q.c * (b.p.x - a.p.x) + a.q.s * (b.p.y - a.p.y);\n const y = -a.q.s * (b.p.x - a.p.x) + a.q.c * (b.p.y - a.p.y);\n out.q.c = c;\n out.q.s = s;\n out.p.x = x;\n out.p.y = y;\n return out;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n/** @internal */ const math_atan2 = Math.atan2;\n\nexport interface RotValue {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n}\n\ndeclare module \"./Rot\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Rot(angle: number): Rot;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Rot(obj: RotValue): Rot;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Rot(): Rot;\n}\n\n/** Rotation */\n// @ts-expect-error\nexport class Rot {\n /** sin(angle) */\n s: number;\n /** cos(angle) */\n c: number;\n\n /** Initialize from an angle in radians. */\n constructor(angle?: number | RotValue) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Rot)) {\n return new Rot(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\n /** @hidden */\n static neo(angle: number): Rot {\n const obj = Object.create(Rot.prototype);\n obj.setAngle(angle);\n return obj;\n }\n\n static clone(rot: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n const obj = Object.create(Rot.prototype);\n obj.s = rot.s;\n obj.c = rot.c;\n return obj;\n }\n\n static identity(): Rot {\n const obj = Object.create(Rot.prototype);\n obj.s = 0.0;\n obj.c = 1.0;\n return obj;\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Number.isFinite(obj.s) && Number.isFinite(obj.c);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Rot.isValid(o), \"Invalid Rot!\", o);\n }\n\n /** Set to the identity rotation. */\n setIdentity(): void {\n this.s = 0.0;\n this.c = 1.0;\n }\n\n set(angle: number | RotValue): void {\n if (typeof angle === \"object\") {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n\n } else {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n }\n\n setRot(angle: RotValue): void {\n _ASSERT && Rot.assert(angle);\n this.s = angle.s;\n this.c = angle.c;\n }\n\n /** Set using an angle in radians. */\n setAngle(angle: number): void {\n _ASSERT && console.assert(Number.isFinite(angle));\n // TODO_ERIN optimize\n this.s = math_sin(angle);\n this.c = math_cos(angle);\n }\n\n /** Get the angle in radians. */\n getAngle(): number {\n return math_atan2(this.s, this.c);\n }\n\n /** Get the x-axis. */\n getXAxis(): Vec2 {\n return Vec2.neo(this.c, this.s);\n }\n\n /** Get the y-axis. */\n getYAxis(): Vec2 {\n return Vec2.neo(-this.s, this.c);\n }\n\n /** Multiply two rotations: q * r */\n static mul(rot: RotValue, m: RotValue): Rot;\n /** Rotate a vector */\n static mul(rot: RotValue, m: Vec2Value): Vec2;\n static mul(rot, m) {\n _ASSERT && Rot.assert(rot);\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Multiply two rotations: q * r */\n static mulRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Rot.assert(m);\n // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]\n // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]\n // s = qs * rc + qc * rs\n // c = qc * rc - qs * rs\n const qr = Rot.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\n /** Rotate a vector */\n static mulVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Rot.assert(rot);\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x - rot.s * m.y, rot.s * m.x + rot.c * m.y);\n }\n\n static mulSub(rot: RotValue, v: Vec2Value, w: Vec2Value): Vec2 {\n const x = rot.c * (v.x - w.x) - rot.s * (v.y - w.y);\n const y = rot.s * (v.x - w.x) + rot.c * (v.y - w.y);\n return Vec2.neo(x, y);\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulT(rot: RotValue, m: RotValue): Rot;\n /** Inverse rotate a vector */\n static mulT(rot: RotValue, m: Vec2Value): Vec2;\n static mulT(rot, m) {\n if (\"c\" in m && \"s\" in m) {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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 } else if (\"x\" in m && \"y\" in m) {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n }\n\n /** Transpose multiply two rotations: qT * r */\n static mulTRot(rot: RotValue, m: RotValue): Rot {\n _ASSERT && Rot.assert(m);\n // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]\n // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]\n // s = qc * rs - qs * rc\n // c = qc * rc + qs * rs\n const qr = Rot.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\n /** Inverse rotate a vector */\n static mulTVec2(rot: RotValue, m: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(m);\n return Vec2.neo(rot.c * m.x + rot.s * m.y, -rot.s * m.x + rot.c * m.y);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"./Matrix\";\nimport { mod } from \"./Math\";\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { TransformValue } from \"./Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_atan2 = Math.atan2;\n/** @internal */ const math_PI = Math.PI;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * This describes the motion of a body/shape for TOI computation. Shapes are\n * defined with respect to the body origin, which may not coincide with the\n * center of mass. However, to support dynamics we must interpolate the center\n * of mass position.\n */\nexport class Sweep {\n /** Local center of mass position */\n localCenter = Vec2.zero();\n\n /** World center position */\n c = Vec2.zero();\n\n /** World angle */\n a = 0;\n\n /** Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. */\n alpha0 = 0;\n\n c0 = Vec2.zero();\n a0 = 0;\n\n /** @internal */\n recycle() {\n matrix.zeroVec2(this.localCenter);\n matrix.zeroVec2(this.c);\n this.a = 0;\n this.alpha0 = 0;\n matrix.zeroVec2(this.c0);\n this.a0 = 0;\n }\n\n setTransform(xf: TransformValue): void {\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n\n this.a = this.a0 = math_atan2(xf.q.s, xf.q.c);\n }\n\n setLocalCenter(localCenter: Vec2Value, xf: TransformValue): void {\n matrix.copyVec2(this.localCenter, localCenter);\n\n matrix.transformVec2(temp, xf, this.localCenter);\n matrix.copyVec2(this.c, temp);\n matrix.copyVec2(this.c0, temp);\n }\n\n /**\n * Get the interpolated transform at a specific time.\n *\n * @param xf\n * @param beta A factor in [0,1], where 0 indicates alpha0\n */\n getTransform(xf: TransformValue, beta: number = 0): void {\n matrix.setRotAngle(xf.q, (1.0 - beta) * this.a0 + beta * this.a);\n matrix.combine2Vec2(xf.p, (1.0 - beta), this.c0, beta, this.c);\n\n // shift to origin\n matrix.minusVec2(xf.p, matrix.rotVec2(temp, xf.q, this.localCenter));\n }\n\n /**\n * Advance the sweep forward, yielding a new initial state.\n *\n * @param alpha The new initial time\n */\n advance(alpha: number): void {\n _ASSERT && console.assert(this.alpha0 < 1.0);\n const beta = (alpha - this.alpha0) / (1.0 - this.alpha0);\n matrix.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\n forward(): void {\n this.a0 = this.a;\n matrix.copyVec2(this.c0, this.c);\n }\n\n /**\n * normalize the angles in radians to be between -pi and pi.\n */\n normalize(): void {\n const a0 = mod(this.a0, -math_PI, +math_PI);\n this.a -= this.a0 - a0;\n this.a0 = a0;\n }\n\n set(that: Sweep): void {\n matrix.copyVec2(this.localCenter, that.localCenter);\n matrix.copyVec2(this.c, that.c);\n this.a = that.a;\n this.alpha0 = that.alpha0;\n matrix.copyVec2(this.c0, that.c0);\n this.a0 = that.a0;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Rot, RotValue } from \"./Rot\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport type TransformValue = {\n p: Vec2Value;\n q: RotValue;\n};\n\ndeclare module \"./Transform\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Transform(position?: Vec2Value, rotation?: number): Transform;\n}\n\n/**\n * A transform contains translation and rotation. It is used to represent the\n * position and orientation of rigid frames. Initialize using a position vector\n * and a rotation.\n */\n// @ts-expect-error\nexport class Transform {\n /** position */\n p: Vec2;\n\n /** rotation */\n q: Rot;\n\n constructor(position?: Vec2Value, rotation?: number) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Transform)) {\n return new Transform(position, rotation);\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 rotation !== \"undefined\") {\n this.q.setAngle(rotation);\n }\n }\n\n static clone(xf: Transform): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(xf.p);\n obj.q = Rot.clone(xf.q);\n return obj;\n }\n\n /** @hidden */\n static neo(position: Vec2Value, rotation: Rot): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.clone(position);\n obj.q = Rot.clone(rotation);\n return obj;\n }\n\n static identity(): Transform {\n const obj = Object.create(Transform.prototype);\n obj.p = Vec2.zero();\n obj.q = Rot.identity();\n return obj;\n }\n\n /** Set this to the identity transform */\n setIdentity(): void {\n this.p.setZero();\n this.q.setIdentity();\n }\n\n /** Set position and angle */\n set(position: Vec2Value, rotation: number): void;\n /** Copy from another transform */\n set(xf: TransformValue): void;\n set(a: any, b?: any) {\n if (typeof b === \"undefined\") {\n this.p.set(a.p);\n this.q.set(a.q);\n } else {\n this.p.set(a);\n this.q.set(b);\n }\n }\n\n /** Set position and angle */\n setNum(position: Vec2Value, rotation: number) {\n this.p.setVec2(position);\n this.q.setAngle(rotation);\n }\n\n setTransform(xf: TransformValue): void {\n this.p.setVec2(xf.p);\n this.q.setRot(xf.q);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.p) && Rot.isValid(obj.q);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Transform.isValid(o), \"Invalid Transform!\", o);\n }\n\n static mul(a: TransformValue, b: Vec2Value): Vec2;\n static mul(a: TransformValue, b: TransformValue): Transform;\n // static mul(a: Transform, b: Vec2Value[]): Vec2[];\n // static mul(a: Transform, b: Transform[]): Transform[];\n static mul(a, b) {\n if (Array.isArray(b)) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n\n } else if (\"x\" in b && \"y\" in b) {\n return Transform.mulVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulXf(a, b);\n }\n }\n\n static mulAll(a: Transform, b: Vec2Value[]): Vec2[];\n static mulAll(a: Transform, b: Transform[]): Transform[];\n static mulAll(a: TransformValue, b) {\n _ASSERT && Transform.assert(a);\n const arr = [];\n for (let i = 0; i < b.length; i++) {\n arr[i] = Transform.mul(a, b[i]);\n }\n return arr;\n }\n\n /** @hidden @deprecated */\n static mulFn(a: TransformValue) {\n // todo: this was used in examples, remove in the future\n _ASSERT && Transform.assert(a);\n return function(b: Vec2Value): Vec2 {\n return Transform.mul(a, b);\n };\n }\n\n static mulVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = (a.q.c * b.x - a.q.s * b.y) + a.p.x;\n const y = (a.q.s * b.x + a.q.c * b.y) + a.p.y;\n return Vec2.neo(x, y);\n }\n\n static mulXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p\n // = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p\n const xf = Transform.identity();\n xf.q = Rot.mulRot(a.q, b.q);\n xf.p = Vec2.add(Rot.mulVec2(a.q, b.p), a.p);\n return xf;\n }\n\n static mulT(a: TransformValue, b: Vec2Value): Vec2;\n static mulT(a: TransformValue, b: TransformValue): Transform;\n static mulT(a, b) {\n if (\"x\" in b && \"y\" in b) {\n return Transform.mulTVec2(a, b);\n\n } else if (\"p\" in b && \"q\" in b) {\n return Transform.mulTXf(a, b);\n }\n }\n\n static mulTVec2(a: TransformValue, b: Vec2Value): Vec2 {\n _ASSERT && Transform.assert(a);\n _ASSERT && Vec2.assert(b);\n const px = b.x - a.p.x;\n const py = b.y - a.p.y;\n const x = (a.q.c * px + a.q.s * py);\n const y = (-a.q.s * px + a.q.c * py);\n return Vec2.neo(x, y);\n }\n\n static mulTXf(a: TransformValue, b: TransformValue): Transform {\n _ASSERT && Transform.assert(a);\n _ASSERT && Transform.assert(b);\n // v2 = A.q' * (B.q * v1 + B.p - A.p)\n // = A.q' * B.q * v1 + A.q' * (B.p - A.p)\n const xf = Transform.identity();\n xf.q.setRot(Rot.mulTRot(a.q, b.q));\n xf.p.setVec2(Rot.mulTVec2(a.q, Vec2.sub(b.p, a.p)));\n return xf;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2 } from \"../common/Vec2\";\n\nexport class Velocity {\n /** linear */\n v = Vec2.zero();\n\n /** angular */\n w = 0;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const math_sin = Math.sin;\n/** @internal */ const math_cos = Math.cos;\n\n\nexport class Position {\n /** location */\n c = Vec2.zero();\n\n /** angle */\n a = 0;\n\n // todo: cache sin/cos\n getTransform(xf: TransformValue, p: Vec2Value): TransformValue {\n // xf.q = rotation(this.a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(this.a);\n xf.q.s = math_sin(this.a);\n xf.p.x = this.c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = this.c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n }\n}\n\nexport function getTransform(xf: TransformValue, p: Vec2Value, c: Vec2Value, a: number): TransformValue {\n // xf.q = rotation(a);\n // xf.p = this.c - xf.q * p\n xf.q.c = math_cos(a);\n xf.q.s = math_sin(a);\n xf.p.x = c.x - (xf.q.c * p.x - xf.q.s * p.y);\n xf.p.y = c.y - (xf.q.s * p.x + xf.q.c * p.y);\n return xf;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { MassData } from \"../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"./AABB\";\nimport { DistanceProxy } from \"./Distance\";\nimport type { Transform, TransformValue } from \"../common/Transform\";\nimport type { Vec2Value } from \"../common/Vec2\";\nimport { Style } from \"../util/Testbed\";\n\n// todo make shape an interface\n\n/**\n * A shape is used for collision detection. You can create a shape however you\n * like. Shapes used for simulation in World are created automatically when a\n * Fixture is created. Shapes may encapsulate one or more child shapes.\n */\nexport abstract class Shape {\n /** @hidden */ m_type: ShapeType;\n\n /**\n * @hidden\n * Radius of a shape. For polygonal shapes this must be b2_polygonRadius.\n * There is no support for making rounded polygons.\n */\n m_radius: number;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @hidden */\n abstract _reset(): void;\n\n static isValid(obj: any): boolean {\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\n abstract getRadius(): number;\n\n /**\n * Get the type of this shape. You can use this to down cast to the concrete\n * shape.\n *\n * @return the shape type.\n */\n abstract getType(): ShapeType;\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n abstract _clone(): Shape;\n\n /**\n * Get the number of child primitives.\n */\n abstract getChildCount(): number;\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n abstract testPoint(xf: TransformValue, p: Vec2Value): boolean;\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n abstract rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean;\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n abstract computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void;\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n abstract computeMass(massData: MassData, density?: number): void;\n\n abstract computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void;\n\n}\n\nexport type ShapeType = \"circle\" | \"edge\" | \"polygon\" | \"chain\";\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { AABB, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Shape, ShapeType } from \"../collision/Shape\";\nimport { Body, MassData } from \"./Body\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const synchronize_aabb1 = new AABB();\n/** @internal */ const synchronize_aabb2 = new AABB();\n/** @internal */ const displacement = matrix.vec2(0, 0);\n\n/**\n * A fixture definition is used to create a fixture. This class defines an\n * abstract fixture definition. You can reuse fixture definitions safely.\n */\nexport interface FixtureOpt {\n userData?: unknown;\n /**\n * The friction coefficient, usually in the range [0,1]\n */\n friction?: number;\n /**\n * The restitution (elasticity) usually in the range [0,1]\n */\n restitution?: number;\n /**\n * The density, usually in kg/m^2\n */\n density?: number;\n /**\n * A sensor shape collects contact information but never generates a collision response.\n */\n isSensor?: boolean;\n /**\n * Zero, positive or negative collision group.\n * Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide.\n */\n filterGroupIndex?: number;\n /**\n * Collision category bit or bits that this fixture belongs to.\n * If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa.\n */\n filterCategoryBits?: number;\n /**\n * Collision category bit or bits that this fixture accept for collision.\n */\n filterMaskBits?: number;\n}\n\nexport interface FixtureDef extends FixtureOpt {\n shape: Shape;\n}\n\n/** @internal */ const FixtureDefDefault: FixtureOpt = {\n userData : null,\n friction : 0.2,\n restitution : 0.0,\n density : 0.0,\n isSensor : false,\n\n filterGroupIndex : 0,\n filterCategoryBits : 0x0001,\n filterMaskBits : 0xFFFF\n};\n\n/**\n * This proxy is used internally to connect shape children to the broad-phase.\n */\nexport class FixtureProxy {\n aabb: AABB;\n fixture: Fixture;\n childIndex: number;\n proxyId: number;\n constructor(fixture: Fixture, childIndex: number) {\n this.aabb = new AABB();\n this.fixture = fixture;\n this.childIndex = childIndex;\n this.proxyId;\n }\n}\n\n/**\n * A fixture is used to attach a shape to a body for collision detection. A\n * fixture inherits its transform from its parent. Fixtures hold additional\n * non-geometric data such as friction, collision filters, etc.\n *\n * To create a new Fixture use {@link Body.createFixture}.\n */\nexport class Fixture {\n /** @internal */ m_body: Body;\n /** @internal */ m_friction: number;\n /** @internal */ m_restitution: number;\n /** @internal */ m_density: number;\n /** @internal */ m_isSensor: boolean;\n /** @internal */ m_filterGroupIndex: number;\n /** @internal */ m_filterCategoryBits: number;\n /** @internal */ m_filterMaskBits: number;\n /** @internal */ m_shape: Shape;\n /** @internal */ m_next: Fixture | null;\n /** @internal */ m_proxies: FixtureProxy[];\n // 0 indicates inactive state, this is not the same as m_proxies.length\n /** @internal */ m_proxyCount: number;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(body: Body, def: FixtureDef);\n constructor(body: Body, shape: Shape, def?: FixtureOpt);\n constructor(body: Body, shape: Shape, density?: number);\n /** @internal */\n constructor(body: Body, shape?, def?) {\n if (shape.shape) {\n def = shape;\n shape = shape.shape;\n\n } else if (typeof def === \"number\") {\n def = {density : def};\n }\n\n def = options(def, FixtureDefDefault);\n\n this.m_body = body;\n\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\n this.m_filterGroupIndex = def.filterGroupIndex;\n this.m_filterCategoryBits = def.filterCategoryBits;\n this.m_filterMaskBits = def.filterMaskBits;\n\n // TODO validate shape\n this.m_shape = shape; // .clone();\n\n this.m_next = null;\n\n this.m_proxies = [];\n this.m_proxyCount = 0;\n\n // fixture proxies are created here,\n // but they are activate in when a fixture is added to body\n const childCount = this.m_shape.getChildCount();\n for (let i = 0; i < childCount; ++i) {\n this.m_proxies[i] = new FixtureProxy(this, i);\n }\n\n this.m_userData = def.userData;\n }\n\n /** @hidden Re-setup fixture. */\n _reset(): void {\n const body = this.getBody();\n const broadPhase = body.m_world.m_broadPhase;\n this.destroyProxies(broadPhase);\n if (this.m_shape._reset) {\n this.m_shape._reset();\n }\n const childCount = this.m_shape.getChildCount();\n for (let 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\n /** @internal */\n _serialize(): object {\n return {\n friction: this.m_friction,\n restitution: this.m_restitution,\n density: this.m_density,\n isSensor: this.m_isSensor,\n\n filterGroupIndex: this.m_filterGroupIndex,\n filterCategoryBits: this.m_filterCategoryBits,\n filterMaskBits: this.m_filterMaskBits,\n\n shape: this.m_shape,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, body: any, restore: any): Fixture {\n const shape = restore(Shape, data.shape);\n const fixture = shape && new Fixture(body, shape, data);\n return fixture;\n }\n\n /**\n * Get the type of the child shape. You can use this to down cast to the\n * concrete shape.\n */\n getType(): ShapeType {\n return this.m_shape.m_type;\n }\n\n /**\n * Get the child shape. You can modify the child shape, however you should not\n * change the number of vertices because this will crash some collision caching\n * mechanisms. Manipulating the shape may lead to non-physical behavior.\n */\n getShape(): Shape {\n return this.m_shape;\n }\n\n /**\n * A sensor shape collects contact information but never generates a collision\n * response.\n */\n isSensor(): boolean {\n return this.m_isSensor;\n }\n\n /**\n * Set if this fixture is a sensor.\n */\n setSensor(sensor: boolean): void {\n if (sensor != this.m_isSensor) {\n this.m_body.setAwake(true);\n this.m_isSensor = sensor;\n }\n }\n\n // /**\n // * Get the contact filtering data.\n // */\n // getFilterData() {\n // return this.m_filter;\n // }\n\n /**\n * Get the user data that was assigned in the fixture definition. Use this to\n * store your application specific data.\n */\n getUserData(): unknown {\n return this.m_userData;\n }\n\n /**\n * Set the user data. Use this to store your application specific data.\n */\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get the parent body of this fixture. This is null if the fixture is not\n * attached.\n */\n getBody(): Body {\n return this.m_body;\n }\n\n /**\n * Get the next fixture in the parent body's fixture list.\n */\n getNext(): Fixture | null {\n return this.m_next;\n }\n\n /**\n * Get the density of this fixture.\n */\n getDensity(): number {\n return this.m_density;\n }\n\n /**\n * Set the density of this fixture. This will _not_ automatically adjust the\n * mass of the body. You must call Body.resetMassData to update the body's mass.\n */\n setDensity(density: number): void {\n _ASSERT && console.assert(Number.isFinite(density) && density >= 0.0);\n this.m_density = density;\n }\n\n /**\n * Get the coefficient of friction, usually in the range [0,1].\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Set the coefficient of friction. This will not change the friction of\n * existing contacts.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the coefficient of restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Set the coefficient of restitution. This will not change the restitution of\n * existing contacts.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Test a point in world coordinates for containment in this fixture.\n */\n testPoint(p: Vec2Value): boolean {\n return this.m_shape.testPoint(this.m_body.getTransform(), p);\n }\n\n /**\n * Cast a ray against this shape.\n */\n rayCast(output: RayCastOutput, input: RayCastInput, childIndex: number): boolean {\n return this.m_shape.rayCast(output, input, this.m_body.getTransform(), childIndex);\n }\n\n /**\n * Get the mass data for this fixture. The mass data is based on the density and\n * the shape. The rotational inertia is about the shape's origin. This operation\n * may be expensive.\n */\n getMassData(massData: MassData): void {\n this.m_shape.computeMass(massData, this.m_density);\n }\n\n /**\n * Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a\n * more accurate AABB, compute it using the shape and the body transform.\n */\n getAABB(childIndex: number): AABB {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_proxies.length);\n return this.m_proxies[childIndex].aabb;\n }\n\n /**\n * These support body activation/deactivation.\n */\n createProxies(broadPhase: BroadPhase, xf: TransformValue): void {\n _ASSERT && console.assert(this.m_proxyCount == 0);\n\n // Create proxies in the broad-phase.\n this.m_proxyCount = this.m_shape.getChildCount();\n\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n this.m_shape.computeAABB(proxy.aabb, xf, i);\n proxy.proxyId = broadPhase.createProxy(proxy.aabb, proxy);\n }\n }\n\n destroyProxies(broadPhase: BroadPhase): void {\n // Destroy proxies in the broad-phase.\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n broadPhase.destroyProxy(proxy.proxyId);\n proxy.proxyId = null;\n }\n\n this.m_proxyCount = 0;\n }\n\n /**\n * Updates this fixture proxy in broad-phase (with combined AABB of current and\n * next transformation).\n */\n synchronize(broadPhase: BroadPhase, xf1: TransformValue, xf2: TransformValue): void {\n for (let i = 0; i < this.m_proxyCount; ++i) {\n const proxy = this.m_proxies[i];\n // Compute an AABB that covers the swept shape (may miss some rotation\n // effect).\n this.m_shape.computeAABB(synchronize_aabb1, xf1, proxy.childIndex);\n this.m_shape.computeAABB(synchronize_aabb2, xf2, proxy.childIndex);\n\n proxy.aabb.combine(synchronize_aabb1, synchronize_aabb2);\n\n matrix.subVec2(displacement, xf2.p, xf1.p);\n\n broadPhase.moveProxy(proxy.proxyId, proxy.aabb, displacement);\n }\n }\n\n /**\n * Set the contact filtering data. This will not update contacts until the next\n * time step when either parent body is active and awake. This automatically\n * calls refilter.\n */\n setFilterData(filter: { groupIndex: number, categoryBits: number, maskBits: number }): void {\n this.m_filterGroupIndex = filter.groupIndex;\n this.m_filterCategoryBits = filter.categoryBits;\n this.m_filterMaskBits = filter.maskBits;\n this.refilter();\n }\n\n getFilterGroupIndex(): number {\n return this.m_filterGroupIndex;\n }\n\n setFilterGroupIndex(groupIndex: number): void {\n this.m_filterGroupIndex = groupIndex;\n this.refilter();\n }\n\n getFilterCategoryBits(): number {\n return this.m_filterCategoryBits;\n }\n\n setFilterCategoryBits(categoryBits: number): void {\n this.m_filterCategoryBits = categoryBits;\n this.refilter();\n }\n\n getFilterMaskBits(): number {\n return this.m_filterMaskBits;\n }\n\n setFilterMaskBits(maskBits: number): void {\n this.m_filterMaskBits = maskBits;\n this.refilter();\n }\n\n /**\n * Call this if you want to establish collision that was previously disabled by\n * ContactFilter.\n */\n refilter(): void {\n if (this.m_body == null) {\n return;\n }\n\n // Flag associated contacts for filtering.\n let edge = this.m_body.getContactList();\n while (edge) {\n const contact = edge.contact;\n const fixtureA = contact.getFixtureA();\n const fixtureB = contact.getFixtureB();\n if (fixtureA == this || fixtureB == this) {\n contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n\n const world = this.m_body.getWorld();\n\n if (world == null) {\n return;\n }\n\n // Touch each proxy so that new pairs may be created\n const broadPhase = world.m_broadPhase;\n for (let i = 0; i < this.m_proxyCount; ++i) {\n broadPhase.touchProxy(this.m_proxies[i].proxyId);\n }\n }\n\n /**\n * Implement this method to provide collision filtering, if you want finer\n * control over contact creation.\n *\n * Return true if contact calculations should be performed between these two\n * fixtures.\n *\n * Warning: for performance reasons this is only called when the AABBs begin to\n * overlap.\n */\n shouldCollide(that: Fixture): boolean {\n\n if (that.m_filterGroupIndex === this.m_filterGroupIndex && that.m_filterGroupIndex !== 0) {\n return that.m_filterGroupIndex > 0;\n }\n\n const collideA = (that.m_filterMaskBits & this.m_filterCategoryBits) !== 0;\n const collideB = (that.m_filterCategoryBits & this.m_filterMaskBits) !== 0;\n const collide = collideA && collideB;\n return collide;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Velocity } from \"./Velocity\";\nimport { Position } from \"./Position\";\nimport { Fixture, FixtureDef, FixtureOpt } from \"./Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { JointEdge } from \"./Joint\";\nimport { World } from \"./World\";\nimport { ContactEdge } from \"./Contact\";\nimport { Style } from \"../util/Testbed\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A static body does not move under simulation and behaves as if it has infinite mass.\n * Internally, zero is stored for the mass and the inverse mass.\n * Static bodies can be moved manually by the user.\n * A static body has zero velocity.\n * Static bodies do not collide with other static or kinematic bodies.\n * \n * A kinematic body moves under simulation according to its velocity.\n * Kinematic bodies do not respond to forces.\n * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity.\n * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass.\n * Kinematic bodies do not collide with other kinematic or static bodies.\n * \n * A dynamic body is fully simulated.\n * They can be moved manually by the user, but normally they move according to forces.\n * A dynamic body can collide with all body types.\n * A dynamic body always has finite, non-zero mass.\n * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate.\n */\nexport type BodyType = \"static\" | \"kinematic\" | \"dynamic\";\n\n/** @internal */ const STATIC = \"static\";\n/** @internal */ const KINEMATIC = \"kinematic\";\n/** @internal */ const DYNAMIC = \"dynamic\";\n\n/** @internal */ const oldCenter = matrix.vec2(0, 0);\n/** @internal */ const localCenter = matrix.vec2(0, 0);\n/** @internal */ const shift = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n\nexport interface BodyDef {\n /**\n * Body types are static, kinematic, or dynamic. Note: if a dynamic\n * body would have zero mass, the mass is set to one.\n */\n type?: BodyType;\n /**\n * The world position of the body. Avoid creating bodies at the\n * origin since this can lead to many overlapping shapes.\n */\n position?: Vec2Value;\n /**\n * The world angle of the body in radians.\n */\n angle?: number;\n /**\n * The linear velocity of the body's origin in world co-ordinates.\n */\n linearVelocity?: Vec2Value;\n angularVelocity?: number;\n /**\n * Linear damping is use to reduce the linear velocity. The\n * damping parameter can be larger than 1.0 but the damping effect becomes\n * sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n linearDamping?: number;\n /**\n * Angular damping is use to reduce the angular velocity.\n * The damping parameter can be larger than 1.0 but the damping effect\n * becomes sensitive to the time step when the damping parameter is large.\n * Units are 1/time\n */\n angularDamping?: number;\n /**\n * Should this body be prevented from rotating? Useful for characters.\n */\n fixedRotation?: boolean;\n /**\n * Is this a fast moving body that should be prevented from\n * tunneling through other moving bodies? Note that all bodies are\n * prevented from tunneling through kinematic and static bodies. This\n * setting is only considered on dynamic bodies. Warning: You should use\n * this flag sparingly since it increases processing time.\n */\n bullet?: boolean;\n gravityScale?: number;\n /**\n * Set this flag to false if this body should never fall asleep. Note that this increases CPU usage.\n */\n allowSleep?: boolean;\n /**\n * Is this body initially awake or sleeping?\n */\n awake?: boolean;\n /**\n * Does this body start out active?\n */\n active?: boolean;\n userData?: any;\n}\n\n/** @internal */ const BodyDefDefault: BodyDef = {\n type : STATIC,\n position : Vec2.zero(),\n angle : 0.0,\n\n linearVelocity : Vec2.zero(),\n angularVelocity : 0.0,\n\n linearDamping : 0.0,\n angularDamping : 0.0,\n\n fixedRotation : false,\n bullet : false,\n gravityScale : 1.0,\n\n allowSleep : true,\n awake : true,\n active : true,\n\n userData : null\n};\n\n/**\n * MassData This holds the mass data computed for a shape.\n */\nexport interface MassData {\n /** The mass of the shape, usually in kilograms. */\n mass: number;\n /** The position of the shape's centroid relative to the shape's origin. */\n center: Vec2Value;\n /** The rotational inertia of the shape about the local origin. */\n I: number;\n}\n\n/**\n * A rigid body composed of one or more fixtures.\n *\n * To create a new Body use {@link World.createBody}.\n */\nexport class Body {\n /** @hidden */\n static readonly STATIC: BodyType = \"static\";\n /** @hidden */\n static readonly KINEMATIC: BodyType = \"kinematic\";\n /** @hidden */\n static readonly DYNAMIC: BodyType = \"dynamic\";\n\n /** @internal */ m_world: World;\n /** @internal */ m_awakeFlag: boolean;\n /** @internal */ m_autoSleepFlag: boolean;\n /** @internal */ m_bulletFlag: boolean;\n /** @internal */ m_fixedRotationFlag: boolean;\n /** @internal */ m_activeFlag: boolean;\n /** @internal */ m_islandFlag: boolean;\n /** @internal */ m_toiFlag: boolean;\n /** @internal */ m_userData: unknown;\n /** @internal */ m_type: BodyType;\n /** @internal */ m_mass: number;\n /** @internal */ m_invMass: number;\n /** @internal Rotational inertia about the center of mass. */\n m_I: number;\n /** @internal */ m_invI: number;\n /** @internal the body origin transform */\n m_xf: Transform;\n /** @internal the swept motion for CCD */\n m_sweep: Sweep;\n // position and velocity correction\n /** @internal */ c_velocity: Velocity;\n /** @internal */ c_position: Position;\n /** @internal */ m_force: Vec2;\n /** @internal */ m_torque: number;\n /** @internal */ m_linearVelocity: Vec2;\n /** @internal */ m_angularVelocity: number;\n /** @internal */ m_linearDamping: number;\n /** @internal */ m_angularDamping: number;\n /** @internal */ m_gravityScale: number;\n /** @internal */ m_sleepTime: number;\n /** @internal */ m_jointList: JointEdge | null;\n /** @internal */ m_contactList: ContactEdge | null;\n /** @internal */ m_fixtureList: Fixture | null;\n /** @internal */ m_prev: Body | null;\n /** @internal */ m_next: Body | null;\n /** @internal */ m_destroyed: boolean;\n\n /** @hidden Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n /** @internal */\n constructor(world: World, def: BodyDef) {\n def = options(def, BodyDefDefault);\n\n _ASSERT && console.assert(Vec2.isValid(def.position));\n _ASSERT && console.assert(Vec2.isValid(def.linearVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angle));\n _ASSERT && console.assert(Number.isFinite(def.angularVelocity));\n _ASSERT && console.assert(Number.isFinite(def.angularDamping) && def.angularDamping >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.linearDamping) && def.linearDamping >= 0.0);\n\n this.m_world = world;\n\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\n this.m_islandFlag = false;\n this.m_toiFlag = false;\n\n this.m_userData = def.userData;\n this.m_type = def.type;\n\n if (this.m_type == DYNAMIC) {\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n } else {\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n }\n\n // Rotational inertia about the center of mass.\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n // the body origin transform\n this.m_xf = Transform.identity();\n this.m_xf.p.setVec2(def.position);\n this.m_xf.q.setAngle(def.angle);\n\n // the swept motion for CCD\n this.m_sweep = new Sweep();\n this.m_sweep.setTransform(this.m_xf);\n\n // position and velocity correction\n this.c_velocity = new Velocity();\n this.c_position = new Position();\n\n this.m_force = Vec2.zero();\n this.m_torque = 0.0;\n\n this.m_linearVelocity = Vec2.clone(def.linearVelocity);\n this.m_angularVelocity = def.angularVelocity;\n\n this.m_linearDamping = def.linearDamping;\n this.m_angularDamping = def.angularDamping;\n this.m_gravityScale = def.gravityScale;\n\n this.m_sleepTime = 0.0;\n\n this.m_jointList = null;\n this.m_contactList = null;\n this.m_fixtureList = null;\n\n this.m_prev = null;\n this.m_next = null;\n\n this.m_destroyed = false;\n }\n\n /** @internal */\n _serialize(): object {\n const fixtures = [];\n for (let 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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): Body {\n const body = new Body(world, data);\n\n if (data.fixtures) {\n for (let i = data.fixtures.length - 1; i >= 0; i--) {\n const fixture = restore(Fixture, data.fixtures[i], body);\n body._addFixture(fixture);\n }\n }\n return body;\n }\n\n isWorldLocked(): boolean {\n return this.m_world && this.m_world.isLocked() ? true : false;\n }\n\n getWorld(): World {\n return this.m_world;\n }\n\n getNext(): Body | null {\n return this.m_next;\n }\n\n setUserData(data: any): void {\n this.m_userData = data;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n getFixtureList(): Fixture | null {\n return this.m_fixtureList;\n }\n\n getJointList(): JointEdge | null {\n return this.m_jointList;\n }\n\n /**\n * Warning: this list changes during the time step and you may miss some\n * collisions if you don't use ContactListener.\n */\n getContactList(): ContactEdge | null {\n return this.m_contactList;\n }\n\n isStatic(): boolean {\n return this.m_type == STATIC;\n }\n\n isDynamic(): boolean {\n return this.m_type == DYNAMIC;\n }\n\n isKinematic(): boolean {\n return this.m_type == KINEMATIC;\n }\n\n /**\n * This will alter the mass and velocity.\n */\n setStatic(): Body {\n this.setType(STATIC);\n return this;\n }\n\n setDynamic(): Body {\n this.setType(DYNAMIC);\n return this;\n }\n\n setKinematic(): Body {\n this.setType(KINEMATIC);\n return this;\n }\n\n /**\n * Get the type of the body.\n */\n getType(): BodyType {\n return this.m_type;\n }\n\n /**\n * Set the type of the body to \"static\", \"kinematic\" or \"dynamic\".\n * @param type The type of the body.\n */\n setType(type: BodyType): void {\n _ASSERT && console.assert(type === STATIC || type === KINEMATIC || type === DYNAMIC);\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type == type) {\n return;\n }\n\n this.m_type = type;\n\n this.resetMassData();\n\n if (this.m_type == STATIC) {\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_sweep.forward();\n this.synchronizeFixtures();\n }\n\n this.setAwake(true);\n\n this.m_force.setZero();\n this.m_torque = 0.0;\n\n // Delete the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n\n // Touch the proxies so that new contacts will be created (when appropriate)\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n for (let i = 0; i < f.m_proxyCount; ++i) {\n broadPhase.touchProxy(f.m_proxies[i].proxyId);\n }\n }\n }\n\n isBullet(): boolean {\n return this.m_bulletFlag;\n }\n\n /**\n * Should this body be treated like a bullet for continuous collision detection?\n */\n setBullet(flag: boolean): void {\n this.m_bulletFlag = !!flag;\n }\n\n isSleepingAllowed(): boolean {\n return this.m_autoSleepFlag;\n }\n\n setSleepingAllowed(flag: boolean): void {\n this.m_autoSleepFlag = !!flag;\n if (this.m_autoSleepFlag == false) {\n this.setAwake(true);\n }\n }\n\n isAwake(): boolean {\n return this.m_awakeFlag;\n }\n\n /**\n * Set the sleep state of the body. A sleeping body has very low CPU cost.\n *\n * @param flag Set to true to wake the body, false to put it to sleep.\n */\n setAwake(flag: boolean): void {\n if (flag) {\n this.m_awakeFlag = true;\n this.m_sleepTime = 0.0;\n } else {\n this.m_awakeFlag = false;\n this.m_sleepTime = 0.0;\n this.m_linearVelocity.setZero();\n this.m_angularVelocity = 0.0;\n this.m_force.setZero();\n this.m_torque = 0.0;\n }\n }\n\n isActive(): boolean {\n return this.m_activeFlag;\n }\n\n /**\n * Set the active state of the body. An inactive body is not simulated and\n * cannot be collided with or woken up. If you pass a flag of true, all fixtures\n * will be added to the broad-phase. If you pass a flag of false, all fixtures\n * will be removed from the broad-phase and all contacts will be destroyed.\n * Fixtures and joints are otherwise unaffected.\n *\n * You may continue to create/destroy fixtures and joints on inactive bodies.\n * Fixtures on an inactive body are implicitly inactive and will not participate\n * in collisions, ray-casts, or queries. Joints connected to an inactive body\n * are implicitly inactive. An inactive body is still owned by a World object\n * and remains\n */\n setActive(flag: boolean): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (flag == this.m_activeFlag) {\n return;\n }\n\n this.m_activeFlag = !!flag;\n\n if (this.m_activeFlag) {\n // Create all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.createProxies(broadPhase, this.m_xf);\n }\n\t\t // Contacts are created at the beginning of the next\n\t\t this.m_world.m_newFixture = true;\n } else {\n // Destroy all proxies.\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.destroyProxies(broadPhase);\n }\n\n // Destroy the attached contacts.\n let ce = this.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n this.m_world.destroyContact(ce0.contact);\n }\n this.m_contactList = null;\n }\n }\n\n isFixedRotation(): boolean {\n return this.m_fixedRotationFlag;\n }\n\n /**\n * Set this body to have fixed rotation. This causes the mass to be reset.\n */\n setFixedRotation(flag: boolean): void {\n if (this.m_fixedRotationFlag == flag) {\n return;\n }\n\n this.m_fixedRotationFlag = !!flag;\n\n this.m_angularVelocity = 0.0;\n\n this.resetMassData();\n }\n\n /**\n * Get the world transform for the body's origin.\n */\n getTransform(): Transform {\n return this.m_xf;\n }\n\n /**\n * Set the position of the body's origin and rotation. Manipulating a body's\n * transform may cause non-physical behavior. Note: contacts are updated on the\n * next call to World.step.\n *\n * @param position The world position of the body's local origin.\n * @param angle The world rotation in radians.\n */\n setTransform(position: Vec2Value, angle: number): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n this.m_xf.setNum(position, angle);\n this.m_sweep.setTransform(this.m_xf);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let 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\n synchronizeTransform(): void {\n this.m_sweep.getTransform(this.m_xf, 1);\n }\n\n /**\n * Update fixtures in broad-phase.\n */\n synchronizeFixtures(): void {\n this.m_sweep.getTransform(xf, 0);\n\n const broadPhase = this.m_world.m_broadPhase;\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n f.synchronize(broadPhase, xf, this.m_xf);\n }\n }\n\n /**\n * Used in TOI.\n */\n advance(alpha: number): void {\n // Advance to the new safe time. This doesn't sync the broad-phase.\n this.m_sweep.advance(alpha);\n matrix.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\n /**\n * Get the world position for the body's origin.\n */\n getPosition(): Vec2 {\n return this.m_xf.p;\n }\n\n setPosition(p: Vec2Value): void {\n this.setTransform(p, this.m_sweep.a);\n }\n\n /**\n * Get the current world rotation angle in radians.\n */\n getAngle(): number {\n return this.m_sweep.a;\n }\n\n setAngle(angle: number): void {\n this.setTransform(this.m_xf.p, angle);\n }\n\n /**\n * Get the world position of the center of mass.\n */\n getWorldCenter(): Vec2 {\n return this.m_sweep.c;\n }\n\n /**\n * Get the local position of the center of mass.\n */\n getLocalCenter(): Vec2 {\n return this.m_sweep.localCenter;\n }\n\n /**\n * Get the linear velocity of the center of mass.\n *\n * @return the linear velocity of the center of mass.\n */\n getLinearVelocity(): Vec2 {\n return this.m_linearVelocity;\n }\n\n /**\n * Get the world linear velocity of a world point attached to this body.\n *\n * @param worldPoint A point in world coordinates.\n */\n getLinearVelocityFromWorldPoint(worldPoint: Vec2Value): Vec2 {\n const localCenter = Vec2.sub(worldPoint, this.m_sweep.c);\n return Vec2.add(this.m_linearVelocity, Vec2.crossNumVec2(this.m_angularVelocity,\n localCenter));\n }\n\n /**\n * Get the world velocity of a local point.\n *\n * @param localPoint A point in local coordinates.\n */\n getLinearVelocityFromLocalPoint(localPoint: Vec2Value): Vec2 {\n return this.getLinearVelocityFromWorldPoint(this.getWorldPoint(localPoint));\n }\n\n /**\n * Set the linear velocity of the center of mass.\n *\n * @param v The new linear velocity of the center of mass.\n */\n setLinearVelocity(v: Vec2Value): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (Vec2.dot(v, v) > 0.0) {\n this.setAwake(true);\n }\n this.m_linearVelocity.setVec2(v);\n }\n\n /**\n * Get the angular velocity.\n *\n * @returns the angular velocity in radians/second.\n */\n getAngularVelocity(): number {\n return this.m_angularVelocity;\n }\n\n /**\n * Set the angular velocity.\n *\n * @param w The new angular velocity in radians/second.\n */\n setAngularVelocity(w: number): void {\n if (this.m_type == STATIC) {\n return;\n }\n if (w * w > 0.0) {\n this.setAwake(true);\n }\n this.m_angularVelocity = w;\n }\n\n getLinearDamping(): number {\n return this.m_linearDamping;\n }\n\n setLinearDamping(linearDamping: number): void {\n this.m_linearDamping = linearDamping;\n }\n\n getAngularDamping(): number {\n return this.m_angularDamping;\n }\n\n setAngularDamping(angularDamping: number): void {\n this.m_angularDamping = angularDamping;\n }\n\n getGravityScale(): number {\n return this.m_gravityScale;\n }\n\n /**\n * Scale the gravity applied to this body.\n */\n setGravityScale(scale: number): void {\n this.m_gravityScale = scale;\n }\n\n /**\n * Get the total mass of the body.\n *\n * @returns The mass, usually in kilograms (kg).\n */\n getMass(): number {\n return this.m_mass;\n }\n\n /**\n * Get the rotational inertia of the body about the local origin.\n *\n * @return the rotational inertia, usually in kg-m^2.\n */\n getInertia(): number {\n return this.m_I + this.m_mass\n * Vec2.dot(this.m_sweep.localCenter, this.m_sweep.localCenter);\n }\n\n /**\n * Copy the mass data of the body to data.\n */\n getMassData(data: MassData): void {\n data.mass = this.m_mass;\n data.I = this.getInertia();\n matrix.copyVec2(data.center, this.m_sweep.localCenter);\n }\n\n /**\n * This resets the mass properties to the sum of the mass properties of the\n * fixtures. This normally does not need to be called unless you called\n * SetMassData to override the mass and you later want to reset the mass.\n */\n resetMassData(): void {\n // Compute mass data from shapes. Each shape has its own density.\n this.m_mass = 0.0;\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n matrix.zeroVec2(this.m_sweep.localCenter);\n\n // Static and kinematic bodies have zero mass.\n if (this.isStatic() || this.isKinematic()) {\n matrix.copyVec2(this.m_sweep.c0, this.m_xf.p);\n matrix.copyVec2(this.m_sweep.c, this.m_xf.p);\n this.m_sweep.a0 = this.m_sweep.a;\n return;\n }\n\n _ASSERT && console.assert(this.isDynamic());\n\n // Accumulate mass over all fixtures.\n matrix.zeroVec2(localCenter);\n for (let f = this.m_fixtureList; f; f = f.m_next) {\n if (f.m_density == 0.0) {\n continue;\n }\n\n const massData: MassData = {\n mass: 0,\n center: matrix.vec2(0, 0),\n I: 0\n };\n f.getMassData(massData);\n this.m_mass += massData.mass;\n matrix.plusScaleVec2(localCenter, massData.mass, massData.center);\n this.m_I += massData.I;\n }\n\n // Compute center of mass.\n if (this.m_mass > 0.0) {\n this.m_invMass = 1.0 / this.m_mass;\n matrix.scaleVec2(localCenter, this.m_invMass, localCenter);\n\n } else {\n // Force all dynamic bodies to have a positive mass.\n this.m_mass = 1.0;\n this.m_invMass = 1.0;\n }\n\n if (this.m_I > 0.0 && this.m_fixedRotationFlag == false) {\n // Center the inertia about the center of mass.\n this.m_I -= this.m_mass * matrix.dotVec2(localCenter, localCenter);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n\n } else {\n this.m_I = 0.0;\n this.m_invI = 0.0;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(localCenter, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Set the mass properties to override the mass properties of the fixtures. Note\n * that this changes the center of mass position. Note that creating or\n * destroying fixtures can also alter the mass. This function has no effect if\n * the body isn't dynamic.\n *\n * @param massData The mass properties.\n */\n setMassData(massData: MassData): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n if (this.isWorldLocked() == true) {\n return;\n }\n\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n this.m_invMass = 0.0;\n this.m_I = 0.0;\n this.m_invI = 0.0;\n\n this.m_mass = massData.mass;\n if (this.m_mass <= 0.0) {\n this.m_mass = 1.0;\n }\n\n this.m_invMass = 1.0 / this.m_mass;\n\n if (massData.I > 0.0 && this.m_fixedRotationFlag == false) {\n this.m_I = massData.I - this.m_mass * matrix.dotVec2(massData.center, massData.center);\n _ASSERT && console.assert(this.m_I > 0.0);\n this.m_invI = 1.0 / this.m_I;\n }\n\n // Move center of mass.\n matrix.copyVec2(oldCenter, this.m_sweep.c);\n this.m_sweep.setLocalCenter(massData.center, this.m_xf);\n\n // Update center of mass velocity.\n matrix.subVec2(shift, this.m_sweep.c, oldCenter);\n matrix.crossNumVec2(temp, this.m_angularVelocity, shift);\n matrix.plusVec2(this.m_linearVelocity, temp);\n }\n\n /**\n * Apply a force at a world point. If the force is not applied at the center of\n * mass, it will generate a torque and affect the angular velocity. This wakes\n * up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyForce(force: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping.\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n this.m_torque += Vec2.crossVec2Vec2(Vec2.sub(point, this.m_sweep.c), force);\n }\n }\n\n /**\n * Apply a force to the center of mass. This wakes up the body.\n *\n * @param force The world force vector, usually in Newtons (N).\n * @param wake Also wake up the body\n */\n applyForceToCenter(force: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_force.add(force);\n }\n }\n\n /**\n * Apply a torque. This affects the angular velocity without affecting the\n * linear velocity of the center of mass. This wakes up the body.\n *\n * @param torque About the z-axis (out of the screen), usually in N-m.\n * @param wake Also wake up the body\n */\n applyTorque(torque: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate a force if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_torque += torque;\n }\n }\n\n /**\n * Apply an impulse at a point. This immediately modifies the velocity. It also\n * modifies the angular velocity if the point of application is not at the\n * center of mass. This wakes up the body.\n *\n * @param impulse The world impulse vector, usually in N-seconds or kg-m/s.\n * @param point The world position of the point of application.\n * @param wake Also wake up the body\n */\n applyLinearImpulse(impulse: Vec2Value, point: Vec2Value, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n\n // Don't accumulate velocity if the body is sleeping\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(point, this.m_sweep.c), impulse);\n }\n }\n\n /**\n * Apply an angular impulse.\n *\n * @param impulse The angular impulse in units of kg*m*m/s\n * @param wake Also wake up the body\n */\n applyAngularImpulse(impulse: number, wake: boolean = true): void {\n if (this.m_type != DYNAMIC) {\n return;\n }\n\n if (wake && this.m_awakeFlag == false) {\n this.setAwake(true);\n }\n // Don't accumulate velocity if the body is sleeping\n if (this.m_awakeFlag) {\n this.m_angularVelocity += this.m_invI * impulse;\n }\n }\n\n /**\n * This is used to test if two bodies should collide.\n * \n * Bodies do not collide when:\n * - Neither of them is dynamic\n * - They are connected by a joint with collideConnected == false\n */\n shouldCollide(that: Body): boolean {\n // At least one body should be dynamic.\n if (this.m_type != DYNAMIC && that.m_type != DYNAMIC) {\n return false;\n }\n // Does a joint prevent collision?\n for (let 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\n /** @internal Used for deserialize. */\n _addFixture(fixture: Fixture): Fixture {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.createProxies(broadPhase, this.m_xf);\n }\n\n fixture.m_next = this.m_fixtureList;\n this.m_fixtureList = fixture;\n\n // Adjust mass properties if needed.\n if (fixture.m_density > 0.0) {\n this.resetMassData();\n }\n\n // Let the world know we have a new fixture. This will cause new contacts\n // to be created at the beginning of the next time step.\n this.m_world.m_newFixture = true;\n\n return fixture;\n }\n\n /**\n * Creates a fixture and attach it to this body.\n *\n * If the density is non-zero, this function automatically updates the mass of\n * the body.\n *\n * Contacts are not created until the next time step.\n *\n * Warning: This function is locked during callbacks.\n */\n createFixture(def: FixtureDef): Fixture;\n createFixture(shape: Shape, opt?: FixtureOpt): Fixture;\n createFixture(shape: Shape, density?: number): Fixture;\n // tslint:disable-next-line:typedef\n createFixture(shape, fixdef?) {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return null;\n }\n\n const fixture = new Fixture(this, shape, fixdef);\n this._addFixture(fixture);\n return fixture;\n }\n\n /**\n * Destroy a fixture. This removes the fixture from the broad-phase and destroys\n * all contacts associated with this fixture. This will automatically adjust the\n * mass of the body if the body is dynamic and the fixture has positive density.\n * All fixtures attached to a body are implicitly destroyed when the body is\n * destroyed.\n *\n * Warning: This function is locked during callbacks.\n *\n * @param fixture The fixture to be removed.\n */\n destroyFixture(fixture: Fixture): void {\n _ASSERT && console.assert(this.isWorldLocked() == false);\n\n if (this.isWorldLocked() == true) {\n return;\n }\n\n _ASSERT && console.assert(fixture.m_body == this);\n\n // Remove the fixture from this body's singly linked list.\n let found = false;\n if (this.m_fixtureList === fixture) {\n this.m_fixtureList = fixture.m_next;\n found = true;\n\n } else {\n let node = this.m_fixtureList;\n while (node != null) {\n if (node.m_next === fixture) {\n node.m_next = fixture.m_next;\n found = true;\n break;\n }\n node = node.m_next;\n }\n }\n\n // You tried to remove a shape that is not attached to this body.\n _ASSERT && console.assert(found);\n\n // Destroy any contacts associated with the fixture.\n let edge = this.m_contactList;\n while (edge) {\n const c = edge.contact;\n edge = edge.next;\n\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n\n if (fixture == fixtureA || fixture == fixtureB) {\n // This destroys the contact and removes it from\n // this body's contact list.\n this.m_world.destroyContact(c);\n }\n }\n\n if (this.m_activeFlag) {\n const broadPhase = this.m_world.m_broadPhase;\n fixture.destroyProxies(broadPhase);\n }\n\n fixture.m_body = null;\n fixture.m_next = null;\n\n this.m_world.publish(\"remove-fixture\", fixture);\n\n // Reset the mass data.\n this.resetMassData();\n }\n\n /**\n * Get the corresponding world point of a local point.\n */\n getWorldPoint(localPoint: Vec2Value): Vec2 {\n return Transform.mulVec2(this.m_xf, localPoint);\n }\n\n /**\n * Get the corresponding world vector of a local vector.\n */\n getWorldVector(localVector: Vec2Value): Vec2 {\n return Rot.mulVec2(this.m_xf.q, localVector);\n }\n\n /**\n * Gets the corresponding local point of a world point.\n */\n getLocalPoint(worldPoint: Vec2Value): Vec2 {\n return Transform.mulTVec2(this.m_xf, worldPoint);\n }\n\n /**\n * Gets the corresponding local vector of a world vector.\n */\n getLocalVector(worldVector: Vec2Value): Vec2 {\n return Rot.mulTVec2(this.m_xf.q, worldVector);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2, Vec2Value } from \"../common/Vec2\";\nimport type { Body } from \"./Body\";\nimport { TimeStep } from \"./Solver\";\nimport { Style } from \"../util/Testbed\";\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/**\n * A joint edge is used to connect bodies and joints together in a joint graph\n * where each body is a node and each joint is an edge. A joint edge belongs to\n * a doubly linked list maintained in each attached body. Each joint has two\n * joint nodes, one for each attached body.\n */\nexport class JointEdge {\n /**\n * provides quick access to the other body attached.\n */\n other: Body | null = null;\n /**\n * the joint\n */\n joint: Joint | null = null;\n /**\n * prev the previous joint edge in the body's joint list\n */\n prev: JointEdge | null = null;\n /**\n * the next joint edge in the body's joint list\n */\n next: JointEdge | null = null;\n}\n\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointOpt {\n /**\n * Use this to attach application specific data to your joints.\n */\n userData?: any;\n /**\n * Set this flag to true if the attached bodies\n * should collide.\n */\n collideConnected?: boolean;\n}\n/**\n * Joint definitions are used to construct joints.\n */\nexport interface JointDef extends JointOpt {\n /**\n * The first attached body.\n */\n bodyA: Body;\n /**\n * The second attached body.\n */\n bodyB: Body;\n}\n\n/** @internal */ const DEFAULTS = {\n userData : null,\n collideConnected : false\n};\n\n/**\n * The base joint class. Joints are used to constraint two bodies together in\n * various fashions. Some joints also feature limits and motors.\n */\nexport abstract class Joint {\n\n /** @internal */ m_type: string = \"unknown-joint\";\n\n /** @internal */ m_bodyA: Body;\n /** @internal */ m_bodyB: Body;\n\n /** @internal */ m_collideConnected: boolean;\n\n /** @internal */ m_prev: Joint | null = null;\n /** @internal */ m_next: Joint | null = null;\n\n /** @internal */ m_edgeA: JointEdge = new JointEdge();\n /** @internal */ m_edgeB: JointEdge = new JointEdge();\n\n /** @internal */ m_islandFlag: boolean = false;\n /** @internal */ m_userData: unknown;\n\n /** Styling for dev-tools. */\n style: Style = {};\n\n /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */\n appData: Record = {};\n\n constructor(def: JointDef);\n constructor(def: JointOpt, bodyA: Body, bodyB: Body);\n constructor(def: JointDef | JointOpt, bodyA?: Body, bodyB?: Body) {\n bodyA = \"bodyA\" in def ? def.bodyA : bodyA;\n bodyB = \"bodyB\" in def ? def.bodyB : bodyB;\n\n _ASSERT && console.assert(!!bodyA);\n _ASSERT && console.assert(!!bodyB);\n _ASSERT && console.assert(bodyA != bodyB);\n\n this.m_bodyA = bodyA!;\n this.m_bodyB = bodyB!;\n\n this.m_collideConnected = !!def.collideConnected;\n this.m_userData = def.userData;\n }\n\n /**\n * Short-cut function to determine if either body is inactive.\n */\n isActive(): boolean {\n return this.m_bodyA.isActive() && this.m_bodyB.isActive();\n }\n\n /**\n * Get the type of the concrete joint.\n */\n getType(): string {\n return this.m_type;\n }\n\n /**\n * Get the first body attached to this joint.\n */\n getBodyA(): Body {\n return this.m_bodyA;\n }\n\n /**\n * Get the second body attached to this joint.\n */\n getBodyB(): Body {\n return this.m_bodyB;\n }\n\n /**\n * Get the next joint the world joint list.\n */\n getNext(): Joint {\n return this.m_next;\n }\n\n getUserData(): unknown {\n return this.m_userData;\n }\n\n setUserData(data: unknown): void {\n this.m_userData = data;\n }\n\n /**\n * Get collide connected. Note: modifying the collide connect flag won't work\n * correctly because the flag is only checked when fixture AABBs begin to\n * overlap.\n */\n getCollideConnected(): boolean {\n return this.m_collideConnected;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n abstract getAnchorA(): Vec2;\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n abstract getAnchorB(): Vec2;\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n abstract getReactionForce(inv_dt: number): Vec2;\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n abstract getReactionTorque(inv_dt: number): number;\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {}\n\n abstract initVelocityConstraints(step: TimeStep): void;\n\n abstract solveVelocityConstraints(step: TimeStep): void;\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n abstract solvePositionConstraints(step: TimeStep): boolean;\n\n /**\n * @hidden @experimental\n * Update joint with new props.\n */\n abstract _reset(def: Partial): void;\n\n /**\n * @internal @deprecated\n * Temporary for backward compatibility, will be removed.\n */\n _resetAnchors(def: any): void {\n return this._reset(def);\n }\n}\n","/** @hidden */\nexport const stats = {\n gjkCalls: 0,\n gjkIters: 0,\n gjkMaxIters: 0,\n\n toiTime: 0,\n toiMaxTime: 0,\n toiCalls: 0,\n toiIters: 0,\n toiMaxIters: 0,\n toiRootIters: 0,\n toiMaxRootIters: 0,\n\n toString(newline?: string): string {\n newline = typeof newline === \"string\" ? newline : \"\\n\";\n let string = \"\";\n // tslint:disable-next-line:no-for-in\n for (const name in this) {\n if (typeof this[name] !== \"function\" && typeof this[name] !== \"object\") {\n string += name + \": \" + this[name] + newline;\n }\n }\n return string;\n }\n};\n","/** @internal */\nexport const now = function(): number {\n return Date.now();\n};\n\n/** @internal */\nexport const diff = function(time: number): number {\n return Date.now() - time;\n};\n\n/** @internal */\nexport default {\n now,\n diff,\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport { Shape } from \"./Shape\";\nimport { EPSILON } from \"../common/Math\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { Rot } from \"../common/Rot\";\nimport { Transform, TransformValue } from \"../common/Transform\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_max = Math.max;\n\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const e12 = matrix.vec2(0, 0);\n/** @internal */ const e13 = matrix.vec2(0, 0);\n/** @internal */ const e23 = matrix.vec2(0, 0);\n/** @internal */ const temp1 = matrix.vec2(0, 0);\n/** @internal */ const temp2 = matrix.vec2(0, 0);\n\n/**\n * GJK using Voronoi regions (Christer Ericson) and Barycentric coordinates.\n */\n\nstats.gjkCalls = 0;\nstats.gjkIters = 0;\nstats.gjkMaxIters = 0;\n\n/**\n * Input for Distance. You have to option to use the shape radii in the\n * computation. Even\n */\nexport class DistanceInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n useRadii = false;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n this.useRadii = false;\n }\n}\n\n/**\n * Output for Distance.\n */\nexport class DistanceOutput {\n /** closest point on shapeA */\n pointA = matrix.vec2(0, 0);\n /** closest point on shapeB */\n pointB = matrix.vec2(0, 0);\n distance = 0;\n /** iterations number of GJK iterations used */\n iterations = 0;\n recycle() {\n matrix.zeroVec2(this.pointA);\n matrix.zeroVec2(this.pointB);\n this.distance = 0;\n this.iterations = 0;\n }\n}\n\n/**\n * Used to warm start Distance. Set count to zero on first call.\n */\nexport class SimplexCache {\n /** length or area */\n metric: number = 0;\n /** vertices on shape A */\n indexA: number[] = [];\n /** vertices on shape B */\n indexB: number[] = [];\n count: number = 0;\n recycle() {\n this.metric = 0;\n this.indexA.length = 0;\n this.indexB.length = 0;\n this.count = 0;\n }\n}\n\n/**\n * Compute the closest points between two shapes. Supports any combination of:\n * CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On\n * the first call set SimplexCache.count to zero.\n */\nexport const Distance = function (output: DistanceOutput, cache: SimplexCache, input: DistanceInput): void {\n ++stats.gjkCalls;\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n // Initialize the simplex.\n // const simplex = new Simplex();\n simplex.recycle();\n simplex.readCache(cache, proxyA, xfA, proxyB, xfB);\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n const k_maxIters = Settings.maxDistanceIterations;\n\n // These store the vertices of the last simplex so that we\n // can check for duplicates and prevent cycling.\n const saveA = [];\n const saveB = []; // int[3]\n let saveCount = 0;\n\n // Main iteration loop.\n let iter = 0;\n while (iter < k_maxIters) {\n // Copy simplex so we can identify duplicates.\n saveCount = simplex.m_count;\n for (let i = 0; i < saveCount; ++i) {\n saveA[i] = vertices[i].indexA;\n saveB[i] = vertices[i].indexB;\n }\n\n simplex.solve();\n\n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count === 3) {\n break;\n }\n\n // Get search direction.\n const d = simplex.getSearchDirection();\n\n // Ensure the search direction is numerically fit.\n if (matrix.lengthSqrVec2(d) < EPSILON * EPSILON) {\n // The origin is probably contained by a line segment\n // or triangle. Thus the shapes are overlapped.\n\n // We can't return zero here even though there may be overlap.\n // In case the simplex is a point, segment, or triangle it is difficult\n // to determine if the origin is contained in the CSO or very close to it.\n break;\n }\n\n // Compute a tentative new simplex vertex using support points.\n const vertex = vertices[simplex.m_count]; // SimplexVertex\n\n vertex.indexA = proxyA.getSupport(matrix.derotVec2(temp, xfA.q, matrix.scaleVec2(temp, -1, d)));\n matrix.transformVec2(vertex.wA, xfA, proxyA.getVertex(vertex.indexA));\n\n vertex.indexB = proxyB.getSupport(matrix.derotVec2(temp, xfB.q, d));\n matrix.transformVec2(vertex.wB, xfB, proxyB.getVertex(vertex.indexB));\n\n matrix.subVec2(vertex.w, vertex.wB, vertex.wA);\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n ++stats.gjkIters;\n\n // Check for duplicate support points. This is the main termination\n // criteria.\n let duplicate = false;\n for (let i = 0; i < saveCount; ++i) {\n if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) {\n duplicate = true;\n break;\n }\n }\n\n // If we found a duplicate support point we must exit to avoid cycling.\n if (duplicate) {\n break;\n }\n\n // New vertex is ok and needed.\n ++simplex.m_count;\n }\n\n stats.gjkMaxIters = math_max(stats.gjkMaxIters, iter);\n\n // Prepare output.\n simplex.getWitnessPoints(output.pointA, output.pointB);\n output.distance = matrix.distVec2(output.pointA, output.pointB);\n output.iterations = iter;\n\n // Cache the simplex.\n simplex.writeCache(cache);\n\n // Apply radii if requested.\n if (input.useRadii) {\n const rA = proxyA.m_radius;\n const rB = proxyB.m_radius;\n\n if (output.distance > rA + rB && output.distance > EPSILON) {\n // Shapes are still no overlapped.\n // Move the witness points to the outer surface.\n output.distance -= rA + rB;\n matrix.subVec2(normal, output.pointB, output.pointA);\n matrix.normalizeVec2(normal);\n matrix.plusScaleVec2(output.pointA, rA, normal);\n matrix.minusScaleVec2(output.pointB, rB, normal);\n } else {\n // Shapes are overlapped when radii are considered.\n // Move the witness points to the middle.\n const p = matrix.subVec2(temp, output.pointA, output.pointB);\n matrix.copyVec2(output.pointA, p);\n matrix.copyVec2(output.pointB, p);\n output.distance = 0.0;\n }\n }\n};\n\n/**\n * A distance proxy is used by the GJK algorithm. It encapsulates any shape.\n */\nexport class DistanceProxy {\n /** @internal */ m_vertices: Vec2Value[] = [];\n // todo: remove this?\n /** @internal */ m_count = 0;\n /** @internal */ m_radius = 0;\n\n recycle() {\n this.m_vertices.length = 0;\n this.m_count = 0;\n this.m_radius = 0;\n }\n\n /**\n * Get the vertex count.\n */\n getVertexCount(): number {\n return this.m_count;\n }\n\n /**\n * Get a vertex by index. Used by Distance.\n */\n getVertex(index: number): Vec2Value {\n _ASSERT && console.assert(0 <= index && index < this.m_count);\n return this.m_vertices[index];\n }\n\n /**\n * Get the supporting vertex index in the given direction.\n */\n getSupport(d: Vec2Value): number {\n let bestIndex = -1;\n let bestValue = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const value = matrix.dotVec2(this.m_vertices[i], d);\n if (value > bestValue) {\n bestIndex = i;\n bestValue = value;\n }\n }\n return bestIndex;\n }\n\n /**\n * Get the supporting vertex in the given direction.\n */\n getSupportVertex(d: Vec2Value): Vec2Value {\n return this.m_vertices[this.getSupport(d)];\n }\n\n /**\n * Initialize the proxy using the given shape. The shape must remain in scope\n * while the proxy is in use.\n */\n set(shape: Shape, index: number): void {\n // TODO remove, use shape instead\n _ASSERT && console.assert(typeof shape.computeDistanceProxy === \"function\");\n shape.computeDistanceProxy(this, index);\n }\n\n /**\n * Initialize the proxy using a vertex cloud and radius. The vertices\n * must remain in scope while the proxy is in use.\n */\n setVertices(vertices: Vec2Value[], count: number, radius: number) {\n this.m_vertices = vertices;\n this.m_count = count;\n this.m_radius = radius;\n }\n}\n\nclass SimplexVertex {\n /** support point in proxyA */\n wA = matrix.vec2(0, 0);\n /** wA index */\n indexA = 0;\n\n /** support point in proxyB */\n wB = matrix.vec2(0, 0);\n /** wB index */\n indexB = 0;\n\n /** wB - wA; */\n w = matrix.vec2(0, 0);\n /** barycentric coordinate for closest point */\n a = 0;\n\n recycle() {\n this.indexA = 0;\n this.indexB = 0;\n matrix.zeroVec2(this.wA);\n matrix.zeroVec2(this.wB);\n matrix.zeroVec2(this.w);\n this.a = 0;\n }\n set(v: SimplexVertex): void {\n this.indexA = v.indexA;\n this.indexB = v.indexB;\n matrix.copyVec2(this.wA, v.wA);\n matrix.copyVec2(this.wB, v.wB);\n matrix.copyVec2(this.w, v.w);\n this.a = v.a;\n }\n}\n\n/** @internal */ const searchDirection_reuse = matrix.vec2(0, 0);\n/** @internal */ const closestPoint_reuse = matrix.vec2(0, 0); \n\nclass Simplex {\n m_v1 = new SimplexVertex();\n m_v2 = new SimplexVertex();\n m_v3 = new SimplexVertex();\n m_v = [this.m_v1, this.m_v2, this.m_v3];\n m_count: number;\n recycle() {\n this.m_v1.recycle();\n this.m_v2.recycle();\n this.m_v3.recycle();\n this.m_count = 0;\n }\n\n /** @internal */ toString(): string {\n if (this.m_count === 3) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y,\n this.m_v3.a, this.m_v3.wA.x, this.m_v3.wA.y, this.m_v3.wB.x, this.m_v3.wB.y\n ].toString();\n\n } else if (this.m_count === 2) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y,\n this.m_v2.a, this.m_v2.wA.x, this.m_v2.wA.y, this.m_v2.wB.x, this.m_v2.wB.y\n ].toString();\n\n } else if (this.m_count === 1) {\n return [\"+\" + this.m_count,\n this.m_v1.a, this.m_v1.wA.x, this.m_v1.wA.y, this.m_v1.wB.x, this.m_v1.wB.y\n ].toString();\n\n } else {\n return \"+\" + this.m_count;\n }\n }\n\n readCache(cache: SimplexCache, proxyA: DistanceProxy, transformA: TransformValue, proxyB: DistanceProxy, transformB: TransformValue): void {\n _ASSERT && console.assert(cache.count <= 3);\n\n // Copy data from cache.\n this.m_count = cache.count;\n for (let i = 0; i < this.m_count; ++i) {\n const v = this.m_v[i];\n v.indexA = cache.indexA[i];\n v.indexB = cache.indexB[i];\n const wALocal = proxyA.getVertex(v.indexA);\n const wBLocal = proxyB.getVertex(v.indexB);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 0.0;\n }\n\n // Compute the new simplex metric, if it is substantially different than\n // old metric then flush the simplex.\n if (this.m_count > 1) {\n const metric1 = cache.metric;\n const metric2 = this.getMetric();\n if (metric2 < 0.5 * metric1 || 2.0 * metric1 < metric2 || metric2 < EPSILON) {\n // Reset the simplex.\n this.m_count = 0;\n }\n }\n\n // If the cache is empty or invalid...\n if (this.m_count === 0) {\n const v = this.m_v[0];\n v.indexA = 0;\n v.indexB = 0;\n const wALocal = proxyA.getVertex(0);\n const wBLocal = proxyB.getVertex(0);\n matrix.transformVec2(v.wA, transformA, wALocal);\n matrix.transformVec2(v.wB, transformB, wBLocal);\n matrix.subVec2(v.w,v.wB, v.wA);\n v.a = 1.0;\n this.m_count = 1;\n }\n }\n\n writeCache(cache: SimplexCache): void {\n cache.metric = this.getMetric();\n cache.count = this.m_count;\n for (let i = 0; i < this.m_count; ++i) {\n cache.indexA[i] = this.m_v[i].indexA;\n cache.indexB[i] = this.m_v[i].indexB;\n }\n }\n\n getSearchDirection(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 1:\n return matrix.setVec2(searchDirection_reuse, -v1.w.x, -v1.w.y);\n\n case 2: {\n matrix.subVec2(e12, v2.w, v1.w);\n const sgn = -matrix.crossVec2Vec2(e12, v1.w);\n if (sgn > 0.0) {\n // Origin is left of e12.\n return matrix.setVec2(searchDirection_reuse, -e12.y, e12.x);\n } else {\n // Origin is right of e12.\n return matrix.setVec2(searchDirection_reuse, e12.y, -e12.x);\n }\n }\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(searchDirection_reuse);\n }\n }\n\n getClosestPoint(): Vec2Value {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n\n case 1:\n return matrix.copyVec2(closestPoint_reuse, v1.w);\n\n case 2:\n return matrix.combine2Vec2(closestPoint_reuse, v1.a, v1.w, v2.a, v2.w);\n\n case 3:\n return matrix.zeroVec2(closestPoint_reuse);\n\n default:\n _ASSERT && console.assert(false);\n return matrix.zeroVec2(closestPoint_reuse);\n }\n }\n\n getWitnessPoints(pA: Vec2Value, pB: Vec2Value): void {\n const v1 = this.m_v1;\n const v2 = this.m_v2;\n const v3 = this.m_v3;\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n break;\n\n case 1:\n matrix.copyVec2(pA, v1.wA);\n matrix.copyVec2(pB, v1.wB);\n break;\n\n case 2:\n matrix.combine2Vec2(pA, v1.a, v1.wA, v2.a, v2.wA);\n matrix.combine2Vec2(pB, v1.a, v1.wB, v2.a, v2.wB);\n break;\n\n case 3:\n matrix.combine3Vec2(pA, v1.a, v1.wA, v2.a, v2.wA, v3.a, v3.wA);\n matrix.copyVec2(pB, pA);\n break;\n\n default:\n _ASSERT && console.assert(false);\n break;\n }\n }\n\n getMetric(): number {\n switch (this.m_count) {\n case 0:\n _ASSERT && console.assert(false);\n return 0.0;\n\n case 1:\n return 0.0;\n\n case 2:\n return matrix.distVec2(this.m_v1.w, this.m_v2.w);\n\n case 3:\n return matrix.crossVec2Vec2(\n matrix.subVec2(temp1, this.m_v2.w, this.m_v1.w),\n matrix.subVec2(temp2, this.m_v3.w, this.m_v1.w),\n );\n\n default:\n _ASSERT && console.assert(false);\n return 0.0;\n }\n }\n\n solve(): void {\n switch (this.m_count) {\n case 1:\n break;\n\n case 2:\n this.solve2();\n break;\n\n case 3:\n this.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n }\n\n// Solve a line segment using barycentric coordinates.\n//\n// p = a1 * w1 + a2 * w2\n// a1 + a2 = 1\n//\n// The vector from the origin to the closest point on the line is\n// perpendicular to the line.\n// e12 = w2 - w1\n// dot(p, e) = 0\n// a1 * dot(w1, e) + a2 * dot(w2, e) = 0\n//\n// 2-by-2 linear system\n// [1 1 ][a1] = [1]\n// [w1.e12 w2.e12][a2] = [0]\n//\n// Define\n// d12_1 = dot(w2, e12)\n// d12_2 = -dot(w1, e12)\n// d12 = d12_1 + d12_2\n//\n// Solution\n// a1 = d12_1 / d12\n// a2 = d12_2 / d12\n solve2(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n matrix.subVec2(e12, w2, w1);\n\n // w1 region\n const d12_2 = -matrix.dotVec2(w1, e12);\n if (d12_2 <= 0.0) {\n // a2 <= 0, so we clamp it to 0\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // w2 region\n const d12_1 = matrix.dotVec2(w2, e12);\n if (d12_1 <= 0.0) {\n // a1 <= 0, so we clamp it to 0\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // Must be in e12 region.\n const inv_d12 = 1.0 / (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\n// Possible regions:\n// - points[2]\n// - edge points[0]-points[2]\n// - edge points[1]-points[2]\n// - inside the triangle\n solve3(): void {\n const w1 = this.m_v1.w;\n const w2 = this.m_v2.w;\n const w3 = this.m_v3.w;\n\n // Edge12\n // [1 1 ][a1] = [1]\n // [w1.e12 w2.e12][a2] = [0]\n // a3 = 0\n matrix.subVec2(e12, w2, w1);\n const w1e12 = matrix.dotVec2(w1, e12);\n const w2e12 = matrix.dotVec2(w2, e12);\n const d12_1 = w2e12;\n const d12_2 = -w1e12;\n\n // Edge13\n // [1 1 ][a1] = [1]\n // [w1.e13 w3.e13][a3] = [0]\n // a2 = 0\n matrix.subVec2(e13, w3, w1);\n const w1e13 = matrix.dotVec2(w1, e13);\n const w3e13 = matrix.dotVec2(w3, e13);\n const d13_1 = w3e13;\n const d13_2 = -w1e13;\n\n // Edge23\n // [1 1 ][a2] = [1]\n // [w2.e23 w3.e23][a3] = [0]\n // a1 = 0\n matrix.subVec2(e23, w3, w2);\n const w2e23 = matrix.dotVec2(w2, e23);\n const w3e23 = matrix.dotVec2(w3, e23);\n const d23_1 = w3e23;\n const d23_2 = -w2e23;\n\n // Triangle123\n const n123 = matrix.crossVec2Vec2(e12, e13);\n\n const d123_1 = n123 * matrix.crossVec2Vec2(w2, w3);\n const d123_2 = n123 * matrix.crossVec2Vec2(w3, w1);\n const d123_3 = n123 * matrix.crossVec2Vec2(w1, w2);\n\n // w1 region\n if (d12_2 <= 0.0 && d13_2 <= 0.0) {\n this.m_v1.a = 1.0;\n this.m_count = 1;\n return;\n }\n\n // e12\n if (d12_1 > 0.0 && d12_2 > 0.0 && d123_3 <= 0.0) {\n const inv_d12 = 1.0 / (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\n // e13\n if (d13_1 > 0.0 && d13_2 > 0.0 && d123_2 <= 0.0) {\n const inv_d13 = 1.0 / (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\n // w2 region\n if (d12_1 <= 0.0 && d23_2 <= 0.0) {\n this.m_v2.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v2);\n return;\n }\n\n // w3 region\n if (d13_1 <= 0.0 && d23_1 <= 0.0) {\n this.m_v3.a = 1.0;\n this.m_count = 1;\n this.m_v1.set(this.m_v3);\n return;\n }\n\n // e23\n if (d23_1 > 0.0 && d23_2 > 0.0 && d123_1 <= 0.0) {\n const inv_d23 = 1.0 / (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\n // Must be in triangle123\n const inv_d123 = 1.0 / (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}\n\n/** @internal */ const simplex = new Simplex();\n\n/** @internal */ const input = new DistanceInput();\n/** @internal */ const cache = new SimplexCache();\n/** @internal */ const output = new DistanceOutput();\n\n/**\n * Determine if two generic shapes overlap.\n */\nexport const testOverlap = function (shapeA: Shape, indexA: number, shapeB: Shape, indexB: number, xfA: TransformValue, xfB: TransformValue): boolean {\n input.recycle();\n input.proxyA.set(shapeA, indexA);\n input.proxyB.set(shapeB, indexB);\n matrix.copyTransform(input.transformA, xfA);\n matrix.copyTransform(input.transformB, xfB);\n input.useRadii = true;\n\n output.recycle();\n cache.recycle();\n\n Distance(output, cache, input);\n\n return output.distance < 10.0 * EPSILON;\n};\n\n// legacy exports\nDistance.testOverlap = testOverlap;\nDistance.Input = DistanceInput;\nDistance.Output = DistanceOutput;\nDistance.Proxy = DistanceProxy;\nDistance.Cache = SimplexCache;\n\n/**\n * Input parameters for ShapeCast\n */\nexport class ShapeCastInput {\n readonly proxyA = new DistanceProxy();\n readonly proxyB = new DistanceProxy();\n readonly transformA = Transform.identity();\n readonly transformB = Transform.identity();\n readonly translationB = Vec2.zero();\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.transformA.setIdentity();\n this.transformB.setIdentity();\n matrix.zeroVec2(this.translationB);\n }\n}\n\n/**\n * Output results for b2ShapeCast\n */\nexport class ShapeCastOutput {\n point: Vec2 = Vec2.zero();\n normal: Vec2 = Vec2.zero();\n lambda = 1.0;\n iterations = 0;\n}\n\n/**\n * Perform a linear shape cast of shape B moving and shape A fixed. Determines\n * the hit point, normal, and translation fraction.\n * \n * @returns true if hit, false if there is no hit or an initial overlap\n */\n//\n// GJK-raycast\n// Algorithm by Gino van den Bergen.\n// \"Smooth Mesh Contacts with GJK\" in Game Physics Pearls. 2010\nexport const ShapeCast = function(output: ShapeCastOutput, input: ShapeCastInput): boolean {\n output.iterations = 0;\n output.lambda = 1.0;\n output.normal.setZero();\n output.point.setZero();\n\n const proxyA = input.proxyA;\n const proxyB = input.proxyB;\n\n const radiusA = math_max(proxyA.m_radius, Settings.polygonRadius);\n const radiusB = math_max(proxyB.m_radius, Settings.polygonRadius);\n const radius = radiusA + radiusB;\n\n const xfA = input.transformA;\n const xfB = input.transformB;\n\n const r = input.translationB;\n const n = Vec2.zero();\n let lambda = 0.0;\n\n // Initial simplex\n const simplex = new Simplex();\n simplex.m_count = 0;\n\n // Get simplex vertices as an array.\n const vertices = simplex.m_v;\n\n // Get support point in -r direction\n let indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(r)));\n let wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n let indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, r));\n let wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const v = Vec2.sub(wA, wB);\n\n // Sigma is the target distance between polygons\n const sigma = math_max(Settings.polygonRadius, radius - Settings.polygonRadius);\n const tolerance = 0.5 * Settings.linearSlop;\n\n // Main iteration loop.\n const k_maxIters = 20;\n let iter = 0;\n while (iter < k_maxIters && v.length() - sigma > tolerance) {\n _ASSERT && console.assert(simplex.m_count < 3);\n\n output.iterations += 1;\n\n // Support in direction -v (A - B)\n indexA = proxyA.getSupport(Rot.mulTVec2(xfA.q, Vec2.neg(v)));\n wA = Transform.mulVec2(xfA, proxyA.getVertex(indexA));\n indexB = proxyB.getSupport(Rot.mulTVec2(xfB.q, v));\n wB = Transform.mulVec2(xfB, proxyB.getVertex(indexB));\n const p = Vec2.sub(wA, wB);\n\n // -v is a normal at p\n v.normalize();\n\n // Intersect ray with plane\n const vp = Vec2.dot(v, p);\n const vr = Vec2.dot(v, r);\n if (vp - sigma > lambda * vr) {\n if (vr <= 0.0) {\n return false;\n }\n\n lambda = (vp - sigma) / vr;\n if (lambda > 1.0) {\n return false;\n }\n\n n.setMul(-1, v);\n simplex.m_count = 0;\n }\n\n // Reverse simplex since it works with B - A.\n // Shift by lambda * r because we want the closest point to the current clip point.\n // Note that the support point p is not shifted because we want the plane equation\n // to be formed in unshifted space.\n const vertex = vertices[simplex.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.0;\n simplex.m_count += 1;\n\n switch (simplex.m_count) {\n case 1:\n break;\n\n case 2:\n simplex.solve2();\n break;\n\n case 3:\n simplex.solve3();\n break;\n\n default:\n _ASSERT && console.assert(false);\n }\n \n // If we have 3 points, then the origin is in the corresponding triangle.\n if (simplex.m_count == 3) {\n // Overlap\n return false;\n }\n\n // Get search direction.\n v.setVec2(simplex.getClosestPoint());\n\n // Iteration count is equated to the number of support point calls.\n ++iter;\n }\n\n if (iter == 0) {\n // Initial overlap\n return false;\n\t}\n\n // Prepare output.\n const pointA = Vec2.zero();\n const pointB = Vec2.zero();\n simplex.getWitnessPoints(pointB, pointA);\n\n if (v.lengthSquared() > 0.0) {\n n.setMul(-1, v);\n n.normalize();\n }\n\n output.point = Vec2.combine(1, pointA, radiusA, n);\n output.normal = n;\n output.lambda = lambda;\n output.iterations = iter;\n return true;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { stats } from \"../util/stats\";\nimport Timer from \"../util/Timer\";\nimport { Sweep } from \"../common/Sweep\";\nimport { Transform } from \"../common/Transform\";\nimport { Distance, DistanceInput, DistanceOutput, DistanceProxy, SimplexCache } from \"./Distance\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n\n\n/**\n * Input parameters for TimeOfImpact.\n */\nexport class TOIInput {\n proxyA = new DistanceProxy();\n proxyB = new DistanceProxy();\n sweepA = new Sweep();\n sweepB = new Sweep();\n /** defines sweep interval [0, tMax] */\n tMax: number;\n recycle() {\n this.proxyA.recycle();\n this.proxyB.recycle();\n this.sweepA.recycle();\n this.sweepB.recycle();\n this.tMax = -1;\n }\n}\n\nexport enum TOIOutputState {\n e_unset = -1,\n e_unknown = 0,\n e_failed = 1,\n e_overlapped = 2,\n e_touching = 3,\n e_separated = 4,\n}\n\n/**\n * Output parameters for TimeOfImpact.\n */\nexport class TOIOutput {\n state = TOIOutputState.e_unset;\n t = -1;\n recycle() {\n this.state = TOIOutputState.e_unset;\n this.t = -1;\n }\n}\n\nstats.toiTime = 0;\nstats.toiMaxTime = 0;\nstats.toiCalls = 0;\nstats.toiIters = 0;\nstats.toiMaxIters = 0;\nstats.toiRootIters = 0;\nstats.toiMaxRootIters = 0;\n\n/** @internal */ const distanceInput = new DistanceInput();\n/** @internal */ const distanceOutput = new DistanceOutput();\n// this is passed to Distance and SeparationFunction\n/** @internal */ const cache = new SimplexCache();\n\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const axisA = matrix.vec2(0, 0);\n/** @internal */ const axisB = matrix.vec2(0, 0);\n/** @internal */ const localPointA = matrix.vec2(0, 0);\n/** @internal */ const localPointB = matrix.vec2(0, 0);\n\n\n/**\n * Compute the upper bound on time before two shapes penetrate. Time is\n * represented as a fraction between [0,tMax]. This uses a swept separating axis\n * and may miss some intermediate, non-tunneling collisions. If you change the\n * time interval, you should call this function again.\n *\n * Note: use Distance to compute the contact point and normal at the time of\n * impact.\n *\n * CCD via the local separating axis method. This seeks progression by computing\n * the largest time at which separation is maintained.\n */\nexport const TimeOfImpact = function (output: TOIOutput, input: TOIInput): void {\n const timer = Timer.now();\n\n ++stats.toiCalls;\n\n output.state = TOIOutputState.e_unknown;\n output.t = input.tMax;\n\n const proxyA = input.proxyA; // DistanceProxy\n const proxyB = input.proxyB; // DistanceProxy\n\n const sweepA = input.sweepA; // Sweep\n const sweepB = input.sweepB; // Sweep\n\n // Large rotations can make the root finder fail, so we normalize the\n // sweep angles.\n sweepA.normalize();\n sweepB.normalize();\n\n const tMax = input.tMax;\n\n const totalRadius = proxyA.m_radius + proxyB.m_radius;\n const target = math_max(Settings.linearSlop, totalRadius - 3.0 * Settings.linearSlop);\n const tolerance = 0.25 * Settings.linearSlop;\n _ASSERT && console.assert(target > tolerance);\n\n let t1 = 0.0;\n const k_maxIterations = Settings.maxTOIIterations;\n let iter = 0;\n\n // Prepare input for distance query.\n // const cache = new SimplexCache();\n cache.recycle();\n\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\n // The outer loop progressively attempts to compute new separating axes.\n // This loop terminates when an axis is repeated (no progress is made).\n while (true) {\n sweepA.getTransform(xfA, t1);\n sweepB.getTransform(xfB, t1);\n\n // Get the distance between shapes. We can also use the results\n // to get a separating axis.\n matrix.copyTransform(distanceInput.transformA, xfA);\n matrix.copyTransform(distanceInput.transformB, xfB);\n Distance(distanceOutput, cache, distanceInput);\n\n // If the shapes are overlapped, we give up on continuous collision.\n if (distanceOutput.distance <= 0.0) {\n // Failure!\n output.state = TOIOutputState.e_overlapped;\n output.t = 0.0;\n break;\n }\n\n if (distanceOutput.distance < target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n break;\n }\n\n // Initialize the separating axis.\n separationFunction.initialize(cache, proxyA, sweepA, proxyB, sweepB, t1);\n\n // if (false) {\n // // Dump the curve seen by the root finder\n // const N = 100;\n // const dx = 1.0 / N;\n // const xs = []; // [ N + 1 ];\n // const fs = []; // [ N + 1 ];\n // const x = 0.0;\n // for (const i = 0; i <= N; ++i) {\n // sweepA.getTransform(xfA, x);\n // sweepB.getTransform(xfB, x);\n // const f = fcn.evaluate(xfA, xfB) - target;\n // printf(\"%g %g\\n\", x, f);\n // xs[i] = x;\n // fs[i] = f;\n // x += dx;\n // }\n // }\n\n // Compute the TOI on the separating axis. We do this by successively\n // resolving the deepest point. This loop is bounded by the number of\n // vertices.\n let done = false;\n let t2 = tMax;\n let pushBackIter = 0;\n while (true) {\n // Find the deepest point at t2. Store the witness point indices.\n let s2 = separationFunction.findMinSeparation(t2);\n\n // Is the final configuration separated?\n if (s2 > target + tolerance) {\n // Victory!\n output.state = TOIOutputState.e_separated;\n output.t = tMax;\n done = true;\n break;\n }\n\n // Has the separation reached tolerance?\n if (s2 > target - tolerance) {\n // Advance the sweeps\n t1 = t2;\n break;\n }\n\n // Compute the initial separation of the witness points.\n let s1 = separationFunction.evaluate(t1);\n\n // Check for initial overlap. This might happen if the root finder\n // runs out of iterations.\n if (s1 < target - tolerance) {\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n done = true;\n break;\n }\n\n // Check for touching\n if (s1 <= target + tolerance) {\n // Victory! t1 should hold the TOI (could be 0.0).\n output.state = TOIOutputState.e_touching;\n output.t = t1;\n done = true;\n break;\n }\n\n // Compute 1D root of: f(x) - target = 0\n let rootIterCount = 0;\n let a1 = t1;\n let a2 = t2;\n while (true) {\n // Use a mix of the secant rule and bisection.\n let t;\n if (rootIterCount & 1) {\n // Secant rule to improve convergence.\n t = a1 + (target - s1) * (a2 - a1) / (s2 - s1);\n } else {\n // Bisection to guarantee progress.\n t = 0.5 * (a1 + a2);\n }\n\n ++rootIterCount;\n ++stats.toiRootIters;\n\n const s = separationFunction.evaluate(t);\n\n if (math_abs(s - target) < tolerance) {\n // t2 holds a tentative value for t1\n t2 = t;\n break;\n }\n\n // Ensure we continue to bracket the root.\n if (s > target) {\n a1 = t;\n s1 = s;\n } else {\n a2 = t;\n s2 = s;\n }\n\n if (rootIterCount === 50) {\n break;\n }\n }\n\n stats.toiMaxRootIters = math_max(stats.toiMaxRootIters, rootIterCount);\n\n ++pushBackIter;\n\n if (pushBackIter === Settings.maxPolygonVertices) {\n break;\n }\n }\n\n ++iter;\n ++stats.toiIters;\n\n if (done) {\n break;\n }\n\n if (iter === k_maxIterations) {\n // Root finder got stuck. Semi-victory.\n output.state = TOIOutputState.e_failed;\n output.t = t1;\n break;\n }\n }\n\n stats.toiMaxIters = math_max(stats.toiMaxIters, iter);\n\n const time = Timer.diff(timer);\n stats.toiMaxTime = math_max(stats.toiMaxTime, time);\n stats.toiTime += time;\n\n separationFunction.recycle();\n};\n\nenum SeparationFunctionType {\n e_unset = -1,\n e_points = 1,\n e_faceA = 2,\n e_faceB = 3,\n}\n\nclass SeparationFunction {\n // input cache\n // todo: maybe assign by copy instead of reference?\n m_proxyA: DistanceProxy = null;\n m_proxyB: DistanceProxy = null;\n m_sweepA: Sweep = null;\n m_sweepB: Sweep = null;\n\n // initialize cache\n m_type = SeparationFunctionType.e_unset;\n m_localPoint = matrix.vec2(0, 0);\n m_axis = matrix.vec2(0, 0);\n\n // compute output\n indexA = -1;\n indexB = -1;\n\n recycle() {\n this.m_proxyA = null;\n this.m_proxyB = null;\n this.m_sweepA = null;\n this.m_sweepB = null;\n\n this.m_type = SeparationFunctionType.e_unset;\n matrix.zeroVec2(this.m_localPoint);\n matrix.zeroVec2(this.m_axis);\n\n this.indexA = -1;\n this.indexB = -1;\n }\n\n // TODO_ERIN might not need to return the separation\n\n initialize(cache: SimplexCache, proxyA: DistanceProxy, sweepA: Sweep, proxyB: DistanceProxy, sweepB: Sweep, t1: number): number {\n const count = cache.count;\n _ASSERT && console.assert(0 < count && count < 3);\n\n this.m_proxyA = proxyA;\n this.m_proxyB = proxyB;\n this.m_sweepA = sweepA;\n this.m_sweepB = sweepB;\n\n this.m_sweepA.getTransform(xfA, t1);\n this.m_sweepB.getTransform(xfB, t1);\n\n if (count === 1) {\n this.m_type = SeparationFunctionType.e_points;\n const localPointA = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n matrix.subVec2(this.m_axis, pointB, pointA);\n const s = matrix.normalizeVec2Length(this.m_axis);\n return s;\n\n } else if (cache.indexA[0] === cache.indexA[1]) {\n // Two points on B and one on A.\n this.m_type = SeparationFunctionType.e_faceB;\n const localPointB1 = proxyB.getVertex(cache.indexB[0]);\n const localPointB2 = proxyB.getVertex(cache.indexB[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointB2, localPointB1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointB1, 0.5, localPointB2);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n const localPointA = proxyA.getVertex(cache.indexA[0]);\n const pointA = Transform.mulVec2(xfA, localPointA);\n\n let s = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n\n } else {\n // Two points on A and one or two points on B.\n this.m_type = SeparationFunctionType.e_faceA;\n const localPointA1 = this.m_proxyA.getVertex(cache.indexA[0]);\n const localPointA2 = this.m_proxyA.getVertex(cache.indexA[1]);\n\n matrix.crossVec2Num(this.m_axis, matrix.subVec2(temp, localPointA2, localPointA1), 1.0);\n matrix.normalizeVec2(this.m_axis);\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n\n matrix.combine2Vec2(this.m_localPoint, 0.5, localPointA1, 0.5, localPointA2);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n const localPointB = this.m_proxyB.getVertex(cache.indexB[0]);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n let s = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n if (s < 0.0) {\n matrix.negVec2(this.m_axis);\n s = -s;\n }\n return s;\n }\n }\n\n compute(find: boolean, t: number): number {\n // It was findMinSeparation and evaluate\n this.m_sweepA.getTransform(xfA, t);\n this.m_sweepB.getTransform(xfB, t);\n\n switch (this.m_type) {\n case SeparationFunctionType.e_points: {\n if (find) {\n matrix.derotVec2(axisA, xfA.q, this.m_axis);\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, this.m_axis));\n\n this.indexA = this.m_proxyA.getSupport(axisA);\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n\n matrix.transformVec2(pointA, xfA, localPointA);\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, this.m_axis) - matrix.dotVec2(pointA, this.m_axis);\n return sep;\n }\n\n case SeparationFunctionType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.m_axis);\n matrix.transformVec2(pointA, xfA, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisB, xfB.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexA = -1;\n this.indexB = this.m_proxyB.getSupport(axisB);\n }\n\n matrix.copyVec2(localPointB, this.m_proxyB.getVertex(this.indexB));\n matrix.transformVec2(pointB, xfB, localPointB);\n\n const sep = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal);\n return sep;\n }\n\n case SeparationFunctionType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.m_axis);\n matrix.transformVec2(pointB, xfB, this.m_localPoint);\n\n if (find) {\n matrix.derotVec2(axisA, xfA.q, matrix.scaleVec2(temp, -1, normal));\n\n this.indexB = -1;\n this.indexA = this.m_proxyA.getSupport(axisA);\n }\n\n matrix.copyVec2(localPointA, this.m_proxyA.getVertex(this.indexA));\n matrix.transformVec2(pointA, xfA, localPointA);\n\n const sep = matrix.dotVec2(pointA, normal) - matrix.dotVec2(pointB, normal);\n return sep;\n }\n\n default:\n _ASSERT && console.assert(false);\n if (find) {\n this.indexA = -1;\n this.indexB = -1;\n }\n return 0.0;\n }\n }\n\n findMinSeparation(t: number): number {\n return this.compute(true, t);\n }\n\n evaluate(t: number): number {\n return this.compute(false, t);\n }\n}\n\n/** @internal */ const separationFunction = new SeparationFunction();\n\n// legacy exports\nTimeOfImpact.Input = TOIInput;\nTimeOfImpact.Output = TOIOutput;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { EPSILON } from \"../common/Math\";\nimport { Body } from \"./Body\";\nimport type { Contact } from \"./Contact\";\nimport { Joint } from \"./Joint\";\nimport { TimeOfImpact, TOIInput, TOIOutput, TOIOutputState } from \"../collision/TimeOfImpact\";\nimport { Distance, DistanceInput, DistanceOutput, SimplexCache } from \"../collision/Distance\";\nimport { World } from \"./World\";\nimport { Sweep } from \"../common/Sweep\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_min = Math.min;\n\n\nexport class TimeStep {\n /** time step */\n dt: number = 0;\n /** inverse time step (0 if dt == 0) */\n inv_dt: number = 0;\n velocityIterations: number = 0;\n positionIterations: number = 0;\n warmStarting: boolean = false;\n blockSolve: boolean = true;\n\n /** timestep ratio for variable timestep */\n inv_dt0: number = 0.0;\n /** dt * inv_dt0 */\n dtRatio: number = 1;\n\n reset(dt: number): void {\n if (this.dt > 0.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}\n\n// reuse\n/** @internal */ const s_subStep = new TimeStep();\n/** @internal */ const c = matrix.vec2(0, 0);\n/** @internal */ const v = matrix.vec2(0, 0);\n/** @internal */ const translation = matrix.vec2(0, 0);\n/** @internal */ const input = new TOIInput();\n/** @internal */ const output = new TOIOutput();\n/** @internal */ const backup = new Sweep();\n/** @internal */ const backup1 = new Sweep();\n/** @internal */ const backup2 = new Sweep();\n\n/**\n * Contact impulses for reporting. Impulses are used instead of forces because\n * sub-step forces may approach infinity for rigid body collisions. These match\n * up one-to-one with the contact points in Manifold.\n */\nexport class ContactImpulse {\n // TODO: merge with Contact class?\n\n private readonly contact: Contact;\n private readonly normals: number[];\n private readonly tangents: number[];\n\n constructor(contact: Contact) {\n this.contact = contact;\n this.normals = [];\n this.tangents = [];\n }\n\n recycle() {\n this.normals.length = 0;\n this.tangents.length = 0;\n }\n\n get normalImpulses(): number[] {\n const contact = this.contact;\n const normals = this.normals;\n normals.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n normals.push(contact.v_points[p].normalImpulse);\n }\n return normals;\n }\n\n get tangentImpulses(): number[] {\n const contact = this.contact;\n const tangents = this.tangents;\n tangents.length = 0;\n for (let p = 0; p < contact.v_points.length; ++p) {\n tangents.push(contact.v_points[p].tangentImpulse);\n }\n return tangents;\n }\n}\n\n/**\n * Finds and solves islands. An island is a connected subset of the world.\n */\nexport class Solver {\n m_world: World;\n m_stack: Body[];\n m_bodies: Body[];\n m_contacts: Contact[];\n m_joints: Joint[];\n\n constructor(world: World) {\n this.m_world = world;\n this.m_stack = [];\n this.m_bodies = [];\n this.m_contacts = [];\n this.m_joints = [];\n }\n\n clear(): void {\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\n addBody(body: Body): void {\n _ASSERT && console.assert(body instanceof Body, \"Not a Body!\", body);\n this.m_bodies.push(body);\n // why?\n // body.c_position.c.setZero();\n // body.c_position.a = 0;\n // body.c_velocity.v.setZero();\n // body.c_velocity.w = 0;\n }\n\n addContact(contact: Contact): void {\n // _ASSERT && console.assert(contact instanceof Contact, 'Not a Contact!', contact);\n this.m_contacts.push(contact);\n }\n\n addJoint(joint: Joint): void {\n _ASSERT && console.assert(joint instanceof Joint, \"Not a Joint!\", joint);\n this.m_joints.push(joint);\n }\n\n solveWorld(step: TimeStep): void {\n const world = this.m_world;\n\n // Clear all the island flags.\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n }\n for (let c = world.m_contactList; c; c = c.m_next) {\n c.m_islandFlag = false;\n }\n for (let j = world.m_jointList; j; j = j.m_next) {\n j.m_islandFlag = false;\n }\n\n // Build and simulate all awake islands.\n const stack = this.m_stack;\n let loop = -1;\n for (let seed = world.m_bodyList; seed; seed = seed.m_next) {\n loop++;\n if (seed.m_islandFlag) {\n continue;\n }\n\n if (seed.isAwake() == false || seed.isActive() == false) {\n continue;\n }\n\n // The seed can be dynamic or kinematic.\n if (seed.isStatic()) {\n continue;\n }\n\n // Reset island and stack.\n this.clear();\n\n stack.push(seed);\n\n seed.m_islandFlag = true;\n\n // Perform a depth first search (DFS) on the constraint graph.\n while (stack.length > 0) {\n // Grab the next body off the stack and add it to the island.\n const b = stack.pop();\n _ASSERT && console.assert(b.isActive() == true);\n this.addBody(b);\n\n // Make sure the body is awake (without resetting sleep timer).\n b.m_awakeFlag = true;\n\n // To keep islands as small as possible, we don't\n // propagate islands across static bodies.\n if (b.isStatic()) {\n continue;\n }\n\n // Search all contacts connected to this body.\n for (let ce = b.m_contactList; ce; ce = ce.next) {\n const contact = ce.contact;\n\n // Has this contact already been added to an island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Is this contact solid and touching?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n this.addContact(contact);\n contact.m_islandFlag = true;\n\n const other = ce.other;\n\n // Was the other body already added to this island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n\n // Search all joints connect to this body.\n for (let je = b.m_jointList; je; je = je.next) {\n if (je.joint.m_islandFlag == true) {\n continue;\n }\n\n const other = je.other;\n\n // Don't simulate joints connected to inactive bodies.\n if (other.isActive() == false) {\n continue;\n }\n\n this.addJoint(je.joint);\n je.joint.m_islandFlag = true;\n\n if (other.m_islandFlag) {\n continue;\n }\n\n // _ASSERT && console.assert(stack.length < world.m_bodyCount);\n stack.push(other);\n other.m_islandFlag = true;\n }\n }\n\n this.solveIsland(step);\n\n // Post solve cleanup.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n // Allow static bodies to participate in other islands.\n // TODO: are they added at all?\n const b = this.m_bodies[i];\n if (b.isStatic()) {\n b.m_islandFlag = false;\n }\n }\n }\n }\n\n solveIsland(step: TimeStep): void {\n // B2: Island Solve\n const world = this.m_world;\n const gravity = world.m_gravity;\n const allowSleep = world.m_allowSleep;\n\n const h = step.dt;\n\n // Integrate velocities and apply damping. Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.m_sweep.c);\n const a = body.m_sweep.a;\n matrix.copyVec2(v, body.m_linearVelocity);\n let w = body.m_angularVelocity;\n\n // Store positions for continuous collision.\n matrix.copyVec2(body.m_sweep.c0, body.m_sweep.c);\n body.m_sweep.a0 = body.m_sweep.a;\n\n if (body.isDynamic()) {\n // Integrate velocities.\n matrix.plusScaleVec2(v, h * body.m_gravityScale, gravity);\n matrix.plusScaleVec2(v, h * body.m_invMass, body.m_force);\n w += h * body.m_invI * body.m_torque;\n /**\n *
\n         * Apply damping.\n         * ODE: dv/dt + c * v = 0\n         * Solution: v(t) = v0 * exp(-c * t)\n         * Time step: v(t + dt) = v0 * exp(-c * (t + dt)) = v0 * exp(-c * t) * exp(-c * dt) = v * exp(-c * dt)\n         * v2 = exp(-c * dt) * v1\n         * Pade approximation:\n         * v2 = v1 * 1 / (1 + c * dt)\n         * 
\n */\n matrix.scaleVec2(v, 1.0 / (1.0 + h * body.m_linearDamping), v);\n w *= 1.0 / (1.0 + h * body.m_angularDamping);\n }\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(step);\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(step);\n }\n\n if (step.warmStarting) {\n // Warm start.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.warmStartConstraint(step);\n }\n }\n\n for (let i = 0; i < this.m_joints.length; ++i) {\n const joint = this.m_joints[i];\n joint.initVelocityConstraints(step);\n }\n\n // Solve velocity constraints\n for (let i = 0; i < step.velocityIterations; ++i) {\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n joint.solveVelocityConstraints(step);\n }\n\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(step);\n }\n }\n\n // Store impulses for warm starting\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.storeConstraintImpulses(step);\n }\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n }\n\n // Solve position constraints\n let positionSolved = false;\n for (let i = 0; i < step.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraint(step);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -3.0 * Settings.linearSlop;\n\n let jointsOkay = true;\n for (let j = 0; j < this.m_joints.length; ++j) {\n const joint = this.m_joints[j];\n const jointOkay = joint.solvePositionConstraints(step);\n jointsOkay = jointsOkay && jointOkay;\n }\n\n if (contactsOkay && jointsOkay) {\n // Exit early if the position errors are small.\n positionSolved = true;\n break;\n }\n }\n\n // Copy state buffers back to the bodies\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(body.m_sweep.c, body.c_position.c);\n body.m_sweep.a = body.c_position.a;\n matrix.copyVec2(body.m_linearVelocity, body.c_velocity.v);\n body.m_angularVelocity = body.c_velocity.w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n\n if (allowSleep) {\n let minSleepTime = Infinity;\n\n const linTolSqr = Settings.linearSleepToleranceSqr;\n const angTolSqr = Settings.angularSleepToleranceSqr;\n\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n if (body.isStatic()) {\n continue;\n }\n\n if ((body.m_autoSleepFlag == false)\n || (body.m_angularVelocity * body.m_angularVelocity > angTolSqr)\n || (matrix.lengthSqrVec2(body.m_linearVelocity) > linTolSqr)) {\n body.m_sleepTime = 0.0;\n minSleepTime = 0.0;\n } else {\n body.m_sleepTime += h;\n minSleepTime = math_min(minSleepTime, body.m_sleepTime);\n }\n }\n\n if (minSleepTime >= Settings.timeToSleep && positionSolved) {\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.setAwake(false);\n }\n }\n }\n }\n\n /**\n * Find TOI contacts and solve them.\n */\n solveWorldTOI(step: TimeStep): void {\n const world = this.m_world;\n\n if (world.m_stepComplete) {\n for (let b = world.m_bodyList; b; b = b.m_next) {\n b.m_islandFlag = false;\n b.m_sweep.alpha0 = 0.0;\n }\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Invalidate TOI\n c.m_toiFlag = false;\n c.m_islandFlag = false;\n c.m_toiCount = 0;\n c.m_toi = 1.0;\n }\n }\n\n // Find TOI events and solve them.\n while (true) {\n // Find the first TOI.\n let minContact: Contact | null = null;\n let minAlpha = 1.0;\n\n for (let c = world.m_contactList; c; c = c.m_next) {\n // Is this contact disabled?\n if (c.isEnabled() == false) {\n continue;\n }\n\n // Prevent excessive sub-stepping.\n if (c.m_toiCount > Settings.maxSubSteps) {\n continue;\n }\n\n let alpha = 1.0;\n if (c.m_toiFlag) {\n // This contact has a valid cached TOI.\n alpha = c.m_toi;\n } else {\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n // Is there a sensor?\n if (fA.isSensor() || fB.isSensor()) {\n continue;\n }\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n _ASSERT && console.assert(bA.isDynamic() || bB.isDynamic());\n\n const activeA = bA.isAwake() && !bA.isStatic();\n const activeB = bB.isAwake() && !bB.isStatic();\n\n // Is at least one body active (awake and dynamic or kinematic)?\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const collideA = bA.isBullet() || !bA.isDynamic();\n const collideB = bB.isBullet() || !bB.isDynamic();\n\n // Are these two non-bullet dynamic bodies?\n if (collideA == false && collideB == false) {\n continue;\n }\n\n // Compute the TOI for this contact.\n // Put the sweeps onto the same time interval.\n let alpha0 = bA.m_sweep.alpha0;\n\n if (bA.m_sweep.alpha0 < bB.m_sweep.alpha0) {\n alpha0 = bB.m_sweep.alpha0;\n bA.m_sweep.advance(alpha0);\n } else if (bB.m_sweep.alpha0 < bA.m_sweep.alpha0) {\n alpha0 = bA.m_sweep.alpha0;\n bB.m_sweep.advance(alpha0);\n }\n\n _ASSERT && console.assert(alpha0 < 1.0);\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const sweepA = bA.m_sweep;\n const sweepB = bB.m_sweep;\n\n // Compute the time of impact in interval [0, minTOI]\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.sweepA.set(bA.m_sweep);\n input.sweepB.set(bB.m_sweep);\n input.tMax = 1.0;\n\n TimeOfImpact(output, input);\n\n // Beta is the fraction of the remaining portion of the [time?].\n const beta = output.t;\n if (output.state == TOIOutputState.e_touching) {\n alpha = math_min(alpha0 + (1.0 - alpha0) * beta, 1.0);\n } else {\n alpha = 1.0;\n }\n\n c.m_toi = alpha;\n c.m_toiFlag = true;\n }\n\n if (alpha < minAlpha) {\n // This is the minimum TOI found so far.\n minContact = c;\n minAlpha = alpha;\n }\n }\n\n if (minContact == null || 1.0 - 10.0 * EPSILON < minAlpha) {\n // No more TOI events. Done!\n world.m_stepComplete = true;\n break;\n }\n\n // Advance the bodies to the TOI.\n const fA = minContact.getFixtureA();\n const fB = minContact.getFixtureB();\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n backup1.set(bA.m_sweep);\n backup2.set(bB.m_sweep);\n\n bA.advance(minAlpha);\n bB.advance(minAlpha);\n\n // The TOI contact likely has some new contact points.\n minContact.update(world);\n minContact.m_toiFlag = false;\n ++minContact.m_toiCount;\n\n // Is the contact solid?\n if (minContact.isEnabled() == false || minContact.isTouching() == false) {\n // Restore the sweeps.\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\n bA.setAwake(true);\n bB.setAwake(true);\n\n // Build the island\n this.clear();\n this.addBody(bA);\n this.addBody(bB);\n this.addContact(minContact);\n\n bA.m_islandFlag = true;\n bB.m_islandFlag = true;\n minContact.m_islandFlag = true;\n\n // Get contacts on bodyA and bodyB.\n const bodies = [ bA, bB ];\n for (let i = 0; i < bodies.length; ++i) {\n const body = bodies[i];\n if (body.isDynamic()) {\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n // if (this.m_bodyCount == this.m_bodyCapacity) { break; }\n // if (this.m_contactCount == this.m_contactCapacity) { break; }\n\n const contact = ce.contact;\n\n // Has this contact already been added to the island?\n if (contact.m_islandFlag) {\n continue;\n }\n\n // Only add if either is static, kinematic or bullet.\n const other = ce.other;\n if (other.isDynamic() && !body.isBullet() && !other.isBullet()) {\n continue;\n }\n\n // Skip sensors.\n const sensorA = contact.m_fixtureA.m_isSensor;\n const sensorB = contact.m_fixtureB.m_isSensor;\n if (sensorA || sensorB) {\n continue;\n }\n\n // Tentatively advance the body to the TOI.\n backup.set(other.m_sweep);\n if (other.m_islandFlag == false) {\n other.advance(minAlpha);\n }\n\n // Update the contact points\n contact.update(world);\n\n // Was the contact disabled by the user?\n // Are there contact points?\n if (contact.isEnabled() == false || contact.isTouching() == false) {\n other.m_sweep.set(backup);\n other.synchronizeTransform();\n continue;\n }\n\n // Add the contact to the island\n contact.m_islandFlag = true;\n this.addContact(contact);\n\n // Has the other body already been added to the island?\n if (other.m_islandFlag) {\n continue;\n }\n\n // Add the other body to the island.\n other.m_islandFlag = true;\n\n if (!other.isStatic()) {\n other.setAwake(true);\n }\n\n this.addBody(other);\n }\n }\n }\n\n s_subStep.reset((1.0 - minAlpha) * step.dt);\n s_subStep.dtRatio = 1.0;\n s_subStep.positionIterations = 20;\n s_subStep.velocityIterations = step.velocityIterations;\n s_subStep.warmStarting = false;\n\n this.solveIslandTOI(s_subStep, bA, bB);\n\n // Reset island flags and synchronize broad-phase proxies.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n body.m_islandFlag = false;\n\n if (!body.isDynamic()) {\n continue;\n }\n\n body.synchronizeFixtures();\n\n // Invalidate all contact TOIs on this displaced body.\n for (let ce = body.m_contactList; ce; ce = ce.next) {\n ce.contact.m_toiFlag = false;\n ce.contact.m_islandFlag = false;\n }\n }\n\n // Commit fixture proxy movements to the broad-phase so that new contacts\n // are created.\n // Also, some contacts can be destroyed.\n world.findNewContacts();\n\n if (world.m_subStepping) {\n world.m_stepComplete = false;\n break;\n }\n }\n }\n\n solveIslandTOI(subStep: TimeStep, toiA: Body, toiB: Body): void {\n\n // Initialize the body state.\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n matrix.copyVec2(body.c_position.c, body.m_sweep.c);\n body.c_position.a = body.m_sweep.a;\n matrix.copyVec2(body.c_velocity.v, body.m_linearVelocity);\n body.c_velocity.w = body.m_angularVelocity;\n }\n\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initConstraint(subStep);\n }\n\n // Solve position constraints.\n for (let i = 0; i < subStep.positionIterations; ++i) {\n let minSeparation = 0.0;\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n const separation = contact.solvePositionConstraintTOI(subStep, toiA, toiB);\n minSeparation = math_min(minSeparation, separation);\n }\n // We can't expect minSpeparation >= -Settings.linearSlop because we don't\n // push the separation above -Settings.linearSlop.\n const contactsOkay = minSeparation >= -1.5 * Settings.linearSlop;\n if (contactsOkay) {\n break;\n }\n }\n\n if (false) {\n // Is the new position really safe?\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const c = this.m_contacts[i];\n const fA = c.getFixtureA();\n const fB = c.getFixtureB();\n\n const bA = fA.getBody();\n const bB = fB.getBody();\n\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n\n const input = new DistanceInput();\n input.proxyA.set(fA.getShape(), indexA);\n input.proxyB.set(fB.getShape(), indexB);\n input.transformA.set(bA.getTransform());\n input.transformB.set(bB.getTransform());\n input.useRadii = false;\n\n const output = new DistanceOutput();\n const cache = new SimplexCache();\n Distance(output, cache, input);\n\n if (output.distance == 0 || cache.count == 3) {\n cache.count += 0;\n }\n }\n }\n\n // Leap of faith to new safe state.\n matrix.copyVec2(toiA.m_sweep.c0, toiA.c_position.c);\n toiA.m_sweep.a0 = toiA.c_position.a;\n matrix.copyVec2(toiB.m_sweep.c0, toiB.c_position.c);\n toiB.m_sweep.a0 = toiB.c_position.a;\n\n // No warm starting is needed for TOI events because warm\n // starting impulses were applied in the discrete solver.\n for (let i = 0; i < this.m_contacts.length; ++i) {\n const contact = this.m_contacts[i];\n contact.initVelocityConstraint(subStep);\n }\n\n // Solve velocity constraints.\n for (let i = 0; i < subStep.velocityIterations; ++i) {\n for (let j = 0; j < this.m_contacts.length; ++j) {\n const contact = this.m_contacts[j];\n contact.solveVelocityConstraint(subStep);\n }\n }\n\n // Don't store the TOI contact forces for warm starting\n // because they can be quite large.\n\n const h = subStep.dt;\n\n // Integrate positions\n for (let i = 0; i < this.m_bodies.length; ++i) {\n const body = this.m_bodies[i];\n\n matrix.copyVec2(c, body.c_position.c);\n let a = body.c_position.a;\n matrix.copyVec2(v, body.c_velocity.v);\n let w = body.c_velocity.w;\n\n // Check for large velocities\n matrix.scaleVec2(translation, h, v);\n const translationLengthSqr = matrix.lengthSqrVec2(translation);\n if (translationLengthSqr > Settings.maxTranslationSquared) {\n const ratio = Settings.maxTranslation / math_sqrt(translationLengthSqr);\n matrix.mulVec2(v, ratio);\n }\n\n const rotation = h * w;\n if (rotation * rotation > Settings.maxRotationSquared) {\n const ratio = Settings.maxRotation / math_abs(rotation);\n w *= ratio;\n }\n\n // Integrate\n matrix.plusScaleVec2(c, h, v);\n a += h * w;\n\n matrix.copyVec2(body.c_position.c, c);\n body.c_position.a = a;\n matrix.copyVec2(body.c_velocity.v, v);\n body.c_velocity.w = w;\n\n // Sync bodies\n matrix.copyVec2(body.m_sweep.c, c);\n body.m_sweep.a = a;\n matrix.copyVec2(body.m_linearVelocity, v);\n body.m_angularVelocity = w;\n body.synchronizeTransform();\n }\n\n this.postSolveIsland();\n }\n\n /** @internal */\n postSolveIsland(): void {\n for (let c = 0; c < this.m_contacts.length; ++c) {\n const contact = this.m_contacts[c];\n this.m_world.postSolve(contact, contact.m_impulse);\n }\n }\n}\n\n// @ts-ignore\nSolver.TimeStep = TimeStep;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 2-by-2 matrix. Stored in column-major order.\n */\nexport class Mat22 {\n ex: Vec2;\n ey: Vec2;\n\n constructor(a: number, b: number, c: number, d: number);\n constructor(a: { x: number; y: number }, b: { x: number; y: number });\n constructor();\n constructor(a?, b?, c?, d?) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec2.clone(a);\n this.ey = Vec2.clone(b);\n } else if (typeof a === \"number\") {\n this.ex = Vec2.neo(a, c);\n this.ey = Vec2.neo(b, d);\n } else {\n this.ex = Vec2.zero();\n this.ey = Vec2.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\n if (obj === null || typeof obj === \"undefined\") {\n return false;\n }\n return Vec2.isValid(obj.ex) && Vec2.isValid(obj.ey);\n }\n\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat22.isValid(o), \"Invalid Mat22!\", o);\n }\n\n set(a: Mat22): void;\n set(a: Vec2Value, b: Vec2Value): void;\n set(a: number, b: number, c: number, d: number): void;\n set(a, b?, c?, d?): void {\n if (typeof a === \"number\" && typeof b === \"number\" && typeof c === \"number\"\n && typeof d === \"number\") {\n this.ex.setNum(a, c);\n this.ey.setNum(b, d);\n\n } else if (typeof a === \"object\" && typeof b === \"object\") {\n this.ex.setVec2(a);\n this.ey.setVec2(b);\n\n } else if (typeof a === \"object\") {\n _ASSERT && Mat22.assert(a);\n this.ex.setVec2(a.ex);\n this.ey.setVec2(a.ey);\n\n } else {\n _ASSERT && console.assert(false);\n }\n }\n\n setIdentity(): void {\n this.ex.x = 1.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 1.0;\n }\n\n setZero(): void {\n this.ex.x = 0.0;\n this.ey.x = 0.0;\n this.ex.y = 0.0;\n this.ey.y = 0.0;\n }\n\n getInverse(): Mat22 {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const imx = new Mat22();\n imx.ex.x = det * d;\n imx.ey.x = -det * b;\n imx.ex.y = -det * c;\n imx.ey.y = det * a;\n return imx;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve(v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const w = Vec2.zero();\n w.x = det * (d * v.x - b * v.y);\n w.y = det * (a * v.y - c * v.x);\n return w;\n }\n\n /**\n * Multiply a matrix times a vector. If a rotation matrix is provided, then this\n * transforms the vector from one frame to another.\n */\n static mul(mx: Mat22, my: Mat22): Mat22;\n static mul(mx: Mat22, v: Vec2Value): Vec2;\n static mul(mx, v) {\n if (v && \"x\" in v && \"y\" in v) {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Vec2.assert(v);\n const x = mx.ex.x * v.x + mx.ey.x * v.y;\n const y = mx.ex.y * v.x + mx.ey.y * v.y;\n return Vec2.neo(x, y);\n }\n\n static mulMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(v);\n // return new Mat22(Vec2.mul(mx, v.ex), Vec2.mul(mx, v.ey));\n const a = mx.ex.x * v.ex.x + mx.ey.x * v.ex.y;\n const b = mx.ex.x * v.ey.x + mx.ey.x * v.ey.y;\n const c = mx.ex.y * v.ex.x + mx.ey.y * v.ex.y;\n const d = mx.ex.y * v.ey.x + mx.ey.y * v.ey.y;\n return new Mat22(a, b, c, d);\n }\n\n /**\n * Multiply a matrix transpose times a vector. If a rotation matrix is provided,\n * then this transforms the vector from one frame to another (inverse\n * transform).\n */\n static mulT(mx: Mat22, my: Mat22): Mat22;\n static mulT(mx: Mat22, v: Vec2Value): Vec2;\n static mulT(mx, v) {\n if (v && \"x\" in v && \"y\" in v) { // Vec2\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n\n } else if (v && \"ex\" in v && \"ey\" in v) { // Mat22\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulTVec2(mx: Mat22, v: Vec2Value): Vec2 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Vec2.assert(v);\n return Vec2.neo(Vec2.dot(v, mx.ex), Vec2.dot(v, mx.ey));\n }\n\n static mulTMat22(mx: Mat22, v: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n _ASSERT && Mat22.assert(v);\n const c1 = Vec2.neo(Vec2.dot(mx.ex, v.ex), Vec2.dot(mx.ey, v.ex));\n const c2 = Vec2.neo(Vec2.dot(mx.ex, v.ey), Vec2.dot(mx.ey, v.ey));\n return new Mat22(c1, c2);\n }\n\n static abs(mx: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx);\n return new Mat22(Vec2.abs(mx.ex), Vec2.abs(mx.ey));\n }\n\n static add(mx1: Mat22, mx2: Mat22): Mat22 {\n _ASSERT && Mat22.assert(mx1);\n _ASSERT && Mat22.assert(mx2);\n return new Mat22(Vec2.add(mx1.ex, mx2.ex), Vec2.add(mx1.ey, mx2.ey));\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { Vec2Value } from \"../common/Vec2\";\nimport { TransformValue } from \"../common/Transform\";\nimport { EPSILON } from \"../common/Math\";\n\n\n/** @internal */ const math_sqrt = Math.sqrt;\n\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const dist = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n\nexport enum ManifoldType {\n e_unset = -1,\n e_circles = 0,\n e_faceA = 1,\n e_faceB = 2\n}\n\nexport enum ContactFeatureType {\n e_unset = -1,\n e_vertex = 0,\n e_face = 1\n}\n\n/**\n * This is used for determining the state of contact points.\n */\n export enum PointState {\n /** Point does not exist */\n nullState = 0,\n /** Point was added in the update */\n addState = 1,\n /** Point persisted across the update */\n persistState = 2,\n /** Point was removed in the update */\n removeState = 3\n}\n\n/**\n * Used for computing contact manifolds.\n */\n export class ClipVertex {\n v = matrix.vec2(0, 0);\n id: ContactID = new ContactID();\n\n set(o: ClipVertex): void {\n matrix.copyVec2(this.v, o.v);\n this.id.set(o.id);\n }\n recycle() {\n matrix.zeroVec2(this.v);\n this.id.recycle();\n }\n}\n\n/**\n * A manifold for two touching convex shapes. Manifolds are created in `evaluate`\n * method of Contact subclasses.\n *\n * Supported manifold types are e_faceA or e_faceB for clip point versus plane\n * with radius and e_circles point versus point with radius.\n *\n * We store contacts in this way so that position correction can account for\n * movement, which is critical for continuous physics. All contact scenarios\n * must be expressed in one of these types. This structure is stored across time\n * steps, so we keep it small.\n */\nexport class Manifold {\n type: ManifoldType;\n\n /**\n * Usage depends on manifold type:\n * - circles: not used\n * - faceA: the normal on polygonA\n * - faceB: the normal on polygonB\n */\n localNormal = matrix.vec2(0, 0);\n\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleA\n * - faceA: the center of faceA\n * - faceB: the center of faceB\n */\n localPoint = matrix.vec2(0, 0);\n\n /** The points of contact */\n points: ManifoldPoint[] = [ new ManifoldPoint(), new ManifoldPoint() ];\n\n /** The number of manifold points */\n pointCount: number = 0;\n\n set(that: Manifold): void {\n this.type = that.type;\n matrix.copyVec2(this.localNormal, that.localNormal);\n matrix.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\n recycle(): void {\n this.type = ManifoldType.e_unset;\n matrix.zeroVec2(this.localNormal);\n matrix.zeroVec2(this.localPoint);\n this.pointCount = 0;\n this.points[0].recycle();\n this.points[1].recycle();\n }\n\n /**\n * Evaluate the manifold with supplied transforms. This assumes modest motion\n * from the original state. This does not change the point count, impulses, etc.\n * The radii must come from the shapes that generated the manifold.\n */\n getWorldManifold(wm: WorldManifold | null, xfA: TransformValue, radiusA: number, xfB: TransformValue, radiusB: number): WorldManifold {\n if (this.pointCount == 0) {\n return wm;\n }\n\n wm = wm || new WorldManifold();\n\n wm.pointCount = this.pointCount;\n\n const normal = wm.normal;\n const points = wm.points;\n const separations = wm.separations;\n\n switch (this.type) {\n case ManifoldType.e_circles: {\n matrix.setVec2(normal, 1.0, 0.0);\n const manifoldPoint = this.points[0];\n matrix.transformVec2(pointA, xfA, this.localPoint);\n matrix.transformVec2(pointB, xfB, manifoldPoint.localPoint);\n matrix.subVec2(dist, pointB, pointA);\n const lengthSqr = matrix.lengthSqrVec2(dist);\n if (lengthSqr > EPSILON * EPSILON) {\n const length = math_sqrt(lengthSqr);\n matrix.scaleVec2(normal, 1 / length, dist);\n }\n matrix.combine2Vec2(cA, 1, pointA, radiusA, normal);\n matrix.combine2Vec2(cB, 1, pointB, -radiusB, normal);\n matrix.combine2Vec2(points[0], 0.5, cA, 0.5, cB);\n separations[0] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.localNormal);\n matrix.transformVec2(planePoint, xfA, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfB, manifoldPoint.localPoint);\n matrix.combine2Vec2(cA, 1, clipPoint, radiusA - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cB, 1, clipPoint, -radiusB, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cB, cA), normal);\n }\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.localNormal);\n matrix.transformVec2(planePoint, xfB, this.localPoint);\n\n for (let i = 0; i < this.pointCount; ++i) {\n const manifoldPoint = this.points[i];\n matrix.transformVec2(clipPoint, xfA, manifoldPoint.localPoint);\n matrix.combine2Vec2(cB, 1, clipPoint, radiusB - matrix.dotVec2(matrix.subVec2(temp, clipPoint, planePoint), normal), normal);\n matrix.combine2Vec2(cA, 1, clipPoint, -radiusA, normal);\n matrix.combine2Vec2(points[i], 0.5, cA, 0.5, cB);\n separations[i] = matrix.dotVec2(matrix.subVec2(temp, cA, cB), normal);\n }\n // Ensure normal points from A to B.\n matrix.negVec2(normal);\n break;\n }\n }\n\n return wm;\n }\n\n static clipSegmentToLine = clipSegmentToLine;\n static ClipVertex = ClipVertex;\n static getPointStates = getPointStates;\n static PointState = PointState;\n}\n\n/**\n * A manifold point is a contact point belonging to a contact manifold. It holds\n * details related to the geometry and dynamics of the contact points.\n *\n * This structure is stored across time steps, so we keep it small.\n *\n * Note: impulses are used for internal caching and may not provide reliable\n * contact forces, especially for high speed collisions.\n */\nexport class ManifoldPoint {\n /**\n * Usage depends on manifold type:\n * - circles: the local center of circleB\n * - faceA: the local center of circleB or the clip point of polygonB\n * - faceB: the clip point of polygonA\n */\n localPoint = matrix.vec2(0, 0);\n /**\n * The non-penetration impulse\n */\n normalImpulse = 0;\n /**\n * The friction impulse\n */\n tangentImpulse = 0;\n /**\n * Uniquely identifies a contact point between two shapes to facilitate warm starting\n */\n readonly id = new ContactID();\n\n set(that: ManifoldPoint): void {\n matrix.copyVec2(this.localPoint, that.localPoint);\n this.normalImpulse = that.normalImpulse;\n this.tangentImpulse = that.tangentImpulse;\n this.id.set(that.id);\n }\n\n recycle(): void {\n matrix.zeroVec2(this.localPoint);\n this.normalImpulse = 0;\n this.tangentImpulse = 0;\n this.id.recycle();\n }\n}\n\n/**\n * Contact ids to facilitate warm starting.\n * \n * ContactFeature: The features that intersect to form the contact point.\n */\nexport class ContactID {\n\n /**\n * Used to quickly compare contact ids.\n */\n key = -1;\n\n /** ContactFeature index on shapeA */\n indexA = -1;\n\n /** ContactFeature index on shapeB */\n indexB = -1;\n\n /** ContactFeature type on shapeA */\n typeA = ContactFeatureType.e_unset;\n\n /** ContactFeature type on shapeB */\n typeB = ContactFeatureType.e_unset;\n\n setFeatures(indexA: number, typeA: ContactFeatureType, indexB: number, typeB: ContactFeatureType): void {\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\n set(that: ContactID): void {\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\n swapFeatures(): void {\n const indexA = this.indexA;\n const indexB = this.indexB;\n const typeA = this.typeA;\n const 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\n recycle(): void {\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}\n\n/**\n * This is used to compute the current state of a contact manifold.\n */\nexport class WorldManifold {\n /** World vector pointing from A to B */\n normal = matrix.vec2(0, 0);\n\n /** World contact point (point of intersection) */\n points = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints]\n\n /** A negative value indicates overlap, in meters */\n separations = [0, 0]; // [maxManifoldPoints]\n\n /** The number of manifold points */\n pointCount = 0;\n\n recycle() {\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.points[0]);\n matrix.zeroVec2(this.points[1]);\n this.separations[0] = 0;\n this.separations[1] = 0;\n this.pointCount = 0;\n }\n}\n\n/**\n * Compute the point states given two manifolds. The states pertain to the\n * transition from manifold1 to manifold2. So state1 is either persist or remove\n * while state2 is either add or persist.\n */\nexport function getPointStates(\n state1: PointState[],\n state2: PointState[],\n manifold1: Manifold,\n manifold2: Manifold\n): void {\n // state1, state2: PointState[Settings.maxManifoldPoints]\n\n // for (var i = 0; i < Settings.maxManifoldPoints; ++i) {\n // state1[i] = PointState.nullState;\n // state2[i] = PointState.nullState;\n // }\n\n // Detect persists and removes.\n for (let i = 0; i < manifold1.pointCount; ++i) {\n const id = manifold1.points[i].id;\n\n state1[i] = PointState.removeState;\n\n for (let 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\n // Detect persists and adds.\n for (let i = 0; i < manifold2.pointCount; ++i) {\n const id = manifold2.points[i].id;\n\n state2[i] = PointState.addState;\n\n for (let 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}\n\n/**\n * Clipping for contact manifolds. Sutherland-Hodgman clipping.\n */\nexport function clipSegmentToLine(\n vOut: ClipVertex[],\n vIn: ClipVertex[],\n normal: Vec2Value,\n offset: number,\n vertexIndexA: number\n): number {\n // Start with no output points\n let numOut = 0;\n\n // Calculate the distance of end points to the line\n const distance0 = matrix.dotVec2(normal, vIn[0].v) - offset;\n const distance1 = matrix.dotVec2(normal, vIn[1].v) - offset;\n\n // If the points are behind the plane\n if (distance0 <= 0.0)\n vOut[numOut++].set(vIn[0]);\n if (distance1 <= 0.0)\n vOut[numOut++].set(vIn[1]);\n\n // If the points are on different sides of the plane\n if (distance0 * distance1 < 0.0) {\n // Find intersection point of edge and plane\n const interp = distance0 / (distance0 - distance1);\n matrix.combine2Vec2(vOut[numOut].v, 1 - interp, vIn[0].v, interp, vIn[1].v);\n\n // VertexA is hitting edgeB.\n vOut[numOut].id.setFeatures(vertexIndexA, ContactFeatureType.e_vertex, vIn[0].id.indexB, ContactFeatureType.e_face);\n ++numOut;\n }\n\n return numOut;\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../common/Matrix\";\nimport { ShapeType } from \"../collision/Shape\";\nimport { clamp } from \"../common/Math\";\nimport { TransformValue } from \"../common/Transform\";\nimport { Mat22 } from \"../common/Mat22\";\nimport { SettingsInternal as Settings } from \"../Settings\";\nimport { Manifold, ManifoldType, WorldManifold } from \"../collision/Manifold\";\nimport { testOverlap } from \"../collision/Distance\";\nimport { Fixture } from \"./Fixture\";\nimport { Body } from \"./Body\";\nimport { ContactImpulse, TimeStep } from \"./Solver\";\nimport { Pool } from \"../util/Pool\";\nimport { getTransform } from \"./Position\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n// Solver debugging is normally disabled because the block solver sometimes has to deal with a poorly conditioned effective mass matrix.\n/** @internal */ const DEBUG_SOLVER = false;\n\n/** @internal */ const contactPool = new Pool({\n create() {\n return new Contact();\n },\n release(contact: Contact) {\n contact.recycle();\n }\n});\n\n/** @internal */ const oldManifold = new Manifold();\n\n/** @internal */ const worldManifold = new WorldManifold();\n\n/**\n * A contact edge is used to connect bodies and contacts together in a contact\n * graph where each body is a node and each contact is an edge. A contact edge\n * belongs to a doubly linked list maintained in each attached body. Each\n * contact has two contact nodes, one for each attached body.\n */\nexport class ContactEdge {\n contact: Contact;\n prev: ContactEdge | null = null;\n next: ContactEdge | null = null;\n other: Body | null = null;\n constructor(contact: Contact) {\n this.contact = contact;\n }\n\n /** @internal */\n recycle() {\n this.prev = null;\n this.next = null;\n this.other = null;\n }\n}\n\nexport type EvaluateFunction = (\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number\n) => void;\n\n/**\n * Friction mixing law. The idea is to allow either fixture to drive the\n * friction to zero. For example, anything slides on ice.\n */\nexport function mixFriction(friction1: number, friction2: number): number {\n return math_sqrt(friction1 * friction2);\n}\n\n/**\n * Restitution mixing law. The idea is allow for anything to bounce off an\n * inelastic surface. For example, a superball bounces on anything.\n */\nexport function mixRestitution(restitution1: number, restitution2: number): number {\n return restitution1 > restitution2 ? restitution1 : restitution2;\n}\n\n// TODO: move this to Settings?\n/** @internal */ const s_registers = [];\n\n// TODO: merge with ManifoldPoint?\nexport class VelocityConstraintPoint {\n rA = matrix.vec2(0, 0);\n rB = matrix.vec2(0, 0);\n normalImpulse = 0;\n tangentImpulse = 0;\n normalMass = 0;\n tangentMass = 0;\n velocityBias = 0;\n\n recycle() {\n matrix.zeroVec2(this.rA);\n matrix.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}\n\n/** @internal */ const cA = matrix.vec2(0, 0);\n/** @internal */ const vA = matrix.vec2(0, 0);\n/** @internal */ const cB = matrix.vec2(0, 0);\n/** @internal */ const vB = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const xfA = matrix.transform(0, 0, 0);\n/** @internal */ const xfB = matrix.transform(0, 0, 0);\n/** @internal */ const pointA = matrix.vec2(0, 0);\n/** @internal */ const pointB = matrix.vec2(0, 0);\n/** @internal */ const clipPoint = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const rA = matrix.vec2(0, 0);\n/** @internal */ const rB = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const point = matrix.vec2(0, 0);\n/** @internal */ const dv = matrix.vec2(0, 0);\n/** @internal */ const dv1 = matrix.vec2(0, 0);\n/** @internal */ const dv2 = matrix.vec2(0, 0);\n/** @internal */ const b = matrix.vec2(0, 0);\n/** @internal */ const a = matrix.vec2(0, 0);\n/** @internal */ const x = matrix.vec2(0, 0);\n/** @internal */ const d = matrix.vec2(0, 0);\n/** @internal */ const P1 = matrix.vec2(0, 0);\n/** @internal */ const P2 = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n\n/**\n * The class manages contact between two shapes. A contact exists for each\n * overlapping AABB in the broad-phase (except if filtered). Therefore a contact\n * object may exist that has no contact points.\n */\nexport class Contact {\n // Nodes for connecting bodies.\n /** @internal */ m_nodeA = new ContactEdge(this);\n /** @internal */ m_nodeB = new ContactEdge(this);\n /** @internal */ m_fixtureA: Fixture | null = null;\n /** @internal */ m_fixtureB: Fixture | null = null;\n /** @internal */ m_indexA = -1;\n /** @internal */ m_indexB = -1;\n /** @internal */ m_evaluateFcn: EvaluateFunction | null = null;\n /** @internal */ m_manifold: Manifold = new Manifold();\n /** @internal */ m_prev: Contact | null = null;\n /** @internal */ m_next: Contact | null = null;\n /** @internal */ m_toi = 1.0;\n /** @internal */ m_toiCount = 0;\n // This contact has a valid TOI in m_toi\n /** @internal */ m_toiFlag = false;\n /** @internal */ m_friction = 0.0;\n /** @internal */ m_restitution = 0.0;\n /** @internal */ m_tangentSpeed = 0.0;\n /** @internal This contact can be disabled (by user) */\n m_enabledFlag = true;\n /** @internal Used when crawling contact graph when forming islands. */\n m_islandFlag = false;\n /** @internal Set when the shapes are touching. */\n m_touchingFlag = false;\n /** @internal This contact needs filtering because a fixture filter was changed. */\n m_filterFlag = false;\n /** @internal This bullet contact had a TOI event */\n m_bulletHitFlag = false;\n\n /** @internal Contact reporting impulse object cache */\n m_impulse: ContactImpulse = new ContactImpulse(this);\n\n // VelocityConstraint\n /** @internal */ v_points = [new VelocityConstraintPoint(), new VelocityConstraintPoint()]; // [maxManifoldPoints];\n /** @internal */ v_normal = matrix.vec2(0, 0);\n /** @internal */ v_normalMass: Mat22 = new Mat22();\n /** @internal */ v_K: Mat22 = new Mat22();\n /** @internal */ v_pointCount = 0;\n /** @internal */ v_tangentSpeed = 0;\n /** @internal */ v_friction = 0;\n /** @internal */ v_restitution = 0;\n /** @internal */ v_invMassA = 0;\n /** @internal */ v_invMassB = 0;\n /** @internal */ v_invIA = 0;\n /** @internal */ v_invIB = 0;\n\n // PositionConstraint\n /** @internal */ p_localPoints = [matrix.vec2(0, 0), matrix.vec2(0, 0)]; // [maxManifoldPoints];\n /** @internal */ p_localNormal = matrix.vec2(0, 0);\n /** @internal */ p_localPoint = matrix.vec2(0, 0);\n /** @internal */ p_localCenterA = matrix.vec2(0, 0);\n /** @internal */ p_localCenterB = matrix.vec2(0, 0);\n /** @internal */ p_type = ManifoldType.e_unset;\n /** @internal */ p_radiusA = 0;\n /** @internal */ p_radiusB = 0;\n /** @internal */ p_pointCount = 0;\n /** @internal */ p_invMassA = 0;\n /** @internal */ p_invMassB = 0;\n /** @internal */ p_invIA = 0;\n /** @internal */ p_invIB = 0;\n\n /** @internal */ \n initialize(fA: Fixture, indexA: number, fB: Fixture, indexB: number, evaluateFcn: EvaluateFunction) {\n this.m_fixtureA = fA;\n this.m_fixtureB = fB;\n\n this.m_indexA = indexA;\n this.m_indexB = indexB;\n\n this.m_evaluateFcn = evaluateFcn;\n\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\n /** @internal */ \n recycle() {\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\n this.m_impulse.recycle();\n\n // VelocityConstraint\n for(const point of this.v_points) {\n point.recycle();\n }\n matrix.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\n // PositionConstraint\n for(const point of this.p_localPoints) {\n matrix.zeroVec2(point);\n }\n matrix.zeroVec2(this.p_localNormal);\n matrix.zeroVec2(this.p_localPoint);\n matrix.zeroVec2(this.p_localCenterA);\n matrix.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\n initConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n const manifold = this.m_manifold;\n\n const pointCount = manifold.pointCount;\n _ASSERT && console.assert(pointCount > 0);\n\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\n this.v_friction = this.m_friction;\n this.v_restitution = this.m_restitution;\n this.v_tangentSpeed = this.m_tangentSpeed;\n\n this.v_pointCount = pointCount;\n\n this.v_K.setZero();\n this.v_normalMass.setZero();\n\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 matrix.copyVec2(this.p_localCenterA, bodyA.m_sweep.localCenter);\n matrix.copyVec2(this.p_localCenterB, bodyB.m_sweep.localCenter);\n\n this.p_radiusA = shapeA.m_radius;\n this.p_radiusB = shapeB.m_radius;\n\n this.p_type = manifold.type;\n matrix.copyVec2(this.p_localNormal, manifold.localNormal);\n matrix.copyVec2(this.p_localPoint, manifold.localPoint);\n this.p_pointCount = pointCount;\n\n for (let j = 0; j < Settings.maxManifoldPoints; ++j) {\n this.v_points[j].recycle();\n matrix.zeroVec2(this.p_localPoints[j]);\n }\n\n for (let j = 0; j < pointCount; ++j) {\n const cp = manifold.points[j];\n const 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 matrix.copyVec2(this.p_localPoints[j], cp.localPoint);\n }\n }\n\n /**\n * Get the contact manifold. Do not modify the manifold unless you understand\n * the internals of the library.\n */\n getManifold(): Manifold {\n return this.m_manifold;\n }\n\n /**\n * Get the world manifold.\n */\n getWorldManifold(worldManifold: WorldManifold | null): WorldManifold | undefined {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n return this.m_manifold.getWorldManifold(\n worldManifold,\n bodyA.getTransform(), shapeA.m_radius,\n bodyB.getTransform(), shapeB.m_radius\n );\n }\n\n /**\n * Enable/disable this contact. This can be used inside the pre-solve contact\n * listener. The contact is only disabled for the current time step (or sub-step\n * in continuous collisions).\n */\n setEnabled(flag: boolean): void {\n this.m_enabledFlag = !!flag;\n }\n\n /**\n * Has this contact been disabled?\n */\n isEnabled(): boolean {\n return this.m_enabledFlag;\n }\n\n /**\n * Is this contact touching?\n */\n isTouching(): boolean {\n return this.m_touchingFlag;\n }\n\n /**\n * Get the next contact in the world's contact list.\n */\n getNext(): Contact | null {\n return this.m_next;\n }\n\n /**\n * Get fixture A in this contact.\n */\n getFixtureA(): Fixture {\n return this.m_fixtureA;\n }\n\n /**\n * Get fixture B in this contact.\n */\n getFixtureB(): Fixture {\n return this.m_fixtureB;\n }\n\n /**\n * Get the child primitive index for fixture A.\n */\n getChildIndexA(): number {\n return this.m_indexA;\n }\n\n /**\n * Get the child primitive index for fixture B.\n */\n getChildIndexB(): number {\n return this.m_indexB;\n }\n\n /**\n * Flag this contact for filtering. Filtering will occur the next time step.\n */\n flagForFiltering(): void {\n this.m_filterFlag = true;\n }\n\n /**\n * Override the default friction mixture. You can call this in\n * \"pre-solve\" callback. This value persists until set or reset.\n */\n setFriction(friction: number): void {\n this.m_friction = friction;\n }\n\n /**\n * Get the friction.\n */\n getFriction(): number {\n return this.m_friction;\n }\n\n /**\n * Reset the friction mixture to the default value.\n */\n resetFriction(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_friction = mixFriction(fixtureA.m_friction, fixtureB.m_friction);\n }\n\n /**\n * Override the default restitution mixture. You can call this in\n * \"pre-solve\" callback. The value persists until you set or reset.\n */\n setRestitution(restitution: number): void {\n this.m_restitution = restitution;\n }\n\n /**\n * Get the restitution.\n */\n getRestitution(): number {\n return this.m_restitution;\n }\n\n /**\n * Reset the restitution to the default value.\n */\n resetRestitution(): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_restitution = mixRestitution(fixtureA.m_restitution, fixtureB.m_restitution);\n }\n\n /**\n * Set the desired tangent speed for a conveyor belt behavior. In meters per\n * second.\n */\n setTangentSpeed(speed: number): void {\n this.m_tangentSpeed = speed;\n }\n\n /**\n * Get the desired tangent speed. In meters per second.\n */\n getTangentSpeed(): number {\n return this.m_tangentSpeed;\n }\n\n /**\n * Called by Update method, and implemented by subclasses.\n */\n evaluate(manifold: Manifold, xfA: TransformValue, xfB: TransformValue): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n this.m_evaluateFcn(manifold, xfA, fixtureA, this.m_indexA, xfB, fixtureB, this.m_indexB);\n }\n\n /**\n * Updates the contact manifold and touching status.\n *\n * Note: do not assume the fixture AABBs are overlapping or are valid.\n *\n * @param listener.beginContact\n * @param listener.endContact\n * @param listener.preSolve\n */\n update(listener?: {\n beginContact(contact: Contact): void,\n endContact(contact: Contact): void,\n preSolve(contact: Contact, oldManifold: Manifold): void\n }): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n const shapeA = fixtureA.m_shape;\n const shapeB = fixtureB.m_shape;\n if (shapeA === null || shapeB === null) return;\n\n // Re-enable this contact.\n this.m_enabledFlag = true;\n\n let touching = false;\n const wasTouching = this.m_touchingFlag;\n\n const sensorA = fixtureA.m_isSensor;\n const sensorB = fixtureB.m_isSensor;\n const sensor = sensorA || sensorB;\n\n const xfA = bodyA.m_xf;\n const xfB = bodyB.m_xf;\n\n // Is this contact a sensor?\n if (sensor) {\n touching = testOverlap(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB);\n\n // Sensors don't generate manifolds.\n this.m_manifold.pointCount = 0;\n } else {\n\n oldManifold.recycle();\n oldManifold.set(this.m_manifold);\n this.m_manifold.recycle();\n\n this.evaluate(this.m_manifold, xfA, xfB);\n touching = this.m_manifold.pointCount > 0;\n\n // Match old contact ids to new contact ids and copy the\n // stored impulses to warm start the solver.\n for (let i = 0; i < this.m_manifold.pointCount; ++i) {\n const nmp = this.m_manifold.points[i];\n nmp.normalImpulse = 0.0;\n nmp.tangentImpulse = 0.0;\n\n for (let j = 0; j < oldManifold.pointCount; ++j) {\n const 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\n if (touching !== wasTouching) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n }\n\n this.m_touchingFlag = touching;\n\n const hasListener = typeof listener === \"object\" && listener !== null;\n\n if (!wasTouching && touching && hasListener) {\n listener.beginContact(this);\n }\n\n if (wasTouching && !touching && hasListener) {\n listener.endContact(this);\n }\n\n if (!sensor && touching && hasListener && oldManifold) {\n listener.preSolve(this, oldManifold);\n }\n }\n\n solvePositionConstraint(step: TimeStep): number {\n return this._solvePositionConstraint(step, null, null);\n }\n\n solvePositionConstraintTOI(step: TimeStep, toiA: Body, toiB: Body): number {\n return this._solvePositionConstraint(step, toiA, toiB);\n }\n\n private _solvePositionConstraint(step: TimeStep, toiA: Body | null, toiB: Body | null): number {\n const toi = toiA !== null && toiB !== null ? true : false;\n let minSeparation = 0.0;\n\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return minSeparation;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return minSeparation;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n let mA = 0.0;\n let iA = 0.0;\n if (!toi || (bodyA === toiA || bodyA === toiB)) {\n mA = this.p_invMassA;\n iA = this.p_invIA;\n }\n\n let mB = 0.0;\n let iB = 0.0;\n if (!toi || (bodyB === toiA || bodyB === toiB)) {\n mB = this.p_invMassB;\n iB = this.p_invIB;\n }\n\n matrix.copyVec2(cA, positionA.c);\n let aA = positionA.a;\n\n matrix.copyVec2(cB, positionB.c);\n let aB = positionB.a;\n\n // Solve normal constraints\n for (let j = 0; j < this.p_pointCount; ++j) {\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n // PositionSolverManifold\n let separation: number;\n switch (this.p_type) {\n case ManifoldType.e_circles: {\n matrix.transformVec2(pointA, xfA, this.p_localPoint);\n matrix.transformVec2(pointB, xfB, this.p_localPoints[0]);\n matrix.subVec2(normal, pointB, pointA);\n matrix.normalizeVec2(normal);\n\n matrix.combine2Vec2(point, 0.5, pointA, 0.5, pointB);\n separation = matrix.dotVec2(pointB, normal) - matrix.dotVec2(pointA, normal) - this.p_radiusA - this.p_radiusB;\n break;\n }\n\n case ManifoldType.e_faceA: {\n matrix.rotVec2(normal, xfA.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfA, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfB, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n break;\n }\n\n case ManifoldType.e_faceB: {\n matrix.rotVec2(normal, xfB.q, this.p_localNormal);\n matrix.transformVec2(planePoint, xfB, this.p_localPoint);\n matrix.transformVec2(clipPoint, xfA, this.p_localPoints[j]);\n separation = matrix.dotVec2(clipPoint, normal) - matrix.dotVec2(planePoint, normal) - this.p_radiusA - this.p_radiusB;\n matrix.copyVec2(point, clipPoint);\n\n // Ensure normal points from A to B\n matrix.negVec2(normal);\n break;\n }\n // todo: what should we do here?\n default: {\n return minSeparation;\n }\n }\n\n matrix.subVec2(rA, point, cA);\n matrix.subVec2(rB, point, cB);\n\n // Track max constraint error.\n minSeparation = math_min(minSeparation, separation);\n\n const baumgarte = toi ? Settings.toiBaugarte : Settings.baumgarte;\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n // Prevent large corrections and allow slop.\n const C = clamp(baumgarte * (separation + linearSlop), -maxLinearCorrection, 0.0);\n\n // Compute the effective mass.\n const rnA = matrix.crossVec2Vec2(rA, normal);\n const rnB = matrix.crossVec2Vec2(rB, normal);\n const K = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n // Compute normal impulse\n const impulse = K > 0.0 ? -C / K : 0.0;\n\n matrix.scaleVec2(P, impulse, normal);\n\n matrix.minusScaleVec2(cA, mA, P);\n aA -= iA * matrix.crossVec2Vec2(rA, P);\n\n matrix.plusScaleVec2(cB, mB, P);\n aB += iB * matrix.crossVec2Vec2(rB, P);\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n\n return minSeparation;\n }\n\n initVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const radiusA = this.p_radiusA;\n const radiusB = this.p_radiusB;\n const manifold = this.m_manifold;\n\n const mA = this.v_invMassA;\n const mB = this.v_invMassB;\n const iA = this.v_invIA;\n const iB = this.v_invIB;\n const localCenterA = this.p_localCenterA;\n const localCenterB = this.p_localCenterB;\n\n matrix.copyVec2(cA, positionA.c);\n const aA = positionA.a;\n matrix.copyVec2(vA, velocityA.v);\n const wA = velocityA.w;\n\n matrix.copyVec2(cB, positionB.c);\n const aB = positionB.a;\n matrix.copyVec2(vB, velocityB.v);\n const wB = velocityB.w;\n\n _ASSERT && console.assert(manifold.pointCount > 0);\n\n getTransform(xfA, localCenterA, cA, aA);\n getTransform(xfB, localCenterB, cB, aB);\n\n worldManifold.recycle();\n manifold.getWorldManifold(worldManifold, xfA, radiusA, xfB, radiusB);\n\n matrix.copyVec2(this.v_normal, worldManifold.normal);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n const wmp = worldManifold.points[j];\n\n matrix.subVec2(vcp.rA, wmp, cA);\n matrix.subVec2(vcp.rB, wmp, cB);\n\n const rnA = matrix.crossVec2Vec2(vcp.rA, this.v_normal);\n const rnB = matrix.crossVec2Vec2(vcp.rB, this.v_normal);\n\n const kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB;\n\n vcp.normalMass = kNormal > 0.0 ? 1.0 / kNormal : 0.0;\n\n matrix.crossVec2Num(tangent, this.v_normal, 1.0);\n\n const rtA = matrix.crossVec2Vec2(vcp.rA, tangent);\n const rtB = matrix.crossVec2Vec2(vcp.rB, tangent);\n\n const kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB;\n\n vcp.tangentMass = kTangent > 0.0 ? 1.0 / kTangent : 0.0;\n\n // Setup a velocity bias for restitution.\n vcp.velocityBias = 0.0;\n let vRel = 0;\n vRel += matrix.dotVec2(this.v_normal, vB);\n vRel += matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wB, vcp.rB));\n vRel -= matrix.dotVec2(this.v_normal, vA);\n vRel -= matrix.dotVec2(this.v_normal, matrix.crossNumVec2(temp, wA, vcp.rA));\n if (vRel < -Settings.velocityThreshold) {\n vcp.velocityBias = -this.v_restitution * vRel;\n }\n }\n\n // If we have two points, then prepare the block solver.\n if (this.v_pointCount == 2 && step.blockSolve) {\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n const rn1A = matrix.crossVec2Vec2(vcp1.rA, this.v_normal);\n const rn1B = matrix.crossVec2Vec2(vcp1.rB, this.v_normal);\n const rn2A = matrix.crossVec2Vec2(vcp2.rA, this.v_normal);\n const rn2B = matrix.crossVec2Vec2(vcp2.rB, this.v_normal);\n\n const k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B;\n const k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B;\n const k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B;\n\n // Ensure a reasonable condition number.\n const k_maxConditionNumber = 1000.0;\n if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) {\n // K is safe to invert.\n this.v_K.ex.setNum(k11, k12);\n this.v_K.ey.setNum(k12, k22);\n // this.v_normalMass.set(this.v_K.getInverse());\n const a = this.v_K.ex.x;\n const b = this.v_K.ey.x;\n const c = this.v_K.ex.y;\n const d = this.v_K.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n this.v_normalMass.ex.x = det * d;\n this.v_normalMass.ey.x = -det * b;\n this.v_normalMass.ex.y = -det * c;\n this.v_normalMass.ey.y = det * a;\n\n } else {\n // The constraints are redundant, just use one.\n // TODO_ERIN use deepest?\n this.v_pointCount = 1;\n }\n }\n\n matrix.copyVec2(positionA.c, cA);\n positionA.a = aA;\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(positionB.c, cB);\n positionB.a = aB;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n warmStartConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const velocityB = bodyB.c_velocity;\n const positionA = bodyA.c_position;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n matrix.combine2Vec2(P, vcp.normalImpulse, normal, vcp.tangentImpulse, tangent);\n\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n matrix.minusScaleVec2(vA, mA, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n matrix.plusScaleVec2(vB, mB, P);\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n storeConstraintImpulses(step: TimeStep): void {\n const manifold = this.m_manifold;\n for (let 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\n solveVelocityConstraint(step: TimeStep): void {\n const fixtureA = this.m_fixtureA;\n const fixtureB = this.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n const velocityA = bodyA.c_velocity;\n const positionA = bodyA.c_position;\n\n const velocityB = bodyB.c_velocity;\n const positionB = bodyB.c_position;\n\n const mA = this.v_invMassA;\n const iA = this.v_invIA;\n const mB = this.v_invMassB;\n const iB = this.v_invIB;\n\n matrix.copyVec2(vA, velocityA.v);\n let wA = velocityA.w;\n matrix.copyVec2(vB, velocityB.v);\n let wB = velocityB.w;\n\n matrix.copyVec2(normal, this.v_normal);\n matrix.crossVec2Num(tangent, normal, 1.0);\n const friction = this.v_friction;\n\n _ASSERT && console.assert(this.v_pointCount == 1 || this.v_pointCount == 2);\n\n // Solve tangent constraints first because non-penetration is more important\n // than friction.\n for (let j = 0; j < this.v_pointCount; ++j) {\n const vcp = this.v_points[j]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute tangent force\n const vt = matrix.dotVec2(dv, tangent) - this.v_tangentSpeed;\n let lambda = vcp.tangentMass * (-vt);\n\n // Clamp the accumulated force\n const maxFriction = friction * vcp.normalImpulse;\n const newImpulse = clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction);\n lambda = newImpulse - vcp.tangentImpulse;\n vcp.tangentImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, tangent);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n\n // Solve normal constraints\n if (this.v_pointCount == 1 || step.blockSolve == false) {\n for (let i = 0; i < this.v_pointCount; ++i) {\n const vcp = this.v_points[i]; // VelocityConstraintPoint\n\n // Relative velocity at contact\n matrix.zeroVec2(dv);\n matrix.plusVec2(dv, vB);\n matrix.plusVec2(dv, matrix.crossNumVec2(temp, wB, vcp.rB));\n matrix.minusVec2(dv, vA);\n matrix.minusVec2(dv, matrix.crossNumVec2(temp, wA, vcp.rA));\n\n // Compute normal impulse\n const vn = matrix.dotVec2(dv, normal);\n let lambda = -vcp.normalMass * (vn - vcp.velocityBias);\n\n // Clamp the accumulated impulse\n const newImpulse = math_max(vcp.normalImpulse + lambda, 0.0);\n lambda = newImpulse - vcp.normalImpulse;\n vcp.normalImpulse = newImpulse;\n\n // Apply contact impulse\n matrix.scaleVec2(P, lambda, normal);\n\n matrix.minusScaleVec2(vA, mA, P);\n wA -= iA * matrix.crossVec2Vec2(vcp.rA, P);\n\n matrix.plusScaleVec2(vB, mB, P);\n wB += iB * matrix.crossVec2Vec2(vcp.rB, P);\n }\n } else {\n // Block solver developed in collaboration with Dirk Gregorius (back in\n // 01/07 on Box2D_Lite).\n // Build the mini LCP for this contact patch\n //\n // vn = A * x + b, vn >= 0, x >= 0 and vn_i * x_i = 0 with i = 1..2\n //\n // A = J * W * JT and J = ( -n, -r1 x n, n, r2 x n )\n // b = vn0 - velocityBias\n //\n // The system is solved using the \"Total enumeration method\" (s. Murty).\n // The complementary constraint vn_i * x_i\n // implies that we must have in any solution either vn_i = 0 or x_i = 0.\n // So for the 2D contact problem the cases\n // vn1 = 0 and vn2 = 0, x1 = 0 and x2 = 0, x1 = 0 and vn2 = 0, x2 = 0 and\n // vn1 = 0 need to be tested. The first valid\n // solution that satisfies the problem is chosen.\n //\n // In order to account of the accumulated impulse 'a' (because of the\n // iterative nature of the solver which only requires\n // that the accumulated impulse is clamped and not the incremental\n // impulse) we change the impulse variable (x_i).\n //\n // Substitute:\n //\n // x = a + d\n //\n // a := old total impulse\n // x := new total impulse\n // d := incremental impulse\n //\n // For the current iteration we extend the formula for the incremental\n // impulse\n // to compute the new total impulse:\n //\n // vn = A * d + b\n // = A * (x - a) + b\n // = A * x + b - A * a\n // = A * x + b'\n // b' = b - A * a;\n\n const vcp1 = this.v_points[0]; // VelocityConstraintPoint\n const vcp2 = this.v_points[1]; // VelocityConstraintPoint\n\n matrix.setVec2(a, vcp1.normalImpulse, vcp2.normalImpulse);\n _ASSERT && console.assert(a.x >= 0.0 && a.y >= 0.0);\n\n // Relative velocity at contact\n // let dv1 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp1.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp1.rA));\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // let dv2 = Vec2.zero().add(vB).add(Vec2.crossNumVec2(wB, vcp2.rB)).sub(vA).sub(Vec2.crossNumVec2(wA, vcp2.rA));\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n let vn1 = matrix.dotVec2(dv1, normal);\n let vn2 = matrix.dotVec2(dv2, normal);\n\n matrix.setVec2(b, vn1 - vcp1.velocityBias, vn2 - vcp2.velocityBias);\n\n // Compute b'\n // b.sub(Mat22.mulVec2(this.v_K, a));\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\n const k_errorTol = 1e-3;\n // NOT_USED(k_errorTol);\n\n while (true) {\n //\n // Case 1: vn = 0\n //\n // 0 = A * x + b'\n //\n // Solve for x:\n //\n // x = - inv(A) * b'\n //\n // const x = Mat22.mulVec2(this.v_normalMass, b).neg();\n matrix.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\n if (x.x >= 0.0 && x.y >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 2: vn1 = 0 and x2 = 0\n //\n // 0 = a11 * x1 + a12 * 0 + b1'\n // vn2 = a21 * x1 + a22 * 0 + b2'\n //\n x.x = -vcp1.normalMass * b.x;\n x.y = 0.0;\n vn1 = 0.0;\n vn2 = this.v_K.ex.y * x.x + b.y;\n\n if (x.x >= 0.0 && vn2 >= 0.0) {\n // Get the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv1);\n matrix.plusVec2(dv1, vB);\n matrix.plusVec2(dv1, matrix.crossNumVec2(temp, wB, vcp1.rB));\n matrix.minusVec2(dv1, vA);\n matrix.minusVec2(dv1, matrix.crossNumVec2(temp, wA, vcp1.rA));\n\n // Compute normal velocity\n vn1 = matrix.dotVec2(dv1, normal);\n\n _ASSERT && console.assert(math_abs(vn1 - vcp1.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 3: vn2 = 0 and x1 = 0\n //\n // vn1 = a11 * 0 + a12 * x2 + b1'\n // 0 = a21 * 0 + a22 * x2 + b2'\n //\n x.x = 0.0;\n x.y = -vcp2.normalMass * b.y;\n vn1 = this.v_K.ey.x * x.y + b.x;\n vn2 = 0.0;\n\n if (x.y >= 0.0 && vn1 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n if (DEBUG_SOLVER) {\n // Postconditions\n matrix.zeroVec2(dv2);\n matrix.plusVec2(dv2, vB);\n matrix.plusVec2(dv2, matrix.crossNumVec2(temp, wB, vcp2.rB));\n matrix.minusVec2(dv2, vA);\n matrix.minusVec2(dv2, matrix.crossNumVec2(temp, wA, vcp2.rA));\n\n // Compute normal velocity\n vn2 = matrix.dotVec2(dv2, normal);\n\n _ASSERT && console.assert(math_abs(vn2 - vcp2.velocityBias) < k_errorTol);\n }\n break;\n }\n\n //\n // Case 4: x1 = 0 and x2 = 0\n //\n // vn1 = b1\n // vn2 = b2;\n //\n x.x = 0.0;\n x.y = 0.0;\n vn1 = b.x;\n vn2 = b.y;\n\n if (vn1 >= 0.0 && vn2 >= 0.0) {\n // Resubstitute for the incremental impulse\n matrix.subVec2(d, x, a);\n\n // Apply incremental impulse\n matrix.scaleVec2(P1, d.x, normal);\n matrix.scaleVec2(P2, d.y, normal);\n\n // vA.subCombine(mA, P1, mA, P2);\n matrix.combine3Vec2(vA, -mA, P1, -mA, P2, 1, vA);\n wA -= iA * (matrix.crossVec2Vec2(vcp1.rA, P1) + matrix.crossVec2Vec2(vcp2.rA, P2));\n\n // vB.addCombine(mB, P1, mB, P2);\n matrix.combine3Vec2(vB, mB, P1, mB, P2, 1, vB);\n wB += iB * (matrix.crossVec2Vec2(vcp1.rB, P1) + matrix.crossVec2Vec2(vcp2.rB, P2));\n\n // Accumulate\n vcp1.normalImpulse = x.x;\n vcp2.normalImpulse = x.y;\n\n break;\n }\n\n // No solution, give up. This is hit sometimes, but it doesn't seem to\n // matter.\n break;\n }\n }\n\n matrix.copyVec2(velocityA.v, vA);\n velocityA.w = wA;\n\n matrix.copyVec2(velocityB.v, vB);\n velocityB.w = wB;\n }\n\n /** @internal */\n static addType(type1: ShapeType, type2: ShapeType, callback: EvaluateFunction): void {\n s_registers[type1] = s_registers[type1] || {};\n s_registers[type1][type2] = callback;\n }\n\n /** @internal */\n static create(fixtureA: Fixture, indexA: number, fixtureB: Fixture, indexB: number): Contact | null {\n const typeA = fixtureA.m_shape.m_type;\n const typeB = fixtureB.m_shape.m_type;\n\n const contact = contactPool.allocate();\n let 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\n // Contact creation may swap fixtures.\n fixtureA = contact.m_fixtureA;\n fixtureB = contact.m_fixtureB;\n indexA = contact.getChildIndexA();\n indexB = contact.getChildIndexB();\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n\n // Connect to body A\n contact.m_nodeA.contact = contact;\n contact.m_nodeA.other = bodyB;\n\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\n // Connect to body B\n contact.m_nodeB.contact = contact;\n contact.m_nodeB.other = bodyA;\n\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\n // Wake up the bodies\n if (fixtureA.isSensor() == false && fixtureB.isSensor() == false) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n return contact;\n }\n\n /** @internal */\n static destroy(contact: Contact, listener: { endContact: (contact: Contact) => void }): void {\n const fixtureA = contact.m_fixtureA;\n const fixtureB = contact.m_fixtureB;\n if (fixtureA === null || fixtureB === null) return;\n const bodyA = fixtureA.m_body;\n const bodyB = fixtureB.m_body;\n if (bodyA === null || bodyB === null) return;\n\n if (contact.isTouching()) {\n listener.endContact(contact);\n }\n\n // Remove from body 1\n if (contact.m_nodeA.prev) {\n contact.m_nodeA.prev.next = contact.m_nodeA.next;\n }\n\n if (contact.m_nodeA.next) {\n contact.m_nodeA.next.prev = contact.m_nodeA.prev;\n }\n\n if (contact.m_nodeA == bodyA.m_contactList) {\n bodyA.m_contactList = contact.m_nodeA.next;\n }\n\n // Remove from body 2\n if (contact.m_nodeB.prev) {\n contact.m_nodeB.prev.next = contact.m_nodeB.next;\n }\n\n if (contact.m_nodeB.next) {\n contact.m_nodeB.next.prev = contact.m_nodeB.prev;\n }\n\n if (contact.m_nodeB == bodyB.m_contactList) {\n bodyB.m_contactList = contact.m_nodeB.next;\n }\n\n if (contact.m_manifold.pointCount > 0 && !fixtureA.m_isSensor && !fixtureB.m_isSensor) {\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n }\n\n // const typeA = fixtureA.getType();\n // const typeB = fixtureB.getType();\n\n // const destroyFcn = s_registers[typeA][typeB].destroyFcn;\n // if (typeof destroyFcn === 'function') {\n // destroyFcn(contact);\n // }\n\n contactPool.release(contact);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../util/options\";\nimport { Vec2, Vec2Value } from \"../common/Vec2\";\nimport { BroadPhase } from \"../collision/BroadPhase\";\nimport { Solver, ContactImpulse, TimeStep } from \"./Solver\";\nimport { Body, BodyDef } from \"./Body\";\nimport { Joint } from \"./Joint\";\nimport { Contact } from \"./Contact\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../collision/AABB\";\nimport { Fixture, FixtureProxy } from \"./Fixture\";\nimport { Manifold } from \"../collision/Manifold\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\nexport interface WorldDef {\n /** [default: { x : 0, y : 0}] */\n gravity?: Vec2Value;\n\n /** [default: true] */\n allowSleep?: boolean;\n\n /** [default: true] */\n warmStarting?: boolean;\n\n /** [default: true] */\n continuousPhysics?: boolean;\n\n /** [default: false] */\n subStepping?: boolean;\n\n /** [default: true] */\n blockSolve?: boolean;\n\n /** @internal [8] For the velocity constraint solver. */\n velocityIterations?: number;\n\n /** @internal [3] For the position constraint solver. */\n positionIterations?: number;\n}\n\n/** @internal */ const DEFAULTS: WorldDef = {\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};\n\n/**\n * Callback function for ray casts, see {@link World.rayCast}.\n *\n * Called for each fixture found in the query.\n * The returned value replaces the ray-cast input maxFraction.\n * You control how the ray cast proceeds by returning a numeric/float value.\n * \n * - `0` to terminate the ray cast\n * - `fraction` to clip the ray cast at current point\n * - `1` don't clip the ray and continue\n * - `-1` (or anything else) to continue\n *\n * @param fixture The fixture hit by the ray\n * @param point The point of initial intersection\n * @param normal The normal vector at the point of intersection\n * @param fraction The fraction along the ray at the point of intersection\n *\n * @returns A number to update the maxFraction\n */\nexport type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, fraction: number) => number;\n\n/**\n * Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\nexport type WorldAABBQueryCallback = (fixture: Fixture) => boolean;\n\ndeclare module \"./World\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function World(deg: WorldDef): World;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function World(gravity: Vec2): World;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function World(): World;\n}\n\n/**\n * The `World` class contains the bodies and joints. It manages all aspects\n * of the simulation and allows for asynchronous queries (like AABB queries\n * and ray-casts). Much of your interactions with Planck.js will be with a\n * World object.\n */\n// @ts-expect-error\nexport class World {\n /** @internal */ m_solver: Solver;\n /** @internal */ m_broadPhase: BroadPhase;\n /** @internal */ m_contactList: Contact | null;\n /** @internal */ m_contactCount: number;\n /** @internal */ m_bodyList: Body | null;\n /** @internal */ m_bodyCount: number;\n /** @internal */ m_jointList: Joint | null;\n /** @internal */ m_jointCount: number;\n /** @internal */ m_stepComplete: boolean;\n /** @internal */ m_allowSleep: boolean;\n /** @internal */ m_gravity: Vec2;\n /** @internal */ m_clearForces: boolean;\n /** @internal */ m_newFixture: boolean;\n /** @internal */ m_locked: boolean;\n /** @internal */ m_warmStarting: boolean;\n /** @internal */ m_continuousPhysics: boolean;\n /** @internal */ m_subStepping: boolean;\n /** @internal */ m_blockSolve: boolean;\n /** @internal */ m_velocityIterations: number;\n /** @internal */ m_positionIterations: number;\n /** @internal */ m_t: number;\n\n // TODO\n /** @internal */ _listeners: {\n [key: string]: any[]\n };\n\n /**\n * @param def World definition or gravity vector.\n */\n constructor(def?: WorldDef | Vec2Value) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof World)) {\n return new World(def);\n }\n\n this.s_step = new TimeStep();\n\n\n if (!def) {\n def = {};\n } else if (Vec2.isValid(def)) {\n def = { gravity: def as Vec2 };\n }\n\n def = options(def, DEFAULTS) as WorldDef;\n\n this.m_solver = new Solver(this);\n\n this.m_broadPhase = new BroadPhase();\n\n this.m_contactList = null;\n this.m_contactCount = 0;\n\n this.m_bodyList = null;\n this.m_bodyCount = 0;\n\n this.m_jointList = null;\n this.m_jointCount = 0;\n\n this.m_stepComplete = true;\n\n this.m_allowSleep = def.allowSleep;\n this.m_gravity = Vec2.clone(def.gravity);\n\n this.m_clearForces = true;\n this.m_newFixture = false;\n this.m_locked = false;\n\n // These are for debugging the solver.\n this.m_warmStarting = def.warmStarting;\n this.m_continuousPhysics = def.continuousPhysics;\n this.m_subStepping = def.subStepping;\n\n this.m_blockSolve = def.blockSolve;\n this.m_velocityIterations = def.velocityIterations;\n this.m_positionIterations = def.positionIterations;\n\n this.m_t = 0;\n }\n\n /** @internal */\n _serialize(): object {\n const bodies = [];\n const joints = [];\n\n for (let b = this.getBodyList(); b; b = b.getNext()) {\n bodies.push(b);\n }\n\n for (let j = this.getJointList(); j; j = j.getNext()) {\n // @ts-ignore\n if (typeof j._serialize === \"function\") {\n joints.push(j);\n }\n }\n\n return {\n gravity: this.m_gravity,\n bodies,\n joints,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, context: any, restore: any): World {\n if (!data) {\n return new World();\n }\n\n const world = new World(data.gravity);\n\n if (data.bodies) {\n for (let i = data.bodies.length - 1; i >= 0; i -= 1) {\n world._addBody(restore(Body, data.bodies[i], world));\n }\n }\n\n if (data.joints) {\n for (let i = data.joints.length - 1; i >= 0; i--) {\n world.createJoint(restore(Joint, data.joints[i], world));\n }\n }\n\n return world;\n }\n\n /**\n * Get the world body list. With the returned body, use Body.getNext to get the\n * next body in the world list. A null body indicates the end of the list.\n *\n * @return the head of the world body list.\n */\n getBodyList(): Body | null {\n return this.m_bodyList;\n }\n\n /**\n * Get the world joint list. With the returned joint, use Joint.getNext to get\n * the next joint in the world list. A null joint indicates the end of the list.\n *\n * @return the head of the world joint list.\n */\n getJointList(): Joint | null {\n return this.m_jointList;\n }\n\n /**\n * Get the world contact list. With the returned contact, use Contact.getNext to\n * get the next contact in the world list. A null contact indicates the end of\n * the list.\n *\n * Warning: contacts are created and destroyed in the middle of a time step.\n * Use ContactListener to avoid missing contacts.\n *\n * @return the head of the world contact list.\n */\n getContactList(): Contact | null {\n return this.m_contactList;\n }\n\n getBodyCount(): number {\n return this.m_bodyCount;\n }\n\n getJointCount(): number {\n return this.m_jointCount;\n }\n\n /**\n * Get the number of contacts (each may have 0 or more contact points).\n */\n getContactCount(): number {\n return this.m_contactCount;\n }\n\n /**\n * Change the global gravity vector.\n */\n setGravity(gravity: Vec2Value): void {\n this.m_gravity.set(gravity);\n }\n\n /**\n * Get the global gravity vector.\n */\n getGravity(): Vec2 {\n return this.m_gravity;\n }\n\n /**\n * Is the world locked (in the middle of a time step).\n */\n isLocked(): boolean {\n return this.m_locked;\n }\n\n /**\n * Enable/disable sleep.\n */\n setAllowSleeping(flag: boolean): void {\n if (flag == this.m_allowSleep) {\n return;\n }\n\n this.m_allowSleep = flag;\n if (this.m_allowSleep == false) {\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.setAwake(true);\n }\n }\n }\n\n getAllowSleeping(): boolean {\n return this.m_allowSleep;\n }\n\n /**\n * Enable/disable warm starting. For testing.\n */\n setWarmStarting(flag: boolean): void {\n this.m_warmStarting = flag;\n }\n\n getWarmStarting(): boolean {\n return this.m_warmStarting;\n }\n\n /**\n * Enable/disable continuous physics. For testing.\n */\n setContinuousPhysics(flag: boolean): void {\n this.m_continuousPhysics = flag;\n }\n\n getContinuousPhysics(): boolean {\n return this.m_continuousPhysics;\n }\n\n /**\n * Enable/disable single stepped continuous physics. For testing.\n */\n setSubStepping(flag: boolean): void {\n this.m_subStepping = flag;\n }\n\n getSubStepping(): boolean {\n return this.m_subStepping;\n }\n\n /**\n * Set flag to control automatic clearing of forces after each time step.\n */\n setAutoClearForces(flag: boolean): void {\n this.m_clearForces = flag;\n }\n\n /**\n * Get the flag that controls automatic clearing of forces after each time step.\n */\n getAutoClearForces(): boolean {\n return this.m_clearForces;\n }\n\n /**\n * Manually clear the force buffer on all bodies. By default, forces are cleared\n * automatically after each call to step. The default behavior is modified by\n * calling setAutoClearForces. The purpose of this function is to support\n * sub-stepping. Sub-stepping is often used to maintain a fixed sized time step\n * under a variable frame-rate. When you perform sub-stepping you will disable\n * auto clearing of forces and instead call clearForces after all sub-steps are\n * complete in one pass of your game loop.\n *\n * See {@link World.setAutoClearForces}\n */\n clearForces(): void {\n for (let body = this.m_bodyList; body; body = body.getNext()) {\n body.m_force.setZero();\n body.m_torque = 0.0;\n }\n }\n\n /**\n * Query the world for all fixtures that potentially overlap the provided AABB.\n *\n * @param aabb The query box.\n * @param callback Called for each fixture found in the query AABB. It may return `false` to terminate the query.\n */\n queryAABB(aabb: AABBValue, callback: WorldAABBQueryCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n this.m_broadPhase.query(aabb, function(proxyId: number): boolean { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n return callback(proxy.fixture);\n });\n }\n\n /**\n * Ray-cast the world for all fixtures in the path of the ray. Your callback\n * controls whether you get the closest point, any point, or n-points. The\n * ray-cast ignores shapes that contain the starting point.\n *\n * @param point1 The ray starting point\n * @param point2 The ray ending point\n * @param callback A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value.\n */\n rayCast(point1: Vec2Value, point2: Vec2Value, callback: WorldRayCastCallback): void {\n _ASSERT && console.assert(typeof callback === \"function\");\n const broadPhase = this.m_broadPhase;\n\n this.m_broadPhase.rayCast({\n maxFraction : 1.0,\n p1 : point1,\n p2 : point2\n }, function(input: RayCastInput, proxyId: number): number { // TODO GC\n const proxy = broadPhase.getUserData(proxyId);\n const fixture = proxy.fixture;\n const index = proxy.childIndex;\n // @ts-ignore\n const output: RayCastOutput = {}; // TODO GC\n const hit = fixture.rayCast(output, input, index);\n if (hit) {\n const fraction = output.fraction;\n const point = Vec2.add(Vec2.mulNumVec2((1.0 - fraction), input.p1), Vec2.mulNumVec2(fraction, input.p2));\n return callback(fixture, point, output.normal, fraction);\n }\n return input.maxFraction;\n });\n }\n\n /**\n * Get the number of broad-phase proxies.\n */\n getProxyCount(): number {\n return this.m_broadPhase.getProxyCount();\n }\n\n /**\n * Get the height of broad-phase dynamic tree.\n */\n getTreeHeight(): number {\n return this.m_broadPhase.getTreeHeight();\n }\n\n /**\n * Get the balance of broad-phase dynamic tree.\n */\n getTreeBalance(): number {\n return this.m_broadPhase.getTreeBalance();\n }\n\n /**\n * Get the quality metric of broad-phase dynamic tree. The smaller the better.\n * The minimum is 1.\n */\n getTreeQuality(): number {\n return this.m_broadPhase.getTreeQuality();\n }\n\n /**\n * Shift the world origin. Useful for large worlds. The body shift formula is:\n * position -= newOrigin\n *\n * @param newOrigin The new origin with respect to the old origin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n _ASSERT && console.assert(this.m_locked == false);\n if (this.m_locked) {\n return;\n }\n\n for (let b = this.m_bodyList; b; b = b.m_next) {\n b.m_xf.p.sub(newOrigin);\n b.m_sweep.c0.sub(newOrigin);\n b.m_sweep.c.sub(newOrigin);\n }\n\n for (let j = this.m_jointList; j; j = j.m_next) {\n j.shiftOrigin(newOrigin);\n }\n\n this.m_broadPhase.shiftOrigin(newOrigin);\n }\n\n /** @internal Used for deserialize. */\n _addBody(body: Body): void {\n _ASSERT && console.assert(this.isLocked() === false);\n if (this.isLocked()) {\n return;\n }\n\n // Add to world doubly linked list.\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\n /**\n * Create a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This function is locked during callbacks.\n */\n createBody(def?: BodyDef): Body;\n createBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createBody(arg1?, arg2?) {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n let def: BodyDef = {};\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\n const body = new Body(this, def);\n this._addBody(body);\n return body;\n }\n\n createDynamicBody(def?: BodyDef): Body;\n createDynamicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createDynamicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n createKinematicBody(def?: BodyDef): Body;\n createKinematicBody(position: Vec2Value, angle?: number): Body;\n // tslint:disable-next-line:typedef\n createKinematicBody(arg1?, arg2?) {\n let def: BodyDef = {};\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\n /**\n * Destroy a rigid body given a definition. No reference to the definition is\n * retained.\n *\n * Warning: This automatically deletes all associated shapes and joints.\n *\n * Warning: This function is locked during callbacks.\n */\n destroyBody(b: Body): boolean {\n _ASSERT && console.assert(this.m_bodyCount > 0);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n if (b.m_destroyed) {\n return false;\n }\n\n // Delete the attached joints.\n let je = b.m_jointList;\n while (je) {\n const je0 = je;\n je = je.next;\n\n this.publish(\"remove-joint\", je0.joint);\n this.destroyJoint(je0.joint);\n\n b.m_jointList = je;\n }\n b.m_jointList = null;\n\n // Delete the attached contacts.\n let ce = b.m_contactList;\n while (ce) {\n const ce0 = ce;\n ce = ce.next;\n\n this.destroyContact(ce0.contact);\n\n b.m_contactList = ce;\n }\n b.m_contactList = null;\n\n // Delete the attached fixtures. This destroys broad-phase proxies.\n let f = b.m_fixtureList;\n while (f) {\n const f0 = f;\n f = f.m_next;\n\n this.publish(\"remove-fixture\", f0);\n f0.destroyProxies(this.m_broadPhase);\n\n b.m_fixtureList = f;\n }\n b.m_fixtureList = null;\n\n // Remove world body list.\n if (b.m_prev) {\n b.m_prev.m_next = b.m_next;\n }\n\n if (b.m_next) {\n b.m_next.m_prev = b.m_prev;\n }\n\n if (b == this.m_bodyList) {\n this.m_bodyList = b.m_next;\n }\n\n b.m_destroyed = true;\n\n --this.m_bodyCount;\n\n this.publish(\"remove-body\", b);\n\n return true;\n }\n\n /**\n * Create a joint to constrain bodies together. No reference to the definition\n * is retained. This may cause the connected bodies to cease colliding.\n *\n * Warning: This function is locked during callbacks.\n */\n createJoint(joint: T): T | null {\n _ASSERT && console.assert(!!joint.m_bodyA);\n _ASSERT && console.assert(!!joint.m_bodyB);\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return null;\n }\n\n // Connect to the world list.\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\n // Connect to the bodies' doubly linked lists.\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\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\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n for (let edge = joint.m_bodyB.getContactList(); edge; edge = edge.next) {\n if (edge.other == joint.m_bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n }\n }\n\n // Note: creating a joint doesn't wake the bodies.\n\n return joint;\n }\n\n /**\n * Destroy a joint. This may cause the connected bodies to begin colliding.\n * Warning: This function is locked during callbacks.\n */\n destroyJoint(joint: Joint): void {\n _ASSERT && console.assert(this.isLocked() == false);\n if (this.isLocked()) {\n return;\n }\n\n // Remove from the doubly linked list.\n if (joint.m_prev) {\n joint.m_prev.m_next = joint.m_next;\n }\n\n if (joint.m_next) {\n joint.m_next.m_prev = joint.m_prev;\n }\n\n if (joint == this.m_jointList) {\n this.m_jointList = joint.m_next;\n }\n\n // Disconnect from bodies.\n const bodyA = joint.m_bodyA;\n const bodyB = joint.m_bodyB;\n\n // Wake up connected bodies.\n bodyA.setAwake(true);\n bodyB.setAwake(true);\n\n // Remove from body 1.\n if (joint.m_edgeA.prev) {\n joint.m_edgeA.prev.next = joint.m_edgeA.next;\n }\n\n if (joint.m_edgeA.next) {\n joint.m_edgeA.next.prev = joint.m_edgeA.prev;\n }\n\n if (joint.m_edgeA == bodyA.m_jointList) {\n bodyA.m_jointList = joint.m_edgeA.next;\n }\n\n joint.m_edgeA.prev = null;\n joint.m_edgeA.next = null;\n\n // Remove from body 2\n if (joint.m_edgeB.prev) {\n joint.m_edgeB.prev.next = joint.m_edgeB.next;\n }\n\n if (joint.m_edgeB.next) {\n joint.m_edgeB.next.prev = joint.m_edgeB.prev;\n }\n\n if (joint.m_edgeB == bodyB.m_jointList) {\n bodyB.m_jointList = joint.m_edgeB.next;\n }\n\n joint.m_edgeB.prev = null;\n joint.m_edgeB.next = null;\n\n _ASSERT && console.assert(this.m_jointCount > 0);\n --this.m_jointCount;\n\n // If the joint prevents collisions, then flag any contacts for filtering.\n if (joint.m_collideConnected == false) {\n let edge = bodyB.getContactList();\n while (edge) {\n if (edge.other == bodyA) {\n // Flag the contact for filtering at the next time step (where either\n // body is awake).\n edge.contact.flagForFiltering();\n }\n\n edge = edge.next;\n }\n }\n\n this.publish(\"remove-joint\", joint);\n }\n\n /** @internal */\n s_step: TimeStep; // reuse\n\n /**\n * Take a time step. This performs collision detection, integration, and\n * constraint solution.\n *\n * Broad-phase, narrow-phase, solve and solve time of impacts.\n *\n * @param timeStep Time step, this should not vary.\n */\n step(timeStep: number, velocityIterations?: number, positionIterations?: number): void {\n this.publish(\"pre-step\", timeStep);\n\n if ((velocityIterations | 0) !== velocityIterations) {\n // TODO: remove this in future\n velocityIterations = 0;\n }\n\n velocityIterations = velocityIterations || this.m_velocityIterations;\n positionIterations = positionIterations || this.m_positionIterations;\n\n // If new fixtures were added, we need to find the new contacts.\n if (this.m_newFixture) {\n this.findNewContacts();\n this.m_newFixture = false;\n }\n\n this.m_locked = true;\n\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\n // Update contacts. This is where some contacts are destroyed.\n this.updateContacts();\n\n // Integrate velocities, solve velocity constraints, and integrate positions.\n if (this.m_stepComplete && timeStep > 0.0) {\n this.m_solver.solveWorld(this.s_step);\n\n // Synchronize fixtures, check for out of range bodies.\n for (let b = this.m_bodyList; b; b = b.getNext()) {\n // If a body was not in an island then it did not move.\n if (b.m_islandFlag == false) {\n continue;\n }\n\n if (b.isStatic()) {\n continue;\n }\n\n // Update fixtures (for broad-phase).\n b.synchronizeFixtures();\n }\n // Look for new contacts.\n this.findNewContacts();\n }\n\n // Handle TOI events.\n if (this.m_continuousPhysics && timeStep > 0.0) {\n this.m_solver.solveWorldTOI(this.s_step);\n }\n\n if (this.m_clearForces) {\n this.clearForces();\n }\n\n this.m_locked = false;\n\n this.publish(\"post-step\", timeStep);\n }\n\n /**\n * @internal\n * Call this method to find new contacts.\n */\n findNewContacts(): void {\n this.m_broadPhase.updatePairs(\n (proxyA: FixtureProxy, proxyB: FixtureProxy) => this.createContact(proxyA, proxyB)\n );\n }\n\n /**\n * @internal\n * Callback for broad-phase.\n */\n createContact(proxyA: FixtureProxy, proxyB: FixtureProxy): void {\n const fixtureA = proxyA.fixture;\n const fixtureB = proxyB.fixture;\n\n const indexA = proxyA.childIndex;\n const indexB = proxyB.childIndex;\n\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Are the fixtures on the same body?\n if (bodyA == bodyB) {\n return;\n }\n\n // TODO_ERIN use a hash table to remove a potential bottleneck when both\n // bodies have a lot of contacts.\n // Does a contact already exist?\n let edge = bodyB.getContactList(); // ContactEdge\n while (edge) {\n if (edge.other == bodyA) {\n const fA = edge.contact.getFixtureA();\n const fB = edge.contact.getFixtureB();\n const iA = edge.contact.getChildIndexA();\n const iB = edge.contact.getChildIndexB();\n\n if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB) {\n // A contact already exists.\n return;\n }\n\n if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA) {\n // A contact already exists.\n return;\n }\n }\n\n edge = edge.next;\n }\n\n if (bodyB.shouldCollide(bodyA) == false) {\n return;\n }\n if (fixtureB.shouldCollide(fixtureA) == false) {\n return;\n }\n\n // Call the factory.\n const contact = Contact.create(fixtureA, indexA, fixtureB, indexB);\n if (contact == null) {\n return;\n }\n\n // Insert into the world.\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\n ++this.m_contactCount;\n }\n\n /**\n * @internal\n * Removes old non-overlapping contacts, applies filters and updates contacts.\n */\n updateContacts(): void {\n // Update awake contacts.\n let c: Contact;\n let next_c = this.m_contactList;\n while (c = next_c) {\n next_c = c.getNext();\n const fixtureA = c.getFixtureA();\n const fixtureB = c.getFixtureB();\n const indexA = c.getChildIndexA();\n const indexB = c.getChildIndexB();\n const bodyA = fixtureA.getBody();\n const bodyB = fixtureB.getBody();\n\n // Is this contact flagged for filtering?\n if (c.m_filterFlag) {\n if (bodyB.shouldCollide(bodyA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n if (fixtureB.shouldCollide(fixtureA) == false) {\n this.destroyContact(c);\n continue;\n }\n\n // Clear the filtering flag.\n c.m_filterFlag = false;\n }\n\n const activeA = bodyA.isAwake() && !bodyA.isStatic();\n const activeB = bodyB.isAwake() && !bodyB.isStatic();\n\n // At least one body must be awake and it must be dynamic or kinematic.\n if (activeA == false && activeB == false) {\n continue;\n }\n\n const proxyIdA = fixtureA.m_proxies[indexA].proxyId;\n const proxyIdB = fixtureB.m_proxies[indexB].proxyId;\n const overlap = this.m_broadPhase.testOverlap(proxyIdA, proxyIdB);\n\n // Here we destroy contacts that cease to overlap in the broad-phase.\n if (overlap == false) {\n this.destroyContact(c);\n continue;\n }\n\n // The contact persists.\n c.update(this);\n }\n }\n\n /** @internal */\n destroyContact(contact: Contact): void {\n // Remove from the world.\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\n Contact.destroy(contact, this);\n\n --this.m_contactCount;\n }\n\n\n /**\n * Called when two fixtures begin to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n /**\n * Called when two fixtures cease to touch.\n *\n * Implement contact callbacks to get contact information. You can use these\n * results for things like sounds and game logic. You can also get contact\n * results by traversing the contact lists after the time step. However, you\n * might miss some contacts because continuous physics leads to sub-stepping.\n * Additionally you may receive multiple callbacks for the same contact in a\n * single time step. You should strive to make your callbacks efficient because\n * there may be many callbacks per time step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"end-contact\", listener: (contact: Contact) => void): World;\n /**\n * This is called after a contact is updated. This allows you to inspect a\n * contact before it goes to the solver. If you are careful, you can modify the\n * contact manifold (e.g. disable contact). A copy of the old manifold is\n * provided so that you can detect changes. Note: this is called only for awake\n * bodies. Note: this is called even when the number of contact points is zero.\n * Note: this is not called for sensors. Note: if you set the number of contact\n * points to zero, you will not get an end-contact callback. However, you may get\n * a begin-contact callback the next step.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n /**\n * This lets you inspect a contact after the solver is finished. This is useful\n * for inspecting impulses. Note: the contact manifold does not include time of\n * impact impulses, which can be arbitrarily large if the sub-step is small.\n * Hence the impulse is provided explicitly in a separate data structure. Note:\n * this is only called for contacts that are touching, solid, and awake.\n *\n * Warning: You cannot create/destroy world entities inside these callbacks.\n */\n on(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n /** Listener is called whenever a body is removed. */\n on(name: \"remove-body\", listener: (body: Body) => void): World;\n /** Listener is called whenever a joint is removed implicitly or explicitly. */\n on(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n /** Listener is called whenever a fixture is removed implicitly or explicitly. */\n on(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Register an event listener.\n */\n // tslint:disable-next-line:typedef\n on(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\n off(name: \"begin-contact\", listener: (contact: Contact) => void): World;\n off(name: \"end-contact\", listener: (contact: Contact) => void): World;\n off(name: \"pre-solve\", listener: (contact: Contact, oldManifold: Manifold) => void): World;\n off(name: \"post-solve\", listener: (contact: Contact, impulse: ContactImpulse) => void): World;\n off(name: \"remove-body\", listener: (body: Body) => void): World;\n off(name: \"remove-joint\", listener: (joint: Joint) => void): World;\n off(name: \"remove-fixture\", listener: (fixture: Fixture) => void): World;\n /**\n * Remove an event listener.\n */\n // tslint:disable-next-line:typedef\n off(name, listener) {\n if (typeof name !== \"string\" || typeof listener !== \"function\") {\n return this;\n }\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return this;\n }\n const index = listeners.indexOf(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n return this;\n }\n\n publish(name: string, arg1?: any, arg2?: any, arg3?: any): number {\n const listeners = this._listeners && this._listeners[name];\n if (!listeners || !listeners.length) {\n return 0;\n }\n for (let l = 0; l < listeners.length; l++) {\n listeners[l].call(this, arg1, arg2, arg3);\n }\n return listeners.length;\n }\n\n /** @internal */\n beginContact(contact: Contact): void {\n this.publish(\"begin-contact\", contact);\n }\n\n /** @internal */\n endContact(contact: Contact): void {\n this.publish(\"end-contact\", contact);\n }\n\n /** @internal */\n preSolve(contact: Contact, oldManifold: Manifold): void {\n this.publish(\"pre-solve\", contact, oldManifold);\n }\n\n /** @internal */\n postSolve(contact: Contact, impulse: ContactImpulse): void {\n this.publish(\"post-solve\", contact, impulse);\n }\n\n /**\n * Joints and fixtures are destroyed when their associated body is destroyed.\n * Register a destruction listener so that you may nullify references to these\n * joints and shapes.\n *\n * `function(object)` is called when any joint or fixture is about to\n * be destroyed due to the destruction of one of its attached or parent bodies.\n */\n\n /**\n * Register a contact filter to provide specific control over collision.\n * Otherwise the default filter is used (defaultFilter). The listener is owned\n * by you and must remain in scope.\n *\n * Moved to Fixture.\n */\n}","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/** 3D vector */\nexport interface Vec3Value {\n x: number;\n y: number;\n z: number;\n}\n\ndeclare module \"./Vec3\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec3(x: number, y: number, z: number): Vec3;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec3(obj: Vec3Value): Vec3;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function Vec3(): Vec3;\n}\n\n/** 3D vector */\n// @ts-expect-error\nexport class Vec3 {\n x: number;\n y: number;\n z: number;\n\n constructor(x: number, y: number, z: number);\n constructor(obj: Vec3Value);\n constructor();\n constructor(x?, y?, z?) {\n if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec3)) {\n return new Vec3(x, y, z);\n }\n if (typeof x === \"undefined\") {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n } else if (typeof x === \"object\") {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n } else {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n _ASSERT && Vec3.assert(this);\n }\n\n /** @internal */\n _serialize(): object {\n return {\n x: this.x,\n y: this.y,\n z: this.z\n };\n }\n\n /** @internal */\n static _deserialize(data: any): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = data.x;\n obj.y = data.y;\n obj.z = data.z;\n return obj;\n }\n\n /** @hidden */\n static neo(x: number, y: number, z: number): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = x;\n obj.y = y;\n obj.z = z;\n return obj;\n }\n\n static zero(): Vec3 {\n const obj = Object.create(Vec3.prototype);\n obj.x = 0;\n obj.y = 0;\n obj.z = 0;\n return obj;\n }\n\n static clone(v: Vec3Value): Vec3 {\n _ASSERT && Vec3.assert(v);\n return Vec3.neo(v.x, v.y, v.z);\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /** Does this vector contain finite coordinates? */\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Vec3.isValid(o), \"Invalid Vec3!\", o);\n }\n\n setZero(): Vec3 {\n this.x = 0.0;\n this.y = 0.0;\n this.z = 0.0;\n return this;\n }\n\n set(x: number, y: number, z: number): Vec3 {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n\n add(w: Vec3Value): Vec3 {\n this.x += w.x;\n this.y += w.y;\n this.z += w.z;\n return this;\n }\n\n sub(w: Vec3Value): Vec3 {\n this.x -= w.x;\n this.y -= w.y;\n this.z -= w.z;\n return this;\n }\n\n mul(m: number): Vec3 {\n this.x *= m;\n this.y *= m;\n this.z *= m;\n return this;\n }\n\n static areEqual(v: Vec3Value, w: Vec3Value): boolean {\n _ASSERT && Vec3.assert(v);\n _ASSERT && Vec3.assert(w);\n return v === w ||\n typeof v === \"object\" && v !== null &&\n typeof w === \"object\" && w !== null &&\n v.x === w.x && v.y === w.y && v.z === w.z;\n }\n\n /** Dot product on two vectors */\n static dot(v: Vec3Value, w: Vec3Value): number {\n return v.x * w.x + v.y * w.y + v.z * w.z;\n }\n\n /** Cross product on two vectors */\n static cross(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(\n v.y * w.z - v.z * w.y,\n v.z * w.x - v.x * w.z,\n v.x * w.y - v.y * w.x\n );\n }\n\n static add(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x + w.x, v.y + w.y, v.z + w.z);\n }\n\n static sub(v: Vec3Value, w: Vec3Value): Vec3 {\n return new Vec3(v.x - w.x, v.y - w.y, v.z - w.z);\n }\n\n static mul(v: Vec3Value, m: number): Vec3 {\n return new Vec3(m * v.x, m * v.y, m * v.z);\n }\n\n neg(): Vec3 {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n\n static neg(v: Vec3Value): Vec3 {\n return new Vec3(-v.x, -v.y, -v.z);\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Shape } from \"../Shape\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { AABB, AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\ndeclare module \"./EdgeShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function EdgeShape(v1?: Vec2Value, v2?: Vec2Value): EdgeShape;\n}\n\n/**\n * A line segment (edge) shape. These can be connected in chains or loops to\n * other edge shapes. The connectivity information is used to ensure correct\n * contact normals.\n */\n// @ts-expect-error\nexport class EdgeShape extends Shape {\n static TYPE = \"edge\" as const;\n /** @hidden */ m_type: \"edge\";\n\n /** @hidden */ m_radius: number;\n\n // These are the edge vertices\n /** @hidden */ m_vertex1: Vec2;\n /** @hidden */ m_vertex2: Vec2;\n\n // Optional adjacent vertices. These are used for smooth collision.\n // Used by chain shape.\n /** @hidden */ m_vertex0: Vec2;\n /** @hidden */ m_vertex3: Vec2;\n /** @hidden */ m_hasVertex0: boolean;\n /** @hidden */ m_hasVertex3: boolean;\n\n constructor(v1?: Vec2Value, v2?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof EdgeShape)) {\n return new EdgeShape(v1, v2);\n }\n\n super();\n\n this.m_type = EdgeShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n\n this.m_vertex1 = v1 ? Vec2.clone(v1) : Vec2.zero();\n this.m_vertex2 = v2 ? Vec2.clone(v2) : Vec2.zero();\n\n this.m_vertex0 = Vec2.zero();\n this.m_vertex3 = Vec2.zero();\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertex1: this.m_vertex1,\n vertex2: this.m_vertex2,\n\n vertex0: this.m_vertex0,\n vertex3: this.m_vertex3,\n hasVertex0: this.m_hasVertex0,\n hasVertex3: this.m_hasVertex3,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): EdgeShape {\n const shape = new EdgeShape(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\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getType(): \"edge\" {\n return this.m_type;\n }\n\n /** @internal @deprecated */\n setNext(v?: Vec2Value): EdgeShape {\n return this.setNextVertex(v);\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n setNextVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex3.setVec2(v);\n this.m_hasVertex3 = true;\n } else {\n this.m_vertex3.setZero();\n this.m_hasVertex3 = false;\n }\n return this;\n }\n\n /**\n * Optional next vertex, used for smooth collision.\n */\n getNextVertex(): Vec2 {\n return this.m_vertex3;\n }\n\n /** @internal @deprecated */\n setPrev(v?: Vec2Value): EdgeShape {\n return this.setPrevVertex(v);\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n setPrevVertex(v?: Vec2Value): EdgeShape {\n if (v) {\n this.m_vertex0.setVec2(v);\n this.m_hasVertex0 = true;\n } else {\n this.m_vertex0.setZero();\n this.m_hasVertex0 = false;\n }\n return this;\n }\n\n /**\n * Optional prev vertex, used for smooth collision.\n */\n getPrevVertex(): Vec2 {\n return this.m_vertex0;\n }\n\n /**\n * Set this as an isolated edge.\n */\n _set(v1: Vec2Value, v2: Vec2Value): EdgeShape {\n this.m_vertex1.setVec2(v1);\n this.m_vertex2.setVec2(v2);\n this.m_hasVertex0 = false;\n this.m_hasVertex3 = false;\n return this;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): EdgeShape {\n const clone = new EdgeShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // p = p1 + t * d\n // v = v1 + s * e\n // p1 + t * d = v1 + s * e\n // s * e - t * d = p1 - v1\n\n // NOT_USED(childIndex);\n\n // Put the ray into the edge's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n const v1 = this.m_vertex1;\n const v2 = this.m_vertex2;\n const e = Vec2.sub(v2, v1);\n const normal = Vec2.neo(e.y, -e.x);\n normal.normalize();\n\n // q = p1 + t * d\n // dot(normal, q - v1) = 0\n // dot(normal, p1 - v1) + t * dot(normal, d) = 0\n const numerator = Vec2.dot(normal, Vec2.sub(v1, p1));\n const denominator = Vec2.dot(normal, d);\n\n if (denominator == 0.0) {\n return false;\n }\n\n const t = numerator / denominator;\n if (t < 0.0 || input.maxFraction < t) {\n return false;\n }\n\n const q = Vec2.add(p1, Vec2.mulNumVec2(t, d));\n\n // q = v1 + s * r\n // s = dot(q - v1, r) / dot(r, r)\n const r = Vec2.sub(v2, v1);\n const rr = Vec2.dot(r, r);\n if (rr == 0.0) {\n return false;\n }\n\n const s = Vec2.dot(Vec2.sub(q, v1), r) / rr;\n if (s < 0.0 || 1.0 < s) {\n return false;\n }\n\n output.fraction = t;\n if (numerator > 0.0) {\n output.normal = Rot.mulVec2(xf.q, normal).neg();\n } else {\n output.normal = Rot.mulVec2(xf.q, normal);\n }\n return true;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n matrix.transformVec2(v1, xf, this.m_vertex1);\n matrix.transformVec2(v2, xf, this.m_vertex2);\n\n AABB.combinePoints(aabb, v1, v2);\n AABB.extend(aabb, this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.combine2Vec2(massData.center, 0.5, this.m_vertex1, 0.5, this.m_vertex2);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Edge = EdgeShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { AABBValue, RayCastOutput, RayCastInput, AABB } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\nimport { EdgeShape } from \"./EdgeShape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const v2 = matrix.vec2(0, 0);\n\ndeclare module \"./ChainShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function ChainShape(vertices?: Vec2Value[], loop?: boolean): ChainShape;\n}\n\n/**\n * A chain shape is a free form sequence of line segments. The chain has\n * two-sided collision, so you can use inside and outside collision. Therefore,\n * you may use any winding order. Connectivity information is used to create\n * smooth collisions.\n *\n * WARNING: The chain will not collide properly if there are self-intersections.\n */\n// @ts-expect-error\nexport class ChainShape extends Shape {\n static TYPE = \"chain\" as const;\n /** @hidden */ m_type: \"chain\";\n\n /** @hidden */ m_radius: number;\n\n /** @hidden */ m_vertices: Vec2[];\n /** @hidden */ m_count: number;\n /** @hidden */ m_prevVertex: Vec2 | null;\n /** @hidden */ m_nextVertex: Vec2 | null;\n /** @hidden */ m_hasPrevVertex: boolean;\n /** @hidden */ m_hasNextVertex: boolean;\n\n /** @hidden */ m_isLoop: boolean;\n\n constructor(vertices?: Vec2Value[], loop?: boolean) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof ChainShape)) {\n return new ChainShape(vertices, loop);\n }\n\n super();\n\n this.m_type = ChainShape.TYPE;\n this.m_radius = Settings.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\n this.m_isLoop = !!loop;\n\n if (vertices && vertices.length) {\n if (loop) {\n this._createLoop(vertices);\n } else {\n this._createChain(vertices);\n }\n }\n }\n\n /** @internal */\n _serialize(): object {\n const data = {\n type: this.m_type,\n vertices: this.m_vertices,\n isLoop: this.m_isLoop,\n hasPrevVertex: this.m_hasPrevVertex,\n hasNextVertex: this.m_hasNextVertex,\n prevVertex: null as Vec2 | null,\n nextVertex: null as Vec2 | 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\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): ChainShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n const shape = new ChainShape(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\n // clear() {\n // this.m_vertices.length = 0;\n // this.m_count = 0;\n // }\n\n getType(): \"chain\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal\n * Create a loop. This automatically adjusts connectivity.\n *\n * @param vertices an array of vertices, these are copied\n * @param count the vertex count\n */\n _createLoop(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 3);\n if (vertices.length < 3) {\n return;\n }\n\n for (let i = 1; i < vertices.length; ++i) {\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n // If the code crashes here, it means your vertices are too close together.\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_vertices = [];\n this.m_count = vertices.length + 1;\n for (let 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\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\n /**\n * @internal\n * Create a chain with isolated end vertices.\n *\n * @param vertices an array of vertices, these are copied\n */\n _createChain(vertices: Vec2Value[]): ChainShape {\n _ASSERT && console.assert(this.m_vertices.length == 0 && this.m_count == 0);\n _ASSERT && console.assert(vertices.length >= 2);\n for (let i = 1; i < vertices.length; ++i) {\n // If the code crashes here, it means your vertices are too close together.\n const v1 = vertices[i - 1];\n const v2 = vertices[i];\n _ASSERT && console.assert(Vec2.distanceSquared(v1, v2) > Settings.linearSlopSquared);\n }\n\n this.m_count = vertices.length;\n for (let i = 0; i < vertices.length; ++i) {\n this.m_vertices[i] = Vec2.clone(vertices[i]);\n }\n\n this.m_hasPrevVertex = false;\n this.m_hasNextVertex = false;\n this.m_prevVertex = null;\n this.m_nextVertex = null;\n return this;\n }\n\n /** @hidden */\n _reset(): void {\n if (this.m_isLoop) {\n this._createLoop(this.m_vertices);\n } else {\n this._createChain(this.m_vertices);\n }\n }\n\n /**\n * Establish connectivity to a vertex that precedes the first vertex. Don't call\n * this for loops.\n */\n setPrevVertex(prevVertex: Vec2): void {\n // todo: copy or reference\n this.m_prevVertex = prevVertex;\n this.m_hasPrevVertex = true;\n }\n\n getPrevVertex(): Vec2 {\n return this.m_prevVertex;\n }\n\n /**\n * Establish connectivity to a vertex that follows the last vertex. Don't call\n * this for loops.\n */\n setNextVertex(nextVertex: Vec2): void {\n // todo: copy or reference\n this.m_nextVertex = nextVertex;\n this.m_hasNextVertex = true;\n }\n\n getNextVertex(): Vec2 {\n return this.m_nextVertex;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): ChainShape {\n const clone = new ChainShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): number {\n // edge count = vertex count - 1\n return this.m_count - 1;\n }\n\n // Get a child edge.\n getChildEdge(edge: EdgeShape, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count - 1);\n edge.m_type = EdgeShape.TYPE;\n edge.m_radius = this.m_radius;\n\n edge.m_vertex1 = this.m_vertices[childIndex];\n edge.m_vertex2 = this.m_vertices[childIndex + 1];\n\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\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\n getVertex(index: number): Vec2 {\n _ASSERT && console.assert(0 <= index && index <= this.m_count);\n if (index < this.m_count) {\n return this.m_vertices[index];\n } else {\n return this.m_vertices[0];\n }\n }\n\n isLoop(): boolean {\n return this.m_isLoop;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * This always return false.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): false {\n return false;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n const edgeShape = new EdgeShape(this.getVertex(childIndex), this.getVertex(childIndex + 1));\n return edgeShape.rayCast(output, input, xf, 0);\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\n\n matrix.transformVec2(v1, xf, this.getVertex(childIndex));\n matrix.transformVec2(v2, xf, this.getVertex(childIndex + 1));\n\n AABB.combinePoints(aabb, v1, v2);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * Chains have zero mass.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density?: number): void {\n massData.mass = 0.0;\n matrix.zeroVec2(massData.center);\n massData.I = 0.0;\n }\n\n computeDistanceProxy(proxy: DistanceProxy, childIndex: number): void {\n _ASSERT && console.assert(0 <= childIndex && childIndex < this.m_count);\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}\n\nexport const Chain = ChainShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport type { MassData } from \"../../dynamics/Body\";\nimport { RayCastOutput, RayCastInput, AABBValue } from \"../AABB\";\nimport { DistanceProxy } from \"../Distance\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Shape } from \"../Shape\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const center = matrix.vec2(0, 0);\n/** @internal */ const s = matrix.vec2(0, 0);\n\ndeclare module \"./PolygonShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PolygonShape(vertices?: Vec2Value[]): PolygonShape;\n}\n\n/**\n * A convex polygon. It is assumed that the interior of the polygon is to the\n * left of each edge. Polygons have a maximum number of vertices equal to\n * Settings.maxPolygonVertices. In most cases you should not need many vertices\n * for a convex polygon. extends Shape\n */\n// @ts-expect-error\nexport class PolygonShape extends Shape {\n static TYPE = \"polygon\" as const;\n /** @hidden */ m_type: \"polygon\";\n\n /** @hidden */ m_centroid: Vec2;\n /** @hidden */ m_vertices: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_normals: Vec2[]; // [Settings.maxPolygonVertices]\n /** @hidden */ m_count: number;\n /** @hidden */ m_radius: number;\n\n constructor(vertices?: Vec2Value[]) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PolygonShape)) {\n return new PolygonShape(vertices);\n }\n\n super();\n\n this.m_type = PolygonShape.TYPE;\n this.m_radius = Settings.polygonRadius;\n this.m_centroid = Vec2.zero();\n this.m_vertices = [];\n this.m_normals = [];\n this.m_count = 0;\n\n if (vertices && vertices.length) {\n this._set(vertices);\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n vertices: this.m_vertices,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, fixture: any, restore: any): PolygonShape {\n const vertices: Vec2[] = [];\n if (data.vertices) {\n for (let i = 0; i < data.vertices.length; i++) {\n vertices.push(restore(Vec2, data.vertices[i]));\n }\n }\n\n const shape = new PolygonShape(vertices);\n return shape;\n }\n\n getType(): \"polygon\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): PolygonShape {\n const clone = new PolygonShape();\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 (let i = 0; i < this.m_count; i++) {\n clone.m_vertices.push(this.m_vertices[i].clone());\n }\n for (let i = 0; i < this.m_normals.length; i++) {\n clone.m_normals.push(this.m_normals[i].clone());\n }\n return clone;\n }\n\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /** @hidden */\n _reset(): void {\n this._set(this.m_vertices);\n }\n\n /**\n * @internal\n *\n * Create a convex hull from the given array of local points. The count must be\n * in the range [3, Settings.maxPolygonVertices].\n *\n * Warning: the points may be re-ordered, even if they form a convex polygon\n * Warning: collinear points are handled but not removed. Collinear points may\n * lead to poor stacking behavior.\n */\n _set(vertices: Vec2Value[]): void {\n _ASSERT && console.assert(3 <= vertices.length && vertices.length <= Settings.maxPolygonVertices);\n if (vertices.length < 3) {\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n let n = math_min(vertices.length, Settings.maxPolygonVertices);\n\n // Perform welding and copy vertices into local buffer.\n const ps: Vec2[] = []; // [Settings.maxPolygonVertices];\n for (let i = 0; i < n; ++i) {\n const v = vertices[i];\n\n let unique = true;\n for (let j = 0; j < ps.length; ++j) {\n if (Vec2.distanceSquared(v, ps[j]) < 0.25 * Settings.linearSlopSquared) {\n unique = false;\n break;\n }\n }\n\n if (unique) {\n ps.push(Vec2.clone(v));\n }\n }\n\n n = ps.length;\n if (n < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n // Create the convex hull using the Gift wrapping algorithm\n // http://en.wikipedia.org/wiki/Gift_wrapping_algorithm\n\n // Find the right most point on the hull (in case of multiple points bottom most is used)\n let i0 = 0;\n let x0 = ps[0].x;\n for (let i = 1; i < n; ++i) {\n const x = ps[i].x;\n if (x > x0 || (x === x0 && ps[i].y < ps[i0].y)) {\n i0 = i;\n x0 = x;\n }\n }\n\n const hull = [] as number[]; // [Settings.maxPolygonVertices];\n let m = 0;\n let ih = i0;\n\n while (true) {\n _ASSERT && console.assert(m < Settings.maxPolygonVertices);\n hull[m] = ih;\n\n let ie = 0;\n for (let j = 1; j < n; ++j) {\n if (ie === ih) {\n ie = j;\n continue;\n }\n\n const r = Vec2.sub(ps[ie], ps[hull[m]]);\n const v = Vec2.sub(ps[j], ps[hull[m]]);\n const c = Vec2.crossVec2Vec2(r, v);\n // c < 0 means counter-clockwise wrapping, c > 0 means clockwise wrapping\n if (c < 0.0) {\n ie = j;\n }\n\n // Collinearity check\n if (c === 0.0 && v.lengthSquared() > r.lengthSquared()) {\n ie = j;\n }\n }\n\n ++m;\n ih = ie;\n\n if (ie === i0) {\n break;\n }\n }\n\n if (m < 3) {\n // Polygon is degenerate.\n _ASSERT && console.assert(false);\n this._setAsBox(1.0, 1.0);\n return;\n }\n\n this.m_count = m;\n\n // Copy vertices.\n this.m_vertices = [];\n for (let i = 0; i < m; ++i) {\n this.m_vertices[i] = ps[hull[i]];\n }\n\n // Compute normals. Ensure the edges have non-zero length.\n for (let i = 0; i < m; ++i) {\n const i1 = i;\n const i2 = i + 1 < m ? i + 1 : 0;\n const edge = Vec2.sub(this.m_vertices[i2], this.m_vertices[i1]);\n _ASSERT && console.assert(edge.lengthSquared() > EPSILON * EPSILON);\n this.m_normals[i] = Vec2.crossVec2Num(edge, 1.0);\n this.m_normals[i].normalize();\n }\n\n // Compute the polygon centroid.\n this.m_centroid = computeCentroid(this.m_vertices, m);\n }\n\n /** @internal */ _setAsBox(hx: number, hy: number, center?: Vec2Value, angle?: number): void {\n // start with right-bottom, counter-clockwise, as in Gift wrapping algorithm in PolygonShape._set()\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\n this.m_normals[0] = Vec2.neo(1.0, 0.0);\n this.m_normals[1] = Vec2.neo(0.0, 1.0);\n this.m_normals[2] = Vec2.neo(-1.0, 0.0);\n this.m_normals[3] = Vec2.neo(0.0, -1.0);\n\n this.m_count = 4;\n\n if (center && Vec2.isValid(center)) {\n angle = angle || 0;\n\n matrix.copyVec2(this.m_centroid, center);\n\n const xf = Transform.identity();\n xf.p.setVec2(center);\n xf.q.setAngle(angle);\n\n // Transform vertices and normals.\n for (let i = 0; i < this.m_count; ++i) {\n this.m_vertices[i] = Transform.mulVec2(xf, this.m_vertices[i]);\n this.m_normals[i] = Rot.mulVec2(xf.q, this.m_normals[i]);\n }\n }\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const pLocal = matrix.detransformVec2(temp, xf, p);\n\n for (let i = 0; i < this.m_count; ++i) {\n const dot = matrix.dotVec2(this.m_normals[i], pLocal) - matrix.dotVec2(this.m_normals[i], this.m_vertices[i]);\n if (dot > 0.0) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n\n // Put the ray into the polygon's frame of reference.\n const p1 = Rot.mulTVec2(xf.q, Vec2.sub(input.p1, xf.p));\n const p2 = Rot.mulTVec2(xf.q, Vec2.sub(input.p2, xf.p));\n const d = Vec2.sub(p2, p1);\n\n let lower = 0.0;\n let upper = input.maxFraction;\n\n let index = -1;\n\n for (let i = 0; i < this.m_count; ++i) {\n // p = p1 + a * d\n // dot(normal, p - v) = 0\n // dot(normal, p1 - v) + a * dot(normal, d) = 0\n const numerator = Vec2.dot(this.m_normals[i], Vec2.sub(this.m_vertices[i], p1));\n const denominator = Vec2.dot(this.m_normals[i], d);\n\n if (denominator == 0.0) {\n if (numerator < 0.0) {\n return false;\n }\n } else {\n // Note: we want this predicate without division:\n // lower < numerator / denominator, where denominator < 0\n // Since denominator < 0, we have to flip the inequality:\n // lower < numerator / denominator <==> denominator * lower > numerator.\n if (denominator < 0.0 && numerator < lower * denominator) {\n // Increase lower.\n // The segment enters this half-space.\n lower = numerator / denominator;\n index = i;\n } else if (denominator > 0.0 && numerator < upper * denominator) {\n // Decrease upper.\n // The segment exits this half-space.\n upper = numerator / denominator;\n }\n }\n\n // The use of epsilon here causes the assert on lower to trip\n // in some cases. Apparently the use of epsilon was to make edge\n // shapes work, but now those are handled separately.\n // if (upper < lower - matrix.EPSILON)\n if (upper < lower) {\n return false;\n }\n }\n\n _ASSERT && console.assert(0.0 <= lower && lower <= input.maxFraction);\n\n if (index >= 0) {\n output.fraction = lower;\n output.normal = Rot.mulVec2(xf.q, this.m_normals[index]);\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < this.m_count; ++i) {\n const v = matrix.transformVec2(temp, xf, this.m_vertices[i]);\n minX = math_min(minX, v.x);\n maxX = math_max(maxX, v.x);\n minY = math_min(minY, v.y);\n maxY = math_max(maxY, v.y);\n }\n\n matrix.setVec2(aabb.lowerBound, minX - this.m_radius, minY - this.m_radius);\n matrix.setVec2(aabb.upperBound, maxX + this.m_radius, maxY + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n // Polygon mass, centroid, and inertia.\n // Let rho be the polygon density in mass per unit area.\n // Then:\n // mass = rho * int(dA)\n // centroid.x = (1/mass) * rho * int(x * dA)\n // centroid.y = (1/mass) * rho * int(y * dA)\n // I = rho * int((x*x + y*y) * dA)\n //\n // We can compute these integrals by summing all the integrals\n // for each triangle of the polygon. To evaluate the integral\n // for a single triangle, we make a change of variables to\n // the (u,v) coordinates of the triangle:\n // x = x0 + e1x * u + e2x * v\n // y = y0 + e1y * u + e2y * v\n // where 0 <= u && 0 <= v && u + v <= 1.\n //\n // We integrate u from [0,1-v] and then v from [0,1].\n // We also need to use the Jacobian of the transformation:\n // D = cross(e1, e2)\n //\n // Simplification: triangle centroid = (1/3) * (p1 + p2 + p3)\n //\n // The rest of the derivation is handled by computer algebra.\n\n _ASSERT && console.assert(this.m_count >= 3);\n\n matrix.zeroVec2(center);\n let area = 0.0;\n let I = 0.0;\n\n // s is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n matrix.zeroVec2(s);\n\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < this.m_count; ++i) {\n matrix.plusVec2(s, this.m_vertices[i]);\n }\n matrix.scaleVec2(s, 1.0 / this.m_count, s);\n\n const k_inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < this.m_count; ++i) {\n // Triangle vertices.\n matrix.subVec2(e1, this.m_vertices[i], s);\n if ( i + 1 < this.m_count) {\n matrix.subVec2(e2, this.m_vertices[i + 1], s);\n } else {\n matrix.subVec2(e2, this.m_vertices[0], s);\n }\n\n const D = matrix.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine2Vec2(temp, triangleArea * k_inv3, e1, triangleArea * k_inv3, e2);\n matrix.plusVec2(center, temp);\n\n const ex1 = e1.x;\n const ey1 = e1.y;\n const ex2 = e2.x;\n const ey2 = e2.y;\n\n const intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2;\n const inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2;\n\n I += (0.25 * k_inv3 * D) * (intx2 + inty2);\n }\n\n // Total mass\n massData.mass = density * area;\n\n // Center of mass\n _ASSERT && console.assert(area > EPSILON);\n matrix.scaleVec2(center, 1.0 / area, center);\n matrix.addVec2(massData.center, center, s);\n\n // Inertia tensor relative to the local origin (point s).\n massData.I = density * I;\n\n // Shift to center of mass then to original body origin.\n massData.I += massData.mass * (matrix.dotVec2(massData.center, massData.center) - matrix.dotVec2(center, center));\n }\n\n /**\n * Validate convexity. This is a very time consuming operation.\n * @returns true if valid\n */\n validate(): boolean {\n for (let i = 0; i < this.m_count; ++i) {\n const i1 = i;\n const i2 = i < this.m_count - 1 ? i1 + 1 : 0;\n const p = this.m_vertices[i1];\n matrix.subVec2(e, this.m_vertices[i2], p);\n\n for (let j = 0; j < this.m_count; ++j) {\n if (j == i1 || j == i2) {\n continue;\n }\n\n const c = matrix.crossVec2Vec2(e, matrix.subVec2(temp, this.m_vertices[j], p));\n if (c < 0.0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\n for (let 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}\n\n/** @internal */ function computeCentroid(vs: Vec2[], count: number): Vec2 {\n _ASSERT && console.assert(count >= 3);\n\n const c = Vec2.zero();\n let area = 0.0;\n\n // pRef is the reference point for forming triangles.\n // It's location doesn't change the result (except for rounding error).\n const pRef = Vec2.zero();\n if (false) {\n // This code would put the reference point inside the polygon.\n for (let i = 0; i < count; ++i) {\n pRef.add(vs[i]);\n }\n pRef.mul(1.0 / count);\n }\n\n const inv3 = 1.0 / 3.0;\n\n for (let i = 0; i < count; ++i) {\n // Triangle vertices.\n const p1 = pRef;\n const p2 = vs[i];\n const p3 = i + 1 < count ? vs[i + 1] : vs[0];\n\n const e1 = Vec2.sub(p2, p1);\n const e2 = Vec2.sub(p3, p1);\n\n const D = Vec2.crossVec2Vec2(e1, e2);\n\n const triangleArea = 0.5 * D;\n area += triangleArea;\n\n // Area weighted centroid\n matrix.combine3Vec2(temp, 1, p1, 1, p2, 1, p3);\n matrix.plusScaleVec2(c, triangleArea * inv3, temp);\n }\n\n // Centroid\n _ASSERT && console.assert(area > EPSILON);\n c.mul(1.0 / area);\n return c;\n}\n\nexport const Polygon = PolygonShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Rot } from \"../../common/Rot\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Shape } from \"../Shape\";\nimport { AABBValue, RayCastInput, RayCastOutput } from \"../AABB\";\nimport { Transform, TransformValue } from \"../../common/Transform\";\nimport { MassData } from \"../../dynamics/Body\";\nimport { DistanceProxy } from \"../Distance\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_sqrt = Math.sqrt;\n/** @internal */ const math_PI = Math.PI;\n\n/** @internal */ const temp = matrix.vec2(0, 0);\n\ndeclare module \"./CircleShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function CircleShape(position: Vec2Value, radius?: number): CircleShape;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function CircleShape(radius?: number): CircleShape;\n}\n\n/** Circle shape. */\n// @ts-expect-error\nexport class CircleShape extends Shape {\n static TYPE = \"circle\" as const;\n /** @hidden */ m_type: \"circle\";\n\n /** @hidden */ m_p: Vec2;\n /** @hidden */ m_radius: number;\n\n constructor(position: Vec2Value, radius?: number);\n constructor(radius?: number);\n constructor(a: any, b?: any) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof CircleShape)) {\n return new CircleShape(a, b);\n }\n\n super();\n\n this.m_type = CircleShape.TYPE;\n this.m_p = Vec2.zero();\n this.m_radius = 1;\n\n if (typeof a === \"object\" && Vec2.isValid(a)) {\n this.m_p.setVec2(a);\n\n if (typeof b === \"number\") {\n this.m_radius = b;\n }\n\n } else if (typeof a === \"number\") {\n this.m_radius = a;\n }\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n\n p: this.m_p,\n radius: this.m_radius,\n };\n }\n\n /** @internal */\n static _deserialize(data: any): CircleShape {\n return new CircleShape(data.p, data.radius);\n }\n\n /** @hidden */\n _reset(): void {\n // noop\n }\n\n getType(): \"circle\" {\n return this.m_type;\n }\n\n getRadius(): number {\n return this.m_radius;\n }\n\n getCenter(): Vec2 {\n return this.m_p;\n }\n\n /**\n * @internal @deprecated Shapes should be treated as immutable.\n *\n * clone the concrete shape.\n */\n _clone(): CircleShape {\n const clone = new CircleShape();\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\n /**\n * Get the number of child primitives.\n */\n getChildCount(): 1 {\n return 1;\n }\n\n /**\n * Test a point for containment in this shape. This only works for convex\n * shapes.\n *\n * @param xf The shape world transform.\n * @param p A point in world coordinates.\n */\n testPoint(xf: TransformValue, p: Vec2Value): boolean {\n const center = matrix.transformVec2(temp, xf, this.m_p);\n return matrix.distSqrVec2(p, center) <= this.m_radius * this.m_radius;\n }\n\n /**\n * Cast a ray against a child shape.\n *\n * @param output The ray-cast results.\n * @param input The ray-cast input parameters.\n * @param xf The transform to be applied to the shape.\n * @param childIndex The child shape index\n */\n rayCast(output: RayCastOutput, input: RayCastInput, xf: Transform, childIndex: number): boolean {\n // Collision Detection in Interactive 3D Environments by Gino van den Bergen\n // From Section 3.1.2\n // x = s + a * r\n // norm(x) = radius\n\n const position = Vec2.add(xf.p, Rot.mulVec2(xf.q, this.m_p));\n const s = Vec2.sub(input.p1, position);\n const b = Vec2.dot(s, s) - this.m_radius * this.m_radius;\n\n // Solve quadratic equation.\n const r = Vec2.sub(input.p2, input.p1);\n const c = Vec2.dot(s, r);\n const rr = Vec2.dot(r, r);\n const sigma = c * c - rr * b;\n\n // Check for negative discriminant and short segment.\n if (sigma < 0.0 || rr < EPSILON) {\n return false;\n }\n\n // Find the point of intersection of the line with the circle.\n let a = -(c + math_sqrt(sigma));\n\n // Is the intersection point on the segment?\n if (0.0 <= a && a <= input.maxFraction * rr) {\n a /= rr;\n output.fraction = a;\n output.normal = Vec2.add(s, Vec2.mulNumVec2(a, r));\n output.normal.normalize();\n return true;\n }\n\n return false;\n }\n\n /**\n * Given a transform, compute the associated axis aligned bounding box for a\n * child shape.\n *\n * @param aabb Returns the axis aligned box.\n * @param xf The world transform of the shape.\n * @param childIndex The child shape\n */\n computeAABB(aabb: AABBValue, xf: TransformValue, childIndex: number): void {\n const p = matrix.transformVec2(temp, xf, this.m_p);\n\n matrix.setVec2(aabb.lowerBound, p.x - this.m_radius, p.y - this.m_radius);\n matrix.setVec2(aabb.upperBound, p.x + this.m_radius, p.y + this.m_radius);\n }\n\n /**\n * Compute the mass properties of this shape using its dimensions and density.\n * The inertia tensor is computed about the local origin.\n *\n * @param massData Returns the mass data for this shape.\n * @param density The density in kilograms per meter squared.\n */\n computeMass(massData: MassData, density: number): void {\n massData.mass = density * math_PI * this.m_radius * this.m_radius;\n matrix.copyVec2(massData.center, this.m_p);\n // inertia about the local origin\n massData.I = massData.mass * (0.5 * this.m_radius * this.m_radius + matrix.lengthSqrVec2(this.m_p));\n }\n\n computeDistanceProxy(proxy: DistanceProxy): void {\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}\n\nexport const Circle = CircleShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. A value of 0 disables softness.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * Distance length.\n */\n length?: number;\n}\n/**\n * Distance joint definition. This requires defining an anchor point on both\n * bodies and the non-zero length of the distance joint. The definition uses\n * local anchor points so that the initial configuration can violate the\n * constraint slightly. This helps when saving and loading a game. Warning: Do\n * not use a zero or short length.\n */\nexport interface DistanceJointDef extends JointDef, DistanceJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0\n};\n\ndeclare module \"./DistanceJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function DistanceJoint(def: DistanceJointDef): DistanceJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function DistanceJoint(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value): DistanceJoint;\n}\n\n/**\n * A distance joint constrains two points on two bodies to remain at a fixed\n * distance from each other. You can view this as a massless, rigid rod.\n */\n// @ts-expect-error\nexport class DistanceJoint extends Joint {\n static TYPE = \"distance-joint\" as const;\n\n // Solver shared\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_length: number;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_gamma: number;\n /** @internal */ m_bias: number;\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n /**\n * @param def DistanceJoint definition.\n */\n constructor(def: DistanceJointDef);\n /**\n * @param anchorA Anchor A in global coordination.\n * @param anchorB Anchor B in global coordination.\n */\n constructor(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value);\n constructor(def: DistanceJointDef, bodyA?: Body, bodyB?: Body, anchorA?: Vec2Value, anchorB?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof DistanceJoint)) {\n return new DistanceJoint(def, bodyA, bodyB, anchorA, anchorB);\n }\n\n // order of constructor arguments is changed in v0.2\n if (bodyB && anchorA && (\"m_type\" in anchorA) && (\"x\" in bodyB) && (\"y\" in bodyB)) {\n const temp = bodyB;\n bodyB = anchorA as any as Body;\n anchorA = temp as any as Vec2;\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = DistanceJoint.TYPE;\n\n // Solver shared\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 :\n 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.0;\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n\n // 1-D constrained system\n // m (v2 - v1) = lambda\n // v2 + (beta/h) * x1 + gamma * lambda = 0, gamma has units of inverse mass.\n // x2 = x1 + h * v2\n\n // 1-D mass-damper-spring system\n // m (v2 - v1) + h * d * v2 + h * k *\n\n // C = norm(p2 - p1) - L\n // u = (p2 - p1) / norm(p2 - p1)\n // Cdot = dot(u, v2 + cross(w2, r2) - v1 - cross(w1, r1))\n // J = [-u -cross(r1, u) u cross(r2, u)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u)^2 + invMass2 + invI2 * cross(r2, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n length: this.m_length,\n\n impulse: this.m_impulse,\n gamma: this.m_gamma,\n bias: this.m_bias,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): DistanceJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new DistanceJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\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\n if (def.length > 0) {\n this.m_length = +def.length;\n } else if (def.length < 0) { // don't change length\n } else if (def.anchorA || def.anchorA || def.anchorA || def.anchorA) {\n this.m_length = Vec2.distance(\n this.m_bodyA.getWorldPoint(this.m_localAnchorA),\n this.m_bodyB.getWorldPoint(this.m_localAnchorB)\n );\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the natural length. Manipulating the length can lead to non-physical\n * behavior when the frequency is zero.\n */\n setLength(length: number): void {\n this.m_length = length;\n }\n\n /**\n * Get the natural length.\n */\n getLength(): number {\n return this.m_length;\n }\n\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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(cB, this.m_rB), Vec2.add(cA, this.m_rA));\n\n // Handle singularity.\n const length = this.m_u.length();\n if (length > Settings.linearSlop) {\n this.m_u.mul(1.0 / length);\n } else {\n this.m_u.setNum(0.0, 0.0);\n }\n\n const crAu = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crBu = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n let invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu;\n\n // Compute the effective mass matrix.\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (this.m_frequencyHz > 0.0) {\n const C = length - this.m_length;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * this.m_mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_mass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invMass += this.m_gamma;\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n } else {\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n const Cdot = Vec2.dot(this.m_u, vpB) - Vec2.dot(this.m_u, vpA);\n\n const impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse);\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n if (this.m_frequencyHz > 0.0) {\n // There is no position correction for soft distance constraints.\n return true;\n }\n\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const length = u.normalize();\n const C = clamp(length - this.m_length, -Settings.maxLinearCorrection, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointOpt extends JointOpt {\n /**\n * The maximum friction force in N.\n */\n maxForce?: number;\n /**\n * The maximum friction torque in N-m.\n */\n maxTorque?: number;\n}\n\n/**\n * Friction joint definition.\n */\nexport interface FrictionJointDef extends JointDef, FrictionJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n maxTorque : 0.0,\n};\n\ndeclare module \"./FrictionJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function FrictionJoint(def: FrictionJointDef): FrictionJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function FrictionJoint(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): FrictionJoint;\n}\n\n/**\n * Friction joint. This is used for top-down friction. It provides 2D\n * translational friction and angular friction.\n */\n// @ts-expect-error\nexport class FrictionJoint extends Joint {\n static TYPE = \"friction-joint\" as const;\n\n /** @internal */ m_type: \"friction-joint\";\n\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n // Solver shared\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: FrictionJointDef);\n /**\n * @param anchor Anchor in global coordination.\n */\n constructor(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: FrictionJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof FrictionJoint)) {\n return new FrictionJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = FrictionJoint.TYPE;\n\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\n // Solver shared\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): FrictionJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new FrictionJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * this.m_rA.y * this.m_rA.y + iB * this.m_rB.y\n * 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\n * this.m_rB.x;\n\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.sub(\n Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB)),\n Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA))\n );\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = this.m_linearImpulse;\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n if (this.m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) {\n this.m_linearImpulse.normalize();\n this.m_linearImpulse.mul(maxImpulse);\n }\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { Vec2, Vec2Value } from \"./Vec2\";\nimport { Vec3, Vec3Value } from \"./Vec3\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\n/**\n * A 3-by-3 matrix. Stored in column-major order.\n */\nexport class Mat33 {\n ex: Vec3;\n ey: Vec3;\n ez: Vec3;\n\n constructor(a: Vec3Value, b: Vec3Value, c: Vec3Value);\n constructor();\n constructor(a?: Vec3Value, b?: Vec3Value, c?: Vec3Value) {\n if (typeof a === \"object\" && a !== null) {\n this.ex = Vec3.clone(a);\n this.ey = Vec3.clone(b);\n this.ez = Vec3.clone(c);\n } else {\n this.ex = Vec3.zero();\n this.ey = Vec3.zero();\n this.ez = Vec3.zero();\n }\n }\n\n /** @hidden */\n toString(): string {\n return JSON.stringify(this);\n }\n\n static isValid(obj: any): boolean {\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\n static assert(o: any): void {\n _ASSERT && console.assert(!Mat33.isValid(o), \"Invalid Mat33!\", o);\n }\n\n /**\n * Set this matrix to all zeros.\n */\n setZero(): Mat33 {\n this.ex.setZero();\n this.ey.setZero();\n this.ez.setZero();\n return this;\n }\n\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases.\n */\n solve33(v: Vec3Value): Vec3 {\n // let det = matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, this.ez));\n let cross_x = this.ey.y * this.ez.z - this.ey.z * this.ez.y;\n let cross_y = this.ey.z * this.ez.x - this.ey.x * this.ez.z;\n let cross_z = this.ey.x * this.ez.y - this.ey.y * this.ez.x;\n let det = this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = new Vec3();\n // r.x = det * matrix.dotVec3(v, matrix.newCrossVec3(this.ey, this.ez));\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 * (v.x * cross_x + v.y * cross_y + v.z * cross_z);\n\n // r.y = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(v, this.ez));\n cross_x = v.y * this.ez.z - v.z * this.ez.y;\n cross_y = v.z * this.ez.x - v.x * this.ez.z;\n cross_z = v.x * this.ez.y - v.y * this.ez.x;\n r.y = det * (this.ex.x * cross_x + this.ex.y * cross_y + this.ex.z * cross_z);\n\n // r.z = det * matrix.dotVec3(this.ex, matrix.newCrossVec3(this.ey, v));\n cross_x = this.ey.y * v.z - this.ey.z * v.y;\n cross_y = this.ey.z * v.x - this.ey.x * v.z;\n cross_z = this.ey.x * v.y - this.ey.y * v.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\n /**\n * Solve A * x = b, where b is a column vector. This is more efficient than\n * computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix\n * equation.\n */\n solve22(v: Vec2Value): Vec2 {\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a21 = this.ex.y;\n const a22 = this.ey.y;\n let det = a11 * a22 - a12 * a21;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const r = Vec2.zero();\n r.x = det * (a22 * v.x - a12 * v.y);\n r.y = det * (a11 * v.y - a21 * v.x);\n return r;\n }\n\n /**\n * Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if\n * singular.\n */\n getInverse22(M: Mat33): void {\n const a = this.ex.x;\n const b = this.ey.x;\n const c = this.ex.y;\n const d = this.ey.y;\n let det = a * d - b * c;\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n M.ex.x = det * d;\n M.ey.x = -det * b;\n M.ex.z = 0.0;\n M.ex.y = -det * c;\n M.ey.y = det * a;\n M.ey.z = 0.0;\n M.ez.x = 0.0;\n M.ez.y = 0.0;\n M.ez.z = 0.0;\n }\n\n /**\n * Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix\n * if singular.\n */\n getSymInverse33(M: Mat33): void {\n let det = Vec3.dot(this.ex, Vec3.cross(this.ey, this.ez));\n if (det !== 0.0) {\n det = 1.0 / det;\n }\n const a11 = this.ex.x;\n const a12 = this.ey.x;\n const a13 = this.ez.x;\n const a22 = this.ey.y;\n const a23 = this.ez.y;\n const a33 = this.ez.z;\n\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\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\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\n /**\n * Multiply a matrix times a vector.\n */\n static mul(a: Mat33, b: Vec2Value): Vec2;\n static mul(a: Mat33, b: Vec3Value): Vec3;\n static mul(a, b) {\n _ASSERT && Mat33.assert(a);\n if (b && \"z\" in b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n\n } else if (b && \"y\" in b && \"x\" in b) {\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n _ASSERT && console.assert(false);\n }\n\n static mulVec3(a: Mat33, b: Vec3Value): Vec3 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec3.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y + a.ez.x * b.z;\n const y = a.ex.y * b.x + a.ey.y * b.y + a.ez.y * b.z;\n const z = a.ex.z * b.x + a.ey.z * b.y + a.ez.z * b.z;\n return new Vec3(x, y, z);\n }\n\n static mulVec2(a: Mat33, b: Vec2Value): Vec2 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Vec2.assert(b);\n const x = a.ex.x * b.x + a.ey.x * b.y;\n const y = a.ex.y * b.x + a.ey.y * b.y;\n return Vec2.neo(x, y);\n }\n\n static add(a: Mat33, b: Mat33): Mat33 {\n _ASSERT && Mat33.assert(a);\n _ASSERT && Mat33.assert(b);\n return new Mat33(\n Vec3.add(a.ex, b.ex),\n Vec3.add(a.ey, b.ey),\n Vec3.add(a.ez, b.ez)\n );\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n// todo: use string?\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n} \n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointOpt extends JointOpt {\n /**\n * The lower angle for the joint limit (radians).\n */\n lowerAngle?: number;\n /**\n * The upper angle for the joint limit (radians).\n */\n upperAngle?: number;\n /**\n * The maximum motor torque used to achieve the desired motor speed. Usually\n * in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed. Usually in radians per second.\n */\n motorSpeed?: number;\n /**\n * A flag to enable joint limits.\n */\n enableLimit?: boolean;\n /**\n * A flag to enable the joint motor.\n */\n enableMotor?: boolean;\n}\n\n/**\n * Revolute joint definition. This requires defining an anchor point where the\n * bodies are joined. The definition uses local anchor points so that the\n * initial configuration can violate the constraint slightly. You also need to\n * specify the initial relative angle for joint limits. This helps when saving\n * and loading a game.\n *\n * The local anchor points are measured from the body's origin rather than the\n * center of mass because: 1. you might not know where the center of mass will\n * be. 2. if you add/remove shapes from a body and recompute the mass, the\n * joints will be broken.\n */\nexport interface RevoluteJointDef extends JointDef, RevoluteJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n lowerAngle : 0.0,\n upperAngle : 0.0,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n enableLimit : false,\n enableMotor : false\n};\n\ndeclare module \"./RevoluteJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RevoluteJoint(def: RevoluteJointDef): RevoluteJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RevoluteJoint(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): RevoluteJoint;\n}\n\n/**\n * A revolute joint constrains two bodies to share a common point while they are\n * free to rotate about the point. The relative rotation about the shared point\n * is the joint angle. You can limit the relative rotation with a joint limit\n * that specifies a lower and upper angle. You can use a motor to drive the\n * relative rotation about the shared point. A maximum motor torque is provided\n * so that infinite forces are not generated.\n */\n// @ts-expect-error\nexport class RevoluteJoint extends Joint {\n static TYPE = \"revolute-joint\" as const;\n\n /** @internal */ m_type: \"revolute-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerAngle: number;\n /** @internal */ m_upperAngle: number;\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n // effective mass for point-to-point constraint.\n /** @internal */ m_mass: Mat33;\n // effective mass for motor/limit angular constraint.\n /** @internal */ m_motorMass: number;\n /** @internal */ m_limitState: number;\n\n constructor(def: RevoluteJointDef);\n constructor(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RevoluteJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RevoluteJoint)) {\n return new RevoluteJoint(def, bodyA, bodyB, anchor);\n }\n\n def = def ?? {} as RevoluteJointDef;\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_mass = new Mat33();\n this.m_limitState = LimitState.inactiveLimit;\n\n this.m_type = RevoluteJoint.TYPE;\n\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\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\n if (Number.isFinite(def.referenceAngle)) {\n this.m_referenceAngle = def.referenceAngle;\n } else {\n this.m_referenceAngle = bodyB.getAngle() - bodyA.getAngle();\n }\n\n this.m_impulse = new Vec3();\n this.m_motorImpulse = 0.0;\n\n this.m_lowerAngle = def.lowerAngle ?? DEFAULTS.lowerAngle;\n this.m_upperAngle = def.upperAngle ?? DEFAULTS.upperAngle;\n this.m_maxMotorTorque = def.maxMotorTorque ?? DEFAULTS.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed ?? DEFAULTS.motorSpeed;\n this.m_enableLimit = def.enableLimit ?? DEFAULTS.enableLimit;\n this.m_enableMotor = def.enableMotor ?? DEFAULTS.enableMotor;\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Motor constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any):RevoluteJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RevoluteJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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 !== undefined) {\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 !== undefined) {\n this.m_enableMotor = def.enableMotor;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle in radians.\n */\n getJointAngle(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_sweep.a - bA.m_sweep.a - this.m_referenceAngle;\n }\n\n /**\n * Get the current joint angle speed in radians per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n return bB.m_angularVelocity - bA.m_angularVelocity;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Get the current motor torque given the inverse time step. Unit is N*m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set the motor speed in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set the maximum motor torque, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit in radians.\n */\n getLowerLimit(): number {\n return this.m_lowerAngle;\n }\n\n /**\n * Get the upper joint limit in radians.\n */\n getUpperLimit(): number {\n return this.m_upperAngle;\n }\n\n /**\n * Set the joint limits in radians.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(lower <= upper);\n\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.0;\n this.m_lowerAngle = lower;\n this.m_upperAngle = upper;\n }\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force given the inverse time step. Unit is N.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque due to the joint limit given the inverse time step.\n * Unit is N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\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\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n\n if (this.m_enableMotor == false || fixedRotation) {\n this.m_motorImpulse = 0.0;\n }\n\n if (this.m_enableLimit && fixedRotation == false) {\n const jointAngle = aB - aA - this.m_referenceAngle;\n\n if (math_abs(this.m_upperAngle - this.m_lowerAngle) < 2.0 * Settings.angularSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointAngle <= this.m_lowerAngle) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atLowerLimit;\n\n } else if (jointAngle >= this.m_upperAngle) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_impulse.z = 0.0;\n }\n this.m_limitState = LimitState.atUpperLimit;\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const fixedRotation = (iA + iB === 0.0);\n\n // Solve motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits && fixedRotation == false) {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(this.m_mass.solve33(Cdot));\n\n if (this.m_limitState == LimitState.equalLimits) {\n this.m_impulse.add(impulse);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse < 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n const newImpulse = this.m_impulse.z + impulse.z;\n\n if (newImpulse > 0.0) {\n const rhs = Vec2.combine(-1, Cdot1, this.m_impulse.z, Vec2.neo(this.m_mass.ez.x, this.m_mass.ez.y));\n const 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.0;\n\n } else {\n this.m_impulse.add(impulse);\n }\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n\n } else {\n // Solve point-to-point constraint\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const impulse = this.m_mass.solve22(Vec2.neg(Cdot));\n\n this.m_impulse.x += impulse.x;\n this.m_impulse.y += impulse.y;\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n let angularError = 0.0;\n let positionError = 0.0;\n\n const fixedRotation = (this.m_invIA + this.m_invIB == 0.0);\n\n // Solve angular limit constraint.\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit && fixedRotation == false) {\n const angle = aB - aA - this.m_referenceAngle;\n let limitImpulse = 0.0;\n\n if (this.m_limitState == LimitState.equalLimits) {\n // Prevent large angular corrections\n const C = clamp(angle - this.m_lowerAngle, -Settings.maxAngularCorrection, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n angularError = math_abs(C);\n\n } else if (this.m_limitState == LimitState.atLowerLimit) {\n let C = angle - this.m_lowerAngle;\n angularError = -C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C + Settings.angularSlop, -Settings.maxAngularCorrection, 0.0);\n limitImpulse = -this.m_motorMass * C;\n\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n let C = angle - this.m_upperAngle;\n angularError = C;\n\n // Prevent large angular corrections and allow some slop.\n C = clamp(C - Settings.angularSlop, 0.0, Settings.maxAngularCorrection);\n limitImpulse = -this.m_motorMass * C;\n }\n\n aA -= this.m_invIA * limitImpulse;\n aB += this.m_invIB * limitImpulse;\n }\n\n // Solve point-to-point constraint.\n {\n qA.setAngle(aA);\n qB.setAngle(aB);\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n const C = Vec2.zero();\n C.addCombine(1, cB, 1, rB);\n C.subCombine(1, cA, 1, rA);\n positionError = C.length();\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const K = new Mat22();\n K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y;\n K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y;\n K.ey.x = K.ex.y;\n K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x;\n\n const impulse = Vec2.neg(K.solve(C));\n\n cA.subMul(mA, impulse);\n aA -= iA * Vec2.crossVec2Vec2(rA, impulse);\n\n cB.addMul(mB, impulse);\n aB += iB * Vec2.crossVec2Vec2(rB, impulse);\n }\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_max = Math.max;\n/** @internal */ const math_min = Math.min;\n\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3, \n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointOpt extends JointOpt {\n /**\n * Enable/disable the joint limit.\n */\n enableLimit?: boolean;\n /**\n * The lower translation limit, usually in meters.\n */\n lowerTranslation?: number;\n /**\n * The upper translation limit, usually in meters.\n */\n upperTranslation?: number;\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorForce?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n}\n\n/**\n * Prismatic joint definition. This requires defining a line of motion using an\n * axis and an anchor point. The definition uses local anchor points and a local\n * axis so that the initial configuration can violate the constraint slightly.\n * The joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface PrismaticJointDef extends JointDef, PrismaticJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation unit axis in bodyA.\n */\n localAxisA: Vec2Value;\n /**\n * referenceAngle The constrained angle between the bodies:\n * bodyB_angle - bodyA_angle.\n */\n referenceAngle: number;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableLimit : false,\n lowerTranslation : 0.0,\n upperTranslation : 0.0,\n enableMotor : false,\n maxMotorForce : 0.0,\n motorSpeed : 0.0\n};\n\ndeclare module \"./PrismaticJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PrismaticJoint(def: PrismaticJointDef): PrismaticJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PrismaticJoint(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value): PrismaticJoint;\n}\n\n/**\n * A prismatic joint. This joint provides one degree of freedom: translation\n * along an axis fixed in bodyA. Relative rotation is prevented. You can use a\n * joint limit to restrict the range of motion and a joint motor to drive the\n * motion or to model joint friction.\n */\n// @ts-expect-error\nexport class PrismaticJoint extends Joint {\n static TYPE = \"prismatic-joint\" as const;\n\n /** @internal */ m_type: \"prismatic-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n /** @internal */ m_referenceAngle: number;\n /** @internal */ m_impulse: Vec3;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_lowerTranslation: number;\n /** @internal */ m_upperTranslation: number;\n /** @internal */ m_maxMotorForce: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableLimit: boolean;\n /** @internal */ m_enableMotor: boolean;\n /** @internal */ m_limitState: number; // TODO enum\n /** @internal */ m_axis: Vec2;\n /** @internal */ m_perp: Vec2;\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_s1: number;\n /** @internal */ m_s2: number;\n /** @internal */ m_a1: number;\n /** @internal */ m_a2: number;\n /** @internal */ m_K: Mat33;\n\n constructor(def: PrismaticJointDef);\n constructor(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: PrismaticJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PrismaticJoint)) {\n return new PrismaticJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PrismaticJoint.TYPE;\n\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, 0.0));\n this.m_localXAxisA.normalize();\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n this.m_referenceAngle = Number.isFinite(def.referenceAngle) ? def.referenceAngle : bodyB.getAngle() - bodyA.getAngle();\n\n this.m_impulse = new Vec3();\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n\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.inactiveLimit;\n\n this.m_axis = Vec2.zero();\n this.m_perp = Vec2.zero();\n\n this.m_K = new Mat33();\n\n // Linear constraint (point-to-line)\n // d = p2 - p1 = x2 + r2 - x1 - r1\n // C = dot(perp, d)\n // Cdot = dot(d, cross(w1, perp)) + dot(perp, v2 + cross(w2, r2) - v1 -\n // cross(w1, r1))\n // = -dot(perp, v1) - dot(cross(d + r1, perp), w1) + dot(perp, v2) +\n // dot(cross(r2, perp), v2)\n // J = [-perp, -cross(d + r1, perp), perp, cross(r2,perp)]\n //\n // Angular constraint\n // C = a2 - a1 + a_initial\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n //\n // K = J * invM * JT\n //\n // J = [-a -s1 a s2]\n // [0 -1 0 1]\n // a = perp\n // s1 = cross(d + r1, a) = cross(p2 - x1, a)\n // s2 = cross(r2, a) = cross(p2 - x2, a)\n\n // Motor/Limit linear constraint\n // C = dot(ax1, d)\n // Cdot = = -dot(ax1, v1) - dot(cross(d + r1, ax1), w1) + dot(ax1, v2) +\n // dot(cross(r2, ax1), v2)\n // J = [-ax1 -cross(d+r1,ax1) ax1 cross(r2,ax1)]\n\n // Block Solver\n // We develop a block solver that includes the joint limit. This makes the\n // limit stiff (inelastic) even\n // when the mass has poor distribution (leading to large torques about the\n // joint anchor points).\n //\n // The Jacobian has 3 rows:\n // J = [-uT -s1 uT s2] // linear\n // [0 -1 0 1] // angular\n // [-vT -a1 vT a2] // limit\n //\n // u = perp\n // v = axis\n // s1 = cross(d + r1, u), s2 = cross(r2, u)\n // a1 = cross(d + r1, v), a2 = cross(r2, v)\n\n // M * (v2 - v1) = JT * df\n // J * v2 = bias\n //\n // v2 = v1 + invM * JT * df\n // J * (v1 + invM * JT * df) = bias\n // K * df = bias - J * v1 = -Cdot\n // K = J * invM * JT\n // Cdot = J * v1 - bias\n //\n // Now solve for f2.\n // df = f2 - f1\n // K * (f2 - f1) = -Cdot\n // f2 = invK * (-Cdot) + f1\n //\n // Clamp accumulated limit impulse.\n // lower: f2(3) = max(f2(3), 0)\n // upper: f2(3) = min(f2(3), 0)\n //\n // Solve for correct f2(1:2)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:3) * f1\n // = -Cdot(1:2) - K(1:2,3) * f2(3) + K(1:2,1:2) * f1(1:2) + K(1:2,3) * f1(3)\n // K(1:2, 1:2) * f2(1:2) = -Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3)) +\n // K(1:2,1:2) * f1(1:2)\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n //\n // Now compute impulse to be applied:\n // df = f2 - f1\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PrismaticJoint {\n data = {...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 const joint = new PrismaticJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, 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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const pA = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const pB = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = this.m_bodyA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const rA = Rot.mulVec2(bA.m_xf.q, Vec2.sub(this.m_localAnchorA, bA.m_sweep.localCenter));\n const rB = Rot.mulVec2(bB.m_xf.q, Vec2.sub(this.m_localAnchorB, bB.m_sweep.localCenter));\n const p1 = Vec2.add(bA.m_sweep.c, rA);\n const p2 = Vec2.add(bB.m_sweep.c, rB);\n const d = Vec2.sub(p2, p1);\n const axis = Rot.mulVec2(bA.m_xf.q, this.m_localXAxisA);\n\n const vA = bA.m_linearVelocity;\n const vB = bB.m_linearVelocity;\n const wA = bA.m_angularVelocity;\n const wB = bB.m_angularVelocity;\n\n const speed = Vec2.dot(d, Vec2.crossNumVec2(wA, axis)) + Vec2.dot(axis, Vec2.sub(Vec2.addCrossNumVec2(vB, wB, rB), Vec2.addCrossNumVec2(vA, wA, rA)));\n return speed;\n }\n\n /**\n * Is the joint limit enabled?\n */\n isLimitEnabled(): boolean {\n return this.m_enableLimit;\n }\n\n /**\n * Enable/disable the joint limit.\n */\n enableLimit(flag: boolean): void {\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.0;\n }\n }\n\n /**\n * Get the lower joint limit, usually in meters.\n */\n getLowerLimit(): number {\n return this.m_lowerTranslation;\n }\n\n /**\n * Get the upper joint limit, usually in meters.\n */\n getUpperLimit(): number {\n return this.m_upperTranslation;\n }\n\n /**\n * Set the joint limits, usually in meters.\n */\n setLimits(lower: number, upper: number): void {\n _ASSERT && console.assert(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.0;\n }\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in meters per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Set the maximum motor force, usually in N.\n */\n setMaxMotorForce(force: number): void {\n if (force == this.m_maxMotorForce) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorForce = force;\n }\n\n getMaxMotorForce(): number {\n return this.m_maxMotorForce;\n }\n\n /**\n * Get the motor speed, usually in meters per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Get the current motor force given the inverse time step, usually in N.\n */\n getMotorForce(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\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\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.y;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute motor Jacobian and effective mass.\n {\n this.m_axis = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_axis);\n this.m_a2 = Vec2.crossVec2Vec2(rB, this.m_axis);\n\n this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2\n * this.m_a2;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n }\n\n // Prismatic constraint.\n {\n this.m_perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n this.m_s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_perp);\n this.m_s2 = Vec2.crossVec2Vec2(rB, this.m_perp);\n\n const s1test = Vec2.crossVec2Vec2(rA, this.m_perp);\n\n const k11 = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2;\n const k12 = iA * this.m_s1 + iB * this.m_s2;\n const k13 = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For bodies with fixed rotation.\n k22 = 1.0;\n }\n const k23 = iA * this.m_a1 + iB * this.m_a2;\n const k33 = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2;\n\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\n // Compute motor and limit terms.\n if (this.m_enableLimit) {\n\n const jointTranslation = Vec2.dot(this.m_axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * Settings.linearSlop) {\n this.m_limitState = LimitState.equalLimits;\n\n } else if (jointTranslation <= this.m_lowerTranslation) {\n if (this.m_limitState != LimitState.atLowerLimit) {\n this.m_limitState = LimitState.atLowerLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else if (jointTranslation >= this.m_upperTranslation) {\n if (this.m_limitState != LimitState.atUpperLimit) {\n this.m_limitState = LimitState.atUpperLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n } else {\n this.m_limitState = LimitState.inactiveLimit;\n this.m_impulse.z = 0.0;\n }\n\n if (this.m_enableMotor == false) {\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse.mul(step.dtRatio);\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse.x, this.m_perp, this.m_motorImpulse\n + this.m_impulse.z, this.m_axis);\n const LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1;\n const LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y\n + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n this.m_impulse.setZero();\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Solve linear motor constraint.\n if (this.m_enableMotor && this.m_limitState != LimitState.equalLimits) {\n const Cdot = Vec2.dot(this.m_axis, Vec2.sub(vB, vA)) + this.m_a2 * wB\n - this.m_a1 * wA;\n let impulse = this.m_motorMass * (this.m_motorSpeed - Cdot);\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorForce;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse,\n -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_axis);\n const LA = impulse * this.m_a1;\n const LB = impulse * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n const Cdot1 = Vec2.zero();\n Cdot1.x += Vec2.dot(this.m_perp, vB) + this.m_s2 * wB;\n Cdot1.x -= Vec2.dot(this.m_perp, vA) + this.m_s1 * wA;\n Cdot1.y = wB - wA;\n\n if (this.m_enableLimit && this.m_limitState != LimitState.inactiveLimit) {\n // Solve prismatic and limit constraint in block form.\n let Cdot2 = 0;\n Cdot2 += Vec2.dot(this.m_axis, vB) + this.m_a2 * wB;\n Cdot2 -= Vec2.dot(this.m_axis, vA) + this.m_a1 * wA;\n\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const f1 = Vec3.clone(this.m_impulse);\n let df = this.m_K.solve33(Vec3.neg(Cdot));\n this.m_impulse.add(df);\n\n if (this.m_limitState == LimitState.atLowerLimit) {\n this.m_impulse.z = math_max(this.m_impulse.z, 0.0);\n } else if (this.m_limitState == LimitState.atUpperLimit) {\n this.m_impulse.z = math_min(this.m_impulse.z, 0.0);\n }\n\n // f2(1:2) = invK(1:2,1:2) * (-Cdot(1:2) - K(1:2,3) * (f2(3) - f1(3))) +\n // f1(1:2)\n const b = Vec2.combine(-1, Cdot1, -(this.m_impulse.z - f1.z), Vec2.neo(this.m_K.ez.x, this.m_K.ez.y));\n const f2r = Vec2.add(this.m_K.solve22(b), Vec2.neo(f1.x, f1.y));\n this.m_impulse.x = f2r.x;\n this.m_impulse.y = f2r.y;\n\n df = Vec3.sub(this.m_impulse, f1);\n\n const P = Vec2.combine(df.x, this.m_perp, df.z, this.m_axis);\n const LA = df.x * this.m_s1 + df.y + df.z * this.m_a1;\n const LB = df.x * this.m_s2 + df.y + df.z * this.m_a2;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n } else {\n // Limit is inactive, just solve the prismatic constraint in block form.\n const df = this.m_K.solve22(Vec2.neg(Cdot1));\n this.m_impulse.x += df.x;\n this.m_impulse.y += df.y;\n\n const P = Vec2.mulNumVec2(df.x, this.m_perp);\n const LA = df.x * this.m_s1 + df.y;\n const LB = df.x * this.m_s2 + df.y;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Compute fresh Jacobians\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.sub(Vec2.add(cB, rB), Vec2.add(cA, rA));\n\n const axis = Rot.mulVec2(qA, this.m_localXAxisA);\n const a1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), axis);\n const a2 = Vec2.crossVec2Vec2(rB, axis);\n const perp = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const s1 = Vec2.crossVec2Vec2(Vec2.add(d, rA), perp);\n const s2 = Vec2.crossVec2Vec2(rB, perp);\n\n let impulse = new Vec3();\n const C1 = Vec2.zero();\n C1.x = Vec2.dot(perp, d);\n C1.y = aB - aA - this.m_referenceAngle;\n\n let linearError = math_abs(C1.x);\n const angularError = math_abs(C1.y);\n\n const linearSlop = Settings.linearSlop;\n const maxLinearCorrection = Settings.maxLinearCorrection;\n\n let active = false; // bool\n let C2 = 0.0;\n if (this.m_enableLimit) {\n\n const translation = Vec2.dot(axis, d);\n if (math_abs(this.m_upperTranslation - this.m_lowerTranslation) < 2.0 * linearSlop) {\n // Prevent large angular corrections\n C2 = clamp(translation, -maxLinearCorrection, maxLinearCorrection);\n linearError = math_max(linearError, math_abs(translation));\n active = true;\n\n } else if (translation <= this.m_lowerTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_lowerTranslation + linearSlop,\n -maxLinearCorrection, 0.0);\n linearError = Math\n .max(linearError, this.m_lowerTranslation - translation);\n active = true;\n\n } else if (translation >= this.m_upperTranslation) {\n // Prevent large linear corrections and allow some slop.\n C2 = clamp(translation - this.m_upperTranslation - linearSlop, 0.0,\n maxLinearCorrection);\n linearError = Math\n .max(linearError, translation - this.m_upperTranslation);\n active = true;\n }\n }\n\n if (active) {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n const k13 = iA * s1 * a1 + iB * s2 * a2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n // For fixed rotation\n k22 = 1.0;\n }\n const k23 = iA * a1 + iB * a2;\n const k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2;\n\n const 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\n const C = new Vec3();\n C.x = C1.x;\n C.y = C1.y;\n C.z = C2;\n\n impulse = K.solve33(Vec3.neg(C));\n } else {\n const k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2;\n const k12 = iA * s1 + iB * s2;\n let k22 = iA + iB;\n if (k22 == 0.0) {\n k22 = 1.0;\n }\n\n const K = new Mat22();\n K.ex.setNum(k11, k12);\n K.ey.setNum(k12, k22);\n\n const impulse1 = K.solve(Vec2.neg(C1));\n impulse.x = impulse1.x;\n impulse.y = impulse1.y;\n impulse.z = 0.0;\n }\n\n const P = Vec2.combine(impulse.x, perp, impulse.z, axis);\n const LA = impulse.x * s1 + impulse.y + impulse.z * a1;\n const LB = impulse.x * s2 + impulse.y + impulse.z * a2;\n\n cA.subMul(mA, P);\n aA -= iA * LA;\n cB.addMul(mB, P);\n aB += iB * LB;\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError <= Settings.linearSlop\n && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { } from \"../../common/Math\";\nimport { Vec2 } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { RevoluteJoint } from \"./RevoluteJoint\";\nimport { PrismaticJoint } from \"./PrismaticJoint\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointOpt extends JointOpt {\n /**\n * The gear ratio. See {@link GearJoint} for explanation.\n */\n ratio?: number;\n}\n\n/**\n * Gear joint definition.\n */\nexport interface GearJointDef extends JointDef, GearJointOpt {\n /**\n * The first revolute/prismatic joint attached to the gear joint.\n */\n joint1: RevoluteJoint | PrismaticJoint;\n /**\n * The second prismatic/revolute joint attached to the gear joint.\n */\n joint2: RevoluteJoint | PrismaticJoint;\n}\n\n/** @internal */ const DEFAULTS = {\n ratio : 1.0\n};\n\ndeclare module \"./GearJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function GearJoint(def: GearJointDef): GearJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function GearJoint(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number): GearJoint;\n}\n\n/**\n * A gear joint is used to connect two joints together. Either joint can be a\n * revolute or prismatic joint. You specify a gear ratio to bind the motions\n * together: coordinate1 + ratio * coordinate2 = constant\n *\n * The ratio can be negative or positive. If one joint is a revolute joint and\n * the other joint is a prismatic joint, then the ratio will have units of\n * length or units of 1/length. Warning: You have to manually destroy the gear\n * joint if joint1 or joint2 is destroyed.\n *\n * This definition requires two existing revolute or prismatic joints (any\n * combination will work).\n */\n// @ts-expect-error\nexport class GearJoint extends Joint {\n static TYPE = \"gear-joint\" as const;\n\n /** @internal */ m_type: \"gear-joint\";\n /** @internal */ m_joint1: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_joint2: RevoluteJoint | PrismaticJoint;\n /** @internal */ m_type1: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_type2: \"revolute-joint\" | \"prismatic-joint\";\n /** @internal */ m_bodyC: Body;\n /** @internal */ m_localAnchorC: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_referenceAngleA: number;\n /** @internal */ m_localAxisC: Vec2;\n /** @internal */ m_bodyD: Body;\n /** @internal */ m_localAnchorD: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngleB: number;\n /** @internal */ m_localAxisD: Vec2;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_lcA: Vec2;\n /** @internal */ m_lcB: Vec2;\n /** @internal */ m_lcC: Vec2;\n /** @internal */ m_lcD: Vec2;\n /** @internal */ m_mA: number;\n /** @internal */ m_mB: number;\n /** @internal */ m_mC: number;\n /** @internal */ m_mD: number;\n /** @internal */ m_iA: number;\n /** @internal */ m_iB: number;\n /** @internal */ m_iC: number;\n /** @internal */ m_iD: number;\n /** @internal */ m_JvAC: Vec2;\n /** @internal */ m_JvBD: Vec2;\n /** @internal */ m_JwA: number;\n /** @internal */ m_JwB: number;\n /** @internal */ m_JwC: number;\n /** @internal */ m_JwD: number;\n /** @internal */ m_mass: number;\n\n constructor(def: GearJointDef);\n constructor(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number);\n constructor(def: GearJointDef, bodyA?: Body, bodyB?: Body, joint1?: RevoluteJoint | PrismaticJoint, joint2?: RevoluteJoint | PrismaticJoint, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof GearJoint)) {\n return new GearJoint(def, bodyA, bodyB, joint1, joint2, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = GearJoint.TYPE;\n\n _ASSERT && console.assert(joint1.m_type === RevoluteJoint.TYPE || joint1.m_type === PrismaticJoint.TYPE);\n _ASSERT && console.assert(joint2.m_type === RevoluteJoint.TYPE || joint2.m_type === PrismaticJoint.TYPE);\n\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\n this.m_type1 = this.m_joint1.getType() as \"revolute-joint\" | \"prismatic-joint\";\n this.m_type2 = this.m_joint2.getType() as \"revolute-joint\" | \"prismatic-joint\";\n\n // joint1 connects body A to body C\n // joint2 connects body B to body D\n\n let coordinateA: number;\n let coordinateB: number;\n\n // TODO_ERIN there might be some problem with the joint edges in Joint.\n\n this.m_bodyC = this.m_joint1.getBodyA();\n this.m_bodyA = this.m_joint1.getBodyB();\n\n // Get geometry of joint1\n const xfA = this.m_bodyA.m_xf;\n const aA = this.m_bodyA.m_sweep.a;\n const xfC = this.m_bodyC.m_xf;\n const aC = this.m_bodyC.m_sweep.a;\n\n if (this.m_type1 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint1 as RevoluteJoint;\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\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const prismatic = this.m_joint1 as PrismaticJoint;\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\n const pC = this.m_localAnchorC;\n const pA = Rot.mulTVec2(xfC.q, Vec2.add(Rot.mulVec2(xfA.q, this.m_localAnchorA), Vec2.sub(xfA.p, xfC.p)));\n coordinateA = Vec2.dot(pA, this.m_localAxisC) - Vec2.dot(pC, this.m_localAxisC);\n }\n\n this.m_bodyD = this.m_joint2.getBodyA();\n this.m_bodyB = this.m_joint2.getBodyB();\n\n // Get geometry of joint2\n const xfB = this.m_bodyB.m_xf;\n const aB = this.m_bodyB.m_sweep.a;\n const xfD = this.m_bodyD.m_xf;\n const aD = this.m_bodyD.m_sweep.a;\n\n if (this.m_type2 === RevoluteJoint.TYPE) {\n const revolute = this.m_joint2 as RevoluteJoint;\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const prismatic = this.m_joint2 as PrismaticJoint;\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\n const pD = this.m_localAnchorD;\n const pB = Rot.mulTVec2(xfD.q, Vec2.add(Rot.mulVec2(xfB.q, this.m_localAnchorB), Vec2.sub(xfB.p, xfD.p)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n this.m_constant = coordinateA + this.m_ratio * coordinateB;\n\n this.m_impulse = 0.0;\n\n // Gear Joint:\n // C0 = (coordinate1 + ratio * coordinate2)_initial\n // C = (coordinate1 + ratio * coordinate2) - C0 = 0\n // J = [J1 ratio * J2]\n // K = J * invM * JT\n // = J1 * invM1 * J1T + ratio * ratio * J2 * invM2 * J2T\n //\n // Revolute:\n // coordinate = rotation\n // Cdot = angularVelocity\n // J = [0 0 1]\n // K = J * invM * JT = invI\n //\n // Prismatic:\n // coordinate = dot(p - pg, ug)\n // Cdot = dot(v + cross(w, r), ug)\n // J = [ug cross(r, ug)]\n // K = J * invM * JT = invMass + invI * cross(r, ug)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n joint1: this.m_joint1,\n joint2: this.m_joint2,\n ratio: this.m_ratio,\n\n // _constant: this.m_constant,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): GearJoint {\n data = {...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 const joint = new GearJoint(data);\n // if (data._constant) joint.m_constant = data._constant;\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n // todo: implement other fields\n if (Number.isFinite(def.ratio)) {\n this.m_ratio = def.ratio;\n }\n }\n\n /**\n * Get the first joint.\n */\n getJoint1(): Joint {\n return this.m_joint1;\n }\n\n /**\n * Get the second joint.\n */\n getJoint2(): Joint {\n return this.m_joint2;\n }\n\n /**\n * Set the gear ratio.\n */\n setRatio(ratio: number): void {\n _ASSERT && console.assert(Number.isFinite(ratio));\n this.m_ratio = ratio;\n }\n\n /**\n * Get the gear ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_JvAC).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n const L = this.m_impulse * this.m_JwA;\n return inv_dt * L;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const aC = this.m_bodyC.c_position.a;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n\n const aD = this.m_bodyD.c_position.a;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n this.m_mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n this.m_JvAC = Vec2.zero();\n this.m_JwA = 1.0;\n this.m_JwC = 1.0;\n this.m_mass += this.m_iA + this.m_iC;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = 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(rA, 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\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 const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n // Compute effective mass.\n this.m_mass = this.m_mass > 0.0 ? 1.0 / this.m_mass : 0.0;\n\n if (step.warmStarting) {\n vA.addMul(this.m_mA * this.m_impulse, this.m_JvAC);\n wA += this.m_iA * this.m_impulse * this.m_JwA;\n\n vB.addMul(this.m_mB * this.m_impulse, this.m_JvBD);\n wB += this.m_iB * this.m_impulse * this.m_JwB;\n\n vC.subMul(this.m_mC * this.m_impulse, this.m_JvAC);\n wC -= this.m_iC * this.m_impulse * this.m_JwC;\n\n vD.subMul(this.m_mD * this.m_impulse, this.m_JvBD);\n wD -= this.m_iD * this.m_impulse * this.m_JwD;\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n const vC = this.m_bodyC.c_velocity.v;\n let wC = this.m_bodyC.c_velocity.w;\n const vD = this.m_bodyD.c_velocity.v;\n let wD = this.m_bodyD.c_velocity.w;\n\n let Cdot = Vec2.dot(this.m_JvAC, vA) - Vec2.dot(this.m_JvAC, vC) + Vec2.dot(this.m_JvBD, vB) - 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\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n vA.addMul(this.m_mA * impulse, this.m_JvAC);\n wA += this.m_iA * impulse * this.m_JwA;\n vB.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\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\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\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n const cC = this.m_bodyC.c_position.c;\n let aC = this.m_bodyC.c_position.a;\n const cD = this.m_bodyD.c_position.c;\n let aD = this.m_bodyD.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n const qC = Rot.neo(aC);\n const qD = Rot.neo(aD);\n\n const linearError = 0.0;\n\n let coordinateA: number;\n let coordinateB: number;\n\n let JvAC: Vec2;\n let JvBD: Vec2;\n let JwA: number;\n let JwB: number;\n let JwC: number;\n let JwD: number;\n let mass = 0.0;\n\n if (this.m_type1 == RevoluteJoint.TYPE) {\n JvAC = Vec2.zero();\n JwA = 1.0;\n JwC = 1.0;\n mass += this.m_iA + this.m_iC;\n\n coordinateA = aA - aC - this.m_referenceAngleA;\n } else {\n const u = Rot.mulVec2(qC, this.m_localAxisC);\n const rC = Rot.mulSub(qC, this.m_localAnchorC, this.m_lcC);\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_lcA);\n JvAC = u;\n JwC = Vec2.crossVec2Vec2(rC, u);\n JwA = Vec2.crossVec2Vec2(rA, u);\n mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA;\n\n const pC = Vec2.sub(this.m_localAnchorC, this.m_lcC);\n const pA = Rot.mulTVec2(qC, Vec2.add(rA, Vec2.sub(cA, cC)));\n coordinateA = Vec2.dot(Vec2.sub(pA, pC), this.m_localAxisC);\n }\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\n coordinateB = aB - aD - this.m_referenceAngleB;\n } else {\n const u = Rot.mulVec2(qD, this.m_localAxisD);\n const rD = Rot.mulSub(qD, this.m_localAnchorD, this.m_lcD);\n const rB = 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(rB, 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\n const pD = Vec2.sub(this.m_localAnchorD, this.m_lcD);\n const pB = Rot.mulTVec2(qD, Vec2.add(rB, Vec2.sub(cB, cD)));\n coordinateB = Vec2.dot(pB, this.m_localAxisD) - Vec2.dot(pD, this.m_localAxisD);\n }\n\n const C = (coordinateA + this.m_ratio * coordinateB) - this.m_constant;\n\n let impulse = 0.0;\n if (mass > 0.0) {\n impulse = -C / mass;\n }\n\n cA.addMul(this.m_mA * impulse, JvAC);\n aA += this.m_iA * impulse * JwA;\n cB.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\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\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\n // TODO_ERIN not implemented\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointOpt extends JointOpt {\n /**\n * The bodyB angle minus bodyA angle in radians.\n */\n angularOffset?: number;\n /**\n * The maximum motor force in N.\n */\n maxForce?: number;\n /**\n * The maximum motor torque in N-m.\n */\n maxTorque?: number;\n /**\n * Position correction factor in the range [0,1].\n */\n correctionFactor?: number;\n /**\n * Position of bodyB minus the position of bodyA, in bodyA's frame, in meters.\n */\n linearOffset?: Vec2Value;\n}\n\n/**\n * Motor joint definition.\n */\nexport interface MotorJointDef extends JointDef, MotorJointOpt {\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 1.0,\n maxTorque : 1.0,\n correctionFactor : 0.3\n};\n\ndeclare module \"./MotorJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MotorJoint(def: MotorJointDef): MotorJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MotorJoint(def: MotorJointOpt, bodyA: Body, bodyB: Body): MotorJoint;\n}\n\n/**\n * A motor joint is used to control the relative motion between two bodies. A\n * typical usage is to control the movement of a dynamic body with respect to\n * the ground.\n */\n// @ts-expect-error\nexport class MotorJoint extends Joint {\n static TYPE = \"motor-joint\" as const;\n\n /** @internal */ m_type: \"motor-joint\";\n /** @internal */ m_linearOffset: Vec2;\n /** @internal */ m_angularOffset: number;\n /** @internal */ m_linearImpulse: Vec2;\n /** @internal */ m_angularImpulse: number;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_maxTorque: number;\n /** @internal */ m_correctionFactor: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_linearError: Vec2;\n /** @internal */ m_angularError: number;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_linearMass: Mat22;\n /** @internal */ m_angularMass: number;\n\n constructor(def: MotorJointDef);\n constructor(def: MotorJointOpt, bodyA: Body, bodyB: Body);\n constructor(def: MotorJointDef | MotorJointOpt, bodyA?: Body, bodyB?: Body) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MotorJoint)) {\n return new MotorJoint(def, bodyA, bodyB);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MotorJoint.TYPE;\n\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\n this.m_linearImpulse = Vec2.zero();\n this.m_angularImpulse = 0.0;\n\n this.m_maxForce = def.maxForce;\n this.m_maxTorque = def.maxTorque;\n this.m_correctionFactor = def.correctionFactor;\n\n // Point-to-point constraint\n // Cdot = v2 - v1\n // = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n //\n // r1 = offset - c1\n // r2 = -c2\n\n // Angle constraint\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n maxForce: this.m_maxForce,\n maxTorque: this.m_maxTorque,\n correctionFactor: this.m_correctionFactor,\n\n linearOffset: this.m_linearOffset,\n angularOffset: this.m_angularOffset,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MotorJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new MotorJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Set the maximum friction force in N.\n */\n setMaxForce(force: number): void {\n _ASSERT && console.assert(Number.isFinite(force) && force >= 0.0);\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum friction force in N.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the maximum friction torque in N*m.\n */\n setMaxTorque(torque: number): void {\n _ASSERT && console.assert(Number.isFinite(torque) && torque >= 0.0);\n this.m_maxTorque = torque;\n }\n\n /**\n * Get the maximum friction torque in N*m.\n */\n getMaxTorque(): number {\n return this.m_maxTorque;\n }\n\n /**\n * Set the position correction factor in the range [0,1].\n */\n setCorrectionFactor(factor: number): void {\n _ASSERT && console.assert(Number.isFinite(factor) && 0.0 <= factor && factor <= 1.0);\n this.m_correctionFactor = factor;\n }\n\n /**\n * Get the position correction factor in the range [0,1].\n */\n getCorrectionFactor(): number {\n return this.m_correctionFactor;\n }\n\n /**\n * Set/get the target linear offset, in frame A, in meters.\n */\n setLinearOffset(linearOffset: Vec2Value): void {\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\n getLinearOffset(): Vec2 {\n return this.m_linearOffset;\n }\n\n /**\n * Set/get the target angular offset, in radians.\n */\n setAngularOffset(angularOffset: number): void {\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\n getAngularOffset(): number {\n return this.m_angularOffset;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getPosition();\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getPosition();\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_linearImpulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_angularImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective mass matrix.\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\n // J = [-I -r1_skew I r2_skew]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n // Upper 2 by 2 of K for point to point\n const 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\n this.m_linearMass = K.getInverse();\n\n this.m_angularMass = iA + iB;\n if (this.m_angularMass > 0.0) {\n this.m_angularMass = 1.0 / this.m_angularMass;\n }\n\n this.m_linearError = Vec2.zero();\n this.m_linearError.addCombine(1, cB, 1, this.m_rB);\n this.m_linearError.subCombine(1, cA, 1, this.m_rA);\n\n this.m_angularError = aB - aA - this.m_angularOffset;\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_linearImpulse.mul(step.dtRatio);\n this.m_angularImpulse *= step.dtRatio;\n\n const P = Vec2.neo(this.m_linearImpulse.x, this.m_linearImpulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_angularImpulse);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_angularImpulse);\n\n } else {\n this.m_linearImpulse.setZero();\n this.m_angularImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const h = step.dt;\n const inv_h = step.inv_dt;\n\n // Solve angular friction\n {\n const Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError;\n let impulse = -this.m_angularMass * Cdot;\n\n const oldImpulse = this.m_angularImpulse;\n const maxImpulse = h * this.m_maxTorque;\n this.m_angularImpulse = clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_angularImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve linear friction\n {\n const Cdot = Vec2.zero();\n Cdot.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n Cdot.addMul(inv_h * this.m_correctionFactor, this.m_linearError);\n\n let impulse = Vec2.neg(Mat22.mulVec2(this.m_linearMass, Cdot));\n const oldImpulse = Vec2.clone(this.m_linearImpulse);\n this.m_linearImpulse.add(impulse);\n\n const maxImpulse = h * this.m_maxForce;\n\n this.m_linearImpulse.clamp(maxImpulse);\n\n impulse = Vec2.sub(this.m_linearImpulse, oldImpulse);\n\n vA.subMul(mA, impulse);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, impulse);\n\n vB.addMul(mB, impulse);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Mat22 } from \"../../common/Mat22\";\nimport { Rot } from \"../../common/Rot\";\nimport { Transform } from \"../../common/Transform\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointOpt extends JointOpt {\n /**\n * [maxForce = 0.0] The maximum constraint force that can be exerted to move\n * the candidate body. Usually you will express as some multiple of the\n * weight (multiplier * mass * gravity).\n */\n maxForce?: number;\n /**\n * [frequencyHz = 5.0] The response speed.\n */\n frequencyHz?: number;\n /**\n * [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical\n * damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Mouse joint definition. This requires a world target point, tuning\n * parameters, and the time step.\n */\nexport interface MouseJointDef extends JointDef, MouseJointOpt {\n /**\n * The initial world target point. This is assumed to coincide with the body\n * anchor initially.\n */\n target: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxForce : 0.0,\n frequencyHz : 5.0,\n dampingRatio : 0.7\n};\n\ndeclare module \"./MouseJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MouseJoint(def: MouseJointDef): MouseJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function MouseJoint(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value): MouseJoint;\n}\n\n/**\n * A mouse joint is used to make a point on a body track a specified world\n * point. This a soft constraint with a maximum force. This allows the\n * constraint to stretch and without applying huge forces.\n *\n * You need to call setTarget(target) every time that mouse is \n * moved, to track the new location of the mouse.\n *\n * NOTE: this joint is not documented in the manual because it was developed to\n * be used in the testbed. If you want to learn how to use the mouse joint, look\n * at the testbed.\n */\n// @ts-expect-error\nexport class MouseJoint extends Joint {\n static TYPE = \"mouse-joint\" as const;\n\n /** @internal */ m_type: \"mouse-joint\";\n /** @internal */ m_targetA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_maxForce: number;\n /** @internal */ m_impulse: Vec2;\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n /** @internal */ m_beta: number;\n /** @internal */ m_gamma: number;\n // Solver temp\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat22;\n /** @internal */ m_C: Vec2;\n\n constructor(def: MouseJointDef);\n constructor(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value);\n constructor(def: MouseJointDef, bodyA?: Body, bodyB?: Body, target?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof MouseJoint)) {\n return new MouseJoint(def, bodyA, bodyB, target);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = MouseJoint.TYPE;\n\n _ASSERT && console.assert(Number.isFinite(def.maxForce) && def.maxForce >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.frequencyHz) && def.frequencyHz >= 0.0);\n _ASSERT && console.assert(Number.isFinite(def.dampingRatio) && def.dampingRatio >= 0.0);\n\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\n this.m_localAnchorB = Transform.mulTVec2(bodyB.getTransform(), this.m_targetA);\n\n this.m_maxForce = def.maxForce;\n this.m_impulse = Vec2.zero();\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_beta = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rB = Vec2.zero();\n this.m_localCenterB = Vec2.zero();\n this.m_invMassB = 0.0;\n this.m_invIB = 0.0;\n this.m_mass = new Mat22();\n this.m_C = Vec2.zero();\n\n // p = attached point, m = mouse point\n // C = p - m\n // Cdot = v\n // = v + cross(w, r)\n // J = [I r_skew]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n target: this.m_targetA,\n maxForce: this.m_maxForce,\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n _localAnchorB: this.m_localAnchorB,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): MouseJoint {\n data = {...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 const joint = new MouseJoint(data);\n if (data._localAnchorB) {\n joint.m_localAnchorB = data._localAnchorB;\n }\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Use this to update the target point.\n */\n setTarget(target: Vec2Value): void {\n if (Vec2.areEqual(target, this.m_targetA)) return;\n this.m_bodyB.setAwake(true);\n this.m_targetA.set(target);\n }\n\n getTarget(): Vec2 {\n return this.m_targetA;\n }\n\n /**\n * Set the maximum force in Newtons.\n */\n setMaxForce(force: number): void {\n this.m_maxForce = force;\n }\n\n /**\n * Get the maximum force in Newtons.\n */\n getMaxForce(): number {\n return this.m_maxForce;\n }\n\n /**\n * Set the frequency in Hertz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get the frequency in Hertz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set the damping ratio (dimensionless).\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get the damping ratio (dimensionless).\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return Vec2.clone(this.m_targetA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(inv_dt, this.m_impulse);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * 0.0;\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_targetA.sub(newOrigin);\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const position = this.m_bodyB.c_position;\n const velocity = this.m_bodyB.c_velocity;\n\n const cB = position.c;\n const aB = position.a;\n const vB = velocity.v;\n let wB = velocity.w;\n\n const qB = Rot.neo(aB);\n\n const mass = this.m_bodyB.getMass();\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * mass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = mass * (omega * omega);\n\n // magic formulas\n // gamma has units of inverse mass.\n // beta has units of inverse time.\n const h = step.dt;\n _ASSERT && console.assert(d + h * k > EPSILON);\n this.m_gamma = h * (d + h * k);\n if (this.m_gamma != 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n this.m_beta = h * k * this.m_gamma;\n\n // Compute the effective mass matrix.\n this.m_rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // K = [(1/m1 + 1/m2) * eye(2) - skew(r1) * invI1 * skew(r1) - skew(r2) *\n // invI2 * skew(r2)]\n // = [1/m1+1/m2 0 ] + invI1 * [r1.y*r1.y -r1.x*r1.y] + invI2 * [r1.y*r1.y\n // -r1.x*r1.y]\n // [ 0 1/m1+1/m2] [-r1.x*r1.y r1.x*r1.x] [-r1.x*r1.y r1.x*r1.x]\n const K = new Mat22();\n K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y\n + 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\n + this.m_gamma;\n\n this.m_mass = K.getInverse();\n\n this.m_C.setVec2(cB);\n this.m_C.addCombine(1, this.m_rB, -1, this.m_targetA);\n this.m_C.mul(this.m_beta);\n\n // Cheat with some damping\n wB *= 0.98;\n\n if (step.warmStarting) {\n this.m_impulse.mul(step.dtRatio);\n vB.addMul(this.m_invMassB, this.m_impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, this.m_impulse);\n\n } else {\n this.m_impulse.setZero();\n }\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const velocity = this.m_bodyB.c_velocity;\n const vB = Vec2.clone(velocity.v);\n let wB = velocity.w;\n\n // Cdot = v + cross(w, r)\n\n const Cdot = Vec2.crossNumVec2(wB, this.m_rB);\n Cdot.add(vB);\n\n Cdot.addCombine(1, this.m_C, this.m_gamma, this.m_impulse);\n Cdot.neg();\n\n let impulse = Mat22.mulVec2(this.m_mass, Cdot);\n\n const oldImpulse = Vec2.clone(this.m_impulse);\n this.m_impulse.add(impulse);\n const maxImpulse = step.dt * this.m_maxForce;\n this.m_impulse.clamp(maxImpulse);\n impulse = Vec2.sub(this.m_impulse, oldImpulse);\n\n vB.addMul(this.m_invMassB, impulse);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, impulse);\n\n velocity.v.setVec2(vB);\n velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n return true;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { EPSILON } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\n// tslint:disable-next-line:no-empty-interface\nexport interface PulleyJointOpt extends JointOpt {\n}\n\n/**\n * Pulley joint definition. This requires two ground anchors, two dynamic body\n * anchor points, and a pulley ratio.\n */\nexport interface PulleyJointDef extends JointDef, PulleyJointOpt {\n /**\n * The first ground anchor in world coordinates. This point never moves.\n */\n groundAnchorA: Vec2Value;\n /**\n * The second ground anchor in world coordinates. This point never moves.\n */\n groundAnchorB: Vec2Value;\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The reference length for the segment attached to bodyA.\n */\n lengthA: number;\n /**\n * The reference length for the segment attached to bodyB.\n */\n lengthB: number;\n /**\n * The pulley ratio, used to simulate a block-and-tackle.\n */\n ratio: number;\n\n /** @hidden */ anchorA?: Vec2Value;\n /** @hidden */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n collideConnected : true\n};\n\ndeclare module \"./PulleyJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PulleyJoint(def: PulleyJointDef): PulleyJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function PulleyJoint(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number): PulleyJoint;\n}\n\n/**\n * The pulley joint is connected to two bodies and two fixed ground points. The\n * pulley supports a ratio such that: length1 + ratio * length2 <= constant\n *\n * Yes, the force transmitted is scaled by the ratio.\n *\n * Warning: the pulley joint can get a bit squirrelly by itself. They often work\n * better when combined with prismatic joints. You should also cover the the\n * anchor points with static shapes to prevent one side from going to zero\n * length.\n */\n// @ts-expect-error\nexport class PulleyJoint extends Joint {\n static TYPE = \"pulley-joint\" as const;\n // static MIN_PULLEY_LENGTH: number = 2.0; // TODO where this is used?\n\n /** @internal */ m_type: \"pulley-joint\";\n /** @internal */ m_groundAnchorA: Vec2;\n /** @internal */ m_groundAnchorB: Vec2;\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_lengthA: number;\n /** @internal */ m_lengthB: number;\n /** @internal */ m_ratio: number;\n /** @internal */ m_constant: number;\n /** @internal */ m_impulse: number;\n\n // Solver temp\n /** @internal */ m_uA: Vec2;\n /** @internal */ m_uB: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: number;\n\n constructor(def: PulleyJointDef);\n constructor(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number);\n constructor(def: PulleyJointDef, bodyA?: Body, bodyB?: Body, groundA?: Vec2Value, groundB?: Vec2Value, anchorA?: Vec2Value, anchorB?: Vec2Value, ratio?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof PulleyJoint)) {\n return new PulleyJoint(def, bodyA, bodyB, groundA, groundB, anchorA, anchorB, ratio);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = PulleyJoint.TYPE;\n this.m_groundAnchorA = Vec2.clone(groundA ? groundA : def.groundAnchorA || Vec2.neo(-1.0, 1.0));\n this.m_groundAnchorB = Vec2.clone(groundB ? groundB : def.groundAnchorB || Vec2.neo(1.0, 1.0));\n this.m_localAnchorA = Vec2.clone(anchorA ? bodyA.getLocalPoint(anchorA) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchorB ? bodyB.getLocalPoint(anchorB) : def.localAnchorB || Vec2.neo(1.0, 0.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\n _ASSERT && console.assert(ratio > EPSILON);\n\n this.m_constant = this.m_lengthA + this.m_ratio * this.m_lengthB;\n\n this.m_impulse = 0.0;\n\n // Pulley:\n // length1 = norm(p1 - s1)\n // length2 = norm(p2 - s2)\n // C0 = (length1 + ratio * length2)_initial\n // C = C0 - (length1 + ratio * length2)\n // u1 = (p1 - s1) / norm(p1 - s1)\n // u2 = (p2 - s2) / norm(p2 - s2)\n // Cdot = -dot(u1, v1 + cross(w1, r1)) - ratio * dot(u2, v2 + cross(w2, r2))\n // J = -[u1 cross(r1, u1) ratio * u2 ratio * cross(r2, u2)]\n // K = J * invM * JT\n // = invMass1 + invI1 * cross(r1, u1)^2 + ratio^2 * (invMass2 + invI2 *\n // cross(r2, u2)^2)\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): PulleyJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new PulleyJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * Get the first ground anchor.\n */\n getGroundAnchorA(): Vec2 {\n return this.m_groundAnchorA;\n }\n\n /**\n * Get the second ground anchor.\n */\n getGroundAnchorB(): Vec2 {\n return this.m_groundAnchorB;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getLengthA(): number {\n return this.m_lengthA;\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getLengthB(): number {\n return this.m_lengthB;\n }\n\n /**\n * Get the pulley ratio.\n */\n getRatio(): number {\n return this.m_ratio;\n }\n\n /**\n * Get the current length of the segment attached to bodyA.\n */\n getCurrentLengthA(): number {\n const p = this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n const s = this.m_groundAnchorA;\n return Vec2.distance(p, s);\n }\n\n /**\n * Get the current length of the segment attached to bodyB.\n */\n getCurrentLengthB(): number {\n const p = this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n const s = this.m_groundAnchorB;\n return Vec2.distance(p, s);\n }\n\n /**\n * Shift the origin for any points stored in world coordinates.\n *\n * @param newOrigin\n */\n shiftOrigin(newOrigin: Vec2Value): void {\n this.m_groundAnchorA.sub(newOrigin);\n this.m_groundAnchorB.sub(newOrigin);\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_uB).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // Get the pulley axes.\n this.m_uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n this.m_uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = this.m_uA.length();\n const lengthB = this.m_uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n this.m_uA.mul(1.0 / lengthA);\n } else {\n this.m_uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n this.m_uB.mul(1.0 / lengthB);\n } else {\n this.m_uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(this.m_rA, this.m_uA);\n const ruB = Vec2.crossVec2Vec2(this.m_rB, this.m_uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n this.m_mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support variable time steps.\n this.m_impulse *= step.dtRatio;\n\n // Warm starting.\n const PA = Vec2.mulNumVec2(-this.m_impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * this.m_impulse, this.m_uB);\n\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const vpA = Vec2.add(vA, Vec2.crossNumVec2(wA, this.m_rA));\n const vpB = Vec2.add(vB, Vec2.crossNumVec2(wB, this.m_rB));\n\n const Cdot = -Vec2.dot(this.m_uA, vpA) - this.m_ratio * Vec2.dot(this.m_uB, vpB);\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const PA = Vec2.mulNumVec2(-impulse, this.m_uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, this.m_uB);\n vA.addMul(this.m_invMassA, PA);\n wA += this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, PA);\n vB.addMul(this.m_invMassB, PB);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, PB);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n // Get the pulley axes.\n const uA = Vec2.sub(Vec2.add(cA, this.m_rA), this.m_groundAnchorA);\n const uB = Vec2.sub(Vec2.add(cB, this.m_rB), this.m_groundAnchorB);\n\n const lengthA = uA.length();\n const lengthB = uB.length();\n\n if (lengthA > 10.0 * Settings.linearSlop) {\n uA.mul(1.0 / lengthA);\n } else {\n uA.setZero();\n }\n\n if (lengthB > 10.0 * Settings.linearSlop) {\n uB.mul(1.0 / lengthB);\n } else {\n uB.setZero();\n }\n\n // Compute effective mass.\n const ruA = Vec2.crossVec2Vec2(rA, uA);\n const ruB = Vec2.crossVec2Vec2(rB, uB);\n\n const mA = this.m_invMassA + this.m_invIA * ruA * ruA;\n const mB = this.m_invMassB + this.m_invIB * ruB * ruB;\n\n let mass = mA + this.m_ratio * this.m_ratio * mB;\n\n if (mass > 0.0) {\n mass = 1.0 / mass;\n }\n\n const C = this.m_constant - lengthA - this.m_ratio * lengthB;\n const linearError = math_abs(C);\n\n const impulse = -mass * C;\n\n const PA = Vec2.mulNumVec2(-impulse, uA);\n const PB = Vec2.mulNumVec2(-this.m_ratio * impulse, uB);\n\n cA.addMul(this.m_invMassA, PA);\n aA += this.m_invIA * Vec2.crossVec2Vec2(rA, PA);\n cB.addMul(this.m_invMassB, PB);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, PB);\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return linearError < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_min = Math.min;\n\n/** @internal */ enum LimitState {\n inactiveLimit = 0,\n atLowerLimit = 1,\n atUpperLimit = 2,\n equalLimits = 3,\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointOpt extends JointOpt {\n /**\n * The maximum length of the rope.\n * Warning: this must be larger than linearSlop or the joint will have no effect.\n */\n maxLength?: number;\n}\n\n/**\n * Rope joint definition. This requires two body anchor points and a maximum\n * lengths. Note: by default the connected objects will not collide. see\n * collideConnected in JointDef.\n */\nexport interface RopeJointDef extends JointDef, RopeJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n maxLength : 0.0,\n};\n\ndeclare module \"./RopeJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RopeJoint(def: RopeJointDef): RopeJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function RopeJoint(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): RopeJoint;\n}\n\n/**\n * A rope joint enforces a maximum distance between two points on two bodies. It\n * has no other effect.\n *\n * Warning: if you attempt to change the maximum length during the simulation\n * you will get some non-physical behavior.\n *\n * A model that would allow you to dynamically modify the length would have some\n * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you\n * want to dynamically control length.\n */\n// @ts-expect-error\nexport class RopeJoint extends Joint {\n static TYPE = \"rope-joint\" as const;\n\n /** @internal */ m_type: \"rope-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n\n /** @internal */ m_maxLength: number;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_length: number;\n /** @internal */ m_state: number; // TODO enum\n\n // Solver temp\n /** @internal */ m_u: Vec2;\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n constructor(def: RopeJointDef);\n constructor(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: RopeJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof RopeJoint)) {\n return new RopeJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = RopeJoint.TYPE;\n this.m_localAnchorA = Vec2.clone(anchor ? bodyA.getLocalPoint(anchor) : def.localAnchorA || Vec2.neo(-1.0, 0.0));\n this.m_localAnchorB = Vec2.clone(anchor ? bodyB.getLocalPoint(anchor) : def.localAnchorB || Vec2.neo(1.0, 0.0));\n\n this.m_maxLength = def.maxLength;\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_length = 0.0;\n this.m_state = LimitState.inactiveLimit;\n\n // Limit:\n // C = norm(pB - pA) - L\n // u = (pB - pA) / norm(pB - pA)\n // Cdot = dot(u, vB + cross(wB, rB) - vA - cross(wA, rA))\n // J = [-u -cross(rA, u) u cross(rB, u)]\n // K = J * invM * JT\n // = invMassA + invIA * cross(rA, u)^2 + invMassB + invIB * cross(rB, u)^2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n maxLength: this.m_maxLength,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): RopeJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new RopeJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\n if (Number.isFinite(def.maxLength)) {\n this.m_maxLength = def.maxLength;\n }\n }\n\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Set the maximum length of the rope.\n */\n setMaxLength(length: number): void {\n this.m_maxLength = length;\n }\n\n /**\n * Get the maximum length of the rope.\n */\n getMaxLength(): number {\n return this.m_maxLength;\n }\n\n getLimitState(): number {\n // TODO LimitState\n return this.m_state;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.mulNumVec2(this.m_impulse, this.m_u).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return 0.0;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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, cB, 1, this.m_rB);\n this.m_u.subCombine(1, cA, 1, this.m_rA);\n\n this.m_length = this.m_u.length();\n\n const C = this.m_length - this.m_maxLength;\n if (C > 0.0) {\n this.m_state = LimitState.atUpperLimit;\n } else {\n this.m_state = LimitState.inactiveLimit;\n }\n\n if (this.m_length > Settings.linearSlop) {\n this.m_u.mul(1.0 / this.m_length);\n } else {\n this.m_u.setZero();\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n return;\n }\n\n // Compute effective mass.\n const crA = Vec2.crossVec2Vec2(this.m_rA, this.m_u);\n const crB = Vec2.crossVec2Vec2(this.m_rB, this.m_u);\n const invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB;\n\n this.m_mass = invMass != 0.0 ? 1.0 / invMass : 0.0;\n\n if (step.warmStarting) {\n // Scale the impulse to support a variable time step.\n this.m_impulse *= step.dtRatio;\n\n const P = Vec2.mulNumVec2(this.m_impulse, this.m_u);\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n } else {\n this.m_impulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Cdot = dot(u, v + cross(w, r))\n const vpA = Vec2.addCrossNumVec2(vA, wA, this.m_rA);\n const vpB = Vec2.addCrossNumVec2(vB, wB, this.m_rB);\n const C = this.m_length - this.m_maxLength;\n let Cdot = Vec2.dot(this.m_u, Vec2.sub(vpB, vpA));\n\n // Predictive constraint.\n if (C < 0.0) {\n Cdot += step.inv_dt * C;\n }\n\n let impulse = -this.m_mass * Cdot;\n const oldImpulse = this.m_impulse;\n this.m_impulse = math_min(0.0, this.m_impulse + impulse);\n impulse = this.m_impulse - oldImpulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_u);\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * Vec2.crossVec2Vec2(this.m_rA, P);\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * Vec2.crossVec2Vec2(this.m_rB, P);\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulSub(qA, this.m_localAnchorA, this.m_localCenterA);\n const rB = Rot.mulSub(qB, this.m_localAnchorB, this.m_localCenterB);\n const u = Vec2.zero();\n u.addCombine(1, cB, 1, rB);\n u.subCombine(1, cA, 1, rA);\n\n const length = u.normalize();\n let C = length - this.m_maxLength;\n\n C = clamp(C, 0.0, Settings.maxLinearCorrection);\n\n const impulse = -this.m_mass * C;\n const P = Vec2.mulNumVec2(impulse, u);\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * Vec2.crossVec2Vec2(rA, P);\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * Vec2.crossVec2Vec2(rB, P);\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return length - this.m_maxLength < Settings.linearSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Vec3 } from \"../../common/Vec3\";\nimport { Mat33 } from \"../../common/Mat33\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointOpt extends JointOpt {\n /**\n * The mass-spring-damper frequency in Hertz. Rotation only. Disable softness\n * with a value of 0.\n */\n frequencyHz?: number;\n /**\n * The damping ratio. 0 = no damping, 1 = critical damping.\n */\n dampingRatio?: number;\n /**\n * The bodyB angle minus bodyA angle in the reference state (radians).\n */\n referenceAngle?: number;\n}\n\n/**\n * Weld joint definition. You need to specify local anchor points where they are\n * attached and the relative body angle. The position of the anchor points is\n * important for computing the reaction torque.\n */\nexport interface WeldJointDef extends JointDef, WeldJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n frequencyHz : 0.0,\n dampingRatio : 0.0,\n};\n\ndeclare module \"./WeldJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WeldJoint(def: WeldJointDef): WeldJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WeldJoint(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): WeldJoint;\n}\n\n/**\n * A weld joint essentially glues two bodies together. A weld joint may distort\n * somewhat because the island constraint solver is approximate.\n */\n// @ts-expect-error\nexport class WeldJoint extends Joint {\n static TYPE = \"weld-joint\" as const;\n\n /** @internal */ m_type: \"weld-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_referenceAngle: number;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_impulse: Vec3;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_rA: Vec2;\n /** @internal */ m_rB: Vec2;\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n /** @internal */ m_mass: Mat33;\n\n constructor(def: WeldJointDef);\n constructor(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value);\n constructor(def: WeldJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WeldJoint)) {\n return new WeldJoint(def, bodyA, bodyB, anchor);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_type = WeldJoint.TYPE;\n\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\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_impulse = new Vec3();\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Solver temp\n this.m_rA;\n this.m_rB;\n this.m_localCenterA;\n this.m_localCenterB;\n this.m_invMassA;\n this.m_invMassB;\n this.m_invIA;\n this.m_invIB;\n this.m_mass = new Mat33();\n\n // Point-to-point constraint\n // C = p2 - p1\n // Cdot = v2 - v1\n // / = v2 + cross(w2, r2) - v1 - cross(w1, r1)\n // J = [-I -r1_skew I r2_skew ]\n // Identity used:\n // w k % (rx i + ry j) = w * (-ry i + rx j)\n\n // Angle constraint\n // C = angle2 - angle1 - referenceAngle\n // Cdot = w2 - w1\n // J = [0 0 -1 0 0 1]\n // K = invI1 + invI2\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\n frequencyHz: this.m_frequencyHz,\n dampingRatio: this.m_dampingRatio,\n\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n referenceAngle: this.m_referenceAngle,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WeldJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WeldJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * Get the reference angle.\n */\n getReferenceAngle(): number {\n return this.m_referenceAngle;\n }\n\n /**\n * Set frequency in Hz.\n */\n setFrequency(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n /**\n * Get frequency in Hz.\n */\n getFrequency(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set damping ratio.\n */\n setDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n /**\n * Get damping ratio.\n */\n getDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.neo(this.m_impulse.x, this.m_impulse.y).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_impulse.z;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\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\n // J = [-I -r1_skew I r2_skew]\n // [ 0 -1 0 1]\n // r_skew = [-ry; rx]\n\n // Matlab\n // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]\n // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]\n // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const 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\n * 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\n * 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\n if (this.m_frequencyHz > 0.0) {\n K.getInverse22(this.m_mass);\n\n let invM = iA + iB;\n const m = invM > 0.0 ? 1.0 / invM : 0.0;\n\n const C = aB - aA - this.m_referenceAngle;\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const d = 2.0 * m * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = m * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (d + h * k);\n this.m_gamma = this.m_gamma != 0.0 ? 1.0 / this.m_gamma : 0.0;\n this.m_bias = C * h * k * this.m_gamma;\n\n invM += this.m_gamma;\n this.m_mass.ez.z = invM != 0.0 ? 1.0 / invM : 0.0;\n } else if (K.ez.z == 0.0) {\n K.getInverse22(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n } else {\n K.getSymInverse33(this.m_mass);\n this.m_gamma = 0.0;\n this.m_bias = 0.0;\n }\n\n if (step.warmStarting) {\n // Scale impulses to support a variable time step.\n this.m_impulse.mul(step.dtRatio);\n\n const P = Vec2.neo(this.m_impulse.x, this.m_impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + this.m_impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + this.m_impulse.z);\n\n } else {\n this.m_impulse.setZero();\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n if (this.m_frequencyHz > 0.0) {\n const Cdot2 = wB - wA;\n\n const impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z);\n this.m_impulse.z += impulse2;\n\n wA -= iA * impulse2;\n wB += iB * impulse2;\n\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n\n const impulse1 = Vec2.neg(Mat33.mulVec2(this.m_mass, Cdot1));\n this.m_impulse.x += impulse1.x;\n this.m_impulse.y += impulse1.y;\n\n const P = Vec2.clone(impulse1);\n\n vA.subMul(mA, P);\n wA -= iA * Vec2.crossVec2Vec2(this.m_rA, P);\n\n vB.addMul(mB, P);\n wB += iB * Vec2.crossVec2Vec2(this.m_rB, P);\n } else {\n const Cdot1 = Vec2.zero();\n Cdot1.addCombine(1, vB, 1, Vec2.crossNumVec2(wB, this.m_rB));\n Cdot1.subCombine(1, vA, 1, Vec2.crossNumVec2(wA, this.m_rA));\n const Cdot2 = wB - wA;\n const Cdot = new Vec3(Cdot1.x, Cdot1.y, Cdot2);\n\n const impulse = Vec3.neg(Mat33.mulVec3(this.m_mass, Cdot));\n this.m_impulse.add(impulse);\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n vA.subMul(mA, P);\n wA -= iA * (Vec2.crossVec2Vec2(this.m_rA, P) + impulse.z);\n\n vB.addMul(mB, P);\n wB += iB * (Vec2.crossVec2Vec2(this.m_rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_velocity.v = vA;\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v = vB;\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n\n let positionError: number;\n let angularError: number;\n\n const K = new Mat33();\n K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB;\n K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB;\n K.ez.x = -rA.y * iA - rB.y * iB;\n K.ex.y = K.ey.x;\n K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB;\n K.ez.y = rA.x * iA + rB.x * iB;\n K.ex.z = K.ez.x;\n K.ey.z = K.ez.y;\n K.ez.z = iA + iB;\n\n if (this.m_frequencyHz > 0.0) {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n positionError = C1.length();\n angularError = 0.0;\n\n const P = Vec2.neg(K.solve22(C1));\n\n cA.subMul(mA, P);\n aA -= iA * Vec2.crossVec2Vec2(rA, P);\n\n cB.addMul(mB, P);\n aB += iB * Vec2.crossVec2Vec2(rB, P);\n } else {\n const C1 = Vec2.zero();\n C1.addCombine(1, cB, 1, rB);\n C1.subCombine(1, cA, 1, rA);\n\n const C2 = aB - aA - this.m_referenceAngle;\n\n positionError = C1.length();\n angularError = math_abs(C2);\n\n const C = new Vec3(C1.x, C1.y, C2);\n\n let impulse = new Vec3();\n if (K.ez.z > 0.0) {\n impulse = Vec3.neg(K.solve33(C));\n } else {\n const impulse2 = Vec2.neg(K.solve22(C1));\n impulse.set(impulse2.x, impulse2.y, 0.0);\n }\n\n const P = Vec2.neo(impulse.x, impulse.y);\n\n cA.subMul(mA, P);\n aA -= iA * (Vec2.crossVec2Vec2(rA, P) + impulse.z);\n\n cB.addMul(mB, P);\n aB += iB * (Vec2.crossVec2Vec2(rB, P) + impulse.z);\n }\n\n this.m_bodyA.c_position.c = cA;\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c = cB;\n this.m_bodyB.c_position.a = aB;\n\n return positionError <= Settings.linearSlop && angularError <= Settings.angularSlop;\n }\n\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { options } from \"../../util/options\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { clamp } from \"../../common/Math\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { Rot } from \"../../common/Rot\";\nimport { Joint, JointOpt, JointDef } from \"../Joint\";\nimport { Body } from \"../Body\";\nimport { TimeStep } from \"../Solver\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n/** @internal */ const math_abs = Math.abs;\n/** @internal */ const math_PI = Math.PI;\n\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointOpt extends JointOpt {\n /**\n * Enable/disable the joint motor.\n */\n enableMotor?: boolean;\n /**\n * The maximum motor torque, usually in N-m.\n */\n maxMotorTorque?: number;\n /**\n * The desired motor speed in radians per second.\n */\n motorSpeed?: number;\n /**\n * Suspension frequency, zero indicates no suspension.\n */\n frequencyHz?: number;\n /**\n * Suspension damping ratio, one indicates critical damping.\n */\n dampingRatio?: number;\n}\n\n/**\n * Wheel joint definition. This requires defining a line of motion using an axis\n * and an anchor point. The definition uses local anchor points and a local axis\n * so that the initial configuration can violate the constraint slightly. The\n * joint translation is zero when the local anchor points coincide in world\n * space. Using local anchors and a local axis helps when saving and loading a\n * game.\n */\nexport interface WheelJointDef extends JointDef, WheelJointOpt {\n /**\n * The local anchor point relative to bodyA's origin.\n */\n localAnchorA: Vec2Value;\n /**\n * The local anchor point relative to bodyB's origin.\n */\n localAnchorB: Vec2Value;\n /**\n * The local translation axis in bodyA.\n */\n localAxisA: Vec2Value;\n\n /** @internal renamed to localAxisA */\n localAxis?: Vec2Value;\n\n /** @internal */ anchorA?: Vec2Value;\n /** @internal */ anchorB?: Vec2Value;\n}\n\n/** @internal */ const DEFAULTS = {\n enableMotor : false,\n maxMotorTorque : 0.0,\n motorSpeed : 0.0,\n frequencyHz : 2.0,\n dampingRatio : 0.7,\n};\n\ndeclare module \"./WheelJoint\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WheelJoint(def: WheelJointDef): WheelJoint;\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function WheelJoint(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value): WheelJoint;\n}\n\n/**\n * A wheel joint. This joint provides two degrees of freedom: translation along\n * an axis fixed in bodyA and rotation in the plane. In other words, it is a\n * point to line constraint with a rotational motor and a linear spring/damper.\n * This joint is designed for vehicle suspensions.\n */\n// @ts-expect-error\nexport class WheelJoint extends Joint {\n static TYPE = \"wheel-joint\" as const;\n\n /** @internal */ m_type: \"wheel-joint\";\n /** @internal */ m_localAnchorA: Vec2;\n /** @internal */ m_localAnchorB: Vec2;\n /** @internal */ m_localXAxisA: Vec2;\n /** @internal */ m_localYAxisA: Vec2;\n\n /** @internal */ m_mass: number;\n /** @internal */ m_impulse: number;\n /** @internal */ m_motorMass: number;\n /** @internal */ m_motorImpulse: number;\n /** @internal */ m_springMass: number;\n /** @internal */ m_springImpulse: number;\n\n /** @internal */ m_maxMotorTorque: number;\n /** @internal */ m_motorSpeed: number;\n /** @internal */ m_enableMotor: boolean;\n\n /** @internal */ m_frequencyHz: number;\n /** @internal */ m_dampingRatio: number;\n\n /** @internal */ m_bias: number;\n /** @internal */ m_gamma: number;\n\n // Solver temp\n /** @internal */ m_localCenterA: Vec2;\n /** @internal */ m_localCenterB: Vec2;\n /** @internal */ m_invMassA: number;\n /** @internal */ m_invMassB: number;\n /** @internal */ m_invIA: number;\n /** @internal */ m_invIB: number;\n\n /** @internal */ m_ax: Vec2;\n /** @internal */ m_ay: Vec2;\n /** @internal */ m_sAx: number;\n /** @internal */ m_sBx: number;\n /** @internal */ m_sAy: number;\n /** @internal */ m_sBy: number;\n\n constructor(def: WheelJointDef);\n constructor(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value);\n constructor(def: WheelJointDef, bodyA?: Body, bodyB?: Body, anchor?: Vec2Value, axis?: Vec2Value) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof WheelJoint)) {\n return new WheelJoint(def, bodyA, bodyB, anchor, axis);\n }\n\n def = options(def, DEFAULTS);\n super(def, bodyA, bodyB);\n bodyA = this.m_bodyA;\n bodyB = this.m_bodyB;\n\n this.m_ax = Vec2.zero();\n this.m_ay = Vec2.zero();\n\n this.m_type = WheelJoint.TYPE;\n\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\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 // localAxis is renamed to localAxisA, this is for backward compatibility\n this.m_localXAxisA = Vec2.clone(def.localAxis);\n } else {\n this.m_localXAxisA = Vec2.neo(1.0, 0.0);\n }\n\n this.m_localYAxisA = Vec2.crossNumVec2(1.0, this.m_localXAxisA);\n\n this.m_mass = 0.0;\n this.m_impulse = 0.0;\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n this.m_springMass = 0.0;\n this.m_springImpulse = 0.0;\n\n this.m_maxMotorTorque = def.maxMotorTorque;\n this.m_motorSpeed = def.motorSpeed;\n this.m_enableMotor = def.enableMotor;\n\n this.m_frequencyHz = def.frequencyHz;\n this.m_dampingRatio = def.dampingRatio;\n\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n\n // Linear constraint (point-to-line)\n // d = pB - pA = xB + rB - xA - rA\n // C = dot(ay, d)\n // Cdot = dot(d, cross(wA, ay)) + dot(ay, vB + cross(wB, rB) - vA - cross(wA,\n // rA))\n // = -dot(ay, vA) - dot(cross(d + rA, ay), wA) + dot(ay, vB) + dot(cross(rB,\n // ay), vB)\n // J = [-ay, -cross(d + rA, ay), ay, cross(rB, ay)]\n\n // Spring linear constraint\n // C = dot(ax, d)\n // Cdot = = -dot(ax, vA) - dot(cross(d + rA, ax), wA) + dot(ax, vB) +\n // dot(cross(rB, ax), vB)\n // J = [-ax -cross(d+rA, ax) ax cross(rB, ax)]\n\n // Motor rotational constraint\n // Cdot = wB - wA\n // J = [0 0 -1 0 0 1]\n }\n\n /** @internal */\n _serialize(): object {\n return {\n type: this.m_type,\n bodyA: this.m_bodyA,\n bodyB: this.m_bodyB,\n collideConnected: this.m_collideConnected,\n\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\n localAnchorA: this.m_localAnchorA,\n localAnchorB: this.m_localAnchorB,\n localAxisA: this.m_localXAxisA,\n };\n }\n\n /** @internal */\n static _deserialize(data: any, world: any, restore: any): WheelJoint {\n data = {...data};\n data.bodyA = restore(Body, data.bodyA, world);\n data.bodyB = restore(Body, data.bodyB, world);\n const joint = new WheelJoint(data);\n return joint;\n }\n\n /** @hidden */\n _reset(def: Partial): void {\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.0, def.localAxisA));\n }\n if (def.enableMotor !== undefined) {\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\n /**\n * The local anchor point relative to bodyA's origin.\n */\n getLocalAnchorA(): Vec2 {\n return this.m_localAnchorA;\n }\n\n /**\n * The local anchor point relative to bodyB's origin.\n */\n getLocalAnchorB(): Vec2 {\n return this.m_localAnchorB;\n }\n\n /**\n * The local joint axis relative to bodyA.\n */\n getLocalAxisA(): Vec2 {\n return this.m_localXAxisA;\n }\n\n /**\n * Get the current joint translation, usually in meters.\n */\n getJointTranslation(): number {\n const bA = this.m_bodyA;\n const bB = this.m_bodyB;\n\n const pA = bA.getWorldPoint(this.m_localAnchorA);\n const pB = bB.getWorldPoint(this.m_localAnchorB);\n const d = Vec2.sub(pB, pA);\n const axis = bA.getWorldVector(this.m_localXAxisA);\n\n const translation = Vec2.dot(d, axis);\n return translation;\n }\n\n /**\n * Get the current joint translation speed, usually in meters per second.\n */\n getJointSpeed(): number {\n const wA = this.m_bodyA.m_angularVelocity;\n const wB = this.m_bodyB.m_angularVelocity;\n return wB - wA;\n }\n\n /**\n * Is the joint motor enabled?\n */\n isMotorEnabled(): boolean {\n return this.m_enableMotor;\n }\n\n /**\n * Enable/disable the joint motor.\n */\n enableMotor(flag: boolean): void {\n if (flag == this.m_enableMotor) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_enableMotor = flag;\n }\n\n /**\n * Set the motor speed, usually in radians per second.\n */\n setMotorSpeed(speed: number): void {\n if (speed == this.m_motorSpeed) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_motorSpeed = speed;\n }\n\n /**\n * Get the motor speed, usually in radians per second.\n */\n getMotorSpeed(): number {\n return this.m_motorSpeed;\n }\n\n /**\n * Set/Get the maximum motor force, usually in N-m.\n */\n setMaxMotorTorque(torque: number): void {\n if (torque == this.m_maxMotorTorque) return;\n this.m_bodyA.setAwake(true);\n this.m_bodyB.setAwake(true);\n this.m_maxMotorTorque = torque;\n }\n\n getMaxMotorTorque(): number {\n return this.m_maxMotorTorque;\n }\n\n /**\n * Get the current motor torque given the inverse time step, usually in N-m.\n */\n getMotorTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n /**\n * Set/Get the spring frequency in hertz. Setting the frequency to zero disables\n * the spring.\n */\n setSpringFrequencyHz(hz: number): void {\n this.m_frequencyHz = hz;\n }\n\n getSpringFrequencyHz(): number {\n return this.m_frequencyHz;\n }\n\n /**\n * Set/Get the spring damping ratio\n */\n setSpringDampingRatio(ratio: number): void {\n this.m_dampingRatio = ratio;\n }\n\n getSpringDampingRatio(): number {\n return this.m_dampingRatio;\n }\n\n /**\n * Get the anchor point on bodyA in world coordinates.\n */\n getAnchorA(): Vec2 {\n return this.m_bodyA.getWorldPoint(this.m_localAnchorA);\n }\n\n /**\n * Get the anchor point on bodyB in world coordinates.\n */\n getAnchorB(): Vec2 {\n return this.m_bodyB.getWorldPoint(this.m_localAnchorB);\n }\n\n /**\n * Get the reaction force on bodyB at the joint anchor in Newtons.\n */\n getReactionForce(inv_dt: number): Vec2 {\n return Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax).mul(inv_dt);\n }\n\n /**\n * Get the reaction torque on bodyB in N*m.\n */\n getReactionTorque(inv_dt: number): number {\n return inv_dt * this.m_motorImpulse;\n }\n\n initVelocityConstraints(step: TimeStep): void {\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\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const cA = this.m_bodyA.c_position.c;\n const aA = this.m_bodyA.c_position.a;\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n\n const cB = this.m_bodyB.c_position.c;\n const aB = this.m_bodyB.c_position.a;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n // Compute the effective masses.\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n // Point to line constraint\n {\n this.m_ay = Rot.mulVec2(qA, this.m_localYAxisA);\n this.m_sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ay);\n this.m_sBy = Vec2.crossVec2Vec2(rB, this.m_ay);\n\n this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy\n * this.m_sBy;\n\n if (this.m_mass > 0.0) {\n this.m_mass = 1.0 / this.m_mass;\n }\n }\n\n // Spring constraint\n this.m_springMass = 0.0;\n this.m_bias = 0.0;\n this.m_gamma = 0.0;\n if (this.m_frequencyHz > 0.0) {\n this.m_ax = Rot.mulVec2(qA, this.m_localXAxisA);\n this.m_sAx = Vec2.crossVec2Vec2(Vec2.add(d, rA), this.m_ax);\n this.m_sBx = Vec2.crossVec2Vec2(rB, this.m_ax);\n\n const invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx\n * this.m_sBx;\n\n if (invMass > 0.0) {\n this.m_springMass = 1.0 / invMass;\n\n const C = Vec2.dot(d, this.m_ax);\n\n // Frequency\n const omega = 2.0 * math_PI * this.m_frequencyHz;\n\n // Damping coefficient\n const damp = 2.0 * this.m_springMass * this.m_dampingRatio * omega;\n\n // Spring stiffness\n const k = this.m_springMass * omega * omega;\n\n // magic formulas\n const h = step.dt;\n this.m_gamma = h * (damp + h * k);\n if (this.m_gamma > 0.0) {\n this.m_gamma = 1.0 / this.m_gamma;\n }\n\n this.m_bias = C * h * k * this.m_gamma;\n\n this.m_springMass = invMass + this.m_gamma;\n if (this.m_springMass > 0.0) {\n this.m_springMass = 1.0 / this.m_springMass;\n }\n }\n } else {\n this.m_springImpulse = 0.0;\n }\n\n // Rotational motor\n if (this.m_enableMotor) {\n this.m_motorMass = iA + iB;\n if (this.m_motorMass > 0.0) {\n this.m_motorMass = 1.0 / this.m_motorMass;\n }\n } else {\n this.m_motorMass = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n if (step.warmStarting) {\n // Account for variable time step.\n this.m_impulse *= step.dtRatio;\n this.m_springImpulse *= step.dtRatio;\n this.m_motorImpulse *= step.dtRatio;\n\n const P = Vec2.combine(this.m_impulse, this.m_ay, this.m_springImpulse, this.m_ax);\n const LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse;\n const LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse;\n\n vA.subMul(this.m_invMassA, P);\n wA -= this.m_invIA * LA;\n\n vB.addMul(this.m_invMassB, P);\n wB += this.m_invIB * LB;\n\n } else {\n this.m_impulse = 0.0;\n this.m_springImpulse = 0.0;\n this.m_motorImpulse = 0.0;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n solveVelocityConstraints(step: TimeStep): void {\n const mA = this.m_invMassA;\n const mB = this.m_invMassB;\n const iA = this.m_invIA;\n const iB = this.m_invIB;\n\n const vA = this.m_bodyA.c_velocity.v;\n let wA = this.m_bodyA.c_velocity.w;\n const vB = this.m_bodyB.c_velocity.v;\n let wB = this.m_bodyB.c_velocity.w;\n\n // Solve spring constraint\n {\n const Cdot = Vec2.dot(this.m_ax, vB) - Vec2.dot(this.m_ax, vA) + this.m_sBx * wB - this.m_sAx * wA;\n const impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse);\n this.m_springImpulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ax);\n const LA = impulse * this.m_sAx;\n const LB = impulse * this.m_sBx;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n // Solve rotational motor constraint\n {\n const Cdot = wB - wA - this.m_motorSpeed;\n let impulse = -this.m_motorMass * Cdot;\n\n const oldImpulse = this.m_motorImpulse;\n const maxImpulse = step.dt * this.m_maxMotorTorque;\n this.m_motorImpulse = clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse);\n impulse = this.m_motorImpulse - oldImpulse;\n\n wA -= iA * impulse;\n wB += iB * impulse;\n }\n\n // Solve point to line constraint\n {\n const Cdot = Vec2.dot(this.m_ay, vB) - Vec2.dot(this.m_ay, vA) + this.m_sBy * wB - this.m_sAy * wA;\n const impulse = -this.m_mass * Cdot;\n this.m_impulse += impulse;\n\n const P = Vec2.mulNumVec2(impulse, this.m_ay);\n const LA = impulse * this.m_sAy;\n const LB = impulse * this.m_sBy;\n\n vA.subMul(mA, P);\n wA -= iA * LA;\n\n vB.addMul(mB, P);\n wB += iB * LB;\n }\n\n this.m_bodyA.c_velocity.v.setVec2(vA);\n this.m_bodyA.c_velocity.w = wA;\n this.m_bodyB.c_velocity.v.setVec2(vB);\n this.m_bodyB.c_velocity.w = wB;\n }\n\n /**\n * This returns true if the position errors are within tolerance.\n */\n solvePositionConstraints(step: TimeStep): boolean {\n const cA = this.m_bodyA.c_position.c;\n let aA = this.m_bodyA.c_position.a;\n const cB = this.m_bodyB.c_position.c;\n let aB = this.m_bodyB.c_position.a;\n\n const qA = Rot.neo(aA);\n const qB = Rot.neo(aB);\n\n const rA = Rot.mulVec2(qA, Vec2.sub(this.m_localAnchorA, this.m_localCenterA));\n const rB = Rot.mulVec2(qB, Vec2.sub(this.m_localAnchorB, this.m_localCenterB));\n const d = Vec2.zero();\n d.addCombine(1, cB, 1, rB);\n d.subCombine(1, cA, 1, rA);\n\n const ay = Rot.mulVec2(qA, this.m_localYAxisA);\n\n const sAy = Vec2.crossVec2Vec2(Vec2.add(d, rA), ay);\n const sBy = Vec2.crossVec2Vec2(rB, ay);\n\n const C = Vec2.dot(d, ay);\n\n const 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\n const impulse = k != 0.0 ? -C / k : 0.0;\n\n const P = Vec2.mulNumVec2(impulse, ay);\n const LA = impulse * sAy;\n const LB = impulse * sBy;\n\n cA.subMul(this.m_invMassA, P);\n aA -= this.m_invIA * LA;\n cB.addMul(this.m_invMassB, P);\n aB += this.m_invIB * LB;\n\n this.m_bodyA.c_position.c.setVec2(cA);\n this.m_bodyA.c_position.a = aA;\n this.m_bodyB.c_position.c.setVec2(cB);\n this.m_bodyB.c_position.a = aB;\n\n return math_abs(C) <= Settings.linearSlop;\n }\n\n}\n","import { World } from \"../dynamics/World\";\nimport { Body } from \"../dynamics/Body\";\nimport { Joint } from \"../dynamics/Joint\";\nimport { Fixture } from \"../dynamics/Fixture\";\nimport { Shape } from \"../collision/Shape\";\nimport { Vec2 } from \"../common/Vec2\";\nimport { Vec3 } from \"../common/Vec3\";\nimport { ChainShape } from \"../collision/shape/ChainShape\";\n// import { BoxShape } from \"../collision/shape/BoxShape\";\nimport { EdgeShape } from \"../collision/shape/EdgeShape\";\nimport { PolygonShape } from \"../collision/shape/PolygonShape\";\nimport { CircleShape } from \"../collision/shape/CircleShape\";\nimport { DistanceJoint } from \"../dynamics/joint/DistanceJoint\";\nimport { FrictionJoint } from \"../dynamics/joint/FrictionJoint\";\nimport { GearJoint } from \"../dynamics/joint/GearJoint\";\nimport { MotorJoint } from \"../dynamics/joint/MotorJoint\";\nimport { MouseJoint } from \"../dynamics/joint/MouseJoint\";\nimport { PrismaticJoint } from \"../dynamics/joint/PrismaticJoint\";\nimport { PulleyJoint } from \"../dynamics/joint/PulleyJoint\";\nimport { RevoluteJoint } from \"../dynamics/joint/RevoluteJoint\";\nimport { RopeJoint } from \"../dynamics/joint/RopeJoint\";\nimport { WeldJoint } from \"../dynamics/joint/WeldJoint\";\nimport { WheelJoint } from \"../dynamics/joint/WheelJoint\";\n\nlet SID = 0;\n\n// Classes to be serialized as reference objects\nconst SERIALIZE_REF_TYPES = {\n \"World\": World,\n \"Body\": Body,\n \"Joint\": Joint,\n \"Fixture\": Fixture,\n \"Shape\": Shape,\n};\n\n// For deserializing reference objects by reference type\nconst 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};\n\n// For deserializing data objects by type field\nconst DESERIALIZE_BY_TYPE_FIELD = {\n [Body.STATIC]: Body,\n [Body.DYNAMIC]: Body,\n [Body.KINEMATIC]: Body,\n [ChainShape.TYPE]: ChainShape,\n // [BoxShape.TYPE]: BoxShape,\n [PolygonShape.TYPE]: PolygonShape,\n [EdgeShape.TYPE]: EdgeShape,\n [CircleShape.TYPE]: CircleShape,\n [DistanceJoint.TYPE]: DistanceJoint,\n [FrictionJoint.TYPE]: FrictionJoint,\n [GearJoint.TYPE]: GearJoint,\n [MotorJoint.TYPE]: MotorJoint,\n [MouseJoint.TYPE]: MouseJoint,\n [PrismaticJoint.TYPE]: PrismaticJoint,\n [PulleyJoint.TYPE]: PulleyJoint,\n [RevoluteJoint.TYPE]: RevoluteJoint,\n [RopeJoint.TYPE]: RopeJoint,\n [WeldJoint.TYPE]: WeldJoint,\n [WheelJoint.TYPE]: WheelJoint,\n};\n\n// dummy types\ntype DataType = any;\ntype ObjectType = any;\ntype ClassName = any;\n\ntype SerializedType = object[];\n\ntype RefType = {\n refIndex: number,\n refType: string,\n};\n\ntype SerializerOptions = {\n rootClass: ClassName,\n preSerialize?: (obj: ObjectType) => DataType,\n postSerialize?: (data: DataType, obj: any) => DataType,\n preDeserialize?: (data: DataType) => DataType,\n postDeserialize?: (obj: ObjectType, data: DataType) => ObjectType,\n};\n\nconst DEFAULT_OPTIONS: SerializerOptions = {\n rootClass: World,\n preSerialize: function(obj) { return obj; },\n postSerialize: function(data, obj) { return data; },\n preDeserialize: function(data: DataType) { return data; },\n postDeserialize: function(obj, data) { return obj; },\n};\n\ntype DeserializeChildCallback = (classHint: any, obj: any, context: any) => any;\ntype ClassDeserializerMethod = (data: any, context: any, deserialize: DeserializeChildCallback) => any;\n\nexport class Serializer {\n private options: SerializerOptions;\n constructor(options: SerializerOptions) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n toJson = (root: T): SerializedType => {\n const preSerialize = this.options.preSerialize;\n const postSerialize = this.options.postSerialize;\n const json = [];\n\n // Breadth-first ref serialization queue\n const refQueue = [root];\n\n const refMemoById: Record = {};\n\n function addToRefQueue(value: any, typeName: string) {\n value.__sid = value.__sid || ++SID;\n if (!refMemoById[value.__sid]) {\n refQueue.push(value);\n const index = json.length + refQueue.length;\n const ref = {\n refIndex: index,\n refType: typeName\n };\n refMemoById[value.__sid] = ref;\n }\n return refMemoById[value.__sid];\n }\n\n function serializeWithHooks(obj: ObjectType) {\n obj = preSerialize(obj);\n let data = obj._serialize();\n data = postSerialize(data, obj);\n return data;\n }\n\n // traverse the object graph\n // ref objects are pushed into the queue\n // other objects are serialize in-place \n function traverse(value: any, noRefType = false) {\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n // object with _serialize function\n if (typeof value._serialize === \"function\") {\n if (!noRefType) {\n for (const typeName in SERIALIZE_REF_TYPES) {\n if (value instanceof SERIALIZE_REF_TYPES[typeName]) {\n return addToRefQueue(value, typeName);\n }\n }\n }\n // object with _serialize function\n value = serializeWithHooks(value);\n }\n // recursive for arrays any objects\n if (Array.isArray(value)) {\n const newValue = [];\n for (let key = 0; key < value.length; key++) {\n newValue[key] = traverse(value[key]);\n }\n value = newValue;\n\n } else {\n const newValue = {};\n for (const 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\n while (refQueue.length) {\n const obj = refQueue.shift();\n const str = traverse(obj, true);\n json.push(str);\n }\n\n return json;\n };\n\n fromJson = (json: SerializedType): T => {\n const preDeserialize = this.options.preDeserialize;\n const postDeserialize = this.options.postDeserialize;\n const rootClass = this.options.rootClass;\n\n const deserializedRefMemoByIndex: Record = {};\n\n function deserializeWithHooks(classHint: ClassName, data: DataType, context: any): ObjectType {\n if (!classHint || !classHint._deserialize) {\n classHint = DESERIALIZE_BY_TYPE_FIELD[data.type];\n }\n const deserializer = classHint && classHint._deserialize;\n if (!deserializer) {\n return;\n }\n data = preDeserialize(data);\n const classDeserializeFn = classHint._deserialize as ClassDeserializerMethod;\n let obj = classDeserializeFn(data, context, deserializeChild);\n obj = postDeserialize(obj, data);\n return obj;\n }\n\n /**\n * Recursive callback function to deserialize a child data object or reference object.\n * \n * @param classHint suggested class to deserialize obj to\n * @param dataOrRef data or reference object\n * @param context for example world when deserializing bodies and joints\n */\n function deserializeChild(classHint: ClassName, dataOrRef: DataType | RefType, context: any) {\n const isRefObject = dataOrRef.refIndex && dataOrRef.refType;\n if (!isRefObject) {\n return deserializeWithHooks(classHint, dataOrRef, context); \n }\n const ref = dataOrRef as RefType;\n if (DESERIALIZE_BY_REF_TYPE[ref.refType]) {\n classHint = DESERIALIZE_BY_REF_TYPE[ref.refType];\n }\n const refIndex = ref.refIndex;\n if (!deserializedRefMemoByIndex[refIndex]) {\n const data = json[refIndex];\n const obj = deserializeWithHooks(classHint, data, context);\n deserializedRefMemoByIndex[refIndex] = obj;\n }\n return deserializedRefMemoByIndex[refIndex];\n }\n\n const root = deserializeWithHooks(rootClass, json[0], null);\n\n return root;\n };\n\n static toJson: (root: World) => SerializedType;\n static fromJson: (json: SerializedType) => World;\n}\n\nconst worldSerializer = new Serializer({\n rootClass: World,\n});\n\nSerializer.fromJson = worldSerializer.fromJson;\nSerializer.toJson = worldSerializer.toJson;\n","import type { AABBValue } from \"../collision/AABB\";\nimport type { World } from \"../dynamics/World\";\nimport type { Joint } from \"../dynamics/Joint\";\nimport type { Fixture } from \"../dynamics/Fixture\";\nimport type { Body } from \"../dynamics/Body\";\n\nexport interface Style {\n stroke?: string;\n fill?: string;\n lineWidth?: number;\n}\n\ntype KEY = \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" |\n \"8\" | \"9\" | \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\" |\n \"H\" | \"I\" | \"J\" | \"K\" | \"L\" | \"M\" | \"N\" | \"O\" | \"P\" |\n \"Q\" | \"R\" | \"S\" | \"T\" | \"U\" | \"V\" | \"W\" | \"X\" | \"Y\" |\n \"Z\" | \"right\" | \"left\" | \"up\" | \"down\" | \"fire\";\n\nexport type ActiveKeys = { [key in KEY]?: boolean };\n\ntype TestbedMountOptions = {};\n\nexport abstract class Testbed {\n /**\n * Mounts testbed. Call start with a world to start simulation and rendering.\n */\n static mount(options?: TestbedMountOptions): Testbed {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Mounts testbed if needed, then starts simulation and rendering.\n * \n * If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`.\n */\n static start(world: World): Testbed {\n const testbed = Testbed.mount();\n testbed.start(world);\n return testbed;\n }\n\n /** World viewbox width. */\n width: number = 80;\n\n /** World viewbox height. */\n height: number = 60;\n\n /** World viewbox center vertical offset. */\n x: number = 0;\n\n /** World viewbox center horizontal offset. */\n y: number = -10;\n\n /** @hidden */\n scaleY: number = -1;\n\n /** World simulation step frequency */\n hz: number = 60;\n\n /** World simulation speed, default is 1 */\n speed: number = 1;\n\n background: string = \"#222222\";\n\n mouseForce?: number;\n activeKeys: ActiveKeys = {};\n\n /** callback, to be implemented by user */\n step = (dt: number, t: number): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keydown = (keyCode: number, label: string): void => {\n return;\n };\n\n /** callback, to be implemented by user */\n keyup = (keyCode: number, label: string): void => {\n return;\n };\n\n abstract status(name: string, value: any): void;\n abstract status(value: object | string): void;\n\n abstract info(text: string): void;\n\n color(r: number, g: number, b: number): string {\n r = r * 256 | 0;\n g = g * 256 | 0;\n b = b * 256 | 0;\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n }\n\n abstract drawPoint(p: {x: number, y: number}, r: any, color: string): void;\n abstract drawCircle(p: {x: number, y: number}, r: number, color: string): void;\n abstract drawEdge(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawSegment(a: {x: number, y: number}, b: {x: number, y: number}, color: string): void;\n abstract drawPolygon(points: Array<{x: number, y: number}>, color: string): void;\n abstract drawAABB(aabb: AABBValue, color: string): void;\n\n abstract start(world: World): void;\n\n abstract findOne(query: string): (Body | Joint | Fixture | null);\n abstract findAll(query: string): (Body | Joint | Fixture)[];\n}\n\ntype TestbedFactoryOptions = string | {};\n\n/** @deprecated */\ntype TestbedCallback = (testbed: Testbed) => (World | undefined);\n\n/** @deprecated */\nexport function testbed(callback: TestbedCallback): void;\n/** @deprecated */\nexport function testbed(options: TestbedFactoryOptions, callback: TestbedCallback): void;\n/** @internal */\nexport function testbed(a?: any, b?: any) {\n let callback: TestbedCallback | undefined;\n let options;\n if (typeof a === \"function\") {\n callback = a;\n options = b;\n } else if (typeof b === \"function\") {\n callback = b;\n options = a;\n } else {\n options = a ?? b;\n }\n const testbed = Testbed.mount(options);\n if (callback) {\n // this is for backwards compatibility\n const world = callback(testbed) || (testbed as any).world;\n testbed.start(world);\n } else {\n return testbed;\n }\n}\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport type { Vec2Value } from \"../../common/Vec2\";\nimport { PolygonShape } from \"./PolygonShape\";\n\n\n/** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === \"undefined\" ? false : CONSTRUCTOR_FACTORY;\n\ndeclare module \"./BoxShape\" {\n /** @hidden @deprecated Use new keyword. */\n // @ts-expect-error\n function BoxShape(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number): BoxShape;\n}\n\n/**\n * A rectangle polygon which extend PolygonShape.\n */\n// @ts-expect-error\nexport class BoxShape extends PolygonShape {\n // note that box is serialized/deserialized as polygon\n static TYPE = \"polygon\" as const;\n\n /**\n * \n * @param halfWidth \n * @param halfHeight \n * @param center coordinate of the center of the box relative to the body\n * @param angle angle of the box relative to the body\n */\n constructor(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number) {\n // @ts-ignore\n if (_CONSTRUCTOR_FACTORY && !(this instanceof BoxShape)) {\n return new BoxShape(halfWidth, halfHeight, center, angle);\n }\n\n super();\n\n this._setAsBox(halfWidth, halfHeight, center, angle);\n }\n}\n\nexport const Box = BoxShape;\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\n\nimport * as matrix from \"../../common/Matrix\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(CircleShape.TYPE, CircleShape.TYPE, CircleCircleContact);\n\n/** @internal */ function CircleCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == CircleShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollideCircles(manifold, fixtureA.getShape() as CircleShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const pA = matrix.vec2(0, 0);\n/** @internal */ const pB = matrix.vec2(0, 0);\n\nexport const CollideCircles = function (manifold: Manifold, circleA: CircleShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n matrix.transformVec2(pA, xfA, circleA.m_p);\n matrix.transformVec2(pB, xfB, circleB.m_p);\n\n const distSqr = matrix.distSqrVec2(pB, pA);\n const rA = circleA.m_radius;\n const rB = circleB.m_radius;\n const radius = rA + rB;\n if (distSqr > radius * radius) {\n return;\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.copyVec2(manifold.localPoint, circleA.m_p);\n matrix.zeroVec2(manifold.localNormal);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { CircleShape } from \"./CircleShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(EdgeShape.TYPE, CircleShape.TYPE, EdgeCircleContact);\nContact.addType(ChainShape.TYPE, CircleShape.TYPE, ChainCircleContact);\n\n/** @internal */ function EdgeCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const shapeA = fixtureA.getShape() as EdgeShape;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\nfunction ChainCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n\n const chain = fixtureA.getShape() as ChainShape;\n const edge = new EdgeShape();\n chain.getChildEdge(edge, indexA);\n\n const shapeA = edge;\n const shapeB = fixtureB.getShape() as CircleShape;\n\n CollideEdgeCircle(manifold, shapeA, xfA, shapeB, xfB);\n}\n\n/** @internal */ const e = matrix.vec2(0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const e1 = matrix.vec2(0, 0);\n/** @internal */ const e2 = matrix.vec2(0, 0);\n/** @internal */ const Q = matrix.vec2(0, 0);\n/** @internal */ const P = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n// Compute contact points for edge versus circle.\n// This accounts for edge connectivity.\nexport const CollideEdgeCircle = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle in frame of edge\n matrix.retransformVec2(Q, xfB, xfA, circleB.m_p);\n\n const A = edgeA.m_vertex1;\n const B = edgeA.m_vertex2;\n matrix.subVec2(e, B, A);\n\n // Barycentric coordinates\n const u = matrix.dotVec2(e, B) - matrix.dotVec2(e, Q);\n const v = matrix.dotVec2(e, Q) - matrix.dotVec2(e, A);\n\n const radius = edgeA.m_radius + circleB.m_radius;\n\n // Region A\n if (v <= 0.0) {\n matrix.copyVec2(P, A);\n const dd = matrix.distSqrVec2(Q, A);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to A?\n if (edgeA.m_hasVertex0) {\n const A1 = edgeA.m_vertex0;\n const B1 = A;\n matrix.subVec2(e1, B1, A1);\n const u1 = matrix.dotVec2(e1, B1) - matrix.dotVec2(e1, Q);\n\n // Is the circle in Region AB of the previous edge?\n if (u1 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Region B\n if (u <= 0.0) {\n matrix.copyVec2(P, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n // Is there an edge connected to B?\n if (edgeA.m_hasVertex3) {\n const B2 = edgeA.m_vertex3;\n const A2 = B;\n matrix.subVec2(e2, B2, A2);\n const v2 = matrix.dotVec2(e2, Q) - matrix.dotVec2(e2, A2);\n\n // Is the circle in Region AB of the next edge?\n if (v2 > 0.0) {\n return;\n }\n }\n\n manifold.type = ManifoldType.e_circles;\n matrix.zeroVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, P);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(1, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n\n return;\n }\n\n // Region AB\n const den = matrix.lengthSqrVec2(e);\n _ASSERT && console.assert(den > 0.0);\n matrix.combine2Vec2(P, u / den, A, v / den, B);\n const dd = matrix.distSqrVec2(Q, P);\n if (dd > radius * radius) {\n return;\n }\n\n matrix.crossNumVec2(n, 1, e);\n if (matrix.dotVec2(n, Q) - matrix.dotVec2(n, A) < 0.0) {\n matrix.negVec2(n);\n }\n matrix.normalizeVec2(n);\n\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, n);\n matrix.copyVec2(manifold.localPoint, A);\n manifold.pointCount = 1;\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_face, 0, ContactFeatureType.e_vertex);\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport { TransformValue } from \"../../common/Transform\";\nimport * as matrix from \"../../common/Matrix\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n/** @internal */ const incidentEdge = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipSegmentToLineNormal = matrix.vec2(0, 0);\n/** @internal */ const v1 = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const temp = matrix.vec2(0, 0);\n/** @internal */ const v11 = matrix.vec2(0, 0);\n/** @internal */ const v12 = matrix.vec2(0, 0);\n/** @internal */ const localTangent = matrix.vec2(0, 0);\n/** @internal */ const localNormal = matrix.vec2(0, 0);\n/** @internal */ const planePoint = matrix.vec2(0, 0);\n/** @internal */ const tangent = matrix.vec2(0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n\n\nContact.addType(PolygonShape.TYPE, PolygonShape.TYPE, PolygonContact);\n\n/** @internal */ function PolygonContact(\n manifold: Manifold,\n xfA: TransformValue,\n fixtureA: Fixture,\n indexA: number,\n xfB: TransformValue,\n fixtureB: Fixture,\n indexB: number,\n): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == PolygonShape.TYPE);\n CollidePolygons(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ interface MaxSeparation {\n maxSeparation: number;\n bestIndex: number;\n}\n\n/**\n * Find the max separation between poly1 and poly2 using edge normals from\n * poly1.\n */\n/** @internal */ function findMaxSeparation(\n poly1: PolygonShape,\n xf1: TransformValue,\n poly2: PolygonShape,\n xf2: TransformValue,\n output: MaxSeparation,\n): void {\n const count1 = poly1.m_count;\n const count2 = poly2.m_count;\n const n1s = poly1.m_normals;\n const v1s = poly1.m_vertices;\n const v2s = poly2.m_vertices;\n\n matrix.detransformTransform(xf, xf2, xf1);\n\n let bestIndex = 0;\n let maxSeparation = -Infinity;\n for (let i = 0; i < count1; ++i) {\n // Get poly1 normal in frame2.\n matrix.rotVec2(n, xf.q, n1s[i]);\n matrix.transformVec2(v1, xf, v1s[i]);\n\n // Find deepest point for normal i.\n let si = Infinity;\n for (let j = 0; j < count2; ++j) {\n const sij = matrix.dotVec2(n, v2s[j]) - matrix.dotVec2(n, v1);\n if (sij < si) {\n si = sij;\n }\n }\n\n if (si > maxSeparation) {\n maxSeparation = si;\n bestIndex = i;\n }\n }\n\n // used to keep last FindMaxSeparation call values\n output.maxSeparation = maxSeparation;\n output.bestIndex = bestIndex;\n}\n\n/** @internal */ function findIncidentEdge(\n clipVertex: ClipVertex[],\n poly1: PolygonShape,\n xf1: TransformValue,\n edge1: number,\n poly2: PolygonShape,\n xf2: TransformValue,\n): void {\n const normals1 = poly1.m_normals;\n\n const count2 = poly2.m_count;\n const vertices2 = poly2.m_vertices;\n const normals2 = poly2.m_normals;\n\n _ASSERT && console.assert(0 <= edge1 && edge1 < poly1.m_count);\n\n // Get the normal of the reference edge in poly2's frame.\n matrix.rerotVec2(normal1, xf2.q, xf1.q, normals1[edge1]);\n\n // Find the incident edge on poly2.\n let index = 0;\n let minDot = Infinity;\n for (let i = 0; i < count2; ++i) {\n const dot = matrix.dotVec2(normal1, normals2[i]);\n if (dot < minDot) {\n minDot = dot;\n index = i;\n }\n }\n\n // Build the clip vertices for the incident edge.\n const i1 = index;\n const i2 = i1 + 1 < count2 ? i1 + 1 : 0;\n\n matrix.transformVec2(clipVertex[0].v, xf2, vertices2[i1]);\n clipVertex[0].id.setFeatures(edge1, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.transformVec2(clipVertex[1].v, xf2, vertices2[i2]);\n clipVertex[1].id.setFeatures(edge1, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n}\n\n/** @internal */ const maxSeparation = {\n maxSeparation: 0,\n bestIndex: 0,\n};\n\n/**\n *\n * Find edge normal of max separation on A - return if separating axis is found
\n * Find edge normal of max separation on B - return if separation axis is found
\n * Choose reference edge as min(minA, minB)
\n * Find incident edge
\n * Clip\n *\n * The normal points from 1 to 2\n */\nexport const CollidePolygons = function (\n manifold: Manifold,\n polyA: PolygonShape,\n xfA: TransformValue,\n polyB: PolygonShape,\n xfB: TransformValue,\n): void {\n manifold.pointCount = 0;\n const totalRadius = polyA.m_radius + polyB.m_radius;\n\n findMaxSeparation(polyA, xfA, polyB, xfB, maxSeparation);\n const edgeA = maxSeparation.bestIndex;\n const separationA = maxSeparation.maxSeparation;\n if (separationA > totalRadius)\n return;\n\n findMaxSeparation(polyB, xfB, polyA, xfA, maxSeparation);\n const edgeB = maxSeparation.bestIndex;\n const separationB = maxSeparation.maxSeparation;\n if (separationB > totalRadius)\n return;\n\n let poly1: PolygonShape; // reference polygon\n let poly2: PolygonShape; // incident polygon\n let xf1: TransformValue;\n let xf2: TransformValue;\n let edge1: number; // reference edge\n let flip: boolean;\n const k_tol = 0.1 * Settings.linearSlop;\n\n if (separationB > separationA + k_tol) {\n poly1 = polyB;\n poly2 = polyA;\n xf1 = xfB;\n xf2 = xfA;\n edge1 = edgeB;\n manifold.type = ManifoldType.e_faceB;\n flip = true;\n } else {\n poly1 = polyA;\n poly2 = polyB;\n xf1 = xfA;\n xf2 = xfB;\n edge1 = edgeA;\n manifold.type = ManifoldType.e_faceA;\n flip = false;\n }\n\n incidentEdge[0].recycle(), incidentEdge[1].recycle();\n findIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2);\n\n const count1 = poly1.m_count;\n const vertices1 = poly1.m_vertices;\n\n const iv1 = edge1;\n const iv2 = edge1 + 1 < count1 ? edge1 + 1 : 0;\n\n matrix.copyVec2(v11, vertices1[iv1]);\n matrix.copyVec2(v12, vertices1[iv2]);\n\n matrix.subVec2(localTangent, v12, v11);\n matrix.normalizeVec2(localTangent);\n\n matrix.crossVec2Num(localNormal, localTangent, 1.0);\n matrix.combine2Vec2(planePoint, 0.5, v11, 0.5, v12);\n\n matrix.rotVec2(tangent, xf1.q, localTangent);\n matrix.crossVec2Num(normal, tangent, 1.0);\n\n matrix.transformVec2(v11, xf1, v11);\n matrix.transformVec2(v12, xf1, v12);\n\n // Face offset.\n const frontOffset = matrix.dotVec2(normal, v11);\n\n // Side offsets, extended by polytope skin thickness.\n const sideOffset1 = -matrix.dotVec2(tangent, v11) + totalRadius;\n const sideOffset2 = matrix.dotVec2(tangent, v12) + totalRadius;\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n matrix.setVec2(clipSegmentToLineNormal, -tangent.x, -tangent.y);\n const np1 = clipSegmentToLine(clipPoints1, incidentEdge, clipSegmentToLineNormal, sideOffset1, iv1);\n\n if (np1 < 2) {\n return;\n }\n\n // Clip to negative box side 1\n matrix.setVec2(clipSegmentToLineNormal, tangent.x, tangent.y);\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, clipSegmentToLineNormal, sideOffset2, iv2);\n\n if (np2 < 2) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n matrix.copyVec2(manifold.localNormal, localNormal);\n matrix.copyVec2(manifold.localPoint, planePoint);\n\n let pointCount = 0;\n for (let i = 0; i < clipPoints2.length/* maxManifoldPoints */; ++i) {\n const separation = matrix.dotVec2(normal, clipPoints2[i].v) - frontOffset;\n\n if (separation <= totalRadius) {\n const cp = manifold.points[pointCount];\n matrix.detransformVec2(cp.localPoint, xf2, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n if (flip) {\n // Swap features\n cp.id.swapFeatures();\n }\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { EPSILON } from \"../../common/Math\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { CircleShape } from \"./CircleShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Manifold, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n\n\nContact.addType(PolygonShape.TYPE, CircleShape.TYPE, PolygonCircleContact);\n\n/** @internal */ function PolygonCircleContact(manifold: Manifold, xfA: TransformValue, fixtureA: Fixture, indexA: number, xfB: TransformValue, fixtureB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fixtureA.getType() == PolygonShape.TYPE);\n _ASSERT && console.assert(fixtureB.getType() == CircleShape.TYPE);\n CollidePolygonCircle(manifold, fixtureA.getShape() as PolygonShape, xfA, fixtureB.getShape() as CircleShape, xfB);\n}\n\n/** @internal */ const cLocal = matrix.vec2(0, 0);\n/** @internal */ const faceCenter = matrix.vec2(0, 0);\n\nexport const CollidePolygonCircle = function (manifold: Manifold, polygonA: PolygonShape, xfA: TransformValue, circleB: CircleShape, xfB: TransformValue): void {\n manifold.pointCount = 0;\n\n // Compute circle position in the frame of the polygon.\n matrix.retransformVec2(cLocal, xfB, xfA, circleB.m_p);\n\n // Find the min separating edge.\n let normalIndex = 0;\n let separation = -Infinity;\n const radius = polygonA.m_radius + circleB.m_radius;\n const vertexCount = polygonA.m_count;\n const vertices = polygonA.m_vertices;\n const normals = polygonA.m_normals;\n\n for (let i = 0; i < vertexCount; ++i) {\n const s = matrix.dotVec2(normals[i], cLocal) - matrix.dotVec2(normals[i], vertices[i]);\n\n if (s > radius) {\n // Early out.\n return;\n }\n\n if (s > separation) {\n separation = s;\n normalIndex = i;\n }\n }\n\n // Vertices that subtend the incident face.\n const vertIndex1 = normalIndex;\n const vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0;\n const v1 = vertices[vertIndex1];\n const v2 = vertices[vertIndex2];\n\n // If the center is inside the polygon ...\n if (separation < EPSILON) {\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[normalIndex]);\n matrix.combine2Vec2(manifold.localPoint, 0.5, v1, 0.5, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n return;\n }\n\n // Compute barycentric coordinates\n // u1 = (cLocal - v1) dot (v2 - v1))\n const u1 = matrix.dotVec2(cLocal, v2) - matrix.dotVec2(cLocal, v1) - matrix.dotVec2(v1, v2) + matrix.dotVec2(v1, v1);\n // u2 = (cLocal - v2) dot (v1 - v2)\n const u2 = matrix.dotVec2(cLocal, v1) - matrix.dotVec2(cLocal, v2) - matrix.dotVec2(v2, v1) + matrix.dotVec2(v2, v2);\n if (u1 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v1) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v1);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v1);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else if (u2 <= 0.0) {\n if (matrix.distSqrVec2(cLocal, v2) > radius * radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.subVec2(manifold.localNormal, cLocal, v2);\n matrix.normalizeVec2(manifold.localNormal);\n matrix.copyVec2(manifold.localPoint, v2);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n } else {\n matrix.combine2Vec2(faceCenter, 0.5, v1, 0.5, v2);\n const separation = matrix.dotVec2(cLocal, normals[vertIndex1]) - matrix.dotVec2(faceCenter, normals[vertIndex1]);\n if (separation > radius) {\n return;\n }\n\n manifold.pointCount = 1;\n manifold.type = ManifoldType.e_faceA;\n matrix.copyVec2(manifold.localNormal, normals[vertIndex1]);\n matrix.copyVec2(manifold.localPoint, faceCenter);\n matrix.copyVec2(manifold.points[0].localPoint, circleB.m_p);\n\n // manifold.points[0].id.key = 0;\n manifold.points[0].id.setFeatures(0, ContactFeatureType.e_vertex, 0, ContactFeatureType.e_vertex);\n }\n};\n","/*\n * Planck.js\n * The MIT License\n * Copyright (c) 2021 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\nimport * as matrix from \"../../common/Matrix\";\nimport { TransformValue } from \"../../common/Transform\";\nimport { Vec2, Vec2Value } from \"../../common/Vec2\";\nimport { SettingsInternal as Settings } from \"../../Settings\";\nimport { Contact } from \"../../dynamics/Contact\";\nimport { Manifold, clipSegmentToLine, ClipVertex, ContactFeatureType, ManifoldType } from \"../Manifold\";\nimport { EdgeShape } from \"./EdgeShape\";\nimport { ChainShape } from \"./ChainShape\";\nimport { PolygonShape } from \"./PolygonShape\";\nimport { Fixture } from \"../../dynamics/Fixture\";\n\n\n/** @internal */ const _ASSERT = typeof ASSERT === \"undefined\" ? false : ASSERT;\n/** @internal */ const math_min = Math.min;\n\nContact.addType(EdgeShape.TYPE, PolygonShape.TYPE, EdgePolygonContact);\nContact.addType(ChainShape.TYPE, PolygonShape.TYPE, ChainPolygonContact);\n\n/** @internal */ function EdgePolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == EdgeShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n CollideEdgePolygon(manifold, fA.getShape() as EdgeShape, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n// reused\n/** @internal */ const edge_reuse = new EdgeShape();\n\n/** @internal */ function ChainPolygonContact(manifold: Manifold, xfA: TransformValue, fA: Fixture, indexA: number, xfB: TransformValue, fB: Fixture, indexB: number): void {\n _ASSERT && console.assert(fA.getType() == ChainShape.TYPE);\n _ASSERT && console.assert(fB.getType() == PolygonShape.TYPE);\n\n const chain = fA.getShape() as ChainShape;\n chain.getChildEdge(edge_reuse, indexA);\n\n CollideEdgePolygon(manifold, edge_reuse, xfA, fB.getShape() as PolygonShape, xfB);\n}\n\n/** @internal */ enum EPAxisType {\n e_unknown = -1,\n e_edgeA = 1,\n e_edgeB = 2,\n}\n\n// unused?\n/** @internal */ enum VertexType {\n e_isolated = 0,\n e_concave = 1,\n e_convex = 2,\n}\n\n/**\n * This structure is used to keep track of the best separating axis.\n */\n/** @internal */ class EPAxis {\n type: EPAxisType;\n index: number;\n separation: number;\n}\n\n/**\n * This holds polygon B expressed in frame A.\n */\n/** @internal */ class TempPolygon {\n vertices: Vec2Value[] = []; // [Settings.maxPolygonVertices]\n normals: Vec2Value[] = []; // [Settings.maxPolygonVertices];\n count: number = 0;\n constructor() {\n for (let i = 0; i < Settings.maxPolygonVertices; i++) {\n this.vertices.push(matrix.vec2(0, 0));\n this.normals.push(matrix.vec2(0, 0));\n }\n }\n}\n\n/**\n * Reference face used for clipping\n */\n/** @internal */ class ReferenceFace {\n i1: number;\n i2: number;\n readonly v1 = matrix.vec2(0 ,0);\n readonly v2 = matrix.vec2(0 ,0);\n readonly normal = matrix.vec2(0 ,0);\n readonly sideNormal1 = matrix.vec2(0 ,0);\n sideOffset1: number;\n readonly sideNormal2 = matrix.vec2(0 ,0);\n sideOffset2: number;\n recycle() {\n matrix.zeroVec2(this.v1);\n matrix.zeroVec2(this.v2);\n matrix.zeroVec2(this.normal);\n matrix.zeroVec2(this.sideNormal1);\n matrix.zeroVec2(this.sideNormal2);\n }\n}\n\n// reused\n/** @internal */ const clipPoints1 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const clipPoints2 = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const ie = [ new ClipVertex(), new ClipVertex() ];\n/** @internal */ const edgeAxis = new EPAxis();\n/** @internal */ const polygonAxis = new EPAxis();\n/** @internal */ const polygonBA = new TempPolygon();\n/** @internal */ const rf = new ReferenceFace();\n/** @internal */ const centroidB = matrix.vec2(0, 0);\n/** @internal */ const edge0 = matrix.vec2(0, 0);\n/** @internal */ const edge1 = matrix.vec2(0, 0);\n/** @internal */ const edge2 = matrix.vec2(0, 0);\n/** @internal */ const xf = matrix.transform(0, 0, 0);\n/** @internal */ const normal = matrix.vec2(0, 0);\n/** @internal */ const normal0 = matrix.vec2(0, 0);\n/** @internal */ const normal1 = matrix.vec2(0, 0);\n/** @internal */ const normal2 = matrix.vec2(0, 0);\n/** @internal */ const lowerLimit = matrix.vec2(0, 0);\n/** @internal */ const upperLimit = matrix.vec2(0, 0);\n/** @internal */ const perp = matrix.vec2(0, 0);\n/** @internal */ const n = matrix.vec2(0, 0);\n\n/**\n * This function collides and edge and a polygon, taking into account edge\n * adjacency.\n */\nexport const CollideEdgePolygon = function (manifold: Manifold, edgeA: EdgeShape, xfA: TransformValue, polygonB: PolygonShape, xfB: TransformValue): void {\n // Algorithm:\n // 1. Classify v1 and v2\n // 2. Classify polygon centroid as front or back\n // 3. Flip normal if necessary\n // 4. Initialize normal range to [-pi, pi] about face normal\n // 5. Adjust normal range according to adjacent edges\n // 6. Visit each separating axes, only accept axes within the range\n // 7. Return if _any_ axis indicates separation\n // 8. Clip\n\n // let m_type1: VertexType;\n // let m_type2: VertexType;\n\n matrix.detransformTransform(xf, xfA, xfB);\n matrix.transformVec2(centroidB, xf, polygonB.m_centroid);\n\n const v0 = edgeA.m_vertex0;\n const v1 = edgeA.m_vertex1;\n const v2 = edgeA.m_vertex2;\n const v3 = edgeA.m_vertex3;\n\n const hasVertex0 = edgeA.m_hasVertex0;\n const hasVertex3 = edgeA.m_hasVertex3;\n\n matrix.subVec2(edge1, v2, v1);\n matrix.normalizeVec2(edge1);\n matrix.setVec2(normal1, edge1.y, -edge1.x);\n const offset1 = matrix.dotVec2(normal1, centroidB) - matrix.dotVec2(normal1, v1);\n let offset0 = 0.0;\n let offset2 = 0.0;\n let convex1 = false;\n let convex2 = false;\n\n matrix.zeroVec2(normal0);\n matrix.zeroVec2(normal2);\n\n // Is there a preceding edge?\n if (hasVertex0) {\n matrix.subVec2(edge0, v1, v0);\n matrix.normalizeVec2(edge0);\n matrix.setVec2(normal0, edge0.y, -edge0.x);\n convex1 = matrix.crossVec2Vec2(edge0, edge1) >= 0.0;\n offset0 = Vec2.dot(normal0, centroidB) - Vec2.dot(normal0, v0);\n }\n\n // Is there a following edge?\n if (hasVertex3) {\n matrix.subVec2(edge2, v3, v2);\n matrix.normalizeVec2(edge2);\n matrix.setVec2(normal2, edge2.y, -edge2.x);\n convex2 = Vec2.crossVec2Vec2(edge1, edge2) > 0.0;\n offset2 = Vec2.dot(normal2, centroidB) - Vec2.dot(normal2, v2);\n }\n\n let front: boolean;\n matrix.zeroVec2(normal);\n matrix.zeroVec2(lowerLimit);\n matrix.zeroVec2(upperLimit);\n\n // Determine front or back collision. Determine collision normal limits.\n if (hasVertex0 && hasVertex3) {\n if (convex1 && convex2) {\n front = offset0 >= 0.0 || offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex1) {\n front = offset0 >= 0.0 || (offset1 >= 0.0 && offset2 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else if (convex2) {\n front = offset2 >= 0.0 || (offset0 >= 0.0 && offset1 >= 0.0);\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex0) {\n if (convex1) {\n front = offset0 >= 0.0 || offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal0);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n }\n } else {\n front = offset0 >= 0.0 && offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.scaleVec2(upperLimit, -1, normal0);\n }\n }\n } else if (hasVertex3) {\n if (convex2) {\n front = offset1 >= 0.0 || offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal2);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n } else {\n front = offset1 >= 0.0 && offset2 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.copyVec2(upperLimit, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal2);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n } else {\n front = offset1 >= 0.0;\n if (front) {\n matrix.copyVec2(normal, normal1);\n matrix.scaleVec2(lowerLimit, -1, normal1);\n matrix.scaleVec2(upperLimit, -1, normal1);\n } else {\n matrix.scaleVec2(normal, -1, normal1);\n matrix.copyVec2(lowerLimit, normal1);\n matrix.copyVec2(upperLimit, normal1);\n }\n }\n\n // Get polygonB in frameA\n polygonBA.count = polygonB.m_count;\n for (let i = 0; i < polygonB.m_count; ++i) {\n matrix.transformVec2(polygonBA.vertices[i], xf, polygonB.m_vertices[i]);\n matrix.rotVec2(polygonBA.normals[i], xf.q, polygonB.m_normals[i]);\n }\n\n const radius = polygonB.m_radius + edgeA.m_radius;\n\n manifold.pointCount = 0;\n\n { // ComputeEdgeSeparation\n edgeAxis.type = EPAxisType.e_edgeA;\n edgeAxis.index = front ? 0 : 1;\n edgeAxis.separation = Infinity;\n\n for (let i = 0; i < polygonBA.count; ++i) {\n const v = polygonBA.vertices[i];\n const s = matrix.dotVec2(normal, v) - matrix.dotVec2(normal, v1);\n if (s < edgeAxis.separation) {\n edgeAxis.separation = s;\n }\n }\n }\n\n // If no valid normal can be found than this edge should not collide.\n // @ts-ignore todo: why we need this if here?\n if (edgeAxis.type == EPAxisType.e_unknown) {\n return;\n }\n\n if (edgeAxis.separation > radius) {\n return;\n }\n\n { // ComputePolygonSeparation\n polygonAxis.type = EPAxisType.e_unknown;\n polygonAxis.index = -1;\n polygonAxis.separation = -Infinity;\n\n matrix.setVec2(perp, -normal.y, normal.x);\n\n for (let i = 0; i < polygonBA.count; ++i) {\n matrix.scaleVec2(n, -1, polygonBA.normals[i]);\n\n const s1 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v1);\n const s2 = matrix.dotVec2(n, polygonBA.vertices[i]) - matrix.dotVec2(n, v2);\n const s = math_min(s1, s2);\n\n if (s > radius) {\n // No collision\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n break;\n }\n\n // Adjacency\n if (matrix.dotVec2(n, perp) >= 0.0) {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(upperLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n } else {\n if (matrix.dotVec2(n, normal) - matrix.dotVec2(lowerLimit, normal) < -Settings.angularSlop) {\n continue;\n }\n }\n\n if (s > polygonAxis.separation) {\n polygonAxis.type = EPAxisType.e_edgeB;\n polygonAxis.index = i;\n polygonAxis.separation = s;\n }\n }\n }\n\n if (polygonAxis.type != EPAxisType.e_unknown && polygonAxis.separation > radius) {\n return;\n }\n\n // Use hysteresis for jitter reduction.\n const k_relativeTol = 0.98;\n const k_absoluteTol = 0.001;\n\n let primaryAxis: EPAxis;\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\n ie[0].recycle(), ie[1].recycle();\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n manifold.type = ManifoldType.e_faceA;\n\n // Search for the polygon normal that is most anti-parallel to the edge\n // normal.\n let bestIndex = 0;\n let bestValue = matrix.dotVec2(normal, polygonBA.normals[0]);\n for (let i = 1; i < polygonBA.count; ++i) {\n const value = matrix.dotVec2(normal, polygonBA.normals[i]);\n if (value < bestValue) {\n bestValue = value;\n bestIndex = i;\n }\n }\n\n const i1 = bestIndex;\n const i2 = i1 + 1 < polygonBA.count ? i1 + 1 : 0;\n\n matrix.copyVec2(ie[0].v, polygonBA.vertices[i1]);\n ie[0].id.setFeatures(0, ContactFeatureType.e_face, i1, ContactFeatureType.e_vertex);\n\n matrix.copyVec2(ie[1].v, polygonBA.vertices[i2]);\n ie[1].id.setFeatures(0, ContactFeatureType.e_face, i2, ContactFeatureType.e_vertex);\n\n if (front) {\n rf.i1 = 0;\n rf.i2 = 1;\n matrix.copyVec2(rf.v1, v1);\n matrix.copyVec2(rf.v2, v2);\n matrix.copyVec2(rf.normal, normal1);\n } else {\n rf.i1 = 1;\n rf.i2 = 0;\n matrix.copyVec2(rf.v1, v2);\n matrix.copyVec2(rf.v2, v1);\n matrix.scaleVec2(rf.normal, -1, normal1);\n }\n } else {\n manifold.type = ManifoldType.e_faceB;\n\n matrix.copyVec2(ie[0].v, v1);\n ie[0].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n matrix.copyVec2(ie[1].v, v2);\n ie[1].id.setFeatures(0, ContactFeatureType.e_vertex, primaryAxis.index, ContactFeatureType.e_face);\n\n rf.i1 = primaryAxis.index;\n rf.i2 = rf.i1 + 1 < polygonBA.count ? rf.i1 + 1 : 0;\n matrix.copyVec2(rf.v1, polygonBA.vertices[rf.i1]);\n matrix.copyVec2(rf.v2, polygonBA.vertices[rf.i2]);\n matrix.copyVec2(rf.normal, polygonBA.normals[rf.i1]);\n }\n\n matrix.setVec2(rf.sideNormal1, rf.normal.y, -rf.normal.x);\n matrix.setVec2(rf.sideNormal2, -rf.sideNormal1.x, -rf.sideNormal1.y);\n rf.sideOffset1 = matrix.dotVec2(rf.sideNormal1, rf.v1);\n rf.sideOffset2 = matrix.dotVec2(rf.sideNormal2, rf.v2);\n\n // Clip incident edge against extruded edge1 side edges.\n clipPoints1[0].recycle(), clipPoints1[1].recycle();\n clipPoints2[0].recycle(), clipPoints2[1].recycle();\n\n // Clip to box side 1\n const np1 = clipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1);\n\n if (np1 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Clip to negative box side 1\n const np2 = clipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2);\n\n if (np2 < Settings.maxManifoldPoints) {\n return;\n }\n\n // Now clipPoints2 contains the clipped points.\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.copyVec2(manifold.localNormal, rf.normal);\n matrix.copyVec2(manifold.localPoint, rf.v1);\n } else {\n matrix.copyVec2(manifold.localNormal, polygonB.m_normals[rf.i1]);\n matrix.copyVec2(manifold.localPoint, polygonB.m_vertices[rf.i1]);\n }\n\n let pointCount = 0;\n for (let i = 0; i < Settings.maxManifoldPoints; ++i) {\n const separation = matrix.dotVec2(rf.normal, clipPoints2[i].v) - matrix.dotVec2(rf.normal, rf.v1);\n\n if (separation <= radius) {\n const cp = manifold.points[pointCount]; // ManifoldPoint\n\n if (primaryAxis.type == EPAxisType.e_edgeA) {\n matrix.detransformVec2(cp.localPoint, xf, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n } else {\n matrix.copyVec2(cp.localPoint, clipPoints2[i].v);\n cp.id.set(clipPoints2[i].id);\n cp.id.swapFeatures();\n }\n\n ++pointCount;\n }\n }\n\n manifold.pointCount = pointCount;\n};\n","import { CollidePolygons } from \"./collision/shape/CollidePolygon\";\nimport { Settings } from \"./Settings\";\nimport { Sweep } from \"./common/Sweep\";\nimport { DynamicTree } from \"./collision/DynamicTree\";\nimport { Manifold } from \"./collision/Manifold\";\nimport { Distance } from \"./collision/Distance\";\nimport { TimeOfImpact } from \"./collision/TimeOfImpact\";\nimport { stats } from \"./util/stats\";\n\n/** @hidden @deprecated Merged with main namespace */\nexport const internal = {\n CollidePolygons,\n Settings,\n Sweep,\n Manifold,\n Distance,\n TimeOfImpact,\n DynamicTree,\n stats\n};\n"],"names":["d","b","__assign","s","n","input","output","x","math_abs","math_sqrt","math_max","math_min","Vec2","v","a","AABB","normal","temp","math_PI","Settings","SettingsInternal","Pool","TreeNode","DynamicTree","c","Iterator","BroadPhase","displacement","math_sin","math_cos","transform","xf","math_atan2","Rot","matrix.vec2","Sweep","matrix.zeroVec2","matrix.transformVec2","matrix.copyVec2","localCenter","matrix.setRotAngle","matrix.combine2Vec2","matrix.minusVec2","matrix.rotVec2","Transform","rotation","Velocity","Position","Shape","FixtureProxy","Fixture","matrix.subVec2","matrix.transform","Body","matrix.plusScaleVec2","matrix.scaleVec2","matrix.dotVec2","matrix.crossNumVec2","matrix.plusVec2","point","JointEdge","Joint","DistanceInput","DistanceOutput","SimplexCache","cache","xfA","xfB","matrix.lengthSqrVec2","matrix.derotVec2","matrix.distVec2","rA","rB","matrix.normalizeVec2","matrix.minusScaleVec2","DistanceProxy","SimplexVertex","Simplex","v1","v2","matrix.setVec2","matrix.crossVec2Vec2","pA","pB","matrix.combine3Vec2","matrix.copyTransform","ShapeCastInput","ShapeCastOutput","simplex","pointA","pointB","TOIInput","TOIOutputState","TOIOutput","SeparationFunctionType","SeparationFunction","matrix.normalizeVec2Length","matrix.crossVec2Num","matrix.negVec2","TimeStep","ContactImpulse","Solver","matrix.mulVec2","Mat22","cA","cB","planePoint","clipPoint","ManifoldType","ContactFeatureType","PointState","ClipVertex","Manifold","ManifoldPoint","ContactID","WorldManifold","ContactEdge","VelocityConstraintPoint","tangent","P","Contact","_a","worldManifold","DEFAULTS","World","oldManifold","Vec3","EdgeShape","e","ChainShape","e1","e2","PolygonShape","ie","center","matrix.detransformVec2","matrix.addVec2","CircleShape","matrix.distSqrVec2","DistanceJoint","vA","vB","FrictionJoint","Mat33","LimitState","RevoluteJoint","PrismaticJoint","translation","perp","GearJoint","MotorJoint","MouseJoint","PulleyJoint","RopeJoint","WeldJoint","WheelJoint","Serializer","options","obj","Testbed","testbed","BoxShape","matrix.retransformVec2","clipPoints1","clipPoints2","normal1","matrix.detransformTransform","maxSeparation","edge1","matrix.rerotVec2","EPAxisType","VertexType","EPAxis","TempPolygon","ReferenceFace","s2"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/package-lock.json b/docs/package-lock.json index a47d0d3a..de56a7fd 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -39,11 +39,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dependencies": { - "@babel/highlight": "^7.24.2", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -51,28 +52,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", - "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.24.5", - "@babel/helpers": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -88,27 +89,28 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", - "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", "dependencies": { - "@babel/types": "^7.24.5", + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -116,58 +118,34 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "yallist": "^3.0.2" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dependencies": { - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", - "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.24.3", - "@babel/helper-simple-access": "^7.24.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/helper-validator-identifier": "^7.24.5" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -177,90 +155,56 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", - "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", - "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", - "dependencies": { - "@babel/types": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", - "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", - "dependencies": { - "@babel/types": "^7.24.5" - }, + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", - "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", - "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", - "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/types": "^7.26.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", - "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -269,11 +213,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", - "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -283,11 +227,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.5.tgz", - "integrity": "sha512-RtCJoUO2oYrYwFPtR1/jkoBEcFuI1ae9a9IMxeyAVa3a1Ap4AnxmyIKG2b2FaJKqkidw/0cxRbWN+HOs6ZWd1w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -297,11 +241,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", - "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -311,9 +255,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", - "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -322,31 +266,28 @@ } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", - "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", - "dependencies": { - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/types": "^7.24.5", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -355,22 +296,21 @@ } }, "node_modules/@babel/types": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", - "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dependencies": { - "@babel/helper-string-parser": "^7.24.1", - "@babel/helper-validator-identifier": "^7.24.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@clack/core": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.3.4.tgz", - "integrity": "sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.3.5.tgz", + "integrity": "sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==", "dependencies": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5" @@ -392,7 +332,6 @@ }, "node_modules/@clack/prompts/node_modules/is-unicode-supported": { "version": "1.3.0", - "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -403,9 +342,9 @@ } }, "node_modules/@emotion/hash": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", - "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" }, "node_modules/@esbuild/aix-ppc64": { "version": "0.19.12", @@ -753,29 +692,29 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.1.tgz", - "integrity": "sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", "dependencies": { - "@floating-ui/utils": "^0.2.0" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.4.tgz", - "integrity": "sha512-0G8R+zOvQsAG1pg2Q99P21jiqxqGBW1iRe/iXHsBRBxnpXKFI8QwbB4x5KmYLggNO5m34IQgOIu9SCRfR/WWiQ==", + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", "dependencies": { - "@floating-ui/core": "^1.0.0", - "@floating-ui/utils": "^0.2.0" + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/react": { - "version": "0.26.13", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.13.tgz", - "integrity": "sha512-kBa9wntpugzrZ8t/4yWelvSmEKZdeTXTJzrxqyrLmcU/n1SM4nvse8yQh2e1b37rJGvtu0EplV9+IkBrCJ1vkw==", + "version": "0.26.28", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", + "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@floating-ui/utils": "^0.2.0", + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", "tabbable": "^6.0.0" }, "peerDependencies": { @@ -784,9 +723,9 @@ } }, "node_modules/@floating-ui/react-dom": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.9.tgz", - "integrity": "sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -796,16 +735,19 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", - "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" }, "node_modules/@hono/node-server": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.11.1.tgz", - "integrity": "sha512-GW1Iomhmm1o4Z+X57xGby8A35Cu9UZLL7pSMdqDBkD99U5cywff8F+8hLk5aBTzNubnsFAvWQ/fZjNwPsEn9lA==", + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.13.7.tgz", + "integrity": "sha512-kTfUMsoloVKtRA2fLiGSd9qBddmru9KadNyhJCwgKBxTiNkaAJEwkVN9KV/rS4HtmmNRtUh6P+YpmjRMl0d9vQ==", "engines": { "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" } }, "node_modules/@isaacs/cliui": { @@ -875,9 +817,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", @@ -889,9 +831,9 @@ } }, "node_modules/@mdx-js/mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz", - "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz", + "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==", "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", @@ -899,14 +841,15 @@ "@types/mdx": "^2.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", - "estree-util-to-js": "^2.0.0", + "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", - "hast-util-to-estree": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", - "periscopic": "^3.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", @@ -923,9 +866,9 @@ } }, "node_modules/@mdx-js/react": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", - "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", + "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", "dependencies": { "@types/mdx": "^2.0.0" }, @@ -939,9 +882,9 @@ } }, "node_modules/@mdx-js/rollup": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-3.0.1.tgz", - "integrity": "sha512-j0II91OCm4ld+l5QVgXXMQGxVVcAWIQJakYWi1dv5pefDHASJyCYER2TsdH7Alf958GoFSM7ugukWyvDq/UY4A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-3.1.0.tgz", + "integrity": "sha512-q4xOtUXpCzeouE8GaJ8StT4rDxm/U5j6lkMHL2srb2Q3Y7cobE0aXyPzXVVlbeIMBi+5R5MpbiaVE5/vJUdnHg==", "dependencies": { "@mdx-js/mdx": "^3.0.0", "@rollup/pluginutils": "^5.0.0", @@ -957,11 +900,11 @@ } }, "node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", + "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", "engines": { - "node": ">= 16" + "node": "^14.21.3 || >=16" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -1014,34 +957,30 @@ "integrity": "sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==" }, "node_modules/@radix-ui/primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", - "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", - "dependencies": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==" }, "node_modules/@radix-ui/react-accordion": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.1.2.tgz", - "integrity": "sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collapsible": "1.0.3", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-controllable-state": "1.0.1" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.1.tgz", + "integrity": "sha512-bg/l7l5QzUjgsh8kjwDFommzAshnUsuVMV5NM56QVCm+7ZckYdd9P/ExR8xG/Oup0OajVxNLaHJ1tb8mXk+nzQ==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collapsible": "1.1.1", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1053,18 +992,17 @@ } }, "node_modules/@radix-ui/react-arrow": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", - "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", + "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-primitive": "2.0.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1076,25 +1014,24 @@ } }, "node_modules/@radix-ui/react-collapsible": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.0.3.tgz", - "integrity": "sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.1.tgz", + "integrity": "sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1106,21 +1043,20 @@ } }, "node_modules/@radix-ui/react-collection": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", - "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", + "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2" + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1131,16 +1067,27 @@ } } }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", - "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", - "dependencies": { - "@babel/runtime": "^7.13.10" + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1149,15 +1096,12 @@ } }, "node_modules/@radix-ui/react-context": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", - "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1166,31 +1110,30 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", - "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-controllable-state": "1.0.1", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz", + "integrity": "sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "react-remove-scroll": "2.6.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1202,15 +1145,12 @@ } }, "node_modules/@radix-ui/react-direction": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", - "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1219,22 +1159,21 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", - "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", + "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1246,15 +1185,12 @@ } }, "node_modules/@radix-ui/react-focus-guards": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", - "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz", + "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==", "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1263,20 +1199,19 @@ } }, "node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", - "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", + "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1288,24 +1223,23 @@ } }, "node_modules/@radix-ui/react-icons": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz", - "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.2.tgz", + "integrity": "sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==", "peerDependencies": { - "react": "^16.x || ^17.x || ^18.x" + "react": "^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc" } }, "node_modules/@radix-ui/react-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", - "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1314,18 +1248,17 @@ } }, "node_modules/@radix-ui/react-label": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz", - "integrity": "sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.0.tgz", + "integrity": "sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-primitive": "2.0.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1337,31 +1270,30 @@ } }, "node_modules/@radix-ui/react-navigation-menu": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.1.4.tgz", - "integrity": "sha512-Cc+seCS3PmWmjI51ufGG7zp1cAAIRqHVw7C9LOA2TZ+R4hG6rDvHcTqIsEEFLmZO3zNVH72jOOE7kKNy8W+RtA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-previous": "1.0.1", - "@radix-ui/react-visually-hidden": "1.0.3" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.1.tgz", + "integrity": "sha512-egDo0yJD2IK8L17gC82vptkvW1jLeni1VuqCyzY727dSJdk5cDjINomouLoNk8RVF7g2aNIfENKWL4UzeU9c8Q==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1373,32 +1305,31 @@ } }, "node_modules/@radix-ui/react-popover": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.7.tgz", - "integrity": "sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.3", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-controllable-state": "1.0.1", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.2.tgz", + "integrity": "sha512-u2HRUyWW+lOiA2g0Le0tMmT55FGOEWHwPFt1EPfbLly7uXQExFo5duNKqG2DzmFXIdqOeNd+TpE8baHWJCyP9w==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "react-remove-scroll": "2.6.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1410,27 +1341,26 @@ } }, "node_modules/@radix-ui/react-popper": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", - "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", + "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", "dependencies": { - "@babel/runtime": "^7.13.10", "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-rect": "1.0.1", - "@radix-ui/react-use-size": "1.0.1", - "@radix-ui/rect": "1.0.1" + "@radix-ui/react-arrow": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-rect": "1.1.0", + "@radix-ui/react-use-size": "1.1.0", + "@radix-ui/rect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1441,19 +1371,33 @@ } } }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-portal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", - "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", + "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1465,19 +1409,18 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", - "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1489,18 +1432,17 @@ } }, "node_modules/@radix-ui/react-primitive": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", - "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.2" + "@radix-ui/react-slot": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1512,26 +1454,25 @@ } }, "node_modules/@radix-ui/react-roving-focus": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", - "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz", + "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1542,17 +1483,30 @@ } } }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", - "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1" + "@radix-ui/react-compose-refs": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1561,25 +1515,24 @@ } }, "node_modules/@radix-ui/react-tabs": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.4.tgz", - "integrity": "sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-roving-focus": "1.0.4", - "@radix-ui/react-use-controllable-state": "1.0.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.1.tgz", + "integrity": "sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1591,15 +1544,12 @@ } }, "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", - "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1608,16 +1558,15 @@ } }, "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", - "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1626,16 +1575,15 @@ } }, "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", - "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1644,15 +1592,12 @@ } }, "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", - "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1661,15 +1606,12 @@ } }, "node_modules/@radix-ui/react-use-previous": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", - "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", + "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1678,16 +1620,15 @@ } }, "node_modules/@radix-ui/react-use-rect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", - "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", + "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/rect": "1.0.1" + "@radix-ui/rect": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1696,16 +1637,15 @@ } }, "node_modules/@radix-ui/react-use-size": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", - "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", + "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1714,18 +1654,17 @@ } }, "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", - "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", + "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-primitive": "2.0.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1737,29 +1676,26 @@ } }, "node_modules/@radix-ui/rect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", - "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", - "dependencies": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" }, "node_modules/@remix-run/router": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.0.tgz", - "integrity": "sha512-Quz1KOffeEf/zwkCBM3kBtH4ZoZ+pT3xIXBG4PPW/XFtDP7EGhtTiC2+gpL9GnR7+Qdet5Oa6cYSvwKYg6kN9Q==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.21.0.tgz", + "integrity": "sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==", "engines": { "node": ">=14.0.0" } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", + "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "picomatch": "^4.0.2" }, "engines": { "node": ">=14.0.0" @@ -1779,9 +1715,9 @@ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", - "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.3.tgz", + "integrity": "sha512-EzxVSkIvCFxUd4Mgm4xR9YXrcp976qVaHnqom/Tgm+vU79k4vV4eYTjmRvGfeoW8m9LVcsAy/lGjcgVegKEhLQ==", "cpu": [ "arm" ], @@ -1791,9 +1727,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", - "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.3.tgz", + "integrity": "sha512-LJc5pDf1wjlt9o/Giaw9Ofl+k/vLUaYsE2zeQGH85giX2F+wn/Cg8b3c5CDP3qmVmeO5NzwVUzQQxwZvC2eQKw==", "cpu": [ "arm64" ], @@ -1803,9 +1739,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", - "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.3.tgz", + "integrity": "sha512-OuRysZ1Mt7wpWJ+aYKblVbJWtVn3Cy52h8nLuNSzTqSesYw1EuN6wKp5NW/4eSre3mp12gqFRXOKTcN3AI3LqA==", "cpu": [ "arm64" ], @@ -1815,9 +1751,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", - "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.3.tgz", + "integrity": "sha512-xW//zjJMlJs2sOrCmXdB4d0uiilZsOdlGQIC/jjmMWT47lkLLoB1nsNhPUcnoqyi5YR6I4h+FjBpILxbEy8JRg==", "cpu": [ "x64" ], @@ -1826,10 +1762,34 @@ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.3.tgz", + "integrity": "sha512-58E0tIcwZ+12nK1WiLzHOD8I0d0kdrY/+o7yFVPRHuVGY3twBwzwDdTIBGRxLmyjciMYl1B/U515GJy+yn46qw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.3.tgz", + "integrity": "sha512-78fohrpcVwTLxg1ZzBMlwEimoAJmY6B+5TsyAZ3Vok7YabRBUvjYTsRXPTjGEvv/mfgVBepbW28OlMEz4w8wGA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", - "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.3.tgz", + "integrity": "sha512-h2Ay79YFXyQi+QZKo3ISZDyKaVD7uUvukEHTOft7kh00WF9mxAaxZsNs3o/eukbeKuH35jBvQqrT61fzKfAB/Q==", "cpu": [ "arm" ], @@ -1839,9 +1799,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", - "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.3.tgz", + "integrity": "sha512-Sv2GWmrJfRY57urktVLQ0VKZjNZGogVtASAgosDZ1aUB+ykPxSi3X1nWORL5Jk0sTIIwQiPH7iE3BMi9zGWfkg==", "cpu": [ "arm" ], @@ -1851,9 +1811,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", - "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.3.tgz", + "integrity": "sha512-FPoJBLsPW2bDNWjSrwNuTPUt30VnfM8GPGRoLCYKZpPx0xiIEdFip3dH6CqgoT0RnoGXptaNziM0WlKgBc+OWQ==", "cpu": [ "arm64" ], @@ -1863,9 +1823,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", - "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.3.tgz", + "integrity": "sha512-TKxiOvBorYq4sUpA0JT+Fkh+l+G9DScnG5Dqx7wiiqVMiRSkzTclP35pE6eQQYjP4Gc8yEkJGea6rz4qyWhp3g==", "cpu": [ "arm64" ], @@ -1875,9 +1835,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", - "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.3.tgz", + "integrity": "sha512-v2M/mPvVUKVOKITa0oCFksnQQ/TqGrT+yD0184/cWHIu0LoIuYHwox0Pm3ccXEz8cEQDLk6FPKd1CCm+PlsISw==", "cpu": [ "ppc64" ], @@ -1887,9 +1847,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", - "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.3.tgz", + "integrity": "sha512-LdrI4Yocb1a/tFVkzmOE5WyYRgEBOyEhWYJe4gsDWDiwnjYKjNs7PS6SGlTDB7maOHF4kxevsuNBl2iOcj3b4A==", "cpu": [ "riscv64" ], @@ -1899,9 +1859,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", - "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.3.tgz", + "integrity": "sha512-d4wVu6SXij/jyiwPvI6C4KxdGzuZOvJ6y9VfrcleHTwo68fl8vZC5ZYHsCVPUi4tndCfMlFniWgwonQ5CUpQcA==", "cpu": [ "s390x" ], @@ -1911,9 +1871,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", - "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.3.tgz", + "integrity": "sha512-/6bn6pp1fsCGEY5n3yajmzZQAh+mW4QPItbiWxs69zskBzJuheb3tNynEjL+mKOsUSFK11X4LYF2BwwXnzWleA==", "cpu": [ "x64" ], @@ -1923,9 +1883,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", - "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.3.tgz", + "integrity": "sha512-nBXOfJds8OzUT1qUreT/en3eyOXd2EH5b0wr2bVB5999qHdGKkzGzIyKYaKj02lXk6wpN71ltLIaQpu58YFBoQ==", "cpu": [ "x64" ], @@ -1935,9 +1895,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", - "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.3.tgz", + "integrity": "sha512-ogfbEVQgIZOz5WPWXF2HVb6En+kWzScuxJo/WdQTqEgeyGkaa2ui5sQav9Zkr7bnNCLK48uxmmK0TySm22eiuw==", "cpu": [ "arm64" ], @@ -1947,9 +1907,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", - "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.3.tgz", + "integrity": "sha512-ecE36ZBMLINqiTtSNQ1vzWc5pXLQHlf/oqGp/bSbi7iedcjcNb6QbCBNG73Euyy2C+l/fn8qKWEwxr+0SSfs3w==", "cpu": [ "ia32" ], @@ -1959,9 +1919,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", - "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.3.tgz", + "integrity": "sha512-vliZLrDmYKyaUoMzEbMTg2JkerfBjn03KmAw9CykO0Zzkzoyd7o3iZNam/TpyWNjNT+Cz2iO3P9Smv2wgrR+Eg==", "cpu": [ "x64" ], @@ -1971,40 +1931,82 @@ ] }, "node_modules/@shikijs/core": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.4.0.tgz", - "integrity": "sha512-CxpKLntAi64h3j+TwWqVIQObPTED0FyXLHTTh3MKXtqiQNn2JGcMQQ362LftDbc9kYbDtrksNMNoVmVXzKFYUQ==" + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.23.1.tgz", + "integrity": "sha512-NuOVgwcHgVC6jBVH5V7iblziw6iQbWWHrj5IlZI3Fqu2yx9awH7OIQkXIcsHsUmY19ckwSgUMgrqExEyP5A0TA==", + "dependencies": { + "@shikijs/engine-javascript": "1.23.1", + "@shikijs/engine-oniguruma": "1.23.1", + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.3" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.23.1.tgz", + "integrity": "sha512-i/LdEwT5k3FVu07SiApRFwRcSJs5QM9+tod5vYCPig1Ywi8GR30zcujbxGQFJHwYD7A5BUqagi8o5KS+LEVgBg==", + "dependencies": { + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "oniguruma-to-es": "0.4.1" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.23.1.tgz", + "integrity": "sha512-KQ+lgeJJ5m2ISbUZudLR1qHeH3MnSs2mjFg7bnencgs5jDVPeJ2NVDJ3N5ZHbcTsOIh0qIueyAJnwg7lg7kwXQ==", + "dependencies": { + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0" + } }, "node_modules/@shikijs/rehype": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-1.4.0.tgz", - "integrity": "sha512-Ba6QHYx+EIEvmqyNy/B49KAz3rXsTfAqYRY3KTZjPWonytokGOiJ1q/FV9l13D/ad6Qv+eWKhkAz6ITxx6ziFA==", + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-1.23.1.tgz", + "integrity": "sha512-PH5bpMDEc4nBP62Ci3lUqkxBWRTm8cdE+eY9er5QD50jAWQxhXcc1Aeax1AlyrASrtjTwCkI22M6N9iSn5p+bQ==", "dependencies": { - "@shikijs/transformers": "1.4.0", + "@shikijs/types": "1.23.1", "@types/hast": "^3.0.4", - "hast-util-to-string": "^3.0.0", - "shiki": "1.4.0", - "unified": "^11.0.4", + "hast-util-to-string": "^3.0.1", + "shiki": "1.23.1", + "unified": "^11.0.5", "unist-util-visit": "^5.0.0" } }, "node_modules/@shikijs/transformers": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.4.0.tgz", - "integrity": "sha512-kzvlWmWYYSeaLKRce/kgmFFORUtBtFahfXRKndor0b60ocYiXufBQM6d6w1PlMuUkdk55aor9xLvy9wy7hTEJg==", + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.23.1.tgz", + "integrity": "sha512-yQ2Cn0M9i46p30KwbyIzLvKDk+dQNU+lj88RGO0XEj54Hn4Cof1bZoDb9xBRWxFE4R8nmK63w7oHnJwvOtt0NQ==", "dependencies": { - "shiki": "1.4.0" + "shiki": "1.23.1" } }, "node_modules/@shikijs/twoslash": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-1.4.0.tgz", - "integrity": "sha512-MeyA2XAMXOWaeF2Fzn+7uxc7lRy0MIUjq4+v6BCGReHYDWlKSGmKiogaHWdNznMxkzNwTVO9TjHW0NDMH7Yjmg==", + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-1.23.1.tgz", + "integrity": "sha512-Qj/+CGAF6TdcRjPDQn1bxyKD8ejnV7VJLqCHzob1uCbwQlJTI5z0gUVAgpqS55z4vdV1Mrx2IpCTl9glhC0l3A==", + "dependencies": { + "@shikijs/core": "1.23.1", + "@shikijs/types": "1.23.1", + "twoslash": "^0.2.12" + } + }, + "node_modules/@shikijs/types": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.23.1.tgz", + "integrity": "sha512-98A5hGyEhzzAgQh2dAeHKrWW4HfCMeoFER2z16p5eJ+vmPeF6lZ/elEne6/UCU551F/WqkopqRsr1l2Yu6+A0g==", "dependencies": { - "@shikijs/core": "1.4.0", - "twoslash": "^0.2.5" + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4" } }, + "node_modules/@shikijs/vscode-textmate": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.0.tgz", + "integrity": "sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==" + }, "node_modules/@types/acorn": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", @@ -2043,9 +2045,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dependencies": { "@babel/types": "^7.20.7" } @@ -2059,9 +2061,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, "node_modules/@types/estree-jsx": { "version": "1.0.5", @@ -2080,9 +2082,9 @@ } }, "node_modules/@types/mdast": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dependencies": { "@types/unist": "*" } @@ -2098,38 +2100,41 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "22.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.1.tgz", + "integrity": "sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.8" } }, "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==" }, "node_modules/@types/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", - "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" }, "node_modules/@typescript/vfs": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.5.0.tgz", - "integrity": "sha512-AJS307bPgbsZZ9ggCT3wwpg3VbTKMFNHfaY/uF0ahSkYYrPF2dSSKDNIDIQAHm9qJqbLvCsSJH7yN4Vs/CsMMg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.0.tgz", + "integrity": "sha512-hvJUjNVeBMp77qPINuUvYXj4FyWeeMMKZkxEATEU3hqBAQ7qdTBCUFT7Sp0Zu0faeEtFf+ldXxMEDr/bk73ISg==", "dependencies": { "debug": "^4.1.1" + }, + "peerDependencies": { + "typescript": "*" } }, "node_modules/@ungap/structured-clone": { @@ -2138,37 +2143,38 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, "node_modules/@vanilla-extract/babel-plugin-debug-ids": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.5.tgz", - "integrity": "sha512-Rc9A6ylsw7EBErmpgqCMvc/Z/eEZxI5k1xfLQHw7f5HHh3oc5YfzsAsYU/PdmSNjF1dp3sGEViBdDltvwnfVaA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.1.0.tgz", + "integrity": "sha512-Zy9bKjaL2P5zsrFYQJ8IjWGlFODmZrpvFmjFE0Zv8om55Pz1JtpJtL6DvlxlWUxbVaP1HKCqsmEfFOZN8fX/ZQ==", "dependencies": { "@babel/core": "^7.23.9" } }, "node_modules/@vanilla-extract/css": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.15.1.tgz", - "integrity": "sha512-puAfTKAUtsMr2+D+grQNjU5umsdw9zdVgQflUlbzS/tGORaAHdgaYz7jfKPmz1c4ZcpJ6uFNOiI50NDOAzzhyg==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.16.0.tgz", + "integrity": "sha512-05JTbvG1E0IrSZKZ5el2EM9CmAX0XSdsNY+d4aRZxDvYf3/hwxomvFFEz2b/awjgg9yTVHW83Wq19wE4OoTEMg==", "dependencies": { "@emotion/hash": "^0.9.0", - "@vanilla-extract/private": "^1.0.4", + "@vanilla-extract/private": "^1.0.6", "css-what": "^6.1.0", "cssesc": "^3.0.0", "csstype": "^3.0.7", - "dedent": "^1.5.1", + "dedent": "^1.5.3", "deep-object-diff": "^1.1.9", "deepmerge": "^4.2.2", + "lru-cache": "^10.4.3", "media-query-parser": "^2.0.2", "modern-ahocorasick": "^1.0.0", "picocolors": "^1.0.0" } }, "node_modules/@vanilla-extract/dynamic": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@vanilla-extract/dynamic/-/dynamic-2.1.0.tgz", - "integrity": "sha512-8zl0IgBYRtgD1h+56Zu13wHTiMTJSVEa4F7RWX9vTB/5Xe2KtjoiqApy/szHPVFA56c+ex6A4GpCQjT1bKXbYw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vanilla-extract/dynamic/-/dynamic-2.1.2.tgz", + "integrity": "sha512-9BGMciD8rO1hdSPIAh1ntsG4LPD3IYKhywR7VOmmz9OO4Lx1hlwkSg3E6X07ujFx7YuBfx0GDQnApG9ESHvB2A==", "dependencies": { - "@vanilla-extract/private": "^1.0.3" + "@vanilla-extract/private": "^1.0.6" } }, "node_modules/@vanilla-extract/integration": { @@ -2192,9 +2198,9 @@ } }, "node_modules/@vanilla-extract/private": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.4.tgz", - "integrity": "sha512-8FGD6AejeC/nXcblgNCM5rnZb9KXa4WNkR03HCWtdJBpANjTgjHEglNLFnhuvdQ78tC6afaxBPI+g7F2NX3tgg==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.6.tgz", + "integrity": "sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw==" }, "node_modules/@vanilla-extract/vite-plugin": { "version": "3.9.5", @@ -2211,15 +2217,15 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.0.tgz", - "integrity": "sha512-+MHTH/e6H12kRp5HUkzOGqPMksezRMmW+TNzlh/QXfI8rRf6l2Z2yH/v12no1UvTwhZgEDMuQ7g7rrfMseU6FQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", "dependencies": { - "@babel/core": "^7.23.3", - "@babel/plugin-transform-react-jsx-self": "^7.23.3", - "@babel/plugin-transform-react-jsx-source": "^7.23.3", - "@types/babel__core": "^7.20.4", - "react-refresh": "^0.14.0" + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -2228,22 +2234,10 @@ "vite": "^4.2.0 || ^5.0.0" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "bin": { "acorn": "bin/acorn" }, @@ -2260,9 +2254,9 @@ } }, "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "engines": { "node": ">=12" }, @@ -2271,14 +2265,14 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/any-promise": { @@ -2298,14 +2292,25 @@ "node": ">= 8" } }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/aria-hidden": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", "dependencies": { "tslib": "^2.0.0" @@ -2315,17 +2320,17 @@ } }, "node_modules/astring": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", - "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", "bin": { "astring": "bin/astring" } }, "node_modules/autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", "funding": [ { "type": "opencollective", @@ -2341,11 +2346,11 @@ } ], "dependencies": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001599", + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -2435,20 +2440,20 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "funding": [ { "type": "opencollective", @@ -2464,10 +2469,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -2500,9 +2505,9 @@ } }, "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } @@ -2524,9 +2529,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001614", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz", - "integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==", + "version": "1.0.30001683", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001683.tgz", + "integrity": "sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==", "funding": [ { "type": "opencollective", @@ -2552,16 +2557,14 @@ } }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "engines": { - "node": ">=4" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/character-entities": { @@ -2624,9 +2627,9 @@ } }, "node_modules/chroma-js": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.4.2.tgz", - "integrity": "sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.6.0.tgz", + "integrity": "sha512-BLHvCB9s8Z1EV4ethr6xnkl/P2YRFOGqfgvuMG/MyCbZPrTA+NeiByY6XvgF0zP4/2deU2CXnWyMa3zu1LqQ3A==" }, "node_modules/cli-cursor": { "version": "4.0.0", @@ -2671,17 +2674,20 @@ } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/comma-separated-tokens": { "version": "2.0.3", @@ -2712,16 +2718,16 @@ } }, "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", + "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", + "negotiator": "~0.6.4", "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", + "safe-buffer": "5.2.1", "vary": "~1.1.2" }, "engines": { @@ -2742,9 +2748,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/confbox": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", - "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==" + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==" }, "node_modules/convert-source-map": { "version": "2.0.0", @@ -2767,9 +2773,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2822,11 +2828,11 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2906,9 +2912,9 @@ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, "node_modules/detect-package-manager": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-3.0.1.tgz", - "integrity": "sha512-qoHDH6+lMcpJPAScE7+5CYj91W0mxZNXTwZPrCqi1KMk+x+AoQScQ2V1QyqTln1rHU5Haq5fikvOGHv+leKD8A==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-3.0.2.tgz", + "integrity": "sha512-8JFjJHutStYrfWwzfretQoyNGoZVW1Fsrp4JO9spa7h/fBfwgTMEIy4/LBzRDGsxwVPHU0q+T9YvwLDJoOApLQ==", "dependencies": { "execa": "^5.1.1" }, @@ -2972,23 +2978,58 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.751", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.751.tgz", - "integrity": "sha512-2DEPi++qa89SMGRhufWTiLmzqyuGmNF3SK4+PQetW1JKiZdEpF4XQonJXJCzyuYSA6mauiMhbyVhqYAP45Hvfw==" + "version": "1.5.64", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.64.tgz", + "integrity": "sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ==" }, "node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==" + }, + "node_modules/emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==" }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { "node": ">= 0.8" } }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/esbuild": { "version": "0.19.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", @@ -3027,9 +3068,9 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { "node": ">=6" } @@ -3040,11 +3081,14 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "engines": { - "node": ">=0.8.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/estree-util-attach-comments": { @@ -3083,6 +3127,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/estree-util-to-js": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", @@ -3098,12 +3155,11 @@ } }, "node_modules/estree-util-value-to-estree": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.1.1.tgz", - "integrity": "sha512-5mvUrF2suuv5f5cGDnDphIy4/gW86z82kl5qG6mM9z04SEQI4FB5Apmaw/TGEf3l55nLtMs5s51dmhUzvAHQCA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.2.1.tgz", + "integrity": "sha512-Vt2UOjyPbNQQgT5eJh+K5aATti0OjCIAGc9SgMdOFYbohuifsWclR74l0iZTJwePMgWYdX1hlVS+dedH9XV8kw==", "dependencies": { - "@types/estree": "^1.0.0", - "is-plain-obj": "^4.0.0" + "@types/estree": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/remcohaszing" @@ -3213,9 +3269,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3239,9 +3295,9 @@ } }, "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -3359,22 +3415,20 @@ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" }, "node_modules/glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -3421,14 +3475,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -3502,9 +3548,9 @@ } }, "node_modules/hast-util-select": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.2.tgz", - "integrity": "sha512-hT/SD/d/Meu+iobvgkffo1QecV8WeKWxwsNMzcTJsKw1cKTQKSR/7ArJeURLNJF9HDjp9nVoORyNNJxrvBye8Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.3.tgz", + "integrity": "sha512-OVRQlQ1XuuLP8aFVLYmC2atrfWHS5UD3shonxpnyrjcCkwtvmt/+N6kYJdcY4mkMJhxp4kj2EFIxQ9kvkkt/eQ==", "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", @@ -3516,7 +3562,6 @@ "hast-util-has-property": "^3.0.0", "hast-util-to-string": "^3.0.0", "hast-util-whitespace": "^3.0.0", - "not": "^0.1.0", "nth-check": "^2.0.0", "property-information": "^6.0.0", "space-separated-tokens": "^2.0.0", @@ -3555,10 +3600,45 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-estree/node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/hast-util-to-estree/node_modules/style-to-object": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", + "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.3.tgz", + "integrity": "sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", - "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz", + "integrity": "sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==", "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", @@ -3581,23 +3661,10 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", - "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==" - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz", - "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==", - "dependencies": { - "inline-style-parser": "0.2.3" - } - }, "node_modules/hast-util-to-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz", - "integrity": "sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", "dependencies": { "@types/hast": "^3.0.0" }, @@ -3635,11 +3702,21 @@ } }, "node_modules/hono": { - "version": "3.12.12", - "resolved": "https://registry.npmjs.org/hono/-/hono-3.12.12.tgz", - "integrity": "sha512-5IAMJOXfpA5nT+K0MNjClchzz0IhBHs2Szl7WFAhrFOsbtQsYmNynFyJRg/a3IPsmCfxcrf8txUGiNShXpK5Rg==", + "version": "4.6.11", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.6.11.tgz", + "integrity": "sha512-f0LwJQFKdUUrCUAVowxSvNCjyzI7ZLt8XWYU/EApyeq5FfOvHFarBaE5rjU9HTNFk4RI0FkdB2edb3p/7xZjzQ==", + "peer": true, "engines": { - "node": ">=16.0.0" + "node": ">=16.9.0" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/http-errors": { @@ -3685,9 +3762,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "engines": { "node": ">= 4" } @@ -3698,9 +3775,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==" }, "node_modules/invariant": { "version": "2.2.4", @@ -3766,11 +3843,14 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3851,14 +3931,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -3887,15 +3959,12 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -3909,9 +3978,9 @@ "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==" }, "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", "bin": { "jiti": "bin/jiti.js" } @@ -3922,14 +3991,14 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json5": { @@ -3955,9 +4024,9 @@ } }, "node_modules/lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "engines": { "node": ">=14" }, @@ -4004,17 +4073,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", @@ -4036,12 +4094,9 @@ } }, "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/mark.js": { "version": "8.11.1", @@ -4060,9 +4115,9 @@ } }, "node_modules/markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4102,21 +4157,10 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mdast-util-from-markdown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", - "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -4153,17 +4197,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mdast-util-gfm": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", @@ -4183,9 +4216,9 @@ } }, "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", @@ -4276,9 +4309,9 @@ } }, "node_modules/mdast-util-mdx-expression": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", - "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", @@ -4293,9 +4326,9 @@ } }, "node_modules/mdast-util-mdx-jsx": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz", - "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", + "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", @@ -4307,7 +4340,6 @@ "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^5.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" }, @@ -4347,9 +4379,9 @@ } }, "node_modules/mdast-util-to-hast": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz", - "integrity": "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", @@ -4367,15 +4399,16 @@ } }, "node_modules/mdast-util-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" @@ -4419,9 +4452,9 @@ } }, "node_modules/micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", "funding": [ { "type": "GitHub Sponsors", @@ -4453,9 +4486,9 @@ } }, "node_modules/micromark-core-commonmark": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", - "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", + "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", "funding": [ { "type": "GitHub Sponsors", @@ -4486,9 +4519,9 @@ } }, "node_modules/micromark-extension-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.0.tgz", - "integrity": "sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", @@ -4538,9 +4571,9 @@ } }, "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", @@ -4553,9 +4586,9 @@ } }, "node_modules/micromark-extension-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", @@ -4572,9 +4605,9 @@ } }, "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", @@ -4589,9 +4622,9 @@ } }, "node_modules/micromark-extension-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", - "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", + "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", @@ -4617,9 +4650,9 @@ } }, "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", - "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", @@ -4658,9 +4691,9 @@ } }, "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", - "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz", + "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==", "dependencies": { "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", @@ -4669,6 +4702,7 @@ "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" @@ -4730,9 +4764,9 @@ } }, "node_modules/micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", "funding": [ { "type": "GitHub Sponsors", @@ -4750,9 +4784,9 @@ } }, "node_modules/micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", "funding": [ { "type": "GitHub Sponsors", @@ -4771,9 +4805,9 @@ } }, "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", - "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz", + "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==", "funding": [ { "type": "GitHub Sponsors", @@ -4787,6 +4821,7 @@ "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -4796,9 +4831,9 @@ } }, "node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", "funding": [ { "type": "GitHub Sponsors", @@ -4815,9 +4850,9 @@ } }, "node_modules/micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", "funding": [ { "type": "GitHub Sponsors", @@ -4836,9 +4871,9 @@ } }, "node_modules/micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", "funding": [ { "type": "GitHub Sponsors", @@ -4857,9 +4892,9 @@ } }, "node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "funding": [ { "type": "GitHub Sponsors", @@ -4876,9 +4911,9 @@ } }, "node_modules/micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", "funding": [ { "type": "GitHub Sponsors", @@ -4894,9 +4929,9 @@ } }, "node_modules/micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", "funding": [ { "type": "GitHub Sponsors", @@ -4914,9 +4949,9 @@ } }, "node_modules/micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", "funding": [ { "type": "GitHub Sponsors", @@ -4933,9 +4968,9 @@ } }, "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", "funding": [ { "type": "GitHub Sponsors", @@ -4951,9 +4986,9 @@ } }, "node_modules/micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", "funding": [ { "type": "GitHub Sponsors", @@ -4972,9 +5007,9 @@ } }, "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", "funding": [ { "type": "GitHub Sponsors", @@ -5012,9 +5047,9 @@ } }, "node_modules/micromark-util-html-tag-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", "funding": [ { "type": "GitHub Sponsors", @@ -5027,9 +5062,9 @@ ] }, "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "funding": [ { "type": "GitHub Sponsors", @@ -5045,9 +5080,9 @@ } }, "node_modules/micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "funding": [ { "type": "GitHub Sponsors", @@ -5063,9 +5098,9 @@ } }, "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "funding": [ { "type": "GitHub Sponsors", @@ -5083,9 +5118,9 @@ } }, "node_modules/micromark-util-subtokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", - "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz", + "integrity": "sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==", "funding": [ { "type": "GitHub Sponsors", @@ -5104,9 +5139,9 @@ } }, "node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "funding": [ { "type": "GitHub Sponsors", @@ -5119,9 +5154,9 @@ ] }, "node_modules/micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", "funding": [ { "type": "GitHub Sponsors", @@ -5134,17 +5169,28 @@ ] }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -5157,20 +5203,9 @@ } }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", "engines": { "node": ">= 0.6" } @@ -5184,9 +5219,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5198,9 +5233,9 @@ } }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { "node": ">=16 || 14 >=14.17" } @@ -5211,14 +5246,14 @@ "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==" }, "node_modules/mlly": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz", - "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.3.tgz", + "integrity": "sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==", "dependencies": { - "acorn": "^8.11.3", + "acorn": "^8.14.0", "pathe": "^1.1.2", - "pkg-types": "^1.0.3", - "ufo": "^1.3.2" + "pkg-types": "^1.2.1", + "ufo": "^1.5.4" } }, "node_modules/modern-ahocorasick": { @@ -5227,9 +5262,9 @@ "integrity": "sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==" }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/mz": { "version": "2.7.0", @@ -5259,17 +5294,17 @@ } }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "engines": { "node": ">= 0.6" } }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -5287,11 +5322,6 @@ "node": ">=0.10.0" } }, - "node_modules/not": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/not/-/not-0.1.0.tgz", - "integrity": "sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==" - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -5363,6 +5393,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/oniguruma-to-es": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-0.4.1.tgz", + "integrity": "sha512-rNcEohFz095QKGRovP/yqPIKc+nP+Sjs4YTHMv33nMePGKrq/r2eu9Yh4646M5XluGJsUnmwoXuiXE69KDs+fQ==", + "dependencies": { + "emoji-regex-xs": "^1.0.0", + "regex": "^5.0.0", + "regex-recursion": "^4.2.1" + } + }, "node_modules/ora": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", @@ -5385,31 +5425,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/outdent": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==" }, "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", "dependencies": { - "yocto-queue": "^0.1.0" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5429,6 +5458,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, "node_modules/parse-entities": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", @@ -5449,9 +5508,9 @@ } }, "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" }, "node_modules/parseurl": { "version": "1.3.3", @@ -5483,28 +5542,20 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -5518,27 +5569,17 @@ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -5561,19 +5602,19 @@ } }, "node_modules/pkg-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.0.tgz", - "integrity": "sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz", + "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==", "dependencies": { - "confbox": "^0.1.7", - "mlly": "^1.6.1", + "confbox": "^0.1.8", + "mlly": "^1.7.2", "pathe": "^1.1.2" } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "funding": [ { "type": "opencollective", @@ -5590,8 +5631,8 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -5666,27 +5707,33 @@ } }, "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "postcss-selector-parser": "^6.0.11" + "postcss-selector-parser": "^6.1.1" }, "engines": { "node": ">=12.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, "peerDependencies": { "postcss": "^8.2.14" } }, "node_modules/postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -5789,9 +5836,9 @@ } }, "node_modules/react-intersection-observer": { - "version": "9.10.1", - "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.10.1.tgz", - "integrity": "sha512-ZseerLEOaZ2FFMtkjNd0RGzxKTiiIBGaXcR5buh3GSgtoInNCztHvCzgu5Gg2I2vUhF/EX1XJn95inZkp/K6xQ==", + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.13.1.tgz", + "integrity": "sha512-tSzDaTy0qwNPLJHg8XZhlyHTgGW6drFKTtvjdL+p6um12rcnp8Z5XstE+QNBJ7c64n5o0Lj4ilUleA41bmDoMw==", "peerDependencies": { "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -5816,11 +5863,11 @@ } }, "node_modules/react-remove-scroll": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", - "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", "dependencies": { - "react-remove-scroll-bar": "^2.3.3", + "react-remove-scroll-bar": "^2.3.6", "react-style-singleton": "^2.2.1", "tslib": "^2.1.0", "use-callback-ref": "^1.3.0", @@ -5861,11 +5908,11 @@ } }, "node_modules/react-router": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.0.tgz", - "integrity": "sha512-wPMZ8S2TuPadH0sF5irFGjkNLIcRvOSaEe7v+JER8508dyJumm6XZB1u5kztlX0RVq6AzRVndzqcUh6sFIauzA==", + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.28.0.tgz", + "integrity": "sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==", "dependencies": { - "@remix-run/router": "1.16.0" + "@remix-run/router": "1.21.0" }, "engines": { "node": ">=14.0.0" @@ -5875,12 +5922,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.0.tgz", - "integrity": "sha512-Q9YaSYvubwgbal2c9DJKfx6hTNoBp3iJDsl+Duva/DwxoJH+OTXkxGpql4iUK2sla/8z4RpjAm6EWx1qUDuopQ==", + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.28.0.tgz", + "integrity": "sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==", "dependencies": { - "@remix-run/router": "1.16.0", - "react-router": "6.23.0" + "@remix-run/router": "1.21.0", + "react-router": "6.28.0" }, "engines": { "node": ">=14.0.0" @@ -5952,11 +5999,103 @@ "node": ">=8.10.0" } }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz", + "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, + "node_modules/regex": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/regex/-/regex-5.0.2.tgz", + "integrity": "sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-4.2.1.tgz", + "integrity": "sha512-QHNZyZAeKdndD1G3bKAbBEKOSSK4KOHQrAJ01N1LJeb0SoH4DJIeFhp0uUpETgONifS4+P3sOgoA1dhzgrQvhA==", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==" + }, "node_modules/rehype-autolink-headings": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz", @@ -5986,9 +6125,9 @@ } }, "node_modules/rehype-class-names/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" }, "node_modules/rehype-class-names/node_modules/unified": { "version": "10.1.2", @@ -6048,6 +6187,20 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/rehype-slug": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz", @@ -6112,9 +6265,9 @@ } }, "node_modules/remark-mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", - "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", + "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" @@ -6156,9 +6309,9 @@ } }, "node_modules/remark-rehype": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", - "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz", + "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==", "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", @@ -6234,11 +6387,11 @@ } }, "node_modules/rollup": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", - "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.3.tgz", + "integrity": "sha512-SLsCOnlmGt9VoZ9Ek8yBK8tAdmPHeppkw+Xa7yDlCEhDTvwYei03JlWo1fdc7YTfLZ4tD8riJCUyAgTbszk1fQ==", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.6" }, "bin": { "rollup": "dist/bin/rollup" @@ -6248,22 +6401,24 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.17.2", - "@rollup/rollup-android-arm64": "4.17.2", - "@rollup/rollup-darwin-arm64": "4.17.2", - "@rollup/rollup-darwin-x64": "4.17.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", - "@rollup/rollup-linux-arm-musleabihf": "4.17.2", - "@rollup/rollup-linux-arm64-gnu": "4.17.2", - "@rollup/rollup-linux-arm64-musl": "4.17.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", - "@rollup/rollup-linux-riscv64-gnu": "4.17.2", - "@rollup/rollup-linux-s390x-gnu": "4.17.2", - "@rollup/rollup-linux-x64-gnu": "4.17.2", - "@rollup/rollup-linux-x64-musl": "4.17.2", - "@rollup/rollup-win32-arm64-msvc": "4.17.2", - "@rollup/rollup-win32-ia32-msvc": "4.17.2", - "@rollup/rollup-win32-x64-msvc": "4.17.2", + "@rollup/rollup-android-arm-eabi": "4.27.3", + "@rollup/rollup-android-arm64": "4.27.3", + "@rollup/rollup-darwin-arm64": "4.27.3", + "@rollup/rollup-darwin-x64": "4.27.3", + "@rollup/rollup-freebsd-arm64": "4.27.3", + "@rollup/rollup-freebsd-x64": "4.27.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.27.3", + "@rollup/rollup-linux-arm-musleabihf": "4.27.3", + "@rollup/rollup-linux-arm64-gnu": "4.27.3", + "@rollup/rollup-linux-arm64-musl": "4.27.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.27.3", + "@rollup/rollup-linux-riscv64-gnu": "4.27.3", + "@rollup/rollup-linux-s390x-gnu": "4.27.3", + "@rollup/rollup-linux-x64-gnu": "4.27.3", + "@rollup/rollup-linux-x64-musl": "4.27.3", + "@rollup/rollup-win32-arm64-msvc": "4.27.3", + "@rollup/rollup-win32-ia32-msvc": "4.27.3", + "@rollup/rollup-win32-x64-msvc": "4.27.3", "fsevents": "~2.3.2" } }, @@ -6290,9 +6445,23 @@ } }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/scheduler": { "version": "0.23.2", @@ -6311,9 +6480,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -6346,20 +6515,23 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" @@ -6390,11 +6562,16 @@ } }, "node_modules/shiki": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.4.0.tgz", - "integrity": "sha512-5WIn0OL8PWm7JhnTwRWXniy6eEDY234mRrERVlFa646V2ErQqwIFd2UML7e0Pq9eqSKLoMa3Ke+xbsF+DAuy+Q==", + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.23.1.tgz", + "integrity": "sha512-8kxV9TH4pXgdKGxNOkrSMydn1Xf6It8lsle0fiqxf7a1149K1WGtdOu3Zb91T5r1JpvRPxqxU3C2XdZZXQnrig==", "dependencies": { - "@shikijs/core": "1.4.0" + "@shikijs/core": "1.23.1", + "@shikijs/engine-javascript": "1.23.1", + "@shikijs/engine-oniguruma": "1.23.1", + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4" } }, "node_modules/signal-exit": { @@ -6427,9 +6604,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } @@ -6473,25 +6650,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/string-width": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", @@ -6602,11 +6760,11 @@ } }, "node_modules/style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", "dependencies": { - "inline-style-parser": "0.1.1" + "inline-style-parser": "0.2.4" } }, "node_modules/sucrase": { @@ -6630,17 +6788,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -6658,32 +6805,32 @@ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" }, "node_modules/tailwindcss": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", - "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.15.tgz", + "integrity": "sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", - "chokidar": "^3.5.3", + "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.3.0", + "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.21.0", + "jiti": "^1.21.6", "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", + "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", @@ -6731,14 +6878,6 @@ "node": ">=0.8" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -6787,31 +6926,31 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/twoslash": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.2.5.tgz", - "integrity": "sha512-U8rqsfVh8jQMO1NJekUtglb52b7xD9+FrzeFrgzpHsRTKl8IQgqnZP6ld4PeKaHXhLfoZPuju9K50NXJ7wom8g==", + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.2.12.tgz", + "integrity": "sha512-tEHPASMqi7kqwfJbkk7hc/4EhlrKCSLcur+TcvYki3vhIfaRMXnXjaYFgXpoZRbT6GdprD4tGuVBEmTpUgLBsw==", "dependencies": { - "@typescript/vfs": "1.5.0", - "twoslash-protocol": "0.2.5" + "@typescript/vfs": "^1.6.0", + "twoslash-protocol": "0.2.12" }, "peerDependencies": { "typescript": "*" } }, "node_modules/twoslash-protocol": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.2.5.tgz", - "integrity": "sha512-oUr5ZAn37CgNa6p1mrCuuR/pINffsnGCee2aS170Uj1IObxCjsHzu6sgdPUdxGLLn6++gd/qjNH1/iR6RrfLeg==" + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.2.12.tgz", + "integrity": "sha512-5qZLXVYfZ9ABdjqbvPc4RWMr7PrpPaaDSeaYY55vl/w1j6H6kzsWK/urAEIXlzYlyrFmyz1UbwIt+AA0ck+wbg==" }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6821,9 +6960,9 @@ } }, "node_modules/ua-parser-js": { - "version": "1.0.37", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", - "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", + "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", "funding": [ { "type": "opencollective", @@ -6838,24 +6977,27 @@ "url": "https://github.com/sponsors/faisalman" } ], + "bin": { + "ua-parser-js": "script/cli.js" + }, "engines": { "node": "*" } }, "node_modules/ufo": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", - "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==" + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==" }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, "node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", @@ -6906,19 +7048,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-remove-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", @@ -6967,9 +7096,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "funding": [ { "type": "opencollective", @@ -6985,8 +7114,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -7050,12 +7179,11 @@ } }, "node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "dependencies": { "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" }, "funding": { @@ -7077,13 +7205,13 @@ } }, "node_modules/vite": { - "version": "5.2.10", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz", - "integrity": "sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==", + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", "dependencies": { - "esbuild": "^0.20.1", - "postcss": "^8.4.38", - "rollup": "^4.13.0" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" @@ -7102,6 +7230,7 @@ "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" @@ -7119,6 +7248,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -7131,9 +7263,9 @@ } }, "node_modules/vite-node": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.5.3.tgz", - "integrity": "sha512-axFo00qiCpU/JLd8N1gu9iEYL3xTbMbMrbe5nDp9GL0nb6gurIdZLkkFogZXWnE8Oyy5kfSLwNVIcVsnhE7lgQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz", + "integrity": "sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==", "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", @@ -7152,9 +7284,9 @@ } }, "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", "cpu": [ "ppc64" ], @@ -7167,9 +7299,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], @@ -7182,9 +7314,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], @@ -7197,9 +7329,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], @@ -7212,9 +7344,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], @@ -7227,9 +7359,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], @@ -7242,9 +7374,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], @@ -7257,9 +7389,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], @@ -7272,9 +7404,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], @@ -7287,9 +7419,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], @@ -7302,9 +7434,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], @@ -7317,9 +7449,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], @@ -7332,9 +7464,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], @@ -7347,9 +7479,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], @@ -7362,9 +7494,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], @@ -7377,9 +7509,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], @@ -7392,9 +7524,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], @@ -7407,9 +7539,9 @@ } }, "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], @@ -7422,9 +7554,9 @@ } }, "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], @@ -7437,9 +7569,9 @@ } }, "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], @@ -7452,9 +7584,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], @@ -7467,9 +7599,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], @@ -7482,9 +7614,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], @@ -7497,9 +7629,9 @@ } }, "node_modules/vite/node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -7508,35 +7640,35 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/vocs": { - "version": "1.0.0-alpha.50", - "resolved": "https://registry.npmjs.org/vocs/-/vocs-1.0.0-alpha.50.tgz", - "integrity": "sha512-rzZw60A8uKmmgouN1ymPz1/0GPK0cxE4ETYJWs5vZTMS3xcTqKarrvU9rcs0niJUfOR0maSs94eWzrgNBLZO1Q==", + "version": "1.0.0-alpha.62", + "resolved": "https://registry.npmjs.org/vocs/-/vocs-1.0.0-alpha.62.tgz", + "integrity": "sha512-WidbX8M33lPlDjOvvjQyZaYGtn3hRZ3iViFuwvlmgAqCX1yGXaQs1tLdS1Cy5ki+q0BIUqXvvy8jo9rBQ+fM6w==", "funding": [ { "type": "github", @@ -7544,48 +7676,49 @@ } ], "dependencies": { - "@floating-ui/react": "^0.26.6", - "@hono/node-server": "^1.2.3", - "@mdx-js/react": "^3.0.0", - "@mdx-js/rollup": "^3.0.0", - "@noble/hashes": "^1.3.2", + "@floating-ui/react": "^0.26.24", + "@hono/node-server": "^1.13.1", + "@mdx-js/react": "^3.0.1", + "@mdx-js/rollup": "^3.0.1", + "@noble/hashes": "^1.5.0", "@radix-ui/colors": "^3.0.0", - "@radix-ui/react-accordion": "^1.1.2", - "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-accordion": "^1.2.1", + "@radix-ui/react-dialog": "^1.1.2", "@radix-ui/react-icons": "^1.3.0", - "@radix-ui/react-label": "^2.0.2", - "@radix-ui/react-navigation-menu": "^1.1.4", - "@radix-ui/react-popover": "^1.0.7", - "@radix-ui/react-tabs": "^1.0.4", - "@shikijs/rehype": "^1.1.2", - "@shikijs/transformers": "^1.1.2", - "@shikijs/twoslash": "^1.1.2", - "@vanilla-extract/css": "^1.14.0", - "@vanilla-extract/dynamic": "^2.1.0", - "@vanilla-extract/vite-plugin": "^3.9.4", - "@vitejs/plugin-react": "4.2.0", - "autoprefixer": "^10.4.16", + "@radix-ui/react-label": "^2.1.0", + "@radix-ui/react-navigation-menu": "^1.2.1", + "@radix-ui/react-popover": "^1.1.2", + "@radix-ui/react-tabs": "^1.1.1", + "@shikijs/rehype": "^1.21.0", + "@shikijs/transformers": "^1.21.0", + "@shikijs/twoslash": "^1.21.0", + "@vanilla-extract/css": "^1.16.0", + "@vanilla-extract/dynamic": "^2.1.2", + "@vanilla-extract/vite-plugin": "^3.9.5", + "@vitejs/plugin-react": "4.3.1", + "autoprefixer": "^10.4.20", "cac": "^6.7.14", - "chroma-js": "^2.4.2", - "clsx": "^2.0.0", + "chroma-js": "^2.6.0", + "clsx": "^2.1.1", "compression": "^1.7.4", "create-vocs": "^1.0.0-alpha.4", "cross-spawn": "^7.0.3", - "fs-extra": "^11.1.1", + "fs-extra": "^11.2.0", "globby": "^13.2.2", "hastscript": "^8.0.0", - "hono": "^3.10.2", + "hono": "^3.12.12", "mark.js": "^8.11.1", "mdast-util-directive": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", + "mdast-util-from-markdown": "^2.0.1", "mdast-util-gfm": "^3.0.0", - "mdast-util-to-hast": "^13.0.2", - "minimatch": "^9.0.3", + "mdast-util-to-hast": "^13.2.0", + "minimatch": "^9.0.5", "minisearch": "^6.3.0", "ora": "^7.0.1", - "postcss": "^8.4.31", + "p-limit": "^5.0.0", + "postcss": "^8.4.47", "react-helmet": "^6.1.0", - "react-intersection-observer": "^9.5.3", + "react-intersection-observer": "^9.13.1", "react-router-dom": "^6.20.0", "rehype-autolink-headings": "^7.1.0", "rehype-class-names": "^1.0.14", @@ -7595,15 +7728,15 @@ "remark-gfm": "^4.0.0", "remark-mdx-frontmatter": "^4.0.0", "remark-parse": "^11.0.0", - "serve-static": "^1.15.0", - "shiki": "^1.1.2", - "tailwindcss": "^3.3.3", + "serve-static": "^1.16.2", + "shiki": "^1.21.0", + "tailwindcss": "^3.4.13", "toml": "^3.0.0", - "twoslash": "~0.2.2", - "ua-parser-js": "^1.0.36", - "unified": "^11.0.4", + "twoslash": "~0.2.12", + "ua-parser-js": "^1.0.39", + "unified": "^11.0.5", "unist-util-visit": "^5.0.0", - "vite": "^5.0.2" + "vite": "^5.4.8" }, "bin": { "vocs": "_lib/cli/index.js" @@ -7613,6 +7746,14 @@ "react-dom": "^18.2.0" } }, + "node_modules/vocs/node_modules/hono": { + "version": "3.12.12", + "resolved": "https://registry.npmjs.org/hono/-/hono-3.12.12.tgz", + "integrity": "sha512-5IAMJOXfpA5nT+K0MNjClchzz0IhBHs2Szl7WFAhrFOsbtQsYmNynFyJRg/a3IPsmCfxcrf8txUGiNShXpK5Rg==", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -7682,22 +7823,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -7727,17 +7852,6 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -7765,9 +7879,9 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yaml": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", - "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", "bin": { "yaml": "bin.mjs" }, @@ -7776,11 +7890,11 @@ } }, "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7812,34 +7926,35 @@ } }, "@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "requires": { - "@babel/highlight": "^7.24.2", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "@babel/compat-data": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==" + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==" }, "@babel/core": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", - "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "requires": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.24.5", - "@babel/helpers": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -7848,205 +7963,164 @@ } }, "@babel/generator": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", - "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", "requires": { - "@babel/types": "^7.24.5", + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" } }, "@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "requires": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "requires": { - "@babel/types": "^7.22.5" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + } } }, "@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "requires": { - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" } }, "@babel/helper-module-transforms": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", - "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.24.3", - "@babel/helper-simple-access": "^7.24.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/helper-validator-identifier": "^7.24.5" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" } }, "@babel/helper-plugin-utils": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", - "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==" - }, - "@babel/helper-simple-access": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", - "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", - "requires": { - "@babel/types": "^7.24.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", - "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", - "requires": { - "@babel/types": "^7.24.5" - } + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==" }, "@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==" + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==" }, "@babel/helper-validator-identifier": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", - "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==" + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==" }, "@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==" + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==" }, "@babel/helpers": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", - "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "requires": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" } }, - "@babel/highlight": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", - "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", + "@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "requires": { - "@babel/helper-validator-identifier": "^7.24.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/types": "^7.26.0" } }, - "@babel/parser": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", - "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==" - }, "@babel/plugin-syntax-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", - "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.5.tgz", - "integrity": "sha512-RtCJoUO2oYrYwFPtR1/jkoBEcFuI1ae9a9IMxeyAVa3a1Ap4AnxmyIKG2b2FaJKqkidw/0cxRbWN+HOs6ZWd1w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", "requires": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", - "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/runtime": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", - "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", "requires": { "regenerator-runtime": "^0.14.0" } }, "@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" } }, "@babel/traverse": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", - "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", - "requires": { - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/types": "^7.24.5", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "requires": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", - "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "requires": { - "@babel/helper-string-parser": "^7.24.1", - "@babel/helper-validator-identifier": "^7.24.5", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" } }, "@clack/core": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.3.4.tgz", - "integrity": "sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.3.5.tgz", + "integrity": "sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==", "requires": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5" @@ -8065,15 +8139,14 @@ "dependencies": { "is-unicode-supported": { "version": "1.3.0", - "bundled": true, - "extraneous": true + "bundled": true } } }, "@emotion/hash": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", - "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" }, "@esbuild/aix-ppc64": { "version": "0.19.12", @@ -8214,49 +8287,50 @@ "optional": true }, "@floating-ui/core": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.1.tgz", - "integrity": "sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", "requires": { - "@floating-ui/utils": "^0.2.0" + "@floating-ui/utils": "^0.2.8" } }, "@floating-ui/dom": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.4.tgz", - "integrity": "sha512-0G8R+zOvQsAG1pg2Q99P21jiqxqGBW1iRe/iXHsBRBxnpXKFI8QwbB4x5KmYLggNO5m34IQgOIu9SCRfR/WWiQ==", + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", "requires": { - "@floating-ui/core": "^1.0.0", - "@floating-ui/utils": "^0.2.0" + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" } }, "@floating-ui/react": { - "version": "0.26.13", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.13.tgz", - "integrity": "sha512-kBa9wntpugzrZ8t/4yWelvSmEKZdeTXTJzrxqyrLmcU/n1SM4nvse8yQh2e1b37rJGvtu0EplV9+IkBrCJ1vkw==", + "version": "0.26.28", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", + "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", "requires": { - "@floating-ui/react-dom": "^2.0.0", - "@floating-ui/utils": "^0.2.0", + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", "tabbable": "^6.0.0" } }, "@floating-ui/react-dom": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.9.tgz", - "integrity": "sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", "requires": { "@floating-ui/dom": "^1.0.0" } }, "@floating-ui/utils": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", - "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" }, "@hono/node-server": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.11.1.tgz", - "integrity": "sha512-GW1Iomhmm1o4Z+X57xGby8A35Cu9UZLL7pSMdqDBkD99U5cywff8F+8hLk5aBTzNubnsFAvWQ/fZjNwPsEn9lA==" + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.13.7.tgz", + "integrity": "sha512-kTfUMsoloVKtRA2fLiGSd9qBddmru9KadNyhJCwgKBxTiNkaAJEwkVN9KV/rS4HtmmNRtUh6P+YpmjRMl0d9vQ==", + "requires": {} }, "@isaacs/cliui": { "version": "8.0.2", @@ -8309,9 +8383,9 @@ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" }, "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "@jridgewell/trace-mapping": { "version": "0.3.25", @@ -8323,9 +8397,9 @@ } }, "@mdx-js/mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz", - "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz", + "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==", "requires": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", @@ -8333,14 +8407,15 @@ "@types/mdx": "^2.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", - "estree-util-to-js": "^2.0.0", + "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", - "hast-util-to-estree": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", - "periscopic": "^3.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", @@ -8353,17 +8428,17 @@ } }, "@mdx-js/react": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", - "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", + "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", "requires": { "@types/mdx": "^2.0.0" } }, "@mdx-js/rollup": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-3.0.1.tgz", - "integrity": "sha512-j0II91OCm4ld+l5QVgXXMQGxVVcAWIQJakYWi1dv5pefDHASJyCYER2TsdH7Alf958GoFSM7ugukWyvDq/UY4A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-3.1.0.tgz", + "integrity": "sha512-q4xOtUXpCzeouE8GaJ8StT4rDxm/U5j6lkMHL2srb2Q3Y7cobE0aXyPzXVVlbeIMBi+5R5MpbiaVE5/vJUdnHg==", "requires": { "@mdx-js/mdx": "^3.0.0", "@rollup/pluginutils": "^5.0.0", @@ -8372,9 +8447,9 @@ } }, "@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", + "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==" }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -8411,392 +8486,374 @@ "integrity": "sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==" }, "@radix-ui/primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", - "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", - "requires": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==" }, "@radix-ui/react-accordion": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.1.2.tgz", - "integrity": "sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.1.tgz", + "integrity": "sha512-bg/l7l5QzUjgsh8kjwDFommzAshnUsuVMV5NM56QVCm+7ZckYdd9P/ExR8xG/Oup0OajVxNLaHJ1tb8mXk+nzQ==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collapsible": "1.0.3", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-controllable-state": "1.0.1" + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collapsible": "1.1.1", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0" } }, "@radix-ui/react-arrow": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", - "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", + "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-primitive": "2.0.0" } }, "@radix-ui/react-collapsible": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.0.3.tgz", - "integrity": "sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.1.tgz", + "integrity": "sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" } }, "@radix-ui/react-collection": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", - "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", + "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2" + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0" + }, + "dependencies": { + "@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "requires": {} + } } }, "@radix-ui/react-compose-refs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", - "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", - "requires": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "requires": {} }, "@radix-ui/react-context": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", - "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", - "requires": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "requires": {} }, "@radix-ui/react-dialog": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", - "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-controllable-state": "1.0.1", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz", + "integrity": "sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==", + "requires": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "react-remove-scroll": "2.6.0" } }, "@radix-ui/react-direction": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", - "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", - "requires": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "requires": {} }, "@radix-ui/react-dismissable-layer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", - "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", + "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" } }, "@radix-ui/react-focus-guards": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", - "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", - "requires": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz", + "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==", + "requires": {} }, "@radix-ui/react-focus-scope": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", - "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", + "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0" } }, "@radix-ui/react-icons": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz", - "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.2.tgz", + "integrity": "sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==", "requires": {} }, "@radix-ui/react-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", - "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/react-use-layout-effect": "1.1.0" } }, "@radix-ui/react-label": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz", - "integrity": "sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.0.tgz", + "integrity": "sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-primitive": "2.0.0" } }, "@radix-ui/react-navigation-menu": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.1.4.tgz", - "integrity": "sha512-Cc+seCS3PmWmjI51ufGG7zp1cAAIRqHVw7C9LOA2TZ+R4hG6rDvHcTqIsEEFLmZO3zNVH72jOOE7kKNy8W+RtA==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-previous": "1.0.1", - "@radix-ui/react-visually-hidden": "1.0.3" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.1.tgz", + "integrity": "sha512-egDo0yJD2IK8L17gC82vptkvW1jLeni1VuqCyzY727dSJdk5cDjINomouLoNk8RVF7g2aNIfENKWL4UzeU9c8Q==", + "requires": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0" } }, "@radix-ui/react-popover": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.7.tgz", - "integrity": "sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.3", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-controllable-state": "1.0.1", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.2.tgz", + "integrity": "sha512-u2HRUyWW+lOiA2g0Le0tMmT55FGOEWHwPFt1EPfbLly7uXQExFo5duNKqG2DzmFXIdqOeNd+TpE8baHWJCyP9w==", + "requires": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "react-remove-scroll": "2.6.0" } }, "@radix-ui/react-popper": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", - "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", + "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", "requires": { - "@babel/runtime": "^7.13.10", "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-rect": "1.0.1", - "@radix-ui/react-use-size": "1.0.1", - "@radix-ui/rect": "1.0.1" + "@radix-ui/react-arrow": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-rect": "1.1.0", + "@radix-ui/react-use-size": "1.1.0", + "@radix-ui/rect": "1.1.0" + }, + "dependencies": { + "@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "requires": {} + } } }, "@radix-ui/react-portal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", - "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", + "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-layout-effect": "1.1.0" } }, "@radix-ui/react-presence": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", - "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" } }, "@radix-ui/react-primitive": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", - "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.2" + "@radix-ui/react-slot": "1.1.0" } }, "@radix-ui/react-roving-focus": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", - "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz", + "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==", + "requires": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "dependencies": { + "@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "requires": {} + } } }, "@radix-ui/react-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", - "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1" + "@radix-ui/react-compose-refs": "1.1.0" } }, "@radix-ui/react-tabs": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.4.tgz", - "integrity": "sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.1.tgz", + "integrity": "sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-roving-focus": "1.0.4", - "@radix-ui/react-use-controllable-state": "1.0.1" + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" } }, "@radix-ui/react-use-callback-ref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", - "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", - "requires": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "requires": {} }, "@radix-ui/react-use-controllable-state": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", - "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-use-callback-ref": "1.1.0" } }, "@radix-ui/react-use-escape-keydown": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", - "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-use-callback-ref": "1.1.0" } }, "@radix-ui/react-use-layout-effect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", - "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", - "requires": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "requires": {} }, "@radix-ui/react-use-previous": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", - "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", - "requires": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", + "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "requires": {} }, "@radix-ui/react-use-rect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", - "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", + "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/rect": "1.0.1" + "@radix-ui/rect": "1.1.0" } }, "@radix-ui/react-use-size": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", - "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", + "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/react-use-layout-effect": "1.1.0" } }, "@radix-ui/react-visually-hidden": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", - "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", + "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-primitive": "2.0.0" } }, "@radix-ui/rect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", - "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", - "requires": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" }, "@remix-run/router": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.0.tgz", - "integrity": "sha512-Quz1KOffeEf/zwkCBM3kBtH4ZoZ+pT3xIXBG4PPW/XFtDP7EGhtTiC2+gpL9GnR7+Qdet5Oa6cYSvwKYg6kN9Q==" + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.21.0.tgz", + "integrity": "sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==" }, "@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", + "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", "requires": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "picomatch": "^4.0.2" }, "dependencies": { "estree-walker": { @@ -8807,136 +8864,190 @@ } }, "@rollup/rollup-android-arm-eabi": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", - "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.3.tgz", + "integrity": "sha512-EzxVSkIvCFxUd4Mgm4xR9YXrcp976qVaHnqom/Tgm+vU79k4vV4eYTjmRvGfeoW8m9LVcsAy/lGjcgVegKEhLQ==", "optional": true }, "@rollup/rollup-android-arm64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", - "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.3.tgz", + "integrity": "sha512-LJc5pDf1wjlt9o/Giaw9Ofl+k/vLUaYsE2zeQGH85giX2F+wn/Cg8b3c5CDP3qmVmeO5NzwVUzQQxwZvC2eQKw==", "optional": true }, "@rollup/rollup-darwin-arm64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", - "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.3.tgz", + "integrity": "sha512-OuRysZ1Mt7wpWJ+aYKblVbJWtVn3Cy52h8nLuNSzTqSesYw1EuN6wKp5NW/4eSre3mp12gqFRXOKTcN3AI3LqA==", "optional": true }, "@rollup/rollup-darwin-x64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", - "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.3.tgz", + "integrity": "sha512-xW//zjJMlJs2sOrCmXdB4d0uiilZsOdlGQIC/jjmMWT47lkLLoB1nsNhPUcnoqyi5YR6I4h+FjBpILxbEy8JRg==", + "optional": true + }, + "@rollup/rollup-freebsd-arm64": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.3.tgz", + "integrity": "sha512-58E0tIcwZ+12nK1WiLzHOD8I0d0kdrY/+o7yFVPRHuVGY3twBwzwDdTIBGRxLmyjciMYl1B/U515GJy+yn46qw==", + "optional": true + }, + "@rollup/rollup-freebsd-x64": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.3.tgz", + "integrity": "sha512-78fohrpcVwTLxg1ZzBMlwEimoAJmY6B+5TsyAZ3Vok7YabRBUvjYTsRXPTjGEvv/mfgVBepbW28OlMEz4w8wGA==", "optional": true }, "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", - "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.3.tgz", + "integrity": "sha512-h2Ay79YFXyQi+QZKo3ISZDyKaVD7uUvukEHTOft7kh00WF9mxAaxZsNs3o/eukbeKuH35jBvQqrT61fzKfAB/Q==", "optional": true }, "@rollup/rollup-linux-arm-musleabihf": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", - "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.3.tgz", + "integrity": "sha512-Sv2GWmrJfRY57urktVLQ0VKZjNZGogVtASAgosDZ1aUB+ykPxSi3X1nWORL5Jk0sTIIwQiPH7iE3BMi9zGWfkg==", "optional": true }, "@rollup/rollup-linux-arm64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", - "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.3.tgz", + "integrity": "sha512-FPoJBLsPW2bDNWjSrwNuTPUt30VnfM8GPGRoLCYKZpPx0xiIEdFip3dH6CqgoT0RnoGXptaNziM0WlKgBc+OWQ==", "optional": true }, "@rollup/rollup-linux-arm64-musl": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", - "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.3.tgz", + "integrity": "sha512-TKxiOvBorYq4sUpA0JT+Fkh+l+G9DScnG5Dqx7wiiqVMiRSkzTclP35pE6eQQYjP4Gc8yEkJGea6rz4qyWhp3g==", "optional": true }, "@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", - "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.3.tgz", + "integrity": "sha512-v2M/mPvVUKVOKITa0oCFksnQQ/TqGrT+yD0184/cWHIu0LoIuYHwox0Pm3ccXEz8cEQDLk6FPKd1CCm+PlsISw==", "optional": true }, "@rollup/rollup-linux-riscv64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", - "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.3.tgz", + "integrity": "sha512-LdrI4Yocb1a/tFVkzmOE5WyYRgEBOyEhWYJe4gsDWDiwnjYKjNs7PS6SGlTDB7maOHF4kxevsuNBl2iOcj3b4A==", "optional": true }, "@rollup/rollup-linux-s390x-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", - "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.3.tgz", + "integrity": "sha512-d4wVu6SXij/jyiwPvI6C4KxdGzuZOvJ6y9VfrcleHTwo68fl8vZC5ZYHsCVPUi4tndCfMlFniWgwonQ5CUpQcA==", "optional": true }, "@rollup/rollup-linux-x64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", - "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.3.tgz", + "integrity": "sha512-/6bn6pp1fsCGEY5n3yajmzZQAh+mW4QPItbiWxs69zskBzJuheb3tNynEjL+mKOsUSFK11X4LYF2BwwXnzWleA==", "optional": true }, "@rollup/rollup-linux-x64-musl": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", - "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.3.tgz", + "integrity": "sha512-nBXOfJds8OzUT1qUreT/en3eyOXd2EH5b0wr2bVB5999qHdGKkzGzIyKYaKj02lXk6wpN71ltLIaQpu58YFBoQ==", "optional": true }, "@rollup/rollup-win32-arm64-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", - "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.3.tgz", + "integrity": "sha512-ogfbEVQgIZOz5WPWXF2HVb6En+kWzScuxJo/WdQTqEgeyGkaa2ui5sQav9Zkr7bnNCLK48uxmmK0TySm22eiuw==", "optional": true }, "@rollup/rollup-win32-ia32-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", - "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.3.tgz", + "integrity": "sha512-ecE36ZBMLINqiTtSNQ1vzWc5pXLQHlf/oqGp/bSbi7iedcjcNb6QbCBNG73Euyy2C+l/fn8qKWEwxr+0SSfs3w==", "optional": true }, "@rollup/rollup-win32-x64-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", - "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.3.tgz", + "integrity": "sha512-vliZLrDmYKyaUoMzEbMTg2JkerfBjn03KmAw9CykO0Zzkzoyd7o3iZNam/TpyWNjNT+Cz2iO3P9Smv2wgrR+Eg==", "optional": true }, "@shikijs/core": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.4.0.tgz", - "integrity": "sha512-CxpKLntAi64h3j+TwWqVIQObPTED0FyXLHTTh3MKXtqiQNn2JGcMQQ362LftDbc9kYbDtrksNMNoVmVXzKFYUQ==" + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.23.1.tgz", + "integrity": "sha512-NuOVgwcHgVC6jBVH5V7iblziw6iQbWWHrj5IlZI3Fqu2yx9awH7OIQkXIcsHsUmY19ckwSgUMgrqExEyP5A0TA==", + "requires": { + "@shikijs/engine-javascript": "1.23.1", + "@shikijs/engine-oniguruma": "1.23.1", + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.3" + } + }, + "@shikijs/engine-javascript": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.23.1.tgz", + "integrity": "sha512-i/LdEwT5k3FVu07SiApRFwRcSJs5QM9+tod5vYCPig1Ywi8GR30zcujbxGQFJHwYD7A5BUqagi8o5KS+LEVgBg==", + "requires": { + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "oniguruma-to-es": "0.4.1" + } + }, + "@shikijs/engine-oniguruma": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.23.1.tgz", + "integrity": "sha512-KQ+lgeJJ5m2ISbUZudLR1qHeH3MnSs2mjFg7bnencgs5jDVPeJ2NVDJ3N5ZHbcTsOIh0qIueyAJnwg7lg7kwXQ==", + "requires": { + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0" + } }, "@shikijs/rehype": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-1.4.0.tgz", - "integrity": "sha512-Ba6QHYx+EIEvmqyNy/B49KAz3rXsTfAqYRY3KTZjPWonytokGOiJ1q/FV9l13D/ad6Qv+eWKhkAz6ITxx6ziFA==", + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-1.23.1.tgz", + "integrity": "sha512-PH5bpMDEc4nBP62Ci3lUqkxBWRTm8cdE+eY9er5QD50jAWQxhXcc1Aeax1AlyrASrtjTwCkI22M6N9iSn5p+bQ==", "requires": { - "@shikijs/transformers": "1.4.0", + "@shikijs/types": "1.23.1", "@types/hast": "^3.0.4", - "hast-util-to-string": "^3.0.0", - "shiki": "1.4.0", - "unified": "^11.0.4", + "hast-util-to-string": "^3.0.1", + "shiki": "1.23.1", + "unified": "^11.0.5", "unist-util-visit": "^5.0.0" } }, "@shikijs/transformers": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.4.0.tgz", - "integrity": "sha512-kzvlWmWYYSeaLKRce/kgmFFORUtBtFahfXRKndor0b60ocYiXufBQM6d6w1PlMuUkdk55aor9xLvy9wy7hTEJg==", + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.23.1.tgz", + "integrity": "sha512-yQ2Cn0M9i46p30KwbyIzLvKDk+dQNU+lj88RGO0XEj54Hn4Cof1bZoDb9xBRWxFE4R8nmK63w7oHnJwvOtt0NQ==", "requires": { - "shiki": "1.4.0" + "shiki": "1.23.1" } }, "@shikijs/twoslash": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-1.4.0.tgz", - "integrity": "sha512-MeyA2XAMXOWaeF2Fzn+7uxc7lRy0MIUjq4+v6BCGReHYDWlKSGmKiogaHWdNznMxkzNwTVO9TjHW0NDMH7Yjmg==", + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-1.23.1.tgz", + "integrity": "sha512-Qj/+CGAF6TdcRjPDQn1bxyKD8ejnV7VJLqCHzob1uCbwQlJTI5z0gUVAgpqS55z4vdV1Mrx2IpCTl9glhC0l3A==", + "requires": { + "@shikijs/core": "1.23.1", + "@shikijs/types": "1.23.1", + "twoslash": "^0.2.12" + } + }, + "@shikijs/types": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.23.1.tgz", + "integrity": "sha512-98A5hGyEhzzAgQh2dAeHKrWW4HfCMeoFER2z16p5eJ+vmPeF6lZ/elEne6/UCU551F/WqkopqRsr1l2Yu6+A0g==", "requires": { - "@shikijs/core": "1.4.0", - "twoslash": "^0.2.5" + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4" } }, + "@shikijs/vscode-textmate": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.0.tgz", + "integrity": "sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==" + }, "@types/acorn": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", @@ -8975,9 +9086,9 @@ } }, "@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "requires": { "@babel/types": "^7.20.7" } @@ -8991,9 +9102,9 @@ } }, "@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, "@types/estree-jsx": { "version": "1.0.5", @@ -9012,9 +9123,9 @@ } }, "@types/mdast": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "requires": { "@types/unist": "*" } @@ -9030,36 +9141,36 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "22.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.1.tgz", + "integrity": "sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==", "requires": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.8" } }, "@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==" }, "@types/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", - "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "requires": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" }, "@typescript/vfs": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.5.0.tgz", - "integrity": "sha512-AJS307bPgbsZZ9ggCT3wwpg3VbTKMFNHfaY/uF0ahSkYYrPF2dSSKDNIDIQAHm9qJqbLvCsSJH7yN4Vs/CsMMg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.0.tgz", + "integrity": "sha512-hvJUjNVeBMp77qPINuUvYXj4FyWeeMMKZkxEATEU3hqBAQ7qdTBCUFT7Sp0Zu0faeEtFf+ldXxMEDr/bk73ISg==", "requires": { "debug": "^4.1.1" } @@ -9070,37 +9181,38 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, "@vanilla-extract/babel-plugin-debug-ids": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.5.tgz", - "integrity": "sha512-Rc9A6ylsw7EBErmpgqCMvc/Z/eEZxI5k1xfLQHw7f5HHh3oc5YfzsAsYU/PdmSNjF1dp3sGEViBdDltvwnfVaA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.1.0.tgz", + "integrity": "sha512-Zy9bKjaL2P5zsrFYQJ8IjWGlFODmZrpvFmjFE0Zv8om55Pz1JtpJtL6DvlxlWUxbVaP1HKCqsmEfFOZN8fX/ZQ==", "requires": { "@babel/core": "^7.23.9" } }, "@vanilla-extract/css": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.15.1.tgz", - "integrity": "sha512-puAfTKAUtsMr2+D+grQNjU5umsdw9zdVgQflUlbzS/tGORaAHdgaYz7jfKPmz1c4ZcpJ6uFNOiI50NDOAzzhyg==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.16.0.tgz", + "integrity": "sha512-05JTbvG1E0IrSZKZ5el2EM9CmAX0XSdsNY+d4aRZxDvYf3/hwxomvFFEz2b/awjgg9yTVHW83Wq19wE4OoTEMg==", "requires": { "@emotion/hash": "^0.9.0", - "@vanilla-extract/private": "^1.0.4", + "@vanilla-extract/private": "^1.0.6", "css-what": "^6.1.0", "cssesc": "^3.0.0", "csstype": "^3.0.7", - "dedent": "^1.5.1", + "dedent": "^1.5.3", "deep-object-diff": "^1.1.9", "deepmerge": "^4.2.2", + "lru-cache": "^10.4.3", "media-query-parser": "^2.0.2", "modern-ahocorasick": "^1.0.0", "picocolors": "^1.0.0" } }, "@vanilla-extract/dynamic": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@vanilla-extract/dynamic/-/dynamic-2.1.0.tgz", - "integrity": "sha512-8zl0IgBYRtgD1h+56Zu13wHTiMTJSVEa4F7RWX9vTB/5Xe2KtjoiqApy/szHPVFA56c+ex6A4GpCQjT1bKXbYw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vanilla-extract/dynamic/-/dynamic-2.1.2.tgz", + "integrity": "sha512-9BGMciD8rO1hdSPIAh1ntsG4LPD3IYKhywR7VOmmz9OO4Lx1hlwkSg3E6X07ujFx7YuBfx0GDQnApG9ESHvB2A==", "requires": { - "@vanilla-extract/private": "^1.0.3" + "@vanilla-extract/private": "^1.0.6" } }, "@vanilla-extract/integration": { @@ -9124,9 +9236,9 @@ } }, "@vanilla-extract/private": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.4.tgz", - "integrity": "sha512-8FGD6AejeC/nXcblgNCM5rnZb9KXa4WNkR03HCWtdJBpANjTgjHEglNLFnhuvdQ78tC6afaxBPI+g7F2NX3tgg==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.6.tgz", + "integrity": "sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw==" }, "@vanilla-extract/vite-plugin": { "version": "3.9.5", @@ -9140,30 +9252,21 @@ } }, "@vitejs/plugin-react": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.0.tgz", - "integrity": "sha512-+MHTH/e6H12kRp5HUkzOGqPMksezRMmW+TNzlh/QXfI8rRf6l2Z2yH/v12no1UvTwhZgEDMuQ7g7rrfMseU6FQ==", - "requires": { - "@babel/core": "^7.23.3", - "@babel/plugin-transform-react-jsx-self": "^7.23.3", - "@babel/plugin-transform-react-jsx-source": "^7.23.3", - "@types/babel__core": "^7.20.4", - "react-refresh": "^0.14.0" - } - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" } }, "acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==" + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==" }, "acorn-jsx": { "version": "5.3.2", @@ -9172,17 +9275,14 @@ "requires": {} }, "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==" }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" }, "any-promise": { "version": "1.3.0", @@ -9196,6 +9296,13 @@ "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + } } }, "arg": { @@ -9212,20 +9319,20 @@ } }, "astring": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", - "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==" }, "autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", "requires": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001599", + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "postcss-value-parser": "^4.2.0" } }, @@ -9278,22 +9385,22 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "requires": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" } }, "buffer": { @@ -9306,9 +9413,9 @@ } }, "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "cac": { "version": "6.7.14", @@ -9321,9 +9428,9 @@ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" }, "caniuse-lite": { - "version": "1.0.30001614", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz", - "integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==" + "version": "1.0.30001683", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001683.tgz", + "integrity": "sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==" }, "ccount": { "version": "2.0.1", @@ -9331,14 +9438,9 @@ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==" }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" }, "character-entities": { "version": "2.0.2", @@ -9376,9 +9478,9 @@ } }, "chroma-js": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.4.2.tgz", - "integrity": "sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.6.0.tgz", + "integrity": "sha512-BLHvCB9s8Z1EV4ethr6xnkl/P2YRFOGqfgvuMG/MyCbZPrTA+NeiByY6XvgF0zP4/2deU2CXnWyMa3zu1LqQ3A==" }, "cli-cursor": { "version": "4.0.0", @@ -9404,17 +9506,17 @@ "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==" }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "comma-separated-tokens": { "version": "2.0.3", @@ -9435,16 +9537,16 @@ } }, "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", + "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", + "negotiator": "~0.6.4", "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", + "safe-buffer": "5.2.1", "vary": "~1.1.2" }, "dependencies": { @@ -9464,9 +9566,9 @@ } }, "confbox": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", - "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==" + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==" }, "convert-source-map": { "version": "2.0.0", @@ -9486,9 +9588,9 @@ } }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -9516,11 +9618,11 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "decode-named-character-reference": { @@ -9568,9 +9670,9 @@ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, "detect-package-manager": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-3.0.1.tgz", - "integrity": "sha512-qoHDH6+lMcpJPAScE7+5CYj91W0mxZNXTwZPrCqi1KMk+x+AoQScQ2V1QyqTln1rHU5Haq5fikvOGHv+leKD8A==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-3.0.2.tgz", + "integrity": "sha512-8JFjJHutStYrfWwzfretQoyNGoZVW1Fsrp4JO9spa7h/fBfwgTMEIy4/LBzRDGsxwVPHU0q+T9YvwLDJoOApLQ==", "requires": { "execa": "^5.1.1" } @@ -9617,19 +9719,46 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "version": "1.4.751", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.751.tgz", - "integrity": "sha512-2DEPi++qa89SMGRhufWTiLmzqyuGmNF3SK4+PQetW1JKiZdEpF4XQonJXJCzyuYSA6mauiMhbyVhqYAP45Hvfw==" + "version": "1.5.64", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.64.tgz", + "integrity": "sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ==" }, "emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==" + }, + "emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==" }, "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" + }, + "esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "requires": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + } + }, + "esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "requires": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } }, "esbuild": { "version": "0.19.12", @@ -9662,9 +9791,9 @@ } }, "escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" }, "escape-html": { "version": "1.0.3", @@ -9672,9 +9801,9 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" }, "estree-util-attach-comments": { "version": "3.0.0", @@ -9700,6 +9829,15 @@ "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==" }, + "estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "requires": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + } + }, "estree-util-to-js": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", @@ -9711,12 +9849,11 @@ } }, "estree-util-value-to-estree": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.1.1.tgz", - "integrity": "sha512-5mvUrF2suuv5f5cGDnDphIy4/gW86z82kl5qG6mM9z04SEQI4FB5Apmaw/TGEf3l55nLtMs5s51dmhUzvAHQCA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.2.1.tgz", + "integrity": "sha512-Vt2UOjyPbNQQgT5eJh+K5aATti0OjCIAGc9SgMdOFYbohuifsWclR74l0iZTJwePMgWYdX1hlVS+dedH9XV8kw==", "requires": { - "@types/estree": "^1.0.0", - "is-plain-obj": "^4.0.0" + "@types/estree": "^1.0.0" } }, "estree-util-visit": { @@ -9800,9 +9937,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "requires": { "to-regex-range": "^5.0.1" } @@ -9817,9 +9954,9 @@ } }, "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "requires": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -9889,15 +10026,16 @@ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" }, "glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "requires": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" } }, "glob-parent": { @@ -9930,11 +10068,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, "hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -9985,9 +10118,9 @@ } }, "hast-util-select": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.2.tgz", - "integrity": "sha512-hT/SD/d/Meu+iobvgkffo1QecV8WeKWxwsNMzcTJsKw1cKTQKSR/7ArJeURLNJF9HDjp9nVoORyNNJxrvBye8Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.3.tgz", + "integrity": "sha512-OVRQlQ1XuuLP8aFVLYmC2atrfWHS5UD3shonxpnyrjcCkwtvmt/+N6kYJdcY4mkMJhxp4kj2EFIxQ9kvkkt/eQ==", "requires": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", @@ -9999,7 +10132,6 @@ "hast-util-has-property": "^3.0.0", "hast-util-to-string": "^3.0.0", "hast-util-whitespace": "^3.0.0", - "not": "^0.1.0", "nth-check": "^2.0.0", "property-information": "^6.0.0", "space-separated-tokens": "^2.0.0", @@ -10028,12 +10160,45 @@ "style-to-object": "^0.4.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" + }, + "dependencies": { + "inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "style-to-object": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", + "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "requires": { + "inline-style-parser": "0.1.1" + } + } + } + }, + "hast-util-to-html": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.3.tgz", + "integrity": "sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==", + "requires": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" } }, "hast-util-to-jsx-runtime": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", - "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz", + "integrity": "sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==", "requires": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", @@ -10050,27 +10215,12 @@ "style-to-object": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" - }, - "dependencies": { - "inline-style-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", - "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==" - }, - "style-to-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz", - "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==", - "requires": { - "inline-style-parser": "0.2.3" - } - } } }, "hast-util-to-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz", - "integrity": "sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", "requires": { "@types/hast": "^3.0.0" } @@ -10096,9 +10246,15 @@ } }, "hono": { - "version": "3.12.12", - "resolved": "https://registry.npmjs.org/hono/-/hono-3.12.12.tgz", - "integrity": "sha512-5IAMJOXfpA5nT+K0MNjClchzz0IhBHs2Szl7WFAhrFOsbtQsYmNynFyJRg/a3IPsmCfxcrf8txUGiNShXpK5Rg==" + "version": "4.6.11", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.6.11.tgz", + "integrity": "sha512-f0LwJQFKdUUrCUAVowxSvNCjyzI7ZLt8XWYU/EApyeq5FfOvHFarBaE5rjU9HTNFk4RI0FkdB2edb3p/7xZjzQ==", + "peer": true + }, + "html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==" }, "http-errors": { "version": "2.0.0", @@ -10123,9 +10279,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==" + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==" }, "inherits": { "version": "2.0.4", @@ -10133,9 +10289,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==" }, "invariant": { "version": "2.2.4", @@ -10173,11 +10329,11 @@ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, "is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "requires": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" } }, "is-decimal": { @@ -10223,14 +10379,6 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" }, - "is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "requires": { - "@types/estree": "*" - } - }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -10247,9 +10395,9 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "requires": { "@isaacs/cliui": "^8.0.2", "@pkgjs/parseargs": "^0.11.0" @@ -10261,9 +10409,9 @@ "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==" }, "jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==" + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==" }, "js-tokens": { "version": "4.0.0", @@ -10271,9 +10419,9 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==" }, "json5": { "version": "2.2.3", @@ -10290,9 +10438,9 @@ } }, "lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==" }, "lines-and-columns": { "version": "1.2.4", @@ -10319,13 +10467,6 @@ "requires": { "chalk": "^5.0.0", "is-unicode-supported": "^1.1.0" - }, - "dependencies": { - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" - } } }, "longest-streak": { @@ -10342,12 +10483,9 @@ } }, "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "mark.js": { "version": "8.11.1", @@ -10360,9 +10498,9 @@ "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==" }, "markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==" }, "mdast-util-directive": { "version": "3.0.0", @@ -10388,19 +10526,12 @@ "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" - } } }, "mdast-util-from-markdown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", - "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "requires": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -10427,13 +10558,6 @@ "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-extension-frontmatter": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" - } } }, "mdast-util-gfm": { @@ -10451,9 +10575,9 @@ } }, "mdast-util-gfm-autolink-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", "requires": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", @@ -10520,9 +10644,9 @@ } }, "mdast-util-mdx-expression": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", - "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", "requires": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", @@ -10533,9 +10657,9 @@ } }, "mdast-util-mdx-jsx": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz", - "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", + "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", "requires": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", @@ -10547,7 +10671,6 @@ "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^5.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } @@ -10575,9 +10698,9 @@ } }, "mdast-util-to-hast": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz", - "integrity": "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", "requires": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", @@ -10591,15 +10714,16 @@ } }, "mdast-util-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", "requires": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" @@ -10632,9 +10756,9 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", "requires": { "@types/debug": "^4.0.0", "debug": "^4.0.0", @@ -10656,9 +10780,9 @@ } }, "micromark-core-commonmark": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", - "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", + "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", "requires": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", @@ -10679,9 +10803,9 @@ } }, "micromark-extension-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.0.tgz", - "integrity": "sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", "requires": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", @@ -10719,9 +10843,9 @@ } }, "micromark-extension-gfm-autolink-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", "requires": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", @@ -10730,9 +10854,9 @@ } }, "micromark-extension-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "requires": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", @@ -10745,9 +10869,9 @@ } }, "micromark-extension-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", "requires": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", @@ -10758,9 +10882,9 @@ } }, "micromark-extension-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", - "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", + "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", "requires": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", @@ -10778,9 +10902,9 @@ } }, "micromark-extension-gfm-task-list-item": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", - "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", "requires": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", @@ -10805,9 +10929,9 @@ } }, "micromark-extension-mdx-jsx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", - "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz", + "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==", "requires": { "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", @@ -10816,6 +10940,7 @@ "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" @@ -10861,9 +10986,9 @@ } }, "micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", "requires": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -10871,9 +10996,9 @@ } }, "micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", "requires": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", @@ -10882,12 +11007,13 @@ } }, "micromark-factory-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", - "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz", + "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==", "requires": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -10897,18 +11023,18 @@ } }, "micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", "requires": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", "requires": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", @@ -10917,9 +11043,9 @@ } }, "micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", "requires": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", @@ -10928,26 +11054,26 @@ } }, "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "requires": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", "requires": { "micromark-util-symbol": "^2.0.0" } }, "micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", "requires": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -10955,26 +11081,26 @@ } }, "micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", "requires": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "micromark-util-decode-numeric-character-reference": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", "requires": { "micromark-util-symbol": "^2.0.0" } }, "micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", "requires": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", @@ -10983,9 +11109,9 @@ } }, "micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==" }, "micromark-util-events-to-acorn": { "version": "2.0.2", @@ -11003,30 +11129,30 @@ } }, "micromark-util-html-tag-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==" }, "micromark-util-normalize-identifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "requires": { "micromark-util-symbol": "^2.0.0" } }, "micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "requires": { "micromark-util-types": "^2.0.0" } }, "micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "requires": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", @@ -11034,9 +11160,9 @@ } }, "micromark-util-subtokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", - "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz", + "integrity": "sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==", "requires": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", @@ -11045,22 +11171,29 @@ } }, "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==" }, "micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==" }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + } } }, "mime": { @@ -11069,17 +11202,9 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==" }, "mimic-fn": { "version": "2.1.0", @@ -11087,17 +11212,17 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "requires": { "brace-expansion": "^2.0.1" } }, "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" }, "minisearch": { "version": "6.3.0", @@ -11105,14 +11230,14 @@ "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==" }, "mlly": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz", - "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.3.tgz", + "integrity": "sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==", "requires": { - "acorn": "^8.11.3", + "acorn": "^8.14.0", "pathe": "^1.1.2", - "pkg-types": "^1.0.3", - "ufo": "^1.3.2" + "pkg-types": "^1.2.1", + "ufo": "^1.5.4" } }, "modern-ahocorasick": { @@ -11121,9 +11246,9 @@ "integrity": "sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==" }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "mz": { "version": "2.7.0", @@ -11141,14 +11266,14 @@ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==" }, "node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" }, "normalize-path": { "version": "3.0.0", @@ -11160,11 +11285,6 @@ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" }, - "not": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/not/-/not-0.1.0.tgz", - "integrity": "sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==" - }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -11212,6 +11332,16 @@ "mimic-fn": "^2.1.0" } }, + "oniguruma-to-es": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-0.4.1.tgz", + "integrity": "sha512-rNcEohFz095QKGRovP/yqPIKc+nP+Sjs4YTHMv33nMePGKrq/r2eu9Yh4646M5XluGJsUnmwoXuiXE69KDs+fQ==", + "requires": { + "emoji-regex-xs": "^1.0.0", + "regex": "^5.0.0", + "regex-recursion": "^4.2.1" + } + }, "ora": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", @@ -11226,13 +11356,6 @@ "stdin-discarder": "^0.1.0", "string-width": "^6.1.0", "strip-ansi": "^7.1.0" - }, - "dependencies": { - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" - } } }, "outdent": { @@ -11241,11 +11364,11 @@ "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==" }, "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", "requires": { - "yocto-queue": "^0.1.0" + "yocto-queue": "^1.0.0" } }, "p-locate": { @@ -11254,8 +11377,28 @@ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "requires": { "p-limit": "^3.0.2" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + } } }, + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, "parse-entities": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", @@ -11272,9 +11415,9 @@ }, "dependencies": { "@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" } } }, @@ -11299,19 +11442,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-scurry": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "requires": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==" - } } }, "path-type": { @@ -11324,25 +11460,15 @@ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" }, - "periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==" }, "pify": { "version": "2.3.0", @@ -11355,23 +11481,23 @@ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==" }, "pkg-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.0.tgz", - "integrity": "sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz", + "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==", "requires": { - "confbox": "^0.1.7", - "mlly": "^1.6.1", + "confbox": "^0.1.8", + "mlly": "^1.7.2", "pathe": "^1.1.2" } }, "postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "requires": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" } }, "postcss-import": { @@ -11402,17 +11528,17 @@ } }, "postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", "requires": { - "postcss-selector-parser": "^6.0.11" + "postcss-selector-parser": "^6.1.1" } }, "postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -11482,9 +11608,9 @@ } }, "react-intersection-observer": { - "version": "9.10.1", - "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.10.1.tgz", - "integrity": "sha512-ZseerLEOaZ2FFMtkjNd0RGzxKTiiIBGaXcR5buh3GSgtoInNCztHvCzgu5Gg2I2vUhF/EX1XJn95inZkp/K6xQ==", + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.13.1.tgz", + "integrity": "sha512-tSzDaTy0qwNPLJHg8XZhlyHTgGW6drFKTtvjdL+p6um12rcnp8Z5XstE+QNBJ7c64n5o0Lj4ilUleA41bmDoMw==", "requires": {} }, "react-is": { @@ -11498,11 +11624,11 @@ "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==" }, "react-remove-scroll": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", - "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", "requires": { - "react-remove-scroll-bar": "^2.3.3", + "react-remove-scroll-bar": "^2.3.6", "react-style-singleton": "^2.2.1", "tslib": "^2.1.0", "use-callback-ref": "^1.3.0", @@ -11519,20 +11645,20 @@ } }, "react-router": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.0.tgz", - "integrity": "sha512-wPMZ8S2TuPadH0sF5irFGjkNLIcRvOSaEe7v+JER8508dyJumm6XZB1u5kztlX0RVq6AzRVndzqcUh6sFIauzA==", + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.28.0.tgz", + "integrity": "sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==", "requires": { - "@remix-run/router": "1.16.0" + "@remix-run/router": "1.21.0" } }, "react-router-dom": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.0.tgz", - "integrity": "sha512-Q9YaSYvubwgbal2c9DJKfx6hTNoBp3iJDsl+Duva/DwxoJH+OTXkxGpql4iUK2sla/8z4RpjAm6EWx1qUDuopQ==", + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.28.0.tgz", + "integrity": "sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==", "requires": { - "@remix-run/router": "1.16.0", - "react-router": "6.23.0" + "@remix-run/router": "1.21.0", + "react-router": "6.28.0" } }, "react-side-effect": { @@ -11575,6 +11701,57 @@ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { "picomatch": "^2.2.1" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + } + } + }, + "recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "requires": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + } + }, + "recma-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz", + "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==", + "requires": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + } + }, + "recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "requires": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "requires": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" } }, "regenerator-runtime": { @@ -11582,6 +11759,27 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, + "regex": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/regex/-/regex-5.0.2.tgz", + "integrity": "sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==", + "requires": { + "regex-utilities": "^2.3.0" + } + }, + "regex-recursion": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-4.2.1.tgz", + "integrity": "sha512-QHNZyZAeKdndD1G3bKAbBEKOSSK4KOHQrAJ01N1LJeb0SoH4DJIeFhp0uUpETgONifS4+P3sOgoA1dhzgrQvhA==", + "requires": { + "regex-utilities": "^2.3.0" + } + }, + "regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==" + }, "rehype-autolink-headings": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz", @@ -11607,9 +11805,9 @@ }, "dependencies": { "@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" }, "unified": { "version": "10.1.2", @@ -11655,6 +11853,16 @@ } } }, + "rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "requires": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + } + }, "rehype-slug": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz", @@ -11703,9 +11911,9 @@ } }, "remark-mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", - "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", + "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", "requires": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" @@ -11736,9 +11944,9 @@ } }, "remark-rehype": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", - "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz", + "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==", "requires": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", @@ -11787,27 +11995,29 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rollup": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", - "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", - "requires": { - "@rollup/rollup-android-arm-eabi": "4.17.2", - "@rollup/rollup-android-arm64": "4.17.2", - "@rollup/rollup-darwin-arm64": "4.17.2", - "@rollup/rollup-darwin-x64": "4.17.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", - "@rollup/rollup-linux-arm-musleabihf": "4.17.2", - "@rollup/rollup-linux-arm64-gnu": "4.17.2", - "@rollup/rollup-linux-arm64-musl": "4.17.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", - "@rollup/rollup-linux-riscv64-gnu": "4.17.2", - "@rollup/rollup-linux-s390x-gnu": "4.17.2", - "@rollup/rollup-linux-x64-gnu": "4.17.2", - "@rollup/rollup-linux-x64-musl": "4.17.2", - "@rollup/rollup-win32-arm64-msvc": "4.17.2", - "@rollup/rollup-win32-ia32-msvc": "4.17.2", - "@rollup/rollup-win32-x64-msvc": "4.17.2", - "@types/estree": "1.0.5", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.3.tgz", + "integrity": "sha512-SLsCOnlmGt9VoZ9Ek8yBK8tAdmPHeppkw+Xa7yDlCEhDTvwYei03JlWo1fdc7YTfLZ4tD8riJCUyAgTbszk1fQ==", + "requires": { + "@rollup/rollup-android-arm-eabi": "4.27.3", + "@rollup/rollup-android-arm64": "4.27.3", + "@rollup/rollup-darwin-arm64": "4.27.3", + "@rollup/rollup-darwin-x64": "4.27.3", + "@rollup/rollup-freebsd-arm64": "4.27.3", + "@rollup/rollup-freebsd-x64": "4.27.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.27.3", + "@rollup/rollup-linux-arm-musleabihf": "4.27.3", + "@rollup/rollup-linux-arm64-gnu": "4.27.3", + "@rollup/rollup-linux-arm64-musl": "4.27.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.27.3", + "@rollup/rollup-linux-riscv64-gnu": "4.27.3", + "@rollup/rollup-linux-s390x-gnu": "4.27.3", + "@rollup/rollup-linux-x64-gnu": "4.27.3", + "@rollup/rollup-linux-x64-musl": "4.27.3", + "@rollup/rollup-win32-arm64-msvc": "4.27.3", + "@rollup/rollup-win32-ia32-msvc": "4.27.3", + "@rollup/rollup-win32-x64-msvc": "4.27.3", + "@types/estree": "1.0.6", "fsevents": "~2.3.2" } }, @@ -11820,9 +12030,9 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "scheduler": { "version": "0.23.2", @@ -11838,9 +12048,9 @@ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" }, "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "requires": { "debug": "2.6.9", "depd": "2.0.0", @@ -11872,22 +12082,22 @@ } } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" } } }, "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "requires": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" } }, "setprototypeof": { @@ -11909,11 +12119,16 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shiki": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.4.0.tgz", - "integrity": "sha512-5WIn0OL8PWm7JhnTwRWXniy6eEDY234mRrERVlFa646V2ErQqwIFd2UML7e0Pq9eqSKLoMa3Ke+xbsF+DAuy+Q==", + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.23.1.tgz", + "integrity": "sha512-8kxV9TH4pXgdKGxNOkrSMydn1Xf6It8lsle0fiqxf7a1149K1WGtdOu3Zb91T5r1JpvRPxqxU3C2XdZZXQnrig==", "requires": { - "@shikijs/core": "1.4.0" + "@shikijs/core": "1.23.1", + "@shikijs/engine-javascript": "1.23.1", + "@shikijs/engine-oniguruma": "1.23.1", + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4" } }, "signal-exit": { @@ -11937,9 +12152,9 @@ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" }, "source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" }, "space-separated-tokens": { "version": "2.0.2", @@ -11965,13 +12180,6 @@ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "string-width": { @@ -12052,11 +12260,11 @@ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, "style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", "requires": { - "inline-style-parser": "0.1.1" + "inline-style-parser": "0.2.4" } }, "sucrase": { @@ -12073,14 +12281,6 @@ "ts-interface-checker": "^0.1.9" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -12092,32 +12292,32 @@ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" }, "tailwindcss": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", - "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.15.tgz", + "integrity": "sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==", "requires": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", - "chokidar": "^3.5.3", + "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.3.0", + "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.21.0", + "jiti": "^1.21.6", "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", + "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" }, "dependencies": { "glob-parent": { @@ -12151,11 +12351,6 @@ "thenify": ">= 3.1.0 < 4" } }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -12190,48 +12385,48 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "twoslash": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.2.5.tgz", - "integrity": "sha512-U8rqsfVh8jQMO1NJekUtglb52b7xD9+FrzeFrgzpHsRTKl8IQgqnZP6ld4PeKaHXhLfoZPuju9K50NXJ7wom8g==", + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.2.12.tgz", + "integrity": "sha512-tEHPASMqi7kqwfJbkk7hc/4EhlrKCSLcur+TcvYki3vhIfaRMXnXjaYFgXpoZRbT6GdprD4tGuVBEmTpUgLBsw==", "requires": { - "@typescript/vfs": "1.5.0", - "twoslash-protocol": "0.2.5" + "@typescript/vfs": "^1.6.0", + "twoslash-protocol": "0.2.12" } }, "twoslash-protocol": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.2.5.tgz", - "integrity": "sha512-oUr5ZAn37CgNa6p1mrCuuR/pINffsnGCee2aS170Uj1IObxCjsHzu6sgdPUdxGLLn6++gd/qjNH1/iR6RrfLeg==" + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.2.12.tgz", + "integrity": "sha512-5qZLXVYfZ9ABdjqbvPc4RWMr7PrpPaaDSeaYY55vl/w1j6H6kzsWK/urAEIXlzYlyrFmyz1UbwIt+AA0ck+wbg==" }, "typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==" + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==" }, "ua-parser-js": { - "version": "1.0.37", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", - "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==" + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", + "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==" }, "ufo": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", - "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==" + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==" }, "undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, "unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "requires": { "@types/unist": "^3.0.0", "bail": "^2.0.0", @@ -12266,15 +12461,6 @@ "@types/unist": "^3.0.0" } }, - "unist-util-remove-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", - "requires": { - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - } - }, "unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", @@ -12308,12 +12494,12 @@ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" }, "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" } }, "use-callback-ref": { @@ -12344,12 +12530,11 @@ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "requires": { "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, @@ -12363,190 +12548,190 @@ } }, "vite": { - "version": "5.2.10", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz", - "integrity": "sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==", + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", "requires": { - "esbuild": "^0.20.1", + "esbuild": "^0.21.3", "fsevents": "~2.3.3", - "postcss": "^8.4.38", - "rollup": "^4.13.0" + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "dependencies": { "@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", "optional": true }, "@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "optional": true }, "@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "optional": true }, "@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "optional": true }, "@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "optional": true }, "@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "optional": true }, "@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "optional": true }, "@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "optional": true }, "@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "optional": true }, "@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "optional": true }, "@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "optional": true }, "@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "optional": true }, "@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "optional": true }, "@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "optional": true }, "@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "optional": true }, "esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "requires": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } } } }, "vite-node": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.5.3.tgz", - "integrity": "sha512-axFo00qiCpU/JLd8N1gu9iEYL3xTbMbMrbe5nDp9GL0nb6gurIdZLkkFogZXWnE8Oyy5kfSLwNVIcVsnhE7lgQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz", + "integrity": "sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==", "requires": { "cac": "^6.7.14", "debug": "^4.3.4", @@ -12556,52 +12741,53 @@ } }, "vocs": { - "version": "1.0.0-alpha.50", - "resolved": "https://registry.npmjs.org/vocs/-/vocs-1.0.0-alpha.50.tgz", - "integrity": "sha512-rzZw60A8uKmmgouN1ymPz1/0GPK0cxE4ETYJWs5vZTMS3xcTqKarrvU9rcs0niJUfOR0maSs94eWzrgNBLZO1Q==", - "requires": { - "@floating-ui/react": "^0.26.6", - "@hono/node-server": "^1.2.3", - "@mdx-js/react": "^3.0.0", - "@mdx-js/rollup": "^3.0.0", - "@noble/hashes": "^1.3.2", + "version": "1.0.0-alpha.62", + "resolved": "https://registry.npmjs.org/vocs/-/vocs-1.0.0-alpha.62.tgz", + "integrity": "sha512-WidbX8M33lPlDjOvvjQyZaYGtn3hRZ3iViFuwvlmgAqCX1yGXaQs1tLdS1Cy5ki+q0BIUqXvvy8jo9rBQ+fM6w==", + "requires": { + "@floating-ui/react": "^0.26.24", + "@hono/node-server": "^1.13.1", + "@mdx-js/react": "^3.0.1", + "@mdx-js/rollup": "^3.0.1", + "@noble/hashes": "^1.5.0", "@radix-ui/colors": "^3.0.0", - "@radix-ui/react-accordion": "^1.1.2", - "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-accordion": "^1.2.1", + "@radix-ui/react-dialog": "^1.1.2", "@radix-ui/react-icons": "^1.3.0", - "@radix-ui/react-label": "^2.0.2", - "@radix-ui/react-navigation-menu": "^1.1.4", - "@radix-ui/react-popover": "^1.0.7", - "@radix-ui/react-tabs": "^1.0.4", - "@shikijs/rehype": "^1.1.2", - "@shikijs/transformers": "^1.1.2", - "@shikijs/twoslash": "^1.1.2", - "@vanilla-extract/css": "^1.14.0", - "@vanilla-extract/dynamic": "^2.1.0", - "@vanilla-extract/vite-plugin": "^3.9.4", - "@vitejs/plugin-react": "4.2.0", - "autoprefixer": "^10.4.16", + "@radix-ui/react-label": "^2.1.0", + "@radix-ui/react-navigation-menu": "^1.2.1", + "@radix-ui/react-popover": "^1.1.2", + "@radix-ui/react-tabs": "^1.1.1", + "@shikijs/rehype": "^1.21.0", + "@shikijs/transformers": "^1.21.0", + "@shikijs/twoslash": "^1.21.0", + "@vanilla-extract/css": "^1.16.0", + "@vanilla-extract/dynamic": "^2.1.2", + "@vanilla-extract/vite-plugin": "^3.9.5", + "@vitejs/plugin-react": "4.3.1", + "autoprefixer": "^10.4.20", "cac": "^6.7.14", - "chroma-js": "^2.4.2", - "clsx": "^2.0.0", + "chroma-js": "^2.6.0", + "clsx": "^2.1.1", "compression": "^1.7.4", "create-vocs": "^1.0.0-alpha.4", "cross-spawn": "^7.0.3", - "fs-extra": "^11.1.1", + "fs-extra": "^11.2.0", "globby": "^13.2.2", "hastscript": "^8.0.0", - "hono": "^3.10.2", + "hono": "^3.12.12", "mark.js": "^8.11.1", "mdast-util-directive": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", + "mdast-util-from-markdown": "^2.0.1", "mdast-util-gfm": "^3.0.0", - "mdast-util-to-hast": "^13.0.2", - "minimatch": "^9.0.3", + "mdast-util-to-hast": "^13.2.0", + "minimatch": "^9.0.5", "minisearch": "^6.3.0", "ora": "^7.0.1", - "postcss": "^8.4.31", + "p-limit": "^5.0.0", + "postcss": "^8.4.47", "react-helmet": "^6.1.0", - "react-intersection-observer": "^9.5.3", + "react-intersection-observer": "^9.13.1", "react-router-dom": "^6.20.0", "rehype-autolink-headings": "^7.1.0", "rehype-class-names": "^1.0.14", @@ -12611,15 +12797,22 @@ "remark-gfm": "^4.0.0", "remark-mdx-frontmatter": "^4.0.0", "remark-parse": "^11.0.0", - "serve-static": "^1.15.0", - "shiki": "^1.1.2", - "tailwindcss": "^3.3.3", + "serve-static": "^1.16.2", + "shiki": "^1.21.0", + "tailwindcss": "^3.4.13", "toml": "^3.0.0", - "twoslash": "~0.2.2", - "ua-parser-js": "^1.0.36", - "unified": "^11.0.4", + "twoslash": "~0.2.12", + "ua-parser-js": "^1.0.39", + "unified": "^11.0.5", "unist-util-visit": "^5.0.0", - "vite": "^5.0.2" + "vite": "^5.4.8" + }, + "dependencies": { + "hono": { + "version": "3.12.12", + "resolved": "https://registry.npmjs.org/hono/-/hono-3.12.12.tgz", + "integrity": "sha512-5IAMJOXfpA5nT+K0MNjClchzz0IhBHs2Szl7WFAhrFOsbtQsYmNynFyJRg/a3IPsmCfxcrf8txUGiNShXpK5Rg==" + } } }, "which": { @@ -12640,11 +12833,6 @@ "strip-ansi": "^7.0.1" }, "dependencies": { - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - }, "emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -12685,19 +12873,6 @@ "color-convert": "^2.0.1" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -12729,14 +12904,14 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "yaml": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", - "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==" }, "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==" }, "zwitch": { "version": "2.0.4", diff --git a/docs/pages/api/README.md b/docs/pages/api/README.md deleted file mode 100644 index 994abf79..00000000 --- a/docs/pages/api/README.md +++ /dev/null @@ -1,3 +0,0 @@ - -# API Reference - diff --git a/docs/pages/api/classes/AABB.md b/docs/pages/api/classes/AABB.md new file mode 100644 index 00000000..0dea533a --- /dev/null +++ b/docs/pages/api/classes/AABB.md @@ -0,0 +1,297 @@ +# Class: AABB + +Axis-aligned bounding box + +## Constructors + +### new AABB() + +> **new AABB**(`lower`?, `upper`?): [`AABB`](AABB) + +#### Parameters + +• **lower?**: [`Vec2Value`](../interfaces/Vec2Value) + +• **upper?**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`AABB`](AABB) + +## Properties + +### lowerBound + +> **lowerBound**: [`Vec2`](Vec2) + +*** + +### upperBound + +> **upperBound**: [`Vec2`](Vec2) + +## Methods + +### combine() + +> **combine**(`a`, `b`?): `void` + +Combine one or two AABB into this one. + +#### Parameters + +• **a**: [`AABBValue`](../interfaces/AABBValue) + +• **b?**: [`AABBValue`](../interfaces/AABBValue) + +#### Returns + +`void` + +*** + +### combinePoints() + +> **combinePoints**(`a`, `b`): `void` + +#### Parameters + +• **a**: [`Vec2Value`](../interfaces/Vec2Value) + +• **b**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +*** + +### contains() + +> **contains**(`aabb`): `boolean` + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +#### Returns + +`boolean` + +*** + +### extend() + +> **extend**(`value`): [`AABB`](AABB) + +#### Parameters + +• **value**: `number` + +#### Returns + +[`AABB`](AABB) + +*** + +### getCenter() + +> **getCenter**(): [`Vec2`](Vec2) + +Get the center of the AABB. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getExtents() + +> **getExtents**(): [`Vec2`](Vec2) + +Get the extents of the AABB (half-widths). + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getPerimeter() + +> **getPerimeter**(): `number` + +Get the perimeter length. + +#### Returns + +`number` + +*** + +### isValid() + +> **isValid**(): `boolean` + +Verify that the bounds are sorted. + +#### Returns + +`boolean` + +*** + +### rayCast() + +> **rayCast**(`output`, `input`): `boolean` + +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +#### Returns + +`boolean` + +*** + +### set() + +> **set**(`aabb`): `void` + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +#### Returns + +`void` + +*** + +### areEqual() + +> `static` **areEqual**(`a`, `b`): `boolean` + +#### Parameters + +• **a**: [`AABBValue`](../interfaces/AABBValue) + +• **b**: [`AABBValue`](../interfaces/AABBValue) + +#### Returns + +`boolean` + +*** + +### assert() + +> `static` **assert**(`o`): `void` + +#### Parameters + +• **o**: `any` + +#### Returns + +`void` + +*** + +### combinedPerimeter() + +> `static` **combinedPerimeter**(`a`, `b`): `number` + +#### Parameters + +• **a**: [`AABBValue`](../interfaces/AABBValue) + +• **b**: [`AABBValue`](../interfaces/AABBValue) + +#### Returns + +`number` + +*** + +### combinePoints() + +> `static` **combinePoints**(`out`, `a`, `b`): [`AABBValue`](../interfaces/AABBValue) + +#### Parameters + +• **out**: [`AABBValue`](../interfaces/AABBValue) + +• **a**: [`Vec2Value`](../interfaces/Vec2Value) + +• **b**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`AABBValue`](../interfaces/AABBValue) + +*** + +### diff() + +> `static` **diff**(`a`, `b`): `number` + +#### Parameters + +• **a**: [`AABBValue`](../interfaces/AABBValue) + +• **b**: [`AABBValue`](../interfaces/AABBValue) + +#### Returns + +`number` + +*** + +### extend() + +> `static` **extend**(`out`, `value`): [`AABBValue`](../interfaces/AABBValue) + +#### Parameters + +• **out**: [`AABBValue`](../interfaces/AABBValue) + +• **value**: `number` + +#### Returns + +[`AABBValue`](../interfaces/AABBValue) + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` + +#### Parameters + +• **obj**: `any` + +#### Returns + +`boolean` + +*** + +### testOverlap() + +> `static` **testOverlap**(`a`, `b`): `boolean` + +#### Parameters + +• **a**: [`AABBValue`](../interfaces/AABBValue) + +• **b**: [`AABBValue`](../interfaces/AABBValue) + +#### Returns + +`boolean` diff --git a/docs/pages/api/classes/Body.md b/docs/pages/api/classes/Body.md new file mode 100644 index 00000000..6ae7e4f4 --- /dev/null +++ b/docs/pages/api/classes/Body.md @@ -0,0 +1,1011 @@ +# Class: Body + +A rigid body composed of one or more fixtures. + +To create a new Body use [World.createBody](World#createbody). + +## Methods + +### advance() + +> **advance**(`alpha`): `void` + +Used in TOI. + +#### Parameters + +• **alpha**: `number` + +#### Returns + +`void` + +*** + +### applyAngularImpulse() + +> **applyAngularImpulse**(`impulse`, `wake`): `void` + +Apply an angular impulse. + +#### Parameters + +• **impulse**: `number` + +The angular impulse in units of kg*m*m/s + +• **wake**: `boolean` = `true` + +Also wake up the body + +#### Returns + +`void` + +*** + +### applyForce() + +> **applyForce**(`force`, `point`, `wake`): `void` + +Apply a force at a world point. If the force is not applied at the center of +mass, it will generate a torque and affect the angular velocity. This wakes +up the body. + +#### Parameters + +• **force**: [`Vec2Value`](../interfaces/Vec2Value) + +The world force vector, usually in Newtons (N). + +• **point**: [`Vec2Value`](../interfaces/Vec2Value) + +The world position of the point of application. + +• **wake**: `boolean` = `true` + +Also wake up the body + +#### Returns + +`void` + +*** + +### applyForceToCenter() + +> **applyForceToCenter**(`force`, `wake`): `void` + +Apply a force to the center of mass. This wakes up the body. + +#### Parameters + +• **force**: [`Vec2Value`](../interfaces/Vec2Value) + +The world force vector, usually in Newtons (N). + +• **wake**: `boolean` = `true` + +Also wake up the body + +#### Returns + +`void` + +*** + +### applyLinearImpulse() + +> **applyLinearImpulse**(`impulse`, `point`, `wake`): `void` + +Apply an impulse at a point. This immediately modifies the velocity. It also +modifies the angular velocity if the point of application is not at the +center of mass. This wakes up the body. + +#### Parameters + +• **impulse**: [`Vec2Value`](../interfaces/Vec2Value) + +The world impulse vector, usually in N-seconds or kg-m/s. + +• **point**: [`Vec2Value`](../interfaces/Vec2Value) + +The world position of the point of application. + +• **wake**: `boolean` = `true` + +Also wake up the body + +#### Returns + +`void` + +*** + +### applyTorque() + +> **applyTorque**(`torque`, `wake`): `void` + +Apply a torque. This affects the angular velocity without affecting the +linear velocity of the center of mass. This wakes up the body. + +#### Parameters + +• **torque**: `number` + +About the z-axis (out of the screen), usually in N-m. + +• **wake**: `boolean` = `true` + +Also wake up the body + +#### Returns + +`void` + +*** + +### createFixture() + +#### createFixture(def) + +> **createFixture**(`def`): [`Fixture`](Fixture) + +Creates a fixture and attach it to this body. + +If the density is non-zero, this function automatically updates the mass of +the body. + +Contacts are not created until the next time step. + +Warning: This function is locked during callbacks. + +##### Parameters + +• **def**: [`FixtureDef`](../interfaces/FixtureDef) + +##### Returns + +[`Fixture`](Fixture) + +#### createFixture(shape, opt) + +> **createFixture**(`shape`, `opt`?): [`Fixture`](Fixture) + +##### Parameters + +• **shape**: [`Shape`](Shape) + +• **opt?**: [`FixtureOpt`](../interfaces/FixtureOpt) + +##### Returns + +[`Fixture`](Fixture) + +#### createFixture(shape, density) + +> **createFixture**(`shape`, `density`?): [`Fixture`](Fixture) + +##### Parameters + +• **shape**: [`Shape`](Shape) + +• **density?**: `number` + +##### Returns + +[`Fixture`](Fixture) + +*** + +### destroyFixture() + +> **destroyFixture**(`fixture`): `void` + +Destroy a fixture. This removes the fixture from the broad-phase and destroys +all contacts associated with this fixture. This will automatically adjust the +mass of the body if the body is dynamic and the fixture has positive density. +All fixtures attached to a body are implicitly destroyed when the body is +destroyed. + +Warning: This function is locked during callbacks. + +#### Parameters + +• **fixture**: [`Fixture`](Fixture) + +The fixture to be removed. + +#### Returns + +`void` + +*** + +### getAngle() + +> **getAngle**(): `number` + +Get the current world rotation angle in radians. + +#### Returns + +`number` + +*** + +### getAngularDamping() + +> **getAngularDamping**(): `number` + +#### Returns + +`number` + +*** + +### getAngularVelocity() + +> **getAngularVelocity**(): `number` + +Get the angular velocity. + +#### Returns + +`number` + +the angular velocity in radians/second. + +*** + +### getContactList() + +> **getContactList**(): [`ContactEdge`](ContactEdge) + +Warning: this list changes during the time step and you may miss some +collisions if you don't use ContactListener. + +#### Returns + +[`ContactEdge`](ContactEdge) + +*** + +### getFixtureList() + +> **getFixtureList**(): [`Fixture`](Fixture) + +#### Returns + +[`Fixture`](Fixture) + +*** + +### getGravityScale() + +> **getGravityScale**(): `number` + +#### Returns + +`number` + +*** + +### getInertia() + +> **getInertia**(): `number` + +Get the rotational inertia of the body about the local origin. + +#### Returns + +`number` + +the rotational inertia, usually in kg-m^2. + +*** + +### getJointList() + +> **getJointList**(): [`JointEdge`](JointEdge) + +#### Returns + +[`JointEdge`](JointEdge) + +*** + +### getLinearDamping() + +> **getLinearDamping**(): `number` + +#### Returns + +`number` + +*** + +### getLinearVelocity() + +> **getLinearVelocity**(): [`Vec2`](Vec2) + +Get the linear velocity of the center of mass. + +#### Returns + +[`Vec2`](Vec2) + +the linear velocity of the center of mass. + +*** + +### getLinearVelocityFromLocalPoint() + +> **getLinearVelocityFromLocalPoint**(`localPoint`): [`Vec2`](Vec2) + +Get the world velocity of a local point. + +#### Parameters + +• **localPoint**: [`Vec2Value`](../interfaces/Vec2Value) + +A point in local coordinates. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLinearVelocityFromWorldPoint() + +> **getLinearVelocityFromWorldPoint**(`worldPoint`): [`Vec2`](Vec2) + +Get the world linear velocity of a world point attached to this body. + +#### Parameters + +• **worldPoint**: [`Vec2Value`](../interfaces/Vec2Value) + +A point in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLocalCenter() + +> **getLocalCenter**(): [`Vec2`](Vec2) + +Get the local position of the center of mass. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLocalPoint() + +> **getLocalPoint**(`worldPoint`): [`Vec2`](Vec2) + +Gets the corresponding local point of a world point. + +#### Parameters + +• **worldPoint**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLocalVector() + +> **getLocalVector**(`worldVector`): [`Vec2`](Vec2) + +Gets the corresponding local vector of a world vector. + +#### Parameters + +• **worldVector**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getMass() + +> **getMass**(): `number` + +Get the total mass of the body. + +#### Returns + +`number` + +The mass, usually in kilograms (kg). + +*** + +### getMassData() + +> **getMassData**(`data`): `void` + +Copy the mass data of the body to data. + +#### Parameters + +• **data**: [`MassData`](../interfaces/MassData) + +#### Returns + +`void` + +*** + +### getNext() + +> **getNext**(): [`Body`](Body) + +#### Returns + +[`Body`](Body) + +*** + +### getPosition() + +> **getPosition**(): [`Vec2`](Vec2) + +Get the world position for the body's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getTransform() + +> **getTransform**(): [`Transform`](Transform) + +Get the world transform for the body's origin. + +#### Returns + +[`Transform`](Transform) + +*** + +### getType() + +> **getType**(): [`BodyType`](../type-aliases/BodyType) + +Get the type of the body. + +#### Returns + +[`BodyType`](../type-aliases/BodyType) + +*** + +### getUserData() + +> **getUserData**(): `unknown` + +#### Returns + +`unknown` + +*** + +### getWorld() + +> **getWorld**(): [`World`](World) + +#### Returns + +[`World`](World) + +*** + +### getWorldCenter() + +> **getWorldCenter**(): [`Vec2`](Vec2) + +Get the world position of the center of mass. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getWorldPoint() + +> **getWorldPoint**(`localPoint`): [`Vec2`](Vec2) + +Get the corresponding world point of a local point. + +#### Parameters + +• **localPoint**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getWorldVector() + +> **getWorldVector**(`localVector`): [`Vec2`](Vec2) + +Get the corresponding world vector of a local vector. + +#### Parameters + +• **localVector**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### isActive() + +> **isActive**(): `boolean` + +#### Returns + +`boolean` + +*** + +### isAwake() + +> **isAwake**(): `boolean` + +#### Returns + +`boolean` + +*** + +### isBullet() + +> **isBullet**(): `boolean` + +#### Returns + +`boolean` + +*** + +### isDynamic() + +> **isDynamic**(): `boolean` + +#### Returns + +`boolean` + +*** + +### isFixedRotation() + +> **isFixedRotation**(): `boolean` + +#### Returns + +`boolean` + +*** + +### isKinematic() + +> **isKinematic**(): `boolean` + +#### Returns + +`boolean` + +*** + +### isSleepingAllowed() + +> **isSleepingAllowed**(): `boolean` + +#### Returns + +`boolean` + +*** + +### isStatic() + +> **isStatic**(): `boolean` + +#### Returns + +`boolean` + +*** + +### isWorldLocked() + +> **isWorldLocked**(): `boolean` + +#### Returns + +`boolean` + +*** + +### resetMassData() + +> **resetMassData**(): `void` + +This resets the mass properties to the sum of the mass properties of the +fixtures. This normally does not need to be called unless you called +SetMassData to override the mass and you later want to reset the mass. + +#### Returns + +`void` + +*** + +### setActive() + +> **setActive**(`flag`): `void` + +Set the active state of the body. An inactive body is not simulated and +cannot be collided with or woken up. If you pass a flag of true, all fixtures +will be added to the broad-phase. If you pass a flag of false, all fixtures +will be removed from the broad-phase and all contacts will be destroyed. +Fixtures and joints are otherwise unaffected. + +You may continue to create/destroy fixtures and joints on inactive bodies. +Fixtures on an inactive body are implicitly inactive and will not participate +in collisions, ray-casts, or queries. Joints connected to an inactive body +are implicitly inactive. An inactive body is still owned by a World object +and remains + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### setAngle() + +> **setAngle**(`angle`): `void` + +#### Parameters + +• **angle**: `number` + +#### Returns + +`void` + +*** + +### setAngularDamping() + +> **setAngularDamping**(`angularDamping`): `void` + +#### Parameters + +• **angularDamping**: `number` + +#### Returns + +`void` + +*** + +### setAngularVelocity() + +> **setAngularVelocity**(`w`): `void` + +Set the angular velocity. + +#### Parameters + +• **w**: `number` + +The new angular velocity in radians/second. + +#### Returns + +`void` + +*** + +### setAwake() + +> **setAwake**(`flag`): `void` + +Set the sleep state of the body. A sleeping body has very low CPU cost. + +#### Parameters + +• **flag**: `boolean` + +Set to true to wake the body, false to put it to sleep. + +#### Returns + +`void` + +*** + +### setBullet() + +> **setBullet**(`flag`): `void` + +Should this body be treated like a bullet for continuous collision detection? + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### setDynamic() + +> **setDynamic**(): [`Body`](Body) + +#### Returns + +[`Body`](Body) + +*** + +### setFixedRotation() + +> **setFixedRotation**(`flag`): `void` + +Set this body to have fixed rotation. This causes the mass to be reset. + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### setGravityScale() + +> **setGravityScale**(`scale`): `void` + +Scale the gravity applied to this body. + +#### Parameters + +• **scale**: `number` + +#### Returns + +`void` + +*** + +### setKinematic() + +> **setKinematic**(): [`Body`](Body) + +#### Returns + +[`Body`](Body) + +*** + +### setLinearDamping() + +> **setLinearDamping**(`linearDamping`): `void` + +#### Parameters + +• **linearDamping**: `number` + +#### Returns + +`void` + +*** + +### setLinearVelocity() + +> **setLinearVelocity**(`v`): `void` + +Set the linear velocity of the center of mass. + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +The new linear velocity of the center of mass. + +#### Returns + +`void` + +*** + +### setMassData() + +> **setMassData**(`massData`): `void` + +Set the mass properties to override the mass properties of the fixtures. Note +that this changes the center of mass position. Note that creating or +destroying fixtures can also alter the mass. This function has no effect if +the body isn't dynamic. + +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) + +The mass properties. + +#### Returns + +`void` + +*** + +### setPosition() + +> **setPosition**(`p`): `void` + +#### Parameters + +• **p**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +*** + +### setSleepingAllowed() + +> **setSleepingAllowed**(`flag`): `void` + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### setStatic() + +> **setStatic**(): [`Body`](Body) + +This will alter the mass and velocity. + +#### Returns + +[`Body`](Body) + +*** + +### setTransform() + +> **setTransform**(`position`, `angle`): `void` + +Set the position of the body's origin and rotation. Manipulating a body's +transform may cause non-physical behavior. Note: contacts are updated on the +next call to World.step. + +#### Parameters + +• **position**: [`Vec2Value`](../interfaces/Vec2Value) + +The world position of the body's local origin. + +• **angle**: `number` + +The world rotation in radians. + +#### Returns + +`void` + +*** + +### setType() + +> **setType**(`type`): `void` + +Set the type of the body to "static", "kinematic" or "dynamic". + +#### Parameters + +• **type**: [`BodyType`](../type-aliases/BodyType) + +The type of the body. + +#### Returns + +`void` + +*** + +### setUserData() + +> **setUserData**(`data`): `void` + +#### Parameters + +• **data**: `any` + +#### Returns + +`void` + +*** + +### shouldCollide() + +> **shouldCollide**(`that`): `boolean` + +This is used to test if two bodies should collide. + +Bodies do not collide when: +- Neither of them is dynamic +- They are connected by a joint with collideConnected == false + +#### Parameters + +• **that**: [`Body`](Body) + +#### Returns + +`boolean` + +*** + +### synchronizeFixtures() + +> **synchronizeFixtures**(): `void` + +Update fixtures in broad-phase. + +#### Returns + +`void` + +*** + +### synchronizeTransform() + +> **synchronizeTransform**(): `void` + +#### Returns + +`void` diff --git a/docs/pages/api/classes/BoxShape.md b/docs/pages/api/classes/BoxShape.md new file mode 100644 index 00000000..bb412c32 --- /dev/null +++ b/docs/pages/api/classes/BoxShape.md @@ -0,0 +1,279 @@ +# Class: BoxShape + +A rectangle polygon which extend PolygonShape. + +## Extends + +- [`PolygonShape`](PolygonShape) + +## Constructors + +### new BoxShape() + +> **new BoxShape**(`halfWidth`, `halfHeight`, `center`?, `angle`?): [`BoxShape`](BoxShape) + +#### Parameters + +• **halfWidth**: `number` + +• **halfHeight**: `number` + +• **center?**: [`Vec2Value`](../interfaces/Vec2Value) + +coordinate of the center of the box relative to the body + +• **angle?**: `number` + +angle of the box relative to the body + +#### Returns + +[`BoxShape`](BoxShape) + +#### Overrides + +[`PolygonShape`](PolygonShape).[`constructor`](PolygonShape#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`PolygonShape`](PolygonShape).[`style`](PolygonShape#style) + +*** + +### TYPE + +> `static` **TYPE**: `"polygon"` + +#### Overrides + +[`PolygonShape`](PolygonShape).[`TYPE`](PolygonShape#type) + +## Methods + +### computeAABB() + +> **computeAABB**(`aabb`, `xf`, `childIndex`): `void` + +Given a transform, compute the associated axis aligned bounding box for a +child shape. + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +Returns the axis aligned box. + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The world transform of the shape. + +• **childIndex**: `number` + +The child shape + +#### Returns + +`void` + +#### Inherited from + +[`PolygonShape`](PolygonShape).[`computeAABB`](PolygonShape#computeaabb) + +*** + +### computeDistanceProxy() + +> **computeDistanceProxy**(`proxy`): `void` + +#### Parameters + +• **proxy**: [`DistanceProxy`](DistanceProxy) + +#### Returns + +`void` + +#### Inherited from + +[`PolygonShape`](PolygonShape).[`computeDistanceProxy`](PolygonShape#computedistanceproxy) + +*** + +### computeMass() + +> **computeMass**(`massData`, `density`): `void` + +Compute the mass properties of this shape using its dimensions and density. +The inertia tensor is computed about the local origin. + +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) + +Returns the mass data for this shape. + +• **density**: `number` + +The density in kilograms per meter squared. + +#### Returns + +`void` + +#### Inherited from + +[`PolygonShape`](PolygonShape).[`computeMass`](PolygonShape#computemass) + +*** + +### getChildCount() + +> **getChildCount**(): `1` + +Get the number of child primitives. + +#### Returns + +`1` + +#### Inherited from + +[`PolygonShape`](PolygonShape).[`getChildCount`](PolygonShape#getchildcount) + +*** + +### getRadius() + +> **getRadius**(): `number` + +#### Returns + +`number` + +#### Inherited from + +[`PolygonShape`](PolygonShape).[`getRadius`](PolygonShape#getradius) + +*** + +### getType() + +> **getType**(): `"polygon"` + +Get the type of this shape. You can use this to down cast to the concrete +shape. + +#### Returns + +`"polygon"` + +the shape type. + +#### Inherited from + +[`PolygonShape`](PolygonShape).[`getType`](PolygonShape#gettype) + +*** + +### rayCast() + +> **rayCast**(`output`, `input`, `xf`, `childIndex`): `boolean` + +Cast a ray against a child shape. + +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +The ray-cast results. + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input parameters. + +• **xf**: [`Transform`](Transform) + +The transform to be applied to the shape. + +• **childIndex**: `number` + +The child shape index + +#### Returns + +`boolean` + +#### Inherited from + +[`PolygonShape`](PolygonShape).[`rayCast`](PolygonShape#raycast) + +*** + +### testPoint() + +> **testPoint**(`xf`, `p`): `boolean` + +Test a point for containment in this shape. This only works for convex +shapes. + +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The shape world transform. + +• **p**: [`Vec2Value`](../interfaces/Vec2Value) + +A point in world coordinates. + +#### Returns + +`boolean` + +#### Inherited from + +[`PolygonShape`](PolygonShape).[`testPoint`](PolygonShape#testpoint) + +*** + +### validate() + +> **validate**(): `boolean` + +Validate convexity. This is a very time consuming operation. + +#### Returns + +`boolean` + +true if valid + +#### Inherited from + +[`PolygonShape`](PolygonShape).[`validate`](PolygonShape#validate) + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` + +#### Parameters + +• **obj**: `any` + +#### Returns + +`boolean` + +#### Inherited from + +[`PolygonShape`](PolygonShape).[`isValid`](PolygonShape#isvalid) diff --git a/docs/pages/api/classes/BroadPhase.md b/docs/pages/api/classes/BroadPhase.md new file mode 100644 index 00000000..6e195492 --- /dev/null +++ b/docs/pages/api/classes/BroadPhase.md @@ -0,0 +1,341 @@ +# Class: BroadPhase + +The broad-phase wraps and extends a dynamic-tree to keep track of moved +objects and query them on update. + +## Constructors + +### new BroadPhase() + +> **new BroadPhase**(): [`BroadPhase`](BroadPhase) + +#### Returns + +[`BroadPhase`](BroadPhase) + +## Properties + +### m\_callback() + +> **m\_callback**: (`userDataA`, `userDataB`) => `void` + +#### Parameters + +• **userDataA**: `any` + +• **userDataB**: `any` + +#### Returns + +`void` + +*** + +### m\_moveBuffer + +> **m\_moveBuffer**: `number`[] = `[]` + +*** + +### m\_queryProxyId + +> **m\_queryProxyId**: `number` + +*** + +### m\_tree + +> **m\_tree**: [`DynamicTree`](DynamicTree)\<[`FixtureProxy`](FixtureProxy)\> + +## Methods + +### bufferMove() + +> **bufferMove**(`proxyId`): `void` + +#### Parameters + +• **proxyId**: `number` + +#### Returns + +`void` + +*** + +### createProxy() + +> **createProxy**(`aabb`, `userData`): `number` + +Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs +is called. + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +• **userData**: [`FixtureProxy`](FixtureProxy) + +#### Returns + +`number` + +*** + +### destroyProxy() + +> **destroyProxy**(`proxyId`): `void` + +Destroy a proxy. It is up to the client to remove any pairs. + +#### Parameters + +• **proxyId**: `number` + +#### Returns + +`void` + +*** + +### getFatAABB() + +> **getFatAABB**(`proxyId`): [`AABB`](AABB) + +Get the fat AABB for a proxy. + +#### Parameters + +• **proxyId**: `number` + +#### Returns + +[`AABB`](AABB) + +*** + +### getProxyCount() + +> **getProxyCount**(): `number` + +Get the number of proxies. + +#### Returns + +`number` + +*** + +### getTreeBalance() + +> **getTreeBalance**(): `number` + +Get the balance (integer) of the embedded tree. + +#### Returns + +`number` + +*** + +### getTreeHeight() + +> **getTreeHeight**(): `number` + +Get the height of the embedded tree. + +#### Returns + +`number` + +*** + +### getTreeQuality() + +> **getTreeQuality**(): `number` + +Get the quality metric of the embedded tree. + +#### Returns + +`number` + +*** + +### getUserData() + +> **getUserData**(`proxyId`): [`FixtureProxy`](FixtureProxy) + +Get user data from a proxy. Returns null if the id is invalid. + +#### Parameters + +• **proxyId**: `number` + +#### Returns + +[`FixtureProxy`](FixtureProxy) + +*** + +### moveProxy() + +> **moveProxy**(`proxyId`, `aabb`, `displacement`): `void` + +Call moveProxy as many times as you like, then when you are done call +UpdatePairs to finalized the proxy pairs (for your time step). + +#### Parameters + +• **proxyId**: `number` + +• **aabb**: [`AABB`](AABB) + +• **displacement**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +*** + +### query() + +> **query**(`aabb`, `queryCallback`): `void` + +Query an AABB for overlapping proxies. The callback class is called for each +proxy that overlaps the supplied AABB. + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +• **queryCallback**: [`DynamicTreeQueryCallback`](../type-aliases/DynamicTreeQueryCallback) + +#### Returns + +`void` + +*** + +### queryCallback() + +> **queryCallback**(`proxyId`): `boolean` + +#### Parameters + +• **proxyId**: `number` + +#### Returns + +`boolean` + +*** + +### rayCast() + +> **rayCast**(`input`, `rayCastCallback`): `void` + +Ray-cast against the proxies in the tree. This relies on the callback to +perform a exact ray-cast in the case were the proxy contains a shape. The +callback also performs the any collision filtering. This has performance +roughly equal to k * log(n), where k is the number of collisions and n is the +number of proxies in the tree. + +#### Parameters + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. + +• **rayCastCallback**: [`RayCastCallback`](../type-aliases/RayCastCallback) + +A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. + +#### Returns + +`void` + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the world origin. Useful for large worlds. The shift formula is: +position -= newOrigin + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +The new origin with respect to the old origin + +#### Returns + +`void` + +*** + +### testOverlap() + +> **testOverlap**(`proxyIdA`, `proxyIdB`): `boolean` + +Test overlap of fat AABBs. + +#### Parameters + +• **proxyIdA**: `number` + +• **proxyIdB**: `number` + +#### Returns + +`boolean` + +*** + +### touchProxy() + +> **touchProxy**(`proxyId`): `void` + +Call to trigger a re-processing of it's pairs on the next call to +UpdatePairs. + +#### Parameters + +• **proxyId**: `number` + +#### Returns + +`void` + +*** + +### unbufferMove() + +> **unbufferMove**(`proxyId`): `void` + +#### Parameters + +• **proxyId**: `number` + +#### Returns + +`void` + +*** + +### updatePairs() + +> **updatePairs**(`addPairCallback`): `void` + +Update the pairs. This results in pair callbacks. This can only add pairs. + +#### Parameters + +• **addPairCallback** + +#### Returns + +`void` diff --git a/docs/pages/api/classes/ChainShape.md b/docs/pages/api/classes/ChainShape.md new file mode 100644 index 00000000..ebf9e0b0 --- /dev/null +++ b/docs/pages/api/classes/ChainShape.md @@ -0,0 +1,354 @@ +# Class: ChainShape + +A chain shape is a free form sequence of line segments. The chain has +two-sided collision, so you can use inside and outside collision. Therefore, +you may use any winding order. Connectivity information is used to create +smooth collisions. + +WARNING: The chain will not collide properly if there are self-intersections. + +## Extends + +- [`Shape`](Shape) + +## Constructors + +### new ChainShape() + +> **new ChainShape**(`vertices`?, `loop`?): [`ChainShape`](ChainShape) + +#### Parameters + +• **vertices?**: [`Vec2Value`](../interfaces/Vec2Value)[] + +• **loop?**: `boolean` + +#### Returns + +[`ChainShape`](ChainShape) + +#### Overrides + +[`Shape`](Shape).[`constructor`](Shape#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Shape`](Shape).[`style`](Shape#style) + +*** + +### TYPE + +> `static` **TYPE**: `"chain"` + +## Methods + +### computeAABB() + +> **computeAABB**(`aabb`, `xf`, `childIndex`): `void` + +Given a transform, compute the associated axis aligned bounding box for a +child shape. + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +Returns the axis aligned box. + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The world transform of the shape. + +• **childIndex**: `number` + +The child shape + +#### Returns + +`void` + +#### Overrides + +[`Shape`](Shape).[`computeAABB`](Shape#computeaabb) + +*** + +### computeDistanceProxy() + +> **computeDistanceProxy**(`proxy`, `childIndex`): `void` + +#### Parameters + +• **proxy**: [`DistanceProxy`](DistanceProxy) + +• **childIndex**: `number` + +#### Returns + +`void` + +#### Overrides + +[`Shape`](Shape).[`computeDistanceProxy`](Shape#computedistanceproxy) + +*** + +### computeMass() + +> **computeMass**(`massData`, `density`?): `void` + +Compute the mass properties of this shape using its dimensions and density. +The inertia tensor is computed about the local origin. + +Chains have zero mass. + +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) + +Returns the mass data for this shape. + +• **density?**: `number` + +The density in kilograms per meter squared. + +#### Returns + +`void` + +#### Overrides + +[`Shape`](Shape).[`computeMass`](Shape#computemass) + +*** + +### getChildCount() + +> **getChildCount**(): `number` + +Get the number of child primitives. + +#### Returns + +`number` + +#### Overrides + +[`Shape`](Shape).[`getChildCount`](Shape#getchildcount) + +*** + +### getChildEdge() + +> **getChildEdge**(`edge`, `childIndex`): `void` + +#### Parameters + +• **edge**: [`EdgeShape`](EdgeShape) + +• **childIndex**: `number` + +#### Returns + +`void` + +*** + +### getNextVertex() + +> **getNextVertex**(): [`Vec2`](Vec2) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getPrevVertex() + +> **getPrevVertex**(): [`Vec2`](Vec2) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getRadius() + +> **getRadius**(): `number` + +#### Returns + +`number` + +#### Overrides + +[`Shape`](Shape).[`getRadius`](Shape#getradius) + +*** + +### getType() + +> **getType**(): `"chain"` + +Get the type of this shape. You can use this to down cast to the concrete +shape. + +#### Returns + +`"chain"` + +the shape type. + +#### Overrides + +[`Shape`](Shape).[`getType`](Shape#gettype) + +*** + +### getVertex() + +> **getVertex**(`index`): [`Vec2`](Vec2) + +#### Parameters + +• **index**: `number` + +#### Returns + +[`Vec2`](Vec2) + +*** + +### isLoop() + +> **isLoop**(): `boolean` + +#### Returns + +`boolean` + +*** + +### rayCast() + +> **rayCast**(`output`, `input`, `xf`, `childIndex`): `boolean` + +Cast a ray against a child shape. + +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +The ray-cast results. + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input parameters. + +• **xf**: [`Transform`](Transform) + +The transform to be applied to the shape. + +• **childIndex**: `number` + +The child shape index + +#### Returns + +`boolean` + +#### Overrides + +[`Shape`](Shape).[`rayCast`](Shape#raycast) + +*** + +### setNextVertex() + +> **setNextVertex**(`nextVertex`): `void` + +Establish connectivity to a vertex that follows the last vertex. Don't call +this for loops. + +#### Parameters + +• **nextVertex**: [`Vec2`](Vec2) + +#### Returns + +`void` + +*** + +### setPrevVertex() + +> **setPrevVertex**(`prevVertex`): `void` + +Establish connectivity to a vertex that precedes the first vertex. Don't call +this for loops. + +#### Parameters + +• **prevVertex**: [`Vec2`](Vec2) + +#### Returns + +`void` + +*** + +### testPoint() + +> **testPoint**(`xf`, `p`): `false` + +Test a point for containment in this shape. This only works for convex +shapes. + +This always return false. + +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The shape world transform. + +• **p**: [`Vec2Value`](../interfaces/Vec2Value) + +A point in world coordinates. + +#### Returns + +`false` + +#### Overrides + +[`Shape`](Shape).[`testPoint`](Shape#testpoint) + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` + +#### Parameters + +• **obj**: `any` + +#### Returns + +`boolean` + +#### Inherited from + +[`Shape`](Shape).[`isValid`](Shape#isvalid) diff --git a/docs/pages/api/classes/CircleShape.md b/docs/pages/api/classes/CircleShape.md new file mode 100644 index 00000000..1ea3339f --- /dev/null +++ b/docs/pages/api/classes/CircleShape.md @@ -0,0 +1,275 @@ +# Class: CircleShape + +Circle shape. + +## Extends + +- [`Shape`](Shape) + +## Constructors + +### new CircleShape() + +> **new CircleShape**(`position`, `radius`?): [`CircleShape`](CircleShape) + +#### Parameters + +• **position**: [`Vec2Value`](../interfaces/Vec2Value) + +• **radius?**: `number` + +#### Returns + +[`CircleShape`](CircleShape) + +#### Overrides + +[`Shape`](Shape).[`constructor`](Shape#constructors) + +### new CircleShape() + +> **new CircleShape**(`radius`?): [`CircleShape`](CircleShape) + +#### Parameters + +• **radius?**: `number` + +#### Returns + +[`CircleShape`](CircleShape) + +#### Overrides + +`Shape.constructor` + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Shape`](Shape).[`style`](Shape#style) + +*** + +### TYPE + +> `static` **TYPE**: `"circle"` + +## Methods + +### computeAABB() + +> **computeAABB**(`aabb`, `xf`, `childIndex`): `void` + +Given a transform, compute the associated axis aligned bounding box for a +child shape. + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +Returns the axis aligned box. + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The world transform of the shape. + +• **childIndex**: `number` + +The child shape + +#### Returns + +`void` + +#### Overrides + +[`Shape`](Shape).[`computeAABB`](Shape#computeaabb) + +*** + +### computeDistanceProxy() + +> **computeDistanceProxy**(`proxy`): `void` + +#### Parameters + +• **proxy**: [`DistanceProxy`](DistanceProxy) + +#### Returns + +`void` + +#### Overrides + +[`Shape`](Shape).[`computeDistanceProxy`](Shape#computedistanceproxy) + +*** + +### computeMass() + +> **computeMass**(`massData`, `density`): `void` + +Compute the mass properties of this shape using its dimensions and density. +The inertia tensor is computed about the local origin. + +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) + +Returns the mass data for this shape. + +• **density**: `number` + +The density in kilograms per meter squared. + +#### Returns + +`void` + +#### Overrides + +[`Shape`](Shape).[`computeMass`](Shape#computemass) + +*** + +### getCenter() + +> **getCenter**(): [`Vec2`](Vec2) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getChildCount() + +> **getChildCount**(): `1` + +Get the number of child primitives. + +#### Returns + +`1` + +#### Overrides + +[`Shape`](Shape).[`getChildCount`](Shape#getchildcount) + +*** + +### getRadius() + +> **getRadius**(): `number` + +#### Returns + +`number` + +#### Overrides + +[`Shape`](Shape).[`getRadius`](Shape#getradius) + +*** + +### getType() + +> **getType**(): `"circle"` + +Get the type of this shape. You can use this to down cast to the concrete +shape. + +#### Returns + +`"circle"` + +the shape type. + +#### Overrides + +[`Shape`](Shape).[`getType`](Shape#gettype) + +*** + +### rayCast() + +> **rayCast**(`output`, `input`, `xf`, `childIndex`): `boolean` + +Cast a ray against a child shape. + +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +The ray-cast results. + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input parameters. + +• **xf**: [`Transform`](Transform) + +The transform to be applied to the shape. + +• **childIndex**: `number` + +The child shape index + +#### Returns + +`boolean` + +#### Overrides + +[`Shape`](Shape).[`rayCast`](Shape#raycast) + +*** + +### testPoint() + +> **testPoint**(`xf`, `p`): `boolean` + +Test a point for containment in this shape. This only works for convex +shapes. + +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The shape world transform. + +• **p**: [`Vec2Value`](../interfaces/Vec2Value) + +A point in world coordinates. + +#### Returns + +`boolean` + +#### Overrides + +[`Shape`](Shape).[`testPoint`](Shape#testpoint) + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` + +#### Parameters + +• **obj**: `any` + +#### Returns + +`boolean` + +#### Inherited from + +[`Shape`](Shape).[`isValid`](Shape#isvalid) diff --git a/docs/pages/api/classes/ClipVertex.md b/docs/pages/api/classes/ClipVertex.md new file mode 100644 index 00000000..1e1ee3e5 --- /dev/null +++ b/docs/pages/api/classes/ClipVertex.md @@ -0,0 +1,49 @@ +# Class: ClipVertex + +Used for computing contact manifolds. + +## Constructors + +### new ClipVertex() + +> **new ClipVertex**(): [`ClipVertex`](ClipVertex) + +#### Returns + +[`ClipVertex`](ClipVertex) + +## Properties + +### id + +> **id**: [`ContactID`](ContactID) + +*** + +### v + +> **v**: [`Vec2Value`](../interfaces/Vec2Value) + +## Methods + +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` + +*** + +### set() + +> **set**(`o`): `void` + +#### Parameters + +• **o**: [`ClipVertex`](ClipVertex) + +#### Returns + +`void` diff --git a/docs/pages/api/classes/Contact.md b/docs/pages/api/classes/Contact.md new file mode 100644 index 00000000..d58c796b --- /dev/null +++ b/docs/pages/api/classes/Contact.md @@ -0,0 +1,415 @@ +# Class: Contact + +The class manages contact between two shapes. A contact exists for each +overlapping AABB in the broad-phase (except if filtered). Therefore a contact +object may exist that has no contact points. + +## Constructors + +### new Contact() + +> **new Contact**(): [`Contact`](Contact) + +#### Returns + +[`Contact`](Contact) + +## Methods + +### evaluate() + +> **evaluate**(`manifold`, `xfA`, `xfB`): `void` + +Called by Update method, and implemented by subclasses. + +#### Parameters + +• **manifold**: [`Manifold`](Manifold) + +• **xfA**: [`TransformValue`](../type-aliases/TransformValue) + +• **xfB**: [`TransformValue`](../type-aliases/TransformValue) + +#### Returns + +`void` + +*** + +### flagForFiltering() + +> **flagForFiltering**(): `void` + +Flag this contact for filtering. Filtering will occur the next time step. + +#### Returns + +`void` + +*** + +### getChildIndexA() + +> **getChildIndexA**(): `number` + +Get the child primitive index for fixture A. + +#### Returns + +`number` + +*** + +### getChildIndexB() + +> **getChildIndexB**(): `number` + +Get the child primitive index for fixture B. + +#### Returns + +`number` + +*** + +### getFixtureA() + +> **getFixtureA**(): [`Fixture`](Fixture) + +Get fixture A in this contact. + +#### Returns + +[`Fixture`](Fixture) + +*** + +### getFixtureB() + +> **getFixtureB**(): [`Fixture`](Fixture) + +Get fixture B in this contact. + +#### Returns + +[`Fixture`](Fixture) + +*** + +### getFriction() + +> **getFriction**(): `number` + +Get the friction. + +#### Returns + +`number` + +*** + +### getManifold() + +> **getManifold**(): [`Manifold`](Manifold) + +Get the contact manifold. Do not modify the manifold unless you understand +the internals of the library. + +#### Returns + +[`Manifold`](Manifold) + +*** + +### getNext() + +> **getNext**(): [`Contact`](Contact) + +Get the next contact in the world's contact list. + +#### Returns + +[`Contact`](Contact) + +*** + +### getRestitution() + +> **getRestitution**(): `number` + +Get the restitution. + +#### Returns + +`number` + +*** + +### getTangentSpeed() + +> **getTangentSpeed**(): `number` + +Get the desired tangent speed. In meters per second. + +#### Returns + +`number` + +*** + +### getWorldManifold() + +> **getWorldManifold**(`worldManifold`): [`WorldManifold`](WorldManifold) + +Get the world manifold. + +#### Parameters + +• **worldManifold**: [`WorldManifold`](WorldManifold) + +#### Returns + +[`WorldManifold`](WorldManifold) + +*** + +### initConstraint() + +> **initConstraint**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +*** + +### initVelocityConstraint() + +> **initVelocityConstraint**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +*** + +### isEnabled() + +> **isEnabled**(): `boolean` + +Has this contact been disabled? + +#### Returns + +`boolean` + +*** + +### isTouching() + +> **isTouching**(): `boolean` + +Is this contact touching? + +#### Returns + +`boolean` + +*** + +### resetFriction() + +> **resetFriction**(): `void` + +Reset the friction mixture to the default value. + +#### Returns + +`void` + +*** + +### resetRestitution() + +> **resetRestitution**(): `void` + +Reset the restitution to the default value. + +#### Returns + +`void` + +*** + +### setEnabled() + +> **setEnabled**(`flag`): `void` + +Enable/disable this contact. This can be used inside the pre-solve contact +listener. The contact is only disabled for the current time step (or sub-step +in continuous collisions). + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### setFriction() + +> **setFriction**(`friction`): `void` + +Override the default friction mixture. You can call this in +"pre-solve" callback. This value persists until set or reset. + +#### Parameters + +• **friction**: `number` + +#### Returns + +`void` + +*** + +### setRestitution() + +> **setRestitution**(`restitution`): `void` + +Override the default restitution mixture. You can call this in +"pre-solve" callback. The value persists until you set or reset. + +#### Parameters + +• **restitution**: `number` + +#### Returns + +`void` + +*** + +### setTangentSpeed() + +> **setTangentSpeed**(`speed`): `void` + +Set the desired tangent speed for a conveyor belt behavior. In meters per +second. + +#### Parameters + +• **speed**: `number` + +#### Returns + +`void` + +*** + +### solvePositionConstraint() + +> **solvePositionConstraint**(`step`): `number` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`number` + +*** + +### solvePositionConstraintTOI() + +> **solvePositionConstraintTOI**(`step`, `toiA`, `toiB`): `number` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +• **toiA**: [`Body`](Body) + +• **toiB**: [`Body`](Body) + +#### Returns + +`number` + +*** + +### solveVelocityConstraint() + +> **solveVelocityConstraint**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +*** + +### storeConstraintImpulses() + +> **storeConstraintImpulses**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +*** + +### update() + +> **update**(`listener`?): `void` + +Updates the contact manifold and touching status. + +Note: do not assume the fixture AABBs are overlapping or are valid. + +#### Parameters + +• **listener?** + +• **listener.beginContact?** + +• **listener.endContact?** + +• **listener.preSolve?** + +#### Returns + +`void` + +*** + +### warmStartConstraint() + +> **warmStartConstraint**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` diff --git a/docs/pages/api/classes/ContactEdge.md b/docs/pages/api/classes/ContactEdge.md new file mode 100644 index 00000000..3dec1f56 --- /dev/null +++ b/docs/pages/api/classes/ContactEdge.md @@ -0,0 +1,44 @@ +# Class: ContactEdge + +A contact edge is used to connect bodies and contacts together in a contact +graph where each body is a node and each contact is an edge. A contact edge +belongs to a doubly linked list maintained in each attached body. Each +contact has two contact nodes, one for each attached body. + +## Constructors + +### new ContactEdge() + +> **new ContactEdge**(`contact`): [`ContactEdge`](ContactEdge) + +#### Parameters + +• **contact**: [`Contact`](Contact) + +#### Returns + +[`ContactEdge`](ContactEdge) + +## Properties + +### contact + +> **contact**: [`Contact`](Contact) + +*** + +### next + +> **next**: [`ContactEdge`](ContactEdge) = `null` + +*** + +### other + +> **other**: [`Body`](Body) = `null` + +*** + +### prev + +> **prev**: [`ContactEdge`](ContactEdge) = `null` diff --git a/docs/pages/api/classes/ContactID.md b/docs/pages/api/classes/ContactID.md new file mode 100644 index 00000000..175a5174 --- /dev/null +++ b/docs/pages/api/classes/ContactID.md @@ -0,0 +1,109 @@ +# Class: ContactID + +Contact ids to facilitate warm starting. + +ContactFeature: The features that intersect to form the contact point. + +## Constructors + +### new ContactID() + +> **new ContactID**(): [`ContactID`](ContactID) + +#### Returns + +[`ContactID`](ContactID) + +## Properties + +### indexA + +> **indexA**: `number` = `-1` + +ContactFeature index on shapeA + +*** + +### indexB + +> **indexB**: `number` = `-1` + +ContactFeature index on shapeB + +*** + +### key + +> **key**: `number` = `-1` + +Used to quickly compare contact ids. + +*** + +### typeA + +> **typeA**: [`ContactFeatureType`](../enumerations/ContactFeatureType) = `ContactFeatureType.e_unset` + +ContactFeature type on shapeA + +*** + +### typeB + +> **typeB**: [`ContactFeatureType`](../enumerations/ContactFeatureType) = `ContactFeatureType.e_unset` + +ContactFeature type on shapeB + +## Methods + +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` + +*** + +### set() + +> **set**(`that`): `void` + +#### Parameters + +• **that**: [`ContactID`](ContactID) + +#### Returns + +`void` + +*** + +### setFeatures() + +> **setFeatures**(`indexA`, `typeA`, `indexB`, `typeB`): `void` + +#### Parameters + +• **indexA**: `number` + +• **typeA**: [`ContactFeatureType`](../enumerations/ContactFeatureType) + +• **indexB**: `number` + +• **typeB**: [`ContactFeatureType`](../enumerations/ContactFeatureType) + +#### Returns + +`void` + +*** + +### swapFeatures() + +> **swapFeatures**(): `void` + +#### Returns + +`void` diff --git a/docs/pages/api/classes/ContactImpulse.md b/docs/pages/api/classes/ContactImpulse.md new file mode 100644 index 00000000..958b8442 --- /dev/null +++ b/docs/pages/api/classes/ContactImpulse.md @@ -0,0 +1,53 @@ +# Class: ContactImpulse + +Contact impulses for reporting. Impulses are used instead of forces because +sub-step forces may approach infinity for rigid body collisions. These match +up one-to-one with the contact points in Manifold. + +## Constructors + +### new ContactImpulse() + +> **new ContactImpulse**(`contact`): [`ContactImpulse`](ContactImpulse) + +#### Parameters + +• **contact**: [`Contact`](Contact) + +#### Returns + +[`ContactImpulse`](ContactImpulse) + +## Accessors + +### normalImpulses + +#### Get Signature + +> **get** **normalImpulses**(): `number`[] + +##### Returns + +`number`[] + +*** + +### tangentImpulses + +#### Get Signature + +> **get** **tangentImpulses**(): `number`[] + +##### Returns + +`number`[] + +## Methods + +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` diff --git a/docs/pages/api/classes/DistanceInput.md b/docs/pages/api/classes/DistanceInput.md new file mode 100644 index 00000000..5494f2b7 --- /dev/null +++ b/docs/pages/api/classes/DistanceInput.md @@ -0,0 +1,54 @@ +# Class: DistanceInput + +Input for Distance. You have to option to use the shape radii in the +computation. Even + +## Constructors + +### new DistanceInput() + +> **new DistanceInput**(): [`DistanceInput`](DistanceInput) + +#### Returns + +[`DistanceInput`](DistanceInput) + +## Properties + +### proxyA + +> `readonly` **proxyA**: [`DistanceProxy`](DistanceProxy) + +*** + +### proxyB + +> `readonly` **proxyB**: [`DistanceProxy`](DistanceProxy) + +*** + +### transformA + +> `readonly` **transformA**: [`Transform`](Transform) + +*** + +### transformB + +> `readonly` **transformB**: [`Transform`](Transform) + +*** + +### useRadii + +> **useRadii**: `boolean` = `false` + +## Methods + +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` diff --git a/docs/pages/api/classes/DistanceJoint.md b/docs/pages/api/classes/DistanceJoint.md new file mode 100644 index 00000000..15372dda --- /dev/null +++ b/docs/pages/api/classes/DistanceJoint.md @@ -0,0 +1,453 @@ +# Class: DistanceJoint + +A distance joint constrains two points on two bodies to remain at a fixed +distance from each other. You can view this as a massless, rigid rod. + +## Extends + +- [`Joint`](Joint) + +## Constructors + +### new DistanceJoint() + +> **new DistanceJoint**(`def`): [`DistanceJoint`](DistanceJoint) + +#### Parameters + +• **def**: [`DistanceJointDef`](../interfaces/DistanceJointDef) + +DistanceJoint definition. + +#### Returns + +[`DistanceJoint`](DistanceJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +### new DistanceJoint() + +> **new DistanceJoint**(`def`, `bodyA`, `bodyB`, `anchorA`, `anchorB`): [`DistanceJoint`](DistanceJoint) + +#### Parameters + +• **def**: [`DistanceJointOpt`](../interfaces/DistanceJointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) + +• **anchorA**: [`Vec2Value`](../interfaces/Vec2Value) + +Anchor A in global coordination. + +• **anchorB**: [`Vec2Value`](../interfaces/Vec2Value) + +Anchor B in global coordination. + +#### Returns + +[`DistanceJoint`](DistanceJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Joint`](Joint).[`style`](Joint#style) + +*** + +### TYPE + +> `static` **TYPE**: `"distance-joint"` + +## Methods + +### getAnchorA() + +> **getAnchorA**(): [`Vec2`](Vec2) + +Get the anchor point on bodyA in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) + +*** + +### getAnchorB() + +> **getAnchorB**(): [`Vec2`](Vec2) + +Get the anchor point on bodyB in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) + +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) + +Get the first body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) + +*** + +### getBodyB() + +> **getBodyB**(): [`Body`](Body) + +Get the second body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) + +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` + +Get collide connected. Note: modifying the collide connect flag won't work +correctly because the flag is only checked when fixture AABBs begin to +overlap. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) + +*** + +### getDampingRatio() + +> **getDampingRatio**(): `number` + +#### Returns + +`number` + +*** + +### getFrequency() + +> **getFrequency**(): `number` + +#### Returns + +`number` + +*** + +### getLength() + +> **getLength**(): `number` + +Get the natural length. + +#### Returns + +`number` + +*** + +### getLocalAnchorA() + +> **getLocalAnchorA**(): [`Vec2`](Vec2) + +The local anchor point relative to bodyA's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLocalAnchorB() + +> **getLocalAnchorB**(): [`Vec2`](Vec2) + +The local anchor point relative to bodyB's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getNext() + +> **getNext**(): [`Joint`](Joint) + +Get the next joint the world joint list. + +#### Returns + +[`Joint`](Joint) + +#### Inherited from + +[`Joint`](Joint).[`getNext`](Joint#getnext) + +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) + +Get the reaction force on bodyB at the joint anchor in Newtons. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) + +*** + +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` + +Get the reaction torque on bodyB in N*m. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +#### Overrides + +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) + +*** + +### getType() + +> **getType**(): `string` + +Get the type of the concrete joint. + +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) + +*** + +### getUserData() + +> **getUserData**(): `unknown` + +#### Returns + +`unknown` + +#### Inherited from + +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) + +*** + +### initVelocityConstraints() + +> **initVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` + +Short-cut function to determine if either body is inactive. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`isActive`](Joint#isactive) + +*** + +### setDampingRatio() + +> **setDampingRatio**(`ratio`): `void` + +#### Parameters + +• **ratio**: `number` + +#### Returns + +`void` + +*** + +### setFrequency() + +> **setFrequency**(`hz`): `void` + +#### Parameters + +• **hz**: `number` + +#### Returns + +`void` + +*** + +### setLength() + +> **setLength**(`length`): `void` + +Set the natural length. Manipulating the length can lead to non-physical +behavior when the frequency is zero. + +#### Parameters + +• **length**: `number` + +#### Returns + +`void` + +*** + +### setUserData() + +> **setUserData**(`data`): `void` + +#### Parameters + +• **data**: `unknown` + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the origin for any points stored in world coordinates. + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) + +*** + +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` + +This returns true if the position errors are within tolerance. + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) + +*** + +### solveVelocityConstraints() + +> **solveVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/DistanceOutput.md b/docs/pages/api/classes/DistanceOutput.md new file mode 100644 index 00000000..06646a7e --- /dev/null +++ b/docs/pages/api/classes/DistanceOutput.md @@ -0,0 +1,53 @@ +# Class: DistanceOutput + +Output for Distance. + +## Constructors + +### new DistanceOutput() + +> **new DistanceOutput**(): [`DistanceOutput`](DistanceOutput) + +#### Returns + +[`DistanceOutput`](DistanceOutput) + +## Properties + +### distance + +> **distance**: `number` = `0` + +*** + +### iterations + +> **iterations**: `number` = `0` + +iterations number of GJK iterations used + +*** + +### pointA + +> **pointA**: [`Vec2Value`](../interfaces/Vec2Value) + +closest point on shapeA + +*** + +### pointB + +> **pointB**: [`Vec2Value`](../interfaces/Vec2Value) + +closest point on shapeB + +## Methods + +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` diff --git a/docs/pages/api/classes/DistanceProxy.md b/docs/pages/api/classes/DistanceProxy.md new file mode 100644 index 00000000..4fab6ed9 --- /dev/null +++ b/docs/pages/api/classes/DistanceProxy.md @@ -0,0 +1,123 @@ +# Class: DistanceProxy + +A distance proxy is used by the GJK algorithm. It encapsulates any shape. + +## Constructors + +### new DistanceProxy() + +> **new DistanceProxy**(): [`DistanceProxy`](DistanceProxy) + +#### Returns + +[`DistanceProxy`](DistanceProxy) + +## Methods + +### getSupport() + +> **getSupport**(`d`): `number` + +Get the supporting vertex index in the given direction. + +#### Parameters + +• **d**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`number` + +*** + +### getSupportVertex() + +> **getSupportVertex**(`d`): [`Vec2Value`](../interfaces/Vec2Value) + +Get the supporting vertex in the given direction. + +#### Parameters + +• **d**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2Value`](../interfaces/Vec2Value) + +*** + +### getVertex() + +> **getVertex**(`index`): [`Vec2Value`](../interfaces/Vec2Value) + +Get a vertex by index. Used by Distance. + +#### Parameters + +• **index**: `number` + +#### Returns + +[`Vec2Value`](../interfaces/Vec2Value) + +*** + +### getVertexCount() + +> **getVertexCount**(): `number` + +Get the vertex count. + +#### Returns + +`number` + +*** + +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` + +*** + +### set() + +> **set**(`shape`, `index`): `void` + +Initialize the proxy using the given shape. The shape must remain in scope +while the proxy is in use. + +#### Parameters + +• **shape**: [`Shape`](Shape) + +• **index**: `number` + +#### Returns + +`void` + +*** + +### setVertices() + +> **setVertices**(`vertices`, `count`, `radius`): `void` + +Initialize the proxy using a vertex cloud and radius. The vertices +must remain in scope while the proxy is in use. + +#### Parameters + +• **vertices**: [`Vec2Value`](../interfaces/Vec2Value)[] + +• **count**: `number` + +• **radius**: `number` + +#### Returns + +`void` diff --git a/docs/pages/api/classes/DynamicTree.md b/docs/pages/api/classes/DynamicTree.md new file mode 100644 index 00000000..6fd74c07 --- /dev/null +++ b/docs/pages/api/classes/DynamicTree.md @@ -0,0 +1,385 @@ +# Class: DynamicTree\ + +A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A +dynamic tree arranges data in a binary tree to accelerate queries such as +volume queries and ray casts. Leafs are proxies with an AABB. In the tree we +expand the proxy AABB by `aabbExtension` so that the proxy AABB is bigger +than the client object. This allows the client object to move by small +amounts without triggering a tree update. + +Nodes are pooled and relocatable, so we use node indices rather than +pointers. + +## Type Parameters + +• **T** + +## Constructors + +### new DynamicTree() + +> **new DynamicTree**\<`T`\>(): [`DynamicTree`](DynamicTree)\<`T`\> + +#### Returns + +[`DynamicTree`](DynamicTree)\<`T`\> + +## Properties + +### m\_lastProxyId + +> **m\_lastProxyId**: `number` + +*** + +### m\_nodes + +> **m\_nodes**: `object` + +#### Index Signature + + \[`id`: `number`\]: [`TreeNode`](TreeNode)\<`T`\> + +*** + +### m\_root + +> **m\_root**: [`TreeNode`](TreeNode)\<`T`\> + +## Methods + +### allocateNode() + +> **allocateNode**(): [`TreeNode`](TreeNode)\<`T`\> + +#### Returns + +[`TreeNode`](TreeNode)\<`T`\> + +*** + +### balance() + +> **balance**(`iA`): [`TreeNode`](TreeNode)\<`T`\> + +Perform a left or right rotation if node A is imbalanced. Returns the new +root index. + +#### Parameters + +• **iA**: [`TreeNode`](TreeNode)\<`T`\> + +#### Returns + +[`TreeNode`](TreeNode)\<`T`\> + +*** + +### computeHeight() + +> **computeHeight**(`id`?): `number` + +Compute the height of a sub-tree. + +#### Parameters + +• **id?**: `number` + +#### Returns + +`number` + +*** + +### createProxy() + +> **createProxy**(`aabb`, `userData`): `number` + +Create a proxy in the tree as a leaf node. We return the index of the node +instead of a pointer so that we can grow the node pool. + +Create a proxy. Provide a tight fitting AABB and a userData pointer. + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +• **userData**: `T` + +#### Returns + +`number` + +*** + +### destroyProxy() + +> **destroyProxy**(`id`): `void` + +Destroy a proxy. This asserts if the id is invalid. + +#### Parameters + +• **id**: `number` + +#### Returns + +`void` + +*** + +### freeNode() + +> **freeNode**(`node`): `void` + +#### Parameters + +• **node**: [`TreeNode`](TreeNode)\<`T`\> + +#### Returns + +`void` + +*** + +### getAreaRatio() + +> **getAreaRatio**(): `number` + +Get the ratio of the sum of the node areas to the root area. + +#### Returns + +`number` + +*** + +### getFatAABB() + +> **getFatAABB**(`id`): [`AABB`](AABB) + +Get the fat AABB for a node id. + +#### Parameters + +• **id**: `number` + +#### Returns + +[`AABB`](AABB) + +the proxy user data or 0 if the id is invalid. + +*** + +### getHeight() + +> **getHeight**(): `number` + +Compute the height of the binary tree in O(N) time. Should not be called +often. + +#### Returns + +`number` + +*** + +### getMaxBalance() + +> **getMaxBalance**(): `number` + +Get the maximum balance of an node in the tree. The balance is the difference +in height of the two children of a node. + +#### Returns + +`number` + +*** + +### getUserData() + +> **getUserData**(`id`): `T` + +Get proxy user data. + +#### Parameters + +• **id**: `number` + +#### Returns + +`T` + +the proxy user data or 0 if the id is invalid. + +*** + +### insertLeaf() + +> **insertLeaf**(`leaf`): `void` + +#### Parameters + +• **leaf**: [`TreeNode`](TreeNode)\<`T`\> + +#### Returns + +`void` + +*** + +### moveProxy() + +> **moveProxy**(`id`, `aabb`, `d`): `boolean` + +Move a proxy with a swepted AABB. If the proxy has moved outside of its +fattened AABB, then the proxy is removed from the tree and re-inserted. +Otherwise the function returns immediately. + +#### Parameters + +• **id**: `number` + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +• **d**: [`Vec2Value`](../interfaces/Vec2Value) + +Displacement + +#### Returns + +`boolean` + +true if the proxy was re-inserted. + +*** + +### query() + +> **query**(`aabb`, `queryCallback`): `void` + +Query an AABB for overlapping proxies. The callback class is called for each +proxy that overlaps the supplied AABB. + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +• **queryCallback**: [`DynamicTreeQueryCallback`](../type-aliases/DynamicTreeQueryCallback) + +#### Returns + +`void` + +*** + +### rayCast() + +> **rayCast**(`input`, `rayCastCallback`): `void` + +Ray-cast against the proxies in the tree. This relies on the callback to +perform a exact ray-cast in the case were the proxy contains a shape. The +callback also performs the any collision filtering. This has performance +roughly equal to k * log(n), where k is the number of collisions and n is the +number of proxies in the tree. + +#### Parameters + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. + +• **rayCastCallback**: [`RayCastCallback`](../type-aliases/RayCastCallback) + +A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. + +#### Returns + +`void` + +*** + +### rebuildBottomUp() + +> **rebuildBottomUp**(): `void` + +Build an optimal tree. Very expensive. For testing. + +#### Returns + +`void` + +*** + +### removeLeaf() + +> **removeLeaf**(`leaf`): `void` + +#### Parameters + +• **leaf**: [`TreeNode`](TreeNode)\<`T`\> + +#### Returns + +`void` + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the world origin. Useful for large worlds. The shift formula is: +position -= newOrigin + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +The new origin with respect to the old origin + +#### Returns + +`void` + +*** + +### validate() + +> **validate**(): `void` + +Validate this tree. For testing. + +#### Returns + +`void` + +*** + +### validateMetrics() + +> **validateMetrics**(`node`): `void` + +#### Parameters + +• **node**: [`TreeNode`](TreeNode)\<`T`\> + +#### Returns + +`void` + +*** + +### validateStructure() + +> **validateStructure**(`node`): `void` + +#### Parameters + +• **node**: [`TreeNode`](TreeNode)\<`T`\> + +#### Returns + +`void` diff --git a/docs/pages/api/classes/EdgeShape.md b/docs/pages/api/classes/EdgeShape.md new file mode 100644 index 00000000..0068d896 --- /dev/null +++ b/docs/pages/api/classes/EdgeShape.md @@ -0,0 +1,325 @@ +# Class: EdgeShape + +A line segment (edge) shape. These can be connected in chains or loops to +other edge shapes. The connectivity information is used to ensure correct +contact normals. + +## Extends + +- [`Shape`](Shape) + +## Constructors + +### new EdgeShape() + +> **new EdgeShape**(`v1`?, `v2`?): [`EdgeShape`](EdgeShape) + +#### Parameters + +• **v1?**: [`Vec2Value`](../interfaces/Vec2Value) + +• **v2?**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`EdgeShape`](EdgeShape) + +#### Overrides + +[`Shape`](Shape).[`constructor`](Shape#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Shape`](Shape).[`style`](Shape#style) + +*** + +### TYPE + +> `static` **TYPE**: `"edge"` + +## Methods + +### \_set() + +> **\_set**(`v1`, `v2`): [`EdgeShape`](EdgeShape) + +Set this as an isolated edge. + +#### Parameters + +• **v1**: [`Vec2Value`](../interfaces/Vec2Value) + +• **v2**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`EdgeShape`](EdgeShape) + +*** + +### computeAABB() + +> **computeAABB**(`aabb`, `xf`, `childIndex`): `void` + +Given a transform, compute the associated axis aligned bounding box for a +child shape. + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +Returns the axis aligned box. + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The world transform of the shape. + +• **childIndex**: `number` + +The child shape + +#### Returns + +`void` + +#### Overrides + +[`Shape`](Shape).[`computeAABB`](Shape#computeaabb) + +*** + +### computeDistanceProxy() + +> **computeDistanceProxy**(`proxy`): `void` + +#### Parameters + +• **proxy**: [`DistanceProxy`](DistanceProxy) + +#### Returns + +`void` + +#### Overrides + +[`Shape`](Shape).[`computeDistanceProxy`](Shape#computedistanceproxy) + +*** + +### computeMass() + +> **computeMass**(`massData`, `density`?): `void` + +Compute the mass properties of this shape using its dimensions and density. +The inertia tensor is computed about the local origin. + +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) + +Returns the mass data for this shape. + +• **density?**: `number` + +The density in kilograms per meter squared. + +#### Returns + +`void` + +#### Overrides + +[`Shape`](Shape).[`computeMass`](Shape#computemass) + +*** + +### getChildCount() + +> **getChildCount**(): `1` + +Get the number of child primitives. + +#### Returns + +`1` + +#### Overrides + +[`Shape`](Shape).[`getChildCount`](Shape#getchildcount) + +*** + +### getNextVertex() + +> **getNextVertex**(): [`Vec2`](Vec2) + +Optional next vertex, used for smooth collision. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getPrevVertex() + +> **getPrevVertex**(): [`Vec2`](Vec2) + +Optional prev vertex, used for smooth collision. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getRadius() + +> **getRadius**(): `number` + +#### Returns + +`number` + +#### Overrides + +[`Shape`](Shape).[`getRadius`](Shape#getradius) + +*** + +### getType() + +> **getType**(): `"edge"` + +Get the type of this shape. You can use this to down cast to the concrete +shape. + +#### Returns + +`"edge"` + +the shape type. + +#### Overrides + +[`Shape`](Shape).[`getType`](Shape#gettype) + +*** + +### rayCast() + +> **rayCast**(`output`, `input`, `xf`, `childIndex`): `boolean` + +Cast a ray against a child shape. + +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +The ray-cast results. + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input parameters. + +• **xf**: [`Transform`](Transform) + +The transform to be applied to the shape. + +• **childIndex**: `number` + +The child shape index + +#### Returns + +`boolean` + +#### Overrides + +[`Shape`](Shape).[`rayCast`](Shape#raycast) + +*** + +### setNextVertex() + +> **setNextVertex**(`v`?): [`EdgeShape`](EdgeShape) + +Optional next vertex, used for smooth collision. + +#### Parameters + +• **v?**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`EdgeShape`](EdgeShape) + +*** + +### setPrevVertex() + +> **setPrevVertex**(`v`?): [`EdgeShape`](EdgeShape) + +Optional prev vertex, used for smooth collision. + +#### Parameters + +• **v?**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`EdgeShape`](EdgeShape) + +*** + +### testPoint() + +> **testPoint**(`xf`, `p`): `false` + +Test a point for containment in this shape. This only works for convex +shapes. + +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The shape world transform. + +• **p**: [`Vec2Value`](../interfaces/Vec2Value) + +A point in world coordinates. + +#### Returns + +`false` + +#### Overrides + +[`Shape`](Shape).[`testPoint`](Shape#testpoint) + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` + +#### Parameters + +• **obj**: `any` + +#### Returns + +`boolean` + +#### Inherited from + +[`Shape`](Shape).[`isValid`](Shape#isvalid) diff --git a/docs/pages/api/classes/Fixture.md b/docs/pages/api/classes/Fixture.md new file mode 100644 index 00000000..61c1ba4d --- /dev/null +++ b/docs/pages/api/classes/Fixture.md @@ -0,0 +1,468 @@ +# Class: Fixture + +A fixture is used to attach a shape to a body for collision detection. A +fixture inherits its transform from its parent. Fixtures hold additional +non-geometric data such as friction, collision filters, etc. + +To create a new Fixture use [Body.createFixture](Body#createfixture). + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +## Methods + +### createProxies() + +> **createProxies**(`broadPhase`, `xf`): `void` + +These support body activation/deactivation. + +#### Parameters + +• **broadPhase**: [`BroadPhase`](BroadPhase) + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +#### Returns + +`void` + +*** + +### destroyProxies() + +> **destroyProxies**(`broadPhase`): `void` + +#### Parameters + +• **broadPhase**: [`BroadPhase`](BroadPhase) + +#### Returns + +`void` + +*** + +### getAABB() + +> **getAABB**(`childIndex`): [`AABB`](AABB) + +Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a +more accurate AABB, compute it using the shape and the body transform. + +#### Parameters + +• **childIndex**: `number` + +#### Returns + +[`AABB`](AABB) + +*** + +### getBody() + +> **getBody**(): [`Body`](Body) + +Get the parent body of this fixture. This is null if the fixture is not +attached. + +#### Returns + +[`Body`](Body) + +*** + +### getDensity() + +> **getDensity**(): `number` + +Get the density of this fixture. + +#### Returns + +`number` + +*** + +### getFilterCategoryBits() + +> **getFilterCategoryBits**(): `number` + +#### Returns + +`number` + +*** + +### getFilterGroupIndex() + +> **getFilterGroupIndex**(): `number` + +#### Returns + +`number` + +*** + +### getFilterMaskBits() + +> **getFilterMaskBits**(): `number` + +#### Returns + +`number` + +*** + +### getFriction() + +> **getFriction**(): `number` + +Get the coefficient of friction, usually in the range [0,1]. + +#### Returns + +`number` + +*** + +### getMassData() + +> **getMassData**(`massData`): `void` + +Get the mass data for this fixture. The mass data is based on the density and +the shape. The rotational inertia is about the shape's origin. This operation +may be expensive. + +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) + +#### Returns + +`void` + +*** + +### getNext() + +> **getNext**(): [`Fixture`](Fixture) + +Get the next fixture in the parent body's fixture list. + +#### Returns + +[`Fixture`](Fixture) + +*** + +### getRestitution() + +> **getRestitution**(): `number` + +Get the coefficient of restitution. + +#### Returns + +`number` + +*** + +### getShape() + +> **getShape**(): [`Shape`](Shape) + +Get the child shape. You can modify the child shape, however you should not +change the number of vertices because this will crash some collision caching +mechanisms. Manipulating the shape may lead to non-physical behavior. + +#### Returns + +[`Shape`](Shape) + +*** + +### getType() + +> **getType**(): [`ShapeType`](../type-aliases/ShapeType) + +Get the type of the child shape. You can use this to down cast to the +concrete shape. + +#### Returns + +[`ShapeType`](../type-aliases/ShapeType) + +*** + +### getUserData() + +> **getUserData**(): `unknown` + +Get the user data that was assigned in the fixture definition. Use this to +store your application specific data. + +#### Returns + +`unknown` + +*** + +### isSensor() + +> **isSensor**(): `boolean` + +A sensor shape collects contact information but never generates a collision +response. + +#### Returns + +`boolean` + +*** + +### rayCast() + +> **rayCast**(`output`, `input`, `childIndex`): `boolean` + +Cast a ray against this shape. + +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +• **childIndex**: `number` + +#### Returns + +`boolean` + +*** + +### refilter() + +> **refilter**(): `void` + +Call this if you want to establish collision that was previously disabled by +ContactFilter. + +#### Returns + +`void` + +*** + +### setDensity() + +> **setDensity**(`density`): `void` + +Set the density of this fixture. This will _not_ automatically adjust the +mass of the body. You must call Body.resetMassData to update the body's mass. + +#### Parameters + +• **density**: `number` + +#### Returns + +`void` + +*** + +### setFilterCategoryBits() + +> **setFilterCategoryBits**(`categoryBits`): `void` + +#### Parameters + +• **categoryBits**: `number` + +#### Returns + +`void` + +*** + +### setFilterData() + +> **setFilterData**(`filter`): `void` + +Set the contact filtering data. This will not update contacts until the next +time step when either parent body is active and awake. This automatically +calls refilter. + +#### Parameters + +• **filter** + +• **filter.categoryBits**: `number` + +• **filter.groupIndex**: `number` + +• **filter.maskBits**: `number` + +#### Returns + +`void` + +*** + +### setFilterGroupIndex() + +> **setFilterGroupIndex**(`groupIndex`): `void` + +#### Parameters + +• **groupIndex**: `number` + +#### Returns + +`void` + +*** + +### setFilterMaskBits() + +> **setFilterMaskBits**(`maskBits`): `void` + +#### Parameters + +• **maskBits**: `number` + +#### Returns + +`void` + +*** + +### setFriction() + +> **setFriction**(`friction`): `void` + +Set the coefficient of friction. This will not change the friction of +existing contacts. + +#### Parameters + +• **friction**: `number` + +#### Returns + +`void` + +*** + +### setRestitution() + +> **setRestitution**(`restitution`): `void` + +Set the coefficient of restitution. This will not change the restitution of +existing contacts. + +#### Parameters + +• **restitution**: `number` + +#### Returns + +`void` + +*** + +### setSensor() + +> **setSensor**(`sensor`): `void` + +Set if this fixture is a sensor. + +#### Parameters + +• **sensor**: `boolean` + +#### Returns + +`void` + +*** + +### setUserData() + +> **setUserData**(`data`): `void` + +Set the user data. Use this to store your application specific data. + +#### Parameters + +• **data**: `unknown` + +#### Returns + +`void` + +*** + +### shouldCollide() + +> **shouldCollide**(`that`): `boolean` + +Implement this method to provide collision filtering, if you want finer +control over contact creation. + +Return true if contact calculations should be performed between these two +fixtures. + +Warning: for performance reasons this is only called when the AABBs begin to +overlap. + +#### Parameters + +• **that**: [`Fixture`](Fixture) + +#### Returns + +`boolean` + +*** + +### synchronize() + +> **synchronize**(`broadPhase`, `xf1`, `xf2`): `void` + +Updates this fixture proxy in broad-phase (with combined AABB of current and +next transformation). + +#### Parameters + +• **broadPhase**: [`BroadPhase`](BroadPhase) + +• **xf1**: [`TransformValue`](../type-aliases/TransformValue) + +• **xf2**: [`TransformValue`](../type-aliases/TransformValue) + +#### Returns + +`void` + +*** + +### testPoint() + +> **testPoint**(`p`): `boolean` + +Test a point in world coordinates for containment in this fixture. + +#### Parameters + +• **p**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`boolean` diff --git a/docs/pages/api/classes/FixtureProxy.md b/docs/pages/api/classes/FixtureProxy.md new file mode 100644 index 00000000..6ef8d4a2 --- /dev/null +++ b/docs/pages/api/classes/FixtureProxy.md @@ -0,0 +1,43 @@ +# Class: FixtureProxy + +This proxy is used internally to connect shape children to the broad-phase. + +## Constructors + +### new FixtureProxy() + +> **new FixtureProxy**(`fixture`, `childIndex`): [`FixtureProxy`](FixtureProxy) + +#### Parameters + +• **fixture**: [`Fixture`](Fixture) + +• **childIndex**: `number` + +#### Returns + +[`FixtureProxy`](FixtureProxy) + +## Properties + +### aabb + +> **aabb**: [`AABB`](AABB) + +*** + +### childIndex + +> **childIndex**: `number` + +*** + +### fixture + +> **fixture**: [`Fixture`](Fixture) + +*** + +### proxyId + +> **proxyId**: `number` diff --git a/docs/pages/api/classes/FrictionJoint.md b/docs/pages/api/classes/FrictionJoint.md new file mode 100644 index 00000000..346c5058 --- /dev/null +++ b/docs/pages/api/classes/FrictionJoint.md @@ -0,0 +1,426 @@ +# Class: FrictionJoint + +Friction joint. This is used for top-down friction. It provides 2D +translational friction and angular friction. + +## Extends + +- [`Joint`](Joint) + +## Constructors + +### new FrictionJoint() + +> **new FrictionJoint**(`def`): [`FrictionJoint`](FrictionJoint) + +#### Parameters + +• **def**: [`FrictionJointDef`](../interfaces/FrictionJointDef) + +#### Returns + +[`FrictionJoint`](FrictionJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +### new FrictionJoint() + +> **new FrictionJoint**(`def`, `bodyA`, `bodyB`, `anchor`): [`FrictionJoint`](FrictionJoint) + +#### Parameters + +• **def**: [`FrictionJointOpt`](../interfaces/FrictionJointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) + +• **anchor**: [`Vec2Value`](../interfaces/Vec2Value) + +Anchor in global coordination. + +#### Returns + +[`FrictionJoint`](FrictionJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Joint`](Joint).[`style`](Joint#style) + +*** + +### TYPE + +> `static` **TYPE**: `"friction-joint"` + +## Methods + +### getAnchorA() + +> **getAnchorA**(): [`Vec2`](Vec2) + +Get the anchor point on bodyA in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) + +*** + +### getAnchorB() + +> **getAnchorB**(): [`Vec2`](Vec2) + +Get the anchor point on bodyB in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) + +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) + +Get the first body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) + +*** + +### getBodyB() + +> **getBodyB**(): [`Body`](Body) + +Get the second body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) + +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` + +Get collide connected. Note: modifying the collide connect flag won't work +correctly because the flag is only checked when fixture AABBs begin to +overlap. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) + +*** + +### getLocalAnchorA() + +> **getLocalAnchorA**(): [`Vec2`](Vec2) + +The local anchor point relative to bodyA's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLocalAnchorB() + +> **getLocalAnchorB**(): [`Vec2`](Vec2) + +The local anchor point relative to bodyB's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getMaxForce() + +> **getMaxForce**(): `number` + +Get the maximum friction force in N. + +#### Returns + +`number` + +*** + +### getMaxTorque() + +> **getMaxTorque**(): `number` + +Get the maximum friction torque in N*m. + +#### Returns + +`number` + +*** + +### getNext() + +> **getNext**(): [`Joint`](Joint) + +Get the next joint the world joint list. + +#### Returns + +[`Joint`](Joint) + +#### Inherited from + +[`Joint`](Joint).[`getNext`](Joint#getnext) + +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) + +Get the reaction force on bodyB at the joint anchor in Newtons. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) + +*** + +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` + +Get the reaction torque on bodyB in N*m. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +#### Overrides + +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) + +*** + +### getType() + +> **getType**(): `string` + +Get the type of the concrete joint. + +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) + +*** + +### getUserData() + +> **getUserData**(): `unknown` + +#### Returns + +`unknown` + +#### Inherited from + +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) + +*** + +### initVelocityConstraints() + +> **initVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` + +Short-cut function to determine if either body is inactive. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`isActive`](Joint#isactive) + +*** + +### setMaxForce() + +> **setMaxForce**(`force`): `void` + +Set the maximum friction force in N. + +#### Parameters + +• **force**: `number` + +#### Returns + +`void` + +*** + +### setMaxTorque() + +> **setMaxTorque**(`torque`): `void` + +Set the maximum friction torque in N*m. + +#### Parameters + +• **torque**: `number` + +#### Returns + +`void` + +*** + +### setUserData() + +> **setUserData**(`data`): `void` + +#### Parameters + +• **data**: `unknown` + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the origin for any points stored in world coordinates. + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) + +*** + +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` + +This returns true if the position errors are within tolerance. + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) + +*** + +### solveVelocityConstraints() + +> **solveVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/GearJoint.md b/docs/pages/api/classes/GearJoint.md new file mode 100644 index 00000000..928fae55 --- /dev/null +++ b/docs/pages/api/classes/GearJoint.md @@ -0,0 +1,409 @@ +# Class: GearJoint + +A gear joint is used to connect two joints together. Either joint can be a +revolute or prismatic joint. You specify a gear ratio to bind the motions +together: coordinate1 + ratio * coordinate2 = constant + +The ratio can be negative or positive. If one joint is a revolute joint and +the other joint is a prismatic joint, then the ratio will have units of +length or units of 1/length. Warning: You have to manually destroy the gear +joint if joint1 or joint2 is destroyed. + +This definition requires two existing revolute or prismatic joints (any +combination will work). + +## Extends + +- [`Joint`](Joint) + +## Constructors + +### new GearJoint() + +> **new GearJoint**(`def`): [`GearJoint`](GearJoint) + +#### Parameters + +• **def**: [`GearJointDef`](../interfaces/GearJointDef) + +#### Returns + +[`GearJoint`](GearJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +### new GearJoint() + +> **new GearJoint**(`def`, `bodyA`, `bodyB`, `joint1`, `joint2`, `ratio`?): [`GearJoint`](GearJoint) + +#### Parameters + +• **def**: [`GearJointOpt`](../interfaces/GearJointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) + +• **joint1**: [`RevoluteJoint`](RevoluteJoint) \| [`PrismaticJoint`](PrismaticJoint) + +• **joint2**: [`RevoluteJoint`](RevoluteJoint) \| [`PrismaticJoint`](PrismaticJoint) + +• **ratio?**: `number` + +#### Returns + +[`GearJoint`](GearJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Joint`](Joint).[`style`](Joint#style) + +*** + +### TYPE + +> `static` **TYPE**: `"gear-joint"` + +## Methods + +### getAnchorA() + +> **getAnchorA**(): [`Vec2`](Vec2) + +Get the anchor point on bodyA in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) + +*** + +### getAnchorB() + +> **getAnchorB**(): [`Vec2`](Vec2) + +Get the anchor point on bodyB in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) + +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) + +Get the first body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) + +*** + +### getBodyB() + +> **getBodyB**(): [`Body`](Body) + +Get the second body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) + +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` + +Get collide connected. Note: modifying the collide connect flag won't work +correctly because the flag is only checked when fixture AABBs begin to +overlap. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) + +*** + +### getJoint1() + +> **getJoint1**(): [`Joint`](Joint) + +Get the first joint. + +#### Returns + +[`Joint`](Joint) + +*** + +### getJoint2() + +> **getJoint2**(): [`Joint`](Joint) + +Get the second joint. + +#### Returns + +[`Joint`](Joint) + +*** + +### getNext() + +> **getNext**(): [`Joint`](Joint) + +Get the next joint the world joint list. + +#### Returns + +[`Joint`](Joint) + +#### Inherited from + +[`Joint`](Joint).[`getNext`](Joint#getnext) + +*** + +### getRatio() + +> **getRatio**(): `number` + +Get the gear ratio. + +#### Returns + +`number` + +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) + +Get the reaction force on bodyB at the joint anchor in Newtons. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) + +*** + +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` + +Get the reaction torque on bodyB in N*m. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +#### Overrides + +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) + +*** + +### getType() + +> **getType**(): `string` + +Get the type of the concrete joint. + +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) + +*** + +### getUserData() + +> **getUserData**(): `unknown` + +#### Returns + +`unknown` + +#### Inherited from + +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) + +*** + +### initVelocityConstraints() + +> **initVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` + +Short-cut function to determine if either body is inactive. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`isActive`](Joint#isactive) + +*** + +### setRatio() + +> **setRatio**(`ratio`): `void` + +Set the gear ratio. + +#### Parameters + +• **ratio**: `number` + +#### Returns + +`void` + +*** + +### setUserData() + +> **setUserData**(`data`): `void` + +#### Parameters + +• **data**: `unknown` + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the origin for any points stored in world coordinates. + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) + +*** + +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` + +This returns true if the position errors are within tolerance. + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) + +*** + +### solveVelocityConstraints() + +> **solveVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/Joint.md b/docs/pages/api/classes/Joint.md new file mode 100644 index 00000000..b2a9f9e5 --- /dev/null +++ b/docs/pages/api/classes/Joint.md @@ -0,0 +1,270 @@ +# Class: `abstract` Joint + +The base joint class. Joints are used to constraint two bodies together in +various fashions. Some joints also feature limits and motors. + +## Extended by + +- [`DistanceJoint`](DistanceJoint) +- [`FrictionJoint`](FrictionJoint) +- [`GearJoint`](GearJoint) +- [`MotorJoint`](MotorJoint) +- [`MouseJoint`](MouseJoint) +- [`PrismaticJoint`](PrismaticJoint) +- [`PulleyJoint`](PulleyJoint) +- [`RevoluteJoint`](RevoluteJoint) +- [`RopeJoint`](RopeJoint) +- [`WeldJoint`](WeldJoint) +- [`WheelJoint`](WheelJoint) + +## Constructors + +### new Joint() + +> **new Joint**(`def`): [`Joint`](Joint) + +#### Parameters + +• **def**: [`JointDef`](../interfaces/JointDef) + +#### Returns + +[`Joint`](Joint) + +### new Joint() + +> **new Joint**(`def`, `bodyA`, `bodyB`): [`Joint`](Joint) + +#### Parameters + +• **def**: [`JointOpt`](../interfaces/JointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) + +#### Returns + +[`Joint`](Joint) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +## Methods + +### getAnchorA() + +> `abstract` **getAnchorA**(): [`Vec2`](Vec2) + +Get the anchor point on bodyA in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getAnchorB() + +> `abstract` **getAnchorB**(): [`Vec2`](Vec2) + +Get the anchor point on bodyB in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) + +Get the first body attached to this joint. + +#### Returns + +[`Body`](Body) + +*** + +### getBodyB() + +> **getBodyB**(): [`Body`](Body) + +Get the second body attached to this joint. + +#### Returns + +[`Body`](Body) + +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` + +Get collide connected. Note: modifying the collide connect flag won't work +correctly because the flag is only checked when fixture AABBs begin to +overlap. + +#### Returns + +`boolean` + +*** + +### getNext() + +> **getNext**(): [`Joint`](Joint) + +Get the next joint the world joint list. + +#### Returns + +[`Joint`](Joint) + +*** + +### getReactionForce() + +> `abstract` **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) + +Get the reaction force on bodyB at the joint anchor in Newtons. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getReactionTorque() + +> `abstract` **getReactionTorque**(`inv_dt`): `number` + +Get the reaction torque on bodyB in N*m. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +*** + +### getType() + +> **getType**(): `string` + +Get the type of the concrete joint. + +#### Returns + +`string` + +*** + +### getUserData() + +> **getUserData**(): `unknown` + +#### Returns + +`unknown` + +*** + +### initVelocityConstraints() + +> `abstract` **initVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +*** + +### isActive() + +> **isActive**(): `boolean` + +Short-cut function to determine if either body is inactive. + +#### Returns + +`boolean` + +*** + +### setUserData() + +> **setUserData**(`data`): `void` + +#### Parameters + +• **data**: `unknown` + +#### Returns + +`void` + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the origin for any points stored in world coordinates. + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +*** + +### solvePositionConstraints() + +> `abstract` **solvePositionConstraints**(`step`): `boolean` + +This returns true if the position errors are within tolerance. + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +*** + +### solveVelocityConstraints() + +> `abstract` **solveVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` diff --git a/docs/pages/api/classes/JointEdge.md b/docs/pages/api/classes/JointEdge.md new file mode 100644 index 00000000..46034a14 --- /dev/null +++ b/docs/pages/api/classes/JointEdge.md @@ -0,0 +1,48 @@ +# Class: JointEdge + +A joint edge is used to connect bodies and joints together in a joint graph +where each body is a node and each joint is an edge. A joint edge belongs to +a doubly linked list maintained in each attached body. Each joint has two +joint nodes, one for each attached body. + +## Constructors + +### new JointEdge() + +> **new JointEdge**(): [`JointEdge`](JointEdge) + +#### Returns + +[`JointEdge`](JointEdge) + +## Properties + +### joint + +> **joint**: [`Joint`](Joint) = `null` + +the joint + +*** + +### next + +> **next**: [`JointEdge`](JointEdge) = `null` + +the next joint edge in the body's joint list + +*** + +### other + +> **other**: [`Body`](Body) = `null` + +provides quick access to the other body attached. + +*** + +### prev + +> **prev**: [`JointEdge`](JointEdge) = `null` + +prev the previous joint edge in the body's joint list diff --git a/docs/pages/api/classes/Manifold.md b/docs/pages/api/classes/Manifold.md new file mode 100644 index 00000000..dd8c4991 --- /dev/null +++ b/docs/pages/api/classes/Manifold.md @@ -0,0 +1,176 @@ +# Class: Manifold + +A manifold for two touching convex shapes. Manifolds are created in `evaluate` +method of Contact subclasses. + +Supported manifold types are e_faceA or e_faceB for clip point versus plane +with radius and e_circles point versus point with radius. + +We store contacts in this way so that position correction can account for +movement, which is critical for continuous physics. All contact scenarios +must be expressed in one of these types. This structure is stored across time +steps, so we keep it small. + +## Constructors + +### new Manifold() + +> **new Manifold**(): [`Manifold`](Manifold) + +#### Returns + +[`Manifold`](Manifold) + +## Properties + +### localNormal + +> **localNormal**: [`Vec2Value`](../interfaces/Vec2Value) + +Usage depends on manifold type: +- circles: not used +- faceA: the normal on polygonA +- faceB: the normal on polygonB + +*** + +### localPoint + +> **localPoint**: [`Vec2Value`](../interfaces/Vec2Value) + +Usage depends on manifold type: +- circles: the local center of circleA +- faceA: the center of faceA +- faceB: the center of faceB + +*** + +### pointCount + +> **pointCount**: `number` = `0` + +The number of manifold points + +*** + +### points + +> **points**: [`ManifoldPoint`](ManifoldPoint)[] + +The points of contact + +*** + +### type + +> **type**: [`ManifoldType`](../enumerations/ManifoldType) + +*** + +### clipSegmentToLine() + +> `static` **clipSegmentToLine**: (`vOut`, `vIn`, `normal`, `offset`, `vertexIndexA`) => `number` + +Clipping for contact manifolds. Sutherland-Hodgman clipping. + +#### Parameters + +• **vOut**: [`ClipVertex`](ClipVertex)[] + +• **vIn**: [`ClipVertex`](ClipVertex)[] + +• **normal**: [`Vec2Value`](../interfaces/Vec2Value) + +• **offset**: `number` + +• **vertexIndexA**: `number` + +#### Returns + +`number` + +*** + +### ClipVertex + +> `static` **ClipVertex**: *typeof* [`ClipVertex`](ClipVertex) + +*** + +### getPointStates() + +> `static` **getPointStates**: (`state1`, `state2`, `manifold1`, `manifold2`) => `void` + +Compute the point states given two manifolds. The states pertain to the +transition from manifold1 to manifold2. So state1 is either persist or remove +while state2 is either add or persist. + +#### Parameters + +• **state1**: [`PointState`](../enumerations/PointState)[] + +• **state2**: [`PointState`](../enumerations/PointState)[] + +• **manifold1**: [`Manifold`](Manifold) + +• **manifold2**: [`Manifold`](Manifold) + +#### Returns + +`void` + +*** + +### PointState + +> `static` **PointState**: *typeof* [`PointState`](../enumerations/PointState) + +## Methods + +### getWorldManifold() + +> **getWorldManifold**(`wm`, `xfA`, `radiusA`, `xfB`, `radiusB`): [`WorldManifold`](WorldManifold) + +Evaluate the manifold with supplied transforms. This assumes modest motion +from the original state. This does not change the point count, impulses, etc. +The radii must come from the shapes that generated the manifold. + +#### Parameters + +• **wm**: [`WorldManifold`](WorldManifold) + +• **xfA**: [`TransformValue`](../type-aliases/TransformValue) + +• **radiusA**: `number` + +• **xfB**: [`TransformValue`](../type-aliases/TransformValue) + +• **radiusB**: `number` + +#### Returns + +[`WorldManifold`](WorldManifold) + +*** + +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` + +*** + +### set() + +> **set**(`that`): `void` + +#### Parameters + +• **that**: [`Manifold`](Manifold) + +#### Returns + +`void` diff --git a/docs/pages/api/classes/ManifoldPoint.md b/docs/pages/api/classes/ManifoldPoint.md new file mode 100644 index 00000000..5fc8cbd5 --- /dev/null +++ b/docs/pages/api/classes/ManifoldPoint.md @@ -0,0 +1,78 @@ +# Class: ManifoldPoint + +A manifold point is a contact point belonging to a contact manifold. It holds +details related to the geometry and dynamics of the contact points. + +This structure is stored across time steps, so we keep it small. + +Note: impulses are used for internal caching and may not provide reliable +contact forces, especially for high speed collisions. + +## Constructors + +### new ManifoldPoint() + +> **new ManifoldPoint**(): [`ManifoldPoint`](ManifoldPoint) + +#### Returns + +[`ManifoldPoint`](ManifoldPoint) + +## Properties + +### id + +> `readonly` **id**: [`ContactID`](ContactID) + +Uniquely identifies a contact point between two shapes to facilitate warm starting + +*** + +### localPoint + +> **localPoint**: [`Vec2Value`](../interfaces/Vec2Value) + +Usage depends on manifold type: +- circles: the local center of circleB +- faceA: the local center of circleB or the clip point of polygonB +- faceB: the clip point of polygonA + +*** + +### normalImpulse + +> **normalImpulse**: `number` = `0` + +The non-penetration impulse + +*** + +### tangentImpulse + +> **tangentImpulse**: `number` = `0` + +The friction impulse + +## Methods + +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` + +*** + +### set() + +> **set**(`that`): `void` + +#### Parameters + +• **that**: [`ManifoldPoint`](ManifoldPoint) + +#### Returns + +`void` diff --git a/docs/pages/api/classes/Mat22.md b/docs/pages/api/classes/Mat22.md new file mode 100644 index 00000000..dc7f1c91 --- /dev/null +++ b/docs/pages/api/classes/Mat22.md @@ -0,0 +1,353 @@ +# Class: Mat22 + +A 2-by-2 matrix. Stored in column-major order. + +## Constructors + +### new Mat22() + +> **new Mat22**(`a`, `b`, `c`, `d`): [`Mat22`](Mat22) + +#### Parameters + +• **a**: `number` + +• **b**: `number` + +• **c**: `number` + +• **d**: `number` + +#### Returns + +[`Mat22`](Mat22) + +### new Mat22() + +> **new Mat22**(`a`, `b`): [`Mat22`](Mat22) + +#### Parameters + +• **a** + +• **a.x**: `number` + +• **a.y**: `number` + +• **b** + +• **b.x**: `number` + +• **b.y**: `number` + +#### Returns + +[`Mat22`](Mat22) + +### new Mat22() + +> **new Mat22**(): [`Mat22`](Mat22) + +#### Returns + +[`Mat22`](Mat22) + +## Properties + +### ex + +> **ex**: [`Vec2`](Vec2) + +*** + +### ey + +> **ey**: [`Vec2`](Vec2) + +## Methods + +### getInverse() + +> **getInverse**(): [`Mat22`](Mat22) + +#### Returns + +[`Mat22`](Mat22) + +*** + +### set() + +#### set(a) + +> **set**(`a`): `void` + +##### Parameters + +• **a**: [`Mat22`](Mat22) + +##### Returns + +`void` + +#### set(a, b) + +> **set**(`a`, `b`): `void` + +##### Parameters + +• **a**: [`Vec2Value`](../interfaces/Vec2Value) + +• **b**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +`void` + +#### set(a, b, c, d) + +> **set**(`a`, `b`, `c`, `d`): `void` + +##### Parameters + +• **a**: `number` + +• **b**: `number` + +• **c**: `number` + +• **d**: `number` + +##### Returns + +`void` + +*** + +### setIdentity() + +> **setIdentity**(): `void` + +#### Returns + +`void` + +*** + +### setZero() + +> **setZero**(): `void` + +#### Returns + +`void` + +*** + +### solve() + +> **solve**(`v`): [`Vec2`](Vec2) + +Solve A * x = b, where b is a column vector. This is more efficient than +computing the inverse in one-shot cases. + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### abs() + +> `static` **abs**(`mx`): [`Mat22`](Mat22) + +#### Parameters + +• **mx**: [`Mat22`](Mat22) + +#### Returns + +[`Mat22`](Mat22) + +*** + +### add() + +> `static` **add**(`mx1`, `mx2`): [`Mat22`](Mat22) + +#### Parameters + +• **mx1**: [`Mat22`](Mat22) + +• **mx2**: [`Mat22`](Mat22) + +#### Returns + +[`Mat22`](Mat22) + +*** + +### assert() + +> `static` **assert**(`o`): `void` + +#### Parameters + +• **o**: `any` + +#### Returns + +`void` + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` + +#### Parameters + +• **obj**: `any` + +#### Returns + +`boolean` + +*** + +### mul() + +#### mul(mx, my) + +> `static` **mul**(`mx`, `my`): [`Mat22`](Mat22) + +Multiply a matrix times a vector. If a rotation matrix is provided, then this +transforms the vector from one frame to another. + +##### Parameters + +• **mx**: [`Mat22`](Mat22) + +• **my**: [`Mat22`](Mat22) + +##### Returns + +[`Mat22`](Mat22) + +#### mul(mx, v) + +> `static` **mul**(`mx`, `v`): [`Vec2`](Vec2) + +##### Parameters + +• **mx**: [`Mat22`](Mat22) + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +[`Vec2`](Vec2) + +*** + +### mulMat22() + +> `static` **mulMat22**(`mx`, `v`): [`Mat22`](Mat22) + +#### Parameters + +• **mx**: [`Mat22`](Mat22) + +• **v**: [`Mat22`](Mat22) + +#### Returns + +[`Mat22`](Mat22) + +*** + +### mulT() + +#### mulT(mx, my) + +> `static` **mulT**(`mx`, `my`): [`Mat22`](Mat22) + +Multiply a matrix transpose times a vector. If a rotation matrix is provided, +then this transforms the vector from one frame to another (inverse +transform). + +##### Parameters + +• **mx**: [`Mat22`](Mat22) + +• **my**: [`Mat22`](Mat22) + +##### Returns + +[`Mat22`](Mat22) + +#### mulT(mx, v) + +> `static` **mulT**(`mx`, `v`): [`Vec2`](Vec2) + +##### Parameters + +• **mx**: [`Mat22`](Mat22) + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +[`Vec2`](Vec2) + +*** + +### mulTMat22() + +> `static` **mulTMat22**(`mx`, `v`): [`Mat22`](Mat22) + +#### Parameters + +• **mx**: [`Mat22`](Mat22) + +• **v**: [`Mat22`](Mat22) + +#### Returns + +[`Mat22`](Mat22) + +*** + +### mulTVec2() + +> `static` **mulTVec2**(`mx`, `v`): [`Vec2`](Vec2) + +#### Parameters + +• **mx**: [`Mat22`](Mat22) + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### mulVec2() + +> `static` **mulVec2**(`mx`, `v`): [`Vec2`](Vec2) + +#### Parameters + +• **mx**: [`Mat22`](Mat22) + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) diff --git a/docs/pages/api/classes/Mat33.md b/docs/pages/api/classes/Mat33.md new file mode 100644 index 00000000..f58ec6ca --- /dev/null +++ b/docs/pages/api/classes/Mat33.md @@ -0,0 +1,238 @@ +# Class: Mat33 + +A 3-by-3 matrix. Stored in column-major order. + +## Constructors + +### new Mat33() + +> **new Mat33**(`a`, `b`, `c`): [`Mat33`](Mat33) + +#### Parameters + +• **a**: [`Vec3Value`](../interfaces/Vec3Value) + +• **b**: [`Vec3Value`](../interfaces/Vec3Value) + +• **c**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns + +[`Mat33`](Mat33) + +### new Mat33() + +> **new Mat33**(): [`Mat33`](Mat33) + +#### Returns + +[`Mat33`](Mat33) + +## Properties + +### ex + +> **ex**: [`Vec3`](Vec3) + +*** + +### ey + +> **ey**: [`Vec3`](Vec3) + +*** + +### ez + +> **ez**: [`Vec3`](Vec3) + +## Methods + +### getInverse22() + +> **getInverse22**(`M`): `void` + +Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if +singular. + +#### Parameters + +• **M**: [`Mat33`](Mat33) + +#### Returns + +`void` + +*** + +### getSymInverse33() + +> **getSymInverse33**(`M`): `void` + +Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix +if singular. + +#### Parameters + +• **M**: [`Mat33`](Mat33) + +#### Returns + +`void` + +*** + +### setZero() + +> **setZero**(): [`Mat33`](Mat33) + +Set this matrix to all zeros. + +#### Returns + +[`Mat33`](Mat33) + +*** + +### solve22() + +> **solve22**(`v`): [`Vec2`](Vec2) + +Solve A * x = b, where b is a column vector. This is more efficient than +computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix +equation. + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### solve33() + +> **solve33**(`v`): [`Vec3`](Vec3) + +Solve A * x = b, where b is a column vector. This is more efficient than +computing the inverse in one-shot cases. + +#### Parameters + +• **v**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns + +[`Vec3`](Vec3) + +*** + +### add() + +> `static` **add**(`a`, `b`): [`Mat33`](Mat33) + +#### Parameters + +• **a**: [`Mat33`](Mat33) + +• **b**: [`Mat33`](Mat33) + +#### Returns + +[`Mat33`](Mat33) + +*** + +### assert() + +> `static` **assert**(`o`): `void` + +#### Parameters + +• **o**: `any` + +#### Returns + +`void` + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` + +#### Parameters + +• **obj**: `any` + +#### Returns + +`boolean` + +*** + +### mul() + +#### mul(a, b) + +> `static` **mul**(`a`, `b`): [`Vec2`](Vec2) + +Multiply a matrix times a vector. + +##### Parameters + +• **a**: [`Mat33`](Mat33) + +• **b**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +[`Vec2`](Vec2) + +#### mul(a, b) + +> `static` **mul**(`a`, `b`): [`Vec3`](Vec3) + +##### Parameters + +• **a**: [`Mat33`](Mat33) + +• **b**: [`Vec3Value`](../interfaces/Vec3Value) + +##### Returns + +[`Vec3`](Vec3) + +*** + +### mulVec2() + +> `static` **mulVec2**(`a`, `b`): [`Vec2`](Vec2) + +#### Parameters + +• **a**: [`Mat33`](Mat33) + +• **b**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### mulVec3() + +> `static` **mulVec3**(`a`, `b`): [`Vec3`](Vec3) + +#### Parameters + +• **a**: [`Mat33`](Mat33) + +• **b**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns + +[`Vec3`](Vec3) diff --git a/docs/pages/api/classes/MotorJoint.md b/docs/pages/api/classes/MotorJoint.md new file mode 100644 index 00000000..8b5d1db5 --- /dev/null +++ b/docs/pages/api/classes/MotorJoint.md @@ -0,0 +1,479 @@ +# Class: MotorJoint + +A motor joint is used to control the relative motion between two bodies. A +typical usage is to control the movement of a dynamic body with respect to +the ground. + +## Extends + +- [`Joint`](Joint) + +## Constructors + +### new MotorJoint() + +> **new MotorJoint**(`def`): [`MotorJoint`](MotorJoint) + +#### Parameters + +• **def**: [`MotorJointDef`](../interfaces/MotorJointDef) + +#### Returns + +[`MotorJoint`](MotorJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +### new MotorJoint() + +> **new MotorJoint**(`def`, `bodyA`, `bodyB`): [`MotorJoint`](MotorJoint) + +#### Parameters + +• **def**: [`MotorJointOpt`](../interfaces/MotorJointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) + +#### Returns + +[`MotorJoint`](MotorJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Joint`](Joint).[`style`](Joint#style) + +*** + +### TYPE + +> `static` **TYPE**: `"motor-joint"` + +## Methods + +### getAnchorA() + +> **getAnchorA**(): [`Vec2`](Vec2) + +Get the anchor point on bodyA in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) + +*** + +### getAnchorB() + +> **getAnchorB**(): [`Vec2`](Vec2) + +Get the anchor point on bodyB in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) + +*** + +### getAngularOffset() + +> **getAngularOffset**(): `number` + +#### Returns + +`number` + +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) + +Get the first body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) + +*** + +### getBodyB() + +> **getBodyB**(): [`Body`](Body) + +Get the second body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) + +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` + +Get collide connected. Note: modifying the collide connect flag won't work +correctly because the flag is only checked when fixture AABBs begin to +overlap. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) + +*** + +### getCorrectionFactor() + +> **getCorrectionFactor**(): `number` + +Get the position correction factor in the range [0,1]. + +#### Returns + +`number` + +*** + +### getLinearOffset() + +> **getLinearOffset**(): [`Vec2`](Vec2) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getMaxForce() + +> **getMaxForce**(): `number` + +Get the maximum friction force in N. + +#### Returns + +`number` + +*** + +### getMaxTorque() + +> **getMaxTorque**(): `number` + +Get the maximum friction torque in N*m. + +#### Returns + +`number` + +*** + +### getNext() + +> **getNext**(): [`Joint`](Joint) + +Get the next joint the world joint list. + +#### Returns + +[`Joint`](Joint) + +#### Inherited from + +[`Joint`](Joint).[`getNext`](Joint#getnext) + +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) + +Get the reaction force on bodyB at the joint anchor in Newtons. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) + +*** + +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` + +Get the reaction torque on bodyB in N*m. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +#### Overrides + +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) + +*** + +### getType() + +> **getType**(): `string` + +Get the type of the concrete joint. + +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) + +*** + +### getUserData() + +> **getUserData**(): `unknown` + +#### Returns + +`unknown` + +#### Inherited from + +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) + +*** + +### initVelocityConstraints() + +> **initVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` + +Short-cut function to determine if either body is inactive. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`isActive`](Joint#isactive) + +*** + +### setAngularOffset() + +> **setAngularOffset**(`angularOffset`): `void` + +Set/get the target angular offset, in radians. + +#### Parameters + +• **angularOffset**: `number` + +#### Returns + +`void` + +*** + +### setCorrectionFactor() + +> **setCorrectionFactor**(`factor`): `void` + +Set the position correction factor in the range [0,1]. + +#### Parameters + +• **factor**: `number` + +#### Returns + +`void` + +*** + +### setLinearOffset() + +> **setLinearOffset**(`linearOffset`): `void` + +Set/get the target linear offset, in frame A, in meters. + +#### Parameters + +• **linearOffset**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +*** + +### setMaxForce() + +> **setMaxForce**(`force`): `void` + +Set the maximum friction force in N. + +#### Parameters + +• **force**: `number` + +#### Returns + +`void` + +*** + +### setMaxTorque() + +> **setMaxTorque**(`torque`): `void` + +Set the maximum friction torque in N*m. + +#### Parameters + +• **torque**: `number` + +#### Returns + +`void` + +*** + +### setUserData() + +> **setUserData**(`data`): `void` + +#### Parameters + +• **data**: `unknown` + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the origin for any points stored in world coordinates. + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) + +*** + +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` + +This returns true if the position errors are within tolerance. + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) + +*** + +### solveVelocityConstraints() + +> **solveVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/MouseJoint.md b/docs/pages/api/classes/MouseJoint.md new file mode 100644 index 00000000..a33c0cfa --- /dev/null +++ b/docs/pages/api/classes/MouseJoint.md @@ -0,0 +1,462 @@ +# Class: MouseJoint + +A mouse joint is used to make a point on a body track a specified world +point. This a soft constraint with a maximum force. This allows the +constraint to stretch and without applying huge forces. + +You need to call setTarget(target) every time that mouse is +moved, to track the new location of the mouse. + +NOTE: this joint is not documented in the manual because it was developed to +be used in the testbed. If you want to learn how to use the mouse joint, look +at the testbed. + +## Extends + +- [`Joint`](Joint) + +## Constructors + +### new MouseJoint() + +> **new MouseJoint**(`def`): [`MouseJoint`](MouseJoint) + +#### Parameters + +• **def**: [`MouseJointDef`](../interfaces/MouseJointDef) + +#### Returns + +[`MouseJoint`](MouseJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +### new MouseJoint() + +> **new MouseJoint**(`def`, `bodyA`, `bodyB`, `target`): [`MouseJoint`](MouseJoint) + +#### Parameters + +• **def**: [`MouseJointOpt`](../interfaces/MouseJointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) + +• **target**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`MouseJoint`](MouseJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Joint`](Joint).[`style`](Joint#style) + +*** + +### TYPE + +> `static` **TYPE**: `"mouse-joint"` + +## Methods + +### getAnchorA() + +> **getAnchorA**(): [`Vec2`](Vec2) + +Get the anchor point on bodyA in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) + +*** + +### getAnchorB() + +> **getAnchorB**(): [`Vec2`](Vec2) + +Get the anchor point on bodyB in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) + +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) + +Get the first body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) + +*** + +### getBodyB() + +> **getBodyB**(): [`Body`](Body) + +Get the second body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) + +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` + +Get collide connected. Note: modifying the collide connect flag won't work +correctly because the flag is only checked when fixture AABBs begin to +overlap. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) + +*** + +### getDampingRatio() + +> **getDampingRatio**(): `number` + +Get the damping ratio (dimensionless). + +#### Returns + +`number` + +*** + +### getFrequency() + +> **getFrequency**(): `number` + +Get the frequency in Hertz. + +#### Returns + +`number` + +*** + +### getMaxForce() + +> **getMaxForce**(): `number` + +Get the maximum force in Newtons. + +#### Returns + +`number` + +*** + +### getNext() + +> **getNext**(): [`Joint`](Joint) + +Get the next joint the world joint list. + +#### Returns + +[`Joint`](Joint) + +#### Inherited from + +[`Joint`](Joint).[`getNext`](Joint#getnext) + +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) + +Get the reaction force on bodyB at the joint anchor in Newtons. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) + +*** + +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` + +Get the reaction torque on bodyB in N*m. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +#### Overrides + +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) + +*** + +### getTarget() + +> **getTarget**(): [`Vec2`](Vec2) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getType() + +> **getType**(): `string` + +Get the type of the concrete joint. + +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) + +*** + +### getUserData() + +> **getUserData**(): `unknown` + +#### Returns + +`unknown` + +#### Inherited from + +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) + +*** + +### initVelocityConstraints() + +> **initVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` + +Short-cut function to determine if either body is inactive. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`isActive`](Joint#isactive) + +*** + +### setDampingRatio() + +> **setDampingRatio**(`ratio`): `void` + +Set the damping ratio (dimensionless). + +#### Parameters + +• **ratio**: `number` + +#### Returns + +`void` + +*** + +### setFrequency() + +> **setFrequency**(`hz`): `void` + +Set the frequency in Hertz. + +#### Parameters + +• **hz**: `number` + +#### Returns + +`void` + +*** + +### setMaxForce() + +> **setMaxForce**(`force`): `void` + +Set the maximum force in Newtons. + +#### Parameters + +• **force**: `number` + +#### Returns + +`void` + +*** + +### setTarget() + +> **setTarget**(`target`): `void` + +Use this to update the target point. + +#### Parameters + +• **target**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +*** + +### setUserData() + +> **setUserData**(`data`): `void` + +#### Parameters + +• **data**: `unknown` + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the origin for any points stored in world coordinates. + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) + +*** + +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` + +This returns true if the position errors are within tolerance. + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) + +*** + +### solveVelocityConstraints() + +> **solveVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/PolygonShape.md b/docs/pages/api/classes/PolygonShape.md new file mode 100644 index 00000000..f43db2ea --- /dev/null +++ b/docs/pages/api/classes/PolygonShape.md @@ -0,0 +1,268 @@ +# Class: PolygonShape + +A convex polygon. It is assumed that the interior of the polygon is to the +left of each edge. Polygons have a maximum number of vertices equal to +Settings.maxPolygonVertices. In most cases you should not need many vertices +for a convex polygon. extends Shape + +## Extends + +- [`Shape`](Shape) + +## Extended by + +- [`BoxShape`](BoxShape) + +## Constructors + +### new PolygonShape() + +> **new PolygonShape**(`vertices`?): [`PolygonShape`](PolygonShape) + +#### Parameters + +• **vertices?**: [`Vec2Value`](../interfaces/Vec2Value)[] + +#### Returns + +[`PolygonShape`](PolygonShape) + +#### Overrides + +[`Shape`](Shape).[`constructor`](Shape#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Shape`](Shape).[`style`](Shape#style) + +*** + +### TYPE + +> `static` **TYPE**: `"polygon"` + +## Methods + +### computeAABB() + +> **computeAABB**(`aabb`, `xf`, `childIndex`): `void` + +Given a transform, compute the associated axis aligned bounding box for a +child shape. + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +Returns the axis aligned box. + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The world transform of the shape. + +• **childIndex**: `number` + +The child shape + +#### Returns + +`void` + +#### Overrides + +[`Shape`](Shape).[`computeAABB`](Shape#computeaabb) + +*** + +### computeDistanceProxy() + +> **computeDistanceProxy**(`proxy`): `void` + +#### Parameters + +• **proxy**: [`DistanceProxy`](DistanceProxy) + +#### Returns + +`void` + +#### Overrides + +[`Shape`](Shape).[`computeDistanceProxy`](Shape#computedistanceproxy) + +*** + +### computeMass() + +> **computeMass**(`massData`, `density`): `void` + +Compute the mass properties of this shape using its dimensions and density. +The inertia tensor is computed about the local origin. + +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) + +Returns the mass data for this shape. + +• **density**: `number` + +The density in kilograms per meter squared. + +#### Returns + +`void` + +#### Overrides + +[`Shape`](Shape).[`computeMass`](Shape#computemass) + +*** + +### getChildCount() + +> **getChildCount**(): `1` + +Get the number of child primitives. + +#### Returns + +`1` + +#### Overrides + +[`Shape`](Shape).[`getChildCount`](Shape#getchildcount) + +*** + +### getRadius() + +> **getRadius**(): `number` + +#### Returns + +`number` + +#### Overrides + +[`Shape`](Shape).[`getRadius`](Shape#getradius) + +*** + +### getType() + +> **getType**(): `"polygon"` + +Get the type of this shape. You can use this to down cast to the concrete +shape. + +#### Returns + +`"polygon"` + +the shape type. + +#### Overrides + +[`Shape`](Shape).[`getType`](Shape#gettype) + +*** + +### rayCast() + +> **rayCast**(`output`, `input`, `xf`, `childIndex`): `boolean` + +Cast a ray against a child shape. + +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +The ray-cast results. + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input parameters. + +• **xf**: [`Transform`](Transform) + +The transform to be applied to the shape. + +• **childIndex**: `number` + +The child shape index + +#### Returns + +`boolean` + +#### Overrides + +[`Shape`](Shape).[`rayCast`](Shape#raycast) + +*** + +### testPoint() + +> **testPoint**(`xf`, `p`): `boolean` + +Test a point for containment in this shape. This only works for convex +shapes. + +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The shape world transform. + +• **p**: [`Vec2Value`](../interfaces/Vec2Value) + +A point in world coordinates. + +#### Returns + +`boolean` + +#### Overrides + +[`Shape`](Shape).[`testPoint`](Shape#testpoint) + +*** + +### validate() + +> **validate**(): `boolean` + +Validate convexity. This is a very time consuming operation. + +#### Returns + +`boolean` + +true if valid + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` + +#### Parameters + +• **obj**: `any` + +#### Returns + +`boolean` + +#### Inherited from + +[`Shape`](Shape).[`isValid`](Shape#isvalid) diff --git a/docs/pages/api/classes/PrismaticJoint.md b/docs/pages/api/classes/PrismaticJoint.md new file mode 100644 index 00000000..51ba4025 --- /dev/null +++ b/docs/pages/api/classes/PrismaticJoint.md @@ -0,0 +1,588 @@ +# Class: PrismaticJoint + +A prismatic joint. This joint provides one degree of freedom: translation +along an axis fixed in bodyA. Relative rotation is prevented. You can use a +joint limit to restrict the range of motion and a joint motor to drive the +motion or to model joint friction. + +## Extends + +- [`Joint`](Joint) + +## Constructors + +### new PrismaticJoint() + +> **new PrismaticJoint**(`def`): [`PrismaticJoint`](PrismaticJoint) + +#### Parameters + +• **def**: [`PrismaticJointDef`](../interfaces/PrismaticJointDef) + +#### Returns + +[`PrismaticJoint`](PrismaticJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +### new PrismaticJoint() + +> **new PrismaticJoint**(`def`, `bodyA`, `bodyB`, `anchor`, `axis`): [`PrismaticJoint`](PrismaticJoint) + +#### Parameters + +• **def**: [`PrismaticJointOpt`](../interfaces/PrismaticJointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) + +• **anchor**: [`Vec2Value`](../interfaces/Vec2Value) + +• **axis**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`PrismaticJoint`](PrismaticJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Joint`](Joint).[`style`](Joint#style) + +*** + +### TYPE + +> `static` **TYPE**: `"prismatic-joint"` + +## Methods + +### enableLimit() + +> **enableLimit**(`flag`): `void` + +Enable/disable the joint limit. + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### enableMotor() + +> **enableMotor**(`flag`): `void` + +Enable/disable the joint motor. + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### getAnchorA() + +> **getAnchorA**(): [`Vec2`](Vec2) + +Get the anchor point on bodyA in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) + +*** + +### getAnchorB() + +> **getAnchorB**(): [`Vec2`](Vec2) + +Get the anchor point on bodyB in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) + +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) + +Get the first body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) + +*** + +### getBodyB() + +> **getBodyB**(): [`Body`](Body) + +Get the second body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) + +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` + +Get collide connected. Note: modifying the collide connect flag won't work +correctly because the flag is only checked when fixture AABBs begin to +overlap. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) + +*** + +### getJointSpeed() + +> **getJointSpeed**(): `number` + +Get the current joint translation speed, usually in meters per second. + +#### Returns + +`number` + +*** + +### getJointTranslation() + +> **getJointTranslation**(): `number` + +Get the current joint translation, usually in meters. + +#### Returns + +`number` + +*** + +### getLocalAnchorA() + +> **getLocalAnchorA**(): [`Vec2`](Vec2) + +The local anchor point relative to bodyA's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLocalAnchorB() + +> **getLocalAnchorB**(): [`Vec2`](Vec2) + +The local anchor point relative to bodyB's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLocalAxisA() + +> **getLocalAxisA**(): [`Vec2`](Vec2) + +The local joint axis relative to bodyA. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLowerLimit() + +> **getLowerLimit**(): `number` + +Get the lower joint limit, usually in meters. + +#### Returns + +`number` + +*** + +### getMaxMotorForce() + +> **getMaxMotorForce**(): `number` + +#### Returns + +`number` + +*** + +### getMotorForce() + +> **getMotorForce**(`inv_dt`): `number` + +Get the current motor force given the inverse time step, usually in N. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +*** + +### getMotorSpeed() + +> **getMotorSpeed**(): `number` + +Get the motor speed, usually in meters per second. + +#### Returns + +`number` + +*** + +### getNext() + +> **getNext**(): [`Joint`](Joint) + +Get the next joint the world joint list. + +#### Returns + +[`Joint`](Joint) + +#### Inherited from + +[`Joint`](Joint).[`getNext`](Joint#getnext) + +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) + +Get the reaction force on bodyB at the joint anchor in Newtons. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) + +*** + +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` + +Get the reaction torque on bodyB in N*m. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +#### Overrides + +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) + +*** + +### getReferenceAngle() + +> **getReferenceAngle**(): `number` + +Get the reference angle. + +#### Returns + +`number` + +*** + +### getType() + +> **getType**(): `string` + +Get the type of the concrete joint. + +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) + +*** + +### getUpperLimit() + +> **getUpperLimit**(): `number` + +Get the upper joint limit, usually in meters. + +#### Returns + +`number` + +*** + +### getUserData() + +> **getUserData**(): `unknown` + +#### Returns + +`unknown` + +#### Inherited from + +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) + +*** + +### initVelocityConstraints() + +> **initVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` + +Short-cut function to determine if either body is inactive. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`isActive`](Joint#isactive) + +*** + +### isLimitEnabled() + +> **isLimitEnabled**(): `boolean` + +Is the joint limit enabled? + +#### Returns + +`boolean` + +*** + +### isMotorEnabled() + +> **isMotorEnabled**(): `boolean` + +Is the joint motor enabled? + +#### Returns + +`boolean` + +*** + +### setLimits() + +> **setLimits**(`lower`, `upper`): `void` + +Set the joint limits, usually in meters. + +#### Parameters + +• **lower**: `number` + +• **upper**: `number` + +#### Returns + +`void` + +*** + +### setMaxMotorForce() + +> **setMaxMotorForce**(`force`): `void` + +Set the maximum motor force, usually in N. + +#### Parameters + +• **force**: `number` + +#### Returns + +`void` + +*** + +### setMotorSpeed() + +> **setMotorSpeed**(`speed`): `void` + +Set the motor speed, usually in meters per second. + +#### Parameters + +• **speed**: `number` + +#### Returns + +`void` + +*** + +### setUserData() + +> **setUserData**(`data`): `void` + +#### Parameters + +• **data**: `unknown` + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the origin for any points stored in world coordinates. + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) + +*** + +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` + +This returns true if the position errors are within tolerance. + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) + +*** + +### solveVelocityConstraints() + +> **solveVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/PulleyJoint.md b/docs/pages/api/classes/PulleyJoint.md new file mode 100644 index 00000000..0e15b622 --- /dev/null +++ b/docs/pages/api/classes/PulleyJoint.md @@ -0,0 +1,443 @@ +# Class: PulleyJoint + +The pulley joint is connected to two bodies and two fixed ground points. The +pulley supports a ratio such that: length1 + ratio * length2 <= constant + +Yes, the force transmitted is scaled by the ratio. + +Warning: the pulley joint can get a bit squirrelly by itself. They often work +better when combined with prismatic joints. You should also cover the the +anchor points with static shapes to prevent one side from going to zero +length. + +## Extends + +- [`Joint`](Joint) + +## Constructors + +### new PulleyJoint() + +> **new PulleyJoint**(`def`): [`PulleyJoint`](PulleyJoint) + +#### Parameters + +• **def**: [`PulleyJointDef`](../interfaces/PulleyJointDef) + +#### Returns + +[`PulleyJoint`](PulleyJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +### new PulleyJoint() + +> **new PulleyJoint**(`def`, `bodyA`, `bodyB`, `groundA`, `groundB`, `anchorA`, `anchorB`, `ratio`): [`PulleyJoint`](PulleyJoint) + +#### Parameters + +• **def**: [`PulleyJointOpt`](../interfaces/PulleyJointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) + +• **groundA**: [`Vec2Value`](../interfaces/Vec2Value) + +• **groundB**: [`Vec2Value`](../interfaces/Vec2Value) + +• **anchorA**: [`Vec2Value`](../interfaces/Vec2Value) + +• **anchorB**: [`Vec2Value`](../interfaces/Vec2Value) + +• **ratio**: `number` + +#### Returns + +[`PulleyJoint`](PulleyJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Joint`](Joint).[`style`](Joint#style) + +*** + +### TYPE + +> `static` **TYPE**: `"pulley-joint"` + +## Methods + +### getAnchorA() + +> **getAnchorA**(): [`Vec2`](Vec2) + +Get the anchor point on bodyA in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) + +*** + +### getAnchorB() + +> **getAnchorB**(): [`Vec2`](Vec2) + +Get the anchor point on bodyB in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) + +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) + +Get the first body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) + +*** + +### getBodyB() + +> **getBodyB**(): [`Body`](Body) + +Get the second body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) + +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` + +Get collide connected. Note: modifying the collide connect flag won't work +correctly because the flag is only checked when fixture AABBs begin to +overlap. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) + +*** + +### getCurrentLengthA() + +> **getCurrentLengthA**(): `number` + +Get the current length of the segment attached to bodyA. + +#### Returns + +`number` + +*** + +### getCurrentLengthB() + +> **getCurrentLengthB**(): `number` + +Get the current length of the segment attached to bodyB. + +#### Returns + +`number` + +*** + +### getGroundAnchorA() + +> **getGroundAnchorA**(): [`Vec2`](Vec2) + +Get the first ground anchor. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getGroundAnchorB() + +> **getGroundAnchorB**(): [`Vec2`](Vec2) + +Get the second ground anchor. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLengthA() + +> **getLengthA**(): `number` + +Get the current length of the segment attached to bodyA. + +#### Returns + +`number` + +*** + +### getLengthB() + +> **getLengthB**(): `number` + +Get the current length of the segment attached to bodyB. + +#### Returns + +`number` + +*** + +### getNext() + +> **getNext**(): [`Joint`](Joint) + +Get the next joint the world joint list. + +#### Returns + +[`Joint`](Joint) + +#### Inherited from + +[`Joint`](Joint).[`getNext`](Joint#getnext) + +*** + +### getRatio() + +> **getRatio**(): `number` + +Get the pulley ratio. + +#### Returns + +`number` + +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) + +Get the reaction force on bodyB at the joint anchor in Newtons. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) + +*** + +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` + +Get the reaction torque on bodyB in N*m. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +#### Overrides + +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) + +*** + +### getType() + +> **getType**(): `string` + +Get the type of the concrete joint. + +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) + +*** + +### getUserData() + +> **getUserData**(): `unknown` + +#### Returns + +`unknown` + +#### Inherited from + +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) + +*** + +### initVelocityConstraints() + +> **initVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` + +Short-cut function to determine if either body is inactive. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`isActive`](Joint#isactive) + +*** + +### setUserData() + +> **setUserData**(`data`): `void` + +#### Parameters + +• **data**: `unknown` + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the origin for any points stored in world coordinates. + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) + +*** + +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` + +This returns true if the position errors are within tolerance. + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) + +*** + +### solveVelocityConstraints() + +> **solveVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/RevoluteJoint.md b/docs/pages/api/classes/RevoluteJoint.md new file mode 100644 index 00000000..61c8f339 --- /dev/null +++ b/docs/pages/api/classes/RevoluteJoint.md @@ -0,0 +1,577 @@ +# Class: RevoluteJoint + +A revolute joint constrains two bodies to share a common point while they are +free to rotate about the point. The relative rotation about the shared point +is the joint angle. You can limit the relative rotation with a joint limit +that specifies a lower and upper angle. You can use a motor to drive the +relative rotation about the shared point. A maximum motor torque is provided +so that infinite forces are not generated. + +## Extends + +- [`Joint`](Joint) + +## Constructors + +### new RevoluteJoint() + +> **new RevoluteJoint**(`def`): [`RevoluteJoint`](RevoluteJoint) + +#### Parameters + +• **def**: [`RevoluteJointDef`](../interfaces/RevoluteJointDef) + +#### Returns + +[`RevoluteJoint`](RevoluteJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +### new RevoluteJoint() + +> **new RevoluteJoint**(`def`, `bodyA`, `bodyB`, `anchor`): [`RevoluteJoint`](RevoluteJoint) + +#### Parameters + +• **def**: [`RevoluteJointOpt`](../interfaces/RevoluteJointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) + +• **anchor**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`RevoluteJoint`](RevoluteJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Joint`](Joint).[`style`](Joint#style) + +*** + +### TYPE + +> `static` **TYPE**: `"revolute-joint"` + +## Methods + +### enableLimit() + +> **enableLimit**(`flag`): `void` + +Enable/disable the joint limit. + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### enableMotor() + +> **enableMotor**(`flag`): `void` + +Enable/disable the joint motor. + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### getAnchorA() + +> **getAnchorA**(): [`Vec2`](Vec2) + +Get the anchor point on bodyA in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) + +*** + +### getAnchorB() + +> **getAnchorB**(): [`Vec2`](Vec2) + +Get the anchor point on bodyB in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) + +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) + +Get the first body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) + +*** + +### getBodyB() + +> **getBodyB**(): [`Body`](Body) + +Get the second body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) + +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` + +Get collide connected. Note: modifying the collide connect flag won't work +correctly because the flag is only checked when fixture AABBs begin to +overlap. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) + +*** + +### getJointAngle() + +> **getJointAngle**(): `number` + +Get the current joint angle in radians. + +#### Returns + +`number` + +*** + +### getJointSpeed() + +> **getJointSpeed**(): `number` + +Get the current joint angle speed in radians per second. + +#### Returns + +`number` + +*** + +### getLocalAnchorA() + +> **getLocalAnchorA**(): [`Vec2`](Vec2) + +The local anchor point relative to bodyA's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLocalAnchorB() + +> **getLocalAnchorB**(): [`Vec2`](Vec2) + +The local anchor point relative to bodyB's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLowerLimit() + +> **getLowerLimit**(): `number` + +Get the lower joint limit in radians. + +#### Returns + +`number` + +*** + +### getMaxMotorTorque() + +> **getMaxMotorTorque**(): `number` + +#### Returns + +`number` + +*** + +### getMotorSpeed() + +> **getMotorSpeed**(): `number` + +Get the motor speed in radians per second. + +#### Returns + +`number` + +*** + +### getMotorTorque() + +> **getMotorTorque**(`inv_dt`): `number` + +Get the current motor torque given the inverse time step. Unit is N*m. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +*** + +### getNext() + +> **getNext**(): [`Joint`](Joint) + +Get the next joint the world joint list. + +#### Returns + +[`Joint`](Joint) + +#### Inherited from + +[`Joint`](Joint).[`getNext`](Joint#getnext) + +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) + +Get the reaction force given the inverse time step. Unit is N. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) + +*** + +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` + +Get the reaction torque due to the joint limit given the inverse time step. +Unit is N*m. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +#### Overrides + +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) + +*** + +### getReferenceAngle() + +> **getReferenceAngle**(): `number` + +Get the reference angle. + +#### Returns + +`number` + +*** + +### getType() + +> **getType**(): `string` + +Get the type of the concrete joint. + +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) + +*** + +### getUpperLimit() + +> **getUpperLimit**(): `number` + +Get the upper joint limit in radians. + +#### Returns + +`number` + +*** + +### getUserData() + +> **getUserData**(): `unknown` + +#### Returns + +`unknown` + +#### Inherited from + +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) + +*** + +### initVelocityConstraints() + +> **initVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` + +Short-cut function to determine if either body is inactive. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`isActive`](Joint#isactive) + +*** + +### isLimitEnabled() + +> **isLimitEnabled**(): `boolean` + +Is the joint limit enabled? + +#### Returns + +`boolean` + +*** + +### isMotorEnabled() + +> **isMotorEnabled**(): `boolean` + +Is the joint motor enabled? + +#### Returns + +`boolean` + +*** + +### setLimits() + +> **setLimits**(`lower`, `upper`): `void` + +Set the joint limits in radians. + +#### Parameters + +• **lower**: `number` + +• **upper**: `number` + +#### Returns + +`void` + +*** + +### setMaxMotorTorque() + +> **setMaxMotorTorque**(`torque`): `void` + +Set the maximum motor torque, usually in N-m. + +#### Parameters + +• **torque**: `number` + +#### Returns + +`void` + +*** + +### setMotorSpeed() + +> **setMotorSpeed**(`speed`): `void` + +Set the motor speed in radians per second. + +#### Parameters + +• **speed**: `number` + +#### Returns + +`void` + +*** + +### setUserData() + +> **setUserData**(`data`): `void` + +#### Parameters + +• **data**: `unknown` + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the origin for any points stored in world coordinates. + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) + +*** + +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` + +This returns true if the position errors are within tolerance. + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) + +*** + +### solveVelocityConstraints() + +> **solveVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/RopeJoint.md b/docs/pages/api/classes/RopeJoint.md new file mode 100644 index 00000000..03cba6ca --- /dev/null +++ b/docs/pages/api/classes/RopeJoint.md @@ -0,0 +1,413 @@ +# Class: RopeJoint + +A rope joint enforces a maximum distance between two points on two bodies. It +has no other effect. + +Warning: if you attempt to change the maximum length during the simulation +you will get some non-physical behavior. + +A model that would allow you to dynamically modify the length would have some +sponginess, so I chose not to implement it that way. See [DistanceJoint](DistanceJoint) if you +want to dynamically control length. + +## Extends + +- [`Joint`](Joint) + +## Constructors + +### new RopeJoint() + +> **new RopeJoint**(`def`): [`RopeJoint`](RopeJoint) + +#### Parameters + +• **def**: [`RopeJointDef`](../interfaces/RopeJointDef) + +#### Returns + +[`RopeJoint`](RopeJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +### new RopeJoint() + +> **new RopeJoint**(`def`, `bodyA`, `bodyB`, `anchor`): [`RopeJoint`](RopeJoint) + +#### Parameters + +• **def**: [`RopeJointOpt`](../interfaces/RopeJointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) + +• **anchor**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`RopeJoint`](RopeJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Joint`](Joint).[`style`](Joint#style) + +*** + +### TYPE + +> `static` **TYPE**: `"rope-joint"` + +## Methods + +### getAnchorA() + +> **getAnchorA**(): [`Vec2`](Vec2) + +Get the anchor point on bodyA in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) + +*** + +### getAnchorB() + +> **getAnchorB**(): [`Vec2`](Vec2) + +Get the anchor point on bodyB in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) + +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) + +Get the first body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) + +*** + +### getBodyB() + +> **getBodyB**(): [`Body`](Body) + +Get the second body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) + +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` + +Get collide connected. Note: modifying the collide connect flag won't work +correctly because the flag is only checked when fixture AABBs begin to +overlap. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) + +*** + +### getLimitState() + +> **getLimitState**(): `number` + +#### Returns + +`number` + +*** + +### getLocalAnchorA() + +> **getLocalAnchorA**(): [`Vec2`](Vec2) + +The local anchor point relative to bodyA's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLocalAnchorB() + +> **getLocalAnchorB**(): [`Vec2`](Vec2) + +The local anchor point relative to bodyB's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getMaxLength() + +> **getMaxLength**(): `number` + +Get the maximum length of the rope. + +#### Returns + +`number` + +*** + +### getNext() + +> **getNext**(): [`Joint`](Joint) + +Get the next joint the world joint list. + +#### Returns + +[`Joint`](Joint) + +#### Inherited from + +[`Joint`](Joint).[`getNext`](Joint#getnext) + +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) + +Get the reaction force on bodyB at the joint anchor in Newtons. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) + +*** + +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` + +Get the reaction torque on bodyB in N*m. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +#### Overrides + +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) + +*** + +### getType() + +> **getType**(): `string` + +Get the type of the concrete joint. + +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) + +*** + +### getUserData() + +> **getUserData**(): `unknown` + +#### Returns + +`unknown` + +#### Inherited from + +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) + +*** + +### initVelocityConstraints() + +> **initVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` + +Short-cut function to determine if either body is inactive. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`isActive`](Joint#isactive) + +*** + +### setMaxLength() + +> **setMaxLength**(`length`): `void` + +Set the maximum length of the rope. + +#### Parameters + +• **length**: `number` + +#### Returns + +`void` + +*** + +### setUserData() + +> **setUserData**(`data`): `void` + +#### Parameters + +• **data**: `unknown` + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the origin for any points stored in world coordinates. + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) + +*** + +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` + +This returns true if the position errors are within tolerance. + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) + +*** + +### solveVelocityConstraints() + +> **solveVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/Rot.md b/docs/pages/api/classes/Rot.md new file mode 100644 index 00000000..fe8574bf --- /dev/null +++ b/docs/pages/api/classes/Rot.md @@ -0,0 +1,341 @@ +# Class: Rot + +Rotation + +## Constructors + +### new Rot() + +> **new Rot**(`angle`?): [`Rot`](Rot) + +Initialize from an angle in radians. + +#### Parameters + +• **angle?**: `number` \| [`RotValue`](../interfaces/RotValue) + +#### Returns + +[`Rot`](Rot) + +## Properties + +### c + +> **c**: `number` + +cos(angle) + +*** + +### s + +> **s**: `number` + +sin(angle) + +## Methods + +### getAngle() + +> **getAngle**(): `number` + +Get the angle in radians. + +#### Returns + +`number` + +*** + +### getXAxis() + +> **getXAxis**(): [`Vec2`](Vec2) + +Get the x-axis. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getYAxis() + +> **getYAxis**(): [`Vec2`](Vec2) + +Get the y-axis. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### set() + +> **set**(`angle`): `void` + +#### Parameters + +• **angle**: `number` \| [`RotValue`](../interfaces/RotValue) + +#### Returns + +`void` + +*** + +### setAngle() + +> **setAngle**(`angle`): `void` + +Set using an angle in radians. + +#### Parameters + +• **angle**: `number` + +#### Returns + +`void` + +*** + +### setIdentity() + +> **setIdentity**(): `void` + +Set to the identity rotation. + +#### Returns + +`void` + +*** + +### setRot() + +> **setRot**(`angle`): `void` + +#### Parameters + +• **angle**: [`RotValue`](../interfaces/RotValue) + +#### Returns + +`void` + +*** + +### assert() + +> `static` **assert**(`o`): `void` + +#### Parameters + +• **o**: `any` + +#### Returns + +`void` + +*** + +### clone() + +> `static` **clone**(`rot`): [`Rot`](Rot) + +#### Parameters + +• **rot**: [`RotValue`](../interfaces/RotValue) + +#### Returns + +[`Rot`](Rot) + +*** + +### identity() + +> `static` **identity**(): [`Rot`](Rot) + +#### Returns + +[`Rot`](Rot) + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` + +#### Parameters + +• **obj**: `any` + +#### Returns + +`boolean` + +*** + +### mul() + +#### mul(rot, m) + +> `static` **mul**(`rot`, `m`): [`Rot`](Rot) + +Multiply two rotations: q * r + +##### Parameters + +• **rot**: [`RotValue`](../interfaces/RotValue) + +• **m**: [`RotValue`](../interfaces/RotValue) + +##### Returns + +[`Rot`](Rot) + +#### mul(rot, m) + +> `static` **mul**(`rot`, `m`): [`Vec2`](Vec2) + +Rotate a vector + +##### Parameters + +• **rot**: [`RotValue`](../interfaces/RotValue) + +• **m**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +[`Vec2`](Vec2) + +*** + +### mulRot() + +> `static` **mulRot**(`rot`, `m`): [`Rot`](Rot) + +Multiply two rotations: q * r + +#### Parameters + +• **rot**: [`RotValue`](../interfaces/RotValue) + +• **m**: [`RotValue`](../interfaces/RotValue) + +#### Returns + +[`Rot`](Rot) + +*** + +### mulSub() + +> `static` **mulSub**(`rot`, `v`, `w`): [`Vec2`](Vec2) + +#### Parameters + +• **rot**: [`RotValue`](../interfaces/RotValue) + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### mulT() + +#### mulT(rot, m) + +> `static` **mulT**(`rot`, `m`): [`Rot`](Rot) + +Transpose multiply two rotations: qT * r + +##### Parameters + +• **rot**: [`RotValue`](../interfaces/RotValue) + +• **m**: [`RotValue`](../interfaces/RotValue) + +##### Returns + +[`Rot`](Rot) + +#### mulT(rot, m) + +> `static` **mulT**(`rot`, `m`): [`Vec2`](Vec2) + +Inverse rotate a vector + +##### Parameters + +• **rot**: [`RotValue`](../interfaces/RotValue) + +• **m**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +[`Vec2`](Vec2) + +*** + +### mulTRot() + +> `static` **mulTRot**(`rot`, `m`): [`Rot`](Rot) + +Transpose multiply two rotations: qT * r + +#### Parameters + +• **rot**: [`RotValue`](../interfaces/RotValue) + +• **m**: [`RotValue`](../interfaces/RotValue) + +#### Returns + +[`Rot`](Rot) + +*** + +### mulTVec2() + +> `static` **mulTVec2**(`rot`, `m`): [`Vec2`](Vec2) + +Inverse rotate a vector + +#### Parameters + +• **rot**: [`RotValue`](../interfaces/RotValue) + +• **m**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### mulVec2() + +> `static` **mulVec2**(`rot`, `m`): [`Vec2`](Vec2) + +Rotate a vector + +#### Parameters + +• **rot**: [`RotValue`](../interfaces/RotValue) + +• **m**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) diff --git a/docs/pages/api/classes/Settings.md b/docs/pages/api/classes/Settings.md new file mode 100644 index 00000000..123e356f --- /dev/null +++ b/docs/pages/api/classes/Settings.md @@ -0,0 +1,214 @@ +# Class: Settings + +Tuning constants based on meters-kilograms-seconds (MKS) units. + +Some tolerances are absolute and some are relative. Absolute tolerances use MKS units. + +## Constructors + +### new Settings() + +> **new Settings**(): [`Settings`](Settings) + +#### Returns + +[`Settings`](Settings) + +## Properties + +### aabbExtension + +> `static` **aabbExtension**: `number` = `0.1` + +This is used to fatten AABBs in the dynamic tree. This allows proxies to move +by a small amount without triggering a tree adjustment. This is in meters. + +*** + +### aabbMultiplier + +> `static` **aabbMultiplier**: `number` = `2.0` + +This is used to fatten AABBs in the dynamic tree. This is used to predict the +future position based on the current displacement. This is a dimensionless +multiplier. + +*** + +### angularSleepTolerance + +> `static` **angularSleepTolerance**: `number` + +A body cannot sleep if its angular velocity is above this tolerance. + +*** + +### angularSlop + +> `static` **angularSlop**: `number` + +A small angle used as a collision and constraint tolerance. Usually it is +chosen to be numerically significant, but visually insignificant. + +*** + +### baumgarte + +> `static` **baumgarte**: `number` = `0.2` + +This scale factor controls how fast overlap is resolved. Ideally this would +be 1 so that overlap is removed in one time step. However using values close +to 1 often lead to overshoot. + +*** + +### lengthUnitsPerMeter + +> `static` **lengthUnitsPerMeter**: `number` = `1.0` + +You can use this to change the length scale used by your game. + +For example for inches you could use 39.4. + +*** + +### linearSleepTolerance + +> `static` **linearSleepTolerance**: `number` = `0.01` + +A body cannot sleep if its linear velocity is above this tolerance. + +*** + +### linearSlop + +> `static` **linearSlop**: `number` = `0.005` + +A small length used as a collision and constraint tolerance. Usually it is +chosen to be numerically significant, but visually insignificant. + +*** + +### maxAngularCorrection + +> `static` **maxAngularCorrection**: `number` + +The maximum angular position correction used when solving constraints. This +helps to prevent overshoot. + +*** + +### maxDistanceIterations + +> `static` **maxDistanceIterations**: `number` = `20` + +Maximum iterations to find Distance. + +*** + +### maxLinearCorrection + +> `static` **maxLinearCorrection**: `number` = `0.2` + +The maximum linear position correction used when solving constraints. This +helps to prevent overshoot. + +*** + +### maxManifoldPoints + +> `static` **maxManifoldPoints**: `number` = `2` + +The maximum number of contact points between two convex shapes. Do not change +this value. + +*** + +### maxPolygonVertices + +> `static` **maxPolygonVertices**: `number` = `12` + +The maximum number of vertices on a convex polygon. You cannot increase this +too much because BlockAllocator has a maximum object size. + +*** + +### maxRotation + +> `static` **maxRotation**: `number` + +The maximum angular velocity of a body. This limit is very large and is used +to prevent numerical problems. You shouldn't need to adjust Settings. + +*** + +### maxSubSteps + +> `static` **maxSubSteps**: `number` = `8` + +Maximum number of sub-steps per contact in continuous physics simulation. + +*** + +### maxTOIContacts + +> `static` **maxTOIContacts**: `number` = `32` + +Maximum number of contacts to be handled to solve a TOI impact. + +*** + +### maxTOIIterations + +> `static` **maxTOIIterations**: `number` = `20` + +Maximum iterations to solve a TOI. + +*** + +### maxTranslation + +> `static` **maxTranslation**: `number` = `2.0` + +The maximum linear velocity of a body. This limit is very large and is used +to prevent numerical problems. You shouldn't need to adjust Settings. + +*** + +### timeToSleep + +> `static` **timeToSleep**: `number` = `0.5` + +The time that a body must be still before it will go to sleep. + +*** + +### toiBaugarte + +> `static` **toiBaugarte**: `number` = `0.75` + +*** + +### velocityThreshold + +> `static` **velocityThreshold**: `number` = `1.0` + +A velocity threshold for elastic collisions. Any collision with a relative +linear velocity below this threshold will be treated as inelastic. + +## Accessors + +### polygonRadius + +#### Get Signature + +> **get** `static` **polygonRadius**(): `number` + +The radius of the polygon/edge shape skin. This should not be modified. +Making this smaller means polygons will have an insufficient buffer for +continuous collision. Making it larger may create artifacts for vertex +collision. + +##### Returns + +`number` diff --git a/docs/pages/api/classes/Shape.md b/docs/pages/api/classes/Shape.md new file mode 100644 index 00000000..654d9bdf --- /dev/null +++ b/docs/pages/api/classes/Shape.md @@ -0,0 +1,200 @@ +# Class: `abstract` Shape + +A shape is used for collision detection. You can create a shape however you +like. Shapes used for simulation in World are created automatically when a +Fixture is created. Shapes may encapsulate one or more child shapes. + +## Extended by + +- [`CircleShape`](CircleShape) +- [`EdgeShape`](EdgeShape) +- [`PolygonShape`](PolygonShape) +- [`ChainShape`](ChainShape) + +## Constructors + +### new Shape() + +> **new Shape**(): [`Shape`](Shape) + +#### Returns + +[`Shape`](Shape) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +## Methods + +### computeAABB() + +> `abstract` **computeAABB**(`aabb`, `xf`, `childIndex`): `void` + +Given a transform, compute the associated axis aligned bounding box for a +child shape. + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +Returns the axis aligned box. + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The world transform of the shape. + +• **childIndex**: `number` + +The child shape + +#### Returns + +`void` + +*** + +### computeDistanceProxy() + +> `abstract` **computeDistanceProxy**(`proxy`, `childIndex`): `void` + +#### Parameters + +• **proxy**: [`DistanceProxy`](DistanceProxy) + +• **childIndex**: `number` + +#### Returns + +`void` + +*** + +### computeMass() + +> `abstract` **computeMass**(`massData`, `density`?): `void` + +Compute the mass properties of this shape using its dimensions and density. +The inertia tensor is computed about the local origin. + +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) + +Returns the mass data for this shape. + +• **density?**: `number` + +The density in kilograms per meter squared. + +#### Returns + +`void` + +*** + +### getChildCount() + +> `abstract` **getChildCount**(): `number` + +Get the number of child primitives. + +#### Returns + +`number` + +*** + +### getRadius() + +> `abstract` **getRadius**(): `number` + +#### Returns + +`number` + +*** + +### getType() + +> `abstract` **getType**(): [`ShapeType`](../type-aliases/ShapeType) + +Get the type of this shape. You can use this to down cast to the concrete +shape. + +#### Returns + +[`ShapeType`](../type-aliases/ShapeType) + +the shape type. + +*** + +### rayCast() + +> `abstract` **rayCast**(`output`, `input`, `xf`, `childIndex`): `boolean` + +Cast a ray against a child shape. + +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +The ray-cast results. + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input parameters. + +• **xf**: [`Transform`](Transform) + +The transform to be applied to the shape. + +• **childIndex**: `number` + +The child shape index + +#### Returns + +`boolean` + +*** + +### testPoint() + +> `abstract` **testPoint**(`xf`, `p`): `boolean` + +Test a point for containment in this shape. This only works for convex +shapes. + +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The shape world transform. + +• **p**: [`Vec2Value`](../interfaces/Vec2Value) + +A point in world coordinates. + +#### Returns + +`boolean` + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` + +#### Parameters + +• **obj**: `any` + +#### Returns + +`boolean` diff --git a/docs/pages/api/classes/ShapeCastInput.md b/docs/pages/api/classes/ShapeCastInput.md new file mode 100644 index 00000000..75c4db34 --- /dev/null +++ b/docs/pages/api/classes/ShapeCastInput.md @@ -0,0 +1,53 @@ +# Class: ShapeCastInput + +Input parameters for ShapeCast + +## Constructors + +### new ShapeCastInput() + +> **new ShapeCastInput**(): [`ShapeCastInput`](ShapeCastInput) + +#### Returns + +[`ShapeCastInput`](ShapeCastInput) + +## Properties + +### proxyA + +> `readonly` **proxyA**: [`DistanceProxy`](DistanceProxy) + +*** + +### proxyB + +> `readonly` **proxyB**: [`DistanceProxy`](DistanceProxy) + +*** + +### transformA + +> `readonly` **transformA**: [`Transform`](Transform) + +*** + +### transformB + +> `readonly` **transformB**: [`Transform`](Transform) + +*** + +### translationB + +> `readonly` **translationB**: [`Vec2`](Vec2) + +## Methods + +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` diff --git a/docs/pages/api/classes/ShapeCastOutput.md b/docs/pages/api/classes/ShapeCastOutput.md new file mode 100644 index 00000000..5b86b9cc --- /dev/null +++ b/docs/pages/api/classes/ShapeCastOutput.md @@ -0,0 +1,37 @@ +# Class: ShapeCastOutput + +Output results for b2ShapeCast + +## Constructors + +### new ShapeCastOutput() + +> **new ShapeCastOutput**(): [`ShapeCastOutput`](ShapeCastOutput) + +#### Returns + +[`ShapeCastOutput`](ShapeCastOutput) + +## Properties + +### iterations + +> **iterations**: `number` = `0` + +*** + +### lambda + +> **lambda**: `number` = `1.0` + +*** + +### normal + +> **normal**: [`Vec2`](Vec2) + +*** + +### point + +> **point**: [`Vec2`](Vec2) diff --git a/docs/pages/api/classes/SimplexCache.md b/docs/pages/api/classes/SimplexCache.md new file mode 100644 index 00000000..513aaa69 --- /dev/null +++ b/docs/pages/api/classes/SimplexCache.md @@ -0,0 +1,53 @@ +# Class: SimplexCache + +Used to warm start Distance. Set count to zero on first call. + +## Constructors + +### new SimplexCache() + +> **new SimplexCache**(): [`SimplexCache`](SimplexCache) + +#### Returns + +[`SimplexCache`](SimplexCache) + +## Properties + +### count + +> **count**: `number` = `0` + +*** + +### indexA + +> **indexA**: `number`[] = `[]` + +vertices on shape A + +*** + +### indexB + +> **indexB**: `number`[] = `[]` + +vertices on shape B + +*** + +### metric + +> **metric**: `number` = `0` + +length or area + +## Methods + +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` diff --git a/docs/pages/api/classes/Solver.md b/docs/pages/api/classes/Solver.md new file mode 100644 index 00000000..e62e7532 --- /dev/null +++ b/docs/pages/api/classes/Solver.md @@ -0,0 +1,161 @@ +# Class: Solver + +Finds and solves islands. An island is a connected subset of the world. + +## Constructors + +### new Solver() + +> **new Solver**(`world`): [`Solver`](Solver) + +#### Parameters + +• **world**: [`World`](World) + +#### Returns + +[`Solver`](Solver) + +## Properties + +### m\_bodies + +> **m\_bodies**: [`Body`](Body)[] + +*** + +### m\_contacts + +> **m\_contacts**: [`Contact`](Contact)[] + +*** + +### m\_joints + +> **m\_joints**: [`Joint`](Joint)[] + +*** + +### m\_stack + +> **m\_stack**: [`Body`](Body)[] + +*** + +### m\_world + +> **m\_world**: [`World`](World) + +## Methods + +### addBody() + +> **addBody**(`body`): `void` + +#### Parameters + +• **body**: [`Body`](Body) + +#### Returns + +`void` + +*** + +### addContact() + +> **addContact**(`contact`): `void` + +#### Parameters + +• **contact**: [`Contact`](Contact) + +#### Returns + +`void` + +*** + +### addJoint() + +> **addJoint**(`joint`): `void` + +#### Parameters + +• **joint**: [`Joint`](Joint) + +#### Returns + +`void` + +*** + +### clear() + +> **clear**(): `void` + +#### Returns + +`void` + +*** + +### solveIsland() + +> **solveIsland**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +*** + +### solveIslandTOI() + +> **solveIslandTOI**(`subStep`, `toiA`, `toiB`): `void` + +#### Parameters + +• **subStep**: [`TimeStep`](TimeStep) + +• **toiA**: [`Body`](Body) + +• **toiB**: [`Body`](Body) + +#### Returns + +`void` + +*** + +### solveWorld() + +> **solveWorld**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +*** + +### solveWorldTOI() + +> **solveWorldTOI**(`step`): `void` + +Find TOI contacts and solve them. + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` diff --git a/docs/pages/api/classes/Sweep.md b/docs/pages/api/classes/Sweep.md new file mode 100644 index 00000000..e1181b67 --- /dev/null +++ b/docs/pages/api/classes/Sweep.md @@ -0,0 +1,164 @@ +# Class: Sweep + +This describes the motion of a body/shape for TOI computation. Shapes are +defined with respect to the body origin, which may not coincide with the +center of mass. However, to support dynamics we must interpolate the center +of mass position. + +## Constructors + +### new Sweep() + +> **new Sweep**(): [`Sweep`](Sweep) + +#### Returns + +[`Sweep`](Sweep) + +## Properties + +### a + +> **a**: `number` = `0` + +World angle + +*** + +### a0 + +> **a0**: `number` = `0` + +*** + +### alpha0 + +> **alpha0**: `number` = `0` + +Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. + +*** + +### c + +> **c**: [`Vec2`](Vec2) + +World center position + +*** + +### c0 + +> **c0**: [`Vec2`](Vec2) + +*** + +### localCenter + +> **localCenter**: [`Vec2`](Vec2) + +Local center of mass position + +## Methods + +### advance() + +> **advance**(`alpha`): `void` + +Advance the sweep forward, yielding a new initial state. + +#### Parameters + +• **alpha**: `number` + +The new initial time + +#### Returns + +`void` + +*** + +### forward() + +> **forward**(): `void` + +#### Returns + +`void` + +*** + +### getTransform() + +> **getTransform**(`xf`, `beta`): `void` + +Get the interpolated transform at a specific time. + +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +• **beta**: `number` = `0` + +A factor in [0,1], where 0 indicates alpha0 + +#### Returns + +`void` + +*** + +### normalize() + +> **normalize**(): `void` + +normalize the angles in radians to be between -pi and pi. + +#### Returns + +`void` + +*** + +### set() + +> **set**(`that`): `void` + +#### Parameters + +• **that**: [`Sweep`](Sweep) + +#### Returns + +`void` + +*** + +### setLocalCenter() + +> **setLocalCenter**(`localCenter`, `xf`): `void` + +#### Parameters + +• **localCenter**: [`Vec2Value`](../interfaces/Vec2Value) + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +#### Returns + +`void` + +*** + +### setTransform() + +> **setTransform**(`xf`): `void` + +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +#### Returns + +`void` diff --git a/docs/pages/api/classes/TOIInput.md b/docs/pages/api/classes/TOIInput.md new file mode 100644 index 00000000..44391785 --- /dev/null +++ b/docs/pages/api/classes/TOIInput.md @@ -0,0 +1,55 @@ +# Class: TOIInput + +Input parameters for TimeOfImpact. + +## Constructors + +### new TOIInput() + +> **new TOIInput**(): [`TOIInput`](TOIInput) + +#### Returns + +[`TOIInput`](TOIInput) + +## Properties + +### proxyA + +> **proxyA**: [`DistanceProxy`](DistanceProxy) + +*** + +### proxyB + +> **proxyB**: [`DistanceProxy`](DistanceProxy) + +*** + +### sweepA + +> **sweepA**: [`Sweep`](Sweep) + +*** + +### sweepB + +> **sweepB**: [`Sweep`](Sweep) + +*** + +### tMax + +> **tMax**: `number` + +defines sweep interval [0, tMax] + +## Methods + +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` diff --git a/docs/pages/api/classes/TOIOutput.md b/docs/pages/api/classes/TOIOutput.md new file mode 100644 index 00000000..3e98b87d --- /dev/null +++ b/docs/pages/api/classes/TOIOutput.md @@ -0,0 +1,35 @@ +# Class: TOIOutput + +Output parameters for TimeOfImpact. + +## Constructors + +### new TOIOutput() + +> **new TOIOutput**(): [`TOIOutput`](TOIOutput) + +#### Returns + +[`TOIOutput`](TOIOutput) + +## Properties + +### state + +> **state**: [`TOIOutputState`](../enumerations/TOIOutputState) = `TOIOutputState.e_unset` + +*** + +### t + +> **t**: `number` = `-1` + +## Methods + +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` diff --git a/docs/pages/api/classes/Testbed.md b/docs/pages/api/classes/Testbed.md new file mode 100644 index 00000000..801d638e --- /dev/null +++ b/docs/pages/api/classes/Testbed.md @@ -0,0 +1,397 @@ +# Class: `abstract` Testbed + +## Constructors + +### new Testbed() + +> **new Testbed**(): [`Testbed`](Testbed) + +#### Returns + +[`Testbed`](Testbed) + +## Properties + +### activeKeys + +> **activeKeys**: [`ActiveKeys`](../type-aliases/ActiveKeys) = `{}` + +*** + +### background + +> **background**: `string` = `"#222222"` + +*** + +### height + +> **height**: `number` = `60` + +World viewbox height. + +*** + +### hz + +> **hz**: `number` = `60` + +World simulation step frequency + +*** + +### mouseForce? + +> `optional` **mouseForce**: `number` + +*** + +### speed + +> **speed**: `number` = `1` + +World simulation speed, default is 1 + +*** + +### width + +> **width**: `number` = `80` + +World viewbox width. + +*** + +### x + +> **x**: `number` = `0` + +World viewbox center vertical offset. + +*** + +### y + +> **y**: `number` = `-10` + +World viewbox center horizontal offset. + +## Methods + +### color() + +> **color**(`r`, `g`, `b`): `string` + +#### Parameters + +• **r**: `number` + +• **g**: `number` + +• **b**: `number` + +#### Returns + +`string` + +*** + +### drawAABB() + +> `abstract` **drawAABB**(`aabb`, `color`): `void` + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +• **color**: `string` + +#### Returns + +`void` + +*** + +### drawCircle() + +> `abstract` **drawCircle**(`p`, `r`, `color`): `void` + +#### Parameters + +• **p** + +• **p.x**: `number` + +• **p.y**: `number` + +• **r**: `number` + +• **color**: `string` + +#### Returns + +`void` + +*** + +### drawEdge() + +> `abstract` **drawEdge**(`a`, `b`, `color`): `void` + +#### Parameters + +• **a** + +• **a.x**: `number` + +• **a.y**: `number` + +• **b** + +• **b.x**: `number` + +• **b.y**: `number` + +• **color**: `string` + +#### Returns + +`void` + +*** + +### drawPoint() + +> `abstract` **drawPoint**(`p`, `r`, `color`): `void` + +#### Parameters + +• **p** + +• **p.x**: `number` + +• **p.y**: `number` + +• **r**: `any` + +• **color**: `string` + +#### Returns + +`void` + +*** + +### drawPolygon() + +> `abstract` **drawPolygon**(`points`, `color`): `void` + +#### Parameters + +• **points**: `object`[] + +• **color**: `string` + +#### Returns + +`void` + +*** + +### drawSegment() + +> `abstract` **drawSegment**(`a`, `b`, `color`): `void` + +#### Parameters + +• **a** + +• **a.x**: `number` + +• **a.y**: `number` + +• **b** + +• **b.x**: `number` + +• **b.y**: `number` + +• **color**: `string` + +#### Returns + +`void` + +*** + +### findAll() + +> `abstract` **findAll**(`query`): ([`Body`](Body) \| [`Fixture`](Fixture) \| [`Joint`](Joint))[] + +#### Parameters + +• **query**: `string` + +#### Returns + +([`Body`](Body) \| [`Fixture`](Fixture) \| [`Joint`](Joint))[] + +*** + +### findOne() + +> `abstract` **findOne**(`query`): [`Body`](Body) \| [`Fixture`](Fixture) \| [`Joint`](Joint) + +#### Parameters + +• **query**: `string` + +#### Returns + +[`Body`](Body) \| [`Fixture`](Fixture) \| [`Joint`](Joint) + +*** + +### info() + +> `abstract` **info**(`text`): `void` + +#### Parameters + +• **text**: `string` + +#### Returns + +`void` + +*** + +### keydown() + +> **keydown**(`keyCode`, `label`): `void` + +callback, to be implemented by user + +#### Parameters + +• **keyCode**: `number` + +• **label**: `string` + +#### Returns + +`void` + +*** + +### keyup() + +> **keyup**(`keyCode`, `label`): `void` + +callback, to be implemented by user + +#### Parameters + +• **keyCode**: `number` + +• **label**: `string` + +#### Returns + +`void` + +*** + +### start() + +> `abstract` **start**(`world`): `void` + +#### Parameters + +• **world**: [`World`](World) + +#### Returns + +`void` + +*** + +### status() + +#### status(name, value) + +> `abstract` **status**(`name`, `value`): `void` + +##### Parameters + +• **name**: `string` + +• **value**: `any` + +##### Returns + +`void` + +#### status(value) + +> `abstract` **status**(`value`): `void` + +##### Parameters + +• **value**: `string` \| `object` + +##### Returns + +`void` + +*** + +### step() + +> **step**(`dt`, `t`): `void` + +callback, to be implemented by user + +#### Parameters + +• **dt**: `number` + +• **t**: `number` + +#### Returns + +`void` + +*** + +### mount() + +> `static` **mount**(`options`?): [`Testbed`](Testbed) + +Mounts testbed. Call start with a world to start simulation and rendering. + +#### Parameters + +• **options?**: `TestbedMountOptions` + +#### Returns + +[`Testbed`](Testbed) + +*** + +### start() + +> `static` **start**(`world`): [`Testbed`](Testbed) + +Mounts testbed if needed, then starts simulation and rendering. + +If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`. + +#### Parameters + +• **world**: [`World`](World) + +#### Returns + +[`Testbed`](Testbed) diff --git a/docs/pages/api/classes/TimeStep.md b/docs/pages/api/classes/TimeStep.md new file mode 100644 index 00000000..19200b4c --- /dev/null +++ b/docs/pages/api/classes/TimeStep.md @@ -0,0 +1,81 @@ +# Class: TimeStep + +## Constructors + +### new TimeStep() + +> **new TimeStep**(): [`TimeStep`](TimeStep) + +#### Returns + +[`TimeStep`](TimeStep) + +## Properties + +### blockSolve + +> **blockSolve**: `boolean` = `true` + +*** + +### dt + +> **dt**: `number` = `0` + +time step + +*** + +### dtRatio + +> **dtRatio**: `number` = `1` + +dt * inv_dt0 + +*** + +### inv\_dt + +> **inv\_dt**: `number` = `0` + +inverse time step (0 if dt == 0) + +*** + +### inv\_dt0 + +> **inv\_dt0**: `number` = `0.0` + +timestep ratio for variable timestep + +*** + +### positionIterations + +> **positionIterations**: `number` = `0` + +*** + +### velocityIterations + +> **velocityIterations**: `number` = `0` + +*** + +### warmStarting + +> **warmStarting**: `boolean` = `false` + +## Methods + +### reset() + +> **reset**(`dt`): `void` + +#### Parameters + +• **dt**: `number` + +#### Returns + +`void` diff --git a/docs/pages/api/classes/Transform.md b/docs/pages/api/classes/Transform.md new file mode 100644 index 00000000..c74f16cd --- /dev/null +++ b/docs/pages/api/classes/Transform.md @@ -0,0 +1,327 @@ +# Class: Transform + +A transform contains translation and rotation. It is used to represent the +position and orientation of rigid frames. Initialize using a position vector +and a rotation. + +## Constructors + +### new Transform() + +> **new Transform**(`position`?, `rotation`?): [`Transform`](Transform) + +#### Parameters + +• **position?**: [`Vec2Value`](../interfaces/Vec2Value) + +• **rotation?**: `number` + +#### Returns + +[`Transform`](Transform) + +## Properties + +### p + +> **p**: [`Vec2`](Vec2) + +position + +*** + +### q + +> **q**: [`Rot`](Rot) + +rotation + +## Methods + +### set() + +#### set(position, rotation) + +> **set**(`position`, `rotation`): `void` + +Set position and angle + +##### Parameters + +• **position**: [`Vec2Value`](../interfaces/Vec2Value) + +• **rotation**: `number` + +##### Returns + +`void` + +#### set(xf) + +> **set**(`xf`): `void` + +Copy from another transform + +##### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +##### Returns + +`void` + +*** + +### setIdentity() + +> **setIdentity**(): `void` + +Set this to the identity transform + +#### Returns + +`void` + +*** + +### setNum() + +> **setNum**(`position`, `rotation`): `void` + +Set position and angle + +#### Parameters + +• **position**: [`Vec2Value`](../interfaces/Vec2Value) + +• **rotation**: `number` + +#### Returns + +`void` + +*** + +### setTransform() + +> **setTransform**(`xf`): `void` + +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +#### Returns + +`void` + +*** + +### assert() + +> `static` **assert**(`o`): `void` + +#### Parameters + +• **o**: `any` + +#### Returns + +`void` + +*** + +### clone() + +> `static` **clone**(`xf`): [`Transform`](Transform) + +#### Parameters + +• **xf**: [`Transform`](Transform) + +#### Returns + +[`Transform`](Transform) + +*** + +### identity() + +> `static` **identity**(): [`Transform`](Transform) + +#### Returns + +[`Transform`](Transform) + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` + +#### Parameters + +• **obj**: `any` + +#### Returns + +`boolean` + +*** + +### mul() + +#### mul(a, b) + +> `static` **mul**(`a`, `b`): [`Vec2`](Vec2) + +##### Parameters + +• **a**: [`TransformValue`](../type-aliases/TransformValue) + +• **b**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +[`Vec2`](Vec2) + +#### mul(a, b) + +> `static` **mul**(`a`, `b`): [`Transform`](Transform) + +##### Parameters + +• **a**: [`TransformValue`](../type-aliases/TransformValue) + +• **b**: [`TransformValue`](../type-aliases/TransformValue) + +##### Returns + +[`Transform`](Transform) + +*** + +### mulAll() + +#### mulAll(a, b) + +> `static` **mulAll**(`a`, `b`): [`Vec2`](Vec2)[] + +##### Parameters + +• **a**: [`Transform`](Transform) + +• **b**: [`Vec2Value`](../interfaces/Vec2Value)[] + +##### Returns + +[`Vec2`](Vec2)[] + +#### mulAll(a, b) + +> `static` **mulAll**(`a`, `b`): [`Transform`](Transform)[] + +##### Parameters + +• **a**: [`Transform`](Transform) + +• **b**: [`Transform`](Transform)[] + +##### Returns + +[`Transform`](Transform)[] + +*** + +### mulT() + +#### mulT(a, b) + +> `static` **mulT**(`a`, `b`): [`Vec2`](Vec2) + +##### Parameters + +• **a**: [`TransformValue`](../type-aliases/TransformValue) + +• **b**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +[`Vec2`](Vec2) + +#### mulT(a, b) + +> `static` **mulT**(`a`, `b`): [`Transform`](Transform) + +##### Parameters + +• **a**: [`TransformValue`](../type-aliases/TransformValue) + +• **b**: [`TransformValue`](../type-aliases/TransformValue) + +##### Returns + +[`Transform`](Transform) + +*** + +### mulTVec2() + +> `static` **mulTVec2**(`a`, `b`): [`Vec2`](Vec2) + +#### Parameters + +• **a**: [`TransformValue`](../type-aliases/TransformValue) + +• **b**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### mulTXf() + +> `static` **mulTXf**(`a`, `b`): [`Transform`](Transform) + +#### Parameters + +• **a**: [`TransformValue`](../type-aliases/TransformValue) + +• **b**: [`TransformValue`](../type-aliases/TransformValue) + +#### Returns + +[`Transform`](Transform) + +*** + +### mulVec2() + +> `static` **mulVec2**(`a`, `b`): [`Vec2`](Vec2) + +#### Parameters + +• **a**: [`TransformValue`](../type-aliases/TransformValue) + +• **b**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### mulXf() + +> `static` **mulXf**(`a`, `b`): [`Transform`](Transform) + +#### Parameters + +• **a**: [`TransformValue`](../type-aliases/TransformValue) + +• **b**: [`TransformValue`](../type-aliases/TransformValue) + +#### Returns + +[`Transform`](Transform) diff --git a/docs/pages/api/classes/TreeNode.md b/docs/pages/api/classes/TreeNode.md new file mode 100644 index 00000000..ed462466 --- /dev/null +++ b/docs/pages/api/classes/TreeNode.md @@ -0,0 +1,77 @@ +# Class: TreeNode\ + +A node in the dynamic tree. The client does not interact with this directly. + +## Type Parameters + +• **T** + +## Constructors + +### new TreeNode() + +> **new TreeNode**\<`T`\>(`id`?): [`TreeNode`](TreeNode)\<`T`\> + +#### Parameters + +• **id?**: `number` + +#### Returns + +[`TreeNode`](TreeNode)\<`T`\> + +## Properties + +### aabb + +> **aabb**: [`AABB`](AABB) + +Enlarged AABB + +*** + +### child1 + +> **child1**: [`TreeNode`](TreeNode)\<`T`\> = `null` + +*** + +### child2 + +> **child2**: [`TreeNode`](TreeNode)\<`T`\> = `null` + +*** + +### height + +> **height**: `number` = `-1` + +0: leaf, -1: free node + +*** + +### id + +> **id**: `number` + +*** + +### parent + +> **parent**: [`TreeNode`](TreeNode)\<`T`\> = `null` + +*** + +### userData + +> **userData**: `T` = `null` + +## Methods + +### isLeaf() + +> **isLeaf**(): `boolean` + +#### Returns + +`boolean` diff --git a/docs/pages/api/classes/Vec2.md b/docs/pages/api/classes/Vec2.md new file mode 100644 index 00000000..fd97094a --- /dev/null +++ b/docs/pages/api/classes/Vec2.md @@ -0,0 +1,969 @@ +# Class: Vec2 + +2D vector + +## Constructors + +### new Vec2() + +> **new Vec2**(`x`, `y`): [`Vec2`](Vec2) + +#### Parameters + +• **x**: `number` + +• **y**: `number` + +#### Returns + +[`Vec2`](Vec2) + +### new Vec2() + +> **new Vec2**(`obj`): [`Vec2`](Vec2) + +#### Parameters + +• **obj**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +### new Vec2() + +> **new Vec2**(): [`Vec2`](Vec2) + +#### Returns + +[`Vec2`](Vec2) + +## Properties + +### x + +> **x**: `number` + +*** + +### y + +> **y**: `number` + +## Methods + +### add() + +> **add**(`w`): [`Vec2`](Vec2) + +Add a vector to this vector. + +#### Parameters + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +this + +*** + +### addCombine() + +> **addCombine**(`a`, `v`, `b`, `w`): [`Vec2`](Vec2) + +Add linear combination of v and w: `a * v + b * w` + +#### Parameters + +• **a**: `number` + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **b**: `number` + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### addMul() + +> **addMul**(`a`, `v`): [`Vec2`](Vec2) + +#### Parameters + +• **a**: `number` + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### clamp() + +> **clamp**(`max`): [`Vec2`](Vec2) + +#### Parameters + +• **max**: `number` + +#### Returns + +[`Vec2`](Vec2) + +*** + +### clone() + +> **clone**(): [`Vec2`](Vec2) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### length() + +> **length**(): `number` + +Get the length of this vector (the norm). + +For performance, use this instead of lengthSquared (if possible). + +#### Returns + +`number` + +*** + +### lengthSquared() + +> **lengthSquared**(): `number` + +Get the length squared. + +#### Returns + +`number` + +*** + +### mul() + +> **mul**(`m`): [`Vec2`](Vec2) + +Multiply this vector by a scalar. + +#### Parameters + +• **m**: `number` + +#### Returns + +[`Vec2`](Vec2) + +this + +*** + +### neg() + +> **neg**(): [`Vec2`](Vec2) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### normalize() + +> **normalize**(): `number` + +Convert this vector into a unit vector. + +#### Returns + +`number` + +old length + +*** + +### set() + +Set this vector to some specified coordinates. + +#### set(x, y) + +> **set**(`x`, `y`): [`Vec2`](Vec2) + +Set this vector to some specified coordinates. + +##### Parameters + +• **x**: `number` + +• **y**: `number` + +##### Returns + +[`Vec2`](Vec2) + +#### set(value) + +> **set**(`value`): [`Vec2`](Vec2) + +Set this vector to some specified coordinates. + +##### Parameters + +• **value**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +[`Vec2`](Vec2) + +*** + +### setCombine() + +> **setCombine**(`a`, `v`, `b`, `w`): [`Vec2`](Vec2) + +Set linear combination of v and w: `a * v + b * w` + +#### Parameters + +• **a**: `number` + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **b**: `number` + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### setMul() + +> **setMul**(`a`, `v`): [`Vec2`](Vec2) + +#### Parameters + +• **a**: `number` + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### setNum() + +> **setNum**(`x`, `y`): [`Vec2`](Vec2) + +Set this vector to some specified coordinates. + +#### Parameters + +• **x**: `number` + +• **y**: `number` + +#### Returns + +[`Vec2`](Vec2) + +this + +*** + +### setVec2() + +> **setVec2**(`value`): [`Vec2`](Vec2) + +Set this vector to some specified coordinates. + +#### Parameters + +• **value**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +this + +*** + +### setZero() + +> **setZero**(): [`Vec2`](Vec2) + +Set this vector to all zeros. + +#### Returns + +[`Vec2`](Vec2) + +this + +*** + +### sub() + +> **sub**(`w`): [`Vec2`](Vec2) + +Subtract a vector from this vector + +#### Parameters + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +this + +*** + +### subCombine() + +> **subCombine**(`a`, `v`, `b`, `w`): [`Vec2`](Vec2) + +Subtract linear combination of v and w: `a * v + b * w` + +#### Parameters + +• **a**: `number` + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **b**: `number` + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### subMul() + +> **subMul**(`a`, `v`): [`Vec2`](Vec2) + +#### Parameters + +• **a**: `number` + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### ~~wSub()~~ + +> **wSub**(`a`, `v`, `b`?, `w`?): [`Vec2`](Vec2) + +#### Parameters + +• **a**: `number` + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **b?**: `number` + +• **w?**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +#### Deprecated + +Use subCombine or subMul + +*** + +### abs() + +> `static` **abs**(`v`): [`Vec2`](Vec2) + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### add() + +> `static` **add**(`v`, `w`): [`Vec2`](Vec2) + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### addCross() + +#### addCross(a, v, w) + +> `static` **addCross**(`a`, `v`, `w`): [`Vec2`](Vec2) + +Returns `a + (v x w)` + +##### Parameters + +• **a**: [`Vec2Value`](../interfaces/Vec2Value) + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: `number` + +##### Returns + +[`Vec2`](Vec2) + +#### addCross(a, v, w) + +> `static` **addCross**(`a`, `v`, `w`): [`Vec2`](Vec2) + +Returns `a + (v x w)` + +##### Parameters + +• **a**: [`Vec2Value`](../interfaces/Vec2Value) + +• **v**: `number` + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +[`Vec2`](Vec2) + +*** + +### addCrossNumVec2() + +> `static` **addCrossNumVec2**(`a`, `v`, `w`): [`Vec2`](Vec2) + +Returns `a + (v x w)` + +#### Parameters + +• **a**: [`Vec2Value`](../interfaces/Vec2Value) + +• **v**: `number` + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### addCrossVec2Num() + +> `static` **addCrossVec2Num**(`a`, `v`, `w`): [`Vec2`](Vec2) + +Returns `a + (v x w)` + +#### Parameters + +• **a**: [`Vec2Value`](../interfaces/Vec2Value) + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: `number` + +#### Returns + +[`Vec2`](Vec2) + +*** + +### areEqual() + +> `static` **areEqual**(`v`, `w`): `boolean` + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`boolean` + +*** + +### assert() + +> `static` **assert**(`o`): `void` + +#### Parameters + +• **o**: `any` + +#### Returns + +`void` + +*** + +### clamp() + +> `static` **clamp**(`v`, `max`): [`Vec2`](Vec2) + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **max**: `number` + +#### Returns + +[`Vec2`](Vec2) + +*** + +### clone() + +> `static` **clone**(`v`): [`Vec2`](Vec2) + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### combine() + +> `static` **combine**(`a`, `v`, `b`, `w`): [`Vec2`](Vec2) + +#### Parameters + +• **a**: `number` + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **b**: `number` + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### cross() + +#### cross(v, w) + +> `static` **cross**(`v`, `w`): `number` + +Cross product between two vectors + +##### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +`number` + +#### cross(v, w) + +> `static` **cross**(`v`, `w`): [`Vec2`](Vec2) + +Cross product between a vector and a scalar + +##### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: `number` + +##### Returns + +[`Vec2`](Vec2) + +#### cross(v, w) + +> `static` **cross**(`v`, `w`): [`Vec2`](Vec2) + +Cross product between a scalar and a vector + +##### Parameters + +• **v**: `number` + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +[`Vec2`](Vec2) + +*** + +### crossNumVec2() + +> `static` **crossNumVec2**(`v`, `w`): [`Vec2`](Vec2) + +Cross product on a vector and a scalar + +#### Parameters + +• **v**: `number` + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### crossVec2Num() + +> `static` **crossVec2Num**(`v`, `w`): [`Vec2`](Vec2) + +Cross product on a vector and a scalar + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: `number` + +#### Returns + +[`Vec2`](Vec2) + +*** + +### crossVec2Vec2() + +> `static` **crossVec2Vec2**(`v`, `w`): `number` + +Cross product on two vectors + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`number` + +*** + +### distance() + +> `static` **distance**(`v`, `w`): `number` + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`number` + +*** + +### distanceSquared() + +> `static` **distanceSquared**(`v`, `w`): `number` + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`number` + +*** + +### dot() + +> `static` **dot**(`v`, `w`): `number` + +Dot product on two vectors + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`number` + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` + +Does this vector contain finite coordinates? + +#### Parameters + +• **obj**: `any` + +#### Returns + +`boolean` + +*** + +### lengthOf() + +> `static` **lengthOf**(`v`): `number` + +Get the length of this vector (the norm). + +For performance, use this instead of lengthSquared (if possible). + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`number` + +*** + +### lengthSquared() + +> `static` **lengthSquared**(`v`): `number` + +Get the length squared. + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`number` + +*** + +### lower() + +> `static` **lower**(`v`, `w`): [`Vec2`](Vec2) + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### mid() + +> `static` **mid**(`v`, `w`): [`Vec2`](Vec2) + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### mul() + +#### mul(a, b) + +> `static` **mul**(`a`, `b`): [`Vec2`](Vec2) + +##### Parameters + +• **a**: [`Vec2Value`](../interfaces/Vec2Value) + +• **b**: `number` + +##### Returns + +[`Vec2`](Vec2) + +#### mul(a, b) + +> `static` **mul**(`a`, `b`): [`Vec2`](Vec2) + +##### Parameters + +• **a**: `number` + +• **b**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +[`Vec2`](Vec2) + +*** + +### mulNumVec2() + +> `static` **mulNumVec2**(`a`, `b`): [`Vec2`](Vec2) + +#### Parameters + +• **a**: `number` + +• **b**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### mulVec2Num() + +> `static` **mulVec2Num**(`a`, `b`): [`Vec2`](Vec2) + +#### Parameters + +• **a**: [`Vec2Value`](../interfaces/Vec2Value) + +• **b**: `number` + +#### Returns + +[`Vec2`](Vec2) + +*** + +### neg() + +> `static` **neg**(`v`): [`Vec2`](Vec2) + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### skew() + +> `static` **skew**(`v`): [`Vec2`](Vec2) + +Get the skew vector such that dot(skew_vec, other) == cross(vec, other) + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### sub() + +> `static` **sub**(`v`, `w`): [`Vec2`](Vec2) + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### upper() + +> `static` **upper**(`v`, `w`): [`Vec2`](Vec2) + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### zero() + +> `static` **zero**(): [`Vec2`](Vec2) + +#### Returns + +[`Vec2`](Vec2) diff --git a/docs/pages/api/classes/Vec3.md b/docs/pages/api/classes/Vec3.md new file mode 100644 index 00000000..c52ad1cd --- /dev/null +++ b/docs/pages/api/classes/Vec3.md @@ -0,0 +1,307 @@ +# Class: Vec3 + +3D vector + +## Constructors + +### new Vec3() + +> **new Vec3**(`x`, `y`, `z`): [`Vec3`](Vec3) + +#### Parameters + +• **x**: `number` + +• **y**: `number` + +• **z**: `number` + +#### Returns + +[`Vec3`](Vec3) + +### new Vec3() + +> **new Vec3**(`obj`): [`Vec3`](Vec3) + +#### Parameters + +• **obj**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns + +[`Vec3`](Vec3) + +### new Vec3() + +> **new Vec3**(): [`Vec3`](Vec3) + +#### Returns + +[`Vec3`](Vec3) + +## Properties + +### x + +> **x**: `number` + +*** + +### y + +> **y**: `number` + +*** + +### z + +> **z**: `number` + +## Methods + +### add() + +> **add**(`w`): [`Vec3`](Vec3) + +#### Parameters + +• **w**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns + +[`Vec3`](Vec3) + +*** + +### mul() + +> **mul**(`m`): [`Vec3`](Vec3) + +#### Parameters + +• **m**: `number` + +#### Returns + +[`Vec3`](Vec3) + +*** + +### neg() + +> **neg**(): [`Vec3`](Vec3) + +#### Returns + +[`Vec3`](Vec3) + +*** + +### set() + +> **set**(`x`, `y`, `z`): [`Vec3`](Vec3) + +#### Parameters + +• **x**: `number` + +• **y**: `number` + +• **z**: `number` + +#### Returns + +[`Vec3`](Vec3) + +*** + +### setZero() + +> **setZero**(): [`Vec3`](Vec3) + +#### Returns + +[`Vec3`](Vec3) + +*** + +### sub() + +> **sub**(`w`): [`Vec3`](Vec3) + +#### Parameters + +• **w**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns + +[`Vec3`](Vec3) + +*** + +### add() + +> `static` **add**(`v`, `w`): [`Vec3`](Vec3) + +#### Parameters + +• **v**: [`Vec3Value`](../interfaces/Vec3Value) + +• **w**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns + +[`Vec3`](Vec3) + +*** + +### areEqual() + +> `static` **areEqual**(`v`, `w`): `boolean` + +#### Parameters + +• **v**: [`Vec3Value`](../interfaces/Vec3Value) + +• **w**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns + +`boolean` + +*** + +### assert() + +> `static` **assert**(`o`): `void` + +#### Parameters + +• **o**: `any` + +#### Returns + +`void` + +*** + +### clone() + +> `static` **clone**(`v`): [`Vec3`](Vec3) + +#### Parameters + +• **v**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns + +[`Vec3`](Vec3) + +*** + +### cross() + +> `static` **cross**(`v`, `w`): [`Vec3`](Vec3) + +Cross product on two vectors + +#### Parameters + +• **v**: [`Vec3Value`](../interfaces/Vec3Value) + +• **w**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns + +[`Vec3`](Vec3) + +*** + +### dot() + +> `static` **dot**(`v`, `w`): `number` + +Dot product on two vectors + +#### Parameters + +• **v**: [`Vec3Value`](../interfaces/Vec3Value) + +• **w**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns + +`number` + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` + +Does this vector contain finite coordinates? + +#### Parameters + +• **obj**: `any` + +#### Returns + +`boolean` + +*** + +### mul() + +> `static` **mul**(`v`, `m`): [`Vec3`](Vec3) + +#### Parameters + +• **v**: [`Vec3Value`](../interfaces/Vec3Value) + +• **m**: `number` + +#### Returns + +[`Vec3`](Vec3) + +*** + +### neg() + +> `static` **neg**(`v`): [`Vec3`](Vec3) + +#### Parameters + +• **v**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns + +[`Vec3`](Vec3) + +*** + +### sub() + +> `static` **sub**(`v`, `w`): [`Vec3`](Vec3) + +#### Parameters + +• **v**: [`Vec3Value`](../interfaces/Vec3Value) + +• **w**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns + +[`Vec3`](Vec3) + +*** + +### zero() + +> `static` **zero**(): [`Vec3`](Vec3) + +#### Returns + +[`Vec3`](Vec3) diff --git a/docs/pages/api/classes/VelocityConstraintPoint.md b/docs/pages/api/classes/VelocityConstraintPoint.md new file mode 100644 index 00000000..b2a6f24a --- /dev/null +++ b/docs/pages/api/classes/VelocityConstraintPoint.md @@ -0,0 +1,63 @@ +# Class: VelocityConstraintPoint + +## Constructors + +### new VelocityConstraintPoint() + +> **new VelocityConstraintPoint**(): [`VelocityConstraintPoint`](VelocityConstraintPoint) + +#### Returns + +[`VelocityConstraintPoint`](VelocityConstraintPoint) + +## Properties + +### normalImpulse + +> **normalImpulse**: `number` = `0` + +*** + +### normalMass + +> **normalMass**: `number` = `0` + +*** + +### rA + +> **rA**: [`Vec2Value`](../interfaces/Vec2Value) + +*** + +### rB + +> **rB**: [`Vec2Value`](../interfaces/Vec2Value) + +*** + +### tangentImpulse + +> **tangentImpulse**: `number` = `0` + +*** + +### tangentMass + +> **tangentMass**: `number` = `0` + +*** + +### velocityBias + +> **velocityBias**: `number` = `0` + +## Methods + +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` diff --git a/docs/pages/api/classes/WeldJoint.md b/docs/pages/api/classes/WeldJoint.md new file mode 100644 index 00000000..a2876be7 --- /dev/null +++ b/docs/pages/api/classes/WeldJoint.md @@ -0,0 +1,436 @@ +# Class: WeldJoint + +A weld joint essentially glues two bodies together. A weld joint may distort +somewhat because the island constraint solver is approximate. + +## Extends + +- [`Joint`](Joint) + +## Constructors + +### new WeldJoint() + +> **new WeldJoint**(`def`): [`WeldJoint`](WeldJoint) + +#### Parameters + +• **def**: [`WeldJointDef`](../interfaces/WeldJointDef) + +#### Returns + +[`WeldJoint`](WeldJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +### new WeldJoint() + +> **new WeldJoint**(`def`, `bodyA`, `bodyB`, `anchor`): [`WeldJoint`](WeldJoint) + +#### Parameters + +• **def**: [`WeldJointOpt`](../interfaces/WeldJointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) + +• **anchor**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`WeldJoint`](WeldJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Joint`](Joint).[`style`](Joint#style) + +*** + +### TYPE + +> `static` **TYPE**: `"weld-joint"` + +## Methods + +### getAnchorA() + +> **getAnchorA**(): [`Vec2`](Vec2) + +Get the anchor point on bodyA in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) + +*** + +### getAnchorB() + +> **getAnchorB**(): [`Vec2`](Vec2) + +Get the anchor point on bodyB in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) + +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) + +Get the first body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) + +*** + +### getBodyB() + +> **getBodyB**(): [`Body`](Body) + +Get the second body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) + +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` + +Get collide connected. Note: modifying the collide connect flag won't work +correctly because the flag is only checked when fixture AABBs begin to +overlap. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) + +*** + +### getDampingRatio() + +> **getDampingRatio**(): `number` + +Get damping ratio. + +#### Returns + +`number` + +*** + +### getFrequency() + +> **getFrequency**(): `number` + +Get frequency in Hz. + +#### Returns + +`number` + +*** + +### getLocalAnchorA() + +> **getLocalAnchorA**(): [`Vec2`](Vec2) + +The local anchor point relative to bodyA's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLocalAnchorB() + +> **getLocalAnchorB**(): [`Vec2`](Vec2) + +The local anchor point relative to bodyB's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getNext() + +> **getNext**(): [`Joint`](Joint) + +Get the next joint the world joint list. + +#### Returns + +[`Joint`](Joint) + +#### Inherited from + +[`Joint`](Joint).[`getNext`](Joint#getnext) + +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) + +Get the reaction force on bodyB at the joint anchor in Newtons. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) + +*** + +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` + +Get the reaction torque on bodyB in N*m. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +#### Overrides + +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) + +*** + +### getReferenceAngle() + +> **getReferenceAngle**(): `number` + +Get the reference angle. + +#### Returns + +`number` + +*** + +### getType() + +> **getType**(): `string` + +Get the type of the concrete joint. + +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) + +*** + +### getUserData() + +> **getUserData**(): `unknown` + +#### Returns + +`unknown` + +#### Inherited from + +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) + +*** + +### initVelocityConstraints() + +> **initVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` + +Short-cut function to determine if either body is inactive. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`isActive`](Joint#isactive) + +*** + +### setDampingRatio() + +> **setDampingRatio**(`ratio`): `void` + +Set damping ratio. + +#### Parameters + +• **ratio**: `number` + +#### Returns + +`void` + +*** + +### setFrequency() + +> **setFrequency**(`hz`): `void` + +Set frequency in Hz. + +#### Parameters + +• **hz**: `number` + +#### Returns + +`void` + +*** + +### setUserData() + +> **setUserData**(`data`): `void` + +#### Parameters + +• **data**: `unknown` + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the origin for any points stored in world coordinates. + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) + +*** + +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` + +This returns true if the position errors are within tolerance. + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) + +*** + +### solveVelocityConstraints() + +> **solveVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/WheelJoint.md b/docs/pages/api/classes/WheelJoint.md new file mode 100644 index 00000000..8abd550a --- /dev/null +++ b/docs/pages/api/classes/WheelJoint.md @@ -0,0 +1,559 @@ +# Class: WheelJoint + +A wheel joint. This joint provides two degrees of freedom: translation along +an axis fixed in bodyA and rotation in the plane. In other words, it is a +point to line constraint with a rotational motor and a linear spring/damper. +This joint is designed for vehicle suspensions. + +## Extends + +- [`Joint`](Joint) + +## Constructors + +### new WheelJoint() + +> **new WheelJoint**(`def`): [`WheelJoint`](WheelJoint) + +#### Parameters + +• **def**: [`WheelJointDef`](../interfaces/WheelJointDef) + +#### Returns + +[`WheelJoint`](WheelJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +### new WheelJoint() + +> **new WheelJoint**(`def`, `bodyA`, `bodyB`, `anchor`, `axis`): [`WheelJoint`](WheelJoint) + +#### Parameters + +• **def**: [`WheelJointOpt`](../interfaces/WheelJointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) + +• **anchor**: [`Vec2Value`](../interfaces/Vec2Value) + +• **axis**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`WheelJoint`](WheelJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` + +Styling for dev-tools. + +#### Inherited from + +[`Joint`](Joint).[`style`](Joint#style) + +*** + +### TYPE + +> `static` **TYPE**: `"wheel-joint"` + +## Methods + +### enableMotor() + +> **enableMotor**(`flag`): `void` + +Enable/disable the joint motor. + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### getAnchorA() + +> **getAnchorA**(): [`Vec2`](Vec2) + +Get the anchor point on bodyA in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) + +*** + +### getAnchorB() + +> **getAnchorB**(): [`Vec2`](Vec2) + +Get the anchor point on bodyB in world coordinates. + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) + +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) + +Get the first body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) + +*** + +### getBodyB() + +> **getBodyB**(): [`Body`](Body) + +Get the second body attached to this joint. + +#### Returns + +[`Body`](Body) + +#### Inherited from + +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) + +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` + +Get collide connected. Note: modifying the collide connect flag won't work +correctly because the flag is only checked when fixture AABBs begin to +overlap. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) + +*** + +### getJointSpeed() + +> **getJointSpeed**(): `number` + +Get the current joint translation speed, usually in meters per second. + +#### Returns + +`number` + +*** + +### getJointTranslation() + +> **getJointTranslation**(): `number` + +Get the current joint translation, usually in meters. + +#### Returns + +`number` + +*** + +### getLocalAnchorA() + +> **getLocalAnchorA**(): [`Vec2`](Vec2) + +The local anchor point relative to bodyA's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLocalAnchorB() + +> **getLocalAnchorB**(): [`Vec2`](Vec2) + +The local anchor point relative to bodyB's origin. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getLocalAxisA() + +> **getLocalAxisA**(): [`Vec2`](Vec2) + +The local joint axis relative to bodyA. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getMaxMotorTorque() + +> **getMaxMotorTorque**(): `number` + +#### Returns + +`number` + +*** + +### getMotorSpeed() + +> **getMotorSpeed**(): `number` + +Get the motor speed, usually in radians per second. + +#### Returns + +`number` + +*** + +### getMotorTorque() + +> **getMotorTorque**(`inv_dt`): `number` + +Get the current motor torque given the inverse time step, usually in N-m. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +*** + +### getNext() + +> **getNext**(): [`Joint`](Joint) + +Get the next joint the world joint list. + +#### Returns + +[`Joint`](Joint) + +#### Inherited from + +[`Joint`](Joint).[`getNext`](Joint#getnext) + +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) + +Get the reaction force on bodyB at the joint anchor in Newtons. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) + +*** + +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` + +Get the reaction torque on bodyB in N*m. + +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` + +#### Overrides + +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) + +*** + +### getSpringDampingRatio() + +> **getSpringDampingRatio**(): `number` + +#### Returns + +`number` + +*** + +### getSpringFrequencyHz() + +> **getSpringFrequencyHz**(): `number` + +#### Returns + +`number` + +*** + +### getType() + +> **getType**(): `string` + +Get the type of the concrete joint. + +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) + +*** + +### getUserData() + +> **getUserData**(): `unknown` + +#### Returns + +`unknown` + +#### Inherited from + +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) + +*** + +### initVelocityConstraints() + +> **initVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` + +Short-cut function to determine if either body is inactive. + +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`isActive`](Joint#isactive) + +*** + +### isMotorEnabled() + +> **isMotorEnabled**(): `boolean` + +Is the joint motor enabled? + +#### Returns + +`boolean` + +*** + +### setMaxMotorTorque() + +> **setMaxMotorTorque**(`torque`): `void` + +Set/Get the maximum motor force, usually in N-m. + +#### Parameters + +• **torque**: `number` + +#### Returns + +`void` + +*** + +### setMotorSpeed() + +> **setMotorSpeed**(`speed`): `void` + +Set the motor speed, usually in radians per second. + +#### Parameters + +• **speed**: `number` + +#### Returns + +`void` + +*** + +### setSpringDampingRatio() + +> **setSpringDampingRatio**(`ratio`): `void` + +Set/Get the spring damping ratio + +#### Parameters + +• **ratio**: `number` + +#### Returns + +`void` + +*** + +### setSpringFrequencyHz() + +> **setSpringFrequencyHz**(`hz`): `void` + +Set/Get the spring frequency in hertz. Setting the frequency to zero disables +the spring. + +#### Parameters + +• **hz**: `number` + +#### Returns + +`void` + +*** + +### setUserData() + +> **setUserData**(`data`): `void` + +#### Parameters + +• **data**: `unknown` + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the origin for any points stored in world coordinates. + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +#### Inherited from + +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) + +*** + +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` + +This returns true if the position errors are within tolerance. + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) + +*** + +### solveVelocityConstraints() + +> **solveVelocityConstraints**(`step`): `void` + +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +#### Overrides + +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/World.md b/docs/pages/api/classes/World.md new file mode 100644 index 00000000..8d1bd86a --- /dev/null +++ b/docs/pages/api/classes/World.md @@ -0,0 +1,885 @@ +# Class: World + +The `World` class contains the bodies and joints. It manages all aspects +of the simulation and allows for asynchronous queries (like AABB queries +and ray-casts). Much of your interactions with Planck.js will be with a +World object. + +## Constructors + +### new World() + +> **new World**(`def`?): [`World`](World) + +#### Parameters + +• **def?**: [`Vec2`](Vec2) \| [`WorldDef`](../interfaces/WorldDef) + +World definition or gravity vector. + +#### Returns + +[`World`](World) + +## Methods + +### clearForces() + +> **clearForces**(): `void` + +Manually clear the force buffer on all bodies. By default, forces are cleared +automatically after each call to step. The default behavior is modified by +calling setAutoClearForces. The purpose of this function is to support +sub-stepping. Sub-stepping is often used to maintain a fixed sized time step +under a variable frame-rate. When you perform sub-stepping you will disable +auto clearing of forces and instead call clearForces after all sub-steps are +complete in one pass of your game loop. + +See [World.setAutoClearForces](World#setautoclearforces) + +#### Returns + +`void` + +*** + +### createBody() + +#### createBody(def) + +> **createBody**(`def`?): [`Body`](Body) + +Create a rigid body given a definition. No reference to the definition is +retained. + +Warning: This function is locked during callbacks. + +##### Parameters + +• **def?**: [`BodyDef`](../interfaces/BodyDef) + +##### Returns + +[`Body`](Body) + +#### createBody(position, angle) + +> **createBody**(`position`, `angle`?): [`Body`](Body) + +##### Parameters + +• **position**: [`Vec2Value`](../interfaces/Vec2Value) + +• **angle?**: `number` + +##### Returns + +[`Body`](Body) + +*** + +### createDynamicBody() + +#### createDynamicBody(def) + +> **createDynamicBody**(`def`?): [`Body`](Body) + +##### Parameters + +• **def?**: [`BodyDef`](../interfaces/BodyDef) + +##### Returns + +[`Body`](Body) + +#### createDynamicBody(position, angle) + +> **createDynamicBody**(`position`, `angle`?): [`Body`](Body) + +##### Parameters + +• **position**: [`Vec2Value`](../interfaces/Vec2Value) + +• **angle?**: `number` + +##### Returns + +[`Body`](Body) + +*** + +### createJoint() + +> **createJoint**\<`T`\>(`joint`): `T` + +Create a joint to constrain bodies together. No reference to the definition +is retained. This may cause the connected bodies to cease colliding. + +Warning: This function is locked during callbacks. + +#### Type Parameters + +• **T** *extends* [`Joint`](Joint) + +#### Parameters + +• **joint**: `T` + +#### Returns + +`T` + +*** + +### createKinematicBody() + +#### createKinematicBody(def) + +> **createKinematicBody**(`def`?): [`Body`](Body) + +##### Parameters + +• **def?**: [`BodyDef`](../interfaces/BodyDef) + +##### Returns + +[`Body`](Body) + +#### createKinematicBody(position, angle) + +> **createKinematicBody**(`position`, `angle`?): [`Body`](Body) + +##### Parameters + +• **position**: [`Vec2Value`](../interfaces/Vec2Value) + +• **angle?**: `number` + +##### Returns + +[`Body`](Body) + +*** + +### destroyBody() + +> **destroyBody**(`b`): `boolean` + +Destroy a rigid body given a definition. No reference to the definition is +retained. + +Warning: This automatically deletes all associated shapes and joints. + +Warning: This function is locked during callbacks. + +#### Parameters + +• **b**: [`Body`](Body) + +#### Returns + +`boolean` + +*** + +### destroyJoint() + +> **destroyJoint**(`joint`): `void` + +Destroy a joint. This may cause the connected bodies to begin colliding. +Warning: This function is locked during callbacks. + +#### Parameters + +• **joint**: [`Joint`](Joint) + +#### Returns + +`void` + +*** + +### getAllowSleeping() + +> **getAllowSleeping**(): `boolean` + +#### Returns + +`boolean` + +*** + +### getAutoClearForces() + +> **getAutoClearForces**(): `boolean` + +Get the flag that controls automatic clearing of forces after each time step. + +#### Returns + +`boolean` + +*** + +### getBodyCount() + +> **getBodyCount**(): `number` + +#### Returns + +`number` + +*** + +### getBodyList() + +> **getBodyList**(): [`Body`](Body) + +Get the world body list. With the returned body, use Body.getNext to get the +next body in the world list. A null body indicates the end of the list. + +#### Returns + +[`Body`](Body) + +the head of the world body list. + +*** + +### getContactCount() + +> **getContactCount**(): `number` + +Get the number of contacts (each may have 0 or more contact points). + +#### Returns + +`number` + +*** + +### getContactList() + +> **getContactList**(): [`Contact`](Contact) + +Get the world contact list. With the returned contact, use Contact.getNext to +get the next contact in the world list. A null contact indicates the end of +the list. + +Warning: contacts are created and destroyed in the middle of a time step. +Use ContactListener to avoid missing contacts. + +#### Returns + +[`Contact`](Contact) + +the head of the world contact list. + +*** + +### getContinuousPhysics() + +> **getContinuousPhysics**(): `boolean` + +#### Returns + +`boolean` + +*** + +### getGravity() + +> **getGravity**(): [`Vec2`](Vec2) + +Get the global gravity vector. + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getJointCount() + +> **getJointCount**(): `number` + +#### Returns + +`number` + +*** + +### getJointList() + +> **getJointList**(): [`Joint`](Joint) + +Get the world joint list. With the returned joint, use Joint.getNext to get +the next joint in the world list. A null joint indicates the end of the list. + +#### Returns + +[`Joint`](Joint) + +the head of the world joint list. + +*** + +### getProxyCount() + +> **getProxyCount**(): `number` + +Get the number of broad-phase proxies. + +#### Returns + +`number` + +*** + +### getSubStepping() + +> **getSubStepping**(): `boolean` + +#### Returns + +`boolean` + +*** + +### getTreeBalance() + +> **getTreeBalance**(): `number` + +Get the balance of broad-phase dynamic tree. + +#### Returns + +`number` + +*** + +### getTreeHeight() + +> **getTreeHeight**(): `number` + +Get the height of broad-phase dynamic tree. + +#### Returns + +`number` + +*** + +### getTreeQuality() + +> **getTreeQuality**(): `number` + +Get the quality metric of broad-phase dynamic tree. The smaller the better. +The minimum is 1. + +#### Returns + +`number` + +*** + +### getWarmStarting() + +> **getWarmStarting**(): `boolean` + +#### Returns + +`boolean` + +*** + +### isLocked() + +> **isLocked**(): `boolean` + +Is the world locked (in the middle of a time step). + +#### Returns + +`boolean` + +*** + +### off() + +Remove an event listener. + +#### off(name, listener) + +> **off**(`name`, `listener`): [`World`](World) + +Remove an event listener. + +##### Parameters + +• **name**: `"begin-contact"` + +• **listener** + +##### Returns + +[`World`](World) + +#### off(name, listener) + +> **off**(`name`, `listener`): [`World`](World) + +Remove an event listener. + +##### Parameters + +• **name**: `"end-contact"` + +• **listener** + +##### Returns + +[`World`](World) + +#### off(name, listener) + +> **off**(`name`, `listener`): [`World`](World) + +Remove an event listener. + +##### Parameters + +• **name**: `"pre-solve"` + +• **listener** + +##### Returns + +[`World`](World) + +#### off(name, listener) + +> **off**(`name`, `listener`): [`World`](World) + +Remove an event listener. + +##### Parameters + +• **name**: `"post-solve"` + +• **listener** + +##### Returns + +[`World`](World) + +#### off(name, listener) + +> **off**(`name`, `listener`): [`World`](World) + +Remove an event listener. + +##### Parameters + +• **name**: `"remove-body"` + +• **listener** + +##### Returns + +[`World`](World) + +#### off(name, listener) + +> **off**(`name`, `listener`): [`World`](World) + +Remove an event listener. + +##### Parameters + +• **name**: `"remove-joint"` + +• **listener** + +##### Returns + +[`World`](World) + +#### off(name, listener) + +> **off**(`name`, `listener`): [`World`](World) + +Remove an event listener. + +##### Parameters + +• **name**: `"remove-fixture"` + +• **listener** + +##### Returns + +[`World`](World) + +*** + +### on() + +Register an event listener. + +#### on(name, listener) + +> **on**(`name`, `listener`): [`World`](World) + +Called when two fixtures begin to touch. + +Implement contact callbacks to get contact information. You can use these +results for things like sounds and game logic. You can also get contact +results by traversing the contact lists after the time step. However, you +might miss some contacts because continuous physics leads to sub-stepping. +Additionally you may receive multiple callbacks for the same contact in a +single time step. You should strive to make your callbacks efficient because +there may be many callbacks per time step. + +Warning: You cannot create/destroy world entities inside these callbacks. + +##### Parameters + +• **name**: `"begin-contact"` + +• **listener** + +##### Returns + +[`World`](World) + +#### on(name, listener) + +> **on**(`name`, `listener`): [`World`](World) + +Called when two fixtures cease to touch. + +Implement contact callbacks to get contact information. You can use these +results for things like sounds and game logic. You can also get contact +results by traversing the contact lists after the time step. However, you +might miss some contacts because continuous physics leads to sub-stepping. +Additionally you may receive multiple callbacks for the same contact in a +single time step. You should strive to make your callbacks efficient because +there may be many callbacks per time step. + +Warning: You cannot create/destroy world entities inside these callbacks. + +##### Parameters + +• **name**: `"end-contact"` + +• **listener** + +##### Returns + +[`World`](World) + +#### on(name, listener) + +> **on**(`name`, `listener`): [`World`](World) + +This is called after a contact is updated. This allows you to inspect a +contact before it goes to the solver. If you are careful, you can modify the +contact manifold (e.g. disable contact). A copy of the old manifold is +provided so that you can detect changes. Note: this is called only for awake +bodies. Note: this is called even when the number of contact points is zero. +Note: this is not called for sensors. Note: if you set the number of contact +points to zero, you will not get an end-contact callback. However, you may get +a begin-contact callback the next step. + +Warning: You cannot create/destroy world entities inside these callbacks. + +##### Parameters + +• **name**: `"pre-solve"` + +• **listener** + +##### Returns + +[`World`](World) + +#### on(name, listener) + +> **on**(`name`, `listener`): [`World`](World) + +This lets you inspect a contact after the solver is finished. This is useful +for inspecting impulses. Note: the contact manifold does not include time of +impact impulses, which can be arbitrarily large if the sub-step is small. +Hence the impulse is provided explicitly in a separate data structure. Note: +this is only called for contacts that are touching, solid, and awake. + +Warning: You cannot create/destroy world entities inside these callbacks. + +##### Parameters + +• **name**: `"post-solve"` + +• **listener** + +##### Returns + +[`World`](World) + +#### on(name, listener) + +> **on**(`name`, `listener`): [`World`](World) + +Listener is called whenever a body is removed. + +##### Parameters + +• **name**: `"remove-body"` + +• **listener** + +##### Returns + +[`World`](World) + +#### on(name, listener) + +> **on**(`name`, `listener`): [`World`](World) + +Listener is called whenever a joint is removed implicitly or explicitly. + +##### Parameters + +• **name**: `"remove-joint"` + +• **listener** + +##### Returns + +[`World`](World) + +#### on(name, listener) + +> **on**(`name`, `listener`): [`World`](World) + +Listener is called whenever a fixture is removed implicitly or explicitly. + +##### Parameters + +• **name**: `"remove-fixture"` + +• **listener** + +##### Returns + +[`World`](World) + +*** + +### publish() + +> **publish**(`name`, `arg1`?, `arg2`?, `arg3`?): `number` + +#### Parameters + +• **name**: `string` + +• **arg1?**: `any` + +• **arg2?**: `any` + +• **arg3?**: `any` + +#### Returns + +`number` + +*** + +### queryAABB() + +> **queryAABB**(`aabb`, `callback`): `void` + +Query the world for all fixtures that potentially overlap the provided AABB. + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +The query box. + +• **callback**: [`WorldAABBQueryCallback`](../type-aliases/WorldAABBQueryCallback) + +Called for each fixture found in the query AABB. It may return `false` to terminate the query. + +#### Returns + +`void` + +*** + +### rayCast() + +> **rayCast**(`point1`, `point2`, `callback`): `void` + +Ray-cast the world for all fixtures in the path of the ray. Your callback +controls whether you get the closest point, any point, or n-points. The +ray-cast ignores shapes that contain the starting point. + +#### Parameters + +• **point1**: [`Vec2Value`](../interfaces/Vec2Value) + +The ray starting point + +• **point2**: [`Vec2Value`](../interfaces/Vec2Value) + +The ray ending point + +• **callback**: [`WorldRayCastCallback`](../type-aliases/WorldRayCastCallback) + +A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value. + +#### Returns + +`void` + +*** + +### setAllowSleeping() + +> **setAllowSleeping**(`flag`): `void` + +Enable/disable sleep. + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### setAutoClearForces() + +> **setAutoClearForces**(`flag`): `void` + +Set flag to control automatic clearing of forces after each time step. + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### setContinuousPhysics() + +> **setContinuousPhysics**(`flag`): `void` + +Enable/disable continuous physics. For testing. + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### setGravity() + +> **setGravity**(`gravity`): `void` + +Change the global gravity vector. + +#### Parameters + +• **gravity**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`void` + +*** + +### setSubStepping() + +> **setSubStepping**(`flag`): `void` + +Enable/disable single stepped continuous physics. For testing. + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### setWarmStarting() + +> **setWarmStarting**(`flag`): `void` + +Enable/disable warm starting. For testing. + +#### Parameters + +• **flag**: `boolean` + +#### Returns + +`void` + +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` + +Shift the world origin. Useful for large worlds. The body shift formula is: +position -= newOrigin + +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +The new origin with respect to the old origin + +#### Returns + +`void` + +*** + +### step() + +> **step**(`timeStep`, `velocityIterations`?, `positionIterations`?): `void` + +Take a time step. This performs collision detection, integration, and +constraint solution. + +Broad-phase, narrow-phase, solve and solve time of impacts. + +#### Parameters + +• **timeStep**: `number` + +Time step, this should not vary. + +• **velocityIterations?**: `number` + +• **positionIterations?**: `number` + +#### Returns + +`void` diff --git a/docs/pages/api/classes/WorldManifold.md b/docs/pages/api/classes/WorldManifold.md new file mode 100644 index 00000000..4776630c --- /dev/null +++ b/docs/pages/api/classes/WorldManifold.md @@ -0,0 +1,55 @@ +# Class: WorldManifold + +This is used to compute the current state of a contact manifold. + +## Constructors + +### new WorldManifold() + +> **new WorldManifold**(): [`WorldManifold`](WorldManifold) + +#### Returns + +[`WorldManifold`](WorldManifold) + +## Properties + +### normal + +> **normal**: [`Vec2Value`](../interfaces/Vec2Value) + +World vector pointing from A to B + +*** + +### pointCount + +> **pointCount**: `number` = `0` + +The number of manifold points + +*** + +### points + +> **points**: [`Vec2Value`](../interfaces/Vec2Value)[] + +World contact point (point of intersection) + +*** + +### separations + +> **separations**: `number`[] + +A negative value indicates overlap, in meters + +## Methods + +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` diff --git a/docs/pages/api/classes/aabb.md b/docs/pages/api/classes/aabb.md index e9ab8f70..0dea533a 100644 --- a/docs/pages/api/classes/aabb.md +++ b/docs/pages/api/classes/aabb.md @@ -1,313 +1,297 @@ - # Class: AABB -## Hierarchy +Axis-aligned bounding box -* **AABB** +## Constructors -## Index +### new AABB() -### Constructors +> **new AABB**(`lower`?, `upper`?): [`AABB`](AABB) -* [constructor](/api/classes/aabb#constructor) +#### Parameters -### Properties +• **lower?**: [`Vec2Value`](../interfaces/Vec2Value) -* [lowerBound](/api/classes/aabb#lowerbound) -* [upperBound](/api/classes/aabb#upperbound) +• **upper?**: [`Vec2Value`](../interfaces/Vec2Value) -### Methods +#### Returns -* [combine](/api/classes/aabb#combine) -* [combinePoints](/api/classes/aabb#combinepoints) -* [contains](/api/classes/aabb#contains) -* [extend](/api/classes/aabb#extend) -* [getCenter](/api/classes/aabb#getcenter) -* [getExtents](/api/classes/aabb#getextents) -* [getPerimeter](/api/classes/aabb#getperimeter) -* [isValid](/api/classes/aabb#isvalid) -* [rayCast](/api/classes/aabb#raycast) -* [set](/api/classes/aabb#set) -* [areEqual](/api/classes/aabb#static-areequal) -* [assert](/api/classes/aabb#static-assert) -* [combinePoints](/api/classes/aabb#static-combinepoints) -* [combinedPerimeter](/api/classes/aabb#static-combinedperimeter) -* [diff](/api/classes/aabb#static-diff) -* [extend](/api/classes/aabb#static-extend) -* [isValid](/api/classes/aabb#static-isvalid) -* [testOverlap](/api/classes/aabb#static-testoverlap) +[`AABB`](AABB) -## Constructors +## Properties -### constructor +### lowerBound -\+ **new AABB**(`lower?`: [Vec2Value](/api/interfaces/vec2value), `upper?`: [Vec2Value](/api/interfaces/vec2value)): *[AABB](/api/classes/aabb)* +> **lowerBound**: [`Vec2`](Vec2) -**Parameters:** +*** -Name | Type | ------- | ------ | -`lower?` | [Vec2Value](/api/interfaces/vec2value) | -`upper?` | [Vec2Value](/api/interfaces/vec2value) | +### upperBound -**Returns:** *[AABB](/api/classes/aabb)* +> **upperBound**: [`Vec2`](Vec2) -## Properties +## Methods -### lowerBound +### combine() -• **lowerBound**: *[Vec2](/api/classes/vec2)* +> **combine**(`a`, `b`?): `void` -___ +Combine one or two AABB into this one. -### upperBound +#### Parameters -• **upperBound**: *[Vec2](/api/classes/vec2)* +• **a**: [`AABBValue`](../interfaces/AABBValue) -## Methods +• **b?**: [`AABBValue`](../interfaces/AABBValue) -### combine +#### Returns -▸ **combine**(`a`: [AABBValue](/api/interfaces/aabbvalue), `b?`: [AABBValue](/api/interfaces/aabbvalue)): *void* +`void` -Combine one or two AABB into this one. +*** -**Parameters:** +### combinePoints() -Name | Type | ------- | ------ | -`a` | [AABBValue](/api/interfaces/aabbvalue) | -`b?` | [AABBValue](/api/interfaces/aabbvalue) | +> **combinePoints**(`a`, `b`): `void` -**Returns:** *void* +#### Parameters -___ +• **a**: [`Vec2Value`](../interfaces/Vec2Value) -### combinePoints +• **b**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **combinePoints**(`a`: [Vec2Value](/api/interfaces/vec2value), `b`: [Vec2Value](/api/interfaces/vec2value)): *void* +#### Returns -**Parameters:** +`void` -Name | Type | ------- | ------ | -`a` | [Vec2Value](/api/interfaces/vec2value) | -`b` | [Vec2Value](/api/interfaces/vec2value) | +*** -**Returns:** *void* +### contains() -___ +> **contains**(`aabb`): `boolean` -### contains +#### Parameters -▸ **contains**(`aabb`: [AABBValue](/api/interfaces/aabbvalue)): *boolean* +• **aabb**: [`AABBValue`](../interfaces/AABBValue) -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | +`boolean` -**Returns:** *boolean* +*** -___ +### extend() -### extend +> **extend**(`value`): [`AABB`](AABB) -▸ **extend**(`value`: number): *[AABB](/api/classes/aabb)* +#### Parameters -**Parameters:** +• **value**: `number` -Name | Type | ------- | ------ | -`value` | number | +#### Returns -**Returns:** *[AABB](/api/classes/aabb)* +[`AABB`](AABB) -___ +*** -### getCenter +### getCenter() -▸ **getCenter**(): *[Vec2](/api/classes/vec2)* +> **getCenter**(): [`Vec2`](Vec2) Get the center of the AABB. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getExtents +### getExtents() -▸ **getExtents**(): *[Vec2](/api/classes/vec2)* +> **getExtents**(): [`Vec2`](Vec2) Get the extents of the AABB (half-widths). -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getPerimeter +*** -▸ **getPerimeter**(): *number* +### getPerimeter() + +> **getPerimeter**(): `number` Get the perimeter length. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### isValid +### isValid() -▸ **isValid**(): *boolean* +> **isValid**(): `boolean` Verify that the bounds are sorted. -**Returns:** *boolean* +#### Returns + +`boolean` + +*** + +### rayCast() + +> **rayCast**(`output`, `input`): `boolean` + +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +#### Returns + +`boolean` + +*** + +### set() + +> **set**(`aabb`): `void` + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +#### Returns + +`void` + +*** + +### areEqual() + +> `static` **areEqual**(`a`, `b`): `boolean` -___ +#### Parameters -### rayCast +• **a**: [`AABBValue`](../interfaces/AABBValue) -▸ **rayCast**(`output`: [RayCastOutput](/api/interfaces/raycastoutput), `input`: [RayCastInput](/api/interfaces/raycastinput)): *boolean* +• **b**: [`AABBValue`](../interfaces/AABBValue) -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`output` | [RayCastOutput](/api/interfaces/raycastoutput) | -`input` | [RayCastInput](/api/interfaces/raycastinput) | +`boolean` -**Returns:** *boolean* +*** -___ +### assert() -### set +> `static` **assert**(`o`): `void` -▸ **set**(`aabb`: [AABBValue](/api/interfaces/aabbvalue)): *void* +#### Parameters -**Parameters:** +• **o**: `any` -Name | Type | ------- | ------ | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### `Static` areEqual +### combinedPerimeter() -▸ **areEqual**(`a`: [AABBValue](/api/interfaces/aabbvalue), `b`: [AABBValue](/api/interfaces/aabbvalue)): *boolean* +> `static` **combinedPerimeter**(`a`, `b`): `number` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`a` | [AABBValue](/api/interfaces/aabbvalue) | -`b` | [AABBValue](/api/interfaces/aabbvalue) | +• **a**: [`AABBValue`](../interfaces/AABBValue) -**Returns:** *boolean* +• **b**: [`AABBValue`](../interfaces/AABBValue) -___ +#### Returns -### `Static` assert +`number` -▸ **assert**(`o`: any): *void* +*** -**Parameters:** +### combinePoints() -Name | Type | ------- | ------ | -`o` | any | +> `static` **combinePoints**(`out`, `a`, `b`): [`AABBValue`](../interfaces/AABBValue) -**Returns:** *void* +#### Parameters -___ +• **out**: [`AABBValue`](../interfaces/AABBValue) -### `Static` combinePoints +• **a**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **combinePoints**(`out`: [AABBValue](/api/interfaces/aabbvalue), `a`: [Vec2Value](/api/interfaces/vec2value), `b`: [Vec2Value](/api/interfaces/vec2value)): *[AABBValue](/api/interfaces/aabbvalue)* +• **b**: [`Vec2Value`](../interfaces/Vec2Value) -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`out` | [AABBValue](/api/interfaces/aabbvalue) | -`a` | [Vec2Value](/api/interfaces/vec2value) | -`b` | [Vec2Value](/api/interfaces/vec2value) | +[`AABBValue`](../interfaces/AABBValue) -**Returns:** *[AABBValue](/api/interfaces/aabbvalue)* +*** -___ +### diff() -### `Static` combinedPerimeter +> `static` **diff**(`a`, `b`): `number` -▸ **combinedPerimeter**(`a`: [AABBValue](/api/interfaces/aabbvalue), `b`: [AABBValue](/api/interfaces/aabbvalue)): *number* +#### Parameters -**Parameters:** +• **a**: [`AABBValue`](../interfaces/AABBValue) -Name | Type | ------- | ------ | -`a` | [AABBValue](/api/interfaces/aabbvalue) | -`b` | [AABBValue](/api/interfaces/aabbvalue) | +• **b**: [`AABBValue`](../interfaces/AABBValue) -**Returns:** *number* +#### Returns -___ +`number` -### `Static` diff +*** -▸ **diff**(`a`: [AABBValue](/api/interfaces/aabbvalue), `b`: [AABBValue](/api/interfaces/aabbvalue)): *number* +### extend() -**Parameters:** +> `static` **extend**(`out`, `value`): [`AABBValue`](../interfaces/AABBValue) -Name | Type | ------- | ------ | -`a` | [AABBValue](/api/interfaces/aabbvalue) | -`b` | [AABBValue](/api/interfaces/aabbvalue) | +#### Parameters -**Returns:** *number* +• **out**: [`AABBValue`](../interfaces/AABBValue) -___ +• **value**: `number` -### `Static` extend +#### Returns -▸ **extend**(`out`: [AABBValue](/api/interfaces/aabbvalue), `value`: number): *[AABBValue](/api/interfaces/aabbvalue)* +[`AABBValue`](../interfaces/AABBValue) -**Parameters:** +*** -Name | Type | ------- | ------ | -`out` | [AABBValue](/api/interfaces/aabbvalue) | -`value` | number | +### isValid() -**Returns:** *[AABBValue](/api/interfaces/aabbvalue)* +> `static` **isValid**(`obj`): `boolean` -___ +#### Parameters -### `Static` isValid +• **obj**: `any` -▸ **isValid**(`obj`: any): *boolean* +#### Returns -**Parameters:** +`boolean` -Name | Type | ------- | ------ | -`obj` | any | +*** -**Returns:** *boolean* +### testOverlap() -___ +> `static` **testOverlap**(`a`, `b`): `boolean` -### `Static` testOverlap +#### Parameters -▸ **testOverlap**(`a`: [AABBValue](/api/interfaces/aabbvalue), `b`: [AABBValue](/api/interfaces/aabbvalue)): *boolean* +• **a**: [`AABBValue`](../interfaces/AABBValue) -**Parameters:** +• **b**: [`AABBValue`](../interfaces/AABBValue) -Name | Type | ------- | ------ | -`a` | [AABBValue](/api/interfaces/aabbvalue) | -`b` | [AABBValue](/api/interfaces/aabbvalue) | +#### Returns -**Returns:** *boolean* +`boolean` diff --git a/docs/pages/api/classes/body.md b/docs/pages/api/classes/body.md index f6cd9d84..6ae7e4f4 100644 --- a/docs/pages/api/classes/body.md +++ b/docs/pages/api/classes/body.md @@ -1,249 +1,155 @@ - # Class: Body A rigid body composed of one or more fixtures. -To create a new Body use [World.createBody](world#createbody). - -## Hierarchy - -* **Body** - -## Index - -### Properties - -* [style](/api/classes/body#style) -* [DYNAMIC](/api/classes/body#static-readonly-dynamic) -* [KINEMATIC](/api/classes/body#static-readonly-kinematic) -* [STATIC](/api/classes/body#static-readonly-static) - -### Methods - -* [advance](/api/classes/body#advance) -* [applyAngularImpulse](/api/classes/body#applyangularimpulse) -* [applyForce](/api/classes/body#applyforce) -* [applyForceToCenter](/api/classes/body#applyforcetocenter) -* [applyLinearImpulse](/api/classes/body#applylinearimpulse) -* [applyTorque](/api/classes/body#applytorque) -* [createFixture](/api/classes/body#createfixture) -* [destroyFixture](/api/classes/body#destroyfixture) -* [getAngle](/api/classes/body#getangle) -* [getAngularDamping](/api/classes/body#getangulardamping) -* [getAngularVelocity](/api/classes/body#getangularvelocity) -* [getContactList](/api/classes/body#getcontactlist) -* [getFixtureList](/api/classes/body#getfixturelist) -* [getGravityScale](/api/classes/body#getgravityscale) -* [getInertia](/api/classes/body#getinertia) -* [getJointList](/api/classes/body#getjointlist) -* [getLinearDamping](/api/classes/body#getlineardamping) -* [getLinearVelocity](/api/classes/body#getlinearvelocity) -* [getLinearVelocityFromLocalPoint](/api/classes/body#getlinearvelocityfromlocalpoint) -* [getLinearVelocityFromWorldPoint](/api/classes/body#getlinearvelocityfromworldpoint) -* [getLocalCenter](/api/classes/body#getlocalcenter) -* [getLocalPoint](/api/classes/body#getlocalpoint) -* [getLocalVector](/api/classes/body#getlocalvector) -* [getMass](/api/classes/body#getmass) -* [getMassData](/api/classes/body#getmassdata) -* [getNext](/api/classes/body#getnext) -* [getPosition](/api/classes/body#getposition) -* [getTransform](/api/classes/body#gettransform) -* [getType](/api/classes/body#gettype) -* [getUserData](/api/classes/body#getuserdata) -* [getWorld](/api/classes/body#getworld) -* [getWorldCenter](/api/classes/body#getworldcenter) -* [getWorldPoint](/api/classes/body#getworldpoint) -* [getWorldVector](/api/classes/body#getworldvector) -* [isActive](/api/classes/body#isactive) -* [isAwake](/api/classes/body#isawake) -* [isBullet](/api/classes/body#isbullet) -* [isDynamic](/api/classes/body#isdynamic) -* [isFixedRotation](/api/classes/body#isfixedrotation) -* [isKinematic](/api/classes/body#iskinematic) -* [isSleepingAllowed](/api/classes/body#issleepingallowed) -* [isStatic](/api/classes/body#isstatic) -* [isWorldLocked](/api/classes/body#isworldlocked) -* [resetMassData](/api/classes/body#resetmassdata) -* [setActive](/api/classes/body#setactive) -* [setAngle](/api/classes/body#setangle) -* [setAngularDamping](/api/classes/body#setangulardamping) -* [setAngularVelocity](/api/classes/body#setangularvelocity) -* [setAwake](/api/classes/body#setawake) -* [setBullet](/api/classes/body#setbullet) -* [setDynamic](/api/classes/body#setdynamic) -* [setFixedRotation](/api/classes/body#setfixedrotation) -* [setGravityScale](/api/classes/body#setgravityscale) -* [setKinematic](/api/classes/body#setkinematic) -* [setLinearDamping](/api/classes/body#setlineardamping) -* [setLinearVelocity](/api/classes/body#setlinearvelocity) -* [setMassData](/api/classes/body#setmassdata) -* [setPosition](/api/classes/body#setposition) -* [setSleepingAllowed](/api/classes/body#setsleepingallowed) -* [setStatic](/api/classes/body#setstatic) -* [setTransform](/api/classes/body#settransform) -* [setType](/api/classes/body#settype) -* [setUserData](/api/classes/body#setuserdata) -* [shouldCollide](/api/classes/body#shouldcollide) -* [synchronizeFixtures](/api/classes/body#synchronizefixtures) -* [synchronizeTransform](/api/classes/body#synchronizetransform) - -## Properties - -### style - -• **style**: *[Style](/api/interfaces/style)* - -Styling for dev-tools. - -___ - -### `Static` `Readonly` DYNAMIC - -▪ **DYNAMIC**: *[BodyType](/api/globals#bodytype)* = "dynamic" - -A dynamic body is fully simulated. -They can be moved manually by the user, but normally they move according to forces. -A dynamic body can collide with all body types. -A dynamic body always has finite, non-zero mass. -If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate. - -___ - -### `Static` `Readonly` KINEMATIC - -▪ **KINEMATIC**: *[BodyType](/api/globals#bodytype)* = "kinematic" - -A kinematic body moves under simulation according to its velocity. -Kinematic bodies do not respond to forces. -They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity. -A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass. -Kinematic bodies do not collide with other kinematic or static bodies. - -___ - -### `Static` `Readonly` STATIC - -▪ **STATIC**: *[BodyType](/api/globals#bodytype)* = "static" - -A static body does not move under simulation and behaves as if it has infinite mass. -Internally, zero is stored for the mass and the inverse mass. -Static bodies can be moved manually by the user. -A static body has zero velocity. -Static bodies do not collide with other static or kinematic bodies. +To create a new Body use [World.createBody](World#createbody). ## Methods -### advance +### advance() -▸ **advance**(`alpha`: number): *void* +> **advance**(`alpha`): `void` Used in TOI. -**Parameters:** +#### Parameters + +• **alpha**: `number` -Name | Type | ------- | ------ | -`alpha` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### applyAngularImpulse +### applyAngularImpulse() -▸ **applyAngularImpulse**(`impulse`: number, `wake`: boolean): *void* +> **applyAngularImpulse**(`impulse`, `wake`): `void` Apply an angular impulse. -**Parameters:** +#### Parameters + +• **impulse**: `number` + +The angular impulse in units of kg*m*m/s -Name | Type | Default | Description | ------- | ------ | ------ | ------ | -`impulse` | number | - | The angular impulse in units of kg*m*m/s | -`wake` | boolean | true | Also wake up the body | +• **wake**: `boolean` = `true` -**Returns:** *void* +Also wake up the body -___ +#### Returns -### applyForce +`void` -▸ **applyForce**(`force`: [Vec2Value](/api/interfaces/vec2value), `point`: [Vec2Value](/api/interfaces/vec2value), `wake`: boolean): *void* +*** + +### applyForce() + +> **applyForce**(`force`, `point`, `wake`): `void` Apply a force at a world point. If the force is not applied at the center of mass, it will generate a torque and affect the angular velocity. This wakes up the body. -**Parameters:** +#### Parameters + +• **force**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | Default | Description | ------- | ------ | ------ | ------ | -`force` | [Vec2Value](/api/interfaces/vec2value) | - | The world force vector, usually in Newtons (N). | -`point` | [Vec2Value](/api/interfaces/vec2value) | - | The world position of the point of application. | -`wake` | boolean | true | Also wake up the body | +The world force vector, usually in Newtons (N). -**Returns:** *void* +• **point**: [`Vec2Value`](../interfaces/Vec2Value) -___ +The world position of the point of application. -### applyForceToCenter +• **wake**: `boolean` = `true` -▸ **applyForceToCenter**(`force`: [Vec2Value](/api/interfaces/vec2value), `wake`: boolean): *void* +Also wake up the body + +#### Returns + +`void` + +*** + +### applyForceToCenter() + +> **applyForceToCenter**(`force`, `wake`): `void` Apply a force to the center of mass. This wakes up the body. -**Parameters:** +#### Parameters + +• **force**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | Default | Description | ------- | ------ | ------ | ------ | -`force` | [Vec2Value](/api/interfaces/vec2value) | - | The world force vector, usually in Newtons (N). | -`wake` | boolean | true | Also wake up the body | +The world force vector, usually in Newtons (N). -**Returns:** *void* +• **wake**: `boolean` = `true` -___ +Also wake up the body -### applyLinearImpulse +#### Returns -▸ **applyLinearImpulse**(`impulse`: [Vec2Value](/api/interfaces/vec2value), `point`: [Vec2Value](/api/interfaces/vec2value), `wake`: boolean): *void* +`void` + +*** + +### applyLinearImpulse() + +> **applyLinearImpulse**(`impulse`, `point`, `wake`): `void` Apply an impulse at a point. This immediately modifies the velocity. It also modifies the angular velocity if the point of application is not at the center of mass. This wakes up the body. -**Parameters:** +#### Parameters + +• **impulse**: [`Vec2Value`](../interfaces/Vec2Value) + +The world impulse vector, usually in N-seconds or kg-m/s. + +• **point**: [`Vec2Value`](../interfaces/Vec2Value) + +The world position of the point of application. -Name | Type | Default | Description | ------- | ------ | ------ | ------ | -`impulse` | [Vec2Value](/api/interfaces/vec2value) | - | The world impulse vector, usually in N-seconds or kg-m/s. | -`point` | [Vec2Value](/api/interfaces/vec2value) | - | The world position of the point of application. | -`wake` | boolean | true | Also wake up the body | +• **wake**: `boolean` = `true` -**Returns:** *void* +Also wake up the body -___ +#### Returns -### applyTorque +`void` -▸ **applyTorque**(`torque`: number, `wake`: boolean): *void* +*** + +### applyTorque() + +> **applyTorque**(`torque`, `wake`): `void` Apply a torque. This affects the angular velocity without affecting the linear velocity of the center of mass. This wakes up the body. -**Parameters:** +#### Parameters + +• **torque**: `number` + +About the z-axis (out of the screen), usually in N-m. + +• **wake**: `boolean` = `true` + +Also wake up the body -Name | Type | Default | Description | ------- | ------ | ------ | ------ | -`torque` | number | - | About the z-axis (out of the screen), usually in N-m. | -`wake` | boolean | true | Also wake up the body | +#### Returns -**Returns:** *void* +`void` -___ +*** -### createFixture +### createFixture() -▸ **createFixture**(`def`: [FixtureDef](/api/interfaces/fixturedef)): *[Fixture](/api/classes/fixture)* +#### createFixture(def) + +> **createFixture**(`def`): [`Fixture`](Fixture) Creates a fixture and attach it to this body. @@ -254,41 +160,47 @@ Contacts are not created until the next time step. Warning: This function is locked during callbacks. -**Parameters:** +##### Parameters + +• **def**: [`FixtureDef`](../interfaces/FixtureDef) + +##### Returns + +[`Fixture`](Fixture) + +#### createFixture(shape, opt) + +> **createFixture**(`shape`, `opt`?): [`Fixture`](Fixture) + +##### Parameters -Name | Type | ------- | ------ | -`def` | [FixtureDef](/api/interfaces/fixturedef) | +• **shape**: [`Shape`](Shape) -**Returns:** *[Fixture](/api/classes/fixture)* +• **opt?**: [`FixtureOpt`](../interfaces/FixtureOpt) -▸ **createFixture**(`shape`: [Shape](/api/classes/shape), `opt?`: [FixtureOpt](/api/interfaces/fixtureopt)): *[Fixture](/api/classes/fixture)* +##### Returns -**Parameters:** +[`Fixture`](Fixture) -Name | Type | ------- | ------ | -`shape` | [Shape](/api/classes/shape) | -`opt?` | [FixtureOpt](/api/interfaces/fixtureopt) | +#### createFixture(shape, density) -**Returns:** *[Fixture](/api/classes/fixture)* +> **createFixture**(`shape`, `density`?): [`Fixture`](Fixture) -▸ **createFixture**(`shape`: [Shape](/api/classes/shape), `density?`: number): *[Fixture](/api/classes/fixture)* +##### Parameters -**Parameters:** +• **shape**: [`Shape`](Shape) -Name | Type | ------- | ------ | -`shape` | [Shape](/api/classes/shape) | -`density?` | number | +• **density?**: `number` -**Returns:** *[Fixture](/api/classes/fixture)* +##### Returns -___ +[`Fixture`](Fixture) -### destroyFixture +*** -▸ **destroyFixture**(`fixture`: [Fixture](/api/classes/fixture)): *void* +### destroyFixture() + +> **destroyFixture**(`fixture`): `void` Destroy a fixture. This removes the fixture from the broad-phase and destroys all contacts associated with this fixture. This will automatically adjust the @@ -298,398 +210,462 @@ destroyed. Warning: This function is locked during callbacks. -**Parameters:** +#### Parameters + +• **fixture**: [`Fixture`](Fixture) + +The fixture to be removed. -Name | Type | Description | ------- | ------ | ------ | -`fixture` | [Fixture](/api/classes/fixture) | The fixture to be removed. | +#### Returns -**Returns:** *void* +`void` -___ +*** -### getAngle +### getAngle() -▸ **getAngle**(): *number* +> **getAngle**(): `number` Get the current world rotation angle in radians. -**Returns:** *number* +#### Returns -___ +`number` -### getAngularDamping +*** -▸ **getAngularDamping**(): *number* +### getAngularDamping() -**Returns:** *number* +> **getAngularDamping**(): `number` -___ +#### Returns -### getAngularVelocity +`number` -▸ **getAngularVelocity**(): *number* +*** + +### getAngularVelocity() + +> **getAngularVelocity**(): `number` Get the angular velocity. -**Returns:** *number* +#### Returns + +`number` the angular velocity in radians/second. -___ +*** -### getContactList +### getContactList() -▸ **getContactList**(): *[ContactEdge](/api/classes/contactedge) | null* +> **getContactList**(): [`ContactEdge`](ContactEdge) Warning: this list changes during the time step and you may miss some collisions if you don't use ContactListener. -**Returns:** *[ContactEdge](/api/classes/contactedge) | null* +#### Returns -___ +[`ContactEdge`](ContactEdge) -### getFixtureList +*** -▸ **getFixtureList**(): *[Fixture](/api/classes/fixture) | null* +### getFixtureList() -**Returns:** *[Fixture](/api/classes/fixture) | null* +> **getFixtureList**(): [`Fixture`](Fixture) -___ +#### Returns -### getGravityScale +[`Fixture`](Fixture) -▸ **getGravityScale**(): *number* +*** -**Returns:** *number* +### getGravityScale() -___ +> **getGravityScale**(): `number` -### getInertia +#### Returns -▸ **getInertia**(): *number* +`number` + +*** + +### getInertia() + +> **getInertia**(): `number` Get the rotational inertia of the body about the local origin. -**Returns:** *number* +#### Returns + +`number` the rotational inertia, usually in kg-m^2. -___ +*** -### getJointList +### getJointList() -▸ **getJointList**(): *[JointEdge](/api/classes/jointedge) | null* +> **getJointList**(): [`JointEdge`](JointEdge) -**Returns:** *[JointEdge](/api/classes/jointedge) | null* +#### Returns -___ +[`JointEdge`](JointEdge) -### getLinearDamping +*** -▸ **getLinearDamping**(): *number* +### getLinearDamping() -**Returns:** *number* +> **getLinearDamping**(): `number` -___ +#### Returns -### getLinearVelocity +`number` -▸ **getLinearVelocity**(): *[Vec2](/api/classes/vec2)* +*** + +### getLinearVelocity() + +> **getLinearVelocity**(): [`Vec2`](Vec2) Get the linear velocity of the center of mass. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) the linear velocity of the center of mass. -___ +*** -### getLinearVelocityFromLocalPoint +### getLinearVelocityFromLocalPoint() -▸ **getLinearVelocityFromLocalPoint**(`localPoint`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> **getLinearVelocityFromLocalPoint**(`localPoint`): [`Vec2`](Vec2) Get the world velocity of a local point. -**Parameters:** +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`localPoint` | [Vec2Value](/api/interfaces/vec2value) | A point in local coordinates. | +• **localPoint**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +A point in local coordinates. -___ +#### Returns -### getLinearVelocityFromWorldPoint +[`Vec2`](Vec2) -▸ **getLinearVelocityFromWorldPoint**(`worldPoint`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +*** + +### getLinearVelocityFromWorldPoint() + +> **getLinearVelocityFromWorldPoint**(`worldPoint`): [`Vec2`](Vec2) Get the world linear velocity of a world point attached to this body. -**Parameters:** +#### Parameters + +• **worldPoint**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | Description | ------- | ------ | ------ | -`worldPoint` | [Vec2Value](/api/interfaces/vec2value) | A point in world coordinates. | +A point in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getLocalCenter +*** -▸ **getLocalCenter**(): *[Vec2](/api/classes/vec2)* +### getLocalCenter() + +> **getLocalCenter**(): [`Vec2`](Vec2) Get the local position of the center of mass. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getLocalPoint +### getLocalPoint() -▸ **getLocalPoint**(`worldPoint`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> **getLocalPoint**(`worldPoint`): [`Vec2`](Vec2) Gets the corresponding local point of a world point. -**Parameters:** +#### Parameters + +• **worldPoint**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`worldPoint` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) -___ +*** -### getLocalVector +### getLocalVector() -▸ **getLocalVector**(`worldVector`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> **getLocalVector**(`worldVector`): [`Vec2`](Vec2) Gets the corresponding local vector of a world vector. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`worldVector` | [Vec2Value](/api/interfaces/vec2value) | +• **worldVector**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getMass +*** -▸ **getMass**(): *number* +### getMass() + +> **getMass**(): `number` Get the total mass of the body. -**Returns:** *number* +#### Returns + +`number` The mass, usually in kilograms (kg). -___ +*** -### getMassData +### getMassData() -▸ **getMassData**(`data`: [MassData](/api/interfaces/massdata)): *void* +> **getMassData**(`data`): `void` Copy the mass data of the body to data. -**Parameters:** +#### Parameters + +• **data**: [`MassData`](../interfaces/MassData) + +#### Returns -Name | Type | ------- | ------ | -`data` | [MassData](/api/interfaces/massdata) | +`void` -**Returns:** *void* +*** -___ +### getNext() -### getNext +> **getNext**(): [`Body`](Body) -▸ **getNext**(): *[Body](/api/classes/body) | null* +#### Returns -**Returns:** *[Body](/api/classes/body) | null* +[`Body`](Body) -___ +*** -### getPosition +### getPosition() -▸ **getPosition**(): *[Vec2](/api/classes/vec2)* +> **getPosition**(): [`Vec2`](Vec2) Get the world position for the body's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getTransform +*** -▸ **getTransform**(): *[Transform](/api/classes/transform)* +### getTransform() + +> **getTransform**(): [`Transform`](Transform) Get the world transform for the body's origin. -**Returns:** *[Transform](/api/classes/transform)* +#### Returns + +[`Transform`](Transform) -___ +*** -### getType +### getType() -▸ **getType**(): *[BodyType](/api/globals#bodytype)* +> **getType**(): [`BodyType`](../type-aliases/BodyType) Get the type of the body. -**Returns:** *[BodyType](/api/globals#bodytype)* +#### Returns + +[`BodyType`](../type-aliases/BodyType) -___ +*** -### getUserData +### getUserData() -▸ **getUserData**(): *unknown* +> **getUserData**(): `unknown` -**Returns:** *unknown* +#### Returns -___ +`unknown` -### getWorld +*** -▸ **getWorld**(): *[World](/api/classes/world)* +### getWorld() -**Returns:** *[World](/api/classes/world)* +> **getWorld**(): [`World`](World) -___ +#### Returns -### getWorldCenter +[`World`](World) -▸ **getWorldCenter**(): *[Vec2](/api/classes/vec2)* +*** + +### getWorldCenter() + +> **getWorldCenter**(): [`Vec2`](Vec2) Get the world position of the center of mass. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getWorldPoint +### getWorldPoint() -▸ **getWorldPoint**(`localPoint`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> **getWorldPoint**(`localPoint`): [`Vec2`](Vec2) Get the corresponding world point of a local point. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`localPoint` | [Vec2Value](/api/interfaces/vec2value) | +• **localPoint**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getWorldVector +*** -▸ **getWorldVector**(`localVector`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +### getWorldVector() + +> **getWorldVector**(`localVector`): [`Vec2`](Vec2) Get the corresponding world vector of a local vector. -**Parameters:** +#### Parameters + +• **localVector**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns -Name | Type | ------- | ------ | -`localVector` | [Vec2Value](/api/interfaces/vec2value) | +[`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +*** -___ +### isActive() -### isActive +> **isActive**(): `boolean` -▸ **isActive**(): *boolean* +#### Returns -**Returns:** *boolean* +`boolean` -___ +*** -### isAwake +### isAwake() -▸ **isAwake**(): *boolean* +> **isAwake**(): `boolean` -**Returns:** *boolean* +#### Returns -___ +`boolean` -### isBullet +*** -▸ **isBullet**(): *boolean* +### isBullet() -**Returns:** *boolean* +> **isBullet**(): `boolean` -___ +#### Returns -### isDynamic +`boolean` -▸ **isDynamic**(): *boolean* +*** -**Returns:** *boolean* +### isDynamic() -___ +> **isDynamic**(): `boolean` -### isFixedRotation +#### Returns -▸ **isFixedRotation**(): *boolean* +`boolean` -**Returns:** *boolean* +*** -___ +### isFixedRotation() -### isKinematic +> **isFixedRotation**(): `boolean` -▸ **isKinematic**(): *boolean* +#### Returns -**Returns:** *boolean* +`boolean` -___ +*** -### isSleepingAllowed +### isKinematic() -▸ **isSleepingAllowed**(): *boolean* +> **isKinematic**(): `boolean` -**Returns:** *boolean* +#### Returns -___ +`boolean` -### isStatic +*** -▸ **isStatic**(): *boolean* +### isSleepingAllowed() -**Returns:** *boolean* +> **isSleepingAllowed**(): `boolean` -___ +#### Returns -### isWorldLocked +`boolean` -▸ **isWorldLocked**(): *boolean* +*** -**Returns:** *boolean* +### isStatic() -___ +> **isStatic**(): `boolean` -### resetMassData +#### Returns -▸ **resetMassData**(): *void* +`boolean` + +*** + +### isWorldLocked() + +> **isWorldLocked**(): `boolean` + +#### Returns + +`boolean` + +*** + +### resetMassData() + +> **resetMassData**(): `void` This resets the mass properties to the sum of the mass properties of the fixtures. This normally does not need to be called unless you called SetMassData to override the mass and you later want to reset the mass. -**Returns:** *void* +#### Returns + +`void` -___ +*** -### setActive +### setActive() -▸ **setActive**(`flag`: boolean): *void* +> **setActive**(`flag`): `void` Set the active state of the body. An inactive body is not simulated and cannot be collided with or woken up. If you pass a flag of true, all fixtures @@ -703,279 +679,300 @@ in collisions, ray-casts, or queries. Joints connected to an inactive body are implicitly inactive. An inactive body is still owned by a World object and remains -**Parameters:** +#### Parameters + +• **flag**: `boolean` -Name | Type | ------- | ------ | -`flag` | boolean | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setAngle +### setAngle() -▸ **setAngle**(`angle`: number): *void* +> **setAngle**(`angle`): `void` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`angle` | number | +• **angle**: `number` -**Returns:** *void* +#### Returns -___ +`void` -### setAngularDamping +*** -▸ **setAngularDamping**(`angularDamping`: number): *void* +### setAngularDamping() -**Parameters:** +> **setAngularDamping**(`angularDamping`): `void` -Name | Type | ------- | ------ | -`angularDamping` | number | +#### Parameters -**Returns:** *void* +• **angularDamping**: `number` -___ +#### Returns -### setAngularVelocity +`void` -▸ **setAngularVelocity**(`w`: number): *void* +*** + +### setAngularVelocity() + +> **setAngularVelocity**(`w`): `void` Set the angular velocity. -**Parameters:** +#### Parameters + +• **w**: `number` -Name | Type | ------- | ------ | -`w` | number | +The new angular velocity in radians/second. -**Returns:** *void* +#### Returns -___ +`void` -### setAwake +*** -▸ **setAwake**(`flag`: boolean): *void* +### setAwake() + +> **setAwake**(`flag`): `void` Set the sleep state of the body. A sleeping body has very low CPU cost. -**Parameters:** +#### Parameters + +• **flag**: `boolean` -Name | Type | Description | ------- | ------ | ------ | -`flag` | boolean | Set to true to wake the body, false to put it to sleep. | +Set to true to wake the body, false to put it to sleep. -**Returns:** *void* +#### Returns -___ +`void` -### setBullet +*** -▸ **setBullet**(`flag`: boolean): *void* +### setBullet() + +> **setBullet**(`flag`): `void` Should this body be treated like a bullet for continuous collision detection? -**Parameters:** +#### Parameters + +• **flag**: `boolean` -Name | Type | ------- | ------ | -`flag` | boolean | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setDynamic +### setDynamic() -▸ **setDynamic**(): *[Body](/api/classes/body)* +> **setDynamic**(): [`Body`](Body) -**Returns:** *[Body](/api/classes/body)* +#### Returns -___ +[`Body`](Body) -### setFixedRotation +*** -▸ **setFixedRotation**(`flag`: boolean): *void* +### setFixedRotation() + +> **setFixedRotation**(`flag`): `void` Set this body to have fixed rotation. This causes the mass to be reset. -**Parameters:** +#### Parameters + +• **flag**: `boolean` -Name | Type | ------- | ------ | -`flag` | boolean | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setGravityScale +### setGravityScale() -▸ **setGravityScale**(`scale`: number): *void* +> **setGravityScale**(`scale`): `void` Scale the gravity applied to this body. -**Parameters:** +#### Parameters + +• **scale**: `number` -Name | Type | ------- | ------ | -`scale` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setKinematic +### setKinematic() -▸ **setKinematic**(): *[Body](/api/classes/body)* +> **setKinematic**(): [`Body`](Body) -**Returns:** *[Body](/api/classes/body)* +#### Returns -___ +[`Body`](Body) -### setLinearDamping +*** -▸ **setLinearDamping**(`linearDamping`: number): *void* +### setLinearDamping() -**Parameters:** +> **setLinearDamping**(`linearDamping`): `void` -Name | Type | ------- | ------ | -`linearDamping` | number | +#### Parameters -**Returns:** *void* +• **linearDamping**: `number` -___ +#### Returns -### setLinearVelocity +`void` -▸ **setLinearVelocity**(`v`: [Vec2Value](/api/interfaces/vec2value)): *void* +*** + +### setLinearVelocity() + +> **setLinearVelocity**(`v`): `void` Set the linear velocity of the center of mass. -**Parameters:** +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | Description | ------- | ------ | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | The new linear velocity of the center of mass. | +The new linear velocity of the center of mass. -**Returns:** *void* +#### Returns -___ +`void` -### setMassData +*** -▸ **setMassData**(`massData`: [MassData](/api/interfaces/massdata)): *void* +### setMassData() + +> **setMassData**(`massData`): `void` Set the mass properties to override the mass properties of the fixtures. Note that this changes the center of mass position. Note that creating or destroying fixtures can also alter the mass. This function has no effect if the body isn't dynamic. -**Parameters:** +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) + +The mass properties. -Name | Type | Description | ------- | ------ | ------ | -`massData` | [MassData](/api/interfaces/massdata) | The mass properties. | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setPosition +### setPosition() -▸ **setPosition**(`p`: [Vec2Value](/api/interfaces/vec2value)): *void* +> **setPosition**(`p`): `void` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`p` | [Vec2Value](/api/interfaces/vec2value) | +• **p**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *void* +#### Returns -___ +`void` -### setSleepingAllowed +*** -▸ **setSleepingAllowed**(`flag`: boolean): *void* +### setSleepingAllowed() -**Parameters:** +> **setSleepingAllowed**(`flag`): `void` -Name | Type | ------- | ------ | -`flag` | boolean | +#### Parameters -**Returns:** *void* +• **flag**: `boolean` -___ +#### Returns -### setStatic +`void` -▸ **setStatic**(): *[Body](/api/classes/body)* +*** + +### setStatic() + +> **setStatic**(): [`Body`](Body) This will alter the mass and velocity. -**Returns:** *[Body](/api/classes/body)* +#### Returns -___ +[`Body`](Body) -### setTransform +*** -▸ **setTransform**(`position`: [Vec2Value](/api/interfaces/vec2value), `angle`: number): *void* +### setTransform() + +> **setTransform**(`position`, `angle`): `void` Set the position of the body's origin and rotation. Manipulating a body's transform may cause non-physical behavior. Note: contacts are updated on the next call to World.step. -**Parameters:** +#### Parameters + +• **position**: [`Vec2Value`](../interfaces/Vec2Value) + +The world position of the body's local origin. + +• **angle**: `number` + +The world rotation in radians. -Name | Type | Description | ------- | ------ | ------ | -`position` | [Vec2Value](/api/interfaces/vec2value) | The world position of the body's local origin. | -`angle` | number | The world rotation in radians. | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setType +### setType() -▸ **setType**(`type`: [BodyType](/api/globals#bodytype)): *void* +> **setType**(`type`): `void` Set the type of the body to "static", "kinematic" or "dynamic". -**Parameters:** +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`type` | [BodyType](/api/globals#bodytype) | The type of the body. | +• **type**: [`BodyType`](../type-aliases/BodyType) -**Returns:** *void* +The type of the body. -___ +#### Returns -### setUserData +`void` -▸ **setUserData**(`data`: any): *void* +*** -**Parameters:** +### setUserData() -Name | Type | ------- | ------ | -`data` | any | +> **setUserData**(`data`): `void` -**Returns:** *void* +#### Parameters -___ +• **data**: `any` -### shouldCollide +#### Returns -▸ **shouldCollide**(`that`: [Body](/api/classes/body)): *boolean* +`void` + +*** + +### shouldCollide() + +> **shouldCollide**(`that`): `boolean` This is used to test if two bodies should collide. @@ -983,28 +980,32 @@ Bodies do not collide when: - Neither of them is dynamic - They are connected by a joint with collideConnected == false -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`that` | [Body](/api/classes/body) | +• **that**: [`Body`](Body) -**Returns:** *boolean* +#### Returns -___ +`boolean` -### synchronizeFixtures +*** -▸ **synchronizeFixtures**(): *void* +### synchronizeFixtures() + +> **synchronizeFixtures**(): `void` Update fixtures in broad-phase. -**Returns:** *void* +#### Returns + +`void` + +*** -___ +### synchronizeTransform() -### synchronizeTransform +> **synchronizeTransform**(): `void` -▸ **synchronizeTransform**(): *void* +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/boxshape.md b/docs/pages/api/classes/boxshape.md index e72979fb..bb412c32 100644 --- a/docs/pages/api/classes/boxshape.md +++ b/docs/pages/api/classes/boxshape.md @@ -1,247 +1,279 @@ - # Class: BoxShape A rectangle polygon which extend PolygonShape. -## Hierarchy - - ↳ [PolygonShape](/api/classes/polygonshape) +## Extends - ↳ **BoxShape** +- [`PolygonShape`](PolygonShape) -## Index +## Constructors -### Constructors +### new BoxShape() -* [constructor](/api/classes/boxshape#constructor) +> **new BoxShape**(`halfWidth`, `halfHeight`, `center`?, `angle`?): [`BoxShape`](BoxShape) -### Properties +#### Parameters -* [style](/api/classes/boxshape#style) -* [TYPE](/api/classes/boxshape#static-type) +• **halfWidth**: `number` -### Methods +• **halfHeight**: `number` -* [computeAABB](/api/classes/boxshape#computeaabb) -* [computeDistanceProxy](/api/classes/boxshape#computedistanceproxy) -* [computeMass](/api/classes/boxshape#computemass) -* [getChildCount](/api/classes/boxshape#getchildcount) -* [getRadius](/api/classes/boxshape#getradius) -* [getType](/api/classes/boxshape#gettype) -* [rayCast](/api/classes/boxshape#raycast) -* [testPoint](/api/classes/boxshape#testpoint) -* [validate](/api/classes/boxshape#validate) -* [isValid](/api/classes/boxshape#static-isvalid) +• **center?**: [`Vec2Value`](../interfaces/Vec2Value) -## Constructors +coordinate of the center of the box relative to the body -### constructor +• **angle?**: `number` -\+ **new BoxShape**(`halfWidth`: number, `halfHeight`: number, `center?`: [Vec2Value](/api/interfaces/vec2value), `angle?`: number): *[BoxShape](/api/classes/boxshape)* +angle of the box relative to the body -*Overrides [PolygonShape](/api/classes/polygonshape).[constructor](/api/classes/polygonshape#constructor)* +#### Returns -**Parameters:** +[`BoxShape`](BoxShape) -Name | Type | Description | ------- | ------ | ------ | -`halfWidth` | number | - | -`halfHeight` | number | - | -`center?` | [Vec2Value](/api/interfaces/vec2value) | coordinate of the center of the box relative to the body | -`angle?` | number | angle of the box relative to the body | +#### Overrides -**Returns:** *[BoxShape](/api/classes/boxshape)* +[`PolygonShape`](PolygonShape).[`constructor`](PolygonShape#constructors) ## Properties -### style - -• **style**: *[Style](/api/interfaces/style)* +### style -*Inherited from [Shape](/api/classes/shape).[style](/api/classes/shape#style)* +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. -___ +#### Inherited from -### `Static` TYPE +[`PolygonShape`](PolygonShape).[`style`](PolygonShape#style) -▪ **TYPE**: *"polygon"* = "polygon" as const +*** -*Overrides [PolygonShape](/api/classes/polygonshape).[TYPE](/api/classes/polygonshape#static-type)* +### TYPE -## Methods +> `static` **TYPE**: `"polygon"` -### computeAABB +#### Overrides -▸ **computeAABB**(`aabb`: [AABBValue](/api/interfaces/aabbvalue), `xf`: [TransformValue](/api/globals#transformvalue), `childIndex`: number): *void* +[`PolygonShape`](PolygonShape).[`TYPE`](PolygonShape#type) -*Inherited from [PolygonShape](/api/classes/polygonshape).[computeAABB](/api/classes/polygonshape#computeaabb)* +## Methods + +### computeAABB() -*Overrides [Shape](/api/classes/shape).[computeAABB](/api/classes/shape#abstract-computeaabb)* +> **computeAABB**(`aabb`, `xf`, `childIndex`): `void` Given a transform, compute the associated axis aligned bounding box for a child shape. -**Parameters:** +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +Returns the axis aligned box. + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) -Name | Type | Description | ------- | ------ | ------ | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | Returns the axis aligned box. | -`xf` | [TransformValue](/api/globals#transformvalue) | The world transform of the shape. | -`childIndex` | number | The child shape | +The world transform of the shape. -**Returns:** *void* +• **childIndex**: `number` -___ +The child shape -### computeDistanceProxy +#### Returns -▸ **computeDistanceProxy**(`proxy`: [DistanceProxy](/api/classes/distanceproxy)): *void* +`void` -*Inherited from [PolygonShape](/api/classes/polygonshape).[computeDistanceProxy](/api/classes/polygonshape#computedistanceproxy)* +#### Inherited from -*Overrides [Shape](/api/classes/shape).[computeDistanceProxy](/api/classes/shape#abstract-computedistanceproxy)* +[`PolygonShape`](PolygonShape).[`computeAABB`](PolygonShape#computeaabb) -**Parameters:** +*** -Name | Type | ------- | ------ | -`proxy` | [DistanceProxy](/api/classes/distanceproxy) | +### computeDistanceProxy() -**Returns:** *void* +> **computeDistanceProxy**(`proxy`): `void` -___ +#### Parameters -### computeMass +• **proxy**: [`DistanceProxy`](DistanceProxy) -▸ **computeMass**(`massData`: [MassData](/api/interfaces/massdata), `density`: number): *void* +#### Returns -*Inherited from [PolygonShape](/api/classes/polygonshape).[computeMass](/api/classes/polygonshape#computemass)* +`void` -*Overrides [Shape](/api/classes/shape).[computeMass](/api/classes/shape#abstract-computemass)* +#### Inherited from + +[`PolygonShape`](PolygonShape).[`computeDistanceProxy`](PolygonShape#computedistanceproxy) + +*** + +### computeMass() + +> **computeMass**(`massData`, `density`): `void` Compute the mass properties of this shape using its dimensions and density. The inertia tensor is computed about the local origin. -**Parameters:** +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) -Name | Type | Description | ------- | ------ | ------ | -`massData` | [MassData](/api/interfaces/massdata) | Returns the mass data for this shape. | -`density` | number | The density in kilograms per meter squared. | +Returns the mass data for this shape. -**Returns:** *void* +• **density**: `number` -___ +The density in kilograms per meter squared. -### getChildCount +#### Returns -▸ **getChildCount**(): *1* +`void` -*Inherited from [PolygonShape](/api/classes/polygonshape).[getChildCount](/api/classes/polygonshape#getchildcount)* +#### Inherited from -*Overrides [Shape](/api/classes/shape).[getChildCount](/api/classes/shape#abstract-getchildcount)* +[`PolygonShape`](PolygonShape).[`computeMass`](PolygonShape#computemass) + +*** + +### getChildCount() + +> **getChildCount**(): `1` Get the number of child primitives. -**Returns:** *1* +#### Returns + +`1` + +#### Inherited from -___ +[`PolygonShape`](PolygonShape).[`getChildCount`](PolygonShape#getchildcount) -### getRadius +*** -▸ **getRadius**(): *number* +### getRadius() -*Inherited from [PolygonShape](/api/classes/polygonshape).[getRadius](/api/classes/polygonshape#getradius)* +> **getRadius**(): `number` -*Overrides [Shape](/api/classes/shape).[getRadius](/api/classes/shape#abstract-getradius)* +#### Returns -**Returns:** *number* +`number` -___ +#### Inherited from -### getType +[`PolygonShape`](PolygonShape).[`getRadius`](PolygonShape#getradius) -▸ **getType**(): *"polygon"* +*** -*Inherited from [PolygonShape](/api/classes/polygonshape).[getType](/api/classes/polygonshape#gettype)* +### getType() -*Overrides [Shape](/api/classes/shape).[getType](/api/classes/shape#abstract-gettype)* +> **getType**(): `"polygon"` -**Returns:** *"polygon"* +Get the type of this shape. You can use this to down cast to the concrete +shape. -___ +#### Returns -### rayCast +`"polygon"` -▸ **rayCast**(`output`: [RayCastOutput](/api/interfaces/raycastoutput), `input`: [RayCastInput](/api/interfaces/raycastinput), `xf`: [Transform](/api/classes/transform), `childIndex`: number): *boolean* +the shape type. -*Inherited from [PolygonShape](/api/classes/polygonshape).[rayCast](/api/classes/polygonshape#raycast)* +#### Inherited from -*Overrides [Shape](/api/classes/shape).[rayCast](/api/classes/shape#abstract-raycast)* +[`PolygonShape`](PolygonShape).[`getType`](PolygonShape#gettype) + +*** + +### rayCast() + +> **rayCast**(`output`, `input`, `xf`, `childIndex`): `boolean` Cast a ray against a child shape. -**Parameters:** +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +The ray-cast results. + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input parameters. + +• **xf**: [`Transform`](Transform) + +The transform to be applied to the shape. + +• **childIndex**: `number` + +The child shape index -Name | Type | Description | ------- | ------ | ------ | -`output` | [RayCastOutput](/api/interfaces/raycastoutput) | The ray-cast results. | -`input` | [RayCastInput](/api/interfaces/raycastinput) | The ray-cast input parameters. | -`xf` | [Transform](/api/classes/transform) | The transform to be applied to the shape. | -`childIndex` | number | The child shape index | +#### Returns -**Returns:** *boolean* +`boolean` -___ +#### Inherited from -### testPoint +[`PolygonShape`](PolygonShape).[`rayCast`](PolygonShape#raycast) -▸ **testPoint**(`xf`: [TransformValue](/api/globals#transformvalue), `p`: [Vec2Value](/api/interfaces/vec2value)): *boolean* +*** -*Inherited from [PolygonShape](/api/classes/polygonshape).[testPoint](/api/classes/polygonshape#testpoint)* +### testPoint() -*Overrides [Shape](/api/classes/shape).[testPoint](/api/classes/shape#abstract-testpoint)* +> **testPoint**(`xf`, `p`): `boolean` Test a point for containment in this shape. This only works for convex shapes. -**Parameters:** +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`xf` | [TransformValue](/api/globals#transformvalue) | The shape world transform. | -`p` | [Vec2Value](/api/interfaces/vec2value) | A point in world coordinates. | +• **xf**: [`TransformValue`](../type-aliases/TransformValue) -**Returns:** *boolean* +The shape world transform. -___ +• **p**: [`Vec2Value`](../interfaces/Vec2Value) -### validate +A point in world coordinates. -▸ **validate**(): *boolean* +#### Returns -*Inherited from [PolygonShape](/api/classes/polygonshape).[validate](/api/classes/polygonshape#validate)* +`boolean` + +#### Inherited from + +[`PolygonShape`](PolygonShape).[`testPoint`](PolygonShape#testpoint) + +*** + +### validate() + +> **validate**(): `boolean` Validate convexity. This is a very time consuming operation. -**Returns:** *boolean* +#### Returns + +`boolean` true if valid -___ +#### Inherited from + +[`PolygonShape`](PolygonShape).[`validate`](PolygonShape#validate) + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` -### `Static` isValid +#### Parameters -▸ **isValid**(`obj`: any): *boolean* +• **obj**: `any` -*Inherited from [Shape](/api/classes/shape).[isValid](/api/classes/shape#static-isvalid)* +#### Returns -**Parameters:** +`boolean` -Name | Type | ------- | ------ | -`obj` | any | +#### Inherited from -**Returns:** *boolean* +[`PolygonShape`](PolygonShape).[`isValid`](PolygonShape#isvalid) diff --git a/docs/pages/api/classes/broadphase.md b/docs/pages/api/classes/broadphase.md index 9f0a8a3e..6e195492 100644 --- a/docs/pages/api/classes/broadphase.md +++ b/docs/pages/api/classes/broadphase.md @@ -1,254 +1,240 @@ - # Class: BroadPhase The broad-phase wraps and extends a dynamic-tree to keep track of moved objects and query them on update. -## Hierarchy - -* **BroadPhase** +## Constructors -## Index +### new BroadPhase() -### Properties +> **new BroadPhase**(): [`BroadPhase`](BroadPhase) -* [m_callback](/api/classes/broadphase#m_callback) -* [m_moveBuffer](/api/classes/broadphase#m_movebuffer) -* [m_queryProxyId](/api/classes/broadphase#m_queryproxyid) -* [m_tree](/api/classes/broadphase#m_tree) +#### Returns -### Methods - -* [bufferMove](/api/classes/broadphase#buffermove) -* [createProxy](/api/classes/broadphase#createproxy) -* [destroyProxy](/api/classes/broadphase#destroyproxy) -* [getFatAABB](/api/classes/broadphase#getfataabb) -* [getProxyCount](/api/classes/broadphase#getproxycount) -* [getTreeBalance](/api/classes/broadphase#gettreebalance) -* [getTreeHeight](/api/classes/broadphase#gettreeheight) -* [getTreeQuality](/api/classes/broadphase#gettreequality) -* [getUserData](/api/classes/broadphase#getuserdata) -* [moveProxy](/api/classes/broadphase#moveproxy) -* [query](/api/classes/broadphase#query) -* [queryCallback](/api/classes/broadphase#querycallback) -* [rayCast](/api/classes/broadphase#raycast) -* [shiftOrigin](/api/classes/broadphase#shiftorigin) -* [testOverlap](/api/classes/broadphase#testoverlap) -* [touchProxy](/api/classes/broadphase#touchproxy) -* [unbufferMove](/api/classes/broadphase#unbuffermove) -* [updatePairs](/api/classes/broadphase#updatepairs) +[`BroadPhase`](BroadPhase) ## Properties -### m_callback +### m\_callback() + +> **m\_callback**: (`userDataA`, `userDataB`) => `void` -• **m_callback**: *function* +#### Parameters -#### Type declaration: +• **userDataA**: `any` -▸ (`userDataA`: any, `userDataB`: any): *void* +• **userDataB**: `any` -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`userDataA` | any | -`userDataB` | any | +`void` -___ +*** -### m_moveBuffer +### m\_moveBuffer -• **m_moveBuffer**: *number[]* = [] +> **m\_moveBuffer**: `number`[] = `[]` -___ +*** -### m_queryProxyId +### m\_queryProxyId -• **m_queryProxyId**: *number* +> **m\_queryProxyId**: `number` -___ +*** -### m_tree +### m\_tree -• **m_tree**: *[DynamicTree](/api/classes/dynamictree)‹[FixtureProxy](/api/classes/fixtureproxy)›* = new DynamicTree() +> **m\_tree**: [`DynamicTree`](DynamicTree)\<[`FixtureProxy`](FixtureProxy)\> ## Methods -### bufferMove +### bufferMove() -▸ **bufferMove**(`proxyId`: number): *void* +> **bufferMove**(`proxyId`): `void` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`proxyId` | number | +• **proxyId**: `number` -**Returns:** *void* +#### Returns -___ +`void` -### createProxy +*** -▸ **createProxy**(`aabb`: [AABBValue](/api/interfaces/aabbvalue), `userData`: [FixtureProxy](/api/classes/fixtureproxy)): *number* +### createProxy() + +> **createProxy**(`aabb`, `userData`): `number` Create a proxy with an initial AABB. Pairs are not reported until UpdatePairs is called. -**Parameters:** +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) -Name | Type | ------- | ------ | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | -`userData` | [FixtureProxy](/api/classes/fixtureproxy) | +• **userData**: [`FixtureProxy`](FixtureProxy) -**Returns:** *number* +#### Returns -___ +`number` -### destroyProxy +*** -▸ **destroyProxy**(`proxyId`: number): *void* +### destroyProxy() + +> **destroyProxy**(`proxyId`): `void` Destroy a proxy. It is up to the client to remove any pairs. -**Parameters:** +#### Parameters + +• **proxyId**: `number` -Name | Type | ------- | ------ | -`proxyId` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### getFatAABB +### getFatAABB() -▸ **getFatAABB**(`proxyId`: number): *[AABB](/api/classes/aabb)* +> **getFatAABB**(`proxyId`): [`AABB`](AABB) Get the fat AABB for a proxy. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`proxyId` | number | +• **proxyId**: `number` -**Returns:** *[AABB](/api/classes/aabb)* +#### Returns -___ +[`AABB`](AABB) -### getProxyCount +*** -▸ **getProxyCount**(): *number* +### getProxyCount() + +> **getProxyCount**(): `number` Get the number of proxies. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getTreeBalance +### getTreeBalance() -▸ **getTreeBalance**(): *number* +> **getTreeBalance**(): `number` Get the balance (integer) of the embedded tree. -**Returns:** *number* +#### Returns -___ +`number` -### getTreeHeight +*** -▸ **getTreeHeight**(): *number* +### getTreeHeight() + +> **getTreeHeight**(): `number` Get the height of the embedded tree. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getTreeQuality +### getTreeQuality() -▸ **getTreeQuality**(): *number* +> **getTreeQuality**(): `number` Get the quality metric of the embedded tree. -**Returns:** *number* +#### Returns -___ +`number` -### getUserData +*** -▸ **getUserData**(`proxyId`: number): *[FixtureProxy](/api/classes/fixtureproxy)* +### getUserData() + +> **getUserData**(`proxyId`): [`FixtureProxy`](FixtureProxy) Get user data from a proxy. Returns null if the id is invalid. -**Parameters:** +#### Parameters + +• **proxyId**: `number` -Name | Type | ------- | ------ | -`proxyId` | number | +#### Returns -**Returns:** *[FixtureProxy](/api/classes/fixtureproxy)* +[`FixtureProxy`](FixtureProxy) -___ +*** -### moveProxy +### moveProxy() -▸ **moveProxy**(`proxyId`: number, `aabb`: [AABB](/api/classes/aabb), `displacement`: [Vec2Value](/api/interfaces/vec2value)): *void* +> **moveProxy**(`proxyId`, `aabb`, `displacement`): `void` Call moveProxy as many times as you like, then when you are done call UpdatePairs to finalized the proxy pairs (for your time step). -**Parameters:** +#### Parameters + +• **proxyId**: `number` -Name | Type | ------- | ------ | -`proxyId` | number | -`aabb` | [AABB](/api/classes/aabb) | -`displacement` | [Vec2Value](/api/interfaces/vec2value) | +• **aabb**: [`AABB`](AABB) -**Returns:** *void* +• **displacement**: [`Vec2Value`](../interfaces/Vec2Value) -___ +#### Returns -### query +`void` -▸ **query**(`aabb`: [AABBValue](/api/interfaces/aabbvalue), `queryCallback`: [DynamicTreeQueryCallback](/api/globals#dynamictreequerycallback)): *void* +*** + +### query() + +> **query**(`aabb`, `queryCallback`): `void` Query an AABB for overlapping proxies. The callback class is called for each proxy that overlaps the supplied AABB. -**Parameters:** +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +• **queryCallback**: [`DynamicTreeQueryCallback`](../type-aliases/DynamicTreeQueryCallback) -Name | Type | ------- | ------ | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | -`queryCallback` | [DynamicTreeQueryCallback](/api/globals#dynamictreequerycallback) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### queryCallback +### queryCallback() -▸ **queryCallback**(`proxyId`: number): *boolean* +> **queryCallback**(`proxyId`): `boolean` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`proxyId` | number | +• **proxyId**: `number` -**Returns:** *boolean* +#### Returns -___ +`boolean` -### rayCast +*** -▸ **rayCast**(`input`: [RayCastInput](/api/interfaces/raycastinput), `rayCastCallback`: [RayCastCallback](/api/globals#raycastcallback)): *void* +### rayCast() + +> **rayCast**(`input`, `rayCastCallback`): `void` Ray-cast against the proxies in the tree. This relies on the callback to perform a exact ray-cast in the case were the proxy contains a shape. The @@ -256,99 +242,100 @@ callback also performs the any collision filtering. This has performance roughly equal to k * log(n), where k is the number of collisions and n is the number of proxies in the tree. -**Parameters:** +#### Parameters + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. + +• **rayCastCallback**: [`RayCastCallback`](../type-aliases/RayCastCallback) -Name | Type | Description | ------- | ------ | ------ | -`input` | [RayCastInput](/api/interfaces/raycastinput) | The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. | -`rayCastCallback` | [RayCastCallback](/api/globals#raycastcallback) | A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. | +A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. -**Returns:** *void* +#### Returns -___ +`void` -### shiftOrigin +*** -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` Shift the world origin. Useful for large worlds. The shift formula is: position -= newOrigin -**Parameters:** +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | Description | ------- | ------ | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | The new origin with respect to the old origin | +The new origin with respect to the old origin -**Returns:** *void* +#### Returns -___ +`void` -### testOverlap +*** -▸ **testOverlap**(`proxyIdA`: number, `proxyIdB`: number): *boolean* +### testOverlap() + +> **testOverlap**(`proxyIdA`, `proxyIdB`): `boolean` Test overlap of fat AABBs. -**Parameters:** +#### Parameters + +• **proxyIdA**: `number` -Name | Type | ------- | ------ | -`proxyIdA` | number | -`proxyIdB` | number | +• **proxyIdB**: `number` -**Returns:** *boolean* +#### Returns -___ +`boolean` -### touchProxy +*** -▸ **touchProxy**(`proxyId`: number): *void* +### touchProxy() + +> **touchProxy**(`proxyId`): `void` Call to trigger a re-processing of it's pairs on the next call to UpdatePairs. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`proxyId` | number | +• **proxyId**: `number` -**Returns:** *void* +#### Returns -___ +`void` -### unbufferMove +*** -▸ **unbufferMove**(`proxyId`: number): *void* +### unbufferMove() -**Parameters:** +> **unbufferMove**(`proxyId`): `void` -Name | Type | ------- | ------ | -`proxyId` | number | +#### Parameters -**Returns:** *void* +• **proxyId**: `number` -___ +#### Returns -### updatePairs +`void` -▸ **updatePairs**(`addPairCallback`: function): *void* +*** -Update the pairs. This results in pair callbacks. This can only add pairs. +### updatePairs() -**Parameters:** +> **updatePairs**(`addPairCallback`): `void` -▪ **addPairCallback**: *function* +Update the pairs. This results in pair callbacks. This can only add pairs. -▸ (`userDataA`: [FixtureProxy](/api/classes/fixtureproxy), `userDataB`: [FixtureProxy](/api/classes/fixtureproxy)): *void* +#### Parameters -**Parameters:** +• **addPairCallback** -Name | Type | ------- | ------ | -`userDataA` | [FixtureProxy](/api/classes/fixtureproxy) | -`userDataB` | [FixtureProxy](/api/classes/fixtureproxy) | +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/chainshape.md b/docs/pages/api/classes/chainshape.md index cbb81b44..ebf9e0b0 100644 --- a/docs/pages/api/classes/chainshape.md +++ b/docs/pages/api/classes/chainshape.md @@ -1,4 +1,3 @@ - # Class: ChainShape A chain shape is a free form sequence of line segments. The chain has @@ -8,307 +7,348 @@ smooth collisions. WARNING: The chain will not collide properly if there are self-intersections. -## Hierarchy +## Extends -* [Shape](/api/classes/shape) +- [`Shape`](Shape) - ↳ **ChainShape** +## Constructors -## Index +### new ChainShape() -### Constructors +> **new ChainShape**(`vertices`?, `loop`?): [`ChainShape`](ChainShape) -* [constructor](/api/classes/chainshape#constructor) +#### Parameters -### Properties +• **vertices?**: [`Vec2Value`](../interfaces/Vec2Value)[] -* [style](/api/classes/chainshape#style) -* [TYPE](/api/classes/chainshape#static-type) +• **loop?**: `boolean` -### Methods +#### Returns -* [computeAABB](/api/classes/chainshape#computeaabb) -* [computeDistanceProxy](/api/classes/chainshape#computedistanceproxy) -* [computeMass](/api/classes/chainshape#computemass) -* [getChildCount](/api/classes/chainshape#getchildcount) -* [getChildEdge](/api/classes/chainshape#getchildedge) -* [getNextVertex](/api/classes/chainshape#getnextvertex) -* [getPrevVertex](/api/classes/chainshape#getprevvertex) -* [getRadius](/api/classes/chainshape#getradius) -* [getType](/api/classes/chainshape#gettype) -* [getVertex](/api/classes/chainshape#getvertex) -* [isLoop](/api/classes/chainshape#isloop) -* [rayCast](/api/classes/chainshape#raycast) -* [setNextVertex](/api/classes/chainshape#setnextvertex) -* [setPrevVertex](/api/classes/chainshape#setprevvertex) -* [testPoint](/api/classes/chainshape#testpoint) -* [isValid](/api/classes/chainshape#static-isvalid) +[`ChainShape`](ChainShape) -## Constructors +#### Overrides -### constructor +[`Shape`](Shape).[`constructor`](Shape#constructors) -\+ **new ChainShape**(`vertices?`: [Vec2Value](/api/interfaces/vec2value)[], `loop?`: boolean): *[ChainShape](/api/classes/chainshape)* +## Properties -**Parameters:** +### style -Name | Type | ------- | ------ | -`vertices?` | [Vec2Value](/api/interfaces/vec2value)[] | -`loop?` | boolean | +> **style**: [`Style`](../interfaces/Style) = `{}` -**Returns:** *[ChainShape](/api/classes/chainshape)* +Styling for dev-tools. -## Properties +#### Inherited from -### style +[`Shape`](Shape).[`style`](Shape#style) -• **style**: *[Style](/api/interfaces/style)* +*** -*Inherited from [Shape](/api/classes/shape).[style](/api/classes/shape#style)* +### TYPE -Styling for dev-tools. +> `static` **TYPE**: `"chain"` -___ +## Methods -### `Static` TYPE +### computeAABB() -▪ **TYPE**: *"chain"* = "chain" as const +> **computeAABB**(`aabb`, `xf`, `childIndex`): `void` -## Methods +Given a transform, compute the associated axis aligned bounding box for a +child shape. -### computeAABB +#### Parameters -▸ **computeAABB**(`aabb`: [AABBValue](/api/interfaces/aabbvalue), `xf`: [TransformValue](/api/globals#transformvalue), `childIndex`: number): *void* +• **aabb**: [`AABBValue`](../interfaces/AABBValue) -*Overrides [Shape](/api/classes/shape).[computeAABB](/api/classes/shape#abstract-computeaabb)* +Returns the axis aligned box. -Given a transform, compute the associated axis aligned bounding box for a -child shape. +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The world transform of the shape. + +• **childIndex**: `number` -**Parameters:** +The child shape -Name | Type | Description | ------- | ------ | ------ | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | Returns the axis aligned box. | -`xf` | [TransformValue](/api/globals#transformvalue) | The world transform of the shape. | -`childIndex` | number | The child shape | +#### Returns -**Returns:** *void* +`void` -___ +#### Overrides -### computeDistanceProxy +[`Shape`](Shape).[`computeAABB`](Shape#computeaabb) -▸ **computeDistanceProxy**(`proxy`: [DistanceProxy](/api/classes/distanceproxy), `childIndex`: number): *void* +*** -*Overrides [Shape](/api/classes/shape).[computeDistanceProxy](/api/classes/shape#abstract-computedistanceproxy)* +### computeDistanceProxy() -**Parameters:** +> **computeDistanceProxy**(`proxy`, `childIndex`): `void` -Name | Type | ------- | ------ | -`proxy` | [DistanceProxy](/api/classes/distanceproxy) | -`childIndex` | number | +#### Parameters -**Returns:** *void* +• **proxy**: [`DistanceProxy`](DistanceProxy) -___ +• **childIndex**: `number` -### computeMass +#### Returns -▸ **computeMass**(`massData`: [MassData](/api/interfaces/massdata), `density?`: number): *void* +`void` -*Overrides [Shape](/api/classes/shape).[computeMass](/api/classes/shape#abstract-computemass)* +#### Overrides + +[`Shape`](Shape).[`computeDistanceProxy`](Shape#computedistanceproxy) + +*** + +### computeMass() + +> **computeMass**(`massData`, `density`?): `void` Compute the mass properties of this shape using its dimensions and density. The inertia tensor is computed about the local origin. Chains have zero mass. -**Parameters:** +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) + +Returns the mass data for this shape. + +• **density?**: `number` -Name | Type | Description | ------- | ------ | ------ | -`massData` | [MassData](/api/interfaces/massdata) | Returns the mass data for this shape. | -`density?` | number | The density in kilograms per meter squared. | +The density in kilograms per meter squared. -**Returns:** *void* +#### Returns -___ +`void` -### getChildCount +#### Overrides -▸ **getChildCount**(): *number* +[`Shape`](Shape).[`computeMass`](Shape#computemass) -*Overrides [Shape](/api/classes/shape).[getChildCount](/api/classes/shape#abstract-getchildcount)* +*** + +### getChildCount() + +> **getChildCount**(): `number` Get the number of child primitives. -**Returns:** *number* +#### Returns + +`number` + +#### Overrides + +[`Shape`](Shape).[`getChildCount`](Shape#getchildcount) + +*** + +### getChildEdge() -___ +> **getChildEdge**(`edge`, `childIndex`): `void` -### getChildEdge +#### Parameters -▸ **getChildEdge**(`edge`: [EdgeShape](/api/classes/edgeshape), `childIndex`: number): *void* +• **edge**: [`EdgeShape`](EdgeShape) -**Parameters:** +• **childIndex**: `number` -Name | Type | ------- | ------ | -`edge` | [EdgeShape](/api/classes/edgeshape) | -`childIndex` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### getNextVertex +### getNextVertex() -▸ **getNextVertex**(): *[Vec2](/api/classes/vec2)* +> **getNextVertex**(): [`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getPrevVertex +*** -▸ **getPrevVertex**(): *[Vec2](/api/classes/vec2)* +### getPrevVertex() -**Returns:** *[Vec2](/api/classes/vec2)* +> **getPrevVertex**(): [`Vec2`](Vec2) -___ +#### Returns -### getRadius +[`Vec2`](Vec2) -▸ **getRadius**(): *number* +*** -*Overrides [Shape](/api/classes/shape).[getRadius](/api/classes/shape#abstract-getradius)* +### getRadius() -**Returns:** *number* +> **getRadius**(): `number` -___ +#### Returns -### getType +`number` -▸ **getType**(): *"chain"* +#### Overrides -*Overrides [Shape](/api/classes/shape).[getType](/api/classes/shape#abstract-gettype)* +[`Shape`](Shape).[`getRadius`](Shape#getradius) -**Returns:** *"chain"* +*** -___ +### getType() -### getVertex +> **getType**(): `"chain"` -▸ **getVertex**(`index`: number): *[Vec2](/api/classes/vec2)* +Get the type of this shape. You can use this to down cast to the concrete +shape. -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`index` | number | +`"chain"` -**Returns:** *[Vec2](/api/classes/vec2)* +the shape type. -___ +#### Overrides -### isLoop +[`Shape`](Shape).[`getType`](Shape#gettype) -▸ **isLoop**(): *boolean* +*** -**Returns:** *boolean* +### getVertex() -___ +> **getVertex**(`index`): [`Vec2`](Vec2) -### rayCast +#### Parameters -▸ **rayCast**(`output`: [RayCastOutput](/api/interfaces/raycastoutput), `input`: [RayCastInput](/api/interfaces/raycastinput), `xf`: [Transform](/api/classes/transform), `childIndex`: number): *boolean* +• **index**: `number` -*Overrides [Shape](/api/classes/shape).[rayCast](/api/classes/shape#abstract-raycast)* +#### Returns + +[`Vec2`](Vec2) + +*** + +### isLoop() + +> **isLoop**(): `boolean` + +#### Returns + +`boolean` + +*** + +### rayCast() + +> **rayCast**(`output`, `input`, `xf`, `childIndex`): `boolean` Cast a ray against a child shape. -**Parameters:** +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +The ray-cast results. + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input parameters. + +• **xf**: [`Transform`](Transform) -Name | Type | Description | ------- | ------ | ------ | -`output` | [RayCastOutput](/api/interfaces/raycastoutput) | The ray-cast results. | -`input` | [RayCastInput](/api/interfaces/raycastinput) | The ray-cast input parameters. | -`xf` | [Transform](/api/classes/transform) | The transform to be applied to the shape. | -`childIndex` | number | The child shape index | +The transform to be applied to the shape. -**Returns:** *boolean* +• **childIndex**: `number` -___ +The child shape index -### setNextVertex +#### Returns -▸ **setNextVertex**(`nextVertex`: [Vec2](/api/classes/vec2)): *void* +`boolean` + +#### Overrides + +[`Shape`](Shape).[`rayCast`](Shape#raycast) + +*** + +### setNextVertex() + +> **setNextVertex**(`nextVertex`): `void` Establish connectivity to a vertex that follows the last vertex. Don't call this for loops. -**Parameters:** +#### Parameters + +• **nextVertex**: [`Vec2`](Vec2) -Name | Type | ------- | ------ | -`nextVertex` | [Vec2](/api/classes/vec2) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setPrevVertex +### setPrevVertex() -▸ **setPrevVertex**(`prevVertex`: [Vec2](/api/classes/vec2)): *void* +> **setPrevVertex**(`prevVertex`): `void` Establish connectivity to a vertex that precedes the first vertex. Don't call this for loops. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`prevVertex` | [Vec2](/api/classes/vec2) | +• **prevVertex**: [`Vec2`](Vec2) -**Returns:** *void* +#### Returns -___ +`void` -### testPoint +*** -▸ **testPoint**(`xf`: [TransformValue](/api/globals#transformvalue), `p`: [Vec2Value](/api/interfaces/vec2value)): *false* +### testPoint() -*Overrides [Shape](/api/classes/shape).[testPoint](/api/classes/shape#abstract-testpoint)* +> **testPoint**(`xf`, `p`): `false` Test a point for containment in this shape. This only works for convex shapes. This always return false. -**Parameters:** +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The shape world transform. + +• **p**: [`Vec2Value`](../interfaces/Vec2Value) + +A point in world coordinates. + +#### Returns + +`false` + +#### Overrides + +[`Shape`](Shape).[`testPoint`](Shape#testpoint) -Name | Type | Description | ------- | ------ | ------ | -`xf` | [TransformValue](/api/globals#transformvalue) | The shape world transform. | -`p` | [Vec2Value](/api/interfaces/vec2value) | A point in world coordinates. | +*** -**Returns:** *false* +### isValid() -___ +> `static` **isValid**(`obj`): `boolean` -### `Static` isValid +#### Parameters -▸ **isValid**(`obj`: any): *boolean* +• **obj**: `any` -*Inherited from [Shape](/api/classes/shape).[isValid](/api/classes/shape#static-isvalid)* +#### Returns -**Parameters:** +`boolean` -Name | Type | ------- | ------ | -`obj` | any | +#### Inherited from -**Returns:** *boolean* +[`Shape`](Shape).[`isValid`](Shape#isvalid) diff --git a/docs/pages/api/classes/circleshape.md b/docs/pages/api/classes/circleshape.md index a46a0198..1ea3339f 100644 --- a/docs/pages/api/classes/circleshape.md +++ b/docs/pages/api/classes/circleshape.md @@ -1,227 +1,275 @@ - # Class: CircleShape -## Hierarchy +Circle shape. -* [Shape](/api/classes/shape) +## Extends - ↳ **CircleShape** +- [`Shape`](Shape) -## Index +## Constructors -### Constructors +### new CircleShape() -* [constructor](/api/classes/circleshape#constructor) +> **new CircleShape**(`position`, `radius`?): [`CircleShape`](CircleShape) -### Properties +#### Parameters -* [style](/api/classes/circleshape#style) -* [TYPE](/api/classes/circleshape#static-type) +• **position**: [`Vec2Value`](../interfaces/Vec2Value) -### Methods +• **radius?**: `number` -* [computeAABB](/api/classes/circleshape#computeaabb) -* [computeDistanceProxy](/api/classes/circleshape#computedistanceproxy) -* [computeMass](/api/classes/circleshape#computemass) -* [getCenter](/api/classes/circleshape#getcenter) -* [getChildCount](/api/classes/circleshape#getchildcount) -* [getRadius](/api/classes/circleshape#getradius) -* [getType](/api/classes/circleshape#gettype) -* [rayCast](/api/classes/circleshape#raycast) -* [testPoint](/api/classes/circleshape#testpoint) -* [isValid](/api/classes/circleshape#static-isvalid) +#### Returns -## Constructors +[`CircleShape`](CircleShape) -### constructor +#### Overrides -\+ **new CircleShape**(`position`: [Vec2Value](/api/interfaces/vec2value), `radius?`: number): *[CircleShape](/api/classes/circleshape)* +[`Shape`](Shape).[`constructor`](Shape#constructors) -**Parameters:** +### new CircleShape() -Name | Type | ------- | ------ | -`position` | [Vec2Value](/api/interfaces/vec2value) | -`radius?` | number | +> **new CircleShape**(`radius`?): [`CircleShape`](CircleShape) -**Returns:** *[CircleShape](/api/classes/circleshape)* +#### Parameters -\+ **new CircleShape**(`radius?`: number): *[CircleShape](/api/classes/circleshape)* +• **radius?**: `number` -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`radius?` | number | +[`CircleShape`](CircleShape) -**Returns:** *[CircleShape](/api/classes/circleshape)* +#### Overrides -## Properties +`Shape.constructor` -### style +## Properties -• **style**: *[Style](/api/interfaces/style)* +### style -*Inherited from [Shape](/api/classes/shape).[style](/api/classes/shape#style)* +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. -___ +#### Inherited from -### `Static` TYPE +[`Shape`](Shape).[`style`](Shape#style) -▪ **TYPE**: *"circle"* = "circle" as const +*** -## Methods +### TYPE -### computeAABB +> `static` **TYPE**: `"circle"` -▸ **computeAABB**(`aabb`: [AABBValue](/api/interfaces/aabbvalue), `xf`: [TransformValue](/api/globals#transformvalue), `childIndex`: number): *void* +## Methods + +### computeAABB() -*Overrides [Shape](/api/classes/shape).[computeAABB](/api/classes/shape#abstract-computeaabb)* +> **computeAABB**(`aabb`, `xf`, `childIndex`): `void` Given a transform, compute the associated axis aligned bounding box for a child shape. -**Parameters:** +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +Returns the axis aligned box. + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The world transform of the shape. -Name | Type | Description | ------- | ------ | ------ | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | Returns the axis aligned box. | -`xf` | [TransformValue](/api/globals#transformvalue) | The world transform of the shape. | -`childIndex` | number | The child shape | +• **childIndex**: `number` -**Returns:** *void* +The child shape -___ +#### Returns -### computeDistanceProxy +`void` -▸ **computeDistanceProxy**(`proxy`: [DistanceProxy](/api/classes/distanceproxy)): *void* +#### Overrides -*Overrides [Shape](/api/classes/shape).[computeDistanceProxy](/api/classes/shape#abstract-computedistanceproxy)* +[`Shape`](Shape).[`computeAABB`](Shape#computeaabb) -**Parameters:** +*** -Name | Type | ------- | ------ | -`proxy` | [DistanceProxy](/api/classes/distanceproxy) | +### computeDistanceProxy() -**Returns:** *void* +> **computeDistanceProxy**(`proxy`): `void` -___ +#### Parameters -### computeMass +• **proxy**: [`DistanceProxy`](DistanceProxy) -▸ **computeMass**(`massData`: [MassData](/api/interfaces/massdata), `density`: number): *void* +#### Returns -*Overrides [Shape](/api/classes/shape).[computeMass](/api/classes/shape#abstract-computemass)* +`void` + +#### Overrides + +[`Shape`](Shape).[`computeDistanceProxy`](Shape#computedistanceproxy) + +*** + +### computeMass() + +> **computeMass**(`massData`, `density`): `void` Compute the mass properties of this shape using its dimensions and density. The inertia tensor is computed about the local origin. -**Parameters:** +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) -Name | Type | Description | ------- | ------ | ------ | -`massData` | [MassData](/api/interfaces/massdata) | Returns the mass data for this shape. | -`density` | number | The density in kilograms per meter squared. | +Returns the mass data for this shape. -**Returns:** *void* +• **density**: `number` -___ +The density in kilograms per meter squared. -### getCenter +#### Returns -▸ **getCenter**(): *[Vec2](/api/classes/vec2)* +`void` -**Returns:** *[Vec2](/api/classes/vec2)* +#### Overrides -___ +[`Shape`](Shape).[`computeMass`](Shape#computemass) -### getChildCount +*** -▸ **getChildCount**(): *1* +### getCenter() -*Overrides [Shape](/api/classes/shape).[getChildCount](/api/classes/shape#abstract-getchildcount)* +> **getCenter**(): [`Vec2`](Vec2) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### getChildCount() + +> **getChildCount**(): `1` Get the number of child primitives. -**Returns:** *1* +#### Returns + +`1` -___ +#### Overrides -### getRadius +[`Shape`](Shape).[`getChildCount`](Shape#getchildcount) -▸ **getRadius**(): *number* +*** -*Overrides [Shape](/api/classes/shape).[getRadius](/api/classes/shape#abstract-getradius)* +### getRadius() -**Returns:** *number* +> **getRadius**(): `number` -___ +#### Returns -### getType +`number` -▸ **getType**(): *"circle"* +#### Overrides -*Overrides [Shape](/api/classes/shape).[getType](/api/classes/shape#abstract-gettype)* +[`Shape`](Shape).[`getRadius`](Shape#getradius) -**Returns:** *"circle"* +*** -___ +### getType() -### rayCast +> **getType**(): `"circle"` -▸ **rayCast**(`output`: [RayCastOutput](/api/interfaces/raycastoutput), `input`: [RayCastInput](/api/interfaces/raycastinput), `xf`: [Transform](/api/classes/transform), `childIndex`: number): *boolean* +Get the type of this shape. You can use this to down cast to the concrete +shape. -*Overrides [Shape](/api/classes/shape).[rayCast](/api/classes/shape#abstract-raycast)* +#### Returns + +`"circle"` + +the shape type. + +#### Overrides + +[`Shape`](Shape).[`getType`](Shape#gettype) + +*** + +### rayCast() + +> **rayCast**(`output`, `input`, `xf`, `childIndex`): `boolean` Cast a ray against a child shape. -**Parameters:** +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +The ray-cast results. + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input parameters. + +• **xf**: [`Transform`](Transform) -Name | Type | Description | ------- | ------ | ------ | -`output` | [RayCastOutput](/api/interfaces/raycastoutput) | The ray-cast results. | -`input` | [RayCastInput](/api/interfaces/raycastinput) | The ray-cast input parameters. | -`xf` | [Transform](/api/classes/transform) | The transform to be applied to the shape. | -`childIndex` | number | The child shape index | +The transform to be applied to the shape. -**Returns:** *boolean* +• **childIndex**: `number` -___ +The child shape index -### testPoint +#### Returns -▸ **testPoint**(`xf`: [TransformValue](/api/globals#transformvalue), `p`: [Vec2Value](/api/interfaces/vec2value)): *boolean* +`boolean` -*Overrides [Shape](/api/classes/shape).[testPoint](/api/classes/shape#abstract-testpoint)* +#### Overrides + +[`Shape`](Shape).[`rayCast`](Shape#raycast) + +*** + +### testPoint() + +> **testPoint**(`xf`, `p`): `boolean` Test a point for containment in this shape. This only works for convex shapes. -**Parameters:** +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The shape world transform. + +• **p**: [`Vec2Value`](../interfaces/Vec2Value) + +A point in world coordinates. + +#### Returns + +`boolean` + +#### Overrides + +[`Shape`](Shape).[`testPoint`](Shape#testpoint) -Name | Type | Description | ------- | ------ | ------ | -`xf` | [TransformValue](/api/globals#transformvalue) | The shape world transform. | -`p` | [Vec2Value](/api/interfaces/vec2value) | A point in world coordinates. | +*** -**Returns:** *boolean* +### isValid() -___ +> `static` **isValid**(`obj`): `boolean` -### `Static` isValid +#### Parameters -▸ **isValid**(`obj`: any): *boolean* +• **obj**: `any` -*Inherited from [Shape](/api/classes/shape).[isValid](/api/classes/shape#static-isvalid)* +#### Returns -**Parameters:** +`boolean` -Name | Type | ------- | ------ | -`obj` | any | +#### Inherited from -**Returns:** *boolean* +[`Shape`](Shape).[`isValid`](Shape#isvalid) diff --git a/docs/pages/api/classes/clipvertex.md b/docs/pages/api/classes/clipvertex.md index 40296b46..1e1ee3e5 100644 --- a/docs/pages/api/classes/clipvertex.md +++ b/docs/pages/api/classes/clipvertex.md @@ -1,54 +1,49 @@ - # Class: ClipVertex Used for computing contact manifolds. -## Hierarchy - -* **ClipVertex** - -## Index +## Constructors -### Properties +### new ClipVertex() -* [id](/api/classes/clipvertex#id) -* [v](/api/classes/clipvertex#v) +> **new ClipVertex**(): [`ClipVertex`](ClipVertex) -### Methods +#### Returns -* [recycle](/api/classes/clipvertex#recycle) -* [set](/api/classes/clipvertex#set) +[`ClipVertex`](ClipVertex) ## Properties -### id +### id -• **id**: *[ContactID](/api/classes/contactid)* = new ContactID() +> **id**: [`ContactID`](ContactID) -___ +*** -### v +### v -• **v**: *[Vec2Value](/api/interfaces/vec2value)* = matrix.vec2(0, 0) +> **v**: [`Vec2Value`](../interfaces/Vec2Value) ## Methods -### recycle +### recycle() + +> **recycle**(): `void` + +#### Returns -▸ **recycle**(): *void* +`void` -**Returns:** *void* +*** -___ +### set() -### set +> **set**(`o`): `void` -▸ **set**(`o`: [ClipVertex](/api/classes/clipvertex)): *void* +#### Parameters -**Parameters:** +• **o**: [`ClipVertex`](ClipVertex) -Name | Type | ------- | ------ | -`o` | [ClipVertex](/api/classes/clipvertex) | +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/contact.md b/docs/pages/api/classes/contact.md index 76bd0b77..d58c796b 100644 --- a/docs/pages/api/classes/contact.md +++ b/docs/pages/api/classes/contact.md @@ -1,409 +1,415 @@ - # Class: Contact The class manages contact between two shapes. A contact exists for each overlapping AABB in the broad-phase (except if filtered). Therefore a contact object may exist that has no contact points. -## Hierarchy - -* **Contact** - -## Index - -### Methods - -* [evaluate](/api/classes/contact#evaluate) -* [flagForFiltering](/api/classes/contact#flagforfiltering) -* [getChildIndexA](/api/classes/contact#getchildindexa) -* [getChildIndexB](/api/classes/contact#getchildindexb) -* [getFixtureA](/api/classes/contact#getfixturea) -* [getFixtureB](/api/classes/contact#getfixtureb) -* [getFriction](/api/classes/contact#getfriction) -* [getManifold](/api/classes/contact#getmanifold) -* [getNext](/api/classes/contact#getnext) -* [getRestitution](/api/classes/contact#getrestitution) -* [getTangentSpeed](/api/classes/contact#gettangentspeed) -* [getWorldManifold](/api/classes/contact#getworldmanifold) -* [initConstraint](/api/classes/contact#initconstraint) -* [initVelocityConstraint](/api/classes/contact#initvelocityconstraint) -* [isEnabled](/api/classes/contact#isenabled) -* [isTouching](/api/classes/contact#istouching) -* [resetFriction](/api/classes/contact#resetfriction) -* [resetRestitution](/api/classes/contact#resetrestitution) -* [setEnabled](/api/classes/contact#setenabled) -* [setFriction](/api/classes/contact#setfriction) -* [setRestitution](/api/classes/contact#setrestitution) -* [setTangentSpeed](/api/classes/contact#settangentspeed) -* [solvePositionConstraint](/api/classes/contact#solvepositionconstraint) -* [solvePositionConstraintTOI](/api/classes/contact#solvepositionconstrainttoi) -* [solveVelocityConstraint](/api/classes/contact#solvevelocityconstraint) -* [storeConstraintImpulses](/api/classes/contact#storeconstraintimpulses) -* [update](/api/classes/contact#update) -* [warmStartConstraint](/api/classes/contact#warmstartconstraint) +## Constructors + +### new Contact() + +> **new Contact**(): [`Contact`](Contact) + +#### Returns + +[`Contact`](Contact) ## Methods -### evaluate +### evaluate() -▸ **evaluate**(`manifold`: [Manifold](/api/classes/manifold), `xfA`: [TransformValue](/api/globals#transformvalue), `xfB`: [TransformValue](/api/globals#transformvalue)): *void* +> **evaluate**(`manifold`, `xfA`, `xfB`): `void` Called by Update method, and implemented by subclasses. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`manifold` | [Manifold](/api/classes/manifold) | -`xfA` | [TransformValue](/api/globals#transformvalue) | -`xfB` | [TransformValue](/api/globals#transformvalue) | +• **manifold**: [`Manifold`](Manifold) -**Returns:** *void* +• **xfA**: [`TransformValue`](../type-aliases/TransformValue) -___ +• **xfB**: [`TransformValue`](../type-aliases/TransformValue) -### flagForFiltering +#### Returns -▸ **flagForFiltering**(): *void* +`void` + +*** + +### flagForFiltering() + +> **flagForFiltering**(): `void` Flag this contact for filtering. Filtering will occur the next time step. -**Returns:** *void* +#### Returns -___ +`void` -### getChildIndexA +*** -▸ **getChildIndexA**(): *number* +### getChildIndexA() + +> **getChildIndexA**(): `number` Get the child primitive index for fixture A. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getChildIndexB +### getChildIndexB() -▸ **getChildIndexB**(): *number* +> **getChildIndexB**(): `number` Get the child primitive index for fixture B. -**Returns:** *number* +#### Returns -___ +`number` -### getFixtureA +*** -▸ **getFixtureA**(): *[Fixture](/api/classes/fixture)* +### getFixtureA() + +> **getFixtureA**(): [`Fixture`](Fixture) Get fixture A in this contact. -**Returns:** *[Fixture](/api/classes/fixture)* +#### Returns + +[`Fixture`](Fixture) -___ +*** -### getFixtureB +### getFixtureB() -▸ **getFixtureB**(): *[Fixture](/api/classes/fixture)* +> **getFixtureB**(): [`Fixture`](Fixture) Get fixture B in this contact. -**Returns:** *[Fixture](/api/classes/fixture)* +#### Returns + +[`Fixture`](Fixture) -___ +*** -### getFriction +### getFriction() -▸ **getFriction**(): *number* +> **getFriction**(): `number` Get the friction. -**Returns:** *number* +#### Returns -___ +`number` -### getManifold +*** -▸ **getManifold**(): *[Manifold](/api/classes/manifold)* +### getManifold() + +> **getManifold**(): [`Manifold`](Manifold) Get the contact manifold. Do not modify the manifold unless you understand the internals of the library. -**Returns:** *[Manifold](/api/classes/manifold)* +#### Returns + +[`Manifold`](Manifold) -___ +*** -### getNext +### getNext() -▸ **getNext**(): *[Contact](/api/classes/contact) | null* +> **getNext**(): [`Contact`](Contact) Get the next contact in the world's contact list. -**Returns:** *[Contact](/api/classes/contact) | null* +#### Returns -___ +[`Contact`](Contact) -### getRestitution +*** -▸ **getRestitution**(): *number* +### getRestitution() + +> **getRestitution**(): `number` Get the restitution. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getTangentSpeed +### getTangentSpeed() -▸ **getTangentSpeed**(): *number* +> **getTangentSpeed**(): `number` Get the desired tangent speed. In meters per second. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getWorldManifold +### getWorldManifold() -▸ **getWorldManifold**(`worldManifold`: [WorldManifold](/api/classes/worldmanifold) | null): *[WorldManifold](/api/classes/worldmanifold) | undefined* +> **getWorldManifold**(`worldManifold`): [`WorldManifold`](WorldManifold) Get the world manifold. -**Parameters:** +#### Parameters + +• **worldManifold**: [`WorldManifold`](WorldManifold) + +#### Returns -Name | Type | ------- | ------ | -`worldManifold` | [WorldManifold](/api/classes/worldmanifold) | null | +[`WorldManifold`](WorldManifold) -**Returns:** *[WorldManifold](/api/classes/worldmanifold) | undefined* +*** -___ +### initConstraint() -### initConstraint +> **initConstraint**(`step`): `void` -▸ **initConstraint**(`step`: [TimeStep](/api/classes/timestep)): *void* +#### Parameters -**Parameters:** +• **step**: [`TimeStep`](TimeStep) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### initVelocityConstraint +### initVelocityConstraint() -▸ **initVelocityConstraint**(`step`: [TimeStep](/api/classes/timestep)): *void* +> **initVelocityConstraint**(`step`): `void` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +• **step**: [`TimeStep`](TimeStep) -**Returns:** *void* +#### Returns -___ +`void` -### isEnabled +*** -▸ **isEnabled**(): *boolean* +### isEnabled() + +> **isEnabled**(): `boolean` Has this contact been disabled? -**Returns:** *boolean* +#### Returns + +`boolean` -___ +*** -### isTouching +### isTouching() -▸ **isTouching**(): *boolean* +> **isTouching**(): `boolean` Is this contact touching? -**Returns:** *boolean* +#### Returns + +`boolean` -___ +*** -### resetFriction +### resetFriction() -▸ **resetFriction**(): *void* +> **resetFriction**(): `void` Reset the friction mixture to the default value. -**Returns:** *void* +#### Returns -___ +`void` -### resetRestitution +*** -▸ **resetRestitution**(): *void* +### resetRestitution() + +> **resetRestitution**(): `void` Reset the restitution to the default value. -**Returns:** *void* +#### Returns + +`void` -___ +*** -### setEnabled +### setEnabled() -▸ **setEnabled**(`flag`: boolean): *void* +> **setEnabled**(`flag`): `void` Enable/disable this contact. This can be used inside the pre-solve contact listener. The contact is only disabled for the current time step (or sub-step in continuous collisions). -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`flag` | boolean | +• **flag**: `boolean` -**Returns:** *void* +#### Returns -___ +`void` -### setFriction +*** -▸ **setFriction**(`friction`: number): *void* +### setFriction() + +> **setFriction**(`friction`): `void` Override the default friction mixture. You can call this in "pre-solve" callback. This value persists until set or reset. -**Parameters:** +#### Parameters + +• **friction**: `number` -Name | Type | ------- | ------ | -`friction` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setRestitution +### setRestitution() -▸ **setRestitution**(`restitution`: number): *void* +> **setRestitution**(`restitution`): `void` Override the default restitution mixture. You can call this in "pre-solve" callback. The value persists until you set or reset. -**Parameters:** +#### Parameters + +• **restitution**: `number` -Name | Type | ------- | ------ | -`restitution` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setTangentSpeed +### setTangentSpeed() -▸ **setTangentSpeed**(`speed`: number): *void* +> **setTangentSpeed**(`speed`): `void` Set the desired tangent speed for a conveyor belt behavior. In meters per second. -**Parameters:** +#### Parameters + +• **speed**: `number` + +#### Returns -Name | Type | ------- | ------ | -`speed` | number | +`void` -**Returns:** *void* +*** -___ +### solvePositionConstraint() -### solvePositionConstraint +> **solvePositionConstraint**(`step`): `number` -▸ **solvePositionConstraint**(`step`: [TimeStep](/api/classes/timestep)): *number* +#### Parameters -**Parameters:** +• **step**: [`TimeStep`](TimeStep) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Returns -**Returns:** *number* +`number` -___ +*** -### solvePositionConstraintTOI +### solvePositionConstraintTOI() -▸ **solvePositionConstraintTOI**(`step`: [TimeStep](/api/classes/timestep), `toiA`: [Body](/api/classes/body), `toiB`: [Body](/api/classes/body)): *number* +> **solvePositionConstraintTOI**(`step`, `toiA`, `toiB`): `number` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | -`toiA` | [Body](/api/classes/body) | -`toiB` | [Body](/api/classes/body) | +• **step**: [`TimeStep`](TimeStep) -**Returns:** *number* +• **toiA**: [`Body`](Body) -___ +• **toiB**: [`Body`](Body) -### solveVelocityConstraint +#### Returns -▸ **solveVelocityConstraint**(`step`: [TimeStep](/api/classes/timestep)): *void* +`number` -**Parameters:** +*** -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +### solveVelocityConstraint() -**Returns:** *void* +> **solveVelocityConstraint**(`step`): `void` -___ +#### Parameters -### storeConstraintImpulses +• **step**: [`TimeStep`](TimeStep) -▸ **storeConstraintImpulses**(`step`: [TimeStep](/api/classes/timestep)): *void* +#### Returns -**Parameters:** +`void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +*** -**Returns:** *void* +### storeConstraintImpulses() -___ +> **storeConstraintImpulses**(`step`): `void` -### update +#### Parameters -▸ **update**(`listener?`: object): *void* +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`void` + +*** + +### update() + +> **update**(`listener`?): `void` Updates the contact manifold and touching status. Note: do not assume the fixture AABBs are overlapping or are valid. -**Parameters:** +#### Parameters + +• **listener?** + +• **listener.beginContact?** + +• **listener.endContact?** + +• **listener.preSolve?** -▪`Optional` **listener**: *object* +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`beginContact` | | - | -`endContact` | | - | -`preSolve` | | | +`void` -**Returns:** *void* +*** -___ +### warmStartConstraint() -### warmStartConstraint +> **warmStartConstraint**(`step`): `void` -▸ **warmStartConstraint**(`step`: [TimeStep](/api/classes/timestep)): *void* +#### Parameters -**Parameters:** +• **step**: [`TimeStep`](TimeStep) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/contactedge.md b/docs/pages/api/classes/contactedge.md index 16119ed0..3dec1f56 100644 --- a/docs/pages/api/classes/contactedge.md +++ b/docs/pages/api/classes/contactedge.md @@ -1,4 +1,3 @@ - # Class: ContactEdge A contact edge is used to connect bodies and contacts together in a contact @@ -6,57 +5,40 @@ graph where each body is a node and each contact is an edge. A contact edge belongs to a doubly linked list maintained in each attached body. Each contact has two contact nodes, one for each attached body. -## Hierarchy - -* **ContactEdge** - -## Index - -### Constructors - -* [constructor](/api/classes/contactedge#constructor) - -### Properties - -* [contact](/api/classes/contactedge#contact) -* [next](/api/classes/contactedge#next) -* [other](/api/classes/contactedge#other) -* [prev](/api/classes/contactedge#prev) - ## Constructors -### constructor +### new ContactEdge() + +> **new ContactEdge**(`contact`): [`ContactEdge`](ContactEdge) -\+ **new ContactEdge**(`contact`: [Contact](/api/classes/contact)): *[ContactEdge](/api/classes/contactedge)* +#### Parameters -**Parameters:** +• **contact**: [`Contact`](Contact) -Name | Type | ------- | ------ | -`contact` | [Contact](/api/classes/contact) | +#### Returns -**Returns:** *[ContactEdge](/api/classes/contactedge)* +[`ContactEdge`](ContactEdge) ## Properties -### contact +### contact -• **contact**: *[Contact](/api/classes/contact)* +> **contact**: [`Contact`](Contact) -___ +*** -### next +### next -• **next**: *[ContactEdge](/api/classes/contactedge) | null* = null +> **next**: [`ContactEdge`](ContactEdge) = `null` -___ +*** -### other +### other -• **other**: *[Body](/api/classes/body) | null* = null +> **other**: [`Body`](Body) = `null` -___ +*** -### prev +### prev -• **prev**: *[ContactEdge](/api/classes/contactedge) | null* = null +> **prev**: [`ContactEdge`](ContactEdge) = `null` diff --git a/docs/pages/api/classes/contactid.md b/docs/pages/api/classes/contactid.md index 6102b98f..175a5174 100644 --- a/docs/pages/api/classes/contactid.md +++ b/docs/pages/api/classes/contactid.md @@ -1,114 +1,109 @@ - # Class: ContactID Contact ids to facilitate warm starting. ContactFeature: The features that intersect to form the contact point. -## Hierarchy - -* **ContactID** - -## Index +## Constructors -### Properties +### new ContactID() -* [indexA](/api/classes/contactid#indexa) -* [indexB](/api/classes/contactid#indexb) -* [key](/api/classes/contactid#key) -* [typeA](/api/classes/contactid#typea) -* [typeB](/api/classes/contactid#typeb) +> **new ContactID**(): [`ContactID`](ContactID) -### Methods +#### Returns -* [recycle](/api/classes/contactid#recycle) -* [set](/api/classes/contactid#set) -* [setFeatures](/api/classes/contactid#setfeatures) -* [swapFeatures](/api/classes/contactid#swapfeatures) +[`ContactID`](ContactID) ## Properties -### indexA +### indexA -• **indexA**: *number* = -1 +> **indexA**: `number` = `-1` ContactFeature index on shapeA -___ +*** -### indexB +### indexB -• **indexB**: *number* = -1 +> **indexB**: `number` = `-1` ContactFeature index on shapeB -___ +*** -### key +### key -• **key**: *number* = -1 +> **key**: `number` = `-1` Used to quickly compare contact ids. -___ +*** -### typeA +### typeA -• **typeA**: *[ContactFeatureType](/api/enums/contactfeaturetype)* = ContactFeatureType.e_unset +> **typeA**: [`ContactFeatureType`](../enumerations/ContactFeatureType) = `ContactFeatureType.e_unset` ContactFeature type on shapeA -___ +*** -### typeB +### typeB -• **typeB**: *[ContactFeatureType](/api/enums/contactfeaturetype)* = ContactFeatureType.e_unset +> **typeB**: [`ContactFeatureType`](../enumerations/ContactFeatureType) = `ContactFeatureType.e_unset` ContactFeature type on shapeB ## Methods -### recycle +### recycle() + +> **recycle**(): `void` + +#### Returns + +`void` + +*** + +### set() + +> **set**(`that`): `void` + +#### Parameters -▸ **recycle**(): *void* +• **that**: [`ContactID`](ContactID) -**Returns:** *void* +#### Returns -___ +`void` -### set +*** -▸ **set**(`that`: [ContactID](/api/classes/contactid)): *void* +### setFeatures() -**Parameters:** +> **setFeatures**(`indexA`, `typeA`, `indexB`, `typeB`): `void` -Name | Type | ------- | ------ | -`that` | [ContactID](/api/classes/contactid) | +#### Parameters -**Returns:** *void* +• **indexA**: `number` -___ +• **typeA**: [`ContactFeatureType`](../enumerations/ContactFeatureType) -### setFeatures +• **indexB**: `number` -▸ **setFeatures**(`indexA`: number, `typeA`: [ContactFeatureType](/api/enums/contactfeaturetype), `indexB`: number, `typeB`: [ContactFeatureType](/api/enums/contactfeaturetype)): *void* +• **typeB**: [`ContactFeatureType`](../enumerations/ContactFeatureType) -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`indexA` | number | -`typeA` | [ContactFeatureType](/api/enums/contactfeaturetype) | -`indexB` | number | -`typeB` | [ContactFeatureType](/api/enums/contactfeaturetype) | +`void` -**Returns:** *void* +*** -___ +### swapFeatures() -### swapFeatures +> **swapFeatures**(): `void` -▸ **swapFeatures**(): *void* +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/contactimpulse.md b/docs/pages/api/classes/contactimpulse.md index f32e1061..958b8442 100644 --- a/docs/pages/api/classes/contactimpulse.md +++ b/docs/pages/api/classes/contactimpulse.md @@ -1,63 +1,53 @@ - # Class: ContactImpulse Contact impulses for reporting. Impulses are used instead of forces because sub-step forces may approach infinity for rigid body collisions. These match up one-to-one with the contact points in Manifold. -## Hierarchy - -* **ContactImpulse** - -## Index - -### Constructors - -* [constructor](/api/classes/contactimpulse#constructor) +## Constructors -### Accessors +### new ContactImpulse() -* [normalImpulses](/api/classes/contactimpulse#normalimpulses) -* [tangentImpulses](/api/classes/contactimpulse#tangentimpulses) +> **new ContactImpulse**(`contact`): [`ContactImpulse`](ContactImpulse) -### Methods +#### Parameters -* [recycle](/api/classes/contactimpulse#recycle) +• **contact**: [`Contact`](Contact) -## Constructors +#### Returns -### constructor +[`ContactImpulse`](ContactImpulse) -\+ **new ContactImpulse**(`contact`: [Contact](/api/classes/contact)): *[ContactImpulse](/api/classes/contactimpulse)* +## Accessors -**Parameters:** +### normalImpulses -Name | Type | ------- | ------ | -`contact` | [Contact](/api/classes/contact) | +#### Get Signature -**Returns:** *[ContactImpulse](/api/classes/contactimpulse)* +> **get** **normalImpulses**(): `number`[] -## Accessors +##### Returns -### normalImpulses +`number`[] -• **get normalImpulses**(): *number[]* +*** -**Returns:** *number[]* +### tangentImpulses -___ +#### Get Signature -### tangentImpulses +> **get** **tangentImpulses**(): `number`[] -• **get tangentImpulses**(): *number[]* +##### Returns -**Returns:** *number[]* +`number`[] ## Methods -### recycle +### recycle() + +> **recycle**(): `void` -▸ **recycle**(): *void* +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/distanceinput.md b/docs/pages/api/classes/distanceinput.md index 8673bfee..5494f2b7 100644 --- a/docs/pages/api/classes/distanceinput.md +++ b/docs/pages/api/classes/distanceinput.md @@ -1,61 +1,54 @@ - # Class: DistanceInput Input for Distance. You have to option to use the shape radii in the computation. Even -## Hierarchy - -* **DistanceInput** +## Constructors -## Index +### new DistanceInput() -### Properties +> **new DistanceInput**(): [`DistanceInput`](DistanceInput) -* [proxyA](/api/classes/distanceinput#readonly-proxya) -* [proxyB](/api/classes/distanceinput#readonly-proxyb) -* [transformA](/api/classes/distanceinput#readonly-transforma) -* [transformB](/api/classes/distanceinput#readonly-transformb) -* [useRadii](/api/classes/distanceinput#useradii) +#### Returns -### Methods - -* [recycle](/api/classes/distanceinput#recycle) +[`DistanceInput`](DistanceInput) ## Properties -### `Readonly` proxyA +### proxyA -• **proxyA**: *[DistanceProxy](/api/classes/distanceproxy)‹›* = new DistanceProxy() +> `readonly` **proxyA**: [`DistanceProxy`](DistanceProxy) -___ +*** -### `Readonly` proxyB +### proxyB -• **proxyB**: *[DistanceProxy](/api/classes/distanceproxy)‹›* = new DistanceProxy() +> `readonly` **proxyB**: [`DistanceProxy`](DistanceProxy) -___ +*** -### `Readonly` transformA +### transformA -• **transformA**: *[Transform](/api/classes/transform)‹›* = Transform.identity() +> `readonly` **transformA**: [`Transform`](Transform) -___ +*** -### `Readonly` transformB +### transformB -• **transformB**: *[Transform](/api/classes/transform)‹›* = Transform.identity() +> `readonly` **transformB**: [`Transform`](Transform) -___ +*** -### useRadii +### useRadii -• **useRadii**: *boolean* = false +> **useRadii**: `boolean` = `false` ## Methods -### recycle +### recycle() + +> **recycle**(): `void` -▸ **recycle**(): *void* +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/distancejoint.md b/docs/pages/api/classes/distancejoint.md index c46c6d01..15372dda 100644 --- a/docs/pages/api/classes/distancejoint.md +++ b/docs/pages/api/classes/distancejoint.md @@ -1,416 +1,453 @@ - # Class: DistanceJoint A distance joint constrains two points on two bodies to remain at a fixed distance from each other. You can view this as a massless, rigid rod. -## Hierarchy +## Extends -* [Joint](/api/classes/joint) +- [`Joint`](Joint) - ↳ **DistanceJoint** +## Constructors -## Index +### new DistanceJoint() -### Constructors +> **new DistanceJoint**(`def`): [`DistanceJoint`](DistanceJoint) -* [constructor](/api/classes/distancejoint#constructor) +#### Parameters -### Properties +• **def**: [`DistanceJointDef`](../interfaces/DistanceJointDef) -* [style](/api/classes/distancejoint#style) -* [TYPE](/api/classes/distancejoint#static-type) +DistanceJoint definition. -### Methods +#### Returns -* [getAnchorA](/api/classes/distancejoint#getanchora) -* [getAnchorB](/api/classes/distancejoint#getanchorb) -* [getBodyA](/api/classes/distancejoint#getbodya) -* [getBodyB](/api/classes/distancejoint#getbodyb) -* [getCollideConnected](/api/classes/distancejoint#getcollideconnected) -* [getDampingRatio](/api/classes/distancejoint#getdampingratio) -* [getFrequency](/api/classes/distancejoint#getfrequency) -* [getLength](/api/classes/distancejoint#getlength) -* [getLocalAnchorA](/api/classes/distancejoint#getlocalanchora) -* [getLocalAnchorB](/api/classes/distancejoint#getlocalanchorb) -* [getNext](/api/classes/distancejoint#getnext) -* [getReactionForce](/api/classes/distancejoint#getreactionforce) -* [getReactionTorque](/api/classes/distancejoint#getreactiontorque) -* [getType](/api/classes/distancejoint#gettype) -* [getUserData](/api/classes/distancejoint#getuserdata) -* [initVelocityConstraints](/api/classes/distancejoint#initvelocityconstraints) -* [isActive](/api/classes/distancejoint#isactive) -* [setDampingRatio](/api/classes/distancejoint#setdampingratio) -* [setFrequency](/api/classes/distancejoint#setfrequency) -* [setLength](/api/classes/distancejoint#setlength) -* [setUserData](/api/classes/distancejoint#setuserdata) -* [shiftOrigin](/api/classes/distancejoint#shiftorigin) -* [solvePositionConstraints](/api/classes/distancejoint#solvepositionconstraints) -* [solveVelocityConstraints](/api/classes/distancejoint#solvevelocityconstraints) +[`DistanceJoint`](DistanceJoint) -## Constructors +#### Overrides -### constructor +[`Joint`](Joint).[`constructor`](Joint#constructors) -\+ **new DistanceJoint**(`def`: [DistanceJointDef](/api/interfaces/distancejointdef)): *[DistanceJoint](/api/classes/distancejoint)* +### new DistanceJoint() -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +> **new DistanceJoint**(`def`, `bodyA`, `bodyB`, `anchorA`, `anchorB`): [`DistanceJoint`](DistanceJoint) -**Parameters:** +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`def` | [DistanceJointDef](/api/interfaces/distancejointdef) | DistanceJoint definition. | +• **def**: [`DistanceJointOpt`](../interfaces/DistanceJointOpt) -**Returns:** *[DistanceJoint](/api/classes/distancejoint)* +• **bodyA**: [`Body`](Body) -\+ **new DistanceJoint**(`def`: [DistanceJointOpt](/api/interfaces/distancejointopt), `bodyA`: [Body](/api/classes/body), `bodyB`: [Body](/api/classes/body), `anchorA`: [Vec2Value](/api/interfaces/vec2value), `anchorB`: [Vec2Value](/api/interfaces/vec2value)): *[DistanceJoint](/api/classes/distancejoint)* +• **bodyB**: [`Body`](Body) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +• **anchorA**: [`Vec2Value`](../interfaces/Vec2Value) -**Parameters:** +Anchor A in global coordination. -Name | Type | Description | ------- | ------ | ------ | -`def` | [DistanceJointOpt](/api/interfaces/distancejointopt) | DistanceJoint definition. | -`bodyA` | [Body](/api/classes/body) | - | -`bodyB` | [Body](/api/classes/body) | - | -`anchorA` | [Vec2Value](/api/interfaces/vec2value) | Anchor A in global coordination. | -`anchorB` | [Vec2Value](/api/interfaces/vec2value) | Anchor B in global coordination. | +• **anchorB**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[DistanceJoint](/api/classes/distancejoint)* +Anchor B in global coordination. -## Properties +#### Returns -### style +[`DistanceJoint`](DistanceJoint) -• **style**: *[Style](/api/interfaces/style)* +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties -*Inherited from [Joint](/api/classes/joint).[style](/api/classes/joint#style)* +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. -___ +#### Inherited from -### `Static` TYPE +[`Joint`](Joint).[`style`](Joint#style) -▪ **TYPE**: *"distance-joint"* = "distance-joint" as const +*** -## Methods +### TYPE + +> `static` **TYPE**: `"distance-joint"` -### getAnchorA +## Methods -▸ **getAnchorA**(): *[Vec2](/api/classes/vec2)* +### getAnchorA() -*Overrides [Joint](/api/classes/joint).[getAnchorA](/api/classes/joint#abstract-getanchora)* +> **getAnchorA**(): [`Vec2`](Vec2) Get the anchor point on bodyA in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) + +#### Overrides -___ +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) -### getAnchorB +*** -▸ **getAnchorB**(): *[Vec2](/api/classes/vec2)* +### getAnchorB() -*Overrides [Joint](/api/classes/joint).[getAnchorB](/api/classes/joint#abstract-getanchorb)* +> **getAnchorB**(): [`Vec2`](Vec2) Get the anchor point on bodyB in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getBodyA +#### Overrides -▸ **getBodyA**(): *[Body](/api/classes/body)* +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) -*Inherited from [Joint](/api/classes/joint).[getBodyA](/api/classes/joint#getbodya)* +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) Get the first body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) + +#### Inherited from -___ +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) -### getBodyB +*** -▸ **getBodyB**(): *[Body](/api/classes/body)* +### getBodyB() -*Inherited from [Joint](/api/classes/joint).[getBodyB](/api/classes/joint#getbodyb)* +> **getBodyB**(): [`Body`](Body) Get the second body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns -___ +[`Body`](Body) -### getCollideConnected +#### Inherited from -▸ **getCollideConnected**(): *boolean* +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) -*Inherited from [Joint](/api/classes/joint).[getCollideConnected](/api/classes/joint#getcollideconnected)* +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` Get collide connected. Note: modifying the collide connect flag won't work correctly because the flag is only checked when fixture AABBs begin to overlap. -**Returns:** *boolean* +#### Returns + +`boolean` -___ +#### Inherited from -### getDampingRatio +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) -▸ **getDampingRatio**(): *number* +*** -**Returns:** *number* +### getDampingRatio() -___ +> **getDampingRatio**(): `number` -### getFrequency +#### Returns -▸ **getFrequency**(): *number* +`number` -**Returns:** *number* +*** -___ +### getFrequency() -### getLength +> **getFrequency**(): `number` -▸ **getLength**(): *number* +#### Returns + +`number` + +*** + +### getLength() + +> **getLength**(): `number` Get the natural length. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getLocalAnchorA +### getLocalAnchorA() -▸ **getLocalAnchorA**(): *[Vec2](/api/classes/vec2)* +> **getLocalAnchorA**(): [`Vec2`](Vec2) The local anchor point relative to bodyA's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getLocalAnchorB +### getLocalAnchorB() -▸ **getLocalAnchorB**(): *[Vec2](/api/classes/vec2)* +> **getLocalAnchorB**(): [`Vec2`](Vec2) The local anchor point relative to bodyB's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getNext +*** -▸ **getNext**(): *[Joint](/api/classes/joint)* +### getNext() -*Inherited from [Joint](/api/classes/joint).[getNext](/api/classes/joint#getnext)* +> **getNext**(): [`Joint`](Joint) Get the next joint the world joint list. -**Returns:** *[Joint](/api/classes/joint)* +#### Returns -___ +[`Joint`](Joint) -### getReactionForce +#### Inherited from -▸ **getReactionForce**(`inv_dt`: number): *[Vec2](/api/classes/vec2)* +[`Joint`](Joint).[`getNext`](Joint#getnext) -*Overrides [Joint](/api/classes/joint).[getReactionForce](/api/classes/joint#abstract-getreactionforce)* +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) Get the reaction force on bodyB at the joint anchor in Newtons. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` + +#### Returns -Name | Type | ------- | ------ | -`inv_dt` | number | +[`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Overrides -___ +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) -### getReactionTorque +*** -▸ **getReactionTorque**(`inv_dt`: number): *number* +### getReactionTorque() -*Overrides [Joint](/api/classes/joint).[getReactionTorque](/api/classes/joint#abstract-getreactiontorque)* +> **getReactionTorque**(`inv_dt`): `number` Get the reaction torque on bodyB in N*m. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`inv_dt` | number | +• **inv\_dt**: `number` -**Returns:** *number* +#### Returns -___ +`number` -### getType +#### Overrides -▸ **getType**(): *string* +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) -*Inherited from [Joint](/api/classes/joint).[getType](/api/classes/joint#gettype)* +*** + +### getType() + +> **getType**(): `string` Get the type of the concrete joint. -**Returns:** *string* +#### Returns + +`string` -___ +#### Inherited from -### getUserData +[`Joint`](Joint).[`getType`](Joint#gettype) -▸ **getUserData**(): *unknown* +*** -*Inherited from [Joint](/api/classes/joint).[getUserData](/api/classes/joint#getuserdata)* +### getUserData() -**Returns:** *unknown* +> **getUserData**(): `unknown` -___ +#### Returns -### initVelocityConstraints +`unknown` -▸ **initVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +#### Inherited from -*Overrides [Joint](/api/classes/joint).[initVelocityConstraints](/api/classes/joint#abstract-initvelocityconstraints)* +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) -**Parameters:** +*** -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +### initVelocityConstraints() -**Returns:** *void* +> **initVelocityConstraints**(`step`): `void` -___ +#### Parameters -### isActive +• **step**: [`TimeStep`](TimeStep) -▸ **isActive**(): *boolean* +#### Returns -*Inherited from [Joint](/api/classes/joint).[isActive](/api/classes/joint#isactive)* +`void` + +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` Short-cut function to determine if either body is inactive. -**Returns:** *boolean* +#### Returns + +`boolean` -___ +#### Inherited from -### setDampingRatio +[`Joint`](Joint).[`isActive`](Joint#isactive) -▸ **setDampingRatio**(`ratio`: number): *void* +*** -**Parameters:** +### setDampingRatio() -Name | Type | ------- | ------ | -`ratio` | number | +> **setDampingRatio**(`ratio`): `void` -**Returns:** *void* +#### Parameters -___ +• **ratio**: `number` -### setFrequency +#### Returns -▸ **setFrequency**(`hz`: number): *void* +`void` -**Parameters:** +*** -Name | Type | ------- | ------ | -`hz` | number | +### setFrequency() -**Returns:** *void* +> **setFrequency**(`hz`): `void` -___ +#### Parameters -### setLength +• **hz**: `number` -▸ **setLength**(`length`: number): *void* +#### Returns + +`void` + +*** + +### setLength() + +> **setLength**(`length`): `void` Set the natural length. Manipulating the length can lead to non-physical behavior when the frequency is zero. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`length` | number | +• **length**: `number` -**Returns:** *void* +#### Returns -___ +`void` -### setUserData +*** -▸ **setUserData**(`data`: unknown): *void* +### setUserData() -*Inherited from [Joint](/api/classes/joint).[setUserData](/api/classes/joint#setuserdata)* +> **setUserData**(`data`): `void` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`data` | unknown | +• **data**: `unknown` -**Returns:** *void* +#### Returns -___ +`void` -### shiftOrigin +#### Inherited from -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) -*Inherited from [Joint](/api/classes/joint).[shiftOrigin](/api/classes/joint#shiftorigin)* +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` Shift the origin for any points stored in world coordinates. -**Parameters:** +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *void* +`void` -___ +#### Inherited from -### solvePositionConstraints +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) -▸ **solvePositionConstraints**(`step`: [TimeStep](/api/classes/timestep)): *boolean* +*** -*Overrides [Joint](/api/classes/joint).[solvePositionConstraints](/api/classes/joint#abstract-solvepositionconstraints)* +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` This returns true if the position errors are within tolerance. -**Parameters:** +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +*** -**Returns:** *boolean* +### solveVelocityConstraints() -___ +> **solveVelocityConstraints**(`step`): `void` -### solveVelocityConstraints +#### Parameters -▸ **solveVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +• **step**: [`TimeStep`](TimeStep) -*Overrides [Joint](/api/classes/joint).[solveVelocityConstraints](/api/classes/joint#abstract-solvevelocityconstraints)* +#### Returns -**Parameters:** +`void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Overrides -**Returns:** *void* +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/distanceoutput.md b/docs/pages/api/classes/distanceoutput.md index e4896e56..06646a7e 100644 --- a/docs/pages/api/classes/distanceoutput.md +++ b/docs/pages/api/classes/distanceoutput.md @@ -1,59 +1,53 @@ - # Class: DistanceOutput Output for Distance. -## Hierarchy - -* **DistanceOutput** +## Constructors -## Index +### new DistanceOutput() -### Properties +> **new DistanceOutput**(): [`DistanceOutput`](DistanceOutput) -* [distance](/api/classes/distanceoutput#distance) -* [iterations](/api/classes/distanceoutput#iterations) -* [pointA](/api/classes/distanceoutput#pointa) -* [pointB](/api/classes/distanceoutput#pointb) +#### Returns -### Methods - -* [recycle](/api/classes/distanceoutput#recycle) +[`DistanceOutput`](DistanceOutput) ## Properties -### distance +### distance -• **distance**: *number* = 0 +> **distance**: `number` = `0` -___ +*** -### iterations +### iterations -• **iterations**: *number* = 0 +> **iterations**: `number` = `0` iterations number of GJK iterations used -___ +*** -### pointA +### pointA -• **pointA**: *[Vec2Value](/api/interfaces/vec2value)* = matrix.vec2(0, 0) +> **pointA**: [`Vec2Value`](../interfaces/Vec2Value) closest point on shapeA -___ +*** -### pointB +### pointB -• **pointB**: *[Vec2Value](/api/interfaces/vec2value)* = matrix.vec2(0, 0) +> **pointB**: [`Vec2Value`](../interfaces/Vec2Value) closest point on shapeB ## Methods -### recycle +### recycle() + +> **recycle**(): `void` -▸ **recycle**(): *void* +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/distanceproxy.md b/docs/pages/api/classes/distanceproxy.md index dc757311..4fab6ed9 100644 --- a/docs/pages/api/classes/distanceproxy.md +++ b/docs/pages/api/classes/distanceproxy.md @@ -1,123 +1,123 @@ - # Class: DistanceProxy A distance proxy is used by the GJK algorithm. It encapsulates any shape. -## Hierarchy +## Constructors -* **DistanceProxy** +### new DistanceProxy() -## Index +> **new DistanceProxy**(): [`DistanceProxy`](DistanceProxy) -### Methods +#### Returns -* [getSupport](/api/classes/distanceproxy#getsupport) -* [getSupportVertex](/api/classes/distanceproxy#getsupportvertex) -* [getVertex](/api/classes/distanceproxy#getvertex) -* [getVertexCount](/api/classes/distanceproxy#getvertexcount) -* [recycle](/api/classes/distanceproxy#recycle) -* [set](/api/classes/distanceproxy#set) -* [setVertices](/api/classes/distanceproxy#setvertices) +[`DistanceProxy`](DistanceProxy) ## Methods -### getSupport +### getSupport() -▸ **getSupport**(`d`: [Vec2Value](/api/interfaces/vec2value)): *number* +> **getSupport**(`d`): `number` Get the supporting vertex index in the given direction. -**Parameters:** +#### Parameters + +• **d**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`d` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *number* +`number` -___ +*** -### getSupportVertex +### getSupportVertex() -▸ **getSupportVertex**(`d`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2Value](/api/interfaces/vec2value)* +> **getSupportVertex**(`d`): [`Vec2Value`](../interfaces/Vec2Value) Get the supporting vertex in the given direction. -**Parameters:** +#### Parameters + +• **d**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`d` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *[Vec2Value](/api/interfaces/vec2value)* +[`Vec2Value`](../interfaces/Vec2Value) -___ +*** -### getVertex +### getVertex() -▸ **getVertex**(`index`: number): *[Vec2Value](/api/interfaces/vec2value)* +> **getVertex**(`index`): [`Vec2Value`](../interfaces/Vec2Value) Get a vertex by index. Used by Distance. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`index` | number | +• **index**: `number` -**Returns:** *[Vec2Value](/api/interfaces/vec2value)* +#### Returns -___ +[`Vec2Value`](../interfaces/Vec2Value) -### getVertexCount +*** -▸ **getVertexCount**(): *number* +### getVertexCount() + +> **getVertexCount**(): `number` Get the vertex count. -**Returns:** *number* +#### Returns + +`number` + +*** -___ +### recycle() -### recycle +> **recycle**(): `void` -▸ **recycle**(): *void* +#### Returns -**Returns:** *void* +`void` -___ +*** -### set +### set() -▸ **set**(`shape`: [Shape](/api/classes/shape), `index`: number): *void* +> **set**(`shape`, `index`): `void` Initialize the proxy using the given shape. The shape must remain in scope while the proxy is in use. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`shape` | [Shape](/api/classes/shape) | -`index` | number | +• **shape**: [`Shape`](Shape) -**Returns:** *void* +• **index**: `number` -___ +#### Returns -### setVertices +`void` -▸ **setVertices**(`vertices`: [Vec2Value](/api/interfaces/vec2value)[], `count`: number, `radius`: number): *void* +*** + +### setVertices() + +> **setVertices**(`vertices`, `count`, `radius`): `void` Initialize the proxy using a vertex cloud and radius. The vertices must remain in scope while the proxy is in use. -**Parameters:** +#### Parameters + +• **vertices**: [`Vec2Value`](../interfaces/Vec2Value)[] + +• **count**: `number` + +• **radius**: `number` -Name | Type | ------- | ------ | -`vertices` | [Vec2Value](/api/interfaces/vec2value)[] | -`count` | number | -`radius` | number | +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/dynamictree.md b/docs/pages/api/classes/dynamictree.md index b129142c..6fd74c07 100644 --- a/docs/pages/api/classes/dynamictree.md +++ b/docs/pages/api/classes/dynamictree.md @@ -1,5 +1,4 @@ - -# Class: DynamicTree ‹**T**› +# Class: DynamicTree\ A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. A dynamic tree arranges data in a binary tree to accelerate queries such as @@ -11,298 +10,274 @@ amounts without triggering a tree update. Nodes are pooled and relocatable, so we use node indices rather than pointers. -## Type parameters - -▪ **T** - -## Hierarchy - -* **DynamicTree** - -## Index - -### Constructors +## Type Parameters -* [constructor](/api/classes/dynamictree#constructor) - -### Properties - -* [m_lastProxyId](/api/classes/dynamictree#m_lastproxyid) -* [m_nodes](/api/classes/dynamictree#m_nodes) -* [m_root](/api/classes/dynamictree#m_root) - -### Methods - -* [allocateNode](/api/classes/dynamictree#allocatenode) -* [balance](/api/classes/dynamictree#balance) -* [computeHeight](/api/classes/dynamictree#computeheight) -* [createProxy](/api/classes/dynamictree#createproxy) -* [destroyProxy](/api/classes/dynamictree#destroyproxy) -* [freeNode](/api/classes/dynamictree#freenode) -* [getAreaRatio](/api/classes/dynamictree#getarearatio) -* [getFatAABB](/api/classes/dynamictree#getfataabb) -* [getHeight](/api/classes/dynamictree#getheight) -* [getMaxBalance](/api/classes/dynamictree#getmaxbalance) -* [getUserData](/api/classes/dynamictree#getuserdata) -* [insertLeaf](/api/classes/dynamictree#insertleaf) -* [moveProxy](/api/classes/dynamictree#moveproxy) -* [query](/api/classes/dynamictree#query) -* [rayCast](/api/classes/dynamictree#raycast) -* [rebuildBottomUp](/api/classes/dynamictree#rebuildbottomup) -* [removeLeaf](/api/classes/dynamictree#removeleaf) -* [shiftOrigin](/api/classes/dynamictree#shiftorigin) -* [validate](/api/classes/dynamictree#validate) -* [validateMetrics](/api/classes/dynamictree#validatemetrics) -* [validateStructure](/api/classes/dynamictree#validatestructure) +• **T** ## Constructors -### constructor +### new DynamicTree() + +> **new DynamicTree**\<`T`\>(): [`DynamicTree`](DynamicTree)\<`T`\> -\+ **new DynamicTree**(): *[DynamicTree](/api/classes/dynamictree)* +#### Returns -**Returns:** *[DynamicTree](/api/classes/dynamictree)* +[`DynamicTree`](DynamicTree)\<`T`\> ## Properties -### m_lastProxyId +### m\_lastProxyId -• **m_lastProxyId**: *number* +> **m\_lastProxyId**: `number` -___ +*** -### m_nodes +### m\_nodes -• **m_nodes**: *object* +> **m\_nodes**: `object` -#### Type declaration: +#### Index Signature -* \[ **id**: *number*\]: [TreeNode](/api/classes/treenode)‹T› + \[`id`: `number`\]: [`TreeNode`](TreeNode)\<`T`\> -___ +*** -### m_root +### m\_root -• **m_root**: *[TreeNode](/api/classes/treenode)‹T›* +> **m\_root**: [`TreeNode`](TreeNode)\<`T`\> ## Methods -### allocateNode +### allocateNode() -▸ **allocateNode**(): *[TreeNode](/api/classes/treenode)‹T›* +> **allocateNode**(): [`TreeNode`](TreeNode)\<`T`\> -**Returns:** *[TreeNode](/api/classes/treenode)‹T›* +#### Returns -___ +[`TreeNode`](TreeNode)\<`T`\> -### balance +*** -▸ **balance**(`iA`: [TreeNode](/api/classes/treenode)‹T›): *[TreeNode](/api/classes/treenode)‹T›* +### balance() + +> **balance**(`iA`): [`TreeNode`](TreeNode)\<`T`\> Perform a left or right rotation if node A is imbalanced. Returns the new root index. -**Parameters:** +#### Parameters + +• **iA**: [`TreeNode`](TreeNode)\<`T`\> -Name | Type | ------- | ------ | -`iA` | [TreeNode](/api/classes/treenode)‹T› | +#### Returns -**Returns:** *[TreeNode](/api/classes/treenode)‹T›* +[`TreeNode`](TreeNode)\<`T`\> -___ +*** -### computeHeight +### computeHeight() -▸ **computeHeight**(`id?`: number): *number* +> **computeHeight**(`id`?): `number` Compute the height of a sub-tree. -**Parameters:** +#### Parameters + +• **id?**: `number` -Name | Type | ------- | ------ | -`id?` | number | +#### Returns -**Returns:** *number* +`number` -___ +*** -### createProxy +### createProxy() -▸ **createProxy**(`aabb`: [AABBValue](/api/interfaces/aabbvalue), `userData`: T): *number* +> **createProxy**(`aabb`, `userData`): `number` Create a proxy in the tree as a leaf node. We return the index of the node instead of a pointer so that we can grow the node pool. Create a proxy. Provide a tight fitting AABB and a userData pointer. -**Parameters:** +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +• **userData**: `T` -Name | Type | ------- | ------ | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | -`userData` | T | +#### Returns -**Returns:** *number* +`number` -___ +*** -### destroyProxy +### destroyProxy() -▸ **destroyProxy**(`id`: number): *void* +> **destroyProxy**(`id`): `void` Destroy a proxy. This asserts if the id is invalid. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`id` | number | +• **id**: `number` -**Returns:** *void* +#### Returns -___ +`void` -### freeNode +*** -▸ **freeNode**(`node`: [TreeNode](/api/classes/treenode)‹T›): *void* +### freeNode() -**Parameters:** +> **freeNode**(`node`): `void` -Name | Type | ------- | ------ | -`node` | [TreeNode](/api/classes/treenode)‹T› | +#### Parameters -**Returns:** *void* +• **node**: [`TreeNode`](TreeNode)\<`T`\> -___ +#### Returns -### getAreaRatio +`void` -▸ **getAreaRatio**(): *number* +*** + +### getAreaRatio() + +> **getAreaRatio**(): `number` Get the ratio of the sum of the node areas to the root area. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getFatAABB +### getFatAABB() -▸ **getFatAABB**(`id`: number): *[AABB](/api/classes/aabb)* +> **getFatAABB**(`id`): [`AABB`](AABB) Get the fat AABB for a node id. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`id` | number | +• **id**: `number` -**Returns:** *[AABB](/api/classes/aabb)* +#### Returns + +[`AABB`](AABB) the proxy user data or 0 if the id is invalid. -___ +*** -### getHeight +### getHeight() -▸ **getHeight**(): *number* +> **getHeight**(): `number` Compute the height of the binary tree in O(N) time. Should not be called often. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getMaxBalance +### getMaxBalance() -▸ **getMaxBalance**(): *number* +> **getMaxBalance**(): `number` Get the maximum balance of an node in the tree. The balance is the difference in height of the two children of a node. -**Returns:** *number* +#### Returns -___ +`number` -### getUserData +*** -▸ **getUserData**(`id`: number): *T* +### getUserData() + +> **getUserData**(`id`): `T` Get proxy user data. -**Parameters:** +#### Parameters + +• **id**: `number` -Name | Type | ------- | ------ | -`id` | number | +#### Returns -**Returns:** *T* +`T` the proxy user data or 0 if the id is invalid. -___ +*** + +### insertLeaf() -### insertLeaf +> **insertLeaf**(`leaf`): `void` -▸ **insertLeaf**(`leaf`: [TreeNode](/api/classes/treenode)‹T›): *void* +#### Parameters -**Parameters:** +• **leaf**: [`TreeNode`](TreeNode)\<`T`\> -Name | Type | ------- | ------ | -`leaf` | [TreeNode](/api/classes/treenode)‹T› | +#### Returns -**Returns:** *void* +`void` -___ +*** -### moveProxy +### moveProxy() -▸ **moveProxy**(`id`: number, `aabb`: [AABBValue](/api/interfaces/aabbvalue), `d`: [Vec2Value](/api/interfaces/vec2value)): *boolean* +> **moveProxy**(`id`, `aabb`, `d`): `boolean` Move a proxy with a swepted AABB. If the proxy has moved outside of its fattened AABB, then the proxy is removed from the tree and re-inserted. Otherwise the function returns immediately. -**Parameters:** +#### Parameters + +• **id**: `number` + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) -Name | Type | Description | ------- | ------ | ------ | -`id` | number | - | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | - | -`d` | [Vec2Value](/api/interfaces/vec2value) | Displacement | +• **d**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *boolean* +Displacement + +#### Returns + +`boolean` true if the proxy was re-inserted. -___ +*** -### query +### query() -▸ **query**(`aabb`: [AABBValue](/api/interfaces/aabbvalue), `queryCallback`: [DynamicTreeQueryCallback](/api/globals#dynamictreequerycallback)): *void* +> **query**(`aabb`, `queryCallback`): `void` Query an AABB for overlapping proxies. The callback class is called for each proxy that overlaps the supplied AABB. -**Parameters:** +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) -Name | Type | ------- | ------ | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | -`queryCallback` | [DynamicTreeQueryCallback](/api/globals#dynamictreequerycallback) | +• **queryCallback**: [`DynamicTreeQueryCallback`](../type-aliases/DynamicTreeQueryCallback) -**Returns:** *void* +#### Returns -___ +`void` -### rayCast +*** -▸ **rayCast**(`input`: [RayCastInput](/api/interfaces/raycastinput), `rayCastCallback`: [RayCastCallback](/api/globals#raycastcallback)): *void* +### rayCast() + +> **rayCast**(`input`, `rayCastCallback`): `void` Ray-cast against the proxies in the tree. This relies on the callback to perform a exact ray-cast in the case were the proxy contains a shape. The @@ -310,90 +285,101 @@ callback also performs the any collision filtering. This has performance roughly equal to k * log(n), where k is the number of collisions and n is the number of proxies in the tree. -**Parameters:** +#### Parameters + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) -Name | Type | Description | ------- | ------ | ------ | -`input` | [RayCastInput](/api/interfaces/raycastinput) | The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. | -`rayCastCallback` | [RayCastCallback](/api/globals#raycastcallback) | A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. | +The ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. -**Returns:** *void* +• **rayCastCallback**: [`RayCastCallback`](../type-aliases/RayCastCallback) -___ +A function that is called for each proxy that is hit by the ray. If the return value is a positive number it will update the maxFraction of the ray cast input, and if it is zero it will terminate they ray cast. -### rebuildBottomUp +#### Returns -▸ **rebuildBottomUp**(): *void* +`void` + +*** + +### rebuildBottomUp() + +> **rebuildBottomUp**(): `void` Build an optimal tree. Very expensive. For testing. -**Returns:** *void* +#### Returns + +`void` + +*** -___ +### removeLeaf() -### removeLeaf +> **removeLeaf**(`leaf`): `void` -▸ **removeLeaf**(`leaf`: [TreeNode](/api/classes/treenode)‹T›): *void* +#### Parameters -**Parameters:** +• **leaf**: [`TreeNode`](TreeNode)\<`T`\> -Name | Type | ------- | ------ | -`leaf` | [TreeNode](/api/classes/treenode)‹T› | +#### Returns -**Returns:** *void* +`void` -___ +*** -### shiftOrigin +### shiftOrigin() -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +> **shiftOrigin**(`newOrigin`): `void` Shift the world origin. Useful for large worlds. The shift formula is: position -= newOrigin -**Parameters:** +#### Parameters -Name | Type | Description | ------- | ------ | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | The new origin with respect to the old origin | +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *void* +The new origin with respect to the old origin -___ +#### Returns -### validate +`void` -▸ **validate**(): *void* +*** + +### validate() + +> **validate**(): `void` Validate this tree. For testing. -**Returns:** *void* +#### Returns + +`void` + +*** + +### validateMetrics() -___ +> **validateMetrics**(`node`): `void` -### validateMetrics +#### Parameters -▸ **validateMetrics**(`node`: [TreeNode](/api/classes/treenode)‹T›): *void* +• **node**: [`TreeNode`](TreeNode)\<`T`\> -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`node` | [TreeNode](/api/classes/treenode)‹T› | +`void` -**Returns:** *void* +*** -___ +### validateStructure() -### validateStructure +> **validateStructure**(`node`): `void` -▸ **validateStructure**(`node`: [TreeNode](/api/classes/treenode)‹T›): *void* +#### Parameters -**Parameters:** +• **node**: [`TreeNode`](TreeNode)\<`T`\> -Name | Type | ------- | ------ | -`node` | [TreeNode](/api/classes/treenode)‹T› | +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/edgeshape.md b/docs/pages/api/classes/edgeshape.md index dc2421ef..0068d896 100644 --- a/docs/pages/api/classes/edgeshape.md +++ b/docs/pages/api/classes/edgeshape.md @@ -1,286 +1,325 @@ - # Class: EdgeShape A line segment (edge) shape. These can be connected in chains or loops to other edge shapes. The connectivity information is used to ensure correct contact normals. -## Hierarchy - -* [Shape](/api/classes/shape) - - ↳ **EdgeShape** - -## Index +## Extends -### Constructors +- [`Shape`](Shape) -* [constructor](/api/classes/edgeshape#constructor) - -### Properties +## Constructors -* [style](/api/classes/edgeshape#style) -* [TYPE](/api/classes/edgeshape#static-type) +### new EdgeShape() -### Methods +> **new EdgeShape**(`v1`?, `v2`?): [`EdgeShape`](EdgeShape) -* [_set](/api/classes/edgeshape#_set) -* [computeAABB](/api/classes/edgeshape#computeaabb) -* [computeDistanceProxy](/api/classes/edgeshape#computedistanceproxy) -* [computeMass](/api/classes/edgeshape#computemass) -* [getChildCount](/api/classes/edgeshape#getchildcount) -* [getNextVertex](/api/classes/edgeshape#getnextvertex) -* [getPrevVertex](/api/classes/edgeshape#getprevvertex) -* [getRadius](/api/classes/edgeshape#getradius) -* [getType](/api/classes/edgeshape#gettype) -* [rayCast](/api/classes/edgeshape#raycast) -* [setNextVertex](/api/classes/edgeshape#setnextvertex) -* [setPrevVertex](/api/classes/edgeshape#setprevvertex) -* [testPoint](/api/classes/edgeshape#testpoint) -* [isValid](/api/classes/edgeshape#static-isvalid) +#### Parameters -## Constructors +• **v1?**: [`Vec2Value`](../interfaces/Vec2Value) -### constructor +• **v2?**: [`Vec2Value`](../interfaces/Vec2Value) -\+ **new EdgeShape**(`v1?`: [Vec2Value](/api/interfaces/vec2value), `v2?`: [Vec2Value](/api/interfaces/vec2value)): *[EdgeShape](/api/classes/edgeshape)* +#### Returns -**Parameters:** +[`EdgeShape`](EdgeShape) -Name | Type | ------- | ------ | -`v1?` | [Vec2Value](/api/interfaces/vec2value) | -`v2?` | [Vec2Value](/api/interfaces/vec2value) | +#### Overrides -**Returns:** *[EdgeShape](/api/classes/edgeshape)* +[`Shape`](Shape).[`constructor`](Shape#constructors) ## Properties -### style +### style -• **style**: *[Style](/api/interfaces/style)* - -*Inherited from [Shape](/api/classes/shape).[style](/api/classes/shape#style)* +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. -___ +#### Inherited from + +[`Shape`](Shape).[`style`](Shape#style) -### `Static` TYPE +*** -▪ **TYPE**: *"edge"* = "edge" as const +### TYPE + +> `static` **TYPE**: `"edge"` ## Methods -### _set +### \_set() -▸ **_set**(`v1`: [Vec2Value](/api/interfaces/vec2value), `v2`: [Vec2Value](/api/interfaces/vec2value)): *[EdgeShape](/api/classes/edgeshape)* +> **\_set**(`v1`, `v2`): [`EdgeShape`](EdgeShape) Set this as an isolated edge. -**Parameters:** +#### Parameters + +• **v1**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`v1` | [Vec2Value](/api/interfaces/vec2value) | -`v2` | [Vec2Value](/api/interfaces/vec2value) | +• **v2**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[EdgeShape](/api/classes/edgeshape)* +#### Returns -___ +[`EdgeShape`](EdgeShape) -### computeAABB +*** -▸ **computeAABB**(`aabb`: [AABBValue](/api/interfaces/aabbvalue), `xf`: [TransformValue](/api/globals#transformvalue), `childIndex`: number): *void* +### computeAABB() -*Overrides [Shape](/api/classes/shape).[computeAABB](/api/classes/shape#abstract-computeaabb)* +> **computeAABB**(`aabb`, `xf`, `childIndex`): `void` Given a transform, compute the associated axis aligned bounding box for a child shape. -**Parameters:** +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +Returns the axis aligned box. + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) -Name | Type | Description | ------- | ------ | ------ | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | Returns the axis aligned box. | -`xf` | [TransformValue](/api/globals#transformvalue) | The world transform of the shape. | -`childIndex` | number | The child shape | +The world transform of the shape. -**Returns:** *void* +• **childIndex**: `number` -___ +The child shape -### computeDistanceProxy +#### Returns -▸ **computeDistanceProxy**(`proxy`: [DistanceProxy](/api/classes/distanceproxy)): *void* +`void` -*Overrides [Shape](/api/classes/shape).[computeDistanceProxy](/api/classes/shape#abstract-computedistanceproxy)* +#### Overrides -**Parameters:** +[`Shape`](Shape).[`computeAABB`](Shape#computeaabb) -Name | Type | ------- | ------ | -`proxy` | [DistanceProxy](/api/classes/distanceproxy) | +*** -**Returns:** *void* +### computeDistanceProxy() -___ +> **computeDistanceProxy**(`proxy`): `void` -### computeMass +#### Parameters -▸ **computeMass**(`massData`: [MassData](/api/interfaces/massdata), `density?`: number): *void* +• **proxy**: [`DistanceProxy`](DistanceProxy) -*Overrides [Shape](/api/classes/shape).[computeMass](/api/classes/shape#abstract-computemass)* +#### Returns + +`void` + +#### Overrides + +[`Shape`](Shape).[`computeDistanceProxy`](Shape#computedistanceproxy) + +*** + +### computeMass() + +> **computeMass**(`massData`, `density`?): `void` Compute the mass properties of this shape using its dimensions and density. The inertia tensor is computed about the local origin. -**Parameters:** +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) -Name | Type | Description | ------- | ------ | ------ | -`massData` | [MassData](/api/interfaces/massdata) | Returns the mass data for this shape. | -`density?` | number | The density in kilograms per meter squared. | +Returns the mass data for this shape. -**Returns:** *void* +• **density?**: `number` -___ +The density in kilograms per meter squared. -### getChildCount +#### Returns -▸ **getChildCount**(): *1* +`void` -*Overrides [Shape](/api/classes/shape).[getChildCount](/api/classes/shape#abstract-getchildcount)* +#### Overrides + +[`Shape`](Shape).[`computeMass`](Shape#computemass) + +*** + +### getChildCount() + +> **getChildCount**(): `1` Get the number of child primitives. -**Returns:** *1* +#### Returns + +`1` + +#### Overrides -___ +[`Shape`](Shape).[`getChildCount`](Shape#getchildcount) -### getNextVertex +*** -▸ **getNextVertex**(): *[Vec2](/api/classes/vec2)* +### getNextVertex() + +> **getNextVertex**(): [`Vec2`](Vec2) Optional next vertex, used for smooth collision. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getPrevVertex +### getPrevVertex() -▸ **getPrevVertex**(): *[Vec2](/api/classes/vec2)* +> **getPrevVertex**(): [`Vec2`](Vec2) Optional prev vertex, used for smooth collision. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) + +*** + +### getRadius() + +> **getRadius**(): `number` + +#### Returns -___ +`number` -### getRadius +#### Overrides -▸ **getRadius**(): *number* +[`Shape`](Shape).[`getRadius`](Shape#getradius) -*Overrides [Shape](/api/classes/shape).[getRadius](/api/classes/shape#abstract-getradius)* +*** -**Returns:** *number* +### getType() -___ +> **getType**(): `"edge"` -### getType +Get the type of this shape. You can use this to down cast to the concrete +shape. -▸ **getType**(): *"edge"* +#### Returns -*Overrides [Shape](/api/classes/shape).[getType](/api/classes/shape#abstract-gettype)* +`"edge"` -**Returns:** *"edge"* +the shape type. -___ +#### Overrides -### rayCast +[`Shape`](Shape).[`getType`](Shape#gettype) -▸ **rayCast**(`output`: [RayCastOutput](/api/interfaces/raycastoutput), `input`: [RayCastInput](/api/interfaces/raycastinput), `xf`: [Transform](/api/classes/transform), `childIndex`: number): *boolean* +*** -*Overrides [Shape](/api/classes/shape).[rayCast](/api/classes/shape#abstract-raycast)* +### rayCast() + +> **rayCast**(`output`, `input`, `xf`, `childIndex`): `boolean` Cast a ray against a child shape. -**Parameters:** +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +The ray-cast results. + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input parameters. + +• **xf**: [`Transform`](Transform) + +The transform to be applied to the shape. -Name | Type | Description | ------- | ------ | ------ | -`output` | [RayCastOutput](/api/interfaces/raycastoutput) | The ray-cast results. | -`input` | [RayCastInput](/api/interfaces/raycastinput) | The ray-cast input parameters. | -`xf` | [Transform](/api/classes/transform) | The transform to be applied to the shape. | -`childIndex` | number | The child shape index | +• **childIndex**: `number` -**Returns:** *boolean* +The child shape index -___ +#### Returns -### setNextVertex +`boolean` -▸ **setNextVertex**(`v?`: [Vec2Value](/api/interfaces/vec2value)): *[EdgeShape](/api/classes/edgeshape)* +#### Overrides + +[`Shape`](Shape).[`rayCast`](Shape#raycast) + +*** + +### setNextVertex() + +> **setNextVertex**(`v`?): [`EdgeShape`](EdgeShape) Optional next vertex, used for smooth collision. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`v?` | [Vec2Value](/api/interfaces/vec2value) | +• **v?**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[EdgeShape](/api/classes/edgeshape)* +#### Returns -___ +[`EdgeShape`](EdgeShape) -### setPrevVertex +*** -▸ **setPrevVertex**(`v?`: [Vec2Value](/api/interfaces/vec2value)): *[EdgeShape](/api/classes/edgeshape)* +### setPrevVertex() + +> **setPrevVertex**(`v`?): [`EdgeShape`](EdgeShape) Optional prev vertex, used for smooth collision. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`v?` | [Vec2Value](/api/interfaces/vec2value) | +• **v?**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[EdgeShape](/api/classes/edgeshape)* +#### Returns -___ +[`EdgeShape`](EdgeShape) -### testPoint +*** -▸ **testPoint**(`xf`: [TransformValue](/api/globals#transformvalue), `p`: [Vec2Value](/api/interfaces/vec2value)): *false* +### testPoint() -*Overrides [Shape](/api/classes/shape).[testPoint](/api/classes/shape#abstract-testpoint)* +> **testPoint**(`xf`, `p`): `false` Test a point for containment in this shape. This only works for convex shapes. -**Parameters:** +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The shape world transform. + +• **p**: [`Vec2Value`](../interfaces/Vec2Value) + +A point in world coordinates. + +#### Returns + +`false` + +#### Overrides + +[`Shape`](Shape).[`testPoint`](Shape#testpoint) -Name | Type | Description | ------- | ------ | ------ | -`xf` | [TransformValue](/api/globals#transformvalue) | The shape world transform. | -`p` | [Vec2Value](/api/interfaces/vec2value) | A point in world coordinates. | +*** -**Returns:** *false* +### isValid() -___ +> `static` **isValid**(`obj`): `boolean` -### `Static` isValid +#### Parameters -▸ **isValid**(`obj`: any): *boolean* +• **obj**: `any` -*Inherited from [Shape](/api/classes/shape).[isValid](/api/classes/shape#static-isvalid)* +#### Returns -**Parameters:** +`boolean` -Name | Type | ------- | ------ | -`obj` | any | +#### Inherited from -**Returns:** *boolean* +[`Shape`](Shape).[`isValid`](Shape#isvalid) diff --git a/docs/pages/api/classes/fixture.md b/docs/pages/api/classes/fixture.md index 92fb2780..61c1ba4d 100644 --- a/docs/pages/api/classes/fixture.md +++ b/docs/pages/api/classes/fixture.md @@ -1,430 +1,417 @@ - # Class: Fixture A fixture is used to attach a shape to a body for collision detection. A fixture inherits its transform from its parent. Fixtures hold additional non-geometric data such as friction, collision filters, etc. -To create a new Fixture use [Body.createFixture](body#createfixture). - -## Hierarchy - -* **Fixture** - -## Index - -### Properties - -* [style](/api/classes/fixture#style) - -### Methods - -* [createProxies](/api/classes/fixture#createproxies) -* [destroyProxies](/api/classes/fixture#destroyproxies) -* [getAABB](/api/classes/fixture#getaabb) -* [getBody](/api/classes/fixture#getbody) -* [getDensity](/api/classes/fixture#getdensity) -* [getFilterCategoryBits](/api/classes/fixture#getfiltercategorybits) -* [getFilterGroupIndex](/api/classes/fixture#getfiltergroupindex) -* [getFilterMaskBits](/api/classes/fixture#getfiltermaskbits) -* [getFriction](/api/classes/fixture#getfriction) -* [getMassData](/api/classes/fixture#getmassdata) -* [getNext](/api/classes/fixture#getnext) -* [getRestitution](/api/classes/fixture#getrestitution) -* [getShape](/api/classes/fixture#getshape) -* [getType](/api/classes/fixture#gettype) -* [getUserData](/api/classes/fixture#getuserdata) -* [isSensor](/api/classes/fixture#issensor) -* [rayCast](/api/classes/fixture#raycast) -* [refilter](/api/classes/fixture#refilter) -* [setDensity](/api/classes/fixture#setdensity) -* [setFilterCategoryBits](/api/classes/fixture#setfiltercategorybits) -* [setFilterData](/api/classes/fixture#setfilterdata) -* [setFilterGroupIndex](/api/classes/fixture#setfiltergroupindex) -* [setFilterMaskBits](/api/classes/fixture#setfiltermaskbits) -* [setFriction](/api/classes/fixture#setfriction) -* [setRestitution](/api/classes/fixture#setrestitution) -* [setSensor](/api/classes/fixture#setsensor) -* [setUserData](/api/classes/fixture#setuserdata) -* [shouldCollide](/api/classes/fixture#shouldcollide) -* [synchronize](/api/classes/fixture#synchronize) -* [testPoint](/api/classes/fixture#testpoint) +To create a new Fixture use [Body.createFixture](Body#createfixture). ## Properties -### style +### style -• **style**: *[Style](/api/interfaces/style)* +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. ## Methods -### createProxies +### createProxies() -▸ **createProxies**(`broadPhase`: [BroadPhase](/api/classes/broadphase), `xf`: [TransformValue](/api/globals#transformvalue)): *void* +> **createProxies**(`broadPhase`, `xf`): `void` These support body activation/deactivation. -**Parameters:** +#### Parameters + +• **broadPhase**: [`BroadPhase`](BroadPhase) + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) -Name | Type | ------- | ------ | -`broadPhase` | [BroadPhase](/api/classes/broadphase) | -`xf` | [TransformValue](/api/globals#transformvalue) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### destroyProxies +### destroyProxies() -▸ **destroyProxies**(`broadPhase`: [BroadPhase](/api/classes/broadphase)): *void* +> **destroyProxies**(`broadPhase`): `void` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`broadPhase` | [BroadPhase](/api/classes/broadphase) | +• **broadPhase**: [`BroadPhase`](BroadPhase) -**Returns:** *void* +#### Returns -___ +`void` -### getAABB +*** -▸ **getAABB**(`childIndex`: number): *[AABB](/api/classes/aabb)* +### getAABB() + +> **getAABB**(`childIndex`): [`AABB`](AABB) Get the fixture's AABB. This AABB may be enlarge and/or stale. If you need a more accurate AABB, compute it using the shape and the body transform. -**Parameters:** +#### Parameters + +• **childIndex**: `number` -Name | Type | ------- | ------ | -`childIndex` | number | +#### Returns -**Returns:** *[AABB](/api/classes/aabb)* +[`AABB`](AABB) -___ +*** -### getBody +### getBody() -▸ **getBody**(): *[Body](/api/classes/body)* +> **getBody**(): [`Body`](Body) Get the parent body of this fixture. This is null if the fixture is not attached. -**Returns:** *[Body](/api/classes/body)* +#### Returns -___ +[`Body`](Body) -### getDensity +*** -▸ **getDensity**(): *number* +### getDensity() + +> **getDensity**(): `number` Get the density of this fixture. -**Returns:** *number* +#### Returns + +`number` + +*** + +### getFilterCategoryBits() + +> **getFilterCategoryBits**(): `number` -___ +#### Returns -### getFilterCategoryBits +`number` -▸ **getFilterCategoryBits**(): *number* +*** -**Returns:** *number* +### getFilterGroupIndex() -___ +> **getFilterGroupIndex**(): `number` -### getFilterGroupIndex +#### Returns -▸ **getFilterGroupIndex**(): *number* +`number` -**Returns:** *number* +*** -___ +### getFilterMaskBits() -### getFilterMaskBits +> **getFilterMaskBits**(): `number` -▸ **getFilterMaskBits**(): *number* +#### Returns -**Returns:** *number* +`number` -___ +*** -### getFriction +### getFriction() -▸ **getFriction**(): *number* +> **getFriction**(): `number` Get the coefficient of friction, usually in the range [0,1]. -**Returns:** *number* +#### Returns -___ +`number` -### getMassData +*** -▸ **getMassData**(`massData`: [MassData](/api/interfaces/massdata)): *void* +### getMassData() + +> **getMassData**(`massData`): `void` Get the mass data for this fixture. The mass data is based on the density and the shape. The rotational inertia is about the shape's origin. This operation may be expensive. -**Parameters:** +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) -Name | Type | ------- | ------ | -`massData` | [MassData](/api/interfaces/massdata) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### getNext +### getNext() -▸ **getNext**(): *[Fixture](/api/classes/fixture) | null* +> **getNext**(): [`Fixture`](Fixture) Get the next fixture in the parent body's fixture list. -**Returns:** *[Fixture](/api/classes/fixture) | null* +#### Returns + +[`Fixture`](Fixture) -___ +*** -### getRestitution +### getRestitution() -▸ **getRestitution**(): *number* +> **getRestitution**(): `number` Get the coefficient of restitution. -**Returns:** *number* +#### Returns -___ +`number` -### getShape +*** -▸ **getShape**(): *[Shape](/api/classes/shape)* +### getShape() + +> **getShape**(): [`Shape`](Shape) Get the child shape. You can modify the child shape, however you should not change the number of vertices because this will crash some collision caching mechanisms. Manipulating the shape may lead to non-physical behavior. -**Returns:** *[Shape](/api/classes/shape)* +#### Returns + +[`Shape`](Shape) -___ +*** -### getType +### getType() -▸ **getType**(): *[ShapeType](/api/globals#shapetype)* +> **getType**(): [`ShapeType`](../type-aliases/ShapeType) Get the type of the child shape. You can use this to down cast to the concrete shape. -**Returns:** *[ShapeType](/api/globals#shapetype)* +#### Returns -___ +[`ShapeType`](../type-aliases/ShapeType) -### getUserData +*** -▸ **getUserData**(): *unknown* +### getUserData() + +> **getUserData**(): `unknown` Get the user data that was assigned in the fixture definition. Use this to store your application specific data. -**Returns:** *unknown* +#### Returns + +`unknown` -___ +*** -### isSensor +### isSensor() -▸ **isSensor**(): *boolean* +> **isSensor**(): `boolean` A sensor shape collects contact information but never generates a collision response. -**Returns:** *boolean* +#### Returns -___ +`boolean` -### rayCast +*** -▸ **rayCast**(`output`: [RayCastOutput](/api/interfaces/raycastoutput), `input`: [RayCastInput](/api/interfaces/raycastinput), `childIndex`: number): *boolean* +### rayCast() + +> **rayCast**(`output`, `input`, `childIndex`): `boolean` Cast a ray against this shape. -**Parameters:** +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) -Name | Type | ------- | ------ | -`output` | [RayCastOutput](/api/interfaces/raycastoutput) | -`input` | [RayCastInput](/api/interfaces/raycastinput) | -`childIndex` | number | +• **input**: [`RayCastInput`](../interfaces/RayCastInput) -**Returns:** *boolean* +• **childIndex**: `number` -___ +#### Returns -### refilter +`boolean` -▸ **refilter**(): *void* +*** + +### refilter() + +> **refilter**(): `void` Call this if you want to establish collision that was previously disabled by ContactFilter. -**Returns:** *void* +#### Returns + +`void` -___ +*** -### setDensity +### setDensity() -▸ **setDensity**(`density`: number): *void* +> **setDensity**(`density`): `void` Set the density of this fixture. This will _not_ automatically adjust the mass of the body. You must call Body.resetMassData to update the body's mass. -**Parameters:** +#### Parameters + +• **density**: `number` + +#### Returns -Name | Type | ------- | ------ | -`density` | number | +`void` -**Returns:** *void* +*** -___ +### setFilterCategoryBits() -### setFilterCategoryBits +> **setFilterCategoryBits**(`categoryBits`): `void` -▸ **setFilterCategoryBits**(`categoryBits`: number): *void* +#### Parameters -**Parameters:** +• **categoryBits**: `number` -Name | Type | ------- | ------ | -`categoryBits` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setFilterData +### setFilterData() -▸ **setFilterData**(`filter`: object): *void* +> **setFilterData**(`filter`): `void` Set the contact filtering data. This will not update contacts until the next time step when either parent body is active and awake. This automatically calls refilter. -**Parameters:** +#### Parameters + +• **filter** + +• **filter.categoryBits**: `number` + +• **filter.groupIndex**: `number` + +• **filter.maskBits**: `number` + +#### Returns -▪ **filter**: *object* +`void` -Name | Type | ------- | ------ | -`categoryBits` | number | -`groupIndex` | number | -`maskBits` | number | +*** -**Returns:** *void* +### setFilterGroupIndex() -___ +> **setFilterGroupIndex**(`groupIndex`): `void` -### setFilterGroupIndex +#### Parameters -▸ **setFilterGroupIndex**(`groupIndex`: number): *void* +• **groupIndex**: `number` -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`groupIndex` | number | +`void` -**Returns:** *void* +*** -___ +### setFilterMaskBits() -### setFilterMaskBits +> **setFilterMaskBits**(`maskBits`): `void` -▸ **setFilterMaskBits**(`maskBits`: number): *void* +#### Parameters -**Parameters:** +• **maskBits**: `number` -Name | Type | ------- | ------ | -`maskBits` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setFriction +### setFriction() -▸ **setFriction**(`friction`: number): *void* +> **setFriction**(`friction`): `void` Set the coefficient of friction. This will not change the friction of existing contacts. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`friction` | number | +• **friction**: `number` -**Returns:** *void* +#### Returns -___ +`void` -### setRestitution +*** -▸ **setRestitution**(`restitution`: number): *void* +### setRestitution() + +> **setRestitution**(`restitution`): `void` Set the coefficient of restitution. This will not change the restitution of existing contacts. -**Parameters:** +#### Parameters + +• **restitution**: `number` -Name | Type | ------- | ------ | -`restitution` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setSensor +### setSensor() -▸ **setSensor**(`sensor`: boolean): *void* +> **setSensor**(`sensor`): `void` Set if this fixture is a sensor. -**Parameters:** +#### Parameters + +• **sensor**: `boolean` -Name | Type | ------- | ------ | -`sensor` | boolean | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setUserData +### setUserData() -▸ **setUserData**(`data`: unknown): *void* +> **setUserData**(`data`): `void` Set the user data. Use this to store your application specific data. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`data` | unknown | +• **data**: `unknown` -**Returns:** *void* +#### Returns -___ +`void` -### shouldCollide +*** -▸ **shouldCollide**(`that`: [Fixture](/api/classes/fixture)): *boolean* +### shouldCollide() + +> **shouldCollide**(`that`): `boolean` Implement this method to provide collision filtering, if you want finer control over contact creation. @@ -435,45 +422,47 @@ fixtures. Warning: for performance reasons this is only called when the AABBs begin to overlap. -**Parameters:** +#### Parameters + +• **that**: [`Fixture`](Fixture) -Name | Type | ------- | ------ | -`that` | [Fixture](/api/classes/fixture) | +#### Returns -**Returns:** *boolean* +`boolean` -___ +*** -### synchronize +### synchronize() -▸ **synchronize**(`broadPhase`: [BroadPhase](/api/classes/broadphase), `xf1`: [TransformValue](/api/globals#transformvalue), `xf2`: [TransformValue](/api/globals#transformvalue)): *void* +> **synchronize**(`broadPhase`, `xf1`, `xf2`): `void` Updates this fixture proxy in broad-phase (with combined AABB of current and next transformation). -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`broadPhase` | [BroadPhase](/api/classes/broadphase) | -`xf1` | [TransformValue](/api/globals#transformvalue) | -`xf2` | [TransformValue](/api/globals#transformvalue) | +• **broadPhase**: [`BroadPhase`](BroadPhase) -**Returns:** *void* +• **xf1**: [`TransformValue`](../type-aliases/TransformValue) -___ +• **xf2**: [`TransformValue`](../type-aliases/TransformValue) -### testPoint +#### Returns -▸ **testPoint**(`p`: [Vec2Value](/api/interfaces/vec2value)): *boolean* +`void` + +*** + +### testPoint() + +> **testPoint**(`p`): `boolean` Test a point in world coordinates for containment in this fixture. -**Parameters:** +#### Parameters + +• **p**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`p` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *boolean* +`boolean` diff --git a/docs/pages/api/classes/fixtureproxy.md b/docs/pages/api/classes/fixtureproxy.md index 9f150ac5..6ef8d4a2 100644 --- a/docs/pages/api/classes/fixtureproxy.md +++ b/docs/pages/api/classes/fixtureproxy.md @@ -1,60 +1,43 @@ - # Class: FixtureProxy This proxy is used internally to connect shape children to the broad-phase. -## Hierarchy - -* **FixtureProxy** - -## Index - -### Constructors - -* [constructor](/api/classes/fixtureproxy#constructor) - -### Properties +## Constructors -* [aabb](/api/classes/fixtureproxy#aabb) -* [childIndex](/api/classes/fixtureproxy#childindex) -* [fixture](/api/classes/fixtureproxy#fixture) -* [proxyId](/api/classes/fixtureproxy#proxyid) +### new FixtureProxy() -## Constructors +> **new FixtureProxy**(`fixture`, `childIndex`): [`FixtureProxy`](FixtureProxy) -### constructor +#### Parameters -\+ **new FixtureProxy**(`fixture`: [Fixture](/api/classes/fixture), `childIndex`: number): *[FixtureProxy](/api/classes/fixtureproxy)* +• **fixture**: [`Fixture`](Fixture) -**Parameters:** +• **childIndex**: `number` -Name | Type | ------- | ------ | -`fixture` | [Fixture](/api/classes/fixture) | -`childIndex` | number | +#### Returns -**Returns:** *[FixtureProxy](/api/classes/fixtureproxy)* +[`FixtureProxy`](FixtureProxy) ## Properties -### aabb +### aabb -• **aabb**: *[AABB](/api/classes/aabb)* +> **aabb**: [`AABB`](AABB) -___ +*** -### childIndex +### childIndex -• **childIndex**: *number* +> **childIndex**: `number` -___ +*** -### fixture +### fixture -• **fixture**: *[Fixture](/api/classes/fixture)* +> **fixture**: [`Fixture`](Fixture) -___ +*** -### proxyId +### proxyId -• **proxyId**: *number* +> **proxyId**: `number` diff --git a/docs/pages/api/classes/frictionjoint.md b/docs/pages/api/classes/frictionjoint.md index 6ff36c06..346c5058 100644 --- a/docs/pages/api/classes/frictionjoint.md +++ b/docs/pages/api/classes/frictionjoint.md @@ -1,394 +1,426 @@ - # Class: FrictionJoint Friction joint. This is used for top-down friction. It provides 2D translational friction and angular friction. -## Hierarchy +## Extends -* [Joint](/api/classes/joint) +- [`Joint`](Joint) - ↳ **FrictionJoint** +## Constructors -## Index +### new FrictionJoint() -### Constructors +> **new FrictionJoint**(`def`): [`FrictionJoint`](FrictionJoint) -* [constructor](/api/classes/frictionjoint#constructor) +#### Parameters -### Properties +• **def**: [`FrictionJointDef`](../interfaces/FrictionJointDef) -* [style](/api/classes/frictionjoint#style) -* [TYPE](/api/classes/frictionjoint#static-type) +#### Returns -### Methods +[`FrictionJoint`](FrictionJoint) -* [getAnchorA](/api/classes/frictionjoint#getanchora) -* [getAnchorB](/api/classes/frictionjoint#getanchorb) -* [getBodyA](/api/classes/frictionjoint#getbodya) -* [getBodyB](/api/classes/frictionjoint#getbodyb) -* [getCollideConnected](/api/classes/frictionjoint#getcollideconnected) -* [getLocalAnchorA](/api/classes/frictionjoint#getlocalanchora) -* [getLocalAnchorB](/api/classes/frictionjoint#getlocalanchorb) -* [getMaxForce](/api/classes/frictionjoint#getmaxforce) -* [getMaxTorque](/api/classes/frictionjoint#getmaxtorque) -* [getNext](/api/classes/frictionjoint#getnext) -* [getReactionForce](/api/classes/frictionjoint#getreactionforce) -* [getReactionTorque](/api/classes/frictionjoint#getreactiontorque) -* [getType](/api/classes/frictionjoint#gettype) -* [getUserData](/api/classes/frictionjoint#getuserdata) -* [initVelocityConstraints](/api/classes/frictionjoint#initvelocityconstraints) -* [isActive](/api/classes/frictionjoint#isactive) -* [setMaxForce](/api/classes/frictionjoint#setmaxforce) -* [setMaxTorque](/api/classes/frictionjoint#setmaxtorque) -* [setUserData](/api/classes/frictionjoint#setuserdata) -* [shiftOrigin](/api/classes/frictionjoint#shiftorigin) -* [solvePositionConstraints](/api/classes/frictionjoint#solvepositionconstraints) -* [solveVelocityConstraints](/api/classes/frictionjoint#solvevelocityconstraints) +#### Overrides -## Constructors +[`Joint`](Joint).[`constructor`](Joint#constructors) -### constructor +### new FrictionJoint() -\+ **new FrictionJoint**(`def`: [FrictionJointDef](/api/interfaces/frictionjointdef)): *[FrictionJoint](/api/classes/frictionjoint)* +> **new FrictionJoint**(`def`, `bodyA`, `bodyB`, `anchor`): [`FrictionJoint`](FrictionJoint) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +#### Parameters -**Parameters:** +• **def**: [`FrictionJointOpt`](../interfaces/FrictionJointOpt) -Name | Type | ------- | ------ | -`def` | [FrictionJointDef](/api/interfaces/frictionjointdef) | +• **bodyA**: [`Body`](Body) -**Returns:** *[FrictionJoint](/api/classes/frictionjoint)* +• **bodyB**: [`Body`](Body) -\+ **new FrictionJoint**(`def`: [FrictionJointOpt](/api/interfaces/frictionjointopt), `bodyA`: [Body](/api/classes/body), `bodyB`: [Body](/api/classes/body), `anchor`: [Vec2Value](/api/interfaces/vec2value)): *[FrictionJoint](/api/classes/frictionjoint)* +• **anchor**: [`Vec2Value`](../interfaces/Vec2Value) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +Anchor in global coordination. -**Parameters:** +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`def` | [FrictionJointOpt](/api/interfaces/frictionjointopt) | - | -`bodyA` | [Body](/api/classes/body) | - | -`bodyB` | [Body](/api/classes/body) | - | -`anchor` | [Vec2Value](/api/interfaces/vec2value) | Anchor in global coordination. | +[`FrictionJoint`](FrictionJoint) -**Returns:** *[FrictionJoint](/api/classes/frictionjoint)* +#### Overrides -## Properties +[`Joint`](Joint).[`constructor`](Joint#constructors) -### style +## Properties -• **style**: *[Style](/api/interfaces/style)* +### style -*Inherited from [Joint](/api/classes/joint).[style](/api/classes/joint#style)* +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. -___ +#### Inherited from -### `Static` TYPE +[`Joint`](Joint).[`style`](Joint#style) -▪ **TYPE**: *"friction-joint"* = "friction-joint" as const +*** -## Methods +### TYPE -### getAnchorA +> `static` **TYPE**: `"friction-joint"` -▸ **getAnchorA**(): *[Vec2](/api/classes/vec2)* +## Methods + +### getAnchorA() -*Overrides [Joint](/api/classes/joint).[getAnchorA](/api/classes/joint#abstract-getanchora)* +> **getAnchorA**(): [`Vec2`](Vec2) Get the anchor point on bodyA in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +#### Overrides -### getAnchorB +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) -▸ **getAnchorB**(): *[Vec2](/api/classes/vec2)* +*** -*Overrides [Joint](/api/classes/joint).[getAnchorB](/api/classes/joint#abstract-getanchorb)* +### getAnchorB() + +> **getAnchorB**(): [`Vec2`](Vec2) Get the anchor point on bodyB in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) + +#### Overrides -___ +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) -### getBodyA +*** -▸ **getBodyA**(): *[Body](/api/classes/body)* +### getBodyA() -*Inherited from [Joint](/api/classes/joint).[getBodyA](/api/classes/joint#getbodya)* +> **getBodyA**(): [`Body`](Body) Get the first body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns -___ +[`Body`](Body) -### getBodyB +#### Inherited from -▸ **getBodyB**(): *[Body](/api/classes/body)* +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) -*Inherited from [Joint](/api/classes/joint).[getBodyB](/api/classes/joint#getbodyb)* +*** + +### getBodyB() + +> **getBodyB**(): [`Body`](Body) Get the second body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) -___ +#### Inherited from -### getCollideConnected +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) -▸ **getCollideConnected**(): *boolean* +*** -*Inherited from [Joint](/api/classes/joint).[getCollideConnected](/api/classes/joint#getcollideconnected)* +### getCollideConnected() + +> **getCollideConnected**(): `boolean` Get collide connected. Note: modifying the collide connect flag won't work correctly because the flag is only checked when fixture AABBs begin to overlap. -**Returns:** *boolean* +#### Returns + +`boolean` + +#### Inherited from -___ +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) -### getLocalAnchorA +*** -▸ **getLocalAnchorA**(): *[Vec2](/api/classes/vec2)* +### getLocalAnchorA() + +> **getLocalAnchorA**(): [`Vec2`](Vec2) The local anchor point relative to bodyA's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getLocalAnchorB +### getLocalAnchorB() -▸ **getLocalAnchorB**(): *[Vec2](/api/classes/vec2)* +> **getLocalAnchorB**(): [`Vec2`](Vec2) The local anchor point relative to bodyB's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getMaxForce +### getMaxForce() -▸ **getMaxForce**(): *number* +> **getMaxForce**(): `number` Get the maximum friction force in N. -**Returns:** *number* +#### Returns -___ +`number` -### getMaxTorque +*** -▸ **getMaxTorque**(): *number* +### getMaxTorque() + +> **getMaxTorque**(): `number` Get the maximum friction torque in N*m. -**Returns:** *number* +#### Returns -___ +`number` -### getNext +*** -▸ **getNext**(): *[Joint](/api/classes/joint)* +### getNext() -*Inherited from [Joint](/api/classes/joint).[getNext](/api/classes/joint#getnext)* +> **getNext**(): [`Joint`](Joint) Get the next joint the world joint list. -**Returns:** *[Joint](/api/classes/joint)* +#### Returns + +[`Joint`](Joint) + +#### Inherited from -___ +[`Joint`](Joint).[`getNext`](Joint#getnext) -### getReactionForce +*** -▸ **getReactionForce**(`inv_dt`: number): *[Vec2](/api/classes/vec2)* +### getReactionForce() -*Overrides [Joint](/api/classes/joint).[getReactionForce](/api/classes/joint#abstract-getreactionforce)* +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) Get the reaction force on bodyB at the joint anchor in Newtons. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`inv_dt` | number | +• **inv\_dt**: `number` -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getReactionTorque +#### Overrides -▸ **getReactionTorque**(`inv_dt`: number): *number* +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) -*Overrides [Joint](/api/classes/joint).[getReactionTorque](/api/classes/joint#abstract-getreactiontorque)* +*** + +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` Get the reaction torque on bodyB in N*m. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` -Name | Type | ------- | ------ | -`inv_dt` | number | +#### Returns -**Returns:** *number* +`number` -___ +#### Overrides -### getType +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) -▸ **getType**(): *string* +*** -*Inherited from [Joint](/api/classes/joint).[getType](/api/classes/joint#gettype)* +### getType() + +> **getType**(): `string` Get the type of the concrete joint. -**Returns:** *string* +#### Returns + +`string` + +#### Inherited from -___ +[`Joint`](Joint).[`getType`](Joint#gettype) -### getUserData +*** -▸ **getUserData**(): *unknown* +### getUserData() -*Inherited from [Joint](/api/classes/joint).[getUserData](/api/classes/joint#getuserdata)* +> **getUserData**(): `unknown` -**Returns:** *unknown* +#### Returns -___ +`unknown` -### initVelocityConstraints +#### Inherited from -▸ **initVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) -*Overrides [Joint](/api/classes/joint).[initVelocityConstraints](/api/classes/joint#abstract-initvelocityconstraints)* +*** -**Parameters:** +### initVelocityConstraints() -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +> **initVelocityConstraints**(`step`): `void` -**Returns:** *void* +#### Parameters -___ +• **step**: [`TimeStep`](TimeStep) -### isActive +#### Returns -▸ **isActive**(): *boolean* +`void` -*Inherited from [Joint](/api/classes/joint).[isActive](/api/classes/joint#isactive)* +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` Short-cut function to determine if either body is inactive. -**Returns:** *boolean* +#### Returns + +`boolean` + +#### Inherited from -___ +[`Joint`](Joint).[`isActive`](Joint#isactive) -### setMaxForce +*** -▸ **setMaxForce**(`force`: number): *void* +### setMaxForce() + +> **setMaxForce**(`force`): `void` Set the maximum friction force in N. -**Parameters:** +#### Parameters + +• **force**: `number` -Name | Type | ------- | ------ | -`force` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setMaxTorque +### setMaxTorque() -▸ **setMaxTorque**(`torque`: number): *void* +> **setMaxTorque**(`torque`): `void` Set the maximum friction torque in N*m. -**Parameters:** +#### Parameters + +• **torque**: `number` -Name | Type | ------- | ------ | -`torque` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setUserData +### setUserData() -▸ **setUserData**(`data`: unknown): *void* +> **setUserData**(`data`): `void` -*Inherited from [Joint](/api/classes/joint).[setUserData](/api/classes/joint#setuserdata)* +#### Parameters -**Parameters:** +• **data**: `unknown` -Name | Type | ------- | ------ | -`data` | unknown | +#### Returns -**Returns:** *void* +`void` -___ +#### Inherited from -### shiftOrigin +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +*** -*Inherited from [Joint](/api/classes/joint).[shiftOrigin](/api/classes/joint#shiftorigin)* +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` Shift the origin for any points stored in world coordinates. -**Parameters:** +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns -Name | Type | ------- | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | +`void` -**Returns:** *void* +#### Inherited from -___ +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) -### solvePositionConstraints +*** -▸ **solvePositionConstraints**(`step`: [TimeStep](/api/classes/timestep)): *boolean* +### solvePositionConstraints() -*Overrides [Joint](/api/classes/joint).[solvePositionConstraints](/api/classes/joint#abstract-solvepositionconstraints)* +> **solvePositionConstraints**(`step`): `boolean` This returns true if the position errors are within tolerance. -**Parameters:** +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +*** -**Returns:** *boolean* +### solveVelocityConstraints() -___ +> **solveVelocityConstraints**(`step`): `void` -### solveVelocityConstraints +#### Parameters -▸ **solveVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +• **step**: [`TimeStep`](TimeStep) -*Overrides [Joint](/api/classes/joint).[solveVelocityConstraints](/api/classes/joint#abstract-solvevelocityconstraints)* +#### Returns -**Parameters:** +`void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Overrides -**Returns:** *void* +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/gearjoint.md b/docs/pages/api/classes/gearjoint.md index ef7bfc2e..928fae55 100644 --- a/docs/pages/api/classes/gearjoint.md +++ b/docs/pages/api/classes/gearjoint.md @@ -1,4 +1,3 @@ - # Class: GearJoint A gear joint is used to connect two joints together. Either joint can be a @@ -13,365 +12,398 @@ joint if joint1 or joint2 is destroyed. This definition requires two existing revolute or prismatic joints (any combination will work). -## Hierarchy +## Extends -* [Joint](/api/classes/joint) +- [`Joint`](Joint) - ↳ **GearJoint** +## Constructors -## Index +### new GearJoint() -### Constructors +> **new GearJoint**(`def`): [`GearJoint`](GearJoint) -* [constructor](/api/classes/gearjoint#constructor) +#### Parameters -### Properties +• **def**: [`GearJointDef`](../interfaces/GearJointDef) -* [style](/api/classes/gearjoint#style) -* [TYPE](/api/classes/gearjoint#static-type) +#### Returns -### Methods +[`GearJoint`](GearJoint) -* [getAnchorA](/api/classes/gearjoint#getanchora) -* [getAnchorB](/api/classes/gearjoint#getanchorb) -* [getBodyA](/api/classes/gearjoint#getbodya) -* [getBodyB](/api/classes/gearjoint#getbodyb) -* [getCollideConnected](/api/classes/gearjoint#getcollideconnected) -* [getJoint1](/api/classes/gearjoint#getjoint1) -* [getJoint2](/api/classes/gearjoint#getjoint2) -* [getNext](/api/classes/gearjoint#getnext) -* [getRatio](/api/classes/gearjoint#getratio) -* [getReactionForce](/api/classes/gearjoint#getreactionforce) -* [getReactionTorque](/api/classes/gearjoint#getreactiontorque) -* [getType](/api/classes/gearjoint#gettype) -* [getUserData](/api/classes/gearjoint#getuserdata) -* [initVelocityConstraints](/api/classes/gearjoint#initvelocityconstraints) -* [isActive](/api/classes/gearjoint#isactive) -* [setRatio](/api/classes/gearjoint#setratio) -* [setUserData](/api/classes/gearjoint#setuserdata) -* [shiftOrigin](/api/classes/gearjoint#shiftorigin) -* [solvePositionConstraints](/api/classes/gearjoint#solvepositionconstraints) -* [solveVelocityConstraints](/api/classes/gearjoint#solvevelocityconstraints) +#### Overrides -## Constructors +[`Joint`](Joint).[`constructor`](Joint#constructors) -### constructor +### new GearJoint() -\+ **new GearJoint**(`def`: [GearJointDef](/api/interfaces/gearjointdef)): *[GearJoint](/api/classes/gearjoint)* +> **new GearJoint**(`def`, `bodyA`, `bodyB`, `joint1`, `joint2`, `ratio`?): [`GearJoint`](GearJoint) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +#### Parameters -**Parameters:** +• **def**: [`GearJointOpt`](../interfaces/GearJointOpt) -Name | Type | ------- | ------ | -`def` | [GearJointDef](/api/interfaces/gearjointdef) | +• **bodyA**: [`Body`](Body) -**Returns:** *[GearJoint](/api/classes/gearjoint)* +• **bodyB**: [`Body`](Body) -\+ **new GearJoint**(`def`: [GearJointOpt](/api/interfaces/gearjointopt), `bodyA`: [Body](/api/classes/body), `bodyB`: [Body](/api/classes/body), `joint1`: [RevoluteJoint](/api/classes/revolutejoint) | [PrismaticJoint](/api/classes/prismaticjoint), `joint2`: [RevoluteJoint](/api/classes/revolutejoint) | [PrismaticJoint](/api/classes/prismaticjoint), `ratio?`: number): *[GearJoint](/api/classes/gearjoint)* +• **joint1**: [`RevoluteJoint`](RevoluteJoint) \| [`PrismaticJoint`](PrismaticJoint) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +• **joint2**: [`RevoluteJoint`](RevoluteJoint) \| [`PrismaticJoint`](PrismaticJoint) -**Parameters:** +• **ratio?**: `number` -Name | Type | ------- | ------ | -`def` | [GearJointOpt](/api/interfaces/gearjointopt) | -`bodyA` | [Body](/api/classes/body) | -`bodyB` | [Body](/api/classes/body) | -`joint1` | [RevoluteJoint](/api/classes/revolutejoint) | [PrismaticJoint](/api/classes/prismaticjoint) | -`joint2` | [RevoluteJoint](/api/classes/revolutejoint) | [PrismaticJoint](/api/classes/prismaticjoint) | -`ratio?` | number | +#### Returns -**Returns:** *[GearJoint](/api/classes/gearjoint)* +[`GearJoint`](GearJoint) -## Properties +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) -### style +## Properties -• **style**: *[Style](/api/interfaces/style)* +### style -*Inherited from [Joint](/api/classes/joint).[style](/api/classes/joint#style)* +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. -___ +#### Inherited from -### `Static` TYPE +[`Joint`](Joint).[`style`](Joint#style) -▪ **TYPE**: *"gear-joint"* = "gear-joint" as const +*** -## Methods +### TYPE + +> `static` **TYPE**: `"gear-joint"` -### getAnchorA +## Methods -▸ **getAnchorA**(): *[Vec2](/api/classes/vec2)* +### getAnchorA() -*Overrides [Joint](/api/classes/joint).[getAnchorA](/api/classes/joint#abstract-getanchora)* +> **getAnchorA**(): [`Vec2`](Vec2) Get the anchor point on bodyA in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getAnchorB +#### Overrides -▸ **getAnchorB**(): *[Vec2](/api/classes/vec2)* +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) -*Overrides [Joint](/api/classes/joint).[getAnchorB](/api/classes/joint#abstract-getanchorb)* +*** + +### getAnchorB() + +> **getAnchorB**(): [`Vec2`](Vec2) Get the anchor point on bodyB in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +#### Overrides -### getBodyA +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) -▸ **getBodyA**(): *[Body](/api/classes/body)* +*** -*Inherited from [Joint](/api/classes/joint).[getBodyA](/api/classes/joint#getbodya)* +### getBodyA() + +> **getBodyA**(): [`Body`](Body) Get the first body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) + +#### Inherited from -___ +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) -### getBodyB +*** -▸ **getBodyB**(): *[Body](/api/classes/body)* +### getBodyB() -*Inherited from [Joint](/api/classes/joint).[getBodyB](/api/classes/joint#getbodyb)* +> **getBodyB**(): [`Body`](Body) Get the second body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns -___ +[`Body`](Body) -### getCollideConnected +#### Inherited from -▸ **getCollideConnected**(): *boolean* +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) -*Inherited from [Joint](/api/classes/joint).[getCollideConnected](/api/classes/joint#getcollideconnected)* +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` Get collide connected. Note: modifying the collide connect flag won't work correctly because the flag is only checked when fixture AABBs begin to overlap. -**Returns:** *boolean* +#### Returns + +`boolean` -___ +#### Inherited from -### getJoint1 +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) -▸ **getJoint1**(): *[Joint](/api/classes/joint)* +*** + +### getJoint1() + +> **getJoint1**(): [`Joint`](Joint) Get the first joint. -**Returns:** *[Joint](/api/classes/joint)* +#### Returns + +[`Joint`](Joint) -___ +*** -### getJoint2 +### getJoint2() -▸ **getJoint2**(): *[Joint](/api/classes/joint)* +> **getJoint2**(): [`Joint`](Joint) Get the second joint. -**Returns:** *[Joint](/api/classes/joint)* +#### Returns -___ +[`Joint`](Joint) -### getNext +*** -▸ **getNext**(): *[Joint](/api/classes/joint)* +### getNext() -*Inherited from [Joint](/api/classes/joint).[getNext](/api/classes/joint#getnext)* +> **getNext**(): [`Joint`](Joint) Get the next joint the world joint list. -**Returns:** *[Joint](/api/classes/joint)* +#### Returns + +[`Joint`](Joint) + +#### Inherited from -___ +[`Joint`](Joint).[`getNext`](Joint#getnext) -### getRatio +*** -▸ **getRatio**(): *number* +### getRatio() + +> **getRatio**(): `number` Get the gear ratio. -**Returns:** *number* +#### Returns -___ +`number` -### getReactionForce +*** -▸ **getReactionForce**(`inv_dt`: number): *[Vec2](/api/classes/vec2)* +### getReactionForce() -*Overrides [Joint](/api/classes/joint).[getReactionForce](/api/classes/joint#abstract-getreactionforce)* +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) Get the reaction force on bodyB at the joint anchor in Newtons. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` + +#### Returns -Name | Type | ------- | ------ | -`inv_dt` | number | +[`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Overrides -___ +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) -### getReactionTorque +*** -▸ **getReactionTorque**(`inv_dt`: number): *number* +### getReactionTorque() -*Overrides [Joint](/api/classes/joint).[getReactionTorque](/api/classes/joint#abstract-getreactiontorque)* +> **getReactionTorque**(`inv_dt`): `number` Get the reaction torque on bodyB in N*m. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`inv_dt` | number | +• **inv\_dt**: `number` -**Returns:** *number* +#### Returns -___ +`number` -### getType +#### Overrides -▸ **getType**(): *string* +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) -*Inherited from [Joint](/api/classes/joint).[getType](/api/classes/joint#gettype)* +*** + +### getType() + +> **getType**(): `string` Get the type of the concrete joint. -**Returns:** *string* +#### Returns + +`string` -___ +#### Inherited from -### getUserData +[`Joint`](Joint).[`getType`](Joint#gettype) -▸ **getUserData**(): *unknown* +*** -*Inherited from [Joint](/api/classes/joint).[getUserData](/api/classes/joint#getuserdata)* +### getUserData() -**Returns:** *unknown* +> **getUserData**(): `unknown` -___ +#### Returns -### initVelocityConstraints +`unknown` -▸ **initVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +#### Inherited from -*Overrides [Joint](/api/classes/joint).[initVelocityConstraints](/api/classes/joint#abstract-initvelocityconstraints)* +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) -**Parameters:** +*** -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +### initVelocityConstraints() -**Returns:** *void* +> **initVelocityConstraints**(`step`): `void` -___ +#### Parameters -### isActive +• **step**: [`TimeStep`](TimeStep) -▸ **isActive**(): *boolean* +#### Returns -*Inherited from [Joint](/api/classes/joint).[isActive](/api/classes/joint#isactive)* +`void` + +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` Short-cut function to determine if either body is inactive. -**Returns:** *boolean* +#### Returns + +`boolean` -___ +#### Inherited from -### setRatio +[`Joint`](Joint).[`isActive`](Joint#isactive) -▸ **setRatio**(`ratio`: number): *void* +*** + +### setRatio() + +> **setRatio**(`ratio`): `void` Set the gear ratio. -**Parameters:** +#### Parameters + +• **ratio**: `number` -Name | Type | ------- | ------ | -`ratio` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setUserData +### setUserData() -▸ **setUserData**(`data`: unknown): *void* +> **setUserData**(`data`): `void` -*Inherited from [Joint](/api/classes/joint).[setUserData](/api/classes/joint#setuserdata)* +#### Parameters -**Parameters:** +• **data**: `unknown` -Name | Type | ------- | ------ | -`data` | unknown | +#### Returns -**Returns:** *void* +`void` -___ +#### Inherited from -### shiftOrigin +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +*** -*Inherited from [Joint](/api/classes/joint).[shiftOrigin](/api/classes/joint#shiftorigin)* +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` Shift the origin for any points stored in world coordinates. -**Parameters:** +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns -Name | Type | ------- | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | +`void` -**Returns:** *void* +#### Inherited from -___ +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) -### solvePositionConstraints +*** -▸ **solvePositionConstraints**(`step`: [TimeStep](/api/classes/timestep)): *boolean* +### solvePositionConstraints() -*Overrides [Joint](/api/classes/joint).[solvePositionConstraints](/api/classes/joint#abstract-solvepositionconstraints)* +> **solvePositionConstraints**(`step`): `boolean` This returns true if the position errors are within tolerance. -**Parameters:** +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +*** -**Returns:** *boolean* +### solveVelocityConstraints() -___ +> **solveVelocityConstraints**(`step`): `void` -### solveVelocityConstraints +#### Parameters -▸ **solveVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +• **step**: [`TimeStep`](TimeStep) -*Overrides [Joint](/api/classes/joint).[solveVelocityConstraints](/api/classes/joint#abstract-solvevelocityconstraints)* +#### Returns -**Parameters:** +`void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Overrides -**Returns:** *void* +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/joint.md b/docs/pages/api/classes/joint.md index 90bf20dc..b2a9f9e5 100644 --- a/docs/pages/api/classes/joint.md +++ b/docs/pages/api/classes/joint.md @@ -1,290 +1,270 @@ - -# Class: Joint +# Class: `abstract` Joint The base joint class. Joints are used to constraint two bodies together in various fashions. Some joints also feature limits and motors. -## Hierarchy - -* **Joint** - - ↳ [DistanceJoint](/api/classes/distancejoint) - - ↳ [FrictionJoint](/api/classes/frictionjoint) - - ↳ [RevoluteJoint](/api/classes/revolutejoint) - - ↳ [PrismaticJoint](/api/classes/prismaticjoint) - - ↳ [GearJoint](/api/classes/gearjoint) - - ↳ [MotorJoint](/api/classes/motorjoint) +## Extended by - ↳ [MouseJoint](/api/classes/mousejoint) +- [`DistanceJoint`](DistanceJoint) +- [`FrictionJoint`](FrictionJoint) +- [`GearJoint`](GearJoint) +- [`MotorJoint`](MotorJoint) +- [`MouseJoint`](MouseJoint) +- [`PrismaticJoint`](PrismaticJoint) +- [`PulleyJoint`](PulleyJoint) +- [`RevoluteJoint`](RevoluteJoint) +- [`RopeJoint`](RopeJoint) +- [`WeldJoint`](WeldJoint) +- [`WheelJoint`](WheelJoint) - ↳ [PulleyJoint](/api/classes/pulleyjoint) - - ↳ [RopeJoint](/api/classes/ropejoint) - - ↳ [WeldJoint](/api/classes/weldjoint) - - ↳ [WheelJoint](/api/classes/wheeljoint) - -## Index - -### Constructors - -* [constructor](/api/classes/joint#constructor) +## Constructors -### Properties +### new Joint() -* [style](/api/classes/joint#style) +> **new Joint**(`def`): [`Joint`](Joint) -### Methods +#### Parameters -* [getAnchorA](/api/classes/joint#abstract-getanchora) -* [getAnchorB](/api/classes/joint#abstract-getanchorb) -* [getBodyA](/api/classes/joint#getbodya) -* [getBodyB](/api/classes/joint#getbodyb) -* [getCollideConnected](/api/classes/joint#getcollideconnected) -* [getNext](/api/classes/joint#getnext) -* [getReactionForce](/api/classes/joint#abstract-getreactionforce) -* [getReactionTorque](/api/classes/joint#abstract-getreactiontorque) -* [getType](/api/classes/joint#gettype) -* [getUserData](/api/classes/joint#getuserdata) -* [initVelocityConstraints](/api/classes/joint#abstract-initvelocityconstraints) -* [isActive](/api/classes/joint#isactive) -* [setUserData](/api/classes/joint#setuserdata) -* [shiftOrigin](/api/classes/joint#shiftorigin) -* [solvePositionConstraints](/api/classes/joint#abstract-solvepositionconstraints) -* [solveVelocityConstraints](/api/classes/joint#abstract-solvevelocityconstraints) +• **def**: [`JointDef`](../interfaces/JointDef) -## Constructors +#### Returns -### constructor +[`Joint`](Joint) -\+ **new Joint**(`def`: [JointDef](/api/interfaces/jointdef)): *[Joint](/api/classes/joint)* +### new Joint() -**Parameters:** +> **new Joint**(`def`, `bodyA`, `bodyB`): [`Joint`](Joint) -Name | Type | ------- | ------ | -`def` | [JointDef](/api/interfaces/jointdef) | +#### Parameters -**Returns:** *[Joint](/api/classes/joint)* +• **def**: [`JointOpt`](../interfaces/JointOpt) -\+ **new Joint**(`def`: [JointOpt](/api/interfaces/jointopt), `bodyA`: [Body](/api/classes/body), `bodyB`: [Body](/api/classes/body)): *[Joint](/api/classes/joint)* +• **bodyA**: [`Body`](Body) -**Parameters:** +• **bodyB**: [`Body`](Body) -Name | Type | ------- | ------ | -`def` | [JointOpt](/api/interfaces/jointopt) | -`bodyA` | [Body](/api/classes/body) | -`bodyB` | [Body](/api/classes/body) | +#### Returns -**Returns:** *[Joint](/api/classes/joint)* +[`Joint`](Joint) ## Properties -### style +### style -• **style**: *[Style](/api/interfaces/style)* +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. ## Methods -### `Abstract` getAnchorA +### getAnchorA() -▸ **getAnchorA**(): *[Vec2](/api/classes/vec2)* +> `abstract` **getAnchorA**(): [`Vec2`](Vec2) Get the anchor point on bodyA in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### `Abstract` getAnchorB +*** -▸ **getAnchorB**(): *[Vec2](/api/classes/vec2)* +### getAnchorB() + +> `abstract` **getAnchorB**(): [`Vec2`](Vec2) Get the anchor point on bodyB in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getBodyA +### getBodyA() -▸ **getBodyA**(): *[Body](/api/classes/body)* +> **getBodyA**(): [`Body`](Body) Get the first body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns -___ +[`Body`](Body) -### getBodyB +*** -▸ **getBodyB**(): *[Body](/api/classes/body)* +### getBodyB() + +> **getBodyB**(): [`Body`](Body) Get the second body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) -___ +*** -### getCollideConnected +### getCollideConnected() -▸ **getCollideConnected**(): *boolean* +> **getCollideConnected**(): `boolean` Get collide connected. Note: modifying the collide connect flag won't work correctly because the flag is only checked when fixture AABBs begin to overlap. -**Returns:** *boolean* +#### Returns -___ +`boolean` -### getNext +*** -▸ **getNext**(): *[Joint](/api/classes/joint)* +### getNext() + +> **getNext**(): [`Joint`](Joint) Get the next joint the world joint list. -**Returns:** *[Joint](/api/classes/joint)* +#### Returns + +[`Joint`](Joint) -___ +*** -### `Abstract` getReactionForce +### getReactionForce() -▸ **getReactionForce**(`inv_dt`: number): *[Vec2](/api/classes/vec2)* +> `abstract` **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) Get the reaction force on bodyB at the joint anchor in Newtons. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`inv_dt` | number | +• **inv\_dt**: `number` -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### `Abstract` getReactionTorque +*** -▸ **getReactionTorque**(`inv_dt`: number): *number* +### getReactionTorque() + +> `abstract` **getReactionTorque**(`inv_dt`): `number` Get the reaction torque on bodyB in N*m. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` -Name | Type | ------- | ------ | -`inv_dt` | number | +#### Returns -**Returns:** *number* +`number` -___ +*** -### getType +### getType() -▸ **getType**(): *string* +> **getType**(): `string` Get the type of the concrete joint. -**Returns:** *string* +#### Returns -___ +`string` -### getUserData +*** -▸ **getUserData**(): *unknown* +### getUserData() -**Returns:** *unknown* +> **getUserData**(): `unknown` -___ +#### Returns -### `Abstract` initVelocityConstraints +`unknown` -▸ **initVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +*** -**Parameters:** +### initVelocityConstraints() -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +> `abstract` **initVelocityConstraints**(`step`): `void` -**Returns:** *void* +#### Parameters -___ +• **step**: [`TimeStep`](TimeStep) -### isActive +#### Returns -▸ **isActive**(): *boolean* +`void` + +*** + +### isActive() + +> **isActive**(): `boolean` Short-cut function to determine if either body is inactive. -**Returns:** *boolean* +#### Returns + +`boolean` -___ +*** -### setUserData +### setUserData() -▸ **setUserData**(`data`: unknown): *void* +> **setUserData**(`data`): `void` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`data` | unknown | +• **data**: `unknown` -**Returns:** *void* +#### Returns -___ +`void` -### shiftOrigin +*** -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` Shift the origin for any points stored in world coordinates. -**Parameters:** +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### `Abstract` solvePositionConstraints +### solvePositionConstraints() -▸ **solvePositionConstraints**(`step`: [TimeStep](/api/classes/timestep)): *boolean* +> `abstract` **solvePositionConstraints**(`step`): `boolean` This returns true if the position errors are within tolerance. -**Parameters:** +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +`boolean` -**Returns:** *boolean* +*** -___ +### solveVelocityConstraints() -### `Abstract` solveVelocityConstraints +> `abstract` **solveVelocityConstraints**(`step`): `void` -▸ **solveVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +#### Parameters -**Parameters:** +• **step**: [`TimeStep`](TimeStep) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/jointedge.md b/docs/pages/api/classes/jointedge.md index 40be0bca..46034a14 100644 --- a/docs/pages/api/classes/jointedge.md +++ b/docs/pages/api/classes/jointedge.md @@ -1,4 +1,3 @@ - # Class: JointEdge A joint edge is used to connect bodies and joints together in a joint graph @@ -6,47 +5,44 @@ where each body is a node and each joint is an edge. A joint edge belongs to a doubly linked list maintained in each attached body. Each joint has two joint nodes, one for each attached body. -## Hierarchy +## Constructors -* **JointEdge** +### new JointEdge() -## Index +> **new JointEdge**(): [`JointEdge`](JointEdge) -### Properties +#### Returns -* [joint](/api/classes/jointedge#joint) -* [next](/api/classes/jointedge#next) -* [other](/api/classes/jointedge#other) -* [prev](/api/classes/jointedge#prev) +[`JointEdge`](JointEdge) ## Properties -### joint +### joint -• **joint**: *[Joint](/api/classes/joint) | null* = null +> **joint**: [`Joint`](Joint) = `null` the joint -___ +*** -### next +### next -• **next**: *[JointEdge](/api/classes/jointedge) | null* = null +> **next**: [`JointEdge`](JointEdge) = `null` the next joint edge in the body's joint list -___ +*** -### other +### other -• **other**: *[Body](/api/classes/body) | null* = null +> **other**: [`Body`](Body) = `null` provides quick access to the other body attached. -___ +*** -### prev +### prev -• **prev**: *[JointEdge](/api/classes/jointedge) | null* = null +> **prev**: [`JointEdge`](JointEdge) = `null` prev the previous joint edge in the body's joint list diff --git a/docs/pages/api/classes/manifold.md b/docs/pages/api/classes/manifold.md index d6abcc6e..dd8c4991 100644 --- a/docs/pages/api/classes/manifold.md +++ b/docs/pages/api/classes/manifold.md @@ -1,4 +1,3 @@ - # Class: Manifold A manifold for two touching convex shapes. Manifolds are created in `evaluate` @@ -12,138 +11,166 @@ movement, which is critical for continuous physics. All contact scenarios must be expressed in one of these types. This structure is stored across time steps, so we keep it small. -## Hierarchy - -* **Manifold** +## Constructors -## Index +### new Manifold() -### Properties +> **new Manifold**(): [`Manifold`](Manifold) -* [localNormal](/api/classes/manifold#localnormal) -* [localPoint](/api/classes/manifold#localpoint) -* [pointCount](/api/classes/manifold#pointcount) -* [points](/api/classes/manifold#points) -* [type](/api/classes/manifold#type) -* [ClipVertex](/api/classes/manifold#static-clipvertex) -* [PointState](/api/classes/manifold#static-pointstate) -* [clipSegmentToLine](/api/classes/manifold#static-clipsegmenttoline) -* [getPointStates](/api/classes/manifold#static-getpointstates) +#### Returns -### Methods - -* [getWorldManifold](/api/classes/manifold#getworldmanifold) -* [recycle](/api/classes/manifold#recycle) -* [set](/api/classes/manifold#set) +[`Manifold`](Manifold) ## Properties -### localNormal +### localNormal -• **localNormal**: *[Vec2Value](/api/interfaces/vec2value)* = matrix.vec2(0, 0) +> **localNormal**: [`Vec2Value`](../interfaces/Vec2Value) Usage depends on manifold type: - circles: not used - faceA: the normal on polygonA - faceB: the normal on polygonB -___ +*** -### localPoint +### localPoint -• **localPoint**: *[Vec2Value](/api/interfaces/vec2value)* = matrix.vec2(0, 0) +> **localPoint**: [`Vec2Value`](../interfaces/Vec2Value) Usage depends on manifold type: - circles: the local center of circleA - faceA: the center of faceA - faceB: the center of faceB -___ +*** -### pointCount +### pointCount -• **pointCount**: *number* = 0 +> **pointCount**: `number` = `0` The number of manifold points -___ +*** -### points +### points -• **points**: *[ManifoldPoint](/api/classes/manifoldpoint)[]* = [ new ManifoldPoint(), new ManifoldPoint() ] +> **points**: [`ManifoldPoint`](ManifoldPoint)[] The points of contact -___ +*** + +### type + +> **type**: [`ManifoldType`](../enumerations/ManifoldType) + +*** + +### clipSegmentToLine() + +> `static` **clipSegmentToLine**: (`vOut`, `vIn`, `normal`, `offset`, `vertexIndexA`) => `number` + +Clipping for contact manifolds. Sutherland-Hodgman clipping. + +#### Parameters + +• **vOut**: [`ClipVertex`](ClipVertex)[] + +• **vIn**: [`ClipVertex`](ClipVertex)[] + +• **normal**: [`Vec2Value`](../interfaces/Vec2Value) + +• **offset**: `number` -### type +• **vertexIndexA**: `number` -• **type**: *[ManifoldType](/api/enums/manifoldtype)* +#### Returns -___ +`number` -### `Static` ClipVertex +*** -▪ **ClipVertex**: *[ClipVertex](/api/classes/clipvertex)* = ClipVertex +### ClipVertex -___ +> `static` **ClipVertex**: *typeof* [`ClipVertex`](ClipVertex) -### `Static` PointState +*** -▪ **PointState**: *[PointState](/api/enums/pointstate)* = PointState +### getPointStates() -___ +> `static` **getPointStates**: (`state1`, `state2`, `manifold1`, `manifold2`) => `void` -### `Static` clipSegmentToLine +Compute the point states given two manifolds. The states pertain to the +transition from manifold1 to manifold2. So state1 is either persist or remove +while state2 is either add or persist. -▪ **clipSegmentToLine**: *[clipSegmentToLine](/api/globals#clipsegmenttoline)* = clipSegmentToLine +#### Parameters -___ +• **state1**: [`PointState`](../enumerations/PointState)[] -### `Static` getPointStates +• **state2**: [`PointState`](../enumerations/PointState)[] -▪ **getPointStates**: *[getPointStates](/api/globals#getpointstates)* = getPointStates +• **manifold1**: [`Manifold`](Manifold) + +• **manifold2**: [`Manifold`](Manifold) + +#### Returns + +`void` + +*** + +### PointState + +> `static` **PointState**: *typeof* [`PointState`](../enumerations/PointState) ## Methods -### getWorldManifold +### getWorldManifold() -▸ **getWorldManifold**(`wm`: [WorldManifold](/api/classes/worldmanifold) | null, `xfA`: [TransformValue](/api/globals#transformvalue), `radiusA`: number, `xfB`: [TransformValue](/api/globals#transformvalue), `radiusB`: number): *[WorldManifold](/api/classes/worldmanifold)* +> **getWorldManifold**(`wm`, `xfA`, `radiusA`, `xfB`, `radiusB`): [`WorldManifold`](WorldManifold) Evaluate the manifold with supplied transforms. This assumes modest motion from the original state. This does not change the point count, impulses, etc. The radii must come from the shapes that generated the manifold. -**Parameters:** +#### Parameters + +• **wm**: [`WorldManifold`](WorldManifold) + +• **xfA**: [`TransformValue`](../type-aliases/TransformValue) + +• **radiusA**: `number` + +• **xfB**: [`TransformValue`](../type-aliases/TransformValue) + +• **radiusB**: `number` + +#### Returns + +[`WorldManifold`](WorldManifold) -Name | Type | ------- | ------ | -`wm` | [WorldManifold](/api/classes/worldmanifold) | null | -`xfA` | [TransformValue](/api/globals#transformvalue) | -`radiusA` | number | -`xfB` | [TransformValue](/api/globals#transformvalue) | -`radiusB` | number | +*** -**Returns:** *[WorldManifold](/api/classes/worldmanifold)* +### recycle() -___ +> **recycle**(): `void` -### recycle +#### Returns -▸ **recycle**(): *void* +`void` -**Returns:** *void* +*** -___ +### set() -### set +> **set**(`that`): `void` -▸ **set**(`that`: [Manifold](/api/classes/manifold)): *void* +#### Parameters -**Parameters:** +• **that**: [`Manifold`](Manifold) -Name | Type | ------- | ------ | -`that` | [Manifold](/api/classes/manifold) | +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/manifoldpoint.md b/docs/pages/api/classes/manifoldpoint.md index 5fcf2ca8..5fc8cbd5 100644 --- a/docs/pages/api/classes/manifoldpoint.md +++ b/docs/pages/api/classes/manifoldpoint.md @@ -1,4 +1,3 @@ - # Class: ManifoldPoint A manifold point is a contact point belonging to a contact manifold. It holds @@ -9,77 +8,71 @@ This structure is stored across time steps, so we keep it small. Note: impulses are used for internal caching and may not provide reliable contact forces, especially for high speed collisions. -## Hierarchy - -* **ManifoldPoint** - -## Index +## Constructors -### Properties +### new ManifoldPoint() -* [id](/api/classes/manifoldpoint#readonly-id) -* [localPoint](/api/classes/manifoldpoint#localpoint) -* [normalImpulse](/api/classes/manifoldpoint#normalimpulse) -* [tangentImpulse](/api/classes/manifoldpoint#tangentimpulse) +> **new ManifoldPoint**(): [`ManifoldPoint`](ManifoldPoint) -### Methods +#### Returns -* [recycle](/api/classes/manifoldpoint#recycle) -* [set](/api/classes/manifoldpoint#set) +[`ManifoldPoint`](ManifoldPoint) ## Properties -### `Readonly` id +### id -• **id**: *[ContactID](/api/classes/contactid)‹›* = new ContactID() +> `readonly` **id**: [`ContactID`](ContactID) Uniquely identifies a contact point between two shapes to facilitate warm starting -___ +*** -### localPoint +### localPoint -• **localPoint**: *[Vec2Value](/api/interfaces/vec2value)* = matrix.vec2(0, 0) +> **localPoint**: [`Vec2Value`](../interfaces/Vec2Value) Usage depends on manifold type: - circles: the local center of circleB - faceA: the local center of circleB or the clip point of polygonB - faceB: the clip point of polygonA -___ +*** -### normalImpulse +### normalImpulse -• **normalImpulse**: *number* = 0 +> **normalImpulse**: `number` = `0` The non-penetration impulse -___ +*** -### tangentImpulse +### tangentImpulse -• **tangentImpulse**: *number* = 0 +> **tangentImpulse**: `number` = `0` The friction impulse ## Methods -### recycle +### recycle() + +> **recycle**(): `void` + +#### Returns -▸ **recycle**(): *void* +`void` -**Returns:** *void* +*** -___ +### set() -### set +> **set**(`that`): `void` -▸ **set**(`that`: [ManifoldPoint](/api/classes/manifoldpoint)): *void* +#### Parameters -**Parameters:** +• **that**: [`ManifoldPoint`](ManifoldPoint) -Name | Type | ------- | ------ | -`that` | [ManifoldPoint](/api/classes/manifoldpoint) | +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/mat22.md b/docs/pages/api/classes/mat22.md index a71dfa6c..dc7f1c91 100644 --- a/docs/pages/api/classes/mat22.md +++ b/docs/pages/api/classes/mat22.md @@ -1,345 +1,353 @@ - # Class: Mat22 A 2-by-2 matrix. Stored in column-major order. -## Hierarchy +## Constructors -* **Mat22** +### new Mat22() -## Index +> **new Mat22**(`a`, `b`, `c`, `d`): [`Mat22`](Mat22) -### Constructors +#### Parameters -* [constructor](/api/classes/mat22#constructor) +• **a**: `number` -### Properties +• **b**: `number` -* [ex](/api/classes/mat22#ex) -* [ey](/api/classes/mat22#ey) +• **c**: `number` -### Methods +• **d**: `number` -* [getInverse](/api/classes/mat22#getinverse) -* [set](/api/classes/mat22#set) -* [setIdentity](/api/classes/mat22#setidentity) -* [setZero](/api/classes/mat22#setzero) -* [solve](/api/classes/mat22#solve) -* [abs](/api/classes/mat22#static-abs) -* [add](/api/classes/mat22#static-add) -* [assert](/api/classes/mat22#static-assert) -* [isValid](/api/classes/mat22#static-isvalid) -* [mul](/api/classes/mat22#static-mul) -* [mulMat22](/api/classes/mat22#static-mulmat22) -* [mulT](/api/classes/mat22#static-mult) -* [mulTMat22](/api/classes/mat22#static-multmat22) -* [mulTVec2](/api/classes/mat22#static-multvec2) -* [mulVec2](/api/classes/mat22#static-mulvec2) +#### Returns -## Constructors +[`Mat22`](Mat22) -### constructor +### new Mat22() -\+ **new Mat22**(`a`: number, `b`: number, `c`: number, `d`: number): *[Mat22](/api/classes/mat22)* +> **new Mat22**(`a`, `b`): [`Mat22`](Mat22) -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`a` | number | -`b` | number | -`c` | number | -`d` | number | +• **a** -**Returns:** *[Mat22](/api/classes/mat22)* +• **a.x**: `number` -\+ **new Mat22**(`a`: object, `b`: object): *[Mat22](/api/classes/mat22)* +• **a.y**: `number` -**Parameters:** +• **b** -▪ **a**: *object* +• **b.x**: `number` -Name | Type | ------- | ------ | -`x` | number | -`y` | number | +• **b.y**: `number` -▪ **b**: *object* +#### Returns -Name | Type | ------- | ------ | -`x` | number | -`y` | number | +[`Mat22`](Mat22) -**Returns:** *[Mat22](/api/classes/mat22)* +### new Mat22() -\+ **new Mat22**(): *[Mat22](/api/classes/mat22)* +> **new Mat22**(): [`Mat22`](Mat22) -**Returns:** *[Mat22](/api/classes/mat22)* +#### Returns + +[`Mat22`](Mat22) ## Properties -### ex +### ex -• **ex**: *[Vec2](/api/classes/vec2)* +> **ex**: [`Vec2`](Vec2) -___ +*** -### ey +### ey -• **ey**: *[Vec2](/api/classes/vec2)* +> **ey**: [`Vec2`](Vec2) ## Methods -### getInverse +### getInverse() + +> **getInverse**(): [`Mat22`](Mat22) + +#### Returns + +[`Mat22`](Mat22) + +*** + +### set() + +#### set(a) + +> **set**(`a`): `void` -▸ **getInverse**(): *[Mat22](/api/classes/mat22)* +##### Parameters -**Returns:** *[Mat22](/api/classes/mat22)* +• **a**: [`Mat22`](Mat22) -___ +##### Returns -### set +`void` -▸ **set**(`a`: [Mat22](/api/classes/mat22)): *void* +#### set(a, b) -**Parameters:** +> **set**(`a`, `b`): `void` -Name | Type | ------- | ------ | -`a` | [Mat22](/api/classes/mat22) | +##### Parameters -**Returns:** *void* +• **a**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **set**(`a`: [Vec2Value](/api/interfaces/vec2value), `b`: [Vec2Value](/api/interfaces/vec2value)): *void* +• **b**: [`Vec2Value`](../interfaces/Vec2Value) -**Parameters:** +##### Returns -Name | Type | ------- | ------ | -`a` | [Vec2Value](/api/interfaces/vec2value) | -`b` | [Vec2Value](/api/interfaces/vec2value) | +`void` -**Returns:** *void* +#### set(a, b, c, d) -▸ **set**(`a`: number, `b`: number, `c`: number, `d`: number): *void* +> **set**(`a`, `b`, `c`, `d`): `void` -**Parameters:** +##### Parameters -Name | Type | ------- | ------ | -`a` | number | -`b` | number | -`c` | number | -`d` | number | +• **a**: `number` -**Returns:** *void* +• **b**: `number` -___ +• **c**: `number` -### setIdentity +• **d**: `number` -▸ **setIdentity**(): *void* +##### Returns -**Returns:** *void* +`void` -___ +*** -### setZero +### setIdentity() -▸ **setZero**(): *void* +> **setIdentity**(): `void` -**Returns:** *void* +#### Returns -___ +`void` -### solve +*** -▸ **solve**(`v`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +### setZero() + +> **setZero**(): `void` + +#### Returns + +`void` + +*** + +### solve() + +> **solve**(`v`): [`Vec2`](Vec2) Solve A * x = b, where b is a column vector. This is more efficient than computing the inverse in one-shot cases. -**Parameters:** +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### abs() -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | +> `static` **abs**(`mx`): [`Mat22`](Mat22) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Parameters -___ +• **mx**: [`Mat22`](Mat22) -### `Static` abs +#### Returns -▸ **abs**(`mx`: [Mat22](/api/classes/mat22)): *[Mat22](/api/classes/mat22)* +[`Mat22`](Mat22) -**Parameters:** +*** -Name | Type | ------- | ------ | -`mx` | [Mat22](/api/classes/mat22) | +### add() -**Returns:** *[Mat22](/api/classes/mat22)* +> `static` **add**(`mx1`, `mx2`): [`Mat22`](Mat22) -___ +#### Parameters -### `Static` add +• **mx1**: [`Mat22`](Mat22) -▸ **add**(`mx1`: [Mat22](/api/classes/mat22), `mx2`: [Mat22](/api/classes/mat22)): *[Mat22](/api/classes/mat22)* +• **mx2**: [`Mat22`](Mat22) -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`mx1` | [Mat22](/api/classes/mat22) | -`mx2` | [Mat22](/api/classes/mat22) | +[`Mat22`](Mat22) -**Returns:** *[Mat22](/api/classes/mat22)* +*** -___ +### assert() -### `Static` assert +> `static` **assert**(`o`): `void` -▸ **assert**(`o`: any): *void* +#### Parameters -**Parameters:** +• **o**: `any` -Name | Type | ------- | ------ | -`o` | any | +#### Returns -**Returns:** *void* +`void` -___ +*** -### `Static` isValid +### isValid() -▸ **isValid**(`obj`: any): *boolean* +> `static` **isValid**(`obj`): `boolean` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`obj` | any | +• **obj**: `any` -**Returns:** *boolean* +#### Returns -___ +`boolean` -### `Static` mul +*** -▸ **mul**(`mx`: [Mat22](/api/classes/mat22), `my`: [Mat22](/api/classes/mat22)): *[Mat22](/api/classes/mat22)* +### mul() + +#### mul(mx, my) + +> `static` **mul**(`mx`, `my`): [`Mat22`](Mat22) Multiply a matrix times a vector. If a rotation matrix is provided, then this transforms the vector from one frame to another. -**Parameters:** +##### Parameters + +• **mx**: [`Mat22`](Mat22) + +• **my**: [`Mat22`](Mat22) + +##### Returns + +[`Mat22`](Mat22) -Name | Type | ------- | ------ | -`mx` | [Mat22](/api/classes/mat22) | -`my` | [Mat22](/api/classes/mat22) | +#### mul(mx, v) -**Returns:** *[Mat22](/api/classes/mat22)* +> `static` **mul**(`mx`, `v`): [`Vec2`](Vec2) -▸ **mul**(`mx`: [Mat22](/api/classes/mat22), `v`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +##### Parameters -**Parameters:** +• **mx**: [`Mat22`](Mat22) -Name | Type | ------- | ------ | -`mx` | [Mat22](/api/classes/mat22) | -`v` | [Vec2Value](/api/interfaces/vec2value) | +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +##### Returns -___ +[`Vec2`](Vec2) -### `Static` mulMat22 +*** -▸ **mulMat22**(`mx`: [Mat22](/api/classes/mat22), `v`: [Mat22](/api/classes/mat22)): *[Mat22](/api/classes/mat22)* +### mulMat22() -**Parameters:** +> `static` **mulMat22**(`mx`, `v`): [`Mat22`](Mat22) -Name | Type | ------- | ------ | -`mx` | [Mat22](/api/classes/mat22) | -`v` | [Mat22](/api/classes/mat22) | +#### Parameters -**Returns:** *[Mat22](/api/classes/mat22)* +• **mx**: [`Mat22`](Mat22) -___ +• **v**: [`Mat22`](Mat22) -### `Static` mulT +#### Returns -▸ **mulT**(`mx`: [Mat22](/api/classes/mat22), `my`: [Mat22](/api/classes/mat22)): *[Mat22](/api/classes/mat22)* +[`Mat22`](Mat22) + +*** + +### mulT() + +#### mulT(mx, my) + +> `static` **mulT**(`mx`, `my`): [`Mat22`](Mat22) Multiply a matrix transpose times a vector. If a rotation matrix is provided, then this transforms the vector from one frame to another (inverse transform). -**Parameters:** +##### Parameters + +• **mx**: [`Mat22`](Mat22) + +• **my**: [`Mat22`](Mat22) + +##### Returns + +[`Mat22`](Mat22) + +#### mulT(mx, v) + +> `static` **mulT**(`mx`, `v`): [`Vec2`](Vec2) + +##### Parameters + +• **mx**: [`Mat22`](Mat22) + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +[`Vec2`](Vec2) -Name | Type | ------- | ------ | -`mx` | [Mat22](/api/classes/mat22) | -`my` | [Mat22](/api/classes/mat22) | +*** -**Returns:** *[Mat22](/api/classes/mat22)* +### mulTMat22() -▸ **mulT**(`mx`: [Mat22](/api/classes/mat22), `v`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> `static` **mulTMat22**(`mx`, `v`): [`Mat22`](Mat22) -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`mx` | [Mat22](/api/classes/mat22) | -`v` | [Vec2Value](/api/interfaces/vec2value) | +• **mx**: [`Mat22`](Mat22) -**Returns:** *[Vec2](/api/classes/vec2)* +• **v**: [`Mat22`](Mat22) -___ +#### Returns -### `Static` mulTMat22 +[`Mat22`](Mat22) -▸ **mulTMat22**(`mx`: [Mat22](/api/classes/mat22), `v`: [Mat22](/api/classes/mat22)): *[Mat22](/api/classes/mat22)* +*** -**Parameters:** +### mulTVec2() -Name | Type | ------- | ------ | -`mx` | [Mat22](/api/classes/mat22) | -`v` | [Mat22](/api/classes/mat22) | +> `static` **mulTVec2**(`mx`, `v`): [`Vec2`](Vec2) -**Returns:** *[Mat22](/api/classes/mat22)* +#### Parameters -___ +• **mx**: [`Mat22`](Mat22) -### `Static` mulTVec2 +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **mulTVec2**(`mx`: [Mat22](/api/classes/mat22), `v`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +#### Returns -**Parameters:** +[`Vec2`](Vec2) -Name | Type | ------- | ------ | -`mx` | [Mat22](/api/classes/mat22) | -`v` | [Vec2Value](/api/interfaces/vec2value) | +*** -**Returns:** *[Vec2](/api/classes/vec2)* +### mulVec2() -___ +> `static` **mulVec2**(`mx`, `v`): [`Vec2`](Vec2) -### `Static` mulVec2 +#### Parameters -▸ **mulVec2**(`mx`: [Mat22](/api/classes/mat22), `v`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +• **mx**: [`Mat22`](Mat22) -**Parameters:** +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`mx` | [Mat22](/api/classes/mat22) | -`v` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) diff --git a/docs/pages/api/classes/mat33.md b/docs/pages/api/classes/mat33.md index 7f1e7c93..f58ec6ca 100644 --- a/docs/pages/api/classes/mat33.md +++ b/docs/pages/api/classes/mat33.md @@ -1,252 +1,238 @@ - # Class: Mat33 A 3-by-3 matrix. Stored in column-major order. -## Hierarchy - -* **Mat33** - -## Index - -### Constructors - -* [constructor](/api/classes/mat33#constructor) +## Constructors -### Properties +### new Mat33() -* [ex](/api/classes/mat33#ex) -* [ey](/api/classes/mat33#ey) -* [ez](/api/classes/mat33#ez) +> **new Mat33**(`a`, `b`, `c`): [`Mat33`](Mat33) -### Methods +#### Parameters -* [getInverse22](/api/classes/mat33#getinverse22) -* [getSymInverse33](/api/classes/mat33#getsyminverse33) -* [setZero](/api/classes/mat33#setzero) -* [solve22](/api/classes/mat33#solve22) -* [solve33](/api/classes/mat33#solve33) -* [add](/api/classes/mat33#static-add) -* [assert](/api/classes/mat33#static-assert) -* [isValid](/api/classes/mat33#static-isvalid) -* [mul](/api/classes/mat33#static-mul) -* [mulVec2](/api/classes/mat33#static-mulvec2) -* [mulVec3](/api/classes/mat33#static-mulvec3) +• **a**: [`Vec3Value`](../interfaces/Vec3Value) -## Constructors +• **b**: [`Vec3Value`](../interfaces/Vec3Value) -### constructor +• **c**: [`Vec3Value`](../interfaces/Vec3Value) -\+ **new Mat33**(`a`: [Vec3Value](/api/interfaces/vec3value), `b`: [Vec3Value](/api/interfaces/vec3value), `c`: [Vec3Value](/api/interfaces/vec3value)): *[Mat33](/api/classes/mat33)* +#### Returns -**Parameters:** +[`Mat33`](Mat33) -Name | Type | ------- | ------ | -`a` | [Vec3Value](/api/interfaces/vec3value) | -`b` | [Vec3Value](/api/interfaces/vec3value) | -`c` | [Vec3Value](/api/interfaces/vec3value) | +### new Mat33() -**Returns:** *[Mat33](/api/classes/mat33)* +> **new Mat33**(): [`Mat33`](Mat33) -\+ **new Mat33**(): *[Mat33](/api/classes/mat33)* +#### Returns -**Returns:** *[Mat33](/api/classes/mat33)* +[`Mat33`](Mat33) ## Properties -### ex +### ex -• **ex**: *[Vec3](/api/classes/vec3)* +> **ex**: [`Vec3`](Vec3) -___ +*** -### ey +### ey -• **ey**: *[Vec3](/api/classes/vec3)* +> **ey**: [`Vec3`](Vec3) -___ +*** -### ez +### ez -• **ez**: *[Vec3](/api/classes/vec3)* +> **ez**: [`Vec3`](Vec3) ## Methods -### getInverse22 +### getInverse22() -▸ **getInverse22**(`M`: [Mat33](/api/classes/mat33)): *void* +> **getInverse22**(`M`): `void` Get the inverse of this matrix as a 2-by-2. Returns the zero matrix if singular. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`M` | [Mat33](/api/classes/mat33) | +• **M**: [`Mat33`](Mat33) -**Returns:** *void* +#### Returns -___ +`void` -### getSymInverse33 +*** -▸ **getSymInverse33**(`M`: [Mat33](/api/classes/mat33)): *void* +### getSymInverse33() + +> **getSymInverse33**(`M`): `void` Get the symmetric inverse of this matrix as a 3-by-3. Returns the zero matrix if singular. -**Parameters:** +#### Parameters + +• **M**: [`Mat33`](Mat33) -Name | Type | ------- | ------ | -`M` | [Mat33](/api/classes/mat33) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setZero +### setZero() -▸ **setZero**(): *[Mat33](/api/classes/mat33)* +> **setZero**(): [`Mat33`](Mat33) Set this matrix to all zeros. -**Returns:** *[Mat33](/api/classes/mat33)* +#### Returns + +[`Mat33`](Mat33) -___ +*** -### solve22 +### solve22() -▸ **solve22**(`v`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> **solve22**(`v`): [`Vec2`](Vec2) Solve A * x = b, where b is a column vector. This is more efficient than computing the inverse in one-shot cases. Solve only the upper 2-by-2 matrix equation. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### solve33 +*** -▸ **solve33**(`v`: [Vec3Value](/api/interfaces/vec3value)): *[Vec3](/api/classes/vec3)* +### solve33() + +> **solve33**(`v`): [`Vec3`](Vec3) Solve A * x = b, where b is a column vector. This is more efficient than computing the inverse in one-shot cases. -**Parameters:** +#### Parameters + +• **v**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns -Name | Type | ------- | ------ | -`v` | [Vec3Value](/api/interfaces/vec3value) | +[`Vec3`](Vec3) -**Returns:** *[Vec3](/api/classes/vec3)* +*** -___ +### add() -### `Static` add +> `static` **add**(`a`, `b`): [`Mat33`](Mat33) -▸ **add**(`a`: [Mat33](/api/classes/mat33), `b`: [Mat33](/api/classes/mat33)): *[Mat33](/api/classes/mat33)* +#### Parameters -**Parameters:** +• **a**: [`Mat33`](Mat33) -Name | Type | ------- | ------ | -`a` | [Mat33](/api/classes/mat33) | -`b` | [Mat33](/api/classes/mat33) | +• **b**: [`Mat33`](Mat33) -**Returns:** *[Mat33](/api/classes/mat33)* +#### Returns -___ +[`Mat33`](Mat33) -### `Static` assert +*** -▸ **assert**(`o`: any): *void* +### assert() -**Parameters:** +> `static` **assert**(`o`): `void` -Name | Type | ------- | ------ | -`o` | any | +#### Parameters -**Returns:** *void* +• **o**: `any` -___ +#### Returns -### `Static` isValid +`void` -▸ **isValid**(`obj`: any): *boolean* +*** -**Parameters:** +### isValid() -Name | Type | ------- | ------ | -`obj` | any | +> `static` **isValid**(`obj`): `boolean` -**Returns:** *boolean* +#### Parameters -___ +• **obj**: `any` -### `Static` mul +#### Returns -▸ **mul**(`a`: [Mat33](/api/classes/mat33), `b`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +`boolean` + +*** + +### mul() + +#### mul(a, b) + +> `static` **mul**(`a`, `b`): [`Vec2`](Vec2) Multiply a matrix times a vector. -**Parameters:** +##### Parameters + +• **a**: [`Mat33`](Mat33) + +• **b**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns + +[`Vec2`](Vec2) + +#### mul(a, b) + +> `static` **mul**(`a`, `b`): [`Vec3`](Vec3) + +##### Parameters + +• **a**: [`Mat33`](Mat33) + +• **b**: [`Vec3Value`](../interfaces/Vec3Value) -Name | Type | ------- | ------ | -`a` | [Mat33](/api/classes/mat33) | -`b` | [Vec2Value](/api/interfaces/vec2value) | +##### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec3`](Vec3) -▸ **mul**(`a`: [Mat33](/api/classes/mat33), `b`: [Vec3Value](/api/interfaces/vec3value)): *[Vec3](/api/classes/vec3)* +*** -**Parameters:** +### mulVec2() -Name | Type | ------- | ------ | -`a` | [Mat33](/api/classes/mat33) | -`b` | [Vec3Value](/api/interfaces/vec3value) | +> `static` **mulVec2**(`a`, `b`): [`Vec2`](Vec2) -**Returns:** *[Vec3](/api/classes/vec3)* +#### Parameters -___ +• **a**: [`Mat33`](Mat33) -### `Static` mulVec2 +• **b**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **mulVec2**(`a`: [Mat33](/api/classes/mat33), `b`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +#### Returns -**Parameters:** +[`Vec2`](Vec2) -Name | Type | ------- | ------ | -`a` | [Mat33](/api/classes/mat33) | -`b` | [Vec2Value](/api/interfaces/vec2value) | +*** -**Returns:** *[Vec2](/api/classes/vec2)* +### mulVec3() -___ +> `static` **mulVec3**(`a`, `b`): [`Vec3`](Vec3) -### `Static` mulVec3 +#### Parameters -▸ **mulVec3**(`a`: [Mat33](/api/classes/mat33), `b`: [Vec3Value](/api/interfaces/vec3value)): *[Vec3](/api/classes/vec3)* +• **a**: [`Mat33`](Mat33) -**Parameters:** +• **b**: [`Vec3Value`](../interfaces/Vec3Value) -Name | Type | ------- | ------ | -`a` | [Mat33](/api/classes/mat33) | -`b` | [Vec3Value](/api/interfaces/vec3value) | +#### Returns -**Returns:** *[Vec3](/api/classes/vec3)* +[`Vec3`](Vec3) diff --git a/docs/pages/api/classes/motorjoint.md b/docs/pages/api/classes/motorjoint.md index c3d58a53..8b5d1db5 100644 --- a/docs/pages/api/classes/motorjoint.md +++ b/docs/pages/api/classes/motorjoint.md @@ -1,452 +1,479 @@ - # Class: MotorJoint A motor joint is used to control the relative motion between two bodies. A typical usage is to control the movement of a dynamic body with respect to the ground. -## Hierarchy - -* [Joint](/api/classes/joint) +## Extends - ↳ **MotorJoint** +- [`Joint`](Joint) -## Index +## Constructors -### Constructors +### new MotorJoint() -* [constructor](/api/classes/motorjoint#constructor) +> **new MotorJoint**(`def`): [`MotorJoint`](MotorJoint) -### Properties +#### Parameters -* [style](/api/classes/motorjoint#style) -* [TYPE](/api/classes/motorjoint#static-type) +• **def**: [`MotorJointDef`](../interfaces/MotorJointDef) -### Methods +#### Returns -* [getAnchorA](/api/classes/motorjoint#getanchora) -* [getAnchorB](/api/classes/motorjoint#getanchorb) -* [getAngularOffset](/api/classes/motorjoint#getangularoffset) -* [getBodyA](/api/classes/motorjoint#getbodya) -* [getBodyB](/api/classes/motorjoint#getbodyb) -* [getCollideConnected](/api/classes/motorjoint#getcollideconnected) -* [getCorrectionFactor](/api/classes/motorjoint#getcorrectionfactor) -* [getLinearOffset](/api/classes/motorjoint#getlinearoffset) -* [getMaxForce](/api/classes/motorjoint#getmaxforce) -* [getMaxTorque](/api/classes/motorjoint#getmaxtorque) -* [getNext](/api/classes/motorjoint#getnext) -* [getReactionForce](/api/classes/motorjoint#getreactionforce) -* [getReactionTorque](/api/classes/motorjoint#getreactiontorque) -* [getType](/api/classes/motorjoint#gettype) -* [getUserData](/api/classes/motorjoint#getuserdata) -* [initVelocityConstraints](/api/classes/motorjoint#initvelocityconstraints) -* [isActive](/api/classes/motorjoint#isactive) -* [setAngularOffset](/api/classes/motorjoint#setangularoffset) -* [setCorrectionFactor](/api/classes/motorjoint#setcorrectionfactor) -* [setLinearOffset](/api/classes/motorjoint#setlinearoffset) -* [setMaxForce](/api/classes/motorjoint#setmaxforce) -* [setMaxTorque](/api/classes/motorjoint#setmaxtorque) -* [setUserData](/api/classes/motorjoint#setuserdata) -* [shiftOrigin](/api/classes/motorjoint#shiftorigin) -* [solvePositionConstraints](/api/classes/motorjoint#solvepositionconstraints) -* [solveVelocityConstraints](/api/classes/motorjoint#solvevelocityconstraints) +[`MotorJoint`](MotorJoint) -## Constructors +#### Overrides -### constructor +[`Joint`](Joint).[`constructor`](Joint#constructors) -\+ **new MotorJoint**(`def`: [MotorJointDef](/api/interfaces/motorjointdef)): *[MotorJoint](/api/classes/motorjoint)* +### new MotorJoint() -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +> **new MotorJoint**(`def`, `bodyA`, `bodyB`): [`MotorJoint`](MotorJoint) -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`def` | [MotorJointDef](/api/interfaces/motorjointdef) | +• **def**: [`MotorJointOpt`](../interfaces/MotorJointOpt) -**Returns:** *[MotorJoint](/api/classes/motorjoint)* +• **bodyA**: [`Body`](Body) -\+ **new MotorJoint**(`def`: [MotorJointOpt](/api/interfaces/motorjointopt), `bodyA`: [Body](/api/classes/body), `bodyB`: [Body](/api/classes/body)): *[MotorJoint](/api/classes/motorjoint)* +• **bodyB**: [`Body`](Body) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +#### Returns -**Parameters:** +[`MotorJoint`](MotorJoint) -Name | Type | ------- | ------ | -`def` | [MotorJointOpt](/api/interfaces/motorjointopt) | -`bodyA` | [Body](/api/classes/body) | -`bodyB` | [Body](/api/classes/body) | +#### Overrides -**Returns:** *[MotorJoint](/api/classes/motorjoint)* +[`Joint`](Joint).[`constructor`](Joint#constructors) ## Properties -### style +### style -• **style**: *[Style](/api/interfaces/style)* - -*Inherited from [Joint](/api/classes/joint).[style](/api/classes/joint#style)* +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. -___ +#### Inherited from -### `Static` TYPE +[`Joint`](Joint).[`style`](Joint#style) -▪ **TYPE**: *"motor-joint"* = "motor-joint" as const +*** -## Methods +### TYPE -### getAnchorA +> `static` **TYPE**: `"motor-joint"` -▸ **getAnchorA**(): *[Vec2](/api/classes/vec2)* +## Methods -*Overrides [Joint](/api/classes/joint).[getAnchorA](/api/classes/joint#abstract-getanchora)* +### getAnchorA() + +> **getAnchorA**(): [`Vec2`](Vec2) Get the anchor point on bodyA in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) + +#### Overrides -___ +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) -### getAnchorB +*** -▸ **getAnchorB**(): *[Vec2](/api/classes/vec2)* +### getAnchorB() -*Overrides [Joint](/api/classes/joint).[getAnchorB](/api/classes/joint#abstract-getanchorb)* +> **getAnchorB**(): [`Vec2`](Vec2) Get the anchor point on bodyB in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) + +#### Overrides + +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) -___ +*** -### getAngularOffset +### getAngularOffset() -▸ **getAngularOffset**(): *number* +> **getAngularOffset**(): `number` -**Returns:** *number* +#### Returns -___ +`number` -### getBodyA +*** -▸ **getBodyA**(): *[Body](/api/classes/body)* +### getBodyA() -*Inherited from [Joint](/api/classes/joint).[getBodyA](/api/classes/joint#getbodya)* +> **getBodyA**(): [`Body`](Body) Get the first body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns -___ +[`Body`](Body) -### getBodyB +#### Inherited from -▸ **getBodyB**(): *[Body](/api/classes/body)* +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) -*Inherited from [Joint](/api/classes/joint).[getBodyB](/api/classes/joint#getbodyb)* +*** + +### getBodyB() + +> **getBodyB**(): [`Body`](Body) Get the second body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) + +#### Inherited from -___ +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) -### getCollideConnected +*** -▸ **getCollideConnected**(): *boolean* +### getCollideConnected() -*Inherited from [Joint](/api/classes/joint).[getCollideConnected](/api/classes/joint#getcollideconnected)* +> **getCollideConnected**(): `boolean` Get collide connected. Note: modifying the collide connect flag won't work correctly because the flag is only checked when fixture AABBs begin to overlap. -**Returns:** *boolean* +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) -___ +*** -### getCorrectionFactor +### getCorrectionFactor() -▸ **getCorrectionFactor**(): *number* +> **getCorrectionFactor**(): `number` Get the position correction factor in the range [0,1]. -**Returns:** *number* +#### Returns -___ +`number` -### getLinearOffset +*** -▸ **getLinearOffset**(): *[Vec2](/api/classes/vec2)* +### getLinearOffset() -**Returns:** *[Vec2](/api/classes/vec2)* +> **getLinearOffset**(): [`Vec2`](Vec2) -___ +#### Returns -### getMaxForce +[`Vec2`](Vec2) -▸ **getMaxForce**(): *number* +*** + +### getMaxForce() + +> **getMaxForce**(): `number` Get the maximum friction force in N. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getMaxTorque +### getMaxTorque() -▸ **getMaxTorque**(): *number* +> **getMaxTorque**(): `number` Get the maximum friction torque in N*m. -**Returns:** *number* +#### Returns -___ +`number` -### getNext +*** -▸ **getNext**(): *[Joint](/api/classes/joint)* +### getNext() -*Inherited from [Joint](/api/classes/joint).[getNext](/api/classes/joint#getnext)* +> **getNext**(): [`Joint`](Joint) Get the next joint the world joint list. -**Returns:** *[Joint](/api/classes/joint)* +#### Returns -___ +[`Joint`](Joint) -### getReactionForce +#### Inherited from -▸ **getReactionForce**(`inv_dt`: number): *[Vec2](/api/classes/vec2)* +[`Joint`](Joint).[`getNext`](Joint#getnext) -*Overrides [Joint](/api/classes/joint).[getReactionForce](/api/classes/joint#abstract-getreactionforce)* +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) Get the reaction force on bodyB at the joint anchor in Newtons. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` -Name | Type | ------- | ------ | -`inv_dt` | number | +#### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) -___ +#### Overrides -### getReactionTorque +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) -▸ **getReactionTorque**(`inv_dt`: number): *number* +*** -*Overrides [Joint](/api/classes/joint).[getReactionTorque](/api/classes/joint#abstract-getreactiontorque)* +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` Get the reaction torque on bodyB in N*m. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` -Name | Type | ------- | ------ | -`inv_dt` | number | +#### Returns -**Returns:** *number* +`number` -___ +#### Overrides -### getType +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) -▸ **getType**(): *string* +*** -*Inherited from [Joint](/api/classes/joint).[getType](/api/classes/joint#gettype)* +### getType() + +> **getType**(): `string` Get the type of the concrete joint. -**Returns:** *string* +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) + +*** -___ +### getUserData() -### getUserData +> **getUserData**(): `unknown` -▸ **getUserData**(): *unknown* +#### Returns -*Inherited from [Joint](/api/classes/joint).[getUserData](/api/classes/joint#getuserdata)* +`unknown` -**Returns:** *unknown* +#### Inherited from -___ +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) -### initVelocityConstraints +*** -▸ **initVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +### initVelocityConstraints() -*Overrides [Joint](/api/classes/joint).[initVelocityConstraints](/api/classes/joint#abstract-initvelocityconstraints)* +> **initVelocityConstraints**(`step`): `void` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +• **step**: [`TimeStep`](TimeStep) -**Returns:** *void* +#### Returns -___ +`void` -### isActive +#### Overrides -▸ **isActive**(): *boolean* +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) -*Inherited from [Joint](/api/classes/joint).[isActive](/api/classes/joint#isactive)* +*** + +### isActive() + +> **isActive**(): `boolean` Short-cut function to determine if either body is inactive. -**Returns:** *boolean* +#### Returns + +`boolean` -___ +#### Inherited from -### setAngularOffset +[`Joint`](Joint).[`isActive`](Joint#isactive) -▸ **setAngularOffset**(`angularOffset`: number): *void* +*** + +### setAngularOffset() + +> **setAngularOffset**(`angularOffset`): `void` Set/get the target angular offset, in radians. -**Parameters:** +#### Parameters + +• **angularOffset**: `number` -Name | Type | ------- | ------ | -`angularOffset` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setCorrectionFactor +### setCorrectionFactor() -▸ **setCorrectionFactor**(`factor`: number): *void* +> **setCorrectionFactor**(`factor`): `void` Set the position correction factor in the range [0,1]. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`factor` | number | +• **factor**: `number` -**Returns:** *void* +#### Returns -___ +`void` -### setLinearOffset +*** -▸ **setLinearOffset**(`linearOffset`: [Vec2Value](/api/interfaces/vec2value)): *void* +### setLinearOffset() + +> **setLinearOffset**(`linearOffset`): `void` Set/get the target linear offset, in frame A, in meters. -**Parameters:** +#### Parameters + +• **linearOffset**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`linearOffset` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setMaxForce +### setMaxForce() -▸ **setMaxForce**(`force`: number): *void* +> **setMaxForce**(`force`): `void` Set the maximum friction force in N. -**Parameters:** +#### Parameters + +• **force**: `number` -Name | Type | ------- | ------ | -`force` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setMaxTorque +### setMaxTorque() -▸ **setMaxTorque**(`torque`: number): *void* +> **setMaxTorque**(`torque`): `void` Set the maximum friction torque in N*m. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`torque` | number | +• **torque**: `number` -**Returns:** *void* +#### Returns -___ +`void` -### setUserData +*** -▸ **setUserData**(`data`: unknown): *void* +### setUserData() -*Inherited from [Joint](/api/classes/joint).[setUserData](/api/classes/joint#setuserdata)* +> **setUserData**(`data`): `void` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`data` | unknown | +• **data**: `unknown` -**Returns:** *void* +#### Returns -___ +`void` -### shiftOrigin +#### Inherited from -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) -*Inherited from [Joint](/api/classes/joint).[shiftOrigin](/api/classes/joint#shiftorigin)* +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` Shift the origin for any points stored in world coordinates. -**Parameters:** +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *void* +`void` -___ +#### Inherited from -### solvePositionConstraints +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) -▸ **solvePositionConstraints**(`step`: [TimeStep](/api/classes/timestep)): *boolean* +*** -*Overrides [Joint](/api/classes/joint).[solvePositionConstraints](/api/classes/joint#abstract-solvepositionconstraints)* +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` This returns true if the position errors are within tolerance. -**Parameters:** +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +*** -**Returns:** *boolean* +### solveVelocityConstraints() -___ +> **solveVelocityConstraints**(`step`): `void` -### solveVelocityConstraints +#### Parameters -▸ **solveVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +• **step**: [`TimeStep`](TimeStep) -*Overrides [Joint](/api/classes/joint).[solveVelocityConstraints](/api/classes/joint#abstract-solvevelocityconstraints)* +#### Returns -**Parameters:** +`void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Overrides -**Returns:** *void* +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/mousejoint.md b/docs/pages/api/classes/mousejoint.md index c4dc7a6c..a33c0cfa 100644 --- a/docs/pages/api/classes/mousejoint.md +++ b/docs/pages/api/classes/mousejoint.md @@ -1,434 +1,462 @@ - # Class: MouseJoint A mouse joint is used to make a point on a body track a specified world point. This a soft constraint with a maximum force. This allows the constraint to stretch and without applying huge forces. -You need to call setTarget(target) every time that mouse is +You need to call setTarget(target) every time that mouse is moved, to track the new location of the mouse. NOTE: this joint is not documented in the manual because it was developed to be used in the testbed. If you want to learn how to use the mouse joint, look at the testbed. -## Hierarchy +## Extends -* [Joint](/api/classes/joint) +- [`Joint`](Joint) - ↳ **MouseJoint** +## Constructors -## Index +### new MouseJoint() -### Constructors +> **new MouseJoint**(`def`): [`MouseJoint`](MouseJoint) -* [constructor](/api/classes/mousejoint#constructor) +#### Parameters -### Properties +• **def**: [`MouseJointDef`](../interfaces/MouseJointDef) -* [style](/api/classes/mousejoint#style) -* [TYPE](/api/classes/mousejoint#static-type) +#### Returns -### Methods +[`MouseJoint`](MouseJoint) -* [getAnchorA](/api/classes/mousejoint#getanchora) -* [getAnchorB](/api/classes/mousejoint#getanchorb) -* [getBodyA](/api/classes/mousejoint#getbodya) -* [getBodyB](/api/classes/mousejoint#getbodyb) -* [getCollideConnected](/api/classes/mousejoint#getcollideconnected) -* [getDampingRatio](/api/classes/mousejoint#getdampingratio) -* [getFrequency](/api/classes/mousejoint#getfrequency) -* [getMaxForce](/api/classes/mousejoint#getmaxforce) -* [getNext](/api/classes/mousejoint#getnext) -* [getReactionForce](/api/classes/mousejoint#getreactionforce) -* [getReactionTorque](/api/classes/mousejoint#getreactiontorque) -* [getTarget](/api/classes/mousejoint#gettarget) -* [getType](/api/classes/mousejoint#gettype) -* [getUserData](/api/classes/mousejoint#getuserdata) -* [initVelocityConstraints](/api/classes/mousejoint#initvelocityconstraints) -* [isActive](/api/classes/mousejoint#isactive) -* [setDampingRatio](/api/classes/mousejoint#setdampingratio) -* [setFrequency](/api/classes/mousejoint#setfrequency) -* [setMaxForce](/api/classes/mousejoint#setmaxforce) -* [setTarget](/api/classes/mousejoint#settarget) -* [setUserData](/api/classes/mousejoint#setuserdata) -* [shiftOrigin](/api/classes/mousejoint#shiftorigin) -* [solvePositionConstraints](/api/classes/mousejoint#solvepositionconstraints) -* [solveVelocityConstraints](/api/classes/mousejoint#solvevelocityconstraints) +#### Overrides -## Constructors +[`Joint`](Joint).[`constructor`](Joint#constructors) -### constructor +### new MouseJoint() -\+ **new MouseJoint**(`def`: [MouseJointDef](/api/interfaces/mousejointdef)): *[MouseJoint](/api/classes/mousejoint)* +> **new MouseJoint**(`def`, `bodyA`, `bodyB`, `target`): [`MouseJoint`](MouseJoint) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +#### Parameters -**Parameters:** +• **def**: [`MouseJointOpt`](../interfaces/MouseJointOpt) -Name | Type | ------- | ------ | -`def` | [MouseJointDef](/api/interfaces/mousejointdef) | +• **bodyA**: [`Body`](Body) -**Returns:** *[MouseJoint](/api/classes/mousejoint)* +• **bodyB**: [`Body`](Body) -\+ **new MouseJoint**(`def`: [MouseJointOpt](/api/interfaces/mousejointopt), `bodyA`: [Body](/api/classes/body), `bodyB`: [Body](/api/classes/body), `target`: [Vec2Value](/api/interfaces/vec2value)): *[MouseJoint](/api/classes/mousejoint)* +• **target**: [`Vec2Value`](../interfaces/Vec2Value) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +#### Returns -**Parameters:** +[`MouseJoint`](MouseJoint) -Name | Type | ------- | ------ | -`def` | [MouseJointOpt](/api/interfaces/mousejointopt) | -`bodyA` | [Body](/api/classes/body) | -`bodyB` | [Body](/api/classes/body) | -`target` | [Vec2Value](/api/interfaces/vec2value) | +#### Overrides -**Returns:** *[MouseJoint](/api/classes/mousejoint)* +[`Joint`](Joint).[`constructor`](Joint#constructors) ## Properties -### style +### style -• **style**: *[Style](/api/interfaces/style)* - -*Inherited from [Joint](/api/classes/joint).[style](/api/classes/joint#style)* +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. -___ +#### Inherited from -### `Static` TYPE +[`Joint`](Joint).[`style`](Joint#style) -▪ **TYPE**: *"mouse-joint"* = "mouse-joint" as const +*** -## Methods +### TYPE + +> `static` **TYPE**: `"mouse-joint"` -### getAnchorA +## Methods -▸ **getAnchorA**(): *[Vec2](/api/classes/vec2)* +### getAnchorA() -*Overrides [Joint](/api/classes/joint).[getAnchorA](/api/classes/joint#abstract-getanchora)* +> **getAnchorA**(): [`Vec2`](Vec2) Get the anchor point on bodyA in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) + +#### Overrides -___ +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) -### getAnchorB +*** -▸ **getAnchorB**(): *[Vec2](/api/classes/vec2)* +### getAnchorB() -*Overrides [Joint](/api/classes/joint).[getAnchorB](/api/classes/joint#abstract-getanchorb)* +> **getAnchorB**(): [`Vec2`](Vec2) Get the anchor point on bodyB in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getBodyA +#### Overrides -▸ **getBodyA**(): *[Body](/api/classes/body)* +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) -*Inherited from [Joint](/api/classes/joint).[getBodyA](/api/classes/joint#getbodya)* +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) Get the first body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) -___ +#### Inherited from -### getBodyB +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) -▸ **getBodyB**(): *[Body](/api/classes/body)* +*** -*Inherited from [Joint](/api/classes/joint).[getBodyB](/api/classes/joint#getbodyb)* +### getBodyB() + +> **getBodyB**(): [`Body`](Body) Get the second body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) + +#### Inherited from -___ +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) -### getCollideConnected +*** -▸ **getCollideConnected**(): *boolean* +### getCollideConnected() -*Inherited from [Joint](/api/classes/joint).[getCollideConnected](/api/classes/joint#getcollideconnected)* +> **getCollideConnected**(): `boolean` Get collide connected. Note: modifying the collide connect flag won't work correctly because the flag is only checked when fixture AABBs begin to overlap. -**Returns:** *boolean* +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) -___ +*** -### getDampingRatio +### getDampingRatio() -▸ **getDampingRatio**(): *number* +> **getDampingRatio**(): `number` Get the damping ratio (dimensionless). -**Returns:** *number* +#### Returns -___ +`number` -### getFrequency +*** -▸ **getFrequency**(): *number* +### getFrequency() + +> **getFrequency**(): `number` Get the frequency in Hertz. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getMaxForce +### getMaxForce() -▸ **getMaxForce**(): *number* +> **getMaxForce**(): `number` Get the maximum force in Newtons. -**Returns:** *number* +#### Returns -___ +`number` -### getNext +*** -▸ **getNext**(): *[Joint](/api/classes/joint)* +### getNext() -*Inherited from [Joint](/api/classes/joint).[getNext](/api/classes/joint#getnext)* +> **getNext**(): [`Joint`](Joint) Get the next joint the world joint list. -**Returns:** *[Joint](/api/classes/joint)* +#### Returns + +[`Joint`](Joint) -___ +#### Inherited from -### getReactionForce +[`Joint`](Joint).[`getNext`](Joint#getnext) -▸ **getReactionForce**(`inv_dt`: number): *[Vec2](/api/classes/vec2)* +*** -*Overrides [Joint](/api/classes/joint).[getReactionForce](/api/classes/joint#abstract-getreactionforce)* +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) Get the reaction force on bodyB at the joint anchor in Newtons. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` + +#### Returns -Name | Type | ------- | ------ | -`inv_dt` | number | +[`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Overrides -___ +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) -### getReactionTorque +*** -▸ **getReactionTorque**(`inv_dt`: number): *number* +### getReactionTorque() -*Overrides [Joint](/api/classes/joint).[getReactionTorque](/api/classes/joint#abstract-getreactiontorque)* +> **getReactionTorque**(`inv_dt`): `number` Get the reaction torque on bodyB in N*m. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`inv_dt` | number | +• **inv\_dt**: `number` -**Returns:** *number* +#### Returns -___ +`number` -### getTarget +#### Overrides -▸ **getTarget**(): *[Vec2](/api/classes/vec2)* +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) -**Returns:** *[Vec2](/api/classes/vec2)* +*** -___ +### getTarget() -### getType +> **getTarget**(): [`Vec2`](Vec2) -▸ **getType**(): *string* +#### Returns -*Inherited from [Joint](/api/classes/joint).[getType](/api/classes/joint#gettype)* +[`Vec2`](Vec2) + +*** + +### getType() + +> **getType**(): `string` Get the type of the concrete joint. -**Returns:** *string* +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) -___ +*** -### getUserData +### getUserData() -▸ **getUserData**(): *unknown* +> **getUserData**(): `unknown` -*Inherited from [Joint](/api/classes/joint).[getUserData](/api/classes/joint#getuserdata)* +#### Returns -**Returns:** *unknown* +`unknown` -___ +#### Inherited from -### initVelocityConstraints +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) -▸ **initVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +*** -*Overrides [Joint](/api/classes/joint).[initVelocityConstraints](/api/classes/joint#abstract-initvelocityconstraints)* +### initVelocityConstraints() -**Parameters:** +> **initVelocityConstraints**(`step`): `void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Parameters -**Returns:** *void* +• **step**: [`TimeStep`](TimeStep) -___ +#### Returns -### isActive +`void` -▸ **isActive**(): *boolean* +#### Overrides -*Inherited from [Joint](/api/classes/joint).[isActive](/api/classes/joint#isactive)* +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` Short-cut function to determine if either body is inactive. -**Returns:** *boolean* +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`isActive`](Joint#isactive) -___ +*** -### setDampingRatio +### setDampingRatio() -▸ **setDampingRatio**(`ratio`: number): *void* +> **setDampingRatio**(`ratio`): `void` Set the damping ratio (dimensionless). -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`ratio` | number | +• **ratio**: `number` -**Returns:** *void* +#### Returns -___ +`void` -### setFrequency +*** -▸ **setFrequency**(`hz`: number): *void* +### setFrequency() + +> **setFrequency**(`hz`): `void` Set the frequency in Hertz. -**Parameters:** +#### Parameters + +• **hz**: `number` -Name | Type | ------- | ------ | -`hz` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setMaxForce +### setMaxForce() -▸ **setMaxForce**(`force`: number): *void* +> **setMaxForce**(`force`): `void` Set the maximum force in Newtons. -**Parameters:** +#### Parameters + +• **force**: `number` -Name | Type | ------- | ------ | -`force` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setTarget +### setTarget() -▸ **setTarget**(`target`: [Vec2Value](/api/interfaces/vec2value)): *void* +> **setTarget**(`target`): `void` Use this to update the target point. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`target` | [Vec2Value](/api/interfaces/vec2value) | +• **target**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *void* +#### Returns -___ +`void` -### setUserData +*** -▸ **setUserData**(`data`: unknown): *void* +### setUserData() -*Inherited from [Joint](/api/classes/joint).[setUserData](/api/classes/joint#setuserdata)* +> **setUserData**(`data`): `void` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`data` | unknown | +• **data**: `unknown` -**Returns:** *void* +#### Returns -___ +`void` -### shiftOrigin +#### Inherited from -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) -*Overrides [Joint](/api/classes/joint).[shiftOrigin](/api/classes/joint#shiftorigin)* +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` Shift the origin for any points stored in world coordinates. -**Parameters:** +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *void* +`void` -___ +#### Overrides -### solvePositionConstraints +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) -▸ **solvePositionConstraints**(`step`: [TimeStep](/api/classes/timestep)): *boolean* +*** -*Overrides [Joint](/api/classes/joint).[solvePositionConstraints](/api/classes/joint#abstract-solvepositionconstraints)* +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` This returns true if the position errors are within tolerance. -**Parameters:** +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +*** -**Returns:** *boolean* +### solveVelocityConstraints() -___ +> **solveVelocityConstraints**(`step`): `void` -### solveVelocityConstraints +#### Parameters -▸ **solveVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +• **step**: [`TimeStep`](TimeStep) -*Overrides [Joint](/api/classes/joint).[solveVelocityConstraints](/api/classes/joint#abstract-solvevelocityconstraints)* +#### Returns -**Parameters:** +`void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Overrides -**Returns:** *void* +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/polygonshape.md b/docs/pages/api/classes/polygonshape.md index e138ff5f..f43db2ea 100644 --- a/docs/pages/api/classes/polygonshape.md +++ b/docs/pages/api/classes/polygonshape.md @@ -1,4 +1,3 @@ - # Class: PolygonShape A convex polygon. It is assumed that the interior of the polygon is to the @@ -6,222 +5,264 @@ left of each edge. Polygons have a maximum number of vertices equal to Settings.maxPolygonVertices. In most cases you should not need many vertices for a convex polygon. extends Shape -## Hierarchy +## Extends -* [Shape](/api/classes/shape) +- [`Shape`](Shape) - ↳ **PolygonShape** +## Extended by - ↳ [BoxShape](/api/classes/boxshape) +- [`BoxShape`](BoxShape) -## Index +## Constructors -### Constructors +### new PolygonShape() -* [constructor](/api/classes/polygonshape#constructor) +> **new PolygonShape**(`vertices`?): [`PolygonShape`](PolygonShape) -### Properties +#### Parameters -* [style](/api/classes/polygonshape#style) -* [TYPE](/api/classes/polygonshape#static-type) +• **vertices?**: [`Vec2Value`](../interfaces/Vec2Value)[] -### Methods +#### Returns -* [computeAABB](/api/classes/polygonshape#computeaabb) -* [computeDistanceProxy](/api/classes/polygonshape#computedistanceproxy) -* [computeMass](/api/classes/polygonshape#computemass) -* [getChildCount](/api/classes/polygonshape#getchildcount) -* [getRadius](/api/classes/polygonshape#getradius) -* [getType](/api/classes/polygonshape#gettype) -* [rayCast](/api/classes/polygonshape#raycast) -* [testPoint](/api/classes/polygonshape#testpoint) -* [validate](/api/classes/polygonshape#validate) -* [isValid](/api/classes/polygonshape#static-isvalid) +[`PolygonShape`](PolygonShape) -## Constructors +#### Overrides -### constructor +[`Shape`](Shape).[`constructor`](Shape#constructors) -\+ **new PolygonShape**(`vertices?`: [Vec2Value](/api/interfaces/vec2value)[]): *[PolygonShape](/api/classes/polygonshape)* +## Properties -**Parameters:** +### style -Name | Type | ------- | ------ | -`vertices?` | [Vec2Value](/api/interfaces/vec2value)[] | +> **style**: [`Style`](../interfaces/Style) = `{}` -**Returns:** *[PolygonShape](/api/classes/polygonshape)* +Styling for dev-tools. -## Properties +#### Inherited from -### style +[`Shape`](Shape).[`style`](Shape#style) -• **style**: *[Style](/api/interfaces/style)* +*** -*Inherited from [Shape](/api/classes/shape).[style](/api/classes/shape#style)* +### TYPE -Styling for dev-tools. +> `static` **TYPE**: `"polygon"` -___ +## Methods -### `Static` TYPE +### computeAABB() -▪ **TYPE**: *"polygon"* = "polygon" as const +> **computeAABB**(`aabb`, `xf`, `childIndex`): `void` -## Methods +Given a transform, compute the associated axis aligned bounding box for a +child shape. -### computeAABB +#### Parameters -▸ **computeAABB**(`aabb`: [AABBValue](/api/interfaces/aabbvalue), `xf`: [TransformValue](/api/globals#transformvalue), `childIndex`: number): *void* +• **aabb**: [`AABBValue`](../interfaces/AABBValue) -*Overrides [Shape](/api/classes/shape).[computeAABB](/api/classes/shape#abstract-computeaabb)* +Returns the axis aligned box. -Given a transform, compute the associated axis aligned bounding box for a -child shape. +• **xf**: [`TransformValue`](../type-aliases/TransformValue) -**Parameters:** +The world transform of the shape. -Name | Type | Description | ------- | ------ | ------ | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | Returns the axis aligned box. | -`xf` | [TransformValue](/api/globals#transformvalue) | The world transform of the shape. | -`childIndex` | number | The child shape | +• **childIndex**: `number` -**Returns:** *void* +The child shape -___ +#### Returns -### computeDistanceProxy +`void` -▸ **computeDistanceProxy**(`proxy`: [DistanceProxy](/api/classes/distanceproxy)): *void* +#### Overrides -*Overrides [Shape](/api/classes/shape).[computeDistanceProxy](/api/classes/shape#abstract-computedistanceproxy)* +[`Shape`](Shape).[`computeAABB`](Shape#computeaabb) -**Parameters:** +*** -Name | Type | ------- | ------ | -`proxy` | [DistanceProxy](/api/classes/distanceproxy) | +### computeDistanceProxy() -**Returns:** *void* +> **computeDistanceProxy**(`proxy`): `void` -___ +#### Parameters -### computeMass +• **proxy**: [`DistanceProxy`](DistanceProxy) -▸ **computeMass**(`massData`: [MassData](/api/interfaces/massdata), `density`: number): *void* +#### Returns -*Overrides [Shape](/api/classes/shape).[computeMass](/api/classes/shape#abstract-computemass)* +`void` + +#### Overrides + +[`Shape`](Shape).[`computeDistanceProxy`](Shape#computedistanceproxy) + +*** + +### computeMass() + +> **computeMass**(`massData`, `density`): `void` Compute the mass properties of this shape using its dimensions and density. The inertia tensor is computed about the local origin. -**Parameters:** +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) -Name | Type | Description | ------- | ------ | ------ | -`massData` | [MassData](/api/interfaces/massdata) | Returns the mass data for this shape. | -`density` | number | The density in kilograms per meter squared. | +Returns the mass data for this shape. -**Returns:** *void* +• **density**: `number` -___ +The density in kilograms per meter squared. -### getChildCount +#### Returns -▸ **getChildCount**(): *1* +`void` -*Overrides [Shape](/api/classes/shape).[getChildCount](/api/classes/shape#abstract-getchildcount)* +#### Overrides + +[`Shape`](Shape).[`computeMass`](Shape#computemass) + +*** + +### getChildCount() + +> **getChildCount**(): `1` Get the number of child primitives. -**Returns:** *1* +#### Returns + +`1` + +#### Overrides -___ +[`Shape`](Shape).[`getChildCount`](Shape#getchildcount) -### getRadius +*** -▸ **getRadius**(): *number* +### getRadius() -*Overrides [Shape](/api/classes/shape).[getRadius](/api/classes/shape#abstract-getradius)* +> **getRadius**(): `number` -**Returns:** *number* +#### Returns -___ +`number` -### getType +#### Overrides -▸ **getType**(): *"polygon"* +[`Shape`](Shape).[`getRadius`](Shape#getradius) -*Overrides [Shape](/api/classes/shape).[getType](/api/classes/shape#abstract-gettype)* +*** -**Returns:** *"polygon"* +### getType() -___ +> **getType**(): `"polygon"` -### rayCast +Get the type of this shape. You can use this to down cast to the concrete +shape. -▸ **rayCast**(`output`: [RayCastOutput](/api/interfaces/raycastoutput), `input`: [RayCastInput](/api/interfaces/raycastinput), `xf`: [Transform](/api/classes/transform), `childIndex`: number): *boolean* +#### Returns -*Overrides [Shape](/api/classes/shape).[rayCast](/api/classes/shape#abstract-raycast)* +`"polygon"` + +the shape type. + +#### Overrides + +[`Shape`](Shape).[`getType`](Shape#gettype) + +*** + +### rayCast() + +> **rayCast**(`output`, `input`, `xf`, `childIndex`): `boolean` Cast a ray against a child shape. -**Parameters:** +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +The ray-cast results. + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input parameters. + +• **xf**: [`Transform`](Transform) + +The transform to be applied to the shape. -Name | Type | Description | ------- | ------ | ------ | -`output` | [RayCastOutput](/api/interfaces/raycastoutput) | The ray-cast results. | -`input` | [RayCastInput](/api/interfaces/raycastinput) | The ray-cast input parameters. | -`xf` | [Transform](/api/classes/transform) | The transform to be applied to the shape. | -`childIndex` | number | The child shape index | +• **childIndex**: `number` -**Returns:** *boolean* +The child shape index -___ +#### Returns -### testPoint +`boolean` -▸ **testPoint**(`xf`: [TransformValue](/api/globals#transformvalue), `p`: [Vec2Value](/api/interfaces/vec2value)): *boolean* +#### Overrides -*Overrides [Shape](/api/classes/shape).[testPoint](/api/classes/shape#abstract-testpoint)* +[`Shape`](Shape).[`rayCast`](Shape#raycast) + +*** + +### testPoint() + +> **testPoint**(`xf`, `p`): `boolean` Test a point for containment in this shape. This only works for convex shapes. -**Parameters:** +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The shape world transform. + +• **p**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | Description | ------- | ------ | ------ | -`xf` | [TransformValue](/api/globals#transformvalue) | The shape world transform. | -`p` | [Vec2Value](/api/interfaces/vec2value) | A point in world coordinates. | +A point in world coordinates. -**Returns:** *boolean* +#### Returns -___ +`boolean` -### validate +#### Overrides -▸ **validate**(): *boolean* +[`Shape`](Shape).[`testPoint`](Shape#testpoint) + +*** + +### validate() + +> **validate**(): `boolean` Validate convexity. This is a very time consuming operation. -**Returns:** *boolean* +#### Returns + +`boolean` true if valid -___ +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` -### `Static` isValid +#### Parameters -▸ **isValid**(`obj`: any): *boolean* +• **obj**: `any` -*Inherited from [Shape](/api/classes/shape).[isValid](/api/classes/shape#static-isvalid)* +#### Returns -**Parameters:** +`boolean` -Name | Type | ------- | ------ | -`obj` | any | +#### Inherited from -**Returns:** *boolean* +[`Shape`](Shape).[`isValid`](Shape#isvalid) diff --git a/docs/pages/api/classes/position.md b/docs/pages/api/classes/position.md deleted file mode 100644 index a17f6a8c..00000000 --- a/docs/pages/api/classes/position.md +++ /dev/null @@ -1,48 +0,0 @@ - -# Class: Position - -## Hierarchy - -* **Position** - -## Index - -### Properties - -* [a](/api/classes/position#a) -* [c](/api/classes/position#c) - -### Methods - -* [getTransform](/api/classes/position#gettransform) - -## Properties - -### a - -• **a**: *number* = 0 - -angle - -___ - -### c - -• **c**: *[Vec2](/api/classes/vec2)‹›* = Vec2.zero() - -location - -## Methods - -### getTransform - -▸ **getTransform**(`xf`: [TransformValue](/api/globals#transformvalue), `p`: [Vec2Value](/api/interfaces/vec2value)): *[TransformValue](/api/globals#transformvalue)* - -**Parameters:** - -Name | Type | ------- | ------ | -`xf` | [TransformValue](/api/globals#transformvalue) | -`p` | [Vec2Value](/api/interfaces/vec2value) | - -**Returns:** *[TransformValue](/api/globals#transformvalue)* diff --git a/docs/pages/api/classes/prismaticjoint.md b/docs/pages/api/classes/prismaticjoint.md index 90b2eef0..51ba4025 100644 --- a/docs/pages/api/classes/prismaticjoint.md +++ b/docs/pages/api/classes/prismaticjoint.md @@ -1,4 +1,3 @@ - # Class: PrismaticJoint A prismatic joint. This joint provides one degree of freedom: translation @@ -6,547 +5,584 @@ along an axis fixed in bodyA. Relative rotation is prevented. You can use a joint limit to restrict the range of motion and a joint motor to drive the motion or to model joint friction. -## Hierarchy - -* [Joint](/api/classes/joint) - - ↳ **PrismaticJoint** - -## Index - -### Constructors - -* [constructor](/api/classes/prismaticjoint#constructor) - -### Properties - -* [style](/api/classes/prismaticjoint#style) -* [TYPE](/api/classes/prismaticjoint#static-type) - -### Methods - -* [enableLimit](/api/classes/prismaticjoint#enablelimit) -* [enableMotor](/api/classes/prismaticjoint#enablemotor) -* [getAnchorA](/api/classes/prismaticjoint#getanchora) -* [getAnchorB](/api/classes/prismaticjoint#getanchorb) -* [getBodyA](/api/classes/prismaticjoint#getbodya) -* [getBodyB](/api/classes/prismaticjoint#getbodyb) -* [getCollideConnected](/api/classes/prismaticjoint#getcollideconnected) -* [getJointSpeed](/api/classes/prismaticjoint#getjointspeed) -* [getJointTranslation](/api/classes/prismaticjoint#getjointtranslation) -* [getLocalAnchorA](/api/classes/prismaticjoint#getlocalanchora) -* [getLocalAnchorB](/api/classes/prismaticjoint#getlocalanchorb) -* [getLocalAxisA](/api/classes/prismaticjoint#getlocalaxisa) -* [getLowerLimit](/api/classes/prismaticjoint#getlowerlimit) -* [getMaxMotorForce](/api/classes/prismaticjoint#getmaxmotorforce) -* [getMotorForce](/api/classes/prismaticjoint#getmotorforce) -* [getMotorSpeed](/api/classes/prismaticjoint#getmotorspeed) -* [getNext](/api/classes/prismaticjoint#getnext) -* [getReactionForce](/api/classes/prismaticjoint#getreactionforce) -* [getReactionTorque](/api/classes/prismaticjoint#getreactiontorque) -* [getReferenceAngle](/api/classes/prismaticjoint#getreferenceangle) -* [getType](/api/classes/prismaticjoint#gettype) -* [getUpperLimit](/api/classes/prismaticjoint#getupperlimit) -* [getUserData](/api/classes/prismaticjoint#getuserdata) -* [initVelocityConstraints](/api/classes/prismaticjoint#initvelocityconstraints) -* [isActive](/api/classes/prismaticjoint#isactive) -* [isLimitEnabled](/api/classes/prismaticjoint#islimitenabled) -* [isMotorEnabled](/api/classes/prismaticjoint#ismotorenabled) -* [setLimits](/api/classes/prismaticjoint#setlimits) -* [setMaxMotorForce](/api/classes/prismaticjoint#setmaxmotorforce) -* [setMotorSpeed](/api/classes/prismaticjoint#setmotorspeed) -* [setUserData](/api/classes/prismaticjoint#setuserdata) -* [shiftOrigin](/api/classes/prismaticjoint#shiftorigin) -* [solvePositionConstraints](/api/classes/prismaticjoint#solvepositionconstraints) -* [solveVelocityConstraints](/api/classes/prismaticjoint#solvevelocityconstraints) +## Extends + +- [`Joint`](Joint) ## Constructors -### constructor +### new PrismaticJoint() -\+ **new PrismaticJoint**(`def`: [PrismaticJointDef](/api/interfaces/prismaticjointdef)): *[PrismaticJoint](/api/classes/prismaticjoint)* +> **new PrismaticJoint**(`def`): [`PrismaticJoint`](PrismaticJoint) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +#### Parameters -**Parameters:** +• **def**: [`PrismaticJointDef`](../interfaces/PrismaticJointDef) -Name | Type | ------- | ------ | -`def` | [PrismaticJointDef](/api/interfaces/prismaticjointdef) | +#### Returns -**Returns:** *[PrismaticJoint](/api/classes/prismaticjoint)* +[`PrismaticJoint`](PrismaticJoint) -\+ **new PrismaticJoint**(`def`: [PrismaticJointOpt](/api/interfaces/prismaticjointopt), `bodyA`: [Body](/api/classes/body), `bodyB`: [Body](/api/classes/body), `anchor`: [Vec2Value](/api/interfaces/vec2value), `axis`: [Vec2Value](/api/interfaces/vec2value)): *[PrismaticJoint](/api/classes/prismaticjoint)* +#### Overrides -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +[`Joint`](Joint).[`constructor`](Joint#constructors) -**Parameters:** +### new PrismaticJoint() -Name | Type | ------- | ------ | -`def` | [PrismaticJointOpt](/api/interfaces/prismaticjointopt) | -`bodyA` | [Body](/api/classes/body) | -`bodyB` | [Body](/api/classes/body) | -`anchor` | [Vec2Value](/api/interfaces/vec2value) | -`axis` | [Vec2Value](/api/interfaces/vec2value) | +> **new PrismaticJoint**(`def`, `bodyA`, `bodyB`, `anchor`, `axis`): [`PrismaticJoint`](PrismaticJoint) -**Returns:** *[PrismaticJoint](/api/classes/prismaticjoint)* +#### Parameters -## Properties +• **def**: [`PrismaticJointOpt`](../interfaces/PrismaticJointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) -### style +• **anchor**: [`Vec2Value`](../interfaces/Vec2Value) -• **style**: *[Style](/api/interfaces/style)* +• **axis**: [`Vec2Value`](../interfaces/Vec2Value) -*Inherited from [Joint](/api/classes/joint).[style](/api/classes/joint#style)* +#### Returns + +[`PrismaticJoint`](PrismaticJoint) + +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. -___ +#### Inherited from + +[`Joint`](Joint).[`style`](Joint#style) -### `Static` TYPE +*** -▪ **TYPE**: *"prismatic-joint"* = "prismatic-joint" as const +### TYPE + +> `static` **TYPE**: `"prismatic-joint"` ## Methods -### enableLimit +### enableLimit() -▸ **enableLimit**(`flag`: boolean): *void* +> **enableLimit**(`flag`): `void` Enable/disable the joint limit. -**Parameters:** +#### Parameters + +• **flag**: `boolean` -Name | Type | ------- | ------ | -`flag` | boolean | +#### Returns -**Returns:** *void* +`void` -___ +*** -### enableMotor +### enableMotor() -▸ **enableMotor**(`flag`: boolean): *void* +> **enableMotor**(`flag`): `void` Enable/disable the joint motor. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`flag` | boolean | +• **flag**: `boolean` -**Returns:** *void* +#### Returns -___ +`void` -### getAnchorA +*** -▸ **getAnchorA**(): *[Vec2](/api/classes/vec2)* +### getAnchorA() -*Overrides [Joint](/api/classes/joint).[getAnchorA](/api/classes/joint#abstract-getanchora)* +> **getAnchorA**(): [`Vec2`](Vec2) Get the anchor point on bodyA in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) + +#### Overrides -___ +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) -### getAnchorB +*** -▸ **getAnchorB**(): *[Vec2](/api/classes/vec2)* +### getAnchorB() -*Overrides [Joint](/api/classes/joint).[getAnchorB](/api/classes/joint#abstract-getanchorb)* +> **getAnchorB**(): [`Vec2`](Vec2) Get the anchor point on bodyB in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getBodyA +#### Overrides -▸ **getBodyA**(): *[Body](/api/classes/body)* +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) -*Inherited from [Joint](/api/classes/joint).[getBodyA](/api/classes/joint#getbodya)* +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) Get the first body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) + +#### Inherited from -___ +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) -### getBodyB +*** -▸ **getBodyB**(): *[Body](/api/classes/body)* +### getBodyB() -*Inherited from [Joint](/api/classes/joint).[getBodyB](/api/classes/joint#getbodyb)* +> **getBodyB**(): [`Body`](Body) Get the second body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns -___ +[`Body`](Body) -### getCollideConnected +#### Inherited from -▸ **getCollideConnected**(): *boolean* +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) -*Inherited from [Joint](/api/classes/joint).[getCollideConnected](/api/classes/joint#getcollideconnected)* +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` Get collide connected. Note: modifying the collide connect flag won't work correctly because the flag is only checked when fixture AABBs begin to overlap. -**Returns:** *boolean* +#### Returns + +`boolean` + +#### Inherited from -___ +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) -### getJointSpeed +*** -▸ **getJointSpeed**(): *number* +### getJointSpeed() + +> **getJointSpeed**(): `number` Get the current joint translation speed, usually in meters per second. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getJointTranslation +### getJointTranslation() -▸ **getJointTranslation**(): *number* +> **getJointTranslation**(): `number` Get the current joint translation, usually in meters. -**Returns:** *number* +#### Returns -___ +`number` -### getLocalAnchorA +*** -▸ **getLocalAnchorA**(): *[Vec2](/api/classes/vec2)* +### getLocalAnchorA() + +> **getLocalAnchorA**(): [`Vec2`](Vec2) The local anchor point relative to bodyA's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getLocalAnchorB +### getLocalAnchorB() -▸ **getLocalAnchorB**(): *[Vec2](/api/classes/vec2)* +> **getLocalAnchorB**(): [`Vec2`](Vec2) The local anchor point relative to bodyB's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getLocalAxisA +*** -▸ **getLocalAxisA**(): *[Vec2](/api/classes/vec2)* +### getLocalAxisA() + +> **getLocalAxisA**(): [`Vec2`](Vec2) The local joint axis relative to bodyA. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getLowerLimit +### getLowerLimit() -▸ **getLowerLimit**(): *number* +> **getLowerLimit**(): `number` Get the lower joint limit, usually in meters. -**Returns:** *number* +#### Returns + +`number` + +*** -___ +### getMaxMotorForce() -### getMaxMotorForce +> **getMaxMotorForce**(): `number` -▸ **getMaxMotorForce**(): *number* +#### Returns -**Returns:** *number* +`number` -___ +*** -### getMotorForce +### getMotorForce() -▸ **getMotorForce**(`inv_dt`: number): *number* +> **getMotorForce**(`inv_dt`): `number` Get the current motor force given the inverse time step, usually in N. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`inv_dt` | number | +• **inv\_dt**: `number` -**Returns:** *number* +#### Returns -___ +`number` -### getMotorSpeed +*** -▸ **getMotorSpeed**(): *number* +### getMotorSpeed() + +> **getMotorSpeed**(): `number` Get the motor speed, usually in meters per second. -**Returns:** *number* +#### Returns -___ +`number` -### getNext +*** -▸ **getNext**(): *[Joint](/api/classes/joint)* +### getNext() -*Inherited from [Joint](/api/classes/joint).[getNext](/api/classes/joint#getnext)* +> **getNext**(): [`Joint`](Joint) Get the next joint the world joint list. -**Returns:** *[Joint](/api/classes/joint)* +#### Returns + +[`Joint`](Joint) -___ +#### Inherited from -### getReactionForce +[`Joint`](Joint).[`getNext`](Joint#getnext) -▸ **getReactionForce**(`inv_dt`: number): *[Vec2](/api/classes/vec2)* +*** -*Overrides [Joint](/api/classes/joint).[getReactionForce](/api/classes/joint#abstract-getreactionforce)* +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) Get the reaction force on bodyB at the joint anchor in Newtons. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` -Name | Type | ------- | ------ | -`inv_dt` | number | +#### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) -___ +#### Overrides -### getReactionTorque +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) -▸ **getReactionTorque**(`inv_dt`: number): *number* +*** -*Overrides [Joint](/api/classes/joint).[getReactionTorque](/api/classes/joint#abstract-getreactiontorque)* +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` Get the reaction torque on bodyB in N*m. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` -Name | Type | ------- | ------ | -`inv_dt` | number | +#### Overrides -**Returns:** *number* +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) -___ +*** -### getReferenceAngle +### getReferenceAngle() -▸ **getReferenceAngle**(): *number* +> **getReferenceAngle**(): `number` Get the reference angle. -**Returns:** *number* +#### Returns -___ +`number` -### getType +*** -▸ **getType**(): *string* +### getType() -*Inherited from [Joint](/api/classes/joint).[getType](/api/classes/joint#gettype)* +> **getType**(): `string` Get the type of the concrete joint. -**Returns:** *string* +#### Returns -___ +`string` -### getUpperLimit +#### Inherited from -▸ **getUpperLimit**(): *number* +[`Joint`](Joint).[`getType`](Joint#gettype) + +*** + +### getUpperLimit() + +> **getUpperLimit**(): `number` Get the upper joint limit, usually in meters. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getUserData +### getUserData() -▸ **getUserData**(): *unknown* +> **getUserData**(): `unknown` -*Inherited from [Joint](/api/classes/joint).[getUserData](/api/classes/joint#getuserdata)* +#### Returns -**Returns:** *unknown* +`unknown` -___ +#### Inherited from -### initVelocityConstraints +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) -▸ **initVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +*** -*Overrides [Joint](/api/classes/joint).[initVelocityConstraints](/api/classes/joint#abstract-initvelocityconstraints)* +### initVelocityConstraints() -**Parameters:** +> **initVelocityConstraints**(`step`): `void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Parameters -**Returns:** *void* +• **step**: [`TimeStep`](TimeStep) -___ +#### Returns -### isActive +`void` -▸ **isActive**(): *boolean* +#### Overrides -*Inherited from [Joint](/api/classes/joint).[isActive](/api/classes/joint#isactive)* +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` Short-cut function to determine if either body is inactive. -**Returns:** *boolean* +#### Returns + +`boolean` -___ +#### Inherited from -### isLimitEnabled +[`Joint`](Joint).[`isActive`](Joint#isactive) -▸ **isLimitEnabled**(): *boolean* +*** + +### isLimitEnabled() + +> **isLimitEnabled**(): `boolean` Is the joint limit enabled? -**Returns:** *boolean* +#### Returns -___ +`boolean` -### isMotorEnabled +*** -▸ **isMotorEnabled**(): *boolean* +### isMotorEnabled() + +> **isMotorEnabled**(): `boolean` Is the joint motor enabled? -**Returns:** *boolean* +#### Returns + +`boolean` -___ +*** -### setLimits +### setLimits() -▸ **setLimits**(`lower`: number, `upper`: number): *void* +> **setLimits**(`lower`, `upper`): `void` Set the joint limits, usually in meters. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`lower` | number | -`upper` | number | +• **lower**: `number` -**Returns:** *void* +• **upper**: `number` -___ +#### Returns -### setMaxMotorForce +`void` -▸ **setMaxMotorForce**(`force`: number): *void* +*** + +### setMaxMotorForce() + +> **setMaxMotorForce**(`force`): `void` Set the maximum motor force, usually in N. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`force` | number | +• **force**: `number` -**Returns:** *void* +#### Returns -___ +`void` -### setMotorSpeed +*** -▸ **setMotorSpeed**(`speed`: number): *void* +### setMotorSpeed() + +> **setMotorSpeed**(`speed`): `void` Set the motor speed, usually in meters per second. -**Parameters:** +#### Parameters + +• **speed**: `number` -Name | Type | ------- | ------ | -`speed` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setUserData +### setUserData() -▸ **setUserData**(`data`: unknown): *void* +> **setUserData**(`data`): `void` -*Inherited from [Joint](/api/classes/joint).[setUserData](/api/classes/joint#setuserdata)* +#### Parameters -**Parameters:** +• **data**: `unknown` -Name | Type | ------- | ------ | -`data` | unknown | +#### Returns -**Returns:** *void* +`void` -___ +#### Inherited from -### shiftOrigin +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +*** -*Inherited from [Joint](/api/classes/joint).[shiftOrigin](/api/classes/joint#shiftorigin)* +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` Shift the origin for any points stored in world coordinates. -**Parameters:** +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *void* +`void` -___ +#### Inherited from -### solvePositionConstraints +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) -▸ **solvePositionConstraints**(`step`: [TimeStep](/api/classes/timestep)): *boolean* +*** -*Overrides [Joint](/api/classes/joint).[solvePositionConstraints](/api/classes/joint#abstract-solvepositionconstraints)* +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` This returns true if the position errors are within tolerance. -**Parameters:** +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +*** -**Returns:** *boolean* +### solveVelocityConstraints() -___ +> **solveVelocityConstraints**(`step`): `void` -### solveVelocityConstraints +#### Parameters -▸ **solveVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +• **step**: [`TimeStep`](TimeStep) -*Overrides [Joint](/api/classes/joint).[solveVelocityConstraints](/api/classes/joint#abstract-solvevelocityconstraints)* +#### Returns -**Parameters:** +`void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Overrides -**Returns:** *void* +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/pulleyjoint.md b/docs/pages/api/classes/pulleyjoint.md index 1aca5734..0e15b622 100644 --- a/docs/pages/api/classes/pulleyjoint.md +++ b/docs/pages/api/classes/pulleyjoint.md @@ -1,4 +1,3 @@ - # Class: PulleyJoint The pulley joint is connected to two bodies and two fixed ground points. The @@ -11,394 +10,434 @@ better when combined with prismatic joints. You should also cover the the anchor points with static shapes to prevent one side from going to zero length. -## Hierarchy +## Extends -* [Joint](/api/classes/joint) +- [`Joint`](Joint) - ↳ **PulleyJoint** +## Constructors -## Index +### new PulleyJoint() -### Constructors +> **new PulleyJoint**(`def`): [`PulleyJoint`](PulleyJoint) -* [constructor](/api/classes/pulleyjoint#constructor) +#### Parameters -### Properties +• **def**: [`PulleyJointDef`](../interfaces/PulleyJointDef) -* [style](/api/classes/pulleyjoint#style) -* [TYPE](/api/classes/pulleyjoint#static-type) +#### Returns -### Methods +[`PulleyJoint`](PulleyJoint) -* [getAnchorA](/api/classes/pulleyjoint#getanchora) -* [getAnchorB](/api/classes/pulleyjoint#getanchorb) -* [getBodyA](/api/classes/pulleyjoint#getbodya) -* [getBodyB](/api/classes/pulleyjoint#getbodyb) -* [getCollideConnected](/api/classes/pulleyjoint#getcollideconnected) -* [getCurrentLengthA](/api/classes/pulleyjoint#getcurrentlengtha) -* [getCurrentLengthB](/api/classes/pulleyjoint#getcurrentlengthb) -* [getGroundAnchorA](/api/classes/pulleyjoint#getgroundanchora) -* [getGroundAnchorB](/api/classes/pulleyjoint#getgroundanchorb) -* [getLengthA](/api/classes/pulleyjoint#getlengtha) -* [getLengthB](/api/classes/pulleyjoint#getlengthb) -* [getNext](/api/classes/pulleyjoint#getnext) -* [getRatio](/api/classes/pulleyjoint#getratio) -* [getReactionForce](/api/classes/pulleyjoint#getreactionforce) -* [getReactionTorque](/api/classes/pulleyjoint#getreactiontorque) -* [getType](/api/classes/pulleyjoint#gettype) -* [getUserData](/api/classes/pulleyjoint#getuserdata) -* [initVelocityConstraints](/api/classes/pulleyjoint#initvelocityconstraints) -* [isActive](/api/classes/pulleyjoint#isactive) -* [setUserData](/api/classes/pulleyjoint#setuserdata) -* [shiftOrigin](/api/classes/pulleyjoint#shiftorigin) -* [solvePositionConstraints](/api/classes/pulleyjoint#solvepositionconstraints) -* [solveVelocityConstraints](/api/classes/pulleyjoint#solvevelocityconstraints) +#### Overrides -## Constructors +[`Joint`](Joint).[`constructor`](Joint#constructors) -### constructor +### new PulleyJoint() -\+ **new PulleyJoint**(`def`: [PulleyJointDef](/api/interfaces/pulleyjointdef)): *[PulleyJoint](/api/classes/pulleyjoint)* +> **new PulleyJoint**(`def`, `bodyA`, `bodyB`, `groundA`, `groundB`, `anchorA`, `anchorB`, `ratio`): [`PulleyJoint`](PulleyJoint) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +#### Parameters -**Parameters:** +• **def**: [`PulleyJointOpt`](../interfaces/PulleyJointOpt) -Name | Type | ------- | ------ | -`def` | [PulleyJointDef](/api/interfaces/pulleyjointdef) | +• **bodyA**: [`Body`](Body) -**Returns:** *[PulleyJoint](/api/classes/pulleyjoint)* +• **bodyB**: [`Body`](Body) -\+ **new PulleyJoint**(`def`: [PulleyJointOpt](/api/interfaces/pulleyjointopt), `bodyA`: [Body](/api/classes/body), `bodyB`: [Body](/api/classes/body), `groundA`: [Vec2Value](/api/interfaces/vec2value), `groundB`: [Vec2Value](/api/interfaces/vec2value), `anchorA`: [Vec2Value](/api/interfaces/vec2value), `anchorB`: [Vec2Value](/api/interfaces/vec2value), `ratio`: number): *[PulleyJoint](/api/classes/pulleyjoint)* +• **groundA**: [`Vec2Value`](../interfaces/Vec2Value) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +• **groundB**: [`Vec2Value`](../interfaces/Vec2Value) -**Parameters:** +• **anchorA**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`def` | [PulleyJointOpt](/api/interfaces/pulleyjointopt) | -`bodyA` | [Body](/api/classes/body) | -`bodyB` | [Body](/api/classes/body) | -`groundA` | [Vec2Value](/api/interfaces/vec2value) | -`groundB` | [Vec2Value](/api/interfaces/vec2value) | -`anchorA` | [Vec2Value](/api/interfaces/vec2value) | -`anchorB` | [Vec2Value](/api/interfaces/vec2value) | -`ratio` | number | +• **anchorB**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[PulleyJoint](/api/classes/pulleyjoint)* +• **ratio**: `number` -## Properties +#### Returns -### style +[`PulleyJoint`](PulleyJoint) -• **style**: *[Style](/api/interfaces/style)* +#### Overrides + +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties -*Inherited from [Joint](/api/classes/joint).[style](/api/classes/joint#style)* +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. -___ +#### Inherited from -### `Static` TYPE +[`Joint`](Joint).[`style`](Joint#style) -▪ **TYPE**: *"pulley-joint"* = "pulley-joint" as const +*** -## Methods +### TYPE + +> `static` **TYPE**: `"pulley-joint"` -### getAnchorA +## Methods -▸ **getAnchorA**(): *[Vec2](/api/classes/vec2)* +### getAnchorA() -*Overrides [Joint](/api/classes/joint).[getAnchorA](/api/classes/joint#abstract-getanchora)* +> **getAnchorA**(): [`Vec2`](Vec2) Get the anchor point on bodyA in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) + +#### Overrides -___ +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) -### getAnchorB +*** -▸ **getAnchorB**(): *[Vec2](/api/classes/vec2)* +### getAnchorB() -*Overrides [Joint](/api/classes/joint).[getAnchorB](/api/classes/joint#abstract-getanchorb)* +> **getAnchorB**(): [`Vec2`](Vec2) Get the anchor point on bodyB in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getBodyA +#### Overrides -▸ **getBodyA**(): *[Body](/api/classes/body)* +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) -*Inherited from [Joint](/api/classes/joint).[getBodyA](/api/classes/joint#getbodya)* +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) Get the first body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) + +#### Inherited from -___ +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) -### getBodyB +*** -▸ **getBodyB**(): *[Body](/api/classes/body)* +### getBodyB() -*Inherited from [Joint](/api/classes/joint).[getBodyB](/api/classes/joint#getbodyb)* +> **getBodyB**(): [`Body`](Body) Get the second body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns -___ +[`Body`](Body) -### getCollideConnected +#### Inherited from -▸ **getCollideConnected**(): *boolean* +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) -*Inherited from [Joint](/api/classes/joint).[getCollideConnected](/api/classes/joint#getcollideconnected)* +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` Get collide connected. Note: modifying the collide connect flag won't work correctly because the flag is only checked when fixture AABBs begin to overlap. -**Returns:** *boolean* +#### Returns + +`boolean` -___ +#### Inherited from -### getCurrentLengthA +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) -▸ **getCurrentLengthA**(): *number* +*** + +### getCurrentLengthA() + +> **getCurrentLengthA**(): `number` Get the current length of the segment attached to bodyA. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getCurrentLengthB +### getCurrentLengthB() -▸ **getCurrentLengthB**(): *number* +> **getCurrentLengthB**(): `number` Get the current length of the segment attached to bodyB. -**Returns:** *number* +#### Returns -___ +`number` -### getGroundAnchorA +*** -▸ **getGroundAnchorA**(): *[Vec2](/api/classes/vec2)* +### getGroundAnchorA() + +> **getGroundAnchorA**(): [`Vec2`](Vec2) Get the first ground anchor. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getGroundAnchorB +### getGroundAnchorB() -▸ **getGroundAnchorB**(): *[Vec2](/api/classes/vec2)* +> **getGroundAnchorB**(): [`Vec2`](Vec2) Get the second ground anchor. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getLengthA +### getLengthA() -▸ **getLengthA**(): *number* +> **getLengthA**(): `number` Get the current length of the segment attached to bodyA. -**Returns:** *number* +#### Returns -___ +`number` -### getLengthB +*** -▸ **getLengthB**(): *number* +### getLengthB() + +> **getLengthB**(): `number` Get the current length of the segment attached to bodyB. -**Returns:** *number* +#### Returns -___ +`number` -### getNext +*** -▸ **getNext**(): *[Joint](/api/classes/joint)* +### getNext() -*Inherited from [Joint](/api/classes/joint).[getNext](/api/classes/joint#getnext)* +> **getNext**(): [`Joint`](Joint) Get the next joint the world joint list. -**Returns:** *[Joint](/api/classes/joint)* +#### Returns + +[`Joint`](Joint) + +#### Inherited from + +[`Joint`](Joint).[`getNext`](Joint#getnext) -___ +*** -### getRatio +### getRatio() -▸ **getRatio**(): *number* +> **getRatio**(): `number` Get the pulley ratio. -**Returns:** *number* +#### Returns -___ +`number` -### getReactionForce +*** -▸ **getReactionForce**(`inv_dt`: number): *[Vec2](/api/classes/vec2)* +### getReactionForce() -*Overrides [Joint](/api/classes/joint).[getReactionForce](/api/classes/joint#abstract-getreactionforce)* +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) Get the reaction force on bodyB at the joint anchor in Newtons. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`inv_dt` | number | +• **inv\_dt**: `number` -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getReactionTorque +#### Overrides -▸ **getReactionTorque**(`inv_dt`: number): *number* +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) -*Overrides [Joint](/api/classes/joint).[getReactionTorque](/api/classes/joint#abstract-getreactiontorque)* +*** + +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` Get the reaction torque on bodyB in N*m. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` -Name | Type | ------- | ------ | -`inv_dt` | number | +#### Returns -**Returns:** *number* +`number` -___ +#### Overrides -### getType +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) -▸ **getType**(): *string* +*** -*Inherited from [Joint](/api/classes/joint).[getType](/api/classes/joint#gettype)* +### getType() + +> **getType**(): `string` Get the type of the concrete joint. -**Returns:** *string* +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) + +*** + +### getUserData() -___ +> **getUserData**(): `unknown` -### getUserData +#### Returns -▸ **getUserData**(): *unknown* +`unknown` -*Inherited from [Joint](/api/classes/joint).[getUserData](/api/classes/joint#getuserdata)* +#### Inherited from -**Returns:** *unknown* +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) -___ +*** -### initVelocityConstraints +### initVelocityConstraints() -▸ **initVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +> **initVelocityConstraints**(`step`): `void` -*Overrides [Joint](/api/classes/joint).[initVelocityConstraints](/api/classes/joint#abstract-initvelocityconstraints)* +#### Parameters -**Parameters:** +• **step**: [`TimeStep`](TimeStep) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Returns -**Returns:** *void* +`void` -___ +#### Overrides -### isActive +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) -▸ **isActive**(): *boolean* +*** -*Inherited from [Joint](/api/classes/joint).[isActive](/api/classes/joint#isactive)* +### isActive() + +> **isActive**(): `boolean` Short-cut function to determine if either body is inactive. -**Returns:** *boolean* +#### Returns + +`boolean` + +#### Inherited from -___ +[`Joint`](Joint).[`isActive`](Joint#isactive) -### setUserData +*** -▸ **setUserData**(`data`: unknown): *void* +### setUserData() -*Inherited from [Joint](/api/classes/joint).[setUserData](/api/classes/joint#setuserdata)* +> **setUserData**(`data`): `void` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`data` | unknown | +• **data**: `unknown` -**Returns:** *void* +#### Returns -___ +`void` -### shiftOrigin +#### Inherited from -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) -*Overrides [Joint](/api/classes/joint).[shiftOrigin](/api/classes/joint#shiftorigin)* +*** + +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` Shift the origin for any points stored in world coordinates. -**Parameters:** +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | Description | ------- | ------ | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | | +#### Returns -**Returns:** *void* +`void` -___ +#### Overrides -### solvePositionConstraints +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) -▸ **solvePositionConstraints**(`step`: [TimeStep](/api/classes/timestep)): *boolean* +*** -*Overrides [Joint](/api/classes/joint).[solvePositionConstraints](/api/classes/joint#abstract-solvepositionconstraints)* +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` This returns true if the position errors are within tolerance. -**Parameters:** +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +*** -**Returns:** *boolean* +### solveVelocityConstraints() -___ +> **solveVelocityConstraints**(`step`): `void` -### solveVelocityConstraints +#### Parameters -▸ **solveVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +• **step**: [`TimeStep`](TimeStep) -*Overrides [Joint](/api/classes/joint).[solveVelocityConstraints](/api/classes/joint#abstract-solvevelocityconstraints)* +#### Returns -**Parameters:** +`void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Overrides -**Returns:** *void* +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/revolutejoint.md b/docs/pages/api/classes/revolutejoint.md index 7583c3eb..61c8f339 100644 --- a/docs/pages/api/classes/revolutejoint.md +++ b/docs/pages/api/classes/revolutejoint.md @@ -1,4 +1,3 @@ - # Class: RevoluteJoint A revolute joint constrains two bodies to share a common point while they are @@ -8,536 +7,571 @@ that specifies a lower and upper angle. You can use a motor to drive the relative rotation about the shared point. A maximum motor torque is provided so that infinite forces are not generated. -## Hierarchy - -* [Joint](/api/classes/joint) - - ↳ **RevoluteJoint** - -## Index - -### Constructors - -* [constructor](/api/classes/revolutejoint#constructor) - -### Properties - -* [style](/api/classes/revolutejoint#style) -* [TYPE](/api/classes/revolutejoint#static-type) - -### Methods - -* [enableLimit](/api/classes/revolutejoint#enablelimit) -* [enableMotor](/api/classes/revolutejoint#enablemotor) -* [getAnchorA](/api/classes/revolutejoint#getanchora) -* [getAnchorB](/api/classes/revolutejoint#getanchorb) -* [getBodyA](/api/classes/revolutejoint#getbodya) -* [getBodyB](/api/classes/revolutejoint#getbodyb) -* [getCollideConnected](/api/classes/revolutejoint#getcollideconnected) -* [getJointAngle](/api/classes/revolutejoint#getjointangle) -* [getJointSpeed](/api/classes/revolutejoint#getjointspeed) -* [getLocalAnchorA](/api/classes/revolutejoint#getlocalanchora) -* [getLocalAnchorB](/api/classes/revolutejoint#getlocalanchorb) -* [getLowerLimit](/api/classes/revolutejoint#getlowerlimit) -* [getMaxMotorTorque](/api/classes/revolutejoint#getmaxmotortorque) -* [getMotorSpeed](/api/classes/revolutejoint#getmotorspeed) -* [getMotorTorque](/api/classes/revolutejoint#getmotortorque) -* [getNext](/api/classes/revolutejoint#getnext) -* [getReactionForce](/api/classes/revolutejoint#getreactionforce) -* [getReactionTorque](/api/classes/revolutejoint#getreactiontorque) -* [getReferenceAngle](/api/classes/revolutejoint#getreferenceangle) -* [getType](/api/classes/revolutejoint#gettype) -* [getUpperLimit](/api/classes/revolutejoint#getupperlimit) -* [getUserData](/api/classes/revolutejoint#getuserdata) -* [initVelocityConstraints](/api/classes/revolutejoint#initvelocityconstraints) -* [isActive](/api/classes/revolutejoint#isactive) -* [isLimitEnabled](/api/classes/revolutejoint#islimitenabled) -* [isMotorEnabled](/api/classes/revolutejoint#ismotorenabled) -* [setLimits](/api/classes/revolutejoint#setlimits) -* [setMaxMotorTorque](/api/classes/revolutejoint#setmaxmotortorque) -* [setMotorSpeed](/api/classes/revolutejoint#setmotorspeed) -* [setUserData](/api/classes/revolutejoint#setuserdata) -* [shiftOrigin](/api/classes/revolutejoint#shiftorigin) -* [solvePositionConstraints](/api/classes/revolutejoint#solvepositionconstraints) -* [solveVelocityConstraints](/api/classes/revolutejoint#solvevelocityconstraints) +## Extends + +- [`Joint`](Joint) ## Constructors -### constructor +### new RevoluteJoint() -\+ **new RevoluteJoint**(`def`: [RevoluteJointDef](/api/interfaces/revolutejointdef)): *[RevoluteJoint](/api/classes/revolutejoint)* +> **new RevoluteJoint**(`def`): [`RevoluteJoint`](RevoluteJoint) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +#### Parameters -**Parameters:** +• **def**: [`RevoluteJointDef`](../interfaces/RevoluteJointDef) -Name | Type | ------- | ------ | -`def` | [RevoluteJointDef](/api/interfaces/revolutejointdef) | +#### Returns -**Returns:** *[RevoluteJoint](/api/classes/revolutejoint)* +[`RevoluteJoint`](RevoluteJoint) -\+ **new RevoluteJoint**(`def`: [RevoluteJointOpt](/api/interfaces/revolutejointopt), `bodyA`: [Body](/api/classes/body), `bodyB`: [Body](/api/classes/body), `anchor`: [Vec2Value](/api/interfaces/vec2value)): *[RevoluteJoint](/api/classes/revolutejoint)* +#### Overrides -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +[`Joint`](Joint).[`constructor`](Joint#constructors) -**Parameters:** +### new RevoluteJoint() -Name | Type | ------- | ------ | -`def` | [RevoluteJointOpt](/api/interfaces/revolutejointopt) | -`bodyA` | [Body](/api/classes/body) | -`bodyB` | [Body](/api/classes/body) | -`anchor` | [Vec2Value](/api/interfaces/vec2value) | +> **new RevoluteJoint**(`def`, `bodyA`, `bodyB`, `anchor`): [`RevoluteJoint`](RevoluteJoint) -**Returns:** *[RevoluteJoint](/api/classes/revolutejoint)* +#### Parameters -## Properties +• **def**: [`RevoluteJointOpt`](../interfaces/RevoluteJointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) + +• **anchor**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`RevoluteJoint`](RevoluteJoint) -### style +#### Overrides -• **style**: *[Style](/api/interfaces/style)* +[`Joint`](Joint).[`constructor`](Joint#constructors) -*Inherited from [Joint](/api/classes/joint).[style](/api/classes/joint#style)* +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. -___ +#### Inherited from + +[`Joint`](Joint).[`style`](Joint#style) -### `Static` TYPE +*** -▪ **TYPE**: *"revolute-joint"* = "revolute-joint" as const +### TYPE + +> `static` **TYPE**: `"revolute-joint"` ## Methods -### enableLimit +### enableLimit() -▸ **enableLimit**(`flag`: boolean): *void* +> **enableLimit**(`flag`): `void` Enable/disable the joint limit. -**Parameters:** +#### Parameters + +• **flag**: `boolean` -Name | Type | ------- | ------ | -`flag` | boolean | +#### Returns -**Returns:** *void* +`void` -___ +*** -### enableMotor +### enableMotor() -▸ **enableMotor**(`flag`: boolean): *void* +> **enableMotor**(`flag`): `void` Enable/disable the joint motor. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`flag` | boolean | +• **flag**: `boolean` -**Returns:** *void* +#### Returns -___ +`void` -### getAnchorA +*** -▸ **getAnchorA**(): *[Vec2](/api/classes/vec2)* +### getAnchorA() -*Overrides [Joint](/api/classes/joint).[getAnchorA](/api/classes/joint#abstract-getanchora)* +> **getAnchorA**(): [`Vec2`](Vec2) Get the anchor point on bodyA in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) + +#### Overrides -___ +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) -### getAnchorB +*** -▸ **getAnchorB**(): *[Vec2](/api/classes/vec2)* +### getAnchorB() -*Overrides [Joint](/api/classes/joint).[getAnchorB](/api/classes/joint#abstract-getanchorb)* +> **getAnchorB**(): [`Vec2`](Vec2) Get the anchor point on bodyB in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getBodyA +#### Overrides -▸ **getBodyA**(): *[Body](/api/classes/body)* +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) -*Inherited from [Joint](/api/classes/joint).[getBodyA](/api/classes/joint#getbodya)* +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) Get the first body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) + +#### Inherited from -___ +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) -### getBodyB +*** -▸ **getBodyB**(): *[Body](/api/classes/body)* +### getBodyB() -*Inherited from [Joint](/api/classes/joint).[getBodyB](/api/classes/joint#getbodyb)* +> **getBodyB**(): [`Body`](Body) Get the second body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns -___ +[`Body`](Body) -### getCollideConnected +#### Inherited from -▸ **getCollideConnected**(): *boolean* +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) -*Inherited from [Joint](/api/classes/joint).[getCollideConnected](/api/classes/joint#getcollideconnected)* +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` Get collide connected. Note: modifying the collide connect flag won't work correctly because the flag is only checked when fixture AABBs begin to overlap. -**Returns:** *boolean* +#### Returns + +`boolean` + +#### Inherited from -___ +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) -### getJointAngle +*** -▸ **getJointAngle**(): *number* +### getJointAngle() + +> **getJointAngle**(): `number` Get the current joint angle in radians. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getJointSpeed +### getJointSpeed() -▸ **getJointSpeed**(): *number* +> **getJointSpeed**(): `number` Get the current joint angle speed in radians per second. -**Returns:** *number* +#### Returns -___ +`number` -### getLocalAnchorA +*** -▸ **getLocalAnchorA**(): *[Vec2](/api/classes/vec2)* +### getLocalAnchorA() + +> **getLocalAnchorA**(): [`Vec2`](Vec2) The local anchor point relative to bodyA's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getLocalAnchorB +### getLocalAnchorB() -▸ **getLocalAnchorB**(): *[Vec2](/api/classes/vec2)* +> **getLocalAnchorB**(): [`Vec2`](Vec2) The local anchor point relative to bodyB's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getLowerLimit +*** -▸ **getLowerLimit**(): *number* +### getLowerLimit() + +> **getLowerLimit**(): `number` Get the lower joint limit in radians. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getMaxMotorTorque +### getMaxMotorTorque() -▸ **getMaxMotorTorque**(): *number* +> **getMaxMotorTorque**(): `number` -**Returns:** *number* +#### Returns -___ +`number` -### getMotorSpeed +*** -▸ **getMotorSpeed**(): *number* +### getMotorSpeed() + +> **getMotorSpeed**(): `number` Get the motor speed in radians per second. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getMotorTorque +### getMotorTorque() -▸ **getMotorTorque**(`inv_dt`: number): *number* +> **getMotorTorque**(`inv_dt`): `number` Get the current motor torque given the inverse time step. Unit is N*m. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`inv_dt` | number | +• **inv\_dt**: `number` -**Returns:** *number* +#### Returns -___ +`number` -### getNext +*** -▸ **getNext**(): *[Joint](/api/classes/joint)* +### getNext() -*Inherited from [Joint](/api/classes/joint).[getNext](/api/classes/joint#getnext)* +> **getNext**(): [`Joint`](Joint) Get the next joint the world joint list. -**Returns:** *[Joint](/api/classes/joint)* +#### Returns -___ +[`Joint`](Joint) -### getReactionForce +#### Inherited from -▸ **getReactionForce**(`inv_dt`: number): *[Vec2](/api/classes/vec2)* +[`Joint`](Joint).[`getNext`](Joint#getnext) -*Overrides [Joint](/api/classes/joint).[getReactionForce](/api/classes/joint#abstract-getreactionforce)* +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) Get the reaction force given the inverse time step. Unit is N. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` + +#### Returns -Name | Type | ------- | ------ | -`inv_dt` | number | +[`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Overrides -___ +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) -### getReactionTorque +*** -▸ **getReactionTorque**(`inv_dt`: number): *number* +### getReactionTorque() -*Overrides [Joint](/api/classes/joint).[getReactionTorque](/api/classes/joint#abstract-getreactiontorque)* +> **getReactionTorque**(`inv_dt`): `number` Get the reaction torque due to the joint limit given the inverse time step. Unit is N*m. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`inv_dt` | number | +• **inv\_dt**: `number` -**Returns:** *number* +#### Returns -___ +`number` -### getReferenceAngle +#### Overrides -▸ **getReferenceAngle**(): *number* +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) + +*** + +### getReferenceAngle() + +> **getReferenceAngle**(): `number` Get the reference angle. -**Returns:** *number* +#### Returns -___ +`number` -### getType +*** -▸ **getType**(): *string* +### getType() -*Inherited from [Joint](/api/classes/joint).[getType](/api/classes/joint#gettype)* +> **getType**(): `string` Get the type of the concrete joint. -**Returns:** *string* +#### Returns + +`string` -___ +#### Inherited from -### getUpperLimit +[`Joint`](Joint).[`getType`](Joint#gettype) -▸ **getUpperLimit**(): *number* +*** + +### getUpperLimit() + +> **getUpperLimit**(): `number` Get the upper joint limit in radians. -**Returns:** *number* +#### Returns + +`number` + +*** -___ +### getUserData() -### getUserData +> **getUserData**(): `unknown` -▸ **getUserData**(): *unknown* +#### Returns -*Inherited from [Joint](/api/classes/joint).[getUserData](/api/classes/joint#getuserdata)* +`unknown` -**Returns:** *unknown* +#### Inherited from -___ +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) -### initVelocityConstraints +*** -▸ **initVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +### initVelocityConstraints() -*Overrides [Joint](/api/classes/joint).[initVelocityConstraints](/api/classes/joint#abstract-initvelocityconstraints)* +> **initVelocityConstraints**(`step`): `void` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +• **step**: [`TimeStep`](TimeStep) -**Returns:** *void* +#### Returns -___ +`void` -### isActive +#### Overrides -▸ **isActive**(): *boolean* +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) -*Inherited from [Joint](/api/classes/joint).[isActive](/api/classes/joint#isactive)* +*** + +### isActive() + +> **isActive**(): `boolean` Short-cut function to determine if either body is inactive. -**Returns:** *boolean* +#### Returns + +`boolean` + +#### Inherited from -___ +[`Joint`](Joint).[`isActive`](Joint#isactive) -### isLimitEnabled +*** -▸ **isLimitEnabled**(): *boolean* +### isLimitEnabled() + +> **isLimitEnabled**(): `boolean` Is the joint limit enabled? -**Returns:** *boolean* +#### Returns + +`boolean` -___ +*** -### isMotorEnabled +### isMotorEnabled() -▸ **isMotorEnabled**(): *boolean* +> **isMotorEnabled**(): `boolean` Is the joint motor enabled? -**Returns:** *boolean* +#### Returns -___ +`boolean` -### setLimits +*** -▸ **setLimits**(`lower`: number, `upper`: number): *void* +### setLimits() + +> **setLimits**(`lower`, `upper`): `void` Set the joint limits in radians. -**Parameters:** +#### Parameters + +• **lower**: `number` -Name | Type | ------- | ------ | -`lower` | number | -`upper` | number | +• **upper**: `number` -**Returns:** *void* +#### Returns -___ +`void` -### setMaxMotorTorque +*** -▸ **setMaxMotorTorque**(`torque`: number): *void* +### setMaxMotorTorque() + +> **setMaxMotorTorque**(`torque`): `void` Set the maximum motor torque, usually in N-m. -**Parameters:** +#### Parameters + +• **torque**: `number` -Name | Type | ------- | ------ | -`torque` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setMotorSpeed +### setMotorSpeed() -▸ **setMotorSpeed**(`speed`: number): *void* +> **setMotorSpeed**(`speed`): `void` Set the motor speed in radians per second. -**Parameters:** +#### Parameters + +• **speed**: `number` + +#### Returns -Name | Type | ------- | ------ | -`speed` | number | +`void` -**Returns:** *void* +*** -___ +### setUserData() -### setUserData +> **setUserData**(`data`): `void` -▸ **setUserData**(`data`: unknown): *void* +#### Parameters -*Inherited from [Joint](/api/classes/joint).[setUserData](/api/classes/joint#setuserdata)* +• **data**: `unknown` -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`data` | unknown | +`void` -**Returns:** *void* +#### Inherited from -___ +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) -### shiftOrigin +*** -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +### shiftOrigin() -*Inherited from [Joint](/api/classes/joint).[shiftOrigin](/api/classes/joint#shiftorigin)* +> **shiftOrigin**(`newOrigin`): `void` Shift the origin for any points stored in world coordinates. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *void* +#### Returns -___ +`void` -### solvePositionConstraints +#### Inherited from -▸ **solvePositionConstraints**(`step`: [TimeStep](/api/classes/timestep)): *boolean* +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) -*Overrides [Joint](/api/classes/joint).[solvePositionConstraints](/api/classes/joint#abstract-solvepositionconstraints)* +*** + +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` This returns true if the position errors are within tolerance. -**Parameters:** +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +*** -**Returns:** *boolean* +### solveVelocityConstraints() -___ +> **solveVelocityConstraints**(`step`): `void` -### solveVelocityConstraints +#### Parameters -▸ **solveVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +• **step**: [`TimeStep`](TimeStep) -*Overrides [Joint](/api/classes/joint).[solveVelocityConstraints](/api/classes/joint#abstract-solvevelocityconstraints)* +#### Returns -**Parameters:** +`void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Overrides -**Returns:** *void* +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/ropejoint.md b/docs/pages/api/classes/ropejoint.md index edb3c267..03cba6ca 100644 --- a/docs/pages/api/classes/ropejoint.md +++ b/docs/pages/api/classes/ropejoint.md @@ -1,4 +1,3 @@ - # Class: RopeJoint A rope joint enforces a maximum distance between two points on two bodies. It @@ -8,375 +7,407 @@ Warning: if you attempt to change the maximum length during the simulation you will get some non-physical behavior. A model that would allow you to dynamically modify the length would have some -sponginess, so I chose not to implement it that way. See [DistanceJoint](distancejoint) if you +sponginess, so I chose not to implement it that way. See [DistanceJoint](DistanceJoint) if you want to dynamically control length. -## Hierarchy +## Extends -* [Joint](/api/classes/joint) +- [`Joint`](Joint) - ↳ **RopeJoint** +## Constructors -## Index +### new RopeJoint() -### Constructors +> **new RopeJoint**(`def`): [`RopeJoint`](RopeJoint) -* [constructor](/api/classes/ropejoint#constructor) +#### Parameters -### Properties +• **def**: [`RopeJointDef`](../interfaces/RopeJointDef) -* [style](/api/classes/ropejoint#style) -* [TYPE](/api/classes/ropejoint#static-type) +#### Returns -### Methods +[`RopeJoint`](RopeJoint) -* [getAnchorA](/api/classes/ropejoint#getanchora) -* [getAnchorB](/api/classes/ropejoint#getanchorb) -* [getBodyA](/api/classes/ropejoint#getbodya) -* [getBodyB](/api/classes/ropejoint#getbodyb) -* [getCollideConnected](/api/classes/ropejoint#getcollideconnected) -* [getLimitState](/api/classes/ropejoint#getlimitstate) -* [getLocalAnchorA](/api/classes/ropejoint#getlocalanchora) -* [getLocalAnchorB](/api/classes/ropejoint#getlocalanchorb) -* [getMaxLength](/api/classes/ropejoint#getmaxlength) -* [getNext](/api/classes/ropejoint#getnext) -* [getReactionForce](/api/classes/ropejoint#getreactionforce) -* [getReactionTorque](/api/classes/ropejoint#getreactiontorque) -* [getType](/api/classes/ropejoint#gettype) -* [getUserData](/api/classes/ropejoint#getuserdata) -* [initVelocityConstraints](/api/classes/ropejoint#initvelocityconstraints) -* [isActive](/api/classes/ropejoint#isactive) -* [setMaxLength](/api/classes/ropejoint#setmaxlength) -* [setUserData](/api/classes/ropejoint#setuserdata) -* [shiftOrigin](/api/classes/ropejoint#shiftorigin) -* [solvePositionConstraints](/api/classes/ropejoint#solvepositionconstraints) -* [solveVelocityConstraints](/api/classes/ropejoint#solvevelocityconstraints) +#### Overrides -## Constructors +[`Joint`](Joint).[`constructor`](Joint#constructors) -### constructor +### new RopeJoint() -\+ **new RopeJoint**(`def`: [RopeJointDef](/api/interfaces/ropejointdef)): *[RopeJoint](/api/classes/ropejoint)* +> **new RopeJoint**(`def`, `bodyA`, `bodyB`, `anchor`): [`RopeJoint`](RopeJoint) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +#### Parameters -**Parameters:** +• **def**: [`RopeJointOpt`](../interfaces/RopeJointOpt) -Name | Type | ------- | ------ | -`def` | [RopeJointDef](/api/interfaces/ropejointdef) | +• **bodyA**: [`Body`](Body) -**Returns:** *[RopeJoint](/api/classes/ropejoint)* +• **bodyB**: [`Body`](Body) -\+ **new RopeJoint**(`def`: [RopeJointOpt](/api/interfaces/ropejointopt), `bodyA`: [Body](/api/classes/body), `bodyB`: [Body](/api/classes/body), `anchor`: [Vec2Value](/api/interfaces/vec2value)): *[RopeJoint](/api/classes/ropejoint)* +• **anchor**: [`Vec2Value`](../interfaces/Vec2Value) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +#### Returns -**Parameters:** +[`RopeJoint`](RopeJoint) -Name | Type | ------- | ------ | -`def` | [RopeJointOpt](/api/interfaces/ropejointopt) | -`bodyA` | [Body](/api/classes/body) | -`bodyB` | [Body](/api/classes/body) | -`anchor` | [Vec2Value](/api/interfaces/vec2value) | +#### Overrides -**Returns:** *[RopeJoint](/api/classes/ropejoint)* +[`Joint`](Joint).[`constructor`](Joint#constructors) ## Properties -### style +### style -• **style**: *[Style](/api/interfaces/style)* - -*Inherited from [Joint](/api/classes/joint).[style](/api/classes/joint#style)* +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. -___ +#### Inherited from -### `Static` TYPE +[`Joint`](Joint).[`style`](Joint#style) -▪ **TYPE**: *"rope-joint"* = "rope-joint" as const +*** -## Methods +### TYPE + +> `static` **TYPE**: `"rope-joint"` -### getAnchorA +## Methods -▸ **getAnchorA**(): *[Vec2](/api/classes/vec2)* +### getAnchorA() -*Overrides [Joint](/api/classes/joint).[getAnchorA](/api/classes/joint#abstract-getanchora)* +> **getAnchorA**(): [`Vec2`](Vec2) Get the anchor point on bodyA in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) + +#### Overrides -___ +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) -### getAnchorB +*** -▸ **getAnchorB**(): *[Vec2](/api/classes/vec2)* +### getAnchorB() -*Overrides [Joint](/api/classes/joint).[getAnchorB](/api/classes/joint#abstract-getanchorb)* +> **getAnchorB**(): [`Vec2`](Vec2) Get the anchor point on bodyB in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getBodyA +#### Overrides -▸ **getBodyA**(): *[Body](/api/classes/body)* +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) -*Inherited from [Joint](/api/classes/joint).[getBodyA](/api/classes/joint#getbodya)* +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) Get the first body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) -___ +#### Inherited from -### getBodyB +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) -▸ **getBodyB**(): *[Body](/api/classes/body)* +*** -*Inherited from [Joint](/api/classes/joint).[getBodyB](/api/classes/joint#getbodyb)* +### getBodyB() + +> **getBodyB**(): [`Body`](Body) Get the second body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) + +#### Inherited from -___ +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) -### getCollideConnected +*** -▸ **getCollideConnected**(): *boolean* +### getCollideConnected() -*Inherited from [Joint](/api/classes/joint).[getCollideConnected](/api/classes/joint#getcollideconnected)* +> **getCollideConnected**(): `boolean` Get collide connected. Note: modifying the collide connect flag won't work correctly because the flag is only checked when fixture AABBs begin to overlap. -**Returns:** *boolean* +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) -___ +*** -### getLimitState +### getLimitState() -▸ **getLimitState**(): *number* +> **getLimitState**(): `number` -**Returns:** *number* +#### Returns -___ +`number` -### getLocalAnchorA +*** -▸ **getLocalAnchorA**(): *[Vec2](/api/classes/vec2)* +### getLocalAnchorA() + +> **getLocalAnchorA**(): [`Vec2`](Vec2) The local anchor point relative to bodyA's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getLocalAnchorB +### getLocalAnchorB() -▸ **getLocalAnchorB**(): *[Vec2](/api/classes/vec2)* +> **getLocalAnchorB**(): [`Vec2`](Vec2) The local anchor point relative to bodyB's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getMaxLength +### getMaxLength() -▸ **getMaxLength**(): *number* +> **getMaxLength**(): `number` Get the maximum length of the rope. -**Returns:** *number* +#### Returns -___ +`number` -### getNext +*** -▸ **getNext**(): *[Joint](/api/classes/joint)* +### getNext() -*Inherited from [Joint](/api/classes/joint).[getNext](/api/classes/joint#getnext)* +> **getNext**(): [`Joint`](Joint) Get the next joint the world joint list. -**Returns:** *[Joint](/api/classes/joint)* +#### Returns + +[`Joint`](Joint) + +#### Inherited from -___ +[`Joint`](Joint).[`getNext`](Joint#getnext) -### getReactionForce +*** -▸ **getReactionForce**(`inv_dt`: number): *[Vec2](/api/classes/vec2)* +### getReactionForce() -*Overrides [Joint](/api/classes/joint).[getReactionForce](/api/classes/joint#abstract-getreactionforce)* +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) Get the reaction force on bodyB at the joint anchor in Newtons. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`inv_dt` | number | +• **inv\_dt**: `number` -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getReactionTorque +#### Overrides -▸ **getReactionTorque**(`inv_dt`: number): *number* +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) -*Overrides [Joint](/api/classes/joint).[getReactionTorque](/api/classes/joint#abstract-getreactiontorque)* +*** + +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` Get the reaction torque on bodyB in N*m. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` -Name | Type | ------- | ------ | -`inv_dt` | number | +#### Returns -**Returns:** *number* +`number` -___ +#### Overrides -### getType +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) -▸ **getType**(): *string* +*** -*Inherited from [Joint](/api/classes/joint).[getType](/api/classes/joint#gettype)* +### getType() + +> **getType**(): `string` Get the type of the concrete joint. -**Returns:** *string* +#### Returns + +`string` + +#### Inherited from -___ +[`Joint`](Joint).[`getType`](Joint#gettype) -### getUserData +*** -▸ **getUserData**(): *unknown* +### getUserData() -*Inherited from [Joint](/api/classes/joint).[getUserData](/api/classes/joint#getuserdata)* +> **getUserData**(): `unknown` -**Returns:** *unknown* +#### Returns -___ +`unknown` -### initVelocityConstraints +#### Inherited from -▸ **initVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) -*Overrides [Joint](/api/classes/joint).[initVelocityConstraints](/api/classes/joint#abstract-initvelocityconstraints)* +*** -**Parameters:** +### initVelocityConstraints() -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +> **initVelocityConstraints**(`step`): `void` -**Returns:** *void* +#### Parameters -___ +• **step**: [`TimeStep`](TimeStep) -### isActive +#### Returns -▸ **isActive**(): *boolean* +`void` -*Inherited from [Joint](/api/classes/joint).[isActive](/api/classes/joint#isactive)* +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` Short-cut function to determine if either body is inactive. -**Returns:** *boolean* +#### Returns + +`boolean` -___ +#### Inherited from -### setMaxLength +[`Joint`](Joint).[`isActive`](Joint#isactive) -▸ **setMaxLength**(`length`: number): *void* +*** + +### setMaxLength() + +> **setMaxLength**(`length`): `void` Set the maximum length of the rope. -**Parameters:** +#### Parameters + +• **length**: `number` -Name | Type | ------- | ------ | -`length` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setUserData +### setUserData() -▸ **setUserData**(`data`: unknown): *void* +> **setUserData**(`data`): `void` -*Inherited from [Joint](/api/classes/joint).[setUserData](/api/classes/joint#setuserdata)* +#### Parameters -**Parameters:** +• **data**: `unknown` -Name | Type | ------- | ------ | -`data` | unknown | +#### Returns -**Returns:** *void* +`void` -___ +#### Inherited from -### shiftOrigin +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +*** -*Inherited from [Joint](/api/classes/joint).[shiftOrigin](/api/classes/joint#shiftorigin)* +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` Shift the origin for any points stored in world coordinates. -**Parameters:** +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns -Name | Type | ------- | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | +`void` -**Returns:** *void* +#### Inherited from -___ +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) -### solvePositionConstraints +*** -▸ **solvePositionConstraints**(`step`: [TimeStep](/api/classes/timestep)): *boolean* +### solvePositionConstraints() -*Overrides [Joint](/api/classes/joint).[solvePositionConstraints](/api/classes/joint#abstract-solvepositionconstraints)* +> **solvePositionConstraints**(`step`): `boolean` This returns true if the position errors are within tolerance. -**Parameters:** +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +*** -**Returns:** *boolean* +### solveVelocityConstraints() -___ +> **solveVelocityConstraints**(`step`): `void` -### solveVelocityConstraints +#### Parameters -▸ **solveVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +• **step**: [`TimeStep`](TimeStep) -*Overrides [Joint](/api/classes/joint).[solveVelocityConstraints](/api/classes/joint#abstract-solvevelocityconstraints)* +#### Returns -**Parameters:** +`void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Overrides -**Returns:** *void* +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/rot.md b/docs/pages/api/classes/rot.md index 9cccf00c..fe8574bf 100644 --- a/docs/pages/api/classes/rot.md +++ b/docs/pages/api/classes/rot.md @@ -1,348 +1,341 @@ - # Class: Rot -## Hierarchy - -* **Rot** - -## Index - -### Constructors - -* [constructor](/api/classes/rot#constructor) - -### Properties - -* [c](/api/classes/rot#c) -* [s](/api/classes/rot#s) - -### Methods - -* [getAngle](/api/classes/rot#getangle) -* [getXAxis](/api/classes/rot#getxaxis) -* [getYAxis](/api/classes/rot#getyaxis) -* [set](/api/classes/rot#set) -* [setAngle](/api/classes/rot#setangle) -* [setIdentity](/api/classes/rot#setidentity) -* [setRot](/api/classes/rot#setrot) -* [assert](/api/classes/rot#static-assert) -* [clone](/api/classes/rot#static-clone) -* [identity](/api/classes/rot#static-identity) -* [isValid](/api/classes/rot#static-isvalid) -* [mul](/api/classes/rot#static-mul) -* [mulRot](/api/classes/rot#static-mulrot) -* [mulSub](/api/classes/rot#static-mulsub) -* [mulT](/api/classes/rot#static-mult) -* [mulTRot](/api/classes/rot#static-multrot) -* [mulTVec2](/api/classes/rot#static-multvec2) -* [mulVec2](/api/classes/rot#static-mulvec2) +Rotation ## Constructors -### constructor +### new Rot() -\+ **new Rot**(`angle?`: number | [RotValue](/api/interfaces/rotvalue)): *[Rot](/api/classes/rot)* +> **new Rot**(`angle`?): [`Rot`](Rot) Initialize from an angle in radians. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`angle?` | number | [RotValue](/api/interfaces/rotvalue) | +• **angle?**: `number` \| [`RotValue`](../interfaces/RotValue) -**Returns:** *[Rot](/api/classes/rot)* +#### Returns + +[`Rot`](Rot) ## Properties -### c +### c -• **c**: *number* +> **c**: `number` cos(angle) -___ +*** -### s +### s -• **s**: *number* +> **s**: `number` sin(angle) ## Methods -### getAngle +### getAngle() -▸ **getAngle**(): *number* +> **getAngle**(): `number` Get the angle in radians. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getXAxis +### getXAxis() -▸ **getXAxis**(): *[Vec2](/api/classes/vec2)* +> **getXAxis**(): [`Vec2`](Vec2) Get the x-axis. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getYAxis +*** -▸ **getYAxis**(): *[Vec2](/api/classes/vec2)* +### getYAxis() + +> **getYAxis**(): [`Vec2`](Vec2) Get the y-axis. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) + +*** -___ +### set() -### set +> **set**(`angle`): `void` -▸ **set**(`angle`: number | [RotValue](/api/interfaces/rotvalue)): *void* +#### Parameters -**Parameters:** +• **angle**: `number` \| [`RotValue`](../interfaces/RotValue) -Name | Type | ------- | ------ | -`angle` | number | [RotValue](/api/interfaces/rotvalue) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setAngle +### setAngle() -▸ **setAngle**(`angle`: number): *void* +> **setAngle**(`angle`): `void` Set using an angle in radians. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`angle` | number | +• **angle**: `number` -**Returns:** *void* +#### Returns -___ +`void` -### setIdentity +*** -▸ **setIdentity**(): *void* +### setIdentity() + +> **setIdentity**(): `void` Set to the identity rotation. -**Returns:** *void* +#### Returns + +`void` + +*** + +### setRot() + +> **setRot**(`angle`): `void` + +#### Parameters + +• **angle**: [`RotValue`](../interfaces/RotValue) + +#### Returns -___ +`void` -### setRot +*** -▸ **setRot**(`angle`: [RotValue](/api/interfaces/rotvalue)): *void* +### assert() -**Parameters:** +> `static` **assert**(`o`): `void` -Name | Type | ------- | ------ | -`angle` | [RotValue](/api/interfaces/rotvalue) | +#### Parameters -**Returns:** *void* +• **o**: `any` -___ +#### Returns -### `Static` assert +`void` -▸ **assert**(`o`: any): *void* +*** -**Parameters:** +### clone() -Name | Type | ------- | ------ | -`o` | any | +> `static` **clone**(`rot`): [`Rot`](Rot) -**Returns:** *void* +#### Parameters -___ +• **rot**: [`RotValue`](../interfaces/RotValue) -### `Static` clone +#### Returns -▸ **clone**(`rot`: [RotValue](/api/interfaces/rotvalue)): *[Rot](/api/classes/rot)* +[`Rot`](Rot) -**Parameters:** +*** -Name | Type | ------- | ------ | -`rot` | [RotValue](/api/interfaces/rotvalue) | +### identity() -**Returns:** *[Rot](/api/classes/rot)* +> `static` **identity**(): [`Rot`](Rot) -___ +#### Returns -### `Static` identity +[`Rot`](Rot) -▸ **identity**(): *[Rot](/api/classes/rot)* +*** -**Returns:** *[Rot](/api/classes/rot)* +### isValid() -___ +> `static` **isValid**(`obj`): `boolean` -### `Static` isValid +#### Parameters -▸ **isValid**(`obj`: any): *boolean* +• **obj**: `any` -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`obj` | any | +`boolean` -**Returns:** *boolean* +*** -___ +### mul() -### `Static` mul +#### mul(rot, m) -▸ **mul**(`rot`: [RotValue](/api/interfaces/rotvalue), `m`: [RotValue](/api/interfaces/rotvalue)): *[Rot](/api/classes/rot)* +> `static` **mul**(`rot`, `m`): [`Rot`](Rot) Multiply two rotations: q * r -**Parameters:** +##### Parameters -Name | Type | ------- | ------ | -`rot` | [RotValue](/api/interfaces/rotvalue) | -`m` | [RotValue](/api/interfaces/rotvalue) | +• **rot**: [`RotValue`](../interfaces/RotValue) -**Returns:** *[Rot](/api/classes/rot)* +• **m**: [`RotValue`](../interfaces/RotValue) -▸ **mul**(`rot`: [RotValue](/api/interfaces/rotvalue), `m`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +##### Returns + +[`Rot`](Rot) + +#### mul(rot, m) + +> `static` **mul**(`rot`, `m`): [`Vec2`](Vec2) Rotate a vector -**Parameters:** +##### Parameters -Name | Type | ------- | ------ | -`rot` | [RotValue](/api/interfaces/rotvalue) | -`m` | [Vec2Value](/api/interfaces/vec2value) | +• **rot**: [`RotValue`](../interfaces/RotValue) -**Returns:** *[Vec2](/api/classes/vec2)* +• **m**: [`Vec2Value`](../interfaces/Vec2Value) -___ +##### Returns -### `Static` mulRot +[`Vec2`](Vec2) -▸ **mulRot**(`rot`: [RotValue](/api/interfaces/rotvalue), `m`: [RotValue](/api/interfaces/rotvalue)): *[Rot](/api/classes/rot)* +*** + +### mulRot() + +> `static` **mulRot**(`rot`, `m`): [`Rot`](Rot) Multiply two rotations: q * r -**Parameters:** +#### Parameters + +• **rot**: [`RotValue`](../interfaces/RotValue) + +• **m**: [`RotValue`](../interfaces/RotValue) + +#### Returns + +[`Rot`](Rot) + +*** + +### mulSub() -Name | Type | ------- | ------ | -`rot` | [RotValue](/api/interfaces/rotvalue) | -`m` | [RotValue](/api/interfaces/rotvalue) | +> `static` **mulSub**(`rot`, `v`, `w`): [`Vec2`](Vec2) -**Returns:** *[Rot](/api/classes/rot)* +#### Parameters -___ +• **rot**: [`RotValue`](../interfaces/RotValue) -### `Static` mulSub +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **mulSub**(`rot`: [RotValue](/api/interfaces/rotvalue), `v`: [Vec2Value](/api/interfaces/vec2value), `w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`rot` | [RotValue](/api/interfaces/rotvalue) | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | [Vec2Value](/api/interfaces/vec2value) | +[`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +*** -___ +### mulT() -### `Static` mulT +#### mulT(rot, m) -▸ **mulT**(`rot`: [RotValue](/api/interfaces/rotvalue), `m`: [RotValue](/api/interfaces/rotvalue)): *[Rot](/api/classes/rot)* +> `static` **mulT**(`rot`, `m`): [`Rot`](Rot) Transpose multiply two rotations: qT * r -**Parameters:** +##### Parameters -Name | Type | ------- | ------ | -`rot` | [RotValue](/api/interfaces/rotvalue) | -`m` | [RotValue](/api/interfaces/rotvalue) | +• **rot**: [`RotValue`](../interfaces/RotValue) -**Returns:** *[Rot](/api/classes/rot)* +• **m**: [`RotValue`](../interfaces/RotValue) -▸ **mulT**(`rot`: [RotValue](/api/interfaces/rotvalue), `m`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +##### Returns + +[`Rot`](Rot) + +#### mulT(rot, m) + +> `static` **mulT**(`rot`, `m`): [`Vec2`](Vec2) Inverse rotate a vector -**Parameters:** +##### Parameters -Name | Type | ------- | ------ | -`rot` | [RotValue](/api/interfaces/rotvalue) | -`m` | [Vec2Value](/api/interfaces/vec2value) | +• **rot**: [`RotValue`](../interfaces/RotValue) -**Returns:** *[Vec2](/api/classes/vec2)* +• **m**: [`Vec2Value`](../interfaces/Vec2Value) -___ +##### Returns -### `Static` mulTRot +[`Vec2`](Vec2) -▸ **mulTRot**(`rot`: [RotValue](/api/interfaces/rotvalue), `m`: [RotValue](/api/interfaces/rotvalue)): *[Rot](/api/classes/rot)* +*** + +### mulTRot() + +> `static` **mulTRot**(`rot`, `m`): [`Rot`](Rot) Transpose multiply two rotations: qT * r -**Parameters:** +#### Parameters + +• **rot**: [`RotValue`](../interfaces/RotValue) -Name | Type | ------- | ------ | -`rot` | [RotValue](/api/interfaces/rotvalue) | -`m` | [RotValue](/api/interfaces/rotvalue) | +• **m**: [`RotValue`](../interfaces/RotValue) -**Returns:** *[Rot](/api/classes/rot)* +#### Returns -___ +[`Rot`](Rot) -### `Static` mulTVec2 +*** -▸ **mulTVec2**(`rot`: [RotValue](/api/interfaces/rotvalue), `m`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +### mulTVec2() + +> `static` **mulTVec2**(`rot`, `m`): [`Vec2`](Vec2) Inverse rotate a vector -**Parameters:** +#### Parameters + +• **rot**: [`RotValue`](../interfaces/RotValue) + +• **m**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`rot` | [RotValue](/api/interfaces/rotvalue) | -`m` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) -___ +*** -### `Static` mulVec2 +### mulVec2() -▸ **mulVec2**(`rot`: [RotValue](/api/interfaces/rotvalue), `m`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> `static` **mulVec2**(`rot`, `m`): [`Vec2`](Vec2) Rotate a vector -**Parameters:** +#### Parameters + +• **rot**: [`RotValue`](../interfaces/RotValue) + +• **m**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`rot` | [RotValue](/api/interfaces/rotvalue) | -`m` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) diff --git a/docs/pages/api/classes/separationfunction.md b/docs/pages/api/classes/separationfunction.md deleted file mode 100644 index b5f09e82..00000000 --- a/docs/pages/api/classes/separationfunction.md +++ /dev/null @@ -1,152 +0,0 @@ - -# Class: SeparationFunction - -## Hierarchy - -* **SeparationFunction** - -## Index - -### Properties - -* [indexA](/api/classes/separationfunction#indexa) -* [indexB](/api/classes/separationfunction#indexb) -* [m_axis](/api/classes/separationfunction#m_axis) -* [m_localPoint](/api/classes/separationfunction#m_localpoint) -* [m_proxyA](/api/classes/separationfunction#m_proxya) -* [m_proxyB](/api/classes/separationfunction#m_proxyb) -* [m_sweepA](/api/classes/separationfunction#m_sweepa) -* [m_sweepB](/api/classes/separationfunction#m_sweepb) -* [m_type](/api/classes/separationfunction#m_type) - -### Methods - -* [compute](/api/classes/separationfunction#compute) -* [evaluate](/api/classes/separationfunction#evaluate) -* [findMinSeparation](/api/classes/separationfunction#findminseparation) -* [initialize](/api/classes/separationfunction#initialize) -* [recycle](/api/classes/separationfunction#recycle) - -## Properties - -### indexA - -• **indexA**: *number* = -1 - -___ - -### indexB - -• **indexB**: *number* = -1 - -___ - -### m_axis - -• **m_axis**: *[Vec2Value](/api/interfaces/vec2value)* = matrix.vec2(0, 0) - -___ - -### m_localPoint - -• **m_localPoint**: *[Vec2Value](/api/interfaces/vec2value)* = matrix.vec2(0, 0) - -___ - -### m_proxyA - -• **m_proxyA**: *[DistanceProxy](/api/classes/distanceproxy)* = null - -___ - -### m_proxyB - -• **m_proxyB**: *[DistanceProxy](/api/classes/distanceproxy)* = null - -___ - -### m_sweepA - -• **m_sweepA**: *[Sweep](/api/classes/sweep)* = null - -___ - -### m_sweepB - -• **m_sweepB**: *[Sweep](/api/classes/sweep)* = null - -___ - -### m_type - -• **m_type**: *[SeparationFunctionType](/api/enums/separationfunctiontype)* = SeparationFunctionType.e_unset - -## Methods - -### compute - -▸ **compute**(`find`: boolean, `t`: number): *number* - -**Parameters:** - -Name | Type | ------- | ------ | -`find` | boolean | -`t` | number | - -**Returns:** *number* - -___ - -### evaluate - -▸ **evaluate**(`t`: number): *number* - -**Parameters:** - -Name | Type | ------- | ------ | -`t` | number | - -**Returns:** *number* - -___ - -### findMinSeparation - -▸ **findMinSeparation**(`t`: number): *number* - -**Parameters:** - -Name | Type | ------- | ------ | -`t` | number | - -**Returns:** *number* - -___ - -### initialize - -▸ **initialize**(`cache`: [SimplexCache](/api/classes/simplexcache), `proxyA`: [DistanceProxy](/api/classes/distanceproxy), `sweepA`: [Sweep](/api/classes/sweep), `proxyB`: [DistanceProxy](/api/classes/distanceproxy), `sweepB`: [Sweep](/api/classes/sweep), `t1`: number): *number* - -**Parameters:** - -Name | Type | ------- | ------ | -`cache` | [SimplexCache](/api/classes/simplexcache) | -`proxyA` | [DistanceProxy](/api/classes/distanceproxy) | -`sweepA` | [Sweep](/api/classes/sweep) | -`proxyB` | [DistanceProxy](/api/classes/distanceproxy) | -`sweepB` | [Sweep](/api/classes/sweep) | -`t1` | number | - -**Returns:** *number* - -___ - -### recycle - -▸ **recycle**(): *void* - -**Returns:** *void* diff --git a/docs/pages/api/classes/settings.md b/docs/pages/api/classes/settings.md index 053a48f9..123e356f 100644 --- a/docs/pages/api/classes/settings.md +++ b/docs/pages/api/classes/settings.md @@ -1,235 +1,214 @@ - # Class: Settings Tuning constants based on meters-kilograms-seconds (MKS) units. Some tolerances are absolute and some are relative. Absolute tolerances use MKS units. -## Hierarchy - -* **Settings** - -## Index +## Constructors -### Properties +### new Settings() -* [aabbExtension](/api/classes/settings#static-aabbextension) -* [aabbMultiplier](/api/classes/settings#static-aabbmultiplier) -* [angularSleepTolerance](/api/classes/settings#static-angularsleeptolerance) -* [angularSlop](/api/classes/settings#static-angularslop) -* [baumgarte](/api/classes/settings#static-baumgarte) -* [lengthUnitsPerMeter](/api/classes/settings#static-lengthunitspermeter) -* [linearSleepTolerance](/api/classes/settings#static-linearsleeptolerance) -* [linearSlop](/api/classes/settings#static-linearslop) -* [maxAngularCorrection](/api/classes/settings#static-maxangularcorrection) -* [maxDistanceIterations](/api/classes/settings#static-maxdistanceiterations) -* [maxLinearCorrection](/api/classes/settings#static-maxlinearcorrection) -* [maxManifoldPoints](/api/classes/settings#static-maxmanifoldpoints) -* [maxPolygonVertices](/api/classes/settings#static-maxpolygonvertices) -* [maxRotation](/api/classes/settings#static-maxrotation) -* [maxSubSteps](/api/classes/settings#static-maxsubsteps) -* [maxTOIContacts](/api/classes/settings#static-maxtoicontacts) -* [maxTOIIterations](/api/classes/settings#static-maxtoiiterations) -* [maxTranslation](/api/classes/settings#static-maxtranslation) -* [timeToSleep](/api/classes/settings#static-timetosleep) -* [toiBaugarte](/api/classes/settings#static-toibaugarte) -* [velocityThreshold](/api/classes/settings#static-velocitythreshold) +> **new Settings**(): [`Settings`](Settings) -### Accessors +#### Returns -* [polygonRadius](/api/classes/settings#static-polygonradius) +[`Settings`](Settings) ## Properties -### `Static` aabbExtension +### aabbExtension -▪ **aabbExtension**: *number* = 0.1 +> `static` **aabbExtension**: `number` = `0.1` This is used to fatten AABBs in the dynamic tree. This allows proxies to move by a small amount without triggering a tree adjustment. This is in meters. -___ +*** -### `Static` aabbMultiplier +### aabbMultiplier -▪ **aabbMultiplier**: *number* = 2 +> `static` **aabbMultiplier**: `number` = `2.0` This is used to fatten AABBs in the dynamic tree. This is used to predict the future position based on the current displacement. This is a dimensionless multiplier. -___ +*** -### `Static` angularSleepTolerance +### angularSleepTolerance -▪ **angularSleepTolerance**: *number* = (2.0 / 180.0 * math_PI) +> `static` **angularSleepTolerance**: `number` A body cannot sleep if its angular velocity is above this tolerance. -___ +*** -### `Static` angularSlop +### angularSlop -▪ **angularSlop**: *number* = (2.0 / 180.0 * math_PI) +> `static` **angularSlop**: `number` A small angle used as a collision and constraint tolerance. Usually it is chosen to be numerically significant, but visually insignificant. -___ +*** -### `Static` baumgarte +### baumgarte -▪ **baumgarte**: *number* = 0.2 +> `static` **baumgarte**: `number` = `0.2` This scale factor controls how fast overlap is resolved. Ideally this would be 1 so that overlap is removed in one time step. However using values close to 1 often lead to overshoot. -___ +*** -### `Static` lengthUnitsPerMeter +### lengthUnitsPerMeter -▪ **lengthUnitsPerMeter**: *number* = 1 +> `static` **lengthUnitsPerMeter**: `number` = `1.0` You can use this to change the length scale used by your game. For example for inches you could use 39.4. -___ +*** -### `Static` linearSleepTolerance +### linearSleepTolerance -▪ **linearSleepTolerance**: *number* = 0.01 +> `static` **linearSleepTolerance**: `number` = `0.01` A body cannot sleep if its linear velocity is above this tolerance. -___ +*** -### `Static` linearSlop +### linearSlop -▪ **linearSlop**: *number* = 0.005 +> `static` **linearSlop**: `number` = `0.005` A small length used as a collision and constraint tolerance. Usually it is chosen to be numerically significant, but visually insignificant. -___ +*** -### `Static` maxAngularCorrection +### maxAngularCorrection -▪ **maxAngularCorrection**: *number* = (8.0 / 180.0 * math_PI) +> `static` **maxAngularCorrection**: `number` The maximum angular position correction used when solving constraints. This helps to prevent overshoot. -___ +*** -### `Static` maxDistanceIterations +### maxDistanceIterations -▪ **maxDistanceIterations**: *number* = 20 +> `static` **maxDistanceIterations**: `number` = `20` Maximum iterations to find Distance. -___ +*** -### `Static` maxLinearCorrection +### maxLinearCorrection -▪ **maxLinearCorrection**: *number* = 0.2 +> `static` **maxLinearCorrection**: `number` = `0.2` The maximum linear position correction used when solving constraints. This helps to prevent overshoot. -___ +*** -### `Static` maxManifoldPoints +### maxManifoldPoints -▪ **maxManifoldPoints**: *number* = 2 +> `static` **maxManifoldPoints**: `number` = `2` The maximum number of contact points between two convex shapes. Do not change this value. -___ +*** -### `Static` maxPolygonVertices +### maxPolygonVertices -▪ **maxPolygonVertices**: *number* = 12 +> `static` **maxPolygonVertices**: `number` = `12` The maximum number of vertices on a convex polygon. You cannot increase this too much because BlockAllocator has a maximum object size. -___ +*** -### `Static` maxRotation +### maxRotation -▪ **maxRotation**: *number* = (0.5 * math_PI) +> `static` **maxRotation**: `number` The maximum angular velocity of a body. This limit is very large and is used to prevent numerical problems. You shouldn't need to adjust Settings. -___ +*** -### `Static` maxSubSteps +### maxSubSteps -▪ **maxSubSteps**: *number* = 8 +> `static` **maxSubSteps**: `number` = `8` Maximum number of sub-steps per contact in continuous physics simulation. -___ +*** -### `Static` maxTOIContacts +### maxTOIContacts -▪ **maxTOIContacts**: *number* = 32 +> `static` **maxTOIContacts**: `number` = `32` Maximum number of contacts to be handled to solve a TOI impact. -___ +*** -### `Static` maxTOIIterations +### maxTOIIterations -▪ **maxTOIIterations**: *number* = 20 +> `static` **maxTOIIterations**: `number` = `20` Maximum iterations to solve a TOI. -___ +*** -### `Static` maxTranslation +### maxTranslation -▪ **maxTranslation**: *number* = 2 +> `static` **maxTranslation**: `number` = `2.0` The maximum linear velocity of a body. This limit is very large and is used to prevent numerical problems. You shouldn't need to adjust Settings. -___ +*** -### `Static` timeToSleep +### timeToSleep -▪ **timeToSleep**: *number* = 0.5 +> `static` **timeToSleep**: `number` = `0.5` The time that a body must be still before it will go to sleep. -___ +*** -### `Static` toiBaugarte +### toiBaugarte -▪ **toiBaugarte**: *number* = 0.75 +> `static` **toiBaugarte**: `number` = `0.75` -___ +*** -### `Static` velocityThreshold +### velocityThreshold -▪ **velocityThreshold**: *number* = 1 +> `static` **velocityThreshold**: `number` = `1.0` A velocity threshold for elastic collisions. Any collision with a relative linear velocity below this threshold will be treated as inelastic. ## Accessors -### `Static` polygonRadius +### polygonRadius -• **get polygonRadius**(): *number* +#### Get Signature + +> **get** `static` **polygonRadius**(): `number` The radius of the polygon/edge shape skin. This should not be modified. Making this smaller means polygons will have an insufficient buffer for continuous collision. Making it larger may create artifacts for vertex collision. -**Returns:** *number* +##### Returns + +`number` diff --git a/docs/pages/api/classes/shape.md b/docs/pages/api/classes/shape.md index 96debad3..654d9bdf 100644 --- a/docs/pages/api/classes/shape.md +++ b/docs/pages/api/classes/shape.md @@ -1,178 +1,200 @@ - -# Class: Shape +# Class: `abstract` Shape A shape is used for collision detection. You can create a shape however you like. Shapes used for simulation in World are created automatically when a Fixture is created. Shapes may encapsulate one or more child shapes. -## Hierarchy - -* **Shape** - - ↳ [PolygonShape](/api/classes/polygonshape) - - ↳ [EdgeShape](/api/classes/edgeshape) - - ↳ [ChainShape](/api/classes/chainshape) +## Extended by - ↳ [CircleShape](/api/classes/circleshape) +- [`CircleShape`](CircleShape) +- [`EdgeShape`](EdgeShape) +- [`PolygonShape`](PolygonShape) +- [`ChainShape`](ChainShape) -## Index +## Constructors -### Properties +### new Shape() -* [style](/api/classes/shape#style) +> **new Shape**(): [`Shape`](Shape) -### Methods +#### Returns -* [computeAABB](/api/classes/shape#abstract-computeaabb) -* [computeDistanceProxy](/api/classes/shape#abstract-computedistanceproxy) -* [computeMass](/api/classes/shape#abstract-computemass) -* [getChildCount](/api/classes/shape#abstract-getchildcount) -* [getRadius](/api/classes/shape#abstract-getradius) -* [getType](/api/classes/shape#abstract-gettype) -* [rayCast](/api/classes/shape#abstract-raycast) -* [testPoint](/api/classes/shape#abstract-testpoint) -* [isValid](/api/classes/shape#static-isvalid) +[`Shape`](Shape) ## Properties -### style +### style -• **style**: *[Style](/api/interfaces/style)* +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. ## Methods -### `Abstract` computeAABB +### computeAABB() -▸ **computeAABB**(`aabb`: [AABBValue](/api/interfaces/aabbvalue), `xf`: [TransformValue](/api/globals#transformvalue), `childIndex`: number): *void* +> `abstract` **computeAABB**(`aabb`, `xf`, `childIndex`): `void` Given a transform, compute the associated axis aligned bounding box for a child shape. -**Parameters:** +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +Returns the axis aligned box. + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The world transform of the shape. -Name | Type | Description | ------- | ------ | ------ | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | Returns the axis aligned box. | -`xf` | [TransformValue](/api/globals#transformvalue) | The world transform of the shape. | -`childIndex` | number | The child shape | +• **childIndex**: `number` -**Returns:** *void* +The child shape -___ +#### Returns -### `Abstract` computeDistanceProxy +`void` -▸ **computeDistanceProxy**(`proxy`: [DistanceProxy](/api/classes/distanceproxy), `childIndex`: number): *void* +*** -**Parameters:** +### computeDistanceProxy() -Name | Type | ------- | ------ | -`proxy` | [DistanceProxy](/api/classes/distanceproxy) | -`childIndex` | number | +> `abstract` **computeDistanceProxy**(`proxy`, `childIndex`): `void` -**Returns:** *void* +#### Parameters -___ +• **proxy**: [`DistanceProxy`](DistanceProxy) -### `Abstract` computeMass +• **childIndex**: `number` -▸ **computeMass**(`massData`: [MassData](/api/interfaces/massdata), `density?`: number): *void* +#### Returns + +`void` + +*** + +### computeMass() + +> `abstract` **computeMass**(`massData`, `density`?): `void` Compute the mass properties of this shape using its dimensions and density. The inertia tensor is computed about the local origin. -**Parameters:** +#### Parameters + +• **massData**: [`MassData`](../interfaces/MassData) + +Returns the mass data for this shape. + +• **density?**: `number` + +The density in kilograms per meter squared. -Name | Type | Description | ------- | ------ | ------ | -`massData` | [MassData](/api/interfaces/massdata) | Returns the mass data for this shape. | -`density?` | number | The density in kilograms per meter squared. | +#### Returns -**Returns:** *void* +`void` -___ +*** -### `Abstract` getChildCount +### getChildCount() -▸ **getChildCount**(): *number* +> `abstract` **getChildCount**(): `number` Get the number of child primitives. -**Returns:** *number* +#### Returns -___ +`number` -### `Abstract` getRadius +*** -▸ **getRadius**(): *number* +### getRadius() -**Returns:** *number* +> `abstract` **getRadius**(): `number` -___ +#### Returns -### `Abstract` getType +`number` -▸ **getType**(): *[ShapeType](/api/globals#shapetype)* +*** + +### getType() + +> `abstract` **getType**(): [`ShapeType`](../type-aliases/ShapeType) Get the type of this shape. You can use this to down cast to the concrete shape. -**Returns:** *[ShapeType](/api/globals#shapetype)* +#### Returns + +[`ShapeType`](../type-aliases/ShapeType) the shape type. -___ +*** -### `Abstract` rayCast +### rayCast() -▸ **rayCast**(`output`: [RayCastOutput](/api/interfaces/raycastoutput), `input`: [RayCastInput](/api/interfaces/raycastinput), `xf`: [Transform](/api/classes/transform), `childIndex`: number): *boolean* +> `abstract` **rayCast**(`output`, `input`, `xf`, `childIndex`): `boolean` Cast a ray against a child shape. -**Parameters:** +#### Parameters + +• **output**: [`RayCastOutput`](../interfaces/RayCastOutput) + +The ray-cast results. + +• **input**: [`RayCastInput`](../interfaces/RayCastInput) + +The ray-cast input parameters. + +• **xf**: [`Transform`](Transform) -Name | Type | Description | ------- | ------ | ------ | -`output` | [RayCastOutput](/api/interfaces/raycastoutput) | The ray-cast results. | -`input` | [RayCastInput](/api/interfaces/raycastinput) | The ray-cast input parameters. | -`xf` | [Transform](/api/classes/transform) | The transform to be applied to the shape. | -`childIndex` | number | The child shape index | +The transform to be applied to the shape. -**Returns:** *boolean* +• **childIndex**: `number` -___ +The child shape index -### `Abstract` testPoint +#### Returns -▸ **testPoint**(`xf`: [TransformValue](/api/globals#transformvalue), `p`: [Vec2Value](/api/interfaces/vec2value)): *boolean* +`boolean` + +*** + +### testPoint() + +> `abstract` **testPoint**(`xf`, `p`): `boolean` Test a point for containment in this shape. This only works for convex shapes. -**Parameters:** +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +The shape world transform. + +• **p**: [`Vec2Value`](../interfaces/Vec2Value) + +A point in world coordinates. + +#### Returns -Name | Type | Description | ------- | ------ | ------ | -`xf` | [TransformValue](/api/globals#transformvalue) | The shape world transform. | -`p` | [Vec2Value](/api/interfaces/vec2value) | A point in world coordinates. | +`boolean` -**Returns:** *boolean* +*** -___ +### isValid() -### `Static` isValid +> `static` **isValid**(`obj`): `boolean` -▸ **isValid**(`obj`: any): *boolean* +#### Parameters -**Parameters:** +• **obj**: `any` -Name | Type | ------- | ------ | -`obj` | any | +#### Returns -**Returns:** *boolean* +`boolean` diff --git a/docs/pages/api/classes/shapecastinput.md b/docs/pages/api/classes/shapecastinput.md index 8a5797e5..75c4db34 100644 --- a/docs/pages/api/classes/shapecastinput.md +++ b/docs/pages/api/classes/shapecastinput.md @@ -1,60 +1,53 @@ - # Class: ShapeCastInput Input parameters for ShapeCast -## Hierarchy - -* **ShapeCastInput** +## Constructors -## Index +### new ShapeCastInput() -### Properties +> **new ShapeCastInput**(): [`ShapeCastInput`](ShapeCastInput) -* [proxyA](/api/classes/shapecastinput#readonly-proxya) -* [proxyB](/api/classes/shapecastinput#readonly-proxyb) -* [transformA](/api/classes/shapecastinput#readonly-transforma) -* [transformB](/api/classes/shapecastinput#readonly-transformb) -* [translationB](/api/classes/shapecastinput#readonly-translationb) +#### Returns -### Methods - -* [recycle](/api/classes/shapecastinput#recycle) +[`ShapeCastInput`](ShapeCastInput) ## Properties -### `Readonly` proxyA +### proxyA -• **proxyA**: *[DistanceProxy](/api/classes/distanceproxy)‹›* = new DistanceProxy() +> `readonly` **proxyA**: [`DistanceProxy`](DistanceProxy) -___ +*** -### `Readonly` proxyB +### proxyB -• **proxyB**: *[DistanceProxy](/api/classes/distanceproxy)‹›* = new DistanceProxy() +> `readonly` **proxyB**: [`DistanceProxy`](DistanceProxy) -___ +*** -### `Readonly` transformA +### transformA -• **transformA**: *[Transform](/api/classes/transform)‹›* = Transform.identity() +> `readonly` **transformA**: [`Transform`](Transform) -___ +*** -### `Readonly` transformB +### transformB -• **transformB**: *[Transform](/api/classes/transform)‹›* = Transform.identity() +> `readonly` **transformB**: [`Transform`](Transform) -___ +*** -### `Readonly` translationB +### translationB -• **translationB**: *[Vec2](/api/classes/vec2)‹›* = Vec2.zero() +> `readonly` **translationB**: [`Vec2`](Vec2) ## Methods -### recycle +### recycle() + +> **recycle**(): `void` -▸ **recycle**(): *void* +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/shapecastoutput.md b/docs/pages/api/classes/shapecastoutput.md index ebce1105..5b86b9cc 100644 --- a/docs/pages/api/classes/shapecastoutput.md +++ b/docs/pages/api/classes/shapecastoutput.md @@ -1,41 +1,37 @@ - # Class: ShapeCastOutput Output results for b2ShapeCast -## Hierarchy +## Constructors -* **ShapeCastOutput** +### new ShapeCastOutput() -## Index +> **new ShapeCastOutput**(): [`ShapeCastOutput`](ShapeCastOutput) -### Properties +#### Returns -* [iterations](/api/classes/shapecastoutput#iterations) -* [lambda](/api/classes/shapecastoutput#lambda) -* [normal](/api/classes/shapecastoutput#normal) -* [point](/api/classes/shapecastoutput#point) +[`ShapeCastOutput`](ShapeCastOutput) ## Properties -### iterations +### iterations -• **iterations**: *number* = 0 +> **iterations**: `number` = `0` -___ +*** -### lambda +### lambda -• **lambda**: *number* = 1 +> **lambda**: `number` = `1.0` -___ +*** -### normal +### normal -• **normal**: *[Vec2](/api/classes/vec2)* = Vec2.zero() +> **normal**: [`Vec2`](Vec2) -___ +*** -### point +### point -• **point**: *[Vec2](/api/classes/vec2)* = Vec2.zero() +> **point**: [`Vec2`](Vec2) diff --git a/docs/pages/api/classes/simplex.md b/docs/pages/api/classes/simplex.md deleted file mode 100644 index 906fa5b6..00000000 --- a/docs/pages/api/classes/simplex.md +++ /dev/null @@ -1,162 +0,0 @@ - -# Class: Simplex - -## Hierarchy - -* **Simplex** - -## Index - -### Properties - -* [m_count](/api/classes/simplex#m_count) -* [m_v](/api/classes/simplex#m_v) -* [m_v1](/api/classes/simplex#m_v1) -* [m_v2](/api/classes/simplex#m_v2) -* [m_v3](/api/classes/simplex#m_v3) - -### Methods - -* [getClosestPoint](/api/classes/simplex#getclosestpoint) -* [getMetric](/api/classes/simplex#getmetric) -* [getSearchDirection](/api/classes/simplex#getsearchdirection) -* [getWitnessPoints](/api/classes/simplex#getwitnesspoints) -* [readCache](/api/classes/simplex#readcache) -* [recycle](/api/classes/simplex#recycle) -* [solve](/api/classes/simplex#solve) -* [solve2](/api/classes/simplex#solve2) -* [solve3](/api/classes/simplex#solve3) -* [writeCache](/api/classes/simplex#writecache) - -## Properties - -### m_count - -• **m_count**: *number* - -___ - -### m_v - -• **m_v**: *[SimplexVertex](/api/classes/simplexvertex)‹›[]* = [this.m_v1, this.m_v2, this.m_v3] - -___ - -### m_v1 - -• **m_v1**: *[SimplexVertex](/api/classes/simplexvertex)‹›* = new SimplexVertex() - -___ - -### m_v2 - -• **m_v2**: *[SimplexVertex](/api/classes/simplexvertex)‹›* = new SimplexVertex() - -___ - -### m_v3 - -• **m_v3**: *[SimplexVertex](/api/classes/simplexvertex)‹›* = new SimplexVertex() - -## Methods - -### getClosestPoint - -▸ **getClosestPoint**(): *[Vec2Value](/api/interfaces/vec2value)* - -**Returns:** *[Vec2Value](/api/interfaces/vec2value)* - -___ - -### getMetric - -▸ **getMetric**(): *number* - -**Returns:** *number* - -___ - -### getSearchDirection - -▸ **getSearchDirection**(): *[Vec2Value](/api/interfaces/vec2value)* - -**Returns:** *[Vec2Value](/api/interfaces/vec2value)* - -___ - -### getWitnessPoints - -▸ **getWitnessPoints**(`pA`: [Vec2Value](/api/interfaces/vec2value), `pB`: [Vec2Value](/api/interfaces/vec2value)): *void* - -**Parameters:** - -Name | Type | ------- | ------ | -`pA` | [Vec2Value](/api/interfaces/vec2value) | -`pB` | [Vec2Value](/api/interfaces/vec2value) | - -**Returns:** *void* - -___ - -### readCache - -▸ **readCache**(`cache`: [SimplexCache](/api/classes/simplexcache), `proxyA`: [DistanceProxy](/api/classes/distanceproxy), `transformA`: [TransformValue](/api/globals#transformvalue), `proxyB`: [DistanceProxy](/api/classes/distanceproxy), `transformB`: [TransformValue](/api/globals#transformvalue)): *void* - -**Parameters:** - -Name | Type | ------- | ------ | -`cache` | [SimplexCache](/api/classes/simplexcache) | -`proxyA` | [DistanceProxy](/api/classes/distanceproxy) | -`transformA` | [TransformValue](/api/globals#transformvalue) | -`proxyB` | [DistanceProxy](/api/classes/distanceproxy) | -`transformB` | [TransformValue](/api/globals#transformvalue) | - -**Returns:** *void* - -___ - -### recycle - -▸ **recycle**(): *void* - -**Returns:** *void* - -___ - -### solve - -▸ **solve**(): *void* - -**Returns:** *void* - -___ - -### solve2 - -▸ **solve2**(): *void* - -**Returns:** *void* - -___ - -### solve3 - -▸ **solve3**(): *void* - -**Returns:** *void* - -___ - -### writeCache - -▸ **writeCache**(`cache`: [SimplexCache](/api/classes/simplexcache)): *void* - -**Parameters:** - -Name | Type | ------- | ------ | -`cache` | [SimplexCache](/api/classes/simplexcache) | - -**Returns:** *void* diff --git a/docs/pages/api/classes/simplexcache.md b/docs/pages/api/classes/simplexcache.md index 8f569335..513aaa69 100644 --- a/docs/pages/api/classes/simplexcache.md +++ b/docs/pages/api/classes/simplexcache.md @@ -1,59 +1,53 @@ - # Class: SimplexCache Used to warm start Distance. Set count to zero on first call. -## Hierarchy - -* **SimplexCache** +## Constructors -## Index +### new SimplexCache() -### Properties +> **new SimplexCache**(): [`SimplexCache`](SimplexCache) -* [count](/api/classes/simplexcache#count) -* [indexA](/api/classes/simplexcache#indexa) -* [indexB](/api/classes/simplexcache#indexb) -* [metric](/api/classes/simplexcache#metric) +#### Returns -### Methods - -* [recycle](/api/classes/simplexcache#recycle) +[`SimplexCache`](SimplexCache) ## Properties -### count +### count -• **count**: *number* = 0 +> **count**: `number` = `0` -___ +*** -### indexA +### indexA -• **indexA**: *number[]* = [] +> **indexA**: `number`[] = `[]` vertices on shape A -___ +*** -### indexB +### indexB -• **indexB**: *number[]* = [] +> **indexB**: `number`[] = `[]` vertices on shape B -___ +*** -### metric +### metric -• **metric**: *number* = 0 +> **metric**: `number` = `0` length or area ## Methods -### recycle +### recycle() + +> **recycle**(): `void` -▸ **recycle**(): *void* +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/simplexvertex.md b/docs/pages/api/classes/simplexvertex.md deleted file mode 100644 index 6e046aa6..00000000 --- a/docs/pages/api/classes/simplexvertex.md +++ /dev/null @@ -1,92 +0,0 @@ - -# Class: SimplexVertex - -## Hierarchy - -* **SimplexVertex** - -## Index - -### Properties - -* [a](/api/classes/simplexvertex#a) -* [indexA](/api/classes/simplexvertex#indexa) -* [indexB](/api/classes/simplexvertex#indexb) -* [w](/api/classes/simplexvertex#w) -* [wA](/api/classes/simplexvertex#wa) -* [wB](/api/classes/simplexvertex#wb) - -### Methods - -* [recycle](/api/classes/simplexvertex#recycle) -* [set](/api/classes/simplexvertex#set) - -## Properties - -### a - -• **a**: *number* = 0 - -barycentric coordinate for closest point - -___ - -### indexA - -• **indexA**: *number* = 0 - -wA index - -___ - -### indexB - -• **indexB**: *number* = 0 - -wB index - -___ - -### w - -• **w**: *[Vec2Value](/api/interfaces/vec2value)* = matrix.vec2(0, 0) - -wB - wA; - -___ - -### wA - -• **wA**: *[Vec2Value](/api/interfaces/vec2value)* = matrix.vec2(0, 0) - -support point in proxyA - -___ - -### wB - -• **wB**: *[Vec2Value](/api/interfaces/vec2value)* = matrix.vec2(0, 0) - -support point in proxyB - -## Methods - -### recycle - -▸ **recycle**(): *void* - -**Returns:** *void* - -___ - -### set - -▸ **set**(`v`: [SimplexVertex](/api/classes/simplexvertex)): *void* - -**Parameters:** - -Name | Type | ------- | ------ | -`v` | [SimplexVertex](/api/classes/simplexvertex) | - -**Returns:** *void* diff --git a/docs/pages/api/classes/solver.md b/docs/pages/api/classes/solver.md index 49f4a612..e62e7532 100644 --- a/docs/pages/api/classes/solver.md +++ b/docs/pages/api/classes/solver.md @@ -1,187 +1,161 @@ - # Class: Solver Finds and solves islands. An island is a connected subset of the world. -## Hierarchy +## Constructors -* **Solver** +### new Solver() -## Index +> **new Solver**(`world`): [`Solver`](Solver) -### Constructors +#### Parameters -* [constructor](/api/classes/solver#constructor) +• **world**: [`World`](World) -### Properties +#### Returns -* [m_bodies](/api/classes/solver#m_bodies) -* [m_contacts](/api/classes/solver#m_contacts) -* [m_joints](/api/classes/solver#m_joints) -* [m_stack](/api/classes/solver#m_stack) -* [m_world](/api/classes/solver#m_world) +[`Solver`](Solver) -### Methods +## Properties -* [addBody](/api/classes/solver#addbody) -* [addContact](/api/classes/solver#addcontact) -* [addJoint](/api/classes/solver#addjoint) -* [clear](/api/classes/solver#clear) -* [solveIsland](/api/classes/solver#solveisland) -* [solveIslandTOI](/api/classes/solver#solveislandtoi) -* [solveWorld](/api/classes/solver#solveworld) -* [solveWorldTOI](/api/classes/solver#solveworldtoi) +### m\_bodies -## Constructors +> **m\_bodies**: [`Body`](Body)[] -### constructor +*** -\+ **new Solver**(`world`: [World](/api/classes/world)): *[Solver](/api/classes/solver)* +### m\_contacts -**Parameters:** +> **m\_contacts**: [`Contact`](Contact)[] -Name | Type | ------- | ------ | -`world` | [World](/api/classes/world) | +*** -**Returns:** *[Solver](/api/classes/solver)* +### m\_joints -## Properties +> **m\_joints**: [`Joint`](Joint)[] -### m_bodies +*** -• **m_bodies**: *[Body](/api/classes/body)[]* +### m\_stack -___ +> **m\_stack**: [`Body`](Body)[] -### m_contacts +*** -• **m_contacts**: *[Contact](/api/classes/contact)[]* +### m\_world -___ +> **m\_world**: [`World`](World) -### m_joints +## Methods -• **m_joints**: *[Joint](/api/classes/joint)[]* +### addBody() -___ +> **addBody**(`body`): `void` -### m_stack +#### Parameters -• **m_stack**: *[Body](/api/classes/body)[]* +• **body**: [`Body`](Body) -___ +#### Returns -### m_world +`void` -• **m_world**: *[World](/api/classes/world)* +*** -## Methods +### addContact() -### addBody +> **addContact**(`contact`): `void` -▸ **addBody**(`body`: [Body](/api/classes/body)): *void* +#### Parameters -**Parameters:** +• **contact**: [`Contact`](Contact) -Name | Type | ------- | ------ | -`body` | [Body](/api/classes/body) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### addContact +### addJoint() -▸ **addContact**(`contact`: [Contact](/api/classes/contact)): *void* +> **addJoint**(`joint`): `void` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`contact` | [Contact](/api/classes/contact) | +• **joint**: [`Joint`](Joint) -**Returns:** *void* +#### Returns -___ +`void` -### addJoint +*** -▸ **addJoint**(`joint`: [Joint](/api/classes/joint)): *void* +### clear() -**Parameters:** +> **clear**(): `void` -Name | Type | ------- | ------ | -`joint` | [Joint](/api/classes/joint) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### clear +### solveIsland() -▸ **clear**(): *void* +> **solveIsland**(`step`): `void` -**Returns:** *void* +#### Parameters -___ +• **step**: [`TimeStep`](TimeStep) -### solveIsland +#### Returns -▸ **solveIsland**(`step`: [TimeStep](/api/classes/timestep)): *void* +`void` -**Parameters:** +*** -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +### solveIslandTOI() -**Returns:** *void* +> **solveIslandTOI**(`subStep`, `toiA`, `toiB`): `void` -___ +#### Parameters -### solveIslandTOI +• **subStep**: [`TimeStep`](TimeStep) -▸ **solveIslandTOI**(`subStep`: [TimeStep](/api/classes/timestep), `toiA`: [Body](/api/classes/body), `toiB`: [Body](/api/classes/body)): *void* +• **toiA**: [`Body`](Body) -**Parameters:** +• **toiB**: [`Body`](Body) -Name | Type | ------- | ------ | -`subStep` | [TimeStep](/api/classes/timestep) | -`toiA` | [Body](/api/classes/body) | -`toiB` | [Body](/api/classes/body) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### solveWorld +### solveWorld() -▸ **solveWorld**(`step`: [TimeStep](/api/classes/timestep)): *void* +> **solveWorld**(`step`): `void` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +• **step**: [`TimeStep`](TimeStep) -**Returns:** *void* +#### Returns -___ +`void` -### solveWorldTOI +*** -▸ **solveWorldTOI**(`step`: [TimeStep](/api/classes/timestep)): *void* +### solveWorldTOI() + +> **solveWorldTOI**(`step`): `void` Find TOI contacts and solve them. -**Parameters:** +#### Parameters + +• **step**: [`TimeStep`](TimeStep) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/sweep.md b/docs/pages/api/classes/sweep.md index 141c8b4f..e1181b67 100644 --- a/docs/pages/api/classes/sweep.md +++ b/docs/pages/api/classes/sweep.md @@ -1,4 +1,3 @@ - # Class: Sweep This describes the motion of a body/shape for TOI computation. Shapes are @@ -6,165 +5,160 @@ defined with respect to the body origin, which may not coincide with the center of mass. However, to support dynamics we must interpolate the center of mass position. -## Hierarchy - -* **Sweep** +## Constructors -## Index +### new Sweep() -### Properties +> **new Sweep**(): [`Sweep`](Sweep) -* [a](/api/classes/sweep#a) -* [a0](/api/classes/sweep#a0) -* [alpha0](/api/classes/sweep#alpha0) -* [c](/api/classes/sweep#c) -* [c0](/api/classes/sweep#c0) -* [localCenter](/api/classes/sweep#localcenter) +#### Returns -### Methods - -* [advance](/api/classes/sweep#advance) -* [forward](/api/classes/sweep#forward) -* [getTransform](/api/classes/sweep#gettransform) -* [normalize](/api/classes/sweep#normalize) -* [set](/api/classes/sweep#set) -* [setLocalCenter](/api/classes/sweep#setlocalcenter) -* [setTransform](/api/classes/sweep#settransform) +[`Sweep`](Sweep) ## Properties -### a +### a -• **a**: *number* = 0 +> **a**: `number` = `0` World angle -___ +*** -### a0 +### a0 -• **a0**: *number* = 0 +> **a0**: `number` = `0` -___ +*** -### alpha0 +### alpha0 -• **alpha0**: *number* = 0 +> **alpha0**: `number` = `0` Fraction of the current time step in the range [0,1], c0 and a0 are c and a at alpha0. -___ +*** -### c +### c -• **c**: *[Vec2](/api/classes/vec2)‹›* = Vec2.zero() +> **c**: [`Vec2`](Vec2) World center position -___ +*** -### c0 +### c0 -• **c0**: *[Vec2](/api/classes/vec2)‹›* = Vec2.zero() +> **c0**: [`Vec2`](Vec2) -___ +*** -### localCenter +### localCenter -• **localCenter**: *[Vec2](/api/classes/vec2)‹›* = Vec2.zero() +> **localCenter**: [`Vec2`](Vec2) Local center of mass position ## Methods -### advance +### advance() -▸ **advance**(`alpha`: number): *void* +> **advance**(`alpha`): `void` Advance the sweep forward, yielding a new initial state. -**Parameters:** +#### Parameters + +• **alpha**: `number` -Name | Type | Description | ------- | ------ | ------ | -`alpha` | number | The new initial time | +The new initial time -**Returns:** *void* +#### Returns -___ +`void` -### forward +*** -▸ **forward**(): *void* +### forward() -**Returns:** *void* +> **forward**(): `void` -___ +#### Returns -### getTransform +`void` -▸ **getTransform**(`xf`: [TransformValue](/api/globals#transformvalue), `beta`: number): *void* +*** + +### getTransform() + +> **getTransform**(`xf`, `beta`): `void` Get the interpolated transform at a specific time. -**Parameters:** +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) -Name | Type | Default | Description | ------- | ------ | ------ | ------ | -`xf` | [TransformValue](/api/globals#transformvalue) | - | - | -`beta` | number | 0 | A factor in [0,1], where 0 indicates alpha0 | +• **beta**: `number` = `0` -**Returns:** *void* +A factor in [0,1], where 0 indicates alpha0 -___ +#### Returns -### normalize +`void` -▸ **normalize**(): *void* +*** + +### normalize() + +> **normalize**(): `void` normalize the angles in radians to be between -pi and pi. -**Returns:** *void* +#### Returns + +`void` + +*** + +### set() + +> **set**(`that`): `void` + +#### Parameters -___ +• **that**: [`Sweep`](Sweep) -### set +#### Returns -▸ **set**(`that`: [Sweep](/api/classes/sweep)): *void* +`void` -**Parameters:** +*** -Name | Type | ------- | ------ | -`that` | [Sweep](/api/classes/sweep) | +### setLocalCenter() -**Returns:** *void* +> **setLocalCenter**(`localCenter`, `xf`): `void` -___ +#### Parameters -### setLocalCenter +• **localCenter**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **setLocalCenter**(`localCenter`: [Vec2Value](/api/interfaces/vec2value), `xf`: [TransformValue](/api/globals#transformvalue)): *void* +• **xf**: [`TransformValue`](../type-aliases/TransformValue) -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`localCenter` | [Vec2Value](/api/interfaces/vec2value) | -`xf` | [TransformValue](/api/globals#transformvalue) | +`void` -**Returns:** *void* +*** -___ +### setTransform() -### setTransform +> **setTransform**(`xf`): `void` -▸ **setTransform**(`xf`: [TransformValue](/api/globals#transformvalue)): *void* +#### Parameters -**Parameters:** +• **xf**: [`TransformValue`](../type-aliases/TransformValue) -Name | Type | ------- | ------ | -`xf` | [TransformValue](/api/globals#transformvalue) | +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/testbed.md b/docs/pages/api/classes/testbed.md index 897157de..801d638e 100644 --- a/docs/pages/api/classes/testbed.md +++ b/docs/pages/api/classes/testbed.md @@ -1,412 +1,397 @@ +# Class: `abstract` Testbed -# Class: Testbed - -## Hierarchy - -* **Testbed** - -## Index - -### Properties - -* [activeKeys](/api/classes/testbed#activekeys) -* [background](/api/classes/testbed#background) -* [height](/api/classes/testbed#height) -* [hz](/api/classes/testbed#hz) -* [mouseForce](/api/classes/testbed#optional-mouseforce) -* [speed](/api/classes/testbed#speed) -* [width](/api/classes/testbed#width) -* [x](/api/classes/testbed#x) -* [y](/api/classes/testbed#y) - -### Methods - -* [color](/api/classes/testbed#color) -* [drawAABB](/api/classes/testbed#abstract-drawaabb) -* [drawCircle](/api/classes/testbed#abstract-drawcircle) -* [drawEdge](/api/classes/testbed#abstract-drawedge) -* [drawPoint](/api/classes/testbed#abstract-drawpoint) -* [drawPolygon](/api/classes/testbed#abstract-drawpolygon) -* [drawSegment](/api/classes/testbed#abstract-drawsegment) -* [findAll](/api/classes/testbed#abstract-findall) -* [findOne](/api/classes/testbed#abstract-findone) -* [info](/api/classes/testbed#abstract-info) -* [keydown](/api/classes/testbed#keydown) -* [keyup](/api/classes/testbed#keyup) -* [start](/api/classes/testbed#abstract-start) -* [status](/api/classes/testbed#abstract-status) -* [step](/api/classes/testbed#step) -* [mount](/api/classes/testbed#static-mount) -* [start](/api/classes/testbed#static-start) +## Constructors + +### new Testbed() + +> **new Testbed**(): [`Testbed`](Testbed) + +#### Returns + +[`Testbed`](Testbed) ## Properties -### activeKeys +### activeKeys -• **activeKeys**: *[ActiveKeys](/api/globals#activekeys)* +> **activeKeys**: [`ActiveKeys`](../type-aliases/ActiveKeys) = `{}` -___ +*** -### background +### background -• **background**: *string* = "#222222" +> **background**: `string` = `"#222222"` -___ +*** -### height +### height -• **height**: *number* = 60 +> **height**: `number` = `60` World viewbox height. -___ +*** -### hz +### hz -• **hz**: *number* = 60 +> **hz**: `number` = `60` World simulation step frequency -___ +*** -### `Optional` mouseForce +### mouseForce? -• **mouseForce**? : *number* +> `optional` **mouseForce**: `number` -___ +*** -### speed +### speed -• **speed**: *number* = 1 +> **speed**: `number` = `1` World simulation speed, default is 1 -___ +*** -### width +### width -• **width**: *number* = 80 +> **width**: `number` = `80` World viewbox width. -___ +*** -### x +### x -• **x**: *number* = 0 +> **x**: `number` = `0` World viewbox center vertical offset. -___ +*** -### y +### y -• **y**: *number* = -10 +> **y**: `number` = `-10` World viewbox center horizontal offset. ## Methods -### color +### color() + +> **color**(`r`, `g`, `b`): `string` + +#### Parameters + +• **r**: `number` + +• **g**: `number` + +• **b**: `number` + +#### Returns + +`string` + +*** + +### drawAABB() + +> `abstract` **drawAABB**(`aabb`, `color`): `void` + +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +• **color**: `string` + +#### Returns + +`void` -▸ **color**(`r`: number, `g`: number, `b`: number): *string* +*** -**Parameters:** +### drawCircle() -Name | Type | ------- | ------ | -`r` | number | -`g` | number | -`b` | number | +> `abstract` **drawCircle**(`p`, `r`, `color`): `void` -**Returns:** *string* +#### Parameters -___ +• **p** -### `Abstract` drawAABB +• **p.x**: `number` -▸ **drawAABB**(`aabb`: [AABBValue](/api/interfaces/aabbvalue), `color`: string): *void* +• **p.y**: `number` -**Parameters:** +• **r**: `number` -Name | Type | ------- | ------ | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | -`color` | string | +• **color**: `string` -**Returns:** *void* +#### Returns -___ +`void` -### `Abstract` drawCircle +*** -▸ **drawCircle**(`p`: object, `r`: number, `color`: string): *void* +### drawEdge() -**Parameters:** +> `abstract` **drawEdge**(`a`, `b`, `color`): `void` -▪ **p**: *object* +#### Parameters -Name | Type | ------- | ------ | -`x` | number | -`y` | number | +• **a** -▪ **r**: *number* +• **a.x**: `number` -▪ **color**: *string* +• **a.y**: `number` -**Returns:** *void* +• **b** -___ +• **b.x**: `number` -### `Abstract` drawEdge +• **b.y**: `number` -▸ **drawEdge**(`a`: object, `b`: object, `color`: string): *void* +• **color**: `string` -**Parameters:** +#### Returns -▪ **a**: *object* +`void` -Name | Type | ------- | ------ | -`x` | number | -`y` | number | +*** -▪ **b**: *object* +### drawPoint() -Name | Type | ------- | ------ | -`x` | number | -`y` | number | +> `abstract` **drawPoint**(`p`, `r`, `color`): `void` -▪ **color**: *string* +#### Parameters -**Returns:** *void* +• **p** -___ +• **p.x**: `number` -### `Abstract` drawPoint +• **p.y**: `number` -▸ **drawPoint**(`p`: object, `r`: any, `color`: string): *void* +• **r**: `any` -**Parameters:** +• **color**: `string` -▪ **p**: *object* +#### Returns -Name | Type | ------- | ------ | -`x` | number | -`y` | number | +`void` -▪ **r**: *any* +*** -▪ **color**: *string* +### drawPolygon() -**Returns:** *void* +> `abstract` **drawPolygon**(`points`, `color`): `void` -___ +#### Parameters -### `Abstract` drawPolygon +• **points**: `object`[] -▸ **drawPolygon**(`points`: Array‹object›, `color`: string): *void* +• **color**: `string` -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`points` | Array‹object› | -`color` | string | +`void` -**Returns:** *void* +*** -___ +### drawSegment() -### `Abstract` drawSegment +> `abstract` **drawSegment**(`a`, `b`, `color`): `void` -▸ **drawSegment**(`a`: object, `b`: object, `color`: string): *void* +#### Parameters -**Parameters:** +• **a** -▪ **a**: *object* +• **a.x**: `number` -Name | Type | ------- | ------ | -`x` | number | -`y` | number | +• **a.y**: `number` -▪ **b**: *object* +• **b** -Name | Type | ------- | ------ | -`x` | number | -`y` | number | +• **b.x**: `number` -▪ **color**: *string* +• **b.y**: `number` -**Returns:** *void* +• **color**: `string` -___ +#### Returns -### `Abstract` findAll +`void` -▸ **findAll**(`query`: string): *([Body](/api/classes/body)‹› | [Joint](/api/classes/joint)‹› | [Fixture](/api/classes/fixture)‹›)[]* +*** -**Parameters:** +### findAll() -Name | Type | ------- | ------ | -`query` | string | +> `abstract` **findAll**(`query`): ([`Body`](Body) \| [`Fixture`](Fixture) \| [`Joint`](Joint))[] -**Returns:** *([Body](/api/classes/body)‹› | [Joint](/api/classes/joint)‹› | [Fixture](/api/classes/fixture)‹›)[]* +#### Parameters -___ +• **query**: `string` -### `Abstract` findOne +#### Returns -▸ **findOne**(`query`: string): *[Body](/api/classes/body)‹› | [Joint](/api/classes/joint)‹› | [Fixture](/api/classes/fixture)‹›* +([`Body`](Body) \| [`Fixture`](Fixture) \| [`Joint`](Joint))[] -**Parameters:** +*** -Name | Type | ------- | ------ | -`query` | string | +### findOne() -**Returns:** *[Body](/api/classes/body)‹› | [Joint](/api/classes/joint)‹› | [Fixture](/api/classes/fixture)‹›* +> `abstract` **findOne**(`query`): [`Body`](Body) \| [`Fixture`](Fixture) \| [`Joint`](Joint) -___ +#### Parameters -### `Abstract` info +• **query**: `string` -▸ **info**(`text`: string): *void* +#### Returns -**Parameters:** +[`Body`](Body) \| [`Fixture`](Fixture) \| [`Joint`](Joint) -Name | Type | ------- | ------ | -`text` | string | +*** -**Returns:** *void* +### info() -___ +> `abstract` **info**(`text`): `void` -### keydown +#### Parameters -▸ **keydown**(`keyCode`: number, `label`: string): *void* +• **text**: `string` + +#### Returns + +`void` + +*** + +### keydown() + +> **keydown**(`keyCode`, `label`): `void` callback, to be implemented by user -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`keyCode` | number | -`label` | string | +• **keyCode**: `number` -**Returns:** *void* +• **label**: `string` -___ +#### Returns -### keyup +`void` -▸ **keyup**(`keyCode`: number, `label`: string): *void* +*** + +### keyup() + +> **keyup**(`keyCode`, `label`): `void` callback, to be implemented by user -**Parameters:** +#### Parameters + +• **keyCode**: `number` + +• **label**: `string` + +#### Returns -Name | Type | ------- | ------ | -`keyCode` | number | -`label` | string | +`void` -**Returns:** *void* +*** -___ +### start() -### `Abstract` start +> `abstract` **start**(`world`): `void` -▸ **start**(`world`: [World](/api/classes/world)): *void* +#### Parameters -**Parameters:** +• **world**: [`World`](World) -Name | Type | ------- | ------ | -`world` | [World](/api/classes/world) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### `Abstract` status +### status() -▸ **status**(`name`: string, `value`: any): *void* +#### status(name, value) -**Parameters:** +> `abstract` **status**(`name`, `value`): `void` -Name | Type | ------- | ------ | -`name` | string | -`value` | any | +##### Parameters -**Returns:** *void* +• **name**: `string` -▸ **status**(`value`: object | string): *void* +• **value**: `any` -**Parameters:** +##### Returns -Name | Type | ------- | ------ | -`value` | object | string | +`void` -**Returns:** *void* +#### status(value) -___ +> `abstract` **status**(`value`): `void` -### step +##### Parameters -▸ **step**(`dt`: number, `t`: number): *void* +• **value**: `string` \| `object` + +##### Returns + +`void` + +*** + +### step() + +> **step**(`dt`, `t`): `void` callback, to be implemented by user -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`dt` | number | -`t` | number | +• **dt**: `number` -**Returns:** *void* +• **t**: `number` -___ +#### Returns -### `Static` mount +`void` -▸ **mount**(`options?`: [TestbedMountOptions](/api/globals#testbedmountoptions)): *[Testbed](/api/classes/testbed)* +*** + +### mount() + +> `static` **mount**(`options`?): [`Testbed`](Testbed) Mounts testbed. Call start with a world to start simulation and rendering. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`options?` | [TestbedMountOptions](/api/globals#testbedmountoptions) | +• **options?**: `TestbedMountOptions` -**Returns:** *[Testbed](/api/classes/testbed)* +#### Returns -___ +[`Testbed`](Testbed) -### `Static` start +*** -▸ **start**(`world`: [World](/api/classes/world)): *[Testbed](/api/classes/testbed)* +### start() + +> `static` **start**(`world`): [`Testbed`](Testbed) Mounts testbed if needed, then starts simulation and rendering. If you need to customize testbed before starting, first run `const testbed = Testbed.mount()` and then `testbed.start()`. -**Parameters:** +#### Parameters + +• **world**: [`World`](World) -Name | Type | ------- | ------ | -`world` | [World](/api/classes/world) | +#### Returns -**Returns:** *[Testbed](/api/classes/testbed)* +[`Testbed`](Testbed) diff --git a/docs/pages/api/classes/timestep.md b/docs/pages/api/classes/timestep.md index ffd82989..19200b4c 100644 --- a/docs/pages/api/classes/timestep.md +++ b/docs/pages/api/classes/timestep.md @@ -1,93 +1,81 @@ - # Class: TimeStep -## Hierarchy - -* **TimeStep** +## Constructors -## Index +### new TimeStep() -### Properties +> **new TimeStep**(): [`TimeStep`](TimeStep) -* [blockSolve](/api/classes/timestep#blocksolve) -* [dt](/api/classes/timestep#dt) -* [dtRatio](/api/classes/timestep#dtratio) -* [inv_dt](/api/classes/timestep#inv_dt) -* [inv_dt0](/api/classes/timestep#inv_dt0) -* [positionIterations](/api/classes/timestep#positioniterations) -* [velocityIterations](/api/classes/timestep#velocityiterations) -* [warmStarting](/api/classes/timestep#warmstarting) +#### Returns -### Methods - -* [reset](/api/classes/timestep#reset) +[`TimeStep`](TimeStep) ## Properties -### blockSolve +### blockSolve -• **blockSolve**: *boolean* = true +> **blockSolve**: `boolean` = `true` -___ +*** -### dt +### dt -• **dt**: *number* = 0 +> **dt**: `number` = `0` time step -___ +*** -### dtRatio +### dtRatio -• **dtRatio**: *number* = 1 +> **dtRatio**: `number` = `1` dt * inv_dt0 -___ +*** -### inv_dt +### inv\_dt -• **inv_dt**: *number* = 0 +> **inv\_dt**: `number` = `0` inverse time step (0 if dt == 0) -___ +*** -### inv_dt0 +### inv\_dt0 -• **inv_dt0**: *number* = 0 +> **inv\_dt0**: `number` = `0.0` timestep ratio for variable timestep -___ +*** -### positionIterations +### positionIterations -• **positionIterations**: *number* = 0 +> **positionIterations**: `number` = `0` -___ +*** -### velocityIterations +### velocityIterations -• **velocityIterations**: *number* = 0 +> **velocityIterations**: `number` = `0` -___ +*** -### warmStarting +### warmStarting -• **warmStarting**: *boolean* = false +> **warmStarting**: `boolean` = `false` ## Methods -### reset +### reset() + +> **reset**(`dt`): `void` -▸ **reset**(`dt`: number): *void* +#### Parameters -**Parameters:** +• **dt**: `number` -Name | Type | ------- | ------ | -`dt` | number | +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/toiinput.md b/docs/pages/api/classes/toiinput.md index eea2ec4a..44391785 100644 --- a/docs/pages/api/classes/toiinput.md +++ b/docs/pages/api/classes/toiinput.md @@ -1,62 +1,55 @@ - # Class: TOIInput Input parameters for TimeOfImpact. -## Hierarchy - -* **TOIInput** +## Constructors -## Index +### new TOIInput() -### Properties +> **new TOIInput**(): [`TOIInput`](TOIInput) -* [proxyA](/api/classes/toiinput#proxya) -* [proxyB](/api/classes/toiinput#proxyb) -* [sweepA](/api/classes/toiinput#sweepa) -* [sweepB](/api/classes/toiinput#sweepb) -* [tMax](/api/classes/toiinput#tmax) +#### Returns -### Methods - -* [recycle](/api/classes/toiinput#recycle) +[`TOIInput`](TOIInput) ## Properties -### proxyA +### proxyA -• **proxyA**: *[DistanceProxy](/api/classes/distanceproxy)‹›* = new DistanceProxy() +> **proxyA**: [`DistanceProxy`](DistanceProxy) -___ +*** -### proxyB +### proxyB -• **proxyB**: *[DistanceProxy](/api/classes/distanceproxy)‹›* = new DistanceProxy() +> **proxyB**: [`DistanceProxy`](DistanceProxy) -___ +*** -### sweepA +### sweepA -• **sweepA**: *[Sweep](/api/classes/sweep)‹›* = new Sweep() +> **sweepA**: [`Sweep`](Sweep) -___ +*** -### sweepB +### sweepB -• **sweepB**: *[Sweep](/api/classes/sweep)‹›* = new Sweep() +> **sweepB**: [`Sweep`](Sweep) -___ +*** -### tMax +### tMax -• **tMax**: *number* +> **tMax**: `number` defines sweep interval [0, tMax] ## Methods -### recycle +### recycle() + +> **recycle**(): `void` -▸ **recycle**(): *void* +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/toioutput.md b/docs/pages/api/classes/toioutput.md index ae1cdc65..3e98b87d 100644 --- a/docs/pages/api/classes/toioutput.md +++ b/docs/pages/api/classes/toioutput.md @@ -1,39 +1,35 @@ - # Class: TOIOutput Output parameters for TimeOfImpact. -## Hierarchy - -* **TOIOutput** +## Constructors -## Index +### new TOIOutput() -### Properties +> **new TOIOutput**(): [`TOIOutput`](TOIOutput) -* [state](/api/classes/toioutput#state) -* [t](/api/classes/toioutput#t) +#### Returns -### Methods - -* [recycle](/api/classes/toioutput#recycle) +[`TOIOutput`](TOIOutput) ## Properties -### state +### state -• **state**: *[TOIOutputState](/api/enums/toioutputstate)* = TOIOutputState.e_unset +> **state**: [`TOIOutputState`](../enumerations/TOIOutputState) = `TOIOutputState.e_unset` -___ +*** -### t +### t -• **t**: *number* = -1 +> **t**: `number` = `-1` ## Methods -### recycle +### recycle() + +> **recycle**(): `void` -▸ **recycle**(): *void* +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/transform.md b/docs/pages/api/classes/transform.md index a324668a..c74f16cd 100644 --- a/docs/pages/api/classes/transform.md +++ b/docs/pages/api/classes/transform.md @@ -1,328 +1,327 @@ - # Class: Transform A transform contains translation and rotation. It is used to represent the position and orientation of rigid frames. Initialize using a position vector and a rotation. -## Hierarchy - -* **Transform** - -## Index - -### Constructors - -* [constructor](/api/classes/transform#constructor) - -### Properties - -* [p](/api/classes/transform#p) -* [q](/api/classes/transform#q) - -### Methods +## Constructors -* [set](/api/classes/transform#set) -* [setIdentity](/api/classes/transform#setidentity) -* [setNum](/api/classes/transform#setnum) -* [setTransform](/api/classes/transform#settransform) -* [assert](/api/classes/transform#static-assert) -* [clone](/api/classes/transform#static-clone) -* [identity](/api/classes/transform#static-identity) -* [isValid](/api/classes/transform#static-isvalid) -* [mul](/api/classes/transform#static-mul) -* [mulAll](/api/classes/transform#static-mulall) -* [mulT](/api/classes/transform#static-mult) -* [mulTVec2](/api/classes/transform#static-multvec2) -* [mulTXf](/api/classes/transform#static-multxf) -* [mulVec2](/api/classes/transform#static-mulvec2) -* [mulXf](/api/classes/transform#static-mulxf) +### new Transform() -## Constructors +> **new Transform**(`position`?, `rotation`?): [`Transform`](Transform) -### constructor +#### Parameters -\+ **new Transform**(`position?`: [Vec2Value](/api/interfaces/vec2value), `rotation?`: number): *[Transform](/api/classes/transform)* +• **position?**: [`Vec2Value`](../interfaces/Vec2Value) -**Parameters:** +• **rotation?**: `number` -Name | Type | ------- | ------ | -`position?` | [Vec2Value](/api/interfaces/vec2value) | -`rotation?` | number | +#### Returns -**Returns:** *[Transform](/api/classes/transform)* +[`Transform`](Transform) ## Properties -### p +### p -• **p**: *[Vec2](/api/classes/vec2)* +> **p**: [`Vec2`](Vec2) position -___ +*** -### q +### q -• **q**: *[Rot](/api/classes/rot)* +> **q**: [`Rot`](Rot) rotation ## Methods -### set +### set() -▸ **set**(`position`: [Vec2Value](/api/interfaces/vec2value), `rotation`: number): *void* +#### set(position, rotation) + +> **set**(`position`, `rotation`): `void` Set position and angle -**Parameters:** +##### Parameters + +• **position**: [`Vec2Value`](../interfaces/Vec2Value) + +• **rotation**: `number` -Name | Type | ------- | ------ | -`position` | [Vec2Value](/api/interfaces/vec2value) | -`rotation` | number | +##### Returns -**Returns:** *void* +`void` -▸ **set**(`xf`: [TransformValue](/api/globals#transformvalue)): *void* +#### set(xf) + +> **set**(`xf`): `void` Copy from another transform -**Parameters:** +##### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) -Name | Type | ------- | ------ | -`xf` | [TransformValue](/api/globals#transformvalue) | +##### Returns -**Returns:** *void* +`void` -___ +*** -### setIdentity +### setIdentity() -▸ **setIdentity**(): *void* +> **setIdentity**(): `void` Set this to the identity transform -**Returns:** *void* +#### Returns + +`void` -___ +*** -### setNum +### setNum() -▸ **setNum**(`position`: [Vec2Value](/api/interfaces/vec2value), `rotation`: number): *void* +> **setNum**(`position`, `rotation`): `void` Set position and angle -**Parameters:** +#### Parameters + +• **position**: [`Vec2Value`](../interfaces/Vec2Value) + +• **rotation**: `number` + +#### Returns + +`void` + +*** + +### setTransform() + +> **setTransform**(`xf`): `void` + +#### Parameters + +• **xf**: [`TransformValue`](../type-aliases/TransformValue) + +#### Returns + +`void` + +*** + +### assert() + +> `static` **assert**(`o`): `void` + +#### Parameters + +• **o**: `any` + +#### Returns + +`void` + +*** + +### clone() + +> `static` **clone**(`xf`): [`Transform`](Transform) + +#### Parameters + +• **xf**: [`Transform`](Transform) + +#### Returns + +[`Transform`](Transform) + +*** + +### identity() + +> `static` **identity**(): [`Transform`](Transform) + +#### Returns + +[`Transform`](Transform) + +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` -Name | Type | ------- | ------ | -`position` | [Vec2Value](/api/interfaces/vec2value) | -`rotation` | number | +#### Parameters -**Returns:** *void* +• **obj**: `any` -___ +#### Returns -### setTransform +`boolean` -▸ **setTransform**(`xf`: [TransformValue](/api/globals#transformvalue)): *void* +*** -**Parameters:** +### mul() -Name | Type | ------- | ------ | -`xf` | [TransformValue](/api/globals#transformvalue) | +#### mul(a, b) -**Returns:** *void* +> `static` **mul**(`a`, `b`): [`Vec2`](Vec2) -___ +##### Parameters -### `Static` assert +• **a**: [`TransformValue`](../type-aliases/TransformValue) -▸ **assert**(`o`: any): *void* +• **b**: [`Vec2Value`](../interfaces/Vec2Value) -**Parameters:** +##### Returns -Name | Type | ------- | ------ | -`o` | any | +[`Vec2`](Vec2) -**Returns:** *void* +#### mul(a, b) -___ +> `static` **mul**(`a`, `b`): [`Transform`](Transform) -### `Static` clone +##### Parameters -▸ **clone**(`xf`: [Transform](/api/classes/transform)): *[Transform](/api/classes/transform)* +• **a**: [`TransformValue`](../type-aliases/TransformValue) -**Parameters:** +• **b**: [`TransformValue`](../type-aliases/TransformValue) -Name | Type | ------- | ------ | -`xf` | [Transform](/api/classes/transform) | +##### Returns -**Returns:** *[Transform](/api/classes/transform)* +[`Transform`](Transform) -___ +*** -### `Static` identity +### mulAll() -▸ **identity**(): *[Transform](/api/classes/transform)* +#### mulAll(a, b) -**Returns:** *[Transform](/api/classes/transform)* +> `static` **mulAll**(`a`, `b`): [`Vec2`](Vec2)[] -___ +##### Parameters -### `Static` isValid +• **a**: [`Transform`](Transform) -▸ **isValid**(`obj`: any): *boolean* +• **b**: [`Vec2Value`](../interfaces/Vec2Value)[] -**Parameters:** +##### Returns -Name | Type | ------- | ------ | -`obj` | any | +[`Vec2`](Vec2)[] -**Returns:** *boolean* +#### mulAll(a, b) -___ +> `static` **mulAll**(`a`, `b`): [`Transform`](Transform)[] -### `Static` mul +##### Parameters -▸ **mul**(`a`: [TransformValue](/api/globals#transformvalue), `b`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +• **a**: [`Transform`](Transform) -**Parameters:** +• **b**: [`Transform`](Transform)[] -Name | Type | ------- | ------ | -`a` | [TransformValue](/api/globals#transformvalue) | -`b` | [Vec2Value](/api/interfaces/vec2value) | +##### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Transform`](Transform)[] -▸ **mul**(`a`: [TransformValue](/api/globals#transformvalue), `b`: [TransformValue](/api/globals#transformvalue)): *[Transform](/api/classes/transform)* +*** -**Parameters:** +### mulT() -Name | Type | ------- | ------ | -`a` | [TransformValue](/api/globals#transformvalue) | -`b` | [TransformValue](/api/globals#transformvalue) | +#### mulT(a, b) -**Returns:** *[Transform](/api/classes/transform)* +> `static` **mulT**(`a`, `b`): [`Vec2`](Vec2) -___ +##### Parameters -### `Static` mulAll +• **a**: [`TransformValue`](../type-aliases/TransformValue) -▸ **mulAll**(`a`: [Transform](/api/classes/transform), `b`: [Vec2Value](/api/interfaces/vec2value)[]): *[Vec2](/api/classes/vec2)[]* +• **b**: [`Vec2Value`](../interfaces/Vec2Value) -**Parameters:** +##### Returns -Name | Type | ------- | ------ | -`a` | [Transform](/api/classes/transform) | -`b` | [Vec2Value](/api/interfaces/vec2value)[] | +[`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)[]* +#### mulT(a, b) -▸ **mulAll**(`a`: [Transform](/api/classes/transform), `b`: [Transform](/api/classes/transform)[]): *[Transform](/api/classes/transform)[]* +> `static` **mulT**(`a`, `b`): [`Transform`](Transform) -**Parameters:** +##### Parameters -Name | Type | ------- | ------ | -`a` | [Transform](/api/classes/transform) | -`b` | [Transform](/api/classes/transform)[] | +• **a**: [`TransformValue`](../type-aliases/TransformValue) -**Returns:** *[Transform](/api/classes/transform)[]* +• **b**: [`TransformValue`](../type-aliases/TransformValue) -___ +##### Returns -### `Static` mulT +[`Transform`](Transform) -▸ **mulT**(`a`: [TransformValue](/api/globals#transformvalue), `b`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +*** -**Parameters:** +### mulTVec2() -Name | Type | ------- | ------ | -`a` | [TransformValue](/api/globals#transformvalue) | -`b` | [Vec2Value](/api/interfaces/vec2value) | +> `static` **mulTVec2**(`a`, `b`): [`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Parameters -▸ **mulT**(`a`: [TransformValue](/api/globals#transformvalue), `b`: [TransformValue](/api/globals#transformvalue)): *[Transform](/api/classes/transform)* +• **a**: [`TransformValue`](../type-aliases/TransformValue) -**Parameters:** +• **b**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`a` | [TransformValue](/api/globals#transformvalue) | -`b` | [TransformValue](/api/globals#transformvalue) | +#### Returns -**Returns:** *[Transform](/api/classes/transform)* +[`Vec2`](Vec2) -___ +*** -### `Static` mulTVec2 +### mulTXf() -▸ **mulTVec2**(`a`: [TransformValue](/api/globals#transformvalue), `b`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> `static` **mulTXf**(`a`, `b`): [`Transform`](Transform) -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`a` | [TransformValue](/api/globals#transformvalue) | -`b` | [Vec2Value](/api/interfaces/vec2value) | +• **a**: [`TransformValue`](../type-aliases/TransformValue) -**Returns:** *[Vec2](/api/classes/vec2)* +• **b**: [`TransformValue`](../type-aliases/TransformValue) -___ +#### Returns -### `Static` mulTXf +[`Transform`](Transform) -▸ **mulTXf**(`a`: [TransformValue](/api/globals#transformvalue), `b`: [TransformValue](/api/globals#transformvalue)): *[Transform](/api/classes/transform)* +*** -**Parameters:** +### mulVec2() -Name | Type | ------- | ------ | -`a` | [TransformValue](/api/globals#transformvalue) | -`b` | [TransformValue](/api/globals#transformvalue) | +> `static` **mulVec2**(`a`, `b`): [`Vec2`](Vec2) -**Returns:** *[Transform](/api/classes/transform)* +#### Parameters -___ +• **a**: [`TransformValue`](../type-aliases/TransformValue) -### `Static` mulVec2 +• **b**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **mulVec2**(`a`: [TransformValue](/api/globals#transformvalue), `b`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +#### Returns -**Parameters:** +[`Vec2`](Vec2) -Name | Type | ------- | ------ | -`a` | [TransformValue](/api/globals#transformvalue) | -`b` | [Vec2Value](/api/interfaces/vec2value) | +*** -**Returns:** *[Vec2](/api/classes/vec2)* +### mulXf() -___ +> `static` **mulXf**(`a`, `b`): [`Transform`](Transform) -### `Static` mulXf +#### Parameters -▸ **mulXf**(`a`: [TransformValue](/api/globals#transformvalue), `b`: [TransformValue](/api/globals#transformvalue)): *[Transform](/api/classes/transform)* +• **a**: [`TransformValue`](../type-aliases/TransformValue) -**Parameters:** +• **b**: [`TransformValue`](../type-aliases/TransformValue) -Name | Type | ------- | ------ | -`a` | [TransformValue](/api/globals#transformvalue) | -`b` | [TransformValue](/api/globals#transformvalue) | +#### Returns -**Returns:** *[Transform](/api/classes/transform)* +[`Transform`](Transform) diff --git a/docs/pages/api/classes/treenode.md b/docs/pages/api/classes/treenode.md index c24f0825..ed462466 100644 --- a/docs/pages/api/classes/treenode.md +++ b/docs/pages/api/classes/treenode.md @@ -1,100 +1,77 @@ - -# Class: TreeNode ‹**T**› +# Class: TreeNode\ A node in the dynamic tree. The client does not interact with this directly. -## Type parameters - -▪ **T** - -## Hierarchy - -* **TreeNode** - -## Index - -### Constructors +## Type Parameters -* [constructor](/api/classes/treenode#constructor) - -### Properties - -* [aabb](/api/classes/treenode#aabb) -* [child1](/api/classes/treenode#child1) -* [child2](/api/classes/treenode#child2) -* [height](/api/classes/treenode#height) -* [id](/api/classes/treenode#id) -* [parent](/api/classes/treenode#parent) -* [userData](/api/classes/treenode#userdata) - -### Methods - -* [isLeaf](/api/classes/treenode#isleaf) +• **T** ## Constructors -### constructor +### new TreeNode() + +> **new TreeNode**\<`T`\>(`id`?): [`TreeNode`](TreeNode)\<`T`\> -\+ **new TreeNode**(`id?`: number): *[TreeNode](/api/classes/treenode)* +#### Parameters -**Parameters:** +• **id?**: `number` -Name | Type | ------- | ------ | -`id?` | number | +#### Returns -**Returns:** *[TreeNode](/api/classes/treenode)* +[`TreeNode`](TreeNode)\<`T`\> ## Properties -### aabb +### aabb -• **aabb**: *[AABB](/api/classes/aabb)* = new AABB() +> **aabb**: [`AABB`](AABB) Enlarged AABB -___ +*** -### child1 +### child1 -• **child1**: *[TreeNode](/api/classes/treenode)‹T›* = null +> **child1**: [`TreeNode`](TreeNode)\<`T`\> = `null` -___ +*** -### child2 +### child2 -• **child2**: *[TreeNode](/api/classes/treenode)‹T›* = null +> **child2**: [`TreeNode`](TreeNode)\<`T`\> = `null` -___ +*** -### height +### height -• **height**: *number* = -1 +> **height**: `number` = `-1` 0: leaf, -1: free node -___ +*** -### id +### id -• **id**: *number* +> **id**: `number` -___ +*** -### parent +### parent -• **parent**: *[TreeNode](/api/classes/treenode)‹T›* = null +> **parent**: [`TreeNode`](TreeNode)\<`T`\> = `null` -___ +*** -### userData +### userData -• **userData**: *T* = null +> **userData**: `T` = `null` ## Methods -### isLeaf +### isLeaf() + +> **isLeaf**(): `boolean` -▸ **isLeaf**(): *boolean* +#### Returns -**Returns:** *boolean* +`boolean` diff --git a/docs/pages/api/classes/vec2.md b/docs/pages/api/classes/vec2.md index 3cb20540..fd97094a 100644 --- a/docs/pages/api/classes/vec2.md +++ b/docs/pages/api/classes/vec2.md @@ -1,952 +1,969 @@ - # Class: Vec2 -## Hierarchy - -* **Vec2** - -## Index - -### Constructors - -* [constructor](/api/classes/vec2#constructor) - -### Properties - -* [x](/api/classes/vec2#x) -* [y](/api/classes/vec2#y) - -### Methods - -* [add](/api/classes/vec2#add) -* [addCombine](/api/classes/vec2#addcombine) -* [addMul](/api/classes/vec2#addmul) -* [clamp](/api/classes/vec2#clamp) -* [clone](/api/classes/vec2#clone) -* [length](/api/classes/vec2#length) -* [lengthSquared](/api/classes/vec2#lengthsquared) -* [mul](/api/classes/vec2#mul) -* [neg](/api/classes/vec2#neg) -* [normalize](/api/classes/vec2#normalize) -* [set](/api/classes/vec2#set) -* [setCombine](/api/classes/vec2#setcombine) -* [setMul](/api/classes/vec2#setmul) -* [setNum](/api/classes/vec2#setnum) -* [setVec2](/api/classes/vec2#setvec2) -* [setZero](/api/classes/vec2#setzero) -* [sub](/api/classes/vec2#sub) -* [subCombine](/api/classes/vec2#subcombine) -* [subMul](/api/classes/vec2#submul) -* [wSub](/api/classes/vec2#wsub) -* [abs](/api/classes/vec2#static-abs) -* [add](/api/classes/vec2#static-add) -* [addCross](/api/classes/vec2#static-addcross) -* [addCrossNumVec2](/api/classes/vec2#static-addcrossnumvec2) -* [addCrossVec2Num](/api/classes/vec2#static-addcrossvec2num) -* [areEqual](/api/classes/vec2#static-areequal) -* [assert](/api/classes/vec2#static-assert) -* [clamp](/api/classes/vec2#static-clamp) -* [clone](/api/classes/vec2#static-clone) -* [combine](/api/classes/vec2#static-combine) -* [cross](/api/classes/vec2#static-cross) -* [crossNumVec2](/api/classes/vec2#static-crossnumvec2) -* [crossVec2Num](/api/classes/vec2#static-crossvec2num) -* [crossVec2Vec2](/api/classes/vec2#static-crossvec2vec2) -* [distance](/api/classes/vec2#static-distance) -* [distanceSquared](/api/classes/vec2#static-distancesquared) -* [dot](/api/classes/vec2#static-dot) -* [isValid](/api/classes/vec2#static-isvalid) -* [lengthOf](/api/classes/vec2#static-lengthof) -* [lengthSquared](/api/classes/vec2#static-lengthsquared) -* [lower](/api/classes/vec2#static-lower) -* [mid](/api/classes/vec2#static-mid) -* [mul](/api/classes/vec2#static-mul) -* [mulNumVec2](/api/classes/vec2#static-mulnumvec2) -* [mulVec2Num](/api/classes/vec2#static-mulvec2num) -* [neg](/api/classes/vec2#static-neg) -* [skew](/api/classes/vec2#static-skew) -* [sub](/api/classes/vec2#static-sub) -* [upper](/api/classes/vec2#static-upper) -* [zero](/api/classes/vec2#static-zero) +2D vector ## Constructors -### constructor +### new Vec2() + +> **new Vec2**(`x`, `y`): [`Vec2`](Vec2) + +#### Parameters + +• **x**: `number` -\+ **new Vec2**(`x`: number, `y`: number): *[Vec2](/api/classes/vec2)* +• **y**: `number` -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`x` | number | -`y` | number | +[`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +### new Vec2() -\+ **new Vec2**(`obj`: object): *[Vec2](/api/classes/vec2)* +> **new Vec2**(`obj`): [`Vec2`](Vec2) -**Parameters:** +#### Parameters -▪ **obj**: *object* +• **obj**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`x` | number | -`y` | number | +#### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) -\+ **new Vec2**(): *[Vec2](/api/classes/vec2)* +### new Vec2() -**Returns:** *[Vec2](/api/classes/vec2)* +> **new Vec2**(): [`Vec2`](Vec2) + +#### Returns + +[`Vec2`](Vec2) ## Properties -### x +### x -• **x**: *number* +> **x**: `number` -___ +*** -### y +### y -• **y**: *number* +> **y**: `number` ## Methods -### add +### add() -▸ **add**(`w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> **add**(`w`): [`Vec2`](Vec2) Add a vector to this vector. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`w` | [Vec2Value](/api/interfaces/vec2value) | +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) this -___ +*** -### addCombine +### addCombine() -▸ **addCombine**(`a`: number, `v`: [Vec2Value](/api/interfaces/vec2value), `b`: number, `w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> **addCombine**(`a`, `v`, `b`, `w`): [`Vec2`](Vec2) Add linear combination of v and w: `a * v + b * w` -**Parameters:** +#### Parameters + +• **a**: `number` -Name | Type | ------- | ------ | -`a` | number | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`b` | number | -`w` | [Vec2Value](/api/interfaces/vec2value) | +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +• **b**: `number` -___ +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -### addMul +#### Returns -▸ **addMul**(`a`: number, `v`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) -**Parameters:** +*** -Name | Type | ------- | ------ | -`a` | number | -`v` | [Vec2Value](/api/interfaces/vec2value) | +### addMul() -**Returns:** *[Vec2](/api/classes/vec2)* +> **addMul**(`a`, `v`): [`Vec2`](Vec2) -___ +#### Parameters -### clamp +• **a**: `number` -▸ **clamp**(`max`: number): *[Vec2](/api/classes/vec2)* +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`max` | number | +[`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +*** -___ +### clamp() -### clone +> **clamp**(`max`): [`Vec2`](Vec2) -▸ **clone**(): *[Vec2](/api/classes/vec2)* +#### Parameters -**Returns:** *[Vec2](/api/classes/vec2)* +• **max**: `number` -___ +#### Returns -### length +[`Vec2`](Vec2) -▸ **length**(): *number* +*** + +### clone() + +> **clone**(): [`Vec2`](Vec2) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### length() + +> **length**(): `number` Get the length of this vector (the norm). For performance, use this instead of lengthSquared (if possible). -**Returns:** *number* +#### Returns + +`number` -___ +*** -### lengthSquared +### lengthSquared() -▸ **lengthSquared**(): *number* +> **lengthSquared**(): `number` Get the length squared. -**Returns:** *number* +#### Returns -___ +`number` -### mul +*** -▸ **mul**(`m`: number): *[Vec2](/api/classes/vec2)* +### mul() + +> **mul**(`m`): [`Vec2`](Vec2) Multiply this vector by a scalar. -**Parameters:** +#### Parameters + +• **m**: `number` -Name | Type | ------- | ------ | -`m` | number | +#### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) this -___ +*** -### neg +### neg() -▸ **neg**(): *[Vec2](/api/classes/vec2)* +> **neg**(): [`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### normalize +*** -▸ **normalize**(): *number* +### normalize() + +> **normalize**(): `number` Convert this vector into a unit vector. -**Returns:** *number* +#### Returns + +`number` old length -___ +*** -### set +### set() -▸ **set**(`x`: number, `y`: number): *[Vec2](/api/classes/vec2)* +Set this vector to some specified coordinates. + +#### set(x, y) + +> **set**(`x`, `y`): [`Vec2`](Vec2) Set this vector to some specified coordinates. -**Parameters:** +##### Parameters -Name | Type | ------- | ------ | -`x` | number | -`y` | number | +• **x**: `number` -**Returns:** *[Vec2](/api/classes/vec2)* +• **y**: `number` -this +##### Returns -▸ **set**(`value`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) + +#### set(value) + +> **set**(`value`): [`Vec2`](Vec2) Set this vector to some specified coordinates. -**Parameters:** +##### Parameters -Name | Type | ------- | ------ | -`value` | [Vec2Value](/api/interfaces/vec2value) | +• **value**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +##### Returns -this +[`Vec2`](Vec2) -___ +*** -### setCombine +### setCombine() -▸ **setCombine**(`a`: number, `v`: [Vec2Value](/api/interfaces/vec2value), `b`: number, `w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> **setCombine**(`a`, `v`, `b`, `w`): [`Vec2`](Vec2) Set linear combination of v and w: `a * v + b * w` -**Parameters:** +#### Parameters + +• **a**: `number` + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **b**: `number` + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`a` | number | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`b` | number | -`w` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) -___ +*** -### setMul +### setMul() -▸ **setMul**(`a`: number, `v`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> **setMul**(`a`, `v`): [`Vec2`](Vec2) -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`a` | number | -`v` | [Vec2Value](/api/interfaces/vec2value) | +• **a**: `number` -**Returns:** *[Vec2](/api/classes/vec2)* +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -___ +#### Returns -### setNum +[`Vec2`](Vec2) -▸ **setNum**(`x`: number, `y`: number): *this* +*** + +### setNum() + +> **setNum**(`x`, `y`): [`Vec2`](Vec2) Set this vector to some specified coordinates. -**Parameters:** +#### Parameters + +• **x**: `number` + +• **y**: `number` -Name | Type | ------- | ------ | -`x` | number | -`y` | number | +#### Returns -**Returns:** *this* +[`Vec2`](Vec2) this -___ +*** -### setVec2 +### setVec2() -▸ **setVec2**(`value`: [Vec2Value](/api/interfaces/vec2value)): *this* +> **setVec2**(`value`): [`Vec2`](Vec2) Set this vector to some specified coordinates. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`value` | [Vec2Value](/api/interfaces/vec2value) | +• **value**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *this* +#### Returns + +[`Vec2`](Vec2) this -___ +*** -### setZero +### setZero() -▸ **setZero**(): *[Vec2](/api/classes/vec2)* +> **setZero**(): [`Vec2`](Vec2) Set this vector to all zeros. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) this -___ +*** -### sub +### sub() -▸ **sub**(`w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> **sub**(`w`): [`Vec2`](Vec2) Subtract a vector from this vector -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`w` | [Vec2Value](/api/interfaces/vec2value) | +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) this -___ +*** -### subCombine +### subCombine() -▸ **subCombine**(`a`: number, `v`: [Vec2Value](/api/interfaces/vec2value), `b`: number, `w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> **subCombine**(`a`, `v`, `b`, `w`): [`Vec2`](Vec2) Subtract linear combination of v and w: `a * v + b * w` -**Parameters:** +#### Parameters + +• **a**: `number` + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **b**: `number` + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### subMul() -Name | Type | ------- | ------ | -`a` | number | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`b` | number | -`w` | [Vec2Value](/api/interfaces/vec2value) | +> **subMul**(`a`, `v`): [`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Parameters -___ +• **a**: `number` -### subMul +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **subMul**(`a`: number, `v`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +#### Returns -**Parameters:** +[`Vec2`](Vec2) -Name | Type | ------- | ------ | -`a` | number | -`v` | [Vec2Value](/api/interfaces/vec2value) | +*** -**Returns:** *[Vec2](/api/classes/vec2)* +### ~~wSub()~~ -___ +> **wSub**(`a`, `v`, `b`?, `w`?): [`Vec2`](Vec2) -### wSub +#### Parameters -▸ **wSub**(`a`: number, `v`: [Vec2Value](/api/interfaces/vec2value), `b?`: number, `w?`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +• **a**: `number` -**`deprecated`** Use subCombine or subMul +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -**Parameters:** +• **b?**: `number` -Name | Type | ------- | ------ | -`a` | number | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`b?` | number | -`w?` | [Vec2Value](/api/interfaces/vec2value) | +• **w?**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### `Static` abs +#### Deprecated -▸ **abs**(`v`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +Use subCombine or subMul -**Parameters:** +*** -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | +### abs() -**Returns:** *[Vec2](/api/classes/vec2)* +> `static` **abs**(`v`): [`Vec2`](Vec2) -___ +#### Parameters -### `Static` add +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **add**(`v`: [Vec2Value](/api/interfaces/vec2value), `w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +#### Returns -**Parameters:** +[`Vec2`](Vec2) -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | [Vec2Value](/api/interfaces/vec2value) | +*** -**Returns:** *[Vec2](/api/classes/vec2)* +### add() -___ +> `static` **add**(`v`, `w`): [`Vec2`](Vec2) -### `Static` addCross +#### Parameters -▸ **addCross**(`a`: [Vec2Value](/api/interfaces/vec2value), `v`: [Vec2Value](/api/interfaces/vec2value), `w`: number): *[Vec2](/api/classes/vec2)* +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### addCross() + +#### addCross(a, v, w) + +> `static` **addCross**(`a`, `v`, `w`): [`Vec2`](Vec2) Returns `a + (v x w)` -**Parameters:** +##### Parameters + +• **a**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`a` | [Vec2Value](/api/interfaces/vec2value) | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | number | +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +• **w**: `number` -▸ **addCross**(`a`: [Vec2Value](/api/interfaces/vec2value), `v`: number, `w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +##### Returns + +[`Vec2`](Vec2) + +#### addCross(a, v, w) + +> `static` **addCross**(`a`, `v`, `w`): [`Vec2`](Vec2) Returns `a + (v x w)` -**Parameters:** +##### Parameters + +• **a**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`a` | [Vec2Value](/api/interfaces/vec2value) | -`v` | number | -`w` | [Vec2Value](/api/interfaces/vec2value) | +• **v**: `number` -**Returns:** *[Vec2](/api/classes/vec2)* +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -___ +##### Returns -### `Static` addCrossNumVec2 +[`Vec2`](Vec2) -▸ **addCrossNumVec2**(`a`: [Vec2Value](/api/interfaces/vec2value), `v`: number, `w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +*** + +### addCrossNumVec2() + +> `static` **addCrossNumVec2**(`a`, `v`, `w`): [`Vec2`](Vec2) Returns `a + (v x w)` -**Parameters:** +#### Parameters + +• **a**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`a` | [Vec2Value](/api/interfaces/vec2value) | -`v` | number | -`w` | [Vec2Value](/api/interfaces/vec2value) | +• **v**: `number` -**Returns:** *[Vec2](/api/classes/vec2)* +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -___ +#### Returns -### `Static` addCrossVec2Num +[`Vec2`](Vec2) -▸ **addCrossVec2Num**(`a`: [Vec2Value](/api/interfaces/vec2value), `v`: [Vec2Value](/api/interfaces/vec2value), `w`: number): *[Vec2](/api/classes/vec2)* +*** + +### addCrossVec2Num() + +> `static` **addCrossVec2Num**(`a`, `v`, `w`): [`Vec2`](Vec2) Returns `a + (v x w)` -**Parameters:** +#### Parameters + +• **a**: [`Vec2Value`](../interfaces/Vec2Value) + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: `number` + +#### Returns + +[`Vec2`](Vec2) + +*** + +### areEqual() + +> `static` **areEqual**(`v`, `w`): `boolean` + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`boolean` -Name | Type | ------- | ------ | -`a` | [Vec2Value](/api/interfaces/vec2value) | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | number | +*** -**Returns:** *[Vec2](/api/classes/vec2)* +### assert() -___ +> `static` **assert**(`o`): `void` -### `Static` areEqual +#### Parameters -▸ **areEqual**(`v`: [Vec2Value](/api/interfaces/vec2value), `w`: [Vec2Value](/api/interfaces/vec2value)): *boolean* +• **o**: `any` -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | [Vec2Value](/api/interfaces/vec2value) | +`void` -**Returns:** *boolean* +*** -___ +### clamp() -### `Static` assert +> `static` **clamp**(`v`, `max`): [`Vec2`](Vec2) -▸ **assert**(`o`: any): *void* +#### Parameters -**Parameters:** +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`o` | any | +• **max**: `number` -**Returns:** *void* +#### Returns -___ +[`Vec2`](Vec2) -### `Static` clamp +*** -▸ **clamp**(`v`: [Vec2Value](/api/interfaces/vec2value), `max`: number): *[Vec2](/api/classes/vec2)* +### clone() -**Parameters:** +> `static` **clone**(`v`): [`Vec2`](Vec2) -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`max` | number | +#### Parameters -**Returns:** *[Vec2](/api/classes/vec2)* +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -___ +#### Returns -### `Static` clone +[`Vec2`](Vec2) -▸ **clone**(`v`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +*** -**Parameters:** +### combine() -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | +> `static` **combine**(`a`, `v`, `b`, `w`): [`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Parameters -___ +• **a**: `number` -### `Static` combine +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **combine**(`a`: number, `v`: [Vec2Value](/api/interfaces/vec2value), `b`: number, `w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +• **b**: `number` -**Parameters:** +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`a` | number | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`b` | number | -`w` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) -___ +*** -### `Static` cross +### cross() -▸ **cross**(`v`: [Vec2Value](/api/interfaces/vec2value), `w`: [Vec2Value](/api/interfaces/vec2value)): *number* +#### cross(v, w) + +> `static` **cross**(`v`, `w`): `number` Cross product between two vectors -**Parameters:** +##### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) + +##### Returns -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | [Vec2Value](/api/interfaces/vec2value) | +`number` -**Returns:** *number* +#### cross(v, w) -▸ **cross**(`v`: [Vec2Value](/api/interfaces/vec2value), `w`: number): *[Vec2](/api/classes/vec2)* +> `static` **cross**(`v`, `w`): [`Vec2`](Vec2) Cross product between a vector and a scalar -**Parameters:** +##### Parameters -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | number | +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +• **w**: `number` -▸ **cross**(`v`: number, `w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +##### Returns + +[`Vec2`](Vec2) + +#### cross(v, w) + +> `static` **cross**(`v`, `w`): [`Vec2`](Vec2) Cross product between a scalar and a vector -**Parameters:** +##### Parameters + +• **v**: `number` -Name | Type | ------- | ------ | -`v` | number | -`w` | [Vec2Value](/api/interfaces/vec2value) | +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +##### Returns -___ +[`Vec2`](Vec2) -### `Static` crossNumVec2 +*** -▸ **crossNumVec2**(`v`: number, `w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +### crossNumVec2() + +> `static` **crossNumVec2**(`v`, `w`): [`Vec2`](Vec2) Cross product on a vector and a scalar -**Parameters:** +#### Parameters + +• **v**: `number` -Name | Type | ------- | ------ | -`v` | number | -`w` | [Vec2Value](/api/interfaces/vec2value) | +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### `Static` crossVec2Num +*** -▸ **crossVec2Num**(`v`: [Vec2Value](/api/interfaces/vec2value), `w`: number): *[Vec2](/api/classes/vec2)* +### crossVec2Num() + +> `static` **crossVec2Num**(`v`, `w`): [`Vec2`](Vec2) Cross product on a vector and a scalar -**Parameters:** +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | number | +• **w**: `number` -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### `Static` crossVec2Vec2 +*** -▸ **crossVec2Vec2**(`v`: [Vec2Value](/api/interfaces/vec2value), `w`: [Vec2Value](/api/interfaces/vec2value)): *number* +### crossVec2Vec2() + +> `static` **crossVec2Vec2**(`v`, `w`): `number` Cross product on two vectors -**Parameters:** +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *number* +`number` -___ +*** -### `Static` distance +### distance() -▸ **distance**(`v`: [Vec2Value](/api/interfaces/vec2value), `w`: [Vec2Value](/api/interfaces/vec2value)): *number* +> `static` **distance**(`v`, `w`): `number` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | [Vec2Value](/api/interfaces/vec2value) | +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *number* +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -___ +#### Returns -### `Static` distanceSquared +`number` -▸ **distanceSquared**(`v`: [Vec2Value](/api/interfaces/vec2value), `w`: [Vec2Value](/api/interfaces/vec2value)): *number* +*** -**Parameters:** +### distanceSquared() -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | [Vec2Value](/api/interfaces/vec2value) | +> `static` **distanceSquared**(`v`, `w`): `number` -**Returns:** *number* +#### Parameters -___ +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -### `Static` dot +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **dot**(`v`: [Vec2Value](/api/interfaces/vec2value), `w`: [Vec2Value](/api/interfaces/vec2value)): *number* +#### Returns + +`number` + +*** + +### dot() + +> `static` **dot**(`v`, `w`): `number` Dot product on two vectors -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | [Vec2Value](/api/interfaces/vec2value) | +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *number* +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -___ +#### Returns -### `Static` isValid +`number` -▸ **isValid**(`obj`: any): *boolean* +*** + +### isValid() + +> `static` **isValid**(`obj`): `boolean` Does this vector contain finite coordinates? -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`obj` | any | +• **obj**: `any` -**Returns:** *boolean* +#### Returns -___ +`boolean` -### `Static` lengthOf +*** -▸ **lengthOf**(`v`: [Vec2Value](/api/interfaces/vec2value)): *number* +### lengthOf() + +> `static` **lengthOf**(`v`): `number` Get the length of this vector (the norm). For performance, use this instead of lengthSquared (if possible). -**Parameters:** +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | +#### Returns -**Returns:** *number* +`number` -___ +*** -### `Static` lengthSquared +### lengthSquared() -▸ **lengthSquared**(`v`: [Vec2Value](/api/interfaces/vec2value)): *number* +> `static` **lengthSquared**(`v`): `number` Get the length squared. -**Parameters:** +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +`number` + +*** + +### lower() + +> `static` **lower**(`v`, `w`): [`Vec2`](Vec2) + +#### Parameters -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *number* +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -___ +#### Returns -### `Static` lower +[`Vec2`](Vec2) -▸ **lower**(`v`: [Vec2Value](/api/interfaces/vec2value), `w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +*** -**Parameters:** +### mid() -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | [Vec2Value](/api/interfaces/vec2value) | +> `static` **mid**(`v`, `w`): [`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +#### Parameters -___ +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -### `Static` mid +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **mid**(`v`: [Vec2Value](/api/interfaces/vec2value), `w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +#### Returns -**Parameters:** +[`Vec2`](Vec2) -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | [Vec2Value](/api/interfaces/vec2value) | +*** -**Returns:** *[Vec2](/api/classes/vec2)* +### mul() -___ +#### mul(a, b) -### `Static` mul +> `static` **mul**(`a`, `b`): [`Vec2`](Vec2) -▸ **mul**(`a`: [Vec2Value](/api/interfaces/vec2value), `b`: number): *[Vec2](/api/classes/vec2)* +##### Parameters -**Parameters:** +• **a**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`a` | [Vec2Value](/api/interfaces/vec2value) | -`b` | number | +• **b**: `number` -**Returns:** *[Vec2](/api/classes/vec2)* +##### Returns -▸ **mul**(`a`: number, `b`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) -**Parameters:** +#### mul(a, b) -Name | Type | ------- | ------ | -`a` | number | -`b` | [Vec2Value](/api/interfaces/vec2value) | +> `static` **mul**(`a`, `b`): [`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +##### Parameters -___ +• **a**: `number` -### `Static` mulNumVec2 +• **b**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **mulNumVec2**(`a`: number, `b`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +##### Returns -**Parameters:** +[`Vec2`](Vec2) -Name | Type | ------- | ------ | -`a` | number | -`b` | [Vec2Value](/api/interfaces/vec2value) | +*** -**Returns:** *[Vec2](/api/classes/vec2)* +### mulNumVec2() -___ +> `static` **mulNumVec2**(`a`, `b`): [`Vec2`](Vec2) -### `Static` mulVec2Num +#### Parameters -▸ **mulVec2Num**(`a`: [Vec2Value](/api/interfaces/vec2value), `b`: number): *[Vec2](/api/classes/vec2)* +• **a**: `number` -**Parameters:** +• **b**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`a` | [Vec2Value](/api/interfaces/vec2value) | -`b` | number | +#### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) -___ +*** -### `Static` neg +### mulVec2Num() -▸ **neg**(`v`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +> `static` **mulVec2Num**(`a`, `b`): [`Vec2`](Vec2) -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | +• **a**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *[Vec2](/api/classes/vec2)* +• **b**: `number` -___ +#### Returns -### `Static` skew +[`Vec2`](Vec2) -▸ **skew**(`v`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +*** + +### neg() + +> `static` **neg**(`v`): [`Vec2`](Vec2) + +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### skew() + +> `static` **skew**(`v`): [`Vec2`](Vec2) Get the skew vector such that dot(skew_vec, other) == cross(vec, other) -**Parameters:** +#### Parameters + +• **v**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns + +[`Vec2`](Vec2) + +*** + +### sub() + +> `static` **sub**(`v`, `w`): [`Vec2`](Vec2) -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | +#### Parameters -**Returns:** *[Vec2](/api/classes/vec2)* +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -___ +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -### `Static` sub +#### Returns -▸ **sub**(`v`: [Vec2Value](/api/interfaces/vec2value), `w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) -**Parameters:** +*** -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | [Vec2Value](/api/interfaces/vec2value) | +### upper() -**Returns:** *[Vec2](/api/classes/vec2)* +> `static` **upper**(`v`, `w`): [`Vec2`](Vec2) -___ +#### Parameters -### `Static` upper +• **v**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **upper**(`v`: [Vec2Value](/api/interfaces/vec2value), `w`: [Vec2Value](/api/interfaces/vec2value)): *[Vec2](/api/classes/vec2)* +• **w**: [`Vec2Value`](../interfaces/Vec2Value) -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`v` | [Vec2Value](/api/interfaces/vec2value) | -`w` | [Vec2Value](/api/interfaces/vec2value) | +[`Vec2`](Vec2) -**Returns:** *[Vec2](/api/classes/vec2)* +*** -___ +### zero() -### `Static` zero +> `static` **zero**(): [`Vec2`](Vec2) -▸ **zero**(): *[Vec2](/api/classes/vec2)* +#### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) diff --git a/docs/pages/api/classes/vec3.md b/docs/pages/api/classes/vec3.md index 7ed9619d..c52ad1cd 100644 --- a/docs/pages/api/classes/vec3.md +++ b/docs/pages/api/classes/vec3.md @@ -1,324 +1,307 @@ - # Class: Vec3 -## Hierarchy - -* **Vec3** +3D vector -## Index - -### Constructors +## Constructors -* [constructor](/api/classes/vec3#constructor) +### new Vec3() -### Properties +> **new Vec3**(`x`, `y`, `z`): [`Vec3`](Vec3) -* [x](/api/classes/vec3#x) -* [y](/api/classes/vec3#y) -* [z](/api/classes/vec3#z) +#### Parameters -### Methods +• **x**: `number` -* [add](/api/classes/vec3#add) -* [mul](/api/classes/vec3#mul) -* [neg](/api/classes/vec3#neg) -* [set](/api/classes/vec3#set) -* [setZero](/api/classes/vec3#setzero) -* [sub](/api/classes/vec3#sub) -* [add](/api/classes/vec3#static-add) -* [areEqual](/api/classes/vec3#static-areequal) -* [assert](/api/classes/vec3#static-assert) -* [clone](/api/classes/vec3#static-clone) -* [cross](/api/classes/vec3#static-cross) -* [dot](/api/classes/vec3#static-dot) -* [isValid](/api/classes/vec3#static-isvalid) -* [mul](/api/classes/vec3#static-mul) -* [neg](/api/classes/vec3#static-neg) -* [sub](/api/classes/vec3#static-sub) -* [zero](/api/classes/vec3#static-zero) +• **y**: `number` -## Constructors +• **z**: `number` -### constructor +#### Returns -\+ **new Vec3**(`x`: number, `y`: number, `z`: number): *[Vec3](/api/classes/vec3)* +[`Vec3`](Vec3) -**Parameters:** +### new Vec3() -Name | Type | ------- | ------ | -`x` | number | -`y` | number | -`z` | number | +> **new Vec3**(`obj`): [`Vec3`](Vec3) -**Returns:** *[Vec3](/api/classes/vec3)* +#### Parameters -\+ **new Vec3**(`obj`: object): *[Vec3](/api/classes/vec3)* +• **obj**: [`Vec3Value`](../interfaces/Vec3Value) -**Parameters:** +#### Returns -▪ **obj**: *object* +[`Vec3`](Vec3) -Name | Type | ------- | ------ | -`x` | number | -`y` | number | -`z` | number | +### new Vec3() -**Returns:** *[Vec3](/api/classes/vec3)* +> **new Vec3**(): [`Vec3`](Vec3) -\+ **new Vec3**(): *[Vec3](/api/classes/vec3)* +#### Returns -**Returns:** *[Vec3](/api/classes/vec3)* +[`Vec3`](Vec3) ## Properties -### x +### x -• **x**: *number* +> **x**: `number` -___ +*** -### y +### y -• **y**: *number* +> **y**: `number` -___ +*** -### z +### z -• **z**: *number* +> **z**: `number` ## Methods -### add +### add() + +> **add**(`w`): [`Vec3`](Vec3) + +#### Parameters + +• **w**: [`Vec3Value`](../interfaces/Vec3Value) + +#### Returns + +[`Vec3`](Vec3) + +*** + +### mul() + +> **mul**(`m`): [`Vec3`](Vec3) + +#### Parameters + +• **m**: `number` -▸ **add**(`w`: [Vec3Value](/api/interfaces/vec3value)): *[Vec3](/api/classes/vec3)* +#### Returns -**Parameters:** +[`Vec3`](Vec3) -Name | Type | ------- | ------ | -`w` | [Vec3Value](/api/interfaces/vec3value) | +*** -**Returns:** *[Vec3](/api/classes/vec3)* +### neg() -___ +> **neg**(): [`Vec3`](Vec3) -### mul +#### Returns -▸ **mul**(`m`: number): *[Vec3](/api/classes/vec3)* +[`Vec3`](Vec3) -**Parameters:** +*** -Name | Type | ------- | ------ | -`m` | number | +### set() -**Returns:** *[Vec3](/api/classes/vec3)* +> **set**(`x`, `y`, `z`): [`Vec3`](Vec3) -___ +#### Parameters -### neg +• **x**: `number` -▸ **neg**(): *[Vec3](/api/classes/vec3)* +• **y**: `number` -**Returns:** *[Vec3](/api/classes/vec3)* +• **z**: `number` -___ +#### Returns -### set +[`Vec3`](Vec3) -▸ **set**(`x`: number, `y`: number, `z`: number): *[Vec3](/api/classes/vec3)* +*** -**Parameters:** +### setZero() -Name | Type | ------- | ------ | -`x` | number | -`y` | number | -`z` | number | +> **setZero**(): [`Vec3`](Vec3) -**Returns:** *[Vec3](/api/classes/vec3)* +#### Returns -___ +[`Vec3`](Vec3) -### setZero +*** -▸ **setZero**(): *[Vec3](/api/classes/vec3)* +### sub() -**Returns:** *[Vec3](/api/classes/vec3)* +> **sub**(`w`): [`Vec3`](Vec3) -___ +#### Parameters -### sub +• **w**: [`Vec3Value`](../interfaces/Vec3Value) -▸ **sub**(`w`: [Vec3Value](/api/interfaces/vec3value)): *[Vec3](/api/classes/vec3)* +#### Returns -**Parameters:** +[`Vec3`](Vec3) -Name | Type | ------- | ------ | -`w` | [Vec3Value](/api/interfaces/vec3value) | +*** -**Returns:** *[Vec3](/api/classes/vec3)* +### add() -___ +> `static` **add**(`v`, `w`): [`Vec3`](Vec3) -### `Static` add +#### Parameters -▸ **add**(`v`: [Vec3Value](/api/interfaces/vec3value), `w`: [Vec3Value](/api/interfaces/vec3value)): *[Vec3](/api/classes/vec3)* +• **v**: [`Vec3Value`](../interfaces/Vec3Value) -**Parameters:** +• **w**: [`Vec3Value`](../interfaces/Vec3Value) -Name | Type | ------- | ------ | -`v` | [Vec3Value](/api/interfaces/vec3value) | -`w` | [Vec3Value](/api/interfaces/vec3value) | +#### Returns -**Returns:** *[Vec3](/api/classes/vec3)* +[`Vec3`](Vec3) -___ +*** -### `Static` areEqual +### areEqual() -▸ **areEqual**(`v`: [Vec3Value](/api/interfaces/vec3value), `w`: [Vec3Value](/api/interfaces/vec3value)): *boolean* +> `static` **areEqual**(`v`, `w`): `boolean` -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`v` | [Vec3Value](/api/interfaces/vec3value) | -`w` | [Vec3Value](/api/interfaces/vec3value) | +• **v**: [`Vec3Value`](../interfaces/Vec3Value) -**Returns:** *boolean* +• **w**: [`Vec3Value`](../interfaces/Vec3Value) -___ +#### Returns -### `Static` assert +`boolean` -▸ **assert**(`o`: any): *void* +*** -**Parameters:** +### assert() -Name | Type | ------- | ------ | -`o` | any | +> `static` **assert**(`o`): `void` -**Returns:** *void* +#### Parameters -___ +• **o**: `any` -### `Static` clone +#### Returns -▸ **clone**(`v`: [Vec3Value](/api/interfaces/vec3value)): *[Vec3](/api/classes/vec3)* +`void` -**Parameters:** +*** -Name | Type | ------- | ------ | -`v` | [Vec3Value](/api/interfaces/vec3value) | +### clone() -**Returns:** *[Vec3](/api/classes/vec3)* +> `static` **clone**(`v`): [`Vec3`](Vec3) -___ +#### Parameters -### `Static` cross +• **v**: [`Vec3Value`](../interfaces/Vec3Value) -▸ **cross**(`v`: [Vec3Value](/api/interfaces/vec3value), `w`: [Vec3Value](/api/interfaces/vec3value)): *[Vec3](/api/classes/vec3)* +#### Returns + +[`Vec3`](Vec3) + +*** + +### cross() + +> `static` **cross**(`v`, `w`): [`Vec3`](Vec3) Cross product on two vectors -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`v` | [Vec3Value](/api/interfaces/vec3value) | -`w` | [Vec3Value](/api/interfaces/vec3value) | +• **v**: [`Vec3Value`](../interfaces/Vec3Value) -**Returns:** *[Vec3](/api/classes/vec3)* +• **w**: [`Vec3Value`](../interfaces/Vec3Value) -___ +#### Returns -### `Static` dot +[`Vec3`](Vec3) -▸ **dot**(`v`: [Vec3Value](/api/interfaces/vec3value), `w`: [Vec3Value](/api/interfaces/vec3value)): *number* +*** + +### dot() + +> `static` **dot**(`v`, `w`): `number` Dot product on two vectors -**Parameters:** +#### Parameters + +• **v**: [`Vec3Value`](../interfaces/Vec3Value) + +• **w**: [`Vec3Value`](../interfaces/Vec3Value) -Name | Type | ------- | ------ | -`v` | [Vec3Value](/api/interfaces/vec3value) | -`w` | [Vec3Value](/api/interfaces/vec3value) | +#### Returns -**Returns:** *number* +`number` -___ +*** -### `Static` isValid +### isValid() -▸ **isValid**(`obj`: any): *boolean* +> `static` **isValid**(`obj`): `boolean` Does this vector contain finite coordinates? -**Parameters:** +#### Parameters + +• **obj**: `any` + +#### Returns + +`boolean` + +*** + +### mul() + +> `static` **mul**(`v`, `m`): [`Vec3`](Vec3) + +#### Parameters -Name | Type | ------- | ------ | -`obj` | any | +• **v**: [`Vec3Value`](../interfaces/Vec3Value) -**Returns:** *boolean* +• **m**: `number` -___ +#### Returns -### `Static` mul +[`Vec3`](Vec3) -▸ **mul**(`v`: [Vec3Value](/api/interfaces/vec3value), `m`: number): *[Vec3](/api/classes/vec3)* +*** -**Parameters:** +### neg() -Name | Type | ------- | ------ | -`v` | [Vec3Value](/api/interfaces/vec3value) | -`m` | number | +> `static` **neg**(`v`): [`Vec3`](Vec3) -**Returns:** *[Vec3](/api/classes/vec3)* +#### Parameters -___ +• **v**: [`Vec3Value`](../interfaces/Vec3Value) -### `Static` neg +#### Returns -▸ **neg**(`v`: [Vec3Value](/api/interfaces/vec3value)): *[Vec3](/api/classes/vec3)* +[`Vec3`](Vec3) -**Parameters:** +*** -Name | Type | ------- | ------ | -`v` | [Vec3Value](/api/interfaces/vec3value) | +### sub() -**Returns:** *[Vec3](/api/classes/vec3)* +> `static` **sub**(`v`, `w`): [`Vec3`](Vec3) -___ +#### Parameters -### `Static` sub +• **v**: [`Vec3Value`](../interfaces/Vec3Value) -▸ **sub**(`v`: [Vec3Value](/api/interfaces/vec3value), `w`: [Vec3Value](/api/interfaces/vec3value)): *[Vec3](/api/classes/vec3)* +• **w**: [`Vec3Value`](../interfaces/Vec3Value) -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`v` | [Vec3Value](/api/interfaces/vec3value) | -`w` | [Vec3Value](/api/interfaces/vec3value) | +[`Vec3`](Vec3) -**Returns:** *[Vec3](/api/classes/vec3)* +*** -___ +### zero() -### `Static` zero +> `static` **zero**(): [`Vec3`](Vec3) -▸ **zero**(): *[Vec3](/api/classes/vec3)* +#### Returns -**Returns:** *[Vec3](/api/classes/vec3)* +[`Vec3`](Vec3) diff --git a/docs/pages/api/classes/velocity.md b/docs/pages/api/classes/velocity.md deleted file mode 100644 index 3cb63d91..00000000 --- a/docs/pages/api/classes/velocity.md +++ /dev/null @@ -1,29 +0,0 @@ - -# Class: Velocity - -## Hierarchy - -* **Velocity** - -## Index - -### Properties - -* [v](/api/classes/velocity#v) -* [w](/api/classes/velocity#w) - -## Properties - -### v - -• **v**: *[Vec2](/api/classes/vec2)‹›* = Vec2.zero() - -linear - -___ - -### w - -• **w**: *number* = 0 - -angular diff --git a/docs/pages/api/classes/velocityconstraintpoint.md b/docs/pages/api/classes/velocityconstraintpoint.md index 68ce7b56..b2a6f24a 100644 --- a/docs/pages/api/classes/velocityconstraintpoint.md +++ b/docs/pages/api/classes/velocityconstraintpoint.md @@ -1,72 +1,63 @@ - # Class: VelocityConstraintPoint -## Hierarchy - -* **VelocityConstraintPoint** +## Constructors -## Index +### new VelocityConstraintPoint() -### Properties +> **new VelocityConstraintPoint**(): [`VelocityConstraintPoint`](VelocityConstraintPoint) -* [normalImpulse](/api/classes/velocityconstraintpoint#normalimpulse) -* [normalMass](/api/classes/velocityconstraintpoint#normalmass) -* [rA](/api/classes/velocityconstraintpoint#ra) -* [rB](/api/classes/velocityconstraintpoint#rb) -* [tangentImpulse](/api/classes/velocityconstraintpoint#tangentimpulse) -* [tangentMass](/api/classes/velocityconstraintpoint#tangentmass) -* [velocityBias](/api/classes/velocityconstraintpoint#velocitybias) +#### Returns -### Methods - -* [recycle](/api/classes/velocityconstraintpoint#recycle) +[`VelocityConstraintPoint`](VelocityConstraintPoint) ## Properties -### normalImpulse +### normalImpulse -• **normalImpulse**: *number* = 0 +> **normalImpulse**: `number` = `0` -___ +*** -### normalMass +### normalMass -• **normalMass**: *number* = 0 +> **normalMass**: `number` = `0` -___ +*** -### rA +### rA -• **rA**: *[Vec2Value](/api/interfaces/vec2value)* = matrix.vec2(0, 0) +> **rA**: [`Vec2Value`](../interfaces/Vec2Value) -___ +*** -### rB +### rB -• **rB**: *[Vec2Value](/api/interfaces/vec2value)* = matrix.vec2(0, 0) +> **rB**: [`Vec2Value`](../interfaces/Vec2Value) -___ +*** -### tangentImpulse +### tangentImpulse -• **tangentImpulse**: *number* = 0 +> **tangentImpulse**: `number` = `0` -___ +*** -### tangentMass +### tangentMass -• **tangentMass**: *number* = 0 +> **tangentMass**: `number` = `0` -___ +*** -### velocityBias +### velocityBias -• **velocityBias**: *number* = 0 +> **velocityBias**: `number` = `0` ## Methods -### recycle +### recycle() + +> **recycle**(): `void` -▸ **recycle**(): *void* +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/weldjoint.md b/docs/pages/api/classes/weldjoint.md index 8ca9e3fa..a2876be7 100644 --- a/docs/pages/api/classes/weldjoint.md +++ b/docs/pages/api/classes/weldjoint.md @@ -1,405 +1,436 @@ - # Class: WeldJoint A weld joint essentially glues two bodies together. A weld joint may distort somewhat because the island constraint solver is approximate. -## Hierarchy +## Extends -* [Joint](/api/classes/joint) +- [`Joint`](Joint) - ↳ **WeldJoint** +## Constructors -## Index +### new WeldJoint() -### Constructors +> **new WeldJoint**(`def`): [`WeldJoint`](WeldJoint) -* [constructor](/api/classes/weldjoint#constructor) +#### Parameters -### Properties +• **def**: [`WeldJointDef`](../interfaces/WeldJointDef) -* [style](/api/classes/weldjoint#style) -* [TYPE](/api/classes/weldjoint#static-type) +#### Returns -### Methods +[`WeldJoint`](WeldJoint) -* [getAnchorA](/api/classes/weldjoint#getanchora) -* [getAnchorB](/api/classes/weldjoint#getanchorb) -* [getBodyA](/api/classes/weldjoint#getbodya) -* [getBodyB](/api/classes/weldjoint#getbodyb) -* [getCollideConnected](/api/classes/weldjoint#getcollideconnected) -* [getDampingRatio](/api/classes/weldjoint#getdampingratio) -* [getFrequency](/api/classes/weldjoint#getfrequency) -* [getLocalAnchorA](/api/classes/weldjoint#getlocalanchora) -* [getLocalAnchorB](/api/classes/weldjoint#getlocalanchorb) -* [getNext](/api/classes/weldjoint#getnext) -* [getReactionForce](/api/classes/weldjoint#getreactionforce) -* [getReactionTorque](/api/classes/weldjoint#getreactiontorque) -* [getReferenceAngle](/api/classes/weldjoint#getreferenceangle) -* [getType](/api/classes/weldjoint#gettype) -* [getUserData](/api/classes/weldjoint#getuserdata) -* [initVelocityConstraints](/api/classes/weldjoint#initvelocityconstraints) -* [isActive](/api/classes/weldjoint#isactive) -* [setDampingRatio](/api/classes/weldjoint#setdampingratio) -* [setFrequency](/api/classes/weldjoint#setfrequency) -* [setUserData](/api/classes/weldjoint#setuserdata) -* [shiftOrigin](/api/classes/weldjoint#shiftorigin) -* [solvePositionConstraints](/api/classes/weldjoint#solvepositionconstraints) -* [solveVelocityConstraints](/api/classes/weldjoint#solvevelocityconstraints) +#### Overrides -## Constructors +[`Joint`](Joint).[`constructor`](Joint#constructors) -### constructor +### new WeldJoint() -\+ **new WeldJoint**(`def`: [WeldJointDef](/api/interfaces/weldjointdef)): *[WeldJoint](/api/classes/weldjoint)* +> **new WeldJoint**(`def`, `bodyA`, `bodyB`, `anchor`): [`WeldJoint`](WeldJoint) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +#### Parameters -**Parameters:** +• **def**: [`WeldJointOpt`](../interfaces/WeldJointOpt) -Name | Type | ------- | ------ | -`def` | [WeldJointDef](/api/interfaces/weldjointdef) | +• **bodyA**: [`Body`](Body) -**Returns:** *[WeldJoint](/api/classes/weldjoint)* +• **bodyB**: [`Body`](Body) -\+ **new WeldJoint**(`def`: [WeldJointOpt](/api/interfaces/weldjointopt), `bodyA`: [Body](/api/classes/body), `bodyB`: [Body](/api/classes/body), `anchor`: [Vec2Value](/api/interfaces/vec2value)): *[WeldJoint](/api/classes/weldjoint)* +• **anchor**: [`Vec2Value`](../interfaces/Vec2Value) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +#### Returns -**Parameters:** +[`WeldJoint`](WeldJoint) -Name | Type | ------- | ------ | -`def` | [WeldJointOpt](/api/interfaces/weldjointopt) | -`bodyA` | [Body](/api/classes/body) | -`bodyB` | [Body](/api/classes/body) | -`anchor` | [Vec2Value](/api/interfaces/vec2value) | +#### Overrides -**Returns:** *[WeldJoint](/api/classes/weldjoint)* +[`Joint`](Joint).[`constructor`](Joint#constructors) ## Properties -### style +### style -• **style**: *[Style](/api/interfaces/style)* - -*Inherited from [Joint](/api/classes/joint).[style](/api/classes/joint#style)* +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. -___ +#### Inherited from -### `Static` TYPE +[`Joint`](Joint).[`style`](Joint#style) -▪ **TYPE**: *"weld-joint"* = "weld-joint" as const +*** -## Methods +### TYPE + +> `static` **TYPE**: `"weld-joint"` -### getAnchorA +## Methods -▸ **getAnchorA**(): *[Vec2](/api/classes/vec2)* +### getAnchorA() -*Overrides [Joint](/api/classes/joint).[getAnchorA](/api/classes/joint#abstract-getanchora)* +> **getAnchorA**(): [`Vec2`](Vec2) Get the anchor point on bodyA in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) + +#### Overrides -___ +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) -### getAnchorB +*** -▸ **getAnchorB**(): *[Vec2](/api/classes/vec2)* +### getAnchorB() -*Overrides [Joint](/api/classes/joint).[getAnchorB](/api/classes/joint#abstract-getanchorb)* +> **getAnchorB**(): [`Vec2`](Vec2) Get the anchor point on bodyB in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getBodyA +#### Overrides -▸ **getBodyA**(): *[Body](/api/classes/body)* +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) -*Inherited from [Joint](/api/classes/joint).[getBodyA](/api/classes/joint#getbodya)* +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) Get the first body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) -___ +#### Inherited from -### getBodyB +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) -▸ **getBodyB**(): *[Body](/api/classes/body)* +*** -*Inherited from [Joint](/api/classes/joint).[getBodyB](/api/classes/joint#getbodyb)* +### getBodyB() + +> **getBodyB**(): [`Body`](Body) Get the second body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) + +#### Inherited from -___ +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) -### getCollideConnected +*** -▸ **getCollideConnected**(): *boolean* +### getCollideConnected() -*Inherited from [Joint](/api/classes/joint).[getCollideConnected](/api/classes/joint#getcollideconnected)* +> **getCollideConnected**(): `boolean` Get collide connected. Note: modifying the collide connect flag won't work correctly because the flag is only checked when fixture AABBs begin to overlap. -**Returns:** *boolean* +#### Returns + +`boolean` + +#### Inherited from + +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) -___ +*** -### getDampingRatio +### getDampingRatio() -▸ **getDampingRatio**(): *number* +> **getDampingRatio**(): `number` Get damping ratio. -**Returns:** *number* +#### Returns -___ +`number` -### getFrequency +*** -▸ **getFrequency**(): *number* +### getFrequency() + +> **getFrequency**(): `number` Get frequency in Hz. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getLocalAnchorA +### getLocalAnchorA() -▸ **getLocalAnchorA**(): *[Vec2](/api/classes/vec2)* +> **getLocalAnchorA**(): [`Vec2`](Vec2) The local anchor point relative to bodyA's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getLocalAnchorB +### getLocalAnchorB() -▸ **getLocalAnchorB**(): *[Vec2](/api/classes/vec2)* +> **getLocalAnchorB**(): [`Vec2`](Vec2) The local anchor point relative to bodyB's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getNext +*** -▸ **getNext**(): *[Joint](/api/classes/joint)* +### getNext() -*Inherited from [Joint](/api/classes/joint).[getNext](/api/classes/joint#getnext)* +> **getNext**(): [`Joint`](Joint) Get the next joint the world joint list. -**Returns:** *[Joint](/api/classes/joint)* +#### Returns -___ +[`Joint`](Joint) -### getReactionForce +#### Inherited from -▸ **getReactionForce**(`inv_dt`: number): *[Vec2](/api/classes/vec2)* +[`Joint`](Joint).[`getNext`](Joint#getnext) -*Overrides [Joint](/api/classes/joint).[getReactionForce](/api/classes/joint#abstract-getreactionforce)* +*** + +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) Get the reaction force on bodyB at the joint anchor in Newtons. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` -Name | Type | ------- | ------ | -`inv_dt` | number | +#### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) -___ +#### Overrides -### getReactionTorque +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) -▸ **getReactionTorque**(`inv_dt`: number): *number* +*** -*Overrides [Joint](/api/classes/joint).[getReactionTorque](/api/classes/joint#abstract-getreactiontorque)* +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` Get the reaction torque on bodyB in N*m. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` + +#### Returns -Name | Type | ------- | ------ | -`inv_dt` | number | +`number` -**Returns:** *number* +#### Overrides -___ +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) -### getReferenceAngle +*** -▸ **getReferenceAngle**(): *number* +### getReferenceAngle() + +> **getReferenceAngle**(): `number` Get the reference angle. -**Returns:** *number* +#### Returns -___ +`number` -### getType +*** -▸ **getType**(): *string* +### getType() -*Inherited from [Joint](/api/classes/joint).[getType](/api/classes/joint#gettype)* +> **getType**(): `string` Get the type of the concrete joint. -**Returns:** *string* +#### Returns + +`string` + +#### Inherited from -___ +[`Joint`](Joint).[`getType`](Joint#gettype) -### getUserData +*** -▸ **getUserData**(): *unknown* +### getUserData() -*Inherited from [Joint](/api/classes/joint).[getUserData](/api/classes/joint#getuserdata)* +> **getUserData**(): `unknown` -**Returns:** *unknown* +#### Returns -___ +`unknown` -### initVelocityConstraints +#### Inherited from -▸ **initVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) -*Overrides [Joint](/api/classes/joint).[initVelocityConstraints](/api/classes/joint#abstract-initvelocityconstraints)* +*** -**Parameters:** +### initVelocityConstraints() -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +> **initVelocityConstraints**(`step`): `void` -**Returns:** *void* +#### Parameters -___ +• **step**: [`TimeStep`](TimeStep) -### isActive +#### Returns -▸ **isActive**(): *boolean* +`void` -*Inherited from [Joint](/api/classes/joint).[isActive](/api/classes/joint#isactive)* +#### Overrides + +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` Short-cut function to determine if either body is inactive. -**Returns:** *boolean* +#### Returns + +`boolean` + +#### Inherited from -___ +[`Joint`](Joint).[`isActive`](Joint#isactive) -### setDampingRatio +*** -▸ **setDampingRatio**(`ratio`: number): *void* +### setDampingRatio() + +> **setDampingRatio**(`ratio`): `void` Set damping ratio. -**Parameters:** +#### Parameters + +• **ratio**: `number` -Name | Type | ------- | ------ | -`ratio` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setFrequency +### setFrequency() -▸ **setFrequency**(`hz`: number): *void* +> **setFrequency**(`hz`): `void` Set frequency in Hz. -**Parameters:** +#### Parameters + +• **hz**: `number` -Name | Type | ------- | ------ | -`hz` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setUserData +### setUserData() -▸ **setUserData**(`data`: unknown): *void* +> **setUserData**(`data`): `void` -*Inherited from [Joint](/api/classes/joint).[setUserData](/api/classes/joint#setuserdata)* +#### Parameters -**Parameters:** +• **data**: `unknown` -Name | Type | ------- | ------ | -`data` | unknown | +#### Returns -**Returns:** *void* +`void` -___ +#### Inherited from -### shiftOrigin +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +*** -*Inherited from [Joint](/api/classes/joint).[shiftOrigin](/api/classes/joint#shiftorigin)* +### shiftOrigin() + +> **shiftOrigin**(`newOrigin`): `void` Shift the origin for any points stored in world coordinates. -**Parameters:** +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns -Name | Type | ------- | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | +`void` -**Returns:** *void* +#### Inherited from -___ +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) -### solvePositionConstraints +*** -▸ **solvePositionConstraints**(`step`: [TimeStep](/api/classes/timestep)): *boolean* +### solvePositionConstraints() -*Overrides [Joint](/api/classes/joint).[solvePositionConstraints](/api/classes/joint#abstract-solvepositionconstraints)* +> **solvePositionConstraints**(`step`): `boolean` This returns true if the position errors are within tolerance. -**Parameters:** +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +*** -**Returns:** *boolean* +### solveVelocityConstraints() -___ +> **solveVelocityConstraints**(`step`): `void` -### solveVelocityConstraints +#### Parameters -▸ **solveVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +• **step**: [`TimeStep`](TimeStep) -*Overrides [Joint](/api/classes/joint).[solveVelocityConstraints](/api/classes/joint#abstract-solvevelocityconstraints)* +#### Returns -**Parameters:** +`void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Overrides -**Returns:** *void* +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/wheeljoint.md b/docs/pages/api/classes/wheeljoint.md index fdb27499..8abd550a 100644 --- a/docs/pages/api/classes/wheeljoint.md +++ b/docs/pages/api/classes/wheeljoint.md @@ -1,4 +1,3 @@ - # Class: WheelJoint A wheel joint. This joint provides two degrees of freedom: translation along @@ -6,521 +5,555 @@ an axis fixed in bodyA and rotation in the plane. In other words, it is a point to line constraint with a rotational motor and a linear spring/damper. This joint is designed for vehicle suspensions. -## Hierarchy - -* [Joint](/api/classes/joint) - - ↳ **WheelJoint** - -## Index - -### Constructors - -* [constructor](/api/classes/wheeljoint#constructor) - -### Properties - -* [style](/api/classes/wheeljoint#style) -* [TYPE](/api/classes/wheeljoint#static-type) - -### Methods - -* [enableMotor](/api/classes/wheeljoint#enablemotor) -* [getAnchorA](/api/classes/wheeljoint#getanchora) -* [getAnchorB](/api/classes/wheeljoint#getanchorb) -* [getBodyA](/api/classes/wheeljoint#getbodya) -* [getBodyB](/api/classes/wheeljoint#getbodyb) -* [getCollideConnected](/api/classes/wheeljoint#getcollideconnected) -* [getJointSpeed](/api/classes/wheeljoint#getjointspeed) -* [getJointTranslation](/api/classes/wheeljoint#getjointtranslation) -* [getLocalAnchorA](/api/classes/wheeljoint#getlocalanchora) -* [getLocalAnchorB](/api/classes/wheeljoint#getlocalanchorb) -* [getLocalAxisA](/api/classes/wheeljoint#getlocalaxisa) -* [getMaxMotorTorque](/api/classes/wheeljoint#getmaxmotortorque) -* [getMotorSpeed](/api/classes/wheeljoint#getmotorspeed) -* [getMotorTorque](/api/classes/wheeljoint#getmotortorque) -* [getNext](/api/classes/wheeljoint#getnext) -* [getReactionForce](/api/classes/wheeljoint#getreactionforce) -* [getReactionTorque](/api/classes/wheeljoint#getreactiontorque) -* [getSpringDampingRatio](/api/classes/wheeljoint#getspringdampingratio) -* [getSpringFrequencyHz](/api/classes/wheeljoint#getspringfrequencyhz) -* [getType](/api/classes/wheeljoint#gettype) -* [getUserData](/api/classes/wheeljoint#getuserdata) -* [initVelocityConstraints](/api/classes/wheeljoint#initvelocityconstraints) -* [isActive](/api/classes/wheeljoint#isactive) -* [isMotorEnabled](/api/classes/wheeljoint#ismotorenabled) -* [setMaxMotorTorque](/api/classes/wheeljoint#setmaxmotortorque) -* [setMotorSpeed](/api/classes/wheeljoint#setmotorspeed) -* [setSpringDampingRatio](/api/classes/wheeljoint#setspringdampingratio) -* [setSpringFrequencyHz](/api/classes/wheeljoint#setspringfrequencyhz) -* [setUserData](/api/classes/wheeljoint#setuserdata) -* [shiftOrigin](/api/classes/wheeljoint#shiftorigin) -* [solvePositionConstraints](/api/classes/wheeljoint#solvepositionconstraints) -* [solveVelocityConstraints](/api/classes/wheeljoint#solvevelocityconstraints) +## Extends + +- [`Joint`](Joint) ## Constructors -### constructor +### new WheelJoint() -\+ **new WheelJoint**(`def`: [WheelJointDef](/api/interfaces/wheeljointdef)): *[WheelJoint](/api/classes/wheeljoint)* +> **new WheelJoint**(`def`): [`WheelJoint`](WheelJoint) -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +#### Parameters -**Parameters:** +• **def**: [`WheelJointDef`](../interfaces/WheelJointDef) -Name | Type | ------- | ------ | -`def` | [WheelJointDef](/api/interfaces/wheeljointdef) | +#### Returns -**Returns:** *[WheelJoint](/api/classes/wheeljoint)* +[`WheelJoint`](WheelJoint) -\+ **new WheelJoint**(`def`: [WheelJointOpt](/api/interfaces/wheeljointopt), `bodyA`: [Body](/api/classes/body), `bodyB`: [Body](/api/classes/body), `anchor`: [Vec2Value](/api/interfaces/vec2value), `axis`: [Vec2Value](/api/interfaces/vec2value)): *[WheelJoint](/api/classes/wheeljoint)* +#### Overrides -*Overrides [Joint](/api/classes/joint).[constructor](/api/classes/joint#constructor)* +[`Joint`](Joint).[`constructor`](Joint#constructors) -**Parameters:** +### new WheelJoint() -Name | Type | ------- | ------ | -`def` | [WheelJointOpt](/api/interfaces/wheeljointopt) | -`bodyA` | [Body](/api/classes/body) | -`bodyB` | [Body](/api/classes/body) | -`anchor` | [Vec2Value](/api/interfaces/vec2value) | -`axis` | [Vec2Value](/api/interfaces/vec2value) | +> **new WheelJoint**(`def`, `bodyA`, `bodyB`, `anchor`, `axis`): [`WheelJoint`](WheelJoint) -**Returns:** *[WheelJoint](/api/classes/wheeljoint)* +#### Parameters -## Properties +• **def**: [`WheelJointOpt`](../interfaces/WheelJointOpt) + +• **bodyA**: [`Body`](Body) + +• **bodyB**: [`Body`](Body) + +• **anchor**: [`Vec2Value`](../interfaces/Vec2Value) + +• **axis**: [`Vec2Value`](../interfaces/Vec2Value) + +#### Returns -### style +[`WheelJoint`](WheelJoint) -• **style**: *[Style](/api/interfaces/style)* +#### Overrides -*Inherited from [Joint](/api/classes/joint).[style](/api/classes/joint#style)* +[`Joint`](Joint).[`constructor`](Joint#constructors) + +## Properties + +### style + +> **style**: [`Style`](../interfaces/Style) = `{}` Styling for dev-tools. -___ +#### Inherited from -### `Static` TYPE +[`Joint`](Joint).[`style`](Joint#style) -▪ **TYPE**: *"wheel-joint"* = "wheel-joint" as const +*** + +### TYPE + +> `static` **TYPE**: `"wheel-joint"` ## Methods -### enableMotor +### enableMotor() -▸ **enableMotor**(`flag`: boolean): *void* +> **enableMotor**(`flag`): `void` Enable/disable the joint motor. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`flag` | boolean | +• **flag**: `boolean` -**Returns:** *void* +#### Returns -___ +`void` -### getAnchorA +*** -▸ **getAnchorA**(): *[Vec2](/api/classes/vec2)* +### getAnchorA() -*Overrides [Joint](/api/classes/joint).[getAnchorA](/api/classes/joint#abstract-getanchora)* +> **getAnchorA**(): [`Vec2`](Vec2) Get the anchor point on bodyA in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) + +#### Overrides -___ +[`Joint`](Joint).[`getAnchorA`](Joint#getanchora) -### getAnchorB +*** -▸ **getAnchorB**(): *[Vec2](/api/classes/vec2)* +### getAnchorB() -*Overrides [Joint](/api/classes/joint).[getAnchorB](/api/classes/joint#abstract-getanchorb)* +> **getAnchorB**(): [`Vec2`](Vec2) Get the anchor point on bodyB in world coordinates. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getBodyA +#### Overrides -▸ **getBodyA**(): *[Body](/api/classes/body)* +[`Joint`](Joint).[`getAnchorB`](Joint#getanchorb) -*Inherited from [Joint](/api/classes/joint).[getBodyA](/api/classes/joint#getbodya)* +*** + +### getBodyA() + +> **getBodyA**(): [`Body`](Body) Get the first body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns + +[`Body`](Body) + +#### Inherited from -___ +[`Joint`](Joint).[`getBodyA`](Joint#getbodya) -### getBodyB +*** -▸ **getBodyB**(): *[Body](/api/classes/body)* +### getBodyB() -*Inherited from [Joint](/api/classes/joint).[getBodyB](/api/classes/joint#getbodyb)* +> **getBodyB**(): [`Body`](Body) Get the second body attached to this joint. -**Returns:** *[Body](/api/classes/body)* +#### Returns -___ +[`Body`](Body) -### getCollideConnected +#### Inherited from -▸ **getCollideConnected**(): *boolean* +[`Joint`](Joint).[`getBodyB`](Joint#getbodyb) -*Inherited from [Joint](/api/classes/joint).[getCollideConnected](/api/classes/joint#getcollideconnected)* +*** + +### getCollideConnected() + +> **getCollideConnected**(): `boolean` Get collide connected. Note: modifying the collide connect flag won't work correctly because the flag is only checked when fixture AABBs begin to overlap. -**Returns:** *boolean* +#### Returns + +`boolean` + +#### Inherited from -___ +[`Joint`](Joint).[`getCollideConnected`](Joint#getcollideconnected) -### getJointSpeed +*** -▸ **getJointSpeed**(): *number* +### getJointSpeed() + +> **getJointSpeed**(): `number` Get the current joint translation speed, usually in meters per second. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getJointTranslation +### getJointTranslation() -▸ **getJointTranslation**(): *number* +> **getJointTranslation**(): `number` Get the current joint translation, usually in meters. -**Returns:** *number* +#### Returns -___ +`number` -### getLocalAnchorA +*** -▸ **getLocalAnchorA**(): *[Vec2](/api/classes/vec2)* +### getLocalAnchorA() + +> **getLocalAnchorA**(): [`Vec2`](Vec2) The local anchor point relative to bodyA's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) -___ +*** -### getLocalAnchorB +### getLocalAnchorB() -▸ **getLocalAnchorB**(): *[Vec2](/api/classes/vec2)* +> **getLocalAnchorB**(): [`Vec2`](Vec2) The local anchor point relative to bodyB's origin. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getLocalAxisA +*** -▸ **getLocalAxisA**(): *[Vec2](/api/classes/vec2)* +### getLocalAxisA() + +> **getLocalAxisA**(): [`Vec2`](Vec2) The local joint axis relative to bodyA. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns + +[`Vec2`](Vec2) + +*** -___ +### getMaxMotorTorque() -### getMaxMotorTorque +> **getMaxMotorTorque**(): `number` -▸ **getMaxMotorTorque**(): *number* +#### Returns -**Returns:** *number* +`number` -___ +*** -### getMotorSpeed +### getMotorSpeed() -▸ **getMotorSpeed**(): *number* +> **getMotorSpeed**(): `number` Get the motor speed, usually in radians per second. -**Returns:** *number* +#### Returns -___ +`number` -### getMotorTorque +*** -▸ **getMotorTorque**(`inv_dt`: number): *number* +### getMotorTorque() + +> **getMotorTorque**(`inv_dt`): `number` Get the current motor torque given the inverse time step, usually in N-m. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`inv_dt` | number | +• **inv\_dt**: `number` -**Returns:** *number* +#### Returns -___ +`number` -### getNext +*** -▸ **getNext**(): *[Joint](/api/classes/joint)* +### getNext() -*Inherited from [Joint](/api/classes/joint).[getNext](/api/classes/joint#getnext)* +> **getNext**(): [`Joint`](Joint) Get the next joint the world joint list. -**Returns:** *[Joint](/api/classes/joint)* +#### Returns + +[`Joint`](Joint) -___ +#### Inherited from -### getReactionForce +[`Joint`](Joint).[`getNext`](Joint#getnext) -▸ **getReactionForce**(`inv_dt`: number): *[Vec2](/api/classes/vec2)* +*** -*Overrides [Joint](/api/classes/joint).[getReactionForce](/api/classes/joint#abstract-getreactionforce)* +### getReactionForce() + +> **getReactionForce**(`inv_dt`): [`Vec2`](Vec2) Get the reaction force on bodyB at the joint anchor in Newtons. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` -Name | Type | ------- | ------ | -`inv_dt` | number | +#### Returns -**Returns:** *[Vec2](/api/classes/vec2)* +[`Vec2`](Vec2) -___ +#### Overrides -### getReactionTorque +[`Joint`](Joint).[`getReactionForce`](Joint#getreactionforce) -▸ **getReactionTorque**(`inv_dt`: number): *number* +*** -*Overrides [Joint](/api/classes/joint).[getReactionTorque](/api/classes/joint#abstract-getreactiontorque)* +### getReactionTorque() + +> **getReactionTorque**(`inv_dt`): `number` Get the reaction torque on bodyB in N*m. -**Parameters:** +#### Parameters + +• **inv\_dt**: `number` + +#### Returns + +`number` -Name | Type | ------- | ------ | -`inv_dt` | number | +#### Overrides -**Returns:** *number* +[`Joint`](Joint).[`getReactionTorque`](Joint#getreactiontorque) -___ +*** -### getSpringDampingRatio +### getSpringDampingRatio() -▸ **getSpringDampingRatio**(): *number* +> **getSpringDampingRatio**(): `number` -**Returns:** *number* +#### Returns -___ +`number` -### getSpringFrequencyHz +*** -▸ **getSpringFrequencyHz**(): *number* +### getSpringFrequencyHz() -**Returns:** *number* +> **getSpringFrequencyHz**(): `number` -___ +#### Returns -### getType +`number` -▸ **getType**(): *string* +*** -*Inherited from [Joint](/api/classes/joint).[getType](/api/classes/joint#gettype)* +### getType() + +> **getType**(): `string` Get the type of the concrete joint. -**Returns:** *string* +#### Returns + +`string` + +#### Inherited from + +[`Joint`](Joint).[`getType`](Joint#gettype) -___ +*** -### getUserData +### getUserData() -▸ **getUserData**(): *unknown* +> **getUserData**(): `unknown` -*Inherited from [Joint](/api/classes/joint).[getUserData](/api/classes/joint#getuserdata)* +#### Returns -**Returns:** *unknown* +`unknown` -___ +#### Inherited from -### initVelocityConstraints +[`Joint`](Joint).[`getUserData`](Joint#getuserdata) -▸ **initVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +*** -*Overrides [Joint](/api/classes/joint).[initVelocityConstraints](/api/classes/joint#abstract-initvelocityconstraints)* +### initVelocityConstraints() -**Parameters:** +> **initVelocityConstraints**(`step`): `void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Parameters -**Returns:** *void* +• **step**: [`TimeStep`](TimeStep) -___ +#### Returns -### isActive +`void` -▸ **isActive**(): *boolean* +#### Overrides -*Inherited from [Joint](/api/classes/joint).[isActive](/api/classes/joint#isactive)* +[`Joint`](Joint).[`initVelocityConstraints`](Joint#initvelocityconstraints) + +*** + +### isActive() + +> **isActive**(): `boolean` Short-cut function to determine if either body is inactive. -**Returns:** *boolean* +#### Returns + +`boolean` -___ +#### Inherited from -### isMotorEnabled +[`Joint`](Joint).[`isActive`](Joint#isactive) -▸ **isMotorEnabled**(): *boolean* +*** + +### isMotorEnabled() + +> **isMotorEnabled**(): `boolean` Is the joint motor enabled? -**Returns:** *boolean* +#### Returns -___ +`boolean` -### setMaxMotorTorque +*** -▸ **setMaxMotorTorque**(`torque`: number): *void* +### setMaxMotorTorque() + +> **setMaxMotorTorque**(`torque`): `void` Set/Get the maximum motor force, usually in N-m. -**Parameters:** +#### Parameters + +• **torque**: `number` -Name | Type | ------- | ------ | -`torque` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setMotorSpeed +### setMotorSpeed() -▸ **setMotorSpeed**(`speed`: number): *void* +> **setMotorSpeed**(`speed`): `void` Set the motor speed, usually in radians per second. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`speed` | number | +• **speed**: `number` -**Returns:** *void* +#### Returns -___ +`void` -### setSpringDampingRatio +*** -▸ **setSpringDampingRatio**(`ratio`: number): *void* +### setSpringDampingRatio() + +> **setSpringDampingRatio**(`ratio`): `void` Set/Get the spring damping ratio -**Parameters:** +#### Parameters + +• **ratio**: `number` -Name | Type | ------- | ------ | -`ratio` | number | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setSpringFrequencyHz +### setSpringFrequencyHz() -▸ **setSpringFrequencyHz**(`hz`: number): *void* +> **setSpringFrequencyHz**(`hz`): `void` Set/Get the spring frequency in hertz. Setting the frequency to zero disables the spring. -**Parameters:** +#### Parameters + +• **hz**: `number` + +#### Returns -Name | Type | ------- | ------ | -`hz` | number | +`void` -**Returns:** *void* +*** -___ +### setUserData() -### setUserData +> **setUserData**(`data`): `void` -▸ **setUserData**(`data`: unknown): *void* +#### Parameters -*Inherited from [Joint](/api/classes/joint).[setUserData](/api/classes/joint#setuserdata)* +• **data**: `unknown` -**Parameters:** +#### Returns -Name | Type | ------- | ------ | -`data` | unknown | +`void` -**Returns:** *void* +#### Inherited from -___ +[`Joint`](Joint).[`setUserData`](Joint#setuserdata) -### shiftOrigin +*** -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +### shiftOrigin() -*Inherited from [Joint](/api/classes/joint).[shiftOrigin](/api/classes/joint#shiftorigin)* +> **shiftOrigin**(`newOrigin`): `void` Shift the origin for any points stored in world coordinates. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *void* +#### Returns -___ +`void` -### solvePositionConstraints +#### Inherited from -▸ **solvePositionConstraints**(`step`: [TimeStep](/api/classes/timestep)): *boolean* +[`Joint`](Joint).[`shiftOrigin`](Joint#shiftorigin) -*Overrides [Joint](/api/classes/joint).[solvePositionConstraints](/api/classes/joint#abstract-solvepositionconstraints)* +*** + +### solvePositionConstraints() + +> **solvePositionConstraints**(`step`): `boolean` This returns true if the position errors are within tolerance. -**Parameters:** +#### Parameters + +• **step**: [`TimeStep`](TimeStep) + +#### Returns + +`boolean` + +#### Overrides + +[`Joint`](Joint).[`solvePositionConstraints`](Joint#solvepositionconstraints) -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +*** -**Returns:** *boolean* +### solveVelocityConstraints() -___ +> **solveVelocityConstraints**(`step`): `void` -### solveVelocityConstraints +#### Parameters -▸ **solveVelocityConstraints**(`step`: [TimeStep](/api/classes/timestep)): *void* +• **step**: [`TimeStep`](TimeStep) -*Overrides [Joint](/api/classes/joint).[solveVelocityConstraints](/api/classes/joint#abstract-solvevelocityconstraints)* +#### Returns -**Parameters:** +`void` -Name | Type | ------- | ------ | -`step` | [TimeStep](/api/classes/timestep) | +#### Overrides -**Returns:** *void* +[`Joint`](Joint).[`solveVelocityConstraints`](Joint#solvevelocityconstraints) diff --git a/docs/pages/api/classes/world.md b/docs/pages/api/classes/world.md index dc4ecea1..8d1bd86a 100644 --- a/docs/pages/api/classes/world.md +++ b/docs/pages/api/classes/world.md @@ -1,75 +1,31 @@ - # Class: World -## Hierarchy - -* **World** - -## Index - -### Constructors - -* [constructor](/api/classes/world#constructor) - -### Methods - -* [clearForces](/api/classes/world#clearforces) -* [createBody](/api/classes/world#createbody) -* [createDynamicBody](/api/classes/world#createdynamicbody) -* [createJoint](/api/classes/world#createjoint) -* [createKinematicBody](/api/classes/world#createkinematicbody) -* [destroyBody](/api/classes/world#destroybody) -* [destroyJoint](/api/classes/world#destroyjoint) -* [getAllowSleeping](/api/classes/world#getallowsleeping) -* [getAutoClearForces](/api/classes/world#getautoclearforces) -* [getBodyCount](/api/classes/world#getbodycount) -* [getBodyList](/api/classes/world#getbodylist) -* [getContactCount](/api/classes/world#getcontactcount) -* [getContactList](/api/classes/world#getcontactlist) -* [getContinuousPhysics](/api/classes/world#getcontinuousphysics) -* [getGravity](/api/classes/world#getgravity) -* [getJointCount](/api/classes/world#getjointcount) -* [getJointList](/api/classes/world#getjointlist) -* [getProxyCount](/api/classes/world#getproxycount) -* [getSubStepping](/api/classes/world#getsubstepping) -* [getTreeBalance](/api/classes/world#gettreebalance) -* [getTreeHeight](/api/classes/world#gettreeheight) -* [getTreeQuality](/api/classes/world#gettreequality) -* [getWarmStarting](/api/classes/world#getwarmstarting) -* [isLocked](/api/classes/world#islocked) -* [off](/api/classes/world#off) -* [on](/api/classes/world#on) -* [publish](/api/classes/world#publish) -* [queryAABB](/api/classes/world#queryaabb) -* [rayCast](/api/classes/world#raycast) -* [setAllowSleeping](/api/classes/world#setallowsleeping) -* [setAutoClearForces](/api/classes/world#setautoclearforces) -* [setContinuousPhysics](/api/classes/world#setcontinuousphysics) -* [setGravity](/api/classes/world#setgravity) -* [setSubStepping](/api/classes/world#setsubstepping) -* [setWarmStarting](/api/classes/world#setwarmstarting) -* [shiftOrigin](/api/classes/world#shiftorigin) -* [step](/api/classes/world#step) +The `World` class contains the bodies and joints. It manages all aspects +of the simulation and allows for asynchronous queries (like AABB queries +and ray-casts). Much of your interactions with Planck.js will be with a +World object. ## Constructors -### constructor +### new World() + +> **new World**(`def`?): [`World`](World) + +#### Parameters -\+ **new World**(`def?`: [WorldDef](/api/interfaces/worlddef) | [Vec2](/api/classes/vec2) | null): *[World](/api/classes/world)* +• **def?**: [`Vec2`](Vec2) \| [`WorldDef`](../interfaces/WorldDef) -**Parameters:** +World definition or gravity vector. -Name | Type | Description | ------- | ------ | ------ | -`def?` | [WorldDef](/api/interfaces/worlddef) | [Vec2](/api/classes/vec2) | null | World definition or gravity vector. | +#### Returns -**Returns:** *[World](/api/classes/world)* +[`World`](World) ## Methods -### clearForces +### clearForces() -▸ **clearForces**(): *void* +> **clearForces**(): `void` Manually clear the force buffer on all bodies. By default, forces are cleared automatically after each call to step. The default behavior is modified by @@ -79,118 +35,135 @@ under a variable frame-rate. When you perform sub-stepping you will disable auto clearing of forces and instead call clearForces after all sub-steps are complete in one pass of your game loop. -See [World.setAutoClearForces](world#setautoclearforces) +See [World.setAutoClearForces](World#setautoclearforces) + +#### Returns + +`void` -**Returns:** *void* +*** -___ +### createBody() -### createBody +#### createBody(def) -▸ **createBody**(`def?`: [BodyDef](/api/interfaces/bodydef)): *[Body](/api/classes/body)* +> **createBody**(`def`?): [`Body`](Body) Create a rigid body given a definition. No reference to the definition is retained. Warning: This function is locked during callbacks. -**Parameters:** +##### Parameters + +• **def?**: [`BodyDef`](../interfaces/BodyDef) + +##### Returns + +[`Body`](Body) + +#### createBody(position, angle) + +> **createBody**(`position`, `angle`?): [`Body`](Body) -Name | Type | ------- | ------ | -`def?` | [BodyDef](/api/interfaces/bodydef) | +##### Parameters -**Returns:** *[Body](/api/classes/body)* +• **position**: [`Vec2Value`](../interfaces/Vec2Value) -▸ **createBody**(`position`: [Vec2Value](/api/interfaces/vec2value), `angle?`: number): *[Body](/api/classes/body)* +• **angle?**: `number` -**Parameters:** +##### Returns -Name | Type | ------- | ------ | -`position` | [Vec2Value](/api/interfaces/vec2value) | -`angle?` | number | +[`Body`](Body) -**Returns:** *[Body](/api/classes/body)* +*** -___ +### createDynamicBody() -### createDynamicBody +#### createDynamicBody(def) -▸ **createDynamicBody**(`def?`: [BodyDef](/api/interfaces/bodydef)): *[Body](/api/classes/body)* +> **createDynamicBody**(`def`?): [`Body`](Body) -**Parameters:** +##### Parameters -Name | Type | ------- | ------ | -`def?` | [BodyDef](/api/interfaces/bodydef) | +• **def?**: [`BodyDef`](../interfaces/BodyDef) -**Returns:** *[Body](/api/classes/body)* +##### Returns -▸ **createDynamicBody**(`position`: [Vec2Value](/api/interfaces/vec2value), `angle?`: number): *[Body](/api/classes/body)* +[`Body`](Body) -**Parameters:** +#### createDynamicBody(position, angle) -Name | Type | ------- | ------ | -`position` | [Vec2Value](/api/interfaces/vec2value) | -`angle?` | number | +> **createDynamicBody**(`position`, `angle`?): [`Body`](Body) -**Returns:** *[Body](/api/classes/body)* +##### Parameters -___ +• **position**: [`Vec2Value`](../interfaces/Vec2Value) -### createJoint +• **angle?**: `number` -▸ **createJoint**‹**T**›(`joint`: T): *T | null* +##### Returns + +[`Body`](Body) + +*** + +### createJoint() + +> **createJoint**\<`T`\>(`joint`): `T` Create a joint to constrain bodies together. No reference to the definition is retained. This may cause the connected bodies to cease colliding. Warning: This function is locked during callbacks. -**Type parameters:** +#### Type Parameters + +• **T** *extends* [`Joint`](Joint) + +#### Parameters + +• **joint**: `T` + +#### Returns + +`T` -▪ **T**: *[Joint](/api/classes/joint)* +*** -**Parameters:** +### createKinematicBody() -Name | Type | ------- | ------ | -`joint` | T | +#### createKinematicBody(def) -**Returns:** *T | null* +> **createKinematicBody**(`def`?): [`Body`](Body) -___ +##### Parameters -### createKinematicBody +• **def?**: [`BodyDef`](../interfaces/BodyDef) -▸ **createKinematicBody**(`def?`: [BodyDef](/api/interfaces/bodydef)): *[Body](/api/classes/body)* +##### Returns -**Parameters:** +[`Body`](Body) -Name | Type | ------- | ------ | -`def?` | [BodyDef](/api/interfaces/bodydef) | +#### createKinematicBody(position, angle) -**Returns:** *[Body](/api/classes/body)* +> **createKinematicBody**(`position`, `angle`?): [`Body`](Body) -▸ **createKinematicBody**(`position`: [Vec2Value](/api/interfaces/vec2value), `angle?`: number): *[Body](/api/classes/body)* +##### Parameters -**Parameters:** +• **position**: [`Vec2Value`](../interfaces/Vec2Value) -Name | Type | ------- | ------ | -`position` | [Vec2Value](/api/interfaces/vec2value) | -`angle?` | number | +• **angle?**: `number` -**Returns:** *[Body](/api/classes/body)* +##### Returns -___ +[`Body`](Body) -### destroyBody +*** -▸ **destroyBody**(`b`: [Body](/api/classes/body)): *boolean* +### destroyBody() + +> **destroyBody**(`b`): `boolean` Destroy a rigid body given a definition. No reference to the definition is retained. @@ -199,85 +172,95 @@ Warning: This automatically deletes all associated shapes and joints. Warning: This function is locked during callbacks. -**Parameters:** +#### Parameters + +• **b**: [`Body`](Body) -Name | Type | ------- | ------ | -`b` | [Body](/api/classes/body) | +#### Returns -**Returns:** *boolean* +`boolean` -___ +*** -### destroyJoint +### destroyJoint() -▸ **destroyJoint**(`joint`: [Joint](/api/classes/joint)): *void* +> **destroyJoint**(`joint`): `void` Destroy a joint. This may cause the connected bodies to begin colliding. Warning: This function is locked during callbacks. -**Parameters:** +#### Parameters + +• **joint**: [`Joint`](Joint) -Name | Type | ------- | ------ | -`joint` | [Joint](/api/classes/joint) | +#### Returns -**Returns:** *void* +`void` -___ +*** -### getAllowSleeping +### getAllowSleeping() -▸ **getAllowSleeping**(): *boolean* +> **getAllowSleeping**(): `boolean` -**Returns:** *boolean* +#### Returns -___ +`boolean` -### getAutoClearForces +*** -▸ **getAutoClearForces**(): *boolean* +### getAutoClearForces() + +> **getAutoClearForces**(): `boolean` Get the flag that controls automatic clearing of forces after each time step. -**Returns:** *boolean* +#### Returns + +`boolean` -___ +*** -### getBodyCount +### getBodyCount() -▸ **getBodyCount**(): *number* +> **getBodyCount**(): `number` -**Returns:** *number* +#### Returns -___ +`number` -### getBodyList +*** -▸ **getBodyList**(): *[Body](/api/classes/body) | null* +### getBodyList() + +> **getBodyList**(): [`Body`](Body) Get the world body list. With the returned body, use Body.getNext to get the next body in the world list. A null body indicates the end of the list. -**Returns:** *[Body](/api/classes/body) | null* +#### Returns + +[`Body`](Body) the head of the world body list. -___ +*** -### getContactCount +### getContactCount() -▸ **getContactCount**(): *number* +> **getContactCount**(): `number` Get the number of contacts (each may have 0 or more contact points). -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getContactList +### getContactList() -▸ **getContactList**(): *[Contact](/api/classes/contact) | null* +> **getContactList**(): [`Contact`](Contact) Get the world contact list. With the returned contact, use Contact.getNext to get the next contact in the world list. A null contact indicates the end of @@ -286,267 +269,267 @@ the list. Warning: contacts are created and destroyed in the middle of a time step. Use ContactListener to avoid missing contacts. -**Returns:** *[Contact](/api/classes/contact) | null* +#### Returns + +[`Contact`](Contact) the head of the world contact list. -___ +*** + +### getContinuousPhysics() -### getContinuousPhysics +> **getContinuousPhysics**(): `boolean` -▸ **getContinuousPhysics**(): *boolean* +#### Returns -**Returns:** *boolean* +`boolean` -___ +*** -### getGravity +### getGravity() -▸ **getGravity**(): *[Vec2](/api/classes/vec2)* +> **getGravity**(): [`Vec2`](Vec2) Get the global gravity vector. -**Returns:** *[Vec2](/api/classes/vec2)* +#### Returns -___ +[`Vec2`](Vec2) -### getJointCount +*** -▸ **getJointCount**(): *number* +### getJointCount() -**Returns:** *number* +> **getJointCount**(): `number` -___ +#### Returns -### getJointList +`number` -▸ **getJointList**(): *[Joint](/api/classes/joint) | null* +*** + +### getJointList() + +> **getJointList**(): [`Joint`](Joint) Get the world joint list. With the returned joint, use Joint.getNext to get the next joint in the world list. A null joint indicates the end of the list. -**Returns:** *[Joint](/api/classes/joint) | null* +#### Returns + +[`Joint`](Joint) the head of the world joint list. -___ +*** -### getProxyCount +### getProxyCount() -▸ **getProxyCount**(): *number* +> **getProxyCount**(): `number` Get the number of broad-phase proxies. -**Returns:** *number* +#### Returns + +`number` + +*** -___ +### getSubStepping() -### getSubStepping +> **getSubStepping**(): `boolean` -▸ **getSubStepping**(): *boolean* +#### Returns -**Returns:** *boolean* +`boolean` -___ +*** -### getTreeBalance +### getTreeBalance() -▸ **getTreeBalance**(): *number* +> **getTreeBalance**(): `number` Get the balance of broad-phase dynamic tree. -**Returns:** *number* +#### Returns -___ +`number` -### getTreeHeight +*** -▸ **getTreeHeight**(): *number* +### getTreeHeight() + +> **getTreeHeight**(): `number` Get the height of broad-phase dynamic tree. -**Returns:** *number* +#### Returns + +`number` -___ +*** -### getTreeQuality +### getTreeQuality() -▸ **getTreeQuality**(): *number* +> **getTreeQuality**(): `number` Get the quality metric of broad-phase dynamic tree. The smaller the better. The minimum is 1. -**Returns:** *number* +#### Returns + +`number` + +*** -___ +### getWarmStarting() -### getWarmStarting +> **getWarmStarting**(): `boolean` -▸ **getWarmStarting**(): *boolean* +#### Returns -**Returns:** *boolean* +`boolean` -___ +*** -### isLocked +### isLocked() -▸ **isLocked**(): *boolean* +> **isLocked**(): `boolean` Is the world locked (in the middle of a time step). -**Returns:** *boolean* +#### Returns -___ +`boolean` -### off +*** -▸ **off**(`name`: "begin-contact", `listener`: function): *[World](/api/classes/world)* +### off() Remove an event listener. -**Parameters:** +#### off(name, listener) -▪ **name**: *"begin-contact"* +> **off**(`name`, `listener`): [`World`](World) -▪ **listener**: *function* +Remove an event listener. -▸ (`contact`: [Contact](/api/classes/contact)): *void* +##### Parameters -**Parameters:** +• **name**: `"begin-contact"` -Name | Type | ------- | ------ | -`contact` | [Contact](/api/classes/contact) | +• **listener** -**Returns:** *[World](/api/classes/world)* +##### Returns -▸ **off**(`name`: "end-contact", `listener`: function): *[World](/api/classes/world)* +[`World`](World) -Remove an event listener. +#### off(name, listener) -**Parameters:** +> **off**(`name`, `listener`): [`World`](World) -▪ **name**: *"end-contact"* +Remove an event listener. -▪ **listener**: *function* +##### Parameters -▸ (`contact`: [Contact](/api/classes/contact)): *void* +• **name**: `"end-contact"` -**Parameters:** +• **listener** -Name | Type | ------- | ------ | -`contact` | [Contact](/api/classes/contact) | +##### Returns -**Returns:** *[World](/api/classes/world)* +[`World`](World) -▸ **off**(`name`: "pre-solve", `listener`: function): *[World](/api/classes/world)* +#### off(name, listener) -Remove an event listener. +> **off**(`name`, `listener`): [`World`](World) -**Parameters:** +Remove an event listener. -▪ **name**: *"pre-solve"* +##### Parameters -▪ **listener**: *function* +• **name**: `"pre-solve"` -▸ (`contact`: [Contact](/api/classes/contact), `oldManifold`: [Manifold](/api/classes/manifold)): *void* +• **listener** -**Parameters:** +##### Returns -Name | Type | ------- | ------ | -`contact` | [Contact](/api/classes/contact) | -`oldManifold` | [Manifold](/api/classes/manifold) | +[`World`](World) -**Returns:** *[World](/api/classes/world)* +#### off(name, listener) -▸ **off**(`name`: "post-solve", `listener`: function): *[World](/api/classes/world)* +> **off**(`name`, `listener`): [`World`](World) Remove an event listener. -**Parameters:** +##### Parameters -▪ **name**: *"post-solve"* +• **name**: `"post-solve"` -▪ **listener**: *function* +• **listener** -▸ (`contact`: [Contact](/api/classes/contact), `impulse`: [ContactImpulse](/api/classes/contactimpulse)): *void* +##### Returns -**Parameters:** +[`World`](World) -Name | Type | ------- | ------ | -`contact` | [Contact](/api/classes/contact) | -`impulse` | [ContactImpulse](/api/classes/contactimpulse) | +#### off(name, listener) -**Returns:** *[World](/api/classes/world)* - -▸ **off**(`name`: "remove-body", `listener`: function): *[World](/api/classes/world)* +> **off**(`name`, `listener`): [`World`](World) Remove an event listener. -**Parameters:** - -▪ **name**: *"remove-body"* +##### Parameters -▪ **listener**: *function* +• **name**: `"remove-body"` -▸ (`body`: [Body](/api/classes/body)): *void* +• **listener** -**Parameters:** +##### Returns -Name | Type | ------- | ------ | -`body` | [Body](/api/classes/body) | +[`World`](World) -**Returns:** *[World](/api/classes/world)* +#### off(name, listener) -▸ **off**(`name`: "remove-joint", `listener`: function): *[World](/api/classes/world)* +> **off**(`name`, `listener`): [`World`](World) Remove an event listener. -**Parameters:** - -▪ **name**: *"remove-joint"* +##### Parameters -▪ **listener**: *function* +• **name**: `"remove-joint"` -▸ (`joint`: [Joint](/api/classes/joint)): *void* +• **listener** -**Parameters:** +##### Returns -Name | Type | ------- | ------ | -`joint` | [Joint](/api/classes/joint) | +[`World`](World) -**Returns:** *[World](/api/classes/world)* +#### off(name, listener) -▸ **off**(`name`: "remove-fixture", `listener`: function): *[World](/api/classes/world)* +> **off**(`name`, `listener`): [`World`](World) Remove an event listener. -**Parameters:** +##### Parameters -▪ **name**: *"remove-fixture"* +• **name**: `"remove-fixture"` -▪ **listener**: *function* +• **listener** -▸ (`fixture`: [Fixture](/api/classes/fixture)): *void* +##### Returns -**Parameters:** +[`World`](World) -Name | Type | ------- | ------ | -`fixture` | [Fixture](/api/classes/fixture) | +*** -**Returns:** *[World](/api/classes/world)* +### on() -___ +Register an event listener. -### on +#### on(name, listener) -▸ **on**(`name`: "begin-contact", `listener`: function): *[World](/api/classes/world)* +> **on**(`name`, `listener`): [`World`](World) Called when two fixtures begin to touch. @@ -560,23 +543,19 @@ there may be many callbacks per time step. Warning: You cannot create/destroy world entities inside these callbacks. -**Parameters:** +##### Parameters -▪ **name**: *"begin-contact"* +• **name**: `"begin-contact"` -▪ **listener**: *function* +• **listener** -▸ (`contact`: [Contact](/api/classes/contact)): *void* +##### Returns -**Parameters:** +[`World`](World) -Name | Type | ------- | ------ | -`contact` | [Contact](/api/classes/contact) | +#### on(name, listener) -**Returns:** *[World](/api/classes/world)* - -▸ **on**(`name`: "end-contact", `listener`: function): *[World](/api/classes/world)* +> **on**(`name`, `listener`): [`World`](World) Called when two fixtures cease to touch. @@ -590,23 +569,19 @@ there may be many callbacks per time step. Warning: You cannot create/destroy world entities inside these callbacks. -**Parameters:** - -▪ **name**: *"end-contact"* +##### Parameters -▪ **listener**: *function* +• **name**: `"end-contact"` -▸ (`contact`: [Contact](/api/classes/contact)): *void* +• **listener** -**Parameters:** +##### Returns -Name | Type | ------- | ------ | -`contact` | [Contact](/api/classes/contact) | +[`World`](World) -**Returns:** *[World](/api/classes/world)* +#### on(name, listener) -▸ **on**(`name`: "pre-solve", `listener`: function): *[World](/api/classes/world)* +> **on**(`name`, `listener`): [`World`](World) This is called after a contact is updated. This allows you to inspect a contact before it goes to the solver. If you are careful, you can modify the @@ -619,24 +594,19 @@ a begin-contact callback the next step. Warning: You cannot create/destroy world entities inside these callbacks. -**Parameters:** +##### Parameters -▪ **name**: *"pre-solve"* +• **name**: `"pre-solve"` -▪ **listener**: *function* +• **listener** -▸ (`contact`: [Contact](/api/classes/contact), `oldManifold`: [Manifold](/api/classes/manifold)): *void* +##### Returns -**Parameters:** +[`World`](World) -Name | Type | ------- | ------ | -`contact` | [Contact](/api/classes/contact) | -`oldManifold` | [Manifold](/api/classes/manifold) | +#### on(name, listener) -**Returns:** *[World](/api/classes/world)* - -▸ **on**(`name`: "post-solve", `listener`: function): *[World](/api/classes/world)* +> **on**(`name`, `listener`): [`World`](World) This lets you inspect a contact after the solver is finished. This is useful for inspecting impulses. Note: the contact manifold does not include time of @@ -646,267 +616,270 @@ this is only called for contacts that are touching, solid, and awake. Warning: You cannot create/destroy world entities inside these callbacks. -**Parameters:** - -▪ **name**: *"post-solve"* +##### Parameters -▪ **listener**: *function* +• **name**: `"post-solve"` -▸ (`contact`: [Contact](/api/classes/contact), `impulse`: [ContactImpulse](/api/classes/contactimpulse)): *void* +• **listener** -**Parameters:** +##### Returns -Name | Type | ------- | ------ | -`contact` | [Contact](/api/classes/contact) | -`impulse` | [ContactImpulse](/api/classes/contactimpulse) | +[`World`](World) -**Returns:** *[World](/api/classes/world)* +#### on(name, listener) -▸ **on**(`name`: "remove-body", `listener`: function): *[World](/api/classes/world)* +> **on**(`name`, `listener`): [`World`](World) Listener is called whenever a body is removed. -**Parameters:** - -▪ **name**: *"remove-body"* +##### Parameters -▪ **listener**: *function* +• **name**: `"remove-body"` -▸ (`body`: [Body](/api/classes/body)): *void* +• **listener** -**Parameters:** +##### Returns -Name | Type | ------- | ------ | -`body` | [Body](/api/classes/body) | +[`World`](World) -**Returns:** *[World](/api/classes/world)* +#### on(name, listener) -▸ **on**(`name`: "remove-joint", `listener`: function): *[World](/api/classes/world)* +> **on**(`name`, `listener`): [`World`](World) Listener is called whenever a joint is removed implicitly or explicitly. -**Parameters:** +##### Parameters -▪ **name**: *"remove-joint"* +• **name**: `"remove-joint"` -▪ **listener**: *function* +• **listener** -▸ (`joint`: [Joint](/api/classes/joint)): *void* +##### Returns -**Parameters:** +[`World`](World) -Name | Type | ------- | ------ | -`joint` | [Joint](/api/classes/joint) | +#### on(name, listener) -**Returns:** *[World](/api/classes/world)* - -▸ **on**(`name`: "remove-fixture", `listener`: function): *[World](/api/classes/world)* +> **on**(`name`, `listener`): [`World`](World) Listener is called whenever a fixture is removed implicitly or explicitly. -**Parameters:** +##### Parameters + +• **name**: `"remove-fixture"` -▪ **name**: *"remove-fixture"* +• **listener** -▪ **listener**: *function* +##### Returns -▸ (`fixture`: [Fixture](/api/classes/fixture)): *void* +[`World`](World) -**Parameters:** +*** -Name | Type | ------- | ------ | -`fixture` | [Fixture](/api/classes/fixture) | +### publish() -**Returns:** *[World](/api/classes/world)* +> **publish**(`name`, `arg1`?, `arg2`?, `arg3`?): `number` -___ +#### Parameters -### publish +• **name**: `string` -▸ **publish**(`name`: string, `arg1?`: any, `arg2?`: any, `arg3?`: any): *number* +• **arg1?**: `any` -**Parameters:** +• **arg2?**: `any` -Name | Type | ------- | ------ | -`name` | string | -`arg1?` | any | -`arg2?` | any | -`arg3?` | any | +• **arg3?**: `any` -**Returns:** *number* +#### Returns -___ +`number` -### queryAABB +*** -▸ **queryAABB**(`aabb`: [AABBValue](/api/interfaces/aabbvalue), `callback`: [WorldAABBQueryCallback](/api/globals#worldaabbquerycallback)): *void* +### queryAABB() + +> **queryAABB**(`aabb`, `callback`): `void` Query the world for all fixtures that potentially overlap the provided AABB. -**Parameters:** +#### Parameters + +• **aabb**: [`AABBValue`](../interfaces/AABBValue) + +The query box. + +• **callback**: [`WorldAABBQueryCallback`](../type-aliases/WorldAABBQueryCallback) -Name | Type | Description | ------- | ------ | ------ | -`aabb` | [AABBValue](/api/interfaces/aabbvalue) | The query box. | -`callback` | [WorldAABBQueryCallback](/api/globals#worldaabbquerycallback) | Called for each fixture found in the query AABB. It may return `false` to terminate the query. | +Called for each fixture found in the query AABB. It may return `false` to terminate the query. -**Returns:** *void* +#### Returns -___ +`void` -### rayCast +*** -▸ **rayCast**(`point1`: [Vec2Value](/api/interfaces/vec2value), `point2`: [Vec2Value](/api/interfaces/vec2value), `callback`: [WorldRayCastCallback](/api/globals#worldraycastcallback)): *void* +### rayCast() + +> **rayCast**(`point1`, `point2`, `callback`): `void` Ray-cast the world for all fixtures in the path of the ray. Your callback controls whether you get the closest point, any point, or n-points. The ray-cast ignores shapes that contain the starting point. -**Parameters:** +#### Parameters + +• **point1**: [`Vec2Value`](../interfaces/Vec2Value) + +The ray starting point + +• **point2**: [`Vec2Value`](../interfaces/Vec2Value) + +The ray ending point -Name | Type | Description | ------- | ------ | ------ | -`point1` | [Vec2Value](/api/interfaces/vec2value) | The ray starting point | -`point2` | [Vec2Value](/api/interfaces/vec2value) | The ray ending point | -`callback` | [WorldRayCastCallback](/api/globals#worldraycastcallback) | A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value. | +• **callback**: [`WorldRayCastCallback`](../type-aliases/WorldRayCastCallback) -**Returns:** *void* +A function that is called for each fixture that is hit by the ray. You control how the ray cast proceeds by returning a numeric/float value. -___ +#### Returns -### setAllowSleeping +`void` -▸ **setAllowSleeping**(`flag`: boolean): *void* +*** + +### setAllowSleeping() + +> **setAllowSleeping**(`flag`): `void` Enable/disable sleep. -**Parameters:** +#### Parameters + +• **flag**: `boolean` -Name | Type | ------- | ------ | -`flag` | boolean | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setAutoClearForces +### setAutoClearForces() -▸ **setAutoClearForces**(`flag`: boolean): *void* +> **setAutoClearForces**(`flag`): `void` Set flag to control automatic clearing of forces after each time step. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`flag` | boolean | +• **flag**: `boolean` -**Returns:** *void* +#### Returns -___ +`void` -### setContinuousPhysics +*** -▸ **setContinuousPhysics**(`flag`: boolean): *void* +### setContinuousPhysics() + +> **setContinuousPhysics**(`flag`): `void` Enable/disable continuous physics. For testing. -**Parameters:** +#### Parameters + +• **flag**: `boolean` -Name | Type | ------- | ------ | -`flag` | boolean | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setGravity +### setGravity() -▸ **setGravity**(`gravity`: [Vec2Value](/api/interfaces/vec2value)): *void* +> **setGravity**(`gravity`): `void` Change the global gravity vector. -**Parameters:** +#### Parameters -Name | Type | ------- | ------ | -`gravity` | [Vec2Value](/api/interfaces/vec2value) | +• **gravity**: [`Vec2Value`](../interfaces/Vec2Value) -**Returns:** *void* +#### Returns -___ +`void` -### setSubStepping +*** -▸ **setSubStepping**(`flag`: boolean): *void* +### setSubStepping() + +> **setSubStepping**(`flag`): `void` Enable/disable single stepped continuous physics. For testing. -**Parameters:** +#### Parameters + +• **flag**: `boolean` -Name | Type | ------- | ------ | -`flag` | boolean | +#### Returns -**Returns:** *void* +`void` -___ +*** -### setWarmStarting +### setWarmStarting() -▸ **setWarmStarting**(`flag`: boolean): *void* +> **setWarmStarting**(`flag`): `void` Enable/disable warm starting. For testing. -**Parameters:** +#### Parameters + +• **flag**: `boolean` -Name | Type | ------- | ------ | -`flag` | boolean | +#### Returns -**Returns:** *void* +`void` -___ +*** -### shiftOrigin +### shiftOrigin() -▸ **shiftOrigin**(`newOrigin`: [Vec2Value](/api/interfaces/vec2value)): *void* +> **shiftOrigin**(`newOrigin`): `void` Shift the world origin. Useful for large worlds. The body shift formula is: position -= newOrigin -**Parameters:** +#### Parameters + +• **newOrigin**: [`Vec2Value`](../interfaces/Vec2Value) + +The new origin with respect to the old origin -Name | Type | Description | ------- | ------ | ------ | -`newOrigin` | [Vec2Value](/api/interfaces/vec2value) | The new origin with respect to the old origin | +#### Returns -**Returns:** *void* +`void` -___ +*** -### step +### step() -▸ **step**(`timeStep`: number, `velocityIterations?`: number, `positionIterations?`: number): *void* +> **step**(`timeStep`, `velocityIterations`?, `positionIterations`?): `void` Take a time step. This performs collision detection, integration, and constraint solution. Broad-phase, narrow-phase, solve and solve time of impacts. -**Parameters:** +#### Parameters + +• **timeStep**: `number` + +Time step, this should not vary. + +• **velocityIterations?**: `number` + +• **positionIterations?**: `number` -Name | Type | Description | ------- | ------ | ------ | -`timeStep` | number | Time step, this should not vary. | -`velocityIterations?` | number | - | -`positionIterations?` | number | - | +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/classes/worldmanifold.md b/docs/pages/api/classes/worldmanifold.md index b579d899..4776630c 100644 --- a/docs/pages/api/classes/worldmanifold.md +++ b/docs/pages/api/classes/worldmanifold.md @@ -1,61 +1,55 @@ - # Class: WorldManifold This is used to compute the current state of a contact manifold. -## Hierarchy - -* **WorldManifold** +## Constructors -## Index +### new WorldManifold() -### Properties +> **new WorldManifold**(): [`WorldManifold`](WorldManifold) -* [normal](/api/classes/worldmanifold#normal) -* [pointCount](/api/classes/worldmanifold#pointcount) -* [points](/api/classes/worldmanifold#points) -* [separations](/api/classes/worldmanifold#separations) +#### Returns -### Methods - -* [recycle](/api/classes/worldmanifold#recycle) +[`WorldManifold`](WorldManifold) ## Properties -### normal +### normal -• **normal**: *[Vec2Value](/api/interfaces/vec2value)* = matrix.vec2(0, 0) +> **normal**: [`Vec2Value`](../interfaces/Vec2Value) World vector pointing from A to B -___ +*** -### pointCount +### pointCount -• **pointCount**: *number* = 0 +> **pointCount**: `number` = `0` The number of manifold points -___ +*** -### points +### points -• **points**: *[Vec2Value](/api/interfaces/vec2value)[]* = [matrix.vec2(0, 0), matrix.vec2(0, 0)] +> **points**: [`Vec2Value`](../interfaces/Vec2Value)[] World contact point (point of intersection) -___ +*** -### separations +### separations -• **separations**: *number[]* = [0, 0] +> **separations**: `number`[] A negative value indicates overlap, in meters ## Methods -### recycle +### recycle() + +> **recycle**(): `void` -▸ **recycle**(): *void* +#### Returns -**Returns:** *void* +`void` diff --git a/docs/pages/api/enumerations/ContactFeatureType.md b/docs/pages/api/enumerations/ContactFeatureType.md new file mode 100644 index 00000000..bbc2240b --- /dev/null +++ b/docs/pages/api/enumerations/ContactFeatureType.md @@ -0,0 +1,19 @@ +# Enumeration: ContactFeatureType + +## Enumeration Members + +### e\_face + +> **e\_face**: `1` + +*** + +### e\_unset + +> **e\_unset**: `-1` + +*** + +### e\_vertex + +> **e\_vertex**: `0` diff --git a/docs/pages/api/enumerations/ManifoldType.md b/docs/pages/api/enumerations/ManifoldType.md new file mode 100644 index 00000000..ec587371 --- /dev/null +++ b/docs/pages/api/enumerations/ManifoldType.md @@ -0,0 +1,25 @@ +# Enumeration: ManifoldType + +## Enumeration Members + +### e\_circles + +> **e\_circles**: `0` + +*** + +### e\_faceA + +> **e\_faceA**: `1` + +*** + +### e\_faceB + +> **e\_faceB**: `2` + +*** + +### e\_unset + +> **e\_unset**: `-1` diff --git a/docs/pages/api/enumerations/PointState.md b/docs/pages/api/enumerations/PointState.md new file mode 100644 index 00000000..29370ee3 --- /dev/null +++ b/docs/pages/api/enumerations/PointState.md @@ -0,0 +1,35 @@ +# Enumeration: PointState + +This is used for determining the state of contact points. + +## Enumeration Members + +### addState + +> **addState**: `1` + +Point was added in the update + +*** + +### nullState + +> **nullState**: `0` + +Point does not exist + +*** + +### persistState + +> **persistState**: `2` + +Point persisted across the update + +*** + +### removeState + +> **removeState**: `3` + +Point was removed in the update diff --git a/docs/pages/api/enumerations/TOIOutputState.md b/docs/pages/api/enumerations/TOIOutputState.md new file mode 100644 index 00000000..21484af0 --- /dev/null +++ b/docs/pages/api/enumerations/TOIOutputState.md @@ -0,0 +1,37 @@ +# Enumeration: TOIOutputState + +## Enumeration Members + +### e\_failed + +> **e\_failed**: `1` + +*** + +### e\_overlapped + +> **e\_overlapped**: `2` + +*** + +### e\_separated + +> **e\_separated**: `4` + +*** + +### e\_touching + +> **e\_touching**: `3` + +*** + +### e\_unknown + +> **e\_unknown**: `0` + +*** + +### e\_unset + +> **e\_unset**: `-1` diff --git a/docs/pages/api/enums/contactfeaturetype.md b/docs/pages/api/enums/contactfeaturetype.md deleted file mode 100644 index df0f1d19..00000000 --- a/docs/pages/api/enums/contactfeaturetype.md +++ /dev/null @@ -1,28 +0,0 @@ - -# Enumeration: ContactFeatureType - -## Index - -### Enumeration members - -* [e_face](/api/enums/contactfeaturetype#e_face) -* [e_unset](/api/enums/contactfeaturetype#e_unset) -* [e_vertex](/api/enums/contactfeaturetype#e_vertex) - -## Enumeration members - -### e_face - -• **e_face**: = 1 - -___ - -### e_unset - -• **e_unset**: = -1 - -___ - -### e_vertex - -• **e_vertex**: = 0 diff --git a/docs/pages/api/enums/manifoldtype.md b/docs/pages/api/enums/manifoldtype.md deleted file mode 100644 index fe49fc42..00000000 --- a/docs/pages/api/enums/manifoldtype.md +++ /dev/null @@ -1,35 +0,0 @@ - -# Enumeration: ManifoldType - -## Index - -### Enumeration members - -* [e_circles](/api/enums/manifoldtype#e_circles) -* [e_faceA](/api/enums/manifoldtype#e_facea) -* [e_faceB](/api/enums/manifoldtype#e_faceb) -* [e_unset](/api/enums/manifoldtype#e_unset) - -## Enumeration members - -### e_circles - -• **e_circles**: = 0 - -___ - -### e_faceA - -• **e_faceA**: = 1 - -___ - -### e_faceB - -• **e_faceB**: = 2 - -___ - -### e_unset - -• **e_unset**: = -1 diff --git a/docs/pages/api/enums/pointstate.md b/docs/pages/api/enums/pointstate.md deleted file mode 100644 index bac20aef..00000000 --- a/docs/pages/api/enums/pointstate.md +++ /dev/null @@ -1,45 +0,0 @@ - -# Enumeration: PointState - -This is used for determining the state of contact points. - -## Index - -### Enumeration members - -* [addState](/api/enums/pointstate#addstate) -* [nullState](/api/enums/pointstate#nullstate) -* [persistState](/api/enums/pointstate#persiststate) -* [removeState](/api/enums/pointstate#removestate) - -## Enumeration members - -### addState - -• **addState**: = 1 - -Point was added in the update - -___ - -### nullState - -• **nullState**: = 0 - -Point does not exist - -___ - -### persistState - -• **persistState**: = 2 - -Point persisted across the update - -___ - -### removeState - -• **removeState**: = 3 - -Point was removed in the update diff --git a/docs/pages/api/enums/separationfunctiontype.md b/docs/pages/api/enums/separationfunctiontype.md deleted file mode 100644 index c396f805..00000000 --- a/docs/pages/api/enums/separationfunctiontype.md +++ /dev/null @@ -1,35 +0,0 @@ - -# Enumeration: SeparationFunctionType - -## Index - -### Enumeration members - -* [e_faceA](/api/enums/separationfunctiontype#e_facea) -* [e_faceB](/api/enums/separationfunctiontype#e_faceb) -* [e_points](/api/enums/separationfunctiontype#e_points) -* [e_unset](/api/enums/separationfunctiontype#e_unset) - -## Enumeration members - -### e_faceA - -• **e_faceA**: = 2 - -___ - -### e_faceB - -• **e_faceB**: = 3 - -___ - -### e_points - -• **e_points**: = 1 - -___ - -### e_unset - -• **e_unset**: = -1 diff --git a/docs/pages/api/enums/toioutputstate.md b/docs/pages/api/enums/toioutputstate.md deleted file mode 100644 index 03ec816d..00000000 --- a/docs/pages/api/enums/toioutputstate.md +++ /dev/null @@ -1,49 +0,0 @@ - -# Enumeration: TOIOutputState - -## Index - -### Enumeration members - -* [e_failed](/api/enums/toioutputstate#e_failed) -* [e_overlapped](/api/enums/toioutputstate#e_overlapped) -* [e_separated](/api/enums/toioutputstate#e_separated) -* [e_touching](/api/enums/toioutputstate#e_touching) -* [e_unknown](/api/enums/toioutputstate#e_unknown) -* [e_unset](/api/enums/toioutputstate#e_unset) - -## Enumeration members - -### e_failed - -• **e_failed**: = 1 - -___ - -### e_overlapped - -• **e_overlapped**: = 2 - -___ - -### e_separated - -• **e_separated**: = 4 - -___ - -### e_touching - -• **e_touching**: = 3 - -___ - -### e_unknown - -• **e_unknown**: = 0 - -___ - -### e_unset - -• **e_unset**: = -1 diff --git a/docs/pages/api/functions/CollideCircles.md b/docs/pages/api/functions/CollideCircles.md new file mode 100644 index 00000000..7513e93a --- /dev/null +++ b/docs/pages/api/functions/CollideCircles.md @@ -0,0 +1,19 @@ +# Function: CollideCircles() + +> **CollideCircles**(`manifold`, `circleA`, `xfA`, `circleB`, `xfB`): `void` + +## Parameters + +• **manifold**: [`Manifold`](../classes/Manifold) + +• **circleA**: [`CircleShape`](../classes/CircleShape) + +• **xfA**: [`TransformValue`](../type-aliases/TransformValue) + +• **circleB**: [`CircleShape`](../classes/CircleShape) + +• **xfB**: [`TransformValue`](../type-aliases/TransformValue) + +## Returns + +`void` diff --git a/docs/pages/api/functions/CollideEdgeCircle.md b/docs/pages/api/functions/CollideEdgeCircle.md new file mode 100644 index 00000000..785b7e53 --- /dev/null +++ b/docs/pages/api/functions/CollideEdgeCircle.md @@ -0,0 +1,19 @@ +# Function: CollideEdgeCircle() + +> **CollideEdgeCircle**(`manifold`, `edgeA`, `xfA`, `circleB`, `xfB`): `void` + +## Parameters + +• **manifold**: [`Manifold`](../classes/Manifold) + +• **edgeA**: [`EdgeShape`](../classes/EdgeShape) + +• **xfA**: [`TransformValue`](../type-aliases/TransformValue) + +• **circleB**: [`CircleShape`](../classes/CircleShape) + +• **xfB**: [`TransformValue`](../type-aliases/TransformValue) + +## Returns + +`void` diff --git a/docs/pages/api/functions/CollideEdgePolygon.md b/docs/pages/api/functions/CollideEdgePolygon.md new file mode 100644 index 00000000..5f1e978f --- /dev/null +++ b/docs/pages/api/functions/CollideEdgePolygon.md @@ -0,0 +1,22 @@ +# Function: CollideEdgePolygon() + +> **CollideEdgePolygon**(`manifold`, `edgeA`, `xfA`, `polygonB`, `xfB`): `void` + +This function collides and edge and a polygon, taking into account edge +adjacency. + +## Parameters + +• **manifold**: [`Manifold`](../classes/Manifold) + +• **edgeA**: [`EdgeShape`](../classes/EdgeShape) + +• **xfA**: [`TransformValue`](../type-aliases/TransformValue) + +• **polygonB**: [`PolygonShape`](../classes/PolygonShape) + +• **xfB**: [`TransformValue`](../type-aliases/TransformValue) + +## Returns + +`void` diff --git a/docs/pages/api/functions/CollidePolygonCircle.md b/docs/pages/api/functions/CollidePolygonCircle.md new file mode 100644 index 00000000..b5c65597 --- /dev/null +++ b/docs/pages/api/functions/CollidePolygonCircle.md @@ -0,0 +1,19 @@ +# Function: CollidePolygonCircle() + +> **CollidePolygonCircle**(`manifold`, `polygonA`, `xfA`, `circleB`, `xfB`): `void` + +## Parameters + +• **manifold**: [`Manifold`](../classes/Manifold) + +• **polygonA**: [`PolygonShape`](../classes/PolygonShape) + +• **xfA**: [`TransformValue`](../type-aliases/TransformValue) + +• **circleB**: [`CircleShape`](../classes/CircleShape) + +• **xfB**: [`TransformValue`](../type-aliases/TransformValue) + +## Returns + +`void` diff --git a/docs/pages/api/functions/CollidePolygons.md b/docs/pages/api/functions/CollidePolygons.md new file mode 100644 index 00000000..13ccfeff --- /dev/null +++ b/docs/pages/api/functions/CollidePolygons.md @@ -0,0 +1,27 @@ +# Function: CollidePolygons() + +> **CollidePolygons**(`manifold`, `polyA`, `xfA`, `polyB`, `xfB`): `void` + +Find edge normal of max separation on A - return if separating axis is found
+Find edge normal of max separation on B - return if separation axis is found
+Choose reference edge as min(minA, minB)
+Find incident edge
+Clip + +The normal points from 1 to 2 + +## Parameters + +• **manifold**: [`Manifold`](../classes/Manifold) + +• **polyA**: [`PolygonShape`](../classes/PolygonShape) + +• **xfA**: [`TransformValue`](../type-aliases/TransformValue) + +• **polyB**: [`PolygonShape`](../classes/PolygonShape) + +• **xfB**: [`TransformValue`](../type-aliases/TransformValue) + +## Returns + +`void` diff --git a/docs/pages/api/functions/Distance.md b/docs/pages/api/functions/Distance.md new file mode 100644 index 00000000..4aca92b9 --- /dev/null +++ b/docs/pages/api/functions/Distance.md @@ -0,0 +1,19 @@ +# Function: Distance() + +> **Distance**(`output`, `cache`, `input`): `void` + +Compute the closest points between two shapes. Supports any combination of: +CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On +the first call set SimplexCache.count to zero. + +## Parameters + +• **output**: [`DistanceOutput`](../classes/DistanceOutput) + +• **cache**: [`SimplexCache`](../classes/SimplexCache) + +• **input**: [`DistanceInput`](../classes/DistanceInput) + +## Returns + +`void` diff --git a/docs/pages/api/functions/ShapeCast.md b/docs/pages/api/functions/ShapeCast.md new file mode 100644 index 00000000..ddd8e63f --- /dev/null +++ b/docs/pages/api/functions/ShapeCast.md @@ -0,0 +1,18 @@ +# Function: ShapeCast() + +> **ShapeCast**(`output`, `input`): `boolean` + +Perform a linear shape cast of shape B moving and shape A fixed. Determines +the hit point, normal, and translation fraction. + +## Parameters + +• **output**: [`ShapeCastOutput`](../classes/ShapeCastOutput) + +• **input**: [`ShapeCastInput`](../classes/ShapeCastInput) + +## Returns + +`boolean` + +true if hit, false if there is no hit or an initial overlap diff --git a/docs/pages/api/functions/TimeOfImpact.md b/docs/pages/api/functions/TimeOfImpact.md new file mode 100644 index 00000000..da460082 --- /dev/null +++ b/docs/pages/api/functions/TimeOfImpact.md @@ -0,0 +1,24 @@ +# Function: TimeOfImpact() + +> **TimeOfImpact**(`output`, `input`): `void` + +Compute the upper bound on time before two shapes penetrate. Time is +represented as a fraction between [0,tMax]. This uses a swept separating axis +and may miss some intermediate, non-tunneling collisions. If you change the +time interval, you should call this function again. + +Note: use Distance to compute the contact point and normal at the time of +impact. + +CCD via the local separating axis method. This seeks progression by computing +the largest time at which separation is maintained. + +## Parameters + +• **output**: [`TOIOutput`](../classes/TOIOutput) + +• **input**: [`TOIInput`](../classes/TOIInput) + +## Returns + +`void` diff --git a/docs/pages/api/functions/clipSegmentToLine.md b/docs/pages/api/functions/clipSegmentToLine.md new file mode 100644 index 00000000..4ccd3352 --- /dev/null +++ b/docs/pages/api/functions/clipSegmentToLine.md @@ -0,0 +1,21 @@ +# Function: clipSegmentToLine() + +> **clipSegmentToLine**(`vOut`, `vIn`, `normal`, `offset`, `vertexIndexA`): `number` + +Clipping for contact manifolds. Sutherland-Hodgman clipping. + +## Parameters + +• **vOut**: [`ClipVertex`](../classes/ClipVertex)[] + +• **vIn**: [`ClipVertex`](../classes/ClipVertex)[] + +• **normal**: [`Vec2Value`](../interfaces/Vec2Value) + +• **offset**: `number` + +• **vertexIndexA**: `number` + +## Returns + +`number` diff --git a/docs/pages/api/functions/getPointStates.md b/docs/pages/api/functions/getPointStates.md new file mode 100644 index 00000000..9c7b777d --- /dev/null +++ b/docs/pages/api/functions/getPointStates.md @@ -0,0 +1,21 @@ +# Function: getPointStates() + +> **getPointStates**(`state1`, `state2`, `manifold1`, `manifold2`): `void` + +Compute the point states given two manifolds. The states pertain to the +transition from manifold1 to manifold2. So state1 is either persist or remove +while state2 is either add or persist. + +## Parameters + +• **state1**: [`PointState`](../enumerations/PointState)[] + +• **state2**: [`PointState`](../enumerations/PointState)[] + +• **manifold1**: [`Manifold`](../classes/Manifold) + +• **manifold2**: [`Manifold`](../classes/Manifold) + +## Returns + +`void` diff --git a/docs/pages/api/functions/mixFriction.md b/docs/pages/api/functions/mixFriction.md new file mode 100644 index 00000000..2a4a1b19 --- /dev/null +++ b/docs/pages/api/functions/mixFriction.md @@ -0,0 +1,16 @@ +# Function: mixFriction() + +> **mixFriction**(`friction1`, `friction2`): `number` + +Friction mixing law. The idea is to allow either fixture to drive the +friction to zero. For example, anything slides on ice. + +## Parameters + +• **friction1**: `number` + +• **friction2**: `number` + +## Returns + +`number` diff --git a/docs/pages/api/functions/mixRestitution.md b/docs/pages/api/functions/mixRestitution.md new file mode 100644 index 00000000..5a65e9f2 --- /dev/null +++ b/docs/pages/api/functions/mixRestitution.md @@ -0,0 +1,16 @@ +# Function: mixRestitution() + +> **mixRestitution**(`restitution1`, `restitution2`): `number` + +Restitution mixing law. The idea is allow for anything to bounce off an +inelastic surface. For example, a superball bounces on anything. + +## Parameters + +• **restitution1**: `number` + +• **restitution2**: `number` + +## Returns + +`number` diff --git a/docs/pages/api/functions/testOverlap.md b/docs/pages/api/functions/testOverlap.md new file mode 100644 index 00000000..934a10b0 --- /dev/null +++ b/docs/pages/api/functions/testOverlap.md @@ -0,0 +1,23 @@ +# Function: testOverlap() + +> **testOverlap**(`shapeA`, `indexA`, `shapeB`, `indexB`, `xfA`, `xfB`): `boolean` + +Determine if two generic shapes overlap. + +## Parameters + +• **shapeA**: [`Shape`](../classes/Shape) + +• **indexA**: `number` + +• **shapeB**: [`Shape`](../classes/Shape) + +• **indexB**: `number` + +• **xfA**: [`TransformValue`](../type-aliases/TransformValue) + +• **xfB**: [`TransformValue`](../type-aliases/TransformValue) + +## Returns + +`boolean` diff --git a/docs/pages/api/globals.md b/docs/pages/api/globals.md deleted file mode 100644 index f5bd17b4..00000000 --- a/docs/pages/api/globals.md +++ /dev/null @@ -1,777 +0,0 @@ - -# API Reference - -## Index - -### Enumerations - -* [ContactFeatureType](/api/enums/contactfeaturetype) -* [ManifoldType](/api/enums/manifoldtype) -* [PointState](/api/enums/pointstate) -* [SeparationFunctionType](/api/enums/separationfunctiontype) -* [TOIOutputState](/api/enums/toioutputstate) - -### Classes - -* [AABB](/api/classes/aabb) -* [Body](/api/classes/body) -* [BoxShape](/api/classes/boxshape) -* [BroadPhase](/api/classes/broadphase) -* [ChainShape](/api/classes/chainshape) -* [CircleShape](/api/classes/circleshape) -* [ClipVertex](/api/classes/clipvertex) -* [Contact](/api/classes/contact) -* [ContactEdge](/api/classes/contactedge) -* [ContactID](/api/classes/contactid) -* [ContactImpulse](/api/classes/contactimpulse) -* [DistanceInput](/api/classes/distanceinput) -* [DistanceJoint](/api/classes/distancejoint) -* [DistanceOutput](/api/classes/distanceoutput) -* [DistanceProxy](/api/classes/distanceproxy) -* [DynamicTree](/api/classes/dynamictree) -* [EdgeShape](/api/classes/edgeshape) -* [Fixture](/api/classes/fixture) -* [FixtureProxy](/api/classes/fixtureproxy) -* [FrictionJoint](/api/classes/frictionjoint) -* [GearJoint](/api/classes/gearjoint) -* [Joint](/api/classes/joint) -* [JointEdge](/api/classes/jointedge) -* [Manifold](/api/classes/manifold) -* [ManifoldPoint](/api/classes/manifoldpoint) -* [Mat22](/api/classes/mat22) -* [Mat33](/api/classes/mat33) -* [MotorJoint](/api/classes/motorjoint) -* [MouseJoint](/api/classes/mousejoint) -* [PolygonShape](/api/classes/polygonshape) -* [Position](/api/classes/position) -* [PrismaticJoint](/api/classes/prismaticjoint) -* [PulleyJoint](/api/classes/pulleyjoint) -* [RevoluteJoint](/api/classes/revolutejoint) -* [RopeJoint](/api/classes/ropejoint) -* [Rot](/api/classes/rot) -* [SeparationFunction](/api/classes/separationfunction) -* [Settings](/api/classes/settings) -* [Shape](/api/classes/shape) -* [ShapeCastInput](/api/classes/shapecastinput) -* [ShapeCastOutput](/api/classes/shapecastoutput) -* [Simplex](/api/classes/simplex) -* [SimplexCache](/api/classes/simplexcache) -* [SimplexVertex](/api/classes/simplexvertex) -* [Solver](/api/classes/solver) -* [Sweep](/api/classes/sweep) -* [TOIInput](/api/classes/toiinput) -* [TOIOutput](/api/classes/toioutput) -* [Testbed](/api/classes/testbed) -* [TimeStep](/api/classes/timestep) -* [Transform](/api/classes/transform) -* [TreeNode](/api/classes/treenode) -* [Vec2](/api/classes/vec2) -* [Vec3](/api/classes/vec3) -* [Velocity](/api/classes/velocity) -* [VelocityConstraintPoint](/api/classes/velocityconstraintpoint) -* [WeldJoint](/api/classes/weldjoint) -* [WheelJoint](/api/classes/wheeljoint) -* [World](/api/classes/world) -* [WorldManifold](/api/classes/worldmanifold) - -### Interfaces - -* [AABBValue](/api/interfaces/aabbvalue) -* [BodyDef](/api/interfaces/bodydef) -* [DistanceJointDef](/api/interfaces/distancejointdef) -* [DistanceJointOpt](/api/interfaces/distancejointopt) -* [FixtureDef](/api/interfaces/fixturedef) -* [FixtureOpt](/api/interfaces/fixtureopt) -* [FrictionJointDef](/api/interfaces/frictionjointdef) -* [FrictionJointOpt](/api/interfaces/frictionjointopt) -* [GearJointDef](/api/interfaces/gearjointdef) -* [GearJointOpt](/api/interfaces/gearjointopt) -* [JointDef](/api/interfaces/jointdef) -* [JointOpt](/api/interfaces/jointopt) -* [MassData](/api/interfaces/massdata) -* [MotorJointDef](/api/interfaces/motorjointdef) -* [MotorJointOpt](/api/interfaces/motorjointopt) -* [MouseJointDef](/api/interfaces/mousejointdef) -* [MouseJointOpt](/api/interfaces/mousejointopt) -* [PrismaticJointDef](/api/interfaces/prismaticjointdef) -* [PrismaticJointOpt](/api/interfaces/prismaticjointopt) -* [PulleyJointDef](/api/interfaces/pulleyjointdef) -* [PulleyJointOpt](/api/interfaces/pulleyjointopt) -* [RayCastInput](/api/interfaces/raycastinput) -* [RayCastOutput](/api/interfaces/raycastoutput) -* [RevoluteJointDef](/api/interfaces/revolutejointdef) -* [RevoluteJointOpt](/api/interfaces/revolutejointopt) -* [RopeJointDef](/api/interfaces/ropejointdef) -* [RopeJointOpt](/api/interfaces/ropejointopt) -* [RotValue](/api/interfaces/rotvalue) -* [Style](/api/interfaces/style) -* [Vec2Value](/api/interfaces/vec2value) -* [Vec3Value](/api/interfaces/vec3value) -* [WeldJointDef](/api/interfaces/weldjointdef) -* [WeldJointOpt](/api/interfaces/weldjointopt) -* [WheelJointDef](/api/interfaces/wheeljointdef) -* [WheelJointOpt](/api/interfaces/wheeljointopt) -* [WorldDef](/api/interfaces/worlddef) - -### Type aliases - -* [ActiveKeys](/api/globals#activekeys) -* [BodyType](/api/globals#bodytype) -* [DynamicTreeQueryCallback](/api/globals#dynamictreequerycallback) -* [EvaluateFunction](/api/globals#evaluatefunction) -* [KEY](/api/globals#key) -* [RayCastCallback](/api/globals#raycastcallback) -* [ShapeType](/api/globals#shapetype) -* [TestbedCallback](/api/globals#testbedcallback) -* [TestbedFactoryOptions](/api/globals#testbedfactoryoptions) -* [TestbedMountOptions](/api/globals#testbedmountoptions) -* [TransformValue](/api/globals#transformvalue) -* [WorldAABBQueryCallback](/api/globals#worldaabbquerycallback) -* [WorldRayCastCallback](/api/globals#worldraycastcallback) - -### Variables - -* [Box](/api/globals#const-box) -* [Chain](/api/globals#const-chain) -* [Circle](/api/globals#const-circle) -* [EPSILON](/api/globals#const-epsilon) -* [Edge](/api/globals#const-edge) -* [Polygon](/api/globals#const-polygon) - -### Functions - -* [ChainCircleContact](/api/globals#chaincirclecontact) -* [CollideCircles](/api/globals#const-collidecircles) -* [CollideEdgeCircle](/api/globals#const-collideedgecircle) -* [CollideEdgePolygon](/api/globals#const-collideedgepolygon) -* [CollidePolygonCircle](/api/globals#const-collidepolygoncircle) -* [CollidePolygons](/api/globals#const-collidepolygons) -* [Distance](/api/globals#const-distance) -* [ShapeCast](/api/globals#const-shapecast) -* [TimeOfImpact](/api/globals#const-timeofimpact) -* [clamp](/api/globals#clamp) -* [clipSegmentToLine](/api/globals#clipsegmenttoline) -* [getPointStates](/api/globals#getpointstates) -* [getTransform](/api/globals#gettransform) -* [isPowerOfTwo](/api/globals#ispoweroftwo) -* [mixFriction](/api/globals#mixfriction) -* [mixRestitution](/api/globals#mixrestitution) -* [mod](/api/globals#mod) -* [nextPowerOfTwo](/api/globals#nextpoweroftwo) -* [random](/api/globals#random) -* [testOverlap](/api/globals#const-testoverlap) - -## Type aliases - -### ActiveKeys - -Ƭ **ActiveKeys**: *object* - -#### Type declaration: - -___ - -### BodyType - -Ƭ **BodyType**: *"static" | "kinematic" | "dynamic"* - -___ - -### DynamicTreeQueryCallback - -Ƭ **DynamicTreeQueryCallback**: *function* - -#### Type declaration: - -▸ (`nodeId`: number): *boolean* - -**Parameters:** - -Name | Type | ------- | ------ | -`nodeId` | number | - -___ - -### EvaluateFunction - -Ƭ **EvaluateFunction**: *function* - -#### Type declaration: - -▸ (`manifold`: [Manifold](/api/classes/manifold), `xfA`: [TransformValue](/api/globals#transformvalue), `fixtureA`: [Fixture](/api/classes/fixture), `indexA`: number, `xfB`: [TransformValue](/api/globals#transformvalue), `fixtureB`: [Fixture](/api/classes/fixture), `indexB`: number): *void* - -**Parameters:** - -Name | Type | ------- | ------ | -`manifold` | [Manifold](/api/classes/manifold) | -`xfA` | [TransformValue](/api/globals#transformvalue) | -`fixtureA` | [Fixture](/api/classes/fixture) | -`indexA` | number | -`xfB` | [TransformValue](/api/globals#transformvalue) | -`fixtureB` | [Fixture](/api/classes/fixture) | -`indexB` | number | - -___ - -### KEY - -Ƭ **KEY**: *"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "right" | "left" | "up" | "down" | "fire"* - -___ - -### RayCastCallback - -Ƭ **RayCastCallback**: *function* - -#### Type declaration: - -▸ (`subInput`: [RayCastInput](/api/interfaces/raycastinput), `id`: number): *number* - -**Parameters:** - -Name | Type | ------- | ------ | -`subInput` | [RayCastInput](/api/interfaces/raycastinput) | -`id` | number | - -___ - -### ShapeType - -Ƭ **ShapeType**: *"circle" | "edge" | "polygon" | "chain"* - -___ - -### TestbedCallback - -Ƭ **TestbedCallback**: *function* - -**`deprecated`** - -#### Type declaration: - -▸ (`testbed`: [Testbed](/api/classes/testbed)): *[World](/api/classes/world)* - -**Parameters:** - -Name | Type | ------- | ------ | -`testbed` | [Testbed](/api/classes/testbed) | - -___ - -### TestbedFactoryOptions - -Ƭ **TestbedFactoryOptions**: *string | object* - -___ - -### TestbedMountOptions - -Ƭ **TestbedMountOptions**: *object* - -#### Type declaration: - -___ - -### TransformValue - -Ƭ **TransformValue**: *object* - -#### Type declaration: - -* **p**: *[Vec2Value](/api/interfaces/vec2value)* - -* **q**: *[RotValue](/api/interfaces/rotvalue)* - -___ - -### WorldAABBQueryCallback - -Ƭ **WorldAABBQueryCallback**: *function* - -Called for each fixture found in the query AABB. It may return `false` to terminate the query. - -#### Type declaration: - -▸ (`fixture`: [Fixture](/api/classes/fixture)): *boolean* - -**Parameters:** - -Name | Type | ------- | ------ | -`fixture` | [Fixture](/api/classes/fixture) | - -___ - -### WorldRayCastCallback - -Ƭ **WorldRayCastCallback**: *function* - -Callback function for ray casts, see [World.rayCast](classes/world#raycast). - -Called for each fixture found in the query. -The returned value replaces the ray-cast input maxFraction. -You control how the ray cast proceeds by returning a numeric/float value. - -- `0` to terminate the ray cast -- `fraction` to clip the ray cast at current point -- `1` don't clip the ray and continue -- `-1` (or anything else) to continue - -**`param`** The fixture hit by the ray - -**`param`** The point of initial intersection - -**`param`** The normal vector at the point of intersection - -**`param`** The fraction along the ray at the point of intersection - -**`returns`** A number to update the maxFraction - -#### Type declaration: - -▸ (`fixture`: [Fixture](/api/classes/fixture), `point`: [Vec2](/api/classes/vec2), `normal`: [Vec2](/api/classes/vec2), `fraction`: number): *number* - -**Parameters:** - -Name | Type | ------- | ------ | -`fixture` | [Fixture](/api/classes/fixture) | -`point` | [Vec2](/api/classes/vec2) | -`normal` | [Vec2](/api/classes/vec2) | -`fraction` | number | - -## Variables - -### `Const` Box - -• **Box**: *[BoxShape](/api/classes/boxshape)* = BoxShape - -___ - -### `Const` Chain - -• **Chain**: *[ChainShape](/api/classes/chainshape)* = ChainShape - -___ - -### `Const` Circle - -• **Circle**: *[CircleShape](/api/classes/circleshape)* = CircleShape - -___ - -### `Const` EPSILON - -• **EPSILON**: *1e-9* = 1e-9 - -___ - -### `Const` Edge - -• **Edge**: *[EdgeShape](/api/classes/edgeshape)* = EdgeShape - -___ - -### `Const` Polygon - -• **Polygon**: *[PolygonShape](/api/classes/polygonshape)* = PolygonShape - -## Functions - -### ChainCircleContact - -▸ **ChainCircleContact**(`manifold`: [Manifold](/api/classes/manifold), `xfA`: [TransformValue](/api/globals#transformvalue), `fixtureA`: [Fixture](/api/classes/fixture), `indexA`: number, `xfB`: [TransformValue](/api/globals#transformvalue), `fixtureB`: [Fixture](/api/classes/fixture), `indexB`: number): *void* - -**Parameters:** - -Name | Type | ------- | ------ | -`manifold` | [Manifold](/api/classes/manifold) | -`xfA` | [TransformValue](/api/globals#transformvalue) | -`fixtureA` | [Fixture](/api/classes/fixture) | -`indexA` | number | -`xfB` | [TransformValue](/api/globals#transformvalue) | -`fixtureB` | [Fixture](/api/classes/fixture) | -`indexB` | number | - -**Returns:** *void* - -___ - -### `Const` CollideCircles - -▸ **CollideCircles**(`manifold`: [Manifold](/api/classes/manifold), `circleA`: [CircleShape](/api/classes/circleshape), `xfA`: [Transform](/api/classes/transform), `circleB`: [CircleShape](/api/classes/circleshape), `xfB`: [Transform](/api/classes/transform)): *void* - -**Parameters:** - -Name | Type | ------- | ------ | -`manifold` | [Manifold](/api/classes/manifold) | -`circleA` | [CircleShape](/api/classes/circleshape) | -`xfA` | [Transform](/api/classes/transform) | -`circleB` | [CircleShape](/api/classes/circleshape) | -`xfB` | [Transform](/api/classes/transform) | - -**Returns:** *void* - -___ - -### `Const` CollideEdgeCircle - -▸ **CollideEdgeCircle**(`manifold`: [Manifold](/api/classes/manifold), `edgeA`: [EdgeShape](/api/classes/edgeshape), `xfA`: [TransformValue](/api/globals#transformvalue), `circleB`: [CircleShape](/api/classes/circleshape), `xfB`: [TransformValue](/api/globals#transformvalue)): *void* - -**Parameters:** - -Name | Type | ------- | ------ | -`manifold` | [Manifold](/api/classes/manifold) | -`edgeA` | [EdgeShape](/api/classes/edgeshape) | -`xfA` | [TransformValue](/api/globals#transformvalue) | -`circleB` | [CircleShape](/api/classes/circleshape) | -`xfB` | [TransformValue](/api/globals#transformvalue) | - -**Returns:** *void* - -___ - -### `Const` CollideEdgePolygon - -▸ **CollideEdgePolygon**(`manifold`: [Manifold](/api/classes/manifold), `edgeA`: [EdgeShape](/api/classes/edgeshape), `xfA`: [TransformValue](/api/globals#transformvalue), `polygonB`: [PolygonShape](/api/classes/polygonshape), `xfB`: [TransformValue](/api/globals#transformvalue)): *void* - -This function collides and edge and a polygon, taking into account edge -adjacency. - -**Parameters:** - -Name | Type | ------- | ------ | -`manifold` | [Manifold](/api/classes/manifold) | -`edgeA` | [EdgeShape](/api/classes/edgeshape) | -`xfA` | [TransformValue](/api/globals#transformvalue) | -`polygonB` | [PolygonShape](/api/classes/polygonshape) | -`xfB` | [TransformValue](/api/globals#transformvalue) | - -**Returns:** *void* - -___ - -### `Const` CollidePolygonCircle - -▸ **CollidePolygonCircle**(`manifold`: [Manifold](/api/classes/manifold), `polygonA`: [PolygonShape](/api/classes/polygonshape), `xfA`: [TransformValue](/api/globals#transformvalue), `circleB`: [CircleShape](/api/classes/circleshape), `xfB`: [TransformValue](/api/globals#transformvalue)): *void* - -**Parameters:** - -Name | Type | ------- | ------ | -`manifold` | [Manifold](/api/classes/manifold) | -`polygonA` | [PolygonShape](/api/classes/polygonshape) | -`xfA` | [TransformValue](/api/globals#transformvalue) | -`circleB` | [CircleShape](/api/classes/circleshape) | -`xfB` | [TransformValue](/api/globals#transformvalue) | - -**Returns:** *void* - -___ - -### `Const` CollidePolygons - -▸ **CollidePolygons**(`manifold`: [Manifold](/api/classes/manifold), `polyA`: [PolygonShape](/api/classes/polygonshape), `xfA`: [TransformValue](/api/globals#transformvalue), `polyB`: [PolygonShape](/api/classes/polygonshape), `xfB`: [TransformValue](/api/globals#transformvalue)): *void* - -Find edge normal of max separation on A - return if separating axis is found
-Find edge normal of max separation on B - return if separation axis is found
-Choose reference edge as min(minA, minB)
-Find incident edge
-Clip - -The normal points from 1 to 2 - -**Parameters:** - -Name | Type | ------- | ------ | -`manifold` | [Manifold](/api/classes/manifold) | -`polyA` | [PolygonShape](/api/classes/polygonshape) | -`xfA` | [TransformValue](/api/globals#transformvalue) | -`polyB` | [PolygonShape](/api/classes/polygonshape) | -`xfB` | [TransformValue](/api/globals#transformvalue) | - -**Returns:** *void* - -___ - -### `Const` Distance - -▸ **Distance**(`output`: [DistanceOutput](/api/classes/distanceoutput), `cache`: [SimplexCache](/api/classes/simplexcache), `input`: [DistanceInput](/api/classes/distanceinput)): *void* - -Compute the closest points between two shapes. Supports any combination of: -CircleShape, PolygonShape, EdgeShape. The simplex cache is input/output. On -the first call set SimplexCache.count to zero. - -**Parameters:** - -Name | Type | ------- | ------ | -`output` | [DistanceOutput](/api/classes/distanceoutput) | -`cache` | [SimplexCache](/api/classes/simplexcache) | -`input` | [DistanceInput](/api/classes/distanceinput) | - -**Returns:** *void* - -___ - -### `Const` ShapeCast - -▸ **ShapeCast**(`output`: [ShapeCastOutput](/api/classes/shapecastoutput), `input`: [ShapeCastInput](/api/classes/shapecastinput)): *boolean* - -Perform a linear shape cast of shape B moving and shape A fixed. Determines -the hit point, normal, and translation fraction. - -**Parameters:** - -Name | Type | ------- | ------ | -`output` | [ShapeCastOutput](/api/classes/shapecastoutput) | -`input` | [ShapeCastInput](/api/classes/shapecastinput) | - -**Returns:** *boolean* - -true if hit, false if there is no hit or an initial overlap - -___ - -### `Const` TimeOfImpact - -▸ **TimeOfImpact**(`output`: [TOIOutput](/api/classes/toioutput), `input`: [TOIInput](/api/classes/toiinput)): *void* - -Compute the upper bound on time before two shapes penetrate. Time is -represented as a fraction between [0,tMax]. This uses a swept separating axis -and may miss some intermediate, non-tunneling collisions. If you change the -time interval, you should call this function again. - -Note: use Distance to compute the contact point and normal at the time of -impact. - -CCD via the local separating axis method. This seeks progression by computing -the largest time at which separation is maintained. - -**Parameters:** - -Name | Type | ------- | ------ | -`output` | [TOIOutput](/api/classes/toioutput) | -`input` | [TOIInput](/api/classes/toiinput) | - -**Returns:** *void* - -___ - -### clamp - -▸ **clamp**(`num`: number, `min`: number, `max`: number): *number* - -**`deprecated`** -Returns a min if num is less than min, and max if more than max, otherwise returns num. - -**Parameters:** - -Name | Type | ------- | ------ | -`num` | number | -`min` | number | -`max` | number | - -**Returns:** *number* - -___ - -### clipSegmentToLine - -▸ **clipSegmentToLine**(`vOut`: [ClipVertex](/api/classes/clipvertex)[], `vIn`: [ClipVertex](/api/classes/clipvertex)[], `normal`: [Vec2Value](/api/interfaces/vec2value), `offset`: number, `vertexIndexA`: number): *number* - -Clipping for contact manifolds. Sutherland-Hodgman clipping. - -**Parameters:** - -Name | Type | ------- | ------ | -`vOut` | [ClipVertex](/api/classes/clipvertex)[] | -`vIn` | [ClipVertex](/api/classes/clipvertex)[] | -`normal` | [Vec2Value](/api/interfaces/vec2value) | -`offset` | number | -`vertexIndexA` | number | - -**Returns:** *number* - -___ - -### getPointStates - -▸ **getPointStates**(`state1`: [PointState](/api/enums/pointstate)[], `state2`: [PointState](/api/enums/pointstate)[], `manifold1`: [Manifold](/api/classes/manifold), `manifold2`: [Manifold](/api/classes/manifold)): *void* - -Compute the point states given two manifolds. The states pertain to the -transition from manifold1 to manifold2. So state1 is either persist or remove -while state2 is either add or persist. - -**Parameters:** - -Name | Type | ------- | ------ | -`state1` | [PointState](/api/enums/pointstate)[] | -`state2` | [PointState](/api/enums/pointstate)[] | -`manifold1` | [Manifold](/api/classes/manifold) | -`manifold2` | [Manifold](/api/classes/manifold) | - -**Returns:** *void* - -___ - -### getTransform - -▸ **getTransform**(`xf`: [TransformValue](/api/globals#transformvalue), `p`: [Vec2Value](/api/interfaces/vec2value), `c`: [Vec2Value](/api/interfaces/vec2value), `a`: number): *[TransformValue](/api/globals#transformvalue)* - -**Parameters:** - -Name | Type | ------- | ------ | -`xf` | [TransformValue](/api/globals#transformvalue) | -`p` | [Vec2Value](/api/interfaces/vec2value) | -`c` | [Vec2Value](/api/interfaces/vec2value) | -`a` | number | - -**Returns:** *[TransformValue](/api/globals#transformvalue)* - -___ - -### isPowerOfTwo - -▸ **isPowerOfTwo**(`x`: number): *boolean* - -**`deprecated`** - -**Parameters:** - -Name | Type | ------- | ------ | -`x` | number | - -**Returns:** *boolean* - -___ - -### mixFriction - -▸ **mixFriction**(`friction1`: number, `friction2`: number): *number* - -Friction mixing law. The idea is to allow either fixture to drive the -friction to zero. For example, anything slides on ice. - -**Parameters:** - -Name | Type | ------- | ------ | -`friction1` | number | -`friction2` | number | - -**Returns:** *number* - -___ - -### mixRestitution - -▸ **mixRestitution**(`restitution1`: number, `restitution2`: number): *number* - -Restitution mixing law. The idea is allow for anything to bounce off an -inelastic surface. For example, a superball bounces on anything. - -**Parameters:** - -Name | Type | ------- | ------ | -`restitution1` | number | -`restitution2` | number | - -**Returns:** *number* - -___ - -### mod - -▸ **mod**(`num`: number, `min?`: number, `max?`: number): *number* - -**`deprecated`** - -**Parameters:** - -Name | Type | ------- | ------ | -`num` | number | -`min?` | number | -`max?` | number | - -**Returns:** *number* - -___ - -### nextPowerOfTwo - -▸ **nextPowerOfTwo**(`x`: number): *number* - -**`deprecated`** -Next Largest Power of 2 Given a binary integer value x, the next largest -power of 2 can be computed by a SWAR algorithm that recursively "folds" the -upper bits into the lower bits. This process yields a bit vector with the -same most significant 1 as x, but all 1's below it. Adding 1 to that value -yields the next largest power of 2. For a 32-bit value: - -**Parameters:** - -Name | Type | ------- | ------ | -`x` | number | - -**Returns:** *number* - -___ - -### random - -▸ **random**(`min?`: number, `max?`: number): *number* - -**`deprecated`** -Returns a random number between min and max when two arguments are provided. -If one arg is provided between 0 to max. -If one arg is passed between 0 to 1. - -**Parameters:** - -Name | Type | ------- | ------ | -`min?` | number | -`max?` | number | - -**Returns:** *number* - -___ - -### `Const` testOverlap - -▸ **testOverlap**(`shapeA`: [Shape](/api/classes/shape), `indexA`: number, `shapeB`: [Shape](/api/classes/shape), `indexB`: number, `xfA`: [TransformValue](/api/globals#transformvalue), `xfB`: [TransformValue](/api/globals#transformvalue)): *boolean* - -Determine if two generic shapes overlap. - -**Parameters:** - -Name | Type | ------- | ------ | -`shapeA` | [Shape](/api/classes/shape) | -`indexA` | number | -`shapeB` | [Shape](/api/classes/shape) | -`indexB` | number | -`xfA` | [TransformValue](/api/globals#transformvalue) | -`xfB` | [TransformValue](/api/globals#transformvalue) | - -**Returns:** *boolean* diff --git a/docs/pages/api/index.md b/docs/pages/api/index.md deleted file mode 120000 index 0e7b5aa2..00000000 --- a/docs/pages/api/index.md +++ /dev/null @@ -1 +0,0 @@ -globals.md \ No newline at end of file diff --git a/docs/pages/api/index.md b/docs/pages/api/index.md new file mode 100644 index 00000000..92dff981 --- /dev/null +++ b/docs/pages/api/index.md @@ -0,0 +1,141 @@ +# API Reference + +## Enumerations + +- [ContactFeatureType](enumerations/ContactFeatureType) +- [ManifoldType](enumerations/ManifoldType) +- [PointState](enumerations/PointState) +- [TOIOutputState](enumerations/TOIOutputState) + +## Classes + +- [AABB](classes/AABB) +- [Body](classes/Body) +- [BoxShape](classes/BoxShape) +- [BroadPhase](classes/BroadPhase) +- [ChainShape](classes/ChainShape) +- [CircleShape](classes/CircleShape) +- [ClipVertex](classes/ClipVertex) +- [Contact](classes/Contact) +- [ContactEdge](classes/ContactEdge) +- [ContactID](classes/ContactID) +- [ContactImpulse](classes/ContactImpulse) +- [DistanceInput](classes/DistanceInput) +- [DistanceJoint](classes/DistanceJoint) +- [DistanceOutput](classes/DistanceOutput) +- [DistanceProxy](classes/DistanceProxy) +- [DynamicTree](classes/DynamicTree) +- [EdgeShape](classes/EdgeShape) +- [Fixture](classes/Fixture) +- [FixtureProxy](classes/FixtureProxy) +- [FrictionJoint](classes/FrictionJoint) +- [GearJoint](classes/GearJoint) +- [Joint](classes/Joint) +- [JointEdge](classes/JointEdge) +- [Manifold](classes/Manifold) +- [ManifoldPoint](classes/ManifoldPoint) +- [Mat22](classes/Mat22) +- [Mat33](classes/Mat33) +- [MotorJoint](classes/MotorJoint) +- [MouseJoint](classes/MouseJoint) +- [PolygonShape](classes/PolygonShape) +- [PrismaticJoint](classes/PrismaticJoint) +- [PulleyJoint](classes/PulleyJoint) +- [RevoluteJoint](classes/RevoluteJoint) +- [RopeJoint](classes/RopeJoint) +- [Rot](classes/Rot) +- [Settings](classes/Settings) +- [Shape](classes/Shape) +- [ShapeCastInput](classes/ShapeCastInput) +- [ShapeCastOutput](classes/ShapeCastOutput) +- [SimplexCache](classes/SimplexCache) +- [Solver](classes/Solver) +- [Sweep](classes/Sweep) +- [Testbed](classes/Testbed) +- [TimeStep](classes/TimeStep) +- [TOIInput](classes/TOIInput) +- [TOIOutput](classes/TOIOutput) +- [Transform](classes/Transform) +- [TreeNode](classes/TreeNode) +- [Vec2](classes/Vec2) +- [Vec3](classes/Vec3) +- [VelocityConstraintPoint](classes/VelocityConstraintPoint) +- [WeldJoint](classes/WeldJoint) +- [WheelJoint](classes/WheelJoint) +- [World](classes/World) +- [WorldManifold](classes/WorldManifold) + +## Interfaces + +- [AABBValue](interfaces/AABBValue) +- [BodyDef](interfaces/BodyDef) +- [DistanceJointDef](interfaces/DistanceJointDef) +- [DistanceJointOpt](interfaces/DistanceJointOpt) +- [FixtureDef](interfaces/FixtureDef) +- [FixtureOpt](interfaces/FixtureOpt) +- [FrictionJointDef](interfaces/FrictionJointDef) +- [FrictionJointOpt](interfaces/FrictionJointOpt) +- [GearJointDef](interfaces/GearJointDef) +- [GearJointOpt](interfaces/GearJointOpt) +- [JointDef](interfaces/JointDef) +- [JointOpt](interfaces/JointOpt) +- [MassData](interfaces/MassData) +- [MotorJointDef](interfaces/MotorJointDef) +- [MotorJointOpt](interfaces/MotorJointOpt) +- [MouseJointDef](interfaces/MouseJointDef) +- [MouseJointOpt](interfaces/MouseJointOpt) +- [PrismaticJointDef](interfaces/PrismaticJointDef) +- [PrismaticJointOpt](interfaces/PrismaticJointOpt) +- [PulleyJointDef](interfaces/PulleyJointDef) +- [PulleyJointOpt](interfaces/PulleyJointOpt) +- [RayCastInput](interfaces/RayCastInput) +- [RayCastOutput](interfaces/RayCastOutput) +- [RevoluteJointDef](interfaces/RevoluteJointDef) +- [RevoluteJointOpt](interfaces/RevoluteJointOpt) +- [RopeJointDef](interfaces/RopeJointDef) +- [RopeJointOpt](interfaces/RopeJointOpt) +- [RotValue](interfaces/RotValue) +- [Style](interfaces/Style) +- [Vec2Value](interfaces/Vec2Value) +- [Vec3Value](interfaces/Vec3Value) +- [WeldJointDef](interfaces/WeldJointDef) +- [WeldJointOpt](interfaces/WeldJointOpt) +- [WheelJointDef](interfaces/WheelJointDef) +- [WheelJointOpt](interfaces/WheelJointOpt) +- [WorldDef](interfaces/WorldDef) + +## Type Aliases + +- [ActiveKeys](type-aliases/ActiveKeys) +- [BodyType](type-aliases/BodyType) +- [DynamicTreeQueryCallback](type-aliases/DynamicTreeQueryCallback) +- [EvaluateFunction](type-aliases/EvaluateFunction) +- [RayCastCallback](type-aliases/RayCastCallback) +- [ShapeType](type-aliases/ShapeType) +- [TransformValue](type-aliases/TransformValue) +- [WorldAABBQueryCallback](type-aliases/WorldAABBQueryCallback) +- [WorldRayCastCallback](type-aliases/WorldRayCastCallback) + +## Variables + +- [Box](variables/Box) +- [Chain](variables/Chain) +- [Circle](variables/Circle) +- [Edge](variables/Edge) +- [Polygon](variables/Polygon) + +## Functions + +- [clipSegmentToLine](functions/clipSegmentToLine) +- [CollideCircles](functions/CollideCircles) +- [CollideEdgeCircle](functions/CollideEdgeCircle) +- [CollideEdgePolygon](functions/CollideEdgePolygon) +- [CollidePolygonCircle](functions/CollidePolygonCircle) +- [CollidePolygons](functions/CollidePolygons) +- [Distance](functions/Distance) +- [getPointStates](functions/getPointStates) +- [mixFriction](functions/mixFriction) +- [mixRestitution](functions/mixRestitution) +- [ShapeCast](functions/ShapeCast) +- [testOverlap](functions/testOverlap) +- [TimeOfImpact](functions/TimeOfImpact) diff --git a/docs/pages/api/interfaces/AABBValue.md b/docs/pages/api/interfaces/AABBValue.md new file mode 100644 index 00000000..4cac2053 --- /dev/null +++ b/docs/pages/api/interfaces/AABBValue.md @@ -0,0 +1,15 @@ +# Interface: AABBValue + +Axis-aligned bounding box + +## Properties + +### lowerBound + +> **lowerBound**: [`Vec2Value`](Vec2Value) + +*** + +### upperBound + +> **upperBound**: [`Vec2Value`](Vec2Value) diff --git a/docs/pages/api/interfaces/BodyDef.md b/docs/pages/api/interfaces/BodyDef.md new file mode 100644 index 00000000..778b72b1 --- /dev/null +++ b/docs/pages/api/interfaces/BodyDef.md @@ -0,0 +1,119 @@ +# Interface: BodyDef + +## Properties + +### active? + +> `optional` **active**: `boolean` + +Does this body start out active? + +*** + +### allowSleep? + +> `optional` **allowSleep**: `boolean` + +Set this flag to false if this body should never fall asleep. Note that this increases CPU usage. + +*** + +### angle? + +> `optional` **angle**: `number` + +The world angle of the body in radians. + +*** + +### angularDamping? + +> `optional` **angularDamping**: `number` + +Angular damping is use to reduce the angular velocity. +The damping parameter can be larger than 1.0 but the damping effect +becomes sensitive to the time step when the damping parameter is large. +Units are 1/time + +*** + +### angularVelocity? + +> `optional` **angularVelocity**: `number` + +*** + +### awake? + +> `optional` **awake**: `boolean` + +Is this body initially awake or sleeping? + +*** + +### bullet? + +> `optional` **bullet**: `boolean` + +Is this a fast moving body that should be prevented from +tunneling through other moving bodies? Note that all bodies are +prevented from tunneling through kinematic and static bodies. This +setting is only considered on dynamic bodies. Warning: You should use +this flag sparingly since it increases processing time. + +*** + +### fixedRotation? + +> `optional` **fixedRotation**: `boolean` + +Should this body be prevented from rotating? Useful for characters. + +*** + +### gravityScale? + +> `optional` **gravityScale**: `number` + +*** + +### linearDamping? + +> `optional` **linearDamping**: `number` + +Linear damping is use to reduce the linear velocity. The +damping parameter can be larger than 1.0 but the damping effect becomes +sensitive to the time step when the damping parameter is large. +Units are 1/time + +*** + +### linearVelocity? + +> `optional` **linearVelocity**: [`Vec2Value`](Vec2Value) + +The linear velocity of the body's origin in world co-ordinates. + +*** + +### position? + +> `optional` **position**: [`Vec2Value`](Vec2Value) + +The world position of the body. Avoid creating bodies at the +origin since this can lead to many overlapping shapes. + +*** + +### type? + +> `optional` **type**: [`BodyType`](../type-aliases/BodyType) + +Body types are static, kinematic, or dynamic. Note: if a dynamic +body would have zero mass, the mass is set to one. + +*** + +### userData? + +> `optional` **userData**: `any` diff --git a/docs/pages/api/interfaces/DistanceJointDef.md b/docs/pages/api/interfaces/DistanceJointDef.md new file mode 100644 index 00000000..0cf7a5a2 --- /dev/null +++ b/docs/pages/api/interfaces/DistanceJointDef.md @@ -0,0 +1,112 @@ +# Interface: DistanceJointDef + +Distance joint definition. This requires defining an anchor point on both +bodies and the non-zero length of the distance joint. The definition uses +local anchor points so that the initial configuration can violate the +constraint slightly. This helps when saving and loading a game. Warning: Do +not use a zero or short length. + +## Extends + +- [`JointDef`](JointDef).[`DistanceJointOpt`](DistanceJointOpt) + +## Properties + +### bodyA + +> **bodyA**: [`Body`](../classes/Body) + +The first attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) + +*** + +### bodyB + +> **bodyB**: [`Body`](../classes/Body) + +The second attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) + +*** + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`DistanceJointOpt`](DistanceJointOpt).[`collideConnected`](DistanceJointOpt#collideconnected) + +*** + +### dampingRatio? + +> `optional` **dampingRatio**: `number` + +The damping ratio. 0 = no damping, 1 = critical damping. + +#### Inherited from + +[`DistanceJointOpt`](DistanceJointOpt).[`dampingRatio`](DistanceJointOpt#dampingratio) + +*** + +### frequencyHz? + +> `optional` **frequencyHz**: `number` + +The mass-spring-damper frequency in Hertz. A value of 0 disables softness. + +#### Inherited from + +[`DistanceJointOpt`](DistanceJointOpt).[`frequencyHz`](DistanceJointOpt#frequencyhz) + +*** + +### length? + +> `optional` **length**: `number` + +Distance length. + +#### Inherited from + +[`DistanceJointOpt`](DistanceJointOpt).[`length`](DistanceJointOpt#length) + +*** + +### localAnchorA + +> **localAnchorA**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyA's origin. + +*** + +### localAnchorB + +> **localAnchorB**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyB's origin. + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`DistanceJointOpt`](DistanceJointOpt).[`userData`](DistanceJointOpt#userdata) diff --git a/docs/pages/api/interfaces/DistanceJointOpt.md b/docs/pages/api/interfaces/DistanceJointOpt.md new file mode 100644 index 00000000..604789cb --- /dev/null +++ b/docs/pages/api/interfaces/DistanceJointOpt.md @@ -0,0 +1,64 @@ +# Interface: DistanceJointOpt + +Distance joint definition. This requires defining an anchor point on both +bodies and the non-zero length of the distance joint. The definition uses +local anchor points so that the initial configuration can violate the +constraint slightly. This helps when saving and loading a game. Warning: Do +not use a zero or short length. + +## Extends + +- [`JointOpt`](JointOpt) + +## Extended by + +- [`DistanceJointDef`](DistanceJointDef) + +## Properties + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) + +*** + +### dampingRatio? + +> `optional` **dampingRatio**: `number` + +The damping ratio. 0 = no damping, 1 = critical damping. + +*** + +### frequencyHz? + +> `optional` **frequencyHz**: `number` + +The mass-spring-damper frequency in Hertz. A value of 0 disables softness. + +*** + +### length? + +> `optional` **length**: `number` + +Distance length. + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/FixtureDef.md b/docs/pages/api/interfaces/FixtureDef.md new file mode 100644 index 00000000..b21feb1a --- /dev/null +++ b/docs/pages/api/interfaces/FixtureDef.md @@ -0,0 +1,110 @@ +# Interface: FixtureDef + +A fixture definition is used to create a fixture. This class defines an +abstract fixture definition. You can reuse fixture definitions safely. + +## Extends + +- [`FixtureOpt`](FixtureOpt) + +## Properties + +### density? + +> `optional` **density**: `number` + +The density, usually in kg/m^2 + +#### Inherited from + +[`FixtureOpt`](FixtureOpt).[`density`](FixtureOpt#density) + +*** + +### filterCategoryBits? + +> `optional` **filterCategoryBits**: `number` + +Collision category bit or bits that this fixture belongs to. +If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa. + +#### Inherited from + +[`FixtureOpt`](FixtureOpt).[`filterCategoryBits`](FixtureOpt#filtercategorybits) + +*** + +### filterGroupIndex? + +> `optional` **filterGroupIndex**: `number` + +Zero, positive or negative collision group. +Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide. + +#### Inherited from + +[`FixtureOpt`](FixtureOpt).[`filterGroupIndex`](FixtureOpt#filtergroupindex) + +*** + +### filterMaskBits? + +> `optional` **filterMaskBits**: `number` + +Collision category bit or bits that this fixture accept for collision. + +#### Inherited from + +[`FixtureOpt`](FixtureOpt).[`filterMaskBits`](FixtureOpt#filtermaskbits) + +*** + +### friction? + +> `optional` **friction**: `number` + +The friction coefficient, usually in the range [0,1] + +#### Inherited from + +[`FixtureOpt`](FixtureOpt).[`friction`](FixtureOpt#friction) + +*** + +### isSensor? + +> `optional` **isSensor**: `boolean` + +A sensor shape collects contact information but never generates a collision response. + +#### Inherited from + +[`FixtureOpt`](FixtureOpt).[`isSensor`](FixtureOpt#issensor) + +*** + +### restitution? + +> `optional` **restitution**: `number` + +The restitution (elasticity) usually in the range [0,1] + +#### Inherited from + +[`FixtureOpt`](FixtureOpt).[`restitution`](FixtureOpt#restitution) + +*** + +### shape + +> **shape**: [`Shape`](../classes/Shape) + +*** + +### userData? + +> `optional` **userData**: `unknown` + +#### Inherited from + +[`FixtureOpt`](FixtureOpt).[`userData`](FixtureOpt#userdata) diff --git a/docs/pages/api/interfaces/FixtureOpt.md b/docs/pages/api/interfaces/FixtureOpt.md new file mode 100644 index 00000000..781d5b2b --- /dev/null +++ b/docs/pages/api/interfaces/FixtureOpt.md @@ -0,0 +1,72 @@ +# Interface: FixtureOpt + +A fixture definition is used to create a fixture. This class defines an +abstract fixture definition. You can reuse fixture definitions safely. + +## Extended by + +- [`FixtureDef`](FixtureDef) + +## Properties + +### density? + +> `optional` **density**: `number` + +The density, usually in kg/m^2 + +*** + +### filterCategoryBits? + +> `optional` **filterCategoryBits**: `number` + +Collision category bit or bits that this fixture belongs to. +If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa. + +*** + +### filterGroupIndex? + +> `optional` **filterGroupIndex**: `number` + +Zero, positive or negative collision group. +Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide. + +*** + +### filterMaskBits? + +> `optional` **filterMaskBits**: `number` + +Collision category bit or bits that this fixture accept for collision. + +*** + +### friction? + +> `optional` **friction**: `number` + +The friction coefficient, usually in the range [0,1] + +*** + +### isSensor? + +> `optional` **isSensor**: `boolean` + +A sensor shape collects contact information but never generates a collision response. + +*** + +### restitution? + +> `optional` **restitution**: `number` + +The restitution (elasticity) usually in the range [0,1] + +*** + +### userData? + +> `optional` **userData**: `unknown` diff --git a/docs/pages/api/interfaces/FrictionJointDef.md b/docs/pages/api/interfaces/FrictionJointDef.md new file mode 100644 index 00000000..d9cdf631 --- /dev/null +++ b/docs/pages/api/interfaces/FrictionJointDef.md @@ -0,0 +1,96 @@ +# Interface: FrictionJointDef + +Friction joint definition. + +## Extends + +- [`JointDef`](JointDef).[`FrictionJointOpt`](FrictionJointOpt) + +## Properties + +### bodyA + +> **bodyA**: [`Body`](../classes/Body) + +The first attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) + +*** + +### bodyB + +> **bodyB**: [`Body`](../classes/Body) + +The second attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) + +*** + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`FrictionJointOpt`](FrictionJointOpt).[`collideConnected`](FrictionJointOpt#collideconnected) + +*** + +### localAnchorA + +> **localAnchorA**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyA's origin. + +*** + +### localAnchorB + +> **localAnchorB**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyB's origin. + +*** + +### maxForce? + +> `optional` **maxForce**: `number` + +The maximum friction force in N. + +#### Inherited from + +[`FrictionJointOpt`](FrictionJointOpt).[`maxForce`](FrictionJointOpt#maxforce) + +*** + +### maxTorque? + +> `optional` **maxTorque**: `number` + +The maximum friction torque in N-m. + +#### Inherited from + +[`FrictionJointOpt`](FrictionJointOpt).[`maxTorque`](FrictionJointOpt#maxtorque) + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`FrictionJointOpt`](FrictionJointOpt).[`userData`](FrictionJointOpt#userdata) diff --git a/docs/pages/api/interfaces/FrictionJointOpt.md b/docs/pages/api/interfaces/FrictionJointOpt.md new file mode 100644 index 00000000..520bfb63 --- /dev/null +++ b/docs/pages/api/interfaces/FrictionJointOpt.md @@ -0,0 +1,52 @@ +# Interface: FrictionJointOpt + +Friction joint definition. + +## Extends + +- [`JointOpt`](JointOpt) + +## Extended by + +- [`FrictionJointDef`](FrictionJointDef) + +## Properties + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) + +*** + +### maxForce? + +> `optional` **maxForce**: `number` + +The maximum friction force in N. + +*** + +### maxTorque? + +> `optional` **maxTorque**: `number` + +The maximum friction torque in N-m. + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/GearJointDef.md b/docs/pages/api/interfaces/GearJointDef.md new file mode 100644 index 00000000..faf06ee0 --- /dev/null +++ b/docs/pages/api/interfaces/GearJointDef.md @@ -0,0 +1,84 @@ +# Interface: GearJointDef + +Gear joint definition. + +## Extends + +- [`JointDef`](JointDef).[`GearJointOpt`](GearJointOpt) + +## Properties + +### bodyA + +> **bodyA**: [`Body`](../classes/Body) + +The first attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) + +*** + +### bodyB + +> **bodyB**: [`Body`](../classes/Body) + +The second attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) + +*** + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`GearJointOpt`](GearJointOpt).[`collideConnected`](GearJointOpt#collideconnected) + +*** + +### joint1 + +> **joint1**: [`RevoluteJoint`](../classes/RevoluteJoint) \| [`PrismaticJoint`](../classes/PrismaticJoint) + +The first revolute/prismatic joint attached to the gear joint. + +*** + +### joint2 + +> **joint2**: [`RevoluteJoint`](../classes/RevoluteJoint) \| [`PrismaticJoint`](../classes/PrismaticJoint) + +The second prismatic/revolute joint attached to the gear joint. + +*** + +### ratio? + +> `optional` **ratio**: `number` + +The gear ratio. See [GearJoint](../classes/GearJoint) for explanation. + +#### Inherited from + +[`GearJointOpt`](GearJointOpt).[`ratio`](GearJointOpt#ratio) + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`GearJointOpt`](GearJointOpt).[`userData`](GearJointOpt#userdata) diff --git a/docs/pages/api/interfaces/GearJointOpt.md b/docs/pages/api/interfaces/GearJointOpt.md new file mode 100644 index 00000000..92214218 --- /dev/null +++ b/docs/pages/api/interfaces/GearJointOpt.md @@ -0,0 +1,44 @@ +# Interface: GearJointOpt + +Gear joint definition. + +## Extends + +- [`JointOpt`](JointOpt) + +## Extended by + +- [`GearJointDef`](GearJointDef) + +## Properties + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) + +*** + +### ratio? + +> `optional` **ratio**: `number` + +The gear ratio. See [GearJoint](../classes/GearJoint) for explanation. + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/JointDef.md b/docs/pages/api/interfaces/JointDef.md new file mode 100644 index 00000000..f93ff8e9 --- /dev/null +++ b/docs/pages/api/interfaces/JointDef.md @@ -0,0 +1,62 @@ +# Interface: JointDef + +Joint definitions are used to construct joints. + +## Extends + +- [`JointOpt`](JointOpt) + +## Extended by + +- [`DistanceJointDef`](DistanceJointDef) +- [`FrictionJointDef`](FrictionJointDef) +- [`GearJointDef`](GearJointDef) +- [`MotorJointDef`](MotorJointDef) +- [`MouseJointDef`](MouseJointDef) +- [`PrismaticJointDef`](PrismaticJointDef) +- [`PulleyJointDef`](PulleyJointDef) +- [`RevoluteJointDef`](RevoluteJointDef) +- [`RopeJointDef`](RopeJointDef) +- [`WeldJointDef`](WeldJointDef) +- [`WheelJointDef`](WheelJointDef) + +## Properties + +### bodyA + +> **bodyA**: [`Body`](../classes/Body) + +The first attached body. + +*** + +### bodyB + +> **bodyB**: [`Body`](../classes/Body) + +The second attached body. + +*** + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/JointOpt.md b/docs/pages/api/interfaces/JointOpt.md new file mode 100644 index 00000000..5629f61d --- /dev/null +++ b/docs/pages/api/interfaces/JointOpt.md @@ -0,0 +1,35 @@ +# Interface: JointOpt + +Joint definitions are used to construct joints. + +## Extended by + +- [`JointDef`](JointDef) +- [`DistanceJointOpt`](DistanceJointOpt) +- [`FrictionJointOpt`](FrictionJointOpt) +- [`GearJointOpt`](GearJointOpt) +- [`MotorJointOpt`](MotorJointOpt) +- [`MouseJointOpt`](MouseJointOpt) +- [`PrismaticJointOpt`](PrismaticJointOpt) +- [`PulleyJointOpt`](PulleyJointOpt) +- [`RevoluteJointOpt`](RevoluteJointOpt) +- [`RopeJointOpt`](RopeJointOpt) +- [`WeldJointOpt`](WeldJointOpt) +- [`WheelJointOpt`](WheelJointOpt) + +## Properties + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. diff --git a/docs/pages/api/interfaces/MassData.md b/docs/pages/api/interfaces/MassData.md new file mode 100644 index 00000000..ad3b2dcb --- /dev/null +++ b/docs/pages/api/interfaces/MassData.md @@ -0,0 +1,27 @@ +# Interface: MassData + +MassData This holds the mass data computed for a shape. + +## Properties + +### center + +> **center**: [`Vec2Value`](Vec2Value) + +The position of the shape's centroid relative to the shape's origin. + +*** + +### I + +> **I**: `number` + +The rotational inertia of the shape about the local origin. + +*** + +### mass + +> **mass**: `number` + +The mass of the shape, usually in kilograms. diff --git a/docs/pages/api/interfaces/MotorJointDef.md b/docs/pages/api/interfaces/MotorJointDef.md new file mode 100644 index 00000000..46c6d21f --- /dev/null +++ b/docs/pages/api/interfaces/MotorJointDef.md @@ -0,0 +1,116 @@ +# Interface: MotorJointDef + +Motor joint definition. + +## Extends + +- [`JointDef`](JointDef).[`MotorJointOpt`](MotorJointOpt) + +## Properties + +### angularOffset? + +> `optional` **angularOffset**: `number` + +The bodyB angle minus bodyA angle in radians. + +#### Inherited from + +[`MotorJointOpt`](MotorJointOpt).[`angularOffset`](MotorJointOpt#angularoffset) + +*** + +### bodyA + +> **bodyA**: [`Body`](../classes/Body) + +The first attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) + +*** + +### bodyB + +> **bodyB**: [`Body`](../classes/Body) + +The second attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) + +*** + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`MotorJointOpt`](MotorJointOpt).[`collideConnected`](MotorJointOpt#collideconnected) + +*** + +### correctionFactor? + +> `optional` **correctionFactor**: `number` + +Position correction factor in the range [0,1]. + +#### Inherited from + +[`MotorJointOpt`](MotorJointOpt).[`correctionFactor`](MotorJointOpt#correctionfactor) + +*** + +### linearOffset? + +> `optional` **linearOffset**: [`Vec2Value`](Vec2Value) + +Position of bodyB minus the position of bodyA, in bodyA's frame, in meters. + +#### Inherited from + +[`MotorJointOpt`](MotorJointOpt).[`linearOffset`](MotorJointOpt#linearoffset) + +*** + +### maxForce? + +> `optional` **maxForce**: `number` + +The maximum motor force in N. + +#### Inherited from + +[`MotorJointOpt`](MotorJointOpt).[`maxForce`](MotorJointOpt#maxforce) + +*** + +### maxTorque? + +> `optional` **maxTorque**: `number` + +The maximum motor torque in N-m. + +#### Inherited from + +[`MotorJointOpt`](MotorJointOpt).[`maxTorque`](MotorJointOpt#maxtorque) + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`MotorJointOpt`](MotorJointOpt).[`userData`](MotorJointOpt#userdata) diff --git a/docs/pages/api/interfaces/MotorJointOpt.md b/docs/pages/api/interfaces/MotorJointOpt.md new file mode 100644 index 00000000..11c99a20 --- /dev/null +++ b/docs/pages/api/interfaces/MotorJointOpt.md @@ -0,0 +1,76 @@ +# Interface: MotorJointOpt + +Motor joint definition. + +## Extends + +- [`JointOpt`](JointOpt) + +## Extended by + +- [`MotorJointDef`](MotorJointDef) + +## Properties + +### angularOffset? + +> `optional` **angularOffset**: `number` + +The bodyB angle minus bodyA angle in radians. + +*** + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) + +*** + +### correctionFactor? + +> `optional` **correctionFactor**: `number` + +Position correction factor in the range [0,1]. + +*** + +### linearOffset? + +> `optional` **linearOffset**: [`Vec2Value`](Vec2Value) + +Position of bodyB minus the position of bodyA, in bodyA's frame, in meters. + +*** + +### maxForce? + +> `optional` **maxForce**: `number` + +The maximum motor force in N. + +*** + +### maxTorque? + +> `optional` **maxTorque**: `number` + +The maximum motor torque in N-m. + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/MouseJointDef.md b/docs/pages/api/interfaces/MouseJointDef.md new file mode 100644 index 00000000..ed169d78 --- /dev/null +++ b/docs/pages/api/interfaces/MouseJointDef.md @@ -0,0 +1,105 @@ +# Interface: MouseJointDef + +Mouse joint definition. This requires a world target point, tuning +parameters, and the time step. + +## Extends + +- [`JointDef`](JointDef).[`MouseJointOpt`](MouseJointOpt) + +## Properties + +### bodyA + +> **bodyA**: [`Body`](../classes/Body) + +The first attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) + +*** + +### bodyB + +> **bodyB**: [`Body`](../classes/Body) + +The second attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) + +*** + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`MouseJointOpt`](MouseJointOpt).[`collideConnected`](MouseJointOpt#collideconnected) + +*** + +### dampingRatio? + +> `optional` **dampingRatio**: `number` + +[dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical +damping. + +#### Inherited from + +[`MouseJointOpt`](MouseJointOpt).[`dampingRatio`](MouseJointOpt#dampingratio) + +*** + +### frequencyHz? + +> `optional` **frequencyHz**: `number` + +[frequencyHz = 5.0] The response speed. + +#### Inherited from + +[`MouseJointOpt`](MouseJointOpt).[`frequencyHz`](MouseJointOpt#frequencyhz) + +*** + +### maxForce? + +> `optional` **maxForce**: `number` + +[maxForce = 0.0] The maximum constraint force that can be exerted to move +the candidate body. Usually you will express as some multiple of the +weight (multiplier * mass * gravity). + +#### Inherited from + +[`MouseJointOpt`](MouseJointOpt).[`maxForce`](MouseJointOpt#maxforce) + +*** + +### target + +> **target**: [`Vec2Value`](Vec2Value) + +The initial world target point. This is assumed to coincide with the body +anchor initially. + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`MouseJointOpt`](MouseJointOpt).[`userData`](MouseJointOpt#userdata) diff --git a/docs/pages/api/interfaces/MouseJointOpt.md b/docs/pages/api/interfaces/MouseJointOpt.md new file mode 100644 index 00000000..1f9b4fac --- /dev/null +++ b/docs/pages/api/interfaces/MouseJointOpt.md @@ -0,0 +1,64 @@ +# Interface: MouseJointOpt + +Mouse joint definition. This requires a world target point, tuning +parameters, and the time step. + +## Extends + +- [`JointOpt`](JointOpt) + +## Extended by + +- [`MouseJointDef`](MouseJointDef) + +## Properties + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) + +*** + +### dampingRatio? + +> `optional` **dampingRatio**: `number` + +[dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical +damping. + +*** + +### frequencyHz? + +> `optional` **frequencyHz**: `number` + +[frequencyHz = 5.0] The response speed. + +*** + +### maxForce? + +> `optional` **maxForce**: `number` + +[maxForce = 0.0] The maximum constraint force that can be exerted to move +the candidate body. Usually you will express as some multiple of the +weight (multiplier * mass * gravity). + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/PrismaticJointDef.md b/docs/pages/api/interfaces/PrismaticJointDef.md new file mode 100644 index 00000000..a9422d26 --- /dev/null +++ b/docs/pages/api/interfaces/PrismaticJointDef.md @@ -0,0 +1,166 @@ +# Interface: PrismaticJointDef + +Prismatic joint definition. This requires defining a line of motion using an +axis and an anchor point. The definition uses local anchor points and a local +axis so that the initial configuration can violate the constraint slightly. +The joint translation is zero when the local anchor points coincide in world +space. Using local anchors and a local axis helps when saving and loading a +game. + +## Extends + +- [`JointDef`](JointDef).[`PrismaticJointOpt`](PrismaticJointOpt) + +## Properties + +### bodyA + +> **bodyA**: [`Body`](../classes/Body) + +The first attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) + +*** + +### bodyB + +> **bodyB**: [`Body`](../classes/Body) + +The second attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) + +*** + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`PrismaticJointOpt`](PrismaticJointOpt).[`collideConnected`](PrismaticJointOpt#collideconnected) + +*** + +### enableLimit? + +> `optional` **enableLimit**: `boolean` + +Enable/disable the joint limit. + +#### Inherited from + +[`PrismaticJointOpt`](PrismaticJointOpt).[`enableLimit`](PrismaticJointOpt#enablelimit) + +*** + +### enableMotor? + +> `optional` **enableMotor**: `boolean` + +Enable/disable the joint motor. + +#### Inherited from + +[`PrismaticJointOpt`](PrismaticJointOpt).[`enableMotor`](PrismaticJointOpt#enablemotor) + +*** + +### localAnchorA + +> **localAnchorA**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyA's origin. + +*** + +### localAnchorB + +> **localAnchorB**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyB's origin. + +*** + +### localAxisA + +> **localAxisA**: [`Vec2Value`](Vec2Value) + +The local translation unit axis in bodyA. + +*** + +### lowerTranslation? + +> `optional` **lowerTranslation**: `number` + +The lower translation limit, usually in meters. + +#### Inherited from + +[`PrismaticJointOpt`](PrismaticJointOpt).[`lowerTranslation`](PrismaticJointOpt#lowertranslation) + +*** + +### maxMotorForce? + +> `optional` **maxMotorForce**: `number` + +The maximum motor torque, usually in N-m. + +#### Inherited from + +[`PrismaticJointOpt`](PrismaticJointOpt).[`maxMotorForce`](PrismaticJointOpt#maxmotorforce) + +*** + +### motorSpeed? + +> `optional` **motorSpeed**: `number` + +The desired motor speed in radians per second. + +#### Inherited from + +[`PrismaticJointOpt`](PrismaticJointOpt).[`motorSpeed`](PrismaticJointOpt#motorspeed) + +*** + +### referenceAngle + +> **referenceAngle**: `number` + +referenceAngle The constrained angle between the bodies: +bodyB_angle - bodyA_angle. + +*** + +### upperTranslation? + +> `optional` **upperTranslation**: `number` + +The upper translation limit, usually in meters. + +#### Inherited from + +[`PrismaticJointOpt`](PrismaticJointOpt).[`upperTranslation`](PrismaticJointOpt#uppertranslation) + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`PrismaticJointOpt`](PrismaticJointOpt).[`userData`](PrismaticJointOpt#userdata) diff --git a/docs/pages/api/interfaces/PrismaticJointOpt.md b/docs/pages/api/interfaces/PrismaticJointOpt.md new file mode 100644 index 00000000..53f89253 --- /dev/null +++ b/docs/pages/api/interfaces/PrismaticJointOpt.md @@ -0,0 +1,89 @@ +# Interface: PrismaticJointOpt + +Prismatic joint definition. This requires defining a line of motion using an +axis and an anchor point. The definition uses local anchor points and a local +axis so that the initial configuration can violate the constraint slightly. +The joint translation is zero when the local anchor points coincide in world +space. Using local anchors and a local axis helps when saving and loading a +game. + +## Extends + +- [`JointOpt`](JointOpt) + +## Extended by + +- [`PrismaticJointDef`](PrismaticJointDef) + +## Properties + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) + +*** + +### enableLimit? + +> `optional` **enableLimit**: `boolean` + +Enable/disable the joint limit. + +*** + +### enableMotor? + +> `optional` **enableMotor**: `boolean` + +Enable/disable the joint motor. + +*** + +### lowerTranslation? + +> `optional` **lowerTranslation**: `number` + +The lower translation limit, usually in meters. + +*** + +### maxMotorForce? + +> `optional` **maxMotorForce**: `number` + +The maximum motor torque, usually in N-m. + +*** + +### motorSpeed? + +> `optional` **motorSpeed**: `number` + +The desired motor speed in radians per second. + +*** + +### upperTranslation? + +> `optional` **upperTranslation**: `number` + +The upper translation limit, usually in meters. + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/PulleyJointDef.md b/docs/pages/api/interfaces/PulleyJointDef.md new file mode 100644 index 00000000..a66860bc --- /dev/null +++ b/docs/pages/api/interfaces/PulleyJointDef.md @@ -0,0 +1,113 @@ +# Interface: PulleyJointDef + +Pulley joint definition. This requires two ground anchors, two dynamic body +anchor points, and a pulley ratio. + +## Extends + +- [`JointDef`](JointDef).[`PulleyJointOpt`](PulleyJointOpt) + +## Properties + +### bodyA + +> **bodyA**: [`Body`](../classes/Body) + +The first attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) + +*** + +### bodyB + +> **bodyB**: [`Body`](../classes/Body) + +The second attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) + +*** + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`PulleyJointOpt`](PulleyJointOpt).[`collideConnected`](PulleyJointOpt#collideconnected) + +*** + +### groundAnchorA + +> **groundAnchorA**: [`Vec2Value`](Vec2Value) + +The first ground anchor in world coordinates. This point never moves. + +*** + +### groundAnchorB + +> **groundAnchorB**: [`Vec2Value`](Vec2Value) + +The second ground anchor in world coordinates. This point never moves. + +*** + +### lengthA + +> **lengthA**: `number` + +The reference length for the segment attached to bodyA. + +*** + +### lengthB + +> **lengthB**: `number` + +The reference length for the segment attached to bodyB. + +*** + +### localAnchorA + +> **localAnchorA**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyA's origin. + +*** + +### localAnchorB + +> **localAnchorB**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyB's origin. + +*** + +### ratio + +> **ratio**: `number` + +The pulley ratio, used to simulate a block-and-tackle. + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`PulleyJointOpt`](PulleyJointOpt).[`userData`](PulleyJointOpt#userdata) diff --git a/docs/pages/api/interfaces/PulleyJointOpt.md b/docs/pages/api/interfaces/PulleyJointOpt.md new file mode 100644 index 00000000..030f76c0 --- /dev/null +++ b/docs/pages/api/interfaces/PulleyJointOpt.md @@ -0,0 +1,37 @@ +# Interface: PulleyJointOpt + +Pulley joint definition. This requires two ground anchors, two dynamic body +anchor points, and a pulley ratio. + +## Extends + +- [`JointOpt`](JointOpt) + +## Extended by + +- [`PulleyJointDef`](PulleyJointDef) + +## Properties + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/RayCastInput.md b/docs/pages/api/interfaces/RayCastInput.md new file mode 100644 index 00000000..c5f0b7d5 --- /dev/null +++ b/docs/pages/api/interfaces/RayCastInput.md @@ -0,0 +1,21 @@ +# Interface: RayCastInput + +Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. + +## Properties + +### maxFraction + +> **maxFraction**: `number` + +*** + +### p1 + +> **p1**: [`Vec2Value`](Vec2Value) + +*** + +### p2 + +> **p2**: [`Vec2Value`](Vec2Value) diff --git a/docs/pages/api/interfaces/RayCastOutput.md b/docs/pages/api/interfaces/RayCastOutput.md new file mode 100644 index 00000000..b54f02e7 --- /dev/null +++ b/docs/pages/api/interfaces/RayCastOutput.md @@ -0,0 +1,16 @@ +# Interface: RayCastOutput + +Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`, +where `p1` and `p2` come from RayCastInput. + +## Properties + +### fraction + +> **fraction**: `number` + +*** + +### normal + +> **normal**: [`Vec2`](../classes/Vec2) diff --git a/docs/pages/api/interfaces/RevoluteJointDef.md b/docs/pages/api/interfaces/RevoluteJointDef.md new file mode 100644 index 00000000..6264940c --- /dev/null +++ b/docs/pages/api/interfaces/RevoluteJointDef.md @@ -0,0 +1,162 @@ +# Interface: RevoluteJointDef + +Revolute joint definition. This requires defining an anchor point where the +bodies are joined. The definition uses local anchor points so that the +initial configuration can violate the constraint slightly. You also need to +specify the initial relative angle for joint limits. This helps when saving +and loading a game. + +The local anchor points are measured from the body's origin rather than the +center of mass because: 1. you might not know where the center of mass will +be. 2. if you add/remove shapes from a body and recompute the mass, the +joints will be broken. + +## Extends + +- [`JointDef`](JointDef).[`RevoluteJointOpt`](RevoluteJointOpt) + +## Properties + +### bodyA + +> **bodyA**: [`Body`](../classes/Body) + +The first attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) + +*** + +### bodyB + +> **bodyB**: [`Body`](../classes/Body) + +The second attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) + +*** + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`RevoluteJointOpt`](RevoluteJointOpt).[`collideConnected`](RevoluteJointOpt#collideconnected) + +*** + +### enableLimit? + +> `optional` **enableLimit**: `boolean` + +A flag to enable joint limits. + +#### Inherited from + +[`RevoluteJointOpt`](RevoluteJointOpt).[`enableLimit`](RevoluteJointOpt#enablelimit) + +*** + +### enableMotor? + +> `optional` **enableMotor**: `boolean` + +A flag to enable the joint motor. + +#### Inherited from + +[`RevoluteJointOpt`](RevoluteJointOpt).[`enableMotor`](RevoluteJointOpt#enablemotor) + +*** + +### localAnchorA + +> **localAnchorA**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyA's origin. + +*** + +### localAnchorB + +> **localAnchorB**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyB's origin. + +*** + +### lowerAngle? + +> `optional` **lowerAngle**: `number` + +The lower angle for the joint limit (radians). + +#### Inherited from + +[`RevoluteJointOpt`](RevoluteJointOpt).[`lowerAngle`](RevoluteJointOpt#lowerangle) + +*** + +### maxMotorTorque? + +> `optional` **maxMotorTorque**: `number` + +The maximum motor torque used to achieve the desired motor speed. Usually +in N-m. + +#### Inherited from + +[`RevoluteJointOpt`](RevoluteJointOpt).[`maxMotorTorque`](RevoluteJointOpt#maxmotortorque) + +*** + +### motorSpeed? + +> `optional` **motorSpeed**: `number` + +The desired motor speed. Usually in radians per second. + +#### Inherited from + +[`RevoluteJointOpt`](RevoluteJointOpt).[`motorSpeed`](RevoluteJointOpt#motorspeed) + +*** + +### referenceAngle + +> **referenceAngle**: `number` + +The bodyB angle minus bodyA angle in the reference state (radians). + +*** + +### upperAngle? + +> `optional` **upperAngle**: `number` + +The upper angle for the joint limit (radians). + +#### Inherited from + +[`RevoluteJointOpt`](RevoluteJointOpt).[`upperAngle`](RevoluteJointOpt#upperangle) + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`RevoluteJointOpt`](RevoluteJointOpt).[`userData`](RevoluteJointOpt#userdata) diff --git a/docs/pages/api/interfaces/RevoluteJointOpt.md b/docs/pages/api/interfaces/RevoluteJointOpt.md new file mode 100644 index 00000000..a45f009b --- /dev/null +++ b/docs/pages/api/interfaces/RevoluteJointOpt.md @@ -0,0 +1,94 @@ +# Interface: RevoluteJointOpt + +Revolute joint definition. This requires defining an anchor point where the +bodies are joined. The definition uses local anchor points so that the +initial configuration can violate the constraint slightly. You also need to +specify the initial relative angle for joint limits. This helps when saving +and loading a game. + +The local anchor points are measured from the body's origin rather than the +center of mass because: 1. you might not know where the center of mass will +be. 2. if you add/remove shapes from a body and recompute the mass, the +joints will be broken. + +## Extends + +- [`JointOpt`](JointOpt) + +## Extended by + +- [`RevoluteJointDef`](RevoluteJointDef) + +## Properties + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) + +*** + +### enableLimit? + +> `optional` **enableLimit**: `boolean` + +A flag to enable joint limits. + +*** + +### enableMotor? + +> `optional` **enableMotor**: `boolean` + +A flag to enable the joint motor. + +*** + +### lowerAngle? + +> `optional` **lowerAngle**: `number` + +The lower angle for the joint limit (radians). + +*** + +### maxMotorTorque? + +> `optional` **maxMotorTorque**: `number` + +The maximum motor torque used to achieve the desired motor speed. Usually +in N-m. + +*** + +### motorSpeed? + +> `optional` **motorSpeed**: `number` + +The desired motor speed. Usually in radians per second. + +*** + +### upperAngle? + +> `optional` **upperAngle**: `number` + +The upper angle for the joint limit (radians). + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/RopeJointDef.md b/docs/pages/api/interfaces/RopeJointDef.md new file mode 100644 index 00000000..f7fc14bf --- /dev/null +++ b/docs/pages/api/interfaces/RopeJointDef.md @@ -0,0 +1,87 @@ +# Interface: RopeJointDef + +Rope joint definition. This requires two body anchor points and a maximum +lengths. Note: by default the connected objects will not collide. see +collideConnected in JointDef. + +## Extends + +- [`JointDef`](JointDef).[`RopeJointOpt`](RopeJointOpt) + +## Properties + +### bodyA + +> **bodyA**: [`Body`](../classes/Body) + +The first attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) + +*** + +### bodyB + +> **bodyB**: [`Body`](../classes/Body) + +The second attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) + +*** + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`RopeJointOpt`](RopeJointOpt).[`collideConnected`](RopeJointOpt#collideconnected) + +*** + +### localAnchorA + +> **localAnchorA**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyA's origin. + +*** + +### localAnchorB + +> **localAnchorB**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyB's origin. + +*** + +### maxLength? + +> `optional` **maxLength**: `number` + +The maximum length of the rope. +Warning: this must be larger than linearSlop or the joint will have no effect. + +#### Inherited from + +[`RopeJointOpt`](RopeJointOpt).[`maxLength`](RopeJointOpt#maxlength) + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`RopeJointOpt`](RopeJointOpt).[`userData`](RopeJointOpt#userdata) diff --git a/docs/pages/api/interfaces/RopeJointOpt.md b/docs/pages/api/interfaces/RopeJointOpt.md new file mode 100644 index 00000000..3e296eae --- /dev/null +++ b/docs/pages/api/interfaces/RopeJointOpt.md @@ -0,0 +1,47 @@ +# Interface: RopeJointOpt + +Rope joint definition. This requires two body anchor points and a maximum +lengths. Note: by default the connected objects will not collide. see +collideConnected in JointDef. + +## Extends + +- [`JointOpt`](JointOpt) + +## Extended by + +- [`RopeJointDef`](RopeJointDef) + +## Properties + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) + +*** + +### maxLength? + +> `optional` **maxLength**: `number` + +The maximum length of the rope. +Warning: this must be larger than linearSlop or the joint will have no effect. + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/RotValue.md b/docs/pages/api/interfaces/RotValue.md new file mode 100644 index 00000000..19fa295e --- /dev/null +++ b/docs/pages/api/interfaces/RotValue.md @@ -0,0 +1,17 @@ +# Interface: RotValue + +## Properties + +### c + +> **c**: `number` + +cos(angle) + +*** + +### s + +> **s**: `number` + +sin(angle) diff --git a/docs/pages/api/interfaces/Style.md b/docs/pages/api/interfaces/Style.md new file mode 100644 index 00000000..e800af94 --- /dev/null +++ b/docs/pages/api/interfaces/Style.md @@ -0,0 +1,19 @@ +# Interface: Style + +## Properties + +### fill? + +> `optional` **fill**: `string` + +*** + +### lineWidth? + +> `optional` **lineWidth**: `number` + +*** + +### stroke? + +> `optional` **stroke**: `string` diff --git a/docs/pages/api/interfaces/Vec2Value.md b/docs/pages/api/interfaces/Vec2Value.md new file mode 100644 index 00000000..f0678ebb --- /dev/null +++ b/docs/pages/api/interfaces/Vec2Value.md @@ -0,0 +1,15 @@ +# Interface: Vec2Value + +2D vector + +## Properties + +### x + +> **x**: `number` + +*** + +### y + +> **y**: `number` diff --git a/docs/pages/api/interfaces/Vec3Value.md b/docs/pages/api/interfaces/Vec3Value.md new file mode 100644 index 00000000..8be81f45 --- /dev/null +++ b/docs/pages/api/interfaces/Vec3Value.md @@ -0,0 +1,21 @@ +# Interface: Vec3Value + +3D vector + +## Properties + +### x + +> **x**: `number` + +*** + +### y + +> **y**: `number` + +*** + +### z + +> **z**: `number` diff --git a/docs/pages/api/interfaces/WeldJointDef.md b/docs/pages/api/interfaces/WeldJointDef.md new file mode 100644 index 00000000..e0468565 --- /dev/null +++ b/docs/pages/api/interfaces/WeldJointDef.md @@ -0,0 +1,111 @@ +# Interface: WeldJointDef + +Weld joint definition. You need to specify local anchor points where they are +attached and the relative body angle. The position of the anchor points is +important for computing the reaction torque. + +## Extends + +- [`JointDef`](JointDef).[`WeldJointOpt`](WeldJointOpt) + +## Properties + +### bodyA + +> **bodyA**: [`Body`](../classes/Body) + +The first attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) + +*** + +### bodyB + +> **bodyB**: [`Body`](../classes/Body) + +The second attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) + +*** + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`WeldJointOpt`](WeldJointOpt).[`collideConnected`](WeldJointOpt#collideconnected) + +*** + +### dampingRatio? + +> `optional` **dampingRatio**: `number` + +The damping ratio. 0 = no damping, 1 = critical damping. + +#### Inherited from + +[`WeldJointOpt`](WeldJointOpt).[`dampingRatio`](WeldJointOpt#dampingratio) + +*** + +### frequencyHz? + +> `optional` **frequencyHz**: `number` + +The mass-spring-damper frequency in Hertz. Rotation only. Disable softness +with a value of 0. + +#### Inherited from + +[`WeldJointOpt`](WeldJointOpt).[`frequencyHz`](WeldJointOpt#frequencyhz) + +*** + +### localAnchorA + +> **localAnchorA**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyA's origin. + +*** + +### localAnchorB + +> **localAnchorB**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyB's origin. + +*** + +### referenceAngle? + +> `optional` **referenceAngle**: `number` + +The bodyB angle minus bodyA angle in the reference state (radians). + +#### Inherited from + +[`WeldJointOpt`](WeldJointOpt).[`referenceAngle`](WeldJointOpt#referenceangle) + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`WeldJointOpt`](WeldJointOpt).[`userData`](WeldJointOpt#userdata) diff --git a/docs/pages/api/interfaces/WeldJointOpt.md b/docs/pages/api/interfaces/WeldJointOpt.md new file mode 100644 index 00000000..0eee5e5a --- /dev/null +++ b/docs/pages/api/interfaces/WeldJointOpt.md @@ -0,0 +1,63 @@ +# Interface: WeldJointOpt + +Weld joint definition. You need to specify local anchor points where they are +attached and the relative body angle. The position of the anchor points is +important for computing the reaction torque. + +## Extends + +- [`JointOpt`](JointOpt) + +## Extended by + +- [`WeldJointDef`](WeldJointDef) + +## Properties + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) + +*** + +### dampingRatio? + +> `optional` **dampingRatio**: `number` + +The damping ratio. 0 = no damping, 1 = critical damping. + +*** + +### frequencyHz? + +> `optional` **frequencyHz**: `number` + +The mass-spring-damper frequency in Hertz. Rotation only. Disable softness +with a value of 0. + +*** + +### referenceAngle? + +> `optional` **referenceAngle**: `number` + +The bodyB angle minus bodyA angle in the reference state (radians). + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/WheelJointDef.md b/docs/pages/api/interfaces/WheelJointDef.md new file mode 100644 index 00000000..e7052a3e --- /dev/null +++ b/docs/pages/api/interfaces/WheelJointDef.md @@ -0,0 +1,145 @@ +# Interface: WheelJointDef + +Wheel joint definition. This requires defining a line of motion using an axis +and an anchor point. The definition uses local anchor points and a local axis +so that the initial configuration can violate the constraint slightly. The +joint translation is zero when the local anchor points coincide in world +space. Using local anchors and a local axis helps when saving and loading a +game. + +## Extends + +- [`JointDef`](JointDef).[`WheelJointOpt`](WheelJointOpt) + +## Properties + +### bodyA + +> **bodyA**: [`Body`](../classes/Body) + +The first attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) + +*** + +### bodyB + +> **bodyB**: [`Body`](../classes/Body) + +The second attached body. + +#### Inherited from + +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) + +*** + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`WheelJointOpt`](WheelJointOpt).[`collideConnected`](WheelJointOpt#collideconnected) + +*** + +### dampingRatio? + +> `optional` **dampingRatio**: `number` + +Suspension damping ratio, one indicates critical damping. + +#### Inherited from + +[`WheelJointOpt`](WheelJointOpt).[`dampingRatio`](WheelJointOpt#dampingratio) + +*** + +### enableMotor? + +> `optional` **enableMotor**: `boolean` + +Enable/disable the joint motor. + +#### Inherited from + +[`WheelJointOpt`](WheelJointOpt).[`enableMotor`](WheelJointOpt#enablemotor) + +*** + +### frequencyHz? + +> `optional` **frequencyHz**: `number` + +Suspension frequency, zero indicates no suspension. + +#### Inherited from + +[`WheelJointOpt`](WheelJointOpt).[`frequencyHz`](WheelJointOpt#frequencyhz) + +*** + +### localAnchorA + +> **localAnchorA**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyA's origin. + +*** + +### localAnchorB + +> **localAnchorB**: [`Vec2Value`](Vec2Value) + +The local anchor point relative to bodyB's origin. + +*** + +### localAxisA + +> **localAxisA**: [`Vec2Value`](Vec2Value) + +The local translation axis in bodyA. + +*** + +### maxMotorTorque? + +> `optional` **maxMotorTorque**: `number` + +The maximum motor torque, usually in N-m. + +#### Inherited from + +[`WheelJointOpt`](WheelJointOpt).[`maxMotorTorque`](WheelJointOpt#maxmotortorque) + +*** + +### motorSpeed? + +> `optional` **motorSpeed**: `number` + +The desired motor speed in radians per second. + +#### Inherited from + +[`WheelJointOpt`](WheelJointOpt).[`motorSpeed`](WheelJointOpt#motorspeed) + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`WheelJointOpt`](WheelJointOpt).[`userData`](WheelJointOpt#userdata) diff --git a/docs/pages/api/interfaces/WheelJointOpt.md b/docs/pages/api/interfaces/WheelJointOpt.md new file mode 100644 index 00000000..c11cea39 --- /dev/null +++ b/docs/pages/api/interfaces/WheelJointOpt.md @@ -0,0 +1,81 @@ +# Interface: WheelJointOpt + +Wheel joint definition. This requires defining a line of motion using an axis +and an anchor point. The definition uses local anchor points and a local axis +so that the initial configuration can violate the constraint slightly. The +joint translation is zero when the local anchor points coincide in world +space. Using local anchors and a local axis helps when saving and loading a +game. + +## Extends + +- [`JointOpt`](JointOpt) + +## Extended by + +- [`WheelJointDef`](WheelJointDef) + +## Properties + +### collideConnected? + +> `optional` **collideConnected**: `boolean` + +Set this flag to true if the attached bodies +should collide. + +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) + +*** + +### dampingRatio? + +> `optional` **dampingRatio**: `number` + +Suspension damping ratio, one indicates critical damping. + +*** + +### enableMotor? + +> `optional` **enableMotor**: `boolean` + +Enable/disable the joint motor. + +*** + +### frequencyHz? + +> `optional` **frequencyHz**: `number` + +Suspension frequency, zero indicates no suspension. + +*** + +### maxMotorTorque? + +> `optional` **maxMotorTorque**: `number` + +The maximum motor torque, usually in N-m. + +*** + +### motorSpeed? + +> `optional` **motorSpeed**: `number` + +The desired motor speed in radians per second. + +*** + +### userData? + +> `optional` **userData**: `any` + +Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/WorldDef.md b/docs/pages/api/interfaces/WorldDef.md new file mode 100644 index 00000000..77fc9b41 --- /dev/null +++ b/docs/pages/api/interfaces/WorldDef.md @@ -0,0 +1,49 @@ +# Interface: WorldDef + +## Properties + +### allowSleep? + +> `optional` **allowSleep**: `boolean` + +[default: true] + +*** + +### blockSolve? + +> `optional` **blockSolve**: `boolean` + +[default: true] + +*** + +### continuousPhysics? + +> `optional` **continuousPhysics**: `boolean` + +[default: true] + +*** + +### gravity? + +> `optional` **gravity**: [`Vec2Value`](Vec2Value) + +[default: { x : 0, y : 0}] + +*** + +### subStepping? + +> `optional` **subStepping**: `boolean` + +[default: false] + +*** + +### warmStarting? + +> `optional` **warmStarting**: `boolean` + +[default: true] diff --git a/docs/pages/api/interfaces/aabbvalue.md b/docs/pages/api/interfaces/aabbvalue.md index a8b404ee..4cac2053 100644 --- a/docs/pages/api/interfaces/aabbvalue.md +++ b/docs/pages/api/interfaces/aabbvalue.md @@ -1,25 +1,15 @@ - # Interface: AABBValue -## Hierarchy - -* **AABBValue** - -## Index - -### Properties - -* [lowerBound](/api/interfaces/aabbvalue#lowerbound) -* [upperBound](/api/interfaces/aabbvalue#upperbound) +Axis-aligned bounding box ## Properties -### lowerBound +### lowerBound -• **lowerBound**: *[Vec2Value](/api/interfaces/vec2value)* +> **lowerBound**: [`Vec2Value`](Vec2Value) -___ +*** -### upperBound +### upperBound -• **upperBound**: *[Vec2Value](/api/interfaces/vec2value)* +> **upperBound**: [`Vec2Value`](Vec2Value) diff --git a/docs/pages/api/interfaces/bodydef.md b/docs/pages/api/interfaces/bodydef.md index 4b6ebf3a..778b72b1 100644 --- a/docs/pages/api/interfaces/bodydef.md +++ b/docs/pages/api/interfaces/bodydef.md @@ -1,83 +1,59 @@ - # Interface: BodyDef -## Hierarchy - -* **BodyDef** - -## Index - -### Properties - -* [active](/api/interfaces/bodydef#optional-active) -* [allowSleep](/api/interfaces/bodydef#optional-allowsleep) -* [angle](/api/interfaces/bodydef#optional-angle) -* [angularDamping](/api/interfaces/bodydef#optional-angulardamping) -* [angularVelocity](/api/interfaces/bodydef#optional-angularvelocity) -* [awake](/api/interfaces/bodydef#optional-awake) -* [bullet](/api/interfaces/bodydef#optional-bullet) -* [fixedRotation](/api/interfaces/bodydef#optional-fixedrotation) -* [gravityScale](/api/interfaces/bodydef#optional-gravityscale) -* [linearDamping](/api/interfaces/bodydef#optional-lineardamping) -* [linearVelocity](/api/interfaces/bodydef#optional-linearvelocity) -* [position](/api/interfaces/bodydef#optional-position) -* [type](/api/interfaces/bodydef#optional-type) -* [userData](/api/interfaces/bodydef#optional-userdata) - ## Properties -### `Optional` active +### active? -• **active**? : *boolean* +> `optional` **active**: `boolean` Does this body start out active? -___ +*** -### `Optional` allowSleep +### allowSleep? -• **allowSleep**? : *boolean* +> `optional` **allowSleep**: `boolean` Set this flag to false if this body should never fall asleep. Note that this increases CPU usage. -___ +*** -### `Optional` angle +### angle? -• **angle**? : *number* +> `optional` **angle**: `number` The world angle of the body in radians. -___ +*** -### `Optional` angularDamping +### angularDamping? -• **angularDamping**? : *number* +> `optional` **angularDamping**: `number` Angular damping is use to reduce the angular velocity. The damping parameter can be larger than 1.0 but the damping effect becomes sensitive to the time step when the damping parameter is large. Units are 1/time -___ +*** -### `Optional` angularVelocity +### angularVelocity? -• **angularVelocity**? : *number* +> `optional` **angularVelocity**: `number` -___ +*** -### `Optional` awake +### awake? -• **awake**? : *boolean* +> `optional` **awake**: `boolean` Is this body initially awake or sleeping? -___ +*** -### `Optional` bullet +### bullet? -• **bullet**? : *boolean* +> `optional` **bullet**: `boolean` Is this a fast moving body that should be prevented from tunneling through other moving bodies? Note that all bodies are @@ -85,59 +61,59 @@ prevented from tunneling through kinematic and static bodies. This setting is only considered on dynamic bodies. Warning: You should use this flag sparingly since it increases processing time. -___ +*** -### `Optional` fixedRotation +### fixedRotation? -• **fixedRotation**? : *boolean* +> `optional` **fixedRotation**: `boolean` Should this body be prevented from rotating? Useful for characters. -___ +*** -### `Optional` gravityScale +### gravityScale? -• **gravityScale**? : *number* +> `optional` **gravityScale**: `number` -___ +*** -### `Optional` linearDamping +### linearDamping? -• **linearDamping**? : *number* +> `optional` **linearDamping**: `number` Linear damping is use to reduce the linear velocity. The damping parameter can be larger than 1.0 but the damping effect becomes sensitive to the time step when the damping parameter is large. Units are 1/time -___ +*** -### `Optional` linearVelocity +### linearVelocity? -• **linearVelocity**? : *[Vec2Value](/api/interfaces/vec2value)* +> `optional` **linearVelocity**: [`Vec2Value`](Vec2Value) The linear velocity of the body's origin in world co-ordinates. -___ +*** -### `Optional` position +### position? -• **position**? : *[Vec2Value](/api/interfaces/vec2value)* +> `optional` **position**: [`Vec2Value`](Vec2Value) The world position of the body. Avoid creating bodies at the origin since this can lead to many overlapping shapes. -___ +*** -### `Optional` type +### type? -• **type**? : *[BodyType](/api/globals#bodytype)* +> `optional` **type**: [`BodyType`](../type-aliases/BodyType) Body types are static, kinematic, or dynamic. Note: if a dynamic body would have zero mass, the mass is set to one. -___ +*** -### `Optional` userData +### userData? -• **userData**? : *any* +> `optional` **userData**: `any` diff --git a/docs/pages/api/interfaces/distancejointdef.md b/docs/pages/api/interfaces/distancejointdef.md index 2c4a20a1..0cf7a5a2 100644 --- a/docs/pages/api/interfaces/distancejointdef.md +++ b/docs/pages/api/interfaces/distancejointdef.md @@ -1,4 +1,3 @@ - # Interface: DistanceJointDef Distance joint definition. This requires defining an anchor point on both @@ -7,115 +6,107 @@ local anchor points so that the initial configuration can violate the constraint slightly. This helps when saving and loading a game. Warning: Do not use a zero or short length. -## Hierarchy - - ↳ [JointDef](/api/interfaces/jointdef) - - ↳ [DistanceJointOpt](/api/interfaces/distancejointopt) - - ↳ **DistanceJointDef** +## Extends -## Index - -### Properties - -* [bodyA](/api/interfaces/distancejointdef#bodya) -* [bodyB](/api/interfaces/distancejointdef#bodyb) -* [collideConnected](/api/interfaces/distancejointdef#optional-collideconnected) -* [dampingRatio](/api/interfaces/distancejointdef#optional-dampingratio) -* [frequencyHz](/api/interfaces/distancejointdef#optional-frequencyhz) -* [length](/api/interfaces/distancejointdef#optional-length) -* [localAnchorA](/api/interfaces/distancejointdef#localanchora) -* [localAnchorB](/api/interfaces/distancejointdef#localanchorb) -* [userData](/api/interfaces/distancejointdef#optional-userdata) +- [`JointDef`](JointDef).[`DistanceJointOpt`](DistanceJointOpt) ## Properties -### bodyA +### bodyA -• **bodyA**: *[Body](/api/classes/body)* - -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyA](/api/interfaces/jointdef#bodya)* +> **bodyA**: [`Body`](../classes/Body) The first attached body. -___ +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) -### bodyB +*** -• **bodyB**: *[Body](/api/classes/body)* +### bodyB -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyB](/api/interfaces/jointdef#bodyb)* +> **bodyB**: [`Body`](../classes/Body) The second attached body. -___ +#### Inherited from -### `Optional` collideConnected +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) -• **collideConnected**? : *boolean* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +### collideConnected? -*Overrides [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from -### `Optional` dampingRatio +[`DistanceJointOpt`](DistanceJointOpt).[`collideConnected`](DistanceJointOpt#collideconnected) -• **dampingRatio**? : *number* +*** -*Inherited from [DistanceJointOpt](/api/interfaces/distancejointopt).[dampingRatio](/api/interfaces/distancejointopt#optional-dampingratio)* +### dampingRatio? + +> `optional` **dampingRatio**: `number` The damping ratio. 0 = no damping, 1 = critical damping. -___ +#### Inherited from + +[`DistanceJointOpt`](DistanceJointOpt).[`dampingRatio`](DistanceJointOpt#dampingratio) -### `Optional` frequencyHz +*** -• **frequencyHz**? : *number* +### frequencyHz? -*Inherited from [DistanceJointOpt](/api/interfaces/distancejointopt).[frequencyHz](/api/interfaces/distancejointopt#optional-frequencyhz)* +> `optional` **frequencyHz**: `number` The mass-spring-damper frequency in Hertz. A value of 0 disables softness. -___ +#### Inherited from -### `Optional` length +[`DistanceJointOpt`](DistanceJointOpt).[`frequencyHz`](DistanceJointOpt#frequencyhz) -• **length**? : *number* +*** -*Inherited from [DistanceJointOpt](/api/interfaces/distancejointopt).[length](/api/interfaces/distancejointopt#optional-length)* +### length? + +> `optional` **length**: `number` Distance length. -___ +#### Inherited from + +[`DistanceJointOpt`](DistanceJointOpt).[`length`](DistanceJointOpt#length) -### localAnchorA +*** -• **localAnchorA**: *[Vec2Value](/api/interfaces/vec2value)* +### localAnchorA + +> **localAnchorA**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyA's origin. -___ +*** -### localAnchorB +### localAnchorB -• **localAnchorB**: *[Vec2Value](/api/interfaces/vec2value)* +> **localAnchorB**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyB's origin. -___ +*** -### `Optional` userData +### userData? -• **userData**? : *any* +> `optional` **userData**: `any` -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +Use this to attach application specific data to your joints. -*Overrides [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +#### Inherited from -Use this to attach application specific data to your joints. +[`DistanceJointOpt`](DistanceJointOpt).[`userData`](DistanceJointOpt#userdata) diff --git a/docs/pages/api/interfaces/distancejointopt.md b/docs/pages/api/interfaces/distancejointopt.md index d7622a30..604789cb 100644 --- a/docs/pages/api/interfaces/distancejointopt.md +++ b/docs/pages/api/interfaces/distancejointopt.md @@ -1,4 +1,3 @@ - # Interface: DistanceJointOpt Distance joint definition. This requires defining an anchor point on both @@ -7,65 +6,59 @@ local anchor points so that the initial configuration can violate the constraint slightly. This helps when saving and loading a game. Warning: Do not use a zero or short length. -## Hierarchy - -* [JointOpt](/api/interfaces/jointopt) - - ↳ **DistanceJointOpt** +## Extends - ↳ [DistanceJointDef](/api/interfaces/distancejointdef) +- [`JointOpt`](JointOpt) -## Index +## Extended by -### Properties - -* [collideConnected](/api/interfaces/distancejointopt#optional-collideconnected) -* [dampingRatio](/api/interfaces/distancejointopt#optional-dampingratio) -* [frequencyHz](/api/interfaces/distancejointopt#optional-frequencyhz) -* [length](/api/interfaces/distancejointopt#optional-length) -* [userData](/api/interfaces/distancejointopt#optional-userdata) +- [`DistanceJointDef`](DistanceJointDef) ## Properties -### `Optional` collideConnected - -• **collideConnected**? : *boolean* +### collideConnected? -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from -### `Optional` dampingRatio +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) -• **dampingRatio**? : *number* +*** + +### dampingRatio? + +> `optional` **dampingRatio**: `number` The damping ratio. 0 = no damping, 1 = critical damping. -___ +*** -### `Optional` frequencyHz +### frequencyHz? -• **frequencyHz**? : *number* +> `optional` **frequencyHz**: `number` The mass-spring-damper frequency in Hertz. A value of 0 disables softness. -___ +*** -### `Optional` length +### length? -• **length**? : *number* +> `optional` **length**: `number` Distance length. -___ - -### `Optional` userData +*** -• **userData**? : *any* +### userData? -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/fixturedef.md b/docs/pages/api/interfaces/fixturedef.md index 851c94fe..b21feb1a 100644 --- a/docs/pages/api/interfaces/fixturedef.md +++ b/docs/pages/api/interfaces/fixturedef.md @@ -1,108 +1,110 @@ - # Interface: FixtureDef -## Hierarchy - -* [FixtureOpt](/api/interfaces/fixtureopt) - - ↳ **FixtureDef** - -## Index +A fixture definition is used to create a fixture. This class defines an +abstract fixture definition. You can reuse fixture definitions safely. -### Properties +## Extends -* [density](/api/interfaces/fixturedef#optional-density) -* [filterCategoryBits](/api/interfaces/fixturedef#optional-filtercategorybits) -* [filterGroupIndex](/api/interfaces/fixturedef#optional-filtergroupindex) -* [filterMaskBits](/api/interfaces/fixturedef#optional-filtermaskbits) -* [friction](/api/interfaces/fixturedef#optional-friction) -* [isSensor](/api/interfaces/fixturedef#optional-issensor) -* [restitution](/api/interfaces/fixturedef#optional-restitution) -* [shape](/api/interfaces/fixturedef#shape) -* [userData](/api/interfaces/fixturedef#optional-userdata) +- [`FixtureOpt`](FixtureOpt) ## Properties -### `Optional` density +### density? -• **density**? : *number* - -*Inherited from [FixtureOpt](/api/interfaces/fixtureopt).[density](/api/interfaces/fixtureopt#optional-density)* +> `optional` **density**: `number` The density, usually in kg/m^2 -___ +#### Inherited from + +[`FixtureOpt`](FixtureOpt).[`density`](FixtureOpt#density) -### `Optional` filterCategoryBits +*** -• **filterCategoryBits**? : *number* +### filterCategoryBits? -*Inherited from [FixtureOpt](/api/interfaces/fixtureopt).[filterCategoryBits](/api/interfaces/fixtureopt#optional-filtercategorybits)* +> `optional` **filterCategoryBits**: `number` Collision category bit or bits that this fixture belongs to. If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa. -___ +#### Inherited from + +[`FixtureOpt`](FixtureOpt).[`filterCategoryBits`](FixtureOpt#filtercategorybits) -### `Optional` filterGroupIndex +*** -• **filterGroupIndex**? : *number* +### filterGroupIndex? -*Inherited from [FixtureOpt](/api/interfaces/fixtureopt).[filterGroupIndex](/api/interfaces/fixtureopt#optional-filtergroupindex)* +> `optional` **filterGroupIndex**: `number` Zero, positive or negative collision group. Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide. -___ +#### Inherited from -### `Optional` filterMaskBits +[`FixtureOpt`](FixtureOpt).[`filterGroupIndex`](FixtureOpt#filtergroupindex) -• **filterMaskBits**? : *number* +*** -*Inherited from [FixtureOpt](/api/interfaces/fixtureopt).[filterMaskBits](/api/interfaces/fixtureopt#optional-filtermaskbits)* +### filterMaskBits? + +> `optional` **filterMaskBits**: `number` Collision category bit or bits that this fixture accept for collision. -___ +#### Inherited from + +[`FixtureOpt`](FixtureOpt).[`filterMaskBits`](FixtureOpt#filtermaskbits) -### `Optional` friction +*** -• **friction**? : *number* +### friction? -*Inherited from [FixtureOpt](/api/interfaces/fixtureopt).[friction](/api/interfaces/fixtureopt#optional-friction)* +> `optional` **friction**: `number` The friction coefficient, usually in the range [0,1] -___ +#### Inherited from -### `Optional` isSensor +[`FixtureOpt`](FixtureOpt).[`friction`](FixtureOpt#friction) -• **isSensor**? : *boolean* +*** -*Inherited from [FixtureOpt](/api/interfaces/fixtureopt).[isSensor](/api/interfaces/fixtureopt#optional-issensor)* +### isSensor? + +> `optional` **isSensor**: `boolean` A sensor shape collects contact information but never generates a collision response. -___ +#### Inherited from + +[`FixtureOpt`](FixtureOpt).[`isSensor`](FixtureOpt#issensor) -### `Optional` restitution +*** -• **restitution**? : *number* +### restitution? -*Inherited from [FixtureOpt](/api/interfaces/fixtureopt).[restitution](/api/interfaces/fixtureopt#optional-restitution)* +> `optional` **restitution**: `number` The restitution (elasticity) usually in the range [0,1] -___ +#### Inherited from + +[`FixtureOpt`](FixtureOpt).[`restitution`](FixtureOpt#restitution) + +*** + +### shape -### shape +> **shape**: [`Shape`](../classes/Shape) -• **shape**: *[Shape](/api/classes/shape)* +*** -___ +### userData? -### `Optional` userData +> `optional` **userData**: `unknown` -• **userData**? : *unknown* +#### Inherited from -*Inherited from [FixtureOpt](/api/interfaces/fixtureopt).[userData](/api/interfaces/fixtureopt#optional-userdata)* +[`FixtureOpt`](FixtureOpt).[`userData`](FixtureOpt#userdata) diff --git a/docs/pages/api/interfaces/fixtureopt.md b/docs/pages/api/interfaces/fixtureopt.md index 09de6d42..781d5b2b 100644 --- a/docs/pages/api/interfaces/fixtureopt.md +++ b/docs/pages/api/interfaces/fixtureopt.md @@ -1,88 +1,72 @@ - # Interface: FixtureOpt A fixture definition is used to create a fixture. This class defines an abstract fixture definition. You can reuse fixture definitions safely. -## Hierarchy - -* **FixtureOpt** - - ↳ [FixtureDef](/api/interfaces/fixturedef) - -## Index - -### Properties +## Extended by -* [density](/api/interfaces/fixtureopt#optional-density) -* [filterCategoryBits](/api/interfaces/fixtureopt#optional-filtercategorybits) -* [filterGroupIndex](/api/interfaces/fixtureopt#optional-filtergroupindex) -* [filterMaskBits](/api/interfaces/fixtureopt#optional-filtermaskbits) -* [friction](/api/interfaces/fixtureopt#optional-friction) -* [isSensor](/api/interfaces/fixtureopt#optional-issensor) -* [restitution](/api/interfaces/fixtureopt#optional-restitution) -* [userData](/api/interfaces/fixtureopt#optional-userdata) +- [`FixtureDef`](FixtureDef) ## Properties -### `Optional` density +### density? -• **density**? : *number* +> `optional` **density**: `number` The density, usually in kg/m^2 -___ +*** -### `Optional` filterCategoryBits +### filterCategoryBits? -• **filterCategoryBits**? : *number* +> `optional` **filterCategoryBits**: `number` Collision category bit or bits that this fixture belongs to. If groupIndex is zero or not matching, then at least one bit in this fixture categoryBits should match other fixture maskBits and vice versa. -___ +*** -### `Optional` filterGroupIndex +### filterGroupIndex? -• **filterGroupIndex**? : *number* +> `optional` **filterGroupIndex**: `number` Zero, positive or negative collision group. Fixtures with same positive groupIndex always collide and fixtures with same negative groupIndex never collide. -___ +*** -### `Optional` filterMaskBits +### filterMaskBits? -• **filterMaskBits**? : *number* +> `optional` **filterMaskBits**: `number` Collision category bit or bits that this fixture accept for collision. -___ +*** -### `Optional` friction +### friction? -• **friction**? : *number* +> `optional` **friction**: `number` The friction coefficient, usually in the range [0,1] -___ +*** -### `Optional` isSensor +### isSensor? -• **isSensor**? : *boolean* +> `optional` **isSensor**: `boolean` A sensor shape collects contact information but never generates a collision response. -___ +*** -### `Optional` restitution +### restitution? -• **restitution**? : *number* +> `optional` **restitution**: `number` The restitution (elasticity) usually in the range [0,1] -___ +*** -### `Optional` userData +### userData? -• **userData**? : *unknown* +> `optional` **userData**: `unknown` diff --git a/docs/pages/api/interfaces/frictionjointdef.md b/docs/pages/api/interfaces/frictionjointdef.md index 232c4cdf..d9cdf631 100644 --- a/docs/pages/api/interfaces/frictionjointdef.md +++ b/docs/pages/api/interfaces/frictionjointdef.md @@ -1,106 +1,96 @@ - # Interface: FrictionJointDef Friction joint definition. -## Hierarchy - - ↳ [JointDef](/api/interfaces/jointdef) - - ↳ [FrictionJointOpt](/api/interfaces/frictionjointopt) - - ↳ **FrictionJointDef** +## Extends -## Index - -### Properties - -* [bodyA](/api/interfaces/frictionjointdef#bodya) -* [bodyB](/api/interfaces/frictionjointdef#bodyb) -* [collideConnected](/api/interfaces/frictionjointdef#optional-collideconnected) -* [localAnchorA](/api/interfaces/frictionjointdef#localanchora) -* [localAnchorB](/api/interfaces/frictionjointdef#localanchorb) -* [maxForce](/api/interfaces/frictionjointdef#optional-maxforce) -* [maxTorque](/api/interfaces/frictionjointdef#optional-maxtorque) -* [userData](/api/interfaces/frictionjointdef#optional-userdata) +- [`JointDef`](JointDef).[`FrictionJointOpt`](FrictionJointOpt) ## Properties -### bodyA - -• **bodyA**: *[Body](/api/classes/body)* +### bodyA -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyA](/api/interfaces/jointdef#bodya)* +> **bodyA**: [`Body`](../classes/Body) The first attached body. -___ +#### Inherited from -### bodyB +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) -• **bodyB**: *[Body](/api/classes/body)* +*** -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyB](/api/interfaces/jointdef#bodyb)* +### bodyB + +> **bodyB**: [`Body`](../classes/Body) The second attached body. -___ +#### Inherited from -### `Optional` collideConnected +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) -• **collideConnected**? : *boolean* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +### collideConnected? -*Overrides [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from + +[`FrictionJointOpt`](FrictionJointOpt).[`collideConnected`](FrictionJointOpt#collideconnected) -### localAnchorA +*** -• **localAnchorA**: *[Vec2Value](/api/interfaces/vec2value)* +### localAnchorA + +> **localAnchorA**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyA's origin. -___ +*** -### localAnchorB +### localAnchorB -• **localAnchorB**: *[Vec2Value](/api/interfaces/vec2value)* +> **localAnchorB**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyB's origin. -___ - -### `Optional` maxForce +*** -• **maxForce**? : *number* +### maxForce? -*Inherited from [FrictionJointOpt](/api/interfaces/frictionjointopt).[maxForce](/api/interfaces/frictionjointopt#optional-maxforce)* +> `optional` **maxForce**: `number` The maximum friction force in N. -___ +#### Inherited from -### `Optional` maxTorque +[`FrictionJointOpt`](FrictionJointOpt).[`maxForce`](FrictionJointOpt#maxforce) -• **maxTorque**? : *number* +*** -*Inherited from [FrictionJointOpt](/api/interfaces/frictionjointopt).[maxTorque](/api/interfaces/frictionjointopt#optional-maxtorque)* +### maxTorque? + +> `optional` **maxTorque**: `number` The maximum friction torque in N-m. -___ +#### Inherited from -### `Optional` userData +[`FrictionJointOpt`](FrictionJointOpt).[`maxTorque`](FrictionJointOpt#maxtorque) -• **userData**? : *any* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +### userData? -*Overrides [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`FrictionJointOpt`](FrictionJointOpt).[`userData`](FrictionJointOpt#userdata) diff --git a/docs/pages/api/interfaces/frictionjointopt.md b/docs/pages/api/interfaces/frictionjointopt.md index e32936fa..520bfb63 100644 --- a/docs/pages/api/interfaces/frictionjointopt.md +++ b/docs/pages/api/interfaces/frictionjointopt.md @@ -1,58 +1,52 @@ - # Interface: FrictionJointOpt Friction joint definition. -## Hierarchy - -* [JointOpt](/api/interfaces/jointopt) - - ↳ **FrictionJointOpt** +## Extends - ↳ [FrictionJointDef](/api/interfaces/frictionjointdef) +- [`JointOpt`](JointOpt) -## Index +## Extended by -### Properties - -* [collideConnected](/api/interfaces/frictionjointopt#optional-collideconnected) -* [maxForce](/api/interfaces/frictionjointopt#optional-maxforce) -* [maxTorque](/api/interfaces/frictionjointopt#optional-maxtorque) -* [userData](/api/interfaces/frictionjointopt#optional-userdata) +- [`FrictionJointDef`](FrictionJointDef) ## Properties -### `Optional` collideConnected - -• **collideConnected**? : *boolean* +### collideConnected? -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from -### `Optional` maxForce +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) -• **maxForce**? : *number* +*** + +### maxForce? + +> `optional` **maxForce**: `number` The maximum friction force in N. -___ +*** -### `Optional` maxTorque +### maxTorque? -• **maxTorque**? : *number* +> `optional` **maxTorque**: `number` The maximum friction torque in N-m. -___ - -### `Optional` userData +*** -• **userData**? : *any* +### userData? -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/gearjointdef.md b/docs/pages/api/interfaces/gearjointdef.md index 7ceadade..faf06ee0 100644 --- a/docs/pages/api/interfaces/gearjointdef.md +++ b/docs/pages/api/interfaces/gearjointdef.md @@ -1,95 +1,84 @@ - # Interface: GearJointDef Gear joint definition. -## Hierarchy - - ↳ [JointDef](/api/interfaces/jointdef) - - ↳ [GearJointOpt](/api/interfaces/gearjointopt) - - ↳ **GearJointDef** +## Extends -## Index - -### Properties - -* [bodyA](/api/interfaces/gearjointdef#bodya) -* [bodyB](/api/interfaces/gearjointdef#bodyb) -* [collideConnected](/api/interfaces/gearjointdef#optional-collideconnected) -* [joint1](/api/interfaces/gearjointdef#joint1) -* [joint2](/api/interfaces/gearjointdef#joint2) -* [ratio](/api/interfaces/gearjointdef#optional-ratio) -* [userData](/api/interfaces/gearjointdef#optional-userdata) +- [`JointDef`](JointDef).[`GearJointOpt`](GearJointOpt) ## Properties -### bodyA - -• **bodyA**: *[Body](/api/classes/body)* +### bodyA -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyA](/api/interfaces/jointdef#bodya)* +> **bodyA**: [`Body`](../classes/Body) The first attached body. -___ +#### Inherited from -### bodyB +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) -• **bodyB**: *[Body](/api/classes/body)* +*** -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyB](/api/interfaces/jointdef#bodyb)* +### bodyB + +> **bodyB**: [`Body`](../classes/Body) The second attached body. -___ +#### Inherited from -### `Optional` collideConnected +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) -• **collideConnected**? : *boolean* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +### collideConnected? -*Overrides [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from + +[`GearJointOpt`](GearJointOpt).[`collideConnected`](GearJointOpt#collideconnected) + +*** -### joint1 +### joint1 -• **joint1**: *[RevoluteJoint](/api/classes/revolutejoint) | [PrismaticJoint](/api/classes/prismaticjoint)* +> **joint1**: [`RevoluteJoint`](../classes/RevoluteJoint) \| [`PrismaticJoint`](../classes/PrismaticJoint) The first revolute/prismatic joint attached to the gear joint. -___ +*** -### joint2 +### joint2 -• **joint2**: *[RevoluteJoint](/api/classes/revolutejoint) | [PrismaticJoint](/api/classes/prismaticjoint)* +> **joint2**: [`RevoluteJoint`](../classes/RevoluteJoint) \| [`PrismaticJoint`](../classes/PrismaticJoint) The second prismatic/revolute joint attached to the gear joint. -___ +*** -### `Optional` ratio +### ratio? -• **ratio**? : *number* +> `optional` **ratio**: `number` -*Inherited from [GearJointOpt](/api/interfaces/gearjointopt).[ratio](/api/interfaces/gearjointopt#optional-ratio)* +The gear ratio. See [GearJoint](../classes/GearJoint) for explanation. -The gear ratio. See [GearJoint](../classes/gearjoint) for explanation. +#### Inherited from -___ +[`GearJointOpt`](GearJointOpt).[`ratio`](GearJointOpt#ratio) -### `Optional` userData +*** -• **userData**? : *any* +### userData? -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* - -*Overrides [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`GearJointOpt`](GearJointOpt).[`userData`](GearJointOpt#userdata) diff --git a/docs/pages/api/interfaces/gearjointopt.md b/docs/pages/api/interfaces/gearjointopt.md index 9b4c3a4e..92214218 100644 --- a/docs/pages/api/interfaces/gearjointopt.md +++ b/docs/pages/api/interfaces/gearjointopt.md @@ -1,49 +1,44 @@ - # Interface: GearJointOpt Gear joint definition. -## Hierarchy - -* [JointOpt](/api/interfaces/jointopt) - - ↳ **GearJointOpt** - - ↳ [GearJointDef](/api/interfaces/gearjointdef) +## Extends -## Index +- [`JointOpt`](JointOpt) -### Properties +## Extended by -* [collideConnected](/api/interfaces/gearjointopt#optional-collideconnected) -* [ratio](/api/interfaces/gearjointopt#optional-ratio) -* [userData](/api/interfaces/gearjointopt#optional-userdata) +- [`GearJointDef`](GearJointDef) ## Properties -### `Optional` collideConnected +### collideConnected? -• **collideConnected**? : *boolean* - -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) -### `Optional` ratio +*** -• **ratio**? : *number* +### ratio? -The gear ratio. See [GearJoint](../classes/gearjoint) for explanation. +> `optional` **ratio**: `number` -___ +The gear ratio. See [GearJoint](../classes/GearJoint) for explanation. -### `Optional` userData +*** -• **userData**? : *any* +### userData? -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/jointdef.md b/docs/pages/api/interfaces/jointdef.md index ec4a2f71..f93ff8e9 100644 --- a/docs/pages/api/interfaces/jointdef.md +++ b/docs/pages/api/interfaces/jointdef.md @@ -1,78 +1,62 @@ - # Interface: JointDef Joint definitions are used to construct joints. -## Hierarchy - -* [JointOpt](/api/interfaces/jointopt) - - ↳ **JointDef** - - ↳ [DistanceJointDef](/api/interfaces/distancejointdef) - - ↳ [FrictionJointDef](/api/interfaces/frictionjointdef) - - ↳ [RevoluteJointDef](/api/interfaces/revolutejointdef) - - ↳ [PrismaticJointDef](/api/interfaces/prismaticjointdef) - - ↳ [GearJointDef](/api/interfaces/gearjointdef) - - ↳ [MotorJointDef](/api/interfaces/motorjointdef) +## Extends - ↳ [MouseJointDef](/api/interfaces/mousejointdef) +- [`JointOpt`](JointOpt) - ↳ [PulleyJointDef](/api/interfaces/pulleyjointdef) +## Extended by - ↳ [RopeJointDef](/api/interfaces/ropejointdef) - - ↳ [WeldJointDef](/api/interfaces/weldjointdef) - - ↳ [WheelJointDef](/api/interfaces/wheeljointdef) - -## Index - -### Properties - -* [bodyA](/api/interfaces/jointdef#bodya) -* [bodyB](/api/interfaces/jointdef#bodyb) -* [collideConnected](/api/interfaces/jointdef#optional-collideconnected) -* [userData](/api/interfaces/jointdef#optional-userdata) +- [`DistanceJointDef`](DistanceJointDef) +- [`FrictionJointDef`](FrictionJointDef) +- [`GearJointDef`](GearJointDef) +- [`MotorJointDef`](MotorJointDef) +- [`MouseJointDef`](MouseJointDef) +- [`PrismaticJointDef`](PrismaticJointDef) +- [`PulleyJointDef`](PulleyJointDef) +- [`RevoluteJointDef`](RevoluteJointDef) +- [`RopeJointDef`](RopeJointDef) +- [`WeldJointDef`](WeldJointDef) +- [`WheelJointDef`](WheelJointDef) ## Properties -### bodyA +### bodyA -• **bodyA**: *[Body](/api/classes/body)* +> **bodyA**: [`Body`](../classes/Body) The first attached body. -___ +*** -### bodyB +### bodyB -• **bodyB**: *[Body](/api/classes/body)* +> **bodyB**: [`Body`](../classes/Body) The second attached body. -___ +*** -### `Optional` collideConnected +### collideConnected? -• **collideConnected**? : *boolean* - -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) -### `Optional` userData +*** -• **userData**? : *any* +### userData? -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/jointopt.md b/docs/pages/api/interfaces/jointopt.md index 02e47585..5629f61d 100644 --- a/docs/pages/api/interfaces/jointopt.md +++ b/docs/pages/api/interfaces/jointopt.md @@ -1,56 +1,35 @@ - # Interface: JointOpt Joint definitions are used to construct joints. -## Hierarchy - -* **JointOpt** - - ↳ [JointDef](/api/interfaces/jointdef) - - ↳ [DistanceJointOpt](/api/interfaces/distancejointopt) - - ↳ [FrictionJointOpt](/api/interfaces/frictionjointopt) - - ↳ [RevoluteJointOpt](/api/interfaces/revolutejointopt) - - ↳ [PrismaticJointOpt](/api/interfaces/prismaticjointopt) - - ↳ [GearJointOpt](/api/interfaces/gearjointopt) - - ↳ [MotorJointOpt](/api/interfaces/motorjointopt) - - ↳ [MouseJointOpt](/api/interfaces/mousejointopt) - - ↳ [PulleyJointOpt](/api/interfaces/pulleyjointopt) - - ↳ [RopeJointOpt](/api/interfaces/ropejointopt) - - ↳ [WeldJointOpt](/api/interfaces/weldjointopt) - - ↳ [WheelJointOpt](/api/interfaces/wheeljointopt) - -## Index - -### Properties - -* [collideConnected](/api/interfaces/jointopt#optional-collideconnected) -* [userData](/api/interfaces/jointopt#optional-userdata) +## Extended by + +- [`JointDef`](JointDef) +- [`DistanceJointOpt`](DistanceJointOpt) +- [`FrictionJointOpt`](FrictionJointOpt) +- [`GearJointOpt`](GearJointOpt) +- [`MotorJointOpt`](MotorJointOpt) +- [`MouseJointOpt`](MouseJointOpt) +- [`PrismaticJointOpt`](PrismaticJointOpt) +- [`PulleyJointOpt`](PulleyJointOpt) +- [`RevoluteJointOpt`](RevoluteJointOpt) +- [`RopeJointOpt`](RopeJointOpt) +- [`WeldJointOpt`](WeldJointOpt) +- [`WheelJointOpt`](WheelJointOpt) ## Properties -### `Optional` collideConnected +### collideConnected? -• **collideConnected**? : *boolean* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +*** -### `Optional` userData +### userData? -• **userData**? : *any* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. diff --git a/docs/pages/api/interfaces/massdata.md b/docs/pages/api/interfaces/massdata.md index 6b8cdef5..ad3b2dcb 100644 --- a/docs/pages/api/interfaces/massdata.md +++ b/docs/pages/api/interfaces/massdata.md @@ -1,40 +1,27 @@ - # Interface: MassData MassData This holds the mass data computed for a shape. -## Hierarchy - -* **MassData** - -## Index - -### Properties - -* [I](/api/interfaces/massdata#i) -* [center](/api/interfaces/massdata#center) -* [mass](/api/interfaces/massdata#mass) - ## Properties -### I +### center -• **I**: *number* +> **center**: [`Vec2Value`](Vec2Value) -The rotational inertia of the shape about the local origin. +The position of the shape's centroid relative to the shape's origin. -___ +*** -### center +### I -• **center**: *[Vec2Value](/api/interfaces/vec2value)* +> **I**: `number` -The position of the shape's centroid relative to the shape's origin. +The rotational inertia of the shape about the local origin. -___ +*** -### mass +### mass -• **mass**: *number* +> **mass**: `number` The mass of the shape, usually in kilograms. diff --git a/docs/pages/api/interfaces/motorjointdef.md b/docs/pages/api/interfaces/motorjointdef.md index 89fe24d6..46c6d21f 100644 --- a/docs/pages/api/interfaces/motorjointdef.md +++ b/docs/pages/api/interfaces/motorjointdef.md @@ -1,121 +1,116 @@ - # Interface: MotorJointDef Motor joint definition. -## Hierarchy - - ↳ [JointDef](/api/interfaces/jointdef) - - ↳ [MotorJointOpt](/api/interfaces/motorjointopt) - - ↳ **MotorJointDef** +## Extends -## Index - -### Properties - -* [angularOffset](/api/interfaces/motorjointdef#optional-angularoffset) -* [bodyA](/api/interfaces/motorjointdef#bodya) -* [bodyB](/api/interfaces/motorjointdef#bodyb) -* [collideConnected](/api/interfaces/motorjointdef#optional-collideconnected) -* [correctionFactor](/api/interfaces/motorjointdef#optional-correctionfactor) -* [linearOffset](/api/interfaces/motorjointdef#optional-linearoffset) -* [maxForce](/api/interfaces/motorjointdef#optional-maxforce) -* [maxTorque](/api/interfaces/motorjointdef#optional-maxtorque) -* [userData](/api/interfaces/motorjointdef#optional-userdata) +- [`JointDef`](JointDef).[`MotorJointOpt`](MotorJointOpt) ## Properties -### `Optional` angularOffset +### angularOffset? -• **angularOffset**? : *number* - -*Inherited from [MotorJointOpt](/api/interfaces/motorjointopt).[angularOffset](/api/interfaces/motorjointopt#optional-angularoffset)* +> `optional` **angularOffset**: `number` The bodyB angle minus bodyA angle in radians. -___ +#### Inherited from + +[`MotorJointOpt`](MotorJointOpt).[`angularOffset`](MotorJointOpt#angularoffset) -### bodyA +*** -• **bodyA**: *[Body](/api/classes/body)* +### bodyA -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyA](/api/interfaces/jointdef#bodya)* +> **bodyA**: [`Body`](../classes/Body) The first attached body. -___ +#### Inherited from -### bodyB +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) -• **bodyB**: *[Body](/api/classes/body)* +*** -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyB](/api/interfaces/jointdef#bodyb)* +### bodyB + +> **bodyB**: [`Body`](../classes/Body) The second attached body. -___ +#### Inherited from -### `Optional` collideConnected +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) -• **collideConnected**? : *boolean* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +### collideConnected? -*Overrides [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from + +[`MotorJointOpt`](MotorJointOpt).[`collideConnected`](MotorJointOpt#collideconnected) -### `Optional` correctionFactor +*** -• **correctionFactor**? : *number* +### correctionFactor? -*Inherited from [MotorJointOpt](/api/interfaces/motorjointopt).[correctionFactor](/api/interfaces/motorjointopt#optional-correctionfactor)* +> `optional` **correctionFactor**: `number` Position correction factor in the range [0,1]. -___ +#### Inherited from -### `Optional` linearOffset +[`MotorJointOpt`](MotorJointOpt).[`correctionFactor`](MotorJointOpt#correctionfactor) -• **linearOffset**? : *[Vec2Value](/api/interfaces/vec2value)* +*** -*Inherited from [MotorJointOpt](/api/interfaces/motorjointopt).[linearOffset](/api/interfaces/motorjointopt#optional-linearoffset)* +### linearOffset? + +> `optional` **linearOffset**: [`Vec2Value`](Vec2Value) Position of bodyB minus the position of bodyA, in bodyA's frame, in meters. -___ +#### Inherited from + +[`MotorJointOpt`](MotorJointOpt).[`linearOffset`](MotorJointOpt#linearoffset) -### `Optional` maxForce +*** -• **maxForce**? : *number* +### maxForce? -*Inherited from [MotorJointOpt](/api/interfaces/motorjointopt).[maxForce](/api/interfaces/motorjointopt#optional-maxforce)* +> `optional` **maxForce**: `number` The maximum motor force in N. -___ +#### Inherited from -### `Optional` maxTorque +[`MotorJointOpt`](MotorJointOpt).[`maxForce`](MotorJointOpt#maxforce) -• **maxTorque**? : *number* +*** -*Inherited from [MotorJointOpt](/api/interfaces/motorjointopt).[maxTorque](/api/interfaces/motorjointopt#optional-maxtorque)* +### maxTorque? + +> `optional` **maxTorque**: `number` The maximum motor torque in N-m. -___ +#### Inherited from -### `Optional` userData +[`MotorJointOpt`](MotorJointOpt).[`maxTorque`](MotorJointOpt#maxtorque) -• **userData**? : *any* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +### userData? -*Overrides [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`MotorJointOpt`](MotorJointOpt).[`userData`](MotorJointOpt#userdata) diff --git a/docs/pages/api/interfaces/motorjointopt.md b/docs/pages/api/interfaces/motorjointopt.md index fe4ed9d5..11c99a20 100644 --- a/docs/pages/api/interfaces/motorjointopt.md +++ b/docs/pages/api/interfaces/motorjointopt.md @@ -1,85 +1,76 @@ - # Interface: MotorJointOpt Motor joint definition. -## Hierarchy - -* [JointOpt](/api/interfaces/jointopt) - - ↳ **MotorJointOpt** +## Extends - ↳ [MotorJointDef](/api/interfaces/motorjointdef) +- [`JointOpt`](JointOpt) -## Index +## Extended by -### Properties - -* [angularOffset](/api/interfaces/motorjointopt#optional-angularoffset) -* [collideConnected](/api/interfaces/motorjointopt#optional-collideconnected) -* [correctionFactor](/api/interfaces/motorjointopt#optional-correctionfactor) -* [linearOffset](/api/interfaces/motorjointopt#optional-linearoffset) -* [maxForce](/api/interfaces/motorjointopt#optional-maxforce) -* [maxTorque](/api/interfaces/motorjointopt#optional-maxtorque) -* [userData](/api/interfaces/motorjointopt#optional-userdata) +- [`MotorJointDef`](MotorJointDef) ## Properties -### `Optional` angularOffset +### angularOffset? -• **angularOffset**? : *number* +> `optional` **angularOffset**: `number` The bodyB angle minus bodyA angle in radians. -___ - -### `Optional` collideConnected +*** -• **collideConnected**? : *boolean* +### collideConnected? -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from -### `Optional` correctionFactor +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) -• **correctionFactor**? : *number* +*** + +### correctionFactor? + +> `optional` **correctionFactor**: `number` Position correction factor in the range [0,1]. -___ +*** -### `Optional` linearOffset +### linearOffset? -• **linearOffset**? : *[Vec2Value](/api/interfaces/vec2value)* +> `optional` **linearOffset**: [`Vec2Value`](Vec2Value) Position of bodyB minus the position of bodyA, in bodyA's frame, in meters. -___ +*** -### `Optional` maxForce +### maxForce? -• **maxForce**? : *number* +> `optional` **maxForce**: `number` The maximum motor force in N. -___ +*** -### `Optional` maxTorque +### maxTorque? -• **maxTorque**? : *number* +> `optional` **maxTorque**: `number` The maximum motor torque in N-m. -___ - -### `Optional` userData +*** -• **userData**? : *any* +### userData? -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/mousejointdef.md b/docs/pages/api/interfaces/mousejointdef.md index 96cf1601..ed169d78 100644 --- a/docs/pages/api/interfaces/mousejointdef.md +++ b/docs/pages/api/interfaces/mousejointdef.md @@ -1,113 +1,105 @@ - # Interface: MouseJointDef Mouse joint definition. This requires a world target point, tuning parameters, and the time step. -## Hierarchy - - ↳ [JointDef](/api/interfaces/jointdef) - - ↳ [MouseJointOpt](/api/interfaces/mousejointopt) - - ↳ **MouseJointDef** +## Extends -## Index - -### Properties - -* [bodyA](/api/interfaces/mousejointdef#bodya) -* [bodyB](/api/interfaces/mousejointdef#bodyb) -* [collideConnected](/api/interfaces/mousejointdef#optional-collideconnected) -* [dampingRatio](/api/interfaces/mousejointdef#optional-dampingratio) -* [frequencyHz](/api/interfaces/mousejointdef#optional-frequencyhz) -* [maxForce](/api/interfaces/mousejointdef#optional-maxforce) -* [target](/api/interfaces/mousejointdef#target) -* [userData](/api/interfaces/mousejointdef#optional-userdata) +- [`JointDef`](JointDef).[`MouseJointOpt`](MouseJointOpt) ## Properties -### bodyA +### bodyA -• **bodyA**: *[Body](/api/classes/body)* - -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyA](/api/interfaces/jointdef#bodya)* +> **bodyA**: [`Body`](../classes/Body) The first attached body. -___ +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) -### bodyB +*** -• **bodyB**: *[Body](/api/classes/body)* +### bodyB -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyB](/api/interfaces/jointdef#bodyb)* +> **bodyB**: [`Body`](../classes/Body) The second attached body. -___ +#### Inherited from -### `Optional` collideConnected +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) -• **collideConnected**? : *boolean* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +### collideConnected? -*Overrides [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from -### `Optional` dampingRatio +[`MouseJointOpt`](MouseJointOpt).[`collideConnected`](MouseJointOpt#collideconnected) -• **dampingRatio**? : *number* +*** -*Inherited from [MouseJointOpt](/api/interfaces/mousejointopt).[dampingRatio](/api/interfaces/mousejointopt#optional-dampingratio)* +### dampingRatio? + +> `optional` **dampingRatio**: `number` [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical damping. -___ +#### Inherited from + +[`MouseJointOpt`](MouseJointOpt).[`dampingRatio`](MouseJointOpt#dampingratio) -### `Optional` frequencyHz +*** -• **frequencyHz**? : *number* +### frequencyHz? -*Inherited from [MouseJointOpt](/api/interfaces/mousejointopt).[frequencyHz](/api/interfaces/mousejointopt#optional-frequencyhz)* +> `optional` **frequencyHz**: `number` [frequencyHz = 5.0] The response speed. -___ +#### Inherited from -### `Optional` maxForce +[`MouseJointOpt`](MouseJointOpt).[`frequencyHz`](MouseJointOpt#frequencyhz) -• **maxForce**? : *number* +*** -*Inherited from [MouseJointOpt](/api/interfaces/mousejointopt).[maxForce](/api/interfaces/mousejointopt#optional-maxforce)* +### maxForce? + +> `optional` **maxForce**: `number` [maxForce = 0.0] The maximum constraint force that can be exerted to move the candidate body. Usually you will express as some multiple of the weight (multiplier * mass * gravity). -___ +#### Inherited from + +[`MouseJointOpt`](MouseJointOpt).[`maxForce`](MouseJointOpt#maxforce) -### target +*** -• **target**: *[Vec2Value](/api/interfaces/vec2value)* +### target + +> **target**: [`Vec2Value`](Vec2Value) The initial world target point. This is assumed to coincide with the body anchor initially. -___ +*** -### `Optional` userData +### userData? -• **userData**? : *any* +> `optional` **userData**: `any` -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +Use this to attach application specific data to your joints. -*Overrides [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +#### Inherited from -Use this to attach application specific data to your joints. +[`MouseJointOpt`](MouseJointOpt).[`userData`](MouseJointOpt#userdata) diff --git a/docs/pages/api/interfaces/mousejointopt.md b/docs/pages/api/interfaces/mousejointopt.md index a1851a3e..1f9b4fac 100644 --- a/docs/pages/api/interfaces/mousejointopt.md +++ b/docs/pages/api/interfaces/mousejointopt.md @@ -1,71 +1,64 @@ - # Interface: MouseJointOpt Mouse joint definition. This requires a world target point, tuning parameters, and the time step. -## Hierarchy - -* [JointOpt](/api/interfaces/jointopt) - - ↳ **MouseJointOpt** +## Extends - ↳ [MouseJointDef](/api/interfaces/mousejointdef) +- [`JointOpt`](JointOpt) -## Index +## Extended by -### Properties - -* [collideConnected](/api/interfaces/mousejointopt#optional-collideconnected) -* [dampingRatio](/api/interfaces/mousejointopt#optional-dampingratio) -* [frequencyHz](/api/interfaces/mousejointopt#optional-frequencyhz) -* [maxForce](/api/interfaces/mousejointopt#optional-maxforce) -* [userData](/api/interfaces/mousejointopt#optional-userdata) +- [`MouseJointDef`](MouseJointDef) ## Properties -### `Optional` collideConnected - -• **collideConnected**? : *boolean* +### collideConnected? -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from -### `Optional` dampingRatio +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) -• **dampingRatio**? : *number* +*** + +### dampingRatio? + +> `optional` **dampingRatio**: `number` [dampingRatio = 0.7] The damping ratio. 0 = no damping, 1 = critical damping. -___ +*** -### `Optional` frequencyHz +### frequencyHz? -• **frequencyHz**? : *number* +> `optional` **frequencyHz**: `number` [frequencyHz = 5.0] The response speed. -___ +*** -### `Optional` maxForce +### maxForce? -• **maxForce**? : *number* +> `optional` **maxForce**: `number` [maxForce = 0.0] The maximum constraint force that can be exerted to move the candidate body. Usually you will express as some multiple of the weight (multiplier * mass * gravity). -___ - -### `Optional` userData +*** -• **userData**? : *any* +### userData? -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/prismaticjointdef.md b/docs/pages/api/interfaces/prismaticjointdef.md index d727807f..a9422d26 100644 --- a/docs/pages/api/interfaces/prismaticjointdef.md +++ b/docs/pages/api/interfaces/prismaticjointdef.md @@ -1,4 +1,3 @@ - # Interface: PrismaticJointDef Prismatic joint definition. This requires defining a line of motion using an @@ -8,167 +7,160 @@ The joint translation is zero when the local anchor points coincide in world space. Using local anchors and a local axis helps when saving and loading a game. -## Hierarchy - - ↳ [JointDef](/api/interfaces/jointdef) - - ↳ [PrismaticJointOpt](/api/interfaces/prismaticjointopt) - - ↳ **PrismaticJointDef** - -## Index +## Extends -### Properties - -* [bodyA](/api/interfaces/prismaticjointdef#bodya) -* [bodyB](/api/interfaces/prismaticjointdef#bodyb) -* [collideConnected](/api/interfaces/prismaticjointdef#optional-collideconnected) -* [enableLimit](/api/interfaces/prismaticjointdef#optional-enablelimit) -* [enableMotor](/api/interfaces/prismaticjointdef#optional-enablemotor) -* [localAnchorA](/api/interfaces/prismaticjointdef#localanchora) -* [localAnchorB](/api/interfaces/prismaticjointdef#localanchorb) -* [localAxisA](/api/interfaces/prismaticjointdef#localaxisa) -* [lowerTranslation](/api/interfaces/prismaticjointdef#optional-lowertranslation) -* [maxMotorForce](/api/interfaces/prismaticjointdef#optional-maxmotorforce) -* [motorSpeed](/api/interfaces/prismaticjointdef#optional-motorspeed) -* [referenceAngle](/api/interfaces/prismaticjointdef#referenceangle) -* [upperTranslation](/api/interfaces/prismaticjointdef#optional-uppertranslation) -* [userData](/api/interfaces/prismaticjointdef#optional-userdata) +- [`JointDef`](JointDef).[`PrismaticJointOpt`](PrismaticJointOpt) ## Properties -### bodyA - -• **bodyA**: *[Body](/api/classes/body)* +### bodyA -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyA](/api/interfaces/jointdef#bodya)* +> **bodyA**: [`Body`](../classes/Body) The first attached body. -___ +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) -### bodyB +*** -• **bodyB**: *[Body](/api/classes/body)* +### bodyB -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyB](/api/interfaces/jointdef#bodyb)* +> **bodyB**: [`Body`](../classes/Body) The second attached body. -___ +#### Inherited from -### `Optional` collideConnected +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) -• **collideConnected**? : *boolean* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +### collideConnected? -*Overrides [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from -### `Optional` enableLimit +[`PrismaticJointOpt`](PrismaticJointOpt).[`collideConnected`](PrismaticJointOpt#collideconnected) -• **enableLimit**? : *boolean* +*** -*Inherited from [PrismaticJointOpt](/api/interfaces/prismaticjointopt).[enableLimit](/api/interfaces/prismaticjointopt#optional-enablelimit)* +### enableLimit? + +> `optional` **enableLimit**: `boolean` Enable/disable the joint limit. -___ +#### Inherited from + +[`PrismaticJointOpt`](PrismaticJointOpt).[`enableLimit`](PrismaticJointOpt#enablelimit) -### `Optional` enableMotor +*** -• **enableMotor**? : *boolean* +### enableMotor? -*Inherited from [PrismaticJointOpt](/api/interfaces/prismaticjointopt).[enableMotor](/api/interfaces/prismaticjointopt#optional-enablemotor)* +> `optional` **enableMotor**: `boolean` Enable/disable the joint motor. -___ +#### Inherited from -### localAnchorA +[`PrismaticJointOpt`](PrismaticJointOpt).[`enableMotor`](PrismaticJointOpt#enablemotor) -• **localAnchorA**: *[Vec2Value](/api/interfaces/vec2value)* +*** + +### localAnchorA + +> **localAnchorA**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyA's origin. -___ +*** -### localAnchorB +### localAnchorB -• **localAnchorB**: *[Vec2Value](/api/interfaces/vec2value)* +> **localAnchorB**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyB's origin. -___ +*** -### localAxisA +### localAxisA -• **localAxisA**: *[Vec2Value](/api/interfaces/vec2value)* +> **localAxisA**: [`Vec2Value`](Vec2Value) The local translation unit axis in bodyA. -___ - -### `Optional` lowerTranslation +*** -• **lowerTranslation**? : *number* +### lowerTranslation? -*Inherited from [PrismaticJointOpt](/api/interfaces/prismaticjointopt).[lowerTranslation](/api/interfaces/prismaticjointopt#optional-lowertranslation)* +> `optional` **lowerTranslation**: `number` The lower translation limit, usually in meters. -___ +#### Inherited from -### `Optional` maxMotorForce +[`PrismaticJointOpt`](PrismaticJointOpt).[`lowerTranslation`](PrismaticJointOpt#lowertranslation) -• **maxMotorForce**? : *number* +*** -*Inherited from [PrismaticJointOpt](/api/interfaces/prismaticjointopt).[maxMotorForce](/api/interfaces/prismaticjointopt#optional-maxmotorforce)* +### maxMotorForce? + +> `optional` **maxMotorForce**: `number` The maximum motor torque, usually in N-m. -___ +#### Inherited from + +[`PrismaticJointOpt`](PrismaticJointOpt).[`maxMotorForce`](PrismaticJointOpt#maxmotorforce) -### `Optional` motorSpeed +*** -• **motorSpeed**? : *number* +### motorSpeed? -*Inherited from [PrismaticJointOpt](/api/interfaces/prismaticjointopt).[motorSpeed](/api/interfaces/prismaticjointopt#optional-motorspeed)* +> `optional` **motorSpeed**: `number` The desired motor speed in radians per second. -___ +#### Inherited from -### referenceAngle +[`PrismaticJointOpt`](PrismaticJointOpt).[`motorSpeed`](PrismaticJointOpt#motorspeed) -• **referenceAngle**: *number* +*** + +### referenceAngle + +> **referenceAngle**: `number` referenceAngle The constrained angle between the bodies: bodyB_angle - bodyA_angle. -___ - -### `Optional` upperTranslation +*** -• **upperTranslation**? : *number* +### upperTranslation? -*Inherited from [PrismaticJointOpt](/api/interfaces/prismaticjointopt).[upperTranslation](/api/interfaces/prismaticjointopt#optional-uppertranslation)* +> `optional` **upperTranslation**: `number` The upper translation limit, usually in meters. -___ +#### Inherited from -### `Optional` userData +[`PrismaticJointOpt`](PrismaticJointOpt).[`upperTranslation`](PrismaticJointOpt#uppertranslation) -• **userData**? : *any* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +### userData? -*Overrides [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`PrismaticJointOpt`](PrismaticJointOpt).[`userData`](PrismaticJointOpt#userdata) diff --git a/docs/pages/api/interfaces/prismaticjointopt.md b/docs/pages/api/interfaces/prismaticjointopt.md index efc9eecc..53f89253 100644 --- a/docs/pages/api/interfaces/prismaticjointopt.md +++ b/docs/pages/api/interfaces/prismaticjointopt.md @@ -1,4 +1,3 @@ - # Interface: PrismaticJointOpt Prismatic joint definition. This requires defining a line of motion using an @@ -8,92 +7,83 @@ The joint translation is zero when the local anchor points coincide in world space. Using local anchors and a local axis helps when saving and loading a game. -## Hierarchy - -* [JointOpt](/api/interfaces/jointopt) - - ↳ **PrismaticJointOpt** +## Extends - ↳ [PrismaticJointDef](/api/interfaces/prismaticjointdef) +- [`JointOpt`](JointOpt) -## Index +## Extended by -### Properties - -* [collideConnected](/api/interfaces/prismaticjointopt#optional-collideconnected) -* [enableLimit](/api/interfaces/prismaticjointopt#optional-enablelimit) -* [enableMotor](/api/interfaces/prismaticjointopt#optional-enablemotor) -* [lowerTranslation](/api/interfaces/prismaticjointopt#optional-lowertranslation) -* [maxMotorForce](/api/interfaces/prismaticjointopt#optional-maxmotorforce) -* [motorSpeed](/api/interfaces/prismaticjointopt#optional-motorspeed) -* [upperTranslation](/api/interfaces/prismaticjointopt#optional-uppertranslation) -* [userData](/api/interfaces/prismaticjointopt#optional-userdata) +- [`PrismaticJointDef`](PrismaticJointDef) ## Properties -### `Optional` collideConnected - -• **collideConnected**? : *boolean* +### collideConnected? -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from -### `Optional` enableLimit +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) -• **enableLimit**? : *boolean* +*** + +### enableLimit? + +> `optional` **enableLimit**: `boolean` Enable/disable the joint limit. -___ +*** -### `Optional` enableMotor +### enableMotor? -• **enableMotor**? : *boolean* +> `optional` **enableMotor**: `boolean` Enable/disable the joint motor. -___ +*** -### `Optional` lowerTranslation +### lowerTranslation? -• **lowerTranslation**? : *number* +> `optional` **lowerTranslation**: `number` The lower translation limit, usually in meters. -___ +*** -### `Optional` maxMotorForce +### maxMotorForce? -• **maxMotorForce**? : *number* +> `optional` **maxMotorForce**: `number` The maximum motor torque, usually in N-m. -___ +*** -### `Optional` motorSpeed +### motorSpeed? -• **motorSpeed**? : *number* +> `optional` **motorSpeed**: `number` The desired motor speed in radians per second. -___ +*** -### `Optional` upperTranslation +### upperTranslation? -• **upperTranslation**? : *number* +> `optional` **upperTranslation**: `number` The upper translation limit, usually in meters. -___ - -### `Optional` userData +*** -• **userData**? : *any* +### userData? -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/pulleyjointdef.md b/docs/pages/api/interfaces/pulleyjointdef.md index 2e3f62e4..a66860bc 100644 --- a/docs/pages/api/interfaces/pulleyjointdef.md +++ b/docs/pages/api/interfaces/pulleyjointdef.md @@ -1,130 +1,113 @@ - # Interface: PulleyJointDef Pulley joint definition. This requires two ground anchors, two dynamic body anchor points, and a pulley ratio. -## Hierarchy - - ↳ [JointDef](/api/interfaces/jointdef) - - ↳ [PulleyJointOpt](/api/interfaces/pulleyjointopt) - - ↳ **PulleyJointDef** - -## Index - -### Properties +## Extends -* [bodyA](/api/interfaces/pulleyjointdef#bodya) -* [bodyB](/api/interfaces/pulleyjointdef#bodyb) -* [collideConnected](/api/interfaces/pulleyjointdef#optional-collideconnected) -* [groundAnchorA](/api/interfaces/pulleyjointdef#groundanchora) -* [groundAnchorB](/api/interfaces/pulleyjointdef#groundanchorb) -* [lengthA](/api/interfaces/pulleyjointdef#lengtha) -* [lengthB](/api/interfaces/pulleyjointdef#lengthb) -* [localAnchorA](/api/interfaces/pulleyjointdef#localanchora) -* [localAnchorB](/api/interfaces/pulleyjointdef#localanchorb) -* [ratio](/api/interfaces/pulleyjointdef#ratio) -* [userData](/api/interfaces/pulleyjointdef#optional-userdata) +- [`JointDef`](JointDef).[`PulleyJointOpt`](PulleyJointOpt) ## Properties -### bodyA +### bodyA -• **bodyA**: *[Body](/api/classes/body)* - -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyA](/api/interfaces/jointdef#bodya)* +> **bodyA**: [`Body`](../classes/Body) The first attached body. -___ +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) -### bodyB +*** -• **bodyB**: *[Body](/api/classes/body)* +### bodyB -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyB](/api/interfaces/jointdef#bodyb)* +> **bodyB**: [`Body`](../classes/Body) The second attached body. -___ +#### Inherited from -### `Optional` collideConnected +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) -• **collideConnected**? : *boolean* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +### collideConnected? -*Overrides [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from + +[`PulleyJointOpt`](PulleyJointOpt).[`collideConnected`](PulleyJointOpt#collideconnected) -### groundAnchorA +*** -• **groundAnchorA**: *[Vec2Value](/api/interfaces/vec2value)* +### groundAnchorA + +> **groundAnchorA**: [`Vec2Value`](Vec2Value) The first ground anchor in world coordinates. This point never moves. -___ +*** -### groundAnchorB +### groundAnchorB -• **groundAnchorB**: *[Vec2Value](/api/interfaces/vec2value)* +> **groundAnchorB**: [`Vec2Value`](Vec2Value) The second ground anchor in world coordinates. This point never moves. -___ +*** -### lengthA +### lengthA -• **lengthA**: *number* +> **lengthA**: `number` The reference length for the segment attached to bodyA. -___ +*** -### lengthB +### lengthB -• **lengthB**: *number* +> **lengthB**: `number` The reference length for the segment attached to bodyB. -___ +*** -### localAnchorA +### localAnchorA -• **localAnchorA**: *[Vec2Value](/api/interfaces/vec2value)* +> **localAnchorA**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyA's origin. -___ +*** -### localAnchorB +### localAnchorB -• **localAnchorB**: *[Vec2Value](/api/interfaces/vec2value)* +> **localAnchorB**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyB's origin. -___ +*** -### ratio +### ratio -• **ratio**: *number* +> **ratio**: `number` The pulley ratio, used to simulate a block-and-tackle. -___ +*** -### `Optional` userData +### userData? -• **userData**? : *any* +> `optional` **userData**: `any` -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +Use this to attach application specific data to your joints. -*Overrides [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +#### Inherited from -Use this to attach application specific data to your joints. +[`PulleyJointOpt`](PulleyJointOpt).[`userData`](PulleyJointOpt#userdata) diff --git a/docs/pages/api/interfaces/pulleyjointopt.md b/docs/pages/api/interfaces/pulleyjointopt.md index 5e9c3796..030f76c0 100644 --- a/docs/pages/api/interfaces/pulleyjointopt.md +++ b/docs/pages/api/interfaces/pulleyjointopt.md @@ -1,41 +1,37 @@ - # Interface: PulleyJointOpt Pulley joint definition. This requires two ground anchors, two dynamic body anchor points, and a pulley ratio. -## Hierarchy - -* [JointOpt](/api/interfaces/jointopt) - - ↳ **PulleyJointOpt** - - ↳ [PulleyJointDef](/api/interfaces/pulleyjointdef) +## Extends -## Index +- [`JointOpt`](JointOpt) -### Properties +## Extended by -* [collideConnected](/api/interfaces/pulleyjointopt#optional-collideconnected) -* [userData](/api/interfaces/pulleyjointopt#optional-userdata) +- [`PulleyJointDef`](PulleyJointDef) ## Properties -### `Optional` collideConnected +### collideConnected? -• **collideConnected**? : *boolean* - -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from + +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) -### `Optional` userData +*** -• **userData**? : *any* +### userData? -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/raycastinput.md b/docs/pages/api/interfaces/raycastinput.md index cf81161c..c5f0b7d5 100644 --- a/docs/pages/api/interfaces/raycastinput.md +++ b/docs/pages/api/interfaces/raycastinput.md @@ -1,34 +1,21 @@ - # Interface: RayCastInput Ray-cast input data. The ray extends from `p1` to `p1 + maxFraction * (p2 - p1)`. -## Hierarchy - -* **RayCastInput** - -## Index - -### Properties - -* [maxFraction](/api/interfaces/raycastinput#maxfraction) -* [p1](/api/interfaces/raycastinput#p1) -* [p2](/api/interfaces/raycastinput#p2) - ## Properties -### maxFraction +### maxFraction -• **maxFraction**: *number* +> **maxFraction**: `number` -___ +*** -### p1 +### p1 -• **p1**: *[Vec2Value](/api/interfaces/vec2value)* +> **p1**: [`Vec2Value`](Vec2Value) -___ +*** -### p2 +### p2 -• **p2**: *[Vec2Value](/api/interfaces/vec2value)* +> **p2**: [`Vec2Value`](Vec2Value) diff --git a/docs/pages/api/interfaces/raycastoutput.md b/docs/pages/api/interfaces/raycastoutput.md index 745c43dc..b54f02e7 100644 --- a/docs/pages/api/interfaces/raycastoutput.md +++ b/docs/pages/api/interfaces/raycastoutput.md @@ -1,28 +1,16 @@ - # Interface: RayCastOutput Ray-cast output data. The ray hits at `p1 + fraction * (p2 - p1)`, where `p1` and `p2` come from RayCastInput. -## Hierarchy - -* **RayCastOutput** - -## Index - -### Properties - -* [fraction](/api/interfaces/raycastoutput#fraction) -* [normal](/api/interfaces/raycastoutput#normal) - ## Properties -### fraction +### fraction -• **fraction**: *number* +> **fraction**: `number` -___ +*** -### normal +### normal -• **normal**: *[Vec2](/api/classes/vec2)* +> **normal**: [`Vec2`](../classes/Vec2) diff --git a/docs/pages/api/interfaces/revolutejointdef.md b/docs/pages/api/interfaces/revolutejointdef.md index 50e5bdd3..6264940c 100644 --- a/docs/pages/api/interfaces/revolutejointdef.md +++ b/docs/pages/api/interfaces/revolutejointdef.md @@ -1,4 +1,3 @@ - # Interface: RevoluteJointDef Revolute joint definition. This requires defining an anchor point where the @@ -12,158 +11,152 @@ center of mass because: 1. you might not know where the center of mass will be. 2. if you add/remove shapes from a body and recompute the mass, the joints will be broken. -## Hierarchy - - ↳ [JointDef](/api/interfaces/jointdef) - - ↳ [RevoluteJointOpt](/api/interfaces/revolutejointopt) - - ↳ **RevoluteJointDef** - -## Index +## Extends -### Properties - -* [bodyA](/api/interfaces/revolutejointdef#bodya) -* [bodyB](/api/interfaces/revolutejointdef#bodyb) -* [collideConnected](/api/interfaces/revolutejointdef#optional-collideconnected) -* [enableLimit](/api/interfaces/revolutejointdef#optional-enablelimit) -* [enableMotor](/api/interfaces/revolutejointdef#optional-enablemotor) -* [localAnchorA](/api/interfaces/revolutejointdef#localanchora) -* [localAnchorB](/api/interfaces/revolutejointdef#localanchorb) -* [lowerAngle](/api/interfaces/revolutejointdef#optional-lowerangle) -* [maxMotorTorque](/api/interfaces/revolutejointdef#optional-maxmotortorque) -* [motorSpeed](/api/interfaces/revolutejointdef#optional-motorspeed) -* [referenceAngle](/api/interfaces/revolutejointdef#referenceangle) -* [upperAngle](/api/interfaces/revolutejointdef#optional-upperangle) -* [userData](/api/interfaces/revolutejointdef#optional-userdata) +- [`JointDef`](JointDef).[`RevoluteJointOpt`](RevoluteJointOpt) ## Properties -### bodyA - -• **bodyA**: *[Body](/api/classes/body)* +### bodyA -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyA](/api/interfaces/jointdef#bodya)* +> **bodyA**: [`Body`](../classes/Body) The first attached body. -___ +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) -### bodyB +*** -• **bodyB**: *[Body](/api/classes/body)* +### bodyB -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyB](/api/interfaces/jointdef#bodyb)* +> **bodyB**: [`Body`](../classes/Body) The second attached body. -___ +#### Inherited from -### `Optional` collideConnected +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) -• **collideConnected**? : *boolean* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +### collideConnected? -*Overrides [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from -### `Optional` enableLimit +[`RevoluteJointOpt`](RevoluteJointOpt).[`collideConnected`](RevoluteJointOpt#collideconnected) -• **enableLimit**? : *boolean* +*** -*Inherited from [RevoluteJointOpt](/api/interfaces/revolutejointopt).[enableLimit](/api/interfaces/revolutejointopt#optional-enablelimit)* +### enableLimit? + +> `optional` **enableLimit**: `boolean` A flag to enable joint limits. -___ +#### Inherited from + +[`RevoluteJointOpt`](RevoluteJointOpt).[`enableLimit`](RevoluteJointOpt#enablelimit) -### `Optional` enableMotor +*** -• **enableMotor**? : *boolean* +### enableMotor? -*Inherited from [RevoluteJointOpt](/api/interfaces/revolutejointopt).[enableMotor](/api/interfaces/revolutejointopt#optional-enablemotor)* +> `optional` **enableMotor**: `boolean` A flag to enable the joint motor. -___ +#### Inherited from -### localAnchorA +[`RevoluteJointOpt`](RevoluteJointOpt).[`enableMotor`](RevoluteJointOpt#enablemotor) -• **localAnchorA**: *[Vec2Value](/api/interfaces/vec2value)* +*** + +### localAnchorA + +> **localAnchorA**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyA's origin. -___ +*** -### localAnchorB +### localAnchorB -• **localAnchorB**: *[Vec2Value](/api/interfaces/vec2value)* +> **localAnchorB**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyB's origin. -___ - -### `Optional` lowerAngle +*** -• **lowerAngle**? : *number* +### lowerAngle? -*Inherited from [RevoluteJointOpt](/api/interfaces/revolutejointopt).[lowerAngle](/api/interfaces/revolutejointopt#optional-lowerangle)* +> `optional` **lowerAngle**: `number` The lower angle for the joint limit (radians). -___ +#### Inherited from -### `Optional` maxMotorTorque +[`RevoluteJointOpt`](RevoluteJointOpt).[`lowerAngle`](RevoluteJointOpt#lowerangle) -• **maxMotorTorque**? : *number* +*** -*Inherited from [RevoluteJointOpt](/api/interfaces/revolutejointopt).[maxMotorTorque](/api/interfaces/revolutejointopt#optional-maxmotortorque)* +### maxMotorTorque? + +> `optional` **maxMotorTorque**: `number` The maximum motor torque used to achieve the desired motor speed. Usually in N-m. -___ +#### Inherited from + +[`RevoluteJointOpt`](RevoluteJointOpt).[`maxMotorTorque`](RevoluteJointOpt#maxmotortorque) -### `Optional` motorSpeed +*** -• **motorSpeed**? : *number* +### motorSpeed? -*Inherited from [RevoluteJointOpt](/api/interfaces/revolutejointopt).[motorSpeed](/api/interfaces/revolutejointopt#optional-motorspeed)* +> `optional` **motorSpeed**: `number` The desired motor speed. Usually in radians per second. -___ +#### Inherited from -### referenceAngle +[`RevoluteJointOpt`](RevoluteJointOpt).[`motorSpeed`](RevoluteJointOpt#motorspeed) -• **referenceAngle**: *number* +*** -The bodyB angle minus bodyA angle in the reference state (radians). +### referenceAngle + +> **referenceAngle**: `number` -___ +The bodyB angle minus bodyA angle in the reference state (radians). -### `Optional` upperAngle +*** -• **upperAngle**? : *number* +### upperAngle? -*Inherited from [RevoluteJointOpt](/api/interfaces/revolutejointopt).[upperAngle](/api/interfaces/revolutejointopt#optional-upperangle)* +> `optional` **upperAngle**: `number` The upper angle for the joint limit (radians). -___ +#### Inherited from -### `Optional` userData +[`RevoluteJointOpt`](RevoluteJointOpt).[`upperAngle`](RevoluteJointOpt#upperangle) -• **userData**? : *any* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +### userData? -*Overrides [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`RevoluteJointOpt`](RevoluteJointOpt).[`userData`](RevoluteJointOpt#userdata) diff --git a/docs/pages/api/interfaces/revolutejointopt.md b/docs/pages/api/interfaces/revolutejointopt.md index 8d1785ea..a45f009b 100644 --- a/docs/pages/api/interfaces/revolutejointopt.md +++ b/docs/pages/api/interfaces/revolutejointopt.md @@ -1,4 +1,3 @@ - # Interface: RevoluteJointOpt Revolute joint definition. This requires defining an anchor point where the @@ -12,93 +11,84 @@ center of mass because: 1. you might not know where the center of mass will be. 2. if you add/remove shapes from a body and recompute the mass, the joints will be broken. -## Hierarchy - -* [JointOpt](/api/interfaces/jointopt) - - ↳ **RevoluteJointOpt** +## Extends - ↳ [RevoluteJointDef](/api/interfaces/revolutejointdef) +- [`JointOpt`](JointOpt) -## Index +## Extended by -### Properties - -* [collideConnected](/api/interfaces/revolutejointopt#optional-collideconnected) -* [enableLimit](/api/interfaces/revolutejointopt#optional-enablelimit) -* [enableMotor](/api/interfaces/revolutejointopt#optional-enablemotor) -* [lowerAngle](/api/interfaces/revolutejointopt#optional-lowerangle) -* [maxMotorTorque](/api/interfaces/revolutejointopt#optional-maxmotortorque) -* [motorSpeed](/api/interfaces/revolutejointopt#optional-motorspeed) -* [upperAngle](/api/interfaces/revolutejointopt#optional-upperangle) -* [userData](/api/interfaces/revolutejointopt#optional-userdata) +- [`RevoluteJointDef`](RevoluteJointDef) ## Properties -### `Optional` collideConnected - -• **collideConnected**? : *boolean* +### collideConnected? -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from -### `Optional` enableLimit +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) -• **enableLimit**? : *boolean* +*** + +### enableLimit? + +> `optional` **enableLimit**: `boolean` A flag to enable joint limits. -___ +*** -### `Optional` enableMotor +### enableMotor? -• **enableMotor**? : *boolean* +> `optional` **enableMotor**: `boolean` A flag to enable the joint motor. -___ +*** -### `Optional` lowerAngle +### lowerAngle? -• **lowerAngle**? : *number* +> `optional` **lowerAngle**: `number` The lower angle for the joint limit (radians). -___ +*** -### `Optional` maxMotorTorque +### maxMotorTorque? -• **maxMotorTorque**? : *number* +> `optional` **maxMotorTorque**: `number` The maximum motor torque used to achieve the desired motor speed. Usually in N-m. -___ +*** -### `Optional` motorSpeed +### motorSpeed? -• **motorSpeed**? : *number* +> `optional` **motorSpeed**: `number` The desired motor speed. Usually in radians per second. -___ +*** -### `Optional` upperAngle +### upperAngle? -• **upperAngle**? : *number* +> `optional` **upperAngle**: `number` The upper angle for the joint limit (radians). -___ - -### `Optional` userData +*** -• **userData**? : *any* +### userData? -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/ropejointdef.md b/docs/pages/api/interfaces/ropejointdef.md index 815d4160..f7fc14bf 100644 --- a/docs/pages/api/interfaces/ropejointdef.md +++ b/docs/pages/api/interfaces/ropejointdef.md @@ -1,98 +1,87 @@ - # Interface: RopeJointDef Rope joint definition. This requires two body anchor points and a maximum lengths. Note: by default the connected objects will not collide. see collideConnected in JointDef. -## Hierarchy - - ↳ [JointDef](/api/interfaces/jointdef) - - ↳ [RopeJointOpt](/api/interfaces/ropejointopt) - - ↳ **RopeJointDef** +## Extends -## Index - -### Properties - -* [bodyA](/api/interfaces/ropejointdef#bodya) -* [bodyB](/api/interfaces/ropejointdef#bodyb) -* [collideConnected](/api/interfaces/ropejointdef#optional-collideconnected) -* [localAnchorA](/api/interfaces/ropejointdef#localanchora) -* [localAnchorB](/api/interfaces/ropejointdef#localanchorb) -* [maxLength](/api/interfaces/ropejointdef#optional-maxlength) -* [userData](/api/interfaces/ropejointdef#optional-userdata) +- [`JointDef`](JointDef).[`RopeJointOpt`](RopeJointOpt) ## Properties -### bodyA - -• **bodyA**: *[Body](/api/classes/body)* +### bodyA -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyA](/api/interfaces/jointdef#bodya)* +> **bodyA**: [`Body`](../classes/Body) The first attached body. -___ +#### Inherited from -### bodyB +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) -• **bodyB**: *[Body](/api/classes/body)* +*** -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyB](/api/interfaces/jointdef#bodyb)* +### bodyB + +> **bodyB**: [`Body`](../classes/Body) The second attached body. -___ +#### Inherited from -### `Optional` collideConnected +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) -• **collideConnected**? : *boolean* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +### collideConnected? -*Overrides [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from + +[`RopeJointOpt`](RopeJointOpt).[`collideConnected`](RopeJointOpt#collideconnected) + +*** -### localAnchorA +### localAnchorA -• **localAnchorA**: *[Vec2Value](/api/interfaces/vec2value)* +> **localAnchorA**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyA's origin. -___ +*** -### localAnchorB +### localAnchorB -• **localAnchorB**: *[Vec2Value](/api/interfaces/vec2value)* +> **localAnchorB**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyB's origin. -___ +*** -### `Optional` maxLength +### maxLength? -• **maxLength**? : *number* - -*Inherited from [RopeJointOpt](/api/interfaces/ropejointopt).[maxLength](/api/interfaces/ropejointopt#optional-maxlength)* +> `optional` **maxLength**: `number` The maximum length of the rope. Warning: this must be larger than linearSlop or the joint will have no effect. -___ +#### Inherited from -### `Optional` userData +[`RopeJointOpt`](RopeJointOpt).[`maxLength`](RopeJointOpt#maxlength) -• **userData**? : *any* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +### userData? -*Overrides [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`RopeJointOpt`](RopeJointOpt).[`userData`](RopeJointOpt#userdata) diff --git a/docs/pages/api/interfaces/ropejointopt.md b/docs/pages/api/interfaces/ropejointopt.md index b2e02877..3e296eae 100644 --- a/docs/pages/api/interfaces/ropejointopt.md +++ b/docs/pages/api/interfaces/ropejointopt.md @@ -1,52 +1,47 @@ - # Interface: RopeJointOpt Rope joint definition. This requires two body anchor points and a maximum lengths. Note: by default the connected objects will not collide. see collideConnected in JointDef. -## Hierarchy - -* [JointOpt](/api/interfaces/jointopt) - - ↳ **RopeJointOpt** +## Extends - ↳ [RopeJointDef](/api/interfaces/ropejointdef) +- [`JointOpt`](JointOpt) -## Index +## Extended by -### Properties - -* [collideConnected](/api/interfaces/ropejointopt#optional-collideconnected) -* [maxLength](/api/interfaces/ropejointopt#optional-maxlength) -* [userData](/api/interfaces/ropejointopt#optional-userdata) +- [`RopeJointDef`](RopeJointDef) ## Properties -### `Optional` collideConnected - -• **collideConnected**? : *boolean* +### collideConnected? -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from -### `Optional` maxLength +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) -• **maxLength**? : *number* +*** + +### maxLength? + +> `optional` **maxLength**: `number` The maximum length of the rope. Warning: this must be larger than linearSlop or the joint will have no effect. -___ - -### `Optional` userData +*** -• **userData**? : *any* +### userData? -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/rotvalue.md b/docs/pages/api/interfaces/rotvalue.md index b8b66009..19fa295e 100644 --- a/docs/pages/api/interfaces/rotvalue.md +++ b/docs/pages/api/interfaces/rotvalue.md @@ -1,29 +1,17 @@ - # Interface: RotValue -## Hierarchy - -* **RotValue** - -## Index - -### Properties - -* [c](/api/interfaces/rotvalue#c) -* [s](/api/interfaces/rotvalue#s) - ## Properties -### c +### c -• **c**: *number* +> **c**: `number` cos(angle) -___ +*** -### s +### s -• **s**: *number* +> **s**: `number` sin(angle) diff --git a/docs/pages/api/interfaces/style.md b/docs/pages/api/interfaces/style.md index 4e3e8345..e800af94 100644 --- a/docs/pages/api/interfaces/style.md +++ b/docs/pages/api/interfaces/style.md @@ -1,32 +1,19 @@ - # Interface: Style -## Hierarchy - -* **Style** - -## Index - -### Properties - -* [fill](/api/interfaces/style#optional-fill) -* [lineWidth](/api/interfaces/style#optional-linewidth) -* [stroke](/api/interfaces/style#optional-stroke) - ## Properties -### `Optional` fill +### fill? -• **fill**? : *string* +> `optional` **fill**: `string` -___ +*** -### `Optional` lineWidth +### lineWidth? -• **lineWidth**? : *number* +> `optional` **lineWidth**: `number` -___ +*** -### `Optional` stroke +### stroke? -• **stroke**? : *string* +> `optional` **stroke**: `string` diff --git a/docs/pages/api/interfaces/vec2value.md b/docs/pages/api/interfaces/vec2value.md index 64578eb8..f0678ebb 100644 --- a/docs/pages/api/interfaces/vec2value.md +++ b/docs/pages/api/interfaces/vec2value.md @@ -1,25 +1,15 @@ - # Interface: Vec2Value -## Hierarchy - -* **Vec2Value** - -## Index - -### Properties - -* [x](/api/interfaces/vec2value#x) -* [y](/api/interfaces/vec2value#y) +2D vector ## Properties -### x +### x -• **x**: *number* +> **x**: `number` -___ +*** -### y +### y -• **y**: *number* +> **y**: `number` diff --git a/docs/pages/api/interfaces/vec3value.md b/docs/pages/api/interfaces/vec3value.md index 80f93747..8be81f45 100644 --- a/docs/pages/api/interfaces/vec3value.md +++ b/docs/pages/api/interfaces/vec3value.md @@ -1,32 +1,21 @@ - # Interface: Vec3Value -## Hierarchy - -* **Vec3Value** - -## Index - -### Properties - -* [x](/api/interfaces/vec3value#x) -* [y](/api/interfaces/vec3value#y) -* [z](/api/interfaces/vec3value#z) +3D vector ## Properties -### x +### x -• **x**: *number* +> **x**: `number` -___ +*** -### y +### y -• **y**: *number* +> **y**: `number` -___ +*** -### z +### z -• **z**: *number* +> **z**: `number` diff --git a/docs/pages/api/interfaces/weldjointdef.md b/docs/pages/api/interfaces/weldjointdef.md index e5dc74e8..e0468565 100644 --- a/docs/pages/api/interfaces/weldjointdef.md +++ b/docs/pages/api/interfaces/weldjointdef.md @@ -1,120 +1,111 @@ - # Interface: WeldJointDef Weld joint definition. You need to specify local anchor points where they are attached and the relative body angle. The position of the anchor points is important for computing the reaction torque. -## Hierarchy - - ↳ [JointDef](/api/interfaces/jointdef) - - ↳ [WeldJointOpt](/api/interfaces/weldjointopt) - - ↳ **WeldJointDef** +## Extends -## Index - -### Properties - -* [bodyA](/api/interfaces/weldjointdef#bodya) -* [bodyB](/api/interfaces/weldjointdef#bodyb) -* [collideConnected](/api/interfaces/weldjointdef#optional-collideconnected) -* [dampingRatio](/api/interfaces/weldjointdef#optional-dampingratio) -* [frequencyHz](/api/interfaces/weldjointdef#optional-frequencyhz) -* [localAnchorA](/api/interfaces/weldjointdef#localanchora) -* [localAnchorB](/api/interfaces/weldjointdef#localanchorb) -* [referenceAngle](/api/interfaces/weldjointdef#optional-referenceangle) -* [userData](/api/interfaces/weldjointdef#optional-userdata) +- [`JointDef`](JointDef).[`WeldJointOpt`](WeldJointOpt) ## Properties -### bodyA +### bodyA -• **bodyA**: *[Body](/api/classes/body)* - -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyA](/api/interfaces/jointdef#bodya)* +> **bodyA**: [`Body`](../classes/Body) The first attached body. -___ +#### Inherited from + +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) -### bodyB +*** -• **bodyB**: *[Body](/api/classes/body)* +### bodyB -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyB](/api/interfaces/jointdef#bodyb)* +> **bodyB**: [`Body`](../classes/Body) The second attached body. -___ +#### Inherited from -### `Optional` collideConnected +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) -• **collideConnected**? : *boolean* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +### collideConnected? -*Overrides [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from -### `Optional` dampingRatio +[`WeldJointOpt`](WeldJointOpt).[`collideConnected`](WeldJointOpt#collideconnected) -• **dampingRatio**? : *number* +*** -*Inherited from [WeldJointOpt](/api/interfaces/weldjointopt).[dampingRatio](/api/interfaces/weldjointopt#optional-dampingratio)* +### dampingRatio? + +> `optional` **dampingRatio**: `number` The damping ratio. 0 = no damping, 1 = critical damping. -___ +#### Inherited from + +[`WeldJointOpt`](WeldJointOpt).[`dampingRatio`](WeldJointOpt#dampingratio) -### `Optional` frequencyHz +*** -• **frequencyHz**? : *number* +### frequencyHz? -*Inherited from [WeldJointOpt](/api/interfaces/weldjointopt).[frequencyHz](/api/interfaces/weldjointopt#optional-frequencyhz)* +> `optional` **frequencyHz**: `number` The mass-spring-damper frequency in Hertz. Rotation only. Disable softness with a value of 0. -___ +#### Inherited from + +[`WeldJointOpt`](WeldJointOpt).[`frequencyHz`](WeldJointOpt#frequencyhz) + +*** -### localAnchorA +### localAnchorA -• **localAnchorA**: *[Vec2Value](/api/interfaces/vec2value)* +> **localAnchorA**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyA's origin. -___ +*** -### localAnchorB +### localAnchorB -• **localAnchorB**: *[Vec2Value](/api/interfaces/vec2value)* +> **localAnchorB**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyB's origin. -___ +*** -### `Optional` referenceAngle +### referenceAngle? -• **referenceAngle**? : *number* - -*Inherited from [WeldJointOpt](/api/interfaces/weldjointopt).[referenceAngle](/api/interfaces/weldjointopt#optional-referenceangle)* +> `optional` **referenceAngle**: `number` The bodyB angle minus bodyA angle in the reference state (radians). -___ +#### Inherited from -### `Optional` userData +[`WeldJointOpt`](WeldJointOpt).[`referenceAngle`](WeldJointOpt#referenceangle) -• **userData**? : *any* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +### userData? -*Overrides [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`WeldJointOpt`](WeldJointOpt).[`userData`](WeldJointOpt#userdata) diff --git a/docs/pages/api/interfaces/weldjointopt.md b/docs/pages/api/interfaces/weldjointopt.md index 6d2c92e2..0eee5e5a 100644 --- a/docs/pages/api/interfaces/weldjointopt.md +++ b/docs/pages/api/interfaces/weldjointopt.md @@ -1,70 +1,63 @@ - # Interface: WeldJointOpt Weld joint definition. You need to specify local anchor points where they are attached and the relative body angle. The position of the anchor points is important for computing the reaction torque. -## Hierarchy - -* [JointOpt](/api/interfaces/jointopt) - - ↳ **WeldJointOpt** +## Extends - ↳ [WeldJointDef](/api/interfaces/weldjointdef) +- [`JointOpt`](JointOpt) -## Index +## Extended by -### Properties - -* [collideConnected](/api/interfaces/weldjointopt#optional-collideconnected) -* [dampingRatio](/api/interfaces/weldjointopt#optional-dampingratio) -* [frequencyHz](/api/interfaces/weldjointopt#optional-frequencyhz) -* [referenceAngle](/api/interfaces/weldjointopt#optional-referenceangle) -* [userData](/api/interfaces/weldjointopt#optional-userdata) +- [`WeldJointDef`](WeldJointDef) ## Properties -### `Optional` collideConnected - -• **collideConnected**? : *boolean* +### collideConnected? -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from -### `Optional` dampingRatio +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) -• **dampingRatio**? : *number* +*** + +### dampingRatio? + +> `optional` **dampingRatio**: `number` The damping ratio. 0 = no damping, 1 = critical damping. -___ +*** -### `Optional` frequencyHz +### frequencyHz? -• **frequencyHz**? : *number* +> `optional` **frequencyHz**: `number` The mass-spring-damper frequency in Hertz. Rotation only. Disable softness with a value of 0. -___ +*** -### `Optional` referenceAngle +### referenceAngle? -• **referenceAngle**? : *number* +> `optional` **referenceAngle**: `number` The bodyB angle minus bodyA angle in the reference state (radians). -___ - -### `Optional` userData +*** -• **userData**? : *any* +### userData? -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/wheeljointdef.md b/docs/pages/api/interfaces/wheeljointdef.md index 3b144d95..e7052a3e 100644 --- a/docs/pages/api/interfaces/wheeljointdef.md +++ b/docs/pages/api/interfaces/wheeljointdef.md @@ -1,4 +1,3 @@ - # Interface: WheelJointDef Wheel joint definition. This requires defining a line of motion using an axis @@ -8,146 +7,139 @@ joint translation is zero when the local anchor points coincide in world space. Using local anchors and a local axis helps when saving and loading a game. -## Hierarchy - - ↳ [JointDef](/api/interfaces/jointdef) - - ↳ [WheelJointOpt](/api/interfaces/wheeljointopt) - - ↳ **WheelJointDef** - -## Index +## Extends -### Properties - -* [bodyA](/api/interfaces/wheeljointdef#bodya) -* [bodyB](/api/interfaces/wheeljointdef#bodyb) -* [collideConnected](/api/interfaces/wheeljointdef#optional-collideconnected) -* [dampingRatio](/api/interfaces/wheeljointdef#optional-dampingratio) -* [enableMotor](/api/interfaces/wheeljointdef#optional-enablemotor) -* [frequencyHz](/api/interfaces/wheeljointdef#optional-frequencyhz) -* [localAnchorA](/api/interfaces/wheeljointdef#localanchora) -* [localAnchorB](/api/interfaces/wheeljointdef#localanchorb) -* [localAxisA](/api/interfaces/wheeljointdef#localaxisa) -* [maxMotorTorque](/api/interfaces/wheeljointdef#optional-maxmotortorque) -* [motorSpeed](/api/interfaces/wheeljointdef#optional-motorspeed) -* [userData](/api/interfaces/wheeljointdef#optional-userdata) +- [`JointDef`](JointDef).[`WheelJointOpt`](WheelJointOpt) ## Properties -### bodyA - -• **bodyA**: *[Body](/api/classes/body)* +### bodyA -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyA](/api/interfaces/jointdef#bodya)* +> **bodyA**: [`Body`](../classes/Body) The first attached body. -___ +#### Inherited from -### bodyB +[`JointDef`](JointDef).[`bodyA`](JointDef#bodya) -• **bodyB**: *[Body](/api/classes/body)* +*** -*Inherited from [JointDef](/api/interfaces/jointdef).[bodyB](/api/interfaces/jointdef#bodyb)* +### bodyB + +> **bodyB**: [`Body`](../classes/Body) The second attached body. -___ +#### Inherited from -### `Optional` collideConnected +[`JointDef`](JointDef).[`bodyB`](JointDef#bodyb) -• **collideConnected**? : *boolean* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +### collideConnected? -*Overrides [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from + +[`WheelJointOpt`](WheelJointOpt).[`collideConnected`](WheelJointOpt#collideconnected) -### `Optional` dampingRatio +*** -• **dampingRatio**? : *number* +### dampingRatio? -*Inherited from [WheelJointOpt](/api/interfaces/wheeljointopt).[dampingRatio](/api/interfaces/wheeljointopt#optional-dampingratio)* +> `optional` **dampingRatio**: `number` Suspension damping ratio, one indicates critical damping. -___ +#### Inherited from -### `Optional` enableMotor +[`WheelJointOpt`](WheelJointOpt).[`dampingRatio`](WheelJointOpt#dampingratio) -• **enableMotor**? : *boolean* +*** -*Inherited from [WheelJointOpt](/api/interfaces/wheeljointopt).[enableMotor](/api/interfaces/wheeljointopt#optional-enablemotor)* +### enableMotor? + +> `optional` **enableMotor**: `boolean` Enable/disable the joint motor. -___ +#### Inherited from + +[`WheelJointOpt`](WheelJointOpt).[`enableMotor`](WheelJointOpt#enablemotor) -### `Optional` frequencyHz +*** -• **frequencyHz**? : *number* +### frequencyHz? -*Inherited from [WheelJointOpt](/api/interfaces/wheeljointopt).[frequencyHz](/api/interfaces/wheeljointopt#optional-frequencyhz)* +> `optional` **frequencyHz**: `number` Suspension frequency, zero indicates no suspension. -___ +#### Inherited from + +[`WheelJointOpt`](WheelJointOpt).[`frequencyHz`](WheelJointOpt#frequencyhz) + +*** -### localAnchorA +### localAnchorA -• **localAnchorA**: *[Vec2Value](/api/interfaces/vec2value)* +> **localAnchorA**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyA's origin. -___ +*** -### localAnchorB +### localAnchorB -• **localAnchorB**: *[Vec2Value](/api/interfaces/vec2value)* +> **localAnchorB**: [`Vec2Value`](Vec2Value) The local anchor point relative to bodyB's origin. -___ +*** -### localAxisA +### localAxisA -• **localAxisA**: *[Vec2Value](/api/interfaces/vec2value)* +> **localAxisA**: [`Vec2Value`](Vec2Value) The local translation axis in bodyA. -___ +*** -### `Optional` maxMotorTorque +### maxMotorTorque? -• **maxMotorTorque**? : *number* - -*Inherited from [WheelJointOpt](/api/interfaces/wheeljointopt).[maxMotorTorque](/api/interfaces/wheeljointopt#optional-maxmotortorque)* +> `optional` **maxMotorTorque**: `number` The maximum motor torque, usually in N-m. -___ +#### Inherited from + +[`WheelJointOpt`](WheelJointOpt).[`maxMotorTorque`](WheelJointOpt#maxmotortorque) -### `Optional` motorSpeed +*** -• **motorSpeed**? : *number* +### motorSpeed? -*Inherited from [WheelJointOpt](/api/interfaces/wheeljointopt).[motorSpeed](/api/interfaces/wheeljointopt#optional-motorspeed)* +> `optional` **motorSpeed**: `number` The desired motor speed in radians per second. -___ +#### Inherited from -### `Optional` userData +[`WheelJointOpt`](WheelJointOpt).[`motorSpeed`](WheelJointOpt#motorspeed) -• **userData**? : *any* +*** -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +### userData? -*Overrides [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`WheelJointOpt`](WheelJointOpt).[`userData`](WheelJointOpt#userdata) diff --git a/docs/pages/api/interfaces/wheeljointopt.md b/docs/pages/api/interfaces/wheeljointopt.md index 98aef442..c11cea39 100644 --- a/docs/pages/api/interfaces/wheeljointopt.md +++ b/docs/pages/api/interfaces/wheeljointopt.md @@ -1,4 +1,3 @@ - # Interface: WheelJointOpt Wheel joint definition. This requires defining a line of motion using an axis @@ -8,83 +7,75 @@ joint translation is zero when the local anchor points coincide in world space. Using local anchors and a local axis helps when saving and loading a game. -## Hierarchy - -* [JointOpt](/api/interfaces/jointopt) - - ↳ **WheelJointOpt** +## Extends - ↳ [WheelJointDef](/api/interfaces/wheeljointdef) +- [`JointOpt`](JointOpt) -## Index +## Extended by -### Properties - -* [collideConnected](/api/interfaces/wheeljointopt#optional-collideconnected) -* [dampingRatio](/api/interfaces/wheeljointopt#optional-dampingratio) -* [enableMotor](/api/interfaces/wheeljointopt#optional-enablemotor) -* [frequencyHz](/api/interfaces/wheeljointopt#optional-frequencyhz) -* [maxMotorTorque](/api/interfaces/wheeljointopt#optional-maxmotortorque) -* [motorSpeed](/api/interfaces/wheeljointopt#optional-motorspeed) -* [userData](/api/interfaces/wheeljointopt#optional-userdata) +- [`WheelJointDef`](WheelJointDef) ## Properties -### `Optional` collideConnected - -• **collideConnected**? : *boolean* +### collideConnected? -*Inherited from [JointOpt](/api/interfaces/jointopt).[collideConnected](/api/interfaces/jointopt#optional-collideconnected)* +> `optional` **collideConnected**: `boolean` Set this flag to true if the attached bodies should collide. -___ +#### Inherited from -### `Optional` dampingRatio +[`JointOpt`](JointOpt).[`collideConnected`](JointOpt#collideconnected) -• **dampingRatio**? : *number* +*** + +### dampingRatio? + +> `optional` **dampingRatio**: `number` Suspension damping ratio, one indicates critical damping. -___ +*** -### `Optional` enableMotor +### enableMotor? -• **enableMotor**? : *boolean* +> `optional` **enableMotor**: `boolean` Enable/disable the joint motor. -___ +*** -### `Optional` frequencyHz +### frequencyHz? -• **frequencyHz**? : *number* +> `optional` **frequencyHz**: `number` Suspension frequency, zero indicates no suspension. -___ +*** -### `Optional` maxMotorTorque +### maxMotorTorque? -• **maxMotorTorque**? : *number* +> `optional` **maxMotorTorque**: `number` The maximum motor torque, usually in N-m. -___ +*** -### `Optional` motorSpeed +### motorSpeed? -• **motorSpeed**? : *number* +> `optional` **motorSpeed**: `number` The desired motor speed in radians per second. -___ - -### `Optional` userData +*** -• **userData**? : *any* +### userData? -*Inherited from [JointOpt](/api/interfaces/jointopt).[userData](/api/interfaces/jointopt#optional-userdata)* +> `optional` **userData**: `any` Use this to attach application specific data to your joints. + +#### Inherited from + +[`JointOpt`](JointOpt).[`userData`](JointOpt#userdata) diff --git a/docs/pages/api/interfaces/worlddef.md b/docs/pages/api/interfaces/worlddef.md index fc74af39..77fc9b41 100644 --- a/docs/pages/api/interfaces/worlddef.md +++ b/docs/pages/api/interfaces/worlddef.md @@ -1,65 +1,49 @@ - # Interface: WorldDef -## Hierarchy - -* **WorldDef** - -## Index - -### Properties - -* [allowSleep](/api/interfaces/worlddef#optional-allowsleep) -* [blockSolve](/api/interfaces/worlddef#optional-blocksolve) -* [continuousPhysics](/api/interfaces/worlddef#optional-continuousphysics) -* [gravity](/api/interfaces/worlddef#optional-gravity) -* [subStepping](/api/interfaces/worlddef#optional-substepping) -* [warmStarting](/api/interfaces/worlddef#optional-warmstarting) - ## Properties -### `Optional` allowSleep +### allowSleep? -• **allowSleep**? : *boolean* +> `optional` **allowSleep**: `boolean` [default: true] -___ +*** -### `Optional` blockSolve +### blockSolve? -• **blockSolve**? : *boolean* +> `optional` **blockSolve**: `boolean` [default: true] -___ +*** -### `Optional` continuousPhysics +### continuousPhysics? -• **continuousPhysics**? : *boolean* +> `optional` **continuousPhysics**: `boolean` [default: true] -___ +*** -### `Optional` gravity +### gravity? -• **gravity**? : *[Vec2Value](/api/interfaces/vec2value)* +> `optional` **gravity**: [`Vec2Value`](Vec2Value) [default: { x : 0, y : 0}] -___ +*** -### `Optional` subStepping +### subStepping? -• **subStepping**? : *boolean* +> `optional` **subStepping**: `boolean` [default: false] -___ +*** -### `Optional` warmStarting +### warmStarting? -• **warmStarting**? : *boolean* +> `optional` **warmStarting**: `boolean` [default: true] diff --git a/docs/pages/api/type-aliases/ActiveKeys.md b/docs/pages/api/type-aliases/ActiveKeys.md new file mode 100644 index 00000000..66eaa632 --- /dev/null +++ b/docs/pages/api/type-aliases/ActiveKeys.md @@ -0,0 +1,3 @@ +# Type Alias: ActiveKeys + +> **ActiveKeys**: `{ [key in KEY]?: boolean }` diff --git a/docs/pages/api/type-aliases/BodyType.md b/docs/pages/api/type-aliases/BodyType.md new file mode 100644 index 00000000..3b9d467c --- /dev/null +++ b/docs/pages/api/type-aliases/BodyType.md @@ -0,0 +1,21 @@ +# Type Alias: BodyType + +> **BodyType**: `"static"` \| `"kinematic"` \| `"dynamic"` + +A static body does not move under simulation and behaves as if it has infinite mass. +Internally, zero is stored for the mass and the inverse mass. +Static bodies can be moved manually by the user. +A static body has zero velocity. +Static bodies do not collide with other static or kinematic bodies. + +A kinematic body moves under simulation according to its velocity. +Kinematic bodies do not respond to forces. +They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity. +A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass. +Kinematic bodies do not collide with other kinematic or static bodies. + +A dynamic body is fully simulated. +They can be moved manually by the user, but normally they move according to forces. +A dynamic body can collide with all body types. +A dynamic body always has finite, non-zero mass. +If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate. diff --git a/docs/pages/api/type-aliases/DynamicTreeQueryCallback.md b/docs/pages/api/type-aliases/DynamicTreeQueryCallback.md new file mode 100644 index 00000000..839bd899 --- /dev/null +++ b/docs/pages/api/type-aliases/DynamicTreeQueryCallback.md @@ -0,0 +1,11 @@ +# Type Alias: DynamicTreeQueryCallback() + +> **DynamicTreeQueryCallback**: (`nodeId`) => `boolean` + +## Parameters + +• **nodeId**: `number` + +## Returns + +`boolean` diff --git a/docs/pages/api/type-aliases/EvaluateFunction.md b/docs/pages/api/type-aliases/EvaluateFunction.md new file mode 100644 index 00000000..b087815b --- /dev/null +++ b/docs/pages/api/type-aliases/EvaluateFunction.md @@ -0,0 +1,23 @@ +# Type Alias: EvaluateFunction() + +> **EvaluateFunction**: (`manifold`, `xfA`, `fixtureA`, `indexA`, `xfB`, `fixtureB`, `indexB`) => `void` + +## Parameters + +• **manifold**: [`Manifold`](../classes/Manifold) + +• **xfA**: [`TransformValue`](TransformValue) + +• **fixtureA**: [`Fixture`](../classes/Fixture) + +• **indexA**: `number` + +• **xfB**: [`TransformValue`](TransformValue) + +• **fixtureB**: [`Fixture`](../classes/Fixture) + +• **indexB**: `number` + +## Returns + +`void` diff --git a/docs/pages/api/type-aliases/RayCastCallback.md b/docs/pages/api/type-aliases/RayCastCallback.md new file mode 100644 index 00000000..e47e4f10 --- /dev/null +++ b/docs/pages/api/type-aliases/RayCastCallback.md @@ -0,0 +1,13 @@ +# Type Alias: RayCastCallback() + +> **RayCastCallback**: (`subInput`, `id`) => `number` + +## Parameters + +• **subInput**: [`RayCastInput`](../interfaces/RayCastInput) + +• **id**: `number` + +## Returns + +`number` diff --git a/docs/pages/api/type-aliases/ShapeType.md b/docs/pages/api/type-aliases/ShapeType.md new file mode 100644 index 00000000..a7032550 --- /dev/null +++ b/docs/pages/api/type-aliases/ShapeType.md @@ -0,0 +1,3 @@ +# Type Alias: ShapeType + +> **ShapeType**: `"circle"` \| `"edge"` \| `"polygon"` \| `"chain"` diff --git a/docs/pages/api/type-aliases/TransformValue.md b/docs/pages/api/type-aliases/TransformValue.md new file mode 100644 index 00000000..03404ce1 --- /dev/null +++ b/docs/pages/api/type-aliases/TransformValue.md @@ -0,0 +1,13 @@ +# Type Alias: TransformValue + +> **TransformValue**: `object` + +## Type declaration + +### p + +> **p**: [`Vec2Value`](../interfaces/Vec2Value) + +### q + +> **q**: [`RotValue`](../interfaces/RotValue) diff --git a/docs/pages/api/type-aliases/WorldAABBQueryCallback.md b/docs/pages/api/type-aliases/WorldAABBQueryCallback.md new file mode 100644 index 00000000..f7516ffe --- /dev/null +++ b/docs/pages/api/type-aliases/WorldAABBQueryCallback.md @@ -0,0 +1,13 @@ +# Type Alias: WorldAABBQueryCallback() + +> **WorldAABBQueryCallback**: (`fixture`) => `boolean` + +Called for each fixture found in the query AABB. It may return `false` to terminate the query. + +## Parameters + +• **fixture**: [`Fixture`](../classes/Fixture) + +## Returns + +`boolean` diff --git a/docs/pages/api/type-aliases/WorldRayCastCallback.md b/docs/pages/api/type-aliases/WorldRayCastCallback.md new file mode 100644 index 00000000..869ffee1 --- /dev/null +++ b/docs/pages/api/type-aliases/WorldRayCastCallback.md @@ -0,0 +1,38 @@ +# Type Alias: WorldRayCastCallback() + +> **WorldRayCastCallback**: (`fixture`, `point`, `normal`, `fraction`) => `number` + +Callback function for ray casts, see [World.rayCast](../classes/World#raycast). + +Called for each fixture found in the query. +The returned value replaces the ray-cast input maxFraction. +You control how the ray cast proceeds by returning a numeric/float value. + +- `0` to terminate the ray cast +- `fraction` to clip the ray cast at current point +- `1` don't clip the ray and continue +- `-1` (or anything else) to continue + +## Parameters + +• **fixture**: [`Fixture`](../classes/Fixture) + +The fixture hit by the ray + +• **point**: [`Vec2`](../classes/Vec2) + +The point of initial intersection + +• **normal**: [`Vec2`](../classes/Vec2) + +The normal vector at the point of intersection + +• **fraction**: `number` + +The fraction along the ray at the point of intersection + +## Returns + +`number` + +A number to update the maxFraction diff --git a/docs/pages/api/variables/Box.md b/docs/pages/api/variables/Box.md new file mode 100644 index 00000000..711a7f84 --- /dev/null +++ b/docs/pages/api/variables/Box.md @@ -0,0 +1,3 @@ +# Variable: Box + +> `const` **Box**: *typeof* [`BoxShape`](../classes/BoxShape) = `BoxShape` diff --git a/docs/pages/api/variables/Chain.md b/docs/pages/api/variables/Chain.md new file mode 100644 index 00000000..b5224f7e --- /dev/null +++ b/docs/pages/api/variables/Chain.md @@ -0,0 +1,3 @@ +# Variable: Chain + +> `const` **Chain**: *typeof* [`ChainShape`](../classes/ChainShape) = `ChainShape` diff --git a/docs/pages/api/variables/Circle.md b/docs/pages/api/variables/Circle.md new file mode 100644 index 00000000..32c664d2 --- /dev/null +++ b/docs/pages/api/variables/Circle.md @@ -0,0 +1,3 @@ +# Variable: Circle + +> `const` **Circle**: *typeof* [`CircleShape`](../classes/CircleShape) = `CircleShape` diff --git a/docs/pages/api/variables/Edge.md b/docs/pages/api/variables/Edge.md new file mode 100644 index 00000000..ac5abf23 --- /dev/null +++ b/docs/pages/api/variables/Edge.md @@ -0,0 +1,3 @@ +# Variable: Edge + +> `const` **Edge**: *typeof* [`EdgeShape`](../classes/EdgeShape) = `EdgeShape` diff --git a/docs/pages/api/variables/Polygon.md b/docs/pages/api/variables/Polygon.md new file mode 100644 index 00000000..62c1136d --- /dev/null +++ b/docs/pages/api/variables/Polygon.md @@ -0,0 +1,3 @@ +# Variable: Polygon + +> `const` **Polygon**: *typeof* [`PolygonShape`](../classes/PolygonShape) = `PolygonShape` diff --git a/docs/pages/misc/api-reference.md b/docs/pages/misc/api-reference.md deleted file mode 100644 index e69de29b..00000000 diff --git a/package-lock.json b/package-lock.json index c3d8d757..dc084693 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,43 +1,33 @@ { "name": "planck", - "version": "1.0.9", + "version": "1.1.0-alpha", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "planck", - "version": "1.0.9", + "version": "1.1.0-alpha", "license": "MIT", "devDependencies": { - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-transform-runtime": "^7.13.9", - "@babel/preset-env": "^7.13.9", - "@rollup/plugin-commonjs": "^17.1.0", - "@rollup/plugin-node-resolve": "^11.2.0", - "@rollup/plugin-replace": "^2.4.1", "@types/chai": "^4.3.5", - "@types/estree": "^0.0.50", "@typescript-eslint/eslint-plugin": "^5.2.0", "@typescript-eslint/parser": "^5.2.0", - "@vitest/coverage-v8": "^0.34.1", + "@vitest/coverage-v8": "^2.1.5", "ajv": "^6.10.2", - "dtslint": "^3.6.9", "eslint": "^8.1.0", - "esm": "^3.2.25", - "express": "^4.17.1", - "handlebars": "^4.7.6", - "rollup": "^2.77.4", - "rollup-plugin-filesize": "^9.1.1", - "rollup-plugin-license": "^2.3.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-ts": "^1.3.10", + "replace-in-files-cli": "^3.0.0", + "rimraf": "^6.0.1", + "rollup-plugin-license": "^3.5.3", "sinon": "^15.2.0", - "tsd": "^0.28.1", - "typedoc": "^0.17.8", - "typedoc-plugin-markdown": "^2.3.1", - "typescript": "^4.0.0-beta", - "vite": "^4.4.7", - "vitest": "^0.34.1" + "terser": "^5.36.0", + "tsd": "^0.31.2", + "typedoc": "^0.26.11", + "typedoc-plugin-markdown": "^4.2.10", + "vite": "^5.4.11", + "vite-plugin-dts-bundle-generator": "^2.0.5", + "vite-plugin-typescript": "^1.0.4", + "vite-plugin-typescript-transform": "^1.3.1", + "vitest": "^2.1.5" }, "engines": { "node": ">=14.0" @@ -47,1784 +37,1717 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", - "dev": true - }, - "node_modules/@babel/core": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", - "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/generator": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", - "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, - "dependencies": { - "@babel/types": "^7.14.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.13" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", - "semver": "^6.3.0" + "@babel/types": "^7.26.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.1.tgz", - "integrity": "sha512-r8rsUahG4ywm0QpGcCrLaUSOuNAISR3IZCg4Fx05Ozq31aCUrQsTLH6KPxy0N5ULoQ4Sn9qjNdGNtbPWAC6hYg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13" + "bin": { + "parser": "bin/babel-parser.js" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "regexpu-core": "^4.7.1" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", - "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.13.0" + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.12.13" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.13.12" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.13.12" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", - "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.12.13" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.13.12" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.12.1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.12.13" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/parser": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", - "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", - "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz", - "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-class-static-block": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", - "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", - "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", - "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", - "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", + "node_modules/@eslint/eslintrc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", + "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.0.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", - "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "sprintf-js": "~1.0.2" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", - "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "type-fest": "^0.20.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", - "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-compilation-targets": "^7.13.8", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.13.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", - "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "engines": { + "node": ">=8" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", - "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "engines": { + "node": ">=10" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=10.10.0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-create-class-features-plugin": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, "engines": { - "node": ">=4" + "node": ">=12" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "engines": { + "node": ">=12" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", - "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "ansi-regex": "^6.0.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=8" } }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "node_modules/@jest/schemas": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", + "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@sinclair/typebox": "^0.27.8" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">= 8" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">= 8" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">= 8" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "optional": true, + "engines": { + "node": ">=14" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "node_modules/@rollup/plugin-typescript": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.1.tgz", + "integrity": "sha512-t7O653DpfB5MbFrqPe/VcKFFkvRuFNp9qId3xq4Eth5xlyymzxNpye2z8Hrl0RIMuXTSr5GGcFpkdlMeacUiFQ==", "dev": true, + "peer": true, "dependencies": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.1.tgz", - "integrity": "sha512-2mQXd0zBrwfp0O1moWIhPpEeTKDvxyHcnma3JATVP1l+CctWBuot6OJG8LQ4DnBj4ZZPSmlb/fm4mu47EOAnVA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "rollup": "^2.14.0||^3.0.0||^4.0.0", + "tslib": "*", + "typescript": ">=3.7.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", - "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "node_modules/@rollup/plugin-typescript/node_modules/@rollup/pluginutils": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", + "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", "dev": true, + "peer": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-split-export-declaration": "^7.12.13", - "globals": "^11.1.0" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", - "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "node_modules/@rollup/plugin-typescript/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "peer": true, + "engines": { + "node": ">=12" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz", + "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz", + "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz", + "integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz", + "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz", + "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz", + "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", - "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz", + "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz", + "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.13.12", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz", + "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz", + "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz", + "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz", + "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz", + "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==", + "cpu": [ + "s390x" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", - "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz", + "integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz", + "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz", + "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz", + "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz", - "integrity": "sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA==", + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz", + "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "semver": "^6.3.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "node_modules/@shikijs/core": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.23.1.tgz", + "integrity": "sha512-NuOVgwcHgVC6jBVH5V7iblziw6iQbWWHrj5IlZI3Fqu2yx9awH7OIQkXIcsHsUmY19ckwSgUMgrqExEyP5A0TA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@shikijs/engine-javascript": "1.23.1", + "@shikijs/engine-oniguruma": "1.23.1", + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.3" } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "node_modules/@shikijs/engine-javascript": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.23.1.tgz", + "integrity": "sha512-i/LdEwT5k3FVu07SiApRFwRcSJs5QM9+tod5vYCPig1Ywi8GR30zcujbxGQFJHwYD7A5BUqagi8o5KS+LEVgBg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "oniguruma-to-es": "0.4.1" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "node_modules/@shikijs/engine-oniguruma": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.23.1.tgz", + "integrity": "sha512-KQ+lgeJJ5m2ISbUZudLR1qHeH3MnSs2mjFg7bnencgs5jDVPeJ2NVDJ3N5ZHbcTsOIh0qIueyAJnwg7lg7kwXQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0" } }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "node_modules/@shikijs/types": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.23.1.tgz", + "integrity": "sha512-98A5hGyEhzzAgQh2dAeHKrWW4HfCMeoFER2z16p5eJ+vmPeF6lZ/elEne6/UCU551F/WqkopqRsr1l2Yu6+A0g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "node_modules/@shikijs/vscode-textmate": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.0.tgz", + "integrity": "sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==", + "dev": true + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "engines": { + "node": ">=18" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "type-detect": "4.0.8" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.1.tgz", - "integrity": "sha512-0M4yL1l7V4l+j/UHvxcdvNfLB9pPtIooHTbEhgD/6UGyh8Hy3Bm1Mj0buzjDXATCSz3JFibVdnoJZCrlUCanrQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.13.15", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-class-static-block": "^7.13.11", - "@babel/plugin-proposal-dynamic-import": "^7.13.8", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.13.8", - "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.13.8", - "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-private-property-in-object": "^7.14.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.12.13", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.14.1", - "@babel/plugin-transform-classes": "^7.13.0", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.17", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.14.0", - "@babel/plugin-transform-modules-commonjs": "^7.14.0", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.14.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.13.0", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.1", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "core-js-compat": "^3.9.0", - "semver": "^6.3.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "node_modules/@sinonjs/samsam": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", + "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@sinonjs/commons": "^2.0.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" } }, - "node_modules/@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.4" + "type-detect": "4.0.8" } }, - "node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", + "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", + "dev": true + }, + "node_modules/@tsd/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-saiCxzHRhUrRxQV2JhH580aQUZiKQUXI38FcAcikcfOomAil4G4lxT0RfrrKywoAYP/rqAdYXYmNRLppcd+hQQ==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "engines": { + "node": ">=14.17" } }, - "node_modules/@babel/traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", - "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "node_modules/@types/chai": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", + "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.14.0", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" + "@types/unist": "*" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "node_modules/@definitelytyped/header-parser": { - "version": "0.0.80", - "resolved": "https://registry.npmjs.org/@definitelytyped/header-parser/-/header-parser-0.0.80.tgz", - "integrity": "sha512-uRyBuKCmRuHokPhNS4PG8ME76fZZ/E4jTOFjwYLTYBqLqvAK2l0fkKp66+V64vbFgZtgJ1VTNFhu5NN6nnUsEA==", + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, "dependencies": { - "@definitelytyped/typescript-versions": "^0.0.80", - "@types/parsimmon": "^1.10.1", - "parsimmon": "^1.13.0" + "@types/unist": "*" } }, - "node_modules/@definitelytyped/typescript-versions": { - "version": "0.0.80", - "resolved": "https://registry.npmjs.org/@definitelytyped/typescript-versions/-/typescript-versions-0.0.80.tgz", - "integrity": "sha512-+cGCUVnKn0BJ2YmI8aBuHxMVmvtgn36zKcm7/en/QJhzu5wurdHy/uXIy0mHH1g1OMND5kRF9fH3D26iLFu7Sw==", + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, - "node_modules/@definitelytyped/utils": { - "version": "0.0.80", - "resolved": "https://registry.npmjs.org/@definitelytyped/utils/-/utils-0.0.80.tgz", - "integrity": "sha512-pX+eljmCXDbp/CtT1l1UVfllM1jIZw3rpDjXgW1BylSW8LFYsjs5pjBqOtOyed/Nmx92EKTzeG/Q4PUp0MyeSQ==", + "node_modules/@types/node": { + "version": "22.9.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.3.tgz", + "integrity": "sha512-F3u1fs/fce3FFk+DAxbxc78DF8x0cY09RRL8GnXLmkJ1jvx3TtPdWoTT5/NiYfI5ASqXBmfqJi9dZ3gxMx4lzw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@definitelytyped/typescript-versions": "^0.0.80", - "@types/node": "^14.14.35", - "charm": "^1.0.2", - "fs-extra": "^8.1.0", - "fstream": "^1.0.12", - "npm-registry-client": "^8.6.0", - "tar": "^2.2.2", - "tar-stream": "^2.1.4" + "undici-types": "~6.19.8" } }, - "node_modules/@definitelytyped/utils/node_modules/@types/node": { - "version": "14.14.44", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.44.tgz", - "integrity": "sha512-+gaugz6Oce6ZInfI/tK4Pq5wIIkJMEJUu92RB3Eu93mtj4wjjjz9EB5mLp5s1pSsLXdC/CPut/xF20ZzAQJbTA==", + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "node_modules/@definitelytyped/utils/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.2.0.tgz", + "integrity": "sha512-qQwg7sqYkBF4CIQSyRQyqsYvP+g/J0To9ZPVNJpfxfekl5RmdvQnFFTVVwpRtaUDFNvjfe/34TgY/dpc3MgNTw==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@typescript-eslint/experimental-utils": "5.2.0", + "@typescript-eslint/scope-manager": "5.2.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", - "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", - "cpu": [ - "arm" - ], + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true, - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=12" + "node": ">= 4" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", - "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", - "cpu": [ - "arm64" - ], + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", - "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "node_modules/@typescript-eslint/eslint-plugin/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", - "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", - "cpu": [ - "arm64" - ], + "node_modules/@typescript-eslint/eslint-plugin/node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "tslib": "^1.8.1" + }, "engines": { - "node": ">=12" + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", - "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", - "cpu": [ - "x64" - ], + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.2.0.tgz", + "integrity": "sha512-fWyT3Agf7n7HuZZRpvUYdFYbPk3iDCq6fgu3ulia4c7yxmPnwVBovdSOX7RL+k8u6hLbrXcdAehlWUVpGh6IEw==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.2.0", + "@typescript-eslint/types": "5.2.0", + "@typescript-eslint/typescript-estree": "5.2.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", - "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", - "cpu": [ - "arm64" - ], + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, "engines": { - "node": ">=12" + "node": ">=8.0.0" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", - "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", - "cpu": [ - "x64" - ], + "node_modules/@typescript-eslint/experimental-utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=12" + "node": ">=4.0" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", - "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", - "cpu": [ - "arm" - ], + "node_modules/@typescript-eslint/parser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.2.0.tgz", + "integrity": "sha512-Uyy4TjJBlh3NuA8/4yIQptyJb95Qz5PX//6p8n7zG0QnN4o3NF9Je3JHbVU7fxf5ncSXTmnvMtd/LDQWDk0YqA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@typescript-eslint/scope-manager": "5.2.0", + "@typescript-eslint/types": "5.2.0", + "@typescript-eslint/typescript-estree": "5.2.0", + "debug": "^4.3.2" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", - "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", - "cpu": [ - "arm64" - ], + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.2.0.tgz", + "integrity": "sha512-RW+wowZqPzQw8MUFltfKYZfKXqA2qgyi6oi/31J1zfXJRpOn6tCaZtd9b5u9ubnDG2n/EMvQLeZrsLNPpaUiFQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@typescript-eslint/types": "5.2.0", + "@typescript-eslint/visitor-keys": "5.2.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", - "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", - "cpu": [ - "ia32" - ], + "node_modules/@typescript-eslint/types": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.2.0.tgz", + "integrity": "sha512-cTk6x08qqosps6sPyP2j7NxyFPlCNsJwSDasqPNjEQ8JMD5xxj2NHxcLin5AJQ8pAVwpQ8BMI3bTxR0zxmK9qQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", - "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", - "cpu": [ - "loong64" - ], + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.2.0.tgz", + "integrity": "sha512-RsdXq2XmVgKbm9nLsE3mjNUM7BTr/K4DYR9WfFVMUuozHWtH5gMpiNZmtrMG8GR385EOSQ3kC9HiEMJWimxd/g==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@typescript-eslint/types": "5.2.0", + "@typescript-eslint/visitor-keys": "5.2.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", - "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", - "cpu": [ - "mips64el" - ], + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", - "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "node_modules/@typescript-eslint/typescript-estree/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", - "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", - "cpu": [ - "riscv64" - ], + "node_modules/@typescript-eslint/typescript-estree/node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "tslib": "^1.8.1" + }, "engines": { - "node": ">=12" + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", - "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", - "cpu": [ - "s390x" - ], + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.2.0.tgz", + "integrity": "sha512-Nk7HizaXWWCUBfLA/rPNKMzXzWS8Wg9qHMuGtT+v2/YpPij4nVXrVJc24N/r5WrrmqK31jCrZxeHqIgqRzs0Xg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@typescript-eslint/types": "5.2.0", + "eslint-visitor-keys": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", - "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", - "cpu": [ - "x64" - ], + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitest/coverage-v8": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.5.tgz", + "integrity": "sha512-/RoopB7XGW7UEkUndRXF87A9CwkoZAJW01pj8/3pgmDVsjMH2IKy6H1A38po9tmUlwhSyYs0az82rbKd9Yaynw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.7", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", + "std-env": "^3.8.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "2.1.5", + "vitest": "2.1.5" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", - "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", - "cpu": [ - "x64" - ], + "node_modules/@vitest/coverage-v8/node_modules/magic-string": { + "version": "0.30.13", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz", + "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", - "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", - "cpu": [ - "x64" - ], + "node_modules/@vitest/expect": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.5.tgz", + "integrity": "sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@vitest/spy": "2.1.5", + "@vitest/utils": "2.1.5", + "chai": "^5.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", - "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", - "cpu": [ - "x64" - ], + "node_modules/@vitest/pretty-format": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.5.tgz", + "integrity": "sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==", "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", - "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", - "cpu": [ - "arm64" - ], + "node_modules/@vitest/runner": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.5.tgz", + "integrity": "sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@vitest/utils": "2.1.5", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", - "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", - "cpu": [ - "ia32" - ], + "node_modules/@vitest/snapshot": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.5.tgz", + "integrity": "sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@vitest/pretty-format": "2.1.5", + "magic-string": "^0.30.12", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", - "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", - "cpu": [ - "x64" - ], + "node_modules/@vitest/snapshot/node_modules/magic-string": { + "version": "0.30.13", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz", + "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", - "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", + "node_modules/@vitest/spy": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.5.tgz", + "integrity": "sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==", "dev": true, "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.0.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "tinyspy": "^3.0.2" }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@vitest/utils": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.5.tgz", + "integrity": "sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==", "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "@vitest/pretty-format": "2.1.5", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.4.0" } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, "engines": { "node": ">=8" }, @@ -1832,10 +1755,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { "node": ">=10" @@ -1844,1207 +1767,981 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", - "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@mdn/browser-compat-data": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.3.3.tgz", - "integrity": "sha512-ikDzSgs2SbBtKVXCNfU6GzVACpUuojZS8Vu/VhM1EwtWvtfGJsrRETLbV231ODMvWtfKJThzrsk2Hp88fv9+gA==", - "dev": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "fill-range": "^7.0.1" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/git": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.0.9.tgz", - "integrity": "sha512-hTMbMryvOqGLwnmMBKs5usbPsJtyEsMsgXwJbmNrsEuQQh1LAIMDU77IoOrwkCg+NgQWl+ySlarJASwM3SutCA==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" + "node": ">=6" } }, - "node_modules/@npmcli/git/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/@npmcli/git/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "dev": true, - "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" - }, - "engines": { - "node": ">= 10" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "node_modules/chai": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@npmcli/node-gyp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", - "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==", - "dev": true + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, - "dependencies": { - "infer-owner": "^1.0.4" + "engines": { + "node": ">= 16" } }, - "node_modules/@npmcli/run-script": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.5.tgz", - "integrity": "sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A==", + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "infer-owner": "^1.0.4", - "node-gyp": "^7.1.0", - "read-package-json-fast": "^2.0.1" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@rollup/plugin-commonjs": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", - "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commenting": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/commenting/-/commenting-1.1.0.tgz", + "integrity": "sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^2.30.0" + "node": ">= 8" } }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" + "ms": "^2.1.3" }, "engines": { - "node": ">= 10.0.0" + "node": ">=6.0" }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "node": ">=0.10.0" } }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true, - "dependencies": { - "type-detect": "4.0.8" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" + "engines": { + "node": ">=6" } }, - "node_modules/@sinonjs/samsam": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", - "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, - "dependencies": { - "@sinonjs/commons": "^2.0.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" + "engines": { + "node": ">=6" } }, - "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, "dependencies": { - "type-detect": "4.0.8" + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", - "dev": true - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "node_modules/diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", "dev": true, "engines": { - "node": ">= 6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@tsd/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-YQi2lvZSI+xidKeUjlbv6b6Zw7qB3aXHw5oGJLs5OOGAEqKIOvz5UIAkWyg0bJbkSUWPBEtaOHpVxU4EYBO1Jg==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { - "@babel/types": "^7.0.0" + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "node_modules/dts-bundle-generator": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/dts-bundle-generator/-/dts-bundle-generator-9.5.1.tgz", + "integrity": "sha512-DxpJOb2FNnEyOzMkG11sxO2dmxPjthoVWxfKqWYJ/bI/rT1rvTMktF5EKjAYrRZu6Z6t3NhOUZ0sZ5ZXevOfbA==", "dev": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "typescript": ">=5.0.2", + "yargs": "^17.6.0" + }, + "bin": { + "dts-bundle-generator": "dist/bin/dts-bundle-generator.js" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "node_modules/dts-bundle-generator/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" + "engines": { + "node": ">=8" } }, - "node_modules/@types/chai": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", - "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", - "dev": true - }, - "node_modules/@types/chai-subset": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", - "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "node_modules/dts-bundle-generator/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { - "@types/chai": "*" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@types/eslint": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", - "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.2.tgz", - "integrity": "sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/object-path": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@types/object-path/-/object-path-0.11.0.tgz", - "integrity": "sha512-/tuN8jDbOXcPk+VzEVZzzAgw1Byz7s/itb2YI10qkSyy6nykJH02DuhfrflxVdAdE7AZ91h5X6Cn0dmVdFw2TQ==", - "dev": true - }, - "node_modules/@types/parsimmon": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@types/parsimmon/-/parsimmon-1.10.6.tgz", - "integrity": "sha512-FwAQwMRbkhx0J6YELkwIpciVzCcgEqXEbIrIn3a2P5d3kGEHQ3wVhlN3YdVepYP+bZzCYO6OjmD4o9TGOZ40rA==", + "node_modules/dts-bundle-generator/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "node_modules/dts-bundle-generator/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">=8" } }, - "node_modules/@types/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-iotVxtCCsPLRAvxMFFgxL8HD2l4mAZ2Oin7/VJ2ooWO0VOK4EGOGmZWZn1uCq7RofR3I/1IOSjCHlFT71eVK0Q==", - "dev": true - }, - "node_modules/@types/ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-PsPx0RLbo2Un8+ff2buzYJnZjzwhD3jQHPOG2PtVIeOhkRDddMcKU8vJtHpzzfLB95dkUi0qAkfLg2l2Fd0yrQ==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.2.0.tgz", - "integrity": "sha512-qQwg7sqYkBF4CIQSyRQyqsYvP+g/J0To9ZPVNJpfxfekl5RmdvQnFFTVVwpRtaUDFNvjfe/34TgY/dpc3MgNTw==", + "node_modules/dts-bundle-generator/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "@typescript-eslint/experimental-utils": "5.2.0", - "@typescript-eslint/scope-manager": "5.2.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=8" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "node_modules/dts-bundle-generator/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/dts-bundle-generator/node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { - "semver": "bin/semver.js" + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=10" + "node": ">=14.17" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/dts-bundle-generator/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "node": ">=10" } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.2.0.tgz", - "integrity": "sha512-fWyT3Agf7n7HuZZRpvUYdFYbPk3iDCq6fgu3ulia4c7yxmPnwVBovdSOX7RL+k8u6hLbrXcdAehlWUVpGh6IEw==", + "node_modules/dts-bundle-generator/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.2.0", - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/typescript-estree": "5.2.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" + "node": ">=12" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/dts-bundle-generator/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, "engines": { - "node": ">=8.0.0" + "node": ">=12" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", + "dev": true + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, "engines": { - "node": ">=4.0" + "node": ">=8.6" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.2.0.tgz", - "integrity": "sha512-Uyy4TjJBlh3NuA8/4yIQptyJb95Qz5PX//6p8n7zG0QnN4o3NF9Je3JHbVU7fxf5ncSXTmnvMtd/LDQWDk0YqA==", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.2.0", - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/typescript-estree": "5.2.0", - "debug": "^4.3.2" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=0.12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.2.0.tgz", - "integrity": "sha512-RW+wowZqPzQw8MUFltfKYZfKXqA2qgyi6oi/31J1zfXJRpOn6tCaZtd9b5u9ubnDG2n/EMvQLeZrsLNPpaUiFQ==", + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/visitor-keys": "5.2.0" + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.2.0.tgz", - "integrity": "sha512-cTk6x08qqosps6sPyP2j7NxyFPlCNsJwSDasqPNjEQ8JMD5xxj2NHxcLin5AJQ8pAVwpQ8BMI3bTxR0zxmK9qQ==", + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.2.0.tgz", - "integrity": "sha512-RsdXq2XmVgKbm9nLsE3mjNUM7BTr/K4DYR9WfFVMUuozHWtH5gMpiNZmtrMG8GR385EOSQ3kC9HiEMJWimxd/g==", + "node_modules/eslint": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz", + "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/visitor-keys": "5.2.0", + "@eslint/eslintrc": "^1.0.3", + "@humanwhocodes/config-array": "^0.6.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^6.0.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "bin": { - "semver": "bin/semver.js" + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/eslint-formatter-pretty": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-4.1.0.tgz", + "integrity": "sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==", "dev": true, "dependencies": { - "tslib": "^1.8.1" + "@types/eslint": "^7.2.13", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "eslint-rule-docs": "^1.1.5", + "log-symbols": "^4.0.0", + "plur": "^4.0.0", + "string-width": "^4.2.0", + "supports-hyperlinks": "^2.0.0" }, "engines": { - "node": ">= 6" + "node": ">=10" }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.2.0.tgz", - "integrity": "sha512-Nk7HizaXWWCUBfLA/rPNKMzXzWS8Wg9qHMuGtT+v2/YpPij4nVXrVJc24N/r5WrrmqK31jCrZxeHqIgqRzs0Xg==", + "node_modules/eslint-formatter-pretty/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.2.0", - "eslint-visitor-keys": "^3.0.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=8" } }, - "node_modules/@vitest/coverage-v8": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.1.tgz", - "integrity": "sha512-lRgUwjTMr8idXEbUPSNH4jjRZJXJCVY3BqUa+LDXyJVe3pldxYMn/r0HMqatKUGTp0Kyf1j5LfFoY6kRqRp7jw==", + "node_modules/eslint-formatter-pretty/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@bcoe/v8-coverage": "^0.2.3", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.1.5", - "magic-string": "^0.30.1", - "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.1.0" + "color-convert": "^2.0.1" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=8" }, - "peerDependencies": { - "vitest": ">=0.32.0 <1" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@vitest/coverage-v8/node_modules/magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", + "node_modules/eslint-formatter-pretty/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/@vitest/expect": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.1.tgz", - "integrity": "sha512-q2CD8+XIsQ+tHwypnoCk8Mnv5e6afLFvinVGCq3/BOT4kQdVQmY6rRfyKkwcg635lbliLPqbunXZr+L1ssUWiQ==", - "dev": true, - "dependencies": { - "@vitest/spy": "0.34.1", - "@vitest/utils": "0.34.1", - "chai": "^4.3.7" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@vitest/runner": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.1.tgz", - "integrity": "sha512-YfQMpYzDsYB7yqgmlxZ06NI4LurHWfrH7Wy3Pvf/z/vwUSgq1zLAb1lWcItCzQG+NVox+VvzlKQrYEXb47645g==", + "node_modules/eslint-formatter-pretty/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "@vitest/utils": "0.34.1", - "p-limit": "^4.0.0", - "pathe": "^1.1.1" + "color-name": "~1.1.4" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@vitest/runner/node_modules/p-limit": { + "node_modules/eslint-formatter-pretty/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint-formatter-pretty/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/eslint-formatter-pretty/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/@vitest/runner/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "node_modules/eslint-formatter-pretty/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/@vitest/snapshot": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.1.tgz", - "integrity": "sha512-0O9LfLU0114OqdF8lENlrLsnn024Tb1CsS9UwG0YMWY2oGTQfPtkW+B/7ieyv0X9R2Oijhi3caB1xgGgEgclSQ==", + "node_modules/eslint-formatter-pretty/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "magic-string": "^0.30.1", - "pathe": "^1.1.1", - "pretty-format": "^29.5.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=8" } }, - "node_modules/@vitest/snapshot/node_modules/magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", + "node_modules/eslint-formatter-pretty/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@vitest/spy": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.1.tgz", - "integrity": "sha512-UT4WcI3EAPUNO8n6y9QoEqynGGEPmmRxC+cLzneFFXpmacivjHZsNbiKD88KUScv5DCHVDgdBsLD7O7s1enFcQ==", + "node_modules/eslint-formatter-pretty/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "tinyspy": "^2.1.1" + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=8" } }, - "node_modules/@vitest/utils": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.1.tgz", - "integrity": "sha512-/ql9dsFi4iuEbiNcjNHQWXBum7aL8pyhxvfnD9gNtbjR9fUKAjxhj4AA3yfLXg6gJpMGGecvtF8Au2G9y3q47Q==", - "dev": true, - "dependencies": { - "diff-sequences": "^29.4.3", - "loupe": "^2.3.6", - "pretty-format": "^29.5.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } + "node_modules/eslint-rule-docs": { + "version": "1.1.231", + "resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.231.tgz", + "integrity": "sha512-egHz9A1WG7b8CS0x1P6P/Rj5FqZOjray/VjpJa14tMZalfRKvpE2ONJ3plCM7+PcinmU4tcmbPLv0VtwzSdLVA==", + "dev": true }, - "node_modules/@wessberg/browserslist-generator": { - "version": "1.0.47", - "resolved": "https://registry.npmjs.org/@wessberg/browserslist-generator/-/browserslist-generator-1.0.47.tgz", - "integrity": "sha512-2xNrz5LoRgdtrRphXBwt/bLVstuqB939rAIcHs8qEs1wokLq+hol9fhOIaxtJsn5LeEcBBFLFxtGOr9PbZd5HA==", + "node_modules/eslint-scope": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", "dev": true, "dependencies": { - "@mdn/browser-compat-data": "^3.2.4", - "@types/object-path": "^0.11.0", - "@types/semver": "^7.3.4", - "@types/ua-parser-js": "^0.7.35", - "browserslist": "4.16.3", - "caniuse-lite": "^1.0.30001208", - "object-path": "^0.11.5", - "semver": "^7.3.5", - "ua-parser-js": "^0.7.27" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/wessberg/browserslist-generator?sponsor=1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@wessberg/browserslist-generator/node_modules/browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", - "escalade": "^3.1.1", - "node-releases": "^1.1.70" - }, - "bin": { - "browserslist": "cli.js" + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, - "node_modules/@wessberg/browserslist-generator/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, "engines": { "node": ">=10" } }, - "node_modules/@wessberg/stringutil": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@wessberg/stringutil/-/stringutil-1.0.19.tgz", - "integrity": "sha512-9AZHVXWlpN8Cn9k5BC/O0Dzb9E9xfEMXzYrNunwvkUTvuK7xgQPVRZpLo+jWCOZ5r8oBa8NIrHuPEu1hzbb6bg==", - "dev": true, + "node_modules/eslint-visitor-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@wessberg/ts-clone-node": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@wessberg/ts-clone-node/-/ts-clone-node-0.3.19.tgz", - "integrity": "sha512-BnJcU0ZwHxa5runiEkHzMZ6/ydxz+YYqBHOGQtf3eoxSZu2iWMPPaUfCum0O1/Ey5dqrrptUh+HmyMTzHPfdPA==", + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { - "node": ">=10.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/wessberg/ts-clone-node?sponsor=1" - }, - "peerDependencies": { - "typescript": "^3.x || ^4.x" + "node": ">=8" } }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=0.4.0" + "node": ">=7.0.0" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "dependencies": { - "debug": "4" - }, "engines": { - "node": ">= 6.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 8.0.0" + "node": ">=10.13.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/eslint/node_modules/globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, - "dependencies": { - "string-width": "^3.0.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/eslint/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "type-fest": "^0.21.3" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { "node": ">=10" @@ -3053,360 +2750,322 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "node_modules/espree": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", + "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", "dev": true, + "dependencies": { + "acorn": "^8.5.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true, + "estraverse": "^5.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.10" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=8" + "node": ">=4.0" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4.0" } }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } + "peer": true }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "engines": { - "node": ">=0.8" + "node": ">=0.10.0" } }, - "node_modules/assertion-error": { + "node_modules/expect-type": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", "dev": true, "engines": { - "node": "*" + "node": ">=12.0.0" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=8.6.0" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "node_modules/fast-glob/node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, "engines": { - "node": "*" + "node": ">=8.6" } }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true }, - "node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=0.10.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { - "object.assign": "^4.1.0" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", - "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.0", - "semver": "^6.1.1" + "glob": "^7.1.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", - "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", + "node_modules/flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.0", - "core-js-compat": "^3.9.1" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", - "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.0" + "engines": { + "node": ">=14" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, "engines": { - "node": ">= 6" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { - "inherits": "~2.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "0.4 || >=0.5.8" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "is-glob": "^4.0.1" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" + "node": ">= 6" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/boxen": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", - "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.0", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" }, "engines": { "node": ">=10" @@ -3415,518 +3074,534 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "node_modules/globby/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 4" } }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/boxen/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "node_modules/hast-util-to-html": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.3.tgz", + "integrity": "sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/boxen/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@types/hast": "^3.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/boxen/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/boxen/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/boxen/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", "dev": true, - "engines": { - "node": ">=8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/boxen/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 4" } }, - "node_modules/boxen/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/boxen/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=0.8.19" } }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/irregular-plurals": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz", + "integrity": "sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==", "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, "engines": { "node": ">=8" } }, - "node_modules/brotli-size": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-4.0.0.tgz", - "integrity": "sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "dependencies": { - "duplexer": "0.1.1" + "hasown": "^2.0.2" }, "engines": { - "node": ">= 10.16.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "node": ">=0.10.0" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } }, - "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/cacache": { - "version": "15.0.6", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.6.tgz", - "integrity": "sha512-g1WYDMct/jzW+JdWEyjaX2zoBkZ6ZT9VpOyp2I/VMtDsNLffNat3kqPFfi1eDRSK9/SuKGyORDHcQMcPF8sQ/w==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/cacache/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "aggregate-error": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/cacache/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, "dependencies": { - "minipass": "^3.1.1" + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/cacache/node_modules/tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/jackspeak": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz", + "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/jest-diff": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", + "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.2" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001223", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001223.tgz", - "integrity": "sha512-k/RYs6zc/fjbxTjaWZemeSmOjO0JJV+KguOBA3NwPup8uzxM1cMhR2BD9XmO86GuqaqTCO8CgkgH9Rz//vdDiA==", - "dev": true - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/charm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", - "integrity": "sha1-it02cVOm2aWBMxBSxAkJkdqZXjU=", + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "inherits": "^2.0.1" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "node_modules/jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "dev": true, "engines": { - "node": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "uc.micro": "^2.0.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cliui/node_modules/ansi-styles": { + "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -3941,7 +3616,23 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cliui/node_modules/color-convert": { + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -3953,2688 +3644,2568 @@ "node": ">=7.0.0" } }, - "node_modules/cliui/node_modules/color-name": { + "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/cliui/node_modules/strip-ansi": { + "node_modules/loupe": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true + }, + "node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "engines": { - "node": ">=0.1.90" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, "dependencies": { - "delayed-stream": "~1.0.0" + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" }, - "engines": { - "node": ">= 0.8" + "bin": { + "markdown-it": "bin/markdown-it.mjs" } }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/commenting": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/commenting/-/commenting-1.1.0.tgz", - "integrity": "sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", "dev": true, - "engines": [ - "node >= 0.8" - ], "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", "dev": true }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, "dependencies": { - "safe-buffer": "5.1.2" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=10" } }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.1" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "node_modules/meow/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">= 0.6" + "node": ">=10" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "node_modules/core-js-compat": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", - "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "semver": "7.0.0" + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">= 8" } }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } - } + ] }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "node_modules/micromark-util-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "node_modules/minimist-options/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, - "dependencies": { - "object-keys": "^1.0.12" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/nise": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz", + "integrity": "sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==", "dev": true, - "engines": { - "node": ">=0.4.0" + "dependencies": { + "@sinonjs/commons": "^2.0.0", + "@sinonjs/fake-timers": "^10.0.2", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "node_modules/nise/node_modules/@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, - "engines": { - "node": ">= 0.6" + "dependencies": { + "type-detect": "4.0.8" } }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "node_modules/nise/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "node_modules/nise/node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "dependencies": { + "isarray": "0.0.1" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" + "bin": { + "semver": "bin/semver" } }, - "node_modules/dts-critic": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/dts-critic/-/dts-critic-3.3.6.tgz", - "integrity": "sha512-teL396KXkhkLsHt9lOG1NYemAv184uiOIQufrvhu1g+83ylUN8QjGZat784Ke4p2A4k0XHStD8NilbwYDGnNRA==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "dependencies": { - "@definitelytyped/header-parser": "latest", - "command-exists": "^1.2.8", - "rimraf": "^3.0.2", - "semver": "^6.2.0", - "tmp": "^0.2.1", - "yargs": "^15.3.1" - }, "engines": { - "node": ">=10.17.0" - }, - "peerDependencies": { - "typescript": "*" + "node": ">=0.10.0" } }, - "node_modules/dtslint": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/dtslint/-/dtslint-3.7.0.tgz", - "integrity": "sha512-kVFV+zI2zwCUuwjLl2XVuIoSeLIqba6SmFlBKicwrlk1v0If+x6/cNm7UljSsqN5fJM/K2JJfd9NPPDVBXjjuA==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "dependencies": { - "@definitelytyped/header-parser": "latest", - "@definitelytyped/typescript-versions": "latest", - "@definitelytyped/utils": "latest", - "dts-critic": "latest", - "fs-extra": "^6.0.1", - "json-stable-stringify": "^1.0.1", - "strip-json-comments": "^2.0.1", - "tslint": "5.14.0", - "yargs": "^15.1.0" - }, - "bin": { - "dtslint": "bin/index.js" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "typescript": ">= 3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.7.0-dev || >= 3.8.0-dev || >= 3.9.0-dev || >= 4.0.0-dev" + "wrappy": "1" } }, - "node_modules/dtslint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/oniguruma-to-es": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-0.4.1.tgz", + "integrity": "sha512-rNcEohFz095QKGRovP/yqPIKc+nP+Sjs4YTHMv33nMePGKrq/r2eu9Yh4646M5XluGJsUnmwoXuiXE69KDs+fQ==", "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "emoji-regex-xs": "^1.0.0", + "regex": "^5.0.0", + "regex-recursion": "^4.2.1" } }, - "node_modules/dtslint/node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/dtslint/node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { - "node": ">=0.3.1" + "node": ">=6" } }, - "node_modules/dtslint/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "node_modules/package-name-regex": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/package-name-regex/-/package-name-regex-2.0.6.tgz", + "integrity": "sha512-gFL35q7kbE/zBaPA3UKhp2vSzcPYx2ecbYuwv1ucE9Il6IIgBDweBlH8D68UFGZic2MkllKa2KHCfC1IQBQUYA==", "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "engines": { + "node": ">=12" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "url": "https://github.com/sponsors/dword-design" } }, - "node_modules/dtslint/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "bin": { - "semver": "bin/semver" + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/dtslint/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/dtslint/node_modules/tslint": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.14.0.tgz", - "integrity": "sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "dependencies": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=4.8.0" + "node": ">=8" }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "engines": { + "node": ">=8" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.3.727", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz", - "integrity": "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" + "engines": { + "node": ">=8" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", "dev": true, - "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=0.10.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", + "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", "dev": true, - "dependencies": { - "once": "^1.4.0" + "engines": { + "node": "20 || >=22" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, "engines": { - "node": ">=8.6" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/esbuild": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", - "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.17", - "@esbuild/android-arm64": "0.18.17", - "@esbuild/android-x64": "0.18.17", - "@esbuild/darwin-arm64": "0.18.17", - "@esbuild/darwin-x64": "0.18.17", - "@esbuild/freebsd-arm64": "0.18.17", - "@esbuild/freebsd-x64": "0.18.17", - "@esbuild/linux-arm": "0.18.17", - "@esbuild/linux-arm64": "0.18.17", - "@esbuild/linux-ia32": "0.18.17", - "@esbuild/linux-loong64": "0.18.17", - "@esbuild/linux-mips64el": "0.18.17", - "@esbuild/linux-ppc64": "0.18.17", - "@esbuild/linux-riscv64": "0.18.17", - "@esbuild/linux-s390x": "0.18.17", - "@esbuild/linux-x64": "0.18.17", - "@esbuild/netbsd-x64": "0.18.17", - "@esbuild/openbsd-x64": "0.18.17", - "@esbuild/sunos-x64": "0.18.17", - "@esbuild/win32-arm64": "0.18.17", - "@esbuild/win32-ia32": "0.18.17", - "@esbuild/win32-x64": "0.18.17" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 14.16" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "node_modules/picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/eslint": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz", - "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==", + "node_modules/plur": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", + "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.0.3", - "@humanwhocodes/config-array": "^0.6.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^6.0.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" + "irregular-plurals": "^3.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-formatter-pretty": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-4.1.0.tgz", - "integrity": "sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==", + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "@types/eslint": "^7.2.13", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "eslint-rule-docs": "^1.1.5", - "log-symbols": "^4.0.0", - "plur": "^4.0.0", - "string-width": "^4.2.0", - "supports-hyperlinks": "^2.0.0" + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10 || ^12 || >=14" } }, - "node_modules/eslint-formatter-pretty/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/eslint-formatter-pretty/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/pretty-format": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/eslint-formatter-pretty/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint-formatter-pretty/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=0.4.0" } }, - "node_modules/eslint-formatter-pretty/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint-formatter-pretty/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/eslint-formatter-pretty/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", "dev": true, - "engines": { - "node": ">=8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/eslint-formatter-pretty/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/eslint-formatter-pretty/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/eslint-formatter-pretty/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { "node": ">=8" } }, - "node_modules/eslint-formatter-pretty/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { "node": ">=8" } }, - "node_modules/eslint-rule-docs": { - "version": "1.1.231", - "resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.231.tgz", - "integrity": "sha512-egHz9A1WG7b8CS0x1P6P/Rj5FqZOjray/VjpJa14tMZalfRKvpE2ONJ3plCM7+PcinmU4tcmbPLv0VtwzSdLVA==", - "dev": true - }, - "node_modules/eslint-scope": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", - "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" }, - "peerDependencies": { - "eslint": ">=5" + "engines": { + "node": ">=8" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=10" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/regex": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/regex/-/regex-5.0.2.tgz", + "integrity": "sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "regex-utilities": "^2.3.0" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/regex-recursion": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-4.2.1.tgz", + "integrity": "sha512-QHNZyZAeKdndD1G3bKAbBEKOSSK4KOHQrAJ01N1LJeb0SoH4DJIeFhp0uUpETgONifS4+P3sOgoA1dhzgrQvhA==", "dev": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "regex-utilities": "^2.3.0" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", "dev": true }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/replace-in-files-cli": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/replace-in-files-cli/-/replace-in-files-cli-3.0.0.tgz", + "integrity": "sha512-A2VjOaPF8yjiaRjuIlvX3PB0uRMQ3DpnKG4yg38wjPrqR0OSzD00ubOZqqwAunoT5emKjEZPvdkm6JRVJrBmlQ==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "escape-string-regexp": "^5.0.0", + "globby": "^14.0.1", + "meow": "^13.2.0", + "normalize-path": "^3.0.0", + "write-file-atomic": "^5.0.1" }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" + "bin": { + "replace-in-files": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/replace-in-files-cli/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/replace-in-files-cli/node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/replace-in-files-cli/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 4" } }, - "node_modules/eslint/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/replace-in-files-cli/node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/replace-in-files-cli/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/replace-in-files-cli/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/espree": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", - "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "acorn": "^8.5.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, "engines": { - "node": ">=4" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "node_modules/rimraf": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" }, "engines": { - "node": ">=0.10" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" + "balanced-match": "^1.0.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/rimraf/node_modules/glob": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, "engines": { - "node": ">=4.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/rimraf/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "node_modules/rimraf/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "peer": true, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "node_modules/rollup-plugin-license": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-license/-/rollup-plugin-license-3.5.3.tgz", + "integrity": "sha512-r3wImZSo2d6sEk9BRJtlzeI/upjyjnpthy06Fdl0EzqRrlg3ULb9KQR7xHJI0zuayW/8bchEXSF5dO6dha4OyA==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "commenting": "~1.1.0", + "fdir": "6.3.0", + "lodash": "~4.17.21", + "magic-string": "~0.30.0", + "moment": "~2.30.1", + "package-name-regex": "~2.0.6", + "spdx-expression-validate": "~2.0.0", + "spdx-satisfies": "~5.0.1" }, "engines": { - "node": ">=8" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" } }, - "node_modules/fast-glob/node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "node_modules/rollup-plugin-license/node_modules/fdir": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.3.0.tgz", + "integrity": "sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==", "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "peerDependencies": { + "picomatch": "^3 || ^4" }, - "engines": { - "node": ">=8.6" + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "node_modules/rollup-plugin-license/node_modules/magic-string": { + "version": "0.30.13", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz", + "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==", "dev": true, "dependencies": { - "reusify": "^1.0.4" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/rollup-plugin-license/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, + "optional": true, + "peer": true, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/filesize": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.3.0.tgz", - "integrity": "sha512-ytx0ruGpDHKWVoiui6+BY/QMNngtDQ/pJaFwfBpQif0J63+E8DLdFyqS3NkKQn7vIruUEpoGD9JUJSg7Kp+I0g==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "engines": { - "node": ">= 0.4.0" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "shebang-regex": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/shiki": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.23.1.tgz", + "integrity": "sha512-8kxV9TH4pXgdKGxNOkrSMydn1Xf6It8lsle0fiqxf7a1149K1WGtdOu3Zb91T5r1JpvRPxqxU3C2XdZZXQnrig==", "dev": true, "dependencies": { - "ms": "2.0.0" + "@shikijs/core": "1.23.1", + "@shikijs/engine-javascript": "1.23.1", + "@shikijs/engine-oniguruma": "1.23.1", + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4" } }, - "node_modules/finalhandler/node_modules/ms": { + "node_modules/siginfo": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/sinon": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.2.0.tgz", + "integrity": "sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^10.3.0", + "@sinonjs/samsam": "^8.0.0", + "diff": "^5.1.0", + "nise": "^5.1.4", + "supports-color": "^7.2.0" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" } }, - "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true + "node_modules/sinon/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "node_modules/sinon/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.12" + "node": ">=8" } }, - "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", - "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/fs.realpath": { + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdx-compare": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz", + "integrity": "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==", + "dev": true, + "dependencies": { + "array-find-index": "^1.0.2", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/fstream/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/spdx-expression-validate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-validate/-/spdx-expression-validate-2.0.0.tgz", + "integrity": "sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==", "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", "dev": true }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "node_modules/spdx-ranges": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz", + "integrity": "sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==", "dev": true }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "node_modules/spdx-satisfies": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-5.0.1.tgz", + "integrity": "sha512-Nwor6W6gzFp8XX4neaKQ7ChV4wmpSh2sSDemMFSzHxpTw460jxFYeOn+jq4ybnSSw/5sc3pjka9MQPouksQNpw==", "dev": true, "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "spdx-compare": "^1.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/stage-js": { + "version": "1.0.0-alpha.5", + "resolved": "https://registry.npmjs.org/stage-js/-/stage-js-1.0.0-alpha.5.tgz", + "integrity": "sha512-0T1/E+0PBlM5LQJfekMS51SFC5euKQwUJ7nGoSGmsHoKx4o+lD1CzHxQHTZn7vYHqlTTJNvlp7Q70/qapYF7NQ==", + "peer": true + }, + "node_modules/std-env": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "dev": true + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=8" } }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", "dev": true, "dependencies": { - "assert-plus": "^1.0.0" + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/globby/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "duplexer": "^0.1.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gzip-size/node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "node_modules/terser": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", "dev": true, "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" }, "bin": { - "handlebars": "bin/handlebars" + "terser": "bin/terser" }, "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "node": ">=10" } }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", + "node_modules/test-exclude/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/test-exclude/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "dependencies": { - "function-bind": "^1.1.1" + "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">= 0.4.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "node_modules/test-exclude/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/test-exclude/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "engines": { - "node": ">=4" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "node_modules/test-exclude/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=16 || 14 >=14.18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "node_modules/highlight.js": { - "version": "10.7.2", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.2.tgz", - "integrity": "sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg==", - "dev": true, - "engines": { - "node": "*" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "node_modules/tinyexec": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", "dev": true }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "node_modules/tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, "engines": { - "node": ">= 0.6" + "node": "^18.0.0 || >=20.0.0" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": ">=14.0.0" } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">=14.0.0" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { - "agent-base": "6", - "debug": "4" + "is-number": "^7.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8.0" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", "dev": true, - "dependencies": { - "ms": "^2.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/tsd": { + "version": "0.31.2", + "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.31.2.tgz", + "integrity": "sha512-VplBAQwvYrHzVihtzXiUVXu5bGcr7uH1juQZ1lmKgkuGNGT+FechUCqmx9/zk7wibcqR2xaNEwCkDyKh+VVZnQ==", "dev": true, + "dependencies": { + "@tsd/typescript": "~5.4.3", + "eslint-formatter-pretty": "^4.1.0", + "globby": "^11.0.1", + "jest-diff": "^29.0.3", + "meow": "^9.0.0", + "path-exists": "^4.0.0", + "read-pkg-up": "^7.0.0" + }, + "bin": { + "tsd": "dist/cli.js" + }, "engines": { - "node": ">= 4" + "node": ">=14.16" } }, - "node_modules/ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "node_modules/tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - } + "optional": true, + "peer": true }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "engines": { "node": ">=4" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "engines": { - "node": ">=0.8.19" + "node": ">=8" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/typedoc": { + "version": "0.26.11", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.11.tgz", + "integrity": "sha512-sFEgRRtrcDl2FxVP58Ze++ZK2UQAEvtvvH8rRlig1Ja3o7dDaMHmaBfvJmdGnNEFaLTpQsN8dpvZaTqJSu/Ugw==", "dev": true, + "dependencies": { + "lunr": "^2.3.9", + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "shiki": "^1.16.2", + "yaml": "^2.5.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, "engines": { - "node": ">=8" + "node": ">= 18" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true + "node_modules/typedoc-plugin-markdown": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.2.10.tgz", + "integrity": "sha512-PLX3pc1/7z13UJm4TDE9vo9jWGcClFUErXXtd5LdnoLjV6mynPpqZLU992DwMGFSRqJFZeKbVyqlNNeNHnk2tQ==", + "dev": true, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "typedoc": "0.26.x" + } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "balanced-match": "^1.0.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">= 0.10" + "node": ">=14.17" } }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", "dev": true }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true, - "engines": { - "node": ">= 0.10" - } + "optional": true, + "peer": true }, - "node_modules/irregular-plurals": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz", - "integrity": "sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==", + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, "dependencies": { - "number-is-nan": "^1.0.0" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, "dependencies": { - "@types/estree": "*" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "dev": true, "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { - "semver": "bin/semver.js" + "vite": "bin/vite.js" }, "engines": { - "node": ">=10" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/vite-node": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.5.tgz", + "integrity": "sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "cac": "^6.7.14", + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=8" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "node_modules/vite-plugin-dts-bundle-generator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/vite-plugin-dts-bundle-generator/-/vite-plugin-dts-bundle-generator-2.0.5.tgz", + "integrity": "sha512-vv6rA43o9+IW3CkvDkOZi70e5e+CTf0HD2dGZznXnbSdu1R1+1aCoEHMtUV+huU5+O95LpAbLfU/2Am/JNM3FA==", "dev": true, "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "dts-bundle-generator": "^9.3.1" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "vite": "^5.0.12" } }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/vite-plugin-typescript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vite-plugin-typescript/-/vite-plugin-typescript-1.0.4.tgz", + "integrity": "sha512-vTfXw5WzXx+qbPQhjEUVGB+DoU183FdDc2y0HfNDfpE/anYtdefKVv8re3Po/IZiKZULmwO/pY031m0btkIxUw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "@rollup/plugin-typescript": "*", + "vite": "*" } }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "node_modules/vite-plugin-typescript-transform": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vite-plugin-typescript-transform/-/vite-plugin-typescript-transform-1.3.1.tgz", + "integrity": "sha512-TTG0TaH5vHZcg4ebAS3Md63hKClxJyVpqIjBzx17WNW/NvRCZm3i5a0C3cgZG2D5wp76zHaTpGOTzcNZ9FQJsA==", "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", - "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" + "node": "> 14.18" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "typescript": ">= 4", + "vite": ">= 4" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/vite/node_modules/rollup": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz", + "integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=8" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.27.4", + "@rollup/rollup-android-arm64": "4.27.4", + "@rollup/rollup-darwin-arm64": "4.27.4", + "@rollup/rollup-darwin-x64": "4.27.4", + "@rollup/rollup-freebsd-arm64": "4.27.4", + "@rollup/rollup-freebsd-x64": "4.27.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.27.4", + "@rollup/rollup-linux-arm-musleabihf": "4.27.4", + "@rollup/rollup-linux-arm64-gnu": "4.27.4", + "@rollup/rollup-linux-arm64-musl": "4.27.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4", + "@rollup/rollup-linux-riscv64-gnu": "4.27.4", + "@rollup/rollup-linux-s390x-gnu": "4.27.4", + "@rollup/rollup-linux-x64-gnu": "4.27.4", + "@rollup/rollup-linux-x64-musl": "4.27.4", + "@rollup/rollup-win32-arm64-msvc": "4.27.4", + "@rollup/rollup-win32-ia32-msvc": "4.27.4", + "@rollup/rollup-win32-x64-msvc": "4.27.4", + "fsevents": "~2.3.2" } }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "node_modules/vitest": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.5.tgz", + "integrity": "sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==", + "dev": true, + "dependencies": { + "@vitest/expect": "2.1.5", + "@vitest/mocker": "2.1.5", + "@vitest/pretty-format": "^2.1.5", + "@vitest/runner": "2.1.5", + "@vitest/snapshot": "2.1.5", + "@vitest/spy": "2.1.5", + "@vitest/utils": "2.1.5", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", + "pathe": "^1.1.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.5", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" }, "engines": { - "node": ">=10" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "url": "https://opencollective.com/vitest" }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.1.5", + "@vitest/ui": "2.1.5", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } } }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/vitest/node_modules/@vitest/mocker": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.5.tgz", + "integrity": "sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@vitest/spy": "2.1.5", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } } }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "node_modules/vitest/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "dependencies": { + "@types/estree": "^1.0.0" } }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "node_modules/vitest/node_modules/magic-string": { + "version": "0.30.13", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz", + "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==", "dev": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" }, "engines": { "node": ">=8" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "jsonify": "~0.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6" + "node": ">=7.0.0" } }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "node_modules/jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "engines": [ - "node >= 0.2.0" - ] + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "engines": [ - "node >=0.6.0" - ], "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", - "dev": true - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" @@ -6643,23 +6214,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { + "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -6671,8919 +6226,2457 @@ "node": ">=7.0.0" } }, - "node_modules/log-symbols/node_modules/color-name": { + "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lru-cache": { + "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "ansi-regex": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-fetch-happen/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "dependencies": { - "minipass": "^3.1.1" + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/marked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-1.0.0.tgz", - "integrity": "sha512-Wo+L1pWTVibfrSr+TTtMuiMfNzmZWiOPeO7rZsQUY5bgsxpHesBEcIWJloWVTFnrMXnf/TL30eTFSGJddmQAng==", + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", "dev": true, "bin": { - "marked": "bin/marked" + "yaml": "bin.mjs" }, "engines": { - "node": ">= 8.16.2" + "node": ">= 14" } }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=10" } }, - "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } - }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" + "requires": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" } }, - "node_modules/meow/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true + }, + "@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "requires": { + "@babel/types": "^7.26.0" } }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", "dev": true, - "engines": { - "node": ">= 8" - } + "optional": true }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "dev": true, - "engines": { - "node": ">= 0.6" - } + "optional": true }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } + "optional": true }, - "node_modules/mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "dev": true, - "engines": { - "node": ">= 0.6" - } + "optional": true }, - "node_modules/mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "dev": true, - "dependencies": { - "mime-db": "1.47.0" - }, - "engines": { - "node": ">= 0.6" - } + "optional": true }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "dev": true, - "engines": { - "node": ">=4" - } + "optional": true }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } + "optional": true }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "optional": true }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } + "optional": true }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, - "node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "optional": true }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } + "optional": true }, - "node_modules/minipass-fetch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", - "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", + "@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "dev": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } + "optional": true }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } + "optional": true }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "dev": true, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } + "optional": true }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } + "optional": true }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } + "optional": true }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } + "optional": true }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } + "optional": true }, - "node_modules/mlly": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.0.tgz", - "integrity": "sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==", + "@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "ufo": "^1.1.2" - } + "optional": true }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "optional": true }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "dev": true, - "engines": { - "node": ">= 0.6" - } + "optional": true }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "dev": true, + "optional": true }, - "node_modules/nise": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz", - "integrity": "sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==", + "@eslint/eslintrc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", + "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.0.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, "dependencies": { - "@sinonjs/commons": "^2.0.0", - "@sinonjs/fake-timers": "^10.0.2", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } } }, - "node_modules/nise/node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "@humanwhocodes/config-array": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", "dev": true, - "dependencies": { - "type-detect": "4.0.8" + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" } }, - "node_modules/nise/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", "dev": true }, - "node_modules/nise/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, "dependencies": { - "isarray": "0.0.1" + "ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } } }, - "node_modules/node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true }, - "node_modules/node-gyp/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "@jest/schemas": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", + "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" + "requires": { + "@sinclair/typebox": "^0.27.8" } }, - "node_modules/node-gyp/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/node-gyp/node_modules/tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "bin": { - "semver": "bin/semver" + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, - "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } + "optional": true }, - "node_modules/npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "@rollup/plugin-typescript": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.1.tgz", + "integrity": "sha512-t7O653DpfB5MbFrqPe/VcKFFkvRuFNp9qId3xq4Eth5xlyymzxNpye2z8Hrl0RIMuXTSr5GGcFpkdlMeacUiFQ==", "dev": true, - "dependencies": { - "semver": "^7.1.1" + "peer": true, + "requires": { + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" }, - "engines": { - "node": ">=10" + "dependencies": { + "@rollup/pluginutils": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", + "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", + "dev": true, + "peer": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + } + }, + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "peer": true + } } }, - "node_modules/npm-install-checks/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "@rollup/rollup-android-arm-eabi": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz", + "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "optional": true }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true + "@rollup/rollup-android-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz", + "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==", + "dev": true, + "optional": true }, - "node_modules/npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", + "@rollup/rollup-darwin-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz", + "integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==", "dev": true, - "dependencies": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } + "optional": true }, - "node_modules/npm-package-arg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "@rollup/rollup-darwin-x64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz", + "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==", "dev": true, - "bin": { - "semver": "bin/semver" - } + "optional": true }, - "node_modules/npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "@rollup/rollup-freebsd-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz", + "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==", "dev": true, - "dependencies": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": ">=10" - } + "optional": true }, - "node_modules/npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "@rollup/rollup-freebsd-x64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz", + "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==", "dev": true, - "dependencies": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - } + "optional": true }, - "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz", + "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } + "optional": true }, - "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.2.tgz", - "integrity": "sha512-6Eem455JsSMJY6Kpd3EyWE+n5hC+g9bSyHr9K9U2zqZb7+02+hObQ2c0+8iDk/mNF+8r1MhY44WypKJAkySIYA==", + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz", + "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==", "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } + "optional": true }, - "node_modules/npm-pick-manifest/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz", + "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "optional": true }, - "node_modules/npm-registry-client": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.6.0.tgz", - "integrity": "sha512-Qs6P6nnopig+Y8gbzpeN/dkt+n7IyVd8f45NTMotGk6Qo7GfBmzwYx6jRLoOOgKiMnaQfYxsuyQlD8Mc3guBhg==", + "@rollup/rollup-linux-arm64-musl": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz", + "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==", "dev": true, - "dependencies": { - "concat-stream": "^1.5.2", - "graceful-fs": "^4.1.6", - "normalize-package-data": "~1.0.1 || ^2.0.0", - "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "once": "^1.3.3", - "request": "^2.74.0", - "retry": "^0.10.0", - "safe-buffer": "^5.1.1", - "semver": "2 >=2.2.1 || 3.x || 4 || 5", - "slide": "^1.1.3", - "ssri": "^5.2.4" - }, - "optionalDependencies": { - "npmlog": "2 || ^3.1.0 || ^4.0.0" - } + "optional": true }, - "node_modules/npm-registry-client/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz", + "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==", "dev": true, - "bin": { - "semver": "bin/semver" - } + "optional": true }, - "node_modules/npm-registry-fetch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-10.1.1.tgz", - "integrity": "sha512-F6a3l+ffCQ7hvvN16YG5bpm1rPZntCg66PLHDQ1apWJPOCUVHoKnL2w5fqEaTVhp42dmossTyXeR7hTGirfXrg==", + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz", + "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "engines": { - "node": ">=10" - } + "optional": true }, - "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz", + "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } + "optional": true }, - "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.2.tgz", - "integrity": "sha512-6Eem455JsSMJY6Kpd3EyWE+n5hC+g9bSyHr9K9U2zqZb7+02+hObQ2c0+8iDk/mNF+8r1MhY44WypKJAkySIYA==", + "@rollup/rollup-linux-x64-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz", + "integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==", "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } + "optional": true }, - "node_modules/npm-registry-fetch/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "@rollup/rollup-linux-x64-musl": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz", + "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "optional": true }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz", + "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==", "dev": true, - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } + "optional": true }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz", + "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "@rollup/rollup-win32-x64-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz", + "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==", "dev": true, - "engines": { - "node": "*" - } + "optional": true }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "@shikijs/core": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.23.1.tgz", + "integrity": "sha512-NuOVgwcHgVC6jBVH5V7iblziw6iQbWWHrj5IlZI3Fqu2yx9awH7OIQkXIcsHsUmY19ckwSgUMgrqExEyP5A0TA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@shikijs/engine-javascript": "1.23.1", + "@shikijs/engine-oniguruma": "1.23.1", + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.3" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "@shikijs/engine-javascript": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.23.1.tgz", + "integrity": "sha512-i/LdEwT5k3FVu07SiApRFwRcSJs5QM9+tod5vYCPig1Ywi8GR30zcujbxGQFJHwYD7A5BUqagi8o5KS+LEVgBg==", "dev": true, - "engines": { - "node": ">= 0.4" + "requires": { + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "oniguruma-to-es": "0.4.1" } }, - "node_modules/object-path": { - "version": "0.11.5", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.5.tgz", - "integrity": "sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg==", + "@shikijs/engine-oniguruma": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.23.1.tgz", + "integrity": "sha512-KQ+lgeJJ5m2ISbUZudLR1qHeH3MnSs2mjFg7bnencgs5jDVPeJ2NVDJ3N5ZHbcTsOIh0qIueyAJnwg7lg7kwXQ==", "dev": true, - "engines": { - "node": ">= 10.12.0" + "requires": { + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0" } }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "@shikijs/types": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.23.1.tgz", + "integrity": "sha512-98A5hGyEhzzAgQh2dAeHKrWW4HfCMeoFER2z16p5eJ+vmPeF6lZ/elEne6/UCU551F/WqkopqRsr1l2Yu6+A0g==", "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4" } }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } + "@shikijs/vscode-textmate": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.0.tgz", + "integrity": "sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==", + "dev": true }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } + "@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "type-detect": "4.0.8" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "@sinonjs/samsam": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", + "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", "dev": true, + "requires": { + "@sinonjs/commons": "^2.0.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + }, "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + } } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } + "@sinonjs/text-encoding": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", + "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", + "dev": true }, - "node_modules/package-name-regex": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/package-name-regex/-/package-name-regex-1.0.9.tgz", - "integrity": "sha512-+U2oQCfEz2IlGqws8gmfKzdMDbSd6+RZp6UIFdKo+GAw3+o+kfnsgXkWtJ1JMoKhpP2kEvuYyTy1lXOEQEe0ZA==", + "@tsd/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-saiCxzHRhUrRxQV2JhH580aQUZiKQUXI38FcAcikcfOomAil4G4lxT0RfrrKywoAYP/rqAdYXYmNRLppcd+hQQ==", "dev": true }, - "node_modules/pacote": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.3.tgz", - "integrity": "sha512-GQxBX+UcVZrrJRYMK2HoG+gPeSUX/rQhnbPkkGrCYa4n2F/bgClFPaMm0nsdnYrxnmUy85uMHoFXZ0jTD0drew==", - "dev": true, - "dependencies": { - "@npmcli/git": "^2.0.1", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^10.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": ">=10" - } + "@types/chai": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", + "dev": true }, - "node_modules/pacote/node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "@types/eslint": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", + "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/pacote/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } + "@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true }, - "node_modules/pacote/node_modules/npm-package-arg": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.2.tgz", - "integrity": "sha512-6Eem455JsSMJY6Kpd3EyWE+n5hC+g9bSyHr9K9U2zqZb7+02+hObQ2c0+8iDk/mNF+8r1MhY44WypKJAkySIYA==", + "@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" + "requires": { + "@types/unist": "*" } }, - "node_modules/pacote/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true }, - "node_modules/pacote/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" + "requires": { + "@types/unist": "*" } }, - "node_modules/pacote/node_modules/tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "@types/node": { + "version": "22.9.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.3.tgz", + "integrity": "sha512-F3u1fs/fce3FFk+DAxbxc78DF8x0cY09RRL8GnXLmkJ1jvx3TtPdWoTT5/NiYfI5ASqXBmfqJi9dZ3gxMx4lzw==", "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" + "optional": true, + "peer": true, + "requires": { + "undici-types": "~6.19.8" } }, - "node_modules/parse-json": { + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.2.0.tgz", + "integrity": "sha512-qQwg7sqYkBF4CIQSyRQyqsYvP+g/J0To9ZPVNJpfxfekl5RmdvQnFFTVVwpRtaUDFNvjfe/34TgY/dpc3MgNTw==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" + "requires": { + "@typescript-eslint/experimental-utils": "5.2.0", + "@typescript-eslint/scope-manager": "5.2.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } } }, - "node_modules/parsimmon": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/parsimmon/-/parsimmon-1.17.0.tgz", - "integrity": "sha512-gp5yNYs0Lyv5Mp6hj+JMzsHaM4Mel0WuK2iHYKX32ActYAQdsSq+t4nVsqlOpUCiMYdTX1wFISLvugrAl9harg==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "@typescript-eslint/experimental-utils": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.2.0.tgz", + "integrity": "sha512-fWyT3Agf7n7HuZZRpvUYdFYbPk3iDCq6fgu3ulia4c7yxmPnwVBovdSOX7RL+k8u6hLbrXcdAehlWUVpGh6IEw==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.2.0", + "@typescript-eslint/types": "5.2.0", + "@typescript-eslint/typescript-estree": "5.2.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "@typescript-eslint/parser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.2.0.tgz", + "integrity": "sha512-Uyy4TjJBlh3NuA8/4yIQptyJb95Qz5PX//6p8n7zG0QnN4o3NF9Je3JHbVU7fxf5ncSXTmnvMtd/LDQWDk0YqA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@typescript-eslint/scope-manager": "5.2.0", + "@typescript-eslint/types": "5.2.0", + "@typescript-eslint/typescript-estree": "5.2.0", + "debug": "^4.3.2" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "@typescript-eslint/scope-manager": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.2.0.tgz", + "integrity": "sha512-RW+wowZqPzQw8MUFltfKYZfKXqA2qgyi6oi/31J1zfXJRpOn6tCaZtd9b5u9ubnDG2n/EMvQLeZrsLNPpaUiFQ==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "@typescript-eslint/types": "5.2.0", + "@typescript-eslint/visitor-keys": "5.2.0" } }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "@typescript-eslint/types": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.2.0.tgz", + "integrity": "sha512-cTk6x08qqosps6sPyP2j7NxyFPlCNsJwSDasqPNjEQ8JMD5xxj2NHxcLin5AJQ8pAVwpQ8BMI3bTxR0zxmK9qQ==", "dev": true }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "@typescript-eslint/typescript-estree": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.2.0.tgz", + "integrity": "sha512-RsdXq2XmVgKbm9nLsE3mjNUM7BTr/K4DYR9WfFVMUuozHWtH5gMpiNZmtrMG8GR385EOSQ3kC9HiEMJWimxd/g==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "@typescript-eslint/types": "5.2.0", + "@typescript-eslint/visitor-keys": "5.2.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } } }, - "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", - "dev": true - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "@typescript-eslint/visitor-keys": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.2.0.tgz", + "integrity": "sha512-Nk7HizaXWWCUBfLA/rPNKMzXzWS8Wg9qHMuGtT+v2/YpPij4nVXrVJc24N/r5WrrmqK31jCrZxeHqIgqRzs0Xg==", "dev": true, - "engines": { - "node": "*" + "requires": { + "@typescript-eslint/types": "5.2.0", + "eslint-visitor-keys": "^3.0.0" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, - "node_modules/picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "@vitest/coverage-v8": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.5.tgz", + "integrity": "sha512-/RoopB7XGW7UEkUndRXF87A9CwkoZAJW01pj8/3pgmDVsjMH2IKy6H1A38po9tmUlwhSyYs0az82rbKd9Yaynw==", "dev": true, - "engines": { - "node": ">=8.6" + "requires": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.7", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", + "std-env": "^3.8.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^1.2.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "dependencies": { + "magic-string": { + "version": "0.30.13", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz", + "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + } } }, - "node_modules/pkg-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "@vitest/expect": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.5.tgz", + "integrity": "sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==", "dev": true, - "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" + "requires": { + "@vitest/spy": "2.1.5", + "@vitest/utils": "2.1.5", + "chai": "^5.1.2", + "tinyrainbow": "^1.2.0" } }, - "node_modules/plur": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", - "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", + "@vitest/pretty-format": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.5.tgz", + "integrity": "sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==", "dev": true, - "dependencies": { - "irregular-plurals": "^3.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "tinyrainbow": "^1.2.0" } }, - "node_modules/postcss": { - "version": "8.4.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", - "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", + "@vitest/runner": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.5.tgz", + "integrity": "sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" + "requires": { + "@vitest/utils": "2.1.5", + "pathe": "^1.1.2" } }, - "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "@vitest/snapshot": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.5.tgz", + "integrity": "sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" + "requires": { + "@vitest/pretty-format": "2.1.5", + "magic-string": "^0.30.12", + "pathe": "^1.1.2" }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "dependencies": { + "magic-string": { + "version": "0.30.13", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz", + "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + } } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "@vitest/spy": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.5.tgz", + "integrity": "sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==", "dev": true, - "engines": { - "node": ">= 0.8.0" + "requires": { + "tinyspy": "^3.0.2" } }, - "node_modules/pretty-format": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", - "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "@vitest/utils": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.5.tgz", + "integrity": "sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==", "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "requires": { + "@vitest/pretty-format": "2.1.5", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "engines": { - "node": ">=0.4.0" + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } } }, - "node_modules/promise-inflight": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, - "node_modules/promise-retry": { + "assertion-error": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, - "node_modules/promise-retry/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "engines": { - "node": ">= 4" + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "dependencies": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" + "requires": { + "fill-range": "^7.0.1" } }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } + "cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, - "engines": { - "node": ">=0.6" + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "chai": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" } }, - "node_modules/randombytes": { + "character-entities-html4": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true + }, + "check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true + }, + "comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commenting": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/commenting/-/commenting-1.1.0.tgz", + "integrity": "sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "engines": { - "node": ">= 0.6" + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" + "requires": { + "ms": "^2.1.3" } }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "node_modules/read-package-json-fast": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", - "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } } }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "dequal": "^2.0.0" } }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } + "diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "path-type": "^4.0.0" } }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "requires": { + "esutils": "^2.0.2" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dts-bundle-generator": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/dts-bundle-generator/-/dts-bundle-generator-9.5.1.tgz", + "integrity": "sha512-DxpJOb2FNnEyOzMkG11sxO2dmxPjthoVWxfKqWYJ/bI/rT1rvTMktF5EKjAYrRZu6Z6t3NhOUZ0sZ5ZXevOfbA==", "dev": true, - "dependencies": { - "resolve": "^1.1.6" + "requires": { + "typescript": ">=5.0.2", + "yargs": "^17.6.0" }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", "dev": true }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" + "requires": { + "ansi-colors": "^4.1.1" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" + "requires": { + "is-arrayish": "^0.2.1" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } + "es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true }, - "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - }, - "engines": { - "node": ">=4" + "esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, - "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/retry": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-filesize": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-filesize/-/rollup-plugin-filesize-9.1.1.tgz", - "integrity": "sha512-x0r2A85TCEdRwF3rm+bcN4eAmbER8tt+YVf88gBQ6sLyH4oGcnNLPQqAUX+v7mIvHC/y59QwZvo6vxaC2ias6Q==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.8", - "boxen": "^5.0.0", - "brotli-size": "4.0.0", - "colors": "^1.4.0", - "filesize": "^6.1.0", - "gzip-size": "^6.0.0", - "pacote": "^11.2.7", - "terser": "^5.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/rollup-plugin-license": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-license/-/rollup-plugin-license-2.3.0.tgz", - "integrity": "sha512-oi8pL59fVTwXCkLUsZ8dVGVJjO7Hcc5UT0chJvKd0MktPgeYHSadkaicAYUemdYHHpjb0D3DyvedZAEPt+2r8w==", - "dev": true, - "dependencies": { - "commenting": "1.1.0", - "glob": "7.1.6", - "lodash": "4.17.21", - "magic-string": "0.25.7", - "mkdirp": "1.0.4", - "moment": "2.29.1", - "package-name-regex": "1.0.9", - "spdx-expression-validate": "2.0.0", - "spdx-satisfies": "5.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "rollup": "^1.0.0 || ^2.0.0" - } - }, - "node_modules/rollup-plugin-license/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup-plugin-license/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/rollup-plugin-ts": { - "version": "1.3.12", - "resolved": "https://registry.npmjs.org/rollup-plugin-ts/-/rollup-plugin-ts-1.3.12.tgz", - "integrity": "sha512-HqKfV2o064/71x4EDNWUgYZIV6lc0yENl3HLCBQZLedXecfKS2vX5GtQ+cM4L2QEniHM+fn1IP17JeCTIEidYw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.13.15", - "@babel/plugin-proposal-async-generator-functions": "^7.13.15", - "@babel/plugin-proposal-json-strings": "^7.13.8", - "@babel/plugin-proposal-object-rest-spread": "^7.13.8", - "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.13.15", - "@babel/preset-env": "^7.13.15", - "@babel/runtime": "^7.13.10", - "@rollup/pluginutils": "^4.1.0", - "@types/babel__core": "^7.1.14", - "@wessberg/browserslist-generator": "^1.0.47", - "@wessberg/stringutil": "^1.0.19", - "@wessberg/ts-clone-node": "^0.3.19", - "browserslist": "^4.16.4", - "chalk": "^4.1.0", - "magic-string": "^0.25.7", - "slash": "^3.0.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/wessberg/rollup-plugin-ts?sponsor=1" - }, - "peerDependencies": { - "rollup": ">=1.x || >=2.x", - "typescript": ">=3.2.x || >= 4.x" - } - }, - "node_modules/rollup-plugin-ts/node_modules/@rollup/pluginutils": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", - "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==", - "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/rollup-plugin-ts/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/rollup-plugin-ts/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/rollup-plugin-ts/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/rollup-plugin-ts/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/rollup-plugin-ts/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-ts/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "node_modules/sinon": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.2.0.tgz", - "integrity": "sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^10.3.0", - "@sinonjs/samsam": "^8.0.0", - "diff": "^5.1.0", - "nise": "^5.1.4", - "supports-color": "^7.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "node_modules/sinon/node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/sinon/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/sinon/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "dev": true, - "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz", - "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4", - "socks": "^2.3.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/spdx-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz", - "integrity": "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==", - "dev": true, - "dependencies": { - "array-find-index": "^1.0.2", - "spdx-expression-parse": "^3.0.0", - "spdx-ranges": "^2.0.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-expression-validate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-validate/-/spdx-expression-validate-2.0.0.tgz", - "integrity": "sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", - "dev": true - }, - "node_modules/spdx-ranges": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz", - "integrity": "sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==", - "dev": true - }, - "node_modules/spdx-satisfies": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-5.0.0.tgz", - "integrity": "sha512-/hGhwh20BeGmkA+P/lm06RvXD94JduwNxtx/oX3B5ClPt1/u/m5MCaDNo1tV3Y9laLkQr/NRde63b9lLMhlNfw==", - "dev": true, - "dependencies": { - "spdx-compare": "^1.0.0", - "spdx-expression-parse": "^3.0.0", - "spdx-ranges": "^2.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.1" - } - }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true - }, - "node_modules/stage-js": { - "version": "1.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/stage-js/-/stage-js-1.0.0-alpha.5.tgz", - "integrity": "sha512-0T1/E+0PBlM5LQJfekMS51SFC5euKQwUJ7nGoSGmsHoKx4o+lD1CzHxQHTZn7vYHqlTTJNvlp7Q70/qapYF7NQ==", - "peer": true - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/std-env": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz", - "integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-literal": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", - "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", - "dev": true, - "dependencies": { - "acorn": "^8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "dev": true, - "dependencies": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/tinybench": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz", - "integrity": "sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==", - "dev": true - }, - "node_modules/tinypool": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", - "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tinyspy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", - "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsd": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.28.1.tgz", - "integrity": "sha512-FeYrfJ05QgEMW/qOukNCr4fAJHww4SaKnivAXRv4g5kj4FeLpNV7zH4dorzB9zAfVX4wmA7zWu/wQf7kkcvfbw==", - "dev": true, - "dependencies": { - "@tsd/typescript": "~5.0.2", - "eslint-formatter-pretty": "^4.1.0", - "globby": "^11.0.1", - "jest-diff": "^29.0.3", - "meow": "^9.0.0", - "path-exists": "^4.0.0", - "read-pkg-up": "^7.0.0" - }, - "bin": { - "tsd": "dist/cli.js" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "node_modules/typedoc": { - "version": "0.17.8", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.17.8.tgz", - "integrity": "sha512-/OyrHCJ8jtzu+QZ+771YaxQ9s4g5Z3XsQE3Ma7q+BL392xxBn4UMvvCdVnqKC2T/dz03/VXSLVKOP3lHmDdc/w==", - "dev": true, - "dependencies": { - "fs-extra": "^8.1.0", - "handlebars": "^4.7.6", - "highlight.js": "^10.0.0", - "lodash": "^4.17.15", - "lunr": "^2.3.8", - "marked": "1.0.0", - "minimatch": "^3.0.0", - "progress": "^2.0.3", - "shelljs": "^0.8.4", - "typedoc-default-themes": "^0.10.2" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "typescript": ">=3.8.3" - } - }, - "node_modules/typedoc-default-themes": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.10.2.tgz", - "integrity": "sha512-zo09yRj+xwLFE3hyhJeVHWRSPuKEIAsFK5r2u47KL/HBKqpwdUSanoaz5L34IKiSATFrjG5ywmIu98hPVMfxZg==", - "dev": true, - "dependencies": { - "lunr": "^2.3.8" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/typedoc-plugin-markdown": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-2.4.2.tgz", - "integrity": "sha512-BBH+9/Uq5XbsqfzCDl8Jq4iaLXRMXRuAHZRFarAZX7df8+F3vUjDx/WHWoWqbZ/XUFzduLC2Iuy2qwsJX8SQ7A==", - "dev": true, - "dependencies": { - "fs-extra": "^9.0.1", - "handlebars": "^4.7.6" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "typedoc": ">=0.17.0" - } - }, - "node_modules/typedoc-plugin-markdown/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/typedoc-plugin-markdown/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/typedoc-plugin-markdown/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/typedoc/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/ufo": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.2.0.tgz", - "integrity": "sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==", - "dev": true - }, - "node_modules/uglify-js": { - "version": "3.13.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.5.tgz", - "integrity": "sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "dev": true, - "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/vite": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.7.tgz", - "integrity": "sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==", - "dev": true, - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.26", - "rollup": "^3.25.2" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite-node": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.1.tgz", - "integrity": "sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==", - "dev": true, - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "mlly": "^1.4.0", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": ">=v14.18.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vite/node_modules/rollup": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.27.0.tgz", - "integrity": "sha512-aOltLCrYZ0FhJDm7fCqwTjIUEVjWjcydKBV/Zeid6Mn8BWgDCUBBWT5beM5ieForYNo/1ZHuGJdka26kvQ3Gzg==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/vitest": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.1.tgz", - "integrity": "sha512-G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVlQ==", - "dev": true, - "dependencies": { - "@types/chai": "^4.3.5", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.34.1", - "@vitest/runner": "0.34.1", - "@vitest/snapshot": "0.34.1", - "@vitest/spy": "0.34.1", - "@vitest/utils": "0.34.1", - "acorn": "^8.9.0", - "acorn-walk": "^8.2.0", - "cac": "^6.7.14", - "chai": "^4.3.7", - "debug": "^4.3.4", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.1", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "strip-literal": "^1.0.1", - "tinybench": "^2.5.0", - "tinypool": "^0.7.0", - "vite": "^3.0.0 || ^4.0.0", - "vite-node": "0.34.1", - "why-is-node-running": "^2.2.2" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": ">=v14.18.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@vitest/browser": "*", - "@vitest/ui": "*", - "happy-dom": "*", - "jsdom": "*", - "playwright": "*", - "safaridriver": "*", - "webdriverio": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - }, - "playwright": { - "optional": true - }, - "safaridriver": { - "optional": true - }, - "webdriverio": { - "optional": true - } - } - }, - "node_modules/vitest/node_modules/magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/why-is-node-running": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", - "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", - "dev": true, - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/widest-line/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/yargs/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", - "dev": true - }, - "@babel/core": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", - "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", - "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", - "dev": true, - "requires": { - "@babel/types": "^7.14.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.1.tgz", - "integrity": "sha512-r8rsUahG4ywm0QpGcCrLaUSOuNAISR3IZCg4Fx05Ozq31aCUrQsTLH6KPxy0N5ULoQ4Sn9qjNdGNtbPWAC6hYg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", - "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", - "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dev": true, - "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", - "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", - "dev": true - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", - "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz", - "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-class-static-block": "^7.12.13" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", - "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", - "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", - "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", - "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", - "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", - "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", - "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-compilation-targets": "^7.13.8", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.13.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", - "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", - "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-create-class-features-plugin": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", - "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.1.tgz", - "integrity": "sha512-2mQXd0zBrwfp0O1moWIhPpEeTKDvxyHcnma3JATVP1l+CctWBuot6OJG8LQ4DnBj4ZZPSmlb/fm4mu47EOAnVA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", - "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-split-export-declaration": "^7.12.13", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", - "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", - "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.13.12", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", - "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz", - "integrity": "sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "semver": "^6.3.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/preset-env": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.1.tgz", - "integrity": "sha512-0M4yL1l7V4l+j/UHvxcdvNfLB9pPtIooHTbEhgD/6UGyh8Hy3Bm1Mj0buzjDXATCSz3JFibVdnoJZCrlUCanrQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.13.15", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-class-static-block": "^7.13.11", - "@babel/plugin-proposal-dynamic-import": "^7.13.8", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.13.8", - "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.13.8", - "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-private-property-in-object": "^7.14.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.12.13", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.14.1", - "@babel/plugin-transform-classes": "^7.13.0", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.17", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.14.0", - "@babel/plugin-transform-modules-commonjs": "^7.14.0", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.14.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.13.0", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.1", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "core-js-compat": "^3.9.0", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", - "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.14.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@definitelytyped/header-parser": { - "version": "0.0.80", - "resolved": "https://registry.npmjs.org/@definitelytyped/header-parser/-/header-parser-0.0.80.tgz", - "integrity": "sha512-uRyBuKCmRuHokPhNS4PG8ME76fZZ/E4jTOFjwYLTYBqLqvAK2l0fkKp66+V64vbFgZtgJ1VTNFhu5NN6nnUsEA==", - "dev": true, - "requires": { - "@definitelytyped/typescript-versions": "^0.0.80", - "@types/parsimmon": "^1.10.1", - "parsimmon": "^1.13.0" - } - }, - "@definitelytyped/typescript-versions": { - "version": "0.0.80", - "resolved": "https://registry.npmjs.org/@definitelytyped/typescript-versions/-/typescript-versions-0.0.80.tgz", - "integrity": "sha512-+cGCUVnKn0BJ2YmI8aBuHxMVmvtgn36zKcm7/en/QJhzu5wurdHy/uXIy0mHH1g1OMND5kRF9fH3D26iLFu7Sw==", - "dev": true - }, - "@definitelytyped/utils": { - "version": "0.0.80", - "resolved": "https://registry.npmjs.org/@definitelytyped/utils/-/utils-0.0.80.tgz", - "integrity": "sha512-pX+eljmCXDbp/CtT1l1UVfllM1jIZw3rpDjXgW1BylSW8LFYsjs5pjBqOtOyed/Nmx92EKTzeG/Q4PUp0MyeSQ==", - "dev": true, - "requires": { - "@definitelytyped/typescript-versions": "^0.0.80", - "@types/node": "^14.14.35", - "charm": "^1.0.2", - "fs-extra": "^8.1.0", - "fstream": "^1.0.12", - "npm-registry-client": "^8.6.0", - "tar": "^2.2.2", - "tar-stream": "^2.1.4" - }, - "dependencies": { - "@types/node": { - "version": "14.14.44", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.44.tgz", - "integrity": "sha512-+gaugz6Oce6ZInfI/tK4Pq5wIIkJMEJUu92RB3Eu93mtj4wjjjz9EB5mLp5s1pSsLXdC/CPut/xF20ZzAQJbTA==", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@esbuild/android-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", - "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", - "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", - "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", - "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", - "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", - "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", - "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", - "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", - "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", - "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", - "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", - "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", - "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", - "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", - "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", - "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", - "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", - "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", - "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", - "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", - "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", - "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", - "dev": true, - "optional": true - }, - "@eslint/eslintrc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", - "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.0.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", - "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.27.8" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@mdn/browser-compat-data": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.3.3.tgz", - "integrity": "sha512-ikDzSgs2SbBtKVXCNfU6GzVACpUuojZS8Vu/VhM1EwtWvtfGJsrRETLbV231ODMvWtfKJThzrsk2Hp88fv9+gA==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/git": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.0.9.tgz", - "integrity": "sha512-hTMbMryvOqGLwnmMBKs5usbPsJtyEsMsgXwJbmNrsEuQQh1LAIMDU77IoOrwkCg+NgQWl+ySlarJASwM3SutCA==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "@npmcli/node-gyp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", - "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==", - "dev": true - }, - "@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.5.tgz", - "integrity": "sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "infer-owner": "^1.0.4", - "node-gyp": "^7.1.0", - "read-package-json-fast": "^2.0.1" - } - }, - "@rollup/plugin-commonjs": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", - "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - } - } - }, - "@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^3.0.0" - } - }, - "@sinonjs/samsam": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", - "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", - "dev": true, - "requires": { - "@sinonjs/commons": "^2.0.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" - }, - "dependencies": { - "@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - } - } - }, - "@sinonjs/text-encoding": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", - "dev": true - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@tsd/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-YQi2lvZSI+xidKeUjlbv6b6Zw7qB3aXHw5oGJLs5OOGAEqKIOvz5UIAkWyg0bJbkSUWPBEtaOHpVxU4EYBO1Jg==", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/chai": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", - "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", - "dev": true - }, - "@types/chai-subset": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", - "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", - "dev": true, - "requires": { - "@types/chai": "*" - } - }, - "@types/eslint": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", - "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "@types/node": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.2.tgz", - "integrity": "sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/object-path": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@types/object-path/-/object-path-0.11.0.tgz", - "integrity": "sha512-/tuN8jDbOXcPk+VzEVZzzAgw1Byz7s/itb2YI10qkSyy6nykJH02DuhfrflxVdAdE7AZ91h5X6Cn0dmVdFw2TQ==", - "dev": true - }, - "@types/parsimmon": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@types/parsimmon/-/parsimmon-1.10.6.tgz", - "integrity": "sha512-FwAQwMRbkhx0J6YELkwIpciVzCcgEqXEbIrIn3a2P5d3kGEHQ3wVhlN3YdVepYP+bZzCYO6OjmD4o9TGOZ40rA==", - "dev": true - }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-iotVxtCCsPLRAvxMFFgxL8HD2l4mAZ2Oin7/VJ2ooWO0VOK4EGOGmZWZn1uCq7RofR3I/1IOSjCHlFT71eVK0Q==", - "dev": true - }, - "@types/ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-PsPx0RLbo2Un8+ff2buzYJnZjzwhD3jQHPOG2PtVIeOhkRDddMcKU8vJtHpzzfLB95dkUi0qAkfLg2l2Fd0yrQ==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.2.0.tgz", - "integrity": "sha512-qQwg7sqYkBF4CIQSyRQyqsYvP+g/J0To9ZPVNJpfxfekl5RmdvQnFFTVVwpRtaUDFNvjfe/34TgY/dpc3MgNTw==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "5.2.0", - "@typescript-eslint/scope-manager": "5.2.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.2.0.tgz", - "integrity": "sha512-fWyT3Agf7n7HuZZRpvUYdFYbPk3iDCq6fgu3ulia4c7yxmPnwVBovdSOX7RL+k8u6hLbrXcdAehlWUVpGh6IEw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.2.0", - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/typescript-estree": "5.2.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, - "@typescript-eslint/parser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.2.0.tgz", - "integrity": "sha512-Uyy4TjJBlh3NuA8/4yIQptyJb95Qz5PX//6p8n7zG0QnN4o3NF9Je3JHbVU7fxf5ncSXTmnvMtd/LDQWDk0YqA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.2.0", - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/typescript-estree": "5.2.0", - "debug": "^4.3.2" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.2.0.tgz", - "integrity": "sha512-RW+wowZqPzQw8MUFltfKYZfKXqA2qgyi6oi/31J1zfXJRpOn6tCaZtd9b5u9ubnDG2n/EMvQLeZrsLNPpaUiFQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/visitor-keys": "5.2.0" - } - }, - "@typescript-eslint/types": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.2.0.tgz", - "integrity": "sha512-cTk6x08qqosps6sPyP2j7NxyFPlCNsJwSDasqPNjEQ8JMD5xxj2NHxcLin5AJQ8pAVwpQ8BMI3bTxR0zxmK9qQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.2.0.tgz", - "integrity": "sha512-RsdXq2XmVgKbm9nLsE3mjNUM7BTr/K4DYR9WfFVMUuozHWtH5gMpiNZmtrMG8GR385EOSQ3kC9HiEMJWimxd/g==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/visitor-keys": "5.2.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.2.0.tgz", - "integrity": "sha512-Nk7HizaXWWCUBfLA/rPNKMzXzWS8Wg9qHMuGtT+v2/YpPij4nVXrVJc24N/r5WrrmqK31jCrZxeHqIgqRzs0Xg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.2.0", - "eslint-visitor-keys": "^3.0.0" - } - }, - "@vitest/coverage-v8": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.1.tgz", - "integrity": "sha512-lRgUwjTMr8idXEbUPSNH4jjRZJXJCVY3BqUa+LDXyJVe3pldxYMn/r0HMqatKUGTp0Kyf1j5LfFoY6kRqRp7jw==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.1", - "@bcoe/v8-coverage": "^0.2.3", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.1.5", - "magic-string": "^0.30.1", - "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.1.0" - }, - "dependencies": { - "magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - } - } - }, - "@vitest/expect": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.1.tgz", - "integrity": "sha512-q2CD8+XIsQ+tHwypnoCk8Mnv5e6afLFvinVGCq3/BOT4kQdVQmY6rRfyKkwcg635lbliLPqbunXZr+L1ssUWiQ==", - "dev": true, - "requires": { - "@vitest/spy": "0.34.1", - "@vitest/utils": "0.34.1", - "chai": "^4.3.7" - } - }, - "@vitest/runner": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.1.tgz", - "integrity": "sha512-YfQMpYzDsYB7yqgmlxZ06NI4LurHWfrH7Wy3Pvf/z/vwUSgq1zLAb1lWcItCzQG+NVox+VvzlKQrYEXb47645g==", - "dev": true, - "requires": { - "@vitest/utils": "0.34.1", - "p-limit": "^4.0.0", - "pathe": "^1.1.1" - }, - "dependencies": { - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true - } - } - }, - "@vitest/snapshot": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.1.tgz", - "integrity": "sha512-0O9LfLU0114OqdF8lENlrLsnn024Tb1CsS9UwG0YMWY2oGTQfPtkW+B/7ieyv0X9R2Oijhi3caB1xgGgEgclSQ==", - "dev": true, - "requires": { - "magic-string": "^0.30.1", - "pathe": "^1.1.1", - "pretty-format": "^29.5.0" - }, - "dependencies": { - "magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - } - } - }, - "@vitest/spy": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.1.tgz", - "integrity": "sha512-UT4WcI3EAPUNO8n6y9QoEqynGGEPmmRxC+cLzneFFXpmacivjHZsNbiKD88KUScv5DCHVDgdBsLD7O7s1enFcQ==", - "dev": true, - "requires": { - "tinyspy": "^2.1.1" - } - }, - "@vitest/utils": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.1.tgz", - "integrity": "sha512-/ql9dsFi4iuEbiNcjNHQWXBum7aL8pyhxvfnD9gNtbjR9fUKAjxhj4AA3yfLXg6gJpMGGecvtF8Au2G9y3q47Q==", - "dev": true, - "requires": { - "diff-sequences": "^29.4.3", - "loupe": "^2.3.6", - "pretty-format": "^29.5.0" - } - }, - "@wessberg/browserslist-generator": { - "version": "1.0.47", - "resolved": "https://registry.npmjs.org/@wessberg/browserslist-generator/-/browserslist-generator-1.0.47.tgz", - "integrity": "sha512-2xNrz5LoRgdtrRphXBwt/bLVstuqB939rAIcHs8qEs1wokLq+hol9fhOIaxtJsn5LeEcBBFLFxtGOr9PbZd5HA==", - "dev": true, - "requires": { - "@mdn/browser-compat-data": "^3.2.4", - "@types/object-path": "^0.11.0", - "@types/semver": "^7.3.4", - "@types/ua-parser-js": "^0.7.35", - "browserslist": "4.16.3", - "caniuse-lite": "^1.0.30001208", - "object-path": "^0.11.5", - "semver": "^7.3.5", - "ua-parser-js": "^0.7.27" - }, - "dependencies": { - "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", - "escalade": "^3.1.1", - "node-releases": "^1.1.70" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@wessberg/stringutil": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@wessberg/stringutil/-/stringutil-1.0.19.tgz", - "integrity": "sha512-9AZHVXWlpN8Cn9k5BC/O0Dzb9E9xfEMXzYrNunwvkUTvuK7xgQPVRZpLo+jWCOZ5r8oBa8NIrHuPEu1hzbb6bg==", - "dev": true - }, - "@wessberg/ts-clone-node": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@wessberg/ts-clone-node/-/ts-clone-node-0.3.19.tgz", - "integrity": "sha512-BnJcU0ZwHxa5runiEkHzMZ6/ydxz+YYqBHOGQtf3eoxSZu2iWMPPaUfCum0O1/Ey5dqrrptUh+HmyMTzHPfdPA==", - "dev": true, - "requires": {} - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, - "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", - "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.0", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", - "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0", - "core-js-compat": "^3.9.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", - "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "boxen": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", - "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.0", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brotli-size": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-4.0.0.tgz", - "integrity": "sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==", - "dev": true, - "requires": { - "duplexer": "0.1.1" - } - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true - }, - "cacache": { - "version": "15.0.6", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.6.tgz", - "integrity": "sha512-g1WYDMct/jzW+JdWEyjaX2zoBkZ6ZT9VpOyp2I/VMtDsNLffNat3kqPFfi1eDRSK9/SuKGyORDHcQMcPF8sQ/w==", - "dev": true, - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caniuse-lite": { - "version": "1.0.30001223", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001223.tgz", - "integrity": "sha512-k/RYs6zc/fjbxTjaWZemeSmOjO0JJV+KguOBA3NwPup8uzxM1cMhR2BD9XmO86GuqaqTCO8CgkgH9Rz//vdDiA==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "charm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", - "integrity": "sha1-it02cVOm2aWBMxBSxAkJkdqZXjU=", - "dev": true, - "requires": { - "inherits": "^2.0.1" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "commenting": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/commenting/-/commenting-1.1.0.tgz", - "integrity": "sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "core-js-compat": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", - "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - } - } - }, - "deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dts-critic": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/dts-critic/-/dts-critic-3.3.6.tgz", - "integrity": "sha512-teL396KXkhkLsHt9lOG1NYemAv184uiOIQufrvhu1g+83ylUN8QjGZat784Ke4p2A4k0XHStD8NilbwYDGnNRA==", - "dev": true, - "requires": { - "@definitelytyped/header-parser": "latest", - "command-exists": "^1.2.8", - "rimraf": "^3.0.2", - "semver": "^6.2.0", - "tmp": "^0.2.1", - "yargs": "^15.3.1" - } - }, - "dtslint": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/dtslint/-/dtslint-3.7.0.tgz", - "integrity": "sha512-kVFV+zI2zwCUuwjLl2XVuIoSeLIqba6SmFlBKicwrlk1v0If+x6/cNm7UljSsqN5fJM/K2JJfd9NPPDVBXjjuA==", - "dev": true, - "requires": { - "@definitelytyped/header-parser": "latest", - "@definitelytyped/typescript-versions": "latest", - "@definitelytyped/utils": "latest", - "dts-critic": "latest", - "fs-extra": "^6.0.1", - "json-stable-stringify": "^1.0.1", - "strip-json-comments": "^2.0.1", - "tslint": "5.14.0", - "yargs": "^15.1.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tslint": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.14.0.tgz", - "integrity": "sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ==", - "dev": true, - "requires": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - } - } - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.727", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz", - "integrity": "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "esbuild": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", - "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.18.17", - "@esbuild/android-arm64": "0.18.17", - "@esbuild/android-x64": "0.18.17", - "@esbuild/darwin-arm64": "0.18.17", - "@esbuild/darwin-x64": "0.18.17", - "@esbuild/freebsd-arm64": "0.18.17", - "@esbuild/freebsd-x64": "0.18.17", - "@esbuild/linux-arm": "0.18.17", - "@esbuild/linux-arm64": "0.18.17", - "@esbuild/linux-ia32": "0.18.17", - "@esbuild/linux-loong64": "0.18.17", - "@esbuild/linux-mips64el": "0.18.17", - "@esbuild/linux-ppc64": "0.18.17", - "@esbuild/linux-riscv64": "0.18.17", - "@esbuild/linux-s390x": "0.18.17", - "@esbuild/linux-x64": "0.18.17", - "@esbuild/netbsd-x64": "0.18.17", - "@esbuild/openbsd-x64": "0.18.17", - "@esbuild/sunos-x64": "0.18.17", - "@esbuild/win32-arm64": "0.18.17", - "@esbuild/win32-ia32": "0.18.17", - "@esbuild/win32-x64": "0.18.17" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz", - "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.0.3", - "@humanwhocodes/config-array": "^0.6.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^6.0.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "eslint-formatter-pretty": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-4.1.0.tgz", - "integrity": "sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==", - "dev": true, - "requires": { - "@types/eslint": "^7.2.13", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "eslint-rule-docs": "^1.1.5", - "log-symbols": "^4.0.0", - "plur": "^4.0.0", - "string-width": "^4.2.0", - "supports-hyperlinks": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "eslint-rule-docs": { - "version": "1.1.231", - "resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.231.tgz", - "integrity": "sha512-egHz9A1WG7b8CS0x1P6P/Rj5FqZOjray/VjpJa14tMZalfRKvpE2ONJ3plCM7+PcinmU4tcmbPLv0VtwzSdLVA==", - "dev": true - }, - "eslint-scope": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", - "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", - "dev": true - }, - "esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", - "dev": true - }, - "espree": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", - "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", - "dev": true, - "requires": { - "acorn": "^8.5.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "eslint": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz", + "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==", "dev": true, "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "@eslint/eslintrc": "^1.0.3", + "@humanwhocodes/config-array": "^0.6.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^6.0.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "filesize": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.3.0.tgz", - "integrity": "sha512-ytx0ruGpDHKWVoiui6+BY/QMNngtDQ/pJaFwfBpQif0J63+E8DLdFyqS3NkKQn7vIruUEpoGD9JUJSg7Kp+I0g==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "ms": "2.0.0" + "color-convert": "^2.0.1" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", - "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "glob": "^7.1.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, - "requires": { - "duplexer": "^0.1.2" - }, - "dependencies": { - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true - } - } - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "highlight.js": { - "version": "10.7.2", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.2.tgz", - "integrity": "sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-cache-semantics": { + "eslint-formatter-pretty": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "resolved": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-4.1.0.tgz", + "integrity": "sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==", "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "@types/eslint": "^7.2.13", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "eslint-rule-docs": "^1.1.5", + "log-symbols": "^4.0.0", + "plur": "^4.0.0", + "string-width": "^4.2.0", + "supports-hyperlinks": "^2.0.0" }, "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true - } - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "eslint-rule-docs": { + "version": "1.1.231", + "resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.231.tgz", + "integrity": "sha512-egHz9A1WG7b8CS0x1P6P/Rj5FqZOjray/VjpJa14tMZalfRKvpE2ONJ3plCM7+PcinmU4tcmbPLv0VtwzSdLVA==", "dev": true }, - "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "eslint-scope": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", "dev": true, "requires": { - "minimatch": "^3.0.4" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" } }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "eslint-visitor-keys": "^2.0.0" }, "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "eslint-visitor-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", "dev": true }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true + "espree": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", + "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "dev": true, + "requires": { + "acorn": "^8.5.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.0.0" + } }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "estraverse": "^5.1.0" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "peer": true }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "irregular-plurals": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz", - "integrity": "sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==", + "expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", "dev": true }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "requires": { - "has": "^1.0.3" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + } } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "reusify": "^1.0.4" } }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "flat-cache": "^3.0.4" } }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "@types/estree": "*" + "to-regex-range": "^5.0.1" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "requires": { - "semver": "^7.5.3" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "glob": "^7.1.3" } } } }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true + }, + "foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true } } }, - "istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "jest-diff": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", - "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, - "jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "function-bind": "^1.1.2" } }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "hast-util-to-html": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.3.tgz", + "integrity": "sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==", + "dev": true, + "requires": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + } }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", "dev": true, "requires": { - "argparse": "^2.0.1" + "@types/hast": "^3.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", "dev": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "jsonify": "~0.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "irregular-plurals": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz", + "integrity": "sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==", "dev": true }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "requires": { - "minimist": "^1.2.5" + "hasown": "^2.0.2" } }, - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "is-extglob": "^2.1.1" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", - "dev": true - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true + "istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + } }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true + "istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "jackspeak": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz", + "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2" + } }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "jest-diff": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", + "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", "dev": true, "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.2" }, "dependencies": { "ansi-styles": { @@ -15596,9 +8689,9 @@ } }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -15637,636 +8730,271 @@ } } }, - "loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "dev": true, - "requires": { - "get-func-name": "^2.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, - "make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - }, - "dependencies": { - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - } - } - }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, - "marked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-1.0.0.tgz", - "integrity": "sha512-Wo+L1pWTVibfrSr+TTtMuiMfNzmZWiOPeO7rZsQUY5bgsxpHesBEcIWJloWVTFnrMXnf/TL30eTFSGJddmQAng==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "dev": true - }, - "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "dev": true, - "requires": { - "mime-db": "1.47.0" - } - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "minimist-options": { + "js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "dependencies": { - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - } - } - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "minipass": "^3.0.0" + "argparse": "^2.0.1" } }, - "minipass-fetch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", - "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", - "dev": true, - "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - } + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, - "minipass-json-stream": { + "json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } + "just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, - "mlly": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.0.tgz", - "integrity": "sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==", + "linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, "requires": { - "acorn": "^8.9.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "ufo": "^1.1.2" + "uc.micro": "^2.0.0" } }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "nise": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz", - "integrity": "sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==", + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "@sinonjs/commons": "^2.0.0", - "@sinonjs/fake-timers": "^10.0.2", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "dependencies": { - "@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "type-detect": "4.0.8" + "color-convert": "^2.0.1" } }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { - "isarray": "0.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } - } - } - }, - "node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "color-name": "~1.1.4" } }, - "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "has-flag": "^4.0.0" } } } }, - "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "loupe": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", "dev": true }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "yallist": "^4.0.0" } }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true }, - "npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, "requires": { - "semver": "^7.1.1" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" } }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", + "make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" + "semver": "^7.5.3" }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true } } }, - "npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", - "dev": true, - "requires": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true }, - "npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, "requires": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - }, - "dependencies": { - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "npm-package-arg": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.2.tgz", - "integrity": "sha512-6Eem455JsSMJY6Kpd3EyWE+n5hC+g9bSyHr9K9U2zqZb7+02+hObQ2c0+8iDk/mNF+8r1MhY44WypKJAkySIYA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" } }, - "npm-registry-client": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.6.0.tgz", - "integrity": "sha512-Qs6P6nnopig+Y8gbzpeN/dkt+n7IyVd8f45NTMotGk6Qo7GfBmzwYx6jRLoOOgKiMnaQfYxsuyQlD8Mc3guBhg==", + "mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", "dev": true, "requires": { - "concat-stream": "^1.5.2", - "graceful-fs": "^4.1.6", - "normalize-package-data": "~1.0.1 || ^2.0.0", - "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "npmlog": "2 || ^3.1.0 || ^4.0.0", - "once": "^1.3.3", - "request": "^2.74.0", - "retry": "^0.10.0", - "safe-buffer": "^5.1.1", - "semver": "2 >=2.2.1 || 3.x || 4 || 5", - "slide": "^1.1.3", - "ssri": "^5.2.4" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" } }, - "npm-registry-fetch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-10.1.1.tgz", - "integrity": "sha512-F6a3l+ffCQ7hvvN16YG5bpm1rPZntCg66PLHDQ1apWJPOCUVHoKnL2w5fqEaTVhp42dmossTyXeR7hTGirfXrg==", + "mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true + }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, "requires": { - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "dependencies": { "hosted-git-info": { @@ -16278,15 +9006,16 @@ "lru-cache": "^6.0.0" } }, - "npm-package-arg": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.2.tgz", - "integrity": "sha512-6Eem455JsSMJY6Kpd3EyWE+n5hC+g9bSyHr9K9U2zqZb7+02+hObQ2c0+8iDk/mNF+8r1MhY44WypKJAkySIYA==", + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "requires": { "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-license": "^3.0.1" } }, "semver": { @@ -16297,216 +9026,235 @@ "requires": { "lru-cache": "^6.0.0" } + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true } } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "dev": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", "dev": true }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true + "micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "dev": true, + "requires": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "dev": true }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "micromark-util-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", "dev": true }, - "object-path": { - "version": "0.11.5", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.5.tgz", - "integrity": "sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg==", + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "wrappy": "1" + "brace-expansion": "^1.1.7" } }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + } } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "dev": true }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true }, - "package-name-regex": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/package-name-regex/-/package-name-regex-1.0.9.tgz", - "integrity": "sha512-+U2oQCfEz2IlGqws8gmfKzdMDbSd6+RZp6UIFdKo+GAw3+o+kfnsgXkWtJ1JMoKhpP2kEvuYyTy1lXOEQEe0ZA==", + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "pacote": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.3.tgz", - "integrity": "sha512-GQxBX+UcVZrrJRYMK2HoG+gPeSUX/rQhnbPkkGrCYa4n2F/bgClFPaMm0nsdnYrxnmUy85uMHoFXZ0jTD0drew==", + "nise": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz", + "integrity": "sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==", "dev": true, "requires": { - "@npmcli/git": "^2.0.1", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^10.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" + "@sinonjs/commons": "^2.0.0", + "@sinonjs/fake-timers": "^10.0.2", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" }, "dependencies": { - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "type-detect": "4.0.8" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, - "npm-package-arg": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.2.tgz", - "integrity": "sha512-6Eem455JsSMJY6Kpd3EyWE+n5hC+g9bSyHr9K9U2zqZb7+02+hObQ2c0+8iDk/mNF+8r1MhY44WypKJAkySIYA==", + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" + "isarray": "0.0.1" } - }, + } + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "oniguruma-to-es": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-0.4.1.tgz", + "integrity": "sha512-rNcEohFz095QKGRovP/yqPIKc+nP+Sjs4YTHMv33nMePGKrq/r2eu9Yh4646M5XluGJsUnmwoXuiXE69KDs+fQ==", + "dev": true, + "requires": { + "emoji-regex-xs": "^1.0.0", + "regex": "^5.0.0", + "regex-recursion": "^4.2.1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "package-name-regex": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/package-name-regex/-/package-name-regex-2.0.6.tgz", + "integrity": "sha512-gFL35q7kbE/zBaPA3UKhp2vSzcPYx2ecbYuwv1ucE9Il6IIgBDweBlH8D68UFGZic2MkllKa2KHCfC1IQBQUYA==", + "dev": true + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -16528,18 +9276,6 @@ "lines-and-columns": "^1.1.6" } }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "parsimmon": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/parsimmon/-/parsimmon-1.17.0.tgz", - "integrity": "sha512-gp5yNYs0Lyv5Mp6hj+JMzsHaM4Mel0WuK2iHYKX32ActYAQdsSq+t4nVsqlOpUCiMYdTX1wFISLvugrAl9harg==", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -16559,16 +9295,34 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true + "path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "requires": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "dependencies": { + "lru-cache": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", + "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", + "dev": true + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true + } + } }, "path-type": { "version": "4.0.0", @@ -16577,27 +9331,21 @@ "dev": true }, "pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, "picomatch": { @@ -16606,17 +9354,6 @@ "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", "dev": true }, - "pkg-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", - "dev": true, - "requires": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" - } - }, "plur": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", @@ -16627,22 +9364,14 @@ } }, "postcss": { - "version": "8.4.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", - "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "dev": true, "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "dependencies": { - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true - } + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" } }, "prelude-ls": { @@ -16670,56 +9399,16 @@ } } }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "dependencies": { - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - } - } - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", "dev": true }, "punycode": { @@ -16728,10 +9417,10 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "dev": true }, "queue-microtask": { @@ -16746,49 +9435,12 @@ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, - "read-package-json-fast": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", - "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -16859,30 +9511,6 @@ } } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, "redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -16893,111 +9521,91 @@ "strip-indent": "^3.0.0" } }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "regex": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/regex/-/regex-5.0.2.tgz", + "integrity": "sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==", "dev": true, "requires": { - "regenerate": "^1.4.0" + "regex-utilities": "^2.3.0" } }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "regex-recursion": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-4.2.1.tgz", + "integrity": "sha512-QHNZyZAeKdndD1G3bKAbBEKOSSK4KOHQrAJ01N1LJeb0SoH4DJIeFhp0uUpETgONifS4+P3sOgoA1dhzgrQvhA==", "dev": true, "requires": { - "@babel/runtime": "^7.8.4" + "regex-utilities": "^2.3.0" } }, + "regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "dev": true + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "replace-in-files-cli": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/replace-in-files-cli/-/replace-in-files-cli-3.0.0.tgz", + "integrity": "sha512-A2VjOaPF8yjiaRjuIlvX3PB0uRMQ3DpnKG4yg38wjPrqR0OSzD00ubOZqqwAunoT5emKjEZPvdkm6JRVJrBmlQ==", "dev": true, "requires": { - "jsesc": "~0.5.0" + "escape-string-regexp": "^5.0.0", + "globby": "^14.0.1", + "meow": "^13.2.0", + "normalize-path": "^3.0.0", + "write-file-atomic": "^5.0.1" }, "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true - } - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + }, + "globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "dev": true, + "requires": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + } + }, + "ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true + }, + "meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true + }, + "path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true + }, + "slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true } } @@ -17008,28 +9616,17 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, - "retry": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", - "dev": true - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -17037,287 +9634,116 @@ "dev": true }, "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-filesize": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-filesize/-/rollup-plugin-filesize-9.1.1.tgz", - "integrity": "sha512-x0r2A85TCEdRwF3rm+bcN4eAmbER8tt+YVf88gBQ6sLyH4oGcnNLPQqAUX+v7mIvHC/y59QwZvo6vxaC2ias6Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.8", - "boxen": "^5.0.0", - "brotli-size": "4.0.0", - "colors": "^1.4.0", - "filesize": "^6.1.0", - "gzip-size": "^6.0.0", - "pacote": "^11.2.7", - "terser": "^5.6.0" - } - }, - "rollup-plugin-license": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-license/-/rollup-plugin-license-2.3.0.tgz", - "integrity": "sha512-oi8pL59fVTwXCkLUsZ8dVGVJjO7Hcc5UT0chJvKd0MktPgeYHSadkaicAYUemdYHHpjb0D3DyvedZAEPt+2r8w==", - "dev": true, - "requires": { - "commenting": "1.1.0", - "glob": "7.1.6", - "lodash": "4.17.21", - "magic-string": "0.25.7", - "mkdirp": "1.0.4", - "moment": "2.29.1", - "package-name-regex": "1.0.9", - "spdx-expression-validate": "2.0.0", - "spdx-satisfies": "5.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - } - } - }, - "rollup-plugin-ts": { - "version": "1.3.12", - "resolved": "https://registry.npmjs.org/rollup-plugin-ts/-/rollup-plugin-ts-1.3.12.tgz", - "integrity": "sha512-HqKfV2o064/71x4EDNWUgYZIV6lc0yENl3HLCBQZLedXecfKS2vX5GtQ+cM4L2QEniHM+fn1IP17JeCTIEidYw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", "dev": true, "requires": { - "@babel/core": "^7.13.15", - "@babel/plugin-proposal-async-generator-functions": "^7.13.15", - "@babel/plugin-proposal-json-strings": "^7.13.8", - "@babel/plugin-proposal-object-rest-spread": "^7.13.8", - "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.13.15", - "@babel/preset-env": "^7.13.15", - "@babel/runtime": "^7.13.10", - "@rollup/pluginutils": "^4.1.0", - "@types/babel__core": "^7.1.14", - "@wessberg/browserslist-generator": "^1.0.47", - "@wessberg/stringutil": "^1.0.19", - "@wessberg/ts-clone-node": "^0.3.19", - "browserslist": "^4.16.4", - "chalk": "^4.1.0", - "magic-string": "^0.25.7", - "slash": "^3.0.0", - "tslib": "^2.2.0" + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" }, "dependencies": { - "@rollup/pluginutils": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", - "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "balanced-match": "^1.0.0" } }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "glob": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, "requires": { - "color-name": "~1.1.4" + "brace-expansion": "^2.0.1" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, + "peer": true, "requires": { - "queue-microtask": "^1.2.2" + "fsevents": "~2.3.2" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "rollup-plugin-license": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-license/-/rollup-plugin-license-3.5.3.tgz", + "integrity": "sha512-r3wImZSo2d6sEk9BRJtlzeI/upjyjnpthy06Fdl0EzqRrlg3ULb9KQR7xHJI0zuayW/8bchEXSF5dO6dha4OyA==", "dev": true, "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "commenting": "~1.1.0", + "fdir": "6.3.0", + "lodash": "~4.17.21", + "magic-string": "~0.30.0", + "moment": "~2.30.1", + "package-name-regex": "~2.0.6", + "spdx-expression-validate": "~2.0.0", + "spdx-satisfies": "~5.0.1" + }, + "dependencies": { + "fdir": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.3.0.tgz", + "integrity": "sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==", + "dev": true, + "requires": {} + }, + "magic-string": { + "version": "0.30.13", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz", + "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==", "dev": true, "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "optional": true, + "peer": true } } }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" + "queue-microtask": "^1.2.2" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -17333,15 +9759,18 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "shiki": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.23.1.tgz", + "integrity": "sha512-8kxV9TH4pXgdKGxNOkrSMydn1Xf6It8lsle0fiqxf7a1149K1WGtdOu3Zb91T5r1JpvRPxqxU3C2XdZZXQnrig==", "dev": true, "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "@shikijs/core": "1.23.1", + "@shikijs/engine-javascript": "1.23.1", + "@shikijs/engine-oniguruma": "1.23.1", + "@shikijs/types": "1.23.1", + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4" } }, "siginfo": { @@ -17350,12 +9779,6 @@ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, "sinon": { "version": "15.2.0", "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.2.0.tgz", @@ -17399,55 +9822,16 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true - }, - "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", - "dev": true - }, - "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "dev": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz", - "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4", - "socks": "^2.3.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -17462,10 +9846,10 @@ } } }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "dev": true }, "spdx-compare": { @@ -17527,9 +9911,9 @@ "dev": true }, "spdx-satisfies": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-5.0.0.tgz", - "integrity": "sha512-/hGhwh20BeGmkA+P/lm06RvXD94JduwNxtx/oX3B5ClPt1/u/m5MCaDNo1tV3Y9laLkQr/NRde63b9lLMhlNfw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-5.0.1.tgz", + "integrity": "sha512-Nwor6W6gzFp8XX4neaKQ7ChV4wmpSh2sSDemMFSzHxpTw460jxFYeOn+jq4ybnSSw/5sc3pjka9MQPouksQNpw==", "dev": true, "requires": { "spdx-compare": "^1.0.0", @@ -17543,32 +9927,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - }, "stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -17581,45 +9939,77 @@ "integrity": "sha512-0T1/E+0PBlM5LQJfekMS51SFC5euKQwUJ7nGoSGmsHoKx4o+lD1CzHxQHTZn7vYHqlTTJNvlp7Q70/qapYF7NQ==", "peer": true }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, "std-env": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz", - "integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", "dev": true }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + } } }, "strip-indent": { @@ -17631,30 +10021,6 @@ "min-indent": "^1.0.0" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "strip-literal": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", - "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", - "dev": true, - "requires": { - "acorn": "^8.10.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, "supports-hyperlinks": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", @@ -17682,73 +10048,101 @@ } } }, - "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "terser": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", "dev": true, "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" } }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", "dev": true, "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "balanced-match": "^1.0.0" } - } - } - }, - "terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + }, + "glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true + }, + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + } } } }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -17756,36 +10150,33 @@ "dev": true }, "tinybench": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz", - "integrity": "sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true }, - "tinypool": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", - "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "tinyexec": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", "dev": true }, - "tinyspy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", - "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", + "tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", "dev": true }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } + "tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true }, "to-regex-range": { @@ -17797,22 +10188,12 @@ "is-number": "^7.0.0" } }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", "dev": true }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, "trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", @@ -17820,12 +10201,12 @@ "dev": true }, "tsd": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.28.1.tgz", - "integrity": "sha512-FeYrfJ05QgEMW/qOukNCr4fAJHww4SaKnivAXRv4g5kj4FeLpNV7zH4dorzB9zAfVX4wmA7zWu/wQf7kkcvfbw==", + "version": "0.31.2", + "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.31.2.tgz", + "integrity": "sha512-VplBAQwvYrHzVihtzXiUVXu5bGcr7uH1juQZ1lmKgkuGNGT+FechUCqmx9/zk7wibcqR2xaNEwCkDyKh+VVZnQ==", "dev": true, "requires": { - "@tsd/typescript": "~5.0.2", + "@tsd/typescript": "~5.4.3", "eslint-formatter-pretty": "^4.1.0", "globby": "^11.0.1", "jest-diff": "^29.0.3", @@ -17838,39 +10219,9 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true + "optional": true, + "peer": true }, "type-check": { "version": "0.4.0", @@ -17893,184 +10244,120 @@ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "typedoc": { - "version": "0.17.8", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.17.8.tgz", - "integrity": "sha512-/OyrHCJ8jtzu+QZ+771YaxQ9s4g5Z3XsQE3Ma7q+BL392xxBn4UMvvCdVnqKC2T/dz03/VXSLVKOP3lHmDdc/w==", - "dev": true, - "requires": { - "fs-extra": "^8.1.0", - "handlebars": "^4.7.6", - "highlight.js": "^10.0.0", - "lodash": "^4.17.15", - "lunr": "^2.3.8", - "marked": "1.0.0", - "minimatch": "^3.0.0", - "progress": "^2.0.3", - "shelljs": "^0.8.4", - "typedoc-default-themes": "^0.10.2" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "typedoc-default-themes": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.10.2.tgz", - "integrity": "sha512-zo09yRj+xwLFE3hyhJeVHWRSPuKEIAsFK5r2u47KL/HBKqpwdUSanoaz5L34IKiSATFrjG5ywmIu98hPVMfxZg==", - "dev": true, - "requires": { - "lunr": "^2.3.8" - } - }, - "typedoc-plugin-markdown": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-2.4.2.tgz", - "integrity": "sha512-BBH+9/Uq5XbsqfzCDl8Jq4iaLXRMXRuAHZRFarAZX7df8+F3vUjDx/WHWoWqbZ/XUFzduLC2Iuy2qwsJX8SQ7A==", + "version": "0.26.11", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.11.tgz", + "integrity": "sha512-sFEgRRtrcDl2FxVP58Ze++ZK2UQAEvtvvH8rRlig1Ja3o7dDaMHmaBfvJmdGnNEFaLTpQsN8dpvZaTqJSu/Ugw==", "dev": true, "requires": { - "fs-extra": "^9.0.1", - "handlebars": "^4.7.6" + "lunr": "^2.3.9", + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "shiki": "^1.16.2", + "yaml": "^2.5.1" }, "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "balanced-match": "^1.0.0" } }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "brace-expansion": "^2.0.1" } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true } } }, - "typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", - "dev": true + "typedoc-plugin-markdown": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.2.10.tgz", + "integrity": "sha512-PLX3pc1/7z13UJm4TDE9vo9jWGcClFUErXXtd5LdnoLjV6mynPpqZLU992DwMGFSRqJFZeKbVyqlNNeNHnk2tQ==", + "dev": true, + "requires": {} }, - "ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", - "dev": true + "typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "peer": true }, - "ufo": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.2.0.tgz", - "integrity": "sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==", + "uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", "dev": true }, - "uglify-js": { - "version": "3.13.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.5.tgz", - "integrity": "sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw==", + "undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true, - "optional": true + "optional": true, + "peer": true }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "@types/unist": "^3.0.0" } }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "requires": { - "unique-slug": "^2.0.0" + "@types/unist": "^3.0.0" } }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, "requires": { - "imurmurhash": "^0.1.4" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } }, "uri-js": { "version": "4.4.1", @@ -18081,65 +10368,12 @@ "punycode": "^2.1.0" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "dependencies": { - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - } - } - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -18150,108 +10384,159 @@ "spdx-expression-parse": "^3.0.0" } }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "dev": true, "requires": { - "builtins": "^1.0.3" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" } }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" } }, "vite": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.7.tgz", - "integrity": "sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==", + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", "dev": true, "requires": { - "esbuild": "^0.18.10", - "fsevents": "~2.3.2", - "postcss": "^8.4.26", - "rollup": "^3.25.2" + "esbuild": "^0.21.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "dependencies": { "rollup": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.27.0.tgz", - "integrity": "sha512-aOltLCrYZ0FhJDm7fCqwTjIUEVjWjcydKBV/Zeid6Mn8BWgDCUBBWT5beM5ieForYNo/1ZHuGJdka26kvQ3Gzg==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz", + "integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==", "dev": true, "requires": { + "@rollup/rollup-android-arm-eabi": "4.27.4", + "@rollup/rollup-android-arm64": "4.27.4", + "@rollup/rollup-darwin-arm64": "4.27.4", + "@rollup/rollup-darwin-x64": "4.27.4", + "@rollup/rollup-freebsd-arm64": "4.27.4", + "@rollup/rollup-freebsd-x64": "4.27.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.27.4", + "@rollup/rollup-linux-arm-musleabihf": "4.27.4", + "@rollup/rollup-linux-arm64-gnu": "4.27.4", + "@rollup/rollup-linux-arm64-musl": "4.27.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4", + "@rollup/rollup-linux-riscv64-gnu": "4.27.4", + "@rollup/rollup-linux-s390x-gnu": "4.27.4", + "@rollup/rollup-linux-x64-gnu": "4.27.4", + "@rollup/rollup-linux-x64-musl": "4.27.4", + "@rollup/rollup-win32-arm64-msvc": "4.27.4", + "@rollup/rollup-win32-ia32-msvc": "4.27.4", + "@rollup/rollup-win32-x64-msvc": "4.27.4", + "@types/estree": "1.0.6", "fsevents": "~2.3.2" } } } }, "vite-node": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.1.tgz", - "integrity": "sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.5.tgz", + "integrity": "sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==", "dev": true, "requires": { "cac": "^6.7.14", - "debug": "^4.3.4", - "mlly": "^1.4.0", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0" + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0" } }, - "vitest": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.1.tgz", - "integrity": "sha512-G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVlQ==", + "vite-plugin-dts-bundle-generator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/vite-plugin-dts-bundle-generator/-/vite-plugin-dts-bundle-generator-2.0.5.tgz", + "integrity": "sha512-vv6rA43o9+IW3CkvDkOZi70e5e+CTf0HD2dGZznXnbSdu1R1+1aCoEHMtUV+huU5+O95LpAbLfU/2Am/JNM3FA==", "dev": true, "requires": { - "@types/chai": "^4.3.5", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.34.1", - "@vitest/runner": "0.34.1", - "@vitest/snapshot": "0.34.1", - "@vitest/spy": "0.34.1", - "@vitest/utils": "0.34.1", - "acorn": "^8.9.0", - "acorn-walk": "^8.2.0", - "cac": "^6.7.14", - "chai": "^4.3.7", - "debug": "^4.3.4", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.1", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "strip-literal": "^1.0.1", - "tinybench": "^2.5.0", - "tinypool": "^0.7.0", - "vite": "^3.0.0 || ^4.0.0", - "vite-node": "0.34.1", - "why-is-node-running": "^2.2.2" - }, - "dependencies": { + "dts-bundle-generator": "^9.3.1" + } + }, + "vite-plugin-typescript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vite-plugin-typescript/-/vite-plugin-typescript-1.0.4.tgz", + "integrity": "sha512-vTfXw5WzXx+qbPQhjEUVGB+DoU183FdDc2y0HfNDfpE/anYtdefKVv8re3Po/IZiKZULmwO/pY031m0btkIxUw==", + "dev": true, + "requires": {} + }, + "vite-plugin-typescript-transform": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vite-plugin-typescript-transform/-/vite-plugin-typescript-transform-1.3.1.tgz", + "integrity": "sha512-TTG0TaH5vHZcg4ebAS3Md63hKClxJyVpqIjBzx17WNW/NvRCZm3i5a0C3cgZG2D5wp76zHaTpGOTzcNZ9FQJsA==", + "dev": true, + "requires": {} + }, + "vitest": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.5.tgz", + "integrity": "sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==", + "dev": true, + "requires": { + "@vitest/expect": "2.1.5", + "@vitest/mocker": "2.1.5", + "@vitest/pretty-format": "^2.1.5", + "@vitest/runner": "2.1.5", + "@vitest/snapshot": "2.1.5", + "@vitest/spy": "2.1.5", + "@vitest/utils": "2.1.5", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", + "pathe": "^1.1.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.5", + "why-is-node-running": "^2.3.0" + }, + "dependencies": { + "@vitest/mocker": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.5.tgz", + "integrity": "sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==", + "dev": true, + "requires": { + "@vitest/spy": "2.1.5", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" + } + }, + "estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0" + } + }, "magic-string": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", - "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", + "version": "0.30.13", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz", + "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==", "dev": true, "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.5.0" } } } @@ -18265,38 +10550,31 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "why-is-node-running": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", - "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "requires": { "siginfo": "^2.0.0", "stackback": "0.0.2" } }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "string-width": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "dependencies": { "ansi-regex": { @@ -18305,6 +10583,30 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -18339,20 +10641,8 @@ } } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, @@ -18363,9 +10653,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -18405,23 +10695,23 @@ "dev": true }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } } } @@ -18432,129 +10722,47 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "find-up": { + "signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "dev": true + }, "yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true + }, + "zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true } } } diff --git a/package.json b/package.json index 1248b647..2a554a97 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "planck", - "version": "1.0.9", + "version": "1.1.0-alpha", "description": "2D JavaScript/TypeScript physics engine for cross-platform HTML5 game development", "homepage": "https://github.com/piqnt/planck.js", "keywords": [ @@ -54,35 +54,25 @@ "stage-js": "^1.0.0-alpha.5" }, "devDependencies": { - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-transform-runtime": "^7.13.9", - "@babel/preset-env": "^7.13.9", - "@rollup/plugin-commonjs": "^17.1.0", - "@rollup/plugin-node-resolve": "^11.2.0", - "@rollup/plugin-replace": "^2.4.1", "@types/chai": "^4.3.5", - "@types/estree": "^0.0.50", "@typescript-eslint/eslint-plugin": "^5.2.0", "@typescript-eslint/parser": "^5.2.0", - "@vitest/coverage-v8": "^0.34.1", + "@vitest/coverage-v8": "^2.1.5", "ajv": "^6.10.2", - "dtslint": "^3.6.9", "eslint": "^8.1.0", - "esm": "^3.2.25", - "express": "^4.17.1", - "handlebars": "^4.7.6", - "rollup": "^2.77.4", - "rollup-plugin-filesize": "^9.1.1", - "rollup-plugin-license": "^2.3.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-ts": "^1.3.10", + "replace-in-files-cli": "^3.0.0", + "rimraf": "^6.0.1", + "rollup-plugin-license": "^3.5.3", "sinon": "^15.2.0", - "tsd": "^0.28.1", - "typedoc": "^0.17.8", - "typedoc-plugin-markdown": "^2.3.1", - "typescript": "^4.0.0-beta", - "vite": "^4.4.7", - "vitest": "^0.34.1" + "terser": "^5.36.0", + "tsd": "^0.31.2", + "typedoc": "^0.26.11", + "typedoc-plugin-markdown": "^4.2.10", + "vite": "^5.4.11", + "vite-plugin-dts-bundle-generator": "^2.0.5", + "vite-plugin-typescript": "^1.0.4", + "vite-plugin-typescript-transform": "^1.3.1", + "vitest": "^2.1.5" }, "scripts": { "lint": "eslint './src/**/*.ts' './testbed/**/*.ts'", @@ -90,13 +80,14 @@ "test:coverage": "vitest run --coverage", "test:types": "tsd --typings=./dist/planck.d.ts && tsd --typings=./dist/planck-with-testbed.d.ts", "preflight": "npm run lint && npm run test:types && npm run test", - "build": "rollup -c", - "watch": "rollup -c --watch", "testbed": "npm run dev", "dev": "vite", - "vite-build": "vite build", - "vite-preview": "vite preview", + "build": "rimraf ./dist/* && vite build && BUILD_TESTBED=true vite build && npm run terser-core && npm run terser-testbed", + "terser-core": "terser ./dist/planck.js -o ./dist/planck.min.js --source-map", + "terser-testbed": "terser ./dist/planck-with-testbed.js -o ./dist/planck-with-testbed.min.js --source-map", + "watch": "vite build --watch", + "preview": "vite preview", "benchmark": "git log -n 1 && vite-node ./benchmark/node", - "typedoc": "typedoc --options typedoc.json" + "typedoc": "typedoc --options typedoc.json && mv ./docs/pages/api/README.md ./docs/pages/api/index.md && ./node_modules/.bin/replace-in-files ./docs/pages/api/* --string '.md' --replacement ''" } } diff --git a/rollup.config.js b/rollup.config.js deleted file mode 100644 index da1170d4..00000000 --- a/rollup.config.js +++ /dev/null @@ -1,129 +0,0 @@ -const { terser } = require('rollup-plugin-terser'); -const license = require('rollup-plugin-license'); -const replace = require('@rollup/plugin-replace'); -const filesize = require('rollup-plugin-filesize'); -const typescript = require('rollup-plugin-ts'); -const { nodeResolve } = require('@rollup/plugin-node-resolve'); - -const declarationTransformer = require('./build-utils/declarationTransformer'); -const licenseBanner = require('./build-utils/license'); - - -module.exports = [ - { - format: 'es', - src: 'src/main.ts', - dest: 'dist/planck.mjs', - minimize: false, - sourcemap: false, - declaration: true, - }, - { - format: 'umd', - src: 'src/main.ts', - dest: 'dist/planck.js', - minimize: false, - sourcemap: false, - declaration: false, - }, - { - format: 'umd', - src: 'src/main.ts', - dest: 'dist/planck.min.js', - minimize: true, - sourcemap: true, - declaration: false, - }, - { - format: 'es', - src: 'testbed/main.ts', - dest: 'dist/planck-with-testbed.mjs', - minimize: false, - sourcemap: false, - declaration: true, - }, - { - format: 'umd', - src: 'testbed/main.ts', - dest: 'dist/planck-with-testbed.js', - minimize: false, - sourcemap: false, - declaration: false, - }, - { - format: 'umd', - src: 'testbed/main.ts', - dest: 'dist/planck-with-testbed.min.js', - minimize: true, - sourcemap: true, - declaration: false, - } -].map(options => { - const config = { - input: options.src, - output: { - name: 'planck', - file: options.dest, - format: options.format, - sourcemap: true, - }, - plugins: [ - replace({ - preventAssignment: true, - values: { - 'ASSERT': JSON.stringify(false), - '_ASSERT': JSON.stringify(false), - // we are still compiling to ES5, so we keep constructor factories until v2 - 'CONSTRUCTOR_FACTORY': JSON.stringify(true), - '_CONSTRUCTOR_FACTORY': JSON.stringify(true), - 'PLANCK_VERSION': JSON.stringify(process.env.npm_package_version), - }, - }), - nodeResolve(), - typescript({ - sourceMap: false, - tsconfig: resolvedConfig => ({ - ...resolvedConfig, - declaration: options.declaration, - declarationMap: options.declaration - }), - transformers: { - afterDeclarations: [ - declarationTransformer({ - classes: [ - 'Vec2', - 'Vec3', - 'Rot', - 'Transform', - 'AABB', - 'World', - 'BoxShape', - 'CircleShape', - 'ChainShape', - 'EdgeShape', - 'PolygonShape', - 'DistanceJoint', - 'FrictionJoint', - 'GearJoint', - 'MotorJoint', - 'MouseJoint', - 'PrismaticJoint', - 'PulleyJoint', - 'RevoluteJoint', - 'RopeJoint', - 'WeldJoint', - 'WheelJoint', - ] - }) - ] - }, - }), - license({ - banner: licenseBanner, - }), - {...(options.minimize ? terser() : null)}, - filesize(), - ] - }; - return config; -}) diff --git a/src/collision/AABB.ts b/src/collision/AABB.ts index 5e61ab85..20f12410 100644 --- a/src/collision/AABB.ts +++ b/src/collision/AABB.ts @@ -51,11 +51,20 @@ export interface RayCastOutput { fraction: number; } +/** Axis-aligned bounding box */ export interface AABBValue { lowerBound: Vec2Value; upperBound: Vec2Value; } +declare module "./AABB" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function AABB(lower?: Vec2Value, upper?: Vec2Value): AABB; +} + +/** Axis-aligned bounding box */ +// @ts-expect-error export class AABB { lowerBound: Vec2; upperBound: Vec2; diff --git a/src/collision/shape/BoxShape.ts b/src/collision/shape/BoxShape.ts index a8785651..bf225b8e 100644 --- a/src/collision/shape/BoxShape.ts +++ b/src/collision/shape/BoxShape.ts @@ -28,10 +28,16 @@ import { PolygonShape } from "./PolygonShape"; /** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === "undefined" ? false : CONSTRUCTOR_FACTORY; +declare module "./BoxShape" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function BoxShape(halfWidth: number, halfHeight: number, center?: Vec2Value, angle?: number): BoxShape; +} /** * A rectangle polygon which extend PolygonShape. */ +// @ts-expect-error export class BoxShape extends PolygonShape { // note that box is serialized/deserialized as polygon static TYPE = "polygon" as const; diff --git a/src/collision/shape/ChainShape.ts b/src/collision/shape/ChainShape.ts index a6ec0e61..8da033f3 100644 --- a/src/collision/shape/ChainShape.ts +++ b/src/collision/shape/ChainShape.ts @@ -39,6 +39,11 @@ import { EdgeShape } from "./EdgeShape"; /** @internal */ const v1 = matrix.vec2(0, 0); /** @internal */ const v2 = matrix.vec2(0, 0); +declare module "./ChainShape" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function ChainShape(vertices?: Vec2Value[], loop?: boolean): ChainShape; +} /** * A chain shape is a free form sequence of line segments. The chain has @@ -48,6 +53,7 @@ import { EdgeShape } from "./EdgeShape"; * * WARNING: The chain will not collide properly if there are self-intersections. */ +// @ts-expect-error export class ChainShape extends Shape { static TYPE = "chain" as const; /** @hidden */ m_type: "chain"; diff --git a/src/collision/shape/CircleShape.ts b/src/collision/shape/CircleShape.ts index a4910601..278dcc39 100644 --- a/src/collision/shape/CircleShape.ts +++ b/src/collision/shape/CircleShape.ts @@ -39,6 +39,17 @@ import { DistanceProxy } from "../Distance"; /** @internal */ const temp = matrix.vec2(0, 0); +declare module "./CircleShape" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function CircleShape(position: Vec2Value, radius?: number): CircleShape; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function CircleShape(radius?: number): CircleShape; +} + +/** Circle shape. */ +// @ts-expect-error export class CircleShape extends Shape { static TYPE = "circle" as const; /** @hidden */ m_type: "circle"; diff --git a/src/collision/shape/EdgeShape.ts b/src/collision/shape/EdgeShape.ts index 8e6d18d4..6aa306c5 100644 --- a/src/collision/shape/EdgeShape.ts +++ b/src/collision/shape/EdgeShape.ts @@ -39,11 +39,18 @@ import { DistanceProxy } from "../Distance"; /** @internal */ const v1 = matrix.vec2(0, 0); /** @internal */ const v2 = matrix.vec2(0, 0); +declare module "./EdgeShape" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function EdgeShape(v1?: Vec2Value, v2?: Vec2Value): EdgeShape; +} + /** * A line segment (edge) shape. These can be connected in chains or loops to * other edge shapes. The connectivity information is used to ensure correct * contact normals. */ +// @ts-expect-error export class EdgeShape extends Shape { static TYPE = "edge" as const; /** @hidden */ m_type: "edge"; diff --git a/src/collision/shape/PolygonShape.ts b/src/collision/shape/PolygonShape.ts index 01181ecd..d3a83c08 100644 --- a/src/collision/shape/PolygonShape.ts +++ b/src/collision/shape/PolygonShape.ts @@ -46,12 +46,19 @@ import { Shape } from "../Shape"; /** @internal */ const center = matrix.vec2(0, 0); /** @internal */ const s = matrix.vec2(0, 0); +declare module "./PolygonShape" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function PolygonShape(vertices?: Vec2Value[]): PolygonShape; +} + /** * A convex polygon. It is assumed that the interior of the polygon is to the * left of each edge. Polygons have a maximum number of vertices equal to * Settings.maxPolygonVertices. In most cases you should not need many vertices * for a convex polygon. extends Shape */ +// @ts-expect-error export class PolygonShape extends Shape { static TYPE = "polygon" as const; /** @hidden */ m_type: "polygon"; diff --git a/src/common/Rot.ts b/src/common/Rot.ts index a122f3a5..974c7ebf 100644 --- a/src/common/Rot.ts +++ b/src/common/Rot.ts @@ -37,6 +37,20 @@ export interface RotValue { c: number; } +declare module "./Rot" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function Rot(angle: number): Rot; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function Rot(obj: RotValue): Rot; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function Rot(): Rot; +} + +/** Rotation */ +// @ts-expect-error export class Rot { /** sin(angle) */ s: number; diff --git a/src/common/Transform.ts b/src/common/Transform.ts index 92d2c9a6..3490803f 100644 --- a/src/common/Transform.ts +++ b/src/common/Transform.ts @@ -35,11 +35,18 @@ export type TransformValue = { q: RotValue; }; +declare module "./Transform" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function Transform(position?: Vec2Value, rotation?: number): Transform; +} + /** * A transform contains translation and rotation. It is used to represent the * position and orientation of rigid frames. Initialize using a position vector * and a rotation. */ +// @ts-expect-error export class Transform { /** position */ p: Vec2; diff --git a/src/common/Vec2.ts b/src/common/Vec2.ts index 2b38f819..1e762e4d 100644 --- a/src/common/Vec2.ts +++ b/src/common/Vec2.ts @@ -33,17 +33,32 @@ import { EPSILON } from "./Math"; /** @internal */ const math_min = Math.min; +/** 2D vector */ export interface Vec2Value { x: number; y: number; } +declare module "./Vec2" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function Vec2(x: number, y: number): Vec2; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function Vec2(obj: Vec2Value): Vec2; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function Vec2(): Vec2; +} + +/** 2D vector */ +// @ts-expect-error export class Vec2 { x: number; y: number; constructor(x: number, y: number); - constructor(obj: { x: number, y: number }); + constructor(obj: Vec2Value); constructor(); // tslint:disable-next-line:typedef constructor(x?, y?) { diff --git a/src/common/Vec3.ts b/src/common/Vec3.ts index 22842ba4..21abca1a 100644 --- a/src/common/Vec3.ts +++ b/src/common/Vec3.ts @@ -27,19 +27,34 @@ /** @internal */ const _CONSTRUCTOR_FACTORY = typeof CONSTRUCTOR_FACTORY === "undefined" ? false : CONSTRUCTOR_FACTORY; +/** 3D vector */ export interface Vec3Value { x: number; y: number; z: number; } +declare module "./Vec3" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function Vec3(x: number, y: number, z: number): Vec3; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function Vec3(obj: Vec3Value): Vec3; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function Vec3(): Vec3; +} + +/** 3D vector */ +// @ts-expect-error export class Vec3 { x: number; y: number; z: number; constructor(x: number, y: number, z: number); - constructor(obj: { x: number, y: number, z: number }); + constructor(obj: Vec3Value); constructor(); constructor(x?, y?, z?) { if (_CONSTRUCTOR_FACTORY && !(this instanceof Vec3)) { diff --git a/src/dynamics/Body.ts b/src/dynamics/Body.ts index f795e2b5..1c9f1a79 100644 --- a/src/dynamics/Body.ts +++ b/src/dynamics/Body.ts @@ -41,6 +41,25 @@ import { Style } from "../util/Testbed"; /** @internal */ const _ASSERT = typeof ASSERT === "undefined" ? false : ASSERT; +/** + * A static body does not move under simulation and behaves as if it has infinite mass. + * Internally, zero is stored for the mass and the inverse mass. + * Static bodies can be moved manually by the user. + * A static body has zero velocity. + * Static bodies do not collide with other static or kinematic bodies. + * + * A kinematic body moves under simulation according to its velocity. + * Kinematic bodies do not respond to forces. + * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity. + * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass. + * Kinematic bodies do not collide with other kinematic or static bodies. + * + * A dynamic body is fully simulated. + * They can be moved manually by the user, but normally they move according to forces. + * A dynamic body can collide with all body types. + * A dynamic body always has finite, non-zero mass. + * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate. + */ export type BodyType = "static" | "kinematic" | "dynamic"; /** @internal */ const STATIC = "static"; @@ -155,30 +174,11 @@ export interface MassData { * To create a new Body use {@link World.createBody}. */ export class Body { - /** - * A static body does not move under simulation and behaves as if it has infinite mass. - * Internally, zero is stored for the mass and the inverse mass. - * Static bodies can be moved manually by the user. - * A static body has zero velocity. - * Static bodies do not collide with other static or kinematic bodies. - */ + /** @hidden */ static readonly STATIC: BodyType = "static"; - /** - * A kinematic body moves under simulation according to its velocity. - * Kinematic bodies do not respond to forces. - * They can be moved manually by the user, but normally a kinematic body is moved by setting its velocity. - * A kinematic body behaves as if it has infinite mass, however, zero is stored for the mass and the inverse mass. - * Kinematic bodies do not collide with other kinematic or static bodies. - */ + /** @hidden */ static readonly KINEMATIC: BodyType = "kinematic"; - - /** - * A dynamic body is fully simulated. - * They can be moved manually by the user, but normally they move according to forces. - * A dynamic body can collide with all body types. - * A dynamic body always has finite, non-zero mass. - * If you try to set the mass of a dynamic body to zero, it will automatically acquire a mass of one kilogram and it won't rotate. - */ + /** @hidden */ static readonly DYNAMIC: BodyType = "dynamic"; /** @internal */ m_world: World; @@ -218,7 +218,7 @@ export class Body { /** @internal */ m_next: Body | null; /** @internal */ m_destroyed: boolean; - /** Styling for dev-tools. */ + /** @hidden Styling for dev-tools. */ style: Style = {}; /** @hidden @experimental Similar to userData, but used by dev-tools or runtime environment. */ @@ -715,7 +715,7 @@ export class Body { /** * Set the angular velocity. * - * @param omega The new angular velocity in radians/second. + * @param w The new angular velocity in radians/second. */ setAngularVelocity(w: number): void { if (this.m_type == STATIC) { diff --git a/src/dynamics/World.ts b/src/dynamics/World.ts index 091f83f6..03275cdd 100644 --- a/src/dynamics/World.ts +++ b/src/dynamics/World.ts @@ -101,6 +101,25 @@ export type WorldRayCastCallback = (fixture: Fixture, point: Vec2, normal: Vec2, */ export type WorldAABBQueryCallback = (fixture: Fixture) => boolean; +declare module "./World" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function World(deg: WorldDef): World; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function World(gravity: Vec2): World; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function World(): World; +} + +/** + * The `World` class contains the bodies and joints. It manages all aspects + * of the simulation and allows for asynchronous queries (like AABB queries + * and ray-casts). Much of your interactions with Planck.js will be with a + * World object. + */ +// @ts-expect-error export class World { /** @internal */ m_solver: Solver; /** @internal */ m_broadPhase: BroadPhase; @@ -132,7 +151,7 @@ export class World { /** * @param def World definition or gravity vector. */ - constructor(def?: WorldDef | Vec2 | null) { + constructor(def?: WorldDef | Vec2Value) { if (_CONSTRUCTOR_FACTORY && !(this instanceof World)) { return new World(def); } diff --git a/src/dynamics/joint/DistanceJoint.ts b/src/dynamics/joint/DistanceJoint.ts index eb89e9d1..0b1c523d 100644 --- a/src/dynamics/joint/DistanceJoint.ts +++ b/src/dynamics/joint/DistanceJoint.ts @@ -84,10 +84,20 @@ export interface DistanceJointDef extends JointDef, DistanceJointOpt { dampingRatio : 0.0 }; +declare module "./DistanceJoint" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function DistanceJoint(def: DistanceJointDef): DistanceJoint; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function DistanceJoint(def: DistanceJointOpt, bodyA: Body, bodyB: Body, anchorA: Vec2Value, anchorB: Vec2Value): DistanceJoint; +} + /** * A distance joint constrains two points on two bodies to remain at a fixed * distance from each other. You can view this as a massless, rigid rod. */ +// @ts-expect-error export class DistanceJoint extends Joint { static TYPE = "distance-joint" as const; diff --git a/src/dynamics/joint/FrictionJoint.ts b/src/dynamics/joint/FrictionJoint.ts index f062af87..24362763 100644 --- a/src/dynamics/joint/FrictionJoint.ts +++ b/src/dynamics/joint/FrictionJoint.ts @@ -72,10 +72,20 @@ export interface FrictionJointDef extends JointDef, FrictionJointOpt { maxTorque : 0.0, }; +declare module "./FrictionJoint" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function FrictionJoint(def: FrictionJointDef): FrictionJoint; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function FrictionJoint(def: FrictionJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): FrictionJoint; +} + /** * Friction joint. This is used for top-down friction. It provides 2D * translational friction and angular friction. */ +// @ts-expect-error export class FrictionJoint extends Joint { static TYPE = "friction-joint" as const; diff --git a/src/dynamics/joint/GearJoint.ts b/src/dynamics/joint/GearJoint.ts index 3c82179a..a238c2a4 100644 --- a/src/dynamics/joint/GearJoint.ts +++ b/src/dynamics/joint/GearJoint.ts @@ -66,6 +66,15 @@ export interface GearJointDef extends JointDef, GearJointOpt { ratio : 1.0 }; +declare module "./GearJoint" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function GearJoint(def: GearJointDef): GearJoint; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function GearJoint(def: GearJointOpt, bodyA: Body, bodyB: Body, joint1: RevoluteJoint | PrismaticJoint, joint2: RevoluteJoint | PrismaticJoint, ratio?: number): GearJoint; +} + /** * A gear joint is used to connect two joints together. Either joint can be a * revolute or prismatic joint. You specify a gear ratio to bind the motions @@ -79,6 +88,7 @@ export interface GearJointDef extends JointDef, GearJointOpt { * This definition requires two existing revolute or prismatic joints (any * combination will work). */ +// @ts-expect-error export class GearJoint extends Joint { static TYPE = "gear-joint" as const; diff --git a/src/dynamics/joint/MotorJoint.ts b/src/dynamics/joint/MotorJoint.ts index 4dc267db..eb942b70 100644 --- a/src/dynamics/joint/MotorJoint.ts +++ b/src/dynamics/joint/MotorJoint.ts @@ -74,11 +74,21 @@ export interface MotorJointDef extends JointDef, MotorJointOpt { correctionFactor : 0.3 }; +declare module "./MotorJoint" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function MotorJoint(def: MotorJointDef): MotorJoint; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function MotorJoint(def: MotorJointOpt, bodyA: Body, bodyB: Body): MotorJoint; +} + /** * A motor joint is used to control the relative motion between two bodies. A * typical usage is to control the movement of a dynamic body with respect to * the ground. */ +// @ts-expect-error export class MotorJoint extends Joint { static TYPE = "motor-joint" as const; diff --git a/src/dynamics/joint/MouseJoint.ts b/src/dynamics/joint/MouseJoint.ts index e353eb90..38dee1a7 100644 --- a/src/dynamics/joint/MouseJoint.ts +++ b/src/dynamics/joint/MouseJoint.ts @@ -78,6 +78,15 @@ export interface MouseJointDef extends JointDef, MouseJointOpt { dampingRatio : 0.7 }; +declare module "./MouseJoint" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function MouseJoint(def: MouseJointDef): MouseJoint; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function MouseJoint(def: MouseJointOpt, bodyA: Body, bodyB: Body, target: Vec2Value): MouseJoint; +} + /** * A mouse joint is used to make a point on a body track a specified world * point. This a soft constraint with a maximum force. This allows the @@ -90,6 +99,7 @@ export interface MouseJointDef extends JointDef, MouseJointOpt { * be used in the testbed. If you want to learn how to use the mouse joint, look * at the testbed. */ +// @ts-expect-error export class MouseJoint extends Joint { static TYPE = "mouse-joint" as const; diff --git a/src/dynamics/joint/PrismaticJoint.ts b/src/dynamics/joint/PrismaticJoint.ts index 8a2fb4a2..e980e453 100644 --- a/src/dynamics/joint/PrismaticJoint.ts +++ b/src/dynamics/joint/PrismaticJoint.ts @@ -124,12 +124,22 @@ export interface PrismaticJointDef extends JointDef, PrismaticJointOpt { motorSpeed : 0.0 }; +declare module "./PrismaticJoint" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function PrismaticJoint(def: PrismaticJointDef): PrismaticJoint; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function PrismaticJoint(def: PrismaticJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value): PrismaticJoint; +} + /** * A prismatic joint. This joint provides one degree of freedom: translation * along an axis fixed in bodyA. Relative rotation is prevented. You can use a * joint limit to restrict the range of motion and a joint motor to drive the * motion or to model joint friction. */ +// @ts-expect-error export class PrismaticJoint extends Joint { static TYPE = "prismatic-joint" as const; diff --git a/src/dynamics/joint/PulleyJoint.ts b/src/dynamics/joint/PulleyJoint.ts index 68d5c196..3eaba4e3 100644 --- a/src/dynamics/joint/PulleyJoint.ts +++ b/src/dynamics/joint/PulleyJoint.ts @@ -87,6 +87,15 @@ export interface PulleyJointDef extends JointDef, PulleyJointOpt { collideConnected : true }; +declare module "./PulleyJoint" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function PulleyJoint(def: PulleyJointDef): PulleyJoint; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function PulleyJoint(def: PulleyJointOpt, bodyA: Body, bodyB: Body, groundA: Vec2Value, groundB: Vec2Value, anchorA: Vec2Value, anchorB: Vec2Value, ratio: number): PulleyJoint; +} + /** * The pulley joint is connected to two bodies and two fixed ground points. The * pulley supports a ratio such that: length1 + ratio * length2 <= constant @@ -98,6 +107,7 @@ export interface PulleyJointDef extends JointDef, PulleyJointOpt { * anchor points with static shapes to prevent one side from going to zero * length. */ +// @ts-expect-error export class PulleyJoint extends Joint { static TYPE = "pulley-joint" as const; // static MIN_PULLEY_LENGTH: number = 2.0; // TODO where this is used? diff --git a/src/dynamics/joint/RevoluteJoint.ts b/src/dynamics/joint/RevoluteJoint.ts index 4aeef3be..c9d01d41 100644 --- a/src/dynamics/joint/RevoluteJoint.ts +++ b/src/dynamics/joint/RevoluteJoint.ts @@ -126,6 +126,15 @@ export interface RevoluteJointDef extends JointDef, RevoluteJointOpt { enableMotor : false }; +declare module "./RevoluteJoint" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function RevoluteJoint(def: RevoluteJointDef): RevoluteJoint; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function RevoluteJoint(def: RevoluteJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): RevoluteJoint; +} + /** * A revolute joint constrains two bodies to share a common point while they are * free to rotate about the point. The relative rotation about the shared point @@ -134,6 +143,7 @@ export interface RevoluteJointDef extends JointDef, RevoluteJointOpt { * relative rotation about the shared point. A maximum motor torque is provided * so that infinite forces are not generated. */ +// @ts-expect-error export class RevoluteJoint extends Joint { static TYPE = "revolute-joint" as const; diff --git a/src/dynamics/joint/RopeJoint.ts b/src/dynamics/joint/RopeJoint.ts index f7976e3d..23162d71 100644 --- a/src/dynamics/joint/RopeJoint.ts +++ b/src/dynamics/joint/RopeJoint.ts @@ -75,6 +75,15 @@ export interface RopeJointDef extends JointDef, RopeJointOpt { maxLength : 0.0, }; +declare module "./RopeJoint" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function RopeJoint(def: RopeJointDef): RopeJoint; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function RopeJoint(def: RopeJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): RopeJoint; +} + /** * A rope joint enforces a maximum distance between two points on two bodies. It * has no other effect. @@ -86,6 +95,7 @@ export interface RopeJointDef extends JointDef, RopeJointOpt { * sponginess, so I chose not to implement it that way. See {@link DistanceJoint} if you * want to dynamically control length. */ +// @ts-expect-error export class RopeJoint extends Joint { static TYPE = "rope-joint" as const; diff --git a/src/dynamics/joint/WeldJoint.ts b/src/dynamics/joint/WeldJoint.ts index 695c8e1c..c165b982 100644 --- a/src/dynamics/joint/WeldJoint.ts +++ b/src/dynamics/joint/WeldJoint.ts @@ -83,10 +83,20 @@ export interface WeldJointDef extends JointDef, WeldJointOpt { dampingRatio : 0.0, }; +declare module "./WeldJoint" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function WeldJoint(def: WeldJointDef): WeldJoint; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function WeldJoint(def: WeldJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value): WeldJoint; +} + /** * A weld joint essentially glues two bodies together. A weld joint may distort * somewhat because the island constraint solver is approximate. */ +// @ts-expect-error export class WeldJoint extends Joint { static TYPE = "weld-joint" as const; diff --git a/src/dynamics/joint/WheelJoint.ts b/src/dynamics/joint/WheelJoint.ts index 8653d53c..33ae4839 100644 --- a/src/dynamics/joint/WheelJoint.ts +++ b/src/dynamics/joint/WheelJoint.ts @@ -105,12 +105,22 @@ export interface WheelJointDef extends JointDef, WheelJointOpt { dampingRatio : 0.7, }; +declare module "./WheelJoint" { + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function WheelJoint(def: WheelJointDef): WheelJoint; + /** @hidden @deprecated Use new keyword. */ + // @ts-expect-error + function WheelJoint(def: WheelJointOpt, bodyA: Body, bodyB: Body, anchor: Vec2Value, axis: Vec2Value): WheelJoint; +} + /** * A wheel joint. This joint provides two degrees of freedom: translation along * an axis fixed in bodyA and rotation in the plane. In other words, it is a * point to line constraint with a rotational motor and a linear spring/damper. * This joint is designed for vehicle suspensions. */ +// @ts-expect-error export class WheelJoint extends Joint { static TYPE = "wheel-joint" as const; diff --git a/src/index.ts b/src/index.ts index 8a56cfc9..8e669981 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,13 +12,15 @@ export * from "./common/Transform"; export * from "./common/Rot"; export * from "./collision/AABB"; - +export * from "./collision/BroadPhase"; export * from "./collision/Shape"; + export * from "./dynamics/Fixture"; export * from "./dynamics/Body"; export * from "./dynamics/Contact"; export * from "./dynamics/Joint"; export * from "./dynamics/World"; +export * from "./dynamics/Solver"; export * from "./collision/shape/CircleShape"; export * from "./collision/shape/EdgeShape"; diff --git a/src/serializer/__test__/Validator.test.js b/src/serializer/__test__/Validator.test.js deleted file mode 100644 index 7b19cbba..00000000 --- a/src/serializer/__test__/Validator.test.js +++ /dev/null @@ -1,52 +0,0 @@ -const { default: Ajv } = await import('ajv'); -import { describe, it, expect } from 'vitest'; - -const { Vec2 } = await import( '../../common/Vec2'); -const { CircleShape } = await import( '../../collision/shape/CircleShape'); -const { BoxShape } = await import( '../../collision/shape/BoxShape'); -const { DistanceJoint } = await import( '../../dynamics/joint/DistanceJoint'); -const { World } = await import( '../../dynamics/World'); - -const { Serializer } = await import( '../'); - -const schema = await import('../schema.json'); - -describe('Serializer', function() { - var ajv = new Ajv(); - var validate = ajv.compile(schema); - - it('produces valid schema', function() { - var world = new World(); - - var circle = new CircleShape(1); - var box = new BoxShape(1, 1); - - var b1 = world.createBody({ - position : new Vec2(0, 0), - type : 'dynamic' - }); - - b1.createFixture(circle); - - var b2 = world.createBody({ - position : new Vec2(2, 0), - type : 'dynamic' - }); - b2.createFixture(box); - - world.createJoint(new DistanceJoint({ - bodyA: b1, - localAnchorA: new Vec2(6, 0), - bodyB: b2, - localAnchorB: new Vec2(0, -1) - })); - - var json = Serializer.toJson(world); - - // console.log(JSON.stringify(json, null, ' ')); - - var valid = validate(json); - console.log(valid || validate.errors); - expect(valid).be.true; - }); -}); diff --git a/src/serializer/__test__/Validator.test.ts b/src/serializer/__test__/Validator.test.ts new file mode 100644 index 00000000..f628f5a8 --- /dev/null +++ b/src/serializer/__test__/Validator.test.ts @@ -0,0 +1,52 @@ +import Ajv from "ajv"; +import { describe, it, expect } from "vitest"; + +import { Vec2 } from "../../common/Vec2"; +import { CircleShape } from"../../collision/shape/CircleShape"; +import { BoxShape } from "../../collision/shape/BoxShape"; +import { DistanceJoint } from "../../dynamics/joint/DistanceJoint"; +import { World } from "../../dynamics/World"; + +import { Serializer } from ".."; + +import schema from "../schema.json"; + +describe("Serializer", function() { + var ajv = new Ajv(); + var validate = ajv.compile(schema); + + it("produces valid schema", function() { + var world = new World(); + + var circle = new CircleShape(1); + var box = new BoxShape(1, 1); + + var b1 = world.createBody({ + position : new Vec2(0, 0), + type : "dynamic" + }); + + b1.createFixture(circle); + + var b2 = world.createBody({ + position : new Vec2(2, 0), + type : "dynamic" + }); + b2.createFixture(box); + + world.createJoint(new DistanceJoint({ + bodyA: b1, + localAnchorA: new Vec2(6, 0), + bodyB: b2, + localAnchorB: new Vec2(0, -1) + })); + + var json = Serializer.toJson(world); + + // console.log(JSON.stringify(json, null, " ")); + + var valid = validate(json); + console.log(valid || validate.errors); + expect(valid).be.true; + }); +}); diff --git a/testbed/StageTestbed.ts b/testbed/StageTestbed.ts index 58a99cf1..a27be05b 100644 --- a/testbed/StageTestbed.ts +++ b/testbed/StageTestbed.ts @@ -1,4 +1,4 @@ -import Stage from "stage-js"; +import * as Stage from "stage-js"; import type { Vec2Value } from "../src/common/Vec2"; import type { World } from "../src/dynamics/World"; @@ -131,7 +131,7 @@ function findBody(world: World, point: Vec2Value) { } /** @internal */ -class StageTestbed extends Testbed { +export class StageTestbed extends Testbed { private canvas: HTMLCanvasElement; private stage: Stage.Root; private paused: boolean = false; diff --git a/testbed/index.ts b/testbed/index.ts index 2b653bdb..d4552221 100644 --- a/testbed/index.ts +++ b/testbed/index.ts @@ -1,2 +1,2 @@ export * from "../src/index"; -import "./StageTestbed"; \ No newline at end of file +export * from "./StageTestbed"; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index da2047d0..1856bb30 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,26 +1,25 @@ { - "ts-node": { - "esm": true, - "experimentalSpecifierResolution": "node", - "compilerOptions": { - "typeRoots" : ["./node_modules/@types", "./types"] - } - }, "compilerOptions": { "module": "ES2015", - // "strictNullChecks": true, - // "noImplicitAny": true, + "strictNullChecks": false, + "noImplicitAny": false, "lib": ["ES2015", "DOM"], "stripInternal": true, "target": "ES5", "esModuleInterop": true, "moduleResolution": "Node", "resolveJsonModule": true, + "allowJs": true, + "typeRoots": ["./types"], + "skipLibCheck": true, }, "exclude": [ "node_modules", "example", "benchmark", + "docs", + "vite.config.*", + "test-d/", "dist" ] } diff --git a/typedoc.json b/typedoc.json index 15081cb0..ae764968 100644 --- a/typedoc.json +++ b/typedoc.json @@ -1,11 +1,9 @@ { "name": "API Reference", - "readme": "./docs/pages/misc/api-reference.md", - "inputFiles": ["./src", "./testbed"], + "readme": "none", + "entryPoints": ["./src"], "out": "./docs/pages/api/", - "publicPath": "/api/", - "mode": "file", - "includeDeclarations": false, + "basePath": "/api/", "exclude": [ "**/*.test-d.ts", "**/*.test.ts", @@ -16,6 +14,7 @@ "src/util/Pool*", "src/util/Timer*", "src/common/Matrix*", + "node_modules/*", "testbed/*", "docs/*", "dist/*" @@ -23,7 +22,9 @@ "disableSources": true, "excludeExternals": true, "excludePrivate": true, - "stripInternal": true, - "excludeNotExported": true, - "hideBreadcrumbs": true + "excludeInternal": true, + "hideBreadcrumbs": true, + "hidePageHeader": true, + "mergeReadme": true, + "plugin": ["typedoc-plugin-markdown"] } diff --git a/types/globals/index.d.ts b/types/globals/index.d.ts index c10d55a2..61b658d4 100644 --- a/types/globals/index.d.ts +++ b/types/globals/index.d.ts @@ -1,5 +1,4 @@ declare const CONSTRUCTOR_FACTORY: boolean | undefined; declare const ASSERT: boolean | undefined; -declare const PLANCK_VERSION: string | undefined; declare const planck: typeof import("../../src/main"); \ No newline at end of file diff --git a/vite.config.js b/vite.config.js deleted file mode 100644 index 958d55c0..00000000 --- a/vite.config.js +++ /dev/null @@ -1,40 +0,0 @@ -const { execSync } = require('child_process'); - -// this plugin serves the testbed when the url points to an example -const TestbedPlugin = { - name: 'testbed-plugin', - configureServer(server) { - server.middlewares.use((req, res, next) => { - // console.log('middleware', req); - // todo: check if the url + '.js' or '.ts' is a file - if (/^\/example\/(\w|-)+$/.test(req.originalUrl)) { - req.url = '/testbed/'; - } - next(); - }) - } -} - -export default () => { - const commitDate = execSync('git log -1 --format=%cI').toString().trimEnd(); - const branchName = execSync('git rev-parse --abbrev-ref HEAD').toString().trimEnd(); - const commitHash = execSync('git rev-parse HEAD').toString().trimEnd(); - const lastCommitMessage = execSync('git show -s --format=%s').toString().trimEnd(); - - process.env.VITE_GIT_COMMIT_DATE = commitDate; - process.env.VITE_GIT_BRANCH_NAME = branchName; - process.env.VITE_GIT_COMMIT_HASH = commitHash; - process.env.VITE_GIT_LAST_COMMIT_MESSAGE = lastCommitMessage; - - return { - define: { - ASSERT: "false", - _ASSERT: "false", - CONSTRUCTOR_FACTORY: "false", - _CONSTRUCTOR_FACTORY: "false", - }, - plugins: [ - TestbedPlugin, - ] - }; -}; diff --git a/vite.config.mts b/vite.config.mts new file mode 100644 index 00000000..68edaeb1 --- /dev/null +++ b/vite.config.mts @@ -0,0 +1,125 @@ +import { execSync } from "child_process"; +import path from "path"; +import { defineConfig, normalizePath, type ConfigEnv, type Plugin } from "vite"; +import dtsBundleGenerator from "vite-plugin-dts-bundle-generator"; +import typescript from "vite-plugin-typescript"; +import rollupLicensePlugin from "rollup-plugin-license"; + +export default function viteConfig(configEnv: ConfigEnv) { + const isServe = configEnv.command === "serve"; + if (isServe) { + return serveConfig(configEnv); + } + const buildTestbed = process.env.BUILD_TESTBED === "true"; + return buildConfig(configEnv, buildTestbed); +} + +function buildConfig(configEnv: ConfigEnv, buildTestbed: boolean) { + const filename = buildTestbed ? "planck-with-testbed" : "planck"; + const entry = normalizePath(path.resolve(__dirname, buildTestbed ? "testbed" : "src", "main.ts")); + + return defineConfig({ + define: { + ASSERT: "false", + _ASSERT: "false", + CONSTRUCTOR_FACTORY: "true", + _CONSTRUCTOR_FACTORY: "true", + }, + build: { + lib: { + entry: entry, + name: "planck", + fileName: function (format) { + if (format === "umd") { + return filename + ".js"; + } else if (format === "es") { + return filename + ".mjs"; + } + return filename + "." + format + ".js"; + }, + formats: ["es", "umd"], + }, + emptyOutDir: false, + minify: false, + sourcemap: true, + }, + plugins: [ + rollupLicensePlugin({ + banner: getLicense(), + }) as Plugin, + typescript({}), + dtsBundleGenerator({ + fileName: filename + ".d.ts", + }) + ] + }); +} + +function serveConfig(configEnv: ConfigEnv) { + const commitDate = execSync("git log -1 --format=%cI").toString().trimEnd(); + const branchName = execSync("git rev-parse --abbrev-ref HEAD").toString().trimEnd(); + const commitHash = execSync("git rev-parse HEAD").toString().trimEnd(); + const lastCommitMessage = execSync("git show -s --format=%s").toString().trimEnd(); + + // used in benchmark + process.env.VITE_GIT_COMMIT_DATE = commitDate; + process.env.VITE_GIT_BRANCH_NAME = branchName; + process.env.VITE_GIT_COMMIT_HASH = commitHash; + process.env.VITE_GIT_LAST_COMMIT_MESSAGE = lastCommitMessage; + + return defineConfig({ + define: { + ASSERT: "false", + _ASSERT: "false", + CONSTRUCTOR_FACTORY: "false", + _CONSTRUCTOR_FACTORY: "false", + }, + plugins: [ + TestbedPlugin, + ] + }); +} + +/** A plugin to serve the testbed for /example/* request */ +const TestbedPlugin: Plugin = { + name: "testbed-plugin", + configureServer(server) { + server.middlewares.use(function (req, res, next) { + // console.log("middleware", req); + // todo: check if the url + ".js" or ".ts" is a file + if (req.originalUrl && /^\/example\/(\w|-)+$/.test(req.originalUrl)) { + req.url = "/testbed/"; + } + next(); + }); + } +}; + +function getLicense() { + const version = process.env.npm_package_version; + const year = new Date().getFullYear(); + const license = ` +Planck.js v${version ?? "?"} +@license The MIT license +@copyright Copyright (c) ${year} Erin Catto, Ali Shakiba + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + `; + return license; +} \ No newline at end of file